Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add gradient and autodiff checks for linear operators #536

Open
wants to merge 14 commits into
base: main
Choose a base branch
from

Conversation

ckolbPTB
Copy link
Collaborator

@ckolbPTB ckolbPTB commented Nov 14, 2024

This supersedes #407 - it was too difficult to bring this up-to-date with main.

forward_mode_autodiff_of_linear_operator_test and gradient_of_linear_operator_test still need to be added to

  • ZeroOp
  • RearrangeOp
  • PCACompOp
  • GridSamplingOp

Do we want to run forward_mode_autodiff_of_linear_operator_test and gradient_of_linear_operator_test on all parametrize-options used for the adjointness tests?

Copy link
Contributor

github-actions bot commented Nov 14, 2024

Coverage

Coverage Report
FileStmtsMissCoverMissing
src/mrpro/algorithms/csm
   inati.py24196%44
   walsh.py16194%34
src/mrpro/algorithms/dcf
   dcf_voronoi.py53492%15, 48–49, 76
src/mrpro/algorithms/optimizers
   adam.py20195%69
src/mrpro/algorithms/reconstruction
   DirectReconstruction.py281643%51–71, 85
   IterativeSENSEReconstruction.py13192%76
   Reconstruction.py502256%42, 54–56, 80–87, 104–113
   RegularizedIterativeSENSEReconstruction.py411759%96–100, 114–139
src/mrpro/data
   AcqInfo.py128398%26, 169, 207
   CsmData.py29390%15, 82–84
   DcfData.py45882%18, 66, 78–83
   IData.py67987%119, 125, 129, 159–167
   IHeader.py75791%75, 109, 127–131
   KData.py2142588%111–112, 127, 134, 144, 152, 206–207, 245, 250–251, 270–281, 435, 437, 500, 515, 552, 583, 592
   KHeader.py1531789%25, 119–123, 150, 199, 210, 217–218, 221, 228, 260–271
   KNoise.py311552%39–52, 56–61
   KTrajectory.py811285%108–113, 116–118, 203–207
   MoveDataMixin.py1401887%15, 113, 129, 143–145, 207, 323–325, 338, 417, 437–438, 440, 455–456, 458
   QData.py39782%42, 65–73
   Rotation.py6743595%100, 198, 335, 433, 477, 495, 581, 583, 592, 626, 628, 691, 768, 773, 776, 791, 808, 813, 889, 1077, 1082, 1085, 1109, 1113, 1240, 1242, 1250–1251, 1315, 1397, 1690, 1846, 1881, 1885, 1996
   SpatialDimension.py2322191%34, 104, 141, 148, 154, 274–276, 289–291, 325, 343, 356, 369, 382, 395, 404–405, 420, 429
   acq_filters.py12192%47
src/mrpro/data/traj_calculators
   KTrajectoryCalculator.py25292%23, 45
   KTrajectoryIsmrmrd.py13285%41, 50
   KTrajectoryPulseq.py23196%55
src/mrpro/operators
   CartesianSamplingOp.py89397%118, 157, 280
   ConstraintsOp.py60297%46, 48
   EndomorphOperator.py65297%228, 234
   FiniteDifferenceOp.py27293%40, 105
   FourierOp.py158398%263, 381, 386
   Functional.py71593%20–22, 117, 119
   GridSamplingOp.py136993%72–73, 82–83, 90–91, 94, 96, 98
   LinearOperator.py168995%91, 190, 220, 261, 270, 278, 287, 295, 320
   LinearOperatorMatrix.py1581690%82, 119, 152, 161, 166, 175–178, 191–194, 203, 215, 304, 331, 359
   MultiIdentityOp.py13285%43, 48
   Operator.py78297%25, 74
   ProximableFunctionalSeparableSum.py39392%50, 103, 110
   SliceProjectionOp.py173895%44, 61, 63, 69, 206, 227, 260, 300
   WaveletOp.py119596%151, 169, 204, 209, 232
   ZeroPadOp.py16194%30
src/mrpro/utils
   filters.py62297%44, 49
   reshape.py60198%191
   slice_profiles.py46687%20, 36, 113–116, 149
   sliding_window.py34197%34
   split_idx.py10280%43, 47
   summarize_tensorvalues.py11918%20–29
   typing.py181139%8–23
   zero_pad_or_crop.py31681%26, 30, 54, 57, 60, 63
TOTAL489035993% 

Tests Skipped Failures Errors Time
2479 0 💤 0 ❌ 0 🔥 1m 22s ⏱️

Copy link
Contributor

github-actions bot commented Nov 14, 2024

📚 Documentation

📁 Download as zip
🔍 View online

@ckolbPTB
Copy link
Collaborator Author

Tests which currently do not pass:
FAILED tests/operators/test_slice_projection_op.py::test_slice_projection_op_grad - RuntimeError: Sparse CSR tensors do not have strides
FAILED tests/operators/test_slice_projection_op.py::test_slice_projection_op_forward_mode_autodiff - RuntimeError: Sparse CSR tensors do not have strides

@fzimmermann89
Copy link
Member

That is a known issue #409 🙈
pytorch/pytorch#97286 pytorch/pytorch#136357

There is imho no feasibe way tfor us to support the slice projection operator in torch.func.

Fixing it in pytorch would also be infeasible for us, as the the functorch c backend seems to cause the issue, as sparse tensors or completely missing in its implementation,

We could replace the sparse-matrix/dense vector multiplication by manual indexing and dotproducts. This will make it quite a bit slower and way more complicated.

For now, I would ether remove the tests or mark them as failing.

This mainly means that we cant solve a superresolutionproblem with fista or pdgh if we keep using torch.func for the gradients.

@ckolbPTB
Copy link
Collaborator Author

@fzimmermann89 do you think you could add the missing tests for GridSamplingOp? Everthing else should now be covered...

@ckolbPTB ckolbPTB mentioned this pull request Dec 10, 2024
23 tasks
@fzimmermann89
Copy link
Member

I moved #604 out of this PR, to unblock #293

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
Status: In Progress
Development

Successfully merging this pull request may close these issues.

2 participants