You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Commit a396044
Browse filesBrowse the repository at this point in the historyBrowse files
refactor phase 3a: break the core knot — the import graph is now a DAG (#298)
* test: SQL-snapshot corpus guarding the phase-3 compiler restructure
Ten representative query shapes (flat agg, filters+order+limit, derived
time dim, join_one, join_many fan-out pre-agg, mean decomposition, calc
percent-of-total, three-way join, filtered join, JSON query path)
compile to golden SQL files. Any compilation-output drift during the
restructure fails loudly; BSL_UPDATE_SNAPSHOTS=1 regenerates after an
intentional change.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
* refactor: ops no longer imports expr, query, or format — the compiler leaves the SCC
- The 12 lazy 'from .expr import' sites (fluent wrapper construction on
SemanticJoinOp/SemanticIndexOp, _semantic_table) and the build_query
site now go through documented call-time module accessors — the same
upward-dispatch pattern as .chart(); follow-up moves those methods
onto the wrappers entirely
- expr.SemanticJoin.group_by/filter construct their wrappers directly
instead of ping-ponging through the op layer
- _collect_struct (flavor-aware struct collection — nest lowering)
moves from expr.py down into ops.py where it's consumed
- The SemanticUnnest isinstance check duck-types on SemanticUnnestOp
- ops imports fmt from ibis directly (same singledispatch registry the
format module registers handlers on) instead of importing format
- The SCC scanner now skips TYPE_CHECKING blocks: type-only imports are
not runtime edges
SQL snapshots byte-identical; SCC: 10 -> 5 modules (expr/query/api +
serialization/{__init__,reconstruct}).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
* refactor: the import graph is a DAG — SCC allowlist emptied
expr's .query()/.compare_periods() and to_tagged() convenience methods
now dispatch upward at call time (the .chart() pattern) instead of
importing the query and serialization layers. That was the last cycle:
Tarjan over the full graph (lazy imports included) finds zero
non-trivial SCCs. The ratchet now enforces permanent acyclicity.
Full suite green (1703 passed, exit 0); SQL snapshots byte-identical.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
---------
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
0 commit comments