Repository navigation
Conversation
…e_e= keywords
Spec section 9 "4.0 cut sequence" item 3. Thirteen ledger rows flip terminal
under the open cut window (__version__ stays 3.13.0): M-020..M-027 (the eight
estimators' fit(aggregate=)), M-117..M-120 (fit(balance_e=) on CS / Imputation /
TwoStage / EfficientDiD) and M-139 (did_had_pretest_workflow(aggregate=)).
- Passing aggregate= / balance_e= to fit() is a native TypeError; the successor
is the post-fit results.aggregate(type, balance_e=). HAD and the pretest
workflow select their mode from the panel shape (_infer_aggregate_mode is
the sole selector; the HADPretestReport.aggregate FIELD survives).
- CS / EfficientDiD compute no event-study/group surface at fit any more
(post-fit replay covers bootstrapped fits); their legacy fields are None on
every fit. Positional slots shift: survey_design 9->7 (+ EDiD store_eif
10->8); StackedDiD population/survey_design/covariates 7/8/9->6/7/8;
ContinuousDiD survey_design/covariates 8/9->7/8; dCDH L_max..survey_design
each one left.
- Bootstrapped ImputationDiD / TwoStageDiD / ContinuousDiD fits ALWAYS
materialize the event-study (+ group) surfaces with the existing fit-time
bootstrap code and aggregate('event_study' | 'group') RELAYS them with
kit-snapshot provenance (NaN df, no vcov); balance_e on such a fit fails
closed (NotImplementedError). Materialization is fail-soft with a one-shot
overall-only retry, and surfaces are stored iff the fit carries bootstrap
inference, so a plain bootstrapped fit's overall quintet and its
success/abort outcome are unchanged; analytic fits are untouched (kit
recompute). ContinuousDiD's "eventstudy" spelling dies with the param.
- Steering messages, guides, API rst, migration guide, REGISTRY / REPORTING /
variance-conventions Notes, TODO rows, benchmarks (fit + post-fit aggregate
workload, readers rewired to the containers) and two notebook markdown
cells updated; DiagnosticReport / BusinessReport / plot_event_study now
run on the relayed surfaces of bootstrapped relay-adopter fits.
- Tests: tests/test_aggregate_contract.py converted from fit-time-reference
parity to committed per-backend numeric oracles
(tests/fixtures/v4_aggregate_oracles.json, captured on the unmodified tree
by tests/_capture_v4_aggregate_oracles.py), removal pins, relay / storage
rule / failure-injection pins; ~45 suites migrated to the containers via
tests/helpers/legacy_surface.py; naming-guard allowlist and guide pins
updated; warn_deprecated_kwarg keeps a unit pin.
This was referenced Oct 19, 2026
Owner
Author
|
Closing in favour of the three-way split; the first piece is #863 (3a, tests-first). 3b and 3c follow once it merges. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
PR 3 of the 4.0 cut (
docs/v4-design.mdsection 9 "4.0 cut sequence", item 3). The deprecated fit-time aggregation keywords are removed and 13 ledger rows flip terminal under the cut window opened by #854: M-020..M-027 (fit(aggregate=)on CallawaySantAnna, ImputationDiD, TwoStageDiD, EfficientDiD, StackedDiD, ContinuousDiD, ChaisemartinDHaultfoeuille, HeterogeneousAdoptionDiD), M-117..M-120 (fit(balance_e=)on CS / Imputation / TwoStage / EfficientDiD) and M-139 (did_had_pretest_workflow(aggregate=)).__version__stays3.13.0.aggregate=/balance_e=tofit()is a nativeTypeError; the successor is post-fitresults.aggregate(type, balance_e=). HAD and the pretest workflow select their mode from the panel shape (_infer_aggregate_modeis the sole selector; theHADPretestReport.aggregatefield survives as output metadata). ContinuousDiD's"eventstudy"spelling dies with the keyword; StackedDiD'sgroup/allValueErrors die with it (aggregate("group")raises the mixin's vocabulary error).aggregate()replays bootstrapped fits); their legacyevent_study_effects/group_effects/event_study_vcov/cband_crit_value/event_study_dffields areNoneon every fit (retired later by M-093).aggregate("event_study")/aggregate("group")relay them (kit-snapshot provenance, NaN df column, no vcov). Today those levels fail closed on bootstrapped fits, so the removed keyword was the only route to bootstrap event-study inference there.balance_eon such a fit raisesNotImplementedError. Materialization is fail-soft with a one-shot overall-only retry, and surfaces are stored iff the fit carries bootstrap inference, so a plain bootstrapped fit's overall quintet and its success/abort outcome are unchanged; analytic fits recompute from the kit exactly as before.survey_design9 -> 7 on CS / Imputation / TwoStage / EfficientDiD (EDiDstore_eif10 -> 8); StackedDiDpopulation/survey_design/covariates7/8/9 -> 6/7/8; ContinuousDiDsurvey_design/covariates8/9 -> 7/8; dCDHL_maxthroughsurvey_designeach one slot left; HAD none._ABSENT_SURFACE_HINTS,practitioner_next_steps, the plotter's unsupported-input message, DiagnosticReport comments; DiagnosticReport / BusinessReport /plot_event_studynow run on the relayed surfaces of bootstrapped relay-adopter fits. Guides (llms*.txt), API rst, troubleshooting, performance docs, migration guide (warning box + appendix rows + slot shifts), REGISTRY Notes (incl. three newNote (bootstrapped-fit relay, 4.0)entries), REPORTING / variance-conventions, TODO rows 40-41, spec section 6 amendment + item 3 shipped, two notebook markdown cells, benchmarks (fit + post-fit aggregate workload; legacy-field readers rewired to the containers, same emitted JSON shape).Methodology references (required if estimator / math changes)
docs/methodology/REGISTRY.mdunder the three estimators'Note (bootstrapped-fit relay, 4.0)entries and indocs/v4-design.mdsection 6.Validation
tests/test_aggregate_contract.pyconverted from fit-time-reference parity to committed per-backend numeric oracles (tests/fixtures/v4_aggregate_oracles.json, captured on the unmodified tree at 8724fec bytests/_capture_v4_aggregate_oracles.py, numpy + rust weight streams), removal pins, relay / storage-rule / failure-injection pins; ~45 suites migrated to the containers through the newtests/helpers/legacy_surface.py;tests/test_naming_guard.pyallowlist,tests/test_guides.pyabsence pins,tests/test_practitioner.py,tests/test_v4_rename_mechanical.py(warn_deprecated_kwargunit pin).-W error::FutureWarning -W error::DeprecationWarning(1,883 passed); black / ruff / mypy clean;changelog_compile.py checkOK; Sphinx-Wbuild clean; benchmarkspy_compile+ smoke; oracle parity on both backends (max deviation 1.8e-15 analytic, 0.0 bootstrapped). Due-count probe 0 / 76 / 43 at 3.13.0 / 3.14.0 / 4.0.0 (the 4.0 count drops by the 13 flipped rows).Security / privacy
Changelog
changelog.d/20261019-v4-pr3-aggregate-removals.md