Renamed directory python into swig
authorJoris Mooij <joris.mooij@tuebingen.mpg.de>
Tue, 13 Oct 2009 15:09:59 +0000 (17:09 +0200)
committerJoris Mooij <joris.mooij@tuebingen.mpg.de>
Tue, 13 Oct 2009 15:09:59 +0000 (17:09 +0200)
python/Makefile [deleted file]
python/README [deleted file]
python/dai.i [deleted file]
python/example_sprinkler.py [deleted file]
python/test.py [deleted file]
swig/Makefile [new file with mode: 0644]
swig/README [new file with mode: 0644]
swig/dai.i [new file with mode: 0644]
swig/example_sprinkler.py [new file with mode: 0644]
swig/test.py [new file with mode: 0644]

diff --git a/python/Makefile b/python/Makefile
deleted file mode 100644 (file)
index 316148d..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-# This file is part of libDAI - http://www.libdai.org/
-#
-# libDAI is licensed under the terms of the GNU General Public License version
-# 2, or (at your option) any later version. libDAI is distributed without any
-# warranty. See the file COPYING for more details.
-#
-# Copyright (C) 2009  Patrick Pletscher  [pletscher at inf dot ethz dot ch]
-
-
-include ../Makefile.conf
-
-.PHONY:        all
-
-all:                   _dai.so
-
-_dai.so:               ../lib/libdai.a dai.i
-                       $(SWIG) -python -c++ dai.i
-                       g++ -Wall -c -O3 -g -fPIC dai_wrap.cxx -I$(INCLUDE_PYTHON) -I$(INCLUDE_BOOST) -I../include
-                       g++ -shared dai_wrap.o -o _dai.so ../lib/libdai.a
-
-dai.oct:               ../lib/libdai.a dai.i
-                       $(SWIG) -octave -c++ -o dai_wrap.cpp dai.i
-                       mkoctfile -I$(INCLUDE_PYTHON) -I$(INCLUDE_BOOST) -I../include -l../lib/libdai.a dai_wrap.cpp
-
-.PHONY: clean
-
-clean:         
-                       rm -f dai_wrap.cxx dai_wrap.cpp dai_wrap.o _dai.so dai.oct dai.py dai.pyc sprinkler.fg
diff --git a/python/README b/python/README
deleted file mode 100644 (file)
index bebf640..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-This directory contains preliminary experimental SWIG wrappers for libDAI
-written by Patrick Pletscher. They enable usage of libDAI functionality
-directly from python and octave.
diff --git a/python/dai.i b/python/dai.i
deleted file mode 100644 (file)
index cfdfe85..0000000
+++ /dev/null
@@ -1,85 +0,0 @@
-/*  This file is part of libDAI - http://www.libdai.org/
- *
- *  libDAI is licensed under the terms of the GNU General Public License version
- *  2, or (at your option) any later version. libDAI is distributed without any
- *  warranty. See the file COPYING for more details.
- *
- *  Copyright (C) 2009  Patrick Pletscher  [pletscher at inf dot ethz dot ch]
- */
-
-
-%module dai
-
-        struct Neighbor {
-            size_t iter;
-            size_t node;
-            size_t dual;
-
-            Neighbor() {}
-            Neighbor( size_t iter, size_t node, size_t dual ) : iter(iter), node(node), dual(dual) {}
-
-            operator size_t () const { return node; }
-        };
-
-%{
-#include "../include/dai/var.h"
-#include "../include/dai/smallset.h"
-#include "../include/dai/varset.h"
-#include "../include/dai/prob.h"
-#include "../include/dai/factor.h"
-#include "../include/dai/bipgraph.h"
-#include "../include/dai/factorgraph.h"
-#include "../include/dai/util.h"
-%}
-
-%ignore dai::TProb::operator[];
-%ignore dai::TFactor::operator[];
-
-%include "../include/dai/util.h"
-%include "../include/dai/var.h"
-%include "../include/dai/smallset.h"
-%template(SmallSetVar) dai::SmallSet< dai::Var >;
-%include "../include/dai/varset.h"
-%extend dai::VarSet {
-        inline void append(const dai::Var &v) { (*self) |= v; }
-};
-
-%include "../include/dai/prob.h"
-%template(Prob) dai::TProb<Real>;
-%extend dai::TProb<Real> {
-        inline Real __getitem__(int i) const {return (*self)[i];}
-        inline void __setitem__(int i,Real d) {(*self)[i] = d;}
-        %template(TProbRealConstructor) TProb<double *>;
-        %template(TProbIntConstructor)  TProb<size_t *>;
-};
-%include "../include/dai/factor.h"
-%extend dai::TFactor<Real> {
-        inline Real __getitem__(int i) const {return (*self)[i];}
-        inline void __setitem__(int i,Real d) {(*self)[i] = d;}
-};
-
-%template(Factor) dai::TFactor<Real>;
-%include "../include/dai/bipgraph.h"
-%include "../include/dai/factorgraph.h"
-%include "std_vector.i"
-// TODO: typemaps for the vectors (input/output python arrays)
-%inline{
-typedef std::vector<dai::Factor> VecFactor;
-typedef std::vector< VecFactor > VecVecFactor;
-}
-%template(VecFactor) std::vector< dai::Factor >;
-%template(VecVecFactor) std::vector< VecFactor >;
-
-%{
-typedef dai::BipartiteGraph::Neighbor Neighbor;
-%}
-
-%include "../include/dai/index.h"
-%extend dai::MultiFor {
-    inline size_t __getitem__(int i) const {
-        return (*self)[i];
-    }
-    inline void next() {
-        return (*self)++;
-    }
-};
diff --git a/python/example_sprinkler.py b/python/example_sprinkler.py
deleted file mode 100644 (file)
index a94a795..0000000
+++ /dev/null
@@ -1,83 +0,0 @@
-# This file is part of libDAI - http://www.libdai.org/
-#
-# libDAI is licensed under the terms of the GNU General Public License version
-# 2, or (at your option) any later version. libDAI is distributed without any
-# warranty. See the file COPYING for more details.
-#
-# Copyright (C) 2009  Joris Mooij  [joris dot mooij at libdai dot org]
-
-
-# This example program illustrates how to construct a factorgraph
-# by means of the sprinkler network example discussed at
-# http://www.cs.ubc.ca/~murphyk/Bayes/bnintro.html
-# using the SWIG python wrapper of libDAI
-
-
-import dai
-
-C = dai.Var(0, 2)  # Define binary variable Cloudy (with label 0)
-S = dai.Var(1, 2)  # Define binary variable Sprinkler (with label 1)
-R = dai.Var(2, 2)  # Define binary variable Rain (with label 2)
-W = dai.Var(3, 2)  # Define binary variable Wetgrass (with label 3)
-
-# Define probability distribution for C
-P_C = dai.Factor(C)
-P_C[0] = 0.5            # C = 0
-P_C[1] = 0.5            # C = 1
-
-# Define conditional probability of S given C
-P_S_given_C = dai.Factor(dai.VarSet(S,C))
-P_S_given_C[0] = 0.5    # C = 0, S = 0
-P_S_given_C[1] = 0.9    # C = 1, S = 0
-P_S_given_C[2] = 0.5    # C = 0, S = 1
-P_S_given_C[3] = 0.1    # C = 1, S = 1
-
-# Define conditional probability of R given C
-P_R_given_C = dai.Factor(dai.VarSet(R,C))
-P_R_given_C[0] = 0.8    # C = 0, R = 0
-P_R_given_C[1] = 0.2    # C = 1, R = 0
-P_R_given_C[2] = 0.2    # C = 0, R = 1
-P_R_given_C[3] = 0.8    # C = 1, R = 1
-
-# Define conditional probability of W given S and R
-SRW = dai.VarSet(S,R)
-SRW.append(W)
-P_W_given_S_R = dai.Factor(SRW)
-P_W_given_S_R[0] = 1.0  # S = 0, R = 0, W = 0
-P_W_given_S_R[1] = 0.1  # S = 1, R = 0, W = 0
-P_W_given_S_R[2] = 0.1  # S = 0, R = 1, W = 0
-P_W_given_S_R[3] = 0.01 # S = 1, R = 1, W = 0
-P_W_given_S_R[4] = 0.0  # S = 0, R = 0, W = 1
-P_W_given_S_R[5] = 0.9  # S = 1, R = 0, W = 1
-P_W_given_S_R[6] = 0.9  # S = 0, R = 1, W = 1
-P_W_given_S_R[7] = 0.99 # S = 1, R = 1, W = 1
-
-# Build factor graph consisting of those four factors
-SprinklerFactors = dai.VecFactor()
-SprinklerFactors.append(P_C)
-SprinklerFactors.append(P_R_given_C)
-SprinklerFactors.append(P_S_given_C)
-SprinklerFactors.append(P_W_given_S_R)
-SprinklerNetwork = dai.FactorGraph(SprinklerFactors)
-
-# Write factorgraph to a file
-SprinklerNetwork.WriteToFile('sprinkler.fg')
-
-# Reread the factorgraph from the file
-SprinklerNetwork.ReadFromFile('sprinkler.fg')
-
-# Output some information about the factorgraph
-print SprinklerNetwork.nrVars(), 'variables'
-print SprinklerNetwork.nrFactors(), 'factors'
-
-# Calculate joint probability of all four variables
-P = dai.Factor()
-for I in range(SprinklerNetwork.nrFactors()):
-    P *= SprinklerNetwork.factor(I)
-P.normalize()  # Not necessary: a Bayesian network is already normalized by definition
-
-# Calculate some probabilities
-denom = P.marginal(dai.VarSet(W))[1]
-print 'P(W=1) =', denom
-print 'P(S=1 | W=1) =', P.marginal(dai.VarSet(S,W))[3] / denom
-print 'P(R=1 | W=1) =', P.marginal(dai.VarSet(R,W))[3] / denom
diff --git a/python/test.py b/python/test.py
deleted file mode 100644 (file)
index 970efdc..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-import dai
-
-v1 = dai.Var(0,4)
-v2 = dai.Var(1,3)
-vs = dai.VarSet(v1,v2)
-f = dai.Factor(vs)
-fVec = dai.VecFactor()
-fVec.append(f)
-fg = dai.FactorGraph(fVec)
diff --git a/swig/Makefile b/swig/Makefile
new file mode 100644 (file)
index 0000000..316148d
--- /dev/null
@@ -0,0 +1,28 @@
+# This file is part of libDAI - http://www.libdai.org/
+#
+# libDAI is licensed under the terms of the GNU General Public License version
+# 2, or (at your option) any later version. libDAI is distributed without any
+# warranty. See the file COPYING for more details.
+#
+# Copyright (C) 2009  Patrick Pletscher  [pletscher at inf dot ethz dot ch]
+
+
+include ../Makefile.conf
+
+.PHONY:        all
+
+all:                   _dai.so
+
+_dai.so:               ../lib/libdai.a dai.i
+                       $(SWIG) -python -c++ dai.i
+                       g++ -Wall -c -O3 -g -fPIC dai_wrap.cxx -I$(INCLUDE_PYTHON) -I$(INCLUDE_BOOST) -I../include
+                       g++ -shared dai_wrap.o -o _dai.so ../lib/libdai.a
+
+dai.oct:               ../lib/libdai.a dai.i
+                       $(SWIG) -octave -c++ -o dai_wrap.cpp dai.i
+                       mkoctfile -I$(INCLUDE_PYTHON) -I$(INCLUDE_BOOST) -I../include -l../lib/libdai.a dai_wrap.cpp
+
+.PHONY: clean
+
+clean:         
+                       rm -f dai_wrap.cxx dai_wrap.cpp dai_wrap.o _dai.so dai.oct dai.py dai.pyc sprinkler.fg
diff --git a/swig/README b/swig/README
new file mode 100644 (file)
index 0000000..bebf640
--- /dev/null
@@ -0,0 +1,3 @@
+This directory contains preliminary experimental SWIG wrappers for libDAI
+written by Patrick Pletscher. They enable usage of libDAI functionality
+directly from python and octave.
diff --git a/swig/dai.i b/swig/dai.i
new file mode 100644 (file)
index 0000000..cfdfe85
--- /dev/null
@@ -0,0 +1,85 @@
+/*  This file is part of libDAI - http://www.libdai.org/
+ *
+ *  libDAI is licensed under the terms of the GNU General Public License version
+ *  2, or (at your option) any later version. libDAI is distributed without any
+ *  warranty. See the file COPYING for more details.
+ *
+ *  Copyright (C) 2009  Patrick Pletscher  [pletscher at inf dot ethz dot ch]
+ */
+
+
+%module dai
+
+        struct Neighbor {
+            size_t iter;
+            size_t node;
+            size_t dual;
+
+            Neighbor() {}
+            Neighbor( size_t iter, size_t node, size_t dual ) : iter(iter), node(node), dual(dual) {}
+
+            operator size_t () const { return node; }
+        };
+
+%{
+#include "../include/dai/var.h"
+#include "../include/dai/smallset.h"
+#include "../include/dai/varset.h"
+#include "../include/dai/prob.h"
+#include "../include/dai/factor.h"
+#include "../include/dai/bipgraph.h"
+#include "../include/dai/factorgraph.h"
+#include "../include/dai/util.h"
+%}
+
+%ignore dai::TProb::operator[];
+%ignore dai::TFactor::operator[];
+
+%include "../include/dai/util.h"
+%include "../include/dai/var.h"
+%include "../include/dai/smallset.h"
+%template(SmallSetVar) dai::SmallSet< dai::Var >;
+%include "../include/dai/varset.h"
+%extend dai::VarSet {
+        inline void append(const dai::Var &v) { (*self) |= v; }
+};
+
+%include "../include/dai/prob.h"
+%template(Prob) dai::TProb<Real>;
+%extend dai::TProb<Real> {
+        inline Real __getitem__(int i) const {return (*self)[i];}
+        inline void __setitem__(int i,Real d) {(*self)[i] = d;}
+        %template(TProbRealConstructor) TProb<double *>;
+        %template(TProbIntConstructor)  TProb<size_t *>;
+};
+%include "../include/dai/factor.h"
+%extend dai::TFactor<Real> {
+        inline Real __getitem__(int i) const {return (*self)[i];}
+        inline void __setitem__(int i,Real d) {(*self)[i] = d;}
+};
+
+%template(Factor) dai::TFactor<Real>;
+%include "../include/dai/bipgraph.h"
+%include "../include/dai/factorgraph.h"
+%include "std_vector.i"
+// TODO: typemaps for the vectors (input/output python arrays)
+%inline{
+typedef std::vector<dai::Factor> VecFactor;
+typedef std::vector< VecFactor > VecVecFactor;
+}
+%template(VecFactor) std::vector< dai::Factor >;
+%template(VecVecFactor) std::vector< VecFactor >;
+
+%{
+typedef dai::BipartiteGraph::Neighbor Neighbor;
+%}
+
+%include "../include/dai/index.h"
+%extend dai::MultiFor {
+    inline size_t __getitem__(int i) const {
+        return (*self)[i];
+    }
+    inline void next() {
+        return (*self)++;
+    }
+};
diff --git a/swig/example_sprinkler.py b/swig/example_sprinkler.py
new file mode 100644 (file)
index 0000000..a94a795
--- /dev/null
@@ -0,0 +1,83 @@
+# This file is part of libDAI - http://www.libdai.org/
+#
+# libDAI is licensed under the terms of the GNU General Public License version
+# 2, or (at your option) any later version. libDAI is distributed without any
+# warranty. See the file COPYING for more details.
+#
+# Copyright (C) 2009  Joris Mooij  [joris dot mooij at libdai dot org]
+
+
+# This example program illustrates how to construct a factorgraph
+# by means of the sprinkler network example discussed at
+# http://www.cs.ubc.ca/~murphyk/Bayes/bnintro.html
+# using the SWIG python wrapper of libDAI
+
+
+import dai
+
+C = dai.Var(0, 2)  # Define binary variable Cloudy (with label 0)
+S = dai.Var(1, 2)  # Define binary variable Sprinkler (with label 1)
+R = dai.Var(2, 2)  # Define binary variable Rain (with label 2)
+W = dai.Var(3, 2)  # Define binary variable Wetgrass (with label 3)
+
+# Define probability distribution for C
+P_C = dai.Factor(C)
+P_C[0] = 0.5            # C = 0
+P_C[1] = 0.5            # C = 1
+
+# Define conditional probability of S given C
+P_S_given_C = dai.Factor(dai.VarSet(S,C))
+P_S_given_C[0] = 0.5    # C = 0, S = 0
+P_S_given_C[1] = 0.9    # C = 1, S = 0
+P_S_given_C[2] = 0.5    # C = 0, S = 1
+P_S_given_C[3] = 0.1    # C = 1, S = 1
+
+# Define conditional probability of R given C
+P_R_given_C = dai.Factor(dai.VarSet(R,C))
+P_R_given_C[0] = 0.8    # C = 0, R = 0
+P_R_given_C[1] = 0.2    # C = 1, R = 0
+P_R_given_C[2] = 0.2    # C = 0, R = 1
+P_R_given_C[3] = 0.8    # C = 1, R = 1
+
+# Define conditional probability of W given S and R
+SRW = dai.VarSet(S,R)
+SRW.append(W)
+P_W_given_S_R = dai.Factor(SRW)
+P_W_given_S_R[0] = 1.0  # S = 0, R = 0, W = 0
+P_W_given_S_R[1] = 0.1  # S = 1, R = 0, W = 0
+P_W_given_S_R[2] = 0.1  # S = 0, R = 1, W = 0
+P_W_given_S_R[3] = 0.01 # S = 1, R = 1, W = 0
+P_W_given_S_R[4] = 0.0  # S = 0, R = 0, W = 1
+P_W_given_S_R[5] = 0.9  # S = 1, R = 0, W = 1
+P_W_given_S_R[6] = 0.9  # S = 0, R = 1, W = 1
+P_W_given_S_R[7] = 0.99 # S = 1, R = 1, W = 1
+
+# Build factor graph consisting of those four factors
+SprinklerFactors = dai.VecFactor()
+SprinklerFactors.append(P_C)
+SprinklerFactors.append(P_R_given_C)
+SprinklerFactors.append(P_S_given_C)
+SprinklerFactors.append(P_W_given_S_R)
+SprinklerNetwork = dai.FactorGraph(SprinklerFactors)
+
+# Write factorgraph to a file
+SprinklerNetwork.WriteToFile('sprinkler.fg')
+
+# Reread the factorgraph from the file
+SprinklerNetwork.ReadFromFile('sprinkler.fg')
+
+# Output some information about the factorgraph
+print SprinklerNetwork.nrVars(), 'variables'
+print SprinklerNetwork.nrFactors(), 'factors'
+
+# Calculate joint probability of all four variables
+P = dai.Factor()
+for I in range(SprinklerNetwork.nrFactors()):
+    P *= SprinklerNetwork.factor(I)
+P.normalize()  # Not necessary: a Bayesian network is already normalized by definition
+
+# Calculate some probabilities
+denom = P.marginal(dai.VarSet(W))[1]
+print 'P(W=1) =', denom
+print 'P(S=1 | W=1) =', P.marginal(dai.VarSet(S,W))[3] / denom
+print 'P(R=1 | W=1) =', P.marginal(dai.VarSet(R,W))[3] / denom
diff --git a/swig/test.py b/swig/test.py
new file mode 100644 (file)
index 0000000..970efdc
--- /dev/null
@@ -0,0 +1,9 @@
+import dai
+
+v1 = dai.Var(0,4)
+v2 = dai.Var(1,3)
+vs = dai.VarSet(v1,v2)
+f = dai.Factor(vs)
+fVec = dai.VecFactor()
+fVec.append(f)
+fg = dai.FactorGraph(fVec)