def testFinallyRule(): preds = {} preds['pred1'] = MTL.Predicate('pred1', 1, 2) preds['pred2'] = MTL.Predicate('pred2', 2, 4) preds['pred3'] = MTL.Predicate('pred3', 4, 8) assert isinstance(MTLE.parse_mtl('<>_ts:(1, inf) pred1', preds), MTL.Finally), printFail(1) printPass(1) assert isinstance( MTLE.parse_mtl( '<>_ts:(1, 100) (finally_ts:(1.0, 200) (pred1 && pred2))', preds), MTL.Finally), printFail(2) printPass(2) assert isinstance( MTLE.parse_mtl( '<>_ts:(1, 100) <>_ts:(5, 50) F_ts:(25, 35) <>_ts:(27, 30) pred1', preds), MTL.Finally), printFail(3) printPass(3) assert isinstance(MTLE.parse_mtl('F_ts:(1, 1000) (pred1 && pred2)', preds), MTL.Finally), printFail(4) printPass(4) assert isinstance( MTLE.parse_mtl('<>_ts:(25, 3000) (pred2 | pred3)', preds), MTL.Finally), printFail(5) printPass(5)
def testGloballyRule(): preds = {} preds['pred1'] = MTL.Predicate('pred1', 1, 2) preds['pred2'] = MTL.Predicate('pred2', 2, 4) preds['pred3'] = MTL.Predicate('pred3', 4, 8) assert isinstance(MTLE.parse_mtl('[]_ts:(1, inf) pred1', preds), MTL.Global), printFail(1) printPass(1) assert isinstance( MTLE.parse_mtl( '[]_ts:(1, 100) G_ts:(1, 100) globally_ts:(1, 100) (pred1 && pred2)', preds), MTL.Global), printFail(2) printPass(2) assert isinstance( MTLE.parse_mtl( '[]_ts:(1, 100) []_ts:(5, 50) G_ts:(25, 35) []_ts:(27, 30) pred1', preds), MTL.Global), printFail(3) printPass(3) assert isinstance(MTLE.parse_mtl('G_ts:(1, 1000) (pred1 && pred2)', preds), MTL.Global), printFail(4) printPass(4) assert isinstance( MTLE.parse_mtl('[]_ts:(25, 3000) (pred2 | pred3)', preds), MTL.Global), printFail(5) printPass(5)
def testAndRule(): preds = {} preds['pred1'] = MTL.Predicate('pred1', 1, 2) preds['pred2'] = MTL.Predicate('pred2', 2, 4) preds['pred3'] = MTL.Predicate('pred3', 4, 8) assert isinstance(MTLE.parse_mtl('pred1 && pred1', preds), MTL.And), printFail(1) printPass(1) assert isinstance(MTLE.parse_mtl('pred1 & pred1 && pred1 /\ pred1 and pred1', preds), MTL.And), printFail(2) printPass(2) assert isinstance(MTLE.parse_mtl('pred1 && !pred2 && pred3', preds), MTL.And), printFail(3) printPass(3) assert isinstance(MTLE.parse_mtl('pred1 || pred2 && pred3', preds), MTL.And), printFail(4) printPass(4) assert isinstance(MTLE.parse_mtl('pred2 | pred3 && pred2 | pred2 && pred1', preds), MTL.And), printFail(5) printPass(5)
def testNegationRule(): preds = {} preds['pred1'] = MTL.Predicate('pred1', 1, 2) preds['pred2'] = MTL.Predicate('pred2', 2, 4) preds['pred3'] = MTL.Predicate('pred3', 4, 8) assert isinstance(MTLE.parse_mtl('!pred1', preds), MTL.Not), printFail(1) printPass(1) assert isinstance(MTLE.parse_mtl('!!(pred2)', preds), MTL.Not), printFail(2) printPass(2) assert isinstance(MTLE.parse_mtl('!pred3', preds), MTL.Not), printFail(3) printPass(3) assert isinstance(MTLE.parse_mtl('!(pred1 and pred2)', preds), MTL.Not), printFail(4) printPass(4) assert isinstance(MTLE.parse_mtl('!!!!!(pred1 and pred2 and pred3)', preds), MTL.Not), printFail(5) printPass(5)
def testNextRule(): preds = {} preds['pred1'] = MTL.Predicate('pred1', 1, 2) preds['pred2'] = MTL.Predicate('pred2', 2, 4) preds['pred3'] = MTL.Predicate('pred3', 4, 8) assert isinstance(MTLE.parse_mtl('next pred1', preds), MTL.Next), printFail(1) printPass(1) assert isinstance(MTLE.parse_mtl('next X pred1', preds), MTL.Next), printFail(2) printPass(2) assert isinstance(MTLE.parse_mtl('next (pred1 && pred2)', preds), MTL.Next), printFail(3) printPass(3) assert isinstance(MTLE.parse_mtl('X (pred1 && X X X pred3)', preds), MTL.Next), printFail(4) printPass(4) assert isinstance(MTLE.parse_mtl('X X X X X X X X (pred1 & pred2)', preds), MTL.Next), printFail(5) printPass(5)
def testOrRule(): preds = {} preds['pred1'] = MTL.Predicate('pred1', 1, 2) preds['pred2'] = MTL.Predicate('pred2', 2, 4) preds['pred3'] = MTL.Predicate('pred3', 4, 8) assert isinstance(MTLE.parse_mtl('pred1 || pred1', preds), MTL.Or), printFail(1) printPass(1) assert isinstance( MTLE.parse_mtl('pred1 | pred1 || pred1 \/ pred1 or pred1', preds), MTL.Or), printFail(2) printPass(2) assert isinstance(MTLE.parse_mtl('pred1 or !pred2 || pred3', preds), MTL.Or), printFail(3) printPass(3) assert isinstance(MTLE.parse_mtl('pred1 and pred2 or pred3', preds), MTL.Or), printFail(4) printPass(4) assert isinstance( MTLE.parse_mtl('pred2 and pred3 & pred2 and pred2 or pred1', preds), MTL.Or), printFail(5) printPass(5)
def testImpliesRule(): preds = {} preds['pred1'] = MTL.Predicate('pred1', 1, 2) preds['pred2'] = MTL.Predicate('pred2', 2, 4) preds['pred3'] = MTL.Predicate('pred3', 4, 8) assert isinstance(MTLE.parse_mtl('pred1 -> pred1', preds), MTL.Or), printFail(1) printPass(1) assert isinstance(MTLE.parse_mtl('(pred1 && pred2) -> TRUE', preds), MTL.Or), printFail(2) printPass(2) assert isinstance(MTLE.parse_mtl('pred1 -> pred2 -> pred3', preds), MTL.Or), printFail(3) printPass(3) assert isinstance( MTLE.parse_mtl('pred1 -> (pred1 && pred2 && pred3)', preds), MTL.Or), printFail(4) printPass(4) assert isinstance( MTLE.parse_mtl('pred1 -> pred2 -> (pred1 || pred2) -> TRUE', preds), MTL.Or), printFail(5) printPass(5)
import tltk_mtl_ext as MTLE import numpy as np na0 = MTL.Predicate('pred0', float(25), float(30)) na1 = MTL.Predicate('pred1', float(1), float(-1.6)) na2 = MTL.Predicate('pred2', float(-1), float(1.4)) na3 = MTL.Predicate('pred3', float(-1), float(2.3)) predicates = {} predicates['pred0'] = na0 predicates['pred1'] = na1 predicates['pred2'] = na2 predicates['pred3'] = na3 phi = MTLE.parse_mtl( 'G_ts:(0, inf) (pred0) && G_ts:(0, inf)((pred1 && (X pred2)) -> (X (pred3))) && F_ts:(0, 7) (pred1 && X pred2)', predicates) traces = {} traces['pred0'] = np.array([1, 2, 2, 5, 3], dtype=np.float64) # traces has to be 64 traces['pred1'] = np.array([1, 2, 2, 5, 3], dtype=np.float64) # traces has to be 64 traces['pred2'] = np.array([1, 2, 2, 5, 3], dtype=np.float64) # traces has to be 64 traces['pred3'] = np.array([1, 2, 2, 5, 3], dtype=np.float64) # traces has to be 64 time_data = np.arange(1, 2, 0.2, dtype=np.float32) phi.eval_interval(traces, time_data)
import numpy as np import time mode = 'cpu_threaded' preds = {} Ar1 = -1 br1 = -160 preds['data1'] = MTL.Predicate('data1', Ar1, br1, mode) Ar2 = -1 br2 = -4500 preds['data2'] = MTL.Predicate('data2', Ar2, br2, mode) # root = F(data1 /\ data2) root = MTLE.parse_mtl('!(F_ts:(0, inf)(data1 && data2))', preds, mode) traces = {} traces['data1'] = np.ones(10, dtype=np.float32) * 5 traces['data2'] = np.ones(10, dtype=np.float32) * 10 time_data = np.arange(1, 10 + 1, dtype=np.float32) t0 = time.time() root.eval_interval(traces, time_data) t1 = time.time() print("TLTk", "\t | Mode:", mode, '\t| Time: ', '%.4f' % (t1 - t0), ' \t| Robustness:', root.robustness)
y_time = [] for i in list_range: Ar3 = -1 br3 = -160 Ar4 = 1 br4 = 4500 preds = {} preds['data1'] = MTL.Predicate('data1',Ar3,br3) traces = {'data1': np.ones(i,dtype=np.float32)*5} time_stamps = np.arange(1, i + 1,dtype=np.float32) root = MTLE.parse_mtl('!(F_ts:(0, inf) data1)', preds, mode) t0 = time.time() root.eval_interval(traces, time_stamps) t1 = time.time() x_length.append(i) y_time.append(t1-t0) print("TLTk" ,"| phi_b1","| Mode:" ,mode,'\t| Samples:', "{:,}".format(i), '\t| Time: ', '%.4f'%(t1 - t0), ' \t| robustness', root.robustness) del traces del time_stamps fig = plt.scatter(x_length, y_time) plt.xlabel('Trace Length') plt.ylabel('Computation Time')
import sys import tltk_mtl as MTL import tltk_mtl_ext as MTLE import numpy as np Ar3 = -1 br3 = -160 Ar4 = 1 br4 = 4500 preds = {} preds['speed'] = MTL.Predicate('speed', Ar3, br3) preds['rpm'] = MTL.Predicate('rpm', Ar4, br4) root = MTLE.parse_mtl('!(F_ts:(0, 100) (speed && rpm))', preds) traces = {} traces['speed'] = np.array([10,20,30,40,50], dtype=np.float64) traces['rpm'] = np.array([10,20,30,40,50], dtype=np.float64) time_data = np.arange(1, 10, 2, dtype=np.float32) root.eval_interval(traces, time_data) print(root.robustness)
import tltk_mtl as MTL import tltk_mtl_ext as MTLE import numpy as np na1 = MTL.Predicate('pred1', float(1), float(-1.6)) na2 = MTL.Predicate('pred2', float(-1), float(1.4)) na3 = MTL.Predicate('pred3', float(-1), float(2.3)) predicates = {} predicates['pred1'] = na1 predicates['pred2'] = na2 predicates['pred3'] = na3 phi = MTLE.parse_mtl('(pred1 || pred2) || pred3', predicates) traces = {} traces['pred1'] = np.array([1, 2, 2, 5, 3], dtype=np.float64) # traces has to be 64 traces['pred2'] = np.array([1, 2, 2, 5, 3], dtype=np.float64) # traces has to be 64 traces['pred3'] = np.array([1, 2, 2, 5, 3], dtype=np.float64) # traces has to be 64 #print(traces['pred'].shape) time_data = np.arange(1, 2, 0.2, dtype=np.float32) #print(time_data.shape) phi.eval_interval(traces, time_data) print(phi.robustness)