chiark / gitweb /
documentation/python: support more than 9 function overloads.
authorVladimír Vondruš <mosra@centrum.cz>
Tue, 7 May 2019 22:26:21 +0000 (00:26 +0200)
committerVladimír Vondruš <mosra@centrum.cz>
Tue, 21 May 2019 14:51:51 +0000 (16:51 +0200)
I thought this time would never come. But here we are, math.dot() needs
this.

documentation/python.py
documentation/test_python/pybind_signatures/pybind_signatures.cpp
documentation/test_python/pybind_signatures/pybind_signatures.html

index c2eb7a6dcedae8f0dd20c96644a4139ecd54db08..97714ecd566c34b0fc50e4b4d69b031a5c5f19cf 100755 (executable)
@@ -293,14 +293,11 @@ def parse_pybind_docstring(state: State, name: str, doc: str) -> List[Tuple[str,
             next = doc.find('{}. {}('.format(id, name))
 
             # Parse the signature and docs from known slice
-            overloads += [parse_pybind_signature(state, doc[3:next])]
+            overloads += [parse_pybind_signature(state, doc[len(str(id - 1)) + 2:next])]
             assert overloads[-1][0] == name
             if next == -1: break
 
-            # Continue to the next signature. Sorry, didn't bother to check how
-            # docstrings for more than 9 overloads look yet, that's why the
-            # assert
-            assert id < 10
+            # Continue to the next signature
             doc = doc[next:]
 
         return overloads
index 40d055fbcdf8d7ff700f92cbd69cd7450d465c25..79cd63e4fec79c6660efc9ef74ae05b6774fa99c 100644 (file)
@@ -35,6 +35,8 @@ struct MyClass {
 
 void duck(py::args, py::kwargs) {}
 
+template<class T, class U> void tenOverloads(T, U) {}
+
 PYBIND11_MODULE(pybind_signatures, m) {
     m.doc() = "pybind11 function signature extraction";
 
@@ -46,7 +48,18 @@ PYBIND11_MODULE(pybind_signatures, m) {
         .def("crazy_signature", &crazySignature, "Function that failed to get parsed")
         .def("overloaded", static_cast<std::string(*)(int)>(&overloaded), "Overloaded for ints")
         .def("overloaded", static_cast<bool(*)(float)>(&overloaded), "Overloaded for floats")
-        .def("duck", &duck, "A function taking args/kwargs directly");
+        .def("duck", &duck, "A function taking args/kwargs directly")
+
+        .def("tenOverloads", &tenOverloads<float, float>, "Ten overloads of a function")
+        .def("tenOverloads", &tenOverloads<int, float>, "Ten overloads of a function")
+        .def("tenOverloads", &tenOverloads<bool, float>, "Ten overloads of a function")
+        .def("tenOverloads", &tenOverloads<float, int>, "Ten overloads of a function")
+        .def("tenOverloads", &tenOverloads<int, int>, "Ten overloads of a function")
+        .def("tenOverloads", &tenOverloads<bool, int>, "Ten overloads of a function")
+        .def("tenOverloads", &tenOverloads<float, bool>, "Ten overloads of a function")
+        .def("tenOverloads", &tenOverloads<int, bool>, "Ten overloads of a function")
+        .def("tenOverloads", &tenOverloads<bool, bool>, "Ten overloads of a function")
+        .def("tenOverloads", &tenOverloads<std::string, std::string>, "Ten overloads of a function");
 
     py::class_<MyClass>(m, "MyClass", "My fun class!")
         .def_static("static_function", &MyClass::staticFunction, "Static method with positional-only args")
index b314bfcf562ca794983d88c34ad233e9fd9ca6a3..ddaa567492543e038c5bb60d94eb35adb1bec6ca 100644 (file)
               <span class="m-doc-wrap-bumper">def <a href="" class="m-doc-self">taking_a_list_returning_a_tuple</a>(</span><span class="m-doc-wrap">arg0: List[float]<span class="m-text m-dim">, /</span>) -&gt; Tuple[int, int, int]</span>
             </dt>
             <dd>Takes a list, returns a tuple</dd>
+            <dt>
+              <span class="m-doc-wrap-bumper">def <a href="" class="m-doc-self">tenOverloads</a>(</span><span class="m-doc-wrap">arg0: float,
+              arg1: float<span class="m-text m-dim">, /</span>)</span>
+            </dt>
+            <dd>Ten overloads of a function</dd>
+            <dt>
+              <span class="m-doc-wrap-bumper">def <a href="" class="m-doc-self">tenOverloads</a>(</span><span class="m-doc-wrap">arg0: int,
+              arg1: float<span class="m-text m-dim">, /</span>)</span>
+            </dt>
+            <dd>Ten overloads of a function</dd>
+            <dt>
+              <span class="m-doc-wrap-bumper">def <a href="" class="m-doc-self">tenOverloads</a>(</span><span class="m-doc-wrap">arg0: bool,
+              arg1: float<span class="m-text m-dim">, /</span>)</span>
+            </dt>
+            <dd>Ten overloads of a function</dd>
+            <dt>
+              <span class="m-doc-wrap-bumper">def <a href="" class="m-doc-self">tenOverloads</a>(</span><span class="m-doc-wrap">arg0: float,
+              arg1: int<span class="m-text m-dim">, /</span>)</span>
+            </dt>
+            <dd>Ten overloads of a function</dd>
+            <dt>
+              <span class="m-doc-wrap-bumper">def <a href="" class="m-doc-self">tenOverloads</a>(</span><span class="m-doc-wrap">arg0: int,
+              arg1: int<span class="m-text m-dim">, /</span>)</span>
+            </dt>
+            <dd>Ten overloads of a function</dd>
+            <dt>
+              <span class="m-doc-wrap-bumper">def <a href="" class="m-doc-self">tenOverloads</a>(</span><span class="m-doc-wrap">arg0: bool,
+              arg1: int<span class="m-text m-dim">, /</span>)</span>
+            </dt>
+            <dd>Ten overloads of a function</dd>
+            <dt>
+              <span class="m-doc-wrap-bumper">def <a href="" class="m-doc-self">tenOverloads</a>(</span><span class="m-doc-wrap">arg0: float,
+              arg1: bool<span class="m-text m-dim">, /</span>)</span>
+            </dt>
+            <dd>Ten overloads of a function</dd>
+            <dt>
+              <span class="m-doc-wrap-bumper">def <a href="" class="m-doc-self">tenOverloads</a>(</span><span class="m-doc-wrap">arg0: int,
+              arg1: bool<span class="m-text m-dim">, /</span>)</span>
+            </dt>
+            <dd>Ten overloads of a function</dd>
+            <dt>
+              <span class="m-doc-wrap-bumper">def <a href="" class="m-doc-self">tenOverloads</a>(</span><span class="m-doc-wrap">arg0: bool,
+              arg1: bool<span class="m-text m-dim">, /</span>)</span>
+            </dt>
+            <dd>Ten overloads of a function</dd>
+            <dt>
+              <span class="m-doc-wrap-bumper">def <a href="" class="m-doc-self">tenOverloads</a>(</span><span class="m-doc-wrap">arg0: str,
+              arg1: str<span class="m-text m-dim">, /</span>)</span>
+            </dt>
+            <dd>Ten overloads of a function</dd>
             <dt>
               <span class="m-doc-wrap-bumper">def <a href="" class="m-doc-self">void_function</a>(</span><span class="m-doc-wrap">arg0: int<span class="m-text m-dim">, /</span>)</span>
             </dt>