pRC
multi-purpose Tensor Train library for C++
Loading...
Searching...
No Matches
from_diagonal.hpp
Go to the documentation of this file.
1// SPDX-License-Identifier: BSD-2-Clause
2
3#ifndef pRC_CORE_TENSOR_OPERATOR_FUNCTIONS_FROM_DIAGONAL_H
4#define pRC_CORE_TENSOR_OPERATOR_FUNCTIONS_FROM_DIAGONAL_H
5
9
10namespace pRC
11{
12 template<Size... Ds>
13 struct FromDiagonal;
14
30 template<Size... Ds, class X, class R = RemoveReference<X>,
32 If<IsSatisfied<(isEven(sizeof...(Ds)))>> = 0,
33 If<IsSatisfied<(sizeof...(Ds) / 2 == typename R::Dimension())>> = 0,
34 If<IsSatisfied<(cut<2, 0>(Sizes<Ds...>()) >= typename R::Sizes())>> = 0,
35 If<IsSatisfied<(cut<2, 1>(Sizes<Ds...>()) >= typename R::Sizes())>> = 0>
36 static inline constexpr auto fromDiagonal(X &&a)
37 {
39 return TensorViews::FromDiagonal<typename R::Type, Sizes<Ds...>, V>(
40 view(forward<X>(a)));
41 }
42
61 template<Size... Ds, class X, class R = RemoveReference<X>,
63 If<IsInvocable<FromDiagonal<Ds...>, X &>> = 0>
64 static inline constexpr auto fromDiagonal(X &&a)
65 {
66 return eval(fromDiagonal<Ds...>(a));
67 }
68
82 template<class X, class R = RemoveReference<X>, If<IsTensorish<R>> = 0>
83 static inline constexpr auto fromDiagonal(X &&a)
84 {
85 return expand(makeSeries<Index, typename R::Dimension{}>(),
86 [&a](auto const... seq)
87 {
88 return fromDiagonal<R::size(seq)..., R::size(seq)...>(
89 forward<X>(a));
90 });
91 }
92}
93#endif // pRC_CORE_TENSOR_OPERATOR_FUNCTIONS_FROM_DIAGONAL_H
Definition sequence.hpp:56
Definition from_diagonal.hpp:13
Definition cholesky.hpp:18
static constexpr X eval(X &&a)
Definition eval.hpp:11
static constexpr X view(X &&a)
Returns a TensorView obtained from a TensorView.
Definition view.hpp:22
std::enable_if_t< B{}, int > If
Definition type_traits.hpp:68
std::size_t Size
Definition type_traits.hpp:20
static constexpr auto isEven(T const a)
Definition is_even.hpp:11
std::is_invocable< F, Args... > IsInvocable
Definition type_traits.hpp:134
static constexpr auto makeSeries()
Definition sequence.hpp:361
Constant< Bool, B > IsSatisfied
Definition type_traits.hpp:71
static constexpr auto fromDiagonal(X &&a)
Constructs a diagonal Tensor with given Sizes from a Tensor containing the diagonal.
Definition from_diagonal.hpp:36
static constexpr Conditional< IsSatisfied< C >, RemoveConstReference< X >, X > copy(X &&a)
Definition copy.hpp:13
static constexpr decltype(auto) expand(Sequence< T, Seq... > const, F &&f, Xs &&...args)
forwards the values in a pRC::Sequence to a function as parameters
Definition sequence.hpp:354
Size Index
Definition type_traits.hpp:21