3#ifndef pRC_CORE_TENSOR_FUNCTIONS_REDUCE_H
4#define pRC_CORE_TENSOR_FUNCTIONS_REDUCE_H
13 class E = ResultOf<X, typename R::Subscripts>>
14 requires(
sizeof...(Is) <= R::Dimension &&
max(Is...) < R::Dimension) &&
15 IsInvocable<F, E, E> &&
16 IsInvocable<F,
decltype(F::template Identity<typename R::Type>()), E> &&
17 requires {
chip<Is...>(
typename R::Sizes()); }
18 static inline constexpr auto reduce(X &&a)
24 using Sizes =
decltype(
chip<Is...>(
typename R::Sizes()));
36 template<
class F,
class X, IsTensorish R = RemoveReference<X>,
37 class E = ResultOf<X,
typename R::Subscripts>>
38 requires IsInvocable<F, E, E> &&
39 IsInvocable<F, decltype(F::template Identity<typename R::Type>()), E>
40 static inline constexpr auto reduce(X &&a)
42 if constexpr(R::Dimension == 0)
46 return eval(forward<X>(a));
50 return view(forward<X>(a));
56 [&a](
auto const... seq)
58 return reduce<F, seq...>(forward<X>(a));
Definition sequence.hpp:29
Definition concepts.hpp:31
pRC::Float<> T
Definition externs_nonTT.hpp:1
Definition cholesky.hpp:10
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
Sequence< Size, Ns... > Sizes
Definition sequence.hpp:100
static constexpr auto makeSeries()
Definition sequence.hpp:390
static constexpr auto reduce(Sequence< T, I1, I2, Is... > const)
Definition sequence.hpp:458
static constexpr auto chip(Sequence< T, Is... > const)
Definition sequence.hpp:584
RemoveConst< RemoveReference< T > > RemoveConstReference
Definition basics.hpp:47
static constexpr decltype(auto) expand(Sequence< T, Seq... > const, F &&f, Xs &&...args)
Definition sequence.hpp:383
static constexpr void sort(C const &compare, T &a, Size const k=T::size(), Size const d=0)
Definition sort.hpp:15
static constexpr decltype(auto) eval(X &&a)
Definition eval.hpp:12
static constexpr decltype(auto) max(X &&a)
Definition max.hpp:13