File tree Expand file tree Collapse file tree 2 files changed +15
-1
lines changed
Expand file tree Collapse file tree 2 files changed +15
-1
lines changed Original file line number Diff line number Diff line change 1919#include " llvm/Support/raw_ostream.h"
2020
2121#include < string>
22+ #include < typeinfo>
2223#include < variant>
2324
2425template <>
@@ -344,7 +345,16 @@ class Sliceable {
344345
345346 // / Binds the indexing and length methods in the Python class.
346347 static void bind (nanobind::module_ &m) {
347- auto clazz = nanobind::class_<Derived>(m, Derived::pyClassName)
348+ const std::type_info &elemTy = typeid (ElementTy);
349+ PyObject *elemTyInfo = nanobind::detail::nb_type_lookup (&elemTy);
350+ assert (elemTyInfo &&
351+ " expected nb_type_lookup to succeed for Sliceable elemTy" );
352+ nanobind::handle elemTyName = nanobind::detail::nb_type_name (elemTyInfo);
353+ std::string sig = std::string (" class " ) + Derived::pyClassName +
354+ " (collections.abc.Sequence[" +
355+ nanobind::cast<std::string>(elemTyName) + " ])" ;
356+ auto clazz = nanobind::class_<Derived>(m, Derived::pyClassName,
357+ nanobind::sig (sig.c_str ()))
348358 .def (" __add__" , &Sliceable::dunderAdd);
349359 Derived::bindDerived (clazz);
350360
Original file line number Diff line number Diff line change @@ -43,6 +43,10 @@ def testTraverseOpRegionBlockIterators():
4343 )
4444 op = module .operation
4545 assert op .context is ctx
46+ # Note, __nb_signature__ stores the fully-qualified signature - the actual type stub emitted is
47+ # class RegionSequence(Sequence[Region])
48+ # CHECK: class RegionSequence(collections.abc.Sequence[mlir._mlir_libs._mlir.ir.Region])
49+ print (RegionSequence .__nb_signature__ )
4650 # Get the block using iterators off of the named collections.
4751 regions = list (op .regions [:])
4852 blocks = list (regions [0 ].blocks )
You can’t perform that action at this time.
0 commit comments