WIP: Struggling to slide through pipeline (I)
This commit is contained in:
parent
d430332c3f
commit
5b1e27d670
|
@ -55,31 +55,32 @@
|
||||||
|
|
||||||
<states id="texte" date="1630000000" author="Here, states are spaces.">
|
<states id="texte" date="1630000000" author="Here, states are spaces.">
|
||||||
<space id="initial" date="1630000000" author="Une souris verte,">
|
<space id="initial" date="1630000000" author="Une souris verte,">
|
||||||
<arrow site="0" weight="8" x="0"/>
|
<arrow site="0" weight="6" x="0"/>
|
||||||
<arrow site="1" weight="1" x="0"/>
|
<arrow site="1" weight="1" x="0"/>
|
||||||
<arrow site="2" weight="7" x="1"/>
|
<arrow site="2" weight="7" x="1"/>
|
||||||
<arrow site="1" weight="1" x="6"/>
|
<arrow site="1" weight="3" x="6"/>
|
||||||
<arrow site="2" weight="1" x="7"/>
|
<arrow site="2" weight="1" x="7"/>
|
||||||
<arrow site="1" weight="4" x="14"/>
|
<arrow site="1" weight="4" x="14"/>
|
||||||
<arrow site="0" weight="8" x="14"/>
|
<arrow site="0" weight="8" x="14"/>
|
||||||
<arrow site="2" weight="5" x="15"/>
|
<arrow site="2" weight="5" x="15"/>
|
||||||
<arrow site="1" weight="2" x="17"/>
|
<arrow site="1" weight="2" x="17"/>
|
||||||
<arrow site="2" weight="7" x="18"/>
|
<arrow site="2" weight="7" x="18"/>
|
||||||
<arrow site="2" weight="4" x="20"/>
|
<arrow site="2" weight="9" x="20"/>
|
||||||
|
<arrow site="0" weight="4" x="20"/>
|
||||||
|
|
||||||
</space>
|
</space>
|
||||||
|
|
||||||
</states>
|
</states>
|
||||||
|
|
||||||
<!-- Model transitions definition (rules) -->
|
<!-- Model transitions definition (rules) -->
|
||||||
<!-- In this version : <xs:sequence minOccurs="0" maxOccurs="unbounded">-->
|
<!-- In this version : <xs:sequence minOccurs="1" maxOccurs="unbounded">-->
|
||||||
<!-- Transitions should be edited by hand and written in a 'human-readable' format -->
|
<!-- Transitions should be edited by hand and written in a 'human-readable' format -->
|
||||||
|
|
||||||
<conditions id="random walk of dimers" date="1630000000" author="Zazard le lézard !">
|
<conditions id="random walk of dimers" date="1630000000" author="Zazard le lézard !">
|
||||||
|
|
||||||
<condition site="1" weight="1" node_id="1" parent="0" x="0"/>
|
<condition site="1" weight="1" node_id="1" parent="0" x="0"/>
|
||||||
<condition site="2" weight="1" node_id="2" parent="1" x="1"/>
|
<condition site="2" weight="1" node_id="2" parent="1" x="1"/>
|
||||||
<!-- as soon as conditions 1 and 2 are satisfied, a dimer is identified at atation (0,1). -->
|
<!-- as soon as conditions 1 and 2 are satisfied, a dimer is identified at location (0,1). -->
|
||||||
|
|
||||||
<condition site="1" weight="0" node_id="3" parent="2" x="2"/>
|
<condition site="1" weight="0" node_id="3" parent="2" x="2"/>
|
||||||
<!-- as soon as condition 3 is satisfied,
|
<!-- as soon as condition 3 is satisfied,
|
||||||
|
|
|
@ -170,7 +170,7 @@
|
||||||
|
|
||||||
<xs:element name="conditions">
|
<xs:element name="conditions">
|
||||||
<xs:complexType>
|
<xs:complexType>
|
||||||
<xs:sequence minOccurs="0" maxOccurs="unbounded">
|
<xs:sequence minOccurs="1" maxOccurs="unbounded">
|
||||||
<xs:element minOccurs="0" ref="quote"/>
|
<xs:element minOccurs="0" ref="quote"/>
|
||||||
<xs:element ref="condition"/>
|
<xs:element ref="condition"/>
|
||||||
</xs:sequence>
|
</xs:sequence>
|
||||||
|
@ -180,7 +180,7 @@
|
||||||
|
|
||||||
<xs:element name="transitions">
|
<xs:element name="transitions">
|
||||||
<xs:complexType>
|
<xs:complexType>
|
||||||
<xs:sequence minOccurs="0" maxOccurs="unbounded">
|
<xs:sequence minOccurs="1" maxOccurs="unbounded">
|
||||||
<xs:element ref="transition"/>
|
<xs:element ref="transition"/>
|
||||||
</xs:sequence>
|
</xs:sequence>
|
||||||
</xs:complexType>
|
</xs:complexType>
|
||||||
|
|
Binary file not shown.
|
@ -1,9 +1,9 @@
|
||||||
import model
|
import model
|
||||||
from anytree import Node, AnyNode, NodeMixin, RenderTree, find_by_attr
|
# from anytree import Node, AnyNode, NodeMixin, RenderTree, find_by_attr
|
||||||
from anytree.exporter import DotExporter
|
# from anytree.exporter import DotExporter from ete3 import Tree
|
||||||
from ete3 import Tree
|
|
||||||
|
|
||||||
# https://stackoverflow.com/questions/51902250/read-data-from-a-file-and-create-a-tree-using-anytree-in-python
|
# https://stackoverflow.com/questions/51902250/
|
||||||
|
# read-data-from-a-file-and-create-a-tree-using-anytree-in-python
|
||||||
# https://www.delftstack.com/howto/python/trees-in-python/
|
# https://www.delftstack.com/howto/python/trees-in-python/
|
||||||
# https://python-gtk-3-tutorial.readthedocs.io/en/latest/treeview.html
|
# https://python-gtk-3-tutorial.readthedocs.io/en/latest/treeview.html
|
||||||
# https://anytree.readthedocs.io/en/latest/
|
# https://anytree.readthedocs.io/en/latest/
|
||||||
|
@ -14,48 +14,50 @@ from ete3 import Tree
|
||||||
|
|
||||||
conditions_set = set()
|
conditions_set = set()
|
||||||
|
|
||||||
for i in range (0, len(model.testmodel.get_conditions().get_conditions_array())):
|
# TODO cnd.get_coord("y"),...
|
||||||
|
for i in range(0, len(model.testmodel.get_conditions().get_conditions_array())):
|
||||||
cnd = model.testmodel.get_conditions().get_condition(i)
|
cnd = model.testmodel.get_conditions().get_condition(i)
|
||||||
conditions_set.add((cnd.get_node_self_id(),
|
conditions_set.add((cnd.get_node_self_id(),
|
||||||
cnd.get_node_parent_id(),
|
cnd.get_node_parent_id(),
|
||||||
cnd.get_coord("x"),
|
cnd.get_coord("x"),
|
||||||
# TODO cnd.get_coord("y"),...
|
|
||||||
cnd.get_site(),
|
cnd.get_site(),
|
||||||
cnd.get_weight()))
|
cnd.get_weight()))
|
||||||
|
|
||||||
|
|
||||||
class TreeNode(object):
|
class TreeNode(object):
|
||||||
|
|
||||||
|
# TODO self.y = y,...
|
||||||
def __init__(self, id, parent, x, site, weight):
|
def __init__(self, id, parent, x, site, weight):
|
||||||
self.id = id
|
self.id = id
|
||||||
self.parent = parent
|
self.parent = parent
|
||||||
self.ch = []
|
self.ch = []
|
||||||
self.x = x
|
self.x = x
|
||||||
# TODO self.y = y,...
|
|
||||||
self.site = site
|
self.site = site
|
||||||
self.weight = weight
|
self.weight = weight
|
||||||
|
|
||||||
def id(self): return id
|
def id(self):
|
||||||
|
return id
|
||||||
|
|
||||||
def add_child(self,ch_id):
|
def add_child(self, ch_id):
|
||||||
self.ch.append(ch_id)
|
self.ch.append(ch_id)
|
||||||
self.ch = sorted(self.ch, key=id)
|
self.ch = sorted(self.ch, key=id)
|
||||||
|
|
||||||
l = []
|
lll = []
|
||||||
|
|
||||||
for i in conditions_set: # sorted(conditions_set, key=id):
|
for i in conditions_set: # sorted(conditions_set, key=id):
|
||||||
cndt = TreeNode(i[0], i[1], i[2], i[3], i[4]) # TODO y,z,...
|
cndt = TreeNode(i[0], i[1], i[2], i[3], i[4]) # TODO y,z,...
|
||||||
l.append(cndt)
|
lll.append(cndt)
|
||||||
|
|
||||||
for i in l:
|
for i in lll:
|
||||||
for j in l:
|
for j in lll:
|
||||||
if (i.id == j.parent):
|
if (i.id == j.parent):
|
||||||
i.add_child(j)
|
i.add_child(j)
|
||||||
|
|
||||||
print('\n',"Liste des conditions (node_id, parent_id, nb d'enfants, +/- liste des enfants)",'\n')
|
print('\n', "Liste des conditions (node_id, parent_id, nb d'enfants, +/- liste des enfants)", '\n')
|
||||||
|
|
||||||
affichage = ''
|
affichage = ''
|
||||||
|
|
||||||
for i in l:
|
for i in lll:
|
||||||
affichage = str(i.id) + ' ' + str(i.parent) + ' n=' + str(len(i.ch)) + ' '
|
affichage = str(i.id) + ' ' + str(i.parent) + ' n=' + str(len(i.ch)) + ' '
|
||||||
if len(i.ch) > 0:
|
if len(i.ch) > 0:
|
||||||
for c in range (0, len(i.ch)):
|
for c in range (0, len(i.ch)):
|
||||||
|
@ -63,10 +65,8 @@ for i in l:
|
||||||
print(affichage)
|
print(affichage)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
##
|
##
|
||||||
|
"""
|
||||||
A = Node("A")
|
A = Node("A")
|
||||||
A1 = Node("A1", parent=A)
|
A1 = Node("A1", parent=A)
|
||||||
A2 = Node("A2", parent=A)
|
A2 = Node("A2", parent=A)
|
||||||
|
@ -74,7 +74,7 @@ A21 = Node("A21", parent=A2)
|
||||||
|
|
||||||
root = Node([0])
|
root = Node([0])
|
||||||
|
|
||||||
"""
|
|
||||||
|
|
||||||
https://python-gtk-3-tutorial.readthedocs.io/en/latest/treeview.html
|
https://python-gtk-3-tutorial.readthedocs.io/en/latest/treeview.html
|
||||||
|
|
||||||
|
@ -95,8 +95,6 @@ with open('input.txt', 'r') as f:
|
||||||
for pre, _, node in RenderTree(root):
|
for pre, _, node in RenderTree(root):
|
||||||
print("%s%s" % (pre, node.name))
|
print("%s%s" % (pre, node.name))
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
|
||||||
##
|
##
|
||||||
|
|
||||||
|
|
||||||
|
@ -105,13 +103,19 @@ with open('input.txt', 'r') as f:
|
||||||
|
|
||||||
##
|
##
|
||||||
|
|
||||||
|
print("\n*** Conditions tree ***")
|
||||||
|
print(type(model.testmodel.get_conditions()))
|
||||||
|
print("\n")
|
||||||
|
print(model.testmodel.get_conditions().get_condition(0).get_coord('x'))
|
||||||
|
print("\n")
|
||||||
|
print()
|
||||||
|
|
||||||
|
|
||||||
sp = model.testmodel.get_states().get_space(0)
|
sp = model.testmodel.get_states().get_space(0)
|
||||||
size = model.testmodel.get_parameters().spaceparam.get_dimension().get_x()
|
size = model.testmodel.get_parameters().spaceparam.get_dimension().get_x()
|
||||||
nb_sites = int (model.testmodel.get_parameters().spaceparam.get_site_multiplicity())
|
nb_sites = int(model.testmodel.get_parameters().spaceparam.get_site_multiplicity())
|
||||||
nb_arrows = int (model.testmodel.get_states().get_space(0).get_nb_arrows())
|
nb_arrows = int(model.testmodel.get_states().get_space(0).get_nb_arrows())
|
||||||
|
|
||||||
print()
|
|
||||||
print("space size = ", size, " nb de sites par cellule = ", nb_sites,
|
print("space size = ", size, " nb de sites par cellule = ", nb_sites,
|
||||||
" nb total de flèches dans l'espace = ", nb_arrows)
|
" nb total de flèches dans l'espace = ", nb_arrows)
|
||||||
print(' | ',end=' ')
|
print(' | ',end=' ')
|
||||||
|
@ -126,19 +130,20 @@ print(' | ',end=' ')
|
||||||
# 2) pas de node sans un node_parent_id
|
# 2) pas de node sans un node_parent_id
|
||||||
|
|
||||||
|
|
||||||
for n in range (0, size + 1):
|
for n in range(0, size + 1):
|
||||||
for s in range (0, nb_sites):
|
for s in range(0, nb_sites):
|
||||||
arr = 0
|
arr = 0
|
||||||
for a in range (0, nb_arrows):
|
for a in range(0, nb_arrows):
|
||||||
if (sp.get_arrow(a).get_coord("x") == n and sp.get_arrow(a).get_site() == s):
|
if (sp.get_arrow(a).get_coord("x") == n
|
||||||
|
and sp.get_arrow(a).get_site() == s):
|
||||||
arr = sp.get_arrow(a).get_weight()
|
arr = sp.get_arrow(a).get_weight()
|
||||||
if arr > 0:
|
if arr > 0:
|
||||||
print(str(arr),end=' ')
|
print(str(arr),end=' ')
|
||||||
else:
|
else:
|
||||||
print('.',end=' ')
|
print('.',end=' ')
|
||||||
print(' | ',end=' ')
|
print(' | ',end=' ')
|
||||||
print('\n ',end=' ')
|
print('\n ' + ' ' * nb_sites * 2,end='')
|
||||||
|
|
||||||
for k in range (0, size + 1):
|
for k in range(0, size + 1):
|
||||||
if k < 9: print(k+1,end=' ')
|
if k < 9: print(k+1,end=' '+ ' ' * nb_sites * 2)
|
||||||
else: print(k+1,end=' ')
|
else: print(k+1,end=' '+ ' ' * nb_sites * 2)
|
||||||
|
|
29
src/model.py
29
src/model.py
|
@ -279,8 +279,27 @@ class States:
|
||||||
def get_space(self, i):
|
def get_space(self, i):
|
||||||
return self.__space[i]
|
return self.__space[i]
|
||||||
|
|
||||||
## Conditions
|
|
||||||
|
|
||||||
|
## Conditions Tree
|
||||||
|
|
||||||
|
class TreeNode(object):
|
||||||
|
|
||||||
|
def __init__(self, id, parent, x, site, weight):
|
||||||
|
self.id = id
|
||||||
|
self.parent = parent
|
||||||
|
self.ch = []
|
||||||
|
self.x = x
|
||||||
|
# TODO self.y = y,...
|
||||||
|
self.site = site
|
||||||
|
self.weight = weight
|
||||||
|
|
||||||
|
def id(self): return id
|
||||||
|
|
||||||
|
def add_child(self,ch_id):
|
||||||
|
self.ch.append(ch_id)
|
||||||
|
self.ch = sorted(self.ch, key=id)
|
||||||
|
|
||||||
|
## Conditions
|
||||||
|
|
||||||
class Condition:
|
class Condition:
|
||||||
def __init__(self, node):
|
def __init__(self, node):
|
||||||
|
@ -387,7 +406,6 @@ class Arrow:
|
||||||
def set_weight(self, weight):
|
def set_weight(self, weight):
|
||||||
self.node.attrib["weight"] = str(weight)
|
self.node.attrib["weight"] = str(weight)
|
||||||
|
|
||||||
|
|
||||||
class Model:
|
class Model:
|
||||||
|
|
||||||
def __init__(self, modelpath, schemapath):
|
def __init__(self, modelpath, schemapath):
|
||||||
|
@ -430,6 +448,9 @@ class Model:
|
||||||
def get_states(self):
|
def get_states(self):
|
||||||
return States(self.__states)
|
return States(self.__states)
|
||||||
|
|
||||||
|
def get_tree(self):
|
||||||
|
return self.tree
|
||||||
|
|
||||||
def get_conditions(self):
|
def get_conditions(self):
|
||||||
return Conditions(self.__conditions)
|
return Conditions(self.__conditions)
|
||||||
|
|
||||||
|
@ -440,8 +461,8 @@ class Model:
|
||||||
self.tree.write("../models/" + name + ".xml", encoding="utf-8")
|
self.tree.write("../models/" + name + ".xml", encoding="utf-8")
|
||||||
|
|
||||||
|
|
||||||
modelPath = "../models/dimers random walk.xml"
|
modelPath = "../models/dimers random walk.automat.xml"
|
||||||
schemaPath = "../schemas/models_0.2.1.xmls"
|
schemaPath = "../schemas/models_0.2.1.automat.xmls"
|
||||||
|
|
||||||
testmodel = Model(modelPath, schemaPath)
|
testmodel = Model(modelPath, schemaPath)
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue