16 #ifndef OPENKALMAN_MAKE_TRIANGULAR_MATRIX_HPP 17 #define OPENKALMAN_MAKE_TRIANGULAR_MATRIX_HPP 27 template<triangle_type t = triangle_type::lower, indexible Arg> requires
29 constexpr triangular_matrix<t> decltype(
auto)
31 template<triangle_type t = triangle_type::lower,
typename Arg, std::enable_if_t<indexible<Arg> and
32 (t == triangle_type::lower or t == triangle_type::upper or t == triangle_type::diagonal),
int> = 0>
33 constexpr decltype(
auto)
37 if constexpr (triangular_matrix<Arg, t>)
40 return std::forward<Arg>(arg);
46 else if constexpr (triangular_matrix<Arg, triangle_type::any> and not triangular_matrix<Arg, t>)
49 return make_triangular_matrix<triangle_type::diagonal>(std::forward<Arg>(arg));
51 else if constexpr (hermitian_adapter<Arg>)
54 return make_triangular_matrix<t>(
nested_object(std::forward<Arg>(arg)));
58 else if constexpr (interface::make_triangular_matrix_defined_for<Arg, t, Arg&&>)
61 return Traits::template make_triangular_matrix<t>(std::forward<Arg>(arg));
constexpr bool hermitian_adapter
Specifies that a type is a hermitian matrix adapter of a particular type.
Definition: hermitian_adapter.hpp:55
A lower-left triangular matrix.
A triangular_adapter, where components above or below the diagonal (or both) are zero.
Definition: forward-class-declarations.hpp:147
decltype(auto) constexpr to_diagonal(Arg &&arg)
Convert an indexible object into a diagonal matrix.
Definition: to_diagonal.hpp:33
A diagonal matrix (both a lower-left and an upper-right triangular matrix).
The root namespace for OpenKalman.
Definition: basics.hpp:34
An interface to various routines from the linear algebra library associated with indexible object T...
Definition: library_interface.hpp:42
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
An upper-right triangular matrix.
decltype(auto) constexpr adjoint(Arg &&arg)
Take the conjugate-transpose of an indexible_object.
Definition: adjoint.hpp:35
decltype(auto) constexpr nested_object(Arg &&arg)
Retrieve a nested object of Arg, if it exists.
Definition: nested_object.hpp:35
decltype(auto) constexpr make_triangular_matrix(Arg &&arg)
Create a triangular_matrix from a general matrix.
Definition: make_triangular_matrix.hpp:35