cMHN 1.2
C++ library for learning MHNs with pRC
Loading...
Searching...
No Matches
unit.hpp
Go to the documentation of this file.
1// SPDX-License-Identifier: BSD-2-Clause
2
3#ifndef pRC_TENSOR_TRAIN_TENSOR_UNIT_H
4#define pRC_TENSOR_TRAIN_TENSOR_UNIT_H
5
10
11namespace pRC
12{
13 template<TensorTrain::IsTensor T>
14 struct Unit<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 CN = Core::size(1);
23 constexpr auto CRR = Core::size(2);
24
26 unit<typename Core::template ChangeSizes<1, CN, 1>>(),
27 zero<typename Core::template ChangeSizes<CRL - 1, CN,
28 CRR - 1>>()));
29 };
30
31 using F = RemoveConstReference<decltype(f)>;
32 using N = typename T::N;
33 using Ranks = typename T::Ranks;
34
35 return TensorTrain::TensorViews::Enumerate<typename T::Type, N,
36 Ranks, F>(f);
37 }
38
39 template<class X>
41 constexpr auto operator()(X &&value) const
42 {
43 auto const f =
44 [value = typename T::Type(forward<X>(value))]<Index C>()
45 {
46 using Core = typename T::template Cores<C>;
47 constexpr auto CRL = Core::size(0);
48 constexpr auto CN = Core::size(1);
49 constexpr auto CRR = Core::size(2);
50
51 if constexpr(C == 0)
52 {
54 unit<typename Core::template ChangeSizes<1, CN, 1>>(
55 value),
56 zero<typename Core::template ChangeSizes<CRL - 1, CN,
57 CRR - 1>>()));
58 }
59 else
60 {
62 unit<typename Core::template ChangeSizes<1, CN, 1>>(),
63 zero<typename Core::template ChangeSizes<CRL - 1, CN,
64 CRR - 1>>()));
65 }
66 };
67
68 using F = RemoveConstReference<decltype(f)>;
69 using N = typename T::N;
70 using Ranks = typename T::Ranks;
71
72 return TensorTrain::TensorViews::Enumerate<typename T::Type, N,
73 Ranks, F>(f);
74 }
75 };
76
77 template<TensorTrain::IsTensorView T>
78 struct Unit<T> : Unit<ResultOf<Eval, T>>
79 {
80 };
81}
82#endif // pRC_TENSOR_TRAIN_TENSOR_UNIT_H
Definition value.hpp:12
Definition enumerate.hpp:20
Definition concepts.hpp:37
int value
Definition gmock-actions_test.cc:1714
Definition cholesky.hpp:10
static constexpr auto unit()
Definition unit.hpp:13
Size Index
Definition basics.hpp:32
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 zero()
Definition zero.hpp:12
constexpr auto operator()() const
Definition unit.hpp:16
constexpr auto operator()(X &&value) const
Definition unit.hpp:41
Definition unit.hpp:11