Uni20
Asynchronous tensor and runtime library.
Loading...
Searching...
No Matches
lapack.hpp
Go to the documentation of this file.
1#pragma once
2
17#include <uni20/config.hpp>
19
20#include <source_location>
21#include <stdexcept>
22
23#if UNI20_HAS_MPLAPACK_FLOAT128
28#endif
29
30namespace uni20::lapack
31{
32
33namespace detail
34{
35
36[[noreturn]] inline void raise_terminal_info(char const* routine, char const* message, blas_int info,
37 std::source_location where = std::source_location::current())
38{
39 trace::raise(LapackError(routine, info, message), where);
40}
41
42inline void check_invalid_argument(char const* routine, blas_int info)
43{
44 CHECK(info >= 0, routine, info, "LAPACK provider rejected a wrapper-generated argument");
45}
46
47inline void check_singular(char const* routine, blas_int info,
48 std::source_location where = std::source_location::current())
49{
50 check_invalid_argument(routine, info);
51 if (info > 0)
52 {
53 raise_terminal_info(routine, "found a singular matrix", info, where);
54 }
55}
56
57inline void check_positive_definite(char const* routine, blas_int info,
58 std::source_location where = std::source_location::current())
59{
60 check_invalid_argument(routine, info);
61 if (info > 0)
62 {
63 raise_terminal_info(routine, "found a matrix that is not positive definite", info, where);
64 }
65}
66
67inline void check_singular_diagonal_block(char const* routine, blas_int info,
68 std::source_location where = std::source_location::current())
69{
70 check_invalid_argument(routine, info);
71 if (info > 0)
72 {
73 raise_terminal_info(routine, "found a singular diagonal block", info, where);
74 }
75}
76
77inline void check_singular_triangular(char const* routine, blas_int info,
78 std::source_location where = std::source_location::current())
79{
80 check_invalid_argument(routine, info);
81 if (info > 0)
82 {
83 raise_terminal_info(routine, "found a singular triangular matrix", info, where);
84 }
85}
86
87inline void check_convergence(char const* routine, blas_int info,
88 std::source_location where = std::source_location::current())
89{
90 check_invalid_argument(routine, info);
91 if (info > 0)
92 {
93 raise_terminal_info(routine, "failed to converge", info, where);
94 }
95}
96
97inline void check_generalized_symmetric_eigensolver(char const* routine, blas_int n, blas_int info,
98 std::source_location where = std::source_location::current())
99{
100 check_invalid_argument(routine, info);
101 if (info > n)
102 {
103 raise_terminal_info(routine, "found a metric matrix that is not positive definite", info, where);
104 }
105 if (info > 0)
106 {
107 raise_terminal_info(routine, "failed to converge", info, where);
108 }
109}
110
111inline bool check_expert_solve(char const* routine, blas_int n, blas_int info,
112 std::source_location where = std::source_location::current())
113{
114 check_invalid_argument(routine, info);
115 if (info > 0 && info <= n)
116 {
117 raise_terminal_info(routine, "found a singular matrix", info, where);
118 }
119 if (info > n + 1)
120 {
121 raise_terminal_info(routine, "failed unexpectedly", info, where);
122 }
123 return info == n + 1;
124}
125
126inline bool check_symmetric_indefinite_expert_solve(char const* routine, blas_int n, blas_int info,
127 std::source_location where = std::source_location::current())
128{
129 check_invalid_argument(routine, info);
130 if (info > 0 && info <= n)
131 {
132 raise_terminal_info(routine, "found a singular diagonal block", info, where);
133 }
134 if (info > n + 1)
135 {
136 raise_terminal_info(routine, "failed unexpectedly", info, where);
137 }
138 return info == n + 1;
139}
140
141inline bool check_positive_definite_expert_solve(char const* routine, blas_int n, blas_int info,
142 std::source_location where = std::source_location::current())
143{
144 check_invalid_argument(routine, info);
145 if (info > 0 && info <= n)
146 {
147 raise_terminal_info(routine, "found a matrix that is not positive definite", info, where);
148 }
149 if (info > n + 1)
150 {
151 raise_terminal_info(routine, "failed unexpectedly", info, where);
152 }
153 return info == n + 1;
154}
155
156inline void check_equilibration(char const* routine, blas_int m, blas_int info,
157 std::source_location where = std::source_location::current())
158{
159 check_invalid_argument(routine, info);
160 if (info > 0 && info <= m)
161 {
162 raise_terminal_info(routine, "found an exactly zero row", info, where);
163 }
164 if (info > m)
165 {
166 raise_terminal_info(routine, "found an exactly zero column", info, where);
167 }
168}
169
170inline bool check_sylvester(char const* routine, blas_int info,
171 std::source_location where = std::source_location::current())
172{
173 check_invalid_argument(routine, info);
174 if (info > 1)
175 {
176 raise_terminal_info(routine, "failed unexpectedly", info, where);
177 }
178 return info == 1;
179}
180
181} // namespace detail
182
184template <uni20::LapackReal Scalar>
185Scalar lange(char norm, blas_int m, blas_int n, Scalar* a, blas_int lda, Scalar* work)
186{
187 return unchecked::lange(norm, m, n, a, lda, work);
188}
189
191template <uni20::LapackComplexReal Real>
192Real lange(char norm, blas_int m, blas_int n, uni20::detail::standard_complex<Real>* a, blas_int lda, Real* work)
193{
194 return unchecked::lange(norm, m, n, a, lda, work);
195}
196
198template <uni20::LapackReal Scalar>
199Scalar lansy(char norm, char uplo, blas_int n, Scalar* a, blas_int lda, Scalar* work)
200{
201 return unchecked::lansy(norm, uplo, n, a, lda, work);
202}
203
205template <uni20::LapackComplexReal Real>
206Real lanhe(char norm, char uplo, blas_int n, uni20::detail::standard_complex<Real>* a, blas_int lda, Real* work)
207{
208 return unchecked::lanhe(norm, uplo, n, a, lda, work);
209}
210
212template <uni20::LapackReal Scalar>
213Scalar lantr(char norm, char uplo, char diag, blas_int m, blas_int n, Scalar* a, blas_int lda, Scalar* work)
214{
215 return unchecked::lantr(norm, uplo, diag, m, n, a, lda, work);
216}
217
219template <uni20::LapackComplexReal Real>
220Real lantr(char norm, char uplo, char diag, blas_int m, blas_int n, uni20::detail::standard_complex<Real>* a,
221 blas_int lda, Real* work)
222{
223 return unchecked::lantr(norm, uplo, diag, m, n, a, lda, work);
224}
225
227template <uni20::LapackReal Scalar>
228Scalar langb(char norm, blas_int n, blas_int kl, blas_int ku, Scalar* ab, blas_int ldab, Scalar* work)
229{
230 return unchecked::langb(norm, n, kl, ku, ab, ldab, work);
231}
232
234template <uni20::LapackReal Scalar>
235void gbsv(blas_int n, blas_int kl, blas_int ku, blas_int nrhs, Scalar* ab, blas_int ldab, blas_int* ipiv, Scalar* b,
236 blas_int ldb)
237{
238 blas_int const info = unchecked::gbsv(n, kl, ku, nrhs, ab, ldab, ipiv, b, ldb);
239 detail::check_singular("gbsv", info);
240}
241
243template <uni20::LapackReal Scalar>
244void gbtrf(blas_int m, blas_int n, blas_int kl, blas_int ku, Scalar* ab, blas_int ldab, blas_int* ipiv)
245{
246 blas_int const info = unchecked::gbtrf(m, n, kl, ku, ab, ldab, ipiv);
247 detail::check_singular("gbtrf", info);
248}
249
251template <uni20::LapackReal Scalar>
252void gbtrs(char trans, blas_int n, blas_int kl, blas_int ku, blas_int nrhs, Scalar* ab, blas_int ldab,
253 blas_int const* ipiv, Scalar* b, blas_int ldb)
254{
255 blas_int const info = unchecked::gbtrs(trans, n, kl, ku, nrhs, ab, ldab, ipiv, b, ldb);
256 detail::check_invalid_argument("gbtrs", info);
257}
258
260template <uni20::LapackReal Scalar>
261Scalar gbcon(char norm, blas_int n, blas_int kl, blas_int ku, Scalar* ab, blas_int ldab, blas_int const* ipiv,
262 Scalar anorm, Scalar* work, blas_int* iwork)
263{
264 Scalar rcond{};
265 blas_int const info = unchecked::gbcon(norm, n, kl, ku, ab, ldab, ipiv, anorm, rcond, work, iwork);
266 detail::check_invalid_argument("gbcon", info);
267 return rcond;
268}
269
271template <uni20::LapackReal Scalar>
272void gbrfs(char trans, blas_int n, blas_int kl, blas_int ku, blas_int nrhs, Scalar* ab, blas_int ldab, Scalar* afb,
273 blas_int ldafb, blas_int const* ipiv, Scalar* b, blas_int ldb, Scalar* x, blas_int ldx,
274 Scalar* forward_error, Scalar* backward_error, Scalar* work, blas_int* iwork)
275{
276 blas_int const info = unchecked::gbrfs(trans, n, kl, ku, nrhs, ab, ldab, afb, ldafb, ipiv, b, ldb, x, ldx,
277 forward_error, backward_error, work, iwork);
278 detail::check_invalid_argument("gbrfs", info);
279}
280
282template <uni20::LapackReal Scalar>
283bool gbsvx(char fact, char trans, blas_int n, blas_int kl, blas_int ku, blas_int nrhs, Scalar* ab, blas_int ldab,
284 Scalar* afb, blas_int ldafb, blas_int* ipiv, char& equed, Scalar* row_scale, Scalar* column_scale, Scalar* b,
285 blas_int ldb, Scalar* x, blas_int ldx, Scalar& rcond, Scalar* forward_error, Scalar* backward_error,
286 Scalar* work, blas_int* iwork)
287{
288 blas_int const info =
289 unchecked::gbsvx(fact, trans, n, kl, ku, nrhs, ab, ldab, afb, ldafb, ipiv, equed, row_scale, column_scale, b, ldb,
290 x, ldx, rcond, forward_error, backward_error, work, iwork);
291 return detail::check_expert_solve("gbsvx", n, info);
292}
293
295template <uni20::LapackReal Scalar>
296void gbequ(bool power_of_two, blas_int m, blas_int n, blas_int kl, blas_int ku, Scalar* ab, blas_int ldab,
297 Scalar* row_scale, Scalar* column_scale, Scalar& row_condition, Scalar& column_condition, Scalar& max_abs)
298{
299 blas_int const info = unchecked::gbequ(power_of_two, m, n, kl, ku, ab, ldab, row_scale, column_scale, row_condition,
300 column_condition, max_abs);
301 detail::check_equilibration("gbequ", m, info);
302}
303
305template <uni20::LapackReal Scalar>
306void pbsv(char uplo, blas_int n, blas_int kd, blas_int nrhs, Scalar* ab, blas_int ldab, Scalar* b, blas_int ldb)
307{
308 blas_int const info = unchecked::pbsv(uplo, n, kd, nrhs, ab, ldab, b, ldb);
309 detail::check_positive_definite("pbsv", info);
310}
311
313template <uni20::LapackReal Scalar> void pbtrf(char uplo, blas_int n, blas_int kd, Scalar* ab, blas_int ldab)
314{
315 blas_int const info = unchecked::pbtrf(uplo, n, kd, ab, ldab);
316 detail::check_positive_definite("pbtrf", info);
317}
318
320template <uni20::LapackReal Scalar>
321void pbtrs(char uplo, blas_int n, blas_int kd, blas_int nrhs, Scalar* ab, blas_int ldab, Scalar* b, blas_int ldb)
322{
323 blas_int const info = unchecked::pbtrs(uplo, n, kd, nrhs, ab, ldab, b, ldb);
324 detail::check_invalid_argument("pbtrs", info);
325 if (info > 0)
326 {
327 detail::raise_terminal_info("pbtrs", "failed to solve the factored system", info);
328 }
329}
330
332template <uni20::LapackReal Scalar>
333Scalar pbcon(char uplo, blas_int n, blas_int kd, Scalar* ab, blas_int ldab, Scalar anorm, Scalar* work, blas_int* iwork)
334{
335 Scalar rcond{};
336 blas_int const info = unchecked::pbcon(uplo, n, kd, ab, ldab, anorm, rcond, work, iwork);
337 detail::check_invalid_argument("pbcon", info);
338 return rcond;
339}
340
342template <uni20::LapackReal Scalar>
343void pbrfs(char uplo, blas_int n, blas_int kd, blas_int nrhs, Scalar* ab, blas_int ldab, Scalar* afb, blas_int ldafb,
344 Scalar* b, blas_int ldb, Scalar* x, blas_int ldx, Scalar* forward_error, Scalar* backward_error,
345 Scalar* work, blas_int* iwork)
346{
347 blas_int const info = unchecked::pbrfs(uplo, n, kd, nrhs, ab, ldab, afb, ldafb, b, ldb, x, ldx, forward_error,
348 backward_error, work, iwork);
349 detail::check_invalid_argument("pbrfs", info);
350}
351
353template <uni20::LapackReal Scalar>
354bool pbsvx(char fact, char uplo, blas_int n, blas_int kd, blas_int nrhs, Scalar* ab, blas_int ldab, Scalar* afb,
355 blas_int ldafb, char& equed, Scalar* scale, Scalar* b, blas_int ldb, Scalar* x, blas_int ldx, Scalar& rcond,
356 Scalar* forward_error, Scalar* backward_error, Scalar* work, blas_int* iwork)
357{
358 blas_int const info = unchecked::pbsvx(fact, uplo, n, kd, nrhs, ab, ldab, afb, ldafb, equed, scale, b, ldb, x, ldx,
359 rcond, forward_error, backward_error, work, iwork);
360 return detail::check_positive_definite_expert_solve("pbsvx", n, info);
361}
362
364template <uni20::LapackReal Scalar>
365void gesv(blas_int n, blas_int nrhs, Scalar* a, blas_int lda, blas_int* ipiv, Scalar* b, blas_int ldb)
366{
367 blas_int const info = unchecked::gesv(n, nrhs, a, lda, ipiv, b, ldb);
368 detail::check_singular("gesv", info);
369}
370
372template <uni20::LapackComplexReal Real>
373void gesv(blas_int n, blas_int nrhs, uni20::detail::standard_complex<Real>* a, blas_int lda, blas_int* ipiv,
374 uni20::detail::standard_complex<Real>* b, blas_int ldb)
375{
376 blas_int const info = unchecked::gesv(n, nrhs, a, lda, ipiv, b, ldb);
377 detail::check_singular("gesv", info);
378}
379
381template <uni20::LapackReal Scalar>
382bool gesvx(char fact, char trans, blas_int n, blas_int nrhs, Scalar* a, blas_int lda, Scalar* af, blas_int ldaf,
383 blas_int* ipiv, char& equed, Scalar* row_scale, Scalar* column_scale, Scalar* b, blas_int ldb, Scalar* x,
384 blas_int ldx, Scalar& rcond, Scalar* forward_error, Scalar* backward_error, Scalar* work, blas_int* iwork)
385{
386 blas_int const info = unchecked::gesvx(fact, trans, n, nrhs, a, lda, af, ldaf, ipiv, equed, row_scale, column_scale,
387 b, ldb, x, ldx, rcond, forward_error, backward_error, work, iwork);
388 return detail::check_expert_solve("gesvx", n, info);
389}
390
392template <uni20::LapackReal Scalar>
393void geequ(blas_int m, blas_int n, Scalar* a, blas_int lda, Scalar* row_scale, Scalar* column_scale,
394 Scalar& row_condition, Scalar& column_condition, Scalar& max_abs)
395{
396 blas_int const info =
397 unchecked::geequ(m, n, a, lda, row_scale, column_scale, row_condition, column_condition, max_abs);
398 detail::check_equilibration("geequ", m, info);
399}
400
402template <uni20::LapackReal Scalar> void getrf(blas_int m, blas_int n, Scalar* a, blas_int lda, blas_int* ipiv)
403{
404 blas_int const info = unchecked::getrf(m, n, a, lda, ipiv);
405 detail::check_singular("getrf", info);
406}
407
409template <uni20::LapackComplexReal Real>
410void getrf(blas_int m, blas_int n, uni20::detail::standard_complex<Real>* a, blas_int lda, blas_int* ipiv)
411{
412 blas_int const info = unchecked::getrf(m, n, a, lda, ipiv);
413 detail::check_singular("getrf", info);
414}
415
417template <uni20::LapackReal Scalar>
418void getrs(char trans, blas_int n, blas_int nrhs, Scalar* a, blas_int lda, blas_int const* ipiv, Scalar* b,
419 blas_int ldb)
420{
421 blas_int const info = unchecked::getrs(trans, n, nrhs, a, lda, ipiv, b, ldb);
422 detail::check_invalid_argument("getrs", info);
423}
424
426template <uni20::LapackComplexReal Real>
427void getrs(char trans, blas_int n, blas_int nrhs, uni20::detail::standard_complex<Real>* a, blas_int lda,
428 blas_int const* ipiv, uni20::detail::standard_complex<Real>* b, blas_int ldb)
429{
430 blas_int const info = unchecked::getrs(trans, n, nrhs, a, lda, ipiv, b, ldb);
431 detail::check_invalid_argument("getrs", info);
432}
433
435template <uni20::LapackReal Scalar>
436void gerfs(char trans, blas_int n, blas_int nrhs, Scalar* a, blas_int lda, Scalar* factors, blas_int factor_lda,
437 blas_int const* ipiv, Scalar* b, blas_int ldb, Scalar* x, blas_int ldx, Scalar* forward_error,
438 Scalar* backward_error, Scalar* work, blas_int* iwork)
439{
440 blas_int const info = unchecked::gerfs(trans, n, nrhs, a, lda, factors, factor_lda, ipiv, b, ldb, x, ldx,
441 forward_error, backward_error, work, iwork);
442 detail::check_invalid_argument("gerfs", info);
443}
444
446template <uni20::LapackReal Scalar>
447void getri(blas_int n, Scalar* a, blas_int lda, blas_int* ipiv, Scalar* work, blas_int lwork)
448{
449 blas_int const info = unchecked::getri(n, a, lda, ipiv, work, lwork);
450 detail::check_singular("getri", info);
451}
452
454template <uni20::LapackComplexReal Real>
455void getri(blas_int n, uni20::detail::standard_complex<Real>* a, blas_int lda, blas_int* ipiv,
456 uni20::detail::standard_complex<Real>* work, blas_int lwork)
457{
458 blas_int const info = unchecked::getri(n, a, lda, ipiv, work, lwork);
459 detail::check_singular("getri", info);
460}
461
463template <uni20::LapackReal Scalar>
464Scalar gecon(char norm, blas_int n, Scalar const* a, blas_int lda, Scalar anorm, Scalar* work, blas_int* iwork)
465{
466 Scalar rcond{};
467 blas_int const info = unchecked::gecon(norm, n, a, lda, anorm, rcond, work, iwork);
468 detail::check_invalid_argument("gecon", info);
469 return rcond;
470}
471
473template <uni20::LapackComplexReal Real>
474Real gecon(char norm, blas_int n, uni20::detail::standard_complex<Real> const* a, blas_int lda, Real anorm,
475 uni20::detail::standard_complex<Real>* work, Real* rwork)
476{
477 Real rcond{};
478 blas_int const info = unchecked::gecon(norm, n, a, lda, anorm, rcond, work, rwork);
479 detail::check_invalid_argument("gecon", info);
480 return rcond;
481}
482
484template <uni20::LapackReal Scalar>
485void gels(char trans, blas_int m, blas_int n, blas_int nrhs, Scalar* a, blas_int lda, Scalar* b, blas_int ldb,
486 Scalar* work, blas_int lwork)
487{
488 blas_int const info = unchecked::gels(trans, m, n, nrhs, a, lda, b, ldb, work, lwork);
489 detail::check_invalid_argument("gels", info);
490 if (info > 0)
491 {
492 detail::raise_terminal_info("gels", "found a rank-deficient triangular factor", info);
493 }
494}
495
497template <uni20::LapackReal Scalar>
498void gelss(blas_int m, blas_int n, blas_int nrhs, Scalar* a, blas_int lda, Scalar* b, blas_int ldb, Scalar* s,
499 Scalar rcond, blas_int& rank, Scalar* work, blas_int lwork)
500{
501 blas_int const info = unchecked::gelss(m, n, nrhs, a, lda, b, ldb, s, rcond, rank, work, lwork);
502 detail::check_convergence("gelss", info);
503}
504
506template <uni20::LapackReal Scalar>
507void gelsd(blas_int m, blas_int n, blas_int nrhs, Scalar* a, blas_int lda, Scalar* b, blas_int ldb, Scalar* s,
508 Scalar rcond, blas_int& rank, Scalar* work, blas_int lwork, blas_int* iwork)
509{
510 blas_int const info = unchecked::gelsd(m, n, nrhs, a, lda, b, ldb, s, rcond, rank, work, lwork, iwork);
511 detail::check_convergence("gelsd", info);
512}
513
515template <uni20::LapackReal Scalar>
516void gelsy(blas_int m, blas_int n, blas_int nrhs, Scalar* a, blas_int lda, Scalar* b, blas_int ldb, blas_int* jpvt,
517 Scalar rcond, blas_int& rank, Scalar* work, blas_int lwork)
518{
519 blas_int const info = unchecked::gelsy(m, n, nrhs, a, lda, b, ldb, jpvt, rcond, rank, work, lwork);
520 detail::check_invalid_argument("gelsy", info);
521 if (info > 0)
522 {
523 detail::raise_terminal_info("gelsy", "failed to compute a rank-revealing least-squares solution", info);
524 }
525}
526
528template <uni20::LapackScalar Scalar>
529void geqrf(blas_int m, blas_int n, Scalar* a, blas_int lda, Scalar* tau, Scalar* work, blas_int lwork)
530{
531 blas_int const info = unchecked::geqrf(m, n, a, lda, tau, work, lwork);
532 detail::check_invalid_argument("geqrf", info);
533}
534
536template <uni20::LapackScalar Scalar>
537void gelqf(blas_int m, blas_int n, Scalar* a, blas_int lda, Scalar* tau, Scalar* work, blas_int lwork)
538{
539 blas_int const info = unchecked::gelqf(m, n, a, lda, tau, work, lwork);
540 detail::check_invalid_argument("gelqf", info);
541}
542
544template <uni20::LapackReal Scalar>
545void geqlf(blas_int m, blas_int n, Scalar* a, blas_int lda, Scalar* tau, Scalar* work, blas_int lwork)
546{
547 blas_int const info = unchecked::geqlf(m, n, a, lda, tau, work, lwork);
548 detail::check_invalid_argument("geqlf", info);
549}
550
552template <uni20::LapackReal Scalar>
553void gerqf(blas_int m, blas_int n, Scalar* a, blas_int lda, Scalar* tau, Scalar* work, blas_int lwork)
554{
555 blas_int const info = unchecked::gerqf(m, n, a, lda, tau, work, lwork);
556 detail::check_invalid_argument("gerqf", info);
557}
558
560template <uni20::LapackScalar Scalar>
561void orgqr(blas_int m, blas_int n, blas_int k, Scalar* a, blas_int lda, Scalar* tau, Scalar* work, blas_int lwork)
562{
563 blas_int const info = unchecked::orgqr(m, n, k, a, lda, tau, work, lwork);
564 detail::check_invalid_argument("orgqr", info);
565}
566
568template <uni20::LapackScalar Scalar>
569void orglq(blas_int m, blas_int n, blas_int k, Scalar* a, blas_int lda, Scalar* tau, Scalar* work, blas_int lwork)
570{
571 blas_int const info = unchecked::orglq(m, n, k, a, lda, tau, work, lwork);
572 detail::check_invalid_argument("orglq", info);
573}
574
576template <uni20::LapackReal Scalar>
577void orgql(blas_int m, blas_int n, blas_int k, Scalar* a, blas_int lda, Scalar* tau, Scalar* work, blas_int lwork)
578{
579 blas_int const info = unchecked::orgql(m, n, k, a, lda, tau, work, lwork);
580 detail::check_invalid_argument("orgql", info);
581}
582
584template <uni20::LapackReal Scalar>
585void orgrq(blas_int m, blas_int n, blas_int k, Scalar* a, blas_int lda, Scalar* tau, Scalar* work, blas_int lwork)
586{
587 blas_int const info = unchecked::orgrq(m, n, k, a, lda, tau, work, lwork);
588 detail::check_invalid_argument("orgrq", info);
589}
590
592template <uni20::LapackReal Scalar>
593void ormqr(char side, char trans, blas_int m, blas_int n, blas_int k, Scalar* a, blas_int lda, Scalar* tau, Scalar* c,
594 blas_int ldc, Scalar* work, blas_int lwork)
595{
596 blas_int const info = unchecked::ormqr(side, trans, m, n, k, a, lda, tau, c, ldc, work, lwork);
597 detail::check_invalid_argument("ormqr", info);
598}
599
601template <uni20::LapackReal Scalar>
602void ormlq(char side, char trans, blas_int m, blas_int n, blas_int k, Scalar* a, blas_int lda, Scalar* tau, Scalar* c,
603 blas_int ldc, Scalar* work, blas_int lwork)
604{
605 blas_int const info = unchecked::ormlq(side, trans, m, n, k, a, lda, tau, c, ldc, work, lwork);
606 detail::check_invalid_argument("ormlq", info);
607}
608
610template <uni20::LapackReal Scalar>
611void ormql(char side, char trans, blas_int m, blas_int n, blas_int k, Scalar* a, blas_int lda, Scalar* tau, Scalar* c,
612 blas_int ldc, Scalar* work, blas_int lwork)
613{
614 blas_int const info = unchecked::ormql(side, trans, m, n, k, a, lda, tau, c, ldc, work, lwork);
615 detail::check_invalid_argument("ormql", info);
616}
617
619template <uni20::LapackReal Scalar>
620void ormrq(char side, char trans, blas_int m, blas_int n, blas_int k, Scalar* a, blas_int lda, Scalar* tau, Scalar* c,
621 blas_int ldc, Scalar* work, blas_int lwork)
622{
623 blas_int const info = unchecked::ormrq(side, trans, m, n, k, a, lda, tau, c, ldc, work, lwork);
624 detail::check_invalid_argument("ormrq", info);
625}
626
628template <uni20::LapackReal Scalar>
629void gebrd(blas_int m, blas_int n, Scalar* a, blas_int lda, Scalar* d, Scalar* e, Scalar* tauq, Scalar* taup,
630 Scalar* work, blas_int lwork)
631{
632 blas_int const info = unchecked::gebrd(m, n, a, lda, d, e, tauq, taup, work, lwork);
633 detail::check_convergence("gebrd", info);
634}
635
637template <uni20::LapackReal Scalar>
638void gehrd(blas_int n, blas_int first, blas_int last, Scalar* a, blas_int lda, Scalar* tau, Scalar* work,
639 blas_int lwork)
640{
641 blas_int const info = unchecked::gehrd(n, first, last, a, lda, tau, work, lwork);
642 detail::check_invalid_argument("gehrd", info);
643}
644
646template <uni20::LapackReal Scalar>
647void geqp3(blas_int m, blas_int n, Scalar* a, blas_int lda, blas_int* jpvt, Scalar* tau, Scalar* work, blas_int lwork)
648{
649 blas_int const info = unchecked::geqp3(m, n, a, lda, jpvt, tau, work, lwork);
650 detail::check_invalid_argument("geqp3", info);
651}
652
654template <uni20::LapackReal Scalar>
655void sytrd(char uplo, blas_int n, Scalar* a, blas_int lda, Scalar* d, Scalar* e, Scalar* tau, Scalar* work,
656 blas_int lwork)
657{
658 blas_int const info = unchecked::sytrd(uplo, n, a, lda, d, e, tau, work, lwork);
659 detail::check_convergence("sytrd", info);
660}
661
663template <uni20::LapackReal Scalar>
664void syev(char jobz, char uplo, blas_int n, Scalar* a, blas_int lda, Scalar* w, Scalar* work, blas_int lwork)
665{
666 blas_int const info = unchecked::syev(jobz, uplo, n, a, lda, w, work, lwork);
667 detail::check_convergence("syev", info);
668}
669
671template <uni20::LapackReal Scalar>
672void syevd(char jobz, char uplo, blas_int n, Scalar* a, blas_int lda, Scalar* w, Scalar* work, blas_int lwork,
673 blas_int* iwork, blas_int liwork)
674{
675 blas_int const info = unchecked::syevd(jobz, uplo, n, a, lda, w, work, lwork, iwork, liwork);
676 detail::check_convergence("syevd", info);
677}
678
680template <uni20::LapackReal Scalar>
681void syevr(char jobz, char range, char uplo, blas_int n, Scalar* a, blas_int lda, Scalar vl, Scalar vu, blas_int il,
682 blas_int iu, Scalar abstol, blas_int& selected_count, Scalar* w, Scalar* z, blas_int ldz, blas_int* isuppz,
683 Scalar* work, blas_int lwork, blas_int* iwork, blas_int liwork)
684{
685 blas_int const info = unchecked::syevr(jobz, range, uplo, n, a, lda, vl, vu, il, iu, abstol, selected_count, w, z,
686 ldz, isuppz, work, lwork, iwork, liwork);
687 detail::check_convergence("syevr", info);
688}
689
691template <uni20::LapackReal Scalar>
692void sygv(blas_int itype, char jobz, char uplo, blas_int n, Scalar* a, blas_int lda, Scalar* b, blas_int ldb, Scalar* w,
693 Scalar* work, blas_int lwork)
694{
695 blas_int const info = unchecked::sygv(itype, jobz, uplo, n, a, lda, b, ldb, w, work, lwork);
696 detail::check_generalized_symmetric_eigensolver("sygv", n, info);
697}
698
702template <uni20::LapackReal Scalar>
703void sygvd(blas_int itype, char jobz, char uplo, blas_int n, Scalar* a, blas_int lda, Scalar* b, blas_int ldb,
704 Scalar* w, Scalar* work, blas_int lwork, blas_int* iwork, blas_int liwork)
705{
706 blas_int const info = unchecked::sygvd(itype, jobz, uplo, n, a, lda, b, ldb, w, work, lwork, iwork, liwork);
707 detail::check_generalized_symmetric_eigensolver("sygvd", n, info);
708}
709
711template <uni20::LapackReal Scalar>
712void sygvx(blas_int itype, char jobz, char range, char uplo, blas_int n, Scalar* a, blas_int lda, Scalar* b,
713 blas_int ldb, Scalar vl, Scalar vu, blas_int il, blas_int iu, Scalar abstol, blas_int& selected_count,
714 Scalar* w, Scalar* z, blas_int ldz, Scalar* work, blas_int lwork, blas_int* iwork, blas_int* ifail)
715{
716 blas_int const info = unchecked::sygvx(itype, jobz, range, uplo, n, a, lda, b, ldb, vl, vu, il, iu, abstol,
717 selected_count, w, z, ldz, work, lwork, iwork, ifail);
718 detail::check_generalized_symmetric_eigensolver("sygvx", n, info);
719}
720
722template <uni20::LapackComplexReal Real>
723void heev(char jobz, char uplo, blas_int n, uni20::detail::standard_complex<Real>* a, blas_int lda, Real* w,
724 uni20::detail::standard_complex<Real>* work, blas_int lwork, Real* rwork)
725{
726 blas_int const info = unchecked::heev(jobz, uplo, n, a, lda, w, work, lwork, rwork);
727 detail::check_convergence("heev", info);
728}
729
731template <uni20::LapackComplexReal Real>
732void heevd(char jobz, char uplo, blas_int n, uni20::detail::standard_complex<Real>* a, blas_int lda, Real* w,
733 uni20::detail::standard_complex<Real>* work, blas_int lwork, Real* rwork, blas_int lrwork, blas_int* iwork,
734 blas_int liwork)
735{
736 blas_int const info = unchecked::heevd(jobz, uplo, n, a, lda, w, work, lwork, rwork, lrwork, iwork, liwork);
737 detail::check_convergence("heevd", info);
738}
739
741template <uni20::LapackComplexReal Real>
742void heevr(char jobz, char range, char uplo, blas_int n, uni20::detail::standard_complex<Real>* a, blas_int lda,
743 Real vl, Real vu, blas_int il, blas_int iu, Real abstol, blas_int& selected_count, Real* w,
744 uni20::detail::standard_complex<Real>* z, blas_int ldz, blas_int* isuppz,
745 uni20::detail::standard_complex<Real>* work, blas_int lwork, Real* rwork, blas_int lrwork, blas_int* iwork,
746 blas_int liwork)
747{
748 blas_int const info = unchecked::heevr(jobz, range, uplo, n, a, lda, vl, vu, il, iu, abstol, selected_count, w, z,
749 ldz, isuppz, work, lwork, rwork, lrwork, iwork, liwork);
750 detail::check_convergence("heevr", info);
751}
752
754template <uni20::LapackComplexReal Real>
755void hegv(blas_int itype, char jobz, char uplo, blas_int n, uni20::detail::standard_complex<Real>* a, blas_int lda,
756 uni20::detail::standard_complex<Real>* b, blas_int ldb, Real* w, uni20::detail::standard_complex<Real>* work,
757 blas_int lwork, Real* rwork)
758{
759 blas_int const info = unchecked::hegv(itype, jobz, uplo, n, a, lda, b, ldb, w, work, lwork, rwork);
760 detail::check_generalized_symmetric_eigensolver("hegv", n, info);
761}
762
765template <uni20::LapackComplexReal Real>
766void hegvd(blas_int itype, char jobz, char uplo, blas_int n, uni20::detail::standard_complex<Real>* a, blas_int lda,
767 uni20::detail::standard_complex<Real>* b, blas_int ldb, Real* w, uni20::detail::standard_complex<Real>* work,
768 blas_int lwork, Real* rwork, blas_int lrwork, blas_int* iwork, blas_int liwork)
769{
770 blas_int const info =
771 unchecked::hegvd(itype, jobz, uplo, n, a, lda, b, ldb, w, work, lwork, rwork, lrwork, iwork, liwork);
772 detail::check_generalized_symmetric_eigensolver("hegvd", n, info);
773}
774
776template <uni20::LapackComplexReal Real>
777void hegvx(blas_int itype, char jobz, char range, char uplo, blas_int n, uni20::detail::standard_complex<Real>* a,
778 blas_int lda, uni20::detail::standard_complex<Real>* b, blas_int ldb, Real vl, Real vu, blas_int il,
779 blas_int iu, Real abstol, blas_int& selected_count, Real* w, uni20::detail::standard_complex<Real>* z,
780 blas_int ldz, uni20::detail::standard_complex<Real>* work, blas_int lwork, Real* rwork, blas_int* iwork,
781 blas_int* ifail)
782{
783 blas_int const info = unchecked::hegvx(itype, jobz, range, uplo, n, a, lda, b, ldb, vl, vu, il, iu, abstol,
784 selected_count, w, z, ldz, work, lwork, rwork, iwork, ifail);
785 detail::check_generalized_symmetric_eigensolver("hegvx", n, info);
786}
787
789template <uni20::LapackReal Scalar>
790void geev(char jobvl, char jobvr, blas_int n, Scalar* a, blas_int lda, Scalar* wr, Scalar* wi, Scalar* vl,
791 blas_int ldvl, Scalar* vr, blas_int ldvr, Scalar* work, blas_int lwork)
792{
793 blas_int const info = unchecked::geev(jobvl, jobvr, n, a, lda, wr, wi, vl, ldvl, vr, ldvr, work, lwork);
794 detail::check_convergence("geev", info);
795}
796
798template <uni20::LapackReal Scalar>
799void geevx(char balanc, char jobvl, char jobvr, char sense, blas_int n, Scalar* a, blas_int lda, Scalar* wr, Scalar* wi,
800 Scalar* vl, blas_int ldvl, Scalar* vr, blas_int ldvr, blas_int& ilo, blas_int& ihi, Scalar* scale,
801 Scalar& abnrm, Scalar* rconde, Scalar* rcondv, Scalar* work, blas_int lwork, blas_int* iwork)
802{
803 blas_int const info = unchecked::geevx(balanc, jobvl, jobvr, sense, n, a, lda, wr, wi, vl, ldvl, vr, ldvr, ilo, ihi,
804 scale, abnrm, rconde, rcondv, work, lwork, iwork);
805 detail::check_convergence("geevx", info);
806}
807
809template <uni20::LapackReal Scalar>
810void gebal(char job, blas_int n, Scalar* a, blas_int lda, blas_int& first, blas_int& last, Scalar* scale)
811{
812 blas_int const info = unchecked::gebal(job, n, a, lda, first, last, scale);
813 detail::check_invalid_argument("gebal", info);
814 if (info > 0)
815 {
816 detail::raise_terminal_info("gebal", "failed unexpectedly", info);
817 }
818}
819
821template <uni20::LapackReal Scalar>
822void gebak(char job, char side, blas_int n, blas_int first, blas_int last, Scalar* scale, blas_int vector_count,
823 Scalar* vectors, blas_int leading_dimension)
824{
825 blas_int const info = unchecked::gebak(job, side, n, first, last, scale, vector_count, vectors, leading_dimension);
826 detail::check_invalid_argument("gebak", info);
827 if (info > 0)
828 {
829 detail::raise_terminal_info("gebak", "failed unexpectedly", info);
830 }
831}
832
834template <uni20::LapackComplexReal Real>
835void geev(char jobvl, char jobvr, blas_int n, uni20::detail::standard_complex<Real>* a, blas_int lda,
836 uni20::detail::standard_complex<Real>* w, uni20::detail::standard_complex<Real>* vl, blas_int ldvl,
837 uni20::detail::standard_complex<Real>* vr, blas_int ldvr, uni20::detail::standard_complex<Real>* work,
838 blas_int lwork, Real* rwork)
839{
840 blas_int const info = unchecked::geev(jobvl, jobvr, n, a, lda, w, vl, ldvl, vr, ldvr, work, lwork, rwork);
841 detail::check_convergence("geev", info);
842}
843
845template <uni20::LapackReal Scalar>
846void gees(char jobvs, char sort, blas_int n, Scalar* a, blas_int lda, blas_int& selected_dimension, Scalar* wr,
847 Scalar* wi, Scalar* vs, blas_int ldvs, Scalar* work, blas_int lwork, blas_int* bwork)
848{
849 blas_int const info =
850 unchecked::gees(jobvs, sort, n, a, lda, selected_dimension, wr, wi, vs, ldvs, work, lwork, bwork);
851 detail::check_invalid_argument("gees", info);
852 if (info > 0)
853 {
854 detail::raise_terminal_info("gees", "failed to compute a Schur form", info);
855 }
856}
857
859template <uni20::LapackComplexReal Real>
860void gees(char jobvs, char sort, blas_int n, uni20::detail::standard_complex<Real>* a, blas_int lda,
861 blas_int& selected_dimension, uni20::detail::standard_complex<Real>* w,
862 uni20::detail::standard_complex<Real>* vs, blas_int ldvs, uni20::detail::standard_complex<Real>* work,
863 blas_int lwork, Real* rwork, blas_int* bwork)
864{
865 blas_int const info =
866 unchecked::gees(jobvs, sort, n, a, lda, selected_dimension, w, vs, ldvs, work, lwork, rwork, bwork);
867 detail::check_invalid_argument("gees", info);
868 if (info > 0)
869 {
870 detail::raise_terminal_info("gees", "failed to compute a Schur form", info);
871 }
872}
873
875template <uni20::LapackReal Scalar>
876void hseqr(char job, char compz, blas_int n, blas_int first, blas_int last, Scalar* h, blas_int ldh, Scalar* wr,
877 Scalar* wi, Scalar* z, blas_int ldz, Scalar* work, blas_int lwork)
878{
879 blas_int const info = unchecked::hseqr(job, compz, n, first, last, h, ldh, wr, wi, z, ldz, work, lwork);
880 detail::check_invalid_argument("hseqr", info);
881 if (info > 0)
882 {
883 detail::raise_terminal_info("hseqr", "failed to compute a Schur form", info);
884 }
885}
886
888template <uni20::LapackReal Scalar>
889void trexc(char compq, blas_int n, Scalar* t, blas_int ldt, Scalar* q, blas_int ldq, blas_int& first, blas_int& last,
890 Scalar* work)
891{
892 blas_int const info = unchecked::trexc(compq, n, t, ldt, q, ldq, first, last, work);
893 detail::check_invalid_argument("trexc", info);
894 if (info > 0)
895 {
896 detail::raise_terminal_info("trexc", "failed to reorder adjacent Schur blocks", info);
897 }
898}
899
901template <uni20::LapackComplexReal Real>
902void trexc(char compq, blas_int n, uni20::detail::standard_complex<Real>* t, blas_int ldt,
903 uni20::detail::standard_complex<Real>* q, blas_int ldq, blas_int& first, blas_int& last)
904{
905 blas_int const info = unchecked::trexc(compq, n, t, ldt, q, ldq, first, last);
906 detail::check_invalid_argument("trexc", info);
907 if (info > 0)
908 {
909 detail::raise_terminal_info("trexc", "failed to reorder adjacent Schur blocks", info);
910 }
911}
912
914template <uni20::LapackReal Scalar>
915void trsen(char job, char compq, blas_int* select, blas_int n, Scalar* t, blas_int ldt, Scalar* q, blas_int ldq,
916 Scalar* wr, Scalar* wi, blas_int& selected_dimension, Scalar& reciprocal_eigenvalue_cluster_condition,
917 Scalar& reciprocal_invariant_subspace_condition, Scalar* work, blas_int lwork, blas_int* iwork,
918 blas_int liwork)
919{
920 blas_int const info = unchecked::trsen(job, compq, select, n, t, ldt, q, ldq, wr, wi, selected_dimension,
921 reciprocal_eigenvalue_cluster_condition,
922 reciprocal_invariant_subspace_condition, work, lwork, iwork, liwork);
923 detail::check_invalid_argument("trsen", info);
924 if (info == 1)
925 {
926 detail::raise_terminal_info("trsen", "could not reorder the selected Schur blocks", info);
927 }
928 if (info > 1)
929 {
930 detail::raise_terminal_info("trsen", "failed unexpectedly", info);
931 }
932}
933
935template <uni20::LapackReal Scalar>
936void trevc(char side, char howmny, blas_int* select, blas_int n, Scalar* t, blas_int ldt, Scalar* vl, blas_int ldvl,
937 Scalar* vr, blas_int ldvr, blas_int mm, blas_int& computed_vectors, Scalar* work)
938{
939 blas_int const info =
940 unchecked::trevc(side, howmny, select, n, t, ldt, vl, ldvl, vr, ldvr, mm, computed_vectors, work);
941 detail::check_invalid_argument("trevc", info);
942 if (info > 0)
943 {
944 detail::raise_terminal_info("trevc", "failed to compute all requested Schur eigenvectors", info);
945 }
946}
947
949template <uni20::LapackReal Scalar>
950void trsna(char job, char howmny, blas_int* select, blas_int n, Scalar* t, blas_int ldt, Scalar* vl, blas_int ldvl,
951 Scalar* vr, blas_int ldvr, Scalar* reciprocal_eigenvalue_condition_numbers,
952 Scalar* reciprocal_eigenvector_condition_numbers, blas_int mm, blas_int& computed_estimates, Scalar* work,
953 blas_int ldwork, blas_int* iwork)
954{
955 blas_int const info =
956 unchecked::trsna(job, howmny, select, n, t, ldt, vl, ldvl, vr, ldvr, reciprocal_eigenvalue_condition_numbers,
957 reciprocal_eigenvector_condition_numbers, mm, computed_estimates, work, ldwork, iwork);
958 detail::check_invalid_argument("trsna", info);
959 if (info > 0)
960 {
961 detail::raise_terminal_info("trsna", "failed unexpectedly", info);
962 }
963}
964
966template <uni20::LapackReal Scalar>
967void ggev(char jobvl, char jobvr, blas_int n, Scalar* a, blas_int lda, Scalar* b, blas_int ldb, Scalar* alphar,
968 Scalar* alphai, Scalar* beta, Scalar* vl, blas_int ldvl, Scalar* vr, blas_int ldvr, Scalar* work,
969 blas_int lwork)
970{
971 blas_int const info =
972 unchecked::ggev(jobvl, jobvr, n, a, lda, b, ldb, alphar, alphai, beta, vl, ldvl, vr, ldvr, work, lwork);
973 detail::check_convergence("ggev", info);
974}
975
977template <uni20::LapackReal Scalar>
978void ggevx(char balanc, char jobvl, char jobvr, char sense, blas_int n, Scalar* a, blas_int lda, Scalar* b,
979 blas_int ldb, Scalar* alphar, Scalar* alphai, Scalar* beta, Scalar* vl, blas_int ldvl, Scalar* vr,
980 blas_int ldvr, blas_int& ilo, blas_int& ihi, Scalar* lscale, Scalar* rscale, Scalar& abnrm, Scalar& bbnrm,
981 Scalar* rconde, Scalar* rcondv, Scalar* work, blas_int lwork, blas_int* iwork, blas_int* bwork)
982{
983 blas_int const info =
984 unchecked::ggevx(balanc, jobvl, jobvr, sense, n, a, lda, b, ldb, alphar, alphai, beta, vl, ldvl, vr, ldvr, ilo,
985 ihi, lscale, rscale, abnrm, bbnrm, rconde, rcondv, work, lwork, iwork, bwork);
986 detail::check_convergence("ggevx", info);
987}
988
990template <uni20::LapackReal Scalar>
991void ggbal(char job, blas_int n, Scalar* a, blas_int lda, Scalar* b, blas_int ldb, blas_int& first, blas_int& last,
992 Scalar* lscale, Scalar* rscale, Scalar* work)
993{
994 blas_int const info = unchecked::ggbal(job, n, a, lda, b, ldb, first, last, lscale, rscale, work);
995 detail::check_invalid_argument("ggbal", info);
996 if (info > 0)
997 {
998 detail::raise_terminal_info("ggbal", "failed unexpectedly", info);
999 }
1000}
1001
1003template <uni20::LapackReal Scalar>
1004void ggbak(char job, char side, blas_int n, blas_int first, blas_int last, Scalar* lscale, Scalar* rscale,
1005 blas_int vector_count, Scalar* vectors, blas_int leading_dimension)
1006{
1007 blas_int const info =
1008 unchecked::ggbak(job, side, n, first, last, lscale, rscale, vector_count, vectors, leading_dimension);
1009 detail::check_invalid_argument("ggbak", info);
1010 if (info > 0)
1011 {
1012 detail::raise_terminal_info("ggbak", "failed unexpectedly", info);
1013 }
1014}
1015
1017template <uni20::LapackReal Scalar>
1018void gges(char jobvsl, char jobvsr, char sort, blas_int n, Scalar* a, blas_int lda, Scalar* b, blas_int ldb,
1019 blas_int& selected_dimension, Scalar* alphar, Scalar* alphai, Scalar* beta, Scalar* vsl, blas_int ldvsl,
1020 Scalar* vsr, blas_int ldvsr, Scalar* work, blas_int lwork, blas_int* bwork)
1021{
1022 blas_int const info = unchecked::gges(jobvsl, jobvsr, sort, n, a, lda, b, ldb, selected_dimension, alphar, alphai,
1023 beta, vsl, ldvsl, vsr, ldvsr, work, lwork, bwork);
1024 detail::check_invalid_argument("gges", info);
1025 if (info > 0 && info <= n)
1026 {
1027 detail::raise_terminal_info("gges", "failed to compute a generalized Schur form", info);
1028 }
1029 if (info > n)
1030 {
1031 detail::raise_terminal_info("gges", "failed after generalized Schur convergence", info);
1032 }
1033}
1034
1036template <uni20::LapackReal Scalar>
1037void gghrd(char compq, char compz, blas_int n, blas_int first, blas_int last, Scalar* a, blas_int lda, Scalar* b,
1038 blas_int ldb, Scalar* q, blas_int ldq, Scalar* z, blas_int ldz)
1039{
1040 blas_int const info = unchecked::gghrd(compq, compz, n, first, last, a, lda, b, ldb, q, ldq, z, ldz);
1041 detail::check_invalid_argument("gghrd", info);
1042 if (info > 0)
1043 {
1044 detail::raise_terminal_info("gghrd", "failed unexpectedly", info);
1045 }
1046}
1047
1049template <uni20::LapackReal Scalar>
1050void hgeqz(char job, char compq, char compz, blas_int n, blas_int first, blas_int last, Scalar* h, blas_int ldh,
1051 Scalar* t, blas_int ldt, Scalar* alphar, Scalar* alphai, Scalar* beta, Scalar* q, blas_int ldq, Scalar* z,
1052 blas_int ldz, Scalar* work, blas_int lwork)
1053{
1054 blas_int const info = unchecked::hgeqz(job, compq, compz, n, first, last, h, ldh, t, ldt, alphar, alphai, beta, q,
1055 ldq, z, ldz, work, lwork);
1056 detail::check_invalid_argument("hgeqz", info);
1057 if (info > 0)
1058 {
1059 detail::raise_terminal_info("hgeqz", "failed to compute a generalized Schur form", info);
1060 }
1061}
1062
1064template <uni20::LapackReal Scalar>
1065void tgexc(bool wantq, bool wantz, blas_int n, Scalar* a, blas_int lda, Scalar* b, blas_int ldb, Scalar* q,
1066 blas_int ldq, Scalar* z, blas_int ldz, blas_int& first, blas_int& last, Scalar* work, blas_int lwork)
1067{
1068 blas_int const info = unchecked::tgexc(wantq, wantz, n, a, lda, b, ldb, q, ldq, z, ldz, first, last, work, lwork);
1069 detail::check_invalid_argument("tgexc", info);
1070 if (info == 1)
1071 {
1072 detail::raise_terminal_info("tgexc", "could not swap adjacent generalized Schur blocks", info);
1073 }
1074 if (info > 1)
1075 {
1076 detail::raise_terminal_info("tgexc", "failed unexpectedly", info);
1077 }
1078}
1079
1081template <uni20::LapackReal Scalar>
1082void tgsen(blas_int ijob, bool wantq, bool wantz, blas_int* select, blas_int n, Scalar* a, blas_int lda, Scalar* b,
1083 blas_int ldb, Scalar* alphar, Scalar* alphai, Scalar* beta, Scalar* q, blas_int ldq, Scalar* z, blas_int ldz,
1084 blas_int& selected_dimension, Scalar& pl, Scalar& pr, Scalar* dif, Scalar* work, blas_int lwork,
1085 blas_int* iwork, blas_int liwork)
1086{
1087 blas_int const info = unchecked::tgsen(ijob, wantq, wantz, select, n, a, lda, b, ldb, alphar, alphai, beta, q, ldq, z,
1088 ldz, selected_dimension, pl, pr, dif, work, lwork, iwork, liwork);
1089 detail::check_invalid_argument("tgsen", info);
1090 if (info == 1)
1091 {
1092 detail::raise_terminal_info("tgsen", "could not reorder the selected generalized Schur blocks", info);
1093 }
1094 if (info > 1)
1095 {
1096 detail::raise_terminal_info("tgsen", "failed unexpectedly", info);
1097 }
1098}
1099
1101template <uni20::LapackReal Scalar>
1102void tgevc(char side, char howmny, blas_int* select, blas_int n, Scalar* s, blas_int lds, Scalar* p, blas_int ldp,
1103 Scalar* vl, blas_int ldvl, Scalar* vr, blas_int ldvr, blas_int mm, blas_int& computed_vectors, Scalar* work)
1104{
1105 blas_int const info =
1106 unchecked::tgevc(side, howmny, select, n, s, lds, p, ldp, vl, ldvl, vr, ldvr, mm, computed_vectors, work);
1107 detail::check_invalid_argument("tgevc", info);
1108 if (info > 0)
1109 {
1110 detail::raise_terminal_info("tgevc", "failed to compute generalized Schur eigenvectors", info);
1111 }
1112}
1113
1115template <uni20::LapackReal Scalar>
1116void tgsna(char job, char howmny, blas_int* select, blas_int n, Scalar* a, blas_int lda, Scalar* b, blas_int ldb,
1117 Scalar* vl, blas_int ldvl, Scalar* vr, blas_int ldvr, Scalar* reciprocal_eigenvalue_condition_numbers,
1118 Scalar* reciprocal_eigenvector_condition_numbers, blas_int mm, blas_int& computed_estimates, Scalar* work,
1119 blas_int lwork, blas_int* iwork)
1120{
1121 blas_int const info = unchecked::tgsna(
1122 job, howmny, select, n, a, lda, b, ldb, vl, ldvl, vr, ldvr, reciprocal_eigenvalue_condition_numbers,
1123 reciprocal_eigenvector_condition_numbers, mm, computed_estimates, work, lwork, iwork);
1124 detail::check_invalid_argument("tgsna", info);
1125 if (info > 0)
1126 {
1127 detail::raise_terminal_info("tgsna", "failed unexpectedly", info);
1128 }
1129}
1130
1132template <uni20::LapackReal Scalar>
1133void orgbr(char vect, blas_int m, blas_int n, blas_int k, Scalar* a, blas_int lda, Scalar* tau, Scalar* work,
1134 blas_int lwork)
1135{
1136 blas_int const info = unchecked::orgbr(vect, m, n, k, a, lda, tau, work, lwork);
1137 detail::check_invalid_argument("orgbr", info);
1138}
1139
1141template <uni20::LapackReal Scalar>
1142void orghr(blas_int n, blas_int first, blas_int last, Scalar* a, blas_int lda, Scalar const* tau, Scalar* work,
1143 blas_int lwork)
1144{
1145 blas_int const info = unchecked::orghr(n, first, last, a, lda, tau, work, lwork);
1146 detail::check_invalid_argument("orghr", info);
1147}
1148
1150template <uni20::LapackReal Scalar>
1151void orgtr(char uplo, blas_int n, Scalar* a, blas_int lda, Scalar const* tau, Scalar* work, blas_int lwork)
1152{
1153 blas_int const info = unchecked::orgtr(uplo, n, a, lda, tau, work, lwork);
1154 detail::check_invalid_argument("orgtr", info);
1155}
1156
1158template <uni20::LapackReal Scalar>
1159void ormhr(char side, char trans, blas_int m, blas_int n, blas_int first, blas_int last, Scalar* a, blas_int lda,
1160 Scalar const* tau, Scalar* c, blas_int ldc, Scalar* work, blas_int lwork)
1161{
1162 blas_int const info = unchecked::ormhr(side, trans, m, n, first, last, a, lda, tau, c, ldc, work, lwork);
1163 detail::check_invalid_argument("ormhr", info);
1164}
1165
1167template <uni20::LapackReal Scalar>
1168void ormtr(char side, char uplo, char trans, blas_int m, blas_int n, Scalar* a, blas_int lda, Scalar const* tau,
1169 Scalar* c, blas_int ldc, Scalar* work, blas_int lwork)
1170{
1171 blas_int const info = unchecked::ormtr(side, uplo, trans, m, n, a, lda, tau, c, ldc, work, lwork);
1172 detail::check_invalid_argument("ormtr", info);
1173}
1174
1176template <uni20::LapackReal Scalar>
1177void ormbr(char vect, char side, char trans, blas_int m, blas_int n, blas_int k, Scalar* a, blas_int lda, Scalar* tau,
1178 Scalar* c, blas_int ldc, Scalar* work, blas_int lwork)
1179{
1180 blas_int const info = unchecked::ormbr(vect, side, trans, m, n, k, a, lda, tau, c, ldc, work, lwork);
1181 detail::check_invalid_argument("ormbr", info);
1182}
1183
1185template <uni20::LapackReal Scalar>
1186void gesvd(char jobu, char jobvt, blas_int m, blas_int n, Scalar* a, blas_int lda, Scalar* s, Scalar* u, blas_int ldu,
1187 Scalar* vt, blas_int ldvt, Scalar* work, blas_int lwork)
1188{
1189 blas_int const info = unchecked::gesvd(jobu, jobvt, m, n, a, lda, s, u, ldu, vt, ldvt, work, lwork);
1190 detail::check_convergence("gesvd", info);
1191}
1192
1194template <uni20::LapackComplexReal Real>
1195void gesvd(char jobu, char jobvt, blas_int m, blas_int n, uni20::detail::standard_complex<Real>* a, blas_int lda,
1196 Real* s, uni20::detail::standard_complex<Real>* u, blas_int ldu, uni20::detail::standard_complex<Real>* vt,
1197 blas_int ldvt, uni20::detail::standard_complex<Real>* work, blas_int lwork, Real* rwork)
1198{
1199 blas_int const info = unchecked::gesvd(jobu, jobvt, m, n, a, lda, s, u, ldu, vt, ldvt, work, lwork, rwork);
1200 detail::check_convergence("gesvd", info);
1201}
1202
1204template <uni20::LapackReal Scalar>
1205void gesdd(char jobz, blas_int m, blas_int n, Scalar* a, blas_int lda, Scalar* s, Scalar* u, blas_int ldu, Scalar* vt,
1206 blas_int ldvt, Scalar* work, blas_int lwork, blas_int* iwork)
1207{
1208 blas_int const info = unchecked::gesdd(jobz, m, n, a, lda, s, u, ldu, vt, ldvt, work, lwork, iwork);
1209 detail::check_convergence("gesdd", info);
1210}
1211
1213template <uni20::LapackComplexReal Real>
1214void gesdd(char jobz, blas_int m, blas_int n, uni20::detail::standard_complex<Real>* a, blas_int lda, Real* s,
1215 uni20::detail::standard_complex<Real>* u, blas_int ldu, uni20::detail::standard_complex<Real>* vt,
1216 blas_int ldvt, uni20::detail::standard_complex<Real>* work, blas_int lwork, Real* rwork, blas_int* iwork)
1217{
1218 blas_int const info = unchecked::gesdd(jobz, m, n, a, lda, s, u, ldu, vt, ldvt, work, lwork, rwork, iwork);
1219 detail::check_convergence("gesdd", info);
1220}
1221
1223template <uni20::LapackReal Scalar>
1224void gesvdx(char jobu, char jobvt, char range, blas_int m, blas_int n, Scalar* a, blas_int lda, Scalar vl, Scalar vu,
1225 blas_int il, blas_int iu, blas_int& selected_count, Scalar* singular_values, Scalar* u, blas_int ldu,
1226 Scalar* vt, blas_int ldvt, Scalar* work, blas_int lwork, blas_int* iwork)
1227{
1228 blas_int const info = unchecked::gesvdx(jobu, jobvt, range, m, n, a, lda, vl, vu, il, iu, selected_count,
1229 singular_values, u, ldu, vt, ldvt, work, lwork, iwork);
1230 detail::check_convergence("gesvdx", info);
1231}
1232
1234template <uni20::LapackComplexReal Real>
1235void gesvdx(char jobu, char jobvt, char range, blas_int m, blas_int n, uni20::detail::standard_complex<Real>* a,
1236 blas_int lda, Real vl, Real vu, blas_int il, blas_int iu, blas_int& selected_count, Real* singular_values,
1237 uni20::detail::standard_complex<Real>* u, blas_int ldu, uni20::detail::standard_complex<Real>* vt,
1238 blas_int ldvt, uni20::detail::standard_complex<Real>* work, blas_int lwork, Real* rwork, blas_int* iwork)
1239{
1240 blas_int const info = unchecked::gesvdx(jobu, jobvt, range, m, n, a, lda, vl, vu, il, iu, selected_count,
1241 singular_values, u, ldu, vt, ldvt, work, lwork, rwork, iwork);
1242 detail::check_convergence("gesvdx", info);
1243}
1244
1246template <uni20::LapackReal Scalar>
1247void bdsqr(char uplo, blas_int n, blas_int ncvt, blas_int nru, blas_int ncc, Scalar* d, Scalar* e, Scalar* vt,
1248 blas_int ldvt, Scalar* u, blas_int ldu, Scalar* c, blas_int ldc, Scalar* work)
1249{
1250 blas_int const info = unchecked::bdsqr(uplo, n, ncvt, nru, ncc, d, e, vt, ldvt, u, ldu, c, ldc, work);
1251 detail::check_convergence("bdsqr", info);
1252}
1253
1255template <uni20::LapackReal Scalar>
1256void bdsdc(char uplo, char compq, blas_int n, Scalar* d, Scalar* e, Scalar* u, blas_int ldu, Scalar* vt, blas_int ldvt,
1257 Scalar* q, blas_int* iq, Scalar* work, blas_int* iwork)
1258{
1259 if (compq != 'N' && compq != 'I')
1260 {
1261 throw std::invalid_argument("LAPACK bdsdc wrapper supports only singular values or explicit singular vectors");
1262 }
1263 blas_int const info = unchecked::bdsdc(uplo, compq, n, d, e, u, ldu, vt, ldvt, q, iq, work, iwork);
1264 detail::check_convergence("bdsdc", info);
1265}
1266
1268template <uni20::LapackReal Scalar>
1269void bdsvdx(char uplo, char jobz, char range, blas_int n, Scalar* d, Scalar* e, Scalar vl, Scalar vu, blas_int il,
1270 blas_int iu, blas_int& selected_count, Scalar* singular_values, Scalar* z, blas_int ldz, Scalar* work,
1271 blas_int* iwork)
1272{
1273 blas_int const info = unchecked::bdsvdx(uplo, jobz, range, n, d, e, vl, vu, il, iu, selected_count, singular_values,
1274 z, ldz, work, iwork);
1275 detail::check_convergence("bdsvdx", info);
1276}
1277
1279template <uni20::LapackReal Scalar> void potrf(char uplo, blas_int n, Scalar* a, blas_int lda)
1280{
1281 blas_int const info = unchecked::potrf(uplo, n, a, lda);
1282 detail::check_invalid_argument("potrf", info);
1283 if (info > 0)
1284 {
1285 detail::raise_terminal_info("potrf", "found a matrix that is not positive definite", info);
1286 }
1287}
1288
1290template <uni20::LapackReal Scalar>
1291bool pstrf(char uplo, blas_int n, Scalar* a, blas_int lda, blas_int* pivots, blas_int& rank, Scalar tolerance,
1292 Scalar* work)
1293{
1294 blas_int const info = unchecked::pstrf(uplo, n, a, lda, pivots, rank, tolerance, work);
1295 detail::check_invalid_argument("pstrf", info);
1296 if (info > 1)
1297 {
1298 detail::raise_terminal_info("pstrf", "failed unexpectedly", info);
1299 }
1300 return info == 1;
1301}
1302
1304template <uni20::LapackReal Scalar> void potri(char uplo, blas_int n, Scalar* a, blas_int lda)
1305{
1306 blas_int const info = unchecked::potri(uplo, n, a, lda);
1307 detail::check_invalid_argument("potri", info);
1308 if (info > 0)
1309 {
1310 detail::raise_terminal_info("potri", "found a singular Cholesky factor", info);
1311 }
1312}
1313
1315template <uni20::LapackReal Scalar>
1316void potrs(char uplo, blas_int n, blas_int nrhs, Scalar* a, blas_int lda, Scalar* b, blas_int ldb)
1317{
1318 blas_int const info = unchecked::potrs(uplo, n, nrhs, a, lda, b, ldb);
1319 detail::check_invalid_argument("potrs", info);
1320}
1321
1323template <uni20::LapackReal Scalar>
1324void porfs(char uplo, blas_int n, blas_int nrhs, Scalar* a, blas_int lda, Scalar* factors, blas_int factor_lda,
1325 Scalar* b, blas_int ldb, Scalar* x, blas_int ldx, Scalar* forward_error, Scalar* backward_error,
1326 Scalar* work, blas_int* iwork)
1327{
1328 blas_int const info = unchecked::porfs(uplo, n, nrhs, a, lda, factors, factor_lda, b, ldb, x, ldx, forward_error,
1329 backward_error, work, iwork);
1330 detail::check_invalid_argument("porfs", info);
1331}
1332
1334template <uni20::LapackReal Scalar>
1335bool posvx(char fact, char uplo, blas_int n, blas_int nrhs, Scalar* a, blas_int lda, Scalar* af, blas_int ldaf,
1336 char& equed, Scalar* scale, Scalar* b, blas_int ldb, Scalar* x, blas_int ldx, Scalar& rcond,
1337 Scalar* forward_error, Scalar* backward_error, Scalar* work, blas_int* iwork)
1338{
1339 blas_int const info = unchecked::posvx(fact, uplo, n, nrhs, a, lda, af, ldaf, equed, scale, b, ldb, x, ldx, rcond,
1340 forward_error, backward_error, work, iwork);
1341 detail::check_invalid_argument("posvx", info);
1342 if (info > 0 && info <= n)
1343 {
1344 detail::raise_terminal_info("posvx", "found a non-positive-definite leading minor", info);
1345 }
1346 if (info > n + 1)
1347 {
1348 detail::raise_terminal_info("posvx", "failed unexpectedly", info);
1349 }
1350 return info == n + 1;
1351}
1352
1354template <uni20::LapackReal Scalar>
1355void poequ(blas_int n, Scalar* a, blas_int lda, Scalar* scale, Scalar& scale_condition, Scalar& max_abs)
1356{
1357 blas_int const info = unchecked::poequ(n, a, lda, scale, scale_condition, max_abs);
1358 detail::check_invalid_argument("poequ", info);
1359 if (info > 0)
1360 {
1361 detail::raise_terminal_info("poequ", "found a non-positive diagonal entry", info);
1362 }
1363}
1364
1366template <uni20::LapackReal Scalar>
1367Scalar pocon(char uplo, blas_int n, Scalar* a, blas_int lda, Scalar matrix_one_norm, Scalar* work, blas_int* iwork)
1368{
1369 Scalar rcond{};
1370 blas_int const info = unchecked::pocon(uplo, n, a, lda, matrix_one_norm, rcond, work, iwork);
1371 detail::check_invalid_argument("pocon", info);
1372 return rcond;
1373}
1374
1376template <uni20::LapackReal Scalar>
1377void sytrf(char uplo, blas_int n, Scalar* a, blas_int lda, blas_int* ipiv, Scalar* work, blas_int lwork)
1378{
1379 blas_int const info = unchecked::sytrf(uplo, n, a, lda, ipiv, work, lwork);
1380 detail::check_singular_diagonal_block("sytrf", info);
1381}
1382
1384template <uni20::LapackReal Scalar>
1385void sytrs(char uplo, blas_int n, blas_int nrhs, Scalar* a, blas_int lda, blas_int const* ipiv, Scalar* b, blas_int ldb)
1386{
1387 blas_int const info = unchecked::sytrs(uplo, n, nrhs, a, lda, ipiv, b, ldb);
1388 detail::check_invalid_argument("sytrs", info);
1389}
1390
1392template <uni20::LapackReal Scalar>
1393void sytri(char uplo, blas_int n, Scalar* a, blas_int lda, blas_int const* ipiv, Scalar* work)
1394{
1395 blas_int const info = unchecked::sytri(uplo, n, a, lda, ipiv, work);
1396 detail::check_singular_diagonal_block("sytri", info);
1397}
1398
1400template <uni20::LapackReal Scalar>
1401void syrfs(char uplo, blas_int n, blas_int nrhs, Scalar* a, blas_int lda, Scalar* factors, blas_int factor_lda,
1402 blas_int const* ipiv, Scalar* b, blas_int ldb, Scalar* x, blas_int ldx, Scalar* forward_error,
1403 Scalar* backward_error, Scalar* work, blas_int* iwork)
1404{
1405 blas_int const info = unchecked::syrfs(uplo, n, nrhs, a, lda, factors, factor_lda, ipiv, b, ldb, x, ldx,
1406 forward_error, backward_error, work, iwork);
1407 detail::check_invalid_argument("syrfs", info);
1408}
1409
1411template <uni20::LapackReal Scalar>
1412bool sysvx(char fact, char uplo, blas_int n, blas_int nrhs, Scalar* a, blas_int lda, Scalar* af, blas_int ldaf,
1413 blas_int* ipiv, Scalar* b, blas_int ldb, Scalar* x, blas_int ldx, Scalar& rcond, Scalar* forward_error,
1414 Scalar* backward_error, Scalar* work, blas_int lwork, blas_int* iwork)
1415{
1416 blas_int const info = unchecked::sysvx(fact, uplo, n, nrhs, a, lda, af, ldaf, ipiv, b, ldb, x, ldx, rcond,
1417 forward_error, backward_error, work, lwork, iwork);
1418 return detail::check_symmetric_indefinite_expert_solve("sysvx", n, info);
1419}
1420
1422template <uni20::LapackReal Scalar>
1423Scalar sycon(char uplo, blas_int n, Scalar* a, blas_int lda, blas_int const* ipiv, Scalar matrix_one_norm, Scalar* work,
1424 blas_int* iwork)
1425{
1426 Scalar rcond{};
1427 blas_int const info = unchecked::sycon(uplo, n, a, lda, ipiv, matrix_one_norm, rcond, work, iwork);
1428 detail::check_invalid_argument("sycon", info);
1429 return rcond;
1430}
1431
1433template <uni20::LapackReal Scalar>
1434void trtrs(char uplo, char trans, char diag, blas_int n, blas_int nrhs, Scalar* a, blas_int lda, Scalar* b,
1435 blas_int ldb)
1436{
1437 blas_int const info = unchecked::trtrs(uplo, trans, diag, n, nrhs, a, lda, b, ldb);
1438 detail::check_singular_triangular("trtrs", info);
1439}
1440
1442template <uni20::LapackReal Scalar>
1443void trrfs(char uplo, char trans, char diag, blas_int n, blas_int nrhs, Scalar* a, blas_int lda, Scalar* b,
1444 blas_int ldb, Scalar* x, blas_int ldx, Scalar* forward_error, Scalar* backward_error, Scalar* work,
1445 blas_int* iwork)
1446{
1447 blas_int const info =
1448 unchecked::trrfs(uplo, trans, diag, n, nrhs, a, lda, b, ldb, x, ldx, forward_error, backward_error, work, iwork);
1449 detail::check_invalid_argument("trrfs", info);
1450}
1451
1453template <uni20::LapackReal Scalar> void trtri(char uplo, char diag, blas_int n, Scalar* a, blas_int lda)
1454{
1455 blas_int const info = unchecked::trtri(uplo, diag, n, a, lda);
1456 detail::check_singular_triangular("trtri", info);
1457}
1458
1460template <uni20::LapackReal Scalar>
1461Scalar trcon(char norm, char uplo, char diag, blas_int n, Scalar* a, blas_int lda, Scalar* work, blas_int* iwork)
1462{
1463 Scalar rcond{};
1464 blas_int const info = unchecked::trcon(norm, uplo, diag, n, a, lda, rcond, work, iwork);
1465 detail::check_invalid_argument("trcon", info);
1466 return rcond;
1467}
1468
1470template <uni20::LapackReal Scalar>
1471bool trsyl(char trans_a, char trans_b, blas_int sign, blas_int m, blas_int n, Scalar* a, blas_int lda, Scalar* b,
1472 blas_int ldb, Scalar* c, blas_int ldc, Scalar& scale)
1473{
1474 blas_int const info = unchecked::trsyl(trans_a, trans_b, sign, m, n, a, lda, b, ldb, c, ldc, scale);
1475 return detail::check_sylvester("trsyl", info);
1476}
1477
1479template <uni20::LapackReal Scalar>
1480void gtsv(blas_int n, blas_int nrhs, Scalar* dl, Scalar* d, Scalar* du, Scalar* b, blas_int ldb)
1481{
1482 blas_int const info = unchecked::gtsv(n, nrhs, dl, d, du, b, ldb);
1483 detail::check_singular("gtsv", info);
1484}
1485
1487template <uni20::LapackReal Scalar>
1488void gttrf(blas_int n, Scalar* dl, Scalar* d, Scalar* du, Scalar* du2, blas_int* ipiv)
1489{
1490 blas_int const info = unchecked::gttrf(n, dl, d, du, du2, ipiv);
1491 detail::check_singular("gttrf", info);
1492}
1493
1495template <uni20::LapackReal Scalar>
1496void gttrs(char trans, blas_int n, blas_int nrhs, Scalar* dl, Scalar* d, Scalar* du, Scalar* du2, blas_int const* ipiv,
1497 Scalar* b, blas_int ldb)
1498{
1499 blas_int const info = unchecked::gttrs(trans, n, nrhs, dl, d, du, du2, ipiv, b, ldb);
1500 detail::check_invalid_argument("gttrs", info);
1501}
1502
1504template <uni20::LapackReal Scalar>
1505Scalar gtcon(char norm, blas_int n, Scalar* dl, Scalar* d, Scalar* du, Scalar* du2, blas_int const* ipiv,
1506 Scalar matrix_norm, Scalar* work, blas_int* iwork)
1507{
1508 Scalar rcond{};
1509 blas_int const info = unchecked::gtcon(norm, n, dl, d, du, du2, ipiv, matrix_norm, rcond, work, iwork);
1510 detail::check_invalid_argument("gtcon", info);
1511 return rcond;
1512}
1513
1515template <uni20::LapackReal Scalar>
1516void gtrfs(char trans, blas_int n, blas_int nrhs, Scalar* dl, Scalar* d, Scalar* du, Scalar* dlf, Scalar* df,
1517 Scalar* duf, Scalar* du2, blas_int const* ipiv, Scalar* b, blas_int ldb, Scalar* x, blas_int ldx,
1518 Scalar* forward_error, Scalar* backward_error, Scalar* work, blas_int* iwork)
1519{
1520 blas_int const info = unchecked::gtrfs(trans, n, nrhs, dl, d, du, dlf, df, duf, du2, ipiv, b, ldb, x, ldx,
1521 forward_error, backward_error, work, iwork);
1522 detail::check_invalid_argument("gtrfs", info);
1523}
1524
1526template <uni20::LapackReal Scalar>
1527bool gtsvx(char fact, char trans, blas_int n, blas_int nrhs, Scalar* dl, Scalar* d, Scalar* du, Scalar* dlf, Scalar* df,
1528 Scalar* duf, Scalar* du2, blas_int* ipiv, Scalar* b, blas_int ldb, Scalar* x, blas_int ldx, Scalar& rcond,
1529 Scalar* forward_error, Scalar* backward_error, Scalar* work, blas_int* iwork)
1530{
1531 blas_int const info = unchecked::gtsvx(fact, trans, n, nrhs, dl, d, du, dlf, df, duf, du2, ipiv, b, ldb, x, ldx,
1532 rcond, forward_error, backward_error, work, iwork);
1533 return detail::check_expert_solve("gtsvx", n, info);
1534}
1535
1537template <uni20::LapackReal Scalar> void ptsv(blas_int n, blas_int nrhs, Scalar* d, Scalar* e, Scalar* b, blas_int ldb)
1538{
1539 blas_int const info = unchecked::ptsv(n, nrhs, d, e, b, ldb);
1540 detail::check_positive_definite("ptsv", info);
1541}
1542
1544template <uni20::LapackReal Scalar> void pttrf(blas_int n, Scalar* d, Scalar* e)
1545{
1546 blas_int const info = unchecked::pttrf(n, d, e);
1547 detail::check_positive_definite("pttrf", info);
1548}
1549
1551template <uni20::LapackReal Scalar> void pttrs(blas_int n, blas_int nrhs, Scalar* d, Scalar* e, Scalar* b, blas_int ldb)
1552{
1553 blas_int const info = unchecked::pttrs(n, nrhs, d, e, b, ldb);
1554 detail::check_invalid_argument("pttrs", info);
1555 if (info > 0)
1556 {
1557 detail::raise_terminal_info("pttrs", "failed to solve the factored system", info);
1558 }
1559}
1560
1562template <uni20::LapackReal Scalar> Scalar ptcon(blas_int n, Scalar* d, Scalar* e, Scalar matrix_norm, Scalar* work)
1563{
1564 Scalar rcond{};
1565 blas_int const info = unchecked::ptcon(n, d, e, matrix_norm, rcond, work);
1566 detail::check_invalid_argument("ptcon", info);
1567 return rcond;
1568}
1569
1571template <uni20::LapackReal Scalar>
1572void ptrfs(blas_int n, blas_int nrhs, Scalar* d, Scalar* e, Scalar* df, Scalar* ef, Scalar* b, blas_int ldb, Scalar* x,
1573 blas_int ldx, Scalar* forward_error, Scalar* backward_error, Scalar* work)
1574{
1575 blas_int const info = unchecked::ptrfs(n, nrhs, d, e, df, ef, b, ldb, x, ldx, forward_error, backward_error, work);
1576 detail::check_invalid_argument("ptrfs", info);
1577}
1578
1580template <uni20::LapackReal Scalar>
1581bool ptsvx(char fact, blas_int n, blas_int nrhs, Scalar* d, Scalar* e, Scalar* df, Scalar* ef, Scalar* b, blas_int ldb,
1582 Scalar* x, blas_int ldx, Scalar& rcond, Scalar* forward_error, Scalar* backward_error, Scalar* work)
1583{
1584 blas_int const info =
1585 unchecked::ptsvx(fact, n, nrhs, d, e, df, ef, b, ldb, x, ldx, rcond, forward_error, backward_error, work);
1586 return detail::check_positive_definite_expert_solve("ptsvx", n, info);
1587}
1588
1590template <uni20::LapackReal Scalar> void sterf(blas_int n, Scalar* d, Scalar* e)
1591{
1592 blas_int const info = unchecked::sterf(n, d, e);
1593 detail::check_convergence("sterf", info);
1594}
1595
1597template <uni20::LapackReal Scalar>
1598void steqr(char compz, blas_int n, Scalar* d, Scalar* e, Scalar* z, blas_int ldz, Scalar* work)
1599{
1600 blas_int const info = unchecked::steqr(compz, n, d, e, z, ldz, work);
1601 detail::check_convergence("steqr", info);
1602}
1603
1605template <uni20::LapackReal Scalar>
1606void stevd(char jobz, blas_int n, Scalar* d, Scalar* e, Scalar* z, blas_int ldz, Scalar* work, blas_int lwork,
1607 blas_int* iwork, blas_int liwork)
1608{
1609 blas_int const info = unchecked::stevd(jobz, n, d, e, z, ldz, work, lwork, iwork, liwork);
1610 detail::check_convergence("stevd", info);
1611}
1612
1614template <uni20::LapackReal Scalar>
1615void stevr(char jobz, char range, blas_int n, Scalar* d, Scalar* e, Scalar vl, Scalar vu, blas_int il, blas_int iu,
1616 Scalar abstol, blas_int& selected_count, Scalar* w, Scalar* z, blas_int ldz, blas_int* isuppz, Scalar* work,
1617 blas_int lwork, blas_int* iwork, blas_int liwork)
1618{
1619 blas_int const info = unchecked::stevr(jobz, range, n, d, e, vl, vu, il, iu, abstol, selected_count, w, z, ldz,
1620 isuppz, work, lwork, iwork, liwork);
1621 detail::check_convergence("stevr", info);
1622}
1623
1624} // namespace uni20::lapack
Shared helpers for LAPACK backend wrappers.
MPLAPACK binary128 wrappers for real tridiagonal linear algebra.
Reference LAPACK wrappers for real tridiagonal linear algebra.
Concept for real scalar types (float, double, etc.).
Definition scalar_concepts.hpp:69
Concept for numeric scalar types (integer, real, or complex).
Definition scalar_concepts.hpp:81
Structured checked-LAPACK failure data.
Presentation adapter for structured checked-LAPACK failures.
MPLAPACK binary128 wrappers for real band linear algebra.
MPLAPACK binary128 wrappers for real and complex dense general linear systems.
MPLAPACK binary128 norm wrappers.
void raise(Exception &&exception, std::source_location where=std::source_location::current())
Raise a concrete exception through Uni20's configured error boundary.
Definition trace_impl.hpp:2184
Definition cli.cpp:6
void info(checked_format_string< Args... > format, Args &&... args)
Emit an informational display message.
Definition display.hpp:393
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 gbrfs(char trans, blas_int n, blas_int kl, blas_int ku, blas_int nrhs, uni20::float128 *ab, blas_int ldab, uni20::float128 *afb, blas_int ldafb, blas_int const *ipiv, uni20::float128 *b, blas_int ldb, uni20::float128 *x, blas_int ldx, uni20::float128 *forward_error, uni20::float128 *backward_error, uni20::float128 *work, blas_int *iwork)
Definition mplapack/band.hpp:80
float lansy(char norm, char uplo, blas_int n, float *a, blas_int lda, float *work)
Definition reference/norms.hpp:90
blas_int pbtrs(char uplo, blas_int n, blas_int kd, blas_int nrhs, uni20::float128 *ab, blas_int ldab, uni20::float128 *b, blas_int ldb)
Definition mplapack/band.hpp:161
blas_int 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 gtsv(blas_int n, blas_int nrhs, uni20::float128 *dl, uni20::float128 *d, uni20::float128 *du, uni20::float128 *b, blas_int ldb)
Definition backend/lapack/mplapack/tridiagonal.hpp:27
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 gbtrs(char trans, blas_int n, blas_int kl, blas_int ku, blas_int nrhs, uni20::float128 *ab, blas_int ldab, blas_int const *ipiv, uni20::float128 *b, blas_int ldb)
Definition mplapack/band.hpp:53
blas_int 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 pbrfs(char uplo, blas_int n, blas_int kd, blas_int nrhs, uni20::float128 *ab, blas_int ldab, uni20::float128 *afb, blas_int ldafb, uni20::float128 *b, blas_int ldb, uni20::float128 *x, blas_int ldx, uni20::float128 *forward_error, uni20::float128 *backward_error, uni20::float128 *work, blas_int *iwork)
Definition mplapack/band.hpp:183
blas_int 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
float lange(char norm, blas_int m, blas_int n, float *a, blas_int lda, float *work)
Definition reference/norms.hpp:65
blas_int gtrfs(char trans, blas_int n, blas_int nrhs, uni20::float128 *dl, uni20::float128 *d, uni20::float128 *du, uni20::float128 *dlf, uni20::float128 *df, uni20::float128 *duf, uni20::float128 *du2, 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 backend/lapack/mplapack/tridiagonal.hpp:73
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 steqr(char compz, blas_int n, uni20::float128 *d, uni20::float128 *e, uni20::float128 *z, blas_int ldz, uni20::float128 *work)
Definition backend/lapack/mplapack/tridiagonal.hpp:181
blas_int pbsvx(char fact, char uplo, blas_int n, blas_int kd, blas_int nrhs, uni20::float128 *ab, blas_int ldab, uni20::float128 *afb, blas_int ldafb, char &equed, uni20::float128 *scale, uni20::float128 *b, blas_int ldb, uni20::float128 *x, blas_int ldx, uni20::float128 &rcond, uni20::float128 *forward_error, uni20::float128 *backward_error, uni20::float128 *work, blas_int *iwork)
Definition mplapack/band.hpp:198
blas_int 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 stevd(char jobz, blas_int n, uni20::float128 *d, uni20::float128 *e, uni20::float128 *z, blas_int ldz, uni20::float128 *work, blas_int lwork, blas_int *iwork, blas_int liwork)
Definition backend/lapack/mplapack/tridiagonal.hpp:190
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 ptrfs(blas_int n, blas_int nrhs, uni20::float128 *d, uni20::float128 *e, uni20::float128 *df, uni20::float128 *ef, uni20::float128 *b, blas_int ldb, uni20::float128 *x, blas_int ldx, uni20::float128 *forward_error, uni20::float128 *backward_error, uni20::float128 *work)
Definition backend/lapack/mplapack/tridiagonal.hpp:147
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 gtsvx(char fact, char trans, blas_int n, blas_int nrhs, uni20::float128 *dl, uni20::float128 *d, uni20::float128 *du, uni20::float128 *dlf, uni20::float128 *df, uni20::float128 *duf, uni20::float128 *du2, 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 *iwork)
Definition backend/lapack/mplapack/tridiagonal.hpp:91
blas_int stevr(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, 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 backend/lapack/mplapack/tridiagonal.hpp:204
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 ptsv(blas_int n, blas_int nrhs, uni20::float128 *d, uni20::float128 *e, uni20::float128 *b, blas_int ldb)
Definition backend/lapack/mplapack/tridiagonal.hpp:110
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 gbcon(char norm, blas_int n, blas_int kl, blas_int ku, uni20::float128 *ab, blas_int ldab, blas_int const *ipiv, uni20::float128 anorm, uni20::float128 &rcond, uni20::float128 *work, blas_int *iwork)
Definition mplapack/band.hpp:66
blas_int 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 ptcon(blas_int n, uni20::float128 *d, uni20::float128 *e, uni20::float128 matrix_norm, uni20::float128 &rcond, uni20::float128 *work)
Definition backend/lapack/mplapack/tridiagonal.hpp:138
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 gbequ(bool power_of_two, blas_int m, blas_int n, blas_int kl, blas_int ku, uni20::float128 *ab, blas_int ldab, uni20::float128 *row_scale, uni20::float128 *column_scale, uni20::float128 &row_condition, uni20::float128 &column_condition, uni20::float128 &max_abs)
Definition mplapack/band.hpp:119
blas_int 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 gttrs(char trans, blas_int n, blas_int nrhs, uni20::float128 *dl, uni20::float128 *d, uni20::float128 *du, uni20::float128 *du2, blas_int const *ipiv, uni20::float128 *b, blas_int ldb)
Definition backend/lapack/mplapack/tridiagonal.hpp:48
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 pbsv(char uplo, blas_int n, blas_int kd, blas_int nrhs, uni20::float128 *ab, blas_int ldab, uni20::float128 *b, blas_int ldb)
Definition mplapack/band.hpp:142
blas_int 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 pbtrf(char uplo, blas_int n, blas_int kd, uni20::float128 *ab, blas_int ldab)
Definition mplapack/band.hpp:152
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 gtcon(char norm, blas_int n, uni20::float128 *dl, uni20::float128 *d, uni20::float128 *du, uni20::float128 *du2, blas_int const *ipiv, uni20::float128 matrix_norm, uni20::float128 &rcond, uni20::float128 *work, blas_int *iwork)
Definition backend/lapack/mplapack/tridiagonal.hpp:60
blas_int gbsv(blas_int n, blas_int kl, blas_int ku, blas_int nrhs, uni20::float128 *ab, blas_int ldab, blas_int *ipiv, uni20::float128 *b, blas_int ldb)
Definition mplapack/band.hpp:27
blas_int 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 ptsvx(char fact, blas_int n, blas_int nrhs, uni20::float128 *d, uni20::float128 *e, uni20::float128 *df, uni20::float128 *ef, 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)
Definition backend/lapack/mplapack/tridiagonal.hpp:159
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
float lanhe(char norm, char uplo, blas_int n, uni20::complex< float > *a, blas_int lda, float *work)
Definition reference/norms.hpp:102
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 gttrf(blas_int n, uni20::float128 *dl, uni20::float128 *d, uni20::float128 *du, uni20::float128 *du2, blas_int *ipiv)
Definition backend/lapack/mplapack/tridiagonal.hpp:37
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 pttrf(blas_int n, uni20::float128 *d, uni20::float128 *e)
Definition backend/lapack/mplapack/tridiagonal.hpp:120
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
float langb(char norm, blas_int n, blas_int kl, blas_int ku, float *ab, blas_int ldab, float *work)
Definition reference/norms.hpp:143
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
float lantr(char norm, char uplo, char diag, blas_int m, blas_int n, float *a, blas_int lda, float *work)
Definition reference/norms.hpp:115
blas_int sterf(blas_int n, uni20::float128 *d, uni20::float128 *e)
Definition backend/lapack/mplapack/tridiagonal.hpp:173
blas_int pbcon(char uplo, blas_int n, blas_int kd, uni20::float128 *ab, blas_int ldab, uni20::float128 anorm, uni20::float128 &rcond, uni20::float128 *work, blas_int *iwork)
Definition mplapack/band.hpp:171
blas_int 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 gbtrf(blas_int m, blas_int n, blas_int kl, blas_int ku, uni20::float128 *ab, blas_int ldab, blas_int *ipiv)
Definition mplapack/band.hpp:40
blas_int 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 gbsvx(char fact, char trans, blas_int n, blas_int kl, blas_int ku, blas_int nrhs, uni20::float128 *ab, blas_int ldab, uni20::float128 *afb, blas_int ldafb, blas_int *ipiv, char &equed, uni20::float128 *row_scale, uni20::float128 *column_scale, uni20::float128 *b, blas_int ldb, uni20::float128 *x, blas_int ldx, uni20::float128 &rcond, uni20::float128 *forward_error, uni20::float128 *backward_error, uni20::float128 *work, blas_int *iwork)
Definition mplapack/band.hpp:98
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 pttrs(blas_int n, blas_int nrhs, uni20::float128 *d, uni20::float128 *e, uni20::float128 *b, blas_int ldb)
Definition backend/lapack/mplapack/tridiagonal.hpp:128
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 backend/lapack/common.hpp:12
void getrf(blas_int m, blas_int n, Scalar *a, blas_int lda, blas_int *ipiv)
Compute a real dense general LU factorization through the configured LAPACK backend.
Definition lapack.hpp:402
void geqp3(blas_int m, blas_int n, Scalar *a, blas_int lda, blas_int *jpvt, Scalar *tau, Scalar *work, blas_int lwork)
Compute a real dense pivoted QR factorization.
Definition lapack.hpp:647
void sygv(blas_int itype, char jobz, char uplo, blas_int n, Scalar *a, blas_int lda, Scalar *b, blas_int ldb, Scalar *w, Scalar *work, blas_int lwork)
Compute eigenvalues and optionally eigenvectors of a real generalized symmetric-definite problem.
Definition lapack.hpp:692
void gees(char jobvs, char sort, blas_int n, Scalar *a, blas_int lda, blas_int &selected_dimension, Scalar *wr, Scalar *wi, Scalar *vs, blas_int ldvs, Scalar *work, blas_int lwork, blas_int *bwork)
Compute the real Schur form of a real nonsymmetric matrix.
Definition lapack.hpp:846
Scalar lange(char norm, blas_int m, blas_int n, Scalar *a, blas_int lda, Scalar *work)
Compute a dense real matrix norm through the configured LAPACK backend.
Definition lapack.hpp:185
void gbsv(blas_int n, blas_int kl, blas_int ku, blas_int nrhs, Scalar *ab, blas_int ldab, blas_int *ipiv, Scalar *b, blas_int ldb)
Solve a real general-band linear system through the configured LAPACK backend.
Definition lapack.hpp:235
void syevd(char jobz, char uplo, blas_int n, Scalar *a, blas_int lda, Scalar *w, Scalar *work, blas_int lwork, blas_int *iwork, blas_int liwork)
Compute eigenvalues and optionally eigenvectors of a real symmetric matrix by divide and conquer.
Definition lapack.hpp:672
void ptsv(blas_int n, blas_int nrhs, Scalar *d, Scalar *e, Scalar *b, blas_int ldb)
Solve a real symmetric positive-definite tridiagonal linear system.
Definition lapack.hpp:1537
void ormql(char side, char trans, blas_int m, blas_int n, blas_int k, Scalar *a, blas_int lda, Scalar *tau, Scalar *c, blas_int ldc, Scalar *work, blas_int lwork)
Multiply by the implicit real Q factor from a QL factorization.
Definition lapack.hpp:611
void bdsqr(char uplo, blas_int n, blas_int ncvt, blas_int nru, blas_int ncc, Scalar *d, Scalar *e, Scalar *vt, blas_int ldvt, Scalar *u, blas_int ldu, Scalar *c, blas_int ldc, Scalar *work)
Compute singular values of a real bidiagonal matrix.
Definition lapack.hpp:1247
void geev(char jobvl, char jobvr, blas_int n, Scalar *a, blas_int lda, Scalar *wr, Scalar *wi, Scalar *vl, blas_int ldvl, Scalar *vr, blas_int ldvr, Scalar *work, blas_int lwork)
Compute eigenvalues and optionally eigenvectors of a real nonsymmetric matrix.
Definition lapack.hpp:790
void ggbak(char job, char side, blas_int n, blas_int first, blas_int last, Scalar *lscale, Scalar *rscale, blas_int vector_count, Scalar *vectors, blas_int leading_dimension)
Back-transform generalized nonsymmetric eigenvectors after pencil balancing.
Definition lapack.hpp:1004
void gbequ(bool power_of_two, blas_int m, blas_int n, blas_int kl, blas_int ku, Scalar *ab, blas_int ldab, Scalar *row_scale, Scalar *column_scale, Scalar &row_condition, Scalar &column_condition, Scalar &max_abs)
Compute real general-band row/column equilibration factors.
Definition lapack.hpp:296
void potrs(char uplo, blas_int n, blas_int nrhs, Scalar *a, blas_int lda, Scalar *b, blas_int ldb)
Solve using an existing real dense Cholesky factorization.
Definition lapack.hpp:1316
void bdsdc(char uplo, char compq, blas_int n, Scalar *d, Scalar *e, Scalar *u, blas_int ldu, Scalar *vt, blas_int ldvt, Scalar *q, blas_int *iq, Scalar *work, blas_int *iwork)
Compute the singular value decomposition of a real bidiagonal matrix.
Definition lapack.hpp:1256
Scalar langb(char norm, blas_int n, blas_int kl, blas_int ku, Scalar *ab, blas_int ldab, Scalar *work)
Compute a real general-band matrix norm through the configured LAPACK backend.
Definition lapack.hpp:228
bool trsyl(char trans_a, char trans_b, blas_int sign, blas_int m, blas_int n, Scalar *a, blas_int lda, Scalar *b, blas_int ldb, Scalar *c, blas_int ldc, Scalar &scale)
Solve a dense real Sylvester equation.
Definition lapack.hpp:1471
void sytrf(char uplo, blas_int n, Scalar *a, blas_int lda, blas_int *ipiv, Scalar *work, blas_int lwork)
Compute a dense real symmetric-indefinite Bunch-Kaufman factorization.
Definition lapack.hpp:1377
void gelsy(blas_int m, blas_int n, blas_int nrhs, Scalar *a, blas_int lda, Scalar *b, blas_int ldb, blas_int *jpvt, Scalar rcond, blas_int &rank, Scalar *work, blas_int lwork)
Solve a real dense general least-squares problem by complete orthogonal factorization.
Definition lapack.hpp:516
void gghrd(char compq, char compz, blas_int n, blas_int first, blas_int last, Scalar *a, blas_int lda, Scalar *b, blas_int ldb, Scalar *q, blas_int ldq, Scalar *z, blas_int ldz)
Reduce a real matrix pencil to generalized Hessenberg form.
Definition lapack.hpp:1037
void poequ(blas_int n, Scalar *a, blas_int lda, Scalar *scale, Scalar &scale_condition, Scalar &max_abs)
Compute real dense SPD equilibration factors.
Definition lapack.hpp:1355
void sygvx(blas_int itype, char jobz, char range, char uplo, blas_int n, Scalar *a, blas_int lda, Scalar *b, blas_int ldb, Scalar vl, Scalar vu, blas_int il, blas_int iu, Scalar abstol, blas_int &selected_count, Scalar *w, Scalar *z, blas_int ldz, Scalar *work, blas_int lwork, blas_int *iwork, blas_int *ifail)
Compute selected eigenvalues and optionally eigenvectors of a real generalized symmetric-definite pro...
Definition lapack.hpp:712
void gttrf(blas_int n, Scalar *dl, Scalar *d, Scalar *du, Scalar *du2, blas_int *ipiv)
Compute a real tridiagonal LU factorization through the configured LAPACK backend.
Definition lapack.hpp:1488
void pbsv(char uplo, blas_int n, blas_int kd, blas_int nrhs, Scalar *ab, blas_int ldab, Scalar *b, blas_int ldb)
Solve a real symmetric positive-definite band linear system.
Definition lapack.hpp:306
void bdsvdx(char uplo, char jobz, char range, blas_int n, Scalar *d, Scalar *e, Scalar vl, Scalar vu, blas_int il, blas_int iu, blas_int &selected_count, Scalar *singular_values, Scalar *z, blas_int ldz, Scalar *work, blas_int *iwork)
Compute selected singular values/vectors of a real bidiagonal matrix.
Definition lapack.hpp:1269
void orgqr(blas_int m, blas_int n, blas_int k, Scalar *a, blas_int lda, Scalar *tau, Scalar *work, blas_int lwork)
Generate an explicit orthogonal or unitary Q factor from a QR factorization.
Definition lapack.hpp:561
void ormrq(char side, char trans, blas_int m, blas_int n, blas_int k, Scalar *a, blas_int lda, Scalar *tau, Scalar *c, blas_int ldc, Scalar *work, blas_int lwork)
Multiply by the implicit real Q factor from an RQ factorization.
Definition lapack.hpp:620
bool gesvx(char fact, char trans, blas_int n, blas_int nrhs, Scalar *a, blas_int lda, Scalar *af, blas_int ldaf, blas_int *ipiv, char &equed, Scalar *row_scale, Scalar *column_scale, Scalar *b, blas_int ldb, Scalar *x, blas_int ldx, Scalar &rcond, Scalar *forward_error, Scalar *backward_error, Scalar *work, blas_int *iwork)
Solve a real dense general linear system with LAPACK expert-driver diagnostics.
Definition lapack.hpp:382
bool pbsvx(char fact, char uplo, blas_int n, blas_int kd, blas_int nrhs, Scalar *ab, blas_int ldab, Scalar *afb, blas_int ldafb, char &equed, Scalar *scale, Scalar *b, blas_int ldb, Scalar *x, blas_int ldx, Scalar &rcond, Scalar *forward_error, Scalar *backward_error, Scalar *work, blas_int *iwork)
Solve a real symmetric positive-definite band system with LAPACK expert-driver diagnostics.
Definition lapack.hpp:354
void heev(char jobz, char uplo, blas_int n, uni20::detail::standard_complex< Real > *a, blas_int lda, Real *w, uni20::detail::standard_complex< Real > *work, blas_int lwork, Real *rwork)
Compute eigenvalues and optionally eigenvectors of a complex Hermitian matrix.
Definition lapack.hpp:723
void gesvdx(char jobu, char jobvt, char range, blas_int m, blas_int n, Scalar *a, blas_int lda, Scalar vl, Scalar vu, blas_int il, blas_int iu, blas_int &selected_count, Scalar *singular_values, Scalar *u, blas_int ldu, Scalar *vt, blas_int ldvt, Scalar *work, blas_int lwork, blas_int *iwork)
Compute selected singular values/vectors of a real dense matrix.
Definition lapack.hpp:1224
void sytri(char uplo, blas_int n, Scalar *a, blas_int lda, blas_int const *ipiv, Scalar *work)
Invert a dense real symmetric-indefinite matrix from its factorization.
Definition lapack.hpp:1393
Scalar lantr(char norm, char uplo, char diag, blas_int m, blas_int n, Scalar *a, blas_int lda, Scalar *work)
Compute a dense real triangular or trapezoidal matrix norm through the configured LAPACK backend.
Definition lapack.hpp:213
void geqrf(blas_int m, blas_int n, Scalar *a, blas_int lda, Scalar *tau, Scalar *work, blas_int lwork)
Compute a real or complex dense QR factorization through the configured LAPACK backend.
Definition lapack.hpp:529
void ormhr(char side, char trans, blas_int m, blas_int n, blas_int first, blas_int last, Scalar *a, blas_int lda, Scalar const *tau, Scalar *c, blas_int ldc, Scalar *work, blas_int lwork)
Multiply by an implicit real orthogonal factor from Hessenberg reduction.
Definition lapack.hpp:1159
void porfs(char uplo, blas_int n, blas_int nrhs, Scalar *a, blas_int lda, Scalar *factors, blas_int factor_lda, Scalar *b, blas_int ldb, Scalar *x, blas_int ldx, Scalar *forward_error, Scalar *backward_error, Scalar *work, blas_int *iwork)
Refine a real dense SPD linear-system solve and return LAPACK diagnostics.
Definition lapack.hpp:1324
void ggevx(char balanc, char jobvl, char jobvr, char sense, blas_int n, Scalar *a, blas_int lda, Scalar *b, blas_int ldb, Scalar *alphar, Scalar *alphai, Scalar *beta, Scalar *vl, blas_int ldvl, Scalar *vr, blas_int ldvr, blas_int &ilo, blas_int &ihi, Scalar *lscale, Scalar *rscale, Scalar &abnrm, Scalar &bbnrm, Scalar *rconde, Scalar *rcondv, Scalar *work, blas_int lwork, blas_int *iwork, blas_int *bwork)
Compute generalized real nonsymmetric eigenpairs with balancing and condition estimates.
Definition lapack.hpp:978
void tgexc(bool wantq, bool wantz, blas_int n, Scalar *a, blas_int lda, Scalar *b, blas_int ldb, Scalar *q, blas_int ldq, Scalar *z, blas_int ldz, blas_int &first, blas_int &last, Scalar *work, blas_int lwork)
Reorder adjacent blocks in a generalized real Schur form.
Definition lapack.hpp:1065
void potri(char uplo, blas_int n, Scalar *a, blas_int lda)
Invert a real dense matrix from an existing Cholesky factorization.
Definition lapack.hpp:1304
void tgsna(char job, char howmny, blas_int *select, blas_int n, Scalar *a, blas_int lda, Scalar *b, blas_int ldb, Scalar *vl, blas_int ldvl, Scalar *vr, blas_int ldvr, Scalar *reciprocal_eigenvalue_condition_numbers, Scalar *reciprocal_eigenvector_condition_numbers, blas_int mm, blas_int &computed_estimates, Scalar *work, blas_int lwork, blas_int *iwork)
Estimate reciprocal condition numbers for generalized real Schur eigenpairs.
Definition lapack.hpp:1116
void orgtr(char uplo, blas_int n, Scalar *a, blas_int lda, Scalar const *tau, Scalar *work, blas_int lwork)
Generate an explicit real orthogonal factor from symmetric tridiagonal reduction.
Definition lapack.hpp:1151
void trtrs(char uplo, char trans, char diag, blas_int n, blas_int nrhs, Scalar *a, blas_int lda, Scalar *b, blas_int ldb)
Solve a dense real triangular system.
Definition lapack.hpp:1434
void syevr(char jobz, char range, char uplo, blas_int n, Scalar *a, blas_int lda, Scalar vl, Scalar vu, blas_int il, blas_int iu, Scalar abstol, blas_int &selected_count, Scalar *w, Scalar *z, blas_int ldz, blas_int *isuppz, Scalar *work, blas_int lwork, blas_int *iwork, blas_int liwork)
Compute selected eigenvalues and optionally eigenvectors of a real symmetric matrix.
Definition lapack.hpp:681
void gerqf(blas_int m, blas_int n, Scalar *a, blas_int lda, Scalar *tau, Scalar *work, blas_int lwork)
Compute a real dense RQ factorization through the configured LAPACK backend.
Definition lapack.hpp:553
void syev(char jobz, char uplo, blas_int n, Scalar *a, blas_int lda, Scalar *w, Scalar *work, blas_int lwork)
Compute eigenvalues and optionally eigenvectors of a real symmetric matrix.
Definition lapack.hpp:664
void geqlf(blas_int m, blas_int n, Scalar *a, blas_int lda, Scalar *tau, Scalar *work, blas_int lwork)
Compute a real dense QL factorization through the configured LAPACK backend.
Definition lapack.hpp:545
void gerfs(char trans, blas_int n, blas_int nrhs, Scalar *a, blas_int lda, Scalar *factors, blas_int factor_lda, blas_int const *ipiv, Scalar *b, blas_int ldb, Scalar *x, blas_int ldx, Scalar *forward_error, Scalar *backward_error, Scalar *work, blas_int *iwork)
Refine a real dense general linear-system solve and return LAPACK diagnostics.
Definition lapack.hpp:436
void gelsd(blas_int m, blas_int n, blas_int nrhs, Scalar *a, blas_int lda, Scalar *b, blas_int ldb, Scalar *s, Scalar rcond, blas_int &rank, Scalar *work, blas_int lwork, blas_int *iwork)
Solve a real dense general least-squares problem by divide-and-conquer SVD.
Definition lapack.hpp:507
void gttrs(char trans, blas_int n, blas_int nrhs, Scalar *dl, Scalar *d, Scalar *du, Scalar *du2, blas_int const *ipiv, Scalar *b, blas_int ldb)
Solve using an existing real tridiagonal LU factorization.
Definition lapack.hpp:1496
Scalar gtcon(char norm, blas_int n, Scalar *dl, Scalar *d, Scalar *du, Scalar *du2, blas_int const *ipiv, Scalar matrix_norm, Scalar *work, blas_int *iwork)
Estimate a real tridiagonal reciprocal condition number.
Definition lapack.hpp:1505
void hgeqz(char job, char compq, char compz, blas_int n, blas_int first, blas_int last, Scalar *h, blas_int ldh, Scalar *t, blas_int ldt, Scalar *alphar, Scalar *alphai, Scalar *beta, Scalar *q, blas_int ldq, Scalar *z, blas_int ldz, Scalar *work, blas_int lwork)
Compute a generalized Schur form from a real Hessenberg-triangular pencil.
Definition lapack.hpp:1050
void gebal(char job, blas_int n, Scalar *a, blas_int lda, blas_int &first, blas_int &last, Scalar *scale)
Balance a real nonsymmetric matrix before eigenanalysis.
Definition lapack.hpp:810
void stevr(char jobz, char range, blas_int n, Scalar *d, Scalar *e, Scalar vl, Scalar vu, blas_int il, blas_int iu, Scalar abstol, blas_int &selected_count, Scalar *w, Scalar *z, blas_int ldz, blas_int *isuppz, Scalar *work, blas_int lwork, blas_int *iwork, blas_int liwork)
Compute selected eigenvalues/eigenvectors of a real symmetric tridiagonal matrix.
Definition lapack.hpp:1615
void gebak(char job, char side, blas_int n, blas_int first, blas_int last, Scalar *scale, blas_int vector_count, Scalar *vectors, blas_int leading_dimension)
Back-transform real nonsymmetric eigenvectors after balancing.
Definition lapack.hpp:822
void orgrq(blas_int m, blas_int n, blas_int k, Scalar *a, blas_int lda, Scalar *tau, Scalar *work, blas_int lwork)
Generate an explicit real Q factor from an RQ factorization.
Definition lapack.hpp:585
Scalar gbcon(char norm, blas_int n, blas_int kl, blas_int ku, Scalar *ab, blas_int ldab, blas_int const *ipiv, Scalar anorm, Scalar *work, blas_int *iwork)
Estimate a real general-band reciprocal condition number.
Definition lapack.hpp:261
void gels(char trans, blas_int m, blas_int n, blas_int nrhs, Scalar *a, blas_int lda, Scalar *b, blas_int ldb, Scalar *work, blas_int lwork)
Solve a real dense general least-squares problem through the configured LAPACK backend.
Definition lapack.hpp:485
void orglq(blas_int m, blas_int n, blas_int k, Scalar *a, blas_int lda, Scalar *tau, Scalar *work, blas_int lwork)
Generate an explicit orthogonal or unitary Q factor from an LQ factorization.
Definition lapack.hpp:569
void gbtrf(blas_int m, blas_int n, blas_int kl, blas_int ku, Scalar *ab, blas_int ldab, blas_int *ipiv)
Compute a real general-band LU factorization through the configured LAPACK backend.
Definition lapack.hpp:244
void gelss(blas_int m, blas_int n, blas_int nrhs, Scalar *a, blas_int lda, Scalar *b, blas_int ldb, Scalar *s, Scalar rcond, blas_int &rank, Scalar *work, blas_int lwork)
Solve a real dense general least-squares problem by SVD.
Definition lapack.hpp:498
void gbrfs(char trans, blas_int n, blas_int kl, blas_int ku, blas_int nrhs, Scalar *ab, blas_int ldab, Scalar *afb, blas_int ldafb, blas_int const *ipiv, Scalar *b, blas_int ldb, Scalar *x, blas_int ldx, Scalar *forward_error, Scalar *backward_error, Scalar *work, blas_int *iwork)
Refine a real general-band linear-system solve and return LAPACK diagnostics.
Definition lapack.hpp:272
bool pstrf(char uplo, blas_int n, Scalar *a, blas_int lda, blas_int *pivots, blas_int &rank, Scalar tolerance, Scalar *work)
Compute a real dense pivoted Cholesky factorization.
Definition lapack.hpp:1291
void trsna(char job, char howmny, blas_int *select, blas_int n, Scalar *t, blas_int ldt, Scalar *vl, blas_int ldvl, Scalar *vr, blas_int ldvr, Scalar *reciprocal_eigenvalue_condition_numbers, Scalar *reciprocal_eigenvector_condition_numbers, blas_int mm, blas_int &computed_estimates, Scalar *work, blas_int ldwork, blas_int *iwork)
Estimate reciprocal condition numbers for real Schur eigenpairs.
Definition lapack.hpp:950
Scalar lansy(char norm, char uplo, blas_int n, Scalar *a, blas_int lda, Scalar *work)
Compute a dense real symmetric matrix norm through the configured LAPACK backend.
Definition lapack.hpp:199
void gehrd(blas_int n, blas_int first, blas_int last, Scalar *a, blas_int lda, Scalar *tau, Scalar *work, blas_int lwork)
Reduce a real dense general matrix to upper Hessenberg form.
Definition lapack.hpp:638
void trrfs(char uplo, char trans, char diag, blas_int n, blas_int nrhs, Scalar *a, blas_int lda, Scalar *b, blas_int ldb, Scalar *x, blas_int ldx, Scalar *forward_error, Scalar *backward_error, Scalar *work, blas_int *iwork)
Refine a dense real triangular solve and return LAPACK diagnostics.
Definition lapack.hpp:1443
bool gbsvx(char fact, char trans, blas_int n, blas_int kl, blas_int ku, blas_int nrhs, Scalar *ab, blas_int ldab, Scalar *afb, blas_int ldafb, blas_int *ipiv, char &equed, Scalar *row_scale, Scalar *column_scale, Scalar *b, blas_int ldb, Scalar *x, blas_int ldx, Scalar &rcond, Scalar *forward_error, Scalar *backward_error, Scalar *work, blas_int *iwork)
Solve a real general-band linear system with LAPACK expert-driver diagnostics.
Definition lapack.hpp:283
void gtrfs(char trans, blas_int n, blas_int nrhs, Scalar *dl, Scalar *d, Scalar *du, Scalar *dlf, Scalar *df, Scalar *duf, Scalar *du2, blas_int const *ipiv, Scalar *b, blas_int ldb, Scalar *x, blas_int ldx, Scalar *forward_error, Scalar *backward_error, Scalar *work, blas_int *iwork)
Refine a real tridiagonal linear-system solve and return LAPACK diagnostics.
Definition lapack.hpp:1516
void sygvd(blas_int itype, char jobz, char uplo, blas_int n, Scalar *a, blas_int lda, Scalar *b, blas_int ldb, Scalar *w, Scalar *work, blas_int lwork, blas_int *iwork, blas_int liwork)
Compute eigenvalues and optionally eigenvectors of a real generalized symmetric-definite problem by d...
Definition lapack.hpp:703
void geevx(char balanc, char jobvl, char jobvr, char sense, blas_int n, Scalar *a, blas_int lda, Scalar *wr, Scalar *wi, Scalar *vl, blas_int ldvl, Scalar *vr, blas_int ldvr, blas_int &ilo, blas_int &ihi, Scalar *scale, Scalar &abnrm, Scalar *rconde, Scalar *rcondv, Scalar *work, blas_int lwork, blas_int *iwork)
Compute real nonsymmetric eigenpairs with balancing and condition estimates.
Definition lapack.hpp:799
Scalar pbcon(char uplo, blas_int n, blas_int kd, Scalar *ab, blas_int ldab, Scalar anorm, Scalar *work, blas_int *iwork)
Estimate a real symmetric positive-definite band reciprocal condition number.
Definition lapack.hpp:333
void trtri(char uplo, char diag, blas_int n, Scalar *a, blas_int lda)
Invert a dense real triangular matrix.
Definition lapack.hpp:1453
void gbtrs(char trans, blas_int n, blas_int kl, blas_int ku, blas_int nrhs, Scalar *ab, blas_int ldab, blas_int const *ipiv, Scalar *b, blas_int ldb)
Solve using an existing real general-band LU factorization.
Definition lapack.hpp:252
void gesv(blas_int n, blas_int nrhs, Scalar *a, blas_int lda, blas_int *ipiv, Scalar *b, blas_int ldb)
Solve a real dense general linear system through the configured LAPACK backend.
Definition lapack.hpp:365
Real lanhe(char norm, char uplo, blas_int n, uni20::detail::standard_complex< Real > *a, blas_int lda, Real *work)
Compute a dense complex Hermitian matrix norm through the configured LAPACK backend.
Definition lapack.hpp:206
void orgql(blas_int m, blas_int n, blas_int k, Scalar *a, blas_int lda, Scalar *tau, Scalar *work, blas_int lwork)
Generate an explicit real Q factor from a QL factorization.
Definition lapack.hpp:577
void trsen(char job, char compq, blas_int *select, blas_int n, Scalar *t, blas_int ldt, Scalar *q, blas_int ldq, Scalar *wr, Scalar *wi, blas_int &selected_dimension, Scalar &reciprocal_eigenvalue_cluster_condition, Scalar &reciprocal_invariant_subspace_condition, Scalar *work, blas_int lwork, blas_int *iwork, blas_int liwork)
Reorder selected blocks in a real Schur form and estimate invariant subspace conditioning.
Definition lapack.hpp:915
void gebrd(blas_int m, blas_int n, Scalar *a, blas_int lda, Scalar *d, Scalar *e, Scalar *tauq, Scalar *taup, Scalar *work, blas_int lwork)
Reduce a real dense general matrix to bidiagonal form.
Definition lapack.hpp:629
void getri(blas_int n, Scalar *a, blas_int lda, blas_int *ipiv, Scalar *work, blas_int lwork)
Invert a real dense general matrix from an existing LU factorization.
Definition lapack.hpp:447
void ormlq(char side, char trans, blas_int m, blas_int n, blas_int k, Scalar *a, blas_int lda, Scalar *tau, Scalar *c, blas_int ldc, Scalar *work, blas_int lwork)
Multiply by the implicit real Q factor from an LQ factorization.
Definition lapack.hpp:602
void orgbr(char vect, blas_int m, blas_int n, blas_int k, Scalar *a, blas_int lda, Scalar *tau, Scalar *work, blas_int lwork)
Generate an explicit real orthogonal factor from bidiagonal reduction.
Definition lapack.hpp:1133
void ptrfs(blas_int n, blas_int nrhs, Scalar *d, Scalar *e, Scalar *df, Scalar *ef, Scalar *b, blas_int ldb, Scalar *x, blas_int ldx, Scalar *forward_error, Scalar *backward_error, Scalar *work)
Refine a real symmetric positive-definite tridiagonal solve and return LAPACK diagnostics.
Definition lapack.hpp:1572
void trevc(char side, char howmny, blas_int *select, blas_int n, Scalar *t, blas_int ldt, Scalar *vl, blas_int ldvl, Scalar *vr, blas_int ldvr, blas_int mm, blas_int &computed_vectors, Scalar *work)
Compute eigenvectors of a real upper quasi-triangular Schur form.
Definition lapack.hpp:936
void gtsv(blas_int n, blas_int nrhs, Scalar *dl, Scalar *d, Scalar *du, Scalar *b, blas_int ldb)
Solve a real tridiagonal linear system through the configured LAPACK backend.
Definition lapack.hpp:1480
void orghr(blas_int n, blas_int first, blas_int last, Scalar *a, blas_int lda, Scalar const *tau, Scalar *work, blas_int lwork)
Generate an explicit real orthogonal factor from Hessenberg reduction.
Definition lapack.hpp:1142
void heevr(char jobz, char range, char uplo, blas_int n, uni20::detail::standard_complex< Real > *a, blas_int lda, Real vl, Real vu, blas_int il, blas_int iu, Real abstol, blas_int &selected_count, Real *w, uni20::detail::standard_complex< Real > *z, blas_int ldz, blas_int *isuppz, uni20::detail::standard_complex< Real > *work, blas_int lwork, Real *rwork, blas_int lrwork, blas_int *iwork, blas_int liwork)
Compute selected eigenvalues and optionally eigenvectors of a complex Hermitian matrix.
Definition lapack.hpp:742
bool posvx(char fact, char uplo, blas_int n, blas_int nrhs, Scalar *a, blas_int lda, Scalar *af, blas_int ldaf, char &equed, Scalar *scale, Scalar *b, blas_int ldb, Scalar *x, blas_int ldx, Scalar &rcond, Scalar *forward_error, Scalar *backward_error, Scalar *work, blas_int *iwork)
Solve a real dense SPD linear system with LAPACK expert-driver diagnostics.
Definition lapack.hpp:1335
void sytrs(char uplo, blas_int n, blas_int nrhs, Scalar *a, blas_int lda, blas_int const *ipiv, Scalar *b, blas_int ldb)
Solve using an existing dense real symmetric-indefinite factorization.
Definition lapack.hpp:1385
void getrs(char trans, blas_int n, blas_int nrhs, Scalar *a, blas_int lda, blas_int const *ipiv, Scalar *b, blas_int ldb)
Solve using an existing real dense general LU factorization.
Definition lapack.hpp:418
void hegvd(blas_int itype, char jobz, char uplo, blas_int n, uni20::detail::standard_complex< Real > *a, blas_int lda, uni20::detail::standard_complex< Real > *b, blas_int ldb, Real *w, uni20::detail::standard_complex< Real > *work, blas_int lwork, Real *rwork, blas_int lrwork, blas_int *iwork, blas_int liwork)
Compute eigenvalues and optionally eigenvectors of a complex generalized Hermitian-definite problem b...
Definition lapack.hpp:766
void geequ(blas_int m, blas_int n, Scalar *a, blas_int lda, Scalar *row_scale, Scalar *column_scale, Scalar &row_condition, Scalar &column_condition, Scalar &max_abs)
Compute real dense general row/column equilibration factors.
Definition lapack.hpp:393
void sytrd(char uplo, blas_int n, Scalar *a, blas_int lda, Scalar *d, Scalar *e, Scalar *tau, Scalar *work, blas_int lwork)
Reduce a real dense symmetric matrix to tridiagonal form.
Definition lapack.hpp:655
void pbtrs(char uplo, blas_int n, blas_int kd, blas_int nrhs, Scalar *ab, blas_int ldab, Scalar *b, blas_int ldb)
Solve using an existing real symmetric positive-definite band Cholesky factorization.
Definition lapack.hpp:321
void ggbal(char job, blas_int n, Scalar *a, blas_int lda, Scalar *b, blas_int ldb, blas_int &first, blas_int &last, Scalar *lscale, Scalar *rscale, Scalar *work)
Balance a real nonsymmetric matrix pencil before generalized eigenanalysis.
Definition lapack.hpp:991
void pttrf(blas_int n, Scalar *d, Scalar *e)
Compute a real symmetric positive-definite tridiagonal factorization.
Definition lapack.hpp:1544
Scalar trcon(char norm, char uplo, char diag, blas_int n, Scalar *a, blas_int lda, Scalar *work, blas_int *iwork)
Estimate a dense real triangular reciprocal condition number.
Definition lapack.hpp:1461
void pttrs(blas_int n, blas_int nrhs, Scalar *d, Scalar *e, Scalar *b, blas_int ldb)
Solve using an existing real symmetric positive-definite tridiagonal factorization.
Definition lapack.hpp:1551
void steqr(char compz, blas_int n, Scalar *d, Scalar *e, Scalar *z, blas_int ldz, Scalar *work)
Compute a real symmetric tridiagonal eigensystem by QR iteration.
Definition lapack.hpp:1598
void hegvx(blas_int itype, char jobz, char range, char uplo, blas_int n, uni20::detail::standard_complex< Real > *a, blas_int lda, uni20::detail::standard_complex< Real > *b, blas_int ldb, Real vl, Real vu, blas_int il, blas_int iu, Real abstol, blas_int &selected_count, Real *w, uni20::detail::standard_complex< Real > *z, blas_int ldz, uni20::detail::standard_complex< Real > *work, blas_int lwork, Real *rwork, blas_int *iwork, blas_int *ifail)
Compute selected eigenvalues and optionally eigenvectors of a complex generalized Hermitian-definite ...
Definition lapack.hpp:777
void hegv(blas_int itype, char jobz, char uplo, blas_int n, uni20::detail::standard_complex< Real > *a, blas_int lda, uni20::detail::standard_complex< Real > *b, blas_int ldb, Real *w, uni20::detail::standard_complex< Real > *work, blas_int lwork, Real *rwork)
Compute eigenvalues and optionally eigenvectors of a complex generalized Hermitian-definite problem.
Definition lapack.hpp:755
void potrf(char uplo, blas_int n, Scalar *a, blas_int lda)
Compute a real dense Cholesky factorization.
Definition lapack.hpp:1279
void heevd(char jobz, char uplo, blas_int n, uni20::detail::standard_complex< Real > *a, blas_int lda, Real *w, uni20::detail::standard_complex< Real > *work, blas_int lwork, Real *rwork, blas_int lrwork, blas_int *iwork, blas_int liwork)
Compute eigenvalues and optionally eigenvectors of a complex Hermitian matrix by divide and conquer.
Definition lapack.hpp:732
void syrfs(char uplo, blas_int n, blas_int nrhs, Scalar *a, blas_int lda, Scalar *factors, blas_int factor_lda, blas_int const *ipiv, Scalar *b, blas_int ldb, Scalar *x, blas_int ldx, Scalar *forward_error, Scalar *backward_error, Scalar *work, blas_int *iwork)
Refine a dense real symmetric-indefinite solve and return LAPACK diagnostics.
Definition lapack.hpp:1401
void ormtr(char side, char uplo, char trans, blas_int m, blas_int n, Scalar *a, blas_int lda, Scalar const *tau, Scalar *c, blas_int ldc, Scalar *work, blas_int lwork)
Multiply by an implicit real orthogonal factor from symmetric tridiagonal reduction.
Definition lapack.hpp:1168
Scalar ptcon(blas_int n, Scalar *d, Scalar *e, Scalar matrix_norm, Scalar *work)
Estimate a real symmetric positive-definite tridiagonal reciprocal condition number.
Definition lapack.hpp:1562
Scalar sycon(char uplo, blas_int n, Scalar *a, blas_int lda, blas_int const *ipiv, Scalar matrix_one_norm, Scalar *work, blas_int *iwork)
Estimate a dense real symmetric-indefinite reciprocal condition number.
Definition lapack.hpp:1423
void pbtrf(char uplo, blas_int n, blas_int kd, Scalar *ab, blas_int ldab)
Compute a real symmetric positive-definite band Cholesky factorization.
Definition lapack.hpp:313
void ormbr(char vect, char side, char trans, blas_int m, blas_int n, blas_int k, Scalar *a, blas_int lda, Scalar *tau, Scalar *c, blas_int ldc, Scalar *work, blas_int lwork)
Multiply by an implicit real orthogonal factor from bidiagonal reduction.
Definition lapack.hpp:1177
void pbrfs(char uplo, blas_int n, blas_int kd, blas_int nrhs, Scalar *ab, blas_int ldab, Scalar *afb, blas_int ldafb, Scalar *b, blas_int ldb, Scalar *x, blas_int ldx, Scalar *forward_error, Scalar *backward_error, Scalar *work, blas_int *iwork)
Refine a real symmetric positive-definite band solve and return LAPACK diagnostics.
Definition lapack.hpp:343
Scalar gecon(char norm, blas_int n, Scalar const *a, blas_int lda, Scalar anorm, Scalar *work, blas_int *iwork)
Estimate a real dense general reciprocal condition number.
Definition lapack.hpp:464
void stevd(char jobz, blas_int n, Scalar *d, Scalar *e, Scalar *z, blas_int ldz, Scalar *work, blas_int lwork, blas_int *iwork, blas_int liwork)
Compute a real symmetric tridiagonal eigensystem by divide-and-conquer.
Definition lapack.hpp:1606
void ggev(char jobvl, char jobvr, blas_int n, Scalar *a, blas_int lda, Scalar *b, blas_int ldb, Scalar *alphar, Scalar *alphai, Scalar *beta, Scalar *vl, blas_int ldvl, Scalar *vr, blas_int ldvr, Scalar *work, blas_int lwork)
Compute generalized eigenvalues and optionally eigenvectors of a real nonsymmetric matrix pencil.
Definition lapack.hpp:967
void gelqf(blas_int m, blas_int n, Scalar *a, blas_int lda, Scalar *tau, Scalar *work, blas_int lwork)
Compute a real or complex dense LQ factorization through the configured LAPACK backend.
Definition lapack.hpp:537
void sterf(blas_int n, Scalar *d, Scalar *e)
Compute eigenvalues of a real symmetric tridiagonal matrix.
Definition lapack.hpp:1590
void trexc(char compq, blas_int n, Scalar *t, blas_int ldt, Scalar *q, blas_int ldq, blas_int &first, blas_int &last, Scalar *work)
Reorder adjacent blocks in a real Schur form.
Definition lapack.hpp:889
Scalar pocon(char uplo, blas_int n, Scalar *a, blas_int lda, Scalar matrix_one_norm, Scalar *work, blas_int *iwork)
Estimate a real dense SPD reciprocal condition number.
Definition lapack.hpp:1367
void tgevc(char side, char howmny, blas_int *select, blas_int n, Scalar *s, blas_int lds, Scalar *p, blas_int ldp, Scalar *vl, blas_int ldvl, Scalar *vr, blas_int ldvr, blas_int mm, blas_int &computed_vectors, Scalar *work)
Compute eigenvectors of a generalized real Schur form.
Definition lapack.hpp:1102
void gges(char jobvsl, char jobvsr, char sort, blas_int n, Scalar *a, blas_int lda, Scalar *b, blas_int ldb, blas_int &selected_dimension, Scalar *alphar, Scalar *alphai, Scalar *beta, Scalar *vsl, blas_int ldvsl, Scalar *vsr, blas_int ldvsr, Scalar *work, blas_int lwork, blas_int *bwork)
Compute a generalized real Schur form of a real nonsymmetric matrix pencil.
Definition lapack.hpp:1018
void tgsen(blas_int ijob, bool wantq, bool wantz, blas_int *select, blas_int n, Scalar *a, blas_int lda, Scalar *b, blas_int ldb, Scalar *alphar, Scalar *alphai, Scalar *beta, Scalar *q, blas_int ldq, Scalar *z, blas_int ldz, blas_int &selected_dimension, Scalar &pl, Scalar &pr, Scalar *dif, Scalar *work, blas_int lwork, blas_int *iwork, blas_int liwork)
Reorder selected blocks in a generalized real Schur form and estimate conditioning.
Definition lapack.hpp:1082
bool sysvx(char fact, char uplo, blas_int n, blas_int nrhs, Scalar *a, blas_int lda, Scalar *af, blas_int ldaf, blas_int *ipiv, Scalar *b, blas_int ldb, Scalar *x, blas_int ldx, Scalar &rcond, Scalar *forward_error, Scalar *backward_error, Scalar *work, blas_int lwork, blas_int *iwork)
Solve a dense real symmetric-indefinite system with LAPACK expert-driver diagnostics.
Definition lapack.hpp:1412
void gesvd(char jobu, char jobvt, blas_int m, blas_int n, Scalar *a, blas_int lda, Scalar *s, Scalar *u, blas_int ldu, Scalar *vt, blas_int ldvt, Scalar *work, blas_int lwork)
Compute a real dense singular value decomposition.
Definition lapack.hpp:1186
void gesdd(char jobz, blas_int m, blas_int n, Scalar *a, blas_int lda, Scalar *s, Scalar *u, blas_int ldu, Scalar *vt, blas_int ldvt, Scalar *work, blas_int lwork, blas_int *iwork)
Compute a real dense divide-and-conquer singular value decomposition.
Definition lapack.hpp:1205
bool ptsvx(char fact, blas_int n, blas_int nrhs, Scalar *d, Scalar *e, Scalar *df, Scalar *ef, Scalar *b, blas_int ldb, Scalar *x, blas_int ldx, Scalar &rcond, Scalar *forward_error, Scalar *backward_error, Scalar *work)
Solve a real symmetric positive-definite tridiagonal system with LAPACK expert-driver diagnostics.
Definition lapack.hpp:1581
void hseqr(char job, char compz, blas_int n, blas_int first, blas_int last, Scalar *h, blas_int ldh, Scalar *wr, Scalar *wi, Scalar *z, blas_int ldz, Scalar *work, blas_int lwork)
Compute a Schur form of a real upper Hessenberg matrix.
Definition lapack.hpp:876
bool gtsvx(char fact, char trans, blas_int n, blas_int nrhs, Scalar *dl, Scalar *d, Scalar *du, Scalar *dlf, Scalar *df, Scalar *duf, Scalar *du2, blas_int *ipiv, Scalar *b, blas_int ldb, Scalar *x, blas_int ldx, Scalar &rcond, Scalar *forward_error, Scalar *backward_error, Scalar *work, blas_int *iwork)
Solve a real tridiagonal linear system with LAPACK expert-driver diagnostics.
Definition lapack.hpp:1527
void ormqr(char side, char trans, blas_int m, blas_int n, blas_int k, Scalar *a, blas_int lda, Scalar *tau, Scalar *c, blas_int ldc, Scalar *work, blas_int lwork)
Multiply by the implicit real Q factor from a QR factorization.
Definition lapack.hpp:593
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
Reference LAPACK wrappers for real band linear algebra.
Reference LAPACK wrappers for real and complex dense general linear systems.
LAPACK norm wrappers for the reference float/double backend.
#define CHECK(cond,...)
Definition trace.hpp:299