mirror of
https://github.com/Telecominfraproject/oopt-gnpy.git
synced 2025-10-30 01:32:21 +00:00
examples: common code for data loading
This also moves SimParams handling to a single place. As a result, path_requests_run has just become Raman-aware (to the minimal possible extent, OK). Change-Id: I4e31af5c67335963ddab567d304f48a899cd569e
This commit is contained in:
@@ -2,6 +2,7 @@
|
||||
--------------
|
||||
|
||||
.. automodule:: gnpy.tools
|
||||
.. automodule:: gnpy.tools.cli_examples
|
||||
.. automodule:: gnpy.tools.convert
|
||||
.. automodule:: gnpy.tools.json_io
|
||||
.. automodule:: gnpy.tools.plots
|
||||
|
||||
@@ -27,7 +27,8 @@ from gnpy.topology.request import (ResultElement, jsontocsv, compute_path_dsjctn
|
||||
BLOCKING_NOPATH, correct_json_route_list,
|
||||
deduplicate_disjunctions, compute_path_with_disjunction)
|
||||
from gnpy.topology.spectrum_assignment import build_oms_list, pth_assign_spectrum
|
||||
from gnpy.tools.json_io import load_equipment, load_network, load_requests, save_network, requests_from_json, disjunctions_from_json
|
||||
import gnpy.tools.cli_examples as cli_examples
|
||||
from gnpy.tools.json_io import load_requests, save_network, requests_from_json, disjunctions_from_json
|
||||
from math import ceil
|
||||
|
||||
#EQPT_LIBRARY_FILENAME = Path(__file__).parent / 'eqpt_config.json'
|
||||
@@ -68,21 +69,7 @@ def main(args):
|
||||
# for debug
|
||||
# print( args.eqpt_filename)
|
||||
|
||||
try:
|
||||
equipment = load_equipment(args.eqpt_filename)
|
||||
network = load_network(args.network_filename, equipment)
|
||||
except exceptions.EquipmentConfigError as e:
|
||||
print(f'{ansi_escapes.red}Configuration error in the equipment library:{ansi_escapes.reset} {e}')
|
||||
exit(1)
|
||||
except exceptions.NetworkTopologyError as e:
|
||||
print(f'{ansi_escapes.red}Invalid network definition:{ansi_escapes.reset} {e}')
|
||||
exit(1)
|
||||
except exceptions.ConfigurationError as e:
|
||||
print(f'{ansi_escapes.red}Configuration error:{ansi_escapes.reset} {e}')
|
||||
exit(1)
|
||||
except exceptions.ServiceError as e:
|
||||
print(f'{ansi_escapes.red}Service error:{ansi_escapes.reset} {e}')
|
||||
exit(1)
|
||||
(equipment, network) = cli_examples.load_common_data(args.eqpt_filename, args.network_filename)
|
||||
|
||||
# Build the network once using the default power defined in SI in eqpt config
|
||||
# TODO power density: db2linp(ower_dbm": 0)/power_dbm": 0 * nb channels as defined by
|
||||
|
||||
@@ -18,20 +18,18 @@ from numpy import linspace, mean
|
||||
from gnpy.core.equipment import trx_mode_params
|
||||
from gnpy.core.network import build_network
|
||||
from gnpy.core.elements import Transceiver, Fiber, RamanFiber
|
||||
import gnpy.core.exceptions as exceptions
|
||||
from gnpy.core.parameters import SimParams
|
||||
from gnpy.core.science_utils import Simulation
|
||||
from gnpy.core.utils import db2lin, lin2db, write_csv
|
||||
import gnpy.core.ansi_escapes as ansi_escapes
|
||||
from gnpy.topology.request import PathRequest, compute_constrained_path, propagate2
|
||||
from gnpy.tools.json_io import load_equipment, load_network, save_network, load_json
|
||||
import gnpy.tools.cli_examples as cli_examples
|
||||
from gnpy.tools.json_io import save_network
|
||||
from gnpy.tools.plots import plot_baseline, plot_results
|
||||
|
||||
|
||||
logger = getLogger(__name__)
|
||||
|
||||
|
||||
def main(network, equipment, source, destination, sim_params, req=None):
|
||||
def main(network, equipment, source, destination, req=None):
|
||||
result_dicts = {}
|
||||
network_data = [{
|
||||
'network_name' : str(args.filename),
|
||||
@@ -58,15 +56,6 @@ def main(network, equipment, source, destination, sim_params, req=None):
|
||||
build_network(network, equipment, pref_ch_db, pref_total_db)
|
||||
path = compute_constrained_path(network, req)
|
||||
|
||||
if sim_params:
|
||||
Simulation.set_params(sim_params)
|
||||
|
||||
if len([s.params.length for s in path if isinstance(s, RamanFiber)]):
|
||||
if sim_params is None:
|
||||
print(f'{ansi_escapes.red}Invocation error:{ansi_escapes.reset} '
|
||||
f'RamanFiber requires passing simulation params via --sim-params')
|
||||
exit(1)
|
||||
|
||||
spans = [s.params.length for s in path if isinstance(s, RamanFiber) or isinstance(s, Fiber)]
|
||||
print(f'\nThere are {len(spans)} fiber spans over {sum(spans)/1000:.0f} km between {source.uid} '
|
||||
f'and {destination.uid}')
|
||||
@@ -146,22 +135,8 @@ if __name__ == '__main__':
|
||||
args = parser.parse_args()
|
||||
basicConfig(level={0: ERROR, 1: INFO, 2: DEBUG}.get(args.verbose, DEBUG))
|
||||
|
||||
try:
|
||||
equipment = load_equipment(args.equipment)
|
||||
network = load_network(args.filename, equipment, args.names_matching)
|
||||
sim_params = SimParams(**load_json(args.sim_params)) if args.sim_params is not None else None
|
||||
except exceptions.EquipmentConfigError as e:
|
||||
print(f'{ansi_escapes.red}Configuration error in the equipment library:{ansi_escapes.reset} {e}')
|
||||
exit(1)
|
||||
except exceptions.NetworkTopologyError as e:
|
||||
print(f'{ansi_escapes.red}Invalid network definition:{ansi_escapes.reset} {e}')
|
||||
exit(1)
|
||||
except exceptions.ConfigurationError as e:
|
||||
print(f'{ansi_escapes.red}Configuration error:{ansi_escapes.reset} {e}')
|
||||
exit(1)
|
||||
except exceptions.ParametersError as e:
|
||||
print(f'{ansi_escapes.red}Simulation parameters error:{ansi_escapes.reset} {e}')
|
||||
exit(1)
|
||||
(equipment, network) = cli_examples.load_common_data(args.equipment, args.filename, args.sim_params,
|
||||
fuzzy_name_matching=args.names_matching)
|
||||
|
||||
if args.plot:
|
||||
plot_baseline(network)
|
||||
@@ -231,7 +206,7 @@ if __name__ == '__main__':
|
||||
trx_params['power'] = db2lin(float(args.power))*1e-3
|
||||
params.update(trx_params)
|
||||
req = PathRequest(**params)
|
||||
path, infos = main(network, equipment, source, destination, sim_params, req)
|
||||
path, infos = main(network, equipment, source, destination, req)
|
||||
save_network(args.filename, network)
|
||||
|
||||
if args.show_channels:
|
||||
|
||||
48
gnpy/tools/cli_examples.py
Normal file
48
gnpy/tools/cli_examples.py
Normal file
@@ -0,0 +1,48 @@
|
||||
#!/usr/bin/env python3
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
'''
|
||||
gnpy.tools.cli_examples
|
||||
=======================
|
||||
|
||||
Common code for CLI examples
|
||||
'''
|
||||
|
||||
import gnpy.core.ansi_escapes as ansi_escapes
|
||||
from gnpy.core.elements import RamanFiber
|
||||
import gnpy.core.exceptions as exceptions
|
||||
from gnpy.core.parameters import SimParams
|
||||
from gnpy.core.science_utils import Simulation
|
||||
from gnpy.tools.json_io import load_equipment, load_network, load_json
|
||||
|
||||
|
||||
def load_common_data(equipment_filename, topology_filename, simulation_filename=None, fuzzy_name_matching=False):
|
||||
'''Load common configuration from JSON files'''
|
||||
try:
|
||||
equipment = load_equipment(equipment_filename)
|
||||
network = load_network(topology_filename, equipment, fuzzy_name_matching)
|
||||
sim_params = SimParams(**load_json(simulation_filename)) if simulation_filename is not None else None
|
||||
if not sim_params:
|
||||
if next((node for node in network if isinstance(node, RamanFiber)), None) is not None:
|
||||
print(f'{ansi_escapes.red}Invocation error:{ansi_escapes.reset} '
|
||||
f'RamanFiber requires passing simulation params via --sim-params')
|
||||
exit(1)
|
||||
else:
|
||||
Simulation.set_params(sim_params)
|
||||
except exceptions.EquipmentConfigError as e:
|
||||
print(f'{ansi_escapes.red}Configuration error in the equipment library:{ansi_escapes.reset} {e}')
|
||||
exit(1)
|
||||
except exceptions.NetworkTopologyError as e:
|
||||
print(f'{ansi_escapes.red}Invalid network definition:{ansi_escapes.reset} {e}')
|
||||
exit(1)
|
||||
except exceptions.ConfigurationError as e:
|
||||
print(f'{ansi_escapes.red}Configuration error:{ansi_escapes.reset} {e}')
|
||||
exit(1)
|
||||
except exceptions.ParametersError as e:
|
||||
print(f'{ansi_escapes.red}Simulation parameters error:{ansi_escapes.reset} {e}')
|
||||
exit(1)
|
||||
except exceptions.ServiceError as e:
|
||||
print(f'{ansi_escapes.red}Service error:{ansi_escapes.reset} {e}')
|
||||
exit(1)
|
||||
|
||||
return (equipment, network)
|
||||
Reference in New Issue
Block a user