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