Hamcrest утверждение для списка ndarray и строк
Я пытаюсь изменить существующее утверждение Hamcrest, чтобы отразить изменения в кодовой базе. Ранее тестируемая функция возвращала список двумерных ndarrays.
[array([6.55258911, 8.86439133]), array([7.80198384, 7.59625325]), ..]
Утверждение, чтобы захватить это было следующим:
@staticmethod
def test_generate_readings_returns_list_of_correct_type(sensor, length=100):
assert_that(
sensor.generate_readings(length=length),
only_contains(instance_of(ndarray))
)
Изменения в sensor.generate_readings()
теперь означает, что функция возвращает список ndarrays и сопровождающую метку. На этикетке всегда должно быть написано 'valid'
или же 'anomalous'
Пример вызова обновленного sensor.generate_readings(length=2)
показано ниже:
[(array([-0.64136056, -0.50703576]), 'valid'),
(array([-0.38374486, -1.25771811]), 'valid')]
Мое модифицированное утверждение:
@staticmethod
def test_generate_readings_returns_list_of_correct_type(sensor, length=100):
assert_that(
sensor.generate_readings(length=length),
only_contains((instance_of(ndarray), any_of('valid', 'anomalous')))
)
Это приводит к следующей ошибке:
self = <hamcrest.core.core.isequal.IsEqual object at 0x10863a7f0>
item = array([0.19394019, 0.87763431]), mismatch_description = None
def matches(self, item, mismatch_description=None):
match_result = self._matches(item)
> if not match_result and mismatch_description:
E ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
Это та проблема, которая требует специального сопоставления?
Любая помощь в решении этого была бы очень признательна.