Пример #1
0
def test_merge():
    ts_a = TimeSeries()
    ts_b = TimeSeries()
    # ts_a[0] = None
    ts_b[0] = True
    ts_merge = TimeSeries.merge([ts_a, ts_b])

    assert True in ts_merge[0]
    assert None in ts_merge[0]

    ts_c = TimeSeries.merge([])
    assert list(ts_c.items()) == []
Пример #2
0
def test_single_merges():

    # a single empty time series
    ts = TimeSeries()
    assert TimeSeries.merge([ts]) == TimeSeries(default=[None])

    # multiple empty time series
    ts_a = TimeSeries()
    ts_b = TimeSeries()
    assert TimeSeries.merge([ts_a, ts_b]) == \
        TimeSeries(default=[None, None])

    # test a single time series with only one measurement
    ts = TimeSeries()
    ts[21] = 42

    merged = TimeSeries.merge([ts])

    assert list(merged.items()) == [(21, [42])]

    # test an empty time series and a time series with one measurement
    ts_a = TimeSeries()
    ts_a[21] = 42
    ts_b = TimeSeries()

    ts = TimeSeries.merge([ts_a, ts_b])
    assert ts[20] == [None, None]
    assert ts[23] == [42, None]

    # test an empty time series and a time series with one entry
    ts_a = TimeSeries()
    ts_a[21] = 42
    ts_a[22] = 41
    ts_a[23] = 40

    ts_b = TimeSeries()
    ts_b[20] = 1
    ts_b[22] = 2
    ts_b[24] = 3

    merged = TimeSeries.merge([ts_a, ts_b])

    assert list(merged.items()) == [
        (20, [None, 1]),
        (21, [42, 1]),
        (22, [41, 2]),
        (23, [40, 2]),
        (24, [40, 3]),
    ]
Пример #3
0
def test_single_merges():

    # a single empty time series
    ts = TimeSeries()
    nose.tools.assert_raises(ValueError, TimeSeries.merge, [ts])

    # multiple empty time series
    ts_a = TimeSeries()
    ts_b = TimeSeries()
    nose.tools.assert_raises(ValueError, TimeSeries.merge, [ts_a, ts_b])

    # test a single time series with only one measurement
    ts = TimeSeries()
    ts[21] = 42

    merged = TimeSeries.merge([ts])

    assert merged.items() == [(21, [42])]

    # test an empty time series and a time series with one measurement
    ts_a = TimeSeries()
    ts_a[21] = 42
    ts_b = TimeSeries()

    nose.tools.assert_raises(ValueError, TimeSeries.merge, [ts_a, ts_b])

    # test an empty time series and a time series with one entry
    ts_a = TimeSeries()
    ts_a[21] = 42
    ts_a[22] = 41
    ts_a[23] = 40

    ts_b = TimeSeries()
    ts_b[20] = 1
    ts_b[22] = 2
    ts_b[24] = 3

    merged = TimeSeries.merge([ts_a, ts_b])
    
    assert merged.items() == [
        (20, [42, 1]),
        (22, [41, 2]),
        (23, [40, 2]),
        (24, [40, 3]),
    ]
Пример #4
0
def test_merge():
    ts_a = TimeSeries(default=None)
    ts_b = TimeSeries(default=None)
    ts_a[0] = None
    ts_b[0] = True
    ts_merge = TimeSeries.merge([ts_a, ts_b])

    assert True in ts_merge[0]
    assert None in ts_merge[0]
Пример #5
0
 def group_total_beh(self):
     """
     Returns: float of group total behavior index as a fraction of interval
     """
     if len(self.ts_list) > 1:
         ts = TimeSeries()
         ts = ts.merge(self.ts_list)
         return self.beh_index(ts)
     else:
         return self.individual_total_beh()
Пример #6
0
def test_merge():

    # since this is random, do it a bunch of times
    for n_trial in range(1000):

        # make a list of TimeSeries that is anywhere from 0 to 5
        # long. Each TimeSeries is of random length between 0 and 20,
        # with random time points and random values.
        ts_list = []
        for i in range(random.randint(1, 5)):
            ts_list.append(make_random_timeseries())

        method_a = list(TimeSeries.merge(ts_list, compact=False))
        method_b = list(TimeSeries.iter_merge(ts_list))

        msg = '%s != %s' % (pprint.pformat(method_a), pprint.pformat(method_b))
        assert method_a == method_b, msg
Пример #7
0
def example_sum():

    a = TimeSeries()
    a.set(datetime.datetime(2015, 3, 1), 1)
    a.set(datetime.datetime(2015, 3, 2), 0)
    a.set(datetime.datetime(2015, 3, 3), 1)
    a.set(datetime.datetime(2015, 3, 5), 0)
    a.set(datetime.datetime(2015, 3, 6), 0)

    b = TimeSeries()
    b.set(datetime.datetime(2015, 3, 1), 0)
    b.set(datetime.datetime(2015, 3, 2, 12), 1)
    b.set(datetime.datetime(2015, 3, 3, 13, 13), 0)
    b.set(datetime.datetime(2015, 3, 4), 1)
    b.set(datetime.datetime(2015, 3, 5), 0)
    b.set(datetime.datetime(2015, 3, 5, 12), 1)
    b.set(datetime.datetime(2015, 3, 5, 19), 0)

    c = TimeSeries()
    c.set(datetime.datetime(2015, 3, 1, 17), 0)
    c.set(datetime.datetime(2015, 3, 1, 21), 1)
    c.set(datetime.datetime(2015, 3, 2, 13, 13), 0)
    c.set(datetime.datetime(2015, 3, 4, 18), 1)
    c.set(datetime.datetime(2015, 3, 5, 4), 0)

    # output the three time series
    for i, ts in enumerate([a, b, c]):

        for (t0, v0), (t1, v1) in ts.iterintervals(1):
            print(t0.isoformat(), i)
            print(t1.isoformat(), i)

        print('')

        for (t0, v0), (t1, v1) in ts.iterintervals(0):
            print(t0.isoformat(), i)
            print(t1.isoformat(), i)

        print('')

    # output the sum
    # for dt, i in sum([a, b, c]):
    #     print dt.isoformat(), i
    # print ''
    for dt, i in TimeSeries.merge([a, b, c], operation=sum):
        print(dt.isoformat(), i)
def collect_states(
    trace: Trace, conditions: Iterable[SafetyCondition]
) -> Iterator[tuple[float, set[tuple[str, Any]]]]:
    atoms = set(domain.keys()) | set(
        Monitor(frozenset(c.condition for c in conditions)).atoms()
    )
    event_keys: list[_Atom] = sorted(atoms, key=lambda d: d.id)
    events: TimeSeries = TimeSeries.merge([trace.values[e] for e in event_keys])
    events.compact()
    t: float
    for t, v in events.items():
        s = set()
        for e, i in zip(event_keys, v):
            if e in domain:
                d = domain[e]
                s.add((e.id, d.value(i)))
            else:
                s.add((e.id, i))
        yield t, s
Пример #9
0
def test_sum():

    a = TimeSeries()
    a.set(datetime.datetime(2015, 3, 1), 1)
    a.set(datetime.datetime(2015, 3, 2), 0)
    a.set(datetime.datetime(2015, 3, 3), 1)
    a.set(datetime.datetime(2015, 3, 4), 0)

    b = TimeSeries()
    b.set(datetime.datetime(2015, 3, 1), 0)
    b.set(datetime.datetime(2015, 3, 1, 12), 1)
    b.set(datetime.datetime(2015, 3, 2), 0)
    b.set(datetime.datetime(2015, 3, 2, 12), 1)
    b.set(datetime.datetime(2015, 3, 3), 0)

    c = TimeSeries()
    c.set(datetime.datetime(2015, 3, 1), 0)
    c.set(datetime.datetime(2015, 3, 1, 18), 1)
    c.set(datetime.datetime(2015, 3, 5), 0)

    ts_sum = TimeSeries.merge([a, b, c], operation=ignorant(sum))

    # test before domain, should give default value
    assert ts_sum[datetime.datetime(2015, 2, 24)] == 0

    # test values throughout sum
    assert ts_sum[datetime.datetime(2015, 3, 1)] == 1
    assert ts_sum[datetime.datetime(2015, 3, 1, 6)] == 1
    assert ts_sum[datetime.datetime(2015, 3, 1, 12)] == 2
    assert ts_sum[datetime.datetime(2015, 3, 1, 13)] == 2
    assert ts_sum[datetime.datetime(2015, 3, 1, 17)] == 2
    assert ts_sum[datetime.datetime(2015, 3, 1, 18)] == 3
    assert ts_sum[datetime.datetime(2015, 3, 1, 19)] == 3
    assert ts_sum[datetime.datetime(2015, 3, 3)] == 2
    assert ts_sum[datetime.datetime(2015, 3, 4)] == 1
    assert ts_sum[datetime.datetime(2015, 3, 4, 18)] == 1
    assert ts_sum[datetime.datetime(2015, 3, 5)] == 0

    # test after domain, should give last value
    assert ts_sum[datetime.datetime(2015, 3, 6)] == 0

    assert 0 + a + b == a + b
Пример #10
0
 def register(self, trace: Trace):
     """Record the consecutive states encountered in the trace"""
     # FIXME Key sorting relies on id field being present, not the case for non Atom keys
     event_keys = sorted(
         self.domain,
         key=lambda d: getattr(d, "id", (str(d), )),
     )
     events = TimeSeries.merge(
         [trace.values[getattr(e, "id", e)] for e in event_keys])
     events.compact()
     for _, v in events.items():
         entry = set()
         for (e, d), i in zip(
                 sorted(
                     self.domain.items(),
                     key=lambda d: getattr(d[0], "id", (str(d[0]), )),
                 ),
                 v,
         ):
             entry.add((e, d.value(i)))
         self.combinations.add(frozenset(entry))
def collect_predicates(trace: Trace):
    # -> Iterator[tuple[float, set[tuple[str, bool]]]]:
    predicate_keys = sorted(predicates, key=lambda d: str(d))
    predicate_values = list()
    for predicate in predicate_keys:
        v = Monitor().evaluate(
            trace,
            predicate,
            dt=0.01,
            quantitative=True,
            logic=mtfl.connective.zadeh,
            time=None,
        )
        v = [(t, c >= mtfl.connective.zadeh.const_true) for t, c in v]
        ts: TimeSeries = TimeSeries(v)
        ts.compact()
        predicate_values.append(ts)
    #
    events: TimeSeries = TimeSeries.merge(predicate_values)
    for t, v in events.items():
        s = set()
        for e, i in zip(predicate_keys, v):
            s.add((e, i))
        yield t, s
Пример #12
0
 def update(self, other: Trace) -> Trace:
     """Update the values of the current trace with the other"""
     for t, s in other.values.items():
         c = self.values.get(t, TimeSeries())
         self.values[t] = TimeSeries.merge([c, s], operation=self._merge_values)
     return self