mirror of
https://github.com/pybind/pybind11.git
synced 2024-11-21 20:55:11 +00:00
Add const T to docstring generation. (#3020)
* Add const T to docstring generation. * Change order. * See if existing test triggers for a const type. * Add tests. * Fix test. * Remove experiment. * Reformat. * More tests, checks run. * Adding `test_fmt_desc_` prefix to new test functions. * Using pytest.mark.parametrize to 1. condense test; 2. exercise all functions even if one fails; 3. be less platform-specific (e.g. C++ float is not necessarily float32). Co-authored-by: Ralf W. Grosse-Kunstleve <rwgk@google.com>
This commit is contained in:
parent
e25b1505db
commit
4c7697dbe9
@ -1029,7 +1029,10 @@ struct npy_format_descriptor_name<T, enable_if_t<std::is_integral<T>::value>> {
|
|||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
struct npy_format_descriptor_name<T, enable_if_t<std::is_floating_point<T>::value>> {
|
struct npy_format_descriptor_name<T, enable_if_t<std::is_floating_point<T>::value>> {
|
||||||
static constexpr auto name = _<std::is_same<T, float>::value || std::is_same<T, double>::value>(
|
static constexpr auto name = _<std::is_same<T, float>::value
|
||||||
|
|| std::is_same<T, const float>::value
|
||||||
|
|| std::is_same<T, double>::value
|
||||||
|
|| std::is_same<T, const double>::value>(
|
||||||
_("numpy.float") + _<sizeof(T)*8>(), _("numpy.longdouble")
|
_("numpy.float") + _<sizeof(T)*8>(), _("numpy.longdouble")
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
@ -1037,7 +1040,9 @@ struct npy_format_descriptor_name<T, enable_if_t<std::is_floating_point<T>::valu
|
|||||||
template <typename T>
|
template <typename T>
|
||||||
struct npy_format_descriptor_name<T, enable_if_t<is_complex<T>::value>> {
|
struct npy_format_descriptor_name<T, enable_if_t<is_complex<T>::value>> {
|
||||||
static constexpr auto name = _<std::is_same<typename T::value_type, float>::value
|
static constexpr auto name = _<std::is_same<typename T::value_type, float>::value
|
||||||
|| std::is_same<typename T::value_type, double>::value>(
|
|| std::is_same<typename T::value_type, const float>::value
|
||||||
|
|| std::is_same<typename T::value_type, double>::value
|
||||||
|
|| std::is_same<typename T::value_type, const double>::value>(
|
||||||
_("numpy.complex") + _<sizeof(typename T::value_type)*16>(), _("numpy.longcomplex")
|
_("numpy.complex") + _<sizeof(typename T::value_type)*16>(), _("numpy.longcomplex")
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
@ -437,4 +437,10 @@ TEST_SUBMODULE(numpy_array, sm) {
|
|||||||
sm.def("accept_double_f_style_forcecast_noconvert",
|
sm.def("accept_double_f_style_forcecast_noconvert",
|
||||||
[](py::array_t<double, py::array::forcecast | py::array::f_style>) {},
|
[](py::array_t<double, py::array::forcecast | py::array::f_style>) {},
|
||||||
"a"_a.noconvert());
|
"a"_a.noconvert());
|
||||||
|
|
||||||
|
// Check that types returns correct npy format descriptor
|
||||||
|
sm.def("test_fmt_desc_float", [](py::array_t<float>) {});
|
||||||
|
sm.def("test_fmt_desc_double", [](py::array_t<double>) {});
|
||||||
|
sm.def("test_fmt_desc_const_float", [](py::array_t<const float>) {});
|
||||||
|
sm.def("test_fmt_desc_const_double", [](py::array_t<const double>) {});
|
||||||
}
|
}
|
||||||
|
@ -482,6 +482,19 @@ def test_index_using_ellipsis():
|
|||||||
assert a.shape == (6,)
|
assert a.shape == (6,)
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.parametrize(
|
||||||
|
"test_func",
|
||||||
|
[
|
||||||
|
m.test_fmt_desc_float,
|
||||||
|
m.test_fmt_desc_double,
|
||||||
|
m.test_fmt_desc_const_float,
|
||||||
|
m.test_fmt_desc_const_double,
|
||||||
|
],
|
||||||
|
)
|
||||||
|
def test_format_descriptors_for_floating_point_types(test_func):
|
||||||
|
assert "numpy.ndarray[numpy.float" in test_func.__doc__
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.parametrize("forcecast", [False, True])
|
@pytest.mark.parametrize("forcecast", [False, True])
|
||||||
@pytest.mark.parametrize("contiguity", [None, "C", "F"])
|
@pytest.mark.parametrize("contiguity", [None, "C", "F"])
|
||||||
@pytest.mark.parametrize("noconvert", [False, True])
|
@pytest.mark.parametrize("noconvert", [False, True])
|
||||||
|
Loading…
Reference in New Issue
Block a user