cMHN 1.2
C++ library for learning MHNs with pRC
Loading...
Searching...
No Matches
extract_diagonal.hpp
Go to the documentation of this file.
1// SPDX-License-Identifier: BSD-2-Clause
2
3#ifndef pRC_CORE_TENSOR_OPERATOR_FUNCTIONS_EXTRACT_DIAGONAL_H
4#define pRC_CORE_TENSOR_OPERATOR_FUNCTIONS_EXTRACT_DIAGONAL_H
5
11
12namespace pRC
13{
14 template<class X, IsTensorish R = RemoveReference<X>>
15 requires(isEven(R::Dimension))
16 static inline constexpr auto extractDiagonal(X &&a)
17 {
18 if constexpr(IsInvocable<View, X>)
19 {
21 return TensorViews::ExtractDiagonal<typename R::Type,
22 decltype(pick<Min>(cut<2, 0>(typename R::Sizes()),
23 cut<2, 1>(typename R::Sizes()))),
24 V>(view(forward<X>(a)));
25 }
26 else
27 {
28 return eval(extractDiagonal(a));
29 }
30 }
31}
32#endif // pRC_CORE_TENSOR_OPERATOR_FUNCTIONS_EXTRACT_DIAGONAL_H
Definition extract_diagonal.hpp:17
Definition concepts.hpp:31
Definition cholesky.hpp:10
static constexpr auto isEven(T const a)
Definition is_even.hpp:11
std::remove_reference_t< T > RemoveReference
Definition basics.hpp:41
static constexpr auto pick(Sequence< T, As... > const, Sequence< T, Bs... > const, Seqs const ...)
Definition sequence.hpp:569
static constexpr decltype(auto) view(X &&a)
Definition view.hpp:13
static constexpr auto extractDiagonal(X &&a)
Definition extract_diagonal.hpp:16
static constexpr auto cut(Sequence< T, Is... > const)
Definition sequence.hpp:631
static constexpr decltype(auto) eval(X &&a)
Definition eval.hpp:12