12inline constexpr bool has_builtin_blas_real_backend_v = std::same_as<T, float> || std::same_as<T, double>;
14template <
typename T>
inline constexpr bool has_builtin_lapack_real_backend_v = has_builtin_blas_real_backend_v<T>;
16template <
typename T>
inline constexpr bool has_mplapack_blas_real_backend_v =
false;
19inline constexpr bool has_builtin_blas_complex_backend_v = std::same_as<T, cfloat> || std::same_as<T, cdouble>;
21template <
typename T>
inline constexpr bool has_mplapack_blas_complex_backend_v =
false;
23template <
typename T>
inline constexpr bool has_mplapack_lapack_real_backend_v =
false;
26inline constexpr bool has_builtin_lapack_complex_backend_v = std::same_as<T, cfloat> || std::same_as<T, cdouble>;
28template <
typename T>
inline constexpr bool has_mplapack_lapack_complex_backend_v =
false;
30#if UNI20_HAS_MPLAPACK_FLOAT128
31#if defined(MPLAPACK_BINARY128_MODE) && (MPLAPACK_BINARY128_MODE != MPLAPACK_BINARY128_MODE_LDBL)
32template <>
inline constexpr bool has_mplapack_blas_real_backend_v<uni20::float128> =
true;
34template <>
inline constexpr bool has_mplapack_blas_complex_backend_v<uni20::complex<uni20::float128>> =
true;
37template <>
inline constexpr bool has_mplapack_lapack_real_backend_v<uni20::float128> =
true;
39template <>
inline constexpr bool has_mplapack_lapack_complex_backend_v<uni20::complex<uni20::float128>> =
true;
43inline constexpr bool has_blas_real_backend_v =
44 has_builtin_blas_real_backend_v<T> || has_mplapack_blas_real_backend_v<T>;
47inline constexpr bool has_blas_complex_backend_v =
48 has_builtin_blas_complex_backend_v<T> || has_mplapack_blas_complex_backend_v<T>;
51inline constexpr bool has_lapack_real_backend_v =
52 has_builtin_lapack_real_backend_v<T> || has_mplapack_lapack_real_backend_v<T>;
55inline constexpr bool has_lapack_complex_backend_v =
56 has_builtin_lapack_complex_backend_v<T> || has_mplapack_lapack_complex_backend_v<T>;
69concept Real = is_real_v<T>;
Complex scalar types supported by the configured raw-pointer BLAS wrappers.
Definition scalar_concepts.hpp:99
Real scalar types supported by the configured raw-pointer BLAS wrappers.
Definition scalar_concepts.hpp:93
Scalar types supported by the configured raw-pointer BLAS wrappers.
Definition scalar_concepts.hpp:105
Concept for scalar-valued types whose scalar_t<T> is a complex scalar.
Definition scalar_concepts.hpp:171
Concept for complex scalar types.
Definition scalar_concepts.hpp:75
Concept for scalar-valued types whose scalar_t<T> is an integer scalar.
Definition scalar_concepts.hpp:159
Concept for integer scalar types (excluding char and bool).
Definition scalar_concepts.hpp:63
Concept for real precisions whose Uni20 complex scalar has LAPACK coverage.
Definition scalar_concepts.hpp:141
Complex scalar types supported by the configured raw-pointer LAPACK wrappers.
Definition scalar_concepts.hpp:123
Concept for real or complex scalar fields with real LAPACK coverage.
Definition scalar_concepts.hpp:133
Real scalar types supported by the configured raw-pointer LAPACK wrappers.
Definition scalar_concepts.hpp:115
Concept for scalar types with a configured dense LAPACK backend.
Definition scalar_concepts.hpp:147
Concept for scalar-valued types whose scalar_t<T> is real or complex.
Definition scalar_concepts.hpp:177
Concept for types that are either real or complex.
Definition scalar_concepts.hpp:87
Concept for scalar-valued types whose scalar_t<T> is a real scalar.
Definition scalar_concepts.hpp:165
Concept for real scalar types (float, double, etc.).
Definition scalar_concepts.hpp:69
Concept for scalar types or types whose recursive value_type resolves to a scalar.
Definition scalar_concepts.hpp:153
Concept for numeric scalar types (integer, real, or complex).
Definition scalar_concepts.hpp:81
Definition async/async.hpp:26