@@ -85,3 +85,30 @@ def test_morphsqueeze(x_morph, x_target, squeeze_coeffs):
8585 assert np .allclose (x_morph_actual , x_morph_expected )
8686 assert np .allclose (x_target_actual , x_target )
8787 assert np .allclose (y_target_actual , y_target )
88+
89+
90+ def test_morphsqueeze_extrapolate ():
91+ x_morph = np .linspace (0 , 10 , 101 )
92+ y_morph = np .sin (x_morph )
93+ x_target = x_morph
94+ y_target = y_morph
95+ squeeze_coeff = {"a0" : 0.01 , "a1" : - 0.0005 , "a2" : - 0.0005 , "a3" : - 1e-6 }
96+ morph = MorphSqueeze ()
97+ morph .squeeze = squeeze_coeff
98+ coeffs = [squeeze_coeff [f"a{ i } " ] for i in range (len (squeeze_coeff ))]
99+ squeeze_polynomial = Polynomial (coeffs )
100+ x_squeezed = x_morph + squeeze_polynomial (x_morph )
101+ with pytest .warns () as w :
102+ x_morph_actual , y_morph_actual , x_target_actual , y_target_actual = (
103+ morph (x_morph , y_morph , x_target , y_target )
104+ )
105+ assert len (w ) == 1
106+ assert w [0 ].category is UserWarning
107+ actual_wmsg = str (w [0 ].message )
108+ expected_wmsg = (
109+ "\n Extrapolating the morphed function via CubicSpline:\n "
110+ f"Obtaining grid points between { x_morph [0 ]} and { x_morph [- 1 ]} .\n "
111+ f"Points below { x_squeezed [0 ]} and "
112+ f"above { x_squeezed [- 1 ]} will be extrapolated."
113+ )
114+ assert actual_wmsg == expected_wmsg
0 commit comments