Skip to content

[Mirror] Python 3.15 support - CI-review mirror of PR #843 - #859

Closed
igerber wants to merge 2 commits into
mainfrom
feat/python-3.15-mirror
Closed

igerber wants to merge 2 commits into
mainfrom
feat/python-3.15-mirror

Conversation

@igerber

@igerber igerber commented Oct 18, 2026

Copy link
Copy Markdown
Owner

Summary

Same-repo mirror of #843 by @ilgrad so the CI AI review and the gated test lanes (fork PRs are security-gated out of both) can run on it. The contributor's commit is carried verbatim (author preserved); maintainer changes are separate commits on top. #843 is the PR that merges; this one closes unmerged once they are tree-identical.

  • feat: add Python 3.15 support (contributor): requires-python <3.15 -> <3.16 plus the 3.15 classifier; cp315 wheels in build-wheels.yml (manylinux_2_28 x86_64/aarch64, macOS arm64, Windows); 3.15 added to the rust-test.yml matrix on all four OSes; Pure Python Fallback and the doc-snippets job move from 3.14 to 3.15 (same pattern as Add Python 3.14 support #284 for 3.14); README range and release-build-check.yml comment updated; changelog fragment.
  • Rebased onto current main. The only conflict was rust/Cargo.toml, where main already moved to pyo3/rust-numpy 0.30 (chore(deps): update pyo3 requirement from 0.29 to 0.30 in /rust #852) with the updated 3.9-3.15 comment, so the contributor's Cargo.toml comment hunk is dropped.
  • docs(changelog): cite PyO3 0.30 for the 3.15 build (maintainer): the fragment's "PyO3 0.29 already supports 3.15" sentence predates chore(deps): update pyo3 requirement from 0.29 to 0.30 in /rust #852; PyO3 0.30 is the version that lists 3.15.0 final as supported.

Methodology references (required if estimator / math changes)

  • Method name(s): N/A - no methodology changes
  • Paper / source link(s): N/A
  • Any intentional deviations from the source (and why): None

Validation

  • Tests added/updated: No test changes.
  • Local reproduction on macOS arm64 with CPython 3.15.0 (numpy 2.5.4, pandas 3.0.6, scipy 1.18.1, scikit-learn 1.9.1), extension built with pyo3 0.30 via maturin develop --release --features accelerate:
    • pytest tests/test_rust_backend.py -m '': 200 passed
    • DIFF_DIFF_BACKEND=rust on linalg / estimators / bootstrap / base-estimator suites: 759 passed, 13 skipped
    • DIFF_DIFF_BACKEND=python on estimators / linalg / staggered: 630 passed, 4 skipped
    • python -X dev -W error -c "import diff_diff, ...": no import-time deprecations on 3.15
    • changelog_compile.py check passes on 3.15
  • Upstream availability checked: actions/python-versions publishes stable 3.15.0 for linux 24.04 x64/arm64, darwin arm64 and win32 x64; manylinux_2_28 ships CPython 3.15; numpy, pandas, scipy, scikit-learn, matplotlib, pillow, kiwisolver, contourpy publish cp315 wheels, so no CI leg falls back to a source build.
  • PyPI claim in Add Python 3.15 support #843 verified: 2.3.1 is the last release without an upper cap; 2.3.2+ and 3.12.0/3.13.0 carry <3.14 / <3.15, so pip install diff-diff on 3.15 currently resolves to 2.3.1.
  • Backtest / simulation / notebook evidence (if applicable): N/A. The contributor's Linux x86_64 full-suite runs (Rust backend and pure-Python, 3.15 vs 3.14, identical per-test outcomes) are in Add Python 3.15 support #843. macOS, Windows and aarch64 are covered by the gated matrix here.

Security / privacy

  • Confirm no secrets/PII in this PR: Yes

Changelog

ilgrad and others added 2 commits October 18, 2026 13:57
CPython 3.15.0 is final, but requires-python capped the package at <3.15:
pip on 3.15 falls back to diff-diff 2.3.1, and uv builds the sdist. Raise
the cap, add the classifier, build cp315 wheels on every platform and add
3.15 to the Rust-backend CI matrix; the pure-Python fallback and the doc
snippets move to 3.15 as they moved to 3.14 in #284. PyO3 0.29 already
supports 3.15.
main moved to pyo3/rust-numpy 0.30 (#852), which lists Python 3.15.0
final as supported; the fragment's PyO3 0.29 sentence predates that.
@github-actions

Copy link
Copy Markdown

Overall assessment

✅ Looks good — no actionable findings in the supplied diff.

Executive summary

  • Changes are limited to Python compatibility metadata, CI, release builds, and documentation.
  • Python 3.15 is consistently included across the advertised wheel targets, Rust test matrix, Python fallback, and doc-snippet job.
  • No estimator, weighting, inference, identification assumption, or statistical default changes require paper-level verification.
  • Static configuration checks and the changelog validator passed. Python 3.15 builds and runtime tests could not be reproduced locally.

Methodology

No findings. Reviewed against docs/methodology/REGISTRY.md; the diff changes no methodological implementation or estimator docstrings.

Code Quality

No findings. All four modified workflow files parse successfully, and the Linux build script passes Bash syntax validation. The compatibility range and classifier agree with the CI configuration (pyproject.toml:L11, pyproject.toml:L35-L43).

Performance

No findings. The additional build and test jobs directly support the newly advertised interpreter version.

Maintainability

No findings. Publishing and release checks continue to share the reusable wheel workflow, keeping their Python targets aligned (.github/workflows/release-build-check.yml:L34-L36).

Tech Debt

No findings. No new deferred implementation or testing work requires tracking.

Security

No findings. The diff introduces no credentials, permission changes, or new execution mechanisms.

Documentation/Tests

No findings. The required release fragment is present and passes changelog_compile.py check (changelog.d/20261011-python-3-15.md:L1-L6).

Validation covered workflow parsing, version consistency, wheel/test matrix propagation, and shell syntax. Python 3.15 and runtime test dependencies were unavailable locally, so native-build and runtime compatibility remain for CI to verify.

@igerber igerber closed this Oct 18, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants