Uni20
Asynchronous tensor and runtime library.
Loading...
Searching...
No Matches
packed_decomposition_capabilities.hpp
Go to the documentation of this file.
1#pragma once
2
7#include <span>
8#include <uni20/config.hpp>
11#if UNI20_HAS_MPLAPACK_MPREAL
13#endif
14#if UNI20_HAS_MPLAPACK_FLOAT80
16#endif
17
19{
20// Fixed scalars omit precision at the kernel boundary; runtime scalars require it.
21template <class S, class... P>
22concept KernelPrecision = (has_runtime_precision_v<S> && sizeof...(P) == 1 && (std::same_as<P, Precision> && ...)) ||
23 (!has_runtime_precision_v<S> && sizeof...(P) == 0);
24template <class S> Precision working_precision() { return native_precision<S>(); }
26{
27 require_precision<S>(p);
28 return p;
29}
30template <class S>
31concept QrScalar = requires(std::size_t n, std::span<S> a, Precision p) { mplapack::qr(n, n, a, a, a, p); };
32template <class S>
33concept LqScalar = requires(std::size_t n, std::span<S> a, Precision p) { mplapack::lq(n, n, a, a, a, p); };
34template <class S>
35concept EighScalar = requires(std::size_t n, std::span<S> a, std::span<make_real_t<S>> v, Precision p) {
36 mplapack::eigh(n, a, v, true, 'U', p);
37};
38template <class S>
39concept SvdScalar = requires(std::size_t n, std::span<S> a, std::span<make_real_t<S>> v, Precision p) {
40 mplapack::svd(n, n, a, v, a, a, 'S', 'S', p);
41};
42template <class S>
43concept EigenScalar = requires(std::size_t n, std::span<S> a, std::span<complex<make_real_t<S>>> z, Precision p) {
44 mplapack::eigen(n, a, z, z, true, p);
45};
46} // namespace uni20::linalg::packed_detail
Synchronous packed-array boundary to the serial MPFR/MPC provider.
Exact arithmetic or an explicit binary working precision.
Definition core/precision.hpp:13
Definition packed_decomposition_capabilities.hpp:43
Definition packed_decomposition_capabilities.hpp:35
Definition packed_decomposition_capabilities.hpp:22
Definition packed_decomposition_capabilities.hpp:33
Definition packed_decomposition_capabilities.hpp:31
Definition packed_decomposition_capabilities.hpp:39
Definition decompositions_packed.hpp:21
Precision working_precision()
Definition packed_decomposition_capabilities.hpp:24
void eigen(std::size_t n, std::span< float80 > a, std::span< complex160 > values, std::span< complex160 > vectors, bool compute_vectors, Precision p)
Compute unsorted complex eigenvalues and optional right eigenvectors, destroying a.
Definition binary80.cpp:248
void lq(std::size_t m, std::size_t n, std::span< float80 > a, std::span< float80 > q, std::span< float80 > triangular, Precision p)
Overwrite m-by-n input work and return Q (k-by-n) and L (m-by-k), k=min(m,n).
Definition binary80.cpp:231
void eigh(std::size_t n, std::span< float80 > a, std::span< float80 > values, bool vectors, char triangle, Precision p)
Compute ascending eigenvalues and optionally overwrite a with eigenvector columns.
Definition binary80.cpp:237
void svd(std::size_t m, std::size_t n, std::span< float80 > a, std::span< float80 > values, std::span< float80 > u, std::span< float80 > vh, char jobu, char jobvt, Precision p)
Compute descending singular values and requested U/Vh factors, destroying a.
Definition binary80.cpp:242
void qr(std::size_t m, std::size_t n, std::span< float80 > a, std::span< float80 > q, std::span< float80 > triangular, Precision p)
Overwrite m-by-n input work and return Q (m-by-k) and R (k-by-n), k=min(m,n).
Definition binary80.cpp:225
Definition data_table.cpp:8