HypothesisWorks / hypothesis

Hypothesis is a powerful, flexible, and easy to use library for property-based testing.
https://hypothesis.works
Other
7.53k stars 586 forks source link

Improve support for new and user-defined Numpy dtypes (e.g. `np.dtypes.StringDType`) #4039

Open Zac-HD opened 2 months ago

Zac-HD commented 2 months ago

(previously: https://github.com/HypothesisWorks/hypothesis/issues/3950 and https://github.com/HypothesisWorks/hypothesis/pull/3955 got existing functionality working on Numpy 2.0; now we want to support a new feature)

import numpy
from hypothesis import given
from hypothesis.extra.numpy import from_dtype

@given(from_dtype(numpy.dtypes.StringDType()))
def test(x):
    pass

currently raises hypothesis.errors.InvalidArgument: No strategy inference for StringDType(), which is not ideal for something that ships upstream. We could fix that with a special case, but I'd like to support user-defined extension dtypes too if possible, which I expect will take some kind of registry system. (I spoke to @ngoldbaum at Scipy and confirmed that we can't introspect dtypes from Python, though something Arrow-based might eventually be possible)

We should also improve the error message if you forget to construct an instance: it's all to easy to do and instead you see InvalidArgument: Expected dtype but got dtype=<class 'numpy.dtypes.StringDType'> (type=_DTypeMeta).