18#include <initializer_list>
23#include <torch/torch.h>
28template <std::
size_t N>
using TensorArray = std::array<torch::Tensor, N>;
39template <
typename...
Ts>
46template <
typename...
Ts>
53template <
typename...
Ts,
typename T>
56 std::initializer_list<Ts> &&...
lists) {
58 (std::is_same_v<T, Ts> && ...),
59 "Type mismatch between Options<T> and std::initializer_list<Ts>");
61 torch::IntArrayRef{-1}, options)...};
64template <
typename...
Ts,
typename T>
67 std::initializer_list<Ts> &&...
lists) {
69 (std::is_same_v<T, Ts> && ...),
70 "Type mismatch between Options<T> and std::initializer_list<Ts>");
79template <
typename T, std::
size_t N>
84template <
typename T, std::
size_t N>
103template <
typename T, std::size_t
N, std::size_t...
Is>
105 std::index_sequence<Is...>) {
106 return std::array<torch::TensorAccessor<T, N>,
sizeof...(Is)>{
110template <
typename T, std::size_t
N, std::size_t...
Is>
112 c10::DeviceType
deviceType, std::index_sequence<Is...>) {
115 std::array<torch::TensorAccessor<T, N>,
sizeof...(Is)>
accessors{
120template <
typename T, std::size_t
N,
size_t...
Dims, std::size_t...
Is>
122 c10::DeviceType
deviceType, std::index_sequence<Is...>) {
125 std::array<torch::TensorAccessor<T, N>,
sizeof...(Is)>
accessors{
135template <
typename T, std::
size_t N, std::
size_t M>
137 return detail::to_tensorAccessor<T, N>(
tensorArray,
138 std::make_index_sequence<M>());
141template <
typename T, std::
size_t N, std::
size_t M>
145 std::make_index_sequence<M>());
148template <
typename T, std::size_t
N, std::size_t...
Dims>
159#define TENSORARRAY_FORALL(obj, func, ...) \
160 []<std::size_t N>(const ::iganet::utils::TensorArray<N> &tensorArray) { \
161 ::iganet::utils::TensorArray<N> result; \
162 for (std::size_t i = 0; i < N; ++i) \
163 result[i] = tensorArray[i].func(__VA_ARGS__); \
170template <std::
size_t N>
172 const std::array<torch::Tensor, N> &obj) {
173 at::optional<std::string> name_ = c10::demangle(
typeid(obj).name());
177 if (name_->find(
"struct ") == 0) {
178 name_->erase(name_->begin(), name_->begin() + 7);
179 }
else if (name_->find(
"class ") == 0) {
180 name_->erase(name_->begin(), name_->begin() + 6);
185#pragma nv_diag_suppress 186
188 os << *name_ <<
"(\n";
189 for (std::size_t i = 0; i < N; ++i) {
190 os << obj[i] <<
"\n";
193 os <<
"[ " << obj[i].options() <<
" ]\n";
197#pragma nv_diag_default 186
The Options class handles the automated determination of dtype from the template argument and the sel...
Definition options.hpp:90
Container utility functions.
auto to_tensorAccessor(const TensorArray< sizeof...(Is)> &tensorArray, std::index_sequence< Is... >)
Converts an std::array of torch::Tensor objects to an array of torch::TensorAccessor objects.
Definition tensorarray.hpp:104
TensorArray< 4 > TensorArray4
Definition tensorarray.hpp:34
std::array< torch::Tensor, N > TensorArray
Definition tensorarray.hpp:28
constexpr TensorArray< sizeof...(Ts)> to_tensorArray(std::initializer_list< Ts > &&...lists)
Converts a set of std::initializer_list objects to a TensorArray object.
Definition tensorarray.hpp:41
auto to_tensor(const std::array< T, N > &array, torch::IntArrayRef sizes=torch::IntArrayRef{-1}, const iganet::Options< T > &options=iganet::Options< T >{})
Converts an std::array to torch::Tensor.
Definition container.hpp:60
TensorArray< 3 > TensorArray3
Definition tensorarray.hpp:33
TensorArray< 0 > TensorArray0
Definition tensorarray.hpp:30
TensorArray< 1 > TensorArray1
Definition tensorarray.hpp:31
auto to_tensorAccessor(const torch::Tensor &tensor)
Converts a torch::Tensor object to a torch::TensorAccessor object.
Definition tensorarray.hpp:80
TensorArray< 2 > TensorArray2
Definition tensorarray.hpp:32
Forward declaration of BlockTensor.
Definition blocktensor.hpp:46
Definition boundary.hpp:22
bool is_verbose(std::ostream &os)
Definition core.hpp:831
constexpr bool is_SplineType_v
Alias to the value of is_SplineType.
Definition bspline.hpp:3243
std::ostream & operator<<(std::ostream &os, const std::array< T, N > &obj)
Print (as string) an std::array of generic objects.
Definition core.hpp:842