12#include <uni20/config.hpp>
17#if !(UNI20_HAS_MPLAPACK_FLOAT128)
18#error "uni20/backend/lapack/mplapack/general.hpp requires MPLAPACK float128 support"
22#include <mplapack_config.h>
23#include <mplapack_binary128.h>
29[[nodiscard]]
inline blas_int
gesv(blas_int n, blas_int nrhs, uni20::float128* a, blas_int lda, blas_int* ipiv,
30 uni20::float128* b, blas_int ldb)
33 mplapackint mplapack_info = 0;
34 std::vector<mplapackint> mplapack_ipiv = uni20::lapack::mplapack::detail::make_mplapack_int_work(n);
35 Rgesv(
static_cast<mplapackint
>(n),
static_cast<mplapackint
>(nrhs), a,
static_cast<mplapackint
>(lda),
36 mplapack_ipiv.data(), b,
static_cast<mplapackint
>(ldb), mplapack_info);
37 uni20::lapack::mplapack::detail::copy_from_mplapack_ints(mplapack_ipiv, ipiv, n);
38 return static_cast<blas_int
>(mplapack_info);
45 mplapackint mplapack_info = 0;
46 std::vector<mplapackint> mplapack_ipiv = uni20::lapack::mplapack::detail::make_mplapack_int_work(n);
47 Cgesv(
static_cast<mplapackint
>(n),
static_cast<mplapackint
>(nrhs), a,
static_cast<mplapackint
>(lda),
48 mplapack_ipiv.data(), b,
static_cast<mplapackint
>(ldb), mplapack_info);
49 uni20::lapack::mplapack::detail::copy_from_mplapack_ints(mplapack_ipiv, ipiv, n);
50 return static_cast<blas_int
>(mplapack_info);
53[[nodiscard]]
inline blas_int
gesvx(
char fact,
char trans, blas_int n, blas_int nrhs, uni20::float128* a, blas_int lda,
54 uni20::float128* af, blas_int ldaf, blas_int* ipiv,
char& equed,
55 uni20::float128* row_scale, uni20::float128* column_scale, uni20::float128* b,
56 blas_int ldb, uni20::float128* x, blas_int ldx, uni20::float128& rcond,
57 uni20::float128* forward_error, uni20::float128* backward_error,
58 uni20::float128* work, blas_int* iwork)
60 UNI20_EXTERNAL_API_CALL(LAPACK, Rgesvx, fact, trans, n, nrhs, a, lda, af, ldaf, ipiv, equed, row_scale, column_scale,
61 b, ldb, x, ldx, work, iwork);
62 mplapackint mplapack_info = 0;
63 std::vector<mplapackint> mplapack_ipiv = uni20::lapack::mplapack::detail::to_mplapack_ints(ipiv, n);
64 std::vector<mplapackint> mplapack_iwork = uni20::lapack::mplapack::detail::make_mplapack_int_work(n);
65 Rgesvx(&fact, &trans,
static_cast<mplapackint
>(n),
static_cast<mplapackint
>(nrhs), a,
static_cast<mplapackint
>(lda),
66 af,
static_cast<mplapackint
>(ldaf), mplapack_ipiv.data(), &equed, row_scale, column_scale, b,
67 static_cast<mplapackint
>(ldb), x,
static_cast<mplapackint
>(ldx), rcond, forward_error, backward_error, work,
68 mplapack_iwork.data(), mplapack_info);
69 uni20::lapack::mplapack::detail::copy_from_mplapack_ints(mplapack_ipiv, ipiv, n);
70 return static_cast<blas_int
>(mplapack_info);
73[[nodiscard]]
inline blas_int
geequ(blas_int m, blas_int n, uni20::float128* a, blas_int lda,
74 uni20::float128* row_scale, uni20::float128* column_scale,
75 uni20::float128& row_condition, uni20::float128& column_condition,
76 uni20::float128& max_abs)
79 mplapackint mplapack_info = 0;
80 Rgeequ(
static_cast<mplapackint
>(m),
static_cast<mplapackint
>(n), a,
static_cast<mplapackint
>(lda), row_scale,
81 column_scale, row_condition, column_condition, max_abs, mplapack_info);
82 return static_cast<blas_int
>(mplapack_info);
85[[nodiscard]]
inline blas_int
getrf(blas_int m, blas_int n, uni20::float128* a, blas_int lda, blas_int* ipiv)
88 mplapackint mplapack_info = 0;
89 blas_int
const pivot_count = std::min(m, n);
90 std::vector<mplapackint> mplapack_ipiv = uni20::lapack::mplapack::detail::make_mplapack_int_work(pivot_count);
91 Rgetrf(
static_cast<mplapackint
>(m),
static_cast<mplapackint
>(n), a,
static_cast<mplapackint
>(lda),
92 mplapack_ipiv.data(), mplapack_info);
93 uni20::lapack::mplapack::detail::copy_from_mplapack_ints(mplapack_ipiv, ipiv, pivot_count);
94 return static_cast<blas_int
>(mplapack_info);
101 mplapackint mplapack_info = 0;
102 blas_int
const pivot_count = std::min(m, n);
103 std::vector<mplapackint> mplapack_ipiv = uni20::lapack::mplapack::detail::make_mplapack_int_work(pivot_count);
104 Cgetrf(
static_cast<mplapackint
>(m),
static_cast<mplapackint
>(n), a,
static_cast<mplapackint
>(lda),
105 mplapack_ipiv.data(), mplapack_info);
106 uni20::lapack::mplapack::detail::copy_from_mplapack_ints(mplapack_ipiv, ipiv, pivot_count);
107 return static_cast<blas_int
>(mplapack_info);
110[[nodiscard]]
inline blas_int
getrs(
char trans, blas_int n, blas_int nrhs, uni20::float128* a, blas_int lda,
111 blas_int
const* ipiv, uni20::float128* b, blas_int ldb)
114 mplapackint mplapack_info = 0;
115 std::vector<mplapackint> mplapack_ipiv = uni20::lapack::mplapack::detail::to_mplapack_ints(ipiv, n);
116 Rgetrs(&trans,
static_cast<mplapackint
>(n),
static_cast<mplapackint
>(nrhs), a,
static_cast<mplapackint
>(lda),
117 mplapack_ipiv.data(), b,
static_cast<mplapackint
>(ldb), mplapack_info);
118 return static_cast<blas_int
>(mplapack_info);
126 mplapackint mplapack_info = 0;
127 std::vector<mplapackint> mplapack_ipiv = uni20::lapack::mplapack::detail::to_mplapack_ints(ipiv, n);
128 Cgetrs(&trans,
static_cast<mplapackint
>(n),
static_cast<mplapackint
>(nrhs), a,
static_cast<mplapackint
>(lda),
129 mplapack_ipiv.data(), b,
static_cast<mplapackint
>(ldb), mplapack_info);
130 return static_cast<blas_int
>(mplapack_info);
133[[nodiscard]]
inline blas_int
gerfs(
char trans, blas_int n, blas_int nrhs, uni20::float128* a, blas_int lda,
134 uni20::float128* factors, blas_int factor_lda, blas_int
const* ipiv,
135 uni20::float128* b, blas_int ldb, uni20::float128* x, blas_int ldx,
136 uni20::float128* forward_error, uni20::float128* backward_error,
137 uni20::float128* work, blas_int* iwork)
139 UNI20_EXTERNAL_API_CALL(LAPACK, Rgerfs, trans, n, nrhs, a, lda, factors, factor_lda, ipiv, b, ldb, x, ldx,
140 forward_error, backward_error, work, iwork);
141 mplapackint mplapack_info = 0;
142 std::vector<mplapackint> mplapack_ipiv = uni20::lapack::mplapack::detail::to_mplapack_ints(ipiv, n);
143 std::vector<mplapackint> mplapack_iwork = uni20::lapack::mplapack::detail::make_mplapack_int_work(n);
144 Rgerfs(&trans,
static_cast<mplapackint
>(n),
static_cast<mplapackint
>(nrhs), a,
static_cast<mplapackint
>(lda), factors,
145 static_cast<mplapackint
>(factor_lda), mplapack_ipiv.data(), b,
static_cast<mplapackint
>(ldb), x,
146 static_cast<mplapackint
>(ldx), forward_error, backward_error, work, mplapack_iwork.data(), mplapack_info);
147 return static_cast<blas_int
>(mplapack_info);
150[[nodiscard]]
inline blas_int
getri(blas_int n, uni20::float128* a, blas_int lda, blas_int* ipiv, uni20::float128* work,
154 mplapackint mplapack_info = 0;
155 std::vector<mplapackint> mplapack_ipiv = uni20::lapack::mplapack::detail::to_mplapack_ints(ipiv, n);
156 Rgetri(
static_cast<mplapackint
>(n), a,
static_cast<mplapackint
>(lda), mplapack_ipiv.data(), work,
157 static_cast<mplapackint
>(lwork), mplapack_info);
158 return static_cast<blas_int
>(mplapack_info);
165 mplapackint mplapack_info = 0;
166 std::vector<mplapackint> mplapack_ipiv = uni20::lapack::mplapack::detail::to_mplapack_ints(ipiv, n);
167 Cgetri(
static_cast<mplapackint
>(n), a,
static_cast<mplapackint
>(lda), mplapack_ipiv.data(), work,
168 static_cast<mplapackint
>(lwork), mplapack_info);
169 return static_cast<blas_int
>(mplapack_info);
172[[nodiscard]]
inline blas_int
gecon(
char norm, blas_int n, uni20::float128
const* a, blas_int lda,
173 uni20::float128 anorm, uni20::float128& rcond, uni20::float128* work,
177 mplapackint mplapack_info = 0;
178 std::vector<mplapackint> mplapack_iwork = uni20::lapack::mplapack::detail::make_mplapack_int_work(n);
179 Rgecon(&
norm,
static_cast<mplapackint
>(n),
const_cast<uni20::float128*
>(a),
static_cast<mplapackint
>(lda), anorm,
180 rcond, work, mplapack_iwork.data(), mplapack_info);
181 return static_cast<blas_int
>(mplapack_info);
185 uni20::float128 anorm, uni20::float128& rcond,
189 mplapackint mplapack_info = 0;
191 static_cast<mplapackint
>(lda), anorm, rcond, work, rwork, mplapack_info);
192 return static_cast<blas_int
>(mplapack_info);
195[[nodiscard]]
inline blas_int
gels(
char trans, blas_int m, blas_int n, blas_int nrhs, uni20::float128* a, blas_int lda,
196 uni20::float128* b, blas_int ldb, uni20::float128* work, blas_int lwork)
198 UNI20_EXTERNAL_API_CALL(LAPACK, Rgels, trans, m, n, nrhs, a, lda, b, ldb, work, lwork);
199 mplapackint mplapack_info = 0;
200 Rgels(&trans,
static_cast<mplapackint
>(m),
static_cast<mplapackint
>(n),
static_cast<mplapackint
>(nrhs), a,
201 static_cast<mplapackint
>(lda), b,
static_cast<mplapackint
>(ldb), work,
static_cast<mplapackint
>(lwork),
203 return static_cast<blas_int
>(mplapack_info);
206[[nodiscard]]
inline blas_int
gelss(blas_int m, blas_int n, blas_int nrhs, uni20::float128* a, blas_int lda,
207 uni20::float128* b, blas_int ldb, uni20::float128* s, uni20::float128 rcond,
208 blas_int& rank, uni20::float128* work, blas_int lwork)
210 UNI20_EXTERNAL_API_CALL(LAPACK, Rgelss, m, n, nrhs, a, lda, b, ldb, s, rcond, rank, work, lwork);
211 mplapackint mplapack_rank = 0;
212 mplapackint mplapack_info = 0;
213 Rgelss(
static_cast<mplapackint
>(m),
static_cast<mplapackint
>(n),
static_cast<mplapackint
>(nrhs), a,
214 static_cast<mplapackint
>(lda), b,
static_cast<mplapackint
>(ldb), s, rcond, mplapack_rank, work,
215 static_cast<mplapackint
>(lwork), mplapack_info);
216 rank =
static_cast<blas_int
>(mplapack_rank);
217 return static_cast<blas_int
>(mplapack_info);
224 blas_int lwork, uni20::float128* rwork)
226 UNI20_EXTERNAL_API_CALL(LAPACK, Cgelss, m, n, nrhs, a, lda, b, ldb, s, rcond, rank, work, lwork);
227 mplapackint provider_rank = 0, info = 0;
228 Cgelss(
static_cast<mplapackint
>(m),
static_cast<mplapackint
>(n),
static_cast<mplapackint
>(nrhs), a,
229 static_cast<mplapackint
>(lda), b,
static_cast<mplapackint
>(ldb), s, rcond, provider_rank, work,
230 static_cast<mplapackint
>(lwork), rwork, info);
231 rank =
static_cast<blas_int
>(provider_rank);
232 return static_cast<blas_int
>(info);
235[[nodiscard]]
inline blas_int
gelsd(blas_int m, blas_int n, blas_int nrhs, uni20::float128* a, blas_int lda,
236 uni20::float128* b, blas_int ldb, uni20::float128* s, uni20::float128 rcond,
237 blas_int& rank, uni20::float128* work, blas_int lwork, blas_int* iwork)
239 UNI20_EXTERNAL_API_CALL(LAPACK, Rgelsd, m, n, nrhs, a, lda, b, ldb, s, rcond, rank, work, lwork, iwork);
240 mplapackint mplapack_rank = 0;
241 mplapackint mplapack_info = 0;
242 blas_int
const iwork_size = uni20::lapack::mplapack::detail::gelsd_iwork_size(m, n);
243 std::vector<mplapackint> mplapack_iwork = uni20::lapack::mplapack::detail::make_mplapack_int_work(iwork_size);
244 Rgelsd(
static_cast<mplapackint
>(m),
static_cast<mplapackint
>(n),
static_cast<mplapackint
>(nrhs), a,
245 static_cast<mplapackint
>(lda), b,
static_cast<mplapackint
>(ldb), s, rcond, mplapack_rank, work,
246 static_cast<mplapackint
>(lwork), mplapack_iwork.data(), mplapack_info);
247 rank =
static_cast<blas_int
>(mplapack_rank);
248 return static_cast<blas_int
>(mplapack_info);
251[[nodiscard]]
inline blas_int
gelsy(blas_int m, blas_int n, blas_int nrhs, uni20::float128* a, blas_int lda,
252 uni20::float128* b, blas_int ldb, blas_int* jpvt, uni20::float128 rcond,
253 blas_int& rank, uni20::float128* work, blas_int lwork)
255 UNI20_EXTERNAL_API_CALL(LAPACK, Rgelsy, m, n, nrhs, a, lda, b, ldb, jpvt, rcond, rank, work, lwork);
256 mplapackint mplapack_rank = 0;
257 mplapackint mplapack_info = 0;
258 std::vector<mplapackint> mplapack_jpvt = uni20::lapack::mplapack::detail::to_mplapack_ints(jpvt, n);
259 Rgelsy(
static_cast<mplapackint
>(m),
static_cast<mplapackint
>(n),
static_cast<mplapackint
>(nrhs), a,
260 static_cast<mplapackint
>(lda), b,
static_cast<mplapackint
>(ldb), mplapack_jpvt.data(), rcond, mplapack_rank,
261 work,
static_cast<mplapackint
>(lwork), mplapack_info);
262 uni20::lapack::mplapack::detail::copy_from_mplapack_ints(mplapack_jpvt, jpvt, n);
263 rank =
static_cast<blas_int
>(mplapack_rank);
264 return static_cast<blas_int
>(mplapack_info);
267[[nodiscard]]
inline blas_int
geqrf(blas_int m, blas_int n, uni20::float128* a, blas_int lda, uni20::float128* tau,
268 uni20::float128* work, blas_int lwork)
271 mplapackint mplapack_info = 0;
272 Rgeqrf(
static_cast<mplapackint
>(m),
static_cast<mplapackint
>(n), a,
static_cast<mplapackint
>(lda), tau, work,
273 static_cast<mplapackint
>(lwork), mplapack_info);
274 return static_cast<blas_int
>(mplapack_info);
282 mplapackint mplapack_info = 0;
283 Cgeqrf(
static_cast<mplapackint
>(m),
static_cast<mplapackint
>(n), a,
static_cast<mplapackint
>(lda), tau, work,
284 static_cast<mplapackint
>(lwork), mplapack_info);
285 return static_cast<blas_int
>(mplapack_info);
288[[nodiscard]]
inline blas_int
gelqf(blas_int m, blas_int n, uni20::float128* a, blas_int lda, uni20::float128* tau,
289 uni20::float128* work, blas_int lwork)
292 mplapackint mplapack_info = 0;
293 Rgelqf(
static_cast<mplapackint
>(m),
static_cast<mplapackint
>(n), a,
static_cast<mplapackint
>(lda), tau, work,
294 static_cast<mplapackint
>(lwork), mplapack_info);
295 return static_cast<blas_int
>(mplapack_info);
303 mplapackint mplapack_info = 0;
304 Cgelqf(
static_cast<mplapackint
>(m),
static_cast<mplapackint
>(n), a,
static_cast<mplapackint
>(lda), tau, work,
305 static_cast<mplapackint
>(lwork), mplapack_info);
306 return static_cast<blas_int
>(mplapack_info);
309[[nodiscard]]
inline blas_int
geqlf(blas_int m, blas_int n, uni20::float128* a, blas_int lda, uni20::float128* tau,
310 uni20::float128* work, blas_int lwork)
313 mplapackint mplapack_info = 0;
314 Rgeqlf(
static_cast<mplapackint
>(m),
static_cast<mplapackint
>(n), a,
static_cast<mplapackint
>(lda), tau, work,
315 static_cast<mplapackint
>(lwork), mplapack_info);
316 return static_cast<blas_int
>(mplapack_info);
319[[nodiscard]]
inline blas_int
gerqf(blas_int m, blas_int n, uni20::float128* a, blas_int lda, uni20::float128* tau,
320 uni20::float128* work, blas_int lwork)
323 mplapackint mplapack_info = 0;
324 Rgerqf(
static_cast<mplapackint
>(m),
static_cast<mplapackint
>(n), a,
static_cast<mplapackint
>(lda), tau, work,
325 static_cast<mplapackint
>(lwork), mplapack_info);
326 return static_cast<blas_int
>(mplapack_info);
329[[nodiscard]]
inline blas_int
orgqr(blas_int m, blas_int n, blas_int k, uni20::float128* a, blas_int lda,
330 uni20::float128* tau, uni20::float128* work, blas_int lwork)
333 mplapackint mplapack_info = 0;
334 Rorgqr(
static_cast<mplapackint
>(m),
static_cast<mplapackint
>(n),
static_cast<mplapackint
>(k), a,
335 static_cast<mplapackint
>(lda), tau, work,
static_cast<mplapackint
>(lwork), mplapack_info);
336 return static_cast<blas_int
>(mplapack_info);
344 mplapackint mplapack_info = 0;
345 Cungqr(
static_cast<mplapackint
>(m),
static_cast<mplapackint
>(n),
static_cast<mplapackint
>(k), a,
346 static_cast<mplapackint
>(lda), tau, work,
static_cast<mplapackint
>(lwork), mplapack_info);
347 return static_cast<blas_int
>(mplapack_info);
350[[nodiscard]]
inline blas_int
orglq(blas_int m, blas_int n, blas_int k, uni20::float128* a, blas_int lda,
351 uni20::float128* tau, uni20::float128* work, blas_int lwork)
354 mplapackint mplapack_info = 0;
355 Rorglq(
static_cast<mplapackint
>(m),
static_cast<mplapackint
>(n),
static_cast<mplapackint
>(k), a,
356 static_cast<mplapackint
>(lda), tau, work,
static_cast<mplapackint
>(lwork), mplapack_info);
357 return static_cast<blas_int
>(mplapack_info);
365 mplapackint mplapack_info = 0;
366 Cunglq(
static_cast<mplapackint
>(m),
static_cast<mplapackint
>(n),
static_cast<mplapackint
>(k), a,
367 static_cast<mplapackint
>(lda), tau, work,
static_cast<mplapackint
>(lwork), mplapack_info);
368 return static_cast<blas_int
>(mplapack_info);
371[[nodiscard]]
inline blas_int
orgql(blas_int m, blas_int n, blas_int k, uni20::float128* a, blas_int lda,
372 uni20::float128* tau, uni20::float128* work, blas_int lwork)
375 mplapackint mplapack_info = 0;
376 Rorgql(
static_cast<mplapackint
>(m),
static_cast<mplapackint
>(n),
static_cast<mplapackint
>(k), a,
377 static_cast<mplapackint
>(lda), tau, work,
static_cast<mplapackint
>(lwork), mplapack_info);
378 return static_cast<blas_int
>(mplapack_info);
381[[nodiscard]]
inline blas_int
orgrq(blas_int m, blas_int n, blas_int k, uni20::float128* a, blas_int lda,
382 uni20::float128* tau, uni20::float128* work, blas_int lwork)
385 mplapackint mplapack_info = 0;
386 Rorgrq(
static_cast<mplapackint
>(m),
static_cast<mplapackint
>(n),
static_cast<mplapackint
>(k), a,
387 static_cast<mplapackint
>(lda), tau, work,
static_cast<mplapackint
>(lwork), mplapack_info);
388 return static_cast<blas_int
>(mplapack_info);
391[[nodiscard]]
inline blas_int
ormqr(
char side,
char trans, blas_int m, blas_int n, blas_int k, uni20::float128* a,
392 blas_int lda, uni20::float128* tau, uni20::float128*
c, blas_int ldc,
393 uni20::float128* work, blas_int lwork)
395 UNI20_EXTERNAL_API_CALL(LAPACK, Rormqr, side, trans, m, n, k, a, lda, tau,
c, ldc, work, lwork);
396 mplapackint mplapack_info = 0;
397 Rormqr(&side, &trans,
static_cast<mplapackint
>(m),
static_cast<mplapackint
>(n),
static_cast<mplapackint
>(k), a,
398 static_cast<mplapackint
>(lda), tau,
c,
static_cast<mplapackint
>(ldc), work,
static_cast<mplapackint
>(lwork),
400 return static_cast<blas_int
>(mplapack_info);
403[[nodiscard]]
inline blas_int
ormlq(
char side,
char trans, blas_int m, blas_int n, blas_int k, uni20::float128* a,
404 blas_int lda, uni20::float128* tau, uni20::float128*
c, blas_int ldc,
405 uni20::float128* work, blas_int lwork)
407 UNI20_EXTERNAL_API_CALL(LAPACK, Rormlq, side, trans, m, n, k, a, lda, tau,
c, ldc, work, lwork);
408 mplapackint mplapack_info = 0;
409 Rormlq(&side, &trans,
static_cast<mplapackint
>(m),
static_cast<mplapackint
>(n),
static_cast<mplapackint
>(k), a,
410 static_cast<mplapackint
>(lda), tau,
c,
static_cast<mplapackint
>(ldc), work,
static_cast<mplapackint
>(lwork),
412 return static_cast<blas_int
>(mplapack_info);
415[[nodiscard]]
inline blas_int
ormql(
char side,
char trans, blas_int m, blas_int n, blas_int k, uni20::float128* a,
416 blas_int lda, uni20::float128* tau, uni20::float128*
c, blas_int ldc,
417 uni20::float128* work, blas_int lwork)
419 UNI20_EXTERNAL_API_CALL(LAPACK, Rormql, side, trans, m, n, k, a, lda, tau,
c, ldc, work, lwork);
420 mplapackint mplapack_info = 0;
421 Rormql(&side, &trans,
static_cast<mplapackint
>(m),
static_cast<mplapackint
>(n),
static_cast<mplapackint
>(k), a,
422 static_cast<mplapackint
>(lda), tau,
c,
static_cast<mplapackint
>(ldc), work,
static_cast<mplapackint
>(lwork),
424 return static_cast<blas_int
>(mplapack_info);
427[[nodiscard]]
inline blas_int
ormrq(
char side,
char trans, blas_int m, blas_int n, blas_int k, uni20::float128* a,
428 blas_int lda, uni20::float128* tau, uni20::float128*
c, blas_int ldc,
429 uni20::float128* work, blas_int lwork)
431 UNI20_EXTERNAL_API_CALL(LAPACK, Rormrq, side, trans, m, n, k, a, lda, tau,
c, ldc, work, lwork);
432 mplapackint mplapack_info = 0;
433 Rormrq(&side, &trans,
static_cast<mplapackint
>(m),
static_cast<mplapackint
>(n),
static_cast<mplapackint
>(k), a,
434 static_cast<mplapackint
>(lda), tau,
c,
static_cast<mplapackint
>(ldc), work,
static_cast<mplapackint
>(lwork),
436 return static_cast<blas_int
>(mplapack_info);
439[[nodiscard]]
inline blas_int
gebrd(blas_int m, blas_int n, uni20::float128* a, blas_int lda, uni20::float128* d,
440 uni20::float128* e, uni20::float128* tauq, uni20::float128* taup,
441 uni20::float128* work, blas_int lwork)
443 UNI20_EXTERNAL_API_CALL(LAPACK, Rgebrd, m, n, a, lda, d, e, tauq, taup, work, lwork);
444 mplapackint mplapack_info = 0;
445 Rgebrd(
static_cast<mplapackint
>(m),
static_cast<mplapackint
>(n), a,
static_cast<mplapackint
>(lda), d, e, tauq, taup,
446 work,
static_cast<mplapackint
>(lwork), mplapack_info);
447 return static_cast<blas_int
>(mplapack_info);
450[[nodiscard]]
inline blas_int
gehrd(blas_int n, blas_int first, blas_int last, uni20::float128* a, blas_int lda,
451 uni20::float128* tau, uni20::float128* work, blas_int lwork)
454 mplapackint mplapack_info = 0;
455 Rgehrd(
static_cast<mplapackint
>(n),
static_cast<mplapackint
>(first),
static_cast<mplapackint
>(last), a,
456 static_cast<mplapackint
>(lda), tau, work,
static_cast<mplapackint
>(lwork), mplapack_info);
457 return static_cast<blas_int
>(mplapack_info);
460[[nodiscard]]
inline blas_int
geqp3(blas_int m, blas_int n, uni20::float128* a, blas_int lda, blas_int* jpvt,
461 uni20::float128* tau, uni20::float128* work, blas_int lwork)
464 mplapackint mplapack_info = 0;
465 std::vector<mplapackint> mplapack_jpvt = uni20::lapack::mplapack::detail::to_mplapack_ints(jpvt, n);
466 Rgeqp3(
static_cast<mplapackint
>(m),
static_cast<mplapackint
>(n), a,
static_cast<mplapackint
>(lda),
467 mplapack_jpvt.data(), tau, work,
static_cast<mplapackint
>(lwork), mplapack_info);
468 uni20::lapack::mplapack::detail::copy_from_mplapack_ints(mplapack_jpvt, jpvt, n);
469 return static_cast<blas_int
>(mplapack_info);
472[[nodiscard]]
inline blas_int
sytrd(
char uplo, blas_int n, uni20::float128* a, blas_int lda, uni20::float128* d,
473 uni20::float128* e, uni20::float128* tau, uni20::float128* work, blas_int lwork)
475 UNI20_EXTERNAL_API_CALL(LAPACK, Rsytrd, uplo, n, a, lda, d, e, tau, work, lwork);
476 mplapackint mplapack_info = 0;
477 Rsytrd(&uplo,
static_cast<mplapackint
>(n), a,
static_cast<mplapackint
>(lda), d, e, tau, work,
478 static_cast<mplapackint
>(lwork), mplapack_info);
479 return static_cast<blas_int
>(mplapack_info);
482[[nodiscard]]
inline blas_int
syev(
char jobz,
char uplo, blas_int n, uni20::float128* a, blas_int lda,
483 uni20::float128* w, uni20::float128* work, blas_int lwork)
486 mplapackint mplapack_info = 0;
487 Rsyev(&jobz, &uplo,
static_cast<mplapackint
>(n), a,
static_cast<mplapackint
>(lda), w, work,
488 static_cast<mplapackint
>(lwork), mplapack_info);
489 return static_cast<blas_int
>(mplapack_info);
492[[nodiscard]]
inline blas_int
syevd(
char jobz,
char uplo, blas_int n, uni20::float128* a, blas_int lda,
493 uni20::float128* w, uni20::float128* work, blas_int lwork, blas_int* iwork,
496 UNI20_EXTERNAL_API_CALL(LAPACK, Rsyevd, jobz, uplo, n, a, lda, w, work, lwork, iwork, liwork);
497 mplapackint mplapack_info = 0;
498 blas_int
const iwork_size = std::max<blas_int>(1, liwork == -1 ? blas_int{1} : liwork);
499 std::vector<mplapackint> mplapack_iwork = uni20::lapack::mplapack::detail::make_mplapack_int_work(iwork_size);
500 Rsyevd(&jobz, &uplo,
static_cast<mplapackint
>(n), a,
static_cast<mplapackint
>(lda), w, work,
501 static_cast<mplapackint
>(lwork), mplapack_iwork.data(),
static_cast<mplapackint
>(liwork), mplapack_info);
502 uni20::lapack::mplapack::detail::copy_from_mplapack_query_int_work(mplapack_iwork, iwork, liwork);
503 return static_cast<blas_int
>(mplapack_info);
506[[nodiscard]]
inline blas_int
syevr(
char jobz,
char range,
char uplo, blas_int n, uni20::float128* a, blas_int lda,
507 uni20::float128 vl, uni20::float128 vu, blas_int il, blas_int iu,
508 uni20::float128 abstol, blas_int& selected_count, uni20::float128* w,
509 uni20::float128* z, blas_int ldz, blas_int* isuppz, uni20::float128* work,
510 blas_int lwork, blas_int* iwork, blas_int liwork)
512 UNI20_EXTERNAL_API_CALL(LAPACK, Rsyevr, jobz, range, uplo, n, a, lda, vl, vu, il, iu, abstol, selected_count, w, z,
513 ldz, isuppz, work, lwork, iwork, liwork);
514 mplapackint mplapack_selected_count =
static_cast<mplapackint
>(selected_count);
515 mplapackint mplapack_info = 0;
516 blas_int
const support_size = 2 * std::max<blas_int>(1, n);
517 blas_int
const iwork_size = std::max<blas_int>(1, liwork == -1 ? blas_int{1} : liwork);
518 std::vector<mplapackint> mplapack_isuppz;
519 if (isuppz !=
nullptr)
521 mplapack_isuppz = uni20::lapack::mplapack::detail::make_mplapack_int_work(support_size);
523 std::vector<mplapackint> mplapack_iwork = uni20::lapack::mplapack::detail::make_mplapack_int_work(iwork_size);
524 Rsyevr(&jobz, &range, &uplo,
static_cast<mplapackint
>(n), a,
static_cast<mplapackint
>(lda), vl, vu,
525 static_cast<mplapackint
>(il),
static_cast<mplapackint
>(iu), abstol, mplapack_selected_count, w, z,
526 static_cast<mplapackint
>(ldz), isuppz ==
nullptr ?
nullptr : mplapack_isuppz.data(), work,
527 static_cast<mplapackint
>(lwork), mplapack_iwork.data(),
static_cast<mplapackint
>(liwork), mplapack_info);
528 selected_count =
static_cast<blas_int
>(mplapack_selected_count);
529 if (isuppz !=
nullptr)
531 uni20::lapack::mplapack::detail::copy_from_mplapack_ints(mplapack_isuppz, isuppz, support_size);
533 uni20::lapack::mplapack::detail::copy_from_mplapack_query_int_work(mplapack_iwork, iwork, liwork);
534 return static_cast<blas_int
>(mplapack_info);
537[[nodiscard]]
inline blas_int
sygv(blas_int itype,
char jobz,
char uplo, blas_int n, uni20::float128* a, blas_int lda,
538 uni20::float128* b, blas_int ldb, uni20::float128* w, uni20::float128* work,
541 UNI20_EXTERNAL_API_CALL(LAPACK, Rsygv, itype, jobz, uplo, n, a, lda, b, ldb, w, work, lwork);
542 mplapackint mplapack_info = 0;
543 Rsygv(
static_cast<mplapackint
>(itype), &jobz, &uplo,
static_cast<mplapackint
>(n), a,
static_cast<mplapackint
>(lda), b,
544 static_cast<mplapackint
>(ldb), w, work,
static_cast<mplapackint
>(lwork), mplapack_info);
545 return static_cast<blas_int
>(mplapack_info);
548[[nodiscard]]
inline blas_int
sygvd(blas_int itype,
char jobz,
char uplo, blas_int n, uni20::float128* a, blas_int lda,
549 uni20::float128* b, blas_int ldb, uni20::float128* w, uni20::float128* work,
550 blas_int lwork, blas_int* iwork, blas_int liwork)
552 UNI20_EXTERNAL_API_CALL(LAPACK, Rsygvd, itype, jobz, uplo, n, a, lda, b, ldb, w, work, lwork, iwork, liwork);
553 mplapackint mplapack_info = 0;
554 blas_int
const iwork_size = std::max<blas_int>(1, liwork == -1 ? blas_int{1} : liwork);
555 std::vector<mplapackint> mplapack_iwork = uni20::lapack::mplapack::detail::make_mplapack_int_work(iwork_size);
556 Rsygvd(
static_cast<mplapackint
>(itype), &jobz, &uplo,
static_cast<mplapackint
>(n), a,
static_cast<mplapackint
>(lda),
557 b,
static_cast<mplapackint
>(ldb), w, work,
static_cast<mplapackint
>(lwork), mplapack_iwork.data(),
558 static_cast<mplapackint
>(liwork), mplapack_info);
559 uni20::lapack::mplapack::detail::copy_from_mplapack_query_int_work(mplapack_iwork, iwork, liwork);
560 return static_cast<blas_int
>(mplapack_info);
563[[nodiscard]]
inline blas_int
sygvx(blas_int itype,
char jobz,
char range,
char uplo, blas_int n, uni20::float128* a,
564 blas_int lda, uni20::float128* b, blas_int ldb, uni20::float128 vl,
565 uni20::float128 vu, blas_int il, blas_int iu, uni20::float128 abstol,
566 blas_int& selected_count, uni20::float128* w, uni20::float128* z, blas_int ldz,
567 uni20::float128* work, blas_int lwork, blas_int* iwork, blas_int* ifail)
569 UNI20_EXTERNAL_API_CALL(LAPACK, Rsygvx, itype, jobz, range, uplo, n, a, lda, b, ldb, vl, vu, il, iu, abstol,
570 selected_count, w, z, ldz, work, lwork, iwork, ifail);
571 mplapackint mplapack_selected_count =
static_cast<mplapackint
>(selected_count);
572 mplapackint mplapack_info = 0;
573 blas_int
const iwork_size = 5 * std::max<blas_int>(1, n);
574 blas_int
const fail_size = std::max<blas_int>(1, n);
575 std::vector<mplapackint> mplapack_iwork = uni20::lapack::mplapack::detail::make_mplapack_int_work(iwork_size);
576 std::vector<mplapackint> mplapack_ifail;
577 if (ifail !=
nullptr)
579 mplapack_ifail = uni20::lapack::mplapack::detail::make_mplapack_int_work(fail_size);
581 Rsygvx(
static_cast<mplapackint
>(itype), &jobz, &range, &uplo,
static_cast<mplapackint
>(n), a,
582 static_cast<mplapackint
>(lda), b,
static_cast<mplapackint
>(ldb), vl, vu,
static_cast<mplapackint
>(il),
583 static_cast<mplapackint
>(iu), abstol, mplapack_selected_count, w, z,
static_cast<mplapackint
>(ldz), work,
584 static_cast<mplapackint
>(lwork), mplapack_iwork.data(), ifail ==
nullptr ?
nullptr : mplapack_ifail.data(),
586 selected_count =
static_cast<blas_int
>(mplapack_selected_count);
587 if (ifail !=
nullptr)
589 uni20::lapack::mplapack::detail::copy_from_mplapack_ints(mplapack_ifail, ifail, fail_size);
591 return static_cast<blas_int
>(mplapack_info);
596 uni20::float128* rwork)
598 UNI20_EXTERNAL_API_CALL(LAPACK, Cheev, jobz, uplo, n, a, lda, w, work, lwork, rwork);
599 mplapackint mplapack_info = 0;
600 Cheev(&jobz, &uplo,
static_cast<mplapackint
>(n), a,
static_cast<mplapackint
>(lda), w, work,
601 static_cast<mplapackint
>(lwork), rwork, mplapack_info);
602 return static_cast<blas_int
>(mplapack_info);
607 uni20::float128* rwork, blas_int lrwork, blas_int* iwork, blas_int liwork)
609 UNI20_EXTERNAL_API_CALL(LAPACK, Cheevd, jobz, uplo, n, a, lda, w, work, lwork, rwork, lrwork, iwork, liwork);
610 mplapackint mplapack_info = 0;
611 blas_int
const iwork_size = std::max<blas_int>(1, liwork == -1 ? blas_int{1} : liwork);
612 std::vector<mplapackint> mplapack_iwork = uni20::lapack::mplapack::detail::make_mplapack_int_work(iwork_size);
613 Cheevd(&jobz, &uplo,
static_cast<mplapackint
>(n), a,
static_cast<mplapackint
>(lda), w, work,
614 static_cast<mplapackint
>(lwork), rwork,
static_cast<mplapackint
>(lrwork), mplapack_iwork.data(),
615 static_cast<mplapackint
>(liwork), mplapack_info);
616 uni20::lapack::mplapack::detail::copy_from_mplapack_query_int_work(mplapack_iwork, iwork, liwork);
617 return static_cast<blas_int
>(mplapack_info);
621 blas_int lda, uni20::float128 vl, uni20::float128 vu, blas_int il, blas_int iu,
622 uni20::float128 abstol, blas_int& selected_count, uni20::float128* w,
625 blas_int lrwork, blas_int* iwork, blas_int liwork)
627 UNI20_EXTERNAL_API_CALL(LAPACK, Cheevr, jobz, range, uplo, n, a, lda, vl, vu, il, iu, abstol, selected_count, w, z,
628 ldz, isuppz, work, lwork, rwork, lrwork, iwork, liwork);
629 mplapackint mplapack_selected_count =
static_cast<mplapackint
>(selected_count);
630 mplapackint mplapack_info = 0;
631 blas_int
const support_size = 2 * std::max<blas_int>(1, n);
632 blas_int
const iwork_size = std::max<blas_int>(1, liwork == -1 ? blas_int{1} : liwork);
633 std::vector<mplapackint> mplapack_isuppz;
634 if (isuppz !=
nullptr)
636 mplapack_isuppz = uni20::lapack::mplapack::detail::make_mplapack_int_work(support_size);
638 std::vector<mplapackint> mplapack_iwork = uni20::lapack::mplapack::detail::make_mplapack_int_work(iwork_size);
639 Cheevr(&jobz, &range, &uplo,
static_cast<mplapackint
>(n), a,
static_cast<mplapackint
>(lda), vl, vu,
640 static_cast<mplapackint
>(il),
static_cast<mplapackint
>(iu), abstol, mplapack_selected_count, w, z,
641 static_cast<mplapackint
>(ldz), isuppz ==
nullptr ?
nullptr : mplapack_isuppz.data(), work,
642 static_cast<mplapackint
>(lwork), rwork,
static_cast<mplapackint
>(lrwork), mplapack_iwork.data(),
643 static_cast<mplapackint
>(liwork), mplapack_info);
644 selected_count =
static_cast<blas_int
>(mplapack_selected_count);
645 if (isuppz !=
nullptr)
647 uni20::lapack::mplapack::detail::copy_from_mplapack_ints(mplapack_isuppz, isuppz, support_size);
649 uni20::lapack::mplapack::detail::copy_from_mplapack_query_int_work(mplapack_iwork, iwork, liwork);
650 return static_cast<blas_int
>(mplapack_info);
657 UNI20_EXTERNAL_API_CALL(LAPACK, Chegv, itype, jobz, uplo, n, a, lda, b, ldb, w, work, lwork, rwork);
658 mplapackint mplapack_info = 0;
659 Chegv(
static_cast<mplapackint
>(itype), &jobz, &uplo,
static_cast<mplapackint
>(n), a,
static_cast<mplapackint
>(lda), b,
660 static_cast<mplapackint
>(ldb), w, work,
static_cast<mplapackint
>(lwork), rwork, mplapack_info);
661 return static_cast<blas_int
>(mplapack_info);
664[[nodiscard]]
inline blas_int
hegvd(blas_int itype,
char jobz,
char uplo, blas_int n,
668 blas_int lrwork, blas_int* iwork, blas_int liwork)
670 UNI20_EXTERNAL_API_CALL(LAPACK, Chegvd, itype, jobz, uplo, n, a, lda, b, ldb, w, work, lwork, rwork, lrwork, iwork,
672 mplapackint mplapack_info = 0;
673 blas_int
const iwork_size = std::max<blas_int>(1, liwork == -1 ? blas_int{1} : liwork);
674 std::vector<mplapackint> mplapack_iwork = uni20::lapack::mplapack::detail::make_mplapack_int_work(iwork_size);
675 Chegvd(
static_cast<mplapackint
>(itype), &jobz, &uplo,
static_cast<mplapackint
>(n), a,
static_cast<mplapackint
>(lda),
676 b,
static_cast<mplapackint
>(ldb), w, work,
static_cast<mplapackint
>(lwork), rwork,
677 static_cast<mplapackint
>(lrwork), mplapack_iwork.data(),
static_cast<mplapackint
>(liwork), mplapack_info);
678 uni20::lapack::mplapack::detail::copy_from_mplapack_query_int_work(mplapack_iwork, iwork, liwork);
679 return static_cast<blas_int
>(mplapack_info);
682[[nodiscard]]
inline blas_int
hegvx(blas_int itype,
char jobz,
char range,
char uplo, blas_int n,
685 uni20::float128 vu, blas_int il, blas_int iu, uni20::float128 abstol,
688 uni20::float128* rwork, blas_int* iwork, blas_int* ifail)
690 UNI20_EXTERNAL_API_CALL(LAPACK, Chegvx, itype, jobz, range, uplo, n, a, lda, b, ldb, vl, vu, il, iu, abstol,
691 selected_count, w, z, ldz, work, lwork, rwork, iwork, ifail);
692 mplapackint mplapack_selected_count =
static_cast<mplapackint
>(selected_count);
693 mplapackint mplapack_info = 0;
694 blas_int
const iwork_size = 5 * std::max<blas_int>(1, n);
695 blas_int
const fail_size = std::max<blas_int>(1, n);
696 std::vector<mplapackint> mplapack_iwork = uni20::lapack::mplapack::detail::make_mplapack_int_work(iwork_size);
697 std::vector<mplapackint> mplapack_ifail;
698 if (ifail !=
nullptr)
700 mplapack_ifail = uni20::lapack::mplapack::detail::make_mplapack_int_work(fail_size);
702 Chegvx(
static_cast<mplapackint
>(itype), &jobz, &range, &uplo,
static_cast<mplapackint
>(n), a,
703 static_cast<mplapackint
>(lda), b,
static_cast<mplapackint
>(ldb), vl, vu,
static_cast<mplapackint
>(il),
704 static_cast<mplapackint
>(iu), abstol, mplapack_selected_count, w, z,
static_cast<mplapackint
>(ldz), work,
705 static_cast<mplapackint
>(lwork), rwork, mplapack_iwork.data(),
706 ifail ==
nullptr ?
nullptr : mplapack_ifail.data(), mplapack_info);
707 selected_count =
static_cast<blas_int
>(mplapack_selected_count);
708 if (ifail !=
nullptr)
710 uni20::lapack::mplapack::detail::copy_from_mplapack_ints(mplapack_ifail, ifail, fail_size);
712 return static_cast<blas_int
>(mplapack_info);
715[[nodiscard]]
inline blas_int
geev(
char jobvl,
char jobvr, blas_int n, uni20::float128* a, blas_int lda,
716 uni20::float128* wr, uni20::float128* wi, uni20::float128* vl, blas_int ldvl,
717 uni20::float128* vr, blas_int ldvr, uni20::float128* work, blas_int lwork)
719 UNI20_EXTERNAL_API_CALL(LAPACK, Rgeev, jobvl, jobvr, n, a, lda, wr, wi, vl, ldvl, vr, ldvr, work, lwork);
720 mplapackint mplapack_info = 0;
721 Rgeev(&jobvl, &jobvr,
static_cast<mplapackint
>(n), a,
static_cast<mplapackint
>(lda), wr, wi, vl,
722 static_cast<mplapackint
>(ldvl), vr,
static_cast<mplapackint
>(ldvr), work,
static_cast<mplapackint
>(lwork),
724 return static_cast<blas_int
>(mplapack_info);
727[[nodiscard]]
inline blas_int
geevx(
char balanc,
char jobvl,
char jobvr,
char sense, blas_int n, uni20::float128* a,
728 blas_int lda, uni20::float128* wr, uni20::float128* wi, uni20::float128* vl,
729 blas_int ldvl, uni20::float128* vr, blas_int ldvr, blas_int& ilo, blas_int& ihi,
730 uni20::float128*
scale, uni20::float128& abnrm, uni20::float128* rconde,
731 uni20::float128* rcondv, uni20::float128* work, blas_int lwork, blas_int* iwork)
733 UNI20_EXTERNAL_API_CALL(LAPACK, Rgeevx, balanc, jobvl, jobvr, sense, n, a, lda, wr, wi, vl, ldvl, vr, ldvr, ilo, ihi,
734 scale, abnrm, rconde, rcondv, work, lwork, iwork);
735 mplapackint mplapack_ilo =
static_cast<mplapackint
>(ilo);
736 mplapackint mplapack_ihi =
static_cast<mplapackint
>(ihi);
737 mplapackint mplapack_info = 0;
738 blas_int
const iwork_size = std::max<blas_int>(1, 2 * n - 2);
739 std::vector<mplapackint> mplapack_iwork = uni20::lapack::mplapack::detail::make_mplapack_int_work(iwork_size);
740 Rgeevx(&balanc, &jobvl, &jobvr, &sense,
static_cast<mplapackint
>(n), a,
static_cast<mplapackint
>(lda), wr, wi, vl,
741 static_cast<mplapackint
>(ldvl), vr,
static_cast<mplapackint
>(ldvr), mplapack_ilo, mplapack_ihi,
scale, abnrm,
742 rconde, rcondv, work,
static_cast<mplapackint
>(lwork), mplapack_iwork.data(), mplapack_info);
743 ilo =
static_cast<blas_int
>(mplapack_ilo);
744 ihi =
static_cast<blas_int
>(mplapack_ihi);
745 return static_cast<blas_int
>(mplapack_info);
748[[nodiscard]]
inline blas_int
gebal(
char job, blas_int n, uni20::float128* a, blas_int lda, blas_int& first,
749 blas_int& last, uni20::float128*
scale)
752 mplapackint mplapack_first =
static_cast<mplapackint
>(first);
753 mplapackint mplapack_last =
static_cast<mplapackint
>(last);
754 mplapackint mplapack_info = 0;
755 Rgebal(&job,
static_cast<mplapackint
>(n), a,
static_cast<mplapackint
>(lda), mplapack_first, mplapack_last,
scale,
757 first =
static_cast<blas_int
>(mplapack_first);
758 last =
static_cast<blas_int
>(mplapack_last);
759 return static_cast<blas_int
>(mplapack_info);
762[[nodiscard]]
inline blas_int
gebak(
char job,
char side, blas_int n, blas_int first, blas_int last,
763 uni20::float128*
scale, blas_int vector_count, uni20::float128* vectors,
764 blas_int leading_dimension)
766 UNI20_EXTERNAL_API_CALL(LAPACK, Rgebak, job, side, n, first, last,
scale, vector_count, vectors, leading_dimension);
767 mplapackint mplapack_info = 0;
768 Rgebak(&job, &side,
static_cast<mplapackint
>(n),
static_cast<mplapackint
>(first),
static_cast<mplapackint
>(last),
769 scale,
static_cast<mplapackint
>(vector_count), vectors,
static_cast<mplapackint
>(leading_dimension),
771 return static_cast<blas_int
>(mplapack_info);
779 UNI20_EXTERNAL_API_CALL(LAPACK, Cgeev, jobvl, jobvr, n, a, lda, w, vl, ldvl, vr, ldvr, work, lwork, rwork);
780 mplapackint mplapack_info = 0;
781 Cgeev(&jobvl, &jobvr,
static_cast<mplapackint
>(n), a,
static_cast<mplapackint
>(lda), w, vl,
782 static_cast<mplapackint
>(ldvl), vr,
static_cast<mplapackint
>(ldvr), work,
static_cast<mplapackint
>(lwork),
783 rwork, mplapack_info);
784 return static_cast<blas_int
>(mplapack_info);
787[[nodiscard]]
inline blas_int
gees(
char jobvs,
char sort, blas_int n, uni20::float128* a, blas_int lda,
788 blas_int& selected_dimension, uni20::float128* wr, uni20::float128* wi,
789 uni20::float128* vs, blas_int ldvs, uni20::float128* work, blas_int lwork,
792 UNI20_EXTERNAL_API_CALL(LAPACK, Rgees, jobvs, sort, n, a, lda, selected_dimension, wr, wi, vs, ldvs, work, lwork,
794 mplapackint mplapack_selected_dimension =
static_cast<mplapackint
>(selected_dimension);
795 mplapackint mplapack_info = 0;
796 blas_int
const bwork_size = std::max<blas_int>(1, n);
797 std::unique_ptr<bool[]> mplapack_bwork;
798 if (bwork !=
nullptr)
800 mplapack_bwork = std::make_unique<bool[]>(
static_cast<std::size_t
>(bwork_size));
801 for (blas_int i = 0; i < n; ++i)
803 mplapack_bwork[
static_cast<std::size_t
>(i)] = bwork[i] != 0;
806 Rgees(&jobvs, &sort,
nullptr,
static_cast<mplapackint
>(n), a,
static_cast<mplapackint
>(lda),
807 mplapack_selected_dimension, wr, wi, vs,
static_cast<mplapackint
>(ldvs), work,
static_cast<mplapackint
>(lwork),
808 mplapack_bwork.get(), mplapack_info);
809 selected_dimension =
static_cast<blas_int
>(mplapack_selected_dimension);
810 if (bwork !=
nullptr)
812 for (blas_int i = 0; i < n; ++i)
814 bwork[i] = mplapack_bwork[
static_cast<std::size_t
>(i)] ? 1 : 0;
817 return static_cast<blas_int
>(mplapack_info);
826 UNI20_EXTERNAL_API_CALL(LAPACK, Cgees, jobvs, sort, n, a, lda, selected_dimension, w, vs, ldvs, work, lwork, rwork,
828 mplapackint mplapack_selected_dimension =
static_cast<mplapackint
>(selected_dimension);
829 mplapackint mplapack_info = 0;
830 blas_int
const bwork_size = std::max<blas_int>(1, n);
831 std::unique_ptr<bool[]> mplapack_bwork;
832 if (bwork !=
nullptr)
834 mplapack_bwork = std::make_unique<bool[]>(
static_cast<std::size_t
>(bwork_size));
835 for (blas_int i = 0; i < n; ++i)
837 mplapack_bwork[
static_cast<std::size_t
>(i)] = bwork[i] != 0;
840 Cgees(&jobvs, &sort,
nullptr,
static_cast<mplapackint
>(n), a,
static_cast<mplapackint
>(lda),
841 mplapack_selected_dimension, w, vs,
static_cast<mplapackint
>(ldvs), work,
static_cast<mplapackint
>(lwork),
842 rwork, mplapack_bwork.get(), mplapack_info);
843 selected_dimension =
static_cast<blas_int
>(mplapack_selected_dimension);
844 if (bwork !=
nullptr)
846 for (blas_int i = 0; i < n; ++i)
848 bwork[i] = mplapack_bwork[
static_cast<std::size_t
>(i)] ? 1 : 0;
851 return static_cast<blas_int
>(mplapack_info);
854[[nodiscard]]
inline blas_int
hseqr(
char job,
char compz, blas_int n, blas_int first, blas_int last, uni20::float128* h,
855 blas_int ldh, uni20::float128* wr, uni20::float128* wi, uni20::float128* z,
856 blas_int ldz, uni20::float128* work, blas_int lwork)
858 UNI20_EXTERNAL_API_CALL(LAPACK, Rhseqr, job, compz, n, first, last, h, ldh, wr, wi, z, ldz, work, lwork);
859 mplapackint mplapack_info = 0;
860 Rhseqr(&job, &compz,
static_cast<mplapackint
>(n),
static_cast<mplapackint
>(first),
static_cast<mplapackint
>(last), h,
861 static_cast<mplapackint
>(ldh), wr, wi, z,
static_cast<mplapackint
>(ldz), work,
static_cast<mplapackint
>(lwork),
863 return static_cast<blas_int
>(mplapack_info);
866[[nodiscard]]
inline blas_int
trexc(
char compq, blas_int n, uni20::float128* t, blas_int ldt, uni20::float128* q,
867 blas_int ldq, blas_int& first, blas_int& last, uni20::float128* work)
869 UNI20_EXTERNAL_API_CALL(LAPACK, Rtrexc, compq, n, t, ldt, q, ldq, first, last, work);
870 mplapackint mplapack_first =
static_cast<mplapackint
>(first);
871 mplapackint mplapack_last =
static_cast<mplapackint
>(last);
872 mplapackint mplapack_info = 0;
873 Rtrexc(&compq,
static_cast<mplapackint
>(n), t,
static_cast<mplapackint
>(ldt), q,
static_cast<mplapackint
>(ldq),
874 mplapack_first, mplapack_last, work, mplapack_info);
875 first =
static_cast<blas_int
>(mplapack_first);
876 last =
static_cast<blas_int
>(mplapack_last);
877 return static_cast<blas_int
>(mplapack_info);
884 mplapackint mplapack_first =
static_cast<mplapackint
>(first);
885 mplapackint mplapack_last =
static_cast<mplapackint
>(last);
886 mplapackint mplapack_info = 0;
887 Ctrexc(&compq,
static_cast<mplapackint
>(n), t,
static_cast<mplapackint
>(ldt), q,
static_cast<mplapackint
>(ldq),
888 mplapack_first, mplapack_last, mplapack_info);
889 first =
static_cast<blas_int
>(mplapack_first);
890 last =
static_cast<blas_int
>(mplapack_last);
891 return static_cast<blas_int
>(mplapack_info);
894[[nodiscard]]
inline blas_int
trsen(
char job,
char compq, blas_int* select, blas_int n, uni20::float128* t,
895 blas_int ldt, uni20::float128* q, blas_int ldq, uni20::float128* wr,
896 uni20::float128* wi, blas_int& selected_dimension,
897 uni20::float128& reciprocal_eigenvalue_cluster_condition,
898 uni20::float128& reciprocal_invariant_subspace_condition, uni20::float128* work,
899 blas_int lwork, blas_int* iwork, blas_int liwork)
901 UNI20_EXTERNAL_API_CALL(LAPACK, Rtrsen, job, compq, select, n, t, ldt, q, ldq, wr, wi, selected_dimension,
902 reciprocal_eigenvalue_cluster_condition, reciprocal_invariant_subspace_condition, work, lwork,
904 mplapackint mplapack_selected_dimension =
static_cast<mplapackint
>(selected_dimension);
905 mplapackint mplapack_info = 0;
906 blas_int
const select_size = std::max<blas_int>(1, n);
907 blas_int
const iwork_size = std::max<blas_int>(1, liwork == -1 ? blas_int{1} : liwork);
908 std::unique_ptr<bool[]> mplapack_select;
909 std::vector<mplapackint> mplapack_iwork = uni20::lapack::mplapack::detail::make_mplapack_int_work(iwork_size);
910 if (select !=
nullptr)
912 mplapack_select = std::make_unique<bool[]>(
static_cast<std::size_t
>(select_size));
913 for (blas_int i = 0; i < n; ++i)
915 mplapack_select[
static_cast<std::size_t
>(i)] = select[i] != 0;
918 Rtrsen(&job, &compq, mplapack_select.get(),
static_cast<mplapackint
>(n), t,
static_cast<mplapackint
>(ldt), q,
919 static_cast<mplapackint
>(ldq), wr, wi, mplapack_selected_dimension, reciprocal_eigenvalue_cluster_condition,
920 reciprocal_invariant_subspace_condition, work,
static_cast<mplapackint
>(lwork), mplapack_iwork.data(),
921 static_cast<mplapackint
>(liwork), mplapack_info);
922 selected_dimension =
static_cast<blas_int
>(mplapack_selected_dimension);
923 if (select !=
nullptr)
925 for (blas_int i = 0; i < n; ++i)
927 select[i] = mplapack_select[
static_cast<std::size_t
>(i)] ? 1 : 0;
930 uni20::lapack::mplapack::detail::copy_from_mplapack_query_int_work(mplapack_iwork, iwork, liwork);
931 return static_cast<blas_int
>(mplapack_info);
934[[nodiscard]]
inline blas_int
trevc(
char side,
char howmny, blas_int* select, blas_int n, uni20::float128* t,
935 blas_int ldt, uni20::float128* vl, blas_int ldvl, uni20::float128* vr,
936 blas_int ldvr, blas_int mm, blas_int& computed_vectors, uni20::float128* work)
938 UNI20_EXTERNAL_API_CALL(LAPACK, Rtrevc, side, howmny, select, n, t, ldt, vl, ldvl, vr, ldvr, mm, computed_vectors,
940 mplapackint mplapack_computed_vectors =
static_cast<mplapackint
>(computed_vectors);
941 mplapackint mplapack_info = 0;
942 blas_int
const select_size = std::max<blas_int>(1, n);
943 std::unique_ptr<bool[]> mplapack_select;
944 if (select !=
nullptr)
946 mplapack_select = std::make_unique<bool[]>(
static_cast<std::size_t
>(select_size));
947 for (blas_int i = 0; i < n; ++i)
949 mplapack_select[
static_cast<std::size_t
>(i)] = select[i] != 0;
952 Rtrevc(&side, &howmny, mplapack_select.get(),
static_cast<mplapackint
>(n), t,
static_cast<mplapackint
>(ldt), vl,
953 static_cast<mplapackint
>(ldvl), vr,
static_cast<mplapackint
>(ldvr),
static_cast<mplapackint
>(mm),
954 mplapack_computed_vectors, work, mplapack_info);
955 computed_vectors =
static_cast<blas_int
>(mplapack_computed_vectors);
956 if (select !=
nullptr)
958 for (blas_int i = 0; i < n; ++i)
960 select[i] = mplapack_select[
static_cast<std::size_t
>(i)] ? 1 : 0;
963 return static_cast<blas_int
>(mplapack_info);
966[[nodiscard]]
inline blas_int
trsna(
char job,
char howmny, blas_int* select, blas_int n, uni20::float128* t,
967 blas_int ldt, uni20::float128* vl, blas_int ldvl, uni20::float128* vr,
968 blas_int ldvr, uni20::float128* reciprocal_eigenvalue_condition_numbers,
969 uni20::float128* reciprocal_eigenvector_condition_numbers, blas_int mm,
970 blas_int& computed_estimates, uni20::float128* work, blas_int ldwork,
973 UNI20_EXTERNAL_API_CALL(LAPACK, Rtrsna, job, howmny, select, n, t, ldt, vl, ldvl, vr, ldvr,
974 reciprocal_eigenvalue_condition_numbers, reciprocal_eigenvector_condition_numbers, mm,
975 computed_estimates, work, ldwork, iwork);
976 mplapackint mplapack_computed_estimates =
static_cast<mplapackint
>(computed_estimates);
977 mplapackint mplapack_info = 0;
978 blas_int
const select_size = std::max<blas_int>(1, n);
979 blas_int
const iwork_size = std::max<blas_int>(1, 2 * std::max<blas_int>(1, n) - 2);
980 std::unique_ptr<bool[]> mplapack_select;
981 std::vector<mplapackint> mplapack_iwork = uni20::lapack::mplapack::detail::make_mplapack_int_work(iwork_size);
982 if (select !=
nullptr)
984 mplapack_select = std::make_unique<bool[]>(
static_cast<std::size_t
>(select_size));
985 for (blas_int i = 0; i < n; ++i)
987 mplapack_select[
static_cast<std::size_t
>(i)] = select[i] != 0;
990 Rtrsna(&job, &howmny, mplapack_select.get(),
static_cast<mplapackint
>(n), t,
static_cast<mplapackint
>(ldt), vl,
991 static_cast<mplapackint
>(ldvl), vr,
static_cast<mplapackint
>(ldvr), reciprocal_eigenvalue_condition_numbers,
992 reciprocal_eigenvector_condition_numbers,
static_cast<mplapackint
>(mm), mplapack_computed_estimates, work,
993 static_cast<mplapackint
>(ldwork), mplapack_iwork.data(), mplapack_info);
994 computed_estimates =
static_cast<blas_int
>(mplapack_computed_estimates);
995 if (select !=
nullptr)
997 for (blas_int i = 0; i < n; ++i)
999 select[i] = mplapack_select[
static_cast<std::size_t
>(i)] ? 1 : 0;
1002 return static_cast<blas_int
>(mplapack_info);
1005[[nodiscard]]
inline blas_int
ggev(
char jobvl,
char jobvr, blas_int n, uni20::float128* a, blas_int lda,
1006 uni20::float128* b, blas_int ldb, uni20::float128* alphar, uni20::float128* alphai,
1007 uni20::float128*
beta, uni20::float128* vl, blas_int ldvl, uni20::float128* vr,
1008 blas_int ldvr, uni20::float128* work, blas_int lwork)
1010 UNI20_EXTERNAL_API_CALL(LAPACK, Rggev, jobvl, jobvr, n, a, lda, b, ldb, alphar, alphai,
beta, vl, ldvl, vr, ldvr,
1012 mplapackint mplapack_info = 0;
1013 Rggev(&jobvl, &jobvr,
static_cast<mplapackint
>(n), a,
static_cast<mplapackint
>(lda), b,
static_cast<mplapackint
>(ldb),
1014 alphar, alphai,
beta, vl,
static_cast<mplapackint
>(ldvl), vr,
static_cast<mplapackint
>(ldvr), work,
1015 static_cast<mplapackint
>(lwork), mplapack_info);
1016 return static_cast<blas_int
>(mplapack_info);
1019[[nodiscard]]
inline blas_int
ggevx(
char balanc,
char jobvl,
char jobvr,
char sense, blas_int n, uni20::float128* a,
1020 blas_int lda, uni20::float128* b, blas_int ldb, uni20::float128* alphar,
1021 uni20::float128* alphai, uni20::float128*
beta, uni20::float128* vl, blas_int ldvl,
1022 uni20::float128* vr, blas_int ldvr, blas_int& ilo, blas_int& ihi,
1023 uni20::float128* lscale, uni20::float128* rscale, uni20::float128& abnrm,
1024 uni20::float128& bbnrm, uni20::float128* rconde, uni20::float128* rcondv,
1025 uni20::float128* work, blas_int lwork, blas_int* iwork, blas_int* bwork)
1027 UNI20_EXTERNAL_API_CALL(LAPACK, Rggevx, balanc, jobvl, jobvr, sense, n, a, lda, b, ldb, alphar, alphai,
beta, vl,
1028 ldvl, vr, ldvr, ilo, ihi, lscale, rscale, abnrm, bbnrm, rconde, rcondv, work, lwork, iwork,
1030 mplapackint mplapack_ilo =
static_cast<mplapackint
>(ilo);
1031 mplapackint mplapack_ihi =
static_cast<mplapackint
>(ihi);
1032 mplapackint mplapack_info = 0;
1033 blas_int
const iwork_size = std::max<blas_int>(1, n + 6);
1034 blas_int
const bwork_size = std::max<blas_int>(1, n);
1035 std::vector<mplapackint> mplapack_iwork = uni20::lapack::mplapack::detail::make_mplapack_int_work(iwork_size);
1036 std::unique_ptr<bool[]> mplapack_bwork;
1037 if (bwork !=
nullptr)
1039 mplapack_bwork = std::make_unique<bool[]>(
static_cast<std::size_t
>(bwork_size));
1040 for (blas_int i = 0; i < n; ++i)
1042 mplapack_bwork[
static_cast<std::size_t
>(i)] = bwork[i] != 0;
1045 Rggevx(&balanc, &jobvl, &jobvr, &sense,
static_cast<mplapackint
>(n), a,
static_cast<mplapackint
>(lda), b,
1046 static_cast<mplapackint
>(ldb), alphar, alphai,
beta, vl,
static_cast<mplapackint
>(ldvl), vr,
1047 static_cast<mplapackint
>(ldvr), mplapack_ilo, mplapack_ihi, lscale, rscale, abnrm, bbnrm, rconde, rcondv, work,
1048 static_cast<mplapackint
>(lwork), mplapack_iwork.data(), mplapack_bwork.get(), mplapack_info);
1049 ilo =
static_cast<blas_int
>(mplapack_ilo);
1050 ihi =
static_cast<blas_int
>(mplapack_ihi);
1051 if (bwork !=
nullptr)
1053 for (blas_int i = 0; i < n; ++i)
1055 bwork[i] = mplapack_bwork[
static_cast<std::size_t
>(i)] ? 1 : 0;
1058 return static_cast<blas_int
>(mplapack_info);
1061[[nodiscard]]
inline blas_int
ggbal(
char job, blas_int n, uni20::float128* a, blas_int lda, uni20::float128* b,
1062 blas_int ldb, blas_int& first, blas_int& last, uni20::float128* lscale,
1063 uni20::float128* rscale, uni20::float128* work)
1065 UNI20_EXTERNAL_API_CALL(LAPACK, Rggbal, job, n, a, lda, b, ldb, first, last, lscale, rscale, work);
1066 mplapackint mplapack_first =
static_cast<mplapackint
>(first);
1067 mplapackint mplapack_last =
static_cast<mplapackint
>(last);
1068 mplapackint mplapack_info = 0;
1069 Rggbal(&job,
static_cast<mplapackint
>(n), a,
static_cast<mplapackint
>(lda), b,
static_cast<mplapackint
>(ldb),
1070 mplapack_first, mplapack_last, lscale, rscale, work, mplapack_info);
1071 first =
static_cast<blas_int
>(mplapack_first);
1072 last =
static_cast<blas_int
>(mplapack_last);
1073 return static_cast<blas_int
>(mplapack_info);
1076[[nodiscard]]
inline blas_int
ggbak(
char job,
char side, blas_int n, blas_int first, blas_int last,
1077 uni20::float128* lscale, uni20::float128* rscale, blas_int vector_count,
1078 uni20::float128* vectors, blas_int leading_dimension)
1080 UNI20_EXTERNAL_API_CALL(LAPACK, Rggbak, job, side, n, first, last, lscale, rscale, vector_count, vectors,
1082 mplapackint mplapack_info = 0;
1083 Rggbak(&job, &side,
static_cast<mplapackint
>(n),
static_cast<mplapackint
>(first),
static_cast<mplapackint
>(last),
1084 lscale, rscale,
static_cast<mplapackint
>(vector_count), vectors,
static_cast<mplapackint
>(leading_dimension),
1086 return static_cast<blas_int
>(mplapack_info);
1089[[nodiscard]]
inline blas_int
gges(
char jobvsl,
char jobvsr,
char sort, blas_int n, uni20::float128* a, blas_int lda,
1090 uni20::float128* b, blas_int ldb, blas_int& selected_dimension,
1091 uni20::float128* alphar, uni20::float128* alphai, uni20::float128*
beta,
1092 uni20::float128* vsl, blas_int ldvsl, uni20::float128* vsr, blas_int ldvsr,
1093 uni20::float128* work, blas_int lwork, blas_int* bwork)
1095 UNI20_EXTERNAL_API_CALL(LAPACK, Rgges, jobvsl, jobvsr, sort, n, a, lda, b, ldb, selected_dimension, alphar, alphai,
1096 beta, vsl, ldvsl, vsr, ldvsr, work, lwork, bwork);
1097 mplapackint mplapack_selected_dimension =
static_cast<mplapackint
>(selected_dimension);
1098 mplapackint mplapack_info = 0;
1099 blas_int
const bwork_size = std::max<blas_int>(1, n);
1100 std::unique_ptr<bool[]> mplapack_bwork;
1101 if (bwork !=
nullptr)
1103 mplapack_bwork = std::make_unique<bool[]>(
static_cast<std::size_t
>(bwork_size));
1105 Rgges(&jobvsl, &jobvsr, &sort,
nullptr,
static_cast<mplapackint
>(n), a,
static_cast<mplapackint
>(lda), b,
1106 static_cast<mplapackint
>(ldb), mplapack_selected_dimension, alphar, alphai,
beta, vsl,
1107 static_cast<mplapackint
>(ldvsl), vsr,
static_cast<mplapackint
>(ldvsr), work,
static_cast<mplapackint
>(lwork),
1108 mplapack_bwork.get(), mplapack_info);
1109 selected_dimension =
static_cast<blas_int
>(mplapack_selected_dimension);
1110 if (bwork !=
nullptr)
1112 for (blas_int i = 0; i < n; ++i)
1114 bwork[i] = mplapack_bwork[
static_cast<std::size_t
>(i)] ? 1 : 0;
1117 return static_cast<blas_int
>(mplapack_info);
1120[[nodiscard]]
inline blas_int
gghrd(
char compq,
char compz, blas_int n, blas_int first, blas_int last,
1121 uni20::float128* a, blas_int lda, uni20::float128* b, blas_int ldb,
1122 uni20::float128* q, blas_int ldq, uni20::float128* z, blas_int ldz)
1124 UNI20_EXTERNAL_API_CALL(LAPACK, Rgghrd, compq, compz, n, first, last, a, lda, b, ldb, q, ldq, z, ldz);
1125 mplapackint mplapack_info = 0;
1126 Rgghrd(&compq, &compz,
static_cast<mplapackint
>(n),
static_cast<mplapackint
>(first),
static_cast<mplapackint
>(last),
1127 a,
static_cast<mplapackint
>(lda), b,
static_cast<mplapackint
>(ldb), q,
static_cast<mplapackint
>(ldq), z,
1128 static_cast<mplapackint
>(ldz), mplapack_info);
1129 return static_cast<blas_int
>(mplapack_info);
1132[[nodiscard]]
inline blas_int
hgeqz(
char job,
char compq,
char compz, blas_int n, blas_int first, blas_int last,
1133 uni20::float128* h, blas_int ldh, uni20::float128* t, blas_int ldt,
1134 uni20::float128* alphar, uni20::float128* alphai, uni20::float128*
beta,
1135 uni20::float128* q, blas_int ldq, uni20::float128* z, blas_int ldz,
1136 uni20::float128* work, blas_int lwork)
1138 UNI20_EXTERNAL_API_CALL(LAPACK, Rhgeqz, job, compq, compz, n, first, last, h, ldh, t, ldt, alphar, alphai,
beta, q,
1139 ldq, z, ldz, work, lwork);
1140 mplapackint mplapack_info = 0;
1141 Rhgeqz(&job, &compq, &compz,
static_cast<mplapackint
>(n),
static_cast<mplapackint
>(first),
1142 static_cast<mplapackint
>(last), h,
static_cast<mplapackint
>(ldh), t,
static_cast<mplapackint
>(ldt), alphar,
1143 alphai,
beta, q,
static_cast<mplapackint
>(ldq), z,
static_cast<mplapackint
>(ldz), work,
1144 static_cast<mplapackint
>(lwork), mplapack_info);
1145 return static_cast<blas_int
>(mplapack_info);
1148[[nodiscard]]
inline blas_int
tgexc(
bool wantq,
bool wantz, blas_int n, uni20::float128* a, blas_int lda,
1149 uni20::float128* b, blas_int ldb, uni20::float128* q, blas_int ldq,
1150 uni20::float128* z, blas_int ldz, blas_int& first, blas_int& last,
1151 uni20::float128* work, blas_int lwork)
1153 UNI20_EXTERNAL_API_CALL(LAPACK, Rtgexc, wantq, wantz, n, a, lda, b, ldb, q, ldq, z, ldz, first, last, work, lwork);
1154 mplapackint mplapack_first =
static_cast<mplapackint
>(first);
1155 mplapackint mplapack_last =
static_cast<mplapackint
>(last);
1156 mplapackint mplapack_info = 0;
1157 Rtgexc(wantq, wantz,
static_cast<mplapackint
>(n), a,
static_cast<mplapackint
>(lda), b,
static_cast<mplapackint
>(ldb),
1158 q,
static_cast<mplapackint
>(ldq), z,
static_cast<mplapackint
>(ldz), mplapack_first, mplapack_last, work,
1159 static_cast<mplapackint
>(lwork), mplapack_info);
1160 first =
static_cast<blas_int
>(mplapack_first);
1161 last =
static_cast<blas_int
>(mplapack_last);
1162 return static_cast<blas_int
>(mplapack_info);
1165[[nodiscard]]
inline blas_int
tgsen(blas_int ijob,
bool wantq,
bool wantz, blas_int* select, blas_int n,
1166 uni20::float128* a, blas_int lda, uni20::float128* b, blas_int ldb,
1167 uni20::float128* alphar, uni20::float128* alphai, uni20::float128*
beta,
1168 uni20::float128* q, blas_int ldq, uni20::float128* z, blas_int ldz,
1169 blas_int& selected_dimension, uni20::float128& pl, uni20::float128& pr,
1170 uni20::float128* dif, uni20::float128* work, blas_int lwork, blas_int* iwork,
1173 UNI20_EXTERNAL_API_CALL(LAPACK, Rtgsen, ijob, wantq, wantz, select, n, a, lda, b, ldb, alphar, alphai,
beta, q, ldq,
1174 z, ldz, selected_dimension, pl, pr, dif, work, lwork, iwork, liwork);
1175 mplapackint mplapack_selected_dimension =
static_cast<mplapackint
>(selected_dimension);
1176 mplapackint mplapack_info = 0;
1177 blas_int
const select_size = std::max<blas_int>(1, n);
1178 blas_int
const iwork_size = std::max<blas_int>(1, liwork == -1 ? blas_int{1} : liwork);
1179 std::unique_ptr<bool[]> mplapack_select;
1180 std::vector<mplapackint> mplapack_iwork = uni20::lapack::mplapack::detail::make_mplapack_int_work(iwork_size);
1181 if (select !=
nullptr)
1183 mplapack_select = std::make_unique<bool[]>(
static_cast<std::size_t
>(select_size));
1184 for (blas_int i = 0; i < n; ++i)
1186 mplapack_select[
static_cast<std::size_t
>(i)] = select[i] != 0;
1189 Rtgsen(
static_cast<mplapackint
>(ijob), wantq, wantz, mplapack_select.get(),
static_cast<mplapackint
>(n), a,
1190 static_cast<mplapackint
>(lda), b,
static_cast<mplapackint
>(ldb), alphar, alphai,
beta, q,
1191 static_cast<mplapackint
>(ldq), z,
static_cast<mplapackint
>(ldz), mplapack_selected_dimension, pl, pr, dif,
1192 work,
static_cast<mplapackint
>(lwork), mplapack_iwork.data(),
static_cast<mplapackint
>(liwork), mplapack_info);
1193 selected_dimension =
static_cast<blas_int
>(mplapack_selected_dimension);
1194 if (select !=
nullptr)
1196 for (blas_int i = 0; i < n; ++i)
1198 select[i] = mplapack_select[
static_cast<std::size_t
>(i)] ? 1 : 0;
1201 uni20::lapack::mplapack::detail::copy_from_mplapack_query_int_work(mplapack_iwork, iwork, liwork);
1202 return static_cast<blas_int
>(mplapack_info);
1205[[nodiscard]]
inline blas_int
tgevc(
char side,
char howmny, blas_int* select, blas_int n, uni20::float128* s,
1206 blas_int lds, uni20::float128*
p, blas_int ldp, uni20::float128* vl, blas_int ldvl,
1207 uni20::float128* vr, blas_int ldvr, blas_int mm, blas_int& computed_vectors,
1208 uni20::float128* work)
1210 UNI20_EXTERNAL_API_CALL(LAPACK, Rtgevc, side, howmny, select, n, s, lds,
p, ldp, vl, ldvl, vr, ldvr, mm,
1211 computed_vectors, work);
1212 mplapackint mplapack_computed_vectors =
static_cast<mplapackint
>(computed_vectors);
1213 mplapackint mplapack_info = 0;
1214 blas_int
const select_size = std::max<blas_int>(1, n);
1215 std::unique_ptr<bool[]> mplapack_select;
1216 if (select !=
nullptr)
1218 mplapack_select = std::make_unique<bool[]>(
static_cast<std::size_t
>(select_size));
1219 for (blas_int i = 0; i < n; ++i)
1221 mplapack_select[
static_cast<std::size_t
>(i)] = select[i] != 0;
1224 Rtgevc(&side, &howmny, mplapack_select.get(),
static_cast<mplapackint
>(n), s,
static_cast<mplapackint
>(lds),
p,
1225 static_cast<mplapackint
>(ldp), vl,
static_cast<mplapackint
>(ldvl), vr,
static_cast<mplapackint
>(ldvr),
1226 static_cast<mplapackint
>(mm), mplapack_computed_vectors, work, mplapack_info);
1227 computed_vectors =
static_cast<blas_int
>(mplapack_computed_vectors);
1228 if (select !=
nullptr)
1230 for (blas_int i = 0; i < n; ++i)
1232 select[i] = mplapack_select[
static_cast<std::size_t
>(i)] ? 1 : 0;
1235 return static_cast<blas_int
>(mplapack_info);
1238[[nodiscard]]
inline blas_int
tgsna(
char job,
char howmny, blas_int* select, blas_int n, uni20::float128* a,
1239 blas_int lda, uni20::float128* b, blas_int ldb, uni20::float128* vl, blas_int ldvl,
1240 uni20::float128* vr, blas_int ldvr,
1241 uni20::float128* reciprocal_eigenvalue_condition_numbers,
1242 uni20::float128* reciprocal_eigenvector_condition_numbers, blas_int mm,
1243 blas_int& computed_estimates, uni20::float128* work, blas_int lwork,
1246 UNI20_EXTERNAL_API_CALL(LAPACK, Rtgsna, job, howmny, select, n, a, lda, b, ldb, vl, ldvl, vr, ldvr,
1247 reciprocal_eigenvalue_condition_numbers, reciprocal_eigenvector_condition_numbers, mm,
1248 computed_estimates, work, lwork, iwork);
1249 mplapackint mplapack_computed_estimates =
static_cast<mplapackint
>(computed_estimates);
1250 mplapackint mplapack_info = 0;
1251 blas_int
const select_size = std::max<blas_int>(1, n);
1252 blas_int
const iwork_size = std::max<blas_int>(1, n + 6);
1253 std::unique_ptr<bool[]> mplapack_select;
1254 std::vector<mplapackint> mplapack_iwork = uni20::lapack::mplapack::detail::make_mplapack_int_work(iwork_size);
1255 if (select !=
nullptr)
1257 mplapack_select = std::make_unique<bool[]>(
static_cast<std::size_t
>(select_size));
1258 for (blas_int i = 0; i < n; ++i)
1260 mplapack_select[
static_cast<std::size_t
>(i)] = select[i] != 0;
1263 Rtgsna(&job, &howmny, mplapack_select.get(),
static_cast<mplapackint
>(n), a,
static_cast<mplapackint
>(lda), b,
1264 static_cast<mplapackint
>(ldb), vl,
static_cast<mplapackint
>(ldvl), vr,
static_cast<mplapackint
>(ldvr),
1265 reciprocal_eigenvalue_condition_numbers, reciprocal_eigenvector_condition_numbers,
1266 static_cast<mplapackint
>(mm), mplapack_computed_estimates, work,
static_cast<mplapackint
>(lwork),
1267 mplapack_iwork.data(), mplapack_info);
1268 computed_estimates =
static_cast<blas_int
>(mplapack_computed_estimates);
1269 if (select !=
nullptr)
1271 for (blas_int i = 0; i < n; ++i)
1273 select[i] = mplapack_select[
static_cast<std::size_t
>(i)] ? 1 : 0;
1276 return static_cast<blas_int
>(mplapack_info);
1279[[nodiscard]]
inline blas_int
orgbr(
char vect, blas_int m, blas_int n, blas_int k, uni20::float128* a, blas_int lda,
1280 uni20::float128* tau, uni20::float128* work, blas_int lwork)
1282 UNI20_EXTERNAL_API_CALL(LAPACK, Rorgbr, vect, m, n, k, a, lda, tau, work, lwork);
1283 mplapackint mplapack_info = 0;
1284 Rorgbr(&vect,
static_cast<mplapackint
>(m),
static_cast<mplapackint
>(n),
static_cast<mplapackint
>(k), a,
1285 static_cast<mplapackint
>(lda), tau, work,
static_cast<mplapackint
>(lwork), mplapack_info);
1286 return static_cast<blas_int
>(mplapack_info);
1289[[nodiscard]]
inline blas_int
orghr(blas_int n, blas_int first, blas_int last, uni20::float128* a, blas_int lda,
1290 uni20::float128
const* tau, uni20::float128* work, blas_int lwork)
1293 mplapackint mplapack_info = 0;
1294 Rorghr(
static_cast<mplapackint
>(n),
static_cast<mplapackint
>(first),
static_cast<mplapackint
>(last), a,
1295 static_cast<mplapackint
>(lda),
const_cast<uni20::float128*
>(tau), work,
static_cast<mplapackint
>(lwork),
1297 return static_cast<blas_int
>(mplapack_info);
1300[[nodiscard]]
inline blas_int
orgtr(
char uplo, blas_int n, uni20::float128* a, blas_int lda, uni20::float128
const* tau,
1301 uni20::float128* work, blas_int lwork)
1304 mplapackint mplapack_info = 0;
1305 Rorgtr(&uplo,
static_cast<mplapackint
>(n), a,
static_cast<mplapackint
>(lda),
const_cast<uni20::float128*
>(tau), work,
1306 static_cast<mplapackint
>(lwork), mplapack_info);
1307 return static_cast<blas_int
>(mplapack_info);
1310[[nodiscard]]
inline blas_int
ormhr(
char side,
char trans, blas_int m, blas_int n, blas_int first, blas_int last,
1311 uni20::float128* a, blas_int lda, uni20::float128
const* tau, uni20::float128*
c,
1312 blas_int ldc, uni20::float128* work, blas_int lwork)
1314 UNI20_EXTERNAL_API_CALL(LAPACK, Rormhr, side, trans, m, n, first, last, a, lda, tau,
c, ldc, work, lwork);
1315 mplapackint mplapack_info = 0;
1316 Rormhr(&side, &trans,
static_cast<mplapackint
>(m),
static_cast<mplapackint
>(n),
static_cast<mplapackint
>(first),
1317 static_cast<mplapackint
>(last), a,
static_cast<mplapackint
>(lda),
const_cast<uni20::float128*
>(tau),
c,
1318 static_cast<mplapackint
>(ldc), work,
static_cast<mplapackint
>(lwork), mplapack_info);
1319 return static_cast<blas_int
>(mplapack_info);
1322[[nodiscard]]
inline blas_int
ormtr(
char side,
char uplo,
char trans, blas_int m, blas_int n, uni20::float128* a,
1323 blas_int lda, uni20::float128
const* tau, uni20::float128*
c, blas_int ldc,
1324 uni20::float128* work, blas_int lwork)
1326 UNI20_EXTERNAL_API_CALL(LAPACK, Rormtr, side, uplo, trans, m, n, a, lda, tau,
c, ldc, work, lwork);
1327 mplapackint mplapack_info = 0;
1328 Rormtr(&side, &uplo, &trans,
static_cast<mplapackint
>(m),
static_cast<mplapackint
>(n), a,
1329 static_cast<mplapackint
>(lda),
const_cast<uni20::float128*
>(tau),
c,
static_cast<mplapackint
>(ldc), work,
1330 static_cast<mplapackint
>(lwork), mplapack_info);
1331 return static_cast<blas_int
>(mplapack_info);
1334[[nodiscard]]
inline blas_int
ormbr(
char vect,
char side,
char trans, blas_int m, blas_int n, blas_int k,
1335 uni20::float128* a, blas_int lda, uni20::float128* tau, uni20::float128*
c,
1336 blas_int ldc, uni20::float128* work, blas_int lwork)
1338 UNI20_EXTERNAL_API_CALL(LAPACK, Rormbr, vect, side, trans, m, n, k, a, lda, tau,
c, ldc, work, lwork);
1339 mplapackint mplapack_info = 0;
1340 Rormbr(&vect, &side, &trans,
static_cast<mplapackint
>(m),
static_cast<mplapackint
>(n),
static_cast<mplapackint
>(k), a,
1341 static_cast<mplapackint
>(lda), tau,
c,
static_cast<mplapackint
>(ldc), work,
static_cast<mplapackint
>(lwork),
1343 return static_cast<blas_int
>(mplapack_info);
1346[[nodiscard]]
inline blas_int
gesvd(
char jobu,
char jobvt, blas_int m, blas_int n, uni20::float128* a, blas_int lda,
1347 uni20::float128* s, uni20::float128* u, blas_int ldu, uni20::float128* vt,
1348 blas_int ldvt, uni20::float128* work, blas_int lwork)
1350 UNI20_EXTERNAL_API_CALL(LAPACK, Rgesvd, jobu, jobvt, m, n, a, lda, s, u, ldu, vt, ldvt, work, lwork);
1351 mplapackint mplapack_info = 0;
1352 Rgesvd(&jobu, &jobvt,
static_cast<mplapackint
>(m),
static_cast<mplapackint
>(n), a,
static_cast<mplapackint
>(lda), s,
1353 u,
static_cast<mplapackint
>(ldu), vt,
static_cast<mplapackint
>(ldvt), work,
static_cast<mplapackint
>(lwork),
1355 return static_cast<blas_int
>(mplapack_info);
1363 UNI20_EXTERNAL_API_CALL(LAPACK, Cgesvd, jobu, jobvt, m, n, a, lda, s, u, ldu, vt, ldvt, work, lwork, rwork);
1364 mplapackint mplapack_info = 0;
1365 Cgesvd(&jobu, &jobvt,
static_cast<mplapackint
>(m),
static_cast<mplapackint
>(n), a,
static_cast<mplapackint
>(lda), s,
1366 u,
static_cast<mplapackint
>(ldu), vt,
static_cast<mplapackint
>(ldvt), work,
static_cast<mplapackint
>(lwork),
1367 rwork, mplapack_info);
1368 return static_cast<blas_int
>(mplapack_info);
1371[[nodiscard]]
inline blas_int
gesdd(
char jobz, blas_int m, blas_int n, uni20::float128* a, blas_int lda,
1372 uni20::float128* s, uni20::float128* u, blas_int ldu, uni20::float128* vt,
1373 blas_int ldvt, uni20::float128* work, blas_int lwork, blas_int* iwork)
1375 UNI20_EXTERNAL_API_CALL(LAPACK, Rgesdd, jobz, m, n, a, lda, s, u, ldu, vt, ldvt, work, lwork, iwork);
1376 mplapackint mplapack_info = 0;
1377 std::vector<mplapackint> mplapack_iwork = uni20::lapack::mplapack::detail::make_mplapack_int_work(8 * std::min(m, n));
1378 Rgesdd(&jobz,
static_cast<mplapackint
>(m),
static_cast<mplapackint
>(n), a,
static_cast<mplapackint
>(lda), s, u,
1379 static_cast<mplapackint
>(ldu), vt,
static_cast<mplapackint
>(ldvt), work,
static_cast<mplapackint
>(lwork),
1380 mplapack_iwork.data(), mplapack_info);
1381 return static_cast<blas_int
>(mplapack_info);
1390 UNI20_EXTERNAL_API_CALL(LAPACK, Cgesdd, jobz, m, n, a, lda, s, u, ldu, vt, ldvt, work, lwork, rwork, iwork);
1391 mplapackint mplapack_info = 0;
1392 std::vector<mplapackint> mplapack_iwork = uni20::lapack::mplapack::detail::make_mplapack_int_work(8 * std::min(m, n));
1393 Cgesdd(&jobz,
static_cast<mplapackint
>(m),
static_cast<mplapackint
>(n), a,
static_cast<mplapackint
>(lda), s, u,
1394 static_cast<mplapackint
>(ldu), vt,
static_cast<mplapackint
>(ldvt), work,
static_cast<mplapackint
>(lwork),
1395 rwork, mplapack_iwork.data(), mplapack_info);
1396 return static_cast<blas_int
>(mplapack_info);
1399[[nodiscard]]
inline blas_int
gesvdx(
char jobu,
char jobvt,
char range, blas_int m, blas_int n, uni20::float128* a,
1400 blas_int lda, uni20::float128 vl, uni20::float128 vu, blas_int il, blas_int iu,
1401 blas_int& selected_count, uni20::float128* singular_values, uni20::float128* u,
1402 blas_int ldu, uni20::float128* vt, blas_int ldvt, uni20::float128* work,
1403 blas_int lwork, blas_int* iwork)
1405 UNI20_EXTERNAL_API_CALL(LAPACK, Rgesvdx, jobu, jobvt, range, m, n, a, lda, vl, vu, il, iu, selected_count,
1406 singular_values, u, ldu, vt, ldvt, work, lwork, iwork);
1407 mplapackint mplapack_selected_count =
static_cast<mplapackint
>(selected_count);
1408 mplapackint mplapack_info = 0;
1409 blas_int
const iwork_size = 12 * std::max<blas_int>(1, std::min(m, n));
1410 std::vector<mplapackint> mplapack_iwork = uni20::lapack::mplapack::detail::make_mplapack_int_work(iwork_size);
1411 Rgesvdx(&jobu, &jobvt, &range,
static_cast<mplapackint
>(m),
static_cast<mplapackint
>(n), a,
1412 static_cast<mplapackint
>(lda), vl, vu,
static_cast<mplapackint
>(il),
static_cast<mplapackint
>(iu),
1413 mplapack_selected_count, singular_values, u,
static_cast<mplapackint
>(ldu), vt,
1414 static_cast<mplapackint
>(ldvt), work,
static_cast<mplapackint
>(lwork), mplapack_iwork.data(), mplapack_info);
1415 selected_count =
static_cast<blas_int
>(mplapack_selected_count);
1416 return static_cast<blas_int
>(mplapack_info);
1419[[nodiscard]]
inline blas_int
gesvdx(
char jobu,
char jobvt,
char range, blas_int m, blas_int n,
1421 uni20::float128 vu, blas_int il, blas_int iu, blas_int& selected_count,
1427 UNI20_EXTERNAL_API_CALL(LAPACK, Cgesvdx, jobu, jobvt, range, m, n, a, lda, vl, vu, il, iu, selected_count,
1428 singular_values, u, ldu, vt, ldvt, work, lwork, rwork, iwork);
1429 mplapackint mplapack_selected_count =
static_cast<mplapackint
>(selected_count);
1430 mplapackint mplapack_info = 0;
1431 blas_int
const iwork_size = 12 * std::max<blas_int>(1, std::min(m, n));
1432 std::vector<mplapackint> mplapack_iwork = uni20::lapack::mplapack::detail::make_mplapack_int_work(iwork_size);
1433 Cgesvdx(&jobu, &jobvt, &range,
static_cast<mplapackint
>(m),
static_cast<mplapackint
>(n), a,
1434 static_cast<mplapackint
>(lda), vl, vu,
static_cast<mplapackint
>(il),
static_cast<mplapackint
>(iu),
1435 mplapack_selected_count, singular_values, u,
static_cast<mplapackint
>(ldu), vt,
1436 static_cast<mplapackint
>(ldvt), work,
static_cast<mplapackint
>(lwork), rwork, mplapack_iwork.data(),
1438 selected_count =
static_cast<blas_int
>(mplapack_selected_count);
1439 return static_cast<blas_int
>(mplapack_info);
1442[[nodiscard]]
inline blas_int
bdsqr(
char uplo, blas_int n, blas_int ncvt, blas_int nru, blas_int ncc,
1443 uni20::float128* d, uni20::float128* e, uni20::float128* vt, blas_int ldvt,
1444 uni20::float128* u, blas_int ldu, uni20::float128*
c, blas_int ldc,
1445 uni20::float128* work)
1447 UNI20_EXTERNAL_API_CALL(LAPACK, Rbdsqr, uplo, n, ncvt, nru, ncc, d, e, vt, ldvt, u, ldu,
c, ldc, work);
1448 mplapackint mplapack_info = 0;
1449 Rbdsqr(&uplo,
static_cast<mplapackint
>(n),
static_cast<mplapackint
>(ncvt),
static_cast<mplapackint
>(nru),
1450 static_cast<mplapackint
>(ncc), d, e, vt,
static_cast<mplapackint
>(ldvt), u,
static_cast<mplapackint
>(ldu),
c,
1451 static_cast<mplapackint
>(ldc), work, mplapack_info);
1452 return static_cast<blas_int
>(mplapack_info);
1455[[nodiscard]]
inline blas_int
bdsdc(
char uplo,
char compq, blas_int n, uni20::float128* d, uni20::float128* e,
1456 uni20::float128* u, blas_int ldu, uni20::float128* vt, blas_int ldvt,
1457 uni20::float128* q, blas_int* iq, uni20::float128* work, blas_int* iwork)
1459 UNI20_EXTERNAL_API_CALL(LAPACK, Rbdsdc, uplo, compq, n, d, e, u, ldu, vt, ldvt, q, iq, work, iwork);
1460 mplapackint mplapack_info = 0;
1461 std::vector<mplapackint> mplapack_iq = uni20::lapack::mplapack::detail::to_mplapack_ints(iq, 1);
1462 blas_int
const iwork_size = 8 * std::max<blas_int>(1, n);
1463 std::vector<mplapackint> mplapack_iwork = uni20::lapack::mplapack::detail::make_mplapack_int_work(iwork_size);
1464 Rbdsdc(&uplo, &compq,
static_cast<mplapackint
>(n), d, e, u,
static_cast<mplapackint
>(ldu), vt,
1465 static_cast<mplapackint
>(ldvt), q, mplapack_iq.data(), work, mplapack_iwork.data(), mplapack_info);
1466 uni20::lapack::mplapack::detail::copy_from_mplapack_ints(mplapack_iq, iq, 1);
1467 return static_cast<blas_int
>(mplapack_info);
1470[[nodiscard]]
inline blas_int
bdsvdx(
char uplo,
char jobz,
char range, blas_int n, uni20::float128* d,
1471 uni20::float128* e, uni20::float128 vl, uni20::float128 vu, blas_int il,
1472 blas_int iu, blas_int& selected_count, uni20::float128* singular_values,
1473 uni20::float128* z, blas_int ldz, uni20::float128* work, blas_int* iwork)
1475 UNI20_EXTERNAL_API_CALL(LAPACK, Rbdsvdx, uplo, jobz, range, n, d, e, vl, vu, il, iu, selected_count, singular_values,
1476 z, ldz, work, iwork);
1477 mplapackint mplapack_selected_count =
static_cast<mplapackint
>(selected_count);
1478 mplapackint mplapack_info = 0;
1479 blas_int
const iwork_size = 12 * std::max<blas_int>(1, n);
1480 std::vector<mplapackint> mplapack_iwork = uni20::lapack::mplapack::detail::make_mplapack_int_work(iwork_size);
1481 Rbdsvdx(&uplo, &jobz, &range,
static_cast<mplapackint
>(n), d, e, vl, vu,
static_cast<mplapackint
>(il),
1482 static_cast<mplapackint
>(iu), mplapack_selected_count, singular_values, z,
static_cast<mplapackint
>(ldz),
1483 work, mplapack_iwork.data(), mplapack_info);
1484 selected_count =
static_cast<blas_int
>(mplapack_selected_count);
1485 return static_cast<blas_int
>(mplapack_info);
1488[[nodiscard]]
inline blas_int
potrf(
char uplo, blas_int n, uni20::float128* a, blas_int lda)
1491 mplapackint mplapack_info = 0;
1492 Rpotrf(&uplo,
static_cast<mplapackint
>(n), a,
static_cast<mplapackint
>(lda), mplapack_info);
1493 return static_cast<blas_int
>(mplapack_info);
1496[[nodiscard]]
inline blas_int
pstrf(
char uplo, blas_int n, uni20::float128* a, blas_int lda, blas_int* pivots,
1497 blas_int& rank, uni20::float128 tolerance, uni20::float128* work)
1500 mplapackint mplapack_rank =
static_cast<mplapackint
>(rank);
1501 mplapackint mplapack_info = 0;
1502 std::vector<mplapackint> mplapack_pivots = uni20::lapack::mplapack::detail::to_mplapack_ints(pivots, n);
1503 Rpstrf(&uplo,
static_cast<mplapackint
>(n), a,
static_cast<mplapackint
>(lda), mplapack_pivots.data(), mplapack_rank,
1504 tolerance, work, mplapack_info);
1505 uni20::lapack::mplapack::detail::copy_from_mplapack_ints(mplapack_pivots, pivots, n);
1506 rank =
static_cast<blas_int
>(mplapack_rank);
1507 return static_cast<blas_int
>(mplapack_info);
1510[[nodiscard]]
inline blas_int
potri(
char uplo, blas_int n, uni20::float128* a, blas_int lda)
1513 mplapackint mplapack_info = 0;
1514 Rpotri(&uplo,
static_cast<mplapackint
>(n), a,
static_cast<mplapackint
>(lda), mplapack_info);
1515 return static_cast<blas_int
>(mplapack_info);
1518[[nodiscard]]
inline blas_int
potrs(
char uplo, blas_int n, blas_int nrhs, uni20::float128* a, blas_int lda,
1519 uni20::float128* b, blas_int ldb)
1522 mplapackint mplapack_info = 0;
1523 Rpotrs(&uplo,
static_cast<mplapackint
>(n),
static_cast<mplapackint
>(nrhs), a,
static_cast<mplapackint
>(lda), b,
1524 static_cast<mplapackint
>(ldb), mplapack_info);
1525 return static_cast<blas_int
>(mplapack_info);
1528[[nodiscard]]
inline blas_int
porfs(
char uplo, blas_int n, blas_int nrhs, uni20::float128* a, blas_int lda,
1529 uni20::float128* factors, blas_int factor_lda, uni20::float128* b, blas_int ldb,
1530 uni20::float128* x, blas_int ldx, uni20::float128* forward_error,
1531 uni20::float128* backward_error, uni20::float128* work, blas_int* iwork)
1533 UNI20_EXTERNAL_API_CALL(LAPACK, Rporfs, uplo, n, nrhs, a, lda, factors, factor_lda, b, ldb, x, ldx, forward_error,
1534 backward_error, work, iwork);
1535 mplapackint mplapack_info = 0;
1536 std::vector<mplapackint> mplapack_iwork = uni20::lapack::mplapack::detail::make_mplapack_int_work(n);
1537 Rporfs(&uplo,
static_cast<mplapackint
>(n),
static_cast<mplapackint
>(nrhs), a,
static_cast<mplapackint
>(lda), factors,
1538 static_cast<mplapackint
>(factor_lda), b,
static_cast<mplapackint
>(ldb), x,
static_cast<mplapackint
>(ldx),
1539 forward_error, backward_error, work, mplapack_iwork.data(), mplapack_info);
1540 return static_cast<blas_int
>(mplapack_info);
1543[[nodiscard]]
inline blas_int
posvx(
char fact,
char uplo, blas_int n, blas_int nrhs, uni20::float128* a, blas_int lda,
1544 uni20::float128* af, blas_int ldaf,
char& equed, uni20::float128*
scale,
1545 uni20::float128* b, blas_int ldb, uni20::float128* x, blas_int ldx,
1546 uni20::float128& rcond, uni20::float128* forward_error,
1547 uni20::float128* backward_error, uni20::float128* work, blas_int* iwork)
1549 UNI20_EXTERNAL_API_CALL(LAPACK, Rposvx, fact, uplo, n, nrhs, a, lda, af, ldaf, equed,
scale, b, ldb, x, ldx, work,
1551 mplapackint mplapack_info = 0;
1552 std::vector<mplapackint> mplapack_iwork = uni20::lapack::mplapack::detail::make_mplapack_int_work(n);
1553 Rposvx(&fact, &uplo,
static_cast<mplapackint
>(n),
static_cast<mplapackint
>(nrhs), a,
static_cast<mplapackint
>(lda),
1554 af,
static_cast<mplapackint
>(ldaf), &equed,
scale, b,
static_cast<mplapackint
>(ldb), x,
1555 static_cast<mplapackint
>(ldx), rcond, forward_error, backward_error, work, mplapack_iwork.data(),
1557 return static_cast<blas_int
>(mplapack_info);
1560[[nodiscard]]
inline blas_int
poequ(blas_int n, uni20::float128* a, blas_int lda, uni20::float128*
scale,
1561 uni20::float128& scale_condition, uni20::float128& max_abs)
1564 mplapackint mplapack_info = 0;
1565 Rpoequ(
static_cast<mplapackint
>(n), a,
static_cast<mplapackint
>(lda),
scale, scale_condition, max_abs, mplapack_info);
1566 return static_cast<blas_int
>(mplapack_info);
1569[[nodiscard]]
inline blas_int
pocon(
char uplo, blas_int n, uni20::float128* a, blas_int lda,
1570 uni20::float128 matrix_one_norm, uni20::float128& rcond, uni20::float128* work,
1574 mplapackint mplapack_info = 0;
1575 std::vector<mplapackint> mplapack_iwork = uni20::lapack::mplapack::detail::make_mplapack_int_work(n);
1576 Rpocon(&uplo,
static_cast<mplapackint
>(n), a,
static_cast<mplapackint
>(lda), matrix_one_norm, rcond, work,
1577 mplapack_iwork.data(), mplapack_info);
1578 return static_cast<blas_int
>(mplapack_info);
1581[[nodiscard]]
inline blas_int
sytrf(
char uplo, blas_int n, uni20::float128* a, blas_int lda, blas_int* ipiv,
1582 uni20::float128* work, blas_int lwork)
1585 mplapackint mplapack_info = 0;
1586 std::vector<mplapackint> mplapack_ipiv = uni20::lapack::mplapack::detail::make_mplapack_int_work(n);
1587 Rsytrf(&uplo,
static_cast<mplapackint
>(n), a,
static_cast<mplapackint
>(lda), mplapack_ipiv.data(), work,
1588 static_cast<mplapackint
>(lwork), mplapack_info);
1589 uni20::lapack::mplapack::detail::copy_from_mplapack_ints(mplapack_ipiv, ipiv, n);
1590 return static_cast<blas_int
>(mplapack_info);
1593[[nodiscard]]
inline blas_int
sytrs(
char uplo, blas_int n, blas_int nrhs, uni20::float128* a, blas_int lda,
1594 blas_int
const* ipiv, uni20::float128* b, blas_int ldb)
1597 mplapackint mplapack_info = 0;
1598 std::vector<mplapackint> mplapack_ipiv = uni20::lapack::mplapack::detail::to_mplapack_ints(ipiv, n);
1599 Rsytrs(&uplo,
static_cast<mplapackint
>(n),
static_cast<mplapackint
>(nrhs), a,
static_cast<mplapackint
>(lda),
1600 mplapack_ipiv.data(), b,
static_cast<mplapackint
>(ldb), mplapack_info);
1601 return static_cast<blas_int
>(mplapack_info);
1604[[nodiscard]]
inline blas_int
sytri(
char uplo, blas_int n, uni20::float128* a, blas_int lda, blas_int
const* ipiv,
1605 uni20::float128* work)
1608 mplapackint mplapack_info = 0;
1609 std::vector<mplapackint> mplapack_ipiv = uni20::lapack::mplapack::detail::to_mplapack_ints(ipiv, n);
1610 Rsytri(&uplo,
static_cast<mplapackint
>(n), a,
static_cast<mplapackint
>(lda), mplapack_ipiv.data(), work,
1612 return static_cast<blas_int
>(mplapack_info);
1615[[nodiscard]]
inline blas_int
syrfs(
char uplo, blas_int n, blas_int nrhs, uni20::float128* a, blas_int lda,
1616 uni20::float128* factors, blas_int factor_lda, blas_int
const* ipiv,
1617 uni20::float128* b, blas_int ldb, uni20::float128* x, blas_int ldx,
1618 uni20::float128* forward_error, uni20::float128* backward_error,
1619 uni20::float128* work, blas_int* iwork)
1621 UNI20_EXTERNAL_API_CALL(LAPACK, Rsyrfs, uplo, n, nrhs, a, lda, factors, factor_lda, ipiv, b, ldb, x, ldx,
1622 forward_error, backward_error, work, iwork);
1623 mplapackint mplapack_info = 0;
1624 std::vector<mplapackint> mplapack_ipiv = uni20::lapack::mplapack::detail::to_mplapack_ints(ipiv, n);
1625 std::vector<mplapackint> mplapack_iwork = uni20::lapack::mplapack::detail::make_mplapack_int_work(n);
1626 Rsyrfs(&uplo,
static_cast<mplapackint
>(n),
static_cast<mplapackint
>(nrhs), a,
static_cast<mplapackint
>(lda), factors,
1627 static_cast<mplapackint
>(factor_lda), mplapack_ipiv.data(), b,
static_cast<mplapackint
>(ldb), x,
1628 static_cast<mplapackint
>(ldx), forward_error, backward_error, work, mplapack_iwork.data(), mplapack_info);
1629 return static_cast<blas_int
>(mplapack_info);
1632[[nodiscard]]
inline blas_int
sysvx(
char fact,
char uplo, blas_int n, blas_int nrhs, uni20::float128* a, blas_int lda,
1633 uni20::float128* af, blas_int ldaf, blas_int* ipiv, uni20::float128* b,
1634 blas_int ldb, uni20::float128* x, blas_int ldx, uni20::float128& rcond,
1635 uni20::float128* forward_error, uni20::float128* backward_error,
1636 uni20::float128* work, blas_int lwork, blas_int* iwork)
1638 UNI20_EXTERNAL_API_CALL(LAPACK, Rsysvx, fact, uplo, n, nrhs, a, lda, af, ldaf, ipiv, b, ldb, x, ldx, work, lwork,
1640 mplapackint mplapack_info = 0;
1641 std::vector<mplapackint> mplapack_ipiv = uni20::lapack::mplapack::detail::to_mplapack_ints(ipiv, n);
1642 std::vector<mplapackint> mplapack_iwork = uni20::lapack::mplapack::detail::make_mplapack_int_work(n);
1643 Rsysvx(&fact, &uplo,
static_cast<mplapackint
>(n),
static_cast<mplapackint
>(nrhs), a,
static_cast<mplapackint
>(lda),
1644 af,
static_cast<mplapackint
>(ldaf), mplapack_ipiv.data(), b,
static_cast<mplapackint
>(ldb), x,
1645 static_cast<mplapackint
>(ldx), rcond, forward_error, backward_error, work,
static_cast<mplapackint
>(lwork),
1646 mplapack_iwork.data(), mplapack_info);
1647 uni20::lapack::mplapack::detail::copy_from_mplapack_ints(mplapack_ipiv, ipiv, n);
1648 return static_cast<blas_int
>(mplapack_info);
1651[[nodiscard]]
inline blas_int
sycon(
char uplo, blas_int n, uni20::float128* a, blas_int lda, blas_int
const* ipiv,
1652 uni20::float128 matrix_one_norm, uni20::float128& rcond, uni20::float128* work,
1656 mplapackint mplapack_info = 0;
1657 std::vector<mplapackint> mplapack_ipiv = uni20::lapack::mplapack::detail::to_mplapack_ints(ipiv, n);
1658 std::vector<mplapackint> mplapack_iwork = uni20::lapack::mplapack::detail::make_mplapack_int_work(n);
1659 Rsycon(&uplo,
static_cast<mplapackint
>(n), a,
static_cast<mplapackint
>(lda), mplapack_ipiv.data(), matrix_one_norm,
1660 rcond, work, mplapack_iwork.data(), mplapack_info);
1661 return static_cast<blas_int
>(mplapack_info);
1664[[nodiscard]]
inline blas_int
trtrs(
char uplo,
char trans,
char diag, blas_int n, blas_int nrhs, uni20::float128* a,
1665 blas_int lda, uni20::float128* b, blas_int ldb)
1667 UNI20_EXTERNAL_API_CALL(LAPACK, Rtrtrs, uplo, trans, diag, n, nrhs, a, lda, b, ldb);
1668 mplapackint mplapack_info = 0;
1669 Rtrtrs(&uplo, &trans, &diag,
static_cast<mplapackint
>(n),
static_cast<mplapackint
>(nrhs), a,
1670 static_cast<mplapackint
>(lda), b,
static_cast<mplapackint
>(ldb), mplapack_info);
1671 return static_cast<blas_int
>(mplapack_info);
1674[[nodiscard]]
inline blas_int
trrfs(
char uplo,
char trans,
char diag, blas_int n, blas_int nrhs, uni20::float128* a,
1675 blas_int lda, uni20::float128* b, blas_int ldb, uni20::float128* x, blas_int ldx,
1676 uni20::float128* forward_error, uni20::float128* backward_error,
1677 uni20::float128* work, blas_int* iwork)
1679 UNI20_EXTERNAL_API_CALL(LAPACK, Rtrrfs, uplo, trans, diag, n, nrhs, a, lda, b, ldb, x, ldx, forward_error,
1680 backward_error, work, iwork);
1681 mplapackint mplapack_info = 0;
1682 std::vector<mplapackint> mplapack_iwork = uni20::lapack::mplapack::detail::make_mplapack_int_work(n);
1683 Rtrrfs(&uplo, &trans, &diag,
static_cast<mplapackint
>(n),
static_cast<mplapackint
>(nrhs), a,
1684 static_cast<mplapackint
>(lda), b,
static_cast<mplapackint
>(ldb), x,
static_cast<mplapackint
>(ldx),
1685 forward_error, backward_error, work, mplapack_iwork.data(), mplapack_info);
1686 return static_cast<blas_int
>(mplapack_info);
1689[[nodiscard]]
inline blas_int
trtri(
char uplo,
char diag, blas_int n, uni20::float128* a, blas_int lda)
1692 mplapackint mplapack_info = 0;
1693 Rtrtri(&uplo, &diag,
static_cast<mplapackint
>(n), a,
static_cast<mplapackint
>(lda), mplapack_info);
1694 return static_cast<blas_int
>(mplapack_info);
1697[[nodiscard]]
inline blas_int
trcon(
char norm,
char uplo,
char diag, blas_int n, uni20::float128* a, blas_int lda,
1698 uni20::float128& rcond, uni20::float128* work, blas_int* iwork)
1701 mplapackint mplapack_info = 0;
1702 std::vector<mplapackint> mplapack_iwork = uni20::lapack::mplapack::detail::make_mplapack_int_work(n);
1703 Rtrcon(&
norm, &uplo, &diag,
static_cast<mplapackint
>(n), a,
static_cast<mplapackint
>(lda), rcond, work,
1704 mplapack_iwork.data(), mplapack_info);
1705 return static_cast<blas_int
>(mplapack_info);
1708[[nodiscard]]
inline blas_int
trsyl(
char trans_a,
char trans_b, blas_int sign, blas_int m, blas_int n,
1709 uni20::float128* a, blas_int lda, uni20::float128* b, blas_int ldb,
1710 uni20::float128*
c, blas_int ldc, uni20::float128&
scale)
1712 UNI20_EXTERNAL_API_CALL(LAPACK, Rtrsyl, trans_a, trans_b, sign, m, n, a, lda, b, ldb,
c, ldc);
1713 mplapackint mplapack_info = 0;
1714 Rtrsyl(&trans_a, &trans_b,
static_cast<mplapackint
>(sign),
static_cast<mplapackint
>(m),
static_cast<mplapackint
>(n),
1715 a,
static_cast<mplapackint
>(lda), b,
static_cast<mplapackint
>(ldb),
c,
static_cast<mplapackint
>(ldc),
scale,
1717 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
typename detail::complex_type< Real >::type complex
Project-level complex scalar spelling.
Definition types.hpp:66
Definition mplapack/band.hpp:25
blas_int trevc(char side, char howmny, blas_int *select, blas_int n, uni20::float128 *t, blas_int ldt, uni20::float128 *vl, blas_int ldvl, uni20::float128 *vr, blas_int ldvr, blas_int mm, blas_int &computed_vectors, uni20::float128 *work)
Definition mplapack/general.hpp:934
blas_int sygv(blas_int itype, char jobz, char uplo, blas_int n, uni20::float128 *a, blas_int lda, uni20::float128 *b, blas_int ldb, uni20::float128 *w, uni20::float128 *work, blas_int lwork)
Definition mplapack/general.hpp:537
blas_int getri(blas_int n, uni20::float128 *a, blas_int lda, blas_int *ipiv, uni20::float128 *work, blas_int lwork)
Definition mplapack/general.hpp:150
blas_int syevd(char jobz, char uplo, blas_int n, uni20::float128 *a, blas_int lda, uni20::float128 *w, uni20::float128 *work, blas_int lwork, blas_int *iwork, blas_int liwork)
Definition mplapack/general.hpp:492
blas_int gesdd(char jobz, blas_int m, blas_int n, uni20::float128 *a, blas_int lda, uni20::float128 *s, uni20::float128 *u, blas_int ldu, uni20::float128 *vt, blas_int ldvt, uni20::float128 *work, blas_int lwork, blas_int *iwork)
Definition mplapack/general.hpp:1371
blas_int gghrd(char compq, char compz, blas_int n, blas_int first, blas_int last, uni20::float128 *a, blas_int lda, uni20::float128 *b, blas_int ldb, uni20::float128 *q, blas_int ldq, uni20::float128 *z, blas_int ldz)
Definition mplapack/general.hpp:1120
blas_int tgexc(bool wantq, bool wantz, blas_int n, uni20::float128 *a, blas_int lda, uni20::float128 *b, blas_int ldb, uni20::float128 *q, blas_int ldq, uni20::float128 *z, blas_int ldz, blas_int &first, blas_int &last, uni20::float128 *work, blas_int lwork)
Definition mplapack/general.hpp:1148
blas_int gges(char jobvsl, char jobvsr, char sort, blas_int n, uni20::float128 *a, blas_int lda, uni20::float128 *b, blas_int ldb, blas_int &selected_dimension, uni20::float128 *alphar, uni20::float128 *alphai, uni20::float128 *beta, uni20::float128 *vsl, blas_int ldvsl, uni20::float128 *vsr, blas_int ldvsr, uni20::float128 *work, blas_int lwork, blas_int *bwork)
Definition mplapack/general.hpp:1089
blas_int hegv(blas_int itype, char jobz, char uplo, blas_int n, uni20::complex< uni20::float128 > *a, blas_int lda, uni20::complex< uni20::float128 > *b, blas_int ldb, uni20::float128 *w, uni20::complex< uni20::float128 > *work, blas_int lwork, uni20::float128 *rwork)
Definition mplapack/general.hpp:653
blas_int sygvd(blas_int itype, char jobz, char uplo, blas_int n, uni20::float128 *a, blas_int lda, uni20::float128 *b, blas_int ldb, uni20::float128 *w, uni20::float128 *work, blas_int lwork, blas_int *iwork, blas_int liwork)
Definition mplapack/general.hpp:548
blas_int gebal(char job, blas_int n, uni20::float128 *a, blas_int lda, blas_int &first, blas_int &last, uni20::float128 *scale)
Definition mplapack/general.hpp:748
blas_int ormqr(char side, char trans, blas_int m, blas_int n, blas_int k, uni20::float128 *a, blas_int lda, uni20::float128 *tau, uni20::float128 *c, blas_int ldc, uni20::float128 *work, blas_int lwork)
Definition mplapack/general.hpp:391
blas_int orgrq(blas_int m, blas_int n, blas_int k, uni20::float128 *a, blas_int lda, uni20::float128 *tau, uni20::float128 *work, blas_int lwork)
Definition mplapack/general.hpp:381
blas_int orghr(blas_int n, blas_int first, blas_int last, uni20::float128 *a, blas_int lda, uni20::float128 const *tau, uni20::float128 *work, blas_int lwork)
Definition mplapack/general.hpp:1289
blas_int orglq(blas_int m, blas_int n, blas_int k, uni20::float128 *a, blas_int lda, uni20::float128 *tau, uni20::float128 *work, blas_int lwork)
Definition mplapack/general.hpp:350
blas_int gerqf(blas_int m, blas_int n, uni20::float128 *a, blas_int lda, uni20::float128 *tau, uni20::float128 *work, blas_int lwork)
Definition mplapack/general.hpp:319
blas_int potrs(char uplo, blas_int n, blas_int nrhs, uni20::float128 *a, blas_int lda, uni20::float128 *b, blas_int ldb)
Definition mplapack/general.hpp:1518
blas_int trsyl(char trans_a, char trans_b, blas_int sign, blas_int m, blas_int n, uni20::float128 *a, blas_int lda, uni20::float128 *b, blas_int ldb, uni20::float128 *c, blas_int ldc, uni20::float128 &scale)
Definition mplapack/general.hpp:1708
blas_int getrf(blas_int m, blas_int n, uni20::float128 *a, blas_int lda, blas_int *ipiv)
Definition mplapack/general.hpp:85
blas_int sygvx(blas_int itype, char jobz, char range, char uplo, blas_int n, uni20::float128 *a, blas_int lda, uni20::float128 *b, blas_int ldb, uni20::float128 vl, uni20::float128 vu, blas_int il, blas_int iu, uni20::float128 abstol, blas_int &selected_count, uni20::float128 *w, uni20::float128 *z, blas_int ldz, uni20::float128 *work, blas_int lwork, blas_int *iwork, blas_int *ifail)
Definition mplapack/general.hpp:563
blas_int hegvd(blas_int itype, char jobz, char uplo, blas_int n, uni20::complex< uni20::float128 > *a, blas_int lda, uni20::complex< uni20::float128 > *b, blas_int ldb, uni20::float128 *w, uni20::complex< uni20::float128 > *work, blas_int lwork, uni20::float128 *rwork, blas_int lrwork, blas_int *iwork, blas_int liwork)
Definition mplapack/general.hpp:664
blas_int orgtr(char uplo, blas_int n, uni20::float128 *a, blas_int lda, uni20::float128 const *tau, uni20::float128 *work, blas_int lwork)
Definition mplapack/general.hpp:1300
blas_int gebak(char job, char side, blas_int n, blas_int first, blas_int last, uni20::float128 *scale, blas_int vector_count, uni20::float128 *vectors, blas_int leading_dimension)
Definition mplapack/general.hpp:762
blas_int syevr(char jobz, char range, char uplo, blas_int n, uni20::float128 *a, blas_int lda, uni20::float128 vl, uni20::float128 vu, blas_int il, blas_int iu, uni20::float128 abstol, blas_int &selected_count, uni20::float128 *w, uni20::float128 *z, blas_int ldz, blas_int *isuppz, uni20::float128 *work, blas_int lwork, blas_int *iwork, blas_int liwork)
Definition mplapack/general.hpp:506
blas_int hseqr(char job, char compz, blas_int n, blas_int first, blas_int last, uni20::float128 *h, blas_int ldh, uni20::float128 *wr, uni20::float128 *wi, uni20::float128 *z, blas_int ldz, uni20::float128 *work, blas_int lwork)
Definition mplapack/general.hpp:854
blas_int sytri(char uplo, blas_int n, uni20::float128 *a, blas_int lda, blas_int const *ipiv, uni20::float128 *work)
Definition mplapack/general.hpp:1604
blas_int ormrq(char side, char trans, blas_int m, blas_int n, blas_int k, uni20::float128 *a, blas_int lda, uni20::float128 *tau, uni20::float128 *c, blas_int ldc, uni20::float128 *work, blas_int lwork)
Definition mplapack/general.hpp:427
blas_int gesvx(char fact, char trans, blas_int n, blas_int nrhs, uni20::float128 *a, blas_int lda, uni20::float128 *af, blas_int ldaf, 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/general.hpp:53
blas_int geev(char jobvl, char jobvr, blas_int n, uni20::float128 *a, blas_int lda, uni20::float128 *wr, uni20::float128 *wi, uni20::float128 *vl, blas_int ldvl, uni20::float128 *vr, blas_int ldvr, uni20::float128 *work, blas_int lwork)
Definition mplapack/general.hpp:715
blas_int trrfs(char uplo, char trans, char diag, blas_int n, blas_int nrhs, uni20::float128 *a, blas_int lda, 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/general.hpp:1674
blas_int tgevc(char side, char howmny, blas_int *select, blas_int n, uni20::float128 *s, blas_int lds, uni20::float128 *p, blas_int ldp, uni20::float128 *vl, blas_int ldvl, uni20::float128 *vr, blas_int ldvr, blas_int mm, blas_int &computed_vectors, uni20::float128 *work)
Definition mplapack/general.hpp:1205
blas_int syev(char jobz, char uplo, blas_int n, uni20::float128 *a, blas_int lda, uni20::float128 *w, uni20::float128 *work, blas_int lwork)
Definition mplapack/general.hpp:482
blas_int poequ(blas_int n, uni20::float128 *a, blas_int lda, uni20::float128 *scale, uni20::float128 &scale_condition, uni20::float128 &max_abs)
Definition mplapack/general.hpp:1560
blas_int tgsna(char job, char howmny, blas_int *select, blas_int n, uni20::float128 *a, blas_int lda, uni20::float128 *b, blas_int ldb, uni20::float128 *vl, blas_int ldvl, uni20::float128 *vr, blas_int ldvr, uni20::float128 *reciprocal_eigenvalue_condition_numbers, uni20::float128 *reciprocal_eigenvector_condition_numbers, blas_int mm, blas_int &computed_estimates, uni20::float128 *work, blas_int lwork, blas_int *iwork)
Definition mplapack/general.hpp:1238
blas_int gelsy(blas_int m, blas_int n, blas_int nrhs, uni20::float128 *a, blas_int lda, uni20::float128 *b, blas_int ldb, blas_int *jpvt, uni20::float128 rcond, blas_int &rank, uni20::float128 *work, blas_int lwork)
Definition mplapack/general.hpp:251
blas_int trtri(char uplo, char diag, blas_int n, uni20::float128 *a, blas_int lda)
Definition mplapack/general.hpp:1689
blas_int trsna(char job, char howmny, blas_int *select, blas_int n, uni20::float128 *t, blas_int ldt, uni20::float128 *vl, blas_int ldvl, uni20::float128 *vr, blas_int ldvr, uni20::float128 *reciprocal_eigenvalue_condition_numbers, uni20::float128 *reciprocal_eigenvector_condition_numbers, blas_int mm, blas_int &computed_estimates, uni20::float128 *work, blas_int ldwork, blas_int *iwork)
Definition mplapack/general.hpp:966
blas_int gehrd(blas_int n, blas_int first, blas_int last, uni20::float128 *a, blas_int lda, uni20::float128 *tau, uni20::float128 *work, blas_int lwork)
Definition mplapack/general.hpp:450
blas_int gerfs(char trans, blas_int n, blas_int nrhs, uni20::float128 *a, blas_int lda, uni20::float128 *factors, blas_int factor_lda, 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/general.hpp:133
blas_int ggevx(char balanc, char jobvl, char jobvr, char sense, blas_int n, uni20::float128 *a, blas_int lda, uni20::float128 *b, blas_int ldb, uni20::float128 *alphar, uni20::float128 *alphai, uni20::float128 *beta, uni20::float128 *vl, blas_int ldvl, uni20::float128 *vr, blas_int ldvr, blas_int &ilo, blas_int &ihi, uni20::float128 *lscale, uni20::float128 *rscale, uni20::float128 &abnrm, uni20::float128 &bbnrm, uni20::float128 *rconde, uni20::float128 *rcondv, uni20::float128 *work, blas_int lwork, blas_int *iwork, blas_int *bwork)
Definition mplapack/general.hpp:1019
blas_int bdsvdx(char uplo, char jobz, char range, blas_int n, uni20::float128 *d, uni20::float128 *e, uni20::float128 vl, uni20::float128 vu, blas_int il, blas_int iu, blas_int &selected_count, uni20::float128 *singular_values, uni20::float128 *z, blas_int ldz, uni20::float128 *work, blas_int *iwork)
Definition mplapack/general.hpp:1470
blas_int sysvx(char fact, char uplo, blas_int n, blas_int nrhs, uni20::float128 *a, blas_int lda, uni20::float128 *af, blas_int ldaf, blas_int *ipiv, 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 lwork, blas_int *iwork)
Definition mplapack/general.hpp:1632
blas_int ggbal(char job, blas_int n, uni20::float128 *a, blas_int lda, uni20::float128 *b, blas_int ldb, blas_int &first, blas_int &last, uni20::float128 *lscale, uni20::float128 *rscale, uni20::float128 *work)
Definition mplapack/general.hpp:1061
blas_int sycon(char uplo, blas_int n, uni20::float128 *a, blas_int lda, blas_int const *ipiv, uni20::float128 matrix_one_norm, uni20::float128 &rcond, uni20::float128 *work, blas_int *iwork)
Definition mplapack/general.hpp:1651
blas_int trexc(char compq, blas_int n, uni20::float128 *t, blas_int ldt, uni20::float128 *q, blas_int ldq, blas_int &first, blas_int &last, uni20::float128 *work)
Definition mplapack/general.hpp:866
blas_int bdsqr(char uplo, blas_int n, blas_int ncvt, blas_int nru, blas_int ncc, uni20::float128 *d, uni20::float128 *e, uni20::float128 *vt, blas_int ldvt, uni20::float128 *u, blas_int ldu, uni20::float128 *c, blas_int ldc, uni20::float128 *work)
Definition mplapack/general.hpp:1442
blas_int gecon(char norm, blas_int n, uni20::float128 const *a, blas_int lda, uni20::float128 anorm, uni20::float128 &rcond, uni20::float128 *work, blas_int *iwork)
Definition mplapack/general.hpp:172
blas_int gels(char trans, blas_int m, blas_int n, blas_int nrhs, uni20::float128 *a, blas_int lda, uni20::float128 *b, blas_int ldb, uni20::float128 *work, blas_int lwork)
Definition mplapack/general.hpp:195
blas_int ggev(char jobvl, char jobvr, blas_int n, uni20::float128 *a, blas_int lda, uni20::float128 *b, blas_int ldb, uni20::float128 *alphar, uni20::float128 *alphai, uni20::float128 *beta, uni20::float128 *vl, blas_int ldvl, uni20::float128 *vr, blas_int ldvr, uni20::float128 *work, blas_int lwork)
Definition mplapack/general.hpp:1005
blas_int heevr(char jobz, char range, char uplo, blas_int n, uni20::complex< uni20::float128 > *a, blas_int lda, uni20::float128 vl, uni20::float128 vu, blas_int il, blas_int iu, uni20::float128 abstol, blas_int &selected_count, uni20::float128 *w, uni20::complex< uni20::float128 > *z, blas_int ldz, blas_int *isuppz, uni20::complex< uni20::float128 > *work, blas_int lwork, uni20::float128 *rwork, blas_int lrwork, blas_int *iwork, blas_int liwork)
Definition mplapack/general.hpp:620
blas_int orgql(blas_int m, blas_int n, blas_int k, uni20::float128 *a, blas_int lda, uni20::float128 *tau, uni20::float128 *work, blas_int lwork)
Definition mplapack/general.hpp:371
blas_int ormbr(char vect, char side, char trans, blas_int m, blas_int n, blas_int k, uni20::float128 *a, blas_int lda, uni20::float128 *tau, uni20::float128 *c, blas_int ldc, uni20::float128 *work, blas_int lwork)
Definition mplapack/general.hpp:1334
blas_int gelss(blas_int m, blas_int n, blas_int nrhs, uni20::float128 *a, blas_int lda, uni20::float128 *b, blas_int ldb, uni20::float128 *s, uni20::float128 rcond, blas_int &rank, uni20::float128 *work, blas_int lwork)
Definition mplapack/general.hpp:206
blas_int potrf(char uplo, blas_int n, uni20::float128 *a, blas_int lda)
Definition mplapack/general.hpp:1488
blas_int hgeqz(char job, char compq, char compz, blas_int n, blas_int first, blas_int last, uni20::float128 *h, blas_int ldh, uni20::float128 *t, blas_int ldt, uni20::float128 *alphar, uni20::float128 *alphai, uni20::float128 *beta, uni20::float128 *q, blas_int ldq, uni20::float128 *z, blas_int ldz, uni20::float128 *work, blas_int lwork)
Definition mplapack/general.hpp:1132
blas_int geqrf(blas_int m, blas_int n, uni20::float128 *a, blas_int lda, uni20::float128 *tau, uni20::float128 *work, blas_int lwork)
Definition mplapack/general.hpp:267
blas_int hegvx(blas_int itype, char jobz, char range, char uplo, blas_int n, uni20::complex< uni20::float128 > *a, blas_int lda, uni20::complex< uni20::float128 > *b, blas_int ldb, uni20::float128 vl, uni20::float128 vu, blas_int il, blas_int iu, uni20::float128 abstol, blas_int &selected_count, uni20::float128 *w, uni20::complex< uni20::float128 > *z, blas_int ldz, uni20::complex< uni20::float128 > *work, blas_int lwork, uni20::float128 *rwork, blas_int *iwork, blas_int *ifail)
Definition mplapack/general.hpp:682
blas_int gesvdx(char jobu, char jobvt, char range, blas_int m, blas_int n, uni20::float128 *a, blas_int lda, uni20::float128 vl, uni20::float128 vu, blas_int il, blas_int iu, blas_int &selected_count, uni20::float128 *singular_values, uni20::float128 *u, blas_int ldu, uni20::float128 *vt, blas_int ldvt, uni20::float128 *work, blas_int lwork, blas_int *iwork)
Definition mplapack/general.hpp:1399
blas_int sytrs(char uplo, blas_int n, blas_int nrhs, uni20::float128 *a, blas_int lda, blas_int const *ipiv, uni20::float128 *b, blas_int ldb)
Definition mplapack/general.hpp:1593
blas_int gelsd(blas_int m, blas_int n, blas_int nrhs, uni20::float128 *a, blas_int lda, uni20::float128 *b, blas_int ldb, uni20::float128 *s, uni20::float128 rcond, blas_int &rank, uni20::float128 *work, blas_int lwork, blas_int *iwork)
Definition mplapack/general.hpp:235
blas_int trcon(char norm, char uplo, char diag, blas_int n, uni20::float128 *a, blas_int lda, uni20::float128 &rcond, uni20::float128 *work, blas_int *iwork)
Definition mplapack/general.hpp:1697
blas_int potri(char uplo, blas_int n, uni20::float128 *a, blas_int lda)
Definition mplapack/general.hpp:1510
blas_int pocon(char uplo, blas_int n, uni20::float128 *a, blas_int lda, uni20::float128 matrix_one_norm, uni20::float128 &rcond, uni20::float128 *work, blas_int *iwork)
Definition mplapack/general.hpp:1569
blas_int geqp3(blas_int m, blas_int n, uni20::float128 *a, blas_int lda, blas_int *jpvt, uni20::float128 *tau, uni20::float128 *work, blas_int lwork)
Definition mplapack/general.hpp:460
blas_int posvx(char fact, char uplo, blas_int n, blas_int nrhs, uni20::float128 *a, blas_int lda, uni20::float128 *af, blas_int ldaf, 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/general.hpp:1543
blas_int ggbak(char job, char side, blas_int n, blas_int first, blas_int last, uni20::float128 *lscale, uni20::float128 *rscale, blas_int vector_count, uni20::float128 *vectors, blas_int leading_dimension)
Definition mplapack/general.hpp:1076
blas_int heevd(char jobz, char uplo, blas_int n, uni20::complex< uni20::float128 > *a, blas_int lda, uni20::float128 *w, uni20::complex< uni20::float128 > *work, blas_int lwork, uni20::float128 *rwork, blas_int lrwork, blas_int *iwork, blas_int liwork)
Definition mplapack/general.hpp:605
blas_int sytrd(char uplo, blas_int n, uni20::float128 *a, blas_int lda, uni20::float128 *d, uni20::float128 *e, uni20::float128 *tau, uni20::float128 *work, blas_int lwork)
Definition mplapack/general.hpp:472
blas_int gees(char jobvs, char sort, blas_int n, uni20::float128 *a, blas_int lda, blas_int &selected_dimension, uni20::float128 *wr, uni20::float128 *wi, uni20::float128 *vs, blas_int ldvs, uni20::float128 *work, blas_int lwork, blas_int *bwork)
Definition mplapack/general.hpp:787
blas_int orgqr(blas_int m, blas_int n, blas_int k, uni20::float128 *a, blas_int lda, uni20::float128 *tau, uni20::float128 *work, blas_int lwork)
Definition mplapack/general.hpp:329
blas_int ormql(char side, char trans, blas_int m, blas_int n, blas_int k, uni20::float128 *a, blas_int lda, uni20::float128 *tau, uni20::float128 *c, blas_int ldc, uni20::float128 *work, blas_int lwork)
Definition mplapack/general.hpp:415
blas_int geqlf(blas_int m, blas_int n, uni20::float128 *a, blas_int lda, uni20::float128 *tau, uni20::float128 *work, blas_int lwork)
Definition mplapack/general.hpp:309
blas_int gelqf(blas_int m, blas_int n, uni20::float128 *a, blas_int lda, uni20::float128 *tau, uni20::float128 *work, blas_int lwork)
Definition mplapack/general.hpp:288
blas_int orgbr(char vect, blas_int m, blas_int n, blas_int k, uni20::float128 *a, blas_int lda, uni20::float128 *tau, uni20::float128 *work, blas_int lwork)
Definition mplapack/general.hpp:1279
blas_int heev(char jobz, char uplo, blas_int n, uni20::complex< uni20::float128 > *a, blas_int lda, uni20::float128 *w, uni20::complex< uni20::float128 > *work, blas_int lwork, uni20::float128 *rwork)
Definition mplapack/general.hpp:594
blas_int geevx(char balanc, char jobvl, char jobvr, char sense, blas_int n, uni20::float128 *a, blas_int lda, uni20::float128 *wr, uni20::float128 *wi, uni20::float128 *vl, blas_int ldvl, uni20::float128 *vr, blas_int ldvr, blas_int &ilo, blas_int &ihi, uni20::float128 *scale, uni20::float128 &abnrm, uni20::float128 *rconde, uni20::float128 *rcondv, uni20::float128 *work, blas_int lwork, blas_int *iwork)
Definition mplapack/general.hpp:727
blas_int gesv(blas_int n, blas_int nrhs, uni20::float128 *a, blas_int lda, blas_int *ipiv, uni20::float128 *b, blas_int ldb)
Definition mplapack/general.hpp:29
blas_int trtrs(char uplo, char trans, char diag, blas_int n, blas_int nrhs, uni20::float128 *a, blas_int lda, uni20::float128 *b, blas_int ldb)
Definition mplapack/general.hpp:1664
blas_int gesvd(char jobu, char jobvt, blas_int m, blas_int n, uni20::float128 *a, blas_int lda, uni20::float128 *s, uni20::float128 *u, blas_int ldu, uni20::float128 *vt, blas_int ldvt, uni20::float128 *work, blas_int lwork)
Definition mplapack/general.hpp:1346
blas_int sytrf(char uplo, blas_int n, uni20::float128 *a, blas_int lda, blas_int *ipiv, uni20::float128 *work, blas_int lwork)
Definition mplapack/general.hpp:1581
blas_int tgsen(blas_int ijob, bool wantq, bool wantz, blas_int *select, blas_int n, uni20::float128 *a, blas_int lda, uni20::float128 *b, blas_int ldb, uni20::float128 *alphar, uni20::float128 *alphai, uni20::float128 *beta, uni20::float128 *q, blas_int ldq, uni20::float128 *z, blas_int ldz, blas_int &selected_dimension, uni20::float128 &pl, uni20::float128 &pr, uni20::float128 *dif, uni20::float128 *work, blas_int lwork, blas_int *iwork, blas_int liwork)
Definition mplapack/general.hpp:1165
blas_int ormhr(char side, char trans, blas_int m, blas_int n, blas_int first, blas_int last, uni20::float128 *a, blas_int lda, uni20::float128 const *tau, uni20::float128 *c, blas_int ldc, uni20::float128 *work, blas_int lwork)
Definition mplapack/general.hpp:1310
blas_int ormlq(char side, char trans, blas_int m, blas_int n, blas_int k, uni20::float128 *a, blas_int lda, uni20::float128 *tau, uni20::float128 *c, blas_int ldc, uni20::float128 *work, blas_int lwork)
Definition mplapack/general.hpp:403
blas_int bdsdc(char uplo, char compq, blas_int n, uni20::float128 *d, uni20::float128 *e, uni20::float128 *u, blas_int ldu, uni20::float128 *vt, blas_int ldvt, uni20::float128 *q, blas_int *iq, uni20::float128 *work, blas_int *iwork)
Definition mplapack/general.hpp:1455
blas_int syrfs(char uplo, blas_int n, blas_int nrhs, uni20::float128 *a, blas_int lda, uni20::float128 *factors, blas_int factor_lda, 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/general.hpp:1615
blas_int ormtr(char side, char uplo, char trans, blas_int m, blas_int n, uni20::float128 *a, blas_int lda, uni20::float128 const *tau, uni20::float128 *c, blas_int ldc, uni20::float128 *work, blas_int lwork)
Definition mplapack/general.hpp:1322
blas_int pstrf(char uplo, blas_int n, uni20::float128 *a, blas_int lda, blas_int *pivots, blas_int &rank, uni20::float128 tolerance, uni20::float128 *work)
Definition mplapack/general.hpp:1496
blas_int getrs(char trans, blas_int n, blas_int nrhs, uni20::float128 *a, blas_int lda, blas_int const *ipiv, uni20::float128 *b, blas_int ldb)
Definition mplapack/general.hpp:110
blas_int trsen(char job, char compq, blas_int *select, blas_int n, uni20::float128 *t, blas_int ldt, uni20::float128 *q, blas_int ldq, uni20::float128 *wr, uni20::float128 *wi, blas_int &selected_dimension, uni20::float128 &reciprocal_eigenvalue_cluster_condition, uni20::float128 &reciprocal_invariant_subspace_condition, uni20::float128 *work, blas_int lwork, blas_int *iwork, blas_int liwork)
Definition mplapack/general.hpp:894
blas_int porfs(char uplo, blas_int n, blas_int nrhs, uni20::float128 *a, blas_int lda, uni20::float128 *factors, blas_int factor_lda, 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/general.hpp:1528
blas_int gebrd(blas_int m, blas_int n, uni20::float128 *a, blas_int lda, uni20::float128 *d, uni20::float128 *e, uni20::float128 *tauq, uni20::float128 *taup, uni20::float128 *work, blas_int lwork)
Definition mplapack/general.hpp:439
blas_int geequ(blas_int m, blas_int n, uni20::float128 *a, blas_int lda, uni20::float128 *row_scale, uni20::float128 *column_scale, uni20::float128 &row_condition, uni20::float128 &column_condition, uni20::float128 &max_abs)
Definition mplapack/general.hpp:73
Definition data_table.cpp:8
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
mpreal beta(mpreal const &a, mpreal const &x)
Real Beta function; positive rational/integer pairs retain exact values.
Definition mpreal_special.hpp:164