@@ -505,6 +505,46 @@ def test_coregistration(scale_mode, ref_scale, grow_hair, fiducials, fid_match):
505505 assert_allclose (coreg ._parameters , default_params )
506506
507507
508+ @pytest .mark .slowtest
509+ @testing .requires_testing_data
510+ def test_coreg_fitting_invariants ():
511+ """Randomized regression net for Coregistration fitting properties."""
512+ pytest .importorskip ("nibabel" )
513+ fiducials , _ = read_fiducials (fid_fname )
514+ info = read_info (raw_fname )
515+ coreg = Coregistration (
516+ info , subject = "sample" , subjects_dir = subjects_dir , fiducials = fiducials
517+ )
518+ rng = np .random .default_rng (0 )
519+
520+ # omit_head_shape_points
521+ all_dists = coreg ._orig_hsp_point_distance
522+ distances = np .sort (rng .uniform (all_dists .min (), all_dists .max (), size = 5 ))[::- 1 ]
523+ prev_n_kept = len (all_dists )
524+ for distance in distances :
525+ coreg .omit_head_shape_points (distance = distance )
526+ kept = coreg ._orig_hsp_point_distance [coreg ._extra_points_filter ]
527+ assert (kept <= distance ).all ()
528+ assert len (kept ) <= prev_n_kept
529+ prev_n_kept = len (kept )
530+
531+ # fit_fiducials / fit_icp
532+ for _ in range (5 ):
533+ coreg .reset ()
534+ coreg .set_rotation (rng .uniform (- 0.1 , 0.1 , size = 3 ))
535+ coreg .set_translation (rng .uniform (- 0.01 , 0.01 , size = 3 ))
536+ err_before = np .median (coreg .compute_dig_mri_distances ())
537+ coreg .fit_fiducials ()
538+ err_after_fid = np .median (coreg .compute_dig_mri_distances ())
539+ assert err_after_fid <= err_before + 1e-9
540+ coreg .fit_icp (5 )
541+ err_after_icp = np .median (coreg .compute_dig_mri_distances ())
542+ assert err_after_icp <= err_after_fid + 1e-9
543+ default_params = coreg ._default_parameters .copy ()
544+ coreg .reset ()
545+ assert_allclose (coreg ._parameters , default_params )
546+
547+
508548@pytest .mark .slowtest
509549@testing .requires_testing_data
510550def test_coreg_class_gui_match ():
0 commit comments