I just try make simple graph with transitions
library :
from transitions.extensions.diagrams import HierarchicalGraphMachine
from IPython.display import display, Markdown
states = ['engoff' , 'poweron' , 'engon' , 'FCCActions' #'emgstatus' , "whevent" , 'new data receive'
,{'name' : 'cores',
'final': True,
'parallel' : [{ 'name' : 'mapeng', 'children': ['maploaded', {"name": "update", "final": True}],
'initial' : 'maploaded',
'transitions': [['delay', 'maploaded', "update"]]},
{
'name' : 'EAA' , 'children': ['newdata', {"name": "done!", "final": True}], #environment analayser
'initial' : 'newdata',
'transitions': [['Analaysing', 'newdata', 'done!']]
},{
'name' : 'FAI' , 'children': ['newdata', {"name": "done!", "final": True}],
'initial' : 'newdata',
'transitions': ['CalculateandLearning', 'newdata', 'done!']
}]
}
]
transitions = [['flightcommand', 'engon', 'FCCActions'],
['poweroff-command', 'engon', 'engoff'],
['init', 'engoff', 'poweron'],
['engstart-command', 'poweron', 'engon'],
['startservice', 'poweron', 'cores']]
m = HierarchicalGraphMachine(states=states, transitions=transitions, initial="engoff", show_conditions=True,
title="Mermaid", auto_transitions=False)
m.init()
I just make some change in this example but I got Error :
Traceback (most recent call last):
File ".../3.transitions/test.py", line 29, in <module>
m = HierarchicalGraphMachine(states=states, transitions=transitions, initial="engoff", show_conditions=True,
File "...\Python\Python38\lib\site-packages\transitions\extensions\diagrams.py", line 137, in __init__
super(GraphMachine, self).__init__(
File "...\Python\Python38\lib\site-packages\transitions\extensions\markup.py", line 61, in __init__
super(MarkupMachine, self).__init__(
File "...\Python\Python38\lib\site-packages\transitions\extensions\nesting.py", line 407, in __init__
super(HierarchicalMachine, self).__init__(
File "...\Python\Python38\lib\site-packages\transitions\core.py", line 601, in __init__
self.add_states(states)
File "...\Python\Python38\lib\site-packages\transitions\extensions\diagrams.py", line 230, in add_states
super(GraphMachine, self).add_states(
File "...\Python\Python38\lib\site-packages\transitions\extensions\markup.py", line 126, in add_states
super(MarkupMachine, self).add_states(states, on_enter=on_enter, on_exit=on_exit,
File "...\Python\Python38\lib\site-packages\transitions\extensions\nesting.py", line 521, in add_states
self._add_dict_state(state, ignore, remap, **kwargs)
File "...\Python\Python38\lib\site-packages\transitions\extensions\nesting.py", line 978, in _add_dict_state
self.add_states(state_children, remap=remap, **kwargs)
File "...\Python\Python38\lib\site-packages\transitions\extensions\diagrams.py", line 230, in add_states
super(GraphMachine, self).add_states(
File "...\Python\Python38\lib\site-packages\transitions\extensions\markup.py", line 126, in add_states
super(MarkupMachine, self).add_states(states, on_enter=on_enter, on_exit=on_exit,
File "...\Python\Python38\lib\site-packages\transitions\extensions\nesting.py", line 521, in add_states
self._add_dict_state(state, ignore, remap, **kwargs)
File "...\Python\Python38\lib\site-packages\transitions\extensions\nesting.py", line 980, in _add_dict_state
self.add_transitions(transitions)
File "...\Python\Python38\lib\site-packages\transitions\core.py", line 1032, in add_transitions
self.add_transition(**trans)
TypeError: add_transition() argument after ** must be a mapping, not str
how can I fix this?
This value:
'transitions': ['CalculateandLearning', 'newdata', 'done!']
should be wrapped in another list:
'transitions': [['CalculateandLearning', 'newdata', 'done!']]
Full source code:
from transitions.extensions.diagrams import HierarchicalGraphMachine
from IPython.display import display, Markdown
states = ['engoff' , 'poweron' , 'engon' , 'FCCActions' #'emgstatus' , "whevent" , 'new data receive'
,{'name' : 'cores',
'final': True,
'parallel' : [{ 'name' : 'mapeng', 'children': ['maploaded', {"name": "update", "final": True}],
'initial' : 'maploaded',
'transitions': [['delay', 'maploaded', "update"]]},
{
'name' : 'EAA' , 'children': ['newdata', {"name": "done!", "final": True}], #environment analayser
'initial' : 'newdata',
'transitions': [['Analaysing', 'newdata', 'done!']]
},{
'name' : 'FAI' , 'children': ['newdata', {"name": "done!", "final": True}],
'initial' : 'newdata',
'transitions': [['CalculateandLearning', 'newdata', 'done!']]
}]
}
]
transitions = [['flightcommand', 'engon', 'FCCActions'],
['poweroff-command', 'engon', 'engoff'],
['init', 'engoff', 'poweron'],
['engstart-command', 'poweron', 'engon'],
['startservice', 'poweron', 'cores']]
m = HierarchicalGraphMachine(states=states, transitions=transitions, initial="engoff", show_conditions=True,
title="Mermaid", auto_transitions=False)
m.init()
I found the issue by editing the library code and adding these print functions:
transitions/core.py
def add_transitions(self, transitions):
"""Add several transitions.
Args:
transitions (list): A list of transitions.
"""
print(f'{transitions=}') # Added here.
for trans in listify(transitions):
print(f'{trans=}') # And here.
if isinstance(trans, list):
self.add_transition(*trans)
else:
self.add_transition(**trans)
Which showed me that the error happened on this case:
transitions=['CalculateandLearning', 'newdata', 'done!']
trans='CalculateandLearning'