From 7dc1572b5e0a1a73f98210bc61e30bf56715e514 Mon Sep 17 00:00:00 2001 From: jimkapin Date: Tue, 3 Sep 2019 10:07:40 -0700 Subject: [PATCH] Addressed mishandling of starting time values, Issue #107 --- mtl/ast.py | 2 +- mtl/evaluator.py | 9 ++++++++- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/mtl/ast.py b/mtl/ast.py index 93c13d9..f3929ab 100644 --- a/mtl/ast.py +++ b/mtl/ast.py @@ -42,7 +42,7 @@ def _neg(exp): return Neg(exp) -def _eval(exp, trace, time=0, *, dt=0.1, quantitative=True): +def _eval(exp, trace, time=False, *, dt=0.1, quantitative=True): from mtl import evaluator return evaluator.pointwise_sat(exp, dt)(trace, time, quantitative) diff --git a/mtl/evaluator.py b/mtl/evaluator.py index 237dd1a..d37e507 100644 --- a/mtl/evaluator.py +++ b/mtl/evaluator.py @@ -25,7 +25,11 @@ def to_signal(ts_mapping): def interp(sig, t, tag=None): # TODO: return function that interpolates the whole signal. sig = sig.project({tag}) - key = sig.data.keys()[sig.data.bisect_right(t) - 1] + idx = sig.data.bisect_right(t) - 1 + if idx<0: + return None + else: + key = sig.data.keys()[idx] return sig[key][tag] @@ -61,6 +65,9 @@ def pointwise_sat(phi, dt=0.1): res = [(t, v[phi]) for t, v in f(sig).items()] return res if quantitative else [((t, v > 0) for t, v in res)] + if t is False: + t = f(sig).items()[0][0] + res = interp(f(sig), t, phi) return res if quantitative else res > 0