Fixed regressions in SWIG code
authorJoris Mooij <joris.mooij@tuebingen.mpg.de>
Tue, 3 Nov 2009 16:40:12 +0000 (17:40 +0100)
committerJoris Mooij <joris.mooij@tuebingen.mpg.de>
Tue, 3 Nov 2009 16:40:12 +0000 (17:40 +0100)
include/dai/index.h
swig/Makefile
swig/dai.i
swig/example_sprinkler.m

index b7fb835..733afd8 100644 (file)
@@ -388,10 +388,10 @@ class State {
         }
 
         /// Return current state represented as a map
-        const states_type& get() const { return states; }
+        const std::map<Var,size_t>& get() const { return states; }
 
         /// Cast into std::map<Var, size_t>
-        operator const states_type& () const { return states; }
+        operator const std::map<Var,size_t>& () const { return states; }
 
         /// Return current state of variable \a v, or 0 if \a v is not in \c *this
         size_t operator() ( const Var &v ) const {
index 5baced3..0944600 100644 (file)
@@ -20,7 +20,7 @@ _dai.so:              ../lib/libdai.a dai.i
 
 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 -o dai.oct dai_wrap.cpp ../lib/libdai.a
+                       mkoctfile -I$(INCLUDE_BOOST) -I../include -o dai.oct dai_wrap.cpp ../lib/libdai.a
 
 .PHONY: clean
 
index 0ff6357..058250d 100644 (file)
 };
 
 %include "../include/dai/prob.h"
-%template(Prob) dai::TProb<Real>;
-%extend dai::TProb<Real> {
-        inline Real __getitem__(int i) const {return (*self)[i];} /* for python */
-        inline void __setitem__(int i,Real d) {(*self)[i] = d;}   /* for python */
-        inline Real __paren(int i) const {return (*self)[i];}     /* for octave */
-        inline void __paren_asgn(int i,Real d) {(*self)[i] = d;}  /* for octave */
+%template(Prob) dai::TProb<dai::Real>;
+%extend dai::TProb<dai::Real> {
+        inline dai::Real __getitem__(int i) const {return (*self)[i];} /* for python */
+        inline void __setitem__(int i,dai::Real d) {(*self)[i] = d;}   /* for python */
+        inline dai::Real __paren(int i) const {return (*self)[i];}     /* for octave */
+        inline void __paren_asgn(int i,dai::Real d) {(*self)[i] = d;}  /* for octave */
 };
 %include "../include/dai/factor.h"
-%extend dai::TFactor<Real> {
-        inline Real __getitem__(int i) const {return (*self)[i];} /* for python */
-        inline void __setitem__(int i,Real d) {(*self)[i] = d;}   /* for python */
-        inline Real __paren(int i) const {return (*self)[i];}     /* for octave */
-        inline void __paren_asgn(int i,Real d) {(*self)[i] = d;}  /* for octave */
+%extend dai::TFactor<dai::Real> {
+        inline dai::Real __getitem__(int i) const {return (*self)[i];} /* for python */
+        inline void __setitem__(int i,dai::Real d) {(*self)[i] = d;}   /* for python */
+        inline dai::Real __paren(int i) const {return (*self)[i];}     /* for octave */
+        inline void __paren_asgn(int i,dai::Real d) {(*self)[i] = d;}  /* for octave */
 };
 
-%template(Factor) dai::TFactor<Real>;
+%template(Factor) dai::TFactor<dai::Real>;
 %include "../include/dai/bipgraph.h"
 %include "../include/dai/factorgraph.h"
 %include "std_vector.i"
@@ -78,7 +78,7 @@ typedef dai::BipartiteGraph::Neighbor Neighbor;
 %}
 
 %include "../include/dai/index.h"
-%extend dai::MultiFor {
+%extend dai::multifor {
     inline size_t __getitem__(int i) const {
         return (*self)[i];
     }
index eee31b6..b714b89 100644 (file)
@@ -68,3 +68,16 @@ SprinklerNetwork.ReadFromFile('sprinkler.fg');
 % Output some information about the factorgraph
 fprintf('%d variables\n', SprinklerNetwork.nrVars());
 fprintf('%d factors\n', SprinklerNetwork.nrFactors());
+
+% Calculate joint probability of all four variables
+P = dai.Factor();
+for I = 0:(SprinklerNetwork.nrFactors()-1)
+    P *= SprinklerNetwork.factor(I);
+end
+P.normalize(); % Not necessary: a Bayesian network is already normalized by definition
+
+% Calculate some probabilities
+denom = P.marginal(dai.VarSet(W))(1);
+fprintf('P(W=1) = %f\n', denom);
+fprintf('P(S=1 | W=1) = %f\n', P.marginal(dai.VarSet(S,W))(3) / denom);
+fprintf('P(R=1 | W=1) = %f\n', P.marginal(dai.VarSet(R,W))(3) / denom);