NetGraph
Network modeling and analysis framework: Python front end, C++ graph algorithms.
What It Does
NetGraph models network topologies, traffic demands and failure scenarios, and analyzes capacity and resilience. Networks are defined in Python or in YAML; max-flow and failure simulations export reproducible JSON.
Install
pip install ngraph
Python API
from ngraph import Network, Node, Link, analyze, Mode
# Three nodes in a line
network = Network()
network.add_node(Node("A"))
network.add_node(Node("B"))
network.add_node(Node("C"))
network.add_link(Link("A", "B", capacity=10.0, cost=1.0))
network.add_link(Link("B", "C", capacity=10.0, cost=1.0))
# Compute max flow
result = analyze(network).max_flow("^A$", "^C$", mode=Mode.COMBINE)
print(result) # {('^A$', '^C$'): 10.0}
Scenario DSL
For reproducible analysis workflows, define topology, demands, and failure policies in YAML:
seed: 42
# Define reusable topology templates
blueprints:
Clos_Fabric:
nodes:
spine: { count: 2, template: "spine{n}" }
leaf: { count: 4, template: "leaf{n}" }
links:
- source: /leaf
target: /spine
pattern: mesh
capacity: 100
cost: 1
# Instantiate network from templates
network:
nodes:
site1: { blueprint: Clos_Fabric }
site2: { blueprint: Clos_Fabric }
links:
- source: { path: site1/spine }
target: { path: site2/spine }
pattern: one_to_one
capacity: 50
cost: 10
# Define failure policy for Monte Carlo analysis
failures:
random_link:
modes:
- weight: 1.0
rules:
- scope: link
mode: choice
count: 1
# Define traffic demands
demands:
global_traffic:
- source: ^site1/leaf/
target: ^site2/leaf/
volume: 100.0
mode: combine
flow_policy: SHORTEST_PATHS_ECMP
# Analysis workflow: find max capacity, then test under failures
workflow:
- type: NetworkStats
name: stats
- type: MaxFlow
name: site_capacity
source: ^site1/leaf/
target: ^site2/leaf/
mode: combine
- type: MaximumSupportedDemand
name: max_demand
demand_set: global_traffic
- type: TrafficMatrixPlacement
name: placement_at_max
demand_set: global_traffic
alpha_from_step: max_demand # Use alpha_star from MSD step
failure_policy: random_link
iterations: 100
ngraph run scenario.yml --output results/
jq '.steps.max_demand.data.alpha_star' results/scenario.results.json
The scenario builds two Clos sites from one blueprint, finds the largest demand multiplier the network carries, then places that demand under 100 random single-link failures and writes the results to JSON.
See DSL Reference and Examples for more.
Capabilities
- Declarative scenarios: schema-validated YAML, reusable blueprints, a strict multigraph model
- Failure analysis: weighted failure modes, risk groups, and analysis-time exclusions that leave the base topology untouched
- Routing models: cost-only IP routing and capacity-aware traffic engineering
- Flow placement: ECMP and WCMP splits, max-flow and demand placement
- Reproducible results: seeded randomness and stable link ids
- C++ algorithms with the GIL released, via NetGraph-Core
Documentation
- Tutorial - Running a scenario from the CLI and from Python
- Examples - Clos fabric capacity and failure analysis
- DSL Reference - YAML scenario syntax
- API Reference - Python API
License
Requirements
- Python 3.11+
- NetGraph-Core (installed automatically)
Metadata
Release files for ngraph 0.24.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| ngraph-0.24.0.tar.gz | 171.4 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| ngraph-0.24.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 370.9 kB
Release files / ngraph-0.24.0.tar.gz
| Download URL | ngraph-0.24.0.tar.gz |
|---|---|
| Size | 171.4 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
d4e2af8c6cb2f5224699110b658e57d094389723654ff3862c615425a261c1fd
|
|
BLAKE2b-256 checksum How to use checksums |
1de18ce8cdc4f345db1f905d58d418f0cb378400e9fd4c86a2177d4522f0abeb
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 2, 2026.
Transparency logRelease files / ngraph-0.24.0-py3-none-any.whl
| Download URL | ngraph-0.24.0-py3-none-any.whl |
|---|---|
| Size | 199.4 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
5d70abb362dcd0ef98edc81eed3e3af8dba54375061f96edb853ca0ccbfee202
|
|
BLAKE2b-256 checksum How to use checksums |
f8cbb9fba37db6737d97ab7bd2a17d363da430bb1c6ee41846cda7d3878c2e35
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 2, 2026.
Transparency log