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