def test_calculate_est_anj_coords_and_cov_matrix_for_jammer_and_jammer(self) -> None:
        """Проверка вычисления координат и ковариационной матрциы ближайшей точки на пеленге
        при отождествлении двух трасс постановщиков АШП

        :return: None
        """
        # Определим нужные для функции параметры
        self.source_trace.coordinates = np.array([1., 0., 0.])
        self.source_trace.mfr_position = np.ones(3)
        self.source_trace.coordinate_covariance_matrix = np.diag([1., 1., 0.])
        # Вторая трасса по постановщику АШП
        trace = SourceTrace(mfr_position=np.zeros(3))
        trace.coordinates = np.array([0., 0., 1.])
        trace.coordinate_covariance_matrix = np.diag([1., 0., 1])

        # Расчет тестируемой функцией
        coordinates, cov_matrix = self.source_trace.calc_est_anj_coords_and_cov_matrix_for_jammer_and_jammer(trace)

        # Проверка для координат
        coordinates = coordinates.tolist()
        real_coordinates = [1, 0, 0]
        self.assertEqual(real_coordinates, coordinates, "Расчет координат неверный")

        # Проверка для ковариационной матрицы
        cov_matrix = cov_matrix.tolist()
        real_cov_matrix = [[1., 0., 0.],
                           [0., 1., 0.],
                           [0., 0., 0.]]
        self.assertEqual(real_cov_matrix, cov_matrix, "Расчет ковариационной матрицы неверный")
    def test_unsuccessful_must_identify_with_source_trace(self) -> None:
        """Проверка для возможности отождествления с трассой источника
        Должны получить True для трассы с номером МФР, от которого в трассе ЕМТ есть трасса источника

        :return: None
        """
        # Подготовка данных для функции, по такому номеру МФР есть трасса головного источника
        source_trace = SourceTrace(mfr_number=1)

        # Вызов тестируемой функции
        must_identify = self.cta_trace.must_identify_with_source_trace(
            source_trace)

        # Проверка для необходимости отождествления
        self.assertFalse(must_identify, "Не должны были отождествлять")
        # ______________________________________________________________________________________________________________
        # Проверим, что влияет и наличие дополнительного источника:
        # если в трассе ЕМТ от МФР с таким номером есть трасса, то отождествления происходить не должно
        add_source_trace = SourceTrace(mfr_number=2)
        self.cta_trace.additional_source_trace_array.append(add_source_trace)
        another_source_trace = SourceTrace(mfr_number=2)

        # Вызов тестируемой функции
        must_identify = self.cta_trace.must_identify_with_source_trace(
            another_source_trace)

        # Проверка для необходимости отождествления
        self.assertFalse(must_identify, "Не должны были отождествлять")
Example #3
0
    def test_remove_all_less_accuracy_traces(self) -> None:
        """Тест удаления всех менее точных трасс из списка

        :return: None
        """
        # Подготовка данных для функции
        first_source_trace = SourceTrace(mfr_number=1)
        self.common_trace_array.append(first_source_trace)
        first_cta_trace = self.common_trace_array[0]

        second_source_trace = SourceTrace(mfr_number=2)
        self.common_trace_array.append(second_source_trace)
        second_cta_trace = self.common_trace_array[1]

        # Объединение в список
        identified_traces = [first_cta_trace, second_cta_trace]

        # Вызов тестируемой функции
        self.common_trace_array.remove_all_less_accuracy_traces(
            identified_traces)

        # Проверка для длины  ЕМТ
        len_cta = len(self.common_trace_array)
        real_len_cta = 1
        self.assertEqual(real_len_cta, len_cta, "Длина ЕМТ определена неверно")
    def test_unsuccessful_must_identify_with_cta_trace(self) -> None:
        """Проверяет возможность отождествления с трассой ЕМТ

        :return: None
        """
        # Подготовка данных для функций
        add_source_trace = SourceTrace(mfr_number=2,
                                       mfr_position=np.array([100., 34., 43.]))
        self.cta_trace.additional_source_trace_array.append(add_source_trace)

        identifying_head_source_trace = SourceTrace(mfr_number=4)
        identifying_cta_trace = CTATrace(identifying_head_source_trace)
        identifying_add_source_trace = SourceTrace(mfr_number=1)
        identifying_cta_trace.additional_source_trace_array.append(
            identifying_add_source_trace)

        # Не должны отождествлять (номера мфр)
        must_identify = self.cta_trace.must_identify_with_cta_trace(
            identifying_cta_trace)

        # Проверка для возможности отождествления
        self.assertFalse(must_identify)

        identifying_head_source_trace = SourceTrace(mfr_number=4)
        identifying_cta_trace = CTATrace(identifying_head_source_trace)
        identifying_add_source_trace = SourceTrace(mfr_number=3)
        identifying_cta_trace.additional_source_trace_array.append(
            identifying_add_source_trace)

        # Должны отождествлять
        must_identify = self.cta_trace.must_identify_with_cta_trace(
            identifying_cta_trace)
        self.assertTrue(must_identify)
Example #5
0
    def test_unsuccessful_identification_with_others_cta_traces_for_cta_trace(
            self) -> None:
        """Тест неудачного отождествления трассы ЕМТ с другими трассами ЕМТ

        :return: None
        """
        # Подготовка данных для функции
        # Подготовка первой трассы ЕМТ
        first_source_trace = SourceTrace(mfr_number=0)
        self.common_trace_array.append(first_source_trace)
        first_cta_trace: CTATrace = self.common_trace_array[0]

        # Подготовка второй трассы ЕМТ
        second_source_trace = SourceTrace(mfr_number=2)
        second_source_trace.coordinates = np.array([40., 3535., 42246.])
        self.common_trace_array.append(second_source_trace)
        second_cta_trace: CTATrace = self.common_trace_array[1]

        # Вызов тестируемой функции
        self.common_trace_array.identification_with_others_cta_traces_for_cta_trace(
            first_cta_trace)
        # После вызова тестируемой функции, в ЕМТ должны были остаться обе трассы,
        # так как трассы не отождествлились

        # Проверка для наличия в ЕМТ первой трассы ЕМТ
        is_first_trace_in_cta = first_cta_trace in self.common_trace_array
        self.assertTrue(is_first_trace_in_cta, "Первая трасса ушла из ЕМТ")

        # Проверка для наличия в ЕМТ второй трассы
        is_second_trace_in_cta = second_cta_trace in self.common_trace_array
        self.assertTrue(is_second_trace_in_cta, "Вторая трасса ушла из ЕМТ")
Example #6
0
    def test_append_new_additional_source_trace_in_cta_trace(self) -> None:
        """Тест добавления нового дополнительного источника

        :return: None
        """
        # Подготовка данных для функции
        # Первая трасса ЕМТ
        head_source_trace = SourceTrace(mfr_number=0)
        self.common_trace_array.append(head_source_trace)
        first_cta_trace: CTATrace = self.common_trace_array[0]
        # Вторая трасса ЕМТ
        head_source_trace = SourceTrace(mfr_number=1)
        self.common_trace_array.append(head_source_trace)
        second_cta_trace: CTATrace = self.common_trace_array[1]
        # Добавление трассы дополнительного источника, которая успешно отождествлится с двумя трассами ЕМТ
        new_source_trace = SourceTrace(mfr_number=2)
        # Отождествление c двумя трассами ЕМТ
        new_source_trace.identified_number_cta_trace_dict = {5.87: 1, 0.: 0}

        # Выполнение тестируемой функции
        self.common_trace_array.append_new_additional_source_trace_in_cta_trace(
            new_source_trace)

        # Проверим, что у первой трассы появился новый доп. источник
        new_source_in_first_cta_trace = new_source_trace in first_cta_trace.additional_source_trace_array
        self.assertTrue(new_source_in_first_cta_trace)

        # Проверка, что у второй трассы такого источника нет
        self.assertFalse(
            new_source_trace in second_cta_trace.additional_source_trace_array)
Example #7
0
    def test_unsuccessful_identification_with_head_source_trace_for_additional_source_trace(
            self) -> None:
        """Тест неудачного отождествления с головной трассой источника для трассы дополнительного источника

        :return: None
        """
        # Подготовка данных для функции
        head_source_trace = SourceTrace(mfr_number=0)
        another_source_trace = SourceTrace(mfr_number=1)
        another_source_trace.coordinates = np.array([232., 3554., 464.])

        self.common_trace_array.append(head_source_trace)
        cta_trace: CTATrace = self.common_trace_array[0]
        cta_trace.additional_source_trace_array.append(another_source_trace)

        # Вызов тестируемой функции
        self.common_trace_array.identification_with_head_source_trace_for_additional_source_trace(
            another_source_trace)

        # Проверка для признака наличия трассы в составе массива трасс источников
        is_in_source_array = another_source_trace in cta_trace.additional_source_trace_array
        self.assertFalse(
            is_in_source_array,
            "Трасса не была удалена из массива трасс от дополнительных источников"
        )
    def test_calculate_est_anj_coords_and_cov_matrix_for_jammer_and_target(self) -> None:
        """Расчет координат и ковариационной матрицы в случае отождествления чистой трассы и постановщика АШП

        :return: None
        """
        # Определим необходимые для функции данные
        self.source_trace.coordinates = np.array([1., 0., 0.])
        self.source_trace.mfr_position = np.ones(3)
        self.source_trace.coordinate_covariance_matrix = np.diag([1., 1., 0.])
        # Трасса постановщика АШП
        trace = SourceTrace()
        trace.coordinates = np.array([0., 0, 1.])
        trace.coordinate_covariance_matrix = np.diag([1., 0., 1])

        # Расчет тестируемой функцией
        coordinates, cov_matrix = self.source_trace.calc_est_anj_coords_and_cov_matrix_for_jammer_and_target(trace)

        # Проверка для координат
        coordinates = coordinates.tolist()
        real_coordinates = [1., 0.5, 0.5]
        self.assertEqual(coordinates, real_coordinates, "Расчет координат неверный")

        # Проверка для ковариационной матрицы
        cov_matrix = cov_matrix.tolist()
        real_cov_matrix = [[0.25, 0.0, 0.0],
                           [0.0, 0.25, 0.0],
                           [0.0, 0.0, 0.0]]
        self.assertEqual(cov_matrix, real_cov_matrix, "Расчет ковариационной матрицы неверный")
    def generate_estimator_two_not_bearing_traces(
            self) -> EstimatorTwoNotBearingTraces:
        """Конструирует оценивателя для случая, когда есть две трассы по постановщику АШП

        :return: Оцениватель
        :rtype: EstimatorTwoNotBearingTraces
        """
        source_trace_list = [SourceTrace(), SourceTrace()]
        return self.fabric.generate(source_trace_list)
Example #10
0
    def test_identification(self) -> None:
        """Тест отождествления трасс источников с трассами ЕМТ

        :return: None
        """
        # Подготовка нужных для функции данных
        first_source_trace = SourceTrace(mfr_number=0)
        self.common_trace_array.append(first_source_trace)
        first_cta_trace: CTATrace = self.common_trace_array[0]

        # (дополнительный источник по той же трассе ЕМТ, произойдёт успешное отожедствление с головным)
        second_source_trace = SourceTrace(mfr_number=1)
        second_source_trace.identified_number_cta_trace_dict = {2.74: 0}
        first_cta_trace.add_new_source_trace(second_source_trace)

        # Третья трасса источника (её нет в ЕМТ, не отождествится ни с чем (из-за номера))
        third_source_trace = SourceTrace(mfr_number=1)

        # Объединение в один список
        source_trace_list = SourceTraceList(
            [first_source_trace, second_source_trace, third_source_trace])

        # ______________________________________________________________________________________________________________
        # Выполнение тестируемой функции
        self.common_trace_array.identification(source_trace_list)
        # ______________________________________________________________________________________________________________
        # После отождествление в ЕМТ две трассы, первая с доп. источником, вторая по третьей трассе
        second_cta_trace: CTATrace = self.common_trace_array[1]

        # Проверка для длины ЕМТ
        len_cta = len(self.common_trace_array)
        real_len_cta = 2
        self.assertEqual(real_len_cta, len_cta, "Длина ЕМТ опредлена неверно")

        # Проверка для нахождения второй трассы источника в массиве доп. трасс
        second_trace_in_additional_array = second_source_trace in first_cta_trace.additional_source_trace_array
        self.assertTrue(second_trace_in_additional_array,
                        "Вторая трасса источника не была добавлена в ЕМТ")

        # Проверка для длины массива трасс от доп. источников
        len_additional_array = len(
            first_cta_trace.additional_source_trace_array)
        real_len_additional_array = 1
        self.assertEqual(real_len_additional_array, len_additional_array,
                         "Длина массива трасс от доп. неверна")

        # Проверка того, что головной трассой по второй трассе ЕМТ стала третья трасса истчочника
        is_third_source_trace_head = third_source_trace == second_cta_trace.head_source_trace
        self.assertTrue(
            is_third_source_trace_head,
            "Третья трасса источника не стала головной по второй трассе ЕМТ")

        # Проверка что у второй трассы нет дополнительных источников
        additional_array = second_cta_trace.additional_source_trace_array
        real_additional_array = []
        self.assertEqual(real_additional_array, additional_array,
                         "У второй трассы ЕМТ есть доп. источник")
    def generate_estimator_two_bearing_traces(
            self) -> EstimatorTwoBearingTraces:
        """Конструирует оценивателя для случая, когда есть две трассы чистой цели

        :return: Оцениватель
        :rtype: EstimatorTwoBearingTraces
        """
        first_trace = SourceTrace()
        second_trace = SourceTrace()

        first_trace.is_bearing = second_trace.is_bearing = True

        source_trace_list = [first_trace, second_trace]
        return self.fabric.generate(source_trace_list)
Example #12
0
    def test_append(self) -> None:
        """Тест добавления трассы источника как новой трассы ЕМТ

        :return: None
        """
        # Подготовка данных для функции
        source_trace = SourceTrace(mfr_number=1, mfr_position=np.zeros(3))

        # Вызов тестируемой функции
        self.common_trace_array.append(source_trace)

        appended_cta_trace = self.common_trace_array[0]

        # Проверка для типа добавленной трассы
        type_trace = type(appended_cta_trace)
        real_type_trace = CTATrace
        self.assertEqual(real_type_trace, type_trace,
                         "Тип трассы установлен неверно")

        # Проверка для номера трассы ЕМТ
        num_cta_trace = appended_cta_trace.number
        real_num_cta_trace = 0
        self.assertEqual(real_num_cta_trace, num_cta_trace,
                         "Номер трассы ЕМТ определен неверно")

        # Проверка для длины ЕМТ
        len_cta = len(self.common_trace_array)
        real_len_cta = 1
        self.assertEqual(real_len_cta, len_cta, "Длина ЕМТ определена неверно")
    def test_get_all_sources_trace(self) -> None:
        """Тест для получения всех трасс источников

        :return: None
        """
        # Подготовка данных для функции
        add_source_trace = SourceTrace(mfr_number=2,
                                       mfr_position=np.array([100., 34., 43.]))
        self.cta_trace.additional_source_trace_array.append(add_source_trace)

        # Вызов тестируемой функции
        all_source_traces = self.cta_trace.all_source_traces

        # Проверка для нахождения трассы головного источника в списке
        is_head_source_trace_in_list = self.cta_trace.head_source_trace in all_source_traces
        self.assertTrue(is_head_source_trace_in_list,
                        "Трасса головного источника не в списке")

        # Проверка для нахождения трассы дополнительного источника в списке
        is_add_source_trace_in_list = add_source_trace in all_source_traces
        self.assertTrue(is_add_source_trace_in_list,
                        "Трасса дополнительного источника не в списке")

        # Проверка для длины возващаемого функцией массива
        len_all_source_traces = len(all_source_traces)
        real_len_all_source_traces = 2
        self.assertEqual(real_len_all_source_traces, len_all_source_traces,
                         "Длина списка определена неверно")
    def setUp(self) -> None:
        """Сохраняет ссылки на нужные объекты, откатывает их после каждого теста

        :return: None
        """
        self.head_source_trace = SourceTrace(mfr_number=1)
        self.cta_trace = CTATrace(self.head_source_trace)
Example #15
0
    def test_get_sorted_traces(self) -> None:
        """Тест для сортировки трасс источников по точности

        :return: None
        """
        # Подготовка данных для функции
        # Создание списка из трасс источников, в котором источника расположены в убывании по точности
        list_source_traces = [SourceTrace(1, np.zeros(3)) for _ in range(8)]
        for trace, index in zip(list_source_traces,
                                range(len(list_source_traces))):
            trace.is_bearing = index <= 3
            trace.is_auto_tracking = index not in [0, 1, 4, 5]
            trace.estimate_tick = index % 2

        # На основвании такого списка создание списка трасс ЕМТ
        list_cta_traces = [
            CTATrace(source_trace) for source_trace in list_source_traces
        ]

        # Вызов тестируемой функции для сортировки
        sorted_cta_traces = self.common_trace_array.get_sorted_traces(
            list_cta_traces)
        # В результате выполнения функции должен был получиться в этом случае инвертированный входной список

        # Проверка для результирующего списка
        real_sorted_cta_traces = list(reversed(list_cta_traces))
        self.assertEqual(real_sorted_cta_traces, sorted_cta_traces,
                         "Результирующий список определён неверно")
    def test_sort_sources(self) -> None:
        """

        :return: None
        """
        add_source_trace = SourceTrace(mfr_number=2,
                                       mfr_position=np.array([100., 34., 43.]))
        add_source_trace.is_auto_tracking = True
        self.cta_trace.additional_source_trace_array.append(add_source_trace)

        # Дполнительный и головной иоточник должны поменяться местами (у доп. АС - он точнее)
        self.cta_trace.sort_sources()

        self.assertTrue(add_source_trace is self.cta_trace.head_source_trace)
        self.assertTrue(self.head_source_trace in
                        self.cta_trace.additional_source_trace_array)
Example #17
0
    def test_register(self) -> None:
        """Тест для регистрации ПБУ

        :return: None
        """
        # Определение нужной для функции данных
        self.command_post.tick = 23
        self.command_post.common_trace_array.append(SourceTrace())
        cta_trace: CTATrace = self.command_post.common_trace_array[0]
        cta_trace.number = 88
        cta_trace.coordinates = np.array([34., 323., -293.])
        cta_trace.velocities = np.array([200., 23., -21.])
        cta_trace.coordinate_covariance_matrix = np.diag([32., 34., 569.])

        # Выполненение тестируемой функции
        self.command_post.register()

        # Проверка для регистрации
        registration = self.command_post.registration
        real_registration = [[
            23, 88, 34.0, 323.0, -293.0, 200.0, 23.0, -21.0, 32.0, 34.0, 569.0,
            0.0, 0.0, 0.0, 1
        ]]
        self.assertEqual(real_registration, registration,
                         "Регистрация посчитана неверно")
 def __init__(self, target: Target, mfr_number: int,
              mfr_stable_point: ndarray) -> None:
     # Текущее время в тиках
     self.estimate_tick = 0
     # Цель
     self.target = target
     # Признак пеленга
     self.is_bearing = target.is_anj[mfr_number]
     # Тип сопровождения
     self.is_auto_tracking = target.is_auto_tracking[mfr_number]
     # Априорная дальность (для постановщика АШП)
     self.default_range = 50_000.
     # Временных тиков между измерениями
     self.frame_tick = 2 if self.is_auto_tracking else 20
     frame_time = self.frame_tick * time_in_tick
     # Собственный фильтр
     self.filter = FilterAB(frame_time, manoeuvre_overload=4)
     # Данные по координатам
     self.coordinates_data = TraceCoordinatesData()
     # Данные по скоростям
     self.velocities_data = TraceVelocitiesData()
     # Данные по дисперсиям в БСК
     self.variance_bcs_data = TraceVarianceBCSData()
     # Данные по ковариационным матрицам
     self.covariance_matrix_data = TraceCovarianceMatrixData()
     # Трасса источника (для пользования ПБУ)
     self.source_trace = SourceTrace(mfr_number, mfr_stable_point,
                                     target.number)
    def test_add_new_source_trace(self) -> None:
        """

        :return: None
        """
        add_source_trace = SourceTrace(mfr_number=2,
                                       mfr_position=np.array([100., 34., 43.]))
        add_source_trace.identified_number_cta_trace_dict = {
            0.: self.cta_trace.number
        }

        self.cta_trace.add_new_source_trace(add_source_trace)

        self.assertEqual(1, len(self.cta_trace.additional_source_trace_array))
        self.assertTrue(
            add_source_trace in self.cta_trace.additional_source_trace_array)
Example #20
0
    def append(self, trace: SourceTrace) -> None:
        """Добавление трассы в ЕМТ

        :param trace: Трасса ЕМТ, которую необходимо добавить
        :type trace: SourceTrace

        :return: None
        """
        # Создаём новую трассу ЕМТ
        new_cta_trace = CTATrace(head_source_trace=trace)
        # Добавляем в ЕМТ
        super().append(new_cta_trace)
        # Даём новой трассе новый номер
        new_cta_trace.number = self.index(new_cta_trace)
        # Добавляем информацию и номер трассы ЕМТ в трассу источника
        trace.append_cta_info_and_number(num=new_cta_trace.number, is_head=True)
Example #21
0
    def test_unsuccessful_identify_with_others_cta_traces_for_new_trace_with_number(
            self) -> None:
        """Тест неуспешного отождествления из-за номера МФР

        :return: None
        """
        # Подготовка данных для функции
        self.common_trace_array.append(SourceTrace(mfr_number=1))
        another_source_trace = SourceTrace(mfr_number=1)

        # Выполнение ототждествления тестируемой функцией
        self.common_trace_array.identification_with_others_cta_traces_for_new_source_trace(
            another_source_trace)

        # Проверка для длины ЕМТ
        len_cta = len(self.common_trace_array)
        real_len_cta = 2
        self.assertEqual(real_len_cta, len_cta, "Длина ЕМТ определена неверно")
    def generate_estimator_only_head_source_trace(
            self) -> EstimatorOnlyHeadSourceTrace:
        """Конструирует оценивателя для случая, когда есть только один источник

        :return: Оцениватель
        :rtype: EstimatorOnlyHeadSourceTrace
        """
        source_trace_list = [SourceTrace()]
        return self.fabric.generate(source_trace_list)
    def setUp(self) -> None:
        """Сохраняет ссылку на объекты, откатывавет их после каждого теста

        :return: None
        """
        mfr_position = np.array([1100., 20., 800])
        self.source_trace = SourceTrace(mfr_number=4, mfr_position=mfr_position)
        initial_list = [self.source_trace]
        self.source_trace_list = SourceTraceList(initial_list)
Example #24
0
    def test_update_numbers_in_cta_traces(self) -> None:
        """Тест обновления номеров в трассах ЕМТ

        :return: None
        """
        # Подготвка данных для функции
        # Первая трасса ЕМТ
        first_head_source_trace = SourceTrace(mfr_number=1)
        self.common_trace_array.append(first_head_source_trace)
        first_cta_trace: CTATrace = self.common_trace_array[0]

        # Вторая трасса ЕМТ
        second_head_source_trace = SourceTrace(mfr_number=2)
        self.common_trace_array.append(second_head_source_trace)
        second_cta_trace: CTATrace = self.common_trace_array[1]

        # Вызов тестируемой функции
        self.common_trace_array.update_numbers_in_cta_traces()

        # Проверка для номера первой трассы ЕМТ
        first_cta_trace_num = first_cta_trace.number
        real_first_cta_trace_num = 0
        self.assertEqual(real_first_cta_trace_num, first_cta_trace_num,
                         "Номер трассы ЕМТ неверный")

        # Проверка для номера трассы ЕМТ головного источника первой трассы ЕМТ
        first_cta_trace_num_in_source_trace = first_head_source_trace.cta_number
        self.assertEqual(real_first_cta_trace_num,
                         first_cta_trace_num_in_source_trace,
                         "Номер трассы ЕМТ неверный")

        # Проверка для номера второй трассы ЕМТ
        second_cta_trace_num = second_cta_trace.number
        real_second_cta_trace_num = 1
        self.assertEqual(real_second_cta_trace_num, second_cta_trace_num,
                         "Номер трассы ЕМТ неверный")

        # Проверка для номера трассы ЕМТ головного источника второй трассы ЕМТ
        second_cta_trace_num_in_source_trace = second_head_source_trace.cta_number
        self.assertEqual(real_second_cta_trace_num,
                         second_cta_trace_num_in_source_trace,
                         "Номер трассы ЕМТ неверный")
Example #25
0
    def identification_with_head_source_trace_for_additional_source_trace(self,
                                                                          additional_source_trace: SourceTrace) -> None:
        """Отождествление трассы дополнительного источника с трассой головного источника по той же трассе ЕМТ

        :param additional_source_trace: Трасса дополнительного источника
        :type additional_source_trace: SourceTrace

        :return: None
        """
        # Очищаем вспомогательный словарь для хранения трасс ЕМТ, с которыми отождествились
        additional_source_trace.clear_identified_number_cta_trace_dict()
        # Трасса ЕМТ, с которой работает эта трасса источника
        cta_trace: CTATrace = self[additional_source_trace.cta_number]
        additional_source_trace.identification_with_trace(cta_trace.head_source_trace)
        # Если если трасса дополнительного источника не отождествилась с трассой головного источника
        if not additional_source_trace.identified_number_cta_trace_dict:
            # Удаляем трассу этого источника из дополнительных
            cta_trace.del_additional_source_trace(additional_source_trace)
            # Добавляем трассу в ЕМТ
            self.append(additional_source_trace)
    def test_false_identification_target_and_target(self) -> None:
        """Тестирование отождествления двух трасс по двум разным чистым целям

        :return: None
        """
        # Определим нужные для функции параметры
        self.source_trace.coordinates = np.array([0., 0., 1_100.])
        self.source_trace.coordinate_covariance_matrix = np.diag([22_443., 258., 3_344.])
        # Трасса, с которой будет проводиться отождествление
        trace = SourceTrace()
        trace.cta_number = 4
        trace.coordinates = np.array([45_860., 0, 1_100.])
        trace.coordinate_covariance_matrix = np.diag([243., 659., 496])

        # Отождествляем функцией
        self.source_trace.identification_target_and_target(trace)

        # Проверка для словаря с отождествишимися трассами
        dictionary = self.source_trace.identified_number_cta_trace_dict
        real_dictionary = {}
        self.assertDictEqual(real_dictionary, dictionary, "Словарь с отождествившимися трассами не пуст")
    def test_false_identification_jammer_and_jammer(self) -> None:
        """Проверка отождествления двух трасс по двум разным постановщикам АШП

        :return: None
        """
        # Определим нужные для функции параметры
        self.source_trace.mfr_position = np.array([1_100., 0., 0.])
        self.source_trace.coordinates = np.array([550., 0., 5_500.])
        self.source_trace.coordinate_covariance_matrix = np.diag([22_443., 258., 3_344.])
        # Трасса, с которой будет проводиться отождествление
        trace = SourceTrace(mfr_position=np.array([-1_100., 0., 0.]))
        trace.coordinates = np.array([-34_550., 43_430, -43_550.])
        trace.coordinate_covariance_matrix = np.diag([243., 659., 496])

        # Отождествляем функцией
        self.source_trace.identification_jammer_and_jammer(trace)

        # Проверка для словаря с отождествиишимимся трассами
        dictionary = self.source_trace.identified_number_cta_trace_dict
        real_dictionary = {}
        self.assertDictEqual(real_dictionary, dictionary, "Словарь с отождествившимися трассами не пуст")
Example #28
0
    def test_successful_identification_with_others_cta_traces_for_cta_trace(
            self) -> None:
        """Тест успешного отождествления трассы ЕМТ с другими трассами ЕМТ

        :return: None
        """
        # Подготовка данных для функции
        # Подготовка первой трассы ЕМТ
        first_source_trace = SourceTrace(mfr_number=0)
        first_source_trace.is_auto_tracking = True
        self.common_trace_array.append(first_source_trace)
        first_cta_trace: CTATrace = self.common_trace_array[0]

        # Подготовка второй трассы ЕМТ
        second_source_trace = SourceTrace(mfr_number=1)
        second_source_trace.is_auto_tracking = False
        self.common_trace_array.append(second_source_trace)
        second_cta_trace: CTATrace = self.common_trace_array[1]

        # Вызов тестируемой функции
        self.common_trace_array.identification_with_others_cta_traces_for_cta_trace(
            first_cta_trace)
        # После вызова тестируемой функции, в ЕМТ должна была остаться только первая трасса,
        # так как трассы отождествлились,
        # и первая трасса имеет более высокий приоритет за счет признака автосопровождения

        # Проверка для наличия в ЕМТ первой трассы
        is_first_trace_in_cta = first_cta_trace in self.common_trace_array
        self.assertTrue(is_first_trace_in_cta, "Первая трасса ушла из ЕМТ")

        # Проверка для наличия в ЕМТ второй трассы
        is_second_trace_in_cta = second_cta_trace in self.common_trace_array
        self.assertFalse(is_second_trace_in_cta,
                         "Вторая трасса ЕМТ не ушла из ЕМТ")
Example #29
0
    def test_remove_less_accuracy_cta_traces_with_numbers(self) -> None:
        """Тест удаления наименее точных трасс с указаннами номерами

        :return: None
        """
        # Подготовка данных для функции
        # Первая трасса, самая точная
        num_first_trace_in_cta = 0
        first_head_source_trace = SourceTrace(mfr_number=1)
        first_head_source_trace.is_auto_tracking = True
        self.common_trace_array.append(first_head_source_trace)
        first_cta_trace: CTATrace = self.common_trace_array[0]

        # Вторая трасса, менее точная
        num_second_trace_in_cta = 1
        second_head_source_trace = SourceTrace(mfr_number=2)
        second_head_source_trace.is_auto_tracking = False
        self.common_trace_array.append(second_head_source_trace)
        second_cta_trace: CTATrace = self.common_trace_array[1]

        # Объединение в список
        cta_traces = [num_first_trace_in_cta, num_second_trace_in_cta]

        # Вызов тестируемой функции
        self.common_trace_array.remove_less_accuracy_cta_traces_with_numbers(
            cta_traces)

        # Проверка для нахождения первой трассы в ЕМТ
        is_first_trace_in_cta = first_cta_trace in self.common_trace_array
        self.assertTrue(is_first_trace_in_cta, "Первая трасса ушла из ЕМТ")

        # Проверка для нахождения второй трассы в ЕМТ
        is_second_trace_in_cta = second_cta_trace in self.common_trace_array
        self.assertFalse(is_second_trace_in_cta,
                         "Вторая трасса не ушла из ЕМТ")
    def test_delete_sources_traces(self) -> None:
        """

        :return: None
        """
        add_source_trace = SourceTrace(mfr_number=2,
                                       mfr_position=np.array([100., 34., 43.]))
        self.cta_trace.additional_source_trace_array.append(add_source_trace)

        self.cta_trace.delete_sources_traces()

        self.assertEqual([], self.cta_trace.additional_source_trace_array)
        self.assertIsNone(self.cta_trace.head_source_trace)