cMHN 1.2
C++ library for learning MHNs with pRC
Loading...
Searching...
No Matches
identity.hpp
Go to the documentation of this file.
1// SPDX-License-Identifier: BSD-2-Clause
2
3#ifndef pRC_TENSOR_TRAIN_OPERATOR_IDENTITY_H
4#define pRC_TENSOR_TRAIN_OPERATOR_IDENTITY_H
5
10
11namespace pRC
12{
13 template<TensorTrain::IsOperator T>
14 struct Identity<T>
15 {
16 constexpr auto operator()() const
17 {
18 auto const f = []<Index C>()
19 {
20 using Core = typename T::template Cores<C>;
21 constexpr auto CRL = Core::size(0);
22 constexpr auto CM = Core::size(1);
23 constexpr auto CN = Core::size(2);
24 constexpr auto CRR = Core::size(3);
25
28 typename Core::template ChangeSizes<CM, CN>>()),
29 zero<typename Core::template ChangeSizes<CRL - 1, CM, CN,
30 CRR - 1>>()));
31 };
32
33 using F = RemoveConstReference<decltype(f)>;
34 using M = typename T::M;
35 using N = typename T::N;
36 using Ranks = typename T::Ranks;
37
38 return TensorTrain::OperatorViews::Enumerate<typename T::Type, M, N,
39 Ranks, F>(f);
40 }
41
42 template<class X>
44 constexpr auto operator()(X &&value) const
45 {
46 auto const f =
47 [value = typename T::Type(forward<X>(value))]<Index C>()
48 {
49 using Core = typename T::template Cores<C>;
50 constexpr auto CRL = Core::size(0);
51 constexpr auto CM = Core::size(1);
52 constexpr auto CN = Core::size(2);
53 constexpr auto CRR = Core::size(3);
54
55 if constexpr(C == 0)
56 {
59 typename Core::template ChangeSizes<CM, CN>>(
60 value)),
61 zero<typename Core::template ChangeSizes<CRL - 1, CM,
62 CN, CRR - 1>>()));
63 }
64 else
65 {
68 typename Core::template ChangeSizes<CM, CN>>()),
69 zero<typename Core::template ChangeSizes<CRL - 1, CM,
70 CN, CRR - 1>>()));
71 }
72 };
73
74 using F = RemoveConstReference<decltype(f)>;
75 using M = typename T::M;
76 using N = typename T::N;
77 using Ranks = typename T::Ranks;
78
79 return TensorTrain::OperatorViews::Enumerate<typename T::Type, M, N,
80 Ranks, F>(f);
81 }
82 };
83
84 template<TensorTrain::IsOperatorView T>
85 struct Identity<T> : Identity<ResultOf<Eval, T>>
86 {
87 };
88}
89#endif // pRC_TENSOR_TRAIN_OPERATOR_IDENTITY_H
Definition value.hpp:12
Definition concepts.hpp:37
int value
Definition gmock-actions_test.cc:1714
Definition cholesky.hpp:10
Size Index
Definition basics.hpp:32
static constexpr auto reshape(X &&a)
Definition reshape.hpp:14
RemoveConst< RemoveReference< T > > RemoveConstReference
Definition basics.hpp:47
static constexpr auto permute(Sequence< T, Is... > const)
Definition sequence.hpp:487
static constexpr auto exclude(F &&f, Xs &&...args)
Definition exclude.hpp:20
static constexpr auto identity()
Definition identity.hpp:13
static constexpr auto zero()
Definition zero.hpp:12
constexpr auto operator()(X &&value) const
Definition identity.hpp:44
constexpr auto operator()() const
Definition identity.hpp:16
Definition identity.hpp:11