Example #1
0
def define_ha():
    '''make a test hybrid automaton and return it'''
    ha = HybridAutomaton()

    m1 = ha.new_mode('on')
    m1.inv = lambda _: True
    m1.der = lambda _, state: [1, 2.0 * state[0]]

    m2 = ha.new_mode('off')
    m2.inv = lambda _: True
    m2.der = lambda _, state: [-1.0, -2.0]

    return ha
Example #2
0
 def define_ha_test():
     '''make the hybrid automaton and return it'''
     # Variable ordering: [x, v, a, t]
     ha = HybridAutomaton()
     on = ha.new_mode('on')
     on.inv = lambda state: True
     on.der = lambda _, state: [state[1], state[2], -10 * state[1] - 3 * state[2], 1]
     init = ha.new_mode('init')
     init.inv = lambda state: True
     t = ha.new_transition(init, on)
     t.guard = lambda state: True
     t.reset = lambda state: [None, None, 10 * (1 - state[0]) + 3 * -state[1], None]
     return ha
Example #3
0
def define_ha():
    '''make a test hybrid automaton and return it'''
    ha = HybridAutomaton()

    m1 = ha.new_mode('on')
    m1.inv = lambda _: True
    m1.der = lambda _, state: [1, 2.0 * state[0]]

    m2 = ha.new_mode('off')
    m2.inv = lambda _: True
    m2.der = lambda _, state: [-1.0, -2.0]

    return ha
Example #4
0
 def define_ha_test():
     '''make the hybrid automaton and return it'''
     # Variable ordering: [x, v, a, t]
     ha = HybridAutomaton()
     on = ha.new_mode('on')
     on.inv = lambda state: True
     on.der = lambda _, state: [
         state[1], state[2], -10 * state[1] - 3 * state[2], 1
     ]
     init = ha.new_mode('init')
     init.inv = lambda state: True
     t = ha.new_transition(init, on)
     t.guard = lambda state: True
     t.reset = lambda state: [
         None, None, 10 * (1 - state[0]) + 3 * -state[1], None
     ]
     return ha
Example #5
0
    def test_sim_overflow_error(self):
        'regression test for an overflow error that was encountered'

        ha = HybridAutomaton()
        ha.variables = ["barrier_clock", "x", "y"]
        on = ha.new_mode('on')

        def inv(state):
            'state invariant'

            rv = (state[1]**2) + (state[2]**2) - 9 <= 0.0001

            #print "inv returning {}".format(rv)

            return rv

        on.inv = inv
        on.der = lambda _, state: [
            1, -state[2], -(-state[1] + state[2] * (-state[1]**2 + 1))
        ]
        on.der_interval_list = [[0, 0], [0, 0], [0, 0]]
        error = ha.new_mode('error')
        error.inv = lambda state: True
        error.der = lambda _, state: [0, 0, 0]
        error.der_interval_list = [[0, 0], [0, 0], [0, 0]]
        t = ha.new_transition(on, error)
        t.guard = lambda state: state[0] >= 5
        t.reset = lambda state: [None, None, None]

        res = util.simulate_multi_trajectory_time(
            ha, ['on'], [[0.0, 0.0, -2.9142074584950004]], 5.0001)

        # two points before, invariant should still be true
        point = res.split(';')[-2]

        _, t, x, y = point.split(",")

        self.assertTrue(inv([float(t), float(x), float(y)]),
                        msg="Invariant should be true at last point")
Example #6
0
def define_ha():
    '''make the hybrid automaton and return it'''
    # Variable ordering: [x, y, xvel, yvel]

    sym_x, sym_y, sym_xvel, sym_yvel = symbols('x y xvel yvel ')

    ha = HybridAutomaton()

    mode_0_0 = ha.new_mode('mode_0_0')
    mode_0_0.inv = lambda state: state[0] <= 1 and state[1] <= 1
    mode_0_0.inv_sympy = And(sym_x <= 1, sym_y <= 1)
    mode_0_0.der = lambda _, state: [state[2], state[3], -1.2 * (state[2] - 1) + 0.1 * (state[3] - 0.00000000000000006123233995736766), 0.1 * (state[2] - 1) + -1.2 * (state[3] - 0.00000000000000006123233995736766)]
    mode_0_0.der_interval_list = [[0, 0], [0, 0], [-0.1, 0.1], [-0.1, 0.1]]

    mode_1_0 = ha.new_mode('mode_1_0')
    mode_1_0.inv = lambda state: state[0] >= 1 and state[0] <= 2 and state[1] <= 1
    mode_1_0.inv_sympy = And(And(sym_x >= 1, sym_x <= 2), sym_y <= 1)
    mode_1_0.der = lambda _, state: [state[2], state[3], -1.2 * (state[2] - 1) + 0.1 * (state[3] - 0.00000000000000006123233995736766), 0.1 * (state[2] - 1) + -1.2 * (state[3] - 0.00000000000000006123233995736766)]
    mode_1_0.der_interval_list = [[0, 0], [0, 0], [-0.1, 0.1], [-0.1, 0.1]]

    mode_2_0 = ha.new_mode('mode_2_0')
    mode_2_0.inv = lambda state: state[0] >= 2 and state[1] <= 1
    mode_2_0.inv_sympy = And(sym_x >= 2, sym_y <= 1)
    mode_2_0.der = lambda _, state: [0, 0, 0, 0]
    mode_2_0.der_interval_list = [[0, 0], [0, 0], [0, 0], [0, 0]]

    mode_0_1 = ha.new_mode('mode_0_1')
    mode_0_1.inv = lambda state: state[0] <= 1 and state[1] >= 1 and state[1] <= 2
    mode_0_1.inv_sympy = And(And(sym_x <= 1, sym_y >= 1), sym_y <= 2)
    mode_0_1.der = lambda _, state: [state[2], state[3], -1.2 * (state[2] - 0.00000000000000012246467991473532) + 0.1 * (state[3] - -1), 0.1 * (state[2] - 0.00000000000000012246467991473532) + -1.2 * (state[3] - -1)]
    mode_0_1.der_interval_list = [[0, 0], [0, 0], [-0.1, 0.1], [-0.1, 0.1]]

    mode_1_1 = ha.new_mode('mode_1_1')
    mode_1_1.inv = lambda state: state[0] >= 1 and state[0] <= 2 and state[1] >= 1 and state[1] <= 2
    mode_1_1.inv_sympy = And(And(And(sym_x >= 1, sym_x <= 2), sym_y >= 1), sym_y <= 2)
    mode_1_1.der = lambda _, state: [state[2], state[3], -1.2 * (state[2] - 0.7071067811865476) + 0.1 * (state[3] - -0.7071067811865475), 0.1 * (state[2] - 0.7071067811865476) + -1.2 * (state[3] - -0.7071067811865475)]
    mode_1_1.der_interval_list = [[0, 0], [0, 0], [-0.1, 0.1], [-0.1, 0.1]]

    mode_2_1 = ha.new_mode('mode_2_1')
    mode_2_1.inv = lambda state: state[0] >= 2 and state[1] >= 1 and state[1] <= 2
    mode_2_1.inv_sympy = And(And(sym_x >= 2, sym_y >= 1), sym_y <= 2)
    mode_2_1.der = lambda _, state: [state[2], state[3], -1.2 * (state[2] - 0.00000000000000012246467991473532) + 0.1 * (state[3] - -1), 0.1 * (state[2] - 0.00000000000000012246467991473532) + -1.2 * (state[3] - -1)]
    mode_2_1.der_interval_list = [[0, 0], [0, 0], [-0.1, 0.1], [-0.1, 0.1]]

    mode_0_2 = ha.new_mode('mode_0_2')
    mode_0_2.inv = lambda state: state[0] <= 1 and state[1] >= 2
    mode_0_2.inv_sympy = And(sym_x <= 1, sym_y >= 2)
    mode_0_2.der = lambda _, state: [0, 0, 0, 0]
    mode_0_2.der_interval_list = [[0, 0], [0, 0], [0, 0], [0, 0]]

    mode_1_2 = ha.new_mode('mode_1_2')
    mode_1_2.inv = lambda state: state[0] >= 1 and state[0] <= 2 and state[1] >= 2
    mode_1_2.inv_sympy = And(And(sym_x >= 1, sym_x <= 2), sym_y >= 2)
    mode_1_2.der = lambda _, state: [state[2], state[3], -1.2 * (state[2] - 1) + 0.1 * (state[3] - 0.00000000000000006123233995736766), 0.1 * (state[2] - 1) + -1.2 * (state[3] - 0.00000000000000006123233995736766)]
    mode_1_2.der_interval_list = [[0, 0], [0, 0], [-0.1, 0.1], [-0.1, 0.1]]

    mode_2_2 = ha.new_mode('mode_2_2')
    mode_2_2.inv = lambda state: state[0] >= 2 and state[1] >= 2
    mode_2_2.inv_sympy = And(sym_x >= 2, sym_y >= 2)
    mode_2_2.der = lambda _, state: [state[2], state[3], -1.2 * (state[2] - 0.00000000000000012246467991473532) + 0.1 * (state[3] - -1), 0.1 * (state[2] - 0.00000000000000012246467991473532) + -1.2 * (state[3] - -1)]
    mode_2_2.der_interval_list = [[0, 0], [0, 0], [-0.1, 0.1], [-0.1, 0.1]]

    t = ha.new_transition(mode_0_0, mode_1_0)
    t.guard = lambda state: state[0] >= 1
    t.reset = lambda state: [None, None, None, None]
    t.guard_sympy = sym_x >= 1

    t = ha.new_transition(mode_0_0, mode_0_1)
    t.guard = lambda state: state[1] >= 1
    t.reset = lambda state: [None, None, None, None]
    t.guard_sympy = sym_y >= 1

    t = ha.new_transition(mode_1_0, mode_0_0)
    t.guard = lambda state: state[0] <= 1
    t.reset = lambda state: [None, None, None, None]
    t.guard_sympy = sym_x <= 1

    t = ha.new_transition(mode_1_0, mode_2_0)
    t.guard = lambda state: state[0] >= 2
    t.reset = lambda state: [None, None, None, None]
    t.guard_sympy = sym_x >= 2

    t = ha.new_transition(mode_1_0, mode_1_1)
    t.guard = lambda state: state[1] >= 1
    t.reset = lambda state: [None, None, None, None]
    t.guard_sympy = sym_y >= 1

    t = ha.new_transition(mode_2_0, mode_1_0)
    t.guard = lambda state: state[0] <= 2
    t.reset = lambda state: [None, None, None, None]
    t.guard_sympy = sym_x <= 2

    t = ha.new_transition(mode_2_0, mode_2_1)
    t.guard = lambda state: state[1] >= 1
    t.reset = lambda state: [None, None, None, None]
    t.guard_sympy = sym_y >= 1

    t = ha.new_transition(mode_0_1, mode_1_1)
    t.guard = lambda state: state[0] >= 1
    t.reset = lambda state: [None, None, None, None]
    t.guard_sympy = sym_x >= 1

    t = ha.new_transition(mode_0_1, mode_0_0)
    t.guard = lambda state: state[1] <= 1
    t.reset = lambda state: [None, None, None, None]
    t.guard_sympy = sym_y <= 1

    t = ha.new_transition(mode_0_1, mode_0_2)
    t.guard = lambda state: state[1] >= 2
    t.reset = lambda state: [None, None, None, None]
    t.guard_sympy = sym_y >= 2

    t = ha.new_transition(mode_1_1, mode_0_1)
    t.guard = lambda state: state[0] <= 1
    t.reset = lambda state: [None, None, None, None]
    t.guard_sympy = sym_x <= 1

    t = ha.new_transition(mode_1_1, mode_2_1)
    t.guard = lambda state: state[0] >= 2
    t.reset = lambda state: [None, None, None, None]
    t.guard_sympy = sym_x >= 2

    t = ha.new_transition(mode_1_1, mode_1_0)
    t.guard = lambda state: state[1] <= 1
    t.reset = lambda state: [None, None, None, None]
    t.guard_sympy = sym_y <= 1

    t = ha.new_transition(mode_1_1, mode_1_2)
    t.guard = lambda state: state[1] >= 2
    t.reset = lambda state: [None, None, None, None]
    t.guard_sympy = sym_y >= 2

    t = ha.new_transition(mode_2_1, mode_1_1)
    t.guard = lambda state: state[0] <= 2
    t.reset = lambda state: [None, None, None, None]
    t.guard_sympy = sym_x <= 2

    t = ha.new_transition(mode_2_1, mode_2_0)
    t.guard = lambda state: state[1] <= 1
    t.reset = lambda state: [None, None, None, None]
    t.guard_sympy = sym_y <= 1

    t = ha.new_transition(mode_2_1, mode_2_2)
    t.guard = lambda state: state[1] >= 2
    t.reset = lambda state: [None, None, None, None]
    t.guard_sympy = sym_y >= 2

    t = ha.new_transition(mode_0_2, mode_1_2)
    t.guard = lambda state: state[0] >= 1
    t.reset = lambda state: [None, None, None, None]
    t.guard_sympy = sym_x >= 1

    t = ha.new_transition(mode_0_2, mode_0_1)
    t.guard = lambda state: state[1] <= 2
    t.reset = lambda state: [None, None, None, None]
    t.guard_sympy = sym_y <= 2

    t = ha.new_transition(mode_1_2, mode_0_2)
    t.guard = lambda state: state[0] <= 1
    t.reset = lambda state: [None, None, None, None]
    t.guard_sympy = sym_x <= 1

    t = ha.new_transition(mode_1_2, mode_2_2)
    t.guard = lambda state: state[0] >= 2
    t.reset = lambda state: [None, None, None, None]
    t.guard_sympy = sym_x >= 2

    t = ha.new_transition(mode_1_2, mode_1_1)
    t.guard = lambda state: state[1] <= 2
    t.reset = lambda state: [None, None, None, None]
    t.guard_sympy = sym_y <= 2

    t = ha.new_transition(mode_2_2, mode_1_2)
    t.guard = lambda state: state[0] <= 2
    t.reset = lambda state: [None, None, None, None]
    t.guard_sympy = sym_x <= 2

    t = ha.new_transition(mode_2_2, mode_2_1)
    t.guard = lambda state: state[1] <= 2
    t.reset = lambda state: [None, None, None, None]
    t.guard_sympy = sym_y <= 2

    return ha
Example #7
0
def define_ha():
    '''make the hybrid automaton and return it'''
    # Variable ordering: [x, y, xvel, yvel]

    sym_x, sym_y, sym_xvel, sym_yvel = symbols('x y xvel yvel ')

    ha = HybridAutomaton()

    mode_0_0 = ha.new_mode('mode_0_0')
    mode_0_0.inv = lambda state: state[0] <= 1 and state[1] <= 1
    mode_0_0.inv_sympy = And(sym_x <= 1, sym_y <= 1)
    mode_0_0.der = lambda _, state: [state[2], state[3], -0.8 * (state[2] - 1) + -0.2 * (state[3] - 0.00000000000000006123233995736766), -0.1 * (state[2] - 1) + -0.8 * (state[3] - 0.00000000000000006123233995736766)]
    mode_0_0.der_interval_list = [[0, 0], [0, 0], [-0.1, 0.1], [-0.1, 0.1]]

    mode_1_0 = ha.new_mode('mode_1_0')
    mode_1_0.inv = lambda state: state[0] >= 1 and state[0] <= 2 and state[1] <= 1
    mode_1_0.inv_sympy = And(And(sym_x >= 1, sym_x <= 2), sym_y <= 1)
    mode_1_0.der = lambda _, state: [0, 0, 0, 0]
    mode_1_0.der_interval_list = [[0, 0], [0, 0], [0, 0], [0, 0]]

    mode_2_0 = ha.new_mode('mode_2_0')
    mode_2_0.inv = lambda state: state[0] >= 2 and state[0] <= 3 and state[1] <= 1
    mode_2_0.inv_sympy = And(And(sym_x >= 2, sym_x <= 3), sym_y <= 1)
    mode_2_0.der = lambda _, state: [state[2], state[3], -0.8 * (state[2] - 0) + -0.2 * (state[3] - 1), -0.1 * (state[2] - 0) + -0.8 * (state[3] - 1)]
    mode_2_0.der_interval_list = [[0, 0], [0, 0], [-0.1, 0.1], [-0.1, 0.1]]

    mode_3_0 = ha.new_mode('mode_3_0')
    mode_3_0.inv = lambda state: state[0] >= 3 and state[0] <= 4 and state[1] <= 1
    mode_3_0.inv_sympy = And(And(sym_x >= 3, sym_x <= 4), sym_y <= 1)
    mode_3_0.der = lambda _, state: [state[2], state[3], -0.8 * (state[2] - 0) + -0.2 * (state[3] - 1), -0.1 * (state[2] - 0) + -0.8 * (state[3] - 1)]
    mode_3_0.der_interval_list = [[0, 0], [0, 0], [-0.1, 0.1], [-0.1, 0.1]]

    mode_4_0 = ha.new_mode('mode_4_0')
    mode_4_0.inv = lambda state: state[0] >= 4 and state[1] <= 1
    mode_4_0.inv_sympy = And(sym_x >= 4, sym_y <= 1)
    mode_4_0.der = lambda _, state: [state[2], state[3], -0.8 * (state[2] - 0) + -0.2 * (state[3] - 1), -0.1 * (state[2] - 0) + -0.8 * (state[3] - 1)]
    mode_4_0.der_interval_list = [[0, 0], [0, 0], [-0.1, 0.1], [-0.1, 0.1]]

    mode_0_1 = ha.new_mode('mode_0_1')
    mode_0_1.inv = lambda state: state[0] <= 1 and state[1] >= 1 and state[1] <= 2
    mode_0_1.inv_sympy = And(And(sym_x <= 1, sym_y >= 1), sym_y <= 2)
    mode_0_1.der = lambda _, state: [state[2], state[3], -0.8 * (state[2] - 1) + -0.2 * (state[3] - 0.00000000000000006123233995736766), -0.1 * (state[2] - 1) + -0.8 * (state[3] - 0.00000000000000006123233995736766)]
    mode_0_1.der_interval_list = [[0, 0], [0, 0], [-0.1, 0.1], [-0.1, 0.1]]

    mode_1_1 = ha.new_mode('mode_1_1')
    mode_1_1.inv = lambda state: state[0] >= 1 and state[0] <= 2 and state[1] >= 1 and state[1] <= 2
    mode_1_1.inv_sympy = And(And(And(sym_x >= 1, sym_x <= 2), sym_y >= 1), sym_y <= 2)
    mode_1_1.der = lambda _, state: [state[2], state[3], -0.8 * (state[2] - 0.00000000000000012246467991473532) + -0.2 * (state[3] - -1), -0.1 * (state[2] - 0.00000000000000012246467991473532) + -0.8 * (state[3] - -1)]
    mode_1_1.der_interval_list = [[0, 0], [0, 0], [-0.1, 0.1], [-0.1, 0.1]]

    mode_2_1 = ha.new_mode('mode_2_1')
    mode_2_1.inv = lambda state: state[0] >= 2 and state[0] <= 3 and state[1] >= 1 and state[1] <= 2
    mode_2_1.inv_sympy = And(And(And(sym_x >= 2, sym_x <= 3), sym_y >= 1), sym_y <= 2)
    mode_2_1.der = lambda _, state: [state[2], state[3], -0.8 * (state[2] - -1) + -0.2 * (state[3] - -0.00000000000000018369701987210297), -0.1 * (state[2] - -1) + -0.8 * (state[3] - -0.00000000000000018369701987210297)]
    mode_2_1.der_interval_list = [[0, 0], [0, 0], [-0.1, 0.1], [-0.1, 0.1]]

    mode_3_1 = ha.new_mode('mode_3_1')
    mode_3_1.inv = lambda state: state[0] >= 3 and state[0] <= 4 and state[1] >= 1 and state[1] <= 2
    mode_3_1.inv_sympy = And(And(And(sym_x >= 3, sym_x <= 4), sym_y >= 1), sym_y <= 2)
    mode_3_1.der = lambda _, state: [state[2], state[3], -0.8 * (state[2] - -1) + -0.2 * (state[3] - -0.00000000000000018369701987210297), -0.1 * (state[2] - -1) + -0.8 * (state[3] - -0.00000000000000018369701987210297)]
    mode_3_1.der_interval_list = [[0, 0], [0, 0], [-0.1, 0.1], [-0.1, 0.1]]

    mode_4_1 = ha.new_mode('mode_4_1')
    mode_4_1.inv = lambda state: state[0] >= 4 and state[1] >= 1 and state[1] <= 2
    mode_4_1.inv_sympy = And(And(sym_x >= 4, sym_y >= 1), sym_y <= 2)
    mode_4_1.der = lambda _, state: [state[2], state[3], -0.8 * (state[2] - -1) + -0.2 * (state[3] - -0.00000000000000018369701987210297), -0.1 * (state[2] - -1) + -0.8 * (state[3] - -0.00000000000000018369701987210297)]
    mode_4_1.der_interval_list = [[0, 0], [0, 0], [-0.1, 0.1], [-0.1, 0.1]]

    mode_0_2 = ha.new_mode('mode_0_2')
    mode_0_2.inv = lambda state: state[0] <= 1 and state[1] >= 2 and state[1] <= 3
    mode_0_2.inv_sympy = And(And(sym_x <= 1, sym_y >= 2), sym_y <= 3)
    mode_0_2.der = lambda _, state: [state[2], state[3], -0.8 * (state[2] - 1) + -0.2 * (state[3] - 0.00000000000000006123233995736766), -0.1 * (state[2] - 1) + -0.8 * (state[3] - 0.00000000000000006123233995736766)]
    mode_0_2.der_interval_list = [[0, 0], [0, 0], [-0.1, 0.1], [-0.1, 0.1]]

    mode_1_2 = ha.new_mode('mode_1_2')
    mode_1_2.inv = lambda state: state[0] >= 1 and state[0] <= 2 and state[1] >= 2 and state[1] <= 3
    mode_1_2.inv_sympy = And(And(And(sym_x >= 1, sym_x <= 2), sym_y >= 2), sym_y <= 3)
    mode_1_2.der = lambda _, state: [state[2], state[3], -0.8 * (state[2] - 0.00000000000000012246467991473532) + -0.2 * (state[3] - -1), -0.1 * (state[2] - 0.00000000000000012246467991473532) + -0.8 * (state[3] - -1)]
    mode_1_2.der_interval_list = [[0, 0], [0, 0], [-0.1, 0.1], [-0.1, 0.1]]

    mode_2_2 = ha.new_mode('mode_2_2')
    mode_2_2.inv = lambda state: state[0] >= 2 and state[0] <= 3 and state[1] >= 2 and state[1] <= 3
    mode_2_2.inv_sympy = And(And(And(sym_x >= 2, sym_x <= 3), sym_y >= 2), sym_y <= 3)
    mode_2_2.der = lambda _, state: [0, 0, 0, 0]
    mode_2_2.der_interval_list = [[0, 0], [0, 0], [0, 0], [0, 0]]

    mode_3_2 = ha.new_mode('mode_3_2')
    mode_3_2.inv = lambda state: state[0] >= 3 and state[0] <= 4 and state[1] >= 2 and state[1] <= 3
    mode_3_2.inv_sympy = And(And(And(sym_x >= 3, sym_x <= 4), sym_y >= 2), sym_y <= 3)
    mode_3_2.der = lambda _, state: [state[2], state[3], -0.8 * (state[2] - 0.7071067811865476) + -0.2 * (state[3] - -0.7071067811865475), -0.1 * (state[2] - 0.7071067811865476) + -0.8 * (state[3] - -0.7071067811865475)]
    mode_3_2.der_interval_list = [[0, 0], [0, 0], [-0.1, 0.1], [-0.1, 0.1]]

    mode_4_2 = ha.new_mode('mode_4_2')
    mode_4_2.inv = lambda state: state[0] >= 4 and state[1] >= 2 and state[1] <= 3
    mode_4_2.inv_sympy = And(And(sym_x >= 4, sym_y >= 2), sym_y <= 3)
    mode_4_2.der = lambda _, state: [state[2], state[3], -0.8 * (state[2] - 0.00000000000000012246467991473532) + -0.2 * (state[3] - -1), -0.1 * (state[2] - 0.00000000000000012246467991473532) + -0.8 * (state[3] - -1)]
    mode_4_2.der_interval_list = [[0, 0], [0, 0], [-0.1, 0.1], [-0.1, 0.1]]

    mode_0_3 = ha.new_mode('mode_0_3')
    mode_0_3.inv = lambda state: state[0] <= 1 and state[1] >= 3 and state[1] <= 4
    mode_0_3.inv_sympy = And(And(sym_x <= 1, sym_y >= 3), sym_y <= 4)
    mode_0_3.der = lambda _, state: [state[2], state[3], -0.8 * (state[2] - 1) + -0.2 * (state[3] - 0.00000000000000006123233995736766), -0.1 * (state[2] - 1) + -0.8 * (state[3] - 0.00000000000000006123233995736766)]
    mode_0_3.der_interval_list = [[0, 0], [0, 0], [-0.1, 0.1], [-0.1, 0.1]]

    mode_1_3 = ha.new_mode('mode_1_3')
    mode_1_3.inv = lambda state: state[0] >= 1 and state[0] <= 2 and state[1] >= 3 and state[1] <= 4
    mode_1_3.inv_sympy = And(And(And(sym_x >= 1, sym_x <= 2), sym_y >= 3), sym_y <= 4)
    mode_1_3.der = lambda _, state: [state[2], state[3], -0.8 * (state[2] - 0.00000000000000012246467991473532) + -0.2 * (state[3] - -1), -0.1 * (state[2] - 0.00000000000000012246467991473532) + -0.8 * (state[3] - -1)]
    mode_1_3.der_interval_list = [[0, 0], [0, 0], [-0.1, 0.1], [-0.1, 0.1]]

    mode_2_3 = ha.new_mode('mode_2_3')
    mode_2_3.inv = lambda state: state[0] >= 2 and state[0] <= 3 and state[1] >= 3 and state[1] <= 4
    mode_2_3.inv_sympy = And(And(And(sym_x >= 2, sym_x <= 3), sym_y >= 3), sym_y <= 4)
    mode_2_3.der = lambda _, state: [state[2], state[3], -0.8 * (state[2] - -0.7071067811865477) + -0.2 * (state[3] - 0.7071067811865474), -0.1 * (state[2] - -0.7071067811865477) + -0.8 * (state[3] - 0.7071067811865474)]
    mode_2_3.der_interval_list = [[0, 0], [0, 0], [-0.1, 0.1], [-0.1, 0.1]]

    mode_3_3 = ha.new_mode('mode_3_3')
    mode_3_3.inv = lambda state: state[0] >= 3 and state[0] <= 4 and state[1] >= 3 and state[1] <= 4
    mode_3_3.inv_sympy = And(And(And(sym_x >= 3, sym_x <= 4), sym_y >= 3), sym_y <= 4)
    mode_3_3.der = lambda _, state: [state[2], state[3], -0.8 * (state[2] - -0.7071067811865477) + -0.2 * (state[3] - 0.7071067811865474), -0.1 * (state[2] - -0.7071067811865477) + -0.8 * (state[3] - 0.7071067811865474)]
    mode_3_3.der_interval_list = [[0, 0], [0, 0], [-0.1, 0.1], [-0.1, 0.1]]

    mode_4_3 = ha.new_mode('mode_4_3')
    mode_4_3.inv = lambda state: state[0] >= 4 and state[1] >= 3 and state[1] <= 4
    mode_4_3.inv_sympy = And(And(sym_x >= 4, sym_y >= 3), sym_y <= 4)
    mode_4_3.der = lambda _, state: [state[2], state[3], -0.8 * (state[2] - 0.00000000000000012246467991473532) + -0.2 * (state[3] - -1), -0.1 * (state[2] - 0.00000000000000012246467991473532) + -0.8 * (state[3] - -1)]
    mode_4_3.der_interval_list = [[0, 0], [0, 0], [-0.1, 0.1], [-0.1, 0.1]]

    mode_0_4 = ha.new_mode('mode_0_4')
    mode_0_4.inv = lambda state: state[0] <= 1 and state[1] >= 4
    mode_0_4.inv_sympy = And(sym_x <= 1, sym_y >= 4)
    mode_0_4.der = lambda _, state: [state[2], state[3], -0.8 * (state[2] - 1) + -0.2 * (state[3] - 0.00000000000000006123233995736766), -0.1 * (state[2] - 1) + -0.8 * (state[3] - 0.00000000000000006123233995736766)]
    mode_0_4.der_interval_list = [[0, 0], [0, 0], [-0.1, 0.1], [-0.1, 0.1]]

    mode_1_4 = ha.new_mode('mode_1_4')
    mode_1_4.inv = lambda state: state[0] >= 1 and state[0] <= 2 and state[1] >= 4
    mode_1_4.inv_sympy = And(And(sym_x >= 1, sym_x <= 2), sym_y >= 4)
    mode_1_4.der = lambda _, state: [state[2], state[3], -0.8 * (state[2] - 0.00000000000000012246467991473532) + -0.2 * (state[3] - -1), -0.1 * (state[2] - 0.00000000000000012246467991473532) + -0.8 * (state[3] - -1)]
    mode_1_4.der_interval_list = [[0, 0], [0, 0], [-0.1, 0.1], [-0.1, 0.1]]

    mode_2_4 = ha.new_mode('mode_2_4')
    mode_2_4.inv = lambda state: state[0] >= 2 and state[0] <= 3 and state[1] >= 4
    mode_2_4.inv_sympy = And(And(sym_x >= 2, sym_x <= 3), sym_y >= 4)
    mode_2_4.der = lambda _, state: [state[2], state[3], -0.8 * (state[2] - -1) + -0.2 * (state[3] - -0.00000000000000018369701987210297), -0.1 * (state[2] - -1) + -0.8 * (state[3] - -0.00000000000000018369701987210297)]
    mode_2_4.der_interval_list = [[0, 0], [0, 0], [-0.1, 0.1], [-0.1, 0.1]]

    mode_3_4 = ha.new_mode('mode_3_4')
    mode_3_4.inv = lambda state: state[0] >= 3 and state[0] <= 4 and state[1] >= 4
    mode_3_4.inv_sympy = And(And(sym_x >= 3, sym_x <= 4), sym_y >= 4)
    mode_3_4.der = lambda _, state: [state[2], state[3], -0.8 * (state[2] - -1) + -0.2 * (state[3] - -0.00000000000000018369701987210297), -0.1 * (state[2] - -1) + -0.8 * (state[3] - -0.00000000000000018369701987210297)]
    mode_3_4.der_interval_list = [[0, 0], [0, 0], [-0.1, 0.1], [-0.1, 0.1]]

    mode_4_4 = ha.new_mode('mode_4_4')
    mode_4_4.inv = lambda state: state[0] >= 4 and state[1] >= 4
    mode_4_4.inv_sympy = And(sym_x >= 4, sym_y >= 4)
    mode_4_4.der = lambda _, state: [state[2], state[3], -0.8 * (state[2] - -1) + -0.2 * (state[3] - -0.00000000000000018369701987210297), -0.1 * (state[2] - -1) + -0.8 * (state[3] - -0.00000000000000018369701987210297)]
    mode_4_4.der_interval_list = [[0, 0], [0, 0], [-0.1, 0.1], [-0.1, 0.1]]

    t = ha.new_transition(mode_0_0, mode_1_0)
    t.guard = lambda state: state[0] >= 1
    t.reset = lambda state: [None, None, None, None]
    t.guard_sympy = sym_x >= 1

    t = ha.new_transition(mode_0_0, mode_0_1)
    t.guard = lambda state: state[1] >= 1
    t.reset = lambda state: [None, None, None, None]
    t.guard_sympy = sym_y >= 1

    t = ha.new_transition(mode_1_0, mode_0_0)
    t.guard = lambda state: state[0] <= 1
    t.reset = lambda state: [None, None, None, None]
    t.guard_sympy = sym_x <= 1

    t = ha.new_transition(mode_1_0, mode_2_0)
    t.guard = lambda state: state[0] >= 2
    t.reset = lambda state: [None, None, None, None]
    t.guard_sympy = sym_x >= 2

    t = ha.new_transition(mode_1_0, mode_1_1)
    t.guard = lambda state: state[1] >= 1
    t.reset = lambda state: [None, None, None, None]
    t.guard_sympy = sym_y >= 1

    t = ha.new_transition(mode_2_0, mode_1_0)
    t.guard = lambda state: state[0] <= 2
    t.reset = lambda state: [None, None, None, None]
    t.guard_sympy = sym_x <= 2

    t = ha.new_transition(mode_2_0, mode_3_0)
    t.guard = lambda state: state[0] >= 3
    t.reset = lambda state: [None, None, None, None]
    t.guard_sympy = sym_x >= 3

    t = ha.new_transition(mode_2_0, mode_2_1)
    t.guard = lambda state: state[1] >= 1
    t.reset = lambda state: [None, None, None, None]
    t.guard_sympy = sym_y >= 1

    t = ha.new_transition(mode_3_0, mode_2_0)
    t.guard = lambda state: state[0] <= 3
    t.reset = lambda state: [None, None, None, None]
    t.guard_sympy = sym_x <= 3

    t = ha.new_transition(mode_3_0, mode_4_0)
    t.guard = lambda state: state[0] >= 4
    t.reset = lambda state: [None, None, None, None]
    t.guard_sympy = sym_x >= 4

    t = ha.new_transition(mode_3_0, mode_3_1)
    t.guard = lambda state: state[1] >= 1
    t.reset = lambda state: [None, None, None, None]
    t.guard_sympy = sym_y >= 1

    t = ha.new_transition(mode_4_0, mode_3_0)
    t.guard = lambda state: state[0] <= 4
    t.reset = lambda state: [None, None, None, None]
    t.guard_sympy = sym_x <= 4

    t = ha.new_transition(mode_4_0, mode_4_1)
    t.guard = lambda state: state[1] >= 1
    t.reset = lambda state: [None, None, None, None]
    t.guard_sympy = sym_y >= 1

    t = ha.new_transition(mode_0_1, mode_1_1)
    t.guard = lambda state: state[0] >= 1
    t.reset = lambda state: [None, None, None, None]
    t.guard_sympy = sym_x >= 1

    t = ha.new_transition(mode_0_1, mode_0_0)
    t.guard = lambda state: state[1] <= 1
    t.reset = lambda state: [None, None, None, None]
    t.guard_sympy = sym_y <= 1

    t = ha.new_transition(mode_0_1, mode_0_2)
    t.guard = lambda state: state[1] >= 2
    t.reset = lambda state: [None, None, None, None]
    t.guard_sympy = sym_y >= 2

    t = ha.new_transition(mode_1_1, mode_0_1)
    t.guard = lambda state: state[0] <= 1
    t.reset = lambda state: [None, None, None, None]
    t.guard_sympy = sym_x <= 1

    t = ha.new_transition(mode_1_1, mode_2_1)
    t.guard = lambda state: state[0] >= 2
    t.reset = lambda state: [None, None, None, None]
    t.guard_sympy = sym_x >= 2

    t = ha.new_transition(mode_1_1, mode_1_0)
    t.guard = lambda state: state[1] <= 1
    t.reset = lambda state: [None, None, None, None]
    t.guard_sympy = sym_y <= 1

    t = ha.new_transition(mode_1_1, mode_1_2)
    t.guard = lambda state: state[1] >= 2
    t.reset = lambda state: [None, None, None, None]
    t.guard_sympy = sym_y >= 2

    t = ha.new_transition(mode_2_1, mode_1_1)
    t.guard = lambda state: state[0] <= 2
    t.reset = lambda state: [None, None, None, None]
    t.guard_sympy = sym_x <= 2

    t = ha.new_transition(mode_2_1, mode_3_1)
    t.guard = lambda state: state[0] >= 3
    t.reset = lambda state: [None, None, None, None]
    t.guard_sympy = sym_x >= 3

    t = ha.new_transition(mode_2_1, mode_2_0)
    t.guard = lambda state: state[1] <= 1
    t.reset = lambda state: [None, None, None, None]
    t.guard_sympy = sym_y <= 1

    t = ha.new_transition(mode_2_1, mode_2_2)
    t.guard = lambda state: state[1] >= 2
    t.reset = lambda state: [None, None, None, None]
    t.guard_sympy = sym_y >= 2

    t = ha.new_transition(mode_3_1, mode_2_1)
    t.guard = lambda state: state[0] <= 3
    t.reset = lambda state: [None, None, None, None]
    t.guard_sympy = sym_x <= 3

    t = ha.new_transition(mode_3_1, mode_4_1)
    t.guard = lambda state: state[0] >= 4
    t.reset = lambda state: [None, None, None, None]
    t.guard_sympy = sym_x >= 4

    t = ha.new_transition(mode_3_1, mode_3_0)
    t.guard = lambda state: state[1] <= 1
    t.reset = lambda state: [None, None, None, None]
    t.guard_sympy = sym_y <= 1

    t = ha.new_transition(mode_3_1, mode_3_2)
    t.guard = lambda state: state[1] >= 2
    t.reset = lambda state: [None, None, None, None]
    t.guard_sympy = sym_y >= 2

    t = ha.new_transition(mode_4_1, mode_3_1)
    t.guard = lambda state: state[0] <= 4
    t.reset = lambda state: [None, None, None, None]
    t.guard_sympy = sym_x <= 4

    t = ha.new_transition(mode_4_1, mode_4_0)
    t.guard = lambda state: state[1] <= 1
    t.reset = lambda state: [None, None, None, None]
    t.guard_sympy = sym_y <= 1

    t = ha.new_transition(mode_4_1, mode_4_2)
    t.guard = lambda state: state[1] >= 2
    t.reset = lambda state: [None, None, None, None]
    t.guard_sympy = sym_y >= 2

    t = ha.new_transition(mode_0_2, mode_1_2)
    t.guard = lambda state: state[0] >= 1
    t.reset = lambda state: [None, None, None, None]
    t.guard_sympy = sym_x >= 1

    t = ha.new_transition(mode_0_2, mode_0_1)
    t.guard = lambda state: state[1] <= 2
    t.reset = lambda state: [None, None, None, None]
    t.guard_sympy = sym_y <= 2

    t = ha.new_transition(mode_0_2, mode_0_3)
    t.guard = lambda state: state[1] >= 3
    t.reset = lambda state: [None, None, None, None]
    t.guard_sympy = sym_y >= 3

    t = ha.new_transition(mode_1_2, mode_0_2)
    t.guard = lambda state: state[0] <= 1
    t.reset = lambda state: [None, None, None, None]
    t.guard_sympy = sym_x <= 1

    t = ha.new_transition(mode_1_2, mode_2_2)
    t.guard = lambda state: state[0] >= 2
    t.reset = lambda state: [None, None, None, None]
    t.guard_sympy = sym_x >= 2

    t = ha.new_transition(mode_1_2, mode_1_1)
    t.guard = lambda state: state[1] <= 2
    t.reset = lambda state: [None, None, None, None]
    t.guard_sympy = sym_y <= 2

    t = ha.new_transition(mode_1_2, mode_1_3)
    t.guard = lambda state: state[1] >= 3
    t.reset = lambda state: [None, None, None, None]
    t.guard_sympy = sym_y >= 3

    t = ha.new_transition(mode_2_2, mode_1_2)
    t.guard = lambda state: state[0] <= 2
    t.reset = lambda state: [None, None, None, None]
    t.guard_sympy = sym_x <= 2

    t = ha.new_transition(mode_2_2, mode_3_2)
    t.guard = lambda state: state[0] >= 3
    t.reset = lambda state: [None, None, None, None]
    t.guard_sympy = sym_x >= 3

    t = ha.new_transition(mode_2_2, mode_2_1)
    t.guard = lambda state: state[1] <= 2
    t.reset = lambda state: [None, None, None, None]
    t.guard_sympy = sym_y <= 2

    t = ha.new_transition(mode_2_2, mode_2_3)
    t.guard = lambda state: state[1] >= 3
    t.reset = lambda state: [None, None, None, None]
    t.guard_sympy = sym_y >= 3

    t = ha.new_transition(mode_3_2, mode_2_2)
    t.guard = lambda state: state[0] <= 3
    t.reset = lambda state: [None, None, None, None]
    t.guard_sympy = sym_x <= 3

    t = ha.new_transition(mode_3_2, mode_4_2)
    t.guard = lambda state: state[0] >= 4
    t.reset = lambda state: [None, None, None, None]
    t.guard_sympy = sym_x >= 4

    t = ha.new_transition(mode_3_2, mode_3_1)
    t.guard = lambda state: state[1] <= 2
    t.reset = lambda state: [None, None, None, None]
    t.guard_sympy = sym_y <= 2

    t = ha.new_transition(mode_3_2, mode_3_3)
    t.guard = lambda state: state[1] >= 3
    t.reset = lambda state: [None, None, None, None]
    t.guard_sympy = sym_y >= 3

    t = ha.new_transition(mode_4_2, mode_3_2)
    t.guard = lambda state: state[0] <= 4
    t.reset = lambda state: [None, None, None, None]
    t.guard_sympy = sym_x <= 4

    t = ha.new_transition(mode_4_2, mode_4_1)
    t.guard = lambda state: state[1] <= 2
    t.reset = lambda state: [None, None, None, None]
    t.guard_sympy = sym_y <= 2

    t = ha.new_transition(mode_4_2, mode_4_3)
    t.guard = lambda state: state[1] >= 3
    t.reset = lambda state: [None, None, None, None]
    t.guard_sympy = sym_y >= 3

    t = ha.new_transition(mode_0_3, mode_1_3)
    t.guard = lambda state: state[0] >= 1
    t.reset = lambda state: [None, None, None, None]
    t.guard_sympy = sym_x >= 1

    t = ha.new_transition(mode_0_3, mode_0_2)
    t.guard = lambda state: state[1] <= 3
    t.reset = lambda state: [None, None, None, None]
    t.guard_sympy = sym_y <= 3

    t = ha.new_transition(mode_0_3, mode_0_4)
    t.guard = lambda state: state[1] >= 4
    t.reset = lambda state: [None, None, None, None]
    t.guard_sympy = sym_y >= 4

    t = ha.new_transition(mode_1_3, mode_0_3)
    t.guard = lambda state: state[0] <= 1
    t.reset = lambda state: [None, None, None, None]
    t.guard_sympy = sym_x <= 1

    t = ha.new_transition(mode_1_3, mode_2_3)
    t.guard = lambda state: state[0] >= 2
    t.reset = lambda state: [None, None, None, None]
    t.guard_sympy = sym_x >= 2

    t = ha.new_transition(mode_1_3, mode_1_2)
    t.guard = lambda state: state[1] <= 3
    t.reset = lambda state: [None, None, None, None]
    t.guard_sympy = sym_y <= 3

    t = ha.new_transition(mode_1_3, mode_1_4)
    t.guard = lambda state: state[1] >= 4
    t.reset = lambda state: [None, None, None, None]
    t.guard_sympy = sym_y >= 4

    t = ha.new_transition(mode_2_3, mode_1_3)
    t.guard = lambda state: state[0] <= 2
    t.reset = lambda state: [None, None, None, None]
    t.guard_sympy = sym_x <= 2

    t = ha.new_transition(mode_2_3, mode_3_3)
    t.guard = lambda state: state[0] >= 3
    t.reset = lambda state: [None, None, None, None]
    t.guard_sympy = sym_x >= 3

    t = ha.new_transition(mode_2_3, mode_2_2)
    t.guard = lambda state: state[1] <= 3
    t.reset = lambda state: [None, None, None, None]
    t.guard_sympy = sym_y <= 3

    t = ha.new_transition(mode_2_3, mode_2_4)
    t.guard = lambda state: state[1] >= 4
    t.reset = lambda state: [None, None, None, None]
    t.guard_sympy = sym_y >= 4

    t = ha.new_transition(mode_3_3, mode_2_3)
    t.guard = lambda state: state[0] <= 3
    t.reset = lambda state: [None, None, None, None]
    t.guard_sympy = sym_x <= 3

    t = ha.new_transition(mode_3_3, mode_4_3)
    t.guard = lambda state: state[0] >= 4
    t.reset = lambda state: [None, None, None, None]
    t.guard_sympy = sym_x >= 4

    t = ha.new_transition(mode_3_3, mode_3_2)
    t.guard = lambda state: state[1] <= 3
    t.reset = lambda state: [None, None, None, None]
    t.guard_sympy = sym_y <= 3

    t = ha.new_transition(mode_3_3, mode_3_4)
    t.guard = lambda state: state[1] >= 4
    t.reset = lambda state: [None, None, None, None]
    t.guard_sympy = sym_y >= 4

    t = ha.new_transition(mode_4_3, mode_3_3)
    t.guard = lambda state: state[0] <= 4
    t.reset = lambda state: [None, None, None, None]
    t.guard_sympy = sym_x <= 4

    t = ha.new_transition(mode_4_3, mode_4_2)
    t.guard = lambda state: state[1] <= 3
    t.reset = lambda state: [None, None, None, None]
    t.guard_sympy = sym_y <= 3

    t = ha.new_transition(mode_4_3, mode_4_4)
    t.guard = lambda state: state[1] >= 4
    t.reset = lambda state: [None, None, None, None]
    t.guard_sympy = sym_y >= 4

    t = ha.new_transition(mode_0_4, mode_1_4)
    t.guard = lambda state: state[0] >= 1
    t.reset = lambda state: [None, None, None, None]
    t.guard_sympy = sym_x >= 1

    t = ha.new_transition(mode_0_4, mode_0_3)
    t.guard = lambda state: state[1] <= 4
    t.reset = lambda state: [None, None, None, None]
    t.guard_sympy = sym_y <= 4

    t = ha.new_transition(mode_1_4, mode_0_4)
    t.guard = lambda state: state[0] <= 1
    t.reset = lambda state: [None, None, None, None]
    t.guard_sympy = sym_x <= 1

    t = ha.new_transition(mode_1_4, mode_2_4)
    t.guard = lambda state: state[0] >= 2
    t.reset = lambda state: [None, None, None, None]
    t.guard_sympy = sym_x >= 2

    t = ha.new_transition(mode_1_4, mode_1_3)
    t.guard = lambda state: state[1] <= 4
    t.reset = lambda state: [None, None, None, None]
    t.guard_sympy = sym_y <= 4

    t = ha.new_transition(mode_2_4, mode_1_4)
    t.guard = lambda state: state[0] <= 2
    t.reset = lambda state: [None, None, None, None]
    t.guard_sympy = sym_x <= 2

    t = ha.new_transition(mode_2_4, mode_3_4)
    t.guard = lambda state: state[0] >= 3
    t.reset = lambda state: [None, None, None, None]
    t.guard_sympy = sym_x >= 3

    t = ha.new_transition(mode_2_4, mode_2_3)
    t.guard = lambda state: state[1] <= 4
    t.reset = lambda state: [None, None, None, None]
    t.guard_sympy = sym_y <= 4

    t = ha.new_transition(mode_3_4, mode_2_4)
    t.guard = lambda state: state[0] <= 3
    t.reset = lambda state: [None, None, None, None]
    t.guard_sympy = sym_x <= 3

    t = ha.new_transition(mode_3_4, mode_4_4)
    t.guard = lambda state: state[0] >= 4
    t.reset = lambda state: [None, None, None, None]
    t.guard_sympy = sym_x >= 4

    t = ha.new_transition(mode_3_4, mode_3_3)
    t.guard = lambda state: state[1] <= 4
    t.reset = lambda state: [None, None, None, None]
    t.guard_sympy = sym_y <= 4

    t = ha.new_transition(mode_4_4, mode_3_4)
    t.guard = lambda state: state[0] <= 4
    t.reset = lambda state: [None, None, None, None]
    t.guard_sympy = sym_x <= 4

    t = ha.new_transition(mode_4_4, mode_4_3)
    t.guard = lambda state: state[1] <= 4
    t.reset = lambda state: [None, None, None, None]
    t.guard_sympy = sym_y <= 4

    return ha
Example #8
0
def define_ha():
    """make the hybrid automaton and return it"""
    # Variable ordering: [x, y, xvel, yvel]

    sym_x, sym_y, sym_xvel, sym_yvel = symbols("x y xvel yvel ")

    ha = HybridAutomaton()

    mode_0_0 = ha.new_mode("mode_0_0")
    mode_0_0.inv = lambda state: state[0] <= 1 and state[1] <= 1
    mode_0_0.inv_sympy = And(sym_x <= 1, sym_y <= 1)
    mode_0_0.der = lambda _, state: [
        state[2],
        state[3],
        -0.8 * (state[2] - 1) + -0.2 * (state[3] - 0.00000000000000006123233995736766),
        -0.1 * (state[2] - 1) + -0.8 * (state[3] - 0.00000000000000006123233995736766),
    ]
    mode_0_0.der_interval_list = [[0, 0], [0, 0], [-0.1, 0.1], [-0.1, 0.1]]

    mode_1_0 = ha.new_mode("mode_1_0")
    mode_1_0.inv = lambda state: state[0] >= 1 and state[0] <= 2 and state[1] <= 1
    mode_1_0.inv_sympy = And(And(sym_x >= 1, sym_x <= 2), sym_y <= 1)
    mode_1_0.der = lambda _, state: [0, 0, 0, 0]
    mode_1_0.der_interval_list = [[0, 0], [0, 0], [0, 0], [0, 0]]

    mode_2_0 = ha.new_mode("mode_2_0")
    mode_2_0.inv = lambda state: state[0] >= 2 and state[0] <= 3 and state[1] <= 1
    mode_2_0.inv_sympy = And(And(sym_x >= 2, sym_x <= 3), sym_y <= 1)
    mode_2_0.der = lambda _, state: [
        state[2],
        state[3],
        -0.8 * (state[2] - 0) + -0.2 * (state[3] - 1),
        -0.1 * (state[2] - 0) + -0.8 * (state[3] - 1),
    ]
    mode_2_0.der_interval_list = [[0, 0], [0, 0], [-0.1, 0.1], [-0.1, 0.1]]

    mode_3_0 = ha.new_mode("mode_3_0")
    mode_3_0.inv = lambda state: state[0] >= 3 and state[0] <= 4 and state[1] <= 1
    mode_3_0.inv_sympy = And(And(sym_x >= 3, sym_x <= 4), sym_y <= 1)
    mode_3_0.der = lambda _, state: [
        state[2],
        state[3],
        -0.8 * (state[2] - 0) + -0.2 * (state[3] - 1),
        -0.1 * (state[2] - 0) + -0.8 * (state[3] - 1),
    ]
    mode_3_0.der_interval_list = [[0, 0], [0, 0], [-0.1, 0.1], [-0.1, 0.1]]

    mode_4_0 = ha.new_mode("mode_4_0")
    mode_4_0.inv = lambda state: state[0] >= 4 and state[1] <= 1
    mode_4_0.inv_sympy = And(sym_x >= 4, sym_y <= 1)
    mode_4_0.der = lambda _, state: [
        state[2],
        state[3],
        -0.8 * (state[2] - 0) + -0.2 * (state[3] - 1),
        -0.1 * (state[2] - 0) + -0.8 * (state[3] - 1),
    ]
    mode_4_0.der_interval_list = [[0, 0], [0, 0], [-0.1, 0.1], [-0.1, 0.1]]

    mode_0_1 = ha.new_mode("mode_0_1")
    mode_0_1.inv = lambda state: state[0] <= 1 and state[1] >= 1 and state[1] <= 2
    mode_0_1.inv_sympy = And(And(sym_x <= 1, sym_y >= 1), sym_y <= 2)
    mode_0_1.der = lambda _, state: [
        state[2],
        state[3],
        -0.8 * (state[2] - 1) + -0.2 * (state[3] - 0.00000000000000006123233995736766),
        -0.1 * (state[2] - 1) + -0.8 * (state[3] - 0.00000000000000006123233995736766),
    ]
    mode_0_1.der_interval_list = [[0, 0], [0, 0], [-0.1, 0.1], [-0.1, 0.1]]

    mode_1_1 = ha.new_mode("mode_1_1")
    mode_1_1.inv = lambda state: state[0] >= 1 and state[0] <= 2 and state[1] >= 1 and state[1] <= 2
    mode_1_1.inv_sympy = And(And(And(sym_x >= 1, sym_x <= 2), sym_y >= 1), sym_y <= 2)
    mode_1_1.der = lambda _, state: [
        state[2],
        state[3],
        -0.8 * (state[2] - 0.00000000000000012246467991473532) + -0.2 * (state[3] - -1),
        -0.1 * (state[2] - 0.00000000000000012246467991473532) + -0.8 * (state[3] - -1),
    ]
    mode_1_1.der_interval_list = [[0, 0], [0, 0], [-0.1, 0.1], [-0.1, 0.1]]

    mode_2_1 = ha.new_mode("mode_2_1")
    mode_2_1.inv = lambda state: state[0] >= 2 and state[0] <= 3 and state[1] >= 1 and state[1] <= 2
    mode_2_1.inv_sympy = And(And(And(sym_x >= 2, sym_x <= 3), sym_y >= 1), sym_y <= 2)
    mode_2_1.der = lambda _, state: [
        state[2],
        state[3],
        -0.8 * (state[2] - -1) + -0.2 * (state[3] - -0.00000000000000018369701987210297),
        -0.1 * (state[2] - -1) + -0.8 * (state[3] - -0.00000000000000018369701987210297),
    ]
    mode_2_1.der_interval_list = [[0, 0], [0, 0], [-0.1, 0.1], [-0.1, 0.1]]

    mode_3_1 = ha.new_mode("mode_3_1")
    mode_3_1.inv = lambda state: state[0] >= 3 and state[0] <= 4 and state[1] >= 1 and state[1] <= 2
    mode_3_1.inv_sympy = And(And(And(sym_x >= 3, sym_x <= 4), sym_y >= 1), sym_y <= 2)
    mode_3_1.der = lambda _, state: [
        state[2],
        state[3],
        -0.8 * (state[2] - -1) + -0.2 * (state[3] - -0.00000000000000018369701987210297),
        -0.1 * (state[2] - -1) + -0.8 * (state[3] - -0.00000000000000018369701987210297),
    ]
    mode_3_1.der_interval_list = [[0, 0], [0, 0], [-0.1, 0.1], [-0.1, 0.1]]

    mode_4_1 = ha.new_mode("mode_4_1")
    mode_4_1.inv = lambda state: state[0] >= 4 and state[1] >= 1 and state[1] <= 2
    mode_4_1.inv_sympy = And(And(sym_x >= 4, sym_y >= 1), sym_y <= 2)
    mode_4_1.der = lambda _, state: [
        state[2],
        state[3],
        -0.8 * (state[2] - -1) + -0.2 * (state[3] - -0.00000000000000018369701987210297),
        -0.1 * (state[2] - -1) + -0.8 * (state[3] - -0.00000000000000018369701987210297),
    ]
    mode_4_1.der_interval_list = [[0, 0], [0, 0], [-0.1, 0.1], [-0.1, 0.1]]

    mode_0_2 = ha.new_mode("mode_0_2")
    mode_0_2.inv = lambda state: state[0] <= 1 and state[1] >= 2 and state[1] <= 3
    mode_0_2.inv_sympy = And(And(sym_x <= 1, sym_y >= 2), sym_y <= 3)
    mode_0_2.der = lambda _, state: [
        state[2],
        state[3],
        -0.8 * (state[2] - 1) + -0.2 * (state[3] - 0.00000000000000006123233995736766),
        -0.1 * (state[2] - 1) + -0.8 * (state[3] - 0.00000000000000006123233995736766),
    ]
    mode_0_2.der_interval_list = [[0, 0], [0, 0], [-0.1, 0.1], [-0.1, 0.1]]

    mode_1_2 = ha.new_mode("mode_1_2")
    mode_1_2.inv = lambda state: state[0] >= 1 and state[0] <= 2 and state[1] >= 2 and state[1] <= 3
    mode_1_2.inv_sympy = And(And(And(sym_x >= 1, sym_x <= 2), sym_y >= 2), sym_y <= 3)
    mode_1_2.der = lambda _, state: [
        state[2],
        state[3],
        -0.8 * (state[2] - 0.00000000000000012246467991473532) + -0.2 * (state[3] - -1),
        -0.1 * (state[2] - 0.00000000000000012246467991473532) + -0.8 * (state[3] - -1),
    ]
    mode_1_2.der_interval_list = [[0, 0], [0, 0], [-0.1, 0.1], [-0.1, 0.1]]

    mode_2_2 = ha.new_mode("mode_2_2")
    mode_2_2.inv = lambda state: state[0] >= 2 and state[0] <= 3 and state[1] >= 2 and state[1] <= 3
    mode_2_2.inv_sympy = And(And(And(sym_x >= 2, sym_x <= 3), sym_y >= 2), sym_y <= 3)
    mode_2_2.der = lambda _, state: [0, 0, 0, 0]
    mode_2_2.der_interval_list = [[0, 0], [0, 0], [0, 0], [0, 0]]

    mode_3_2 = ha.new_mode("mode_3_2")
    mode_3_2.inv = lambda state: state[0] >= 3 and state[0] <= 4 and state[1] >= 2 and state[1] <= 3
    mode_3_2.inv_sympy = And(And(And(sym_x >= 3, sym_x <= 4), sym_y >= 2), sym_y <= 3)
    mode_3_2.der = lambda _, state: [
        state[2],
        state[3],
        -0.8 * (state[2] - 0.7071067811865476) + -0.2 * (state[3] - -0.7071067811865475),
        -0.1 * (state[2] - 0.7071067811865476) + -0.8 * (state[3] - -0.7071067811865475),
    ]
    mode_3_2.der_interval_list = [[0, 0], [0, 0], [-0.1, 0.1], [-0.1, 0.1]]

    mode_4_2 = ha.new_mode("mode_4_2")
    mode_4_2.inv = lambda state: state[0] >= 4 and state[1] >= 2 and state[1] <= 3
    mode_4_2.inv_sympy = And(And(sym_x >= 4, sym_y >= 2), sym_y <= 3)
    mode_4_2.der = lambda _, state: [
        state[2],
        state[3],
        -0.8 * (state[2] - 0.00000000000000012246467991473532) + -0.2 * (state[3] - -1),
        -0.1 * (state[2] - 0.00000000000000012246467991473532) + -0.8 * (state[3] - -1),
    ]
    mode_4_2.der_interval_list = [[0, 0], [0, 0], [-0.1, 0.1], [-0.1, 0.1]]

    mode_0_3 = ha.new_mode("mode_0_3")
    mode_0_3.inv = lambda state: state[0] <= 1 and state[1] >= 3 and state[1] <= 4
    mode_0_3.inv_sympy = And(And(sym_x <= 1, sym_y >= 3), sym_y <= 4)
    mode_0_3.der = lambda _, state: [
        state[2],
        state[3],
        -0.8 * (state[2] - 1) + -0.2 * (state[3] - 0.00000000000000006123233995736766),
        -0.1 * (state[2] - 1) + -0.8 * (state[3] - 0.00000000000000006123233995736766),
    ]
    mode_0_3.der_interval_list = [[0, 0], [0, 0], [-0.1, 0.1], [-0.1, 0.1]]

    mode_1_3 = ha.new_mode("mode_1_3")
    mode_1_3.inv = lambda state: state[0] >= 1 and state[0] <= 2 and state[1] >= 3 and state[1] <= 4
    mode_1_3.inv_sympy = And(And(And(sym_x >= 1, sym_x <= 2), sym_y >= 3), sym_y <= 4)
    mode_1_3.der = lambda _, state: [
        state[2],
        state[3],
        -0.8 * (state[2] - 0.00000000000000012246467991473532) + -0.2 * (state[3] - -1),
        -0.1 * (state[2] - 0.00000000000000012246467991473532) + -0.8 * (state[3] - -1),
    ]
    mode_1_3.der_interval_list = [[0, 0], [0, 0], [-0.1, 0.1], [-0.1, 0.1]]

    mode_2_3 = ha.new_mode("mode_2_3")
    mode_2_3.inv = lambda state: state[0] >= 2 and state[0] <= 3 and state[1] >= 3 and state[1] <= 4
    mode_2_3.inv_sympy = And(And(And(sym_x >= 2, sym_x <= 3), sym_y >= 3), sym_y <= 4)
    mode_2_3.der = lambda _, state: [
        state[2],
        state[3],
        -0.8 * (state[2] - -0.7071067811865477) + -0.2 * (state[3] - 0.7071067811865474),
        -0.1 * (state[2] - -0.7071067811865477) + -0.8 * (state[3] - 0.7071067811865474),
    ]
    mode_2_3.der_interval_list = [[0, 0], [0, 0], [-0.1, 0.1], [-0.1, 0.1]]

    mode_3_3 = ha.new_mode("mode_3_3")
    mode_3_3.inv = lambda state: state[0] >= 3 and state[0] <= 4 and state[1] >= 3 and state[1] <= 4
    mode_3_3.inv_sympy = And(And(And(sym_x >= 3, sym_x <= 4), sym_y >= 3), sym_y <= 4)
    mode_3_3.der = lambda _, state: [
        state[2],
        state[3],
        -0.8 * (state[2] - -0.7071067811865477) + -0.2 * (state[3] - 0.7071067811865474),
        -0.1 * (state[2] - -0.7071067811865477) + -0.8 * (state[3] - 0.7071067811865474),
    ]
    mode_3_3.der_interval_list = [[0, 0], [0, 0], [-0.1, 0.1], [-0.1, 0.1]]

    mode_4_3 = ha.new_mode("mode_4_3")
    mode_4_3.inv = lambda state: state[0] >= 4 and state[1] >= 3 and state[1] <= 4
    mode_4_3.inv_sympy = And(And(sym_x >= 4, sym_y >= 3), sym_y <= 4)
    mode_4_3.der = lambda _, state: [
        state[2],
        state[3],
        -0.8 * (state[2] - 0.00000000000000012246467991473532) + -0.2 * (state[3] - -1),
        -0.1 * (state[2] - 0.00000000000000012246467991473532) + -0.8 * (state[3] - -1),
    ]
    mode_4_3.der_interval_list = [[0, 0], [0, 0], [-0.1, 0.1], [-0.1, 0.1]]

    mode_0_4 = ha.new_mode("mode_0_4")
    mode_0_4.inv = lambda state: state[0] <= 1 and state[1] >= 4
    mode_0_4.inv_sympy = And(sym_x <= 1, sym_y >= 4)
    mode_0_4.der = lambda _, state: [
        state[2],
        state[3],
        -0.8 * (state[2] - 1) + -0.2 * (state[3] - 0.00000000000000006123233995736766),
        -0.1 * (state[2] - 1) + -0.8 * (state[3] - 0.00000000000000006123233995736766),
    ]
    mode_0_4.der_interval_list = [[0, 0], [0, 0], [-0.1, 0.1], [-0.1, 0.1]]

    mode_1_4 = ha.new_mode("mode_1_4")
    mode_1_4.inv = lambda state: state[0] >= 1 and state[0] <= 2 and state[1] >= 4
    mode_1_4.inv_sympy = And(And(sym_x >= 1, sym_x <= 2), sym_y >= 4)
    mode_1_4.der = lambda _, state: [
        state[2],
        state[3],
        -0.8 * (state[2] - 0.00000000000000012246467991473532) + -0.2 * (state[3] - -1),
        -0.1 * (state[2] - 0.00000000000000012246467991473532) + -0.8 * (state[3] - -1),
    ]
    mode_1_4.der_interval_list = [[0, 0], [0, 0], [-0.1, 0.1], [-0.1, 0.1]]

    mode_2_4 = ha.new_mode("mode_2_4")
    mode_2_4.inv = lambda state: state[0] >= 2 and state[0] <= 3 and state[1] >= 4
    mode_2_4.inv_sympy = And(And(sym_x >= 2, sym_x <= 3), sym_y >= 4)
    mode_2_4.der = lambda _, state: [
        state[2],
        state[3],
        -0.8 * (state[2] - -1) + -0.2 * (state[3] - -0.00000000000000018369701987210297),
        -0.1 * (state[2] - -1) + -0.8 * (state[3] - -0.00000000000000018369701987210297),
    ]
    mode_2_4.der_interval_list = [[0, 0], [0, 0], [-0.1, 0.1], [-0.1, 0.1]]

    mode_3_4 = ha.new_mode("mode_3_4")
    mode_3_4.inv = lambda state: state[0] >= 3 and state[0] <= 4 and state[1] >= 4
    mode_3_4.inv_sympy = And(And(sym_x >= 3, sym_x <= 4), sym_y >= 4)
    mode_3_4.der = lambda _, state: [
        state[2],
        state[3],
        -0.8 * (state[2] - -1) + -0.2 * (state[3] - -0.00000000000000018369701987210297),
        -0.1 * (state[2] - -1) + -0.8 * (state[3] - -0.00000000000000018369701987210297),
    ]
    mode_3_4.der_interval_list = [[0, 0], [0, 0], [-0.1, 0.1], [-0.1, 0.1]]

    mode_4_4 = ha.new_mode("mode_4_4")
    mode_4_4.inv = lambda state: state[0] >= 4 and state[1] >= 4
    mode_4_4.inv_sympy = And(sym_x >= 4, sym_y >= 4)
    mode_4_4.der = lambda _, state: [
        state[2],
        state[3],
        -0.8 * (state[2] - -1) + -0.2 * (state[3] - -0.00000000000000018369701987210297),
        -0.1 * (state[2] - -1) + -0.8 * (state[3] - -0.00000000000000018369701987210297),
    ]
    mode_4_4.der_interval_list = [[0, 0], [0, 0], [-0.1, 0.1], [-0.1, 0.1]]

    t = ha.new_transition(mode_0_0, mode_1_0)
    t.guard = lambda state: state[0] >= 1
    t.reset = lambda state: [None, None, None, None]
    t.guard_sympy = sym_x >= 1

    t = ha.new_transition(mode_0_0, mode_0_1)
    t.guard = lambda state: state[1] >= 1
    t.reset = lambda state: [None, None, None, None]
    t.guard_sympy = sym_y >= 1

    t = ha.new_transition(mode_1_0, mode_0_0)
    t.guard = lambda state: state[0] <= 1
    t.reset = lambda state: [None, None, None, None]
    t.guard_sympy = sym_x <= 1

    t = ha.new_transition(mode_1_0, mode_2_0)
    t.guard = lambda state: state[0] >= 2
    t.reset = lambda state: [None, None, None, None]
    t.guard_sympy = sym_x >= 2

    t = ha.new_transition(mode_1_0, mode_1_1)
    t.guard = lambda state: state[1] >= 1
    t.reset = lambda state: [None, None, None, None]
    t.guard_sympy = sym_y >= 1

    t = ha.new_transition(mode_2_0, mode_1_0)
    t.guard = lambda state: state[0] <= 2
    t.reset = lambda state: [None, None, None, None]
    t.guard_sympy = sym_x <= 2

    t = ha.new_transition(mode_2_0, mode_3_0)
    t.guard = lambda state: state[0] >= 3
    t.reset = lambda state: [None, None, None, None]
    t.guard_sympy = sym_x >= 3

    t = ha.new_transition(mode_2_0, mode_2_1)
    t.guard = lambda state: state[1] >= 1
    t.reset = lambda state: [None, None, None, None]
    t.guard_sympy = sym_y >= 1

    t = ha.new_transition(mode_3_0, mode_2_0)
    t.guard = lambda state: state[0] <= 3
    t.reset = lambda state: [None, None, None, None]
    t.guard_sympy = sym_x <= 3

    t = ha.new_transition(mode_3_0, mode_4_0)
    t.guard = lambda state: state[0] >= 4
    t.reset = lambda state: [None, None, None, None]
    t.guard_sympy = sym_x >= 4

    t = ha.new_transition(mode_3_0, mode_3_1)
    t.guard = lambda state: state[1] >= 1
    t.reset = lambda state: [None, None, None, None]
    t.guard_sympy = sym_y >= 1

    t = ha.new_transition(mode_4_0, mode_3_0)
    t.guard = lambda state: state[0] <= 4
    t.reset = lambda state: [None, None, None, None]
    t.guard_sympy = sym_x <= 4

    t = ha.new_transition(mode_4_0, mode_4_1)
    t.guard = lambda state: state[1] >= 1
    t.reset = lambda state: [None, None, None, None]
    t.guard_sympy = sym_y >= 1

    t = ha.new_transition(mode_0_1, mode_1_1)
    t.guard = lambda state: state[0] >= 1
    t.reset = lambda state: [None, None, None, None]
    t.guard_sympy = sym_x >= 1

    t = ha.new_transition(mode_0_1, mode_0_0)
    t.guard = lambda state: state[1] <= 1
    t.reset = lambda state: [None, None, None, None]
    t.guard_sympy = sym_y <= 1

    t = ha.new_transition(mode_0_1, mode_0_2)
    t.guard = lambda state: state[1] >= 2
    t.reset = lambda state: [None, None, None, None]
    t.guard_sympy = sym_y >= 2

    t = ha.new_transition(mode_1_1, mode_0_1)
    t.guard = lambda state: state[0] <= 1
    t.reset = lambda state: [None, None, None, None]
    t.guard_sympy = sym_x <= 1

    t = ha.new_transition(mode_1_1, mode_2_1)
    t.guard = lambda state: state[0] >= 2
    t.reset = lambda state: [None, None, None, None]
    t.guard_sympy = sym_x >= 2

    t = ha.new_transition(mode_1_1, mode_1_0)
    t.guard = lambda state: state[1] <= 1
    t.reset = lambda state: [None, None, None, None]
    t.guard_sympy = sym_y <= 1

    t = ha.new_transition(mode_1_1, mode_1_2)
    t.guard = lambda state: state[1] >= 2
    t.reset = lambda state: [None, None, None, None]
    t.guard_sympy = sym_y >= 2

    t = ha.new_transition(mode_2_1, mode_1_1)
    t.guard = lambda state: state[0] <= 2
    t.reset = lambda state: [None, None, None, None]
    t.guard_sympy = sym_x <= 2

    t = ha.new_transition(mode_2_1, mode_3_1)
    t.guard = lambda state: state[0] >= 3
    t.reset = lambda state: [None, None, None, None]
    t.guard_sympy = sym_x >= 3

    t = ha.new_transition(mode_2_1, mode_2_0)
    t.guard = lambda state: state[1] <= 1
    t.reset = lambda state: [None, None, None, None]
    t.guard_sympy = sym_y <= 1

    t = ha.new_transition(mode_2_1, mode_2_2)
    t.guard = lambda state: state[1] >= 2
    t.reset = lambda state: [None, None, None, None]
    t.guard_sympy = sym_y >= 2

    t = ha.new_transition(mode_3_1, mode_2_1)
    t.guard = lambda state: state[0] <= 3
    t.reset = lambda state: [None, None, None, None]
    t.guard_sympy = sym_x <= 3

    t = ha.new_transition(mode_3_1, mode_4_1)
    t.guard = lambda state: state[0] >= 4
    t.reset = lambda state: [None, None, None, None]
    t.guard_sympy = sym_x >= 4

    t = ha.new_transition(mode_3_1, mode_3_0)
    t.guard = lambda state: state[1] <= 1
    t.reset = lambda state: [None, None, None, None]
    t.guard_sympy = sym_y <= 1

    t = ha.new_transition(mode_3_1, mode_3_2)
    t.guard = lambda state: state[1] >= 2
    t.reset = lambda state: [None, None, None, None]
    t.guard_sympy = sym_y >= 2

    t = ha.new_transition(mode_4_1, mode_3_1)
    t.guard = lambda state: state[0] <= 4
    t.reset = lambda state: [None, None, None, None]
    t.guard_sympy = sym_x <= 4

    t = ha.new_transition(mode_4_1, mode_4_0)
    t.guard = lambda state: state[1] <= 1
    t.reset = lambda state: [None, None, None, None]
    t.guard_sympy = sym_y <= 1

    t = ha.new_transition(mode_4_1, mode_4_2)
    t.guard = lambda state: state[1] >= 2
    t.reset = lambda state: [None, None, None, None]
    t.guard_sympy = sym_y >= 2

    t = ha.new_transition(mode_0_2, mode_1_2)
    t.guard = lambda state: state[0] >= 1
    t.reset = lambda state: [None, None, None, None]
    t.guard_sympy = sym_x >= 1

    t = ha.new_transition(mode_0_2, mode_0_1)
    t.guard = lambda state: state[1] <= 2
    t.reset = lambda state: [None, None, None, None]
    t.guard_sympy = sym_y <= 2

    t = ha.new_transition(mode_0_2, mode_0_3)
    t.guard = lambda state: state[1] >= 3
    t.reset = lambda state: [None, None, None, None]
    t.guard_sympy = sym_y >= 3

    t = ha.new_transition(mode_1_2, mode_0_2)
    t.guard = lambda state: state[0] <= 1
    t.reset = lambda state: [None, None, None, None]
    t.guard_sympy = sym_x <= 1

    t = ha.new_transition(mode_1_2, mode_2_2)
    t.guard = lambda state: state[0] >= 2
    t.reset = lambda state: [None, None, None, None]
    t.guard_sympy = sym_x >= 2

    t = ha.new_transition(mode_1_2, mode_1_1)
    t.guard = lambda state: state[1] <= 2
    t.reset = lambda state: [None, None, None, None]
    t.guard_sympy = sym_y <= 2

    t = ha.new_transition(mode_1_2, mode_1_3)
    t.guard = lambda state: state[1] >= 3
    t.reset = lambda state: [None, None, None, None]
    t.guard_sympy = sym_y >= 3

    t = ha.new_transition(mode_2_2, mode_1_2)
    t.guard = lambda state: state[0] <= 2
    t.reset = lambda state: [None, None, None, None]
    t.guard_sympy = sym_x <= 2

    t = ha.new_transition(mode_2_2, mode_3_2)
    t.guard = lambda state: state[0] >= 3
    t.reset = lambda state: [None, None, None, None]
    t.guard_sympy = sym_x >= 3

    t = ha.new_transition(mode_2_2, mode_2_1)
    t.guard = lambda state: state[1] <= 2
    t.reset = lambda state: [None, None, None, None]
    t.guard_sympy = sym_y <= 2

    t = ha.new_transition(mode_2_2, mode_2_3)
    t.guard = lambda state: state[1] >= 3
    t.reset = lambda state: [None, None, None, None]
    t.guard_sympy = sym_y >= 3

    t = ha.new_transition(mode_3_2, mode_2_2)
    t.guard = lambda state: state[0] <= 3
    t.reset = lambda state: [None, None, None, None]
    t.guard_sympy = sym_x <= 3

    t = ha.new_transition(mode_3_2, mode_4_2)
    t.guard = lambda state: state[0] >= 4
    t.reset = lambda state: [None, None, None, None]
    t.guard_sympy = sym_x >= 4

    t = ha.new_transition(mode_3_2, mode_3_1)
    t.guard = lambda state: state[1] <= 2
    t.reset = lambda state: [None, None, None, None]
    t.guard_sympy = sym_y <= 2

    t = ha.new_transition(mode_3_2, mode_3_3)
    t.guard = lambda state: state[1] >= 3
    t.reset = lambda state: [None, None, None, None]
    t.guard_sympy = sym_y >= 3

    t = ha.new_transition(mode_4_2, mode_3_2)
    t.guard = lambda state: state[0] <= 4
    t.reset = lambda state: [None, None, None, None]
    t.guard_sympy = sym_x <= 4

    t = ha.new_transition(mode_4_2, mode_4_1)
    t.guard = lambda state: state[1] <= 2
    t.reset = lambda state: [None, None, None, None]
    t.guard_sympy = sym_y <= 2

    t = ha.new_transition(mode_4_2, mode_4_3)
    t.guard = lambda state: state[1] >= 3
    t.reset = lambda state: [None, None, None, None]
    t.guard_sympy = sym_y >= 3

    t = ha.new_transition(mode_0_3, mode_1_3)
    t.guard = lambda state: state[0] >= 1
    t.reset = lambda state: [None, None, None, None]
    t.guard_sympy = sym_x >= 1

    t = ha.new_transition(mode_0_3, mode_0_2)
    t.guard = lambda state: state[1] <= 3
    t.reset = lambda state: [None, None, None, None]
    t.guard_sympy = sym_y <= 3

    t = ha.new_transition(mode_0_3, mode_0_4)
    t.guard = lambda state: state[1] >= 4
    t.reset = lambda state: [None, None, None, None]
    t.guard_sympy = sym_y >= 4

    t = ha.new_transition(mode_1_3, mode_0_3)
    t.guard = lambda state: state[0] <= 1
    t.reset = lambda state: [None, None, None, None]
    t.guard_sympy = sym_x <= 1

    t = ha.new_transition(mode_1_3, mode_2_3)
    t.guard = lambda state: state[0] >= 2
    t.reset = lambda state: [None, None, None, None]
    t.guard_sympy = sym_x >= 2

    t = ha.new_transition(mode_1_3, mode_1_2)
    t.guard = lambda state: state[1] <= 3
    t.reset = lambda state: [None, None, None, None]
    t.guard_sympy = sym_y <= 3

    t = ha.new_transition(mode_1_3, mode_1_4)
    t.guard = lambda state: state[1] >= 4
    t.reset = lambda state: [None, None, None, None]
    t.guard_sympy = sym_y >= 4

    t = ha.new_transition(mode_2_3, mode_1_3)
    t.guard = lambda state: state[0] <= 2
    t.reset = lambda state: [None, None, None, None]
    t.guard_sympy = sym_x <= 2

    t = ha.new_transition(mode_2_3, mode_3_3)
    t.guard = lambda state: state[0] >= 3
    t.reset = lambda state: [None, None, None, None]
    t.guard_sympy = sym_x >= 3

    t = ha.new_transition(mode_2_3, mode_2_2)
    t.guard = lambda state: state[1] <= 3
    t.reset = lambda state: [None, None, None, None]
    t.guard_sympy = sym_y <= 3

    t = ha.new_transition(mode_2_3, mode_2_4)
    t.guard = lambda state: state[1] >= 4
    t.reset = lambda state: [None, None, None, None]
    t.guard_sympy = sym_y >= 4

    t = ha.new_transition(mode_3_3, mode_2_3)
    t.guard = lambda state: state[0] <= 3
    t.reset = lambda state: [None, None, None, None]
    t.guard_sympy = sym_x <= 3

    t = ha.new_transition(mode_3_3, mode_4_3)
    t.guard = lambda state: state[0] >= 4
    t.reset = lambda state: [None, None, None, None]
    t.guard_sympy = sym_x >= 4

    t = ha.new_transition(mode_3_3, mode_3_2)
    t.guard = lambda state: state[1] <= 3
    t.reset = lambda state: [None, None, None, None]
    t.guard_sympy = sym_y <= 3

    t = ha.new_transition(mode_3_3, mode_3_4)
    t.guard = lambda state: state[1] >= 4
    t.reset = lambda state: [None, None, None, None]
    t.guard_sympy = sym_y >= 4

    t = ha.new_transition(mode_4_3, mode_3_3)
    t.guard = lambda state: state[0] <= 4
    t.reset = lambda state: [None, None, None, None]
    t.guard_sympy = sym_x <= 4

    t = ha.new_transition(mode_4_3, mode_4_2)
    t.guard = lambda state: state[1] <= 3
    t.reset = lambda state: [None, None, None, None]
    t.guard_sympy = sym_y <= 3

    t = ha.new_transition(mode_4_3, mode_4_4)
    t.guard = lambda state: state[1] >= 4
    t.reset = lambda state: [None, None, None, None]
    t.guard_sympy = sym_y >= 4

    t = ha.new_transition(mode_0_4, mode_1_4)
    t.guard = lambda state: state[0] >= 1
    t.reset = lambda state: [None, None, None, None]
    t.guard_sympy = sym_x >= 1

    t = ha.new_transition(mode_0_4, mode_0_3)
    t.guard = lambda state: state[1] <= 4
    t.reset = lambda state: [None, None, None, None]
    t.guard_sympy = sym_y <= 4

    t = ha.new_transition(mode_1_4, mode_0_4)
    t.guard = lambda state: state[0] <= 1
    t.reset = lambda state: [None, None, None, None]
    t.guard_sympy = sym_x <= 1

    t = ha.new_transition(mode_1_4, mode_2_4)
    t.guard = lambda state: state[0] >= 2
    t.reset = lambda state: [None, None, None, None]
    t.guard_sympy = sym_x >= 2

    t = ha.new_transition(mode_1_4, mode_1_3)
    t.guard = lambda state: state[1] <= 4
    t.reset = lambda state: [None, None, None, None]
    t.guard_sympy = sym_y <= 4

    t = ha.new_transition(mode_2_4, mode_1_4)
    t.guard = lambda state: state[0] <= 2
    t.reset = lambda state: [None, None, None, None]
    t.guard_sympy = sym_x <= 2

    t = ha.new_transition(mode_2_4, mode_3_4)
    t.guard = lambda state: state[0] >= 3
    t.reset = lambda state: [None, None, None, None]
    t.guard_sympy = sym_x >= 3

    t = ha.new_transition(mode_2_4, mode_2_3)
    t.guard = lambda state: state[1] <= 4
    t.reset = lambda state: [None, None, None, None]
    t.guard_sympy = sym_y <= 4

    t = ha.new_transition(mode_3_4, mode_2_4)
    t.guard = lambda state: state[0] <= 3
    t.reset = lambda state: [None, None, None, None]
    t.guard_sympy = sym_x <= 3

    t = ha.new_transition(mode_3_4, mode_4_4)
    t.guard = lambda state: state[0] >= 4
    t.reset = lambda state: [None, None, None, None]
    t.guard_sympy = sym_x >= 4

    t = ha.new_transition(mode_3_4, mode_3_3)
    t.guard = lambda state: state[1] <= 4
    t.reset = lambda state: [None, None, None, None]
    t.guard_sympy = sym_y <= 4

    t = ha.new_transition(mode_4_4, mode_3_4)
    t.guard = lambda state: state[0] <= 4
    t.reset = lambda state: [None, None, None, None]
    t.guard_sympy = sym_x <= 4

    t = ha.new_transition(mode_4_4, mode_4_3)
    t.guard = lambda state: state[1] <= 4
    t.reset = lambda state: [None, None, None, None]
    t.guard_sympy = sym_y <= 4

    return ha
def define_ha():
    '''make the hybrid automaton and return it'''

    ha = HybridAutomaton()
    ha.variables = ["x", "y", "xvel", "yvel"]

    mode_0_0 = ha.new_mode('mode_0_0')
    mode_0_0.inv = lambda state: state[0] <= 1.0 and state[1] <= 1.0
    mode_0_0.der = lambda _, state: [
        state[2], state[3], -1.2 * (state[2] - 0.7071067811865476) + 0.1 *
        (state[3] - -0.7071067811865475), 0.2 *
        (state[2] - 0.7071067811865476) + -1.2 *
        (state[3] - -0.7071067811865475)
    ]
    mode_0_0.der_interval_list = [[0, 0], [0, 0], [-0.1, 0.1], [-0.1, 0.1]]

    mode_1_0 = ha.new_mode('mode_1_0')
    mode_1_0.inv = lambda state: state[0] >= 1.0 and state[0] <= 2.0 and state[
        1] <= 1.0
    mode_1_0.der = lambda _, state: [
        state[2], state[3], -1.2 * (state[2] - 0.0) + 0.1 *
        (state[3] - 1.0), 0.2 * (state[2] - 0.0) + -1.2 * (state[3] - 1.0)
    ]
    mode_1_0.der_interval_list = [[0, 0], [0, 0], [-0.1, 0.1], [-0.1, 0.1]]

    mode_2_0 = ha.new_mode('mode_2_0')
    mode_2_0.inv = lambda state: state[0] >= 2.0 and state[0] <= 3.0 and state[
        1] <= 1.0
    mode_2_0.der = lambda _, state: [
        state[2], state[3], -1.2 * (state[2] - 0.0) + 0.1 *
        (state[3] - 1.0), 0.2 * (state[2] - 0.0) + -1.2 * (state[3] - 1.0)
    ]
    mode_2_0.der_interval_list = [[0, 0], [0, 0], [-0.1, 0.1], [-0.1, 0.1]]

    mode_3_0 = ha.new_mode('mode_3_0')
    mode_3_0.inv = lambda state: state[0] >= 3.0 and state[0] <= 4.0 and state[
        1] <= 1.0
    mode_3_0.der = lambda _, state: [
        state[2], state[3], -1.2 * (state[2] - -1.0) + 0.1 *
        (state[3] - 0.0), 0.2 * (state[2] - -1.0) + -1.2 * (state[3] - 0.0)
    ]
    mode_3_0.der_interval_list = [[0, 0], [0, 0], [-0.1, 0.1], [-0.1, 0.1]]

    mode_4_0 = ha.new_mode('mode_4_0')
    mode_4_0.inv = lambda state: state[0] >= 4.0 and state[1] <= 1.0
    mode_4_0.der = lambda _, state: [
        state[2], state[3], -1.2 * (state[2] - -1.0) + 0.1 *
        (state[3] - 0.0), 0.2 * (state[2] - -1.0) + -1.2 * (state[3] - 0.0)
    ]
    mode_4_0.der_interval_list = [[0, 0], [0, 0], [-0.1, 0.1], [-0.1, 0.1]]

    mode_0_1 = ha.new_mode('mode_0_1')
    mode_0_1.inv = lambda state: state[0] <= 1.0 and state[1] >= 1.0 and state[
        1] <= 2.0
    mode_0_1.der = lambda _, state: [
        state[2], state[3], -1.2 * (state[2] - 0.7071067811865476) + 0.1 *
        (state[3] - -0.7071067811865475), 0.2 *
        (state[2] - 0.7071067811865476) + -1.2 *
        (state[3] - -0.7071067811865475)
    ]
    mode_0_1.der_interval_list = [[0, 0], [0, 0], [-0.1, 0.1], [-0.1, 0.1]]

    mode_1_1 = ha.new_mode('mode_1_1')
    mode_1_1.inv = lambda state: state[0] >= 1.0 and state[0] <= 2.0 and state[
        1] >= 1.0 and state[1] <= 2.0
    mode_1_1.der = lambda _, state: [
        state[2], state[3], -1.2 * (state[2] - 0.0) + 0.1 *
        (state[3] - 1.0), 0.2 * (state[2] - 0.0) + -1.2 * (state[3] - 1.0)
    ]
    mode_1_1.der_interval_list = [[0, 0], [0, 0], [-0.1, 0.1], [-0.1, 0.1]]

    mode_2_1 = ha.new_mode('mode_2_1')
    mode_2_1.inv = lambda state: state[0] >= 2.0 and state[0] <= 3.0 and state[
        1] >= 1.0 and state[1] <= 2.0
    mode_2_1.der = lambda _, state: [
        state[2], state[3], -1.2 * (state[2] - 0.0) + 0.1 *
        (state[3] - 1.0), 0.2 * (state[2] - 0.0) + -1.2 * (state[3] - 1.0)
    ]
    mode_2_1.der_interval_list = [[0, 0], [0, 0], [-0.1, 0.1], [-0.1, 0.1]]

    mode_3_1 = ha.new_mode('mode_3_1')
    mode_3_1.inv = lambda state: state[0] >= 3.0 and state[0] <= 4.0 and state[
        1] >= 1.0 and state[1] <= 2.0
    mode_3_1.der = lambda _, state: [0.0, 0.0, 0.0, 0.0]
    mode_3_1.der_interval_list = [[0, 0], [0, 0], [0, 0], [0, 0]]

    mode_4_1 = ha.new_mode('mode_4_1')
    mode_4_1.inv = lambda state: state[0] >= 4.0 and state[1] >= 1.0 and state[
        1] <= 2.0
    mode_4_1.der = lambda _, state: [
        state[2], state[3], -1.2 * (state[2] - 0.0) + 0.1 *
        (state[3] - -1.0), 0.2 * (state[2] - 0.0) + -1.2 * (state[3] - -1.0)
    ]
    mode_4_1.der_interval_list = [[0, 0], [0, 0], [-0.1, 0.1], [-0.1, 0.1]]

    mode_0_2 = ha.new_mode('mode_0_2')
    mode_0_2.inv = lambda state: state[0] <= 1.0 and state[1] >= 2.0 and state[
        1] <= 3.0
    mode_0_2.der = lambda _, state: [
        state[2], state[3], -1.2 * (state[2] - 0.0) + 0.1 *
        (state[3] - -1.0), 0.2 * (state[2] - 0.0) + -1.2 * (state[3] - -1.0)
    ]
    mode_0_2.der_interval_list = [[0, 0], [0, 0], [-0.1, 0.1], [-0.1, 0.1]]

    mode_1_2 = ha.new_mode('mode_1_2')
    mode_1_2.inv = lambda state: state[0] >= 1.0 and state[0] <= 2.0 and state[
        1] >= 2.0 and state[1] <= 3.0
    mode_1_2.der = lambda _, state: [
        state[2], state[3], -1.2 * (state[2] - 1.0) + 0.1 *
        (state[3] - 0.0), 0.2 * (state[2] - 1.0) + -1.2 * (state[3] - 0.0)
    ]
    mode_1_2.der_interval_list = [[0, 0], [0, 0], [-0.1, 0.1], [-0.1, 0.1]]

    mode_2_2 = ha.new_mode('mode_2_2')
    mode_2_2.inv = lambda state: state[0] >= 2.0 and state[0] <= 3.0 and state[
        1] >= 2.0 and state[1] <= 3.0
    mode_2_2.der = lambda _, state: [
        state[2], state[3], -1.2 * (state[2] - 0.7071067811865475) + 0.1 *
        (state[3] - 0.7071067811865476), 0.2 *
        (state[2] - 0.7071067811865475) + -1.2 *
        (state[3] - 0.7071067811865476)
    ]
    mode_2_2.der_interval_list = [[0, 0], [0, 0], [-0.1, 0.1], [-0.1, 0.1]]

    mode_3_2 = ha.new_mode('mode_3_2')
    mode_3_2.inv = lambda state: state[0] >= 3.0 and state[0] <= 4.0 and state[
        1] >= 2.0 and state[1] <= 3.0
    mode_3_2.der = lambda _, state: [
        state[2], state[3], -1.2 * (state[2] - 0.7071067811865475) + 0.1 *
        (state[3] - 0.7071067811865476), 0.2 *
        (state[2] - 0.7071067811865475) + -1.2 *
        (state[3] - 0.7071067811865476)
    ]
    mode_3_2.der_interval_list = [[0, 0], [0, 0], [-0.1, 0.1], [-0.1, 0.1]]

    mode_4_2 = ha.new_mode('mode_4_2')
    mode_4_2.inv = lambda state: state[0] >= 4.0 and state[1] >= 2.0 and state[
        1] <= 3.0
    mode_4_2.der = lambda _, state: [
        state[2], state[3], -1.2 * (state[2] - 0.0) + 0.1 *
        (state[3] - -1.0), 0.2 * (state[2] - 0.0) + -1.2 * (state[3] - -1.0)
    ]
    mode_4_2.der_interval_list = [[0, 0], [0, 0], [-0.1, 0.1], [-0.1, 0.1]]

    mode_0_3 = ha.new_mode('mode_0_3')
    mode_0_3.inv = lambda state: state[0] <= 1.0 and state[1] >= 3.0 and state[
        1] <= 4.0
    mode_0_3.der = lambda _, state: [
        state[2], state[3], -1.2 * (state[2] - 0.0) + 0.1 *
        (state[3] - -1.0), 0.2 * (state[2] - 0.0) + -1.2 * (state[3] - -1.0)
    ]
    mode_0_3.der_interval_list = [[0, 0], [0, 0], [-0.1, 0.1], [-0.1, 0.1]]

    mode_1_3 = ha.new_mode('mode_1_3')
    mode_1_3.inv = lambda state: state[0] >= 1.0 and state[0] <= 2.0 and state[
        1] >= 3.0 and state[1] <= 4.0
    mode_1_3.der = lambda _, state: [0.0, 0.0, 0.0, 0.0]
    mode_1_3.der_interval_list = [[0, 0], [0, 0], [0, 0], [0, 0]]

    mode_2_3 = ha.new_mode('mode_2_3')
    mode_2_3.inv = lambda state: state[0] >= 2.0 and state[0] <= 3.0 and state[
        1] >= 3.0 and state[1] <= 4.0
    mode_2_3.der = lambda _, state: [
        state[2], state[3], -1.2 * (state[2] - 0.7071067811865475) + 0.1 *
        (state[3] - 0.7071067811865476), 0.2 *
        (state[2] - 0.7071067811865475) + -1.2 *
        (state[3] - 0.7071067811865476)
    ]
    mode_2_3.der_interval_list = [[0, 0], [0, 0], [-0.1, 0.1], [-0.1, 0.1]]

    mode_3_3 = ha.new_mode('mode_3_3')
    mode_3_3.inv = lambda state: state[0] >= 3.0 and state[0] <= 4.0 and state[
        1] >= 3.0 and state[1] <= 4.0
    mode_3_3.der = lambda _, state: [
        state[2], state[3], -1.2 * (state[2] - 0.7071067811865475) + 0.1 *
        (state[3] - 0.7071067811865476), 0.2 *
        (state[2] - 0.7071067811865475) + -1.2 *
        (state[3] - 0.7071067811865476)
    ]
    mode_3_3.der_interval_list = [[0, 0], [0, 0], [-0.1, 0.1], [-0.1, 0.1]]

    mode_4_3 = ha.new_mode('mode_4_3')
    mode_4_3.inv = lambda state: state[0] >= 4.0 and state[1] >= 3.0 and state[
        1] <= 4.0
    mode_4_3.der = lambda _, state: [
        state[2], state[3], -1.2 * (state[2] - 0.0) + 0.1 *
        (state[3] - -1.0), 0.2 * (state[2] - 0.0) + -1.2 * (state[3] - -1.0)
    ]
    mode_4_3.der_interval_list = [[0, 0], [0, 0], [-0.1, 0.1], [-0.1, 0.1]]

    mode_0_4 = ha.new_mode('mode_0_4')
    mode_0_4.inv = lambda state: state[0] <= 1.0 and state[1] >= 4.0
    mode_0_4.der = lambda _, state: [
        state[2], state[3], -1.2 * (state[2] - 0.0) + 0.1 *
        (state[3] - -1.0), 0.2 * (state[2] - 0.0) + -1.2 * (state[3] - -1.0)
    ]
    mode_0_4.der_interval_list = [[0, 0], [0, 0], [-0.1, 0.1], [-0.1, 0.1]]

    mode_1_4 = ha.new_mode('mode_1_4')
    mode_1_4.inv = lambda state: state[0] >= 1.0 and state[0] <= 2.0 and state[
        1] >= 4.0
    mode_1_4.der = lambda _, state: [
        state[2], state[3], -1.2 * (state[2] - -1.0) + 0.1 *
        (state[3] - 0.0), 0.2 * (state[2] - -1.0) + -1.2 * (state[3] - 0.0)
    ]
    mode_1_4.der_interval_list = [[0, 0], [0, 0], [-0.1, 0.1], [-0.1, 0.1]]

    mode_2_4 = ha.new_mode('mode_2_4')
    mode_2_4.inv = lambda state: state[0] >= 2.0 and state[0] <= 3.0 and state[
        1] >= 4.0
    mode_2_4.der = lambda _, state: [
        state[2], state[3], -1.2 * (state[2] - -1.0) + 0.1 *
        (state[3] - 0.0), 0.2 * (state[2] - -1.0) + -1.2 * (state[3] - 0.0)
    ]
    mode_2_4.der_interval_list = [[0, 0], [0, 0], [-0.1, 0.1], [-0.1, 0.1]]

    mode_3_4 = ha.new_mode('mode_3_4')
    mode_3_4.inv = lambda state: state[0] >= 3.0 and state[0] <= 4.0 and state[
        1] >= 4.0
    mode_3_4.der = lambda _, state: [
        state[2], state[3], -1.2 * (state[2] - -1.0) + 0.1 *
        (state[3] - 0.0), 0.2 * (state[2] - -1.0) + -1.2 * (state[3] - 0.0)
    ]
    mode_3_4.der_interval_list = [[0, 0], [0, 0], [-0.1, 0.1], [-0.1, 0.1]]

    mode_4_4 = ha.new_mode('mode_4_4')
    mode_4_4.inv = lambda state: state[0] >= 4.0 and state[1] >= 4.0
    mode_4_4.der = lambda _, state: [
        state[2], state[3], -1.2 * (state[2] - 0.0) + 0.1 *
        (state[3] - -1.0), 0.2 * (state[2] - 0.0) + -1.2 * (state[3] - -1.0)
    ]
    mode_4_4.der_interval_list = [[0, 0], [0, 0], [-0.1, 0.1], [-0.1, 0.1]]

    t = ha.new_transition(mode_0_0, mode_1_0)
    t.guard = lambda state: state[0] >= 1.0
    t.reset = lambda state: [None, None, None, None]

    t = ha.new_transition(mode_0_0, mode_0_1)
    t.guard = lambda state: state[1] >= 1.0
    t.reset = lambda state: [None, None, None, None]

    t = ha.new_transition(mode_1_0, mode_0_0)
    t.guard = lambda state: state[0] <= 1.0
    t.reset = lambda state: [None, None, None, None]

    t = ha.new_transition(mode_1_0, mode_2_0)
    t.guard = lambda state: state[0] >= 2.0
    t.reset = lambda state: [None, None, None, None]

    t = ha.new_transition(mode_1_0, mode_1_1)
    t.guard = lambda state: state[1] >= 1.0
    t.reset = lambda state: [None, None, None, None]

    t = ha.new_transition(mode_2_0, mode_1_0)
    t.guard = lambda state: state[0] <= 2.0
    t.reset = lambda state: [None, None, None, None]

    t = ha.new_transition(mode_2_0, mode_3_0)
    t.guard = lambda state: state[0] >= 3.0
    t.reset = lambda state: [None, None, None, None]

    t = ha.new_transition(mode_2_0, mode_2_1)
    t.guard = lambda state: state[1] >= 1.0
    t.reset = lambda state: [None, None, None, None]

    t = ha.new_transition(mode_3_0, mode_2_0)
    t.guard = lambda state: state[0] <= 3.0
    t.reset = lambda state: [None, None, None, None]

    t = ha.new_transition(mode_3_0, mode_4_0)
    t.guard = lambda state: state[0] >= 4.0
    t.reset = lambda state: [None, None, None, None]

    t = ha.new_transition(mode_3_0, mode_3_1)
    t.guard = lambda state: state[1] >= 1.0
    t.reset = lambda state: [None, None, None, None]

    t = ha.new_transition(mode_4_0, mode_3_0)
    t.guard = lambda state: state[0] <= 4.0
    t.reset = lambda state: [None, None, None, None]

    t = ha.new_transition(mode_4_0, mode_4_1)
    t.guard = lambda state: state[1] >= 1.0
    t.reset = lambda state: [None, None, None, None]

    t = ha.new_transition(mode_0_1, mode_1_1)
    t.guard = lambda state: state[0] >= 1.0
    t.reset = lambda state: [None, None, None, None]

    t = ha.new_transition(mode_0_1, mode_0_0)
    t.guard = lambda state: state[1] <= 1.0
    t.reset = lambda state: [None, None, None, None]

    t = ha.new_transition(mode_0_1, mode_0_2)
    t.guard = lambda state: state[1] >= 2.0
    t.reset = lambda state: [None, None, None, None]

    t = ha.new_transition(mode_1_1, mode_0_1)
    t.guard = lambda state: state[0] <= 1.0
    t.reset = lambda state: [None, None, None, None]

    t = ha.new_transition(mode_1_1, mode_2_1)
    t.guard = lambda state: state[0] >= 2.0
    t.reset = lambda state: [None, None, None, None]

    t = ha.new_transition(mode_1_1, mode_1_0)
    t.guard = lambda state: state[1] <= 1.0
    t.reset = lambda state: [None, None, None, None]

    t = ha.new_transition(mode_1_1, mode_1_2)
    t.guard = lambda state: state[1] >= 2.0
    t.reset = lambda state: [None, None, None, None]

    t = ha.new_transition(mode_2_1, mode_1_1)
    t.guard = lambda state: state[0] <= 2.0
    t.reset = lambda state: [None, None, None, None]

    t = ha.new_transition(mode_2_1, mode_3_1)
    t.guard = lambda state: state[0] >= 3.0
    t.reset = lambda state: [None, None, None, None]

    t = ha.new_transition(mode_2_1, mode_2_0)
    t.guard = lambda state: state[1] <= 1.0
    t.reset = lambda state: [None, None, None, None]

    t = ha.new_transition(mode_2_1, mode_2_2)
    t.guard = lambda state: state[1] >= 2.0
    t.reset = lambda state: [None, None, None, None]

    t = ha.new_transition(mode_3_1, mode_2_1)
    t.guard = lambda state: state[0] <= 3.0
    t.reset = lambda state: [None, None, None, None]

    t = ha.new_transition(mode_3_1, mode_4_1)
    t.guard = lambda state: state[0] >= 4.0
    t.reset = lambda state: [None, None, None, None]

    t = ha.new_transition(mode_3_1, mode_3_0)
    t.guard = lambda state: state[1] <= 1.0
    t.reset = lambda state: [None, None, None, None]

    t = ha.new_transition(mode_3_1, mode_3_2)
    t.guard = lambda state: state[1] >= 2.0
    t.reset = lambda state: [None, None, None, None]

    t = ha.new_transition(mode_4_1, mode_3_1)
    t.guard = lambda state: state[0] <= 4.0
    t.reset = lambda state: [None, None, None, None]

    t = ha.new_transition(mode_4_1, mode_4_0)
    t.guard = lambda state: state[1] <= 1.0
    t.reset = lambda state: [None, None, None, None]

    t = ha.new_transition(mode_4_1, mode_4_2)
    t.guard = lambda state: state[1] >= 2.0
    t.reset = lambda state: [None, None, None, None]

    t = ha.new_transition(mode_0_2, mode_1_2)
    t.guard = lambda state: state[0] >= 1.0
    t.reset = lambda state: [None, None, None, None]

    t = ha.new_transition(mode_0_2, mode_0_1)
    t.guard = lambda state: state[1] <= 2.0
    t.reset = lambda state: [None, None, None, None]

    t = ha.new_transition(mode_0_2, mode_0_3)
    t.guard = lambda state: state[1] >= 3.0
    t.reset = lambda state: [None, None, None, None]

    t = ha.new_transition(mode_1_2, mode_0_2)
    t.guard = lambda state: state[0] <= 1.0
    t.reset = lambda state: [None, None, None, None]

    t = ha.new_transition(mode_1_2, mode_2_2)
    t.guard = lambda state: state[0] >= 2.0
    t.reset = lambda state: [None, None, None, None]

    t = ha.new_transition(mode_1_2, mode_1_1)
    t.guard = lambda state: state[1] <= 2.0
    t.reset = lambda state: [None, None, None, None]

    t = ha.new_transition(mode_1_2, mode_1_3)
    t.guard = lambda state: state[1] >= 3.0
    t.reset = lambda state: [None, None, None, None]

    t = ha.new_transition(mode_2_2, mode_1_2)
    t.guard = lambda state: state[0] <= 2.0
    t.reset = lambda state: [None, None, None, None]

    t = ha.new_transition(mode_2_2, mode_3_2)
    t.guard = lambda state: state[0] >= 3.0
    t.reset = lambda state: [None, None, None, None]

    t = ha.new_transition(mode_2_2, mode_2_1)
    t.guard = lambda state: state[1] <= 2.0
    t.reset = lambda state: [None, None, None, None]

    t = ha.new_transition(mode_2_2, mode_2_3)
    t.guard = lambda state: state[1] >= 3.0
    t.reset = lambda state: [None, None, None, None]

    t = ha.new_transition(mode_3_2, mode_2_2)
    t.guard = lambda state: state[0] <= 3.0
    t.reset = lambda state: [None, None, None, None]

    t = ha.new_transition(mode_3_2, mode_4_2)
    t.guard = lambda state: state[0] >= 4.0
    t.reset = lambda state: [None, None, None, None]

    t = ha.new_transition(mode_3_2, mode_3_1)
    t.guard = lambda state: state[1] <= 2.0
    t.reset = lambda state: [None, None, None, None]

    t = ha.new_transition(mode_3_2, mode_3_3)
    t.guard = lambda state: state[1] >= 3.0
    t.reset = lambda state: [None, None, None, None]

    t = ha.new_transition(mode_4_2, mode_3_2)
    t.guard = lambda state: state[0] <= 4.0
    t.reset = lambda state: [None, None, None, None]

    t = ha.new_transition(mode_4_2, mode_4_1)
    t.guard = lambda state: state[1] <= 2.0
    t.reset = lambda state: [None, None, None, None]

    t = ha.new_transition(mode_4_2, mode_4_3)
    t.guard = lambda state: state[1] >= 3.0
    t.reset = lambda state: [None, None, None, None]

    t = ha.new_transition(mode_0_3, mode_1_3)
    t.guard = lambda state: state[0] >= 1.0
    t.reset = lambda state: [None, None, None, None]

    t = ha.new_transition(mode_0_3, mode_0_2)
    t.guard = lambda state: state[1] <= 3.0
    t.reset = lambda state: [None, None, None, None]

    t = ha.new_transition(mode_0_3, mode_0_4)
    t.guard = lambda state: state[1] >= 4.0
    t.reset = lambda state: [None, None, None, None]

    t = ha.new_transition(mode_1_3, mode_0_3)
    t.guard = lambda state: state[0] <= 1.0
    t.reset = lambda state: [None, None, None, None]

    t = ha.new_transition(mode_1_3, mode_2_3)
    t.guard = lambda state: state[0] >= 2.0
    t.reset = lambda state: [None, None, None, None]

    t = ha.new_transition(mode_1_3, mode_1_2)
    t.guard = lambda state: state[1] <= 3.0
    t.reset = lambda state: [None, None, None, None]

    t = ha.new_transition(mode_1_3, mode_1_4)
    t.guard = lambda state: state[1] >= 4.0
    t.reset = lambda state: [None, None, None, None]

    t = ha.new_transition(mode_2_3, mode_1_3)
    t.guard = lambda state: state[0] <= 2.0
    t.reset = lambda state: [None, None, None, None]

    t = ha.new_transition(mode_2_3, mode_3_3)
    t.guard = lambda state: state[0] >= 3.0
    t.reset = lambda state: [None, None, None, None]

    t = ha.new_transition(mode_2_3, mode_2_2)
    t.guard = lambda state: state[1] <= 3.0
    t.reset = lambda state: [None, None, None, None]

    t = ha.new_transition(mode_2_3, mode_2_4)
    t.guard = lambda state: state[1] >= 4.0
    t.reset = lambda state: [None, None, None, None]

    t = ha.new_transition(mode_3_3, mode_2_3)
    t.guard = lambda state: state[0] <= 3.0
    t.reset = lambda state: [None, None, None, None]

    t = ha.new_transition(mode_3_3, mode_4_3)
    t.guard = lambda state: state[0] >= 4.0
    t.reset = lambda state: [None, None, None, None]

    t = ha.new_transition(mode_3_3, mode_3_2)
    t.guard = lambda state: state[1] <= 3.0
    t.reset = lambda state: [None, None, None, None]

    t = ha.new_transition(mode_3_3, mode_3_4)
    t.guard = lambda state: state[1] >= 4.0
    t.reset = lambda state: [None, None, None, None]

    t = ha.new_transition(mode_4_3, mode_3_3)
    t.guard = lambda state: state[0] <= 4.0
    t.reset = lambda state: [None, None, None, None]

    t = ha.new_transition(mode_4_3, mode_4_2)
    t.guard = lambda state: state[1] <= 3.0
    t.reset = lambda state: [None, None, None, None]

    t = ha.new_transition(mode_4_3, mode_4_4)
    t.guard = lambda state: state[1] >= 4.0
    t.reset = lambda state: [None, None, None, None]

    t = ha.new_transition(mode_0_4, mode_1_4)
    t.guard = lambda state: state[0] >= 1.0
    t.reset = lambda state: [None, None, None, None]

    t = ha.new_transition(mode_0_4, mode_0_3)
    t.guard = lambda state: state[1] <= 4.0
    t.reset = lambda state: [None, None, None, None]

    t = ha.new_transition(mode_1_4, mode_0_4)
    t.guard = lambda state: state[0] <= 1.0
    t.reset = lambda state: [None, None, None, None]

    t = ha.new_transition(mode_1_4, mode_2_4)
    t.guard = lambda state: state[0] >= 2.0
    t.reset = lambda state: [None, None, None, None]

    t = ha.new_transition(mode_1_4, mode_1_3)
    t.guard = lambda state: state[1] <= 4.0
    t.reset = lambda state: [None, None, None, None]

    t = ha.new_transition(mode_2_4, mode_1_4)
    t.guard = lambda state: state[0] <= 2.0
    t.reset = lambda state: [None, None, None, None]

    t = ha.new_transition(mode_2_4, mode_3_4)
    t.guard = lambda state: state[0] >= 3.0
    t.reset = lambda state: [None, None, None, None]

    t = ha.new_transition(mode_2_4, mode_2_3)
    t.guard = lambda state: state[1] <= 4.0
    t.reset = lambda state: [None, None, None, None]

    t = ha.new_transition(mode_3_4, mode_2_4)
    t.guard = lambda state: state[0] <= 3.0
    t.reset = lambda state: [None, None, None, None]

    t = ha.new_transition(mode_3_4, mode_4_4)
    t.guard = lambda state: state[0] >= 4.0
    t.reset = lambda state: [None, None, None, None]

    t = ha.new_transition(mode_3_4, mode_3_3)
    t.guard = lambda state: state[1] <= 4.0
    t.reset = lambda state: [None, None, None, None]

    t = ha.new_transition(mode_4_4, mode_3_4)
    t.guard = lambda state: state[0] <= 4.0
    t.reset = lambda state: [None, None, None, None]

    t = ha.new_transition(mode_4_4, mode_4_3)
    t.guard = lambda state: state[1] <= 4.0
    t.reset = lambda state: [None, None, None, None]

    return ha
Example #10
0
def define_ha():
    '''make the hybrid automaton and return it'''
    # Variable ordering: [x, y, xvel, yvel]

    sym_x, sym_y, sym_xvel, sym_yvel = symbols('x y xvel yvel ')

    ha = HybridAutomaton()

    mode_0_0 = ha.new_mode('mode_0_0')
    mode_0_0.inv = lambda state: state[0] <= 1 and state[1] <= 1
    mode_0_0.inv_sympy = And(sym_x <= 1, sym_y <= 1)
    mode_0_0.der = lambda _, state: [
        state[2], state[3], -1.2 * (state[2] - 1) + 0.1 *
        (state[3] - 0.00000000000000006123233995736766), 0.1 *
        (state[2] - 1) + -1.2 * (state[3] - 0.00000000000000006123233995736766)
    ]
    mode_0_0.der_interval_list = [[0, 0], [0, 0], [-0.1, 0.1], [-0.1, 0.1]]

    mode_1_0 = ha.new_mode('mode_1_0')
    mode_1_0.inv = lambda state: state[0] >= 1 and state[0] <= 2 and state[
        1] <= 1
    mode_1_0.inv_sympy = And(And(sym_x >= 1, sym_x <= 2), sym_y <= 1)
    mode_1_0.der = lambda _, state: [
        state[2], state[3], -1.2 * (state[2] - 1) + 0.1 *
        (state[3] - 0.00000000000000006123233995736766), 0.1 *
        (state[2] - 1) + -1.2 * (state[3] - 0.00000000000000006123233995736766)
    ]
    mode_1_0.der_interval_list = [[0, 0], [0, 0], [-0.1, 0.1], [-0.1, 0.1]]

    mode_2_0 = ha.new_mode('mode_2_0')
    mode_2_0.inv = lambda state: state[0] >= 2 and state[1] <= 1
    mode_2_0.inv_sympy = And(sym_x >= 2, sym_y <= 1)
    mode_2_0.der = lambda _, state: [0, 0, 0, 0]
    mode_2_0.der_interval_list = [[0, 0], [0, 0], [0, 0], [0, 0]]

    mode_0_1 = ha.new_mode('mode_0_1')
    mode_0_1.inv = lambda state: state[0] <= 1 and state[1] >= 1 and state[
        1] <= 2
    mode_0_1.inv_sympy = And(And(sym_x <= 1, sym_y >= 1), sym_y <= 2)
    mode_0_1.der = lambda _, state: [
        state[2], state[3], -1.2 *
        (state[2] - 0.00000000000000012246467991473532) + 0.1 *
        (state[3] - -1), 0.1 *
        (state[2] - 0.00000000000000012246467991473532) + -1.2 *
        (state[3] - -1)
    ]
    mode_0_1.der_interval_list = [[0, 0], [0, 0], [-0.1, 0.1], [-0.1, 0.1]]

    mode_1_1 = ha.new_mode('mode_1_1')
    mode_1_1.inv = lambda state: state[0] >= 1 and state[0] <= 2 and state[
        1] >= 1 and state[1] <= 2
    mode_1_1.inv_sympy = And(And(And(sym_x >= 1, sym_x <= 2), sym_y >= 1),
                             sym_y <= 2)
    mode_1_1.der = lambda _, state: [
        state[2], state[3], -1.2 * (state[2] - 0.7071067811865476) + 0.1 *
        (state[3] - -0.7071067811865475), 0.1 *
        (state[2] - 0.7071067811865476) + -1.2 *
        (state[3] - -0.7071067811865475)
    ]
    mode_1_1.der_interval_list = [[0, 0], [0, 0], [-0.1, 0.1], [-0.1, 0.1]]

    mode_2_1 = ha.new_mode('mode_2_1')
    mode_2_1.inv = lambda state: state[0] >= 2 and state[1] >= 1 and state[
        1] <= 2
    mode_2_1.inv_sympy = And(And(sym_x >= 2, sym_y >= 1), sym_y <= 2)
    mode_2_1.der = lambda _, state: [
        state[2], state[3], -1.2 *
        (state[2] - 0.00000000000000012246467991473532) + 0.1 *
        (state[3] - -1), 0.1 *
        (state[2] - 0.00000000000000012246467991473532) + -1.2 *
        (state[3] - -1)
    ]
    mode_2_1.der_interval_list = [[0, 0], [0, 0], [-0.1, 0.1], [-0.1, 0.1]]

    mode_0_2 = ha.new_mode('mode_0_2')
    mode_0_2.inv = lambda state: state[0] <= 1 and state[1] >= 2
    mode_0_2.inv_sympy = And(sym_x <= 1, sym_y >= 2)
    mode_0_2.der = lambda _, state: [0, 0, 0, 0]
    mode_0_2.der_interval_list = [[0, 0], [0, 0], [0, 0], [0, 0]]

    mode_1_2 = ha.new_mode('mode_1_2')
    mode_1_2.inv = lambda state: state[0] >= 1 and state[0] <= 2 and state[
        1] >= 2
    mode_1_2.inv_sympy = And(And(sym_x >= 1, sym_x <= 2), sym_y >= 2)
    mode_1_2.der = lambda _, state: [
        state[2], state[3], -1.2 * (state[2] - 1) + 0.1 *
        (state[3] - 0.00000000000000006123233995736766), 0.1 *
        (state[2] - 1) + -1.2 * (state[3] - 0.00000000000000006123233995736766)
    ]
    mode_1_2.der_interval_list = [[0, 0], [0, 0], [-0.1, 0.1], [-0.1, 0.1]]

    mode_2_2 = ha.new_mode('mode_2_2')
    mode_2_2.inv = lambda state: state[0] >= 2 and state[1] >= 2
    mode_2_2.inv_sympy = And(sym_x >= 2, sym_y >= 2)
    mode_2_2.der = lambda _, state: [
        state[2], state[3], -1.2 *
        (state[2] - 0.00000000000000012246467991473532) + 0.1 *
        (state[3] - -1), 0.1 *
        (state[2] - 0.00000000000000012246467991473532) + -1.2 *
        (state[3] - -1)
    ]
    mode_2_2.der_interval_list = [[0, 0], [0, 0], [-0.1, 0.1], [-0.1, 0.1]]

    t = ha.new_transition(mode_0_0, mode_1_0)
    t.guard = lambda state: state[0] >= 1
    t.reset = lambda state: [None, None, None, None]
    t.guard_sympy = sym_x >= 1

    t = ha.new_transition(mode_0_0, mode_0_1)
    t.guard = lambda state: state[1] >= 1
    t.reset = lambda state: [None, None, None, None]
    t.guard_sympy = sym_y >= 1

    t = ha.new_transition(mode_1_0, mode_0_0)
    t.guard = lambda state: state[0] <= 1
    t.reset = lambda state: [None, None, None, None]
    t.guard_sympy = sym_x <= 1

    t = ha.new_transition(mode_1_0, mode_2_0)
    t.guard = lambda state: state[0] >= 2
    t.reset = lambda state: [None, None, None, None]
    t.guard_sympy = sym_x >= 2

    t = ha.new_transition(mode_1_0, mode_1_1)
    t.guard = lambda state: state[1] >= 1
    t.reset = lambda state: [None, None, None, None]
    t.guard_sympy = sym_y >= 1

    t = ha.new_transition(mode_2_0, mode_1_0)
    t.guard = lambda state: state[0] <= 2
    t.reset = lambda state: [None, None, None, None]
    t.guard_sympy = sym_x <= 2

    t = ha.new_transition(mode_2_0, mode_2_1)
    t.guard = lambda state: state[1] >= 1
    t.reset = lambda state: [None, None, None, None]
    t.guard_sympy = sym_y >= 1

    t = ha.new_transition(mode_0_1, mode_1_1)
    t.guard = lambda state: state[0] >= 1
    t.reset = lambda state: [None, None, None, None]
    t.guard_sympy = sym_x >= 1

    t = ha.new_transition(mode_0_1, mode_0_0)
    t.guard = lambda state: state[1] <= 1
    t.reset = lambda state: [None, None, None, None]
    t.guard_sympy = sym_y <= 1

    t = ha.new_transition(mode_0_1, mode_0_2)
    t.guard = lambda state: state[1] >= 2
    t.reset = lambda state: [None, None, None, None]
    t.guard_sympy = sym_y >= 2

    t = ha.new_transition(mode_1_1, mode_0_1)
    t.guard = lambda state: state[0] <= 1
    t.reset = lambda state: [None, None, None, None]
    t.guard_sympy = sym_x <= 1

    t = ha.new_transition(mode_1_1, mode_2_1)
    t.guard = lambda state: state[0] >= 2
    t.reset = lambda state: [None, None, None, None]
    t.guard_sympy = sym_x >= 2

    t = ha.new_transition(mode_1_1, mode_1_0)
    t.guard = lambda state: state[1] <= 1
    t.reset = lambda state: [None, None, None, None]
    t.guard_sympy = sym_y <= 1

    t = ha.new_transition(mode_1_1, mode_1_2)
    t.guard = lambda state: state[1] >= 2
    t.reset = lambda state: [None, None, None, None]
    t.guard_sympy = sym_y >= 2

    t = ha.new_transition(mode_2_1, mode_1_1)
    t.guard = lambda state: state[0] <= 2
    t.reset = lambda state: [None, None, None, None]
    t.guard_sympy = sym_x <= 2

    t = ha.new_transition(mode_2_1, mode_2_0)
    t.guard = lambda state: state[1] <= 1
    t.reset = lambda state: [None, None, None, None]
    t.guard_sympy = sym_y <= 1

    t = ha.new_transition(mode_2_1, mode_2_2)
    t.guard = lambda state: state[1] >= 2
    t.reset = lambda state: [None, None, None, None]
    t.guard_sympy = sym_y >= 2

    t = ha.new_transition(mode_0_2, mode_1_2)
    t.guard = lambda state: state[0] >= 1
    t.reset = lambda state: [None, None, None, None]
    t.guard_sympy = sym_x >= 1

    t = ha.new_transition(mode_0_2, mode_0_1)
    t.guard = lambda state: state[1] <= 2
    t.reset = lambda state: [None, None, None, None]
    t.guard_sympy = sym_y <= 2

    t = ha.new_transition(mode_1_2, mode_0_2)
    t.guard = lambda state: state[0] <= 1
    t.reset = lambda state: [None, None, None, None]
    t.guard_sympy = sym_x <= 1

    t = ha.new_transition(mode_1_2, mode_2_2)
    t.guard = lambda state: state[0] >= 2
    t.reset = lambda state: [None, None, None, None]
    t.guard_sympy = sym_x >= 2

    t = ha.new_transition(mode_1_2, mode_1_1)
    t.guard = lambda state: state[1] <= 2
    t.reset = lambda state: [None, None, None, None]
    t.guard_sympy = sym_y <= 2

    t = ha.new_transition(mode_2_2, mode_1_2)
    t.guard = lambda state: state[0] <= 2
    t.reset = lambda state: [None, None, None, None]
    t.guard_sympy = sym_x <= 2

    t = ha.new_transition(mode_2_2, mode_2_1)
    t.guard = lambda state: state[1] <= 2
    t.reset = lambda state: [None, None, None, None]
    t.guard_sympy = sym_y <= 2

    return ha