def test_raman_fiber(): """ Test the accuracy of propagating the RamanFiber.""" # spectral information generation power = 1e-3 eqpt_params = load_json(TEST_DIR / 'data' / 'eqpt_config.json') spectral_info_params = eqpt_params['SI'][0] spectral_info_params.pop('power_dbm') spectral_info_params.pop('power_range_db') spectral_info_params.pop('tx_osnr') spectral_info_params.pop('sys_margins') spectral_info_input = create_input_spectral_information(power=power, **spectral_info_params) SimParams.set_params(load_json(TEST_DIR / 'data' / 'sim_params.json')) fiber = RamanFiber(**load_json(TEST_DIR / 'data' / 'raman_fiber_config.json')) # propagation spectral_info_out = fiber(spectral_info_input) p_signal = [carrier.power.signal for carrier in spectral_info_out.carriers] p_ase = [carrier.power.ase for carrier in spectral_info_out.carriers] p_nli = [carrier.power.nli for carrier in spectral_info_out.carriers] expected_results = read_csv(TEST_DIR / 'data' / 'test_science_utils_expected_results.csv') assert_allclose(p_signal, expected_results['signal'], rtol=1e-3) assert_allclose(p_ase, expected_results['ase'], rtol=1e-3) assert_allclose(p_nli, expected_results['nli'], rtol=1e-3)
def test_sim_parameters(): j = load_json(DATA_DIR / 'sim_params.json') sim_params = SimParams(**j) Simulation.set_params(sim_params) s1 = Simulation.get_simulation() assert s1.sim_params.raman_params.flag_raman s2 = Simulation.get_simulation() assert s2.sim_params.raman_params.flag_raman j['raman_parameters']['flag_raman'] = False sim_params = SimParams(**j) Simulation.set_params(sim_params) assert not s2.sim_params.raman_params.flag_raman assert not s1.sim_params.raman_params.flag_raman
def load_common_data(equipment_filename, topology_filename, simulation_filename, save_raw_network_filename): '''Load common configuration from JSON files''' try: equipment = load_equipment(equipment_filename) network = load_network(topology_filename, equipment) if save_raw_network_filename is not None: save_network(network, save_raw_network_filename) print( f'{ansi_escapes.blue}Raw network (no optimizations) saved to {save_raw_network_filename}{ansi_escapes.reset}' ) if not simulation_filename: 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' ) sys.exit(1) else: sim_params = load_json(simulation_filename) SimParams.set_params(sim_params) except exceptions.EquipmentConfigError as e: print( f'{ansi_escapes.red}Configuration error in the equipment library:{ansi_escapes.reset} {e}' ) sys.exit(1) except exceptions.NetworkTopologyError as e: print( f'{ansi_escapes.red}Invalid network definition:{ansi_escapes.reset} {e}' ) sys.exit(1) except exceptions.ParametersError as e: print( f'{ansi_escapes.red}Simulation parameters error:{ansi_escapes.reset} {e}' ) sys.exit(1) except exceptions.ConfigurationError as e: print( f'{ansi_escapes.red}Configuration error:{ansi_escapes.reset} {e}') sys.exit(1) except exceptions.ServiceError as e: print(f'{ansi_escapes.red}Service error:{ansi_escapes.reset} {e}') sys.exit(1) return (equipment, network)
def test_sim_parameters(): sim_params = {'nli_params': {}, 'raman_params': {}} SimParams.set_params(sim_params) s1 = SimParams.get() assert s1.nli_params.method == 'gn_model_analytic' s2 = SimParams.get() assert not s1.raman_params.flag sim_params['raman_params']['flag'] = True SimParams.set_params(sim_params) assert s2.raman_params.flag assert s1.raman_params.flag
empty, vstack, trapz, arcsinh, clip, abs, sum from operator import attrgetter from logging import getLogger import scipy.constants as ph from scipy.integrate import solve_bvp from scipy.integrate import cumtrapz from scipy.interpolate import interp1d from scipy.optimize import OptimizeResult from math import isclose from gnpy.core.utils import db2lin, lin2db from gnpy.core.exceptions import EquipmentConfigError from gnpy.core.parameters import SimParams logger = getLogger(__name__) sim_params = SimParams.get() def propagate_raman_fiber(fiber, *carriers): raman_params = sim_params.raman_params nli_params = sim_params.nli_params # apply input attenuation to carriers attenuation_in = db2lin(fiber.params.con_in + fiber.params.att_in) chan = [] for carrier in carriers: pwr = carrier.power pwr = pwr._replace(signal=pwr.signal / attenuation_in, nli=pwr.nli / attenuation_in, ase=pwr.ase / attenuation_in) carrier = carrier._replace(power=pwr) chan.append(carrier) carriers = tuple(f for f in chan)