Skip to content

Latest commit

 

History

History
177 lines (106 loc) · 6.31 KB

File metadata and controls

177 lines (106 loc) · 6.31 KB

Changelog

All notable changes to this project will be documented in this file.

The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.

[0.7.2] - 2026-03-26

Fixed

  • Added missing <stdexcept> include for MSVC compatibility

[0.7.1] - 2026-03-26

Added

  • Windows AMD64 wheel builds in release workflow
  • Windows test coverage in CI

[0.7.0] - 2026-03-26

Changed

  • Relicensed from BSD-3-Clause to MIT
  • Parallelized sensitivity analysis across candidate edges using std::async; thread count controlled by NGRAPH_CORE_SENSITIVITY_THREADS env or hardware concurrency
  • Thread-local profiling stats to remove global mutex from the hot record() path; public API unchanged

[0.6.0] - 2026-02-26

Changed

  • License: Relicensed from GPL-3.0-or-later to BSD-3-Clause.

[0.5.0] - 2026-02-18

Changed

  • License: Relicensed from AGPL-3.0 to GPL-3.0.

[0.4.1] - 2026-02-17

Added

  • Build: Add Linux ARM64 (aarch64) wheel builds using native GitHub ARM runners in the release workflow.

[0.4.0] - 2026-02-17

Added

  • Python 3.14: Add support for Python 3.14 in CI tests, wheel builds, and packaging.
  • Free Threading: Declare free-threading compatibility (py::mod_gil_not_used) for Python 3.13t/3.14t builds. Build and publish free-threaded (cp314t) wheels.

Changed

  • CI: Upgrade cibuildwheel from v2 to v3.3.1 for Python 3.14 wheel builds.

Fixed

  • Python Bindings: Fix object leak on Python 3.14 caused by pybind11 not clearing managed dicts during deallocation. Replace dynamic_attr + _graph_ref pattern with py::keep_alive for FlowState, FlowGraph, and FlowPolicy.

[0.3.6] - 2026-02-17

Fixed

  • Python Bindings: Fix build failure with pybind11 3.x typed tuples by adding explicit -> py::tuple return type on the spf lambda.

Changed

  • CI: Add CentOS Stream 9 build and test jobs.

[0.3.5] - 2026-02-08

Fixed

  • K-Shortest Paths: Fix off-by-one in Yen's prefix comparison and PredDAG CSR fill order. Paths visiting nodes out of numerical order (e.g., [0,3,2]) previously produced malformed predecessor DAGs.

[0.3.4] - 2026-02-02

Changed

  • Build: Simplified version handling.

[0.3.3] - 2026-02-02

Fixed

  • License: Replaced incomplete AGPLv3 LICENSE file with complete official text from GNU.

[0.3.2] - 2025-12-12

Fixed

  • Profiling: Fix ODR violation that caused empty stats when profiling was enabled. Moved profiling_enabled() and ProfilingStats::instance() definitions from inline header to profiling.cpp to ensure a single instance when static library is linked into the Python module.

[0.3.1] - 2025-12-08

Added

  • Profiling: Runtime profiling infrastructure for C++ hot paths (shortest_paths_core, place_demand, place_on_dag).
    • Enable via NGRAPH_CORE_PROFILE=1 environment variable.
    • Python API: profiling_enabled(), profiling_dump(), profiling_reset().
    • Minimal overhead when disabled (single static bool check per instrumented scope).
    • ~2% overhead when enabled.

Changed

  • Build: Default optimizations: LTO, loop unrolling, -fno-math-errno. Add make install-native for CPU-specific builds.

[0.3.0] - 2025-12-06

Changed

  • BREAKING: Minimum Python version raised to 3.11 (was 3.9)

[0.2.3] - 2025-12-06

Changed

  • Python bindings: StrictMultiDiGraph.from_arrays now requires ext_edge_ids so callers always supply stable external edge identifiers.
  • FlowPolicy: construction is now config-only (via FlowPolicyConfig), dropping the parameter-heavy constructor.

Fixed

  • FlowGraph: get_flow_path now filters only below-kEpsilon noise so paths are reconstructed even when per-edge allocations are smaller than kMinFlow.

[0.2.2] - 2025-12-05

Fixed

  • Flow Placement: EqualBalanced placement now correctly returns 0 when the shortest path has no capacity with require_capacity=False. Previously, flow could be incorrectly reported on partial paths that didn't reach the destination.

[0.2.1] - 2025-12-01

Fixed

  • Shortest Paths: In single-path mode, ties between equal-cost paths are now broken by preferring higher bottleneck capacity. Improves flow placement when multiple equal-cost paths exist with different capacities.
  • Flow Placement: Use epsilon threshold in place_on_dag() to fix placement of very small flow fractions in large fanout networks.

Changed

  • Build: Use uv build frontend for wheel builds.
  • Build: Drop 32-bit Linux (i686) wheels.

[0.2.0] - 2025-11-25

Added

  • Sensitivity Analysis: Added shortest_path parameter to sensitivity_analysis().
    • shortest_path=False (default): Uses full max-flow; reports all saturated edges across all cost tiers.
    • shortest_path=True: Uses single-tier shortest-path flow; reports only edges used under ECMP routing.
  • Python type stub documentation for Algorithms.sensitivity_analysis().

[0.1.0] - 2025-11-23

Added

  • Core Library: Initial release of C++ implementation for graph algorithms and flow tracking.
  • Graph Structures:
    • StrictMultiDiGraph: Immutable directed multigraph using CSR (Compressed Sparse Row) adjacency.
    • FlowGraph: Manages flow state, per-flow edge allocations, and residual capacities.
  • Algorithms:
    • Shortest paths (Dijkstra variant returning a DAG for ECMP; supports node/edge masking and residual-aware tie-breaking).
    • K-Shortest paths (Yen's algorithm).
    • Max-flow (Successive Shortest Path with ECMP/WCMP placement; supports capacity-aware (TE) and cost-only (IP) routing modes).
    • Sensitivity analysis (identifies bottlenecks).
  • Flow Policy:
    • Modeling: Unified configuration for IP routing (cost-based ECMP) and Traffic Engineering (capacity-aware TE).
    • Placement: Proportional (WCMP) and EqualBalanced (ECMP) strategies.
    • Lifecycle: Manages demand placement, static/dynamic path selection, and re-optimization.
    • Constraints: Enforces limits on path cost, stretch factor, and flow counts.
  • Python Bindings:
    • Python 3.9+ support via pybind11.
    • NumPy integration using zero-copy views where applicable.
    • Releases GIL during long-running graph algorithms.
  • Testing:
    • Python and C++ test suites.