New Features
- Enhanced adjusted sample summary output
- Richer
Sample.summary()diagnostics- Adjusted sample summary now groups covariate diagnostics, reports design
effect alongside ESSP/ESS, and surfaces weighted outcome means when
available.
- Adjusted sample summary now groups covariate diagnostics, reports design
- Warning of high-cardinality categorical features in
.adjust() - Ignored column handling for Sample inputs
Sample.from_frameacceptsignore_columnsfor columns that should remain
on the dataframe but be excluded from covariates and outcome statistics.
Ignored columns appear inSample.dfand can be retrieved via
Sample.ignored_columns().
Code Quality & Refactoring
- Consolidated diagnostics helpers
- Added
_concat_metric_val_var()helper andbalance.util._coerce_scalar
for robust diagnostics row construction and scalar-to-float conversion. - Breaking change:
Sample.diagnostics()for IPW now always emits
iteration/intercept summaries plus hyperparameter settings.
- Added
Bug Fixes
- Early validation of null weight inputs
Sample.from_framenow raisesValueErrorwhen weights containNone,
NaN, orpd.NAvalues with count and preview of affected rows.
- Percentile weight trimming across platforms
trim_weights()now computes thresholds via percentile quantiles with
explicit clipping bounds for consistent behavior across Python/NumPy
versions.- Breaking change: percentile-based clipping may shift by roughly one
observation at typical limits.
- IPW diagnostics improvements
- Fixed
multi_classreporting, normalized scalar hyperparameters to floats,
removed deprecatedpenaltyargument warnings, and deduplicated metric
entries for stable counts across sklearn versions.
- Fixed
Tests
- Added Windows and macOS CI testing support
- Expanded GitHub Actions to run on
ubuntu-latest,macos-latest, and
windows-latestfor Python 3.9-3.14. - Added
tempfile_path()context manager for cross-platform temp file
handling and configured matplotlib Agg backend viaconftest.py.
- Expanded GitHub Actions to run on
Contributors
@neuralsorcerer, @talgalili, @wesleytlee