Skip to content

Commit 65370f3

Browse files
authored
Create handle_type_name specialization to type-hint variable length tuples (#5051)
1 parent ddb8b67 commit 65370f3

File tree

3 files changed

+16
-0
lines changed

3 files changed

+16
-0
lines changed

include/pybind11/typing.h

+7
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,13 @@ struct handle_type_name<typing::Tuple<>> {
7979
static constexpr auto name = const_name("tuple[()]");
8080
};
8181

82+
template <typename T>
83+
struct handle_type_name<typing::Tuple<T, ellipsis>> {
84+
// PEP 484 specifies this syntax for a variable-length tuple
85+
static constexpr auto name
86+
= const_name("tuple[") + make_caster<T>::name + const_name(", ...]");
87+
};
88+
8289
template <typename K, typename V>
8390
struct handle_type_name<typing::Dict<K, V>> {
8491
static constexpr auto name = const_name("dict[") + make_caster<K>::name + const_name(", ")

tests/test_pytypes.cpp

+2
Original file line numberDiff line numberDiff line change
@@ -825,6 +825,8 @@ TEST_SUBMODULE(pytypes, m) {
825825

826826
m.def("annotate_tuple_float_str", [](const py::typing::Tuple<py::float_, py::str> &) {});
827827
m.def("annotate_tuple_empty", [](const py::typing::Tuple<> &) {});
828+
m.def("annotate_tuple_variable_length",
829+
[](const py::typing::Tuple<py::float_, py::ellipsis> &) {});
828830
m.def("annotate_dict_str_int", [](const py::typing::Dict<py::str, int> &) {});
829831
m.def("annotate_list_int", [](const py::typing::List<int> &) {});
830832
m.def("annotate_set_str", [](const py::typing::Set<std::string> &) {});

tests/test_pytypes.py

+7
Original file line numberDiff line numberDiff line change
@@ -911,6 +911,13 @@ def test_tuple_empty_annotations(doc):
911911
)
912912

913913

914+
def test_tuple_variable_length_annotations(doc):
915+
assert (
916+
doc(m.annotate_tuple_variable_length)
917+
== "annotate_tuple_variable_length(arg0: tuple[float, ...]) -> None"
918+
)
919+
920+
914921
def test_dict_annotations(doc):
915922
assert (
916923
doc(m.annotate_dict_str_int)

0 commit comments

Comments
 (0)