Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
{'trigger': 'reset', 'source': '*', 'dest': '1'},
]
counter = Machine(states=states, transitions=transitions, before_state_change='check',
after_state_change='clear', initial='1')
new_states = ['A', 'B', {'name': 'C', 'children': counter}]
new_transitions = [
{'trigger': 'forward', 'source': 'A', 'dest': 'B'},
{'trigger': 'forward', 'source': 'B', 'dest': 'C%s1' % State.separator},
{'trigger': 'backward', 'source': 'C', 'dest': 'B'},
{'trigger': 'backward', 'source': 'B', 'dest': 'A'},
{'trigger': 'calc', 'source': '*', 'dest': 'C'},
]
walker = Machine(states=new_states, transitions=new_transitions, before_state_change='watch',
after_state_change='look_back', initial='A')
walker.watch = lambda: 'walk'
walker.look_back = lambda: 'look_back'
walker.check = lambda: 'check'
walker.clear = lambda: 'clear'
with self.assertRaises(MachineError):
walker.increase()
self.assertEqual(walker.state, 'A')
walker.forward()
walker.forward()
self.assertEqual(walker.state, 'C%s1' % State.separator)
walker.increase()
self.assertEqual(walker.state, 'C%s2' % State.separator)
walker.reset()
def test_wrong_nesting(self):
correct = ['A', {'name': 'B', 'children': self.stuff.machine}]
wrong_type = ['A', {'name': 'B', 'children': self.stuff}]
siblings = ['A', {'name': 'B', 'children': ['1', self.stuff.machine]}]
collision = ['A', {'name': 'B', 'children': ['A', self.stuff.machine]}]
m = Machine(states=correct)
m.to_B.C.s3.a()
with self.assertRaises(ValueError):
m = Machine(states=wrong_type)
with self.assertRaises(ValueError):
m = Machine(states=collision)
m = Machine(states=siblings)
m.to_B.s1()
m.to_B.A()
def test_reuse_prepare(self):
class Model:
def __init__(self):
self.prepared = False
def preparation(self):
self.prepared = True
ms_model = Model()
ms = Machine(ms_model, states=["C", "D"],
transitions={"trigger": "go", "source": "*", "dest": "D",
"prepare": "preparation"}, initial="C")
ms_model.go()
self.assertTrue(ms_model.prepared)
m_model = Model()
m = Machine(m_model, states=["A", "B", {"name": "NEST", "children": ms}])
m_model.to('NEST%sC' % State.separator)
m_model.go()
self.assertTrue(m_model.prepared)
def test_wrong_nesting(self):
correct = ['A', {'name': 'B', 'children': self.stuff.machine}]
wrong_type = ['A', {'name': 'B', 'children': self.stuff}]
siblings = ['A', {'name': 'B', 'children': ['1', self.stuff.machine]}]
collision = ['A', {'name': 'B', 'children': ['A', self.stuff.machine]}]
m = Machine(states=correct)
m.to_B.C.s3.a()
with self.assertRaises(ValueError):
m = Machine(states=wrong_type)
with self.assertRaises(ValueError):
m = Machine(states=collision)
m = Machine(states=siblings)
m.to_B.s1()
m.to_B.A()
def setUp(self):
states = ['A', 'B',
{'name': 'C', 'children': ['1', '2', {'name': '3', 'children': ['a', 'b', 'c']}]},
'D', 'E', 'F']
self.stuff = Stuff(states, Machine)
def test_blueprint_remap(self):
states = ['1', '2', '3', 'finished']
transitions = [
{'trigger': 'increase', 'source': '1', 'dest': '2'},
{'trigger': 'increase', 'source': '2', 'dest': '3'},
{'trigger': 'decrease', 'source': '3', 'dest': '2'},
{'trigger': 'decrease', 'source': '1', 'dest': '1'},
{'trigger': 'reset', 'source': '*', 'dest': '1'},
{'trigger': 'done', 'source': '3', 'dest': 'finished'}
]
counter = Machine(states=states, transitions=transitions, initial='1')
new_states = ['A', 'B', {'name': 'C', 'children':
[counter, {'name': 'X', 'children': ['will', 'be', 'filtered', 'out']}],
'remap': {'finished': 'A', 'X': 'A'}}]
new_transitions = [
{'trigger': 'forward', 'source': 'A', 'dest': 'B'},
{'trigger': 'forward', 'source': 'B', 'dest': 'C%s1' % State.separator},
{'trigger': 'backward', 'source': 'C', 'dest': 'B'},
{'trigger': 'backward', 'source': 'B', 'dest': 'A'},
{'trigger': 'calc', 'source': '*', 'dest': 'C%s1' % State.separator},
]
walker = Machine(states=new_states, transitions=new_transitions, before_state_change='watch',
after_state_change='look_back', initial='A')
walker.watch = lambda: 'walk'
]
counter = Machine(states=states, transitions=transitions, initial='1')
new_states = ['A', 'B', {'name': 'C', 'children':
[counter, {'name': 'X', 'children': ['will', 'be', 'filtered', 'out']}],
'remap': {'finished': 'A', 'X': 'A'}}]
new_transitions = [
{'trigger': 'forward', 'source': 'A', 'dest': 'B'},
{'trigger': 'forward', 'source': 'B', 'dest': 'C%s1' % State.separator},
{'trigger': 'backward', 'source': 'C', 'dest': 'B'},
{'trigger': 'backward', 'source': 'B', 'dest': 'A'},
{'trigger': 'calc', 'source': '*', 'dest': 'C%s1' % State.separator},
]
walker = Machine(states=new_states, transitions=new_transitions, before_state_change='watch',
after_state_change='look_back', initial='A')
walker.watch = lambda: 'walk'
walker.look_back = lambda: 'look_back'
counter.increase()
counter.increase()
counter.done()
self.assertEqual(counter.state, 'finished')
with self.assertRaises(MachineError):
walker.increase()
self.assertEqual(walker.state, 'A')
walker.forward()
walker.forward()
self.assertEqual(walker.state, 'C%s1' % State.separator)
class Model:
def __init__(self):
self.prepared = False
def preparation(self):
self.prepared = True
ms_model = Model()
ms = Machine(ms_model, states=["C", "D"],
transitions={"trigger": "go", "source": "*", "dest": "D",
"prepare": "preparation"}, initial="C")
ms_model.go()
self.assertTrue(ms_model.prepared)
m_model = Model()
m = Machine(m_model, states=["A", "B", {"name": "NEST", "children": ms}])
m_model.to('NEST%sC' % State.separator)
m_model.go()
self.assertTrue(m_model.prepared)
def test_blueprint_reuse(self):
states = ['1', '2', '3']
transitions = [
{'trigger': 'increase', 'source': '1', 'dest': '2'},
{'trigger': 'increase', 'source': '2', 'dest': '3'},
{'trigger': 'decrease', 'source': '3', 'dest': '2'},
{'trigger': 'decrease', 'source': '1', 'dest': '1'},
{'trigger': 'reset', 'source': '*', 'dest': '1'},
]
counter = Machine(states=states, transitions=transitions, before_state_change='check',
after_state_change='clear', initial='1')
new_states = ['A', 'B', {'name': 'C', 'children': counter}]
new_transitions = [
{'trigger': 'forward', 'source': 'A', 'dest': 'B'},
{'trigger': 'forward', 'source': 'B', 'dest': 'C%s1' % State.separator},
{'trigger': 'backward', 'source': 'C', 'dest': 'B'},
{'trigger': 'backward', 'source': 'B', 'dest': 'A'},
{'trigger': 'calc', 'source': '*', 'dest': 'C'},
]
walker = Machine(states=new_states, transitions=new_transitions, before_state_change='watch',
after_state_change='look_back', initial='A')
walker.watch = lambda: 'walk'
walker.look_back = lambda: 'look_back'
def __init__(self):
rospy.wait_for_service('/performances/reload_properties')
# States for wholeshow
states = [{'name': 'sleeping', 'children': ['shutting']},
{'name': 'interacting', 'children': ['nonverbal']},
'performing', 'opencog', 'analysis']
HierarchicalMachine.__init__(self, states=states, initial='interacting')
# Transitions
self.add_transition('wake_up', 'sleeping', 'interacting')
# Transitions
self.add_transition('perform', 'interacting', 'performing')
self.add_transition('interact', 'performing', 'interacting')
self.add_transition('start_opencog', 'interacting', 'opencog')
self.add_transition('shut', 'sleeping', 'sleeping_shutting')
self.add_transition('be_quiet', 'interacting', 'interacting_nonverbal')
self.add_transition('start_talking', 'interacting_nonverbal', 'interacting')
# States handling
self.on_enter_sleeping("start_sleeping")
self.on_exit_sleeping("stop_sleeping")
self.on_enter_interacting("start_interacting")
self.on_exit_interacting("stop_interacting")
self.on_enter_sleeping_shutting("system_shutdown")
# ROS Handling