cMHN 1.2
C++ library for learning MHNs with pRC
Loading...
Searching...
No Matches
chip.hpp
Go to the documentation of this file.
1// SPDX-License-Identifier: BSD-2-Clause
2
3#ifndef pRC_CORE_TENSOR_FUNCTIONS_CHIP_H
4#define pRC_CORE_TENSOR_FUNCTIONS_CHIP_H
5
9
10namespace pRC
11{
12 template<Index... Ds, class X, IsConvertible<Index>... Is,
13 IsTensorish R = RemoveReference<X>>
14 requires(sizeof...(Is) == sizeof...(Ds)) &&
15 requires { chip<Ds...>(typename R::Sizes()); }
16 static inline constexpr auto chip(X &&a, Is const... indices)
17 {
18 if constexpr(IsInvocable<View, X>)
19 {
20 if constexpr(sizeof...(Ds) == 0)
21 {
22 return view(forward<X>(a));
23 }
24 else if constexpr(sizeof...(Ds) == 1)
25 {
27 constexpr auto D = Sequence<Index, Ds...>::value(0);
28 return TensorViews::Chip<typename R::Type,
29 decltype(chip<D>(typename R::Sizes())), D, V>(
30 view(forward<X>(a)), indices...);
31 }
32 else
33 {
34 return expand(
35 makeRange<Index, 1, sizeof...(Ds)>(),
36 [&a](auto const subscripts, auto const... seq)
37 {
38 using S = Sequence<Index, Ds...>;
39 return chip<((S::value(seq) < S::value(0))
40 ? S::value(seq)
41 : S::value(seq) - 1)...>(
42 chip<S::value(0)>(a, subscripts[0]),
43 subscripts[seq]...);
44 },
45 expand(select<Ds...>(typename R::Sizes()),
46 [indices...](auto const... seq)
47 {
48 return Subscripts<seq...>(indices...);
49 }));
50 }
51 }
52 else
53 {
54 return eval(chip<Ds...>(a, indices...));
55 }
56 }
57}
58#endif // pRC_CORE_TENSOR_FUNCTIONS_CHIP_H
pRC::Size const D
Definition CalculatePThetaTests.cpp:9
Definition sequence.hpp:29
static constexpr auto value(Index const index)
Definition sequence.hpp:49
Definition chip.hpp:18
Definition concepts.hpp:31
TN::Subscripts S
Definition externs_nonTT.hpp:9
Definition cholesky.hpp:10
static constexpr auto select(Sequence< T, Is... > const)
Definition sequence.hpp:610
Size Index
Definition basics.hpp:32
std::remove_reference_t< T > RemoveReference
Definition basics.hpp:41
static constexpr decltype(auto) view(X &&a)
Definition view.hpp:13
static constexpr auto makeRange()
Definition sequence.hpp:421
static constexpr auto chip(Sequence< T, Is... > const)
Definition sequence.hpp:584
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