Changelog

5.0.0

Dropped pypy Support

  • Removed pypy from the CI test matrix and development requirements

  • CPython performance improvements have closed the gap, making pypy support unnecessary

Unified Model

  • Consolidated FlexModel and PerformanceModel into a single Model class (pyNTM.model.Model) with the full feature set: parallel links, IGP shortcuts, RSVP LSPs, and SRLGs

  • The canonical class is now Model; FlexModel, PerformanceModel, Parallel_Link_Model remain as backward-compatible aliases

  • Model.load_model_file() auto-detects both legacy file formats (with and without circuit_id column)

  • Model.add_circuit() auto-assigns circuit_id when not provided

  • Removed the isinstance(model, PerformanceModel) check in RSVP_LSP.traffic_on_lsp(); replaced with a capability check on igp_shortcuts_enabled

RSVP LSP Performance Improvements

  • parallel_lsp_groups() and parallel_demand_groups() rewritten from O(N^2 * M) nested loops to O(L) single-pass grouping

  • RSVP_LSP.effective_metric() results are now cached per simulation run, avoiding repeated full shortest-path computations

  • _determine_lsp_state_info() shares the weighted network graph across LSPs in the same parallel group instead of rebuilding it per-LSP

  • Replaced O(n) list.index() calls with enumerate() in path conversion methods

Interactive Visualization

  • New model.visualize() method generates a self-contained HTML visualization and opens it in the browser

  • Draggable nodes for rearranging the network topology layout

  • Per-direction interface coloring by utilization with a toggleable legend to filter by utilization range

  • Demand path tracing: select a demand to see its traffic, LSPs, and interfaces with path highlighting

  • RSVP LSP path tracing: select an LSP to see traffic carried, reserved bandwidth, demands, and interfaces

  • Interface inspection by node: select a node to list all interfaces with utilization, demands, and LSPs

  • Cross-linked navigation: click any demand, LSP, or interface in any panel to make it the active selection

  • Tooltips on hover showing interface name, endpoints, capacity, and utilization

  • The legacy WeatherMap class (Dash/Cytoscape) is deprecated in favor of model.visualize()

4.0.1

  • Added fixed for readthedocs build

4.0.0

  • Dropped support for Python 3.8, 3.9

  • Dropped support for pypy3.9; added support for pypy3.10 (pypy support fully removed in 5.0.0)

3.5.1

  • Migrated from TravisCI to GitHub actions for testing pipeline

  • Added Python support for 3.9, 3.10, 3.11

  • Supported Python versions are 3.8-3.11 and pypy3.9 (pypy support fully removed in 5.0.0)

  • These changes will allow development to move forward while keeping the robust 90+% code testing coverage in place

3.4.1

  • Updated test environment to Focal linux (from Xenial) to allow dash and dash-cytoscape package import in CI/CD for visualization

    • Allows for moving WeatherMap from beta to production in future

    • It’s no longer necessary to explicitly install the visualization requirements separately

  • Heavy updates for docs

  • Implemented black code formatting for local commits and in Travis CI/CD pipeline

  • Implemented standard column name for RSVP LSP attribute to describe a manually assigned metric:

    • FlexModel had lsp_metric column name in docstrings and examples

    • PerformanceModel had manual_metric column name in docstrings and examples

    • Standardized column name to manual_metric

    • This was a purely cosmetic change as the actual manual_metric is based on the column’s order in the table, not the specific column name

3.4.0

  • This build, while functional, was yanked from pypi for reasons related to troubleshooting a new CI/CD pipeline. Let’s just say there was some drama around that, and the migration to travis-ci.com. These things happen.

  • 3.4.0 features moved to 3.4.1 build

3.3.1

  • Fixed bug in FlexModel to account for complex topology scenario involving ECMP demand paths with multipe IGP shortcut LSPs and parallel links

  • Added spacing_factor as a WeatherMap configurable parameter

  • Added another test to functional tests within test_parallel_link_model for complex topology

3.3

  • Import of the WeatherMap class must be done from pyNTM.weathermap instead of directly from pyNTM. This prevents a warning message that is otherwise superficial unless you are using the WeatherMap class

3.2

  • Fixed bug in WeatherMap class that caused scripts with WeatherMap to run 2x and to not be able to run a WeatherMap class live from the python3 CLI

3.1

  • Removed automatic call of load_model_file class methods performing update_simulation() call automatically.

3.0

  • WeatherMap class added as beta feature to provide interactive visualization of network topology. This is a beta feature and is not undergoing unit testing. This feature is supported in the python3 interpreter, but not in the pypy3 interpreter. This feature gives a very interactive and informative visualization of the topology

  • path_detail Demand property support in all Model classes; provides clarity on how much traffic is passing on a given Demand’s path and how much of that traffic transits each component in the path

  • Python 3.5 no longer supported

  • Python 3.8 support added to unit/functional testing

  • load_model_file class methods now perform update_simulation() call automatically. The update_simulation() call is only necessary to run after making a change to the topology after the model file has been loaded

2.1

  • Enforcing tab-separated data in model data files (used to allow spaces or tabs between data entries)

  • FlexModel class allows IGP RSVP shortcuts

  • FlexModel and PerformanceModel classes allow/honor RSVP LSP manual metrics

  • Made load_model_file for FlexModel and PerformanceModel classes more forgiving for number of lines allowed between tables

2.0

  • Made version 1.7 into major version 2.0 to account for possible backwards compatibilty

1.7

  • Renamed Model class to PerformanceModel

  • Renamed Parallel_Link_Model class to FlexModel

  • Optimization: general 18-25% performance improvement when measured by time to converge

  • Moved common code from PerformanceModel and FlexModel to _MasterModel parent class

  • Maintained unit testing coverage at 95%

  • Cleaned up documentation/docstrings

1.6

  • Added support for multiple links between nodes (Parallel_Link_Model)

  • Cached parallel_lsp_groups in Model and Parallel_Link_Model objects (performance optimization)

  • Added check for multiple links between nodes in Model object (not allowed)

  • Added Parent Class _MasterModel to hold common defs for Model and Parallel_Link_Model subclasses

  • Added simulation_diagnostics def in _MasterModel that gives potentially useful diagnostic info about the simulation results

  • Simple user interface (beta feature) supports RSVP LSPs

1.5

  • Updated code to account for networkx

  • Improved some docstrings

1.4

  • updated requirements.txt to allow use of beta features

1.3

  • improved docstring for Model load_model_file class method

  • updated requirements

  • fixed bugs in beta features: visualization and simple UI

  • updated unit testing

1.2

  • added shared-risk link group (SRLG) support for Nodes and Interfaces

  • added performance optimizations

  • simplified sections of code

1.1

  • added configured, fixed setup bandwidth capability on RSVP LSPs

  • made small performance optimizations

1.0

  • first release including pypi inetgration

previous releases

  • versions prior to v1.0 were not released to pip, but distributed as a github directory

  • initially a py2 version was made available here

  • the py2 version is not maintained anymore in favor of the current py3 releases