[geneagrapher] 184/226: Changed Graph class so that Graph object contains only information relevant for the genealogy graph it represents.

Doug Torrance dtorrance-guest at moszumanska.debian.org
Sat Jul 11 17:11:06 UTC 2015


This is an automated email from the git hooks/post-receive script.

dtorrance-guest pushed a commit to branch master
in repository geneagrapher.

commit fb43d99be4293079befacc0be1b367615d10f715
Author: David Alber <alber.david at gmail.com>
Date:   Sun Nov 27 23:01:21 2011 -0800

    Changed Graph class so that Graph object contains only information
    relevant for the genealogy graph it represents.
    
    Previously, a Graph object contained edge information for all edges
    associated with a node in the Math Genealogy Project's information.
    This included edges to nodes that are not part of the genealogy
    graph constructed. This change ensures that only edge information
    for edges between nodes in the genealogy graph is retained.
    
    This closes #2.
---
 geneagrapher/graph/graph.py        |  21 ++++-
 tests/test_geneagrapher_methods.py |  14 ++--
 tests/test_graph_methods.py        | 157 +++++++++++++++++++++++++++++++++++--
 3 files changed, 178 insertions(+), 14 deletions(-)

diff --git a/geneagrapher/graph/graph.py b/geneagrapher/graph/graph.py
index 9da8735..e7f270a 100644
--- a/geneagrapher/graph/graph.py
+++ b/geneagrapher/graph/graph.py
@@ -61,14 +61,31 @@ of Node objects for 'seed_nodes'")
         """
         return self.keys()
 
-    def add_node(self, name, institution, year, id, ancestors, descendants,
+    def add_node(self, name, institution, year, id, advisors, advisees,
                  is_seed=False):
         """
         Add a new node to the graph if a matching node is not already
         present.
         """
         record = Record(name, institution, year, id)
-        node = Node(record, ancestors, descendants)
+
+        # Ancestors is the set of advisors already in the graph.
+        graph_ancestors = set([advisor for advisor in advisors
+                               if advisor in self])
+        # For each ancestor, add this node's id to the ancestor's descendant
+        # set.
+        for ancestor in graph_ancestors:
+            self[ancestor].descendants.add(id)
+
+        # Descendants is the set of advisees already in the graph.
+        graph_descendants = set([descendant for descendant in advisees
+                                 if descendant in self])
+        # For each descendant, add this node's id to the descendant's
+        # ancestor set.
+        for descendant in graph_descendants:
+            self[descendant].ancestors.add(id)
+
+        node = Node(record, graph_ancestors, graph_descendants)
         self.add_node_object(node, is_seed)
 
     def add_node_object(self, node, is_seed=False):
diff --git a/tests/test_geneagrapher_methods.py b/tests/test_geneagrapher_methods.py
index ef56592..369586f 100644
--- a/tests/test_geneagrapher_methods.py
+++ b/tests/test_geneagrapher_methods.py
@@ -87,8 +87,8 @@ geneagrapher: error: no record IDs given
         self.assertTrue(127946 in graph)
 
         node = graph[127946]
-        self.assertEquals(node.ancestors, set([137717, 137705]))
-        self.assertEquals(node.descendants, set([144155, 127803]))
+        self.assertEquals(node.ancestors, set())
+        self.assertEquals(node.descendants, set())
 
         record = node.record
         self.assertEquals(record.name, "Christian   Thomasius")
@@ -113,8 +113,8 @@ geneagrapher: error: no record IDs given
         self.assertTrue(127946 in graph)
 
         node = graph[127946]
-        self.assertEquals(node.ancestors, set([137717, 137705]))
-        self.assertEquals(node.descendants, set([144155, 127803]))
+        self.assertEquals(node.ancestors, set())
+        self.assertEquals(node.descendants, set())
 
         record = node.record
         self.assertEquals(record.name, "Christian   Thomasius")
@@ -139,7 +139,7 @@ geneagrapher: error: no record IDs given
 
         node = graph[127946]
         self.assertEquals(node.ancestors, set([137717, 137705]))
-        self.assertEquals(node.descendants, set([144155, 127803]))
+        self.assertEquals(node.descendants, set())
 
         record = node.record
         self.assertEquals(record.name, "Christian   Thomasius")
@@ -159,7 +159,7 @@ geneagrapher: error: no record IDs given
 
         node = graph[137705]
         self.assertEquals(node.ancestors, set([143630]))
-        self.assertEquals(node.descendants, set([60985, 21235, 127946]))
+        self.assertEquals(node.descendants, set([127946]))
 
         record = node.record
         self.assertEquals(record.name, "Jakob  Thomasius")
@@ -189,7 +189,7 @@ geneagrapher: error: no record IDs given
         self.assertTrue(99457 in graph)
 
         node = graph[79568]
-        self.assertEquals(node.ancestors, set([13301]))
+        self.assertEquals(node.ancestors, set())
         self.assertEquals(node.descendants, set([79562, 99457]))
 
         record = node.record
diff --git a/tests/test_graph_methods.py b/tests/test_graph_methods.py
index 471f5e0..3e15733 100644
--- a/tests/test_graph_methods.py
+++ b/tests/test_graph_methods.py
@@ -130,17 +130,17 @@ class TestGraphMethods(unittest.TestCase):
                        1799, 18231, set([18230]), set())
         graph.add_node(u"Johann Friedrich Pfaff",
                        u"Georg-August-Universit\xe4t Goettingen", 1786, 18230,
-                       set([66476]), set())
+                       set([66476]), set([18231]))
         graph.add_node(u"Abraham Gotthelf Kaestner", u"Universit\xe4t Leipzig",
-                       1739, 66476, set([57670]), set())
+                       1739, 66476, set([57670]), set([18230]))
         graph.add_node(u"Christian August Hausen",
                        u"Martin-Luther-Universit\xe4t Halle-Wittenberg", 1713,
-                       57670, set([72669]), set())
+                       57670, set([72669]), set([66476]))
         graph.add_node(u"Johann Christoph Wichmannshausen",
                        u"Universit\xe4t Leipzig", 1685, 72669, set([21235]),
-                       set())
+                       set([57670]))
         graph.add_node(u"Otto Mencke", u"Universit\xe4t Leipzig", 1665, 21235,
-                       set(), set())
+                       set(), set([72669]))
 
         dotfileexpt = u"""digraph genealogy {
     graph [charset="utf-8"];
@@ -167,5 +167,152 @@ Halle-Wittenberg (1713)"];
         dotfile = graph.generate_dot_file(True, False)
         self.assertEquals(dotfile, dotfileexpt)
 
+    def test016_incremental_ancestor_descendant_check(self):
+        # Test the contents of the ancestors and descendants members of a
+        # graph's nodes as they are added.
+        graph = Graph()
+        graph.add_node(u"Carl Friedrich Gau\xdf", u"Universit\xe4t Helmstedt",
+                       1799, 18231, set([18230]), set([18603, 18233, 62547]))
+        node1 = graph[18231]
+        self.assertEquals(node1.ancestors, set())
+        self.assertEquals(node1.descendants, set())
+
+        graph.add_node(u"Johann Friedrich Pfaff",
+                       u"Georg-August-Universit\xe4t Goettingen", 1786, 18230,
+                       set([66476]), set([18231]))
+        node2 = graph[18230]
+        self.assertEquals(node1.ancestors, set([18230]))
+        self.assertEquals(node1.descendants, set())
+        self.assertEquals(node2.ancestors, set())
+        self.assertEquals(node2.descendants, set([18231]))
+
+        graph.add_node(u"Abraham Gotthelf Kaestner", u"Universit\xe4t Leipzig",
+                       1739, 66476, set([57670]), set([18230]))
+        node3 = graph[66476]
+        self.assertEquals(node1.ancestors, set([18230]))
+        self.assertEquals(node1.descendants, set())
+        self.assertEquals(node2.ancestors, set([66476]))
+        self.assertEquals(node2.descendants, set([18231]))
+        self.assertEquals(node3.ancestors, set())
+        self.assertEquals(node3.descendants, set([18230]))
+
+        graph.add_node(u"Christian August Hausen",
+                       u"Martin-Luther-Universit\xe4t Halle-Wittenberg", 1713,
+                       57670, set([72669]), set([66476]))
+        node4 = graph[57670]
+        self.assertEquals(node1.ancestors, set([18230]))
+        self.assertEquals(node1.descendants, set())
+        self.assertEquals(node2.ancestors, set([66476]))
+        self.assertEquals(node2.descendants, set([18231]))
+        self.assertEquals(node3.ancestors, set([57670]))
+        self.assertEquals(node3.descendants, set([18230]))
+        self.assertEquals(node4.ancestors, set())
+        self.assertEquals(node4.descendants, set([66476]))
+
+        graph.add_node(u"Johann Christoph Wichmannshausen",
+                       u"Universit\xe4t Leipzig", 1685, 72669, set([21235]),
+                       set([57670]))
+        node5 = graph[72669]
+        self.assertEquals(node1.ancestors, set([18230]))
+        self.assertEquals(node1.descendants, set())
+        self.assertEquals(node2.ancestors, set([66476]))
+        self.assertEquals(node2.descendants, set([18231]))
+        self.assertEquals(node3.ancestors, set([57670]))
+        self.assertEquals(node3.descendants, set([18230]))
+        self.assertEquals(node4.ancestors, set([72669]))
+        self.assertEquals(node4.descendants, set([66476]))
+        self.assertEquals(node5.ancestors, set())
+        self.assertEquals(node5.descendants, set([57670]))
+
+        graph.add_node(u"Otto Mencke", u"Universit\xe4t Leipzig", 1665, 21235,
+                       set(), set([72669]))
+        node6 = graph[21235]
+        self.assertEquals(node1.ancestors, set([18230]))
+        self.assertEquals(node1.descendants, set())
+        self.assertEquals(node2.ancestors, set([66476]))
+        self.assertEquals(node2.descendants, set([18231]))
+        self.assertEquals(node3.ancestors, set([57670]))
+        self.assertEquals(node3.descendants, set([18230]))
+        self.assertEquals(node4.ancestors, set([72669]))
+        self.assertEquals(node4.descendants, set([66476]))
+        self.assertEquals(node5.ancestors, set([21235]))
+        self.assertEquals(node5.descendants, set([57670]))
+        self.assertEquals(node6.ancestors, set())
+        self.assertEquals(node6.descendants, set([72669]))
+
+    def test017_incremental_ancestor_descendant_check2(self):
+        # Test the contents of the ancestors and descendants members of a
+        # graph's nodes as they are added inserted in a different ofder than
+        # in the previous test.
+        graph = Graph()
+        graph.add_node(u"Abraham Gotthelf Kaestner", u"Universit\xe4t Leipzig",
+                       1739, 66476, set([57670]), set([18230]))
+        node1 = graph[66476]
+        self.assertEquals(node1.ancestors, set())
+        self.assertEquals(node1.descendants, set())
+
+        graph.add_node(u"Johann Friedrich Pfaff",
+                       u"Georg-August-Universit\xe4t Goettingen", 1786, 18230,
+                       set([66476]), set([18231]))
+        node2 = graph[18230]
+        self.assertEquals(node1.ancestors, set())
+        self.assertEquals(node1.descendants, set([18230]))
+        self.assertEquals(node2.ancestors, set([66476]))
+        self.assertEquals(node2.descendants, set())
+
+        graph.add_node(u"Christian August Hausen",
+                       u"Martin-Luther-Universit\xe4t Halle-Wittenberg", 1713,
+                       57670, set([72669]), set([66476]))
+        node3 = graph[57670]
+        self.assertEquals(node1.ancestors, set([57670]))
+        self.assertEquals(node1.descendants, set([18230]))
+        self.assertEquals(node2.ancestors, set([66476]))
+        self.assertEquals(node2.descendants, set())
+        self.assertEquals(node3.ancestors, set())
+        self.assertEquals(node3.descendants, set([66476]))
+
+        graph.add_node(u"Johann Christoph Wichmannshausen",
+                       u"Universit\xe4t Leipzig", 1685, 72669, set([21235]),
+                       set([57670]))
+        node4 = graph[72669]
+        self.assertEquals(node1.ancestors, set([57670]))
+        self.assertEquals(node1.descendants, set([18230]))
+        self.assertEquals(node2.ancestors, set([66476]))
+        self.assertEquals(node2.descendants, set())
+        self.assertEquals(node3.ancestors, set([72669]))
+        self.assertEquals(node3.descendants, set([66476]))
+        self.assertEquals(node4.ancestors, set())
+        self.assertEquals(node4.descendants, set([57670]))
+
+        graph.add_node(u"Otto Mencke", u"Universit\xe4t Leipzig", 1665, 21235,
+                       set(), set([72669]))
+        node5 = graph[21235]
+        self.assertEquals(node1.ancestors, set([57670]))
+        self.assertEquals(node1.descendants, set([18230]))
+        self.assertEquals(node2.ancestors, set([66476]))
+        self.assertEquals(node2.descendants, set())
+        self.assertEquals(node3.ancestors, set([72669]))
+        self.assertEquals(node3.descendants, set([66476]))
+        self.assertEquals(node4.ancestors, set([21235]))
+        self.assertEquals(node4.descendants, set([57670]))
+        self.assertEquals(node5.ancestors, set())
+        self.assertEquals(node5.descendants, set([72669]))
+
+        graph.add_node(u"Carl Friedrich Gau\xdf", u"Universit\xe4t Helmstedt",
+                       1799, 18231, set([18230]), set([18603, 18233, 62547]))
+        node6 = graph[18231]
+        self.assertEquals(node1.ancestors, set([57670]))
+        self.assertEquals(node1.descendants, set([18230]))
+        self.assertEquals(node2.ancestors, set([66476]))
+        self.assertEquals(node2.descendants, set([18231]))
+        self.assertEquals(node3.ancestors, set([72669]))
+        self.assertEquals(node3.descendants, set([66476]))
+        self.assertEquals(node4.ancestors, set([21235]))
+        self.assertEquals(node4.descendants, set([57670]))
+        self.assertEquals(node5.ancestors, set())
+        self.assertEquals(node5.descendants, set([72669]))
+        self.assertEquals(node6.ancestors, set([18230]))
+        self.assertEquals(node6.descendants, set())
+
 if __name__ == '__main__':
     unittest.main()

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/debian-science/packages/geneagrapher.git



More information about the debian-science-commits mailing list