Source code for ska_mid_cbf_mcs.testing.param_gen.controller_param_gen

# -*- coding: utf-8 -*-
#
# This file is part of the ska-mid-cbf-mcs project
#
# Distributed under the terms of the BSD 3-Clause license.
# See LICENSE for more info.

from __future__ import annotations

import math
from pathlib import Path
from typing import Any, Dict, List, Tuple

import orjson

from ska_mid_cbf_mcs.commons.global_enum import const
from ska_mid_cbf_mcs.testing.param_gen.test_param_gen import ParameterGen

__all__ = ["ControllerParameterGen"]


[docs] class ControllerParameterGen(ParameterGen): """A class for Mid.CBF subarray test parameter generation.""" def __init__( self: ParameterGen, *args: Any, set_resource_admin_mode_path: Path, **kwargs: Any, ): """ Initialize an instance of ControllerParameterGen :param set_resource_admin_mode_path: path to template file for SetResourceAdminMode input """ super().__init__(*args, **kwargs) self.set_resource_admin_mode_path = set_resource_admin_mode_path # --- Parameter generation --- #
[docs] def resource_admin_mode_gen( self: ControllerParameterGen, vcc_unit_ids: List[int], fsp_unit_ids: List[int], ) -> Dict[str, Any]: with self.set_resource_admin_mode_path.open("rb") as opened_file: set_resource_admin_mode_dict = orjson.loads(opened_file.read()) set_resource_admin_mode_dict["vcc_unit_ids"] = vcc_unit_ids set_resource_admin_mode_dict["fsp_unit_ids"] = fsp_unit_ids return set_resource_admin_mode_dict
[docs] def generate_parameter_dict( self: ControllerParameterGen, vcc_ids: List[int], fsp_unit_ids: List[int], k_range: Tuple[int], tm_data: Dict[str, Any] | None = None, ) -> Dict[str, Any]: """ Generate one set of all controller test input parameters. :param vcc_unit_ids: list of VCC unit IDs to use in parameter generation :param fsp_unit_ids: list of FSP unit IDs to use in parameter generation :param k_range: range of k values to use in parameter generation :param tm_data: optional param to set alternate source for sys params """ params = {} params["test_seed"] = self.seed # Limit number of resources based on available devices. vcc_ids = list(vcc_ids[: self.max_vcc_all_bands]) params["vcc_ids"] = vcc_ids fsp_unit_ids = list(fsp_unit_ids[: self.max_fsp_units]) params["fsp_ids"] = fsp_unit_ids # SetResourceAdminMode num_vcc_unit = math.ceil(len(vcc_ids) / const.NUM_VCC_PER_VCC_UNIT) vcc_unit_ids = list(range(1, num_vcc_unit + 1)) params["resource_admin_mode_dict"] = self.resource_admin_mode_gen( vcc_unit_ids=vcc_unit_ids, fsp_unit_ids=fsp_unit_ids, ) # InitSysParam sys_param_dict = self.generate_sys_parameters( vcc_ids=vcc_ids, k_range=k_range, tm_data=tm_data, ) params["sys_param_dict"] = sys_param_dict return params
[docs] def generate_parameters( self: ControllerParameterGen, pytest_params: Dict[str, Any], ) -> Dict[str, Any]: """ Generate all subarray test input parameters. :param pytest_params: the dict of pytest params that defines the basic parameter generation values contains: "vcc_ids", "fsp_unit_ids", "k_range" and optionally "tm_data" """ self.parameter_output = self.generate_parameter_dict( vcc_ids=pytest_params["vcc_ids"], fsp_unit_ids=pytest_params["fsp_unit_ids"], k_range=pytest_params["k_range"], tm_data=pytest_params["tm_data"], ) return self.parameter_output