1#ifndef TATOOINE_COMPLEX_TENSOR_VIEWS_H
2#define TATOOINE_COMPLEX_TENSOR_VIEWS_H
8template <
typename Tensor,
typename T,
size_t... Dims>
10 :
base_tensor<const_imag_complex_tensor<Tensor, T, Dims...>, T, Dims...> {
11 static_assert(std::is_same_v<typename Tensor::value_type, std::complex<T>>);
27 constexpr decltype(
auto)
operator()(
integral auto const... is)
const {
28 static_assert(
sizeof...(is) ==
rank());
32 constexpr decltype(
auto)
at(
integral auto const... is)
const {
33 static_assert(
sizeof...(is) ==
rank());
42template <
typename Tensor,
typename T,
size_t... Dims>
44 :
base_tensor<imag_complex_tensor<Tensor, T, Dims...>, T, Dims...> {
45 static_assert(std::is_same_v<typename Tensor::value_type, std::complex<T>>);
61 static_assert(
sizeof...(is) ==
rank());
66 static_assert(
sizeof...(is) ==
rank());
70 constexpr auto at(
integral auto const... is)
const ->
decltype(
auto) {
71 static_assert(
sizeof...(is) ==
rank());
75 constexpr auto at(
integral auto const... is) ->
decltype(
auto) {
76 static_assert(
sizeof...(is) ==
rank());
85template <
typename Tensor,
typename T,
size_t... Dims>
90template <
typename Tensor,
typename T,
size_t... Dims>
96template <
typename Tensor,
typename T,
size_t... Dims>
98 :
base_tensor<const_real_complex_tensor<Tensor, T, Dims...>, T, Dims...> {
99 static_assert(std::is_same_v<typename Tensor::value_type, std::complex<T>>);
115 static_assert(
sizeof...(is) ==
rank());
119 constexpr auto at(
integral auto const... is)
const ->
decltype(
auto) {
120 static_assert(
sizeof...(is) ==
rank());
128template <
typename Tensor,
typename T,
size_t... Dims>
130 :
base_tensor<real_complex_tensor<Tensor, T, Dims...>, T, Dims...> {
131 static_assert(std::is_same_v<typename Tensor::value_type, std::complex<T>>);
147 static_assert(
sizeof...(is) ==
rank());
152 static_assert(
sizeof...(is) ==
rank());
156 constexpr auto at(
integral auto const... is)
const ->
decltype(
auto) {
157 static_assert(
sizeof...(is) ==
rank());
161 constexpr auto at(
integral auto const... is) ->
decltype(
auto) {
162 static_assert(
sizeof...(is) ==
rank());
172template <
typename Tensor,
typename T,
size_t... Dims>
177template <
typename Tensor,
typename T,
size_t... Dims>
Definition: concepts.h:21
Definition: algorithm.h:6
auto real(base_tensor< Tensor, std::complex< T >, Dims... > const &t)
Definition: complex_tensor_views.h:173
tensor< real_number, Dimensions... > Tensor
Definition: tensor.h:184
auto imag(base_tensor< Tensor, std::complex< T >, Dims... > const &tensor)
Definition: complex_tensor_views.h:86
Definition: base_tensor.h:23
static auto constexpr rank()
Definition: base_tensor.h:41
Definition: complex_tensor_views.h:10
static auto constexpr rank()
Definition: base_tensor.h:41
constexpr const_imag_complex_tensor(base_tensor< Tensor, std::complex< T >, Dims... > const &internal_tensor)
Definition: complex_tensor_views.h:22
const_imag_complex_tensor< Tensor, T, Dims... > this_type
Definition: complex_tensor_views.h:12
Tensor const & m_internal_tensor
Definition: complex_tensor_views.h:18
auto internal_tensor() const -> auto const &
Definition: complex_tensor_views.h:38
constexpr decltype(auto) at(integral auto const ... is) const
Definition: complex_tensor_views.h:32
Definition: complex_tensor_views.h:98
static auto constexpr rank()
Definition: base_tensor.h:41
Tensor const & m_internal_tensor
Definition: complex_tensor_views.h:105
const_real_complex_tensor(base_tensor< Tensor, std::complex< T >, Dims... > const &internal_tensor)
Definition: complex_tensor_views.h:109
constexpr auto operator()(integral auto const ... is) const -> decltype(auto)
Definition: complex_tensor_views.h:114
const_real_complex_tensor< Tensor, T, Dims... > this_type
Definition: complex_tensor_views.h:100
auto internal_tensor() const -> auto const &
Definition: complex_tensor_views.h:124
constexpr auto at(integral auto const ... is) const -> decltype(auto)
Definition: complex_tensor_views.h:119
constexpr auto as_derived() -> derived_type &
returns casted as_derived data
Definition: crtp.h:11
Definition: complex_tensor_views.h:44
static auto constexpr rank()
Definition: base_tensor.h:41
constexpr auto at(integral auto const ... is) -> decltype(auto)
Definition: complex_tensor_views.h:75
constexpr auto at(integral auto const ... is) const -> decltype(auto)
Definition: complex_tensor_views.h:70
constexpr auto operator()(integral auto const ... is) const -> decltype(auto)
Definition: complex_tensor_views.h:60
imag_complex_tensor< Tensor, T, Dims... > this_type
Definition: complex_tensor_views.h:46
Tensor & m_internal_tensor
Definition: complex_tensor_views.h:51
constexpr imag_complex_tensor(base_tensor< Tensor, std::complex< T >, Dims... > &internal_tensor)
Definition: complex_tensor_views.h:55
constexpr auto operator()(integral auto const ... is) -> decltype(auto)
Definition: complex_tensor_views.h:65
auto internal_tensor() const -> auto const &
Definition: complex_tensor_views.h:81
auto internal_tensor() -> auto &
Definition: complex_tensor_views.h:80
Definition: complex_tensor_views.h:130
constexpr auto at(integral auto const ... is) -> decltype(auto)
Definition: complex_tensor_views.h:161
static auto constexpr rank()
Definition: base_tensor.h:41
real_complex_tensor< Tensor, T, Dims... > this_type
Definition: complex_tensor_views.h:132
constexpr auto operator()(integral auto const ... is) -> decltype(auto)
Definition: complex_tensor_views.h:151
auto internal_tensor() -> auto &
Definition: complex_tensor_views.h:167
constexpr auto at(integral auto const ... is) const -> decltype(auto)
Definition: complex_tensor_views.h:156
Tensor & m_internal_tensor
Definition: complex_tensor_views.h:137
real_complex_tensor(base_tensor< Tensor, std::complex< T >, Dims... > &internal_tensor)
Definition: complex_tensor_views.h:141
constexpr auto operator()(integral auto const ... is) const -> decltype(auto)
Definition: complex_tensor_views.h:146
auto internal_tensor() const -> auto const &
Definition: complex_tensor_views.h:168