@@ -279,6 +279,37 @@ def test_pad_1d():
279279 pywt .pad (x , (4 , 4 ), 'periodic' ))
280280
281281
282+ def test_pad_zero_width ():
283+ # zero pad width is a no-op for all modes except 'periodization', which
284+ # also promotes odd-length axes to even length (gh-589)
285+ for ndim in [1 , 2 , 3 ]:
286+ x = np .arange (3.0 ** ndim ).reshape ((3 , ) * ndim )
287+ for mode in pywt .Modes .modes :
288+ if mode == 'periodization' :
289+ continue
290+ assert_array_equal (pywt .pad (x , 0 , mode ), x ,
291+ err_msg = f"mode={ mode } , ndim={ ndim } " )
292+
293+
294+ def test_pad_one_sided ():
295+ # a zero pad width on only one side of the axis (gh-589)
296+ x = [1 , 2 , 3 ]
297+ assert_array_equal (pywt .pad (x , (2 , 0 ), 'smooth' ), [- 1 , 0 , 1 , 2 , 3 ])
298+ assert_array_equal (pywt .pad (x , (0 , 2 ), 'smooth' ), [1 , 2 , 3 , 4 , 5 ])
299+ assert_array_equal (pywt .pad (x , (2 , 0 ), 'antisymmetric' ), [- 2 , - 1 , 1 , 2 , 3 ])
300+ assert_array_equal (pywt .pad (x , (0 , 2 ), 'antisymmetric' ), [1 , 2 , 3 , - 3 , - 2 ])
301+
302+ # one-sided padding matches the corresponding slice of two-sided padding
303+ for mode in pywt .Modes .modes :
304+ if mode == 'periodization' :
305+ continue
306+ two_sided = pywt .pad (x , (4 , 6 ), mode )
307+ assert_array_equal (pywt .pad (x , (4 , 0 ), mode ), two_sided [:- 6 ],
308+ err_msg = f"mode={ mode } " )
309+ assert_array_equal (pywt .pad (x , (0 , 6 ), mode ), two_sided [4 :],
310+ err_msg = f"mode={ mode } " )
311+
312+
282313def test_pad_errors ():
283314 # negative pad width
284315 x = [1 , 2 , 3 ]
0 commit comments