pRC
multi-purpose Tensor Train library for C++
Loading...
Searching...
No Matches
slice.hpp
Go to the documentation of this file.
1// SPDX-License-Identifier: BSD-2-Clause
2
3#ifndef pRC_CORE_TENSOR_FUNCTIONS_SLICE_H
4#define pRC_CORE_TENSOR_FUNCTIONS_SLICE_H
5
8
9namespace pRC
10{
11 template<Size... Es>
12 struct Slice;
13
30 template<Size... Es, class X, class... Os, class R = RemoveReference<X>,
33 If<IsSatisfied<(sizeof...(Es) == typename R::Dimension())>> = 0,
34 If<IsSatisfied<(sizeof...(Os) == typename R::Dimension())>> = 0,
35 If<IsSatisfied<(Sizes<Es...>() <= typename R::Sizes())>> = 0>
36 static inline constexpr auto slice(X &&a, Os const... offsets)
37 {
39 return expand(makeSeries<Index, typename R::Dimension{}>(),
40 [&a, &offsets...](auto const... seq)
41 {
42 return TensorViews::Slice<typename R::Type, Sizes<Es...>,
43 Sizes<(R::size(seq) - Es + 1)...>, V>(view(forward<X>(a)),
44 Subscripts<(R::size(seq) - Es + 1)...>(offsets...));
45 });
46 }
47
67 template<Size... Es, class X, class... Os, class R = RemoveReference<X>,
69 If<IsInvocable<Slice<Es...>, X &, Os...>> = 0>
70 static inline constexpr auto slice(X &&a, Os const... offsets)
71 {
72 return eval(slice<Es...>(a, offsets...));
73 }
74}
75#endif // pRC_CORE_TENSOR_FUNCTIONS_SLICE_H
Definition sequence.hpp:56
Definition subscripts.hpp:20
Definition slice.hpp:13
Definition cholesky.hpp:18
static constexpr X eval(X &&a)
Definition eval.hpp:11
static constexpr X view(X &&a)
Returns a TensorView obtained from a TensorView.
Definition view.hpp:22
std::enable_if_t< B{}, int > If
Definition type_traits.hpp:68
std::size_t Size
Definition type_traits.hpp:20
std::is_invocable< F, Args... > IsInvocable
Definition type_traits.hpp:134
static constexpr auto slice(X &&a, Os const ... offsets)
Returns a specified slice of a Tensor.
Definition slice.hpp:36
static constexpr auto makeSeries()
Definition sequence.hpp:361
Constant< Bool, B > IsSatisfied
Definition type_traits.hpp:71
static constexpr Conditional< IsSatisfied< C >, RemoveConstReference< X >, X > copy(X &&a)
Definition copy.hpp:13
static constexpr decltype(auto) expand(Sequence< T, Seq... > const, F &&f, Xs &&...args)
forwards the values in a pRC::Sequence to a function as parameters
Definition sequence.hpp:354
Size Index
Definition type_traits.hpp:21