diff --git a/CHANGELOG.md b/CHANGELOG.md index d7b76b9a..7672ec82 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,21 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +## [3.0.1] - 2026-04-07 + +### Added +- **`aggregate_survey()`** — new function in `diff_diff.prep` that bridges individual-level survey microdata to geographic-period panels for DiD estimation. Computes design-based cell means and precision weights using domain estimation (Lumley 2004), with SRS fallback for small cells. Returns a panel DataFrame and pre-configured `SurveyDesign` for second-stage estimation. Supports both TSL and replicate-weight variance. +- **Python 3.14 support** — upgraded PyO3 from 0.22 to 0.28, updated CI and publish workflow matrices, bumped Rust MSRV to 1.84 for faer 0.24 compatibility. + +### Changed +- Updated README Python support matrix to include 3.14 + +### Fixed +- Fix domain estimation zero-padding for correct design-based cell variance +- Fix SRS fallback weight normalization for scale invariance across replicate designs +- Validate numeric dtype for outcomes/covariates before aggregation (nullable dtype support) +- Validate grouping columns for NaN values + ## [3.0.0] - 2026-04-07 v3.0 completes the survey support roadmap: all 16 estimators (15 inference-level + @@ -1197,6 +1212,8 @@ for the full feature history leading to this release. - `to_dict()` and `to_dataframe()` export methods - `is_significant` and `significance_stars` properties +[3.0.1]: https://github.com/igerber/diff-diff/compare/v3.0.0...v3.0.1 +[3.0.0]: https://github.com/igerber/diff-diff/compare/v2.9.1...v3.0.0 [2.9.1]: https://github.com/igerber/diff-diff/compare/v2.9.0...v2.9.1 [2.9.0]: https://github.com/igerber/diff-diff/compare/v2.8.4...v2.9.0 [2.8.4]: https://github.com/igerber/diff-diff/compare/v2.8.3...v2.8.4 diff --git a/diff_diff/__init__.py b/diff_diff/__init__.py index 4be7dd26..41ec6445 100644 --- a/diff_diff/__init__.py +++ b/diff_diff/__init__.py @@ -215,7 +215,7 @@ EDiD = EfficientDiD ETWFE = WooldridgeDiD -__version__ = "3.0.0" +__version__ = "3.0.1" __all__ = [ # Estimators "DifferenceInDifferences", diff --git a/docs/llms-full.txt b/docs/llms-full.txt index 9f127858..5a624fa2 100644 --- a/docs/llms-full.txt +++ b/docs/llms-full.txt @@ -2,7 +2,7 @@ > A Python library for Difference-in-Differences causal inference analysis. Provides sklearn-like estimators with statsmodels-style output for econometric analysis. -- Version: 3.0.0 +- Version: 3.0.1 - Repository: https://github.com/igerber/diff-diff - License: MIT - Dependencies: numpy, pandas, scipy (no statsmodels dependency) diff --git a/pyproject.toml b/pyproject.toml index 38ac4704..db8865d5 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "maturin" [project] name = "diff-diff" -version = "3.0.0" +version = "3.0.1" description = "Difference-in-Differences causal inference with sklearn-like API. Callaway-Sant'Anna, Synthetic DiD, Honest DiD, event studies, parallel trends." readme = "README.md" license = "MIT" diff --git a/rust/Cargo.toml b/rust/Cargo.toml index 67426d09..517b6e0b 100644 --- a/rust/Cargo.toml +++ b/rust/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "diff_diff_rust" -version = "3.0.0" +version = "3.0.1" edition = "2021" rust-version = "1.84" description = "Rust backend for diff-diff DiD library"