Skip to content

Commit

Permalink
Add human readable ids to test (#485)
Browse files Browse the repository at this point in the history
  • Loading branch information
fzimmermann89 authored Nov 12, 2024
1 parent 4556795 commit a821413
Show file tree
Hide file tree
Showing 9 changed files with 217 additions and 193 deletions.
3 changes: 2 additions & 1 deletion tests/algorithms/test_cg.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,8 @@
(1, 32, False),
(4, 32, True),
(4, 32, False),
]
],
ids=['complex_single', 'real_single', 'complex_batch', 'real_batch'],
)
def system(request):
"""Generate data for creating a system Hx=b with linear and self-adjoint
Expand Down
300 changes: 151 additions & 149 deletions tests/conftest.py
Original file line number Diff line number Diff line change
Expand Up @@ -233,178 +233,180 @@ def create_uniform_traj(nk, k_shape):
return k


def create_traj(k_shape, nkx, nky, nkz, sx, sy, sz):
def create_traj(k_shape, nkx, nky, nkz, type_kx, type_ky, type_kz):
"""Create trajectory with random entries."""
random_generator = RandomGenerator(seed=0)
k_list = []
for spacing, nk in zip([sz, sy, sx], [nkz, nky, nkx], strict=True):
if spacing == 'nuf':
for spacing, nk in zip([type_kz, type_ky, type_kx], [nkz, nky, nkx], strict=True):
if spacing == 'non-uniform':
k = random_generator.float32_tensor(size=nk)
elif spacing == 'uf':
elif spacing == 'uniform':
k = create_uniform_traj(nk, k_shape=k_shape)
elif spacing == 'z':
elif spacing == 'zero':
k = torch.zeros(nk)
k_list.append(k)
trajectory = KTrajectory(k_list[0], k_list[1], k_list[2], repeat_detection_tolerance=None)
return trajectory


COMMON_MR_TRAJECTORIES = pytest.mark.parametrize(
('im_shape', 'k_shape', 'nkx', 'nky', 'nkz', 'sx', 'sy', 'sz', 's0', 's1', 's2'),
('im_shape', 'k_shape', 'nkx', 'nky', 'nkz', 'type_kx', 'type_ky', 'type_kz', 'type_k0', 'type_k1', 'type_k2'),
[
# (0) 2d cart mri with 1 coil, no oversampling
(
(1, 1, 1, 96, 128), # img shape
(1, 1, 1, 96, 128), # k shape
(1, 1, 1, 128), # kx
(1, 1, 96, 1), # ky
(1, 1, 1, 1), # kz
'uf', # kx is uniform
'uf', # ky is uniform
'z', # zero so no Fourier transform is performed along that dimension
'uf', # k0 is uniform
'uf', # k1 is uniform
'z', # k2 is singleton
( # (0) 2d Cartesian single coil, no oversampling
(1, 1, 1, 96, 128), # im_shape
(1, 1, 1, 96, 128), # k_shape
(1, 1, 1, 128), # nkx
(1, 1, 96, 1), # nky
(1, 1, 1, 1), # nkz
'uniform', # type_kx
'uniform', # type_ky
'zero', # type_kz
'uniform', # type_k0
'uniform', # type_k1
'zero', # type_k2
),
# (1) 2d cart mri with 1 coil, with oversampling
(
(1, 1, 1, 96, 128),
(1, 1, 1, 128, 192),
(1, 1, 1, 192),
(1, 1, 128, 1),
(1, 1, 1, 1),
'uf',
'uf',
'z',
'uf',
'uf',
'z',
( # (1) 2d Cartesian single coil, with oversampling
(1, 1, 1, 96, 128), # im_shape
(1, 1, 1, 128, 192), # k_shape
(1, 1, 1, 192), # nkx
(1, 1, 128, 1), # nky
(1, 1, 1, 1), # nkz
'uniform', # type_kx
'uniform', # type_ky
'zero', # type_kz
'uniform', # type_k0
'uniform', # type_k1
'zero', # type_k2
),
# (2) 2d non-Cartesian mri with 2 coils
(
(1, 2, 1, 96, 128),
(1, 2, 1, 16, 192),
(1, 1, 16, 192),
(1, 1, 16, 192),
(1, 1, 1, 1),
'nuf', # kx is non-uniform
'nuf',
'z',
'nuf',
'nuf',
'z',
( # (2) 2d non-Cartesian mri with 2 coils
(1, 2, 1, 96, 128), # im_shape
(1, 2, 1, 16, 192), # k_shape
(1, 1, 16, 192), # nkx
(1, 1, 16, 192), # nky
(1, 1, 1, 1), # nkz
'non-uniform', # type_kx
'non-uniform', # type_ky
'zero', # type_kz
'non-uniform', # type_k0
'non-uniform', # type_k1
'zero', # type_k2
),
# (3) 2d cart mri with irregular sampling
(
(1, 1, 1, 96, 128),
(1, 1, 1, 1, 192),
(1, 1, 1, 192),
(1, 1, 1, 192),
(1, 1, 1, 1),
'uf',
'uf',
'z',
'uf',
'z',
'z',
( # (3) 2d Cartesian with irregular sampling
(1, 1, 1, 96, 128), # im_shape
(1, 1, 1, 1, 192), # k_shape
(1, 1, 1, 192), # nkx
(1, 1, 1, 192), # nky
(1, 1, 1, 1), # nkz
'uniform', # type_kx
'uniform', # type_ky
'zero', # type_kz
'uniform', # type_k0
'zero', # type_k1
'zero', # type_k2
),
# (4) 2d single shot spiral
(
(1, 2, 1, 96, 128),
(1, 1, 1, 1, 192),
(1, 1, 1, 192),
(1, 1, 1, 192),
(1, 1, 1, 1),
'nuf',
'nuf',
'z',
'nuf',
'z',
'z',
( # (4) 2d single shot spiral
(1, 2, 1, 96, 128), # im_shape
(1, 1, 1, 1, 192), # k_shape
(1, 1, 1, 192), # nkx
(1, 1, 1, 192), # nky
(1, 1, 1, 1), # nkz
'non-uniform', # type_kx
'non-uniform', # type_ky
'zero', # type_kz
'non-uniform', # type_k0
'zero', # type_k1
'zero', # type_k2
),
# (5) 3d nuFFT mri, 4 coils, 2 other
(
(2, 4, 16, 32, 64),
(2, 4, 16, 32, 64),
(2, 16, 32, 64),
(2, 16, 32, 64),
(2, 16, 32, 64),
'nuf',
'nuf',
'nuf',
'nuf',
'nuf',
'nuf',
( # (5) 3d non-uniform, 4 coils, 2 other
(2, 4, 16, 32, 64), # im_shape
(2, 4, 16, 32, 64), # k_shape
(2, 16, 32, 64), # nkx
(2, 16, 32, 64), # nky
(2, 16, 32, 64), # nkz
'non-uniform', # type_kx
'non-uniform', # type_ky
'non-uniform', # type_kz
'non-uniform', # type_k0
'non-uniform', # type_k1
'non-uniform', # type_k2
),
# (6) 2d nuFFT cine mri with 8 cardiac phases, 5 coils
(
(8, 5, 1, 64, 64),
(8, 5, 1, 18, 128),
(8, 1, 18, 128),
(8, 1, 18, 128),
(8, 1, 1, 1),
'nuf',
'nuf',
'z',
'nuf',
'nuf',
'z',
( # (6) 2d non-uniform cine with 8 cardiac phases, 5 coils
(8, 5, 1, 64, 64), # im_shape
(8, 5, 1, 18, 128), # k_shape
(8, 1, 18, 128), # nkx
(8, 1, 18, 128), # nky
(8, 1, 1, 1), # nkz
'non-uniform', # type_kx
'non-uniform', # type_ky
'zero', # type_kz
'non-uniform', # type_k0
'non-uniform', # type_k1
'zero', # type_k2
),
# (7) 2d cart cine mri with 9 cardiac phases, 6 coils
(
(9, 6, 1, 96, 128),
(9, 6, 1, 128, 192),
(9, 1, 1, 192),
(9, 1, 128, 1),
(9, 1, 1, 1),
'uf',
'uf',
'z',
'uf',
'uf',
'z',
( # (7) 2d cartesian cine with 9 cardiac phases, 6 coils
(9, 6, 1, 96, 128), # im_shape
(9, 6, 1, 128, 192), # k_shape
(9, 1, 1, 192), # nkx
(9, 1, 128, 1), # nky
(9, 1, 1, 1), # nkz
'uniform', # type_kx
'uniform', # type_ky
'zero', # type_kz
'uniform', # type_k0
'uniform', # type_k1
'zero', # type_k2
),
# (8) radial phase encoding (RPE), 8 coils, with oversampling in both FFT and nuFFT directions
(
(2, 8, 64, 32, 48),
(2, 8, 8, 64, 96),
(2, 1, 1, 96),
(2, 8, 64, 1),
(2, 8, 64, 1),
'uf',
'nuf',
'nuf',
'uf',
'nuf',
'nuf',
( # (8) radial phase encoding (RPE), 8 coils, with oversampling in both FFT and non-uniform directions
(2, 8, 64, 32, 48), # im_shape
(2, 8, 8, 64, 96), # k_shape
(2, 1, 1, 96), # nkx
(2, 8, 64, 1), # nky
(2, 8, 64, 1), # nkz
'uniform', # type_kx
'non-uniform', # type_ky
'non-uniform', # type_kz
'uniform', # type_k0
'non-uniform', # type_k1
'non-uniform', # type_k2
),
# (9) radial phase encoding (RPE) , 8 coils with non-Cartesian sampling along readout
(
(2, 8, 64, 32, 48),
(2, 8, 8, 64, 96),
(2, 1, 1, 96),
(2, 8, 64, 1),
(2, 8, 64, 1),
'nuf',
'nuf',
'nuf',
'nuf',
'nuf',
'nuf',
( # (9) radial phase encoding (RPE), 8 coils with non-Cartesian sampling along readout
(2, 8, 64, 32, 48), # im_shape
(2, 8, 8, 64, 96), # k_shape
(2, 1, 1, 96), # nkx
(2, 8, 64, 1), # nky
(2, 8, 64, 1), # nkz
'non-uniform', # type_kx
'non-uniform', # type_ky
'non-uniform', # type_kz
'non-uniform', # type_k0
'non-uniform', # type_k1
'non-uniform', # type_k2
),
# (10) stack of stars, 5 other, 3 coil, oversampling in both FFT and nuFFT directions
(
(5, 3, 48, 16, 32),
(5, 3, 96, 18, 64),
(5, 1, 18, 64),
(5, 1, 18, 64),
(5, 96, 1, 1),
'nuf',
'nuf',
'uf',
'nuf',
'nuf',
'uf',
( # (10) stack of stars, 5 other, 3 coil, oversampling in both FFT and non-uniform directions
(5, 3, 48, 16, 32), # im_shape
(5, 3, 96, 18, 64), # k_shape
(5, 1, 18, 64), # nkx
(5, 1, 18, 64), # nky
(5, 96, 1, 1), # nkz
'non-uniform', # type_kx
'non-uniform', # type_ky
'uniform', # type_kz
'non-uniform', # type_k0
'non-uniform', # type_k1
'uniform', # type_k2
),
],
ids=[
'2d_cartesian_1_coil_no_oversampling',
'2d_cartesian_1_coil_with_oversampling',
'2d_non_cartesian_mri_2_coils',
'2d_cartesian_irregular_sampling',
'2d_single_shot_spiral',
'3d_nonuniform_4_coils_2_other',
'2d_nnonuniform_cine_mri_8_cardiac_phases_5_coils',
'2d_cartesian_cine_9_cardiac_phases_6_coils',
'radial_phase_encoding_8_coils_with_oversampling',
'radial_phase_encoding_8_coils_non_cartesian_sampling',
'stack_of_stars_5_other_3_coil_with_oversampling',
],
)
8 changes: 4 additions & 4 deletions tests/data/test_rotation.py
Original file line number Diff line number Diff line change
Expand Up @@ -535,7 +535,7 @@ def _test_stats(error: torch.Tensor, mean_max: float, rms_max: float) -> None:
assert torch.all(rms < rms_max)


@pytest.mark.parametrize('seq_tuple', permutations('xyz'))
@pytest.mark.parametrize('seq_tuple', permutations('xyz'), ids=str)
@pytest.mark.parametrize('intrinsic', [False, True])
def test_as_euler_asymmetric_axes(seq_tuple, intrinsic):
rnd = RandomGenerator(0)
Expand All @@ -555,7 +555,7 @@ def test_as_euler_asymmetric_axes(seq_tuple, intrinsic):
_test_stats(angles_quat - angles, 1e-15, 1e-14)


@pytest.mark.parametrize('seq_tuple', permutations('xyz'))
@pytest.mark.parametrize('seq_tuple', permutations('xyz'), ids=str)
@pytest.mark.parametrize('intrinsic', [False, True])
def test_as_euler_symmetric_axes(seq_tuple, intrinsic):
rnd = RandomGenerator(0)
Expand All @@ -576,7 +576,7 @@ def test_as_euler_symmetric_axes(seq_tuple, intrinsic):
_test_stats(angles_quat - angles, 1e-16, 1e-14)


@pytest.mark.parametrize('seq_tuple', permutations('xyz'))
@pytest.mark.parametrize('seq_tuple', permutations('xyz'), ids=str)
@pytest.mark.parametrize('intrinsic', [False, True])
def test_as_euler_degenerate_asymmetric_axes(seq_tuple, intrinsic):
# Since we cannot check for angle equality, we check for rotation matrix
Expand All @@ -598,7 +598,7 @@ def test_as_euler_degenerate_asymmetric_axes(seq_tuple, intrinsic):
torch.testing.assert_close(mat_expected, mat_estimated)


@pytest.mark.parametrize('seq_tuple', permutations('xyz'))
@pytest.mark.parametrize('seq_tuple', permutations('xyz'), ids=str)
@pytest.mark.parametrize('intrinsic', [False, True])
def test_as_euler_degenerate_symmetric_axes(seq_tuple, intrinsic):
# Since we cannot check for angle equality, we check for rotation matrix
Expand Down
Loading

3 comments on commit a821413

@github-actions
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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
   KHeader.py1531789%25, 119–123, 150, 199, 210, 217–218, 221, 228, 260–271
   KNoise.py311552%39–52, 56–61
   KTrajectory.py69593%178–182
   MoveDataMixin.py1371887%15, 113, 129, 143–145, 207, 305–307, 320, 399, 419–420, 422, 437–438, 440
   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.py2302191%33, 103, 128, 135, 141, 261–263, 276–278, 312, 330, 343, 356, 369, 382, 391–392, 407, 416
   acq_filters.py12192%47
src/mrpro/data/_kdata
   KData.py1121884%108–109, 124, 131, 141, 149, 203–204, 242, 247–248, 267–278
   KDataRemoveOsMixin.py29293%44, 46
   KDataSelectMixin.py19289%48, 63
   KDataSplitMixin.py48394%53, 84, 93
src/mrpro/data/traj_calculators
   KTrajectoryCalculator.py25292%23, 45
   KTrajectoryIsmrmrd.py13285%41, 50
   KTrajectoryPulseq.py29197%54
src/mrpro/operators
   CartesianSamplingOp.py50492%49–50, 90, 116
   ConstraintsOp.py60297%46, 48
   EndomorphOperator.py65297%228, 234
   FiniteDifferenceOp.py27293%40, 105
   FourierOp.py77199%131
   Functional.py71593%20–22, 117, 119
   GridSamplingOp.py136993%72–73, 82–83, 90–91, 94, 96, 98
   LinearOperator.py1711293%55, 91, 190, 220, 261, 270, 278, 287, 295, 320, 418, 423
   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.py120596%152, 170, 205, 210, 233
   ZeroPadOp.py16194%30
src/mrpro/utils
   filters.py62297%44, 49
   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
TOTAL472535393% 

Tests Skipped Failures Errors Time
1966 0 💤 0 ❌ 0 🔥 1m 33s ⏱️

@github-actions
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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
   KHeader.py1531789%25, 119–123, 150, 199, 210, 217–218, 221, 228, 260–271
   KNoise.py311552%39–52, 56–61
   KTrajectory.py69593%178–182
   MoveDataMixin.py1371887%15, 113, 129, 143–145, 207, 305–307, 320, 399, 419–420, 422, 437–438, 440
   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.py2302191%33, 103, 128, 135, 141, 261–263, 276–278, 312, 330, 343, 356, 369, 382, 391–392, 407, 416
   acq_filters.py12192%47
src/mrpro/data/_kdata
   KData.py1121884%108–109, 124, 131, 141, 149, 203–204, 242, 247–248, 267–278
   KDataRemoveOsMixin.py29293%44, 46
   KDataSelectMixin.py19289%48, 63
   KDataSplitMixin.py48394%53, 84, 93
src/mrpro/data/traj_calculators
   KTrajectoryCalculator.py25292%23, 45
   KTrajectoryIsmrmrd.py13285%41, 50
   KTrajectoryPulseq.py29197%54
src/mrpro/operators
   CartesianSamplingOp.py50492%49–50, 90, 116
   ConstraintsOp.py60297%46, 48
   EndomorphOperator.py65297%228, 234
   FiniteDifferenceOp.py27293%40, 105
   FourierOp.py77199%131
   Functional.py71593%20–22, 117, 119
   GridSamplingOp.py136993%72–73, 82–83, 90–91, 94, 96, 98
   LinearOperator.py1711293%55, 91, 190, 220, 261, 270, 278, 287, 295, 320, 418, 423
   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.py120596%152, 170, 205, 210, 233
   ZeroPadOp.py16194%30
src/mrpro/utils
   filters.py62297%44, 49
   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
TOTAL472535393% 

Tests Skipped Failures Errors Time
1966 0 💤 0 ❌ 0 🔥 1m 29s ⏱️

@github-actions
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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
   KHeader.py1531789%25, 119–123, 150, 199, 210, 217–218, 221, 228, 260–271
   KNoise.py311552%39–52, 56–61
   KTrajectory.py69593%178–182
   MoveDataMixin.py1371887%15, 113, 129, 143–145, 207, 305–307, 320, 399, 419–420, 422, 437–438, 440
   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.py2302191%33, 103, 128, 135, 141, 261–263, 276–278, 312, 330, 343, 356, 369, 382, 391–392, 407, 416
   acq_filters.py12192%47
src/mrpro/data/_kdata
   KData.py1121884%108–109, 124, 131, 141, 149, 203–204, 242, 247–248, 267–278
   KDataRemoveOsMixin.py29293%44, 46
   KDataSelectMixin.py19289%48, 63
   KDataSplitMixin.py48394%53, 84, 93
src/mrpro/data/traj_calculators
   KTrajectoryCalculator.py25292%23, 45
   KTrajectoryIsmrmrd.py13285%41, 50
   KTrajectoryPulseq.py29197%54
src/mrpro/operators
   CartesianSamplingOp.py50492%49–50, 90, 116
   ConstraintsOp.py60297%46, 48
   EndomorphOperator.py65297%228, 234
   FiniteDifferenceOp.py27293%40, 105
   FourierOp.py77199%131
   Functional.py71593%20–22, 117, 119
   GridSamplingOp.py136993%72–73, 82–83, 90–91, 94, 96, 98
   LinearOperator.py1711293%55, 91, 190, 220, 261, 270, 278, 287, 295, 320, 418, 423
   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.py120596%152, 170, 205, 210, 233
   ZeroPadOp.py16194%30
src/mrpro/utils
   filters.py62297%44, 49
   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
TOTAL472535393% 

Tests Skipped Failures Errors Time
1966 0 💤 0 ❌ 0 🔥 1m 35s ⏱️

Please sign in to comment.