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")
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