Skip to content

chore: stop installing pynufft in Hands/Heart CI and CTI install docs #258

Description

@Jammy2211

Overview

pynufft is no longer a dependency of any PyAuto library — @PyAutoLabs/PyAutoArray#475 deleted TransformerNUFFTPyNUFFT and dropped pynufft from both the optional and dev extras. Four CI recipes and one install doc still install it. This is phase 3 of 3 of the pynufft-removal residue sweep (phases 1 and 2 shipped 2026-08-23); it is the CI + install-doc tier and is independent of the other two.

Severity is low and this is not urgent: every site pins 2025.1.1, not the broken 2022.2.2, so nothing is hitting the scipy.linalg.pinv2 failure and no build is red. What it costs is install time and unnecessary resolver surface on every release/validation run.

Plan

  • Drop pip install pynufft==2025.1.1 from PyAutoHands release.yml (3 sites — one bare, two alongside numba, where numba is kept).
  • Drop the same line from PyAutoHeart workspace-validation.yml (mode=release install step; numba kept).
  • Delete pip install pynufft from PyAutoCTI docs/installation/source.rst, having first verified PyAutoCTI's suite genuinely passes without it.
  • Confirm the affected workflows green afterwards — every run and every matrix leg.
Detailed implementation plan

Work Classification

Workspace / CI-and-docs. No PyAuto* library source changes, so there is no library-first merge gate — the three PRs are independent of one another and can merge in any order.

Affected Repositories

  • PyAutoLabs/PyAutoHands (primary — 3 of the 4 CI sites)
  • PyAutoLabs/PyAutoHeart
  • PyAutoLabs/PyAutoCTI

Branch Survey

Repository Current Branch Dirty?
PyAutoHands main clean
PyAutoHeart main clean
PyAutoCTI main clean

Suggested branch: feature/pynufft-removal-phase-3 (all three repos)

Mobile session — no worktrees; work is done against fresh clones and pushed as three feature branches.

Implementation Steps

  1. PyAutoHands/.github/workflows/release.yml
    • release_test_pypiTests step (~:296): delete the bare pip install pynufft==2025.1.1, leaving pytest and numba.
    • run_smoke_testsInstall from TestPyPI at pinned version (~:355): pip install pynufft==2025.1.1 numbapip install numba.
    • release_workspacesRegenerate API audit baseline (~:774): same rewrite.
    • The neighbouring "matplotlib deliberately unpinned" comments are about matplotlib, not pynufft — left untouched.
  2. PyAutoHeart/.github/workflows/workspace-validation.yml (~:302), the mode=release "Install TestPyPI wheels" step: pip install pynufft==2025.1.1 numbapip install numba. The nufftax>=0.6.1,<0.7.0 install two lines down is the live NUFFT backend and stays.
  3. PyAutoCTI/docs/installation/source.rst:58: delete pip install pynufft under "For unit tests to pass you will also need the following optional requirements".

Verification that PyAutoCTI's suite does not need pynufft

Verified rather than assumed, three ways:

  • PyAutoCTI/.github/workflows/main.yml is a thin caller of PyAutoHeart's reusable lib-tests.yml, which installs pip install ./PyAutoCTI[optional] (plus the PyAutoNerves/PyAutoFit/PyAutoArray chain) and never installs pynufft in either leg.
  • PyAutoCTI/pyproject.toml's optional extra is ["numba"] — pynufft is not in it.
  • The latest main run of that workflow (run 31134701968, head f40b2f7) is success across every leg: unittest on Python 3.12 and 3.13, plus the unittest-nojax leg.
  • A full-tree grep of PyAutoCTI finds pynufft only in paper/paper.bib, files/citations.tex (both published-record material, deliberately out of scope) and the doc line being deleted — no import, no test, no config.

Key Files

  • PyAutoHands/.github/workflows/release.yml — 3 sites
  • PyAutoHeart/.github/workflows/workspace-validation.yml — 1 site
  • PyAutoCTI/docs/installation/source.rst — 1 line

Green-CI caveat (read before closing this issue)

Every changed line lives on a release path, not on a PR-triggered path:

  • release.yml is workflow_dispatch-only; the Tests step runs in rehearsal and live mode, while run_smoke_tests and release_workspaces are live-only.
  • workspace-validation.yml's pynufft line is inside the mode=release install step, reached only via release-integrate.yml (Brain Release Agent dispatch, after an M1 TestPyPI rehearsal). The continuous mode=smoke channel never executed it.

So ordinary PR CI cannot exercise these lines. Full green confirmation therefore lands on the next release rehearsal / nightly release run; each repo's own PR checks are the pre-merge signal. Heart is currently RED on "release validation FAILED" for unrelated reasons.

Out of scope, noted while verifying

  • PyAutoCTI/docs/installation/source.rst still lists pip install pylops==1.11.1 in the same block, and CTI's CI installs no pylops either while passing — the same evidence falsifies that line too. Not touched here (this task is scoped to pynufft); worth a follow-up.
  • The same file points at PyAutoCTI/requirements.txt and PyAutoArray/optional_requirements.txt, neither of which exists any more (packaging moved to pyproject.toml extras). Separate doc rot, separate task.
  • PyAutoCTI/files/citations.tex still asks users to cite PyNUFFT. Published-record class, deliberately untouched.

Original Prompt

Click to expand starting prompt
# Phase 3: stop installing pynufft in Hands/Heart CI and PyAutoCTI install docs

Type: maintenance
Target: ci
Repos:
- @PyAutoHands
- @PyAutoHeart
- @PyAutoCTI
Difficulty: low
Autonomy: supervised
Priority: normal
Status: draft
Filed: 2026-08-23

Phase 3 of 3. Parent: `pynufft_removal_downstream_residue.md`. Independent of
phases 1 and 2.

`pynufft` is no longer a dependency of any PyAuto library (@PyAutoArray#475
dropped it from both `optional` and `dev`), but four CI recipes and one install
doc still install it.

## Sites

- `@PyAutoHands/.github/workflows/release.yml:296,355,774``pip install pynufft==2025.1.1` (once bare, twice with `numba`)
- `@PyAutoHeart/.github/workflows/workspace-validation.yml:302` — same
- `@PyAutoCTI/docs/installation/source.rst:58``pip install pynufft`, listed
  under "For unit tests to pass you will also need the following optional
  requirements". **Confirm PyAutoCTI's suite genuinely has no such need before
  deleting the line** — verify, do not assume.

## Severity

Not urgent. These pin **2025.1.1**, not the broken `2022.2.2`, so they are
**not** hitting the `scipy.linalg.pinv2` failure and no build is red. This is
wasted install time and unnecessary resolver surface.

Worth knowing while working: these recipes are the only reason the local dev
environment still has `pynufft 2025.1.1` installed at all — removing them
changes what a fresh local env contains.

## Acceptance

- No PyAuto CI workflow installs `pynufft`.
- PyAutoCTI's install doc no longer instructs users to, with evidence its tests
  pass without it.
- The affected workflows are confirmed green afterwards — **every run and every
  matrix leg**, not just the first one reported.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions