用 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]
...