Uni20
Asynchronous tensor and runtime library.
Loading...
Searching...
No Matches
Namespaces | Concepts | Functions
decompositions_packed.hpp File Reference

Logical host adapters for value-converting dense decompositions. More...

#include "common.hpp"
#include "packed_decomposition_capabilities.hpp"
#include <algorithm>
#include <span>
#include <uni20/linalg/backends/packed_matrix.hpp>
#include <uni20/linalg/operation_tags.hpp>
#include <utility>
#include <vector>
Include dependency graph for decompositions_packed.hpp:

Go to the source code of this file.

Namespaces

namespace  uni20
 
namespace  uni20::linalg
 
namespace  uni20::linalg::packed_detail
 

Concepts

concept  uni20::linalg::packed_detail::DecompositionMatrix
 
concept  uni20::linalg::packed_detail::DecompositionValues
 
concept  uni20::linalg::packed_detail::SameMatrixScalar
 

Functions

template<class V , class A >
auto uni20::linalg::packed_detail::compute_svd (V &v, A &a, char jobu, char jobvt, Precision p)
 
template<packed_detail::DecompositionMatrix A, class X , class Y , class... P>
requires packed_detail::SameMatrixScalar<A, X> && packed_detail::SameMatrixScalar<A, Y> && packed_detail::LqScalar<typename A::value_type> && packed_detail::KernelPrecision<typename A::value_type, P...>
consteval auto uni20::linalg::kernel_accepts_types (LapackBackend, lq_op const &, X &, Y &, A &, P... precision)
 Accept real or complex host matrices for reduced LQ at explicit precision.
 
template<packed_detail::DecompositionMatrix A, packed_detail::DecompositionMatrix R, class... P>
requires std::same_as<typename R::value_type, complex<make_real_t<typename A::value_type>>> && packed_detail::EigenScalar<typename A::value_type> && packed_detail::KernelPrecision<typename A::value_type, P...>
consteval auto uni20::linalg::kernel_accepts_types (LapackBackend, nonsymmetric_eigen_op const &, A &, std::span< typename R::value_type >, R &, P... precision)
 Accept real or complex input and actual complex eigenvalue/vector outputs.
 
template<packed_detail::DecompositionMatrix A, class X , class Y , class... P>
requires packed_detail::SameMatrixScalar<A, X> && packed_detail::SameMatrixScalar<A, Y> && packed_detail::QrScalar<typename A::value_type> && packed_detail::KernelPrecision<typename A::value_type, P...>
consteval auto uni20::linalg::kernel_accepts_types (LapackBackend, qr_op const &, X &, Y &, A &, P... precision)
 Accept real or complex host matrices for reduced QR at explicit precision.
 
template<class V , packed_detail::DecompositionMatrix A, class... P>
requires packed_detail::EighScalar<typename A::value_type> && packed_detail::KernelPrecision<typename A::value_type, P...> && packed_detail::DecompositionValues<V, A>
consteval auto uni20::linalg::kernel_accepts_types (LapackBackend, self_adjoint_eigh_op const &, V &, A &, P... precision)
 Accept matching real eigenvalues and real or complex host matrix storage.
 
template<class V , packed_detail::DecompositionMatrix A, class... P>
requires packed_detail::SvdScalar<typename A::value_type> && packed_detail::KernelPrecision<typename A::value_type, P...> && packed_detail::DecompositionValues<V, A>
consteval auto uni20::linalg::kernel_accepts_types (LapackBackend, singular_values_op const &op, V &v, A &a, P... precision)
 Accept explicit-precision SVD with the requested output structure.
 
template<class V , packed_detail::DecompositionMatrix A, class... P>
requires packed_detail::SvdScalar<typename A::value_type> && packed_detail::KernelPrecision<typename A::value_type, P...> && packed_detail::DecompositionValues<V, A>
consteval auto uni20::linalg::kernel_accepts_types (LapackBackend, svd_left_op const &op, V &v, A &a, P... precision)
 Accept explicit-precision SVD with the requested output structure.
 
template<class V , packed_detail::DecompositionMatrix A, class L , class... P>
requires packed_detail::SameMatrixScalar<A, L> && packed_detail::SvdScalar<typename A::value_type> && packed_detail::KernelPrecision<typename A::value_type, P...> && packed_detail::DecompositionValues<V, A>
consteval auto uni20::linalg::kernel_accepts_types (LapackBackend, svd_left_op const &op, V &v, L &l, A &a, P... precision)
 Accept explicit-precision SVD with the requested output structure.
 
template<class V , packed_detail::DecompositionMatrix A, class F , class... P>
requires packed_detail::SameMatrixScalar<A, F> && packed_detail::SvdScalar<typename A::value_type> && packed_detail::KernelPrecision<typename A::value_type, P...> && packed_detail::DecompositionValues<V, A>
consteval auto uni20::linalg::kernel_accepts_types (LapackBackend, svd_op const &op, V &v, F &f, A &a, P... precision)
 Accept explicit-precision SVD with the requested output structure.
 
template<class V , packed_detail::DecompositionMatrix A, class L , class R , class... P>
requires packed_detail::SameMatrixScalar<A, L> && packed_detail::SameMatrixScalar<A, R> && packed_detail::SvdScalar<typename A::value_type> && packed_detail::KernelPrecision<typename A::value_type, P...> && packed_detail::DecompositionValues<V, A>
consteval auto uni20::linalg::kernel_accepts_types (LapackBackend, svd_op const &op, V &v, L &l, R &r, A &a, P... precision)
 Accept explicit-precision SVD with the requested output structure.
 
template<class V , packed_detail::DecompositionMatrix A, class... P>
requires packed_detail::SvdScalar<typename A::value_type> && packed_detail::KernelPrecision<typename A::value_type, P...> && packed_detail::DecompositionValues<V, A>
consteval auto uni20::linalg::kernel_accepts_types (LapackBackend, svd_right_op const &op, V &v, A &a, P... precision)
 Accept explicit-precision SVD with the requested output structure.
 
template<class V , packed_detail::DecompositionMatrix A, class R , class... P>
requires packed_detail::SameMatrixScalar<A, R> && packed_detail::SvdScalar<typename A::value_type> && packed_detail::KernelPrecision<typename A::value_type, P...> && packed_detail::DecompositionValues<V, A>
consteval auto uni20::linalg::kernel_accepts_types (LapackBackend, svd_right_op const &op, V &v, R &r, A &a, P... precision)
 Accept explicit-precision SVD with the requested output structure.
 
template<class A >
void uni20::linalg::packed_detail::require_matrix (A const &a, std::size_t rows, std::size_t cols)
 
template<packed_detail::DecompositionMatrix A, class X , class Y , class... P>
requires packed_detail::SameMatrixScalar<A, X> && packed_detail::SameMatrixScalar<A, Y> && packed_detail::LqScalar<typename A::value_type> && packed_detail::KernelPrecision<typename A::value_type, P...>
KernelAttempt uni20::linalg::try_kernel (LapackBackend, lq_op const &, X &l, Y &q, A &a, P... precision)
 Pack logical elements and compute reduced LQ through MPLAPACK.
 
template<packed_detail::DecompositionMatrix A, packed_detail::DecompositionMatrix R, class... P>
requires std::same_as<typename R::value_type, complex<make_real_t<typename A::value_type>>> && packed_detail::EigenScalar<typename A::value_type> && packed_detail::KernelPrecision<typename A::value_type, P...>
KernelAttempt uni20::linalg::try_kernel (LapackBackend, nonsymmetric_eigen_op const &op, A &a, std::span< typename R::value_type > v, R &r, P... precision)
 Unpack real conjugate pairs into complex columns; omit unread vector output when disabled.
 
template<packed_detail::DecompositionMatrix A, class X , class Y , class... P>
requires packed_detail::SameMatrixScalar<A, X> && packed_detail::SameMatrixScalar<A, Y> && packed_detail::QrScalar<typename A::value_type> && packed_detail::KernelPrecision<typename A::value_type, P...>
KernelAttempt uni20::linalg::try_kernel (LapackBackend, qr_op const &, X &q, Y &r, A &a, P... precision)
 Pack logical elements and compute reduced QR through MPLAPACK.
 
template<class V , packed_detail::DecompositionMatrix A, class... P>
requires packed_detail::EighScalar<typename A::value_type> && packed_detail::KernelPrecision<typename A::value_type, P...> && packed_detail::DecompositionValues<V, A>
KernelAttempt uni20::linalg::try_kernel (LapackBackend, self_adjoint_eigh_op const &op, V &v, A &a, P... precision)
 Read only the selected triangle and return values and optional vectors at p.
 
template<class V , packed_detail::DecompositionMatrix A, class... P>
requires packed_detail::SvdScalar<typename A::value_type> && packed_detail::KernelPrecision<typename A::value_type, P...> && packed_detail::DecompositionValues<V, A>
KernelAttempt uni20::linalg::try_kernel (LapackBackend, singular_values_op const &op, V &v, A &a, P... precision)
 Compute the requested SVD factors through logical host packing.
 
template<class V , packed_detail::DecompositionMatrix A, class... P>
requires packed_detail::SvdScalar<typename A::value_type> && packed_detail::KernelPrecision<typename A::value_type, P...> && packed_detail::DecompositionValues<V, A>
KernelAttempt uni20::linalg::try_kernel (LapackBackend, svd_left_op const &op, V &v, A &a, P... precision)
 Compute the requested SVD factors through logical host packing.
 
template<class V , packed_detail::DecompositionMatrix A, class L , class... P>
requires packed_detail::SameMatrixScalar<A, L> && packed_detail::SvdScalar<typename A::value_type> && packed_detail::KernelPrecision<typename A::value_type, P...> && packed_detail::DecompositionValues<V, A>
KernelAttempt uni20::linalg::try_kernel (LapackBackend, svd_left_op const &op, V &v, L &l, A &a, P... precision)
 Compute the requested SVD factors through logical host packing.
 
template<class V , packed_detail::DecompositionMatrix A, class F , class... P>
requires packed_detail::SameMatrixScalar<A, F> && packed_detail::SvdScalar<typename A::value_type> && packed_detail::KernelPrecision<typename A::value_type, P...> && packed_detail::DecompositionValues<V, A>
KernelAttempt uni20::linalg::try_kernel (LapackBackend, svd_op const &op, V &v, F &f, A &a, P... precision)
 Compute the requested SVD factors through logical host packing.
 
template<class V , packed_detail::DecompositionMatrix A, class L , class R , class... P>
requires packed_detail::SameMatrixScalar<A, L> && packed_detail::SameMatrixScalar<A, R> && packed_detail::SvdScalar<typename A::value_type> && packed_detail::KernelPrecision<typename A::value_type, P...> && packed_detail::DecompositionValues<V, A>
KernelAttempt uni20::linalg::try_kernel (LapackBackend, svd_op const &op, V &v, L &l, R &r, A &a, P... precision)
 Compute the requested SVD factors through logical host packing.
 
template<class V , packed_detail::DecompositionMatrix A, class... P>
requires packed_detail::SvdScalar<typename A::value_type> && packed_detail::KernelPrecision<typename A::value_type, P...> && packed_detail::DecompositionValues<V, A>
KernelAttempt uni20::linalg::try_kernel (LapackBackend, svd_right_op const &op, V &v, A &a, P... precision)
 Compute the requested SVD factors through logical host packing.
 
template<class V , packed_detail::DecompositionMatrix A, class R , class... P>
requires packed_detail::SameMatrixScalar<A, R> && packed_detail::SvdScalar<typename A::value_type> && packed_detail::KernelPrecision<typename A::value_type, P...> && packed_detail::DecompositionValues<V, A>
KernelAttempt uni20::linalg::try_kernel (LapackBackend, svd_right_op const &op, V &v, R &r, A &a, P... precision)
 Compute the requested SVD factors through logical host packing.
 
char uni20::linalg::packed_detail::vector_job (SvdVectorExtent extent)
 

Detailed Description

Logical host adapters for value-converting dense decompositions.