Skip to content

Releases: igerber/diff-diff

v3.13.0

Choose a tag to compare

@igerber igerber released this 17 Oct 15:52
14beb44

What's Changed

  • feat: TWFE weight diagnostics (twfeweights R port, re-scoped from #753) by @wenddymacro in #812
  • chore(deps-dev): bump ruff from 0.16.5 to 0.16.7 in the python-minor-patch group across 1 directory by @dependabot[bot] in #830
  • fix(dml): fail closed when cross-fit learners cannot be isolated by @shawcharles in #816
  • fix(staggered): carry the bootstrap event-study covariance instead of clearing it by @ilgrad in #839
  • fix(synthetic_control): put the treated unit in every in-space placebo's donor pool by @ilgrad in #841
  • fix(synthetic_control): solve the donor weights exactly by non-negative least squares by @ilgrad in #842
  • Bump version to 3.13.0 by @igerber in #850

New Contributors

Full Changelog: v3.12.0...v3.13.0

v3.12.0

Choose a tag to compare

@igerber igerber released this 08 Sep 13:03
ff03d08

What's Changed

  • docs(dml): Chang (2020) published-version + replication-code cross-check by @igerber in #810
  • fix(results): family-wide summary(alpha=) guard + honest dose-response bands (M-146 completion) by @igerber in #811
  • fix(results): exact fractional confidence-level labels family-wide by @igerber in #815
  • docs(methodology): Caetano, Callaway, Payne & Sant'Anna (2026) bad-controls paper review (PR-A) by @igerber in #819
  • fix(sdid): shape-only pre-treatment fit RMSE, level-gap field, placebo-anchored poor-fit warning by @igerber in #818
  • chore(deps-dev): bump ruff from 0.16.4 to 0.16.5 in the python-minor-patch group by @dependabot[bot] in #813
  • docs: add Deaner and Ku's duration DiD paper review by @igerber in #822
  • feat(dml): Caetano, Callaway, Payne & Sant'Anna (2026) bad-control lane on DMLDiD (PR-B) by @igerber in #829
  • feat(duration-did): add DurationDiD estimator (Deaner & Ku 2026 causal duration DiD) by @igerber in #827
  • Add WooldridgeDiD opt-out for comparison-support filtering by @igerber in #820
  • docs(tutorials): bad-controls tutorial notebook 33 (Caetano et al. 2026, PR-C) by @igerber in #831
  • Fix HC2 and HC2-BM finite variances at leverage one by @igerber in #823
  • Bump version to 3.12.0 by @igerber in #832

Full Changelog: v3.11.1...v3.12.0

v3.11.1

Choose a tag to compare

@igerber igerber released this 30 Aug 18:03
81cf631

What's Changed

  • docs(dml): tutorial 32 - double ML DiD (numbers-locked) by @igerber in #800
  • fix(survey): unit-level survey_metadata recompute reports raw weight scale by @igerber in #801
  • marketing: DMLDiD launch carousel (Circuit palette) + claims-sync guard by @igerber in #802
  • feat(provenance): per-row event-study df threading (M-092 completion) + ContinuousDiD unit-level metadata by @igerber in #803
  • chore(validation): shared n_bootstrap type guards + honest_did inference-df consolidation by @igerber in #804
  • test(dml): replicate Chang (2020) §4.2.2 RCS simulation DGP (DML PR-B2) by @igerber in #805
  • feat(tooling): changelog fragments - conflict-free parallel PRs by @igerber in #806
  • feat(dml): replicate-weight survey designs via IF-reweighting (per-cell + aggregate) by @igerber in #807
  • chore(infra): tracking-file guard, LWDiD data canary, /push-pr-update range scan + changelog compiler hardening by @igerber in #808
  • Bump version to 3.11.1 by @igerber in #809

Full Changelog: v3.11.0...v3.11.1

v3.11.0

Choose a tag to compare

@igerber igerber released this 29 Aug 12:03
d623a10

What's Changed

  • feat: DML infrastructure - cross-fitting, shared DR scores, ridge, learner protocol (PR-B0) by @igerber in #789
  • marketing: LWDiD launch carousel (Ledger palette) + claims-sync guard by @igerber in #790
  • feat(dml): DMLDiD estimator - Chang (2020) staggered panel ATT(g,t) (DML PR-B1) by @igerber in #793
  • feat(dml): DMLDiD panel=False repeated cross sections - Chang (2020) Case 2 (DML PR-B2) by @igerber in #794
  • chore(deps-dev): bump the python-minor-patch group with 2 updates by @dependabot[bot] in #792
  • fix: summary-alpha guard sweep, zero-SE plot gate, lambda-slope dedup, shared pscore_trim validator (DML follow-ups) by @igerber in #795
  • chore(deps): bump openai/codex-action from 1.11 to 1.12 in the actions-minor-patch group by @dependabot[bot] in #791
  • ci: pin openai/codex-action back to v1.11 (v1.12 hangs after turn completes) by @igerber in #797
  • ci: fix codex-action pin comment format to satisfy workflow contract test by @igerber in #798
  • feat(dml): DMLDiD survey-design and cluster support on both lanes (DML survey PR) by @igerber in #796
  • Bump version to 3.11.0 by @igerber in #799

Full Changelog: v3.10.0...v3.11.0

v3.10.0

Choose a tag to compare

@igerber igerber released this 22 Aug 20:21
2d41cbe

What's Changed

  • Loosen affine-equivariance p-value tolerance (BLAS-dependent CI flake) by @igerber in #777
  • test: anchor ImputationDiD coarser aux_partition variants against Stata did_imputation avgeffectsby() by @igerber in #779
  • feat(aggregation): CS post-fit aggregate() replays the multiplier bootstrap on bootstrapped fits (M-020) by @igerber in #780
  • feat: add LWDiD estimator (Lee & Wooldridge 2025, 2026) by @gorgeousfish in #588
  • marketing: MMM calibration launch carousel (Signal palette) + claims-sync guard by @igerber in #781
  • docs(lwdid): DR example exercises DR; exact-inference df cases enumerated by @igerber in #782
  • chore(deps-dev): bump ruff from 0.16.2 to 0.16.3 in the python-minor-patch group by @dependabot[bot] in #778
  • feat(aggregation): EfficientDiD post-fit aggregate() replays the bootstrap on bootstrapped fits (M-023) by @igerber in #783
  • docs(lwdid): tutorial 31 - rolling-transformation DiD (numbers-locked) by @igerber in #784
  • test: anchor LPDiD non-absorbing SEs against the authors' Stata lpdid package by @igerber in #785
  • docs(methodology): Chang (2020) DML DiD paper review (PR-A) by @igerber in #786
  • docs(lwdid): pre-release audit - guide coverage, scope-limitation docs, Rust parity tests by @igerber in #787
  • Bump version to 3.10.0 by @igerber in #788

New Contributors

Full Changelog: v3.9.1...v3.10.0

v3.9.1

Choose a tag to compare

@igerber igerber released this 17 Aug 12:10
82e4bd7

What's Changed

  • Bump undici to 7.29.0 in CI scripts lockfile (resolves 5 Dependabot alerts) by @igerber in #762
  • chore(deps): bump pypa/gh-action-pypi-publish from 1.14.1 to 1.14.2 in the actions-minor-patch group across 1 directory by @dependabot[bot] in #746
  • chore(deps-dev): bump ruff from 0.16.0 to 0.16.2 in the python-minor-patch group across 1 directory by @dependabot[bot] in #745
  • docs: migrate narrative RST off fit-time aggregate= (sweep PR-A) by @igerber in #763
  • docs: migrate tutorial notebooks off fit-time aggregate= (sweep PR-B) by @igerber in #764
  • feat: MMM exporters container mode (aggregation_result= + scale=) on the 3.9 aggregation surface by @igerber in #765
  • docs: Tutorial 28 - The Scholarship Illusion (sharp and fuzzy RDD) by @igerber in #766
  • feat(reports): DiagnosticReport consumes the post-fit aggregate('event_study') surface by @igerber in #767
  • feat: Meridian roi_calibration_period mask builder + to_code() array support by @igerber in #768
  • docs: add CJM 2020 paper review (density-test PR-A) by @igerber in #769
  • feat: results.aggregate('total') - estimator-owned totals for CS/EDiD/Imputation/TwoStage + MMM no-scale admission by @igerber in #770
  • feat(validation): family-wide anticipation domain validation (M-144) by @igerber in #771
  • feat(rdd): RDDensityTest - manipulation testing via local polynomial density estimation (CJM 2020, rddensity 3.0 parity) by @igerber in #772
  • LWDiD Stata parity arm + acceptance-suite re-anchor + REGISTRY amendments by @igerber in #773
  • docs: make all RST code examples runnable in Python by @wenddymacro in #760
  • feat: executed MMM calibration tutorials (PyMC-Marketing + Meridian) + CI interop canary by @igerber in #775
  • Bump version to 3.9.1 by @igerber in #776

Full Changelog: v3.9.0...v3.9.1

v3.9.0

Choose a tag to compare

@igerber igerber released this 10 Aug 13:41
777aa1d

What's Changed

  • docs: add rdplot paper review (CCT 2015 JASA) by @igerber in #694
  • docs: Tutorial 27 - When the Average Hides the Action (distributional DiD with CiC) by @igerber in #696
  • feat(rdd): RDPlot - optimal data-driven RD plots (CCT 2015, rdplot parity) by @igerber in #695
  • feat(reviewer-eval): N-arm matrix, blinded grading, corpus 2->11 for the GPT-5.6 evaluation by @igerber in #700
  • ci+local: upgrade AI PR reviewer model gpt-5.5 -> gpt-5.6-sol (effort xhigh) by @igerber in #701
  • docs(v4): 4.0 design spec + CI-enforced deprecation ledger (Phase 1) by @igerber in #697
  • chore(deps-dev): bump the python-minor-patch group with 3 updates by @dependabot[bot] in #687
  • docs: CiC launch carousel - "The effect your DiD can't see" (Tide deck) by @igerber in #702
  • docs(v4): diagnostic-family amendment - third object kind + RDPlot rename rows by @igerber in #704
  • docs: restructure RTD site around 5 top-level sections (IA overhaul) by @igerber in #703
  • ci(review): credit deferred rows in TODO.md OR DEFERRED.md (tracking-split prep 1/3) by @igerber in #698
  • docs: split tracking into TODO.md (actionable) / DEFERRED.md (registry) / docs/dev-status.md (split 2/3) by @igerber in #705
  • docs(claude): in-flight-work discovery + memory-hygiene rules in Workflow by @igerber in #707
  • test: CI-enforced docs IA guards (tests/test_docs_ia.py) by @igerber in #706
  • docs: tracking-split editorial polish - REGISTRY decision folds + history scrub (split 3/3) by @igerber in #708
  • feat: MMM calibration export (diff_diff.mmm) - PyMC-Marketing lift tests + Meridian ROI priors by @igerber in #699
  • test: anchor LPDiD regression-adjustment SE against Stata teffects (first Stata parity arm) by @igerber in #709
  • feat(v4): results-contract foundation - BaseResults, Diagnostic marker, unified event-study surface (Phase 2a) by @igerber in #710
  • Audit and harden Claude Code commands: retire 3 stale, purge dead GitHub MCP for gh CLI, add argv-safe helpers by @igerber in #711
  • test: anchor ImputationDiD leave-one-out SE against Stata did_imputation (2nd Stata arm) by @igerber in #712
  • Extract shared eval engine to tools/eval_core (workflow-eval step 1a) by @igerber in #714
  • docs: fix search-result excerpts (CSS-special anchors) + enable search-as-you-type by @igerber in #713
  • feat(v4): EventStudyResults full-vcov + per-row df round-trip (M-092 follow-up) by @igerber in #715
  • Add plan-review eval harness + content-hash plan-approval gate (workflow-eval step 1b) by @igerber in #716
  • docs: polish - version switcher, robots.txt, notebook H1 normalization, llms.txt landing links by @igerber in #721
  • plan-review: ship campaign-selected dual-reviewer engine as a .claude/skills/ skill (workflow-eval step 3) by @igerber in #725
  • feat(v4): complete event-study df provenance - SunAbraham/dCDH event_study_df, LPDiD pooled_df (M-092 follow-up) by @igerber in #726
  • docs(v4): gating-completeness amendment - mirrored renames, public-function sweep, un-rowed obligations by @igerber in #727
  • feat(v4): post-fit results.aggregate() contract + CallawaySantAnna (Phase 2b PR 1) by @igerber in #728
  • fix(v4): ETWFE reference-period normalization (#724) + Stata jwdid/csdid parity by @igerber in #729
  • feat(v4): ETWFE per-period comparison support - restore all-eventually-treated fits (W2025 Sec 5.4) by @igerber in #730
  • fix: make legacy dataset provenance explicit by @shawcharles in #723
  • chore(deps): bump the actions-minor-patch group across 1 directory with 2 updates by @dependabot[bot] in #717
  • chore(deps): bump actions/setup-node from 6.5.0 to 7.0.0 by @dependabot[bot] in #718
  • chore(deps): bump actions/setup-python from 6.3.0 to 7.0.0 by @dependabot[bot] in #719
  • chore(deps-dev): bump ruff from 0.15.21 to 0.16.0 in the python-minor-patch group across 1 directory by @dependabot[bot] in #720
  • feat(3.9): variance-conventions inventory + component-aware absorbed-FE rank (D3) by @igerber in #736
  • feat(3.9): converge clustered CR1 on K_reference - D1+D2 fix (M-126) by @igerber in #737
  • feat(3.9): tail-df consolidation - three-value df_convention knob + t(residual) defect fix (M-127) by @igerber in #738
  • docs(v4): planning consolidation - alias diet + canonical 3.9 sequence (M-132..M-135, M-063 cancelled) by @igerber in #739
  • test(v4): naming-completeness guard - section-8 surface sweep, section-9 phase-table agreement, rule-11 consumer coverage by @igerber in #740
  • refactor(v4): shared BaseEstimator mixin - transactional set_params library-wide (2(c)-i) by @igerber in #741
  • feat(v4): mechanical rename wave - canonical names with 3.9 FutureWarning shims (2(c)-ii PR-A, 32 rows) by @igerber in #742
  • feat(v4): semantic rename wave - post/control_group/vcov-only/level shims + missed-rename amendments (2(c)-ii PR-B, 15 rows) by @igerber in #743
  • feat(v4): EventStudyResults consumers + dCDH aggregate shim (2(b) PR-1, M-026) by @igerber in #744
  • feat(v4): StackedDiD post-fit aggregate() + honest/pretrends container admission (2(b) PR-2, M-024) by @igerber in #747
  • feat(v4): EfficientDiD post-fit aggregate() via a lazy recompute kit (2(b) PR-3a, M-023/M-120) by @igerber in #748
  • feat(v4): ImputationDiD + TwoStageDiD post-fit aggregate() via panel-backed kits (2(b) PR-3b, M-021/M-022/M-118/M-119) by @igerber in #749
  • feat(v4): ContinuousDiD post-fit aggregate() - mixed view/recompute adopter (2(b) PR-3c, M-025) by @igerber in #750
  • feat(v4): HAD post-fit aggregate() + mode inference; per-level bootstrap-gate convergence (2(b) PR-4, M-027/M-139) by @igerber in #751
  • feat(v4): deprecate the 8 estimator wrappers + alias diet via module getattr; SCM alias (2(d) PR-A, M-070..M-077/M-132..M-135/M-062) by @igerber in #752
  • feat(v4): n_bootstrap validation sweep + fail-closed inference selector (2(d) PR-B, M-081/M-096) by @igerber in #754
  • feat(v4): TWFE event-study mode absorbs MultiPeriodDiD - M-010/M-060/M-082 (phase 3(a)) by @igerber in #755
  • Raise the plan-review codex ceiling 1200s -> 2400s by @igerber in #757
  • TripleDifference absorbs StaggeredTripleDifference - M-013/M-064 (phase 3(b)) by @igerber in #756
  • ChangesInChanges absorbs QDiD via method= - M-015/M-143 (phase 3(c)) by @igerber in #758
  • 4.0 migration guide + R-equivalents argument table (phase 4) by @igerber in #759
  • Bump version to 3.9.0 by @igerber in #761

Full Changelog: v3.8.0...v3.9.0

v3.8.0

Choose a tag to compare

@igerber igerber released this 18 Jul 15:54
2e7fd3b

What's Changed

  • docs(tutorial-22): align last two survey/weights phrasings with the 3.7.x removal by @igerber in #660
  • perf(had): hoist Stute bootstrap loop invariants — bit-identical, ~2x by @igerber in #641
  • test(survey): true half-sample BRR replicate regressions per estimator family by @igerber in #648
  • refactor(utils): shared FE-dummy design build across DiD/MPD/TWFE by @igerber in #655
  • perf(spillover): sparse cKDTree branch for staggered nearest-treated distances by @igerber in #645
  • fix(imputation): FE-span snap guard on the pretrends lead model by @igerber in #650
  • docs(todo): drop two resolved Actionable rows (rust vcov determinism #653; HonestDiD B2b) by @igerber in #662
  • perf(linalg): scores-based CR2 Bell-McCaffrey DOF (algebraic identity; PT2018 §3.1 Satterthwaite) by @igerber in #656
  • fix(imputation): LSMR singular-variance fallback — no dense normal-matrix materialization by @igerber in #657
  • test(twfe): tighten live-R fixest parity bands to measured precision (SE-audit C7/C8) by @igerber in #663
  • docs(todo): close the SE-audit CI-lock row into its Deferred buckets by @igerber in #665
  • perf(linalg): low-rank factored CR2-BM adjustment operators (8-108x) by @igerber in #664
  • perf(two_stage): certified sparse-LSMR Stage-1 fallback — no dense normal-matrix materialization by @igerber in #666
  • feat(inference): opt-in df_convention="cluster" knob for clustered t/p/CI by @igerber in #667
  • perf(linalg): scores-based one-way Bell-McCaffrey DOF denominator by @igerber in #668
  • feat(conformal): one-sided alternatives + covariates in the CWZ proxy by @igerber in #669
  • perf(linalg): opt-in solve_ols normal-equations Cholesky fast path (DIFF_DIFF_SOLVE_OLS_FASTPATH) by @igerber in #670
  • docs(todo): waive the TWFE full-dummy dedup row (premise resolved by #655) by @igerber in #671
  • bench: 2026-07 public benchmark refresh harness with fail-closed publication gates by @igerber in #672
  • bench: publish 2026-07 refresh results - regenerated benchmarks page + committed artifacts by @igerber in #673
  • docs: replace README hero image with corrected DiD diagram by @igerber in #674
  • chore: clean package static-analysis findings by @shawcharles in #611
  • docs: add RDD paper reviews (CCT 2014, CCFT 2017, CCF 2018, CCFT 2019) by @igerber in #675
  • docs(carousel): speed & memory optimization story deck (v3.5.3 -> v3.7.0) by @igerber in #676
  • docs: add CiC/QDiD paper reviews (Athey-Imbens 2006, Callaway-Li-Oka 2018, Melly-Santangelo 2015, Ciaccio 2024) by @igerber in #678
  • chore: pin lint tooling + normalize source and hand-fixed test files (1/2) by @igerber in #677
  • chore: mechanical black/ruff normalization of remaining test files (2/2) by @igerber in #679
  • feat: rdrobust 4.0.0 sharp-RD bandwidth-selection port + R golden parity (RDD PR-1) by @igerber in #680
  • chore(deps): bump openai/codex-action from 1.9 to 1.11 in the actions-minor-patch group by @dependabot[bot] in #626
  • ci: ungated check-only Lint workflow (ruff + black) + blame-ignore + docs by @igerber in #681
  • feat: add ChangesInChanges (CiC) + QDiD distributional DiD estimators with qte golden parity by @igerber in #682
  • chore(types): mypy triage to enforceable zero + blocking CI job (3/3) by @igerber in #683
  • feat: RegressionDiscontinuity - sharp RD estimator with rdrobust 4.0.0 parity (RDD PR-2) by @igerber in #684
  • LWDiD precursor: canonical LW paper reviews + REGISTRY entry + Prop 99 / Walmart dataset loaders by @igerber in #685
  • feat: fuzzy regression discontinuity via treatment_col on RegressionDiscontinuity by @igerber in #686
  • feat: add covariate support to ChangesInChanges/QDiD (qte xformla parity) by @igerber in #688
  • LWDiD validation suite: skip-gated methodology acceptance tests + replication goldens (precursor #2 for #588) by @igerber in #689
  • feat(rdd): covariate-adjusted RD - covariates= on fit() with rdrobust 4.0.0 parity (CCFT 2019) by @igerber in #691
  • feat: dedicated practitioner_next_steps() handler for ChangesInChanges/QDiD by @igerber in #692
  • Bump version to 3.8.0 by @igerber in #693

Full Changelog: v3.7.0...v3.8.0

v3.7.0

Choose a tag to compare

@igerber igerber released this 09 Jul 00:51
7e14f80

What's Changed

  • docs: correct Dube et al. (2025) JAE citation to issue 7 by @igerber in #610
  • feat(had): cluster-robust event-study inference + clustered sup-t band by @igerber in #612
  • docs(cs): keep cluster= (not deprecate) + close TODO row by @igerber in #614
  • feat(interop): balance interop launch - composition-drift tutorial, contract tests, isolated interop CI job by @igerber in #613
  • perf(imputation,two_stage): shared MAP demeaning engine + zero-weight replicate fix by @igerber in #615
  • feat(continuous-did): covariate support (reg + dr) under conditional parallel trends by @igerber in #616
  • perf(staggered): O(n_units) CS aggregation IF assembly + R did 2.5.1 yardstick by @igerber in #617
  • fix(staggered): CS panel reg/ipw influence functions + per-cell SEs to DRDID parity by @igerber in #619
  • feat(continuous-did): discrete-treatment saturated regression (treatment_type="discrete") by @igerber in #618
  • fix(inference): three standard-error parity fixes vs canonical R by @igerber in #620
  • perf(bootstrap): fused column-tiled scatter-GEMM multiplier bootstrap (CS + EfficientDiD) by @igerber in #622
  • CS positional base period + absorbed-FE full-K SE parity vs R by @igerber in #621
  • feat(continuous-did): lowest-dose-as-control (control_group="lowest_dose", Remark 3.1) by @igerber in #623
  • test(se-audit): CI-lock flagship + previously-unasserted SE parity (G2 + C1-C3/C5) by @igerber in #624
  • perf(efficient_did): omega_ridge stabilization + fused tiled GEMM analytical path (43x) by @igerber in #625
  • fix(callaway): IF-based per-cell SE for no-covariate doubly-robust by @igerber in #627
  • test(se-audit): fiddly-bits SE parity locks (C2 DOF, C3 df, C4 intercept SE, C5 Yatchew p/sigma2, G2 cluster band) by @igerber in #628
  • perf(efficient_did): cross-cell kcov-table hoisting + per-group W lifecycle (100k: 86 -> 18 min) by @igerber in #629
  • feat(imputation): leave-one-out conservative variance (BJS 2024 App. A.9) by @igerber in #630
  • perf(efficient_did): dispatch conditional Omega* ridge solves to a Rust batched-Cholesky kernel (fits 1.4-1.8x) by @igerber in #632
  • feat(callaway): allow_unbalanced_panel — RC-on-panel parity with R did by @igerber in #631
  • perf(linalg): per-cell solver fast paths - IRLS Cholesky inner solve + rank-detection certification (CS covariate fits 1.5-2x) by @igerber in #634
  • refactor(had): remove deprecated survey=/weights= kwargs from HeterogeneousAdoptionDiD.fit (3.7.0) by @igerber in #633
  • fix(honest_did): nested optimal-FLCI optimizer — R center parity (SE-audit B2b) by @igerber in #635
  • perf(callaway): fancy-+= per-(g,t) IF scatters; drop dead _compute_aggregated_se by @igerber in #636
  • fix(tests): sandbox doc-snippet env mutations; order-robust dCDH baseline backend detection by @igerber in #637
  • test(callaway): fold ipw R yardsticks into regenerated golden; record no-cov ipw document-only decision by @igerber in #638
  • perf(efficient_did): skip _ridge_solve_weights fancy-index copy when no row is zero-masked by @igerber in #639
  • docs(todo): park SC fit-snapshot residency + stratified PSU draw-tiling with investigation findings by @igerber in #646
  • test(se-audit): G2 hetero + cluster machine-precision fixest locks on unbalanced heteroskedastic DGP by @igerber in #644
  • perf(callaway): stop materializing per-cell unit-label arrays in influence_func_info by @igerber in #640
  • feat(rust): one-way HC2 robust vcov kernel by @igerber in #651
  • test(imputation): covariate-path R parity anchor vs didimputation by @igerber in #643
  • fix(survey): unify explicit-vcov_type contract under replicate designs (warn + hc1 remap) by @igerber in #654
  • test(callaway): machine-precision golden tolerances — SE-audit C6 closure by @igerber in #658
  • refactor(spillover): route stage-1 FE through shared _iterative_fe_solve by @igerber in #642
  • feat(reviewer-eval): port CI notebook-prose extraction into ci_prompt by @igerber in #649
  • refactor(had): remove deprecated survey=/weights= kwargs from the 7 pretest helpers (3.7.x) by @igerber in #659
  • perf(utils): precompute r-independent wild-bootstrap inversion pieces (~7x, outputs unchanged) by @igerber in #647
  • docs: publish REGISTRY.md + REPORTING.md as in-site Sphinx pages (MyST) by @igerber in #652
  • fix(rust): deterministic clustered vcov — first-appearance cluster aggregation by @igerber in #653
  • Bump version to 3.7.0 by @igerber in #661

Full Changelog: v3.6.2...v3.7.0

v3.6.2

Choose a tag to compare

@igerber igerber released this 03 Jul 20:49
bb31d8a

What's Changed

  • feat(efficient_did): survey-weighted Silverman bandwidth in conditional Omega* by @igerber in #594
  • feat(had): cluster-robust SE on the continuous paths (Phase 2a) by @igerber in #596
  • ci: SHA-pin all GitHub Actions and add CODEOWNERS (supply-chain hardening) by @igerber in #595
  • Add LP-DiD launch carousel (local-projections crossover narrative) by @igerber in #597
  • fix: define zero-column rank detection contract by @shawcharles in #578
  • feat(synthetic_control): split cv-infeasible from failed in placebo/LOO diagnostics by @igerber in #598
  • bench: FE-absorption benchmark lane with BEFORE baselines + pyfixest yardstick (scenarios 7-13) by @igerber in #600
  • feat(diagnostic_report): register SpilloverDiDResults routing by @igerber in #599
  • perf: factorize-once + bincount MAP demeaning, max_iter 10k parity, FE-spanned regressor guard by @igerber in #601
  • perf(rust): compiled MAP demeaning kernel - rayon across columns, 1.4-2.8x on FE-absorption workloads by @igerber in #603
  • refactor(survey): consolidate panel-to-unit collapse (ContinuousDiD/EfficientDiD) by @igerber in #602
  • docs: clarify DiD predict support contract by @shawcharles in #580
  • docs(paper): finalize JOSS submission - 20 estimators, required sections, draft-pdf CI by @igerber in #604
  • perf(utils): opt-in chunked demean_map dispatch + corrected solver-phase memory attribution by @igerber in #605
  • perf(linalg): slim solve_ols marshalling - 15.3->7.8 GB rust-side footprint, -21% firm-panel fits, outputs preserved by @igerber in #607
  • feat(synthetic_control): ADH-2015 §4 tail diagnostics (regression_weights + sparse_synthetic_control) by @igerber in #608
  • Bump version to 3.6.2 by @igerber in #609

Full Changelog: v3.6.1...v3.6.2