def test_empty_epoch(): # no data received in the epoch before = 1 after = -1 data = helpers.DummyData(rate=.1) node = Epoch(event_trigger='test', before=before, after=after) node.clear() node.i.data = data.next(5) time = pd.Timestamp("2018-01-01 00:00:10.450714306") # Sync event to second sample event = pd.DataFrame([['test', 'foobar']], [time], columns=['label', 'data']) # Generate a trigger event node.i_events.data = event node.update() expected_meta = {'epoch': {'onset': pd.Timestamp('2018-01-01 00:00:10.450714306'), 'context': 'foobar', 'before': before, 'after': after} } assert node.o.meta == expected_meta assert node.o.data.empty
def test_to_xarray(): """ Test the epoch followed by a conversion to xarray. """ graph = { 'nodes': [ { 'id': 'epoch', 'module': 'timeflux.nodes.epoch', 'class': 'Epoch', 'params': { 'before': before, 'after': after, 'event_trigger': 'test' } }, { 'id': 'to_xarray', 'module': 'timeflux.nodes.epoch', 'class': 'ToXArray', 'params': { 'reporting': 'error' } } ], 'edges': [ { 'source': 'epoch:*', 'target': 'to_xarray' } ] } # test with data that has no jitter data = helpers.DummyData(jitter=0, rate=rate) converted_epoch = Branch(graph) converted_epoch.set_port('epoch', port_id='i', data=data.next(20)) event = pd.DataFrame( [ ['test', 'foo'], ['test', 'bar'], ], [ pd.Timestamp('2018-01-01 00:00:00.300000'), pd.Timestamp('2018-01-01 00:00:00.400000') ], columns=['label', 'data']) converted_epoch.set_port('epoch', port_id='i_events', data=event) converted_epoch.update() expected_meta = {'epochs_context': ['foo', 'bar'], 'rate': 10, 'epochs_onset': [pd.Timestamp('2018-01-01 00:00:00.300000'), pd.Timestamp('2018-01-01 00:00:00.400000')]} assert converted_epoch.get_port('to_xarray').meta == expected_meta expected_data = xr.DataArray(data=np.array([[[0.658783, 0.692277, 0.849196, 0.249668, 0.489425], [0.221209, 0.987668, 0.944059, 0.039427, 0.705575], [0.925248, 0.180575, 0.567945, 0.915488, 0.033946], [0.69742, 0.297349, 0.924396, 0.971058, 0.944266], [0.474214, 0.862043, 0.844549, 0.3191, 0.828915], [0.037008, 0.59627, 0.230009, 0.120567, 0.076953], [0.696289, 0.339875, 0.724767, 0.065356, 0.31529], [0.539491, 0.790723, 0.318753, 0.625891, 0.885978], [0.615863, 0.232959, 0.024401, 0.870099, 0.021269]], [[0.221209, 0.987668, 0.944059, 0.039427, 0.705575], [0.925248, 0.180575, 0.567945, 0.915488, 0.033946], [0.69742, 0.297349, 0.924396, 0.971058, 0.944266], [0.474214, 0.862043, 0.844549, 0.3191, 0.828915], [0.037008, 0.59627, 0.230009, 0.120567, 0.076953], [0.696289, 0.339875, 0.724767, 0.065356, 0.31529], [0.539491, 0.790723, 0.318753, 0.625891, 0.885978], [0.615863, 0.232959, 0.024401, 0.870099, 0.021269], [0.874702, 0.528937, 0.939068, 0.798783, 0.997934]]]), dims=('epoch', 'time', 'space'), coords=([0, 1], pd.TimedeltaIndex(np.arange(-before, after + 1 / rate, 1 / rate), unit='s'), [0, 1, 2, 3, 4])) xr.testing.assert_equal(converted_epoch.get_port('to_xarray').data, expected_data) # now test with jittered data, so that the some epoch have invalid number of samples data = helpers.DummyData(jitter=.2, rate=rate) converted_epoch = Branch(graph) converted_epoch.set_port('epoch', port_id='i', data=data.next(20)) event = pd.DataFrame( [ ['test', 'foo'], ['test', 'bar'], ], [ pd.Timestamp('2018-01-01 00:00:00.300000'), pd.Timestamp('2018-01-01 00:00:00.400000') ], columns=['label', 'data']) converted_epoch.set_port('epoch', port_id='i_events', data=event) with pytest.raises(WorkerInterrupt): converted_epoch.update()
"""Tests for epoch.py""" import numpy as np import pandas as pd import pytest import xarray as xr from timeflux.core.branch import Branch from timeflux.core.exceptions import WorkerInterrupt from timeflux.helpers import testing as helpers from timeflux.nodes.epoch import Epoch data = helpers.DummyData() rate = 10 before = .2 after = .6 node = Epoch(event_trigger='test', before=before, after=after) def test_no_epoch(): # Send enough data for an epoch, but no event node.i.data = data.next(20) node.update() assert node.o.data == None def test_send_event_short_data(): # Send an event trigger, but not enough data to capture the epoch in one round node.clear() node.i.data = data.next(5) time = node.i.data.index[1] # Sync event to second sample
def data(): return helpers.DummyData(jitter=0)