16 #ifndef OPENKALMAN_FORWARD_CLASS_DECLARATIONS_HPP 17 #define OPENKALMAN_FORWARD_CLASS_DECLARATIONS_HPP 19 #include "coordinates/coordinates.hpp" 35 template<vector<0, applicability::permitted> NestedMatrix>
37 template<
typename NestedMatrix>
49 template<
typename NestedMatrix>
84 template<square_shaped<applicability::permitted> NestedMatrix, HermitianAdapterType storage_triangle =
85 triangular_matrix<NestedMatrix, triangle_type::diagonal> ? HermitianAdapterType::lower :
86 triangular_matrix<NestedMatrix, triangle_type::upper> ? HermitianAdapterType::upper : HermitianAdapterType::lower> requires
87 (index_count_v<NestedMatrix> <= 2) and
90 (not constant_diagonal_matrix<NestedMatrix> or values::
not_complex<constant_diagonal_value<NestedMatrix>>) and
107 template<
typename NestedMatrix, HermitianAdapterType storage_triangle>
116 #ifdef __cpp_concepts 137 #ifdef __cpp_concepts 139 square_shaped<applicability::permitted> NestedMatrix,
142 requires (index_count_v<NestedMatrix> <= 2)
144 template<
typename NestedMatrix, triangle_type tri = (diagonal_matrix<NestedMatrix> ? triangle_type::diagonal :
145 (triangular_matrix<NestedMatrix, triangle_type::upper> ? triangle_type::upper : triangle_type::lower))>
157 template<
typename NestedMatrix, triangle_type tri>
166 #ifdef __cpp_concepts 184 #ifdef __cpp_concepts 185 template<indexible NestedObject, coordinates::pattern RowDescriptor> requires
188 template<
typename NestedMatrix,
typename RowDescriptor>
198 template<
typename NestedMatrix,
typename D>
207 #ifdef __cpp_concepts 223 #ifdef __cpp_concepts 224 template<indexible NestedObject> requires (not from_euclidean_expr<NestedObject>)
226 template<
typename NestedObject>
236 template<
typename NestedObject>
245 #ifdef __cpp_concepts 256 #ifdef __cpp_concepts 257 concept
euclidean_expr = to_euclidean_expr<T> or from_euclidean_expr<T>;
259 constexpr
bool euclidean_expr = from_euclidean_expr<T> or to_euclidean_expr<T>;
282 #ifdef __cpp_concepts 283 template<fixed_pattern RowCoefficients, fixed_pattern ColumnCoefficients, typed_matrix_nestable NestedMatrix>
284 requires (coordinates::dimension_of_v<RowCoefficients> == index_dimension_of_v<NestedMatrix, 0>) and
285 (coordinates::dimension_of_v<ColumnCoefficients> == index_dimension_of_v<NestedMatrix, 1>) and
286 (not std::is_rvalue_reference_v<NestedMatrix>) and
287 (dynamic_pattern<RowCoefficients> == dynamic_dimension<NestedMatrix, 0>) and
288 (dynamic_pattern<ColumnCoefficients> == dynamic_dimension<NestedMatrix, 1>)
290 template<
typename RowCoefficients,
typename ColumnCoefficients,
typename NestedMatrix>
297 template<
typename RowCoefficients,
typename ColumnCoefficients,
typename NestedMatrix>
298 struct is_matrix<
Matrix<RowCoefficients, ColumnCoefficients, NestedMatrix>> : std::true_type {};
314 #ifdef __cpp_concepts 315 template<fixed_pattern Descriptor, typed_matrix_nestable NestedMatrix> requires
316 (coordinates::dimension_of_v<Descriptor> == index_dimension_of_v<NestedMatrix, 0>) and
317 (not std::is_rvalue_reference_v<NestedMatrix>)
319 template<
typename Descriptor,
typename NestedMatrix>
326 template<
typename Descriptor,
typename NestedMatrix>
327 struct is_mean<
Mean<Descriptor, NestedMatrix>> : std::true_type {};
343 #ifdef __cpp_concepts 344 template<fixed_pattern Descriptor, typed_matrix_nestable NestedMatrix> requires
345 (coordinates::stat_dimension_of_v<Descriptor> == index_dimension_of_v<NestedMatrix, 0>) and (not std::is_rvalue_reference_v<NestedMatrix>)
347 template<
typename Descriptor,
typename NestedMatrix>
354 template<
typename Descriptor,
typename NestedMatrix>
368 #ifdef __cpp_concepts 369 template<fixed_pattern Descriptor, covariance_nestable NestedMatrix> requires
370 (coordinates::dimension_of_v<Descriptor> == index_dimension_of_v<NestedMatrix, 0>) and
371 (not std::is_rvalue_reference_v<NestedMatrix>) and values::number<scalar_type_of_t<NestedMatrix>>
373 template<
typename Descriptor,
typename NestedMatrix>
380 template<
typename Descriptor,
typename NestedMatrix>
396 #ifdef __cpp_concepts 397 template<fixed_pattern Descriptor, covariance_nestable NestedMatrix> requires
398 (coordinates::dimension_of_v<Descriptor> == index_dimension_of_v<NestedMatrix, 0>) and
399 (not std::is_rvalue_reference_v<NestedMatrix>) and values::number<scalar_type_of_t<NestedMatrix>>
401 template<
typename Descriptor,
typename NestedMatrix>
419 #ifdef __cpp_concepts 420 template<indexible NestedObject, indexible LibraryObject>
422 template<
typename NestedObject,
typename LibraryObject>
432 template<
typename N,
typename L>
442 #ifdef __cpp_concepts 443 concept library_wrapper =
445 constexpr
bool library_wrapper =
457 #ifdef __cpp_concepts 458 template<indexible NestedObject, pattern_collection Descriptors> requires
459 compatible_with_vector_space_descriptor_collection<NestedObject, Descriptors> and
460 internal::not_more_fixed_than<NestedObject, Descriptors> and internal::less_fixed_than<NestedObject, Descriptors>
462 template<
typename NestedObject,
typename Descriptors>
472 template<
typename NestedMatrix,
typename Descriptors>
482 #ifdef __cpp_concepts 483 concept fixed_size_adapter =
485 constexpr
bool fixed_size_adapter =
490 template<
typename Descriptor,
typename NestedMatrix>
504 #ifdef __cpp_concepts 509 std::uniform_random_bit_generator random_number_engine = std::mt19937> requires
510 (index_dimension_of_v<MeanNestedMatrix, 0> == index_dimension_of_v<CovarianceNestedMatrix, 0>) and
511 (index_dimension_of_v<MeanNestedMatrix, 1> == 1) and
512 (std::is_same_v<scalar_type_of_t<MeanNestedMatrix>,
513 scalar_type_of_t<CovarianceNestedMatrix>>)
517 typename MeanNestedMatrix,
518 typename CovarianceNestedMatrix,
519 typename random_number_engine = std::mt19937>
526 template<
typename Descriptor,
typename MeanNestedMatrix,
typename CovarianceNestedMatrix,
typename re>
A hermitian matrix wrapper.
Definition: HermitianAdapter.hpp:33
triangle_type
The type of a triangular matrix.
Definition: enumerations.hpp:26
Definition: forward-class-declarations.hpp:47
constexpr bool to_euclidean_expr
Specifies that T is an expression converting coefficients to Euclidean space (i.e., ToEuclideanExpr).
Definition: forward-class-declarations.hpp:248
An expression that transforms angular or other modular vector space descriptors back from Euclidean s...
Definition: FromEuclideanExpr.hpp:29
constexpr bool euclidean_expr
Specifies that T is either to_euclidean_expr or from_euclidean_expr.
Definition: forward-class-declarations.hpp:259
A set of one or more column vectors, each representing a statistical mean.
Definition: forward-class-declarations.hpp:321
A lower-left triangular matrix.
The concept, trait, or restraint is permitted, but whether it applies is not necessarily known at com...
A triangular_adapter, where components above or below the diagonal (or both) are zero.
Definition: forward-class-declarations.hpp:147
HermitianAdapterType
The type of a hermitian adapter, indicating which triangle of the nested matrix is used...
Definition: enumerations.hpp:79
constexpr bool not_complex
T is a value in which either its type is not complex or its imaginary component is 0...
Definition: not_complex.hpp:48
Definition: forward-class-declarations.hpp:155
constexpr bool value
T is a fixed or dynamic value that is reducible to a number.
Definition: value.hpp:45
A diagonal matrix (both a lower-left and an upper-right triangular matrix).
Definition: object-types.hpp:121
Definition: object-types.hpp:29
diagonal_adapter(Arg &&) -> diagonal_adapter< Arg >
Deduce diagonal_adapter NestedObject from its constructor argument.
Definition: forward-class-declarations.hpp:430
constexpr bool triangular_matrix
Specifies that an argument is an indexible object having a given triangle_type (e.g., upper, lower, or diagonal).
Definition: triangular_matrix.hpp:36
Definition: object-types.hpp:172
Definition: object-types.hpp:64
constexpr bool hermitian_expr
Specifies that T is a self-adjoint matrix based on the Eigen library (i.e., HermitianAdapter).
Definition: forward-class-declarations.hpp:119
Lower, upper, or diagonal matrix.
The upper or lower triangle Cholesky factor (square root) of a covariance matrix. ...
Definition: forward-class-declarations.hpp:403
A Gaussian distribution, defined in terms of a Mean and a Covariance.
Definition: GaussianDistribution.hpp:42
constexpr bool typed_matrix_nestable
Specifies a type that is nestable in a general typed matrix (e.g., matrix, mean, or euclidean_mean) ...
Definition: object-types.hpp:253
Similar to a Mean, but the coefficients are transformed into Euclidean space, based on their type...
Definition: EuclideanMean.hpp:29
The root namespace for OpenKalman.
Definition: basics.hpp:34
An adapter for creating a diagonal matrix or tensor.
Definition: diagonal_adapter.hpp:27
constexpr bool from_euclidean_expr
Specifies that T is an expression converting coefficients from Euclidean space (i.e., FromEuclideanExpr).
Definition: forward-class-declarations.hpp:210
constexpr bool fixed_pattern
A coordinates::pattern for which the dimension is fixed at compile time.
Definition: fixed_pattern.hpp:46
An expression that transforms vector space descriptors into Euclidean space for application of direct...
Definition: forward-class-declarations.hpp:228
constexpr bool diagonal_expr
Specifies that T is a diagonal matrix based on the Eigen library (i.e., DiaginalMatrix).
Definition: forward-class-declarations.hpp:61
Definition: forward-class-declarations.hpp:105
Definition: FixedSizeAdapter.hpp:30
An upper-right triangular matrix.
Definition: forward-class-declarations.hpp:470
constexpr auto constant_value(T &&t)
The constant value associated with a constant_object or constant_diagonal_object. ...
Definition: constant_value.hpp:37
A structure representing the dimensions associated with of a particular index.
Definition: Dimensions.hpp:42
A self-adjoint Covariance matrix.
Definition: Covariance.hpp:30
constexpr bool triangular_expr
Specifies that T is a triangular matrix based on the Eigen library (i.e., TriangularAdapter).
Definition: forward-class-declarations.hpp:169
Definition: forward-class-declarations.hpp:196
Definition: forward-class-declarations.hpp:234
constexpr bool covariance_nestable
T is an acceptable nested matrix for a covariance (including triangular_covariance).
Definition: object-types.hpp:237
Definition: object-types.hpp:139
Definition: forward-class-declarations.hpp:424
Definition: object-types.hpp:99
A matrix with typed rows and columns.
Definition: forward-class-declarations.hpp:292