21#include <pybind11/numpy.h>
22#include <pybind11/pybind11.h>
31 static py::array_t<T> convert(std::vector<T> vec) {
35 py::array_t<T> ret({len});
36 auto r = ret.mutable_unchecked();
38 for (
u32 i = 0; i < len; i++) {
42 return std::move(ret);
49 static py::array_t<T> convert(std::vector<sycl::vec<T, 2>> vec) {
53 py::array_t<T> ret({len, 2U});
54 auto r = ret.mutable_unchecked();
56 for (
u32 i = 0; i < len; i++) {
60 return std::move(ret);
67 static py::array_t<T> convert(std::vector<sycl::vec<T, 3>> vec) {
71 py::array_t<T> ret({len, 3U});
72 auto r = ret.mutable_unchecked();
74 for (
u32 i = 0; i < len; i++) {
79 return std::move(ret);
86 static py::array_t<T> convert(std::vector<sycl::vec<T, 4>> vec) {
90 py::array_t<T> ret({len, 4U});
91 auto r = ret.mutable_unchecked();
93 for (
u32 i = 0; i < len; i++) {
99 return std::move(ret);
106 static py::array_t<T> convert(std::vector<sycl::vec<T, 8>> vec) {
108 u32 len = vec.size();
110 py::array_t<T> ret({len, 8U});
111 auto r = ret.mutable_unchecked();
113 for (
u32 i = 0; i < len; i++) {
114 r(i, 0) = vec[i].s0();
115 r(i, 1) = vec[i].s1();
116 r(i, 2) = vec[i].s2();
117 r(i, 3) = vec[i].s3();
118 r(i, 4) = vec[i].s4();
119 r(i, 5) = vec[i].s5();
120 r(i, 6) = vec[i].s6();
121 r(i, 7) = vec[i].s7();
123 return std::move(ret);
130 static py::array_t<T> convert(std::vector<sycl::vec<T, 16>> vec) {
132 u32 len = vec.size();
134 py::array_t<T> ret({len, 16U});
135 auto r = ret.mutable_unchecked();
137 for (
u32 i = 0; i < len; i++) {
138 r(i, 0) = vec[i].s0();
139 r(i, 1) = vec[i].s1();
140 r(i, 2) = vec[i].s2();
141 r(i, 3) = vec[i].s3();
142 r(i, 4) = vec[i].s4();
143 r(i, 5) = vec[i].s5();
144 r(i, 6) = vec[i].s6();
145 r(i, 7) = vec[i].s7();
146 r(i, 8) = vec[i].s8();
147 r(i, 9) = vec[i].s9();
148 r(i, 10) = vec[i].sA();
149 r(i, 11) = vec[i].sB();
150 r(i, 12) = vec[i].sC();
151 r(i, 13) = vec[i].sD();
152 r(i, 14) = vec[i].sE();
153 r(i, 15) = vec[i].sF();
156 return std::move(ret);
163 std::vector<std::reference_wrapper<shamrock::patch::PatchDataLayer>> ref_lst,
168 auto appender = [&](
auto &field) {
169 if (field.get_name() == key) {
171 logger::debug_ln(
"PatchDataToPy",
"appending field", key);
174 auto acc = field.get_buf().copy_to_stdvec();
175 u32 len = field.get_val_cnt();
177 for (
u32 i = 0; i < len; i++) {
178 vec.push_back(acc[i]);
184 for (
auto &pdat_ref : ref_lst) {
185 auto &pdat = pdat_ref.get();
186 if (pdat.get_obj_cnt() > 0) {
187 pdat.for_each_field<T>([&](
auto &field) {
194 auto arr = VecToNumpy<T>::convert(vec);
196 logger::debug_ln(
"PatchDataToPy",
"adding -> ", key);
198 if (dic_out.contains(key.c_str())) {
201 dic_out[key.c_str()] = arr;
209 std::vector<std::unique_ptr<shamrock::patch::PatchDataLayer>> &lst,
212 std::vector<std::reference_wrapper<shamrock::patch::PatchDataLayer>> ref_lst;
213 for (
auto &pdat : lst) {
215 ref_lst.push_back(*pdat);
219 append_to_map<T>(key, ref_lst, dic_out);
225 std::reference_wrapper<shamrock::patch::PatchDataLayer> ref_pdat = pdat;
229 for (
auto fname : pdat.pdl().get_field_names()) {
230 append_to_map<f32>(fname, {ref_pdat}, dic_out);
231 append_to_map<f32_2>(fname, {ref_pdat}, dic_out);
232 append_to_map<f32_3>(fname, {ref_pdat}, dic_out);
233 append_to_map<f32_4>(fname, {ref_pdat}, dic_out);
234 append_to_map<f32_8>(fname, {ref_pdat}, dic_out);
235 append_to_map<f32_16>(fname, {ref_pdat}, dic_out);
236 append_to_map<f64>(fname, {ref_pdat}, dic_out);
237 append_to_map<f64_2>(fname, {ref_pdat}, dic_out);
238 append_to_map<f64_3>(fname, {ref_pdat}, dic_out);
239 append_to_map<f64_4>(fname, {ref_pdat}, dic_out);
240 append_to_map<f64_8>(fname, {ref_pdat}, dic_out);
241 append_to_map<f64_16>(fname, {ref_pdat}, dic_out);
242 append_to_map<u32>(fname, {ref_pdat}, dic_out);
243 append_to_map<u64>(fname, {ref_pdat}, dic_out);
244 append_to_map<u32_3>(fname, {ref_pdat}, dic_out);
245 append_to_map<u64_3>(fname, {ref_pdat}, dic_out);
246 append_to_map<i64_3>(fname, {ref_pdat}, dic_out);
std::uint32_t u32
32 bit unsigned integer
PatchDataLayer container class, the layout is described in patchdata_layout.
void throw_with_loc(std::string message, SourceLocation loc=SourceLocation{})
Throw an exception and append the source location to it.
namespace for the main framework
Pybind11 include and definitions.