def test_trigger_generation(self): """TestTrigger: generate""" filters = {"result": "fire"} event_class = self._trace.aim_and_fire value = 1 pivot = "identifier" trigger = Trigger(self._trace, event_class, filters, value, pivot) expected = pd.Series([1, 1], index=pd.Index([0.1, 0.3], name="Time")) assert_series_equal(expected, trigger.generate(0)) expected = pd.Series([1], index=pd.Index([0.5], name="Time")) assert_series_equal(expected, trigger.generate(1))
def test_trigger_with_func(self): """Trigger works with a function or lambda as filter""" def my_filter(val): return val.startswith("fi") trigger = Trigger(self._trace, self._trace.aim_and_fire, filters={"result": my_filter}, value=1, pivot="identifier") expected = pd.Series([1], index=pd.Index([0.5], name="Time")) assert_series_equal(expected, trigger.generate(1)) my_filters = {"result": lambda x: x.startswith("bl")} trigger = Trigger(self._trace, self._trace.aim_and_fire, filters=my_filters, value=1, pivot="identifier") expected = pd.Series([1, 1], index=pd.Index([0.4, 0.6], name="Time")) assert_series_equal(expected, trigger.generate(1))
def test_trigger_generation(self): """TestTrigger: generate""" filters = { "result": "fire" } event_class = self._trace.aim_and_fire value = 1 pivot = "identifier" trigger = Trigger(self._trace, event_class, filters, value, pivot) expected = pd.Series([1, 1], index=pd.Index([0.1, 0.3], name="Time")) assert_series_equal(expected, trigger.generate(0)) expected = pd.Series([1], index=pd.Index([0.5], name="Time")) assert_series_equal(expected, trigger.generate(1))
def test_trigger_with_callable_class(self): """Trigger works with a callable class as filter""" class my_filter(object): def __init__(self, val_out): self.prev_val = 0 self.val_out = val_out def __call__(self, val): ret = self.prev_val == self.val_out self.prev_val = val return ret trigger = Trigger(self._trace, self._trace.aim_and_fire, filters={"identifier": my_filter(1)}, value=1, pivot="result") expected = pd.Series([1], index=pd.Index([0.6], name="Time")) assert_series_equal(expected, trigger.generate("blank"))
def test_filter_prev_values(self): """Trigger works with a filter that depends on previous values of the same pivot""" # We generate an example in which we want a trigger whenever the # identifier is no longer 1 for blank class my_filter(object): def __init__(self, val_out): self.prev_val = 0 self.val_out = val_out def __call__(self, val): ret = self.prev_val == self.val_out self.prev_val = val return ret trace = trappy.BareTrace() data = collections.OrderedDict([ (0.1, ["blank", 1]), (0.2, ["fire", 1]), (0.3, ["blank", 0]), # value is no longer 1, trigger (0.4, ["blank", 1]), (0.5, ["fire", 0]), # This should NOT trigger (0.6, ["blank", 0]), # value is no longer 1 for blank, trigger ]) data_frame = pd.DataFrame.from_dict( data, orient="index", ) data_frame.columns = ["result", "identifier"] trace.add_parsed_event("aim_and_fire", data_frame) trigger = Trigger(trace, trace.aim_and_fire, filters={"identifier": my_filter(1)}, value=-1, pivot="result") expected = pd.Series([-1, -1], index=[0.3, 0.6]) assert_series_equal(expected, trigger.generate("blank"))
def test_filter_prev_values(self): """Trigger works with a filter that depends on previous values of the same pivot""" # We generate an example in which we want a trigger whenever the # identifier is no longer 1 for blank class my_filter(object): def __init__(self, val_out): self.prev_val = 0 self.val_out = val_out def __call__(self, val): ret = self.prev_val == self.val_out self.prev_val = val return ret trace = trappy.BareTrace() data = collections.OrderedDict([ (0.1, ["blank", 1]), (0.2, ["fire", 1]), (0.3, ["blank", 0]), # value is no longer 1, trigger (0.4, ["blank", 1]), (0.5, ["fire", 0]), # This should NOT trigger (0.6, ["blank", 0]), # value is no longer 1 for blank, trigger ]) data_frame = pd.DataFrame.from_dict(data, orient="index", ) data_frame.columns = ["result", "identifier"] trace.add_parsed_event("aim_and_fire", data_frame) trigger = Trigger(trace, trace.aim_and_fire, filters={"identifier": my_filter(1)}, value=-1, pivot="result") expected = pd.Series([-1, -1], index=[0.3, 0.6]) assert_series_equal(expected, trigger.generate("blank"))