cMHN 1.1
C++ library for learning MHNs with pRC
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
15 template<Size... Ds, class X, class R = RemoveReference<X>,
17 If<IsSatisfied<(isEven(sizeof...(Ds)))>> = 0,
18 If<IsSatisfied<(sizeof...(Ds) / 2 == typename R::Dimension())>> = 0,
19 If<IsSatisfied<(cut<2, 0>(Sizes<Ds...>()) >= typename R::Sizes())>> = 0,
20 If<IsSatisfied<(cut<2, 1>(Sizes<Ds...>()) >= typename R::Sizes())>> = 0>
21 static inline constexpr auto fromDiagonal(X &&a)
22 {
24 return TensorViews::FromDiagonal<typename R::Type, Sizes<Ds...>, V>(
25 view(forward<X>(a)));
26 }
27
28 template<Size... Ds, class X, class R = RemoveReference<X>,
30 If<IsInvocable<FromDiagonal<Ds...>, X &>> = 0>
31 static inline constexpr auto fromDiagonal(X &&a)
32 {
33 return eval(fromDiagonal<Ds...>(a));
34 }
35
36 template<class X, class R = RemoveReference<X>, If<IsTensorish<R>> = 0>
37 static inline constexpr auto fromDiagonal(X &&a)
38 {
39 return expand(makeSeries<Index, typename R::Dimension{}>(),
40 [&a](auto const... seq)
41 {
42 return fromDiagonal<R::size(seq)..., R::size(seq)...>(
43 forward<X>(a));
44 });
45 }
46}
47#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 auto makeConstantSequence()
Definition sequence.hpp:402
Size Index
Definition type_traits.hpp:21
std::size_t Size
Definition type_traits.hpp:20
static constexpr X view(X &&a)
Definition view.hpp:12
std::enable_if_t< B{}, int > If
Definition type_traits.hpp:68
Constant< Bool, B > IsSatisfied
Definition type_traits.hpp:71
static constexpr auto isEven(T const a)
Definition is_even.hpp:11
static constexpr auto makeSeries()
Definition sequence.hpp:351
static constexpr auto fromDiagonal(X &&a)
Definition from_diagonal.hpp:21
static constexpr decltype(auto) expand(Sequence< T, Seq... > const, F &&f, Xs &&...args)
Definition sequence.hpp:344
std::is_invocable< F, Args... > IsInvocable
Definition type_traits.hpp:134