From 6a3dfb64a1da4f4d95aae2702d16a4cdf71dd19a Mon Sep 17 00:00:00 2001 From: igerber Date: Tue, 27 Jan 2026 07:23:10 -0500 Subject: [PATCH] Bump version to 2.2.0 Release highlights: - Windows wheel builds using pure-Rust faer library - Rust backend migrated from nalgebra/ndarray to faer - Improved numerical stability and fallback handling Co-Authored-By: Claude Opus 4.5 --- CHANGELOG.md | 24 ++++++++++++++++++++++++ diff_diff/__init__.py | 2 +- pyproject.toml | 2 +- rust/Cargo.toml | 2 +- 4 files changed, 27 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index f09244e..5f215d2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,29 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [2.2.0] - 2026-01-27 + +### Added +- **Windows wheel builds** using pure-Rust `faer` library for linear algebra (PR #115) + - Eliminates external BLAS/LAPACK dependencies (no OpenBLAS or Intel MKL required) + - Enables cross-platform wheel builds for Linux, macOS, and Windows + - Simplifies installation on all platforms + +### Changed +- **Rust backend migrated from nalgebra/ndarray to faer** (PR #115) + - OLS solver now uses faer's SVD implementation + - Robust variance estimation uses faer's matrix operations + - TROP distance calculations use faer primitives + - Maintains numerical parity with existing NumPy backend + +### Fixed +- **Rust backend numerical stability improvements** (PR #115) + - Improved singular matrix detection with condition number checks + - NaN propagation in variance-covariance estimation + - Fallback to Python backend on numerical instability with warning + - Underdetermined SVD handling (n < k case) +- **macOS CI compatibility** for Python 3.14 with `PYO3_USE_ABI3_FORWARD_COMPATIBILITY` + ## [2.1.9] - 2026-01-26 ### Added @@ -584,6 +607,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - `to_dict()` and `to_dataframe()` export methods - `is_significant` and `significance_stars` properties +[2.2.0]: https://github.com/igerber/diff-diff/compare/v2.1.9...v2.2.0 [2.1.9]: https://github.com/igerber/diff-diff/compare/v2.1.8...v2.1.9 [2.1.8]: https://github.com/igerber/diff-diff/compare/v2.1.7...v2.1.8 [2.1.7]: https://github.com/igerber/diff-diff/compare/v2.1.6...v2.1.7 diff --git a/diff_diff/__init__.py b/diff_diff/__init__.py index acab282..9b83a83 100644 --- a/diff_diff/__init__.py +++ b/diff_diff/__init__.py @@ -136,7 +136,7 @@ load_mpdta, ) -__version__ = "2.1.9" +__version__ = "2.2.0" __all__ = [ # Estimators "DifferenceInDifferences", diff --git a/pyproject.toml b/pyproject.toml index 288185e..a401497 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "maturin" [project] name = "diff-diff" -version = "2.1.9" +version = "2.2.0" description = "A library for Difference-in-Differences causal inference analysis" readme = "README.md" license = "MIT" diff --git a/rust/Cargo.toml b/rust/Cargo.toml index 5fe9f87..d3530da 100644 --- a/rust/Cargo.toml +++ b/rust/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "diff_diff_rust" -version = "2.1.9" +version = "2.2.0" edition = "2021" description = "Rust backend for diff-diff DiD library" license = "MIT"