aGrUM/pyAgrum 3.1.0 released

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