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:
Jan Kundrát
2020-05-23 21:24:04 +02:00
parent b96ffe6c7b
commit ee5e64408d
4 changed files with 58 additions and 47 deletions

View File

@@ -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

View File

@@ -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

View File

@@ -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:

View 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)