Tags

Tags give the ability to mark specific points in history as being important
  • 3.1.1

    c8d35dae · Release 3.1.1 ·
  • 3.1.0

    - pyAgrum
    
        - **fastGraph**:
            - Added `fastDiGraph()`, `fastUndiGraph()`, `fastMixedGraph()`, `fastDAG()`, and `fastPDAG()`. `fastGraph(desc)` is preserved as a single entry point that guesses the returned graph type from `desc`.
            - The dot-like syntax now accepts non-numeric tokens as node names (not only unsigned ints); malformed or
              type-incompatible descriptions raise `pyagrum.InvalidArc` / `pyagrum.InvalidEdge`
              instead of a generic error.
        - **Configuration**:
            - `defaults.ini` now carries typed metadata (`### type :: doc` comments) with validation; added `config.typed`
              accessor and key-deprecation support.
            - Boolean values are canonicalized to `True`/`False` at set time.
            - Deprecated `asBool`/`asInt`/`asFloat` accessors.
            - The configuration reference documentation is now generated from `defaults.ini`.
        - **Native GUM Format (jgum / bgum)**:
            - `saveGUM()` for `BayesNet`, `InfluenceDiagram`, and `MarkovRandomField` gains an `indent` parameter,
              defaulting to `core.default_jgumIndent`.
            - Aggregator and ICI model nodes are now serialized compactly instead of as dense CPTs.
        - **MCBNDistance**:
            - Wrapped the new `MCBNDistance` C++ class.
            - Fixed `animApproximationScheme` flicker by consolidating it into `utils.py`.
        - **Documentation**: several improvements.
        - **Misc**:
            - Refreshed `pydot>=2` requirement.
    
    - aGrUM
    
        - **MCBNDistance**:
            - Added `MCBNDistance`, an independent Monte Carlo estimator of the KL divergence between two Bayesian networks. For a large BN, MCBNDistance is often faster and more accurate than the `GibbsBNDistance` estimator.
        - **Native GUM Format (jgum / bgum)**:
            - Aggregator and ICI model nodes are now serialized compactly instead of as dense CPTs.
            - Hardened aggregator/ICI serialization: `gum::Exception` on malformed input, O(N) writer,
              `std::optional` aggregator `value()`, private `addAggregator`/`addICIModel`, deduplicated aggregator dispatch.
        - **fastGraph**:
            - Replaced the ad hoc Python `fastGraph` parser with a generic C++ template,
              `gum::fastGraph<GRAPH_TYPE>(std::string_view)`, building a `DiGraph`, `UndiGraph`,
              `MixedGraph`, `DAG`, or `PDAG` from a dot-like textual description; node tokens can now be names (not only
              unsigned-int ids) and are preserved when the built graph feeds `moralGraph()`. Malformed or type-incompatible
              descriptions throw `InvalidArc`/`InvalidEdge` instead of being silently misread.
        - **StructuralMetrics**:
            - Guarded `precision`/`recall`/`f_score` against 0/0 division.
        - **PRM fixes**:
            - Fixed PRM test suites broken since the `internalGraph()` rename and the CxxTest-to-doctest migration.
            - Fixed `PRMInstance::_addReferingInstance_` storing the target attribute's safe name instead of the slot
              chain's own name, which broke SVED/StructuredBayesBall name resolution.
            - Promoted PRM to an independent CMake module (`PRM_DEPS=BN`) instead of folding it into
              `BN_DIRS`.
        - **Testing infrastructure**:
            - optimization, bug fixes to the new doctest infrastructure.
        - **Build & Tooling**:
            - `act guideline` gains a `--source` glob filter to restrict checks to matching files.
            - Added `gum_cppnb`, a standalone C++ notebook tool auto-installed by `act install aGrUM`, with BN/MRF/ID/CM
              tutorials.
            - Finalized the BN+BNLEARNING merge: dropped the redundant BN/learning glob entry
            - Required `swig>=4.3` (thanks to Julien Schueller).
            - Simplified CMake threading logic: `GUM_THREADS` cache variable (`stl`/`omp`) replaces the previous
              flag-assembly logic (thanks to Julien Schueller).
  • 3.0.0

    ## Changelog for 3.0.0
    
    This major release brings three headline changes: the causal module is promoted from pure Python to a
    first-class C++ module (`CM`), structure learning is extended with PC, FCI (with PAG output),
    GreedyThickThinning, and triangle deletions in GreedyHillClimbing, and a new native GUM serialization
    format (`jgum` / `bgum`) is introduced for all graphical models. It also consolidates widespread API
    modernisation (C++20 `std::format`, `string_view`, `optional_ref`, `std::optional`, `concepts`) and several
    breaking renames detailed below. 
    
    See changelog.txt and https://pyagrum.gitlab.io/blog/changelog_300 for more details.
  • 2.3.2

    84561d99 · [aGrUM] before tag 2.3.2 ·
    ## Changelog for 2.3.2
    
    - pyAgrum
      - Fix sklearn `check_X_y` compatibility with mixed-type DataFrames.
  • 2.3.1

    31831027 · [aGrUM] before 2.3.1 ·
    ## Changelog for 2.3.1
    
    - aGrUM
        - Fixed a typo in BIFXML export (thanks to Pierre-François Gimenez).
        - Better use of PCH in CMakefiles (thanks to Julien Schueller).
        - o4DGContext :disambiguated log2 namespace.
        - Make -fno-assume-unique-vtables public (thanks to Julien Schueller).
        - better ci for linux.
        - Improved logic for `gum::BNLearner::learnParameters()`.
         
    - pyAgrum
        - `scikit-learn` as a required-dist.
        - New action for `act` : `pipinstall`.
        - Improved documentation and notebooks.
        - Improved logic for `pyagrum.BNLearner.learnParameters()` and `pyagrum.BNLearner.fitParameters()`.
  • 2.3.0

    50ed291c · [aGrUM] Before tag 2.3.0 ·
    ## Changelog for 2.3.0
    
    - aGrUM
        - Use of std::format` (C++20) to correctly print doubles (thanks to Christopher Eveland).
        - Updated docker images, runners and CI for C++20 and python 3.14.
        - Moved `minimalCondSet` from `gum::IBayesNet` to `gum::DAG{model}`.
    
    - pyAgrum
        - Added python 3.14 suppor and fixed some `Py_DecRef`.
        - Refreshed binder files (python 3.10)
        - Introduced the new `pyagrum.explain` submodule for explainability in Bayesian Networks.
        - Improved SHAP value computation performance in in new package `pyagrum.explain` (thanks to Rayane Nasri).
        - Added support for SHAP values on partial subsets of features in `pyagrum.explain` (thanks to Rayane Nasri).
        - Introduced the concept of SHALL values for explaining log-likelihood in Bayesian Networks in `pyagrum.explain` (thanks to Ekaterina Bogush and Amélie Chu).
        - Added tool for exporting documentation to the new site.
  • 2.2.1

    40993102 · [aGrUM] before 2.2.1 ·
    ## Changelog for 2.2.1
    
    - aGrUM
        - Fixed bugs in `gum::PDAG`(thanks to Louis Derumaux).
        - Added  `gum::Set::popFirst()`
    
    - pyAgrum
        - updated some requirements
        - Fixed bugs in `pyagrum.PDAG`(thanks to Louis Derumaux).
  • 2.2.0

    cf1283f7 · [aGrUM] before 2.2.0 ·
    ## Changelog for 2.2.0
    
    - aGrUM
      - (internal) Improved cmake files and act
      - Enhanced `gum::BNLearner::copyState` to more correctly handle constraints.
      - Enhanced `gum::BNLearner`'s EM algorithm to enable user-based initialization.
      - Enhanced `gum::BNLearner`'s EM algorithm to provide more flexible stopping criteria.
      - Added first version of `CITATION.cff` file.
      
    - pyAgrum
      - Improved documentations coverage
      - Update wheels
      - Improved API for `pyagrum.lib.DiscreteTypeProcessor`
      - Used quantile_method='averaged_inverted_cdf' when quantile method is used for discretization. (sklearn >=1.7 needed).
      - New (experimental) option for building pyAgrum :--no-gil.
      - New target for sphinx : markdown for website (new target `site` for sphinx Makefile).
      - Enhanced `pyagrum.BNLearner`'s EM algorithm to enable user-based initialization.
      - Enhanced `pyagrum.BNLearner`'s EM algorithm to provide more flexible stopping criteria.
      - Improved documentaiton. Especially BNLearner and EM's documentation and tutorial.
  • 2.1.1

    d15a377b · [aGrUM] before 2.1.1 ·
    ## Changelog for 2.1.1
    
    - pyAgrum 
      - documentation (improved coverage and BN input/ouput mainly)
      - now using `ruff` for formatting (and linting) python files (also in `act guideline`)
  • 2.1.0

    ## Changelog for 2.1.0
    
    - aGrUM
      - Added a new constructor for `gum::Tensor` with a list of variables to automatically add.
      - Enhanced BIFXML reader/writer to support fast syntax (both for Bayesian Network and for Influence Diagram).
      - Added deterministic and uniform tensor creation methods in `Tensor` class.
      - Added `BayesNet.contextualize` method for structurally handling observations and interventions.
      - Improved code for `BayesNet::operator==`.
      - `gum::influenceDiagramGenerator` now creates `gum::RangeVariable` instead of `gum::LabelizedVariable`.
      - Improved readability of range parsing in `allDiscreteVariables_tpl.h`.
      - Fixed a bug in `gum::Instantiation::contains(std::string)`.
      - Added `gum::trim_copy` method.
    
    - pyAgrum
      - De-modularized pyagrum to resolve weird bugs.
      - Enhanced BIFXML reader/writer to support fast syntax (both for Bayesian Network and for Influence Diagram).
      - Added a new constructor for `pyAgrum.Tensor` with a list of variables to automatically add.
      - Added deterministic and uniform tensor creation methods in `Tensor` class.
      - Added `BayesNet.contextualize` method for structurally handling observations and interventions.
      - `gum::influenceDiagramGenerator` now creates `gum::RangeVariable` instead of `gum::LabelizedVariable`.
      - Added `pyagrum.lib.notebook.inspectBN` function to visualize a (small) Bayesian Network and its CPTs in a notebook.
      - Simplified some pyagrum's error messages.
      - Removed useless methods `newFactory`.
      - Fixed typos in RTD's documentation and added `pyAgrum.mutilateBN` in the documentation.
  • 2.0.1

    * pyAgrum
      * Fixed python version for `readthedocs`.
  • 2.0.0

    2c47d77a · [aGrUM] before tag 2.0.0. ·
    # aGrUM Changelog
    
    ## Changelog for 2.0.0
    
    This major update brings several important changes that align with our goals of improving usability, compliance, and consistency. Below are the three main motivations behind this significant upgrade:
    
    #### 1. License Change : MIT+LGPLV3
    
    The first major change in version 2.0.0 is the update to our software license. This change ensures better alignment with modern open-source standards and provides clearer guidelines for usage, distribution, and modification ([see here for details](https://agrum.gitlab.io/articles/dual-licenses-lgplv3mit.html)).
    
    #### 2. Package Name Update to Follow PEP8
    
    To adhere to Python's PEP8 naming conventions, we have renamed the package from `pyAgrum` to `pyagrum`. We are aware that this change may cause some inconvenience, but it is necessary to ensure consistency with Python's style guidelines and improve the overall user experience. The transition to version 2.0.0 is the right time to implement this change, as it allows us to make a clean break and set a solid foundation for future development.
    
    #### 3. Class Renaming: Potential to Tensor
    
    In an effort to make the library more intuitive and reflective of its functionality, we have renamed the `Potential` class to `Tensor`. This change better represents the mathematical nature of the class and aligns with common terminology in the field ([see here for details](https://agrum.gitlab.io/articles/tensors-in-pyagrum.html)).
    
    #### 4. Modular Code Structure
    
    We have reworked the internal structure of the code to make it more modular. This redesign allows for easier extensibility and maintenance in the long term. By breaking down the code into more independent and reusable components, we aim to facilitate future enhancements and possible contributions from the community.
    
    -----
    
    #### Detailed Changelog
    
    - aGrUM
      - Split library into `BASE`/`BN`/`CN`/`FMDP`/`ID`/`MRF` sub-libraries  .
      - Enhanced swig files (thanks to Julien Schueller!).
      - Improved compilation time for the whole library.
      - Removed obsolete deprecated, experimental code.
      - Moved `gum::Potential` to `gum::Tensor`.
      - used functions of `std::filesystem`.
      - Removed uses of `mkstemp`/`opendir`/`dup`/etc. and inclusions of `dirent.h` and `unistd.h`.
      - Minor typos in aGrUM's testsuite.
      
    - pyAgrum
      - Split module into `pyAgrum.base`/`bn`/`cn`/`id`/`mrf` sub-modules.
      - Changed name of pyAgrum's package: from `pyAgrum` to `pyAgrum`.
      - Alignd wheel naming with binary distribution format.
      - Renamed `gum.lib.Discretizer` to `gum.lib.DiscreteTypeProcessor`.
      - Fixed a bug for `pyAgrum.DiscreteTypeProcessor` with a boolean variable in the database (thanks to Yann Le Biannic).
      - Fixed a bug then calling `gum.BNLearner.learnEssentialGraph` with a score-based algorithm (thanks to Yann Le Biannic).
      - *pyAgrum-izing* types in `swig`-generated `cpp` files.
      - Removed obsolete deprecated, experimental codes.
      - Moved `pyAgrum.Potential` to `pyAgrum.Tensor`.
      - Added glossary in readthedoc site.
      - Improved notebooks, docstrings and sphinx documentations.
      - Stable abi for wheel generation. Added possibility to turn off stable abi use.
      - CIs for apple silicon.
      - Removed old deprecation.
      - Added new experimental pyAgrum's model : Miture of Bayesian Networks (thanks to Rodrique Tavernier).
      - Licences are now included in the wheels.
  • 1.17.2

    e26d7c4b · [aGrUM] before 1.17.2 ·
    * pyAgrum
      * Fixed some bugs in `pyAgrum.lib.shapley` (thanks Stefano Mariani !).
      * Changed last MN->MRF (`pyAgrum.{loadMRF|saveMRF|availableMRFExts}`).
      * Improved pickling of `pyAgrum.skbn.BNClassifier`.
  • 1.17.1

    * aGrUM
      * Fixed extra semicolon.
    
    * pyAgrum
      * Fixed some pyAgrum types in generated files.
      * Added check for pandas in tests.
      * Renamed files in module `pyAgrum.clg`.
      * Fixed METADATA for pypi.
  • 1.17.0

    4c6e93b4 · [aGrUM] before 1.17.0 ·
    * pyAgrum
      * Added support for `python 3.13`.
      * Added generator `pyAgrum.Instantiation.loopIn()` to iterate on an `pyAgrum.Instantiation`.
      * Significantly accelerated `pyAgrum.Potential.fillFromDistribution()`.
      * Major acceleration of `pyAgrum.clg.ForwardSampling.make_sample()`.
  • 1.16.0

    1c53d45e · [aGrUM] guidelines. ·
    * 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).
  • 1.15.1

    * aGrUM
      * Added `gum::Potential<GUM_SCALAR>::memoryFootprint` and `gum::IBayesNet::memoryFootprint` (thanks to Benjamin Datko).
      * Fixed a bug when subscripting `gum::DiscretizedVariable` with the (last) interval (thanks to Gaspard Ducamp).
      * Removed gcc warnings (psabi, false positive uninitialized).
    
    * pyAgrum
      * Added `pyAgrum.Potential.memoryFootprint` and `pyAgrum.BayesNet.memoryFootprint` (thanks to Benjamin Datko).
      * Fixed a bug when subscripting `gum::DiscretizedVariable` with the (last) interval (thanks to Gaspard Ducamp).
      * Fixed a bug in `pyAgrum.skbn.BNDiscretizer` for `NoDiscretization` method with given `paramDiscretization`.
      * Moved function `pyAgrum.lib.export.toFast` to method `pyAgrum.{BayesNet|InfluenceDiagram|MRF}.toFast()`.
      * Moved `pyAgrum.skbn.BNDiscretizer` to `pyAgrum.lib.discretizer`.
      * Worked on documentation for CTBN
      * Fixed `fontcolor` configuration for causal model.
  • 1.15.0

    We continue to add (full python) experimental models. In 1.15, we introduce the CTBN model (Continuous Time Bayesian Network) featuring, as usual, modelization and representation, inference (exact and sampling) and a learned algorithm.
    
    * aGrUM
      * Added `gum::NodeId gum::EssentialGraph::idFromName(const std::string& name)` and  `const std::string&  
        gum::EssentialGraph::nameFromId(gum::NodeId node)`. 
    
    * pyAgrum
      * Added `pyAgrum.EssentialGraph.idFromName(str)->int` and `pyAgrum.EssentialGraph.nameFromId(int)->str` 
      * Improved documentation of `pyAgrum.lib.explain`
      * Better `pyAgrum.clg.CLG.toDot()` and `pyAgrum.clg.CLG._repr_html()`.
      * New model Continuous Time Bayesian Network `pyAgrum.ctbn`.
      * Formatted and adjustments in `pyAgrum.ctbn`.
      * Updated documentations for python experimental models notebooks.
      * Updated thumbnails for python experimental models notebooks.
      * Added serialization (pickle) for CLG and CTBN (consistent with other models in pyAgrum).
      * Improved `pyAgrum.lib.utils.{apply_}dot_layout`
      * Added `pyAgrum.lib.utils.async_html2image` for exported HTML as png or pdf (notably for `pyAgrum.lib.notebook.getSideBySide` and `pyAgrum.lib.notebook.getPotential`).
  • 1.14.1

    * aGrUM
      * Fixing compilation errors for `clang18` (thanks to @yurivict).
    
    * pyAgrum
      * Fixing python version for `readthedocs`.
  • 1.14.0

    0fbb07b5 · Update VERSION.txt ·
    * aGrUM
      * `gum::Potential::marg{Xyz}{In|Out}` are renamed `gum::Potental::{xyz}{In|Out}` to cut down on some verbosity.
      (for instance : `p.margSumOut` becomes `p.sumOut`)
      * Better error messages for `gum::BNLearner<GUM_DATA>`
    
    * pyAgrum
      * Dropping support of python 3.8 (following [NEP29](https://numpy.org/neps/nep-0029-deprecation_policy.html)).
      * Fixing some memory leaks (in special cases) found by Christophe Gonzales
      * new `pyAgrum.lib.explain.generalizedMarkovBlanket{Names}` and documentation.
      * `pyAgrum.Potential.marg{Xyz}{In|Out}` are renamed `pyAgrum.Potental.{xyz}{In|Out}` to cut down on some verbosity.
          (for instance : `p.margSumOut` becomes `p.sumOut`)
      * Better error messages for `pyAgrum.BNLearner`
      * Adding new python's experimental model : Conditional Linear Gaussian (`pyAgrum.clg.*`) : model, learning and inference.