3#ifndef pRC_TENSOR_TRAIN_COMMON_FUNCTIONS_ENUMERATE_H
4#define pRC_TENSOR_TRAIN_COMMON_FUNCTIONS_ENUMERATE_H
12 template<
class F,
class... Xs>
13 requires((TensorTrain::IsTensorish<RemoveReference<Xs>> ||
14 TensorTrain::IsOperatorish<RemoveReference<Xs>>) &&
16 (
sizeof...(Xs) > 0) && (
isSame(RemoveReference<Xs>::Dimension...)) &&
18 declval<F>().template operator()<0>(
19 declval<Xs>().template core<0>()...);
21 static inline constexpr auto enumerate(F &&f, Xs &&...args)
25 constexpr auto Dimension =
28 [&f, &args...](
auto const... seq)
30 auto core = [&f, &args...]<Index N>()
32 return forward<F>(f).template operator()<N>(
33 forward<Xs>(args).template core<N>()...);
37 Common<
typename decltype(core.template
38 operator()<seq>())::Type...>;
41 decltype(core.template operator()<
42 seq>())::Dimension>...>() == 3)
46 Sizes<
decltype(core.template
operator()<
47 seq>())::size(0)...>())),
49 Sizes<
decltype(core.template
operator()<
50 seq>())::size(2)...>()))>;
54 operator()<seq>())::size(1)...>;
59 forward<Xs>(args)))>...>(forward<F>(f),
60 view(forward<Xs>(args))...);
63 decltype(core.template operator()<
64 seq>())::Dimension>...>() == 4)
68 Sizes<
decltype(core.template
operator()<
69 seq>())::size(0)...>())),
71 Sizes<
decltype(core.template
operator()<
72 seq>())::size(3)...>()))>;
75 Sizes<
decltype(core.template
76 operator()<seq>())::size(1)...>;
79 Sizes<
decltype(core.template
80 operator()<seq>())::size(2)...>;
85 forward<Xs>(args)))>...>(forward<F>(f),
86 view(forward<Xs>(args))...);
96 template<
class F,
class... Xs>
97 requires((TensorTrain::IsTensorish<RemoveReference<Xs>> ||
98 TensorTrain::IsOperatorish<RemoveReference<Xs>>) &&
100 requires {
enumerate(declval<F>(), declval<Xs>()...); }
103 return enumerate(F(), forward<Xs>(args)...);
Definition sequence.hpp:29
Definition enumerate.hpp:20
Definition enumerate.hpp:20
Definition concepts.hpp:31
pRC::Float<> T
Definition externs_nonTT.hpp:1
Definition cholesky.hpp:10
std::size_t Size
Definition basics.hpp:31
std::remove_reference_t< T > RemoveReference
Definition basics.hpp:41
static constexpr decltype(auto) view(X &&a)
Definition view.hpp:13
std::common_type_t< Ts... > Common
Definition basics.hpp:53
static constexpr auto isSame(X &&arg, Xs &&...args)
Definition is_same.hpp:9
static constexpr auto makeSeries()
Definition sequence.hpp:390
static constexpr auto chip(Sequence< T, Is... > const)
Definition sequence.hpp:584
std::integral_constant< T, V > Constant
Definition basics.hpp:38
static constexpr auto enumerate(F &&f, Xs &&...args)
Definition enumerate.hpp:21
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