All notable changes to statgpu are documented here, organized by release and date.
- Added structured Panel
fit_statistics_with parameter-based within/between/overall R², adjusted R², and classical model F statistics while preserving Stage-A inference and legacy df/R² attributes. - Added classical pooling F, one-way entity Breusch-Pagan LM (including Baltagi-Li unbalanced panels), and one-way classical FE-vs-RE Hausman with explicit applicability diagnostics.
- Added NumPy/CuPy/Torch coverage, formula-row alignment, maintained Torch 2.0 CPU tests, executable linearmodels 7.0 definition alignment, and an exact-head physical GPU acceptance runner that rechecks coefficient inference as well as Stage-B diagnostics.
- Fixed CuPy
betaincinvandgammaincinvLUT cache tuple ordering so inverse quantiles no longer collapse to boundary values and downstream confidence intervals retain their correct width. - Added maintained regression coverage for public CuPy Student-t, Beta, F, Gamma, and chi-square PPF/ISF paths, LUT/native-fallback boundaries, legacy inverse-quantile aliases, and Panel inference consumers.
- Validated the unchanged two-line numerical fix on Tesla P100 with Python 3.9.16 and CuPy 13.6.0: the original
t_{0.975,45}failure now agrees with SciPy within4.04e-09, all expanded inverse-distribution checks pass, and the formerly zero-width Panel intervals match the reference.
- Added an internal
BasePanelModel, shared panel index/balance metadata, and structured diagnostic/fit-stat result substrate for the later Tier-1 diagnostics stages without adding new public diagnostics. - Centralized the existing residual-based panel OLS covariance dispatch while preserving each estimator's current nonrobust, HC1, clustered, and HAC normalization/df conventions; Fama-MacBeth keeps its distinct beta-series covariance.
- Migrated
PanelOLS,RandomEffects,PooledOLS,BetweenOLS,FirstDifferenceOLS, andFamaMacBethto the shared lifecycle where statistically valid, while preserving formula behavior, prediction/summary contracts, fixed-effect recovery, Swamy-Arora GLS, and backend-specific output semantics. - Added pre-refactor golden regression coverage plus maintained Torch 2.0 CPU coverage for shared panel metadata/covariance/inference paths. Stage B diagnostics and Stage C covariance expansion remain pending under Issue #93.
- Fixed the mixed-precision Torch strict-CUDA
LogisticRegressionCVfailure by allocating batched IRLS parameters and ridge diagonals in the active CV working dtype and keeping candidate path outputs backend-native through validation scoring. - Added maintained regression coverage for float32/float64 CV, weighted and unweighted fitting, intercept/no-intercept paths, and the full CV selector, plus a Python 3.9 + Torch 2.0 CPU CI gate so optional-Torch coverage cannot silently skip.
- Validated the unchanged numerical implementation head
e6e4846b06604ed53e65fc9afd9054bd5777098fon Tesla P100 with PyTorch 2.0.0+cu117/CUDA 11.7 and CuPy 13.6.0: all 18 statgpu canonical CV backend runs succeeded without CPU fallback, includingLogisticRegressionCVon NumPy, CuPy, and Torch. - Retained the historical pre-fix P100 failure source unchanged and registered the exact-head post-fix source under
results/pr116_p100/; focused physical validation evidence is retained separately from dashboard timing data.
- Corrected arbitrary-link Binomial IRLS Fisher weights, working responses, line-search objectives, backend-native warm starts, and quadratic-penalty validation.
- Hardened direct
LogisticRegressionresponse/control validation, transactional refits, convergence reporting, integer prediction dtype, single-column response handling, and finite decision thresholds. - Unified fitted logistic likelihood diagnostics across NumPy, CuPy, and Torch with the registered numerically stable
LogisticLossobjective; likelihood, AIC, BIC, pseudo-R², and convergence remain independent of covariance inference. - Kept confusion-matrix and hard classification metrics available for one-class targets while preserving explicit class-support requirements for ROC-AUC and average precision.
- Kept CuPy/Torch analytic weights device-native and corrected weighted IRLS curvature, likelihood, dispersion, and sandwich-inference semantics.
- Standardized GLM analytic-weight behavior across ridge scaling, line search, pseudo-loglikelihood, information criteria, dispersion, and covariance; global weight rescaling leaves estimates and diagnostics unchanged.
- Added backend-native response-domain, finite-value, real-valued, shape, and length validation for scalar GLMs, including penalized and cross-validated entry points.
- Aligned formula sample weights only after Patsy missing-row filtering and corrected weighted Gaussian FISTA centering.
- Made
RidgeCV,ElasticNetCV, andLogisticRegressionCVfits failure-safe: stale state is cleared before fitting and selected parameters are published only after the final full-data refit succeeds. - Preserved explicit Torch/CuPy requests and pinned
device="auto"final refits to the backend selected during cross-validation. - Updated Logistic and Elastic Net default regularization grids to incorporate analytic weights and satisfy integer-weight row-replication equivalence.
- Preserved declared validation losses and analytic weights in penalized CV; programming, shape, CUDA OOM, and device errors are no longer converted into candidate
NaNvalues or unrelated MSE fallback. - Completed the standalone
ElasticNetand final-refitElasticNetCVinference contract across NumPy, CuPy, and Torch. - Corrected public ElasticNet/Ridge scaling documentation: under the shared average-loss convention,
ElasticNet(alpha, l1_ratio=0)matchesRidge(alpha). - Made public estimator finite-input guards, cloning, sklearn tags, nested
set_params, and fitted-state invalidation transactional, including legacy scikit-learn clone identity checks.
- Corrected the executable loss/penalty/solver matrix so Newton, L-BFGS, and L-BFGS-B reject unsupported non-smooth penalties rather than optimizing only the smooth component.
- Removed the incorrect Euclidean-prox Newton shortcut. Smooth L2/no-penalty objectives retain Newton updates; non-smooth proximal-Newton requests delegate visibly to backend-native FISTA until a Hessian-metric proximal solver exists.
- Narrowed Armijo, linear-solve, alpha-grid, and inference fallbacks to recognized numeric or rank failures; CUDA OOM, device, index, contract, and unrelated runtime failures propagate.
- Normalized warm starts for FISTA, Newton-family, L-BFGS-family, L-BFGS-B, and ADMM solvers to the preprocessed design backend, device, and dtype.
- Completed ADMM's legitimate Cholesky fallback and hardened L-BFGS-B feasible directions, backend-native bounds, and NaN-bound validation.
- Added centralized, observable Torch compilation policy: eager remains the default for unset,
auto, anddisable;defaultandreduce-overheadare explicit opt-ins, and only the known CUDA Graph output-lifecycle failure becomes a permanent eager fallback. - Removed the package-initialization cycle between
statgpu.glm_coreand the Cox loss export by lazily exposingCoxPartialLikelihoodLoss; fresh-interpreter imports no longer depend on importingLogisticRegressionfirst.
- Reconciled the English and Chinese LogisticRegression, ElasticNet, cross-validation, solver-algorithm, and solver/penalty documentation with the maintained implementation.
- Removed unsupported universal GPU speedup, backend-threshold, and coefficient-tolerance claims; performance guidance now requires workload-specific benchmarking.
- Documented ownership boundaries between maintained pytest coverage and manual physical-GPU diagnostics.
- Bumped package metadata to
0.2.4and added the authoritative GitHub Release document at.github/releases/v0.2.4.md.
- The final PR #87 implementation head passed the complete CPU suite with 2239 passed and 719 skipped, static and documentation contracts, Python 3.9–3.12 regression jobs, scikit-learn 1.2.2/1.3.2/latest compatibility, and release-package validation.
- Physical NVIDIA validation passed on the unchanged numerical implementation: RTX 4090 with PyTorch 2.8.0+cu128 passed the selected compile/CUDA Graph matrix 9/9 and runtime assertions; Tesla P100 with CuPy 13.6.0 passed the corresponding runtime assertions.
- The focused release PR changes version metadata and release-facing documentation only; all exact release-head hosted gates must pass before creating tag
v0.2.4.
- Completed CoxPH Phase 1 with Breslow, Efron, and Exact ties; delayed-entry and
(start, stop]counting-process data; shared-coefficient stratification; subject identifiers; andSurv(start, stop, event)formula input. - Added shared NumPy, CuPy, and Torch-CUDA risk-set primitives for Cox objectives, gradients, information matrices, and baseline estimation, including backend-native dynamic programming for Exact ties.
- Extended
CoxPHCVheld-out partial likelihood to all supported tie methods, delayed entry, start-stop rows, strata, and subject-grouped folds.
- Hardened Cox inference, numerical stability, formula NA alignment, singular-information handling, CV cache identity, fold eligibility, selected-penalty refitting, and failed-fit state resets.
- Hardened L1, L2, Elastic Net, SCAD, and MCP penalized Cox estimation; removed the unidentified intercept; corrected Cox-specific warm starts; and made Torch Efron value, gradient, and Hessian paths native.
- Standardized public Group Lasso and Adaptive Group Lasso behavior through the generic loss-gradient and exact group-proximal path across supported backends.
- Made requested CoxPHCV two-stage and successive-halving controls execute one explicit exhaustive full-precision candidate pass, avoiding repeated complete-grid fitting while preserving deterministic selection semantics.
- Made one-shot
CoxPHCV.cv_splitsiterators reusable across repeated fit, scikit-learn clone, parameter reconstruction, and pickle.
- Hosted workflow #960 passed on the final reviewed head
f05a44ad363b46612e956e137e2f00d040765acb: documentation, static, full CPU, and Python 3.9–3.12 regression jobs all passed; the complete CPU suite reported 1881 passed and 662 skipped. - The final exact-head physical-GPU promotion artifact is published at https://gist.github.com/TheHiddenObserver/afdcad86a243e68a918d852b92e984a4. It records schema 3, 134/134 passing checks, zero child and nested return codes, empty gate-failure arrays, clean source state before and after execution, and SHA-256
bd4058450def691dd29e9d78853534016c6da70c33192a97dc312d95cbe5d76d. - Added release-package validation that checks version consistency, builds the pure-Python wheel and sdist, runs
twine check, validates artifact contents, clean-installs the sdist on Ubuntu, and clean-installs the same wheel on Ubuntu, Windows, and macOS.
- Bumped the package version to
0.2.3inpyproject.tomlandstatgpu/__init__.py. - The official wheel remains a universal
py3-none-anyartifact built withSTATGPU_NO_EXT=1; optional Cython sources remain available in the sdist. - Added the authoritative GitHub Release document at
.github/releases/v0.2.3.md, a release-note completeness gate, and tag automation that publishes that file as the GitHub Release body after the PyPI job succeeds.
Entries through 2026-07-27 are retained in
CHANGELOG-history-through-2026-07-27.md.