Стратегия гипотез для генерации нескольких кваргов - PullRequest
0 голосов
/ 20 июня 2020

Естественно написать свой тест в терминах 3 отдельных массивов numpy, но первое измерение каждого массива numpy должно быть одинаковой длины. В качестве взлома я могу просто попросить больший массив numpy

@given(
    arrays=arrays(
        dtype=float,
        shape=tuples(
            integers(3, 3),
            array_shapes(max_dims=1).map(lambda t: t[0]),
            array_shapes(max_dims=1).map(lambda t: t[0]),
        ),
        elements=floats(width=16, allow_nan=False, allow_infinity=False),
    ),
)
def test(arrays: np.ndarray):
  a, b, c = arrays[0], arrays[1], arrays[2]
  ...

, но это скрывает то, что я действительно пытаюсь сгенерировать, и делает невозможным использование отдельных стратегий для элементов каждого из массивы. Есть ли способ сгенерировать эти массивы при сохранении ограничения на размер первого измерения? Думаю, мне нужно что-то вроде

@given(
  (a, b, c) = batched_arrays(
    n_arrays=3,
    shared_sizes=array_sizes(max_dims=1),
    unshared_sizes=arrays_sizes(),
    dtypes=[float, int, float],
    elements=[floats(), integers(0), floats(0, 1)])
)
def test(a: np.ndarray, b:np.ndarray, c:np.ndarray):
  assert a.shape[0] == b.shape[0] and a.shape[0] == c.shape[0]
  ...

1 Ответ

1 голос
/ 20 июня 2020

Извините за ответ на свой вопрос. Оказывается, вы можете получить это с помощью общего

@given(
    a=arrays(float, shared(array_shapes(max_dims=1), key="dim1")),
    b=arrays(float, shared(array_shapes(max_dims=1), key="dim1")),
)
def test_shared(a, b):
    assert a.shape[0] == b.shape[0]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...