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