v0.1.0
What's Changed
- Typed cell constraints and dynamic OFFSET/INDIRECT engine by @chriscarrollsmith in #14
- Tooling for overriding constant classification by @chriscarrollsmith in #24
- iterate=false verification and output file size reduction by @chriscarrollsmith in #26
- Resolve standalone INDEX dependencies via constraint-based inference by @chriscarrollsmith in #32
- Identity-transit graph compression and dependency provenance by @chriscarrollsmith in #37
- Fully implement working constraints for all INDEX dependencies of the LIC DSF workbook by @chriscarrollsmith in #41
- Support relational cell constraints for dynamic-ref analysis by @chriscarrollsmith in #43
- Fix GreaterThanCell / NotEqualCell for quoted sheet names (#44) by @chriscarrollsmith in #45
- Normalize keys in constraints_to_cell_type_env (follow-up to #44) by @chriscarrollsmith in #46
- Test: normalized keys in constraints_to_cell_type_env (#46) by @chriscarrollsmith in #47
- Match format_key addresses to normalized cell_type_env (PR #46 follow-up) by @chriscarrollsmith in #48
- CellTypeEnv key normalization API; unary % abstract analysis by @chriscarrollsmith in #49
- Add RealBetween / real-interval domains for dynamic refs (#40) by @chriscarrollsmith in #50
- Handle cycles in expand_leaf_env_to_argument_env (issue #54) by @chriscarrollsmith in #55
- fix: align dynamic-ref AST range collection with builder BFS (#56) by @chriscarrollsmith in #57
- fix: include cell address in ValueError for invalid OFFSET base by @chriscarrollsmith in #63
- feat: implement VLOOKUP (#58) by @chriscarrollsmith in #64
- fix: guard fallback product-enumeration against combinatorial explosion by @chriscarrollsmith in #66
- fix: add per-call OFFSET fan-out guard (#65) by @chriscarrollsmith in #68
- perf: single-pass FormulaNormalizer with result caching (fixes #59, #60, #70) by @chriscarrollsmith in #71
- perf: avoid duplicating dynamic-ref work when capture_dependency_provenance=True (fixes #61) by @chriscarrollsmith in #74
- ci: add GitHub Actions workflow for PRs by @chriscarrollsmith in #72
- perf: bounded parser caches and per-build worksheet cache (fixes #73) by @chriscarrollsmith in #75
- feat: add list_dynamic_ref_constraint_candidates (fixes #76) by @chriscarrollsmith in #77
- Benchmark + optimize dynamic-ref constraint enumeration blowups by @chriscarrollsmith in #82
- Lightweight visualization for massive workbooks (#36) by @chriscarrollsmith in #53
- Optimize cached dependency graph pickle load (#87) by @chriscarrollsmith in #89
- Diagnostic script for dynamic-ref constraint candidate analysis (#86) by @chriscarrollsmith in #88
- Branch-sensitive pruning for dynamic-ref analysis (#85) by @chriscarrollsmith in #90
- Add JSON dependency graph cache API by @chriscarrollsmith in #91
- Blank-range declarations: prune structurally empty cells from graph and generated code by @chriscarrollsmith in #52
- feat(dynamic-refs): first-class tracing for dynamic-ref inference by @chriscarrollsmith in #94
- Persistent memoization cache for dynamic-ref type analysis (#84) by @chriscarrollsmith in #95
- Introduce a distinction between unit and integration tests, with integration tests documenting behavior in natural language by @chriscarrollsmith in #126
- Fully pluggable lightweight viz layout and viewer, powered by networkX by @chriscarrollsmith in #129
- Normalize guards for mutually exclusive cycle detection by @chriscarrollsmith in #134
- Integrate proposed differential tests into test suite and register xl_not function by @chriscarrollsmith in #140
- fix: avoid false-positive dynamic ref errors for static OFFSET/INDIRECT by @chriscarrollsmith in #146
- Redesign constraints API: dict[str, type] for dynamic refs (closes #135) by @chriscarrollsmith in #147
- Support passing defined range names and sheet-qualified ranges as targets (e.g., by range expansion) by @chriscarrollsmith in #150
- Expand rather than split ranges in list_dynamic_ref_constraint_candid… by @chriscarrollsmith in #152
- Fix INDIRECT/range text parsing and document safe range handling (#151) by @chriscarrollsmith in #157
- fix(grapher): absolute cross-sheet refs and address-like sheet names by @chriscarrollsmith in #159
- Spurious corner edges (top-left, bottom-right) from the array range argument are eliminated by @chriscarrollsmith in #158
- Unify formula normalization and enforce normalized_formula invariant by @chriscarrollsmith in #161
- Fix cross-sheet OFFSET dynamic dependencies by @chriscarrollsmith in #163
- Refresh LIC-DSF dependency graph cache after extraction fixes. by @chriscarrollsmith in #165
- Add path-induced subgraph helper and induced graph example by @chriscarrollsmith in #167
- Add target-aware nodes and codegen target defaults by @chriscarrollsmith in #169
- feat(grapher): optional row/column label detection on graph nodes by @chriscarrollsmith in #170
- Add remaining label-detection scan behaviors by @chriscarrollsmith in #174
- Rename composite scan and add top_edge_then_left_scan by @chriscarrollsmith in #179
- Fix top-edge scan region bounds and merged-header handling by @chriscarrollsmith in #181
- Add workbook-order NodeKey sorting helpers by @chriscarrollsmith in #183
- Support named ranges in CodeGenerator entrypoints by @chriscarrollsmith in #186
- Add NormalizedAddress type alias (closes #191) (#193) by @chriscarrollsmith in #194
- Add declarative series bindings by @chriscarrollsmith in #196
- Add series-binding input series API by @chriscarrollsmith in #197
- Add output series bindings and records-shaped compute functions by @chriscarrollsmith in #200
- Avoid eager INDEX range reads on pruned graph cells by @chriscarrollsmith in #204
- Fail loudly on malformed bindings and duplicate shard ids by @chriscarrollsmith in #206
- Redesign generate_modules API by @chriscarrollsmith in #208
- Add structured series docstring callback registry by @chriscarrollsmith in #210
- Implement pluggable series docstring renderers by @chriscarrollsmith in #213
- Support keyless scalar series bindings by @chriscarrollsmith in #216
- Reduce generated API duplication by extracting shared setter helper by @chriscarrollsmith in #218
- Fix defined name support in series bindings schema by @chriscarrollsmith in #220
- Make codegen sequencing deterministic (closes #219) by @chriscarrollsmith in #221
- Retire entrypoint codegen in favor of series bindings by @chriscarrollsmith in #222
- Create a comprehensive package documentation website with Great Docs by @chriscarrollsmith in #227
- Standardize extension point customization UX by @chriscarrollsmith in #229
- Expose exporter, grapher, and series_bindings in great-docs API reference by @chriscarrollsmith in #234
- Rename row series by @sparakala21 in #236
- Publish to PyPI by @chriscarrollsmith in #245
New Contributors
- @sparakala21 made their first contribution in #236
Full Changelog: https://github.com/Teal-Insights/excel-grapher/commits/v0.1.0