4#include "../Array_bind.hpp"
8 template <rowsize _vec_size = 1, rowsize _row_max = _vec_size, rowsize _align = NoAlign>
11 return fmt::format(
"_{}_{}_{}",
17 template <rowsize _vec_size = 1, rowsize _row_max = _vec_size, rowsize _align = NoAlign>
20 return "ArrayEigenVector" + pybind11_ArrayEigenVector_name_appends<_vec_size, _row_max, _align>();
23 template <rowsize _vec_size = 1, rowsize _row_max = _vec_size, rowsize _align = NoAlign>
26 return "ArrayEigenVectorPair" + pybind11_ArrayEigenVector_name_appends<_vec_size, _row_max, _align>();
29 template <rowsize _vec_size = 1, rowsize _row_max = _vec_size, rowsize _align = NoAlign>
32 template <rowsize _vec_size = 1, rowsize _row_max = _vec_size, rowsize _align = NoAlign>
39 template <
class TArrayEigenVector = ArrayEigenVector<1>>
42 auto row = self[index_];
43 return py::memoryview::from_buffer<real>(
50 template <
class TArrayEigenVector = ArrayEigenVector<1>>
53 auto row_info = row.request(
false);
57 auto row_start_ptr =
reinterpret_cast<real *
>(row_info.ptr);
58 std::copy(row_start_ptr, row_start_ptr + count, self[index_].data());
64 template <rowsize _vec_size = 1, rowsize _row_max = _vec_size, rowsize _align = NoAlign>
65 tPy_ArrayEigenVector<_vec_size, _row_max, _align>
68 auto ParArray_ = pybind11_ParArray_get_class<real, _vec_size, _row_max, _align>(m);
69 return {m, pybind11_ArrayEigenVector_name<_vec_size, _row_max, _align>().c_str(), ParArray_};
73 template <rowsize _vec_size = 1, rowsize _row_max = _vec_size, rowsize _align = NoAlign>
74 tPy_ArrayEigenVector<_vec_size, _row_max, _align>
77 return {m.attr(pybind11_ArrayEigenVector_name<_vec_size, _row_max, _align>().c_str())};
80 template <rowsize _vec_size = 1, rowsize _row_max = _vec_size, rowsize _align = NoAlign>
85 auto ArrayEigenVector_ = pybind11_ArrayEigenVector_declare<_vec_size, _row_max, _align>(m);
92 .def(
"clone", [](TArrayEigenVector &self)
94 auto arr = std::make_shared<TArrayEigenVector>(self);
98 .def(py::init<const MPIInfo &>(), py::arg(
"nmpi"))
101 [](TArrayEigenVector &self,
index index_)
105 py::keep_alive<0, 1>())
108 [](TArrayEigenVector &self,
index index_, py::buffer row)
114 .def(
"to_device", [](TArrayEigenVector &self,
const std::string &backend)
116 .def(
"to_host", &TArrayEigenVector::to_host);
119 template <rowsize _vec_size = 1, rowsize _row_max = _vec_size, rowsize _align = NoAlign>
125 return pybind11_ArrayEigenVector_define<_vec_size, _row_max, _align>(m);
131 template <rowsize _vec_size = 1, rowsize _row_max = _vec_size, rowsize _align = NoAlign>
132 tPy_ArrayEigenVectorPair<_vec_size, _row_max, _align>
135 return {m, pybind11_ArrayEigenVectorPair_name<_vec_size, _row_max, _align>().c_str()};
138 template <rowsize _vec_size = 1, rowsize _row_max = _vec_size, rowsize _align = NoAlign>
139 tPy_ArrayEigenVector<_vec_size, _row_max, _align>
142 return {m.attr(pybind11_ArrayEigenVectorPair_name<_vec_size, _row_max, _align>().c_str())};
145 template <rowsize _vec_size = 1, rowsize _row_max = _vec_size, rowsize _align = NoAlign>
151 auto Pair_ = pybind11_ArrayEigenVectorPair_declare<_vec_size, _row_max, _align>(m);
158 pybind11_ArrayPairGenericBindBasics<TPair>(Pair_);
161 .def(
"RowSize", [](
const TPair &self,
index i)
162 {
return self.RowSize(i); }, py::arg(
"i"))
163 .def(
"RowSize", [](
const TPair &self)
164 {
return self.RowSize(); });
168 [](TPair &self,
index index_)
170 return self.runFunctionAppendedIndex(index_, [&](
auto &ar,
index iC)
173 py::keep_alive<0, 1>())
176 [](TPair &self,
index index_, py::buffer row)
178 return self.runFunctionAppendedIndex(index_, [&](
auto &ar,
index iC)
183 template <rowsize _vec_size = 1, rowsize _row_max = _vec_size, rowsize _align = NoAlign>
189 return pybind11_ArrayEigenVectorPair_define<_vec_size, _row_max, _align>(m);
195 template <
size_t N, std::array<
int, N> const &Arr,
size_t... Is>
198 (_pybind11_ArrayEigenVector_define_dispatch<Arr[Is]>(m), ...);
199 (_pybind11_ArrayEigenVectorPair_define_dispatch<Arr[Is]>(m), ...);
204 static constexpr auto seq = pybind11_arrayRowsizeInstantiationList;
206 seq.size(), seq>(m, std::make_index_sequence<seq.size()>{});
Eigen-vector array: each row is an Eigen::Map over contiguous real storage.
#define DNDS_assert(expr)
Debug-only assertion (compiled out when DNDS_NDEBUG is defined). Prints the expression + file/line + ...
ParArray<real, N> whose operator[] returns an Eigen::Map<Vector>.
the host side operators are provided as implemented
void pybind11_callBindArrayEigenVectors_rowsizes(py::module_ &m)
std::string pybind11_ArrayEigenVector_name_appends()
py::classh< T > py_class_ssp
tPy_ArrayEigenVector< _vec_size, _row_max, _align > pybind11_ArrayEigenVector_get_class(py::module_ &m)
std::tuple< ssize_t, char > py_buffer_get_contigious_size(const py::buffer_info &info)
py_class_ssp< ArrayEigenVectorPair< _vec_size, _row_max, _align > > tPy_ArrayEigenVectorPair
py_class_ssp< ArrayEigenVector< _vec_size, _row_max, _align > > tPy_ArrayEigenVector
void _pybind11_ArrayEigenVector_define_dispatch(py::module_ &m)
auto pybind11_ArrayEigenVector_getitem(TArrayEigenVector &self, index index_)
DeviceBackend device_backend_name_to_enum(std::string_view s)
Inverse of device_backend_name. Returns Unknown for unrecognised names.
auto pybind11_ArrayEigenVector_setitem(TArrayEigenVector &self, index index_, py::buffer row)
std::string RowSize_To_PySnippet(rowsize rs)
Encode a rowsize constant as a short Python-binding snippet: "<number>" for fixed,...
std::string pybind11_ArrayEigenVector_name()
tPy_ArrayEigenVector< _vec_size, _row_max, _align > pybind11_ArrayEigenVectorPair_get_class(py::module_ &m)
void _pybind11_ArrayEigenVectorPair_define_dispatch(py::module_ &m)
tPy_ArrayEigenVectorPair< _vec_size, _row_max, _align > pybind11_ArrayEigenVectorPair_declare(py::module_ &m)
void pybind11_ArrayEigenVector_define(py::module_ &m)
std::string pybind11_ArrayEigenVectorPair_name()
int64_t index
Global row / DOF index type (signed 64-bit; handles multi-billion-cell meshes).
tPy_ArrayEigenVector< _vec_size, _row_max, _align > pybind11_ArrayEigenVector_declare(py::module_ &m)
void pybind11_ArrayEigenVectorPair_define(py::module_ &m)
double real
Canonical floating-point scalar used throughout DNDSR (double precision).
std::string Align_To_PySnippet(rowsize al)
Encode an alignment value as a Python-binding snippet: "N" for NoAlign, the number otherwise.
void __pybind11_callBindArrayEigenVectors_rowsizes_sequence(py::module_ &m, std::index_sequence< Is... >)
void pybind11_bind_ArrayEigenVector_All(py::module_ &m)
DNDS_CONSTANT const rowsize UnInitRowsize
Sentinel "not initialised" rowsize value (= INT32_MIN).
Convenience bundle of a father, son, and attached ArrayTransformer.