diff --git a/models/dimers random walk.xml b/models/dimers random walk.xml
index 62c20b5..1753767 100644
--- a/models/dimers random walk.xml
+++ b/models/dimers random walk.xml
@@ -28,7 +28,7 @@
-
+
@@ -60,11 +60,12 @@
-
+
-
-
+
+
+
diff --git a/src/__pycache__/model.cpython-39.pyc b/src/__pycache__/model.cpython-39.pyc
index 79fb21d..56fcbb6 100644
Binary files a/src/__pycache__/model.cpython-39.pyc and b/src/__pycache__/model.cpython-39.pyc differ
diff --git a/src/glimpse.py b/src/glimpse.py
index 25b7e3e..7ba9908 100644
--- a/src/glimpse.py
+++ b/src/glimpse.py
@@ -1,8 +1,13 @@
import model
-from anytree import Node, AnyNode, NodeMixin, RenderTree
+from anytree import Node, AnyNode, NodeMixin, RenderTree, find_by_attr
from anytree.exporter import DotExporter
from ete3 import Tree
+# 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://python-gtk-3-tutorial.readthedocs.io/en/latest/treeview.html
+# https://anytree.readthedocs.io/en/latest/
+
# TODO Contrôles de cohérence des données
# 1) node_id <> pas de doublon
# 2) pas de node sans un node_parent_id
@@ -46,31 +51,58 @@ for i in l:
if (i.id == j.parent):
i.add_child(j)
+print('\n',"Liste des conditions (node_id, parent_id, nb d'enfants, +/- liste des enfants)",'\n')
+
affichage = ''
for i in l:
affichage = str(i.id) + ' ' + str(i.parent) + ' n=' + str(len(i.ch)) + ' '
if len(i.ch) > 0:
for c in range (0, len(i.ch)):
- affichage = affichage + str(i.ch[c].id) + ', '
+ affichage += str(i.ch[c].id) + ', '
print(affichage)
+##
+A = Node("A")
+A1 = Node("A1", parent=A)
+A2 = Node("A2", parent=A)
+A21 = Node("A21", parent=A2)
-
-
-
-
-
-
-
-
-
+root = Node([0])
"""
+
+https://python-gtk-3-tutorial.readthedocs.io/en/latest/treeview.html
+
+
+A
+├── A1
+└── A2
+ └── A21
+
+with open('input.txt', 'r') as f:
+ lines = f.readlines()[1:]
+ root = Node(lines[0].split(" ")[0])
+
+ for line in lines:
+ line = line.split(" ")
+ Node("".join(line[1:]).strip(), parent=find_by_attr(root, line[0]))
+
+ for pre, _, node in RenderTree(root):
+ print("%s%s" % (pre, node.name))
+"""
+
+
+##
+
+
+
+
+
##
@@ -78,7 +110,11 @@ sp = model.testmodel.get_states().get_space(0)
size = model.testmodel.get_parameters().spaceparam.get_dimension().get_x()
nb_sites = int (model.testmodel.get_parameters().spaceparam.get_site_multiplicity())
nb_arrows = int (model.testmodel.get_states().get_space(0).get_nb_arrows())
-weight = int (model.testmodel.get_states().get_space(0).get_arrow(0).get_weight())
+
+print()
+print("space size = ", size, " nb de sites par cellule = ", nb_sites,
+ " nb total de flèches dans l'espace = ", nb_arrows)
+print(' | ',end=' ')
# TODO Contrôles de cohérence des données
# condition et arrow
@@ -89,42 +125,20 @@ weight = int (model.testmodel.get_states().get_space(0).get_arrow(0).get_weight(
# 1) parent <= condition.node_id max value (donc deux lectures)
# 2) pas de node sans un node_parent_id
-space = []
-cells = []
-sites = []
-weights = []
-arrows = []
-extremite = 1
-for x in range (0, nb_arrows):
- arrows.append(sp.get_arrow(x).get_coord("x"))
- sites.append(sp.get_arrow(x).get_site())
- weights.append(sp.get_arrow(x).get_weight())
+for n in range (0, size + 1):
+ for s in range (0, nb_sites):
+ arr = 0
+ for a in range (0, nb_arrows):
+ if (sp.get_arrow(a).get_coord("x") == n and sp.get_arrow(a).get_site() == s):
+ arr = sp.get_arrow(a).get_weight()
+ if arr > 0:
+ print(str(arr),end=' ')
+ else:
+ print('.',end=' ')
+ print(' | ',end=' ')
+print('\n ',end=' ')
-for i in range (0, (size + 1) * (nb_sites + 1) + extremite): space.append(0)
-
-print()
-print("space size = ", size, " nb de sites par cellule = ", nb_sites,
- " nb total de flèches dans l'espace = ", nb_arrows)
-print()
-print (sites)
-print (weights)
-print (arrows)
-print()
-
-for i in range (0, size + 1): cells.append('')
-
-for i in range (0, size + nb_sites - 1):
- if i <= size + extremite: # ad hoc ! (j'en conviens...)
- space[i * (nb_sites + 1)] = ''
- for k in range (0, nb_arrows):
- if arrows[k] == i:
- cells[i] = i # cette cellule contient au moins une flèche
- space[i * (nb_sites + 1) + sites[k] + 1] = weights[k]
- # nombre de flèches dans ce site
-
-print (cells)
-print()
-print (space)
-
-"""
+for k in range (0, size + 1):
+ if k < 9: print(k+1,end=' ')
+ else: print(k+1,end=' ')
diff --git a/src/model.py b/src/model.py
index 0c09a78..705fd70 100644
--- a/src/model.py
+++ b/src/model.py
@@ -66,30 +66,30 @@ class Identity:
def get_name(self):
return self.__name.text
- def get_owner(self):
- return self.__owner.text
-
- def get_owner_id(self):
- return self.__owner_id.text
-
- def get_date(self):
- return DT.datetime.fromtimestamp(int(self.__date.text))
-
- def get_version(self):
- return self.__version.text
-
def set_name(self, text):
self.__name.text = text
+ def get_owner(self):
+ return self.__owner.text
+
def set_owner(self, text):
self.__owner.text = text
+ def get_owner_id(self):
+ return self.__owner_id.text
+
def set_owner_id(self, text):
self.__owner_id.text = text
+ def get_date(self):
+ return DT.datetime.fromtimestamp(int(self.__date.text))
+
def set_date(self, date):
self.__date.text = str(int(date.timestamp()))
+ def get_version(self):
+ return self.__version.text
+
def set_version(self, text):
self.__version.text = text
@@ -143,6 +143,9 @@ class Spaceparam:
def get_dimension(self):
return self.__dimension
+ def set_dimension(self, value):
+ self.__dimension = str(value) # TODO Assert
+
class Axis:
def __init__(self, node):
@@ -151,9 +154,14 @@ class Axis:
def get_name(self):
return self.node.attrib["name"]
+ def set_name(self, value):
+ pass # TODO (The user can create a complete model from scratch.)
+
def get_size(self):
return int(self.node.attrib["size"])
+ def set_size(self, value):
+ pass # TODO (The user can create a complete model from scratch.)
class Dimension:
__axis = []
@@ -164,6 +172,16 @@ class Dimension:
def get_x(self):
return int(self.node.get("x"))
+ def set_x(self, value):
+ self.node.attrib["x"] = value # TODO Assert
+
+ def get_y(self):
+ return int(self.node.get("y"))
+
+ def set_y(self, value):
+ pass
+
+ # TODO z, u, v, w,...
class Parameters:
@@ -184,12 +202,12 @@ class Parameters:
def get_author(self):
return self.node.attrib["author"]
- def get_date(self):
- return self.node.attrib["date"]
-
def set_author(self, text):
self.node.attrib["author"] = text
+ def get_date(self):
+ return self.node.attrib["date"]
+
def set_date(self, text):
self.node.attrib["date"] = text
@@ -209,6 +227,9 @@ class Object:
def get_arrow(self, i):
return self.__arrows[i]
+ def set_arrow(self, i, value):
+ self.__arrows[i] = value # TODO Assert
+
class Objects:
__objects = []
@@ -222,6 +243,9 @@ class Objects:
def get_object(self, i):
return self.__objects[i]
+ def set_object(self, i, Object):
+ self.__objects[i] = Object # TODO Assert
+
## States
@@ -412,7 +436,7 @@ class Model:
def get_transitions(self):
return Transitions(self.__transitions)
- def saveas(self, name):
+ def save_as(self, name):
self.tree.write("../models/" + name + ".xml", encoding="utf-8")