Skip to content

Maintenance overhaul: Python 3.14 support, drop 3.10, add IndexBinaryOp#571

Open
eriknw wants to merge 10 commits intopython-graphblas:mainfrom
eriknw:py3.14
Open

Maintenance overhaul: Python 3.14 support, drop 3.10, add IndexBinaryOp#571
eriknw wants to merge 10 commits intopython-graphblas:mainfrom
eriknw:py3.14

Conversation

@eriknw
Copy link
Copy Markdown
Member

@eriknw eriknw commented Mar 28, 2026

Python version support:

  • Add Python 3.14, drop 3.10 (minimum now 3.11)
  • Update numba guards to python_version<'3.15' in pyproject.toml
  • Update all tool target-versions (black, ruff, pylint, pyupgrade)

New feature:

  • Add IndexBinaryOp: user-defined f(x,ix,jx,y,iy,jy,theta)->z operators that bind theta to produce BinaryOps for use in ewise operations (requires SuiteSparse:GraphBLAS >=9.4, guarded with hasattr)

Packaging modernization:

  • PEP 639: license = "Apache-2.0" with license-files
  • Bump setuptools >=77, numpy >=1.24, numba >=0.57
  • Remove suitesparse-graphblas <10 upper bound (support psg 10.x)
  • Deprecate fast_matrix_market (no longer maintained)

CI updates:

  • Standardize all GitHub Actions to latest (checkout v6, setup-python v6, choose-random-action v4.1, pypi-publish v1.13)
  • Add psg 10.x versions (10.0.1, 10.1.1, 10.3.1) to CI test matrix
  • Fix graphblas C library constraint (remove <9.5 cap)
  • Fix numba+numpy2 : numba >=0.62 now tested with numpy 2.x
  • Split numba version overrides: 0.61+ for py3.13, 0.63+ for py3.14
  • Update pre-commit hooks, flake8-bugbear, flake8-simplify
  • Remove stale warning filters, update dependency version ranges

Multi-version SuiteSparse:GraphBLAS support:

  • Handle GPU_ID->GPU_IDS rename in SS:GraphBLAS 10.2+ with hasattr guards
  • Remove awkward v1 dead code, fix XXX error messages, update copyright
  • Clean up stale MAINT comments and documentation references

Python version support:
- Add Python 3.14, drop 3.10 (minimum now 3.11)
- Update numba guards to python_version<'3.15' in pyproject.toml
- Update all tool target-versions (black, ruff, pylint, pyupgrade)

New feature:
- Add IndexBinaryOp: user-defined f(x,ix,jx,y,iy,jy,theta)->z operators
  that bind theta to produce BinaryOps for use in ewise operations
  (requires SuiteSparse:GraphBLAS >=9.4, guarded with hasattr)

Packaging modernization:
- PEP 639: license = "Apache-2.0" with license-files
- Bump setuptools >=77, numpy >=1.24, numba >=0.57
- Remove suitesparse-graphblas <10 upper bound (support psg 10.x)
- Deprecate fast_matrix_market (no longer maintained)

CI updates:
- Standardize all GitHub Actions to latest (checkout v6, setup-python v6,
  choose-random-action v4.1, pypi-publish v1.13)
- Add psg 10.x versions (10.0.1, 10.1.1, 10.3.1) to CI test matrix
- Fix graphblas C library constraint (remove <9.5 cap)
- Fix numba+numpy2 : numba >=0.62 now tested with numpy 2.x
- Split numba version overrides: 0.61+ for py3.13, 0.63+ for py3.14
- Update pre-commit hooks, flake8-bugbear, flake8-simplify
- Remove stale warning filters, update dependency version ranges

Multi-version SuiteSparse:GraphBLAS support:
- Handle GPU_ID->GPU_IDS rename in SS:GraphBLAS 10.2+ with hasattr guards
- Remove awkward v1 dead code, fix XXX error messages, update copyright
- Clean up stale MAINT comments and documentation references
@codecov
Copy link
Copy Markdown

codecov bot commented Mar 28, 2026

Codecov Report

❌ Patch coverage is 81.18280% with 105 lines in your changes missing coverage. Please review.
✅ Project coverage is 98.90%. Comparing base (522b696) to head (83ba9bd).
⚠️ Report is 10 commits behind head on main.

Additional details and impacted files
@@            Coverage Diff             @@
##             main     #571      +/-   ##
==========================================
- Coverage   99.13%   98.90%   -0.24%     
==========================================
  Files          93       96       +3     
  Lines       21855    22384     +529     
  Branches     4130     2725    -1405     
==========================================
+ Hits        21667    22139     +472     
- Misses        121      187      +66     
+ Partials       67       58       -9     
🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

eriknw added 9 commits March 28, 2026 12:59
JIT:
- Fix JIT tests by auto-detecting conda compiler from $CONDA_PREFIX/bin/
  and stripping build-time -isysroot and -fdebug-prefix-map flags
- Replace ~70 lines of hardcoded per-platform JIT config with generic
  _fix_jit_config() that works on all platforms
- Tests now pytest.skip() when JIT unavailable (previously passed silently)
- Add scripts/jit_diagnostics.py for CI debugging

CI (test_and_build.yml):
- Restructure dependency version selection: pick numpy first, then
  choose other deps based on numpy 1.x vs 2.x, then apply constraints
- Remove psg 9.4.5 from Python 3.14 (no conda builds)
- Fix numba 0.63 + numpy 2.4 incompatibility (require numba 0.64)
- Remove suitesparse extras <10 cap in pyproject.toml
- Add psg 10.x versions to all test paths
- Add `# pragma: is_grbscalar` to IndexBinaryOp theta scalar creation
  so bizarro scalars sed doesn't break GxB_BinaryOp_new_IndexOp (requires
  GrB_Scalar, not C scalar)
- Add burble and error log capture to JIT diagnostic script to reveal
  the actual compiler command and error on macOS ARM (still failing)
- Add more compiler fallback candidates (clang, gcc) in _fix_jit_config
…filter

JIT:
- Replace -isysroot with local macOS SDK via `xcrun --show-sdk-path`
  instead of stripping it (conda cross-compiler needs a sysroot)
- Move subprocess import to module level

CI dependency constraints:
- Add numpy 2.3+/scipy constraint (scipy <1.15.1 needs numpy <2.3)
- Move numba/numpy 2.4 constraint to be Python-version-independent
- Move upstream numpy override before dep selection to prevent stale
  scipy/pandas/awkward versions being chosen for numpy 1.x then
  overridden to numpy 2.x

Warning filter:
- Restore np.find_common_type deprecation filter (needed for numpy 1.25
  with older scipy/networkx)
…g compilers

- Only replace the JIT compiler path if the default doesn't exist;
  some psg builds use /usr/bin/cc which already works
- Add a probe compilation after fixing config: if JIT compilation
  fails for any reason (wrong flags, missing libs), turn JIT off
  and let tests skip cleanly instead of failing
- Move upstream numpy override before dep selection to prevent
  stale scipy/pandas being chosen for numpy 1.x then overridden to 2.x
- Add scipy/numpy 2.3+ constraint (scipy <1.15.1 needs numpy <2.3)
- Make numba/numpy 2.4 constraint Python-version-independent
- Restore np.find_common_type deprecation warning filter
- Add macos-15-intel and ubuntu-24.04-arm to CI test matrix
…ith comments explaining each case

Fix JIT: three-way probe result, sysconfig won't override failed probe

- _fix_jit_config returns True/False/None: working, probe-failed, no-conda
- Fixture uses single try/yield/finally with clear three-way branch
- When probe fails (False), JIT stays off — sysconfig won't retry
- Sysconfig path only runs when there's no conda env (None)
- Add pandas 3.0 requires numba >=0.60 constraint
- Add macos-15-intel and ubuntu-24.04-arm to CI matrix
- Stress testing in CI
- Deprecation warning now fires on engine="auto" when fast_matrix_market
  is installed (previously only warned on explicit engine="fmm")
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.

1 participant