4#include "../Array_bind.hpp"
13 return fmt::format(
"_{}x{}_{}x{}_{}",
25 return "ArrayEigenMatrix" + pybind11_ArrayEigenMatrix_name_appends<_mat_ni, _mat_nj, _mat_ni_max, _mat_nj_max, _align>();
32 return "ArrayEigenMatrixPair" + pybind11_ArrayEigenMatrix_name_appends<_mat_ni, _mat_nj, _mat_ni_max, _mat_nj_max, _align>();
46 template <
class TArrayEigenMatrix = ArrayEigenMatrix<3, 3>>
50 auto mat = self[index_];
51 return py::memoryview::from_buffer<tElem>(
53 {mat.rows(), mat.cols()},
54 {sizeof(tElem) * mat.rowStride(), sizeof(tElem) * mat.colStride()},
58 template <
class TArrayEigenMatrix = ArrayEigenMatrix<3, 3>>
62 auto row_info = row.request(
false);
63 DNDS_assert(row_info.item_type_is_equivalent_to<tElem>());
65 auto mat = self[index_];
70 auto row_start_ptr =
reinterpret_cast<tElem *
>(row_info.ptr);
74 auto row_mat_map = Eigen::Map<
75 const Eigen::Matrix<tElem, Eigen::Dynamic, Eigen::Dynamic, Eigen::DontAlign | Eigen::ColMajor>,
77 Eigen::Stride<Eigen::Dynamic, Eigen::Dynamic>>(
81 Eigen::Stride<Eigen::Dynamic, Eigen::Dynamic>(row_info.strides[1] /
sizeof(tElem) , row_info.strides[0] /
sizeof(tElem) ));
90 tPy_ArrayEigenMatrix<_mat_ni, _mat_nj, _mat_ni_max, _mat_nj_max, _align>
94 static constexpr rowsize rs = TArrayEigenMatrix::t_base::rs;
95 static constexpr rowsize rm = TArrayEigenMatrix::t_base::rm;
96 static constexpr rowsize al = TArrayEigenMatrix::t_base::al;
97 auto ParArray_ = pybind11_ParArray_get_class<real, rs, rm, al>(m);
98 return {m, pybind11_ArrayEigenMatrix_name<_mat_ni, _mat_nj, _mat_ni_max, _mat_nj_max, _align>().c_str(), ParArray_};
103 tPy_ArrayEigenMatrix<_mat_ni, _mat_nj, _mat_ni_max, _mat_nj_max, _align>
106 return {m.attr(pybind11_ArrayEigenMatrix_name<_mat_ni, _mat_nj, _mat_ni_max, _mat_nj_max, _align>().c_str())};
115 auto ArrayEigenMatrix_ = pybind11_ArrayEigenMatrix_declare<_mat_ni, _mat_nj, _mat_ni_max, _mat_nj_max, _align>(m);
124 .def(py::init<const MPIInfo &>(), py::arg(
"nmpi"))
126 {
return self.Resize(nSize, md, nd); }, py::arg(
"size"), py::arg(
"m_size"), py::arg(
"n_size"));
129 .def(
"clone", [](TArrayEigenMatrix &self)
131 auto arr = std::make_shared<TArrayEigenMatrix>(self);
135 .def(
"MatRowSize", [](
const TArrayEigenMatrix &self,
index iMat)
136 {
return self.MatRowSize(iMat); }, py::arg(
"iMat") = 0)
137 .def(
"MatColSize", [](
const TArrayEigenMatrix &self,
index iMat)
138 {
return self.MatColSize(iMat); }, py::arg(
"iMat") = 0);
142 {
return self.ResizeMat(iMat, nm, nn); }, py::arg(
"iMat"), py::arg(
"nm"), py::arg(
"nn"))
144 {
return self.ResizeRow(iMat, nm, nn); }, py::arg(
"iMat"), py::arg(
"nm"), py::arg(
"nn"));
149 [](TArrayEigenMatrix &self,
index index_)
153 py::keep_alive<0, 1>())
156 [](TArrayEigenMatrix &self,
index index_, py::buffer row)
162 .def(
"to_device", [](TArrayEigenMatrix &self,
const std::string &backend)
164 .def(
"to_host", &TArrayEigenMatrix::to_host);
175 return pybind11_ArrayEigenMatrix_define<_mat_ni, _mat_nj, _mat_ni_max, _mat_nj_max, _align>(m);
183 tPy_ArrayEigenMatrixPair<_mat_ni, _mat_nj, _mat_ni_max, _mat_nj_max, _align>
186 return {m, pybind11_ArrayEigenMatrixPair_name<_mat_ni, _mat_nj, _mat_ni_max, _mat_nj_max, _align>().c_str()};
191 tPy_ArrayEigenMatrixPair<_mat_ni, _mat_nj, _mat_ni_max, _mat_nj_max, _align>
194 return {m.attr(pybind11_ArrayEigenMatrixPair_name<_mat_ni, _mat_nj, _mat_ni_max, _mat_nj_max, _align>().c_str())};
202 auto Pair_ = pybind11_ArrayEigenMatrixPair_declare<_mat_ni, _mat_nj, _mat_ni_max, _mat_nj_max, _align>(m);
209 pybind11_ArrayPairGenericBindBasics<TPair>(Pair_);
212 .def(
"RowSize", [](
const TPair &self,
index i)
213 {
return self.RowSize(i); }, py::arg(
"i"))
214 .def(
"RowSize", [](
const TPair &self)
215 {
return self.RowSize(); });
219 [](TPair &self,
index index_)
221 return self.runFunctionAppendedIndex(index_, [&](
auto &ar,
index iC)
224 py::keep_alive<0, 1>())
227 [](TPair &self,
index index_, py::buffer row)
229 return self.runFunctionAppendedIndex(index_, [&](
auto &ar,
index iC)
242 return pybind11_ArrayEigenMatrixPair_define<_mat_ni, _mat_nj, _mat_ni_max, _mat_nj_max, _align>(m);
248 template <rowsize mat_n,
size_t N, std::array<
int, N> const &Arr,
size_t... Is>
251 (_pybind11_ArrayEigenMatrix_define_dispatch<Arr[Is], mat_n>(m), ...);
252 (_pybind11_ArrayEigenMatrixPair_define_dispatch<Arr[Is], mat_n>(m), ...);
255 template <rowsize mat_n>
258 static constexpr auto seq = pybind11_arrayRowsizeInstantiationList;
262 seq>(m, std::make_index_sequence<seq.size()>{});
Eigen-matrix array: each row is an Eigen::Map<Matrix> over contiguous real storage.
#define DNDS_assert_info(expr, info)
Debug-only assertion with an extra std::string info message.
#define DNDS_assert(expr)
Debug-only assertion (compiled out when DNDS_NDEBUG is defined). Prints the expression + file/line + ...
ParArray<real> whose operator[] returns an Eigen::Map<Matrix<real, Ni, Nj>>.
the host side operators are provided as implemented
template void pybind11_callBindArrayEigenMatrixs_rowsizes< 1 >(py::module_ &m)
template void pybind11_callBindArrayEigenMatrixs_rowsizes< DynamicSize >(py::module_ &m)
void _pybind11_ArrayEigenMatrixPair_define_dispatch(py::module_ &m)
py_class_ssp< ArrayEigenMatrixPair< _mat_ni, _mat_nj, _mat_ni_max, _mat_nj_max, _align > > tPy_ArrayEigenMatrixPair
void pybind11_callBindArrayEigenMatrixs_rowsizes(py::module_ &m)
void _pybind11_ArrayEigenMatrix_define_dispatch(py::module_ &m)
template void pybind11_callBindArrayEigenMatrixs_rowsizes< 6 >(py::module_ &m)
template void pybind11_callBindArrayEigenMatrixs_rowsizes< 8 >(py::module_ &m)
std::string pybind11_ArrayEigenMatrix_name()
py::classh< T > py_class_ssp
DNDS_CONSTANT const rowsize NoAlign
Alignment flag: no padding applied to rows (the only currently-supported value).
void pybind11_ArrayEigenMatrixPair_define(py::module_ &m)
int32_t rowsize
Row-width / per-row element-count type (signed 32-bit).
tPy_ArrayEigenMatrixPair< _mat_ni, _mat_nj, _mat_ni_max, _mat_nj_max, _align > pybind11_ArrayEigenMatrixPair_declare(py::module_ &m)
std::string pybind11_ArrayEigenMatrix_name_appends()
DeviceBackend device_backend_name_to_enum(std::string_view s)
Inverse of device_backend_name. Returns Unknown for unrecognised names.
std::string pybind11_ArrayEigenMatrixPair_name()
template void pybind11_callBindArrayEigenMatrixs_rowsizes< 4 >(py::module_ &m)
std::string RowSize_To_PySnippet(rowsize rs)
Encode a rowsize constant as a short Python-binding snippet: "<number>" for fixed,...
auto pybind11_ArrayEigenMatrix_setitem(TArrayEigenMatrix &self, index index_, py::buffer row)
template void pybind11_callBindArrayEigenMatrixs_rowsizes< 5 >(py::module_ &m)
int64_t index
Global row / DOF index type (signed 64-bit; handles multi-billion-cell meshes).
auto pybind11_ArrayEigenMatrix_getitem(TArrayEigenMatrix &self, index index_)
void __pybind11_callBindArrayEigenMatrixs_rowsizes_sequence(py::module_ &m, std::index_sequence< Is... >)
template void pybind11_callBindArrayEigenMatrixs_rowsizes< 7 >(py::module_ &m)
double real
Canonical floating-point scalar used throughout DNDSR (double precision).
void pybind11_ArrayEigenMatrix_define(py::module_ &m)
template void pybind11_callBindArrayEigenMatrixs_rowsizes< NonUniformSize >(py::module_ &m)
template void pybind11_callBindArrayEigenMatrixs_rowsizes< 2 >(py::module_ &m)
py_class_ssp< ArrayEigenMatrix< _mat_ni, _mat_nj, _mat_ni_max, _mat_nj_max, _align > > tPy_ArrayEigenMatrix
std::string Align_To_PySnippet(rowsize al)
Encode an alignment value as a Python-binding snippet: "N" for NoAlign, the number otherwise.
tPy_ArrayEigenMatrixPair< _mat_ni, _mat_nj, _mat_ni_max, _mat_nj_max, _align > pybind11_ArrayEigenMatrixPair_get_class(py::module_ &m)
template void pybind11_callBindArrayEigenMatrixs_rowsizes< 3 >(py::module_ &m)
tPy_ArrayEigenMatrix< _mat_ni, _mat_nj, _mat_ni_max, _mat_nj_max, _align > pybind11_ArrayEigenMatrix_declare(py::module_ &m)
void pybind11_bind_ArrayEigenMatrix_All(py::module_ &m)
tPy_ArrayEigenMatrix< _mat_ni, _mat_nj, _mat_ni_max, _mat_nj_max, _align > pybind11_ArrayEigenMatrix_get_class(py::module_ &m)
DNDS_CONSTANT const rowsize UnInitRowsize
Sentinel "not initialised" rowsize value (= INT32_MIN).
Convenience bundle of a father, son, and attached ArrayTransformer.