Skip to content
Snippets Groups Projects
Commit 71e2d319 authored by Stefano Di Frischia's avatar Stefano Di Frischia
Browse files

L2SS-1496: refactor mapper for lba

parent f2f94de2
Branches
Tags
1 merge request!728L2SS-1496: refactor mapper for lba
...@@ -157,7 +157,7 @@ class TestCalibrationDevice(AbstractTestBases.TestDeviceBase): ...@@ -157,7 +157,7 @@ class TestCalibrationDevice(AbstractTestBases.TestDeviceBase):
def test_calibrate_recv(self): def test_calibrate_recv(self):
calibration_properties = { calibration_properties = {
"Antenna_Type": ["LBA"], "Antenna_Type": ["HBA"],
"Antenna_Cables": ["50m", "80m"] * (DEFAULT_N_HBA_TILES // 2), "Antenna_Cables": ["50m", "80m"] * (DEFAULT_N_HBA_TILES // 2),
"Control_to_RECV_mapping": "Control_to_RECV_mapping":
# [1, 0, 1, 1, 1, 2, 1, x ... 1, 47] # [1, 0, 1, 1, 1, 2, 1, x ... 1, 47]
......
...@@ -1004,6 +1004,7 @@ class AntennaField(LOFARDevice): ...@@ -1004,6 +1004,7 @@ class AntennaField(LOFARDevice):
recv_mapping, recv_mapping,
self.get_mapped_dimensions("RECV"), self.get_mapped_dimensions("RECV"),
number_of_receivers, number_of_receivers,
antenna_type=self.read_attribute("Antenna_Type_R"),
) )
def __setup_sdp_mapper(self): def __setup_sdp_mapper(self):
......
...@@ -55,7 +55,7 @@ class MappedAttribute(attribute): ...@@ -55,7 +55,7 @@ class MappedAttribute(attribute):
cast_type = dtype cast_type = dtype
while not type_not_sequence(cast_type): while not type_not_sequence(cast_type):
cast_type = cast_type[0] cast_type = cast_type[0]
write_func = device.set_mapped_attribute( _write_func = device.set_mapped_attribute(
mapping_attribute, value, cast_type, mapping_device mapping_attribute, value, cast_type, mapping_device
) )
...@@ -84,6 +84,7 @@ class AntennaMapper: ...@@ -84,6 +84,7 @@ class AntennaMapper:
self, self,
mapping_dict: Dict[str, numpy.ndarray], mapping_dict: Dict[str, numpy.ndarray],
num_devices: Optional[int] = 1, num_devices: Optional[int] = 1,
antenna_type: str = "HBA",
) -> None: ) -> None:
self._mapping_dict = mapping_dict self._mapping_dict = mapping_dict
self._num_devices = num_devices self._num_devices = num_devices
...@@ -94,6 +95,8 @@ class AntennaMapper: ...@@ -94,6 +95,8 @@ class AntennaMapper:
self._reshape_attributes_out = {} self._reshape_attributes_out = {}
self._fill_attributes_in = {} self._fill_attributes_in = {}
self._empty_attributes_out = {} self._empty_attributes_out = {}
self._antenna_type = antenna_type
self._pwr_mapping = []
def map_read(self, mapped_attribute: str, device_values: List[any]) -> List[any]: def map_read(self, mapped_attribute: str, device_values: List[any]) -> List[any]:
"""Perform a mapped read for the attribute using the device_results """Perform a mapped read for the attribute using the device_results
...@@ -119,7 +122,11 @@ class AntennaMapper: ...@@ -119,7 +122,11 @@ class AntennaMapper:
) )
return self._mapped_r_values( return self._mapped_r_values(
device_values, default_values, self._value_mapper[mapped_attribute] device_values,
default_values,
self._value_mapper[mapped_attribute],
self._antenna_type,
mapped_attribute in self._pwr_mapping,
) )
def map_write(self, mapped_attribute: str, set_values: List[any]) -> List[any]: def map_write(self, mapped_attribute: str, set_values: List[any]) -> List[any]:
...@@ -133,7 +140,11 @@ class AntennaMapper: ...@@ -133,7 +140,11 @@ class AntennaMapper:
default_values = self._masked_value_mapping_write[mapped_attribute] default_values = self._masked_value_mapping_write[mapped_attribute]
mapped_values = self._mapped_rw_values( mapped_values = self._mapped_rw_values(
set_values, default_values, self._value_mapper[mapped_attribute] set_values,
default_values,
self._value_mapper[mapped_attribute],
self._antenna_type,
mapped_attribute in self._pwr_mapping,
) )
# Attributes which need to be reshaped with removing a part of their duplicated # Attributes which need to be reshaped with removing a part of their duplicated
...@@ -160,6 +171,8 @@ class AntennaMapper: ...@@ -160,6 +171,8 @@ class AntennaMapper:
device_values: List[any], device_values: List[any],
default_values: List[any], default_values: List[any],
value_mapping: List[any], value_mapping: List[any],
antenna_type: str,
pwr_attribute: bool,
): ):
"""Mapping for read operation""" """Mapping for read operation"""
mapped_values = numpy.array(default_values) mapped_values = numpy.array(default_values)
...@@ -189,6 +202,15 @@ class AntennaMapper: ...@@ -189,6 +202,15 @@ class AntennaMapper:
(dev_power, dev_input_power), (dev_power, dev_input_power),
(dev_control, dev_input_control), (dev_control, dev_input_control),
) in enumerate(zip(power_mapping, control_mapping)): ) in enumerate(zip(power_mapping, control_mapping)):
if antenna_type == "LBA" and pwr_attribute:
# We should report the value of both mappings for each antenna (2 values),
# but for now we pick only one to keep the resulting array of similar
# dimension compared to HBA
if dev_power > 0 and dev_control > 0:
mapped_values[idx] = device_values[dev_power - 1][
dev_input_power
]
else:
# Insert the two values in the mapped array # Insert the two values in the mapped array
if dev_power > 0: if dev_power > 0:
mapped_values[idx][0] = device_values[dev_power - 1][ mapped_values[idx][0] = device_values[dev_power - 1][
...@@ -206,6 +228,8 @@ class AntennaMapper: ...@@ -206,6 +228,8 @@ class AntennaMapper:
set_values: List[any], set_values: List[any],
default_values: List[any], default_values: List[any],
value_mapping: List[any], value_mapping: List[any],
antenna_type: str,
pwr_attribute: bool,
): ):
if MappingKeys.CONTROL in list(self._mapping_dict.keys()): if MappingKeys.CONTROL in list(self._mapping_dict.keys()):
mapped_values = [] mapped_values = []
...@@ -234,13 +258,18 @@ class AntennaMapper: ...@@ -234,13 +258,18 @@ class AntennaMapper:
(dev_power, dev_input_power), (dev_power, dev_input_power),
(dev_control, dev_input_control), (dev_control, dev_input_control),
) in enumerate(zip(power_mapping, control_mapping)): ) in enumerate(zip(power_mapping, control_mapping)):
if antenna_type == "LBA" and pwr_attribute:
if dev_power > 0 and dev_control > 0:
mapped_values[dev_power] = set_values[idx]
else:
if dev_power > 0: if dev_power > 0:
mapped_values[dev_power - 1, dev_input_power] = set_values[idx][0] mapped_values[dev_power - 1, dev_input_power] = set_values[idx][
if dev_control > 0: 0
mapped_values[dev_control - 1, dev_input_control] = set_values[idx][
1
] ]
if dev_control > 0:
mapped_values[dev_control - 1, dev_input_control] = set_values[
idx
][1]
return mapped_values return mapped_values
def _init_reshape_out(self, mapped_attributes: List[str], device_type: str): def _init_reshape_out(self, mapped_attributes: List[str], device_type: str):
...@@ -296,8 +325,10 @@ class AntennaToRecvMapper(AntennaMapper): ...@@ -296,8 +325,10 @@ class AntennaToRecvMapper(AntennaMapper):
_VALUE_MAP_NONE_96_32 = numpy.full((MAX_ANTENNA, N_elements * N_pol), None) _VALUE_MAP_NONE_96_32 = numpy.full((MAX_ANTENNA, N_elements * N_pol), None)
_VALUE_MAP_NONE_96_2 = numpy.full((MAX_ANTENNA, 2), None) _VALUE_MAP_NONE_96_2 = numpy.full((MAX_ANTENNA, 2), None)
def __init__(self, mapping_dict, mapped_dimensions, number_of_receivers): def __init__(
super().__init__(mapping_dict, number_of_receivers) self, mapping_dict, mapped_dimensions, number_of_receivers, antenna_type
):
super().__init__(mapping_dict, number_of_receivers, antenna_type)
self._power_mapping = self._mapping_dict[MappingKeys.POWER] self._power_mapping = self._mapping_dict[MappingKeys.POWER]
self._control_mapping = self._mapping_dict[MappingKeys.CONTROL] self._control_mapping = self._mapping_dict[MappingKeys.CONTROL]
...@@ -315,7 +346,7 @@ class AntennaToRecvMapper(AntennaMapper): ...@@ -315,7 +346,7 @@ class AntennaToRecvMapper(AntennaMapper):
self._mapped_attributes = list(mapped_dimensions) self._mapped_attributes = list(mapped_dimensions)
self._value_mapper = self._init_value_mapper() self._value_mapper = self._init_value_mapper(antenna_type)
self._default_value_mapping_read = { self._default_value_mapping_read = {
"ANT_mask_RW": value_map_ant_bool, "ANT_mask_RW": value_map_ant_bool,
...@@ -402,10 +433,10 @@ class AntennaToRecvMapper(AntennaMapper): ...@@ -402,10 +433,10 @@ class AntennaToRecvMapper(AntennaMapper):
masked_write[attr] = AntennaToRecvMapper._VALUE_MAP_NONE_96_32 masked_write[attr] = AntennaToRecvMapper._VALUE_MAP_NONE_96_32
return masked_write return masked_write
def _init_value_mapper(self): def _init_value_mapper(self, antenna_type: str):
"""Create the value mapping dictionary""" """Create the value mapping dictionary"""
value_mapper = {} value_mapper = {}
double_mapping = [ self._double_mapping = [
"RCU_attenuator_dB_R", "RCU_attenuator_dB_R",
"RCU_attenuator_dB_RW", "RCU_attenuator_dB_RW",
"RCU_band_select_R", "RCU_band_select_R",
...@@ -413,11 +444,14 @@ class AntennaToRecvMapper(AntennaMapper): ...@@ -413,11 +444,14 @@ class AntennaToRecvMapper(AntennaMapper):
"RCU_PCB_ID_R", "RCU_PCB_ID_R",
"RCU_PCB_version_R", "RCU_PCB_version_R",
] ]
pwr_mapping = ["RCU_PWR_ANT_on_R", "RCU_PWR_ANT_on_RW"] self._pwr_mapping = ["RCU_PWR_ANT_on_R", "RCU_PWR_ANT_on_RW"]
for attr in self._mapped_attributes: for attr in self._mapped_attributes:
if attr in double_mapping: if attr in self._double_mapping:
value_mapper[attr] = [self._power_mapping, self._control_mapping]
elif attr in self._pwr_mapping:
if antenna_type == "LBA":
value_mapper[attr] = [self._power_mapping, self._control_mapping] value_mapper[attr] = [self._power_mapping, self._control_mapping]
elif attr in pwr_mapping: elif antenna_type == "HBA":
value_mapper[attr] = [self._power_mapping] value_mapper[attr] = [self._power_mapping]
else: else:
value_mapper[attr] = [self._control_mapping] value_mapper[attr] = [self._control_mapping]
...@@ -435,7 +469,8 @@ class RecvDeviceWalker(object): ...@@ -435,7 +469,8 @@ class RecvDeviceWalker(object):
self.antenna_usage_mask = antenna_usage_mask self.antenna_usage_mask = antenna_usage_mask
def recv_ant_masks(self) -> numpy.ndarray: def recv_ant_masks(self) -> numpy.ndarray:
"""Return the antenna mask for the control inputs of the antennas enabled in Antenna_Usage_Mask_R.""" """Return the antenna mask for the control inputs of the antennas enabled
in Antenna_Usage_Mask_R."""
nr_recv_devices = max(self.control_to_recv_mapping[:, 0]) nr_recv_devices = max(self.control_to_recv_mapping[:, 0])
......
# Copyright (C) 2023 ASTRON (Netherlands Institute for Radio Astronomy)
# SPDX-License-Identifier: Apache-2.0
from test import base
import numpy
from tangostationcontrol.common.constants import N_rcu
from tangostationcontrol.devices.base_device_classes.mapper import RecvDeviceWalker
class TestRecvDeviceWalker(base.TestCase):
"""Test class for RecvDeviceWalker"""
class MockDeviceProxy:
"""Mock of DeviceProxy that simulates recv.ANT_mask_RW."""
@property
def ANT_mask_RW(self):
return self.ant_mask
@ANT_mask_RW.setter
def ANT_mask_RW(self, value):
self.ant_mask = value
def __init__(self, index):
self.visited = False
self.index = index
# fill with a value we don't use, to make sure
# there will be a difference when set
self.ant_mask = numpy.array([[False, True, True]] * N_rcu)
# save the value we originally use
self.original_ant_mask = self.ant_mask
def test_recv_masks_identity_mapping(self):
"""Test whether a straight setup works."""
control_to_recv_mapping = numpy.array([[1, 0], [1, 1], [1, 2]])
antenna_usage_mask = numpy.array([True, True, True])
sut = RecvDeviceWalker(control_to_recv_mapping, antenna_usage_mask)
expected = numpy.array(
[[[True, True, True]] + [[False, False, False]] * (N_rcu - 1)]
)
numpy.testing.assert_equal(expected, sut.recv_ant_masks())
def test_recv_masks_antenna_usage_mask(self):
"""Test whether the antenna_usage_mask is respected."""
control_to_recv_mapping = numpy.array([[1, 0], [1, 1], [1, 2]])
antenna_usage_mask = numpy.array([False, True, False])
sut = RecvDeviceWalker(control_to_recv_mapping, antenna_usage_mask)
expected = numpy.array(
[[[False, True, False]] + [[False, False, False]] * (N_rcu - 1)]
)
numpy.testing.assert_equal(expected, sut.recv_ant_masks())
def test_recv_masks_control_to_recv_mapping(self):
"""Test whether control_to_recv_mapping is respected."""
control_to_recv_mapping = numpy.array([[1, 0], [2, 1], [1, 2]])
antenna_usage_mask = numpy.array([True, True, True])
sut = RecvDeviceWalker(control_to_recv_mapping, antenna_usage_mask)
expected = numpy.array(
[
[[True, False, True]] + [[False, False, False]] * (N_rcu - 1),
[[False, True, False]] + [[False, False, False]] * (N_rcu - 1),
]
)
numpy.testing.assert_equal(expected, sut.recv_ant_masks())
def test_walk_receivers(self):
"""Test walk_receivers on multiple recv_proxies."""
control_to_recv_mapping = numpy.array([[1, 0], [2, 1], [1, 2]])
antenna_usage_mask = numpy.array([True, True, True])
sut = RecvDeviceWalker(control_to_recv_mapping, antenna_usage_mask)
recv_proxies = [TestRecvDeviceWalker.MockDeviceProxy(n + 1) for n in range(2)]
def visitor(recv_proxy):
recv_proxy.visited = True
# is our mask set correctly?
if recv_proxy.index == 1:
expected = numpy.array(
[[True, False, True]] + [[False, False, False]] * (N_rcu - 1)
)
elif recv_proxy.index == 2:
expected = numpy.array(
[[False, True, False]] + [[False, False, False]] * (N_rcu - 1)
)
numpy.testing.assert_equal(expected, recv_proxy.ANT_mask_RW)
sut.walk_receivers(recv_proxies, visitor)
# make sure both recv_proxies were visited
self.assertTrue(recv_proxies[0].visited)
self.assertTrue(recv_proxies[1].visited)
# make sure both masks were restored
numpy.testing.assert_equal(
recv_proxies[0].original_ant_mask, recv_proxies[0].ant_mask
)
numpy.testing.assert_equal(
recv_proxies[1].original_ant_mask, recv_proxies[1].ant_mask
)
def test_walk_receivers_restores_mask_on_exception(self):
"""Test whether walk_receivers() also restores the recv_proxy.ANT_mask_RW
if the visitor function throws."""
control_to_recv_mapping = numpy.array([[1, 0], [2, 1], [1, 2]])
antenna_usage_mask = numpy.array([True, True, True])
sut = RecvDeviceWalker(control_to_recv_mapping, antenna_usage_mask)
recv_proxies = [TestRecvDeviceWalker.MockDeviceProxy(n + 1) for n in range(2)]
class MyException(Exception):
"""A exception noone can raise but us."""
def visitor(recv_proxy):
raise MyException("foo")
with self.assertRaises(MyException):
sut.walk_receivers(recv_proxies, visitor)
# make sure no mask was disturbed
numpy.testing.assert_equal(
recv_proxies[0].original_ant_mask, recv_proxies[0].ant_mask
)
numpy.testing.assert_equal(
recv_proxies[1].original_ant_mask, recv_proxies[1].ant_mask
)
...@@ -30,7 +30,6 @@ from tangostationcontrol.devices.base_device_classes.mapper import ( ...@@ -30,7 +30,6 @@ from tangostationcontrol.devices.base_device_classes.mapper import (
MappingKeys, MappingKeys,
AntennaToRecvMapper, AntennaToRecvMapper,
AntennaToSdpMapper, AntennaToSdpMapper,
RecvDeviceWalker,
) )
logger = logging.getLogger() logger = logging.getLogger()
...@@ -38,6 +37,8 @@ logger = logging.getLogger() ...@@ -38,6 +37,8 @@ logger = logging.getLogger()
SDP_MAPPED_ATTRS = AntennaField.get_mapped_dimensions("SDP") SDP_MAPPED_ATTRS = AntennaField.get_mapped_dimensions("SDP")
RECV_MAPPED_ATTRS = AntennaField.get_mapped_dimensions("RECV") RECV_MAPPED_ATTRS = AntennaField.get_mapped_dimensions("RECV")
DEFAULT_N_LBA = DEFAULT_N_HBA_TILES # 48 antennas
class TestAntennaToSdpMapper(base.TestCase): class TestAntennaToSdpMapper(base.TestCase):
"""Test class for AntennaToSDPMapper""" """Test class for AntennaToSDPMapper"""
...@@ -151,7 +152,106 @@ class TestAntennaToSdpMapper(base.TestCase): ...@@ -151,7 +152,106 @@ class TestAntennaToSdpMapper(base.TestCase):
numpy.testing.assert_equal(expected, actual) numpy.testing.assert_equal(expected, actual)
class TestAntennaToRecvMapper(base.TestCase): class TestLBAToRecvMapper(base.TestCase):
"""Test class for AntennaToRecvMapper with LBA AntennaType"""
# A mapping where Antennas are all not mapped to power RCUs
POWER_NOT_CONNECTED = [[-1, -1]] * 2 * DEFAULT_N_LBA
# A mapping where Antennas are all not mapped to control RCUs
CONTROL_NOT_CONNECTED = [[-1, -1]] * 2 * DEFAULT_N_LBA
# A mapping where first two Antennas are mapped on the first Receiver.
# The first Antenna control line on RCU 1 and the second Antenna control line
# on RCU 0.
POWER_LBA_0_AND_1_ON_RCU_1_AND_0_OF_RECV_1 = (
[[1, 1], [1, 0]]
+ [[-1, -1]] * (DEFAULT_N_LBA - 2)
+ [[2, 1], [2, 0]]
+ [[-1, -1]] * (DEFAULT_N_LBA - 2)
)
CONTROL_LBA_0_AND_1_ON_RCU_1_AND_0_OF_RECV_1 = (
POWER_LBA_0_AND_1_ON_RCU_1_AND_0_OF_RECV_1
)
ANTENNA_TYPE = "LBA"
def test_map_write_rcu_pwr_ant_on_no_mapping_and_one_receiver(self):
recv_mapping = {
MappingKeys.CONTROL: self.CONTROL_NOT_CONNECTED,
MappingKeys.POWER: self.POWER_NOT_CONNECTED,
}
mapper = AntennaToRecvMapper(
recv_mapping,
RECV_MAPPED_ATTRS,
1,
self.ANTENNA_TYPE,
)
set_values = [None] * DEFAULT_N_LBA
expected = [[[None, None, None]] * N_rcu]
actual = mapper.map_write("RCU_PWR_ANT_on_RW", set_values)
numpy.testing.assert_equal(expected, actual)
def test_map_write_rcu_pwr_ant_on_no_mapping_and_two_receivers(self):
recv_mapping = {
MappingKeys.CONTROL: self.CONTROL_NOT_CONNECTED,
MappingKeys.POWER: self.POWER_NOT_CONNECTED,
}
mapper = AntennaToRecvMapper(
recv_mapping, RECV_MAPPED_ATTRS, 2, self.ANTENNA_TYPE
)
set_values = [None] * DEFAULT_N_LBA
expected = [[[None, None, None]] * N_rcu] * 2
actual = mapper.map_write("RCU_PWR_ANT_on_RW", set_values)
numpy.testing.assert_equal(expected, actual)
def test_map_write_rcu_pwr_ant_on_hba_0_and_1_on_rcu_1_and_0_of_recv_1_and_no_ctrl(
self,
):
recv_mapping = {
MappingKeys.CONTROL: self.CONTROL_NOT_CONNECTED,
MappingKeys.POWER: self.POWER_LBA_0_AND_1_ON_RCU_1_AND_0_OF_RECV_1,
}
mapper = AntennaToRecvMapper(
recv_mapping, RECV_MAPPED_ATTRS, 1, self.ANTENNA_TYPE
)
set_values = [1, 0] + [None] * (DEFAULT_N_LBA - 2)
expected = [[[None, None, None]] + [[None, None, None]] * (N_rcu - 1)]
actual = mapper.map_write("RCU_PWR_ANT_on_RW", set_values)
numpy.testing.assert_equal(expected, actual)
def test_map_read_rcu_pwr_ant_on_hba_0_and_1_on_rcu_1_and_0_of_recv_1(self):
recv_mapping = {
MappingKeys.CONTROL: self.CONTROL_LBA_0_AND_1_ON_RCU_1_AND_0_OF_RECV_1,
MappingKeys.POWER: self.POWER_LBA_0_AND_1_ON_RCU_1_AND_0_OF_RECV_1,
}
mapper = AntennaToRecvMapper(
recv_mapping, RECV_MAPPED_ATTRS, 2, self.ANTENNA_TYPE
)
receiver_values = [[False, True] + [False] * (MAX_ANTENNA - 2)] * 2
expected = ([True, False] + [False] * (int(MAX_ANTENNA / 2) - 2)) * 2
actual = mapper.map_read("RCU_PWR_ANT_on_R", receiver_values)
numpy.testing.assert_equal(expected, actual)
def test_map_write_rcu_pwr_ant_on_hba_0_and_1_on_rcu_1_and_0_of_recv_1(self):
recv_mapping = {
MappingKeys.CONTROL: self.CONTROL_NOT_CONNECTED,
MappingKeys.POWER: self.POWER_LBA_0_AND_1_ON_RCU_1_AND_0_OF_RECV_1,
}
mapper = AntennaToRecvMapper(
recv_mapping, RECV_MAPPED_ATTRS, 1, self.ANTENNA_TYPE
)
set_values = [1, 0] + [None] * (DEFAULT_N_LBA - 2)
expected = [[[None, None, None]] * N_rcu]
actual = mapper.map_write("RCU_PWR_ANT_on_RW", set_values)
numpy.testing.assert_equal(expected, actual)
class TestHBAToRecvMapper(base.TestCase):
"""Test class for AntennaToRecvMapper with HBA AntennaType"""
# A mapping where Antennas are all not mapped to power RCUs # A mapping where Antennas are all not mapped to power RCUs
POWER_NOT_CONNECTED = [[-1, -1]] * DEFAULT_N_HBA_TILES POWER_NOT_CONNECTED = [[-1, -1]] * DEFAULT_N_HBA_TILES
# A mapping where Antennas are all not mapped to control RCUs # A mapping where Antennas are all not mapped to control RCUs
...@@ -168,13 +268,16 @@ class TestAntennaToRecvMapper(base.TestCase): ...@@ -168,13 +268,16 @@ class TestAntennaToRecvMapper(base.TestCase):
CONTROL_HBA_0_AND_1_ON_RCU_3_AND_2_OF_RECV_1 = [[1, 3], [1, 2]] + [[-1, -1]] * ( CONTROL_HBA_0_AND_1_ON_RCU_3_AND_2_OF_RECV_1 = [[1, 3], [1, 2]] + [[-1, -1]] * (
DEFAULT_N_HBA_TILES - 2 DEFAULT_N_HBA_TILES - 2
) )
ANTENNA_TYPE = "HBA"
def test_ant_read_mask_r_no_mapping(self): def test_ant_read_mask_r_no_mapping(self):
recv_mapping = { recv_mapping = {
MappingKeys.CONTROL: self.CONTROL_NOT_CONNECTED, MappingKeys.CONTROL: self.CONTROL_NOT_CONNECTED,
MappingKeys.POWER: self.POWER_NOT_CONNECTED, MappingKeys.POWER: self.POWER_NOT_CONNECTED,
} }
mapper = AntennaToRecvMapper(recv_mapping, RECV_MAPPED_ATTRS, 3) mapper = AntennaToRecvMapper(
recv_mapping, RECV_MAPPED_ATTRS, 3, self.ANTENNA_TYPE
)
receiver_values = [ receiver_values = [
[False] * MAX_ANTENNA, [False] * MAX_ANTENNA,
...@@ -190,7 +293,9 @@ class TestAntennaToRecvMapper(base.TestCase): ...@@ -190,7 +293,9 @@ class TestAntennaToRecvMapper(base.TestCase):
MappingKeys.CONTROL: self.CONTROL_HBA_0_AND_1_ON_RCU_1_AND_0_OF_RECV_1, MappingKeys.CONTROL: self.CONTROL_HBA_0_AND_1_ON_RCU_1_AND_0_OF_RECV_1,
MappingKeys.POWER: self.POWER_NOT_CONNECTED, MappingKeys.POWER: self.POWER_NOT_CONNECTED,
} }
mapper = AntennaToRecvMapper(recv_mapping, RECV_MAPPED_ATTRS, 3) mapper = AntennaToRecvMapper(
recv_mapping, RECV_MAPPED_ATTRS, 3, self.ANTENNA_TYPE
)
receiver_values = [ receiver_values = [
[False, True, False] + [False, False, False] * (N_rcu - 1), [False, True, False] + [False, False, False] * (N_rcu - 1),
...@@ -207,7 +312,9 @@ class TestAntennaToRecvMapper(base.TestCase): ...@@ -207,7 +312,9 @@ class TestAntennaToRecvMapper(base.TestCase):
MappingKeys.CONTROL: self.CONTROL_NOT_CONNECTED, MappingKeys.CONTROL: self.CONTROL_NOT_CONNECTED,
MappingKeys.POWER: self.POWER_NOT_CONNECTED, MappingKeys.POWER: self.POWER_NOT_CONNECTED,
} }
mapper = AntennaToRecvMapper(recv_mapping, RECV_MAPPED_ATTRS, 3) mapper = AntennaToRecvMapper(
recv_mapping, RECV_MAPPED_ATTRS, 3, self.ANTENNA_TYPE
)
receiver_values = [[0] * MAX_ANTENNA, [0] * MAX_ANTENNA, [0] * MAX_ANTENNA] receiver_values = [[0] * MAX_ANTENNA, [0] * MAX_ANTENNA, [0] * MAX_ANTENNA]
expected = [[0, 0]] * DEFAULT_N_HBA_TILES expected = [[0, 0]] * DEFAULT_N_HBA_TILES
actual = mapper.map_read("RCU_band_select_RW", receiver_values) actual = mapper.map_read("RCU_band_select_RW", receiver_values)
...@@ -218,7 +325,9 @@ class TestAntennaToRecvMapper(base.TestCase): ...@@ -218,7 +325,9 @@ class TestAntennaToRecvMapper(base.TestCase):
MappingKeys.CONTROL: self.CONTROL_NOT_CONNECTED, MappingKeys.CONTROL: self.CONTROL_NOT_CONNECTED,
MappingKeys.POWER: self.POWER_NOT_CONNECTED, MappingKeys.POWER: self.POWER_NOT_CONNECTED,
} }
mapper = AntennaToRecvMapper(recv_mapping, RECV_MAPPED_ATTRS, 3) mapper = AntennaToRecvMapper(
recv_mapping, RECV_MAPPED_ATTRS, 3, self.ANTENNA_TYPE
)
receiver_values = [ receiver_values = [
[[0] * N_rcu] * MAX_ANTENNA, [[0] * N_rcu] * MAX_ANTENNA,
...@@ -234,7 +343,9 @@ class TestAntennaToRecvMapper(base.TestCase): ...@@ -234,7 +343,9 @@ class TestAntennaToRecvMapper(base.TestCase):
MappingKeys.CONTROL: self.CONTROL_HBA_0_AND_1_ON_RCU_1_AND_0_OF_RECV_1, MappingKeys.CONTROL: self.CONTROL_HBA_0_AND_1_ON_RCU_1_AND_0_OF_RECV_1,
MappingKeys.POWER: self.POWER_NOT_CONNECTED, MappingKeys.POWER: self.POWER_NOT_CONNECTED,
} }
mapper = AntennaToRecvMapper(recv_mapping, RECV_MAPPED_ATTRS, 3) mapper = AntennaToRecvMapper(
recv_mapping, RECV_MAPPED_ATTRS, 3, self.ANTENNA_TYPE
)
receiver_values = [ receiver_values = [
[[2] * N_rcu, [1] * N_rcu] + [[0] * N_rcu] * (MAX_ANTENNA - 2), [[2] * N_rcu, [1] * N_rcu] + [[0] * N_rcu] * (MAX_ANTENNA - 2),
...@@ -253,7 +364,9 @@ class TestAntennaToRecvMapper(base.TestCase): ...@@ -253,7 +364,9 @@ class TestAntennaToRecvMapper(base.TestCase):
MappingKeys.CONTROL: self.CONTROL_NOT_CONNECTED, MappingKeys.CONTROL: self.CONTROL_NOT_CONNECTED,
MappingKeys.POWER: self.POWER_NOT_CONNECTED, MappingKeys.POWER: self.POWER_NOT_CONNECTED,
} }
mapper = AntennaToRecvMapper(recv_mapping, RECV_MAPPED_ATTRS, 3) mapper = AntennaToRecvMapper(
recv_mapping, RECV_MAPPED_ATTRS, 3, self.ANTENNA_TYPE
)
receiver_values = [ receiver_values = [
[[0] * N_rcu] * MAX_ANTENNA, [[0] * N_rcu] * MAX_ANTENNA,
...@@ -269,7 +382,9 @@ class TestAntennaToRecvMapper(base.TestCase): ...@@ -269,7 +382,9 @@ class TestAntennaToRecvMapper(base.TestCase):
MappingKeys.CONTROL: self.CONTROL_HBA_0_AND_1_ON_RCU_1_AND_0_OF_RECV_1, MappingKeys.CONTROL: self.CONTROL_HBA_0_AND_1_ON_RCU_1_AND_0_OF_RECV_1,
MappingKeys.POWER: self.POWER_NOT_CONNECTED, MappingKeys.POWER: self.POWER_NOT_CONNECTED,
} }
mapper = AntennaToRecvMapper(recv_mapping, RECV_MAPPED_ATTRS, 3) mapper = AntennaToRecvMapper(
recv_mapping, RECV_MAPPED_ATTRS, 3, self.ANTENNA_TYPE
)
receiver_values = [ receiver_values = [
[[2] * N_rcu, [1] * N_rcu] + [[0] * N_rcu] * (MAX_ANTENNA - 2), [[2] * N_rcu, [1] * N_rcu] + [[0] * N_rcu] * (MAX_ANTENNA - 2),
...@@ -288,7 +403,9 @@ class TestAntennaToRecvMapper(base.TestCase): ...@@ -288,7 +403,9 @@ class TestAntennaToRecvMapper(base.TestCase):
MappingKeys.CONTROL: self.CONTROL_NOT_CONNECTED, MappingKeys.CONTROL: self.CONTROL_NOT_CONNECTED,
MappingKeys.POWER: self.POWER_NOT_CONNECTED, MappingKeys.POWER: self.POWER_NOT_CONNECTED,
} }
mapper = AntennaToRecvMapper(recv_mapping, RECV_MAPPED_ATTRS, 3) mapper = AntennaToRecvMapper(
recv_mapping, RECV_MAPPED_ATTRS, 3, self.ANTENNA_TYPE
)
receiver_values = [ receiver_values = [
[[False] * N_rcu] * MAX_ANTENNA, [[False] * N_rcu] * MAX_ANTENNA,
...@@ -304,7 +421,9 @@ class TestAntennaToRecvMapper(base.TestCase): ...@@ -304,7 +421,9 @@ class TestAntennaToRecvMapper(base.TestCase):
MappingKeys.CONTROL: self.CONTROL_HBA_0_AND_1_ON_RCU_1_AND_0_OF_RECV_1, MappingKeys.CONTROL: self.CONTROL_HBA_0_AND_1_ON_RCU_1_AND_0_OF_RECV_1,
MappingKeys.POWER: self.POWER_NOT_CONNECTED, MappingKeys.POWER: self.POWER_NOT_CONNECTED,
} }
mapper = AntennaToRecvMapper(recv_mapping, RECV_MAPPED_ATTRS, 3) mapper = AntennaToRecvMapper(
recv_mapping, RECV_MAPPED_ATTRS, 3, self.ANTENNA_TYPE
)
receiver_values = [ receiver_values = [
[[False, True] * 16, [True, False] * 16] [[False, True] * 16, [True, False] * 16]
...@@ -324,7 +443,9 @@ class TestAntennaToRecvMapper(base.TestCase): ...@@ -324,7 +443,9 @@ class TestAntennaToRecvMapper(base.TestCase):
MappingKeys.CONTROL: self.CONTROL_NOT_CONNECTED, MappingKeys.CONTROL: self.CONTROL_NOT_CONNECTED,
MappingKeys.POWER: self.POWER_NOT_CONNECTED, MappingKeys.POWER: self.POWER_NOT_CONNECTED,
} }
mapper = AntennaToRecvMapper(recv_mapping, RECV_MAPPED_ATTRS, 3) mapper = AntennaToRecvMapper(
recv_mapping, RECV_MAPPED_ATTRS, 3, self.ANTENNA_TYPE
)
receiver_values = [ receiver_values = [
[[False] * N_rcu] * MAX_ANTENNA, [[False] * N_rcu] * MAX_ANTENNA,
...@@ -340,7 +461,9 @@ class TestAntennaToRecvMapper(base.TestCase): ...@@ -340,7 +461,9 @@ class TestAntennaToRecvMapper(base.TestCase):
MappingKeys.CONTROL: self.CONTROL_HBA_0_AND_1_ON_RCU_1_AND_0_OF_RECV_1, MappingKeys.CONTROL: self.CONTROL_HBA_0_AND_1_ON_RCU_1_AND_0_OF_RECV_1,
MappingKeys.POWER: self.POWER_NOT_CONNECTED, MappingKeys.POWER: self.POWER_NOT_CONNECTED,
} }
mapper = AntennaToRecvMapper(recv_mapping, RECV_MAPPED_ATTRS, 3) mapper = AntennaToRecvMapper(
recv_mapping, RECV_MAPPED_ATTRS, 3, self.ANTENNA_TYPE
)
receiver_values = [ receiver_values = [
[[False, True] * 16, [True, False] * 16] [[False, True] * 16, [True, False] * 16]
...@@ -360,7 +483,9 @@ class TestAntennaToRecvMapper(base.TestCase): ...@@ -360,7 +483,9 @@ class TestAntennaToRecvMapper(base.TestCase):
MappingKeys.CONTROL: self.CONTROL_NOT_CONNECTED, MappingKeys.CONTROL: self.CONTROL_NOT_CONNECTED,
MappingKeys.POWER: self.POWER_NOT_CONNECTED, MappingKeys.POWER: self.POWER_NOT_CONNECTED,
} }
mapper = AntennaToRecvMapper(recv_mapping, RECV_MAPPED_ATTRS, 3) mapper = AntennaToRecvMapper(
recv_mapping, RECV_MAPPED_ATTRS, 3, self.ANTENNA_TYPE
)
receiver_values = [ receiver_values = [
[[False] * N_rcu] * MAX_ANTENNA, [[False] * N_rcu] * MAX_ANTENNA,
...@@ -376,7 +501,9 @@ class TestAntennaToRecvMapper(base.TestCase): ...@@ -376,7 +501,9 @@ class TestAntennaToRecvMapper(base.TestCase):
MappingKeys.CONTROL: self.CONTROL_HBA_0_AND_1_ON_RCU_1_AND_0_OF_RECV_1, MappingKeys.CONTROL: self.CONTROL_HBA_0_AND_1_ON_RCU_1_AND_0_OF_RECV_1,
MappingKeys.POWER: self.POWER_NOT_CONNECTED, MappingKeys.POWER: self.POWER_NOT_CONNECTED,
} }
mapper = AntennaToRecvMapper(recv_mapping, RECV_MAPPED_ATTRS, 3) mapper = AntennaToRecvMapper(
recv_mapping, RECV_MAPPED_ATTRS, 3, self.ANTENNA_TYPE
)
receiver_values = [ receiver_values = [
[[False, True] * 16, [True, False] * 16] [[False, True] * 16, [True, False] * 16]
...@@ -396,7 +523,9 @@ class TestAntennaToRecvMapper(base.TestCase): ...@@ -396,7 +523,9 @@ class TestAntennaToRecvMapper(base.TestCase):
MappingKeys.CONTROL: self.CONTROL_NOT_CONNECTED, MappingKeys.CONTROL: self.CONTROL_NOT_CONNECTED,
MappingKeys.POWER: self.POWER_NOT_CONNECTED, MappingKeys.POWER: self.POWER_NOT_CONNECTED,
} }
mapper = AntennaToRecvMapper(recv_mapping, RECV_MAPPED_ATTRS, 3) mapper = AntennaToRecvMapper(
recv_mapping, RECV_MAPPED_ATTRS, 3, self.ANTENNA_TYPE
)
receiver_values = [ receiver_values = [
[[False] * N_rcu] * MAX_ANTENNA, [[False] * N_rcu] * MAX_ANTENNA,
...@@ -412,7 +541,9 @@ class TestAntennaToRecvMapper(base.TestCase): ...@@ -412,7 +541,9 @@ class TestAntennaToRecvMapper(base.TestCase):
MappingKeys.CONTROL: self.CONTROL_HBA_0_AND_1_ON_RCU_1_AND_0_OF_RECV_1, MappingKeys.CONTROL: self.CONTROL_HBA_0_AND_1_ON_RCU_1_AND_0_OF_RECV_1,
MappingKeys.POWER: self.POWER_NOT_CONNECTED, MappingKeys.POWER: self.POWER_NOT_CONNECTED,
} }
mapper = AntennaToRecvMapper(recv_mapping, RECV_MAPPED_ATTRS, 3) mapper = AntennaToRecvMapper(
recv_mapping, RECV_MAPPED_ATTRS, 3, self.ANTENNA_TYPE
)
receiver_values = [ receiver_values = [
[[False, True] * 16, [True, False] * 16] [[False, True] * 16, [True, False] * 16]
...@@ -432,7 +563,9 @@ class TestAntennaToRecvMapper(base.TestCase): ...@@ -432,7 +563,9 @@ class TestAntennaToRecvMapper(base.TestCase):
MappingKeys.CONTROL: self.CONTROL_NOT_CONNECTED, MappingKeys.CONTROL: self.CONTROL_NOT_CONNECTED,
MappingKeys.POWER: self.POWER_NOT_CONNECTED, MappingKeys.POWER: self.POWER_NOT_CONNECTED,
} }
mapper = AntennaToRecvMapper(recv_mapping, RECV_MAPPED_ATTRS, 3) mapper = AntennaToRecvMapper(
recv_mapping, RECV_MAPPED_ATTRS, 3, self.ANTENNA_TYPE
)
receiver_values = [ receiver_values = [
[[False] * N_rcu] * MAX_ANTENNA, [[False] * N_rcu] * MAX_ANTENNA,
...@@ -448,7 +581,9 @@ class TestAntennaToRecvMapper(base.TestCase): ...@@ -448,7 +581,9 @@ class TestAntennaToRecvMapper(base.TestCase):
MappingKeys.CONTROL: self.CONTROL_HBA_0_AND_1_ON_RCU_1_AND_0_OF_RECV_1, MappingKeys.CONTROL: self.CONTROL_HBA_0_AND_1_ON_RCU_1_AND_0_OF_RECV_1,
MappingKeys.POWER: self.POWER_NOT_CONNECTED, MappingKeys.POWER: self.POWER_NOT_CONNECTED,
} }
mapper = AntennaToRecvMapper(recv_mapping, RECV_MAPPED_ATTRS, 3) mapper = AntennaToRecvMapper(
recv_mapping, RECV_MAPPED_ATTRS, 3, self.ANTENNA_TYPE
)
receiver_values = [ receiver_values = [
[[False, True] * 16, [True, False] * 16] [[False, True] * 16, [True, False] * 16]
...@@ -468,7 +603,9 @@ class TestAntennaToRecvMapper(base.TestCase): ...@@ -468,7 +603,9 @@ class TestAntennaToRecvMapper(base.TestCase):
MappingKeys.CONTROL: self.CONTROL_NOT_CONNECTED, MappingKeys.CONTROL: self.CONTROL_NOT_CONNECTED,
MappingKeys.POWER: self.POWER_NOT_CONNECTED, MappingKeys.POWER: self.POWER_NOT_CONNECTED,
} }
mapper = AntennaToRecvMapper(recv_mapping, RECV_MAPPED_ATTRS, 3) mapper = AntennaToRecvMapper(
recv_mapping, RECV_MAPPED_ATTRS, 3, self.ANTENNA_TYPE
)
receiver_values = [ receiver_values = [
[[False] * N_rcu] * MAX_ANTENNA, [[False] * N_rcu] * MAX_ANTENNA,
...@@ -484,7 +621,9 @@ class TestAntennaToRecvMapper(base.TestCase): ...@@ -484,7 +621,9 @@ class TestAntennaToRecvMapper(base.TestCase):
MappingKeys.CONTROL: self.CONTROL_HBA_0_AND_1_ON_RCU_1_AND_0_OF_RECV_1, MappingKeys.CONTROL: self.CONTROL_HBA_0_AND_1_ON_RCU_1_AND_0_OF_RECV_1,
MappingKeys.POWER: self.POWER_NOT_CONNECTED, MappingKeys.POWER: self.POWER_NOT_CONNECTED,
} }
mapper = AntennaToRecvMapper(recv_mapping, RECV_MAPPED_ATTRS, 3) mapper = AntennaToRecvMapper(
recv_mapping, RECV_MAPPED_ATTRS, 3, self.ANTENNA_TYPE
)
receiver_values = [ receiver_values = [
[[False, True] * 16, [True, False] * 16] [[False, True] * 16, [True, False] * 16]
...@@ -505,7 +644,9 @@ class TestAntennaToRecvMapper(base.TestCase): ...@@ -505,7 +644,9 @@ class TestAntennaToRecvMapper(base.TestCase):
MappingKeys.CONTROL: self.CONTROL_NOT_CONNECTED, MappingKeys.CONTROL: self.CONTROL_NOT_CONNECTED,
MappingKeys.POWER: self.POWER_NOT_CONNECTED, MappingKeys.POWER: self.POWER_NOT_CONNECTED,
} }
mapper = AntennaToRecvMapper(recv_mapping, RECV_MAPPED_ATTRS, 3) mapper = AntennaToRecvMapper(
recv_mapping, RECV_MAPPED_ATTRS, 3, self.ANTENNA_TYPE
)
receiver_values = [list(range(32)), [0] * 32, [0] * 32] receiver_values = [list(range(32)), [0] * 32, [0] * 32]
expected = [[0] * 2] * DEFAULT_N_HBA_TILES expected = [[0] * 2] * DEFAULT_N_HBA_TILES
actual = mapper.map_read("RCU_PCB_ID_R", receiver_values) actual = mapper.map_read("RCU_PCB_ID_R", receiver_values)
...@@ -518,7 +659,9 @@ class TestAntennaToRecvMapper(base.TestCase): ...@@ -518,7 +659,9 @@ class TestAntennaToRecvMapper(base.TestCase):
MappingKeys.CONTROL: self.CONTROL_HBA_0_AND_1_ON_RCU_3_AND_2_OF_RECV_1, MappingKeys.CONTROL: self.CONTROL_HBA_0_AND_1_ON_RCU_3_AND_2_OF_RECV_1,
MappingKeys.POWER: self.POWER_NOT_CONNECTED, MappingKeys.POWER: self.POWER_NOT_CONNECTED,
} }
mapper = AntennaToRecvMapper(recv_mapping, RECV_MAPPED_ATTRS, 3) mapper = AntennaToRecvMapper(
recv_mapping, RECV_MAPPED_ATTRS, 3, self.ANTENNA_TYPE
)
receiver_values = [list(range(32)), [0] * 32, [0] * 32] receiver_values = [list(range(32)), [0] * 32, [0] * 32]
expected = [[0, 3], [0, 2]] + [[0, 0]] * (DEFAULT_N_HBA_TILES - 2) expected = [[0, 3], [0, 2]] + [[0, 0]] * (DEFAULT_N_HBA_TILES - 2)
actual = mapper.map_read("RCU_PCB_ID_R", receiver_values) actual = mapper.map_read("RCU_PCB_ID_R", receiver_values)
...@@ -531,7 +674,9 @@ class TestAntennaToRecvMapper(base.TestCase): ...@@ -531,7 +674,9 @@ class TestAntennaToRecvMapper(base.TestCase):
MappingKeys.CONTROL: self.CONTROL_NOT_CONNECTED, MappingKeys.CONTROL: self.CONTROL_NOT_CONNECTED,
MappingKeys.POWER: self.POWER_HBA_0_AND_1_ON_RCU_1_AND_0_OF_RECV_1, MappingKeys.POWER: self.POWER_HBA_0_AND_1_ON_RCU_1_AND_0_OF_RECV_1,
} }
mapper = AntennaToRecvMapper(recv_mapping, RECV_MAPPED_ATTRS, 3) mapper = AntennaToRecvMapper(
recv_mapping, RECV_MAPPED_ATTRS, 3, self.ANTENNA_TYPE
)
receiver_values = [list(range(32)), [0] * 32, [0] * 32] receiver_values = [list(range(32)), [0] * 32, [0] * 32]
expected = [[1, 0], [0, 0]] + [[0, 0]] * (DEFAULT_N_HBA_TILES - 2) expected = [[1, 0], [0, 0]] + [[0, 0]] * (DEFAULT_N_HBA_TILES - 2)
actual = mapper.map_read("RCU_PCB_ID_R", receiver_values) actual = mapper.map_read("RCU_PCB_ID_R", receiver_values)
...@@ -544,7 +689,9 @@ class TestAntennaToRecvMapper(base.TestCase): ...@@ -544,7 +689,9 @@ class TestAntennaToRecvMapper(base.TestCase):
MappingKeys.CONTROL: self.CONTROL_HBA_0_AND_1_ON_RCU_3_AND_2_OF_RECV_1, MappingKeys.CONTROL: self.CONTROL_HBA_0_AND_1_ON_RCU_3_AND_2_OF_RECV_1,
MappingKeys.POWER: self.POWER_HBA_0_AND_1_ON_RCU_1_AND_0_OF_RECV_1, MappingKeys.POWER: self.POWER_HBA_0_AND_1_ON_RCU_1_AND_0_OF_RECV_1,
} }
mapper = AntennaToRecvMapper(recv_mapping, RECV_MAPPED_ATTRS, 3) mapper = AntennaToRecvMapper(
recv_mapping, RECV_MAPPED_ATTRS, 3, self.ANTENNA_TYPE
)
receiver_values = [list(range(32)), [0] * 32, [0] * 32] receiver_values = [list(range(32)), [0] * 32, [0] * 32]
expected = [[1, 3], [0, 2]] + [[0, 0]] * (DEFAULT_N_HBA_TILES - 2) expected = [[1, 3], [0, 2]] + [[0, 0]] * (DEFAULT_N_HBA_TILES - 2)
actual = mapper.map_read("RCU_PCB_ID_R", receiver_values) actual = mapper.map_read("RCU_PCB_ID_R", receiver_values)
...@@ -556,7 +703,9 @@ class TestAntennaToRecvMapper(base.TestCase): ...@@ -556,7 +703,9 @@ class TestAntennaToRecvMapper(base.TestCase):
MappingKeys.CONTROL: self.CONTROL_NOT_CONNECTED, MappingKeys.CONTROL: self.CONTROL_NOT_CONNECTED,
MappingKeys.POWER: self.POWER_NOT_CONNECTED, MappingKeys.POWER: self.POWER_NOT_CONNECTED,
} }
mapper = AntennaToRecvMapper(recv_mapping, RECV_MAPPED_ATTRS, 3) mapper = AntennaToRecvMapper(
recv_mapping, RECV_MAPPED_ATTRS, 3, self.ANTENNA_TYPE
)
receiver_values = [ receiver_values = [
list(range(MAX_ANTENNA)), list(range(MAX_ANTENNA)),
[0] * MAX_ANTENNA, [0] * MAX_ANTENNA,
...@@ -573,7 +722,9 @@ class TestAntennaToRecvMapper(base.TestCase): ...@@ -573,7 +722,9 @@ class TestAntennaToRecvMapper(base.TestCase):
MappingKeys.CONTROL: self.CONTROL_HBA_0_AND_1_ON_RCU_1_AND_0_OF_RECV_1, MappingKeys.CONTROL: self.CONTROL_HBA_0_AND_1_ON_RCU_1_AND_0_OF_RECV_1,
MappingKeys.POWER: self.POWER_NOT_CONNECTED, MappingKeys.POWER: self.POWER_NOT_CONNECTED,
} }
mapper = AntennaToRecvMapper(recv_mapping, RECV_MAPPED_ATTRS, 1) mapper = AntennaToRecvMapper(
recv_mapping, RECV_MAPPED_ATTRS, 1, self.ANTENNA_TYPE
)
receiver_values = [list(range(MAX_ANTENNA))] receiver_values = [list(range(MAX_ANTENNA))]
expected = [[0, 1], [0, 0]] + [[0, 0]] * (DEFAULT_N_HBA_TILES - 2) expected = [[0, 1], [0, 0]] + [[0, 0]] * (DEFAULT_N_HBA_TILES - 2)
actual = mapper.map_read("RCU_attenuator_dB_R", receiver_values) actual = mapper.map_read("RCU_attenuator_dB_R", receiver_values)
...@@ -586,7 +737,9 @@ class TestAntennaToRecvMapper(base.TestCase): ...@@ -586,7 +737,9 @@ class TestAntennaToRecvMapper(base.TestCase):
MappingKeys.CONTROL: self.CONTROL_NOT_CONNECTED, MappingKeys.CONTROL: self.CONTROL_NOT_CONNECTED,
MappingKeys.POWER: self.POWER_HBA_0_AND_1_ON_RCU_1_AND_0_OF_RECV_1, MappingKeys.POWER: self.POWER_HBA_0_AND_1_ON_RCU_1_AND_0_OF_RECV_1,
} }
mapper = AntennaToRecvMapper(recv_mapping, RECV_MAPPED_ATTRS, 1) mapper = AntennaToRecvMapper(
recv_mapping, RECV_MAPPED_ATTRS, 1, self.ANTENNA_TYPE
)
receiver_values = [list(range(MAX_ANTENNA))] receiver_values = [list(range(MAX_ANTENNA))]
expected = [[1, 0], [0, 0]] + [[0, 0]] * (DEFAULT_N_HBA_TILES - 2) expected = [[1, 0], [0, 0]] + [[0, 0]] * (DEFAULT_N_HBA_TILES - 2)
actual = mapper.map_read("RCU_attenuator_dB_R", receiver_values) actual = mapper.map_read("RCU_attenuator_dB_R", receiver_values)
...@@ -599,7 +752,9 @@ class TestAntennaToRecvMapper(base.TestCase): ...@@ -599,7 +752,9 @@ class TestAntennaToRecvMapper(base.TestCase):
MappingKeys.CONTROL: self.CONTROL_HBA_0_AND_1_ON_RCU_3_AND_2_OF_RECV_1, MappingKeys.CONTROL: self.CONTROL_HBA_0_AND_1_ON_RCU_3_AND_2_OF_RECV_1,
MappingKeys.POWER: self.POWER_HBA_0_AND_1_ON_RCU_1_AND_0_OF_RECV_1, MappingKeys.POWER: self.POWER_HBA_0_AND_1_ON_RCU_1_AND_0_OF_RECV_1,
} }
mapper = AntennaToRecvMapper(recv_mapping, RECV_MAPPED_ATTRS, 1) mapper = AntennaToRecvMapper(
recv_mapping, RECV_MAPPED_ATTRS, 1, self.ANTENNA_TYPE
)
receiver_values = [list(range(MAX_ANTENNA))] receiver_values = [list(range(MAX_ANTENNA))]
expected = [[1, 3], [0, 2]] + [[0, 0]] * (DEFAULT_N_HBA_TILES - 2) expected = [[1, 3], [0, 2]] + [[0, 0]] * (DEFAULT_N_HBA_TILES - 2)
actual = mapper.map_read("RCU_attenuator_dB_R", receiver_values) actual = mapper.map_read("RCU_attenuator_dB_R", receiver_values)
...@@ -613,7 +768,9 @@ class TestAntennaToRecvMapper(base.TestCase): ...@@ -613,7 +768,9 @@ class TestAntennaToRecvMapper(base.TestCase):
MappingKeys.CONTROL: self.CONTROL_NOT_CONNECTED, MappingKeys.CONTROL: self.CONTROL_NOT_CONNECTED,
MappingKeys.POWER: self.POWER_NOT_CONNECTED, MappingKeys.POWER: self.POWER_NOT_CONNECTED,
} }
mapper = AntennaToRecvMapper(recv_mapping, RECV_MAPPED_ATTRS, 1) mapper = AntennaToRecvMapper(
recv_mapping, RECV_MAPPED_ATTRS, 1, self.ANTENNA_TYPE
)
set_values = [None] * DEFAULT_N_HBA_TILES set_values = [None] * DEFAULT_N_HBA_TILES
expected = [[[None, None, None]] * N_rcu] expected = [[[None, None, None]] * N_rcu]
...@@ -626,7 +783,9 @@ class TestAntennaToRecvMapper(base.TestCase): ...@@ -626,7 +783,9 @@ class TestAntennaToRecvMapper(base.TestCase):
MappingKeys.CONTROL: self.CONTROL_NOT_CONNECTED, MappingKeys.CONTROL: self.CONTROL_NOT_CONNECTED,
MappingKeys.POWER: self.POWER_NOT_CONNECTED, MappingKeys.POWER: self.POWER_NOT_CONNECTED,
} }
mapper = AntennaToRecvMapper(recv_mapping, RECV_MAPPED_ATTRS, 2) mapper = AntennaToRecvMapper(
recv_mapping, RECV_MAPPED_ATTRS, 2, self.ANTENNA_TYPE
)
set_values = [None] * DEFAULT_N_HBA_TILES set_values = [None] * DEFAULT_N_HBA_TILES
expected = [[[None, None, None]] * N_rcu] * 2 expected = [[[None, None, None]] * N_rcu] * 2
...@@ -638,7 +797,9 @@ class TestAntennaToRecvMapper(base.TestCase): ...@@ -638,7 +797,9 @@ class TestAntennaToRecvMapper(base.TestCase):
MappingKeys.CONTROL: self.CONTROL_HBA_0_AND_1_ON_RCU_1_AND_0_OF_RECV_1, MappingKeys.CONTROL: self.CONTROL_HBA_0_AND_1_ON_RCU_1_AND_0_OF_RECV_1,
MappingKeys.POWER: self.POWER_NOT_CONNECTED, MappingKeys.POWER: self.POWER_NOT_CONNECTED,
} }
mapper = AntennaToRecvMapper(recv_mapping, RECV_MAPPED_ATTRS, 1) mapper = AntennaToRecvMapper(
recv_mapping, RECV_MAPPED_ATTRS, 1, self.ANTENNA_TYPE
)
set_values = [True, False] + [None] * (DEFAULT_N_HBA_TILES - 2) set_values = [True, False] + [None] * (DEFAULT_N_HBA_TILES - 2)
expected = [[[False, True, None]] + [[None, None, None]] * (N_rcu - 1)] expected = [[[False, True, None]] + [[None, None, None]] * (N_rcu - 1)]
...@@ -650,7 +811,9 @@ class TestAntennaToRecvMapper(base.TestCase): ...@@ -650,7 +811,9 @@ class TestAntennaToRecvMapper(base.TestCase):
MappingKeys.CONTROL: self.CONTROL_NOT_CONNECTED, MappingKeys.CONTROL: self.CONTROL_NOT_CONNECTED,
MappingKeys.POWER: self.POWER_NOT_CONNECTED, MappingKeys.POWER: self.POWER_NOT_CONNECTED,
} }
mapper = AntennaToRecvMapper(recv_mapping, RECV_MAPPED_ATTRS, 1) mapper = AntennaToRecvMapper(
recv_mapping, RECV_MAPPED_ATTRS, 1, self.ANTENNA_TYPE
)
set_values = [None] * DEFAULT_N_HBA_TILES set_values = [None] * DEFAULT_N_HBA_TILES
expected = [[[None, None, None]] * N_rcu] expected = [[[None, None, None]] * N_rcu]
...@@ -662,7 +825,9 @@ class TestAntennaToRecvMapper(base.TestCase): ...@@ -662,7 +825,9 @@ class TestAntennaToRecvMapper(base.TestCase):
MappingKeys.CONTROL: self.CONTROL_NOT_CONNECTED, MappingKeys.CONTROL: self.CONTROL_NOT_CONNECTED,
MappingKeys.POWER: self.POWER_NOT_CONNECTED, MappingKeys.POWER: self.POWER_NOT_CONNECTED,
} }
mapper = AntennaToRecvMapper(recv_mapping, RECV_MAPPED_ATTRS, 2) mapper = AntennaToRecvMapper(
recv_mapping, RECV_MAPPED_ATTRS, 2, self.ANTENNA_TYPE
)
set_values = [None] * DEFAULT_N_HBA_TILES set_values = [None] * DEFAULT_N_HBA_TILES
expected = [[[None, None, None]] * N_rcu] * 2 expected = [[[None, None, None]] * N_rcu] * 2
...@@ -674,7 +839,9 @@ class TestAntennaToRecvMapper(base.TestCase): ...@@ -674,7 +839,9 @@ class TestAntennaToRecvMapper(base.TestCase):
MappingKeys.CONTROL: self.CONTROL_NOT_CONNECTED, MappingKeys.CONTROL: self.CONTROL_NOT_CONNECTED,
MappingKeys.POWER: self.POWER_HBA_0_AND_1_ON_RCU_1_AND_0_OF_RECV_1, MappingKeys.POWER: self.POWER_HBA_0_AND_1_ON_RCU_1_AND_0_OF_RECV_1,
} }
mapper = AntennaToRecvMapper(recv_mapping, RECV_MAPPED_ATTRS, 1) mapper = AntennaToRecvMapper(
recv_mapping, RECV_MAPPED_ATTRS, 1, self.ANTENNA_TYPE
)
set_values = [1, 0] + [None] * (DEFAULT_N_HBA_TILES - 2) set_values = [1, 0] + [None] * (DEFAULT_N_HBA_TILES - 2)
expected = [[[0, 1, None]] + [[None, None, None]] * (N_rcu - 1)] expected = [[[0, 1, None]] + [[None, None, None]] * (N_rcu - 1)]
...@@ -686,7 +853,9 @@ class TestAntennaToRecvMapper(base.TestCase): ...@@ -686,7 +853,9 @@ class TestAntennaToRecvMapper(base.TestCase):
MappingKeys.CONTROL: self.CONTROL_NOT_CONNECTED, MappingKeys.CONTROL: self.CONTROL_NOT_CONNECTED,
MappingKeys.POWER: self.POWER_NOT_CONNECTED, MappingKeys.POWER: self.POWER_NOT_CONNECTED,
} }
mapper = AntennaToRecvMapper(recv_mapping, RECV_MAPPED_ATTRS, 1) mapper = AntennaToRecvMapper(
recv_mapping, RECV_MAPPED_ATTRS, 1, self.ANTENNA_TYPE
)
set_values = [None] * DEFAULT_N_HBA_TILES set_values = [None] * DEFAULT_N_HBA_TILES
expected = [[[None, None, None]] * N_rcu] expected = [[[None, None, None]] * N_rcu]
...@@ -698,7 +867,9 @@ class TestAntennaToRecvMapper(base.TestCase): ...@@ -698,7 +867,9 @@ class TestAntennaToRecvMapper(base.TestCase):
MappingKeys.CONTROL: self.CONTROL_NOT_CONNECTED, MappingKeys.CONTROL: self.CONTROL_NOT_CONNECTED,
MappingKeys.POWER: self.POWER_NOT_CONNECTED, MappingKeys.POWER: self.POWER_NOT_CONNECTED,
} }
mapper = AntennaToRecvMapper(recv_mapping, RECV_MAPPED_ATTRS, 2) mapper = AntennaToRecvMapper(
recv_mapping, RECV_MAPPED_ATTRS, 2, self.ANTENNA_TYPE
)
set_values = [None] * DEFAULT_N_HBA_TILES set_values = [None] * DEFAULT_N_HBA_TILES
expected = [[[None, None, None]] * N_rcu] * 2 expected = [[[None, None, None]] * N_rcu] * 2
...@@ -710,7 +881,9 @@ class TestAntennaToRecvMapper(base.TestCase): ...@@ -710,7 +881,9 @@ class TestAntennaToRecvMapper(base.TestCase):
MappingKeys.CONTROL: self.CONTROL_HBA_0_AND_1_ON_RCU_1_AND_0_OF_RECV_1, MappingKeys.CONTROL: self.CONTROL_HBA_0_AND_1_ON_RCU_1_AND_0_OF_RECV_1,
MappingKeys.POWER: self.POWER_NOT_CONNECTED, MappingKeys.POWER: self.POWER_NOT_CONNECTED,
} }
mapper = AntennaToRecvMapper(recv_mapping, RECV_MAPPED_ATTRS, 1) mapper = AntennaToRecvMapper(
recv_mapping, RECV_MAPPED_ATTRS, 1, self.ANTENNA_TYPE
)
set_values = [[1, 1], [0, 0]] + [[None, None]] * (DEFAULT_N_HBA_TILES - 2) set_values = [[1, 1], [0, 0]] + [[None, None]] * (DEFAULT_N_HBA_TILES - 2)
expected = [[[0, 1, None]] + [[None, None, None]] * (N_rcu - 1)] expected = [[[0, 1, None]] + [[None, None, None]] * (N_rcu - 1)]
...@@ -722,7 +895,9 @@ class TestAntennaToRecvMapper(base.TestCase): ...@@ -722,7 +895,9 @@ class TestAntennaToRecvMapper(base.TestCase):
MappingKeys.CONTROL: self.CONTROL_NOT_CONNECTED, MappingKeys.CONTROL: self.CONTROL_NOT_CONNECTED,
MappingKeys.POWER: self.POWER_NOT_CONNECTED, MappingKeys.POWER: self.POWER_NOT_CONNECTED,
} }
mapper = AntennaToRecvMapper(recv_mapping, RECV_MAPPED_ATTRS, 1) mapper = AntennaToRecvMapper(
recv_mapping, RECV_MAPPED_ATTRS, 1, self.ANTENNA_TYPE
)
set_values = [[1] * N_rcu] * DEFAULT_N_HBA_TILES set_values = [[1] * N_rcu] * DEFAULT_N_HBA_TILES
expected = [[[None] * N_rcu] * MAX_ANTENNA] expected = [[[None] * N_rcu] * MAX_ANTENNA]
...@@ -734,7 +909,9 @@ class TestAntennaToRecvMapper(base.TestCase): ...@@ -734,7 +909,9 @@ class TestAntennaToRecvMapper(base.TestCase):
MappingKeys.CONTROL: self.CONTROL_NOT_CONNECTED, MappingKeys.CONTROL: self.CONTROL_NOT_CONNECTED,
MappingKeys.POWER: self.POWER_NOT_CONNECTED, MappingKeys.POWER: self.POWER_NOT_CONNECTED,
} }
mapper = AntennaToRecvMapper(recv_mapping, RECV_MAPPED_ATTRS, 2) mapper = AntennaToRecvMapper(
recv_mapping, RECV_MAPPED_ATTRS, 2, self.ANTENNA_TYPE
)
set_values = [[1] * N_rcu] * DEFAULT_N_HBA_TILES set_values = [[1] * N_rcu] * DEFAULT_N_HBA_TILES
expected = [[[None] * N_rcu] * MAX_ANTENNA, [[None] * N_rcu] * MAX_ANTENNA] expected = [[[None] * N_rcu] * MAX_ANTENNA, [[None] * N_rcu] * MAX_ANTENNA]
...@@ -746,7 +923,9 @@ class TestAntennaToRecvMapper(base.TestCase): ...@@ -746,7 +923,9 @@ class TestAntennaToRecvMapper(base.TestCase):
MappingKeys.CONTROL: self.CONTROL_HBA_0_AND_1_ON_RCU_1_AND_0_OF_RECV_1, MappingKeys.CONTROL: self.CONTROL_HBA_0_AND_1_ON_RCU_1_AND_0_OF_RECV_1,
MappingKeys.POWER: self.POWER_NOT_CONNECTED, MappingKeys.POWER: self.POWER_NOT_CONNECTED,
} }
mapper = AntennaToRecvMapper(recv_mapping, RECV_MAPPED_ATTRS, 1) mapper = AntennaToRecvMapper(
recv_mapping, RECV_MAPPED_ATTRS, 1, self.ANTENNA_TYPE
)
set_values = [[1] * N_rcu, [2] * N_rcu] + [[None] * N_rcu] * ( set_values = [[1] * N_rcu, [2] * N_rcu] + [[None] * N_rcu] * (
DEFAULT_N_HBA_TILES - 2 DEFAULT_N_HBA_TILES - 2
...@@ -760,7 +939,9 @@ class TestAntennaToRecvMapper(base.TestCase): ...@@ -760,7 +939,9 @@ class TestAntennaToRecvMapper(base.TestCase):
MappingKeys.CONTROL: self.CONTROL_NOT_CONNECTED, MappingKeys.CONTROL: self.CONTROL_NOT_CONNECTED,
MappingKeys.POWER: self.POWER_NOT_CONNECTED, MappingKeys.POWER: self.POWER_NOT_CONNECTED,
} }
mapper = AntennaToRecvMapper(recv_mapping, RECV_MAPPED_ATTRS, 1) mapper = AntennaToRecvMapper(
recv_mapping, RECV_MAPPED_ATTRS, 1, self.ANTENNA_TYPE
)
set_values = [[None] * N_rcu] * DEFAULT_N_HBA_TILES set_values = [[None] * N_rcu] * DEFAULT_N_HBA_TILES
expected = [[[None] * N_rcu] * MAX_ANTENNA] expected = [[[None] * N_rcu] * MAX_ANTENNA]
...@@ -772,7 +953,9 @@ class TestAntennaToRecvMapper(base.TestCase): ...@@ -772,7 +953,9 @@ class TestAntennaToRecvMapper(base.TestCase):
MappingKeys.CONTROL: self.CONTROL_NOT_CONNECTED, MappingKeys.CONTROL: self.CONTROL_NOT_CONNECTED,
MappingKeys.POWER: self.POWER_NOT_CONNECTED, MappingKeys.POWER: self.POWER_NOT_CONNECTED,
} }
mapper = AntennaToRecvMapper(recv_mapping, RECV_MAPPED_ATTRS, 2) mapper = AntennaToRecvMapper(
recv_mapping, RECV_MAPPED_ATTRS, 2, self.ANTENNA_TYPE
)
set_values = [[None] * N_rcu] * DEFAULT_N_HBA_TILES set_values = [[None] * N_rcu] * DEFAULT_N_HBA_TILES
expected = [[[None] * N_rcu] * MAX_ANTENNA, [[None] * N_rcu] * MAX_ANTENNA] expected = [[[None] * N_rcu] * MAX_ANTENNA, [[None] * N_rcu] * MAX_ANTENNA]
...@@ -784,7 +967,9 @@ class TestAntennaToRecvMapper(base.TestCase): ...@@ -784,7 +967,9 @@ class TestAntennaToRecvMapper(base.TestCase):
MappingKeys.CONTROL: self.CONTROL_HBA_0_AND_1_ON_RCU_1_AND_0_OF_RECV_1, MappingKeys.CONTROL: self.CONTROL_HBA_0_AND_1_ON_RCU_1_AND_0_OF_RECV_1,
MappingKeys.POWER: self.POWER_NOT_CONNECTED, MappingKeys.POWER: self.POWER_NOT_CONNECTED,
} }
mapper = AntennaToRecvMapper(recv_mapping, RECV_MAPPED_ATTRS, 1) mapper = AntennaToRecvMapper(
recv_mapping, RECV_MAPPED_ATTRS, 1, self.ANTENNA_TYPE
)
set_values = [[False, True] * 16, [True, False] * 16] + [[None] * N_rcu] * ( set_values = [[False, True] * 16, [True, False] * 16] + [[None] * N_rcu] * (
DEFAULT_N_HBA_TILES - 2 DEFAULT_N_HBA_TILES - 2
...@@ -801,7 +986,9 @@ class TestAntennaToRecvMapper(base.TestCase): ...@@ -801,7 +986,9 @@ class TestAntennaToRecvMapper(base.TestCase):
MappingKeys.CONTROL: self.CONTROL_NOT_CONNECTED, MappingKeys.CONTROL: self.CONTROL_NOT_CONNECTED,
MappingKeys.POWER: self.POWER_NOT_CONNECTED, MappingKeys.POWER: self.POWER_NOT_CONNECTED,
} }
mapper = AntennaToRecvMapper(recv_mapping, RECV_MAPPED_ATTRS, 1) mapper = AntennaToRecvMapper(
recv_mapping, RECV_MAPPED_ATTRS, 1, self.ANTENNA_TYPE
)
set_values = [[None] * N_rcu] * DEFAULT_N_HBA_TILES set_values = [[None] * N_rcu] * DEFAULT_N_HBA_TILES
expected = [[[None] * N_rcu] * MAX_ANTENNA] expected = [[[None] * N_rcu] * MAX_ANTENNA]
...@@ -813,7 +1000,9 @@ class TestAntennaToRecvMapper(base.TestCase): ...@@ -813,7 +1000,9 @@ class TestAntennaToRecvMapper(base.TestCase):
MappingKeys.CONTROL: self.CONTROL_NOT_CONNECTED, MappingKeys.CONTROL: self.CONTROL_NOT_CONNECTED,
MappingKeys.POWER: self.POWER_NOT_CONNECTED, MappingKeys.POWER: self.POWER_NOT_CONNECTED,
} }
mapper = AntennaToRecvMapper(recv_mapping, RECV_MAPPED_ATTRS, 2) mapper = AntennaToRecvMapper(
recv_mapping, RECV_MAPPED_ATTRS, 2, self.ANTENNA_TYPE
)
set_values = [[None] * N_rcu] * DEFAULT_N_HBA_TILES set_values = [[None] * N_rcu] * DEFAULT_N_HBA_TILES
expected = [[[None] * N_rcu] * MAX_ANTENNA, [[None] * N_rcu] * MAX_ANTENNA] expected = [[[None] * N_rcu] * MAX_ANTENNA, [[None] * N_rcu] * MAX_ANTENNA]
...@@ -825,7 +1014,9 @@ class TestAntennaToRecvMapper(base.TestCase): ...@@ -825,7 +1014,9 @@ class TestAntennaToRecvMapper(base.TestCase):
MappingKeys.CONTROL: self.CONTROL_HBA_0_AND_1_ON_RCU_1_AND_0_OF_RECV_1, MappingKeys.CONTROL: self.CONTROL_HBA_0_AND_1_ON_RCU_1_AND_0_OF_RECV_1,
MappingKeys.POWER: self.POWER_NOT_CONNECTED, MappingKeys.POWER: self.POWER_NOT_CONNECTED,
} }
mapper = AntennaToRecvMapper(recv_mapping, RECV_MAPPED_ATTRS, 1) mapper = AntennaToRecvMapper(
recv_mapping, RECV_MAPPED_ATTRS, 1, self.ANTENNA_TYPE
)
set_values = [[False, True] * 16, [True, False] * 16] + [[None] * N_rcu] * ( set_values = [[False, True] * 16, [True, False] * 16] + [[None] * N_rcu] * (
DEFAULT_N_HBA_TILES - 2 DEFAULT_N_HBA_TILES - 2
...@@ -842,7 +1033,9 @@ class TestAntennaToRecvMapper(base.TestCase): ...@@ -842,7 +1033,9 @@ class TestAntennaToRecvMapper(base.TestCase):
MappingKeys.CONTROL: self.CONTROL_NOT_CONNECTED, MappingKeys.CONTROL: self.CONTROL_NOT_CONNECTED,
MappingKeys.POWER: self.POWER_NOT_CONNECTED, MappingKeys.POWER: self.POWER_NOT_CONNECTED,
} }
mapper = AntennaToRecvMapper(recv_mapping, RECV_MAPPED_ATTRS, 1) mapper = AntennaToRecvMapper(
recv_mapping, RECV_MAPPED_ATTRS, 1, self.ANTENNA_TYPE
)
set_values = [[None] * N_rcu] * DEFAULT_N_HBA_TILES set_values = [[None] * N_rcu] * DEFAULT_N_HBA_TILES
expected = [[[None] * N_rcu] * MAX_ANTENNA] expected = [[[None] * N_rcu] * MAX_ANTENNA]
actual = mapper.map_write("HBAT_PWR_on_RW", set_values) actual = mapper.map_write("HBAT_PWR_on_RW", set_values)
...@@ -853,7 +1046,9 @@ class TestAntennaToRecvMapper(base.TestCase): ...@@ -853,7 +1046,9 @@ class TestAntennaToRecvMapper(base.TestCase):
MappingKeys.CONTROL: self.CONTROL_NOT_CONNECTED, MappingKeys.CONTROL: self.CONTROL_NOT_CONNECTED,
MappingKeys.POWER: self.POWER_NOT_CONNECTED, MappingKeys.POWER: self.POWER_NOT_CONNECTED,
} }
mapper = AntennaToRecvMapper(recv_mapping, RECV_MAPPED_ATTRS, 2) mapper = AntennaToRecvMapper(
recv_mapping, RECV_MAPPED_ATTRS, 2, self.ANTENNA_TYPE
)
set_values = [[None] * N_rcu] * DEFAULT_N_HBA_TILES set_values = [[None] * N_rcu] * DEFAULT_N_HBA_TILES
expected = [[[None] * N_rcu] * MAX_ANTENNA, [[None] * N_rcu] * MAX_ANTENNA] expected = [[[None] * N_rcu] * MAX_ANTENNA, [[None] * N_rcu] * MAX_ANTENNA]
...@@ -865,7 +1060,9 @@ class TestAntennaToRecvMapper(base.TestCase): ...@@ -865,7 +1060,9 @@ class TestAntennaToRecvMapper(base.TestCase):
MappingKeys.CONTROL: self.CONTROL_HBA_0_AND_1_ON_RCU_1_AND_0_OF_RECV_1, MappingKeys.CONTROL: self.CONTROL_HBA_0_AND_1_ON_RCU_1_AND_0_OF_RECV_1,
MappingKeys.POWER: self.POWER_NOT_CONNECTED, MappingKeys.POWER: self.POWER_NOT_CONNECTED,
} }
mapper = AntennaToRecvMapper(recv_mapping, RECV_MAPPED_ATTRS, 1) mapper = AntennaToRecvMapper(
recv_mapping, RECV_MAPPED_ATTRS, 1, self.ANTENNA_TYPE
)
set_values = [[False, True] * 16, [True, False] * 16] + [[None] * N_rcu] * ( set_values = [[False, True] * 16, [True, False] * 16] + [[None] * N_rcu] * (
DEFAULT_N_HBA_TILES - 2 DEFAULT_N_HBA_TILES - 2
...@@ -883,7 +1080,9 @@ class TestAntennaToRecvMapper(base.TestCase): ...@@ -883,7 +1080,9 @@ class TestAntennaToRecvMapper(base.TestCase):
MappingKeys.CONTROL: self.CONTROL_NOT_CONNECTED, MappingKeys.CONTROL: self.CONTROL_NOT_CONNECTED,
MappingKeys.POWER: self.POWER_NOT_CONNECTED, MappingKeys.POWER: self.POWER_NOT_CONNECTED,
} }
mapper = AntennaToRecvMapper(recv_mapping, RECV_MAPPED_ATTRS, 1) mapper = AntennaToRecvMapper(
recv_mapping, RECV_MAPPED_ATTRS, 1, self.ANTENNA_TYPE
)
set_values = [[1, 1]] * DEFAULT_N_HBA_TILES set_values = [[1, 1]] * DEFAULT_N_HBA_TILES
expected = [[[None] * N_rcu_inp] * N_rcu] expected = [[[None] * N_rcu_inp] * N_rcu]
...@@ -898,7 +1097,9 @@ class TestAntennaToRecvMapper(base.TestCase): ...@@ -898,7 +1097,9 @@ class TestAntennaToRecvMapper(base.TestCase):
MappingKeys.CONTROL: self.CONTROL_HBA_0_AND_1_ON_RCU_1_AND_0_OF_RECV_1, MappingKeys.CONTROL: self.CONTROL_HBA_0_AND_1_ON_RCU_1_AND_0_OF_RECV_1,
MappingKeys.POWER: self.POWER_NOT_CONNECTED, MappingKeys.POWER: self.POWER_NOT_CONNECTED,
} }
mapper = AntennaToRecvMapper(recv_mapping, RECV_MAPPED_ATTRS, 1) mapper = AntennaToRecvMapper(
recv_mapping, RECV_MAPPED_ATTRS, 1, self.ANTENNA_TYPE
)
set_values = [[1, 2], [3, 4]] + [[0, 0]] * (DEFAULT_N_HBA_TILES - 2) set_values = [[1, 2], [3, 4]] + [[0, 0]] * (DEFAULT_N_HBA_TILES - 2)
expected = [[[4, 2, None]] + [[None] * N_rcu_inp] * (N_rcu - 1)] expected = [[[4, 2, None]] + [[None] * N_rcu_inp] * (N_rcu - 1)]
...@@ -913,7 +1114,9 @@ class TestAntennaToRecvMapper(base.TestCase): ...@@ -913,7 +1114,9 @@ class TestAntennaToRecvMapper(base.TestCase):
MappingKeys.CONTROL: self.CONTROL_NOT_CONNECTED, MappingKeys.CONTROL: self.CONTROL_NOT_CONNECTED,
MappingKeys.POWER: self.POWER_HBA_0_AND_1_ON_RCU_1_AND_0_OF_RECV_1, MappingKeys.POWER: self.POWER_HBA_0_AND_1_ON_RCU_1_AND_0_OF_RECV_1,
} }
mapper = AntennaToRecvMapper(recv_mapping, RECV_MAPPED_ATTRS, 1) mapper = AntennaToRecvMapper(
recv_mapping, RECV_MAPPED_ATTRS, 1, self.ANTENNA_TYPE
)
set_values = set_values = [[1, 2], [3, 4]] + [[0, 0]] * ( set_values = set_values = [[1, 2], [3, 4]] + [[0, 0]] * (
DEFAULT_N_HBA_TILES - 2 DEFAULT_N_HBA_TILES - 2
...@@ -930,7 +1133,9 @@ class TestAntennaToRecvMapper(base.TestCase): ...@@ -930,7 +1133,9 @@ class TestAntennaToRecvMapper(base.TestCase):
MappingKeys.CONTROL: self.CONTROL_HBA_0_AND_1_ON_RCU_3_AND_2_OF_RECV_1, MappingKeys.CONTROL: self.CONTROL_HBA_0_AND_1_ON_RCU_3_AND_2_OF_RECV_1,
MappingKeys.POWER: self.POWER_HBA_0_AND_1_ON_RCU_1_AND_0_OF_RECV_1, MappingKeys.POWER: self.POWER_HBA_0_AND_1_ON_RCU_1_AND_0_OF_RECV_1,
} }
mapper = AntennaToRecvMapper(recv_mapping, RECV_MAPPED_ATTRS, 1) mapper = AntennaToRecvMapper(
recv_mapping, RECV_MAPPED_ATTRS, 1, self.ANTENNA_TYPE
)
set_values = set_values = [[1, 2], [3, 4]] + [[0, 0]] * ( set_values = set_values = [[1, 2], [3, 4]] + [[0, 0]] * (
DEFAULT_N_HBA_TILES - 2 DEFAULT_N_HBA_TILES - 2
...@@ -942,6 +1147,8 @@ class TestAntennaToRecvMapper(base.TestCase): ...@@ -942,6 +1147,8 @@ class TestAntennaToRecvMapper(base.TestCase):
class TestAntennafieldDevice(device_base.DeviceTestCase): class TestAntennafieldDevice(device_base.DeviceTestCase):
"""Test class for AntennaField device"""
# some dummy values for mandatory properties # some dummy values for mandatory properties
AT_PROPERTIES = { AT_PROPERTIES = {
"OPC_Server_Name": "example.com", "OPC_Server_Name": "example.com",
...@@ -954,11 +1161,16 @@ class TestAntennafieldDevice(device_base.DeviceTestCase): ...@@ -954,11 +1161,16 @@ class TestAntennafieldDevice(device_base.DeviceTestCase):
ANTENNA_PROPERTIES = { ANTENNA_PROPERTIES = {
"Antenna_Sets": ["INNER", "OUTER", "SPARSE_EVEN", "SPARSE_ODD", "ALL"], "Antenna_Sets": ["INNER", "OUTER", "SPARSE_EVEN", "SPARSE_ODD", "ALL"],
"Antenna_Set_Masks": [ "Antenna_Set_Masks": [
"111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000", "111111111111111111111111111111111111111111111111"
"000000000000000000000000000000000000000000000000111111111111111111111111111111111111111111111111", + "000000000000000000000000000000000000000000000000",
"101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010", "000000000000000000000000000000000000000000000000"
"010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101", + "111111111111111111111111111111111111111111111111",
"111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111", "101010101010101010101010101010101010101010101010"
+ "101010101010101010101010101010101010101010101010",
"010101010101010101010101010101010101010101010101"
+ "010101010101010101010101010101010101010101010101",
"111111111111111111111111111111111111111111111111"
+ "111111111111111111111111111111111111111111111111",
], ],
} }
...@@ -1107,137 +1319,3 @@ class TestAntennafieldDevice(device_base.DeviceTestCase): ...@@ -1107,137 +1319,3 @@ class TestAntennafieldDevice(device_base.DeviceTestCase):
) as proxy: ) as proxy:
expected = [True] * int(MAX_ANTENNA / 2) + [False] * int(MAX_ANTENNA / 2) expected = [True] * int(MAX_ANTENNA / 2) + [False] * int(MAX_ANTENNA / 2)
numpy.testing.assert_equal(expected, proxy.antenna_set_to_mask("INNER")) numpy.testing.assert_equal(expected, proxy.antenna_set_to_mask("INNER"))
class TestRecvDeviceWalker(base.TestCase):
class MockDeviceProxy:
"""Mock of DeviceProxy that simulates recv.ANT_mask_RW."""
@property
def ANT_mask_RW(self):
return self.ant_mask
@ANT_mask_RW.setter
def ANT_mask_RW(self, value):
self.ant_mask = value
def __init__(self, index):
self.visited = False
self.index = index
# fill with a value we don't use, to make sure
# there will be a difference when set
self.ant_mask = numpy.array([[False, True, True]] * N_rcu)
# save the value we originally use
self.original_ant_mask = self.ant_mask
def test_recv_masks_identity_mapping(self):
"""Test whether a straight setup works."""
control_to_recv_mapping = numpy.array([[1, 0], [1, 1], [1, 2]])
antenna_usage_mask = numpy.array([True, True, True])
sut = RecvDeviceWalker(control_to_recv_mapping, antenna_usage_mask)
expected = numpy.array(
[[[True, True, True]] + [[False, False, False]] * (N_rcu - 1)]
)
numpy.testing.assert_equal(expected, sut.recv_ant_masks())
def test_recv_masks_antenna_usage_mask(self):
"""Test whether the antenna_usage_mask is respected."""
control_to_recv_mapping = numpy.array([[1, 0], [1, 1], [1, 2]])
antenna_usage_mask = numpy.array([False, True, False])
sut = RecvDeviceWalker(control_to_recv_mapping, antenna_usage_mask)
expected = numpy.array(
[[[False, True, False]] + [[False, False, False]] * (N_rcu - 1)]
)
numpy.testing.assert_equal(expected, sut.recv_ant_masks())
def test_recv_masks_control_to_recv_mapping(self):
"""Test whether control_to_recv_mapping is respected."""
control_to_recv_mapping = numpy.array([[1, 0], [2, 1], [1, 2]])
antenna_usage_mask = numpy.array([True, True, True])
sut = RecvDeviceWalker(control_to_recv_mapping, antenna_usage_mask)
expected = numpy.array(
[
[[True, False, True]] + [[False, False, False]] * (N_rcu - 1),
[[False, True, False]] + [[False, False, False]] * (N_rcu - 1),
]
)
numpy.testing.assert_equal(expected, sut.recv_ant_masks())
def test_walk_receivers(self):
"""Test walk_receivers on multiple recv_proxies."""
control_to_recv_mapping = numpy.array([[1, 0], [2, 1], [1, 2]])
antenna_usage_mask = numpy.array([True, True, True])
sut = RecvDeviceWalker(control_to_recv_mapping, antenna_usage_mask)
recv_proxies = [TestRecvDeviceWalker.MockDeviceProxy(n + 1) for n in range(2)]
def visitor(recv_proxy):
recv_proxy.visited = True
# is our mask set correctly?
if recv_proxy.index == 1:
expected = numpy.array(
[[True, False, True]] + [[False, False, False]] * (N_rcu - 1)
)
elif recv_proxy.index == 2:
expected = numpy.array(
[[False, True, False]] + [[False, False, False]] * (N_rcu - 1)
)
numpy.testing.assert_equal(expected, recv_proxy.ANT_mask_RW)
sut.walk_receivers(recv_proxies, visitor)
# make sure both recv_proxies were visited
self.assertTrue(recv_proxies[0].visited)
self.assertTrue(recv_proxies[1].visited)
# make sure both masks were restored
numpy.testing.assert_equal(
recv_proxies[0].original_ant_mask, recv_proxies[0].ant_mask
)
numpy.testing.assert_equal(
recv_proxies[1].original_ant_mask, recv_proxies[1].ant_mask
)
def test_walk_receivers_restores_mask_on_exception(self):
"""Test whether walk_receivers() also restores the recv_proxy.ANT_mask_RW
if the visitor function throws."""
control_to_recv_mapping = numpy.array([[1, 0], [2, 1], [1, 2]])
antenna_usage_mask = numpy.array([True, True, True])
sut = RecvDeviceWalker(control_to_recv_mapping, antenna_usage_mask)
recv_proxies = [TestRecvDeviceWalker.MockDeviceProxy(n + 1) for n in range(2)]
class MyException(Exception):
"""A exception noone can raise but us."""
pass
def visitor(recv_proxy):
raise MyException("foo")
with self.assertRaises(MyException):
sut.walk_receivers(recv_proxies, visitor)
# make sure no mask was disturbed
numpy.testing.assert_equal(
recv_proxies[0].original_ant_mask, recv_proxies[0].ant_mask
)
numpy.testing.assert_equal(
recv_proxies[1].original_ant_mask, recv_proxies[1].ant_mask
)
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment