Skip to content

dipy: Add version 1.12.1 - #3112

Draft
luhenry wants to merge 3 commits into
mainfrom
dipy
Draft

luhenry wants to merge 3 commits into
mainfrom
dipy

Conversation

@luhenry

@luhenry luhenry commented Oct 13, 2026 •

Copy link
Copy Markdown
Member

Compiles dipy's Cython/C++ extensions (meson-python, OpenMP via libgomp) against numpy. Upstream publishes no riscv64 wheel.

Mirrors upstream's nightly.yml build_linux_wheels job.

Differs from upstream

  • numpy/scipy/h5py resolve from pypi.riseproject.dev - no riscv64 wheels on PyPI.
  • Dropped the nightly-wheels index and CIBW_CONFIG_SETTINGS: compile-args=-v - nightly/verbosity only.

Matrix: cp312/cp313/cp314 - upstream's cp3{11,12,13,14}-* ships no free-threaded wheel.

Testing

  • Runs upstream's configured pytest --pyargs dipy (upstream skips it in the wheel job and only smoke-imports AffineMap; both run here).

License: OK

Pending CI.

luhenry added a commit that referenced this pull request Oct 13, 2026
deepdiff 9.1.0, pulled in through trx-python, requires cachebox<6, which
has no riscv64 wheel; pip falls back to its sdist, which needs a Rust
toolchain and fails, so installing the wheel for testing fails. The
registry only carries cachebox 6.x. With cachebox binary-only, pip
backtracks to deepdiff 9.0.0, which does not depend on cachebox.
All three legs of PR #3112 segfaulted inside libgomp while running
`pytest --pyargs dipy`: cp312 and cp314 faulted building a
StatefulTractogram in dipy/conftest.py's doctest runner, with the C
stack going through dipy.libs/libgomp -> tractogen's compiled
extension -> libgomp again; cp313 faulted inside the nlmeans compiled
extension from denoise/tests/test_denoise.py::test_denoise. All three
are a bare "Fatal Python error: Segmentation fault" with no Python
frame at fault and the OpenMP runtime on the C stack -- CLAUDE.md
gotcha 166's signature for the riscv64 runners' libgomp: a fault
inside the OpenMP runtime, specific to the dynamic/guided work-share
schedules, not confined to one function.

`grep -rn "schedule(dynamic\|schedule(guided" --include=*.pyx` over
dipy's tree finds seven loops across four files: tracking/tractogen.pyx
(the one that crashed cp312/cp314), denoise/denspeed.pyx's _nlmeans_3d
and nlmeans_3d_blockwise (the one that crashed cp313, plus two more
dynamic loops in the same file), denoise/shift_twist_convolution.pyx,
and tracking/fbcmeasures.pyx. Patch all seven to schedule(static), per
gotcha 166, and apply the patch as part of the build.

This branch has not been deployed

No deployments
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