From e2e84ac09390da4fb51ff02a51c3a63661794ee3 Mon Sep 17 00:00:00 2001
From: mbaumBielefeld <mbaum@TechFak.Uni-Bielefeld.DE>
Date: Mon, 12 Nov 2012 14:05:45 +0100
Subject: [PATCH] =?UTF-8?q?Bayesnet=20um=20Basisfunktionalit=C3=A4t=20erwe?=
 =?UTF-8?q?itert?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 ExampleBayesNet.py | 25 ++++++++++++++++---
 core/BayesNet.py   | 61 ++++++++++++++++++++++++++++++++++++++++++----
 core/Node.py       |  5 +++-
 3 files changed, 82 insertions(+), 9 deletions(-)

diff --git a/ExampleBayesNet.py b/ExampleBayesNet.py
index 903c9ce..af08319 100644
--- a/ExampleBayesNet.py
+++ b/ExampleBayesNet.py
@@ -2,7 +2,26 @@ from  core.BayesNet import *
 from  core.Node import *
 
 bn = BayesNet()
-n = Node()
+n1 = Node("Node1")
+n2 = Node("Node2")
+n3 = Node("Node3")
 
-bn.add_node(n)
-bn.add_node("lol")
+bn.add_node(n1)
+bn.add_node(n2)
+
+bn.add_edge(n1,n2)
+
+n = bn.get_node("Node1")
+print n.name
+
+ns = bn.get_nodes(["Node2","Node1"])
+for n in ns:
+    print n.name
+
+print "Removing existing edge"
+bn.remove_edge(n1, n2)
+print "Removing not existing edge"
+bn.remove_edge(n1, n2)
+
+
+bn.draw()
diff --git a/core/BayesNet.py b/core/BayesNet.py
index 2438291..460a506 100644
--- a/core/BayesNet.py
+++ b/core/BayesNet.py
@@ -1,18 +1,69 @@
 import sys
-sys.path.append("../lib/networkx-1.7-py2.7.egg")
+
+sys.path.append("lib/networkx-1.7-py2.7.egg")
 import networkx as nx
-import Node.Node
+from core.Node import Node
 
 class BayesNet(object):
     graph = nx.DiGraph()
+    node_lookup = {}
 
     def __init__(self):
-        print "lol"
+        pass
 
     
     def add_node(self, node):
-        if isinstance(node, Node.Node):
+        if isinstance(node, Node):
+            if node.name in self.node_lookup.keys():
+                raise Exception("Node name already exists in Bayesnet: "+node.name)
+            self.node_lookup[node.name]=node
             self.graph.add_node(node)
         else:
             raise Exception("Can only add 'Node' and its subclasses as nodes into the BayesNet")
-    
+
+    def add_edge(self, node_from, node_to):
+        if node_from in self.graph.nodes() and node_to in self.graph.nodes():
+            self.graph.add_edge(node_from, node_to)
+
+            #raise Exception("Fixme: Adapt CPD of child-node")
+
+        else:
+            raise Exception("Tried to add an Edge between two Nodes of which at least one was not contained in the Bayesnet")
+
+    def remove_node(self, node):
+        raise Exception("Called unimplemented function")
+
+    def remove_edge(self, node_from, node_to):
+        try:
+            self.graph.remove_edge(node_from, node_to)
+        except nx.exception.NetworkXError:
+            raise Exception("Tried to remove an Edge which does not exist in the BayesNet")
+        #raise Exception("Fixme: Adapt CPD of child-node")
+
+    def get_node(self, node_name):
+        try:
+            return self.node_lookup[node_name]
+        except KeyError:
+            raise Exception("There is no node with name "+node_name+" in the bayesnet")        
+
+    def get_nodes(self, node_names):
+        for node_name in node_names:
+            yield self.get_node(node_name)
+
+    def get_parents(self, node):
+        raise Exception("Called unimplemented function")
+
+    def get_children(self, node):
+        raise Exception("Called unimplemented function")
+
+    def get_markov_blanket(self, node):
+        raise Exception("Called unimplemented function")
+
+    def is_dag(self):
+        raise Exception("Called unimplemented function")
+
+    def draw(self):
+        import matplotlib.pyplot as plt
+        nx.draw(self.graph)
+        plt.show() 
+ 
diff --git a/core/Node.py b/core/Node.py
index c67a764..d3c158a 100644
--- a/core/Node.py
+++ b/core/Node.py
@@ -1,2 +1,5 @@
 class Node(object):
-    name = "SomeNode"
+    name = "UninitializedName"
+
+    def __init__(self, node_name):
+        self.name = node_name
-- 
GitLab