Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit 6a46f04

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

File tree

Expand file treeCollapse file tree

1 file changed

+72
-37
lines changed
Filter options
Expand file treeCollapse file tree

1 file changed

+72
-37
lines changed

‎lib/matplotlib/tests/test_mlab.py

Copy file name to clipboardExpand all lines: lib/matplotlib/tests/test_mlab.py
+72-37Lines 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 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.