1 /**
2  *
3  *  Copyright 2005-2019 Pierre-Henri WUILLEMIN et Christophe GONZALES (LIP6)
4  *   {prenom.nom}_at_lip6.fr
5  *
6  *  This library is free software: you can redistribute it and/or modify
7  *  it under the terms of the GNU Lesser General Public License as published by
8  *  the Free Software Foundation, either version 3 of the License, or
9  *  (at your option) any later version.
10  *
11  *  This library is distributed in the hope that it will be useful,
12  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
13  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14  *  GNU Lesser General Public License for more details.
15  *
16  *  You should have received a copy of the GNU Lesser General Public License
17  *  along with this library.  If not, see <http://www.gnu.org/licenses/>.
18  *
19  */
20 
21 // this file is for giving access to methods defined in ancestor.
22 
23 %define ADD_APPROXIMATIONSCHEME_API(parent,classname...)
24 %extend classname {
25   using parent::setVerbosity;
26   using parent::setEpsilon;
27   using parent::setMinEpsilonRate;
28   using parent::setMaxIter;
29   using parent::setMaxTime;
30   using parent::setPeriodSize;
31 
32   using parent::verbosity;
33   using parent::epsilon;
34   using parent::minEpsilonRate;
35   using parent::maxIter;
36   using parent::maxTime;
37   using parent::periodSize;
38 
39   using parent::nbrIterations;
40   using parent::currentTime;
41 
42   using parent::messageApproximationScheme;
43   using parent::history;
44 
_asIApproximationSchemeConfiguration()45   const gum::IApproximationSchemeConfiguration& _asIApproximationSchemeConfiguration() const {
46     return *(dynamic_cast<const gum::IApproximationSchemeConfiguration *>(self));
47   }
48 }
49 %enddef
50 ADD_APPROXIMATIONSCHEME_API(gum::ApproximationScheme,gum::GibbsSampling<double>)
51 ADD_APPROXIMATIONSCHEME_API(gum::ApproximationScheme,gum::ImportanceSampling<double>)
52 ADD_APPROXIMATIONSCHEME_API(gum::ApproximationScheme,gum::WeightedSampling<double>)
53 ADD_APPROXIMATIONSCHEME_API(gum::ApproximationScheme,gum::MonteCarloSampling<double>)
54 ADD_APPROXIMATIONSCHEME_API(gum::ApproximationScheme,gum::LoopySamplingInference<double,gum::ImportanceSampling>)
55 ADD_APPROXIMATIONSCHEME_API(gum::ApproximationScheme,gum::LoopySamplingInference<double,gum::WeightedSampling>)
56 ADD_APPROXIMATIONSCHEME_API(gum::ApproximationScheme,gum::LoopySamplingInference<double,gum::GibbsSampling>)
57 ADD_APPROXIMATIONSCHEME_API(gum::ApproximationScheme,gum::LoopySamplingInference<double,gum::MonteCarloSampling>)
58 
59 ADD_APPROXIMATIONSCHEME_API(gum::ApproximationScheme,gum::LoopyBeliefPropagation<double>)
60 
61 ADD_APPROXIMATIONSCHEME_API(gum::ApproximationScheme,gum::GibbsBNdistance<double>)
62 
63 ADD_APPROXIMATIONSCHEME_API(gum::ApproximationScheme,gum::credal::CNMonteCarloSampling<double>)
64 ADD_APPROXIMATIONSCHEME_API(gum::ApproximationScheme,gum::credal::CNLoopyPropagation<double>)
65 ADD_APPROXIMATIONSCHEME_API(gum::learning::genericBNLearner,gum::learning::BNLearner<double>)
66 
67 %extend gum::learning::BNLearner<double> {
68   using gum::learning::genericBNLearner::setMaxTime;
69   using gum::learning::genericBNLearner::maxTime;
70   using gum::learning::genericBNLearner::currentTime;
71 
72   using gum::learning::genericBNLearner::learnDAG;
73   using gum::learning::genericBNLearner::names;
74   using gum::learning::genericBNLearner::modalities;
75   using gum::learning::genericBNLearner::idFromName;
76   using gum::learning::genericBNLearner::nameFromId;
77   using gum::learning::genericBNLearner::useScoreAIC;
78   using gum::learning::genericBNLearner::useScoreBD;
79   using gum::learning::genericBNLearner::useScoreBDeu;
80   using gum::learning::genericBNLearner::useScoreBIC;
81   using gum::learning::genericBNLearner::useScoreK2;
82   using gum::learning::genericBNLearner::useScoreLog2Likelihood;
83   using gum::learning::genericBNLearner::setDatabaseWeight;
84   using gum::learning::genericBNLearner::setRecordWeight;
85   using gum::learning::genericBNLearner::databaseWeight;
86   using gum::learning::genericBNLearner::recordWeight;
87   using gum::learning::genericBNLearner::useNoApriori;
88   using gum::learning::genericBNLearner::useAprioriSmoothing;
89   using gum::learning::genericBNLearner::useAprioriDirichlet;
90   using gum::learning::genericBNLearner::useAprioriBDeu;
91   using gum::learning::genericBNLearner::useGreedyHillClimbing;
92   using gum::learning::genericBNLearner::useLocalSearchWithTabuList;
93   using gum::learning::genericBNLearner::useK2;
94   using gum::learning::genericBNLearner::setMaxIndegree;
95   using gum::learning::genericBNLearner::setSliceOrder;
96   using gum::learning::genericBNLearner::setPossibleSkeleton;
97   using gum::learning::genericBNLearner::addPossibleEdge;
98   using gum::learning::genericBNLearner::erasePossibleEdge;
99   using gum::learning::genericBNLearner::addForbiddenArc;
100   using gum::learning::genericBNLearner::eraseForbiddenArc;
101   using gum::learning::genericBNLearner::addMandatoryArc;
102   using gum::learning::genericBNLearner::addMandatoryArc;
103   using gum::learning::genericBNLearner::eraseMandatoryArc;
104   using gum::learning::genericBNLearner::useEM;
105   using gum::learning::genericBNLearner::hasMissingValues;
106   using gum::learning::genericBNLearner::logLikelihood;
107   using gum::learning::genericBNLearner::rawPseudoCount;
108   using gum::learning::genericBNLearner::nbRows;
109   using gum::learning::genericBNLearner::nbCols;
110   using gum::learning::genericBNLearner::domainSize;
111 }
112 
113 #####################################
114 
115 %define ADD_NODEGRAPHPART_API(classname)
116 %extend classname {
117   // erase node is not in this list since it is redefined by the very classes {Mixed|Di|Undi}Graph)
addNode()118   gum::NodeId addNode() {
119     return self->gum::NodeGraphPart::addNode();
120   }
addNodes(gum::Size n)121   std::vector<gum::NodeId> addNodes(gum::Size n) {
122     return self->gum::NodeGraphPart::addNodes(n);
123   }
addNodeWithId(const gum::NodeId id)124   void addNodeWithId(const gum::NodeId id) {
125     self->gum::NodeGraphPart::addNodeWithId(id);
126   }
existsNode(const gum::NodeId id)127   bool existsNode(const gum::NodeId id) const {
128     return self->gum::NodeGraphPart::existsNode(id);
129   }
size()130   gum::Size size() const {
131     return self->gum::NodeGraphPart::size();
132   }
empty()133   bool empty() const {
134     return self->gum::NodeGraphPart::empty();
135   }
136 }
137 %enddef
138 ADD_NODEGRAPHPART_API(gum::DiGraph)
139 ADD_ARCGRAPHPART_API(gum::DAG);
140 ADD_NODEGRAPHPART_API(gum::UndiGraph)
141 ADD_NODEGRAPHPART_API(gum::MixedGraph)
142 
143 %define ADD_EDGEGRAPHPART_API(classname)
144 %extend classname {
addEdge(const NodeId n1,const NodeId n2)145   void addEdge(const NodeId n1,const NodeId n2) {
146     self->addEdge(n1,n2);
147   }
eraseEdge(const NodeId n1,const NodeId n2)148   void eraseEdge(const NodeId n1,const NodeId n2) {
149     self->eraseEdge(gum::Edge(n1,n2));
150   }
existsEdge(const NodeId n1,const NodeId n2)151   bool existsEdge(const NodeId n1, const NodeId n2) const {
152     return self->existsEdge(n1,n2);
153   }
sizeEdges()154   gum::Size sizeEdges() const {
155     return self->sizeEdges();
156   }
emptyEdges()157   bool emptyEdges() const {
158     return self->emptyEdges();
159   }
eraseNeighbours(const gum::NodeId n)160   void eraseNeighbours(const gum::NodeId n) {
161     self->eraseNeighbours(n);
162   }
163 }
164 %enddef
165 ADD_EDGEGRAPHPART_API(gum::UndiGraph)
166 ADD_EDGEGRAPHPART_API(gum::MixedGraph)
167 
168 %define ADD_ARCGRAPHPART_API(classname)
169 %extend classname {
addArc(const gum::NodeId n1,const gum::NodeId n2)170   void addArc(const gum::NodeId n1,const gum::NodeId n2) {
171     self->addArc(n1,n2);
172   }
eraseArc(const gum::NodeId n1,const gum::NodeId n2)173   void eraseArc(const gum::NodeId n1,const gum::NodeId n2) {
174     self->eraseArc(gum::Arc(n1,n2));
175   }
existsArc(const gum::NodeId n1,const gum::NodeId n2)176   bool existsArc(const gum::NodeId n1,const gum::NodeId n2) const {
177     return self->existsArc(n1,n2);
178   }
eraseParents(const gum::NodeId n)179   void eraseParents(const gum::NodeId n) {
180     self->eraseParents(n);
181   }
eraseChildren(const gum::NodeId n)182   void eraseChildren(const gum::NodeId n) {
183     self->eraseChildren(n);
184   }
sizeArcs()185   gum::Size sizeArcs() const {
186     return self->sizeArcs();
187   }
emptyArcs()188   bool emptyArcs() const {
189     return self->emptyArcs();
190   }
191 }
192 %enddef
193 ADD_ARCGRAPHPART_API(gum::DiGraph);
194 ADD_ARCGRAPHPART_API(gum::DAG);
195 ADD_ARCGRAPHPART_API(gum::MixedGraph);
196 
197 
198 #####################################
199 %define ADD_MULTIDIMDECORATOR_API(classname)
200 %extend classname {
201 /* wrapping the minimal interface from MultiDimDecorator */
get(const gum::Instantiation & i)202   double get(const gum::Instantiation& i) const {
203     return self->gum::MultiDimDecorator<double>::get(i);
204   }
205 
set(const Instantiation & i,const double & value)206   void set ( const Instantiation& i, const double& value ) const {
207     self->gum::MultiDimDecorator<double>::set(i,value);
208   }
209 
empty()210   bool empty() const {
211     return self->gum::MultiDimDecorator<double>::empty();
212   }
213 
214 
pos(const gum::DiscreteVariable & v)215   gum::Idx pos ( const gum::DiscreteVariable& v) const {
216     return self->gum::MultiDimDecorator<double>::pos(v);
217   }
218 
contains(const gum::DiscreteVariable & v)219   bool contains ( const gum::DiscreteVariable& v) const {
220     return self->gum::MultiDimDecorator<double>::contains(v);
221   }
222 
nbrDim()223   gum::Idx nbrDim() const {
224     return self->gum::MultiDimDecorator<double>::nbrDim();
225   }
226 
variable(Idx i)227   const gum::DiscreteVariable& variable ( Idx i) const {
228     return self->gum::MultiDimDecorator<double>::variable(i);
229   }
230 
variable(const std::string & name)231   const gum::DiscreteVariable& variable ( const std::string& name) const {
232     return self->gum::MultiDimDecorator<double>::variable(name);
233   }
234 
remove(const gum::DiscreteVariable & var)235   void remove(const gum::DiscreteVariable& var) {
236     self->erase(var);
237   }
238 
add(const DiscreteVariable & v)239   void add ( const DiscreteVariable& v ) {
240     self->gum::MultiDimDecorator<double>::add(v);
241   }
242 }
243 %enddef
244 ADD_MULTIDIMDECORATOR_API(gum::Potential<double>)
245 
246 #####################################
247 #####################################
248 %define ADD_CREDALINFERENCEENGINCE_API(classname)
249 %extend classname  {
setRepetitiveInd(const bool flag)250   void setRepetitiveInd(const bool flag) {
251     self->gum::credal::InferenceEngine<double>::setRepetitiveInd(flag);
252   }
marginalMax(const NodeId id)253  Potential<double> marginalMax ( const NodeId id ) const {
254     return self->gum::credal::InferenceEngine<double>::marginalMax(id);
255   }
marginalMin(const NodeId id)256   Potential<double> marginalMin ( const NodeId id ) const {
257     return self->gum::credal::InferenceEngine<double>::marginalMin(id);
258   }
marginalMax(const std::string name)259   Potential<double> marginalMax ( const std::string name ) const {
260     return self->gum::credal::InferenceEngine<double>::marginalMax(name);
261   }
marginalMin(const std::string name)262   Potential<double> marginalMin ( const std::string name) const {
263     return self->gum::credal::InferenceEngine<double>::marginalMin(name);
264   }
insertModalsFile(const std::string & path)265   void insertModalsFile ( const std::string& path ) {
266     self->gum::credal::InferenceEngine<double>::insertModalsFile(path);
267   }
dynamicExpMax(const std::string & varName)268   const std::vector< double >& dynamicExpMax ( const std::string& varName ) const {
269     return self->gum::credal::InferenceEngine<double>::dynamicExpMax(varName);
270   }
dynamicExpMin(const std::string & varName)271   const std::vector< double >& dynamicExpMin ( const std::string& varName ) const {
272     return self->gum::credal::InferenceEngine<double>::dynamicExpMin(varName);
273   }
274 }
275 %enddef
276 ADD_CREDALINFERENCEENGINCE_API(gum::credal::CNMonteCarloSampling<double>)
277 ADD_CREDALINFERENCEENGINCE_API(gum::credal::CNLoopyPropagation<double>)
278 
279 
280 #####################################
281 #####################################
282 %extend gum::learning::BNLearner<double> {
setInitialDAG(const gum::DAG & g)283   void setInitialDAG( const gum::DAG& g) {
284     self->gum::learning::genericBNLearner::setInitialDAG(g);
285   }
use3off2()286   void use3off2() {
287     self->gum::learning::genericBNLearner::use3off2();
288   }
useMIIC()289   void useMIIC() {
290     self->gum::learning::genericBNLearner::useMIIC();
291   }
useNMLCorrection()292   void useNMLCorrection(){
293     self->gum::learning::genericBNLearner::useNMLCorrection();
294   }
useMDLCorrection()295   void useMDLCorrection(){
296     self->gum::learning::genericBNLearner::useMDLCorrection();
297   }
useNoCorrection()298   void useNoCorrection(){
299     self->gum::learning::genericBNLearner::useNoCorrection();
300   }
latentVariables()301   const std::vector<Arc> latentVariables() {
302     return self->gum::learning::genericBNLearner::latentVariables();
303   }
learnMixedStructure()304   gum::MixedGraph learnMixedStructure() {
305     return self->gum::learning::genericBNLearner::learnMixedStructure();
306   }
307 }
308 
309 
310 
311 #####################################
312 #####################################
313 %define ADD_INFERENCE_API(baseclassname,classname...)
314 %extend classname  {
makeInference(void)315   void makeInference(void) {
316     self->baseclassname::makeInference();
317   }
posterior(const NodeId var)318   const Potential<double> posterior( const NodeId var ) {
319     return self->baseclassname::posterior(var);
320   }
posterior(const std::string & nodeName)321   const Potential<double> posterior( const std::string& nodeName ) {
322     return self->baseclassname::posterior(nodeName);
323   }
324 
325 //######## EVIDENCE ##########
326 //############################
addEvidence(const NodeId id,const Idx val)327   void addEvidence( const NodeId id, const Idx val ) {
328     self->baseclassname::addEvidence(id,val);
329   }
addEvidence(const std::string & nodeName,const Idx val)330   void addEvidence( const std::string& nodeName, const Idx val ) {
331     self->baseclassname::addEvidence(nodeName,val);
332   }
addEvidence(const NodeId id,const std::string & val)333   void addEvidence( const NodeId id, const std::string& val ) {
334     self->baseclassname::addEvidence(id,val);
335   }
336 
addEvidence(const std::string & nodeName,const std::string & val)337   void addEvidence( const std::string& nodeName, const std::string& val ) {
338     self->baseclassname::addEvidence(nodeName,val);
339   }
340 
addEvidence(const NodeId id,const std::vector<double> & vals)341   void addEvidence( const NodeId id,const std::vector<double>& vals ) {
342    self->baseclassname::addEvidence(id,vals);
343   }
addEvidence(const std::string & nodeName,const std::vector<double> & vals)344   void addEvidence( const std::string& nodeName,
345                                 const std::vector<double>& vals ) {
346     self->baseclassname::addEvidence(nodeName,vals);
347   }
348 
349 
chgEvidence(const NodeId id,const Idx val)350   void chgEvidence( const NodeId id, const Idx val ) {
351     self->baseclassname::chgEvidence(id,val);
352   }
chgEvidence(const std::string & nodeName,const Idx val)353   void chgEvidence( const std::string& nodeName, const Idx val ) {
354     self->baseclassname::chgEvidence(nodeName,val);
355   }
356 
chgEvidence(const NodeId id,const std::string & val)357   void chgEvidence( const NodeId id, const std::string& val ) {
358     self->baseclassname::chgEvidence(id,val);
359   }
chgEvidence(const std::string & nodeName,const std::string & val)360   void chgEvidence( const std::string& nodeName, const std::string& val ) {
361     self->baseclassname::chgEvidence(nodeName,val);
362   }
363 
364 
chgEvidence(const NodeId id,const std::vector<double> & vals)365   void chgEvidence( const NodeId id,const std::vector<double>& vals ) {
366    self->baseclassname::chgEvidence(id,vals);
367   }
chgEvidence(const std::string & nodeName,const std::vector<double> & vals)368   void chgEvidence( const std::string& nodeName,
369                                 const std::vector<double>& vals ) {
370     self->baseclassname::chgEvidence(nodeName,vals);
371   }
372 
hasEvidence(const NodeId id)373   bool hasEvidence( const NodeId id ) const {
374     return self->baseclassname::hasEvidence(id);
375   }
hasEvidence(const std::string & nodeName)376   bool hasEvidence( const std::string& nodeName) const {
377     return self->baseclassname::hasEvidence(nodeName);
378   }
379 
eraseAllEvidence()380   void eraseAllEvidence() {
381     self->baseclassname::eraseAllEvidence();
382   }
383 
eraseEvidence(const NodeId id)384   void eraseEvidence( const NodeId id ) {
385     self->baseclassname::eraseEvidence(id);
386   }
eraseEvidence(const std::string & nodeName)387   void eraseEvidence( const std::string& nodeName  ) {
388     self->baseclassname::eraseEvidence(nodeName);
389   }
390 
hasSoftEvidence(const NodeId id)391   bool hasSoftEvidence( const NodeId id ) const {
392     return self->baseclassname::hasSoftEvidence(id);
393   }
394 
hasHardEvidence(const std::string & nodeName)395   bool hasHardEvidence( const std::string& nodeName ) const {
396     return self->baseclassname::hasHardEvidence(nodeName);
397   }
398 
hasSoftEvidence(const std::string & nodeName)399   bool hasSoftEvidence( const std::string& nodeName ) const {
400     return self->baseclassname::hasSoftEvidence(nodeName);
401   }
402 
nbrEvidence()403   gum::Size nbrEvidence() const {
404     return self->baseclassname::nbrEvidence();
405   }
406 
nbrHardEvidence()407   gum::Size nbrHardEvidence() const {
408     return self->baseclassname::nbrHardEvidence();
409   }
410 
nbrSoftEvidence()411   gum::Size nbrSoftEvidence() const {
412     return self->baseclassname::nbrSoftEvidence();
413   }
414 }
415 %enddef
416 
417 %define ADD_MONOTARGET_INFERENCE_API(baseclassname,classname...)
418   ADD_INFERENCE_API(baseclassname,classname)
419 %extend classname  {
420 //######## TARGETS ##########
421 //############################
422 
eraseAllTargets()423     void eraseAllTargets() {
424       self->baseclassname::eraseAllTargets();
425     }
426 
addAllTargets()427     void addAllTargets() {
428       self->baseclassname::addAllTargets();
429     }
430 
addTarget(const NodeId target)431     void addTarget( const NodeId target ) {
432       self->baseclassname::addTarget(target);
433     }
434 
addTarget(const std::string & nodeName)435     void addTarget( const std::string& nodeName ) {
436       self->baseclassname::addTarget(nodeName);
437     }
438 
eraseTarget(const NodeId target)439     void eraseTarget( const NodeId target ) {
440       self->baseclassname::eraseTarget(target);
441     }
442 
eraseTarget(const std::string & nodeName)443     void eraseTarget( const std::string& nodeName ) {
444       self->baseclassname::eraseTarget(nodeName);
445     }
446 
isTarget(const NodeId variable)447     bool isTarget( const NodeId variable ) const {
448       return self->baseclassname::isTarget(variable);
449     }
450 
isTarget(const std::string & nodeName)451     bool isTarget( const std::string& nodeName ) const {
452       return self->baseclassname::isTarget(nodeName);
453     }
454 
nbrTargets()455     gum::Size nbrTargets( ) const {
456       return self->baseclassname::nbrTargets();
457     }
458 
H(const NodeId X)459    double H( const NodeId X ) {
460      return self->baseclassname::H(X);
461    }
H(const std::string & nodeName)462    double H( const std::string& nodeName ) {
463      return self->baseclassname::H(nodeName);
464    }
465 
evidenceImpact(NodeId target,const NodeSet & evs)466   Potential<double> evidenceImpact(NodeId target,const NodeSet& evs){
467     return self->baseclassname::evidenceImpact(target,evs);
468   }
evidenceImpact(const std::string & target,const std::vector<std::string> & evs)469   Potential<double> evidenceImpact(const std::string& target,const std::vector<std::string>& evs){
470    return self->baseclassname::evidenceImpact(target,evs);
471   }
472 }
473 %enddef
474 
475 %define ADD_BN_MONOTARGET_INFERENCE_API(baseclassname,classname...)
476 ADD_MONOTARGET_INFERENCE_API(baseclassname,classname)
477   %extend classname {
BN()478     const IBayesNet< double >& BN() const { return self->baseclassname::BN(); }
479   }
480 %enddef
481 
482 ADD_BN_MONOTARGET_INFERENCE_API(gum::MarginalTargetedInference<double>,gum::VariableElimination<double>)
483 ADD_BN_MONOTARGET_INFERENCE_API(gum::MarginalTargetedInference<double>,gum::LoopyBeliefPropagation<double>)
484 
485 
486 %define ADD_SAMPLING_INFERENCE_API(classname...)
487 ADD_BN_MONOTARGET_INFERENCE_API(gum::MarginalTargetedInference<double>,classname)
488 %extend classname  {
currentPosterior(const NodeId id)489     const gum::Potential<double>& currentPosterior(const NodeId id)
490         {return self->gum::SamplingInference<double>::currentPosterior(id);};
currentPosterior(const std::string & name)491     const gum::Potential<double>& currentPosterior(const std::string& name)
492         {return self->gum::SamplingInference<double>::currentPosterior(name);};
493 }
494 %enddef
495 ADD_SAMPLING_INFERENCE_API(gum::GibbsSampling<double>)
496 ADD_SAMPLING_INFERENCE_API(gum::MonteCarloSampling<double>)
497 ADD_SAMPLING_INFERENCE_API(gum::WeightedSampling<double>)
498 ADD_SAMPLING_INFERENCE_API(gum::ImportanceSampling<double>)
499 ADD_SAMPLING_INFERENCE_API(gum::LoopySamplingInference<double,gum::ImportanceSampling>)
500 ADD_SAMPLING_INFERENCE_API(gum::LoopySamplingInference<double,gum::GibbsSampling>)
501 ADD_SAMPLING_INFERENCE_API(gum::LoopySamplingInference<double,gum::WeightedSampling>)
502 ADD_SAMPLING_INFERENCE_API(gum::LoopySamplingInference<double,gum::MonteCarloSampling>)
503 
504 %define ADD_JOINT_INFERENCE_API(classname)
505 ADD_BN_MONOTARGET_INFERENCE_API(gum::MarginalTargetedInference<double>,classname)
506 %extend classname {
posterior(const NodeId var)507   const Potential<double> posterior( const NodeId var ) {
508     return self->JointTargetedInference<double>::posterior(var);
509   }
posterior(const std::string nodeName)510   const Potential<double> posterior( const std::string nodeName ) {
511     return self->JointTargetedInference<double>::posterior(nodeName);
512   }
eraseAllTargets()513   void eraseAllTargets() {
514     self->gum::JointTargetedInference<double>::eraseAllTargets();
515   }
eraseAllJointTargets()516   void eraseAllJointTargets() {
517     self->gum::JointTargetedInference<double>::eraseAllJointTargets();
518   }
eraseAllMarginalTargets()519   void eraseAllMarginalTargets() {
520     self->gum::JointTargetedInference<double>::eraseAllMarginalTargets();
521   }
522 
nbrJointTargets()523   gum::Size nbrJointTargets() {
524     return self->gum::JointTargetedInference<double>::nbrJointTargets();
525   }
526 
I(const NodeId X,const NodeId Y)527   double I( const NodeId X, const NodeId Y ) {
528     return self->gum::JointTargetedInference<double>::I(X,Y);
529   }
VI(const NodeId X,const NodeId Y)530   double VI( const NodeId X, const NodeId Y ) {
531     return self->gum::JointTargetedInference<double>::VI(X,Y);
532   }
533 
I(const std::string & X,const std::string & Y)534   double I( const std::string& X, const std::string& Y ) {
535     return self->gum::JointTargetedInference<double>::I(X,Y);
536   }
VI(const std::string & X,const std::string & Y)537   double VI( const std::string& X, const std::string& Y ) {
538     return self->gum::JointTargetedInference<double>::VI(X,Y);
539   }
540 
evidenceJointImpact(const NodeSet & targets,const NodeSet & evs)541   Potential<double> evidenceJointImpact(const NodeSet& targets,const NodeSet& evs){
542     return self->gum::JointTargetedInference<double>::evidenceJointImpact(targets,evs);
543   }
evidenceJointImpact(const std::vector<std::string> & targets,const std::vector<std::string> & evs)544   Potential<double> evidenceJointImpact(const std::vector<std::string>& targets,const std::vector<std::string>& evs){
545    return self->gum::JointTargetedInference<double>::evidenceJointImpact(targets,evs);
546   }
547 }
548 %enddef
549 ADD_JOINT_INFERENCE_API(gum::LazyPropagation<double>)
550 ADD_JOINT_INFERENCE_API(gum::ShaferShenoyInference<double>)
551 
552 
553 %define ADD_GIBBS_OPERATOR_API(classname...)
554 %extend classname {
555     /** Getters and setters*/
nbrDrawnVar()556     gum::Size nbrDrawnVar() const { return self->GibbsOperator<double>::nbrDrawnVar(); }
setNbrDrawnVar(Size _nbr)557     void setNbrDrawnVar(Size _nbr) { self->GibbsOperator<double>::setNbrDrawnVar(_nbr); }
isDrawnAtRandom()558     bool isDrawnAtRandom() const { return self->GibbsOperator<double>::isDrawnAtRandom(); }
setDrawnAtRandom(bool _atRandom)559     void setDrawnAtRandom(bool _atRandom) { self->GibbsOperator<double>::setDrawnAtRandom(_atRandom); }
560 }
561 %enddef
562 ADD_GIBBS_OPERATOR_API(gum::GibbsSampling<double>)
563 ADD_GIBBS_OPERATOR_API(gum::LoopySamplingInference<double,gum::GibbsSampling>)
564 ADD_GIBBS_OPERATOR_API(gum::GibbsBNdistance<double>)
565 
566 %extend gum::LoopySamplingInference<double,gum::GibbsSampling> {
burnIn()567   gum::Size burnIn() const { return self->gum::GibbsSampling<double>::burnIn();}
setBurnIn(gum::Size b)568   void setBurnIn(gum::Size b) { self->gum::GibbsSampling<double>::setBurnIn(b);}
569 }
570 
571 %extend gum::Potential<double> {
domainSize()572   gum::Size domainSize() {return self->gum::MultiDimDecorator<double>::domainSize();}
nbrDim()573   gum::Size nbrDim() {return self->gum::MultiDimDecorator<double>::nbrDim();}
574 }
575 
576 #################
577 %define ADD_MN_INFERENCE_API(classname...)
578 ADD_MONOTARGET_INFERENCE_API (gum::MarginalTargetedMNInference<double>,classname)
579 %extend classname {
MN()580    const IMarkovNet<double>& MN() const { return self->gum::MarginalTargetedMNInference<double>::MN(); }
581 }
582 %enddef
583 
584 %define ADD_JOINT_MN_INFERENCE_API(classname)
585 ADD_MN_INFERENCE_API(classname)
586 %extend classname {
posterior(const NodeId var)587   const Potential<double> posterior( const NodeId var ) {
588     return self->JointTargetedMNInference<double>::posterior(var);
589   }
posterior(const std::string nodeName)590   const Potential<double> posterior( const std::string nodeName ) {
591     return self->JointTargetedMNInference<double>::posterior(nodeName);
592   }
eraseAllTargets()593   void eraseAllTargets() {
594     self->gum::JointTargetedMNInference<double>::eraseAllTargets();
595   }
eraseAllJointTargets()596   void eraseAllJointTargets() {
597     self->gum::JointTargetedMNInference<double>::eraseAllJointTargets();
598   }
eraseAllMarginalTargets()599   void eraseAllMarginalTargets() {
600     self->gum::JointTargetedMNInference<double>::eraseAllMarginalTargets();
601   }
602 
nbrJointTargets()603   gum::Size nbrJointTargets() {
604     return self->gum::JointTargetedMNInference<double>::nbrJointTargets();
605   }
606 
I(const NodeId X,const NodeId Y)607   double I( const NodeId X, const NodeId Y ) {
608     return self->gum::JointTargetedMNInference<double>::I(X,Y);
609   }
VI(const NodeId X,const NodeId Y)610   double VI( const NodeId X, const NodeId Y ) {
611     return self->gum::JointTargetedMNInference<double>::VI(X,Y);
612   }
613 
evidenceJointImpact(const NodeSet & targets,const NodeSet & evs)614   Potential<double> evidenceJointImpact(const NodeSet& targets,const NodeSet& evs){
615     return self->gum::JointTargetedMNInference<double>::evidenceJointImpact(targets,evs);
616   }
evidenceJointImpact(const std::vector<std::string> & targets,const std::vector<std::string> & evs)617   Potential<double> evidenceJointImpact(const std::vector<std::string>& targets,const std::vector<std::string>& evs){
618    return self->gum::JointTargetedMNInference<double>::evidenceJointImpact(targets,evs);
619   }
620 }
621 %enddef
622 ADD_JOINT_MN_INFERENCE_API(gum::ShaferShenoyMNInference<double>)
623 
624 
625 #################
626 %define ADD_ID_INFERENCE_API(classname...)
627 ADD_INFERENCE_API(classname,classname)
628 %extend classname {
makeInference(void)629    void makeInference(void) {
630      self->gum::InfluenceDiagramInference<double>::makeInference();
631    }
632 
influenceDiagram()633    const InfluenceDiagram<double>& influenceDiagram() const { return self->gum::InfluenceDiagramInference<double>::influenceDiagram(); }
634 }
635 %enddef
636 ADD_ID_INFERENCE_API(gum::ShaferShenoyLIMIDInference<double >)
637 
638 
639 
640 ###################
641 %define ADD_CN_INFERENCE_API(classname...)
642 %extend classname {
CN()643   const CredalNet< double >& CN() const { return self->gum::credal::InferenceEngine<double>::credalNet(); }
644 }
645 %enddef
646 ADD_CN_INFERENCE_API(gum::credal::CNMonteCarloSampling<double>)
647 ADD_CN_INFERENCE_API(gum::credal::CNLoopyPropagation<double>)