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>)