1#ifndef TATOOINE_TRANSPOSED_TENSOR_H
2#define TATOOINE_TRANSPOSED_TENSOR_H
12template <static_tensor Tensor>
14 static auto constexpr rank() {
return std::decay_t<Tensor>::rank(); }
16 auto dims = std::decay_t<Tensor>::dimensions();
17 std::reverse(
begin(dims),
end(dims));
20 static auto constexpr dimension(std::size_t
const i) {
21 return std::decay_t<Tensor>::dimension(
rank() - i - 1);
26 using value_type =
typename std::decay_t<Tensor>::value_type;
36 auto constexpr at(
integral auto const... is)
const ->
decltype(
auto) {
38 [
this](
auto const... is) ->
decltype(
auto) {
44 auto constexpr at(
integral auto const... is) ->
decltype(
auto) {
46 [
this](
auto const... is) ->
decltype(
auto) {
84template <static_tensor T>
86template <static_tensor T>
88template <static_tensor T>
93template <dynamic_tensor Tensor>
98 using value_type =
typename std::decay_t<Tensor>::value_type;
118 auto constexpr at(
integral auto const... is)
const ->
decltype(
auto) {
120 [
this](
auto const... is) ->
decltype(
auto) {
126 auto constexpr at(
integral auto const... is) ->
decltype(
auto) {
128 [
this](
auto const... is) ->
decltype(
auto) {
163template <dynamic_tensor T>
165template <dynamic_tensor T>
167template <dynamic_tensor T>
174template <static_tensor T>
175requires (!transposed_tensor<T>)
181 return t.internal_tensor();
Definition: tensor_concepts.h:17
Definition: concepts.h:91
Definition: concepts.h:21
Definition: tensor_concepts.h:20
Definition: tensor_concepts.h:93
Definition: algorithm.h:6
auto constexpr invoke_reversed(auto &&f, auto &¶m0) -> decltype(auto)
Definition: invoke_reversed.h:9
auto begin(Range &&range)
Definition: iterator_facade.h:318
auto end(Range &&range)
Definition: iterator_facade.h:322
auto transposed(dynamic_tensor auto &&t)
Definition: transposed_tensor.h:170
static constexpr forward_tag forward
Definition: tags.h:9
Definition: transposed_tensor.h:94
transposed_dynamic_tensor(dynamic_tensor auto &&t)
Definition: transposed_tensor.h:102
auto constexpr at(integral auto const ... is) -> decltype(auto)
Definition: transposed_tensor.h:126
auto constexpr at(integral_range auto is) const -> decltype(auto)
Definition: transposed_tensor.h:142
auto constexpr operator()(integral_range auto is) -> decltype(auto)
Definition: transposed_tensor.h:157
auto constexpr operator()(integral auto const ... is) const -> decltype(auto)
Definition: transposed_tensor.h:134
auto constexpr operator()(integral auto const ... is) -> decltype(auto)
Definition: transposed_tensor.h:138
auto internal_tensor() -> auto &
Definition: transposed_tensor.h:105
auto constexpr operator()(integral_range auto is) const -> decltype(auto)
Definition: transposed_tensor.h:152
typename std::decay_t< Tensor >::value_type value_type
Definition: transposed_tensor.h:98
Tensor m_internal_tensor
Definition: transposed_tensor.h:100
auto constexpr at(integral_range auto is) -> decltype(auto)
Definition: transposed_tensor.h:147
auto constexpr rank() const
Definition: transposed_tensor.h:108
auto constexpr dimension(std::size_t const i) const
Definition: transposed_tensor.h:114
static auto constexpr is_transposed()
Definition: transposed_tensor.h:96
auto internal_tensor() const -> auto const &
Definition: transposed_tensor.h:106
static auto constexpr is_dynamic()
Definition: transposed_tensor.h:97
static auto constexpr is_tensor()
Definition: transposed_tensor.h:95
auto constexpr at(integral auto const ... is) const -> decltype(auto)
Definition: transposed_tensor.h:118
auto constexpr dimensions() const
Definition: transposed_tensor.h:109
Definition: transposed_tensor.h:13
typename std::decay_t< Tensor >::value_type value_type
Definition: transposed_tensor.h:26
auto constexpr operator()(integral auto const ... is) const -> decltype(auto)
Definition: transposed_tensor.h:52
auto constexpr operator()(integral_range auto is) -> decltype(auto)
Definition: transposed_tensor.h:75
static auto constexpr is_tensor()
Definition: transposed_tensor.h:23
auto constexpr operator()(integral auto const ... is) -> decltype(auto)
Definition: transposed_tensor.h:56
auto internal_tensor() -> auto &
Definition: transposed_tensor.h:81
auto constexpr at(integral auto const ... is) const -> decltype(auto)
Definition: transposed_tensor.h:36
static auto constexpr is_transposed()
Definition: transposed_tensor.h:25
static auto constexpr dimensions()
Definition: transposed_tensor.h:15
static auto constexpr rank()
Definition: transposed_tensor.h:14
auto internal_tensor() const -> auto const &
Definition: transposed_tensor.h:80
static auto constexpr dimension(std::size_t const i)
Definition: transposed_tensor.h:20
Tensor m_internal_tensor
Definition: transposed_tensor.h:29
auto constexpr at(integral_range auto is) const -> decltype(auto)
Definition: transposed_tensor.h:60
constexpr transposed_static_tensor(static_tensor auto &&t)
Definition: transposed_tensor.h:33
auto constexpr at(integral_range auto is) -> decltype(auto)
Definition: transposed_tensor.h:65
auto constexpr operator()(integral_range auto is) const -> decltype(auto)
Definition: transposed_tensor.h:70
auto constexpr at(integral auto const ... is) -> decltype(auto)
Definition: transposed_tensor.h:44
static auto constexpr is_static()
Definition: transposed_tensor.h:24