|
MLIR 24.0.0git
|
A CRTP base class for pseudo-containers willing to support Python-type slicing access on top of indexed access. More...
#include "mlir/Bindings/Python/NanobindUtils.h"
Classes | |
| struct | has_maybe_downcast |
| Trait to check if T provides a maybeDownCast method. More... | |
| struct | has_maybe_downcast< T, std::void_t< decltype(&T::maybeDownCast)> > |
Public Member Functions | |
| Sliceable (intptr_t startIndex, intptr_t length, intptr_t step) | |
| ElementTy | getElement (intptr_t index) |
| Returns the index-th element in the slice, supports negative indices. | |
| intptr_t | size () |
| Returns the size of slice. | |
| std::vector< ElementTy > | dunderAdd (Derived &other) |
| Returns a new vector (mapped to Python list) containing elements from two slices. | |
Static Public Member Functions | |
| static void | bind (nanobind::module_ &m) |
| Binds the indexing and length methods in the Python class. | |
| static void | bindDerived (ClassTy &) |
| Hook for derived classes willing to bind more methods. | |
Public Attributes | |
| intptr_t | startIndex |
| intptr_t | length |
| intptr_t | step |
Protected Types | |
| using | ClassTy = nanobind::class_<Derived> |
Protected Member Functions | |
| intptr_t | wrapIndex (intptr_t index) |
| Transforms index into a legal value to access the underlying sequence. | |
| intptr_t | linearizeIndex (intptr_t index) |
| Computes the linear index given the current slice properties. | |
| nanobind::typed< nanobind::object, ElementTy > | getItem (intptr_t index) |
| Returns the element at the given slice index. | |
| nanobind::object | getItemSlice (PyObject *slice) |
| Returns a new instance of the pseudo-container restricted to the given slice. | |
Static Protected Attributes | |
| static constexpr std::array< const char *, 0 > | typeParams = {} |
| Type parameter names for generic classes. | |
A CRTP base class for pseudo-containers willing to support Python-type slicing access on top of indexed access.
Calling bind on this class will define __len__ as well as __getitem__ with integer and slice arguments.
This is intended for pseudo-containers that can refer to arbitrary slices of underlying storage indexed by a single integer. Indexing those with an integer produces an instance of ElementTy. Indexing those with a slice produces a new instance of Derived, which can be sliced further.
A derived class must provide the following:
The getRawNumElements() and getRawElement(intptr_t) callbacks must not throw.
A derived class may additionally define:
Definition at line 336 of file NanobindUtils.h.
|
protected |
Definition at line 338 of file NanobindUtils.h.
|
inlineexplicit |
Definition at line 406 of file NanobindUtils.h.
|
inlinestatic |
Binds the indexing and length methods in the Python class.
Definition at line 452 of file NanobindUtils.h.
|
inlinestatic |
Hook for derived classes willing to bind more methods.
Definition at line 523 of file NanobindUtils.h.
|
inline |
Returns a new vector (mapped to Python list) containing elements from two slices.
The new vector is necessary because slices may not be contiguous or even come from the same original sequence.
Definition at line 429 of file NanobindUtils.h.
Referenced by mlir::Sliceable< PyOpResultList, PyOpResult >::bind().
|
inline |
Returns the index-th element in the slice, supports negative indices.
Throws if the index is out of bounds.
Definition at line 413 of file NanobindUtils.h.
Referenced by mlir::Sliceable< PyOpResultList, PyOpResult >::dunderAdd().
|
inlineprotected |
Returns the element at the given slice index.
Supports negative indices by taking elements in inverse order. Returns a nullptr object if out of bounds.
Definition at line 375 of file NanobindUtils.h.
|
inlineprotected |
Returns a new instance of the pseudo-container restricted to the given slice.
Returns a nullptr object on failure.
Definition at line 394 of file NanobindUtils.h.
|
inlineprotected |
Computes the linear index given the current slice properties.
Definition at line 355 of file NanobindUtils.h.
Referenced by mlir::Sliceable< PyOpResultList, PyOpResult >::getElement(), and mlir::Sliceable< PyOpResultList, PyOpResult >::getItem().
|
inline |
Returns the size of slice.
Definition at line 424 of file NanobindUtils.h.
|
inlineprotected |
Transforms index into a legal value to access the underlying sequence.
Returns <0 on failure.
Definition at line 346 of file NanobindUtils.h.
Referenced by mlir::Sliceable< PyOpResultList, PyOpResult >::getElement(), and mlir::Sliceable< PyOpResultList, PyOpResult >::getItem().
| intptr_t mlir::Sliceable< Derived, ElementTy >::length |
Definition at line 526 of file NanobindUtils.h.
| intptr_t mlir::Sliceable< Derived, ElementTy >::startIndex |
Definition at line 525 of file NanobindUtils.h.
| intptr_t mlir::Sliceable< Derived, ElementTy >::step |
Definition at line 527 of file NanobindUtils.h.
|
staticconstexprprotected |
Type parameter names for generic classes.
When non-empty, the Python class will be made generic with typing.Generic[...].
Definition at line 342 of file NanobindUtils.h.