mirror of
https://github.com/Telecominfraproject/oopt-gnpy.git
synced 2025-10-30 17:47:50 +00:00
Compare commits
28 Commits
experiment
...
experiment
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
049b077ee4 | ||
|
|
ab2080a805 | ||
|
|
8ab54e76df | ||
|
|
0465397b1d | ||
|
|
d3ec39d506 | ||
|
|
bfe68a5948 | ||
|
|
2ea3363613 | ||
|
|
89cce6e6a3 | ||
|
|
0f10ac706c | ||
|
|
66d26f0ffa | ||
|
|
3c96914482 | ||
|
|
61b1e73362 | ||
|
|
03435079cc | ||
|
|
6661907c1d | ||
|
|
fe811f725c | ||
|
|
f015c6abed | ||
|
|
8598e6591f | ||
|
|
5e2259062c | ||
|
|
d483802a86 | ||
|
|
9a0eece69c | ||
|
|
1657bfd05f | ||
|
|
49bf558916 | ||
|
|
99f44a597b | ||
|
|
a21f3fe6ee | ||
|
|
0ccbb2960c | ||
|
|
029bac4b03 | ||
|
|
a27ad57220 | ||
|
|
8d31d924f2 |
8
.zuul.yaml
Normal file
8
.zuul.yaml
Normal file
@@ -0,0 +1,8 @@
|
||||
---
|
||||
- project:
|
||||
check:
|
||||
jobs:
|
||||
- noop
|
||||
gate:
|
||||
jobs:
|
||||
- noop
|
||||
@@ -27,7 +27,7 @@ Documentation: https://gnpy.readthedocs.io
|
||||
Get In Touch
|
||||
~~~~~~~~~~~~
|
||||
|
||||
There are `weekly calls <https://telecominfraproject.workplace.com/events/458339931322799/>`__ about our progress.
|
||||
There are `weekly calls <https://telecominfraproject.workplace.com/events/702894886867547/>`__ about our progress.
|
||||
Newcomers, users and telecom operators are especially welcome there.
|
||||
We encourage all interested people outside the TIP to `join the project <https://telecominfraproject.com/apply-for-membership/>`__.
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"elements": [
|
||||
{
|
||||
"uid": "netconf:10.0.254.93:830",
|
||||
"uid": "netconf:10.0.254.76:830",
|
||||
"type": "Transceiver"
|
||||
},
|
||||
{
|
||||
@@ -11,7 +11,7 @@
|
||||
"target_pch_out_db": -2.0,
|
||||
"per_degree_target_pch_out_db": [
|
||||
{
|
||||
"to_node": "netconf:10.0.254.93:830",
|
||||
"to_node": "netconf:10.0.254.76:830",
|
||||
"target_pch_out_db": -25
|
||||
},
|
||||
{
|
||||
@@ -26,7 +26,7 @@
|
||||
}
|
||||
},
|
||||
{
|
||||
"uid": "netconf:10.0.254.101:830",
|
||||
"uid": "netconf:10.0.254.78:830",
|
||||
"type": "Roadm",
|
||||
"params": {
|
||||
"target_pch_out_db": -23.0,
|
||||
@@ -143,7 +143,7 @@
|
||||
}
|
||||
},
|
||||
{
|
||||
"uid": "netconf:10.0.254.235:830",
|
||||
"uid": "netconf:10.0.254.79:830",
|
||||
"type": "Roadm",
|
||||
"params": {
|
||||
"target_pch_out_db": -23.0,
|
||||
@@ -260,7 +260,7 @@
|
||||
}
|
||||
},
|
||||
{
|
||||
"uid": "netconf:10.0.254.94:830",
|
||||
"uid": "netconf:10.0.254.77:830",
|
||||
"type": "Transceiver"
|
||||
},
|
||||
{
|
||||
@@ -270,7 +270,7 @@
|
||||
"target_pch_out_db": -2.0,
|
||||
"per_degree_target_pch_out_db": [
|
||||
{
|
||||
"to_node": "netconf:10.0.254.94:830",
|
||||
"to_node": "netconf:10.0.254.77:830",
|
||||
"target_pch_out_db": -25
|
||||
},
|
||||
{
|
||||
@@ -852,20 +852,20 @@
|
||||
],
|
||||
"connections": [
|
||||
{
|
||||
"from_node": "netconf:10.0.254.93:830",
|
||||
"from_node": "netconf:10.0.254.76:830",
|
||||
"to_node": "netconf:10.0.254.107:830"
|
||||
},
|
||||
{
|
||||
"from_node": "netconf:10.0.254.107:830",
|
||||
"to_node": "netconf:10.0.254.93:830"
|
||||
"to_node": "netconf:10.0.254.76:830"
|
||||
},
|
||||
{
|
||||
"from_node": "netconf:10.0.254.101:830",
|
||||
"from_node": "netconf:10.0.254.78:830",
|
||||
"to_node": "roadm-Amsterdam-L1-booster"
|
||||
},
|
||||
{
|
||||
"from_node": "roadm-Amsterdam-L1-preamp",
|
||||
"to_node": "netconf:10.0.254.101:830"
|
||||
"to_node": "netconf:10.0.254.78:830"
|
||||
},
|
||||
{
|
||||
"from_node": "netconf:10.0.254.107:830",
|
||||
@@ -881,10 +881,10 @@
|
||||
},
|
||||
{
|
||||
"from_node": "splice-(patch-(roadm-Amsterdam-AD)-(roadm-Amsterdam-L1))-(roadm-Amsterdam-L1)",
|
||||
"to_node": "netconf:10.0.254.101:830"
|
||||
"to_node": "netconf:10.0.254.78:830"
|
||||
},
|
||||
{
|
||||
"from_node": "netconf:10.0.254.101:830",
|
||||
"from_node": "netconf:10.0.254.78:830",
|
||||
"to_node": "splice-(roadm-Amsterdam-L1)-(patch-(roadm-Amsterdam-L1)-(roadm-Amsterdam-AD))"
|
||||
},
|
||||
{
|
||||
@@ -900,7 +900,7 @@
|
||||
"to_node": "netconf:10.0.254.107:830"
|
||||
},
|
||||
{
|
||||
"from_node": "netconf:10.0.254.101:830",
|
||||
"from_node": "netconf:10.0.254.78:830",
|
||||
"to_node": "splice-(roadm-Amsterdam-L1)-(patch-(roadm-Amsterdam-L1)-(roadm-Amsterdam-L2))"
|
||||
},
|
||||
{
|
||||
@@ -913,15 +913,15 @@
|
||||
},
|
||||
{
|
||||
"from_node": "splice-(patch-(roadm-Amsterdam-L1)-(roadm-Amsterdam-L2))-(roadm-Amsterdam-L2)",
|
||||
"to_node": "netconf:10.0.254.235:830"
|
||||
"to_node": "netconf:10.0.254.79:830"
|
||||
},
|
||||
{
|
||||
"from_node": "netconf:10.0.254.235:830",
|
||||
"from_node": "netconf:10.0.254.79:830",
|
||||
"to_node": "roadm-Amsterdam-L2-booster"
|
||||
},
|
||||
{
|
||||
"from_node": "roadm-Amsterdam-L2-preamp",
|
||||
"to_node": "netconf:10.0.254.235:830"
|
||||
"to_node": "netconf:10.0.254.79:830"
|
||||
},
|
||||
{
|
||||
"from_node": "netconf:10.0.254.107:830",
|
||||
@@ -937,10 +937,10 @@
|
||||
},
|
||||
{
|
||||
"from_node": "splice-(patch-(roadm-Amsterdam-AD)-(roadm-Amsterdam-L2))-(roadm-Amsterdam-L2)",
|
||||
"to_node": "netconf:10.0.254.235:830"
|
||||
"to_node": "netconf:10.0.254.79:830"
|
||||
},
|
||||
{
|
||||
"from_node": "netconf:10.0.254.235:830",
|
||||
"from_node": "netconf:10.0.254.79:830",
|
||||
"to_node": "splice-(roadm-Amsterdam-L2)-(patch-(roadm-Amsterdam-L2)-(roadm-Amsterdam-AD))"
|
||||
},
|
||||
{
|
||||
@@ -956,7 +956,7 @@
|
||||
"to_node": "netconf:10.0.254.107:830"
|
||||
},
|
||||
{
|
||||
"from_node": "netconf:10.0.254.235:830",
|
||||
"from_node": "netconf:10.0.254.79:830",
|
||||
"to_node": "splice-(roadm-Amsterdam-L2)-(patch-(roadm-Amsterdam-L2)-(roadm-Amsterdam-L1))"
|
||||
},
|
||||
{
|
||||
@@ -969,15 +969,15 @@
|
||||
},
|
||||
{
|
||||
"from_node": "splice-(patch-(roadm-Amsterdam-L2)-(roadm-Amsterdam-L1))-(roadm-Amsterdam-L1)",
|
||||
"to_node": "netconf:10.0.254.101:830"
|
||||
"to_node": "netconf:10.0.254.78:830"
|
||||
},
|
||||
{
|
||||
"from_node": "netconf:10.0.254.94:830",
|
||||
"from_node": "netconf:10.0.254.77:830",
|
||||
"to_node": "netconf:10.0.254.225:830"
|
||||
},
|
||||
{
|
||||
"from_node": "netconf:10.0.254.225:830",
|
||||
"to_node": "netconf:10.0.254.94:830"
|
||||
"to_node": "netconf:10.0.254.77:830"
|
||||
},
|
||||
{
|
||||
"from_node": "netconf:10.0.254.100:830",
|
||||
|
||||
@@ -141,28 +141,35 @@ for _, E in enumerate(J["elements"]):
|
||||
# E["operational"]["out_voa"] = 21
|
||||
|
||||
translate = {
|
||||
"trx-Amsterdam": "10.0.254.93",
|
||||
"trx-Bremen": "10.0.254.94",
|
||||
#"trx-Amsterdam": "10.0.254.93",
|
||||
#"trx-Bremen": "10.0.254.94",
|
||||
"trx-Amsterdam": "10.0.254.76",
|
||||
"trx-Bremen": "10.0.254.77",
|
||||
|
||||
# coherent-v9u
|
||||
# Amsterdam A/D: coherent-v9u
|
||||
"roadm-Amsterdam-AD": "10.0.254.107",
|
||||
# -spi
|
||||
# Bremen A/D: -spi
|
||||
"roadm-Bremen-AD": "10.0.254.225",
|
||||
|
||||
# Amsterdam -> Bremen ...QC8B
|
||||
"roadm-Amsterdam-L1": "10.0.254.101",
|
||||
# ...QCP9
|
||||
# Amsterdam -> Bremen ...QR79
|
||||
"roadm-Amsterdam-L1": "10.0.254.78",
|
||||
# Bremen -> Amsterdam ...QCP9
|
||||
"roadm-Bremen-L2": "10.0.254.102",
|
||||
|
||||
# WKP: Bremen -> Cologne
|
||||
# Bremen -> Cologne ...WKP
|
||||
"roadm-Bremen-L1": "10.0.254.100",
|
||||
# LK6: Cologne -> Bremen
|
||||
# Cologne -> Bremen ...QLK6
|
||||
"roadm-Cologne-L2": "10.0.254.104",
|
||||
|
||||
# TQQ: Cologne -> Amsterdam
|
||||
# Cologne -> Amsterdam ...TQQ
|
||||
"roadm-Cologne-L1": "10.0.254.99",
|
||||
# NFP: Amsterdam -> Cologne
|
||||
"roadm-Amsterdam-L2": "10.0.254.235",
|
||||
# Amsterdam -> Cologne ...Q7JS
|
||||
"roadm-Amsterdam-L2": "10.0.254.79",
|
||||
|
||||
# spare Line/Degree ...QC8B
|
||||
"spare-line-degree": "10.0.254.101",
|
||||
# spare Add/Drop: ...NNN
|
||||
"spare-add-drop": "10.0.254.228",
|
||||
}
|
||||
|
||||
import json
|
||||
|
||||
@@ -32,6 +32,7 @@ from json import dumps
|
||||
from pathlib import Path
|
||||
from difflib import get_close_matches
|
||||
from gnpy.core.utils import silent_remove
|
||||
from gnpy.core.exceptions import NetworkTopologyError
|
||||
import time
|
||||
|
||||
all_rows = lambda sh, start=0: (sh.row(x) for x in range(start, sh.nrows))
|
||||
@@ -509,9 +510,12 @@ def parse_excel(input_filename):
|
||||
all_cities = Counter(n.city for n in nodes)
|
||||
if len(all_cities) != len(nodes):
|
||||
raise ValueError(f'Duplicate city: {all_cities}')
|
||||
if any(ln.from_city not in all_cities or
|
||||
ln.to_city not in all_cities for ln in links):
|
||||
raise ValueError(f'Bad link.')
|
||||
bad_links = []
|
||||
for lnk in links:
|
||||
if lnk.from_city not in all_cities or lnk.to_city not in all_cities:
|
||||
bad_links.append([lnk.from_city, lnk.to_city])
|
||||
if bad_links:
|
||||
raise NetworkTopologyError(f'Bad link(s): {bad_links}.')
|
||||
|
||||
return nodes, links, eqpts
|
||||
|
||||
|
||||
@@ -25,7 +25,7 @@ from collections import namedtuple
|
||||
|
||||
from gnpy.core.node import Node
|
||||
from gnpy.core.units import UNITS
|
||||
from gnpy.core.utils import lin2db, db2lin, itufs, itufl, snr_sum
|
||||
from gnpy.core.utils import lin2db, db2lin, arrange_frequencies, snr_sum
|
||||
from gnpy.core.science_utils import propagate_raman_fiber, _psi
|
||||
|
||||
class Transceiver(Node):
|
||||
@@ -630,7 +630,7 @@ class Edfa(Node):
|
||||
self.channel_freq, self.nf, self.interpol_dgt and self.interpol_gain_ripple
|
||||
"""
|
||||
# TODO|jla: read amplifier actual frequencies from additional params in json
|
||||
amplifier_freq = itufl(len(self.params.dgt), self.params.f_min, self.params.f_max) # Hz
|
||||
amplifier_freq = arrange_frequencies(len(self.params.dgt), self.params.f_min, self.params.f_max) # Hz
|
||||
self.channel_freq = frequencies
|
||||
self.interpol_dgt = interp(self.channel_freq, amplifier_freq, self.params.dgt)
|
||||
|
||||
|
||||
@@ -37,14 +37,10 @@ class Bitmap:
|
||||
self.freq_index = list(range(n_min, n_max+1))
|
||||
if bitmap is None:
|
||||
self.bitmap = [1] * (n_max-n_min+1)
|
||||
elif len(bitmap) == len(self.freq_index):
|
||||
self.bitmap = bitmap
|
||||
else:
|
||||
if len(bitmap) == len(self.freq_index):
|
||||
self.bitmap = bitmap
|
||||
else:
|
||||
msg = f'bitmap is not consistant with f_min{f_min} - n :' +\
|
||||
f'{n_min} and f_max{f_max}- n :{n_max}'
|
||||
LOGGER.critical(msg)
|
||||
raise SpectrumError(msg)
|
||||
raise SpectrumError(f'bitmap is not consistant with f_min{f_min} - n: {n_min} and f_max{f_max}- n :{n_max}')
|
||||
|
||||
def getn(self, i):
|
||||
""" converts the n (itu grid) into a local index
|
||||
@@ -72,7 +68,7 @@ class Bitmap:
|
||||
OMSParams = namedtuple('OMSParams', 'oms_id el_id_list el_list')
|
||||
|
||||
class OMS:
|
||||
""" OMS class is the logical container that represent a link betwoeen two adjacent ROADMs and
|
||||
""" OMS class is the logical container that represent a link between two adjacent ROADMs and
|
||||
records the crossed elements and the occupied spectrum
|
||||
"""
|
||||
def __init__(self, *args, **params):
|
||||
@@ -102,7 +98,7 @@ class OMS:
|
||||
""" frequencies expressed in Hz
|
||||
"""
|
||||
if existing_spectrum is None:
|
||||
# add some 150 GHz margin to eable a center channel on f_min
|
||||
# add some 150 GHz margin to enable a center channel on f_min
|
||||
# use ITU-T G694.1
|
||||
# Flexible DWDM grid definition
|
||||
# For the flexible DWDM grid, the allowed frequency slots have a nominal
|
||||
@@ -122,13 +118,9 @@ class OMS:
|
||||
def assign_spectrum(self, nvalue, mvalue):
|
||||
""" change oms spectrum to mark spectrum assigned
|
||||
"""
|
||||
# print("assign_spectrum")
|
||||
# print(f'n , m :{n},{m}')
|
||||
if (nvalue is None or mvalue is None or isinstance(nvalue, float)
|
||||
or isinstance(mvalue, float) or mvalue == 0):
|
||||
msg = f'could not assign None values'
|
||||
LOGGER.critical(msg)
|
||||
raise SpectrumError(msg)
|
||||
raise SpectrumError('could not assign None values')
|
||||
startn, stopn = mvalue_to_slots(nvalue, mvalue)
|
||||
# print(f'startn stop n {startn} , {stopn}')
|
||||
# assumes that guardbands are sufficient to ensure that assigning a center channel
|
||||
@@ -241,19 +233,8 @@ def build_oms_list(network, equipment):
|
||||
nd_out.oms_list = []
|
||||
nd_out.oms_list.append(oms_id)
|
||||
|
||||
# print(f'coucou2 {oms.oms_id} {oms.el_id_list[0]} {oms.el_id_list[-1]}')
|
||||
# for e in oms.el_id_list:
|
||||
# print(f' {e}')
|
||||
|
||||
# TODO do not forget to correct next line !
|
||||
# to test different grids
|
||||
# TODO move this to test
|
||||
if oms_id < 3:
|
||||
oms.update_spectrum(equipment['SI']['default'].f_min,
|
||||
equipment['SI']['default'].f_max, grid=0.00625e12)
|
||||
else:
|
||||
oms.update_spectrum(equipment['SI']['default'].f_min,
|
||||
equipment['SI']['default'].f_max, grid=0.00625e12)
|
||||
oms.update_spectrum(equipment['SI']['default'].f_min,
|
||||
equipment['SI']['default'].f_max, grid=0.00625e12)
|
||||
# oms.assign_spectrum(13,7) gives back (193137500000000.0, 193225000000000.0)
|
||||
# as in the example in the standard
|
||||
# oms.assign_spectrum(13,7)
|
||||
@@ -357,6 +338,8 @@ def select_candidate(candidates, policy):
|
||||
return candidates[0]
|
||||
else:
|
||||
return (None, None, None)
|
||||
else:
|
||||
raise ServiceError('Only first_fit spectrum assignment policy is implemented.')
|
||||
|
||||
def pth_assign_spectrum(pths, rqs, oms_list, rpths):
|
||||
""" basic first fit assignment
|
||||
@@ -372,9 +355,9 @@ def pth_assign_spectrum(pths, rqs, oms_list, rpths):
|
||||
except AttributeError:
|
||||
nb_wl = ceil(rqs[i].path_bandwidth / rqs[i].bit_rate)
|
||||
# computes the total nb of slots according to requested spacing
|
||||
# todo : express superchannels
|
||||
# TODO : express superchannels
|
||||
# assumes that all channels must be grouped
|
||||
# todo : enables non contiguous reservation in case of blocking
|
||||
# TODO : enables non contiguous reservation in case of blocking
|
||||
requested_m = ceil(rqs[i].spacing / 0.0125e12) * nb_wl
|
||||
# concatenate all path and reversed path elements to derive slots availability
|
||||
(center_n, startn, stopn), path_oms = spectrum_selection(pth + rpths[i], oms_list, requested_m,
|
||||
|
||||
@@ -73,35 +73,19 @@ def c():
|
||||
return constants.c
|
||||
|
||||
|
||||
def itufs(spacing, startf=191.35, stopf=196.10):
|
||||
"""Creates an array of frequencies whose default range is
|
||||
191.35-196.10 THz
|
||||
|
||||
:param spacing: Frequency spacing in THz
|
||||
:param starf: Start frequency in THz
|
||||
:param stopf: Stop frequency in THz
|
||||
:type spacing: float
|
||||
:type startf: float
|
||||
:type stopf: float
|
||||
:return an array of frequnecies determined by the spacing parameter
|
||||
:rtype: numpy.ndarray
|
||||
"""
|
||||
return np.arange(startf, stopf + spacing / 2, spacing)
|
||||
|
||||
def itufl(length, startf=191.35, stopf=196.10):
|
||||
"""Creates an array of frequencies whose default range is
|
||||
191.35-196.10 THz
|
||||
def arrange_frequencies(length, start, stop):
|
||||
"""Create an array of frequencies
|
||||
|
||||
:param length: number of elements
|
||||
:param starf: Start frequency in THz
|
||||
:param stopf: Stop frequency in THz
|
||||
:param star: Start frequency in THz
|
||||
:param stop: Stop frequency in THz
|
||||
:type length: integer
|
||||
:type startf: float
|
||||
:type stopf: float
|
||||
:return an array of frequnecies determined by the spacing parameter
|
||||
:type start: float
|
||||
:type stop: float
|
||||
:return an array of frequencies determined by the spacing parameter
|
||||
:rtype: numpy.ndarray
|
||||
"""
|
||||
return np.linspace(startf, stopf, length)
|
||||
return np.linspace(start, stop, length)
|
||||
|
||||
def h():
|
||||
"""
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
alabaster>=0.7.12,<1
|
||||
docutils==0.15.2
|
||||
flask==1.0.2
|
||||
flask-restful==0.3.7
|
||||
matplotlib>=3.1.0,<4
|
||||
|
||||
2
setup.py
2
setup.py
@@ -11,7 +11,7 @@ with open(path.join(here, 'README.rst'), encoding='utf-8') as f:
|
||||
|
||||
setup(
|
||||
name='gnpy',
|
||||
version='1.2.0',
|
||||
version='2.1',
|
||||
description='route planning and optimization tool for mesh optical networks',
|
||||
long_description=long_description,
|
||||
long_description_content_type='text/x-rst; charset=UTF-8',
|
||||
|
||||
97
tests/data/expected_results_science_utils.csv
Normal file
97
tests/data/expected_results_science_utils.csv
Normal file
@@ -0,0 +1,97 @@
|
||||
,signal,ase,nli
|
||||
0,0.0002869472910750076,3.829243751386179e-08,2.157043502374111e-07
|
||||
1,0.000284426444181902,3.8108068606265256e-08,2.1799950841472648e-07
|
||||
2,0.0002819286625240274,3.7925434667811625e-08,2.2023841125044652e-07
|
||||
3,0.0002794537215642205,3.774451238936698e-08,2.224218994135113e-07
|
||||
4,0.0002756243295734432,3.739256063612741e-08,2.2343448272114653e-07
|
||||
5,0.0002718482755003954,3.7044477620123535e-08,2.2437826192962217e-07
|
||||
6,0.0002681247979313455,3.6700201831013766e-08,2.2525495466695055e-07
|
||||
7,0.0002644507001383656,3.635953568122817e-08,2.2606415187870565e-07
|
||||
8,0.0002608253488031495,3.602242321653821e-08,2.268074852150968e-07
|
||||
9,0.00025690468888571607,3.564391587795796e-08,2.2718285844824803e-07
|
||||
10,0.0002530414048173237,3.5269661038482016e-08,2.2749429758476786e-07
|
||||
11,0.0002492279873568786,3.4899736994459975e-08,2.277374766526846e-07
|
||||
12,0.0002454639458992114,3.4534068616323406e-08,2.2791414400784552e-07
|
||||
13,0.00024174879168999762,3.417258192135115e-08,2.280260208417629e-07
|
||||
14,0.00023798746912556782,3.3802278288721e-08,2.2798420759779948e-07
|
||||
15,0.00023427697848575827,3.3436265380528345e-08,2.2788101592690985e-07
|
||||
16,0.00023061678363205047,3.30744682841412e-08,2.2771816297652923e-07
|
||||
17,0.00022700656967542085,3.271682680678683e-08,2.2749755602884014e-07
|
||||
18,0.0002234457948096593,3.236326805537296e-08,2.236182244259085e-07
|
||||
19,0.0002195336193536736,3.195819496314336e-08,2.193976173454328e-07
|
||||
20,0.00021568313139087874,3.155821230359698e-08,2.1524945887103656e-07
|
||||
21,0.00021189361260563733,3.116322489050993e-08,2.1117277567390236e-07
|
||||
22,0.00020816423698459606,3.0773141693336075e-08,2.0716649124094935e-07
|
||||
23,0.0002044941867087381,3.038787321635763e-08,2.032295417993187e-07
|
||||
24,0.00020116081520673765,3.00440338127331e-08,1.9963693210324778e-07
|
||||
25,0.00019787569461895006,2.9704199888387147e-08,1.9610141536963145e-07
|
||||
26,0.00019463824873065924,2.9368302916351224e-08,1.9262221997372471e-07
|
||||
27,0.0001914486066928752,2.903632427420397e-08,1.8919927457565086e-07
|
||||
28,0.00018830616497930887,2.870819640079397e-08,1.858317840670677e-07
|
||||
29,0.00018521032563368435,2.838385281897912e-08,1.8251896218718178e-07
|
||||
30,0.00018216049720979434,2.8063228018898468e-08,1.7926003240909075e-07
|
||||
31,0.0001791561867005718,2.7746255438682553e-08,1.76054318231933e-07
|
||||
32,0.00017619680881744213,2.7432871709278503e-08,1.7290105534292413e-07
|
||||
33,0.00017328178390236163,2.7123014438128492e-08,1.6979948820364567e-07
|
||||
34,0.00017049664136784971,2.6828118382010868e-08,1.668331233176527e-07
|
||||
35,0.0001677518922618999,2.6536524600591003e-08,1.639139770351797e-07
|
||||
36,0.00016504703499520338,2.6248178236430935e-08,1.6104139135571758e-07
|
||||
37,0.0001623826677977635,2.596311344676757e-08,1.579538179464147e-07
|
||||
38,0.0001597582427278653,2.5681275450827438e-08,1.549209871570718e-07
|
||||
39,0.0001571732182028194,2.5402610321183817e-08,1.5194201541886346e-07
|
||||
40,0.00015462705891566638,2.512706495768609e-08,1.490160317195833e-07
|
||||
41,0.00015212101646392648,2.4854546722771583e-08,1.4614388817377845e-07
|
||||
42,0.00014965447757986727,2.4585006051161647e-08,1.4332463586636234e-07
|
||||
43,0.00014722683809507942,2.4318394065447274e-08,1.4055734193947907e-07
|
||||
44,0.0001447164668892396,2.4034548127308286e-08,1.3772590008270512e-07
|
||||
45,0.00014224784112375704,2.3753926686114635e-08,1.3494914625939818e-07
|
||||
46,0.00013982028367499942,2.3476475779461364e-08,1.3222606385780792e-07
|
||||
47,0.00013743418748445304,2.3202244204140228e-08,1.2955665313419502e-07
|
||||
48,0.00013508884015386575,2.2931178307200807e-08,1.269398709602497e-07
|
||||
49,0.00013278354172499636,2.2663225269637508e-08,1.243746944213211e-07
|
||||
50,0.0001305176041972383,2.2398333101097452e-08,1.2186012017916144e-07
|
||||
51,0.00012829168984639723,2.2136419884279648e-08,1.1939640981690787e-07
|
||||
52,0.00012610506317956035,2.1877436733290284e-08,1.169825203056231e-07
|
||||
53,0.000123957002859191,2.1621335420785434e-08,1.1461743054419468e-07
|
||||
54,0.00012180241033649304,2.1360152817604167e-08,1.1225922783038433e-07
|
||||
55,0.00011968650905779935,2.1101906890578305e-08,1.0994951537259513e-07
|
||||
56,0.000117608577762061,2.0846548870078847e-08,1.0757395097864581e-07
|
||||
57,0.00011556891128259058,2.0594151467353748e-08,1.0524972555992308e-07
|
||||
58,0.00011356676177301841,2.0344667169015006e-08,1.0297570549831857e-07
|
||||
59,0.00011160139690545192,2.00980493433389e-08,1.0075078305548045e-07
|
||||
60,0.00010967209909252646,1.985425227516509e-08,9.857387536569511e-08
|
||||
61,0.00010777915187087522,1.9613208260272527e-08,9.644480679616336e-08
|
||||
62,0.00010592181397175155,1.937487453011716e-08,9.436248424611683e-08
|
||||
63,0.00010409936038610526,1.913920913597429e-08,9.23258408012148e-08
|
||||
64,0.00010246447558375888,1.8936226281729442e-08,9.046927135291653e-08
|
||||
65,0.00010085803630104006,1.87354387522902e-08,8.865067925960373e-08
|
||||
66,9.927950010553608e-05,1.853681852284204e-08,8.686925127146881e-08
|
||||
67,9.772837346090978e-05,1.834034443508121e-08,8.512422533827548e-08
|
||||
68,9.620413430112097e-05,1.8145990199784238e-08,8.341482250639003e-08
|
||||
69,9.470627135913274e-05,1.795373041706864e-08,8.174028142913882e-08
|
||||
70,9.323428359797426e-05,1.776354066998682e-08,8.009985766376296e-08
|
||||
71,9.178813743816942e-05,1.7575386852678668e-08,7.849321446941785e-08
|
||||
72,9.03673300948529e-05,1.7389247191220127e-08,7.691961625609547e-08
|
||||
73,8.897136946427622e-05,1.7205101122769978e-08,7.537834446342857e-08
|
||||
74,8.760740745800998e-05,1.7025337039390582e-08,7.387513417420477e-08
|
||||
75,8.626710469266086e-05,1.684760610568072e-08,7.274492099363918e-08
|
||||
76,8.495000573672162e-05,1.6671894857242002e-08,7.163427447510873e-08
|
||||
77,8.365569697520994e-05,1.649819993412593e-08,7.054284583689279e-08
|
||||
78,8.238374036674246e-05,1.6326513144182658e-08,6.947026569965565e-08
|
||||
79,8.113370706498376e-05,1.6156829499842502e-08,6.841617243780552e-08
|
||||
80,7.990517700269747e-05,1.5989147949913657e-08,6.738021182874466e-08
|
||||
81,7.86978423091888e-05,1.5823469853370494e-08,6.636212425984957e-08
|
||||
82,7.751129541079691e-05,1.5659805288834794e-08,6.536156604375694e-08
|
||||
83,7.634513730458643e-05,1.549817228640182e-08,6.4378200720386e-08
|
||||
84,7.530262080974352e-05,1.5364274253504764e-08,6.349909645089537e-08
|
||||
85,7.427675504203847e-05,1.523236211656126e-08,6.263403294276386e-08
|
||||
86,7.326723873728748e-05,1.5102509684796054e-08,6.17827561543225e-08
|
||||
87,7.227232864621635e-05,1.497407531211962e-08,6.094379608688325e-08
|
||||
88,7.129179755315639e-05,1.4847053209180731e-08,6.011696114034632e-08
|
||||
89,7.032542203609286e-05,1.4721438007057792e-08,5.930206291361871e-08
|
||||
90,6.937298231674387e-05,1.4597224779058979e-08,5.8498916078193026e-08
|
||||
91,6.843339696762452e-05,1.4474430063551042e-08,5.7706608718023995e-08
|
||||
92,6.750649045006184e-05,1.435304906112738e-08,5.692499280974924e-08
|
||||
93,6.659208967850971e-05,1.4233077472549144e-08,5.615392239861094e-08
|
||||
94,6.554258932109723e-05,1.4075047005202515e-08,5.5268928972034715e-08
|
||||
95,6.450957734109015e-05,1.3918652473373596e-08,5.439783940505763e-08
|
||||
|
223
tests/data/raman_fiber_config.json
Normal file
223
tests/data/raman_fiber_config.json
Normal file
@@ -0,0 +1,223 @@
|
||||
{
|
||||
"uid": "Span1",
|
||||
"params": {
|
||||
"length": 80,
|
||||
"loss_coef": 0.2,
|
||||
"length_units": "km",
|
||||
"att_in": 0,
|
||||
"con_in": 0.5,
|
||||
"con_out": 0.5,
|
||||
"type_variety": "SSMF",
|
||||
"dispersion": 0.0000167,
|
||||
"gamma": 0.00127,
|
||||
"raman_efficiency": {
|
||||
"cr": [
|
||||
0,
|
||||
0.0000094,
|
||||
0.0000292,
|
||||
0.0000488,
|
||||
0.0000682,
|
||||
0.0000831,
|
||||
0.000094,
|
||||
0.0001014,
|
||||
0.0001069,
|
||||
0.0001119,
|
||||
0.0001217,
|
||||
0.0001268,
|
||||
0.0001365,
|
||||
0.000149,
|
||||
0.000165,
|
||||
0.000181,
|
||||
0.0001977,
|
||||
0.0002192,
|
||||
0.0002469,
|
||||
0.0002749,
|
||||
0.0002999,
|
||||
0.0003206,
|
||||
0.0003405,
|
||||
0.0003592,
|
||||
0.000374,
|
||||
0.0003826,
|
||||
0.0003841,
|
||||
0.0003826,
|
||||
0.0003802,
|
||||
0.0003756,
|
||||
0.0003549,
|
||||
0.0003795,
|
||||
0.000344,
|
||||
0.0002933,
|
||||
0.0002024,
|
||||
0.0001158,
|
||||
0.0000846,
|
||||
0.0000714,
|
||||
0.0000686,
|
||||
0.000085,
|
||||
0.0000893,
|
||||
0.0000901,
|
||||
0.0000815,
|
||||
0.0000667,
|
||||
0.0000437,
|
||||
0.0000328,
|
||||
0.0000296,
|
||||
0.0000265,
|
||||
0.0000257,
|
||||
0.0000281,
|
||||
0.0000308,
|
||||
0.0000367,
|
||||
0.0000585,
|
||||
0.0000663,
|
||||
0.0000636,
|
||||
0.000055,
|
||||
0.0000406,
|
||||
0.0000277,
|
||||
0.0000242,
|
||||
0.0000187,
|
||||
0.000016,
|
||||
0.000014,
|
||||
0.0000113,
|
||||
0.0000105,
|
||||
0.0000098,
|
||||
0.0000098,
|
||||
0.0000113,
|
||||
0.0000164,
|
||||
0.0000195,
|
||||
0.0000238,
|
||||
0.0000226,
|
||||
0.0000203,
|
||||
0.0000148,
|
||||
0.0000109,
|
||||
0.0000098,
|
||||
0.0000105,
|
||||
0.0000117,
|
||||
0.0000125,
|
||||
0.0000121,
|
||||
0.0000109,
|
||||
0.0000098,
|
||||
0.0000082,
|
||||
0.0000066,
|
||||
0.0000047,
|
||||
0.0000027,
|
||||
0.0000019,
|
||||
0.0000012,
|
||||
4e-7,
|
||||
2e-7,
|
||||
1e-7
|
||||
],
|
||||
"frequency_offset": [
|
||||
0,
|
||||
500000000000,
|
||||
1000000000000,
|
||||
1500000000000,
|
||||
2000000000000,
|
||||
2500000000000,
|
||||
3000000000000,
|
||||
3500000000000,
|
||||
4000000000000,
|
||||
4500000000000,
|
||||
5000000000000,
|
||||
5500000000000,
|
||||
6000000000000,
|
||||
6500000000000,
|
||||
7000000000000,
|
||||
7500000000000,
|
||||
8000000000000,
|
||||
8500000000000,
|
||||
9000000000000,
|
||||
9500000000000,
|
||||
10000000000000,
|
||||
10500000000000,
|
||||
11000000000000,
|
||||
11500000000000,
|
||||
12000000000000,
|
||||
12500000000000,
|
||||
12750000000000,
|
||||
13000000000000,
|
||||
13250000000000,
|
||||
13500000000000,
|
||||
14000000000000,
|
||||
14500000000000,
|
||||
14750000000000,
|
||||
15000000000000,
|
||||
15500000000000,
|
||||
16000000000000,
|
||||
16500000000000,
|
||||
17000000000000,
|
||||
17500000000000,
|
||||
18000000000000,
|
||||
18250000000000,
|
||||
18500000000000,
|
||||
18750000000000,
|
||||
19000000000000,
|
||||
19500000000000,
|
||||
20000000000000,
|
||||
20500000000000,
|
||||
21000000000000,
|
||||
21500000000000,
|
||||
22000000000000,
|
||||
22500000000000,
|
||||
23000000000000,
|
||||
23500000000000,
|
||||
24000000000000,
|
||||
24500000000000,
|
||||
25000000000000,
|
||||
25500000000000,
|
||||
26000000000000,
|
||||
26500000000000,
|
||||
27000000000000,
|
||||
27500000000000,
|
||||
28000000000000,
|
||||
28500000000000,
|
||||
29000000000000,
|
||||
29500000000000,
|
||||
30000000000000,
|
||||
30500000000000,
|
||||
31000000000000,
|
||||
31500000000000,
|
||||
32000000000000,
|
||||
32500000000000,
|
||||
33000000000000,
|
||||
33500000000000,
|
||||
34000000000000,
|
||||
34500000000000,
|
||||
35000000000000,
|
||||
35500000000000,
|
||||
36000000000000,
|
||||
36500000000000,
|
||||
37000000000000,
|
||||
37500000000000,
|
||||
38000000000000,
|
||||
38500000000000,
|
||||
39000000000000,
|
||||
39500000000000,
|
||||
40000000000000,
|
||||
40500000000000,
|
||||
41000000000000,
|
||||
41500000000000,
|
||||
42000000000000
|
||||
]
|
||||
}
|
||||
},
|
||||
"operational": {
|
||||
"temperature": 283,
|
||||
"raman_pumps": [
|
||||
{
|
||||
"power": 0.2,
|
||||
"frequency": 205000000000000,
|
||||
"propagation_direction": "counterprop"
|
||||
},
|
||||
{
|
||||
"power": 0.206,
|
||||
"frequency": 201000000000000,
|
||||
"propagation_direction": "counterprop"
|
||||
}
|
||||
]
|
||||
},
|
||||
"metadata": {
|
||||
"location": {
|
||||
"latitude": 1,
|
||||
"longitude": 0,
|
||||
"city": null,
|
||||
"region": ""
|
||||
}
|
||||
}
|
||||
}
|
||||
14
tests/data/sim_params.json
Normal file
14
tests/data/sim_params.json
Normal file
@@ -0,0 +1,14 @@
|
||||
{
|
||||
"raman_computed_channels": [1, 18, 37, 56, 75],
|
||||
"raman_parameters": {
|
||||
"flag_raman": true,
|
||||
"space_resolution": 10e3,
|
||||
"tolerance": 1e-8
|
||||
},
|
||||
"nli_parameters": {
|
||||
"nli_method_name": "ggn_spectrally_separated",
|
||||
"wdm_grid_size": 50e9,
|
||||
"dispersion_tolerance": 1,
|
||||
"phase_shift_tollerance": 0.1
|
||||
}
|
||||
}
|
||||
@@ -309,26 +309,11 @@ def test_json_response_generation(xls_input, expected_response_file):
|
||||
if i == 1:
|
||||
my_rq = deepcopy(rqs[i])
|
||||
my_rq.M = 0
|
||||
error_handled = False
|
||||
try:
|
||||
temp_result = {
|
||||
'response': Result_element(my_rq, pth, reversed_propagatedpths[i]).json}
|
||||
except ServiceError:
|
||||
error_handled = True
|
||||
if not error_handled:
|
||||
print('Service error with M=0 not correctly handled')
|
||||
raise AssertionError()
|
||||
error_handled = False
|
||||
with pytest.raises(ServiceError):
|
||||
Result_element(my_rq, pth, reversed_propagatedpths[i]).json
|
||||
|
||||
my_rq.blocking_reason = 'NO_SPECTRUM'
|
||||
try:
|
||||
temp_result = {
|
||||
'response': Result_element(my_rq, pth, reversed_propagatedpths[i]).json}
|
||||
print(temp_result)
|
||||
except ServiceError:
|
||||
error_handled = True
|
||||
if error_handled:
|
||||
print('Service error with NO_SPECTRUM blocking reason not correctly handled')
|
||||
raise AssertionError()
|
||||
Result_element(my_rq, pth, reversed_propagatedpths[i]).json
|
||||
|
||||
result.append(Result_element(rqs[i], pth, reversed_propagatedpths[i]))
|
||||
|
||||
|
||||
49
tests/test_science_utils.py
Normal file
49
tests/test_science_utils.py
Normal file
@@ -0,0 +1,49 @@
|
||||
#!/usr/bin/env python3
|
||||
# -*- coding: utf-8 -*-
|
||||
# @Author: Alessio Ferrari
|
||||
"""
|
||||
checks that RamanFiber propagates properly the spectral information. In this way, also the RamanSolver and the NliSolver
|
||||
are tested.
|
||||
"""
|
||||
|
||||
import json
|
||||
from pandas import read_csv
|
||||
from numpy.testing import assert_allclose
|
||||
from gnpy.core.info import create_input_spectral_information
|
||||
from gnpy.core.elements import RamanFiber
|
||||
from gnpy.core.network import load_sim_params
|
||||
from pathlib import Path
|
||||
TEST_DIR = Path(__file__).parent
|
||||
|
||||
def test_raman_fiber():
|
||||
""" Test the accuracy of propagating the RamanFiber.
|
||||
"""
|
||||
# spectral information generation
|
||||
power = 1e-3
|
||||
with open(TEST_DIR / 'data' / 'eqpt_config.json', 'r') as file:
|
||||
eqpt_params = json.load(file)
|
||||
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)
|
||||
|
||||
# RamanFiber
|
||||
with open(TEST_DIR / 'data' / 'raman_fiber_config.json', 'r') as file:
|
||||
raman_fiber_params = json.load(file)
|
||||
sim_params = load_sim_params(TEST_DIR / 'data' / 'sim_params.json')
|
||||
fiber = RamanFiber(**raman_fiber_params)
|
||||
fiber.sim_params = sim_params
|
||||
|
||||
# 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' / 'expected_results_science_utils.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)
|
||||
Reference in New Issue
Block a user