Migrate ceptr to Python 3.11–3.14 - #678
Draft
terencelehmann wants to merge 11 commits into
Draft
Conversation
terencelehmann
force-pushed
the
tl_ceptr_python_bump
branch
from
May 21, 2026 09:58
8ff6108 to
565e4a9
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Problem
Python 3.10 reaches end-of-life in October 2026 and will receive no further security fixes. Python 3.11 also receives security updates only. This PR migrates ceptr from
>=3.10,<3.12to>=3.11,<3.15, adding Python 3.14 support while dropping 3.10.Changes
cp314wheel:CI — matrix extended from
['3.10', '3.11']to['3.11', '3.12', '3.13', '3.14']. Poetry version updated from 1.4.2 to 2.1.1.Linting toolchain — Black, isort, flake8 and its six plugins (flake8-bugbear, pep8-naming, flake8-docstrings, flake8-use-fstring, flynt, flake8-polyfill) have been replaced with a single Ruff installation. The main driver is
flake8-use-fstring, which has been unmaintained since July 2022 and is incompatible with flake8 7.x. Rather than upgrading flake8 and keeping six separate plugin version constraints in sync, Ruff re-implements all of them natively. It also replaces Black (viaruff format) and isort (via theIrule set), cutting the dev dependency count from 9 tools to 1. All existing lint rules are preserved with equivalent Ruff selectors; the.flake8config file has been removed and replaced by[tool.ruff]sections inpyproject.toml. A one-time reformatting pass was applied to the codebase via commit 4fa0443.New test —
test_polimi2020added, exercising a mechanism with PLOG reactions at 1 atm (plog_pressure=101325.0).Test results
All 5 pytest tests pass on Python 3.11, 3.12, 3.13, and 3.14.
C++ output was diffed against a Python 3.11 / symengine 0.9.2 baseline for 7 mechanisms (air, LiDryer, dodecane_lu, grimech30, NUIGalway, POLIMI2020, C3MechLite). Six are byte-for-byte identical.
NUIGalway differs in 4 transport coefficient values by 1 ULP in the 8th decimal place (e.g.
-1.79310920E+01→-1.79310921E+01). This is caused by symengine 0.14 producing a slightly different CSE expression ordering, not by Python 3.14 itself. The difference is at the limit of single-precision representable accuracy and has no physical significance, but it is a change from the previously generated files and is reported here for transparency.Co-authored-by: Claude Sonnet 4.6 claude-sonnet-4-6@anthropic.com