5#include <pybind11/pybind11.h>
12#include <ChimeraTK/VariantUserTypes.h>
14#include <pybind11/numpy.h>
27 template<
template<
typename>
class AccessorType>
28 static UserTypeTemplateVariantNoVoid<ArrayAccessor> createAccessor(ChimeraTK::DataType type,
Module* owner,
29 const std::string& name, std::string unit,
size_t nElements,
const std::string& description,
30 const std::unordered_set<std::string>& tags);
37 template<
template<
typename>
class AccessorType>
39 std::string unit,
size_t nElements,
const std::string& description,
40 const std::unordered_set<std::string>& tags = {})
41 :
_accessor(createAccessor<AccessorType>(type, owner, name, unit, nElements, description, tags)) {}
49 void setAndWrite(
const UserTypeTemplateVariantNoVoid<Vector>& vec);
53 void set(
const UserTypeTemplateVariantNoVoid<Vector>& vec);
55 py::object
get()
const;
57 py::object
getitem(
size_t index)
const;
59 void setitem(
size_t index,
const UserTypeVariantNoVoid& val);
61 void setslice(
const py::slice& slice,
const UserTypeVariantNoVoid& val);
63 static std::string
repr(py::object& acc);
67 py::object
getattr(
const std::string& name)
const {
return get().attr(name.c_str()); }
71 mutable UserTypeTemplateVariantNoVoid<ArrayAccessor>
_accessor;
Base class for ApplicationModule and DeviceModule, to have a common interface for these module types.
Helper class acting as a ArrayAccessor with a variant UserType.
py::object getitem(size_t index) const
void set(const UserTypeTemplateVariantNoVoid< Vector > &vec)
static void bind(py::module &mod)
void setAndWrite(const UserTypeTemplateVariantNoVoid< Vector > &vec)
void setslice(const py::slice &slice, const UserTypeVariantNoVoid &val)
static std::string repr(py::object &acc)
PyArrayAccessor(PyArrayAccessor &&)=default
void setitem(size_t index, const UserTypeVariantNoVoid &val)
UserTypeTemplateVariantNoVoid< ArrayAccessor > _accessor
py::buffer_info getBufferInfo()
py::object getattr(const std::string &name) const
PyArrayAccessor(AccessorTypeTag< AccessorType >, ChimeraTK::DataType type, Module *owner, const std::string &name, std::string unit, size_t nElements, const std::string &description, const std::unordered_set< std::string > &tags={})
Base class used for all objects in the Python world which can be owned by another object.
InvalidityTracer application module.
Convenience class for output array accessors (always UpdateMode::push)