Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/src/tree.py
diff options
context:
space:
mode:
Diffstat (limited to 'src/tree.py')
-rw-r--r--src/tree.py103
1 files changed, 103 insertions, 0 deletions
diff --git a/src/tree.py b/src/tree.py
new file mode 100644
index 0000000..1dfa8c9
--- /dev/null
+++ b/src/tree.py
@@ -0,0 +1,103 @@
+
+from person import Person
+from union import Union
+
+
+# Tree class
+class Tree:
+ "Class to represent a tree: a sum of persons and unions"
+
+ def __init__(self):
+ "Constructor, init fields to None"
+ self.root = None
+ self.persons = []
+ self.unions = []
+
+
+ def Person(self, name, sex):
+ "Add a new person"
+ p = Person(name, sex)
+ self.persons.append(p)
+ return p
+
+
+ def Union(self, dad, mum):
+ "Add a new union"
+ u = Union(dad, mum)
+ self.unions.append(u)
+ return u
+
+ def is_descendant(self, person, root=None):
+ "Look is person is a descendant of the tree"
+ start = root
+ if start is None:
+ start = self.root
+ for u in start.unions:
+ for c in u.childs:
+ if c == person:
+ return True
+ if self.is_descendant(person, c):
+ return True
+ return False
+
+
+
+# Create the samples family
+def sample_family1():
+
+ tree = Tree()
+ tree.root = tree.Person("", "M")
+
+ return tree
+
+
+def sample_family2():
+
+ tree = Tree()
+
+ l = tree.Person("Lucien", "M")
+ a = tree.Person("Annick", "F")
+ u = tree.Union(l, a)
+
+ d = tree.Person("Dominique", "M")
+ u.append_child(d)
+ au = tree.Person("Anne", "F")
+ u.append_child(au)
+ m = tree.Person("Madeleine", "F")
+ u.append_child(m)
+
+ jp = tree.Person("Jean-Pierre", "M")
+ j = tree.Person("Julie", "F")
+ up = tree.Union(jp, j)
+ up.append_child(l)
+ c = tree.Person("Christian", "M")
+ up.append_child(c)
+
+ ub = tree.Union(tree.Person("Jonathan", "M"), j)
+ ub.append_child(tree.Person("Charlie", "F"))
+
+ rs = tree.Person("Renee", "F")
+ vm = tree.Person("Vivien", "M")
+ urv = tree.Union(vm, rs)
+ urv.append_child(j)
+
+ jr = tree.Person("Jean-Rene", "M")
+ ua = tree.Union(jr, tree.Person("Micheline", "F"))
+ ua.append_child(a)
+ i = tree.Person("Irene", "F")
+ ua.append_child(i)
+ ui = tree.Union(tree.Person("Nathan", "M"), i)
+ ui.append_child(tree.Person("Marie", "F"))
+ ui.append_child(tree.Person("Noel", "M"))
+ ui.append_child(tree.Person("Thierry", "M"))
+
+ uc = tree.Union(c, tree.Person("Clarah", "F"))
+ sa = tree.Person("Sandrine", "F")
+ uc.append_child(sa)
+ uc2 = tree.Union(c, tree.Person("Vivianne", "F"))
+ uc2.append_child(tree.Person("Pierre", "M"))
+ uc2.append_child(tree.Person("Camille", "F"))
+
+ tree.root = vm
+
+ return tree