class STRTester(BaseTester): """Тестировщик системы терморегулирования (СТР)""" name = 'Система терморегулирования' signals = ( TelemetryAttrs.thermal_control_algorithm_state, TelemetryAttrs.mi1_heater_state, TelemetryAttrs.mi2_heater_state, TelemetryAttrs.mk_heater_state, # TODO: TU1, TU2 # TODO: StrSensorFp TelemetryAttrs.channel_tmi, TelemetryAttrs.str_power, TelemetryAttrs.settings_mi_temperature, TelemetryAttrs.mi1_temperature, TelemetryAttrs.mi2_temperature, TelemetryAttrs.mk1_temperature, TelemetryAttrs.mk2_temperature, ) rules = ( StatedTelemetry(TelemetryAttrs.thermal_control_algorithm_state, as_set(states.StateThermalControl)), StatedTelemetry(TelemetryAttrs.mi1_heater_state, as_set(states.StateMI1Heater)), StatedTelemetry(TelemetryAttrs.mi2_heater_state, as_set(states.StateMI2Heater)), StatedTelemetry(TelemetryAttrs.mk_heater_state, as_set(states.StateMKHeater)), StatedTelemetry(TelemetryAttrs.channel_tmi, as_set(channels.ChannelTmi)), NumericalTelemetry(TelemetryAttrs.str_power, 24., 27., 34.), RelatedTelemetry(TelemetryAttrs.mi1_temperature, _get_mi_expected_temperature, 0.2), RelatedTelemetry(TelemetryAttrs.mi2_temperature, _get_mi_expected_temperature, 0.2), NumericalTelemetry(TelemetryAttrs.mk1_temperature, 39.85, 40., 40.15), NumericalTelemetry(TelemetryAttrs.mk2_temperature, 39.85, 40., 40.15), )
def test_as_set(self) -> None: class State: a = 1 b = 2 c = 3 self.assertSetEqual(as_set(State), {1, 2, 3})
class ScannerTester(BaseTester): """Тестировщик сканера""" name = 'Модуль сканера' signals = ( TelemetryAttrs.scanner_0pos_flag, TelemetryAttrs.scanner_step_error, ) rules = ( StatedTelemetry(TelemetryAttrs.scanner_0pos_flag, as_set(states.ScannerPosition)), StatedTelemetry(TelemetryAttrs.scanner_step_error, { states.ScannerStepError.no_error: Weight.normal, states.ScannerStepError.small[0]: Weight.warning, states.ScannerStepError.small[1]: Weight.warning, states.ScannerStepError.medium[0]: Weight.error, states.ScannerStepError.medium[1]: Weight.error, states.ScannerStepError.large[0]: Weight.critical, states.ScannerStepError.large[1]: Weight.critical, }), )
class PPTTester(BaseTester): """Тестировщик привода перемещения триэдров (ППТ)""" name = 'Привод перемещения триэдров' signals = ( TelemetryAttrs.ppt_zone, TelemetryAttrs.ppt_direction, TelemetryAttrs.ppt_arr, TelemetryAttrs.channel_ppt, TelemetryAttrs.ppt_ref, # TODO: Более сложные проверки # TelemetryAttrs.ppt_in_zone: Number(100, low=80, high=100), # TelemetryAttrs.ppt_out_zone: Number(500, low=450, high=500), # TelemetryAttrs.ppt_ripple: Number(0.3), ) rules = ( StatedTelemetry(TelemetryAttrs.ppt_zone, { states.PPTZone.out_of_zone: Weight.normal, states.PPTZone.in_zone1: Weight.normal, states.PPTZone.in_zone2: Weight.normal, states.PPTZone.error: Weight.error, }), StatedTelemetry(TelemetryAttrs.ppt_direction, as_set(states.PPTDirection)), StatedTelemetry(TelemetryAttrs.ppt_arr, { states.PPTTrihedronState.arrested: Weight.normal, states.PPTTrihedronState.not_arrested: Weight.normal, states.PPTTrihedronState.in_arresting_process: Weight.normal, states.PPTTrihedronState.error: Weight.error, }), StatedTelemetry(TelemetryAttrs.channel_ppt, as_set(channels.ChannelPPT)), StatedTelemetry(TelemetryAttrs.ppt_ref, as_set(channels.ChannelPPTReference)), )
class SettingsTester(BaseTester): """Тестировщик настроек""" name = 'Настройки' signals = ( TelemetryAttrs.settings_abb_cycles, TelemetryAttrs.settings_calibration_period, TelemetryAttrs.settings_gain, TelemetryAttrs.settings_lane, TelemetryAttrs.settings_mi_temperature, TelemetryAttrs.settings_space_cycles, ) rules = ( StatedTelemetry(TelemetryAttrs.settings_abb_cycles, as_set(settings.SettingsBlackBodyCycles)), StatedTelemetry(TelemetryAttrs.settings_calibration_period, as_set(settings.SettingsCalibration)), StatedTelemetry(TelemetryAttrs.settings_gain, as_set(settings.SettingsGain)), StatedTelemetry(TelemetryAttrs.settings_lane, as_set(settings.SettingsLane)), StatedTelemetry(TelemetryAttrs.settings_mi_temperature, as_set(settings.SettingsInterferometerModule)), StatedTelemetry(TelemetryAttrs.settings_space_cycles, as_set(settings.SettingsSpaceCycles)), )
from ikfs_anomaly_detector.core.utils import as_set matplotlib.rcParams['agg.path.chunksize'] = 10_000 class Colours: black = 'k' blue = 'b' cyan = 'c' green = 'g' magenta = 'm' red = 'r' yellow = 'y' COLOURS = as_set(Colours) class FontWeights: light = 'light' normal = 'normal' regular = 'regular' bold = 'bold' @dataclass class Label: text: str = '' font_size: int = 24 font_weight: str = FontWeights.bold