16 #ifndef OPENKALMAN_INTERFACES_DEFINED_HPP 17 #define OPENKALMAN_INTERFACES_DEFINED_HPP 19 #include <type_traits> 33 concept get_pattern_collection_defined_for =
38 template<
typename T,
typename =
void>
43 std::void_t<decltype(object_traits<stdex::remove_cvref_t<T>>::get_pattern_collection)>>
58 concept get_constant_defined_for = requires (T t) {
64 template<
typename T,
typename =
void>
69 decltype(object_traits<stdex::remove_cvref_t<T>>::get_constant), T>::type>>>
84 concept nested_object_defined_for =
89 template<
typename T,
typename =
void>
94 std::void_t<decltype(object_traits<stdex::remove_cvref_t<T>>::nested_object)>>
107 #ifdef __cpp_concepts 108 template<
typename T, applicability b = applicability::guaranteed>
109 concept is_square_defined_for = std::convertible_to<
110 decltype(
object_traits<std::remove_cvref_t<T>>::
template is_square<b>),
bool>;
114 template<
typename T, applicability b,
typename =
void>
117 template<
typename T, applicability b>
119 decltype(object_traits<stdex::remove_cvref_t<T>>::template is_square<b>), bool>>>
123 template<
typename T, applicability b = applicability::guaranteed>
132 #ifdef __cpp_concepts 134 concept is_triangular_adapter_defined_for = std::convertible_to<
135 decltype(
object_traits<std::remove_cvref_t<T>>::is_triangular_adapter),
bool>;
139 template<
typename T,
typename =
void>
144 decltype(object_traits<stdex::remove_cvref_t<T>>::is_triangular_adapter), bool>>>
157 #ifdef __cpp_concepts 159 concept is_hermitian_defined_for = std::convertible_to<
160 decltype(
object_traits<std::remove_cvref_t<T>>::is_hermitian),
bool>;
164 template<
typename T,
typename =
void>
169 decltype(object_traits<stdex::remove_cvref_t<T>>::is_hermitian), bool>>>
177 template<
typename T,
typename =
void>
190 #ifdef __cpp_concepts 192 concept hermitian_adapter_type_defined_for = std::convertible_to<
197 template<
typename T,
typename =
void>
202 decltype(object_traits<stdex::remove_cvref_t<T>>::hermitian_adapter_type), HermitianAdapterType>>>
215 #if defined(__cpp_concepts) and OPENKALMAN_CPP_FEATURE_CONCEPTS 216 template<
typename Derived,
typename LibraryObject>
217 concept library_base_defined_for = requires {
223 template<
typename Derived,
typename LibraryObject,
typename =
void>
226 template<
typename Derived,
typename LibraryObject>
228 std::void_t<typename library_interface<stdex::remove_cvref_t<LibraryObject>>::template library_base<std::decay_t<Derived>>>>
232 template<
typename Derived,
typename LibraryObject>
241 #ifdef __cpp_concepts 242 template<
typename LHS,
typename RHS>
243 concept copy_from_defined_for = requires(LHS lhs, RHS rhs) {
244 std::invoke(
library_interface<std::remove_cvref_t<LHS>>::copy, lhs, std::forward<RHS>(rhs));
249 template<
typename LHS,
typename RHS,
typename =
void>
252 template<
typename LHS,
typename RHS>
254 decltype(library_interface<stdex::remove_cvref_t<LHS>>::copy), LHS, RHS>>>
258 template<
typename LHS,
typename RHS>
267 #ifdef __cpp_concepts 268 template<
typename T,
typename Arg>
269 concept to_native_matrix_defined_for = requires (Arg arg) {
270 std::invoke(
library_interface<std::remove_cvref_t<T>>::to_native_matrix, std::forward<Arg>(arg));
275 template<
typename T,
typename Arg,
typename =
void>
278 template<
typename T,
typename Arg>
280 decltype(library_interface<stdex::remove_cvref_t<T>>::to_native_matrix), Arg&&>>>
284 template<
typename T,
typename Arg>
293 #ifdef __cpp_concepts 294 template<
typename T,
typename layout,
typename Scalar,
typename D>
295 concept make_default_defined_for = requires(D d) {
296 std::invoke(
library_interface<std::remove_cvref_t<T>>::
template make_default<layout, Scalar>, std::forward<D>(d));
301 template<
typename T,
typename layout,
typename Scalar,
typename D,
typename =
void>
304 template<
typename T,
typename layout,
typename Scalar,
typename D>
306 decltype(library_interface<stdex::remove_cvref_t<T>>::template make_default<layout, Scalar>), D>>>
310 template<
typename T,
typename layout,
typename Scalar,
typename D>
319 #ifdef __cpp_concepts 320 template<
typename T,
typename layout,
typename Arg,
typename...Scalars>
321 concept fill_components_defined_for = requires(Arg arg, Scalars...scalars) {
322 std::invoke(
library_interface<std::remove_cvref_t<T>>::
template fill_components<layout>, std::forward<Arg>(arg), std::forward<Scalars>(scalars)...);
327 template<
typename T,
typename layout,
typename Arg,
typename = void,
typename...Scalars>
330 template<
typename T,
typename layout,
typename Arg,
typename...Scalars>
332 decltype(library_interface<stdex::remove_cvref_t<T>>::template fill_components<layout>), Arg, Scalars...>>, Scalars...>
336 template<
typename T,
typename layout,
typename Arg,
typename...Scalars>
345 #ifdef __cpp_concepts 346 template<
typename T,
typename C,
typename Ds>
347 concept make_constant_defined_for = requires (C c, Ds ds) {
353 template<
typename T,
typename C,
typename Ds,
typename =
void>
356 template<
typename T,
typename C,
typename Ds>
358 decltype(library_interface<stdex::remove_cvref_t<T>>::make_constant), C, Ds>>>
362 template<
typename T,
typename C,
typename Ds>
371 #ifdef __cpp_concepts 372 template<
typename T,
typename Scalar,
typename Ds>
373 concept make_identity_matrix_defined_for = requires (Ds ds) {
374 std::invoke(
library_interface<std::remove_cvref_t<T>>::
template make_identity_matrix<Scalar>, std::forward<Ds>(ds));
379 template<
typename T,
typename Scalar,
typename Ds,
typename =
void>
382 template<
typename T,
typename Scalar,
typename Ds>
384 decltype(library_interface<stdex::remove_cvref_t<T>>::template make_identity_matrix<Scalar>), Ds>>>
388 template<
typename T,
typename Scalar,
typename Ds>
397 #ifdef __cpp_concepts 398 template<
typename T, triangle_type tri,
typename Arg>
399 concept make_triangular_matrix_defined_for = requires (Arg arg) {
400 std::invoke(
library_interface<std::remove_cvref_t<T>>::
template make_triangular_matrix<tri>, std::forward<Arg>(arg));
405 template<
typename T, triangle_type tri,
typename Arg,
typename =
void>
408 template<
typename T, triangle_type tri,
typename Arg>
410 decltype(library_interface<stdex::remove_cvref_t<T>>::template make_triangular_matrix<tri>), Arg>>>
414 template<
typename T, triangle_type tri,
typename Arg>
423 #ifdef __cpp_concepts 424 template<
typename T, HermitianAdapterType adapter_type,
typename Arg>
425 concept make_hermitian_adapter_defined_for = requires (Arg arg) {
426 std::invoke(
library_interface<std::remove_cvref_t<T>>::
template make_hermitian_adapter<adapter_type>, std::forward<Arg>(arg));
431 template<
typename T, HermitianAdapterType adapter_type,
typename Arg,
typename =
void>
434 template<
typename T, HermitianAdapterType adapter_type,
typename Arg>
436 decltype(library_interface<stdex::remove_cvref_t<T>>::template make_hermitian_adapter<adapter_type>), Arg>>>
440 template<
typename T, HermitianAdapterType adapter_type,
typename Arg>
449 #ifdef __cpp_concepts 450 template<
typename T,
typename Arg>
451 concept to_euclidean_defined_for = requires (Arg arg) {
457 template<
typename T,
typename Arg,
typename =
void>
460 template<
typename T,
typename Arg>
462 decltype(library_interface<stdex::remove_cvref_t<T>>::to_euclidean), Arg>>>
466 template<
typename T,
typename Arg>
475 #ifdef __cpp_concepts 476 template<
typename T,
typename Arg,
typename V>
477 concept from_euclidean_defined_for = requires (Arg arg, V v) {
483 template<
typename T,
typename Arg,
typename V,
typename =
void>
486 template<
typename T,
typename Arg,
typename V>
488 decltype(library_interface<stdex::remove_cvref_t<T>>::from_euclidean), Arg, V>>>
492 template<
typename T,
typename Arg,
typename V>
501 #ifdef __cpp_concepts 502 template<
typename T,
typename Arg>
503 concept wrap_angles_defined_for = requires (Arg arg) {
504 std::invoke(
library_interface<std::remove_cvref_t<T>>::wrap_angles, std::forward<Arg>(arg));
509 template<
typename T,
typename Arg,
typename =
void>
512 template<
typename T,
typename Arg>
514 decltype(library_interface<stdex::remove_cvref_t<T>>::wrap_angles), Arg>>>
518 template<
typename T,
typename Arg>
527 #ifdef __cpp_concepts 528 template<
typename T,
typename Arg,
typename BeginTup,
typename SizeTup>
529 concept get_slice_defined_for = requires(Arg arg, BeginTup begin_tup, SizeTup size_tup) {
535 template<
typename T,
typename Arg,
typename BeginTup,
typename SizeTup,
typename =
void>
538 template<
typename T,
typename Arg,
typename BeginTup,
typename SizeTup>
540 decltype(library_interface<stdex::remove_cvref_t<T>>::set_slice), Arg, BeginTup, SizeTup>>>
544 template<
typename T,
typename Arg,
typename BeginTup,
typename SizeTup>
553 #ifdef __cpp_concepts 554 template<
typename T,
typename Arg,
typename Block,
typename...Begin>
555 concept set_slice_defined_for = requires(Arg arg, Block block, Begin...begin) {
556 std::invoke(
library_interface<std::remove_cvref_t<T>>::
set_slice, std::forward<Arg>(arg), std::forward<Block>(block), std::forward<Begin>(begin)...);
561 template<
typename T,
typename Arg,
typename Block,
typename = void,
typename...Begin>
564 template<
typename T,
typename Arg,
typename Block,
typename...Begin>
566 decltype(library_interface<stdex::remove_cvref_t<T>>::set_slice), Arg, Block, Begin...>>, Begin...>
570 template<
typename T,
typename Arg,
typename Block,
typename...Begin>
579 #ifdef __cpp_concepts 580 template<
typename T, triangle_type tri,
typename A,
typename B>
581 concept set_triangle_defined_for = requires(
A a, B b) {
582 std::invoke(
library_interface<std::remove_cvref_t<T>>::
template set_triangle<tri>, std::forward<A>(a), std::forward<B>(b));
587 template<
typename T, triangle_type tri,
typename A,
typename B,
typename =
void>
590 template<
typename T, triangle_type tri,
typename A,
typename B>
592 decltype(library_interface<stdex::remove_cvref_t<T>>::template set_triangle<tri>), A, B>>>
596 template<
typename T, triangle_type tri,
typename A,
typename B>
605 #ifdef __cpp_concepts 606 template<
typename T,
typename Arg>
607 concept to_diagonal_defined_for = requires (Arg arg) {
613 template<
typename T,
typename Arg,
typename =
void>
616 template<
typename T,
typename Arg>
618 decltype(library_interface<stdex::remove_cvref_t<T>>::to_diagonal), Arg>>>
622 template<
typename T,
typename Arg>
631 #ifdef __cpp_concepts 632 template<
typename T,
typename Arg>
633 concept diagonal_of_defined_for = requires (Arg arg) {
639 template<
typename T,
typename Arg,
typename =
void>
642 template<
typename T,
typename Arg>
644 decltype(library_interface<stdex::remove_cvref_t<T>>::diagonal_of), Arg>>>
648 template<
typename T,
typename Arg>
657 #ifdef __cpp_concepts 658 template<
typename Arg>
659 concept conjugate_defined_for = requires (Arg arg) {
665 template<
typename Arg,
typename =
void>
668 template<
typename Arg>
670 decltype(library_interface<stdex::remove_cvref_t<Arg>>::conjugate), Arg>>>
674 template<
typename Arg>
683 #ifdef __cpp_concepts 684 template<
typename Arg, std::
size_t indexa, std::
size_t indexb>
685 concept transpose_defined_for = requires (Arg arg) {
686 std::invoke(
library_interface<std::remove_cvref_t<Arg>>::
template transpose<indexa, indexb>, std::forward<Arg>(arg));
691 template<
typename Arg, std::
size_t indexa, std::
size_t indexb,
typename =
void>
694 template<
typename Arg, std::
size_t indexa, std::
size_t indexb>
696 decltype(library_interface<stdex::remove_cvref_t<Arg>>::template transpose<indexa, indexb>), Arg&&>>>
700 template<
typename Arg, std::
size_t indexa, std::
size_t indexb>
705 #ifdef __cpp_concepts 706 template<
typename Arg>
707 concept matrix_transpose_defined_for = requires (Arg arg) {
713 template<
typename Arg,
typename =
void>
716 template<
typename Arg>
718 decltype(library_interface<stdex::remove_cvref_t<Arg>>::transpose), Arg&&>>>
722 template<
typename Arg>
731 #ifdef __cpp_concepts 732 template<
typename Arg, std::
size_t indexa, std::
size_t indexb>
733 concept adjoint_defined_for = requires (Arg arg) {
734 std::invoke(
library_interface<std::remove_cvref_t<Arg>>::
template adjoint<indexa, indexb>, std::forward<Arg>(arg));
739 template<
typename Arg, std::
size_t indexa, std::
size_t indexb,
typename =
void>
742 template<
typename Arg, std::
size_t indexa, std::
size_t indexb>
744 decltype(library_interface<stdex::remove_cvref_t<Arg>>::template adjoint<indexa, indexb>), Arg&&>>>
748 template<
typename Arg, std::
size_t indexa, std::
size_t indexb>
753 #ifdef __cpp_concepts 754 template<
typename Arg>
755 concept matrix_adjoint_defined_for = requires (Arg arg) {
761 template<
typename Arg,
typename =
void>
764 template<
typename Arg>
766 decltype(library_interface<stdex::remove_cvref_t<Arg>>::adjoint), Arg&&>>>
770 template<
typename Arg>
779 #ifdef __cpp_concepts 780 template<
typename T,
typename Arg,
typename...Factors>
781 concept broadcast_defined_for = requires(Arg arg, Factors...factors) {
787 template<
typename T,
typename Arg,
typename = void,
typename...Factors>
790 template<
typename T,
typename Arg,
typename...Factors>
792 decltype(library_interface<stdex::remove_cvref_t<T>>::broadcast), Arg, Factors...>>, Factors...>
796 template<
typename T,
typename Arg,
typename...Factors>
805 #ifdef __cpp_concepts 806 template<
typename T,
typename DTup,
typename Op,
typename...Args>
807 concept n_ary_operation_defined_for = requires(DTup d_tup, Op op, Args...args) {
813 template<
typename T,
typename DTup,
typename Op,
typename = void,
typename...Args>
816 template<
typename T,
typename DTup,
typename Op,
typename...Args>
818 decltype(library_interface<stdex::remove_cvref_t<T>>::n_ary_operation), DTup, Op, Args...>>, Args...>
822 template<
typename T,
typename DTup,
typename Op,
typename...Args>
831 #ifdef __cpp_concepts 832 template<
typename T,
typename BinaryFunction,
typename Arg, std::size_t...indices>
833 concept reduce_defined_for = requires (BinaryFunction op, Arg arg) {
834 std::invoke(
library_interface<std::remove_cvref_t<T>>::
template reduce<indices...>, std::forward<BinaryFunction>(op), std::forward<Arg>(arg));
839 template<
typename T,
typename BinaryFunction,
typename Arg,
typename = void, std::size_t...indices>
842 template<
typename T,
typename BinaryFunction,
typename Arg, std::size_t...indices>
844 decltype(library_interface<stdex::remove_cvref_t<T>>::template reduce<indices...>), BinaryFunction, Arg>>, indices...>
848 template<
typename T,
typename BinaryFunction,
typename Arg, std::size_t...indices>
857 #ifdef __cpp_concepts 858 template<
typename T,
typename Arg>
859 concept determinant_defined_for = requires (Arg arg) {
865 template<
typename T,
typename Arg,
typename =
void>
868 template<
typename T,
typename Arg>
870 decltype(library_interface<stdex::remove_cvref_t<T>>::determinant), Arg>>>
874 template<
typename T,
typename Arg>
883 #ifdef __cpp_concepts 884 template<
typename T,
typename...Args>
885 concept sum_defined_for = requires(Args...args) { std::invoke(
library_interface<std::remove_cvref_t<T>>::
sum, std::forward<Args>(args)...); };
889 template<
typename T,
typename = void,
typename...Args>
892 template<
typename T,
typename...Args>
894 decltype(library_interface<stdex::remove_cvref_t<T>>::sum), Args...>>, Args...>
898 template<
typename T,
typename...Args>
907 #ifdef __cpp_concepts 908 template<
typename T,
typename Arg,
typename S>
909 concept scalar_product_defined_for = requires(Arg arg, S s) { std::invoke(
library_interface<std::remove_cvref_t<T>>::scalar_product, std::forward<Arg>(arg), std::forward<S>(s)); };
913 template<
typename T,
typename Arg,
typename S,
typename =
void>
916 template<
typename T,
typename Arg,
typename S>
918 decltype(library_interface<stdex::remove_cvref_t<T>>::scalar_product), Arg, S>>>
922 template<
typename T,
typename Arg,
typename S>
931 #ifdef __cpp_concepts 932 template<
typename T,
typename Arg,
typename S>
933 concept scalar_quotient_defined_for = requires(Arg arg, S s) { std::invoke(
library_interface<std::remove_cvref_t<T>>::scalar_quotient, std::forward<Arg>(arg), std::forward<S>(s)); };
937 template<
typename T,
typename Arg,
typename S,
typename =
void>
940 template<
typename T,
typename Arg,
typename S>
942 decltype(library_interface<stdex::remove_cvref_t<T>>::scalar_quotient), Arg, S>>>
946 template<
typename T,
typename Arg,
typename S>
955 #ifdef __cpp_concepts 956 template<
typename T,
typename A,
typename B>
957 concept contract_defined_for = requires(
A a, B b) {
963 template<
typename T,
typename A,
typename B,
typename =
void>
966 template<
typename T,
typename A,
typename B>
968 decltype(library_interface<stdex::remove_cvref_t<T>>::contract), A, B>>>
972 template<
typename T,
typename A,
typename B>
981 #ifdef __cpp_concepts 982 template<
typename T,
bool on_the_right,
typename A,
typename B>
983 concept contract_in_place_defined_for = requires(
A a, B b) {
984 std::invoke(
library_interface<std::remove_cvref_t<T>>::
template contract_in_place<on_the_right>, std::forward<A>(a), std::forward<B>(b));
989 template<
typename T,
bool on_the_right,
typename A,
typename B,
typename =
void>
992 template<
typename T,
bool on_the_right,
typename A,
typename B>
994 decltype(library_interface<stdex::remove_cvref_t<T>>::template contract_in_place<on_the_right>), A, B>>>
998 template<
typename T,
bool on_the_right,
typename A,
typename B>
1007 #ifdef __cpp_concepts 1008 template<
typename T, triangle_type tri,
typename Arg>
1009 concept cholesky_factor_defined_for = requires (Arg arg) {
1010 std::invoke(
library_interface<std::remove_cvref_t<T>>::
template cholesky_factor<tri>, std::forward<Arg>(arg));
1015 template<
typename T, triangle_type tri,
typename Arg,
typename =
void>
1018 template<
typename T, triangle_type tri,
typename Arg>
1020 decltype(library_interface<stdex::remove_cvref_t<T>>::template cholesky_factor<tri>), Arg>>>
1021 : std::true_type {};
1024 template<
typename T, triangle_type tri,
typename Arg>
1033 #ifdef __cpp_concepts 1034 template<
typename T, HermitianAdapterType significant_triangle,
typename A,
typename U,
typename Alpha>
1035 concept rank_update_self_adjoint_defined_for = requires (
A a, U u, Alpha alpha) {
1036 std::invoke(
library_interface<std::remove_cvref_t<T>>::
template rank_update_hermitian<significant_triangle>, std::forward<A>(a), std::forward<U>(u), alpha);
1041 template<
typename T, HermitianAdapterType significant_triangle,
typename A,
typename U,
typename Alpha,
typename =
void>
1044 template<
typename T, HermitianAdapterType significant_triangle,
typename A,
typename U,
typename Alpha>
1046 decltype(library_interface<stdex::remove_cvref_t<T>>::template rank_update_hermitian<significant_triangle>), A, U, Alpha>>>
1047 : std::true_type {};
1050 template<
typename T, HermitianAdapterType significant_triangle,
typename A,
typename U,
typename Alpha>
1059 #ifdef __cpp_concepts 1060 template<
typename T, triangle_type tri,
typename A,
typename U,
typename Alpha>
1061 concept rank_update_triangular_defined_for = requires (
A a, U u, Alpha alpha) {
1062 std::invoke(
library_interface<std::remove_cvref_t<T>>::
template rank_update_triangular<tri>, std::forward<A>(a), std::forward<U>(u), alpha);
1067 template<
typename T, triangle_type tri,
typename A,
typename U,
typename Alpha,
typename =
void>
1070 template<
typename T, triangle_type tri,
typename A,
typename U,
typename Alpha>
1072 decltype(library_interface<stdex::remove_cvref_t<T>>::template rank_update_triangular<tri>), A, U, Alpha>>>
1073 : std::true_type {};
1076 template<
typename T, triangle_type tri,
typename A,
typename U,
typename Alpha>
1085 #ifdef __cpp_concepts 1086 template<
typename T,
bool must_be_unique,
bool must_be_exact,
typename A,
typename B>
1087 concept solve_defined_for = requires(
A a, B b) {
1088 std::invoke(
library_interface<std::remove_cvref_t<T>>::
template solve<must_be_unique, must_be_exact>, std::forward<A>(a), std::forward<B>(b));
1093 template<
typename T,
bool must_be_unique,
bool must_be_exact,
typename A,
typename B,
typename =
void>
1096 template<
typename T,
bool must_be_unique,
bool must_be_exact,
typename A,
typename B>
1098 decltype(library_interface<stdex::remove_cvref_t<T>>::template solve<must_be_unique, must_be_exact>), A, B>>>
1099 : std::true_type {};
1102 template<
typename T,
bool must_be_unique,
bool must_be_exact,
typename A,
typename B>
1111 #ifdef __cpp_concepts 1112 template<
typename T,
typename Arg>
1113 concept LQ_decomposition_defined_for = requires (Arg arg) {
1119 template<
typename T,
typename Arg,
typename =
void>
1122 template<
typename T,
typename Arg>
1124 decltype(library_interface<stdex::remove_cvref_t<T>>::LQ_decomposition), Arg>>>
1125 : std::true_type {};
1128 template<
typename T,
typename Arg>
1137 #ifdef __cpp_concepts 1138 template<
typename T,
typename Arg>
1139 concept QR_decomposition_defined_for = requires (Arg arg) {
1145 template<
typename T,
typename Arg,
typename =
void>
1148 template<
typename T,
typename Arg>
1150 decltype(library_interface<stdex::remove_cvref_t<T>>::QR_decomposition), Arg>>>
1151 : std::true_type {};
1154 template<
typename T,
typename Arg>
Definition: interfaces-defined.hpp:140
decltype(auto) constexpr from_euclidean(Arg &&arg, const V &v)
Project the Euclidean vector space associated with index 0 to coordinates::pattern v after applying d...
Definition: from_euclidean.hpp:35
constexpr auto 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...
Definition: n_ary_operation.hpp:325
Definition: interfaces-defined.hpp:1146
decltype(auto) constexpr contract(A &&a, B &&b)
Matrix multiplication of A * B.
Definition: contract.hpp:54
Definition: interfaces-defined.hpp:614
Definition: interfaces-defined.hpp:198
Definition: basics.hpp:41
Definition: interfaces-defined.hpp:65
Definition: interfaces-defined.hpp:1042
Definition: interfaces-defined.hpp:740
Definition: interfaces-defined.hpp:938
Definition: interfaces-defined.hpp:714
decltype(auto) constexpr conjugate(Arg &&arg)
Take the complex conjugate of an indexible object.
Definition: conjugate.hpp:44
Definition: interfaces-defined.hpp:914
Definition: interfaces-defined.hpp:302
Definition: interfaces-defined.hpp:1068
Definition: interfaces-defined.hpp:458
Definition: interfaces-defined.hpp:115
decltype(auto) constexpr get_pattern_collection(T &&t)
Get the coordinates::pattern_collection associated with indexible object T.
Definition: get_pattern_collection.hpp:59
decltype(auto) constexpr QR_decomposition(A &&a)
Perform a QR decomposition of matrix A=Q[U,0], U is a upper-triangular matrix, and Q is orthogonal...
Definition: QR_decomposition.hpp:33
Definition: interfaces-defined.hpp:762
HermitianAdapterType
The type of a hermitian adapter, indicating which triangle of the nested matrix is used...
Definition: enumerations.hpp:79
Definition: interfaces-defined.hpp:588
constexpr bool value
T is a fixed or dynamic value that is reducible to a number.
Definition: value.hpp:45
decltype(auto) constexpr to_diagonal(Arg &&arg)
Convert an indexible object into a diagonal matrix.
Definition: to_diagonal.hpp:33
Definition: interfaces-defined.hpp:380
Enumerations relating to linear algebra.
Definition: interfaces-defined.hpp:178
decltype(auto) constexpr broadcast(Arg &&arg, const Factors &...factors)
Broadcast an object by replicating it by factors specified for each index.
Definition: broadcast.hpp:49
Definition: interfaces-defined.hpp:990
Definition: interfaces-defined.hpp:510
Definition: interfaces-defined.hpp:890
Definition: interfaces-defined.hpp:964
Definition: interfaces-defined.hpp:39
Forward declaration of object_traits, which must be defined for all objects used in OpenKalman...
An interface to various routines from the linear algebra library associated with indexible object T...
Definition: library_interface.hpp:42
Forward declaration of library_interface, which must be defined for all objects used in OpenKalman...
Definition: object_traits.hpp:38
decltype(auto) constexpr transpose(Arg &&arg)
Swap any two indices of an indexible_object.
Definition: transpose.hpp:163
constexpr auto determinant(Arg &&arg)
Take the determinant of a matrix.
Definition: determinant.hpp:44
Definition: interfaces-defined.hpp:840
decltype(auto) constexpr diagonal_of(Arg &&arg)
Extract a column vector (or column slice for rank>2 tensors) comprising the diagonal elements...
Definition: diagonal_of.hpp:36
Definition: interfaces-defined.hpp:354
Definition: interfaces-defined.hpp:406
Definition: interfaces-defined.hpp:666
decltype(auto) constexpr to_euclidean(Arg &&arg)
Project the vector space associated with index 0 to a Euclidean space for applying directional statis...
Definition: to_euclidean.hpp:38
Definition: interfaces-defined.hpp:814
Definition: interfaces-defined.hpp:562
Definition: interfaces-defined.hpp:250
Definition: interfaces-defined.hpp:328
decltype(auto) constexpr sum(Ts &&...ts)
Element-by-element sum of one or more objects.
Definition: sum.hpp:112
Definition: interfaces-defined.hpp:788
Definition: interfaces-defined.hpp:692
decltype(auto) constexpr LQ_decomposition(A &&a)
Perform an LQ decomposition of matrix A=[L,0]Q, L is a lower-triangular matrix, and Q is orthogonal...
Definition: LQ_decomposition.hpp:33
Definition: interfaces-defined.hpp:224
Definition: interfaces-defined.hpp:484
constexpr auto make_constant(C c, stdex::extents< IndexType, Extents... > extents)
Make an indexible object in which every element is a constant value.
Definition: make_constant.hpp:39
Definition: interfaces-defined.hpp:165
Definition: interfaces-defined.hpp:866
decltype(auto) constexpr adjoint(Arg &&arg)
Take the conjugate-transpose of an indexible_object.
Definition: adjoint.hpp:35
Definition: interfaces-defined.hpp:1120
Definition: interfaces-defined.hpp:276
decltype(auto) constexpr nested_object(Arg &&arg)
Retrieve a nested object of Arg, if it exists.
Definition: nested_object.hpp:35
Definition: interfaces-defined.hpp:90
Definition: interfaces-defined.hpp:1094
Definition: interfaces-defined.hpp:1016
Definition: interfaces-defined.hpp:640
A matrix with typed rows and columns.
Definition: forward-class-declarations.hpp:292
Definition: interfaces-defined.hpp:432
Definition: interfaces-defined.hpp:536
constexpr Arg && set_slice(Arg &&arg, Block &&block, const Begin &...begin)
Assign an object to a particular slice of a matrix or tensor.
Definition: set_slice.hpp:56