Skip to content

Fix Reconstructions on cuda#968

Merged
fzimmermann89 merged 18 commits intomainfrom
fix_recon_cuda
Apr 16, 2026
Merged

Fix Reconstructions on cuda#968
fzimmermann89 merged 18 commits intomainfrom
fix_recon_cuda

Conversation

@fzimmermann89
Copy link
Copy Markdown
Member

@fzimmermann89 fzimmermann89 commented Feb 12, 2026

Replaces .csm and .dcf on the plug and play reconstructions by .csm_op and .dcf_op, respectifly

This is a quick fix for moving a reconstruction to cuda.
currently,
reco.cuda() would not move dcf/csm, and application to a cuda tensor fails.

(..Alterntive would be implementing a custom .to that also moves dataclasses.... but i wont have time for that.)

recalculate_csm used type(self)(...) to create a temporary reconstruction
for CSM estimation, which failed for subclasses with required keyword-only
arguments (RegularizedIterativeSENSEReconstruction, TotalVariationRegularizedReconstruction).

Instead, add optional csm/noise override parameters to direct_reconstruction
using the existing Literal[False] pattern, and call it directly from
recalculate_csm with csm=False to skip coil combination.
@fzimmermann89 fzimmermann89 changed the title Fix recon cuda Fix Reconstructions on cuda Feb 12, 2026
@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented Feb 12, 2026

Coverage

Coverage Report
FileStmtsMissCoverMissing
src/mrpro
   _version.py6267%7–8
src/mrpro/algorithms/csm
   inati.py25196%43
src/mrpro/algorithms/dcf
   dcf_voronoi.py55493%15, 55–56, 89
src/mrpro/algorithms/optimizers
   adam.py30680%108, 125–129
   cg.py52198%139
   pdhg.py81396%180–181, 187
   pgd.py53492%108, 153–156
src/mrpro/algorithms/reconstruction
   DirectReconstruction.py30293%64, 80
   Reconstruction.py56886%57–59, 123–126, 128, 136
   RegularizedIterativeSENSEReconstruction.py52296%125, 153
   TotalVariationRegularizedReconstruction.py54493%106, 112, 129, 132
src/mrpro/data
   AcqInfo.py165796%49, 56, 134–135, 137, 243, 367
   Dataclass.py3112692%58, 319, 335, 401, 465–467, 480, 575, 595–596, 598, 613–614, 616, 663–664, 669–670, 855–856, 881, 888, 893–894, 896
   DcfData.py33197%62
   EncodingLimits.py97397%37, 127, 130
   IData.py1781293%138, 155–156, 217–225, 258, 304, 322
   IHeader.py174895%49, 98–101, 284, 288, 292, 296
   KData.py2302490%122–123, 138, 145, 156–167, 178, 186, 197, 236, 258–260, 307–308, 380, 546, 548, 620
   KHeader.py1761393%115–121, 148, 196, 203–204, 231–238
   KNoise.py22195%44
   KTrajectory.py95397%163, 165, 185
   QData.py32197%43
   Rotation.py7374294%104, 202, 339, 437, 481, 499, 586, 588, 597, 634, 636, 699, 776, 781, 784, 799, 816, 821, 897, 1085, 1090, 1093, 1117, 1121, 1145, 1265, 1267, 1275–1276, 1340, 1422, 1626, 1633–1635, 1694, 1790, 1942, 1977, 1981, 2156, 2177
   SpatialDimension.py1501987%34, 103, 146, 158, 278–280, 293–295, 329, 347, 360, 373, 386, 399, 408–409, 437
src/mrpro/data/traj_calculators
   KTrajectoryCalculator.py26292%84, 95
   KTrajectoryCartesian.py31487%129–132, 136
   KTrajectoryIsmrmrd.py19195%57
   KTrajectorySpiral2D.py571377%63–66, 69, 71, 73, 75, 77, 105, 107, 134–136
src/mrpro/operators
   AveragingOp.py38295%73, 115
   CartesianSamplingOp.py112496%152, 191, 266, 387
   ConjugateGradientOp.py89792%62, 64, 100, 106, 228, 230, 233
   ConstraintsOp.py85495%78, 80, 250, 255
   EndomorphOperator.py28293%71, 77
   FiniteDifferenceOp.py29293%40, 126
   FourierOp.py105991%85–87, 192–193, 212, 257, 321, 326
   Functional.py70297%116, 118
   GridSamplingOp.py1651591%72–73, 82–83, 90–91, 94, 96, 98, 282, 290–291, 306, 312–313
   LinearOperator.py202697%217, 255, 296, 305, 313, 330
   LinearOperatorMatrix.py1741989%99, 136, 169, 178, 183, 192–195, 208–211, 219–220, 225–226, 238, 347, 377, 404
   MultiIdentityOp.py16288%58, 63
   NonUniformFastFourierOp.py1981095%72, 99, 221, 223, 261, 263, 340, 397, 471, 476
   Operator.py88397%82, 115, 125
   PatchOp.py49394%93, 129, 144
   ProximableFunctionalSeparableSum.py44393%118, 213, 224
   SliceProjectionOp.py1781094%45, 62, 64, 70, 154, 180, 216, 253, 290, 330
   WaveletOp.py119397%184, 228, 254
   ZeroPadOp.py18194%30
src/mrpro/operators/functionals
   SSIM.py73790%60–80, 82, 86, 114, 147
src/mrpro/operators/models
   EPG.py2561993%31–32, 283, 288, 304–306, 326–327, 332, 356, 361, 386, 391, 545, 599, 738, 755, 782
src/mrpro/phantoms
   EllipsePhantom.py43295%66, 131
   brainweb.py2974087%276, 290–294, 349–359, 398, 454–457, 479–480, 485–486, 488–489, 493, 501, 508–509, 550, 621, 624–625, 644, 653–656, 667, 669, 700–701, 715, 723
   fastmri.py1061091%50–51, 59, 65, 162, 169–171, 174–175, 189
   m4raw.py74495%58–59, 74, 76
   mdcnn.py71790%58, 62–63, 70, 82, 88, 135
src/mrpro/utils
   RandomGenerator.py1561590%23–24, 36, 38, 188, 212, 428, 446, 528, 799, 829–832, 895, 898
   ema.py42490%49, 74, 78, 82
   filters.py61198%46
   indexing.py177199%321
   pad_or_crop.py39685%40, 43, 46, 49, 66, 73
   reshape.py1531093%176, 370, 482–484, 505, 508–509, 515, 530
   slice_profiles.py49688%21, 37, 119–122, 155
   split_idx.py10280%43, 47
   summarize.py57689%40–41, 70–73, 81
   unit_conversion.py721579%34, 44, 51, 53, 62, 69, 71, 78, 80, 89, 100, 121, 123, 144, 146
TOTAL798247994% 

Tests Skipped Failures Errors Time
3055 0 💤 0 ❌ 0 🔥 2m 25s ⏱️

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented Feb 12, 2026

📚 Documentation

📁 Download as zip
🔍 View online

@fzimmermann89 fzimmermann89 added the pre-commit.ci autofix run autofix in this PR label Feb 20, 2026
@pre-commit-ci pre-commit-ci Bot removed the pre-commit.ci autofix run autofix in this PR label Feb 20, 2026
@fzimmermann89 fzimmermann89 added the pre-commit.ci autofix run autofix in this PR label Feb 20, 2026
@pre-commit-ci pre-commit-ci Bot removed the pre-commit.ci autofix run autofix in this PR label Feb 20, 2026
@fzimmermann89
Copy link
Copy Markdown
Member Author

@schuenke @ckolbPTB
your opinion here?
would be great if reco.cuda() would work.
(still need to fix mypy)

@fzimmermann89 fzimmermann89 merged commit fd1a245 into main Apr 16, 2026
26 checks passed
@fzimmermann89 fzimmermann89 deleted the fix_recon_cuda branch April 16, 2026 10:45
@fzimmermann89 fzimmermann89 mentioned this pull request Apr 16, 2026
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