Skip to content

Conversation

@nHackel
Copy link
Member

@nHackel nHackel commented Sep 2, 2025

This PR adapts to the NFFT api changes discussed in #261. Note that I can't fully remove the NFFT dependency just yet, mainly because MRIOperators depends on some utility functions from NFFT such as the window function.

I've also had to remove the symetrize keyword since this made the dispatch break but I'm not quite sure why it worked before (yet).

I'll touch this PR again once we are happy with the other packages

EDIT: symetrize on NFFTOp was silently discarded previously

@nHackel
Copy link
Member Author

nHackel commented Nov 7, 2025

Closes #261. The interface implemented for AbstractNFFTs was released today as version 0.9.

NFFT.jl implements this interface in release 0.14, NonuniformFFTs in release 0.9 (thanks @jipolanco) and LinearOperatorCollection in release 2.2

@nHackel
Copy link
Member Author

nHackel commented Nov 7, 2025

I've decided to make this a "breaking" change release for MRIOperators. While technically the outer-interface and return types are unchanged, this offers a fundamentlly new feature which should be easy to select via version numbers.

In theory one could now try to also do MRIReco reconstructions and Co using NonuniformFFTs.jl

@nHackel nHackel marked this pull request as ready for review November 7, 2025 16:35
@nHackel
Copy link
Member Author

nHackel commented Nov 10, 2025

The new NFFTOp operator passes all its arguments to the NFFT backend. This allows a user to specify backend-specific keyword arguments. One downside is that additional/wrong keyword arguments can break the dispatch.

For now, this mostly meant that I have to capture some keyword arguments where I know they won't be used downstream. And I had to remove the symmetrize keyword argument from some tests and function calls. From what I can tell, this keyword argument has no effect and I couldn't find a state of the code where it had an affect going back 3ish years (before I started contributing to MRIReco software stack). If someone knows what that was supposed to do, please let me know and we can take a look at it in a new release/PR (@tknopp, @JakobAsslaender, @cncastillo, @aTrotier).

Another potential workaround is the option to allow LinearOperatorCollection to specialise on different NFFT backends. That's not a lot of extra work, I just haven't done it yet because there was/is no immediate use case and it's more package extensions to maintain

EDIT: I did do that

@nHackel nHackel merged commit 5a0faa5 into master Nov 10, 2025
49 of 60 checks passed
@codecov
Copy link

codecov bot commented Nov 10, 2025

Codecov Report

❌ Patch coverage is 85.71429% with 1 line in your changes missing coverage. Please review.
✅ Project coverage is 74.86%. Comparing base (935145e) to head (4dc0f37).
⚠️ Report is 2 commits behind head on master.

Files with missing lines Patch % Lines
MRIOperators/test/testOperators.jl 75.00% 1 Missing ⚠️
Additional details and impacted files
@@            Coverage Diff             @@
##           master     #262      +/-   ##
==========================================
- Coverage   74.90%   74.86%   -0.04%     
==========================================
  Files         102      102              
  Lines        5415     5415              
==========================================
- Hits         4056     4054       -2     
- Misses       1359     1361       +2     
Flag Coverage Δ
MRIBase 50.19% <ø> (ø)
MRICoilSensitivities 93.07% <ø> (ø)
MRIFiles 78.59% <ø> (-0.18%) ⬇️
MRIOperators 40.18% <66.66%> (ø)
MRIReco 42.24% <42.85%> (ø)
MRISampling 0.35% <ø> (ø)
MRISimulation 63.07% <100.00%> (ø)

Flags with carried forward coverage won't be shown. Click here to find out more.

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

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.

2 participants