Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 6a46f04

Browse files
authored
Merge pull request #7985 from vollbier/fix_specgram_Userwarning
Catch specgram warnings during tests
2 parents 91261e7 + 850bb2e commit 6a46f04

File tree

1 file changed

+72
-37
lines changed

1 file changed

+72
-37
lines changed

lib/matplotlib/tests/test_mlab.py

Lines changed: 72 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import six
55

66
import tempfile
7+
import warnings
78

89
from numpy.testing import (assert_allclose, assert_almost_equal,
910
assert_array_equal)
@@ -359,46 +360,46 @@ def test_csv2rec_names_with_comments(self):
359360
assert len(array.dtype) == 3
360361

361362
def test_csv2rec_usdate(self):
362-
self.fd.write('01/11/14\n' +
363-
'03/05/76 12:00:01 AM\n' +
364-
'07/09/83 5:17:34 PM\n' +
365-
'06/20/2054 2:31:45 PM\n' +
366-
'10/31/00 11:50:23 AM\n')
363+
self.fd.write('01/11/14\n'
364+
'03/05/76 12:00:01 AM\n'
365+
'07/09/83 5:17:34 PM\n'
366+
'06/20/2054 2:31:45 PM\n'
367+
'10/31/00 11:50:23 AM\n')
367368
expected = [datetime.datetime(2014, 1, 11, 0, 0),
368-
datetime.datetime(1976, 3, 5, 0, 0, 1),
369-
datetime.datetime(1983, 7, 9, 17, 17, 34),
370-
datetime.datetime(2054, 6, 20, 14, 31, 45),
371-
datetime.datetime(2000, 10, 31, 11, 50, 23)]
369+
datetime.datetime(1976, 3, 5, 0, 0, 1),
370+
datetime.datetime(1983, 7, 9, 17, 17, 34),
371+
datetime.datetime(2054, 6, 20, 14, 31, 45),
372+
datetime.datetime(2000, 10, 31, 11, 50, 23)]
372373
self.fd.seek(0)
373374
array = mlab.csv2rec(self.fd, names='a')
374375
assert_array_equal(array['a'].tolist(), expected)
375376

376377
def test_csv2rec_dayfirst(self):
377378
self.fd.write('11/01/14\n' +
378-
'05/03/76 12:00:01 AM\n' +
379-
'09/07/83 5:17:34 PM\n' +
380-
'20/06/2054 2:31:45 PM\n' +
381-
'31/10/00 11:50:23 AM\n')
379+
'05/03/76 12:00:01 AM\n'
380+
'09/07/83 5:17:34 PM\n'
381+
'20/06/2054 2:31:45 PM\n'
382+
'31/10/00 11:50:23 AM\n')
382383
expected = [datetime.datetime(2014, 1, 11, 0, 0),
383-
datetime.datetime(1976, 3, 5, 0, 0, 1),
384-
datetime.datetime(1983, 7, 9, 17, 17, 34),
385-
datetime.datetime(2054, 6, 20, 14, 31, 45),
386-
datetime.datetime(2000, 10, 31, 11, 50, 23)]
384+
datetime.datetime(1976, 3, 5, 0, 0, 1),
385+
datetime.datetime(1983, 7, 9, 17, 17, 34),
386+
datetime.datetime(2054, 6, 20, 14, 31, 45),
387+
datetime.datetime(2000, 10, 31, 11, 50, 23)]
387388
self.fd.seek(0)
388389
array = mlab.csv2rec(self.fd, names='a', dayfirst=True)
389390
assert_array_equal(array['a'].tolist(), expected)
390391

391392
def test_csv2rec_yearfirst(self):
392-
self.fd.write('14/01/11\n' +
393-
'76/03/05 12:00:01 AM\n' +
394-
'83/07/09 5:17:34 PM\n' +
395-
'2054/06/20 2:31:45 PM\n' +
396-
'00/10/31 11:50:23 AM\n')
393+
self.fd.write('14/01/11\n'
394+
'76/03/05 12:00:01 AM\n'
395+
'83/07/09 5:17:34 PM\n'
396+
'2054/06/20 2:31:45 PM\n'
397+
'00/10/31 11:50:23 AM\n')
397398
expected = [datetime.datetime(2014, 1, 11, 0, 0),
398-
datetime.datetime(1976, 3, 5, 0, 0, 1),
399-
datetime.datetime(1983, 7, 9, 17, 17, 34),
400-
datetime.datetime(2054, 6, 20, 14, 31, 45),
401-
datetime.datetime(2000, 10, 31, 11, 50, 23)]
399+
datetime.datetime(1976, 3, 5, 0, 0, 1),
400+
datetime.datetime(1983, 7, 9, 17, 17, 34),
401+
datetime.datetime(2054, 6, 20, 14, 31, 45),
402+
datetime.datetime(2000, 10, 31, 11, 50, 23)]
402403
self.fd.seek(0)
403404
array = mlab.csv2rec(self.fd, names='a', yearfirst=True)
404405
assert_array_equal(array['a'].tolist(), expected)
@@ -1629,6 +1630,18 @@ def test_csd(self):
16291630
assert_allclose(fsp, freqs, atol=1e-06)
16301631
assert spec.shape == freqs.shape
16311632

1633+
def test_csd_padding(self):
1634+
"""Test zero padding of csd(). """
1635+
if self.NFFT_density is None: # for derived classes
1636+
return
1637+
sargs = dict(x=self.y, y=self.y+1, Fs=self.Fs, window=mlab.window_none,
1638+
sides=self.sides)
1639+
1640+
spec0, _ = mlab.csd(NFFT=self.NFFT_density, **sargs)
1641+
spec1, _ = mlab.csd(NFFT=self.NFFT_density*2, **sargs)
1642+
assert_almost_equal(np.sum(np.conjugate(spec0)*spec0).real,
1643+
np.sum(np.conjugate(spec1/2)*spec1/2).real)
1644+
16321645
def test_psd(self):
16331646
freqs = self.freqs_density
16341647
spec, fsp = mlab.psd(x=self.y,
@@ -2103,6 +2116,15 @@ def test_specgram_phase(self):
21032116
assert spec.shape[0] == freqs.shape[0]
21042117
assert spec.shape[1] == self.t_specgram.shape[0]
21052118

2119+
def test_specgram_warn_only1seg(self):
2120+
"""Warning should be raised if len(x) <= NFFT. """
2121+
with warnings.catch_warnings(record=True) as w:
2122+
warnings.simplefilter("always", category=UserWarning)
2123+
mlab.specgram(x=self.y, NFFT=len(self.y), Fs=self.Fs)
2124+
assert len(w) == 1
2125+
assert issubclass(w[0].category, UserWarning)
2126+
assert str(w[0].message).startswith("Only one segment is calculated")
2127+
21062128
def test_psd_csd_equal(self):
21072129
freqs = self.freqs_density
21082130
Pxx, freqsxx = mlab.psd(x=self.y,
@@ -2543,7 +2565,7 @@ class Test_spectral_nosig_real_onesided_trim(
25432565
Test_spectral_nosig_real_onesided):
25442566
def setUp(self):
25452567
self.createStim(fstims=[],
2546-
len_x=256,
2568+
len_x=1024,
25472569
NFFT_density=512, pad_to_spectrum=128,
25482570
iscomplex=False, sides='onesided', nsides=1)
25492571

@@ -2552,7 +2574,7 @@ class Test_spectral_nosig_real_twosided_trim(
25522574
Test_spectral_nosig_real_onesided):
25532575
def setUp(self):
25542576
self.createStim(fstims=[],
2555-
len_x=256,
2577+
len_x=1024,
25562578
NFFT_density=512, pad_to_spectrum=128,
25572579
iscomplex=False, sides='twosided', nsides=2)
25582580

@@ -2561,7 +2583,7 @@ class Test_spectral_nosig_real_defaultsided_trim(
25612583
Test_spectral_nosig_real_onesided):
25622584
def setUp(self):
25632585
self.createStim(fstims=[],
2564-
len_x=256,
2586+
len_x=1024,
25652587
NFFT_density=512, pad_to_spectrum=128,
25662588
iscomplex=False, sides='default', nsides=1)
25672589

@@ -2570,7 +2592,7 @@ class Test_spectral_nosig_complex_onesided_trim(
25702592
Test_spectral_nosig_real_onesided):
25712593
def setUp(self):
25722594
self.createStim(fstims=[],
2573-
len_x=256,
2595+
len_x=1024,
25742596
NFFT_density=512, pad_to_spectrum=128,
25752597
iscomplex=True, sides='onesided', nsides=1)
25762598

@@ -2579,7 +2601,7 @@ class Test_spectral_nosig_complex_twosided_trim(
25792601
Test_spectral_nosig_real_onesided):
25802602
def setUp(self):
25812603
self.createStim(fstims=[],
2582-
len_x=256,
2604+
len_x=1024,
25832605
NFFT_density=512, pad_to_spectrum=128,
25842606
iscomplex=True, sides='twosided', nsides=2)
25852607

@@ -2705,7 +2727,7 @@ class Test_spectral_nosig_real_onesided_stretch(
27052727
Test_spectral_nosig_real_onesided):
27062728
def setUp(self):
27072729
self.createStim(fstims=[],
2708-
len_x=128,
2730+
len_x=256,
27092731
NFFT_density=128,
27102732
pad_to_density=256, pad_to_spectrum=256,
27112733
iscomplex=False, sides='onesided', nsides=1)
@@ -2715,7 +2737,7 @@ class Test_spectral_nosig_real_twosided_stretch(
27152737
Test_spectral_nosig_real_onesided):
27162738
def setUp(self):
27172739
self.createStim(fstims=[],
2718-
len_x=128,
2740+
len_x=256,
27192741
NFFT_density=128,
27202742
pad_to_density=256, pad_to_spectrum=256,
27212743
iscomplex=False, sides='twosided', nsides=2)
@@ -2725,7 +2747,7 @@ class Test_spectral_nosig_real_defaultsided_stretch(
27252747
Test_spectral_nosig_real_onesided):
27262748
def setUp(self):
27272749
self.createStim(fstims=[],
2728-
len_x=128,
2750+
len_x=256,
27292751
NFFT_density=128,
27302752
pad_to_density=256, pad_to_spectrum=256,
27312753
iscomplex=False, sides='default', nsides=1)
@@ -2735,7 +2757,7 @@ class Test_spectral_nosig_complex_onesided_stretch(
27352757
Test_spectral_nosig_real_onesided):
27362758
def setUp(self):
27372759
self.createStim(fstims=[],
2738-
len_x=128,
2760+
len_x=256,
27392761
NFFT_density=128,
27402762
pad_to_density=256, pad_to_spectrum=256,
27412763
iscomplex=True, sides='onesided', nsides=1)
@@ -2745,7 +2767,7 @@ class Test_spectral_nosig_complex_twosided_stretch(
27452767
Test_spectral_nosig_real_onesided):
27462768
def setUp(self):
27472769
self.createStim(fstims=[],
2748-
len_x=128,
2770+
len_x=256,
27492771
NFFT_density=128,
27502772
pad_to_density=256, pad_to_spectrum=256,
27512773
iscomplex=True, sides='twosided', nsides=2)
@@ -2755,7 +2777,7 @@ class Test_spectral_nosig_complex_defaultsided_stretch(
27552777
Test_spectral_nosig_real_onesided):
27562778
def setUp(self):
27572779
self.createStim(fstims=[],
2758-
len_x=128,
2780+
len_x=256,
27592781
NFFT_density=128,
27602782
pad_to_density=256, pad_to_spectrum=256,
27612783
iscomplex=True, sides='default', nsides=2)
@@ -3102,3 +3124,16 @@ def test_psd_onesided_norm():
31023124
sides='onesided')
31033125
Su_1side = np.append([Su[0]], Su[1:4] + Su[4:][::-1])
31043126
assert_allclose(P, Su_1side, atol=1e-06)
3127+
3128+
3129+
def test_psd_oversampling():
3130+
"""Test the case len(x) < NFFT for psd(). """
3131+
u = np.array([0, 1, 2, 3, 1, 2, 1])
3132+
dt = 1.0
3133+
Su = np.abs(np.fft.fft(u) * dt)**2 / float(dt * u.size)
3134+
P, f = mlab.psd(u, NFFT=u.size*2, Fs=1/dt, window=mlab.window_none,
3135+
detrend=mlab.detrend_none, noverlap=0, pad_to=None,
3136+
scale_by_freq=None,
3137+
sides='onesided')
3138+
Su_1side = np.append([Su[0]], Su[1:4] + Su[4:][::-1])
3139+
assert_almost_equal(np.sum(P), np.sum(Su_1side)) # same energy

0 commit comments

Comments
 (0)