* aGrUM * Added 3 behaviors for generating sampling from `gum::DiscretizedVariable` in `gum::BNDatabaseGenerator` : `INTERVAL`/`MEDIAN`/`RANDOM`. The default was `INTERVAL` and is now `RANDOM`. * Added timeout for `gum::BNDatabaseGenerator` to prevent slowish (maybe infinite) rejection sampling. * Added two new constraints for learning :`gum::learning::NoParentNode`,`gum::learning::NoChildNode`. * Added these new constraints in `gum::BNLearner` : `addNoParentNode(nodeid)` and `addNoChildrenNode(nodeid)`. * (internal) Improved `act`'s scripts. * pyAgrum * Dropped support of python 3.9 (following [NEP29](https://numpy.ingg/nings/nep-0029-deprecation_policy.html)). * Added 3 behaviors for generating sampling from `pyAgrum.DiscretizedVariable` in `pyAgrum.BNDatabaseGenerator` : `INTERVAL`/`MEDIAN`/`RANDOM`. The default was `INTERVAL` and is now `RANDOM`. * Added timeout for `pyAgrum.BNDatabaseGenerator` to prevent slowish (maybe infinite) rejection sampling. * Added two new constraints `pyAgrum.BNLearner.addNoParentNode()` and `pyAgrum.BNLearner.addNoChildrenNode()`. * (internal) Standardized licence in python files * Added new `pyAgrum.causal.CausalEffectsEstimation` (thanks to Thierry Rioual). * `pyAgrum.causal.BNClassfier`can now be pickled (thanks to Valentin Vassilev). * Added module `pyAgrum.lib.shapley` (included in `pyAgrum.lib.explain`) to allow the use of `ShapValues` not only from notebooks (thanks to Stefano Mariani). * Added a parameter `filename` to `pyAgrum.lib.shapley.ShapValues`'s methods for saving the figure instead of showing it (thanks to Stefano Mariani).