5#include <pybind11/pybind11.h>
8#include <ChimeraTK/TransferElementAbstractor.h>
20 virtual const TransferElementAbstractor&
getTE()
const = 0;
21 virtual TransferElementAbstractor&
getTE() = 0;
32 template<
class DerivedAccessor>
36 py::gil_scoped_release release;
37 visit([](
auto& acc) { acc.read(); });
40 py::gil_scoped_release release;
41 return visit([&](
auto& acc) {
return acc.readNonBlocking(); });
44 py::gil_scoped_release release;
45 return visit([&](
auto& acc) {
return acc.readLatest(); });
48 py::gil_scoped_release release;
49 visit([](
auto& acc) { acc.write(); });
52 py::gil_scoped_release release;
53 visit([](
auto& acc) { acc.writeDestructively(); });
69 [[nodiscard]]
const TransferElementAbstractor&
getTE() const final {
70 const auto* self =
static_cast<const DerivedAccessor*
>(
this);
71 TransferElementAbstractor* te;
72 std::visit([&](
auto& acc) { te = &acc; }, self->_accessor);
77 [[nodiscard]] TransferElementAbstractor&
getTE() final {
78 const auto* self =
static_cast<const DerivedAccessor*
>(
this);
79 TransferElementAbstractor* te;
80 std::visit([&](
auto& acc) { te = &acc; }, self->_accessor);
85 template<
typename CALLABLE>
87 const auto* self =
static_cast<const DerivedAccessor*
>(
this);
88 return std::visit(fn, self->_accessor);
94 template<
template<
typename>
class AccessorType>
static const std::set< std::string > specialUnaryFunctionsToEmulateNumeric
virtual ~PyTransferElementBase()=default
static void bind(py::module &mod)
virtual const TransferElementAbstractor & getTE() const =0
static const std::set< std::string > specialFunctionsToEmulateNumeric
virtual TransferElementAbstractor & getTE()=0
auto getDescription() const
const TransferElementAbstractor & getTE() const final
auto visit(CALLABLE fn) const
auto getVersionNumber() const
DataType getValueType() const
void writeDestructively()
auto dataValidity() const
TransferElementAbstractor & getTE() final
InvalidityTracer application module.