Skip to content

ci: Test against lowest supported direct dependencies - #60

Merged
cbueth merged 1 commit into
mainfrom
ci/lowest-direct
Aug 11, 2026
Merged

ci: Test against lowest supported direct dependencies#60
cbueth merged 1 commit into
mainfrom
ci/lowest-direct

Conversation

@cbueth

@cbueth cbueth commented Aug 11, 2026

Copy link
Copy Markdown
Owner

This PR adds a lowest-direct row to the test matrix so CI verifies the suite against the minimum versions we claim to support, not just latest. Can't use uv sync --resolution lowest-direct directly. This somehow re-resolves all extras and dies building old 2008 matplotlib/pytest. The job compiles base deps with uv pip compile --resolution lowest-direct, installs those, then installs .[test] on top.

I had to add lower-bound pins, all the lowest versions that resolve/build/import/pass on Python 3.11:

  • numpy>=2.0.1 (released 2024-07-21). 2.0.0 breaks infomeasure grassberger reduction (np.unique(axis=0, return_inverse=True) returns a column vector). 2.0.1 is the fix and still fits numba 0.59/0.60's ceiling
  • scipy>=1.13.0 (2024-04-02). first 1.x without a numpy<2 upper bound
  • statsmodels>=0.13.3 (2022-11-01). oldest build that installs on 3.11 and imports cleanly under numpy 2
  • scikit-learn>=1.5.0 (2024-05-21). first version whose metadata allows numpy 2
  • numba>=0.59.0 (2024-01-31). first with numpy 2 support. lowest-direct actually resolves 0.60.0 because of the numpy floor
  • infomeasure>=0.6.2 (2026-07-06). 0.6.1 + sparse 0.19 dies with "Cannot convert a sparse array to dense" in the discrete TE path
  • igraph>=0.11.5 (2024-05-07). 0.10.x–0.11.4 emit RuntimeWarning in eigenvector centrality on weighted directed graphs

Also:

  • Added deterministic registry iteration in detrending_methods/__init__.py (set iteration made dict order differ per process, tripping pytest-xdist's cross-worker collection check). conftest.py fixture sorted too

@cbueth cbueth self-assigned this Aug 11, 2026
@cbueth cbueth added the enhancement New feature or request label Aug 11, 2026
@codspeed-hq

codspeed-hq Bot commented Aug 11, 2026

Copy link
Copy Markdown

Merging this PR will degrade performance by 22.72%

⚠️ Different runtime environments detected

Some benchmarks with significant performance changes were compared across different runtime environments,
which may affect the accuracy of the results.

Open the report in CodSpeed to investigate

❌ 1 regressed benchmark
✅ 27 untouched benchmarks

Warning

Please fix the performance issues or acknowledge them on CodSpeed.

Performance Changes

Benchmark BASE HEAD Efficiency
test_detrend_method[z_score-p10] 1.4 ms 1.8 ms -22.72%

Tip

Investigate this regression by commenting @codspeedbot fix this regression on this PR, or directly use the CodSpeed MCP with your agent.


Comparing ci/lowest-direct (a0169ed) with main (fe011f7)

Open in CodSpeed

@codecov

codecov Bot commented Aug 11, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 100.00%. Comparing base (fe011f7) to head (a0169ed).
⚠️ Report is 1 commits behind head on main.

Additional details and impacted files
@@            Coverage Diff            @@
##              main       #60   +/-   ##
=========================================
  Coverage   100.00%   100.00%           
=========================================
  Files           29        29           
  Lines          859       859           
  Branches       149       149           
=========================================
  Hits           859       859           
🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

Add a lowest-direct matrix entry to test.yml using a pip-based flow, since
uv sync --resolution lowest-direct re-resolves all extras and fails building
ancient matplotlib/pytest.

Pin minimal lower bounds that verifiedly work and build on Python 3.11:
numpy>=2.0.1 (2.0.0 breaks infomeasure grassberger joint-space reduction),
scipy>=1.13.0, statsmodels>=0.13.3, scikit-learn>=1.5.0, numba>=0.59.0,
infomeasure>=0.6.2 (0.6.1 incompatible with sparse 0.19), igraph>=0.11.5
(0.10/0.11.0-4 emit spurious eigenvector RuntimeWarning).

Iterate the detrending registry in deterministic order: iterating a set to
extend the names dict made its key order vary per process, breaking
pytest-xdist cross-worker collection checks.

Ignore Nextcloud .sync_*.db* files.

Signed-off-by: Carlson Büth <commit@cbueth.de>
@cbueth
cbueth merged commit 33476c0 into main Aug 11, 2026
11 of 12 checks passed
@cbueth
cbueth deleted the ci/lowest-direct branch August 12, 2026 15:54
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement New feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant