Repository navigation
Track Python 3.15 dependency compatibility #2
Description
Current external dependency waits
Python 3.12 through 3.14 are the supported release range for all seven stable libraries. Data,
Engineer, and Diagnostic retain truthful Requires-Python: >=3.12,<3.15 metadata while their
required dependencies cannot complete Python 3.15 qualification.
Polars
Affected libraries: Data and Engineer.
A fresh CPython 3.15.0rc1 probe with Polars 1.44.2 still fails required DataFrame construction
before ML4T code can process the result. Data issue ml4t/data#37 owns the runtime evidence;
Engineer issue ml4t/engineer#56 owns its corresponding package wait.
Recheck when Python 3.15 final ships or when Polars publishes a stable release after 1.44.2.
PyArrow
Affected library: Diagnostic.
SciPy is no longer a blocker. PyArrow 25.0.1 has no CPython 3.15 wheels, so installation attempts a
source build that cannot complete on the standard runners. Diagnostic issue ml4t/diagnostic#45
owns the runtime evidence.
Recheck when Python 3.15 final ships or when PyArrow 26 is published.
Policy and release impact
Decision 0013 replaces the former date-based exceptions with version-scoped waits and objective
review triggers. The affected 0.1 release lines run a visible non-blocking canary at least monthly.
The wait does not block an otherwise qualified patch release for Python 3.12 through 3.14 and does
not authorize advertising Python 3.15 support.
Backtest, Specs, Live, and Models qualify their non-hardware-dependent Python 3.15 lanes.
Acceptance criteria
- A released dependency set installs on CPython 3.15 on Linux, macOS, and Windows.
- Data, Engineer, and Diagnostic pass their complete non-hardware-dependent Python 3.15 suites on
all three operating systems. - The packages remove the
<3.15upper bound only after those qualification runs pass. - The merged default branches and published artifacts repeat the complete qualification.
- Generated ecosystem status records every required lane as passing, after which this issue and the
three owning-library trackers close.
Activity
stefan-jansen commentedon Aug 11, 2026
Additional Python 3.15 rc1 evidence from the exact qualification matrix:\n\n- ml4t-engineer originally failed on Numba, PyArrow, and unused scientific core dependencies. PR ml4t/engineer#34 now isolates those optional dependencies; local Python 3.15 core installation and fallback tests pass.\n- ml4t-diagnostic fails core installation because scikit-learn requires SciPy. SciPy 1.18.0 has no CPython 3.15 wheel on PyPI or the Scientific Python nightly index, and its source build fails without OpenBLAS. SciPy is used directly throughout diagnostic, so it cannot be removed or skipped without reducing supported functionality.\n- ml4t-models completed all 409 tests on macOS but the July 25 PyTorch nightly exited with signal 11 at shutdown. PR ml4t/models#36 now uses the August 10 nightly, the newest date with Python 3.15 wheels on Linux, macOS, and Windows; Linux passes and the cross-platform rerun is pending.\n\nThese are blocking checks under the approved policy. No test exclusions or source-build system dependency workarounds have been added.
[-]Python 3.15 qualification blocked by Polars datetime construction[/-][+]Resolve blocking Python 3.15 dependency compatibility[/+]stefan-jansen commentedon Aug 11, 2026
Final branch evidence at the 2026-08-11 cutoff: data has 20 successful checks and three Polars failures; engineer has 23 successful checks and three Polars failures; diagnostic has 34 successful checks and three SciPy installation failures. Backtest, specs, live, and models pass the full stable and Python 3.15 policy. All seven libraries pass every required Python 3.12-3.14 operating-system job. The blocker is limited to Polars for data and engineer and SciPy wheel availability for diagnostic.
stefan-jansen commentedon Aug 11, 2026
Approved temporary compatibility handling is now implemented and pushed. Data and engineer use the python-315-polars exception; diagnostic uses python-315-scipy. Each package declares Requires-Python >=3.12,<3.15, retains the complete Python 3.12-3.14 operating-system matrix, and validates its exception in place of silently omitting Python 3.15. Both exceptions expire on 2026-09-30. Backtest, specs, live, and models retain blocking Python 3.15 prerelease checks.
stefan-jansen commentedon Aug 11, 2026
Rechecked upstream and PyPI on 2026-08-11 before release preparation. pola-rs/polars#28750 remains open and awaiting code-owner review; PyPI still reports Polars 1.43.2 as current. SciPy remains at 1.18.0, and its current release file inventory contains no
cp315wheel. The approved Polars and SciPy exceptions therefore remain necessary and unchanged.stefan-jansen commentedon Aug 25, 2026
Rechecked the Diagnostic blocker on 2026-08-25 against the published 0.1.2 package and CPython 3.15.0rc1. SciPy is no longer blocking: SciPy 1.18.1 publishes
cp315wheels for Linux, macOS, and Windows. Installation now reaches PyArrow 25.0.1, which publishes nocp315wheels, attempts a source build, and fails because Arrow C++ development libraries are unavailable.Upstream Apache Arrow issues #48172 and #50091 report Python 3.15 wheel support implemented for the 26.0.0 milestone (Q4 2026); #50943 tracks remaining nightly Pandas integration. The library-specific blocker is ml4t/diagnostic#45.
The configured
python-315-scipyexception is therefore stale in both cause and version scope: it excludes Diagnostic 0.1.2. No exception has been renamed, broadened, or renewed pending an evidence-backed ecosystem decision.fix: approve bounded Diagnostic Python 3.15 exception (#6)
fix: cover Diagnostic 0.1.4 with Python 3.15 exception (#8)
stefan-jansen commentedon Sep 19, 2026
Rechecked on 2026-09-19. The repository-owned compatibility and release work is complete; the remaining Python 3.15 failures are still upstream dependency conditions.
python-315-polars. A fresh Data run with CPython 3.15.0rc1 and Polars 1.44.2 still fails inside Polars before ML4T can process the result. Data issue Track Python 3.15 full-environment compatibility: Databento dependency blocker data#37 owns removal.python-315-scipy(the historical identifier is retained, but the current cause is PyArrow 25.0.1 and pydantic-core 2.46.5 lacking CPython 3.15 wheels). Diagnostic issue Track Python 3.15 dependency wheel compatibility diagnostic#45 owns removal.Decision 0010 records the current evidence, affected version ranges, mitigations, and unchanged 2026-09-30 expiry. No exception was broadened to another library or beyond the next patch boundary.
stefan-jansen commentedon Sep 19, 2026
A Data pull request exposed a PEP 440 edge case in the approved Polars exception: Hatch-VCS reports post-v0.1.7 commits as
0.1.8.devN, which is not contained by<0.1.8. Decision 0012 and PR #24 corrected the bound to>=0.1.2,<=0.1.8, retaining the same libraries, evidence, mitigation, and 2026-09-30 expiry. PR #25 then refreshed the reusable workflow’s internal ecosystem checkout, which had continued to execute an older policy snapshot despite callers pinning the newer workflow. Regression tests now cover both the VCS development version and the embedded snapshot SHA.The upstream Python 3.15 dependency blockers remain unchanged; this fixes enforcement of the existing exception rather than broadening its purpose.
[-]Resolve blocking Python 3.15 dependency compatibility[/-][+]Track Python 3.15 dependency compatibility[/+]stefan-jansen commentedon Sep 21, 2026
Decision 0013 in ecosystem pull request #41 replaces the September 30 exception expiry with
objective review triggers.
<3.15metadata and run visible non-blocking canariesat least monthly.
otherwise qualified stable release.
The current evidence still blocks claiming Python 3.15 support: Polars 1.44.2 fails required Data
series construction on CPython 3.15.0rc1, and PyArrow 25.0.1 has no CPython 3.15 wheels.
Pydantic-core 2.49.0 now has CPython 3.15 wheels and has been removed from the blocker list.