cMHN 1.2
C++ library for learning MHNs with pRC
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
9
10namespace pRC
11{
12 template<Size... Es, class X, IsConvertible<Index>... Os,
13 IsTensorish R = RemoveReference<X>>
14 requires(sizeof...(Es) == R::Dimension &&
15 sizeof...(Os) == R::Dimension &&
16 Sizes<Es...>() <= typename R::Sizes())
17 static inline constexpr auto slice(X &&a, Os const... offsets)
18 {
19 if constexpr(IsInvocable<View, X>)
20 {
23 [&a, &offsets...](auto const... seq)
24 {
25 return TensorViews::Slice<typename R::Type, Sizes<Es...>,
26 Sizes<(R::size(seq) - Es + 1)...>, V>(
27 view(forward<X>(a)),
28 Subscripts<(R::size(seq) - Es + 1)...>(offsets...));
29 });
30 }
31 else
32 {
33 return eval(slice<Es...>(a, offsets...));
34 }
35 }
36}
37#endif // pRC_CORE_TENSOR_FUNCTIONS_SLICE_H
Definition concepts.hpp:31
Definition cholesky.hpp:10
std::size_t Size
Definition basics.hpp:31
std::remove_reference_t< T > RemoveReference
Definition basics.hpp:41
static constexpr auto slice(X &&a, Os const ... offsets)
Definition slice.hpp:17
Sequence< Size, Ns... > Sizes
Definition sequence.hpp:100
static constexpr auto makeSeries()
Definition sequence.hpp:390
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