def test_loc(signal): s = signal.loc['chan1'] assert s.as_continuous().shape == (1, 200) assert s.chans == ['chan1'] assert np.allclose(s.as_continuous(), signal.as_continuous()[1]) s = signal.loc[['chan1', 'chan2']] assert s.as_continuous().shape == (2, 200) assert s.chans == ['chan1', 'chan2'] assert np.allclose(s.as_continuous(), signal.as_continuous()[[1, 2]]) s = signal.loc[:, 1.5:2] assert s.as_continuous().shape == (3, 25) assert s.chans == ['chan0', 'chan1', 'chan2'] assert np.allclose(s.as_continuous(), signal.as_continuous()[:, 75:100]) s = signal.loc['chan1', 1.5:2] assert s.as_continuous().shape == (1, 25) assert s.chans == ['chan1'] assert np.allclose(s.as_continuous(), signal.as_continuous()[1, 75:100]) s = signal.loc[:'chan1', 1.5:2] assert s.as_continuous().shape == (2, 25) assert s.chans == ['chan0', 'chan1'] assert np.allclose(s.as_continuous(), signal.as_continuous()[:2, 75:100]) s = signal.loc[:'chan1', 1.5] assert s.as_continuous().shape == (2, 1) assert s.chans == ['chan0', 'chan1'] assert np.allclose(s.as_continuous(), signal.as_continuous()[:2, 75][:, np.newaxis]) s = signal.loc[:'chan1', :1.5] assert s.as_continuous().shape == (2, 75) assert s.chans == ['chan0', 'chan1'] assert np.allclose(s.as_continuous(), signal.as_continuous()[:2, :75]) s = signal.loc[:'chan1', 2.5:] assert s.as_continuous().shape == (2, 75) assert s.chans == ['chan0', 'chan1'] assert np.allclose(s.as_continuous(), signal.as_continuous()[:2, 125:]) with pytest.raises(IndexError): signal.loc[:, :, :] with pytest.raises(IndexError): signal.loc[:'chan1', [1.5, 2]] s = signal.loc['chan1', 0.732:] s_epochs = s.extract_epoch('pupil_closed') assert s_epochs.shape == (1, 1, 40) signal_epochs = signal.loc['chan1'].extract_epoch('pupil_closed') assert np.allclose(s_epochs, signal_epochs[1, :, :40])
def test_merge_selections(signal): signals = [] for i in range(10): jk = signal.jackknife_by_time(10, i, invert=True) signals.append(jk) merged = merge_selections(signals) # merged and signal should be identical assert np.sum(np.isnan(merged.as_continuous())) == 0 assert np.array_equal(signal.as_continuous(), merged.as_continuous()) assert signal.epochs.equals(merged.epochs) # This should not throw an exception merge_selections([signal, signal, signal]) normalized = signal.normalized_by_mean() # This SHOULD throw an exception because they totally overlap with pytest.raises(ValueError): merge_selections([signal, normalized]) jk2 = normalized.jackknife_by_time(10, 2, invert=True) jk3 = signal.jackknife_by_time(10, 3, invert=True) jk4 = signal.jackknife_by_time(10, 4, invert=True) # This will NOT throw an exception because they don't overlap merged = merge_selections([jk2, jk3]) merged = merge_selections([jk2, jk4]) # This SHOULD throw an exception with pytest.raises(ValueError): merged = merge_selections([signal, jk2])
def test_iloc(signal): s = signal.iloc[:1, :10] assert s.as_continuous().shape == (1, 10) assert s.chans == ['chan0'] assert np.allclose(s.as_continuous(), signal.as_continuous()[:1, :10]) s = signal.iloc[:, :10] assert s.as_continuous().shape == (3, 10) assert s.chans == ['chan0', 'chan1', 'chan2'] assert np.allclose(s.as_continuous(), signal.as_continuous()[:, :10]) s = signal.iloc[1:, :100] assert s.as_continuous().shape == (2, 100) assert s.chans == ['chan1', 'chan2'] assert np.allclose(s.as_continuous(), signal.as_continuous()[1:, :100]) s = signal.iloc[1] assert s.as_continuous().shape == (1, 200) assert s.chans == ['chan1'] assert np.allclose(s.as_continuous(), signal.as_continuous()[1][np.newaxis]) # Test some special-case indexing s = signal.iloc[:, 1] assert s.as_continuous().shape == (3, 1) assert s.chans == ['chan0', 'chan1', 'chan2'] assert np.allclose(s.as_continuous(), signal.as_continuous()[:, 1][:, np.newaxis]) s = signal.iloc[1, :] assert s.as_continuous().shape == (1, 200) assert s.chans == ['chan1'] assert np.allclose(s.as_continuous(), signal.as_continuous()[1, :][np.newaxis]) s = signal.iloc[1, 1] assert s.as_continuous().shape == (1, 1) assert s.chans == ['chan1'] assert np.allclose(s.as_continuous(), signal.as_continuous()[1, 1]) s = signal.iloc[[0, 2], 1] assert s.as_continuous().shape == (2, 1) assert s.chans == ['chan0', 'chan2'] assert np.allclose(s.as_continuous(), signal.as_continuous()[[0, 2], 1][:, np.newaxis]) with pytest.raises(IndexError): assert signal.iloc[None, 1, 1] with pytest.raises(IndexError): assert signal.iloc[:, [1, 2]]
def test_extract_channels(signal): two_sig = signal.extract_channels(['chan0', 'chan1']) assert two_sig.shape == (2, 200) one_sig = signal.extract_channels(['chan2']) assert one_sig.shape == (1, 200) recombined = RasterizedSignal.concatenate_channels([two_sig, one_sig]) before = signal.as_continuous() after = recombined.as_continuous() assert np.array_equal(before, after)
def test_signal_save_load(signal, signal_tmpdir): ''' Test that signals save and load properly ''' # if not os.path.exists(signal_tmpdir): # os.mkdir(signal_tmpdir) signal.save(str(signal_tmpdir), fmt='%1.3e') signals_found = RasterizedSignal.list_signals(str(signal_tmpdir)) assert len(signals_found) == 1 save_directory = os.path.join(str(signal_tmpdir), signals_found[0]) signal_loaded = RasterizedSignal.load(save_directory) assert np.all(signal.as_continuous() == signal_loaded.as_continuous())
def test_as_continuous(signal): assert signal.as_continuous().shape == (3, 200)
def test_split_at_time(signal): l, r = signal.split_at_time(0.81) print(signal.as_continuous().shape) assert l.as_continuous().shape == (3, 162) assert r.as_continuous().shape == (3, 38)