Exemple #1
0
    def test_or(self):
        spec = rtamt.STLDenseTimeSpecification();
        spec.declare_var('req', 'float')
        spec.declare_var('gnt', 'float')
        spec.declare_var('out', 'float')
        spec.spec = 'out = req or gnt'

        spec.parse();

        in_data_1_1 = [[1, 2], [4.1, 1], [5, 2], [6.1, 1]]
        in_data_2_1 = [[1.2, 1]]
        out_expected_1 = []
        out_computed_1 = spec.update(['req', in_data_1_1], ['gnt', in_data_2_1])

        self.assertListEqual(out_expected_1, out_computed_1,
                             "Problem with 6th example:\nExpected output: %s\nComputed output: %s" % (
                                 out_expected_1, out_computed_1))

        in_data_1_2 = []
        in_data_2_2 = [[3.7, 3], [7.5, 2]]
        out_expected_2 = [[1.2, 2], [3.7, 3]]
        out_computed_2 = spec.update(['req', in_data_1_2], ['gnt', in_data_2_2])

        self.assertListEqual(out_expected_2, out_computed_2,
                             "Problem with 6th example:\nExpected output: %s\nComputed output: %s" % (
                                 out_expected_2, out_computed_2))

        in_data_1_3 = [[6.7, 4], [9.9, 5]]
        in_data_2_3 = [[8.1, 6]]
        out_expected_3 = [[6.1, 3], [6.7, 4]]
        out_computed_3 = spec.update(['req', in_data_1_3], ['gnt', in_data_2_3])

        self.assertListEqual(out_expected_3, out_computed_3,
                             "Problem with 6th example:\nExpected output: %s\nComputed output: %s" % (
                                 out_expected_3, out_computed_3))
Exemple #2
0
    def test_eventually_0_1_with_pastify(self):
        spec = rtamt.STLDenseTimeSpecification();
        spec.declare_var('req', 'float')
        spec.declare_var('out', 'float')
        spec.spec = 'out = eventually[0,1] req'

        spec.parse()
        spec.pastify()

        in_data_1 = [[5, 3], [5.3, 2], [5.75, 1]]
        out_expected_1 = [[5, 3]]
        out_computed_1 = spec.update(['req', in_data_1])

        self.assertListEqual(out_expected_1, out_computed_1,
                                  "Problem with 1st example:\nExpected output: %s\nComputed output: %s" % (
                                  out_expected_1, out_computed_1))

        in_data_2 = [[6.5, 5], [6.75, 6], [9, 5]]
        out_expected_2 = [[5.75, 3], [6.3, 2], [6.5, 5], [6.75, 6]]
        out_computed_2 = spec.update(['req', in_data_2])

        self.assertListEqual(out_expected_2, out_computed_2,
                             "Problem with 1st example:\nExpected output: %s\nComputed output: %s" % (
                                 out_expected_2, out_computed_2))

        in_data_3 = [[9.25, 4], [10, 2]]
        out_expected_3 = [[9, 6]]
        out_computed_3 = spec.update(['req', in_data_3])

        self.assertListEqual(out_expected_3, out_computed_3,
                             "Problem with 1st example:\nExpected output: %s\nComputed output: %s" % (
                                 out_expected_3, out_computed_3))
Exemple #3
0
    def test_since_2(self):
        spec = rtamt.STLDenseTimeSpecification();
        spec.declare_var('req', 'float')
        spec.declare_var('gnt', 'float')
        spec.declare_var('out', 'float')
        spec.spec = 'out = req since gnt'

        spec.parse();

        in_data_1 = [[1, 2], [4.1, 1]]
        in_data_2 = [[1.2, 1], [3.7, 3], [7.5, 2]]
        out_expected = [[1.2, 1], [3.7, 2]]
        out_computed = spec.update(['req', in_data_1], ['gnt', in_data_2])

        self.assertListEqual(out_expected, out_computed,
                             "Problem with 3d example:\nExpected output: %s\nComputed output: %s" % (
                                 out_expected, out_computed))

        in_data_1 = [[5, 2], [6.1, 1], [6.7, 4]]
        in_data_2 = []
        out_expected = [[4.1, 1], [5, 2], [6.1, 1]]
        out_computed = spec.update(['req', in_data_1], ['gnt', in_data_2])

        self.assertListEqual(out_expected, out_computed,
                             "Problem with 3d example:\nExpected output: %s\nComputed output: %s" % (
                                 out_expected, out_computed))

        in_data_1 = [[9.9, 5]]
        in_data_2 = [[8.1, 6]]
        out_expected = [[6.7, 3], [7.5, 3]]
        out_computed = spec.update(['req', in_data_1], ['gnt', in_data_2])

        self.assertListEqual(out_expected, out_computed,
                             "Problem with 3d example:\nExpected output: %s\nComputed output: %s" % (
                                 out_expected, out_computed))
Exemple #4
0
    def test_predicate_neq(self):
        spec = rtamt.STLDenseTimeSpecification();
        spec.declare_var('req', 'float')
        spec.declare_var('out', 'float')
        spec.spec = 'out = req !== 2'

        spec.parse();

        in_data_1 = [[5, 3], [5.3, 1]]
        in_data_2 = [[5.75, 2], [6.5, 5], [6.75, 6], [9, 5], [9.25, 4]]
        in_data_3 = [[10, 2]]

        out_expected_1 = [[5, 1]]
        out_expected_2 = [[5.3, 1], [5.75, 0], [6.5, 3], [6.75, 4], [9, 3]]
        out_expected_3 = [[9.25, 2]]

        out_computed_1 = spec.update(['req', in_data_1])
        out_computed_2 = spec.update(['req', in_data_2])
        out_computed_3 = spec.update(['req', in_data_3])


        self.assertListEqual(out_expected_1, out_computed_1,
                              "Problem with 1st example:\nExpected output: %s\nComputed output: %s" % (
                                  out_expected_1, out_computed_1))

        self.assertListEqual(out_expected_2, out_computed_2,
                         "Problem with 1st example:\nExpected output: %s\nComputed output: %s" % (
                             out_expected_2, out_computed_2))

        self.assertListEqual(out_expected_3, out_computed_3,
                              "Problem with 1st example:\nExpected output: %s\nComputed output: %s" % (
                                  out_expected_3, out_computed_3))
Exemple #5
0
    def test_and_1(self):
        spec = rtamt.STLDenseTimeSpecification();
        spec.declare_var('req', 'float')
        spec.declare_var('gnt', 'float')
        spec.declare_var('out', 'float')
        spec.spec = 'out = req and gnt'

        spec.parse();

        in_data_1_1 = [[2, 2], [3.3, 3], [5.7, 4]]
        in_data_2_1 = [[2.5, 5], [4.7, 6]]

        in_data_1_2 = []
        in_data_2_2 = [[5.7, 1]]

        out_expected_1 = [[2.5, 2], [3.3, 3]]
        out_expected_2 = [[4.7, 3]]

        out_computed_1 = spec.update(['req', in_data_1_1], ['gnt', in_data_2_1])
        out_computed_2 = spec.update(['req', in_data_1_2], ['gnt', in_data_2_2])

        self.assertListEqual(out_expected_1, out_computed_1,
                             "Problem with 1st example:\nExpected output: %s\nComputed output: %s" % (
                                 out_expected_1, out_computed_1))

        self.assertListEqual(out_expected_2, out_computed_2,
                              "Problem with 1st example:\nExpected output: %s\nComputed output: %s" % (
                                  out_expected_2, out_computed_2))
Exemple #6
0
def monitor():
    # Load traces
    data = read_csv('example1.csv')

    spec = rtamt.STLDenseTimeSpecification()
    spec.name = 'Example 1'
    spec.declare_const('threshold', 'float', '3')
    spec.declare_const('T', 'float', '5')
    spec.declare_var('req', 'float')
    spec.declare_var('gnt', 'float')
    spec.declare_var('response', 'float')
    spec.declare_var('out', 'float')
    spec.set_var_io_type('req', 'input')
    spec.set_var_io_type('gnt', 'output')
    spec.add_sub_spec('response = eventually[0:T s](gnt >= threshold)')
    spec.spec = 'out = ((req >= threshold) implies response)'
    try:
        spec.parse()
        spec.pastify()
    except rtamt.STLParseException as err:
        print('STL Parse Exception: {}'.format(err))
        sys.exit()

    rob = spec.evaluate(['req', data[' req']], ['gnt', data[' gnt']])
    print('robustness: ' + str(rob) + ', response: ' +
          str(spec.get_value('response')))
def monitor():
    a1 = [(0, 3), (3, 2)]
    b1 = [(0, 2), (2, 5), (4, 1), (7, -7)]

    a2 = [(5, 6), (6, -2), (8, 7), (11, -1)]
    b2 = [(10, 4)]

    a3 = [(13, -6), (15, 0)]
    b3 = [(15, 0)]

    # # stl
    spec = rtamt.STLDenseTimeSpecification()
    spec.name = 'STL dense-time specification'
    spec.declare_var('a', 'float')
    spec.spec = 'a>=2'
    try:
        spec.parse()
    except rtamt.STLParseException as err:
        print('STL Parse Exception: {}'.format(err))
        sys.exit()

    rob = spec.update(['a', a1], ['b', b1])
    print('rob: ' + str(rob))

    rob = spec.update(['a', a2], ['b', b2])
    print('rob: ' + str(rob))

    rob = spec.update(['a', a3], ['b', b3])
    print('rob: ' + str(rob))
Exemple #8
0
    def test_once(self):
        spec = rtamt.STLDenseTimeSpecification();
        spec.declare_var('req', 'float')
        spec.declare_var('out', 'float')
        spec.spec = 'out = once req'

        spec.parse();

        in_data = [[5, 3], [5.3, 1], [5.75, 2]]
        out_expected = [[5, 3], [5.3, 3], [5.75, 3]]
        out_computed = spec.update(['req', in_data])

        self.assertListEqual(out_expected, out_computed,
                             "Problem with 1st example:\nExpected output: %s\nComputed output: %s" % (
                                 out_expected, out_computed))

        in_data = [[6.5, 5], [6.75, 6]]
        out_expected = [[6.5, 5], [6.75, 6]]
        out_computed = spec.update(['req', in_data])

        self.assertListEqual(out_expected, out_computed,
                             "Problem with 1st example:\nExpected output: %s\nComputed output: %s" % (
                                 out_expected, out_computed))

        in_data = [[9, 5], [9.25, 4], [10, 2]]
        out_expected = [[9, 6], [9.25, 6], [10, 6]]
        out_computed = spec.update(['req', in_data])

        self.assertListEqual(out_expected, out_computed,
                             "Problem with 1st example:\nExpected output: %s\nComputed output: %s" % (
                                 out_expected, out_computed))
    def test_fall(self):
        spec = rtamt.STLDenseTimeSpecification()
        spec.declare_var('req', 'float')
        spec.declare_var('out', 'float')
        spec.spec = 'out = fall(req)'

        spec.parse()

        self.assertRaises(rtamt.LTLNotImplementedException, spec.update, ['req', [0.0, 3.0]])
Exemple #10
0
    def test_always_with_pastify(self):
        spec = rtamt.STLDenseTimeSpecification();
        spec.declare_var('req', 'float')
        spec.declare_var('out', 'float')
        spec.spec = 'out = always(req)'

        spec.parse()

        self.assertRaises(rtamt.LTLPastifyException, spec.pastify)
Exemple #11
0
    def test_eventually_0_1_without_pastify(self):
        spec = rtamt.STLDenseTimeSpecification()
        spec.declare_var('req', 'float')
        spec.declare_var('out', 'float')
        spec.spec = 'out = eventually[0,1] req'

        spec.parse()

        self.assertRaises(rtamt.STLNotImplementedException, spec.update, ['req', [0.0, 3.0]])
Exemple #12
0
    def test_until_0_1_with_pastify(self):
        spec = rtamt.STLDenseTimeSpecification();
        spec.declare_var('req', 'float')
        spec.declare_var('gnt', 'float')
        spec.declare_var('out', 'float')
        spec.spec = 'out = req until gnt'

        spec.parse()

        self.assertRaises(rtamt.LTLPastifyException, spec.pastify)
Exemple #13
0
    def test_until_0_1_without_pastify(self):
        spec = rtamt.STLDenseTimeSpecification()
        spec.declare_var('req', 'float')
        spec.declare_var('gnt', 'float')
        spec.declare_var('out', 'float')
        spec.spec = 'out = req until gnt'

        spec.parse()

        self.assertRaises(rtamt.LTLNotImplementedException, spec.update, [])
def monitor():
    # Load traces
    data1 = read_csv('example.csv')

    spec = rtamt.STLDenseTimeSpecification(semantics=rtamt.Semantics.STANDARD)
    spec.name = 'Example 1'
    spec.declare_var('req', 'float')
    spec.declare_var('gnt', 'float')
    spec.declare_var('out', 'float')
    spec.set_var_io_type('req', 'input')
    spec.set_var_io_type('gnt', 'output')
    spec.spec = 'out = ((req>=3) implies (eventually[0:5.1s](gnt>=3)))'
    try:
        spec.parse()
        spec.pastify()
    except rtamt.STLParseException as err:
        print('STL Parse Exception: {}'.format(err))
        sys.exit()

    rob = spec.evaluate(['req', data1[' req']], ['gnt', data1[' gnt']])

    print('Example (a) - standard robustness: {}'.format(rob))

    spec = rtamt.STLDenseTimeSpecification(semantics=rtamt.Semantics.STANDARD)
    spec.name = 'Example 1'
    spec.declare_var('req', 'float')
    spec.declare_var('gnt', 'float')
    spec.declare_var('out', 'float')
    spec.set_var_io_type('req', 'input')
    spec.set_var_io_type('gnt', 'output')
    spec.spec = 'out = ((req>=3) implies (eventually[0:5100ms](gnt>=3)))'
    try:
        spec.parse()
        spec.pastify()
    except rtamt.STLParseException as err:
        print('STL Parse Exception: {}'.format(err))
        sys.exit()

    rob = spec.evaluate(['req', data1[' req']], ['gnt', data1[' gnt']])

    # print('Example (a) - standard robustness: {}'.format(rob[len(rob)-1][1]))
    print('Example (a) - standard robustness: {}'.format(rob))
    def test_once(self):
        spec = rtamt.STLDenseTimeSpecification();
        spec.declare_var('req', 'float')
        spec.declare_var('out', 'float')
        spec.spec = 'out = once(req)'

        spec.parse()

        op = [[0, 2.5], [0.7, 4], [1.3, -1.2], [2.1, 1.7]]

        expected = [[0, 2.5], [0.7, 4], [2.1, 4]]
        computed = spec.evaluate(['req', op])

        self.assertListEqual(expected, computed, "hist")
    def test_until_0_1(self):
        spec = rtamt.STLDenseTimeSpecification();
        spec.declare_var('req', 'float')
        spec.declare_var('gnt', 'float')
        spec.declare_var('out', 'float')
        spec.spec = 'out = req until[0:1] gnt'

        spec.parse();
        left = [[0, 2], [10, 2]]
        right = [[0, 4], [10, 4]]

        out = spec.evaluate(['req', left], ['gnt', right])
        expected = [[0, 2], [10, 2]]
        self.assertListEqual(out, expected, "until[0:1]")
    def test_not(self):
        spec = rtamt.STLDenseTimeSpecification();
        spec.declare_var('req', 'float')
        spec.declare_var('out', 'float')
        spec.spec = 'out = not(req)'

        spec.parse()

        op = [[1.3, 4], [3.7, -2.2], [9.4, -33]]

        expected = [[1.3, -4], [3.7, 2.2], [9.4, 33]]
        computed = spec.evaluate(['req', op])

        self.assertListEqual(expected, computed, "not")
    def test_pow(self):
        spec = rtamt.STLDenseTimeSpecification();
        spec.declare_var('req', 'float')
        spec.declare_var('out', 'float')
        spec.spec = 'out = pow(2,req)'

        spec.parse()

        op = [[1.3, 4], [3.7, -2.2], [9.4, -33]]

        expected = [[1.3, math.pow(2,4)], [3.7, math.pow(2,-2.2)], [9.4, math.pow(2,-33)]]
        computed = spec.evaluate(['req', op])

        self.assertListEqual(expected, computed, "pow")
    def test_division(self):
        spec = rtamt.STLDenseTimeSpecification();
        spec.declare_var('req', 'float')
        spec.declare_var('gnt', 'float')
        spec.declare_var('out', 'float')
        spec.spec = 'out = req / gnt'

        spec.parse();
        left = [[0, 1.3], [0.7, 3.], [1.3, 0.1], [2.1, -2.2]]
        right = [[0, 2.5], [0.7, 4.], [1.3, -1.2], [2.1, 1.7]]

        out = spec.evaluate(['req', left], ['gnt', right])
        expected = [[0, 1.3 / 2.5], [0.7, 3. / 4.], [1.3, 0.1 / -1.2], [2.1, -2.2 / 1.7]]
        self.assertListEqual(out, expected, "div")
    def test_multiplication(self):
        spec = rtamt.STLDenseTimeSpecification();
        spec.declare_var('req', 'float')
        spec.declare_var('gnt', 'float')
        spec.declare_var('out', 'float')
        spec.spec = 'out = req * gnt'

        spec.parse();
        left = [[0, 1.3], [0.7, 3], [1.3, 0.1], [2.1, -2.2]]
        right = [[0, 2.5], [0.7, 4], [1.3, -1.2], [2.1, 1.7]]

        out = spec.evaluate(['req', left], ['gnt', right])
        expected = [[0, 1.3 * 2.5], [0.7, 3 * 4], [1.3, 0.1 * -1.2], [2.1, -2.2 * 1.7]]
        self.assertListEqual(out, expected, "mult")
    def test_eventually_0_1(self):
        spec = rtamt.STLDenseTimeSpecification();
        spec.declare_var('req', 'float')
        spec.declare_var('out', 'float')
        spec.spec = 'out = eventually[0:1](req)'

        spec.parse()

        op = [[0, 4], [5, 2], [10, 5], [15, 3]]

        expected = [[0, 4], [5, 2], [9, 5], [15, 5]]
        computed = spec.evaluate(['req', op])

        self.assertListEqual(expected, computed, "ev[0,1]")
Exemple #22
0
    def test_subtraction(self):
        spec = rtamt.STLDenseTimeSpecification()
        spec.declare_var('req', 'float')
        spec.declare_var('gnt', 'float')
        spec.declare_var('out', 'float')
        spec.spec = 'out = req - gnt'

        spec.parse()
        left = [[0, 1.3], [0.7, 3], [1.3, 0.1], [2.1, -2.2]]
        right = [[0, 2.5], [0.7, 4], [1.3, -1.2], [2.1, 1.7]]

        out = spec.evaluate(['req', left], ['gnt', right])
        expected = [[0, 1.3 - 2.5], [0.7, 3 - 4], [1.3, 0.1 - -1.2],
                    [2.1, -2.2 - 1.7]]
        self.assertListEqual(out, expected, "sub")
    def test_implies(self):
        spec = rtamt.STLDenseTimeSpecification();
        spec.declare_var('req', 'float')
        spec.declare_var('gnt', 'float')
        spec.declare_var('out', 'float')
        spec.spec = 'out = req implies gnt'

        spec.parse();

        left = [[0, 1.3], [0.7, 3], [1.3, 0.1], [2.1, -2.2]]
        right = [[0, 2.5], [0.7, 4], [1.3, -1.2], [2.1, 1.7]]

        expected = [[0, 2.5], [0.7, 4], [1.3, -0.1], [2.1, 2.2]]

        computed = spec.evaluate(['req', left], ['gnt', right])

        self.assertListEqual(expected, computed, "implies")
Exemple #24
0
    def test_predicate_neq(self):
        spec = rtamt.STLDenseTimeSpecification()
        spec.declare_var('req', 'float')
        spec.declare_var('gnt', 'float')
        spec.declare_var('out', 'float')
        spec.spec = 'out = req !== gnt'

        spec.parse()

        left = [[0, 1.3], [0.7, 3], [1.3, 0.1], [2.1, -2.2]]
        right = [[0, 2.5], [0.7, 4], [1.3, -1.2], [2.1, 1.7]]

        expected = [[0, 2.5 - 1.3], [0.7, 4 - 3], [1.3, 0.1 + 1.2],
                    [2.1, 2.2 + 1.7]]

        computed = spec.evaluate(['req', left], ['gnt', right])

        self.assertListEqual(expected, computed, "neq")
Exemple #25
0
    def test_input_vacuity(self):
        spec = rtamt.STLDenseTimeSpecification(
            semantics=rtamt.Semantics.INPUT_VACUITY)
        spec.declare_var('req', 'float')
        spec.declare_var('gnt', 'float')
        spec.declare_var('out', 'float')
        spec.set_var_io_type('req', 'input')
        spec.set_var_io_type('gnt', 'output')
        spec.spec = 'out = (req >= 3) implies (gnt >= 0)'

        spec.parse()

        left = [[0, 100], [1, -1], [2, -2], [3, 5], [4, -1]]
        right = [[0, 20], [1, -2], [2, 10], [3, 4], [4, -1]]

        out = spec.update(['req', left], ['gnt', right])
        expected = [[0, 0], [1, 4], [2, 5]]

        self.assertEqual(out, expected, "input vacuity")
Exemple #26
0
    def test_output_robustness(self):
        spec = rtamt.STLDenseTimeSpecification(
            semantics=rtamt.Semantics.OUTPUT_ROBUSTNESS)
        spec.declare_var('req', 'float')
        spec.declare_var('gnt', 'float')
        spec.declare_var('out', 'float')
        spec.set_var_io_type('req', 'input')
        spec.set_var_io_type('gnt', 'output')
        spec.spec = 'out = (req >= 3) implies (gnt >= 0)'

        spec.parse()

        left = [[0, 100], [1, -1], [2, -2], [3, 5], [4, -1]]
        right = [[0, 20], [1, -2], [2, 10], [3, 4], [4, -1]]

        out = spec.update(['req', left], ['gnt', right])
        expected = [[0, 20], [1, float("inf")]]

        self.assertEqual(out, expected, "output robustness")
Exemple #27
0
def monitor():

    req = [[0.0, 0.0], [3.0, 6.0], [5.0, 0.0], [11.0, 0.0]]
    gnt = [[0.0, 0.0], [7.0, 6.0], [9.0, 0.0], [11.0, 0.0]]

    spec = rtamt.STLDenseTimeSpecification()
    spec.name = 'STL Dense-time Offline Monitor'
    spec.declare_var('req', 'float')
    spec.declare_var('gnt', 'float')
    spec.declare_var('out', 'float')
    spec.set_var_io_type('req', 'input')
    spec.set_var_io_type('gnt', 'output')
    spec.spec = 'out = (req>=3) implies (eventually[0:5](gnt>=3))'
    try:
        spec.parse()
    except rtamt.STLParseException as err:
        print('STL Parse Exception: {}'.format(err))
        sys.exit()

    rob = spec.evaluate(['req', req], ['gnt', gnt])

    print('Robustness: {}'.format(rob))
    def __init__(self):
        # STL settings
        # Load the spec from STL file
        self.spec = rtamt.STLDenseTimeSpecification()
        self.spec.name = 'HandMadeMonitor'
        self.spec.declare_var('a', 'float')
        self.spec.declare_var('b', 'float')
        self.spec.declare_var('c', 'float')
        self.spec.set_var_io_type('a', 'input')
        self.spec.set_var_io_type('b', 'input')
        self.spec.set_var_io_type('c', 'output')
        self.spec.spec = 'c = always[0,5]( (a<=2) and (b >= 3) )'

        try:
            self.spec.parse()
            self.spec.pastify()
        except Exception as err:
            print('STL Parse Exception: {}'.format(err))
            sys.exit()

        # For each var from the spec, subscribe to its topic
        self.a_subscriber = rospy.Subscriber('rtamt/a',
                                             FloatStamped,
                                             self.a_callback,
                                             queue_size=10)
        self.b_subscriber = rospy.Subscriber('rtamt/b',
                                             FloatStamped,
                                             self.b_callback,
                                             queue_size=10)

        # Advertise the node as a publisher to the topic defined by the out var of the spec
        var_object = self.spec.get_var_object(self.spec.out_var)
        self.c_publisher = rospy.Publisher('rtamt/c',
                                           FloatStamped,
                                           queue_size=10)

        # queue for rob
        self.rob_q = Queue.Queue()
def monitor():
    # Load traces
    data1 = read_csv('example1.csv')
    data2 = read_csv('example2.csv')
    data3 = read_csv('example3.csv')
    data4 = read_csv('example4.csv')

    # # #
    #
    # Example (a) - standard robustness
    #
    # # #
    spec = rtamt.STLDenseTimeSpecification(semantics=rtamt.Semantics.STANDARD)
    spec.name = 'Example 1'
    spec.declare_var('req', 'float')
    spec.declare_var('gnt', 'float')
    spec.declare_var('out', 'float')
    spec.set_var_io_type('req', 'input')
    spec.set_var_io_type('gnt', 'output')
    spec.spec = 'out = ((req>=3) implies (eventually[0:5](gnt>=3)))'
    try:
        spec.parse()
        spec.pastify()
    except rtamt.STLParseException as err:
        print('STL Parse Exception: {}'.format(err))
        sys.exit()

    rob = spec.evaluate(['req', data1[' req']], ['gnt', data1[' gnt']])

    # print('Example (a) - standard robustness: {}'.format(rob[len(rob)-1][1]))
    print('Example (a) - standard robustness: {}'.format(rob))

    # # #
    #
    # Example (a) - output robustness
    #
    # # #
    spec = rtamt.STLDenseTimeSpecification(
        semantics=rtamt.Semantics.OUTPUT_ROBUSTNESS)
    spec.name = 'Example 1'
    spec.declare_var('req', 'float')
    spec.declare_var('gnt', 'float')
    spec.declare_var('out', 'float')
    spec.set_var_io_type('req', 'input')
    spec.set_var_io_type('gnt', 'output')
    spec.spec = 'out = ((req>=3) implies (eventually[0:5](gnt>=3)))'
    try:
        spec.parse()
        spec.pastify()
    except rtamt.STLParseException as err:
        print('STL Parse Exception: {}'.format(err))
        sys.exit()

    rob = spec.evaluate(['req', data1[' req']], ['gnt', data1[' gnt']])

    print('Example (a) - output robustness: {}'.format(rob))

    # # #
    #
    # Example (a) - input vacuity
    #
    # # # #
    spec = rtamt.STLDenseTimeSpecification(
        semantics=rtamt.Semantics.INPUT_VACUITY)
    spec.name = 'Example 1'
    spec.declare_var('req', 'float')
    spec.declare_var('gnt', 'float')
    spec.declare_var('out', 'float')
    spec.set_var_io_type('req', 'input')
    spec.set_var_io_type('gnt', 'output')
    spec.spec = 'out = ((req >= 3) implies eventually[0:5] (gnt >= 3))'
    try:
        spec.parse()
        spec.pastify()
    except rtamt.STLParseException as err:
        print('STL Parse Exception: {}'.format(err))
        sys.exit()

    rob = spec.evaluate(['req', data1[' req']], ['gnt', data1[' gnt']])

    # print('Example (a) - input vacuity: {}'.format(rob[len(rob)-1][1]))
    print('Example (a) - input vacuity: {}'.format(rob))
    # # #
    #
    # Example (b) - standard robustness
    #
    # # #
    spec = rtamt.STLDenseTimeSpecification(semantics=rtamt.Semantics.STANDARD)
    spec.name = 'Example 1'
    spec.declare_var('req', 'float')
    spec.declare_var('gnt', 'float')
    spec.declare_var('out', 'float')
    spec.set_var_io_type('req', 'input')
    spec.set_var_io_type('gnt', 'output')
    spec.spec = 'out = ((req >= 3) implies eventually[0:5] (gnt >= 3))'
    try:
        spec.parse()
        spec.pastify()
    except rtamt.STLParseException as err:
        print('STL Parse Exception: {}'.format(err))
        sys.exit()

    rob = spec.evaluate(['req', data2[' req']], ['gnt', data2[' gnt']])

    print('Example (b) - standard robustness: {}'.format(rob))

    # # #
    #
    # Example (b) - output robustness
    #
    # # #
    spec = rtamt.STLDenseTimeSpecification(
        semantics=rtamt.Semantics.OUTPUT_ROBUSTNESS)
    spec.name = 'Example 1'
    spec.declare_var('req', 'float')
    spec.declare_var('gnt', 'float')
    spec.declare_var('out', 'float')
    spec.set_var_io_type('req', 'input')
    spec.set_var_io_type('gnt', 'output')
    spec.spec = 'out = ((req >= 3) implies eventually[0:5] (gnt >= 3))'
    try:
        spec.parse()
        spec.pastify()
    except rtamt.STLParseException as err:
        print('STL Parse Exception: {}'.format(err))
        sys.exit()

    rob = spec.evaluate(['req', data2[' req']], ['gnt', data2[' gnt']])

    print('Example (b) - output robustness: {}'.format(rob))

    # # #
    #
    # Example (b) - input vacuity
    #
    # # #
    spec = rtamt.STLDenseTimeSpecification(
        semantics=rtamt.Semantics.INPUT_VACUITY)
    spec.name = 'Example 1'
    spec.declare_var('req', 'float')
    spec.declare_var('gnt', 'float')
    spec.declare_var('out', 'float')
    spec.set_var_io_type('req', 'input')
    spec.set_var_io_type('gnt', 'output')
    spec.spec = 'out = ((req >= 3) implies eventually[0:5] (gnt >= 3))'
    try:
        spec.parse()
        spec.pastify()
    except rtamt.STLParseException as err:
        print('STL Parse Exception: {}'.format(err))
        sys.exit()

    rob = spec.evaluate(['req', data2[' req']], ['gnt', data2[' gnt']])

    print('Example (b) - input vacuity: {}'.format(rob))

    # # #
    #
    # Example (c) - standard robustness
    #
    # # #
    spec = rtamt.STLDenseTimeSpecification(semantics=rtamt.Semantics.STANDARD)
    spec.name = 'Example 1'
    spec.declare_var('req', 'float')
    spec.declare_var('gnt', 'float')
    spec.declare_var('out', 'float')
    spec.set_var_io_type('req', 'input')
    spec.set_var_io_type('gnt', 'output')
    spec.spec = 'out = ((req >= 3) implies eventually[0:5] (gnt >= 3))'
    try:
        spec.parse()
        spec.pastify()
    except rtamt.STLParseException as err:
        print('STL Parse Exception: {}'.format(err))
        sys.exit()

    rob = spec.evaluate(['req', data3[' req']], ['gnt', data3[' gnt']])

    print('Example (c) - standard robustness: {}'.format(rob))

    # # #
    #
    # Example (c) - output robustness
    #
    # # #
    spec = rtamt.STLDenseTimeSpecification(
        semantics=rtamt.Semantics.OUTPUT_ROBUSTNESS)
    spec.name = 'Example 1'
    spec.declare_var('req', 'float')
    spec.declare_var('gnt', 'float')
    spec.declare_var('out', 'float')
    spec.set_var_io_type('req', 'input')
    spec.set_var_io_type('gnt', 'output')
    spec.spec = 'out = ((req >= 3) implies eventually[0:5] (gnt >= 3))'
    try:
        spec.parse()
        spec.pastify()
    except rtamt.STLParseException as err:
        print('STL Parse Exception: {}'.format(err))
        sys.exit()

    rob = spec.evaluate(['req', data3[' req']], ['gnt', data3[' gnt']])

    print('Example (c) - output robustness: {}'.format(rob))

    # # #
    #
    # Example (c) - input vacuity
    #
    # # #
    spec = rtamt.STLDenseTimeSpecification(
        semantics=rtamt.Semantics.INPUT_VACUITY)
    spec.name = 'Example 1'
    spec.declare_var('req', 'float')
    spec.declare_var('gnt', 'float')
    spec.declare_var('out', 'float')
    spec.set_var_io_type('req', 'input')
    spec.set_var_io_type('gnt', 'output')
    spec.spec = 'out = ((req >= 3) implies eventually[0:5] (gnt >= 3))'
    try:
        spec.parse()
        spec.pastify()
    except rtamt.STLParseException as err:
        print('STL Parse Exception: {}'.format(err))
        sys.exit()

    rob = spec.evaluate(['req', data3[' req']], ['gnt', data3[' gnt']])

    print('Example (c) - input vacuity: {}'.format(rob))

    # # # #
    # #
    # # Example (d) - standard robustness
    # #
    # # # #
    spec = rtamt.STLDenseTimeSpecification(semantics=rtamt.Semantics.STANDARD)

    spec.name = 'Example d'
    spec.declare_var('req', 'float')
    spec.declare_var('gnt', 'float')
    spec.declare_var('out', 'float')
    spec.set_var_io_type('req', 'input')
    spec.set_var_io_type('gnt', 'output')
    spec.spec = 'out = ((req >= 3) implies eventually[0:5] (gnt >= 3))'
    try:
        spec.parse()
        spec.pastify()
    except rtamt.STLParseException as err:
        print('STL Parse Exception: {}'.format(err))
        sys.exit()

    rob = spec.evaluate(['req', data4[' req']], ['gnt', data4[' gnt']])

    print('Example (d) - standard robustness: {}'.format(rob))
    # # # #
    # #
    # # Example (d) - output robustness
    # #
    # # # #
    spec = rtamt.STLDenseTimeSpecification(
        semantics=rtamt.Semantics.OUTPUT_ROBUSTNESS)
    spec.name = 'Example d'
    spec.declare_var('req', 'float')
    spec.declare_var('gnt', 'float')
    spec.declare_var('out', 'float')
    spec.set_var_io_type('req', 'input')
    spec.set_var_io_type('gnt', 'output')
    spec.spec = 'out = ((req >= 3) implies eventually[0:5] (gnt >= 3))'
    try:
        spec.parse()
        spec.pastify()
    except rtamt.STLParseException as err:
        print('STL Parse Exception: {}'.format(err))
        sys.exit()

    rob = spec.evaluate(['req', data4[' req']], ['gnt', data4[' gnt']])

    print('Example (d) - output robustness: {}'.format(rob))

    #
    # # # #
    # #
    # # Example (d) - input vacuity
    # #
    # # # #
    spec = rtamt.STLDenseTimeSpecification(
        semantics=rtamt.Semantics.INPUT_VACUITY)
    spec.name = 'Example 1'
    spec.declare_var('req', 'float')
    spec.declare_var('gnt', 'float')
    spec.declare_var('out', 'float')
    spec.set_var_io_type('req', 'input')
    spec.set_var_io_type('gnt', 'output')
    spec.spec = 'out = ((req >= 3) implies eventually[0:5] (gnt >= 3))'
    try:
        spec.parse()
        spec.pastify()
    except rtamt.STLParseException as err:
        print('STL Parse Exception: {}'.format(err))
        sys.exit()

    rob = spec.evaluate(['req', data4[' req']], ['gnt', data4[' gnt']])

    print('Example (d) - input vacuity: {}'.format(rob))
Exemple #30
0
def monitor():
    # Load traces
    req = [[0, 0], [1.5, 2], [2.3, 4.3], [3, 0], [7, 3.1], [8, 1], [9.2, 2.8],
           [10, 2.8]]
    gnt = [[0, 0], [2.5, 2.9], [5.6, 1], [7.9, 6], [10, 6]]

    req_1 = [[0, 0], [1.5, 2], [2.3, 4.3]]
    gnt_1 = [[0, 0], [2.5, 2.9]]

    req_2 = [[3, 0], [7, 3.1], [8, 1]]
    gnt_2 = [[5.6, 1], [7.9, 6]]

    req_3 = [[9.2, 2.8], [10, 2.8]]
    gnt_3 = [[10, 6]]

    # # #
    #
    # Example - offline robustness
    #
    # # #
    spec = rtamt.STLDenseTimeSpecification()
    spec.name = 'Example 1'
    spec.declare_var('req', 'float')
    spec.declare_var('gnt', 'float')
    spec.declare_var('out', 'float')
    spec.set_var_io_type('req', 'input')
    spec.set_var_io_type('gnt', 'output')
    spec.spec = 'out = ((req>=3) implies (eventually[1:2](gnt>=3)))'
    try:
        spec.parse()
        spec.pastify()
    except rtamt.STLParseException as err:
        print('STL Parse Exception: {}'.format(err))
        sys.exit()

    rob = spec.evaluate(['req', req], ['gnt', gnt])
    print('Robustness offline: {}'.format(rob))

    # # #
    #
    # Example - online robustness
    #
    # # #
    spec = rtamt.STLDenseTimeSpecification()
    spec.name = 'Example 1'
    spec.declare_var('req', 'float')
    spec.declare_var('gnt', 'float')
    spec.declare_var('out', 'float')
    spec.set_var_io_type('req', 'input')
    spec.set_var_io_type('gnt', 'output')
    spec.spec = 'out = ((req>=3) implies (eventually[1:2](gnt>=3)))'
    try:
        spec.parse()
        spec.pastify()
    except rtamt.STLParseException as err:
        print('STL Parse Exception: {}'.format(err))
        sys.exit()

    rob = spec.update(['req', req_1], ['gnt', gnt_1])
    print('Robustness online - step 1: {}'.format(rob))

    rob = spec.update(['req', req_2], ['gnt', gnt_2])
    print('Robustness online - step 2: {}'.format(rob))

    rob = spec.update(['req', req_3], ['gnt', gnt_3])
    print('Robustness online - step 3: {}'.format(rob))