Releases: igerber/diff-diff
Releases · igerber/diff-diff
Release list
v3.7.0
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
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
v3.6.1
What's Changed
- docs: align SciPy lower bound with package metadata by @shawcharles in #572
- Add LPDiD R-parity validation harness (Dube et al. 2025), Phase B2 by @igerber in #583
- feat(staggered): materialize non-estimable (g,t) cells as NaN in CallawaySantAnna by @igerber in #582
- Add LPDiD non-absorbing treatment (entry-effect estimands), Phase C1 by @igerber in #584
- fix: surface BusinessReport appendix render failures by @shawcharles in #574
- feat(estimators): iterative alternating-projection demeaning for N-way absorbed FE by @igerber in #586
- Add LPDiD non-absorbing R-parity (independent feols Eq.12/13), Phase C2 by @igerber in #587
- Add LPDiD complex-survey-design support (Phase D1) by @igerber in #590
- docs(survey): waive zero-weight-PSU SE-invariance item; lock Lumley full-design convention by @igerber in #589
- Add TROP non-absorbing (on/off) treatment support (opt-in, local method) by @igerber in #592
- Add LPDiD complex-survey R-parity validation vs survey::svyglm (Phase D2) by @igerber in #591
- Release 3.6.1 by @igerber in #593
New Contributors
- @shawcharles made their first contribution in #572
Full Changelog: v3.6.0...v3.6.1
v3.6.0
What's Changed
- chore(deps): bump pyo3 + numpy to 0.29 in /rust (RUSTSEC-2026-0176/0177) by @igerber in #548
- test: add Tutorial 24 drift guard (staggered-vs-collapsed power claims) by @igerber in #549
- chore(deps): bump actions/checkout from 6 to 7 by @igerber in #550
- chore(deps): bump rust blas-src from 0.10 to 0.14 by @igerber in #551
- docs(methodology): add Bertrand-Duflo-Mullainathan (2004) paper review by @igerber in #553
- ci: pre-merge guard for the PyPI release build path (+ CHANGELOG fix) by @igerber in #552
- refactor: extract shared TROP bootstrap resampling loop by @igerber in #554
- feat(diagnostics): PlaceboTests methodology validation (PR-B) — exact RI p-value + R parity by @igerber in #555
- perf(efficient-did): cache polynomial sieve basis across DR nuisance fits by @igerber in #556
- docs(methodology): Binder (1983) survey TSL variance paper review by @igerber in #557
- docs(todo): reorganize into Actionable / Deferred / Reference buckets by @igerber in #559
- test(survey): validate Survey Data Support methodology + promote to Complete by @igerber in #558
- docs(roadmap): make ROADMAP forward-looking; drop stale present-state sections by @igerber in #560
- perf(callaway-santanna): chunk multiplier-bootstrap weight generation to bound peak memory by @igerber in #561
- perf(imputation): cache untreated-projection factorization per fit (#141) by @igerber in #562
- docs(paper): refresh JOSS paper for current library and submission requirements by @igerber in #564
- perf(efficient-did, had): chunk multiplier-bootstrap weight generation to bound peak memory by @igerber in #563
- perf(linalg): compute hc2_bm CR2 sandwich once, not twice (#475) by @igerber in #565
- perf(within-transform): drop the redundant full-frame copy in within_transform by @igerber in #567
- perf(linalg,mpd): compute MPD cluster+hc2_bm CR2 precomputes once by @igerber in #566
- docs(methodology): add LP-DiD (Dube et al. 2025) paper review and registry entry by @igerber in #568
- bench(memory): durable peak-RSS benchmark + docs for the memory-scaling work by @igerber in #569
- fix(staggered): scale-equilibrate CS / StaggeredTripleDiff covariate OR fits by @igerber in #570
- Add LPDiD (Local Projections DiD) estimator (Dube et al. 2025) by @igerber in #575
- fix(linalg): rank-guard structural (non-covariate) matrix inverses by @igerber in #576
- Release 3.6.0 by @igerber in #581
Full Changelog: v3.5.3...v3.6.0
v3.5.3
What's Changed
- fix: clamp negative vcov diagonal in LinearRegression SE (no NaN SE for degenerate coefs) by @igerber in #542
- docs: Gardner (2022) paper review — TwoStageDiD (PR-A) by @igerber in #539
- Add synthetic control tutorial + generate_synthetic_control_data generator by @igerber in #540
- fix: route TripleDifference power to panel DGP when n_periods > 2 by @igerber in #544
- TwoStageDiD methodology validation (PR-B): did2s parity + exact GMM variance by @igerber in #545
- Fix wild cluster bootstrap p-value / CI inconsistency (WCR + test inversion, #543) by @igerber in #546
- Release v3.5.3 by @igerber in #547
Full Changelog: v3.5.2...v3.5.3
v3.5.2
What's Changed
- SyntheticControl: confidence sets by test inversion (Firpo-Possebom 2018, PR-B) by @igerber in #527
- test: pin AI-review workflow Codex-action contract by @igerber in #528
- docs: Borusyak, Jaravel & Spiess (2024) paper review — ImputationDiD (PR-A) by @igerber in #529
- SyntheticControl: conformal inference (Chernozhukov-Wüthrich-Zhu 2021) by @igerber in #530
- refactor: rename SyntheticDiDResults.placebo_effects → variance_effects (deprecated alias) by @igerber in #532
- docs: add CBWSDID (Ustyuzhanin 2026) paper review by @igerber in #531
- ImputationDiD methodology validation (PR-B): exact FE variance + unit-clustered Eq.8 + R parity by @igerber in #533
- Add CBWSDID covariate balancing to StackedDiD (Ustyuzhanin 2026) by @igerber in #534
- docs: correct stale R-comparison-tests TODO row (R not in CI) by @igerber in #535
- Release v3.5.2: version bump + CHANGELOG reconciliation by @igerber in #536
Full Changelog: v3.5.1...v3.5.2
v3.5.1
What's Changed
- EfficientDiD methodology review (PR-A): Chen-Sant'Anna-Xie (2025) paper-review fidelity artifact by @igerber in #515
- SyntheticControl: leave-one-out + in-time placebo (ADH 2015 §4) by @igerber in #514
- docs: close TODO L160 (bread_inv vcov reuse) as not bit-identically achievable by @igerber in #517
- Reject covariate names colliding with reserved structural terms (DifferenceInDifferences, MultiPeriodDiD, TwoWayFixedEffects) by @igerber in #518
- Upgrade AI PR reviewer model: gpt-5.4 → gpt-5.5 (CI + local) by @igerber in #522
- chore: add CI integrity check for docs/doc-deps.yaml by @igerber in #519
- SyntheticControl: cv (out-of-sample) + inverse-variance V-selection (ADH 2015 / Abadie 2021) by @igerber in #523
- EfficientDiD methodology validation (PR-B): sieve outcome-regression upgrade + Verified Components by @igerber in #521
- docs: Firpo & Possebom (2018) paper review — SCM CI by test inversion (PR-A) by @igerber in #524
- HAD fit(): extensive-margin warning + covariates= NotImplementedError by @igerber in #525
- Bump version to 3.5.1 by @igerber in #526
Full Changelog: v3.5.0...v3.5.1
v3.5.0
What's Changed
- efficient-did: thread vcov_type as narrow {hc1} contract per Chen-Sant'Anna-Xie 2025 (Phase 1b #4) by @igerber in #495
- ConleySpatialHAC methodology-review-tracker promotion + Bertanha-Imbens 2014 citation correction by @igerber in #496
- synthetic control: PR-A paper reviews (ADH 2010/2015, Abadie 2021 JEL, CWZ 2021) by @igerber in #497
- StaggeredTripleDifference PR-A: Ortiz-Villavicencio & Sant'Anna (2025) paper review by @igerber in #499
- TwoStageDiD: thread vcov_type as narrow {hc1} contract (Phase 1b interstitial #5, final) by @igerber in #498
- chore: prune completed-vcov-initiative leftovers + audit-verified stale TODO rows by @igerber in #502
- linalg: scale-invariant rank detection + solve; fix rank-0 IndexError (both backends) by @igerber in #500
- Add SyntheticControl estimator (classic SCM, Abadie-Diamond-Hainmueller 2010) — PR-1 core by @igerber in #501
- StaggeredTripleDifference methodology validation + opt-in Eq-4.14 overall ATT by @igerber in #504
- Right-size pure-Python CI test runtime (SyntheticControl regression + SDID safe trims) by @igerber in #505
- Thread vcov_type="conley" through SunAbraham + WooldridgeDiD (defer StackedDiD) by @igerber in #503
- PowerAnalysis methodology review (PR-A): Bloom 1995 + Burlig 2020 source audits by @igerber in #506
- ci: only re-run gated matrices on ready-for-ci label transitions by @igerber in #509
- tutorial: staggered rollout vs collapsed 2×2 — a power-analysis decision guide by @igerber in #508
- SyntheticControl: in-space placebo permutation inference + reporting-stack integration by @igerber in #511
- Rank-guarded generalized inverse for DR/OR influence-function SEs (CallawaySantAnna, TripleDifference, StaggeredTripleDifference) by @igerber in #507
- PowerAnalysis methodology review (PR-B): Burlig Eq.2 equicorrelated panel variance + tracker Complete by @igerber in #512
- WooldridgeDiD: outcome-fit hint for OLS on binary/count outcomes by @igerber in #513
- reviewer-eval: add a minimal Codex-reviewer A/B comparison harness by @igerber in #510
- Bump version to 3.5.0 by @igerber in #516
Full Changelog: v3.4.2...v3.5.0
v3.4.2
What's Changed
- PR-A: DCDH paper reviews (2020 AER + 2022 NBER WP) by @igerber in #478
- Thread vcov_type through StackedDiD (Phase 1b 2/8) by @igerber in #479
- ChaisemartinDHaultfoeuille (DCDH) methodology-review-tracker promotion: In Progress -> Complete by @igerber in #481
- SpilloverDiD Wave E.3: SurveyDesign.subpopulation() full-design retention by @igerber in #482
- wooldridge: thread vcov_type through OLS path (Phase 1b 3/8) by @igerber in #483
- PR-A: WooldridgeDiD primary-source review (Wooldridge 2025 EmpEcon) by @igerber in #484
- TwoStageDiD Wave E.3 parity: always-treated full-design retention by @igerber in #485
- PR-B: WooldridgeDiD tracker promotion + methodology bundle by @igerber in #486
- callaway-santanna: fix cluster= silent no-op + narrow vcov_type contract by @igerber in #487
- Phase 1b interstitial #2: TripleDifference vcov_type narrow contract by @igerber in #488
- spillover-conley: dedup serial Bartlett kernel + PSD guard helpers by @igerber in #489
- LinkedIn launch carousel for SpilloverDiD (Butts 2021) by @igerber in #490
- trop: methodology-review tracker promotion + test_methodology_trop.py by @igerber in #491
- T23 SpilloverDiD tutorial: TVA-style ~40% understatement walkthrough by @igerber in #493
- ImputationDiD: thread vcov_type as narrow {hc1} contract per BJS Theorem 3 (Phase 1b interstitial #3) by @igerber in #492
- Bump version to 3.4.2 by @igerber in #494
Full Changelog: v3.4.1...v3.4.2
v3.4.1
What's Changed
- Lift Gate 1: HC2/HC2-BM for TwoWayFixedEffects via full-dummy auto-route by @igerber in #469
- PR-C: PreTrendsPower R
pretrendsparity goldens at commit122731d082by @igerber in #471 - SpilloverDiD survey_design= on HC1/CR1 via Binder TSL (Wave E.1) by @igerber in #468
- Thread vcov_type through SunAbraham (Phase 1b 1/8) by @igerber in #472
- SpilloverDiD vcov_type='conley' + survey_design= via panel-aware stratified-Conley sandwich on per-period PSU totals (Wave E.2) by @igerber in #474
- HeterogeneousAdoptionDiD methodology-review-tracker promotion: In Progress -> Complete by @igerber in #473
- ContinuousDiD methodology-review-tracker promotion: In Progress -> Complete by @igerber in #476
- Lift hc2_bm + weights gates via clubSandwich WLS-CR2 port by @igerber in #475
- SpilloverDiD conley + survey + lag>0 via panel-block composition (Wave E.2 follow-up) by @igerber in #477
- Release 3.4.1: SpilloverDiD survey + Conley lifts, SunAbraham vcov_type, WLS-CR2 BM, methodology-tracker promotions by @igerber in #480
Full Changelog: v3.4.0...v3.4.1