mirror of
https://github.com/pybind/pybind11.git
synced 2024-11-11 08:03:55 +00:00
fix: Missing typed variants of iterator
and iterable
(#4832)
This commit is contained in:
parent
b4573674bc
commit
8c7b8dd0ae
@ -45,6 +45,16 @@ class Set : public set {
|
|||||||
using set::set;
|
using set::set;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
template <typename T>
|
||||||
|
class Iterable : public iterable {
|
||||||
|
using iterable::iterable;
|
||||||
|
};
|
||||||
|
|
||||||
|
template <typename T>
|
||||||
|
class Iterator : public iterator {
|
||||||
|
using iterator::iterator;
|
||||||
|
};
|
||||||
|
|
||||||
template <typename Signature>
|
template <typename Signature>
|
||||||
class Callable;
|
class Callable;
|
||||||
|
|
||||||
@ -85,6 +95,16 @@ struct handle_type_name<typing::Set<T>> {
|
|||||||
static constexpr auto name = const_name("set[") + make_caster<T>::name + const_name("]");
|
static constexpr auto name = const_name("set[") + make_caster<T>::name + const_name("]");
|
||||||
};
|
};
|
||||||
|
|
||||||
|
template <typename T>
|
||||||
|
struct handle_type_name<typing::Iterable<T>> {
|
||||||
|
static constexpr auto name = const_name("Iterable[") + make_caster<T>::name + const_name("]");
|
||||||
|
};
|
||||||
|
|
||||||
|
template <typename T>
|
||||||
|
struct handle_type_name<typing::Iterator<T>> {
|
||||||
|
static constexpr auto name = const_name("Iterator[") + make_caster<T>::name + const_name("]");
|
||||||
|
};
|
||||||
|
|
||||||
template <typename Return, typename... Args>
|
template <typename Return, typename... Args>
|
||||||
struct handle_type_name<typing::Callable<Return(Args...)>> {
|
struct handle_type_name<typing::Callable<Return(Args...)>> {
|
||||||
using retval_type = conditional_t<std::is_same<Return, void>::value, void_type, Return>;
|
using retval_type = conditional_t<std::is_same<Return, void>::value, void_type, Return>;
|
||||||
|
@ -828,6 +828,8 @@ TEST_SUBMODULE(pytypes, m) {
|
|||||||
m.def("annotate_dict_str_int", [](const py::typing::Dict<py::str, int> &) {});
|
m.def("annotate_dict_str_int", [](const py::typing::Dict<py::str, int> &) {});
|
||||||
m.def("annotate_list_int", [](const py::typing::List<int> &) {});
|
m.def("annotate_list_int", [](const py::typing::List<int> &) {});
|
||||||
m.def("annotate_set_str", [](const py::typing::Set<std::string> &) {});
|
m.def("annotate_set_str", [](const py::typing::Set<std::string> &) {});
|
||||||
|
m.def("annotate_iterable_str", [](const py::typing::Iterable<std::string> &) {});
|
||||||
|
m.def("annotate_iterator_int", [](const py::typing::Iterator<int> &) {});
|
||||||
m.def("annotate_fn",
|
m.def("annotate_fn",
|
||||||
[](const py::typing::Callable<int(py::typing::List<py::str>, py::str)> &) {});
|
[](const py::typing::Callable<int(py::typing::List<py::str>, py::str)> &) {});
|
||||||
}
|
}
|
||||||
|
@ -926,6 +926,20 @@ def test_set_annotations(doc):
|
|||||||
assert doc(m.annotate_set_str) == "annotate_set_str(arg0: set[str]) -> None"
|
assert doc(m.annotate_set_str) == "annotate_set_str(arg0: set[str]) -> None"
|
||||||
|
|
||||||
|
|
||||||
|
def test_iterable_annotations(doc):
|
||||||
|
assert (
|
||||||
|
doc(m.annotate_iterable_str)
|
||||||
|
== "annotate_iterable_str(arg0: Iterable[str]) -> None"
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
def test_iterator_annotations(doc):
|
||||||
|
assert (
|
||||||
|
doc(m.annotate_iterator_int)
|
||||||
|
== "annotate_iterator_int(arg0: Iterator[int]) -> None"
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
def test_fn_annotations(doc):
|
def test_fn_annotations(doc):
|
||||||
assert (
|
assert (
|
||||||
doc(m.annotate_fn)
|
doc(m.annotate_fn)
|
||||||
|
Loading…
Reference in New Issue
Block a user