Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,12 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0

## [Unreleased]

## [0.6.1] - 2026-10-29

### Changed

- **BREAKING**: **Dependencies**: Require `ngraph>=0.26.0,<0.27`, which chooses the bandwidth unit `q` once from a static bound.

## [0.6.0] - 2026-10-27

### Fixed
Expand Down
4 changes: 2 additions & 2 deletions pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"

[project]
name = "netlab-topogen"
version = "0.6.0"
version = "0.6.1"
description = "Generate NetGraph backbone scenarios from US Census urban areas and TIGER/Line roads."
readme = "README.md"
authors = [{ name = "Andrey Golovanov" }]
Expand Down Expand Up @@ -43,7 +43,7 @@ dependencies = [
# Strict schema validation at runtime
"jsonschema",
# NetGraph ecosystem
"ngraph>=0.25.0,<0.26",
"ngraph>=0.26.0,<0.27",
]

# Dev / CI extras
Expand Down
18 changes: 12 additions & 6 deletions tests/test_validation.py
Original file line number Diff line number Diff line change
Expand Up @@ -289,12 +289,12 @@ def test_nonempty_platform_mapping_requires_installed_platforms():
@pytest.mark.parametrize(
"capacity,volume,excess",
[
(1001, 1001, False),
(1003, 1003, False),
(20001, 20001, False),
(40003, 40003, False),
(33333, 33333, False),
(100, 100.02, True),
(4097, 4097.8194, True),
(20001, 20005.0002, True),
(100, 100.002, True),
(4097, 4097.0625, True),
(20000, 20000.5, True),
],
)
def test_dc_audit_uses_declared_volume_with_automatic_units(
Expand All @@ -311,14 +311,20 @@ def test_dc_audit_uses_declared_volume_with_automatic_units(
assert "units" not in yaml.safe_load(build.yaml)
result = validate_scenario(build.yaml, cfg.components)
assert result.prepared is not None
assert result.prepared.topology.q > 0.01
q = result.prepared.topology.q
demands = result.prepared.demand_sets["default"].demands
assert len(demands) == 2
if excess:
assert 0 < volume - capacity < q / 2
assert all(d.nominal_units * q <= capacity for d in demands)
assert result.issues == tuple(
f"dc capacity: demand set 'default', metro{site}/dc1 {direction} demand {volume:,.6g} exceeds adjacency capacity {capacity:,.6g}"
for direction in ("egress", "ingress")
for site in (1, 2)
)
else:
assert volume == capacity
assert all(capacity < d.nominal_units * q <= capacity + q / 2 for d in demands)
assert not result.issues


Expand Down
Loading