cMHN 1.1
C++ library for learning MHNs with pRC
Loading...
Searching...
No Matches
exclude.hpp
Go to the documentation of this file.
1// SPDX-License-Identifier: BSD-2-Clause
2
3#ifndef pRC_CORE_TENSOR_FUNCTIONS_EXCLUDE_H
4#define pRC_CORE_TENSOR_FUNCTIONS_EXCLUDE_H
5
9
10namespace pRC
11{
12 template<class F, Index... Es>
13 struct Exclude;
14
15 template<Index... Es, class F, class... Xs,
18 If<IsSame<decltype(select<Es...>(
19 typename RemoveReference<Xs>::Sizes()))...>> = 0,
20 If<IsInvocable<F, ResultOf<pRC::Chip<Es...>, Xs, decltype(Es)...>...>> =
21 0,
22 If<True<decltype(select<Es...>(makeSeries<Index,
23 typename RemoveReference<Xs>::Dimension{}>()))...>> = 0>
24 static inline constexpr auto exclude(F &&f, Xs &&...args)
25 {
26 using ESizes = Common<decltype(select<Es...>(
27 typename RemoveReference<Xs>::Sizes()))...>;
28 using R = RemoveReference<
29 ResultOf<F, ResultOf<pRC::Chip<Es...>, Xs, decltype(Es)...>...>>;
30 using FSizes = typename R::Sizes;
31 using Sizes = decltype(ESizes(), FSizes());
32 using T = typename R::Type;
33
36 forward<F>(f), view(forward<Xs>(args))...);
37 }
38
39 template<class F, Index... Es, class... Xs,
42 If<IsSame<decltype(select<Es...>(
43 typename RemoveReference<Xs>::Sizes()))...>> = 0,
44 If<IsInvocable<F, ResultOf<pRC::Chip<Es...>, Xs, decltype(Es)...>...>> =
45 0,
46 If<True<decltype(select<Es...>(makeSeries<Index,
47 typename RemoveReference<Xs>::Dimension{}>()))...>> = 0>
48 static inline constexpr auto exclude(Xs &&...args)
49 {
50 return exclude<Es...>(F(), forward<Xs>(args)...);
51 }
52
53 template<Index... Es, class F, class... Xs,
56 If<IsInvocable<Exclude<F, Es...>, Xs &...>> = 0>
57 static inline constexpr auto exclude(F &&f, Xs &&...args)
58 {
59 return eval(exclude<Es...>(forward<F>(f), args...));
60 }
61
62 template<class F, Index... Es, class... Xs,
65 If<IsInvocable<Exclude<F, Es...>, Xs &...>> = 0>
66 static inline constexpr auto exclude(Xs &&...args)
67 {
68 return eval(exclude<F, Es...>(args...));
69 }
70}
71#endif // pRC_CORE_TENSOR_FUNCTIONS_EXCLUDE_H
Definition sequence.hpp:56
Definition sequence.hpp:34
Definition exclude.hpp:14
pRC::Float<> T
Definition externs_nonTT.hpp:1
Definition cholesky.hpp:18
static constexpr X eval(X &&a)
Definition eval.hpp:11
static constexpr auto select(Sequence< T, Is... > const)
Definition sequence.hpp:579
static constexpr auto makeConstantSequence()
Definition sequence.hpp:402
Size Index
Definition type_traits.hpp:21
static constexpr X view(X &&a)
Definition view.hpp:12
std::invoke_result_t< F, Args... > ResultOf
Definition type_traits.hpp:140
typename CommonTypes< Ts... >::Type Common
Definition common.hpp:55
std::remove_reference_t< T > RemoveReference
Definition type_traits.hpp:56
std::enable_if_t< B{}, int > If
Definition type_traits.hpp:68
Sequence< Size, Ns... > Sizes
Definition type_traits.hpp:238
static constexpr auto makeSeries()
Definition sequence.hpp:351
std::is_invocable< F, Args... > IsInvocable
Definition type_traits.hpp:134
static constexpr auto exclude(F &&f, Xs &&...args)
Definition exclude.hpp:24
Definition chip.hpp:13