diff options
Diffstat (limited to 'src/tree.py')
-rw-r--r-- | src/tree.py | 103 |
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 |