12#include <uni20/config.hpp>
15#if !(UNI20_HAS_MPLAPACK_FLOAT128)
16#error "uni20/backend/lapack/mplapack/band.hpp requires MPLAPACK float128 support"
20#include <mplapack_config.h>
21#include <mplapack_binary128.h>
27[[nodiscard]]
inline blas_int
gbsv(blas_int n, blas_int kl, blas_int ku, blas_int nrhs, uni20::float128* ab,
28 blas_int ldab, blas_int* ipiv, uni20::float128* b, blas_int ldb)
30 UNI20_EXTERNAL_API_CALL(LAPACK, Rgbsv, n, kl, ku, nrhs, ab, ldab, ipiv, b, ldb);
31 mplapackint mplapack_info = 0;
32 std::vector<mplapackint> mplapack_ipiv = uni20::lapack::mplapack::detail::make_mplapack_int_work(n);
33 Rgbsv(
static_cast<mplapackint
>(n),
static_cast<mplapackint
>(kl),
static_cast<mplapackint
>(ku),
34 static_cast<mplapackint
>(nrhs), ab,
static_cast<mplapackint
>(ldab), mplapack_ipiv.data(), b,
35 static_cast<mplapackint
>(ldb), mplapack_info);
36 uni20::lapack::mplapack::detail::copy_from_mplapack_ints(mplapack_ipiv, ipiv, n);
37 return static_cast<blas_int
>(mplapack_info);
40[[nodiscard]]
inline blas_int
gbtrf(blas_int m, blas_int n, blas_int kl, blas_int ku, uni20::float128* ab,
41 blas_int ldab, blas_int* ipiv)
44 mplapackint mplapack_info = 0;
45 blas_int
const pivot_count = std::min(m, n);
46 std::vector<mplapackint> mplapack_ipiv = uni20::lapack::mplapack::detail::make_mplapack_int_work(pivot_count);
47 Rgbtrf(
static_cast<mplapackint
>(m),
static_cast<mplapackint
>(n),
static_cast<mplapackint
>(kl),
48 static_cast<mplapackint
>(ku), ab,
static_cast<mplapackint
>(ldab), mplapack_ipiv.data(), mplapack_info);
49 uni20::lapack::mplapack::detail::copy_from_mplapack_ints(mplapack_ipiv, ipiv, pivot_count);
50 return static_cast<blas_int
>(mplapack_info);
53[[nodiscard]]
inline blas_int
gbtrs(
char trans, blas_int n, blas_int kl, blas_int ku, blas_int nrhs,
54 uni20::float128* ab, blas_int ldab, blas_int
const* ipiv, uni20::float128* b,
57 UNI20_EXTERNAL_API_CALL(LAPACK, Rgbtrs, trans, n, kl, ku, nrhs, ab, ldab, ipiv, b, ldb);
58 mplapackint mplapack_info = 0;
59 std::vector<mplapackint> mplapack_ipiv = uni20::lapack::mplapack::detail::to_mplapack_ints(ipiv, n);
60 Rgbtrs(&trans,
static_cast<mplapackint
>(n),
static_cast<mplapackint
>(kl),
static_cast<mplapackint
>(ku),
61 static_cast<mplapackint
>(nrhs), ab,
static_cast<mplapackint
>(ldab), mplapack_ipiv.data(), b,
62 static_cast<mplapackint
>(ldb), mplapack_info);
63 return static_cast<blas_int
>(mplapack_info);
66[[nodiscard]]
inline blas_int
gbcon(
char norm, blas_int n, blas_int kl, blas_int ku, uni20::float128* ab, blas_int ldab,
67 blas_int
const* ipiv, uni20::float128 anorm, uni20::float128& rcond,
68 uni20::float128* work, blas_int* iwork)
70 UNI20_EXTERNAL_API_CALL(LAPACK, Rgbcon,
norm, n, kl, ku, ab, ldab, ipiv, anorm, work, iwork);
71 mplapackint mplapack_info = 0;
72 std::vector<mplapackint> mplapack_ipiv = uni20::lapack::mplapack::detail::to_mplapack_ints(ipiv, n);
73 std::vector<mplapackint> mplapack_iwork = uni20::lapack::mplapack::detail::make_mplapack_int_work(n);
74 Rgbcon(&
norm,
static_cast<mplapackint
>(n),
static_cast<mplapackint
>(kl),
static_cast<mplapackint
>(ku), ab,
75 static_cast<mplapackint
>(ldab), mplapack_ipiv.data(), anorm, rcond, work, mplapack_iwork.data(),
77 return static_cast<blas_int
>(mplapack_info);
80[[nodiscard]]
inline blas_int
gbrfs(
char trans, blas_int n, blas_int kl, blas_int ku, blas_int nrhs,
81 uni20::float128* ab, blas_int ldab, uni20::float128* afb, blas_int ldafb,
82 blas_int
const* ipiv, uni20::float128* b, blas_int ldb, uni20::float128* x,
83 blas_int ldx, uni20::float128* forward_error, uni20::float128* backward_error,
84 uni20::float128* work, blas_int* iwork)
86 UNI20_EXTERNAL_API_CALL(LAPACK, Rgbrfs, trans, n, kl, ku, nrhs, ab, ldab, afb, ldafb, ipiv, b, ldb, x, ldx,
87 forward_error, backward_error, work, iwork);
88 mplapackint mplapack_info = 0;
89 std::vector<mplapackint> mplapack_ipiv = uni20::lapack::mplapack::detail::to_mplapack_ints(ipiv, n);
90 std::vector<mplapackint> mplapack_iwork = uni20::lapack::mplapack::detail::make_mplapack_int_work(n);
91 Rgbrfs(&trans,
static_cast<mplapackint
>(n),
static_cast<mplapackint
>(kl),
static_cast<mplapackint
>(ku),
92 static_cast<mplapackint
>(nrhs), ab,
static_cast<mplapackint
>(ldab), afb,
static_cast<mplapackint
>(ldafb),
93 mplapack_ipiv.data(), b,
static_cast<mplapackint
>(ldb), x,
static_cast<mplapackint
>(ldx), forward_error,
94 backward_error, work, mplapack_iwork.data(), mplapack_info);
95 return static_cast<blas_int
>(mplapack_info);
98[[nodiscard]]
inline blas_int
gbsvx(
char fact,
char trans, blas_int n, blas_int kl, blas_int ku, blas_int nrhs,
99 uni20::float128* ab, blas_int ldab, uni20::float128* afb, blas_int ldafb,
100 blas_int* ipiv,
char& equed, uni20::float128* row_scale,
101 uni20::float128* column_scale, uni20::float128* b, blas_int ldb, uni20::float128* x,
102 blas_int ldx, uni20::float128& rcond, uni20::float128* forward_error,
103 uni20::float128* backward_error, uni20::float128* work, blas_int* iwork)
105 UNI20_EXTERNAL_API_CALL(LAPACK, Rgbsvx, fact, trans, n, kl, ku, nrhs, ab, ldab, afb, ldafb, ipiv, equed, row_scale,
106 column_scale, b, ldb, x, ldx, work, iwork);
107 mplapackint mplapack_info = 0;
108 std::vector<mplapackint> mplapack_ipiv = uni20::lapack::mplapack::detail::to_mplapack_ints(ipiv, n);
109 std::vector<mplapackint> mplapack_iwork = uni20::lapack::mplapack::detail::make_mplapack_int_work(n);
110 Rgbsvx(&fact, &trans,
static_cast<mplapackint
>(n),
static_cast<mplapackint
>(kl),
static_cast<mplapackint
>(ku),
111 static_cast<mplapackint
>(nrhs), ab,
static_cast<mplapackint
>(ldab), afb,
static_cast<mplapackint
>(ldafb),
112 mplapack_ipiv.data(), &equed, row_scale, column_scale, b,
static_cast<mplapackint
>(ldb), x,
113 static_cast<mplapackint
>(ldx), rcond, forward_error, backward_error, work, mplapack_iwork.data(),
115 uni20::lapack::mplapack::detail::copy_from_mplapack_ints(mplapack_ipiv, ipiv, n);
116 return static_cast<blas_int
>(mplapack_info);
119[[nodiscard]]
inline blas_int
gbequ(
bool power_of_two, blas_int m, blas_int n, blas_int kl, blas_int ku,
120 uni20::float128* ab, blas_int ldab, uni20::float128* row_scale,
121 uni20::float128* column_scale, uni20::float128& row_condition,
122 uni20::float128& column_condition, uni20::float128& max_abs)
124 mplapackint mplapack_info = 0;
128 Rgbequb(
static_cast<mplapackint
>(m),
static_cast<mplapackint
>(n),
static_cast<mplapackint
>(kl),
129 static_cast<mplapackint
>(ku), ab,
static_cast<mplapackint
>(ldab), row_scale, column_scale, row_condition,
130 column_condition, max_abs, mplapack_info);
135 Rgbequ(
static_cast<mplapackint
>(m),
static_cast<mplapackint
>(n),
static_cast<mplapackint
>(kl),
136 static_cast<mplapackint
>(ku), ab,
static_cast<mplapackint
>(ldab), row_scale, column_scale, row_condition,
137 column_condition, max_abs, mplapack_info);
139 return static_cast<blas_int
>(mplapack_info);
142[[nodiscard]]
inline blas_int
pbsv(
char uplo, blas_int n, blas_int kd, blas_int nrhs, uni20::float128* ab,
143 blas_int ldab, uni20::float128* b, blas_int ldb)
146 mplapackint mplapack_info = 0;
147 Rpbsv(&uplo,
static_cast<mplapackint
>(n),
static_cast<mplapackint
>(kd),
static_cast<mplapackint
>(nrhs), ab,
148 static_cast<mplapackint
>(ldab), b,
static_cast<mplapackint
>(ldb), mplapack_info);
149 return static_cast<blas_int
>(mplapack_info);
152[[nodiscard]]
inline blas_int
pbtrf(
char uplo, blas_int n, blas_int kd, uni20::float128* ab, blas_int ldab)
155 mplapackint mplapack_info = 0;
156 Rpbtrf(&uplo,
static_cast<mplapackint
>(n),
static_cast<mplapackint
>(kd), ab,
static_cast<mplapackint
>(ldab),
158 return static_cast<blas_int
>(mplapack_info);
161[[nodiscard]]
inline blas_int
pbtrs(
char uplo, blas_int n, blas_int kd, blas_int nrhs, uni20::float128* ab,
162 blas_int ldab, uni20::float128* b, blas_int ldb)
165 mplapackint mplapack_info = 0;
166 Rpbtrs(&uplo,
static_cast<mplapackint
>(n),
static_cast<mplapackint
>(kd),
static_cast<mplapackint
>(nrhs), ab,
167 static_cast<mplapackint
>(ldab), b,
static_cast<mplapackint
>(ldb), mplapack_info);
168 return static_cast<blas_int
>(mplapack_info);
171[[nodiscard]]
inline blas_int
pbcon(
char uplo, blas_int n, blas_int kd, uni20::float128* ab, blas_int ldab,
172 uni20::float128 anorm, uni20::float128& rcond, uni20::float128* work,
176 mplapackint mplapack_info = 0;
177 std::vector<mplapackint> mplapack_iwork = uni20::lapack::mplapack::detail::make_mplapack_int_work(n);
178 Rpbcon(&uplo,
static_cast<mplapackint
>(n),
static_cast<mplapackint
>(kd), ab,
static_cast<mplapackint
>(ldab), anorm,
179 rcond, work, mplapack_iwork.data(), mplapack_info);
180 return static_cast<blas_int
>(mplapack_info);
183[[nodiscard]]
inline blas_int
pbrfs(
char uplo, blas_int n, blas_int kd, blas_int nrhs, uni20::float128* ab,
184 blas_int ldab, uni20::float128* afb, blas_int ldafb, uni20::float128* b,
185 blas_int ldb, uni20::float128* x, blas_int ldx, uni20::float128* forward_error,
186 uni20::float128* backward_error, uni20::float128* work, blas_int* iwork)
188 UNI20_EXTERNAL_API_CALL(LAPACK, Rpbrfs, uplo, n, kd, nrhs, ab, ldab, afb, ldafb, b, ldb, x, ldx, forward_error,
189 backward_error, work, iwork);
190 mplapackint mplapack_info = 0;
191 std::vector<mplapackint> mplapack_iwork = uni20::lapack::mplapack::detail::make_mplapack_int_work(n);
192 Rpbrfs(&uplo,
static_cast<mplapackint
>(n),
static_cast<mplapackint
>(kd),
static_cast<mplapackint
>(nrhs), ab,
193 static_cast<mplapackint
>(ldab), afb,
static_cast<mplapackint
>(ldafb), b,
static_cast<mplapackint
>(ldb), x,
194 static_cast<mplapackint
>(ldx), forward_error, backward_error, work, mplapack_iwork.data(), mplapack_info);
195 return static_cast<blas_int
>(mplapack_info);
198[[nodiscard]]
inline blas_int
pbsvx(
char fact,
char uplo, blas_int n, blas_int kd, blas_int nrhs, uni20::float128* ab,
199 blas_int ldab, uni20::float128* afb, blas_int ldafb,
char& equed,
200 uni20::float128*
scale, uni20::float128* b, blas_int ldb, uni20::float128* x,
201 blas_int ldx, uni20::float128& rcond, uni20::float128* forward_error,
202 uni20::float128* backward_error, uni20::float128* work, blas_int* iwork)
204 UNI20_EXTERNAL_API_CALL(LAPACK, Rpbsvx, fact, uplo, n, kd, nrhs, ab, ldab, afb, ldafb, equed,
scale, b, ldb, x, ldx,
206 mplapackint mplapack_info = 0;
207 std::vector<mplapackint> mplapack_iwork = uni20::lapack::mplapack::detail::make_mplapack_int_work(n);
208 Rpbsvx(&fact, &uplo,
static_cast<mplapackint
>(n),
static_cast<mplapackint
>(kd),
static_cast<mplapackint
>(nrhs), ab,
209 static_cast<mplapackint
>(ldab), afb,
static_cast<mplapackint
>(ldafb), &equed,
scale, b,
210 static_cast<mplapackint
>(ldb), x,
static_cast<mplapackint
>(ldx), rcond, forward_error, backward_error, work,
211 mplapack_iwork.data(), mplapack_info);
212 return static_cast<blas_int
>(mplapack_info);
Shared helpers for LAPACK backend wrappers.
Shared helpers for MPLAPACK LAPACK wrappers.
#define UNI20_EXTERNAL_API_CALL(module, func,...)
Emits a trace log entry for an outgoing backend API call.
Definition backend.hpp:90
Definition mplapack/band.hpp:25
blas_int gbrfs(char trans, blas_int n, blas_int kl, blas_int ku, blas_int nrhs, uni20::float128 *ab, blas_int ldab, uni20::float128 *afb, blas_int ldafb, blas_int const *ipiv, uni20::float128 *b, blas_int ldb, uni20::float128 *x, blas_int ldx, uni20::float128 *forward_error, uni20::float128 *backward_error, uni20::float128 *work, blas_int *iwork)
Definition mplapack/band.hpp:80
blas_int pbtrs(char uplo, blas_int n, blas_int kd, blas_int nrhs, uni20::float128 *ab, blas_int ldab, uni20::float128 *b, blas_int ldb)
Definition mplapack/band.hpp:161
blas_int gbtrs(char trans, blas_int n, blas_int kl, blas_int ku, blas_int nrhs, uni20::float128 *ab, blas_int ldab, blas_int const *ipiv, uni20::float128 *b, blas_int ldb)
Definition mplapack/band.hpp:53
blas_int pbrfs(char uplo, blas_int n, blas_int kd, blas_int nrhs, uni20::float128 *ab, blas_int ldab, uni20::float128 *afb, blas_int ldafb, uni20::float128 *b, blas_int ldb, uni20::float128 *x, blas_int ldx, uni20::float128 *forward_error, uni20::float128 *backward_error, uni20::float128 *work, blas_int *iwork)
Definition mplapack/band.hpp:183
blas_int pbsvx(char fact, char uplo, blas_int n, blas_int kd, blas_int nrhs, uni20::float128 *ab, blas_int ldab, uni20::float128 *afb, blas_int ldafb, char &equed, uni20::float128 *scale, uni20::float128 *b, blas_int ldb, uni20::float128 *x, blas_int ldx, uni20::float128 &rcond, uni20::float128 *forward_error, uni20::float128 *backward_error, uni20::float128 *work, blas_int *iwork)
Definition mplapack/band.hpp:198
blas_int gbcon(char norm, blas_int n, blas_int kl, blas_int ku, uni20::float128 *ab, blas_int ldab, blas_int const *ipiv, uni20::float128 anorm, uni20::float128 &rcond, uni20::float128 *work, blas_int *iwork)
Definition mplapack/band.hpp:66
blas_int gbequ(bool power_of_two, blas_int m, blas_int n, blas_int kl, blas_int ku, uni20::float128 *ab, blas_int ldab, uni20::float128 *row_scale, uni20::float128 *column_scale, uni20::float128 &row_condition, uni20::float128 &column_condition, uni20::float128 &max_abs)
Definition mplapack/band.hpp:119
blas_int pbsv(char uplo, blas_int n, blas_int kd, blas_int nrhs, uni20::float128 *ab, blas_int ldab, uni20::float128 *b, blas_int ldb)
Definition mplapack/band.hpp:142
blas_int pbtrf(char uplo, blas_int n, blas_int kd, uni20::float128 *ab, blas_int ldab)
Definition mplapack/band.hpp:152
blas_int gbsv(blas_int n, blas_int kl, blas_int ku, blas_int nrhs, uni20::float128 *ab, blas_int ldab, blas_int *ipiv, uni20::float128 *b, blas_int ldb)
Definition mplapack/band.hpp:27
blas_int pbcon(char uplo, blas_int n, blas_int kd, uni20::float128 *ab, blas_int ldab, uni20::float128 anorm, uni20::float128 &rcond, uni20::float128 *work, blas_int *iwork)
Definition mplapack/band.hpp:171
blas_int gbtrf(blas_int m, blas_int n, blas_int kl, blas_int ku, uni20::float128 *ab, blas_int ldab, blas_int *ipiv)
Definition mplapack/band.hpp:40
blas_int gbsvx(char fact, char trans, blas_int n, blas_int kl, blas_int ku, blas_int nrhs, uni20::float128 *ab, blas_int ldab, uni20::float128 *afb, blas_int ldafb, blas_int *ipiv, char &equed, uni20::float128 *row_scale, uni20::float128 *column_scale, uni20::float128 *b, blas_int ldb, uni20::float128 *x, blas_int ldx, uni20::float128 &rcond, uni20::float128 *forward_error, uni20::float128 *backward_error, uni20::float128 *work, blas_int *iwork)
Definition mplapack/band.hpp:98
mpreal norm(mpcomplex const &z)
Definition mpcomplex.hpp:494
void scale(Tensor &tensor, Scalar factor)
Multiply every stored numerical block by a scalar in place.
Definition block_tensor_linear.hpp:400