1 /** LAPACK bindings for D.
2 
3     Authors:    William V. Baxter III (with slight modifications by
4                 Lars Tandle Kyllingstad).
5     Copyright:  Copyright (c) 2009, Lars T. Kyllingstad. All rights reserved.
6     License:    Boost License 1.0
7 */
8 module scid.bindings.lapack.dlapack;
9 
10 import scid.bindings.lapack.lapack;
11 import scid.core.fortran;
12 
13 public import scid.bindings.lapack.lapack: f_int, f_float, f_double, f_cfloat, f_cdouble;
14 
15 /* LAPACK routines */
16 
17 //--------------------------------------------------------
18 // ---- SIMPLE and DIVIDE AND CONQUER DRIVER routines ----
19 //---------------------------------------------------------
20 
21 /// Solves a general system of linear equations AX=B.
22 void gesv(f_int n, f_int nrhs, f_float *a, f_int lda, f_int *ipiv, f_float *b, f_int ldb, ref f_int info) {
23     sgesv_(&n, &nrhs, a, &lda, ipiv, b, &ldb, &info);
24 }
25 void gesv(f_int n, f_int nrhs, f_double *a, f_int lda, f_int *ipiv, f_double *b, f_int ldb, ref f_int info) {
26     dgesv_(&n, &nrhs, a, &lda, ipiv, b, &ldb, &info);
27 }
28 void gesv(f_int n, f_int nrhs, f_cfloat *a, f_int lda, f_int *ipiv, f_cfloat *b, f_int ldb, ref f_int info) {
29     cgesv_(&n, &nrhs, a, &lda, ipiv, b, &ldb, &info);
30 }
31 void gesv(f_int n, f_int nrhs, f_cdouble *a, f_int lda, f_int *ipiv, f_cdouble *b, f_int ldb, ref f_int info) {
32     zgesv_(&n, &nrhs, a, &lda, ipiv, b, &ldb, &info);
33 }
34 
35 /// Solves a general banded system of linear equations AX=B.
36 void gbsv(f_int n, f_int kl, f_int ku, f_int nrhs, f_float *ab, f_int ldab, f_int *ipiv, f_float *b, f_int ldb, ref f_int info) {
37     sgbsv_(&n, &kl, &ku, &nrhs, ab, &ldab, ipiv, b, &ldb, &info);
38 }
39 void gbsv(f_int n, f_int kl, f_int ku, f_int nrhs, f_double *ab, f_int ldab, f_int *ipiv, f_double *b, f_int ldb, ref f_int info) {
40     dgbsv_(&n, &kl, &ku, &nrhs, ab, &ldab, ipiv, b, &ldb, &info);
41 }
42 void gbsv(f_int n, f_int kl, f_int ku, f_int nrhs, f_cfloat *ab, f_int ldab, f_int *ipiv, f_cfloat *b, f_int ldb, ref f_int info) {
43     cgbsv_(&n, &kl, &ku, &nrhs, ab, &ldab, ipiv, b, &ldb, &info);
44 }
45 void gbsv(f_int n, f_int kl, f_int ku, f_int nrhs, f_cdouble *ab, f_int ldab, f_int *ipiv, f_cdouble *b, f_int ldb, ref f_int info) {
46     zgbsv_(&n, &kl, &ku, &nrhs, ab, &ldab, ipiv, b, &ldb, &info);
47 }
48 
49 /// Solves a general tridiagonal system of linear equations AX=B.
50 void gtsv(f_int n, f_int nrhs, f_float *dl, f_float *d, f_float *du, f_float *b, f_int ldb, ref f_int info) {
51     sgtsv_(&n, &nrhs, dl, d, du, b, &ldb, &info);
52 }
53 void gtsv(f_int n, f_int nrhs, f_double *dl, f_double *d, f_double *du, f_double *b, f_int ldb, ref f_int info) {
54     dgtsv_(&n, &nrhs, dl, d, du, b, &ldb, &info);
55 }
56 void gtsv(f_int n, f_int nrhs, f_cfloat *dl, f_cfloat *d, f_cfloat *du, f_cfloat *b, f_int ldb, ref f_int info) {
57     cgtsv_(&n, &nrhs, dl, d, du, b, &ldb, &info);
58 }
59 void gtsv(f_int n, f_int nrhs, f_cdouble *dl, f_cdouble *d, f_cdouble *du, f_cdouble *b, f_int ldb, ref f_int info) {
60     zgtsv_(&n, &nrhs, dl, d, du, b, &ldb, &info);
61 }
62 
63 /// Solves a symmetric positive definite system of linear
64 /// equations AX=B.
65 void posv(char uplo, f_int n, f_int nrhs, f_float *a, f_int lda, f_float *b, f_int ldb, ref f_int info) {
66     sposv_(&uplo, &n, &nrhs, a, &lda, b, &ldb, &info, 1);
67 }
68 void posv(char uplo, f_int n, f_int nrhs, f_double *a, f_int lda, f_double *b, f_int ldb, ref f_int info) {
69     dposv_(&uplo, &n, &nrhs, a, &lda, b, &ldb, &info, 1);
70 }
71 void posv(char uplo, f_int n, f_int nrhs, f_cfloat *a, f_int lda, f_cfloat *b, f_int ldb, ref f_int info) {
72     cposv_(&uplo, &n, &nrhs, a, &lda, b, &ldb, &info, 1);
73 }
74 void posv(char uplo, f_int n, f_int nrhs, f_cdouble *a, f_int lda, f_cdouble *b, f_int ldb, ref f_int info) {
75     zposv_(&uplo, &n, &nrhs, a, &lda, b, &ldb, &info, 1);
76 }
77 
78 /// Solves a symmetric positive definite system of linear
79 /// equations AX=B, where A is held in packed storage.
80 void ppsv(char uplo, f_int n, f_int nrhs, f_float *ap, f_float *b, f_int ldb, ref f_int info) {
81     sppsv_(&uplo, &n, &nrhs, ap, b, &ldb, &info, 1);
82 }
83 void ppsv(char uplo, f_int n, f_int nrhs, f_double *ap, f_double *b, f_int ldb, ref f_int info) {
84     dppsv_(&uplo, &n, &nrhs, ap, b, &ldb, &info, 1);
85 }
86 void ppsv(char uplo, f_int n, f_int nrhs, f_cfloat *ap, f_cfloat *b, f_int ldb, ref f_int info) {
87     cppsv_(&uplo, &n, &nrhs, ap, b, &ldb, &info, 1);
88 }
89 void ppsv(char uplo, f_int n, f_int nrhs, f_cdouble *ap, f_cdouble *b, f_int ldb, ref f_int info) {
90     zppsv_(&uplo, &n, &nrhs, ap, b, &ldb, &info, 1);
91 }
92 
93 /// Solves a symmetric positive definite banded system
94 /// of linear equations AX=B.
95 void pbsv(char uplo, f_int n, f_int kd, f_int nrhs, f_float *ab, f_int ldab, f_float *b, f_int ldb, ref f_int info) {
96     spbsv_(&uplo, &n, &kd, &nrhs, ab, &ldab, b, &ldb, &info, 1);
97 }
98 void pbsv(char uplo, f_int n, f_int kd, f_int nrhs, f_double *ab, f_int ldab, f_double *b, f_int ldb, ref f_int info) {
99     dpbsv_(&uplo, &n, &kd, &nrhs, ab, &ldab, b, &ldb, &info, 1);
100 }
101 void pbsv(char uplo, f_int n, f_int kd, f_int nrhs, f_cfloat *ab, f_int ldab, f_cfloat *b, f_int ldb, ref f_int info) {
102     cpbsv_(&uplo, &n, &kd, &nrhs, ab, &ldab, b, &ldb, &info, 1);
103 }
104 void pbsv(char uplo, f_int n, f_int kd, f_int nrhs, f_cdouble *ab, f_int ldab, f_cdouble *b, f_int ldb, ref f_int info) {
105     zpbsv_(&uplo, &n, &kd, &nrhs, ab, &ldab, b, &ldb, &info, 1);
106 }
107 
108 /// Solves a symmetric positive definite tridiagonal system
109 /// of linear equations AX=B.
110 void ptsv(f_int n, f_int nrhs, f_float *d, f_float *e, f_float *b, f_int ldb, ref f_int info) {
111     sptsv_(&n, &nrhs, d, e, b, &ldb, &info);
112 }
113 void ptsv(f_int n, f_int nrhs, f_double *d, f_double *e, f_double *b, f_int ldb, ref f_int info) {
114     dptsv_(&n, &nrhs, d, e, b, &ldb, &info);
115 }
116 void ptsv(f_int n, f_int nrhs, f_float *d, f_cfloat *e, f_cfloat *b, f_int ldb, ref f_int info) {
117     cptsv_(&n, &nrhs, d, e, b, &ldb, &info);
118 }
119 void ptsv(f_int n, f_int nrhs, f_double *d, f_cdouble *e, f_cdouble *b, f_int ldb, ref f_int info) {
120     zptsv_(&n, &nrhs, d, e, b, &ldb, &info);
121 }
122 
123 
124 /// Solves a real symmetric indefinite system of linear equations AX=B.
125 void sysv(char uplo, f_int n, f_int nrhs, f_float *a, f_int lda, f_int *ipiv, f_float *b, f_int ldb, f_float *work, f_int lwork, ref f_int info) {
126     ssysv_(&uplo, &n, &nrhs, a, &lda, ipiv, b, &ldb, work, &lwork, &info, 1);
127 }
128 void sysv(char uplo, f_int n, f_int nrhs, f_double *a, f_int lda, f_int *ipiv, f_double *b, f_int ldb, f_double *work, f_int lwork, ref f_int info) {
129     dsysv_(&uplo, &n, &nrhs, a, &lda, ipiv, b, &ldb, work, &lwork, &info, 1);
130 }
131 void sysv(char uplo, f_int n, f_int nrhs, f_cfloat *a, f_int lda, f_int *ipiv, f_cfloat *b, f_int ldb, f_cfloat *work, f_int lwork, ref f_int info) {
132     csysv_(&uplo, &n, &nrhs, a, &lda, ipiv, b, &ldb, work, &lwork, &info, 1);
133 }
134 void sysv(char uplo, f_int n, f_int nrhs, f_cdouble *a, f_int lda, f_int *ipiv, f_cdouble *b, f_int ldb, f_cdouble *work, f_int lwork, ref f_int info) {
135     zsysv_(&uplo, &n, &nrhs, a, &lda, ipiv, b, &ldb, work, &lwork, &info, 1);
136 }
137 
138 /// Solves a complex Hermitian indefinite system of linear equations AX=B.
139 void hesv(char uplo, f_int n, f_int nrhs, f_cfloat *a, f_int lda, f_int *ipiv, f_cfloat *b, f_int ldb, f_cfloat *work, f_int lwork, ref f_int info) {
140     chesv_(&uplo, &n, &nrhs, a, &lda, ipiv, b, &ldb, work, &lwork, &info, 1);
141 }
142 void hesv(char uplo, f_int n, f_int nrhs, f_cdouble *a, f_int lda, f_int *ipiv, f_cdouble *b, f_int ldb, f_cdouble *work, f_int lwork, ref f_int info) {
143     zhesv_(&uplo, &n, &nrhs, a, &lda, ipiv, b, &ldb, work, &lwork, &info, 1);
144 }
145 
146 /// Solves a real symmetric indefinite system of linear equations AX=B,
147 /// where A is held in packed storage.
148 void spsv(char uplo, f_int n, f_int nrhs, f_float *ap, f_int *ipiv, f_float *b, f_int ldb, ref f_int info) {
149     sspsv_(&uplo, &n, &nrhs, ap, ipiv, b, &ldb, &info, 1);
150 }
151 void spsv(char uplo, f_int n, f_int nrhs, f_double *ap, f_int *ipiv, f_double *b, f_int ldb, ref f_int info) {
152     dspsv_(&uplo, &n, &nrhs, ap, ipiv, b, &ldb, &info, 1);
153 }
154 void spsv(char uplo, f_int n, f_int nrhs, f_cfloat *ap, f_int *ipiv, f_cfloat *b, f_int ldb, ref f_int info) {
155     cspsv_(&uplo, &n, &nrhs, ap, ipiv, b, &ldb, &info, 1);
156 }
157 void spsv(char uplo, f_int n, f_int nrhs, f_cdouble *ap, f_int *ipiv, f_cdouble *b, f_int ldb, ref f_int info) {
158     zspsv_(&uplo, &n, &nrhs, ap, ipiv, b, &ldb, &info, 1);
159 }
160 
161 /// Solves a complex Hermitian indefinite system of linear equations AX=B,
162 /// where A is held in packed storage.
163 void hpsv(char uplo, f_int n, f_int nrhs, f_cfloat *ap, f_int *ipiv, f_cfloat *b, f_int ldb, ref f_int info) {
164     chpsv_(&uplo, &n, &nrhs, ap, ipiv, b, &ldb, &info, 1);
165 }
166 void hpsv(char uplo, f_int n, f_int nrhs, f_cdouble *ap, f_int *ipiv, f_cdouble *b, f_int ldb, ref f_int info) {
167     zhpsv_(&uplo, &n, &nrhs, ap, ipiv, b, &ldb, &info, 1);
168 }
169 
170 /// Computes the least squares solution to an over-determined system
171 /// of linear equations, A X=B or A**H X=B,  or the minimum norm
172 /// solution of an under-determined system, where A is a general
173 /// rectangular matrix of full rank,  using a QR or LQ factorization
174 /// of A.
175 void gels(char trans, f_int m, f_int n, f_int nrhs, f_float *a, f_int lda, f_float *b, f_int ldb, f_float *work, f_int lwork, ref f_int info) {
176     sgels_(&trans, &m, &n, &nrhs, a, &lda, b, &ldb, work, &lwork, &info, 1);
177 }
178 void gels(char trans, f_int m, f_int n, f_int nrhs, f_double *a, f_int lda, f_double *b, f_int ldb, f_double *work, f_int lwork, ref f_int info) {
179     dgels_(&trans, &m, &n, &nrhs, a, &lda, b, &ldb, work, &lwork, &info, 1);
180 }
181 void gels(char trans, f_int m, f_int n, f_int nrhs, f_cfloat *a, f_int lda, f_cfloat *b, f_int ldb, f_cfloat *work, f_int lwork, ref f_int info) {
182     cgels_(&trans, &m, &n, &nrhs, a, &lda, b, &ldb, work, &lwork, &info, 1);
183 }
184 void gels(char trans, f_int m, f_int n, f_int nrhs, f_cdouble *a, f_int lda, f_cdouble *b, f_int ldb, f_cdouble *work, f_int lwork, ref f_int info) {
185     zgels_(&trans, &m, &n, &nrhs, a, &lda, b, &ldb, work, &lwork, &info, 1);
186 }
187 
188 /// Computes the least squares solution to an over-determined system
189 /// of linear equations, A X=B or A**H X=B,  or the minimum norm
190 /// solution of an under-determined system, using a divide and conquer
191 /// method, where A is a general rectangular matrix of full rank,
192 /// using a QR or LQ factorization of A.
193 void gelsd(f_int m, f_int n, f_int nrhs, f_float *a, f_int lda, f_float *b, f_int ldb, f_float *s, f_float rcond, out f_int rank, f_float *work, f_int lwork, f_int *iwork, ref f_int info) {
194     sgelsd_(&m, &n, &nrhs, a, &lda, b, &ldb, s, &rcond, &rank, work, &lwork, iwork, &info);
195 }
196 void gelsd(f_int m, f_int n, f_int nrhs, f_double *a, f_int lda, f_double *b, f_int ldb, f_double *s, f_double rcond, out f_int rank, f_double *work, f_int lwork, f_int *iwork, ref f_int info) {
197     dgelsd_(&m, &n, &nrhs, a, &lda, b, &ldb, s, &rcond, &rank, work, &lwork, iwork, &info);
198 }
199 void gelsd(f_int m, f_int n, f_int nrhs, f_cfloat *a, f_int lda, f_cfloat *b, f_int ldb, f_float *s, f_float rcond, out f_int rank, f_cfloat *work, f_int lwork, f_float *rwork, f_int *iwork, ref f_int info) {
200     cgelsd_(&m, &n, &nrhs, a, &lda, b, &ldb, s, &rcond, &rank, work, &lwork, rwork, iwork, &info);
201 }
202 void gelsd(f_int m, f_int n, f_int nrhs, f_cdouble *a, f_int lda, f_cdouble *b, f_int ldb, f_double *s, f_double rcond, out f_int rank, f_cdouble *work, f_int lwork, f_double *rwork, f_int *iwork, ref f_int info) {
203     zgelsd_(&m, &n, &nrhs, a, &lda, b, &ldb, s, &rcond, &rank, work, &lwork, rwork, iwork, &info);
204 }
205 
206 /// Solves the LSE (Constrained Linear Least Squares Problem) using
207 /// the GRQ (Generalized RQ) factorization
208 void gglse(f_int m, f_int n, f_int p, f_float *a, f_int lda, f_float *b, f_int ldb, f_float *c, f_float *d, f_float *x, f_float *work, f_int lwork, ref f_int info) {
209     sgglse_(&m, &n, &p, a, &lda, b, &ldb, c, d, x, work, &lwork, &info);
210 }
211 void gglse(f_int m, f_int n, f_int p, f_double *a, f_int lda, f_double *b, f_int ldb, f_double *c, f_double *d, f_double *x, f_double *work, f_int lwork, ref f_int info) {
212     dgglse_(&m, &n, &p, a, &lda, b, &ldb, c, d, x, work, &lwork, &info);
213 }
214 void gglse(f_int m, f_int n, f_int p, f_cfloat *a, f_int lda, f_cfloat *b, f_int ldb, f_cfloat *c, f_cfloat *d, f_cfloat *x, f_cfloat *work, f_int lwork, ref f_int info) {
215     cgglse_(&m, &n, &p, a, &lda, b, &ldb, c, d, x, work, &lwork, &info);
216 }
217 void gglse(f_int m, f_int n, f_int p, f_cdouble *a, f_int lda, f_cdouble *b, f_int ldb, f_cdouble *c, f_cdouble *d, f_cdouble *x, f_cdouble *work, f_int lwork, ref f_int info) {
218     zgglse_(&m, &n, &p, a, &lda, b, &ldb, c, d, x, work, &lwork, &info);
219 }
220 
221 /// Solves the GLM (Generalized Linear Regression Model) using
222 /// the GQR (Generalized QR) factorization
223 void ggglm(f_int n, f_int m, f_int p, f_float *a, f_int lda, f_float *b, f_int ldb, f_float *d, f_float *x, f_float *y, f_float *work, f_int lwork, ref f_int info) {
224     sggglm_(&n, &m, &p, a, &lda, b, &ldb, d, x, y, work, &lwork, &info);
225 }
226 void ggglm(f_int n, f_int m, f_int p, f_double *a, f_int lda, f_double *b, f_int ldb, f_double *d, f_double *x, f_double *y, f_double *work, f_int lwork, ref f_int info) {
227     dggglm_(&n, &m, &p, a, &lda, b, &ldb, d, x, y, work, &lwork, &info);
228 }
229 void ggglm(f_int n, f_int m, f_int p, f_cfloat *a, f_int lda, f_cfloat *b, f_int ldb, f_cfloat *d, f_cfloat *x, f_cfloat *y, f_cfloat *work, f_int lwork, ref f_int info) {
230     cggglm_(&n, &m, &p, a, &lda, b, &ldb, d, x, y, work, &lwork, &info);
231 }
232 void ggglm(f_int n, f_int m, f_int p, f_cdouble *a, f_int lda, f_cdouble *b, f_int ldb, f_cdouble *d, f_cdouble *x, f_cdouble *y, f_cdouble *work, f_int lwork, ref f_int info) {
233     zggglm_(&n, &m, &p, a, &lda, b, &ldb, d, x, y, work, &lwork, &info);
234 }
235 
236 /// Computes all eigenvalues, and optionally, eigenvectors of a real
237 /// symmetric matrix.
238 void syev(char jobz, char uplo, f_int n, f_float *a, f_int lda, f_float *w, f_float *work, f_int lwork, ref f_int info) {
239     ssyev_(&jobz, &uplo, &n, a, &lda, w, work, &lwork, &info, 1, 1);
240 }
241 void syev(char jobz, char uplo, f_int n, f_double *a, f_int lda, f_double *w, f_double *work, f_int lwork, ref f_int info) {
242     dsyev_(&jobz, &uplo, &n, a, &lda, w, work, &lwork, &info, 1, 1);
243 }
244 
245 /// Computes all eigenvalues and, optionally, eigenvectors of a complex
246 /// Hermitian matrix.
247 void heev(char jobz, char uplo, f_int n, f_cfloat *a, f_int lda, f_float *w, f_cfloat *work, f_int lwork, f_float *rwork, ref f_int info) {
248     cheev_(&jobz, &uplo, &n, a, &lda, w, work, &lwork, rwork, &info, 1, 1);
249 }
250 void heev(char jobz, char uplo, f_int n, f_cdouble *a, f_int lda, f_double *w, f_cdouble *work, f_int lwork, f_double *rwork, ref f_int info) {
251     zheev_(&jobz, &uplo, &n, a, &lda, w, work, &lwork, rwork, &info, 1, 1);
252 }
253 
254 
255 /// Computes all eigenvalues, and optionally, eigenvectors of a real
256 /// symmetric matrix.  If eigenvectors are desired, it uses a divide
257 /// and conquer algorithm.
258 void syevd(char jobz, char uplo, f_int n, f_float *a, f_int lda, f_float *w, f_float *work, f_int lwork, f_int *iwork, f_int liwork, ref f_int info) {
259     ssyevd_(&jobz, &uplo, &n, a, &lda, w, work, &lwork, iwork, &liwork, &info, 1, 1);
260 }
261 void syevd(char jobz, char uplo, f_int n, f_double *a, f_int lda, f_double *w, f_double *work, f_int lwork, f_int *iwork, f_int liwork, ref f_int info) {
262     dsyevd_(&jobz, &uplo, &n, a, &lda, w, work, &lwork, iwork, &liwork, &info, 1, 1);
263 }
264 
265 /// Computes all eigenvalues and, optionally, eigenvectors of a complex
266 /// Hermitian matrix.  If eigenvectors are desired, it uses a divide
267 /// and conquer algorithm.
268 void heevd(char jobz, char uplo, f_int n, f_cfloat *a, f_int lda, f_float *w, f_cfloat *work, f_int lwork, f_float *rwork, f_int lrwork, f_int *iwork, f_int liwork, ref f_int info) {
269     cheevd_(&jobz, &uplo, &n, a, &lda, w, work, &lwork, rwork, &lrwork, iwork, &liwork, &info, 1, 1);
270 }
271 void heevd(char jobz, char uplo, f_int n, f_cdouble *a, f_int lda, f_double *w, f_cdouble *work, f_int lwork, f_double *rwork, f_int lrwork, f_int *iwork, f_int liwork, ref f_int info) {
272     zheevd_(&jobz, &uplo, &n, a, &lda, w, work, &lwork, rwork, &lrwork, iwork, &liwork, &info, 1, 1);
273 }
274 
275 /// Computes all eigenvalues, and optionally, eigenvectors of a real
276 /// symmetric matrix in packed storage.
277 void spev(char jobz, char uplo, f_int n, f_float *ap, f_float *w, f_float *z, f_int ldz, f_float *work, ref f_int info) {
278     sspev_(&jobz, &uplo, &n, ap, w, z, &ldz, work, &info, 1, 1);
279 }
280 void spev(char jobz, char uplo, f_int n, f_double *ap, f_double *w, f_double *z, f_int ldz, f_double *work, ref f_int info) {
281     dspev_(&jobz, &uplo, &n, ap, w, z, &ldz, work, &info, 1, 1);
282 }
283 
284 /// Computes selected eigenvalues, and optionally, eigenvectors of a complex
285 /// Hermitian matrix.  Eigenvalues are computed by the dqds
286 /// algorithm, and eigenvectors are computed from various "good" LDL^T
287 /// representations (also known as Relatively Robust Representations).
288 /// Computes all eigenvalues and, optionally, eigenvectors of a complex
289 /// Hermitian matrix in packed storage.
290 void hpev(char jobz, char uplo, f_int n, f_cfloat *ap, f_float *w, f_cfloat *z, f_int ldz, f_cfloat *work, f_float *rwork, ref f_int info) {
291     chpev_(&jobz, &uplo, &n, ap, w, z, &ldz, work, rwork, &info, 1, 1);
292 }
293 void hpev(char jobz, char uplo, f_int n, f_cdouble *ap, f_double *w, f_cdouble *z, f_int ldz, f_cdouble *work, f_double *rwork, ref f_int info) {
294     zhpev_(&jobz, &uplo, &n, ap, w, z, &ldz, work, rwork, &info, 1, 1);
295 }
296 
297 /// Computes all eigenvalues, and optionally, eigenvectors of a real
298 /// symmetric matrix in packed storage.  If eigenvectors are desired,
299 /// it uses a divide and conquer algorithm.
300 void spevd(char jobz, char uplo, f_int n, f_float *ap, f_float *w, f_float *z, f_int ldz, f_float *work, f_int lwork, f_int *iwork, f_int liwork, ref f_int info) {
301     sspevd_(&jobz, &uplo, &n, ap, w, z, &ldz, work, &lwork, iwork, &liwork, &info, 1, 1);
302 }
303 void spevd(char jobz, char uplo, f_int n, f_double *ap, f_double *w, f_double *z, f_int ldz, f_double *work, f_int lwork, f_int *iwork, f_int liwork, ref f_int info) {
304     dspevd_(&jobz, &uplo, &n, ap, w, z, &ldz, work, &lwork, iwork, &liwork, &info, 1, 1);
305 }
306 
307 /// Computes all eigenvalues and, optionally, eigenvectors of a complex
308 /// Hermitian matrix in packed storage.  If eigenvectors are desired, it
309 /// uses a divide and conquer algorithm.
310 void hpevd(char jobz, char uplo, f_int n, f_cfloat *ap, f_float *w, f_cfloat *z, f_int ldz, f_cfloat *work, f_int lwork, f_float *rwork, f_int lrwork, f_int *iwork, f_int liwork, ref f_int info) {
311     chpevd_(&jobz, &uplo, &n, ap, w, z, &ldz, work, &lwork, rwork, &lrwork, iwork, &liwork, &info, 1, 1);
312 }
313 void hpevd(char jobz, char uplo, f_int n, f_cdouble *ap, f_double *w, f_cdouble *z, f_int ldz, f_cdouble *work, f_int lwork, f_double *rwork, f_int lrwork, f_int *iwork, f_int liwork, ref f_int info) {
314     zhpevd_(&jobz, &uplo, &n, ap, w, z, &ldz, work, &lwork, rwork, &lrwork, iwork, &liwork, &info, 1, 1);
315 }
316 
317 /// Computes all eigenvalues, and optionally, eigenvectors of a real
318 /// symmetric band matrix.
319 void sbev(char jobz, char uplo, f_int n, f_int kd, f_float *ab, f_int ldab, f_float *w, f_float *z, f_int ldz, f_float *work, ref f_int info) {
320     ssbev_(&jobz, &uplo, &n, &kd, ab, &ldab, w, z, &ldz, work, &info, 1, 1);
321 }
322 void sbev(char jobz, char uplo, f_int n, f_int kd, f_double *ab, f_int ldab, f_double *w, f_double *z, f_int ldz, f_double *work, ref f_int info) {
323     dsbev_(&jobz, &uplo, &n, &kd, ab, &ldab, w, z, &ldz, work, &info, 1, 1);
324 }
325 
326 /// Computes all eigenvalues and, optionally, eigenvectors of a complex
327 /// Hermitian band matrix.
328 void hbev(char jobz, char uplo, f_int n, f_int kd, f_cfloat *ab, f_int ldab, f_float *w, f_cfloat *z, f_int ldz, f_cfloat *work, f_float *rwork, ref f_int info) {
329     chbev_(&jobz, &uplo, &n, &kd, ab, &ldab, w, z, &ldz, work, rwork, &info, 1, 1);
330 }
331 void hbev(char jobz, char uplo, f_int n, f_int kd, f_cdouble *ab, f_int ldab, f_double *w, f_cdouble *z, f_int ldz, f_cdouble *work, f_double *rwork, ref f_int info) {
332     zhbev_(&jobz, &uplo, &n, &kd, ab, &ldab, w, z, &ldz, work, rwork, &info, 1, 1);
333 }
334 
335 /// Computes all eigenvalues, and optionally, eigenvectors of a real
336 /// symmetric band matrix.  If eigenvectors are desired, it uses a
337 /// divide and conquer algorithm.
338 void sbevd(char jobz, char uplo, f_int n, f_int kd, f_float *ab, f_int ldab, f_float *w, f_float *z, f_int ldz, f_float *work, f_int lwork, f_int *iwork, f_int liwork, ref f_int info) {
339     ssbevd_(&jobz, &uplo, &n, &kd, ab, &ldab, w, z, &ldz, work, &lwork, iwork, &liwork, &info, 1, 1);
340 }
341 void sbevd(char jobz, char uplo, f_int n, f_int kd, f_double *ab, f_int ldab, f_double *w, f_double *z, f_int ldz, f_double *work, f_int lwork, f_int *iwork, f_int liwork, ref f_int info) {
342     dsbevd_(&jobz, &uplo, &n, &kd, ab, &ldab, w, z, &ldz, work, &lwork, iwork, &liwork, &info, 1, 1);
343 }
344 
345 /// Computes all eigenvalues and, optionally, eigenvectors of a complex
346 /// Hermitian band matrix.  If eigenvectors are desired, it uses a divide
347 /// and conquer algorithm.
348 void hbevd(char jobz, char uplo, f_int n, f_int kd, f_cfloat *ab, f_int ldab, f_float *w, f_cfloat *z, f_int ldz, f_cfloat *work, f_int lwork, f_float *rwork, f_int lrwork, f_int *iwork, f_int liwork, ref f_int info) {
349     chbevd_(&jobz, &uplo, &n, &kd, ab, &ldab, w, z, &ldz, work, &lwork, rwork, &lrwork, iwork, &liwork, &info, 1, 1);
350 }
351 void hbevd(char jobz, char uplo, f_int n, f_int kd, f_cdouble *ab, f_int ldab, f_double *w, f_cdouble *z, f_int ldz, f_cdouble *work, f_int lwork, f_double *rwork, f_int lrwork, f_int *iwork, f_int liwork, ref f_int info) {
352     zhbevd_(&jobz, &uplo, &n, &kd, ab, &ldab, w, z, &ldz, work, &lwork, rwork, &lrwork, iwork, &liwork, &info, 1, 1);
353 }
354 
355 /// Computes all eigenvalues, and optionally, eigenvectors of a real
356 /// symmetric tridiagonal matrix.
357 void stev(char jobz, f_int n, f_float *d, f_float *e, f_float *z, f_int ldz, f_float *work, ref f_int info) {
358     sstev_(&jobz, &n, d, e, z, &ldz, work, &info, 1);
359 }
360 void stev(char jobz, f_int n, f_double *d, f_double *e, f_double *z, f_int ldz, f_double *work, ref f_int info) {
361     dstev_(&jobz, &n, d, e, z, &ldz, work, &info, 1);
362 }
363 
364 /// Computes all eigenvalues, and optionally, eigenvectors of a real
365 /// symmetric tridiagonal matrix.  If eigenvectors are desired, it uses
366 /// a divide and conquer algorithm.
367 void stevd(char jobz, f_int n, f_float *d, f_float *e, f_float *z, f_int ldz, f_float *work, f_int lwork, f_int *iwork, f_int liwork, ref f_int info) {
368     sstevd_(&jobz, &n, d, e, z, &ldz, work, &lwork, iwork, &liwork, &info, 1);
369 }
370 void stevd(char jobz, f_int n, f_double *d, f_double *e, f_double *z, f_int ldz, f_double *work, f_int lwork, f_int *iwork, f_int liwork, ref f_int info) {
371     dstevd_(&jobz, &n, d, e, z, &ldz, work, &lwork, iwork, &liwork, &info, 1);
372 }
373 
374 /// Computes the eigenvalues and Schur factorization of a general
375 /// matrix, and orders the factorization so that selected eigenvalues
376 /// are at the top left of the Schur form.
377 void gees(char jobvs, char sort, FCB_SGEES_SELECT select, f_int n, f_float *a, f_int lda, f_int sdim, f_float *wr, f_float *wi, f_float *vs, f_int ldvs, f_float *work, f_int lwork, f_int bwork, ref f_int info) {
378     sgees_(&jobvs, &sort, select, &n, a, &lda, &sdim, wr, wi, vs, &ldvs, work, &lwork, &bwork, &info, 1, 1);
379 }
380 void gees(char jobvs, char sort, FCB_DGEES_SELECT select, f_int n, f_double *a, f_int lda, f_int sdim, f_double *wr, f_double *wi, f_double *vs, f_int ldvs, f_double *work, f_int lwork, f_int bwork, ref f_int info) {
381     dgees_(&jobvs, &sort, select, &n, a, &lda, &sdim, wr, wi, vs, &ldvs, work, &lwork, &bwork, &info, 1, 1);
382 }
383 void gees(char jobvs, char sort, FCB_CGEES_SELECT select, f_int n, f_cfloat *a, f_int lda, f_int sdim, f_cfloat *w, f_cfloat *vs, f_int ldvs, f_cfloat *work, f_int lwork, f_float *rwork, f_int bwork, ref f_int info) {
384     cgees_(&jobvs, &sort, select, &n, a, &lda, &sdim, w, vs, &ldvs, work, &lwork, rwork, &bwork, &info, 1, 1);
385 }
386 void gees(char jobvs, char sort, FCB_ZGEES_SELECT select, f_int n, f_cdouble *a, f_int lda, f_int sdim, f_cdouble *w, f_cdouble *vs, f_int ldvs, f_cdouble *work, f_int lwork, f_double *rwork, f_int bwork, ref f_int info) {
387     zgees_(&jobvs, &sort, select, &n, a, &lda, &sdim, w, vs, &ldvs, work, &lwork, rwork, &bwork, &info, 1, 1);
388 }
389 
390 /// Computes the eigenvalues and left and right eigenvectors of
391 /// a general matrix.
392 void geev(char jobvl, char jobvr, f_int n, f_float *a, f_int lda, f_float *wr, f_float *wi, f_float *vl, f_int ldvl, f_float *vr, f_int ldvr, f_float *work, f_int lwork, ref f_int info) {
393     sgeev_(&jobvl, &jobvr, &n, a, &lda, wr, wi, vl, &ldvl, vr, &ldvr, work, &lwork, &info, 1, 1);
394 }
395 void geev(char jobvl, char jobvr, f_int n, f_double *a, f_int lda, f_double *wr, f_double *wi, f_double *vl, f_int ldvl, f_double *vr, f_int ldvr, f_double *work, f_int lwork, ref f_int info) {
396     dgeev_(&jobvl, &jobvr, &n, a, &lda, wr, wi, vl, &ldvl, vr, &ldvr, work, &lwork, &info, 1, 1);
397 }
398 void geev(char jobvl, char jobvr, f_int n, f_cfloat *a, f_int lda, f_cfloat *w, f_cfloat *vl, f_int ldvl, f_cfloat *vr, f_int ldvr, f_cfloat *work, f_int lwork, f_float *rwork, ref f_int info) {
399     cgeev_(&jobvl, &jobvr, &n, a, &lda, w, vl, &ldvl, vr, &ldvr, work, &lwork, rwork, &info, 1, 1);
400 }
401 void geev(char jobvl, char jobvr, f_int n, f_cdouble *a, f_int lda, f_cdouble *w, f_cdouble *vl, f_int ldvl, f_cdouble *vr, f_int ldvr, f_cdouble *work, f_int lwork, f_double *rwork, ref f_int info) {
402     zgeev_(&jobvl, &jobvr, &n, a, &lda, w, vl, &ldvl, vr, &ldvr, work, &lwork, rwork, &info, 1, 1);
403 }
404 
405 /// Computes the singular value decomposition (SVD) of a general
406 /// rectangular matrix.
407 void gesvd(char jobu, char jobvt, f_int m, f_int n, f_float *a, f_int lda, f_float *s, f_float *u, f_int ldu, f_float *vt, f_int ldvt, f_float *work, f_int lwork, ref f_int info) {
408     sgesvd_(&jobu, &jobvt, &m, &n, a, &lda, s, u, &ldu, vt, &ldvt, work, &lwork, &info, 1, 1);
409 }
410 void gesvd(char jobu, char jobvt, f_int m, f_int n, f_double *a, f_int lda, f_double *s, f_double *u, f_int ldu, f_double *vt, f_int ldvt, f_double *work, f_int lwork, ref f_int info) {
411     dgesvd_(&jobu, &jobvt, &m, &n, a, &lda, s, u, &ldu, vt, &ldvt, work, &lwork, &info, 1, 1);
412 }
413 void gesvd(char jobu, char jobvt, f_int m, f_int n, f_cfloat *a, f_int lda, f_float *s, f_cfloat *u, f_int ldu, f_cfloat *vt, f_int ldvt, f_cfloat *work, f_int lwork, f_float *rwork, ref f_int info) {
414     cgesvd_(&jobu, &jobvt, &m, &n, a, &lda, s, u, &ldu, vt, &ldvt, work, &lwork, rwork, &info, 1, 1);
415 }
416 void gesvd(char jobu, char jobvt, f_int m, f_int n, f_cdouble *a, f_int lda, f_double *s, f_cdouble *u, f_int ldu, f_cdouble *vt, f_int ldvt, f_cdouble *work, f_int lwork, f_double *rwork, ref f_int info) {
417     zgesvd_(&jobu, &jobvt, &m, &n, a, &lda, s, u, &ldu, vt, &ldvt, work, &lwork, rwork, &info, 1, 1);
418 }
419 
420 /// Computes the singular value decomposition (SVD) of a general
421 /// rectangular matrix using divide-and-conquer.
422 void gesdd(char jobz, f_int m, f_int n, f_float *a, f_int lda, f_float *s, f_float *u, f_int ldu, f_float *vt, f_int ldvt, f_float *work, f_int lwork, f_int *iwork, ref f_int info) {
423     sgesdd_(&jobz, &m, &n, a, &lda, s, u, &ldu, vt, &ldvt, work, &lwork, iwork, &info, 1);
424 }
425 void gesdd(char jobz, f_int m, f_int n, f_double *a, f_int lda, f_double *s, f_double *u, f_int ldu, f_double *vt, f_int ldvt, f_double *work, f_int lwork, f_int *iwork, ref f_int info) {
426     dgesdd_(&jobz, &m, &n, a, &lda, s, u, &ldu, vt, &ldvt, work, &lwork, iwork, &info, 1);
427 }
428 void gesdd(char jobz, f_int m, f_int n, f_cfloat *a, f_int lda, f_float *s, f_cfloat *u, f_int ldu, f_cfloat *vt, f_int ldvt, f_cfloat *work, f_int lwork, f_float *rwork, f_int *iwork, ref f_int info) {
429     cgesdd_(&jobz, &m, &n, a, &lda, s, u, &ldu, vt, &ldvt, work, &lwork, rwork, iwork, &info, 1);
430 }
431 void gesdd(char jobz, f_int m, f_int n, f_cdouble *a, f_int lda, f_double *s, f_cdouble *u, f_int ldu, f_cdouble *vt, f_int ldvt, f_cdouble *work, f_int lwork, f_double *rwork, f_int *iwork, ref f_int info) {
432     zgesdd_(&jobz, &m, &n, a, &lda, s, u, &ldu, vt, &ldvt, work, &lwork, rwork, iwork, &info, 1);
433 }
434 
435 /// Computes all eigenvalues and the eigenvectors of  a generalized
436 /// symmetric-definite generalized eigenproblem,
437 /// Ax= lambda Bx,  ABx= lambda x,  or BAx= lambda x.
438 void sygv(f_int itype, char jobz, char uplo, f_int n, f_float *a, f_int lda, f_float *b, f_int ldb, f_float *w, f_float *work, f_int lwork, ref f_int info) {
439     ssygv_(&itype, &jobz, &uplo, &n, a, &lda, b, &ldb, w, work, &lwork, &info, 1, 1);
440 }
441 void sygv(f_int itype, char jobz, char uplo, f_int n, f_double *a, f_int lda, f_double *b, f_int ldb, f_double *w, f_double *work, f_int lwork, ref f_int info) {
442     dsygv_(&itype, &jobz, &uplo, &n, a, &lda, b, &ldb, w, work, &lwork, &info, 1, 1);
443 }
444 
445 /// Computes all eigenvalues and the eigenvectors of  a generalized
446 /// Hermitian-definite generalized eigenproblem,
447 /// Ax= lambda Bx,  ABx= lambda x,  or BAx= lambda x.
448 void hegv(f_int itype, char jobz, char uplo, f_int n, f_cfloat *a, f_int lda, f_cfloat *b, f_int ldb, f_float *w, f_cfloat *work, f_int lwork, f_float *rwork, ref f_int info) {
449     chegv_(&itype, &jobz, &uplo, &n, a, &lda, b, &ldb, w, work, &lwork, rwork, &info, 1, 1);
450 }
451 void hegv(f_int itype, char jobz, char uplo, f_int n, f_cdouble *a, f_int lda, f_cdouble *b, f_int ldb, f_double *w, f_cdouble *work, f_int lwork, f_double *rwork, ref f_int info) {
452     zhegv_(&itype, &jobz, &uplo, &n, a, &lda, b, &ldb, w, work, &lwork, rwork, &info, 1, 1);
453 }
454 
455 /// Computes all eigenvalues and the eigenvectors of  a generalized
456 /// symmetric-definite generalized eigenproblem,
457 /// Ax= lambda Bx,  ABx= lambda x,  or BAx= lambda x.
458 /// If eigenvectors are desired, it uses a divide and conquer algorithm.
459 void sygvd(f_int itype, char jobz, char uplo, f_int n, f_float *a, f_int lda, f_float *b, f_int ldb, f_float *w, f_float *work, f_int lwork, f_int *iwork, f_int liwork, ref f_int info) {
460     ssygvd_(&itype, &jobz, &uplo, &n, a, &lda, b, &ldb, w, work, &lwork, iwork, &liwork, &info, 1, 1);
461 }
462 void sygvd(f_int itype, char jobz, char uplo, f_int n, f_double *a, f_int lda, f_double *b, f_int ldb, f_double *w, f_double *work, f_int lwork, f_int *iwork, f_int liwork, ref f_int info) {
463     dsygvd_(&itype, &jobz, &uplo, &n, a, &lda, b, &ldb, w, work, &lwork, iwork, &liwork, &info, 1, 1);
464 }
465 /// Computes all eigenvalues and the eigenvectors of  a generalized
466 /// Hermitian-definite generalized eigenproblem,
467 /// Ax= lambda Bx,  ABx= lambda x,  or BAx= lambda x.
468 /// If eigenvectors are desired, it uses a divide and conquer algorithm.
469 void hegvd(f_int itype, char jobz, char uplo, f_int n, f_cfloat *a, f_int lda, f_cfloat *b, f_int ldb, f_float *w, f_cfloat *work, f_int lwork, f_float *rwork, f_int lrwork, f_int *iwork, f_int liwork, ref f_int info) {
470     chegvd_(&itype, &jobz, &uplo, &n, a, &lda, b, &ldb, w, work, &lwork, rwork, &lrwork, iwork, &liwork, &info, 1, 1);
471 }
472 void hegvd(f_int itype, char jobz, char uplo, f_int n, f_cdouble *a, f_int lda, f_cdouble *b, f_int ldb, f_double *w, f_cdouble *work, f_int lwork, f_double *rwork, f_int lrwork, f_int *iwork, f_int liwork, ref f_int info) {
473     zhegvd_(&itype, &jobz, &uplo, &n, a, &lda, b, &ldb, w, work, &lwork, rwork, &lrwork, iwork, &liwork, &info, 1, 1);
474 }
475 
476 /// Computes all eigenvalues and eigenvectors of  a generalized
477 /// symmetric-definite generalized eigenproblem,  Ax= lambda
478 /// Bx,  ABx= lambda x,  or BAx= lambda x, where A and B are in packed
479 /// storage.
480 void spgv(f_int itype, char jobz, char uplo, f_int n, f_float *ap, f_float *bp, f_float *w, f_float *z, f_int ldz, f_float *work, ref f_int info) {
481     sspgv_(&itype, &jobz, &uplo, &n, ap, bp, w, z, &ldz, work, &info, 1, 1);
482 }
483 void spgv(f_int itype, char jobz, char uplo, f_int n, f_double *ap, f_double *bp, f_double *w, f_double *z, f_int ldz, f_double *work, ref f_int info) {
484     dspgv_(&itype, &jobz, &uplo, &n, ap, bp, w, z, &ldz, work, &info, 1, 1);
485 }
486 
487 /// Computes all eigenvalues and eigenvectors of  a generalized
488 /// Hermitian-definite generalized eigenproblem,  Ax= lambda
489 /// Bx,  ABx= lambda x,  or BAx= lambda x, where A and B are in packed
490 /// storage.
491 void hpgv(f_int itype, char jobz, char uplo, f_int n, f_cfloat *ap, f_cfloat *bp, f_float *w, f_cfloat *z, f_int ldz, f_cfloat *work, f_float *rwork, ref f_int info) {
492     chpgv_(&itype, &jobz, &uplo, &n, ap, bp, w, z, &ldz, work, rwork, &info, 1, 1);
493 }
494 void hpgv(f_int itype, char jobz, char uplo, f_int n, f_cdouble *ap, f_cdouble *bp, f_double *w, f_cdouble *z, f_int ldz, f_cdouble *work, f_double *rwork, ref f_int info) {
495     zhpgv_(&itype, &jobz, &uplo, &n, ap, bp, w, z, &ldz, work, rwork, &info, 1, 1);
496 }
497 
498 /// Computes all eigenvalues and eigenvectors of  a generalized
499 /// symmetric-definite generalized eigenproblem,  Ax= lambda
500 /// Bx,  ABx= lambda x,  or BAx= lambda x, where A and B are in packed
501 /// storage.
502 /// If eigenvectors are desired, it uses a divide and conquer algorithm.
503 void spgvd(f_int itype, char jobz, char uplo, f_int n, f_float *ap, f_float *bp, f_float *w, f_float *z, f_int ldz, f_float *work, f_int lwork, f_int *iwork, f_int liwork, ref f_int info) {
504     sspgvd_(&itype, &jobz, &uplo, &n, ap, bp, w, z, &ldz, work, &lwork, iwork, &liwork, &info, 1, 1);
505 }
506 void spgvd(f_int itype, char jobz, char uplo, f_int n, f_double *ap, f_double *bp, f_double *w, f_double *z, f_int ldz, f_double *work, f_int lwork, f_int *iwork, f_int liwork, ref f_int info) {
507     dspgvd_(&itype, &jobz, &uplo, &n, ap, bp, w, z, &ldz, work, &lwork, iwork, &liwork, &info, 1, 1);
508 }
509 
510 /// Computes all eigenvalues and eigenvectors of  a generalized
511 /// Hermitian-definite generalized eigenproblem,  Ax= lambda
512 /// Bx,  ABx= lambda x,  or BAx= lambda x, where A and B are in packed
513 /// storage.
514 /// If eigenvectors are desired, it uses a divide and conquer algorithm.
515 void hpgvd(f_int itype, char jobz, char uplo, f_int n, f_cfloat *ap, f_cfloat *bp, f_float *w, f_cfloat *z, f_int ldz, f_cfloat *work, f_int lwork, f_float *rwork, f_int lrwork, f_int *iwork, f_int liwork, ref f_int info) {
516     chpgvd_(&itype, &jobz, &uplo, &n, ap, bp, w, z, &ldz, work, &lwork, rwork, &lrwork, iwork, &liwork, &info, 1, 1);
517 }
518 void hpgvd(f_int itype, char jobz, char uplo, f_int n, f_cdouble *ap, f_cdouble *bp, f_double *w, f_cdouble *z, f_int ldz, f_cdouble *work, f_int lwork, f_double *rwork, f_int lrwork, f_int *iwork, f_int liwork, ref f_int info) {
519     zhpgvd_(&itype, &jobz, &uplo, &n, ap, bp, w, z, &ldz, work, &lwork, rwork, &lrwork, iwork, &liwork, &info, 1, 1);
520 }
521 
522 /// Computes all the eigenvalues, and optionally, the eigenvectors
523 /// of a real generalized symmetric-definite banded eigenproblem, of
524 /// the form A*x=(lambda)*B*x.  A and B are assumed to be symmetric
525 /// and banded, and B is also positive definite.
526 void sbgv(char jobz, char uplo, f_int n, f_int ka, f_int kb, f_float *ab, f_int ldab, f_float *bb, f_int ldbb, f_float *w, f_float *z, f_int ldz, f_float *work, ref f_int info) {
527     ssbgv_(&jobz, &uplo, &n, &ka, &kb, ab, &ldab, bb, &ldbb, w, z, &ldz, work, &info, 1, 1);
528 }
529 void sbgv(char jobz, char uplo, f_int n, f_int ka, f_int kb, f_double *ab, f_int ldab, f_double *bb, f_int ldbb, f_double *w, f_double *z, f_int ldz, f_double *work, ref f_int info) {
530     dsbgv_(&jobz, &uplo, &n, &ka, &kb, ab, &ldab, bb, &ldbb, w, z, &ldz, work, &info, 1, 1);
531 }
532 
533 /// Computes all the eigenvalues, and optionally, the eigenvectors
534 /// of a complex generalized Hermitian-definite banded eigenproblem, of
535 /// the form A*x=(lambda)*B*x.  A and B are assumed to be Hermitian
536 /// and banded, and B is also positive definite.
537 void hbgv(char jobz, char uplo, f_int n, f_int ka, f_int kb, f_cfloat *ab, f_int ldab, f_cfloat *bb, f_int ldbb, f_float *w, f_cfloat *z, f_int ldz, f_cfloat *work, f_float *rwork, ref f_int info) {
538     chbgv_(&jobz, &uplo, &n, &ka, &kb, ab, &ldab, bb, &ldbb, w, z, &ldz, work, rwork, &info, 1, 1);
539 }
540 void hbgv(char jobz, char uplo, f_int n, f_int ka, f_int kb, f_cdouble *ab, f_int ldab, f_cdouble *bb, f_int ldbb, f_double *w, f_cdouble *z, f_int ldz, f_cdouble *work, f_double *rwork, ref f_int info) {
541     zhbgv_(&jobz, &uplo, &n, &ka, &kb, ab, &ldab, bb, &ldbb, w, z, &ldz, work, rwork, &info, 1, 1);
542 }
543 
544 /// Computes all the eigenvalues, and optionally, the eigenvectors
545 /// of a real generalized symmetric-definite banded eigenproblem, of
546 /// the form A*x=(lambda)*B*x.  A and B are assumed to be symmetric
547 /// and banded, and B is also positive definite.
548 /// If eigenvectors are desired, it uses a divide and conquer algorithm.
549 void sbgvd(char jobz, char uplo, f_int n, f_int ka, f_int kb, f_float *ab, f_int ldab, f_float *bb, f_int ldbb, f_float *w, f_float *z, f_int ldz, f_float *work, f_int lwork, f_int *iwork, f_int liwork, ref f_int info) {
550     ssbgvd_(&jobz, &uplo, &n, &ka, &kb, ab, &ldab, bb, &ldbb, w, z, &ldz, work, &lwork, iwork, &liwork, &info, 1, 1);
551 }
552 void sbgvd(char jobz, char uplo, f_int n, f_int ka, f_int kb, f_double *ab, f_int ldab, f_double *bb, f_int ldbb, f_double *w, f_double *z, f_int ldz, f_double *work, f_int lwork, f_int *iwork, f_int liwork, ref f_int info) {
553     dsbgvd_(&jobz, &uplo, &n, &ka, &kb, ab, &ldab, bb, &ldbb, w, z, &ldz, work, &lwork, iwork, &liwork, &info, 1, 1);
554 }
555 
556 /// Computes all the eigenvalues, and optionally, the eigenvectors
557 /// of a complex generalized Hermitian-definite banded eigenproblem, of
558 /// the form A*x=(lambda)*B*x.  A and B are assumed to be Hermitian
559 /// and banded, and B is also positive definite.
560 /// If eigenvectors are desired, it uses a divide and conquer algorithm.
561 void hbgvd(char jobz, char uplo, f_int n, f_int ka, f_int kb, f_cfloat *ab, f_int ldab, f_cfloat *bb, f_int ldbb, f_float *w, f_cfloat *z, f_int ldz, f_cfloat *work, f_int lwork, f_float *rwork, f_int lrwork, f_int *iwork, f_int liwork, ref f_int info) {
562     chbgvd_(&jobz, &uplo, &n, &ka, &kb, ab, &ldab, bb, &ldbb, w, z, &ldz, work, &lwork, rwork, &lrwork, iwork, &liwork, &info, 1, 1);
563 }
564 void hbgvd(char jobz, char uplo, f_int n, f_int ka, f_int kb, f_cdouble *ab, f_int ldab, f_cdouble *bb, f_int ldbb, f_double *w, f_cdouble *z, f_int ldz, f_cdouble *work, f_int lwork, f_double *rwork, f_int lrwork, f_int *iwork, f_int liwork, ref f_int info) {
565     zhbgvd_(&jobz, &uplo, &n, &ka, &kb, ab, &ldab, bb, &ldbb, w, z, &ldz, work, &lwork, rwork, &lrwork, iwork, &liwork, &info, 1, 1);
566 }
567 
568 /// Computes the generalized eigenvalues, Schur form, and left and/or
569 /// right Schur vectors for a pair of nonsymmetric matrices
570 void gegs(char jobvsl, char jobvsr, f_int n, f_float *a, f_int lda, f_float *b, f_int ldb, f_float *alphar, f_float *alphai, f_float *betav, f_float *vsl, f_int ldvsl, f_float *vsr, f_int ldvsr, f_float *work, f_int lwork, ref f_int info) {
571     sgegs_(&jobvsl, &jobvsr, &n, a, &lda, b, &ldb, alphar, alphai, betav, vsl, &ldvsl, vsr, &ldvsr, work, &lwork, &info, 1, 1);
572 }
573 void gegs(char jobvsl, char jobvsr, f_int n, f_double *a, f_int lda, f_double *b, f_int ldb, f_double *alphar, f_double *alphai, f_double *betav, f_double *vsl, f_int ldvsl, f_double *vsr, f_int ldvsr, f_double *work, f_int lwork, ref f_int info) {
574     dgegs_(&jobvsl, &jobvsr, &n, a, &lda, b, &ldb, alphar, alphai, betav, vsl, &ldvsl, vsr, &ldvsr, work, &lwork, &info, 1, 1);
575 }
576 void gegs(char jobvsl, char jobvsr, f_int n, f_cfloat *a, f_int lda, f_cfloat *b, f_int ldb, f_cfloat *alphav, f_cfloat *betav, f_cfloat *vsl, f_int ldvsl, f_cfloat *vsr, f_int ldvsr, f_cfloat *work, f_int lwork, f_float *rwork, ref f_int info) {
577     cgegs_(&jobvsl, &jobvsr, &n, a, &lda, b, &ldb, alphav, betav, vsl, &ldvsl, vsr, &ldvsr, work, &lwork, rwork, &info, 1, 1);
578 }
579 void gegs(char jobvsl, char jobvsr, f_int n, f_cdouble *a, f_int lda, f_cdouble *b, f_int ldb, f_cdouble *alphav, f_cdouble *betav, f_cdouble *vsl, f_int ldvsl, f_cdouble *vsr, f_int ldvsr, f_cdouble *work, f_int lwork, f_double *rwork, ref f_int info) {
580     zgegs_(&jobvsl, &jobvsr, &n, a, &lda, b, &ldb, alphav, betav, vsl, &ldvsl, vsr, &ldvsr, work, &lwork, rwork, &info, 1, 1);
581 }
582 
583 /// Computes the generalized eigenvalues, Schur form, and left and/or
584 /// right Schur vectors for a pair of nonsymmetric matrices
585 void gges(char jobvsl, char jobvsr, char sort, FCB_SGGES_SELCTG selctg, f_int n, f_float *a, f_int lda, f_float *b, f_int ldb, f_int sdim, f_float *alphar, f_float *alphai, f_float *betav, f_float *vsl, f_int ldvsl, f_float *vsr, f_int ldvsr, f_float *work, f_int lwork, f_int bwork, ref f_int info) {
586     sgges_(&jobvsl, &jobvsr, &sort, selctg, &n, a, &lda, b, &ldb, &sdim, alphar, alphai, betav, vsl, &ldvsl, vsr, &ldvsr, work, &lwork, &bwork, &info, 1, 1, 1);
587 }
588 void gges(char jobvsl, char jobvsr, char sort, FCB_DGGES_DELCTG delctg, f_int n, f_double *a, f_int lda, f_double *b, f_int ldb, f_int sdim, f_double *alphar, f_double *alphai, f_double *betav, f_double *vsl, f_int ldvsl, f_double *vsr, f_int ldvsr, f_double *work, f_int lwork, f_int bwork, ref f_int info) {
589     dgges_(&jobvsl, &jobvsr, &sort, delctg, &n, a, &lda, b, &ldb, &sdim, alphar, alphai, betav, vsl, &ldvsl, vsr, &ldvsr, work, &lwork, &bwork, &info, 1, 1, 1);
590 }
591 void gges(char jobvsl, char jobvsr, char sort, FCB_CGGES_SELCTG selctg, f_int n, f_cfloat *a, f_int lda, f_cfloat *b, f_int ldb, f_int sdim, f_cfloat *alphav, f_cfloat *betav, f_cfloat *vsl, f_int ldvsl, f_cfloat *vsr, f_int ldvsr, f_cfloat *work, f_int lwork, f_float *rwork, f_int bwork, ref f_int info) {
592     cgges_(&jobvsl, &jobvsr, &sort, selctg, &n, a, &lda, b, &ldb, &sdim, alphav, betav, vsl, &ldvsl, vsr, &ldvsr, work, &lwork, rwork, &bwork, &info, 1, 1, 1);
593 }
594 void gges(char jobvsl, char jobvsr, char sort, FCB_ZGGES_DELCTG delctg, f_int n, f_cdouble *a, f_int lda, f_cdouble *b, f_int ldb, f_int sdim, f_cdouble *alphav, f_cdouble *betav, f_cdouble *vsl, f_int ldvsl, f_cdouble *vsr, f_int ldvsr, f_cdouble *work, f_int lwork, f_double *rwork, f_int bwork, ref f_int info) {
595     zgges_(&jobvsl, &jobvsr, &sort, delctg, &n, a, &lda, b, &ldb, &sdim, alphav, betav, vsl, &ldvsl, vsr, &ldvsr, work, &lwork, rwork, &bwork, &info, 1, 1, 1);
596 }
597 
598 /// Computes the generalized eigenvalues, and left and/or right
599 /// generalized eigenvectors for a pair of nonsymmetric matrices
600 void gegv(char jobvl, char jobvr, f_int n, f_float *a, f_int lda, f_float *b, f_int ldb, f_float *alphar, f_float *alphai, f_float *betav, f_float *vl, f_int ldvl, f_float *vr, f_int ldvr, f_float *work, f_int lwork, ref f_int info) {
601     sgegv_(&jobvl, &jobvr, &n, a, &lda, b, &ldb, alphar, alphai, betav, vl, &ldvl, vr, &ldvr, work, &lwork, &info, 1, 1);
602 }
603 void gegv(char jobvl, char jobvr, f_int n, f_double *a, f_int lda, f_double *b, f_int ldb, f_double *alphar, f_double *alphai, f_double *betav, f_double *vl, f_int ldvl, f_double *vr, f_int ldvr, f_double *work, f_int lwork, ref f_int info) {
604     dgegv_(&jobvl, &jobvr, &n, a, &lda, b, &ldb, alphar, alphai, betav, vl, &ldvl, vr, &ldvr, work, &lwork, &info, 1, 1);
605 }
606 void gegv(char jobvl, char jobvr, f_int n, f_cfloat *a, f_int lda, f_cfloat *b, f_int ldb, f_cfloat *alphar, f_cfloat *betav, f_cfloat *vl, f_int ldvl, f_cfloat *vr, f_int ldvr, f_cfloat *work, f_int lwork, f_float *rwork, ref f_int info) {
607     cgegv_(&jobvl, &jobvr, &n, a, &lda, b, &ldb, alphar, betav, vl, &ldvl, vr, &ldvr, work, &lwork, rwork, &info, 1, 1);
608 }
609 void gegv(char jobvl, char jobvr, f_int n, f_cdouble *a, f_int lda, f_cdouble *b, f_int ldb, f_cdouble *alphar, f_cdouble *betav, f_cdouble *vl, f_int ldvl, f_cdouble *vr, f_int ldvr, f_cdouble *work, f_int lwork, f_double *rwork, ref f_int info) {
610     zgegv_(&jobvl, &jobvr, &n, a, &lda, b, &ldb, alphar, betav, vl, &ldvl, vr, &ldvr, work, &lwork, rwork, &info, 1, 1);
611 }
612 
613 /// Computes the generalized eigenvalues, and left and/or right
614 /// generalized eigenvectors for a pair of nonsymmetric matrices
615 void ggev(char jobvl, char jobvr, f_int n, f_float *a, f_int lda, f_float *b, f_int ldb, f_float *alphar, f_float *alphai, f_float *betav, f_float *vl, f_int ldvl, f_float *vr, f_int ldvr, f_float *work, f_int lwork, ref f_int info) {
616     sggev_(&jobvl, &jobvr, &n, a, &lda, b, &ldb, alphar, alphai, betav, vl, &ldvl, vr, &ldvr, work, &lwork, &info, 1, 1);
617 }
618 void ggev(char jobvl, char jobvr, f_int n, f_double *a, f_int lda, f_double *b, f_int ldb, f_double *alphar, f_double *alphai, f_double *betav, f_double *vl, f_int ldvl, f_double *vr, f_int ldvr, f_double *work, f_int lwork, ref f_int info) {
619     dggev_(&jobvl, &jobvr, &n, a, &lda, b, &ldb, alphar, alphai, betav, vl, &ldvl, vr, &ldvr, work, &lwork, &info, 1, 1);
620 }
621 void ggev(char jobvl, char jobvr, f_int n, f_cfloat *a, f_int lda, f_cfloat *b, f_int ldb, f_cfloat *alphav, f_cfloat *betav, f_cfloat *vl, f_int ldvl, f_cfloat *vr, f_int ldvr, f_cfloat *work, f_int lwork, f_float *rwork, ref f_int info) {
622     cggev_(&jobvl, &jobvr, &n, a, &lda, b, &ldb, alphav, betav, vl, &ldvl, vr, &ldvr, work, &lwork, rwork, &info, 1, 1);
623 }
624 void ggev(char jobvl, char jobvr, f_int n, f_cdouble *a, f_int lda, f_cdouble *b, f_int ldb, f_cdouble *alphav, f_cdouble *betav, f_cdouble *vl, f_int ldvl, f_cdouble *vr, f_int ldvr, f_cdouble *work, f_int lwork, f_double *rwork, ref f_int info) {
625     zggev_(&jobvl, &jobvr, &n, a, &lda, b, &ldb, alphav, betav, vl, &ldvl, vr, &ldvr, work, &lwork, rwork, &info, 1, 1);
626 }
627 
628 /// Computes the Generalized Singular Value Decomposition
629 void ggsvd(char jobu, char jobv, char jobq, f_int m, f_int n, f_int p, f_int k, f_int l, f_float *a, f_int lda, f_float *b, f_int ldb, f_float *alphav, f_float *betav, f_float *u, f_int ldu, f_float *v, f_int ldv, f_float *q, f_int ldq, f_float *work, f_int *iwork, ref f_int info) {
630     sggsvd_(&jobu, &jobv, &jobq, &m, &n, &p, &k, &l, a, &lda, b, &ldb, alphav, betav, u, &ldu, v, &ldv, q, &ldq, work, iwork, &info, 1, 1, 1);
631 }
632 void ggsvd(char jobu, char jobv, char jobq, f_int m, f_int n, f_int p, f_int k, f_int l, f_double *a, f_int lda, f_double *b, f_int ldb, f_double *alphav, f_double *betav, f_double *u, f_int ldu, f_double *v, f_int ldv, f_double *q, f_int ldq, f_double *work, f_int *iwork, ref f_int info) {
633     dggsvd_(&jobu, &jobv, &jobq, &m, &n, &p, &k, &l, a, &lda, b, &ldb, alphav, betav, u, &ldu, v, &ldv, q, &ldq, work, iwork, &info, 1, 1, 1);
634 }
635 void ggsvd(char jobu, char jobv, char jobq, f_int m, f_int n, f_int p, f_int k, f_int l, f_cfloat *a, f_int lda, f_cfloat *b, f_int ldb, f_float *alphav, f_float *betav, f_cfloat *u, f_int ldu, f_cfloat *v, f_int ldv, f_cfloat *q, f_int ldq, f_cfloat *work, f_float *rwork, f_int *iwork, ref f_int info) {
636     cggsvd_(&jobu, &jobv, &jobq, &m, &n, &p, &k, &l, a, &lda, b, &ldb, alphav, betav, u, &ldu, v, &ldv, q, &ldq, work, rwork, iwork, &info, 1, 1, 1);
637 }
638 void ggsvd(char jobu, char jobv, char jobq, f_int m, f_int n, f_int p, f_int k, f_int l, f_cdouble *a, f_int lda, f_cdouble *b, f_int ldb, f_double *alphav, f_double *betav, f_cdouble *u, f_int ldu, f_cdouble *v, f_int ldv, f_cdouble *q, f_int ldq, f_cdouble *work, f_double *rwork, f_int *iwork, ref f_int info) {
639     zggsvd_(&jobu, &jobv, &jobq, &m, &n, &p, &k, &l, a, &lda, b, &ldb, alphav, betav, u, &ldu, v, &ldv, q, &ldq, work, rwork, iwork, &info, 1, 1, 1);
640 }
641 
642 //-----------------------------------------------------
643 //       ---- EXPERT and RRR DRIVER routines ----
644 //-----------------------------------------------------
645 
646 /// Solves a general system of linear equations AX=B, A**T X=B
647 /// or A**H X=B, and provides an estimate of the condition number
648 /// and error bounds on the solution.
649 void gesvx(char fact, char trans, f_int n, f_int nrhs, f_float *a, f_int lda, f_float *af, f_int ldaf, f_int *ipiv, char equed, f_float *r, f_float *c, f_float *b, f_int ldb, f_float *x, f_int ldx, f_float rcond, f_float *ferr, f_float *berr, f_float *work, f_int *iwork, ref f_int info) {
650     sgesvx_(&fact, &trans, &n, &nrhs, a, &lda, af, &ldaf, ipiv, &equed, r, c, b, &ldb, x, &ldx, &rcond, ferr, berr, work, iwork, &info, 1, 1, 1);
651 }
652 void gesvx(char fact, char trans, f_int n, f_int nrhs, f_double *a, f_int lda, f_double *af, f_int ldaf, f_int *ipiv, char equed, f_double *r, f_double *c, f_double *b, f_int ldb, f_double *x, f_int ldx, f_double rcond, f_double *ferr, f_double *berr, f_double *work, f_int *iwork, ref f_int info) {
653     dgesvx_(&fact, &trans, &n, &nrhs, a, &lda, af, &ldaf, ipiv, &equed, r, c, b, &ldb, x, &ldx, &rcond, ferr, berr, work, iwork, &info, 1, 1, 1);
654 }
655 void gesvx(char fact, char trans, f_int n, f_int nrhs, f_cfloat *a, f_int lda, f_cfloat *af, f_int ldaf, f_int *ipiv, char equed, f_float *r, f_float *c, f_cfloat *b, f_int ldb, f_cfloat *x, f_int ldx, f_float rcond, f_float *ferr, f_float *berr, f_cfloat *work, f_float *rwork, ref f_int info) {
656     cgesvx_(&fact, &trans, &n, &nrhs, a, &lda, af, &ldaf, ipiv, &equed, r, c, b, &ldb, x, &ldx, &rcond, ferr, berr, work, rwork, &info, 1, 1, 1);
657 }
658 void gesvx(char fact, char trans, f_int n, f_int nrhs, f_cdouble *a, f_int lda, f_cdouble *af, f_int ldaf, f_int *ipiv, char equed, f_double *r, f_double *c, f_cdouble *b, f_int ldb, f_cdouble *x, f_int ldx, f_double rcond, f_double *ferr, f_double *berr, f_cdouble *work, f_double *rwork, ref f_int info) {
659     zgesvx_(&fact, &trans, &n, &nrhs, a, &lda, af, &ldaf, ipiv, &equed, r, c, b, &ldb, x, &ldx, &rcond, ferr, berr, work, rwork, &info, 1, 1, 1);
660 }
661 
662 /// Solves a general banded system of linear equations AX=B,
663 /// A**T X=B or A**H X=B, and provides an estimate of the condition
664 /// number and error bounds on the solution.
665 void gbsvx(char fact, char trans, f_int n, f_int kl, f_int ku, f_int nrhs, f_float *ab, f_int ldab, f_float *afb, f_int ldafb, f_int *ipiv, char equed, f_float *r, f_float *c, f_float *b, f_int ldb, f_float *x, f_int ldx, f_float rcond, f_float *ferr, f_float *berr, f_float *work, f_int *iwork, ref f_int info) {
666     sgbsvx_(&fact, &trans, &n, &kl, &ku, &nrhs, ab, &ldab, afb, &ldafb, ipiv, &equed, r, c, b, &ldb, x, &ldx, &rcond, ferr, berr, work, iwork, &info, 1, 1, 1);
667 }
668 void gbsvx(char fact, char trans, f_int n, f_int kl, f_int ku, f_int nrhs, f_double *ab, f_int ldab, f_double *afb, f_int ldafb, f_int *ipiv, char equed, f_double *r, f_double *c, f_double *b, f_int ldb, f_double *x, f_int ldx, f_double rcond, f_double *ferr, f_double *berr, f_double *work, f_int *iwork, ref f_int info) {
669     dgbsvx_(&fact, &trans, &n, &kl, &ku, &nrhs, ab, &ldab, afb, &ldafb, ipiv, &equed, r, c, b, &ldb, x, &ldx, &rcond, ferr, berr, work, iwork, &info, 1, 1, 1);
670 }
671 void gbsvx(char fact, char trans, f_int n, f_int kl, f_int ku, f_int nrhs, f_cfloat *ab, f_int ldab, f_cfloat *afb, f_int ldafb, f_int *ipiv, char equed, f_float *r, f_float *c, f_cfloat *b, f_int ldb, f_cfloat *x, f_int ldx, f_float rcond, f_float *ferr, f_float *berr, f_cfloat *work, f_float *rwork, ref f_int info) {
672     cgbsvx_(&fact, &trans, &n, &kl, &ku, &nrhs, ab, &ldab, afb, &ldafb, ipiv, &equed, r, c, b, &ldb, x, &ldx, &rcond, ferr, berr, work, rwork, &info, 1, 1, 1);
673 }
674 void gbsvx(char fact, char trans, f_int n, f_int kl, f_int ku, f_int nrhs, f_cdouble *ab, f_int ldab, f_cdouble *afb, f_int ldafb, f_int *ipiv, char equed, f_double *r, f_double *c, f_cdouble *b, f_int ldb, f_cdouble *x, f_int ldx, f_double rcond, f_double *ferr, f_double *berr, f_cdouble *work, f_double *rwork, ref f_int info) {
675     zgbsvx_(&fact, &trans, &n, &kl, &ku, &nrhs, ab, &ldab, afb, &ldafb, ipiv, &equed, r, c, b, &ldb, x, &ldx, &rcond, ferr, berr, work, rwork, &info, 1, 1, 1);
676 }
677 
678 /// Solves a general tridiagonal system of linear equations AX=B,
679 /// A**T X=B or A**H X=B, and provides an estimate of the condition
680 /// number  and error bounds on the solution.
681 void gtsvx(char fact, char trans, f_int n, f_int nrhs, f_float *dl, f_float *d, f_float *du, f_float *dlf, f_float *df, f_float *duf, f_float *du2, f_int *ipiv, f_float *b, f_int ldb, f_float *x, f_int ldx, f_float rcond, f_float *ferr, f_float *berr, f_float *work, f_int *iwork, ref f_int info) {
682     sgtsvx_(&fact, &trans, &n, &nrhs, dl, d, du, dlf, df, duf, du2, ipiv, b, &ldb, x, &ldx, &rcond, ferr, berr, work, iwork, &info, 1, 1);
683 }
684 void gtsvx(char fact, char trans, f_int n, f_int nrhs, f_double *dl, f_double *d, f_double *du, f_double *dlf, f_double *df, f_double *duf, f_double *du2, f_int *ipiv, f_double *b, f_int ldb, f_double *x, f_int ldx, f_double rcond, f_double *ferr, f_double *berr, f_double *work, f_int *iwork, ref f_int info) {
685     dgtsvx_(&fact, &trans, &n, &nrhs, dl, d, du, dlf, df, duf, du2, ipiv, b, &ldb, x, &ldx, &rcond, ferr, berr, work, iwork, &info, 1, 1);
686 }
687 void gtsvx(char fact, char trans, f_int n, f_int nrhs, f_cfloat *dl, f_cfloat *d, f_cfloat *du, f_cfloat *dlf, f_cfloat *df, f_cfloat *duf, f_cfloat *du2, f_int *ipiv, f_cfloat *b, f_int ldb, f_cfloat *x, f_int ldx, f_float rcond, f_float *ferr, f_float *berr, f_cfloat *work, f_float *rwork, ref f_int info) {
688     cgtsvx_(&fact, &trans, &n, &nrhs, dl, d, du, dlf, df, duf, du2, ipiv, b, &ldb, x, &ldx, &rcond, ferr, berr, work, rwork, &info, 1, 1);
689 }
690 void gtsvx(char fact, char trans, f_int n, f_int nrhs, f_cdouble *dl, f_cdouble *d, f_cdouble *du, f_cdouble *dlf, f_cdouble *df, f_cdouble *duf, f_cdouble *du2, f_int *ipiv, f_cdouble *b, f_int ldb, f_cdouble *x, f_int ldx, f_double rcond, f_double *ferr, f_double *berr, f_cdouble *work, f_double *rwork, ref f_int info) {
691     zgtsvx_(&fact, &trans, &n, &nrhs, dl, d, du, dlf, df, duf, du2, ipiv, b, &ldb, x, &ldx, &rcond, ferr, berr, work, rwork, &info, 1, 1);
692 }
693 
694 /// Solves a symmetric positive definite system of linear
695 /// equations AX=B, and provides an estimate of the condition number
696 /// and error bounds on the solution.
697 void posvx(char fact, char uplo, f_int n, f_int nrhs, f_float *a, f_int lda, f_float *af, f_int ldaf, char equed, f_float *s, f_float *b, f_int ldb, f_float *x, f_int ldx, f_float rcond, f_float *ferr, f_float *berr, f_float *work, f_int *iwork, ref f_int info) {
698     sposvx_(&fact, &uplo, &n, &nrhs, a, &lda, af, &ldaf, &equed, s, b, &ldb, x, &ldx, &rcond, ferr, berr, work, iwork, &info, 1, 1, 1);
699 }
700 void posvx(char fact, char uplo, f_int n, f_int nrhs, f_double *a, f_int lda, f_double *af, f_int ldaf, char equed, f_double *s, f_double *b, f_int ldb, f_double *x, f_int ldx, f_double rcond, f_double *ferr, f_double *berr, f_double *work, f_int *iwork, ref f_int info) {
701     dposvx_(&fact, &uplo, &n, &nrhs, a, &lda, af, &ldaf, &equed, s, b, &ldb, x, &ldx, &rcond, ferr, berr, work, iwork, &info, 1, 1, 1);
702 }
703 void posvx(char fact, char uplo, f_int n, f_int nrhs, f_cfloat *a, f_int lda, f_cfloat *af, f_int ldaf, char equed, f_float *s, f_cfloat *b, f_int ldb, f_cfloat *x, f_int ldx, f_float rcond, f_float *ferr, f_float *berr, f_cfloat *work, f_float *rwork, ref f_int info) {
704     cposvx_(&fact, &uplo, &n, &nrhs, a, &lda, af, &ldaf, &equed, s, b, &ldb, x, &ldx, &rcond, ferr, berr, work, rwork, &info, 1, 1, 1);
705 }
706 void posvx(char fact, char uplo, f_int n, f_int nrhs, f_cdouble *a, f_int lda, f_cdouble *af, f_int ldaf, char equed, f_double *s, f_cdouble *b, f_int ldb, f_cdouble *x, f_int ldx, f_double rcond, f_double *ferr, f_double *berr, f_cdouble *work, f_double *rwork, ref f_int info) {
707     zposvx_(&fact, &uplo, &n, &nrhs, a, &lda, af, &ldaf, &equed, s, b, &ldb, x, &ldx, &rcond, ferr, berr, work, rwork, &info, 1, 1, 1);
708 }
709 
710 /// Solves a symmetric positive definite system of linear
711 /// equations AX=B, where A is held in packed storage, and provides
712 /// an estimate of the condition number and error bounds on the
713 /// solution.
714 void ppsvx(char fact, char uplo, f_int n, f_int nrhs, f_float *ap, f_float *afp, char equed, f_float *s, f_float *b, f_int ldb, f_float *x, f_int ldx, f_float rcond, f_float *ferr, f_float *berr, f_float *work, f_int *iwork, ref f_int info) {
715     sppsvx_(&fact, &uplo, &n, &nrhs, ap, afp, &equed, s, b, &ldb, x, &ldx, &rcond, ferr, berr, work, iwork, &info, 1, 1, 1);
716 }
717 void ppsvx(char fact, char uplo, f_int n, f_int nrhs, f_double *ap, f_double *afp, char equed, f_double *s, f_double *b, f_int ldb, f_double *x, f_int ldx, f_double rcond, f_double *ferr, f_double *berr, f_double *work, f_int *iwork, ref f_int info) {
718     dppsvx_(&fact, &uplo, &n, &nrhs, ap, afp, &equed, s, b, &ldb, x, &ldx, &rcond, ferr, berr, work, iwork, &info, 1, 1, 1);
719 }
720 void ppsvx(char fact, char uplo, f_int n, f_int nrhs, f_cfloat *ap, f_cfloat *afp, char equed, f_float *s, f_cfloat *b, f_int ldb, f_cfloat *x, f_int ldx, f_float rcond, f_float *ferr, f_float *berr, f_cfloat *work, f_float *rwork, ref f_int info) {
721     cppsvx_(&fact, &uplo, &n, &nrhs, ap, afp, &equed, s, b, &ldb, x, &ldx, &rcond, ferr, berr, work, rwork, &info, 1, 1, 1);
722 }
723 void ppsvx(char fact, char uplo, f_int n, f_int nrhs, f_cdouble *ap, f_cdouble *afp, char equed, f_double *s, f_cdouble *b, f_int ldb, f_cdouble *x, f_int ldx, f_double rcond, f_double *ferr, f_double *berr, f_cdouble *work, f_double *rwork, ref f_int info) {
724     zppsvx_(&fact, &uplo, &n, &nrhs, ap, afp, &equed, s, b, &ldb, x, &ldx, &rcond, ferr, berr, work, rwork, &info, 1, 1, 1);
725 }
726 
727 /// Solves a symmetric positive definite banded system
728 /// of linear equations AX=B, and provides an estimate of the condition
729 /// number and error bounds on the solution.
730 void pbsvx(char fact, char uplo, f_int n, f_int kd, f_int nrhs, f_float *ab, f_int ldab, f_float *afb, f_int ldafb, char equed, f_float *s, f_float *b, f_int ldb, f_float *x, f_int ldx, f_float rcond, f_float *ferr, f_float *berr, f_float *work, f_int *iwork, ref f_int info) {
731     spbsvx_(&fact, &uplo, &n, &kd, &nrhs, ab, &ldab, afb, &ldafb, &equed, s, b, &ldb, x, &ldx, &rcond, ferr, berr, work, iwork, &info, 1, 1, 1);
732 }
733 void pbsvx(char fact, char uplo, f_int n, f_int kd, f_int nrhs, f_double *ab, f_int ldab, f_double *afb, f_int ldafb, char equed, f_double *s, f_double *b, f_int ldb, f_double *x, f_int ldx, f_double rcond, f_double *ferr, f_double *berr, f_double *work, f_int *iwork, ref f_int info) {
734     dpbsvx_(&fact, &uplo, &n, &kd, &nrhs, ab, &ldab, afb, &ldafb, &equed, s, b, &ldb, x, &ldx, &rcond, ferr, berr, work, iwork, &info, 1, 1, 1);
735 }
736 void pbsvx(char fact, char uplo, f_int n, f_int kd, f_int nrhs, f_cfloat *ab, f_int ldab, f_cfloat *afb, f_int ldafb, char equed, f_float *s, f_cfloat *b, f_int ldb, f_cfloat *x, f_int ldx, f_float rcond, f_float *ferr, f_float *berr, f_cfloat *work, f_float *rwork, ref f_int info) {
737     cpbsvx_(&fact, &uplo, &n, &kd, &nrhs, ab, &ldab, afb, &ldafb, &equed, s, b, &ldb, x, &ldx, &rcond, ferr, berr, work, rwork, &info, 1, 1, 1);
738 }
739 void pbsvx(char fact, char uplo, f_int n, f_int kd, f_int nrhs, f_cdouble *ab, f_int ldab, f_cdouble *afb, f_int ldafb, char equed, f_double *s, f_cdouble *b, f_int ldb, f_cdouble *x, f_int ldx, f_double rcond, f_double *ferr, f_double *berr, f_cdouble *work, f_double *rwork, ref f_int info) {
740     zpbsvx_(&fact, &uplo, &n, &kd, &nrhs, ab, &ldab, afb, &ldafb, &equed, s, b, &ldb, x, &ldx, &rcond, ferr, berr, work, rwork, &info, 1, 1, 1);
741 }
742 
743 /// Solves a symmetric positive definite tridiagonal
744 /// system of linear equations AX=B, and provides an estimate of
745 /// the condition number and error bounds on the solution.
746 void ptsvx(char fact, f_int n, f_int nrhs, f_float *d, f_float *e, f_float *df, f_float *ef, f_float *b, f_int ldb, f_float *x, f_int ldx, f_float rcond, f_float *ferr, f_float *berr, f_float *work, ref f_int info) {
747     sptsvx_(&fact, &n, &nrhs, d, e, df, ef, b, &ldb, x, &ldx, &rcond, ferr, berr, work, &info, 1);
748 }
749 void ptsvx(char fact, f_int n, f_int nrhs, f_double *d, f_double *e, f_double *df, f_double *ef, f_double *b, f_int ldb, f_double *x, f_int ldx, f_double rcond, f_double *ferr, f_double *berr, f_double *work, ref f_int info) {
750     dptsvx_(&fact, &n, &nrhs, d, e, df, ef, b, &ldb, x, &ldx, &rcond, ferr, berr, work, &info, 1);
751 }
752 void ptsvx(char fact, f_int n, f_int nrhs, f_float *d, f_cfloat *e, f_float *df, f_cfloat *ef, f_cfloat *b, f_int ldb, f_cfloat *x, f_int ldx, f_float rcond, f_float *ferr, f_float *berr, f_cfloat *work, f_float *rwork, ref f_int info) {
753     cptsvx_(&fact, &n, &nrhs, d, e, df, ef, b, &ldb, x, &ldx, &rcond, ferr, berr, work, rwork, &info, 1);
754 }
755 void ptsvx(char fact, f_int n, f_int nrhs, f_double *d, f_cdouble *e, f_double *df, f_cdouble *ef, f_cdouble *b, f_int ldb, f_cdouble *x, f_int ldx, f_double rcond, f_double *ferr, f_double *berr, f_cdouble *work, f_double *rwork, ref f_int info) {
756     zptsvx_(&fact, &n, &nrhs, d, e, df, ef, b, &ldb, x, &ldx, &rcond, ferr, berr, work, rwork, &info, 1);
757 }
758 
759 /// Solves a real symmetric
760 /// indefinite system  of linear equations AX=B, and provides an
761 /// estimate of the condition number and error bounds on the solution.
762 void sysvx(char fact, char uplo, f_int n, f_int nrhs, f_float *a, f_int lda, f_float *af, f_int ldaf, f_int *ipiv, f_float *b, f_int ldb, f_float *x, f_int ldx, f_float rcond, f_float *ferr, f_float *berr, f_float *work, f_int lwork, f_int *iwork, ref f_int info) {
763     ssysvx_(&fact, &uplo, &n, &nrhs, a, &lda, af, &ldaf, ipiv, b, &ldb, x, &ldx, &rcond, ferr, berr, work, &lwork, iwork, &info, 1, 1);
764 }
765 void sysvx(char fact, char uplo, f_int n, f_int nrhs, f_double *a, f_int lda, f_double *af, f_int ldaf, f_int *ipiv, f_double *b, f_int ldb, f_double *x, f_int ldx, f_double rcond, f_double *ferr, f_double *berr, f_double *work, f_int lwork, f_int *iwork, ref f_int info) {
766     dsysvx_(&fact, &uplo, &n, &nrhs, a, &lda, af, &ldaf, ipiv, b, &ldb, x, &ldx, &rcond, ferr, berr, work, &lwork, iwork, &info, 1, 1);
767 }
768 void sysvx(char fact, char uplo, f_int n, f_int nrhs, f_cfloat *a, f_int lda, f_cfloat *af, f_int ldaf, f_int *ipiv, f_cfloat *b, f_int ldb, f_cfloat *x, f_int ldx, f_float rcond, f_float *ferr, f_float *berr, f_cfloat *work, f_int lwork, f_float *rwork, ref f_int info) {
769     csysvx_(&fact, &uplo, &n, &nrhs, a, &lda, af, &ldaf, ipiv, b, &ldb, x, &ldx, &rcond, ferr, berr, work, &lwork, rwork, &info, 1, 1);
770 }
771 void sysvx(char fact, char uplo, f_int n, f_int nrhs, f_cdouble *a, f_int lda, f_cdouble *af, f_int ldaf, f_int *ipiv, f_cdouble *b, f_int ldb, f_cdouble *x, f_int ldx, f_double rcond, f_double *ferr, f_double *berr, f_cdouble *work, f_int lwork, f_double *rwork, ref f_int info) {
772     zsysvx_(&fact, &uplo, &n, &nrhs, a, &lda, af, &ldaf, ipiv, b, &ldb, x, &ldx, &rcond, ferr, berr, work, &lwork, rwork, &info, 1, 1);
773 }
774 
775 /// Solves a complex Hermitian
776 /// indefinite system  of linear equations AX=B, and provides an
777 /// estimate of the condition number and error bounds on the solution.
778 void hesvx(char fact, char uplo, f_int n, f_int nrhs, f_cfloat *a, f_int lda, f_cfloat *af, f_int ldaf, f_int *ipiv, f_cfloat *b, f_int ldb, f_cfloat *x, f_int ldx, f_float rcond, f_float *ferr, f_float *berr, f_cfloat *work, f_int lwork, f_float *rwork, ref f_int info) {
779     chesvx_(&fact, &uplo, &n, &nrhs, a, &lda, af, &ldaf, ipiv, b, &ldb, x, &ldx, &rcond, ferr, berr, work, &lwork, rwork, &info, 1, 1);
780 }
781 void hesvx(char fact, char uplo, f_int n, f_int nrhs, f_cdouble *a, f_int lda, f_cdouble *af, f_int ldaf, f_int *ipiv, f_cdouble *b, f_int ldb, f_cdouble *x, f_int ldx, f_double rcond, f_double *ferr, f_double *berr, f_cdouble *work, f_int lwork, f_double *rwork, ref f_int info) {
782     zhesvx_(&fact, &uplo, &n, &nrhs, a, &lda, af, &ldaf, ipiv, b, &ldb, x, &ldx, &rcond, ferr, berr, work, &lwork, rwork, &info, 1, 1);
783 }
784 
785 /// Solves a real symmetric
786 /// indefinite system of linear equations AX=B, where A is held
787 /// in packed storage, and provides an estimate of the condition
788 /// number and error bounds on the solution.
789 void spsvx(char fact, char uplo, f_int n, f_int nrhs, f_float *ap, f_float *afp, f_int *ipiv, f_float *b, f_int ldb, f_float *x, f_int ldx, f_float rcond, f_float *ferr, f_float *berr, f_float *work, f_int *iwork, ref f_int info) {
790     sspsvx_(&fact, &uplo, &n, &nrhs, ap, afp, ipiv, b, &ldb, x, &ldx, &rcond, ferr, berr, work, iwork, &info, 1, 1);
791 }
792 void spsvx(char fact, char uplo, f_int n, f_int nrhs, f_double *ap, f_double *afp, f_int *ipiv, f_double *b, f_int ldb, f_double *x, f_int ldx, f_double rcond, f_double *ferr, f_double *berr, f_double *work, f_int *iwork, ref f_int info) {
793     dspsvx_(&fact, &uplo, &n, &nrhs, ap, afp, ipiv, b, &ldb, x, &ldx, &rcond, ferr, berr, work, iwork, &info, 1, 1);
794 }
795 void spsvx(char fact, char uplo, f_int n, f_int nrhs, f_cfloat *ap, f_cfloat *afp, f_int *ipiv, f_cfloat *b, f_int ldb, f_cfloat *x, f_int ldx, f_float rcond, f_float *ferr, f_float *berr, f_cfloat *work, f_float *rwork, ref f_int info) {
796     cspsvx_(&fact, &uplo, &n, &nrhs, ap, afp, ipiv, b, &ldb, x, &ldx, &rcond, ferr, berr, work, rwork, &info, 1, 1);
797 }
798 void spsvx(char fact, char uplo, f_int n, f_int nrhs, f_cdouble *ap, f_cdouble *afp, f_int *ipiv, f_cdouble *b, f_int ldb, f_cdouble *x, f_int ldx, f_double rcond, f_double *ferr, f_double *berr, f_cdouble *work, f_double *rwork, ref f_int info) {
799     zspsvx_(&fact, &uplo, &n, &nrhs, ap, afp, ipiv, b, &ldb, x, &ldx, &rcond, ferr, berr, work, rwork, &info, 1, 1);
800 }
801 
802 /// Solves a complex Hermitian
803 /// indefinite system of linear equations AX=B, where A is held
804 /// in packed storage, and provides an estimate of the condition
805 /// number and error bounds on the solution.
806 void hpsvx(char fact, char uplo, f_int n, f_int nrhs, f_cfloat *ap, f_cfloat *afp, f_int *ipiv, f_cfloat *b, f_int ldb, f_cfloat *x, f_int ldx, f_float rcond, f_float *ferr, f_float *berr, f_cfloat *work, f_float *rwork, ref f_int info) {
807     chpsvx_(&fact, &uplo, &n, &nrhs, ap, afp, ipiv, b, &ldb, x, &ldx, &rcond, ferr, berr, work, rwork, &info, 1, 1);
808 }
809 void hpsvx(char fact, char uplo, f_int n, f_int nrhs, f_cdouble *ap, f_cdouble *afp, f_int *ipiv, f_cdouble *b, f_int ldb, f_cdouble *x, f_int ldx, f_double rcond, f_double *ferr, f_double *berr, f_cdouble *work, f_double *rwork, ref f_int info) {
810     zhpsvx_(&fact, &uplo, &n, &nrhs, ap, afp, ipiv, b, &ldb, x, &ldx, &rcond, ferr, berr, work, rwork, &info, 1, 1);
811 }
812 
813 /// Computes the minimum norm least squares solution to an over-
814 /// or under-determined system of linear equations A X=B, using a
815 /// complete orthogonal factorization of A.
816 void gelsx(f_int m, f_int n, f_int nrhs, f_float *a, f_int lda, f_float *b, f_int ldb, f_int jpvt, f_float rcond, out f_int rank, f_float *work, ref f_int info) {
817     sgelsx_(&m, &n, &nrhs, a, &lda, b, &ldb, &jpvt, &rcond, &rank, work, &info);
818 }
819 void gelsx(f_int m, f_int n, f_int nrhs, f_double *a, f_int lda, f_double *b, f_int ldb, f_int jpvt, f_double rcond, out f_int rank, f_double *work, ref f_int info) {
820     dgelsx_(&m, &n, &nrhs, a, &lda, b, &ldb, &jpvt, &rcond, &rank, work, &info);
821 }
822 void gelsx(f_int m, f_int n, f_int nrhs, f_cfloat *a, f_int lda, f_cfloat *b, f_int ldb, f_int jpvt, f_float rcond, out f_int rank, f_cfloat *work, f_float *rwork, ref f_int info) {
823     cgelsx_(&m, &n, &nrhs, a, &lda, b, &ldb, &jpvt, &rcond, &rank, work, rwork, &info);
824 }
825 void gelsx(f_int m, f_int n, f_int nrhs, f_cdouble *a, f_int lda, f_cdouble *b, f_int ldb, f_int jpvt, f_double rcond, out f_int rank, f_cdouble *work, f_double *rwork, ref f_int info) {
826     zgelsx_(&m, &n, &nrhs, a, &lda, b, &ldb, &jpvt, &rcond, &rank, work, rwork, &info);
827 }
828 
829 /// Computes the minimum norm least squares solution to an over-
830 /// or under-determined system of linear equations A X=B, using a
831 /// complete orthogonal factorization of A.
832 void gelsy(f_int m, f_int n, f_int nrhs, f_float *a, f_int lda, f_float *b, f_int ldb, f_int jpvt, f_float rcond, out f_int rank, f_float *work, f_int lwork, ref f_int info) {
833     sgelsy_(&m, &n, &nrhs, a, &lda, b, &ldb, &jpvt, &rcond, &rank, work, &lwork, &info);
834 }
835 void gelsy(f_int m, f_int n, f_int nrhs, f_double *a, f_int lda, f_double *b, f_int ldb, f_int jpvt, f_double rcond, out f_int rank, f_double *work, f_int lwork, ref f_int info) {
836     dgelsy_(&m, &n, &nrhs, a, &lda, b, &ldb, &jpvt, &rcond, &rank, work, &lwork, &info);
837 }
838 void gelsy(f_int m, f_int n, f_int nrhs, f_cfloat *a, f_int lda, f_cfloat *b, f_int ldb, f_int jpvt, f_float rcond, out f_int rank, f_cfloat *work, f_int lwork, f_float *rwork, ref f_int info) {
839     cgelsy_(&m, &n, &nrhs, a, &lda, b, &ldb, &jpvt, &rcond, &rank, work, &lwork, rwork, &info);
840 }
841 void gelsy(f_int m, f_int n, f_int nrhs, f_cdouble *a, f_int lda, f_cdouble *b, f_int ldb, f_int jpvt, f_double rcond, out f_int rank, f_cdouble *work, f_int lwork, f_double *rwork, ref f_int info) {
842     zgelsy_(&m, &n, &nrhs, a, &lda, b, &ldb, &jpvt, &rcond, &rank, work, &lwork, rwork, &info);
843 }
844 
845 /// Computes the minimum norm least squares solution to an over-
846 /// or under-determined system of linear equations A X=B,  using
847 /// the singular value decomposition of A.
848 void gelss(f_int m, f_int n, f_int nrhs, f_float *a, f_int lda, f_float *b, f_int ldb, f_float *s, f_float rcond, out f_int rank, f_float *work, f_int lwork, ref f_int info) {
849     sgelss_(&m, &n, &nrhs, a, &lda, b, &ldb, s, &rcond, &rank, work, &lwork, &info);
850 }
851 void gelss(f_int m, f_int n, f_int nrhs, f_double *a, f_int lda, f_double *b, f_int ldb, f_double *s, f_double rcond, out f_int rank, f_double *work, f_int lwork, ref f_int info) {
852     dgelss_(&m, &n, &nrhs, a, &lda, b, &ldb, s, &rcond, &rank, work, &lwork, &info);
853 }
854 void gelss(f_int m, f_int n, f_int nrhs, f_cfloat *a, f_int lda, f_cfloat *b, f_int ldb, f_float *s, f_float rcond, out f_int rank, f_cfloat *work, f_int lwork, f_float *rwork, ref f_int info) {
855     cgelss_(&m, &n, &nrhs, a, &lda, b, &ldb, s, &rcond, &rank, work, &lwork, rwork, &info);
856 }
857 void gelss(f_int m, f_int n, f_int nrhs, f_cdouble *a, f_int lda, f_cdouble *b, f_int ldb, f_double *s, f_double rcond, out f_int rank, f_cdouble *work, f_int lwork, f_double *rwork, ref f_int info) {
858     zgelss_(&m, &n, &nrhs, a, &lda, b, &ldb, s, &rcond, &rank, work, &lwork, rwork, &info);
859 }
860 
861 /// Computes selected eigenvalues and eigenvectors of a symmetric matrix.
862 void syevx(char jobz, char range, char uplo, f_int n, f_float *a, f_int lda, f_float *vl, f_float *vu, f_int il, f_int iu, f_float *abstol, f_int m, f_float *w, f_float *z, f_int ldz, f_float *work, f_int lwork, f_int *iwork, f_int ifail, ref f_int info) {
863     ssyevx_(&jobz, &range, &uplo, &n, a, &lda, vl, vu, &il, &iu, abstol, &m, w, z, &ldz, work, &lwork, iwork, &ifail, &info, 1, 1, 1);
864 }
865 void syevx(char jobz, char range, char uplo, f_int n, f_double *a, f_int lda, f_double *vl, f_double *vu, f_int il, f_int iu, f_double *abstol, f_int m, f_double *w, f_double *z, f_int ldz, f_double *work, f_int lwork, f_int *iwork, f_int ifail, ref f_int info) {
866     dsyevx_(&jobz, &range, &uplo, &n, a, &lda, vl, vu, &il, &iu, abstol, &m, w, z, &ldz, work, &lwork, iwork, &ifail, &info, 1, 1, 1);
867 }
868 
869 /// Computes selected eigenvalues and eigenvectors of a Hermitian matrix.
870 void heevx(char jobz, char range, char uplo, f_int n, f_cfloat *a, f_int lda, f_float *vl, f_float *vu, f_int il, f_int iu, f_float *abstol, f_int m, f_float *w, f_cfloat *z, f_int ldz, f_cfloat *work, f_int lwork, f_float *rwork, f_int *iwork, f_int ifail, ref f_int info) {
871     cheevx_(&jobz, &range, &uplo, &n, a, &lda, vl, vu, &il, &iu, abstol, &m, w, z, &ldz, work, &lwork, rwork, iwork, &ifail, &info, 1, 1, 1);
872 }
873 void heevx(char jobz, char range, char uplo, f_int n, f_cdouble *a, f_int lda, f_double *vl, f_double *vu, f_int il, f_int iu, f_double *abstol, f_int m, f_double *w, f_cdouble *z, f_int ldz, f_cdouble *work, f_int lwork, f_double *rwork, f_int *iwork, f_int ifail, ref f_int info) {
874     zheevx_(&jobz, &range, &uplo, &n, a, &lda, vl, vu, &il, &iu, abstol, &m, w, z, &ldz, work, &lwork, rwork, iwork, &ifail, &info, 1, 1, 1);
875 }
876 
877 /// Computes selected eigenvalues, and optionally, eigenvectors of a real
878 /// symmetric matrix.  Eigenvalues are computed by the dqds
879 /// algorithm, and eigenvectors are computed from various "good" LDL^T
880 /// representations (also known as Relatively Robust Representations).
881 void syevr(char jobz, char range, char uplo, f_int n, f_float *a, f_int lda, f_float vl, f_float vu, f_int il, f_int iu, f_float abstol, out f_int m, f_float *w, f_float *z, f_int ldz, f_int *isuppz, f_float *work, f_int lwork, f_int *iwork, f_int liwork, ref f_int info) {
882     ssyevr_(&jobz, &range, &uplo, &n, a, &lda, &vl, &vu, &il, &iu, &abstol, &m, w, z, &ldz, isuppz, work, &lwork, iwork, &liwork, &info, 1, 1, 1);
883 }
884 void syevr(char jobz, char range, char uplo, f_int n, f_double *a, f_int lda, f_double vl, f_double vu, f_int il, f_int iu, f_double abstol, out f_int m, f_double *w, f_double *z, f_int ldz, f_int *isuppz, f_double *work, f_int lwork, f_int *iwork, f_int liwork, ref f_int info) {
885     dsyevr_(&jobz, &range, &uplo, &n, a, &lda, &vl, &vu, &il, &iu, &abstol, &m, w, z, &ldz, isuppz, work, &lwork, iwork, &liwork, &info, 1, 1, 1);
886 }
887 
888 /// Computes selected eigenvalues, and optionally, eigenvectors of a complex
889 /// Hermitian matrix.  Eigenvalues are computed by the dqds
890 /// algorithm, and eigenvectors are computed from various "good" LDL^T
891 /// representations (also known as Relatively Robust Representations).
892 void heevr(char jobz, char range, char uplo, f_int n, f_cfloat *a, f_int lda, f_float vl, f_float vu, f_int il, f_int iu, f_float abstol, out f_int m, f_float *w, f_cfloat *z, f_int ldz, f_int *isuppz, f_cfloat *work, f_int lwork, f_float *rwork, f_int lrwork, f_int *iwork, f_int liwork, ref f_int info) {
893     cheevr_(&jobz, &range, &uplo, &n, a, &lda, &vl, &vu, &il, &iu, &abstol, &m, w, z, &ldz,
894         isuppz, work, &lwork, rwork, &lrwork, iwork, &liwork, &info, 1, 1, 1);
895 }
896 void heevr(char jobz, char range, char uplo, f_int n, f_cdouble *a, f_int lda, f_double vl, f_double vu, f_int il, f_int iu, f_double abstol, out f_int m, f_double *w, f_cdouble *z, f_int ldz, f_int* isuppz, f_cdouble *work, f_int lwork, f_double *rwork, f_int lrwork, f_int *iwork, f_int liwork, ref f_int info) {
897     zheevr_(&jobz, &range, &uplo, &n, a, &lda, &vl, &vu, &il, &iu, &abstol, &m, w, z, &ldz, isuppz, work, &lwork, rwork, &lrwork, iwork, &liwork, &info, 1, 1, 1);
898 }
899 
900 
901 /// Computes selected eigenvalues, and optionally, the eigenvectors of
902 /// a generalized symmetric-definite generalized eigenproblem,
903 /// Ax= lambda Bx,  ABx= lambda x,  or BAx= lambda x.
904 void sygvx(f_int itype, char jobz, char range, char uplo, f_int n, f_float *a, f_int lda, f_float *b, f_int ldb, f_float *vl, f_float *vu, f_int il, f_int iu, f_float *abstol, f_int m, f_float *w, f_float *z, f_int ldz, f_float *work, f_int lwork, f_int *iwork, f_int ifail, ref f_int info) {
905     ssygvx_(&itype, &jobz, &range, &uplo, &n, a, &lda, b, &ldb, vl, vu, &il, &iu, abstol, &m, w, z, &ldz, work, &lwork, iwork, &ifail, &info, 1, 1, 1);
906 }
907 void sygvx(f_int itype, char jobz, char range, char uplo, f_int n, f_double *a, f_int lda, f_double *b, f_int ldb, f_double *vl, f_double *vu, f_int il, f_int iu, f_double *abstol, f_int m, f_double *w, f_double *z, f_int ldz, f_double *work, f_int lwork, f_int *iwork, f_int ifail, ref f_int info) {
908     dsygvx_(&itype, &jobz, &range, &uplo, &n, a, &lda, b, &ldb, vl, vu, &il, &iu, abstol, &m, w, z, &ldz, work, &lwork, iwork, &ifail, &info, 1, 1, 1);
909 }
910 
911 /// Computes selected eigenvalues, and optionally, the eigenvectors of
912 /// a generalized Hermitian-definite generalized eigenproblem,
913 /// Ax= lambda Bx,  ABx= lambda x,  or BAx= lambda x.
914 void hegvx(f_int itype, char jobz, char range, char uplo, f_int n, f_cfloat *a, f_int lda, f_cfloat *b, f_int ldb, f_float *vl, f_float *vu, f_int il, f_int iu, f_float *abstol, f_int m, f_float *w, f_cfloat *z, f_int ldz, f_cfloat *work, f_int lwork, f_float *rwork, f_int *iwork, f_int ifail, ref f_int info) {
915     chegvx_(&itype, &jobz, &range, &uplo, &n, a, &lda, b, &ldb, vl, vu, &il, &iu, abstol, &m, w, z, &ldz, work, &lwork, rwork, iwork, &ifail, &info, 1, 1, 1);
916 }
917 void hegvx(f_int itype, char jobz, char range, char uplo, f_int n, f_cdouble *a, f_int lda, f_cdouble *b, f_int ldb, f_double *vl, f_double *vu, f_int il, f_int iu, f_double *abstol, f_int m, f_double *w, f_cdouble *z, f_int ldz, f_cdouble *work, f_int lwork, f_double *rwork, f_int *iwork, f_int ifail, ref f_int info) {
918     zhegvx_(&itype, &jobz, &range, &uplo, &n, a, &lda, b, &ldb, vl, vu, &il, &iu, abstol, &m, w, z, &ldz, work, &lwork, rwork, iwork, &ifail, &info, 1, 1, 1);
919 }
920 
921 /// Computes selected eigenvalues and eigenvectors of a
922 /// symmetric matrix in packed storage.
923 void spevx(char jobz, char range, char uplo, f_int n, f_float *ap, f_float *vl, f_float *vu, f_int il, f_int iu, f_float *abstol, f_int m, f_float *w, f_float *z, f_int ldz, f_float *work, f_int *iwork, f_int ifail, ref f_int info) {
924     sspevx_(&jobz, &range, &uplo, &n, ap, vl, vu, &il, &iu, abstol, &m, w, z, &ldz, work, iwork, &ifail, &info, 1, 1, 1);
925 }
926 void spevx(char jobz, char range, char uplo, f_int n, f_double *ap, f_double *vl, f_double *vu, f_int il, f_int iu, f_double *abstol, f_int m, f_double *w, f_double *z, f_int ldz, f_double *work, f_int *iwork, f_int ifail, ref f_int info) {
927     dspevx_(&jobz, &range, &uplo, &n, ap, vl, vu, &il, &iu, abstol, &m, w, z, &ldz, work, iwork, &ifail, &info, 1, 1, 1);
928 }
929 
930 /// Computes selected eigenvalues and eigenvectors of a
931 /// Hermitian matrix in packed storage.
932 void hpevx(char jobz, char range, char uplo, f_int n, f_cfloat *ap, f_float *vl, f_float *vu, f_int il, f_int iu, f_float *abstol, f_int m, f_float *w, f_cfloat *z, f_int ldz, f_cfloat *work, f_float *rwork, f_int *iwork, f_int ifail, ref f_int info) {
933     chpevx_(&jobz, &range, &uplo, &n, ap, vl, vu, &il, &iu, abstol, &m, w, z, &ldz, work, rwork, iwork, &ifail, &info, 1, 1, 1);
934 }
935 void hpevx(char jobz, char range, char uplo, f_int n, f_cdouble *ap, f_double *vl, f_double *vu, f_int il, f_int iu, f_double *abstol, f_int m, f_double *w, f_cdouble *z, f_int ldz, f_cdouble *work, f_double *rwork, f_int *iwork, f_int ifail, ref f_int info) {
936     zhpevx_(&jobz, &range, &uplo, &n, ap, vl, vu, &il, &iu, abstol, &m, w, z, &ldz, work, rwork, iwork, &ifail, &info, 1, 1, 1);
937 }
938 
939 /// Computes selected eigenvalues, and optionally, eigenvectors of
940 /// a generalized symmetric-definite generalized eigenproblem,  Ax= lambda
941 /// Bx,  ABx= lambda x,  or BAx= lambda x, where A and B are in packed
942 /// storage.
943 void spgvx(f_int itype, char jobz, char range, char uplo, f_int n, f_float *ap, f_float *bp, f_float *vl, f_float *vu, f_int il, f_int iu, f_float *abstol, f_int m, f_float *w, f_float *z, f_int ldz, f_float *work, f_int *iwork, f_int ifail, ref f_int info) {
944     sspgvx_(&itype, &jobz, &range, &uplo, &n, ap, bp, vl, vu, &il, &iu, abstol, &m, w, z, &ldz, work, iwork, &ifail, &info, 1, 1, 1);
945 }
946 void spgvx(f_int itype, char jobz, char range, char uplo, f_int n, f_double *ap, f_double *bp, f_double *vl, f_double *vu, f_int il, f_int iu, f_double *abstol, f_int m, f_double *w, f_double *z, f_int ldz, f_double *work, f_int *iwork, f_int ifail, ref f_int info) {
947     dspgvx_(&itype, &jobz, &range, &uplo, &n, ap, bp, vl, vu, &il, &iu, abstol, &m, w, z, &ldz, work, iwork, &ifail, &info, 1, 1, 1);
948 }
949 
950 /// Computes selected eigenvalues, and optionally, the eigenvectors of
951 /// a generalized Hermitian-definite generalized eigenproblem,  Ax= lambda
952 /// Bx,  ABx= lambda x,  or BAx= lambda x, where A and B are in packed
953 /// storage.
954 void hpgvx(f_int itype, char jobz, char range, char uplo, f_int n, f_cfloat *ap, f_cfloat *bp, f_float *vl, f_float *vu, f_int il, f_int iu, f_float *abstol, f_int m, f_float *w, f_cfloat *z, f_int ldz, f_cfloat *work, f_float *rwork, f_int *iwork, f_int ifail, ref f_int info) {
955     chpgvx_(&itype, &jobz, &range, &uplo, &n, ap, bp, vl, vu, &il, &iu, abstol, &m, w, z, &ldz, work, rwork, iwork, &ifail, &info, 1, 1, 1);
956 }
957 void hpgvx(f_int itype, char jobz, char range, char uplo, f_int n, f_cdouble *ap, f_cdouble *bp, f_double *vl, f_double *vu, f_int il, f_int iu, f_double *abstol, f_int m, f_double *w, f_cdouble *z, f_int ldz, f_cdouble *work, f_double *rwork, f_int *iwork, f_int ifail, ref f_int info) {
958     zhpgvx_(&itype, &jobz, &range, &uplo, &n, ap, bp, vl, vu, &il, &iu, abstol, &m, w, z, &ldz, work, rwork, iwork, &ifail, &info, 1, 1, 1);
959 }
960 
961 /// Computes selected eigenvalues and eigenvectors of a
962 /// symmetric band matrix.
963 void sbevx(char jobz, char range, char uplo, f_int n, f_int kd, f_float *ab, f_int ldab, f_float *q, f_int ldq, f_float *vl, f_float *vu, f_int il, f_int iu, f_float *abstol, f_int m, f_float *w, f_float *z, f_int ldz, f_float *work, f_int *iwork, f_int ifail, ref f_int info) {
964     ssbevx_(&jobz, &range, &uplo, &n, &kd, ab, &ldab, q, &ldq, vl, vu, &il, &iu, abstol, &m, w, z, &ldz, work, iwork, &ifail, &info, 1, 1, 1);
965 }
966 void sbevx(char jobz, char range, char uplo, f_int n, f_int kd, f_double *ab, f_int ldab, f_double *q, f_int ldq, f_double *vl, f_double *vu, f_int il, f_int iu, f_double *abstol, f_int m, f_double *w, f_double *z, f_int ldz, f_double *work, f_int *iwork, f_int ifail, ref f_int info) {
967     dsbevx_(&jobz, &range, &uplo, &n, &kd, ab, &ldab, q, &ldq, vl, vu, &il, &iu, abstol, &m, w, z, &ldz, work, iwork, &ifail, &info, 1, 1, 1);
968 }
969 
970 /// Computes selected eigenvalues and eigenvectors of a
971 /// Hermitian band matrix.
972 void hbevx(char jobz, char range, char uplo, f_int n, f_int kd, f_cfloat *ab, f_int ldab, f_cfloat *q, f_int ldq, f_float *vl, f_float *vu, f_int il, f_int iu, f_float *abstol, f_int m, f_float *w, f_cfloat *z, f_int ldz, f_cfloat *work, f_float *rwork, f_int *iwork, f_int ifail, ref f_int info) {
973     chbevx_(&jobz, &range, &uplo, &n, &kd, ab, &ldab, q, &ldq, vl, vu, &il, &iu, abstol, &m, w, z, &ldz, work, rwork, iwork, &ifail, &info, 1, 1, 1);
974 }
975 void hbevx(char jobz, char range, char uplo, f_int n, f_int kd, f_cdouble *ab, f_int ldab, f_cdouble *q, f_int ldq, f_double *vl, f_double *vu, f_int il, f_int iu, f_double *abstol, f_int m, f_double *w, f_cdouble *z, f_int ldz, f_cdouble *work, f_double *rwork, f_int *iwork, f_int ifail, ref f_int info) {
976     zhbevx_(&jobz, &range, &uplo, &n, &kd, ab, &ldab, q, &ldq, vl, vu, &il, &iu, abstol, &m, w, z, &ldz, work, rwork, iwork, &ifail, &info, 1, 1, 1);
977 }
978 
979 /// Computes selected eigenvalues, and optionally, the eigenvectors
980 /// of a real generalized symmetric-definite banded eigenproblem, of
981 /// the form A*x=(lambda)*B*x.  A and B are assumed to be symmetric
982 /// and banded, and B is also positive definite.
983 void sbgvx(char jobz, char range, char uplo, f_int n, f_int ka, f_int kb, f_float *ab, f_int ldab, f_float *bb, f_int ldbb, f_float *q, f_int ldq, f_float *vl, f_float *vu, f_int il, f_int iu, f_float *abstol, f_int m, f_float *w, f_float *z, f_int ldz, f_float *work, f_int *iwork, f_int ifail, ref f_int info) {
984     ssbgvx_(&jobz, &range, &uplo, &n, &ka, &kb, ab, &ldab, bb, &ldbb, q, &ldq, vl, vu, &il, &iu, abstol, &m, w, z, &ldz, work, iwork, &ifail, &info, 1, 1, 1);
985 }
986 void sbgvx(char jobz, char range, char uplo, f_int n, f_int ka, f_int kb, f_double *ab, f_int ldab, f_double *bb, f_int ldbb, f_double *q, f_int ldq, f_double *vl, f_double *vu, f_int il, f_int iu, f_double *abstol, f_int m, f_double *w, f_double *z, f_int ldz, f_double *work, f_int *iwork, f_int ifail, ref f_int info) {
987     dsbgvx_(&jobz, &range, &uplo, &n, &ka, &kb, ab, &ldab, bb, &ldbb, q, &ldq, vl, vu, &il, &iu, abstol, &m, w, z, &ldz, work, iwork, &ifail, &info, 1, 1, 1);
988 }
989 
990 /// Computes selected eigenvalues, and optionally, the eigenvectors
991 /// of a complex generalized Hermitian-definite banded eigenproblem, of
992 /// the form A*x=(lambda)*B*x.  A and B are assumed to be Hermitian
993 /// and banded, and B is also positive definite.
994 void hbgvx(char jobz, char range, char uplo, f_int n, f_int ka, f_int kb, f_cfloat *ab, f_int ldab, f_cfloat *bb, f_int ldbb, f_cfloat *q, f_int ldq, f_float *vl, f_float *vu, f_int il, f_int iu, f_float *abstol, f_int m, f_float *w, f_cfloat *z, f_int ldz, f_cfloat *work, f_float *rwork, f_int *iwork, f_int ifail, ref f_int info) {
995     chbgvx_(&jobz, &range, &uplo, &n, &ka, &kb, ab, &ldab, bb, &ldbb, q, &ldq, vl, vu, &il, &iu, abstol, &m, w, z, &ldz, work, rwork, iwork, &ifail, &info, 1, 1, 1);
996 }
997 void hbgvx(char jobz, char range, char uplo, f_int n, f_int ka, f_int kb, f_cdouble *ab, f_int ldab, f_cdouble *bb, f_int ldbb, f_cdouble *q, f_int ldq, f_double *vl, f_double *vu, f_int il, f_int iu, f_double *abstol, f_int m, f_double *w, f_cdouble *z, f_int ldz, f_cdouble *work, f_double *rwork, f_int *iwork, f_int ifail, ref f_int info) {
998     zhbgvx_(&jobz, &range, &uplo, &n, &ka, &kb, ab, &ldab, bb, &ldbb, q, &ldq, vl, vu, &il, &iu, abstol, &m, w, z, &ldz, work, rwork, iwork, &ifail, &info, 1, 1, 1);
999 }
1000 
1001 /// Computes selected eigenvalues and eigenvectors of a real
1002 /// symmetric tridiagonal matrix.
1003 void stevx(char jobz, char range, f_int n, f_float *d, f_float *e, f_float *vl, f_float *vu, f_int il, f_int iu, f_float *abstol, f_int m, f_float *w, f_float *z, f_int ldz, f_float *work, f_int *iwork, f_int ifail, ref f_int info) {
1004     sstevx_(&jobz, &range, &n, d, e, vl, vu, &il, &iu, abstol, &m, w, z, &ldz, work, iwork, &ifail, &info, 1, 1);
1005 }
1006 void stevx(char jobz, char range, f_int n, f_double *d, f_double *e, f_double *vl, f_double *vu, f_int il, f_int iu, f_double *abstol, f_int m, f_double *w, f_double *z, f_int ldz, f_double *work, f_int *iwork, f_int ifail, ref f_int info) {
1007     dstevx_(&jobz, &range, &n, d, e, vl, vu, &il, &iu, abstol, &m, w, z, &ldz, work, iwork, &ifail, &info, 1, 1);
1008 }
1009 
1010 /// Computes selected eigenvalues, and optionally, eigenvectors of a real
1011 /// symmetric tridiagonal matrix.  Eigenvalues are computed by the dqds
1012 /// algorithm, and eigenvectors are computed from various "good" LDL^T
1013 /// representations (also known as Relatively Robust Representations).
1014 void stevr(char jobz, char range, f_int n, f_float *d, f_float *e, f_float *vl, f_float *vu, f_int il, f_int iu, f_float *abstol, f_int m, f_float *w, f_float *z, f_int ldz, f_int isuppz, f_float *work, f_int lwork, f_int *iwork, f_int liwork, ref f_int info) {
1015     sstevr_(&jobz, &range, &n, d, e, vl, vu, &il, &iu, abstol, &m, w, z, &ldz, &isuppz, work, &lwork, iwork, &liwork, &info, 1, 1);
1016 }
1017 void stevr(char jobz, char range, f_int n, f_double *d, f_double *e, f_double *vl, f_double *vu, f_int il, f_int iu, f_double *abstol, f_int m, f_double *w, f_double *z, f_int ldz, f_int isuppz, f_double *work, f_int lwork, f_int *iwork, f_int liwork, ref f_int info) {
1018     dstevr_(&jobz, &range, &n, d, e, vl, vu, &il, &iu, abstol, &m, w, z, &ldz, &isuppz, work, &lwork, iwork, &liwork, &info, 1, 1);
1019 }
1020 
1021 /// Computes the eigenvalues and Schur factorization of a general
1022 /// matrix, orders the factorization so that selected eigenvalues
1023 /// are at the top left of the Schur form, and computes reciprocal
1024 /// condition numbers for the average of the selected eigenvalues,
1025 /// and for the associated right invariant subspace.
1026 void geesx(char jobvs, char sort, FCB_SGEESX_SELECT select, char sense, f_int n, f_float *a, f_int lda, f_int sdim, f_float *wr, f_float *wi, f_float *vs, f_int ldvs, f_float *rconde, f_float *rcondv, f_float *work, f_int lwork, f_int *iwork, f_int liwork, f_int bwork, ref f_int info) {
1027     sgeesx_(&jobvs, &sort, select, &sense, &n, a, &lda, &sdim, wr, wi, vs, &ldvs, rconde, rcondv, work, &lwork, iwork, &liwork, &bwork, &info, 1, 1, 1);
1028 }
1029 void geesx(char jobvs, char sort, FCB_DGEESX_SELECT select, char sense, f_int n, f_double *a, f_int lda, f_int sdim, f_double *wr, f_double *wi, f_double *vs, f_int ldvs, f_double *rconde, f_double *rcondv, f_double *work, f_int lwork, f_int *iwork, f_int liwork, f_int bwork, ref f_int info) {
1030     dgeesx_(&jobvs, &sort, select, &sense, &n, a, &lda, &sdim, wr, wi, vs, &ldvs, rconde, rcondv, work, &lwork, iwork, &liwork, &bwork, &info, 1, 1, 1);
1031 }
1032 void geesx(char jobvs, char sort, FCB_CGEESX_SELECT select, char sense, f_int n, f_cfloat *a, f_int lda, f_int sdim, f_cfloat *w, f_cfloat *vs, f_int ldvs, f_float *rconde, f_float *rcondv, f_cfloat *work, f_int lwork, f_float *rwork, f_int bwork, ref f_int info) {
1033     cgeesx_(&jobvs, &sort, select, &sense, &n, a, &lda, &sdim, w, vs, &ldvs, rconde, rcondv, work, &lwork, rwork, &bwork, &info, 1, 1, 1);
1034 }
1035 void geesx(char jobvs, char sort, FCB_ZGEESX_SELECT select, char sense, f_int n, f_cdouble *a, f_int lda, f_int sdim, f_cdouble *w, f_cdouble *vs, f_int ldvs, f_double *rconde, f_double *rcondv, f_cdouble *work, f_int lwork, f_double *rwork, f_int bwork, ref f_int info) {
1036     zgeesx_(&jobvs, &sort, select, &sense, &n, a, &lda, &sdim, w, vs, &ldvs, rconde, rcondv, work, &lwork, rwork, &bwork, &info, 1, 1, 1);
1037 }
1038 
1039 /// Computes the generalized eigenvalues, the real Schur form, and,
1040 /// optionally, the left and/or right matrices of Schur vectors.
1041 void ggesx(char jobvsl, char jobvsr, char sort, FCB_SGGESX_SELCTG selctg, char sense, f_int n, f_float *a, f_int lda, f_float *b, f_int ldb, f_int sdim, f_float *alphar, f_float *alphai, f_float *betav, f_float *vsl, f_int ldvsl, f_float *vsr, f_int ldvsr, f_float *rconde, f_float *rcondv, f_float *work, f_int lwork, f_int *iwork, f_int liwork, f_int bwork, ref f_int info) {
1042     sggesx_(&jobvsl, &jobvsr, &sort, selctg, &sense, &n, a, &lda, b, &ldb, &sdim, alphar, alphai, betav, vsl, &ldvsl, vsr, &ldvsr, rconde, rcondv, work, &lwork, iwork, &liwork, &bwork, &info, 1, 1, 1, 1);
1043 }
1044 void ggesx(char jobvsl, char jobvsr, char sort, FCB_DGGESX_DELCTG delctg, char sense, f_int n, f_double *a, f_int lda, f_double *b, f_int ldb, f_int sdim, f_double *alphar, f_double *alphai, f_double *betav, f_double *vsl, f_int ldvsl, f_double *vsr, f_int ldvsr, f_double *rconde, f_double *rcondv, f_double *work, f_int lwork, f_int *iwork, f_int liwork, f_int bwork, ref f_int info) {
1045     dggesx_(&jobvsl, &jobvsr, &sort, delctg, &sense, &n, a, &lda, b, &ldb, &sdim, alphar, alphai, betav, vsl, &ldvsl, vsr, &ldvsr, rconde, rcondv, work, &lwork, iwork, &liwork, &bwork, &info, 1, 1, 1, 1);
1046 }
1047 void ggesx(char jobvsl, char jobvsr, char sort, FCB_CGGESX_SELCTG selctg, char sense, f_int n, f_cfloat *a, f_int lda, f_cfloat *b, f_int ldb, f_int sdim, f_cfloat *alphav, f_cfloat *betav, f_cfloat *vsl, f_int ldvsl, f_cfloat *vsr, f_int ldvsr, f_float *rconde, f_float *rcondv, f_cfloat *work, f_int lwork, f_float *rwork, f_int *iwork, f_int liwork, f_int bwork, ref f_int info) {
1048     cggesx_(&jobvsl, &jobvsr, &sort, selctg, &sense, &n, a, &lda, b, &ldb, &sdim, alphav, betav, vsl, &ldvsl, vsr, &ldvsr, rconde, rcondv, work, &lwork, rwork, iwork, &liwork, &bwork, &info, 1, 1, 1, 1);
1049 }
1050 void ggesx(char jobvsl, char jobvsr, char sort, FCB_ZGGESX_DELCTG delctg, char sense, f_int n, f_cdouble *a, f_int lda, f_cdouble *b, f_int ldb, f_int sdim, f_cdouble *alphav, f_cdouble *betav, f_cdouble *vsl, f_int ldvsl, f_cdouble *vsr, f_int ldvsr, f_double *rconde, f_double *rcondv, f_cdouble *work, f_int lwork, f_double *rwork, f_int *iwork, f_int liwork, f_int bwork, ref f_int info) {
1051     zggesx_(&jobvsl, &jobvsr, &sort, delctg, &sense, &n, a, &lda, b, &ldb, &sdim, alphav, betav, vsl, &ldvsl, vsr, &ldvsr, rconde, rcondv, work, &lwork, rwork, iwork, &liwork, &bwork, &info, 1, 1, 1, 1);
1052 }
1053 
1054 /// Computes the eigenvalues and left and right eigenvectors of
1055 /// a general matrix,  with preliminary balancing of the matrix,
1056 /// and computes reciprocal condition numbers for the eigenvalues
1057 /// and right eigenvectors.
1058 void geevx(char balanc, char jobvl, char jobvr, char sense, f_int n, f_float *a, f_int lda, f_float *wr, f_float *wi, f_float *vl, f_int ldvl, f_float *vr, f_int ldvr, f_int ilo, f_int ihi, f_float *scale, f_float *abnrm, f_float *rconde, f_float *rcondv, f_float *work, f_int lwork, f_int *iwork, ref f_int info) {
1059     sgeevx_(&balanc, &jobvl, &jobvr, &sense, &n, a, &lda, wr, wi, vl, &ldvl, vr, &ldvr, &ilo, &ihi, scale, abnrm, rconde, rcondv, work, &lwork, iwork, &info, 1, 1, 1, 1);
1060 }
1061 void geevx(char balanc, char jobvl, char jobvr, char sense, f_int n, f_double *a, f_int lda, f_double *wr, f_double *wi, f_double *vl, f_int ldvl, f_double *vr, f_int ldvr, f_int ilo, f_int ihi, f_double *scale, f_double *abnrm, f_double *rconde, f_double *rcondv, f_double *work, f_int lwork, f_int *iwork, ref f_int info) {
1062     dgeevx_(&balanc, &jobvl, &jobvr, &sense, &n, a, &lda, wr, wi, vl, &ldvl, vr, &ldvr, &ilo, &ihi, scale, abnrm, rconde, rcondv, work, &lwork, iwork, &info, 1, 1, 1, 1);
1063 }
1064 void geevx(char balanc, char jobvl, char jobvr, char sense, f_int n, f_cfloat *a, f_int lda, f_cfloat *w, f_cfloat *vl, f_int ldvl, f_cfloat *vr, f_int ldvr, f_int ilo, f_int ihi, f_float *scale, f_float *abnrm, f_float *rconde, f_float *rcondv, f_cfloat *work, f_int lwork, f_float *rwork, ref f_int info) {
1065     cgeevx_(&balanc, &jobvl, &jobvr, &sense, &n, a, &lda, w, vl, &ldvl, vr, &ldvr, &ilo, &ihi, scale, abnrm, rconde, rcondv, work, &lwork, rwork, &info, 1, 1, 1, 1);
1066 }
1067 void geevx(char balanc, char jobvl, char jobvr, char sense, f_int n, f_cdouble *a, f_int lda, f_cdouble *w, f_cdouble *vl, f_int ldvl, f_cdouble *vr, f_int ldvr, f_int ilo, f_int ihi, f_double *scale, f_double *abnrm, f_double *rconde, f_double *rcondv, f_cdouble *work, f_int lwork, f_double *rwork, ref f_int info) {
1068     zgeevx_(&balanc, &jobvl, &jobvr, &sense, &n, a, &lda, w, vl, &ldvl, vr, &ldvr, &ilo, &ihi, scale, abnrm, rconde, rcondv, work, &lwork, rwork, &info, 1, 1, 1, 1);
1069 }
1070 
1071 /// Computes the generalized eigenvalues, and optionally, the left
1072 /// and/or right generalized eigenvectors.
1073 void ggevx(char balanc, char jobvl, char jobvr, char sense, f_int n, f_float *a, f_int lda, f_float *b, f_int ldb, f_float *alphar, f_float *alphai, f_float *betav, f_float *vl, f_int ldvl, f_float *vr, f_int ldvr, f_int ilo, f_int ihi, f_float *lscale, f_float *rscale, f_float *abnrm, f_float *bbnrm, f_float *rconde, f_float *rcondv, f_float *work, f_int lwork, f_int *iwork, f_int bwork, ref f_int info) {
1074     sggevx_(&balanc, &jobvl, &jobvr, &sense, &n, a, &lda, b, &ldb, alphar, alphai, betav, vl, &ldvl, vr, &ldvr, &ilo, &ihi, lscale, rscale, abnrm, bbnrm, rconde, rcondv, work, &lwork, iwork, &bwork, &info, 1, 1, 1, 1);
1075 }
1076 void ggevx(char balanc, char jobvl, char jobvr, char sense, f_int n, f_double *a, f_int lda, f_double *b, f_int ldb, f_double *alphar, f_double *alphai, f_double *betav, f_double *vl, f_int ldvl, f_double *vr, f_int ldvr, f_int ilo, f_int ihi, f_double *lscale, f_double *rscale, f_double *abnrm, f_double *bbnrm, f_double *rconde, f_double *rcondv, f_double *work, f_int lwork, f_int *iwork, f_int bwork, ref f_int info) {
1077     dggevx_(&balanc, &jobvl, &jobvr, &sense, &n, a, &lda, b, &ldb, alphar, alphai, betav, vl, &ldvl, vr, &ldvr, &ilo, &ihi, lscale, rscale, abnrm, bbnrm, rconde, rcondv, work, &lwork, iwork, &bwork, &info, 1, 1, 1, 1);
1078 }
1079 void ggevx(char balanc, char jobvl, char jobvr, char sense, f_int n, f_cfloat *a, f_int lda, f_cfloat *b, f_int ldb, f_cfloat *alphav, f_cfloat *betav, f_cfloat *vl, f_int ldvl, f_cfloat *vr, f_int ldvr, f_int ilo, f_int ihi, f_float *lscale, f_float *rscale, f_float *abnrm, f_float *bbnrm, f_float *rconde, f_float *rcondv, f_cfloat *work, f_int lwork, f_float *rwork, f_int *iwork, f_int bwork, ref f_int info) {
1080     cggevx_(&balanc, &jobvl, &jobvr, &sense, &n, a, &lda, b, &ldb, alphav, betav, vl, &ldvl, vr, &ldvr, &ilo, &ihi, lscale, rscale, abnrm, bbnrm, rconde, rcondv, work, &lwork, rwork, iwork, &bwork, &info, 1, 1, 1, 1);
1081 }
1082 void ggevx(char balanc, char jobvl, char jobvr, char sense, f_int n, f_cdouble *a, f_int lda, f_cdouble *b, f_int ldb, f_cdouble *alphav, f_cdouble *betav, f_cdouble *vl, f_int ldvl, f_cdouble *vr, f_int ldvr, f_int ilo, f_int ihi, f_double *lscale, f_double *rscale, f_double *abnrm, f_double *bbnrm, f_double *rconde, f_double *rcondv, f_cdouble *work, f_int lwork, f_double *rwork, f_int *iwork, f_int bwork, ref f_int info) {
1083     zggevx_(&balanc, &jobvl, &jobvr, &sense, &n, a, &lda, b, &ldb, alphav, betav, vl, &ldvl, vr, &ldvr, &ilo, &ihi, lscale, rscale, abnrm, bbnrm, rconde, rcondv, work, &lwork, rwork, iwork, &bwork, &info, 1, 1, 1, 1);
1084 }
1085 
1086 
1087 
1088 //----------------------------------------
1089 //    ---- COMPUTATIONAL routines ----
1090 //----------------------------------------
1091 
1092 
1093 /// Computes the singular value decomposition (SVD) of a real bidiagonal
1094 /// matrix, using a divide and conquer method.
1095 void bdsdc(char uplo, char compq, f_int n, f_float *d, f_float *e, f_float *u, f_int ldu, f_float *vt, f_int ldvt, f_float *q, f_int iq, f_float *work, f_int *iwork, ref f_int info) {
1096     sbdsdc_(&uplo, &compq, &n, d, e, u, &ldu, vt, &ldvt, q, &iq, work, iwork, &info, 1, 1);
1097 }
1098 void bdsdc(char uplo, char compq, f_int n, f_double *d, f_double *e, f_double *u, f_int ldu, f_double *vt, f_int ldvt, f_double *q, f_int iq, f_double *work, f_int *iwork, ref f_int info) {
1099     dbdsdc_(&uplo, &compq, &n, d, e, u, &ldu, vt, &ldvt, q, &iq, work, iwork, &info, 1, 1);
1100 }
1101 
1102 /// Computes the singular value decomposition (SVD) of a real bidiagonal
1103 /// matrix, using the bidiagonal QR algorithm.
1104 void bdsqr(char uplo, f_int n, f_int ncvt, f_int nru, f_int ncc, f_float *d, f_float *e, f_float *vt, f_int ldvt, f_float *u, f_int ldu, f_float *c, f_int ldc, f_float *work, ref f_int info) {
1105     sbdsqr_(&uplo, &n, &ncvt, &nru, &ncc, d, e, vt, &ldvt, u, &ldu, c, &ldc, work, &info, 1);
1106 }
1107 void bdsqr(char uplo, f_int n, f_int ncvt, f_int nru, f_int ncc, f_double *d, f_double *e, f_double *vt, f_int ldvt, f_double *u, f_int ldu, f_double *c, f_int ldc, f_double *work, ref f_int info) {
1108     dbdsqr_(&uplo, &n, &ncvt, &nru, &ncc, d, e, vt, &ldvt, u, &ldu, c, &ldc, work, &info, 1);
1109 }
1110 void bdsqr(char uplo, f_int n, f_int ncvt, f_int nru, f_int ncc, f_float *d, f_float *e, f_cfloat *vt, f_int ldvt, f_cfloat *u, f_int ldu, f_cfloat *c, f_int ldc, f_float *rwork, ref f_int info) {
1111     cbdsqr_(&uplo, &n, &ncvt, &nru, &ncc, d, e, vt, &ldvt, u, &ldu, c, &ldc, rwork, &info, 1);
1112 }
1113 void bdsqr(char uplo, f_int n, f_int ncvt, f_int nru, f_int ncc, f_double *d, f_double *e, f_cdouble *vt, f_int ldvt, f_cdouble *u, f_int ldu, f_cdouble *c, f_int ldc, f_double *rwork, ref f_int info) {
1114     zbdsqr_(&uplo, &n, &ncvt, &nru, &ncc, d, e, vt, &ldvt, u, &ldu, c, &ldc, rwork, &info, 1);
1115 }
1116 
1117 /// Computes the reciprocal condition numbers for the eigenvectors of a
1118 /// real symmetric or complex Hermitian matrix or for the left or right
1119 /// singular vectors of a general matrix.
1120 void disna(char job, f_int m, f_int n, f_float *d, f_float *sep, ref f_int info) {
1121     sdisna_(&job, &m, &n, d, sep, &info, 1);
1122 }
1123 void disna(char job, f_int m, f_int n, f_double *d, f_double *sep, ref f_int info) {
1124     ddisna_(&job, &m, &n, d, sep, &info, 1);
1125 }
1126 
1127 /// Reduces a general band matrix to real upper bidiagonal form
1128 /// by an orthogonal transformation.
1129 void gbbrd(char vect, f_int m, f_int n, f_int ncc, f_int kl, f_int ku, f_float *ab, f_int ldab, f_float *d, f_float *e, f_float *q, f_int ldq, f_float *pt, f_int ldpt, f_float *c, f_int ldc, f_float *work, ref f_int info) {
1130     sgbbrd_(&vect, &m, &n, &ncc, &kl, &ku, ab, &ldab, d, e, q, &ldq, pt, &ldpt, c, &ldc, work, &info, 1);
1131 }
1132 void gbbrd(char vect, f_int m, f_int n, f_int ncc, f_int kl, f_int ku, f_double *ab, f_int ldab, f_double *d, f_double *e, f_double *q, f_int ldq, f_double *pt, f_int ldpt, f_double *c, f_int ldc, f_double *work, ref f_int info) {
1133     dgbbrd_(&vect, &m, &n, &ncc, &kl, &ku, ab, &ldab, d, e, q, &ldq, pt, &ldpt, c, &ldc, work, &info, 1);
1134 }
1135 void gbbrd(char vect, f_int m, f_int n, f_int ncc, f_int kl, f_int ku, f_cfloat *ab, f_int ldab, f_float *d, f_float *e, f_cfloat *q, f_int ldq, f_cfloat *pt, f_int ldpt, f_cfloat *c, f_int ldc, f_cfloat *work, f_float *rwork, ref f_int info) {
1136     cgbbrd_(&vect, &m, &n, &ncc, &kl, &ku, ab, &ldab, d, e, q, &ldq, pt, &ldpt, c, &ldc, work, rwork, &info, 1);
1137 }
1138 void gbbrd(char vect, f_int m, f_int n, f_int ncc, f_int kl, f_int ku, f_cdouble *ab, f_int ldab, f_double *d, f_double *e, f_cdouble *q, f_int ldq, f_cdouble *pt, f_int ldpt, f_cdouble *c, f_int ldc, f_cdouble *work, f_double *rwork, ref f_int info) {
1139     zgbbrd_(&vect, &m, &n, &ncc, &kl, &ku, ab, &ldab, d, e, q, &ldq, pt, &ldpt, c, &ldc, work, rwork, &info, 1);
1140 }
1141 
1142 /// Estimates the reciprocal of the condition number of a general
1143 /// band matrix, in either the 1-norm or the infinity-norm, using
1144 /// the LU factorization computed by SGBTRF.
1145 void gbcon(char norm, f_int n, f_int kl, f_int ku, f_float *ab, f_int ldab, f_int *ipiv, f_float *anorm, f_float rcond, f_float *work, f_int *iwork, ref f_int info) {
1146     sgbcon_(&norm, &n, &kl, &ku, ab, &ldab, ipiv, anorm, &rcond, work, iwork, &info, 1);
1147 }
1148 void gbcon(char norm, f_int n, f_int kl, f_int ku, f_double *ab, f_int ldab, f_int *ipiv, f_double *anorm, f_double rcond, f_double *work, f_int *iwork, ref f_int info) {
1149     dgbcon_(&norm, &n, &kl, &ku, ab, &ldab, ipiv, anorm, &rcond, work, iwork, &info, 1);
1150 }
1151 void gbcon(char norm, f_int n, f_int kl, f_int ku, f_cfloat *ab, f_int ldab, f_int *ipiv, f_float *anorm, f_float rcond, f_cfloat *work, f_float *rwork, ref f_int info) {
1152     cgbcon_(&norm, &n, &kl, &ku, ab, &ldab, ipiv, anorm, &rcond, work, rwork, &info, 1);
1153 }
1154 void gbcon(char norm, f_int n, f_int kl, f_int ku, f_cdouble *ab, f_int ldab, f_int *ipiv, f_double *anorm, f_double rcond, f_cdouble *work, f_double *rwork, ref f_int info) {
1155     zgbcon_(&norm, &n, &kl, &ku, ab, &ldab, ipiv, anorm, &rcond, work, rwork, &info, 1);
1156 }
1157 
1158 /// Computes row and column scalings to equilibrate a general band
1159 /// matrix and reduce its condition number.
1160 void gbequ(f_int m, f_int n, f_int kl, f_int ku, f_float *ab, f_int ldab, f_float *r, f_float *c, f_float *rowcnd, f_float *colcnd, f_float *amax, ref f_int info) {
1161     sgbequ_(&m, &n, &kl, &ku, ab, &ldab, r, c, rowcnd, colcnd, amax, &info);
1162 }
1163 void gbequ(f_int m, f_int n, f_int kl, f_int ku, f_double *ab, f_int ldab, f_double *r, f_double *c, f_double *rowcnd, f_double *colcnd, f_double *amax, ref f_int info) {
1164     dgbequ_(&m, &n, &kl, &ku, ab, &ldab, r, c, rowcnd, colcnd, amax, &info);
1165 }
1166 void gbequ(f_int m, f_int n, f_int kl, f_int ku, f_cfloat *ab, f_int ldab, f_float *r, f_float *c, f_float *rowcnd, f_float *colcnd, f_float *amax, ref f_int info) {
1167     cgbequ_(&m, &n, &kl, &ku, ab, &ldab, r, c, rowcnd, colcnd, amax, &info);
1168 }
1169 void gbequ(f_int m, f_int n, f_int kl, f_int ku, f_cdouble *ab, f_int ldab, f_double *r, f_double *c, f_double *rowcnd, f_double *colcnd, f_double *amax, ref f_int info) {
1170     zgbequ_(&m, &n, &kl, &ku, ab, &ldab, r, c, rowcnd, colcnd, amax, &info);
1171 }
1172 
1173 /// Improves the computed solution to a general banded system of
1174 /// linear equations AX=B, A**T X=B or A**H X=B, and provides forward
1175 /// and backward error bounds for the solution.
1176 void gbrfs(char trans, f_int n, f_int kl, f_int ku, f_int nrhs, f_float *ab, f_int ldab, f_float *afb, f_int ldafb, f_int *ipiv, f_float *b, f_int ldb, f_float *x, f_int ldx, f_float *ferr, f_float *berr, f_float *work, f_int *iwork, ref f_int info) {
1177     sgbrfs_(&trans, &n, &kl, &ku, &nrhs, ab, &ldab, afb, &ldafb, ipiv, b, &ldb, x, &ldx, ferr, berr, work, iwork, &info, 1);
1178 }
1179 void gbrfs(char trans, f_int n, f_int kl, f_int ku, f_int nrhs, f_double *ab, f_int ldab, f_double *afb, f_int ldafb, f_int *ipiv, f_double *b, f_int ldb, f_double *x, f_int ldx, f_double *ferr, f_double *berr, f_double *work, f_int *iwork, ref f_int info) {
1180     dgbrfs_(&trans, &n, &kl, &ku, &nrhs, ab, &ldab, afb, &ldafb, ipiv, b, &ldb, x, &ldx, ferr, berr, work, iwork, &info, 1);
1181 }
1182 void gbrfs(char trans, f_int n, f_int kl, f_int ku, f_int nrhs, f_cfloat *ab, f_int ldab, f_cfloat *afb, f_int ldafb, f_int *ipiv, f_cfloat *b, f_int ldb, f_cfloat *x, f_int ldx, f_float *ferr, f_float *berr, f_cfloat *work, f_float *rwork, ref f_int info) {
1183     cgbrfs_(&trans, &n, &kl, &ku, &nrhs, ab, &ldab, afb, &ldafb, ipiv, b, &ldb, x, &ldx, ferr, berr, work, rwork, &info, 1);
1184 }
1185 void gbrfs(char trans, f_int n, f_int kl, f_int ku, f_int nrhs, f_cdouble *ab, f_int ldab, f_cdouble *afb, f_int ldafb, f_int *ipiv, f_cdouble *b, f_int ldb, f_cdouble *x, f_int ldx, f_double *ferr, f_double *berr, f_cdouble *work, f_double *rwork, ref f_int info) {
1186     zgbrfs_(&trans, &n, &kl, &ku, &nrhs, ab, &ldab, afb, &ldafb, ipiv, b, &ldb, x, &ldx, ferr, berr, work, rwork, &info, 1);
1187 }
1188 
1189 /// Computes an LU factorization of a general band matrix, using
1190 /// partial pivoting with row interchanges.
1191 void gbtrf(f_int m, f_int n, f_int kl, f_int ku, f_float *ab, f_int ldab, f_int *ipiv, ref f_int info) {
1192     sgbtrf_(&m, &n, &kl, &ku, ab, &ldab, ipiv, &info);
1193 }
1194 void gbtrf(f_int m, f_int n, f_int kl, f_int ku, f_double *ab, f_int ldab, f_int *ipiv, ref f_int info) {
1195     dgbtrf_(&m, &n, &kl, &ku, ab, &ldab, ipiv, &info);
1196 }
1197 void gbtrf(f_int m, f_int n, f_int kl, f_int ku, f_cfloat *ab, f_int ldab, f_int *ipiv, ref f_int info) {
1198     cgbtrf_(&m, &n, &kl, &ku, ab, &ldab, ipiv, &info);
1199 }
1200 void gbtrf(f_int m, f_int n, f_int kl, f_int ku, f_cdouble *ab, f_int ldab, f_int *ipiv, ref f_int info) {
1201     zgbtrf_(&m, &n, &kl, &ku, ab, &ldab, ipiv, &info);
1202 }
1203 
1204 /// Solves a general banded system of linear equations AX=B,
1205 /// A**T X=B or A**H X=B, using the LU factorization computed
1206 /// by SGBTRF.
1207 void gbtrs(char trans, f_int n, f_int kl, f_int ku, f_int nrhs, f_float *ab, f_int ldab, f_int *ipiv, f_float *b, f_int ldb, ref f_int info) {
1208     sgbtrs_(&trans, &n, &kl, &ku, &nrhs, ab, &ldab, ipiv, b, &ldb, &info, 1);
1209 }
1210 void gbtrs(char trans, f_int n, f_int kl, f_int ku, f_int nrhs, f_double *ab, f_int ldab, f_int *ipiv, f_double *b, f_int ldb, ref f_int info) {
1211     dgbtrs_(&trans, &n, &kl, &ku, &nrhs, ab, &ldab, ipiv, b, &ldb, &info, 1);
1212 }
1213 void gbtrs(char trans, f_int n, f_int kl, f_int ku, f_int nrhs, f_cfloat *ab, f_int ldab, f_int *ipiv, f_cfloat *b, f_int ldb, ref f_int info) {
1214     cgbtrs_(&trans, &n, &kl, &ku, &nrhs, ab, &ldab, ipiv, b, &ldb, &info, 1);
1215 }
1216 void gbtrs(char trans, f_int n, f_int kl, f_int ku, f_int nrhs, f_cdouble *ab, f_int ldab, f_int *ipiv, f_cdouble *b, f_int ldb, ref f_int info) {
1217     zgbtrs_(&trans, &n, &kl, &ku, &nrhs, ab, &ldab, ipiv, b, &ldb, &info, 1);
1218 }
1219 
1220 /// Transforms eigenvectors of a balanced matrix to those of the
1221 /// original matrix supplied to SGEBAL.
1222 void gebak(char job, char side, f_int n, f_int ilo, f_int ihi, f_float *scale, f_int m, f_float *v, f_int ldv, ref f_int info) {
1223     sgebak_(&job, &side, &n, &ilo, &ihi, scale, &m, v, &ldv, &info, 1, 1);
1224 }
1225 void gebak(char job, char side, f_int n, f_int ilo, f_int ihi, f_double *scale, f_int m, f_double *v, f_int ldv, ref f_int info) {
1226     dgebak_(&job, &side, &n, &ilo, &ihi, scale, &m, v, &ldv, &info, 1, 1);
1227 }
1228 void gebak(char job, char side, f_int n, f_int ilo, f_int ihi, f_float *scale, f_int m, f_cfloat *v, f_int ldv, ref f_int info) {
1229     cgebak_(&job, &side, &n, &ilo, &ihi, scale, &m, v, &ldv, &info, 1, 1);
1230 }
1231 void gebak(char job, char side, f_int n, f_int ilo, f_int ihi, f_double *scale, f_int m, f_cdouble *v, f_int ldv, ref f_int info) {
1232     zgebak_(&job, &side, &n, &ilo, &ihi, scale, &m, v, &ldv, &info, 1, 1);
1233 }
1234 
1235 /// Balances a general matrix in order to improve the accuracy
1236 /// of computed eigenvalues.
1237 void gebal(char job, f_int n, f_float *a, f_int lda, f_int ilo, f_int ihi, f_float *scale, ref f_int info) {
1238     sgebal_(&job, &n, a, &lda, &ilo, &ihi, scale, &info, 1);
1239 }
1240 void gebal(char job, f_int n, f_double *a, f_int lda, f_int ilo, f_int ihi, f_double *scale, ref f_int info) {
1241     dgebal_(&job, &n, a, &lda, &ilo, &ihi, scale, &info, 1);
1242 }
1243 void gebal(char job, f_int n, f_cfloat *a, f_int lda, f_int ilo, f_int ihi, f_float *scale, ref f_int info) {
1244     cgebal_(&job, &n, a, &lda, &ilo, &ihi, scale, &info, 1);
1245 }
1246 void gebal(char job, f_int n, f_cdouble *a, f_int lda, f_int ilo, f_int ihi, f_double *scale, ref f_int info) {
1247     zgebal_(&job, &n, a, &lda, &ilo, &ihi, scale, &info, 1);
1248 }
1249 
1250 /// Reduces a general rectangular matrix to real bidiagonal form
1251 /// by an orthogonal transformation.
1252 void gebrd(f_int m, f_int n, f_float *a, f_int lda, f_float *d, f_float *e, f_float *tauq, f_float *taup, f_float *work, f_int lwork, ref f_int info) {
1253     sgebrd_(&m, &n, a, &lda, d, e, tauq, taup, work, &lwork, &info);
1254 }
1255 void gebrd(f_int m, f_int n, f_double *a, f_int lda, f_double *d, f_double *e, f_double *tauq, f_double *taup, f_double *work, f_int lwork, ref f_int info) {
1256     dgebrd_(&m, &n, a, &lda, d, e, tauq, taup, work, &lwork, &info);
1257 }
1258 void gebrd(f_int m, f_int n, f_cfloat *a, f_int lda, f_float *d, f_float *e, f_cfloat *tauq, f_cfloat *taup, f_cfloat *work, f_int lwork, ref f_int info) {
1259     cgebrd_(&m, &n, a, &lda, d, e, tauq, taup, work, &lwork, &info);
1260 }
1261 void gebrd(f_int m, f_int n, f_cdouble *a, f_int lda, f_double *d, f_double *e, f_cdouble *tauq, f_cdouble *taup, f_cdouble *work, f_int lwork, ref f_int info) {
1262     zgebrd_(&m, &n, a, &lda, d, e, tauq, taup, work, &lwork, &info);
1263 }
1264 
1265 /// Estimates the reciprocal of the condition number of a general
1266 /// matrix, in either the 1-norm or the infinity-norm, using the
1267 /// LU factorization computed by SGETRF.
1268 void gecon(char norm, f_int n, f_float *a, f_int lda, f_float *anorm, f_float rcond, f_float *work, f_int *iwork, ref f_int info) {
1269     sgecon_(&norm, &n, a, &lda, anorm, &rcond, work, iwork, &info, 1);
1270 }
1271 void gecon(char norm, f_int n, f_double *a, f_int lda, f_double *anorm, f_double rcond, f_double *work, f_int *iwork, ref f_int info) {
1272     dgecon_(&norm, &n, a, &lda, anorm, &rcond, work, iwork, &info, 1);
1273 }
1274 void gecon(char norm, f_int n, f_cfloat *a, f_int lda, f_float *anorm, f_float rcond, f_cfloat *work, f_float *rwork, ref f_int info) {
1275     cgecon_(&norm, &n, a, &lda, anorm, &rcond, work, rwork, &info, 1);
1276 }
1277 void gecon(char norm, f_int n, f_cdouble *a, f_int lda, f_double *anorm, f_double rcond, f_cdouble *work, f_double *rwork, ref f_int info) {
1278     zgecon_(&norm, &n, a, &lda, anorm, &rcond, work, rwork, &info, 1);
1279 }
1280 
1281 /// Computes row and column scalings to equilibrate a general
1282 /// rectangular matrix and reduce its condition number.
1283 void geequ(f_int m, f_int n, f_float *a, f_int lda, f_float *r, f_float *c, f_float *rowcnd, f_float *colcnd, f_float *amax, ref f_int info) {
1284     sgeequ_(&m, &n, a, &lda, r, c, rowcnd, colcnd, amax, &info);
1285 }
1286 void geequ(f_int m, f_int n, f_double *a, f_int lda, f_double *r, f_double *c, f_double *rowcnd, f_double *colcnd, f_double *amax, ref f_int info) {
1287     dgeequ_(&m, &n, a, &lda, r, c, rowcnd, colcnd, amax, &info);
1288 }
1289 void geequ(f_int m, f_int n, f_cfloat *a, f_int lda, f_float *r, f_float *c, f_float *rowcnd, f_float *colcnd, f_float *amax, ref f_int info) {
1290     cgeequ_(&m, &n, a, &lda, r, c, rowcnd, colcnd, amax, &info);
1291 }
1292 void geequ(f_int m, f_int n, f_cdouble *a, f_int lda, f_double *r, f_double *c, f_double *rowcnd, f_double *colcnd, f_double *amax, ref f_int info) {
1293     zgeequ_(&m, &n, a, &lda, r, c, rowcnd, colcnd, amax, &info);
1294 }
1295 
1296 /// Reduces a general matrix to upper Hessenberg form by an
1297 /// orthogonal similarity transformation.
1298 void gehrd(f_int n, f_int ilo, f_int ihi, f_float *a, f_int lda, f_float *tau, f_float *work, f_int lwork, ref f_int info) {
1299     sgehrd_(&n, &ilo, &ihi, a, &lda, tau, work, &lwork, &info);
1300 }
1301 void gehrd(f_int n, f_int ilo, f_int ihi, f_double *a, f_int lda, f_double *tau, f_double *work, f_int lwork, ref f_int info) {
1302     dgehrd_(&n, &ilo, &ihi, a, &lda, tau, work, &lwork, &info);
1303 }
1304 void gehrd(f_int n, f_int ilo, f_int ihi, f_cfloat *a, f_int lda, f_cfloat *tau, f_cfloat *work, f_int lwork, ref f_int info) {
1305     cgehrd_(&n, &ilo, &ihi, a, &lda, tau, work, &lwork, &info);
1306 }
1307 void gehrd(f_int n, f_int ilo, f_int ihi, f_cdouble *a, f_int lda, f_cdouble *tau, f_cdouble *work, f_int lwork, ref f_int info) {
1308     zgehrd_(&n, &ilo, &ihi, a, &lda, tau, work, &lwork, &info);
1309 }
1310 
1311 /// Computes an LQ factorization of a general rectangular matrix.
1312 void gelqf(f_int m, f_int n, f_float *a, f_int lda, f_float *tau, f_float *work, f_int lwork, ref f_int info) {
1313     sgelqf_(&m, &n, a, &lda, tau, work, &lwork, &info);
1314 }
1315 void gelqf(f_int m, f_int n, f_double *a, f_int lda, f_double *tau, f_double *work, f_int lwork, ref f_int info) {
1316     dgelqf_(&m, &n, a, &lda, tau, work, &lwork, &info);
1317 }
1318 void gelqf(f_int m, f_int n, f_cfloat *a, f_int lda, f_cfloat *tau, f_cfloat *work, f_int lwork, ref f_int info) {
1319     cgelqf_(&m, &n, a, &lda, tau, work, &lwork, &info);
1320 }
1321 void gelqf(f_int m, f_int n, f_cdouble *a, f_int lda, f_cdouble *tau, f_cdouble *work, f_int lwork, ref f_int info) {
1322     zgelqf_(&m, &n, a, &lda, tau, work, &lwork, &info);
1323 }
1324 
1325 /// Computes a QL factorization of a general rectangular matrix.
1326 void geqlf(f_int m, f_int n, f_float *a, f_int lda, f_float *tau, f_float *work, f_int lwork, ref f_int info) {
1327     sgeqlf_(&m, &n, a, &lda, tau, work, &lwork, &info);
1328 }
1329 void geqlf(f_int m, f_int n, f_double *a, f_int lda, f_double *tau, f_double *work, f_int lwork, ref f_int info) {
1330     dgeqlf_(&m, &n, a, &lda, tau, work, &lwork, &info);
1331 }
1332 void geqlf(f_int m, f_int n, f_cfloat *a, f_int lda, f_cfloat *tau, f_cfloat *work, f_int lwork, ref f_int info) {
1333     cgeqlf_(&m, &n, a, &lda, tau, work, &lwork, &info);
1334 }
1335 void geqlf(f_int m, f_int n, f_cdouble *a, f_int lda, f_cdouble *tau, f_cdouble *work, f_int lwork, ref f_int info) {
1336     zgeqlf_(&m, &n, a, &lda, tau, work, &lwork, &info);
1337 }
1338 
1339 /// Computes a QR factorization with column pivoting of a general
1340 /// rectangular matrix using Level 3 BLAS.
1341 void geqp3(f_int m, f_int n, f_float *a, f_int lda, f_int jpvt, f_float *tau, f_float *work, f_int lwork, ref f_int info) {
1342     sgeqp3_(&m, &n, a, &lda, &jpvt, tau, work, &lwork, &info);
1343 }
1344 void geqp3(f_int m, f_int n, f_double *a, f_int lda, f_int jpvt, f_double *tau, f_double *work, f_int lwork, ref f_int info) {
1345     dgeqp3_(&m, &n, a, &lda, &jpvt, tau, work, &lwork, &info);
1346 }
1347 void geqp3(f_int m, f_int n, f_cfloat *a, f_int lda, f_int jpvt, f_cfloat *tau, f_cfloat *work, f_int lwork, f_float *rwork, ref f_int info) {
1348     cgeqp3_(&m, &n, a, &lda, &jpvt, tau, work, &lwork, rwork, &info);
1349 }
1350 void geqp3(f_int m, f_int n, f_cdouble *a, f_int lda, f_int jpvt, f_cdouble *tau, f_cdouble *work, f_int lwork, f_double *rwork, ref f_int info) {
1351     zgeqp3_(&m, &n, a, &lda, &jpvt, tau, work, &lwork, rwork, &info);
1352 }
1353 
1354 /// Computes a QR factorization with column pivoting of a general
1355 /// rectangular matrix.
1356 void geqpf(f_int m, f_int n, f_float *a, f_int lda, f_int jpvt, f_float *tau, f_float *work, ref f_int info) {
1357     sgeqpf_(&m, &n, a, &lda, &jpvt, tau, work, &info);
1358 }
1359 void geqpf(f_int m, f_int n, f_double *a, f_int lda, f_int jpvt, f_double *tau, f_double *work, ref f_int info) {
1360     dgeqpf_(&m, &n, a, &lda, &jpvt, tau, work, &info);
1361 }
1362 void geqpf(f_int m, f_int n, f_cfloat *a, f_int lda, f_int jpvt, f_cfloat *tau, f_cfloat *work, f_float *rwork, ref f_int info) {
1363     cgeqpf_(&m, &n, a, &lda, &jpvt, tau, work, rwork, &info);
1364 }
1365 void geqpf(f_int m, f_int n, f_cdouble *a, f_int lda, f_int jpvt, f_cdouble *tau, f_cdouble *work, f_double *rwork, ref f_int info) {
1366     zgeqpf_(&m, &n, a, &lda, &jpvt, tau, work, rwork, &info);
1367 }
1368 
1369 /// Computes a QR factorization of a general rectangular matrix.
1370 void geqrf(f_int m, f_int n, f_float *a, f_int lda, f_float *tau, f_float *work, f_int lwork, ref f_int info) {
1371     sgeqrf_(&m, &n, a, &lda, tau, work, &lwork, &info);
1372 }
1373 void geqrf(f_int m, f_int n, f_double *a, f_int lda, f_double *tau, f_double *work, f_int lwork, ref f_int info) {
1374     dgeqrf_(&m, &n, a, &lda, tau, work, &lwork, &info);
1375 }
1376 void geqrf(f_int m, f_int n, f_cfloat *a, f_int lda, f_cfloat *tau, f_cfloat *work, f_int lwork, ref f_int info) {
1377     cgeqrf_(&m, &n, a, &lda, tau, work, &lwork, &info);
1378 }
1379 void geqrf(f_int m, f_int n, f_cdouble *a, f_int lda, f_cdouble *tau, f_cdouble *work, f_int lwork, ref f_int info) {
1380     zgeqrf_(&m, &n, a, &lda, tau, work, &lwork, &info);
1381 }
1382 
1383 /// Improves the computed solution to a general system of linear
1384 /// equations AX=B, A**T X=B or A**H X=B, and provides forward and
1385 /// backward error bounds for the solution.
1386 void gerfs(char trans, f_int n, f_int nrhs, f_float *a, f_int lda, f_float *af, f_int ldaf, f_int *ipiv, f_float *b, f_int ldb, f_float *x, f_int ldx, f_float *ferr, f_float *berr, f_float *work, f_int *iwork, ref f_int info) {
1387     sgerfs_(&trans, &n, &nrhs, a, &lda, af, &ldaf, ipiv, b, &ldb, x, &ldx, ferr, berr, work, iwork, &info, 1);
1388 }
1389 void gerfs(char trans, f_int n, f_int nrhs, f_double *a, f_int lda, f_double *af, f_int ldaf, f_int *ipiv, f_double *b, f_int ldb, f_double *x, f_int ldx, f_double *ferr, f_double *berr, f_double *work, f_int *iwork, ref f_int info) {
1390     dgerfs_(&trans, &n, &nrhs, a, &lda, af, &ldaf, ipiv, b, &ldb, x, &ldx, ferr, berr, work, iwork, &info, 1);
1391 }
1392 void gerfs(char trans, f_int n, f_int nrhs, f_cfloat *a, f_int lda, f_cfloat *af, f_int ldaf, f_int *ipiv, f_cfloat *b, f_int ldb, f_cfloat *x, f_int ldx, f_float *ferr, f_float *berr, f_cfloat *work, f_float *rwork, ref f_int info) {
1393     cgerfs_(&trans, &n, &nrhs, a, &lda, af, &ldaf, ipiv, b, &ldb, x, &ldx, ferr, berr, work, rwork, &info, 1);
1394 }
1395 void gerfs(char trans, f_int n, f_int nrhs, f_cdouble *a, f_int lda, f_cdouble *af, f_int ldaf, f_int *ipiv, f_cdouble *b, f_int ldb, f_cdouble *x, f_int ldx, f_double *ferr, f_double *berr, f_cdouble *work, f_double *rwork, ref f_int info) {
1396     zgerfs_(&trans, &n, &nrhs, a, &lda, af, &ldaf, ipiv, b, &ldb, x, &ldx, ferr, berr, work, rwork, &info, 1);
1397 }
1398 
1399 /// Computes an RQ factorization of a general rectangular matrix.
1400 void gerqf(f_int m, f_int n, f_float *a, f_int lda, f_float *tau, f_float *work, f_int lwork, ref f_int info) {
1401     sgerqf_(&m, &n, a, &lda, tau, work, &lwork, &info);
1402 }
1403 void gerqf(f_int m, f_int n, f_double *a, f_int lda, f_double *tau, f_double *work, f_int lwork, ref f_int info) {
1404     dgerqf_(&m, &n, a, &lda, tau, work, &lwork, &info);
1405 }
1406 void gerqf(f_int m, f_int n, f_cfloat *a, f_int lda, f_cfloat *tau, f_cfloat *work, f_int lwork, ref f_int info) {
1407     cgerqf_(&m, &n, a, &lda, tau, work, &lwork, &info);
1408 }
1409 void gerqf(f_int m, f_int n, f_cdouble *a, f_int lda, f_cdouble *tau, f_cdouble *work, f_int lwork, ref f_int info) {
1410     zgerqf_(&m, &n, a, &lda, tau, work, &lwork, &info);
1411 }
1412 
1413 /// Computes an LU factorization of a general matrix, using partial
1414 /// pivoting with row interchanges.
1415 void getrf(f_int m, f_int n, f_float *a, f_int lda, f_int *ipiv, ref f_int info) {
1416     sgetrf_(&m, &n, a, &lda, ipiv, &info);
1417 }
1418 void getrf(f_int m, f_int n, f_double *a, f_int lda, f_int *ipiv, ref f_int info) {
1419     dgetrf_(&m, &n, a, &lda, ipiv, &info);
1420 }
1421 void getrf(f_int m, f_int n, f_cfloat *a, f_int lda, f_int *ipiv, ref f_int info) {
1422     cgetrf_(&m, &n, a, &lda, ipiv, &info);
1423 }
1424 void getrf(f_int m, f_int n, f_cdouble *a, f_int lda, f_int *ipiv, ref f_int info) {
1425     zgetrf_(&m, &n, a, &lda, ipiv, &info);
1426 }
1427 
1428 /// Computes the inverse of a general matrix, using the LU factorization
1429 /// computed by SGETRF.
1430 void getri(f_int n, f_float *a, f_int lda, f_int *ipiv, f_float *work, f_int lwork, ref f_int info) {
1431     sgetri_(&n, a, &lda, ipiv, work, &lwork, &info);
1432 }
1433 void getri(f_int n, f_double *a, f_int lda, f_int *ipiv, f_double *work, f_int lwork, ref f_int info) {
1434     dgetri_(&n, a, &lda, ipiv, work, &lwork, &info);
1435 }
1436 void getri(f_int n, f_cfloat *a, f_int lda, f_int *ipiv, f_cfloat *work, f_int lwork, ref f_int info) {
1437     cgetri_(&n, a, &lda, ipiv, work, &lwork, &info);
1438 }
1439 void getri(f_int n, f_cdouble *a, f_int lda, f_int *ipiv, f_cdouble *work, f_int lwork, ref f_int info) {
1440     zgetri_(&n, a, &lda, ipiv, work, &lwork, &info);
1441 }
1442 
1443 /// Solves a general system of linear equations AX=B, A**T X=B
1444 /// or A**H X=B, using the LU factorization computed by SGETRF.
1445 void getrs(char trans, f_int n, f_int nrhs, f_float *a, f_int lda, f_int *ipiv, f_float *b, f_int ldb, ref f_int info) {
1446     sgetrs_(&trans, &n, &nrhs, a, &lda, ipiv, b, &ldb, &info, 1);
1447 }
1448 void getrs(char trans, f_int n, f_int nrhs, f_double *a, f_int lda, f_int *ipiv, f_double *b, f_int ldb, ref f_int info) {
1449     dgetrs_(&trans, &n, &nrhs, a, &lda, ipiv, b, &ldb, &info, 1);
1450 }
1451 void getrs(char trans, f_int n, f_int nrhs, f_cfloat *a, f_int lda, f_int *ipiv, f_cfloat *b, f_int ldb, ref f_int info) {
1452     cgetrs_(&trans, &n, &nrhs, a, &lda, ipiv, b, &ldb, &info, 1);
1453 }
1454 void getrs(char trans, f_int n, f_int nrhs, f_cdouble *a, f_int lda, f_int *ipiv, f_cdouble *b, f_int ldb, ref f_int info) {
1455     zgetrs_(&trans, &n, &nrhs, a, &lda, ipiv, b, &ldb, &info, 1);
1456 }
1457 
1458 /// Forms the right or left eigenvectors of the generalized eigenvalue
1459 /// problem by backward transformation on the computed eigenvectors of
1460 /// the balanced pair of matrices output by SGGBAL.
1461 void ggbak(char job, char side, f_int n, f_int ilo, f_int ihi, f_float *lscale, f_float *rscale, f_int m, f_float *v, f_int ldv, ref f_int info) {
1462     sggbak_(&job, &side, &n, &ilo, &ihi, lscale, rscale, &m, v, &ldv, &info, 1, 1);
1463 }
1464 void ggbak(char job, char side, f_int n, f_int ilo, f_int ihi, f_double *lscale, f_double *rscale, f_int m, f_double *v, f_int ldv, ref f_int info) {
1465     dggbak_(&job, &side, &n, &ilo, &ihi, lscale, rscale, &m, v, &ldv, &info, 1, 1);
1466 }
1467 void ggbak(char job, char side, f_int n, f_int ilo, f_int ihi, f_float *lscale, f_float *rscale, f_int m, f_cfloat *v, f_int ldv, ref f_int info) {
1468     cggbak_(&job, &side, &n, &ilo, &ihi, lscale, rscale, &m, v, &ldv, &info, 1, 1);
1469 }
1470 void ggbak(char job, char side, f_int n, f_int ilo, f_int ihi, f_double *lscale, f_double *rscale, f_int m, f_cdouble *v, f_int ldv, ref f_int info) {
1471     zggbak_(&job, &side, &n, &ilo, &ihi, lscale, rscale, &m, v, &ldv, &info, 1, 1);
1472 }
1473 
1474 /// Balances a pair of general real matrices for the generalized
1475 /// eigenvalue problem A x = lambda B x.
1476 void ggbal(char job, f_int n, f_float *a, f_int lda, f_float *b, f_int ldb, f_int ilo, f_int ihi, f_float *lscale, f_float *rscale, f_float *work, ref f_int info) {
1477     sggbal_(&job, &n, a, &lda, b, &ldb, &ilo, &ihi, lscale, rscale, work, &info, 1);
1478 }
1479 void ggbal(char job, f_int n, f_double *a, f_int lda, f_double *b, f_int ldb, f_int ilo, f_int ihi, f_double *lscale, f_double *rscale, f_double *work, ref f_int info) {
1480     dggbal_(&job, &n, a, &lda, b, &ldb, &ilo, &ihi, lscale, rscale, work, &info, 1);
1481 }
1482 void ggbal(char job, f_int n, f_cfloat *a, f_int lda, f_cfloat *b, f_int ldb, f_int ilo, f_int ihi, f_float *lscale, f_float *rscale, f_float *work, ref f_int info) {
1483     cggbal_(&job, &n, a, &lda, b, &ldb, &ilo, &ihi, lscale, rscale, work, &info, 1);
1484 }
1485 void ggbal(char job, f_int n, f_cdouble *a, f_int lda, f_cdouble *b, f_int ldb, f_int ilo, f_int ihi, f_double *lscale, f_double *rscale, f_double *work, ref f_int info) {
1486     zggbal_(&job, &n, a, &lda, b, &ldb, &ilo, &ihi, lscale, rscale, work, &info, 1);
1487 }
1488 
1489 /// Reduces a pair of real matrices to generalized upper
1490 /// Hessenberg form using orthogonal transformations 
1491 void gghrd(char compq, char compz, f_int n, f_int ilo, f_int ihi, f_float *a, f_int lda, f_float *b, f_int ldb, f_float *q, f_int ldq, f_float *z, f_int ldz, ref f_int info) {
1492     sgghrd_(&compq, &compz, &n, &ilo, &ihi, a, &lda, b, &ldb, q, &ldq, z, &ldz, &info, 1, 1);
1493 }
1494 void gghrd(char compq, char compz, f_int n, f_int ilo, f_int ihi, f_double *a, f_int lda, f_double *b, f_int ldb, f_double *q, f_int ldq, f_double *z, f_int ldz, ref f_int info) {
1495     dgghrd_(&compq, &compz, &n, &ilo, &ihi, a, &lda, b, &ldb, q, &ldq, z, &ldz, &info, 1, 1);
1496 }
1497 void gghrd(char compq, char compz, f_int n, f_int ilo, f_int ihi, f_cfloat *a, f_int lda, f_cfloat *b, f_int ldb, f_cfloat *q, f_int ldq, f_cfloat *z, f_int ldz, ref f_int info) {
1498     cgghrd_(&compq, &compz, &n, &ilo, &ihi, a, &lda, b, &ldb, q, &ldq, z, &ldz, &info, 1, 1);
1499 }
1500 void gghrd(char compq, char compz, f_int n, f_int ilo, f_int ihi, f_cdouble *a, f_int lda, f_cdouble *b, f_int ldb, f_cdouble *q, f_int ldq, f_cdouble *z, f_int ldz, ref f_int info) {
1501     zgghrd_(&compq, &compz, &n, &ilo, &ihi, a, &lda, b, &ldb, q, &ldq, z, &ldz, &info, 1, 1);
1502 }
1503 
1504 /// Computes a generalized QR factorization of a pair of matrices. 
1505 void ggqrf(f_int n, f_int m, f_int p, f_float *a, f_int lda, f_float *taua, f_float *b, f_int ldb, f_float *taub, f_float *work, f_int lwork, ref f_int info) {
1506     sggqrf_(&n, &m, &p, a, &lda, taua, b, &ldb, taub, work, &lwork, &info);
1507 }
1508 void ggqrf(f_int n, f_int m, f_int p, f_double *a, f_int lda, f_double *taua, f_double *b, f_int ldb, f_double *taub, f_double *work, f_int lwork, ref f_int info) {
1509     dggqrf_(&n, &m, &p, a, &lda, taua, b, &ldb, taub, work, &lwork, &info);
1510 }
1511 void ggqrf(f_int n, f_int m, f_int p, f_cfloat *a, f_int lda, f_cfloat *taua, f_cfloat *b, f_int ldb, f_cfloat *taub, f_cfloat *work, f_int lwork, ref f_int info) {
1512     cggqrf_(&n, &m, &p, a, &lda, taua, b, &ldb, taub, work, &lwork, &info);
1513 }
1514 void ggqrf(f_int n, f_int m, f_int p, f_cdouble *a, f_int lda, f_cdouble *taua, f_cdouble *b, f_int ldb, f_cdouble *taub, f_cdouble *work, f_int lwork, ref f_int info) {
1515     zggqrf_(&n, &m, &p, a, &lda, taua, b, &ldb, taub, work, &lwork, &info);
1516 }
1517 
1518 /// Computes a generalized RQ factorization of a pair of matrices.
1519 void ggrqf(f_int m, f_int p, f_int n, f_float *a, f_int lda, f_float *taua, f_float *b, f_int ldb, f_float *taub, f_float *work, f_int lwork, ref f_int info) {
1520     sggrqf_(&m, &p, &n, a, &lda, taua, b, &ldb, taub, work, &lwork, &info);
1521 }
1522 void ggrqf(f_int m, f_int p, f_int n, f_double *a, f_int lda, f_double *taua, f_double *b, f_int ldb, f_double *taub, f_double *work, f_int lwork, ref f_int info) {
1523     dggrqf_(&m, &p, &n, a, &lda, taua, b, &ldb, taub, work, &lwork, &info);
1524 }
1525 void ggrqf(f_int m, f_int p, f_int n, f_cfloat *a, f_int lda, f_cfloat *taua, f_cfloat *b, f_int ldb, f_cfloat *taub, f_cfloat *work, f_int lwork, ref f_int info) {
1526     cggrqf_(&m, &p, &n, a, &lda, taua, b, &ldb, taub, work, &lwork, &info);
1527 }
1528 void ggrqf(f_int m, f_int p, f_int n, f_cdouble *a, f_int lda, f_cdouble *taua, f_cdouble *b, f_int ldb, f_cdouble *taub, f_cdouble *work, f_int lwork, ref f_int info) {
1529     zggrqf_(&m, &p, &n, a, &lda, taua, b, &ldb, taub, work, &lwork, &info);
1530 }
1531 
1532 /// Computes orthogonal matrices as a preprocessing step
1533 /// for computing the generalized singular value decomposition
1534 void ggsvp(char jobu, char jobv, char jobq, f_int m, f_int p, f_int n, f_float *a, f_int lda, f_float *b, f_int ldb, f_float *tola, f_float *tolb, f_int k, f_int l, f_float *u, f_int ldu, f_float *v, f_int ldv, f_float *q, f_int ldq, f_int *iwork, f_float *tau, f_float *work, ref f_int info) {
1535     sggsvp_(&jobu, &jobv, &jobq, &m, &p, &n, a, &lda, b, &ldb, tola, tolb, &k, &l, u, &ldu, v, &ldv, q, &ldq, iwork, tau, work, &info, 1, 1, 1);
1536 }
1537 void ggsvp(char jobu, char jobv, char jobq, f_int m, f_int p, f_int n, f_double *a, f_int lda, f_double *b, f_int ldb, f_double *tola, f_double *tolb, f_int k, f_int l, f_double *u, f_int ldu, f_double *v, f_int ldv, f_double *q, f_int ldq, f_int *iwork, f_double *tau, f_double *work, ref f_int info) {
1538     dggsvp_(&jobu, &jobv, &jobq, &m, &p, &n, a, &lda, b, &ldb, tola, tolb, &k, &l, u, &ldu, v, &ldv, q, &ldq, iwork, tau, work, &info, 1, 1, 1);
1539 }
1540 void ggsvp(char jobu, char jobv, char jobq, f_int m, f_int p, f_int n, f_cfloat *a, f_int lda, f_cfloat *b, f_int ldb, f_float *tola, f_float *tolb, f_int k, f_int l, f_cfloat *u, f_int ldu, f_cfloat *v, f_int ldv, f_cfloat *q, f_int ldq, f_int *iwork, f_float *rwork, f_cfloat *tau, f_cfloat *work, ref f_int info) {
1541     cggsvp_(&jobu, &jobv, &jobq, &m, &p, &n, a, &lda, b, &ldb, tola, tolb, &k, &l, u, &ldu, v, &ldv, q, &ldq, iwork, rwork, tau, work, &info, 1, 1, 1);
1542 }
1543 void ggsvp(char jobu, char jobv, char jobq, f_int m, f_int p, f_int n, f_cdouble *a, f_int lda, f_cdouble *b, f_int ldb, f_double *tola, f_double *tolb, f_int k, f_int l, f_cdouble *u, f_int ldu, f_cdouble *v, f_int ldv, f_cdouble *q, f_int ldq, f_int *iwork, f_double *rwork, f_cdouble *tau, f_cdouble *work, ref f_int info) {
1544     zggsvp_(&jobu, &jobv, &jobq, &m, &p, &n, a, &lda, b, &ldb, tola, tolb, &k, &l, u, &ldu, v, &ldv, q, &ldq, iwork, rwork, tau, work, &info, 1, 1, 1);
1545 }
1546 
1547 /// Estimates the reciprocal of the condition number of a general
1548 /// tridiagonal matrix, in either the 1-norm or the infinity-norm,
1549 /// using the LU factorization computed by SGTTRF.
1550 void gtcon(char norm, f_int n, f_float *dl, f_float *d, f_float *du, f_float *du2, f_int *ipiv, f_float *anorm, f_float rcond, f_float *work, f_int *iwork, ref f_int info) {
1551     sgtcon_(&norm, &n, dl, d, du, du2, ipiv, anorm, &rcond, work, iwork, &info, 1);
1552 }
1553 void gtcon(char norm, f_int n, f_double *dl, f_double *d, f_double *du, f_double *du2, f_int *ipiv, f_double *anorm, f_double rcond, f_double *work, f_int *iwork, ref f_int info) {
1554     dgtcon_(&norm, &n, dl, d, du, du2, ipiv, anorm, &rcond, work, iwork, &info, 1);
1555 }
1556 void gtcon(char norm, f_int n, f_cfloat *dl, f_cfloat *d, f_cfloat *du, f_cfloat *du2, f_int *ipiv, f_float *anorm, f_float rcond, f_cfloat *work, ref f_int info) {
1557     cgtcon_(&norm, &n, dl, d, du, du2, ipiv, anorm, &rcond, work, &info, 1);
1558 }
1559 void gtcon(char norm, f_int n, f_cdouble *dl, f_cdouble *d, f_cdouble *du, f_cdouble *du2, f_int *ipiv, f_double *anorm, f_double rcond, f_cdouble *work, ref f_int info) {
1560     zgtcon_(&norm, &n, dl, d, du, du2, ipiv, anorm, &rcond, work, &info, 1);
1561 }
1562 
1563 /// Improves the computed solution to a general tridiagonal system
1564 /// of linear equations AX=B, A**T X=B or A**H X=B, and provides
1565 /// forward and backward error bounds for the solution.
1566 void gtrfs(char trans, f_int n, f_int nrhs, f_float *dl, f_float *d, f_float *du, f_float *dlf, f_float *df, f_float *duf, f_float *du2, f_int *ipiv, f_float *b, f_int ldb, f_float *x, f_int ldx, f_float *ferr, f_float *berr, f_float *work, f_int *iwork, ref f_int info) {
1567     sgtrfs_(&trans, &n, &nrhs, dl, d, du, dlf, df, duf, du2, ipiv, b, &ldb, x, &ldx, ferr, berr, work, iwork, &info, 1);
1568 }
1569 void gtrfs(char trans, f_int n, f_int nrhs, f_double *dl, f_double *d, f_double *du, f_double *dlf, f_double *df, f_double *duf, f_double *du2, f_int *ipiv, f_double *b, f_int ldb, f_double *x, f_int ldx, f_double *ferr, f_double *berr, f_double *work, f_int *iwork, ref f_int info) {
1570     dgtrfs_(&trans, &n, &nrhs, dl, d, du, dlf, df, duf, du2, ipiv, b, &ldb, x, &ldx, ferr, berr, work, iwork, &info, 1);
1571 }
1572 void gtrfs(char trans, f_int n, f_int nrhs, f_cfloat *dl, f_cfloat *d, f_cfloat *du, f_cfloat *dlf, f_cfloat *df, f_cfloat *duf, f_cfloat *du2, f_int *ipiv, f_cfloat *b, f_int ldb, f_cfloat *x, f_int ldx, f_float *ferr, f_float *berr, f_cfloat *work, f_float *rwork, ref f_int info) {
1573     cgtrfs_(&trans, &n, &nrhs, dl, d, du, dlf, df, duf, du2, ipiv, b, &ldb, x, &ldx, ferr, berr, work, rwork, &info, 1);
1574 }
1575 void gtrfs(char trans, f_int n, f_int nrhs, f_cdouble *dl, f_cdouble *d, f_cdouble *du, f_cdouble *dlf, f_cdouble *df, f_cdouble *duf, f_cdouble *du2, f_int *ipiv, f_cdouble *b, f_int ldb, f_cdouble *x, f_int ldx, f_double *ferr, f_double *berr, f_cdouble *work, f_double *rwork, ref f_int info) {
1576     zgtrfs_(&trans, &n, &nrhs, dl, d, du, dlf, df, duf, du2, ipiv, b, &ldb, x, &ldx, ferr, berr, work, rwork, &info, 1);
1577 }
1578 
1579 /// Computes an LU factorization of a general tridiagonal matrix,
1580 /// using partial pivoting with row interchanges.
1581 void gttrf(f_int n, f_float *dl, f_float *d, f_float *du, f_float *du2, f_int *ipiv, ref f_int info) {
1582     sgttrf_(&n, dl, d, du, du2, ipiv, &info);
1583 }
1584 void gttrf(f_int n, f_double *dl, f_double *d, f_double *du, f_double *du2, f_int *ipiv, ref f_int info) {
1585     dgttrf_(&n, dl, d, du, du2, ipiv, &info);
1586 }
1587 void gttrf(f_int n, f_cfloat *dl, f_cfloat *d, f_cfloat *du, f_cfloat *du2, f_int *ipiv, ref f_int info) {
1588     cgttrf_(&n, dl, d, du, du2, ipiv, &info);
1589 }
1590 void gttrf(f_int n, f_cdouble *dl, f_cdouble *d, f_cdouble *du, f_cdouble *du2, f_int *ipiv, ref f_int info) {
1591     zgttrf_(&n, dl, d, du, du2, ipiv, &info);
1592 }
1593 
1594 /// Solves a general tridiagonal system of linear equations AX=B,
1595 /// A**T X=B or A**H X=B, using the LU factorization computed by
1596 /// SGTTRF.
1597 void gttrs(char trans, f_int n, f_int nrhs, f_float *dl, f_float *d, f_float *du, f_float *du2, f_int *ipiv, f_float *b, f_int ldb, ref f_int info) {
1598     sgttrs_(&trans, &n, &nrhs, dl, d, du, du2, ipiv, b, &ldb, &info, 1);
1599 }
1600 void gttrs(char trans, f_int n, f_int nrhs, f_double *dl, f_double *d, f_double *du, f_double *du2, f_int *ipiv, f_double *b, f_int ldb, ref f_int info) {
1601     dgttrs_(&trans, &n, &nrhs, dl, d, du, du2, ipiv, b, &ldb, &info, 1);
1602 }
1603 void gttrs(char trans, f_int n, f_int nrhs, f_cfloat *dl, f_cfloat *d, f_cfloat *du, f_cfloat *du2, f_int *ipiv, f_cfloat *b, f_int ldb, ref f_int info) {
1604     cgttrs_(&trans, &n, &nrhs, dl, d, du, du2, ipiv, b, &ldb, &info, 1);
1605 }
1606 void gttrs(char trans, f_int n, f_int nrhs, f_cdouble *dl, f_cdouble *d, f_cdouble *du, f_cdouble *du2, f_int *ipiv, f_cdouble *b, f_int ldb, ref f_int info) {
1607     zgttrs_(&trans, &n, &nrhs, dl, d, du, du2, ipiv, b, &ldb, &info, 1);
1608 }
1609 
1610 /// Implements a single-/f_double-shift version of the QZ method for
1611 /// finding the generalized eigenvalues of the equation 
1612 /// det(A - w(i) B) = 0
1613 void hgeqz(char job, char compq, char compz, f_int n, f_int ilo, f_int ihi, f_float *a, f_int lda, f_float *b, f_int ldb, f_float *alphar, f_float *alphai, f_float *betav, f_float *q, f_int ldq, f_float *z, f_int ldz, f_float *work, f_int lwork, ref f_int info) {
1614     shgeqz_(&job, &compq, &compz, &n, &ilo, &ihi, a, &lda, b, &ldb, alphar, alphai, betav, q, &ldq, z, &ldz, work, &lwork, &info, 1, 1, 1);
1615 }
1616 void hgeqz(char job, char compq, char compz, f_int n, f_int ilo, f_int ihi, f_double *a, f_int lda, f_double *b, f_int ldb, f_double *alphar, f_double *alphai, f_double *betav, f_double *q, f_int ldq, f_double *z, f_int ldz, f_double *work, f_int lwork, ref f_int info) {
1617     dhgeqz_(&job, &compq, &compz, &n, &ilo, &ihi, a, &lda, b, &ldb, alphar, alphai, betav, q, &ldq, z, &ldz, work, &lwork, &info, 1, 1, 1);
1618 }
1619 void hgeqz(char job, char compq, char compz, f_int n, f_int ilo, f_int ihi, f_cfloat *a, f_int lda, f_cfloat *b, f_int ldb, f_cfloat *alphav, f_cfloat *betav, f_cfloat *q, f_int ldq, f_cfloat *z, f_int ldz, f_cfloat *work, f_int lwork, f_float *rwork, ref f_int info) {
1620     chgeqz_(&job, &compq, &compz, &n, &ilo, &ihi, a, &lda, b, &ldb, alphav, betav, q, &ldq, z, &ldz, work, &lwork, rwork, &info, 1, 1, 1);
1621 }
1622 void hgeqz(char job, char compq, char compz, f_int n, f_int ilo, f_int ihi, f_cdouble *a, f_int lda, f_cdouble *b, f_int ldb, f_cdouble *alphav, f_cdouble *betav, f_cdouble *q, f_int ldq, f_cdouble *z, f_int ldz, f_cdouble *work, f_int lwork, f_double *rwork, ref f_int info) {
1623     zhgeqz_(&job, &compq, &compz, &n, &ilo, &ihi, a, &lda, b, &ldb, alphav, betav, q, &ldq, z, &ldz, work, &lwork, rwork, &info, 1, 1, 1);
1624 }
1625 
1626 /// Computes specified right and/or left eigenvectors of an upper
1627 /// Hessenberg matrix by inverse iteration.
1628 void hsein(char side, char eigsrc, char initv, f_int select, f_int n, f_float *h, f_int ldh, f_float *wr, f_float *wi, f_float *vl, f_int ldvl, f_float *vr, f_int ldvr, f_int mm, f_int m, f_float *work, f_int ifaill, f_int ifailr, ref f_int info) {
1629     shsein_(&side, &eigsrc, &initv, &select, &n, h, &ldh, wr, wi, vl, &ldvl, vr, &ldvr, &mm, &m, work, &ifaill, &ifailr, &info, 1, 1, 1);
1630 }
1631 void hsein(char side, char eigsrc, char initv, f_int select, f_int n, f_double *h, f_int ldh, f_double *wr, f_double *wi, f_double *vl, f_int ldvl, f_double *vr, f_int ldvr, f_int mm, f_int m, f_double *work, f_int ifaill, f_int ifailr, ref f_int info) {
1632     dhsein_(&side, &eigsrc, &initv, &select, &n, h, &ldh, wr, wi, vl, &ldvl, vr, &ldvr, &mm, &m, work, &ifaill, &ifailr, &info, 1, 1, 1);
1633 }
1634 void hsein(char side, char eigsrc, char initv, f_int select, f_int n, f_cfloat *h, f_int ldh, f_cfloat *w, f_cfloat *vl, f_int ldvl, f_cfloat *vr, f_int ldvr, f_int mm, f_int m, f_cfloat *work, f_float *rwork, f_int ifaill, f_int ifailr, ref f_int info) {
1635     chsein_(&side, &eigsrc, &initv, &select, &n, h, &ldh, w, vl, &ldvl, vr, &ldvr, &mm, &m, work, rwork, &ifaill, &ifailr, &info, 1, 1, 1);
1636 }
1637 void hsein(char side, char eigsrc, char initv, f_int select, f_int n, f_cdouble *h, f_int ldh, f_cdouble *w, f_cdouble *vl, f_int ldvl, f_cdouble *vr, f_int ldvr, f_int mm, f_int m, f_cdouble *work, f_double *rwork, f_int ifaill, f_int ifailr, ref f_int info) {
1638     zhsein_(&side, &eigsrc, &initv, &select, &n, h, &ldh, w, vl, &ldvl, vr, &ldvr, &mm, &m, work, rwork, &ifaill, &ifailr, &info, 1, 1, 1);
1639 }
1640 
1641 /// Computes the eigenvalues and Schur factorization of an upper
1642 /// Hessenberg matrix, using the multishift QR algorithm.
1643 void hseqr(char job, char compz, f_int n, f_int ilo, f_int ihi, f_float *h, f_int ldh, f_float *wr, f_float *wi, f_float *z, f_int ldz, f_float *work, f_int lwork, ref f_int info) {
1644     shseqr_(&job, &compz, &n, &ilo, &ihi, h, &ldh, wr, wi, z, &ldz, work, &lwork, &info, 1, 1);
1645 }
1646 void hseqr(char job, char compz, f_int n, f_int ilo, f_int ihi, f_double *h, f_int ldh, f_double *wr, f_double *wi, f_double *z, f_int ldz, f_double *work, f_int lwork, ref f_int info) {
1647     dhseqr_(&job, &compz, &n, &ilo, &ihi, h, &ldh, wr, wi, z, &ldz, work, &lwork, &info, 1, 1);
1648 }
1649 void hseqr(char job, char compz, f_int n, f_int ilo, f_int ihi, f_cfloat *h, f_int ldh, f_cfloat *w, f_cfloat *z, f_int ldz, f_cfloat *work, f_int lwork, ref f_int info) {
1650     chseqr_(&job, &compz, &n, &ilo, &ihi, h, &ldh, w, z, &ldz, work, &lwork, &info, 1, 1);
1651 }
1652 void hseqr(char job, char compz, f_int n, f_int ilo, f_int ihi, f_cdouble *h, f_int ldh, f_cdouble *w, f_cdouble *z, f_int ldz, f_cdouble *work, f_int lwork, ref f_int info) {
1653     zhseqr_(&job, &compz, &n, &ilo, &ihi, h, &ldh, w, z, &ldz, work, &lwork, &info, 1, 1);
1654 }
1655 
1656 /// Generates the orthogonal transformation matrix from
1657 /// a reduction to tridiagonal form determined by SSPTRD.
1658 void opgtr(char uplo, f_int n, f_float *ap, f_float *tau, f_float *q, f_int ldq, f_float *work, ref f_int info) {
1659     sopgtr_(&uplo, &n, ap, tau, q, &ldq, work, &info, 1);
1660 }
1661 void opgtr(char uplo, f_int n, f_double *ap, f_double *tau, f_double *q, f_int ldq, f_double *work, ref f_int info) {
1662     dopgtr_(&uplo, &n, ap, tau, q, &ldq, work, &info, 1);
1663 }
1664 
1665 /// Generates the unitary transformation matrix from
1666 /// a reduction to tridiagonal form determined by CHPTRD.
1667 void upgtr(char uplo, f_int n, f_cfloat *ap, f_cfloat *tau, f_cfloat *q, f_int ldq, f_cfloat *work, ref f_int info) {
1668     cupgtr_(&uplo, &n, ap, tau, q, &ldq, work, &info, 1);
1669 }
1670 void upgtr(char uplo, f_int n, f_cdouble *ap, f_cdouble *tau, f_cdouble *q, f_int ldq, f_cdouble *work, ref f_int info) {
1671     zupgtr_(&uplo, &n, ap, tau, q, &ldq, work, &info, 1);
1672 }
1673 
1674 
1675 /// Multiplies a general matrix by the orthogonal
1676 /// transformation matrix from a reduction to tridiagonal form
1677 /// determined by SSPTRD.
1678 void opmtr(char side, char uplo, char trans, f_int m, f_int n, f_float *ap, f_float *tau, f_float *c, f_int ldc, f_float *work, ref f_int info) {
1679     sopmtr_(&side, &uplo, &trans, &m, &n, ap, tau, c, &ldc, work, &info, 1, 1, 1);
1680 }
1681 void opmtr(char side, char uplo, char trans, f_int m, f_int n, f_double *ap, f_double *tau, f_double *c, f_int ldc, f_double *work, ref f_int info) {
1682     dopmtr_(&side, &uplo, &trans, &m, &n, ap, tau, c, &ldc, work, &info, 1, 1, 1);
1683 }
1684 
1685 /// Generates the orthogonal transformation matrices from
1686 /// a reduction to bidiagonal form determined by SGEBRD.
1687 void orgbr(char vect, f_int m, f_int n, f_int k, f_float *a, f_int lda, f_float *tau, f_float *work, f_int lwork, ref f_int info) {
1688     sorgbr_(&vect, &m, &n, &k, a, &lda, tau, work, &lwork, &info, 1);
1689 }
1690 void orgbr(char vect, f_int m, f_int n, f_int k, f_double *a, f_int lda, f_double *tau, f_double *work, f_int lwork, ref f_int info) {
1691     dorgbr_(&vect, &m, &n, &k, a, &lda, tau, work, &lwork, &info, 1);
1692 }
1693 
1694 /// Generates the unitary transformation matrices from
1695 /// a reduction to bidiagonal form determined by CGEBRD.
1696 void ungbr(char vect, f_int m, f_int n, f_int k, f_cfloat *a, f_int lda, f_cfloat *tau, f_cfloat *work, f_int lwork, ref f_int info) {
1697     cungbr_(&vect, &m, &n, &k, a, &lda, tau, work, &lwork, &info, 1);
1698 }
1699 void ungbr(char vect, f_int m, f_int n, f_int k, f_cdouble *a, f_int lda, f_cdouble *tau, f_cdouble *work, f_int lwork, ref f_int info) {
1700     zungbr_(&vect, &m, &n, &k, a, &lda, tau, work, &lwork, &info, 1);
1701 }
1702 
1703 /// Generates the orthogonal transformation matrix from
1704 /// a reduction to Hessenberg form determined by SGEHRD.
1705 void orghr(f_int n, f_int ilo, f_int ihi, f_float *a, f_int lda, f_float *tau, f_float *work, f_int lwork, ref f_int info) {
1706     sorghr_(&n, &ilo, &ihi, a, &lda, tau, work, &lwork, &info);
1707 }
1708 void orghr(f_int n, f_int ilo, f_int ihi, f_double *a, f_int lda, f_double *tau, f_double *work, f_int lwork, ref f_int info) {
1709     dorghr_(&n, &ilo, &ihi, a, &lda, tau, work, &lwork, &info);
1710 }
1711 
1712 /// Generates the unitary transformation matrix from
1713 /// a reduction to Hessenberg form determined by CGEHRD.
1714 void unghr(f_int n, f_int ilo, f_int ihi, f_cfloat *a, f_int lda, f_cfloat *tau, f_cfloat *work, f_int lwork, ref f_int info) {
1715     cunghr_(&n, &ilo, &ihi, a, &lda, tau, work, &lwork, &info);
1716 }
1717 void unghr(f_int n, f_int ilo, f_int ihi, f_cdouble *a, f_int lda, f_cdouble *tau, f_cdouble *work, f_int lwork, ref f_int info) {
1718     zunghr_(&n, &ilo, &ihi, a, &lda, tau, work, &lwork, &info);
1719 }
1720 
1721 /// Generates all or part of the orthogonal matrix Q from
1722 /// an LQ factorization determined by SGELQF.
1723 void orglq(f_int m, f_int n, f_int k, f_float *a, f_int lda, f_float *tau, f_float *work, f_int lwork, ref f_int info) {
1724     sorglq_(&m, &n, &k, a, &lda, tau, work, &lwork, &info);
1725 }
1726 void orglq(f_int m, f_int n, f_int k, f_double *a, f_int lda, f_double *tau, f_double *work, f_int lwork, ref f_int info) {
1727     dorglq_(&m, &n, &k, a, &lda, tau, work, &lwork, &info);
1728 }
1729 
1730 /// Generates all or part of the unitary matrix Q from
1731 /// an LQ factorization determined by CGELQF.
1732 void unglq(f_int m, f_int n, f_int k, f_cfloat *a, f_int lda, f_cfloat *tau, f_cfloat *work, f_int lwork, ref f_int info) {
1733     cunglq_(&m, &n, &k, a, &lda, tau, work, &lwork, &info);
1734 }
1735 void unglq(f_int m, f_int n, f_int k, f_cdouble *a, f_int lda, f_cdouble *tau, f_cdouble *work, f_int lwork, ref f_int info) {
1736     zunglq_(&m, &n, &k, a, &lda, tau, work, &lwork, &info);
1737 }
1738 
1739 /// Generates all or part of the orthogonal matrix Q from
1740 /// a QL factorization determined by SGEQLF.
1741 void orgql(f_int m, f_int n, f_int k, f_float *a, f_int lda, f_float *tau, f_float *work, f_int lwork, ref f_int info) {
1742     sorgql_(&m, &n, &k, a, &lda, tau, work, &lwork, &info);
1743 }
1744 void orgql(f_int m, f_int n, f_int k, f_double *a, f_int lda, f_double *tau, f_double *work, f_int lwork, ref f_int info) {
1745     dorgql_(&m, &n, &k, a, &lda, tau, work, &lwork, &info);
1746 }
1747 
1748 /// Generates all or part of the unitary matrix Q from
1749 /// a QL factorization determined by CGEQLF.
1750 void ungql(f_int m, f_int n, f_int k, f_cfloat *a, f_int lda, f_cfloat *tau, f_cfloat *work, f_int lwork, ref f_int info) {
1751     cungql_(&m, &n, &k, a, &lda, tau, work, &lwork, &info);
1752 }
1753 void ungql(f_int m, f_int n, f_int k, f_cdouble *a, f_int lda, f_cdouble *tau, f_cdouble *work, f_int lwork, ref f_int info) {
1754     zungql_(&m, &n, &k, a, &lda, tau, work, &lwork, &info);
1755 }
1756 
1757 /// Generates all or part of the orthogonal matrix Q from
1758 /// a QR factorization determined by SGEQRF.
1759 void orgqr(f_int m, f_int n, f_int k, f_float *a, f_int lda, f_float *tau, f_float *work, f_int lwork, ref f_int info) {
1760     sorgqr_(&m, &n, &k, a, &lda, tau, work, &lwork, &info);
1761 }
1762 void orgqr(f_int m, f_int n, f_int k, f_double *a, f_int lda, f_double *tau, f_double *work, f_int lwork, ref f_int info) {
1763     dorgqr_(&m, &n, &k, a, &lda, tau, work, &lwork, &info);
1764 }
1765 
1766 /// Generates all or part of the unitary matrix Q from
1767 /// a QR factorization determined by CGEQRF.
1768 void ungqr(f_int m, f_int n, f_int k, f_cfloat *a, f_int lda, f_cfloat *tau, f_cfloat *work, f_int lwork, ref f_int info) {
1769     cungqr_(&m, &n, &k, a, &lda, tau, work, &lwork, &info);
1770 }
1771 void ungqr(f_int m, f_int n, f_int k, f_cdouble *a, f_int lda, f_cdouble *tau, f_cdouble *work, f_int lwork, ref f_int info) {
1772     zungqr_(&m, &n, &k, a, &lda, tau, work, &lwork, &info);
1773 }
1774 
1775 /// Generates all or part of the orthogonal matrix Q from
1776 /// an RQ factorization determined by SGERQF.
1777 void orgrq(f_int m, f_int n, f_int k, f_float *a, f_int lda, f_float *tau, f_float *work, f_int lwork, ref f_int info) {
1778     sorgrq_(&m, &n, &k, a, &lda, tau, work, &lwork, &info);
1779 }
1780 void orgrq(f_int m, f_int n, f_int k, f_double *a, f_int lda, f_double *tau, f_double *work, f_int lwork, ref f_int info) {
1781     dorgrq_(&m, &n, &k, a, &lda, tau, work, &lwork, &info);
1782 }
1783 
1784 /// Generates all or part of the unitary matrix Q from
1785 /// an RQ factorization determined by CGERQF.
1786 void ungrq(f_int m, f_int n, f_int k, f_cfloat *a, f_int lda, f_cfloat *tau, f_cfloat *work, f_int lwork, ref f_int info) {
1787     cungrq_(&m, &n, &k, a, &lda, tau, work, &lwork, &info);
1788 }
1789 void ungrq(f_int m, f_int n, f_int k, f_cdouble *a, f_int lda, f_cdouble *tau, f_cdouble *work, f_int lwork, ref f_int info) {
1790     zungrq_(&m, &n, &k, a, &lda, tau, work, &lwork, &info);
1791 }
1792 
1793 /// Generates the orthogonal transformation matrix from
1794 /// a reduction to tridiagonal form determined by SSYTRD.
1795 void orgtr(char uplo, f_int n, f_float *a, f_int lda, f_float *tau, f_float *work, f_int lwork, ref f_int info) {
1796     sorgtr_(&uplo, &n, a, &lda, tau, work, &lwork, &info, 1);
1797 }
1798 void orgtr(char uplo, f_int n, f_double *a, f_int lda, f_double *tau, f_double *work, f_int lwork, ref f_int info) {
1799     dorgtr_(&uplo, &n, a, &lda, tau, work, &lwork, &info, 1);
1800 }
1801 
1802 /// Generates the unitary transformation matrix from
1803 /// a reduction to tridiagonal form determined by CHETRD.
1804 void ungtr(char uplo, f_int n, f_cfloat *a, f_int lda, f_cfloat *tau, f_cfloat *work, f_int lwork, ref f_int info) {
1805     cungtr_(&uplo, &n, a, &lda, tau, work, &lwork, &info, 1);
1806 }
1807 void ungtr(char uplo, f_int n, f_cdouble *a, f_int lda, f_cdouble *tau, f_cdouble *work, f_int lwork, ref f_int info) {
1808     zungtr_(&uplo, &n, a, &lda, tau, work, &lwork, &info, 1);
1809 }
1810 
1811 /// Multiplies a general matrix by one of the orthogonal
1812 /// transformation  matrices from a reduction to bidiagonal form
1813 /// determined by SGEBRD.
1814 void ormbr(char vect, char side, char trans, f_int m, f_int n, f_int k, f_float *a, f_int lda, f_float *tau, f_float *c, f_int ldc, f_float *work, f_int lwork, ref f_int info) {
1815     sormbr_(&vect, &side, &trans, &m, &n, &k, a, &lda, tau, c, &ldc, work, &lwork, &info, 1, 1, 1);
1816 }
1817 void ormbr(char vect, char side, char trans, f_int m, f_int n, f_int k, f_double *a, f_int lda, f_double *tau, f_double *c, f_int ldc, f_double *work, f_int lwork, ref f_int info) {
1818     dormbr_(&vect, &side, &trans, &m, &n, &k, a, &lda, tau, c, &ldc, work, &lwork, &info, 1, 1, 1);
1819 }
1820 
1821 /// Multiplies a general matrix by one of the unitary
1822 /// transformation matrices from a reduction to bidiagonal form
1823 /// determined by CGEBRD.
1824 void unmbr(char vect, char side, char trans, f_int m, f_int n, f_int k, f_cfloat *a, f_int lda, f_cfloat *tau, f_cfloat *c, f_int ldc, f_cfloat *work, f_int lwork, ref f_int info) {
1825     cunmbr_(&vect, &side, &trans, &m, &n, &k, a, &lda, tau, c, &ldc, work, &lwork, &info, 1, 1, 1);
1826 }
1827 void unmbr(char vect, char side, char trans, f_int m, f_int n, f_int k, f_cdouble *a, f_int lda, f_cdouble *tau, f_cdouble *c, f_int ldc, f_cdouble *work, f_int lwork, ref f_int info) {
1828     zunmbr_(&vect, &side, &trans, &m, &n, &k, a, &lda, tau, c, &ldc, work, &lwork, &info, 1, 1, 1);
1829 }
1830 
1831 /// Multiplies a general matrix by the orthogonal transformation
1832 /// matrix from a reduction to Hessenberg form determined by SGEHRD.
1833 void ormhr(char side, char trans, f_int m, f_int n, f_int ilo, f_int ihi, f_float *a, f_int lda, f_float *tau, f_float *c, f_int ldc, f_float *work, f_int lwork, ref f_int info) {
1834     sormhr_(&side, &trans, &m, &n, &ilo, &ihi, a, &lda, tau, c, &ldc, work, &lwork, &info, 1, 1);
1835 }
1836 void ormhr(char side, char trans, f_int m, f_int n, f_int ilo, f_int ihi, f_double *a, f_int lda, f_double *tau, f_double *c, f_int ldc, f_double *work, f_int lwork, ref f_int info) {
1837     dormhr_(&side, &trans, &m, &n, &ilo, &ihi, a, &lda, tau, c, &ldc, work, &lwork, &info, 1, 1);
1838 }
1839 
1840 /// Multiplies a general matrix by the unitary transformation
1841 /// matrix from a reduction to Hessenberg form determined by CGEHRD.
1842 void unmhr(char side, char trans, f_int m, f_int n, f_int ilo, f_int ihi, f_cfloat *a, f_int lda, f_cfloat *tau, f_cfloat *c, f_int ldc, f_cfloat *work, f_int lwork, ref f_int info) {
1843     cunmhr_(&side, &trans, &m, &n, &ilo, &ihi, a, &lda, tau, c, &ldc, work, &lwork, &info, 1, 1);
1844 }
1845 void unmhr(char side, char trans, f_int m, f_int n, f_int ilo, f_int ihi, f_cdouble *a, f_int lda, f_cdouble *tau, f_cdouble *c, f_int ldc, f_cdouble *work, f_int lwork, ref f_int info) {
1846     zunmhr_(&side, &trans, &m, &n, &ilo, &ihi, a, &lda, tau, c, &ldc, work, &lwork, &info, 1, 1);
1847 }
1848 
1849 /// Multiplies a general matrix by the orthogonal matrix
1850 /// from an LQ factorization determined by SGELQF.
1851 void ormlq(char side, char trans, f_int m, f_int n, f_int k, f_float *a, f_int lda, f_float *tau, f_float *c, f_int ldc, f_float *work, f_int lwork, ref f_int info) {
1852     sormlq_(&side, &trans, &m, &n, &k, a, &lda, tau, c, &ldc, work, &lwork, &info, 1, 1);
1853 }
1854 void ormlq(char side, char trans, f_int m, f_int n, f_int k, f_double *a, f_int lda, f_double *tau, f_double *c, f_int ldc, f_double *work, f_int lwork, ref f_int info) {
1855     dormlq_(&side, &trans, &m, &n, &k, a, &lda, tau, c, &ldc, work, &lwork, &info, 1, 1);
1856 }
1857 
1858 /// Multiplies a general matrix by the unitary matrix
1859 /// from an LQ factorization determined by CGELQF.
1860 void unmlq(char side, char trans, f_int m, f_int n, f_int k, f_cfloat *a, f_int lda, f_cfloat *tau, f_cfloat *c, f_int ldc, f_cfloat *work, f_int lwork, ref f_int info) {
1861     cunmlq_(&side, &trans, &m, &n, &k, a, &lda, tau, c, &ldc, work, &lwork, &info, 1, 1);
1862 }
1863 void unmlq(char side, char trans, f_int m, f_int n, f_int k, f_cdouble *a, f_int lda, f_cdouble *tau, f_cdouble *c, f_int ldc, f_cdouble *work, f_int lwork, ref f_int info) {
1864     zunmlq_(&side, &trans, &m, &n, &k, a, &lda, tau, c, &ldc, work, &lwork, &info, 1, 1);
1865 }
1866 
1867 /// Multiplies a general matrix by the orthogonal matrix
1868 /// from a QL factorization determined by SGEQLF.
1869 void ormql(char side, char trans, f_int m, f_int n, f_int k, f_float *a, f_int lda, f_float *tau, f_float *c, f_int ldc, f_float *work, f_int lwork, ref f_int info) {
1870     sormql_(&side, &trans, &m, &n, &k, a, &lda, tau, c, &ldc, work, &lwork, &info, 1, 1);
1871 }
1872 void ormql(char side, char trans, f_int m, f_int n, f_int k, f_double *a, f_int lda, f_double *tau, f_double *c, f_int ldc, f_double *work, f_int lwork, ref f_int info) {
1873     dormql_(&side, &trans, &m, &n, &k, a, &lda, tau, c, &ldc, work, &lwork, &info, 1, 1);
1874 }
1875 
1876 /// Multiplies a general matrix by the unitary matrix
1877 /// from a QL factorization determined by CGEQLF.
1878 void unmql(char side, char trans, f_int m, f_int n, f_int k, f_cfloat *a, f_int lda, f_cfloat *tau, f_cfloat *c, f_int ldc, f_cfloat *work, f_int lwork, ref f_int info) {
1879     cunmql_(&side, &trans, &m, &n, &k, a, &lda, tau, c, &ldc, work, &lwork, &info, 1, 1);
1880 }
1881 void unmql(char side, char trans, f_int m, f_int n, f_int k, f_cdouble *a, f_int lda, f_cdouble *tau, f_cdouble *c, f_int ldc, f_cdouble *work, f_int lwork, ref f_int info) {
1882     zunmql_(&side, &trans, &m, &n, &k, a, &lda, tau, c, &ldc, work, &lwork, &info, 1, 1);
1883 }
1884 
1885 /// Multiplies a general matrix by the orthogonal matrix
1886 /// from a QR factorization determined by SGEQRF.
1887 void ormqr(char side, char trans, f_int m, f_int n, f_int k, f_float *a, f_int lda, f_float *tau, f_float *c, f_int ldc, f_float *work, f_int lwork, ref f_int info) {
1888     sormqr_(&side, &trans, &m, &n, &k, a, &lda, tau, c, &ldc, work, &lwork, &info, 1, 1);
1889 }
1890 void ormqr(char side, char trans, f_int m, f_int n, f_int k, f_double *a, f_int lda, f_double *tau, f_double *c, f_int ldc, f_double *work, f_int lwork, ref f_int info) {
1891     dormqr_(&side, &trans, &m, &n, &k, a, &lda, tau, c, &ldc, work, &lwork, &info, 1, 1);
1892 }
1893 
1894 /// Multiplies a general matrix by the unitary matrix
1895 /// from a QR factorization determined by CGEQRF.
1896 void unmqr(char side, char trans, f_int m, f_int n, f_int k, f_cfloat *a, f_int lda, f_cfloat *tau, f_cfloat *c, f_int ldc, f_cfloat *work, f_int lwork, ref f_int info) {
1897     cunmqr_(&side, &trans, &m, &n, &k, a, &lda, tau, c, &ldc, work, &lwork, &info, 1, 1);
1898 }
1899 void unmqr(char side, char trans, f_int m, f_int n, f_int k, f_cdouble *a, f_int lda, f_cdouble *tau, f_cdouble *c, f_int ldc, f_cdouble *work, f_int lwork, ref f_int info) {
1900     zunmqr_(&side, &trans, &m, &n, &k, a, &lda, tau, c, &ldc, work, &lwork, &info, 1, 1);
1901 }
1902 
1903 /// Multiples a general matrix by the orthogonal matrix
1904 /// from an RZ factorization determined by STZRZF.
1905 void ormr3(char side, char trans, f_int m, f_int n, f_int k, f_int l, f_float *a, f_int lda, f_float *tau, f_float *c, f_int ldc, f_float *work, ref f_int info) {
1906     sormr3_(&side, &trans, &m, &n, &k, &l, a, &lda, tau, c, &ldc, work, &info, 1, 1);
1907 }
1908 void ormr3(char side, char trans, f_int m, f_int n, f_int k, f_int l, f_double *a, f_int lda, f_double *tau, f_double *c, f_int ldc, f_double *work, ref f_int info) {
1909     dormr3_(&side, &trans, &m, &n, &k, &l, a, &lda, tau, c, &ldc, work, &info, 1, 1);
1910 }
1911 
1912 /// Multiples a general matrix by the unitary matrix
1913 /// from an RZ factorization determined by CTZRZF.
1914 void unmr3(char side, char trans, f_int m, f_int n, f_int k, f_int l, f_cfloat *a, f_int lda, f_cfloat *tau, f_cfloat *c, f_int ldc, f_cfloat *work, ref f_int info) {
1915     cunmr3_(&side, &trans, &m, &n, &k, &l, a, &lda, tau, c, &ldc, work, &info, 1, 1);
1916 }
1917 void unmr3(char side, char trans, f_int m, f_int n, f_int k, f_int l, f_cdouble *a, f_int lda, f_cdouble *tau, f_cdouble *c, f_int ldc, f_cdouble *work, ref f_int info) {
1918     zunmr3_(&side, &trans, &m, &n, &k, &l, a, &lda, tau, c, &ldc, work, &info, 1, 1);
1919 }
1920 
1921 /// Multiplies a general matrix by the orthogonal matrix
1922 /// from an RQ factorization determined by SGERQF.
1923 void ormrq(char side, char trans, f_int m, f_int n, f_int k, f_float *a, f_int lda, f_float *tau, f_float *c, f_int ldc, f_float *work, f_int lwork, ref f_int info) {
1924     sormrq_(&side, &trans, &m, &n, &k, a, &lda, tau, c, &ldc, work, &lwork, &info, 1, 1);
1925 }
1926 void ormrq(char side, char trans, f_int m, f_int n, f_int k, f_double *a, f_int lda, f_double *tau, f_double *c, f_int ldc, f_double *work, f_int lwork, ref f_int info) {
1927     dormrq_(&side, &trans, &m, &n, &k, a, &lda, tau, c, &ldc, work, &lwork, &info, 1, 1);
1928 }
1929 
1930 /// Multiplies a general matrix by the unitary matrix
1931 /// from an RQ factorization determined by CGERQF.
1932 void unmrq(char side, char trans, f_int m, f_int n, f_int k, f_cfloat *a, f_int lda, f_cfloat *tau, f_cfloat *c, f_int ldc, f_cfloat *work, f_int lwork, ref f_int info) {
1933     cunmrq_(&side, &trans, &m, &n, &k, a, &lda, tau, c, &ldc, work, &lwork, &info, 1, 1);
1934 }
1935 void unmrq(char side, char trans, f_int m, f_int n, f_int k, f_cdouble *a, f_int lda, f_cdouble *tau, f_cdouble *c, f_int ldc, f_cdouble *work, f_int lwork, ref f_int info) {
1936     zunmrq_(&side, &trans, &m, &n, &k, a, &lda, tau, c, &ldc, work, &lwork, &info, 1, 1);
1937 }
1938 
1939 /// Multiples a general matrix by the orthogonal matrix
1940 /// from an RZ factorization determined by STZRZF.
1941 void ormrz(char side, char trans, f_int m, f_int n, f_int k, f_int l, f_float *a, f_int lda, f_float *tau, f_float *c, f_int ldc, f_float *work, f_int lwork, ref f_int info) {
1942     sormrz_(&side, &trans, &m, &n, &k, &l, a, &lda, tau, c, &ldc, work, &lwork, &info, 1, 1);
1943 }
1944 void ormrz(char side, char trans, f_int m, f_int n, f_int k, f_int l, f_double *a, f_int lda, f_double *tau, f_double *c, f_int ldc, f_double *work, f_int lwork, ref f_int info) {
1945     dormrz_(&side, &trans, &m, &n, &k, &l, a, &lda, tau, c, &ldc, work, &lwork, &info, 1, 1);
1946 }
1947 
1948 /// Multiples a general matrix by the unitary matrix
1949 /// from an RZ factorization determined by CTZRZF.
1950 void unmrz(char side, char trans, f_int m, f_int n, f_int k, f_int l, f_cfloat *a, f_int lda, f_cfloat *tau, f_cfloat *c, f_int ldc, f_cfloat *work, f_int lwork, ref f_int info) {
1951     cunmrz_(&side, &trans, &m, &n, &k, &l, a, &lda, tau, c, &ldc, work, &lwork, &info, 1, 1);
1952 }
1953 void unmrz(char side, char trans, f_int m, f_int n, f_int k, f_int l, f_cdouble *a, f_int lda, f_cdouble *tau, f_cdouble *c, f_int ldc, f_cdouble *work, f_int lwork, ref f_int info) {
1954     zunmrz_(&side, &trans, &m, &n, &k, &l, a, &lda, tau, c, &ldc, work, &lwork, &info, 1, 1);
1955 }
1956 
1957 /// Multiplies a general matrix by the orthogonal
1958 /// transformation matrix from a reduction to tridiagonal form
1959 /// determined by SSYTRD.
1960 void ormtr(char side, char uplo, char trans, f_int m, f_int n, f_float *a, f_int lda, f_float *tau, f_float *c, f_int ldc, f_float *work, f_int lwork, ref f_int info) {
1961     sormtr_(&side, &uplo, &trans, &m, &n, a, &lda, tau, c, &ldc, work, &lwork, &info, 1, 1, 1);
1962 }
1963 void ormtr(char side, char uplo, char trans, f_int m, f_int n, f_double *a, f_int lda, f_double *tau, f_double *c, f_int ldc, f_double *work, f_int lwork, ref f_int info) {
1964     dormtr_(&side, &uplo, &trans, &m, &n, a, &lda, tau, c, &ldc, work, &lwork, &info, 1, 1, 1);
1965 }
1966 
1967 /// Multiplies a general matrix by the unitary
1968 /// transformation matrix from a reduction to tridiagonal form
1969 /// determined by CHETRD.
1970 void unmtr(char side, char uplo, char trans, f_int m, f_int n, f_cfloat *a, f_int lda, f_cfloat *tau, f_cfloat *c, f_int ldc, f_cfloat *work, f_int lwork, ref f_int info) {
1971     cunmtr_(&side, &uplo, &trans, &m, &n, a, &lda, tau, c, &ldc, work, &lwork, &info, 1, 1, 1);
1972 }
1973 void unmtr(char side, char uplo, char trans, f_int m, f_int n, f_cdouble *a, f_int lda, f_cdouble *tau, f_cdouble *c, f_int ldc, f_cdouble *work, f_int lwork, ref f_int info) {
1974     zunmtr_(&side, &uplo, &trans, &m, &n, a, &lda, tau, c, &ldc, work, &lwork, &info, 1, 1, 1);
1975 }
1976 
1977 /// Estimates the reciprocal of the condition number of a
1978 /// symmetric positive definite band matrix, using the
1979 /// Cholesky factorization computed by SPBTRF.
1980 void pbcon(char uplo, f_int n, f_int kd, f_float *ab, f_int ldab, f_float *anorm, f_float rcond, f_float *work, f_int *iwork, ref f_int info) {
1981     spbcon_(&uplo, &n, &kd, ab, &ldab, anorm, &rcond, work, iwork, &info, 1);
1982 }
1983 void pbcon(char uplo, f_int n, f_int kd, f_double *ab, f_int ldab, f_double *anorm, f_double rcond, f_double *work, f_int *iwork, ref f_int info) {
1984     dpbcon_(&uplo, &n, &kd, ab, &ldab, anorm, &rcond, work, iwork, &info, 1);
1985 }
1986 void pbcon(char uplo, f_int n, f_int kd, f_cfloat *ab, f_int ldab, f_float *anorm, f_float rcond, f_cfloat *work, f_float *rwork, ref f_int info) {
1987     cpbcon_(&uplo, &n, &kd, ab, &ldab, anorm, &rcond, work, rwork, &info, 1);
1988 }
1989 void pbcon(char uplo, f_int n, f_int kd, f_cdouble *ab, f_int ldab, f_double *anorm, f_double rcond, f_cdouble *work, f_double *rwork, ref f_int info) {
1990     zpbcon_(&uplo, &n, &kd, ab, &ldab, anorm, &rcond, work, rwork, &info, 1);
1991 }
1992 
1993 /// Computes row and column scalings to equilibrate a symmetric
1994 /// positive definite band matrix and reduce its condition number.
1995 void pbequ(char uplo, f_int n, f_int kd, f_float *ab, f_int ldab, f_float *s, f_float *scond, f_float *amax, ref f_int info) {
1996     spbequ_(&uplo, &n, &kd, ab, &ldab, s, scond, amax, &info, 1);
1997 }
1998 void pbequ(char uplo, f_int n, f_int kd, f_double *ab, f_int ldab, f_double *s, f_double *scond, f_double *amax, ref f_int info) {
1999     dpbequ_(&uplo, &n, &kd, ab, &ldab, s, scond, amax, &info, 1);
2000 }
2001 void pbequ(char uplo, f_int n, f_int kd, f_cfloat *ab, f_int ldab, f_float *s, f_float *scond, f_float *amax, ref f_int info) {
2002     cpbequ_(&uplo, &n, &kd, ab, &ldab, s, scond, amax, &info, 1);
2003 }
2004 void pbequ(char uplo, f_int n, f_int kd, f_cdouble *ab, f_int ldab, f_double *s, f_double *scond, f_double *amax, ref f_int info) {
2005     zpbequ_(&uplo, &n, &kd, ab, &ldab, s, scond, amax, &info, 1);
2006 }
2007 
2008 /// Improves the computed solution to a symmetric positive
2009 /// definite banded system of linear equations AX=B, and provides
2010 /// forward and backward error bounds for the solution.
2011 void pbrfs(char uplo, f_int n, f_int kd, f_int nrhs, f_float *ab, f_int ldab, f_float *afb, f_int ldafb, f_float *b, f_int ldb, f_float *x, f_int ldx, f_float *ferr, f_float *berr, f_float *work, f_int *iwork, ref f_int info) {
2012     spbrfs_(&uplo, &n, &kd, &nrhs, ab, &ldab, afb, &ldafb, b, &ldb, x, &ldx, ferr, berr, work, iwork, &info, 1);
2013 }
2014 void pbrfs(char uplo, f_int n, f_int kd, f_int nrhs, f_double *ab, f_int ldab, f_double *afb, f_int ldafb, f_double *b, f_int ldb, f_double *x, f_int ldx, f_double *ferr, f_double *berr, f_double *work, f_int *iwork, ref f_int info) {
2015     dpbrfs_(&uplo, &n, &kd, &nrhs, ab, &ldab, afb, &ldafb, b, &ldb, x, &ldx, ferr, berr, work, iwork, &info, 1);
2016 }
2017 void pbrfs(char uplo, f_int n, f_int kd, f_int nrhs, f_cfloat *ab, f_int ldab, f_cfloat *afb, f_int ldafb, f_cfloat *b, f_int ldb, f_cfloat *x, f_int ldx, f_float *ferr, f_float *berr, f_cfloat *work, f_float *rwork, ref f_int info) {
2018     cpbrfs_(&uplo, &n, &kd, &nrhs, ab, &ldab, afb, &ldafb, b, &ldb, x, &ldx, ferr, berr, work, rwork, &info, 1);
2019 }
2020 void pbrfs(char uplo, f_int n, f_int kd, f_int nrhs, f_cdouble *ab, f_int ldab, f_cdouble *afb, f_int ldafb, f_cdouble *b, f_int ldb, f_cdouble *x, f_int ldx, f_double *ferr, f_double *berr, f_cdouble *work, f_double *rwork, ref f_int info) {
2021     zpbrfs_(&uplo, &n, &kd, &nrhs, ab, &ldab, afb, &ldafb, b, &ldb, x, &ldx, ferr, berr, work, rwork, &info, 1);
2022 }
2023 
2024 /// Computes a split Cholesky factorization of a real symmetric positive
2025 /// definite band matrix.
2026 void pbstf(char uplo, f_int n, f_int kd, f_float *ab, f_int ldab, ref f_int info) {
2027     spbstf_(&uplo, &n, &kd, ab, &ldab, &info, 1);
2028 }
2029 void pbstf(char uplo, f_int n, f_int kd, f_double *ab, f_int ldab, ref f_int info) {
2030     dpbstf_(&uplo, &n, &kd, ab, &ldab, &info, 1);
2031 }
2032 void pbstf(char uplo, f_int n, f_int kd, f_cfloat *ab, f_int ldab, ref f_int info) {
2033     cpbstf_(&uplo, &n, &kd, ab, &ldab, &info, 1);
2034 }
2035 void pbstf(char uplo, f_int n, f_int kd, f_cdouble *ab, f_int ldab, ref f_int info) {
2036     zpbstf_(&uplo, &n, &kd, ab, &ldab, &info, 1);
2037 }
2038 
2039 /// Computes the Cholesky factorization of a symmetric
2040 /// positive definite band matrix.
2041 void pbtrf(char uplo, f_int n, f_int kd, f_float *ab, f_int ldab, ref f_int info) {
2042     spbtrf_(&uplo, &n, &kd, ab, &ldab, &info, 1);
2043 }
2044 void pbtrf(char uplo, f_int n, f_int kd, f_double *ab, f_int ldab, ref f_int info) {
2045     dpbtrf_(&uplo, &n, &kd, ab, &ldab, &info, 1);
2046 }
2047 void pbtrf(char uplo, f_int n, f_int kd, f_cfloat *ab, f_int ldab, ref f_int info) {
2048     cpbtrf_(&uplo, &n, &kd, ab, &ldab, &info, 1);
2049 }
2050 void pbtrf(char uplo, f_int n, f_int kd, f_cdouble *ab, f_int ldab, ref f_int info) {
2051     zpbtrf_(&uplo, &n, &kd, ab, &ldab, &info, 1);
2052 }
2053 
2054 /// Solves a symmetric positive definite banded system
2055 /// of linear equations AX=B, using the Cholesky factorization
2056 /// computed by SPBTRF.
2057 void pbtrs(char uplo, f_int n, f_int kd, f_int nrhs, f_float *ab, f_int ldab, f_float *b, f_int ldb, ref f_int info) {
2058     spbtrs_(&uplo, &n, &kd, &nrhs, ab, &ldab, b, &ldb, &info, 1);
2059 }
2060 void pbtrs(char uplo, f_int n, f_int kd, f_int nrhs, f_double *ab, f_int ldab, f_double *b, f_int ldb, ref f_int info) {
2061     dpbtrs_(&uplo, &n, &kd, &nrhs, ab, &ldab, b, &ldb, &info, 1);
2062 }
2063 void pbtrs(char uplo, f_int n, f_int kd, f_int nrhs, f_cfloat *ab, f_int ldab, f_cfloat *b, f_int ldb, ref f_int info) {
2064     cpbtrs_(&uplo, &n, &kd, &nrhs, ab, &ldab, b, &ldb, &info, 1);
2065 }
2066 void pbtrs(char uplo, f_int n, f_int kd, f_int nrhs, f_cdouble *ab, f_int ldab, f_cdouble *b, f_int ldb, ref f_int info) {
2067     zpbtrs_(&uplo, &n, &kd, &nrhs, ab, &ldab, b, &ldb, &info, 1);
2068 }
2069 
2070 /// Estimates the reciprocal of the condition number of a
2071 /// symmetric positive definite matrix, using the
2072 /// Cholesky factorization computed by SPOTRF.
2073 void pocon(char uplo, f_int n, f_float *a, f_int lda, f_float *anorm, f_float rcond, f_float *work, f_int *iwork, ref f_int info) {
2074     spocon_(&uplo, &n, a, &lda, anorm, &rcond, work, iwork, &info, 1);
2075 }
2076 void pocon(char uplo, f_int n, f_double *a, f_int lda, f_double *anorm, f_double rcond, f_double *work, f_int *iwork, ref f_int info) {
2077     dpocon_(&uplo, &n, a, &lda, anorm, &rcond, work, iwork, &info, 1);
2078 }
2079 void pocon(char uplo, f_int n, f_cfloat *a, f_int lda, f_float *anorm, f_float rcond, f_cfloat *work, f_float *rwork, ref f_int info) {
2080     cpocon_(&uplo, &n, a, &lda, anorm, &rcond, work, rwork, &info, 1);
2081 }
2082 void pocon(char uplo, f_int n, f_cdouble *a, f_int lda, f_double *anorm, f_double rcond, f_cdouble *work, f_double *rwork, ref f_int info) {
2083     zpocon_(&uplo, &n, a, &lda, anorm, &rcond, work, rwork, &info, 1);
2084 }
2085 
2086 /// Computes row and column scalings to equilibrate a symmetric
2087 /// positive definite matrix and reduce its condition number.
2088 void poequ(f_int n, f_float *a, f_int lda, f_float *s, f_float *scond, f_float *amax, ref f_int info) {
2089     spoequ_(&n, a, &lda, s, scond, amax, &info);
2090 }
2091 void poequ(f_int n, f_double *a, f_int lda, f_double *s, f_double *scond, f_double *amax, ref f_int info) {
2092     dpoequ_(&n, a, &lda, s, scond, amax, &info);
2093 }
2094 void poequ(f_int n, f_cfloat *a, f_int lda, f_float *s, f_float *scond, f_float *amax, ref f_int info) {
2095     cpoequ_(&n, a, &lda, s, scond, amax, &info);
2096 }
2097 void poequ(f_int n, f_cdouble *a, f_int lda, f_double *s, f_double *scond, f_double *amax, ref f_int info) {
2098     zpoequ_(&n, a, &lda, s, scond, amax, &info);
2099 }
2100 
2101 /// Improves the computed solution to a symmetric positive
2102 /// definite system of linear equations AX=B, and provides forward
2103 /// and backward error bounds for the solution.
2104 void porfs(char uplo, f_int n, f_int nrhs, f_float *a, f_int lda, f_float *af, f_int ldaf, f_float *b, f_int ldb, f_float *x, f_int ldx, f_float *ferr, f_float *berr, f_float *work, f_int *iwork, ref f_int info) {
2105     sporfs_(&uplo, &n, &nrhs, a, &lda, af, &ldaf, b, &ldb, x, &ldx, ferr, berr, work, iwork, &info, 1);
2106 }
2107 void porfs(char uplo, f_int n, f_int nrhs, f_double *a, f_int lda, f_double *af, f_int ldaf, f_double *b, f_int ldb, f_double *x, f_int ldx, f_double *ferr, f_double *berr, f_double *work, f_int *iwork, ref f_int info) {
2108     dporfs_(&uplo, &n, &nrhs, a, &lda, af, &ldaf, b, &ldb, x, &ldx, ferr, berr, work, iwork, &info, 1);
2109 }
2110 void porfs(char uplo, f_int n, f_int nrhs, f_cfloat *a, f_int lda, f_cfloat *af, f_int ldaf, f_cfloat *b, f_int ldb, f_cfloat *x, f_int ldx, f_float *ferr, f_float *berr, f_cfloat *work, f_float *rwork, ref f_int info) {
2111     cporfs_(&uplo, &n, &nrhs, a, &lda, af, &ldaf, b, &ldb, x, &ldx, ferr, berr, work, rwork, &info, 1);
2112 }
2113 void porfs(char uplo, f_int n, f_int nrhs, f_cdouble *a, f_int lda, f_cdouble *af, f_int ldaf, f_cdouble *b, f_int ldb, f_cdouble *x, f_int ldx, f_double *ferr, f_double *berr, f_cdouble *work, f_double *rwork, ref f_int info) {
2114     zporfs_(&uplo, &n, &nrhs, a, &lda, af, &ldaf, b, &ldb, x, &ldx, ferr, berr, work, rwork, &info, 1);
2115 }
2116 
2117 /// Computes the Cholesky factorization of a symmetric
2118 /// positive definite matrix.
2119 void potrf(char uplo, f_int n, f_float *a, f_int lda, ref f_int info) {
2120     spotrf_(&uplo, &n, a, &lda, &info, 1);
2121 }
2122 void potrf(char uplo, f_int n, f_double *a, f_int lda, ref f_int info) {
2123     dpotrf_(&uplo, &n, a, &lda, &info, 1);
2124 }
2125 void potrf(char uplo, f_int n, f_cfloat *a, f_int lda, ref f_int info) {
2126     cpotrf_(&uplo, &n, a, &lda, &info, 1);
2127 }
2128 void potrf(char uplo, f_int n, f_cdouble *a, f_int lda, ref f_int info) {
2129     zpotrf_(&uplo, &n, a, &lda, &info, 1);
2130 }
2131 
2132 /// Computes the inverse of a symmetric positive definite
2133 /// matrix, using the Cholesky factorization computed by SPOTRF.
2134 void potri(char uplo, f_int n, f_float *a, f_int lda, ref f_int info) {
2135     spotri_(&uplo, &n, a, &lda, &info, 1);
2136 }
2137 void potri(char uplo, f_int n, f_double *a, f_int lda, ref f_int info) {
2138     dpotri_(&uplo, &n, a, &lda, &info, 1);
2139 }
2140 void potri(char uplo, f_int n, f_cfloat *a, f_int lda, ref f_int info) {
2141     cpotri_(&uplo, &n, a, &lda, &info, 1);
2142 }
2143 void potri(char uplo, f_int n, f_cdouble *a, f_int lda, ref f_int info) {
2144     zpotri_(&uplo, &n, a, &lda, &info, 1);
2145 }
2146 
2147 /// Solves a symmetric positive definite system of linear
2148 /// equations AX=B, using the Cholesky factorization computed by
2149 /// SPOTRF.
2150 void potrs(char uplo, f_int n, f_int nrhs, f_float *a, f_int lda, f_float *b, f_int ldb, ref f_int info) {
2151     spotrs_(&uplo, &n, &nrhs, a, &lda, b, &ldb, &info, 1);
2152 }
2153 void potrs(char uplo, f_int n, f_int nrhs, f_double *a, f_int lda, f_double *b, f_int ldb, ref f_int info) {
2154     dpotrs_(&uplo, &n, &nrhs, a, &lda, b, &ldb, &info, 1);
2155 }
2156 void potrs(char uplo, f_int n, f_int nrhs, f_cfloat *a, f_int lda, f_cfloat *b, f_int ldb, ref f_int info) {
2157     cpotrs_(&uplo, &n, &nrhs, a, &lda, b, &ldb, &info, 1);
2158 }
2159 void potrs(char uplo, f_int n, f_int nrhs, f_cdouble *a, f_int lda, f_cdouble *b, f_int ldb, ref f_int info) {
2160     zpotrs_(&uplo, &n, &nrhs, a, &lda, b, &ldb, &info, 1);
2161 }
2162 
2163 /// Estimates the reciprocal of the condition number of a
2164 /// symmetric positive definite matrix in packed storage,
2165 /// using the Cholesky factorization computed by SPPTRF.
2166 void ppcon(char uplo, f_int n, f_float *ap, f_float *anorm, f_float rcond, f_float *work, f_int *iwork, ref f_int info) {
2167     sppcon_(&uplo, &n, ap, anorm, &rcond, work, iwork, &info, 1);
2168 }
2169 void ppcon(char uplo, f_int n, f_double *ap, f_double *anorm, f_double rcond, f_double *work, f_int *iwork, ref f_int info) {
2170     dppcon_(&uplo, &n, ap, anorm, &rcond, work, iwork, &info, 1);
2171 }
2172 void ppcon(char uplo, f_int n, f_cfloat *ap, f_float *anorm, f_float rcond, f_cfloat *work, f_float *rwork, ref f_int info) {
2173     cppcon_(&uplo, &n, ap, anorm, &rcond, work, rwork, &info, 1);
2174 }
2175 void ppcon(char uplo, f_int n, f_cdouble *ap, f_double *anorm, f_double rcond, f_cdouble *work, f_double *rwork, ref f_int info) {
2176     zppcon_(&uplo, &n, ap, anorm, &rcond, work, rwork, &info, 1);
2177 }
2178 
2179 /// Computes row and column scalings to equilibrate a symmetric
2180 /// positive definite matrix in packed storage and reduce its condition
2181 /// number.
2182 void ppequ(char uplo, f_int n, f_float *ap, f_float *s, f_float *scond, f_float *amax, ref f_int info) {
2183     sppequ_(&uplo, &n, ap, s, scond, amax, &info, 1);
2184 }
2185 void ppequ(char uplo, f_int n, f_double *ap, f_double *s, f_double *scond, f_double *amax, ref f_int info) {
2186     dppequ_(&uplo, &n, ap, s, scond, amax, &info, 1);
2187 }
2188 void ppequ(char uplo, f_int n, f_cfloat *ap, f_float *s, f_float *scond, f_float *amax, ref f_int info) {
2189     cppequ_(&uplo, &n, ap, s, scond, amax, &info, 1);
2190 }
2191 void ppequ(char uplo, f_int n, f_cdouble *ap, f_double *s, f_double *scond, f_double *amax, ref f_int info) {
2192     zppequ_(&uplo, &n, ap, s, scond, amax, &info, 1);
2193 }
2194 
2195 /// Improves the computed solution to a symmetric positive
2196 /// definite system of linear equations AX=B, where A is held in
2197 /// packed storage, and provides forward and backward error bounds
2198 /// for the solution.
2199 void pprfs(char uplo, f_int n, f_int nrhs, f_float *ap, f_float *afp, f_float *b, f_int ldb, f_float *x, f_int ldx, f_float *ferr, f_float *berr, f_float *work, f_int *iwork, ref f_int info) {
2200     spprfs_(&uplo, &n, &nrhs, ap, afp, b, &ldb, x, &ldx, ferr, berr, work, iwork, &info, 1);
2201 }
2202 void pprfs(char uplo, f_int n, f_int nrhs, f_double *ap, f_double *afp, f_double *b, f_int ldb, f_double *x, f_int ldx, f_double *ferr, f_double *berr, f_double *work, f_int *iwork, ref f_int info) {
2203     dpprfs_(&uplo, &n, &nrhs, ap, afp, b, &ldb, x, &ldx, ferr, berr, work, iwork, &info, 1);
2204 }
2205 void pprfs(char uplo, f_int n, f_int nrhs, f_cfloat *ap, f_cfloat *afp, f_cfloat *b, f_int ldb, f_cfloat *x, f_int ldx, f_float *ferr, f_float *berr, f_cfloat *work, f_float *rwork, ref f_int info) {
2206     cpprfs_(&uplo, &n, &nrhs, ap, afp, b, &ldb, x, &ldx, ferr, berr, work, rwork, &info, 1);
2207 }
2208 void pprfs(char uplo, f_int n, f_int nrhs, f_cdouble *ap, f_cdouble *afp, f_cdouble *b, f_int ldb, f_cdouble *x, f_int ldx, f_double *ferr, f_double *berr, f_cdouble *work, f_double *rwork, ref f_int info) {
2209     zpprfs_(&uplo, &n, &nrhs, ap, afp, b, &ldb, x, &ldx, ferr, berr, work, rwork, &info, 1);
2210 }
2211 
2212 /// Computes the Cholesky factorization of a symmetric
2213 /// positive definite matrix in packed storage.
2214 void pptrf(char uplo, f_int n, f_float *ap, ref f_int info) {
2215     spptrf_(&uplo, &n, ap, &info, 1);
2216 }
2217 void pptrf(char uplo, f_int n, f_double *ap, ref f_int info) {
2218     dpptrf_(&uplo, &n, ap, &info, 1);
2219 }
2220 void pptrf(char uplo, f_int n, f_cfloat *ap, ref f_int info) {
2221     cpptrf_(&uplo, &n, ap, &info, 1);
2222 }
2223 void pptrf(char uplo, f_int n, f_cdouble *ap, ref f_int info) {
2224     zpptrf_(&uplo, &n, ap, &info, 1);
2225 }
2226 
2227 /// Computes the inverse of a symmetric positive definite
2228 /// matrix in packed storage, using the Cholesky factorization computed
2229 /// by SPPTRF.
2230 void pptri(char uplo, f_int n, f_float *ap, ref f_int info) {
2231     spptri_(&uplo, &n, ap, &info, 1);
2232 }
2233 void pptri(char uplo, f_int n, f_double *ap, ref f_int info) {
2234     dpptri_(&uplo, &n, ap, &info, 1);
2235 }
2236 void pptri(char uplo, f_int n, f_cfloat *ap, ref f_int info) {
2237     cpptri_(&uplo, &n, ap, &info, 1);
2238 }
2239 void pptri(char uplo, f_int n, f_cdouble *ap, ref f_int info) {
2240     zpptri_(&uplo, &n, ap, &info, 1);
2241 }
2242 
2243 /// Solves a symmetric positive definite system of linear
2244 /// equations AX=B, where A is held in packed storage, using the
2245 /// Cholesky factorization computed by SPPTRF.
2246 void pptrs(char uplo, f_int n, f_int nrhs, f_float *ap, f_float *b, f_int ldb, ref f_int info) {
2247     spptrs_(&uplo, &n, &nrhs, ap, b, &ldb, &info, 1);
2248 }
2249 void pptrs(char uplo, f_int n, f_int nrhs, f_double *ap, f_double *b, f_int ldb, ref f_int info) {
2250     dpptrs_(&uplo, &n, &nrhs, ap, b, &ldb, &info, 1);
2251 }
2252 void pptrs(char uplo, f_int n, f_int nrhs, f_cfloat *ap, f_cfloat *b, f_int ldb, ref f_int info) {
2253     cpptrs_(&uplo, &n, &nrhs, ap, b, &ldb, &info, 1);
2254 }
2255 void pptrs(char uplo, f_int n, f_int nrhs, f_cdouble *ap, f_cdouble *b, f_int ldb, ref f_int info) {
2256     zpptrs_(&uplo, &n, &nrhs, ap, b, &ldb, &info, 1);
2257 }
2258 
2259 /// Computes the reciprocal of the condition number of a
2260 /// symmetric positive definite tridiagonal matrix,
2261 /// using the LDL**H factorization computed by SPTTRF.
2262 void ptcon(f_int n, f_float *d, f_float *e, f_float *anorm, f_float rcond, f_float *work, ref f_int info) {
2263     sptcon_(&n, d, e, anorm, &rcond, work, &info);
2264 }
2265 void ptcon(f_int n, f_double *d, f_double *e, f_double *anorm, f_double rcond, f_double *work, ref f_int info) {
2266     dptcon_(&n, d, e, anorm, &rcond, work, &info);
2267 }
2268 void ptcon(f_int n, f_float *d, f_cfloat *e, f_float *anorm, f_float rcond, f_float *rwork, ref f_int info) {
2269     cptcon_(&n, d, e, anorm, &rcond, rwork, &info);
2270 }
2271 void ptcon(f_int n, f_double *d, f_cdouble *e, f_double *anorm, f_double rcond, f_double *rwork, ref f_int info) {
2272     zptcon_(&n, d, e, anorm, &rcond, rwork, &info);
2273 }
2274 
2275 /// Computes all eigenvalues and eigenvectors of a real symmetric
2276 /// positive definite tridiagonal matrix, by computing the SVD of
2277 /// its bidiagonal Cholesky factor.
2278 void pteqr(char compz, f_int n, f_float *d, f_float *e, f_float *z, f_int ldz, f_float *work, ref f_int info) {
2279     spteqr_(&compz, &n, d, e, z, &ldz, work, &info, 1);
2280 }
2281 void pteqr(char compz, f_int n, f_double *d, f_double *e, f_double *z, f_int ldz, f_double *work, ref f_int info) {
2282     dpteqr_(&compz, &n, d, e, z, &ldz, work, &info, 1);
2283 }
2284 void pteqr(char compz, f_int n, f_float *d, f_float *e, f_cfloat *z, f_int ldz, f_float *work, ref f_int info) {
2285     cpteqr_(&compz, &n, d, e, z, &ldz, work, &info, 1);
2286 }
2287 void pteqr(char compz, f_int n, f_double *d, f_double *e, f_cdouble *z, f_int ldz, f_double *work, ref f_int info) {
2288     zpteqr_(&compz, &n, d, e, z, &ldz, work, &info, 1);
2289 }
2290 
2291 /// Improves the computed solution to a symmetric positive
2292 /// definite tridiagonal system of linear equations AX=B, and provides
2293 /// forward and backward error bounds for the solution.
2294 void ptrfs(f_int n, f_int nrhs, f_float *d, f_float *e, f_float *df, f_float *ef, f_float *b, f_int ldb, f_float *x, f_int ldx, f_float *ferr, f_float *berr, f_float *work, ref f_int info) {
2295     sptrfs_(&n, &nrhs, d, e, df, ef, b, &ldb, x, &ldx, ferr, berr, work, &info);
2296 }
2297 void ptrfs(f_int n, f_int nrhs, f_double *d, f_double *e, f_double *df, f_double *ef, f_double *b, f_int ldb, f_double *x, f_int ldx, f_double *ferr, f_double *berr, f_double *work, ref f_int info) {
2298     dptrfs_(&n, &nrhs, d, e, df, ef, b, &ldb, x, &ldx, ferr, berr, work, &info);
2299 }
2300 void ptrfs(char uplo, f_int n, f_int nrhs, f_float *d, f_cfloat *e, f_float *df, f_cfloat *ef, f_cfloat *b, f_int ldb, f_cfloat *x, f_int ldx, f_float *ferr, f_float *berr, f_cfloat *work, f_float *rwork, ref f_int info) {
2301     cptrfs_(&uplo, &n, &nrhs, d, e, df, ef, b, &ldb, x, &ldx, ferr, berr, work, rwork, &info, 1);
2302 }
2303 void ptrfs(char uplo, f_int n, f_int nrhs, f_double *d, f_cdouble *e, f_double *df, f_cdouble *ef, f_cdouble *b, f_int ldb, f_cdouble *x, f_int ldx, f_double *ferr, f_double *berr, f_cdouble *work, f_double *rwork, ref f_int info) {
2304     zptrfs_(&uplo, &n, &nrhs, d, e, df, ef, b, &ldb, x, &ldx, ferr, berr, work, rwork, &info, 1);
2305 }
2306 
2307 /// Computes the LDL**H factorization of a symmetric
2308 /// positive definite tridiagonal matrix.
2309 void pttrf(f_int n, f_float *d, f_float *e, ref f_int info) {
2310     spttrf_(&n, d, e, &info);
2311 }
2312 void pttrf(f_int n, f_double *d, f_double *e, ref f_int info) {
2313     dpttrf_(&n, d, e, &info);
2314 }
2315 void pttrf(f_int n, f_float *d, f_cfloat *e, ref f_int info) {
2316     cpttrf_(&n, d, e, &info);
2317 }
2318 void pttrf(f_int n, f_double *d, f_cdouble *e, ref f_int info) {
2319     zpttrf_(&n, d, e, &info);
2320 }
2321 
2322 /// Solves a symmetric positive definite tridiagonal
2323 /// system of linear equations, using the LDL**H factorization
2324 /// computed by SPTTRF.
2325 void pttrs(f_int n, f_int nrhs, f_float *d, f_float *e, f_float *b, f_int ldb, ref f_int info) {
2326     spttrs_(&n, &nrhs, d, e, b, &ldb, &info);
2327 }
2328 void pttrs(f_int n, f_int nrhs, f_double *d, f_double *e, f_double *b, f_int ldb, ref f_int info) {
2329     dpttrs_(&n, &nrhs, d, e, b, &ldb, &info);
2330 }
2331 void pttrs(char uplo, f_int n, f_int nrhs, f_float *d, f_cfloat *e, f_cfloat *b, f_int ldb, ref f_int info) {
2332     cpttrs_(&uplo, &n, &nrhs, d, e, b, &ldb, &info, 1);
2333 }
2334 void pttrs(char uplo, f_int n, f_int nrhs, f_double *d, f_cdouble *e, f_cdouble *b, f_int ldb, ref f_int info) {
2335     zpttrs_(&uplo, &n, &nrhs, d, e, b, &ldb, &info, 1);
2336 }
2337 
2338 /// Reduces a real symmetric-definite banded generalized eigenproblem
2339 /// A x = lambda B x to standard form, where B has been factorized by
2340 /// SPBSTF (Crawford's algorithm).
2341 void sbgst(char vect, char uplo, f_int n, f_int ka, f_int kb, f_float *ab, f_int ldab, f_float *bb, f_int ldbb, f_float *x, f_int ldx, f_float *work, ref f_int info) {
2342     ssbgst_(&vect, &uplo, &n, &ka, &kb, ab, &ldab, bb, &ldbb, x, &ldx, work, &info, 1, 1);
2343 }
2344 void sbgst(char vect, char uplo, f_int n, f_int ka, f_int kb, f_double *ab, f_int ldab, f_double *bb, f_int ldbb, f_double *x, f_int ldx, f_double *work, ref f_int info) {
2345     dsbgst_(&vect, &uplo, &n, &ka, &kb, ab, &ldab, bb, &ldbb, x, &ldx, work, &info, 1, 1);
2346 }
2347 
2348 /// Reduces a complex Hermitian-definite banded generalized eigenproblem
2349 /// A x = lambda B x to standard form, where B has been factorized by
2350 /// CPBSTF (Crawford's algorithm).
2351 void hbgst(char vect, char uplo, f_int n, f_int ka, f_int kb, f_cfloat *ab, f_int ldab, f_cfloat *bb, f_int ldbb, f_cfloat *x, f_int ldx, f_cfloat *work, f_float *rwork, ref f_int info) {
2352     chbgst_(&vect, &uplo, &n, &ka, &kb, ab, &ldab, bb, &ldbb, x, &ldx, work, rwork, &info, 1, 1);
2353 }
2354 void hbgst(char vect, char uplo, f_int n, f_int ka, f_int kb, f_cdouble *ab, f_int ldab, f_cdouble *bb, f_int ldbb, f_cdouble *x, f_int ldx, f_cdouble *work, f_double *rwork, ref f_int info) {
2355     zhbgst_(&vect, &uplo, &n, &ka, &kb, ab, &ldab, bb, &ldbb, x, &ldx, work, rwork, &info, 1, 1);
2356 }
2357 
2358 /// Reduces a symmetric band matrix to real symmetric
2359 /// tridiagonal form by an orthogonal similarity transformation.
2360 void sbtrd(char vect, char uplo, f_int n, f_int kd, f_float *ab, f_int ldab, f_float *d, f_float *e, f_float *q, f_int ldq, f_float *work, ref f_int info) {
2361     ssbtrd_(&vect, &uplo, &n, &kd, ab, &ldab, d, e, q, &ldq, work, &info, 1, 1);
2362 }
2363 void sbtrd(char vect, char uplo, f_int n, f_int kd, f_double *ab, f_int ldab, f_double *d, f_double *e, f_double *q, f_int ldq, f_double *work, ref f_int info) {
2364     dsbtrd_(&vect, &uplo, &n, &kd, ab, &ldab, d, e, q, &ldq, work, &info, 1, 1);
2365 }
2366 
2367 /// Reduces a Hermitian band matrix to real symmetric
2368 /// tridiagonal form by a unitary similarity transformation.
2369 void hbtrd(char vect, char uplo, f_int n, f_int kd, f_cfloat *ab, f_int ldab, f_float *d, f_float *e, f_cfloat *q, f_int ldq, f_cfloat *work, ref f_int info) {
2370     chbtrd_(&vect, &uplo, &n, &kd, ab, &ldab, d, e, q, &ldq, work, &info, 1, 1);
2371 }
2372 void hbtrd(char vect, char uplo, f_int n, f_int kd, f_cdouble *ab, f_int ldab, f_double *d, f_double *e, f_cdouble *q, f_int ldq, f_cdouble *work, ref f_int info) {
2373     zhbtrd_(&vect, &uplo, &n, &kd, ab, &ldab, d, e, q, &ldq, work, &info, 1, 1);
2374 }
2375 
2376 /// Estimates the reciprocal of the condition number of a
2377 /// real symmetric indefinite
2378 /// matrix in packed storage, using the factorization computed
2379 /// by SSPTRF.
2380 void spcon(char uplo, f_int n, f_float *ap, f_int *ipiv, f_float *anorm, f_float rcond, f_float *work, f_int *iwork, ref f_int info) {
2381     sspcon_(&uplo, &n, ap, ipiv, anorm, &rcond, work, iwork, &info, 1);
2382 }
2383 void spcon(char uplo, f_int n, f_double *ap, f_int *ipiv, f_double *anorm, f_double rcond, f_double *work, f_int *iwork, ref f_int info) {
2384     dspcon_(&uplo, &n, ap, ipiv, anorm, &rcond, work, iwork, &info, 1);
2385 }
2386 void spcon(char uplo, f_int n, f_cfloat *ap, f_int *ipiv, f_float *anorm, f_float rcond, f_cfloat *work, ref f_int info) {
2387     cspcon_(&uplo, &n, ap, ipiv, anorm, &rcond, work, &info, 1);
2388 }
2389 void spcon(char uplo, f_int n, f_cdouble *ap, f_int *ipiv, f_double *anorm, f_double rcond, f_cdouble *work, ref f_int info) {
2390     zspcon_(&uplo, &n, ap, ipiv, anorm, &rcond, work, &info, 1);
2391 }
2392 
2393 /// Estimates the reciprocal of the condition number of a
2394 /// complex Hermitian indefinite
2395 /// matrix in packed storage, using the factorization computed
2396 /// by CHPTRF.
2397 void hpcon(char uplo, f_int n, f_cfloat *ap, f_int *ipiv, f_float *anorm, f_float rcond, f_cfloat *work, ref f_int info) {
2398     chpcon_(&uplo, &n, ap, ipiv, anorm, &rcond, work, &info, 1);
2399 }
2400 void hpcon(char uplo, f_int n, f_cdouble *ap, f_int *ipiv, f_double *anorm, f_double rcond, f_cdouble *work, ref f_int info) {
2401     zhpcon_(&uplo, &n, ap, ipiv, anorm, &rcond, work, &info, 1);
2402 }
2403 
2404 /// Reduces a symmetric-definite generalized eigenproblem
2405 /// Ax= lambda Bx,  ABx= lambda x,  or BAx= lambda x, to standard
2406 /// form,  where A and B are held in packed storage, and B has been
2407 /// factorized by SPPTRF.
2408 void spgst(f_int itype, char uplo, f_int n, f_float *ap, f_float *bp, ref f_int info) {
2409     sspgst_(&itype, &uplo, &n, ap, bp, &info, 1);
2410 }
2411 void spgst(f_int itype, char uplo, f_int n, f_double *ap, f_double *bp, ref f_int info) {
2412     dspgst_(&itype, &uplo, &n, ap, bp, &info, 1);
2413 }
2414 
2415 /// Reduces a Hermitian-definite generalized eigenproblem
2416 /// Ax= lambda Bx,  ABx= lambda x,  or BAx= lambda x, to standard
2417 /// form,  where A and B are held in packed storage, and B has been
2418 /// factorized by CPPTRF.
2419 void hpgst(f_int itype, char uplo, f_int n, f_cfloat *ap, f_cfloat *bp, ref f_int info) {
2420     chpgst_(&itype, &uplo, &n, ap, bp, &info, 1);
2421 }
2422 void hpgst(f_int itype, char uplo, f_int n, f_cdouble *ap, f_cdouble *bp, ref f_int info) {
2423     zhpgst_(&itype, &uplo, &n, ap, bp, &info, 1);
2424 }
2425 
2426 /// Improves the computed solution to a real
2427 /// symmetric indefinite system of linear equations
2428 /// AX=B, where A is held in packed storage, and provides forward
2429 /// and backward error bounds for the solution.
2430 void sprfs(char uplo, f_int n, f_int nrhs, f_float *ap, f_float *afp, f_int *ipiv, f_float *b, f_int ldb, f_float *x, f_int ldx, f_float *ferr, f_float *berr, f_float *work, f_int *iwork, ref f_int info) {
2431     ssprfs_(&uplo, &n, &nrhs, ap, afp, ipiv, b, &ldb, x, &ldx, ferr, berr, work, iwork, &info, 1);
2432 }
2433 void sprfs(char uplo, f_int n, f_int nrhs, f_double *ap, f_double *afp, f_int *ipiv, f_double *b, f_int ldb, f_double *x, f_int ldx, f_double *ferr, f_double *berr, f_double *work, f_int *iwork, ref f_int info) {
2434     dsprfs_(&uplo, &n, &nrhs, ap, afp, ipiv, b, &ldb, x, &ldx, ferr, berr, work, iwork, &info, 1);
2435 }
2436 void sprfs(char uplo, f_int n, f_int nrhs, f_cfloat *ap, f_cfloat *afp, f_int *ipiv, f_cfloat *b, f_int ldb, f_cfloat *x, f_int ldx, f_float *ferr, f_float *berr, f_cfloat *work, f_float *rwork, ref f_int info) {
2437     csprfs_(&uplo, &n, &nrhs, ap, afp, ipiv, b, &ldb, x, &ldx, ferr, berr, work, rwork, &info, 1);
2438 }
2439 void sprfs(char uplo, f_int n, f_int nrhs, f_cdouble *ap, f_cdouble *afp, f_int *ipiv, f_cdouble *b, f_int ldb, f_cdouble *x, f_int ldx, f_double *ferr, f_double *berr, f_cdouble *work, f_double *rwork, ref f_int info) {
2440     zsprfs_(&uplo, &n, &nrhs, ap, afp, ipiv, b, &ldb, x, &ldx, ferr, berr, work, rwork, &info, 1);
2441 }
2442 
2443 /// Improves the computed solution to a complex
2444 /// Hermitian indefinite system of linear equations
2445 /// AX=B, where A is held in packed storage, and provides forward
2446 /// and backward error bounds for the solution.
2447 void hprfs(char uplo, f_int n, f_int nrhs, f_cfloat *ap, f_cfloat *afp, f_int *ipiv, f_cfloat *b, f_int ldb, f_cfloat *x, f_int ldx, f_float *ferr, f_float *berr, f_cfloat *work, f_float *rwork, ref f_int info) {
2448     chprfs_(&uplo, &n, &nrhs, ap, afp, ipiv, b, &ldb, x, &ldx, ferr, berr, work, rwork, &info, 1);
2449 }
2450 void hprfs(char uplo, f_int n, f_int nrhs, f_cdouble *ap, f_cdouble *afp, f_int *ipiv, f_cdouble *b, f_int ldb, f_cdouble *x, f_int ldx, f_double *ferr, f_double *berr, f_cdouble *work, f_double *rwork, ref f_int info) {
2451     zhprfs_(&uplo, &n, &nrhs, ap, afp, ipiv, b, &ldb, x, &ldx, ferr, berr, work, rwork, &info, 1);
2452 }
2453 
2454 /// Reduces a symmetric matrix in packed storage to real
2455 /// symmetric tridiagonal form by an orthogonal similarity
2456 /// transformation.
2457 void sptrd(char uplo, f_int n, f_float *ap, f_float *d, f_float *e, f_float *tau, ref f_int info) {
2458     ssptrd_(&uplo, &n, ap, d, e, tau, &info, 1);
2459 }
2460 void sptrd(char uplo, f_int n, f_double *ap, f_double *d, f_double *e, f_double *tau, ref f_int info) {
2461     dsptrd_(&uplo, &n, ap, d, e, tau, &info, 1);
2462 }
2463 
2464 /// Reduces a Hermitian matrix in packed storage to real
2465 /// symmetric tridiagonal form by a unitary similarity
2466 /// transformation.
2467 void hptrd(char uplo, f_int n, f_cfloat *ap, f_float *d, f_float *e, f_cfloat *tau, ref f_int info) {
2468     chptrd_(&uplo, &n, ap, d, e, tau, &info, 1);
2469 }
2470 void hptrd(char uplo, f_int n, f_cdouble *ap, f_double *d, f_double *e, f_cdouble *tau, ref f_int info) {
2471     zhptrd_(&uplo, &n, ap, d, e, tau, &info, 1);
2472 }
2473 
2474 /// Computes the factorization of a real
2475 /// symmetric-indefinite matrix in packed storage,
2476 /// using the diagonal pivoting method.
2477 void sptrf(char uplo, f_int n, f_float *ap, f_int *ipiv, ref f_int info) {
2478     ssptrf_(&uplo, &n, ap, ipiv, &info, 1);
2479 }
2480 void sptrf(char uplo, f_int n, f_double *ap, f_int *ipiv, ref f_int info) {
2481     dsptrf_(&uplo, &n, ap, ipiv, &info, 1);
2482 }
2483 void sptrf(char uplo, f_int n, f_cfloat *ap, f_int *ipiv, ref f_int info) {
2484     csptrf_(&uplo, &n, ap, ipiv, &info, 1);
2485 }
2486 void sptrf(char uplo, f_int n, f_cdouble *ap, f_int *ipiv, ref f_int info) {
2487     zsptrf_(&uplo, &n, ap, ipiv, &info, 1);
2488 }
2489 
2490 /// Computes the factorization of a complex
2491 /// Hermitian-indefinite matrix in packed storage,
2492 /// using the diagonal pivoting method.
2493 void hptrf(char uplo, f_int n, f_cfloat *ap, f_int *ipiv, ref f_int info) {
2494     chptrf_(&uplo, &n, ap, ipiv, &info, 1);
2495 }
2496 void hptrf(char uplo, f_int n, f_cdouble *ap, f_int *ipiv, ref f_int info) {
2497     zhptrf_(&uplo, &n, ap, ipiv, &info, 1);
2498 }
2499 
2500 /// Computes the inverse of a real symmetric
2501 /// indefinite matrix in packed storage, using the factorization
2502 /// computed by SSPTRF.
2503 void sptri(char uplo, f_int n, f_float *ap, f_int *ipiv, f_float *work, ref f_int info) {
2504     ssptri_(&uplo, &n, ap, ipiv, work, &info, 1);
2505 }
2506 void sptri(char uplo, f_int n, f_double *ap, f_int *ipiv, f_double *work, ref f_int info) {
2507     dsptri_(&uplo, &n, ap, ipiv, work, &info, 1);
2508 }
2509 void sptri(char uplo, f_int n, f_cfloat *ap, f_int *ipiv, f_cfloat *work, ref f_int info) {
2510     csptri_(&uplo, &n, ap, ipiv, work, &info, 1);
2511 }
2512 void sptri(char uplo, f_int n, f_cdouble *ap, f_int *ipiv, f_cdouble *work, ref f_int info) {
2513     zsptri_(&uplo, &n, ap, ipiv, work, &info, 1);
2514 }
2515 
2516 /// Computes the inverse of a complex
2517 /// Hermitian indefinite matrix in packed storage, using the factorization
2518 /// computed by CHPTRF.
2519 void hptri(char uplo, f_int n, f_cfloat *ap, f_int *ipiv, f_cfloat *work, ref f_int info) {
2520     chptri_(&uplo, &n, ap, ipiv, work, &info, 1);
2521 }
2522 void hptri(char uplo, f_int n, f_cdouble *ap, f_int *ipiv, f_cdouble *work, ref f_int info) {
2523     zhptri_(&uplo, &n, ap, ipiv, work, &info, 1);
2524 }
2525 
2526 /// Solves a real symmetric
2527 /// indefinite system of linear equations AX=B, where A is held
2528 /// in packed storage, using the factorization computed
2529 /// by SSPTRF.
2530 void sptrs(char uplo, f_int n, f_int nrhs, f_float *ap, f_int *ipiv, f_float *b, f_int ldb, ref f_int info) {
2531     ssptrs_(&uplo, &n, &nrhs, ap, ipiv, b, &ldb, &info, 1);
2532 }
2533 void sptrs(char uplo, f_int n, f_int nrhs, f_double *ap, f_int *ipiv, f_double *b, f_int ldb, ref f_int info) {
2534     dsptrs_(&uplo, &n, &nrhs, ap, ipiv, b, &ldb, &info, 1);
2535 }
2536 void sptrs(char uplo, f_int n, f_int nrhs, f_cfloat *ap, f_int *ipiv, f_cfloat *b, f_int ldb, ref f_int info) {
2537     csptrs_(&uplo, &n, &nrhs, ap, ipiv, b, &ldb, &info, 1);
2538 }
2539 void sptrs(char uplo, f_int n, f_int nrhs, f_cdouble *ap, f_int *ipiv, f_cdouble *b, f_int ldb, ref f_int info) {
2540     zsptrs_(&uplo, &n, &nrhs, ap, ipiv, b, &ldb, &info, 1);
2541 }
2542 
2543 /// Solves a complex Hermitian
2544 /// indefinite system of linear equations AX=B, where A is held
2545 /// in packed storage, using the factorization computed
2546 /// by CHPTRF.
2547 void hptrs(char uplo, f_int n, f_int nrhs, f_cfloat *ap, f_int *ipiv, f_cfloat *b, f_int ldb, ref f_int info) {
2548     chptrs_(&uplo, &n, &nrhs, ap, ipiv, b, &ldb, &info, 1);
2549 }
2550 void hptrs(char uplo, f_int n, f_int nrhs, f_cdouble *ap, f_int *ipiv, f_cdouble *b, f_int ldb, ref f_int info) {
2551     zhptrs_(&uplo, &n, &nrhs, ap, ipiv, b, &ldb, &info, 1);
2552 }
2553 
2554 /// Computes selected eigenvalues of a real symmetric tridiagonal
2555 /// matrix by bisection.
2556 void stebz(char range, char order, f_int n, f_float *vl, f_float *vu, f_int il, f_int iu, f_float *abstol, f_float *d, f_float *e, f_int m, f_int nsplit, f_float *w, f_int iblock, f_int isplit, f_float *work, f_int *iwork, ref f_int info) {
2557     sstebz_(&range, &order, &n, vl, vu, &il, &iu, abstol, d, e, &m, &nsplit, w, &iblock, &isplit, work, iwork, &info, 1, 1);
2558 }
2559 void stebz(char range, char order, f_int n, f_double *vl, f_double *vu, f_int il, f_int iu, f_double *abstol, f_double *d, f_double *e, f_int m, f_int nsplit, f_double *w, f_int iblock, f_int isplit, f_double *work, f_int *iwork, ref f_int info) {
2560     dstebz_(&range, &order, &n, vl, vu, &il, &iu, abstol, d, e, &m, &nsplit, w, &iblock, &isplit, work, iwork, &info, 1, 1);
2561 }
2562 
2563 /// Computes all eigenvalues and, optionally, eigenvectors of a
2564 /// symmetric tridiagonal matrix using the divide and conquer algorithm.
2565 void stedc(char compz, f_int n, f_float *d, f_float *e, f_float *z, f_int ldz, f_float *work, f_int lwork, f_int *iwork, f_int liwork, ref f_int info) {
2566     sstedc_(&compz, &n, d, e, z, &ldz, work, &lwork, iwork, &liwork, &info, 1);
2567 }
2568 void stedc(char compz, f_int n, f_double *d, f_double *e, f_double *z, f_int ldz, f_double *work, f_int lwork, f_int *iwork, f_int liwork, ref f_int info) {
2569     dstedc_(&compz, &n, d, e, z, &ldz, work, &lwork, iwork, &liwork, &info, 1);
2570 }
2571 void stedc(char compz, f_int n, f_float *d, f_float *e, f_cfloat *z, f_int ldz, f_cfloat *work, f_int lwork, f_float *rwork, f_int lrwork, f_int *iwork, f_int liwork, ref f_int info) {
2572     cstedc_(&compz, &n, d, e, z, &ldz, work, &lwork, rwork, &lrwork, iwork, &liwork, &info, 1);
2573 }
2574 void stedc(char compz, f_int n, f_double *d, f_double *e, f_cdouble *z, f_int ldz, f_cdouble *work, f_int lwork, f_double *rwork, f_int lrwork, f_int *iwork, f_int liwork, ref f_int info) {
2575     zstedc_(&compz, &n, d, e, z, &ldz, work, &lwork, rwork, &lrwork, iwork, &liwork, &info, 1);
2576 }
2577 
2578 /// Computes selected eigenvalues and, optionally, eigenvectors of a
2579 /// symmetric tridiagonal matrix.  The eigenvalues are computed by the
2580 /// dqds algorithm, while eigenvectors are computed from various "good"
2581 /// LDL^T representations (also known as Relatively Robust Representations.)
2582 void stegr(char jobz, char range, f_int n, f_float *d, f_float *e, f_float *vl, f_float *vu, f_int il, f_int iu, f_float *abstol, f_int m, f_float *w, f_float *z, f_int ldz, f_int isuppz, f_float *work, f_int lwork, f_int *iwork, f_int liwork, ref f_int info) {
2583     sstegr_(&jobz, &range, &n, d, e, vl, vu, &il, &iu, abstol, &m, w, z, &ldz, &isuppz, work, &lwork, iwork, &liwork, &info, 1, 1);
2584 }
2585 void stegr(char jobz, char range, f_int n, f_double *d, f_double *e, f_double *vl, f_double *vu, f_int il, f_int iu, f_double *abstol, f_int m, f_double *w, f_double *z, f_int ldz, f_int isuppz, f_double *work, f_int lwork, f_int *iwork, f_int liwork, ref f_int info) {
2586     dstegr_(&jobz, &range, &n, d, e, vl, vu, &il, &iu, abstol, &m, w, z, &ldz, &isuppz, work, &lwork, iwork, &liwork, &info, 1, 1);
2587 }
2588 void stegr(char jobz, char range, f_int n, f_float *d, f_float *e, f_float *vl, f_float *vu, f_int il, f_int iu, f_float *abstol, f_int m, f_float *w, f_cfloat *z, f_int ldz, f_int isuppz, f_float *work, f_int lwork, f_int *iwork, f_int liwork, ref f_int info) {
2589     cstegr_(&jobz, &range, &n, d, e, vl, vu, &il, &iu, abstol, &m, w, z, &ldz, &isuppz, work, &lwork, iwork, &liwork, &info, 1, 1);
2590 }
2591 void stegr(char jobz, char range, f_int n, f_double *d, f_double *e, f_double *vl, f_double *vu, f_int il, f_int iu, f_double *abstol, f_int m, f_double *w, f_cdouble *z, f_int ldz, f_int isuppz, f_double *work, f_int lwork, f_int *iwork, f_int liwork, ref f_int info) {
2592     zstegr_(&jobz, &range, &n, d, e, vl, vu, &il, &iu, abstol, &m, w, z, &ldz, &isuppz, work, &lwork, iwork, &liwork, &info, 1, 1);
2593 }
2594 
2595 /// Computes selected eigenvectors of a real symmetric tridiagonal
2596 /// matrix by inverse iteration.
2597 void stein(f_int n, f_float *d, f_float *e, f_int m, f_float *w, f_int iblock, f_int isplit, f_float *z, f_int ldz, f_float *work, f_int *iwork, f_int ifail, ref f_int info) {
2598     sstein_(&n, d, e, &m, w, &iblock, &isplit, z, &ldz, work, iwork, &ifail, &info);
2599 }
2600 void stein(f_int n, f_double *d, f_double *e, f_int m, f_double *w, f_int iblock, f_int isplit, f_double *z, f_int ldz, f_double *work, f_int *iwork, f_int ifail, ref f_int info) {
2601     dstein_(&n, d, e, &m, w, &iblock, &isplit, z, &ldz, work, iwork, &ifail, &info);
2602 }
2603 void stein(f_int n, f_float *d, f_float *e, f_int m, f_float *w, f_int iblock, f_int isplit, f_cfloat *z, f_int ldz, f_float *work, f_int *iwork, f_int ifail, ref f_int info) {
2604     cstein_(&n, d, e, &m, w, &iblock, &isplit, z, &ldz, work, iwork, &ifail, &info);
2605 }
2606 void stein(f_int n, f_double *d, f_double *e, f_int m, f_double *w, f_int iblock, f_int isplit, f_cdouble *z, f_int ldz, f_double *work, f_int *iwork, f_int ifail, ref f_int info) {
2607     zstein_(&n, d, e, &m, w, &iblock, &isplit, z, &ldz, work, iwork, &ifail, &info);
2608 }
2609 
2610 /// Computes all eigenvalues and eigenvectors of a real symmetric
2611 /// tridiagonal matrix, using the implicit QL or QR algorithm.
2612 void steqr(char compz, f_int n, f_float *d, f_float *e, f_float *z, f_int ldz, f_float *work, ref f_int info) {
2613     ssteqr_(&compz, &n, d, e, z, &ldz, work, &info, 1);
2614 }
2615 void steqr(char compz, f_int n, f_double *d, f_double *e, f_double *z, f_int ldz, f_double *work, ref f_int info) {
2616     dsteqr_(&compz, &n, d, e, z, &ldz, work, &info, 1);
2617 }
2618 void steqr(char compz, f_int n, f_float *d, f_float *e, f_cfloat *z, f_int ldz, f_float *work, ref f_int info) {
2619     csteqr_(&compz, &n, d, e, z, &ldz, work, &info, 1);
2620 }
2621 void steqr(char compz, f_int n, f_double *d, f_double *e, f_cdouble *z, f_int ldz, f_double *work, ref f_int info) {
2622     zsteqr_(&compz, &n, d, e, z, &ldz, work, &info, 1);
2623 }
2624 
2625 /// Computes all eigenvalues of a real symmetric tridiagonal matrix,
2626 /// using a root-free variant of the QL or QR algorithm.
2627 void sterf(f_int n, f_float *d, f_float *e, ref f_int info) {
2628     ssterf_(&n, d, e, &info);
2629 }
2630 void sterf(f_int n, f_double *d, f_double *e, ref f_int info) {
2631     dsterf_(&n, d, e, &info);
2632 }
2633 
2634 /// Estimates the reciprocal of the condition number of a
2635 /// real symmetric indefinite matrix,
2636 /// using the factorization computed by SSYTRF.
2637 void sycon(char uplo, f_int n, f_float *a, f_int lda, f_int *ipiv, f_float *anorm, f_float rcond, f_float *work, f_int *iwork, ref f_int info) {
2638     ssycon_(&uplo, &n, a, &lda, ipiv, anorm, &rcond, work, iwork, &info, 1);
2639 }
2640 void sycon(char uplo, f_int n, f_double *a, f_int lda, f_int *ipiv, f_double *anorm, f_double rcond, f_double *work, f_int *iwork, ref f_int info) {
2641     dsycon_(&uplo, &n, a, &lda, ipiv, anorm, &rcond, work, iwork, &info, 1);
2642 }
2643 void sycon(char uplo, f_int n, f_cfloat *a, f_int lda, f_int *ipiv, f_float *anorm, f_float rcond, f_cfloat *work, ref f_int info) {
2644     csycon_(&uplo, &n, a, &lda, ipiv, anorm, &rcond, work, &info, 1);
2645 }
2646 void sycon(char uplo, f_int n, f_cdouble *a, f_int lda, f_int *ipiv, f_double *anorm, f_double rcond, f_cdouble *work, ref f_int info) {
2647     zsycon_(&uplo, &n, a, &lda, ipiv, anorm, &rcond, work, &info, 1);
2648 }
2649 
2650 /// Estimates the reciprocal of the condition number of a
2651 /// complex Hermitian indefinite matrix,
2652 /// using the factorization computed by CHETRF.
2653 void hecon(char uplo, f_int n, f_cfloat *a, f_int lda, f_int *ipiv, f_float *anorm, f_float rcond, f_cfloat *work, ref f_int info) {
2654     checon_(&uplo, &n, a, &lda, ipiv, anorm, &rcond, work, &info, 1);
2655 }
2656 void hecon(char uplo, f_int n, f_cdouble *a, f_int lda, f_int *ipiv, f_double *anorm, f_double rcond, f_cdouble *work, ref f_int info) {
2657     zhecon_(&uplo, &n, a, &lda, ipiv, anorm, &rcond, work, &info, 1);
2658 }
2659 
2660 /// Reduces a symmetric-definite generalized eigenproblem
2661 /// Ax= lambda Bx,  ABx= lambda x,  or BAx= lambda x, to standard
2662 /// form, where B has been factorized by SPOTRF.
2663 void sygst(f_int itype, char uplo, f_int n, f_float *a, f_int lda, f_float *b, f_int ldb, ref f_int info) {
2664     ssygst_(&itype, &uplo, &n, a, &lda, b, &ldb, &info, 1);
2665 }
2666 void sygst(f_int itype, char uplo, f_int n, f_double *a, f_int lda, f_double *b, f_int ldb, ref f_int info) {
2667     dsygst_(&itype, &uplo, &n, a, &lda, b, &ldb, &info, 1);
2668 }
2669 
2670 /// Reduces a Hermitian-definite generalized eigenproblem
2671 /// Ax= lambda Bx,  ABx= lambda x,  or BAx= lambda x, to standard
2672 /// form, where B has been factorized by CPOTRF.
2673 void hegst(f_int itype, char uplo, f_int n, f_cfloat *a, f_int lda, f_cfloat *b, f_int ldb, ref f_int info) {
2674     chegst_(&itype, &uplo, &n, a, &lda, b, &ldb, &info, 1);
2675 }
2676 void hegst(f_int itype, char uplo, f_int n, f_cdouble *a, f_int lda, f_cdouble *b, f_int ldb, ref f_int info) {
2677     zhegst_(&itype, &uplo, &n, a, &lda, b, &ldb, &info, 1);
2678 }
2679 
2680 /// Improves the computed solution to a real
2681 /// symmetric indefinite system of linear equations
2682 /// AX=B, and provides forward and backward error bounds for the
2683 /// solution.
2684 void syrfs(char uplo, f_int n, f_int nrhs, f_float *a, f_int lda, f_float *af, f_int ldaf, f_int *ipiv, f_float *b, f_int ldb, f_float *x, f_int ldx, f_float *ferr, f_float *berr, f_float *work, f_int *iwork, ref f_int info) {
2685     ssyrfs_(&uplo, &n, &nrhs, a, &lda, af, &ldaf, ipiv, b, &ldb, x, &ldx, ferr, berr, work, iwork, &info, 1);
2686 }
2687 void syrfs(char uplo, f_int n, f_int nrhs, f_double *a, f_int lda, f_double *af, f_int ldaf, f_int *ipiv, f_double *b, f_int ldb, f_double *x, f_int ldx, f_double *ferr, f_double *berr, f_double *work, f_int *iwork, ref f_int info) {
2688     dsyrfs_(&uplo, &n, &nrhs, a, &lda, af, &ldaf, ipiv, b, &ldb, x, &ldx, ferr, berr, work, iwork, &info, 1);
2689 }
2690 void syrfs(char uplo, f_int n, f_int nrhs, f_cfloat *a, f_int lda, f_cfloat *af, f_int ldaf, f_int *ipiv, f_cfloat *b, f_int ldb, f_cfloat *x, f_int ldx, f_float *ferr, f_float *berr, f_cfloat *work, f_float *rwork, ref f_int info) {
2691     csyrfs_(&uplo, &n, &nrhs, a, &lda, af, &ldaf, ipiv, b, &ldb, x, &ldx, ferr, berr, work, rwork, &info, 1);
2692 }
2693 void syrfs(char uplo, f_int n, f_int nrhs, f_cdouble *a, f_int lda, f_cdouble *af, f_int ldaf, f_int *ipiv, f_cdouble *b, f_int ldb, f_cdouble *x, f_int ldx, f_double *ferr, f_double *berr, f_cdouble *work, f_double *rwork, ref f_int info) {
2694     zsyrfs_(&uplo, &n, &nrhs, a, &lda, af, &ldaf, ipiv, b, &ldb, x, &ldx, ferr, berr, work, rwork, &info, 1);
2695 }
2696 
2697 /// Improves the computed solution to a complex
2698 /// Hermitian indefinite system of linear equations
2699 /// AX=B, and provides forward and backward error bounds for the
2700 /// solution.
2701 void herfs(char uplo, f_int n, f_int nrhs, f_cfloat *a, f_int lda, f_cfloat *af, f_int ldaf, f_int *ipiv, f_cfloat *b, f_int ldb, f_cfloat *x, f_int ldx, f_float *ferr, f_float *berr, f_cfloat *work, f_float *rwork, ref f_int info) {
2702     cherfs_(&uplo, &n, &nrhs, a, &lda, af, &ldaf, ipiv, b, &ldb, x, &ldx, ferr, berr, work, rwork, &info, 1);
2703 }
2704 void herfs(char uplo, f_int n, f_int nrhs, f_cdouble *a, f_int lda, f_cdouble *af, f_int ldaf, f_int *ipiv, f_cdouble *b, f_int ldb, f_cdouble *x, f_int ldx, f_double *ferr, f_double *berr, f_cdouble *work, f_double *rwork, ref f_int info) {
2705     zherfs_(&uplo, &n, &nrhs, a, &lda, af, &ldaf, ipiv, b, &ldb, x, &ldx, ferr, berr, work, rwork, &info, 1);
2706 }
2707 
2708 /// Reduces a symmetric matrix to real symmetric tridiagonal
2709 /// form by an orthogonal similarity transformation.
2710 void sytrd(char uplo, f_int n, f_float *a, f_int lda, f_float *d, f_float *e, f_float *tau, f_float *work, f_int lwork, ref f_int info) {
2711     ssytrd_(&uplo, &n, a, &lda, d, e, tau, work, &lwork, &info, 1);
2712 }
2713 void sytrd(char uplo, f_int n, f_double *a, f_int lda, f_double *d, f_double *e, f_double *tau, f_double *work, f_int lwork, ref f_int info) {
2714     dsytrd_(&uplo, &n, a, &lda, d, e, tau, work, &lwork, &info, 1);
2715 }
2716 
2717 /// Reduces a Hermitian matrix to real symmetric tridiagonal
2718 /// form by an orthogonal/unitary similarity transformation.
2719 void hetrd(char uplo, f_int n, f_cfloat *a, f_int lda, f_float *d, f_float *e, f_cfloat *tau, f_cfloat *work, f_int lwork, ref f_int info) {
2720     chetrd_(&uplo, &n, a, &lda, d, e, tau, work, &lwork, &info, 1);
2721 }
2722 void hetrd(char uplo, f_int n, f_cdouble *a, f_int lda, f_double *d, f_double *e, f_cdouble *tau, f_cdouble *work, f_int lwork, ref f_int info) {
2723     zhetrd_(&uplo, &n, a, &lda, d, e, tau, work, &lwork, &info, 1);
2724 }
2725 
2726 /// Computes the factorization of a real symmetric-indefinite matrix,
2727 /// using the diagonal pivoting method.
2728 void sytrf(char uplo, f_int n, f_float *a, f_int lda, f_int *ipiv, f_float *work, f_int lwork, ref f_int info) {
2729     ssytrf_(&uplo, &n, a, &lda, ipiv, work, &lwork, &info, 1);
2730 }
2731 void sytrf(char uplo, f_int n, f_double *a, f_int lda, f_int *ipiv, f_double *work, f_int lwork, ref f_int info) {
2732     dsytrf_(&uplo, &n, a, &lda, ipiv, work, &lwork, &info, 1);
2733 }
2734 void sytrf(char uplo, f_int n, f_cfloat *a, f_int lda, f_int *ipiv, f_cfloat *work, f_int lwork, ref f_int info) {
2735     csytrf_(&uplo, &n, a, &lda, ipiv, work, &lwork, &info, 1);
2736 }
2737 void sytrf(char uplo, f_int n, f_cdouble *a, f_int lda, f_int *ipiv, f_cdouble *work, f_int lwork, ref f_int info) {
2738     zsytrf_(&uplo, &n, a, &lda, ipiv, work, &lwork, &info, 1);
2739 }
2740 
2741 /// Computes the factorization of a complex Hermitian-indefinite matrix,
2742 /// using the diagonal pivoting method.
2743 void hetrf(char uplo, f_int n, f_cfloat *a, f_int lda, f_int *ipiv, f_cfloat *work, f_int lwork, ref f_int info) {
2744     chetrf_(&uplo, &n, a, &lda, ipiv, work, &lwork, &info, 1);
2745 }
2746 void hetrf(char uplo, f_int n, f_cdouble *a, f_int lda, f_int *ipiv, f_cdouble *work, f_int lwork, ref f_int info) {
2747     zhetrf_(&uplo, &n, a, &lda, ipiv, work, &lwork, &info, 1);
2748 }
2749 
2750 /// Computes the inverse of a real symmetric indefinite matrix,
2751 /// using the factorization computed by SSYTRF.
2752 void sytri(char uplo, f_int n, f_float *a, f_int lda, f_int *ipiv, f_float *work, ref f_int info) {
2753     ssytri_(&uplo, &n, a, &lda, ipiv, work, &info, 1);
2754 }
2755 void sytri(char uplo, f_int n, f_double *a, f_int lda, f_int *ipiv, f_double *work, ref f_int info) {
2756     dsytri_(&uplo, &n, a, &lda, ipiv, work, &info, 1);
2757 }
2758 void sytri(char uplo, f_int n, f_cfloat *a, f_int lda, f_int *ipiv, f_cfloat *work, ref f_int info) {
2759     csytri_(&uplo, &n, a, &lda, ipiv, work, &info, 1);
2760 }
2761 void sytri(char uplo, f_int n, f_cdouble *a, f_int lda, f_int *ipiv, f_cdouble *work, ref f_int info) {
2762     zsytri_(&uplo, &n, a, &lda, ipiv, work, &info, 1);
2763 }
2764 
2765 /// Computes the inverse of a complex Hermitian indefinite matrix,
2766 /// using the factorization computed by CHETRF.
2767 void hetri(char uplo, f_int n, f_cfloat *a, f_int lda, f_int *ipiv, f_cfloat *work, ref f_int info) {
2768     chetri_(&uplo, &n, a, &lda, ipiv, work, &info, 1);
2769 }
2770 void hetri(char uplo, f_int n, f_cdouble *a, f_int lda, f_int *ipiv, f_cdouble *work, ref f_int info) {
2771     zhetri_(&uplo, &n, a, &lda, ipiv, work, &info, 1);
2772 }
2773 
2774 /// Solves a real symmetric indefinite system of linear equations AX=B,
2775 /// using the factorization computed by SSPTRF.
2776 void sytrs(char uplo, f_int n, f_int nrhs, f_float *a, f_int lda, f_int *ipiv, f_float *b, f_int ldb, ref f_int info) {
2777     ssytrs_(&uplo, &n, &nrhs, a, &lda, ipiv, b, &ldb, &info, 1);
2778 }
2779 void sytrs(char uplo, f_int n, f_int nrhs, f_double *a, f_int lda, f_int *ipiv, f_double *b, f_int ldb, ref f_int info) {
2780     dsytrs_(&uplo, &n, &nrhs, a, &lda, ipiv, b, &ldb, &info, 1);
2781 }
2782 void sytrs(char uplo, f_int n, f_int nrhs, f_cfloat *a, f_int lda, f_int *ipiv, f_cfloat *b, f_int ldb, ref f_int info) {
2783     csytrs_(&uplo, &n, &nrhs, a, &lda, ipiv, b, &ldb, &info, 1);
2784 }
2785 void sytrs(char uplo, f_int n, f_int nrhs, f_cdouble *a, f_int lda, f_int *ipiv, f_cdouble *b, f_int ldb, ref f_int info) {
2786     zsytrs_(&uplo, &n, &nrhs, a, &lda, ipiv, b, &ldb, &info, 1);
2787 }
2788 
2789 /// Solves a complex Hermitian indefinite system of linear equations AX=B,
2790 /// using the factorization computed by CHPTRF.
2791 void hetrs(char uplo, f_int n, f_int nrhs, f_cfloat *a, f_int lda, f_int *ipiv, f_cfloat *b, f_int ldb, ref f_int info) {
2792     chetrs_(&uplo, &n, &nrhs, a, &lda, ipiv, b, &ldb, &info, 1);
2793 }
2794 void hetrs(char uplo, f_int n, f_int nrhs, f_cdouble *a, f_int lda, f_int *ipiv, f_cdouble *b, f_int ldb, ref f_int info) {
2795     zhetrs_(&uplo, &n, &nrhs, a, &lda, ipiv, b, &ldb, &info, 1);
2796 }
2797 
2798 /// Estimates the reciprocal of the condition number of a triangular
2799 /// band matrix, in either the 1-norm or the infinity-norm.
2800 void tbcon(char norm, char uplo, char diag, f_int n, f_int kd, f_float *ab, f_int ldab, f_float rcond, f_float *work, f_int *iwork, ref f_int info) {
2801     stbcon_(&norm, &uplo, &diag, &n, &kd, ab, &ldab, &rcond, work, iwork, &info, 1, 1, 1);
2802 }
2803 void tbcon(char norm, char uplo, char diag, f_int n, f_int kd, f_double *ab, f_int ldab, f_double rcond, f_double *work, f_int *iwork, ref f_int info) {
2804     dtbcon_(&norm, &uplo, &diag, &n, &kd, ab, &ldab, &rcond, work, iwork, &info, 1, 1, 1);
2805 }
2806 void tbcon(char norm, char uplo, char diag, f_int n, f_int kd, f_cfloat *ab, f_int ldab, f_float rcond, f_cfloat *work, f_float *rwork, ref f_int info) {
2807     ctbcon_(&norm, &uplo, &diag, &n, &kd, ab, &ldab, &rcond, work, rwork, &info, 1, 1, 1);
2808 }
2809 void tbcon(char norm, char uplo, char diag, f_int n, f_int kd, f_cdouble *ab, f_int ldab, f_double rcond, f_cdouble *work, f_double *rwork, ref f_int info) {
2810     ztbcon_(&norm, &uplo, &diag, &n, &kd, ab, &ldab, &rcond, work, rwork, &info, 1, 1, 1);
2811 }
2812 
2813 /// Provides forward and backward error bounds for the solution
2814 /// of a triangular banded system of linear equations AX=B,
2815 /// A**T X=B or A**H X=B.
2816 void tbrfs(char uplo, char trans, char diag, f_int n, f_int kd, f_int nrhs, f_float *ab, f_int ldab, f_float *b, f_int ldb, f_float *x, f_int ldx, f_float *ferr, f_float *berr, f_float *work, f_int *iwork, ref f_int info) {
2817     stbrfs_(&uplo, &trans, &diag, &n, &kd, &nrhs, ab, &ldab, b, &ldb, x, &ldx, ferr, berr, work, iwork, &info, 1, 1, 1);
2818 }
2819 void tbrfs(char uplo, char trans, char diag, f_int n, f_int kd, f_int nrhs, f_double *ab, f_int ldab, f_double *b, f_int ldb, f_double *x, f_int ldx, f_double *ferr, f_double *berr, f_double *work, f_int *iwork, ref f_int info) {
2820     dtbrfs_(&uplo, &trans, &diag, &n, &kd, &nrhs, ab, &ldab, b, &ldb, x, &ldx, ferr, berr, work, iwork, &info, 1, 1, 1);
2821 }
2822 void tbrfs(char uplo, char trans, char diag, f_int n, f_int kd, f_int nrhs, f_cfloat *ab, f_int ldab, f_cfloat *b, f_int ldb, f_cfloat *x, f_int ldx, f_float *ferr, f_float *berr, f_cfloat *work, f_float *rwork, ref f_int info) {
2823     ctbrfs_(&uplo, &trans, &diag, &n, &kd, &nrhs, ab, &ldab, b, &ldb, x, &ldx, ferr, berr, work, rwork, &info, 1, 1, 1);
2824 }
2825 void tbrfs(char uplo, char trans, char diag, f_int n, f_int kd, f_int nrhs, f_cdouble *ab, f_int ldab, f_cdouble *b, f_int ldb, f_cdouble *x, f_int ldx, f_double *ferr, f_double *berr, f_cdouble *work, f_double *rwork, ref f_int info) {
2826     ztbrfs_(&uplo, &trans, &diag, &n, &kd, &nrhs, ab, &ldab, b, &ldb, x, &ldx, ferr, berr, work, rwork, &info, 1, 1, 1);
2827 }
2828 
2829 /// Solves a triangular banded system of linear equations AX=B,
2830 /// A**T X=B or A**H X=B.
2831 void tbtrs(char uplo, char trans, char diag, f_int n, f_int kd, f_int nrhs, f_float *ab, f_int ldab, f_float *b, f_int ldb, ref f_int info) {
2832     stbtrs_(&uplo, &trans, &diag, &n, &kd, &nrhs, ab, &ldab, b, &ldb, &info, 1, 1, 1);
2833 }
2834 void tbtrs(char uplo, char trans, char diag, f_int n, f_int kd, f_int nrhs, f_double *ab, f_int ldab, f_double *b, f_int ldb, ref f_int info) {
2835     dtbtrs_(&uplo, &trans, &diag, &n, &kd, &nrhs, ab, &ldab, b, &ldb, &info, 1, 1, 1);
2836 }
2837 void tbtrs(char uplo, char trans, char diag, f_int n, f_int kd, f_int nrhs, f_cfloat *ab, f_int ldab, f_cfloat *b, f_int ldb, ref f_int info) {
2838     ctbtrs_(&uplo, &trans, &diag, &n, &kd, &nrhs, ab, &ldab, b, &ldb, &info, 1, 1, 1);
2839 }
2840 void tbtrs(char uplo, char trans, char diag, f_int n, f_int kd, f_int nrhs, f_cdouble *ab, f_int ldab, f_cdouble *b, f_int ldb, ref f_int info) {
2841     ztbtrs_(&uplo, &trans, &diag, &n, &kd, &nrhs, ab, &ldab, b, &ldb, &info, 1, 1, 1);
2842 }
2843 
2844 /// Computes some or all of the right and/or left generalized eigenvectors
2845 /// of a pair of upper triangular matrices.
2846 void tgevc(char side, char howmny, f_int select, f_int n, f_float *a, f_int lda, f_float *b, f_int ldb, f_float *vl, f_int ldvl, f_float *vr, f_int ldvr, f_int mm, f_int m, f_float *work, ref f_int info) {
2847     stgevc_(&side, &howmny, &select, &n, a, &lda, b, &ldb, vl, &ldvl, vr, &ldvr, &mm, &m, work, &info, 1, 1);
2848 }
2849 void tgevc(char side, char howmny, f_int select, f_int n, f_double *a, f_int lda, f_double *b, f_int ldb, f_double *vl, f_int ldvl, f_double *vr, f_int ldvr, f_int mm, f_int m, f_double *work, ref f_int info) {
2850     dtgevc_(&side, &howmny, &select, &n, a, &lda, b, &ldb, vl, &ldvl, vr, &ldvr, &mm, &m, work, &info, 1, 1);
2851 }
2852 void tgevc(char side, char howmny, f_int select, f_int n, f_cfloat *a, f_int lda, f_cfloat *b, f_int ldb, f_cfloat *vl, f_int ldvl, f_cfloat *vr, f_int ldvr, f_int mm, f_int m, f_cfloat *work, f_float *rwork, ref f_int info) {
2853     ctgevc_(&side, &howmny, &select, &n, a, &lda, b, &ldb, vl, &ldvl, vr, &ldvr, &mm, &m, work, rwork, &info, 1, 1);
2854 }
2855 void tgevc(char side, char howmny, f_int select, f_int n, f_cdouble *a, f_int lda, f_cdouble *b, f_int ldb, f_cdouble *vl, f_int ldvl, f_cdouble *vr, f_int ldvr, f_int mm, f_int m, f_cdouble *work, f_double *rwork, ref f_int info) {
2856     ztgevc_(&side, &howmny, &select, &n, a, &lda, b, &ldb, vl, &ldvl, vr, &ldvr, &mm, &m, work, rwork, &info, 1, 1);
2857 }
2858 
2859 /// Reorders the generalized real Schur decomposition of a real
2860 /// matrix pair (A,B) using an orthogonal equivalence transformation
2861 /// so that the diagonal block of (A,B) with row index IFST is moved
2862 /// to row ILST.
2863 void tgexc(f_int wantq, f_int wantz, f_int n, f_float *a, f_int lda, f_float *b, f_int ldb, f_float *q, f_int ldq, f_float *z, f_int ldz, f_int ifst, f_int ilst, f_float *work, f_int lwork, ref f_int info) {
2864     stgexc_(&wantq, &wantz, &n, a, &lda, b, &ldb, q, &ldq, z, &ldz, &ifst, &ilst, work, &lwork, &info);
2865 }
2866 void tgexc(f_int wantq, f_int wantz, f_int n, f_double *a, f_int lda, f_double *b, f_int ldb, f_double *q, f_int ldq, f_double *z, f_int ldz, f_int ifst, f_int ilst, f_double *work, f_int lwork, ref f_int info) {
2867     dtgexc_(&wantq, &wantz, &n, a, &lda, b, &ldb, q, &ldq, z, &ldz, &ifst, &ilst, work, &lwork, &info);
2868 }
2869 void tgexc(f_int wantq, f_int wantz, f_int n, f_cfloat *a, f_int lda, f_cfloat *b, f_int ldb, f_cfloat *q, f_int ldq, f_cfloat *z, f_int ldz, f_int ifst, f_int ilst, ref f_int info) {
2870     ctgexc_(&wantq, &wantz, &n, a, &lda, b, &ldb, q, &ldq, z, &ldz, &ifst, &ilst, &info);
2871 }
2872 void tgexc(f_int wantq, f_int wantz, f_int n, f_cdouble *a, f_int lda, f_cdouble *b, f_int ldb, f_cdouble *q, f_int ldq, f_cdouble *z, f_int ldz, f_int ifst, f_int ilst, ref f_int info) {
2873     ztgexc_(&wantq, &wantz, &n, a, &lda, b, &ldb, q, &ldq, z, &ldz, &ifst, &ilst, &info);
2874 }
2875 
2876 /// Reorders the generalized real Schur decomposition of a real
2877 /// matrix pair (A, B) so that a selected cluster of eigenvalues
2878 /// appears in the leading diagonal blocks of the upper quasi-triangular
2879 /// matrix A and the upper triangular B.
2880 void tgsen(f_int ijob, f_int wantq, f_int wantz, f_int select, f_int n, f_float *a, f_int lda, f_float *b, f_int ldb, f_float *alphar, f_float *alphai, f_float *betav, f_float *q, f_int ldq, f_float *z, f_int ldz, f_int m, f_float *pl, f_float *pr, f_float *dif, f_float *work, f_int lwork, f_int *iwork, f_int liwork, ref f_int info) {
2881     stgsen_(&ijob, &wantq, &wantz, &select, &n, a, &lda, b, &ldb, alphar, alphai, betav, q, &ldq, z, &ldz, &m, pl, pr, dif, work, &lwork, iwork, &liwork, &info);
2882 }
2883 void tgsen(f_int ijob, f_int wantq, f_int wantz, f_int select, f_int n, f_double *a, f_int lda, f_double *b, f_int ldb, f_double *alphar, f_double *alphai, f_double *betav, f_double *q, f_int ldq, f_double *z, f_int ldz, f_int m, f_double *pl, f_double *pr, f_double *dif, f_double *work, f_int lwork, f_int *iwork, f_int liwork, ref f_int info) {
2884     dtgsen_(&ijob, &wantq, &wantz, &select, &n, a, &lda, b, &ldb, alphar, alphai, betav, q, &ldq, z, &ldz, &m, pl, pr, dif, work, &lwork, iwork, &liwork, &info);
2885 }
2886 void tgsen(f_int ijob, f_int wantq, f_int wantz, f_int select, f_int n, f_cfloat *a, f_int lda, f_cfloat *b, f_int ldb, f_cfloat *alphav, f_cfloat *betav, f_cfloat *q, f_int ldq, f_cfloat *z, f_int ldz, f_int m, f_float *pl, f_float *pr, f_float *dif, f_cfloat *work, f_int lwork, f_int *iwork, f_int liwork, ref f_int info) {
2887     ctgsen_(&ijob, &wantq, &wantz, &select, &n, a, &lda, b, &ldb, alphav, betav, q, &ldq, z, &ldz, &m, pl, pr, dif, work, &lwork, iwork, &liwork, &info);
2888 }
2889 void tgsen(f_int ijob, f_int wantq, f_int wantz, f_int select, f_int n, f_cdouble *a, f_int lda, f_cdouble *b, f_int ldb, f_cdouble *alphav, f_cdouble *betav, f_cdouble *q, f_int ldq, f_cdouble *z, f_int ldz, f_int m, f_double *pl, f_double *pr, f_double *dif, f_cdouble *work, f_int lwork, f_int *iwork, f_int liwork, ref f_int info) {
2890     ztgsen_(&ijob, &wantq, &wantz, &select, &n, a, &lda, b, &ldb, alphav, betav, q, &ldq, z, &ldz, &m, pl, pr, dif, work, &lwork, iwork, &liwork, &info);
2891 }
2892 
2893 /// Computes the generalized singular value decomposition of two real
2894 /// upper triangular (or trapezoidal) matrices as output by SGGSVP.
2895 void tgsja(char jobu, char jobv, char jobq, f_int m, f_int p, f_int n, f_int k, f_int l, f_float *a, f_int lda, f_float *b, f_int ldb, f_float *tola, f_float *tolb, f_float *alphav, f_float *betav, f_float *u, f_int ldu, f_float *v, f_int ldv, f_float *q, f_int ldq, f_float *work, f_int ncycle, ref f_int info) {
2896     stgsja_(&jobu, &jobv, &jobq, &m, &p, &n, &k, &l, a, &lda, b, &ldb, tola, tolb, alphav, betav, u, &ldu, v, &ldv, q, &ldq, work, &ncycle, &info, 1, 1, 1);
2897 }
2898 void tgsja(char jobu, char jobv, char jobq, f_int m, f_int p, f_int n, f_int k, f_int l, f_double *a, f_int lda, f_double *b, f_int ldb, f_double *tola, f_double *tolb, f_double *alphav, f_double *betav, f_double *u, f_int ldu, f_double *v, f_int ldv, f_double *q, f_int ldq, f_double *work, f_int ncycle, ref f_int info) {
2899     dtgsja_(&jobu, &jobv, &jobq, &m, &p, &n, &k, &l, a, &lda, b, &ldb, tola, tolb, alphav, betav, u, &ldu, v, &ldv, q, &ldq, work, &ncycle, &info, 1, 1, 1);
2900 }
2901 void tgsja(char jobu, char jobv, char jobq, f_int m, f_int p, f_int n, f_int k, f_int l, f_cfloat *a, f_int lda, f_cfloat *b, f_int ldb, f_float *tola, f_float *tolb, f_float *alphav, f_float *betav, f_cfloat *u, f_int ldu, f_cfloat *v, f_int ldv, f_cfloat *q, f_int ldq, f_cfloat *work, f_int ncycle, ref f_int info) {
2902     ctgsja_(&jobu, &jobv, &jobq, &m, &p, &n, &k, &l, a, &lda, b, &ldb, tola, tolb, alphav, betav, u, &ldu, v, &ldv, q, &ldq, work, &ncycle, &info, 1, 1, 1);
2903 }
2904 void tgsja(char jobu, char jobv, char jobq, f_int m, f_int p, f_int n, f_int k, f_int l, f_cdouble *a, f_int lda, f_cdouble *b, f_int ldb, f_double *tola, f_double *tolb, f_double *alphav, f_double *betav, f_cdouble *u, f_int ldu, f_cdouble *v, f_int ldv, f_cdouble *q, f_int ldq, f_cdouble *work, f_int ncycle, ref f_int info) {
2905     ztgsja_(&jobu, &jobv, &jobq, &m, &p, &n, &k, &l, a, &lda, b, &ldb, tola, tolb, alphav, betav, u, &ldu, v, &ldv, q, &ldq, work, &ncycle, &info, 1, 1, 1);
2906 }
2907 
2908 /// Estimates reciprocal condition numbers for specified
2909 /// eigenvalues and/or eigenvectors of a matrix pair (A, B) in
2910 /// generalized real Schur canonical form, as returned by SGGES.
2911 void tgsna(char job, char howmny, f_int select, f_int n, f_float *a, f_int lda, f_float *b, f_int ldb, f_float *vl, f_int ldvl, f_float *vr, f_int ldvr, f_float *s, f_float *dif, f_int mm, f_int m, f_float *work, f_int lwork, f_int *iwork, ref f_int info) {
2912     stgsna_(&job, &howmny, &select, &n, a, &lda, b, &ldb, vl, &ldvl, vr, &ldvr, s, dif, &mm, &m, work, &lwork, iwork, &info, 1, 1);
2913 }
2914 void tgsna(char job, char howmny, f_int select, f_int n, f_double *a, f_int lda, f_double *b, f_int ldb, f_double *vl, f_int ldvl, f_double *vr, f_int ldvr, f_double *s, f_double *dif, f_int mm, f_int m, f_double *work, f_int lwork, f_int *iwork, ref f_int info) {
2915     dtgsna_(&job, &howmny, &select, &n, a, &lda, b, &ldb, vl, &ldvl, vr, &ldvr, s, dif, &mm, &m, work, &lwork, iwork, &info, 1, 1);
2916 }
2917 void tgsna(char job, char howmny, f_int select, f_int n, f_cfloat *a, f_int lda, f_cfloat *b, f_int ldb, f_cfloat *vl, f_int ldvl, f_cfloat *vr, f_int ldvr, f_float *s, f_float *dif, f_int mm, f_int m, f_cfloat *work, f_int lwork, f_int *iwork, ref f_int info) {
2918     ctgsna_(&job, &howmny, &select, &n, a, &lda, b, &ldb, vl, &ldvl, vr, &ldvr, s, dif, &mm, &m, work, &lwork, iwork, &info, 1, 1);
2919 }
2920 void tgsna(char job, char howmny, f_int select, f_int n, f_cdouble *a, f_int lda, f_cdouble *b, f_int ldb, f_cdouble *vl, f_int ldvl, f_cdouble *vr, f_int ldvr, f_double *s, f_double *dif, f_int mm, f_int m, f_cdouble *work, f_int lwork, f_int *iwork, ref f_int info) {
2921     ztgsna_(&job, &howmny, &select, &n, a, &lda, b, &ldb, vl, &ldvl, vr, &ldvr, s, dif, &mm, &m, work, &lwork, iwork, &info, 1, 1);
2922 }
2923 
2924 /// Solves the generalized Sylvester equation.
2925 void tgsyl(char trans, f_int ijob, f_int m, f_int n, f_float *a, f_int lda, f_float *b, f_int ldb, f_float *c, f_int ldc, f_float *d, f_int ldd, f_float *e, f_int lde, f_float *f, f_int ldf, f_float *scale, f_float *dif, f_float *work, f_int lwork, f_int *iwork, ref f_int info) {
2926     stgsyl_(&trans, &ijob, &m, &n, a, &lda, b, &ldb, c, &ldc, d, &ldd, e, &lde, f, &ldf, scale, dif, work, &lwork, iwork, &info, 1);
2927 }
2928 void tgsyl(char trans, f_int ijob, f_int m, f_int n, f_double *a, f_int lda, f_double *b, f_int ldb, f_double *c, f_int ldc, f_double *d, f_int ldd, f_double *e, f_int lde, f_double *f, f_int ldf, f_double *scale, f_double *dif, f_double *work, f_int lwork, f_int *iwork, ref f_int info) {
2929     dtgsyl_(&trans, &ijob, &m, &n, a, &lda, b, &ldb, c, &ldc, d, &ldd, e, &lde, f, &ldf, scale, dif, work, &lwork, iwork, &info, 1);
2930 }
2931 void tgsyl(char trans, f_int ijob, f_int m, f_int n, f_cfloat *a, f_int lda, f_cfloat *b, f_int ldb, f_cfloat *c, f_int ldc, f_cfloat *d, f_int ldd, f_cfloat *e, f_int lde, f_cfloat *f, f_int ldf, f_float *scale, f_float *dif, f_cfloat *work, f_int lwork, f_int *iwork, ref f_int info) {
2932     ctgsyl_(&trans, &ijob, &m, &n, a, &lda, b, &ldb, c, &ldc, d, &ldd, e, &lde, f, &ldf, scale, dif, work, &lwork, iwork, &info, 1);
2933 }
2934 void tgsyl(char trans, f_int ijob, f_int m, f_int n, f_cdouble *a, f_int lda, f_cdouble *b, f_int ldb, f_cdouble *c, f_int ldc, f_cdouble *d, f_int ldd, f_cdouble *e, f_int lde, f_cdouble *f, f_int ldf, f_double *scale, f_double *dif, f_cdouble *work, f_int lwork, f_int *iwork, ref f_int info) {
2935     ztgsyl_(&trans, &ijob, &m, &n, a, &lda, b, &ldb, c, &ldc, d, &ldd, e, &lde, f, &ldf, scale, dif, work, &lwork, iwork, &info, 1);
2936 }
2937 
2938 /// Estimates the reciprocal of the condition number of a triangular
2939 /// matrix in packed storage, in either the 1-norm or the infinity-norm.
2940 void tpcon(char norm, char uplo, char diag, f_int n, f_float *ap, f_float rcond, f_float *work, f_int *iwork, ref f_int info) {
2941     stpcon_(&norm, &uplo, &diag, &n, ap, &rcond, work, iwork, &info, 1, 1, 1);
2942 }
2943 void tpcon(char norm, char uplo, char diag, f_int n, f_double *ap, f_double rcond, f_double *work, f_int *iwork, ref f_int info) {
2944     dtpcon_(&norm, &uplo, &diag, &n, ap, &rcond, work, iwork, &info, 1, 1, 1);
2945 }
2946 void tpcon(char norm, char uplo, char diag, f_int n, f_cfloat *ap, f_float rcond, f_cfloat *work, f_float *rwork, ref f_int info) {
2947     ctpcon_(&norm, &uplo, &diag, &n, ap, &rcond, work, rwork, &info, 1, 1, 1);
2948 }
2949 void tpcon(char norm, char uplo, char diag, f_int n, f_cdouble *ap, f_double rcond, f_cdouble *work, f_double *rwork, ref f_int info) {
2950     ztpcon_(&norm, &uplo, &diag, &n, ap, &rcond, work, rwork, &info, 1, 1, 1);
2951 }
2952 
2953 /// Provides forward and backward error bounds for the solution
2954 /// of a triangular system of linear equations AX=B, A**T X=B or
2955 /// A**H X=B, where A is held in packed storage.
2956 void tprfs(char uplo, char trans, char diag, f_int n, f_int nrhs, f_float *ap, f_float *b, f_int ldb, f_float *x, f_int ldx, f_float *ferr, f_float *berr, f_float *work, f_int *iwork, ref f_int info) {
2957     stprfs_(&uplo, &trans, &diag, &n, &nrhs, ap, b, &ldb, x, &ldx, ferr, berr, work, iwork, &info, 1, 1, 1);
2958 }
2959 void tprfs(char uplo, char trans, char diag, f_int n, f_int nrhs, f_double *ap, f_double *b, f_int ldb, f_double *x, f_int ldx, f_double *ferr, f_double *berr, f_double *work, f_int *iwork, ref f_int info) {
2960     dtprfs_(&uplo, &trans, &diag, &n, &nrhs, ap, b, &ldb, x, &ldx, ferr, berr, work, iwork, &info, 1, 1, 1);
2961 }
2962 void tprfs(char uplo, char trans, char diag, f_int n, f_int nrhs, f_cfloat *ap, f_cfloat *b, f_int ldb, f_cfloat *x, f_int ldx, f_float *ferr, f_float *berr, f_cfloat *work, f_float *rwork, ref f_int info) {
2963     ctprfs_(&uplo, &trans, &diag, &n, &nrhs, ap, b, &ldb, x, &ldx, ferr, berr, work, rwork, &info, 1, 1, 1);
2964 }
2965 void tprfs(char uplo, char trans, char diag, f_int n, f_int nrhs, f_cdouble *ap, f_cdouble *b, f_int ldb, f_cdouble *x, f_int ldx, f_double *ferr, f_double *berr, f_cdouble *work, f_double *rwork, ref f_int info) {
2966     ztprfs_(&uplo, &trans, &diag, &n, &nrhs, ap, b, &ldb, x, &ldx, ferr, berr, work, rwork, &info, 1, 1, 1);
2967 }
2968 
2969 ///  Computes the inverse of a triangular matrix in packed storage.
2970 void tptri(char uplo, char diag, f_int n, f_float *ap, ref f_int info) {
2971     stptri_(&uplo, &diag, &n, ap, &info, 1, 1);
2972 }
2973 void tptri(char uplo, char diag, f_int n, f_double *ap, ref f_int info) {
2974     dtptri_(&uplo, &diag, &n, ap, &info, 1, 1);
2975 }
2976 void tptri(char uplo, char diag, f_int n, f_cfloat *ap, ref f_int info) {
2977     ctptri_(&uplo, &diag, &n, ap, &info, 1, 1);
2978 }
2979 void tptri(char uplo, char diag, f_int n, f_cdouble *ap, ref f_int info) {
2980     ztptri_(&uplo, &diag, &n, ap, &info, 1, 1);
2981 }
2982 
2983 /// Solves a triangular system of linear equations AX=B,
2984 /// A**T X=B or A**H X=B, where A is held in packed storage.
2985 void tptrs(char uplo, char trans, char diag, f_int n, f_int nrhs, f_float *ap, f_float *b, f_int ldb, ref f_int info) {
2986     stptrs_(&uplo, &trans, &diag, &n, &nrhs, ap, b, &ldb, &info, 1, 1, 1);
2987 }
2988 void tptrs(char uplo, char trans, char diag, f_int n, f_int nrhs, f_double *ap, f_double *b, f_int ldb, ref f_int info) {
2989     dtptrs_(&uplo, &trans, &diag, &n, &nrhs, ap, b, &ldb, &info, 1, 1, 1);
2990 }
2991 void tptrs(char uplo, char trans, char diag, f_int n, f_int nrhs, f_cfloat *ap, f_cfloat *b, f_int ldb, ref f_int info) {
2992     ctptrs_(&uplo, &trans, &diag, &n, &nrhs, ap, b, &ldb, &info, 1, 1, 1);
2993 }
2994 void tptrs(char uplo, char trans, char diag, f_int n, f_int nrhs, f_cdouble *ap, f_cdouble *b, f_int ldb, ref f_int info) {
2995     ztptrs_(&uplo, &trans, &diag, &n, &nrhs, ap, b, &ldb, &info, 1, 1, 1);
2996 }
2997 
2998 /// Estimates the reciprocal of the condition number of a triangular
2999 /// matrix, in either the 1-norm or the infinity-norm.
3000 void trcon(char norm, char uplo, char diag, f_int n, f_float *a, f_int lda, f_float rcond, f_float *work, f_int *iwork, ref f_int info) {
3001     strcon_(&norm, &uplo, &diag, &n, a, &lda, &rcond, work, iwork, &info, 1, 1, 1);
3002 }
3003 void trcon(char norm, char uplo, char diag, f_int n, f_double *a, f_int lda, f_double rcond, f_double *work, f_int *iwork, ref f_int info) {
3004     dtrcon_(&norm, &uplo, &diag, &n, a, &lda, &rcond, work, iwork, &info, 1, 1, 1);
3005 }
3006 void trcon(char norm, char uplo, char diag, f_int n, f_cfloat *a, f_int lda, f_float rcond, f_cfloat *work, f_float *rwork, ref f_int info) {
3007     ctrcon_(&norm, &uplo, &diag, &n, a, &lda, &rcond, work, rwork, &info, 1, 1, 1);
3008 }
3009 void trcon(char norm, char uplo, char diag, f_int n, f_cdouble *a, f_int lda, f_double rcond, f_cdouble *work, f_double *rwork, ref f_int info) {
3010     ztrcon_(&norm, &uplo, &diag, &n, a, &lda, &rcond, work, rwork, &info, 1, 1, 1);
3011 }
3012 
3013 /// Computes some or all of the right and/or left eigenvectors of
3014 /// an upper quasi-triangular matrix.
3015 void trevc(char side, char howmny, f_int select, f_int n, f_float *t, f_int ldt, f_float *vl, f_int ldvl, f_float *vr, f_int ldvr, f_int mm, f_int m, f_float *work, ref f_int info) {
3016     strevc_(&side, &howmny, &select, &n, t, &ldt, vl, &ldvl, vr, &ldvr, &mm, &m, work, &info, 1, 1);
3017 }
3018 void trevc(char side, char howmny, f_int select, f_int n, f_double *t, f_int ldt, f_double *vl, f_int ldvl, f_double *vr, f_int ldvr, f_int mm, f_int m, f_double *work, ref f_int info) {
3019     dtrevc_(&side, &howmny, &select, &n, t, &ldt, vl, &ldvl, vr, &ldvr, &mm, &m, work, &info, 1, 1);
3020 }
3021 void trevc(char side, char howmny, f_int select, f_int n, f_cfloat *t, f_int ldt, f_cfloat *vl, f_int ldvl, f_cfloat *vr, f_int ldvr, f_int mm, f_int m, f_cfloat *work, f_float *rwork, ref f_int info) {
3022     ctrevc_(&side, &howmny, &select, &n, t, &ldt, vl, &ldvl, vr, &ldvr, &mm, &m, work, rwork, &info, 1, 1);
3023 }
3024 void trevc(char side, char howmny, f_int select, f_int n, f_cdouble *t, f_int ldt, f_cdouble *vl, f_int ldvl, f_cdouble *vr, f_int ldvr, f_int mm, f_int m, f_cdouble *work, f_double *rwork, ref f_int info) {
3025     ztrevc_(&side, &howmny, &select, &n, t, &ldt, vl, &ldvl, vr, &ldvr, &mm, &m, work, rwork, &info, 1, 1);
3026 }
3027 
3028 /// Reorders the Schur factorization of a matrix by an orthogonal
3029 /// similarity transformation.
3030 void trexc(char compq, f_int n, f_float *t, f_int ldt, f_float *q, f_int ldq, f_int ifst, f_int ilst, f_float *work, ref f_int info) {
3031     strexc_(&compq, &n, t, &ldt, q, &ldq, &ifst, &ilst, work, &info, 1);
3032 }
3033 void trexc(char compq, f_int n, f_double *t, f_int ldt, f_double *q, f_int ldq, f_int ifst, f_int ilst, f_double *work, ref f_int info) {
3034     dtrexc_(&compq, &n, t, &ldt, q, &ldq, &ifst, &ilst, work, &info, 1);
3035 }
3036 void trexc(char compq, f_int n, f_cfloat *t, f_int ldt, f_cfloat *q, f_int ldq, f_int ifst, f_int ilst, ref f_int info) {
3037     ctrexc_(&compq, &n, t, &ldt, q, &ldq, &ifst, &ilst, &info, 1);
3038 }
3039 void trexc(char compq, f_int n, f_cdouble *t, f_int ldt, f_cdouble *q, f_int ldq, f_int ifst, f_int ilst, ref f_int info) {
3040     ztrexc_(&compq, &n, t, &ldt, q, &ldq, &ifst, &ilst, &info, 1);
3041 }
3042 
3043 /// Provides forward and backward error bounds for the solution
3044 /// of a triangular system of linear equations A X=B, A**T X=B or
3045 /// A**H X=B.
3046 void trrfs(char uplo, char trans, char diag, f_int n, f_int nrhs, f_float *a, f_int lda, f_float *b, f_int ldb, f_float *x, f_int ldx, f_float *ferr, f_float *berr, f_float *work, f_int *iwork, ref f_int info) {
3047     strrfs_(&uplo, &trans, &diag, &n, &nrhs, a, &lda, b, &ldb, x, &ldx, ferr, berr, work, iwork, &info, 1, 1, 1);
3048 }
3049 void trrfs(char uplo, char trans, char diag, f_int n, f_int nrhs, f_double *a, f_int lda, f_double *b, f_int ldb, f_double *x, f_int ldx, f_double *ferr, f_double *berr, f_double *work, f_int *iwork, ref f_int info) {
3050     dtrrfs_(&uplo, &trans, &diag, &n, &nrhs, a, &lda, b, &ldb, x, &ldx, ferr, berr, work, iwork, &info, 1, 1, 1);
3051 }
3052 void trrfs(char uplo, char trans, char diag, f_int n, f_int nrhs, f_cfloat *a, f_int lda, f_cfloat *b, f_int ldb, f_cfloat *x, f_int ldx, f_float *ferr, f_float *berr, f_cfloat *work, f_float *rwork, ref f_int info) {
3053     ctrrfs_(&uplo, &trans, &diag, &n, &nrhs, a, &lda, b, &ldb, x, &ldx, ferr, berr, work, rwork, &info, 1, 1, 1);
3054 }
3055 void trrfs(char uplo, char trans, char diag, f_int n, f_int nrhs, f_cdouble *a, f_int lda, f_cdouble *b, f_int ldb, f_cdouble *x, f_int ldx, f_double *ferr, f_double *berr, f_cdouble *work, f_double *rwork, ref f_int info) {
3056     ztrrfs_(&uplo, &trans, &diag, &n, &nrhs, a, &lda, b, &ldb, x, &ldx, ferr, berr, work, rwork, &info, 1, 1, 1);
3057 }
3058 
3059 /// Reorders the Schur factorization of a matrix in order to find
3060 /// an orthonormal basis of a right invariant subspace corresponding
3061 /// to selected eigenvalues, and returns reciprocal condition numbers
3062 /// (sensitivities) of the average of the cluster of eigenvalues
3063 /// and of the invariant subspace.
3064 void trsen(char job, char compq, f_int select, f_int n, f_float *t, f_int ldt, f_float *q, f_int ldq, f_float *wr, f_float *wi, f_int m, f_float *s, f_float *sep, f_float *work, f_int lwork, f_int *iwork, f_int liwork, ref f_int info) {
3065     strsen_(&job, &compq, &select, &n, t, &ldt, q, &ldq, wr, wi, &m, s, sep, work, &lwork, iwork, &liwork, &info, 1, 1);
3066 }
3067 void trsen(char job, char compq, f_int select, f_int n, f_double *t, f_int ldt, f_double *q, f_int ldq, f_double *wr, f_double *wi, f_int m, f_double *s, f_double *sep, f_double *work, f_int lwork, f_int *iwork, f_int liwork, ref f_int info) {
3068     dtrsen_(&job, &compq, &select, &n, t, &ldt, q, &ldq, wr, wi, &m, s, sep, work, &lwork, iwork, &liwork, &info, 1, 1);
3069 }
3070 void trsen(char job, char compq, f_int select, f_int n, f_cfloat *t, f_int ldt, f_cfloat *q, f_int ldq, f_cfloat *w, f_int m, f_float *s, f_float *sep, f_cfloat *work, f_int lwork, ref f_int info) {
3071     ctrsen_(&job, &compq, &select, &n, t, &ldt, q, &ldq, w, &m, s, sep, work, &lwork, &info, 1, 1);
3072 }
3073 void trsen(char job, char compq, f_int select, f_int n, f_cdouble *t, f_int ldt, f_cdouble *q, f_int ldq, f_cdouble *w, f_int m, f_double *s, f_double *sep, f_cdouble *work, f_int lwork, ref f_int info) {
3074     ztrsen_(&job, &compq, &select, &n, t, &ldt, q, &ldq, w, &m, s, sep, work, &lwork, &info, 1, 1);
3075 }
3076 
3077 /// Estimates the reciprocal condition numbers (sensitivities)
3078 /// of selected eigenvalues and eigenvectors of an upper
3079 /// quasi-triangular matrix.
3080 void trsna(char job, char howmny, f_int select, f_int n, f_float *t, f_int ldt, f_float *vl, f_int ldvl, f_float *vr, f_int ldvr, f_float *s, f_float *sep, f_int mm, f_int m, f_float *work, f_int ldwork, f_int *iwork, ref f_int info) {
3081     strsna_(&job, &howmny, &select, &n, t, &ldt, vl, &ldvl, vr, &ldvr, s, sep, &mm, &m, work, &ldwork, iwork, &info, 1, 1);
3082 }
3083 void trsna(char job, char howmny, f_int select, f_int n, f_double *t, f_int ldt, f_double *vl, f_int ldvl, f_double *vr, f_int ldvr, f_double *s, f_double *sep, f_int mm, f_int m, f_double *work, f_int ldwork, f_int *iwork, ref f_int info) {
3084     dtrsna_(&job, &howmny, &select, &n, t, &ldt, vl, &ldvl, vr, &ldvr, s, sep, &mm, &m, work, &ldwork, iwork, &info, 1, 1);
3085 }
3086 void trsna(char job, char howmny, f_int select, f_int n, f_cfloat *t, f_int ldt, f_cfloat *vl, f_int ldvl, f_cfloat *vr, f_int ldvr, f_float *s, f_float *sep, f_int mm, f_int m, f_cfloat *work, f_int ldwork, f_float *rwork, ref f_int info) {
3087     ctrsna_(&job, &howmny, &select, &n, t, &ldt, vl, &ldvl, vr, &ldvr, s, sep, &mm, &m, work, &ldwork, rwork, &info, 1, 1);
3088 }
3089 void trsna(char job, char howmny, f_int select, f_int n, f_cdouble *t, f_int ldt, f_cdouble *vl, f_int ldvl, f_cdouble *vr, f_int ldvr, f_double *s, f_double *sep, f_int mm, f_int m, f_cdouble *work, f_int ldwork, f_double *rwork, ref f_int info) {
3090     ztrsna_(&job, &howmny, &select, &n, t, &ldt, vl, &ldvl, vr, &ldvr, s, sep, &mm, &m, work, &ldwork, rwork, &info, 1, 1);
3091 }
3092 
3093 /// Solves the Sylvester matrix equation A X +/- X B=C where A
3094 /// and B are upper quasi-triangular, and may be transposed.
3095 void trsyl(char trana, char tranb, f_int isgn, f_int m, f_int n, f_float *a, f_int lda, f_float *b, f_int ldb, f_float *c, f_int ldc, f_float *scale, ref f_int info) {
3096     strsyl_(&trana, &tranb, &isgn, &m, &n, a, &lda, b, &ldb, c, &ldc, scale, &info, 1, 1);
3097 }
3098 void trsyl(char trana, char tranb, f_int isgn, f_int m, f_int n, f_double *a, f_int lda, f_double *b, f_int ldb, f_double *c, f_int ldc, f_double *scale, ref f_int info) {
3099     dtrsyl_(&trana, &tranb, &isgn, &m, &n, a, &lda, b, &ldb, c, &ldc, scale, &info, 1, 1);
3100 }
3101 void trsyl(char trana, char tranb, f_int isgn, f_int m, f_int n, f_cfloat *a, f_int lda, f_cfloat *b, f_int ldb, f_cfloat *c, f_int ldc, f_float *scale, ref f_int info) {
3102     ctrsyl_(&trana, &tranb, &isgn, &m, &n, a, &lda, b, &ldb, c, &ldc, scale, &info, 1, 1);
3103 }
3104 void trsyl(char trana, char tranb, f_int isgn, f_int m, f_int n, f_cdouble *a, f_int lda, f_cdouble *b, f_int ldb, f_cdouble *c, f_int ldc, f_double *scale, ref f_int info) {
3105     ztrsyl_(&trana, &tranb, &isgn, &m, &n, a, &lda, b, &ldb, c, &ldc, scale, &info, 1, 1);
3106 }
3107 
3108 /// Computes the inverse of a triangular matrix.
3109 void trtri(char uplo, char diag, f_int n, f_float *a, f_int lda, ref f_int info) {
3110     strtri_(&uplo, &diag, &n, a, &lda, &info, 1, 1);
3111 }
3112 void trtri(char uplo, char diag, f_int n, f_double *a, f_int lda, ref f_int info) {
3113     dtrtri_(&uplo, &diag, &n, a, &lda, &info, 1, 1);
3114 }
3115 void trtri(char uplo, char diag, f_int n, f_cfloat *a, f_int lda, ref f_int info) {
3116     ctrtri_(&uplo, &diag, &n, a, &lda, &info, 1, 1);
3117 }
3118 void trtri(char uplo, char diag, f_int n, f_cdouble *a, f_int lda, ref f_int info) {
3119     ztrtri_(&uplo, &diag, &n, a, &lda, &info, 1, 1);
3120 }
3121 
3122 /// Solves a triangular system of linear equations AX=B,
3123 /// A**T X=B or A**H X=B.
3124 void trtrs(char uplo, char trans, char diag, f_int n, f_int nrhs, f_float *a, f_int lda, f_float *b, f_int ldb, ref f_int info) {
3125     strtrs_(&uplo, &trans, &diag, &n, &nrhs, a, &lda, b, &ldb, &info, 1, 1, 1);
3126 }
3127 void trtrs(char uplo, char trans, char diag, f_int n, f_int nrhs, f_double *a, f_int lda, f_double *b, f_int ldb, ref f_int info) {
3128     dtrtrs_(&uplo, &trans, &diag, &n, &nrhs, a, &lda, b, &ldb, &info, 1, 1, 1);
3129 }
3130 void trtrs(char uplo, char trans, char diag, f_int n, f_int nrhs, f_cfloat *a, f_int lda, f_cfloat *b, f_int ldb, ref f_int info) {
3131     ctrtrs_(&uplo, &trans, &diag, &n, &nrhs, a, &lda, b, &ldb, &info, 1, 1, 1);
3132 }
3133 void trtrs(char uplo, char trans, char diag, f_int n, f_int nrhs, f_cdouble *a, f_int lda, f_cdouble *b, f_int ldb, ref f_int info) {
3134     ztrtrs_(&uplo, &trans, &diag, &n, &nrhs, a, &lda, b, &ldb, &info, 1, 1, 1);
3135 }
3136 
3137 /// Computes an RQ factorization of an upper trapezoidal matrix.
3138 void tzrqf(f_int m, f_int n, f_float *a, f_int lda, f_float *tau, ref f_int info) {
3139     stzrqf_(&m, &n, a, &lda, tau, &info);
3140 }
3141 void tzrqf(f_int m, f_int n, f_double *a, f_int lda, f_double *tau, ref f_int info) {
3142     dtzrqf_(&m, &n, a, &lda, tau, &info);
3143 }
3144 void tzrqf(f_int m, f_int n, f_cfloat *a, f_int lda, f_cfloat *tau, ref f_int info) {
3145     ctzrqf_(&m, &n, a, &lda, tau, &info);
3146 }
3147 void tzrqf(f_int m, f_int n, f_cdouble *a, f_int lda, f_cdouble *tau, ref f_int info) {
3148     ztzrqf_(&m, &n, a, &lda, tau, &info);
3149 }
3150 
3151 /// Computes an RZ factorization of an upper trapezoidal matrix
3152 /// (blocked version of STZRQF).
3153 void tzrzf(f_int m, f_int n, f_float *a, f_int lda, f_float *tau, f_float *work, f_int lwork, ref f_int info) {
3154     stzrzf_(&m, &n, a, &lda, tau, work, &lwork, &info);
3155 }
3156 void tzrzf(f_int m, f_int n, f_double *a, f_int lda, f_double *tau, f_double *work, f_int lwork, ref f_int info) {
3157     dtzrzf_(&m, &n, a, &lda, tau, work, &lwork, &info);
3158 }
3159 void tzrzf(f_int m, f_int n, f_cfloat *a, f_int lda, f_cfloat *tau, f_cfloat *work, f_int lwork, ref f_int info) {
3160     ctzrzf_(&m, &n, a, &lda, tau, work, &lwork, &info);
3161 }
3162 void tzrzf(f_int m, f_int n, f_cdouble *a, f_int lda, f_cdouble *tau, f_cdouble *work, f_int lwork, ref f_int info) {
3163     ztzrzf_(&m, &n, a, &lda, tau, work, &lwork, &info);
3164 }
3165 
3166 
3167 /// Multiplies a general matrix by the unitary
3168 /// transformation matrix from a reduction to tridiagonal form
3169 /// determined by CHPTRD.
3170 void upmtr(char side, char uplo, char trans, f_int m, f_int n, f_cfloat *ap, f_cfloat *tau, f_cfloat *c, f_int ldc, f_cfloat *work, ref f_int info) {
3171     cupmtr_(&side, &uplo, &trans, &m, &n, ap, tau, c, &ldc, work, &info, 1, 1, 1);
3172 }
3173 void upmtr(char side, char uplo, char trans, f_int m, f_int n, f_cdouble *ap, f_cdouble *tau, f_cdouble *c, f_int ldc, f_cdouble *work, ref f_int info) {
3174     zupmtr_(&side, &uplo, &trans, &m, &n, ap, tau, c, &ldc, work, &info, 1, 1, 1);
3175 }
3176 
3177 
3178 //------------------------------------
3179 //     ----- MISC routines -----
3180 //------------------------------------
3181 
3182 f_int ilaenv(f_int ispec, char *name, char *opts, f_int n1, f_int n2, f_int n3, f_int n4, f_int len_name, f_int len_opts) {
3183     return ilaenv_(&ispec, name, opts, &n1, &n2, &n3, &n4, len_name, len_opts);
3184 }
3185 void ilaenvset(f_int ispec, char *name, char *opts, f_int n1, f_int n2, f_int n3, f_int n4, f_int nvalue, ref f_int info, f_int len_name, f_int len_opts) {
3186     // hmm this doesn't seem to exist in the lib in -g debug builds for some reason
3187     //ilaenvset_(&ispec, name, opts, &n1, &n2, &n3, &n4, &nvalue, &info, len_name, len_opts);
3188 }
3189 
3190 ///
3191 f_float slamch(char[]cmach) {
3192     return slamch_(cmach.ptr, toInt(cmach.length));
3193 }
3194 f_double dlamch(char[]cmach) {
3195     return dlamch_(cmach.ptr, toInt(cmach.length));
3196 }
3197 
3198 version(netlib_clapack)
3199 {
3200     ///
3201     lapack_float_ret_t second() {
3202         return second_();
3203     }
3204     f_double secnd() {
3205         return dsecnd_();
3206     }
3207 }