cMHN 1.2
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, class X, IsTensorish R = RemoveReference<X>>
13 requires(isEven(sizeof...(Ds))) &&
14 (sizeof...(Ds) / 2 == R::Dimension) &&
15 (cut<2, 0>(Sizes<Ds...>()) == typename R::Sizes() ||
16 cut<2, 1>(Sizes<Ds...>()) == typename R::Sizes())
17 static inline constexpr auto fromDiagonal(X &&a)
18 {
19 if constexpr(IsInvocable<View, X>)
20 {
22 return TensorViews::FromDiagonal<typename R::Type, Sizes<Ds...>, V>(
23 view(forward<X>(a)));
24 }
25 else
26 {
27 return eval(fromDiagonal<Ds...>(a));
28 }
29 }
30
31 template<class X, IsTensorish R = RemoveReference<X>>
32 static inline constexpr auto fromDiagonal(X &&a)
33 {
35 [&a](auto const... seq)
36 {
37 return fromDiagonal<R::size(seq)..., R::size(seq)...>(
38 forward<X>(a));
39 });
40 }
41}
42#endif // pRC_CORE_TENSOR_OPERATOR_FUNCTIONS_FROM_DIAGONAL_H
Definition sequence.hpp:29
Definition from_diagonal.hpp:14
Definition concepts.hpp:31
Definition cholesky.hpp:10
static constexpr auto isEven(T const a)
Definition is_even.hpp:11
std::size_t Size
Definition basics.hpp:31
std::remove_reference_t< T > RemoveReference
Definition basics.hpp:41
static constexpr decltype(auto) view(X &&a)
Definition view.hpp:13
static constexpr auto fromDiagonal(X &&a)
Definition from_diagonal.hpp:17
Sequence< Size, Ns... > Sizes
Definition sequence.hpp:100
static constexpr auto makeSeries()
Definition sequence.hpp:390
static constexpr auto cut(Sequence< T, Is... > const)
Definition sequence.hpp:631
static constexpr decltype(auto) expand(Sequence< T, Seq... > const, F &&f, Xs &&...args)
Definition sequence.hpp:383
static constexpr decltype(auto) eval(X &&a)
Definition eval.hpp:12