我想生成一个带有重复条目的pandas.Index
,就像这样。
>>> pd.Index(np.random.choice(range(5), 10))
Int64Index([3, 0, 4, 1, 1, 3, 4, 3, 2, 0], dtype='int64')
所以我写了以下策略:
from hypothesis.extra.pandas import indexes
from hypothesis.strategies import sampled_from
st_idx = indexes(
elements=sampled_from(range(5)),
min_size=10,
max_size=10
)
但是,当我尝试从这样的策略中提取时,我收到以下错误:
>>> st_idx.example()
[...]
Unsatisfiable: Unable to satisfy assumptions of condition.
During handling of the above exception, another exception occurred:
[...]
NoExamples: Could not find any valid examples in 100 tries
在一些实验中,我意识到它只有在min_size
小于选择数(在这种情况下为 <= 5(时才有效。 但是,这意味着我永远不会得到重复的例子!
我做错了什么?
编辑:显然,默认情况下只有indexes
策略unique
设置为True
,将其设置为False
,如下面的答案中所述,也适用于我的方法。
如果生成的索引不必具有任何特定的分布,那么获取所需索引的一种方法是使用integers
策略并使用indexes
策略的参数unique
在需要时生成重复项:
import hypothesis.strategies as st
st_idx = indexes(
st.integers(min_value=0, max_value=5),
min_size=10, max_size=10,
unique=False
)
st_idx.example()
生产:
Int64Index([4, 1, 3, 4, 2, 5, 0, 5, 0, 0], dtype='int64')