mirror of
https://github.com/Telecominfraproject/oopt-gnpy.git
synced 2025-11-02 02:57:52 +00:00
Error out on conflicting Fiber and RamanFiber definitions
The equipment library has, so far, used completely different namespaces for `Fiber` and `RamanFiber` definitions. It was possible to define a "SSMF" fiber whose properties, such as CD or PMD, would differ when used as a Fiber vs. the RamanFiber object in the networking topology. That is likely a bug of the equipment library, so this patch makes sure that a configuration like that cannot be used. I came across this when working on the YANG support where both fiber types are defined in a common namespace, and the difference between them is determined by lack or presence of a sub-container with the Raman properties. Change-Id: I8e86bed80eb1794b8abd4e1ecd96398d395f81f2
This commit is contained in:
@@ -260,6 +260,21 @@ def _roadm_restrictions_sanity_check(equipment):
|
||||
raise EquipmentConfigError(f'ROADM restriction {amp_name} does not refer to a defined EDFA name')
|
||||
|
||||
|
||||
def _check_fiber_vs_raman_fiber(equipment):
|
||||
"""Ensure that Fiber and RamanFiber with the same name define common properties equally"""
|
||||
if 'RamanFiber' not in equipment:
|
||||
return
|
||||
for fiber_type in set(equipment['Fiber'].keys()) & set(equipment['RamanFiber'].keys()):
|
||||
for attr in ('dispersion', 'dispersion-slope', 'gamma', 'pmd-coefficient'):
|
||||
fiber = equipment['Fiber'][fiber_type]
|
||||
raman = equipment['RamanFiber'][fiber_type]
|
||||
a = getattr(fiber, attr, None)
|
||||
b = getattr(raman, attr, None)
|
||||
if a != b:
|
||||
raise EquipmentConfigError(f'WARNING: Fiber and RamanFiber definition of "{fiber_type}" '
|
||||
f'disagrees for "{attr}": {a} != {b}')
|
||||
|
||||
|
||||
def _equipment_from_json(json_data, filename):
|
||||
"""build global dictionnary eqpt_library that stores all eqpt characteristics:
|
||||
edfa type type_variety, fiber type_variety
|
||||
@@ -290,6 +305,7 @@ def _equipment_from_json(json_data, filename):
|
||||
equipment[key][subkey] = RamanFiber(**entry)
|
||||
else:
|
||||
raise EquipmentConfigError(f'Unrecognized network element type "{key}"')
|
||||
_check_fiber_vs_raman_fiber(equipment)
|
||||
equipment = _update_dual_stage(equipment)
|
||||
_roadm_restrictions_sanity_check(equipment)
|
||||
return equipment
|
||||
|
||||
Reference in New Issue
Block a user