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
FlexModelandPerformanceModelinto a singleModelclass (pyNTM.model.Model) with the full feature set: parallel links, IGP shortcuts, RSVP LSPs, and SRLGsThe canonical class is now
Model;FlexModel,PerformanceModel,Parallel_Link_Modelremain as backward-compatible aliasesModel.load_model_file()auto-detects both legacy file formats (with and withoutcircuit_idcolumn)Model.add_circuit()auto-assignscircuit_idwhen not providedRemoved the
isinstance(model, PerformanceModel)check inRSVP_LSP.traffic_on_lsp(); replaced with a capability check onigp_shortcuts_enabled
RSVP LSP Performance Improvements
parallel_lsp_groups()andparallel_demand_groups()rewritten from O(N^2 * M) nested loops to O(L) single-pass groupingRSVP_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-LSPReplaced O(n)
list.index()calls withenumerate()in path conversion methods
Interactive Visualization
New
model.visualize()method generates a self-contained HTML visualization and opens it in the browserDraggable 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
WeatherMapclass (Dash/Cytoscape) is deprecated in favor ofmodel.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
dashanddash-cytoscapepackage import in CI/CD for visualizationAllows 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_metriccolumn name in docstrings and examplesPerformanceModel had
manual_metriccolumn name in docstrings and examplesStandardized column name to
manual_metricThis was a purely cosmetic change as the actual
manual_metricis 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