cMHN 1.2
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<Index... Es, class F, class... Xs>
13 requires(IsTensorish<RemoveReference<Xs>> && ...) &&
14 (sizeof...(Xs) > 0) &&
15 ((select<Es...>(typename TupleElement<0,
17 select<Es...>(typename RemoveReference<Xs>::Sizes())) &&
18 ...) &&
19 IsInvocable<F, ResultOf<Chip<Es...>, Xs, decltype(Es)...>...>
20 static inline constexpr auto exclude(F &&f, Xs &&...args)
21 {
22 if constexpr((IsInvocable<View, Xs> && ...))
23 {
24 using ESizes = Common<decltype(select<Es...>(
25 typename RemoveReference<Xs>::Sizes()))...>;
26 using R = RemoveReference<
27 ResultOf<F, ResultOf<Chip<Es...>, Xs, decltype(Es)...>...>>;
28 using FSizes = typename R::Sizes;
29 using Sizes = decltype(ESizes(), FSizes());
30 using T = typename R::Type;
31
32 return TensorViews::Exclude<T, Sizes, F, Sequence<Index, Es...>,
34 forward<F>(f), view(forward<Xs>(args))...);
35 }
36 else
37 {
38 return eval(exclude<Es...>(forward<F>(f), args...));
39 }
40 }
41
42 template<class F, Index... Es, class... Xs>
43 requires(IsTensorish<RemoveReference<Xs>> && ...) &&
44 requires { exclude<Es...>(declval<F>(), declval<Xs>()...); }
45 static inline constexpr auto exclude(Xs &&...args)
46 {
47 return exclude<Es...>(F(), forward<Xs>(args)...);
48 }
49}
50#endif // pRC_CORE_TENSOR_FUNCTIONS_EXCLUDE_H
Definition value.hpp:12
Definition sequence.hpp:29
Definition exclude.hpp:14
Definition concepts.hpp:31
pRC::Float<> T
Definition externs_nonTT.hpp:1
Definition cholesky.hpp:10
static constexpr auto select(Sequence< T, Is... > const)
Definition sequence.hpp:610
Size Index
Definition basics.hpp:32
std::tuple< Ts... > Tuple
Definition basics.hpp:23
std::invoke_result_t< F, Args... > ResultOf
Definition basics.hpp:59
std::remove_reference_t< T > RemoveReference
Definition basics.hpp:41
std::tuple_element_t< I, T > TupleElement
Definition basics.hpp:26
static constexpr decltype(auto) view(X &&a)
Definition view.hpp:13
std::common_type_t< Ts... > Common
Definition basics.hpp:53
Sequence< Size, Ns... > Sizes
Definition sequence.hpp:100
static constexpr auto exclude(F &&f, Xs &&...args)
Definition exclude.hpp:20
static constexpr decltype(auto) eval(X &&a)
Definition eval.hpp:12
Definition chip.hpp:12