OpenKalman
Classes | Namespaces | Functions | Variables
n_ary_operation.hpp File Reference

Element-wise n-ary operation function. More...

This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Classes

struct  OpenKalman::detail::n_ary_operator_traits_impl< Operation, indices, typename, Args >
 
struct  OpenKalman::detail::n_ary_operator_traits_impl< Op, indices, std::enable_if_t< is_invocable_with_indices< Op, Args... >(std::make_index_sequence< indices > {}) or std::is_invocable_v< Op, Args... > >, Args... >
 
struct  OpenKalman::detail::n_ary_operator_traits< Op, indices, Args >
 
struct  OpenKalman::detail::n_ary_operator_impl< Op, Indices, typename, Args >
 
struct  OpenKalman::detail::n_ary_operator_impl< Op, Indices, std::enable_if_t< std::is_invocable< Op, typename std::add_lvalue_reference< typename scalar_type_of< Args >::type >::type... >::value or is_invocable_with_indices< Op, typename std::add_lvalue_reference< typename scalar_type_of< Args >::type >::type... >(std::make_index_sequence< Indices > {})>, Args... >
 

Namespaces

 OpenKalman
 The root namespace for OpenKalman.
 
 OpenKalman::detail
 T is an acceptable noise perturbation input to a tests.
 

Functions

template<std::size_t... ixs, typename DTup , typename... Args>
constexpr void OpenKalman::detail::check_n_ary_dims (std::index_sequence< ixs... >, const DTup &d_tup, const Args &...args)
 
template<typename Op , typename... Args, std::size_t... I>
constexpr bool OpenKalman::detail::is_invocable_with_indices (std::index_sequence< I... >)
 
template<typename Op , std::size_t... I, typename... Args>
decltype(auto) constexpr OpenKalman::detail::n_ary_invoke_op (const Op &op, std::index_sequence< I... > seq, Args &&...args)
 
template<typename Arg , std::size_t... I, typename... J>
auto OpenKalman::detail::n_ary_operation_get_component_impl (Arg &&arg, std::index_sequence< I... >, J...j)
 
template<typename Op , typename ArgsTup , std::size_t... ArgI, typename... J>
auto OpenKalman::detail::n_ary_operation_get_component (const Op &op, ArgsTup &&args_tup, std::index_sequence< ArgI... >, J...j)
 
template<typename M , typename Op , typename ArgsTup , typename... J>
void OpenKalman::detail::n_ary_operation_iterate (M &m, const Op &op, ArgsTup &&args_tup, std::index_sequence<>, J...j)
 
template<typename M , typename Op , typename ArgsTup , std::size_t I, std::size_t... Is, typename... J>
void OpenKalman::detail::n_ary_operation_iterate (M &m, const Op &op, ArgsTup &&args_tup, std::index_sequence< I, Is... >, J...j)
 
template<typename... Ds, typename Operation , typename... Args, std::enable_if_t<(coordinates::pattern< Ds > and ...) and(indexible< Args > and ...) and(sizeof...(Args) > 0>
constexpr auto OpenKalman::n_ary_operation (const std::tuple< Ds... > &d_tup, Operation &&operation, Args &&...args)
 Perform a component-wise n-ary operation, using broadcasting to match the size of a pattern matrix. More...
 
template<std::size_t ix, typename Arg , typename... Args>
constexpr auto OpenKalman::detail::find_max_dim (const Arg &arg, const Args &...args)
 
template<std::size_t... ixs, typename... Args>
constexpr auto OpenKalman::detail::find_max_dims (std::index_sequence< ixs... >, const Args &...args)
 
template<typename Operation , typename... Args, std::enable_if_t<(indexible< Args > and ...) and(sizeof...(Args) > 0>
constexpr auto OpenKalman::n_ary_operation (Operation &&operation, Args &&...args)
 This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. More...
 
template<typename M , typename Operation , typename Vs_tuple , typename Index_seq , typename K_seq , typename... Is>
void OpenKalman::detail::nullary_set_components (M &m, const Operation &op, const Vs_tuple &, Index_seq, K_seq, Is...is)
 
template<std::size_t DsIndex, std::size_t... DsIndices, typename M , typename Operation , typename Vs_tuple , std::size_t... indices, std::size_t... Ks, typename... Is>
void OpenKalman::detail::nullary_set_components (M &m, const Operation &op, const Vs_tuple &ds_tup, std::index_sequence< indices... > index_seq, std::index_sequence< Ks... > k_seq, Is...is)
 
template<std::size_t CurrentOpIndex, std::size_t factor, typename M , typename Operations_tuple , typename Vs_tuple , typename UniqueIndicesSeq , std::size_t... AllDsIndices, typename K_seq >
void OpenKalman::detail::nullary_iterate (M &m, const Operations_tuple &op_tup, const Vs_tuple &ds_tup, UniqueIndicesSeq unique_indices_seq, std::index_sequence< AllDsIndices... >, K_seq k_seq)
 
template<std::size_t CurrentOpIndex, std::size_t factor, std::size_t index, std::size_t... indices, typename M , typename Operations_tuple , typename Vs_tuple , typename UniqueIndicesSeq , typename AllDsSeq , std::size_t... Ks, std::size_t... Js, typename... J_seqs>
void OpenKalman::detail::nullary_iterate (M &m, const Operations_tuple &op_tup, const Vs_tuple &ds_tup, UniqueIndicesSeq unique_indices_seq, AllDsSeq all_ds_seq, std::index_sequence< Ks... >, std::index_sequence< Js... >, J_seqs...j_seqs)
 
template<typename PatternMatrix , std::size_t... indices, typename... Ds, typename... Operations>
constexpr auto OpenKalman::n_ary_operation (const std::tuple< Ds... > &d_tup, const Operations &...operations)
 This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. More...
 
template<typename PatternMatrix , std::size_t... indices, typename... Ds, typename... Operations, std::enable_if_t< indexible< PatternMatrix > and(coordinates::pattern< Ds > and ...) and((fixed_pattern< typename vector_space_descriptor_of< PatternMatrix, indices >::type >) and ...) and(sizeof...(Operations)==(1 *... *index_dimension_of< PatternMatrix, indices >::value)), int > = 0>
constexpr auto OpenKalman::n_ary_operation (const Operations &...operations)
 This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. More...
 
template<typename Operation , typename Elem , typename... J>
void OpenKalman::detail::do_elem_operation_in_place_impl (const Operation &operation, Elem &elem, J...j)
 
template<typename Operation , typename Arg , typename... J>
void OpenKalman::detail::do_elem_operation_in_place (const Operation &operation, Arg &arg, J...j)
 
template<typename Operation , typename Arg , typename Count , typename... J>
void OpenKalman::detail::unary_operation_in_place_impl (const Operation &operation, Arg &arg, const Count &count, J...j)
 
template<typename Operation , typename Arg , std::enable_if_t< writable< Arg > and detail::n_ary_operator< Operation, index_count_v< Arg >, Arg >, int > = 0>
decltype(auto) constexpr OpenKalman::unary_operation_in_place (const Operation &operation, Arg &&arg)
 Perform a component-wise, in-place unary operation. More...
 

Variables

template<typename Op , std::size_t Indices, typename... Args>
constexpr bool OpenKalman::detail::n_ary_operator = n_ary_operator_impl<Op, Indices, void, Args...>::value
 

Detailed Description

Element-wise n-ary operation function.