1# aGrUM Changelog 2 3## Changelog for 0.22.1 4 5* aGrUM 6 * fix issue #69 (no more final destructor), 7 * update Coco/R parsers (notations and explicit casts), 8 * better `gum::SyntaxError` (access to filename), 9 * remove many redundant ';' in testsuites, 10 * better option `--stats` for act, 11 * `gum.[model].fastPrototype` now accepts multiline specifications. 12 13* pyAgrum 14 * better `pyAgrum.SyntaxError` treated as python's SyntaxError, 15 * much better annotations for types declaration in python codes, 16 * improving documentation, 17 * update pyAgrum.causal, 18 * `gum.fast[Model]` now accepts multiline specifications, 19 * `gum.DiscreteVariable` are now hashable. 20 21## Changelog for 0.22.0 22 23As planned, 0.22.0 is the first version of pyAgrum that does not support python>3.6 (including 2.7). 24 25* aGrUM 26 * fix issue #27 27 * (act) remove (hopefully) all the codes to support both python. In particular, there is no more options for act to choose the targeted version of python. 28 * (ci/deploy) removing 2.7 tests and deploy (thanks to @Aspard) 29 * better and customized type induction when learning Bayesian networks from CSV. 30 * new constructor for `gum::learning::BNLearner` to activate/deactivate the type induction when reading a csv file. (thanks to @gonzalesc) 31 32* pyAgrum 33 * remove a large part of the codes dedicated to python2 in the wrapper (`wrapper/python/generated-files2`) and in `pyAgrum.lib`. To be cont'd. 34 * many improvements due to linter (pylint especially) in `pyAgrum.lib`. 35 * graphical improvement in `pyAgrum.lib.bn2roc` thanks to Clara Charon. 36 * new constructor for `gum.BNLearner` to activate/deactivate the type induction when reading a csv file. 37 38 39 40 ## Changelog for 0.21.0 41 42Contrary to what was said in the 0.20.0 changelog, we decided to remove support for python 2.7 before the 1.0 release. 43 44This tag (0.21.0) is the last version that supports python 2.7. We are already working and will deliver a 0.22.0 tag as soon as possible, which will be dedicated to this move and will then be the first tag without python 2.7 support. 45 46The next tag (0.22.0) will be the (new) last minor version before the release of agrum/pyAgrum 1.0.0 (:fist: :smirk: ). 47 48* aGrUM 49 * New type for discrete variable (`gum::IntegerVariable`) which represents a set of non-consecutive integers. 50 * New syntax for `gum::IntegerVariable` in `gum::*::fastPrototype` : `a{-3|0|3}`. 51 * Change in syntax for `gum::MarkovNetwork::fastPrototype` : the link are represented by `--` instead of `-`. 52 * New `gum::BNLearner::state()` which gives a view of the activated options in the learner (scores, priors, algorithms, constraints, etc.). 53 * New `gum::BNLearner::toString()` which gives a string representation of `gum::BNLearner::state()`. 54 * Add a new CI for last gcc (g++11 for now). 55 * Code optimizations for hash function for small-sized values. 56 * Better hierarchy for exceptions. 57 * MLEstimator should lead to an error when dividing by 0. 58 59* pyAgrum 60 * New type for discrete variable (`pyAgrum.IntegerVariable`) which represents a set of non-consecutive integers. 61 * New syntax for `pyAgrum.IntegerVariable` in `pyAgrum.fast*` : `a{-3|0|3}`. 62 * Change in syntax for `pyAgrum.fastMN` : the links are represented by `--` instead of `-`. 63 * New `pyAgrum.BNLearner.state()` which gives a view of the activated options in the learner (scores, priors, algorithms, constraints, etc.). 64 * New `pyAgrum.BNLearner.__str__()` which gives a string representation of `gum::BNLearner::state()`. 65 * Documentations and notebooks updated w.r.t. this new features. 66 * Adding ShapValues for BN in `pyAgrum.lib.explain` (see notebook). 67 * Adding `pyAgrum.lib.explain.independenceListForPairs()`. 68 * Other improvements in `pyAgrum.lib.explain` and the corresponding notebook and documentations. 69 * Updating notebooks for classifiers. 70 * Better hierarchy for exceptions. 71 * Removing unnecessary and obsolete codes by deleting `pyAgrum.lib._utils`. 72 * 'Terminology clash' between 'Laplace's adjustment' and 'Smoothing' : use more generic 'Smoothing' everywhere now. 73 * MLEstimator should lead to an error when dividing by 0. 74 75## Changelog for 0.20.3 76 77* aGrUM 78 * Refactoring/fixing MIIC and better heuristic for orientations for constraint-based learning algorithms. 79 * Updating guidelines and new convention for `private` methods/attributes. 80 * Changing behaviour of `gum::MixedGraph::mixed{Oriented|Unoriented}Path` : no misuse of exception when no path is found. 81 82* pyAgrum 83 * Refactoring MIIC and better heuristic for orientations for constraint-based learning algorithms. 84 * Changing behaviour of `pyAgrum.MixedGraph.mixed{Oriented|Unoriented}Path` : no misuse of exception when no path is found. 85 * Updating new `pyAgrum.Potential`'s methods and documentation. 86 * New tool for layout in notebooks : `pyAgrum.notebook.flow`. 87 * New gum.config options for background colors in CPT : `potential_color_0` and `potential_color_1`. 88 * New module `pyAgrum.lib.explain`. 89 90 91## Changelog for 0.20.2 92 93* aGrUM 94 * Add a check on parameters when building a `gum::credal::CredalNet` from BNmin and BNmax: 'are Pmin<=Pmax' ?". 95 * Fix a bug, and a visualisation of results on decision nodes with deterministic optimal strategy in `gum::InfluenceDiagram`. 96 97* pyAgrum 98 * Add a check on parameters when building a `gum.CredalNet` from BNmin and BNmax: 'are Pmin<=Pmax' ?". 99 * Fix a bug and add a better visualisation of results on decision nodes with deterministic optimal strategy in `gum. 100 InfluenceDiagram`. 101 * Add some options for notebook and influence diagrams in `gum.config`. Notably, add a `gum.notebook. 102 show_inference_time` 103 * Fixes and typos in notebooks 104 * Finally, add a working version of `gum.lib.notebook.exportInference` to create pdf from an inference. With `gum. 105 lib.notebook.export`, it is now possible to export all kind of pyAgrum's graphs into pdf from a notebook. 106 * new methods: `pyAgrum.Potential.topandas()`,`pyAgrum.Potential.tolatex()` 107 108## Changelog for 0.20.1 109 110* aGrUM 111 * Fix an infamous bug: monocycle in DAG (thanks to Guy, GabF and Joanne). This bug did not propagate to graphical models (especially BNs). 112 113* pyAgrum 114 * new site for tutorials. 115 * renaming and reorganizing many tutorials 116 * sync'ed documentation (readthedocs) with the new URLs for notebooks 117 118## Changelog for 0.20.0 119 1200.20.0 is the last minor release before 1.0.0. 121 122* aGrUM 123 * Workaround for OMP with MVSC 124 * Refreshing doxygen configuration file 125 * Graph methods for `children`and `parents` of sets of nodes. 126 * Renaming `core/math/math.h` to `core/math/math_utils.h` to avoid clash names and false warnings from linters 127 * work on CIs 128 * Fix and typos from F.Keidel 129 * Improving API of `gum::BayesNetFragment` (for instance, non-implemented `gum::BayesNetFragment::VariableNodeMap`). 130 * Major changes (and typos and bug fixes) in `gum::CN::CredalNetwork`'s API 131 * Fixing minor bugs in inference for `gum::CN::CredalNet` 132 * (internal) re-organizing files and folders for Credal Networks 133 * (internal) fixing bug in organization of inline/tpl/source files for `gum::credal::lp::LpInterface` 134 135* pyAgrum 136 * (internal) Better logic and automatic generation for the multiple "requirements.txt". 137 * Graph methods for `children`and `parents` of sets of nodes. 138 * `pyAgrum.notebook.export` and `pyAgrum.notebook.exportInference` to export as png, pdf(, etc.) PGM and inference in PGM 139 * Fix several tests 140 * Fix and typos from F.Keidel 141 * Adding `gum.Instantiation.addVarsFromModel` and allowing chained `gum.Instantiation.add()`. 142 * Fixing some broken links in documentation. 143 * Updating `gum.skbn` for non-binary classifier (see notebooks). 144 * Improving notebooks for classifiers. 145 * Major changes in `gum.CredalNetwork`'s API 146 * Specific visualisation for credal networks 147 * Graphical visualisation of inference with credal networks (![Visual Credal networks](https://gitlab.com/agrumery/aGrUM/-/blob/master/wrappers/pyAgrum/doc/sphinx/_static/fastModelsSource/5-fastCNWithPyAgrum.png "Credal Networks")) 148 * Adding some example for credal networks in notebooks 149 150## Changelog for 0.19.3 151 152* pyAgrum 153 * missing graphical (not correctly wrapped) methods in `gum::InfluenceDiagram` 154 * fix falsely raised exception leading to incomplete generation of documentation and wheels. 155 * ` pyAgrum.lib.ipython` improved. 156 * pyAgrum's documentation refreshed a bit. 157 * `pyAgrum.skbn` improved. 158 * several typos in notebooks and testsuites. 159 160## Changelog for 0.19.2 161 162* aGrUM 163 * bugfix for `EssentialGraph` (thanks to M.Lasserre). 164 165## Changelog for 0.19.1 166 167* aGrUM 168 * bugfix for `InfluenceDiagram` with all-negative utilities (thanks to B.Enderle). 169 * [internal] typos and reorganization for `act`'s modules. 170 171## Changelog for 0.19.0 172 173*Mainly* : important changes for Influence Diagram (aGrUM and pyAgrum) and for BayesNet classifiers compliant to scikit-learn's API (pyAgrum). 174 175* aGrUM 176 * new and better inference for Influence Diagrams and LIMIDs (`gum::ShafeShenoyLIMIDInference`). 177 * new builder for Influence Diagram `gum::InfluenceDiagram::fastPrototype`. 178 * bugfixes. 179 180* pyAgrum 181 * wrapper and notebook functions for new inference and new methods for influence diagram. 182 * new module `skbn` for BayesNet classifier compatible with sklearn (classification and discretization) with optimized `predict` method and specific structural learning for `fit` (Naïve Bayes, TAN, Chow-Liu tree, and others learning aGrUM's algorithms). Several discretization methods are implemented. 183 * minor graphical improvements. 184 * remove old deprecated class/method (since pyAgrum 0.12.0). 185 * Improving documentation (readthebook). 186 * bugfixes. 187 188## Changelog for 0.18.2 189 190Mainly bugfixes and internal improvements. 191 192* aGrUM 193 * bugs fixed for `gum::MarkovNet` and `gum::ShaferShenoyMNInference`. 194 * typo in the name of `odbc` library for mac. 195 196* pyAgrum 197 * packages for `python 3.9` (except win32). 198 * better error message for `DuplicateElement` in operations between `gum.Potential`. 199 * [internal] improvements for building wheels. 200 * deprecated `PyEval_CallObject`. 201 * [internal] improvements for `pyAgrum`'s tests. 202 203 204## Changelog for 0.18.1 205 206* aGrUM 207 * Direct access to `gum::<graphicalmodel>::isIndependent(X,Y,Z)`. 208 * Direct access to direct access to `ancestors` and `descendants()`. 209 * Update API with node names for `putFirst`/`reorganize`/`VI`/`I`. 210 211* pyAgrum 212 * bug fixed on wrapped {Edge|Arc}Part (thanks to Arthur Esquerre-Pourtère). 213 * bug fixed for some UTF8 names. 214 * Direct access to `gum::<graphicalmodel>::isIndependent(X,Y,Z)`. 215 * Direct access to `ancestors()` and `descendants()`. 216 * Update API with node names for `putFirst`/`reorganize`/`VI`/`I`. 217 218## Changelog for 0.18.0 219 220* aGrUM 221 * MarkovNet's model, UAI file format and inference (incremental ShaferShenoy). 222 * Bug fix in `MIIC` learning algorithm. 223 * Bug fix in `gum::GammaLog2` approximations for very small values. 224 * Updating and enhancing ` gum::GraphicalBNComparator`. 225 * Enhancing API for `gum::MixedGraph` (build a MixedGraph from other graphs). 226 * API changes for `gum::MultiDimAggregator` (consistant behavior without parent). 227 * new `gum::MultidimmAggegator` : `Sum`. 228 * Minor API changes for `gum::Potential` (`normalizeAsCPT`,`minNonZero`,`maxNonOne`). 229 * Minor API changes for graphical models (`gum::DAGModel` and `gum::UGModels`). 230 * [internal] adopting more classical convention for naming pr{otected|ivate} methods and attributes. 231 * [internal] Updating sources for MVSC 2019. 232 233* pyAgrum 234 * MarkovNet's model, UAI file format and inference (incremental ShaferShenoy). 235 * Bug fix in `MIIC` learning algorithm. 236 * Updating and enhancing `pyAgrum.GraphicalBNComparator`. 237 * Enhancing API for `pyAgrum.MixedGraph` (build a MixedGraph from other graphs). 238 * API changes for `pyAgrum::MultiDimAggregator` (consistent behavior without parent). 239 * new `pyAgrum::MultidimmAggegator` : `Sum`. 240 * Minor API changes for `pyAgrum::Potential` (`normalizeAsCPT`,`minNonZero`,`maxNonOne`). 241 * In `gum.lib.bn2roc` : bugfix for ROC, access to significant_digit for `predict`, add Precision-Recall graph. 242 243## Changelog for 0.17.3 244 245* aGrUM 246 * improved version of MIIC's learning algorithm. 247 * add access to pseudo count with `gum::BNLearner::pseudoCount`. 248 * fix a bug in inference with `gum::InfluenceDiagram`. 249 * improved API for Influence Diagram : accessor with variable names (instead of only NodeId). 250 * VS2019's compiler is now supported by `act/CMakeLists.txt`. 251 * reorganizing resources for testsuite. 252 253* pyAgrum 254 * improved version of MIIC's learning algorithm. 255 * add access to pseudo count with `gum.BNLearner.pseudoCount`. 256 * fix a bug in inference with `gum.InfluenceDiagram`. 257 * improved API for Influence Diagram : accessor with variable names (instead of only NodeId). 258 259## Changelog for 0.17.2 260 261* aGrUM 262 * fix a bug in graphChangeGeneratorOnSubDiGraph (thanks @yurivict for the issue). 263 * fix a bug in LazyPropagation due to a (rare) improper optimization. 264 * improve projection and combination codes for `MultiDim` hierarchy. 265 * reorganization of source codes and internal structure. 266 * refreshing a bit the c++ examples. 267 * preliminary works on undirected graphical models. 268 269* pyAgrum 270 * forgotten description for pip packages. 271 * typo for special char (':' for instance) with pydotplus. 272 273 274## Changelog for 0.17.1 275(really) minor patch 276 277* aGrUM 278 * O3PRMBNReader can now read a BN from an o3prm file with a unique class even it the name of the class is not the name of the file. 279 280* pyAgrum 281 * internal changes for wheel generations. 282 * updating description for packages. 283 * optimizing loops and inference for ROC and classifiers. 284 * minor improvements for pyAgrum's tests (logging and restrictions for python2). 285 286## Changelog for 0.17.0 287 288* pyAgrum 289 * Update requirements 290 * Improve `classifier.py` 291 * Documentation improvements 292 * Remove '?' from names in some resources files concerning Asia 293 * Updating API for `pyAgrum.Instantiation` (accessor using name of variables) 294 * Important internal updates for the relation between `numpy.array` and `pyAgrum.Potential` (with a significant speed-up) 295 * Add operators between `pyAgrum.Potential` and numbers 296 * Fix a bug when using `pydotplus` with `size=None` 297 * Fix minor bugs in `pyAgrum.fastBN` and in `pyAgrum.O3prmBNWriter/Reader` 298 * Add `pyAgrum.Potential.log2()` method and `pyAgrum.log2(pyAgrum.Potential)` function 299 * Add `pyAgrum.BayesNet.clear()` method 300 301* aGrUM 302 * Updating API for `gum::Instantiation` (accessor using name of variables) 303 * Add operators between `gum::Potential<GUM_SCALAR>` and `GUM_SCALAR` 304 * Fix minor bugs in `gum::fastPrototype` and in `gum::O3prmBNWriter/Reader` 305 * Add `gum::multiDimDecorator::erase(std::string& name)` (mainly used as `gum::Potential::erase(std::string& name)`) 306 * Add `gum::BayesNet<GUM_SCALAR>::clear()` method 307 308## Changelog for 0.16.4 309 310* pyAgrum 311 * first version of `pyAgrum.lib.classifier` providing a class `pyAgrum.BNClassifier` wrapping a BN as a classifier with a scikitlearn-like API. 312 * Fix bug in `pyAgrum.lib.notebook.showPotential` with explicit digit param 313 * Add a `pyAgrum.Potential.loopIn()` to iterate inside a Potential 314 * Enhanced API for `pyAgrum.InfluenceDiagram` 315 * Documentation improvements 316 * remove package for python 3.4 and 3.5 (following [NEP29](https://numpy.org/neps/nep-0029-deprecation_policy.html)). But 2.7 is still maintained. 317 * add package for python 3.8 318 319* aGrUM 320 * still working on CI 321 * Enhanced API for `gum::InfluenceDiagram` 322 323## Changelog for 0.16.3 324 325* pyAgrum 326 * wrapper for the class `gum::BayesNetFragment` 327 * typos in dot methods for Influence Diagrams and Causal Models 328 329## Changelog for 0.16.2 330 331* pyAgrum 332 * remove the use of 'f-strings' in `pyAgrum.lib.notebook.py` 333 334## Changelog for 0.16.1 335 336* aGrUM 337 * improve the syntax for BN specification using `gum::fastPrototype` 338 * improve several CMakeFiles.txt and doxygen documentation 339 * add CI for python 2.7 340 * refresh `gum::BayesNet::toString()` 341 * API change : `gum::MarkovBlanket()::{mb()`->`gum::MarkovBlanket::dag()}` 342 343* pyAgrum 344 * `pyAgrum.config` object for customization (see notebook 08-configForPyAgrum) 345 * improving the syntax for BN specification using `pyAgrum.fastBN` 346 * improving pyAgrum's documentation 347 * add `pyAgrum.causal.counterfactual` and `pyAgrum.causal.counterfactualModel` (see notebook 55-Causality_Counterfactual) 348 * improve plots for histograms (particularly : now svg image by default) 349 * add `pyAgrum.Potential.fullWithFunction()` 350 * add `pyAgrum.{any graph-like}.connectedComponents()` 351 * add `pyAgrum.BayesNet.parents()` and `pyAgrum.BayesNet.children()` with the name of node. 352 * `pyAgrum.MarkovBlanket(bn,var,level)` build now a level-th order Markov Blanket (by default level=1) 353 * add access to constants `pyAgrum.VarType_{Discretized|Labelized|Range}` when testing `pyAgrmu.{any discrete variable}.varType()` 354 * API change : `pyAgrum.MarkovBlanket().{mb()`->`dag()}` 355 * add `pyAgrum.lib.bn_vs_bn.GraphicalBNComparator.hamming()` 356 357## Changelog for 0.16.0 358 359* aGrUM 360 * bug fixed in `gum::BNLearner::learnParameters()` in some cases with ML estimation (without priors). Better bootstrap for EM. 361 * bug fixed for variables order in the `gum::Potential` generated by `gum::BayesNet::reverseArc()` 362 * new `gum::DiGraph::hasDirectedCycle` 363 * new methods in `gum::Potential` for random generations and pertubations 364 365* pyAgrum 366 * improvements in `pyAgrum.lib.causality` (direct access to backdoor and frontdoor, typos in doCalculus, etc.) 367 * `pyAgrum.lib.notebook`'s visualisations of graph can be adapted for dark or light themes (in jupyterlab for instance) with `forDarkTheme()`and `forLightTheme()` 368 * `pyAgrum.lib.notebook.{show|get}Inference()` can now have colored arcs (see 06-colouringBNs.ipynb in the notebooks) 369 * improvements on the documentation framework (w.r.t. readthdocs) 370 * bug fixed for variables order in the `pyAgrum.Potential` generated by `pyAgrum.BayesNet.reverseArc()` 371 * new `pyAgrum.DiGraph.hasDirectedCycle` 372 * new methods in `pyAgrum.Potential` for random generations and pertubations 373 * better error messages when adding arcs in a Bayesian Network 374 * API change for joint targets in exact inference : only as set of node ids or names of variable 375 376## Changelog for 0.15.2 377 378* aGrUM 379 * fix a (rare) bug in counters for contingency tables for chi2 and G2 (bug found by Bastien Chassagnol) 380* pyAgrum 381 * fix `fscore` in `gumlib/bn_vs_bn.py` 382 * API : Wherever a list of strings is the type for an argument, a single string `"x"` can be used instead of `["x"]` 383 * workaround for weird bug when displaying matplotlib-generated svg in notebooks (for `gnb.showInference`) 384 * fix AUC computation in `gumlib/bn2roc.py` 385 386## Changelog for 0.15.1 387 388* aGrUM 389 * add forgotten `addPossibleEdge` constraint for `LocalSearchWithTabuList` learning algorithm in `BNLearner`. 390 * bug fix in exact inference leading to an erroneous exception. 391 * Better iterated random test for sampling inference 392* pyAgrum 393 * update path for new notebooks location for CI and documentation 394 * nightly build with pip : use now `pip install pyAgrum-nightly` 395 * API change in `pyAgrum.lib.dynamicBN` : `plotFollowUnrolled(lovars, dbn, T, evs)` 396 * add forgotten `addPossibleEdge` constraint for `LocalSearchWithTabuList` learning algorithm in `BNLearner`. 397 * bug fix in exact inference leading to an erroneous exception. 398* internal 399 * new values for **act** `-j` option (number of jobs for compilation) : `all`, `except1`, `half`, `halfexcept1`. 400 * several bugfixes in CI 401 402## Changelog for 0.15.0 403 404* ![LGPLV3](https://www.gnu.org/graphics/lgplv3-with-text-95x42.png "LGPLV3") new LGPL3 licence for aGrUM/pyAgrum 405* aGrUM 406 * bug fix with openMP in `BNLearner::setDatabaseWeight` 407 * new `BNLearner::recordWeight()` and `BNLearner::databaseWeight()` 408 * new `BNLearner::setRecordWeight()` 409* pyAgrum 410 * nightly builds with pip : `pip install pyAgrum-nightly` 411 * bug fix with openMP in `BNLearner::setDatabaseWeight` 412 * new `BNLearner.recordWeight()` and `BNLearner.databaseWeight()` 413 * new `BNLearner.setRecordWeight()` 414 * bug fix and minor API changes in `pyAgrum.causality` 415 416## Changelog for 0.14.3 417 418* aGrUM 419 * new constraint for structural learning : `possibleEdge` forces the tested edges to be taken from the sets of `possibleEdge`s 420 * new methods `BNLearner::addPossibleEdge(const gum::Edge&)` and `BNLearner::setPossibleSkeleton(const gum::UndiGraph&)` 421 * Fix a bug in `gum::IndepTestG2` 422 * Access to scores from BNLearner : `BNLearner::G2()` 423* pyAgrum 424 * new methods `BNLearner.addPossibleEdge(x,y)` and `BNLearner.setPossibleSkeleton(undigraph)` 425 * fix a bug in causality's identification algorithm 426 * Access to scores from BNLearner : `BNLearner.G2()` 427 * add tests and fix typos in notebooks 428 429## Changelog for 0.14.2 430 431* aGrUM 432 * bug fixes in learning (`3off2/miic` and `learnMixedGraph`) 433 * removing redundant `gum::BNLearner::setAprioriWeight` 434* pyAgrum 435 * `pyAgrum.lib.notebook.showInference` can now use `svg` format 436 * use of the `svg` format by default for graphs and drawings in `pyAgrum.lib.notebook` 437 * refreshing notebooks 438 * removing redundant `pyAgrum.BNLearner.setAprioriWeight` 439 * adding forgotten wrapper for `pyAgrum.BNLearner.useAprioriBDeu` 440 * changing the representation of causal model (special node for latent variable) 441 * extending documentation 442 443## Changelog for 0.14.1 444 445* aGrUM 446 * chaintool for compilation with microsfot visual C++ 17 (`act --msvc17` and `act --msvc17_32`) 447* pyAgrum 448 * fixing a missing importation of the `pyAgrum.causal` module in pypi packages 449 * updating sphynx version for pyAgrum's ReadTheDoc 450 451## Changelog for 0.14.0 452 453* aGrUM 454 * support for mingw64 + bugfix for mingw (`act --mingw64`) 455 * Access to scores from BNLearner : `BNLearner::Chi2` and `BNLearner::logLikelihood` 456 * bug fix in `KL[...]::bhattacharya` 457 * add `KL[...]::jsd` (Jensen-Shannon divergence) 458 * renaming `gum::[...]]KL` classes into `gum::[...]distance` because they provide access to KL but also to Hellinger, Bhattacharya distances and Jensen-Shanon divergence. 459* pyAgrum 460 * `pyAgrum.causality` (do-calculus and causal identification !) 461 * `JunctionTreeGenerator` (formerly `JTGenerator`) can now expose the eliminationOrder and can drive the triangulation with a partial order of the nodes. 462 * Access to scores from BNLearner : `BNLearner::Chi2` and `BNLearner::logLikelihood` 463 * bug fix in `pyAgrum.lib.notebook` 464 * bug fix in `KL[...]::bhattacharya` 465 * add `KL[...]::jsd` (Jensen-Shannon divergence) 466 * renaming `pyAgrum.[...]]KL` classes into `pyAgrum::[...]distance` because they provide acces to KL but also to Hellinger, Bhattacharya distances and Jensen-Shanon divergence. 467 * fix some scratches in pyAgrum documentation 468 469## Changelog for 0.13.6 470 471* aGrUM 472 * Compilation issue for clang4 fixed 473 * remove all pre-compiled `float` instanciations of aGrUM's templates (and significantly reduce the size of all libraries) 474 * add the configuration files needed for interactive notebooks on mybinder.org 475* pyAgrum 476 * minor changes in notebooks 477 478## Changelog for 0.13.5 479 480* aGrUM 481 * fix errors for gcc 4.8.2 482 * fix issue <https://gitlab.com/agrumery/aGrUM/issues/23> 483 * fix act error for python<3.6 484 485## Changelog for 0.13.4 486 487* pyAgrum 488 * minor API changes 489 * minor changes in documentation 490 * BNLearner follows the new learning framework 491 * parametric EM !! See notebook <http://www-desir.lip6.fr/~phw/aGrUM/docs/last/notebooks/16-ParametriceEM.ipynb> 492 * New method : JointTargetedInference.jointMutualInformation for any set of variables in the BN 493* aGrUM 494 * parametric EM !! 495 * several internal improvements 496 * learning: major update of the scores, independence tests and record counters: 497 They can now be used on subsets of databases (e.g., for cross validation), the ids of the nodes need not correspond to indices of columns in the database. The interfaces of these classes have been simplified. 498 * learning: all the scores have been speeded-up 499 * learning: new score fNML has been introduced 500 * learning: Dirichlet apriori has been improved: the variables in its database need not be in the same order as those of the learning database 501 * learning: all the score-related testunits have been improved 502 * learning: the documentations of the scores have been improved 503 * learning: the corrected mutual information of 3off2 has been improved 504 * BNLearner: now supports cross validation 505 * New method : JointTargetedInference::jointMutualInformation for any set of variables in the BN 506 507## Changelog for 0.13.3 508 509* pyAgrum 510 * **pip** : wheels for mac/windows/linux for python 2.7,3.{4-7} 511 * **anaconda** : compilation for maxOS/anaconda64/python3 should be fixed 512 * updating tests 513 * updating pyAgrum.lib 514 * updating posterior histograms for notebooks (adding mean/stdev for `RangeVariable` and `DiscretizedVariable`) 515 * new functions for colouring and graphically comparing BNs 516 * improved documentation 517* aGrUM 518 * fixed bugs for `DiscreteVariable` with `domainSize()`<=1 (particularly when added in `Potential`) 519 * improved `CMakeFiles.txt` 520 * improved documentation 521 * fixing `UAI` format for read and write 522 * `BNLearner.setSliceOrder` with list of list of names (and not only with ids) 523 * improved error messages 524 * fixing `learnParameters` 525 * multi-thread support for learning 526 527## Changelog for 0.13.2 528 529* aGrUM/pyAgrum 530 * fixed bugs in `Potential::fillWith` 531 * removed unsafe and ambiguous `Potential::fastKL` and kept safe `Potential::KL` 532 533## Changelog for 0.13.1 534 535* aGrUM 536 * variable: new methods to set bounds with doubles in `ContinuousVariable` 537 * Changed the code of `Instantiation`'s hash functions to make it compliant with windows mingw implementation 538* TestUnits 539 * fixed bug in `RawDatabaseTable` test unit 540 541## Changelog for 0.13.0 542 543* aGrUM 544 * inference: Loopy Belief Propagation (`LBP`) 545 * inference: new approximated inference : `Monte-Carlo`/`Importance`/`Weighted Sampling` + the same using LBP as a Dirichlet prior (`Loopy...`). 546 * learning: new algorithm 3off2 and miic 547 * learning: new database handling framework (allows for coping with missing values and with different types of variables) 548 * learning: possibility to load data from nanodbc databases (e.g., `postgres`, `sqlite`) 549 * learning: add a progress Listener/Signaler in `BNDatabaseGenerator` 550 * potential: API extension (`findAll`,`argmax`,`argmin`,`fillWith(pot,map)`) 551 * variable: new constructor for `LabelizedVariable` with labels as vector of string + `posLabel(std::string)` 552 * variable: new constructor with vector of ticks for `gum::DiscretizedVariable` 553 * graph: API extension (`addNodes(n)`) 554 * graph: API change (`addNode(id)`->`addNodeWithId(id)`) 555 * Changes and bug fixe in in BIF and NET writer/reader 556* pyAgrum 557 * wheels for python 3.3 and 3.4 558 * access to the new learning framework using `BNLearner` 559 * access to the new inference algorithms 560 * new methods `Instantiation.fromdict` and `Instantiation.todict` 561 * `DiscreteVariable.toDiscretized/toLabelized/toRange` copy the variable instead of giving a (not readonly) reference 562* O3PRM 563 * new syntax for types 564 * read and write Bayesian Network with O3PRM syntax 565* Documentations 566 * agrum : doxygen helps structure and howtos 567 * pyAgrum : documentation of a large part of pyAgrum's API, export to <https://pyagrum.readthedocs.io> 568 * o3prm : still in progress (see <https://o3prm.lip6.fr>, <https://o3prm.readthedocs.io>) 569* act 570 * new command guideline for a few easy checks 571* many bug fixes 572 573## Changelog for 0.12.0 574 575* API 576 * new class `EssentialGraph` 577 * new class `MarkovBlanket` 578 * improved targets in `MarginalTargettedInference` 579* pyAgrum 580 * update notebooks 581 * new swig-based documentation framework 582 * transparent background for dot graphs 583 * more windows-compliant agrum.lib.bn2csv 584* aGrUM 585 * PRM bug fixes 586 * improved CI in gitlab 587 * improved exception messages in BN learning and O3PRM 588 * improving act 589 590## Changelog for 0.11.2 591 592* aGrUM 593 * a lot of internal changes for CI in gitlab (especially for future automatic generation of wheels) 594 * learning: correct identification of string labels beginning with digits 595 * learning: labels from CSV are now alphabetically sorted 596 * fix an issue with sql.h 597* pyAgrum 598 * notebooks as tests (now in wrappers/pyAgrum/notebooks) 599 * updating requirements 600 * some improvements in doc 601 * pyagrum.lib.ipython: emulation of 'pyagrum.lib.notebook' for ipython graphical console (within spyder for instance) 602 * pyagrum.lib.bn2csv: csv file with labels of variables instead of index (parameter with_labels:boolean) 603 * pyagrum.lib.bn2roc: use a csv with labels by default (parameter with_labels:boolean) 604 605## Changelog for 0.11.1 606 607* 2 typos found in pyAgrum.lib.notebook 608 609## Changelog for 0.11.0 610 611* internal 612 * working on continuous integration with gitlab 613 * aGrUM/pyAgrum to be compilable with g++-4.8 614 * aGrUM/pyAgrum to be compilable with win32 615 * pyAgrum wheels generation using act for 'pip' tool 616* aGrUM 617 * removing some unused data structure (`AVLTree`) 618 * fixing bug in `localSearchWithTabuList` learning class 619 * Remove wrong parallel estimations for learning (now correct but sequential) 620 * working on docs 621 * API change : add `BayesNet::minimalCondSet(NodeSet&,NodeSet&)` (migration from pyAgrum to aGrUM) 622 * API change : add JointTargettedInference::evidenceJointImpact() 623* pyAgrum 624 * API changes : pyAgrum.lib.bn2graph (`BN2dot`, `BNinference2dot`, `proba2histo`) 625 * API changes : pyAgrum.lib.pretty_print (`bn2txt`, `cpt2txt`) 626 * API changes : pyAgrum.lib.notebook : uniforming parameters evs (first) and targets (second) order. 627 * API changes : pyAgrum.lib.notebook : `showEntropy->showInformation` 628 * updating sphinx help generation 629 * fix `CNMonteCarloSampling` not recognized as `ApproximationScheme` 630 * enhancing `showInformation` with Mutual Information on arcs 631 * API change : adding `BayesNet.minimalCondSet(set_of_targets,set_of_evs)` (as wrapper) 632 * API change : adding `LazyInference.evidenceJointImpact(set_of_targets,set_of_evs)` 633 634## Changelog for 0.10.4 635 636* Add new approximated inference : `LBP` (aGrUM and pyAgrum) 637* Fix bugs in `LazyPropagation` and `ShaferShenoy` inference 638* Refresh some codes in Learning module 639* Update (and simplify) CMakeLists.txt for new swig 3.0.11 640* Add some project files (including this CHANGELOG.md) 641* Refresh pyAgrum notebooks with matplotlib2 642 643## Changelog for 0.10.3 644 645* Only bug fixes in tests 646 647## Changelog for 0.10.2 648 649* New method for `BayesNet` : `minimalCondSet` 650* New method for all inference : `evidenceImpact` 651* Potential has a (single) value even if no dimension. 652* Bug fix for `LazyPropagation` 653* Typos for Visual C++ compiler 654* Many internal changes 655 656## Changelog for 0.10.1 657 658* aGrUM 659 * Fix GCC compilation 660 * `ParamEstimator::setMaxThread` new method 661* pyAgrum 662 * `VariableElimination` and `ShaferShenoy` inference 663 * new `addJointTarget` and `jointPosterior` methods for exact inference 664 * `pyAgrum.getPosterior` now uses `VariableElimination` 665 * Fix pyAgrum.lib.notebook error for python2 666 * pyAgrum now linked with static library aGrUM 667 * pyAgrum.so (linux) size significantly reduced 668 669## Changelog for 0.10.0 670 671* aGrUM 672 * Improvements in inference : New target/evidence-driven incremental inference scheme using relevant reasoning used by Lazy/Shafer-Shenoy/Variable Elimination algorithms. Relevant reasoning leads to a major improvement of the inference (see [RelevanceReasoning.html](http://www-desir.lip6.fr/~phw/aGrUM/officiel/notebooks/RelevanceReasoning.html)). 673* pyAgrum 674 * LazyPropagation API follow the new inference scheme (add/removeTarget, add/remove/chgEvidence) 675* Installers using pip or anaconda. 676 677## Changelog for 0.9.3 678 679Tag 0.9.3 has not been properly announced. Still, many changes in this release : 680 681* Many bug fixes and API glitch/improvement 682 * Many internal reorganisations (compilation, test, jenkins, etc.) 683 * Many change in the C++ code in order to be more c++11/14 684 * Bug fix in learning 685 * Many Doxygen improvements 686 * Many refactors and bug fix in PRM 687* Improvements 688 * dynamic BN in pyAgrum 689 * nanodbc support for pyAgrUM 690 * O3PRMBNReader in pyAgrum (read a prm to a BN) 691 * PRMExplorer in pyAgrum 692 * UAI reader/writer for BayesNet 693 * Algebra of potentials (operators on Potential) 694 * pyAgrum.lib.notebook refactored and simplified 695 * updating lrs version for credal networks 696* Windows 697 * aGrUM/pyAgrum compilation on windows using Visual Studio 2015 698 699## Changelog for 0.9.2 700 701* aGrUM 702 * Improvements in Inference 703 * old LazyPropagation renamed JunctionTreeInference, 704 * Improved LazyPropagation ~30% faster, 705 * Bug fix and other improvements for relevance reasoning features. 706 * Improvements for Probabilistic Relational Models 707 * model refinements : e.g. parameterized classes, specification of CPTs using formula, etc. 708 * bug fixes and other improvements in dedicated inference algorithms, 709 * improving and fixing documentations 710 * new file format for Bayesian network : o3prmBNReader (reading a BN by grounding a system) 711 * Learning API still improved 712 * BNLearner templatized 713 * new feature for BNLearner : using a BN to specicfy variables and their modalities, 714 * bug fixes and improvement for parameter learning. 715 * other bug fixes and improvements in aGrUM architecture 716 * aGrUM g++5.1-ready 717 * etc. 718* pyAgrum 719 * small bugs fixed and reorganisation 720 721## Changelog for 0.9.1 722 723* aGrUM 724 * Improvement in learning algorithms 725 * learning from databases with fewer rows than there are processors 726 * method to BNLearner to learn parameters from a BN's DAG 727 * static lib compilation for aGrUM 728 * bug fixes and other improvements 729* pyAgrum 730 * Compiled for Python 3 or Python 2 (default is python3, python2 if no python3.). New option for act to choose which python : --python={2|3}. 731 * gumLib has moved and changed its name (in the pyAgrum package) : pyAgrum.lib 732 * Improving API for learning (changeLabel/parameter learning/ etc.) 733 * Improving graphs manipulation 734 * bug fixes and other improvements 735 736## Changelog for 0.9.0 737 738Aside from many bug fixes and general improvements such as performance optimizations in various areas, some changes are especially noteworthy: 739 740* Functionality : Structural and parameter learning for Bayesian networks 741* Model : Credal Networks, FMDP using Multi-Valued Decision Diagrams 742* Language : migration to modern C++(11/14) 743* Core : Improvements and optimization of basic data structures in aGrUM/core 744