4646]
4747
4848
49- @pytest .mark .parametrize ('grad_start,grad_end,area' , test_zoo )
49+ @pytest .mark .parametrize ('grad_start, grad_end, area' , test_zoo )
5050def test_make_extended_trapezoid_area (grad_start , grad_end , area ):
5151 g , _ , _ = make_extended_trapezoid_area (
5252 channel = 'x' , grad_start = grad_start , grad_end = grad_end , area = area , system = system
@@ -71,7 +71,7 @@ def test_make_extended_trapezoid_area(grad_start, grad_end, area):
7171]
7272
7373
74- @pytest .mark .parametrize ('grad_start,grad_end,area' , test_zoo_random )
74+ @pytest .mark .parametrize ('grad_start, grad_end, area' , test_zoo_random )
7575def test_make_extended_trapezoid_area_random_cases (grad_start , grad_end , area ):
7676 g , _ , _ = make_extended_trapezoid_area (
7777 channel = 'x' , grad_start = grad_start , grad_end = grad_end , area = area , system = system
@@ -85,6 +85,34 @@ def test_make_extended_trapezoid_area_random_cases(grad_start, grad_end, area):
8585 assert slew_ok , 'Maximum slew rate violated'
8686
8787
88+ @pytest .mark .parametrize ('grad_start, grad_end, area' , test_zoo_random )
89+ def test_make_extended_trapezoid_area_convert_to_arb (grad_start , grad_end , area ):
90+ g , _ , _ = make_extended_trapezoid_area (
91+ channel = 'x' , grad_start = grad_start , grad_end = grad_end , area = area , system = system
92+ )
93+
94+ g_arb , _ , _ = make_extended_trapezoid_area (
95+ channel = 'x' , grad_start = grad_start , grad_end = grad_end , area = area , convert_to_arbitrary = True , system = system
96+ )
97+
98+ grad_ok = all (abs (g .waveform ) <= system .max_grad )
99+ slew_ok = all (abs (np .diff (g .waveform ) / np .diff (g .tt )) <= system .max_slew )
100+
101+ grad_arb_ok = all (abs (g_arb .waveform ) <= system .max_grad )
102+ slew_arb_ok = all (abs (np .diff (g_arb .waveform ) / np .diff (g_arb .tt )) <= system .max_slew )
103+
104+ assert pytest .approx (g .area ) == g_arb .area , 'Area of extended trapz and arb gradient do not match'
105+ assert pytest .approx (g .shape_dur ) == g_arb .shape_dur , 'Duration of extended trapz and arb gradient do not match'
106+ assert g .tt .shape [0 ] <= g_arb .tt .shape [0 ], (
107+ 'Extended trapezoid should have less or equal number of points than arb gradient'
108+ )
109+ assert g .waveform .shape [0 ] <= g_arb .waveform .shape [0 ], (
110+ 'Extended trapezoid should have less or equal number of points than arb gradient'
111+ )
112+ assert grad_ok == grad_arb_ok , 'Gradient strength violation between extended trapz and arb gradient'
113+ assert slew_ok == slew_arb_ok , 'Slew rate violation between extended trapz and arb gradient'
114+
115+
88116random .seed (0 )
89117test_zoo_random = [
90118 (
@@ -96,7 +124,7 @@ def test_make_extended_trapezoid_area_random_cases(grad_start, grad_end, area):
96124]
97125
98126
99- @pytest .mark .parametrize ('grad_start,grad_end,grad_amp' , test_zoo_random )
127+ @pytest .mark .parametrize ('grad_start, grad_end, grad_amp' , test_zoo_random )
100128def test_make_extended_trapezoid_area_recreate (grad_start , grad_end , grad_amp ):
101129 def _to_raster (time : float ) -> float :
102130 return np .ceil (time / system .grad_raster_time ) * system .grad_raster_time
0 commit comments