lapacke.h(3)
🎀 NAME 🎀
lapacke.h — bestie, this is the header for the LAPACK C interface, and it lives in the LAPACK section 3 of the manual. Say hi 👋
✨ SYNOPSIS ✨
Okay so before you can even talk to this header, you gotta bring its friends along. Like, the vibe check requires these exact lines, no cap:
#include <stdlib.h>
#include <complex.h>
#include 'lapacke_mangling.h'
That's it, that's the intro 🫶 — stdlib.h for the standard-library basics, complex.h because LAPACK is very into complex numbers 💅, and 'lapacke_mangling.h' (yes, with the single quotes, keep them exactly like that, don't come for me 🙈) handling the name-mangling situation so everything links up pretty.
Lowkey iconic already, and there's so much more coming 👑
🎀 Macros 🎀
Okay bestie, this is the part where lapacke.h just goes off with the #defines. Buckle in, because there are a LOT. And the way it's structured is actually so satisfying once you see it. 💅
First, the foundational ones — the type definitions and the little helper macros that everything else stands on:
#define lapack_int int
#define lapack_logical lapack_int
#define lapack_complex_float float _Complex
#define lapack_complex_float_real(z) (creal(z))
#define lapack_complex_float_imag(z) (cimag(z))
#define lapack_complex_double double _Complex
#define lapack_complex_double_real(z) (creal(z))
#define lapack_complex_double_imag(z) (cimag(z))
#define LAPACKE_malloc(size) malloc( size )
#define LAPACKE_free(p) free( p )
#define LAPACK_C2INT(x) (lapack_int)(*((float*)&x ))
#define LAPACK_Z2INT(x) (lapack_int)(*((double*)&x ))
#define LAPACK_ROW_MAJOR 101
#define LAPACK_COL_MAJOR 102
#define LAPACK_WORK_MEMORY_ERROR -1010
#define LAPACK_TRANSPOSE_MEMORY_ERROR -1011
So lapack_int is literally just int, and lapack_logical is literally just lapack_int. The complex types are float _Complex and double _Complex (C complex numbers, periodt), and <pink>_real<//>/_imagjust grab the components viacreal(z)andcimag(z). Then you've got LAPACKE_mallocandLAPACKE_freewrapped around plainmalloc( size )andfree( p ). And those two error codes? LAPACK_WORK_MEMORY_ERRORis-1010andLAPACK_TRANSPOSE_MEMORY_ERRORis-1011` — negative, so if you see them in your return value you already know something went sideways. 🫶
LAPACK_ROW_MAJOR is 101 and LAPACK_COL_MAJOR is 102, in case you were wondering which way the numbers go. 💀
✨ The LAPACK_ Aliases ✨
Then comes the parade. Every single entry is the same shape: #define LAPACK_something LAPACK_GLOBAL(something,SOMETHING). Lowercase real name, uppercase shouty name. So basically it's the same function, just wearing two name tags. 😭 Go off.
Starting with lsame and the ?getrf / ?getrf2 crew:
#define LAPACK_lsame LAPACK_GLOBAL(lsame,LSAME)
#define LAPACK_sgetrf LAPACK_GLOBAL(sgetrf,SGETRF)
#define LAPACK_dgetrf LAPACK_GLOBAL(dgetrf,DGETRF)
#define LAPACK_cgetrf LAPACK_GLOBAL(cgetrf,CGETRF)
#define LAPACK_zgetrf LAPACK_GLOBAL(zgetrf,ZGETRF)
#define LAPACK_sgetrf2 LAPACK_GLOBAL(sgetrf2,SGETRF2)
#define LAPACK_dgetrf2 LAPACK_GLOBAL(dgetrf2,DGETRF2)
#define LAPACK_cgetrf2 LAPACK_GLOBAL(cgetrf2,CGETRF2)
#define LAPACK_zgetrf2 LAPACK_GLOBAL(zgetrf2,ZGETRF2)
See the pattern? s, d, c, z — four flavors, every time. Cute.
Band and tridiagonal vibes next:
#define LAPACK_sgbtrf LAPACK_GLOBAL(sgbtrf,SGBTRF)
#define LAPACK_dgbtrf LAPACK_GLOBAL(dgbtrf,DGBTRF)
#define LAPACK_cgbtrf LAPACK_GLOBAL(cgbtrf,CGBTRF)
#define LAPACK_zgbtrf LAPACK_GLOBAL(zgbtrf,ZGBTRF)
#define LAPACK_sgttrf LAPACK_GLOBAL(sgttrf,SGTTRF)
#define LAPACK_dgttrf LAPACK_GLOBAL(dgttrf,DGTTRF)
#define LAPACK_cgttrf LAPACK_GLOBAL(cgttrf,CGTTRF)
#define LAPACK_zgttrf LAPACK_GLOBAL(zgttrf,ZGTTRF)
Then the positive-definite factorization squad, including the 2 variants:
#define LAPACK_spotrf LAPACK_GLOBAL(spotrf,SPOTRF)
#define LAPACK_dpotrf LAPACK_GLOBAL(dpotrf,DPOTRF)
#define LAPACK_cpotrf LAPACK_GLOBAL(cpotrf,CPOTRF)
#define LAPACK_zpotrf LAPACK_GLOBAL(zpotrf,ZPOTRF)
#define LAPACK_spotrf2 LAPACK_GLOBAL(spotrf2,SPOTRF2)
#define LAPACK_dpotrf2 LAPACK_GLOBAL(dpotrf2,DPOTRF2)
#define LAPACK_cpotrf2 LAPACK_GLOBAL(cpotrf2,CPOTRF2)
#define LAPACK_zpotrf2 LAPACK_GLOBAL(zpotrf2,ZPOTRF2)
And here's where the alphabet starts getting ✨unhinged✨ — note the ordering flips around, so stay awake bestie:
#define LAPACK_dpstrf LAPACK_GLOBAL(dpstrf,DPSTRF)
#define LAPACK_spstrf LAPACK_GLOBAL(spstrf,SPSTRF)
#define LAPACK_zpstrf LAPACK_GLOBAL(zpstrf,ZPSTRF)
#define LAPACK_cpstrf LAPACK_GLOBAL(cpstrf,CPSTRF)
#define LAPACK_dpftrf LAPACK_GLOBAL(dpftrf,DPFTRF)
#define LAPACK_spftrf LAPACK_GLOBAL(spftrf,SPFTRF)
#define LAPACK_zpftrf LAPACK_GLOBAL(zpftrf,ZPFTRF)
#define LAPACK_cpftrf LAPACK_GLOBAL(cpftrf,CPFTRF)
Packed storage era:
#define LAPACK_spptrf LAPACK_GLOBAL(spptrf,SPPTRF)
#define LAPACK_dpptrf LAPACK_GLOBAL(dpptrf,DPPTRF)
#define LAPACK_cpptrf LAPACK_GLOBAL(cpptrf,CPPTRF)
#define LAPACK_zpptrf LAPACK_GLOBAL(zpptrf,ZPPTRF)
#define LAPACK_spbtrf LAPACK_GLOBAL(spbtrf,SPBTRF)
#define LAPACK_dpbtrf LAPACK_GLOBAL(dpbtrf,DPBTRF)
#define LAPACK_cpbtrf LAPACK_GLOBAL(cpbtrf,CPBTRF)
#define LAPACK_zpbtrf LAPACK_GLOBAL(zpbtrf,ZPBTRF)
#define LAPACK_spttrf LAPACK_GLOBAL(spttrf,SPTTRF)
#define LAPACK_dpttrf LAPACK_GLOBAL(dpttrf,DPTTRF)
#define LAPACK_cpttrf LAPACK_GLOBAL(cpttrf,CPTTRF)
#define LAPACK_zpttrf LAPACK_GLOBAL(zpttrf,ZPTTRF)
Now the symmetric and Hermitian ones — oh and hey, look, the _rook variants pulled up 🎀:
#define LAPACK_ssytrf LAPACK_GLOBAL(ssytrf,SSYTRF)
#define LAPACK_ssytrf_rook LAPACK_GLOBAL(ssytrf_rook,SSYTRF_ROOK)
#define LAPACK_dsytrf LAPACK_GLOBAL(dsytrf,DSYTRF)
#define LAPACK_dsytrf_rook LAPACK_GLOBAL(dsytrf_rook,DSYTRF_ROOK)
#define LAPACK_csytrf LAPACK_GLOBAL(csytrf,CSYTRF)
#define LAPACK_csytrf_rook LAPACK_GLOBAL(csytrf_rook,CSYTRF_ROOK)
#define LAPACK_zsytrf LAPACK_GLOBAL(zsytrf,ZSYTRF)
#define LAPACK_zsytrf_rook LAPACK_GLOBAL(zsytrf_rook,ZSYTRF_ROOK)
#define LAPACK_chetrf LAPACK_GLOBAL(chetrf,CHETRF)
#define LAPACK_chetrf_rook LAPACK_GLOBAL(chetrf_rook,CHETRF_ROOK)
#define LAPACK_zhetrf LAPACK_GLOBAL(zhetrf,ZHETRF)
#define LAPACK_zhetrf_rook LAPACK_GLOBAL(zhetrf_rook,ZHETRF_ROOK)
#define LAPACK_ssptrf LAPACK_GLOBAL(ssptrf,SSPTRF)
#define LAPACK_dsptrf LAPACK_GLOBAL(dsptrf,DSPTRF)
#define LAPACK_csptrf LAPACK_GLOBAL(csptrf,CSPTRF)
#define LAPACK_zsptrf LAPACK_GLOBAL(zsptrf,ZSPTRF)
#define LAPACK_chptrf LAPACK_GLOBAL(chptrf,CHPTRF)
#define LAPACK_zhptrf LAPACK_GLOBAL(zhptrf,ZHPTRF)
Note chetrf / zhetrf only come in c and z (no s/d for the Hermitian ones), and same for chptrf / zhptrf. Not every family gets all four letters — that's just how it is. 🙈
🌸 Solve Phase: ?trs 🌸
Okay so everything above was the factorize side, and now we get the matching trs crowd. Same names, trf swapped for trs. It's giving "matching set". 💖
#define LAPACK_sgetrs LAPACK_GLOBAL(sgetrs,SGETRS)
#define LAPACK_dgetrs LAPACK_GLOBAL(dgetrs,DGETRS)
#define LAPACK_cgetrs LAPACK_GLOBAL(cgetrs,CGETRS)
#define LAPACK_zgetrs LAPACK_GLOBAL(zgetrs,ZGETRS)
#define LAPACK_sgbtrs LAPACK_GLOBAL(sgbtrs,SGBTRS)
#define LAPACK_dgbtrs LAPACK_GLOBAL(dgbtrs,DGBTRS)
#define LAPACK_cgbtrs LAPACK_GLOBAL(cgbtrs,CGBTRS)
#define LAPACK_zgbtrs LAPACK_GLOBAL(zgbtrs,ZGBTRS)
#define LAPACK_sgttrs LAPACK_GLOBAL(sgttrs,SGTTRS)
#define LAPACK_dgttrs LAPACK_GLOBAL(dgttrs,DGTTRS)
#define LAPACK_cgttrs LAPACK_GLOBAL(cgttrs,CGTTRS)
#define LAPACK_zgttrs LAPACK_GLOBAL(zgttrs,ZGTTRS)
#define LAPACK_spotrs LAPACK_GLOBAL(spotrs,SPOTRS)
#define LAPACK_dpotrs LAPACK_GLOBAL(dpotrs,DPOTRS)
#define LAPACK_cpotrs LAPACK_GLOBAL(cpotrs,CPOTRS)
#define LAPACK_zpotrs LAPACK_GLOBAL(zpotrs,ZPOTRS)
#define LAPACK_dpftrs LAPACK_GLOBAL(dpftrs,DPFTRS)
#define LAPACK_spftrs LAPACK_GLOBAL(spftrs,SPFTRS)
#define LAPACK_zpftrs LAPACK_GLOBAL(zpftrs,ZPFTRS)
#define LAPACK_cpftrs LAPACK_GLOBAL(cpftrs,CPFTRS)
#define LAPACK_spptrs LAPACK_GLOBAL(spptrs,SPPTRS)
#define LAPACK_dpptrs LAPACK_GLOBAL(dpptrs,DPPTRS)
#define LAPACK_cpptrs LAPACK_GLOBAL(cpptrs,CPPTRS)
#define LAPACK_zpptrs LAPACK_GLOBAL(zpptrs,ZPPTRS)
#define LAPACK_spbtrs LAPACK_GLOBAL(spbtrs,SPBTRS)
#define LAPACK_dpbtrs LAPACK_GLOBAL(dpbtrs,DPBTRS)
#define LAPACK_cpbtrs LAPACK_GLOBAL(cpbtrs,CPBTRS)
#define LAPACK_zpbtrs LAPACK_GLOBAL(zpbtrs,ZPBTRS)
#define LAPACK_spttrs LAPACK_GLOBAL(spttrs,SPTTRS)
#define LAPACK_dpttrs LAPACK_GLOBAL(dpttrs,DPTTRS)
#define LAPACK_cpttrs LAPACK_GLOBAL(cpttrs,CPTTRS)
#define LAPACK_zpttrs LAPACK_GLOBAL(zpttrs,ZPTTRS)
And the symmetric/Hermitian trs crew (rook versions included, of course):
#define LAPACK_ssytrs LAPACK_GLOBAL(ssytrs,SSYTRS)
#define LAPACK_ssytrs_rook LAPACK_GLOBAL(ssytrs_rook,SSYTRS_ROOK)
#define LAPACK_dsytrs LAPACK_GLOBAL(dsytrs,DSYTRS)
#define LAPACK_dsytrs_rook LAPACK_GLOBAL(dsytrs_rook,DSYTRS_ROOK)
#define LAPACK_csytrs LAPACK_GLOBAL(csytrs,CSYTRS)
#define LAPACK_csytrs_rook LAPACK_GLOBAL(csytrs_rook,CSYTRS_ROOK)
#define LAPACK_zsytrs LAPACK_GLOBAL(zsytrs,ZSYTRS)
#define LAPACK_zsytrs_rook LAPACK_GLOBAL(zsytrs_rook,ZSYTRS_ROOK)
#define LAPACK_chetrs LAPACK_GLOBAL(chetrs,CHETRS)
#define LAPACK_chetrs_rook LAPACK_GLOBAL(chetrs_rook,CHETRS_ROOK)
#define LAPACK_zhetrs LAPACK_GLOBAL(zhetrs,ZHETRS)
#define LAPACK_zhetrs_rook LAPACK_GLOBAL(zhetrs_rook,ZHETRS_ROOK)
#define LAPACK_ssptrs LAPACK_GLOBAL(ssptrs,SSPTRS)
#define LAPACK_dsptrs LAPACK_GLOBAL(dsptrs,DSPTRS)
#define LAPACK_csptrs LAPACK_GLOBAL(csptrs,CSPTRS)
#define LAPACK_zsptrs LAPACK_GLOBAL(zsptrs,ZSPTRS)
#define LAPACK_chptrs LAPACK_GLOBAL(chptrs,CHPTRS)
#define LAPACK_zhptrs LAPACK_GLOBAL(zhptrs,ZHPTRS)
And a whole t* cluster that you did clock correctly, don't worry:
#define LAPACK_strtrs LAPACK_GLOBAL(strtrs,STRTRS)
#define LAPACK_dtrtrs LAPACK_GLOBAL(dtrtrs,DTRTRS)
#define LAPACK_ctrtrs LAPACK_GLOBAL(ctrtrs,CTRTRS)
#define LAPACK_ztrtrs LAPACK_GLOBAL(ztrtrs,ZTRTRS)
#define LAPACK_stptrs LAPACK_GLOBAL(stptrs,STPTRS)
#define LAPACK_dtptrs LAPACK_GLOBAL(dtptrs,DTPTRS)
#define LAPACK_ctptrs LAPACK_GLOBAL(ctptrs,CTPTRS)
#define LAPACK_ztptrs LAPACK_GLOBAL(ztptrs,ZTPTRS)
#define LAPACK_stbtrs LAPACK_GLOBAL(stbtrs,STBTRS)
#define LAPACK_dtbtrs LAPACK_GLOBAL(dtbtrs,DTBTRS)
#define LAPACK_ctbtrs LAPACK_GLOBAL(ctbtrs,CTBTRS)
#define LAPACK_ztbtrs LAPACK_GLOBAL(ztbtrs,ZTBTRS)
🦋 Condition Numbers: ?con 🦋
Now the con family, i.e. the LAPACK_*gecon, *gbcon, *gtcon, *pocon, *ppcon, *pbcon, *ptcon, *sycon, *hecon, *spcon, *hpcon, *trcon, *tpcon, *tbcon block. Big block. Big slay.
#define LAPACK_sgecon LAPACK_GLOBAL(sgecon,SGECON)
#define LAPACK_dgecon LAPACK_GLOBAL(dgecon,DGECON)
#define LAPACK_cgecon LAPACK_GLOBAL(cgecon,CGECON)
#define LAPACK_zgecon LAPACK_GLOBAL(zgecon,ZGECON)
#define LAPACK_sgbcon LAPACK_GLOBAL(sgbcon,SGBCON)
#define LAPACK_dgbcon LAPACK_GLOBAL(dgbcon,DGBCON)
#define LAPACK_cgbcon LAPACK_GLOBAL(cgbcon,CGBCON)
#define LAPACK_zgbcon LAPACK_GLOBAL(zgbcon,ZGBCON)
#define LAPACK_sgtcon LAPACK_GLOBAL(sgtcon,SGTCON)
#define LAPACK_dgtcon LAPACK_GLOBAL(dgtcon,DGTCON)
#define LAPACK_cgtcon LAPACK_GLOBAL(cgtcon,CGTCON)
#define LAPACK_zgtcon LAPACK_GLOBAL(zgtcon,ZGTCON)
#define LAPACK_spocon LAPACK_GLOBAL(spocon,SPOCON)
#define LAPACK_dpocon LAPACK_GLOBAL(dpocon,DPOCON)
#define LAPACK_cpocon LAPACK_GLOBAL(cpocon,CPOCON)
#define LAPACK_zpocon LAPACK_GLOBAL(zpocon,ZPOCON)
#define LAPACK_sppcon LAPACK_GLOBAL(sppcon,SPPCON)
#define LAPACK_dppcon LAPACK_GLOBAL(dppcon,DPPCON)
#define LAPACK_cppcon LAPACK_GLOBAL(cppcon,CPPCON)
#define LAPACK_zppcon LAPACK_GLOBAL(zppcon,ZPPCON)
#define LAPACK_spbcon LAPACK_GLOBAL(spbcon,SPBCON)
#define LAPACK_dpbcon LAPACK_GLOBAL(dpbcon,DPBCON)
#define LAPACK_cpbcon LAPACK_GLOBAL(cpbcon,CPBCON)
#define LAPACK_zpbcon LAPACK_GLOBAL(zpbcon,ZPBCON)
#define LAPACK_sptcon LAPACK_GLOBAL(sptcon,SPTCON)
#define LAPACK_dptcon LAPACK_GLOBAL(dptcon,DPTCON)
#define LAPACK_cptcon LAPACK_GLOBAL(cptcon,CPTCON)
#define LAPACK_zptcon LAPACK_GLOBAL(zptcon,ZPTCON)
Sym / Hermitian / packed / triangular continuation:
#define LAPACK_ssycon LAPACK_GLOBAL(ssycon,SSYCON)
#define LAPACK_dsycon LAPACK_GLOBAL(dsycon,DSYCON)
#define LAPACK_csycon LAPACK_GLOBAL(csycon,CSYCON)
#define LAPACK_zsycon LAPACK_GLOBAL(zsycon,ZSYCON)
#define LAPACK_checon LAPACK_GLOBAL(checon,CHECON)
#define LAPACK_zhecon LAPACK_GLOBAL(zhecon,ZHECON)
#define LAPACK_sspcon LAPACK_GLOBAL(sspcon,SSPCON)
#define LAPACK_dspcon LAPACK_GLOBAL(dspcon,DSPCON)
#define LAPACK_cspcon LAPACK_GLOBAL(cspcon,CSPCON)
#define LAPACK_zspcon LAPACK_GLOBAL(zspcon,ZSPCON)
#define LAPACK_chpcon LAPACK_GLOBAL(chpcon,CHPCON)
#define LAPACK_zhpcon LAPACK_GLOBAL(zhpcon,ZHPCON)
#define LAPACK_strcon LAPACK_GLOBAL(strcon,STRCON)
#define LAPACK_dtrcon LAPACK_GLOBAL(dtrcon,DTRCON)
#define LAPACK_ctrcon LAPACK_GLOBAL(ctrcon,CTRCON)
#define LAPACK_ztrcon LAPACK_GLOBAL(ztrcon,ZTRCON)
#define LAPACK_stpcon LAPACK_GLOBAL(stpcon,STPCON)
#define LAPACK_dtpcon LAPACK_GLOBAL(dtpcon,DTPCON)
#define LAPACK_ctpcon LAPACK_GLOBAL(ctpcon,CTPCON)
#define LAPACK_ztpcon LAPACK_GLOBAL(ztpcon,ZTPCON)
#define LAPACK_stbcon LAPACK_GLOBAL(stbcon,STBCON)
#define LAPACK_dtbcon LAPACK_GLOBAL(dtbcon,DTBCON)
#define LAPACK_ctbcon LAPACK_GLOBAL(ctbcon,CTBCON)
#define LAPACK_ztbcon LAPACK_GLOBAL(ztbcon,ZTBCON)
Notice again: checon / zhecon and chpcon / zhpcon only exist for c and z. The Hermitian ones don't do s/d. That's not me being lazy, that's literally the header. 💀
🧚 Refinement: ?rfs & friends 🧚
And we close out this chunk with the rfs crew, plus one very special dgerfsx getting its own moment at the end:
#define LAPACK_sgerfs LAPACK_GLOBAL(sgerfs,SGERFS)
#define LAPACK_dgerfs LAPACK_GLOBAL(dgerfs,DGERFS)
#define LAPACK_cgerfs LAPACK_GLOBAL(cgerfs,CGERFS)
#define LAPACK_zgerfs LAPACK_GLOBAL(zgerfs,ZGERFS)
#define LAPACK_dgerfsx LAPACK_GLOBAL(dgerfsx,DGERFSX)
Yes, this part really does just end on dgerfsx mid-thought. No wrap-up, no bow on top — the list keeps going in the next part. Stay with me bestie, we're literally so close to being done with the macros. 🌈
okay so this next stretch is a lot of #defines and I need you to not panic 💖 it's literally just the pattern repeating — lowercase C name on the left, LAPACK_GLOBAL wrapping that same name plus its ALL-CAPS Fortran twin on the right. Your girl is just gonna walk you through them in the exact order they appear, because that order matters and I'm not out here reorganizing someone's header file 💅
First little batch: the gerfsx crew, then the banded gbrfs squad, then the tridiagonal girlies. Notice the order goes s, z, c at the top — yes it's a little chaotic, no we're not fixing it 🌸
#define LAPACK_sgerfsx LAPACK_GLOBAL(sgerfsx,SGERFSX)
#define LAPACK_zgerfsx LAPACK_GLOBAL(zgerfsx,ZGERFSX)
#define LAPACK_cgerfsx LAPACK_GLOBAL(cgerfsx,CGERFSX)
#define LAPACK_sgbrfs LAPACK_GLOBAL(sgbrfs,SGBRFS)
#define LAPACK_dgbrfs LAPACK_GLOBAL(dgbrfs,DGBRFS)
#define LAPACK_cgbrfs LAPACK_GLOBAL(cgbrfs,CGBRFS)
#define LAPACK_zgbrfs LAPACK_GLOBAL(zgbrfs,ZGBRFS)
#define LAPACK_dgbrfsx LAPACK_GLOBAL(dgbrfsx,DGBRFSX)
#define LAPACK_sgbrfsx LAPACK_GLOBAL(sgbrfsx,SGBRFSX)
#define LAPACK_zgbrfsx LAPACK_GLOBAL(zgbrfsx,ZGBRFSX)
#define LAPACK_cgbrfsx LAPACK_GLOBAL(cgbrfsx,CGBRFSX)
#define LAPACK_sgtrfs LAPACK_GLOBAL(sgtrfs,SGTRFS)
#define LAPACK_dgtrfs LAPACK_GLOBAL(dgtrfs,DGTRFS)
#define LAPACK_cgtrfs LAPACK_GLOBAL(cgtrfs,CGTRFS)
#define LAPACK_zgtrfs LAPACK_GLOBAL(zgtrfs,ZGTRFS)
next up: positive-definite porfs, the packed pprfs besties, and the pbrfs crew that live down in band-storage land. also catch that dporfsx and sporfsx are flipped relative to the first line of their block — the header did that, not me, and I refuse to take the blame 🙈
#define LAPACK_sporfs LAPACK_GLOBAL(sporfs,SPORFS)
#define LAPACK_dporfs LAPACK_GLOBAL(dporfs,DPORFS)
#define LAPACK_cporfs LAPACK_GLOBAL(cporfs,CPORFS)
#define LAPACK_zporfs LAPACK_GLOBAL(zporfs,ZPORFS)
#define LAPACK_dporfsx LAPACK_GLOBAL(dporfsx,DPORFSX)
#define LAPACK_sporfsx LAPACK_GLOBAL(sporfsx,SPORFSX)
#define LAPACK_zporfsx LAPACK_GLOBAL(zporfsx,ZPORFSX)
#define LAPACK_cporfsx LAPACK_GLOBAL(cporfsx,CPORFSX)
#define LAPACK_spprfs LAPACK_GLOBAL(spprfs,SPPRFS)
#define LAPACK_dpprfs LAPACK_GLOBAL(dpprfs,DPPRFS)
#define LAPACK_cpprfs LAPACK_GLOBAL(cpprfs,CPPRFS)
#define LAPACK_zpprfs LAPACK_GLOBAL(zpprfs,ZPPRFS)
#define LAPACK_spbrfs LAPACK_GLOBAL(spbrfs,SPBRFS)
#define LAPACK_dpbrfs LAPACK_GLOBAL(dpbrfs,DPBRFS)
#define LAPACK_cpbrfs LAPACK_GLOBAL(cpbrfs,CPBRFS)
#define LAPACK_zpbrfs LAPACK_GLOBAL(zpbrfs,ZPBRFS)
then we got ptrfs (packed tridiagonal, she's niche but she's serving), the symmetric syrfs block with its syrfsx glow-up, and then — hold on — the Hermitian ones drop the s/d because Hermitian is inherently complex, so all you get is cherfs, zherfs, zherfsx, cherfsx and honestly? iconic of them 👑
#define LAPACK_sptrfs LAPACK_GLOBAL(sptrfs,SPTRFS)
#define LAPACK_dptrfs LAPACK_GLOBAL(dptrfs,DPTRFS)
#define LAPACK_cptrfs LAPACK_GLOBAL(cptrfs,CPTRFS)
#define LAPACK_zptrfs LAPACK_GLOBAL(zptrfs,ZPTRFS)
#define LAPACK_ssyrfs LAPACK_GLOBAL(ssyrfs,SSYRFS)
#define LAPACK_dsyrfs LAPACK_GLOBAL(dsyrfs,DSYRFS)
#define LAPACK_csyrfs LAPACK_GLOBAL(csyrfs,CSYRFS)
#define LAPACK_zsyrfs LAPACK_GLOBAL(zsyrfs,ZSYRFS)
#define LAPACK_dsyrfsx LAPACK_GLOBAL(dsyrfsx,DSYRFSX)
#define LAPACK_ssyrfsx LAPACK_GLOBAL(ssyrfsx,SSYRFSX)
#define LAPACK_zsyrfsx LAPACK_GLOBAL(zsyrfsx,ZSYRFSX)
#define LAPACK_csyrfsx LAPACK_GLOBAL(csyrfsx,CSYRFSX)
#define LAPACK_cherfs LAPACK_GLOBAL(cherfs,CHERFS)
#define LAPACK_zherfs LAPACK_GLOBAL(zherfs,ZHERFS)
#define LAPACK_zherfsx LAPACK_GLOBAL(zherfsx,ZHERFSX)
#define LAPACK_cherfsx LAPACK_GLOBAL(cherfsx,CHERFSX)
quick vibe check bestie: don't "tidy" any of these up. That flipped casing on the Fortran side (SSYRFSvszsyrfsx,ZSYRFSX) is exactly whatLAPACK_GLOBALexpects — copy it verbatim or the linker will simply not be your friend 💀
last chunk of the rfs saga: packed symmetric sprfs, packed Hermitian hprfs, triangular trrfs, packed triangular tprfs, and the triangular-band tbrfs four. Four precisions each, no drama, no notes 🎀
#define LAPACK_ssprfs LAPACK_GLOBAL(ssprfs,SSPRFS)
#define LAPACK_dsprfs LAPACK_GLOBAL(dsprfs,DSPRFS)
#define LAPACK_csprfs LAPACK_GLOBAL(csprfs,CSPRFS)
#define LAPACK_zsprfs LAPACK_GLOBAL(zsprfs,ZSPRFS)
#define LAPACK_chprfs LAPACK_GLOBAL(chprfs,CHPRFS)
#define LAPACK_zhprfs LAPACK_GLOBAL(zhprfs,ZHPRFS)
#define LAPACK_strrfs LAPACK_GLOBAL(strrfs,STRRFS)
#define LAPACK_dtrrfs LAPACK_GLOBAL(dtrrfs,DTRRFS)
#define LAPACK_ctrrfs LAPACK_GLOBAL(ctrrfs,CTRRFS)
#define LAPACK_ztrrfs LAPACK_GLOBAL(ztrrfs,ZTRRFS)
#define LAPACK_stprfs LAPACK_GLOBAL(stprfs,STPRFS)
#define LAPACK_dtprfs LAPACK_GLOBAL(dtprfs,DTPRFS)
#define LAPACK_ctprfs LAPACK_GLOBAL(ctprfs,CTPRFS)
#define LAPACK_ztprfs LAPACK_GLOBAL(ztprfs,ZTPRFS)
#define LAPACK_stbrfs LAPACK_GLOBAL(stbrfs,STBRFS)
#define LAPACK_dtbrfs LAPACK_GLOBAL(dtbrfs,DTBRFS)
#define LAPACK_ctbrfs LAPACK_GLOBAL(ctbrfs,CTBRFS)
#define LAPACK_ztbrfs LAPACK_GLOBAL(ztbrfs,ZTBRFS)
okay new theme, new era: inverses. getri is general, potri is positive definite, pftri is the same energy but packed in a triangular... wait no, packed in that "pf" storage, pptri is the packed version, sytri is symmetric, hetri is complex Hermitian only so it only ships in c and z (fr fr, look — no shetri, no dhetri 😭), then packed sptri, packed Hermitian hptri, and the triangular trtri with its tftri and tptri variants. Click your heels, invert your matrix 💅
#define LAPACK_sgetri LAPACK_GLOBAL(sgetri,SGETRI)
#define LAPACK_dgetri LAPACK_GLOBAL(dgetri,DGETRI)
#define LAPACK_cgetri LAPACK_GLOBAL(cgetri,CGETRI)
#define LAPACK_zgetri LAPACK_GLOBAL(zgetri,ZGETRI)
#define LAPACK_spotri LAPACK_GLOBAL(spotri,SPOTRI)
#define LAPACK_dpotri LAPACK_GLOBAL(dpotri,DPOTRI)
#define LAPACK_cpotri LAPACK_GLOBAL(cpotri,CPOTRI)
#define LAPACK_zpotri LAPACK_GLOBAL(zpotri,ZPOTRI)
#define LAPACK_dpftri LAPACK_GLOBAL(dpftri,DPFTRI)
#define LAPACK_spftri LAPACK_GLOBAL(spftri,SPFTRI)
#define LAPACK_zpftri LAPACK_GLOBAL(zpftri,ZPFTRI)
#define LAPACK_cpftri LAPACK_GLOBAL(cpftri,CPFTRI)
#define LAPACK_spptri LAPACK_GLOBAL(spptri,SPPTRI)
#define LAPACK_dpptri LAPACK_GLOBAL(dpptri,DPPTRI)
#define LAPACK_cpptri LAPACK_GLOBAL(cpptri,CPPTRI)
#define LAPACK_zpptri LAPACK_GLOBAL(zpptri,ZPPTRI)
#define LAPACK_ssytri LAPACK_GLOBAL(ssytri,SSYTRI)
#define LAPACK_dsytri LAPACK_GLOBAL(dsytri,DSYTRI)
#define LAPACK_csytri LAPACK_GLOBAL(csytri,CSYTRI)
#define LAPACK_zsytri LAPACK_GLOBAL(zsytri,ZSYTRI)
#define LAPACK_chetri LAPACK_GLOBAL(chetri,CHETRI)
#define LAPACK_zhetri LAPACK_GLOBAL(zhetri,ZHETRI)
#define LAPACK_ssptri LAPACK_GLOBAL(ssptri,SSPTRI)
#define LAPACK_dsptri LAPACK_GLOBAL(dsptri,DSPTRI)
#define LAPACK_csptri LAPACK_GLOBAL(csptri,CSPTRI)
#define LAPACK_zsptri LAPACK_GLOBAL(zsptri,ZSPTRI)
#define LAPACK_chptri LAPACK_GLOBAL(chptri,CHPTRI)
#define LAPACK_zhptri LAPACK_GLOBAL(zhptri,ZHPTRI)
#define LAPACK_strtri LAPACK_GLOBAL(strtri,STRTRI)
#define LAPACK_dtrtri LAPACK_GLOBAL(dtrtri,DTRTRI)
#define LAPACK_ctrtri LAPACK_GLOBAL(ctrtri,CTRTRI)
#define LAPACK_ztrtri LAPACK_GLOBAL(ztrtri,ZTRTRI)
#define LAPACK_dtftri LAPACK_GLOBAL(dtftri,DTFTRI)
#define LAPACK_stftri LAPACK_GLOBAL(stftri,STFTRI)
#define LAPACK_ztftri LAPACK_GLOBAL(ztftri,ZTFTRI)
#define LAPACK_ctftri LAPACK_GLOBAL(ctftri,CTFTRI)
#define LAPACK_stptri LAPACK_GLOBAL(stptri,STPTRI)
#define LAPACK_dtptri LAPACK_GLOBAL(dtptri,DTPTRI)
#define LAPACK_ctptri LAPACK_GLOBAL(ctptri,CTPTRI)
#define LAPACK_ztptri LAPACK_GLOBAL(ztptri,ZTPTRI)
and now, the equilibration girls 🌈 every one of these is about scaling your matrix so the numbers behave. It's giving "wash your face before you do your makeup" energy, and honestly? correct.
geequ/geequb— general matrices, plain and thebvariantgbequ/gbequb— bandedpoequ/poequb— positive definiteppequ— packed positive definitepbequ— banded positive definitesyequb— symmetric, and it only exists in thebflavorheequb— Hermitian, alsob-only, and againc/zonly because complex 💜
#define LAPACK_sgeequ LAPACK_GLOBAL(sgeequ,SGEEQU)
#define LAPACK_dgeequ LAPACK_GLOBAL(dgeequ,DGEEQU)
#define LAPACK_cgeequ LAPACK_GLOBAL(cgeequ,CGEEQU)
#define LAPACK_zgeequ LAPACK_GLOBAL(zgeequ,ZGEEQU)
#define LAPACK_dgeequb LAPACK_GLOBAL(dgeequb,DGEEQUB)
#define LAPACK_sgeequb LAPACK_GLOBAL(sgeequb,SGEEQUB)
#define LAPACK_zgeequb LAPACK_GLOBAL(zgeequb,ZGEEQUB)
#define LAPACK_cgeequb LAPACK_GLOBAL(cgeequb,CGEEQUB)
#define LAPACK_sgbequ LAPACK_GLOBAL(sgbequ,SGBEQU)
#define LAPACK_dgbequ LAPACK_GLOBAL(dgbequ,DGBEQU)
#define LAPACK_cgbequ LAPACK_GLOBAL(cgbequ,CGBEQU)
#define LAPACK_zgbequ LAPACK_GLOBAL(zgbequ,ZGBEQU)
#define LAPACK_dgbequb LAPACK_GLOBAL(dgbequb,DGBEQUB)
#define LAPACK_sgbequb LAPACK_GLOBAL(sgbequb,SGBEQUB)
#define LAPACK_zgbequb LAPACK_GLOBAL(zgbequb,ZGBEQUB)
#define LAPACK_cgbequb LAPACK_GLOBAL(cgbequb,CGBEQUB)
#define LAPACK_spoequ LAPACK_GLOBAL(spoequ,SPOEQU)
#define LAPACK_dpoequ LAPACK_GLOBAL(dpoequ,DPOEQU)
#define LAPACK_cpoequ LAPACK_GLOBAL(cpoequ,CPOEQU)
#define LAPACK_zpoequ LAPACK_GLOBAL(zpoequ,ZPOEQU)
#define LAPACK_dpoequb LAPACK_GLOBAL(dpoequb,DPOEQUB)
#define LAPACK_spoequb LAPACK_GLOBAL(spoequb,SPOEQUB)
#define LAPACK_zpoequb LAPACK_GLOBAL(zpoequb,ZPOEQUB)
#define LAPACK_cpoequb LAPACK_GLOBAL(cpoequb,CPOEQUB)
#define LAPACK_sppequ LAPACK_GLOBAL(sppequ,SPPEQU)
#define LAPACK_dppequ LAPACK_GLOBAL(dppequ,DPPEQU)
#define LAPACK_cppequ LAPACK_GLOBAL(cppequ,CPPEQU)
#define LAPACK_zppequ LAPACK_GLOBAL(zppequ,ZPPEQU)
#define LAPACK_spbequ LAPACK_GLOBAL(spbequ,SPBEQU)
#define LAPACK_dpbequ LAPACK_GLOBAL(dpbequ,DPBEQU)
#define LAPACK_cpbequ LAPACK_GLOBAL(cpbequ,CPBEQU)
#define LAPACK_zpbequ LAPACK_GLOBAL(zpbequ,ZPBEQU)
#define LAPACK_dsyequb LAPACK_GLOBAL(dsyequb,DSYEQUB)
#define LAPACK_ssyequb LAPACK_GLOBAL(ssyequb,SSYEQUB)
#define LAPACK_zsyequb LAPACK_GLOBAL(zsyequb,ZSYEQUB)
#define LAPACK_csyequb LAPACK_GLOBAL(csyequb,CSYEQUB)
#define LAPACK_zheequb LAPACK_GLOBAL(zheequb,ZHEEQUB)
#define LAPACK_cheequb LAPACK_GLOBAL(cheequb,CHEEQUB)
solvers. this is the main character section, truly 🔥 gesv is your general "solve this for me" and she comes in s, d, c, z — plus dsgesv and zcgesv, which are the mixed-precision extra-credit versions (only two of them, that's the whole family, don't go looking for more).
Then gesvx (the x glow-up) for all four precisions, then gesvxx for all four but listed d, s, z, c because we stay chaotic 🫶
#define LAPACK_sgesv LAPACK_GLOBAL(sgesv,SGESV)
#define LAPACK_dgesv LAPACK_GLOBAL(dgesv,DGESV)
#define LAPACK_cgesv LAPACK_GLOBAL(cgesv,CGESV)
#define LAPACK_zgesv LAPACK_GLOBAL(zgesv,ZGESV)
#define LAPACK_dsgesv LAPACK_GLOBAL(dsgesv,DSGESV)
#define LAPACK_zcgesv LAPACK_GLOBAL(zcgesv,ZCGESV)
#define LAPACK_sgesvx LAPACK_GLOBAL(sgesvx,SGESVX)
#define LAPACK_dgesvx LAPACK_GLOBAL(dgesvx,DGESVX)
#define LAPACK_cgesvx LAPACK_GLOBAL(cgesvx,CGESVX)
#define LAPACK_zgesvx LAPACK_GLOBAL(zgesvx,ZGESVX)
#define LAPACK_dgesvxx LAPACK_GLOBAL(dgesvxx,DGESVXX)
#define LAPACK_sgesvxx LAPACK_GLOBAL(sgesvxx,SGESVXX)
#define LAPACK_zgesvxx LAPACK_GLOBAL(zgesvxx,ZGESVXX)
#define LAPACK_cgesvxx LAPACK_GLOBAL(cgesvxx,CGESVXX)
banded solvers next — gbsv, gbsvx, gbsvxx, four precisions each, same structure as the general ones, just narrower. then the tridiagonal girlies gtsv / gtsvx, also four apiece. yes bestie, the pattern is the pattern, and the pattern is eating every time 💅
#define LAPACK_sgbsv LAPACK_GLOBAL(sgbsv,SGBSV)
#define LAPACK_dgbsv LAPACK_GLOBAL(dgbsv,DGBSV)
#define LAPACK_cgbsv LAPACK_GLOBAL(cgbsv,CGBSV)
#define LAPACK_zgbsv LAPACK_GLOBAL(zgbsv,ZGBSV)
#define LAPACK_sgbsvx LAPACK_GLOBAL(sgbsvx,SGBSVX)
#define LAPACK_dgbsvx LAPACK_GLOBAL(dgbsvx,DGBSVX)
#define LAPACK_cgbsvx LAPACK_GLOBAL(cgbsvx,CGBSVX)
#define LAPACK_zgbsvx LAPACK_GLOBAL(zgbsvx,ZGBSVX)
#define LAPACK_dgbsvxx LAPACK_GLOBAL(dgbsvxx,DGBSVXX)
#define LAPACK_sgbsvxx LAPACK_GLOBAL(sgbsvxx,SGBSVXX)
#define LAPACK_zgbsvxx LAPACK_GLOBAL(zgbsvxx,ZGBSVXX)
#define LAPACK_cgbsvxx LAPACK_GLOBAL(cgbsvxx,CGBSVXX)
#define LAPACK_sgtsv LAPACK_GLOBAL(sgtsv,SGTSV)
#define LAPACK_dgtsv LAPACK_GLOBAL(dgtsv,DGTSV)
#define LAPACK_cgtsv LAPACK_GLOBAL(cgtsv,CGTSV)
#define LAPACK_zgtsv LAPACK_GLOBAL(zgtsv,ZGTSV)
#define LAPACK_sgtsvx LAPACK_GLOBAL(sgtsvx,SGTSVX)
#define LAPACK_dgtsvx LAPACK_GLOBAL(dgtsvx,DGTSVX)
#define LAPACK_cgtsvx LAPACK_GLOBAL(cgtsvx,CGTSVX)
#define LAPACK_zgtsvx LAPACK_GLOBAL(zgtsvx,ZGTSVX)
and the positive-definite solvers to close out this batch: posv ×4, the mixed-precision dsposv and zcposv (again, just those two 🍓), posvx ×4, posvxx ×4, packed ppsv ×4, and the packed expert ppsvx ×4 — which is exactly where this part runs out of road, mid-family, so don't you dare think we're done 😭
#define LAPACK_sposv LAPACK_GLOBAL(sposv,SPOSV)
#define LAPACK_dposv LAPACK_GLOBAL(dposv,DPOSV)
#define LAPACK_cposv LAPACK_GLOBAL(cposv,CPOSV)
#define LAPACK_zposv LAPACK_GLOBAL(zposv,ZPOSV)
#define LAPACK_dsposv LAPACK_GLOBAL(dsposv,DSPOSV)
#define LAPACK_zcposv LAPACK_GLOBAL(zcposv,ZCPOSV)
#define LAPACK_sposvx LAPACK_GLOBAL(sposvx,SPOSVX)
#define LAPACK_dposvx LAPACK_GLOBAL(dposvx,DPOSVX)
#define LAPACK_cposvx LAPACK_GLOBAL(cposvx,CPOSVX)
#define LAPACK_zposvx LAPACK_GLOBAL(zposvx,ZPOSVX)
#define LAPACK_dposvxx LAPACK_GLOBAL(dposvxx,DPOSVXX)
#define LAPACK_sposvxx LAPACK_GLOBAL(sposvxx,SPOSVXX)
#define LAPACK_zposvxx LAPACK_GLOBAL(zposvxx,ZPOSVXX)
#define LAPACK_cposvxx LAPACK_GLOBAL(cposvxx,CPOSVXX)
#define LAPACK_sppsv LAPACK_GLOBAL(sppsv,SPPSV)
#define LAPACK_dppsv LAPACK_GLOBAL(dppsv,DPPSV)
#define LAPACK_cppsv LAPACK_GLOBAL(cppsv,CPPSV)
#define LAPACK_zppsv LAPACK_GLOBAL(zppsv,ZPPSV)
#define LAPACK_sppsvx LAPACK_GLOBAL(sppsvx,SPPSVX)
#define LAPACK_dppsvx LAPACK_GLOBAL(dppsvx,DPPSVX)
#define LAPACK_cppsvx LAPACK_GLOBAL(cppsvx,CPPSVX)
#define LAPACK_zppsvx LAPACK_GLOBAL(zppsvx,ZPPSVX)
#define LAPACK_spbsv LAPACK_GLOBAL(spbsv,SPBSV)
#define LAPACK_dpbsv LAPACK_GLOBAL(dpbsv,DPBSV)
#define LAPACK_cpbsv LAPACK_GLOBAL(cpbsv,CPBSV)
#define LAPACK_zpbsv LAPACK_GLOBAL(zpbsv,ZPBSV)
#define LAPACK_spbsvx LAPACK_GLOBAL(spbsvx,SPBSVX)
#define LAPACK_dpbsvx LAPACK_GLOBAL(dpbsvx,DPBSVX)
#define LAPACK_cpbsvx LAPACK_GLOBAL(cpbsvx,CPBSVX)
#define LAPACK_zpbsvx LAPACK_GLOBAL(zpbsvx,ZPBSVX)
#define LAPACK_sptsv LAPACK_GLOBAL(sptsv,SPTSV)
#define LAPACK_dptsv LAPACK_GLOBAL(dptsv,DPTSV)
#define LAPACK_cptsv LAPACK_GLOBAL(cptsv,CPTSV)
#define LAPACK_zptsv LAPACK_GLOBAL(zptsv,ZPTSV)
#define LAPACK_sptsvx LAPACK_GLOBAL(sptsvx,SPTSVX)
#define LAPACK_dptsvx LAPACK_GLOBAL(dptsvx,DPTSVX)
#define LAPACK_cptsvx LAPACK_GLOBAL(cptsvx,CPTSVX)
#define LAPACK_zptsvx LAPACK_GLOBAL(zptsvx,ZPTSVX)
okay so that little run right there is the "my matrix is special-shaped and I still wanna solve it" clique 💅 — positive-definite packed (p?svx), symmetric/hermitian banded (pbsv, pbsvx), and good old tridiagonal (ptsv, ptsvx). Notice the pattern bestie: s, d, c, z — single, double, complex, complex-double. That's the whole personality of this header, no cap. every LAPACK routine comes in that exact four-flavour flight ✨
#define LAPACK_ssysv LAPACK_GLOBAL(ssysv,SSYSV)
#define LAPACK_dsysv LAPACK_GLOBAL(dsysv,DSYSV)
#define LAPACK_csysv LAPACK_GLOBAL(csysv,CSYSV)
#define LAPACK_zsysv LAPACK_GLOBAL(zsysv,ZSYSV)
#define LAPACK_ssysvx LAPACK_GLOBAL(ssysvx,SSYSVX)
#define LAPACK_dsysvx LAPACK_GLOBAL(dsysvx,DSYSVX)
#define LAPACK_csysvx LAPACK_GLOBAL(csysvx,CSYSVX)
#define LAPACK_zsysvx LAPACK_GLOBAL(zsysvx,ZSYSVX)
#define LAPACK_dsysvxx LAPACK_GLOBAL(dsysvxx,DSYSVXX)
#define LAPACK_ssysvxx LAPACK_GLOBAL(ssysvxx,SSYSVXX)
#define LAPACK_zsysvxx LAPACK_GLOBAL(zsysvxx,ZSYSVXX)
#define LAPACK_csysvxx LAPACK_GLOBAL(csysvxx,CSYSVXX)
#define LAPACK_chesv LAPACK_GLOBAL(chesv,CHESV)
#define LAPACK_zhesv LAPACK_GLOBAL(zhesv,ZHESV)
#define LAPACK_chesvx LAPACK_GLOBAL(chesvx,CHESVX)
#define LAPACK_zhesvx LAPACK_GLOBAL(zhesvx,ZHESVX)
#define LAPACK_zhesvxx LAPACK_GLOBAL(zhesvxx,ZHESVXX)
#define LAPACK_chesvxx LAPACK_GLOBAL(chesvxx,CHESVXX)
bestie look closely 👀 the xx ones are extra — dsysvxx, ssysvxx, zsysvxx, csysvxx, plus zhesvxx / chesvxx. Also clock that these are not in strict s/d/c/z order in the source — dsysvxx comes before ssysvxx, and zhesvxx before chesvxx. Do not reorder them, that's just how they're written and we respect the original 🫶
#define LAPACK_sspsv LAPACK_GLOBAL(sspsv,SSPSV)
#define LAPACK_dspsv LAPACK_GLOBAL(dspsv,DSPSV)
#define LAPACK_cspsv LAPACK_GLOBAL(cspsv,CSPSV)
#define LAPACK_zspsv LAPACK_GLOBAL(zspsv,ZSPSV)
#define LAPACK_sspsvx LAPACK_GLOBAL(sspsvx,SSPSVX)
#define LAPACK_dspsvx LAPACK_GLOBAL(dspsvx,DSPSVX)
#define LAPACK_cspsvx LAPACK_GLOBAL(cspsvx,CSPSVX)
#define LAPACK_zspsvx LAPACK_GLOBAL(zspsvx,ZSPSVX)
#define LAPACK_chpsv LAPACK_GLOBAL(chpsv,CHPSV)
#define LAPACK_zhpsv LAPACK_GLOBAL(zhpsv,ZHPSV)
#define LAPACK_chpsvx LAPACK_GLOBAL(chpsvx,CHPSVX)
#define LAPACK_zhpsvx LAPACK_GLOBAL(zhpsvx,ZHPSVX)
Packed symmetric (spsv, spsvx) and packed hermitian (hpsv, hpsvx) — the "I saved memory and now my indices look like a riddle" squad 🎀
🌀 still SYNOPSIS (we're in our QR era)
#define LAPACK_sgeqrf LAPACK_GLOBAL(sgeqrf,SGEQRF)
#define LAPACK_dgeqrf LAPACK_GLOBAL(dgeqrf,DGEQRF)
#define LAPACK_cgeqrf LAPACK_GLOBAL(cgeqrf,CGEQRF)
#define LAPACK_zgeqrf LAPACK_GLOBAL(zgeqrf,ZGEQRF)
#define LAPACK_sgeqpf LAPACK_GLOBAL(sgeqpf,SGEQPF)
#define LAPACK_dgeqpf LAPACK_GLOBAL(dgeqpf,DGEQPF)
#define LAPACK_cgeqpf LAPACK_GLOBAL(cgeqpf,CGEQPF)
#define LAPACK_zgeqpf LAPACK_GLOBAL(zgeqpf,ZGEQPF)
#define LAPACK_sgeqp3 LAPACK_GLOBAL(sgeqp3,SGEQP3)
#define LAPACK_dgeqp3 LAPACK_GLOBAL(dgeqp3,DGEQP3)
#define LAPACK_cgeqp3 LAPACK_GLOBAL(cgeqp3,CGEQP3)
#define LAPACK_zgeqp3 LAPACK_GLOBAL(zgeqp3,ZGEQP3)
#define LAPACK_sorgqr LAPACK_GLOBAL(sorgqr,SORGQR)
#define LAPACK_dorgqr LAPACK_GLOBAL(dorgqr,DORGQR)
#define LAPACK_sormqr LAPACK_GLOBAL(sormqr,SORMQR)
#define LAPACK_dormqr LAPACK_GLOBAL(dormqr,DORMQR)
#define LAPACK_cungqr LAPACK_GLOBAL(cungqr,CUNGQR)
#define LAPACK_zungqr LAPACK_GLOBAL(zungqr,ZUNGQR)
#define LAPACK_cunmqr LAPACK_GLOBAL(cunmqr,CUNMQR)
#define LAPACK_zunmqr LAPACK_GLOBAL(zunmqr,ZUNMQR)
the QR block!! 🔥 geqrf (plain QR), geqpf (QR with column pivoting), geqp3 (QR with column pivoting, the newer one). Then the "gimme the Q" crowd: orgqr / ungqr (generate Q), ormqr / unmqr (multiply by Q). Note the naming tea ☕ — real routines get org, complex ones get ung, and multiply variants get orm / unm. iykyk 💅
#define LAPACK_sgelqf LAPACK_GLOBAL(sgelqf,SGELQF)
#define LAPACK_dgelqf LAPACK_GLOBAL(dgelqf,DGELQF)
#define LAPACK_cgelqf LAPACK_GLOBAL(cgelqf,CGELQF)
#define LAPACK_zgelqf LAPACK_GLOBAL(zgelqf,ZGELQF)
#define LAPACK_sorglq LAPACK_GLOBAL(sorglq,SORGLQ)
#define LAPACK_dorglq LAPACK_GLOBAL(dorglq,DORGLQ)
#define LAPACK_sormlq LAPACK_GLOBAL(sormlq,SORMLQ)
#define LAPACK_dormlq LAPACK_GLOBAL(dormlq,DORMLQ)
#define LAPACK_cunglq LAPACK_GLOBAL(cunglq,CUNGLQ)
#define LAPACK_zunglq LAPACK_GLOBAL(zunglq,ZUNGLQ)
#define LAPACK_cunmlq LAPACK_GLOBAL(cunmlq,CUNMLQ)
#define LAPACK_zunmlq LAPACK_GLOBAL(zunmlq,ZUNMLQ)
That's LQ — same energy, different factor order 🌸 lq instead of qr, and yeah, ormlq/unmlq are the multiply ones. the consistency is honestly iconic
#define LAPACK_sgeqlf LAPACK_GLOBAL(sgeqlf,SGEQLF)
#define LAPACK_dgeqlf LAPACK_GLOBAL(dgeqlf,DGEQLF)
#define LAPACK_cgeqlf LAPACK_GLOBAL(cgeqlf,CGEQLF)
#define LAPACK_zgeqlf LAPACK_GLOBAL(zgeqlf,ZGEQLF)
#define LAPACK_sorgql LAPACK_GLOBAL(sorgql,SORGQL)
#define LAPACK_dorgql LAPACK_GLOBAL(dorgql,DORGQL)
#define LAPACK_cungql LAPACK_GLOBAL(cungql,CUNGQL)
#define LAPACK_zungql LAPACK_GLOBAL(zungql,ZUNGQL)
#define LAPACK_sormql LAPACK_GLOBAL(sormql,SORMQL)
#define LAPACK_dormql LAPACK_GLOBAL(dormql,DORMQL)
#define LAPACK_cunmql LAPACK_GLOBAL(cunmql,CUNMQL)
#define LAPACK_zunmql LAPACK_GLOBAL(zunmql,ZUNMQL)
QL gang 🦋 — and yes, orgql comes in real-only flavours here, ungql for complex, ormql / unmql for the multiply versions. exactly what you'd expect, and yet somehow still satisfying
#define LAPACK_sgerqf LAPACK_GLOBAL(sgerqf,SGERQF)
#define LAPACK_dgerqf LAPACK_GLOBAL(dgerqf,DGERQF)
#define LAPACK_cgerqf LAPACK_GLOBAL(cgerqf,CGERQF)
#define LAPACK_zgerqf LAPACK_GLOBAL(zgerqf,ZGERQF)
#define LAPACK_sorgrq LAPACK_GLOBAL(sorgrq,SORGRQ)
#define LAPACK_dorgrq LAPACK_GLOBAL(dorgrq,DORGRQ)
#define LAPACK_cungrq LAPACK_GLOBAL(cungrq,CUNGRQ)
#define LAPACK_zungrq LAPACK_GLOBAL(zungrq,ZUNGRQ)
#define LAPACK_sormrq LAPACK_GLOBAL(sormrq,SORMRQ)
#define LAPACK_dormrq LAPACK_GLOBAL(dormrq,DORMQR)
#define LAPACK_cunmrq LAPACK_GLOBAL(cunmrq,CUNMRQ)
#define LAPACK_zunmrq LAPACK_GLOBAL(zunmrq,ZUNMRQ)
RQ rounding out the four factorisations 🍓 wait, hold up — peep LAPACK_dormrq on line... it maps to LAPACK_GLOBAL(dormrq,DORMQR). The second argument is DORMQR, not DORMRQ. That's literally what's written in the page, so that's what you get. Not me trying to "fix" it 🙈 — we reproduce, we don't edit. 👑
#define LAPACK_stzrzf LAPACK_GLOBAL(stzrzf,STZRZF)
#define LAPACK_dtzrzf LAPACK_GLOBAL(dtzrzf,DTZRZF)
#define LAPACK_ctzrzf LAPACK_GLOBAL(ctzrzf,CTZRZF)
#define LAPACK_ztzrzf LAPACK_GLOBAL(ztzrzf,ZTZRZF)
#define LAPACK_sormrz LAPACK_GLOBAL(sormrz,SORMRZ)
#define LAPACK_dormrz LAPACK_GLOBAL(dormrz,DORMRZ)
#define LAPACK_cunmrz LAPACK_GLOBAL(cunmrz,CUNMRZ)
#define LAPACK_zunmrz LAPACK_GLOBAL(zunmrz,ZUNMRZ)
Trapezoidal, bestie 🎀 tzrzf + ormrz/unmrz to actually use those reflectors. Fancy.
#define LAPACK_sggqrf LAPACK_GLOBAL(sggqrf,SGGQRF)
#define LAPACK_dggqrf LAPACK_GLOBAL(dggqrf,DGGQRF)
#define LAPACK_cggqrf LAPACK_GLOBAL(cggqrf,CGGQRF)
#define LAPACK_zggqrf LAPACK_GLOBAL(zggqrf,ZGGQRF)
#define LAPACK_sggrqf LAPACK_GLOBAL(sggrqf,SGGRQF)
#define LAPACK_dggrqf LAPACK_GLOBAL(dggrqf,DGGRQF)
#define LAPACK_cggrqf LAPACK_GLOBAL(cggrqf,CGGRQF)
#define LAPACK_zggrqf LAPACK_GLOBAL(zggrqf,ZGGRQF)
The generalised QR pair 🌈 ggqrf and ggrqf — two matrices, two factorisations, one call. main character energy fr fr ✨
💜 SYNOPSIS: bidiagonal arc
#define LAPACK_sgebrd LAPACK_GLOBAL(sgebrd,SGEBRD)
#define LAPACK_dgebrd LAPACK_GLOBAL(dgebrd,DGEBRD)
#define LAPACK_cgebrd LAPACK_GLOBAL(cgebrd,CGEBRD)
#define LAPACK_zgebrd LAPACK_GLOBAL(zgebrd,ZGEBRD)
#define LAPACK_sgbbrd LAPACK_GLOBAL(sgbbrd,SGBBRD)
#define LAPACK_dgbbrd LAPACK_GLOBAL(dgbbrd,DGBBRD)
#define LAPACK_cgbbrd LAPACK_GLOBAL(cgbbrd,CGBBRD)
#define LAPACK_zgbbrd LAPACK_GLOBAL(zgbbrd,ZGBBRD)
#define LAPACK_sorgbr LAPACK_GLOBAL(sorgbr,SORGBR)
#define LAPACK_dorgbr LAPACK_GLOBAL(dorgbr,DORGBR)
#define LAPACK_sormbr LAPACK_GLOBAL(sormbr,SORMBR)
#define LAPACK_dormbr LAPACK_GLOBAL(dormbr,DORMBR)
#define LAPACK_cungbr LAPACK_GLOBAL(cungbr,CUNGBR)
#define LAPACK_zungbr LAPACK_GLOBAL(zungbr,ZUNGBR)
#define LAPACK_cunmbr LAPACK_GLOBAL(cunmbr,CUNMBR)
#define LAPACK_zunmbr LAPACK_GLOBAL(zunmbr,ZUNMBR)
gebrd → bidiagonalise a general matrix. gbbrd → same, but for band matrices (extra ✨spice✨). Then orgbr/ungbr generate the bidiagonal's Q or P, and ormbr/unmbr apply them. the naming is giving "you already know" 💅
#define LAPACK_sbdsqr LAPACK_GLOBAL(sbdsqr,SBDSQR)
#define LAPACK_dbdsqr LAPACK_GLOBAL(dbdsqr,DBDSQR)
#define LAPACK_cbdsqr LAPACK_GLOBAL(cbdsqr,CBDSQR)
#define LAPACK_zbdsqr LAPACK_GLOBAL(zbdsqr,ZBDSQR)
#define LAPACK_sbdsdc LAPACK_GLOBAL(sbdsdc,SBDSDC)
#define LAPACK_dbdsdc LAPACK_GLOBAL(dbdsdc,DBDSDC)
#define LAPACK_sbdsvdx LAPACK_GLOBAL(sbdsvdx,SBDSVDX)
#define LAPACK_dbdsvdx LAPACK_GLOBAL(dbdsvdx,DBDSVDX)
SVD trio alert 🚨 bdsqr (bidiagonal SVD), bdsdc (divide-and-conquer), bdsvdx. And clock it — bdsdc and bdsvdx only exist in s and d. No c/z versions here. That's not me skipping them, that's just the list 🫶
🌸 SYNOPSIS: tridiagonal reduction & friends
#define LAPACK_ssytrd LAPACK_GLOBAL(ssytrd,SSYTRD)
#define LAPACK_dsytrd LAPACK_GLOBAL(dsytrd,DSYTRD)
#define LAPACK_sorgtr LAPACK_GLOBAL(sorgtr,SORGTR)
#define LAPACK_dorgtr LAPACK_GLOBAL(dorgtr,DORGTR)
#define LAPACK_sormtr LAPACK_GLOBAL(sormtr,SORMTR)
#define LAPACK_dormtr LAPACK_GLOBAL(dormtr,DORMTR)
#define LAPACK_chetrd LAPACK_GLOBAL(chetrd,CHETRD)
#define LAPACK_zhetrd LAPACK_GLOBAL(zhetrd,ZHETRD)
#define LAPACK_cungtr LAPACK_GLOBAL(cungtr,CUNGTR)
#define LAPACK_zungtr LAPACK_GLOBAL(zungtr,ZUNGTR)
#define LAPACK_cunmtr LAPACK_GLOBAL(cunmtr,CUNMTR)
#define LAPACK_zunmtr LAPACK_GLOBAL(zunmtr,ZUNMTR)
Symmetric → tridiagonal (sytrd) and hermitian → tridiagonal (hetrd), plus the orgtr/ungtr/ormtr/unmtr crew to build and apply the transformation 💖
#define LAPACK_ssptrd LAPACK_GLOBAL(ssptrd,SSPTRD)
#define LAPACK_dsptrd LAPACK_GLOBAL(dsptrd,DSPTRD)
#define LAPACK_sopgtr LAPACK_GLOBAL(sopgtr,SOPGTR)
#define LAPACK_dopgtr LAPACK_GLOBAL(dopgtr,DOPGTR)
#define LAPACK_sopmtr LAPACK_GLOBAL(sopmtr,SOPMTR)
#define LAPACK_dopmtr LAPACK_GLOBAL(dopmtr,DOPMTR)
#define LAPACK_chptrd LAPACK_GLOBAL(chptrd,CHPTRD)
#define LAPACK_zhptrd LAPACK_GLOBAL(zhptrd,ZHPTRD)
#define LAPACK_cupgtr LAPACK_GLOBAL(cupgtr,CUPGTR)
#define LAPACK_zupgtr LAPACK_GLOBAL(zupgtr,ZUPGTR)
#define LAPACK_cupmtr LAPACK_GLOBAL(cupmtr,CUPMTR)
#define LAPACK_zupmtr LAPACK_GLOBAL(zupmtr,ZUPMTR)
Packed versions of the same story 🎀 sptrd/hptrd reduce, opgtr/upgtr generate, opmtr/upmtr multiply. packed storage is lowkey unhinged but we love her 💀
#define LAPACK_ssbtrd LAPACK_GLOBAL(ssbtrd,SSBTRD)
#define LAPACK_dsbtrd LAPACK_GLOBAL(dsbtrd,DSBTRD)
#define LAPACK_chbtrd LAPACK_GLOBAL(chbtrd,CHBTRD)
#define LAPACK_zhbtrd LAPACK_GLOBAL(zhbtrd,ZHBTRD)
Banded → tridiagonal, symmetric (sbtrd) and hermitian (hbtrd). Four flavours, no org/ung companions listed. Simple, clean, slay 🌈
👑 SYNOPSIS: the eigenvalue finale
#define LAPACK_ssterf LAPACK_GLOBAL(ssterf,SSTERF)
#define LAPACK_dsterf LAPACK_GLOBAL(dsterf,DSTERF)
#define LAPACK_ssteqr LAPACK_GLOBAL(ssteqr,SSTEQR)
#define LAPACK_dsteqr LAPACK_GLOBAL(dsteqr,DSTEQR)
#define LAPACK_csteqr LAPACK_GLOBAL(csteqr,CSTEQR)
#define LAPACK_zsteqr LAPACK_GLOBAL(zsteqr,ZSTEQR)
#define LAPACK_sstemr LAPACK_GLOBAL(sstemr,SSTEMR)
#define LAPACK_dstemr LAPACK_GLOBAL(dstemr,DSTEMR)
#define LAPACK_cstemr LAPACK_GLOBAL(cstemr,CSTEMR)
#define LAPACK_zstemr LAPACK_GLOBAL(zstemr,ZSTEMR)
#define LAPACK_sstedc LAPACK_GLOBAL(sstedc,SSTEDC)
#define LAPACK_dstedc LAPACK_GLOBAL(dstedc,DSTEDC)
#define LAPACK_cstedc LAPACK_GLOBAL(cstedc,CSTEDC)
#define LAPACK_zstedc LAPACK_GLOBAL(zstedc,ZSTEDC)
#define LAPACK_sstegr LAPACK_GLOBAL(sstegr,SSTEGR)
#define LAPACK_dstegr LAPACK_GLOBAL(dstegr,DSTEGR)
#define LAPACK_cstegr LAPACK_GLOBAL(cstegr,CSTEGR)
#define LAPACK_zstegr LAPACK_GLOBAL(zstegr,ZSTEGR)
#define LAPACK_spteqr LAPACK_GLOBAL(spteqr,SPTEQR)
#define LAPACK_dpteqr LAPACK_GLOBAL(dpteqr,DPTEQR)
#define LAPACK_cpteqr LAPACK_GLOBAL(cpteqr,CPTEQR)
#define LAPACK_zpteqr LAPACK_GLOBAL(zpteqr,ZPTEQR)
Bestie this is the block 🔥 sterf (tridiagonal eigenvalues, QR-ish), steqr (tridiagonal eigen, QR), stemr (tridiagonal eigen via MRRR — palindrome name, obsessed), stedc (divide & conquer), stegr (MRRR), pteqr (positive-definite tridiagonal eigen).
hot tip that is literally in the list: sterf is s and d only. No complex. Everyone else gets all four. 💅
#define LAPACK_sstebz LAPACK_GLOBAL(sstebz,SSTEBZ)
#define LAPACK_dstebz LAPACK_GLOBAL(dstebz,DSTEBZ)
#define LAPACK_sstein LAPACK_GLOBAL(sstein,SSTEIN)
#define LAPACK_dstein LAPACK_GLOBAL(dstein,DSTEIN)
#define LAPACK_cstein LAPACK_GLOBAL(cstein,CSTEIN)
#define LAPACK_zstein LAPACK_GLOBAL(zstein,ZSTEIN)
#define LAPACK_sdisna LAPACK_GLOBAL(sdisna,SDISNA)
stebz (eigenvalues in a selected range — real only, s and d), stein (eigenvectors for those, all four flavours), and disna (compute the reciprocal condition numbers of the eigenvectors — real only, s and d). and that's the last line of the block, so...
and that's where this part wraps, bestie 🫶 more #defines are literally right behind this one, so don't you dare close the tab 😭
...and the macro wall keeps going, bestie. Around 190 more #defines in this stretch alone, and every single one is LAPACK_ + the routine name + LAPACK_GLOBAL(name,NAME). That's the whole pattern, no cap 💅
First up: the generalized symmetric-definite crew — gst and pbstf girlies, all four flavours (s, d, c, z) showing up like clockwork:
#define LAPACK_ddisna LAPACK_GLOBAL(ddisna,DDISNA)
#define LAPACK_ssygst LAPACK_GLOBAL(ssygst,SSYGST)
#define LAPACK_dsygst LAPACK_GLOBAL(dsygst,DSYGST)
#define LAPACK_chegst LAPACK_GLOBAL(chegst,CHEGST)
#define LAPACK_zhegst LAPACK_GLOBAL(zhegst,ZHEGST)
#define LAPACK_sspgst LAPACK_GLOBAL(sspgst,SSPGST)
#define LAPACK_dspgst LAPACK_GLOBAL(dspgst,DSPGST)
#define LAPACK_chpgst LAPACK_GLOBAL(chpgst,CHPGST)
#define LAPACK_zhpgst LAPACK_GLOBAL(zhpgst,ZHPGST)
#define LAPACK_ssbgst LAPACK_GLOBAL(ssbgst,SSBGST)
#define LAPACK_dsbgst LAPACK_GLOBAL(dsbgst,DSBGST)
#define LAPACK_chbgst LAPACK_GLOBAL(chbgst,CHBGST)
#define LAPACK_zhbgst LAPACK_GLOBAL(zhbgst,ZHBGST)
#define LAPACK_spbstf LAPACK_GLOBAL(spbstf,SPBSTF)
#define LAPACK_dpbstf LAPACK_GLOBAL(dpbstf,DPBSTF)
#define LAPACK_cpbstf LAPACK_GLOBAL(cpbstf,CPBSTF)
#define LAPACK_zpbstf LAPACK_GLOBAL(zpbstf,ZPBSTF)
Then the Hessenberg household 🏠✨ — gehrd for the reduction and the orghr/ormhr/unghr/unmhr gang for building and applying Q:
#define LAPACK_sgehrd LAPACK_GLOBAL(sgehrd,SGEHRD)
#define LAPACK_dgehrd LAPACK_GLOBAL(dgehrd,DGEHRD)
#define LAPACK_cgehrd LAPACK_GLOBAL(cgehrd,CGEHRD)
#define LAPACK_zgehrd LAPACK_GLOBAL(zgehrd,ZGEHRD)
#define LAPACK_sorghr LAPACK_GLOBAL(sorghr,SORGHR)
#define LAPACK_dorghr LAPACK_GLOBAL(dorghr,DORGHR)
#define LAPACK_sormhr LAPACK_GLOBAL(sormhr,SORMHR)
#define LAPACK_dormhr LAPACK_GLOBAL(dormhr,DORMHR)
#define LAPACK_cunghr LAPACK_GLOBAL(cunghr,CUNGHR)
#define LAPACK_zunghr LAPACK_GLOBAL(zunghr,ZUNGHR)
#define LAPACK_cunmhr LAPACK_GLOBAL(cunmhr,CUNMHR)
#define LAPACK_zunmhr LAPACK_GLOBAL(zunmhr,ZUNMHR)
Balancing + back-transforming, entering the chat 🎀 (gebal/gebak, every flavour, no gatekeeping):
#define LAPACK_sgebal LAPACK_GLOBAL(sgebal,SGEBAL)
#define LAPACK_dgebal LAPACK_GLOBAL(dgebal,DGEBAL)
#define LAPACK_cgebal LAPACK_GLOBAL(cgebal,CGEBAL)
#define LAPACK_zgebal LAPACK_GLOBAL(zgebal,ZGEBAL)
#define LAPACK_sgebak LAPACK_GLOBAL(sgebak,SGEBAK)
#define LAPACK_dgebak LAPACK_GLOBAL(dgebak,DGEBAK)
#define LAPACK_cgebak LAPACK_GLOBAL(cgebak,CGEBAK)
#define LAPACK_zgebak LAPACK_GLOBAL(zgebak,ZGEBAK)
Schur decomposition era 🔥 — hseqr and hsein, and yes, the complex ones lowkey swap s/d for c/z like the icons they are:
#define LAPACK_shseqr LAPACK_GLOBAL(shseqr,SHSEQR)
#define LAPACK_dhseqr LAPACK_GLOBAL(dhseqr,DHSEQR)
#define LAPACK_chseqr LAPACK_GLOBAL(chseqr,CHSEQR)
#define LAPACK_zhseqr LAPACK_GLOBAL(zhseqr,ZHSEQR)
#define LAPACK_shsein LAPACK_GLOBAL(shsein,SHSEIN)
#define LAPACK_dhsein LAPACK_GLOBAL(dhsein,DHSEIN)
#define LAPACK_chsein LAPACK_GLOBAL(chsein,CHSEIN)
#define LAPACK_zhsein LAPACK_GLOBAL(zhsein,ZHSEIN)
Eigenvector + condition number + reorder + Sylvester, aka the triangular tr multiverse 🌈 — trevc, trsna, trexc, trsen, trsyl:
#define LAPACK_strevc LAPACK_GLOBAL(strevc,STREVC)
#define LAPACK_dtrevc LAPACK_GLOBAL(dtrevc,DTREVC)
#define LAPACK_ctrevc LAPACK_GLOBAL(ctrevc,CTREVC)
#define LAPACK_ztrevc LAPACK_GLOBAL(ztrevc,ZTREVC)
#define LAPACK_strsna LAPACK_GLOBAL(strsna,STRSNA)
#define LAPACK_dtrsna LAPACK_GLOBAL(dtrsna,DTRSNA)
#define LAPACK_ctrsna LAPACK_GLOBAL(ctrsna,CTRSNA)
#define LAPACK_ztrsna LAPACK_GLOBAL(ztrsna,ZTRSNA)
#define LAPACK_strexc LAPACK_GLOBAL(strexc,STREXC)
#define LAPACK_dtrexc LAPACK_GLOBAL(dtrexc,DTREXC)
#define LAPACK_ctrexc LAPACK_GLOBAL(ctrexc,CTREXC)
#define LAPACK_ztrexc LAPACK_GLOBAL(ztrexc,ZTREXC)
#define LAPACK_strsen LAPACK_GLOBAL(strsen,STRSEN)
#define LAPACK_dtrsen LAPACK_GLOBAL(dtrsen,DTRSEN)
#define LAPACK_ctrsen LAPACK_GLOBAL(ctrsen,CTRSEN)
#define LAPACK_ztrsen LAPACK_GLOBAL(ztrsen,ZTRSEN)
#define LAPACK_strsyl LAPACK_GLOBAL(strsyl,STRSYL)
#define LAPACK_dtrsyl LAPACK_GLOBAL(dtrsyl,DTRSYL)
#define LAPACK_ctrsyl LAPACK_GLOBAL(ctrsyl,CTRSYL)
#define LAPACK_ztrsyl LAPACK_GLOBAL(ztrsyl,ZTRSYL)
The generalized Schur era, part one 🦋 — gghrd/gghd3 (yes, both, and yes, d3 is its own whole thing) plus ggbal/ggbak:
#define LAPACK_sgghrd LAPACK_GLOBAL(sgghrd,SGGHRD)
#define LAPACK_dgghrd LAPACK_GLOBAL(dgghrd,DGGHRD)
#define LAPACK_cgghrd LAPACK_GLOBAL(cgghrd,CGGHRD)
#define LAPACK_zgghrd LAPACK_GLOBAL(zgghrd,ZGGHRD)
#define LAPACK_sgghd3 LAPACK_GLOBAL(sgghd3,SGGHD3)
#define LAPACK_dgghd3 LAPACK_GLOBAL(dgghd3,DGGHD3)
#define LAPACK_cgghd3 LAPACK_GLOBAL(cgghd3,CGGHD3)
#define LAPACK_zgghd3 LAPACK_GLOBAL(zgghd3,ZGGHD3)
#define LAPACK_sggbal LAPACK_GLOBAL(sggbal,SGGBAL)
#define LAPACK_dggbal LAPACK_GLOBAL(dggbal,DGGBAL)
#define LAPACK_cggbal LAPACK_GLOBAL(cggbal,CGGBAL)
#define LAPACK_zggbal LAPACK_GLOBAL(zggbal,ZGGBAL)
#define LAPACK_sggbak LAPACK_GLOBAL(sggbak,SGGBAK)
#define LAPACK_dggbak LAPACK_GLOBAL(dggbak,DGGBAK)
#define LAPACK_cggbak LAPACK_GLOBAL(cggbak,CGGBAK)
#define LAPACK_zggbak LAPACK_GLOBAL(zggbak,ZGGBAK)
Part two of that saga 💀 — hgeqz, tgevc, tgexc, tgsen, tgsyl, tgsna, all ×4:
#define LAPACK_shgeqz LAPACK_GLOBAL(shgeqz,SHGEQZ)
#define LAPACK_dhgeqz LAPACK_GLOBAL(dhgeqz,DHGEQZ)
#define LAPACK_chgeqz LAPACK_GLOBAL(chgeqz,CHGEQZ)
#define LAPACK_zhgeqz LAPACK_GLOBAL(zhgeqz,ZHGEQZ)
#define LAPACK_stgevc LAPACK_GLOBAL(stgevc,STGEVC)
#define LAPACK_dtgevc LAPACK_GLOBAL(dtgevc,DTGEVC)
#define LAPACK_ctgevc LAPACK_GLOBAL(ctgevc,CTGEVC)
#define LAPACK_ztgevc LAPACK_GLOBAL(ztgevc,ZTGEVC)
#define LAPACK_stgexc LAPACK_GLOBAL(stgexc,STGEXC)
#define LAPACK_dtgexc LAPACK_GLOBAL(dtgexc,DTGEXC)
#define LAPACK_ctgexc LAPACK_GLOBAL(ctgexc,CTGEXC)
#define LAPACK_ztgexc LAPACK_GLOBAL(ztgexc,ZTGEXC)
#define LAPACK_stgsen LAPACK_GLOBAL(stgsen,STGSEN)
#define LAPACK_dtgsen LAPACK_GLOBAL(dtgsen,DTGSEN)
#define LAPACK_ctgsen LAPACK_GLOBAL(ctgsen,CTGSEN)
#define LAPACK_ztgsen LAPACK_GLOBAL(ztgsen,ZTGSEN)
#define LAPACK_stgsyl LAPACK_GLOBAL(stgsyl,STGSYL)
#define LAPACK_dtgsyl LAPACK_GLOBAL(dtgsyl,DTGSYL)
#define LAPACK_ctgsyl LAPACK_GLOBAL(ctgsyl,CTGSYL)
#define LAPACK_ztgsyl LAPACK_GLOBAL(ztgsyl,ZTGSYL)
#define LAPACK_stgsna LAPACK_GLOBAL(stgsna,STGSNA)
#define LAPACK_dtgsna LAPACK_GLOBAL(dtgsna,DTGSNA)
#define LAPACK_ctgsna LAPACK_GLOBAL(ctgsna,CTGSNA)
#define LAPACK_ztgsna LAPACK_GLOBAL(ztgsna,ZTGSNA)
GSVD prep 🧚 — ggsvp and ggsvp3, then tgsja:
#define LAPACK_sggsvp LAPACK_GLOBAL(sggsvp,SGGSVP)
#define LAPACK_dggsvp LAPACK_GLOBAL(dggsvp,DGGSVP)
#define LAPACK_cggsvp LAPACK_GLOBAL(cggsvp,CGGSVP)
#define LAPACK_zggsvp LAPACK_GLOBAL(zggsvp,ZGGSVP)
#define LAPACK_sggsvp3 LAPACK_GLOBAL(sggsvp3,SGGSVP3)
#define LAPACK_dggsvp3 LAPACK_GLOBAL(dggsvp3,DGGSVP3)
#define LAPACK_cggsvp3 LAPACK_GLOBAL(cggsvp3,CGGSVP3)
#define LAPACK_zggsvp3 LAPACK_GLOBAL(zggsvp3,ZGGSVP3)
#define LAPACK_stgsja LAPACK_GLOBAL(stgsja,STGSJA)
#define LAPACK_dtgsja LAPACK_GLOBAL(dtgsja,DTGSJA)
#define LAPACK_ctgsja LAPACK_GLOBAL(ctgsja,CTGSJA)
#define LAPACK_ztgsja LAPACK_GLOBAL(ztgsja,ZTGSJA)
Least squares o'clock 📐✨ — gels, gelsy, gelss, gelsd, then the constrained ones gglse and ggglm:
#define LAPACK_sgels LAPACK_GLOBAL(sgels,SGELS)
#define LAPACK_dgels LAPACK_GLOBAL(dgels,DGELS)
#define LAPACK_cgels LAPACK_GLOBAL(cgels,CGELS)
#define LAPACK_zgels LAPACK_GLOBAL(zgels,ZGELS)
#define LAPACK_sgelsy LAPACK_GLOBAL(sgelsy,SGELSY)
#define LAPACK_dgelsy LAPACK_GLOBAL(dgelsy,DGELSY)
#define LAPACK_cgelsy LAPACK_GLOBAL(cgelsy,CGELSY)
#define LAPACK_zgelsy LAPACK_GLOBAL(zgelsy,ZGELSY)
#define LAPACK_sgelss LAPACK_GLOBAL(sgelss,SGELSS)
#define LAPACK_dgelss LAPACK_GLOBAL(dgelss,DGELSS)
#define LAPACK_cgelss LAPACK_GLOBAL(cgelss,CGELSS)
#define LAPACK_zgelss LAPACK_GLOBAL(zgelss,ZGELSS)
#define LAPACK_sgelsd LAPACK_GLOBAL(sgelsd,SGELSD)
#define LAPACK_dgelsd LAPACK_GLOBAL(dgelsd,DGELSD)
#define LAPACK_cgelsd LAPACK_GLOBAL(cgelsd,CGELSD)
#define LAPACK_zgelsd LAPACK_GLOBAL(zgelsd,ZGELSD)
#define LAPACK_sgglse LAPACK_GLOBAL(sgglse,SGGLSE)
#define LAPACK_dgglse LAPACK_GLOBAL(dgglse,DGGLSE)
#define LAPACK_cgglse LAPACK_GLOBAL(cgglse,CGGLSE)
#define LAPACK_zgglse LAPACK_GLOBAL(zgglse,ZGGLSE)
#define LAPACK_sggglm LAPACK_GLOBAL(sggglm,SGGGLM)
#define LAPACK_dggglm LAPACK_GLOBAL(dggglm,DGGGLM)
#define LAPACK_cggglm LAPACK_GLOBAL(cggglm,CGGGLM)
#define LAPACK_zggglm LAPACK_GLOBAL(zggglm,ZGGGLM)
And now the symmetric/Hermitian eigenvalue section, where the _2stage variants start showing up and some lines are split across two source lines (not me being messy — that's literally how they're written, bestie 🙈):
#define LAPACK_ssyev LAPACK_GLOBAL(ssyev,SSYEV)
#define LAPACK_dsyev LAPACK_GLOBAL(dsyev,DSYEV)
#define LAPACK_cheev LAPACK_GLOBAL(cheev,CHEEV)
#define LAPACK_zheev LAPACK_GLOBAL(zheev,ZHEEV)
#define LAPACK_ssyev_2stage LAPACK_GLOBAL(ssyev_2stage,SSYEV_2STAGE)
#define LAPACK_dsyev_2stage LAPACK_GLOBAL(dsyev_2stage,DSYEV_2STAGE)
#define LAPACK_cheev_2stage LAPACK_GLOBAL(cheev_2stage,CHEEV_2STAGE)
#define LAPACK_zheev_2stage LAPACK_GLOBAL(zheev_2stage,ZHEEV_2STAGE)
#define LAPACK_ssyevd LAPACK_GLOBAL(ssyevd,SSYEVD)
#define LAPACK_dsyevd LAPACK_GLOBAL(dsyevd,DSYEVD)
#define LAPACK_cheevd LAPACK_GLOBAL(cheevd,CHEEVD)
#define LAPACK_zheevd LAPACK_GLOBAL(zheevd,ZHEEVD)
#define LAPACK_ssyevd_2stage
LAPACK_GLOBAL(ssyevd_2stage,SSYEVD_2STAGE)
#define LAPACK_dsyevd_2stage
LAPACK_GLOBAL(dsyevd_2stage,DSYEVD_2STAGE)
#define LAPACK_cheevd_2stage
LAPACK_GLOBAL(cheevd_2stage,CHEEVD_2STAGE)
#define LAPACK_zheevd_2stage
LAPACK_GLOBAL(zheevd_2stage,ZHEEVD_2STAGE)
#define LAPACK_ssyevx LAPACK_GLOBAL(ssyevx,SSYEVX)
#define LAPACK_dsyevx LAPACK_GLOBAL(dsyevx,DSYEVX)
#define LAPACK_cheevx LAPACK_GLOBAL(cheevx,CHEEVX)
#define LAPACK_zheevx LAPACK_GLOBAL(zheevx,ZHEEVX)
#define LAPACK_ssyevx_2stage
LAPACK_GLOBAL(ssyevx_2stage,SSYEVX_2STAGE)
#define LAPACK_dsyevx_2stage
LAPACK_GLOBAL(dsyevx_2stage,DSYEVX_2STAGE)
#define LAPACK_cheevx_2stage
LAPACK_GLOBAL(cheevx_2stage,CHEEVX_2STAGE)
#define LAPACK_zheevx_2stage
LAPACK_GLOBAL(zheevx_2stage,ZHEEVX_2STAGE)
#define LAPACK_ssyevr LAPACK_GLOBAL(ssyevr,SSYEVR)
#define LAPACK_dsyevr LAPACK_GLOBAL(dsyevr,DSYEVR)
#define LAPACK_cheevr LAPACK_GLOBAL(cheevr,CHEEVR)
#define LAPACK_zheevr LAPACK_GLOBAL(zheevr,ZHEEVR)
#define LAPACK_ssyevr_2stage
LAPACK_GLOBAL(ssyevr_2stage,SSYEVR_2STAGE)
#define LAPACK_dsyevr_2stage
LAPACK_GLOBAL(dsyevr_2stage,DSYEVR_2STAGE)
#define LAPACK_cheevr_2stage
LAPACK_GLOBAL(cheevr_2stage,CHEEVR_2STAGE)
#define LAPACK_zheevr_2stage
LAPACK_GLOBAL(zheevr_2stage,ZHEEVR_2STAGE)
Packed (pev) and banded (bev) symmetric/Hermitian eigenvalue routines, and the part cuts off mid-bev_2stage — the zhbev_2stage line must be in the next chunk, so don't come for me 😭:
#define LAPACK_sspev LAPACK_GLOBAL(sspev,SSPEV)
#define LAPACK_dspev LAPACK_GLOBAL(dspev,DSPEV)
#define LAPACK_chpev LAPACK_GLOBAL(chpev,CHPEV)
#define LAPACK_zhpev LAPACK_GLOBAL(zhpev,ZHPEV)
#define LAPACK_sspevd LAPACK_GLOBAL(sspevd,SSPEVD)
#define LAPACK_dspevd LAPACK_GLOBAL(dspevd,DSPEVD)
#define LAPACK_chpevd LAPACK_GLOBAL(chpevd,CHPEVD)
#define LAPACK_zhpevd LAPACK_GLOBAL(zhpevd,ZHPEVD)
#define LAPACK_sspevx LAPACK_GLOBAL(sspevx,SSPEVX)
#define LAPACK_dspevx LAPACK_GLOBAL(dspevx,DSPEVX)
#define LAPACK_chpevx LAPACK_GLOBAL(chpevx,CHPEVX)
#define LAPACK_zhpevx LAPACK_GLOBAL(zhpevx,ZHPEVX)
#define LAPACK_ssbev LAPACK_GLOBAL(ssbev,SSBEV)
#define LAPACK_dsbev LAPACK_GLOBAL(dsbev,DSBEV)
#define LAPACK_chbev LAPACK_GLOBAL(chbev,CHBEV)
#define LAPACK_zhbev LAPACK_GLOBAL(zhbev,ZHBEV)
#define LAPACK_ssbev_2stage LAPACK_GLOBAL(ssbev_2stage,SSBEV_2STAGE)
#define LAPACK_dsbev_2stage LAPACK_GLOBAL(dsbev_2stage,DSBEV_2STAGE)
#define LAPACK_chbev_2stage LAPACK_GLOBAL(chbev_2stage,CHBEV_2STAGE)
Bestie reminder 🫶 — these are literal macro definitions, character for character. Lowercase first arg, ALL CAPS second arg, and LAPACK_GLOBAL doing the actual heavy lifting. Not one of them is a typo (even the ones that look like typos).
okay so we are still deep in the #define wall and honestly? it's giving phone book 💀 but every single line matters, so we're doing this properly. no skipping, no "etc." — every macro gets its moment.
Quick vibe check on what these lines even are: each one is a <pink>little nickname</pink> — the LAPACK_ name you actually type, pointing at the <purple>real symbol</purple> through LAPACK_GLOBAL(...), which is the header's way of gluing the routine name to its uppercase form. Same pattern, every single time. iykyk 🎀
🦋 the symmetric band eigenvalue cluster
first up, the band-matrix eigenvalue squad. note that zhbev_2stage walks in by itself with no friends, while the *bevd and *bevx families get the full real/complex quartet treatment:
#define LAPACK_zhbev_2stage LAPACK_GLOBAL(zhbev_2stage,ZHBEV_2STAGE)
#define LAPACK_ssbevd LAPACK_GLOBAL(ssbevd,SSBEVD)
#define LAPACK_dsbevd LAPACK_GLOBAL(dsbevd,DSBEVD)
#define LAPACK_chbevd LAPACK_GLOBAL(chbevd,CHBEVD)
#define LAPACK_zhbevd LAPACK_GLOBAL(zhbevd,ZHBEVD)
#define LAPACK_ssbevd_2stage LAPACK_GLOBAL(ssbevd_2stage,SSBEVD_2STAGE)
#define LAPACK_dsbevd_2stage LAPACK_GLOBAL(dsbevd_2stage,DSBEVD_2STAGE)
#define LAPACK_chbevd_2stage LAPACK_GLOBAL(chbevd_2stage,CHBEVD_2STAGE)
#define LAPACK_zhbevd_2stage LAPACK_GLOBAL(zhbevd_2stage,ZHBEVD_2STAGE)
#define LAPACK_ssbevx LAPACK_GLOBAL(ssbevx,SSBEVX)
#define LAPACK_dsbevx LAPACK_GLOBAL(dsbevx,DSBEVX)
#define LAPACK_chbevx LAPACK_GLOBAL(chbevx,CHBEVX)
#define LAPACK_zhbevx LAPACK_GLOBAL(zhbevx,ZHBEVX)
#define LAPACK_ssbevx_2stage LAPACK_GLOBAL(ssbevx_2stage,SSBEVX_2STAGE)
#define LAPACK_dsbevx_2stage LAPACK_GLOBAL(dsbevx_2stage,DSBEVX_2STAGE)
#define LAPACK_chbevx_2stage LAPACK_GLOBAL(chbevx_2stage,CHBEVX_2STAGE)
#define LAPACK_zhbevx_2stage LAPACK_GLOBAL(zhbevx_2stage,ZHBEVX_2STAGE)
the way the _2stage crew ate and left ssbev_2stage off the guest list... not me noticing 👀 (just writing what's literally in the header bestie, don't come for me)
🌸 tridiagonal moment
then we have the tridiagonal stev lineup, and it is <hotpink>strictly sandd</hotpink> — no complex versions anywhere in sight:
#define LAPACK_sstev LAPACK_GLOBAL(sstev,SSTEV)
#define LAPACK_dstev LAPACK_GLOBAL(dstev,DSTEV)
#define LAPACK_sstevd LAPACK_GLOBAL(sstevd,SSTEVD)
#define LAPACK_dstevd LAPACK_GLOBAL(dstevd,DSTEVD)
#define LAPACK_sstevx LAPACK_GLOBAL(sstevx,SSTEVX)
#define LAPACK_dstevx LAPACK_GLOBAL(dstevx,DSTEVX)
#define LAPACK_sstevr LAPACK_GLOBAL(sstevr,SSTEVR)
#define LAPACK_dstevr LAPACK_GLOBAL(dstevr,DSTEVR)
four flavors (stev, stevd, stevx, stevr), two precisions (s, d), zero drama. clean. 🧚
👑 the general eigen + Schur era
okay this is the main character section. gees (Schur), geesx, geev (eigenvalues), geevx — all four precisions, all of them iconic:
#define LAPACK_sgees LAPACK_GLOBAL(sgees,SGEES)
#define LAPACK_dgees LAPACK_GLOBAL(dgees,DGEES)
#define LAPACK_cgees LAPACK_GLOBAL(cgees,CGEES)
#define LAPACK_zgees LAPACK_GLOBAL(zgees,ZGEES)
#define LAPACK_sgeesx LAPACK_GLOBAL(sgeesx,SGEESX)
#define LAPACK_dgeesx LAPACK_GLOBAL(dgeesx,DGEESX)
#define LAPACK_cgeesx LAPACK_GLOBAL(cgeesx,CGEESX)
#define LAPACK_zgeesx LAPACK_GLOBAL(zgeesx,ZGEESX)
#define LAPACK_sgeev LAPACK_GLOBAL(sgeev,SGEEV)
#define LAPACK_dgeev LAPACK_GLOBAL(dgeev,DGEEV)
#define LAPACK_cgeev LAPACK_GLOBAL(cgeev,CGEEV)
#define LAPACK_zgeev LAPACK_GLOBAL(zgeev,ZGEEV)
#define LAPACK_sgeevx LAPACK_GLOBAL(sgeevx,SGEEVX)
#define LAPACK_dgeevx LAPACK_GLOBAL(dgeevx,DGEEVX)
#define LAPACK_cgeevx LAPACK_GLOBAL(cgeevx,CGEEVX)
#define LAPACK_zgeevx LAPACK_GLOBAL(zgeevx,ZGEEVX)
that's sixteen lines of pure symmetry and i'm obsessed 🫶
⭐ SVD section (yes there are this many)
the singular value decomposition crowd. gesvd, gesvdx, gesdd, then the gejsv / gesvj duo — all in s, d, c, z:
#define LAPACK_sgesvd LAPACK_GLOBAL(sgesvd,SGESVD)
#define LAPACK_dgesvd LAPACK_GLOBAL(dgesvd,DGESVD)
#define LAPACK_cgesvd LAPACK_GLOBAL(cgesvd,CGESVD)
#define LAPACK_zgesvd LAPACK_GLOBAL(zgesvd,ZGESVD)
#define LAPACK_sgesvdx LAPACK_GLOBAL(sgesvdx,SGESVDX)
#define LAPACK_dgesvdx LAPACK_GLOBAL(dgesvdx,DGESVDX)
#define LAPACK_cgesvdx LAPACK_GLOBAL(cgesvdx,CGESVDX)
#define LAPACK_zgesvdx LAPACK_GLOBAL(zgesvdx,ZGESVDX)
#define LAPACK_sgesdd LAPACK_GLOBAL(sgesdd,SGESDD)
#define LAPACK_dgesdd LAPACK_GLOBAL(dgesdd,DGESDD)
#define LAPACK_cgesdd LAPACK_GLOBAL(cgesdd,CGESDD)
#define LAPACK_zgesdd LAPACK_GLOBAL(zgesdd,ZGESDD)
#define LAPACK_sgejsv LAPACK_GLOBAL(sgejsv,SGEJSV)
#define LAPACK_dgejsv LAPACK_GLOBAL(dgejsv,DGEJSV)
#define LAPACK_cgejsv LAPACK_GLOBAL(cgejsv,CGEJSV)
#define LAPACK_zgejsv LAPACK_GLOBAL(zgejsv,ZGEJSV)
#define LAPACK_sgesvj LAPACK_GLOBAL(sgesvj,SGESVJ)
#define LAPACK_dgesvj LAPACK_GLOBAL(dgesvj,DGESVJ)
#define LAPACK_cgesvj LAPACK_GLOBAL(cgesvj,CGESVJ)
#define LAPACK_zgesvj LAPACK_GLOBAL(zgesvj,ZGESVJ)
the way gesvd and gesdd are literally one letter apart and both fully present — no cap, check your spelling twice 💀
🎀 generalized SVD, but make it ggsvd
just the one family here. four lines. she's small but she's doing her thing:
#define LAPACK_sggsvd LAPACK_GLOBAL(sggsvd,SGGSVD)
#define LAPACK_dggsvd LAPACK_GLOBAL(dggsvd,DGGSVD)
#define LAPACK_cggsvd LAPACK_GLOBAL(cggsvd,CGGSVD)
#define LAPACK_zggsvd LAPACK_GLOBAL(zggsvd,ZGGSVD)
💜 generalized symmetric-definite eigen cluster
okay this whole block is the gv party — sygv (real symmetric) and hegv (complex hermitian), each with a _2stage twin, a d variant, and an x variant. sixteen lines, deep breath:
#define LAPACK_ssygv LAPACK_GLOBAL(ssygv,SSYGV)
#define LAPACK_dsygv LAPACK_GLOBAL(dsygv,DSYGV)
#define LAPACK_chegv LAPACK_GLOBAL(chegv,CHEGV)
#define LAPACK_zhegv LAPACK_GLOBAL(zhegv,ZHEGV)
#define LAPACK_ssygv_2stage LAPACK_GLOBAL(ssygv_2stage,SSYGV_2STAGE)
#define LAPACK_dsygv_2stage LAPACK_GLOBAL(dsygv_2stage,DSYGV_2STAGE)
#define LAPACK_chegv_2stage LAPACK_GLOBAL(chegv_2stage,CHEGV_2STAGE)
#define LAPACK_zhegv_2stage LAPACK_GLOBAL(zhegv_2stage,ZHEGV_2STAGE)
#define LAPACK_ssygvd LAPACK_GLOBAL(ssygvd,SSYGVD)
#define LAPACK_dsygvd LAPACK_GLOBAL(dsygvd,DSYGVD)
#define LAPACK_chegvd LAPACK_GLOBAL(chegvd,CHEGVD)
#define LAPACK_zhegvd LAPACK_GLOBAL(zhegvd,ZHEGVD)
#define LAPACK_ssygvx LAPACK_GLOBAL(ssygvx,SSYGVX)
#define LAPACK_dsygvx LAPACK_GLOBAL(dsygvx,DSYGVX)
#define LAPACK_chegvx LAPACK_GLOBAL(chegvx,CHEGVX)
#define LAPACK_zhegvx LAPACK_GLOBAL(zhegvx,ZHEGVX)
notice the _2stage versions live right in the middle of the block, sandwiched between plain and d — the header has a whole layout and we respect it 🌈
🍓 packed storage said "me next"
pgv = packed. plain, d, and x, across all four precisions:
#define LAPACK_sspgv LAPACK_GLOBAL(sspgv,SSPGV)
#define LAPACK_dspgv LAPACK_GLOBAL(dspgv,DSPGV)
#define LAPACK_chpgv LAPACK_GLOBAL(chpgv,CHPGV)
#define LAPACK_zhpgv LAPACK_GLOBAL(zhpgv,ZHPGV)
#define LAPACK_sspgvd LAPACK_GLOBAL(sspgvd,SSPGVD)
#define LAPACK_dspgvd LAPACK_GLOBAL(dspgvd,DSPGVD)
#define LAPACK_chpgvd LAPACK_GLOBAL(chpgvd,CHPGVD)
#define LAPACK_zhpgvd LAPACK_GLOBAL(zhpgvd,ZHPGVD)
#define LAPACK_sspgvx LAPACK_GLOBAL(sspgvx,SSPGVX)
#define LAPACK_dspgvx LAPACK_GLOBAL(dspgvx,DSPGVX)
#define LAPACK_chpgvx LAPACK_GLOBAL(chpgvx,CHPGVX)
#define LAPACK_zhpgvx LAPACK_GLOBAL(zhpgvx,ZHPGVX)
twelve-ish lines of pack-it-in energy. she's compact, obviously 💅
🔥 band storage said "hold my drink"
bgv = band. same three-flavor pattern, same four precisions:
#define LAPACK_ssbgv LAPACK_GLOBAL(ssbgv,SSBGV)
#define LAPACK_dsbgv LAPACK_GLOBAL(dsbgv,DSBGV)
#define LAPACK_chbgv LAPACK_GLOBAL(chbgv,CHBGV)
#define LAPACK_zhbgv LAPACK_GLOBAL(zhbgv,ZHBGV)
#define LAPACK_ssbgvd LAPACK_GLOBAL(ssbgvd,SSBGVD)
#define LAPACK_dsbgvd LAPACK_GLOBAL(dsbgvd,DSBGVD)
#define LAPACK_chbgvd LAPACK_GLOBAL(chbgvd,CHBGVD)
#define LAPACK_zhbgvd LAPACK_GLOBAL(zhbgvd,ZHBGVD)
#define LAPACK_ssbgvx LAPACK_GLOBAL(ssbgvx,SSBGVX)
#define LAPACK_dsbgvx LAPACK_GLOBAL(dsbgvx,DSBGVX)
#define LAPACK_chbgvx LAPACK_GLOBAL(chbgvx,CHBGVX)
#define LAPACK_zhbgvx LAPACK_GLOBAL(zhbgvx,ZHBGVX)
packed storage and band storage are literally siblings and neither of them is beating the allegations of being confusing to index 😭 but the macros? immaculate.
🌈 generalized Schur, the trilogy
gges (classic), gges3 (the newer cut), ggesx (the extra-credit one) — and yes, cgges and zgges are here too, lowercase c/z and all:
#define LAPACK_sgges LAPACK_GLOBAL(sgges,SGGES)
#define LAPACK_dgges LAPACK_GLOBAL(dgges,DGGES)
#define LAPACK_cgges LAPACK_GLOBAL(cgges,CGGES)
#define LAPACK_zgges LAPACK_GLOBAL(zgges,ZGGES)
#define LAPACK_sgges3 LAPACK_GLOBAL(sgges3,SGGES3)
#define LAPACK_dgges3 LAPACK_GLOBAL(dgges3,DGGES3)
#define LAPACK_cgges3 LAPACK_GLOBAL(cgges3,CGGES3)
#define LAPACK_zgges3 LAPACK_GLOBAL(zgges3,ZGGES3)
#define LAPACK_sggesx LAPACK_GLOBAL(sggesx,SGGESX)
#define LAPACK_dggesx LAPACK_GLOBAL(dggesx,DGGESX)
#define LAPACK_cggesx LAPACK_GLOBAL(cggesx,CGGESX)
#define LAPACK_zggesx LAPACK_GLOBAL(zggesx,ZGGESX)
three variants, four precisions, twelve lines, all accounted for ✨
💖 generalized eigen, same trilogy energy
ggev, ggev3, ggevx — the eigenvalue cousins of the block above:
#define LAPACK_sggev LAPACK_GLOBAL(sggev,SGGEV)
#define LAPACK_dggev LAPACK_GLOBAL(dggev,DGGEV)
#define LAPACK_cggev LAPACK_GLOBAL(cggev,CGGEV)
#define LAPACK_zggev LAPACK_GLOBAL(zggev,ZGGEV)
#define LAPACK_sggev3 LAPACK_GLOBAL(sggev3,SGGEV3)
#define LAPACK_dggev3 LAPACK_GLOBAL(dggev3,DGGEV3)
#define LAPACK_cggev3 LAPACK_GLOBAL(cggev3,CGGEV3)
#define LAPACK_zggev3 LAPACK_GLOBAL(zggev3,ZGGEV3)
#define LAPACK_sggevx LAPACK_GLOBAL(sggevx,SGGEVX)
#define LAPACK_dggevx LAPACK_GLOBAL(dggevx,DGGEVX)
#define LAPACK_cggevx LAPACK_GLOBAL(cggevx,CGGEVX)
#define LAPACK_zggevx LAPACK_GLOBAL(zggevx,ZGGEVX)
the 3 squad really said "we're the upgrade" and honestly? they might be. 🧚♀️
🫶 the frk block (and yes the order is d, s, z, c)
okay bestie, pay attention: this is the one place where the ordering flips on you — dsfrk before ssfrk, zhfrk before chfrk. that's not me being chaotic, that's literally the header:
#define LAPACK_dsfrk LAPACK_GLOBAL(dsfrk,DSFRK)
#define LAPACK_ssfrk LAPACK_GLOBAL(ssfrk,SSFRK)
#define LAPACK_zhfrk LAPACK_GLOBAL(zhfrk,ZHFRK)
#define LAPACK_chfrk LAPACK_GLOBAL(chfrk,CHFRK)
do not reorder them. do not "fix" them. they are exactly as written, periodt 💀
🎀 tfsm: same deal, d comes first
#define LAPACK_dtfsm LAPACK_GLOBAL(dtfsm,DTFSM)
#define LAPACK_stfsm LAPACK_GLOBAL(stfsm,STFSM)
#define LAPACK_ztfsm LAPACK_GLOBAL(ztfsm,ZTFSM)
#define LAPACK_ctfsm LAPACK_GLOBAL(ctfsm,CTFSM)
four lines, double-first energy, love that for us 🌸
🦋 the triangular storage conversion crew
this is the big one — six families, four precisions each, <hotpink>every single one in d, s, z, c order</hotpink>. tfttp, tfttr, tpttf, tpttr, trttf, trttp. twenty-four lines of pure "triangle goes here, now it goes there":
#define LAPACK_dtfttp LAPACK_GLOBAL(dtfttp,DTFTTP)
#define LAPACK_stfttp LAPACK_GLOBAL(stfttp,STFTTP)
#define LAPACK_ztfttp LAPACK_GLOBAL(ztfttp,ZTFTTP)
#define LAPACK_ctfttp LAPACK_GLOBAL(ctfttp,CTFTTP)
#define LAPACK_dtfttr LAPACK_GLOBAL(dtfttr,DTFTTR)
#define LAPACK_stfttr LAPACK_GLOBAL(stfttr,STFTTR)
#define LAPACK_ztfttr LAPACK_GLOBAL(ztfttr,ZTFTTR)
#define LAPACK_ctfttr LAPACK_GLOBAL(ctfttr,CTFTTR)
#define LAPACK_dtpttf LAPACK_GLOBAL(dtpttf,DTPTTF)
#define LAPACK_stpttf LAPACK_GLOBAL(stpttf,STPTTF)
#define LAPACK_ztpttf LAPACK_GLOBAL(ztpttf,ZTPTTF)
#define LAPACK_ctpttf LAPACK_GLOBAL(ctpttf,CTPTTF)
#define LAPACK_dtpttr LAPACK_GLOBAL(dtpttr,DTPTTR)
#define LAPACK_stpttr LAPACK_GLOBAL(stpttr,STPTTR)
#define LAPACK_ztpttr LAPACK_GLOBAL(ztpttr,ZTPTTR)
#define LAPACK_ctpttr LAPACK_GLOBAL(ctpttr,CTPTTR)
#define LAPACK_dtrttf LAPACK_GLOBAL(dtrttf,DTRTTF)
#define LAPACK_strttf LAPACK_GLOBAL(strttf,STRTTF)
#define LAPACK_ztrttf LAPACK_GLOBAL(ztrttf,ZTRTTF)
#define LAPACK_ctrttf LAPACK_GLOBAL(ctrttf,CTRTTF)
#define LAPACK_dtrttp LAPACK_GLOBAL(dtrttp,DTRTTP)
#define LAPACK_strttp LAPACK_GLOBAL(strttp,STRTTP)
#define LAPACK_ztrttp LAPACK_GLOBAL(ztrttp,ZTRTTP)
#define LAPACK_ctrttp LAPACK_GLOBAL(ctrttp,CTRTTP)
if you ever need to read one of these out loud: full-storage → packed, packed → full, triangle → triangle, <purple>t</purple> here, <purple>t</purple> there. the vowels literally spell the conversion and that's kind of a slay 🎀
⭐ geqrfp: QR with a p on the end
only four lines, and yes that trailing p is part of the name, don't drop it:
#define LAPACK_sgeqrfp LAPACK_GLOBAL(sgeqrfp,SGEQRFP)
#define LAPACK_dgeqrfp LAPACK_GLOBAL(dgeqrfp,DGEQRFP)
#define LAPACK_cgeqrfp LAPACK_GLOBAL(cgeqrfp,CGEQRFP)
#define LAPACK_zgeqrfp LAPACK_GLOBAL(zgeqrfp,ZGEQRFP)
🌈 lacgv: just two, and both are complex
real numbers don't need this one, so you get c and z only:
#define LAPACK_clacgv LAPACK_GLOBAL(clacgv,CLACGV)
#define LAPACK_zlacgv LAPACK_GLOBAL(zlacgv,ZLACGV)
short, sweet, conj-transpose-coded 💅
🍓 larnv: random vector, all four
#define LAPACK_slarnv LAPACK_GLOBAL(slarnv,SLARNV)
#define LAPACK_dlarnv LAPACK_GLOBAL(dlarnv,DLARNV)
#define LAPACK_clarnv LAPACK_GLOBAL(clarnv,CLARNV)
#define LAPACK_zlarnv LAPACK_GLOBAL(zlarnv,ZLARNV)
all four precisions present and accounted for. chaos but make it typed ✨
💜 geqr2: the unblocked QR kid
#define LAPACK_sgeqr2 LAPACK_GLOBAL(sgeqr2,SGEQR2)
#define LAPACK_dgeqr2 LAPACK_GLOBAL(dgeqr2,DGEQR2)
#define LAPACK_cgeqr2 LAPACK_GLOBAL(cgeqr2,CGEQR2)
#define LAPACK_zgeqr2 LAPACK_GLOBAL(zgeqr2,ZGEQR2)
the 2 is part of the name. i will not be elaborating further, i'm just the messenger 🫶
🎀 lacn2: norm-estimation crew
#define LAPACK_slacn2 LAPACK_GLOBAL(slacn2,SLACN2)
#define LAPACK_dlacn2 LAPACK_GLOBAL(dlacn2,DLACN2)
#define LAPACK_clacn2 LAPACK_GLOBAL(clacn2,CLACN2)
#define LAPACK_zlacn2 LAPACK_GLOBAL(zlacn2,ZLACN2)
🦋 lacpy and lacp2 — yes they're different, no you may not merge them
lacpy comes in all four precisions, but lacp2 is <hotpink>only candz</hotpink> here. look closely, bestie:
#define LAPACK_slacpy LAPACK_GLOBAL(slacpy,SLACPY)
#define LAPACK_dlacpy LAPACK_GLOBAL(dlacpy,DLACPY)
#define LAPACK_clacpy LAPACK_GLOBAL(clacpy,CLACPY)
#define LAPACK_zlacpy LAPACK_GLOBAL(zlacpy,ZLACPY)
#define LAPACK_clacp2 LAPACK_GLOBAL(clacp2,CLACP2)
#define LAPACK_zlacp2 LAPACK_GLOBAL(zlacp2,ZLACP2)
four plus two, six total, and the missing s/d on lacp2 is not a typo, it's just how it is 🙈
🔥 getf2: the small but mighty one
#define LAPACK_sgetf2 LAPACK_GLOBAL(sgetf2,SGETF2)
#define LAPACK_dgetf2 LAPACK_GLOBAL(dgetf2,DGETF2)
#define LAPACK_cgetf2 LAPACK_GLOBAL(cgetf2,CGETF2)
#define LAPACK_zgetf2 LAPACK_GLOBAL(zgetf2,ZGETF2)
f2 = the two in getf2. it's literally in the name, i'm not doing extra research 🧚♀️
🌸 laswp: pivot-swap squad
#define LAPACK_slaswp LAPACK_GLOBAL(slaswp,SLASWP)
#define LAPACK_dlaswp LAPACK_GLOBAL(dlaswp,DLASWP)
#define LAPACK_claswp LAPACK_GLOBAL(claswp,CLASWP)
#define LAPACK_zlaswp LAPACK_GLOBAL(zlaswp,ZLASWP)
all four, in order, no notes 👑
⭐ lange: three lines and then this part just... ends
last stretch of this chunk — and heads up, <red>only s, d, and c are here. there is no LAPACK_zlange line in what we've got. don't add it, don't assume it, just read it as written:
#define LAPACK_slange LAPACK_GLOBAL(slange,SLANGE)
#define LAPACK_dlange LAPACK_GLOBAL(dlange,DLANGE)
#define LAPACK_clange LAPACK_GLOBAL(clange,CLANGE)
three lines, one missing z, and we move on — because there's more header coming and we're nowhere near done, bestie. keep scrolling 💖
okay so this next stretch of the #define wall is pure ritual, bestie — every single line is the same little spell: LAPACK_ + your lowercase name on the left, and LAPACK_GLOBAL(...) holding the lowercase + uppercase pair on the right. once you see the pattern you can't unsee it, iykyk 💅✨
🌀 the lan-squad & friends
#define LAPACK_zlange LAPACK_GLOBAL(zlange,ZLANGE)
#define LAPACK_clanhe LAPACK_GLOBAL(clanhe,CLANHE)
#define LAPACK_zlanhe LAPACK_GLOBAL(zlanhe,ZLANHE)
#define LAPACK_clarcm LAPACK_GLOBAL(clarcm,CLARCM)
#define LAPACK_zlarcm LAPACK_GLOBAL(zlarcm,ZLARCM)
#define LAPACK_clacrm LAPACK_GLOBAL(clacrm,CLACRM)
#define LAPACK_zlacrm LAPACK_GLOBAL(zlacrm,ZLACRM)
#define LAPACK_slansy LAPACK_GLOBAL(slansy,SLANSY)
#define LAPACK_dlansy LAPACK_GLOBAL(dlansy,DLANSY)
#define LAPACK_clansy LAPACK_GLOBAL(clansy,CLANSY)
#define LAPACK_zlansy LAPACK_GLOBAL(zlansy,ZLANSY)
#define LAPACK_slantr LAPACK_GLOBAL(slantr,SLANTR)
#define LAPACK_dlantr LAPACK_GLOBAL(dlantr,DLANTR)
#define LAPACK_clantr LAPACK_GLOBAL(clantr,CLANTR)
#define LAPACK_zlantr LAPACK_GLOBAL(zlantr,ZLANTR)
#define LAPACK_slamch LAPACK_GLOBAL(slamch,SLAMCH)
#define LAPACK_dlamch LAPACK_GLOBAL(dlamch,DLAMCH)
not the larcm/lacrm pair being lowkey mirror twins and still not the same name 😭 read those two twice, i'm begging. 🫶
🦋 the reflector / generator crew
#define LAPACK_sgelq2 LAPACK_GLOBAL(sgelq2,SGELQ2)
#define LAPACK_dgelq2 LAPACK_GLOBAL(dgelq2,DGELQ2)
#define LAPACK_cgelq2 LAPACK_GLOBAL(cgelq2,CGELQ2)
#define LAPACK_zgelq2 LAPACK_GLOBAL(zgelq2,ZGELQ2)
#define LAPACK_slarfb LAPACK_GLOBAL(slarfb,SLARFB)
#define LAPACK_dlarfb LAPACK_GLOBAL(dlarfb,DLARFB)
#define LAPACK_clarfb LAPACK_GLOBAL(clarfb,CLARFB)
#define LAPACK_zlarfb LAPACK_GLOBAL(zlarfb,ZLARFB)
#define LAPACK_slarfg LAPACK_GLOBAL(slarfg,SLARFG)
#define LAPACK_dlarfg LAPACK_GLOBAL(dlarfg,DLARFG)
#define LAPACK_clarfg LAPACK_GLOBAL(clarfg,CLARFG)
#define LAPACK_zlarfg LAPACK_GLOBAL(zlarfg,ZLARFG)
#define LAPACK_slassq LAPACK_GLOBAL(slassq,SLASSQ)
#define LAPACK_dlassq LAPACK_GLOBAL(dlassq,DLASSQ)
#define LAPACK_classq LAPACK_GLOBAL(classq,CLASSQ)
#define LAPACK_zlassq LAPACK_GLOBAL(zlassq,ZLASSQ)
#define LAPACK_slarft LAPACK_GLOBAL(slarft,SLARFT)
#define LAPACK_dlarft LAPACK_GLOBAL(dlarft,DLARFT)
#define LAPACK_clarft LAPACK_GLOBAL(clarft,CLARFT)
#define LAPACK_zlarft LAPACK_GLOBAL(zlarft,ZLARFT)
#define LAPACK_slarfx LAPACK_GLOBAL(slarfx,SLARFX)
#define LAPACK_dlarfx LAPACK_GLOBAL(dlarfx,DLARFX)
#define LAPACK_clarfx LAPACK_GLOBAL(clarfx,CLARFX)
#define LAPACK_zlarfx LAPACK_GLOBAL(zlarfx,ZLARFX)
#define LAPACK_slatms LAPACK_GLOBAL(slatms,SLATMS)
#define LAPACK_dlatms LAPACK_GLOBAL(dlatms,DLATMS)
#define LAPACK_clatms LAPACK_GLOBAL(clatms,CLATMS)
#define LAPACK_zlatms LAPACK_GLOBAL(zlatms,ZLATMS)
the larfb → larfg → larft → larfx run is giving ✨alphabetical main character energy✨ and honestly? slay. 🎀
🌸 conversions, scales & sets
#define LAPACK_slag2d LAPACK_GLOBAL(slag2d,SLAG2D)
#define LAPACK_dlag2s LAPACK_GLOBAL(dlag2s,DLAG2S)
#define LAPACK_clag2z LAPACK_GLOBAL(clag2z,CLAG2Z)
#define LAPACK_zlag2c LAPACK_GLOBAL(zlag2c,ZLAG2C)
#define LAPACK_slauum LAPACK_GLOBAL(slauum,SLAUUM)
#define LAPACK_dlauum LAPACK_GLOBAL(dlauum,DLAUUM)
#define LAPACK_clauum LAPACK_GLOBAL(clauum,CLAUUM)
#define LAPACK_zlauum LAPACK_GLOBAL(zlauum,ZLAUUM)
#define LAPACK_slagge LAPACK_GLOBAL(slagge,SLAGGE)
#define LAPACK_dlagge LAPACK_GLOBAL(dlagge,DLAGGE)
#define LAPACK_clagge LAPACK_GLOBAL(clagge,CLAGGE)
#define LAPACK_zlagge LAPACK_GLOBAL(zlagge,ZLAGGE)
#define LAPACK_slascl LAPACK_GLOBAL(slascl,SLASCL)
#define LAPACK_dlascl LAPACK_GLOBAL(dlascl,DLASCL)
#define LAPACK_clascl LAPACK_GLOBAL(clascl,CLASCL)
#define LAPACK_zlascl LAPACK_GLOBAL(zlascl,ZLASCL)
#define LAPACK_slaset LAPACK_GLOBAL(slaset,SLASET)
#define LAPACK_dlaset LAPACK_GLOBAL(dlaset,DLASET)
#define LAPACK_claset LAPACK_GLOBAL(claset,CLASET)
#define LAPACK_zlaset LAPACK_GLOBAL(zlaset,ZLASET)
#define LAPACK_slasrt LAPACK_GLOBAL(slasrt,SLASRT)
#define LAPACK_dlasrt LAPACK_GLOBAL(dlasrt,DLASRT)
#define LAPACK_slagsy LAPACK_GLOBAL(slagsy,SLAGSY)
#define LAPACK_dlagsy LAPACK_GLOBAL(dlagsy,DLAGSY)
#define LAPACK_clagsy LAPACK_GLOBAL(clagsy,CLAGSY)
#define LAPACK_zlagsy LAPACK_GLOBAL(zlagsy,ZLAGSY)
#define LAPACK_claghe LAPACK_GLOBAL(claghe,CLAGHE)
#define LAPACK_zlaghe LAPACK_GLOBAL(zlaghe,ZLAGHE)
squad goals: slauum/dlauum/clauum/zlauum all in a row, and then claghe/zlaghe showing up as the only two in their set — iconic, no notes. 👑
🧚 permutations & the geometry girlies
#define LAPACK_slapmr LAPACK_GLOBAL(slapmr,SLAPMR)
#define LAPACK_dlapmr LAPACK_GLOBAL(dlapmr,DLAPMR)
#define LAPACK_clapmr LAPACK_GLOBAL(clapmr,CLAPMR)
#define LAPACK_zlapmr LAPACK_GLOBAL(zlapmr,ZLAPMR)
#define LAPACK_slapmt LAPACK_GLOBAL(slapmt,SLAPMT)
#define LAPACK_dlapmt LAPACK_GLOBAL(dlapmt,DLAPMT)
#define LAPACK_clapmt LAPACK_GLOBAL(clapmt,CLAPMT)
#define LAPACK_zlapmt LAPACK_GLOBAL(zlapmt,ZLAPMT)
#define LAPACK_slapy2 LAPACK_GLOBAL(slapy2,SLAPY2)
#define LAPACK_dlapy2 LAPACK_GLOBAL(dlapy2,DLAPY2)
#define LAPACK_slapy3 LAPACK_GLOBAL(slapy3,SLAPY3)
#define LAPACK_dlapy3 LAPACK_GLOBAL(dlapy3,DLAPY3)
#define LAPACK_slartgp LAPACK_GLOBAL(slartgp,SLARTGP)
#define LAPACK_dlartgp LAPACK_GLOBAL(dlartgp,DLARTGP)
#define LAPACK_slartgs LAPACK_GLOBAL(slartgs,SLARTGS)
#define LAPACK_dlartgs LAPACK_GLOBAL(dlartgs,DLARTGS)
lapmr vs lapmt — one letter apart, both real, don't typo them or it's over for you 💀 and yes, lapy2/lapy3 skip straight past lapy1, we don't talk about it 🙈
🎀 the decomposition / bidiagonal cuties
#define LAPACK_cbbcsd LAPACK_GLOBAL(cbbcsd,CBBCSD)
#define LAPACK_cheswapr LAPACK_GLOBAL(cheswapr,CHESWAPR)
#define LAPACK_chetri2 LAPACK_GLOBAL(chetri2,CHETRI2)
#define LAPACK_chetri2x LAPACK_GLOBAL(chetri2x,CHETRI2X)
#define LAPACK_chetrs2 LAPACK_GLOBAL(chetrs2,CHETRS2)
#define LAPACK_csyconv LAPACK_GLOBAL(csyconv,CSYCONV)
#define LAPACK_csyswapr LAPACK_GLOBAL(csyswapr,CSYSWAPR)
#define LAPACK_csytri2 LAPACK_GLOBAL(csytri2,CSYTRI2)
#define LAPACK_csytri2x LAPACK_GLOBAL(csytri2x,CSYTRI2X)
#define LAPACK_csytrs2 LAPACK_GLOBAL(csytrs2,CSYTRS2)
#define LAPACK_cunbdb LAPACK_GLOBAL(cunbdb,CUNBDB)
#define LAPACK_cuncsd LAPACK_GLOBAL(cuncsd,CUNCSD)
#define LAPACK_cuncsd2by1 LAPACK_GLOBAL(cuncsd2by1,CUNCSD2BY1)
#define LAPACK_dbbcsd LAPACK_GLOBAL(dbbcsd,DBBCSD)
#define LAPACK_dorbdb LAPACK_GLOBAL(dorbdb,DORBDB)
#define LAPACK_dorcsd LAPACK_GLOBAL(dorcsd,DORCSD)
#define LAPACK_dorcsd2by1 LAPACK_GLOBAL(dorcsd2by1,DORCSD2BY1)
#define LAPACK_dsyconv LAPACK_GLOBAL(dsyconv,DSYCONV)
#define LAPACK_dsyswapr LAPACK_GLOBAL(dsyswapr,DSYSWAPR)
#define LAPACK_dsytri2 LAPACK_GLOBAL(dsytri2,DSYTRI2)
#define LAPACK_dsytri2x LAPACK_GLOBAL(dsytri2x,DSYTRI2X)
#define LAPACK_dsytrs2 LAPACK_GLOBAL(dsytrs2,DSYTRS2)
#define LAPACK_sbbcsd LAPACK_GLOBAL(sbbcsd,SBBCSD)
#define LAPACK_sorbdb LAPACK_GLOBAL(sorbdb,SORBDB)
#define LAPACK_sorcsd LAPACK_GLOBAL(sorcsd,SORCSD)
#define LAPACK_sorcsd2by1 LAPACK_GLOBAL(sorcsd2by1,SORCSD2BY1)
#define LAPACK_ssyconv LAPACK_GLOBAL(ssyconv,SSYCONV)
#define LAPACK_ssyswapr LAPACK_GLOBAL(ssyswapr,SSYSWAPR)
#define LAPACK_ssytri2 LAPACK_GLOBAL(ssytri2,SSYTRI2)
#define LAPACK_ssytri2x LAPACK_GLOBAL(ssytri2x,SSYTRI2X)
#define LAPACK_ssytrs2 LAPACK_GLOBAL(ssytrs2,SSYTRS2)
#define LAPACK_zbbcsd LAPACK_GLOBAL(zbbcsd,ZBBCSD)
#define LAPACK_zheswapr LAPACK_GLOBAL(zheswapr,ZHESWAPR)
#define LAPACK_zhetri2 LAPACK_GLOBAL(zhetri2,ZHETRI2)
#define LAPACK_zhetri2x LAPACK_GLOBAL(zhetri2x,ZHETRI2X)
#define LAPACK_zhetrs2 LAPACK_GLOBAL(zhetrs2,ZHETRS2)
#define LAPACK_zsyconv LAPACK_GLOBAL(zsyconv,ZSYCONV)
#define LAPACK_zsyswapr LAPACK_GLOBAL(zsyswapr,ZSYSWAPR)
#define LAPACK_zsytri2 LAPACK_GLOBAL(zsytri2,ZSYTRI2)
#define LAPACK_zsytri2x LAPACK_GLOBAL(zsytri2x,ZSYTRI2X)
#define LAPACK_zsytrs2 LAPACK_GLOBAL(zsytrs2,ZSYTRS2)
#define LAPACK_zunbdb LAPACK_GLOBAL(zunbdb,ZUNBDB)
#define LAPACK_zuncsd LAPACK_GLOBAL(zuncsd,ZUNCSD)
#define LAPACK_zuncsd2by1 LAPACK_GLOBAL(zuncsd2by1,ZUNCSD2BY1)
the tri2 / tri2x / trs2 triplets appearing for every prefix is honestly so satisfying to scroll past 🌈 and note that unbdb, uncsd, uncsd2by1 only exist on the complex side here (c and z) while orbdb, orcsd, orcsd2by1 are the real ones — that's exactly how they're listed, don't come for me. 🦋
💜 the QR / triangular-factorisation glow-up
#define LAPACK_sgemqrt LAPACK_GLOBAL(sgemqrt,SGEMQRT)
#define LAPACK_dgemqrt LAPACK_GLOBAL(dgemqrt,DGEMQRT)
#define LAPACK_cgemqrt LAPACK_GLOBAL(cgemqrt,CGEMQRT)
#define LAPACK_zgemqrt LAPACK_GLOBAL(zgemqrt,ZGEMQRT)
#define LAPACK_sgeqrt LAPACK_GLOBAL(sgeqrt,SGEQRT)
#define LAPACK_dgeqrt LAPACK_GLOBAL(dgeqrt,DGEQRT)
#define LAPACK_cgeqrt LAPACK_GLOBAL(cgeqrt,CGEQRT)
#define LAPACK_zgeqrt LAPACK_GLOBAL(zgeqrt,ZGEQRT)
#define LAPACK_sgeqrt2 LAPACK_GLOBAL(sgeqrt2,SGEQRT2)
#define LAPACK_dgeqrt2 LAPACK_GLOBAL(dgeqrt2,DGEQRT2)
#define LAPACK_cgeqrt2 LAPACK_GLOBAL(cgeqrt2,CGEQRT2)
#define LAPACK_zgeqrt2 LAPACK_GLOBAL(zgeqrt2,ZGEQRT2)
#define LAPACK_sgeqrt3 LAPACK_GLOBAL(sgeqrt3,SGEQRT3)
#define LAPACK_dgeqrt3 LAPACK_GLOBAL(dgeqrt3,DGEQRT3)
#define LAPACK_cgeqrt3 LAPACK_GLOBAL(cgeqrt3,CGEQRT3)
#define LAPACK_zgeqrt3 LAPACK_GLOBAL(zgeqrt3,ZGEQRT3)
#define LAPACK_stpmqrt LAPACK_GLOBAL(stpmqrt,STPMQRT)
#define LAPACK_dtpmqrt LAPACK_GLOBAL(dtpmqrt,DTPMQRT)
#define LAPACK_ctpmqrt LAPACK_GLOBAL(ctpmqrt,CTPMQRT)
#define LAPACK_ztpmqrt LAPACK_GLOBAL(ztpmqrt,ZTPMQRT)
#define LAPACK_stpqrt LAPACK_GLOBAL(stpqrt,STPQRT)
#define LAPACK_dtpqrt LAPACK_GLOBAL(dtpqrt,DTPQRT)
#define LAPACK_ctpqrt LAPACK_GLOBAL(ctpqrt,CTPQRT)
#define LAPACK_ztpqrt LAPACK_GLOBAL(ztpqrt,ZTPQRT)
#define LAPACK_stpqrt2 LAPACK_GLOBAL(stpqrt2,STPQRT2)
#define LAPACK_dtpqrt2 LAPACK_GLOBAL(dtpqrt2,DTPQRT2)
#define LAPACK_ctpqrt2 LAPACK_GLOBAL(ctpqrt2,CTPQRT2)
#define LAPACK_ztpqrt2 LAPACK_GLOBAL(ztpqrt2,ZTPQRT2)
#define LAPACK_stprfb LAPACK_GLOBAL(stprfb,STPRFB)
#define LAPACK_dtprfb LAPACK_GLOBAL(dtprfb,DTPRFB)
#define LAPACK_ctprfb LAPACK_GLOBAL(ctprfb,CTPRFB)
#define LAPACK_ztprfb LAPACK_GLOBAL(ztprfb,ZTPRFB)
gemqrt → geqrt → geqrt2 → geqrt3 is such a little family tree and i'm obsessed with it 🍓 also pls clock that tpmqrt has the m and tpqrt doesn't — that single letter is doing so much heavy lifting, do not let it slide. 💀
⭐ the rook / aa era + the version-check queen
#define LAPACK_ssysv_rook LAPACK_GLOBAL(ssysv_rook,SSYSV_ROOK)
#define LAPACK_dsysv_rook LAPACK_GLOBAL(dsysv_rook,DSYSV_ROOK)
#define LAPACK_csysv_rook LAPACK_GLOBAL(csysv_rook,CSYSV_ROOK)
#define LAPACK_zsysv_rook LAPACK_GLOBAL(zsysv_rook,ZSYSV_ROOK)
#define LAPACK_csyr LAPACK_GLOBAL(csyr,CSYR)
#define LAPACK_zsyr LAPACK_GLOBAL(zsyr,ZSYR)
#define LAPACK_ilaver LAPACK_GLOBAL(ilaver,ILAVER)
#define LAPACK_sggsvd3 LAPACK_GLOBAL(sggsvd3,SGGSVD3)
#define LAPACK_dggsvd3 LAPACK_GLOBAL(dggsvd3,DGGSVD3)
#define LAPACK_cggsvd3 LAPACK_GLOBAL(cggsvd3,CGGSVD3)
#define LAPACK_zggsvd3 LAPACK_GLOBAL(zggsvd3,ZGGSVD3)
#define LAPACK_ssysv_aa LAPACK_GLOBAL(ssysv_aa,SSYSV_AA)
#define LAPACK_dsysv_aa LAPACK_GLOBAL(dsysv_aa,DSYSV_AA)
#define LAPACK_chesv_aa LAPACK_GLOBAL(chesv_aa,CHESV_AA)
#define LAPACK_zsysv_aa LAPACK_GLOBAL(zsysv_aa,ZSYSV_AA)
#define LAPACK_csysv_aa LAPACK_GLOBAL(csysv_aa,CSYSV_AA)
#define LAPACK_zhesv_aa LAPACK_GLOBAL(zhesv_aa,ZHESV_AA)
#define LAPACK_ssytrs_aa LAPACK_GLOBAL(ssytrs_aa,SSYTRS_AA)
#define LAPACK_dsytrs_aa LAPACK_GLOBAL(dsytrs_aa,DSYTRS_AA)
#define LAPACK_csytrs_aa LAPACK_GLOBAL(csytrs_aa,CSYTRS_AA)
#define LAPACK_zsytrs_aa LAPACK_GLOBAL(zsytrs_aa,ZSYTRS_AA)
#define LAPACK_chetrs_aa LAPACK_GLOBAL(chetrs_aa,CHETRS_AA)
#define LAPACK_zhetrs_aa LAPACK_GLOBAL(zhetrs_aa,ZHETRS_AA)
#define LAPACK_ssytrf_aa LAPACK_GLOBAL(ssytrf_aa,SSYTRF_AA)
#define LAPACK_dsytrf_aa LAPACK_GLOBAL(dsytrf_aa,DSYTRF_AA)
#define LAPACK_csytrf_aa LAPACK_GLOBAL(csytrf_aa,CSYTRF_AA)
#define LAPACK_zsytrf_aa LAPACK_GLOBAL(zsytrf_aa,ZSYTRF_AA)
bestie pls notice: those_rookand_aanames are the only ones in this whole chunk with an underscore in the lowercase name, and the uppercase side keeps it too —SSYSV_ROOK,SSYTRF_AA. so it'sLAPACK_GLOBAL(ssytrf_aa,SSYTRF_AA)exactly, not a typo, don't "fix" it. 🫶
and ilaver just vibing there in the middle with no friends, checking versions like the main character it is. 👑
Okay bestie, buckle up, because the #define section is still going 💅 — this is the part where LAPACK starts feeling like it's just flexing. Slay, honestly.
First up, the _aa hermitian crew (two of them, living their best life):
#define LAPACK_chetrf_aa LAPACK_GLOBAL(chetrf_aa,CHETRF_AA)
#define LAPACK_zhetrf_aa LAPACK_GLOBAL(zhetrf_aa,ZHETRF_AA)
Then suddenly we're in _rk territory — that's the symmetric-and-hermitian factorization/solve/inverse/condition-estimate era. Watch the ordering here, because it is not alphabetical and it is not symmetric, and that's just how the header is, no cap:
#define LAPACK_ssysv_rk LAPACK_GLOBAL(ssysv_rk,SSYSV_RK)
#define LAPACK_dsysv_rk LAPACK_GLOBAL(dsysv_rk,DSYSV_RK)
#define LAPACK_chesv_rk LAPACK_GLOBAL(chesv_rk,CHESV_RK)
#define LAPACK_zsysv_rk LAPACK_GLOBAL(zsysv_rk,ZSYSV_RK)
#define LAPACK_csysv_rk LAPACK_GLOBAL(csysv_rk,CSYSV_RK)
#define LAPACK_zhesv_rk LAPACK_GLOBAL(zhesv_rk,ZHESV_RK)
#define LAPACK_ssytrf_rk LAPACK_GLOBAL(ssytrf_rk,SSYTRF_RK)
#define LAPACK_dsytrf_rk LAPACK_GLOBAL(dsytrf_rk,DSYTRF_RK)
#define LAPACK_csytrf_rk LAPACK_GLOBAL(csytrf_rk,CSYTRF_RK)
#define LAPACK_zsytrf_rk LAPACK_GLOBAL(zsytrf_rk,ZSYTRF_RK)
#define LAPACK_chetrf_rk LAPACK_GLOBAL(chetrf_rk,CHETRF_RK)
#define LAPACK_zhetrf_rk LAPACK_GLOBAL(zhetrf_rk,ZHETRF_RK)
Notice how ssysv_rk, dsysv_rk, chesv_rk, zsysv_rk, csysv_rk and zhesv_rk roll out in exactly that sequence — yes, chesv before zsysv, and yes, zsysv before csysv. Someone was living their truth when they wrote this file and honestly? Respect. 🫶
Now the _3 era — same factorization energy but with the 3 suffix, which shows up on sytrs, hetrs, sytri, hetri, sycon and hecon:
#define LAPACK_ssytrs_3 LAPACK_GLOBAL(ssytrs_3,SSYTRS_3)
#define LAPACK_dsytrs_3 LAPACK_GLOBAL(dsytrs_3,DSYTRS_3)
#define LAPACK_csytrs_3 LAPACK_GLOBAL(csytrs_3,CSYTRS_3)
#define LAPACK_zsytrs_3 LAPACK_GLOBAL(zsytrs_3,ZSYTRS_3)
#define LAPACK_chetrs_3 LAPACK_GLOBAL(chetrs_3,CHETRS_3)
#define LAPACK_zhetrs_3 LAPACK_GLOBAL(zhetrs_3,ZHETRS_3)
#define LAPACK_ssytri_3 LAPACK_GLOBAL(ssytri_3,SSYTRI_3)
#define LAPACK_dsytri_3 LAPACK_GLOBAL(dsytri_3,DSYTRI_3)
#define LAPACK_csytri_3 LAPACK_GLOBAL(csytri_3,CSYTRI_3)
#define LAPACK_zsytri_3 LAPACK_GLOBAL(zsytri_3,ZSYTRI_3)
#define LAPACK_chetri_3 LAPACK_GLOBAL(chetri_3,CHETRI_3)
#define LAPACK_zhetri_3 LAPACK_GLOBAL(zhetri_3,ZHETRI_3)
#define LAPACK_ssycon_3 LAPACK_GLOBAL(ssycon_3,SSYCON_3)
#define LAPACK_dsycon_3 LAPACK_GLOBAL(dsycon_3,DSYCON_3)
#define LAPACK_csycon_3 LAPACK_GLOBAL(csycon_3,CSYCON_3)
#define LAPACK_zsycon_3 LAPACK_GLOBAL(zsycon_3,ZSYCON_3)
#define LAPACK_checon_3 LAPACK_GLOBAL(checon_3,CHECON_3)
#define LAPACK_zhecon_3 LAPACK_GLOBAL(zhecon_3,ZHECON_3)
That's the full _3 set — ten _3 solves/inverses and six _3 condition estimators. Eighteen lines, zero skips, we do not abandon our children. 🧚
Then the LQ and QR glow-up, plus their multiply friends, plus getsls:
#define LAPACK_sgelq LAPACK_GLOBAL(sgelq,SGELQ)
#define LAPACK_dgelq LAPACK_GLOBAL(dgelq,DGELQ)
#define LAPACK_cgelq LAPACK_GLOBAL(cgelq,CGELQ)
#define LAPACK_zgelq LAPACK_GLOBAL(zgelq,ZGELQ)
#define LAPACK_sgemlq LAPACK_GLOBAL(sgemlq,SGEMLQ)
#define LAPACK_dgemlq LAPACK_GLOBAL(dgemlq,DGEMLQ)
#define LAPACK_cgemlq LAPACK_GLOBAL(cgemlq,CGEMLQ)
#define LAPACK_zgemlq LAPACK_GLOBAL(zgemlq,ZGEMLQ)
#define LAPACK_sgeqr LAPACK_GLOBAL(sgeqr,SGEQR)
#define LAPACK_dgeqr LAPACK_GLOBAL(dgeqr,DGEQR)
#define LAPACK_cgeqr LAPACK_GLOBAL(cgeqr,CGEQR)
#define LAPACK_zgeqr LAPACK_GLOBAL(zgeqr,ZGEQR)
#define LAPACK_sgemqr LAPACK_GLOBAL(sgemqr,SGEMQR)
#define LAPACK_dgemqr LAPACK_GLOBAL(dgemqr,DGEMQR)
#define LAPACK_cgemqr LAPACK_GLOBAL(cgemqr,CGEMQR)
#define LAPACK_zgemqr LAPACK_GLOBAL(zgemqr,ZGEMQR)
#define LAPACK_sgetsls LAPACK_GLOBAL(sgetsls,SGETSLS)
#define LAPACK_dgetsls LAPACK_GLOBAL(dgetsls,DGETSLS)
#define LAPACK_cgetsls LAPACK_GLOBAL(cgetsls,CGETSLS)
#define LAPACK_zgetsls LAPACK_GLOBAL(zgetsls,ZGETSLS)
Four precisions each: s, d, c, z, always in that order. That's the whole pattern — gelq, gemlq, geqr, gemqr, getsls. Iconic, consistent, we love to see it. ⭐
And now, the main character: the _aa_2stage block 💀. These are the ones that are too long to fit on one line, so each #define takes a little nap and continues on the next line. Keep the line breaks exactly — this is a preprocessor continuation situation and you do not want to be the girlie who smooshed them together:
#define LAPACK_ssysv_aa_2stage
LAPACK_GLOBAL(ssysv_aa_2stage,SSYSV_AA_2STAGE)
#define LAPACK_dsysv_aa_2stage
LAPACK_GLOBAL(dsysv_aa_2stage,DSYSV_AA_2STAGE)
#define LAPACK_chesv_aa_2stage
LAPACK_GLOBAL(chesv_aa_2stage,CHESV_AA_2STAGE)
#define LAPACK_zsysv_aa_2stage
LAPACK_GLOBAL(zsysv_aa_2stage,ZSYSV_AA_2STAGE)
#define LAPACK_csysv_aa_2stage
LAPACK_GLOBAL(csysv_aa_2stage,CSYSV_AA_2STAGE)
#define LAPACK_zhesv_aa_2stage
LAPACK_GLOBAL(zhesv_aa_2stage,ZHESV_AA_2STAGE)
#define LAPACK_ssytrs_aa_2stage
LAPACK_GLOBAL(ssytrs_aa_2stage,SSYTRS_AA_2STAGE)
#define LAPACK_dsytrs_aa_2stage
LAPACK_GLOBAL(dsytrs_aa_2stage,DSYTRS_AA_2STAGE)
#define LAPACK_csytrs_aa_2stage
LAPACK_GLOBAL(csytrs_aa_2stage,CSYTRS_AA_2STAGE)
#define LAPACK_zsytrs_aa_2stage
LAPACK_GLOBAL(zsytrs_aa_2stage,ZSYTRS_AA_2STAGE)
#define LAPACK_chetrs_aa_2stage
LAPACK_GLOBAL(chetrs_aa_2stage,CHETRS_AA_2STAGE)
#define LAPACK_zhetrs_aa_2stage
LAPACK_GLOBAL(zhetrs_aa_2stage,ZHETRS_AA_2STAGE)
#define LAPACK_ssytrf_aa_2stage
LAPACK_GLOBAL(ssytrf_aa_2stage,SSYTRF_AA_2STAGE)
#define LAPACK_dsytrf_aa_2stage
LAPACK_GLOBAL(dsytrf_aa_2stage,DSYTRF_AA_2STAGE)
#define LAPACK_csytrf_aa_2stage
LAPACK_GLOBAL(csytrf_aa_2stage,CSYTRF_AA_2STAGE)
#define LAPACK_zsytrf_aa_2stage
LAPACK_GLOBAL(zsytrf_aa_2stage,ZSYTRF_AA_2STAGE)
#define LAPACK_chetrf_aa_2stage
LAPACK_GLOBAL(chetrf_aa_2stage,CHETRF_AA_2STAGE)
#define LAPACK_zhetrf_aa_2stage
LAPACK_GLOBAL(zhetrf_aa_2stage,ZHETRF_AA_2STAGE)
Eighteen of them, each one split across two lines like it's texting in two messages because the thought was too big for one 🎀.
And the vibe check, because the ordering is doing the most: <hotpink>ssysv</hotpink>, <hotpink>dsysv</hotpink>, <hotpink>chesv</hotpink>, <hotpink>zsysv</hotpink>, <hotpink>csysv</hotpink>, <hotpink>zhesv</hotpink> for the solves, then sytrs/hetrs, then sytrf/hetrf. Same shape as the _rk block up above — literally the same energy, just with _aa_2stage bolted on the end. Consistency is a love language. 💜
Typedefs
OK now the Typedefs subsection, and listen — these are function pointer typedefs, which means they're types for callbacks. Every single one returns lapack_logical and takes only const pointers. That's it, that's the whole squad:
typedef lapack_logical(* LAPACK_S_SELECT2) (const float *, const float
*)
typedef lapack_logical(* LAPACK_S_SELECT3) (const float *, const float
*, const float *)
typedef lapack_logical(* LAPACK_D_SELECT2) (const double *, const double
*)
typedef lapack_logical(* LAPACK_D_SELECT3) (const double *, const double
*, const double *)
typedef lapack_logical(* LAPACK_C_SELECT1) (const lapack_complex_float
*)
typedef lapack_logical(* LAPACK_C_SELECT2) (const lapack_complex_float
*, const lapack_complex_float *)
typedef lapack_logical(* LAPACK_Z_SELECT1) (const lapack_complex_double
*)
typedef lapack_logical(* LAPACK_Z_SELECT2) (const lapack_complex_double
*, const lapack_complex_double *)
Let me break that down so it's giving clarity and not just mystery 🦋:
LAPACK_S_SELECT2— a pointer to a function taking twoconst float *and returninglapack_logical.LAPACK_S_SELECT3— same deal but threeconst float *.LAPACK_D_SELECT2— twoconst double *, returnslapack_logical.LAPACK_D_SELECT3— threeconst double *, returnslapack_logical.LAPACK_C_SELECT1— oneconst lapack_complex_float *, returnslapack_logical.LAPACK_C_SELECT2— twoconst lapack_complex_float *, returnslapack_logical.LAPACK_Z_SELECT1— oneconst lapack_complex_double *, returnslapack_logical.LAPACK_Z_SELECT2— twoconst lapack_complex_double *, returnslapack_logical.
So the naming pattern is precision letter + _SELECT + how many arguments. S and D go up to 3, C and Z only go to 2 — and C and Z each get a SELECT1 while S and D do not. That's not me editorialising, that's literally the list — eight typedefs, no more, no less. 🙈
Heads up bestie: if you're copying these into anything, keep theconstand the*glued to the right types exactly as shown —const float *is not the same vibe asfloat *, and the compiler will absolutely notice. 😭
🎀 Functions 🎀
okay bestie, deep breath 💖 this is the big roster — the actual prototypes, in the order they live in the header. Every single one of the LAPACKE_* entries returns a lapack_int, and basically all of them kick off with int matrix_layout as the very first thing. Watch for the exceptions, they're cute 🫶
the three helpers up top 🌸
lapack_complex_float lapack_make_complex_float (float re, float im)
lapack_complex_double lapack_make_complex_double (double re, double im)
lapack_logical LAPACK_lsame (char *ca, char *cb, lapack_int lca,
lapack_int lcb)
lapack_make_complex_float— takesfloat re, float imand hands you back alapack_complex_float🦋lapack_make_complex_double— same energy,double re, double imin,lapack_complex_doubleout ✨LAPACK_lsame— returns alapack_logical, takeschar *ca,char *cb, plus the lengthslcaandlcb💅
these three are the only non-lapack_int returns in this whole stretch, so like… treasure them 😭
bdsdc — only the real ones 🍓
lapack_int LAPACKE_sbdsdc (int matrix_layout, char uplo, char compq,
lapack_int n, float *d, float *e, float *u, lapack_int ldu, float
*vt, lapack_int ldvt, float *q, lapack_int *iq)
lapack_int LAPACKE_dbdsdc (int matrix_layout, char uplo, char compq,
lapack_int n, double *d, double *e, double *u, lapack_int ldu,
double *vt, lapack_int ldvt, double *q, lapack_int *iq)
only two flavors here — s and d, no complex in sight. note iq is a lapack_int * while q is a real pointer, don't mix them up bestie 🙈
bdsqr — all four precisions ate 💅
lapack_int LAPACKE_sbdsqr (int matrix_layout, char uplo, lapack_int n,
lapack_int ncvt, lapack_int nru, lapack_int ncc, float *d, float *e,
float *vt, lapack_int ldvt, float *u, lapack_int ldu, float *c,
lapack_int ldc)
lapack_int LAPACKE_dbdsqr (int matrix_layout, char uplo, lapack_int n,
lapack_int ncvt, lapack_int nru, lapack_int ncc, double *d, double
*e, double *vt, lapack_int ldvt, double *u, lapack_int ldu, double
*c, lapack_int ldc)
lapack_int LAPACKE_cbdsqr (int matrix_layout, char uplo, lapack_int n,
lapack_int ncvt, lapack_int nru, lapack_int ncc, float *d, float *e,
lapack_complex_float *vt, lapack_int ldvt, lapack_complex_float *u,
lapack_int ldu, lapack_complex_float *c, lapack_int ldc)
lapack_int LAPACKE_zbdsqr (int matrix_layout, char uplo, lapack_int n,
lapack_int ncvt, lapack_int nru, lapack_int ncc, double *d, double
*e, lapack_complex_double *vt, lapack_int ldvt,
lapack_complex_double *u, lapack_int ldu, lapack_complex_double *c,
lapack_int ldc)
the way all four line up parameter-for-parameter is so satisfying ngl 🧚 and yes — even in the c and z versions, d and e stay plain float/double. that's not a typo, that's the signature, don't @ me 💀
bdsvdx — the range-y one 👑
lapack_int LAPACKE_sbdsvdx (int matrix_layout, char uplo, char jobz,
char range, lapack_int n, float *d, float *e, float vl, float vu,
lapack_int il, lapack_int iu, lapack_int *ns, float *s, float *z,
lapack_int ldz, lapack_int *superb)
lapack_int LAPACKE_dbdsvdx (int matrix_layout, char uplo, char jobz,
char range, lapack_int n, double *d, double *e, double vl, double
vu, lapack_int il, lapack_int iu, lapack_int *ns, double *s, double
*z, lapack_int ldz, lapack_int *superb)
sixteen params each 🔥 note that vl and vu are passed by value (float vl, float vu / double vl, double vu) while il and iu are lapack_int by value too — the pointers are only d, e, ns, s, z, and superb. and bestie, the last param is literally called superb, main character naming fr fr 🌈
disna — the rebel without matrix_layout 🎀
lapack_int LAPACKE_sdisna (char job, lapack_int m, lapack_int n, const
float *d, float *sep)
lapack_int LAPACKE_ddisna (char job, lapack_int m, lapack_int n, const
double *d, double *sep)
okay the way these two just skip matrix_layout entirely and open with char job?? iconique 💅 also clock the const on *d — it's a read-only vibe, *sep is where the output goes ✨
gbbrd — all four, stacked 🦋
lapack_int LAPACKE_sgbbrd (int matrix_layout, char vect, lapack_int m,
lapack_int n, lapack_int ncc, lapack_int kl, lapack_int ku, float
*ab, lapack_int ldab, float *d, float *e, float *q, lapack_int ldq,
float *pt, lapack_int ldpt, float *c, lapack_int ldc)
lapack_int LAPACKE_dgbbrd (int matrix_layout, char vect, lapack_int m,
lapack_int n, lapack_int ncc, lapack_int kl, lapack_int ku, double
*ab, lapack_int ldab, double *d, double *e, double *q, lapack_int
ldq, double *pt, lapack_int ldpt, double *c, lapack_int ldc)
lapack_int LAPACKE_cgbbrd (int matrix_layout, char vect, lapack_int m,
lapack_int n, lapack_int ncc, lapack_int kl, lapack_int ku,
lapack_complex_float *ab, lapack_int ldab, float *d, float *e,
lapack_complex_float *q, lapack_int ldq, lapack_complex_float *pt,
lapack_int ldpt, lapack_complex_float *c, lapack_int ldc)
lapack_int LAPACKE_zgbbrd (int matrix_layout, char vect, lapack_int m,
lapack_int n, lapack_int ncc, lapack_int kl, lapack_int ku,
lapack_complex_double *ab, lapack_int ldab, double *d, double *e,
lapack_complex_double *q, lapack_int ldq, lapack_complex_double *pt,
lapack_int ldpt, lapack_complex_double *c, lapack_int ldc)
seventeen params each, and the c/z versions keep d and e real while everything else goes complex. the way the leading dimensions (ldab, ldq, ldpt, ldc) trail their arrays like little ducklings 😭🫶
gbcon — the const era begins 🌸
lapack_int LAPACKE_sgbcon (int matrix_layout, char norm, lapack_int n,
lapack_int kl, lapack_int ku, const float *ab, lapack_int ldab,
const lapack_int *ipiv, float anorm, float *rcond)
lapack_int LAPACKE_dgbcon (int matrix_layout, char norm, lapack_int n,
lapack_int kl, lapack_int ku, const double *ab, lapack_int ldab,
const lapack_int *ipiv, double anorm, double *rcond)
lapack_int LAPACKE_cgbcon (int matrix_layout, char norm, lapack_int n,
lapack_int kl, lapack_int ku, const lapack_complex_float *ab,
lapack_int ldab, const lapack_int *ipiv, float anorm, float *rcond)
lapack_int LAPACKE_zgbcon (int matrix_layout, char norm, lapack_int n,
lapack_int kl, lapack_int ku, const lapack_complex_double *ab,
lapack_int ldab, const lapack_int *ipiv, double anorm, double
*rcond)
both ab and ipiv are const here (they're inputs, periodt ✨), anorm comes in by value, and rcond is the lone non-const pointer — that's the output, bestie 💖
gbequ 🍓
lapack_int LAPACKE_sgbequ (int matrix_layout, lapack_int m, lapack_int
n, lapack_int kl, lapack_int ku, const float *ab, lapack_int ldab,
float *r, float *c, float *rowcnd, float *colcnd, float *amax)
lapack_int LAPACKE_dgbequ (int matrix_layout, lapack_int m, lapack_int
n, lapack_int kl, lapack_int ku, const double *ab, lapack_int ldab,
double *r, double *c, double *rowcnd, double *colcnd, double *amax)
lapack_int LAPACKE_cgbequ (int matrix_layout, lapack_int m, lapack_int
n, lapack_int kl, lapack_int ku, const lapack_complex_float *ab,
lapack_int ldab, float *r, float *c, float *rowcnd, float *colcnd,
float *amax)
lapack_int LAPACKE_zgbequ (int matrix_layout, lapack_int m, lapack_int
n, lapack_int kl, lapack_int ku, const lapack_complex_double *ab,
lapack_int ldab, double *r, double *c, double *rowcnd, double
*colcnd, double *amax)
only ab is const; r, c, rowcnd, colcnd, and amax are all writable pointers. in the complex versions r, c, rowcnd, colcnd, and amax stay real 🌈
gbequb — same fit, different suffix 💜
lapack_int LAPACKE_sgbequb (int matrix_layout, lapack_int m, lapack_int
n, lapack_int kl, lapack_int ku, const float *ab, lapack_int ldab,
float *r, float *c, float *rowcnd, float *colcnd, float *amax)
lapack_int LAPACKE_dgbequb (int matrix_layout, lapack_int m, lapack_int
n, lapack_int kl, lapack_int ku, const double *ab, lapack_int ldab,
double *r, double *c, double *rowcnd, double *colcnd, double *amax)
lapack_int LAPACKE_cgbequb (int matrix_layout, lapack_int m, lapack_int
n, lapack_int kl, lapack_int ku, const lapack_complex_float *ab,
lapack_int ldab, float *r, float *c, float *rowcnd, float *colcnd,
float *amax)
lapack_int LAPACKE_zgbequb (int matrix_layout, lapack_int m, lapack_int
n, lapack_int kl, lapack_int ku, const lapack_complex_double *ab,
lapack_int ldab, double *r, double *c, double *rowcnd, double
*colcnd, double *amax)
identical shape to gbequ, just with the b on the end. if you can call one you can call the other, no cap 🧚
gbrfs 🔥
lapack_int LAPACKE_sgbrfs (int matrix_layout, char trans, lapack_int n,
lapack_int kl, lapack_int ku, lapack_int nrhs, const float *ab,
lapack_int ldab, const float *afb, lapack_int ldafb, const
lapack_int *ipiv, const float *b, lapack_int ldb, float *x,
lapack_int ldx, float *ferr, float *berr)
lapack_int LAPACKE_dgbrfs (int matrix_layout, char trans, lapack_int n,
lapack_int kl, lapack_int ku, lapack_int nrhs, const double *ab,
lapack_int ldab, const double *afb, lapack_int ldafb, const
lapack_int *ipiv, const double *b, lapack_int ldb, double *x,
lapack_int ldx, double *ferr, double *berr)
lapack_int LAPACKE_cgbrfs (int matrix_layout, char trans, lapack_int n,
lapack_int kl, lapack_int ku, lapack_int nrhs, const
lapack_complex_float *ab, lapack_int ldab, const
lapack_complex_float *afb, lapack_int ldafb, const lapack_int *ipiv,
const lapack_complex_float *b, lapack_int ldb, lapack_complex_float
*x, lapack_int ldx, float *ferr, float *berr)
lapack_int LAPACKE_zgbrfs (int matrix_layout, char trans, lapack_int n,
lapack_int kl, lapack_int ku, lapack_int nrhs, const
lapack_complex_double *ab, lapack_int ldab, const
lapack_complex_double *afb, lapack_int ldafb, const lapack_int
*ipiv, const lapack_complex_double *b, lapack_int ldb,
lapack_complex_double *x, lapack_int ldx, double *ferr, double
*berr)
count the consts bestie — ab, afb, ipiv, and b are all read-only, while x, ferr, berr are yours to write. ferr and berr stay real in the complex versions too 💅
gbrfsx — the twenty-five-param monster 👑
lapack_int LAPACKE_sgbrfsx (int matrix_layout, char trans, char equed,
lapack_int n, lapack_int kl, lapack_int ku, lapack_int nrhs, const
float *ab, lapack_int ldab, const float *afb, lapack_int ldafb,
const lapack_int *ipiv, const float *r, const float *c, const float
*b, lapack_int ldb, float *x, lapack_int ldx, float *rcond, float
*berr, lapack_int n_err_bnds, float *err_bnds_norm, float
*err_bnds_comp, lapack_int nparams, float *params)
lapack_int LAPACKE_dgbrfsx (int matrix_layout, char trans, char equed,
lapack_int n, lapack_int kl, lapack_int ku, lapack_int nrhs, const
double *ab, lapack_int ldab, const double *afb, lapack_int ldafb,
const lapack_int *ipiv, const double *r, const double *c, const
double *b, lapack_int ldb, double *x, lapack_int ldx, double *rcond,
double *berr, lapack_int n_err_bnds, double *err_bnds_norm, double
*err_bnds_comp, lapack_int nparams, double *params)
lapack_int LAPACKE_cgbrfsx (int matrix_layout, char trans, char equed,
lapack_int n, lapack_int kl, lapack_int ku, lapack_int nrhs, const
lapack_complex_float *ab, lapack_int ldab, const
lapack_complex_float *afb, lapack_int ldafb, const lapack_int *ipiv,
const float *r, const float *c, const lapack_complex_float *b,
lapack_int ldb, lapack_complex_float *x, lapack_int ldx, float
*rcond, float *berr, lapack_int n_err_bnds, float *err_bnds_norm,
float *err_bnds_comp, lapack_int nparams, float *params)
lapack_int LAPACKE_zgbrfsx (int matrix_layout, char trans, char equed,
lapack_int n, lapack_int kl, lapack_int ku, lapack_int nrhs, const
lapack_complex_double *ab, lapack_int ldab, const
lapack_complex_double *afb, lapack_int ldafb, const lapack_int
*ipiv, const double *r, const double *c, const lapack_complex_double
*b, lapack_int ldb, lapack_complex_double *x, lapack_int ldx, double
*rcond, double *berr, lapack_int n_err_bnds, double *err_bnds_norm,
double *err_bnds_comp, lapack_int nparams, double *params)
twenty-five parameters. twenty-five!! 😭 and the extra ones compared to plain gbrfs: char equed, const float *r, const float *c, float *rcond, lapack_int n_err_bnds, float *err_bnds_norm, float *err_bnds_comp, lapack_int nparams, float *params. two separate error-bound arrays, bestie — err_bnds_norm and err_bnds_comp — don't forget either of them 🙈
gbsv — the tidy four 💖
lapack_int LAPACKE_sgbsv (int matrix_layout, lapack_int n, lapack_int
kl, lapack_int ku, lapack_int nrhs, float *ab, lapack_int ldab,
lapack_int *ipiv, float *b, lapack_int ldb)
lapack_int LAPACKE_dgbsv (int matrix_layout, lapack_int n, lapack_int
kl, lapack_int ku, lapack_int nrhs, double *ab, lapack_int ldab,
lapack_int *ipiv, double *b, lapack_int ldb)
lapack_int LAPACKE_cgbsv (int matrix_layout, lapack_int n, lapack_int
kl, lapack_int ku, lapack_int nrhs, lapack_complex_float *ab,
lapack_int ldab, lapack_int *ipiv, lapack_complex_float *b,
lapack_int ldb)
lapack_int LAPACKE_zgbsv (int matrix_layout, lapack_int n, lapack_int
kl, lapack_int ku, lapack_int nrhs, lapack_complex_double *ab,
lapack_int ldab, lapack_int *ipiv, lapack_complex_double *b,
lapack_int ldb)
look at that — no const anywhere, so ab, ipiv, and b are all fair game to be written into 🦋 short and sweet, ten params, we love a low-maintenance icon ✨
gbsvx — the big finale, s flavor 🎀
lapack_int LAPACKE_sgbsvx (int matrix_layout, char fact, char trans,
lapack_int n, lapack_int kl, lapack_int ku, lapack_int nrhs, float
*ab, lapack_int ldab, float *afb, lapack_int ldafb, lapack_int
*ipiv, char *equed, float *r, float *c, float *b, lapack_int ldb,
float *x, lapack_int ldx, float *rcond, float *ferr, float *berr,
float *rpivot)
and boom — sgbsvx closes out this stretch, and it is not shy: three chars (fact, trans, equed), and clock that char *equed is a pointer while fact and trans are by-value char 👀 plus rpivot sitting at the end like a little cherry on top 🍓 the rest of the family is lined up right behind it, promise — this list is nowhere near done 😭💅
okay bestie we're still deep in the SYNOPSIS era and the prototypes just keep coming — but lowkey that's the vibe, so let's get into it 💅 The pattern is your bestie here: every family comes in s, d, c, z flavors, and once you clock it you're basically fluent. iykyk ✨
lapack_int LAPACKE_dgbsvx (int matrix_layout, char fact, char trans,
lapack_int n, lapack_int kl, lapack_int ku, lapack_int nrhs, double
*ab, lapack_int ldab, double *afb, lapack_int ldafb, lapack_int
*ipiv, char *equed, double *r, double *c, double *b, lapack_int ldb,
double *x, lapack_int ldx, double *rcond, double *ferr, double
*berr, double *rpivot)
lapack_int LAPACKE_cgbsvx (int matrix_layout, char fact, char trans,
lapack_int n, lapack_int kl, lapack_int ku, lapack_int nrhs,
lapack_complex_float *ab, lapack_int ldab, lapack_complex_float
*afb, lapack_int ldafb, lapack_int *ipiv, char *equed, float *r,
float *c, lapack_complex_float *b, lapack_int ldb,
lapack_complex_float *x, lapack_int ldx, float *rcond, float *ferr,
float *berr, float *rpivot)
lapack_int LAPACKE_zgbsvx (int matrix_layout, char fact, char trans,
lapack_int n, lapack_int kl, lapack_int ku, lapack_int nrhs,
lapack_complex_double *ab, lapack_int ldab, lapack_complex_double
*afb, lapack_int ldafb, lapack_int *ipiv, char *equed, double *r,
double *c, lapack_complex_double *b, lapack_int ldb,
lapack_complex_double *x, lapack_int ldx, double *rcond, double
*ferr, double *berr, double *rpivot)
the <hotpink>gbsvx</hotpink> girlies are giving "expert mode solver" — they're the ones with the rpivot crowd and the equed glow-up, and yes bestie that's a lot of pointers, but you got this 🫶
lapack_int LAPACKE_sgbsvxx (int matrix_layout, char fact, char trans,
lapack_int n, lapack_int kl, lapack_int ku, lapack_int nrhs, float
*ab, lapack_int ldab, float *afb, lapack_int ldafb, lapack_int
*ipiv, char *equed, float *r, float *c, float *b, lapack_int ldb,
float *x, lapack_int ldx, float *rcond, float *rpvgrw, float *berr,
lapack_int n_err_bnds, float *err_bnds_norm, float *err_bnds_comp,
lapack_int nparams, float *params)
lapack_int LAPACKE_dgbsvxx (int matrix_layout, char fact, char trans,
lapack_int n, lapack_int kl, lapack_int ku, lapack_int nrhs, double
*ab, lapack_int ldab, double *afb, lapack_int ldafb, lapack_int
*ipiv, char *equed, double *r, double *c, double *b, lapack_int ldb,
double *x, lapack_int ldx, double *rcond, double *rpvgrw, double
*berr, lapack_int n_err_bnds, double *err_bnds_norm, double
*err_bnds_comp, lapack_int nparams, double *params)
lapack_int LAPACKE_cgbsvxx (int matrix_layout, char fact, char trans,
lapack_int n, lapack_int kl, lapack_int ku, lapack_int nrhs,
lapack_complex_float *ab, lapack_int ldab, lapack_complex_float
*afb, lapack_int ldafb, lapack_int *ipiv, char *equed, float *r,
float *c, lapack_complex_float *b, lapack_int ldb,
lapack_complex_float *x, lapack_int ldx, float *rcond, float
*rpvgrw, float *berr, lapack_int n_err_bnds, float *err_bnds_norm,
float *err_bnds_comp, lapack_int nparams, float *params)
lapack_int LAPACKE_zgbsvxx (int matrix_layout, char fact, char trans,
lapack_int n, lapack_int kl, lapack_int ku, lapack_int nrhs,
lapack_complex_double *ab, lapack_int ldab, lapack_complex_double
*afb, lapack_int ldafb, lapack_int *ipiv, char *equed, double *r,
double *c, lapack_complex_double *b, lapack_int ldb,
lapack_complex_double *x, lapack_int ldx, double *rcond, double
*rpvgrw, double *berr, lapack_int n_err_bnds, double *err_bnds_norm,
double *err_bnds_comp, lapack_int nparams, double *params)
double-x = double the drama 💀 <purple>gbsvxx</purple> brought the whole error-bound entourage: n_err_bnds, err_bnds_norm, err_bnds_comp, nparams, params. it's giving "i brought receipts" and honestly? iconic 👑
lapack_int LAPACKE_sgbtrf (int matrix_layout, lapack_int m, lapack_int
n, lapack_int kl, lapack_int ku, float *ab, lapack_int ldab,
lapack_int *ipiv)
lapack_int LAPACKE_dgbtrf (int matrix_layout, lapack_int m, lapack_int
n, lapack_int kl, lapack_int ku, double *ab, lapack_int ldab,
lapack_int *ipiv)
lapack_int LAPACKE_cgbtrf (int matrix_layout, lapack_int m, lapack_int
n, lapack_int kl, lapack_int ku, lapack_complex_float *ab,
lapack_int ldab, lapack_int *ipiv)
lapack_int LAPACKE_zgbtrf (int matrix_layout, lapack_int m, lapack_int
n, lapack_int kl, lapack_int ku, lapack_complex_double *ab,
lapack_int ldab, lapack_int *ipiv)
lapack_int LAPACKE_sgbtrs (int matrix_layout, char trans, lapack_int n,
lapack_int kl, lapack_int ku, lapack_int nrhs, const float *ab,
lapack_int ldab, const lapack_int *ipiv, float *b, lapack_int ldb)
lapack_int LAPACKE_dgbtrs (int matrix_layout, char trans, lapack_int n,
lapack_int kl, lapack_int ku, lapack_int nrhs, const double *ab,
lapack_int ldab, const lapack_int *ipiv, double *b, lapack_int ldb)
lapack_int LAPACKE_cgbtrs (int matrix_layout, char trans, lapack_int n,
lapack_int kl, lapack_int ku, lapack_int nrhs, const
lapack_complex_float *ab, lapack_int ldab, const lapack_int *ipiv,
lapack_complex_float *b, lapack_int ldb)
lapack_int LAPACKE_zgbtrs (int matrix_layout, char trans, lapack_int n,
lapack_int kl, lapack_int ku, lapack_int nrhs, const
lapack_complex_double *ab, lapack_int ldab, const lapack_int *ipiv,
lapack_complex_double *b, lapack_int ldb)
<mint>gbtrf= factor,gbtrs</mint> = solve. the f and s at the end are literally telling you what's up — factor and solve, periodt. also peep the const on ab and ipiv in the gbtrs crew — they're read-only, don't even think about touching them 🙈
lapack_int LAPACKE_sgebak (int matrix_layout, char job, char side,
lapack_int n, lapack_int ilo, lapack_int ihi, const float *scale,
lapack_int m, float *v, lapack_int ldv)
lapack_int LAPACKE_dgebak (int matrix_layout, char job, char side,
lapack_int n, lapack_int ilo, lapack_int ihi, const double *scale,
lapack_int m, double *v, lapack_int ldv)
lapack_int LAPACKE_cgebak (int matrix_layout, char job, char side,
lapack_int n, lapack_int ilo, lapack_int ihi, const float *scale,
lapack_int m, lapack_complex_float *v, lapack_int ldv)
lapack_int LAPACKE_zgebak (int matrix_layout, char job, char side,
lapack_int n, lapack_int ilo, lapack_int ihi, const double *scale,
lapack_int m, lapack_complex_double *v, lapack_int ldv)
lapack_int LAPACKE_sgebal (int matrix_layout, char job, lapack_int n,
float *a, lapack_int lda, lapack_int *ilo, lapack_int *ihi, float
*scale)
lapack_int LAPACKE_dgebal (int matrix_layout, char job, lapack_int n,
double *a, lapack_int lda, lapack_int *ilo, lapack_int *ihi, double
*scale)
lapack_int LAPACKE_cgebal (int matrix_layout, char job, lapack_int n,
lapack_complex_float *a, lapack_int lda, lapack_int *ilo, lapack_int
*ihi, float *scale)
lapack_int LAPACKE_zgebal (int matrix_layout, char job, lapack_int n,
lapack_complex_double *a, lapack_int lda, lapack_int *ilo,
lapack_int *ihi, double *scale)
<cyan>gebak/gebal</cyan> are the balancing besties — ilo and ihi are everywhere, and note the complex versions keep scale as real (float / double) even when the matrix is complex. that's not a typo bestie, that's just how they roll ✨
lapack_int LAPACKE_sgebrd (int matrix_layout, lapack_int m, lapack_int
n, float *a, lapack_int lda, float *d, float *e, float *tauq, float
*taup)
lapack_int LAPACKE_dgebrd (int matrix_layout, lapack_int m, lapack_int
n, double *a, lapack_int lda, double *d, double *e, double *tauq,
double *taup)
lapack_int LAPACKE_cgebrd (int matrix_layout, lapack_int m, lapack_int
n, lapack_complex_float *a, lapack_int lda, float *d, float *e,
lapack_complex_float *tauq, lapack_complex_float *taup)
lapack_int LAPACKE_zgebrd (int matrix_layout, lapack_int m, lapack_int
n, lapack_complex_double *a, lapack_int lda, double *d, double *e,
lapack_complex_double *tauq, lapack_complex_double *taup)
lapack_int LAPACKE_sgecon (int matrix_layout, char norm, lapack_int n,
const float *a, lapack_int lda, float anorm, float *rcond)
lapack_int LAPACKE_dgecon (int matrix_layout, char norm, lapack_int n,
const double *a, lapack_int lda, double anorm, double *rcond)
lapack_int LAPACKE_cgecon (int matrix_layout, char norm, lapack_int n,
const lapack_complex_float *a, lapack_int lda, float anorm, float
*rcond)
lapack_int LAPACKE_zgecon (int matrix_layout, char norm, lapack_int n,
const lapack_complex_double *a, lapack_int lda, double anorm, double
*rcond)
<lavender>gebrdis bidiagonal-reduction core, withtauqandtaupbeing the cutest little tau pair you ever did see 🎀 andgeconis the condition-number checker —anormcomes in,rcondcomes out,norm` tells it which flavor. slay.
lapack_int LAPACKE_sgeequ (int matrix_layout, lapack_int m, lapack_int
n, const float *a, lapack_int lda, float *r, float *c, float
*rowcnd, float *colcnd, float *amax)
lapack_int LAPACKE_dgeequ (int matrix_layout, lapack_int m, lapack_int
n, const double *a, lapack_int lda, double *r, double *c, double
*rowcnd, double *colcnd, double *amax)
lapack_int LAPACKE_cgeequ (int matrix_layout, lapack_int m, lapack_int
n, const lapack_complex_float *a, lapack_int lda, float *r, float
*c, float *rowcnd, float *colcnd, float *amax)
lapack_int LAPACKE_zgeequ (int matrix_layout, lapack_int m, lapack_int
n, const lapack_complex_double *a, lapack_int lda, double *r, double
*c, double *rowcnd, double *colcnd, double *amax)
lapack_int LAPACKE_sgeequb (int matrix_layout, lapack_int m, lapack_int
n, const float *a, lapack_int lda, float *r, float *c, float
*rowcnd, float *colcnd, float *amax)
lapack_int LAPACKE_dgeequb (int matrix_layout, lapack_int m, lapack_int
n, const double *a, lapack_int lda, double *r, double *c, double
*rowcnd, double *colcnd, double *amax)
lapack_int LAPACKE_cgeequb (int matrix_layout, lapack_int m, lapack_int
n, const lapack_complex_float *a, lapack_int lda, float *r, float
*c, float *rowcnd, float *colcnd, float *amax)
lapack_int LAPACKE_zgeequb (int matrix_layout, lapack_int m, lapack_int
n, const lapack_complex_double *a, lapack_int lda, double *r, double
*c, double *rowcnd, double *colcnd, double *amax)
<yellow>geequandgeequb</yellow> are twins fr fr — same signature, and the extra b is the whole difference. both hand you r, c, rowcnd, colcnd, and amax, so you're never left guessing 💖
lapack_int LAPACKE_sgees (int matrix_layout, char jobvs, char sort,
LAPACK_S_SELECT2 select, lapack_int n, float *a, lapack_int lda,
lapack_int *sdim, float *wr, float *wi, float *vs, lapack_int ldvs)
lapack_int LAPACKE_dgees (int matrix_layout, char jobvs, char sort,
LAPACK_D_SELECT2 select, lapack_int n, double *a, lapack_int lda,
lapack_int *sdim, double *wr, double *wi, double *vs, lapack_int
ldvs)
lapack_int LAPACKE_cgees (int matrix_layout, char jobvs, char sort,
LAPACK_C_SELECT1 select, lapack_int n, lapack_complex_float *a,
lapack_int lda, lapack_int *sdim, lapack_complex_float *w,
lapack_complex_float *vs, lapack_int ldvs)
lapack_int LAPACKE_zgees (int matrix_layout, char jobvs, char sort,
LAPACK_Z_SELECT1 select, lapack_int n, lapack_complex_double *a,
lapack_int lda, lapack_int *sdim, lapack_complex_double *w,
lapack_complex_double *vs, lapack_int ldvs)
lapack_int LAPACKE_sgeesx (int matrix_layout, char jobvs, char sort,
LAPACK_S_SELECT2 select, char sense, lapack_int n, float *a,
lapack_int lda, lapack_int *sdim, float *wr, float *wi, float *vs,
lapack_int ldvs, float *rconde, float *rcondv)
lapack_int LAPACKE_dgeesx (int matrix_layout, char jobvs, char sort,
LAPACK_D_SELECT2 select, char sense, lapack_int n, double *a,
lapack_int lda, lapack_int *sdim, double *wr, double *wi, double
*vs, lapack_int ldvs, double *rconde, double *rcondv)
lapack_int LAPACKE_cgeesx (int matrix_layout, char jobvs, char sort,
LAPACK_C_SELECT1 select, char sense, lapack_int n,
lapack_complex_float *a, lapack_int lda, lapack_int *sdim,
lapack_complex_float *w, lapack_complex_float *vs, lapack_int ldvs,
float *rconde, float *rcondv)
the <rainbow>geesfamily is where theselectcallback enters the chat — notice the real versions takeLAPACK_S_SELECT2/LAPACK_D_SELECT2, the complex ones take LAPACK_C_SELECT1/LAPACK_Z_SELECT1. also the real geessplits intowrandwi, while complex just takes wand moves on 💅 and thegeesxversions addsenseplusrcondeandrcondv` — extra credit energy, we love to see it 👑
okay so the synopsis list keeps going and honestly it's the best part, it's just the whole cast showing up one by one 💅
✨ the eigenvalue girlies
first up is geesx, the fancy one — it takes a select function pointer (LAPACK_Z_SELECT1, no pressure bestie 🙈) and hands you back reciprocal condition numbers because she's thorough:
lapack_int LAPACKE_zgeesx (int matrix_layout, char jobvs, char sort,
LAPACK_Z_SELECT1 select, char sense, lapack_int n,
lapack_complex_double *a, lapack_int lda, lapack_int *sdim,
lapack_complex_double *w, lapack_complex_double *vs, lapack_int
ldvs, double *rconde, double *rcondv)
then geev, in the classic four-flavour lineup 🍦 — s for float, d for double, c for lapack_complex_float, z for lapack_complex_double, and the real ones split the eigenvalues into wr + wi because that's just how it is:
lapack_int LAPACKE_sgeev (int matrix_layout, char jobvl, char jobvr,
lapack_int n, float *a, lapack_int lda, float *wr, float *wi, float
*vl, lapack_int ldvl, float *vr, lapack_int ldvr)
lapack_int LAPACKE_dgeev (int matrix_layout, char jobvl, char jobvr,
lapack_int n, double *a, lapack_int lda, double *wr, double *wi,
double *vl, lapack_int ldvl, double *vr, lapack_int ldvr)
lapack_int LAPACKE_cgeev (int matrix_layout, char jobvl, char jobvr,
lapack_int n, lapack_complex_float *a, lapack_int lda,
lapack_complex_float *w, lapack_complex_float *vl, lapack_int ldvl,
lapack_complex_float *vr, lapack_int ldvr)
lapack_int LAPACKE_zgeev (int matrix_layout, char jobvl, char jobvr,
lapack_int n, lapack_complex_double *a, lapack_int lda,
lapack_complex_double *w, lapack_complex_double *vl, lapack_int
ldvl, lapack_complex_double *vr, lapack_int ldvr)
and geevx is geev's overachieving big sister — same energy plus balanc, sense, ilo, ihi, scale, abnrm, rconde, rcondv. she does everything:
lapack_int LAPACKE_sgeevx (int matrix_layout, char balanc, char jobvl,
char jobvr, char sense, lapack_int n, float *a, lapack_int lda,
float *wr, float *wi, float *vl, lapack_int ldvl, float *vr,
lapack_int ldvr, lapack_int *ilo, lapack_int *ihi, float *scale,
float *abnrm, float *rconde, float *rcondv)
lapack_int LAPACKE_dgeevx (int matrix_layout, char balanc, char jobvl,
char jobvr, char sense, lapack_int n, double *a, lapack_int lda,
double *wr, double *wi, double *vl, lapack_int ldvl, double *vr,
lapack_int ldvr, lapack_int *ilo, lapack_int *ihi, double *scale,
double *abnrm, double *rconde, double *rcondv)
lapack_int LAPACKE_cgeevx (int matrix_layout, char balanc, char jobvl,
char jobvr, char sense, lapack_int n, lapack_complex_float *a,
lapack_int lda, lapack_complex_float *w, lapack_complex_float *vl,
lapack_int ldvl, lapack_complex_float *vr, lapack_int ldvr,
lapack_int *ilo, lapack_int *ihi, float *scale, float *abnrm, float
*rconde, float *rcondv)
lapack_int LAPACKE_zgeevx (int matrix_layout, char balanc, char jobvl,
char jobvr, char sense, lapack_int n, lapack_complex_double *a,
lapack_int lda, lapack_complex_double *w, lapack_complex_double *vl,
lapack_int ldvl, lapack_complex_double *vr, lapack_int ldvr,
lapack_int *ilo, lapack_int *ihi, double *scale, double *abnrm,
double *rconde, double *rcondv)
🦋 gehrd — the Hessenberg glow-up
four of them, all taking ilo + ihi + a tau array, no notes:
lapack_int LAPACKE_sgehrd (int matrix_layout, lapack_int n, lapack_int
ilo, lapack_int ihi, float *a, lapack_int lda, float *tau)
lapack_int LAPACKE_dgehrd (int matrix_layout, lapack_int n, lapack_int
ilo, lapack_int ihi, double *a, lapack_int lda, double *tau)
lapack_int LAPACKE_cgehrd (int matrix_layout, lapack_int n, lapack_int
ilo, lapack_int ihi, lapack_complex_float *a, lapack_int lda,
lapack_complex_float *tau)
lapack_int LAPACKE_zgehrd (int matrix_layout, lapack_int n, lapack_int
ilo, lapack_int ihi, lapack_complex_double *a, lapack_int lda,
lapack_complex_double *tau)
👑 gejsv — Jacobi SVD, main character energy
look at all those job chars: joba, jobu, jobv, jobr, jobt, jobp. six whole jobs, she's booked and busy 😭 also stat (float/double array) and istat (lapack_int array):
lapack_int LAPACKE_sgejsv (int matrix_layout, char joba, char jobu, char
jobv, char jobr, char jobt, char jobp, lapack_int m, lapack_int n,
float *a, lapack_int lda, float *sva, float *u, lapack_int ldu,
float *v, lapack_int ldv, float *stat, lapack_int *istat)
lapack_int LAPACKE_dgejsv (int matrix_layout, char joba, char jobu, char
jobv, char jobr, char jobt, char jobp, lapack_int m, lapack_int n,
double *a, lapack_int lda, double *sva, double *u, lapack_int ldu,
double *v, lapack_int ldv, double *stat, lapack_int *istat)
lapack_int LAPACKE_cgejsv (int matrix_layout, char joba, char jobu, char
jobv, char jobr, char jobt, char jobp, lapack_int m, lapack_int n,
lapack_complex_float *a, lapack_int lda, float *sva,
lapack_complex_float *u, lapack_int ldu, lapack_complex_float *v,
lapack_int ldv, float *stat, lapack_int *istat)
lapack_int LAPACKE_zgejsv (int matrix_layout, char joba, char jobu, char
jobv, char jobr, char jobt, char jobp, lapack_int m, lapack_int n,
lapack_complex_double *a, lapack_int lda, double *sva,
lapack_complex_double *u, lapack_int ldu, lapack_complex_double *v,
lapack_int ldv, double *stat, lapack_int *istat)
🎀 LQ era: gelq2 and gelqf
gelq2 is the little one, gelqf is the blocked one — both keep it simple with m, n, a, lda, tau:
lapack_int LAPACKE_sgelq2 (int matrix_layout, lapack_int m, lapack_int
n, float *a, lapack_int lda, float *tau)
lapack_int LAPACKE_dgelq2 (int matrix_layout, lapack_int m, lapack_int
n, double *a, lapack_int lda, double *tau)
lapack_int LAPACKE_cgelq2 (int matrix_layout, lapack_int m, lapack_int
n, lapack_complex_float *a, lapack_int lda, lapack_complex_float
*tau)
lapack_int LAPACKE_zgelq2 (int matrix_layout, lapack_int m, lapack_int
n, lapack_complex_double *a, lapack_int lda, lapack_complex_double
*tau)
lapack_int LAPACKE_sgelqf (int matrix_layout, lapack_int m, lapack_int
n, float *a, lapack_int lda, float *tau)
lapack_int LAPACKE_dgelqf (int matrix_layout, lapack_int m, lapack_int
n, double *a, lapack_int lda, double *tau)
lapack_int LAPACKE_cgelqf (int matrix_layout, lapack_int m, lapack_int
n, lapack_complex_float *a, lapack_int lda, lapack_complex_float
*tau)
lapack_int LAPACKE_zgelqf (int matrix_layout, lapack_int m, lapack_int
n, lapack_complex_double *a, lapack_int lda, lapack_complex_double
*tau)
💖 least-squares squad assemble
gels is the basic baddie — trans, m, n, nrhs, a/lda, b/ldb, that's the whole vibe:
lapack_int LAPACKE_sgels (int matrix_layout, char trans, lapack_int m,
lapack_int n, lapack_int nrhs, float *a, lapack_int lda, float *b,
lapack_int ldb)
lapack_int LAPACKE_dgels (int matrix_layout, char trans, lapack_int m,
lapack_int n, lapack_int nrhs, double *a, lapack_int lda, double *b,
lapack_int ldb)
lapack_int LAPACKE_cgels (int matrix_layout, char trans, lapack_int m,
lapack_int n, lapack_int nrhs, lapack_complex_float *a, lapack_int
lda, lapack_complex_float *b, lapack_int ldb)
lapack_int LAPACKE_zgels (int matrix_layout, char trans, lapack_int m,
lapack_int n, lapack_int nrhs, lapack_complex_double *a, lapack_int
lda, lapack_complex_double *b, lapack_int ldb)
gelsd brings s, rcond and rank to the party — note the real rcond type matches the precision (float for s, double for d):
lapack_int LAPACKE_sgelsd (int matrix_layout, lapack_int m, lapack_int
n, lapack_int nrhs, float *a, lapack_int lda, float *b, lapack_int
ldb, float *s, float rcond, lapack_int *rank)
lapack_int LAPACKE_dgelsd (int matrix_layout, lapack_int m, lapack_int
n, lapack_int nrhs, double *a, lapack_int lda, double *b, lapack_int
ldb, double *s, double rcond, lapack_int *rank)
lapack_int LAPACKE_cgelsd (int matrix_layout, lapack_int m, lapack_int
n, lapack_int nrhs, lapack_complex_float *a, lapack_int lda,
lapack_complex_float *b, lapack_int ldb, float *s, float rcond,
lapack_int *rank)
lapack_int LAPACKE_zgelsd (int matrix_layout, lapack_int m, lapack_int
n, lapack_int nrhs, lapack_complex_double *a, lapack_int lda,
lapack_complex_double *b, lapack_int ldb, double *s, double rcond,
lapack_int *rank)
gelss — same shape, also s / rcond / rank:
lapack_int LAPACKE_sgelss (int matrix_layout, lapack_int m, lapack_int
n, lapack_int nrhs, float *a, lapack_int lda, float *b, lapack_int
ldb, float *s, float rcond, lapack_int *rank)
lapack_int LAPACKE_dgelss (int matrix_layout, lapack_int m, lapack_int
n, lapack_int nrhs, double *a, lapack_int lda, double *b, lapack_int
ldb, double *s, double rcond, lapack_int *rank)
lapack_int LAPACKE_cgelss (int matrix_layout, lapack_int m, lapack_int
n, lapack_int nrhs, lapack_complex_float *a, lapack_int lda,
lapack_complex_float *b, lapack_int ldb, float *s, float rcond,
lapack_int *rank)
lapack_int LAPACKE_zgelss (int matrix_layout, lapack_int m, lapack_int
n, lapack_int nrhs, lapack_complex_double *a, lapack_int lda,
lapack_complex_double *b, lapack_int ldb, double *s, double rcond,
lapack_int *rank)
and gelsy is the one with jpvt — pivoting queen 👑:
lapack_int LAPACKE_sgelsy (int matrix_layout, lapack_int m, lapack_int
n, lapack_int nrhs, float *a, lapack_int lda, float *b, lapack_int
ldb, lapack_int *jpvt, float rcond, lapack_int *rank)
lapack_int LAPACKE_dgelsy (int matrix_layout, lapack_int m, lapack_int
n, lapack_int nrhs, double *a, lapack_int lda, double *b, lapack_int
ldb, lapack_int *jpvt, double rcond, lapack_int *rank)
lapack_int LAPACKE_cgelsy (int matrix_layout, lapack_int m, lapack_int
n, lapack_int nrhs, lapack_complex_float *a, lapack_int lda,
lapack_complex_float *b, lapack_int ldb, lapack_int *jpvt, float
rcond, lapack_int *rank)
lapack_int LAPACKE_zgelsy (int matrix_layout, lapack_int m, lapack_int
n, lapack_int nrhs, lapack_complex_double *a, lapack_int lda,
lapack_complex_double *b, lapack_int ldb, lapack_int *jpvt, double
rcond, lapack_int *rank)
🌸 QL + QR corner
geqlf, four flavours, same m/n/a/lda/tau little formula:
lapack_int LAPACKE_sgeqlf (int matrix_layout, lapack_int m, lapack_int
n, float *a, lapack_int lda, float *tau)
lapack_int LAPACKE_dgeqlf (int matrix_layout, lapack_int m, lapack_int
n, double *a, lapack_int lda, double *tau)
lapack_int LAPACKE_cgeqlf (int matrix_layout, lapack_int m, lapack_int
n, lapack_complex_float *a, lapack_int lda, lapack_complex_float
*tau)
lapack_int LAPACKE_zgeqlf (int matrix_layout, lapack_int m, lapack_int
n, lapack_complex_double *a, lapack_int lda, lapack_complex_double
*tau)
geqp3 and geqpf, the pivoted QR twins — both rock jpvt alongside tau:
lapack_int LAPACKE_sgeqp3 (int matrix_layout, lapack_int m, lapack_int
n, float *a, lapack_int lda, lapack_int *jpvt, float *tau)
lapack_int LAPACKE_dgeqp3 (int matrix_layout, lapack_int m, lapack_int
n, double *a, lapack_int lda, lapack_int *jpvt, double *tau)
lapack_int LAPACKE_cgeqp3 (int matrix_layout, lapack_int m, lapack_int
n, lapack_complex_float *a, lapack_int lda, lapack_int *jpvt,
lapack_complex_float *tau)
lapack_int LAPACKE_zgeqp3 (int matrix_layout, lapack_int m, lapack_int
n, lapack_complex_double *a, lapack_int lda, lapack_int *jpvt,
lapack_complex_double *tau)
lapack_int LAPACKE_sgeqpf (int matrix_layout, lapack_int m, lapack_int
n, float *a, lapack_int lda, lapack_int *jpvt, float *tau)
lapack_int LAPACKE_dgeqpf (int matrix_layout, lapack_int m, lapack_int
n, double *a, lapack_int lda, lapack_int *jpvt, double *tau)
lapack_int LAPACKE_cgeqpf (int matrix_layout, lapack_int m, lapack_int
n, lapack_complex_float *a, lapack_int lda, lapack_int *jpvt,
lapack_complex_float *tau)
lapack_int LAPACKE_zgeqpf (int matrix_layout, lapack_int m, lapack_int
n, lapack_complex_double *a, lapack_int lda, lapack_int *jpvt,
lapack_complex_double *tau)
and geqr2 starts the unblocked QR crew — this part only gets as far as s and d before the page cuts off, so don't come for me, more is coming 🫶:
lapack_int LAPACKE_sgeqr2 (int matrix_layout, lapack_int m, lapack_int
n, float *a, lapack_int lda, float *tau)
lapack_int LAPACKE_dgeqr2 (int matrix_layout, lapack_int m, lapack_int
n, double *a, lapack_int lda, double *tau)
okay so like — we're still in the SYNOPSIS bestie, and it's giving phone book 😭. Every single one of these is a lapack_int-returning function, all of them take matrix_layout first, and the letter in front is the whole personality:
s→floateverything, single precision, baby's first ✨d→double, double the precision, double the vibesc→lapack_complex_float, complex single, imaginary bestie 💜z→lapack_complex_double, complex double, the iconic one 👑
🎀 the geqr2 / geqrf / geqrfp girlies (QR housekeeping)
lapack_int LAPACKE_cgeqr2 (int matrix_layout, lapack_int m, lapack_int n, lapack_complex_float *a, lapack_int lda, lapack_complex_float *tau)
lapack_int LAPACKE_zgeqr2 (int matrix_layout, lapack_int m, lapack_int n, lapack_complex_double *a, lapack_int lda, lapack_complex_double *tau)
lapack_int LAPACKE_sgeqrf (int matrix_layout, lapack_int m, lapack_int n, float *a, lapack_int lda, float *tau)
lapack_int LAPACKE_dgeqrf (int matrix_layout, lapack_int m, lapack_int n, double *a, lapack_int lda, double *tau)
lapack_int LAPACKE_cgeqrf (int matrix_layout, lapack_int m, lapack_int n, lapack_complex_float *a, lapack_int lda, lapack_complex_float *tau)
lapack_int LAPACKE_zgeqrf (int matrix_layout, lapack_int m, lapack_int n, lapack_complex_double *a, lapack_int lda, lapack_complex_double *tau)
lapack_int LAPACKE_sgeqrfp (int matrix_layout, lapack_int m, lapack_int n, float *a, lapack_int lda, float *tau)
lapack_int LAPACKE_dgeqrfp (int matrix_layout, lapack_int m, lapack_int n, double *a, lapack_int lda, double *tau)
lapack_int LAPACKE_cgeqrfp (int matrix_layout, lapack_int m, lapack_int n, lapack_complex_float *a, lapack_int lda, lapack_complex_float *tau)
lapack_int LAPACKE_zgeqrfp (int matrix_layout, lapack_int m, lapack_int n, lapack_complex_double *a, lapack_int lda, lapack_complex_double *tau)
like, note how geqr2 is only chillin' in c and z flavours here, no cap 🫶. The geqrf and geqrfp crews are full sets — s, d, c, z — all of them sharing the same shape: m, n, the matrix a with leading dimension lda, and that tau output. Same skeleton, different skin 💅.
🦋 gerfs + gerfsx (the error-margin girlies)
lapack_int LAPACKE_sgerfs (int matrix_layout, char trans, lapack_int n, lapack_int nrhs, const float *a, lapack_int lda, const float *af, lapack_int ldaf, const lapack_int *ipiv, const float *b, lapack_int ldb, float *x, lapack_int ldx, float *ferr, float *berr)
lapack_int LAPACKE_dgerfs (int matrix_layout, char trans, lapack_int n, lapack_int nrhs, const double *a, lapack_int lda, const double *af, lapack_int ldaf, const lapack_int *ipiv, const double *b, lapack_int ldb, double *x, lapack_int ldx, double *ferr, double *berr)
lapack_int LAPACKE_cgerfs (int matrix_layout, char trans, lapack_int n, lapack_int nrhs, const lapack_complex_float *a, lapack_int lda, const lapack_complex_float *af, lapack_int ldaf, const lapack_int *ipiv, const lapack_complex_float *b, lapack_int ldb, lapack_complex_float *x, lapack_int ldx, float *ferr, float *berr)
lapack_int LAPACKE_zgerfs (int matrix_layout, char trans, lapack_int n, lapack_int nrhs, const lapack_complex_double *a, lapack_int lda, const lapack_complex_double *af, lapack_int ldaf, const lapack_int *ipiv, const lapack_complex_double *b, lapack_int ldb, lapack_complex_double *x, lapack_int ldx, double *ferr, double *berr)
okay so the vibe check on these: a and af and b and ipiv are all const (they're read-only, she's not gonna touch your data, respectful queen 🌸), while x, ferr and berr are outputs. And notice the c/z ones still take real float/double for ferr and berr — error bounds are always real bestie, that's just how it is 💀.
Now the x versions, where the user gets extra:
lapack_int LAPACKE_sgerfsx (int matrix_layout, char trans, char equed, lapack_int n, lapack_int nrhs, const float *a, lapack_int lda, const float *af, lapack_int ldaf, const lapack_int *ipiv, const float *r, const float *c, const float *b, lapack_int ldb, float *x, lapack_int ldx, float *rcond, float *berr, lapack_int n_err_bnds, float *err_bnds_norm, float *err_bnds_comp, lapack_int nparams, float *params)
lapack_int LAPACKE_dgerfsx (int matrix_layout, char trans, char equed, lapack_int n, lapack_int nrhs, const double *a, lapack_int lda, const double *af, lapack_int ldaf, const lapack_int *ipiv, const double *r, const double *c, const double *b, lapack_int ldb, double *x, lapack_int ldx, double *rcond, double *berr, lapack_int n_err_bnds, double *err_bnds_norm, double *err_bnds_comp, lapack_int nparams, double *params)
lapack_int LAPACKE_cgerfsx (int matrix_layout, char trans, char equed, lapack_int n, lapack_int nrhs, const lapack_complex_float *a, lapack_int lda, const lapack_complex_float *af, lapack_int ldaf, const lapack_int *ipiv, const float *r, const float *c, const lapack_complex_float *b, lapack_int ldb, lapack_complex_float *x, lapack_int ldx, float *rcond, float *berr, lapack_int n_err_bnds, float *err_bnds_norm, float *err_bnds_comp, lapack_int nparams, float *params)
lapack_int LAPACKE_zgerfsx (int matrix_layout, char trans, char equed, lapack_int n, lapack_int nrhs, const lapack_complex_double *a, lapack_int lda, const lapack_complex_double *af, lapack_int ldaf, const lapack_int *ipiv, const double *r, const double *c, const lapack_complex_double *b, lapack_int ldb, lapack_complex_double *x, lapack_int ldx, double *rcond, double *berr, lapack_int n_err_bnds, double *err_bnds_norm, double *err_bnds_comp, lapack_int nparams, double *params)
not the char equed 😭 and then r, c, rcond, berr, n_err_bnds, err_bnds_norm, err_bnds_comp, nparams, params — like she brought her whole friend group to the function call. obsessed. Note r and c are real arrays even in c/z, and rcond/berr/err_bnds_norm/err_bnds_comp/params are real too. Only a, af, b, x go complex. Periodt.
🍓 gerqf (RQ era)
lapack_int LAPACKE_sgerqf (int matrix_layout, lapack_int m, lapack_int n, float *a, lapack_int lda, float *tau)
lapack_int LAPACKE_dgerqf (int matrix_layout, lapack_int m, lapack_int n, double *a, lapack_int lda, double *tau)
lapack_int LAPACKE_cgerqf (int matrix_layout, lapack_int m, lapack_int n, lapack_complex_float *a, lapack_int lda, lapack_complex_float *tau)
lapack_int LAPACKE_zgerqf (int matrix_layout, lapack_int m, lapack_int n, lapack_complex_double *a, lapack_int lda, lapack_complex_double *tau)
exact same silhouette as geqrf — m, n, a, lda, tau. One letter different, whole different factorization, slay ✨.
💀 gesdd (the drama one)
lapack_int LAPACKE_sgesdd (int matrix_layout, char jobz, lapack_int m, lapack_int n, float *a, lapack_int lda, float *s, float *u, lapack_int ldu, float *vt, lapack_int ldvt)
lapack_int LAPACKE_dgesdd (int matrix_layout, char jobz, lapack_int m, lapack_int n, double *a, lapack_int lda, double *s, double *u, lapack_int ldu, double *vt, lapack_int ldvt)
lapack_int LAPACKE_cgesdd (int matrix_layout, char jobz, lapack_int m, lapack_int n, lapack_complex_float *a, lapack_int lda, float *s, lapack_complex_float *u, lapack_int ldu, lapack_complex_float *vt, lapack_int ldvt)
lapack_int LAPACKE_zgesdd (int matrix_layout, char jobz, lapack_int m, lapack_int n, lapack_complex_double *a, lapack_int lda, double *s, lapack_complex_double *u, lapack_int ldu, lapack_complex_double *vt, lapack_int ldvt)
jobz is a char, bestie, so she's making a decision for you 👑. And look — s is real (float/double) always, even when u and vt are complex. singular values stay real, that's the law 💅.
🔥 gesv + the iter girls
lapack_int LAPACKE_sgesv (int matrix_layout, lapack_int n, lapack_int nrhs, float *a, lapack_int lda, lapack_int *ipiv, float *b, lapack_int ldb)
lapack_int LAPACKE_dgesv (int matrix_layout, lapack_int n, lapack_int nrhs, double *a, lapack_int lda, lapack_int *ipiv, double *b, lapack_int ldb)
lapack_int LAPACKE_cgesv (int matrix_layout, lapack_int n, lapack_int nrhs, lapack_complex_float *a, lapack_int lda, lapack_int *ipiv, lapack_complex_float *b, lapack_int ldb)
lapack_int LAPACKE_zgesv (int matrix_layout, lapack_int n, lapack_int nrhs, lapack_complex_double *a, lapack_int lda, lapack_int *ipiv, lapack_complex_double *b, lapack_int ldb)
lapack_int LAPACKE_dsgesv (int matrix_layout, lapack_int n, lapack_int nrhs, double *a, lapack_int lda, lapack_int *ipiv, double *b, lapack_int ldb, double *x, lapack_int ldx, lapack_int *iter)
lapack_int LAPACKE_zcgesv (int matrix_layout, lapack_int n, lapack_int nrhs, lapack_complex_double *a, lapack_int lda, lapack_int *ipiv, lapack_complex_double *b, lapack_int ldb, lapack_complex_double *x, lapack_int ldx, lapack_int *iter)
the plain four are tidy little icons: n, nrhs, a, lda, ipiv, b, ldb. Then dsgesv and zcgesv show up with extra bags — a separate x with its own ldx, plus lapack_int *iter. iykyk 🧚
🌈 gesvd (the one with superb, yes really)
lapack_int LAPACKE_sgesvd (int matrix_layout, char jobu, char jobvt, lapack_int m, lapack_int n, float *a, lapack_int lda, float *s, float *u, lapack_int ldu, float *vt, lapack_int ldvt, float *superb)
lapack_int LAPACKE_dgesvd (int matrix_layout, char jobu, char jobvt, lapack_int m, lapack_int n, double *a, lapack_int lda, double *s, double *u, lapack_int ldu, double *vt, lapack_int ldvt, double *superb)
lapack_int LAPACKE_cgesvd (int matrix_layout, char jobu, char jobvt, lapack_int m, lapack_int n, lapack_complex_float *a, lapack_int lda, float *s, lapack_complex_float *u, lapack_int ldu, lapack_complex_float *vt, lapack_int ldvt, float *superb)
lapack_int LAPACKE_zgesvd (int matrix_layout, char jobu, char jobvt, lapack_int m, lapack_int n, lapack_complex_double *a, lapack_int lda, double *s, lapack_complex_double *u, lapack_int ldu, lapack_complex_double *vt, lapack_int ldvt, double *superb)
two job chars this time — jobu and jobvt — because both sides get a say 💖. And then there's a parameter literally named superb at the end. no notes. perfection. she's the main character 🎀
⭐ gesvdx (range girlie)
lapack_int LAPACKE_sgesvdx (int matrix_layout, char jobu, char jobvt, char range, lapack_int m, lapack_int n, float *a, lapack_int lda, float vl, float vu, lapack_int il, lapack_int iu, lapack_int *ns, float *s, float *u, lapack_int ldu, float *vt, lapack_int ldvt, lapack_int *superb)
lapack_int LAPACKE_dgesvdx (int matrix_layout, char jobu, char jobvt, char range, lapack_int m, lapack_int n, double *a, lapack_int lda, double vl, double vu, lapack_int il, lapack_int iu, lapack_int *ns, double *s, double *u, lapack_int ldu, double *vt, lapack_int ldvt, lapack_int *superb)
lapack_int LAPACKE_cgesvdx (int matrix_layout, char jobu, char jobvt, char range, lapack_int m, lapack_int n, lapack_complex_float *a, lapack_int lda, float vl, float vu, lapack_int il, lapack_int iu, lapack_int *ns, float *s, lapack_complex_float *u, lapack_int ldu, lapack_complex_float *vt, lapack_int ldvt, lapack_int *superb)
lapack_int LAPACKE_zgesvdx (int matrix_layout, char jobu, char jobvt, char range, lapack_int m, lapack_int n, lapack_complex_double *a, lapack_int lda, double vl, double vu, lapack_int il, lapack_int iu, lapack_int *ns, double *s, lapack_complex_double *u, lapack_int ldu, lapack_complex_double *vt, lapack_int ldvt, lapack_int *superb)
three chars now: jobu, jobvt, range. and superb got promoted from float * to lapack_int * in this family — glow up 🔥. also vl, vu, il, iu all show up, plus ns as an output.
🧚 gesvj (j is for joy)
lapack_int LAPACKE_sgesvj (int matrix_layout, char joba, char jobu, char jobv, lapack_int m, lapack_int n, float *a, lapack_int lda, float *sva, lapack_int mv, float *v, lapack_int ldv, float *stat)
lapack_int LAPACKE_dgesvj (int matrix_layout, char joba, char jobu, char jobv, lapack_int m, lapack_int n, double *a, lapack_int lda, double *sva, lapack_int mv, double *v, lapack_int ldv, double *stat)
lapack_int LAPACKE_cgesvj (int matrix_layout, char joba, char jobu, char jobv, lapack_int m, lapack_int n, lapack_complex_float *a, lapack_int lda, float *sva, lapack_int mv, lapack_complex_float *v, lapack_int ldv, float *stat)
lapack_int LAPACKE_zgesvj (int matrix_layout, char joba, char jobu, char jobv, lapack_int m, lapack_int n, lapack_complex_double *a, lapack_int lda, double *sva, lapack_int mv, lapack_complex_double *v, lapack_int ldv, double *stat)
three job chars — joba, jobu, jobv — plus sva, mv, v, ldv, stat. Also note stat is always real, and sva is always real. the complex only lives in a and v. consistency is so attractive honestly 💜
🫶 gesvx (we're getting to the end of this chunk)
lapack_int LAPACKE_sgesvx (int matrix_layout, char fact, char trans, lapack_int n, lapack_int nrhs, float *a, lapack_int lda, float *af, lapack_int ldaf, lapack_int *ipiv, char *equed, float *r, float *c, float *b, lapack_int ldb, float *x, lapack_int ldx, float *rcond, float *ferr, float *berr, float *rpivot)
lapack_int LAPACKE_dgesvx (int matrix_layout, char fact, char trans, lapack_int n, lapack_int nrhs, double *a, lapack_int lda, double *af, lapack_int ldaf, lapack_int *ipiv, char *equed, double *r,
and yes she's still going — LAPACKE_dgesvx got cut off right after that double *r, and the rest of the alphabet soup is coming at you in the next chunk 😭🫶 don't panic, we'll pick it right back up.
...and the gesvx saga wraps up with the complex homies 👑 same fact/trans energy, same equed, r, c, b, x, rcond, ferr, berr lineup — just swap float for lapack_complex_float and double for lapack_complex_double, and note both of these end in the *rpivot argument:
lapack_int LAPACKE_cgesvx (int matrix_layout, char fact, char trans,
lapack_int n, lapack_int nrhs, lapack_complex_float *a, lapack_int
lda, lapack_complex_float *af, lapack_int ldaf, lapack_int *ipiv,
char *equed, float *r, float *c, lapack_complex_float *b, lapack_int
ldb, lapack_complex_float *x, lapack_int ldx, float *rcond, float
*ferr, float *berr, float *rpivot)
lapack_int LAPACKE_zgesvx (int matrix_layout, char fact, char trans,
lapack_int n, lapack_int nrhs, lapack_complex_double *a, lapack_int
lda, lapack_complex_double *af, lapack_int ldaf, lapack_int *ipiv,
char *equed, double *r, double *c, lapack_complex_double *b,
lapack_int ldb, lapack_complex_double *x, lapack_int ldx, double
*rcond, double *ferr, double *berr, double *rpivot)
🌈 the gesvxx girls — extra, expert, unbothered
Okay bestie, gesvxx is literally gesvx but with ✨more✨ — you get rpvgrw, plus n_err_bnds, err_bnds_norm, err_bnds_comp, nparams and params riding along. All four precisions, all four showing up:
lapack_int LAPACKE_sgesvxx (int matrix_layout, char fact, char trans,
lapack_int n, lapack_int nrhs, float *a, lapack_int lda, float *af,
lapack_int ldaf, lapack_int *ipiv, char *equed, float *r, float *c,
float *b, lapack_int ldb, float *x, lapack_int ldx, float *rcond,
float *rpvgrw, float *berr, lapack_int n_err_bnds, float
*err_bnds_norm, float *err_bnds_comp, lapack_int nparams, float
*params)
lapack_int LAPACKE_dgesvxx (int matrix_layout, char fact, char trans,
lapack_int n, lapack_int nrhs, double *a, lapack_int lda, double
*af, lapack_int ldaf, lapack_int *ipiv, char *equed, double *r,
double *c, double *b, lapack_int ldb, double *x, lapack_int ldx,
double *rcond, double *rpvgrw, double *berr, lapack_int n_err_bnds,
double *err_bnds_norm, double *err_bnds_comp, lapack_int nparams,
double *params)
lapack_int LAPACKE_cgesvxx (int matrix_layout, char fact, char trans,
lapack_int n, lapack_int nrhs, lapack_complex_float *a, lapack_int
lda, lapack_complex_float *af, lapack_int ldaf, lapack_int *ipiv,
char *equed, float *r, float *c, lapack_complex_float *b, lapack_int
ldb, lapack_complex_float *x, lapack_int ldx, float *rcond, float
*rpvgrw, float *berr, lapack_int n_err_bnds, float *err_bnds_norm,
float *err_bnds_comp, lapack_int nparams, float *params)
lapack_int LAPACKE_zgesvxx (int matrix_layout, char fact, char trans,
lapack_int n, lapack_int nrhs, lapack_complex_double *a, lapack_int
lda, lapack_complex_double *af, lapack_int ldaf, lapack_int *ipiv,
char *equed, double *r, double *c, lapack_complex_double *b,
lapack_int ldb, lapack_complex_double *x, lapack_int ldx, double
*rcond, double *rpvgrw, double *berr, lapack_int n_err_bnds, double
*err_bnds_norm, double *err_bnds_comp, lapack_int nparams, double
*params)
Lowkey obsessed with howsgesvxxanddgesvxxtakerandcasfloat/double, but if you're complex (c,z) thenrandcare still real — bestie the scaling factors never go complex. That's just what's written, don't come for me 💅
🎀 getf2 — the baby LU
Smallest of the factorization girlies. m, n, a, lda, ipiv, done. Four flavors, one vibe:
lapack_int LAPACKE_sgetf2 (int matrix_layout, lapack_int m, lapack_int
n, float *a, lapack_int lda, lapack_int *ipiv)
lapack_int LAPACKE_dgetf2 (int matrix_layout, lapack_int m, lapack_int
n, double *a, lapack_int lda, lapack_int *ipiv)
lapack_int LAPACKE_cgetf2 (int matrix_layout, lapack_int m, lapack_int
n, lapack_complex_float *a, lapack_int lda, lapack_int *ipiv)
lapack_int LAPACKE_zgetf2 (int matrix_layout, lapack_int m, lapack_int
n, lapack_complex_double *a, lapack_int lda, lapack_int *ipiv)
🔥 getrf — the main character of LU
Same five arguments as getf2, but this is the one everybody actually calls. Blocked, iconic, no notes:
lapack_int LAPACKE_sgetrf (int matrix_layout, lapack_int m, lapack_int
n, float *a, lapack_int lda, lapack_int *ipiv)
lapack_int LAPACKE_dgetrf (int matrix_layout, lapack_int m, lapack_int
n, double *a, lapack_int lda, lapack_int *ipiv)
lapack_int LAPACKE_cgetrf (int matrix_layout, lapack_int m, lapack_int
n, lapack_complex_float *a, lapack_int lda, lapack_int *ipiv)
lapack_int LAPACKE_zgetrf (int matrix_layout, lapack_int m, lapack_int
n, lapack_complex_double *a, lapack_int lda, lapack_int *ipiv)
🦋 getrf2 — the recursive remix
Yeah she's back with the exact same signature list. Not a typo, that's genuinely the whole bit:
lapack_int LAPACKE_sgetrf2 (int matrix_layout, lapack_int m, lapack_int
n, float *a, lapack_int lda, lapack_int *ipiv)
lapack_int LAPACKE_dgetrf2 (int matrix_layout, lapack_int m, lapack_int
n, double *a, lapack_int lda, lapack_int *ipiv)
lapack_int LAPACKE_cgetrf2 (int matrix_layout, lapack_int m, lapack_int
n, lapack_complex_float *a, lapack_int lda, lapack_int *ipiv)
lapack_int LAPACKE_zgetrf2 (int matrix_layout, lapack_int m, lapack_int
n, lapack_complex_double *a, lapack_int lda, lapack_int *ipiv)
💜 getri — inverse o'clock
Now we're undoing the factor. n, a, lda, and the ipiv you saved — and heads up, it's const lapack_int *ipiv here, she's read-only now, respectful queen:
lapack_int LAPACKE_sgetri (int matrix_layout, lapack_int n, float *a,
lapack_int lda, const lapack_int *ipiv)
lapack_int LAPACKE_dgetri (int matrix_layout, lapack_int n, double *a,
lapack_int lda, const lapack_int *ipiv)
lapack_int LAPACKE_cgetri (int matrix_layout, lapack_int n,
lapack_complex_float *a, lapack_int lda, const lapack_int *ipiv)
lapack_int LAPACKE_zgetri (int matrix_layout, lapack_int n,
lapack_complex_double *a, lapack_int lda, const lapack_int *ipiv)
🌸 getrs — solve with the factor you already have
trans, n, nrhs, const matrix a, lda, const ipiv, then b at ldb. Note that a and ipiv are both const — you're not touching them, you're just vibing off them:
lapack_int LAPACKE_sgetrs (int matrix_layout, char trans, lapack_int n,
lapack_int nrhs, const float *a, lapack_int lda, const lapack_int
*ipiv, float *b, lapack_int ldb)
lapack_int LAPACKE_dgetrs (int matrix_layout, char trans, lapack_int n,
lapack_int nrhs, const double *a, lapack_int lda, const lapack_int
*ipiv, double *b, lapack_int ldb)
lapack_int LAPACKE_cgetrs (int matrix_layout, char trans, lapack_int n,
lapack_int nrhs, const lapack_complex_float *a, lapack_int lda,
const lapack_int *ipiv, lapack_complex_float *b, lapack_int ldb)
lapack_int LAPACKE_zgetrs (int matrix_layout, char trans, lapack_int n,
lapack_int nrhs, const lapack_complex_double *a, lapack_int lda,
const lapack_int *ipiv, lapack_complex_double *b, lapack_int ldb)
🧚 the gg cinematic universe begins
Generalized eigenvalue problems, bestie. Buckle up, this is a whole franchise.
ggbak — the un-balancing glow-up
job, side, n, ilo, ihi, const lscale, const rscale, m, v, ldv. She applies the balancing transformations back to a matrix. And yes — c and z take const float *lscale / const float *rscale while s and d take const float * / const double * respectively 🫶
lapack_int LAPACKE_sggbak (int matrix_layout, char job, char side,
lapack_int n, lapack_int ilo, lapack_int ihi, const float *lscale,
const float *rscale, lapack_int m, float *v, lapack_int ldv)
lapack_int LAPACKE_dggbak (int matrix_layout, char job, char side,
lapack_int n, lapack_int ilo, lapack_int ihi, const double *lscale,
const double *rscale, lapack_int m, double *v, lapack_int ldv)
lapack_int LAPACKE_cggbak (int matrix_layout, char job, char side,
lapack_int n, lapack_int ilo, lapack_int ihi, const float *lscale,
const float *rscale, lapack_int m, lapack_complex_float *v,
lapack_int ldv)
lapack_int LAPACKE_zggbak (int matrix_layout, char job, char side,
lapack_int n, lapack_int ilo, lapack_int ihi, const double *lscale,
const double *rscale, lapack_int m, lapack_complex_double *v,
lapack_int ldv)
ggbal — balance me, daddy
job, n, then two matrices a (lda) and b (ldb), and out come ilo, ihi, lscale, rscale. The way she gives you back both scale arrays is such a serve:
lapack_int LAPACKE_sggbal (int matrix_layout, char job, lapack_int n,
float *a, lapack_int lda, float *b, lapack_int ldb, lapack_int *ilo,
lapack_int *ihi, float *lscale, float *rscale)
lapack_int LAPACKE_dggbal (int matrix_layout, char job, lapack_int n,
double *a, lapack_int lda, double *b, lapack_int ldb, lapack_int
*ilo, lapack_int *ihi, double *lscale, double *rscale)
lapack_int LAPACKE_cggbal (int matrix_layout, char job, lapack_int n,
lapack_complex_float *a, lapack_int lda, lapack_complex_float *b,
lapack_int ldb, lapack_int *ilo, lapack_int *ihi, float *lscale,
float *rscale)
lapack_int LAPACKE_zggbal (int matrix_layout, char job, lapack_int n,
lapack_complex_double *a, lapack_int lda, lapack_complex_double *b,
lapack_int ldb, lapack_int *ilo, lapack_int *ihi, double *lscale,
double *rscale)
👑 gges — the generalized Schur flex
This is a whole committee of arguments, so stay with me: jobvsl, jobvsr, sort, a selector function, n, then a/lda, b/ldb, sdim, alphar, alphai, beta, then vsl/ldvsl and vsr/ldvsr.
Notice the selectors differ per type bestie — real versions take LAPACK_S_SELECT3 / LAPACK_D_SELECT3, complex take LAPACK_C_SELECT2 / LAPACK_Z_SELECT2 — and complex versions get a single alpha instead of alphar+alphai, because obviously 💅
lapack_int LAPACKE_sgges (int matrix_layout, char jobvsl, char jobvsr,
char sort, LAPACK_S_SELECT3 selctg, lapack_int n, float *a,
lapack_int lda, float *b, lapack_int ldb, lapack_int *sdim, float
*alphar, float *alphai, float *beta, float *vsl, lapack_int ldvsl,
float *vsr, lapack_int ldvsr)
lapack_int LAPACKE_dgges (int matrix_layout, char jobvsl, char jobvsr,
char sort, LAPACK_D_SELECT3 selctg, lapack_int n, double *a,
lapack_int lda, double *b, lapack_int ldb, lapack_int *sdim, double
*alphar, double *alphai, double *beta, double *vsl, lapack_int
ldvsl, double *vsr, lapack_int ldvsr)
lapack_int LAPACKE_cgges (int matrix_layout, char jobvsl, char jobvsr,
char sort, LAPACK_C_SELECT2 selctg, lapack_int n,
lapack_complex_float *a, lapack_int lda, lapack_complex_float *b,
lapack_int ldb, lapack_int *sdim, lapack_complex_float *alpha,
lapack_complex_float *beta, lapack_complex_float *vsl, lapack_int
ldvsl, lapack_complex_float *vsr, lapack_int ldvsr)
lapack_int LAPACKE_zgges (int matrix_layout, char jobvsl, char jobvsr,
char sort, LAPACK_Z_SELECT2 selctg, lapack_int n,
lapack_complex_double *a, lapack_int lda, lapack_complex_double *b,
lapack_int ldb, lapack_int *sdim, lapack_complex_double *alpha,
lapack_complex_double *beta, lapack_complex_double *vsl, lapack_int
ldvsl, lapack_complex_double *vsr, lapack_int ldvsr)
gges3 — same girl, different algorithm
I'm not kidding, the argument lists are identical to gges above. Behold, the whole quartet again, with a 3 slapped on the end of every name:
lapack_int LAPACKE_sgges3 (int matrix_layout, char jobvsl, char jobvsr,
char sort, LAPACK_S_SELECT3 selctg, lapack_int n, float *a,
lapack_int lda, float *b, lapack_int ldb, lapack_int *sdim, float
*alphar, float *alphai, float *beta, float *vsl, lapack_int ldvsl,
float *vsr, lapack_int ldvsr)
lapack_int LAPACKE_dgges3 (int matrix_layout, char jobvsl, char jobvsr,
char sort, LAPACK_D_SELECT3 selctg, lapack_int n, double *a,
lapack_int lda, double *b, lapack_int ldb, lapack_int *sdim, double
*alphar, double *alphai, double *beta, double *vsl, lapack_int
ldvsl, double *vsr, lapack_int ldvsr)
lapack_int LAPACKE_cgges3 (int matrix_layout, char jobvsl, char jobvsr,
char sort, LAPACK_C_SELECT2 selctg, lapack_int n,
lapack_complex_float *a, lapack_int lda, lapack_complex_float *b,
lapack_int ldb, lapack_int *sdim, lapack_complex_float *alpha,
lapack_complex_float *beta, lapack_complex_float *vsl, lapack_int
ldvsl, lapack_complex_float *vsr, lapack_int ldvsr)
lapack_int LAPACKE_zgges3 (int matrix_layout, char jobvsl, char jobvsr,
char sort, LAPACK_Z_SELECT2 selctg, lapack_int n,
lapack_complex_double *a, lapack_int lda, lapack_complex_double *b,
lapack_int ldb, lapack_int *sdim, lapack_complex_double *alpha,
lapack_complex_double *beta, lapack_complex_double *vsl, lapack_int
ldvsl, lapack_complex_double *vsr, lapack_int ldvsr)
ggesx — the one with the condition numbers
New character unlocked: sense, plus rconde and rcondv at the end. Same committee as gges, just with extra opinions. The dggesx signature is still mid-sentence here — her tail continues in the next chunk, don't panic 🌈
lapack_int LAPACKE_sggesx (int matrix_layout, char jobvsl, char jobvsr,
char sort, LAPACK_S_SELECT3 selctg, char sense, lapack_int n, float
*a, lapack_int lda, float *b, lapack_int ldb, lapack_int *sdim,
float *alphar, float *alphai, float *beta, float *vsl, lapack_int
ldvsl, float *vsr, lapack_int ldvsr, float *rconde, float *rcondv)
lapack_int LAPACKE_dggesx (int matrix_layout, char jobvsl, char jobvsr,
char sort, LAPACK_D_SELECT3 selctg, char sense, lapack_int n, double
*a, lapack_int lda, double *b, lapack_int ldb, lapack_int *sdim,
double *alphar, double *alphai, double *beta, double *vsl,
okay so we literally cut off mid-signature last time 😭 — the LAPACKE_dggesx prototype was just hanging there, mid-argument, like a sentence that— Anyway. Here's the rest of it, plus its two complex siblings, so you can see the whole ggesx crew together ✨
lapack_int ldvsl, double *vsr, lapack_int ldvsr, double *rconde,
double *rcondv)
lapack_int LAPACKE_cggesx (int matrix_layout, char jobvsl, char jobvsr,
char sort, LAPACK_C_SELECT2 selctg, char sense, lapack_int n,
lapack_complex_float *a, lapack_int lda, lapack_complex_float *b,
lapack_int ldb, lapack_int *sdim, lapack_complex_float *alpha,
lapack_complex_float *beta, lapack_complex_float *vsl, lapack_int
ldvsl, lapack_complex_float *vsr, lapack_int ldvsr, float *rconde,
float *rcondv)
lapack_int LAPACKE_zggesx (int matrix_layout, char jobvsl, char jobvsr,
char sort, LAPACK_Z_SELECT2 selctg, char sense, lapack_int n,
lapack_complex_double *a, lapack_int lda, lapack_complex_double *b,
lapack_int ldb, lapack_int *sdim, lapack_complex_double *alpha,
lapack_complex_double *beta, lapack_complex_double *vsl, lapack_int
ldvsl, lapack_complex_double *vsr, lapack_int ldvsr, double *rconde,
double *rcondv)
quick vibe check 🫶 — the complex ones take a selection callback, and bestie, notice it's LAPACK_C_SELECT2 for the c version and LAPACK_Z_SELECT2 for the z version. Two separate types, two separate letters, no mixing, periodt.
💖 the ggev ensemble (the OG, no suffix)
four of them, one per floating-point flavour, and they all take jobvl, jobvr, then alphar, alphai, beta, then vl and vr:
lapack_int LAPACKE_sggev (int matrix_layout, char jobvl, char jobvr,
lapack_int n, float *a, lapack_int lda, float *b, lapack_int ldb,
float *alphar, float *alphai, float *beta, float *vl, lapack_int
ldvl, float *vr, lapack_int ldvr)
lapack_int LAPACKE_dggev (int matrix_layout, char jobvl, char jobvr,
lapack_int n, double *a, lapack_int lda, double *b, lapack_int ldb,
double *alphar, double *alphai, double *beta, double *vl, lapack_int
ldvl, double *vr, lapack_int ldvr)
lapack_int LAPACKE_cggev (int matrix_layout, char jobvl, char jobvr,
lapack_int n, lapack_complex_float *a, lapack_int lda,
lapack_complex_float *b, lapack_int ldb, lapack_complex_float
*alpha, lapack_complex_float *beta, lapack_complex_float *vl,
lapack_int ldvl, lapack_complex_float *vr, lapack_int ldvr)
lapack_int LAPACKE_zggev (int matrix_layout, char jobvl, char jobvr,
lapack_int n, lapack_complex_double *a, lapack_int lda,
lapack_complex_double *b, lapack_int ldb, lapack_complex_double
*alpha, lapack_complex_double *beta, lapack_complex_double *vl,
lapack_int ldvl, lapack_complex_double *vr, lapack_int ldvr)
lowkey obsessed with how the real ones split into alphar + alphai (real part, imaginary part, two separate pointers, doing the absolute most) while the complex ones just get one single alpha. iconic behaviour honestly 💅
🌸 the ggev3 remix
same cast, same arguments, except the name has a lil 3 on the end. don't ask me to explain the 3 — it's just right there in the name and it's staying there:
lapack_int LAPACKE_sggev3 (int matrix_layout, char jobvl, char jobvr,
lapack_int n, float *a, lapack_int lda, float *b, lapack_int ldb,
float *alphar, float *alphai, float *beta, float *vl, lapack_int
ldvl, float *vr, lapack_int ldvr)
lapack_int LAPACKE_dggev3 (int matrix_layout, char jobvl, char jobvr,
lapack_int n, double *a, lapack_int lda, double *b, lapack_int ldb,
double *alphar, double *alphai, double *beta, double *vl, lapack_int
ldvl, double *vr, lapack_int ldvr)
lapack_int LAPACKE_cggev3 (int matrix_layout, char jobvl, char jobvr,
lapack_int n, lapack_complex_float *a, lapack_int lda,
lapack_complex_float *b, lapack_int ldb, lapack_complex_float
*alpha, lapack_complex_float *beta, lapack_complex_float *vl,
lapack_int ldvl, lapack_complex_float *vr, lapack_int ldvr)
lapack_int LAPACKE_zggev3 (int matrix_layout, char jobvl, char jobvr,
lapack_int n, lapack_complex_double *a, lapack_int lda,
lapack_complex_double *b, lapack_int ldb, lapack_complex_double
*alpha, lapack_complex_double *beta, lapack_complex_double *vl,
lapack_int ldvl, lapack_complex_double *vr, lapack_int ldvr)
🦋 the ggevx deluxe edition
the x versions are the ones that show up with a whole extra suitcase of arguments — balanc, sense, plus ilo, ihi, lscale, rscale, abnrm, bbnrm, rconde, rcondv. it's giving main character energy, it's giving "I brought my entire skincare routine to the sleepover" 🧖♀️
lapack_int LAPACKE_sggevx (int matrix_layout, char balanc, char jobvl,
char jobvr, char sense, lapack_int n, float *a, lapack_int lda,
float *b, lapack_int ldb, float *alphar, float *alphai, float *beta,
float *vl, lapack_int ldvl, float *vr, lapack_int ldvr, lapack_int
*ilo, lapack_int *ihi, float *lscale, float *rscale, float *abnrm,
float *bbnrm, float *rconde, float *rcondv)
lapack_int LAPACKE_dggevx (int matrix_layout, char balanc, char jobvl,
char jobvr, char sense, lapack_int n, double *a, lapack_int lda,
double *b, lapack_int ldb, double *alphar, double *alphai, double
*beta, double *vl, lapack_int ldvl, double *vr, lapack_int ldvr,
lapack_int *ilo, lapack_int *ihi, double *lscale, double *rscale,
double *abnrm, double *bbnrm, double *rconde, double *rcondv)
lapack_int LAPACKE_cggevx (int matrix_layout, char balanc, char jobvl,
char jobvr, char sense, lapack_int n, lapack_complex_float *a,
lapack_int lda, lapack_complex_float *b, lapack_int ldb,
lapack_complex_float *alpha, lapack_complex_float *beta,
lapack_complex_float *vl, lapack_int ldvl, lapack_complex_float *vr,
lapack_int ldvr, lapack_int *ilo, lapack_int *ihi, float *lscale,
float *rscale, float *abnrm, float *bbnrm, float *rconde, float
*rcondv)
lapack_int LAPACKE_zggevx (int matrix_layout, char balanc, char jobvl,
char jobvr, char sense, lapack_int n, lapack_complex_double *a,
lapack_int lda, lapack_complex_double *b, lapack_int ldb,
lapack_complex_double *alpha, lapack_complex_double *beta,
lapack_complex_double *vl, lapack_int ldvl, lapack_complex_double
*vr, lapack_int ldvr, lapack_int *ilo, lapack_int *ihi, double
*lscale, double *rscale, double *abnrm, double *bbnrm, double
*rconde, double *rcondv)
note that rconde and rcondv hang out at the very end of these bad boys, and in the c/z versions they're still float * / double * even though the matrices are complex. yes bestie, the reciprocal condition numbers stay real. slay 🌈
🎀 ggglm — short, sweet, four flavours
lapack_int LAPACKE_sggglm (int matrix_layout, lapack_int n, lapack_int
m, lapack_int p, float *a, lapack_int lda, float *b, lapack_int ldb,
float *d, float *x, float *y)
lapack_int LAPACKE_dggglm (int matrix_layout, lapack_int n, lapack_int
m, lapack_int p, double *a, lapack_int lda, double *b, lapack_int
ldb, double *d, double *x, double *y)
lapack_int LAPACKE_cggglm (int matrix_layout, lapack_int n, lapack_int
m, lapack_int p, lapack_complex_float *a, lapack_int lda,
lapack_complex_float *b, lapack_int ldb, lapack_complex_float *d,
lapack_complex_float *x, lapack_complex_float *y)
lapack_int LAPACKE_zggglm (int matrix_layout, lapack_int n, lapack_int
m, lapack_int p, lapack_complex_double *a, lapack_int lda,
lapack_complex_double *b, lapack_int ldb, lapack_complex_double *d,
lapack_complex_double *x, lapack_complex_double *y)
three ints up front (n, m, p), then a + lda, b + ldb, then the trio d, x, y. tidy. we love a consistent layout ✨
💜 gghrd and gghd3 — the twins
gghrd first, and yes, compq comes before compz, and ilo/ihi come before a:
lapack_int LAPACKE_sgghrd (int matrix_layout, char compq, char compz,
lapack_int n, lapack_int ilo, lapack_int ihi, float *a, lapack_int
lda, float *b, lapack_int ldb, float *q, lapack_int ldq, float *z,
lapack_int ldz)
lapack_int LAPACKE_dgghrd (int matrix_layout, char compq, char compz,
lapack_int n, lapack_int ilo, lapack_int ihi, double *a, lapack_int
lda, double *b, lapack_int ldb, double *q, lapack_int ldq, double
*z, lapack_int ldz)
lapack_int LAPACKE_cgghrd (int matrix_layout, char compq, char compz,
lapack_int n, lapack_int ilo, lapack_int ihi, lapack_complex_float
*a, lapack_int lda, lapack_complex_float *b, lapack_int ldb,
lapack_complex_float *q, lapack_int ldq, lapack_complex_float *z,
lapack_int ldz)
lapack_int LAPACKE_zgghrd (int matrix_layout, char compq, char compz,
lapack_int n, lapack_int ilo, lapack_int ihi, lapack_complex_double
*a, lapack_int lda, lapack_complex_double *b, lapack_int ldb,
lapack_complex_double *q, lapack_int ldq, lapack_complex_double *z,
lapack_int ldz)
then gghd3, which is literally the identical argument list with a 3 slapped on the name. not a drill, they're the same, I checked twice, and I'm not going to pretend otherwise 💀
lapack_int LAPACKE_sgghd3 (int matrix_layout, char compq, char compz,
lapack_int n, lapack_int ilo, lapack_int ihi, float *a, lapack_int
lda, float *b, lapack_int ldb, float *q, lapack_int ldq, float *z,
lapack_int ldz)
lapack_int LAPACKE_dgghd3 (int matrix_layout, char compq, char compz,
lapack_int n, lapack_int ilo, lapack_int ihi, double *a, lapack_int
lda, double *b, lapack_int ldb, double *q, lapack_int ldq, double
*z, lapack_int ldz)
lapack_int LAPACKE_cgghd3 (int matrix_layout, char compq, char compz,
lapack_int n, lapack_int ilo, lapack_int ihi, lapack_complex_float
*a, lapack_int lda, lapack_complex_float *b, lapack_int ldb,
lapack_complex_float *q, lapack_int ldq, lapack_complex_float *z,
lapack_int ldz)
lapack_int LAPACKE_zgghd3 (int matrix_layout, char compq, char compz,
lapack_int n, lapack_int ilo, lapack_int ihi, lapack_complex_double
*a, lapack_int lda, lapack_complex_double *b, lapack_int ldb,
lapack_complex_double *q, lapack_int ldq, lapack_complex_double *z,
lapack_int ldz)
🍓 gglse — the m, n, p girlies
watch the int order bestie: m, n, p. then a, b, c, d, x. no ld on c, d or x — those are just plain pointers, living their simple lives:
lapack_int LAPACKE_sgglse (int matrix_layout, lapack_int m, lapack_int
n, lapack_int p, float *a, lapack_int lda, float *b, lapack_int ldb,
float *c, float *d, float *x)
lapack_int LAPACKE_dgglse (int matrix_layout, lapack_int m, lapack_int
n, lapack_int p, double *a, lapack_int lda, double *b, lapack_int
ldb, double *c, double *d, double *x)
lapack_int LAPACKE_cgglse (int matrix_layout, lapack_int m, lapack_int
n, lapack_int p, lapack_complex_float *a, lapack_int lda,
lapack_complex_float *b, lapack_int ldb, lapack_complex_float *c,
lapack_complex_float *d, lapack_complex_float *x)
lapack_int LAPACKE_zgglse (int matrix_layout, lapack_int m, lapack_int
n, lapack_int p, lapack_complex_double *a, lapack_int lda,
lapack_complex_double *b, lapack_int ldb, lapack_complex_double *c,
lapack_complex_double *d, lapack_complex_double *x)
🧚 ggqrf vs ggrqf — bestie, don't mix these up
okay this is the part where you gotta pay attention 🙈 ggqrf starts n, m, p and ends with taua, b, ldb, taub. here:
lapack_int LAPACKE_sggqrf (int matrix_layout, lapack_int n, lapack_int
m, lapack_int p, float *a, lapack_int lda, float *taua, float *b,
lapack_int ldb, float *taub)
lapack_int LAPACKE_dggqrf (int matrix_layout, lapack_int n, lapack_int
m, lapack_int p, double *a, lapack_int lda, double *taua, double *b,
lapack_int ldb, double *taub)
lapack_int LAPACKE_cggqrf (int matrix_layout, lapack_int n, lapack_int
m, lapack_int p, lapack_complex_float *a, lapack_int lda,
lapack_complex_float *taua, lapack_complex_float *b, lapack_int ldb,
lapack_complex_float *taub)
lapack_int LAPACKE_zggqrf (int matrix_layout, lapack_int n, lapack_int
m, lapack_int p, lapack_complex_double *a, lapack_int lda,
lapack_complex_double *taua, lapack_complex_double *b, lapack_int
ldb, lapack_complex_double *taub)
and then ggrqf — note the letters are swapped, and so is the int order, because it's m, p, n now. not me double-checking this three times 😭 that's the whole joke, and it ate:
lapack_int LAPACKE_sggrqf (int matrix_layout, lapack_int m, lapack_int
p, lapack_int n, float *a, lapack_int lda, float *taua, float *b,
lapack_int ldb, float *taub)
lapack_int LAPACKE_dggrqf (int matrix_layout, lapack_int m, lapack_int
p, lapack_int n, double *a, lapack_int lda, double *taua, double *b,
lapack_int ldb, double *taub)
lapack_int LAPACKE_cggrqf (int matrix_layout, lapack_int m, lapack_int
p, lapack_int n, lapack_complex_float *a, lapack_int lda,
lapack_complex_float *taua, lapack_complex_float *b, lapack_int ldb,
lapack_complex_float *taub)
lapack_int LAPACKE_zggrqf (int matrix_layout, lapack_int m, lapack_int
p, lapack_int n, lapack_complex_double *a, lapack_int lda,
lapack_complex_double *taua, lapack_complex_double *b, lapack_int
ldb, lapack_complex_double *taub)
and now… ggsvd walks in, says jobu, jobv, jobq, m, n, p, gets to k, and—
lapack_int LAPACKE_sggsvd (int matrix_layout, char jobu, char jobv, char
jobq, lapack_int m, lapack_int n, lapack_int p, lapack_int *k,
…yeah. that's it. that's the cliffhanger 😳 we literally stop mid-signature again. hold that thought, the rest is coming 🔥
okay so we are STILL in the SYNOPSIS trenches and honestly it's giving phone book 😭 but every single one of these is a real, load-bearing function so we're reading them all, no skipping, periodt.
💅 the ggsvd girlies (singular value decomposition, generalized)
four flavors, one shape: s = float, d = double, c = lapack_complex_float, z = lapack_complex_double. spot the pattern bestie, it's free.
lapack_int LAPACKE_sggsvd (int matrix_layout, char jobu, char jobv, char
jobq, lapack_int m, lapack_int n, lapack_int p, lapack_int *k,
lapack_int *l, float *a, lapack_int lda, float *b, lapack_int ldb,
float *alpha, float *beta, float *u, lapack_int ldu, float *v,
lapack_int ldv, float *q, lapack_int ldq, lapack_int *iwork)
lapack_int LAPACKE_dggsvd (int matrix_layout, char jobu, char jobv, char
jobq, lapack_int m, lapack_int n, lapack_int p, lapack_int *k,
lapack_int *l, double *a, lapack_int lda, double *b, lapack_int ldb,
double *alpha, double *beta, double *u, lapack_int ldu, double *v,
lapack_int ldv, double *q, lapack_int ldq, lapack_int *iwork)
lapack_int LAPACKE_cggsvd (int matrix_layout, char jobu, char jobv, char
jobq, lapack_int m, lapack_int n, lapack_int p, lapack_int *k,
lapack_int *l, lapack_complex_float *a, lapack_int lda,
lapack_complex_float *b, lapack_int ldb, float *alpha, float *beta,
lapack_complex_float *u, lapack_int ldu, lapack_complex_float *v,
lapack_int ldv, lapack_complex_float *q, lapack_int ldq, lapack_int
*iwork)
lapack_int LAPACKE_zggsvd (int matrix_layout, char jobu, char jobv, char
jobq, lapack_int m, lapack_int n, lapack_int p, lapack_int *k,
lapack_int *l, lapack_complex_double *a, lapack_int lda,
lapack_complex_double *b, lapack_int ldb, double *alpha, double
*beta, lapack_complex_double *u, lapack_int ldu,
lapack_complex_double *v, lapack_int ldv, lapack_complex_double *q,
lapack_int ldq, lapack_int *iwork)
the way that k and l are both lapack_int * (pointers!! outputs!!) while m, n, p are plain values — that's the whole vibe check right there. and notice the complex ones still hand you real float/double alpha and beta 🫶. iwork is the workspace baddie at the end, always last, always iconic.
✨ ggsvd3 — same energy, new number
literally the same argument list as above, just with a 3 slapped on the name like a limited edition drop. still jobu, jobv, jobq, still matrix_layout first because she's the main character.
lapack_int LAPACKE_sggsvd3 (int matrix_layout, char jobu, char jobv,
char jobq, lapack_int m, lapack_int n, lapack_int p, lapack_int *k,
lapack_int *l, float *a, lapack_int lda, float *b, lapack_int ldb,
float *alpha, float *beta, float *u, lapack_int ldu, float *v,
lapack_int ldv, float *q, lapack_int ldq, lapack_int *iwork)
lapack_int LAPACKE_dggsvd3 (int matrix_layout, char jobu, char jobv,
char jobq, lapack_int m, lapack_int n, lapack_int p, lapack_int *k,
lapack_int *l, double *a, lapack_int lda, double *b, lapack_int ldb,
double *alpha, double *beta, double *u, lapack_int ldu, double *v,
lapack_int ldv, double *q, lapack_int ldq, lapack_int *iwork)
lapack_int LAPACKE_cggsvd3 (int matrix_layout, char jobu, char jobv,
char jobq, lapack_int m, lapack_int n, lapack_int p, lapack_int *k,
lapack_int *l, lapack_complex_float *a, lapack_int lda,
lapack_complex_float *b, lapack_int ldb, float *alpha, float *beta,
lapack_complex_float *u, lapack_int ldu, lapack_complex_float *v,
lapack_int ldv, lapack_complex_float *q, lapack_int ldq, lapack_int
*iwork)
lapack_int LAPACKE_zggsvd3 (int matrix_layout, char jobu, char jobv,
char jobq, lapack_int m, lapack_int n, lapack_int p, lapack_int *k,
lapack_int *l, lapack_complex_double *a, lapack_int lda,
lapack_complex_double *b, lapack_int ldb, double *alpha, double
*beta, lapack_complex_double *u, lapack_int ldu,
lapack_complex_double *v, lapack_int ldv, lapack_complex_double *q,
lapack_int ldq, lapack_int *iwork)
🦋 ggsvp and ggsvp3 — the pre-processing prequel
okay so these ones have tola and tolb (tolerances, one for each of A and B, cute) and they DON'T have alpha, beta, or iwork. the order is m, p, n this time btw — not m, n, p — so read carefully before you copy-paste, i'm begging 🙈.
lapack_int LAPACKE_sggsvp (int matrix_layout, char jobu, char jobv, char
jobq, lapack_int m, lapack_int p, lapack_int n, float *a, lapack_int
lda, float *b, lapack_int ldb, float tola, float tolb, lapack_int
*k, lapack_int *l, float *u, lapack_int ldu, float *v, lapack_int
ldv, float *q, lapack_int ldq)
lapack_int LAPACKE_dggsvp (int matrix_layout, char jobu, char jobv, char
jobq, lapack_int m, lapack_int p, lapack_int n, double *a,
lapack_int lda, double *b, lapack_int ldb, double tola, double tolb,
lapack_int *k, lapack_int *l, double *u, lapack_int ldu, double *v,
lapack_int ldv, double *q, lapack_int ldq)
lapack_int LAPACKE_cggsvp (int matrix_layout, char jobu, char jobv, char
jobq, lapack_int m, lapack_int p, lapack_int n, lapack_complex_float
*a, lapack_int lda, lapack_complex_float *b, lapack_int ldb, float
tola, float tolb, lapack_int *k, lapack_int *l, lapack_complex_float
*u, lapack_int ldu, lapack_complex_float *v, lapack_int ldv,
lapack_complex_float *q, lapack_int ldq)
lapack_int LAPACKE_zggsvp (int matrix_layout, char jobu, char jobv, char
jobq, lapack_int m, lapack_int p, lapack_int n,
lapack_complex_double *a, lapack_int lda, lapack_complex_double *b,
lapack_int ldb, double tola, double tolb, lapack_int *k, lapack_int
*l, lapack_complex_double *u, lapack_int ldu, lapack_complex_double
*v, lapack_int ldv, lapack_complex_double *q, lapack_int ldq)
and the 3 versions? yeah you already know. same list, number go up. 🎀
lapack_int LAPACKE_sggsvp3 (int matrix_layout, char jobu, char jobv,
char jobq, lapack_int m, lapack_int p, lapack_int n, float *a,
lapack_int lda, float *b, lapack_int ldb, float tola, float tolb,
lapack_int *k, lapack_int *l, float *u, lapack_int ldu, float *v,
lapack_int ldv, float *q, lapack_int ldq)
lapack_int LAPACKE_dggsvp3 (int matrix_layout, char jobu, char jobv,
char jobq, lapack_int m, lapack_int p, lapack_int n, double *a,
lapack_int lda, double *b, lapack_int ldb, double tola, double tolb,
lapack_int *k, lapack_int *l, double *u, lapack_int ldu, double *v,
lapack_int ldv, double *q, lapack_int ldq)
lapack_int LAPACKE_cggsvp3 (int matrix_layout, char jobu, char jobv,
char jobq, lapack_int m, lapack_int p, lapack_int n,
lapack_complex_float *a, lapack_int lda, lapack_complex_float *b,
lapack_int ldb, float tola, float tolb, lapack_int *k, lapack_int
*l, lapack_complex_float *u, lapack_int ldu, lapack_complex_float
*v, lapack_int ldv, lapack_complex_float *q, lapack_int ldq)
lapack_int LAPACKE_zggsvp3 (int matrix_layout, char jobu, char jobv,
char jobq, lapack_int m, lapack_int p, lapack_int n,
lapack_complex_double *a, lapack_int lda, lapack_complex_double *b,
lapack_int ldb, double tola, double tolb, lapack_int *k, lapack_int
*l, lapack_complex_double *u, lapack_int ldu, lapack_complex_double
*v, lapack_int ldv, lapack_complex_double *q, lapack_int ldq)
🌸 gtcon — tridiagonal condition estimation, no matrix_layout in sight
fun fact bestie: these four have no matrix_layout argument at all. not a single layout to be seen. what they DO have is norm, all the tridiagonal bits (dl, d, du, du2), the pivot array ipiv, an anorm, and an output rcond. she's different, she's lowkey mysterious 💜
lapack_int LAPACKE_sgtcon (char norm, lapack_int n, const float *dl,
const float *d, const float *du, const float *du2, const lapack_int
*ipiv, float anorm, float *rcond)
lapack_int LAPACKE_dgtcon (char norm, lapack_int n, const double *dl,
const double *d, const double *du, const double *du2, const
lapack_int *ipiv, double anorm, double *rcond)
lapack_int LAPACKE_cgtcon (char norm, lapack_int n, const
lapack_complex_float *dl, const lapack_complex_float *d, const
lapack_complex_float *du, const lapack_complex_float *du2, const
lapack_int *ipiv, float anorm, float *rcond)
lapack_int LAPACKE_zgtcon (char norm, lapack_int n, const
lapack_complex_double *dl, const lapack_complex_double *d, const
lapack_complex_double *du, const lapack_complex_double *du2, const
lapack_int *ipiv, double anorm, double *rcond)
see how dl, d, du, du2, and ipiv are all const here? they're read-only princesses, we're not touching them. anorm is a plain value, rcond is the pointer she writes back to. periodt.
🔥 gtrfs — refine and get those error bounds
trans shows up for the first time in this stretch, nrhs is here, and you get BOTH ferr and berr out the back. matrix_layout is back, bestie, she never really left.
lapack_int LAPACKE_sgtrfs (int matrix_layout, char trans, lapack_int n,
lapack_int nrhs, const float *dl, const float *d, const float *du,
const float *dlf, const float *df, const float *duf, const float
*du2, const lapack_int *ipiv, const float *b, lapack_int ldb, float
*x, lapack_int ldx, float *ferr, float *berr)
lapack_int LAPACKE_dgtrfs (int matrix_layout, char trans, lapack_int n,
lapack_int nrhs, const double *dl, const double *d, const double
*du, const double *dlf, const double *df, const double *duf, const
double *du2, const lapack_int *ipiv, const double *b, lapack_int
ldb, double *x, lapack_int ldx, double *ferr, double *berr)
lapack_int LAPACKE_cgtrfs (int matrix_layout, char trans, lapack_int n,
lapack_int nrhs, const lapack_complex_float *dl, const
lapack_complex_float *d, const lapack_complex_float *du, const
lapack_complex_float *dlf, const lapack_complex_float *df, const
lapack_complex_float *duf, const lapack_complex_float *du2, const
lapack_int *ipiv, const lapack_complex_float *b, lapack_int ldb,
lapack_complex_float *x, lapack_int ldx, float *ferr, float *berr)
lapack_int LAPACKE_zgtrfs (int matrix_layout, char trans, lapack_int n,
lapack_int nrhs, const lapack_complex_double *dl, const
lapack_complex_double *d, const lapack_complex_double *du, const
lapack_complex_double *dlf, const lapack_complex_double *df, const
lapack_complex_double *duf, const lapack_complex_double *du2, const
lapack_int *ipiv, const lapack_complex_double *b, lapack_int ldb,
lapack_complex_double *x, lapack_int ldx, double *ferr, double
*berr)
the factorized trio (dlf, df, duf) plus du2 and ipiv all const — those are ingredients, not outputs. x is the one getting written. she's the main character of this function, fr fr. 👑
⭐ gtsv — the short one, the simple one, the icon
look how SHORT this is compared to everything above. dl, d, du, b, ldb. that's it. no nrhs-less nonsense, no const, just vibes and a solve.
lapack_int LAPACKE_sgtsv (int matrix_layout, lapack_int n, lapack_int
nrhs, float *dl, float *d, float *du, float *b, lapack_int ldb)
lapack_int LAPACKE_dgtsv (int matrix_layout, lapack_int n, lapack_int
nrhs, double *dl, double *d, double *du, double *b, lapack_int ldb)
lapack_int LAPACKE_cgtsv (int matrix_layout, lapack_int n, lapack_int
nrhs, lapack_complex_float *dl, lapack_complex_float *d,
lapack_complex_float *du, lapack_complex_float *b, lapack_int ldb)
lapack_int LAPACKE_zgtsv (int matrix_layout, lapack_int n, lapack_int
nrhs, lapack_complex_double *dl, lapack_complex_double *d,
lapack_complex_double *du, lapack_complex_double *b, lapack_int ldb)
no const anywhere — everything is fair game to be overwritten. we love a chaotic queen 💀
🧚 gtsvx — the deluxe version with fact and extra outputs
okay she's got it all: fact (like "do you have the factorization or not"), trans, nrhs, factor arrays, ipiv, and on the way out you get x, rcond, ferr, AND berr. overachiever behavior honestly.
lapack_int LAPACKE_sgtsvx (int matrix_layout, char fact, char trans,
lapack_int n, lapack_int nrhs, const float *dl, const float *d,
const float *du, float *dlf, float *df, float *duf, float *du2,
lapack_int *ipiv, const float *b, lapack_int ldb, float *x,
lapack_int ldx, float *rcond, float *ferr, float *berr)
lapack_int LAPACKE_dgtsvx (int matrix_layout, char fact, char trans,
lapack_int n, lapack_int nrhs, const double *dl, const double *d,
const double *du, double *dlf, double *df, double *duf, double *du2,
lapack_int *ipiv, const double *b, lapack_int ldb, double *x,
lapack_int ldx, double *rcond, double *ferr, double *berr)
lapack_int LAPACKE_cgtsvx (int matrix_layout, char fact, char trans,
lapack_int n, lapack_int nrhs, const lapack_complex_float *dl, const
lapack_complex_float *d, const lapack_complex_float *du,
lapack_complex_float *dlf, lapack_complex_float *df,
lapack_complex_float *duf, lapack_complex_float *du2, lapack_int
*ipiv, const lapack_complex_float *b, lapack_int ldb,
lapack_complex_float *x, lapack_int ldx, float *rcond, float *ferr,
float *berr)
lapack_int LAPACKE_zgtsvx (int matrix_layout, char fact, char trans,
lapack_int n, lapack_int nrhs, const lapack_complex_double *dl,
const lapack_complex_double *d, const lapack_complex_double *du,
lapack_complex_double *dlf, lapack_complex_double *df,
lapack_complex_double *duf, lapack_complex_double *du2, lapack_int
*ipiv, const lapack_complex_double *b, lapack_int ldb,
lapack_complex_double *x, lapack_int ldx, double *rcond, double
*ferr, double *berr)
sneaky detail 🫶: dl, d, du, and b are const — but dlf, df, duf, du2, ipiv, and x are NOT. that's your whole cheat sheet for "what gets read vs what gets written".
💖 gttrf — and we're cutting off here
the factorization baddie, and this part literally ends mid-family on the s variant. no matrix_layout, no nrhs, just n, the tridiagonal trio, du2, and ipiv.
lapack_int LAPACKE_sgttrf (lapack_int n, float *dl, float *d, float *du,
float *du2, lapack_int *ipiv)
and that's where part 15 stops, bestie — d, c, and z are still out there living their lives. we'll get 'em next time, don't stress 🌈
Ok so we're still in the prototype list and it is long, bestie — but like, every single one here returns a lapack_int, so at least the vibe is consistent 🫶. Carry on.
the gttrf trio 💅
Three of them, and notice — they all take the exact same little diagonal squad: dl, d, du, du2, plus ipiv for the pivots. The d one is all double, the c one is lapack_complex_float, the z one is lapack_complex_double. Pattern recognition is free, babes.
lapack_int LAPACKE_dgttrf (lapack_int n, double *dl, double *d, double *du, double *du2, lapack_int *ipiv)
lapack_int LAPACKE_cgttrf (lapack_int n, lapack_complex_float *dl, lapack_complex_float *d, lapack_complex_float *du, lapack_complex_float *du2, lapack_int *ipiv)
lapack_int LAPACKE_zgttrf (lapack_int n, lapack_complex_double *dl, lapack_complex_double *d, lapack_complex_double *du, lapack_complex_double *du2, lapack_int *ipiv)
and the gttrs quad 🎀
Same four, but make it solve. Now they all lead with matrix_layout and trans, and the dl/d/du/du2/ipiv args are all const because we're not touching them, we're just reading. Iconic behaviour honestly.
lapack_int LAPACKE_sgttrs (int matrix_layout, char trans, lapack_int n, lapack_int nrhs, const float *dl, const float *d, const float *du, const float *du2, const lapack_int *ipiv, float *b, lapack_int ldb)
lapack_int LAPACKE_dgttrs (int matrix_layout, char trans, lapack_int n, lapack_int nrhs, const double *dl, const double *d, const double *du, const double *du2, const lapack_int *ipiv, double *b, lapack_int ldb)
lapack_int LAPACKE_cgttrs (int matrix_layout, char trans, lapack_int n, lapack_int nrhs, const lapack_complex_float *dl, const lapack_complex_float *d, const lapack_complex_float *du, const lapack_complex_float *du2, const lapack_int *ipiv, lapack_complex_float *b, lapack_int ldb)
lapack_int LAPACKE_zgttrs (int matrix_layout, char trans, lapack_int n, lapack_int nrhs, const lapack_complex_double *dl, const lapack_complex_double *d, const lapack_complex_double *du, const lapack_complex_double *du2, const lapack_int *ipiv, lapack_complex_double *b, lapack_int ldb)
hbev — the banded-eigenergy section ✨
jobz, uplo, n, kd, then ab with its ldab, then w for the values, then z with ldz. Same shape both times, just float vs double on the complex side. Ate.
lapack_int LAPACKE_chbev (int matrix_layout, char jobz, char uplo, lapack_int n, lapack_int kd, lapack_complex_float *ab, lapack_int ldab, float *w, lapack_complex_float *z, lapack_int ldz)
lapack_int LAPACKE_zhbev (int matrix_layout, char jobz, char uplo, lapack_int n, lapack_int kd, lapack_complex_double *ab, lapack_int ldab, double *w, lapack_complex_double *z, lapack_int ldz)
hbevd is the exact same argument list, just with a d on the end of the name. Literally twins separated by one character 😭
lapack_int LAPACKE_chbevd (int matrix_layout, char jobz, char uplo, lapack_int n, lapack_int kd, lapack_complex_float *ab, lapack_int ldab, float *w, lapack_complex_float *z, lapack_int ldz)
lapack_int LAPACKE_zhbevd (int matrix_layout, char jobz, char uplo, lapack_int n, lapack_int kd, lapack_complex_double *ab, lapack_int ldab, double *w, lapack_complex_double *z, lapack_int ldz)
And hbevx is where it gets extra — jobz, range, uplo, q/ldq, vl, vu, il, iu, abstol, m, w, z, ldz, ifail. Whole group chat invited.
lapack_int LAPACKE_chbevx (int matrix_layout, char jobz, char range, char uplo, lapack_int n, lapack_int kd, lapack_complex_float *ab, lapack_int ldab, lapack_complex_float *q, lapack_int ldq, float vl, float vu, lapack_int il, lapack_int iu, float abstol, lapack_int *m, float *w, lapack_complex_float *z, lapack_int ldz, lapack_int *ifail)
lapack_int LAPACKE_zhbevx (int matrix_layout, char jobz, char range, char uplo, lapack_int n, lapack_int kd, lapack_complex_double *ab, lapack_int ldab, lapack_complex_double *q, lapack_int ldq, double vl, double vu, lapack_int il, lapack_int iu, double abstol, lapack_int *m, double *w, lapack_complex_double *z, lapack_int ldz, lapack_int *ifail)
hbgst, hbgv, hbgvd, hbgvx 🌸
hbgst is the first one in this batch to bring along a second matrix — bb and its ldbb — plus an output x and ldx. It also takes both ka and kb, so like, two band widths, no big deal.
lapack_int LAPACKE_chbgst (int matrix_layout, char vect, char uplo, lapack_int n, lapack_int ka, lapack_int kb, lapack_complex_float *ab, lapack_int ldab, const lapack_complex_float *bb, lapack_int ldbb, lapack_complex_float *x, lapack_int ldx)
lapack_int LAPACKE_zhbgst (int matrix_layout, char vect, char uplo, lapack_int n, lapack_int ka, lapack_int kb, lapack_complex_double *ab, lapack_int ldab, const lapack_complex_double *bb, lapack_int ldbb, lapack_complex_double *x, lapack_int ldx)
hbgv swaps in jobz and gives you w and z/ldz:
lapack_int LAPACKE_chbgv (int matrix_layout, char jobz, char uplo, lapack_int n, lapack_int ka, lapack_int kb, lapack_complex_float *ab, lapack_int ldab, lapack_complex_float *bb, lapack_int ldbb, float *w, lapack_complex_float *z, lapack_int ldz)
lapack_int LAPACKE_zhbgv (int matrix_layout, char jobz, char uplo, lapack_int n, lapack_int ka, lapack_int kb, lapack_complex_double *ab, lapack_int ldab, lapack_complex_double *bb, lapack_int ldbb, double *w, lapack_complex_double *z, lapack_int ldz)
hbgvd — same again, one letter longer, zero argument changes. The way that they truly did not even try to hide it 💀
lapack_int LAPACKE_chbgvd (int matrix_layout, char jobz, char uplo, lapack_int n, lapack_int ka, lapack_int kb, lapack_complex_float *ab, lapack_int ldab, lapack_complex_float *bb, lapack_int ldbb, float *w, lapack_complex_float *z, lapack_int ldz)
lapack_int LAPACKE_zhbgvd (int matrix_layout, char jobz, char uplo, lapack_int n, lapack_int ka, lapack_int kb, lapack_complex_double *ab, lapack_int ldab, lapack_complex_double *bb, lapack_int ldbb, double *w, lapack_complex_double *z, lapack_int ldz)
And hbgvx, the maximalist:
lapack_int LAPACKE_chbgvx (int matrix_layout, char jobz, char range, char uplo, lapack_int n, lapack_int ka, lapack_int kb, lapack_complex_float *ab, lapack_int ldab, lapack_complex_float *bb, lapack_int ldbb, lapack_complex_float *q, lapack_int ldq, float vl, float vu, lapack_int il, lapack_int iu, float abstol, lapack_int *m, float *w, lapack_complex_float *z, lapack_int ldz, lapack_int *ifail)
lapack_int LAPACKE_zhbgvx (int matrix_layout, char jobz, char range, char uplo, lapack_int n, lapack_int ka, lapack_int kb, lapack_complex_double *ab, lapack_int ldab, lapack_complex_double *bb, lapack_int ldbb, lapack_complex_double *q, lapack_int ldq, double vl, double vu, lapack_int il, lapack_int iu, double abstol, lapack_int *m, double *w, lapack_complex_double *z, lapack_int ldz, lapack_int *ifail)
hbtrd 🦋
vect, uplo, n, kd, ab/ldab, then d and e (both plain real arrays, even in the complex versions — cute), then q/ldq.
lapack_int LAPACKE_chbtrd (int matrix_layout, char vect, char uplo, lapack_int n, lapack_int kd, lapack_complex_float *ab, lapack_int ldab, float *d, float *e, lapack_complex_float *q, lapack_int ldq)
lapack_int LAPACKE_zhbtrd (int matrix_layout, char vect, char uplo, lapack_int n, lapack_int kd, lapack_complex_double *ab, lapack_int ldab, double *d, double *e, lapack_complex_double *q, lapack_int ldq)
the he* era 👑
hecon brings anorm and hands you back rcond. heequb gives you s, scond and amax instead. Both take the a/lda pair and both peek at ipiv.
lapack_int LAPACKE_checon (int matrix_layout, char uplo, lapack_int n, const lapack_complex_float *a, lapack_int lda, const lapack_int *ipiv, float anorm, float *rcond)
lapack_int LAPACKE_zhecon (int matrix_layout, char uplo, lapack_int n, const lapack_complex_double *a, lapack_int lda, const lapack_int *ipiv, double anorm, double *rcond)
lapack_int LAPACKE_cheequb (int matrix_layout, char uplo, lapack_int n, const lapack_complex_float *a, lapack_int lda, float *s, float *scond, float *amax)
lapack_int LAPACKE_zheequb (int matrix_layout, char uplo, lapack_int n, const lapack_complex_double *a, lapack_int lda, double *s, double *scond, double *amax)
Then the eigen four-pack. heev and heevd are short and sweet — jobz, uplo, n, a, lda, w:
lapack_int LAPACKE_cheev (int matrix_layout, char jobz, char uplo, lapack_int n, lapack_complex_float *a, lapack_int lda, float *w)
lapack_int LAPACKE_zheev (int matrix_layout, char jobz, char uplo, lapack_int n, lapack_complex_double *a, lapack_int lda, double *w)
lapack_int LAPACKE_cheevd (int matrix_layout, char jobz, char uplo, lapack_int n, lapack_complex_float *a, lapack_int lda, float *w)
lapack_int LAPACKE_zheevd (int matrix_layout, char jobz, char uplo, lapack_int n, lapack_complex_double *a, lapack_int lda, double *w)
heevr adds range, vl, vu, il, iu, abstol, m, z, ldz and the isuppz array:
lapack_int LAPACKE_cheevr (int matrix_layout, char jobz, char range, char uplo, lapack_int n, lapack_complex_float *a, lapack_int lda, float vl, float vu, lapack_int il, lapack_int iu, float abstol, lapack_int *m, float *w, lapack_complex_float *z, lapack_int ldz, lapack_int *isuppz)
lapack_int LAPACKE_zheevr (int matrix_layout, char jobz, char range, char uplo, lapack_int n, lapack_complex_double *a, lapack_int lda, double vl, double vu, lapack_int il, lapack_int iu, double abstol, lapack_int *m, double *w, lapack_complex_double *z, lapack_int ldz, lapack_int *isuppz)
and heevx is the same but trades isuppz for ifail. Same energy, different last argument 💖
lapack_int LAPACKE_cheevx (int matrix_layout, char jobz, char range, char uplo, lapack_int n, lapack_complex_float *a, lapack_int lda, float vl, float vu, lapack_int il, lapack_int iu, float abstol, lapack_int *m, float *w, lapack_complex_float *z, lapack_int ldz, lapack_int *ifail)
lapack_int LAPACKE_zheevx (int matrix_layout, char jobz, char range, char uplo, lapack_int n, lapack_complex_double *a, lapack_int lda, double vl, double vu, lapack_int il, lapack_int iu, double abstol, lapack_int *m, double *w, lapack_complex_double *z, lapack_int ldz, lapack_int *ifail)
hegst / hegv family 🌈
hegst leads with the itype int right after matrix_layout, then uplo, n, a/lda, and a const b/ldb. No jobz here, it's not that kind of party.
lapack_int LAPACKE_chegst (int matrix_layout, lapack_int itype, char uplo, lapack_int n, lapack_complex_float *a, lapack_int lda, const lapack_complex_float *b, lapack_int ldb)
lapack_int LAPACKE_zhegst (int matrix_layout, lapack_int itype, char uplo, lapack_int n, lapack_complex_double *a, lapack_int lda, const lapack_complex_double *b, lapack_int ldb)
hegv, hegvd — itype, jobz, uplo, n, a/lda, b/ldb, w:
lapack_int LAPACKE_chegv (int matrix_layout, lapack_int itype, char jobz, char uplo, lapack_int n, lapack_complex_float *a, lapack_int lda, lapack_complex_float *b, lapack_int ldb, float *w)
lapack_int LAPACKE_zhegv (int matrix_layout, lapack_int itype, char jobz, char uplo, lapack_int n, lapack_complex_double *a, lapack_int lda, lapack_complex_double *b, lapack_int ldb, double *w)
lapack_int LAPACKE_chegvd (int matrix_layout, lapack_int itype, char jobz, char uplo, lapack_int n, lapack_complex_float *a, lapack_int lda, lapack_complex_float *b, lapack_int ldb, float *w)
lapack_int LAPACKE_zhegvd (int matrix_layout, lapack_int itype, char jobz, char uplo, lapack_int n, lapack_complex_double *a, lapack_int lda, lapack_complex_double *b, lapack_int ldb, double *w)
hegvx is the fully loaded one — itype, jobz, range, uplo, n, a/lda, b/ldb, vl, vu, il, iu, abstol, m, w, z/ldz, ifail. Like, she has everything 💅
lapack_int LAPACKE_chegvx (int matrix_layout, lapack_int itype, char jobz, char range, char uplo, lapack_int n, lapack_complex_float *a, lapack_int lda, lapack_complex_float *b, lapack_int ldb, float vl, float vu, lapack_int il, lapack_int iu, float abstol, lapack_int *m, float *w, lapack_complex_float *z, lapack_int ldz, lapack_int *ifail)
lapack_int LAPACKE_zhegvx (int matrix_layout, lapack_int itype, char jobz, char range, char uplo, lapack_int n, lapack_complex_double *a, lapack_int lda, lapack_complex_double *b, lapack_int ldb, double vl, double vu, lapack_int il, lapack_int iu, double abstol, lapack_int *m, double *w, lapack_complex_double *z, lapack_int ldz, lapack_int *ifail)
herfs and then the page just… stops 💀
cherfs is here, and it's bringing the whole a/af/ipiv/b/x situation plus ferr and berr at the end. But the manpage cuts off mid-signature right at const lapack_int — no cap, that's literally where this part of the page ends, bestie. Don't worry, it picks back up in the next chunk 🙈
lapack_int LAPACKE_cherfs (int matrix_layout, char uplo, lapack_int n, lapack_int nrhs, const lapack_complex_float *a, lapack_int lda, const lapack_complex_float *af, lapack_int ldaf, const lapack_int
...and we are STILL in the synopsis bestie 😭 the prototypes do not stop, they simply keep going, and honestly? iconic of them. Zero edits, zero merges, everything exactly as written — here comes the next stretch, picking up mid-call like nothing happened 🫶
*ipiv, const lapack_complex_double *b, lapack_int ldb,
lapack_complex_double *x, lapack_int ldx, double *ferr, double
*berr)
lapack_int LAPACKE_cherfsx (int matrix_layout, char uplo, char equed,
lapack_int n, lapack_int nrhs, const lapack_complex_float *a,
lapack_int lda, const lapack_complex_float *af, lapack_int ldaf,
const lapack_int *ipiv, const float *s, const lapack_complex_float
*b, lapack_int ldb, lapack_complex_float *x, lapack_int ldx, float
*rcond, float *berr, lapack_int n_err_bnds, float *err_bnds_norm,
float *err_bnds_comp, lapack_int nparams, float *params)
lapack_int LAPACKE_zherfsx (int matrix_layout, char uplo, char equed,
lapack_int n, lapack_int nrhs, const lapack_complex_double *a,
lapack_int lda, const lapack_complex_double *af, lapack_int ldaf,
const lapack_int *ipiv, const double *s, const lapack_complex_double
*b, lapack_int ldb, lapack_complex_double *x, lapack_int ldx, double
*rcond, double *berr, lapack_int n_err_bnds, double *err_bnds_norm,
double *err_bnds_comp, lapack_int nparams, double *params)
Like… look at that parameter list. It's giving ✨phone book✨. cherfsx and zherfsx, float and double, matching each other step for step — the symmetry is lowkey gorgeous ngl 💅
Next batch incoming, same energy, <lavender>n_err_bnds</lavender> and <lavender>nparams</lavender> girlies you are SEEN and you are valid 🎀
lapack_int LAPACKE_chesv (int matrix_layout, char uplo, lapack_int n,
lapack_int nrhs, lapack_complex_float *a, lapack_int lda, lapack_int
*ipiv, lapack_complex_float *b, lapack_int ldb)
lapack_int LAPACKE_zhesv (int matrix_layout, char uplo, lapack_int n,
lapack_int nrhs, lapack_complex_double *a, lapack_int lda,
lapack_int *ipiv, lapack_complex_double *b, lapack_int ldb)
lapack_int LAPACKE_chesvx (int matrix_layout, char fact, char uplo,
lapack_int n, lapack_int nrhs, const lapack_complex_float *a,
lapack_int lda, lapack_complex_float *af, lapack_int ldaf,
lapack_int *ipiv, const lapack_complex_float *b, lapack_int ldb,
lapack_complex_float *x, lapack_int ldx, float *rcond, float *ferr,
float *berr)
lapack_int LAPACKE_zhesvx (int matrix_layout, char fact, char uplo,
lapack_int n, lapack_int nrhs, const lapack_complex_double *a,
lapack_int lda, lapack_complex_double *af, lapack_int ldaf,
lapack_int *ipiv, const lapack_complex_double *b, lapack_int ldb,
lapack_complex_double *x, lapack_int ldx, double *rcond, double
*ferr, double *berr)
lapack_int LAPACKE_chesvxx (int matrix_layout, char fact, char uplo,
lapack_int n, lapack_int nrhs, lapack_complex_float *a, lapack_int
lda, lapack_complex_float *af, lapack_int ldaf, lapack_int *ipiv,
char *equed, float *s, lapack_complex_float *b, lapack_int ldb,
lapack_complex_float *x, lapack_int ldx, float *rcond, float
*rpvgrw, float *berr, lapack_int n_err_bnds, float *err_bnds_norm,
float *err_bnds_comp, lapack_int nparams, float *params)
lapack_int LAPACKE_zhesvxx (int matrix_layout, char fact, char uplo,
lapack_int n, lapack_int nrhs, lapack_complex_double *a, lapack_int
lda, lapack_complex_double *af, lapack_int ldaf, lapack_int *ipiv,
char *equed, double *s, lapack_complex_double *b, lapack_int ldb,
lapack_complex_double *x, lapack_int ldx, double *rcond, double
*rpvgrw, double *berr, lapack_int n_err_bnds, double *err_bnds_norm,
double *err_bnds_comp, lapack_int nparams, double *params)
chesv → chesvx → chesvxx, the glow-up pipeline fr fr. And then z-versions of literally all of them because double precision said "anything you can do I can do better" 💀
Okay the <purple>hetr</purple> family now — chetrd, zhetrd, chetrf, zhetrf, chetri, zhetri, chetrs, zhetrs. Short parameter lists, tiny little guys, honestly kind of refreshing after that last block 😭✨
lapack_int LAPACKE_chetrd (int matrix_layout, char uplo, lapack_int n,
lapack_complex_float *a, lapack_int lda, float *d, float *e,
lapack_complex_float *tau)
lapack_int LAPACKE_zhetrd (int matrix_layout, char uplo, lapack_int n,
lapack_complex_double *a, lapack_int lda, double *d, double *e,
lapack_complex_double *tau)
lapack_int LAPACKE_chetrf (int matrix_layout, char uplo, lapack_int n,
lapack_complex_float *a, lapack_int lda, lapack_int *ipiv)
lapack_int LAPACKE_zhetrf (int matrix_layout, char uplo, lapack_int n,
lapack_complex_double *a, lapack_int lda, lapack_int *ipiv)
lapack_int LAPACKE_chetri (int matrix_layout, char uplo, lapack_int n,
lapack_complex_float *a, lapack_int lda, const lapack_int *ipiv)
lapack_int LAPACKE_zhetri (int matrix_layout, char uplo, lapack_int n,
lapack_complex_double *a, lapack_int lda, const lapack_int *ipiv)
lapack_int LAPACKE_chetrs (int matrix_layout, char uplo, lapack_int n,
lapack_int nrhs, const lapack_complex_float *a, lapack_int lda,
const lapack_int *ipiv, lapack_complex_float *b, lapack_int ldb)
lapack_int LAPACKE_zhetrs (int matrix_layout, char uplo, lapack_int n,
lapack_int nrhs, const lapack_complex_double *a, lapack_int lda,
const lapack_int *ipiv, lapack_complex_double *b, lapack_int ldb)
lapack_int LAPACKE_chfrk (int matrix_layout, char transr, char uplo,
char trans, lapack_int n, lapack_int k, float alpha, const
lapack_complex_float *a, lapack_int lda, float beta,
lapack_complex_float *c)
lapack_int LAPACKE_zhfrk (int matrix_layout, char transr, char uplo,
char trans, lapack_int n, lapack_int k, double alpha, const
lapack_complex_double *a, lapack_int lda, double beta,
lapack_complex_double *c)
Note the sneaky <hotpink>transr</hotpink> in chfrk/zhfrk bestie — that's <hotpink>transr</hotpink>, not <hotpink>trans</hotpink>, and both of them show up in the same signature. Two different chars, same line, do NOT mix them up 🙈
The <mint>hgeqz</mint> quartet now — four of them, and they're the big ones. shgeqz, dhgeqz, chgeqz, zhgeqz, all with job, compq, compz, ilo, ihi, and a whole crew of pointers 👑
lapack_int LAPACKE_shgeqz (int matrix_layout, char job, char compq, char
compz, lapack_int n, lapack_int ilo, lapack_int ihi, float *h,
lapack_int ldh, float *t, lapack_int ldt, float *alphar, float
*alphai, float *beta, float *q, lapack_int ldq, float *z, lapack_int
ldz)
lapack_int LAPACKE_dhgeqz (int matrix_layout, char job, char compq, char
compz, lapack_int n, lapack_int ilo, lapack_int ihi, double *h,
lapack_int ldh, double *t, lapack_int ldt, double *alphar, double
*alphai, double *beta, double *q, lapack_int ldq, double *z,
lapack_int ldz)
lapack_int LAPACKE_chgeqz (int matrix_layout, char job, char compq, char
compz, lapack_int n, lapack_int ilo, lapack_int ihi,
lapack_complex_float *h, lapack_int ldh, lapack_complex_float *t,
lapack_int ldt, lapack_complex_float *alpha, lapack_complex_float
*beta, lapack_complex_float *q, lapack_int ldq, lapack_complex_float
*z, lapack_int ldz)
lapack_int LAPACKE_zhgeqz (int matrix_layout, char job, char compq, char
compz, lapack_int n, lapack_int ilo, lapack_int ihi,
lapack_complex_double *h, lapack_int ldh, lapack_complex_double *t,
lapack_int ldt, lapack_complex_double *alpha, lapack_complex_double
*beta, lapack_complex_double *q, lapack_int ldq,
lapack_complex_double *z, lapack_int ldz)
Obsessed with the fact that s/d get <yellow>alphar</yellow> + <yellow>alphai</yellow> (separate real and imaginary parts, two whole variables) while c/z just get <yellow>alpha</yellow> (one complex variable). Different vibes, different signatures, both correct 💖
And now the <purple>hp</purple> era begins. Packed storage besties, this is YOUR moment 🌸 chpcon, zhpcon, chpev, zhpev, chpevd, zhpevd, chpevx, zhpevx — the "d" ones and the "x" ones are not the same and I need you to respect that 💅
lapack_int LAPACKE_chpcon (int matrix_layout, char uplo, lapack_int n,
const lapack_complex_float *ap, const lapack_int *ipiv, float anorm,
float *rcond)
lapack_int LAPACKE_zhpcon (int matrix_layout, char uplo, lapack_int n,
const lapack_complex_double *ap, const lapack_int *ipiv, double
anorm, double *rcond)
lapack_int LAPACKE_chpev (int matrix_layout, char jobz, char uplo,
lapack_int n, lapack_complex_float *ap, float *w,
lapack_complex_float *z, lapack_int ldz)
lapack_int LAPACKE_zhpev (int matrix_layout, char jobz, char uplo,
lapack_int n, lapack_complex_double *ap, double *w,
lapack_complex_double *z, lapack_int ldz)
lapack_int LAPACKE_chpevd (int matrix_layout, char jobz, char uplo,
lapack_int n, lapack_complex_float *ap, float *w,
lapack_complex_float *z, lapack_int ldz)
lapack_int LAPACKE_zhpevd (int matrix_layout, char jobz, char uplo,
lapack_int n, lapack_complex_double *ap, double *w,
lapack_complex_double *z, lapack_int ldz)
lapack_int LAPACKE_chpevx (int matrix_layout, char jobz, char range,
char uplo, lapack_int n, lapack_complex_float *ap, float vl, float
vu, lapack_int il, lapack_int iu, float abstol, lapack_int *m, float
*w, lapack_complex_float *z, lapack_int ldz, lapack_int *ifail)
lapack_int LAPACKE_zhpevx (int matrix_layout, char jobz, char range,
char uplo, lapack_int n, lapack_complex_double *ap, double vl,
double vu, lapack_int il, lapack_int iu, double abstol, lapack_int
*m, double *w, lapack_complex_double *z, lapack_int ldz, lapack_int
*ifail)
chpev vs chpevx: same start, but chpevx said "let me also bring <peach>range</peach>, <peach>vl</peach>, <peach>vu</peach>, <peach>il</peach>, <peach>iu</peach>, <peach>abstol</peach>, <peach>m</peach> and <peach>ifail</peach>" 😭 main character energy honestly, she packed for a whole trip
Now the <purple>hpg</purple> section, arguably the most confusingly-named run of functions in this entire synopsis: chpgst, zhpgst, chpgv, zhpgv, chpgvd, zhpgvd, chpgvx, zhpgvx. They are DIFFERENT functions. They all exist. Read them twice 🧚
lapack_int LAPACKE_chpgst (int matrix_layout, lapack_int itype, char
uplo, lapack_int n, lapack_complex_float *ap, const
lapack_complex_float *bp)
lapack_int LAPACKE_zhpgst (int matrix_layout, lapack_int itype, char
uplo, lapack_int n, lapack_complex_double *ap, const
lapack_complex_double *bp)
lapack_int LAPACKE_chpgv (int matrix_layout, lapack_int itype, char
jobz, char uplo, lapack_int n, lapack_complex_float *ap,
lapack_complex_float *bp, float *w, lapack_complex_float *z,
lapack_int ldz)
lapack_int LAPACKE_zhpgv (int matrix_layout, lapack_int itype, char
jobz, char uplo, lapack_int n, lapack_complex_double *ap,
lapack_complex_double *bp, double *w, lapack_complex_double *z,
lapack_int ldz)
lapack_int LAPACKE_chpgvd (int matrix_layout, lapack_int itype, char
jobz, char uplo, lapack_int n, lapack_complex_float *ap,
lapack_complex_float *bp, float *w, lapack_complex_float *z,
lapack_int ldz)
lapack_int LAPACKE_zhpgvd (int matrix_layout, lapack_int itype, char
jobz, char uplo, lapack_int n, lapack_complex_double *ap,
lapack_complex_double *bp, double *w, lapack_complex_double *z,
lapack_int ldz)
lapack_int LAPACKE_chpgvx (int matrix_layout, lapack_int itype, char
jobz, char range, char uplo, lapack_int n, lapack_complex_float *ap,
lapack_complex_float *bp, float vl, float vu, lapack_int il,
lapack_int iu, float abstol, lapack_int *m, float *w,
lapack_complex_float *z, lapack_int ldz, lapack_int *ifail)
lapack_int LAPACKE_zhpgvx (int matrix_layout, lapack_int itype, char
jobz, char range, char uplo, lapack_int n, lapack_complex_double
*ap, lapack_complex_double *bp, double vl, double vu, lapack_int il,
lapack_int iu, double abstol, lapack_int *m, double *w,
lapack_complex_double *z, lapack_int ldz, lapack_int *ifail)
🫶 <italic>itype</italic>is alapack_intup front here, and it's the very first arg aftermatrix_layout` — every single one of these has it, no skipping, no shortcuts. Slay for consistency tbh.
Last bit of this part — chprfs/zhprfs, chpsv/zhpsv, and then chpsvx which… gets cut off mid-signature 💀 Not me, not an edit, that's literally how this part of the page hands off. <red>Do not try to complete it from memory, the next part finishes it — respect the boundary bestie. 🙈
lapack_int LAPACKE_chprfs (int matrix_layout, char uplo, lapack_int n,
lapack_int nrhs, const lapack_complex_float *ap, const
lapack_complex_float *afp, const lapack_int *ipiv, const
lapack_complex_float *b, lapack_int ldb, lapack_complex_float *x,
lapack_int ldx, float *ferr, float *berr)
lapack_int LAPACKE_zhprfs (int matrix_layout, char uplo, lapack_int n,
lapack_int nrhs, const lapack_complex_double *ap, const
lapack_complex_double *afp, const lapack_int *ipiv, const
lapack_complex_double *b, lapack_int ldb, lapack_complex_double *x,
lapack_int ldx, double *ferr, double *berr)
lapack_int LAPACKE_chpsv (int matrix_layout, char uplo, lapack_int n,
lapack_int nrhs, lapack_complex_float *ap, lapack_int *ipiv,
lapack_complex_float *b, lapack_int ldb)
lapack_int LAPACKE_zhpsv (int matrix_layout, char uplo, lapack_int n,
lapack_int nrhs, lapack_complex_double *ap, lapack_int *ipiv,
lapack_complex_double *b, lapack_int ldb)
lapack_int LAPACKE_chpsvx (int matrix_layout, char fact, char uplo,
And that's where this part stops 😭 <pink>chpsvx</pink> is literally mid-sentence, arms out, waiting for the next chunk. To be continued, bestie 💖
(okay we're literally still inside LAPACKE_chpsvx's argument list, hold that thought bestie, we pick up mid-signature) 🫶
lapack_int n, lapack_int nrhs, const lapack_complex_float *ap,
lapack_complex_float *afp, lapack_int *ipiv, const
lapack_complex_float *b, lapack_int ldb, lapack_complex_float *x,
lapack_int ldx, float *rcond, float *ferr, float *berr)
lapack_int LAPACKE_zhpsvx (int matrix_layout, char fact, char uplo,
lapack_int n, lapack_int nrhs, const lapack_complex_double *ap,
lapack_complex_double *afp, lapack_int *ipiv, const
lapack_complex_double *b, lapack_int ldb, lapack_complex_double *x,
lapack_int ldx, double *rcond, double *ferr, double *berr)
lapack_int LAPACKE_chptrd (int matrix_layout, char uplo, lapack_int n,
lapack_complex_float *ap, float *d, float *e, lapack_complex_float
*tau)
lapack_int LAPACKE_zhptrd (int matrix_layout, char uplo, lapack_int n,
lapack_complex_double *ap, double *d, double *e,
lapack_complex_double *tau)
lapack_int LAPACKE_chptrf (int matrix_layout, char uplo, lapack_int n,
lapack_complex_float *ap, lapack_int *ipiv)
lapack_int LAPACKE_zhptrf (int matrix_layout, char uplo, lapack_int n,
lapack_complex_double *ap, lapack_int *ipiv)
lapack_int LAPACKE_chptri (int matrix_layout, char uplo, lapack_int n,
lapack_complex_float *ap, const lapack_int *ipiv)
lapack_int LAPACKE_zhptri (int matrix_layout, char uplo, lapack_int n,
lapack_complex_double *ap, const lapack_int *ipiv)
lapack_int LAPACKE_chptrs (int matrix_layout, char uplo, lapack_int n,
lapack_int nrhs, const lapack_complex_float *ap, const lapack_int
*ipiv, lapack_complex_float *b, lapack_int ldb)
lapack_int LAPACKE_zhptrs (int matrix_layout, char uplo, lapack_int n,
lapack_int nrhs, const lapack_complex_double *ap, const lapack_int
*ipiv, lapack_complex_double *b, lapack_int ldb)
okay that whole ?hptr* gang — ?hptrd, ?hptrf, ?hptri, ?hptrs — each one comes in a c (single) and z (double) flavour, and the way they all show up in pairs is lowkey so satisfying 💅 like a matched set. And notice ?hptri and ?hptrs take const lapack_int *ipiv while ?hptrf hands you a plain lapack_int *ipiv — one gives, one takes, icon behaviour honestly.
Next up, the ?hsein crew — look at those chars: job, eigsrc, initv. Three chars before you even get to a number. Character select screen energy. 🎮
lapack_int LAPACKE_shsein (int matrix_layout, char job, char eigsrc,
char initv, lapack_logical *select, lapack_int n, const float *h,
lapack_int ldh, float *wr, const float *wi, float *vl, lapack_int
ldvl, float *vr, lapack_int ldvr, lapack_int mm, lapack_int *m,
lapack_int *ifaill, lapack_int *ifailr)
lapack_int LAPACKE_dhsein (int matrix_layout, char job, char eigsrc,
char initv, lapack_logical *select, lapack_int n, const double *h,
lapack_int ldh, double *wr, const double *wi, double *vl, lapack_int
ldvl, double *vr, lapack_int ldvr, lapack_int mm, lapack_int *m,
lapack_int *ifaill, lapack_int *ifailr)
lapack_int LAPACKE_chsein (int matrix_layout, char job, char eigsrc,
char initv, const lapack_logical *select, lapack_int n, const
lapack_complex_float *h, lapack_int ldh, lapack_complex_float *w,
lapack_complex_float *vl, lapack_int ldvl, lapack_complex_float *vr,
lapack_int ldvr, lapack_int mm, lapack_int *m, lapack_int *ifaill,
lapack_int *ifailr)
lapack_int LAPACKE_zhsein (int matrix_layout, char job, char eigsrc,
char initv, const lapack_logical *select, lapack_int n, const
lapack_complex_double *h, lapack_int ldh, lapack_complex_double *w,
lapack_complex_double *vl, lapack_int ldvl, lapack_complex_double
*vr, lapack_int ldvr, lapack_int mm, lapack_int *m, lapack_int
*ifaill, lapack_int *ifailr)
<sparkle>spot the glow-up</sparkle>: the real ones (s/d) get float *wr + const float *wi and a non-const lapack_logical *select; the complex ones (c/z) get a single w instead, and select becomes const lapack_logical *select. Also every single one carries ifaill and ifailr — two little snitch pointers telling you which vectors failed. ngl, very demure, very mindful of them honestly 😌
lapack_int LAPACKE_shseqr (int matrix_layout, char job, char compz,
lapack_int n, lapack_int ilo, lapack_int ihi, float *h, lapack_int
ldh, float *wr, float *wi, float *z, lapack_int ldz)
lapack_int LAPACKE_dhseqr (int matrix_layout, char job, char compz,
lapack_int n, lapack_int ilo, lapack_int ihi, double *h, lapack_int
ldh, double *wr, double *wi, double *z, lapack_int ldz)
lapack_int LAPACKE_chseqr (int matrix_layout, char job, char compz,
lapack_int n, lapack_int ilo, lapack_int ihi, lapack_complex_float
*h, lapack_int ldh, lapack_complex_float *w, lapack_complex_float
*z, lapack_int ldz)
lapack_int LAPACKE_zhseqr (int matrix_layout, char job, char compz,
lapack_int n, lapack_int ilo, lapack_int ihi, lapack_complex_double
*h, lapack_int ldh, lapack_complex_double *w, lapack_complex_double
*z, lapack_int ldz)
ilo and ihi besties!! baby's first balancing indices 🎀 same deal as before: s/d split real and imaginary into wr/wi, c/z keep it in one w. The way the complex versions just don't need the split? main character energy.
Now the LAPACK-auxiliary corner of the header — this is where it gets unhinged in the best way 🌈 because check it, ?lacgv and ?lacn2 don't even take a matrix_layout. Not every function here does. Read your signatures, bestie.
lapack_int LAPACKE_clacgv (lapack_int n, lapack_complex_float *x,
lapack_int incx)
lapack_int LAPACKE_zlacgv (lapack_int n, lapack_complex_double *x,
lapack_int incx)
lapack_int LAPACKE_slacn2 (lapack_int n, float *v, float *x, lapack_int
*isgn, float *est, lapack_int *kase, lapack_int *isave)
lapack_int LAPACKE_dlacn2 (lapack_int n, double *v, double *x,
lapack_int *isgn, double *est, lapack_int *kase, lapack_int *isave)
lapack_int LAPACKE_clacn2 (lapack_int n, lapack_complex_float *v,
lapack_complex_float *x, float *est, lapack_int *kase, lapack_int
*isave)
lapack_int LAPACKE_zlacn2 (lapack_int n, lapack_complex_double *v,
lapack_complex_double *x, double *est, lapack_int *kase, lapack_int
*isave)
manifesting that est pointer is where your estimate lands, and kase/isave are the little state-tracking duo you have to keep passing back in. The real ones get isgn, the complex ones don't — and clacn2/zlacn2 keep est as a real float/double even though v and x are complex. she's bilingual, she's doing both. 💜
Copy-ocracy time 🎀 these ones take m and n and an uplo and just move your data around:
lapack_int LAPACKE_slacpy (int matrix_layout, char uplo, lapack_int m,
lapack_int n, const float *a, lapack_int lda, float *b, lapack_int
ldb)
lapack_int LAPACKE_dlacpy (int matrix_layout, char uplo, lapack_int m,
lapack_int n, const double *a, lapack_int lda, double *b, lapack_int
ldb)
lapack_int LAPACKE_clacpy (int matrix_layout, char uplo, lapack_int m,
lapack_int n, const lapack_complex_float *a, lapack_int lda,
lapack_complex_float *b, lapack_int ldb)
lapack_int LAPACKE_zlacpy (int matrix_layout, char uplo, lapack_int m,
lapack_int n, const lapack_complex_double *a, lapack_int lda,
lapack_complex_double *b, lapack_int ldb)
lapack_int LAPACKE_clacp2 (int matrix_layout, char uplo, lapack_int m,
lapack_int n, const float *a, lapack_int lda, lapack_complex_float
*b, lapack_int ldb)
lapack_int LAPACKE_zlacp2 (int matrix_layout, char uplo, lapack_int m,
lapack_int n, const double *a, lapack_int lda, lapack_complex_double
*b, lapack_int ldb)
?lacpy is same-to-same, ?lacp2 is real-into-complex (that's the 2 doing the work, lowkey iconic 👑). And then the precision-narrowing/widening girlies:
lapack_int LAPACKE_zlag2c (int matrix_layout, lapack_int m, lapack_int
n, const lapack_complex_double *a, lapack_int lda,
lapack_complex_float *sa, lapack_int ldsa)
lapack_int LAPACKE_slag2d (int matrix_layout, lapack_int m, lapack_int
n, const float *sa, lapack_int ldsa, double *a, lapack_int lda)
lapack_int LAPACKE_dlag2s (int matrix_layout, lapack_int m, lapack_int
n, const double *a, lapack_int lda, float *sa, lapack_int ldsa)
lapack_int LAPACKE_clag2z (int matrix_layout, lapack_int m, lapack_int
n, const lapack_complex_float *sa, lapack_int ldsa,
lapack_complex_double *a, lapack_int lda)
certified g2 moment 🧚 — zlag2c, slag2d, dlag2s, clag2z, all four directions of precision hopscotch. And the way the s-prefixed source buffers are named sa while the target is plain a (and vice versa in zlag2c / slag2d)? the naming is consistent, she's consistent, we love her. ✨
lapack_int LAPACKE_slagge (int matrix_layout, lapack_int m, lapack_int
n, lapack_int kl, lapack_int ku, const float *d, float *a,
lapack_int lda, lapack_int *iseed)
lapack_int LAPACKE_dlagge (int matrix_layout, lapack_int m, lapack_int
n, lapack_int kl, lapack_int ku, const double *d, double *a,
lapack_int lda, lapack_int *iseed)
lapack_int LAPACKE_clagge (int matrix_layout, lapack_int m, lapack_int
n, lapack_int kl, lapack_int ku, const float *d,
lapack_complex_float *a, lapack_int lda, lapack_int *iseed)
lapack_int LAPACKE_zlagge (int matrix_layout, lapack_int m, lapack_int
n, lapack_int kl, lapack_int ku, const double *d,
lapack_complex_double *a, lapack_int lda, lapack_int *iseed)
kl, ku, plus iseed — the seed pointer is not const, so yeah, it gets mutated. Keep that in your notes 📓 Also clagge/zlagge take a real d but a complex a — real diagonal, complex everything else. Slay.
okay the return types change here and this is the part where you sit up straight 🌈 LAPACKE_slamch and LAPACKE_dlamch don't return lapack_int — they return float and double, and they take exactly one lonely char cmach. One char. One float. That's it. That's the whole girl. 💀
float LAPACKE_slamch (char cmach)
double LAPACKE_dlamch (char cmach)
float LAPACKE_slange (int matrix_layout, char norm, lapack_int m,
lapack_int n, const float *a, lapack_int lda)
double LAPACKE_dlange (int matrix_layout, char norm, lapack_int m,
lapack_int n, const double *a, lapack_int lda)
float LAPACKE_clange (int matrix_layout, char norm, lapack_int m,
lapack_int n, const lapack_complex_float *a, lapack_int lda)
double LAPACKE_zlange (int matrix_layout, char norm, lapack_int m,
lapack_int n, const lapack_complex_double *a, lapack_int lda)
float LAPACKE_clanhe (int matrix_layout, char norm, char uplo,
lapack_int n, const lapack_complex_float *a, lapack_int lda)
double LAPACKE_zlanhe (int matrix_layout, char norm, char uplo,
lapack_int n, const lapack_complex_double *a, lapack_int lda)
same energy for the ?lange / ?lanhe family — those return float/double too, not lapack_int. And ?lanhe is complex-only (clanhe, zlanhe), takes both norm and uplo, and only an n — square matrix detected, she said no m for me thanks. 🎀
lapack_int LAPACKE_clacrm (int matrix_layout, lapack_int m, lapack_int
n, const lapack_complex_float *a, lapack_int lda, const float *b,
lapack_int ldb, lapack_complex_float *c, lapack_int ldc)
lapack_int LAPACKE_zlacrm (int matrix_layout, lapack_int m, lapack_int
n, const lapack_complex_double *a, lapack_int lda, const double *b,
lapack_int ldb, lapack_complex_double *c, lapack_int ldc)
lapack_int LAPACKE_clarcm (int matrix_layout, lapack_int m, lapack_int
n, const float *a, lapack_int lda, const lapack_complex_float *b,
lapack_int ldb, lapack_complex_float *c, lapack_int ldc)
lapack_int LAPACKE_zlarcm (int matrix_layout, lapack_int m, lapack_int
n, const double *a, lapack_int lda, const lapack_complex_double *b,
lapack_int ldb, lapack_complex_double *c, lapack_int ldc)
do NOT mix up lacrm and larcm bestie I'm begging you 😭 — c...lacrm = complex a, real b; c...larcm = real a, complex b. Both spit a complex c. One letter apart. One letter. That's the whole difference. Write it down, screenshot it, whatever. 🙈
float LAPACKE_slansy (int matrix_layout, char norm, char uplo,
lapack_int n, const float *a, lapack_int lda)
double LAPACKE_dlansy (int matrix_layout, char norm, char uplo,
lapack_int n, const double *a, lapack_int lda)
float LAPACKE_clansy (int matrix_layout, char norm, char uplo,
lapack_int n, const lapack_complex_float *a, lapack_int lda)
double LAPACKE_zlansy (int matrix_layout, char norm, char uplo,
lapack_int n, const lapack_complex_double *a, lapack_int lda)
float LAPACKE_slantr (int matrix_layout, char norm, char uplo, char
diag, lapack_int m, lapack_int n, const float *a, lapack_int lda)
double LAPACKE_dlantr (int matrix_layout, char norm, char uplo, char
diag, lapack_int m, lapack_int n, const double *a, lapack_int lda)
float LAPACKE_clantr (int matrix_layout, char norm, char uplo, char
diag, lapack_int m, lapack_int n, const lapack_complex_float *a,
lapack_int lda)
double LAPACKE_zlantr (int matrix_layout, char norm, char uplo, char
diag, lapack_int m, lapack_int n, const lapack_complex_double *a,
lapack_int lda)
?lansy gets norm + uplo + n; ?lantr gets norm + uplo + diag + m + n — triangle mode unlocked 🔺 and yes, all of these return actual float/double, keep your lapack_int expectations in your purse, they don't apply here 💅
Last stretch for this part, the ?larfb quad coming in hot 🔥:
lapack_int LAPACKE_slarfb (int matrix_layout, char side, char trans,
char direct, char storev, lapack_int m, lapack_int n, lapack_int k,
const float *v, lapack_int ldv, const float *t, lapack_int ldt,
float *c, lapack_int ldc)
lapack_int LAPACKE_dlarfb (int matrix_layout, char side, char trans,
char direct, char storev, lapack_int m, lapack_int n, lapack_int k,
const double *v, lapack_int ldv, const double *t, lapack_int ldt,
double *c, lapack_int ldc)
lapack_int LAPACKE_clarfb (int matrix_layout, char side, char trans,
char direct, char storev, lapack_int m, lapack_int n, lapack_int k,
const lapack_complex_float *v, lapack_int ldv, const
lapack_complex_float *t, lapack_int ldt, lapack_complex_float *c,
lapack_int ldc)
four chars before you even reach a number: side, trans, direct, storev — the quadruple threat, she ate and left absolutely no crumbs 🍓 then m, n, k, then v/ldv/t/ldt/c/ldc. Beautiful. Symmetrical. Chef's kiss. 😌
And the double-complex one is right there, she's literally mid-sentence —
lapack_int LAPACKE_zlarfb (int matrix_layout, char side, char trans,
char direct, char storev, lapack_int m, lapack_int n, lapack_int k,
(and we are cutting off exactly there, bestie — zlarfb's argument list keeps going in the next part, do not @ me, it's not my fault 💀)
…and we're literally walking into the group chat mid-sentence, because this signature started in the last part and it ends right here:
const lapack_complex_double *v, lapack_int ldv, const
lapack_complex_double *t, lapack_int ldt, lapack_complex_double *c,
lapack_int ldc)
okay so don't panic, that's just the tail end of one of those complex-precision calls — ldv, ldt, ldc leading dims, v and t read-only, c getting written into. classic. moving on 💅
✨ the larfg girlies ✨
the Householder family, one per precision. n, alpha, x, incx, tau — she's giving "make this vector point somewhere else" energy and honestly? iconic.
lapack_int LAPACKE_slarfg (lapack_int n, float *alpha, float *x,
lapack_int incx, float *tau)
lapack_int LAPACKE_dlarfg (lapack_int n, double *alpha, double *x,
lapack_int incx, double *tau)
lapack_int LAPACKE_clarfg (lapack_int n, lapack_complex_float *alpha,
lapack_complex_float *x, lapack_int incx, lapack_complex_float *tau)
lapack_int LAPACKE_zlarfg (lapack_int n, lapack_complex_double *alpha,
lapack_complex_double *x, lapack_int incx, lapack_complex_double
*tau)
note how clarfg and zlarfg keep alpha/x/tau typed as the complex flavour, no sneaky floats sneaking in. precision-consistent, we love to see it 🫶
🎀 larft — the triangular glow-up 🎀
these ones got the full matrix_layout, direct, storev, n, k, v, ldv, tau, t, ldt treatment. two chars of vibe (direct, storev) and a whole lotta leading dimensions.
lapack_int LAPACKE_slarft (int matrix_layout, char direct, char storev,
lapack_int n, lapack_int k, const float *v, lapack_int ldv, const
float *tau, float *t, lapack_int ldt)
lapack_int LAPACKE_dlarft (int matrix_layout, char direct, char storev,
lapack_int n, lapack_int k, const double *v, lapack_int ldv, const
double *tau, double *t, lapack_int ldt)
lapack_int LAPACKE_clarft (int matrix_layout, char direct, char storev,
lapack_int n, lapack_int k, const lapack_complex_float *v,
lapack_int ldv, const lapack_complex_float *tau,
lapack_complex_float *t, lapack_int ldt)
lapack_int LAPACKE_zlarft (int matrix_layout, char direct, char storev,
lapack_int n, lapack_int k, const lapack_complex_double *v,
lapack_int ldv, const lapack_complex_double *tau,
lapack_complex_double *t, lapack_int ldt)
v and tau are const (read-only besties, don't touch), t is the one getting filled in. periodt. ✨
🔥 larfx — the low-key workhorse 🔥
side, m, n, v, a scalar tau, c, ldc, and a work array at the end. yes bestie, you do have to hand her a scratch buffer, that's not optional, that *work is right there in the signature.
lapack_int LAPACKE_slarfx (int matrix_layout, char side, lapack_int m,
lapack_int n, const float *v, float tau, float *c, lapack_int ldc,
float *work)
lapack_int LAPACKE_dlarfx (int matrix_layout, char side, lapack_int m,
lapack_int n, const double *v, double tau, double *c, lapack_int
ldc, double *work)
lapack_int LAPACKE_clarfx (int matrix_layout, char side, lapack_int m,
lapack_int n, const lapack_complex_float *v, lapack_complex_float
tau, lapack_complex_float *c, lapack_int ldc, lapack_complex_float
*work)
lapack_int LAPACKE_zlarfx (int matrix_layout, char side, lapack_int m,
lapack_int n, const lapack_complex_double *v, lapack_complex_double
tau, lapack_complex_double *c, lapack_int ldc, lapack_complex_double
*work)
cc: tau is passed by value here, not as a pointer, and if that doesn't scream "I'm the cheap version" idk what does 💀
🌸 larnv — random but make it structured 🌸
idist picks the distribution, iseed is the seed array, n is how many, x is where they land. that's it, that's the whole vibe.
lapack_int LAPACKE_slarnv (lapack_int idist, lapack_int *iseed,
lapack_int n, float *x)
lapack_int LAPACKE_dlarnv (lapack_int idist, lapack_int *iseed,
lapack_int n, double *x)
lapack_int LAPACKE_clarnv (lapack_int idist, lapack_int *iseed,
lapack_int n, lapack_complex_float *x)
lapack_int LAPACKE_zlarnv (lapack_int idist, lapack_int *iseed,
lapack_int n, lapack_complex_double *x)
notice there's no matrix_layout here — no matrix, no layout, we're just filling a vector. main character energy, honestly. 👑
💜 lascl — scale it, but make it type-aware 💜
type, kl, ku, cfrom, cto, m, n, a, lda. and the tea: cfrom/cto are float for clascl but double for zlascl — yes, even the complex float one takes float bounds and the complex double one takes double bounds. look closely, it's right there.
lapack_int LAPACKE_slascl (int matrix_layout, char type, lapack_int kl,
lapack_int ku, float cfrom, float cto, lapack_int m, lapack_int n,
float *a, lapack_int lda)
lapack_int LAPACKE_dlascl (int matrix_layout, char type, lapack_int kl,
lapack_int ku, double cfrom, double cto, lapack_int m, lapack_int n,
double *a, lapack_int lda)
lapack_int LAPACKE_clascl (int matrix_layout, char type, lapack_int kl,
lapack_int ku, float cfrom, float cto, lapack_int m, lapack_int n,
lapack_complex_float *a, lapack_int lda)
lapack_int LAPACKE_zlascl (int matrix_layout, char type, lapack_int kl,
lapack_int ku, double cfrom, double cto, lapack_int m, lapack_int n,
lapack_complex_double *a, lapack_int lda)
kl and ku are right there in all four, so yeah, band info matters 🦋
⭐ laset — fill it in, bestie ⭐
uplo, m, n, alpha, beta, a, lda. alpha goes one place, beta goes another, and you get to choose which via uplo.
lapack_int LAPACKE_slaset (int matrix_layout, char uplo, lapack_int m,
lapack_int n, float alpha, float beta, float *a, lapack_int lda)
lapack_int LAPACKE_dlaset (int matrix_layout, char uplo, lapack_int m,
lapack_int n, double alpha, double beta, double *a, lapack_int lda)
lapack_int LAPACKE_claset (int matrix_layout, char uplo, lapack_int m,
lapack_int n, lapack_complex_float alpha, lapack_complex_float beta,
lapack_complex_float *a, lapack_int lda)
lapack_int LAPACKE_zlaset (int matrix_layout, char uplo, lapack_int m,
lapack_int n, lapack_complex_double alpha, lapack_complex_double
beta, lapack_complex_double *a, lapack_int lda)
🍓 lasrt — sort it out (literally) 🍓
the ONLY two in this whole batch with no matrix_layout. id picks the order, n is the count, d is the array. no matrices invited.
lapack_int LAPACKE_slasrt (char id, lapack_int n, float *d)
lapack_int LAPACKE_dlasrt (char id, lapack_int n, double *d)
and yes, there's no clasrt/zlasrt — complex numbers don't sort like that, that's just how it is, don't shoot the messenger 💀
🧚 lassq — sum of squares, safely 🧚
n, x, incx, then scale and sumsq, both as pointers because she's updating them. and look — classq takes float *scale, float *sumsq while zlassq takes double *scale, double *sumsq. match the precision, always.
lapack_int LAPACKE_slassq (lapack_int n, float *x, lapack_int incx,
float *scale, float *sumsq)
lapack_int LAPACKE_dlassq (lapack_int n, double *x, lapack_int incx,
double *scale, double *sumsq)
lapack_int LAPACKE_classq (lapack_int n, lapack_complex_float *x,
lapack_int incx, float *scale, float *sumsq)
lapack_int LAPACKE_zlassq (lapack_int n, lapack_complex_double *x,
lapack_int incx, double *scale, double *sumsq)
🌈 laswp — the row shuffle 🌈
n, a, lda, k1, k2, ipiv (const int array, hands off), incx. permutation energy, we stan.
lapack_int LAPACKE_slaswp (int matrix_layout, lapack_int n, float *a,
lapack_int lda, lapack_int k1, lapack_int k2, const lapack_int
*ipiv, lapack_int incx)
lapack_int LAPACKE_dlaswp (int matrix_layout, lapack_int n, double *a,
lapack_int lda, lapack_int k1, lapack_int k2, const lapack_int
*ipiv, lapack_int incx)
lapack_int LAPACKE_claswp (int matrix_layout, lapack_int n,
lapack_complex_float *a, lapack_int lda, lapack_int k1, lapack_int
k2, const lapack_int *ipiv, lapack_int incx)
lapack_int LAPACKE_zlaswp (int matrix_layout, lapack_int n,
lapack_complex_double *a, lapack_int lda, lapack_int k1, lapack_int
k2, const lapack_int *ipiv, lapack_int incx)
👑 latms — the whole test-matrix factory 👑
okay this is the big one, look at that parameter list. m, n, dist, iseed, sym, d, mode, cond, dmax, kl, ku, pack, a, lda. she's thorough and we respect it.
lapack_int LAPACKE_slatms (int matrix_layout, lapack_int m, lapack_int
n, char dist, lapack_int *iseed, char sym, float *d, lapack_int
mode, float cond, float dmax, lapack_int kl, lapack_int ku, char
pack, float *a, lapack_int lda)
lapack_int LAPACKE_dlatms (int matrix_layout, lapack_int m, lapack_int
n, char dist, lapack_int *iseed, char sym, double *d, lapack_int
mode, double cond, double dmax, lapack_int kl, lapack_int ku, char
pack, double *a, lapack_int lda)
lapack_int LAPACKE_clatms (int matrix_layout, lapack_int m, lapack_int
n, char dist, lapack_int *iseed, char sym, float *d, lapack_int
mode, float cond, float dmax, lapack_int kl, lapack_int ku, char
pack, lapack_complex_float *a, lapack_int lda)
lapack_int LAPACKE_zlatms (int matrix_layout, lapack_int m, lapack_int
n, char dist, lapack_int *iseed, char sym, double *d, lapack_int
mode, double cond, double dmax, lapack_int kl, lapack_int ku, char
pack, lapack_complex_double *a, lapack_int lda)
and yeah bestie, clatms has float *d and zlatms has double *d — d is real in both complex variants, that's not a typo, that's the design 🫶 also iseed is lapack_int *, not const, because random state moves.
💅 lauum — the triangular product 💅
uplo, n, a, lda. short, sweet, self-contained.
lapack_int LAPACKE_slauum (int matrix_layout, char uplo, lapack_int n,
float *a, lapack_int lda)
lapack_int LAPACKE_dlauum (int matrix_layout, char uplo, lapack_int n,
double *a, lapack_int lda)
lapack_int LAPACKE_clauum (int matrix_layout, char uplo, lapack_int n,
lapack_complex_float *a, lapack_int lda)
lapack_int LAPACKE_zlauum (int matrix_layout, char uplo, lapack_int n,
lapack_complex_double *a, lapack_int lda)
🌸 the op girlies: opgtr & opmtr 🌸
packed storage era. ap in, tau in, q out. ldq doing its lil job.
lapack_int LAPACKE_sopgtr (int matrix_layout, char uplo, lapack_int n,
const float *ap, const float *tau, float *q, lapack_int ldq)
lapack_int LAPACKE_dopgtr (int matrix_layout, char uplo, lapack_int n,
const double *ap, const double *tau, double *q, lapack_int ldq)
and the multiply version, which picks up side and trans too:
lapack_int LAPACKE_sopmtr (int matrix_layout, char side, char uplo, char
trans, lapack_int m, lapack_int n, const float *ap, const float
*tau, float *c, lapack_int ldc)
lapack_int LAPACKE_dopmtr (int matrix_layout, char side, char uplo, char
trans, lapack_int m, lapack_int n, const double *ap, const double
*tau, double *c, lapack_int ldc)
rip to copmtr/zopmtr, they're simply not in this lineup, that's the list, I don't make the rules 😭
🦋 the org saga — generating orthogonal / unitary matrices 🦋
okay this is a whole block of them, all real-precision (s and d only, no c/z here), all const tau, all writing into a.
lapack_int LAPACKE_sorgbr (int matrix_layout, char vect, lapack_int m,
lapack_int n, lapack_int k, float *a, lapack_int lda, const float
*tau)
lapack_int LAPACKE_dorgbr (int matrix_layout, char vect, lapack_int m,
lapack_int n, lapack_int k, double *a, lapack_int lda, const double
*tau)
lapack_int LAPACKE_sorghr (int matrix_layout, lapack_int n, lapack_int
ilo, lapack_int ihi, float *a, lapack_int lda, const float *tau)
lapack_int LAPACKE_dorghr (int matrix_layout, lapack_int n, lapack_int
ilo, lapack_int ihi, double *a, lapack_int lda, const double *tau)
lapack_int LAPACKE_sorglq (int matrix_layout, lapack_int m, lapack_int
n, lapack_int k, float *a, lapack_int lda, const float *tau)
lapack_int LAPACKE_dorglq (int matrix_layout, lapack_int m, lapack_int
n, lapack_int k, double *a, lapack_int lda, const double *tau)
lapack_int LAPACKE_sorgql (int matrix_layout, lapack_int m, lapack_int
n, lapack_int k, float *a, lapack_int lda, const float *tau)
lapack_int LAPACKE_dorgql (int matrix_layout, lapack_int m, lapack_int
n, lapack_int k, double *a, lapack_int lda, const double *tau)
lapack_int LAPACKE_sorgqr (int matrix_layout, lapack_int m, lapack_int
n, lapack_int k, float *a, lapack_int lda, const float *tau)
lapack_int LAPACKE_dorgqr (int matrix_layout, lapack_int m, lapack_int
n, lapack_int k, double *a, lapack_int lda, const double *tau)
lapack_int LAPACKE_sorgrq (int matrix_layout, lapack_int m, lapack_int
n, lapack_int k, float *a, lapack_int lda, const float *tau)
lapack_int LAPACKE_dorgrq (int matrix_layout, lapack_int m, lapack_int
n, lapack_int k, double *a, lapack_int lda, const double *tau)
lapack_int LAPACKE_sorgtr (int matrix_layout, char uplo, lapack_int n,
float *a, lapack_int lda, const float *tau)
lapack_int LAPACKE_dorgtr (int matrix_layout, char uplo, lapack_int n,
double *a, lapack_int lda, const double *tau)
quick vibe check on the shapes: orgbr and the lq/ql/qr/rq crew all take m, n, k. orghr takes n, ilo, ihi instead — different beast, different args, don't mix them up. orgtr takes uplo and just n. know your signature, know yourself ✨
🔥 and now the orm multiply squad 🔥
same family but they apply the thing to c instead of building it. side, trans, and c + ldc show up in every single one.
lapack_int LAPACKE_sormbr (int matrix_layout, char vect, char side, char
trans, lapack_int m, lapack_int n, lapack_int k, const float *a,
lapack_int lda, const float *tau, float *c, lapack_int ldc)
lapack_int LAPACKE_dormbr (int matrix_layout, char vect, char side, char
trans, lapack_int m, lapack_int n, lapack_int k, const double *a,
lapack_int lda, const double *tau, double *c, lapack_int ldc)
lapack_int LAPACKE_sormhr (int matrix_layout, char side, char trans,
lapack_int m, lapack_int n, lapack_int ilo, lapack_int ihi, const
float *a, lapack_int lda, const float *tau, float *c, lapack_int
ldc)
lapack_int LAPACKE_dormhr (int matrix_layout, char side, char trans,
lapack_int m, lapack_int n, lapack_int ilo, lapack_int ihi, const
double *a, lapack_int lda, const double *tau, double *c, lapack_int
ldc)
lapack_int LAPACKE_sormlq (int matrix_layout, char side, char trans,
lapack_int m, lapack_int n, lapack_int k, const float *a, lapack_int
lda, const float *tau, float *c, lapack_int ldc)
lapack_int LAPACKE_dormlq (int matrix_layout, char side, char trans,
lapack_int m, lapack_int n, lapack_int k, const double *a,
lapack_int lda, const double *tau, double *c, lapack_int ldc)
lapack_int LAPACKE_sormql (int matrix_layout, char side, char trans,
lapack_int m, lapack_int n, lapack_int k, const float *a, lapack_int
lda, const float *tau, float *c, lapack_int ldc)
ormbr is the only one with a vect argument up front — it's got two char selectors (vect and side) before trans, which is lowkey a lot but okay girl, we see you. ormhr matches orghr's ilo/ihi thing. everything else rides with k. 🎀
and that's where part 19 dips — the ormql complex siblings are literally queued up next, so don't go anywhere bestie 🫶
Okay so this next batch is the orm girlies and then a whole parade of band-matrix besties — stay with me, they're just prototypes, no lore needed 💅
lapack_int LAPACKE_dormql (int matrix_layout, char side, char trans,
lapack_int m, lapack_int n, lapack_int k, const double *a,
lapack_int lda, const double *tau, double *c, lapack_int ldc)
lapack_int LAPACKE_sormqr (int matrix_layout, char side, char trans,
lapack_int m, lapack_int n, lapack_int k, const float *a, lapack_int
lda, const float *tau, float *c, lapack_int ldc)
lapack_int LAPACKE_dormqr (int matrix_layout, char side, char trans,
lapack_int m, lapack_int n, lapack_int k, const double *a,
lapack_int lda, const double *tau, double *c, lapack_int ldc)
lapack_int LAPACKE_sormrq (int matrix_layout, char side, char trans,
lapack_int m, lapack_int n, lapack_int k, const float *a, lapack_int
lda, const float *tau, float *c, lapack_int ldc)
lapack_int LAPACKE_dormrq (int matrix_layout, char side, char trans,
lapack_int m, lapack_int n, lapack_int k, const double *a,
lapack_int lda, const double *tau, double *c, lapack_int ldc)
lapack_int LAPACKE_sormrz (int matrix_layout, char side, char trans,
lapack_int m, lapack_int n, lapack_int k, lapack_int l, const float
*a, lapack_int lda, const float *tau, float *c, lapack_int ldc)
lapack_int LAPACKE_dormrz (int matrix_layout, char side, char trans,
lapack_int m, lapack_int n, lapack_int k, lapack_int l, const double
*a, lapack_int lda, const double *tau, double *c, lapack_int ldc)
lapack_int LAPACKE_sormtr (int matrix_layout, char side, char uplo, char
trans, lapack_int m, lapack_int n, const float *a, lapack_int lda,
const float *tau, float *c, lapack_int ldc)
lapack_int LAPACKE_dormtr (int matrix_layout, char side, char uplo, char
trans, lapack_int m, lapack_int n, const double *a, lapack_int lda,
const double *tau, double *c, lapack_int ldc)
Obsessed with how ormrz is the only one here with that extra lapack_int l — she brought a plus-one, iconic behavior, no notes 🎀
🌸 the pb* era begins
cond check energy
lapack_int LAPACKE_spbcon (int matrix_layout, char uplo, lapack_int n,
lapack_int kd, const float *ab, lapack_int ldab, float anorm, float
*rcond)
lapack_int LAPACKE_dpbcon (int matrix_layout, char uplo, lapack_int n,
lapack_int kd, const double *ab, lapack_int ldab, double anorm,
double *rcond)
lapack_int LAPACKE_cpbcon (int matrix_layout, char uplo, lapack_int n,
lapack_int kd, const lapack_complex_float *ab, lapack_int ldab,
float anorm, float *rcond)
lapack_int LAPACKE_zpbcon (int matrix_layout, char uplo, lapack_int n,
lapack_int kd, const lapack_complex_double *ab, lapack_int ldab,
double anorm, double *rcond)
equilibration slay
lapack_int LAPACKE_spbequ (int matrix_layout, char uplo, lapack_int n,
lapack_int kd, const float *ab, lapack_int ldab, float *s, float
*scond, float *amax)
lapack_int LAPACKE_dpbequ (int matrix_layout, char uplo, lapack_int n,
lapack_int kd, const double *ab, lapack_int ldab, double *s, double
*scond, double *amax)
lapack_int LAPACKE_cpbequ (int matrix_layout, char uplo, lapack_int n,
lapack_int kd, const lapack_complex_float *ab, lapack_int ldab,
float *s, float *scond, float *amax)
lapack_int LAPACKE_zpbequ (int matrix_layout, char uplo, lapack_int n,
lapack_int kd, const lapack_complex_double *ab, lapack_int ldab,
double *s, double *scond, double *amax)
refinement, but make it fashion
lapack_int LAPACKE_spbrfs (int matrix_layout, char uplo, lapack_int n,
lapack_int kd, lapack_int nrhs, const float *ab, lapack_int ldab,
const float *afb, lapack_int ldafb, const float *b, lapack_int ldb,
float *x, lapack_int ldx, float *ferr, float *berr)
lapack_int LAPACKE_dpbrfs (int matrix_layout, char uplo, lapack_int n,
lapack_int kd, lapack_int nrhs, const double *ab, lapack_int ldab,
const double *afb, lapack_int ldafb, const double *b, lapack_int
ldb, double *x, lapack_int ldx, double *ferr, double *berr)
lapack_int LAPACKE_cpbrfs (int matrix_layout, char uplo, lapack_int n,
lapack_int kd, lapack_int nrhs, const lapack_complex_float *ab,
lapack_int ldab, const lapack_complex_float *afb, lapack_int ldafb,
const lapack_complex_float *b, lapack_int ldb, lapack_complex_float
*x, lapack_int ldx, float *ferr, float *berr)
lapack_int LAPACKE_zpbrfs (int matrix_layout, char uplo, lapack_int n,
lapack_int kd, lapack_int nrhs, const lapack_complex_double *ab,
lapack_int ldab, const lapack_complex_double *afb, lapack_int ldafb,
const lapack_complex_double *b, lapack_int ldb,
lapack_complex_double *x, lapack_int ldx, double *ferr, double
*berr)
Notice how the ferr/berr pair rides at the end of every single one? Consistency queen behavior, we love a predictable finale ✨
factorization, the prequel
lapack_int LAPACKE_spbstf (int matrix_layout, char uplo, lapack_int n,
lapack_int kb, float *bb, lapack_int ldbb)
lapack_int LAPACKE_dpbstf (int matrix_layout, char uplo, lapack_int n,
lapack_int kb, double *bb, lapack_int ldbb)
lapack_int LAPACKE_cpbstf (int matrix_layout, char uplo, lapack_int n,
lapack_int kb, lapack_complex_float *bb, lapack_int ldbb)
lapack_int LAPACKE_zpbstf (int matrix_layout, char uplo, lapack_int n,
lapack_int kb, lapack_complex_double *bb, lapack_int ldbb)
Side quest: yes, these usekbandbbandldbbwhile their neighbors usekd,ab,ldab. That's just how the page spells them — copy them exactly, don't get cute with it 🙈
straight up solving
lapack_int LAPACKE_spbsv (int matrix_layout, char uplo, lapack_int n,
lapack_int kd, lapack_int nrhs, float *ab, lapack_int ldab, float
*b, lapack_int ldb)
lapack_int LAPACKE_dpbsv (int matrix_layout, char uplo, lapack_int n,
lapack_int kd, lapack_int nrhs, double *ab, lapack_int ldab, double
*b, lapack_int ldb)
lapack_int LAPACKE_cpbsv (int matrix_layout, char uplo, lapack_int n,
lapack_int kd, lapack_int nrhs, lapack_complex_float *ab, lapack_int
ldab, lapack_complex_float *b, lapack_int ldb)
lapack_int LAPACKE_zpbsv (int matrix_layout, char uplo, lapack_int n,
lapack_int kd, lapack_int nrhs, lapack_complex_double *ab,
lapack_int ldab, lapack_complex_double *b, lapack_int ldb)
solving but with ✨extras✨
lapack_int LAPACKE_spbsvx (int matrix_layout, char fact, char uplo,
lapack_int n, lapack_int kd, lapack_int nrhs, float *ab, lapack_int
ldab, float *afb, lapack_int ldafb, char *equed, float *s, float *b,
lapack_int ldb, float *x, lapack_int ldx, float *rcond, float *ferr,
float *berr)
lapack_int LAPACKE_dpbsvx (int matrix_layout, char fact, char uplo,
lapack_int n, lapack_int kd, lapack_int nrhs, double *ab, lapack_int
ldab, double *afb, lapack_int ldafb, char *equed, double *s, double
*b, lapack_int ldb, double *x, lapack_int ldx, double *rcond, double
*ferr, double *berr)
lapack_int LAPACKE_cpbsvx (int matrix_layout, char fact, char uplo,
lapack_int n, lapack_int kd, lapack_int nrhs, lapack_complex_float
*ab, lapack_int ldab, lapack_complex_float *afb, lapack_int ldafb,
char *equed, float *s, lapack_complex_float *b, lapack_int ldb,
lapack_complex_float *x, lapack_int ldx, float *rcond, float *ferr,
float *berr)
lapack_int LAPACKE_zpbsvx (int matrix_layout, char fact, char uplo,
lapack_int n, lapack_int kd, lapack_int nrhs, lapack_complex_double
*ab, lapack_int ldab, lapack_complex_double *afb, lapack_int ldafb,
char *equed, double *s, lapack_complex_double *b, lapack_int ldb,
lapack_complex_double *x, lapack_int ldx, double *rcond, double
*ferr, double *berr)
Not the char *equed and the float *s / double *s sneaking in between all the complex types 😭 she's got range, she contains multitudes 🦋
the trf trio-adjacent moment
lapack_int LAPACKE_spbtrf (int matrix_layout, char uplo, lapack_int n,
lapack_int kd, float *ab, lapack_int ldab)
lapack_int LAPACKE_dpbtrf (int matrix_layout, char uplo, lapack_int n,
lapack_int kd, double *ab, lapack_int ldab)
lapack_int LAPACKE_cpbtrf (int matrix_layout, char uplo, lapack_int n,
lapack_int kd, lapack_complex_float *ab, lapack_int ldab)
lapack_int LAPACKE_zpbtrf (int matrix_layout, char uplo, lapack_int n,
lapack_int kd, lapack_complex_double *ab, lapack_int ldab)
and the solve to match 🫶
lapack_int LAPACKE_spbtrs (int matrix_layout, char uplo, lapack_int n,
lapack_int kd, lapack_int nrhs, const float *ab, lapack_int ldab,
float *b, lapack_int ldb)
lapack_int LAPACKE_dpbtrs (int matrix_layout, char uplo, lapack_int n,
lapack_int kd, lapack_int nrhs, const double *ab, lapack_int ldab,
double *b, lapack_int ldb)
lapack_int LAPACKE_cpbtrs (int matrix_layout, char uplo, lapack_int n,
lapack_int kd, lapack_int nrhs, const lapack_complex_float *ab,
lapack_int ldab, lapack_complex_float *b, lapack_int ldb)
lapack_int LAPACKE_zpbtrs (int matrix_layout, char uplo, lapack_int n,
lapack_int kd, lapack_int nrhs, const lapack_complex_double *ab,
lapack_int ldab, lapack_complex_double *b, lapack_int ldb)
Quick vibe check: trf takes the ab as plain *ab, but trs takes it as const *ab — that const is doing a whole lot of emotional labor and we respect her 💅
🧚 the pf* girls (packed storage, packed with drama)
trf but packed
lapack_int LAPACKE_spftrf (int matrix_layout, char transr, char uplo,
lapack_int n, float *a)
lapack_int LAPACKE_dpftrf (int matrix_layout, char transr, char uplo,
lapack_int n, double *a)
lapack_int LAPACKE_cpftrf (int matrix_layout, char transr, char uplo,
lapack_int n, lapack_complex_float *a)
lapack_int LAPACKE_zpftrf (int matrix_layout, char transr, char uplo,
lapack_int n, lapack_complex_double *a)
Heads up bestie</> 🎀 these switched from uplo-then-trans energy to transr — yes it's spelled transr, yes it's different, no you may not "correct" it, that's literally the whole point of the flag 🌸
inverse, packed, effortless
lapack_int LAPACKE_spftri (int matrix_layout, char transr, char uplo,
lapack_int n, float *a)
lapack_int LAPACKE_dpftri (int matrix_layout, char transr, char uplo,
lapack_int n, double *a)
lapack_int LAPACKE_cpftri (int matrix_layout, char transr, char uplo,
lapack_int n, lapack_complex_float *a)
lapack_int LAPACKE_zpftri (int matrix_layout, char transr, char uplo,
lapack_int n, lapack_complex_double *a)
solve time, packed edition
lapack_int LAPACKE_spftrs (int matrix_layout, char transr, char uplo,
lapack_int n, lapack_int nrhs, const float *a, float *b, lapack_int
ldb)
lapack_int LAPACKE_dpftrs (int matrix_layout, char transr, char uplo,
lapack_int n, lapack_int nrhs, const double *a, double *b,
lapack_int ldb)
lapack_int LAPACKE_cpftrs (int matrix_layout, char transr, char uplo,
lapack_int n, lapack_int nrhs, const lapack_complex_float *a,
lapack_complex_float *b, lapack_int ldb)
lapack_int LAPACKE_zpftrs (int matrix_layout, char transr, char uplo,
lapack_int n, lapack_int nrhs, const lapack_complex_double *a,
lapack_complex_double *b, lapack_int ldb)
See how the pf crew has no lda at all? No leading dimension, no problems, she's low-maintenance like that 😌
👑 the po* section, where things get uppercase-N normal
cond, but for symmetric/Hermitian pos-def
lapack_int LAPACKE_spocon (int matrix_layout, char uplo, lapack_int n,
const float *a, lapack_int lda, float anorm, float *rcond)
lapack_int LAPACKE_dpocon (int matrix_layout, char uplo, lapack_int n,
const double *a, lapack_int lda, double anorm, double *rcond)
lapack_int LAPACKE_cpocon (int matrix_layout, char uplo, lapack_int n,
const lapack_complex_float *a, lapack_int lda, float anorm, float
*rcond)
lapack_int LAPACKE_zpocon (int matrix_layout, char uplo, lapack_int n,
const lapack_complex_double *a, lapack_int lda, double anorm, double
*rcond)
Ngl theconston theahere is a whole mood — she's read-only, she's not getting messed with, periodt 💀
equ, the glow-up pass
lapack_int LAPACKE_spoequ (int matrix_layout, lapack_int n, const float
*a, lapack_int lda, float *s, float *scond, float *amax)
lapack_int LAPACKE_dpoequ (int matrix_layout, lapack_int n, const double
*a, lapack_int lda, double *s, double *scond, double *amax)
lapack_int LAPACKE_cpoequ (int matrix_layout, lapack_int n, const
lapack_complex_float *a, lapack_int lda, float *s, float *scond,
float *amax)
And that's exactly where this part wraps — mid-poequ family, no z in sight yet, so don't you dare assume one's coming next 👀 stay tuned 💖
okay bestie, buckle UP, because this stretch of the synopsis is basically a parade of LAPACK's positive-definite era 💅 every single one of these bad boys hands you back a lapack_int and starts with matrix_layout, that's the vibe check they all pass. no cap. ✨
first up, the poequ girlies — they take n, a, lda and hand you back s, scond and amax:
lapack_int LAPACKE_zpoequ (int matrix_layout, lapack_int n, const
lapack_complex_double *a, lapack_int lda, double *s, double *scond,
double *amax)
and then the poequb fam, one for each of the four precisions (s, d, c, z — you can literally see which is which from the types, iykyk 🦋):
lapack_int LAPACKE_spoequb (int matrix_layout, lapack_int n, const float
*a, lapack_int lda, float *s, float *scond, float *amax)
lapack_int LAPACKE_dpoequb (int matrix_layout, lapack_int n, const
double *a, lapack_int lda, double *s, double *scond, double *amax)
lapack_int LAPACKE_cpoequb (int matrix_layout, lapack_int n, const
lapack_complex_float *a, lapack_int lda, float *s, float *scond,
float *amax)
lapack_int LAPACKE_zpoequb (int matrix_layout, lapack_int n, const
lapack_complex_double *a, lapack_int lda, double *s, double *scond,
double *amax)
🎀 the porfs crew — refinement era
the way these take both a and af, plus lda and ldaf, and hand you x alongside ferr and berr… main character energy fr fr 🔥
lapack_int LAPACKE_sporfs (int matrix_layout, char uplo, lapack_int n,
lapack_int nrhs, const float *a, lapack_int lda, const float *af,
lapack_int ldaf, const float *b, lapack_int ldb, float *x,
lapack_int ldx, float *ferr, float *berr)
lapack_int LAPACKE_dporfs (int matrix_layout, char uplo, lapack_int n,
lapack_int nrhs, const double *a, lapack_int lda, const double *af,
lapack_int ldaf, const double *b, lapack_int ldb, double *x,
lapack_int ldx, double *ferr, double *berr)
lapack_int LAPACKE_cporfs (int matrix_layout, char uplo, lapack_int n,
lapack_int nrhs, const lapack_complex_float *a, lapack_int lda,
const lapack_complex_float *af, lapack_int ldaf, const
lapack_complex_float *b, lapack_int ldb, lapack_complex_float *x,
lapack_int ldx, float *ferr, float *berr)
lapack_int LAPACKE_zporfs (int matrix_layout, char uplo, lapack_int n,
lapack_int nrhs, const lapack_complex_double *a, lapack_int lda,
const lapack_complex_double *af, lapack_int ldaf, const
lapack_complex_double *b, lapack_int ldb, lapack_complex_double *x,
lapack_int ldx, double *ferr, double *berr)
and then porfsx said "hold my matcha" 🍓 — extra equed on the way in, extra s, extra rcond, and the whole error-bounds situation (n_err_bnds, err_bnds_norm, err_bnds_comp, nparams, params). it's giving thorough:
lapack_int LAPACKE_sporfsx (int matrix_layout, char uplo, char equed,
lapack_int n, lapack_int nrhs, const float *a, lapack_int lda, const
float *af, lapack_int ldaf, const float *s, const float *b,
lapack_int ldb, float *x, lapack_int ldx, float *rcond, float *berr,
lapack_int n_err_bnds, float *err_bnds_norm, float *err_bnds_comp,
lapack_int nparams, float *params)
lapack_int LAPACKE_dporfsx (int matrix_layout, char uplo, char equed,
lapack_int n, lapack_int nrhs, const double *a, lapack_int lda,
const double *af, lapack_int ldaf, const double *s, const double *b,
lapack_int ldb, double *x, lapack_int ldx, double *rcond, double
*berr, lapack_int n_err_bnds, double *err_bnds_norm, double
*err_bnds_comp, lapack_int nparams, double *params)
lapack_int LAPACKE_cporfsx (int matrix_layout, char uplo, char equed,
lapack_int n, lapack_int nrhs, const lapack_complex_float *a,
lapack_int lda, const lapack_complex_float *af, lapack_int ldaf,
const float *s, const lapack_complex_float *b, lapack_int ldb,
lapack_complex_float *x, lapack_int ldx, float *rcond, float *berr,
lapack_int n_err_bnds, float *err_bnds_norm, float *err_bnds_comp,
lapack_int nparams, float *params)
lapack_int LAPACKE_zporfsx (int matrix_layout, char uplo, char equed,
lapack_int n, lapack_int nrhs, const lapack_complex_double *a,
lapack_int lda, const lapack_complex_double *af, lapack_int ldaf,
const double *s, const lapack_complex_double *b, lapack_int ldb,
lapack_complex_double *x, lapack_int ldx, double *rcond, double
*berr, lapack_int n_err_bnds, double *err_bnds_norm, double
*err_bnds_comp, lapack_int nparams, double *params)
notice how the complex ones still take a real s, rcond, berr? that's not a typo bestie, that's just how they roll 💅
👑 posv — the four originals
quadratic in a, b, and honestly in my heart:
lapack_int LAPACKE_sposv (int matrix_layout, char uplo, lapack_int n,
lapack_int nrhs, float *a, lapack_int lda, float *b, lapack_int ldb)
lapack_int LAPACKE_dposv (int matrix_layout, char uplo, lapack_int n,
lapack_int nrhs, double *a, lapack_int lda, double *b, lapack_int
ldb)
lapack_int LAPACKE_cposv (int matrix_layout, char uplo, lapack_int n,
lapack_int nrhs, lapack_complex_float *a, lapack_int lda,
lapack_complex_float *b, lapack_int ldb)
lapack_int LAPACKE_zposv (int matrix_layout, char uplo, lapack_int n,
lapack_int nrhs, lapack_complex_double *a, lapack_int lda,
lapack_complex_double *b, lapack_int ldb)
🫶 ok but lowkey pay attention to which pointers areconstand which aren't —sposv/dposv/cposv/zposvhave a mutableaandb, unlike a bunch of the others. the signatures do not lie.
then the two mixed-precision-cuties, dsposv and zcposv, who bring along x, ldx and an iter pointer (lapack_int *iter — they're iterating, periodt):
lapack_int LAPACKE_dsposv (int matrix_layout, char uplo, lapack_int n,
lapack_int nrhs, double *a, lapack_int lda, double *b, lapack_int
ldb, double *x, lapack_int ldx, lapack_int *iter)
lapack_int LAPACKE_zcposv (int matrix_layout, char uplo, lapack_int n,
lapack_int nrhs, lapack_complex_double *a, lapack_int lda,
lapack_complex_double *b, lapack_int ldb, lapack_complex_double *x,
lapack_int ldx, lapack_int *iter)
✨ posvx — now with fact and equed
they showed up with fact, uplo, equed, s, rcond, ferr, berr… it's giving full glam 🌸
lapack_int LAPACKE_sposvx (int matrix_layout, char fact, char uplo,
lapack_int n, lapack_int nrhs, float *a, lapack_int lda, float *af,
lapack_int ldaf, char *equed, float *s, float *b, lapack_int ldb,
float *x, lapack_int ldx, float *rcond, float *ferr, float *berr)
lapack_int LAPACKE_dposvx (int matrix_layout, char fact, char uplo,
lapack_int n, lapack_int nrhs, double *a, lapack_int lda, double
*af, lapack_int ldaf, char *equed, double *s, double *b, lapack_int
ldb, double *x, lapack_int ldx, double *rcond, double *ferr, double
*berr)
lapack_int LAPACKE_cposvx (int matrix_layout, char fact, char uplo,
lapack_int n, lapack_int nrhs, lapack_complex_float *a, lapack_int
lda, lapack_complex_float *af, lapack_int ldaf, char *equed, float
*s, lapack_complex_float *b, lapack_int ldb, lapack_complex_float
*x, lapack_int ldx, float *rcond, float *ferr, float *berr)
lapack_int LAPACKE_zposvx (int matrix_layout, char fact, char uplo,
lapack_int n, lapack_int nrhs, lapack_complex_double *a, lapack_int
lda, lapack_complex_double *af, lapack_int ldaf, char *equed, double
*s, lapack_complex_double *b, lapack_int ldb, lapack_complex_double
*x, lapack_int ldx, double *rcond, double *ferr, double *berr)
and posvxx said "add rpvgrw and the error bounds, we're going ✨all in✨":
lapack_int LAPACKE_sposvxx (int matrix_layout, char fact, char uplo,
lapack_int n, lapack_int nrhs, float *a, lapack_int lda, float *af,
lapack_int ldaf, char *equed, float *s, float *b, lapack_int ldb,
float *x, lapack_int ldx, float *rcond, float *rpvgrw, float *berr,
lapack_int n_err_bnds, float *err_bnds_norm, float *err_bnds_comp,
lapack_int nparams, float *params)
lapack_int LAPACKE_dposvxx (int matrix_layout, char fact, char uplo,
lapack_int n, lapack_int nrhs, double *a, lapack_int lda, double
*af, lapack_int ldaf, char *equed, double *s, double *b, lapack_int
ldb, double *x, lapack_int ldx, double *rcond, double *rpvgrw,
double *berr, lapack_int n_err_bnds, double *err_bnds_norm, double
*err_bnds_comp, lapack_int nparams, double *params)
lapack_int LAPACKE_cposvxx (int matrix_layout, char fact, char uplo,
lapack_int n, lapack_int nrhs, lapack_complex_float *a, lapack_int
lda, lapack_complex_float *af, lapack_int ldaf, char *equed, float
*s, lapack_complex_float *b, lapack_int ldb, lapack_complex_float
*x, lapack_int ldx, float *rcond, float *rpvgrw, float *berr,
lapack_int n_err_bnds, float *err_bnds_norm, float *err_bnds_comp,
lapack_int nparams, float *params)
lapack_int LAPACKE_zposvxx (int matrix_layout, char fact, char uplo,
lapack_int n, lapack_int nrhs, lapack_complex_double *a, lapack_int
lda, lapack_complex_double *af, lapack_int ldaf, char *equed, double
*s, lapack_complex_double *b, lapack_int ldb, lapack_complex_double
*x, lapack_int ldx, double *rcond, double *rpvgrw, double *berr,
lapack_int n_err_bnds, double *err_bnds_norm, double *err_bnds_comp,
lapack_int nparams, double *params)
💜 potrf2 then potrf
okay so the 2 versions come first in the page, and they're the short ones — just matrix_layout, uplo, n, a, lda:
lapack_int LAPACKE_spotrf2 (int matrix_layout, char uplo, lapack_int n,
float *a, lapack_int lda)
lapack_int LAPACKE_dpotrf2 (int matrix_layout, char uplo, lapack_int n,
double *a, lapack_int lda)
lapack_int LAPACKE_cpotrf2 (int matrix_layout, char uplo, lapack_int n,
lapack_complex_float *a, lapack_int lda)
lapack_int LAPACKE_zpotrf2 (int matrix_layout, char uplo, lapack_int n,
lapack_complex_double *a, lapack_int lda)
and their non-2 twins, identical signature, living right after:
lapack_int LAPACKE_spotrf (int matrix_layout, char uplo, lapack_int n,
float *a, lapack_int lda)
lapack_int LAPACKE_dpotrf (int matrix_layout, char uplo, lapack_int n,
double *a, lapack_int lda)
lapack_int LAPACKE_cpotrf (int matrix_layout, char uplo, lapack_int n,
lapack_complex_float *a, lapack_int lda)
lapack_int LAPACKE_zpotrf (int matrix_layout, char uplo, lapack_int n,
lapack_complex_double *a, lapack_int lda)
no bestie I will NOT be picking favourites between them 🙈
🧚 potri and potrs
potri is also the tiny five-arg squad:
lapack_int LAPACKE_spotri (int matrix_layout, char uplo, lapack_int n,
float *a, lapack_int lda)
lapack_int LAPACKE_dpotri (int matrix_layout, char uplo, lapack_int n,
double *a, lapack_int lda)
lapack_int LAPACKE_cpotri (int matrix_layout, char uplo, lapack_int n,
lapack_complex_float *a, lapack_int lda)
lapack_int LAPACKE_zpotri (int matrix_layout, char uplo, lapack_int n,
lapack_complex_double *a, lapack_int lda)
potrs brings nrhs along and — heads up — its a is const while b is mutable:
lapack_int LAPACKE_spotrs (int matrix_layout, char uplo, lapack_int n,
lapack_int nrhs, const float *a, lapack_int lda, float *b,
lapack_int ldb)
lapack_int LAPACKE_dpotrs (int matrix_layout, char uplo, lapack_int n,
lapack_int nrhs, const double *a, lapack_int lda, double *b,
lapack_int ldb)
lapack_int LAPACKE_cpotrs (int matrix_layout, char uplo, lapack_int n,
lapack_int nrhs, const lapack_complex_float *a, lapack_int lda,
lapack_complex_float *b, lapack_int ldb)
lapack_int LAPACKE_zpotrs (int matrix_layout, char uplo, lapack_int n,
lapack_int nrhs, const lapack_complex_double *a, lapack_int lda,
lapack_complex_double *b, lapack_int ldb)
🦋 packed-storage o'clock — ppcon and ppequ
now we're in ap-town (packed, no lda, she said "who needs a leading dimension anyway") 😭 ppcon takes anorm and gives you rcond:
lapack_int LAPACKE_sppcon (int matrix_layout, char uplo, lapack_int n,
const float *ap, float anorm, float *rcond)
lapack_int LAPACKE_dppcon (int matrix_layout, char uplo, lapack_int n,
const double *ap, double anorm, double *rcond)
lapack_int LAPACKE_cppcon (int matrix_layout, char uplo, lapack_int n,
const lapack_complex_float *ap, float anorm, float *rcond)
lapack_int LAPACKE_zppcon (int matrix_layout, char uplo, lapack_int n,
const lapack_complex_double *ap, double anorm, double *rcond)
and ppequ gives you the s, scond, amax trio, same deal, packed:
lapack_int LAPACKE_sppequ (int matrix_layout, char uplo, lapack_int n,
const float *ap, float *s, float *scond, float *amax)
lapack_int LAPACKE_dppequ (int matrix_layout, char uplo, lapack_int n,
const double *ap, double *s, double *scond, double *amax)
lapack_int LAPACKE_cppequ (int matrix_layout, char uplo, lapack_int n,
const lapack_complex_float *ap, float *s, float *scond, float *amax)
lapack_int LAPACKE_zppequ (int matrix_layout, char uplo, lapack_int n,
const lapack_complex_double *ap, double *s, double *scond, double
*amax)
that's the whole sweep of this chunk — every lapack_int, every const, every lda/ldaf/ldb/ldx, every n_err_bnds, all accounted for, periodt 🔥 keeping going, there's more synopsis to slay ⭐
...and the packed-storage saga continues, bestie, because LAPACK is obsessed with not storing your zeros 💅. Same cast of characters as always: matrix_layout, uplo, n, nrhs, ldb, ldx, ferr, berr — you already know them, you're practically mutuals at this point.
🫶 the pprfs girlies — packed positive-definite refine & solve
lapack_int LAPACKE_spprfs (int matrix_layout, char uplo, lapack_int n,
lapack_int nrhs, const float *ap, const float *afp, const float *b,
lapack_int ldb, float *x, lapack_int ldx, float *ferr, float *berr)
lapack_int LAPACKE_dpprfs (int matrix_layout, char uplo, lapack_int n,
lapack_int nrhs, const double *ap, const double *afp, const double
*b, lapack_int ldb, double *x, lapack_int ldx, double *ferr, double
*berr)
lapack_int LAPACKE_cpprfs (int matrix_layout, char uplo, lapack_int n,
lapack_int nrhs, const lapack_complex_float *ap, const
lapack_complex_float *afp, const lapack_complex_float *b, lapack_int
ldb, lapack_complex_float *x, lapack_int ldx, float *ferr, float
*berr)
lapack_int LAPACKE_zpprfs (int matrix_layout, char uplo, lapack_int n,
lapack_int nrhs, const lapack_complex_double *ap, const
lapack_complex_double *afp, const lapack_complex_double *b,
lapack_int ldb, lapack_complex_double *x, lapack_int ldx, double
*ferr, double *berr)
Four precisions, one vibe ✨. Notice ferr and berr are always real even when everything else is complex — that's not a typo, that's just how she is 💅.
🎀 ppsv — packed, positive-definite, direct solve
lapack_int LAPACKE_sppsv (int matrix_layout, char uplo, lapack_int n,
lapack_int nrhs, float *ap, float *b, lapack_int ldb)
lapack_int LAPACKE_dppsv (int matrix_layout, char uplo, lapack_int n,
lapack_int nrhs, double *ap, double *b, lapack_int ldb)
lapack_int LAPACKE_cppsv (int matrix_layout, char uplo, lapack_int n,
lapack_int nrhs, lapack_complex_float *ap, lapack_complex_float *b,
lapack_int ldb)
lapack_int LAPACKE_zppsv (int matrix_layout, char uplo, lapack_int n,
lapack_int nrhs, lapack_complex_double *ap, lapack_complex_double
*b, lapack_int ldb)
No afp, no ferr, no berr — she's low-maintenance, she just goes 🔥.
💖 ppsvx — the one with the whole entire entourage
lapack_int LAPACKE_sppsvx (int matrix_layout, char fact, char uplo,
lapack_int n, lapack_int nrhs, float *ap, float *afp, char *equed,
float *s, float *b, lapack_int ldb, float *x, lapack_int ldx, float
*rcond, float *ferr, float *berr)
lapack_int LAPACKE_dppsvx (int matrix_layout, char fact, char uplo,
lapack_int n, lapack_int nrhs, double *ap, double *afp, char *equed,
double *s, double *b, lapack_int ldb, double *x, lapack_int ldx,
double *rcond, double *ferr, double *berr)
lapack_int LAPACKE_cppsvx (int matrix_layout, char fact, char uplo,
lapack_int n, lapack_int nrhs, lapack_complex_float *ap,
lapack_complex_float *afp, char *equed, float *s,
lapack_complex_float *b, lapack_int ldb, lapack_complex_float *x,
lapack_int ldx, float *rcond, float *ferr, float *berr)
lapack_int LAPACKE_zppsvx (int matrix_layout, char fact, char uplo,
lapack_int n, lapack_int nrhs, lapack_complex_double *ap,
lapack_complex_double *afp, char *equed, double *s,
lapack_complex_double *b, lapack_int ldb, lapack_complex_double *x,
lapack_int ldx, double *rcond, double *ferr, double *berr)
fact, equed, s, rcond… it's giving full glam 😭. And again: s, rcond, ferr and berr stay real in the complex versions. Iconic behaviour, no notes 🌸.
🦋 pptrf — packed Cholesky factorization, that's it, that's the function
lapack_int LAPACKE_spptrf (int matrix_layout, char uplo, lapack_int n,
float *ap)
lapack_int LAPACKE_dpptrf (int matrix_layout, char uplo, lapack_int n,
double *ap)
lapack_int LAPACKE_cpptrf (int matrix_layout, char uplo, lapack_int n,
lapack_complex_float *ap)
lapack_int LAPACKE_zpptrf (int matrix_layout, char uplo, lapack_int n,
lapack_complex_double *ap)
Five arguments and a dream ✨.
💜 pptri — same energy, but she inverts
lapack_int LAPACKE_spptri (int matrix_layout, char uplo, lapack_int n,
float *ap)
lapack_int LAPACKE_dpptri (int matrix_layout, char uplo, lapack_int n,
double *ap)
lapack_int LAPACKE_cpptri (int matrix_layout, char uplo, lapack_int n,
lapack_complex_float *ap)
lapack_int LAPACKE_zpptri (int matrix_layout, char uplo, lapack_int n,
lapack_complex_double *ap)
Literally pptrf's twin but with the i — don't mix them up, bestie, that's a whole different plot twist 🙈.
🌈 pptrs — packed triangular solve, multi-rhs edition
lapack_int LAPACKE_spptrs (int matrix_layout, char uplo, lapack_int n,
lapack_int nrhs, const float *ap, float *b, lapack_int ldb)
lapack_int LAPACKE_dpptrs (int matrix_layout, char uplo, lapack_int n,
lapack_int nrhs, const double *ap, double *b, lapack_int ldb)
lapack_int LAPACKE_cpptrs (int matrix_layout, char uplo, lapack_int n,
lapack_int nrhs, const lapack_complex_float *ap,
lapack_complex_float *b, lapack_int ldb)
lapack_int LAPACKE_zpptrs (int matrix_layout, char uplo, lapack_int n,
lapack_int nrhs, const lapack_complex_double *ap,
lapack_complex_double *b, lapack_int ldb)
ap is const (she's read-only, respectful 👑), b is not (she gets overwritten, that's the whole point).
🍓 pstrf — pivoted Cholesky, now with rank and tolerance
lapack_int LAPACKE_spstrf (int matrix_layout, char uplo, lapack_int n,
float *a, lapack_int lda, lapack_int *piv, lapack_int *rank, float
tol)
lapack_int LAPACKE_dpstrf (int matrix_layout, char uplo, lapack_int n,
double *a, lapack_int lda, lapack_int *piv, lapack_int *rank, double
tol)
lapack_int LAPACKE_cpstrf (int matrix_layout, char uplo, lapack_int n,
lapack_complex_float *a, lapack_int lda, lapack_int *piv, lapack_int
*rank, float tol)
lapack_int LAPACKE_zpstrf (int matrix_layout, char uplo, lapack_int n,
lapack_complex_double *a, lapack_int lda, lapack_int *piv,
lapack_int *rank, double tol)
Full storage this time (lda, bestie, not packed — the p is doing different work here). And yes tol is real in the complex ones too. Consistency 💅.
🧚 ptcon — tridiagonal condition number, no matrix_layout needed
lapack_int LAPACKE_sptcon (lapack_int n, const float *d, const float *e,
float anorm, float *rcond)
lapack_int LAPACKE_dptcon (lapack_int n, const double *d, const double
*e, double anorm, double *rcond)
lapack_int LAPACKE_cptcon (lapack_int n, const float *d, const
lapack_complex_float *e, float anorm, float *rcond)
lapack_int LAPACKE_zptcon (lapack_int n, const double *d, const
lapack_complex_double *e, double anorm, double *rcond)
Bestie note 📌: these four skip matrix_layout entirely — no int matrix_layout first arg, look at them, trailblazers. And d stays real while e goes complex, because tridiagonal says so 💀.
⭐ pteqr — tridiagonal to eigenspace, with compz
lapack_int LAPACKE_spteqr (int matrix_layout, char compz, lapack_int n,
float *d, float *e, float *z, lapack_int ldz)
lapack_int LAPACKE_dpteqr (int matrix_layout, char compz, lapack_int n,
double *d, double *e, double *z, lapack_int ldz)
lapack_int LAPACKE_cpteqr (int matrix_layout, char compz, lapack_int n,
float *d, float *e, lapack_complex_float *z, lapack_int ldz)
lapack_int LAPACKE_zpteqr (int matrix_layout, char compz, lapack_int n,
double *d, double *e, lapack_complex_double *z, lapack_int ldz)
d and e are real even in c and z, but z is complex. That's the crossover episode 🦋.
💀 ptrfs — the fancy one with two uplo-less variants and two that have uplo
lapack_int LAPACKE_sptrfs (int matrix_layout, lapack_int n, lapack_int
nrhs, const float *d, const float *e, const float *df, const float
*ef, const float *b, lapack_int ldb, float *x, lapack_int ldx, float
*ferr, float *berr)
lapack_int LAPACKE_dptrfs (int matrix_layout, lapack_int n, lapack_int
nrhs, const double *d, const double *e, const double *df, const
double *ef, const double *b, lapack_int ldb, double *x, lapack_int
ldx, double *ferr, double *berr)
lapack_int LAPACKE_cptrfs (int matrix_layout, char uplo, lapack_int n,
lapack_int nrhs, const float *d, const lapack_complex_float *e,
const float *df, const lapack_complex_float *ef, const
lapack_complex_float *b, lapack_int ldb, lapack_complex_float *x,
lapack_int ldx, float *ferr, float *berr)
lapack_int LAPACKE_zptrfs (int matrix_layout, char uplo, lapack_int n,
lapack_int nrhs, const double *d, const lapack_complex_double *e,
const double *df, const lapack_complex_double *ef, const
lapack_complex_double *b, lapack_int ldb, lapack_complex_double *x,
lapack_int ldx, double *ferr, double *berr)
Ok so l👀k closely: sptrfs and dptrfs have no uplo. cptrfs and zptrfs do. That's not me being chaotic, that's literally the signature 🙈. Copy the right one, please, I'm begging 🫶.
🌸 ptsv — tridiagonal solve, minimal effort, maximum slay
lapack_int LAPACKE_sptsv (int matrix_layout, lapack_int n, lapack_int
nrhs, float *d, float *e, float *b, lapack_int ldb)
lapack_int LAPACKE_dptsv (int matrix_layout, lapack_int n, lapack_int
nrhs, double *d, double *e, double *b, lapack_int ldb)
lapack_int LAPACKE_cptsv (int matrix_layout, lapack_int n, lapack_int
nrhs, float *d, lapack_complex_float *e, lapack_complex_float *b,
lapack_int ldb)
lapack_int LAPACKE_zptsv (int matrix_layout, lapack_int n, lapack_int
nrhs, double *d, lapack_complex_double *e, lapack_complex_double *b,
lapack_int ldb)
No uplo anywhere in this family. She doesn't need it. She knows who she is ✨.
🌺 ptsvx — tridiagonal, but make it thorough
lapack_int LAPACKE_sptsvx (int matrix_layout, char fact, lapack_int n,
lapack_int nrhs, const float *d, const float *e, float *df, float
*ef, const float *b, lapack_int ldb, float *x, lapack_int ldx, float
*rcond, float *ferr, float *berr)
lapack_int LAPACKE_dptsvx (int matrix_layout, char fact, lapack_int n,
lapack_int nrhs, const double *d, const double *e, double *df,
double *ef, const double *b, lapack_int ldb, double *x, lapack_int
ldx, double *rcond, double *ferr, double *berr)
lapack_int LAPACKE_cptsvx (int matrix_layout, char fact, lapack_int n,
lapack_int nrhs, const float *d, const lapack_complex_float *e,
float *df, lapack_complex_float *ef, const lapack_complex_float *b,
lapack_int ldb, lapack_complex_float *x, lapack_int ldx, float
*rcond, float *ferr, float *berr)
lapack_int LAPACKE_zptsvx (int matrix_layout, char fact, lapack_int n,
lapack_int nrhs, const double *d, const lapack_complex_double *e,
double *df, lapack_complex_double *ef, const lapack_complex_double
*b, lapack_int ldb, lapack_complex_double *x, lapack_int ldx, double
*rcond, double *ferr, double *berr)
Inputs d and e are const, outputs df and ef are not, x and rcond etc. cruise along for the ride. Note who's real: d always, df always, and the error/condition crew 💅.
🎀 pttrf — tridiagonal factorization, four args, no layout arg
lapack_int LAPACKE_spttrf (lapack_int n, float *d, float *e)
lapack_int LAPACKE_dpttrf (lapack_int n, double *d, double *e)
lapack_int LAPACKE_cpttrf (lapack_int n, float *d, lapack_complex_float
*e)
lapack_int LAPACKE_zpttrf (lapack_int n, double *d,
lapack_complex_double *e)
The ptcon/pttrf girlies are the only ones in this whole flock living without matrix_layout. Respect the commitment 🫡.
🦋 pttrs — tridiagonal solve, and yes the complex ones brought uplo
lapack_int LAPACKE_spttrs (int matrix_layout, lapack_int n, lapack_int
nrhs, const float *d, const float *e, float *b, lapack_int ldb)
lapack_int LAPACKE_dpttrs (int matrix_layout, lapack_int n, lapack_int
nrhs, const double *d, const double *e, double *b, lapack_int ldb)
lapack_int LAPACKE_cpttrs (int matrix_layout, char uplo, lapack_int n,
lapack_int nrhs, const float *d, const lapack_complex_float *e,
lapack_complex_float *b, lapack_int ldb)
lapack_int LAPACKE_zpttrs (int matrix_layout, char uplo, lapack_int n,
lapack_int nrhs, const double *d, const lapack_complex_double *e,
lapack_complex_double *b, lapack_int ldb)
Same plot twist as ptrfs: real versions, no uplo; complex versions, uplo unlocked 🔓. Fr fr, check before you compile 😭.
👑 sbev / dsbev — symmetric band, eigenvalues, the classic
lapack_int LAPACKE_ssbev (int matrix_layout, char jobz, char uplo,
lapack_int n, lapack_int kd, float *ab, lapack_int ldab, float *w,
float *z, lapack_int ldz)
lapack_int LAPACKE_dsbev (int matrix_layout, char jobz, char uplo,
lapack_int n, lapack_int kd, double *ab, lapack_int ldab, double *w,
double *z, lapack_int ldz)
New cast members alert 🚨: jobz, kd, ab, ldab, w, z, ldz. Band storage means kd (the bandwidth) is in the building, and ldab is leading dimension of ab — do not skip her.
💜 sbevd / dsbevd — same, but with a d on the end (she's the divide-and-conquer one)
lapack_int LAPACKE_ssbevd (int matrix_layout, char jobz, char uplo,
lapack_int n, lapack_int kd, float *ab, lapack_int ldab, float *w,
float *z, lapack_int ldz)
lapack_int LAPACKE_dsbevd (int matrix_layout, char jobz, char uplo,
lapack_int n, lapack_int kd, double *ab, lapack_int ldab, double *w,
double *z, lapack_int ldz)
Identical argument list to sbev/dsbev — same characters, extra letter in the name. That's it. That's the difference in the signature 🙈.
🔥 sbevx / dsbevx — the maximalist band eigensolver
lapack_int LAPACKE_ssbevx (int matrix_layout, char jobz, char range,
char uplo, lapack_int n, lapack_int kd, float *ab, lapack_int ldab,
float *q, lapack_int ldq, float vl, float vu, lapack_int il,
lapack_int iu, float abstol, lapack_int *m, float *w, float *z,
lapack_int ldz, lapack_int *ifail)
lapack_int LAPACKE_dsbevx (int matrix_layout, char jobz, char range,
char uplo, lapack_int n, lapack_int kd, double *ab, lapack_int ldab,
double *q, lapack_int ldq, double vl, double vu, lapack_int il,
Look at that guest list 😭 — range, q, ldq, vl, vu, il, iu, abstol, m, ifail. She said "invite everyone," and honestly? She ate 💅. (And dsbevx is mid-sentence here — she keeps going in the next part, don't panic 🫶)
...and we're literally mid-declaration 😭 don't panic, bestie — this is just the tail end of a signature that started in the last part, so here's the bit that got cut off:
lapack_int iu, double abstol, lapack_int *m, double *w, double *z,
lapack_int ldz, lapack_int *ifail)
Cool? Cool. Now, fresh declarations, everybody say thank you 🫶
🎀 the sb band-matrix girlies (generalized edition)
Band matrices get ka/kb for the upper bandwidths, plus ldab/ldbb riding along as their leading dims. It's giving "two bands, two leading dimensions, one very long line." Slay.
lapack_int LAPACKE_ssbgst (int matrix_layout, char vect, char uplo, lapack_int n, lapack_int ka, lapack_int kb, float *ab, lapack_int ldab, const float *bb, lapack_int ldbb, float *x, lapack_int ldx)
lapack_int LAPACKE_dsbgst (int matrix_layout, char vect, char uplo, lapack_int n, lapack_int ka, lapack_int kb, double *ab, lapack_int ldab, const double *bb, lapack_int ldbb, double *x, lapack_int ldx)
Same energy, but ab/bb are now writable and they hand you back eigenvalues in w and eigenvectors in z (with ldz doing its usual little job):
lapack_int LAPACKE_ssbgv (int matrix_layout, char jobz, char uplo, lapack_int n, lapack_int ka, lapack_int kb, float *ab, lapack_int ldab, float *bb, lapack_int ldbb, float *w, float *z, lapack_int ldz)
lapack_int LAPACKE_dsbgv (int matrix_layout, char jobz, char uplo, lapack_int n, lapack_int ka, lapack_int kb, double *ab, lapack_int ldab, double *bb, lapack_int ldbb, double *w, double *z, lapack_int ldz)
The vd twins — identical argument lists, no cap, I checked:
lapack_int LAPACKE_ssbgvd (int matrix_layout, char jobz, char uplo, lapack_int n, lapack_int ka, lapack_int kb, float *ab, lapack_int ldab, float *bb, lapack_int ldbb, float *w, float *z, lapack_int ldz)
lapack_int LAPACKE_dsbgvd (int matrix_layout, char jobz, char uplo, lapack_int n, lapack_int ka, lapack_int kb, double *ab, lapack_int ldab, double *bb, lapack_int ldbb, double *w, double *z, lapack_int ldz)
And the vx babes — they add the whole range situation (vl, vu, il, iu, abstol), a q matrix with ldq, an output count *m, and ifail for the messy ones:
lapack_int LAPACKE_ssbgvx (int matrix_layout, char jobz, char range, char uplo, lapack_int n, lapack_int ka, lapack_int kb, float *ab, lapack_int ldab, float *bb, lapack_int ldbb, float *q, lapack_int ldq, float vl, float vu, lapack_int il, lapack_int iu, float abstol, lapack_int *m, float *w, float *z, lapack_int ldz, lapack_int *ifail)
lapack_int LAPACKE_dsbgvx (int matrix_layout, char jobz, char range, char uplo, lapack_int n, lapack_int ka, lapack_int kb, double *ab, lapack_int ldab, double *bb, lapack_int ldbb, double *q, lapack_int ldq, double vl, double vu, lapack_int il, lapack_int iu, double abstol, lapack_int *m, double *w, double *z, lapack_int ldz, lapack_int *ifail)
✨ sbtrd (note: singular kd, bestie)
One kd, one ldab, and the trio d, e, q (with ldq). That's the whole vibe check:
lapack_int LAPACKE_ssbtrd (int matrix_layout, char vect, char uplo, lapack_int n, lapack_int kd, float *ab, lapack_int ldab, float *d, float *e, float *q, lapack_int ldq)
lapack_int LAPACKE_dsbtrd (int matrix_layout, char vect, char uplo, lapack_int n, lapack_int kd, double *ab, lapack_int ldab, double *d, double *e, double *q, lapack_int ldq)
🦋 sfrk — the rank-k girlies
Three char flags in a row (transr, uplo, trans), then alpha/beta scalars, a read-only a with lda… and c, who has no leading dimension at all because she doesn't need one. Main character energy, honestly:
lapack_int LAPACKE_ssfrk (int matrix_layout, char transr, char uplo, char trans, lapack_int n, lapack_int k, float alpha, const float *a, lapack_int lda, float beta, float *c)
lapack_int LAPACKE_dsfrk (int matrix_layout, char transr, char uplo, char trans, lapack_int n, lapack_int k, double alpha, const double *a, lapack_int lda, double beta, double *c)
💅 spcon — four flavours, one shape
anorm goes in, rcond comes out, ipiv is read-only. Here's all four so nobody has to guess:
lapack_int LAPACKE_sspcon (int matrix_layout, char uplo, lapack_int n, const float *ap, const lapack_int *ipiv, float anorm, float *rcond)
lapack_int LAPACKE_dspcon (int matrix_layout, char uplo, lapack_int n, const double *ap, const lapack_int *ipiv, double anorm, double *rcond)
lapack_int LAPACKE_cspcon (int matrix_layout, char uplo, lapack_int n, const lapack_complex_float *ap, const lapack_int *ipiv, float anorm, float *rcond)
lapack_int LAPACKE_zspcon (int matrix_layout, char uplo, lapack_int n, const lapack_complex_double *ap, const lapack_int *ipiv, double anorm, double *rcond)
Notice the pattern, iykyk: thecversions carrylapack_complex_floatfor the data but keepfloat anormandfloat *rcond. Thezversions godouble/double. Don't mix them up 🔥
🌸 spev / spevd / spevx
Packed storage, so it's just ap — no ldap anywhere, we love a low-maintenance icon:
lapack_int LAPACKE_sspev (int matrix_layout, char jobz, char uplo, lapack_int n, float *ap, float *w, float *z, lapack_int ldz)
lapack_int LAPACKE_dspev (int matrix_layout, char jobz, char uplo, lapack_int n, double *ap, double *w, double *z, lapack_int ldz)
lapack_int LAPACKE_sspevd (int matrix_layout, char jobz, char uplo, lapack_int n, float *ap, float *w, float *z, lapack_int ldz)
lapack_int LAPACKE_dspevd (int matrix_layout, char jobz, char uplo, lapack_int n, double *ap, double *w, double *z, lapack_int ldz)
Then the vx versions go full range mode with vl/vu/il/iu/abstol, plus *m and ifail:
lapack_int LAPACKE_sspevx (int matrix_layout, char jobz, char range, char uplo, lapack_int n, float *ap, float vl, float vu, lapack_int il, lapack_int iu, float abstol, lapack_int *m, float *w, float *z, lapack_int ldz, lapack_int *ifail)
lapack_int LAPACKE_dspevx (int matrix_layout, char jobz, char range, char uplo, lapack_int n, double *ap, double vl, double vu, lapack_int il, lapack_int iu, double abstol, lapack_int *m, double *w, double *z, lapack_int ldz, lapack_int *ifail)
🍓 spg — the itype crew
Heads up: these put lapack_int itype before uplo, not after matrix_layout. It's a whole thing, just roll with it:
lapack_int LAPACKE_sspgst (int matrix_layout, lapack_int itype, char uplo, lapack_int n, float *ap, const float *bp)
lapack_int LAPACKE_dspgst (int matrix_layout, lapack_int itype, char uplo, lapack_int n, double *ap, const double *bp)
lapack_int LAPACKE_sspgv (int matrix_layout, lapack_int itype, char jobz, char uplo, lapack_int n, float *ap, float *bp, float *w, float *z, lapack_int ldz)
lapack_int LAPACKE_dspgv (int matrix_layout, lapack_int itype, char jobz, char uplo, lapack_int n, double *ap, double *bp, double *w, double *z, lapack_int ldz)
lapack_int LAPACKE_sspgvd (int matrix_layout, lapack_int itype, char jobz, char uplo, lapack_int n, float *ap, float *bp, float *w, float *z, lapack_int ldz)
lapack_int LAPACKE_dspgvd (int matrix_layout, lapack_int itype, char jobz, char uplo, lapack_int n, double *ap, double *bp, double *w, double *z, lapack_int ldz)
And the vx two — itype, then jobz, then range, then uplo, then everything else. Yes, four chars deep. Iconic, honestly:
lapack_int LAPACKE_sspgvx (int matrix_layout, lapack_int itype, char jobz, char range, char uplo, lapack_int n, float *ap, float *bp, float vl, float vu, lapack_int il, lapack_int iu, float abstol, lapack_int *m, float *w, float *z, lapack_int ldz, lapack_int *ifail)
lapack_int LAPACKE_dspgvx (int matrix_layout, lapack_int itype, char jobz, char range, char uplo, lapack_int n, double *ap, double *bp, double vl, double vu, lapack_int il, lapack_int iu, double abstol, lapack_int *m, double *w, double *z, lapack_int ldz, lapack_int *ifail)
🧚 sprfs — the refinement squad
nrhs is here, afp is here, ipiv is read-only, and the output girlies are ferr and berr. Four versions, all float/double on the error side of things for their type family:
lapack_int LAPACKE_ssprfs (int matrix_layout, char uplo, lapack_int n, lapack_int nrhs, const float *ap, const float *afp, const lapack_int *ipiv, const float *b, lapack_int ldb, float *x, lapack_int ldx, float *ferr, float *berr)
lapack_int LAPACKE_dsprfs (int matrix_layout, char uplo, lapack_int n, lapack_int nrhs, const double *ap, const double *afp, const lapack_int *ipiv, const double *b, lapack_int ldb, double *x, lapack_int ldx, double *ferr, double *berr)
lapack_int LAPACKE_csprfs (int matrix_layout, char uplo, lapack_int n, lapack_int nrhs, const lapack_complex_float *ap, const lapack_complex_float *afp, const lapack_int *ipiv, const lapack_complex_float *b, lapack_int ldb, lapack_complex_float *x, lapack_int ldx, float *ferr, float *berr)
lapack_int LAPACKE_zsprfs (int matrix_layout, char uplo, lapack_int n, lapack_int nrhs, const lapack_complex_double *ap, const lapack_complex_double *afp, const lapack_int *ipiv, const lapack_complex_double *b, lapack_int ldb, lapack_complex_double *x, lapack_int ldx, double *ferr, double *berr)
⭐ spsv — short and sweet
No anorm, no ferr, no berr. Just ap, ipiv, b, ldb. Less is more, periodt:
lapack_int LAPACKE_sspsv (int matrix_layout, char uplo, lapack_int n, lapack_int nrhs, float *ap, lapack_int *ipiv, float *b, lapack_int ldb)
lapack_int LAPACKE_dspsv (int matrix_layout, char uplo, lapack_int n, lapack_int nrhs, double *ap, lapack_int *ipiv, double *b, lapack_int ldb)
lapack_int LAPACKE_cspsv (int matrix_layout, char uplo, lapack_int n, lapack_int nrhs, lapack_complex_float *ap, lapack_int *ipiv, lapack_complex_float *b, lapack_int ldb)
lapack_int LAPACKE_zspsv (int matrix_layout, char uplo, lapack_int n, lapack_int nrhs, lapack_complex_double *ap, lapack_int *ipiv, lapack_complex_double *b, lapack_int ldb)
The spsvx girlies though? They bring fact, they bring afp, they bring rcond and ferr and berr. Overachievers 🎀
lapack_int LAPACKE_sspsvx (int matrix_layout, char fact, char uplo, lapack_int n, lapack_int nrhs, const float *ap, float *afp, lapack_int *ipiv, const float *b, lapack_int ldb, float *x, lapack_int ldx, float *rcond, float *ferr, float *berr)
lapack_int LAPACKE_dspsvx (int matrix_layout, char fact, char uplo, lapack_int n, lapack_int nrhs, const double *ap, double *afp, lapack_int *ipiv, const double *b, lapack_int ldb, double *x, lapack_int ldx, double *rcond, double *ferr, double *berr)
lapack_int LAPACKE_cspsvx (int matrix_layout, char fact, char uplo, lapack_int n, lapack_int nrhs, const lapack_complex_float *ap, lapack_complex_float *afp, lapack_int *ipiv, const lapack_complex_float *b, lapack_int ldb, lapack_complex_float *x, lapack_int ldx, float *rcond, float *ferr, float *berr)
lapack_int LAPACKE_zspsvx (int matrix_layout, char fact, char uplo, lapack_int n, lapack_int nrhs, const lapack_complex_double *ap, lapack_complex_double *afp, lapack_int *ipiv, const lapack_complex_double *b, lapack_int ldb, lapack_complex_double *x, lapack_int ldx, double *rcond, double *ferr, double *berr)
🌈 spt — the packed-storage quadrilogy
sptrd gives you d, e, tau. Cute, dense, done:
lapack_int LAPACKE_ssptrd (int matrix_layout, char uplo, lapack_int n, float *ap, float *d, float *e, float *tau)
lapack_int LAPACKE_dsptrd (int matrix_layout, char uplo, lapack_int n, double *ap, double *d, double *e, double *tau)
sptrf is the ipiv-producing one (writable ap, writable ipiv):
lapack_int LAPACKE_ssptrf (int matrix_layout, char uplo, lapack_int n, float *ap, lapack_int *ipiv)
lapack_int LAPACKE_dsptrf (int matrix_layout, char uplo, lapack_int n, double *ap, lapack_int *ipiv)
lapack_int LAPACKE_csptrf (int matrix_layout, char uplo, lapack_int n, lapack_complex_float *ap, lapack_int *ipiv)
lapack_int LAPACKE_zsptrf (int matrix_layout, char uplo, lapack_int n, lapack_complex_double *ap, lapack_int *ipiv)
sptri flips it — ipiv is now const because it's an input this time, bestie:
lapack_int LAPACKE_ssptri (int matrix_layout, char uplo, lapack_int n, float *ap, const lapack_int *ipiv)
lapack_int LAPACKE_dsptri (int matrix_layout, char uplo, lapack_int n, double *ap, const lapack_int *ipiv)
lapack_int LAPACKE_csptri (int matrix_layout, char uplo, lapack_int n, lapack_complex_float *ap, const lapack_int *ipiv)
lapack_int LAPACKE_zsptri (int matrix_layout, char uplo, lapack_int n, lapack_complex_double *ap, const lapack_int *ipiv)
And sptrs brings nrhs and ldb back into the picture:
lapack_int LAPACKE_ssptrs (int matrix_layout, char uplo, lapack_int n, lapack_int nrhs, const float *ap, const lapack_int *ipiv, float *b, lapack_int ldb)
lapack_int LAPACKE_dsptrs (int matrix_layout, char uplo, lapack_int n, lapack_int nrhs, const double *ap, const lapack_int *ipiv, double *b, lapack_int ldb)
lapack_int LAPACKE_csptrs (int matrix_layout, char uplo, lapack_int n, lapack_int nrhs, const lapack_complex_float *ap, const lapack_int *ipiv, lapack_complex_float *b, lapack_int ldb)
lapack_int LAPACKE_zsptrs (int matrix_layout, char uplo, lapack_int n,
And yes, LAPACKE_zsptrs got cut off mid-line again 😭 that's not me being sloppy, that's just where this part ends — the rest is waiting for you in the next one 💖
...and we're still in the SYNOPSIS bestie, the prototype list is genuinely thicc and we're only on part 24 of 197 😭. Here's the next chunk, finishing off whatever complex-double call got cut in half:
lapack_int nrhs, const lapack_complex_double *ap, const lapack_int
*ipiv, lapack_complex_double *b, lapack_int ldb)
then the *stebz twins walk in — one float, one double, matching fits:
lapack_int LAPACKE_sstebz (char range, char order, lapack_int n, float
vl, float vu, lapack_int il, lapack_int iu, float abstol, const
float *d, const float *e, lapack_int *m, lapack_int *nsplit, float
*w, lapack_int *iblock, lapack_int *isplit)
lapack_int LAPACKE_dstebz (char range, char order, lapack_int n, double
vl, double vu, lapack_int il, lapack_int iu, double abstol, const
double *d, const double *e, lapack_int *m, lapack_int *nsplit,
double *w, lapack_int *iblock, lapack_int *isplit)
ok the *stedc four-pack, this one goes full main-character and shows up in all four flavours 💅:
lapack_int LAPACKE_sstedc (int matrix_layout, char compz, lapack_int n,
float *d, float *e, float *z, lapack_int ldz)
lapack_int LAPACKE_dstedc (int matrix_layout, char compz, lapack_int n,
double *d, double *e, double *z, lapack_int ldz)
lapack_int LAPACKE_cstedc (int matrix_layout, char compz, lapack_int n,
float *d, float *e, lapack_complex_float *z, lapack_int ldz)
lapack_int LAPACKE_zstedc (int matrix_layout, char compz, lapack_int n,
double *d, double *e, lapack_complex_double *z, lapack_int ldz)
*stegr said "let me also do all four" and honestly? iconic ✨:
lapack_int LAPACKE_sstegr (int matrix_layout, char jobz, char range,
lapack_int n, float *d, float *e, float vl, float vu, lapack_int il,
lapack_int iu, float abstol, lapack_int *m, float *w, float *z,
lapack_int ldz, lapack_int *isuppz)
lapack_int LAPACKE_dstegr (int matrix_layout, char jobz, char range,
lapack_int n, double *d, double *e, double vl, double vu, lapack_int
il, lapack_int iu, double abstol, lapack_int *m, double *w, double
*z, lapack_int ldz, lapack_int *isuppz)
lapack_int LAPACKE_cstegr (int matrix_layout, char jobz, char range,
lapack_int n, float *d, float *e, float vl, float vu, lapack_int il,
lapack_int iu, float abstol, lapack_int *m, float *w,
lapack_complex_float *z, lapack_int ldz, lapack_int *isuppz)
lapack_int LAPACKE_zstegr (int matrix_layout, char jobz, char range,
lapack_int n, double *d, double *e, double vl, double vu, lapack_int
il, lapack_int iu, double abstol, lapack_int *m, double *w,
lapack_complex_double *z, lapack_int ldz, lapack_int *isuppz)
and then *stein, same quadruple energy, note the ifailv at the end of each 🎀:
lapack_int LAPACKE_sstein (int matrix_layout, lapack_int n, const float
*d, const float *e, lapack_int m, const float *w, const lapack_int
*iblock, const lapack_int *isplit, float *z, lapack_int ldz,
lapack_int *ifailv)
lapack_int LAPACKE_dstein (int matrix_layout, lapack_int n, const double
*d, const double *e, lapack_int m, const double *w, const lapack_int
*iblock, const lapack_int *isplit, double *z, lapack_int ldz,
lapack_int *ifailv)
lapack_int LAPACKE_cstein (int matrix_layout, lapack_int n, const float
*d, const float *e, lapack_int m, const float *w, const lapack_int
*iblock, const lapack_int *isplit, lapack_complex_float *z,
lapack_int ldz, lapack_int *ifailv)
lapack_int LAPACKE_zstein (int matrix_layout, lapack_int n, const double
*d, const double *e, lapack_int m, const double *w, const lapack_int
*iblock, const lapack_int *isplit, lapack_complex_double *z,
lapack_int ldz, lapack_int *ifailv)
*stemr really said "let me have every argument", including nzc and that lapack_logical *tryrac at the very end 👀:
lapack_int LAPACKE_sstemr (int matrix_layout, char jobz, char range,
lapack_int n, float *d, float *e, float vl, float vu, lapack_int il,
lapack_int iu, lapack_int *m, float *w, float *z, lapack_int ldz,
lapack_int nzc, lapack_int *isuppz, lapack_logical *tryrac)
lapack_int LAPACKE_dstemr (int matrix_layout, char jobz, char range,
lapack_int n, double *d, double *e, double vl, double vu, lapack_int
il, lapack_int iu, lapack_int *m, double *w, double *z, lapack_int
ldz, lapack_int nzc, lapack_int *isuppz, lapack_logical *tryrac)
lapack_int LAPACKE_cstemr (int matrix_layout, char jobz, char range,
lapack_int n, float *d, float *e, float vl, float vu, lapack_int il,
lapack_int iu, lapack_int *m, float *w, lapack_complex_float *z,
lapack_int ldz, lapack_int nzc, lapack_int *isuppz, lapack_logical
*tryrac)
lapack_int LAPACKE_zstemr (int matrix_layout, char jobz, char range,
lapack_int n, double *d, double *e, double vl, double vu, lapack_int
il, lapack_int iu, lapack_int *m, double *w, lapack_complex_double
*z, lapack_int ldz, lapack_int nzc, lapack_int *isuppz,
lapack_logical *tryrac)
*steqr keeps it short and sweet, four of them, no notes 💖:
lapack_int LAPACKE_ssteqr (int matrix_layout, char compz, lapack_int n,
float *d, float *e, float *z, lapack_int ldz)
lapack_int LAPACKE_dsteqr (int matrix_layout, char compz, lapack_int n,
double *d, double *e, double *z, lapack_int ldz)
lapack_int LAPACKE_csteqr (int matrix_layout, char compz, lapack_int n,
float *d, float *e, lapack_complex_float *z, lapack_int ldz)
lapack_int LAPACKE_zsteqr (int matrix_layout, char compz, lapack_int n,
double *d, double *e, lapack_complex_double *z, lapack_int ldz)
*sterf is the tiny one — only two of them, and no matrix_layout, no z, just vibes:
lapack_int LAPACKE_ssterf (lapack_int n, float *d, float *e)
lapack_int LAPACKE_dsterf (lapack_int n, double *d, double *e)
*stev and *stevd — float and double only, sorry to the complex girlies 🙈:
lapack_int LAPACKE_sstev (int matrix_layout, char jobz, lapack_int n,
float *d, float *e, float *z, lapack_int ldz)
lapack_int LAPACKE_dstev (int matrix_layout, char jobz, lapack_int n,
double *d, double *e, double *z, lapack_int ldz)
lapack_int LAPACKE_sstevd (int matrix_layout, char jobz, lapack_int n,
float *d, float *e, float *z, lapack_int ldz)
lapack_int LAPACKE_dstevd (int matrix_layout, char jobz, lapack_int n,
double *d, double *e, double *z, lapack_int ldz)
*stevr bringing range, vl, vu, il, iu, abstol and ending on isuppz — a whole itinerary fr fr:
lapack_int LAPACKE_sstevr (int matrix_layout, char jobz, char range,
lapack_int n, float *d, float *e, float vl, float vu, lapack_int il,
lapack_int iu, float abstol, lapack_int *m, float *w, float *z,
lapack_int ldz, lapack_int *isuppz)
lapack_int LAPACKE_dstevr (int matrix_layout, char jobz, char range,
lapack_int n, double *d, double *e, double vl, double vu, lapack_int
il, lapack_int iu, double abstol, lapack_int *m, double *w, double
*z, lapack_int ldz, lapack_int *isuppz)
and *stevx, same energy but it closes with ifail instead of isuppz — don't mix them up bestie 🫶:
lapack_int LAPACKE_sstevx (int matrix_layout, char jobz, char range,
lapack_int n, float *d, float *e, float vl, float vu, lapack_int il,
lapack_int iu, float abstol, lapack_int *m, float *w, float *z,
lapack_int ldz, lapack_int *ifail)
lapack_int LAPACKE_dstevx (int matrix_layout, char jobz, char range,
lapack_int n, double *d, double *e, double vl, double vu, lapack_int
il, lapack_int iu, double abstol, lapack_int *m, double *w, double
*z, lapack_int ldz, lapack_int *ifail)
new family alert 🚨 the sy* girlies. *sycon takes anorm in and hands you back rcond:
lapack_int LAPACKE_ssycon (int matrix_layout, char uplo, lapack_int n,
const float *a, lapack_int lda, const lapack_int *ipiv, float anorm,
float *rcond)
lapack_int LAPACKE_dsycon (int matrix_layout, char uplo, lapack_int n,
const double *a, lapack_int lda, const lapack_int *ipiv, double
anorm, double *rcond)
lapack_int LAPACKE_csycon (int matrix_layout, char uplo, lapack_int n,
const lapack_complex_float *a, lapack_int lda, const lapack_int
*ipiv, float anorm, float *rcond)
lapack_int LAPACKE_zsycon (int matrix_layout, char uplo, lapack_int n,
const lapack_complex_double *a, lapack_int lda, const lapack_int
*ipiv, double anorm, double *rcond)
*syequb with its little s, scond, amax trio at the end 🌸:
lapack_int LAPACKE_ssyequb (int matrix_layout, char uplo, lapack_int n,
const float *a, lapack_int lda, float *s, float *scond, float *amax)
lapack_int LAPACKE_dsyequb (int matrix_layout, char uplo, lapack_int n,
const double *a, lapack_int lda, double *s, double *scond, double
*amax)
lapack_int LAPACKE_csyequb (int matrix_layout, char uplo, lapack_int n,
const lapack_complex_float *a, lapack_int lda, float *s, float
*scond, float *amax)
lapack_int LAPACKE_zsyequb (int matrix_layout, char uplo, lapack_int n,
const lapack_complex_double *a, lapack_int lda, double *s, double
*scond, double *amax)
*syev and *syevd — two each, jobz, uplo, a, lda, w, done:
lapack_int LAPACKE_ssyev (int matrix_layout, char jobz, char uplo,
lapack_int n, float *a, lapack_int lda, float *w)
lapack_int LAPACKE_dsyev (int matrix_layout, char jobz, char uplo,
lapack_int n, double *a, lapack_int lda, double *w)
lapack_int LAPACKE_ssyevd (int matrix_layout, char jobz, char uplo,
lapack_int n, float *a, lapack_int lda, float *w)
lapack_int LAPACKE_dsyevd (int matrix_layout, char jobz, char uplo,
lapack_int n, double *a, lapack_int lda, double *w)
*syevr and *syevx, the long ones, with the vl/vu/il/iu/abstol stack in the middle and isuppz vs ifail at the finish line ⭐:
lapack_int LAPACKE_ssyevr (int matrix_layout, char jobz, char range,
char uplo, lapack_int n, float *a, lapack_int lda, float vl, float
vu, lapack_int il, lapack_int iu, float abstol, lapack_int *m, float
*w, float *z, lapack_int ldz, lapack_int *isuppz)
lapack_int LAPACKE_dsyevr (int matrix_layout, char jobz, char range,
char uplo, lapack_int n, double *a, lapack_int lda, double vl,
double vu, lapack_int il, lapack_int iu, double abstol, lapack_int
*m, double *w, double *z, lapack_int ldz, lapack_int *isuppz)
lapack_int LAPACKE_ssyevx (int matrix_layout, char jobz, char range,
char uplo, lapack_int n, float *a, lapack_int lda, float vl, float
vu, lapack_int il, lapack_int iu, float abstol, lapack_int *m, float
*w, float *z, lapack_int ldz, lapack_int *ifail)
lapack_int LAPACKE_dsyevx (int matrix_layout, char jobz, char range,
char uplo, lapack_int n, double *a, lapack_int lda, double vl,
double vu, lapack_int il, lapack_int iu, double abstol, lapack_int
*m, double *w, double *z, lapack_int ldz, lapack_int *ifail)
*sygst is the short king — no jobz, no w, just itype, uplo, a, b and their lda/ldb besties:
lapack_int LAPACKE_ssygst (int matrix_layout, lapack_int itype, char
uplo, lapack_int n, float *a, lapack_int lda, const float *b,
lapack_int ldb)
lapack_int LAPACKE_dsygst (int matrix_layout, lapack_int itype, char
uplo, lapack_int n, double *a, lapack_int lda, const double *b,
lapack_int ldb)
*sygv and *sygvd add jobz and w back in, plus a mutable b — two each, float and double:
lapack_int LAPACKE_ssygv (int matrix_layout, lapack_int itype, char
jobz, char uplo, lapack_int n, float *a, lapack_int lda, float *b,
lapack_int ldb, float *w)
lapack_int LAPACKE_dsygv (int matrix_layout, lapack_int itype, char
jobz, char uplo, lapack_int n, double *a, lapack_int lda, double *b,
lapack_int ldb, double *w)
lapack_int LAPACKE_ssygvd (int matrix_layout, lapack_int itype, char
jobz, char uplo, lapack_int n, float *a, lapack_int lda, float *b,
lapack_int ldb, float *w)
lapack_int LAPACKE_dsygvd (int matrix_layout, lapack_int itype, char
jobz, char uplo, lapack_int n, double *a, lapack_int lda, double *b,
lapack_int ldb, double *w)
and *sygvx is the absolute maximalist — itype, jobz, range, uplo, then the vl/vu/il/iu/abstol parade, then m, w, z, ldz, ifail 😮💨:
lapack_int LAPACKE_ssygvx (int matrix_layout, lapack_int itype, char
jobz, char range, char uplo, lapack_int n, float *a, lapack_int lda,
float *b, lapack_int ldb, float vl, float vu, lapack_int il,
lapack_int iu, float abstol, lapack_int *m, float *w, float *z,
lapack_int ldz, lapack_int *ifail)
and we're mid-prototype again at the cut — LAPACKE_dsygvx starts here and does not finish in this part, so hold that thought bestie:
lapack_int LAPACKE_dsygvx (int matrix_layout, lapack_int itype, char
bestie the prototype parade did not slow down, and it’s still serving SYNOPSIS realness ✨ the tail of that last signature lands exactly like this:
jobz, char range, char uplo, lapack_int n, double *a, lapack_int lda, double *b, lapack_int ldb, double vl, double vu, lapack_int il, lapack_int iu, double abstol, lapack_int *m, double *w, double *z, lapack_int ldz, lapack_int *ifail)
then we slide straight into the ?syrfs four-pack — all four precisions are here, no skipping, no cap 🫶
lapack_int LAPACKE_ssyrfs (int matrix_layout, char uplo, lapack_int n, lapack_int nrhs, const float *a, lapack_int lda, const float *af, lapack_int ldaf, const lapack_int *ipiv, const float *b, lapack_int ldb, float *x, lapack_int ldx, float *ferr, float *berr)
lapack_int LAPACKE_dsyrfs (int matrix_layout, char uplo, lapack_int n, lapack_int nrhs, const double *a, lapack_int lda, const double *af, lapack_int ldaf, const lapack_int *ipiv, const double *b, lapack_int ldb, double *x, lapack_int ldx, double *ferr, double *berr)
lapack_int LAPACKE_csyrfs (int matrix_layout, char uplo, lapack_int n, lapack_int nrhs, const lapack_complex_float *a, lapack_int lda, const lapack_complex_float *af, lapack_int ldaf, const lapack_int *ipiv, const lapack_complex_float *b, lapack_int ldb, lapack_complex_float *x, lapack_int ldx, float *ferr, float *berr)
lapack_int LAPACKE_zsyrfs (int matrix_layout, char uplo, lapack_int n, lapack_int nrhs, const lapack_complex_double *a, lapack_int lda, const lapack_complex_double *af, lapack_int ldaf, const lapack_int *ipiv, const lapack_complex_double *b, lapack_int ldb, lapack_complex_double *x, lapack_int ldx, double *ferr, double *berr)
and then the ?syrfsx upgrade squad pulls up with equed, s, n_err_bnds, err_bnds_norm, err_bnds_comp, nparams, and params all up in the mix 💅
lapack_int LAPACKE_ssyrfsx (int matrix_layout, char uplo, char equed, lapack_int n, lapack_int nrhs, const float *a, lapack_int lda, const float *af, lapack_int ldaf, const lapack_int *ipiv, const float *s, const float *b, lapack_int ldb, float *x, lapack_int ldx, float *rcond, float *berr, lapack_int n_err_bnds, float *err_bnds_norm, float *err_bnds_comp, lapack_int nparams, float *params)
lapack_int LAPACKE_dsyrfsx (int matrix_layout, char uplo, char equed, lapack_int n, lapack_int nrhs, const double *a, lapack_int lda, const double *af, lapack_int ldaf, const lapack_int *ipiv, const double *s, const double *b, lapack_int ldb, double *x, lapack_int ldx, double *rcond, double *berr, lapack_int n_err_bnds, double *err_bnds_norm, double *err_bnds_comp, lapack_int nparams, double *params)
lapack_int LAPACKE_csyrfsx (int matrix_layout, char uplo, char equed, lapack_int n, lapack_int nrhs, const lapack_complex_float *a, lapack_int lda, const lapack_complex_float *af, lapack_int ldaf, const lapack_int *ipiv, const float *s, const lapack_complex_float *b, lapack_int ldb, lapack_complex_float *x, lapack_int ldx, float *rcond, float *berr, lapack_int n_err_bnds, float *err_bnds_norm, float *err_bnds_comp, lapack_int nparams, float *params)
lapack_int LAPACKE_zsyrfsx (int matrix_layout, char uplo, char equed, lapack_int n, lapack_int nrhs, const lapack_complex_double *a, lapack_int lda, const lapack_complex_double *af, lapack_int ldaf, const lapack_int *ipiv, const double *s, const lapack_complex_double *b, lapack_int ldb, lapack_complex_double *x, lapack_int ldx, double *rcond, double *berr, lapack_int n_err_bnds, double *err_bnds_norm, double *err_bnds_comp, lapack_int nparams, double *params)
next up: the ?sysv quartet, keeping it cute and compact 🌸
lapack_int LAPACKE_ssysv (int matrix_layout, char uplo, lapack_int n, lapack_int nrhs, float *a, lapack_int lda, lapack_int *ipiv, float *b, lapack_int ldb)
lapack_int LAPACKE_dsysv (int matrix_layout, char uplo, lapack_int n, lapack_int nrhs, double *a, lapack_int lda, lapack_int *ipiv, double *b, lapack_int ldb)
lapack_int LAPACKE_csysv (int matrix_layout, char uplo, lapack_int n, lapack_int nrhs, lapack_complex_float *a, lapack_int lda, lapack_int *ipiv, lapack_complex_float *b, lapack_int ldb)
lapack_int LAPACKE_zsysv (int matrix_layout, char uplo, lapack_int n, lapack_int nrhs, lapack_complex_double *a, lapack_int lda, lapack_int *ipiv, lapack_complex_double *b, lapack_int ldb)
the ?sysvx crew is next, with fact, rcond, ferr, berr — yes ma’am, the whole lineup 🔥
lapack_int LAPACKE_ssysvx (int matrix_layout, char fact, char uplo, lapack_int n, lapack_int nrhs, const float *a, lapack_int lda, float *af, lapack_int ldaf, lapack_int *ipiv, const float *b, lapack_int ldb, float *x, lapack_int ldx, float *rcond, float *ferr, float *berr)
lapack_int LAPACKE_dsysvx (int matrix_layout, char fact, char uplo, lapack_int n, lapack_int nrhs, const double *a, lapack_int lda, double *af, lapack_int ldaf, lapack_int *ipiv, const double *b, lapack_int ldb, double *x, lapack_int ldx, double *rcond, double *ferr, double *berr)
lapack_int LAPACKE_csysvx (int matrix_layout, char fact, char uplo, lapack_int n, lapack_int nrhs, const lapack_complex_float *a, lapack_int lda, lapack_complex_float *af, lapack_int ldaf, lapack_int *ipiv, const lapack_complex_float *b, lapack_int ldb, lapack_complex_float *x, lapack_int ldx, float *rcond, float *ferr, float *berr)
lapack_int LAPACKE_zsysvx (int matrix_layout, char fact, char uplo, lapack_int n, lapack_int nrhs, const lapack_complex_double *a, lapack_int lda, lapack_complex_double *af, lapack_int ldaf, lapack_int *ipiv, const lapack_complex_double *b, lapack_int ldb, lapack_complex_double *x, lapack_int ldx, double *rcond, double *ferr, double *berr)
and the ?sysvxx squad ate and left no crumbs — extra equed, s, rpvgrw, err_bnds_norm, err_bnds_comp, nparams, params, all iconic 👑
lapack_int LAPACKE_ssysvxx (int matrix_layout, char fact, char uplo, lapack_int n, lapack_int nrhs, float *a, lapack_int lda, float *af, lapack_int ldaf, lapack_int *ipiv, char *equed, float *s, float *b, lapack_int ldb, float *x, lapack_int ldx, float *rcond, float *rpvgrw, float *berr, lapack_int n_err_bnds, float *err_bnds_norm, float *err_bnds_comp, lapack_int nparams, float *params)
lapack_int LAPACKE_dsysvxx (int matrix_layout, char fact, char uplo, lapack_int n, lapack_int nrhs, double *a, lapack_int lda, double *af, lapack_int ldaf, lapack_int *ipiv, char *equed, double *s, double *b, lapack_int ldb, double *x, lapack_int ldx, double *rcond, double *rpvgrw, double *berr, lapack_int n_err_bnds, double *err_bnds_norm, double *err_bnds_comp, lapack_int nparams, double *params)
lapack_int LAPACKE_csysvxx (int matrix_layout, char fact, char uplo, lapack_int n, lapack_int nrhs, lapack_complex_float *a, lapack_int lda, lapack_complex_float *af, lapack_int ldaf, lapack_int *ipiv, char *equed, float *s, lapack_complex_float *b, lapack_int ldb, lapack_complex_float *x, lapack_int ldx, float *rcond, float *rpvgrw, float *berr, lapack_int n_err_bnds, float *err_bnds_norm, float *err_bnds_comp, lapack_int nparams, float *params)
lapack_int LAPACKE_zsysvxx (int matrix_layout, char fact, char uplo, lapack_int n, lapack_int nrhs, lapack_complex_double *a, lapack_int lda, lapack_complex_double *af, lapack_int ldaf, lapack_int *ipiv, char *equed, double *s, lapack_complex_double *b, lapack_int ldb, lapack_complex_double *x, lapack_int ldx, double *rcond, double *rpvgrw, double *berr, lapack_int n_err_bnds, double *err_bnds_norm, double *err_bnds_comp, lapack_int nparams, double *params)
the ?sytrd pair is small but mighty 🎀
lapack_int LAPACKE_ssytrd (int matrix_layout, char uplo, lapack_int n, float *a, lapack_int lda, float *d, float *e, float *tau)
lapack_int LAPACKE_dsytrd (int matrix_layout, char uplo, lapack_int n, double *a, lapack_int lda, double *d, double *e, double *tau)
then the ?sytrf quartet rolls through:
lapack_int LAPACKE_ssytrf (int matrix_layout, char uplo, lapack_int n, float *a, lapack_int lda, lapack_int *ipiv)
lapack_int LAPACKE_dsytrf (int matrix_layout, char uplo, lapack_int n, double *a, lapack_int lda, lapack_int *ipiv)
lapack_int LAPACKE_csytrf (int matrix_layout, char uplo, lapack_int n, lapack_complex_float *a, lapack_int lda, lapack_int *ipiv)
lapack_int LAPACKE_zsytrf (int matrix_layout, char uplo, lapack_int n, lapack_complex_double *a, lapack_int lda, lapack_int *ipiv)
?sytri said “const ipiv, we don’t play about you” 🦋
lapack_int LAPACKE_ssytri (int matrix_layout, char uplo, lapack_int n, float *a, lapack_int lda, const lapack_int *ipiv)
lapack_int LAPACKE_dsytri (int matrix_layout, char uplo, lapack_int n, double *a, lapack_int lda, const lapack_int *ipiv)
lapack_int LAPACKE_csytri (int matrix_layout, char uplo, lapack_int n, lapack_complex_float *a, lapack_int lda, const lapack_int *ipiv)
lapack_int LAPACKE_zsytri (int matrix_layout, char uplo, lapack_int n, lapack_complex_double *a, lapack_int lda, const lapack_int *ipiv)
and the ?sytrs quartet keeps the flow going:
lapack_int LAPACKE_ssytrs (int matrix_layout, char uplo, lapack_int n, lapack_int nrhs, const float *a, lapack_int lda, const lapack_int *ipiv, float *b, lapack_int ldb)
lapack_int LAPACKE_dsytrs (int matrix_layout, char uplo, lapack_int n, lapack_int nrhs, const double *a, lapack_int lda, const lapack_int *ipiv, double *b, lapack_int ldb)
lapack_int LAPACKE_csytrs (int matrix_layout, char uplo, lapack_int n, lapack_int nrhs, const lapack_complex_float *a, lapack_int lda, const lapack_int *ipiv, lapack_complex_float *b, lapack_int ldb)
lapack_int LAPACKE_zsytrs (int matrix_layout, char uplo, lapack_int n, lapack_int nrhs, const lapack_complex_double *a, lapack_int lda, const lapack_int *ipiv, lapack_complex_double *b, lapack_int ldb)
?tbcon is giving norm, uplo, diag, kd, and ldab energy 💜
lapack_int LAPACKE_stbcon (int matrix_layout, char norm, char uplo, char diag, lapack_int n, lapack_int kd, const float *ab, lapack_int ldab, float *rcond)
lapack_int LAPACKE_dtbcon (int matrix_layout, char norm, char uplo, char diag, lapack_int n, lapack_int kd, const double *ab, lapack_int ldab, double *rcond)
lapack_int LAPACKE_ctbcon (int matrix_layout, char norm, char uplo, char diag, lapack_int n, lapack_int kd, const lapack_complex_float *ab, lapack_int ldab, float *rcond)
lapack_int LAPACKE_ztbcon (int matrix_layout, char norm, char uplo, char diag, lapack_int n, lapack_int kd, const lapack_complex_double *ab, lapack_int ldab, double *rcond)
lastly for this part, the ?tbrfs crew pulls up, and bestie… the final signature is literally mid-cliffhanger 😭
lapack_int LAPACKE_stbrfs (int matrix_layout, char uplo, char trans, char diag, lapack_int n, lapack_int kd, lapack_int nrhs, const float *ab, lapack_int ldab, const float *b, lapack_int ldb, const float *x, lapack_int ldx, float *ferr, float *berr)
lapack_int LAPACKE_dtbrfs (int matrix_layout, char uplo, char trans, char diag, lapack_int n, lapack_int kd, lapack_int nrhs, const double *ab, lapack_int ldab, const double *b, lapack_int ldb, const double *x, lapack_int ldx, double *ferr, double *berr)
lapack_int LAPACKE_ctbrfs (int matrix_layout, char uplo, char trans, char diag, lapack_int n, lapack_int kd, lapack_int nrhs, const lapack_complex_float *ab, lapack_int ldab, const lapack_complex_float *b, lapack_int ldb, const lapack_complex_float *x, lapack_int ldx, float *ferr, float *berr)
lapack_int LAPACKE_ztbrfs (int matrix_layout, char uplo, char trans,
okay bestie, we’re still deep in SYNOPSIS land and it is long, but every signature below is kept exactly as-is — no cap, no edits 🫶
char diag, lapack_int n, lapack_int kd, lapack_int nrhs, const
lapack_complex_double *ab, lapack_int ldab, const
lapack_complex_double *b, lapack_int ldb, const
lapack_complex_double *x, lapack_int ldx, double *ferr, double
*berr)
lapack_int LAPACKE_stbtrs (int matrix_layout, char uplo, char trans,
char diag, lapack_int n, lapack_int kd, lapack_int nrhs, const float
*ab, lapack_int ldab, float *b, lapack_int ldb)
lapack_int LAPACKE_dtbtrs (int matrix_layout, char uplo, char trans,
char diag, lapack_int n, lapack_int kd, lapack_int nrhs, const
double *ab, lapack_int ldab, double *b, lapack_int ldb)
lapack_int LAPACKE_ctbtrs (int matrix_layout, char uplo, char trans,
char diag, lapack_int n, lapack_int kd, lapack_int nrhs, const
lapack_complex_float *ab, lapack_int ldab, lapack_complex_float *b,
lapack_int ldb)
lapack_int LAPACKE_ztbtrs (int matrix_layout, char uplo, char trans,
char diag, lapack_int n, lapack_int kd, lapack_int nrhs, const
lapack_complex_double *ab, lapack_int ldab, lapack_complex_double
*b, lapack_int ldb)
lapack_int LAPACKE_stfsm (int matrix_layout, char transr, char side,
char uplo, char trans, char diag, lapack_int m, lapack_int n, float
alpha, const float *a, float *b, lapack_int ldb)
lapack_int LAPACKE_dtfsm (int matrix_layout, char transr, char side,
char uplo, char trans, char diag, lapack_int m, lapack_int n, double
alpha, const double *a, double *b, lapack_int ldb)
lapack_int LAPACKE_ctfsm (int matrix_layout, char transr, char side,
char uplo, char trans, char diag, lapack_int m, lapack_int n,
lapack_complex_float alpha, const lapack_complex_float *a,
lapack_complex_float *b, lapack_int ldb)
lapack_int LAPACKE_ztfsm (int matrix_layout, char transr, char side,
char uplo, char trans, char diag, lapack_int m, lapack_int n,
lapack_complex_double alpha, const lapack_complex_double *a,
lapack_complex_double *b, lapack_int ldb)
lapack_int LAPACKE_stftri (int matrix_layout, char transr, char uplo,
char diag, lapack_int n, float *a)
lapack_int LAPACKE_dtftri (int matrix_layout, char transr, char uplo,
char diag, lapack_int n, double *a)
lapack_int LAPACKE_ctftri (int matrix_layout, char transr, char uplo,
char diag, lapack_int n, lapack_complex_float *a)
lapack_int LAPACKE_ztftri (int matrix_layout, char transr, char uplo,
char diag, lapack_int n, lapack_complex_double *a)
lapack_int LAPACKE_stfttp (int matrix_layout, char transr, char uplo,
lapack_int n, const float *arf, float *ap)
lapack_int LAPACKE_dtfttp (int matrix_layout, char transr, char uplo,
lapack_int n, const double *arf, double *ap)
lapack_int LAPACKE_ctfttp (int matrix_layout, char transr, char uplo,
lapack_int n, const lapack_complex_float *arf, lapack_complex_float
*ap)
lapack_int LAPACKE_ztfttp (int matrix_layout, char transr, char uplo,
lapack_int n, const lapack_complex_double *arf,
lapack_complex_double *ap)
lapack_int LAPACKE_stfttr (int matrix_layout, char transr, char uplo,
lapack_int n, const float *arf, float *a, lapack_int lda)
lapack_int LAPACKE_dtfttr (int matrix_layout, char transr, char uplo,
lapack_int n, const double *arf, double *a, lapack_int lda)
lapack_int LAPACKE_ctfttr (int matrix_layout, char transr, char uplo,
lapack_int n, const lapack_complex_float *arf, lapack_complex_float
*a, lapack_int lda)
lapack_int LAPACKE_ztfttr (int matrix_layout, char transr, char uplo,
lapack_int n, const lapack_complex_double *arf,
lapack_complex_double *a, lapack_int lda)
lapack_int LAPACKE_stgevc (int matrix_layout, char side, char howmny,
const lapack_logical *select, lapack_int n, const float *s,
lapack_int lds, const float *p, lapack_int ldp, float *vl,
lapack_int ldvl, float *vr, lapack_int ldvr, lapack_int mm,
lapack_int *m)
lapack_int LAPACKE_dtgevc (int matrix_layout, char side, char howmny,
const lapack_logical *select, lapack_int n, const double *s,
lapack_int lds, const double *p, lapack_int ldp, double *vl,
lapack_int ldvl, double *vr, lapack_int ldvr, lapack_int mm,
lapack_int *m)
lapack_int LAPACKE_ctgevc (int matrix_layout, char side, char howmny,
const lapack_logical *select, lapack_int n, const
lapack_complex_float *s, lapack_int lds, const lapack_complex_float
*p, lapack_int ldp, lapack_complex_float *vl, lapack_int ldvl,
lapack_complex_float *vr, lapack_int ldvr, lapack_int mm, lapack_int
*m)
lapack_int LAPACKE_ztgevc (int matrix_layout, char side, char howmny,
const lapack_logical *select, lapack_int n, const
lapack_complex_double *s, lapack_int lds, const
lapack_complex_double *p, lapack_int ldp, lapack_complex_double *vl,
lapack_int ldvl, lapack_complex_double *vr, lapack_int ldvr,
lapack_int mm, lapack_int *m)
lapack_int LAPACKE_stgexc (int matrix_layout, lapack_logical wantq,
lapack_logical wantz, lapack_int n, float *a, lapack_int lda, float
*b, lapack_int ldb, float *q, lapack_int ldq, float *z, lapack_int
ldz, lapack_int *ifst, lapack_int *ilst)
lapack_int LAPACKE_dtgexc (int matrix_layout, lapack_logical wantq,
lapack_logical wantz, lapack_int n, double *a, lapack_int lda,
double *b, lapack_int ldb, double *q, lapack_int ldq, double *z,
lapack_int ldz, lapack_int *ifst, lapack_int *ilst)
lapack_int LAPACKE_ctgexc (int matrix_layout, lapack_logical wantq,
lapack_logical wantz, lapack_int n, lapack_complex_float *a,
lapack_int lda, lapack_complex_float *b, lapack_int ldb,
lapack_complex_float *q, lapack_int ldq, lapack_complex_float *z,
lapack_int ldz, lapack_int ifst, lapack_int ilst)
lapack_int LAPACKE_ztgexc (int matrix_layout, lapack_logical wantq,
lapack_logical wantz, lapack_int n, lapack_complex_double *a,
lapack_int lda, lapack_complex_double *b, lapack_int ldb,
lapack_complex_double *q, lapack_int ldq, lapack_complex_double *z,
lapack_int ldz, lapack_int ifst, lapack_int ilst)
lapack_int LAPACKE_stgsen (int matrix_layout, lapack_int ijob,
lapack_logical wantq, lapack_logical wantz, const lapack_logical
*select, lapack_int n, float *a, lapack_int lda, float *b,
lapack_int ldb, float *alphar, float *alphai, float *beta, float *q,
lapack_int ldq, float *z, lapack_int ldz, lapack_int *m, float *pl,
float *pr, float *dif)
lapack_int LAPACKE_dtgsen (int matrix_layout, lapack_int ijob,
lapack_logical wantq, lapack_logical wantz, const lapack_logical
*select, lapack_int n, double *a, lapack_int lda, double *b,
lapack_int ldb, double *alphar, double *alphai, double *beta, double
*q, lapack_int ldq, double *z, lapack_int ldz, lapack_int *m, double
*pl, double *pr, double *dif)
lapack_int LAPACKE_ctgsen (int matrix_layout, lapack_int ijob,
lapack_logical wantq, lapack_logical wantz, const lapack_logical
*select, lapack_int n, lapack_complex_float *a, lapack_int lda,
lapack_complex_float *b, lapack_int ldb, lapack_complex_float
*alpha, lapack_complex_float *beta, lapack_complex_float *q,
lapack_int ldq, lapack_complex_float *z, lapack_int ldz, lapack_int
*m, float *pl, float *pr, float *dif)
lapack_int LAPACKE_ztgsen (int matrix_layout, lapack_int ijob,
lapack_logical wantq, lapack_logical wantz, const lapack_logical
*select, lapack_int n, lapack_complex_double *a, lapack_int lda,
lapack_complex_double *b, lapack_int ldb, lapack_complex_double
*alpha, lapack_complex_double *beta, lapack_complex_double *q,
lapack_int ldq, lapack_complex_double *z, lapack_int ldz, lapack_int
*m, double *pl, double *pr, double *dif)
lapack_int LAPACKE_stgsja (int matrix_layout, char jobu, char jobv, char
jobq, lapack_int m, lapack_int p, lapack_int n, lapack_int k,
lapack_int l, float *a, lapack_int lda, float *b, lapack_int ldb,
float tola, float tolb, float *alpha, float *beta, float *u,
lapack_int ldu, float *v, lapack_int ldv, float *q, lapack_int ldq,
lapack_int *ncycle)
lapack_int LAPACKE_dtgsja (int matrix_layout, char jobu, char jobv, char
jobq, lapack_int m, lapack_int p, lapack_int n, lapack_int k,
lapack_int l, double *a, lapack_int lda, double *b, lapack_int ldb,
double tola, double tolb, double *alpha, double *beta, double *u,
lapack_int ldu, double *v, lapack_int ldv, double *q, lapack_int
ldq, lapack_int *ncycle)
lapack_int LAPACKE_ctgsja (int matrix_layout, char jobu, char jobv, char
jobq, lapack_int m, lapack_int p, lapack_int n, lapack_int k,
lapack_int l, lapack_complex_float *a, lapack_int lda,
lapack_complex_float *b, lapack_int ldb, float tola, float tolb,
float *alpha, float *beta, lapack_complex_float *u, lapack_int ldu,
lapack_complex_float *v, lapack_int ldv, lapack_complex_float *q,
lapack_int ldq, lapack_int *ncycle)
lapack_int LAPACKE_ztgsja (int matrix_layout, char jobu, char jobv, char
jobq, lapack_int m, lapack_int p, lapack_int n, lapack_int k,
lapack_int l, lapack_complex_double *a, lapack_int lda,
lapack_complex_double *b, lapack_int ldb, double tola, double tolb,
double *alpha, double *beta, lapack_complex_double *u, lapack_int
ldu, lapack_complex_double *v, lapack_int ldv, lapack_complex_double
*q, lapack_int ldq, lapack_int *ncycle)
lapack_int LAPACKE_stgsna (int matrix_layout, char job, char howmny,
const lapack_logical *select, lapack_int n, const float *a,
lapack_int lda, const float *b, lapack_int ldb, const float *vl,
lapack_int ldvl, const float *vr, lapack_int ldvr, float *s, float
*dif, lapack_int mm, lapack_int *m)
lapack_int LAPACKE_dtgsna (int matrix_layout, char job, char howmny,
const lapack_logical *select, lapack_int n, const double *a,
lapack_int lda, const double *b, lapack_int ldb, const double *vl,
lapack_int ldvl, const double *vr, lapack_int ldvr, double *s,
double *dif, lapack_int mm, lapack_int *m)
lapack_int LAPACKE_ctgsna (int matrix_layout, char job, char howmny,
const lapack_logical *select, lapack_int n, const
lapack_complex_float *a, lapack_int lda, const lapack_complex_float
*b, lapack_int ldb, const lapack_complex_float *vl, lapack_int ldvl,
const lapack_complex_float *vr, lapack_int ldvr, float *s, float
*dif, lapack_int mm, lapack_int *m)
lapack_int LAPACKE_ztgsna (int matrix_layout, char job, char howmny,
const lapack_logical *select, lapack_int n, const
lapack_complex_double *a, lapack_int lda, const
lapack_complex_double *b, lapack_int ldb, const
lapack_complex_double *vl, lapack_int ldvl, const
lapack_complex_double *vr, lapack_int ldvr, double *s, double *dif,
lapack_int mm, lapack_int *m)
that’s the chunk 💅 still more synopsis energy loading, so keep scrolling bestie ✨
okay bestie we're still deep in the SYNOPSIS trenches and honestly? this is the triangular packed era of the list and it's lowkey giving "I memorized the whole LAPACK catalog" main character energy 💅 no cap, let's keep going, we're not even close to done ✨
🌀 the tgsyl girlies (Sylvester equation o'clock)
like, these ones solve the (generalized) Sylvester equation for you, which is such a mood 💜 four precisions, one job:
lapack_int LAPACKE_stgsyl (int matrix_layout, char trans, lapack_int
ijob, lapack_int m, lapack_int n, const float *a, lapack_int lda,
const float *b, lapack_int ldb, float *c, lapack_int ldc, const
float *d, lapack_int ldd, const float *e, lapack_int lde, float *f,
lapack_int ldf, float *scale, float *dif)
lapack_int LAPACKE_dtgsyl (int matrix_layout, char trans, lapack_int
ijob, lapack_int m, lapack_int n, const double *a, lapack_int lda,
const double *b, lapack_int ldb, double *c, lapack_int ldc, const
double *d, lapack_int ldd, const double *e, lapack_int lde, double
*f, lapack_int ldf, double *scale, double *dif)
lapack_int LAPACKE_ctgsyl (int matrix_layout, char trans, lapack_int
ijob, lapack_int m, lapack_int n, const lapack_complex_float *a,
lapack_int lda, const lapack_complex_float *b, lapack_int ldb,
lapack_complex_float *c, lapack_int ldc, const lapack_complex_float
*d, lapack_int ldd, const lapack_complex_float *e, lapack_int lde,
lapack_complex_float *f, lapack_int ldf, float *scale, float *dif)
lapack_int LAPACKE_ztgsyl (int matrix_layout, char trans, lapack_int
ijob, lapack_int m, lapack_int n, const lapack_complex_double *a,
lapack_int lda, const lapack_complex_double *b, lapack_int ldb,
lapack_complex_double *c, lapack_int ldc, const
lapack_complex_double *d, lapack_int ldd, const
lapack_complex_double *e, lapack_int lde, lapack_complex_double *f,
lapack_int ldf, double *scale, double *dif)
🎀 tpcon — condition number of a packed triangular matrix
you know the vibe: packed storage, triangular matrix, how close to singular is it 🫶
lapack_int LAPACKE_stpcon (int matrix_layout, char norm, char uplo, char
diag, lapack_int n, const float *ap, float *rcond)
lapack_int LAPACKE_dtpcon (int matrix_layout, char norm, char uplo, char
diag, lapack_int n, const double *ap, double *rcond)
lapack_int LAPACKE_ctpcon (int matrix_layout, char norm, char uplo, char
diag, lapack_int n, const lapack_complex_float *ap, float *rcond)
lapack_int LAPACKE_ztpcon (int matrix_layout, char norm, char uplo, char
diag, lapack_int n, const lapack_complex_double *ap, double *rcond)
💀 tprfs — the error-bound bestie
refines a solution AND gives you ferr/berr so you can vibe-check how wrong you were 😭
lapack_int LAPACKE_stprfs (int matrix_layout, char uplo, char trans,
char diag, lapack_int n, lapack_int nrhs, const float *ap, const
float *b, lapack_int ldb, const float *x, lapack_int ldx, float
*ferr, float *berr)
lapack_int LAPACKE_dtprfs (int matrix_layout, char uplo, char trans,
char diag, lapack_int n, lapack_int nrhs, const double *ap, const
double *b, lapack_int ldb, const double *x, lapack_int ldx, double
*ferr, double *berr)
lapack_int LAPACKE_ctprfs (int matrix_layout, char uplo, char trans,
char diag, lapack_int n, lapack_int nrhs, const lapack_complex_float
*ap, const lapack_complex_float *b, lapack_int ldb, const
lapack_complex_float *x, lapack_int ldx, float *ferr, float *berr)
lapack_int LAPACKE_ztprfs (int matrix_layout, char uplo, char trans,
char diag, lapack_int n, lapack_int nrhs, const
lapack_complex_double *ap, const lapack_complex_double *b,
lapack_int ldb, const lapack_complex_double *x, lapack_int ldx,
double *ferr, double *berr)
🧚 tptri — triangular inverse, packed edition
it inverts ap in place, that's the whole personality ✨
lapack_int LAPACKE_stptri (int matrix_layout, char uplo, char diag,
lapack_int n, float *ap)
lapack_int LAPACKE_dtptri (int matrix_layout, char uplo, char diag,
lapack_int n, double *ap)
lapack_int LAPACKE_ctptri (int matrix_layout, char uplo, char diag,
lapack_int n, lapack_complex_float *ap)
lapack_int LAPACKE_ztptri (int matrix_layout, char uplo, char diag,
lapack_int n, lapack_complex_double *ap)
🦋 tptrs — triangular solve, packed, multiple right-hand sides
solves A*X = B or A**T*X = B or A**H*X = B for you, no big deal 🔥
lapack_int LAPACKE_stptrs (int matrix_layout, char uplo, char trans,
char diag, lapack_int n, lapack_int nrhs, const float *ap, float *b,
lapack_int ldb)
lapack_int LAPACKE_dtptrs (int matrix_layout, char uplo, char trans,
char diag, lapack_int n, lapack_int nrhs, const double *ap, double
*b, lapack_int ldb)
lapack_int LAPACKE_ctptrs (int matrix_layout, char uplo, char trans,
char diag, lapack_int n, lapack_int nrhs, const lapack_complex_float
*ap, lapack_complex_float *b, lapack_int ldb)
lapack_int LAPACKE_ztptrs (int matrix_layout, char uplo, char trans,
char diag, lapack_int n, lapack_int nrhs, const
lapack_complex_double *ap, lapack_complex_double *b, lapack_int ldb)
🌸 tpttf — packed triangular ➡️ Rectangular Full Packed
glow-up transformation arc, honestly 🎀 packed ap goes in, arf comes out:
lapack_int LAPACKE_stpttf (int matrix_layout, char transr, char uplo,
lapack_int n, const float *ap, float *arf)
lapack_int LAPACKE_dtpttf (int matrix_layout, char transr, char uplo,
lapack_int n, const double *ap, double *arf)
lapack_int LAPACKE_ctpttf (int matrix_layout, char transr, char uplo,
lapack_int n, const lapack_complex_float *ap, lapack_complex_float
*arf)
lapack_int LAPACKE_ztpttf (int matrix_layout, char transr, char uplo,
lapack_int n, const lapack_complex_double *ap, lapack_complex_double
*arf)
🌈 tpttr — packed triangular ➡️ full rectangular
same energy but the other direction, unpacking that glow-up into a with leading dimension lda 👑
lapack_int LAPACKE_stpttr (int matrix_layout, char uplo, lapack_int n,
const float *ap, float *a, lapack_int lda)
lapack_int LAPACKE_dtpttr (int matrix_layout, char uplo, lapack_int n,
const double *ap, double *a, lapack_int lda)
lapack_int LAPACKE_ctpttr (int matrix_layout, char uplo, lapack_int n,
const lapack_complex_float *ap, lapack_complex_float *a, lapack_int
lda)
lapack_int LAPACKE_ztpttr (int matrix_layout, char uplo, lapack_int n,
const lapack_complex_double *ap, lapack_complex_double *a,
lapack_int lda)
💜 trcon — condition number, but make it full storage
packed was cute, this one takes the whole rectangle with lda 🫶
lapack_int LAPACKE_strcon (int matrix_layout, char norm, char uplo, char
diag, lapack_int n, const float *a, lapack_int lda, float *rcond)
lapack_int LAPACKE_dtrcon (int matrix_layout, char norm, char uplo, char
diag, lapack_int n, const double *a, lapack_int lda, double *rcond)
lapack_int LAPACKE_ctrcon (int matrix_layout, char norm, char uplo, char
diag, lapack_int n, const lapack_complex_float *a, lapack_int lda,
float *rcond)
lapack_int LAPACKE_ztrcon (int matrix_layout, char norm, char uplo, char
diag, lapack_int n, const lapack_complex_double *a, lapack_int lda,
double *rcond)
👑 trevc — eigenvectors of a triangular matrix, step into my office
select is a lapack_logical * here for the real ones (and a const lapack_logical * for the complex ones, bestie, don't @ me) ✨ plus vl, vr, mm and an output m:
lapack_int LAPACKE_strevc (int matrix_layout, char side, char howmny,
lapack_logical *select, lapack_int n, const float *t, lapack_int
ldt, float *vl, lapack_int ldvl, float *vr, lapack_int ldvr,
lapack_int mm, lapack_int *m)
lapack_int LAPACKE_dtrevc (int matrix_layout, char side, char howmny,
lapack_logical *select, lapack_int n, const double *t, lapack_int
ldt, double *vl, lapack_int ldvl, double *vr, lapack_int ldvr,
lapack_int mm, lapack_int *m)
lapack_int LAPACKE_ctrevc (int matrix_layout, char side, char howmny,
const lapack_logical *select, lapack_int n, lapack_complex_float *t,
lapack_int ldt, lapack_complex_float *vl, lapack_int ldvl,
lapack_complex_float *vr, lapack_int ldvr, lapack_int mm, lapack_int
*m)
lapack_int LAPACKE_ztrevc (int matrix_layout, char side, char howmny,
const lapack_logical *select, lapack_int n, lapack_complex_double
*t, lapack_int ldt, lapack_complex_double *vl, lapack_int ldvl,
lapack_complex_double *vr, lapack_int ldvr, lapack_int mm,
lapack_int *m)
🚨 tiny note bestie: forctrevcandztrevcthattis notconst(it'slapack_complex_float *t/lapack_complex_double *t), andselectISconstthere. the real versions get mutableselectand constt. do not mix those up, i'm begging 🙈
🍓 trexc — swap two eigenvalues, reorder the Schur form
compq decides if it's bringing q along for the ride, and ifst/ilst are pointers in the real versions but plain lapack_int values in the complex ones 💅 literally look at them:
lapack_int LAPACKE_strexc (int matrix_layout, char compq, lapack_int n,
float *t, lapack_int ldt, float *q, lapack_int ldq, lapack_int
*ifst, lapack_int *ilst)
lapack_int LAPACKE_dtrexc (int matrix_layout, char compq, lapack_int n,
double *t, lapack_int ldt, double *q, lapack_int ldq, lapack_int
*ifst, lapack_int *ilst)
lapack_int LAPACKE_ctrexc (int matrix_layout, char compq, lapack_int n,
lapack_complex_float *t, lapack_int ldt, lapack_complex_float *q,
lapack_int ldq, lapack_int ifst, lapack_int ilst)
lapack_int LAPACKE_ztrexc (int matrix_layout, char compq, lapack_int n,
lapack_complex_double *t, lapack_int ldt, lapack_complex_double *q,
lapack_int ldq, lapack_int ifst, lapack_int ilst)
⭐ trrfs — refine that triangular solve, get the error bounds
ferr and berr again, we stay obsessed 😌
lapack_int LAPACKE_strrfs (int matrix_layout, char uplo, char trans,
char diag, lapack_int n, lapack_int nrhs, const float *a, lapack_int
lda, const float *b, lapack_int ldb, const float *x, lapack_int ldx,
float *ferr, float *berr)
lapack_int LAPACKE_dtrrfs (int matrix_layout, char uplo, char trans,
char diag, lapack_int n, lapack_int nrhs, const double *a,
lapack_int lda, const double *b, lapack_int ldb, const double *x,
lapack_int ldx, double *ferr, double *berr)
lapack_int LAPACKE_ctrrfs (int matrix_layout, char uplo, char trans,
char diag, lapack_int n, lapack_int nrhs, const lapack_complex_float
*a, lapack_int lda, const lapack_complex_float *b, lapack_int ldb,
const lapack_complex_float *x, lapack_int ldx, float *ferr, float
*berr)
lapack_int LAPACKE_ztrrfs (int matrix_layout, char uplo, char trans,
char diag, lapack_int n, lapack_int nrhs, const
lapack_complex_double *a, lapack_int lda, const
lapack_complex_double *b, lapack_int ldb, const
lapack_complex_double *x, lapack_int ldx, double *ferr, double
*berr)
🧚♀️ trsen — reorder the Schur decomposition, get s and sep too
job and compq are the vibe setters, select picks your faves, and you get m, s and sep back 💖 note the real ones squeeze out wr and wi while the complex ones just hand you w:
lapack_int LAPACKE_strsen (int matrix_layout, char job, char compq,
const lapack_logical *select, lapack_int n, float *t, lapack_int
ldt, float *q, lapack_int ldq, float *wr, float *wi, lapack_int *m,
float *s, float *sep)
lapack_int LAPACKE_dtrsen (int matrix_layout, char job, char compq,
const lapack_logical *select, lapack_int n, double *t, lapack_int
ldt, double *q, lapack_int ldq, double *wr, double *wi, lapack_int
*m, double *s, double *sep)
lapack_int LAPACKE_ctrsen (int matrix_layout, char job, char compq,
const lapack_logical *select, lapack_int n, lapack_complex_float *t,
lapack_int ldt, lapack_complex_float *q, lapack_int ldq,
lapack_complex_float *w, lapack_int *m, float *s, float *sep)
lapack_int LAPACKE_ztrsen (int matrix_layout, char job, char compq,
const lapack_logical *select, lapack_int n, lapack_complex_double
*t, lapack_int ldt, lapack_complex_double *q, lapack_int ldq,
lapack_complex_double *w, lapack_int *m, double *s, double *sep)
🔥 trsna — condition numbers of the eigenvalues, the whole point tbh
job, howmny, select, t, vl, vr, s, sep, mm, and out comes m. it's giving final boss of the triangular section 🌈 and yes we're stopping mid-family here, ztrsna is coming in the next part, don't come for me 💀
lapack_int LAPACKE_strsna (int matrix_layout, char job, char howmny,
const lapack_logical *select, lapack_int n, const float *t,
lapack_int ldt, const float *vl, lapack_int ldvl, const float *vr,
lapack_int ldvr, float *s, float *sep, lapack_int mm, lapack_int *m)
lapack_int LAPACKE_dtrsna (int matrix_layout, char job, char howmny,
const lapack_logical *select, lapack_int n, const double *t,
lapack_int ldt, const double *vl, lapack_int ldvl, const double *vr,
lapack_int ldvr, double *s, double *sep, lapack_int mm, lapack_int
*m)
lapack_int LAPACKE_ctrsna (int matrix_layout, char job, char howmny,
const lapack_logical *select, lapack_int n, const
lapack_complex_float *t, lapack_int ldt, const lapack_complex_float
*vl, lapack_int ldvl, const lapack_complex_float *vr, lapack_int
ldvr, float *s, float *sep, lapack_int mm, lapack_int *m)
that's where we're at bestie, ztrsna and friends are literally right there waiting 🫶
Bestie, next chunk of the function roll-call. Same energy: sig, sig, sig, and I'm gonna hype each little family so none of them feel left out 🫶
🦋 the tr* girlies
First up, ztrsna — the lone complex-double representative here in this stretch, repping the select/howmny lifestyle with s and sep on the side:
lapack_int LAPACKE_ztrsna (int matrix_layout, char job, char howmny,
const lapack_logical *select, lapack_int n, const
lapack_complex_double *t, lapack_int ldt, const
lapack_complex_double *vl, lapack_int ldvl, const
lapack_complex_double *vr, lapack_int ldvr, double *s, double *sep,
lapack_int mm, lapack_int *m)
And then the whole trsyl squad, all four precisions, every one of them rocking trana, tranb, isgn, and a scale pointer at the very end (she's important, don't ghost her):
lapack_int LAPACKE_strsyl (int matrix_layout, char trana, char tranb,
lapack_int isgn, lapack_int m, lapack_int n, const float *a,
lapack_int lda, const float *b, lapack_int ldb, float *c, lapack_int
ldc, float *scale)
lapack_int LAPACKE_dtrsyl (int matrix_layout, char trana, char tranb,
lapack_int isgn, lapack_int m, lapack_int n, const double *a,
lapack_int lda, const double *b, lapack_int ldb, double *c,
lapack_int ldc, double *scale)
lapack_int LAPACKE_ctrsyl (int matrix_layout, char trana, char tranb,
lapack_int isgn, lapack_int m, lapack_int n, const
lapack_complex_float *a, lapack_int lda, const lapack_complex_float
*b, lapack_int ldb, lapack_complex_float *c, lapack_int ldc, float
*scale)
lapack_int LAPACKE_ztrsyl (int matrix_layout, char trana, char tranb,
lapack_int isgn, lapack_int m, lapack_int n, const
lapack_complex_double *a, lapack_int lda, const
lapack_complex_double *b, lapack_int ldb, lapack_complex_double *c,
lapack_int ldc, double *scale)
Next the triangular trio-of-trio: trtri (the inverse crew), trtrs (the solve crew), trttf (the transpose-then-arf crew), and trttp (the plain-old-ap crew). All four precisions each, no crumbs 🍓
lapack_int LAPACKE_strtri (int matrix_layout, char uplo, char diag,
lapack_int n, float *a, lapack_int lda)
lapack_int LAPACKE_dtrtri (int matrix_layout, char uplo, char diag,
lapack_int n, double *a, lapack_int lda)
lapack_int LAPACKE_ctrtri (int matrix_layout, char uplo, char diag,
lapack_int n, lapack_complex_float *a, lapack_int lda)
lapack_int LAPACKE_ztrtri (int matrix_layout, char uplo, char diag,
lapack_int n, lapack_complex_double *a, lapack_int lda)
lapack_int LAPACKE_strtrs (int matrix_layout, char uplo, char trans,
char diag, lapack_int n, lapack_int nrhs, const float *a, lapack_int
lda, float *b, lapack_int ldb)
lapack_int LAPACKE_dtrtrs (int matrix_layout, char uplo, char trans,
char diag, lapack_int n, lapack_int nrhs, const double *a,
lapack_int lda, double *b, lapack_int ldb)
lapack_int LAPACKE_ctrtrs (int matrix_layout, char uplo, char trans,
char diag, lapack_int n, lapack_int nrhs, const lapack_complex_float
*a, lapack_int lda, lapack_complex_float *b, lapack_int ldb)
lapack_int LAPACKE_ztrtrs (int matrix_layout, char uplo, char trans,
char diag, lapack_int n, lapack_int nrhs, const
lapack_complex_double *a, lapack_int lda, lapack_complex_double *b,
lapack_int ldb)
lapack_int LAPACKE_strttf (int matrix_layout, char transr, char uplo,
lapack_int n, const float *a, lapack_int lda, float *arf)
lapack_int LAPACKE_dtrttf (int matrix_layout, char transr, char uplo,
lapack_int n, const double *a, lapack_int lda, double *arf)
lapack_int LAPACKE_ctrttf (int matrix_layout, char transr, char uplo,
lapack_int n, const lapack_complex_float *a, lapack_int lda,
lapack_complex_float *arf)
lapack_int LAPACKE_ztrttf (int matrix_layout, char transr, char uplo,
lapack_int n, const lapack_complex_double *a, lapack_int lda,
lapack_complex_double *arf)
lapack_int LAPACKE_strttp (int matrix_layout, char uplo, lapack_int n,
const float *a, lapack_int lda, float *ap)
lapack_int LAPACKE_dtrttp (int matrix_layout, char uplo, lapack_int n,
const double *a, lapack_int lda, double *ap)
lapack_int LAPACKE_ctrttp (int matrix_layout, char uplo, lapack_int n,
const lapack_complex_float *a, lapack_int lda, lapack_complex_float
*ap)
lapack_int LAPACKE_ztrttp (int matrix_layout, char uplo, lapack_int n,
const lapack_complex_double *a, lapack_int lda,
lapack_complex_double *ap)
✨ tzrzf — short king, big energy
Four lines, matrix_layout, m, n, a matrix, and a tau. She's compact and she knows it:
lapack_int LAPACKE_stzrzf (int matrix_layout, lapack_int m, lapack_int
n, float *a, lapack_int lda, float *tau)
lapack_int LAPACKE_dtzrzf (int matrix_layout, lapack_int m, lapack_int
n, double *a, lapack_int lda, double *tau)
lapack_int LAPACKE_ctzrzf (int matrix_layout, lapack_int m, lapack_int
n, lapack_complex_float *a, lapack_int lda, lapack_complex_float
*tau)
lapack_int LAPACKE_ztzrzf (int matrix_layout, lapack_int m, lapack_int
n, lapack_complex_double *a, lapack_int lda, lapack_complex_double
*tau)
💜 the ung** glow-up era (complex only, she's exclusive)
ungbr comes in two flavours and takes vect:
lapack_int LAPACKE_cungbr (int matrix_layout, char vect, lapack_int m,
lapack_int n, lapack_int k, lapack_complex_float *a, lapack_int lda,
const lapack_complex_float *tau)
lapack_int LAPACKE_zungbr (int matrix_layout, char vect, lapack_int m,
lapack_int n, lapack_int k, lapack_complex_double *a, lapack_int
lda, const lapack_complex_double *tau)
unghr brings ilo and ihi to the party:
lapack_int LAPACKE_cunghr (int matrix_layout, lapack_int n, lapack_int
ilo, lapack_int ihi, lapack_complex_float *a, lapack_int lda, const
lapack_complex_float *tau)
lapack_int LAPACKE_zunghr (int matrix_layout, lapack_int n, lapack_int
ilo, lapack_int ihi, lapack_complex_double *a, lapack_int lda, const
lapack_complex_double *tau)
Then the m/n/k twinsies — unglq, ungql, ungqr, ungrq — four pairs, same shape, different last letter (and like… that last letter is doing SO much work, respect):
lapack_int LAPACKE_cunglq (int matrix_layout, lapack_int m, lapack_int
n, lapack_int k, lapack_complex_float *a, lapack_int lda, const
lapack_complex_float *tau)
lapack_int LAPACKE_zunglq (int matrix_layout, lapack_int m, lapack_int
n, lapack_int k, lapack_complex_double *a, lapack_int lda, const
lapack_complex_double *tau)
lapack_int LAPACKE_cungql (int matrix_layout, lapack_int m, lapack_int
n, lapack_int k, lapack_complex_float *a, lapack_int lda, const
lapack_complex_float *tau)
lapack_int LAPACKE_zungql (int matrix_layout, lapack_int m, lapack_int
n, lapack_int k, lapack_complex_double *a, lapack_int lda, const
lapack_complex_double *tau)
lapack_int LAPACKE_cungqr (int matrix_layout, lapack_int m, lapack_int
n, lapack_int k, lapack_complex_float *a, lapack_int lda, const
lapack_complex_float *tau)
lapack_int LAPACKE_zungqr (int matrix_layout, lapack_int m, lapack_int
n, lapack_int k, lapack_complex_double *a, lapack_int lda, const
lapack_complex_double *tau)
lapack_int LAPACKE_cungrq (int matrix_layout, lapack_int m, lapack_int
n, lapack_int k, lapack_complex_float *a, lapack_int lda, const
lapack_complex_float *tau)
lapack_int LAPACKE_zungrq (int matrix_layout, lapack_int m, lapack_int
n, lapack_int k, lapack_complex_double *a, lapack_int lda, const
lapack_complex_double *tau)
And ungtr closes out this block with uplo and no m/n/k at all — she's built different:
lapack_int LAPACKE_cungtr (int matrix_layout, char uplo, lapack_int n,
lapack_complex_float *a, lapack_int lda, const lapack_complex_float
*tau)
lapack_int LAPACKE_zungtr (int matrix_layout, char uplo, lapack_int n,
lapack_complex_double *a, lapack_int lda, const
lapack_complex_double *tau)
👑 the unm** collective — same vibes, side and trans unlocked
unmbr — it's giving full option menu (vect, side, trans, m, n, k) plus a c output matrix:
lapack_int LAPACKE_cunmbr (int matrix_layout, char vect, char side, char
trans, lapack_int m, lapack_int n, lapack_int k, const
lapack_complex_float *a, lapack_int lda, const lapack_complex_float
*tau, lapack_complex_float *c, lapack_int ldc)
lapack_int LAPACKE_zunmbr (int matrix_layout, char vect, char side, char
trans, lapack_int m, lapack_int n, lapack_int k, const
lapack_complex_double *a, lapack_int lda, const
lapack_complex_double *tau, lapack_complex_double *c, lapack_int
ldc)
unmhr swaps vect for ilo + ihi:
lapack_int LAPACKE_cunmhr (int matrix_layout, char side, char trans,
lapack_int m, lapack_int n, lapack_int ilo, lapack_int ihi, const
lapack_complex_float *a, lapack_int lda, const lapack_complex_float
*tau, lapack_complex_float *c, lapack_int ldc)
lapack_int LAPACKE_zunmhr (int matrix_layout, char side, char trans,
lapack_int m, lapack_int n, lapack_int ilo, lapack_int ihi, const
lapack_complex_double *a, lapack_int lda, const
lapack_complex_double *tau, lapack_complex_double *c, lapack_int
ldc)
Then the m/n/k set: unmlq, unmql, unmqr, unmrq — all with side and trans up front, c and ldc bringing up the rear:
lapack_int LAPACKE_cunmlq (int matrix_layout, char side, char trans,
lapack_int m, lapack_int n, lapack_int k, const lapack_complex_float
*a, lapack_int lda, const lapack_complex_float *tau,
lapack_complex_float *c, lapack_int ldc)
lapack_int LAPACKE_zunmlq (int matrix_layout, char side, char trans,
lapack_int m, lapack_int n, lapack_int k, const
lapack_complex_double *a, lapack_int lda, const
lapack_complex_double *tau, lapack_complex_double *c, lapack_int
ldc)
lapack_int LAPACKE_cunmql (int matrix_layout, char side, char trans,
lapack_int m, lapack_int n, lapack_int k, const lapack_complex_float
*a, lapack_int lda, const lapack_complex_float *tau,
lapack_complex_float *c, lapack_int ldc)
lapack_int LAPACKE_zunmql (int matrix_layout, char side, char trans,
lapack_int m, lapack_int n, lapack_int k, const
lapack_complex_double *a, lapack_int lda, const
lapack_complex_double *tau, lapack_complex_double *c, lapack_int
ldc)
lapack_int LAPACKE_cunmqr (int matrix_layout, char side, char trans,
lapack_int m, lapack_int n, lapack_int k, const lapack_complex_float
*a, lapack_int lda, const lapack_complex_float *tau,
lapack_complex_float *c, lapack_int ldc)
lapack_int LAPACKE_zunmqr (int matrix_layout, char side, char trans,
lapack_int m, lapack_int n, lapack_int k, const
lapack_complex_double *a, lapack_int lda, const
lapack_complex_double *tau, lapack_complex_double *c, lapack_int
ldc)
lapack_int LAPACKE_cunmrq (int matrix_layout, char side, char trans,
lapack_int m, lapack_int n, lapack_int k, const lapack_complex_float
*a, lapack_int lda, const lapack_complex_float *tau,
lapack_complex_float *c, lapack_int ldc)
lapack_int LAPACKE_zunmrq (int matrix_layout, char side, char trans,
lapack_int m, lapack_int n, lapack_int k, const
lapack_complex_double *a, lapack_int lda, const
lapack_complex_double *tau, lapack_complex_double *c, lapack_int
ldc)
unmrz is the bonus-boss version with an extra l wedged in there (ngl I clocked it immediately):
lapack_int LAPACKE_cunmrz (int matrix_layout, char side, char trans,
lapack_int m, lapack_int n, lapack_int k, lapack_int l, const
lapack_complex_float *a, lapack_int lda, const lapack_complex_float
*tau, lapack_complex_float *c, lapack_int ldc)
lapack_int LAPACKE_zunmrz (int matrix_layout, char side, char trans,
lapack_int m, lapack_int n, lapack_int k, lapack_int l, const
lapack_complex_double *a, lapack_int lda, const
lapack_complex_double *tau, lapack_complex_double *c, lapack_int
ldc)
And this part cuts off mid-unmtr — cunmtr is here in full, zunmtr is left hanging right at const lapack_complex_double *tau,… don't worry bestie, it gets finished next part 😭💅
lapack_int LAPACKE_cunmtr (int matrix_layout, char side, char uplo, char
trans, lapack_int m, lapack_int n, const lapack_complex_float *a,
lapack_int lda, const lapack_complex_float *tau,
lapack_complex_float *c, lapack_int ldc)
lapack_int LAPACKE_zunmtr (int matrix_layout, char side, char uplo, char
trans, lapack_int m, lapack_int n, const lapack_complex_double *a,
lapack_int lda, const lapack_complex_double *tau,
…and to finish off that declaration from before, the tail end looks like this (yes, it's a leftover line, she's just vibing):
lapack_complex_double *c, lapack_int ldc)
lapack_int LAPACKE_cupgtr (int matrix_layout, char uplo, lapack_int n,
const lapack_complex_float *ap, const lapack_complex_float *tau,
lapack_complex_float *q, lapack_int ldq)
lapack_int LAPACKE_zupgtr (int matrix_layout, char uplo, lapack_int n,
const lapack_complex_double *ap, const lapack_complex_double *tau,
lapack_complex_double *q, lapack_int ldq)
✨ two of them, c and z, same shape, different precision. ok and then their sibling:
lapack_int LAPACKE_cupmtr (int matrix_layout, char side, char uplo, char
trans, lapack_int m, lapack_int n, const lapack_complex_float *ap,
const lapack_complex_float *tau, lapack_complex_float *c, lapack_int
ldc)
lapack_int LAPACKE_zupmtr (int matrix_layout, char side, char uplo, char
trans, lapack_int m, lapack_int n, const lapack_complex_double *ap,
const lapack_complex_double *tau, lapack_complex_double *c,
lapack_int ldc)
note the side 👀 she brought an extra char parameter to the party, iconic behavior.
🦋 the bdsdc girlies
lapack_int LAPACKE_sbdsdc_work (int matrix_layout, char uplo, char
compq, lapack_int n, float *d, float *e, float *u, lapack_int ldu,
float *vt, lapack_int ldvt, float *q, lapack_int *iq, float *work,
lapack_int *iwork)
lapack_int LAPACKE_dbdsdc_work (int matrix_layout, char uplo, char
compq, lapack_int n, double *d, double *e, double *u, lapack_int
ldu, double *vt, lapack_int ldvt, double *q, lapack_int *iq, double
*work, lapack_int *iwork)
ok so these two are highkey the "moving apartments" type — they take u, vt, q, iq, work, iwork, all of it. very main character energy, takes up the whole group chat 💀
then the bdsvdx duo, which is the same vibe but with ns, s, and z in the mix:
lapack_int LAPACKE_sbdsvdx_work (int matrix_layout, char uplo, char
jobz, char range, lapack_int n, float *d, float *e, float vl, float
vu, lapack_int il, lapack_int iu, lapack_int *ns, float *s, float
*z, lapack_int ldz, float *work, lapack_int *iwork)
lapack_int LAPACKE_dbdsvdx_work (int matrix_layout, char uplo, char
jobz, char range, lapack_int n, double *d, double *e, double vl,
double vu, lapack_int il, lapack_int iu, lapack_int *ns, double *s,
double *z, lapack_int ldz, double *work, lapack_int *iwork)
jobz and range both chars, vl/vu, il/iu — she's got options and she's not afraid to use them.
💅 bdsqr — the whole squad shows up
four of them fr fr, one per type:
lapack_int LAPACKE_sbdsqr_work (int matrix_layout, char uplo, lapack_int
n, lapack_int ncvt, lapack_int nru, lapack_int ncc, float *d, float
*e, float *vt, lapack_int ldvt, float *u, lapack_int ldu, float *c,
lapack_int ldc, float *work)
lapack_int LAPACKE_dbdsqr_work (int matrix_layout, char uplo, lapack_int
n, lapack_int ncvt, lapack_int nru, lapack_int ncc, double *d,
double *e, double *vt, lapack_int ldvt, double *u, lapack_int ldu,
double *c, lapack_int ldc, double *work)
lapack_int LAPACKE_cbdsqr_work (int matrix_layout, char uplo, lapack_int
n, lapack_int ncvt, lapack_int nru, lapack_int ncc, float *d, float
*e, lapack_complex_float *vt, lapack_int ldvt, lapack_complex_float
*u, lapack_int ldu, lapack_complex_float *c, lapack_int ldc, float
*work)
lapack_int LAPACKE_zbdsqr_work (int matrix_layout, char uplo, lapack_int
n, lapack_int ncvt, lapack_int nru, lapack_int ncc, double *d,
double *e, lapack_complex_double *vt, lapack_int ldvt,
lapack_complex_double *u, lapack_int ldu, lapack_complex_double *c,
lapack_int ldc, double *work)
things to notice bestie: ncvt, nru, ncc — three whole counts, and ldvt, ldu, ldc — three whole leading dimensions. she said be thorough. also the c/z ones keep d and e as plain float/double while vt, u, c go complex. the way that's consistent across both. ate. 🎀
🫶 disna — only two, tiny icon
lapack_int LAPACKE_sdisna_work (char job, lapack_int m, lapack_int n,
const float *d, float *sep)
lapack_int LAPACKE_ddisna_work (char job, lapack_int m, lapack_int n,
const double *d, double *sep)
no matrix_layout here 💀 she's built different. just job, m, n, d, sep. minimal, clean, no notes.
🌈 gbbrd — the fancy one with a vector param
lapack_int LAPACKE_sgbbrd_work (int matrix_layout, char vect, lapack_int
m, lapack_int n, lapack_int ncc, lapack_int kl, lapack_int ku, float
*ab, lapack_int ldab, float *d, float *e, float *q, lapack_int ldq,
float *pt, lapack_int ldpt, float *c, lapack_int ldc, float *work)
lapack_int LAPACKE_dgbbrd_work (int matrix_layout, char vect, lapack_int
m, lapack_int n, lapack_int ncc, lapack_int kl, lapack_int ku,
double *ab, lapack_int ldab, double *d, double *e, double *q,
lapack_int ldq, double *pt, lapack_int ldpt, double *c, lapack_int
ldc, double *work)
lapack_int LAPACKE_cgbbrd_work (int matrix_layout, char vect, lapack_int
m, lapack_int n, lapack_int ncc, lapack_int kl, lapack_int ku,
lapack_complex_float *ab, lapack_int ldab, float *d, float *e,
lapack_complex_float *q, lapack_int ldq, lapack_complex_float *pt,
lapack_int ldpt, lapack_complex_float *c, lapack_int ldc,
lapack_complex_float *work, float *rwork)
lapack_int LAPACKE_zgbbrd_work (int matrix_layout, char vect, lapack_int
m, lapack_int n, lapack_int ncc, lapack_int kl, lapack_int ku,
lapack_complex_double *ab, lapack_int ldab, double *d, double *e,
lapack_complex_double *q, lapack_int ldq, lapack_complex_double *pt,
lapack_int ldpt, lapack_complex_double *c, lapack_int ldc,
lapack_complex_double *work, double *rwork)
q and pt and c all in one signature — she's the friend who brings snacks, drinks, and a playlist 🍓 and pls note the complex ones get that extra rwork at the end. not me pointing out that asymmetry 🙈
⭐ gbcon — converged and serving
lapack_int LAPACKE_sgbcon_work (int matrix_layout, char norm, lapack_int
n, lapack_int kl, lapack_int ku, const float *ab, lapack_int ldab,
const lapack_int *ipiv, float anorm, float *rcond, float *work,
lapack_int *iwork)
lapack_int LAPACKE_dgbcon_work (int matrix_layout, char norm, lapack_int
n, lapack_int kl, lapack_int ku, const double *ab, lapack_int ldab,
const lapack_int *ipiv, double anorm, double *rcond, double *work,
lapack_int *iwork)
lapack_int LAPACKE_cgbcon_work (int matrix_layout, char norm, lapack_int
n, lapack_int kl, lapack_int ku, const lapack_complex_float *ab,
lapack_int ldab, const lapack_int *ipiv, float anorm, float *rcond,
lapack_complex_float *work, float *rwork)
lapack_int LAPACKE_zgbcon_work (int matrix_layout, char norm, lapack_int
n, lapack_int kl, lapack_int ku, const lapack_complex_double *ab,
lapack_int ldab, const lapack_int *ipiv, double anorm, double
*rcond, lapack_complex_double *work, double *rwork)
norm is a char (iconic), ipiv is const lapack_int * (respectful), anorm is passed by value, rcond is the output. the real ones get iwork, the complex ones get rwork — same drama, different accessory 💅
🧚 gbequ and her louder cousin gbequb
lapack_int LAPACKE_sgbequ_work (int matrix_layout, lapack_int m,
lapack_int n, lapack_int kl, lapack_int ku, const float *ab,
lapack_int ldab, float *r, float *c, float *rowcnd, float *colcnd,
float *amax)
lapack_int LAPACKE_dgbequ_work (int matrix_layout, lapack_int m,
lapack_int n, lapack_int kl, lapack_int ku, const double *ab,
lapack_int ldab, double *r, double *c, double *rowcnd, double
*colcnd, double *amax)
lapack_int LAPACKE_cgbequ_work (int matrix_layout, lapack_int m,
lapack_int n, lapack_int kl, lapack_int ku, const
lapack_complex_float *ab, lapack_int ldab, float *r, float *c, float
*rowcnd, float *colcnd, float *amax)
lapack_int LAPACKE_zgbequ_work (int matrix_layout, lapack_int m,
lapack_int n, lapack_int kl, lapack_int ku, const
lapack_complex_double *ab, lapack_int ldab, double *r, double *c,
double *rowcnd, double *colcnd, double *amax)
and the b version, which is literally the identical signature list, just with a b on the name:
lapack_int LAPACKE_sgbequb_work (int matrix_layout, lapack_int m,
lapack_int n, lapack_int kl, lapack_int ku, const float *ab,
lapack_int ldab, float *r, float *c, float *rowcnd, float *colcnd,
float *amax)
lapack_int LAPACKE_dgbequb_work (int matrix_layout, lapack_int m,
lapack_int n, lapack_int kl, lapack_int ku, const double *ab,
lapack_int ldab, double *r, double *c, double *rowcnd, double
*colcnd, double *amax)
lapack_int LAPACKE_cgbequb_work (int matrix_layout, lapack_int m,
lapack_int n, lapack_int kl, lapack_int ku, const
lapack_complex_float *ab, lapack_int ldab, float *r, float *c, float
*rowcnd, float *colcnd, float *amax)
lapack_int LAPACKE_zgbequb_work (int matrix_layout, lapack_int m,
lapack_int n, lapack_int kl, lapack_int ku, const
lapack_complex_double *ab, lapack_int ldab, double *r, double *c,
double *rowcnd, double *colcnd, double *amax)
the way they're twins. no notes, just r, c, rowcnd, colcnd, amax in every single one. consistent queen 👑
🔥 gbrfs — came to refine
lapack_int LAPACKE_sgbrfs_work (int matrix_layout, char trans,
lapack_int n, lapack_int kl, lapack_int ku, lapack_int nrhs, const
float *ab, lapack_int ldab, const float *afb, lapack_int ldafb,
const lapack_int *ipiv, const float *b, lapack_int ldb, float *x,
lapack_int ldx, float *ferr, float *berr, float *work, lapack_int
*iwork)
lapack_int LAPACKE_dgbrfs_work (int matrix_layout, char trans,
lapack_int n, lapack_int kl, lapack_int ku, lapack_int nrhs, const
double *ab, lapack_int ldab, const double *afb, lapack_int ldafb,
const lapack_int *ipiv, const double *b, lapack_int ldb, double *x,
lapack_int ldx, double *ferr, double *berr, double *work, lapack_int
*iwork)
lapack_int LAPACKE_cgbrfs_work (int matrix_layout, char trans,
lapack_int n, lapack_int kl, lapack_int ku, lapack_int nrhs, const
lapack_complex_float *ab, lapack_int ldab, const
lapack_complex_float *afb, lapack_int ldafb, const lapack_int *ipiv,
const lapack_complex_float *b, lapack_int ldb, lapack_complex_float
*x, lapack_int ldx, float *ferr, float *berr, lapack_complex_float
*work, float *rwork)
lapack_int LAPACKE_zgbrfs_work (int matrix_layout, char trans,
lapack_int n, lapack_int kl, lapack_int ku, lapack_int nrhs, const
lapack_complex_double *ab, lapack_int ldab, const
lapack_complex_double *afb, lapack_int ldafb, const lapack_int
*ipiv, const lapack_complex_double *b, lapack_int ldb,
lapack_complex_double *x, lapack_int ldx, double *ferr, double
*berr, lapack_complex_double *work, double *rwork)
ok so we got ab and afb, ldab and ldafb, b and x, ldb and ldx, plus ferr and berr. that's a lot of parallel universes happening in one function call, and honestly? she pulls it off. 💖
👑 gbrfsx — gbrfs but make it extra
lapack_int LAPACKE_sgbrfsx_work (int matrix_layout, char trans, char
equed, lapack_int n, lapack_int kl, lapack_int ku, lapack_int nrhs,
const float *ab, lapack_int ldab, const float *afb, lapack_int
ldafb, const lapack_int *ipiv, const float *r, const float *c, const
float *b, lapack_int ldb, float *x, lapack_int ldx, float *rcond,
float *berr, lapack_int n_err_bnds, float *err_bnds_norm, float
*err_bnds_comp, lapack_int nparams, float *params, float *work,
lapack_int *iwork)
lapack_int LAPACKE_dgbrfsx_work (int matrix_layout, char trans, char
equed, lapack_int n, lapack_int kl, lapack_int ku, lapack_int nrhs,
const double *ab, lapack_int ldab, const double *afb, lapack_int
ldafb, const lapack_int *ipiv, const double *r, const double *c,
const double *b, lapack_int ldb, double *x, lapack_int ldx, double
*rcond, double *berr, lapack_int n_err_bnds, double *err_bnds_norm,
double *err_bnds_comp, lapack_int nparams, double *params, double
*work, lapack_int *iwork)
lapack_int LAPACKE_cgbrfsx_work (int matrix_layout, char trans, char
equed, lapack_int n, lapack_int kl, lapack_int ku, lapack_int nrhs,
const lapack_complex_float *ab, lapack_int ldab, const
lapack_complex_float *afb, lapack_int ldafb, const lapack_int *ipiv,
const float *r, const float *c, const lapack_complex_float *b,
lapack_int ldb, lapack_complex_float *x, lapack_int ldx, float
*rcond, float *berr, lapack_int n_err_bnds, float *err_bnds_norm,
float *err_bnds_comp, lapack_int nparams, float *params,
lapack_complex_float *work, float *rwork)
lapack_int LAPACKE_zgbrfsx_work (int matrix_layout, char trans, char
equed, lapack_int n, lapack_int kl, lapack_int ku, lapack_int nrhs,
and yes, that's where we stop for now — cliffhanger mid-signature, the audacity 😭 the s, d, and c versions are fully here with equed, r, c, rcond, berr, n_err_bnds, err_bnds_norm, err_bnds_comp, nparams, params and their work arrays; the z one is still mid-sentence and we're gonna pick her up next time. 🦋
okay so we're still deep in the prototype lineup, bestie — no cap, every single signature below is exactly as it appears, so don't let the group-chat energy fool you 💅✨
const lapack_complex_double *ab, lapack_int ldab, const lapack_complex_double *afb, lapack_int ldafb, const lapack_int *ipiv, const double *r, const double *c, const lapack_complex_double *b, lapack_int ldb, lapack_complex_double *x, lapack_int ldx, double *rcond, double *berr, lapack_int n_err_bnds, double *err_bnds_norm, double *err_bnds_comp, lapack_int nparams, double *params, lapack_complex_double *work, double *rwork)
lapack_int LAPACKE_sgbsv_work (int matrix_layout, lapack_int n, lapack_int kl, lapack_int ku, lapack_int nrhs, float *ab, lapack_int ldab, lapack_int *ipiv, float *b, lapack_int ldb)
lapack_int LAPACKE_dgbsv_work (int matrix_layout, lapack_int n, lapack_int kl, lapack_int ku, lapack_int nrhs, double *ab, lapack_int ldab, lapack_int *ipiv, double *b, lapack_int ldb)
lapack_int LAPACKE_cgbsv_work (int matrix_layout, lapack_int n, lapack_int kl, lapack_int ku, lapack_int nrhs, lapack_complex_float *ab, lapack_int ldab, lapack_int *ipiv, lapack_complex_float *b, lapack_int ldb)
lapack_int LAPACKE_zgbsv_work (int matrix_layout, lapack_int n, lapack_int kl, lapack_int ku, lapack_int nrhs, lapack_complex_double *ab, lapack_int ldab, lapack_int *ipiv, lapack_complex_double *b, lapack_int ldb)
lapack_int LAPACKE_sgbsvx_work (int matrix_layout, char fact, char trans, lapack_int n, lapack_int kl, lapack_int ku, lapack_int nrhs, float *ab, lapack_int ldab, float *afb, lapack_int ldafb, lapack_int *ipiv, char *equed, float *r, float *c, float *b, lapack_int ldb, float *x, lapack_int ldx, float *rcond, float *ferr, float *berr, float *work, lapack_int *iwork)
lapack_int LAPACKE_dgbsvx_work (int matrix_layout, char fact, char trans, lapack_int n, lapack_int kl, lapack_int ku, lapack_int nrhs, double *ab, lapack_int ldab, double *afb, lapack_int ldafb, lapack_int *ipiv, char *equed, double *r, double *c, double *b, lapack_int ldb, double *x, lapack_int ldx, double *rcond, double *ferr, double *berr, double *work, lapack_int *iwork)
lapack_int LAPACKE_cgbsvx_work (int matrix_layout, char fact, char trans, lapack_int n, lapack_int kl, lapack_int ku, lapack_int nrhs, lapack_complex_float *ab, lapack_int ldab, lapack_complex_float *afb, lapack_int ldafb, lapack_int *ipiv, char *equed, float *r, float *c, lapack_complex_float *b, lapack_int ldb, lapack_complex_float *x, lapack_int ldx, float *rcond, float *ferr, float *berr, lapack_complex_float *work, float *rwork)
lapack_int LAPACKE_zgbsvx_work (int matrix_layout, char fact, char trans, lapack_int n, lapack_int kl, lapack_int ku, lapack_int nrhs, lapack_complex_double *ab, lapack_int ldab, lapack_complex_double *afb, lapack_int ldafb, lapack_int *ipiv, char *equed, double *r, double *c, lapack_complex_double *b, lapack_int ldb, lapack_complex_double *x, lapack_int ldx, double *rcond, double *ferr, double *berr, lapack_complex_double *work, double *rwork)
lapack_int LAPACKE_sgbsvxx_work (int matrix_layout, char fact, char trans, lapack_int n, lapack_int kl, lapack_int ku, lapack_int nrhs, float *ab, lapack_int ldab, float *afb, lapack_int ldafb, lapack_int *ipiv, char *equed, float *r, float *c, float *b, lapack_int ldb, float *x, lapack_int ldx, float *rcond, float *rpvgrw, float *berr, lapack_int n_err_bnds, float *err_bnds_norm, float *err_bnds_comp, lapack_int nparams, float *params, float *work, lapack_int *iwork)
lapack_int LAPACKE_dgbsvxx_work (int matrix_layout, char fact, char trans, lapack_int n, lapack_int kl, lapack_int ku, lapack_int nrhs, double *ab, lapack_int ldab, double *afb, lapack_int ldafb, lapack_int *ipiv, char *equed, double *r, double *c, double *b, lapack_int ldb, double *x, lapack_int ldx, double *rcond, double *rpvgrw, double *berr, lapack_int n_err_bnds, double *err_bnds_norm, double *err_bnds_comp, lapack_int nparams, double *params, double *work, lapack_int *iwork)
lapack_int LAPACKE_cgbsvxx_work (int matrix_layout, char fact, char trans, lapack_int n, lapack_int kl, lapack_int ku, lapack_int nrhs, lapack_complex_float *ab, lapack_int ldab, lapack_complex_float *afb, lapack_int ldafb, lapack_int *ipiv, char *equed, float *r, float *c, lapack_complex_float *b, lapack_int ldb, lapack_complex_float *x, lapack_int ldx, float *rcond, float *rpvgrw, float *berr, lapack_int n_err_bnds, float *err_bnds_norm, float *err_bnds_comp, lapack_int nparams, float *params, lapack_complex_float *work, float *rwork)
lapack_int LAPACKE_zgbsvxx_work (int matrix_layout, char fact, char trans, lapack_int n, lapack_int kl, lapack_int ku, lapack_int nrhs, lapack_complex_double *ab, lapack_int ldab, lapack_complex_double *afb, lapack_int ldafb, lapack_int *ipiv, char *equed, double *r, double *c, lapack_complex_double *b, lapack_int ldb, lapack_complex_double *x, lapack_int ldx, double *rcond, double *rpvgrw, double *berr, lapack_int n_err_bnds, double *err_bnds_norm, double *err_bnds_comp, lapack_int nparams, double *params, lapack_complex_double *work, double *rwork)
lapack_int LAPACKE_sgbtrf_work (int matrix_layout, lapack_int m, lapack_int n, lapack_int kl, lapack_int ku, float *ab, lapack_int ldab, lapack_int *ipiv)
lapack_int LAPACKE_dgbtrf_work (int matrix_layout, lapack_int m, lapack_int n, lapack_int kl, lapack_int ku, double *ab, lapack_int ldab, lapack_int *ipiv)
lapack_int LAPACKE_cgbtrf_work (int matrix_layout, lapack_int m, lapack_int n, lapack_int kl, lapack_int ku, lapack_complex_float *ab, lapack_int ldab, lapack_int *ipiv)
lapack_int LAPACKE_zgbtrf_work (int matrix_layout, lapack_int m, lapack_int n, lapack_int kl, lapack_int ku, lapack_complex_double *ab, lapack_int ldab, lapack_int *ipiv)
lapack_int LAPACKE_sgbtrs_work (int matrix_layout, char trans, lapack_int n, lapack_int kl, lapack_int ku, lapack_int nrhs, const float *ab, lapack_int ldab, const lapack_int *ipiv, float *b, lapack_int ldb)
lapack_int LAPACKE_dgbtrs_work (int matrix_layout, char trans, lapack_int n, lapack_int kl, lapack_int ku, lapack_int nrhs, const double *ab, lapack_int ldab, const lapack_int *ipiv, double *b, lapack_int ldb)
lapack_int LAPACKE_cgbtrs_work (int matrix_layout, char trans, lapack_int n, lapack_int kl, lapack_int ku, lapack_int nrhs, const lapack_complex_float *ab, lapack_int ldab, const lapack_int *ipiv, lapack_complex_float *b, lapack_int ldb)
lapack_int LAPACKE_zgbtrs_work (int matrix_layout, char trans, lapack_int n, lapack_int kl, lapack_int ku, lapack_int nrhs, const lapack_complex_double *ab, lapack_int ldab, const lapack_int *ipiv, lapack_complex_double *b, lapack_int ldb)
lapack_int LAPACKE_sgebak_work (int matrix_layout, char job, char side, lapack_int n, lapack_int ilo, lapack_int ihi, const float *scale, lapack_int m, float *v, lapack_int ldv)
lapack_int LAPACKE_dgebak_work (int matrix_layout, char job, char side, lapack_int n, lapack_int ilo, lapack_int ihi, const double *scale, lapack_int m, double *v, lapack_int ldv)
lapack_int LAPACKE_cgebak_work (int matrix_layout, char job, char side, lapack_int n, lapack_int ilo, lapack_int ihi, const float *scale, lapack_int m, lapack_complex_float *v, lapack_int ldv)
lapack_int LAPACKE_zgebak_work (int matrix_layout, char job, char side, lapack_int n, lapack_int ilo, lapack_int ihi, const double *scale, lapack_int m, lapack_complex_double *v, lapack_int ldv)
lapack_int LAPACKE_sgebal_work (int matrix_layout, char job, lapack_int n, float *a, lapack_int lda, lapack_int *ilo, lapack_int *ihi, float *scale)
lapack_int LAPACKE_dgebal_work (int matrix_layout, char job, lapack_int n, double *a, lapack_int lda, lapack_int *ilo, lapack_int *ihi, double *scale)
lapack_int LAPACKE_cgebal_work (int matrix_layout, char job, lapack_int n, lapack_complex_float *a, lapack_int lda, lapack_int *ilo, lapack_int *ihi, float *scale)
lapack_int LAPACKE_zgebal_work (int matrix_layout, char job, lapack_int n, lapack_complex_double *a, lapack_int lda, lapack_int *ilo, lapack_int *ihi, double *scale)
lapack_int LAPACKE_sgebrd_work (int matrix_layout, lapack_int m, lapack_int n, float *a, lapack_int lda, float *d, float *e, float *tauq, float *taup, float *work, lapack_int lwork)
lapack_int LAPACKE_dgebrd_work (int matrix_layout, lapack_int m, lapack_int n, double *a, lapack_int lda, double *d, double *e, double *tauq, double *taup, double *work, lapack_int lwork)
lapack_int LAPACKE_cgebrd_work (int matrix_layout, lapack_int m, lapack_int n, lapack_complex_float *a, lapack_int lda, float *d, float *e, lapack_complex_float *tauq, lapack_complex_float *taup, lapack_complex_float *work, lapack_int lwork)
lapack_int LAPACKE_zgebrd_work (int matrix_layout, lapack_int m, lapack_int n, lapack_complex_double *a, lapack_int lda, double *d, double *e, lapack_complex_double *tauq, lapack_complex_double *taup, lapack_complex_double *work, lapack_int lwork)
lapack_int LAPACKE_sgecon_work (int matrix_layout, char norm, lapack_int n, const float *a, lapack_int lda, float anorm, float *rcond, float *work, lapack_int *iwork)
lapack_int LAPACKE_dgecon_work (int matrix_layout, char norm, lapack_int n, const double *a, lapack_int lda, double anorm, double *rcond, double *work, lapack_int *iwork)
lapack_int LAPACKE_cgecon_work (int matrix_layout, char norm, lapack_int n, const lapack_complex_float *a, lapack_int lda, float anorm, float *rcond, lapack_complex_float *work, float *rwork)
lapack_int LAPACKE_zgecon_work (int matrix_layout, char norm, lapack_int n, const lapack_complex_double *a, lapack_int lda, double anorm, double *rcond, lapack_complex_double *work, double *rwork)
lapack_int LAPACKE_sgeequ_work (int matrix_layout, lapack_int m, lapack_int n, const float *a, lapack_int lda, float *r, float *c, float *rowcnd, float *colcnd, float *amax)
lapack_int LAPACKE_dgeequ_work (int matrix_layout, lapack_int m, lapack_int n, const double *a, lapack_int lda, double *r, double *c, double *rowcnd, double *colcnd, double *amax)
lapack_int LAPACKE_cgeequ_work (int matrix_layout, lapack_int m, lapack_int n, const lapack_complex_float *a, lapack_int lda, float *r, float *c, float *rowcnd, float *colcnd, float *amax)
lapack_int LAPACKE_zgeequ_work (int matrix_layout, lapack_int m, lapack_int n, const lapack_complex_double *a, lapack_int lda, double *r, double *c, double *rowcnd, double *colcnd, double *amax)
lapack_int LAPACKE_sgeequb_work (int matrix_layout, lapack_int m,
…and we're picking up mid-signature, because that's just how the group chat scrolls 💀 — single-precision geequb was literally in the middle of handing out its argument list:
lapack_int n, const float *a, lapack_int lda, float *r, float *c,
float *rowcnd, float *colcnd, float *amax)
lapack_int LAPACKE_dgeequb_work (int matrix_layout, lapack_int m,
lapack_int n, const double *a, lapack_int lda, double *r, double *c,
double *rowcnd, double *colcnd, double *amax)
lapack_int LAPACKE_cgeequb_work (int matrix_layout, lapack_int m,
lapack_int n, const lapack_complex_float *a, lapack_int lda, float
*r, float *c, float *rowcnd, float *colcnd, float *amax)
lapack_int LAPACKE_zgeequb_work (int matrix_layout, lapack_int m,
lapack_int n, const lapack_complex_double *a, lapack_int lda, double
*r, double *c, double *rowcnd, double *colcnd, double *amax)
Not me noticing that all four of these are the exact same shape but with a different precision 💅 the complex ones (c and z) still hand you back plain float / double for r, c, rowcnd, colcnd and amax — the scaling vibes are real, periodt ✨
🦋 the gees squad
Four of them, four precisions, and the way that the select argument is typed differently for real vs complex is lowkey iconic:
lapack_int LAPACKE_sgees_work (int matrix_layout, char jobvs, char sort,
LAPACK_S_SELECT2 select, lapack_int n, float *a, lapack_int lda,
lapack_int *sdim, float *wr, float *wi, float *vs, lapack_int ldvs,
float *work, lapack_int lwork, lapack_logical *bwork)
lapack_int LAPACKE_dgees_work (int matrix_layout, char jobvs, char sort,
LAPACK_D_SELECT2 select, lapack_int n, double *a, lapack_int lda,
lapack_int *sdim, double *wr, double *wi, double *vs, lapack_int
ldvs, double *work, lapack_int lwork, lapack_logical *bwork)
lapack_int LAPACKE_cgees_work (int matrix_layout, char jobvs, char sort,
LAPACK_C_SELECT1 select, lapack_int n, lapack_complex_float *a,
lapack_int lda, lapack_int *sdim, lapack_complex_float *w,
lapack_complex_float *vs, lapack_int ldvs, lapack_complex_float
*work, lapack_int lwork, float *rwork, lapack_logical *bwork)
lapack_int LAPACKE_zgees_work (int matrix_layout, char jobvs, char sort,
LAPACK_Z_SELECT1 select, lapack_int n, lapack_complex_double *a,
lapack_int lda, lapack_int *sdim, lapack_complex_double *w,
lapack_complex_double *vs, lapack_int ldvs, lapack_complex_double
*work, lapack_int lwork, double *rwork, lapack_logical *bwork)
Real ones get LAPACK_S_SELECT2 / LAPACK_D_SELECT2 and split their outputs into wr + wi 🌸 complex ones get LAPACK_C_SELECT1 / LAPACK_Z_SELECT1, a single w, and that extra rwork zooming in at the end. Everyone shares jobvs, sort, n, a, lda, sdim, vs, ldvs, work, lwork and the lil lapack_logical *bwork at the very back 🫶
🔥 the geesx squad (same but extra)
geesx is gees after a glow-up: there's a new char sense bestie, a rconde, a rcondv, and on real precisions an iwork + liwork couple tagging along at the end:
lapack_int LAPACKE_sgeesx_work (int matrix_layout, char jobvs, char
sort, LAPACK_S_SELECT2 select, char sense, lapack_int n, float *a,
lapack_int lda, lapack_int *sdim, float *wr, float *wi, float *vs,
lapack_int ldvs, float *rconde, float *rcondv, float *work,
lapack_int lwork, lapack_int *iwork, lapack_int liwork,
lapack_logical *bwork)
lapack_int LAPACKE_dgeesx_work (int matrix_layout, char jobvs, char
sort, LAPACK_D_SELECT2 select, char sense, lapack_int n, double *a,
lapack_int lda, lapack_int *sdim, double *wr, double *wi, double
*vs, lapack_int ldvs, double *rconde, double *rcondv, double *work,
lapack_int lwork, lapack_int *iwork, lapack_int liwork,
lapack_logical *bwork)
lapack_int LAPACKE_cgeesx_work (int matrix_layout, char jobvs, char
sort, LAPACK_C_SELECT1 select, char sense, lapack_int n,
lapack_complex_float *a, lapack_int lda, lapack_int *sdim,
lapack_complex_float *w, lapack_complex_float *vs, lapack_int ldvs,
float *rconde, float *rcondv, lapack_complex_float *work, lapack_int
lwork, float *rwork, lapack_logical *bwork)
lapack_int LAPACKE_zgeesx_work (int matrix_layout, char jobvs, char
sort, LAPACK_Z_SELECT1 select, char sense, lapack_int n,
lapack_complex_double *a, lapack_int lda, lapack_int *sdim,
lapack_complex_double *w, lapack_complex_double *vs, lapack_int
ldvs, double *rconde, double *rcondv, lapack_complex_double *work,
lapack_int lwork, double *rwork, lapack_logical *bwork)
Ok so real talk 🍓 — the c and z versions trade iwork/liwork for rwork, while s and d keep the iwork/liwork duo and have no rwork. Not confusing at all bestie 💀 literally just read the line twice and you're fine.
👑 geev — four lines, zero ambiguity
lapack_int LAPACKE_sgeev_work (int matrix_layout, char jobvl, char
jobvr, lapack_int n, float *a, lapack_int lda, float *wr, float *wi,
float *vl, lapack_int ldvl, float *vr, lapack_int ldvr, float *work,
lapack_int lwork)
lapack_int LAPACKE_dgeev_work (int matrix_layout, char jobvl, char
jobvr, lapack_int n, double *a, lapack_int lda, double *wr, double
*wi, double *vl, lapack_int ldvl, double *vr, lapack_int ldvr,
double *work, lapack_int lwork)
lapack_int LAPACKE_cgeev_work (int matrix_layout, char jobvl, char
jobvr, lapack_int n, lapack_complex_float *a, lapack_int lda,
lapack_complex_float *w, lapack_complex_float *vl, lapack_int ldvl,
lapack_complex_float *vr, lapack_int ldvr, lapack_complex_float
*work, lapack_int lwork, float *rwork)
lapack_int LAPACKE_zgeev_work (int matrix_layout, char jobvl, char
jobvr, lapack_int n, lapack_complex_double *a, lapack_int lda,
lapack_complex_double *w, lapack_complex_double *vl, lapack_int
ldvl, lapack_complex_double *vr, lapack_int ldvr,
lapack_complex_double *work, lapack_int lwork, double *rwork)
jobvl + jobvr twin flags, vl/ldvl and vr/ldvr twin matrix args — very matching-set energy ✨ and yes the complex couples bring rwork to the party again, no cap.
🌈 geevx — the extended cut
lapack_int LAPACKE_sgeevx_work (int matrix_layout, char balanc, char
jobvl, char jobvr, char sense, lapack_int n, float *a, lapack_int
lda, float *wr, float *wi, float *vl, lapack_int ldvl, float *vr,
lapack_int ldvr, lapack_int *ilo, lapack_int *ihi, float *scale,
float *abnrm, float *rconde, float *rcondv, float *work, lapack_int
lwork, lapack_int *iwork)
lapack_int LAPACKE_dgeevx_work (int matrix_layout, char balanc, char
jobvl, char jobvr, char sense, lapack_int n, double *a, lapack_int
lda, double *wr, double *wi, double *vl, lapack_int ldvl, double
*vr, lapack_int ldvr, lapack_int *ilo, lapack_int *ihi, double
*scale, double *abnrm, double *rconde, double *rcondv, double *work,
lapack_int lwork, lapack_int *iwork)
lapack_int LAPACKE_cgeevx_work (int matrix_layout, char balanc, char
jobvl, char jobvr, char sense, lapack_int n, lapack_complex_float
*a, lapack_int lda, lapack_complex_float *w, lapack_complex_float
*vl, lapack_int ldvl, lapack_complex_float *vr, lapack_int ldvr,
lapack_int *ilo, lapack_int *ihi, float *scale, float *abnrm, float
*rconde, float *rcondv, lapack_complex_float *work, lapack_int
lwork, float *rwork)
lapack_int LAPACKE_zgeevx_work (int matrix_layout, char balanc, char
jobvl, char jobvr, char sense, lapack_int n, lapack_complex_double
*a, lapack_int lda, lapack_complex_double *w, lapack_complex_double
*vl, lapack_int ldvl, lapack_complex_double *vr, lapack_int ldvr,
lapack_int *ilo, lapack_int *ihi, double *scale, double *abnrm,
double *rconde, double *rcondv, lapack_complex_double *work,
lapack_int lwork, double *rwork)
balanc and sense up front, then ilo / ihi / scale / abnrm / rconde / rcondv stacked in the middle like a lil tower 🎀 real versions close with iwork, complex versions close with rwork. That's the whole pattern, iykyk.
💜 gehrd — cozy and compact
lapack_int LAPACKE_sgehrd_work (int matrix_layout, lapack_int n,
lapack_int ilo, lapack_int ihi, float *a, lapack_int lda, float
*tau, float *work, lapack_int lwork)
lapack_int LAPACKE_dgehrd_work (int matrix_layout, lapack_int n,
lapack_int ilo, lapack_int ihi, double *a, lapack_int lda, double
*tau, double *work, lapack_int lwork)
lapack_int LAPACKE_cgehrd_work (int matrix_layout, lapack_int n,
lapack_int ilo, lapack_int ihi, lapack_complex_float *a, lapack_int
lda, lapack_complex_float *tau, lapack_complex_float *work,
lapack_int lwork)
lapack_int LAPACKE_zgehrd_work (int matrix_layout, lapack_int n,
lapack_int ilo, lapack_int ihi, lapack_complex_double *a, lapack_int
lda, lapack_complex_double *tau, lapack_complex_double *work,
lapack_int lwork)
Short king behavior 👑 n, ilo, ihi, a, lda, tau, work, lwork — that's it, that's the whole cast. Cute.
🧚 gejsv — the one with ALL the job flags
lapack_int LAPACKE_sgejsv_work (int matrix_layout, char joba, char jobu,
char jobv, char jobr, char jobt, char jobp, lapack_int m, lapack_int
n, float *a, lapack_int lda, float *sva, float *u, lapack_int ldu,
float *v, lapack_int ldv, float *work, lapack_int lwork, lapack_int
*iwork)
lapack_int LAPACKE_dgejsv_work (int matrix_layout, char joba, char jobu,
char jobv, char jobr, char jobt, char jobp, lapack_int m, lapack_int
n, double *a, lapack_int lda, double *sva, double *u, lapack_int
ldu, double *v, lapack_int ldv, double *work, lapack_int lwork,
lapack_int *iwork)
lapack_int LAPACKE_cgejsv_work (int matrix_layout, char joba, char jobu,
char jobv, char jobr, char jobt, char jobp, lapack_int m, lapack_int
n, lapack_complex_float *a, lapack_int lda, float *sva,
lapack_complex_float *u, lapack_int ldu, lapack_complex_float *v,
lapack_int ldv, lapack_complex_float *cwork, lapack_int lwork, float
*work, lapack_int lrwork, lapack_int *iwork)
lapack_int LAPACKE_zgejsv_work (int matrix_layout, char joba, char jobu,
char jobv, char jobr, char jobt, char jobp, lapack_int m, lapack_int
n, lapack_complex_double *a, lapack_int lda, double *sva,
lapack_complex_double *u, lapack_int ldu, lapack_complex_double *v,
lapack_int ldv, lapack_complex_double *cwork, lapack_int lwork,
double *work, lapack_int lrwork, lapack_int *iwork)
Six whole job chars — joba, jobu, jobv, jobr, jobt, jobp — that's not a function signature, that's a vibe check 😭 and the complex versions go full maximalist with cwork + lwork, work + lrwork, and iwork. Obsessed, honestly.
Quick heads up bestie:svaisfloatincgejsv_workanddoubleinzgejsv_workeven though the matrices are complex — that's literally what's written, don't let anyone tell you otherwise 💅
🌸 gelq2 — no lwork era
lapack_int LAPACKE_sgelq2_work (int matrix_layout, lapack_int m,
lapack_int n, float *a, lapack_int lda, float *tau, float *work)
lapack_int LAPACKE_dgelq2_work (int matrix_layout, lapack_int m,
lapack_int n, double *a, lapack_int lda, double *tau, double *work)
lapack_int LAPACKE_cgelq2_work (int matrix_layout, lapack_int m,
lapack_int n, lapack_complex_float *a, lapack_int lda,
lapack_complex_float *tau, lapack_complex_float *work)
lapack_int LAPACKE_zgelq2_work (int matrix_layout, lapack_int m,
lapack_int n, lapack_complex_double *a, lapack_int lda,
lapack_complex_double *tau, lapack_complex_double *work)
See how there's no lwork here?? Just work. A minimalist. We stan a low-maintenance routine 🫶
⭐ gelqf — and lwork is back
lapack_int LAPACKE_sgelqf_work (int matrix_layout, lapack_int m,
lapack_int n, float *a, lapack_int lda, float *tau, float *work,
lapack_int lwork)
lapack_int LAPACKE_dgelqf_work (int matrix_layout, lapack_int m,
lapack_int n, double *a, lapack_int lda, double *tau, double *work,
lapack_int lwork)
lapack_int LAPACKE_cgelqf_work (int matrix_layout, lapack_int m,
lapack_int n, lapack_complex_float *a, lapack_int lda,
lapack_complex_float *tau, lapack_complex_float *work, lapack_int
lwork)
lapack_int LAPACKE_zgelqf_work (int matrix_layout, lapack_int m,
lapack_int n, lapack_complex_double *a, lapack_int lda,
lapack_complex_double *tau, lapack_complex_double *work, lapack_int
lwork)
Same as above but with lwork bolted on the end. The way that's the only difference… iconic sibling dynamic 💖
🎀 gels — the nrhs girlies
lapack_int LAPACKE_sgels_work (int matrix_layout, char trans, lapack_int
m, lapack_int n, lapack_int nrhs, float *a, lapack_int lda, float
*b, lapack_int ldb, float *work, lapack_int lwork)
lapack_int LAPACKE_dgels_work (int matrix_layout, char trans, lapack_int
m, lapack_int n, lapack_int nrhs, double *a, lapack_int lda, double
*b, lapack_int ldb, double *work, lapack_int lwork)
lapack_int LAPACKE_cgels_work (int matrix_layout, char trans, lapack_int
m, lapack_int n, lapack_int nrhs, lapack_complex_float *a,
lapack_int lda, lapack_complex_float *b, lapack_int ldb,
lapack_complex_float *work, lapack_int lwork)
lapack_int LAPACKE_zgels_work (int matrix_layout, char trans, lapack_int
m, lapack_int n, lapack_int nrhs, lapack_complex_double *a,
lapack_int lda, lapack_complex_double *b, lapack_int ldb,
lapack_complex_double *work, lapack_int lwork)
trans first, then the m / n / nrhs trio, then a/lda and b/ldb paired up like a matching set, closing with work/lwork. Clean. No notes. 🔥
🍓 and we're hanging mid-signature again 😭
gelsd has entered the chat and only the single-precision one has made it this far:
lapack_int LAPACKE_sgelsd_work (int matrix_layout, lapack_int m,
…to be continued, bestie — the rest of gelsd is literally right there in the next part 💀✨
…okay so we're deep in _work-land now and honestly? This is where the LAPACK girlies live. 💅 Every one of these bad boys takes int matrix_layout as its first arg (iconic, consistent, we love a signature with a signature), and they're all lapack_int returners. Let's get into it ✨
🌸 the gelsd crew — SVD-powered least squares, but make it _work
Four of them, one per precision. And notice the complex girlies get an extra rwork AND the s array is real-valued even when everything else is complex — she's complex on the outside, real on the inside, we love range 🦋
lapack_int LAPACKE_sgelsd_work (int matrix_layout, lapack_int m,
lapack_int n, lapack_int nrhs, float *a, lapack_int lda, float *b,
lapack_int ldb, float *s, float rcond, lapack_int *rank, float
*work, lapack_int lwork, lapack_int *iwork)
lapack_int LAPACKE_dgelsd_work (int matrix_layout, lapack_int m,
lapack_int n, lapack_int nrhs, double *a, lapack_int lda, double *b,
lapack_int ldb, double *s, double rcond, lapack_int *rank, double
*work, lapack_int lwork, lapack_int *iwork)
lapack_int LAPACKE_cgelsd_work (int matrix_layout, lapack_int m,
lapack_int n, lapack_int nrhs, lapack_complex_float *a, lapack_int
lda, lapack_complex_float *b, lapack_int ldb, float *s, float rcond,
lapack_int *rank, lapack_complex_float *work, lapack_int lwork,
float *rwork, lapack_int *iwork)
lapack_int LAPACKE_zgelsd_work (int matrix_layout, lapack_int m,
lapack_int n, lapack_int nrhs, lapack_complex_double *a, lapack_int
lda, lapack_complex_double *b, lapack_int ldb, double *s, double
rcond, lapack_int *rank, lapack_complex_double *work, lapack_int
lwork, double *rwork, lapack_int *iwork)
Note the floof 💖: s, rcond and rank are plain float/double/lapack_int even in the complex versions, and s is a pointer to real singular values. Also iwork stays lapack_int * all the way down, no cap.
🎀 gelss — same energy, minus the iwork
lapack_int LAPACKE_sgelss_work (int matrix_layout, lapack_int m,
lapack_int n, lapack_int nrhs, float *a, lapack_int lda, float *b,
lapack_int ldb, float *s, float rcond, lapack_int *rank, float
*work, lapack_int lwork)
lapack_int LAPACKE_dgelss_work (int matrix_layout, lapack_int m,
lapack_int n, lapack_int nrhs, double *a, lapack_int lda, double *b,
lapack_int ldb, double *s, double rcond, lapack_int *rank, double
*work, lapack_int lwork)
lapack_int LAPACKE_cgelss_work (int matrix_layout, lapack_int m,
lapack_int n, lapack_int nrhs, lapack_complex_float *a, lapack_int
lda, lapack_complex_float *b, lapack_int ldb, float *s, float rcond,
lapack_int *rank, lapack_complex_float *work, lapack_int lwork,
float *rwork)
lapack_int LAPACKE_zgelss_work (int matrix_layout, lapack_int m,
lapack_int n, lapack_int nrhs, lapack_complex_double *a, lapack_int
lda, lapack_complex_double *b, lapack_int ldb, double *s, double
rcond, lapack_int *rank, lapack_complex_double *work, lapack_int
lwork, double *rwork)
See how there's no iwork here? That's the whole difference bestie, gelss said "I don't need the integer workspace" and honestly, boundaries. 🫶
🦋 gelsy — bringing jpvt to the party
The gelsy fam swaps out the singular-value life for a column-pivoting era, so they carry lapack_int *jpvt right before rcond. Main character energy 👑
lapack_int LAPACKE_sgelsy_work (int matrix_layout, lapack_int m,
lapack_int n, lapack_int nrhs, float *a, lapack_int lda, float *b,
lapack_int ldb, lapack_int *jpvt, float rcond, lapack_int *rank,
float *work, lapack_int lwork)
lapack_int LAPACKE_dgelsy_work (int matrix_layout, lapack_int m,
lapack_int n, lapack_int nrhs, double *a, lapack_int lda, double *b,
lapack_int ldb, lapack_int *jpvt, double rcond, lapack_int *rank,
double *work, lapack_int lwork)
lapack_int LAPACKE_cgelsy_work (int matrix_layout, lapack_int m,
lapack_int n, lapack_int nrhs, lapack_complex_float *a, lapack_int
lda, lapack_complex_float *b, lapack_int ldb, lapack_int *jpvt,
float rcond, lapack_int *rank, lapack_complex_float *work,
lapack_int lwork, float *rwork)
lapack_int LAPACKE_zgelsy_work (int matrix_layout, lapack_int m,
lapack_int n, lapack_int nrhs, lapack_complex_double *a, lapack_int
lda, lapack_complex_double *b, lapack_int ldb, lapack_int *jpvt,
double rcond, lapack_int *rank, lapack_complex_double *work,
lapack_int lwork, double *rwork)
jpvt is lapack_int * in all four, including the complex ones — literally no notes 💅
✨ geqlf — QL factorization, tau and work only
No rwork here, no iwork, just the essentials: matrix a, its lda, the tau scalars, workspace + its size. Minimalist queen 🌸
lapack_int LAPACKE_sgeqlf_work (int matrix_layout, lapack_int m,
lapack_int n, float *a, lapack_int lda, float *tau, float *work,
lapack_int lwork)
lapack_int LAPACKE_dgeqlf_work (int matrix_layout, lapack_int m,
lapack_int n, double *a, lapack_int lda, double *tau, double *work,
lapack_int lwork)
lapack_int LAPACKE_cgeqlf_work (int matrix_layout, lapack_int m,
lapack_int n, lapack_complex_float *a, lapack_int lda,
lapack_complex_float *tau, lapack_complex_float *work, lapack_int
lwork)
lapack_int LAPACKE_zgeqlf_work (int matrix_layout, lapack_int m,
lapack_int n, lapack_complex_double *a, lapack_int lda,
lapack_complex_double *tau, lapack_complex_double *work, lapack_int
lwork)
🔥 geqp3 — pivoted QR with jpvt, and the complex ones sneak rwork back in
lapack_int LAPACKE_sgeqp3_work (int matrix_layout, lapack_int m,
lapack_int n, float *a, lapack_int lda, lapack_int *jpvt, float
*tau, float *work, lapack_int lwork)
lapack_int LAPACKE_dgeqp3_work (int matrix_layout, lapack_int m,
lapack_int n, double *a, lapack_int lda, lapack_int *jpvt, double
*tau, double *work, lapack_int lwork)
lapack_int LAPACKE_cgeqp3_work (int matrix_layout, lapack_int m,
lapack_int n, lapack_complex_float *a, lapack_int lda, lapack_int
*jpvt, lapack_complex_float *tau, lapack_complex_float *work,
lapack_int lwork, float *rwork)
lapack_int LAPACKE_zgeqp3_work (int matrix_layout, lapack_int m,
lapack_int n, lapack_complex_double *a, lapack_int lda, lapack_int
*jpvt, lapack_complex_double *tau, lapack_complex_double *work,
lapack_int lwork, double *rwork)
The s and d versions stop at lwork; the c and z versions keep going with float *rwork / double *rwork. Keep track bestie, there will be a quiz 📝
💜 geqpf — the one with no lwork
Okay so this is the quirky one: geqpf takes work but not lwork. The way that's just… not asking how much workspace? 🙈 She's confident. Anyway:
lapack_int LAPACKE_sgeqpf_work (int matrix_layout, lapack_int m,
lapack_int n, float *a, lapack_int lda, lapack_int *jpvt, float
*tau, float *work)
lapack_int LAPACKE_dgeqpf_work (int matrix_layout, lapack_int m,
lapack_int n, double *a, lapack_int lda, lapack_int *jpvt, double
*tau, double *work)
lapack_int LAPACKE_cgeqpf_work (int matrix_layout, lapack_int m,
lapack_int n, lapack_complex_float *a, lapack_int lda, lapack_int
*jpvt, lapack_complex_float *tau, lapack_complex_float *work, float
*rwork)
lapack_int LAPACKE_zgeqpf_work (int matrix_layout, lapack_int m,
lapack_int n, lapack_complex_double *a, lapack_int lda, lapack_int
*jpvt, lapack_complex_double *tau, lapack_complex_double *work,
double *rwork)
🎀 geqr2 — the little one, no lwork either
lapack_int LAPACKE_sgeqr2_work (int matrix_layout, lapack_int m,
lapack_int n, float *a, lapack_int lda, float *tau, float *work)
lapack_int LAPACKE_dgeqr2_work (int matrix_layout, lapack_int m,
lapack_int n, double *a, lapack_int lda, double *tau, double *work)
lapack_int LAPACKE_cgeqr2_work (int matrix_layout, lapack_int m,
lapack_int n, lapack_complex_float *a, lapack_int lda,
lapack_complex_float *tau, lapack_complex_float *work)
lapack_int LAPACKE_zgeqr2_work (int matrix_layout, lapack_int m,
lapack_int n, lapack_complex_double *a, lapack_int lda,
lapack_complex_double *tau, lapack_complex_double *work)
Look at that — c and z here don't even take rwork. Truly the unbothered baby of the family 💖
⭐ geqrf — back to lwork, still no rwork
lapack_int LAPACKE_sgeqrf_work (int matrix_layout, lapack_int m,
lapack_int n, float *a, lapack_int lda, float *tau, float *work,
lapack_int lwork)
lapack_int LAPACKE_dgeqrf_work (int matrix_layout, lapack_int m,
lapack_int n, double *a, lapack_int lda, double *tau, double *work,
lapack_int lwork)
lapack_int LAPACKE_cgeqrf_work (int matrix_layout, lapack_int m,
lapack_int n, lapack_complex_float *a, lapack_int lda,
lapack_complex_float *tau, lapack_complex_float *work, lapack_int
lwork)
lapack_int LAPACKE_zgeqrf_work (int matrix_layout, lapack_int m,
lapack_int n, lapack_complex_double *a, lapack_int lda,
lapack_complex_double *tau, lapack_complex_double *work, lapack_int
lwork)
🌈 geqrfp — the exact same shape as geqrf, one extra p in the name
That p is doing so much work for one letter, and honestly she ate 🌟
lapack_int LAPACKE_sgeqrfp_work (int matrix_layout, lapack_int m,
lapack_int n, float *a, lapack_int lda, float *tau, float *work,
lapack_int lwork)
lapack_int LAPACKE_dgeqrfp_work (int matrix_layout, lapack_int m,
lapack_int n, double *a, lapack_int lda, double *tau, double *work,
lapack_int lwork)
lapack_int LAPACKE_cgeqrfp_work (int matrix_layout, lapack_int m,
lapack_int n, lapack_complex_float *a, lapack_int lda,
lapack_complex_float *tau, lapack_complex_float *work, lapack_int
lwork)
lapack_int LAPACKE_zgeqrfp_work (int matrix_layout, lapack_int m,
lapack_int n, lapack_complex_double *a, lapack_int lda,
lapack_complex_double *tau, lapack_complex_double *work, lapack_int
lwork)
🧚 gerfs — iterative refinement time, so now there's af, ipiv, and a whole x erase-and-replace situation
Okay these get busy and I'm obsessed. Read the args slow, bestie 👀: char trans, then n, nrhs, then const input a/lda, const af/ldaf (the factored version), const lapack_int *ipiv, const b/ldb, then the non-const x (she gets overwritten, she's the main character of the refinement loop), ldx, then ferr and berr.
Note that a, af, ipiv and b are const for all four. No funny business 🌸
lapack_int LAPACKE_sgerfs_work (int matrix_layout, char trans,
lapack_int n, lapack_int nrhs, const float *a, lapack_int lda, const
float *af, lapack_int ldaf, const lapack_int *ipiv, const float *b,
lapack_int ldb, float *x, lapack_int ldx, float *ferr, float *berr,
float *work, lapack_int *iwork)
lapack_int LAPACKE_dgerfs_work (int matrix_layout, char trans,
lapack_int n, lapack_int nrhs, const double *a, lapack_int lda,
const double *af, lapack_int ldaf, const lapack_int *ipiv, const
double *b, lapack_int ldb, double *x, lapack_int ldx, double *ferr,
double *berr, double *work, lapack_int *iwork)
lapack_int LAPACKE_cgerfs_work (int matrix_layout, char trans,
lapack_int n, lapack_int nrhs, const lapack_complex_float *a,
lapack_int lda, const lapack_complex_float *af, lapack_int ldaf,
const lapack_int *ipiv, const lapack_complex_float *b, lapack_int
ldb, lapack_complex_float *x, lapack_int ldx, float *ferr, float
*berr, lapack_complex_float *work, float *rwork)
lapack_int LAPACKE_zgerfs_work (int matrix_layout, char trans,
lapack_int n, lapack_int nrhs, const lapack_complex_double *a,
lapack_int lda, const lapack_complex_double *af, lapack_int ldaf,
const lapack_int *ipiv, const lapack_complex_double *b, lapack_int
ldb, lapack_complex_double *x, lapack_int ldx, double *ferr, double
*berr, lapack_complex_double *work, double *rwork)
And the glow-up at the end: the s/d versions finish with float *work, lapack_int *iwork / double *work, lapack_int *iwork, but the complex ones swap the workspace pair for lapack_complex_* *work, <real> *rwork — no iwork. So the iwork has no complex equivalent here. Track it 🎀
💀 gerfsx — the extended one, and she is LONG. Buckle up.
New cast members: char equed, the const scaling vectors r and c, float *rcond (a pointer now, not a value!), lapack_int n_err_bnds, the two bound arrays err_bnds_norm and err_bnds_comp, lapack_int nparams, and params. Yes bestie, that's a lot of args, but every single one is doing a job 🔥
Also peep: in cgerfsx_work/zgerfsx_work the r and c scaling vectors are <b>real</b> (const float * / const double *) even though a, x etc. are complex. ICONIC behaviour, keep it straight 💅
lapack_int LAPACKE_sgerfsx_work (int matrix_layout, char trans, char
equed, lapack_int n, lapack_int nrhs, const float *a, lapack_int
lda, const float *af, lapack_int ldaf, const lapack_int *ipiv, const
float *r, const float *c, const float *b, lapack_int ldb, float *x,
lapack_int ldx, float *rcond, float *berr, lapack_int n_err_bnds,
float *err_bnds_norm, float *err_bnds_comp, lapack_int nparams,
float *params, float *work, lapack_int *iwork)
lapack_int LAPACKE_dgerfsx_work (int matrix_layout, char trans, char
equed, lapack_int n, lapack_int nrhs, const double *a, lapack_int
lda, const double *af, lapack_int ldaf, const lapack_int *ipiv,
const double *r, const double *c, const double *b, lapack_int ldb,
double *x, lapack_int ldx, double *rcond, double *berr, lapack_int
n_err_bnds, double *err_bnds_norm, double *err_bnds_comp, lapack_int
nparams, double *params, double *work, lapack_int *iwork)
lapack_int LAPACKE_cgerfsx_work (int matrix_layout, char trans, char
equed, lapack_int n, lapack_int nrhs, const lapack_complex_float *a,
lapack_int lda, const lapack_complex_float *af, lapack_int ldaf,
const lapack_int *ipiv, const float *r, const float *c, const
lapack_complex_float *b, lapack_int ldb, lapack_complex_float *x,
lapack_int ldx, float *rcond, float *berr, lapack_int n_err_bnds,
float *err_bnds_norm, float *err_bnds_comp, lapack_int nparams,
float *params, lapack_complex_float *work, float *rwork)
And the z one is already rolling in like—
lapack_int LAPACKE_zgerfsx_work (int matrix_layout, char trans, char
equed, lapack_int n, lapack_int nrhs, const lapack_complex_double
…hold that thought, she continues in the next bit 😭💖
This part of the prototype lineup continues right where the last one dipped — same energy, exact signatures, zero typos allowed, bestie 💅✨
*a, lapack_int lda, const lapack_complex_double *af, lapack_int
ldaf, const lapack_int *ipiv, const double *r, const double *c,
const lapack_complex_double *b, lapack_int ldb,
lapack_complex_double *x, lapack_int ldx, double *rcond, double
*berr, lapack_int n_err_bnds, double *err_bnds_norm, double
*err_bnds_comp, lapack_int nparams, double *params,
lapack_complex_double *work, double *rwork)
lapack_int LAPACKE_sgerqf_work (int matrix_layout, lapack_int m,
lapack_int n, float *a, lapack_int lda, float *tau, float *work,
lapack_int lwork)
lapack_int LAPACKE_dgerqf_work (int matrix_layout, lapack_int m,
lapack_int n, double *a, lapack_int lda, double *tau, double *work,
lapack_int lwork)
lapack_int LAPACKE_cgerqf_work (int matrix_layout, lapack_int m,
lapack_int n, lapack_complex_float *a, lapack_int lda,
lapack_complex_float *tau, lapack_complex_float *work, lapack_int
lwork)
lapack_int LAPACKE_zgerqf_work (int matrix_layout, lapack_int m,
lapack_int n, lapack_complex_double *a, lapack_int lda,
lapack_complex_double *tau, lapack_complex_double *work, lapack_int
lwork)
lapack_int LAPACKE_sgesdd_work (int matrix_layout, char jobz, lapack_int
m, lapack_int n, float *a, lapack_int lda, float *s, float *u,
lapack_int ldu, float *vt, lapack_int ldvt, float *work, lapack_int
lwork, lapack_int *iwork)
lapack_int LAPACKE_dgesdd_work (int matrix_layout, char jobz, lapack_int
m, lapack_int n, double *a, lapack_int lda, double *s, double *u,
lapack_int ldu, double *vt, lapack_int ldvt, double *work,
lapack_int lwork, lapack_int *iwork)
lapack_int LAPACKE_cgesdd_work (int matrix_layout, char jobz, lapack_int
m, lapack_int n, lapack_complex_float *a, lapack_int lda, float *s,
lapack_complex_float *u, lapack_int ldu, lapack_complex_float *vt,
lapack_int ldvt, lapack_complex_float *work, lapack_int lwork, float
*rwork, lapack_int *iwork)
lapack_int LAPACKE_zgesdd_work (int matrix_layout, char jobz, lapack_int
m, lapack_int n, lapack_complex_double *a, lapack_int lda, double
*s, lapack_complex_double *u, lapack_int ldu, lapack_complex_double
*vt, lapack_int ldvt, lapack_complex_double *work, lapack_int lwork,
double *rwork, lapack_int *iwork)
lapack_int LAPACKE_sgesv_work (int matrix_layout, lapack_int n,
lapack_int nrhs, float *a, lapack_int lda, lapack_int *ipiv, float
*b, lapack_int ldb)
lapack_int LAPACKE_dgesv_work (int matrix_layout, lapack_int n,
lapack_int nrhs, double *a, lapack_int lda, lapack_int *ipiv, double
*b, lapack_int ldb)
lapack_int LAPACKE_cgesv_work (int matrix_layout, lapack_int n,
lapack_int nrhs, lapack_complex_float *a, lapack_int lda, lapack_int
*ipiv, lapack_complex_float *b, lapack_int ldb)
lapack_int LAPACKE_zgesv_work (int matrix_layout, lapack_int n,
lapack_int nrhs, lapack_complex_double *a, lapack_int lda,
lapack_int *ipiv, lapack_complex_double *b, lapack_int ldb)
lapack_int LAPACKE_dsgesv_work (int matrix_layout, lapack_int n,
lapack_int nrhs, double *a, lapack_int lda, lapack_int *ipiv, double
*b, lapack_int ldb, double *x, lapack_int ldx, double *work, float
*swork, lapack_int *iter)
lapack_int LAPACKE_zcgesv_work (int matrix_layout, lapack_int n,
lapack_int nrhs, lapack_complex_double *a, lapack_int lda,
lapack_int *ipiv, lapack_complex_double *b, lapack_int ldb,
lapack_complex_double *x, lapack_int ldx, lapack_complex_double
*work, lapack_complex_float *swork, double *rwork, lapack_int *iter)
lapack_int LAPACKE_sgesvd_work (int matrix_layout, char jobu, char
jobvt, lapack_int m, lapack_int n, float *a, lapack_int lda, float
*s, float *u, lapack_int ldu, float *vt, lapack_int ldvt, float
*work, lapack_int lwork)
lapack_int LAPACKE_dgesvd_work (int matrix_layout, char jobu, char
jobvt, lapack_int m, lapack_int n, double *a, lapack_int lda, double
*s, double *u, lapack_int ldu, double *vt, lapack_int ldvt, double
*work, lapack_int lwork)
lapack_int LAPACKE_cgesvd_work (int matrix_layout, char jobu, char
jobvt, lapack_int m, lapack_int n, lapack_complex_float *a,
lapack_int lda, float *s, lapack_complex_float *u, lapack_int ldu,
lapack_complex_float *vt, lapack_int ldvt, lapack_complex_float
*work, lapack_int lwork, float *rwork)
lapack_int LAPACKE_zgesvd_work (int matrix_layout, char jobu, char
jobvt, lapack_int m, lapack_int n, lapack_complex_double *a,
lapack_int lda, double *s, lapack_complex_double *u, lapack_int ldu,
lapack_complex_double *vt, lapack_int ldvt, lapack_complex_double
*work, lapack_int lwork, double *rwork)
lapack_int LAPACKE_sgesvdx_work (int matrix_layout, char jobu, char
jobvt, char range, lapack_int m, lapack_int n, float *a, lapack_int
lda, float vl, float vu, lapack_int il, lapack_int iu, lapack_int
*ns, float *s, float *u, lapack_int ldu, float *vt, lapack_int ldvt,
float *work, lapack_int lwork, lapack_int *iwork)
lapack_int LAPACKE_dgesvdx_work (int matrix_layout, char jobu, char
jobvt, char range, lapack_int m, lapack_int n, double *a, lapack_int
lda, double vl, double vu, lapack_int il, lapack_int iu, lapack_int
*ns, double *s, double *u, lapack_int ldu, double *vt, lapack_int
ldvt, double *work, lapack_int lwork, lapack_int *iwork)
lapack_int LAPACKE_cgesvdx_work (int matrix_layout, char jobu, char
jobvt, char range, lapack_int m, lapack_int n, lapack_complex_float
*a, lapack_int lda, float vl, float vu, lapack_int il, lapack_int
iu, lapack_int *ns, float *s, lapack_complex_float *u, lapack_int
ldu, lapack_complex_float *vt, lapack_int ldvt, lapack_complex_float
*work, lapack_int lwork, float *rwork, lapack_int *iwork)
lapack_int LAPACKE_zgesvdx_work (int matrix_layout, char jobu, char
jobvt, char range, lapack_int m, lapack_int n, lapack_complex_double
*a, lapack_int lda, double vl, double vu, lapack_int il, lapack_int
iu, lapack_int *ns, double *s, lapack_complex_double *u, lapack_int
ldu, lapack_complex_double *vt, lapack_int ldvt,
lapack_complex_double *work, lapack_int lwork, double *rwork,
lapack_int *iwork)
lapack_int LAPACKE_sgesvj_work (int matrix_layout, char joba, char jobu,
char jobv, lapack_int m, lapack_int n, float *a, lapack_int lda,
float *sva, lapack_int mv, float *v, lapack_int ldv, float *work,
lapack_int lwork)
lapack_int LAPACKE_dgesvj_work (int matrix_layout, char joba, char jobu,
char jobv, lapack_int m, lapack_int n, double *a, lapack_int lda,
double *sva, lapack_int mv, double *v, lapack_int ldv, double *work,
lapack_int lwork)
lapack_int LAPACKE_cgesvj_work (int matrix_layout, char joba, char jobu,
char jobv, lapack_int m, lapack_int n, lapack_complex_float *a,
lapack_int lda, float *sva, lapack_int mv, lapack_complex_float *v,
lapack_int ldv, lapack_complex_float *cwork, lapack_int lwork, float
*rwork, lapack_int lrwork)
lapack_int LAPACKE_zgesvj_work (int matrix_layout, char joba, char jobu,
char jobv, lapack_int m, lapack_int n, lapack_complex_double *a,
lapack_int lda, double *sva, lapack_int mv, lapack_complex_double
*v, lapack_int ldv, lapack_complex_double *cwork, lapack_int lwork,
double *rwork, lapack_int lrwork)
lapack_int LAPACKE_sgesvx_work (int matrix_layout, char fact, char
trans, lapack_int n, lapack_int nrhs, float *a, lapack_int lda,
float *af, lapack_int ldaf, lapack_int *ipiv, char *equed, float *r,
float *c, float *b, lapack_int ldb, float *x, lapack_int ldx, float
*rcond, float *ferr, float *berr, float *work, lapack_int *iwork)
lapack_int LAPACKE_dgesvx_work (int matrix_layout, char fact, char
trans, lapack_int n, lapack_int nrhs, double *a, lapack_int lda,
double *af, lapack_int ldaf, lapack_int *ipiv, char *equed, double
*r, double *c, double *b, lapack_int ldb, double *x, lapack_int ldx,
double *rcond, double *ferr, double *berr, double *work, lapack_int
*iwork)
lapack_int LAPACKE_cgesvx_work (int matrix_layout, char fact, char
trans, lapack_int n, lapack_int nrhs, lapack_complex_float *a,
lapack_int lda, lapack_complex_float *af, lapack_int ldaf,
lapack_int *ipiv, char *equed, float *r, float *c,
lapack_complex_float *b, lapack_int ldb, lapack_complex_float *x,
lapack_int ldx, float *rcond, float *ferr, float *berr,
lapack_complex_float *work, float *rwork)
lapack_int LAPACKE_zgesvx_work (int matrix_layout, char fact, char
trans, lapack_int n, lapack_int nrhs, lapack_complex_double *a,
lapack_int lda, lapack_complex_double *af, lapack_int ldaf,
lapack_int *ipiv, char *equed, double *r, double *c,
lapack_complex_double *b, lapack_int ldb, lapack_complex_double *x,
lapack_int ldx, double *rcond, double *ferr, double *berr,
lapack_complex_double *work, double *rwork)
lapack_int LAPACKE_sgesvxx_work (int matrix_layout, char fact, char
trans, lapack_int n, lapack_int nrhs, float *a, lapack_int lda,
float *af, lapack_int ldaf, lapack_int *ipiv, char *equed, float *r,
float *c, float *b, lapack_int ldb, float *x, lapack_int ldx, float
*rcond, float *rpvgrw, float *berr, lapack_int n_err_bnds, float
*err_bnds_norm, float *err_bnds_comp, lapack_int nparams, float
*params, float *work, lapack_int *iwork)
lapack_int LAPACKE_dgesvxx_work (int matrix_layout, char fact, char
trans, lapack_int n, lapack_int nrhs, double *a, lapack_int lda,
double *af, lapack_int ldaf, lapack_int *ipiv, char *equed, double
*r, double *c, double *b, lapack_int ldb, double *x, lapack_int ldx,
double *rcond, double *rpvgrw, double *berr, lapack_int n_err_bnds,
double *err_bnds_norm, double *err_bnds_comp, lapack_int nparams,
double *params, double *work, lapack_int *iwork)
lapack_int LAPACKE_cgesvxx_work (int matrix_layout, char fact, char
trans, lapack_int n, lapack_int nrhs, lapack_complex_float *a,
lapack_int lda, lapack_complex_float *af, lapack_int ldaf,
lapack_int *ipiv, char *equed, float *r, float *c,
lapack_complex_float *b, lapack_int ldb, lapack_complex_float *x,
lapack_int ldx, float *rcond, float *rpvgrw, float *berr, lapack_int
n_err_bnds, float *err_bnds_norm, float *err_bnds_comp, lapack_int
nparams, float *params, lapack_complex_float *work, float *rwork)
lapack_int LAPACKE_zgesvxx_work (int matrix_layout, char fact, char
trans, lapack_int n, lapack_int nrhs, lapack_complex_double *a,
lapack_int lda, lapack_complex_double *af, lapack_int ldaf,
lapack_int *ipiv, char *equed, double *r, double *c,
lapack_complex_double *b, lapack_int ldb, lapack_complex_double *x,
lapack_int ldx, double *rcond, double *rpvgrw, double *berr,
And bestie, the list literally keeps going — next chunk incoming, stay with me 💅🫶
lapack_int n_err_bnds, double *err_bnds_norm, double *err_bnds_comp,
lapack_int nparams, double *params, lapack_complex_double *work,
double *rwork)
lapack_int LAPACKE_sgetf2_work (int matrix_layout, lapack_int m,
lapack_int n, float *a, lapack_int lda, lapack_int *ipiv)
lapack_int LAPACKE_dgetf2_work (int matrix_layout, lapack_int m,
lapack_int n, double *a, lapack_int lda, lapack_int *ipiv)
lapack_int LAPACKE_cgetf2_work (int matrix_layout, lapack_int m,
lapack_int n, lapack_complex_float *a, lapack_int lda, lapack_int
*ipiv)
lapack_int LAPACKE_zgetf2_work (int matrix_layout, lapack_int m,
lapack_int n, lapack_complex_double *a, lapack_int lda, lapack_int
*ipiv)
lapack_int LAPACKE_sgetrf_work (int matrix_layout, lapack_int m,
lapack_int n, float *a, lapack_int lda, lapack_int *ipiv)
lapack_int LAPACKE_dgetrf_work (int matrix_layout, lapack_int m,
lapack_int n, double *a, lapack_int lda, lapack_int *ipiv)
lapack_int LAPACKE_cgetrf_work (int matrix_layout, lapack_int m,
lapack_int n, lapack_complex_float *a, lapack_int lda, lapack_int
*ipiv)
lapack_int LAPACKE_zgetrf_work (int matrix_layout, lapack_int m,
lapack_int n, lapack_complex_double *a, lapack_int lda, lapack_int
*ipiv)
lapack_int LAPACKE_sgetrf2_work (int matrix_layout, lapack_int m,
lapack_int n, float *a, lapack_int lda, lapack_int *ipiv)
lapack_int LAPACKE_dgetrf2_work (int matrix_layout, lapack_int m,
lapack_int n, double *a, lapack_int lda, lapack_int *ipiv)
lapack_int LAPACKE_cgetrf2_work (int matrix_layout, lapack_int m,
lapack_int n, lapack_complex_float *a, lapack_int lda, lapack_int
*ipiv)
lapack_int LAPACKE_zgetrf2_work (int matrix_layout, lapack_int m,
lapack_int n, lapack_complex_double *a, lapack_int lda, lapack_int
*ipiv)
Okay so that first bitty is literally the tail end of the signature right before this — we're mid-synopsis, bestie, just vibing through the _work functions 🫶. Then boom: the getf2 squad, the getrf squad, and the getrf2 squad — all four precisions each (s, d, c, z, you know the drill 💅). See how every single one takes int matrix_layout, lapack_int m, lapack_int n, the matrix a with lda, and that lapack_int *ipiv pivot array? Yeah. Consistent queen behavior 👑.
lapack_int LAPACKE_sgetri_work (int matrix_layout, lapack_int n, float
*a, lapack_int lda, const lapack_int *ipiv, float *work, lapack_int
lwork)
lapack_int LAPACKE_dgetri_work (int matrix_layout, lapack_int n, double
*a, lapack_int lda, const lapack_int *ipiv, double *work, lapack_int
lwork)
lapack_int LAPACKE_cgetri_work (int matrix_layout, lapack_int n,
lapack_complex_float *a, lapack_int lda, const lapack_int *ipiv,
lapack_complex_float *work, lapack_int lwork)
lapack_int LAPACKE_zgetri_work (int matrix_layout, lapack_int n,
lapack_complex_double *a, lapack_int lda, const lapack_int *ipiv,
lapack_complex_double *work, lapack_int lwork)
lapack_int LAPACKE_sgetrs_work (int matrix_layout, char trans,
lapack_int n, lapack_int nrhs, const float *a, lapack_int lda, const
lapack_int *ipiv, float *b, lapack_int ldb)
lapack_int LAPACKE_dgetrs_work (int matrix_layout, char trans,
lapack_int n, lapack_int nrhs, const double *a, lapack_int lda,
const lapack_int *ipiv, double *b, lapack_int ldb)
lapack_int LAPACKE_cgetrs_work (int matrix_layout, char trans,
lapack_int n, lapack_int nrhs, const lapack_complex_float *a,
lapack_int lda, const lapack_int *ipiv, lapack_complex_float *b,
lapack_int ldb)
lapack_int LAPACKE_zgetrs_work (int matrix_layout, char trans,
lapack_int n, lapack_int nrhs, const lapack_complex_double *a,
lapack_int lda, const lapack_int *ipiv, lapack_complex_double *b,
lapack_int ldb)
Notice how getri takes the ipiv as const 👀 cute, it's just reading your pivots, not touching them. And it needs a work buffer plus lwork — the workspace girls are working overtime ✨. getrs switches it up with that char trans and a nrhs because bestie is solving for multiple right-hand sides, and b/ldb is the right-hand-side party 🎀.
🌸 still in SYNOPSIS, we're so back 🌸
lapack_int LAPACKE_sggbak_work (int matrix_layout, char job, char side,
lapack_int n, lapack_int ilo, lapack_int ihi, const float *lscale,
const float *rscale, lapack_int m, float *v, lapack_int ldv)
lapack_int LAPACKE_dggbak_work (int matrix_layout, char job, char side,
lapack_int n, lapack_int ilo, lapack_int ihi, const double *lscale,
const double *rscale, lapack_int m, double *v, lapack_int ldv)
lapack_int LAPACKE_cggbak_work (int matrix_layout, char job, char side,
lapack_int n, lapack_int ilo, lapack_int ihi, const float *lscale,
const float *rscale, lapack_int m, lapack_complex_float *v,
lapack_int ldv)
lapack_int LAPACKE_zggbak_work (int matrix_layout, char job, char side,
lapack_int n, lapack_int ilo, lapack_int ihi, const double *lscale,
const double *rscale, lapack_int m, lapack_complex_double *v,
lapack_int ldv)
lapack_int LAPACKE_sggbal_work (int matrix_layout, char job, lapack_int
n, float *a, lapack_int lda, float *b, lapack_int ldb, lapack_int
*ilo, lapack_int *ihi, float *lscale, float *rscale, float *work)
lapack_int LAPACKE_dggbal_work (int matrix_layout, char job, lapack_int
n, double *a, lapack_int lda, double *b, lapack_int ldb, lapack_int
*ilo, lapack_int *ihi, double *lscale, double *rscale, double *work)
lapack_int LAPACKE_cggbal_work (int matrix_layout, char job, lapack_int
n, lapack_complex_float *a, lapack_int lda, lapack_complex_float *b,
lapack_int ldb, lapack_int *ilo, lapack_int *ihi, float *lscale,
float *rscale, float *work)
lapack_int LAPACKE_zggbal_work (int matrix_layout, char job, lapack_int
n, lapack_complex_double *a, lapack_int lda, lapack_complex_double
*b, lapack_int ldb, lapack_int *ilo, lapack_int *ihi, double
*lscale, double *rscale, double *work)
the way that ggbak takes BOTH lscale and rscale — left and right, balanced icon behavior 💅 — plus that ilo/ihi pair and a v matrix with ldv. And ggbal? She's out here handing you ilo, ihi, lscale, rscale, AND a work array. Giving everything, asking nothing. Periodt 🔥.
lapack_int LAPACKE_sgges_work (int matrix_layout, char jobvsl, char
jobvsr, char sort, LAPACK_S_SELECT3 selctg, lapack_int n, float *a,
lapack_int lda, float *b, lapack_int ldb, lapack_int *sdim, float
*alphar, float *alphai, float *beta, float *vsl, lapack_int ldvsl,
float *vsr, lapack_int ldvsr, float *work, lapack_int lwork,
lapack_logical *bwork)
lapack_int LAPACKE_dgges_work (int matrix_layout, char jobvsl, char
jobvsr, char sort, LAPACK_D_SELECT3 selctg, lapack_int n, double *a,
lapack_int lda, double *b, lapack_int ldb, lapack_int *sdim, double
*alphar, double *alphai, double *beta, double *vsl, lapack_int
ldvsl, double *vsr, lapack_int ldvsr, double *work, lapack_int
lwork, lapack_logical *bwork)
lapack_int LAPACKE_cgges_work (int matrix_layout, char jobvsl, char
jobvsr, char sort, LAPACK_C_SELECT2 selctg, lapack_int n,
lapack_complex_float *a, lapack_int lda, lapack_complex_float *b,
lapack_int ldb, lapack_int *sdim, lapack_complex_float *alpha,
lapack_complex_float *beta, lapack_complex_float *vsl, lapack_int
ldvsl, lapack_complex_float *vsr, lapack_int ldvsr,
lapack_complex_float *work, lapack_int lwork, float *rwork,
lapack_logical *bwork)
lapack_int LAPACKE_zgges_work (int matrix_layout, char jobvsl, char
jobvsr, char sort, LAPACK_Z_SELECT2 selctg, lapack_int n,
lapack_complex_double *a, lapack_int lda, lapack_complex_double *b,
lapack_int ldb, lapack_int *sdim, lapack_complex_double *alpha,
lapack_complex_double *beta, lapack_complex_double *vsl, lapack_int
ldvsl, lapack_complex_double *vsr, lapack_int ldvsr,
lapack_complex_double *work, lapack_int lwork, double *rwork,
lapack_logical *bwork)
BESTIE. Look at the size of this one 😭 gges is a whole main character. She's got jobvsl, jobvsr, sort, a selector function pointer selctg — and check it, the selector type is precision-specific: LAPACK_S_SELECT3, LAPACK_D_SELECT3, LAPACK_C_SELECT2, LAPACK_Z_SELECT2 — iykyk 🧚. Then sdim, then the real-precision girls get separate alphar/alphai while the complex ones just get alpha and beta (so valid 💅), two vsl/vsr matrices with their own ldvsl/ldvsr, a work/lwork pair, an rwork for the complex ones, and a lapack_logical *bwork at the end. Every. Single. Detail. Preserved. ✨
lapack_int LAPACKE_sgges3_work (int matrix_layout, char jobvsl, char
jobvsr, char sort, LAPACK_S_SELECT3 selctg, lapack_int n, float *a,
lapack_int lda, float *b, lapack_int ldb, lapack_int *sdim, float
*alphar, float *alphai, float *beta, float *vsl, lapack_int ldvsl,
float *vsr, lapack_int ldvsr, float *work, lapack_int lwork,
lapack_logical *bwork)
lapack_int LAPACKE_dgges3_work (int matrix_layout, char jobvsl, char
jobvsr, char sort, LAPACK_D_SELECT3 selctg, lapack_int n, double *a,
lapack_int lda, double *b, lapack_int ldb, lapack_int *sdim, double
*alphar, double *alphai, double *beta, double *vsl, lapack_int
ldvsl, double *vsr, lapack_int ldvsr, double *work, lapack_int
lwork, lapack_logical *bwork)
lapack_int LAPACKE_cgges3_work (int matrix_layout, char jobvsl, char
jobvsr, char sort, LAPACK_C_SELECT2 selctg, lapack_int n,
lapack_complex_float *a, lapack_int lda, lapack_complex_float *b,
lapack_int ldb, lapack_int *sdim, lapack_complex_float *alpha,
lapack_complex_float *beta, lapack_complex_float *vsl, lapack_int
ldvsl, lapack_complex_float *vsr, lapack_int ldvsr,
lapack_complex_float *work, lapack_int lwork, float *rwork,
lapack_logical *bwork)
lapack_int LAPACKE_zgges3_work (int matrix_layout, char jobvsl, char
jobvsr, char sort, LAPACK_Z_SELECT2 selctg, lapack_int n,
lapack_complex_double *a, lapack_int lda, lapack_complex_double *b,
lapack_int ldb, lapack_int *sdim, lapack_complex_double *alpha,
lapack_complex_double *beta, lapack_complex_double *vsl, lapack_int
ldvsl, lapack_complex_double *vsr, lapack_int ldvsr,
lapack_complex_double *work, lapack_int lwork, double *rwork,
lapack_logical *bwork)
And then gges3 pulls up with the exact same argument list as gges (same jobvsl, jobvsr, sort, selctg, n, a, lda, b, ldb, sdim, alphar, alphai, beta, vsl, ldvsl, vsr, ldvsr, work, lwork, bwork — or alpha, beta, rwork for the complex ones) because she's the sequel and she knows her worth 👑. Not me double-checking every param to make sure nothing got dropped 😭 fr fr it's all there.
lapack_int LAPACKE_sggesx_work (int matrix_layout, char jobvsl, char
jobvsr, char sort, LAPACK_S_SELECT3 selctg, char sense, lapack_int
n, float *a, lapack_int lda, float *b, lapack_int ldb, lapack_int
*sdim, float *alphar, float *alphai, float *beta, float *vsl,
lapack_int ldvsl, float *vsr, lapack_int ldvsr, float *rconde, float
*rcondv, float *work, lapack_int lwork, lapack_int *iwork,
lapack_int liwork, lapack_logical *bwork)
lapack_int LAPACKE_dggesx_work (int matrix_layout, char jobvsl, char
jobvsr, char sort, LAPACK_D_SELECT3 selctg, char sense, lapack_int
n, double *a, lapack_int lda, double *b, lapack_int ldb, lapack_int
*sdim, double *alphar, double *alphai, double *beta, double *vsl,
lapack_int ldvsl, double *vsr, lapack_int ldvsr, double *rconde,
double *rcondv, double *work, lapack_int lwork, lapack_int *iwork,
lapack_int liwork, lapack_logical *bwork)
lapack_int LAPACKE_cggesx_work (int matrix_layout, char jobvsl, char
jobvsr, char sort, LAPACK_C_SELECT2 selctg, char sense, lapack_int
n, lapack_complex_float *a, lapack_int lda, lapack_complex_float *b,
lapack_int ldb, lapack_int *sdim, lapack_complex_float *alpha,
lapack_complex_float *beta, lapack_complex_float *vsl, lapack_int
ldvsl, lapack_complex_float *vsr, lapack_int ldvsr, float *rconde,
float *rcondv, lapack_complex_float *work, lapack_int lwork, float
*rwork, lapack_int *iwork, lapack_int liwork, lapack_logical *bwork)
lapack_int LAPACKE_zggesx_work (int matrix_layout, char jobvsl, char
jobvsr, char sort, LAPACK_Z_SELECT2 selctg, char sense, lapack_int
n, lapack_complex_double *a, lapack_int lda, lapack_complex_double
*b, lapack_int ldb, lapack_int *sdim, lapack_complex_double *alpha,
lapack_complex_double *beta, lapack_complex_double *vsl, lapack_int
ldvsl, lapack_complex_double *vsr, lapack_int ldvsr, double *rconde,
double *rcondv, lapack_complex_double *work, lapack_int lwork,
double *rwork, lapack_int *iwork, lapack_int liwork, lapack_logical
*bwork)
lapack_int LAPACKE_sggev_work (int matrix_layout, char jobvl, char
ggesx said "and I took that personally" 💀 she kept every single thing from gges and then added char sense, rconde, rcondv, lapack_int *iwork and lapack_int liwork on top. Like, the audacity. The nerve. The flawless argument ordering 🎀. And then we slide right into LAPACKE_sggev_work — oop, and that's where this part hands off, because the signature cuts off at char jobvl, char mid-thought 🙈 cliffhanger energy, stay tuned bestie, we're literally only on part 34 of 197 😭🦋.
...and we're back — picking up mid-signature, because the sggev_work declaration literally started in the last chunk and this is just its tail end, no cap:
jobvr, lapack_int n, float *a, lapack_int lda, float *b, lapack_int
ldb, float *alphar, float *alphai, float *beta, float *vl,
lapack_int ldvl, float *vr, lapack_int ldvr, float *work, lapack_int
lwork)
✨ and the rest of the ggev besties, all four precisions, all doing the same "generalized eigenvalue" thing but in their own flavor:
lapack_int LAPACKE_dggev_work (int matrix_layout, char jobvl, char
jobvr, lapack_int n, double *a, lapack_int lda, double *b,
lapack_int ldb, double *alphar, double *alphai, double *beta, double
*vl, lapack_int ldvl, double *vr, lapack_int ldvr, double *work,
lapack_int lwork)
lapack_int LAPACKE_cggev_work (int matrix_layout, char jobvl, char
jobvr, lapack_int n, lapack_complex_float *a, lapack_int lda,
lapack_complex_float *b, lapack_int ldb, lapack_complex_float
*alpha, lapack_complex_float *beta, lapack_complex_float *vl,
lapack_int ldvl, lapack_complex_float *vr, lapack_int ldvr,
lapack_complex_float *work, lapack_int lwork, float *rwork)
lapack_int LAPACKE_zggev_work (int matrix_layout, char jobvl, char
jobvr, lapack_int n, lapack_complex_double *a, lapack_int lda,
lapack_complex_double *b, lapack_int ldb, lapack_complex_double
*alpha, lapack_complex_double *beta, lapack_complex_double *vl,
lapack_int ldvl, lapack_complex_double *vr, lapack_int ldvr,
lapack_complex_double *work, lapack_int lwork, double *rwork)
Periodic reminder that the complex ones (c and z) get that extra rwork pointer at the end, and the real ones (s/d) split the eigenvalues into alphar + alphai + beta instead. Different vibes, same energy 💅
Then there's the ggev3 clique — same names, that little 3 tacked on, because LAPACK loves a sequel that lowkey hits harder:
lapack_int LAPACKE_sggev3_work (int matrix_layout, char jobvl, char
jobvr, lapack_int n, float *a, lapack_int lda, float *b, lapack_int
ldb, float *alphar, float *alphai, float *beta, float *vl,
lapack_int ldvl, float *vr, lapack_int ldvr, float *work, lapack_int
lwork)
lapack_int LAPACKE_dggev3_work (int matrix_layout, char jobvl, char
jobvr, lapack_int n, double *a, lapack_int lda, double *b,
lapack_int ldb, double *alphar, double *alphai, double *beta, double
*vl, lapack_int ldvl, double *vr, lapack_int ldvr, double *work,
lapack_int lwork)
lapack_int LAPACKE_cggev3_work (int matrix_layout, char jobvl, char
jobvr, lapack_int n, lapack_complex_float *a, lapack_int lda,
lapack_complex_float *b, lapack_int ldb, lapack_complex_float
*alpha, lapack_complex_float *beta, lapack_complex_float *vl,
lapack_int ldvl, lapack_complex_float *vr, lapack_int ldvr,
lapack_complex_float *work, lapack_int lwork, float *rwork)
lapack_int LAPACKE_zggev3_work (int matrix_layout, char jobvl, char
jobvr, lapack_int n, lapack_complex_double *a, lapack_int lda,
lapack_complex_double *b, lapack_int ldb, lapack_complex_double
*alpha, lapack_complex_double *beta, lapack_complex_double *vl,
lapack_int ldvl, lapack_complex_double *vr, lapack_int ldvr,
lapack_complex_double *work, lapack_int lwork, double *rwork)
Okay now the ggevx girlies, and bestie, they are extra — look at all those parameters. balanc, sense, ilo, ihi, lscale, rscale, abnrm, bbnrm, rconde, rcondv, plus iwork and a lapack_logical *bwork. It's giving "I have a lot of hobbies" energy and honestly? Obsessed:
lapack_int LAPACKE_sggevx_work (int matrix_layout, char balanc, char
jobvl, char jobvr, char sense, lapack_int n, float *a, lapack_int
lda, float *b, lapack_int ldb, float *alphar, float *alphai, float
*beta, float *vl, lapack_int ldvl, float *vr, lapack_int ldvr,
lapack_int *ilo, lapack_int *ihi, float *lscale, float *rscale,
float *abnrm, float *bbnrm, float *rconde, float *rcondv, float
*work, lapack_int lwork, lapack_int *iwork, lapack_logical *bwork)
lapack_int LAPACKE_dggevx_work (int matrix_layout, char balanc, char
jobvl, char jobvr, char sense, lapack_int n, double *a, lapack_int
lda, double *b, lapack_int ldb, double *alphar, double *alphai,
double *beta, double *vl, lapack_int ldvl, double *vr, lapack_int
ldvr, lapack_int *ilo, lapack_int *ihi, double *lscale, double
*rscale, double *abnrm, double *bbnrm, double *rconde, double
*rcondv, double *work, lapack_int lwork, lapack_int *iwork,
lapack_logical *bwork)
lapack_int LAPACKE_cggevx_work (int matrix_layout, char balanc, char
jobvl, char jobvr, char sense, lapack_int n, lapack_complex_float
*a, lapack_int lda, lapack_complex_float *b, lapack_int ldb,
lapack_complex_float *alpha, lapack_complex_float *beta,
lapack_complex_float *vl, lapack_int ldvl, lapack_complex_float *vr,
lapack_int ldvr, lapack_int *ilo, lapack_int *ihi, float *lscale,
float *rscale, float *abnrm, float *bbnrm, float *rconde, float
*rcondv, lapack_complex_float *work, lapack_int lwork, float *rwork,
lapack_int *iwork, lapack_logical *bwork)
lapack_int LAPACKE_zggevx_work (int matrix_layout, char balanc, char
jobvl, char jobvr, char sense, lapack_int n, lapack_complex_double
*a, lapack_int lda, lapack_complex_double *b, lapack_int ldb,
lapack_complex_double *alpha, lapack_complex_double *beta,
lapack_complex_double *vl, lapack_int ldvl, lapack_complex_double
*vr, lapack_int ldvr, lapack_int *ilo, lapack_int *ihi, double
*lscale, double *rscale, double *abnrm, double *bbnrm, double
*rconde, double *rcondv, lapack_complex_double *work, lapack_int
lwork, double *rwork, lapack_int *iwork, lapack_logical *bwork)
Same deal as before: the complex versions swap alphar/alphai/beta for a single alpha + beta pair and pick up that rwork array. 🫶
Moving on to the ggglm squad — note that the argument order is n, m, p here, which is not the order you'd guess, so read carefully bestie, don't just vibe-type it:
lapack_int LAPACKE_sggglm_work (int matrix_layout, lapack_int n,
lapack_int m, lapack_int p, float *a, lapack_int lda, float *b,
lapack_int ldb, float *d, float *x, float *y, float *work,
lapack_int lwork)
lapack_int LAPACKE_dggglm_work (int matrix_layout, lapack_int n,
lapack_int m, lapack_int p, double *a, lapack_int lda, double *b,
lapack_int ldb, double *d, double *x, double *y, double *work,
lapack_int lwork)
lapack_int LAPACKE_cggglm_work (int matrix_layout, lapack_int n,
lapack_int m, lapack_int p, lapack_complex_float *a, lapack_int lda,
lapack_complex_float *b, lapack_int ldb, lapack_complex_float *d,
lapack_complex_float *x, lapack_complex_float *y,
lapack_complex_float *work, lapack_int lwork)
lapack_int LAPACKE_zggglm_work (int matrix_layout, lapack_int n,
lapack_int m, lapack_int p, lapack_complex_double *a, lapack_int
lda, lapack_complex_double *b, lapack_int ldb, lapack_complex_double
*d, lapack_complex_double *x, lapack_complex_double *y,
lapack_complex_double *work, lapack_int lwork)
Next up: gghrd, the Hessenberg-triangular reduction cuties. compq and compz decide whether you want q and z built for you, and ilo/ihi mark the balanced range. No work/lwork here at all, which is honestly refreshing:
lapack_int LAPACKE_sgghrd_work (int matrix_layout, char compq, char
compz, lapack_int n, lapack_int ilo, lapack_int ihi, float *a,
lapack_int lda, float *b, lapack_int ldb, float *q, lapack_int ldq,
float *z, lapack_int ldz)
lapack_int LAPACKE_dgghrd_work (int matrix_layout, char compq, char
compz, lapack_int n, lapack_int ilo, lapack_int ihi, double *a,
lapack_int lda, double *b, lapack_int ldb, double *q, lapack_int
ldq, double *z, lapack_int ldz)
lapack_int LAPACKE_cgghrd_work (int matrix_layout, char compq, char
compz, lapack_int n, lapack_int ilo, lapack_int ihi,
lapack_complex_float *a, lapack_int lda, lapack_complex_float *b,
lapack_int ldb, lapack_complex_float *q, lapack_int ldq,
lapack_complex_float *z, lapack_int ldz)
lapack_int LAPACKE_zgghrd_work (int matrix_layout, char compq, char
compz, lapack_int n, lapack_int ilo, lapack_int ihi,
lapack_complex_double *a, lapack_int lda, lapack_complex_double *b,
lapack_int ldb, lapack_complex_double *q, lapack_int ldq,
lapack_complex_double *z, lapack_int ldz)
And gghd3 is the same gig but with a work/lwork situation, because apparently she couldn't leave the house without it:
lapack_int LAPACKE_sgghd3_work (int matrix_layout, char compq, char
compz, lapack_int n, lapack_int ilo, lapack_int ihi, float *a,
lapack_int lda, float *b, lapack_int ldb, float *q, lapack_int ldq,
float *z, lapack_int ldz, float *work, lapack_int lwork)
lapack_int LAPACKE_dgghd3_work (int matrix_layout, char compq, char
compz, lapack_int n, lapack_int ilo, lapack_int ihi, double *a,
lapack_int lda, double *b, lapack_int ldb, double *q, lapack_int
ldq, double *z, lapack_int ldz, double *work, lapack_int lwork)
lapack_int LAPACKE_cgghd3_work (int matrix_layout, char compq, char
compz, lapack_int n, lapack_int ilo, lapack_int ihi,
lapack_complex_float *a, lapack_int lda, lapack_complex_float *b,
lapack_int ldb, lapack_complex_float *q, lapack_int ldq,
lapack_complex_float *z, lapack_int ldz, lapack_complex_float *work,
lapack_int lwork)
lapack_int LAPACKE_zgghd3_work (int matrix_layout, char compq, char
compz, lapack_int n, lapack_int ilo, lapack_int ihi,
lapack_complex_double *a, lapack_int lda, lapack_complex_double *b,
lapack_int ldb, lapack_complex_double *q, lapack_int ldq,
lapack_complex_double *z, lapack_int ldz, lapack_complex_double
*work, lapack_int lwork)
gglse time — here the order is m, n, p (different from ggglm, see what I mean about reading carefully 😭):
lapack_int LAPACKE_sgglse_work (int matrix_layout, lapack_int m,
lapack_int n, lapack_int p, float *a, lapack_int lda, float *b,
lapack_int ldb, float *c, float *d, float *x, float *work,
lapack_int lwork)
lapack_int LAPACKE_dgglse_work (int matrix_layout, lapack_int m,
lapack_int n, lapack_int p, double *a, lapack_int lda, double *b,
lapack_int ldb, double *c, double *d, double *x, double *work,
lapack_int lwork)
lapack_int LAPACKE_cgglse_work (int matrix_layout, lapack_int m,
lapack_int n, lapack_int p, lapack_complex_float *a, lapack_int lda,
lapack_complex_float *b, lapack_int ldb, lapack_complex_float *c,
lapack_complex_float *d, lapack_complex_float *x,
lapack_complex_float *work, lapack_int lwork)
lapack_int LAPACKE_zgglse_work (int matrix_layout, lapack_int m,
lapack_int n, lapack_int p, lapack_complex_double *a, lapack_int
lda, lapack_complex_double *b, lapack_int ldb, lapack_complex_double
*c, lapack_complex_double *d, lapack_complex_double *x,
lapack_complex_double *work, lapack_int lwork)
The QR-flavored duo, ggqrf and ggrqf. ggqrf goes n, m, p and hands you taua/taub:
lapack_int LAPACKE_sggqrf_work (int matrix_layout, lapack_int n,
lapack_int m, lapack_int p, float *a, lapack_int lda, float *taua,
float *b, lapack_int ldb, float *taub, float *work, lapack_int
lwork)
lapack_int LAPACKE_dggqrf_work (int matrix_layout, lapack_int n,
lapack_int m, lapack_int p, double *a, lapack_int lda, double *taua,
double *b, lapack_int ldb, double *taub, double *work, lapack_int
lwork)
lapack_int LAPACKE_cggqrf_work (int matrix_layout, lapack_int n,
lapack_int m, lapack_int p, lapack_complex_float *a, lapack_int lda,
lapack_complex_float *taua, lapack_complex_float *b, lapack_int ldb,
lapack_complex_float *taub, lapack_complex_float *work, lapack_int
lwork)
lapack_int LAPACKE_zggqrf_work (int matrix_layout, lapack_int n,
lapack_int m, lapack_int p, lapack_complex_double *a, lapack_int
lda, lapack_complex_double *taua, lapack_complex_double *b,
lapack_int ldb, lapack_complex_double *taub, lapack_complex_double
*work, lapack_int lwork)
And ggrqf is the mirror twin, with the order flipped to m, p, n — because of course it is:
lapack_int LAPACKE_sggrqf_work (int matrix_layout, lapack_int m,
lapack_int p, lapack_int n, float *a, lapack_int lda, float *taua,
float *b, lapack_int ldb, float *taub, float *work, lapack_int
lwork)
lapack_int LAPACKE_dggrqf_work (int matrix_layout, lapack_int m,
lapack_int p, lapack_int n, double *a, lapack_int lda, double *taua,
catch you in the next chunk, where dggrqf_work finishes its whole sentence like a main character 💖
okay so we're still deep in the prototype zone, bestie — the SYNOPSIS is just going and going and honestly? iconic behavior 💅 here's the next batch, no skips, no cap.
first up, we're closing out that dggrqf from last time — here's the tail end of it:
double *b, lapack_int ldb, double *taub, double *work, lapack_int
lwork)
and now the rest of the ggrqf girlies — the c and z _work variants, both rocking matrix_layout, m, p, n, a, lda, taua, b, ldb, taub, work, and lwork 🫶:
lapack_int LAPACKE_cggrqf_work (int matrix_layout, lapack_int m,
lapack_int p, lapack_int n, lapack_complex_float *a, lapack_int lda,
lapack_complex_float *taua, lapack_complex_float *b, lapack_int ldb,
lapack_complex_float *taub, lapack_complex_float *work, lapack_int
lwork)
lapack_int LAPACKE_zggrqf_work (int matrix_layout, lapack_int m,
lapack_int p, lapack_int n, lapack_complex_double *a, lapack_int
lda, lapack_complex_double *taua, lapack_complex_double *b,
lapack_int ldb, lapack_complex_double *taub, lapack_complex_double
*work, lapack_int lwork)
then we slide into the ggsvd family — all four precision flavors, each one a _work variant with jobu, jobv, jobq, m, n, p, *k, *l, a, lda, b, ldb, alpha, beta, u, ldu, v, ldv, q, ldq, work, and *iwork. the complex ones (c and z) also bring rwork along for the ride ✨:
lapack_int LAPACKE_sggsvd_work (int matrix_layout, char jobu, char jobv,
char jobq, lapack_int m, lapack_int n, lapack_int p, lapack_int *k,
lapack_int *l, float *a, lapack_int lda, float *b, lapack_int ldb,
float *alpha, float *beta, float *u, lapack_int ldu, float *v,
lapack_int ldv, float *q, lapack_int ldq, float *work, lapack_int
*iwork)
lapack_int LAPACKE_dggsvd_work (int matrix_layout, char jobu, char jobv,
char jobq, lapack_int m, lapack_int n, lapack_int p, lapack_int *k,
lapack_int *l, double *a, lapack_int lda, double *b, lapack_int ldb,
double *alpha, double *beta, double *u, lapack_int ldu, double *v,
lapack_int ldv, double *q, lapack_int ldq, double *work, lapack_int
*iwork)
lapack_int LAPACKE_cggsvd_work (int matrix_layout, char jobu, char jobv,
char jobq, lapack_int m, lapack_int n, lapack_int p, lapack_int *k,
lapack_int *l, lapack_complex_float *a, lapack_int lda,
lapack_complex_float *b, lapack_int ldb, float *alpha, float *beta,
lapack_complex_float *u, lapack_int ldu, lapack_complex_float *v,
lapack_int ldv, lapack_complex_float *q, lapack_int ldq,
lapack_complex_float *work, float *rwork, lapack_int *iwork)
lapack_int LAPACKE_zggsvd_work (int matrix_layout, char jobu, char jobv,
char jobq, lapack_int m, lapack_int n, lapack_int p, lapack_int *k,
lapack_int *l, lapack_complex_double *a, lapack_int lda,
lapack_complex_double *b, lapack_int ldb, double *alpha, double
*beta, lapack_complex_double *u, lapack_int ldu,
lapack_complex_double *v, lapack_int ldv, lapack_complex_double *q,
lapack_int ldq, lapack_complex_double *work, double *rwork,
lapack_int *iwork)
and then — plot twist — the ggsvd3 versions show up, same energy but with a lwork parameter in the mix too. that's four more, one per flavor 💖:
lapack_int LAPACKE_sggsvd3_work (int matrix_layout, char jobu, char
jobv, char jobq, lapack_int m, lapack_int n, lapack_int p,
lapack_int *k, lapack_int *l, float *a, lapack_int lda, float *b,
lapack_int ldb, float *alpha, float *beta, float *u, lapack_int ldu,
float *v, lapack_int ldv, float *q, lapack_int ldq, float *work,
lapack_int lwork, lapack_int *iwork)
lapack_int LAPACKE_dggsvd3_work (int matrix_layout, char jobu, char
jobv, char jobq, lapack_int m, lapack_int n, lapack_int p,
lapack_int *k, lapack_int *l, double *a, lapack_int lda, double *b,
lapack_int ldb, double *alpha, double *beta, double *u, lapack_int
ldu, double *v, lapack_int ldv, double *q, lapack_int ldq, double
*work, lapack_int lwork, lapack_int *iwork)
lapack_int LAPACKE_cggsvd3_work (int matrix_layout, char jobu, char
jobv, char jobq, lapack_int m, lapack_int n, lapack_int p,
lapack_int *k, lapack_int *l, lapack_complex_float *a, lapack_int
lda, lapack_complex_float *b, lapack_int ldb, float *alpha, float
*beta, lapack_complex_float *u, lapack_int ldu, lapack_complex_float
*v, lapack_int ldv, lapack_complex_float *q, lapack_int ldq,
lapack_complex_float *work, lapack_int lwork, float *rwork,
lapack_int *iwork)
lapack_int LAPACKE_zggsvd3_work (int matrix_layout, char jobu, char
jobv, char jobq, lapack_int m, lapack_int n, lapack_int p,
lapack_int *k, lapack_int *l, lapack_complex_double *a, lapack_int
lda, lapack_complex_double *b, lapack_int ldb, double *alpha, double
*beta, lapack_complex_double *u, lapack_int ldu,
lapack_complex_double *v, lapack_int ldv, lapack_complex_double *q,
lapack_int ldq, lapack_complex_double *work, lapack_int lwork,
double *rwork, lapack_int *iwork)
now the ggsvp crew 💜 — these take tola and tolb in their signature, and note the order shift: it's m, p, n. all four, and the complex ones carry rwork plus tau and work, while the real ones take tau and work too — just watch out, these don't have a lwork here 👀:
lapack_int LAPACKE_sggsvp_work (int matrix_layout, char jobu, char jobv,
char jobq, lapack_int m, lapack_int p, lapack_int n, float *a,
lapack_int lda, float *b, lapack_int ldb, float tola, float tolb,
lapack_int *k, lapack_int *l, float *u, lapack_int ldu, float *v,
lapack_int ldv, float *q, lapack_int ldq, lapack_int *iwork, float
*tau, float *work)
lapack_int LAPACKE_dggsvp_work (int matrix_layout, char jobu, char jobv,
char jobq, lapack_int m, lapack_int p, lapack_int n, double *a,
lapack_int lda, double *b, lapack_int ldb, double tola, double tolb,
lapack_int *k, lapack_int *l, double *u, lapack_int ldu, double *v,
lapack_int ldv, double *q, lapack_int ldq, lapack_int *iwork, double
*tau, double *work)
lapack_int LAPACKE_cggsvp_work (int matrix_layout, char jobu, char jobv,
char jobq, lapack_int m, lapack_int p, lapack_int n,
lapack_complex_float *a, lapack_int lda, lapack_complex_float *b,
lapack_int ldb, float tola, float tolb, lapack_int *k, lapack_int
*l, lapack_complex_float *u, lapack_int ldu, lapack_complex_float
*v, lapack_int ldv, lapack_complex_float *q, lapack_int ldq,
lapack_int *iwork, float *rwork, lapack_complex_float *tau,
lapack_complex_float *work)
lapack_int LAPACKE_zggsvp_work (int matrix_layout, char jobu, char jobv,
char jobq, lapack_int m, lapack_int p, lapack_int n,
lapack_complex_double *a, lapack_int lda, lapack_complex_double *b,
lapack_int ldb, double tola, double tolb, lapack_int *k, lapack_int
*l, lapack_complex_double *u, lapack_int ldu, lapack_complex_double
*v, lapack_int ldv, lapack_complex_double *q, lapack_int ldq,
lapack_int *iwork, double *rwork, lapack_complex_double *tau,
lapack_complex_double *work)
and the ggsvp3 versions? yup, same as ggsvp but they do bring lwork to the party. four more, all lined up 🌈:
lapack_int LAPACKE_sggsvp3_work (int matrix_layout, char jobu, char
jobv, char jobq, lapack_int m, lapack_int p, lapack_int n, float *a,
lapack_int lda, float *b, lapack_int ldb, float tola, float tolb,
lapack_int *k, lapack_int *l, float *u, lapack_int ldu, float *v,
lapack_int ldv, float *q, lapack_int ldq, lapack_int *iwork, float
*tau, float *work, lapack_int lwork)
lapack_int LAPACKE_dggsvp3_work (int matrix_layout, char jobu, char
jobv, char jobq, lapack_int m, lapack_int p, lapack_int n, double
*a, lapack_int lda, double *b, lapack_int ldb, double tola, double
tolb, lapack_int *k, lapack_int *l, double *u, lapack_int ldu,
double *v, lapack_int ldv, double *q, lapack_int ldq, lapack_int
*iwork, double *tau, double *work, lapack_int lwork)
lapack_int LAPACKE_cggsvp3_work (int matrix_layout, char jobu, char
jobv, char jobq, lapack_int m, lapack_int p, lapack_int n,
lapack_complex_float *a, lapack_int lda, lapack_complex_float *b,
lapack_int ldb, float tola, float tolb, lapack_int *k, lapack_int
*l, lapack_complex_float *u, lapack_int ldu, lapack_complex_float
*v, lapack_int ldv, lapack_complex_float *q, lapack_int ldq,
lapack_int *iwork, float *rwork, lapack_complex_float *tau,
lapack_complex_float *work, lapack_int lwork)
lapack_int LAPACKE_zggsvp3_work (int matrix_layout, char jobu, char
jobv, char jobq, lapack_int m, lapack_int p, lapack_int n,
lapack_complex_double *a, lapack_int lda, lapack_complex_double *b,
lapack_int ldb, double tola, double tolb, lapack_int *k, lapack_int
*l, lapack_complex_double *u, lapack_int ldu, lapack_complex_double
*v, lapack_int ldv, lapack_complex_double *q, lapack_int ldq,
lapack_int *iwork, double *rwork, lapack_complex_double *tau,
lapack_complex_double *work, lapack_int lwork)
okay next: the gtcon cuties 🎀 — note these ones don't take matrix_layout at all, they're built different. they take norm, n, and all those const-y pointers: dl, d, du, du2, ipiv, then anorm, rcond, work, iwork (real flavors) or just work (complex flavors). the c/z ones skip iwork entirely, slay:
lapack_int LAPACKE_sgtcon_work (char norm, lapack_int n, const float
*dl, const float *d, const float *du, const float *du2, const
lapack_int *ipiv, float anorm, float *rcond, float *work, lapack_int
*iwork)
lapack_int LAPACKE_dgtcon_work (char norm, lapack_int n, const double
*dl, const double *d, const double *du, const double *du2, const
lapack_int *ipiv, double anorm, double *rcond, double *work,
lapack_int *iwork)
lapack_int LAPACKE_cgtcon_work (char norm, lapack_int n, const
lapack_complex_float *dl, const lapack_complex_float *d, const
lapack_complex_float *du, const lapack_complex_float *du2, const
lapack_int *ipiv, float anorm, float *rcond, lapack_complex_float
*work)
lapack_int LAPACKE_zgtcon_work (char norm, lapack_int n, const
lapack_complex_double *dl, const lapack_complex_double *d, const
lapack_complex_double *du, const lapack_complex_double *du2, const
lapack_int *ipiv, double anorm, double *rcond, lapack_complex_double
*work)
and the gtrfs fam 🔥 — back to matrix_layout, and they're loaded: trans, n, nrhs, a whole lineup of const pointers (dl, d, du, dlf, df, duf, du2, ipiv, b), then x, ldx, ferr, berr, work, iwork. the complex ones tack on rwork at the end, ngl that's a lot of parameters but she's serving:
lapack_int LAPACKE_sgtrfs_work (int matrix_layout, char trans,
lapack_int n, lapack_int nrhs, const float *dl, const float *d,
const float *du, const float *dlf, const float *df, const float
*duf, const float *du2, const lapack_int *ipiv, const float *b,
lapack_int ldb, float *x, lapack_int ldx, float *ferr, float *berr,
float *work, lapack_int *iwork)
lapack_int LAPACKE_dgtrfs_work (int matrix_layout, char trans,
lapack_int n, lapack_int nrhs, const double *dl, const double *d,
const double *du, const double *dlf, const double *df, const double
*duf, const double *du2, const lapack_int *ipiv, const double *b,
lapack_int ldb, double *x, lapack_int ldx, double *ferr, double
*berr, double *work, lapack_int *iwork)
lapack_int LAPACKE_cgtrfs_work (int matrix_layout, char trans,
lapack_int n, lapack_int nrhs, const lapack_complex_float *dl, const
lapack_complex_float *d, const lapack_complex_float *du, const
lapack_complex_float *dlf, const lapack_complex_float *df, const
lapack_complex_float *duf, const lapack_complex_float *du2, const
lapack_int *ipiv, const lapack_complex_float *b, lapack_int ldb,
lapack_complex_float *x, lapack_int ldx, float *ferr, float *berr,
lapack_complex_float *work, float *rwork)
lapack_int LAPACKE_zgtrfs_work (int matrix_layout, char trans,
lapack_int n, lapack_int nrhs, const lapack_complex_double *dl,
const lapack_complex_double *d, const lapack_complex_double *du,
const lapack_complex_double *dlf, const lapack_complex_double *df,
const lapack_complex_double *duf, const lapack_complex_double *du2,
const lapack_int *ipiv, const lapack_complex_double *b, lapack_int
ldb, lapack_complex_double *x, lapack_int ldx, double *ferr, double
*berr, lapack_complex_double *work, double *rwork)
and finally (for this chunk, anyway 😌) we got sgtsv_work starting up — matrix_layout, n, nrhs, and the mutable dl, d, du, b, plus ldb. the next batch picks up the rest of the gtsv squad, so hold that thought bestie 🌸:
lapack_int LAPACKE_sgtsv_work (int matrix_layout, lapack_int n,
lapack_int nrhs, float *dl, float *d, float *du, float *b,
lapack_int ldb)
okay bestie, we're still in the function-signature era of this page and honestly it's giving "phone book but make it linear algebra" 💅 but like, we're powering through because that's what icons do. all of these are lapack_int-returning prototypes for the _work variants, k? let's go ✨
lapack_int LAPACKE_dgtsv_work (int matrix_layout, lapack_int n,
lapack_int nrhs, double *dl, double *d, double *du, double *b,
lapack_int ldb)
lapack_int LAPACKE_cgtsv_work (int matrix_layout, lapack_int n,
lapack_int nrhs, lapack_complex_float *dl, lapack_complex_float *d,
lapack_complex_float *du, lapack_complex_float *b, lapack_int ldb)
lapack_int LAPACKE_zgtsv_work (int matrix_layout, lapack_int n,
lapack_int nrhs, lapack_complex_double *dl, lapack_complex_double
*d, lapack_complex_double *du, lapack_complex_double *b, lapack_int
ldb)
the dgtsv / cgtsv / zgtsv trio, all three rocking matrix_layout, n, nrhs, the dl / d / du diagonal squad, b, and ldb. real vs complex, double vs float, the whole 🌈 rainbow of it. we love a consistent family.
then the expert crew, gtsvx, because sometimes you want the whole ✨analysis✨ not just the answer:
lapack_int LAPACKE_sgtsvx_work (int matrix_layout, char fact, char
trans, lapack_int n, lapack_int nrhs, const float *dl, const float
*d, const float *du, float *dlf, float *df, float *duf, float *du2,
lapack_int *ipiv, const float *b, lapack_int ldb, float *x,
lapack_int ldx, float *rcond, float *ferr, float *berr, float *work,
lapack_int *iwork)
lapack_int LAPACKE_dgtsvx_work (int matrix_layout, char fact, char
trans, lapack_int n, lapack_int nrhs, const double *dl, const double
*d, const double *du, double *dlf, double *df, double *duf, double
*du2, lapack_int *ipiv, const double *b, lapack_int ldb, double *x,
lapack_int ldx, double *rcond, double *ferr, double *berr, double
*work, lapack_int *iwork)
lapack_int LAPACKE_cgtsvx_work (int matrix_layout, char fact, char
trans, lapack_int n, lapack_int nrhs, const lapack_complex_float
*dl, const lapack_complex_float *d, const lapack_complex_float *du,
lapack_complex_float *dlf, lapack_complex_float *df,
lapack_complex_float *duf, lapack_complex_float *du2, lapack_int
*ipiv, const lapack_complex_float *b, lapack_int ldb,
lapack_complex_float *x, lapack_int ldx, float *rcond, float *ferr,
float *berr, lapack_complex_float *work, float *rwork)
lapack_int LAPACKE_zgtsvx_work (int matrix_layout, char fact, char
trans, lapack_int n, lapack_int nrhs, const lapack_complex_double
*dl, const lapack_complex_double *d, const lapack_complex_double
*du, lapack_complex_double *dlf, lapack_complex_double *df,
lapack_complex_double *duf, lapack_complex_double *du2, lapack_int
*ipiv, const lapack_complex_double *b, lapack_int ldb,
lapack_complex_double *x, lapack_int ldx, double *rcond, double
*ferr, double *berr, lapack_complex_double *work, double *rwork)
note how the complex ones get a whole extra rwork to hang with while the real ones just vibe with work and iwork. not me being obsessed with fact and trans — those char args are lowkey the main characters here 🎀
factorization besties, gttrf — no matrix_layout in sight, they keep it simple:
lapack_int LAPACKE_sgttrf_work (lapack_int n, float *dl, float *d, float
*du, float *du2, lapack_int *ipiv)
lapack_int LAPACKE_dgttrf_work (lapack_int n, double *dl, double *d,
double *du, double *du2, lapack_int *ipiv)
lapack_int LAPACKE_cgttrf_work (lapack_int n, lapack_complex_float *dl,
lapack_complex_float *d, lapack_complex_float *du,
lapack_complex_float *du2, lapack_int *ipiv)
lapack_int LAPACKE_zgttrf_work (lapack_int n, lapack_complex_double *dl,
lapack_complex_double *d, lapack_complex_double *du,
lapack_complex_double *du2, lapack_int *ipiv)
then gttrs comes through to actually use that factorization, and she's back to matrix_layout, trans, n, nrhs, dl, d, du, du2, ipiv, b, ldb:
lapack_int LAPACKE_sgttrs_work (int matrix_layout, char trans,
lapack_int n, lapack_int nrhs, const float *dl, const float *d,
const float *du, const float *du2, const lapack_int *ipiv, float *b,
lapack_int ldb)
lapack_int LAPACKE_dgttrs_work (int matrix_layout, char trans,
lapack_int n, lapack_int nrhs, const double *dl, const double *d,
const double *du, const double *du2, const lapack_int *ipiv, double
*b, lapack_int ldb)
lapack_int LAPACKE_cgttrs_work (int matrix_layout, char trans,
lapack_int n, lapack_int nrhs, const lapack_complex_float *dl, const
lapack_complex_float *d, const lapack_complex_float *du, const
lapack_complex_float *du2, const lapack_int *ipiv,
lapack_complex_float *b, lapack_int ldb)
lapack_int LAPACKE_zgttrs_work (int matrix_layout, char trans,
lapack_int n, lapack_int nrhs, const lapack_complex_double *dl,
const lapack_complex_double *d, const lapack_complex_double *du,
const lapack_complex_double *du2, const lapack_int *ipiv,
lapack_complex_double *b, lapack_int ldb)
now we're entering hermitian-band territory and it's a whole vibe 💜 hbev says "just give me the eigenvalues, jobz decides if you want vectors too":
lapack_int LAPACKE_chbev_work (int matrix_layout, char jobz, char uplo,
lapack_int n, lapack_int kd, lapack_complex_float *ab, lapack_int
ldab, float *w, lapack_complex_float *z, lapack_int ldz,
lapack_complex_float *work, float *rwork)
lapack_int LAPACKE_zhbev_work (int matrix_layout, char jobz, char uplo,
lapack_int n, lapack_int kd, lapack_complex_double *ab, lapack_int
ldab, double *w, lapack_complex_double *z, lapack_int ldz,
lapack_complex_double *work, double *rwork)
hbevd ups the drama with lwork, lrwork, iwork, liwork — she plans ahead, she's organized, she's the friend with a color-coded calendar 🗓️✨
lapack_int LAPACKE_chbevd_work (int matrix_layout, char jobz, char uplo,
lapack_int n, lapack_int kd, lapack_complex_float *ab, lapack_int
ldab, float *w, lapack_complex_float *z, lapack_int ldz,
lapack_complex_float *work, lapack_int lwork, float *rwork,
lapack_int lrwork, lapack_int *iwork, lapack_int liwork)
lapack_int LAPACKE_zhbevd_work (int matrix_layout, char jobz, char uplo,
lapack_int n, lapack_int kd, lapack_complex_double *ab, lapack_int
ldab, double *w, lapack_complex_double *z, lapack_int ldz,
lapack_complex_double *work, lapack_int lwork, double *rwork,
lapack_int lrwork, lapack_int *iwork, lapack_int liwork)
and hbevx is the picky one — range, vl, vu, il, iu, abstol, m, plus q, ldq, ifail. she does NOT do "all the eigenvalues", she does exactly the ones she wants 🎯 iconic behavior honestly
lapack_int LAPACKE_chbevx_work (int matrix_layout, char jobz, char
range, char uplo, lapack_int n, lapack_int kd, lapack_complex_float
*ab, lapack_int ldab, lapack_complex_float *q, lapack_int ldq, float
vl, float vu, lapack_int il, lapack_int iu, float abstol, lapack_int
*m, float *w, lapack_complex_float *z, lapack_int ldz,
lapack_complex_float *work, float *rwork, lapack_int *iwork,
lapack_int *ifail)
lapack_int LAPACKE_zhbevx_work (int matrix_layout, char jobz, char
range, char uplo, lapack_int n, lapack_int kd, lapack_complex_double
*ab, lapack_int ldab, lapack_complex_double *q, lapack_int ldq,
double vl, double vu, lapack_int il, lapack_int iu, double abstol,
lapack_int *m, double *w, lapack_complex_double *z, lapack_int ldz,
lapack_complex_double *work, double *rwork, lapack_int *iwork,
lapack_int *ifail)
hbgst — the "generalized → standard" glow-up, brought to you by ka, kb, ldab, ldbb, and a second matrix bb (she's const, so hands off 🫶):
lapack_int LAPACKE_chbgst_work (int matrix_layout, char vect, char uplo,
lapack_int n, lapack_int ka, lapack_int kb, lapack_complex_float
*ab, lapack_int ldab, const lapack_complex_float *bb, lapack_int
ldbb, lapack_complex_float *x, lapack_int ldx, lapack_complex_float
*work, float *rwork)
lapack_int LAPACKE_zhbgst_work (int matrix_layout, char vect, char uplo,
lapack_int n, lapack_int ka, lapack_int kb, lapack_complex_double
*ab, lapack_int ldab, const lapack_complex_double *bb, lapack_int
ldbb, lapack_complex_double *x, lapack_int ldx,
lapack_complex_double *work, double *rwork)
hbgv is the full generalized hermitian band eigenproblem, jobz and uplo running the show, w for the eigenvalues and z / ldz for the vectors:
lapack_int LAPACKE_chbgv_work (int matrix_layout, char jobz, char uplo,
lapack_int n, lapack_int ka, lapack_int kb, lapack_complex_float
*ab, lapack_int ldab, lapack_complex_float *bb, lapack_int ldbb,
float *w, lapack_complex_float *z, lapack_int ldz,
lapack_complex_float *work, float *rwork)
lapack_int LAPACKE_zhbgv_work (int matrix_layout, char jobz, char uplo,
lapack_int n, lapack_int ka, lapack_int kb, lapack_complex_double
*ab, lapack_int ldab, lapack_complex_double *bb, lapack_int ldbb,
double *w, lapack_complex_double *z, lapack_int ldz,
lapack_complex_double *work, double *rwork)
hbgvd is her deluxe sister with ALL the workspace sizes (lwork, lrwork, liwork):
lapack_int LAPACKE_chbgvd_work (int matrix_layout, char jobz, char uplo,
lapack_int n, lapack_int ka, lapack_int kb, lapack_complex_float
*ab, lapack_int ldab, lapack_complex_float *bb, lapack_int ldbb,
float *w, lapack_complex_float *z, lapack_int ldz,
lapack_complex_float *work, lapack_int lwork, float *rwork,
lapack_int lrwork, lapack_int *iwork, lapack_int liwork)
lapack_int LAPACKE_zhbgvd_work (int matrix_layout, char jobz, char uplo,
lapack_int n, lapack_int ka, lapack_int kb, lapack_complex_double
*ab, lapack_int ldab, lapack_complex_double *bb, lapack_int ldbb,
double *w, lapack_complex_double *z, lapack_int ldz,
lapack_complex_double *work, lapack_int lwork, double *rwork,
lapack_int lrwork, lapack_int *iwork, lapack_int liwork)
and hbgvx is the selective queen with range, vl, vu, il, iu, abstol, m, q, ldq, ifail — like she's got time for every eigenvalue? no bestie, she's busy 💅
lapack_int LAPACKE_chbgvx_work (int matrix_layout, char jobz, char
range, char uplo, lapack_int n, lapack_int ka, lapack_int kb,
lapack_complex_float *ab, lapack_int ldab, lapack_complex_float *bb,
lapack_int ldbb, lapack_complex_float *q, lapack_int ldq, float vl,
float vu, lapack_int il, lapack_int iu, float abstol, lapack_int *m,
float *w, lapack_complex_float *z, lapack_int ldz,
lapack_complex_float *work, float *rwork, lapack_int *iwork,
lapack_int *ifail)
lapack_int LAPACKE_zhbgvx_work (int matrix_layout, char jobz, char
range, char uplo, lapack_int n, lapack_int ka, lapack_int kb,
lapack_complex_double *ab, lapack_int ldab, lapack_complex_double
*bb, lapack_int ldbb, lapack_complex_double *q, lapack_int ldq,
double vl, double vu, lapack_int il, lapack_int iu, double abstol,
lapack_int *m, double *w, lapack_complex_double *z, lapack_int ldz,
lapack_complex_double *work, double *rwork, lapack_int *iwork,
lapack_int *ifail)
hbtrd drops in with vect, uplo, n, kd, and hands you d, e, q, ldq — the reduction-to-tridiagonal moment ✨
lapack_int LAPACKE_chbtrd_work (int matrix_layout, char vect, char uplo,
lapack_int n, lapack_int kd, lapack_complex_float *ab, lapack_int
ldab, float *d, float *e, lapack_complex_float *q, lapack_int ldq,
lapack_complex_float *work)
lapack_int LAPACKE_zhbtrd_work (int matrix_layout, char vect, char uplo,
lapack_int n, lapack_int kd, lapack_complex_double *ab, lapack_int
ldab, double *d, double *e, lapack_complex_double *q, lapack_int
ldq, lapack_complex_double *work)
hecon with her condition-number energy — uplo, n, a, lda, ipiv, anorm, rcond:
lapack_int LAPACKE_checon_work (int matrix_layout, char uplo, lapack_int
n, const lapack_complex_float *a, lapack_int lda, const lapack_int
*ipiv, float anorm, float *rcond, lapack_complex_float *work)
lapack_int LAPACKE_zhecon_work (int matrix_layout, char uplo, lapack_int
n, const lapack_complex_double *a, lapack_int lda, const lapack_int
*ipiv, double anorm, double *rcond, lapack_complex_double *work)
heequb doing the equilibration thing with s, scond, amax:
lapack_int LAPACKE_cheequb_work (int matrix_layout, char uplo,
lapack_int n, const lapack_complex_float *a, lapack_int lda, float
*s, float *scond, float *amax, lapack_complex_float *work)
lapack_int LAPACKE_zheequb_work (int matrix_layout, char uplo,
lapack_int n, const lapack_complex_double *a, lapack_int lda, double
*s, double *scond, double *amax, lapack_complex_double *work)
and heev slides in right at the end, packing jobz, uplo, n, a, lda, w, work, lwork, rwork — she's mid-entrance and we're literally about to see where she goes 👀
lapack_int LAPACKE_cheev_work (int matrix_layout, char jobz, char uplo,
lapack_int n, lapack_complex_float *a, lapack_int lda, float *w,
lapack_complex_float *work, lapack_int lwork, float *rwork)
lapack_int LAPACKE_zheev_work (int matrix_layout, char jobz, char uplo,
lapack_int n, lapack_complex_double *a, lapack_int lda, double *w,
okay we're literally mid-signature on zheev — hold that thought bestie, she's not done 💀
lapack_complex_double *work, lapack_int lwork, double *rwork)
lapack_int LAPACKE_cheevd_work (int matrix_layout, char jobz, char uplo,
lapack_int n, lapack_complex_float *a, lapack_int lda, float *w,
lapack_complex_float *work, lapack_int lwork, float *rwork,
lapack_int lrwork, lapack_int *iwork, lapack_int liwork)
lapack_int LAPACKE_zheevd_work (int matrix_layout, char jobz, char uplo,
lapack_int n, lapack_complex_double *a, lapack_int lda, double *w,
lapack_complex_double *work, lapack_int lwork, double *rwork,
lapack_int lrwork, lapack_int *iwork, lapack_int liwork)
lapack_int LAPACKE_cheevr_work (int matrix_layout, char jobz, char
range, char uplo, lapack_int n, lapack_complex_float *a, lapack_int
lda, float vl, float vu, lapack_int il, lapack_int iu, float abstol,
lapack_int *m, float *w, lapack_complex_float *z, lapack_int ldz,
lapack_int *isuppz, lapack_complex_float *work, lapack_int lwork,
float *rwork, lapack_int lrwork, lapack_int *iwork, lapack_int
liwork)
lapack_int LAPACKE_zheevr_work (int matrix_layout, char jobz, char
range, char uplo, lapack_int n, lapack_complex_double *a, lapack_int
lda, double vl, double vu, lapack_int il, lapack_int iu, double
abstol, lapack_int *m, double *w, lapack_complex_double *z,
lapack_int ldz, lapack_int *isuppz, lapack_complex_double *work,
lapack_int lwork, double *rwork, lapack_int lrwork, lapack_int
*iwork, lapack_int liwork)
lapack_int LAPACKE_cheevx_work (int matrix_layout, char jobz, char
range, char uplo, lapack_int n, lapack_complex_float *a, lapack_int
lda, float vl, float vu, lapack_int il, lapack_int iu, float abstol,
lapack_int *m, float *w, lapack_complex_float *z, lapack_int ldz,
lapack_complex_float *work, lapack_int lwork, float *rwork,
lapack_int *iwork, lapack_int *ifail)
lapack_int LAPACKE_zheevx_work (int matrix_layout, char jobz, char
range, char uplo, lapack_int n, lapack_complex_double *a, lapack_int
lda, double vl, double vu, lapack_int il, lapack_int iu, double
abstol, lapack_int *m, double *w, lapack_complex_double *z,
lapack_int ldz, lapack_complex_double *work, lapack_int lwork,
double *rwork, lapack_int *iwork, lapack_int *ifail)
okay so we're still in the great wall of prototypes and honestly? we're eating 💅 notice the pattern bestie: every single one of these comes in a c-flavoured twin and a z-flavoured twin, and the whole signature is identical except float ↔ double and lapack_complex_float ↔ lapack_complex_double. it's giving matched set. it's giving his-and-his crystal. 🎀
and yes, isuppz, abstol, vl, vu: darling the range-finder era. some of these take matrix_layout` first like it's the VIP wristband at the door. keep your eyes on the argument order, she does not forgive. 💀
lapack_int LAPACKE_chegst_work (int matrix_layout, lapack_int itype,
char uplo, lapack_int n, lapack_complex_float *a, lapack_int lda,
const lapack_complex_float *b, lapack_int ldb)
lapack_int LAPACKE_zhegst_work (int matrix_layout, lapack_int itype,
char uplo, lapack_int n, lapack_complex_double *a, lapack_int lda,
const lapack_complex_double *b, lapack_int ldb)
lapack_int LAPACKE_chegv_work (int matrix_layout, lapack_int itype, char
jobz, char uplo, lapack_int n, lapack_complex_float *a, lapack_int
lda, lapack_complex_float *b, lapack_int ldb, float *w,
lapack_complex_float *work, lapack_int lwork, float *rwork)
lapack_int LAPACKE_zhegv_work (int matrix_layout, lapack_int itype, char
jobz, char uplo, lapack_int n, lapack_complex_double *a, lapack_int
lda, lapack_complex_double *b, lapack_int ldb, double *w,
lapack_complex_double *work, lapack_int lwork, double *rwork)
lapack_int LAPACKE_chegvd_work (int matrix_layout, lapack_int itype,
char jobz, char uplo, lapack_int n, lapack_complex_float *a,
lapack_int lda, lapack_complex_float *b, lapack_int ldb, float *w,
lapack_complex_float *work, lapack_int lwork, float *rwork,
lapack_int lrwork, lapack_int *iwork, lapack_int liwork)
lapack_int LAPACKE_zhegvd_work (int matrix_layout, lapack_int itype,
char jobz, char uplo, lapack_int n, lapack_complex_double *a,
lapack_int lda, lapack_complex_double *b, lapack_int ldb, double *w,
lapack_complex_double *work, lapack_int lwork, double *rwork,
lapack_int lrwork, lapack_int *iwork, lapack_int liwork)
lapack_int LAPACKE_chegvx_work (int matrix_layout, lapack_int itype,
char jobz, char range, char uplo, lapack_int n, lapack_complex_float
*a, lapack_int lda, lapack_complex_float *b, lapack_int ldb, float
vl, float vu, lapack_int il, lapack_int iu, float abstol, lapack_int
*m, float *w, lapack_complex_float *z, lapack_int ldz,
lapack_complex_float *work, lapack_int lwork, float *rwork,
lapack_int *iwork, lapack_int *ifail)
lapack_int LAPACKE_zhegvx_work (int matrix_layout, lapack_int itype,
char jobz, char range, char uplo, lapack_int n,
lapack_complex_double *a, lapack_int lda, lapack_complex_double *b,
lapack_int ldb, double vl, double vu, lapack_int il, lapack_int iu,
double abstol, lapack_int *m, double *w, lapack_complex_double *z,
lapack_int ldz, lapack_complex_double *work, lapack_int lwork,
double *rwork, lapack_int *iwork, lapack_int *ifail)
the gst / gv / gvd / gvx quad is here and it is highkey the most extra branch of the family 🫶 like gvx woke up and chose to take itype, jobz, range, uplo, vl, vu, il, iu, abstol, a *m out-param, a workspace, rwork, iwork AND an ifail array. twelve out of ten arguments, no notes. she's booked and busy. 👑
also luv that b is const in chegst_work/zhegst_work but not const in the gv line — do not "clean that up", okay? copy it exactly as it is, that's the assignment. 🙈
lapack_int LAPACKE_cherfs_work (int matrix_layout, char uplo, lapack_int
n, lapack_int nrhs, const lapack_complex_float *a, lapack_int lda,
const lapack_complex_float *af, lapack_int ldaf, const lapack_int
*ipiv, const lapack_complex_float *b, lapack_int ldb,
lapack_complex_float *x, lapack_int ldx, float *ferr, float *berr,
lapack_complex_float *work, float *rwork)
lapack_int LAPACKE_zherfs_work (int matrix_layout, char uplo, lapack_int
n, lapack_int nrhs, const lapack_complex_double *a, lapack_int lda,
const lapack_complex_double *af, lapack_int ldaf, const lapack_int
*ipiv, const lapack_complex_double *b, lapack_int ldb,
lapack_complex_double *x, lapack_int ldx, double *ferr, double
*berr, lapack_complex_double *work, double *rwork)
lapack_int LAPACKE_cherfsx_work (int matrix_layout, char uplo, char
equed, lapack_int n, lapack_int nrhs, const lapack_complex_float *a,
lapack_int lda, const lapack_complex_float *af, lapack_int ldaf,
const lapack_int *ipiv, const float *s, const lapack_complex_float
*b, lapack_int ldb, lapack_complex_float *x, lapack_int ldx, float
*rcond, float *berr, lapack_int n_err_bnds, float *err_bnds_norm,
float *err_bnds_comp, lapack_int nparams, float *params,
lapack_complex_float *work, float *rwork)
lapack_int LAPACKE_zherfsx_work (int matrix_layout, char uplo, char
equed, lapack_int n, lapack_int nrhs, const lapack_complex_double
*a, lapack_int lda, const lapack_complex_double *af, lapack_int
ldaf, const lapack_int *ipiv, const double *s, const
lapack_complex_double *b, lapack_int ldb, lapack_complex_double *x,
lapack_int ldx, double *rcond, double *berr, lapack_int n_err_bnds,
double *err_bnds_norm, double *err_bnds_comp, lapack_int nparams,
double *params, lapack_complex_double *work, double *rwork)
the rfs crew 💀 this is the "bestie can you double-check my work" line of the family. she wants a AND af, she wants the ipiv history, and she'll hand you back ferr and berr so you can vibe check how wrong you were. iconic honestly. ✨
then rfsx said "and what if we ALSO tracked equed, s, rcond, n_err_bnds, err_bnds_norm, err_bnds_comp, nparams and params" and everyone clapped. that is a LOT of arguments. do not lose one. not even nparams. not even params, plural, separately from everything else. 🍓
lapack_int LAPACKE_chesv_work (int matrix_layout, char uplo, lapack_int
n, lapack_int nrhs, lapack_complex_float *a, lapack_int lda,
lapack_int *ipiv, lapack_complex_float *b, lapack_int ldb,
lapack_complex_float *work, lapack_int lwork)
lapack_int LAPACKE_zhesv_work (int matrix_layout, char uplo, lapack_int
n, lapack_int nrhs, lapack_complex_double *a, lapack_int lda,
lapack_int *ipiv, lapack_complex_double *b, lapack_int ldb,
lapack_complex_double *work, lapack_int lwork)
lapack_int LAPACKE_chesvx_work (int matrix_layout, char fact, char uplo,
lapack_int n, lapack_int nrhs, const lapack_complex_float *a,
lapack_int lda, lapack_complex_float *af, lapack_int ldaf,
lapack_int *ipiv, const lapack_complex_float *b, lapack_int ldb,
lapack_complex_float *x, lapack_int ldx, float *rcond, float *ferr,
float *berr, lapack_complex_float *work, lapack_int lwork, float
*rwork)
lapack_int LAPACKE_zhesvx_work (int matrix_layout, char fact, char uplo,
lapack_int n, lapack_int nrhs, const lapack_complex_double *a,
lapack_int lda, lapack_complex_double *af, lapack_int ldaf,
lapack_int *ipiv, const lapack_complex_double *b, lapack_int ldb,
lapack_complex_double *x, lapack_int ldx, double *rcond, double
*ferr, double *berr, lapack_complex_double *work, lapack_int lwork,
double *rwork)
lapack_int LAPACKE_chesvxx_work (int matrix_layout, char fact, char
uplo, lapack_int n, lapack_int nrhs, lapack_complex_float *a,
lapack_int lda, lapack_complex_float *af, lapack_int ldaf,
lapack_int *ipiv, char *equed, float *s, lapack_complex_float *b,
lapack_int ldb, lapack_complex_float *x, lapack_int ldx, float
*rcond, float *rpvgrw, float *berr, lapack_int n_err_bnds, float
*err_bnds_norm, float *err_bnds_comp, lapack_int nparams, float
*params, lapack_complex_float *work, float *rwork)
lapack_int LAPACKE_zhesvxx_work (int matrix_layout, char fact, char
uplo, lapack_int n, lapack_int nrhs, lapack_complex_double *a,
lapack_int lda, lapack_complex_double *af, lapack_int ldaf,
lapack_int *ipiv, char *equed, double *s, lapack_complex_double *b,
lapack_int ldb, lapack_complex_double *x, lapack_int ldx, double
*rcond, double *rpvgrw, double *berr, lapack_int n_err_bnds, double
*err_bnds_norm, double *err_bnds_comp, lapack_int nparams, double
*params, lapack_complex_double *work, double *rwork)
sv → svx → svxx is literally the glow-up pipeline 😭 plain sv just solves it and minds her business. svx shows up with fact, af, ldaf, rcond, ferr, berr and a rwork. and svxx?? svxx has equed and s and rpvgrw and the whole err_bnds situation. she is EXTRA and we love her for it. 💖
tiny detail bestie: in chesvxx_work / zhesvxx_work the equed is a plain char * (not const), and a / af / b / x are non-const too — unlike chesvx_work where a and b are const. it's giving "she might edit your inputs, so maybe don't pass your only copy". 🙈 i'm just reading the signature, don't come for me.
lapack_int LAPACKE_chetrd_work (int matrix_layout, char uplo, lapack_int
n, lapack_complex_float *a, lapack_int lda, float *d, float *e,
lapack_complex_float *tau, lapack_complex_float *work, lapack_int
lwork)
lapack_int LAPACKE_zhetrd_work (int matrix_layout, char uplo, lapack_int
n, lapack_complex_double *a, lapack_int lda, double *d, double *e,
lapack_complex_double *tau, lapack_complex_double *work, lapack_int
lwork)
lapack_int LAPACKE_chetrf_work (int matrix_layout, char uplo, lapack_int
n, lapack_complex_float *a, lapack_int lda, lapack_int *ipiv,
lapack_complex_float *work, lapack_int lwork)
lapack_int LAPACKE_zhetrf_work (int matrix_layout, char uplo, lapack_int
n, lapack_complex_double *a, lapack_int lda, lapack_int *ipiv,
lapack_complex_double *work, lapack_int lwork)
lapack_int LAPACKE_chetri_work (int matrix_layout, char uplo, lapack_int
n, lapack_complex_float *a, lapack_int lda, const lapack_int *ipiv,
lapack_complex_float *work)
lapack_int LAPACKE_zhetri_work (int matrix_layout, char uplo, lapack_int
n, lapack_complex_double *a, lapack_int lda, const lapack_int *ipiv,
lapack_complex_double *work)
lapack_int LAPACKE_chetrs_work (int matrix_layout, char uplo, lapack_int
n, lapack_int nrhs, const lapack_complex_float *a, lapack_int lda,
const lapack_int *ipiv, lapack_complex_float *b, lapack_int ldb)
lapack_int LAPACKE_zhetrs_work (int matrix_layout, char uplo, lapack_int
n, lapack_int nrhs, const lapack_complex_double *a, lapack_int lda,
const lapack_int *ipiv, lapack_complex_double *b, lapack_int ldb)
the tr block!! 🎀 trd gives you d, e and tau (the tridiagonal era). trf factors and hands you ipiv. tri inverts and eats ipiv as const — side eye, she's just reading it, she's a good guest. and trs solves using ipiv as const again, with nrhs and ldb in the mix. 🔥
notice chetri_work and zhetri_work have NO lwork argument. none. zero. not a crumb. don't you dare add one. the vibes are complete without it. 💅
lapack_int LAPACKE_chfrk_work (int matrix_layout, char transr, char
uplo, char trans, lapack_int n, lapack_int k, float alpha, const
and we end this batch on a cliffhanger 😭 LAPACKE_chfrk_work walks in with transr AND trans (two whole transposes, she's multilingual), uplo, n, k, alpha, and a const... something. and then the page just—
okay bestie, don't panic. the signature is literally cut off mid-line here. keep scrolling, the rest of chfrk_work (and whatever comes after) is in the next chunk. don't try to guess the missing bits, you'll get got. 🫶
the c/z twin energy continues, the argument order continues, and my patience for typing lapack_complex_double continues. see you in the next one, we're SO close. 🌈
okay so we're still parked in the SYNOPSIS zone 🫶 and it's just prototypes for days — which is honestly iconic of a header file, but bestie I need you to lock in because every single line here matters. no skimming, no "yeah yeah I get it", okay? 💅
First up: the poor thing that got cut in half last time. We're finishing the tail end of that signature — nothing to do but hand it its ending ✨
lapack_complex_float *a, lapack_int lda, float beta,
lapack_complex_float *c)
and then its double-precision twin shows up fully formed, like it heard us talking 🦋
lapack_int LAPACKE_zhfrk_work (int matrix_layout, char transr, char
uplo, char trans, lapack_int n, lapack_int k, double alpha, const
lapack_complex_double *a, lapack_int lda, double beta,
lapack_complex_double *c)
the hgeqz crew — four of them, one per precision 👑
Real versions first, <italic>s</italic> and <italic>d</italic>, and note they carry alphar + alphai as two separate arrays:
lapack_int LAPACKE_shgeqz_work (int matrix_layout, char job, char compq,
char compz, lapack_int n, lapack_int ilo, lapack_int ihi, float *h,
lapack_int ldh, float *t, lapack_int ldt, float *alphar, float
*alphai, float *beta, float *q, lapack_int ldq, float *z, lapack_int
ldz, float *work, lapack_int lwork)
lapack_int LAPACKE_dhgeqz_work (int matrix_layout, char job, char compq,
char compz, lapack_int n, lapack_int ilo, lapack_int ihi, double *h,
lapack_int ldh, double *t, lapack_int ldt, double *alphar, double
*alphai, double *beta, double *q, lapack_int ldq, double *z,
lapack_int ldz, double *work, lapack_int lwork)
Then the complex girlies <italic>c</italic> and <italic>z</italic> — same deal but the two alphas collapse into one array, and they get an extra <pink>rwork</pink> at the very end. hi bestie, we see you 👀
lapack_int LAPACKE_chgeqz_work (int matrix_layout, char job, char compq,
char compz, lapack_int n, lapack_int ilo, lapack_int ihi,
lapack_complex_float *h, lapack_int ldh, lapack_complex_float *t,
lapack_int ldt, lapack_complex_float *alpha, lapack_complex_float
*beta, lapack_complex_float *q, lapack_int ldq, lapack_complex_float
*z, lapack_int ldz, lapack_complex_float *work, lapack_int lwork,
float *rwork)
lapack_int LAPACKE_zhgeqz_work (int matrix_layout, char job, char compq,
char compz, lapack_int n, lapack_int ilo, lapack_int ihi,
lapack_complex_double *h, lapack_int ldh, lapack_complex_double *t,
lapack_int ldt, lapack_complex_double *alpha, lapack_complex_double
*beta, lapack_complex_double *q, lapack_int ldq,
lapack_complex_double *z, lapack_int ldz, lapack_complex_double
*work, lapack_int lwork, double *rwork)
hpcon — the condition-number duo 🎀 just <italic>c</italic> and <italic>z</italic>, no real versions hanging around:
lapack_int LAPACKE_chpcon_work (int matrix_layout, char uplo, lapack_int
n, const lapack_complex_float *ap, const lapack_int *ipiv, float
anorm, float *rcond, lapack_complex_float *work)
lapack_int LAPACKE_zhpcon_work (int matrix_layout, char uplo, lapack_int
n, const lapack_complex_double *ap, const lapack_int *ipiv, double
anorm, double *rcond, lapack_complex_double *work)
hpev — shortest one in the family ✨ just <pink>work</pink> and <pink>rwork</pink>, no length args, living simply:
lapack_int LAPACKE_chpev_work (int matrix_layout, char jobz, char uplo,
lapack_int n, lapack_complex_float *ap, float *w,
lapack_complex_float *z, lapack_int ldz, lapack_complex_float *work,
float *rwork)
lapack_int LAPACKE_zhpev_work (int matrix_layout, char jobz, char uplo,
lapack_int n, lapack_complex_double *ap, double *w,
lapack_complex_double *z, lapack_int ldz, lapack_complex_double
*work, double *rwork)
hpevd — the overachiever 🔥 because now we're doing three workspace arrays, each with its own length: lwork, lrwork, liwork:
lapack_int LAPACKE_chpevd_work (int matrix_layout, char jobz, char uplo,
lapack_int n, lapack_complex_float *ap, float *w,
lapack_complex_float *z, lapack_int ldz, lapack_complex_float *work,
lapack_int lwork, float *rwork, lapack_int lrwork, lapack_int
*iwork, lapack_int liwork)
lapack_int LAPACKE_zhpevd_work (int matrix_layout, char jobz, char uplo,
lapack_int n, lapack_complex_double *ap, double *w,
lapack_complex_double *z, lapack_int ldz, lapack_complex_double
*work, lapack_int lwork, double *rwork, lapack_int lrwork,
lapack_int *iwork, lapack_int liwork)
hpevx — same energy but with the whole range / vl / vu / il / iu / abstol situation plus m and ifail 💀 look at that argument list, it's giving final boss:
lapack_int LAPACKE_chpevx_work (int matrix_layout, char jobz, char
range, char uplo, lapack_int n, lapack_complex_float *ap, float vl,
float vu, lapack_int il, lapack_int iu, float abstol, lapack_int *m,
float *w, lapack_complex_float *z, lapack_int ldz,
lapack_complex_float *work, float *rwork, lapack_int *iwork,
lapack_int *ifail)
lapack_int LAPACKE_zhpevx_work (int matrix_layout, char jobz, char
range, char uplo, lapack_int n, lapack_complex_double *ap, double
vl, double vu, lapack_int il, lapack_int iu, double abstol,
lapack_int *m, double *w, lapack_complex_double *z, lapack_int ldz,
lapack_complex_double *work, double *rwork, lapack_int *iwork,
lapack_int *ifail)
hpgst — tiny icon, four args of vibes 🌸 note the itype and that bp is const:
lapack_int LAPACKE_chpgst_work (int matrix_layout, lapack_int itype,
char uplo, lapack_int n, lapack_complex_float *ap, const
lapack_complex_float *bp)
lapack_int LAPACKE_zhpgst_work (int matrix_layout, lapack_int itype,
char uplo, lapack_int n, lapack_complex_double *ap, const
lapack_complex_double *bp)
hpgv — now bp isn't const anymore 🙈 (it's lapack_complex_float *bp, no const, check it) and we picked up jobz, w, z, ldz, work, rwork:
lapack_int LAPACKE_chpgv_work (int matrix_layout, lapack_int itype, char
jobz, char uplo, lapack_int n, lapack_complex_float *ap,
lapack_complex_float *bp, float *w, lapack_complex_float *z,
lapack_int ldz, lapack_complex_float *work, float *rwork)
lapack_int LAPACKE_zhpgv_work (int matrix_layout, lapack_int itype, char
jobz, char uplo, lapack_int n, lapack_complex_double *ap,
lapack_complex_double *bp, double *w, lapack_complex_double *z,
lapack_int ldz, lapack_complex_double *work, double *rwork)
hpgvd — hpgv but make it extra 💅 now there's lwork, lrwork, iwork, liwork all up in here:
lapack_int LAPACKE_chpgvd_work (int matrix_layout, lapack_int itype,
char jobz, char uplo, lapack_int n, lapack_complex_float *ap,
lapack_complex_float *bp, float *w, lapack_complex_float *z,
lapack_int ldz, lapack_complex_float *work, lapack_int lwork, float
*rwork, lapack_int lrwork, lapack_int *iwork, lapack_int liwork)
lapack_int LAPACKE_zhpgvd_work (int matrix_layout, lapack_int itype,
char jobz, char uplo, lapack_int n, lapack_complex_double *ap,
lapack_complex_double *bp, double *w, lapack_complex_double *z,
lapack_int ldz, lapack_complex_double *work, lapack_int lwork,
double *rwork, lapack_int lrwork, lapack_int *iwork, lapack_int
liwork)
hpgvx — the longest one so far, allegedly 😭 range, vl, vu, il, iu, abstol, m, ifail — all of it, no notes:
lapack_int LAPACKE_chpgvx_work (int matrix_layout, lapack_int itype,
char jobz, char range, char uplo, lapack_int n, lapack_complex_float
*ap, lapack_complex_float *bp, float vl, float vu, lapack_int il,
lapack_int iu, float abstol, lapack_int *m, float *w,
lapack_complex_float *z, lapack_int ldz, lapack_complex_float *work,
float *rwork, lapack_int *iwork, lapack_int *ifail)
lapack_int LAPACKE_zhpgvx_work (int matrix_layout, lapack_int itype,
char jobz, char range, char uplo, lapack_int n,
lapack_complex_double *ap, lapack_complex_double *bp, double vl,
double vu, lapack_int il, lapack_int iu, double abstol, lapack_int
*m, double *w, lapack_complex_double *z, lapack_int ldz,
lapack_complex_double *work, double *rwork, lapack_int *iwork,
lapack_int *ifail)
hprfs — the refined-solution moment ✨ <pink>ferr</pink> and <pink>berr</pink> both show up, plus afp and ipiv and b/ldb/x/ldx. she's thorough:
lapack_int LAPACKE_chprfs_work (int matrix_layout, char uplo, lapack_int
n, lapack_int nrhs, const lapack_complex_float *ap, const
lapack_complex_float *afp, const lapack_int *ipiv, const
lapack_complex_float *b, lapack_int ldb, lapack_complex_float *x,
lapack_int ldx, float *ferr, float *berr, lapack_complex_float
*work, float *rwork)
lapack_int LAPACKE_zhprfs_work (int matrix_layout, char uplo, lapack_int
n, lapack_int nrhs, const lapack_complex_double *ap, const
lapack_complex_double *afp, const lapack_int *ipiv, const
lapack_complex_double *b, lapack_int ldb, lapack_complex_double *x,
lapack_int ldx, double *ferr, double *berr, lapack_complex_double
*work, double *rwork)
hpsv — short and sweet 🍓 nine args, ap / ipiv / b / ldb, done:
lapack_int LAPACKE_chpsv_work (int matrix_layout, char uplo, lapack_int
n, lapack_int nrhs, lapack_complex_float *ap, lapack_int *ipiv,
lapack_complex_float *b, lapack_int ldb)
lapack_int LAPACKE_zhpsv_work (int matrix_layout, char uplo, lapack_int
n, lapack_int nrhs, lapack_complex_double *ap, lapack_int *ipiv,
lapack_complex_double *b, lapack_int ldb)
hpsvx — and now with fact 👑 plus afp, rcond, ferr, berr, work, rwork. suddenly we're at an entire party:
lapack_int LAPACKE_chpsvx_work (int matrix_layout, char fact, char uplo,
lapack_int n, lapack_int nrhs, const lapack_complex_float *ap,
lapack_complex_float *afp, lapack_int *ipiv, const
lapack_complex_float *b, lapack_int ldb, lapack_complex_float *x,
lapack_int ldx, float *rcond, float *ferr, float *berr,
lapack_complex_float *work, float *rwork)
lapack_int LAPACKE_zhpsvx_work (int matrix_layout, char fact, char uplo,
lapack_int n, lapack_int nrhs, const lapack_complex_double *ap,
lapack_complex_double *afp, lapack_int *ipiv, const
lapack_complex_double *b, lapack_int ldb, lapack_complex_double *x,
lapack_int ldx, double *rcond, double *ferr, double *berr,
lapack_complex_double *work, double *rwork)
hptrd — d, e, tau core 🎀 that's the whole personality:
lapack_int LAPACKE_chptrd_work (int matrix_layout, char uplo, lapack_int
n, lapack_complex_float *ap, float *d, float *e,
lapack_complex_float *tau)
lapack_int LAPACKE_zhptrd_work (int matrix_layout, char uplo, lapack_int
n, lapack_complex_double *ap, double *d, double *e,
lapack_complex_double *tau)
hptrf — literally four args after the layout stuff 😌 ap and ipiv, that's it, she's low maintenance:
lapack_int LAPACKE_chptrf_work (int matrix_layout, char uplo, lapack_int
n, lapack_complex_float *ap, lapack_int *ipiv)
lapack_int LAPACKE_zhptrf_work (int matrix_layout, char uplo, lapack_int
n, lapack_complex_double *ap, lapack_int *ipiv)
hptri — the inverse one, and yes ipiv is const here 🦋:
lapack_int LAPACKE_chptri_work (int matrix_layout, char uplo, lapack_int
n, lapack_complex_float *ap, const lapack_int *ipiv,
lapack_complex_float *work)
lapack_int LAPACKE_zhptri_work (int matrix_layout, char uplo, lapack_int
n, lapack_complex_double *ap, const lapack_int *ipiv,
lapack_complex_double *work)
hptrs — solving time, nrhs in the building 💜:
lapack_int LAPACKE_chptrs_work (int matrix_layout, char uplo, lapack_int
n, lapack_int nrhs, const lapack_complex_float *ap, const lapack_int
*ipiv, lapack_complex_float *b, lapack_int ldb)
lapack_int LAPACKE_zhptrs_work (int matrix_layout, char uplo, lapack_int
n, lapack_int nrhs, const lapack_complex_double *ap, const
lapack_int *ipiv, lapack_complex_double *b, lapack_int ldb)
the hsein era begins 🌈 and bestie, look at the shapes here. Real version has wr and wi, plus vl/ldvl and vr/ldvr, plus mm, m, work, ifaill, ifailr — and select is a lapack_logical * (not const!) in <italic>s</italic> and <italic>d</italic>:
lapack_int LAPACKE_shsein_work (int matrix_layout, char job, char
eigsrc, char initv, lapack_logical *select, lapack_int n, const
float *h, lapack_int ldh, float *wr, const float *wi, float *vl,
lapack_int ldvl, float *vr, lapack_int ldvr, lapack_int mm,
lapack_int *m, float *work, lapack_int *ifaill, lapack_int *ifailr)
lapack_int LAPACKE_dhsein_work (int matrix_layout, char job, char
eigsrc, char initv, lapack_logical *select, lapack_int n, const
double *h, lapack_int ldh, double *wr, const double *wi, double *vl,
lapack_int ldvl, double *vr, lapack_int ldvr, lapack_int mm,
lapack_int *m, double *work, lapack_int *ifaill, lapack_int *ifailr)
Complex version: select becomes const, wr/wi become one w, and <pink>rwork</pink> gets slipped in before the ifails 👀:
lapack_int LAPACKE_chsein_work (int matrix_layout, char job, char
eigsrc, char initv, const lapack_logical *select, lapack_int n,
const lapack_complex_float *h, lapack_int ldh, lapack_complex_float
*w, lapack_complex_float *vl, lapack_int ldvl, lapack_complex_float
*vr, lapack_int ldvr, lapack_int mm, lapack_int *m,
lapack_complex_float *work, float *rwork, lapack_int *ifaill,
lapack_int *ifailr)
and then — cliffhanger 😭 — zhsein_work walks in and the manpage literally cuts her off mid-signature:
lapack_int LAPACKE_zhsein_work (int matrix_layout, char job, char
eigsrc, char initv, const lapack_logical *select, lapack_int n,
no cap, that's where this part ends. she's gonna finish her sentence in the next chunk and we'll be right there waiting 🫶
...and we're literally mid-signature, bestie 😭 no cap, the previous declaration just keeps going. Tail end of it, verbatim, don't touch:
const lapack_complex_double *h, lapack_int ldh,
lapack_complex_double *w, lapack_complex_double *vl, lapack_int
ldvl, lapack_complex_double *vr, lapack_int ldvr, lapack_int mm,
lapack_int *m, lapack_complex_double *work, double *rwork,
lapack_int *ifaill, lapack_int *ifailr)
Iconic. Moving on ✨
🌸 the hseqr quartet (the _work versions)
Four of them, one per precision, all carrying matrix_layout, job, compz, n, ilo, ihi, ldh, ldz, and a lwork at the end. The s/d ones hand you back wr and wi as real arrays; the c/z ones just hand you a single complex w. That's the whole personality difference, iykyk 🎀
lapack_int LAPACKE_shseqr_work (int matrix_layout, char job, char compz,
lapack_int n, lapack_int ilo, lapack_int ihi, float *h, lapack_int
ldh, float *wr, float *wi, float *z, lapack_int ldz, float *work,
lapack_int lwork)
lapack_int LAPACKE_dhseqr_work (int matrix_layout, char job, char compz,
lapack_int n, lapack_int ilo, lapack_int ihi, double *h, lapack_int
ldh, double *wr, double *wi, double *z, lapack_int ldz, double
*work, lapack_int lwork)
lapack_int LAPACKE_chseqr_work (int matrix_layout, char job, char compz,
lapack_int n, lapack_int ilo, lapack_int ihi, lapack_complex_float
*h, lapack_int ldh, lapack_complex_float *w, lapack_complex_float
*z, lapack_int ldz, lapack_complex_float *work, lapack_int lwork)
lapack_int LAPACKE_zhseqr_work (int matrix_layout, char job, char compz,
lapack_int n, lapack_int ilo, lapack_int ihi, lapack_complex_double
*h, lapack_int ldh, lapack_complex_double *w, lapack_complex_double
*z, lapack_int ldz, lapack_complex_double *work, lapack_int lwork)
🦋 lacgv — the tiny duo
Only two of these, because conjugate-transpose of a vector is a complex-only kind of situation 💅 Just n, x, incx. Two parameters and a dream.
lapack_int LAPACKE_clacgv_work (lapack_int n, lapack_complex_float *x,
lapack_int incx)
lapack_int LAPACKE_zlacgv_work (lapack_int n, lapack_complex_double *x,
lapack_int incx)
🔥 lacn2 — the estimate crew
The whole kase/isave/est situation. Note the real ones (s, d) also take float *x / double *x and an isgn array, while the complex ones (c, z) skip isgn entirely and use complex x. Not me noticing the details 👀
lapack_int LAPACKE_slacn2_work (lapack_int n, float *v, float *x,
lapack_int *isgn, float *est, lapack_int *kase, lapack_int *isave)
lapack_int LAPACKE_dlacn2_work (lapack_int n, double *v, double *x,
lapack_int *isgn, double *est, lapack_int *kase, lapack_int *isave)
lapack_int LAPACKE_clacn2_work (lapack_int n, lapack_complex_float *v,
lapack_complex_float *x, float *est, lapack_int *kase, lapack_int
*isave)
lapack_int LAPACKE_zlacn2_work (lapack_int n, lapack_complex_double *v,
lapack_complex_double *x, double *est, lapack_int *kase, lapack_int
*isave)
💖 lacpy — copy era
Four flavours, all with matrix_layout, uplo, m, n, lda, ldb, source a marked const, destination b. Copy-paste but make it linear algebra ✨
lapack_int LAPACKE_slacpy_work (int matrix_layout, char uplo, lapack_int
m, lapack_int n, const float *a, lapack_int lda, float *b,
lapack_int ldb)
lapack_int LAPACKE_dlacpy_work (int matrix_layout, char uplo, lapack_int
m, lapack_int n, const double *a, lapack_int lda, double *b,
lapack_int ldb)
lapack_int LAPACKE_clacpy_work (int matrix_layout, char uplo, lapack_int
m, lapack_int n, const lapack_complex_float *a, lapack_int lda,
lapack_complex_float *b, lapack_int ldb)
lapack_int LAPACKE_zlacpy_work (int matrix_layout, char uplo, lapack_int
m, lapack_int n, const lapack_complex_double *a, lapack_int lda,
lapack_complex_double *b, lapack_int ldb)
And then lacp2, which is the real-to-complex glow-up — const float *a on the way in, lapack_complex_float *b on the way out. Only c and z exist here, obviously:
lapack_int LAPACKE_clacp2_work (int matrix_layout, char uplo, lapack_int
m, lapack_int n, const float *a, lapack_int lda,
lapack_complex_float *b, lapack_int ldb)
lapack_int LAPACKE_zlacp2_work (int matrix_layout, char uplo, lapack_int
m, lapack_int n, const double *a, lapack_int lda,
lapack_complex_double *b, lapack_int ldb)
🧚 the conversion girlies
zlag2c, slag2d, dlag2s, clag2z — four little transformers, each going from one precision to another. Watch the names, because they are not symmetrical: zlag2c goes complex-double → complex-float (hence the sa output and ldsa), slag2d goes float → double, dlag2s goes double → float, and clag2z goes complex-float → complex-double. Also zlag2c is the only one that lists ldsa before lda — slay for consistency bestie 💀
lapack_int LAPACKE_zlag2c_work (int matrix_layout, lapack_int m,
lapack_int n, const lapack_complex_double *a, lapack_int lda,
lapack_complex_float *sa, lapack_int ldsa)
lapack_int LAPACKE_slag2d_work (int matrix_layout, lapack_int m,
lapack_int n, const float *sa, lapack_int ldsa, double *a,
lapack_int lda)
lapack_int LAPACKE_dlag2s_work (int matrix_layout, lapack_int m,
lapack_int n, const double *a, lapack_int lda, float *sa, lapack_int
ldsa)
lapack_int LAPACKE_clag2z_work (int matrix_layout, lapack_int m,
lapack_int n, const lapack_complex_float *sa, lapack_int ldsa,
lapack_complex_double *a, lapack_int lda)
👑 lagge — the general band gang
m, n, kl, ku, plus a const diagonal d, the a output with lda, an iseed array, and a work buffer. All four precisions, every one of them, no skips. Periodt.
lapack_int LAPACKE_slagge_work (int matrix_layout, lapack_int m,
lapack_int n, lapack_int kl, lapack_int ku, const float *d, float
*a, lapack_int lda, lapack_int *iseed, float *work)
lapack_int LAPACKE_dlagge_work (int matrix_layout, lapack_int m,
lapack_int n, lapack_int kl, lapack_int ku, const double *d, double
*a, lapack_int lda, lapack_int *iseed, double *work)
lapack_int LAPACKE_clagge_work (int matrix_layout, lapack_int m,
lapack_int n, lapack_int kl, lapack_int ku, const float *d,
lapack_complex_float *a, lapack_int lda, lapack_int *iseed,
lapack_complex_float *work)
lapack_int LAPACKE_zlagge_work (int matrix_layout, lapack_int m,
lapack_int n, lapack_int kl, lapack_int ku, const double *d,
lapack_complex_double *a, lapack_int lda, lapack_int *iseed,
lapack_complex_double *work)
And the Hermitian one is complex-only, naturally — just c and z, with k instead of kl/ku and a const float *d / const double *d doing the diagonal thing 🫶
lapack_int LAPACKE_claghe_work (int matrix_layout, lapack_int n,
lapack_int k, const float *d, lapack_complex_float *a, lapack_int
lda, lapack_int *iseed, lapack_complex_float *work)
lapack_int LAPACKE_zlaghe_work (int matrix_layout, lapack_int n,
lapack_int k, const double *d, lapack_complex_double *a, lapack_int
lda, lapack_int *iseed, lapack_complex_double *work)
🌈 lagsy — symmetric edition
Same shape of deal, n, k, d, a, lda, iseed, work, but all four precisions show up this time (the c and z ones take a real d and a complex a, which is the whole point, love that for them).
lapack_int LAPACKE_slagsy_work (int matrix_layout, lapack_int n,
lapack_int k, const float *d, float *a, lapack_int lda, lapack_int
*iseed, float *work)
lapack_int LAPACKE_dlagsy_work (int matrix_layout, lapack_int n,
lapack_int k, const double *d, double *a, lapack_int lda, lapack_int
*iseed, double *work)
lapack_int LAPACKE_clagsy_work (int matrix_layout, lapack_int n,
lapack_int k, const float *d, lapack_complex_float *a, lapack_int
lda, lapack_int *iseed, lapack_complex_float *work)
lapack_int LAPACKE_zlagsy_work (int matrix_layout, lapack_int n,
lapack_int k, const double *d, lapack_complex_double *a, lapack_int
lda, lapack_int *iseed, lapack_complex_double *work)
🎀 lapmr and lapmt — the permutation twins
Both take a lapack_logical forwrd (yes that's how it's spelled, keep it, do not "fix" it 💅), m, n, x, ldx, and an lapack_int *k. Both come in all four precisions. They're literally twins, so here they are, matching outfits and everything:
lapack_int LAPACKE_slapmr_work (int matrix_layout, lapack_logical
forwrd, lapack_int m, lapack_int n, float *x, lapack_int ldx,
lapack_int *k)
lapack_int LAPACKE_dlapmr_work (int matrix_layout, lapack_logical
forwrd, lapack_int m, lapack_int n, double *x, lapack_int ldx,
lapack_int *k)
lapack_int LAPACKE_clapmr_work (int matrix_layout, lapack_logical
forwrd, lapack_int m, lapack_int n, lapack_complex_float *x,
lapack_int ldx, lapack_int *k)
lapack_int LAPACKE_zlapmr_work (int matrix_layout, lapack_logical
forwrd, lapack_int m, lapack_int n, lapack_complex_double *x,
lapack_int ldx, lapack_int *k)
lapack_int LAPACKE_slapmt_work (int matrix_layout, lapack_logical
forwrd, lapack_int m, lapack_int n, float *x, lapack_int ldx,
lapack_int *k)
lapack_int LAPACKE_dlapmt_work (int matrix_layout, lapack_logical
forwrd, lapack_int m, lapack_int n, double *x, lapack_int ldx,
lapack_int *k)
lapack_int LAPACKE_clapmt_work (int matrix_layout, lapack_logical
forwrd, lapack_int m, lapack_int n, lapack_complex_float *x,
lapack_int ldx, lapack_int *k)
lapack_int LAPACKE_zlapmt_work (int matrix_layout, lapack_logical
forwrd, lapack_int m, lapack_int n, lapack_complex_double *x,
lapack_int ldx, lapack_int *k)
⭐ the little rotation guys
lartgp gives you cs, sn, r out of f and g — real only, s and d. lartgs takes x, y, sigma and gives cs and sn — also real only. Short, sweet, no matrix_layout in sight, which honestly? A vibe.
lapack_int LAPACKE_slartgp_work (float f, float g, float *cs, float *sn,
float *r)
lapack_int LAPACKE_dlartgp_work (double f, double g, double *cs, double
*sn, double *r)
lapack_int LAPACKE_slartgs_work (float x, float y, float sigma, float
*cs, float *sn)
lapack_int LAPACKE_dlartgs_work (double x, double y, double sigma,
double *cs, double *sn)
💜 lapy2 / lapy3 — the return-value girlies
Heads up: these two literally return a float or a double directly — no error code, no lapack_int, they just hand you the number. lapy2 takes x, y; lapy3 takes x, y, z. Real precisions only. Main character energy honestly 👑
float LAPACKE_slapy2_work (float x, float y)
double LAPACKE_dlapy2_work (double x, double y)
float LAPACKE_slapy3_work (float x, float y, float z)
double LAPACKE_dlapy3_work (double x, double y, double z)
Same deal for lamch, except it also takes a char cmach and still returns the value straight up:
float LAPACKE_slamch_work (char cmach)
double LAPACKE_dlamch_work (char cmach)
🔥 lange — norms, but make it general
matrix_layout, char norm, m, n, const matrix a, lda, and a work buffer. All four precisions. Also note the return type flips: float for s and c, double for d and z. Yes, clange returns a float — that's what it says, don't come for me 🙈
float LAPACKE_slange_work (int matrix_layout, char norm, lapack_int m,
lapack_int n, const float *a, lapack_int lda, float *work)
double LAPACKE_dlange_work (int matrix_layout, char norm, lapack_int m,
lapack_int n, const double *a, lapack_int lda, double *work)
float LAPACKE_clange_work (int matrix_layout, char norm, lapack_int m,
lapack_int n, const lapack_complex_float *a, lapack_int lda, float
*work)
double LAPACKE_zlange_work (int matrix_layout, char norm, lapack_int m,
lapack_int n, const lapack_complex_double *a, lapack_int lda, double
*work)
Hermitian norms drop the m and add a char uplo, because square and honest about it 🦋
float LAPACKE_clanhe_work (int matrix_layout, char norm, char uplo,
lapack_int n, const lapack_complex_float *a, lapack_int lda, float
*work)
double LAPACKE_zlanhe_work (int matrix_layout, char norm, char uplo,
lapack_int n, const lapack_complex_double *a, lapack_int lda, double
*work)
🍓 lacrm / larcm — the mixed-precision power couple
lacrm: complex a times real b, into complex c. larcm: real a times complex b, into complex c. Both have m, n, lda, ldb, ldc and a work array, and both exist only as c and z 🫶
lapack_int LAPACKE_clacrm_work (int matrix_layout, lapack_int m,
lapack_int n, const lapack_complex_float *a, lapack_int lda, const
float *b, lapack_int ldb, lapack_complex_float *c, lapack_int ldc,
float *work)
lapack_int LAPACKE_zlacrm_work (int matrix_layout, lapack_int m,
lapack_int n, const lapack_complex_double *a, lapack_int lda, const
double *b, lapack_int ldb, lapack_complex_double *c, lapack_int ldc,
double *work)
lapack_int LAPACKE_clarcm_work (int matrix_layout, lapack_int m,
lapack_int n, const float *a, lapack_int lda, const
lapack_complex_float *b, lapack_int ldb, lapack_complex_float *c,
lapack_int ldc, float *work)
lapack_int LAPACKE_zlarcm_work (int matrix_layout, lapack_int m,
lapack_int n, const double *a, lapack_int lda, const
lapack_complex_double *b, lapack_int ldb, lapack_complex_double *c,
lapack_int ldc, double *work)
🌸 lansy — symmetric norms
norm, uplo, n, a, lda, work, four precisions, returning float for s/c and double for d/z. Consistent queen.
float LAPACKE_slansy_work (int matrix_layout, char norm, char uplo,
lapack_int n, const float *a, lapack_int lda, float *work)
double LAPACKE_dlansy_work (int matrix_layout, char norm, char uplo,
lapack_int n, const double *a, lapack_int lda, double *work)
float LAPACKE_clansy_work (int matrix_layout, char norm, char uplo,
lapack_int n, const lapack_complex_float *a, lapack_int lda, float
*work)
double LAPACKE_zlansy_work (int matrix_layout, char norm, char uplo,
lapack_int n, const lapack_complex_double *a, lapack_int lda, double
*work)
🧚 lantr — triangular norms, and we're mid-sentence again
Adds a char diag on top of norm/uplo, and unlike lansy these take m and n. Four precisions, same return-type pattern, and then — of course — the last one is cut off mid-signature because the page keeps going. Below is exactly what's on the page, no guessing at the rest 👑💅
float LAPACKE_slantr_work (int matrix_layout, char norm, char uplo, char
diag, lapack_int m, lapack_int n, const float *a, lapack_int lda,
float *work)
double LAPACKE_dlantr_work (int matrix_layout, char norm, char uplo,
char diag, lapack_int m, lapack_int n, const double *a, lapack_int
lda, double *work)
float LAPACKE_clantr_work (int matrix_layout, char norm, char uplo, char
diag, lapack_int m, lapack_int n, const lapack_complex_float *a,
lapack_int lda, float *work)
double LAPACKE_zlantr_work (int matrix_layout, char norm, char uplo,
char diag, lapack_int m, lapack_int n, const lapack_complex_double
...and that's where we cliffhang 🫠 more coming.
*a, lapack_int lda, double *work)
...and that's the tail end of the previous call, bestie, no cap — we're mid-synopsis and we're staying mid-synopsis 💅
🦋 the larfb squad
Four of them, one per precision flavor (s, d, c, z — you know the drill by now 🌸). Blocked reflector appliers, all in their _work era:
lapack_int LAPACKE_slarfb_work (int matrix_layout, char side, char
trans, char direct, char storev, lapack_int m, lapack_int n,
lapack_int k, const float *v, lapack_int ldv, const float *t,
lapack_int ldt, float *c, lapack_int ldc, float *work, lapack_int
ldwork)
lapack_int LAPACKE_dlarfb_work (int matrix_layout, char side, char
trans, char direct, char storev, lapack_int m, lapack_int n,
lapack_int k, const double *v, lapack_int ldv, const double *t,
lapack_int ldt, double *c, lapack_int ldc, double *work, lapack_int
ldwork)
lapack_int LAPACKE_clarfb_work (int matrix_layout, char side, char
trans, char direct, char storev, lapack_int m, lapack_int n,
lapack_int k, const lapack_complex_float *v, lapack_int ldv, const
lapack_complex_float *t, lapack_int ldt, lapack_complex_float *c,
lapack_int ldc, lapack_complex_float *work, lapack_int ldwork)
lapack_int LAPACKE_zlarfb_work (int matrix_layout, char side, char
trans, char direct, char storev, lapack_int m, lapack_int n,
lapack_int k, const lapack_complex_double *v, lapack_int ldv, const
lapack_complex_double *t, lapack_int ldt, lapack_complex_double *c,
lapack_int ldc, lapack_complex_double *work, lapack_int ldwork)
Notice how side, trans, direct and storev are all just chillin' there as chars — that's four whole vibe checks before you even get to m 🫶
✨ larfg — no matrix_layout here, she's built different
Iconic behavior honestly. These four skip the layout argument entirely:
lapack_int LAPACKE_slarfg_work (lapack_int n, float *alpha, float *x,
lapack_int incx, float *tau)
lapack_int LAPACKE_dlarfg_work (lapack_int n, double *alpha, double *x,
lapack_int incx, double *tau)
lapack_int LAPACKE_clarfg_work (lapack_int n, lapack_complex_float
*alpha, lapack_complex_float *x, lapack_int incx,
lapack_complex_float *tau)
lapack_int LAPACKE_zlarfg_work (lapack_int n, lapack_complex_double
*alpha, lapack_complex_double *x, lapack_int incx,
lapack_complex_double *tau)
alpha and x and tau, oh my 💖
🎀 larft — the t generation girlies
matrix_layout, direct, storev, n, k, v, ldv, tau, t, ldt. That's the whole guest list:
lapack_int LAPACKE_slarft_work (int matrix_layout, char direct, char
storev, lapack_int n, lapack_int k, const float *v, lapack_int ldv,
const float *tau, float *t, lapack_int ldt)
lapack_int LAPACKE_dlarft_work (int matrix_layout, char direct, char
storev, lapack_int n, lapack_int k, const double *v, lapack_int ldv,
const double *tau, double *t, lapack_int ldt)
lapack_int LAPACKE_clarft_work (int matrix_layout, char direct, char
storev, lapack_int n, lapack_int k, const lapack_complex_float *v,
lapack_int ldv, const lapack_complex_float *tau,
lapack_complex_float *t, lapack_int ldt)
lapack_int LAPACKE_zlarft_work (int matrix_layout, char direct, char
storev, lapack_int n, lapack_int k, const lapack_complex_double *v,
lapack_int ldv, const lapack_complex_double *tau,
lapack_complex_double *t, lapack_int ldt)
🔥 larfx — same energy, but tau is a scalar now
Not a pointer, a whole scalar. She said "I'll be the value myself" 💀
lapack_int LAPACKE_slarfx_work (int matrix_layout, char side, lapack_int
m, lapack_int n, const float *v, float tau, float *c, lapack_int
ldc, float *work)
lapack_int LAPACKE_dlarfx_work (int matrix_layout, char side, lapack_int
m, lapack_int n, const double *v, double tau, double *c, lapack_int
ldc, double *work)
lapack_int LAPACKE_clarfx_work (int matrix_layout, char side, lapack_int
m, lapack_int n, const lapack_complex_float *v, lapack_complex_float
tau, lapack_complex_float *c, lapack_int ldc, lapack_complex_float
*work)
lapack_int LAPACKE_zlarfx_work (int matrix_layout, char side, lapack_int
m, lapack_int n, const lapack_complex_double *v,
lapack_complex_double tau, lapack_complex_double *c, lapack_int ldc,
lapack_complex_double *work)
🌈 larnv — random numbers, no matrix_layout in sight
idist, iseed, n, x. Seeding is her whole personality 🍓
lapack_int LAPACKE_slarnv_work (lapack_int idist, lapack_int *iseed,
lapack_int n, float *x)
lapack_int LAPACKE_dlarnv_work (lapack_int idist, lapack_int *iseed,
lapack_int n, double *x)
lapack_int LAPACKE_clarnv_work (lapack_int idist, lapack_int *iseed,
lapack_int n, lapack_complex_float *x)
lapack_int LAPACKE_zlarnv_work (lapack_int idist, lapack_int *iseed,
lapack_int n, lapack_complex_double *x)
💜 lascl — the scale-it-up crew
Heads up bestie: the complex ones take float cfrom, float cto for c and double cfrom, double cto for z — that's not a typo, I promise, I copied it exactly 🙈
lapack_int LAPACKE_slascl_work (int matrix_layout, char type, lapack_int
kl, lapack_int ku, float cfrom, float cto, lapack_int m, lapack_int
n, float *a, lapack_int lda)
lapack_int LAPACKE_dlascl_work (int matrix_layout, char type, lapack_int
kl, lapack_int ku, double cfrom, double cto, lapack_int m,
lapack_int n, double *a, lapack_int lda)
lapack_int LAPACKE_clascl_work (int matrix_layout, char type, lapack_int
kl, lapack_int ku, float cfrom, float cto, lapack_int m, lapack_int
n, lapack_complex_float *a, lapack_int lda)
lapack_int LAPACKE_zlascl_work (int matrix_layout, char type, lapack_int
kl, lapack_int ku, double cfrom, double cto, lapack_int m,
lapack_int n, lapack_complex_double *a, lapack_int lda)
⭐ laset — the alpha/beta four
uplo, m, n, alpha, beta, a, lda. Short, sweet, slays:
lapack_int LAPACKE_slaset_work (int matrix_layout, char uplo, lapack_int
m, lapack_int n, float alpha, float beta, float *a, lapack_int lda)
lapack_int LAPACKE_dlaset_work (int matrix_layout, char uplo, lapack_int
m, lapack_int n, double alpha, double beta, double *a, lapack_int
lda)
lapack_int LAPACKE_claset_work (int matrix_layout, char uplo, lapack_int
m, lapack_int n, lapack_complex_float alpha, lapack_complex_float
beta, lapack_complex_float *a, lapack_int lda)
lapack_int LAPACKE_zlaset_work (int matrix_layout, char uplo, lapack_int
m, lapack_int n, lapack_complex_double alpha, lapack_complex_double
beta, lapack_complex_double *a, lapack_int lda)
Only two of these exist without complex — lasrt is real-only and lowkey doesn't care about your matrix_layout 😌
lapack_int LAPACKE_slasrt_work (char id, lapack_int n, float *d)
lapack_int LAPACKE_dlasrt_work (char id, lapack_int n, double *d)
🧚 lassq — scale and sumsq, both pointers
lapack_int LAPACKE_slassq_work (lapack_int n, float *x, lapack_int incx,
float *scale, float *sumsq)
lapack_int LAPACKE_dlassq_work (lapack_int n, double *x, lapack_int
incx, double *scale, double *sumsq)
lapack_int LAPACKE_classq_work (lapack_int n, lapack_complex_float *x,
lapack_int incx, float *scale, float *sumsq)
lapack_int LAPACKE_zlassq_work (lapack_int n, lapack_complex_double *x,
lapack_int incx, double *scale, double *sumsq)
👑 laswp — pivoting era
Now this one's got k1, k2, ipiv and incx all up in there:
lapack_int LAPACKE_slaswp_work (int matrix_layout, lapack_int n, float
*a, lapack_int lda, lapack_int k1, lapack_int k2, const lapack_int
*ipiv, lapack_int incx)
lapack_int LAPACKE_dlaswp_work (int matrix_layout, lapack_int n, double
*a, lapack_int lda, lapack_int k1, lapack_int k2, const lapack_int
*ipiv, lapack_int incx)
lapack_int LAPACKE_claswp_work (int matrix_layout, lapack_int n,
lapack_complex_float *a, lapack_int lda, lapack_int k1, lapack_int
k2, const lapack_int *ipiv, lapack_int incx)
lapack_int LAPACKE_zlaswp_work (int matrix_layout, lapack_int n,
lapack_complex_double *a, lapack_int lda, lapack_int k1, lapack_int
k2, const lapack_int *ipiv, lapack_int incx)
🌸 latms — the long one, she has everything
dist, iseed, sym, d, mode, cond, dmax, kl, ku, pack... she ate and left no crumbs 🎀 Again, baby: clatms and zlatms take float *d / double *d and float cond / double cond exactly as written — copy-paste faithfully, bestie:
lapack_int LAPACKE_slatms_work (int matrix_layout, lapack_int m,
lapack_int n, char dist, lapack_int *iseed, char sym, float *d,
lapack_int mode, float cond, float dmax, lapack_int kl, lapack_int
ku, char pack, float *a, lapack_int lda, float *work)
lapack_int LAPACKE_dlatms_work (int matrix_layout, lapack_int m,
lapack_int n, char dist, lapack_int *iseed, char sym, double *d,
lapack_int mode, double cond, double dmax, lapack_int kl, lapack_int
ku, char pack, double *a, lapack_int lda, double *work)
lapack_int LAPACKE_clatms_work (int matrix_layout, lapack_int m,
lapack_int n, char dist, lapack_int *iseed, char sym, float *d,
lapack_int mode, float cond, float dmax, lapack_int kl, lapack_int
ku, char pack, lapack_complex_float *a, lapack_int lda,
lapack_complex_float *work)
lapack_int LAPACKE_zlatms_work (int matrix_layout, lapack_int m,
lapack_int n, char dist, lapack_int *iseed, char sym, double *d,
lapack_int mode, double cond, double dmax, lapack_int kl, lapack_int
ku, char pack, lapack_complex_double *a, lapack_int lda,
lapack_complex_double *work)
💅 lauum — triangular, uplo and done
lapack_int LAPACKE_slauum_work (int matrix_layout, char uplo, lapack_int
n, float *a, lapack_int lda)
lapack_int LAPACKE_dlauum_work (int matrix_layout, char uplo, lapack_int
n, double *a, lapack_int lda)
lapack_int LAPACKE_clauum_work (int matrix_layout, char uplo, lapack_int
n, lapack_complex_float *a, lapack_int lda)
lapack_int LAPACKE_zlauum_work (int matrix_layout, char uplo, lapack_int
n, lapack_complex_double *a, lapack_int lda)
🫶 opgtr / opmtr — packed friends
opgtr is the short one (ap, tau, q, ldq, work), and note: only s and d versions exist here, no complex girlies 😭
lapack_int LAPACKE_sopgtr_work (int matrix_layout, char uplo, lapack_int
n, const float *ap, const float *tau, float *q, lapack_int ldq,
float *work)
lapack_int LAPACKE_dopgtr_work (int matrix_layout, char uplo, lapack_int
n, const double *ap, const double *tau, double *q, lapack_int ldq,
double *work)
opmtr adds side, trans, m, n, c, ldc — a whole glow-up:
lapack_int LAPACKE_sopmtr_work (int matrix_layout, char side, char uplo,
char trans, lapack_int m, lapack_int n, const float *ap, const float
*tau, float *c, lapack_int ldc, float *work)
lapack_int LAPACKE_dopmtr_work (int matrix_layout, char side, char uplo,
char trans, lapack_int m, lapack_int n, const double *ap, const
double *tau, double *c, lapack_int ldc, double *work)
⭐ the org family — generators, all s/d, all with lwork
Starting with orgbr and her vect era:
lapack_int LAPACKE_sorgbr_work (int matrix_layout, char vect, lapack_int
m, lapack_int n, lapack_int k, float *a, lapack_int lda, const float
*tau, float *work, lapack_int lwork)
lapack_int LAPACKE_dorgbr_work (int matrix_layout, char vect, lapack_int
m, lapack_int n, lapack_int k, double *a, lapack_int lda, const
double *tau, double *work, lapack_int lwork)
orghr with her iconic ilo/ihi duo:
lapack_int LAPACKE_sorghr_work (int matrix_layout, lapack_int n,
lapack_int ilo, lapack_int ihi, float *a, lapack_int lda, const
float *tau, float *work, lapack_int lwork)
lapack_int LAPACKE_dorghr_work (int matrix_layout, lapack_int n,
lapack_int ilo, lapack_int ihi, double *a, lapack_int lda, const
double *tau, double *work, lapack_int lwork)
orglq, orgql, orgqr — the triple threat, same shape, different letters:
lapack_int LAPACKE_sorglq_work (int matrix_layout, lapack_int m,
lapack_int n, lapack_int k, float *a, lapack_int lda, const float
*tau, float *work, lapack_int lwork)
lapack_int LAPACKE_dorglq_work (int matrix_layout, lapack_int m,
lapack_int n, lapack_int k, double *a, lapack_int lda, const double
*tau, double *work, lapack_int lwork)
lapack_int LAPACKE_sorgql_work (int matrix_layout, lapack_int m,
lapack_int n, lapack_int k, float *a, lapack_int lda, const float
*tau, float *work, lapack_int lwork)
lapack_int LAPACKE_dorgql_work (int matrix_layout, lapack_int m,
lapack_int n, lapack_int k, double *a, lapack_int lda, const double
*tau, double *work, lapack_int lwork)
lapack_int LAPACKE_sorgqr_work (int matrix_layout, lapack_int m,
lapack_int n, lapack_int k, float *a, lapack_int lda, const float
*tau, float *work, lapack_int lwork)
lapack_int LAPACKE_dorgqr_work (int matrix_layout, lapack_int m,
lapack_int n, lapack_int k, double *a, lapack_int lda, const double
*tau, double *work, lapack_int lwork)
okay that's this chunk, we're literally still going, don't touch that dial 💖
okay so we are still in the prototype section and honestly bestie, it's giving "the compiler's group chat". every single one of these is a _work variant, which means you're driving stick: you hand over the scratch space, you own the consequences 💅
first up, the org girlies — they take your tau and give you back the goods, with m, n, k along for the ride:
lapack_int LAPACKE_sorgrq_work (int matrix_layout, lapack_int m,
lapack_int n, lapack_int k, float *a, lapack_int lda, const float
*tau, float *work, lapack_int lwork)
lapack_int LAPACKE_dorgrq_work (int matrix_layout, lapack_int m,
lapack_int n, lapack_int k, double *a, lapack_int lda, const double
*tau, double *work, lapack_int lwork)
lapack_int LAPACKE_sorgtr_work (int matrix_layout, char uplo, lapack_int
n, float *a, lapack_int lda, const float *tau, float *work,
lapack_int lwork)
lapack_int LAPACKE_dorgtr_work (int matrix_layout, char uplo, lapack_int
n, double *a, lapack_int lda, const double *tau, double *work,
lapack_int lwork)
see how orgtr swapped m/k for uplo? she's a triangle girlie, she doesn't need the whole grid ✨
then the orm squad rolls in — same energy but they're multiplicating into a c matrix and taking side/trans attitude along the way. ormbr is the one with BOTH vect and side, main character behaviour fr fr 👑
lapack_int LAPACKE_sormbr_work (int matrix_layout, char vect, char side,
char trans, lapack_int m, lapack_int n, lapack_int k, const float
*a, lapack_int lda, const float *tau, float *c, lapack_int ldc,
float *work, lapack_int lwork)
lapack_int LAPACKE_dormbr_work (int matrix_layout, char vect, char side,
char trans, lapack_int m, lapack_int n, lapack_int k, const double
*a, lapack_int lda, const double *tau, double *c, lapack_int ldc,
double *work, lapack_int lwork)
lapack_int LAPACKE_sormhr_work (int matrix_layout, char side, char
trans, lapack_int m, lapack_int n, lapack_int ilo, lapack_int ihi,
const float *a, lapack_int lda, const float *tau, float *c,
lapack_int ldc, float *work, lapack_int lwork)
lapack_int LAPACKE_dormhr_work (int matrix_layout, char side, char
trans, lapack_int m, lapack_int n, lapack_int ilo, lapack_int ihi,
const double *a, lapack_int lda, const double *tau, double *c,
lapack_int ldc, double *work, lapack_int lwork)
ilo/ihi in ormhr? yeah she's the holdout — she only works on the range you point at, no cap 🎯
and here's the lq/ql/qr trio, they're basically triplets separated at birth 🌸
lapack_int LAPACKE_sormlq_work (int matrix_layout, char side, char
trans, lapack_int m, lapack_int n, lapack_int k, const float *a,
lapack_int lda, const float *tau, float *c, lapack_int ldc, float
*work, lapack_int lwork)
lapack_int LAPACKE_dormlq_work (int matrix_layout, char side, char
trans, lapack_int m, lapack_int n, lapack_int k, const double *a,
lapack_int lda, const double *tau, double *c, lapack_int ldc, double
*work, lapack_int lwork)
lapack_int LAPACKE_sormql_work (int matrix_layout, char side, char
trans, lapack_int m, lapack_int n, lapack_int k, const float *a,
lapack_int lda, const float *tau, float *c, lapack_int ldc, float
*work, lapack_int lwork)
lapack_int LAPACKE_dormql_work (int matrix_layout, char side, char
trans, lapack_int m, lapack_int n, lapack_int k, const double *a,
lapack_int lda, const double *tau, double *c, lapack_int ldc, double
*work, lapack_int lwork)
lapack_int LAPACKE_sormqr_work (int matrix_layout, char side, char
trans, lapack_int m, lapack_int n, lapack_int k, const float *a,
lapack_int lda, const float *tau, float *c, lapack_int ldc, float
*work, lapack_int lwork)
lapack_int LAPACKE_dormqr_work (int matrix_layout, char side, char
trans, lapack_int m, lapack_int n, lapack_int k, const double *a,
lapack_int lda, const double *tau, double *c, lapack_int ldc, double
*work, lapack_int lwork)
lapack_int LAPACKE_sormrq_work (int matrix_layout, char side, char
trans, lapack_int m, lapack_int n, lapack_int k, const float *a,
lapack_int lda, const float *tau, float *c, lapack_int ldc, float
*work, lapack_int lwork)
lapack_int LAPACKE_dormrq_work (int matrix_layout, char side, char
trans, lapack_int m, lapack_int n, lapack_int k, const double *a,
lapack_int lda, const double *tau, double *c, lapack_int ldc, double
*work, lapack_int lwork)
and then ormrz shows up with an extra lapack_int l because she simply has more going on than everyone else 💀 notice she's built different — one more argument than her sisters, and that's iconic:
lapack_int LAPACKE_sormrz_work (int matrix_layout, char side, char
trans, lapack_int m, lapack_int n, lapack_int k, lapack_int l, const
float *a, lapack_int lda, const float *tau, float *c, lapack_int
ldc, float *work, lapack_int lwork)
lapack_int LAPACKE_dormrz_work (int matrix_layout, char side, char
trans, lapack_int m, lapack_int n, lapack_int k, lapack_int l, const
double *a, lapack_int lda, const double *tau, double *c, lapack_int
ldc, double *work, lapack_int lwork)
last of the orm fam — ormtr, the triangle one. she takes uplo instead of all those m/k numbers, so if you see uplo in an orm call you already know 🦋
lapack_int LAPACKE_sormtr_work (int matrix_layout, char side, char uplo,
char trans, lapack_int m, lapack_int n, const float *a, lapack_int
lda, const float *tau, float *c, lapack_int ldc, float *work,
lapack_int lwork)
lapack_int LAPACKE_dormtr_work (int matrix_layout, char side, char uplo,
char trans, lapack_int m, lapack_int n, const double *a, lapack_int
lda, const double *tau, double *c, lapack_int ldc, double *work,
lapack_int lwork)
okay NEW FAMILY, we love a clean break. the pb crew — banded symmetric positive-definite everything. four of them per function because of course: s = float, d = double, and then c/z go full complex with lapack_complex_float / lapack_complex_double AND they ditch iwork for rwork. the way the complex girlies need their own real workspace… we respect it 🫶
pbcon — condition number vibes, note the anorm going in and rcond coming out, and the iwork on the real ones:
lapack_int LAPACKE_spbcon_work (int matrix_layout, char uplo, lapack_int
n, lapack_int kd, const float *ab, lapack_int ldab, float anorm,
float *rcond, float *work, lapack_int *iwork)
lapack_int LAPACKE_dpbcon_work (int matrix_layout, char uplo, lapack_int
n, lapack_int kd, const double *ab, lapack_int ldab, double anorm,
double *rcond, double *work, lapack_int *iwork)
lapack_int LAPACKE_cpbcon_work (int matrix_layout, char uplo, lapack_int
n, lapack_int kd, const lapack_complex_float *ab, lapack_int ldab,
float anorm, float *rcond, lapack_complex_float *work, float *rwork)
lapack_int LAPACKE_zpbcon_work (int matrix_layout, char uplo, lapack_int
n, lapack_int kd, const lapack_complex_double *ab, lapack_int ldab,
double anorm, double *rcond, lapack_complex_double *work, double
*rwork)
pbequ — the equilibration cutie. s, scond, amax out the door, no workspace at all, she travels light ✨
lapack_int LAPACKE_spbequ_work (int matrix_layout, char uplo, lapack_int
n, lapack_int kd, const float *ab, lapack_int ldab, float *s, float
*scond, float *amax)
lapack_int LAPACKE_dpbequ_work (int matrix_layout, char uplo, lapack_int
n, lapack_int kd, const double *ab, lapack_int ldab, double *s,
double *scond, double *amax)
lapack_int LAPACKE_cpbequ_work (int matrix_layout, char uplo, lapack_int
n, lapack_int kd, const lapack_complex_float *ab, lapack_int ldab,
float *s, float *scond, float *amax)
lapack_int LAPACKE_zpbequ_work (int matrix_layout, char uplo, lapack_int
n, lapack_int kd, const lapack_complex_double *ab, lapack_int ldab,
double *s, double *scond, double *amax)
pbrfs — refinement hours, she wants the ORIGINAL ab AND the FACTORED afb, plus b/x and the two error outputs ferr/berr. look at all those ld* values, she's thorough 💅
lapack_int LAPACKE_spbrfs_work (int matrix_layout, char uplo, lapack_int
n, lapack_int kd, lapack_int nrhs, const float *ab, lapack_int ldab,
const float *afb, lapack_int ldafb, const float *b, lapack_int ldb,
float *x, lapack_int ldx, float *ferr, float *berr, float *work,
lapack_int *iwork)
lapack_int LAPACKE_dpbrfs_work (int matrix_layout, char uplo, lapack_int
n, lapack_int kd, lapack_int nrhs, const double *ab, lapack_int
ldab, const double *afb, lapack_int ldafb, const double *b,
lapack_int ldb, double *x, lapack_int ldx, double *ferr, double
*berr, double *work, lapack_int *iwork)
lapack_int LAPACKE_cpbrfs_work (int matrix_layout, char uplo, lapack_int
n, lapack_int kd, lapack_int nrhs, const lapack_complex_float *ab,
lapack_int ldab, const lapack_complex_float *afb, lapack_int ldafb,
const lapack_complex_float *b, lapack_int ldb, lapack_complex_float
*x, lapack_int ldx, float *ferr, float *berr, lapack_complex_float
*work, float *rwork)
lapack_int LAPACKE_zpbrfs_work (int matrix_layout, char uplo, lapack_int
n, lapack_int kd, lapack_int nrhs, const lapack_complex_double *ab,
lapack_int ldab, const lapack_complex_double *afb, lapack_int ldafb,
const lapack_complex_double *b, lapack_int ldb,
lapack_complex_double *x, lapack_int ldx, double *ferr, double
*berr, lapack_complex_double *work, double *rwork)
pbstf — tiny queen, literally the shortest signature here. no workspace, no work/lwork, just uplo, n, kb, bb, ldbb. she said "I don't need an entourage" 🎀
lapack_int LAPACKE_spbstf_work (int matrix_layout, char uplo, lapack_int
n, lapack_int kb, float *bb, lapack_int ldbb)
lapack_int LAPACKE_dpbstf_work (int matrix_layout, char uplo, lapack_int
n, lapack_int kb, double *bb, lapack_int ldbb)
lapack_int LAPACKE_cpbstf_work (int matrix_layout, char uplo, lapack_int
n, lapack_int kb, lapack_complex_float *bb, lapack_int ldbb)
lapack_int LAPACKE_zpbstf_work (int matrix_layout, char uplo, lapack_int
n, lapack_int kb, lapack_complex_double *bb, lapack_int ldbb)
pbsv — the straight-up solver, also short and sweet. ab + b in, and yes both are non-const because she's writing back into them, no shame 🙈
lapack_int LAPACKE_spbsv_work (int matrix_layout, char uplo, lapack_int
n, lapack_int kd, lapack_int nrhs, float *ab, lapack_int ldab, float
*b, lapack_int ldb)
lapack_int LAPACKE_dpbsv_work (int matrix_layout, char uplo, lapack_int
n, lapack_int kd, lapack_int nrhs, double *ab, lapack_int ldab,
double *b, lapack_int ldb)
lapack_int LAPACKE_cpbsv_work (int matrix_layout, char uplo, lapack_int
n, lapack_int kd, lapack_int nrhs, lapack_complex_float *ab,
lapack_int ldab, lapack_complex_float *b, lapack_int ldb)
lapack_int LAPACKE_zpbsv_work (int matrix_layout, char uplo, lapack_int
n, lapack_int kd, lapack_int nrhs, lapack_complex_double *ab,
lapack_int ldab, lapack_complex_double *b, lapack_int ldb)
pbsvx — the deluxe edition, the one that says "expert" in the name and means it. fact, equed, s, rcond, ferr, berr, two workspaces… she has a whole beauty routine and you're gonna sit there and let her cook 👑
lapack_int LAPACKE_spbsvx_work (int matrix_layout, char fact, char uplo,
lapack_int n, lapack_int kd, lapack_int nrhs, float *ab, lapack_int
ldab, float *afb, lapack_int ldafb, char *equed, float *s, float *b,
lapack_int ldb, float *x, lapack_int ldx, float *rcond, float *ferr,
float *berr, float *work, lapack_int *iwork)
lapack_int LAPACKE_dpbsvx_work (int matrix_layout, char fact, char uplo,
lapack_int n, lapack_int kd, lapack_int nrhs, double *ab, lapack_int
ldab, double *afb, lapack_int ldafb, char *equed, double *s, double
*b, lapack_int ldb, double *x, lapack_int ldx, double *rcond, double
*ferr, double *berr, double *work, lapack_int *iwork)
lapack_int LAPACKE_cpbsvx_work (int matrix_layout, char fact, char uplo,
lapack_int n, lapack_int kd, lapack_int nrhs, lapack_complex_float
*ab, lapack_int ldab, lapack_complex_float *afb, lapack_int ldafb,
char *equed, float *s, lapack_complex_float *b, lapack_int ldb,
lapack_complex_float *x, lapack_int ldx, float *rcond, float *ferr,
float *berr, lapack_complex_float *work, float *rwork)
lapack_int LAPACKE_zpbsvx_work (int matrix_layout, char fact, char uplo,
lapack_int n, lapack_int kd, lapack_int nrhs, lapack_complex_double
*ab, lapack_int ldab, lapack_complex_double *afb, lapack_int ldafb,
char *equed, double *s, lapack_complex_double *b, lapack_int ldb,
lapack_complex_double *x, lapack_int ldx, double *rcond, double
*ferr, double *berr, lapack_complex_double *work, double *rwork)
and finally (for this part anyway 😌) pbtrf — the factorization core, minimal, no workspace params, just uplo, n, kd, ab, ldab. she's the reason the rest of them can even function, lowkey the backbone of the whole pb friend group:
lapack_int LAPACKE_spbtrf_work (int matrix_layout, char uplo, lapack_int
n, lapack_int kd, float *ab, lapack_int ldab)
lapack_int LAPACKE_dpbtrf_work (int matrix_layout, char uplo, lapack_int
n, lapack_int kd, double *ab, lapack_int ldab)
lapack_int LAPACKE_cpbtrf_work (int matrix_layout, char uplo, lapack_int
n, lapack_int kd, lapack_complex_float *ab, lapack_int ldab)
lapack_int LAPACKE_zpbtrf_work (int matrix_layout, char uplo, lapack_int
...and we're picking up mid-signature, because of course we are 💀 the tail end of that last one is literally:
n, lapack_int kd, lapack_complex_double *ab, lapack_int ldab)
cool cool cool, moving on 🫶
🦋 the pbtrs girlies (banded, positive definite, and ready to solve)
Same argument shape for all four, only the element type switches up — ab/ldab for the banded storage, b/ldb for the right-hand side, uplo to pick your triangle, n and kd doing their thing:
lapack_int LAPACKE_spbtrs_work (int matrix_layout, char uplo, lapack_int
n, lapack_int kd, lapack_int nrhs, const float *ab, lapack_int ldab,
float *b, lapack_int ldb)
lapack_int LAPACKE_dpbtrs_work (int matrix_layout, char uplo, lapack_int
n, lapack_int kd, lapack_int nrhs, const double *ab, lapack_int
ldab, double *b, lapack_int ldb)
lapack_int LAPACKE_cpbtrs_work (int matrix_layout, char uplo, lapack_int
n, lapack_int kd, lapack_int nrhs, const lapack_complex_float *ab,
lapack_int ldab, lapack_complex_float *b, lapack_int ldb)
lapack_int LAPACKE_zpbtrs_work (int matrix_layout, char uplo, lapack_int
n, lapack_int kd, lapack_int nrhs, const lapack_complex_double *ab,
lapack_int ldab, lapack_complex_double *b, lapack_int ldb)
🎀 the pftrf era — packed, transposed-or-not, iconic
notice how a is not const here? that's because these babies write back into it, no cap ✨ and you get transr plus uplo, two chars of pure chaos:
lapack_int LAPACKE_spftrf_work (int matrix_layout, char transr, char
uplo, lapack_int n, float *a)
lapack_int LAPACKE_dpftrf_work (int matrix_layout, char transr, char
uplo, lapack_int n, double *a)
lapack_int LAPACKE_cpftrf_work (int matrix_layout, char transr, char
uplo, lapack_int n, lapack_complex_float *a)
lapack_int LAPACKE_zpftrf_work (int matrix_layout, char transr, char
uplo, lapack_int n, lapack_complex_double *a)
🧚 the pftri squad — literally the same list of args, different name
fr fr identical argument list to the pftrf crew above, only the function name changed. keep the receipts:
lapack_int LAPACKE_spftri_work (int matrix_layout, char transr, char
uplo, lapack_int n, float *a)
lapack_int LAPACKE_dpftri_work (int matrix_layout, char transr, char
uplo, lapack_int n, double *a)
lapack_int LAPACKE_cpftri_work (int matrix_layout, char transr, char
uplo, lapack_int n, lapack_complex_float *a)
lapack_int LAPACKE_zpftri_work (int matrix_layout, char transr, char
uplo, lapack_int n, lapack_complex_double *a)
💜 pftrs — now with a right-hand side bestie
transr, uplo, n, nrhs, const a, b, ldb. that's the whole vibe:
lapack_int LAPACKE_spftrs_work (int matrix_layout, char transr, char
uplo, lapack_int n, lapack_int nrhs, const float *a, float *b,
lapack_int ldb)
lapack_int LAPACKE_dpftrs_work (int matrix_layout, char transr, char
uplo, lapack_int n, lapack_int nrhs, const double *a, double *b,
lapack_int ldb)
lapack_int LAPACKE_cpftrs_work (int matrix_layout, char transr, char
uplo, lapack_int n, lapack_int nrhs, const lapack_complex_float *a,
lapack_complex_float *b, lapack_int ldb)
lapack_int LAPACKE_zpftrs_work (int matrix_layout, char transr, char
uplo, lapack_int n, lapack_int nrhs, const lapack_complex_double *a,
lapack_complex_double *b, lapack_int ldb)
🌸 pocon — condition number hours 👑
okay so anorm in, rcond out, and look — work and iwork at the end, except for the complex ones where it's work (complex) + rwork (real). the way the real/complex split switches up the trailing args is such a mood:
lapack_int LAPACKE_spocon_work (int matrix_layout, char uplo, lapack_int
n, const float *a, lapack_int lda, float anorm, float *rcond, float
*work, lapack_int *iwork)
lapack_int LAPACKE_dpocon_work (int matrix_layout, char uplo, lapack_int
n, const double *a, lapack_int lda, double anorm, double *rcond,
double *work, lapack_int *iwork)
lapack_int LAPACKE_cpocon_work (int matrix_layout, char uplo, lapack_int
n, const lapack_complex_float *a, lapack_int lda, float anorm, float
*rcond, lapack_complex_float *work, float *rwork)
lapack_int LAPACKE_zpocon_work (int matrix_layout, char uplo, lapack_int
n, const lapack_complex_double *a, lapack_int lda, double anorm,
double *rcond, lapack_complex_double *work, double *rwork)
⭐ poequ / poequb — the equilibration twins
no uplo here, bestie, we're not doing triangles today 🙈 just n, a, lda, then the triple threat s, scond, amax:
lapack_int LAPACKE_spoequ_work (int matrix_layout, lapack_int n, const
float *a, lapack_int lda, float *s, float *scond, float *amax)
lapack_int LAPACKE_dpoequ_work (int matrix_layout, lapack_int n, const
double *a, lapack_int lda, double *s, double *scond, double *amax)
lapack_int LAPACKE_cpoequ_work (int matrix_layout, lapack_int n, const
lapack_complex_float *a, lapack_int lda, float *s, float *scond,
float *amax)
lapack_int LAPACKE_zpoequ_work (int matrix_layout, lapack_int n, const
lapack_complex_double *a, lapack_int lda, double *s, double *scond,
double *amax)
lapack_int LAPACKE_spoequb_work (int matrix_layout, lapack_int n, const
float *a, lapack_int lda, float *s, float *scond, float *amax)
lapack_int LAPACKE_dpoequb_work (int matrix_layout, lapack_int n, const
double *a, lapack_int lda, double *s, double *scond, double *amax)
lapack_int LAPACKE_cpoequb_work (int matrix_layout, lapack_int n, const
lapack_complex_float *a, lapack_int lda, float *s, float *scond,
float *amax)
lapack_int LAPACKE_zpoequb_work (int matrix_layout, lapack_int n, const
lapack_complex_double *a, lapack_int lda, double *s, double *scond,
double *amax)
yes the ...b versions are byte-for-byte the same arg list as their non-b siblings, that's not a typo, that's just how she is 💅
🔥 porfs — the refined-solve fam
okok this is the big arg list and I need you to breathe. you got two matrices here: a/lda and af/ldaf. then b/ldb going in, x/ldx coming out, ferr + berr for the error estimates, and then work / iwork (or work / rwork if you're complex). slay:
lapack_int LAPACKE_sporfs_work (int matrix_layout, char uplo, lapack_int
n, lapack_int nrhs, const float *a, lapack_int lda, const float *af,
lapack_int ldaf, const float *b, lapack_int ldb, float *x,
lapack_int ldx, float *ferr, float *berr, float *work, lapack_int
*iwork)
lapack_int LAPACKE_dporfs_work (int matrix_layout, char uplo, lapack_int
n, lapack_int nrhs, const double *a, lapack_int lda, const double
*af, lapack_int ldaf, const double *b, lapack_int ldb, double *x,
lapack_int ldx, double *ferr, double *berr, double *work, lapack_int
*iwork)
lapack_int LAPACKE_cporfs_work (int matrix_layout, char uplo, lapack_int
n, lapack_int nrhs, const lapack_complex_float *a, lapack_int lda,
const lapack_complex_float *af, lapack_int ldaf, const
lapack_complex_float *b, lapack_int ldb, lapack_complex_float *x,
lapack_int ldx, float *ferr, float *berr, lapack_complex_float
*work, float *rwork)
lapack_int LAPACKE_zporfs_work (int matrix_layout, char uplo, lapack_int
n, lapack_int nrhs, const lapack_complex_double *a, lapack_int lda,
const lapack_complex_double *af, lapack_int ldaf, const
lapack_complex_double *b, lapack_int ldb, lapack_complex_double *x,
lapack_int ldx, double *ferr, double *berr, lapack_complex_double
*work, double *rwork)
🌈 porfsx — extreme mode, buckle up
same as above but now with equed, s, rcond, n_err_bnds, err_bnds_norm, err_bnds_comp, nparams, params… it's giving main character energy with a 20-argument resume. note berr stays real (float/double) even in the complex versions, and s goes real there too:
lapack_int LAPACKE_sporfsx_work (int matrix_layout, char uplo, char
equed, lapack_int n, lapack_int nrhs, const float *a, lapack_int
lda, const float *af, lapack_int ldaf, const float *s, const float
*b, lapack_int ldb, float *x, lapack_int ldx, float *rcond, float
*berr, lapack_int n_err_bnds, float *err_bnds_norm, float
*err_bnds_comp, lapack_int nparams, float *params, float *work,
lapack_int *iwork)
lapack_int LAPACKE_dporfsx_work (int matrix_layout, char uplo, char
equed, lapack_int n, lapack_int nrhs, const double *a, lapack_int
lda, const double *af, lapack_int ldaf, const double *s, const
double *b, lapack_int ldb, double *x, lapack_int ldx, double *rcond,
double *berr, lapack_int n_err_bnds, double *err_bnds_norm, double
*err_bnds_comp, lapack_int nparams, double *params, double *work,
lapack_int *iwork)
lapack_int LAPACKE_cporfsx_work (int matrix_layout, char uplo, char
equed, lapack_int n, lapack_int nrhs, const lapack_complex_float *a,
lapack_int lda, const lapack_complex_float *af, lapack_int ldaf,
const float *s, const lapack_complex_float *b, lapack_int ldb,
lapack_complex_float *x, lapack_int ldx, float *rcond, float *berr,
lapack_int n_err_bnds, float *err_bnds_norm, float *err_bnds_comp,
lapack_int nparams, float *params, lapack_complex_float *work, float
*rwork)
lapack_int LAPACKE_zporfsx_work (int matrix_layout, char uplo, char
equed, lapack_int n, lapack_int nrhs, const lapack_complex_double
*a, lapack_int lda, const lapack_complex_double *af, lapack_int
ldaf, const double *s, const lapack_complex_double *b, lapack_int
ldb, lapack_complex_double *x, lapack_int ldx, double *rcond, double
*berr, lapack_int n_err_bnds, double *err_bnds_norm, double
*err_bnds_comp, lapack_int nparams, double *params,
lapack_complex_double *work, double *rwork)
🍓 posv — short and sweet, obsessed
four args, four types, no const on a because she's getting factored in place, periodt:
lapack_int LAPACKE_sposv_work (int matrix_layout, char uplo, lapack_int
n, lapack_int nrhs, float *a, lapack_int lda, float *b, lapack_int
ldb)
lapack_int LAPACKE_dposv_work (int matrix_layout, char uplo, lapack_int
n, lapack_int nrhs, double *a, lapack_int lda, double *b, lapack_int
ldb)
lapack_int LAPACKE_cposv_work (int matrix_layout, char uplo, lapack_int
n, lapack_int nrhs, lapack_complex_float *a, lapack_int lda,
lapack_complex_float *b, lapack_int ldb)
lapack_int LAPACKE_zposv_work (int matrix_layout, char uplo, lapack_int
n, lapack_int nrhs, lapack_complex_double *a, lapack_int lda,
lapack_complex_double *b, lapack_int ldb)
also — notice there's no sposv/cposv in this batch, only dsposv and zcposv below. don't come for me, I'm just reading the list 💀
💀 dsposv / zcposv — the mixed-precision duo
these two are their own whole thing: extra x/ldx output, work, a real swork (float* for the double one, lapack_complex_float* for the complex-double one), rwork for zcposv, and iter at the very end. iykyk:
lapack_int LAPACKE_dsposv_work (int matrix_layout, char uplo, lapack_int
n, lapack_int nrhs, double *a, lapack_int lda, double *b, lapack_int
ldb, double *x, lapack_int ldx, double *work, float *swork,
lapack_int *iter)
lapack_int LAPACKE_zcposv_work (int matrix_layout, char uplo, lapack_int
n, lapack_int nrhs, lapack_complex_double *a, lapack_int lda,
lapack_complex_double *b, lapack_int ldb, lapack_complex_double *x,
lapack_int ldx, lapack_complex_double *work, lapack_complex_float
*swork, double *rwork, lapack_int *iter)
🎀 posvx — expert driver, fact-checked
now we've got fact and uplo up front, af/ldaf, a char *equed (a pointer, because she writes the equilibrated char back at you 👀), s, then the usual b→x glow-up plus rcond, ferr, berr, work, iwork/rwork:
lapack_int LAPACKE_sposvx_work (int matrix_layout, char fact, char uplo,
lapack_int n, lapack_int nrhs, float *a, lapack_int lda, float *af,
lapack_int ldaf, char *equed, float *s, float *b, lapack_int ldb,
float *x, lapack_int ldx, float *rcond, float *ferr, float *berr,
float *work, lapack_int *iwork)
lapack_int LAPACKE_dposvx_work (int matrix_layout, char fact, char uplo,
lapack_int n, lapack_int nrhs, double *a, lapack_int lda, double
*af, lapack_int ldaf, char *equed, double *s, double *b, lapack_int
ldb, double *x, lapack_int ldx, double *rcond, double *ferr, double
*berr, double *work, lapack_int *iwork)
lapack_int LAPACKE_cposvx_work (int matrix_layout, char fact, char uplo,
lapack_int n, lapack_int nrhs, lapack_complex_float *a, lapack_int
lda, lapack_complex_float *af, lapack_int ldaf, char *equed, float
*s, lapack_complex_float *b, lapack_int ldb, lapack_complex_float
*x, lapack_int ldx, float *rcond, float *ferr, float *berr,
lapack_complex_float *work, float *rwork)
lapack_int LAPACKE_zposvx_work (int matrix_layout, char fact, char uplo,
lapack_int n, lapack_int nrhs, lapack_complex_double *a, lapack_int
lda, lapack_complex_double *af, lapack_int ldaf, char *equed, double
*s, lapack_complex_double *b, lapack_int ldb, lapack_complex_double
*x, lapack_int ldx, double *rcond, double *ferr, double *berr,
lapack_complex_double *work, double *rwork)
👑 posvxx — the final boss of this chunk
posvx but extra: rpvgrw snuck in right after rcond, and then n_err_bnds, err_bnds_norm, err_bnds_comp, nparams, params before work and iwork. she ate and left no crumbs:
lapack_int LAPACKE_sposvxx_work (int matrix_layout, char fact, char
uplo, lapack_int n, lapack_int nrhs, float *a, lapack_int lda, float
*af, lapack_int ldaf, char *equed, float *s, float *b, lapack_int
ldb, float *x, lapack_int ldx, float *rcond, float *rpvgrw, float
*berr, lapack_int n_err_bnds, float *err_bnds_norm, float
*err_bnds_comp, lapack_int nparams, float *params, float *work,
lapack_int *iwork)
and that's where this part cuts off — mid-family, naturally 😭 more incoming, don't go anywhere 🫶✨
okay so we are still in SYNOPSIS and the _work girlies have officially entered the chat 💅 every single prototype in this batch ends in _work, and like — the work pointer is literally right there in the signature, she's not hiding 🫶 also a lil decoder ring for the letter prefixes, since they're all visible in the types: s = float, d = double, c = lapack_complex_float, z = lapack_complex_double. iconic, consistent, no notes ✨
🌸 the posvxx crew
okay so first up, three of these: d, c, and z. notice what's not here — there's no s version in this batch, so don't come for me, I'm just reading the list 💀
look at this cast though: fact, equed, rpvgrw, and the error-bounds trio n_err_bnds, err_bnds_norm, err_bnds_comp. it's giving full main-character ensemble fr fr 👑
lapack_int LAPACKE_dposvxx_work (int matrix_layout, char fact, char
uplo, lapack_int n, lapack_int nrhs, double *a, lapack_int lda,
double *af, lapack_int ldaf, char *equed, double *s, double *b,
lapack_int ldb, double *x, lapack_int ldx, double *rcond, double
*rpvgrw, double *berr, lapack_int n_err_bnds, double *err_bnds_norm,
double *err_bnds_comp, lapack_int nparams, double *params, double
*work, lapack_int *iwork)
lapack_int LAPACKE_cposvxx_work (int matrix_layout, char fact, char
uplo, lapack_int n, lapack_int nrhs, lapack_complex_float *a,
lapack_int lda, lapack_complex_float *af, lapack_int ldaf, char
*equed, float *s, lapack_complex_float *b, lapack_int ldb,
lapack_complex_float *x, lapack_int ldx, float *rcond, float
*rpvgrw, float *berr, lapack_int n_err_bnds, float *err_bnds_norm,
float *err_bnds_comp, lapack_int nparams, float *params,
lapack_complex_float *work, float *rwork)
lapack_int LAPACKE_zposvxx_work (int matrix_layout, char fact, char
uplo, lapack_int n, lapack_int nrhs, lapack_complex_double *a,
lapack_int lda, lapack_complex_double *af, lapack_int ldaf, char
*equed, double *s, lapack_complex_double *b, lapack_int ldb,
lapack_complex_double *x, lapack_int ldx, double *rcond, double
*rpvgrw, double *berr, lapack_int n_err_bnds, double *err_bnds_norm,
double *err_bnds_comp, lapack_int nparams, double *params,
lapack_complex_double *work, double *rwork)
see how the complex girlies swap iwork for rwork at the end? highkey obsessed with the consistency 😌
🎀 potrf2 — the sequel (literally)
the 2 is part of the name, bestie, not a typo. these four are the shortest glow-ups in the whole batch and I respect the minimalism ✨
lapack_int LAPACKE_spotrf2_work (int matrix_layout, char uplo,
lapack_int n, float *a, lapack_int lda)
lapack_int LAPACKE_dpotrf2_work (int matrix_layout, char uplo,
lapack_int n, double *a, lapack_int lda)
lapack_int LAPACKE_cpotrf2_work (int matrix_layout, char uplo,
lapack_int n, lapack_complex_float *a, lapack_int lda)
lapack_int LAPACKE_zpotrf2_work (int matrix_layout, char uplo,
lapack_int n, lapack_complex_double *a, lapack_int lda)
like, five arguments and a dream. we love a low-effort icon 💅
🦋 potrf — the original recipe
same vibe, no 2, still serving:
lapack_int LAPACKE_spotrf_work (int matrix_layout, char uplo, lapack_int
n, float *a, lapack_int lda)
lapack_int LAPACKE_dpotrf_work (int matrix_layout, char uplo, lapack_int
n, double *a, lapack_int lda)
lapack_int LAPACKE_cpotrf_work (int matrix_layout, char uplo, lapack_int
n, lapack_complex_float *a, lapack_int lda)
lapack_int LAPACKE_zpotrf_work (int matrix_layout, char uplo, lapack_int
n, lapack_complex_double *a, lapack_int lda)
same uplo, same n, same a, same lda. she's consistent, she's reliable, she's the friend who always texts back 🌸
💜 potri — the inverse girlies
lapack_int LAPACKE_spotri_work (int matrix_layout, char uplo, lapack_int
n, float *a, lapack_int lda)
lapack_int LAPACKE_dpotri_work (int matrix_layout, char uplo, lapack_int
n, double *a, lapack_int lda)
lapack_int LAPACKE_cpotri_work (int matrix_layout, char uplo, lapack_int
n, lapack_complex_float *a, lapack_int lda)
lapack_int LAPACKE_zpotri_work (int matrix_layout, char uplo, lapack_int
n, lapack_complex_double *a, lapack_int lda)
identical shape to potrf, which honestly? ate. no crumbs 🔥
🌈 potrs — and now she's got nrhs
ooh she brought a friend: nrhs. and both a pointers are const now, which is the code way of saying "hands off, don't touch" 🙈
lapack_int LAPACKE_spotrs_work (int matrix_layout, char uplo, lapack_int
n, lapack_int nrhs, const float *a, lapack_int lda, float *b,
lapack_int ldb)
lapack_int LAPACKE_dpotrs_work (int matrix_layout, char uplo, lapack_int
n, lapack_int nrhs, const double *a, lapack_int lda, double *b,
lapack_int ldb)
lapack_int LAPACKE_cpotrs_work (int matrix_layout, char uplo, lapack_int
n, lapack_int nrhs, const lapack_complex_float *a, lapack_int lda,
lapack_complex_float *b, lapack_int ldb)
lapack_int LAPACKE_zpotrs_work (int matrix_layout, char uplo, lapack_int
n, lapack_int nrhs, const lapack_complex_double *a, lapack_int lda,
lapack_complex_double *b, lapack_int ldb)
🍓 ppcon — packed, with an anorm
lapack_int LAPACKE_sppcon_work (int matrix_layout, char uplo, lapack_int
n, const float *ap, float anorm, float *rcond, float *work,
lapack_int *iwork)
lapack_int LAPACKE_dppcon_work (int matrix_layout, char uplo, lapack_int
n, const double *ap, double anorm, double *rcond, double *work,
lapack_int *iwork)
lapack_int LAPACKE_cppcon_work (int matrix_layout, char uplo, lapack_int
n, const lapack_complex_float *ap, float anorm, float *rcond,
lapack_complex_float *work, float *rwork)
lapack_int LAPACKE_zppcon_work (int matrix_layout, char uplo, lapack_int
n, const lapack_complex_double *ap, double anorm, double *rcond,
lapack_complex_double *work, double *rwork)
note the packed ap is const in all four, and the real girlies get iwork while the complex girlies get rwork. matching sets, we love to see it 🎀
🧚 ppequ — no work array, she travels light
look at that — s, scond, amax, and not a single scratch pointer in sight. unbothered, moisturized, in her lane ✨
lapack_int LAPACKE_sppequ_work (int matrix_layout, char uplo, lapack_int
n, const float *ap, float *s, float *scond, float *amax)
lapack_int LAPACKE_dppequ_work (int matrix_layout, char uplo, lapack_int
n, const double *ap, double *s, double *scond, double *amax)
lapack_int LAPACKE_cppequ_work (int matrix_layout, char uplo, lapack_int
n, const lapack_complex_float *ap, float *s, float *scond, float
*amax)
lapack_int LAPACKE_zppequ_work (int matrix_layout, char uplo, lapack_int
n, const lapack_complex_double *ap, double *s, double *scond, double
*amax)
🫶 pprfs — the one with the most letters
okay this one is packed (pun fully intended, I'm so sorry 😭): she's got ap, afp, b, x, ferr, berr, plus work and iwork/rwork. a whole group chat in one signature.
lapack_int LAPACKE_spprfs_work (int matrix_layout, char uplo, lapack_int
n, lapack_int nrhs, const float *ap, const float *afp, const float
*b, lapack_int ldb, float *x, lapack_int ldx, float *ferr, float
*berr, float *work, lapack_int *iwork)
lapack_int LAPACKE_dpprfs_work (int matrix_layout, char uplo, lapack_int
n, lapack_int nrhs, const double *ap, const double *afp, const
double *b, lapack_int ldb, double *x, lapack_int ldx, double *ferr,
double *berr, double *work, lapack_int *iwork)
lapack_int LAPACKE_cpprfs_work (int matrix_layout, char uplo, lapack_int
n, lapack_int nrhs, const lapack_complex_float *ap, const
lapack_complex_float *afp, const lapack_complex_float *b, lapack_int
ldb, lapack_complex_float *x, lapack_int ldx, float *ferr, float
*berr, lapack_complex_float *work, float *rwork)
lapack_int LAPACKE_zpprfs_work (int matrix_layout, char uplo, lapack_int
n, lapack_int nrhs, const lapack_complex_double *ap, const
lapack_complex_double *afp, const lapack_complex_double *b,
lapack_int ldb, lapack_complex_double *x, lapack_int ldx, double
*ferr, double *berr, lapack_complex_double *work, double *rwork)
three const pointers in a row. she said "read-only era" 💀
👑 ppsv — simple, chic, no notes
ap, b, ldb. that's it. that's the whole function. minimalism is a lifestyle 🌿
lapack_int LAPACKE_sppsv_work (int matrix_layout, char uplo, lapack_int
n, lapack_int nrhs, float *ap, float *b, lapack_int ldb)
lapack_int LAPACKE_dppsv_work (int matrix_layout, char uplo, lapack_int
n, lapack_int nrhs, double *ap, double *b, lapack_int ldb)
lapack_int LAPACKE_cppsv_work (int matrix_layout, char uplo, lapack_int
n, lapack_int nrhs, lapack_complex_float *ap, lapack_complex_float
*b, lapack_int ldb)
lapack_int LAPACKE_zppsv_work (int matrix_layout, char uplo, lapack_int
n, lapack_int nrhs, lapack_complex_double *ap, lapack_complex_double
*b, lapack_int ldb)
notice: no const here, unlike pprfs. the girlies are mutating 😳
💖 ppsvx — she's the whole package
fact, equed, rcond, ferr, berr — she really said "I'll do it all myself" and honestly? queen behavior 👑
lapack_int LAPACKE_sppsvx_work (int matrix_layout, char fact, char uplo,
lapack_int n, lapack_int nrhs, float *ap, float *afp, char *equed,
float *s, float *b, lapack_int ldb, float *x, lapack_int ldx, float
*rcond, float *ferr, float *berr, float *work, lapack_int *iwork)
lapack_int LAPACKE_dppsvx_work (int matrix_layout, char fact, char uplo,
lapack_int n, lapack_int nrhs, double *ap, double *afp, char *equed,
double *s, double *b, lapack_int ldb, double *x, lapack_int ldx,
double *rcond, double *ferr, double *berr, double *work, lapack_int
*iwork)
lapack_int LAPACKE_cppsvx_work (int matrix_layout, char fact, char uplo,
lapack_int n, lapack_int nrhs, lapack_complex_float *ap,
lapack_complex_float *afp, char *equed, float *s,
lapack_complex_float *b, lapack_int ldb, lapack_complex_float *x,
lapack_int ldx, float *rcond, float *ferr, float *berr,
lapack_complex_float *work, float *rwork)
lapack_int LAPACKE_zppsvx_work (int matrix_layout, char fact, char uplo,
lapack_int n, lapack_int nrhs, lapack_complex_double *ap,
lapack_complex_double *afp, char *equed, double *s,
lapack_complex_double *b, lapack_int ldb, lapack_complex_double *x,
lapack_int ldx, double *rcond, double *ferr, double *berr,
lapack_complex_double *work, double *rwork)
equed is a char * in every single one — she's a pointer, she's quirky, she stays 🌸
🔥 pptrf, pptri, pptrs — the packed trilogy
three little families back to back, all riding the packed ap train:
lapack_int LAPACKE_spptrf_work (int matrix_layout, char uplo, lapack_int
n, float *ap)
lapack_int LAPACKE_dpptrf_work (int matrix_layout, char uplo, lapack_int
n, double *ap)
lapack_int LAPACKE_cpptrf_work (int matrix_layout, char uplo, lapack_int
n, lapack_complex_float *ap)
lapack_int LAPACKE_zpptrf_work (int matrix_layout, char uplo, lapack_int
n, lapack_complex_double *ap)
lapack_int LAPACKE_spptri_work (int matrix_layout, char uplo, lapack_int
n, float *ap)
lapack_int LAPACKE_dpptri_work (int matrix_layout, char uplo, lapack_int
n, double *ap)
lapack_int LAPACKE_cpptri_work (int matrix_layout, char uplo, lapack_int
n, lapack_complex_float *ap)
lapack_int LAPACKE_zpptri_work (int matrix_layout, char uplo, lapack_int
n, lapack_complex_double *ap)
lapack_int LAPACKE_spptrs_work (int matrix_layout, char uplo, lapack_int
n, lapack_int nrhs, const float *ap, float *b, lapack_int ldb)
lapack_int LAPACKE_dpptrs_work (int matrix_layout, char uplo, lapack_int
n, lapack_int nrhs, const double *ap, double *b, lapack_int ldb)
lapack_int LAPACKE_cpptrs_work (int matrix_layout, char uplo, lapack_int
n, lapack_int nrhs, const lapack_complex_float *ap,
lapack_complex_float *b, lapack_int ldb)
lapack_int LAPACKE_zpptrs_work (int matrix_layout, char uplo, lapack_int
n, lapack_int nrhs, const lapack_complex_double *ap,
lapack_complex_double *b, lapack_int ldb)
pptrf and pptri are twinsies (four args, ap, done). pptrs brought nrhs and made ap const. character development 💅
⭐ pstrf — the one with opinions
okay she's different. she's got piv, rank, AND tol — she's ranking things, she's pivoting, she has tolerance. main character energy fr fr 🔥
lapack_int LAPACKE_spstrf_work (int matrix_layout, char uplo, lapack_int
n, float *a, lapack_int lda, lapack_int *piv, lapack_int *rank,
float tol, float *work)
lapack_int LAPACKE_dpstrf_work (int matrix_layout, char uplo, lapack_int
n, double *a, lapack_int lda, lapack_int *piv, lapack_int *rank,
double tol, double *work)
lapack_int LAPACKE_cpstrf_work (int matrix_layout, char uplo, lapack_int
n, lapack_complex_float *a, lapack_int lda, lapack_int *piv,
lapack_int *rank, float tol, float *work)
lapack_int LAPACKE_zpstrf_work (int matrix_layout, char uplo, lapack_int
n, lapack_complex_double *a, lapack_int lda, lapack_int *piv,
lapack_int *rank, double tol, double *work)
tol is float for s/c and double for d/z — precision matching, she's thorough 🎀
🕯️ ptcon — wait, where's matrix_layout??
bestie. BESTIE. look closely. LAPACKE_sptcon_work does not start with matrix_layout. it just goes straight into lapack_int n. she's built different, she skipped the intro, she's mysterious 💀
lapack_int LAPACKE_sptcon_work (lapack_int n, const float *d, const
float *e, float anorm, float *rcond, float *work)
lapack_int LAPACKE_dptcon_work (lapack_int n, const double *d, const
double *e, double anorm, double *rcond, double *work)
lapack_int LAPACKE_cptcon_work (lapack_int n, const float *d, const
lapack_complex_float *e, float anorm, float *rcond, float *work)
lapack_int LAPACKE_zptcon_work (lapack_int n, const double *d, const
lapack_complex_double *e, double anorm, double *rcond, double *work)
note also: e is const float * for s, const double * for d, but const lapack_complex_float * for c and const lapack_complex_double * for z. the complex girlies brought their complex energy, we respect it 💜
🙈 spteqr — and we end on a CLIFFHANGER
she's mid-sentence. she's mid-signature. the line literally stops at float and honestly? same, girl, same 😭
lapack_int LAPACKE_spteqr_work (int matrix_layout, char compz,
lapack_int n, float *d, float *e, float *z, lapack_int ldz, float
compz said "I'm not like other uplos" and we stan a unique parameter name 🌟
to be continued, obviously — she's not done and neither are we 💖
Okay so next up is the pteqr girlies — same exact routine, four different precisions, work array included 💅
lapack_int LAPACKE_dpteqr_work (int matrix_layout, char compz,
lapack_int n, double *d, double *e, double *z, lapack_int ldz,
double *work)
lapack_int LAPACKE_cpteqr_work (int matrix_layout, char compz,
lapack_int n, float *d, float *e, lapack_complex_float *z,
lapack_int ldz, float *work)
lapack_int LAPACKE_zpteqr_work (int matrix_layout, char compz,
lapack_int n, double *d, double *e, lapack_complex_double *z,
lapack_int ldz, double *work)
(the s one was already in the last part bestie, we're not redoing it, we're moving on ✨)
Now ptrfs — this is the refinement one, and notice that the complex versions get an extra char uplo and an extra rwork while the real ones don't. That's not a typo, that's just how complex rolls 😭
lapack_int LAPACKE_sptrfs_work (int matrix_layout, lapack_int n,
lapack_int nrhs, const float *d, const float *e, const float *df,
const float *ef, const float *b, lapack_int ldb, float *x,
lapack_int ldx, float *ferr, float *berr, float *work)
lapack_int LAPACKE_dptrfs_work (int matrix_layout, lapack_int n,
lapack_int nrhs, const double *d, const double *e, const double *df,
const double *ef, const double *b, lapack_int ldb, double *x,
lapack_int ldx, double *ferr, double *berr, double *work)
lapack_int LAPACKE_cptrfs_work (int matrix_layout, char uplo, lapack_int
n, lapack_int nrhs, const float *d, const lapack_complex_float *e,
const float *df, const lapack_complex_float *ef, const
lapack_complex_float *b, lapack_int ldb, lapack_complex_float *x,
lapack_int ldx, float *ferr, float *berr, lapack_complex_float
*work, float *rwork)
lapack_int LAPACKE_zptrfs_work (int matrix_layout, char uplo, lapack_int
n, lapack_int nrhs, const double *d, const lapack_complex_double *e,
const double *df, const lapack_complex_double *ef, const
lapack_complex_double *b, lapack_int ldb, lapack_complex_double *x,
lapack_int ldx, double *ferr, double *berr, lapack_complex_double
*work, double *rwork)
ptsv next — the solve. No uplo, no rwork, just vibes and a work array. Iconic minimalism 🎀
lapack_int LAPACKE_sptsv_work (int matrix_layout, lapack_int n,
lapack_int nrhs, float *d, float *e, float *b, lapack_int ldb)
lapack_int LAPACKE_dptsv_work (int matrix_layout, lapack_int n,
lapack_int nrhs, double *d, double *e, double *b, lapack_int ldb)
lapack_int LAPACKE_cptsv_work (int matrix_layout, lapack_int n,
lapack_int nrhs, float *d, lapack_complex_float *e,
lapack_complex_float *b, lapack_int ldb)
lapack_int LAPACKE_zptsv_work (int matrix_layout, lapack_int n,
lapack_int nrhs, double *d, lapack_complex_double *e,
lapack_complex_double *b, lapack_int ldb)
And ptsvx — the fancy version with fact, rcond, ferr, berr, the whole glow-up 💅 again, complex gets rwork and the real ones don't:
lapack_int LAPACKE_sptsvx_work (int matrix_layout, char fact, lapack_int
n, lapack_int nrhs, const float *d, const float *e, float *df, float
*ef, const float *b, lapack_int ldb, float *x, lapack_int ldx, float
*rcond, float *ferr, float *berr, float *work)
lapack_int LAPACKE_dptsvx_work (int matrix_layout, char fact, lapack_int
n, lapack_int nrhs, const double *d, const double *e, double *df,
double *ef, const double *b, lapack_int ldb, double *x, lapack_int
ldx, double *rcond, double *ferr, double *berr, double *work)
lapack_int LAPACKE_cptsvx_work (int matrix_layout, char fact, lapack_int
n, lapack_int nrhs, const float *d, const lapack_complex_float *e,
float *df, lapack_complex_float *ef, const lapack_complex_float *b,
lapack_int ldb, lapack_complex_float *x, lapack_int ldx, float
*rcond, float *ferr, float *berr, lapack_complex_float *work, float
*rwork)
lapack_int LAPACKE_zptsvx_work (int matrix_layout, char fact, lapack_int
n, lapack_int nrhs, const double *d, const lapack_complex_double *e,
double *df, lapack_complex_double *ef, const lapack_complex_double
*b, lapack_int ldb, lapack_complex_double *x, lapack_int ldx, double
*rcond, double *ferr, double *berr, lapack_complex_double *work,
double *rwork)
pttrf — factorization only, no matrix_layout at all, which is a whole mood. Literally just n, d, e and bye 🦋
lapack_int LAPACKE_spttrf_work (lapack_int n, float *d, float *e)
lapack_int LAPACKE_dpttrf_work (lapack_int n, double *d, double *e)
lapack_int LAPACKE_cpttrf_work (lapack_int n, float *d,
lapack_complex_float *e)
lapack_int LAPACKE_zpttrf_work (lapack_int n, double *d,
lapack_complex_double *e)
pttrs — the matching solve for that factorization. The real ones don't take uplo, the complex ones do. Yes that's a pattern. Yes we noticed. No we can't fix it 🔥
lapack_int LAPACKE_spttrs_work (int matrix_layout, lapack_int n,
lapack_int nrhs, const float *d, const float *e, float *b,
lapack_int ldb)
lapack_int LAPACKE_dpttrs_work (int matrix_layout, lapack_int n,
lapack_int nrhs, const double *d, const double *e, double *b,
lapack_int ldb)
lapack_int LAPACKE_cpttrs_work (int matrix_layout, char uplo, lapack_int
n, lapack_int nrhs, const float *d, const lapack_complex_float *e,
lapack_complex_float *b, lapack_int ldb)
lapack_int LAPACKE_zpttrs_work (int matrix_layout, char uplo, lapack_int
n, lapack_int nrhs, const double *d, const lapack_complex_double *e,
lapack_complex_double *b, lapack_int ldb)
Okay the p* era is over, we're entering the sbev era and it's giving tridiagonal-but-wider. kd is the bandwidth bestie, don't forget it 💜
lapack_int LAPACKE_ssbev_work (int matrix_layout, char jobz, char uplo,
lapack_int n, lapack_int kd, float *ab, lapack_int ldab, float *w,
float *z, lapack_int ldz, float *work)
lapack_int LAPACKE_dsbev_work (int matrix_layout, char jobz, char uplo,
lapack_int n, lapack_int kd, double *ab, lapack_int ldab, double *w,
double *z, lapack_int ldz, double *work)
sbevd is the same queen but algorithmic and she wants lwork, iwork and liwork from you upfront. Pay up 💀
lapack_int LAPACKE_ssbevd_work (int matrix_layout, char jobz, char uplo,
lapack_int n, lapack_int kd, float *ab, lapack_int ldab, float *w,
float *z, lapack_int ldz, float *work, lapack_int lwork, lapack_int
*iwork, lapack_int liwork)
lapack_int LAPACKE_dsbevd_work (int matrix_layout, char jobz, char uplo,
lapack_int n, lapack_int kd, double *ab, lapack_int ldab, double *w,
double *z, lapack_int ldz, double *work, lapack_int lwork,
lapack_int *iwork, lapack_int liwork)
sbevx is the expert one — range, vl, vu, il, iu, abstol, output m, plus ifail so it can literally tell you which vectors failed. Not me being perceived by the algorithm 🙈
lapack_int LAPACKE_ssbevx_work (int matrix_layout, char jobz, char
range, char uplo, lapack_int n, lapack_int kd, float *ab, lapack_int
ldab, float *q, lapack_int ldq, float vl, float vu, lapack_int il,
lapack_int iu, float abstol, lapack_int *m, float *w, float *z,
lapack_int ldz, float *work, lapack_int *iwork, lapack_int *ifail)
lapack_int LAPACKE_dsbevx_work (int matrix_layout, char jobz, char
range, char uplo, lapack_int n, lapack_int kd, double *ab,
lapack_int ldab, double *q, lapack_int ldq, double vl, double vu,
lapack_int il, lapack_int iu, double abstol, lapack_int *m, double
*w, double *z, lapack_int ldz, double *work, lapack_int *iwork,
lapack_int *ifail)
sbgst — generalized problem reduction, and it takes two band matrices ab/bb with their own ka/kb bandwidths plus vect, uplo and an output x with ldx. It's giving very much "two besties, two bandwidths" 🫶
lapack_int LAPACKE_ssbgst_work (int matrix_layout, char vect, char uplo,
lapack_int n, lapack_int ka, lapack_int kb, float *ab, lapack_int
ldab, const float *bb, lapack_int ldbb, float *x, lapack_int ldx,
float *work)
lapack_int LAPACKE_dsbgst_work (int matrix_layout, char vect, char uplo,
lapack_int n, lapack_int ka, lapack_int kb, double *ab, lapack_int
ldab, const double *bb, lapack_int ldbb, double *x, lapack_int ldx,
double *work)
sbgv — generalized band eigenvalue problem. Same two-band energy, but it spits out w and z instead of x ✨
lapack_int LAPACKE_ssbgv_work (int matrix_layout, char jobz, char uplo,
lapack_int n, lapack_int ka, lapack_int kb, float *ab, lapack_int
ldab, float *bb, lapack_int ldbb, float *w, float *z, lapack_int
ldz, float *work)
lapack_int LAPACKE_dsbgv_work (int matrix_layout, char jobz, char uplo,
lapack_int n, lapack_int ka, lapack_int kb, double *ab, lapack_int
ldab, double *bb, lapack_int ldbb, double *w, double *z, lapack_int
ldz, double *work)
sbgvd — same as above but division-and-conquer coded, so it's lwork/iwork/liwork again. Keep your workspace budget in check bestie, she's greedy 💅
lapack_int LAPACKE_ssbgvd_work (int matrix_layout, char jobz, char uplo,
lapack_int n, lapack_int ka, lapack_int kb, float *ab, lapack_int
ldab, float *bb, lapack_int ldbb, float *w, float *z, lapack_int
ldz, float *work, lapack_int lwork, lapack_int *iwork, lapack_int
liwork)
lapack_int LAPACKE_dsbgvd_work (int matrix_layout, char jobz, char uplo,
lapack_int n, lapack_int ka, lapack_int kb, double *ab, lapack_int
ldab, double *bb, lapack_int ldbb, double *w, double *z, lapack_int
ldz, double *work, lapack_int lwork, lapack_int *iwork, lapack_int
liwork)
sbgvx — expert generalized band. Everything sbgvd has plus range, vl, vu, il, iu, abstol, q/ldq, output m and ifail. The longest signature so far and honestly? She earned it 👑
lapack_int LAPACKE_ssbgvx_work (int matrix_layout, char jobz, char
range, char uplo, lapack_int n, lapack_int ka, lapack_int kb, float
*ab, lapack_int ldab, float *bb, lapack_int ldbb, float *q,
lapack_int ldq, float vl, float vu, lapack_int il, lapack_int iu,
float abstol, lapack_int *m, float *w, float *z, lapack_int ldz,
float *work, lapack_int *iwork, lapack_int *ifail)
lapack_int LAPACKE_dsbgvx_work (int matrix_layout, char jobz, char
range, char uplo, lapack_int n, lapack_int ka, lapack_int kb, double
*ab, lapack_int ldab, double *bb, lapack_int ldbb, double *q,
lapack_int ldq, double vl, double vu, lapack_int il, lapack_int iu,
double abstol, lapack_int *m, double *w, double *z, lapack_int ldz,
double *work, lapack_int *iwork, lapack_int *ifail)
sbtrd — reduces a symmetric band matrix to tridiagonal. Note the vect/uplo combo, d and e for the diagonal and off-diagonal, and q/ldq for the orthogonal matrix if you asked for it 🌸
lapack_int LAPACKE_ssbtrd_work (int matrix_layout, char vect, char uplo,
lapack_int n, lapack_int kd, float *ab, lapack_int ldab, float *d,
float *e, float *q, lapack_int ldq, float *work)
lapack_int LAPACKE_dsbtrd_work (int matrix_layout, char vect, char uplo,
lapack_int n, lapack_int kd, double *ab, lapack_int ldab, double *d,
double *e, double *q, lapack_int ldq, double *work)
sfrk — the rank-k update in RFP (rectangular full packed) storage. Four chars of chaos: transr, uplo, trans. Plus alpha/beta and no work array because she doesn't need one, she's low maintenance 💜
lapack_int LAPACKE_ssfrk_work (int matrix_layout, char transr, char
uplo, char trans, lapack_int n, lapack_int k, float alpha, const
float *a, lapack_int lda, float beta, float *c)
lapack_int LAPACKE_dsfrk_work (int matrix_layout, char transr, char
uplo, char trans, lapack_int n, lapack_int k, double alpha, const
double *a, lapack_int lda, double beta, double *c)
spcon — condition number estimate for packed storage. Real versions get work + iwork; complex versions get just work because their iwork era is not now 🎀
lapack_int LAPACKE_sspcon_work (int matrix_layout, char uplo, lapack_int
n, const float *ap, const lapack_int *ipiv, float anorm, float
*rcond, float *work, lapack_int *iwork)
lapack_int LAPACKE_dspcon_work (int matrix_layout, char uplo, lapack_int
n, const double *ap, const lapack_int *ipiv, double anorm, double
*rcond, double *work, lapack_int *iwork)
lapack_int LAPACKE_cspcon_work (int matrix_layout, char uplo, lapack_int
n, const lapack_complex_float *ap, const lapack_int *ipiv, float
anorm, float *rcond, lapack_complex_float *work)
lapack_int LAPACKE_zspcon_work (int matrix_layout, char uplo, lapack_int
n, const lapack_complex_double *ap, const lapack_int *ipiv, double
anorm, double *rcond, lapack_complex_double *work)
spev — packed symmetric eigenvalues. ap in, w out, z/ldz if you want the vectors, work for the process 🌈
lapack_int LAPACKE_sspev_work (int matrix_layout, char jobz, char uplo,
lapack_int n, float *ap, float *w, float *z, lapack_int ldz, float
*work)
lapack_int LAPACKE_dspev_work (int matrix_layout, char jobz, char uplo,
lapack_int n, double *ap, double *w, double *z, lapack_int ldz,
double *work)
spevd — and here's where we hand off, because the d version wants lwork, iwork and liwork and the list keeps going in the next part 😭 don't worry, we're picking it right back up:
lapack_int LAPACKE_sspevd_work (int matrix_layout, char jobz, char uplo,
lapack_int n, float *ap, float *w, float *z, lapack_int ldz, float
*work, lapack_int lwork, lapack_int *iwork, lapack_int liwork)
lapack_int LAPACKE_dspevd_work (int matrix_layout, char jobz, char uplo,
lapack_int n, double *ap, double *w, double *z, lapack_int ldz,
okay continuing the prototype parade 💅 still in the SYNOPSIS section, still no breath, still slaying. the previous block tails off with this lil leftover:
double *work, lapack_int lwork, lapack_int *iwork, lapack_int
liwork)
(that's the end of the previous _work signature, bestie — it just wrapped ugly 🫶)
the spevx girlies 💖
so spevx is the full-glow-up eigenvalue situation, and its _work twins are:
lapack_int LAPACKE_sspevx_work (int matrix_layout, char jobz, char
range, char uplo, lapack_int n, float *ap, float vl, float vu,
lapack_int il, lapack_int iu, float abstol, lapack_int *m, float *w,
float *z, lapack_int ldz, float *work, lapack_int *iwork, lapack_int
*ifail)
lapack_int LAPACKE_dspevx_work (int matrix_layout, char jobz, char
range, char uplo, lapack_int n, double *ap, double vl, double vu,
lapack_int il, lapack_int iu, double abstol, lapack_int *m, double
*w, double *z, lapack_int ldz, double *work, lapack_int *iwork,
lapack_int *ifail)
note the <pink>_work</pink> versions make you bring the workspace — work, iwork, ifail, all handed over by you, no freebies ✨
the packed generalized symmetric crew 🌸
spgst first — a two-line situation, ap in, bp read-only:
lapack_int LAPACKE_sspgst_work (int matrix_layout, lapack_int itype,
char uplo, lapack_int n, float *ap, const float *bp)
lapack_int LAPACKE_dspgst_work (int matrix_layout, lapack_int itype,
char uplo, lapack_int n, double *ap, const double *bp)
then spgv, which also gives you eigenvalues in w and eigenvectors in z:
lapack_int LAPACKE_sspgv_work (int matrix_layout, lapack_int itype, char
jobz, char uplo, lapack_int n, float *ap, float *bp, float *w, float
*z, lapack_int ldz, float *work)
lapack_int LAPACKE_dspgv_work (int matrix_layout, lapack_int itype, char
jobz, char uplo, lapack_int n, double *ap, double *bp, double *w,
double *z, lapack_int ldz, double *work)
spgvd is literally spgv but divide-and-conquer coded, and it brought lwork/liwork along 😤:
lapack_int LAPACKE_sspgvd_work (int matrix_layout, lapack_int itype,
char jobz, char uplo, lapack_int n, float *ap, float *bp, float *w,
float *z, lapack_int ldz, float *work, lapack_int lwork, lapack_int
*iwork, lapack_int liwork)
lapack_int LAPACKE_dspgvd_work (int matrix_layout, lapack_int itype,
char jobz, char uplo, lapack_int n, double *ap, double *bp, double
*w, double *z, lapack_int ldz, double *work, lapack_int lwork,
lapack_int *iwork, lapack_int liwork)
and spgvx is the picky one — range, vl/vu, il/iu, abstol, m out, plus ifail at the end:
lapack_int LAPACKE_sspgvx_work (int matrix_layout, lapack_int itype,
char jobz, char range, char uplo, lapack_int n, float *ap, float
*bp, float vl, float vu, lapack_int il, lapack_int iu, float abstol,
lapack_int *m, float *w, float *z, lapack_int ldz, float *work,
lapack_int *iwork, lapack_int *ifail)
lapack_int LAPACKE_dspgvx_work (int matrix_layout, lapack_int itype,
char jobz, char range, char uplo, lapack_int n, double *ap, double
*bp, double vl, double vu, lapack_int il, lapack_int iu, double
abstol, lapack_int *m, double *w, double *z, lapack_int ldz, double
*work, lapack_int *iwork, lapack_int *ifail)
sprfs — the iterative-refinement baddies 🔥
all four precisions showed up, and the complex ones get <purple>rwork</purple> on top of work:
lapack_int LAPACKE_ssprfs_work (int matrix_layout, char uplo, lapack_int
n, lapack_int nrhs, const float *ap, const float *afp, const
lapack_int *ipiv, const float *b, lapack_int ldb, float *x,
lapack_int ldx, float *ferr, float *berr, float *work, lapack_int
*iwork)
lapack_int LAPACKE_dsprfs_work (int matrix_layout, char uplo, lapack_int
n, lapack_int nrhs, const double *ap, const double *afp, const
lapack_int *ipiv, const double *b, lapack_int ldb, double *x,
lapack_int ldx, double *ferr, double *berr, double *work, lapack_int
*iwork)
lapack_int LAPACKE_csprfs_work (int matrix_layout, char uplo, lapack_int
n, lapack_int nrhs, const lapack_complex_float *ap, const
lapack_complex_float *afp, const lapack_int *ipiv, const
lapack_complex_float *b, lapack_int ldb, lapack_complex_float *x,
lapack_int ldx, float *ferr, float *berr, lapack_complex_float
*work, float *rwork)
lapack_int LAPACKE_zsprfs_work (int matrix_layout, char uplo, lapack_int
n, lapack_int nrhs, const lapack_complex_double *ap, const
lapack_complex_double *afp, const lapack_int *ipiv, const
lapack_complex_double *b, lapack_int ldb, lapack_complex_double *x,
lapack_int ldx, double *ferr, double *berr, lapack_complex_double
*work, double *rwork)
spsv / spsvx — solve szn 💅
spsv is the short one, ipiv out, b in-and-overwritten:
lapack_int LAPACKE_sspsv_work (int matrix_layout, char uplo, lapack_int
n, lapack_int nrhs, float *ap, lapack_int *ipiv, float *b,
lapack_int ldb)
lapack_int LAPACKE_dspsv_work (int matrix_layout, char uplo, lapack_int
n, lapack_int nrhs, double *ap, lapack_int *ipiv, double *b,
lapack_int ldb)
lapack_int LAPACKE_cspsv_work (int matrix_layout, char uplo, lapack_int
n, lapack_int nrhs, lapack_complex_float *ap, lapack_int *ipiv,
lapack_complex_float *b, lapack_int ldb)
lapack_int LAPACKE_zspsv_work (int matrix_layout, char uplo, lapack_int
n, lapack_int nrhs, lapack_complex_double *ap, lapack_int *ipiv,
lapack_complex_double *b, lapack_int ldb)
spsvx is the deluxe edition with fact, afp, rcond, ferr, berr — so many little output crumbs fr fr:
lapack_int LAPACKE_sspsvx_work (int matrix_layout, char fact, char uplo,
lapack_int n, lapack_int nrhs, const float *ap, float *afp,
lapack_int *ipiv, const float *b, lapack_int ldb, float *x,
lapack_int ldx, float *rcond, float *ferr, float *berr, float *work,
lapack_int *iwork)
lapack_int LAPACKE_dspsvx_work (int matrix_layout, char fact, char uplo,
lapack_int n, lapack_int nrhs, const double *ap, double *afp,
lapack_int *ipiv, const double *b, lapack_int ldb, double *x,
lapack_int ldx, double *rcond, double *ferr, double *berr, double
*work, lapack_int *iwork)
lapack_int LAPACKE_cspsvx_work (int matrix_layout, char fact, char uplo,
lapack_int n, lapack_int nrhs, const lapack_complex_float *ap,
lapack_complex_float *afp, lapack_int *ipiv, const
lapack_complex_float *b, lapack_int ldb, lapack_complex_float *x,
lapack_int ldx, float *rcond, float *ferr, float *berr,
lapack_complex_float *work, float *rwork)
lapack_int LAPACKE_zspsvx_work (int matrix_layout, char fact, char uplo,
lapack_int n, lapack_int nrhs, const lapack_complex_double *ap,
lapack_complex_double *afp, lapack_int *ipiv, const
lapack_complex_double *b, lapack_int ldb, lapack_complex_double *x,
lapack_int ldx, double *rcond, double *ferr, double *berr,
lapack_complex_double *work, double *rwork)
sptrd / sptrf / sptri / sptrs — the tri-diagonal trio-plus-one 🎀
sptrd reduces and hands back d, e, tau:
lapack_int LAPACKE_ssptrd_work (int matrix_layout, char uplo, lapack_int
n, float *ap, float *d, float *e, float *tau)
lapack_int LAPACKE_dsptrd_work (int matrix_layout, char uplo, lapack_int
n, double *ap, double *d, double *e, double *tau)
sptrf factors and spills ipiv:
lapack_int LAPACKE_ssptrf_work (int matrix_layout, char uplo, lapack_int
n, float *ap, lapack_int *ipiv)
lapack_int LAPACKE_dsptrf_work (int matrix_layout, char uplo, lapack_int
n, double *ap, lapack_int *ipiv)
lapack_int LAPACKE_csptrf_work (int matrix_layout, char uplo, lapack_int
n, lapack_complex_float *ap, lapack_int *ipiv)
lapack_int LAPACKE_zsptrf_work (int matrix_layout, char uplo, lapack_int
n, lapack_complex_double *ap, lapack_int *ipiv)
sptri takes ipiv back as const and wants work:
lapack_int LAPACKE_ssptri_work (int matrix_layout, char uplo, lapack_int
n, float *ap, const lapack_int *ipiv, float *work)
lapack_int LAPACKE_dsptri_work (int matrix_layout, char uplo, lapack_int
n, double *ap, const lapack_int *ipiv, double *work)
lapack_int LAPACKE_csptri_work (int matrix_layout, char uplo, lapack_int
n, lapack_complex_float *ap, const lapack_int *ipiv,
lapack_complex_float *work)
lapack_int LAPACKE_zsptri_work (int matrix_layout, char uplo, lapack_int
n, lapack_complex_double *ap, const lapack_int *ipiv,
lapack_complex_double *work)
and sptrs does the actual solving, b in place, ldb tagging along:
lapack_int LAPACKE_ssptrs_work (int matrix_layout, char uplo, lapack_int
n, lapack_int nrhs, const float *ap, const lapack_int *ipiv, float
*b, lapack_int ldb)
lapack_int LAPACKE_dsptrs_work (int matrix_layout, char uplo, lapack_int
n, lapack_int nrhs, const double *ap, const lapack_int *ipiv, double
*b, lapack_int ldb)
lapack_int LAPACKE_csptrs_work (int matrix_layout, char uplo, lapack_int
n, lapack_int nrhs, const lapack_complex_float *ap, const lapack_int
*ipiv, lapack_complex_float *b, lapack_int ldb)
lapack_int LAPACKE_zsptrs_work (int matrix_layout, char uplo, lapack_int
n, lapack_int nrhs, const lapack_complex_double *ap, const
lapack_int *ipiv, lapack_complex_double *b, lapack_int ldb)
stebz — wait, where's matrix_layout?? 😭
not me noticing stebz is the icon who does NOT take a matrix_layout argument. she's different like that 💀
lapack_int LAPACKE_sstebz_work (char range, char order, lapack_int n,
float vl, float vu, lapack_int il, lapack_int iu, float abstol,
const float *d, const float *e, lapack_int *m, lapack_int *nsplit,
float *w, lapack_int *iblock, lapack_int *isplit, float *work,
lapack_int *iwork)
lapack_int LAPACKE_dstebz_work (char range, char order, lapack_int n,
double vl, double vu, lapack_int il, lapack_int iu, double abstol,
const double *d, const double *e, lapack_int *m, lapack_int *nsplit,
double *w, lapack_int *iblock, lapack_int *isplit, double *work,
lapack_int *iwork)
stedc — divide-and-conquer tridiagonal glow-up ✨
note the complex ones carry <lavender>rwork</lavender> and <lavender>lrwork</lavender> in addition to work/lwork/iwork/liwork. the full luggage set 🧳:
lapack_int LAPACKE_sstedc_work (int matrix_layout, char compz,
lapack_int n, float *d, float *e, float *z, lapack_int ldz, float
*work, lapack_int lwork, lapack_int *iwork, lapack_int liwork)
lapack_int LAPACKE_dstedc_work (int matrix_layout, char compz,
lapack_int n, double *d, double *e, double *z, lapack_int ldz,
double *work, lapack_int lwork, lapack_int *iwork, lapack_int
liwork)
lapack_int LAPACKE_cstedc_work (int matrix_layout, char compz,
lapack_int n, float *d, float *e, lapack_complex_float *z,
lapack_int ldz, lapack_complex_float *work, lapack_int lwork, float
*rwork, lapack_int lrwork, lapack_int *iwork, lapack_int liwork)
lapack_int LAPACKE_zstedc_work (int matrix_layout, char compz,
lapack_int n, double *d, double *e, lapack_complex_double *z,
lapack_int ldz, lapack_complex_double *work, lapack_int lwork,
double *rwork, lapack_int lrwork, lapack_int *iwork, lapack_int
liwork)
stegr — the MRRR queen 👑
jobz, range, vl/vu, il/iu, abstol, m out, w, z, ldz, isuppz, work/lwork/iwork/liwork. she has everything and she knows it 🌈
lapack_int LAPACKE_sstegr_work (int matrix_layout, char jobz, char
range, lapack_int n, float *d, float *e, float vl, float vu,
lapack_int il, lapack_int iu, float abstol, lapack_int *m, float *w,
float *z, lapack_int ldz, lapack_int *isuppz, float *work,
lapack_int lwork, lapack_int *iwork, lapack_int liwork)
lapack_int LAPACKE_dstegr_work (int matrix_layout, char jobz, char
range, lapack_int n, double *d, double *e, double vl, double vu,
lapack_int il, lapack_int iu, double abstol, lapack_int *m, double
*w, double *z, lapack_int ldz, lapack_int *isuppz, double *work,
lapack_int lwork, lapack_int *iwork, lapack_int liwork)
lapack_int LAPACKE_cstegr_work (int matrix_layout, char jobz, char
range, lapack_int n, float *d, float *e, float vl, float vu,
lapack_int il, lapack_int iu, float abstol, lapack_int *m, float *w,
lapack_complex_float *z, lapack_int ldz, lapack_int *isuppz, float
*work, lapack_int lwork, lapack_int *iwork, lapack_int liwork)
lapack_int LAPACKE_zstegr_work (int matrix_layout, char jobz, char
range, lapack_int n, double *d, double *e, double vl, double vu,
lapack_int il, lapack_int iu, double abstol, lapack_int *m, double
*w, lapack_complex_double *z, lapack_int ldz, lapack_int *isuppz,
double *work, lapack_int lwork, lapack_int *iwork, lapack_int
liwork)
lowkey obsessed that cstegr and zstegr keep d/e/w real while z goes complex — that mix is so real 💜
okay that's this batch of prototypes, and there's so much more coming, don't you dare close the tab 🦋
okay so here's the next batch of LAPACKE_*_work prototypes — all of these are the "you bring your own workspace" versions, bestie, so every one of them has work/lwork and sometimes iwork/liwork hanging out at the end. 💅
🌸 the stein squad — s, d, c, z
lapack_int LAPACKE_sstein_work (int matrix_layout, lapack_int n, const
float *d, const float *e, lapack_int m, const float *w, const
lapack_int *iblock, const lapack_int *isplit, float *z, lapack_int
ldz, float *work, lapack_int *iwork, lapack_int *ifailv)
lapack_int LAPACKE_dstein_work (int matrix_layout, lapack_int n, const
double *d, const double *e, lapack_int m, const double *w, const
lapack_int *iblock, const lapack_int *isplit, double *z, lapack_int
ldz, double *work, lapack_int *iwork, lapack_int *ifailv)
lapack_int LAPACKE_cstein_work (int matrix_layout, lapack_int n, const
float *d, const float *e, lapack_int m, const float *w, const
lapack_int *iblock, const lapack_int *isplit, lapack_complex_float
*z, lapack_int ldz, float *work, lapack_int *iwork, lapack_int
*ifailv)
lapack_int LAPACKE_zstein_work (int matrix_layout, lapack_int n, const
double *d, const double *e, lapack_int m, const double *w, const
lapack_int *iblock, const lapack_int *isplit, lapack_complex_double
*z, lapack_int ldz, double *work, lapack_int *iwork, lapack_int
*ifailv)
okay so the whole stein fam shares one shape, and the only glow-up between them is precision/species — <purple>s</purple> = float, <purple>d</purple> = double, <purple>c</purple> = lapack_complex_float, <purple>z</purple> = lapack_complex_double. that's it, that's the whole personality.
matrix_layout— you're telling it how your array is laid out. yes it goes first, no you don't get to skip it. 🙈n— the size, bestie. the dimension.dande—constpointers to your real scalars;egets one fewer element in spirit so watch your edges.m— the count. how many of the goods you actually want.w—constarray of the values.iblockandisplit—const lapack_int *housekeeping arrays, carried along like emotional support besties.z— where the output lands, with leading dimensionldz.work— your workspace buffer (real type in every variant — even the complex ones 🙃).iwork— the integer workspace.ifailv— an outputlapack_int *for the failure info. keep an eye on it. 👀
🎀 the stemr squad — s, d, c, z
lapack_int LAPACKE_sstemr_work (int matrix_layout, char jobz, char
range, lapack_int n, float *d, float *e, float vl, float vu,
lapack_int il, lapack_int iu, lapack_int *m, float *w, float *z,
lapack_int ldz, lapack_int nzc, lapack_int *isuppz, lapack_logical
*tryrac, float *work, lapack_int lwork, lapack_int *iwork,
lapack_int liwork)
lapack_int LAPACKE_dstemr_work (int matrix_layout, char jobz, char
range, lapack_int n, double *d, double *e, double vl, double vu,
lapack_int il, lapack_int iu, lapack_int *m, double *w, double *z,
lapack_int ldz, lapack_int nzc, lapack_int *isuppz, lapack_logical
*tryrac, double *work, lapack_int lwork, lapack_int *iwork,
lapack_int liwork)
lapack_int LAPACKE_cstemr_work (int matrix_layout, char jobz, char
range, lapack_int n, float *d, float *e, float vl, float vu,
lapack_int il, lapack_int iu, lapack_int *m, float *w,
lapack_complex_float *z, lapack_int ldz, lapack_int nzc, lapack_int
*isuppz, lapack_logical *tryrac, float *work, lapack_int lwork,
lapack_int *iwork, lapack_int liwork)
lapack_int LAPACKE_zstemr_work (int matrix_layout, char jobz, char
range, lapack_int n, double *d, double *e, double vl, double vu,
lapack_int il, lapack_int iu, lapack_int *m, double *w,
lapack_complex_double *z, lapack_int ldz, lapack_int nzc, lapack_int
*isuppz, lapack_logical *tryrac, double *work, lapack_int lwork,
lapack_int *iwork, lapack_int liwork)
this one has so many arguments and honestly? it ate. here's the tour:
jobzandrange— twocharflags up front, bossing things around.n— the usual size.d/e— non-constthis time (they get touched, no cap).vl,vu— your value bounds (float/doubledepending on flavor).il,iu— your index bounds (lapack_int).m— alapack_int *output for the count. it points, it tells.w— output values.z+ldz— output array and its leading dimension.nzc— yep, anotherlapack_int.isuppz—lapack_int *support-array situation.tryrac— alapack_logical *, iconique. ✨work/lworkandiwork/liwork— real work buffer with its length, integer work buffer with its length. both come in with their sizes, so no guessing. 🫶
🦋 the steqr squad — s, d, c, z
lapack_int LAPACKE_ssteqr_work (int matrix_layout, char compz,
lapack_int n, float *d, float *e, float *z, lapack_int ldz, float
*work)
lapack_int LAPACKE_dsteqr_work (int matrix_layout, char compz,
lapack_int n, double *d, double *e, double *z, lapack_int ldz,
double *work)
lapack_int LAPACKE_csteqr_work (int matrix_layout, char compz,
lapack_int n, float *d, float *e, lapack_complex_float *z,
lapack_int ldz, float *work)
lapack_int LAPACKE_zsteqr_work (int matrix_layout, char compz,
lapack_int n, double *d, double *e, lapack_complex_double *z,
lapack_int ldz, double *work)
short king lineup ngl:
compz— onechartelling it about thezsituation.n— the size.d/e— non-const, they're getting edited.z+ldz— output array + leading dimension.work— a plainworkpointer, nolworkhere, that's just the mood. 💀
🧚 the sterf duo
lapack_int LAPACKE_ssterf_work (lapack_int n, float *d, float *e)
lapack_int LAPACKE_dsterf_work (lapack_int n, double *d, double *e)
look at these minimalists!! no matrix_layout, no work — just n, d, and e. real "doesn't need makeup" energy. two of them: s (float) and d (double). that's the whole function. slay. 👑
⭐ the stev duo
lapack_int LAPACKE_sstev_work (int matrix_layout, char jobz, lapack_int
n, float *d, float *e, float *z, lapack_int ldz, float *work)
lapack_int LAPACKE_dstev_work (int matrix_layout, char jobz, lapack_int
n, double *d, double *e, double *z, lapack_int ldz, double *work)
matrix_layout back in the chat, plus jobz, n, d, e, z + ldz, and a trusty work. clean, focused, gets the job done. 💅
💜 the stevd duo
lapack_int LAPACKE_sstevd_work (int matrix_layout, char jobz, lapack_int
n, float *d, float *e, float *z, lapack_int ldz, float *work,
lapack_int lwork, lapack_int *iwork, lapack_int liwork)
lapack_int LAPACKE_dstevd_work (int matrix_layout, char jobz, lapack_int
n, double *d, double *e, double *z, lapack_int ldz, double *work,
lapack_int lwork, lapack_int *iwork, lapack_int liwork)
same starting cast as stev — matrix_layout, jobz, n, d, e, z + ldz — but then it level'd up with the full workspace kit: work / lwork and iwork / liwork. glow-up era. ✨
🍓 the stevr duo
lapack_int LAPACKE_sstevr_work (int matrix_layout, char jobz, char
range, lapack_int n, float *d, float *e, float vl, float vu,
lapack_int il, lapack_int iu, float abstol, lapack_int *m, float *w,
float *z, lapack_int ldz, lapack_int *isuppz, float *work,
lapack_int lwork, lapack_int *iwork, lapack_int liwork)
lapack_int LAPACKE_dstevr_work (int matrix_layout, char jobz, char
range, lapack_int n, double *d, double *e, double vl, double vu,
lapack_int il, lapack_int iu, double abstol, lapack_int *m, double
*w, double *z, lapack_int ldz, lapack_int *isuppz, double *work,
lapack_int lwork, lapack_int *iwork, lapack_int liwork)
the "r" version came dressed — jobz, range, n, d, e, vl, vu, il, iu, abstol (a real-typed tolerance, yes ma'am), m (pointer output), w, z + ldz, isuppz, then work / lwork and iwork / liwork. full roster, no notes. 🌈
💀 the stevx duo
lapack_int LAPACKE_sstevx_work (int matrix_layout, char jobz, char
range, lapack_int n, float *d, float *e, float vl, float vu,
lapack_int il, lapack_int iu, float abstol, lapack_int *m, float *w,
float *z, lapack_int ldz, float *work, lapack_int *iwork, lapack_int
*ifail)
lapack_int LAPACKE_dstevx_work (int matrix_layout, char jobz, char
range, lapack_int n, double *d, double *e, double vl, double vu,
lapack_int il, lapack_int iu, double abstol, lapack_int *m, double
*w, double *z, lapack_int ldz, double *work, lapack_int *iwork,
lapack_int *ifail)
nearly the same vibe as stevr, but the tail swaps isuppz/liwork for work, iwork, and an ifail output pointer. watch that ifail, bestie, it's lowkey snitching when things go sideways. 👀
🌸 the sycon squad — s, d, c, z
lapack_int LAPACKE_ssycon_work (int matrix_layout, char uplo, lapack_int
n, const float *a, lapack_int lda, const lapack_int *ipiv, float
anorm, float *rcond, float *work, lapack_int *iwork)
lapack_int LAPACKE_dsycon_work (int matrix_layout, char uplo, lapack_int
n, const double *a, lapack_int lda, const lapack_int *ipiv, double
anorm, double *rcond, double *work, lapack_int *iwork)
lapack_int LAPACKE_csycon_work (int matrix_layout, char uplo, lapack_int
n, const lapack_complex_float *a, lapack_int lda, const lapack_int
*ipiv, float anorm, float *rcond, lapack_complex_float *work)
lapack_int LAPACKE_zsycon_work (int matrix_layout, char uplo, lapack_int
n, const lapack_complex_double *a, lapack_int lda, const lapack_int
*ipiv, double anorm, double *rcond, lapack_complex_double *work)
okay so this fam — note the sneaky difference: the real ones (ssycon/dsycon) carry both work and iwork, but the complex ones (csycon/zsycon) only get work. read the signature, don't assume. 🫶
uplo— achartelling it which triangle ofamatters.n— the size.a—constmatrix, with leading dimensionlda.ipiv—const lapack_int *pivot info, brought along.anorm— a real-typed norm value (even in the complex versions —float/double).rcond— output pointer for the reciprocal condition situation.work— workspace, type matches the flavor.iwork— integer workspace… but only fors/d. 🙃
🎀 the syequb squad — s, d, c, z
lapack_int LAPACKE_ssyequb_work (int matrix_layout, char uplo,
lapack_int n, const float *a, lapack_int lda, float *s, float
*scond, float *amax, float *work)
lapack_int LAPACKE_dsyequb_work (int matrix_layout, char uplo,
lapack_int n, const double *a, lapack_int lda, double *s, double
*scond, double *amax, double *work)
lapack_int LAPACKE_csyequb_work (int matrix_layout, char uplo,
lapack_int n, const lapack_complex_float *a, lapack_int lda, float
*s, float *scond, float *amax, lapack_complex_float *work)
lapack_int LAPACKE_zsyequb_work (int matrix_layout, char uplo,
lapack_int n, const lapack_complex_double *a, lapack_int lda, double
*s, double *scond, double *amax, lapack_complex_double *work)
uplo,n,a+lda— the usual opening act.s,scond,amax— three real-typed output pointers (floatfors/c,doubleford/z— yes, even the complex ones output reals here 💅).work— and a workspace that matches the actual matrix type. noiwork, keep it light.
⭐ the syev duo
lapack_int LAPACKE_ssyev_work (int matrix_layout, char jobz, char uplo,
lapack_int n, float *a, lapack_int lda, float *w, float *work,
lapack_int lwork)
lapack_int LAPACKE_dsyev_work (int matrix_layout, char jobz, char uplo,
lapack_int n, double *a, lapack_int lda, double *w, double *work,
lapack_int lwork)
jobz, uplo, n, a + lda (non-const, she's mutable), w for output values, and work / lwork. just the essentials, hydrated and unbothered. 💧
🧚 the syevd duo
lapack_int LAPACKE_ssyevd_work (int matrix_layout, char jobz, char uplo,
lapack_int n, float *a, lapack_int lda, float *w, float *work,
lapack_int lwork, lapack_int *iwork, lapack_int liwork)
lapack_int LAPACKE_dsyevd_work (int matrix_layout, char jobz, char uplo,
lapack_int n, double *a, lapack_int lda, double *w, double *work,
lapack_int lwork, lapack_int *iwork, lapack_int liwork)
syev but make it deluxe — same jobz, uplo, n, a + lda, w, then work / lwork plus iwork / liwork. the whole workspace family came to the function. 🎀
💜 the syevr duo
lapack_int LAPACKE_ssyevr_work (int matrix_layout, char jobz, char
range, char uplo, lapack_int n, float *a, lapack_int lda, float vl,
float vu, lapack_int il, lapack_int iu, float abstol, lapack_int *m,
float *w, float *z, lapack_int ldz, lapack_int *isuppz, float *work,
lapack_int lwork, lapack_int *iwork, lapack_int liwork)
lapack_int LAPACKE_dsyevr_work (int matrix_layout, char jobz, char
range, char uplo, lapack_int n, double *a, lapack_int lda, double
vl, double vu, lapack_int il, lapack_int iu, double abstol,
lapack_int *m, double *w, double *z, lapack_int ldz, lapack_int
*isuppz, double *work, lapack_int lwork, lapack_int *iwork,
lapack_int liwork)
three chars deep — jobz, range, uplo — then n, a + lda, vl, vu, il, iu, abstol, m (pointer output), w, z + ldz, isuppz, and the double workspace special: work / lwork + iwork / liwork. it's giving full send. 🔥
🍓 the syevx duo
lapack_int LAPACKE_ssyevx_work (int matrix_layout, char jobz, char
range, char uplo, lapack_int n, float *a, lapack_int lda, float vl,
float vu, lapack_int il, lapack_int iu, float abstol, lapack_int *m,
float *w, float *z, lapack_int ldz, float *work, lapack_int lwork,
lapack_int *iwork, lapack_int *ifail)
lapack_int LAPACKE_dsyevx_work (int matrix_layout, char jobz, char
range, char uplo, lapack_int n, double *a, lapack_int lda, double
vl, double vu, lapack_int il, lapack_int iu, double abstol,
lapack_int *m, double *w, double *z, lapack_int ldz, double *work,
lapack_int lwork, lapack_int *iwork, lapack_int *ifail)
same jobz/range/uplo trio, same n, a + lda, vl, vu, il, iu, abstol, m, w, z + ldz… then it goes work / lwork, iwork, and ifail instead of the isuppz/liwork combo. different tail, same brain. 💅
🌈 the sygst duo
lapack_int LAPACKE_ssygst_work (int matrix_layout, lapack_int itype,
char uplo, lapack_int n, float *a, lapack_int lda, const float *b,
lapack_int ldb)
lapack_int LAPACKE_dsygst_work (int matrix_layout, lapack_int itype,
char uplo, lapack_int n, double *a, lapack_int lda, const double *b,
lapack_int ldb)
so compact!! itype (a lapack_int first up, not a char — periodt), then uplo, n, a + lda (mutable), b (const) + ldb. no work in sight — she doesn't need one. 🧚
👑 the sygv duo
lapack_int LAPACKE_ssygv_work (int matrix_layout, lapack_int itype, char
jobz, char uplo, lapack_int n, float *a, lapack_int lda, float *b,
lapack_int ldb, float *w, float *work, lapack_int lwork)
lapack_int LAPACKE_dsygv_work (int matrix_layout, lapack_int itype, char
jobz, char uplo, lapack_int n, double *a, lapack_int lda, double *b,
lapack_int ldb, double *w, double *work, lapack_int lwork)
itype, jobz, uplo, n, a + lda, b + ldb, w (output), work / lwork. got that "g" for generalized energy and she's wearing it. ✨
🎀 the sygvd duo
lapack_int LAPACKE_ssygvd_work (int matrix_layout, lapack_int itype,
char jobz, char uplo, lapack_int n, float *a, lapack_int lda, float
*b, lapack_int ldb, float *w, float *work, lapack_int lwork,
lapack_int *iwork, lapack_int liwork)
lapack_int LAPACKE_dsygvd_work (int matrix_layout, lapack_int itype,
char jobz, char uplo, lapack_int n, double *a, lapack_int lda,
double *b, lapack_int ldb, double *w, double *work, lapack_int
lwork, lapack_int *iwork, lapack_int liwork)
sygv plus the integer-workspace upgrade — work / lwork AND iwork / liwork. the "d" said "give her everything." 🫶
🔥 the sygvx duo
lapack_int LAPACKE_ssygvx_work (int matrix_layout, lapack_int itype,
char jobz, char range, char uplo, lapack_int n, float *a, lapack_int
lda, float *b, lapack_int ldb, float vl, float vu, lapack_int il,
lapack_int iu, float abstol, lapack_int *m, float *w, float *z,
lapack_int ldz, float *work, lapack_int lwork, lapack_int *iwork,
lapack_int *ifail)
lapack_int LAPACKE_dsygvx_work (int matrix_layout, lapack_int itype,
char jobz, char range, char uplo, lapack_int n, double *a,
lapack_int lda, double *b, lapack_int ldb, double vl, double vu,
the absolute final boss roster of this batch — itype then the jobz, range, uplo trio, n, a + lda, b + ldb, vl, vu, and the signature keeps rolling into il, iu, abstol, m, w, z + ldz, work / lwork, iwork, ifail before it wraps up in the next stretch of this page. we are SO not done yet, bestie — hold the vibe. 💅🦋
okay so we're still deep in the prototype trenches and honestly? this is where the whole lapacke vibe really shows. 💅 first up, the tail end of the previous signature — the argument list just wrapped onto new lines, nothing sneaky:
lapack_int il, lapack_int iu, double abstol, lapack_int *m, double
*w, double *z, lapack_int ldz, double *work, lapack_int lwork,
lapack_int *iwork, lapack_int *ifail)
💖 the syrfs quartet
bestie, meet the syrfs squad — s, d, c, z prefixes, every one of them _work flavoured. clock the pattern: matrix_layout first, then uplo, n, nrhs, the a/lda + af/ldaf + ipiv combo, b/ldb, x/ldx, then the ferr/berr duo and your workspace. the c/z ones swap in complex types and add an rwork at the end, iconic as always ✨
lapack_int LAPACKE_ssyrfs_work (int matrix_layout, char uplo, lapack_int
n, lapack_int nrhs, const float *a, lapack_int lda, const float *af,
lapack_int ldaf, const lapack_int *ipiv, const float *b, lapack_int
ldb, float *x, lapack_int ldx, float *ferr, float *berr, float
*work, lapack_int *iwork)
lapack_int LAPACKE_dsyrfs_work (int matrix_layout, char uplo, lapack_int
n, lapack_int nrhs, const double *a, lapack_int lda, const double
*af, lapack_int ldaf, const lapack_int *ipiv, const double *b,
lapack_int ldb, double *x, lapack_int ldx, double *ferr, double
*berr, double *work, lapack_int *iwork)
lapack_int LAPACKE_csyrfs_work (int matrix_layout, char uplo, lapack_int
n, lapack_int nrhs, const lapack_complex_float *a, lapack_int lda,
const lapack_complex_float *af, lapack_int ldaf, const lapack_int
*ipiv, const lapack_complex_float *b, lapack_int ldb,
lapack_complex_float *x, lapack_int ldx, float *ferr, float *berr,
lapack_complex_float *work, float *rwork)
lapack_int LAPACKE_zsyrfs_work (int matrix_layout, char uplo, lapack_int
n, lapack_int nrhs, const lapack_complex_double *a, lapack_int lda,
const lapack_complex_double *af, lapack_int ldaf, const lapack_int
*ipiv, const lapack_complex_double *b, lapack_int ldb,
lapack_complex_double *x, lapack_int ldx, double *ferr, double
*berr, lapack_complex_double *work, double *rwork)
✨ the syrfsx glow-up
and then syrfsx said "let me make it bigger" 🎀 same four precisions, but now equed, s, rcond, plus the whole n_err_bnds / err_bnds_norm / err_bnds_comp / nparams / params situation is in the house. still got iwork (or rwork for the complex girlies) at the end. no cap, it's a lot of arguments and every single one is real.
lapack_int LAPACKE_ssyrfsx_work (int matrix_layout, char uplo, char
equed, lapack_int n, lapack_int nrhs, const float *a, lapack_int
lda, const float *af, lapack_int ldaf, const lapack_int *ipiv, const
float *s, const float *b, lapack_int ldb, float *x, lapack_int ldx,
float *rcond, float *berr, lapack_int n_err_bnds, float
*err_bnds_norm, float *err_bnds_comp, lapack_int nparams, float
*params, float *work, lapack_int *iwork)
lapack_int LAPACKE_dsyrfsx_work (int matrix_layout, char uplo, char
equed, lapack_int n, lapack_int nrhs, const double *a, lapack_int
lda, const double *af, lapack_int ldaf, const lapack_int *ipiv,
const double *s, const double *b, lapack_int ldb, double *x,
lapack_int ldx, double *rcond, double *berr, lapack_int n_err_bnds,
double *err_bnds_norm, double *err_bnds_comp, lapack_int nparams,
double *params, double *work, lapack_int *iwork)
lapack_int LAPACKE_csyrfsx_work (int matrix_layout, char uplo, char
equed, lapack_int n, lapack_int nrhs, const lapack_complex_float *a,
lapack_int lda, const lapack_complex_float *af, lapack_int ldaf,
const lapack_int *ipiv, const float *s, const lapack_complex_float
*b, lapack_int ldb, lapack_complex_float *x, lapack_int ldx, float
*rcond, float *berr, lapack_int n_err_bnds, float *err_bnds_norm,
float *err_bnds_comp, lapack_int nparams, float *params,
lapack_complex_float *work, float *rwork)
lapack_int LAPACKE_zsyrfsx_work (int matrix_layout, char uplo, char
equed, lapack_int n, lapack_int nrhs, const lapack_complex_double
*a, lapack_int lda, const lapack_complex_double *af, lapack_int
ldaf, const lapack_int *ipiv, const double *s, const
lapack_complex_double *b, lapack_int ldb, lapack_complex_double *x,
lapack_int ldx, double *rcond, double *berr, lapack_int n_err_bnds,
double *err_bnds_norm, double *err_bnds_comp, lapack_int nparams,
double *params, lapack_complex_double *work, double *rwork)
🦋 sysv says hi
sysv time, and yes these are the _work versions — work and lwork are literally in the signature, so you're the one bringing the buffer, bestie 🫶 four precisions, same shape every time:
lapack_int LAPACKE_ssysv_work (int matrix_layout, char uplo, lapack_int
n, lapack_int nrhs, float *a, lapack_int lda, lapack_int *ipiv,
float *b, lapack_int ldb, float *work, lapack_int lwork)
lapack_int LAPACKE_dsysv_work (int matrix_layout, char uplo, lapack_int
n, lapack_int nrhs, double *a, lapack_int lda, lapack_int *ipiv,
double *b, lapack_int ldb, double *work, lapack_int lwork)
lapack_int LAPACKE_csysv_work (int matrix_layout, char uplo, lapack_int
n, lapack_int nrhs, lapack_complex_float *a, lapack_int lda,
lapack_int *ipiv, lapack_complex_float *b, lapack_int ldb,
lapack_complex_float *work, lapack_int lwork)
lapack_int LAPACKE_zsysv_work (int matrix_layout, char uplo, lapack_int
n, lapack_int nrhs, lapack_complex_double *a, lapack_int lda,
lapack_int *ipiv, lapack_complex_double *b, lapack_int ldb,
lapack_complex_double *work, lapack_int lwork)
🌸 sysvx entered the chat
now with fact up front, af/ldaf, ipiv, and the rcond/ferr/berr trio — plus lwork and iwork (or rwork for c/z). it's giving "extended version, director's cut" 😭
lapack_int LAPACKE_ssysvx_work (int matrix_layout, char fact, char uplo,
lapack_int n, lapack_int nrhs, const float *a, lapack_int lda, float
*af, lapack_int ldaf, lapack_int *ipiv, const float *b, lapack_int
ldb, float *x, lapack_int ldx, float *rcond, float *ferr, float
*berr, float *work, lapack_int lwork, lapack_int *iwork)
lapack_int LAPACKE_dsysvx_work (int matrix_layout, char fact, char uplo,
lapack_int n, lapack_int nrhs, const double *a, lapack_int lda,
double *af, lapack_int ldaf, lapack_int *ipiv, const double *b,
lapack_int ldb, double *x, lapack_int ldx, double *rcond, double
*ferr, double *berr, double *work, lapack_int lwork, lapack_int
*iwork)
lapack_int LAPACKE_csysvx_work (int matrix_layout, char fact, char uplo,
lapack_int n, lapack_int nrhs, const lapack_complex_float *a,
lapack_int lda, lapack_complex_float *af, lapack_int ldaf,
lapack_int *ipiv, const lapack_complex_float *b, lapack_int ldb,
lapack_complex_float *x, lapack_int ldx, float *rcond, float *ferr,
float *berr, lapack_complex_float *work, lapack_int lwork, float
*rwork)
lapack_int LAPACKE_zsysvx_work (int matrix_layout, char fact, char uplo,
lapack_int n, lapack_int nrhs, const lapack_complex_double *a,
lapack_int lda, lapack_complex_double *af, lapack_int ldaf,
lapack_int *ipiv, const lapack_complex_double *b, lapack_int ldb,
lapack_complex_double *x, lapack_int ldx, double *rcond, double
*ferr, double *berr, lapack_complex_double *work, lapack_int lwork,
double *rwork)
👑 sysvxx — maximalist queen
and then there's sysvxx, which looked at sysvx and said "add everything" 💀 fact, uplo, equed, s, b, x, rcond, and rpvgrw, and berr, and n_err_bnds, err_bnds_norm, err_bnds_comp, nparams, params, work, iwork/rwork. forty-seven-ish arguments and not a single one is filler. periodt.
lapack_int LAPACKE_ssysvxx_work (int matrix_layout, char fact, char
uplo, lapack_int n, lapack_int nrhs, float *a, lapack_int lda, float
*af, lapack_int ldaf, lapack_int *ipiv, char *equed, float *s, float
*b, lapack_int ldb, float *x, lapack_int ldx, float *rcond, float
*rpvgrw, float *berr, lapack_int n_err_bnds, float *err_bnds_norm,
float *err_bnds_comp, lapack_int nparams, float *params, float
*work, lapack_int *iwork)
lapack_int LAPACKE_dsysvxx_work (int matrix_layout, char fact, char
uplo, lapack_int n, lapack_int nrhs, double *a, lapack_int lda,
double *af, lapack_int ldaf, lapack_int *ipiv, char *equed, double
*s, double *b, lapack_int ldb, double *x, lapack_int ldx, double
*rcond, double *rpvgrw, double *berr, lapack_int n_err_bnds, double
*err_bnds_norm, double *err_bnds_comp, lapack_int nparams, double
*params, double *work, lapack_int *iwork)
lapack_int LAPACKE_csysvxx_work (int matrix_layout, char fact, char
uplo, lapack_int n, lapack_int nrhs, lapack_complex_float *a,
lapack_int lda, lapack_complex_float *af, lapack_int ldaf,
lapack_int *ipiv, char *equed, float *s, lapack_complex_float *b,
lapack_int ldb, lapack_complex_float *x, lapack_int ldx, float
*rcond, float *rpvgrw, float *berr, lapack_int n_err_bnds, float
*err_bnds_norm, float *err_bnds_comp, lapack_int nparams, float
*params, lapack_complex_float *work, float *rwork)
lapack_int LAPACKE_zsysvxx_work (int matrix_layout, char fact, char
uplo, lapack_int n, lapack_int nrhs, lapack_complex_double *a,
lapack_int lda, lapack_complex_double *af, lapack_int ldaf,
lapack_int *ipiv, char *equed, double *s, lapack_complex_double *b,
lapack_int ldb, lapack_complex_double *x, lapack_int ldx, double
*rcond, double *rpvgrw, double *berr, lapack_int n_err_bnds, double
*err_bnds_norm, double *err_bnds_comp, lapack_int nparams, double
*params, lapack_complex_double *work, double *rwork)
🎀 sytrd (the little pair)
just two of these — ssytrd_work and dsytrd_work — and look, d, e, and tau said hi 👋 real precision only, no complex here, don't come for me, that's literally what's written.
lapack_int LAPACKE_ssytrd_work (int matrix_layout, char uplo, lapack_int
n, float *a, lapack_int lda, float *d, float *e, float *tau, float
*work, lapack_int lwork)
lapack_int LAPACKE_dsytrd_work (int matrix_layout, char uplo, lapack_int
n, double *a, lapack_int lda, double *d, double *e, double *tau,
double *work, lapack_int lwork)
🧚 sytrf quartet
back to all four precisions — ipiv and work/lwork are the moment. copy-paste energy but make it ✨ intentional ✨
lapack_int LAPACKE_ssytrf_work (int matrix_layout, char uplo, lapack_int
n, float *a, lapack_int lda, lapack_int *ipiv, float *work,
lapack_int lwork)
lapack_int LAPACKE_dsytrf_work (int matrix_layout, char uplo, lapack_int
n, double *a, lapack_int lda, lapack_int *ipiv, double *work,
lapack_int lwork)
lapack_int LAPACKE_csytrf_work (int matrix_layout, char uplo, lapack_int
n, lapack_complex_float *a, lapack_int lda, lapack_int *ipiv,
lapack_complex_float *work, lapack_int lwork)
lapack_int LAPACKE_zsytrf_work (int matrix_layout, char uplo, lapack_int
n, lapack_complex_double *a, lapack_int lda, lapack_int *ipiv,
lapack_complex_double *work, lapack_int lwork)
💜 sytri quartet
note the const lapack_int *ipiv and the work pointer — and no lwork, bestie, that's not a typo, that is the signature. slay 🌈
lapack_int LAPACKE_ssytri_work (int matrix_layout, char uplo, lapack_int
n, float *a, lapack_int lda, const lapack_int *ipiv, float *work)
lapack_int LAPACKE_dsytri_work (int matrix_layout, char uplo, lapack_int
n, double *a, lapack_int lda, const lapack_int *ipiv, double *work)
lapack_int LAPACKE_csytri_work (int matrix_layout, char uplo, lapack_int
n, lapack_complex_float *a, lapack_int lda, const lapack_int *ipiv,
lapack_complex_float *work)
lapack_int LAPACKE_zsytri_work (int matrix_layout, char uplo, lapack_int
n, lapack_complex_double *a, lapack_int lda, const lapack_int *ipiv,
lapack_complex_double *work)
🍓 sytrs quartet
and sytrs is the lowkey minimal one — const on a and ipiv, and genuinely no work/lwork anywhere in sight. cute, clean, done. ⭐
lapack_int LAPACKE_ssytrs_work (int matrix_layout, char uplo, lapack_int
n, lapack_int nrhs, const float *a, lapack_int lda, const lapack_int
*ipiv, float *b, lapack_int ldb)
lapack_int LAPACKE_dsytrs_work (int matrix_layout, char uplo, lapack_int
n, lapack_int nrhs, const double *a, lapack_int lda, const
lapack_int *ipiv, double *b, lapack_int ldb)
lapack_int LAPACKE_csytrs_work (int matrix_layout, char uplo, lapack_int
n, lapack_int nrhs, const lapack_complex_float *a, lapack_int lda,
const lapack_int *ipiv, lapack_complex_float *b, lapack_int ldb)
lapack_int LAPACKE_zsytrs_work (int matrix_layout, char uplo, lapack_int
n, lapack_int nrhs, const lapack_complex_double *a, lapack_int lda,
const lapack_int *ipiv, lapack_complex_double *b, lapack_int ldb)
💀 tbcon — and we cut mid-signature
last bit of this part: stbcon_work in full, then dtbcon_work starts and the page just... runs out. 🫠 new characters in the chat — norm, diag, kd, ab, ldab, rcond, work, iwork — so clock them now, and don't panic, dtbcon_work picks right back up in the next chunk.
lapack_int LAPACKE_stbcon_work (int matrix_layout, char norm, char uplo,
char diag, lapack_int n, lapack_int kd, const float *ab, lapack_int
ldab, float *rcond, float *work, lapack_int *iwork)
lapack_int LAPACKE_dtbcon_work (int matrix_layout, char norm, char uplo,
...aaand this one's the tail end of the double-precision tbcon buddy, mid-sentence and all — picking it up right where the page left off:
char diag, lapack_int n, lapack_int kd, const double *ab, lapack_int
ldab, double *rcond, double *work, lapack_int *iwork)
lapack_int LAPACKE_ctbcon_work (int matrix_layout, char norm, char uplo,
char diag, lapack_int n, lapack_int kd, const lapack_complex_float
*ab, lapack_int ldab, float *rcond, lapack_complex_float *work,
float *rwork)
lapack_int LAPACKE_ztbcon_work (int matrix_layout, char norm, char uplo,
char diag, lapack_int n, lapack_int kd, const lapack_complex_double
*ab, lapack_int ldab, double *rcond, lapack_complex_double *work,
double *rwork)
okay so the tbcon crew is COMPLETE 🎉 that's your triangular band condition-number estimators, all four flavours, and yes the complex ones get an extra rwork because complex math gotta have its little real-valued sidekick 🫶
🌸 the tbrfs girlies — triangular band, refine & error-bound
<img>no — okay, no HTML, my bad, just vibes</img>
Bestie. This is the "hey, we already solved this, but like... how wrong are we?" family. Four precisions, and the complex ones again bring rwork along like a plus-one 💅
lapack_int LAPACKE_stbrfs_work (int matrix_layout, char uplo, char
trans, char diag, lapack_int n, lapack_int kd, lapack_int nrhs,
const float *ab, lapack_int ldab, const float *b, lapack_int ldb,
const float *x, lapack_int ldx, float *ferr, float *berr, float
*work, lapack_int *iwork)
lapack_int LAPACKE_dtbrfs_work (int matrix_layout, char uplo, char
trans, char diag, lapack_int n, lapack_int kd, lapack_int nrhs,
const double *ab, lapack_int ldab, const double *b, lapack_int ldb,
const double *x, lapack_int ldx, double *ferr, double *berr, double
*work, lapack_int *iwork)
lapack_int LAPACKE_ctbrfs_work (int matrix_layout, char uplo, char
trans, char diag, lapack_int n, lapack_int kd, lapack_int nrhs,
const lapack_complex_float *ab, lapack_int ldab, const
lapack_complex_float *b, lapack_int ldb, const lapack_complex_float
*x, lapack_int ldx, float *ferr, float *berr, lapack_complex_float
*work, float *rwork)
lapack_int LAPACKE_ztbrfs_work (int matrix_layout, char uplo, char
trans, char diag, lapack_int n, lapack_int kd, lapack_int nrhs,
const lapack_complex_double *ab, lapack_int ldab, const
lapack_complex_double *b, lapack_int ldb, const
lapack_complex_double *x, lapack_int ldx, double *ferr, double
*berr, lapack_complex_double *work, double *rwork)
Note how they all take ferr and berr — two whole error outputs, like, they really said "you're getting both, don't argue" 😭
✨ tbtrs — triangular band, actually solving it
lapack_int LAPACKE_stbtrs_work (int matrix_layout, char uplo, char
trans, char diag, lapack_int n, lapack_int kd, lapack_int nrhs,
const float *ab, lapack_int ldab, float *b, lapack_int ldb)
lapack_int LAPACKE_dtbtrs_work (int matrix_layout, char uplo, char
trans, char diag, lapack_int n, lapack_int kd, lapack_int nrhs,
const double *ab, lapack_int ldab, double *b, lapack_int ldb)
lapack_int LAPACKE_ctbtrs_work (int matrix_layout, char uplo, char
trans, char diag, lapack_int n, lapack_int kd, lapack_int nrhs,
const lapack_complex_float *ab, lapack_int ldab,
lapack_complex_float *b, lapack_int ldb)
lapack_int LAPACKE_ztbtrs_work (int matrix_layout, char uplo, char
trans, char diag, lapack_int n, lapack_int kd, lapack_int nrhs,
const lapack_complex_double *ab, lapack_int ldab,
lapack_complex_double *b, lapack_int ldb)
look at these minimal queens — no work, no rwork, no iwork, just the absolute bare necessities 😌 the _work suffix is still there but honestly they're barely working, periodt.
🎀 tfsm — triangular, "R" storage, matrix-matrix solve
This is the one where the letter salad really pops off: transr, side, uplo, trans, diag — five whole chars before you even get to a number. Iconic honestly.
lapack_int LAPACKE_stfsm_work (int matrix_layout, char transr, char
side, char uplo, char trans, char diag, lapack_int m, lapack_int n,
float alpha, const float *a, float *b, lapack_int ldb)
lapack_int LAPACKE_dtfsm_work (int matrix_layout, char transr, char
side, char uplo, char trans, char diag, lapack_int m, lapack_int n,
double alpha, const double *a, double *b, lapack_int ldb)
lapack_int LAPACKE_ctfsm_work (int matrix_layout, char transr, char
side, char uplo, char trans, char diag, lapack_int m, lapack_int n,
lapack_complex_float alpha, const lapack_complex_float *a,
lapack_complex_float *b, lapack_int ldb)
lapack_int LAPACKE_ztfsm_work (int matrix_layout, char transr, char
side, char uplo, char trans, char diag, lapack_int m, lapack_int n,
lapack_complex_double alpha, const lapack_complex_double *a,
lapack_complex_double *b, lapack_int ldb)
alpha is by value in every single one of these, so yes, the scalar just walks on in 🚶♀️ no pointer, no drama.
🦋 tftri — triangular inverse, the short one
lapack_int LAPACKE_stftri_work (int matrix_layout, char transr, char
uplo, char diag, lapack_int n, float *a)
lapack_int LAPACKE_dtftri_work (int matrix_layout, char transr, char
uplo, char diag, lapack_int n, double *a)
lapack_int LAPACKE_ctftri_work (int matrix_layout, char transr, char
uplo, char diag, lapack_int n, lapack_complex_float *a)
lapack_int LAPACKE_ztftri_work (int matrix_layout, char transr, char
uplo, char diag, lapack_int n, lapack_complex_double *a)
Five arguments total. FIVE. That's it. That's the whole function. She's low-maintenance and she knows it 💅
💜 tfttp — packed triangular → packed triangular
The "I'm literally just reorganising myself" saga, part one. arf goes in (const, of course, she's not getting touched), ap comes out.
lapack_int LAPACKE_stfttp_work (int matrix_layout, char transr, char
uplo, lapack_int n, const float *arf, float *ap)
lapack_int LAPACKE_dtfttp_work (int matrix_layout, char transr, char
uplo, lapack_int n, const double *arf, double *ap)
lapack_int LAPACKE_ctfttp_work (int matrix_layout, char transr, char
uplo, lapack_int n, const lapack_complex_float *arf,
lapack_complex_float *ap)
lapack_int LAPACKE_ztfttp_work (int matrix_layout, char transr, char
uplo, lapack_int n, const lapack_complex_double *arf,
lapack_complex_double *ap)
🌈 tfttr — packed triangular → full triangular
Same energy, but this time the destination gets a real leading dimension (lda) because she's a whole full-storage array now. Glow-up behaviour ✨
lapack_int LAPACKE_stfttr_work (int matrix_layout, char transr, char
uplo, lapack_int n, const float *arf, float *a, lapack_int lda)
lapack_int LAPACKE_dtfttr_work (int matrix_layout, char transr, char
uplo, lapack_int n, const double *arf, double *a, lapack_int lda)
lapack_int LAPACKE_ctfttr_work (int matrix_layout, char transr, char
uplo, lapack_int n, const lapack_complex_float *arf,
lapack_complex_float *a, lapack_int lda)
lapack_int LAPACKE_ztfttr_work (int matrix_layout, char transr, char
uplo, lapack_int n, const lapack_complex_double *arf,
lapack_complex_double *a, lapack_int lda)
👑 tgevc — generalized eigenvectors, the fancy one
Okay this is a big signature and it deserves respect. Note select is a const lapack_logical * (a whole boolean array, not a char, not an int — lapack_logical, periodt), and the output count m is a lapack_int * because obviously she's gonna tell you how many she actually gave you.
lapack_int LAPACKE_stgevc_work (int matrix_layout, char side, char
howmny, const lapack_logical *select, lapack_int n, const float *s,
lapack_int lds, const float *p, lapack_int ldp, float *vl,
lapack_int ldvl, float *vr, lapack_int ldvr, lapack_int mm,
lapack_int *m, float *work)
lapack_int LAPACKE_dtgevc_work (int matrix_layout, char side, char
howmny, const lapack_logical *select, lapack_int n, const double *s,
lapack_int lds, const double *p, lapack_int ldp, double *vl,
lapack_int ldvl, double *vr, lapack_int ldvr, lapack_int mm,
lapack_int *m, double *work)
lapack_int LAPACKE_ctgevc_work (int matrix_layout, char side, char
howmny, const lapack_logical *select, lapack_int n, const
lapack_complex_float *s, lapack_int lds, const lapack_complex_float
*p, lapack_int ldp, lapack_complex_float *vl, lapack_int ldvl,
lapack_complex_float *vr, lapack_int ldvr, lapack_int mm, lapack_int
*m, lapack_complex_float *work, float *rwork)
lapack_int LAPACKE_ztgevc_work (int matrix_layout, char side, char
howmny, const lapack_logical *select, lapack_int n, const
lapack_complex_double *s, lapack_int lds, const
lapack_complex_double *p, lapack_int ldp, lapack_complex_double *vl,
lapack_int ldvl, lapack_complex_double *vr, lapack_int ldvr,
lapack_int mm, lapack_int *m, lapack_complex_double *work, double
*rwork)
Left vectors and right vectors, vl and vr, both with their own lds. Overachiever behaviour 🫶
heads up bestie: these taken,lds,ldp,ldvl,ldvr,mm— that is a LOT of integers that all have to agree with each other. Copy them character for character and don't get cute with reordering. 🙈
🔥 tgexc — swap two generalized eigenvalues, reorder arc
And here comes the plot twist: the complex versions of this one drop work/lwork entirely and take ifst / ilst as plain lapack_int values instead of pointers. Not a typo. That's just how she's built. 💀
lapack_int LAPACKE_stgexc_work (int matrix_layout, lapack_logical wantq,
lapack_logical wantz, lapack_int n, float *a, lapack_int lda, float
*b, lapack_int ldb, float *q, lapack_int ldq, float *z, lapack_int
ldz, lapack_int *ifst, lapack_int *ilst, float *work, lapack_int
lwork)
lapack_int LAPACKE_dtgexc_work (int matrix_layout, lapack_logical wantq,
lapack_logical wantz, lapack_int n, double *a, lapack_int lda,
double *b, lapack_int ldb, double *q, lapack_int ldq, double *z,
lapack_int ldz, lapack_int *ifst, lapack_int *ilst, double *work,
lapack_int lwork)
lapack_int LAPACKE_ctgexc_work (int matrix_layout, lapack_logical wantq,
lapack_logical wantz, lapack_int n, lapack_complex_float *a,
lapack_int lda, lapack_complex_float *b, lapack_int ldb,
lapack_complex_float *q, lapack_int ldq, lapack_complex_float *z,
lapack_int ldz, lapack_int ifst, lapack_int ilst)
lapack_int LAPACKE_ztgexc_work (int matrix_layout, lapack_logical wantq,
lapack_logical wantz, lapack_int n, lapack_complex_double *a,
lapack_int lda, lapack_complex_double *b, lapack_int ldb,
lapack_complex_double *q, lapack_int ldq, lapack_complex_double *z,
lapack_int ldz, lapack_int ifst, lapack_int ilst)
fr fr — check the s/d ones against the c/z ones before you compile. The signatures genuinely differ. Not me being dramatic, that's just on the page. 😭
🧚 tgsen — the "sel" of select, plus pl/pr/dif, plus work AND iwork
Biggest diva in the whole chunk. ijob, wantq, wantz, a select array, m, then pl, pr, dif, then work + lwork and iwork + liwork. She requires two different kinds of workspace. Two.
lapack_int LAPACKE_stgsen_work (int matrix_layout, lapack_int ijob,
lapack_logical wantq, lapack_logical wantz, const lapack_logical
*select, lapack_int n, float *a, lapack_int lda, float *b,
lapack_int ldb, float *alphar, float *alphai, float *beta, float *q,
lapack_int ldq, float *z, lapack_int ldz, lapack_int *m, float *pl,
float *pr, float *dif, float *work, lapack_int lwork, lapack_int
*iwork, lapack_int liwork)
lapack_int LAPACKE_dtgsen_work (int matrix_layout, lapack_int ijob,
lapack_logical wantq, lapack_logical wantz, const lapack_logical
*select, lapack_int n, double *a, lapack_int lda, double *b,
lapack_int ldb, double *alphar, double *alphai, double *beta, double
*q, lapack_int ldq, double *z, lapack_int ldz, lapack_int *m, double
*pl, double *pr, double *dif, double *work, lapack_int lwork,
lapack_int *iwork, lapack_int liwork)
lapack_int LAPACKE_ctgsen_work (int matrix_layout, lapack_int ijob,
lapack_logical wantq, lapack_logical wantz, const lapack_logical
*select, lapack_int n, lapack_complex_float *a, lapack_int lda,
lapack_complex_float *b, lapack_int ldb, lapack_complex_float
*alpha, lapack_complex_float *beta, lapack_complex_float *q,
lapack_int ldq, lapack_complex_float *z, lapack_int ldz, lapack_int
*m, float *pl, float *pr, float *dif, lapack_complex_float *work,
lapack_int lwork, lapack_int *iwork, lapack_int liwork)
lapack_int LAPACKE_ztgsen_work (int matrix_layout, lapack_int ijob,
lapack_logical wantq, lapack_logical wantz, const lapack_logical
*select, lapack_int n, lapack_complex_double *a, lapack_int lda,
lapack_complex_double *b, lapack_int ldb, lapack_complex_double
*alpha, lapack_complex_double *beta, lapack_complex_double *q,
lapack_int ldq, lapack_complex_double *z, lapack_int ldz, lapack_int
*m, double *pl, double *pr, double *dif, lapack_complex_double
*work, lapack_int lwork, lapack_int *iwork, lapack_int liwork)
tiny detail that matters: real flavours get alphar + alphai; complex flavours get one single alpha. Also pl, pr, dif stay real (float/double) even in the complex versions. Keep that in mind and don't "helpfully" complex-ify them 🙈
🍓 tgsja — the letters, the tolerances, and ncycle
Last up in this batch: jobu, jobv, jobq (three whole job chars, she's thorough), m, p, n, k, l, tolerances tola and tolb by value, then alpha, beta, u, v, q all with their own lds, plus work and finally ncycle as a lapack_int *.
lapack_int LAPACKE_stgsja_work (int matrix_layout, char jobu, char jobv,
char jobq, lapack_int m, lapack_int p, lapack_int n, lapack_int k,
lapack_int l, float *a, lapack_int lda, float *b, lapack_int ldb,
float tola, float tolb, float *alpha, float *beta, float *u,
lapack_int ldu, float *v, lapack_int ldv, float *q, lapack_int ldq,
float *work, lapack_int *ncycle)
lapack_int LAPACKE_dtgsja_work (int matrix_layout, char jobu, char jobv,
char jobq, lapack_int m, lapack_int p, lapack_int n, lapack_int k,
lapack_int l, double *a, lapack_int lda, double *b, lapack_int ldb,
double tola, double tolb, double *alpha, double *beta, double *u,
lapack_int ldu, double *v, lapack_int ldv, double *q, lapack_int
ldq, double *work, lapack_int *ncycle)
And that's where this chunk of the list runs out — more signatures incoming, don't you dare close the tab 💖
🫶 the tgsja girls (generalized, and yes they brought friends)
okay so first up, two tgsja prototypes — c for the float-complex vibe and z for the double-complex vibe. look at all those chars bestie, jobu, jobv, jobq, they really said "you're gonna tell me what to compute, I'm not guessing":
lapack_int LAPACKE_ctgsja_work (int matrix_layout, char jobu, char jobv,
char jobq, lapack_int m, lapack_int p, lapack_int n, lapack_int k,
lapack_int l, lapack_complex_float *a, lapack_int lda,
lapack_complex_float *b, lapack_int ldb, float tola, float tolb,
float *alpha, float *beta, lapack_complex_float *u, lapack_int ldu,
lapack_complex_float *v, lapack_int ldv, lapack_complex_float *q,
lapack_int ldq, lapack_complex_float *work, lapack_int *ncycle)
lapack_int LAPACKE_ztgsja_work (int matrix_layout, char jobu, char jobv,
char jobq, lapack_int m, lapack_int p, lapack_int n, lapack_int k,
lapack_int l, lapack_complex_double *a, lapack_int lda,
lapack_complex_double *b, lapack_int ldb, double tola, double tolb,
double *alpha, double *beta, lapack_complex_double *u, lapack_int
ldu, lapack_complex_double *v, lapack_int ldv, lapack_complex_double
*q, lapack_int ldq, lapack_complex_double *work, lapack_int *ncycle)
note the tola / tolb float-and-double situation, and ncycle at the very end living its best pointer life 💅
🌸 tgsna — four of them, one per precision
job, howmny, select, and then the whole s / dif moment with mm and m — yeah she's thorough. single precision <red>*s*</red> and <red>*dif*</red>, double precision versions too:
lapack_int LAPACKE_stgsna_work (int matrix_layout, char job, char
howmny, const lapack_logical *select, lapack_int n, const float *a,
lapack_int lda, const float *b, lapack_int ldb, const float *vl,
lapack_int ldvl, const float *vr, lapack_int ldvr, float *s, float
*dif, lapack_int mm, lapack_int *m, float *work, lapack_int lwork,
lapack_int *iwork)
lapack_int LAPACKE_dtgsna_work (int matrix_layout, char job, char
howmny, const lapack_logical *select, lapack_int n, const double *a,
lapack_int lda, const double *b, lapack_int ldb, const double *vl,
lapack_int ldvl, const double *vr, lapack_int ldvr, double *s,
double *dif, lapack_int mm, lapack_int *m, double *work, lapack_int
lwork, lapack_int *iwork)
lapack_int LAPACKE_ctgsna_work (int matrix_layout, char job, char
howmny, const lapack_logical *select, lapack_int n, const
lapack_complex_float *a, lapack_int lda, const lapack_complex_float
*b, lapack_int ldb, const lapack_complex_float *vl, lapack_int ldvl,
const lapack_complex_float *vr, lapack_int ldvr, float *s, float
*dif, lapack_int mm, lapack_int *m, lapack_complex_float *work,
lapack_int lwork, lapack_int *iwork)
lapack_int LAPACKE_ztgsna_work (int matrix_layout, char job, char
howmny, const lapack_logical *select, lapack_int n, const
lapack_complex_double *a, lapack_int lda, const
lapack_complex_double *b, lapack_int ldb, const
lapack_complex_double *vl, lapack_int ldvl, const
lapack_complex_double *vr, lapack_int ldvr, double *s, double *dif,
lapack_int mm, lapack_int *m, lapack_complex_double *work,
lapack_int lwork, lapack_int *iwork)
👀 the complex ones keep <pink>*s*</pink> and <pink>*dif*</pink> as real types (float / double) while the matrices go complex — iconic behaviour, no notes.
🦋 tgsyl — same lineup, now with <purple>ijob</purple> and trans
ijob is a lapack_int here, not a char, so bestie really said "numbers only". a b c d e f and then scale, dif, work, iwork because obviously:
lapack_int LAPACKE_stgsyl_work (int matrix_layout, char trans,
lapack_int ijob, lapack_int m, lapack_int n, const float *a,
lapack_int lda, const float *b, lapack_int ldb, float *c, lapack_int
ldc, const float *d, lapack_int ldd, const float *e, lapack_int lde,
float *f, lapack_int ldf, float *scale, float *dif, float *work,
lapack_int lwork, lapack_int *iwork)
lapack_int LAPACKE_dtgsyl_work (int matrix_layout, char trans,
lapack_int ijob, lapack_int m, lapack_int n, const double *a,
lapack_int lda, const double *b, lapack_int ldb, double *c,
lapack_int ldc, const double *d, lapack_int ldd, const double *e,
lapack_int lde, double *f, lapack_int ldf, double *scale, double
*dif, double *work, lapack_int lwork, lapack_int *iwork)
lapack_int LAPACKE_ctgsyl_work (int matrix_layout, char trans,
lapack_int ijob, lapack_int m, lapack_int n, const
lapack_complex_float *a, lapack_int lda, const lapack_complex_float
*b, lapack_int ldb, lapack_complex_float *c, lapack_int ldc, const
lapack_complex_float *d, lapack_int ldd, const lapack_complex_float
*e, lapack_int lde, lapack_complex_float *f, lapack_int ldf, float
*scale, float *dif, lapack_complex_float *work, lapack_int lwork,
lapack_int *iwork)
lapack_int LAPACKE_ztgsyl_work (int matrix_layout, char trans,
lapack_int ijob, lapack_int m, lapack_int n, const
lapack_complex_double *a, lapack_int lda, const
lapack_complex_double *b, lapack_int ldb, lapack_complex_double *c,
lapack_int ldc, const lapack_complex_double *d, lapack_int ldd,
const lapack_complex_double *e, lapack_int lde,
lapack_complex_double *f, lapack_int ldf, double *scale, double
*dif, lapack_complex_double *work, lapack_int lwork, lapack_int
*iwork)
🎀 welcome to the packed-triangular era (tp gang, we stan)
so from here on the names all start with ?tp and honestly the way they rolled out norm, uplo, diag, ap… it's giving "I memorized the whole grid". tpcon squad, all four:
lapack_int LAPACKE_stpcon_work (int matrix_layout, char norm, char uplo,
char diag, lapack_int n, const float *ap, float *rcond, float *work,
lapack_int *iwork)
lapack_int LAPACKE_dtpcon_work (int matrix_layout, char norm, char uplo,
char diag, lapack_int n, const double *ap, double *rcond, double
*work, lapack_int *iwork)
lapack_int LAPACKE_ctpcon_work (int matrix_layout, char norm, char uplo,
char diag, lapack_int n, const lapack_complex_float *ap, float
*rcond, lapack_complex_float *work, float *rwork)
lapack_int LAPACKE_ztpcon_work (int matrix_layout, char norm, char uplo,
char diag, lapack_int n, const lapack_complex_double *ap, double
*rcond, lapack_complex_double *work, double *rwork)
the complex ones swap iwork for a real rwork btw — ctpcon gets float *rwork, ztpcon gets double *rwork, and the real ones keep their lapack_int *iwork. slay, different strokes 🫶
tprfs next, and now we have trans, nrhs, b, x, plus the error-estimate duo ferr and berr:
lapack_int LAPACKE_stprfs_work (int matrix_layout, char uplo, char
trans, char diag, lapack_int n, lapack_int nrhs, const float *ap,
const float *b, lapack_int ldb, const float *x, lapack_int ldx,
float *ferr, float *berr, float *work, lapack_int *iwork)
lapack_int LAPACKE_dtprfs_work (int matrix_layout, char uplo, char
trans, char diag, lapack_int n, lapack_int nrhs, const double *ap,
const double *b, lapack_int ldb, const double *x, lapack_int ldx,
double *ferr, double *berr, double *work, lapack_int *iwork)
lapack_int LAPACKE_ctprfs_work (int matrix_layout, char uplo, char
trans, char diag, lapack_int n, lapack_int nrhs, const
lapack_complex_float *ap, const lapack_complex_float *b, lapack_int
ldb, const lapack_complex_float *x, lapack_int ldx, float *ferr,
float *berr, lapack_complex_float *work, float *rwork)
lapack_int LAPACKE_ztprfs_work (int matrix_layout, char uplo, char
trans, char diag, lapack_int n, lapack_int nrhs, const
lapack_complex_double *ap, const lapack_complex_double *b,
lapack_int ldb, const lapack_complex_double *x, lapack_int ldx,
double *ferr, double *berr, lapack_complex_double *work, double
*rwork)
tptri is the short one and honestly, shortest king energy — no nrhs, no work, just vibes:
lapack_int LAPACKE_stptri_work (int matrix_layout, char uplo, char diag,
lapack_int n, float *ap)
lapack_int LAPACKE_dtptri_work (int matrix_layout, char uplo, char diag,
lapack_int n, double *ap)
lapack_int LAPACKE_ctptri_work (int matrix_layout, char uplo, char diag,
lapack_int n, lapack_complex_float *ap)
lapack_int LAPACKE_ztptri_work (int matrix_layout, char uplo, char diag,
lapack_int n, lapack_complex_double *ap)
tptrs — she's a solver-coded girlie, trans, diag, nrhs, ap, b, ldb, done:
lapack_int LAPACKE_stptrs_work (int matrix_layout, char uplo, char
trans, char diag, lapack_int n, lapack_int nrhs, const float *ap,
float *b, lapack_int ldb)
lapack_int LAPACKE_dtptrs_work (int matrix_layout, char uplo, char
trans, char diag, lapack_int n, lapack_int nrhs, const double *ap,
double *b, lapack_int ldb)
lapack_int LAPACKE_ctptrs_work (int matrix_layout, char uplo, char
trans, char diag, lapack_int n, lapack_int nrhs, const
lapack_complex_float *ap, lapack_complex_float *b, lapack_int ldb)
lapack_int LAPACKE_ztptrs_work (int matrix_layout, char uplo, char
trans, char diag, lapack_int n, lapack_int nrhs, const
lapack_complex_double *ap, lapack_complex_double *b, lapack_int ldb)
then the format-shifters: tpttf takes transr + uplo and hands you an arf, tpttr takes uplo and hands you a full a with an lda:
lapack_int LAPACKE_stpttf_work (int matrix_layout, char transr, char
uplo, lapack_int n, const float *ap, float *arf)
lapack_int LAPACKE_dtpttf_work (int matrix_layout, char transr, char
uplo, lapack_int n, const double *ap, double *arf)
lapack_int LAPACKE_ctpttf_work (int matrix_layout, char transr, char
uplo, lapack_int n, const lapack_complex_float *ap,
lapack_complex_float *arf)
lapack_int LAPACKE_ztpttf_work (int matrix_layout, char transr, char
uplo, lapack_int n, const lapack_complex_double *ap,
lapack_complex_double *arf)
lapack_int LAPACKE_stpttr_work (int matrix_layout, char uplo, lapack_int
n, const float *ap, float *a, lapack_int lda)
lapack_int LAPACKE_dtpttr_work (int matrix_layout, char uplo, lapack_int
n, const double *ap, double *a, lapack_int lda)
lapack_int LAPACKE_ctpttr_work (int matrix_layout, char uplo, lapack_int
n, const lapack_complex_float *ap, lapack_complex_float *a,
lapack_int lda)
lapack_int LAPACKE_ztpttr_work (int matrix_layout, char uplo, lapack_int
n, const lapack_complex_double *ap, lapack_complex_double *a,
lapack_int lda)
look at transr for tpttf vs plain uplo for tpttr — one extra letter, huge difference, iykyk 💖
🌈 plain tr triangular era: trcon
yes she has an lda now because we left packed-land, and yes rcond is still the main character:
lapack_int LAPACKE_strcon_work (int matrix_layout, char norm, char uplo,
char diag, lapack_int n, const float *a, lapack_int lda, float
*rcond, float *work, lapack_int *iwork)
lapack_int LAPACKE_dtrcon_work (int matrix_layout, char norm, char uplo,
char diag, lapack_int n, const double *a, lapack_int lda, double
*rcond, double *work, lapack_int *iwork)
lapack_int LAPACKE_ctrcon_work (int matrix_layout, char norm, char uplo,
char diag, lapack_int n, const lapack_complex_float *a, lapack_int
lda, float *rcond, lapack_complex_float *work, float *rwork)
lapack_int LAPACKE_ztrcon_work (int matrix_layout, char norm, char uplo,
char diag, lapack_int n, const lapack_complex_double *a, lapack_int
lda, double *rcond, lapack_complex_double *work, double *rwork)
⭐ trevc — eigenvectors entered the chat
side, howmny, select, vl/vr with their own ldvl/ldvr, then mm in and *m out. note that in the real versions select is a non-const lapack_logical *, but in the complex ones it's const lapack_logical * — do not mix those up bestie, that's the kind of thing that ruins your whole Tuesday 😭
lapack_int LAPACKE_strevc_work (int matrix_layout, char side, char
howmny, lapack_logical *select, lapack_int n, const float *t,
lapack_int ldt, float *vl, lapack_int ldvl, float *vr, lapack_int
ldvr, lapack_int mm, lapack_int *m, float *work)
lapack_int LAPACKE_dtrevc_work (int matrix_layout, char side, char
howmny, lapack_logical *select, lapack_int n, const double *t,
lapack_int ldt, double *vl, lapack_int ldvl, double *vr, lapack_int
ldvr, lapack_int mm, lapack_int *m, double *work)
lapack_int LAPACKE_ctrevc_work (int matrix_layout, char side, char
howmny, const lapack_logical *select, lapack_int n,
lapack_complex_float *t, lapack_int ldt, lapack_complex_float *vl,
lapack_int ldvl, lapack_complex_float *vr, lapack_int ldvr,
lapack_int mm, lapack_int *m, lapack_complex_float *work, float
*rwork)
lapack_int LAPACKE_ztrevc_work (int matrix_layout, char side, char
howmny, const lapack_logical *select, lapack_int n,
lapack_complex_double *t, lapack_int ldt, lapack_complex_double *vl,
lapack_int ldvl, lapack_complex_double *vr, lapack_int ldvr,
lapack_int mm, lapack_int *m, lapack_complex_double *work, double
*rwork)
and then trexc starts, with a compq that we're absolutely gonna finish talking about in the next bit 👑
lapack_int LAPACKE_strexc_work (int matrix_layout, char compq,
...and we're still out here in prototype city, bestie, no thoughts just _work routines 💅 Picking up exactly where we left off:
lapack_int n, float *t, lapack_int ldt, float *q, lapack_int ldq,
lapack_int *ifst, lapack_int *ilst, float *work)
lapack_int LAPACKE_dtrexc_work (int matrix_layout, char compq,
lapack_int n, double *t, lapack_int ldt, double *q, lapack_int ldq,
lapack_int *ifst, lapack_int *ilst, double *work)
lapack_int LAPACKE_ctrexc_work (int matrix_layout, char compq,
lapack_int n, lapack_complex_float *t, lapack_int ldt,
lapack_complex_float *q, lapack_int ldq, lapack_int ifst, lapack_int
ilst)
lapack_int LAPACKE_ztrexc_work (int matrix_layout, char compq,
lapack_int n, lapack_complex_double *t, lapack_int ldt,
lapack_complex_double *q, lapack_int ldq, lapack_int ifst,
lapack_int ilst)
trexc squad, reordered and ready ✨ and yeah, clock the glow-up: the real ones take lapack_int *ifst / lapack_int *ilst (pointers, bestie) while the complex ones take plain lapack_int ifst / lapack_int ilst. That's just what the signatures say, don't come for me 😭
Next up, trrfs — the error-bound girlies, all four of them, with their ferr/berr moment 🎀
lapack_int LAPACKE_strrfs_work (int matrix_layout, char uplo, char
trans, char diag, lapack_int n, lapack_int nrhs, const float *a,
lapack_int lda, const float *b, lapack_int ldb, const float *x,
lapack_int ldx, float *ferr, float *berr, float *work, lapack_int
*iwork)
lapack_int LAPACKE_dtrrfs_work (int matrix_layout, char uplo, char
trans, char diag, lapack_int n, lapack_int nrhs, const double *a,
lapack_int lda, const double *b, lapack_int ldb, const double *x,
lapack_int ldx, double *ferr, double *berr, double *work, lapack_int
*iwork)
lapack_int LAPACKE_ctrrfs_work (int matrix_layout, char uplo, char
trans, char diag, lapack_int n, lapack_int nrhs, const
lapack_complex_float *a, lapack_int lda, const lapack_complex_float
*b, lapack_int ldb, const lapack_complex_float *x, lapack_int ldx,
float *ferr, float *berr, lapack_complex_float *work, float *rwork)
lapack_int LAPACKE_ztrrfs_work (int matrix_layout, char uplo, char
trans, char diag, lapack_int n, lapack_int nrhs, const
lapack_complex_double *a, lapack_int lda, const
lapack_complex_double *b, lapack_int ldb, const
lapack_complex_double *x, lapack_int ldx, double *ferr, double
*berr, lapack_complex_double *work, double *rwork)
lowkey obsessed with how c/z swap the lapack_int *iwork for a float *rwork / double *rwork. It's giving "same energy, different accessories" 🦋
Now the trsen girlies — select, wr, wi, m, s, sep, plus lwork and liwork, because she does the absolute most and we respect it 👑
lapack_int LAPACKE_strsen_work (int matrix_layout, char job, char compq,
const lapack_logical *select, lapack_int n, float *t, lapack_int
ldt, float *q, lapack_int ldq, float *wr, float *wi, lapack_int *m,
float *s, float *sep, float *work, lapack_int lwork, lapack_int
*iwork, lapack_int liwork)
lapack_int LAPACKE_dtrsen_work (int matrix_layout, char job, char compq,
const lapack_logical *select, lapack_int n, double *t, lapack_int
ldt, double *q, lapack_int ldq, double *wr, double *wi, lapack_int
*m, double *s, double *sep, double *work, lapack_int lwork,
lapack_int *iwork, lapack_int liwork)
lapack_int LAPACKE_ctrsen_work (int matrix_layout, char job, char compq,
const lapack_logical *select, lapack_int n, lapack_complex_float *t,
lapack_int ldt, lapack_complex_float *q, lapack_int ldq,
lapack_complex_float *w, lapack_int *m, float *s, float *sep,
lapack_complex_float *work, lapack_int lwork)
lapack_int LAPACKE_ztrsen_work (int matrix_layout, char job, char compq,
const lapack_logical *select, lapack_int n, lapack_complex_double
*t, lapack_int ldt, lapack_complex_double *q, lapack_int ldq,
lapack_complex_double *w, lapack_int *m, double *s, double *sep,
lapack_complex_double *work, lapack_int lwork)
Note the complex ones bring one w instead of wr + wi, and they drop iwork/liwork entirely. Main character efficiency, honestly 💅
trsna says hi with vl, vr, howmny, mm and a whole ldwork situation 🌸
lapack_int LAPACKE_strsna_work (int matrix_layout, char job, char
howmny, const lapack_logical *select, lapack_int n, const float *t,
lapack_int ldt, const float *vl, lapack_int ldvl, const float *vr,
lapack_int ldvr, float *s, float *sep, lapack_int mm, lapack_int *m,
float *work, lapack_int ldwork, lapack_int *iwork)
lapack_int LAPACKE_dtrsna_work (int matrix_layout, char job, char
howmny, const lapack_logical *select, lapack_int n, const double *t,
lapack_int ldt, const double *vl, lapack_int ldvl, const double *vr,
lapack_int ldvr, double *s, double *sep, lapack_int mm, lapack_int
*m, double *work, lapack_int ldwork, lapack_int *iwork)
lapack_int LAPACKE_ctrsna_work (int matrix_layout, char job, char
howmny, const lapack_logical *select, lapack_int n, const
lapack_complex_float *t, lapack_int ldt, const lapack_complex_float
*vl, lapack_int ldvl, const lapack_complex_float *vr, lapack_int
ldvr, float *s, float *sep, lapack_int mm, lapack_int *m,
lapack_complex_float *work, lapack_int ldwork, float *rwork)
lapack_int LAPACKE_ztrsna_work (int matrix_layout, char job, char
howmny, const lapack_logical *select, lapack_int n, const
lapack_complex_double *t, lapack_int ldt, const
lapack_complex_double *vl, lapack_int ldvl, const
lapack_complex_double *vr, lapack_int ldvr, double *s, double *sep,
lapack_int mm, lapack_int *m, lapack_complex_double *work,
lapack_int ldwork, double *rwork)
ldwork is a thing here, not lwork — read it twice, bestie, I'm not kidding 🙈 And again rwork for the complex girlies.
trsyl</> — wait, markdown: trsyl time, with trana, tranb, isgn, and the icon that is scale ⭐
lapack_int LAPACKE_strsyl_work (int matrix_layout, char trana, char
tranb, lapack_int isgn, lapack_int m, lapack_int n, const float *a,
lapack_int lda, const float *b, lapack_int ldb, float *c, lapack_int
ldc, float *scale)
lapack_int LAPACKE_dtrsyl_work (int matrix_layout, char trana, char
tranb, lapack_int isgn, lapack_int m, lapack_int n, const double *a,
lapack_int lda, const double *b, lapack_int ldb, double *c,
lapack_int ldc, double *scale)
lapack_int LAPACKE_ctrsyl_work (int matrix_layout, char trana, char
tranb, lapack_int isgn, lapack_int m, lapack_int n, const
lapack_complex_float *a, lapack_int lda, const lapack_complex_float
*b, lapack_int ldb, lapack_complex_float *c, lapack_int ldc, float
*scale)
lapack_int LAPACKE_ztrsyl_work (int matrix_layout, char trana, char
tranb, lapack_int isgn, lapack_int m, lapack_int n, const
lapack_complex_double *a, lapack_int lda, const
lapack_complex_double *b, lapack_int ldb, lapack_complex_double *c,
lapack_int ldc, double *scale)
No work array, no lwork — she's low-maintenance and that's iconic 🎀
trtri and trtrs, the tiny faves 💚
lapack_int LAPACKE_strtri_work (int matrix_layout, char uplo, char diag,
lapack_int n, float *a, lapack_int lda)
lapack_int LAPACKE_dtrtri_work (int matrix_layout, char uplo, char diag,
lapack_int n, double *a, lapack_int lda)
lapack_int LAPACKE_ctrtri_work (int matrix_layout, char uplo, char diag,
lapack_int n, lapack_complex_float *a, lapack_int lda)
lapack_int LAPACKE_ztrtri_work (int matrix_layout, char uplo, char diag,
lapack_int n, lapack_complex_double *a, lapack_int lda)
lapack_int LAPACKE_strtrs_work (int matrix_layout, char uplo, char
trans, char diag, lapack_int n, lapack_int nrhs, const float *a,
lapack_int lda, float *b, lapack_int ldb)
lapack_int LAPACKE_dtrtrs_work (int matrix_layout, char uplo, char
trans, char diag, lapack_int n, lapack_int nrhs, const double *a,
lapack_int lda, double *b, lapack_int ldb)
lapack_int LAPACKE_ctrtrs_work (int matrix_layout, char uplo, char
trans, char diag, lapack_int n, lapack_int nrhs, const
lapack_complex_float *a, lapack_int lda, lapack_complex_float *b,
lapack_int ldb)
lapack_int LAPACKE_ztrtrs_work (int matrix_layout, char uplo, char
trans, char diag, lapack_int n, lapack_int nrhs, const
lapack_complex_double *a, lapack_int lda, lapack_complex_double *b,
lapack_int ldb)
Look at that — no lwork anywhere in this whole block. A whole family with zero work arrays, we love a self-sufficient queen ✨
The trttf / trttp pack, aka the "pack it up, we're going triangular" duo 🦋
lapack_int LAPACKE_strttf_work (int matrix_layout, char transr, char
uplo, lapack_int n, const float *a, lapack_int lda, float *arf)
lapack_int LAPACKE_dtrttf_work (int matrix_layout, char transr, char
uplo, lapack_int n, const double *a, lapack_int lda, double *arf)
lapack_int LAPACKE_ctrttf_work (int matrix_layout, char transr, char
uplo, lapack_int n, const lapack_complex_float *a, lapack_int lda,
lapack_complex_float *arf)
lapack_int LAPACKE_ztrttf_work (int matrix_layout, char transr, char
uplo, lapack_int n, const lapack_complex_double *a, lapack_int lda,
lapack_complex_double *arf)
lapack_int LAPACKE_strttp_work (int matrix_layout, char uplo, lapack_int
n, const float *a, lapack_int lda, float *ap)
lapack_int LAPACKE_dtrttp_work (int matrix_layout, char uplo, lapack_int
n, const double *a, lapack_int lda, double *ap)
lapack_int LAPACKE_ctrttp_work (int matrix_layout, char uplo, lapack_int
n, const lapack_complex_float *a, lapack_int lda,
lapack_complex_float *ap)
lapack_int LAPACKE_ztrttp_work (int matrix_layout, char uplo, lapack_int
n, const lapack_complex_double *a, lapack_int lda,
lapack_complex_double *ap)
trttf gets a transr and outputs arf; trttp outputs ap and has no transr. Similar vibes, different destinies 💫
tzrzf — RZ factorization crew, tau and lwork included 🔥
lapack_int LAPACKE_stzrzf_work (int matrix_layout, lapack_int m,
lapack_int n, float *a, lapack_int lda, float *tau, float *work,
lapack_int lwork)
lapack_int LAPACKE_dtzrzf_work (int matrix_layout, lapack_int m,
lapack_int n, double *a, lapack_int lda, double *tau, double *work,
lapack_int lwork)
lapack_int LAPACKE_ctzrzf_work (int matrix_layout, lapack_int m,
lapack_int n, lapack_complex_float *a, lapack_int lda,
lapack_complex_float *tau, lapack_complex_float *work, lapack_int
lwork)
lapack_int LAPACKE_ztzrzf_work (int matrix_layout, lapack_int m,
lapack_int n, lapack_complex_double *a, lapack_int lda,
lapack_complex_double *tau, lapack_complex_double *work, lapack_int
lwork)
And now the unghr/ungbr/unglq/ungql complex-only era — note the c/z prefixes, there's no s/d here at all, this is a complex-only party 👑🧚
lapack_int LAPACKE_cungbr_work (int matrix_layout, char vect, lapack_int
m, lapack_int n, lapack_int k, lapack_complex_float *a, lapack_int
lda, const lapack_complex_float *tau, lapack_complex_float *work,
lapack_int lwork)
lapack_int LAPACKE_zungbr_work (int matrix_layout, char vect, lapack_int
m, lapack_int n, lapack_int k, lapack_complex_double *a, lapack_int
lda, const lapack_complex_double *tau, lapack_complex_double *work,
lapack_int lwork)
lapack_int LAPACKE_cunghr_work (int matrix_layout, lapack_int n,
lapack_int ilo, lapack_int ihi, lapack_complex_float *a, lapack_int
lda, const lapack_complex_float *tau, lapack_complex_float *work,
lapack_int lwork)
lapack_int LAPACKE_zunghr_work (int matrix_layout, lapack_int n,
lapack_int ilo, lapack_int ihi, lapack_complex_double *a, lapack_int
lda, const lapack_complex_double *tau, lapack_complex_double *work,
lapack_int lwork)
lapack_int LAPACKE_cunglq_work (int matrix_layout, lapack_int m,
lapack_int n, lapack_int k, lapack_complex_float *a, lapack_int lda,
const lapack_complex_float *tau, lapack_complex_float *work,
lapack_int lwork)
lapack_int LAPACKE_zunglq_work (int matrix_layout, lapack_int m,
lapack_int n, lapack_int k, lapack_complex_double *a, lapack_int
lda, const lapack_complex_double *tau, lapack_complex_double *work,
lapack_int lwork)
lapack_int LAPACKE_cungql_work (int matrix_layout, lapack_int m,
lapack_int n, lapack_int k, lapack_complex_float *a, lapack_int lda,
const lapack_complex_float *tau, lapack_complex_float *work,
lapack_int lwork)
lapack_int LAPACKE_zungql_work (int matrix_layout, lapack_int m,
...and yes, we're cutting off mid-signature again, because of course we are 😭 Hold that thought, bestie — next part picks it right back up 💖
…and we're picking up mid-signature, bestie, no big deal — this is the tail end of one of those _work prototypes:
lapack_int n, lapack_int k, lapack_complex_double *a, lapack_int
lda, const lapack_complex_double *tau, lapack_complex_double *work,
lapack_int lwork)
Then the full crew shows up 💅 — ungqr first, single-precision complex (c) and double-precision complex (z). You can literally clock which is which by the types: lapack_complex_float vs lapack_complex_double, no guessing needed:
lapack_int LAPACKE_cungqr_work (int matrix_layout, lapack_int m,
lapack_int n, lapack_int k, lapack_complex_float *a, lapack_int lda,
const lapack_complex_float *tau, lapack_complex_float *work,
lapack_int lwork)
lapack_int LAPACKE_zungqr_work (int matrix_layout, lapack_int m,
lapack_int n, lapack_int k, lapack_complex_double *a, lapack_int
lda, const lapack_complex_double *tau, lapack_complex_double *work,
lapack_int lwork)
Same energy, different last three letters — ungrq, and yes they both still take matrix_layout, m, n, k, a, lda, tau, work, lwork in that exact order 🎀
lapack_int LAPACKE_cungrq_work (int matrix_layout, lapack_int m,
lapack_int n, lapack_int k, lapack_complex_float *a, lapack_int lda,
const lapack_complex_float *tau, lapack_complex_float *work,
lapack_int lwork)
lapack_int LAPACKE_zungrq_work (int matrix_layout, lapack_int m,
lapack_int n, lapack_int k, lapack_complex_double *a, lapack_int
lda, const lapack_complex_double *tau, lapack_complex_double *work,
lapack_int lwork)
And then ungtr said "hold my uplo" — these swap the m/n/k trio for a char uplo and just n, iconic behaviour honestly:
lapack_int LAPACKE_cungtr_work (int matrix_layout, char uplo, lapack_int
n, lapack_complex_float *a, lapack_int lda, const
lapack_complex_float *tau, lapack_complex_float *work, lapack_int
lwork)
lapack_int LAPACKE_zungtr_work (int matrix_layout, char uplo, lapack_int
n, lapack_complex_double *a, lapack_int lda, const
lapack_complex_double *tau, lapack_complex_double *work, lapack_int
lwork)
Now entering the unm* cinematic universe 🌈 — all of them rock char side, char trans, m, n, k, plus a, lda, tau, c, ldc, work, lwork. First up unmbr, which adds a char vect before the side/trans duo:
lapack_int LAPACKE_cunmbr_work (int matrix_layout, char vect, char side,
char trans, lapack_int m, lapack_int n, lapack_int k, const
lapack_complex_float *a, lapack_int lda, const lapack_complex_float
*tau, lapack_complex_float *c, lapack_int ldc, lapack_complex_float
*work, lapack_int lwork)
lapack_int LAPACKE_zunmbr_work (int matrix_layout, char vect, char side,
char trans, lapack_int m, lapack_int n, lapack_int k, const
lapack_complex_double *a, lapack_int lda, const
lapack_complex_double *tau, lapack_complex_double *c, lapack_int
ldc, lapack_complex_double *work, lapack_int lwork)
unmhr doesn't do vect but it does bring ilo and ihi to the party, right after n. So it's matrix_layout, side, trans, m, n, ilo, ihi, then the whole a/lda/tau/c/ldc/work/lwork situation 🦋
lapack_int LAPACKE_cunmhr_work (int matrix_layout, char side, char
trans, lapack_int m, lapack_int n, lapack_int ilo, lapack_int ihi,
const lapack_complex_float *a, lapack_int lda, const
lapack_complex_float *tau, lapack_complex_float *c, lapack_int ldc,
lapack_complex_float *work, lapack_int lwork)
lapack_int LAPACKE_zunmhr_work (int matrix_layout, char side, char
trans, lapack_int m, lapack_int n, lapack_int ilo, lapack_int ihi,
const lapack_complex_double *a, lapack_int lda, const
lapack_complex_double *tau, lapack_complex_double *c, lapack_int
ldc, lapack_complex_double *work, lapack_int lwork)
Then the lq / ql / qr / rq / rz alphabet soup — back to the classic shape, side, trans, m, n, k, no ilo/ihi, no vect. Notes app open, bestie ✨
lapack_int LAPACKE_cunmlq_work (int matrix_layout, char side, char
trans, lapack_int m, lapack_int n, lapack_int k, const
lapack_complex_float *a, lapack_int lda, const lapack_complex_float
*tau, lapack_complex_float *c, lapack_int ldc, lapack_complex_float
*work, lapack_int lwork)
lapack_int LAPACKE_zunmlq_work (int matrix_layout, char side, char
trans, lapack_int m, lapack_int n, lapack_int k, const
lapack_complex_double *a, lapack_int lda, const
lapack_complex_double *tau, lapack_complex_double *c, lapack_int
ldc, lapack_complex_double *work, lapack_int lwork)
lapack_int LAPACKE_cunmql_work (int matrix_layout, char side, char
trans, lapack_int m, lapack_int n, lapack_int k, const
lapack_complex_float *a, lapack_int lda, const lapack_complex_float
*tau, lapack_complex_float *c, lapack_int ldc, lapack_complex_float
*work, lapack_int lwork)
lapack_int LAPACKE_zunmql_work (int matrix_layout, char side, char
trans, lapack_int m, lapack_int n, lapack_int k, const
lapack_complex_double *a, lapack_int lda, const
lapack_complex_double *tau, lapack_complex_double *c, lapack_int
ldc, lapack_complex_double *work, lapack_int lwork)
lapack_int LAPACKE_cunmqr_work (int matrix_layout, char side, char
trans, lapack_int m, lapack_int n, lapack_int k, const
lapack_complex_float *a, lapack_int lda, const lapack_complex_float
*tau, lapack_complex_float *c, lapack_int ldc, lapack_complex_float
*work, lapack_int lwork)
lapack_int LAPACKE_zunmqr_work (int matrix_layout, char side, char
trans, lapack_int m, lapack_int n, lapack_int k, const
lapack_complex_double *a, lapack_int lda, const
lapack_complex_double *tau, lapack_complex_double *c, lapack_int
ldc, lapack_complex_double *work, lapack_int lwork)
lapack_int LAPACKE_cunmrq_work (int matrix_layout, char side, char
trans, lapack_int m, lapack_int n, lapack_int k, const
lapack_complex_float *a, lapack_int lda, const lapack_complex_float
*tau, lapack_complex_float *c, lapack_int ldc, lapack_complex_float
*work, lapack_int lwork)
lapack_int LAPACKE_zunmrq_work (int matrix_layout, char side, char
trans, lapack_int m, lapack_int n, lapack_int k, const
lapack_complex_double *a, lapack_int lda, const
lapack_complex_double *tau, lapack_complex_double *c, lapack_int
ldc, lapack_complex_double *work, lapack_int lwork)
unmrz is the little overachiever of the group 🫶 — it sneaks in one extra lapack_int l between k and the big const parameter:
lapack_int LAPACKE_cunmrz_work (int matrix_layout, char side, char
trans, lapack_int m, lapack_int n, lapack_int k, lapack_int l, const
lapack_complex_float *a, lapack_int lda, const lapack_complex_float
*tau, lapack_complex_float *c, lapack_int ldc, lapack_complex_float
*work, lapack_int lwork)
lapack_int LAPACKE_zunmrz_work (int matrix_layout, char side, char
trans, lapack_int m, lapack_int n, lapack_int k, lapack_int l, const
lapack_complex_double *a, lapack_int lda, const
lapack_complex_double *tau, lapack_complex_double *c, lapack_int
ldc, lapack_complex_double *work, lapack_int lwork)
unmtr goes the other way and collects two chars — side, uplo, trans — then just m and n. No k in sight, periodt:
lapack_int LAPACKE_cunmtr_work (int matrix_layout, char side, char uplo,
char trans, lapack_int m, lapack_int n, const lapack_complex_float
*a, lapack_int lda, const lapack_complex_float *tau,
lapack_complex_float *c, lapack_int ldc, lapack_complex_float *work,
lapack_int lwork)
lapack_int LAPACKE_zunmtr_work (int matrix_layout, char side, char uplo,
char trans, lapack_int m, lapack_int n, const lapack_complex_double
*a, lapack_int lda, const lapack_complex_double *tau,
lapack_complex_double *c, lapack_int ldc, lapack_complex_double
*work, lapack_int lwork)
Then upgtr and upmtr — the packed-ap girlies 🌸. upgtr takes uplo, n, ap, tau, q, ldq, work (and work here has no lwork beside it, look closely):
lapack_int LAPACKE_cupgtr_work (int matrix_layout, char uplo, lapack_int
n, const lapack_complex_float *ap, const lapack_complex_float *tau,
lapack_complex_float *q, lapack_int ldq, lapack_complex_float *work)
lapack_int LAPACKE_zupgtr_work (int matrix_layout, char uplo, lapack_int
n, const lapack_complex_double *ap, const lapack_complex_double
*tau, lapack_complex_double *q, lapack_int ldq,
lapack_complex_double *work)
upmtr is the same packed-energy but with side, uplo, trans, m, n, and it's working on c with ldc instead of a q:
lapack_int LAPACKE_cupmtr_work (int matrix_layout, char side, char uplo,
char trans, lapack_int m, lapack_int n, const lapack_complex_float
*ap, const lapack_complex_float *tau, lapack_complex_float *c,
lapack_int ldc, lapack_complex_float *work)
lapack_int LAPACKE_zupmtr_work (int matrix_layout, char side, char uplo,
char trans, lapack_int m, lapack_int n, const lapack_complex_double
*ap, const lapack_complex_double *tau, lapack_complex_double *c,
lapack_int ldc, lapack_complex_double *work)
Okay and now for something completely different: the generator section 🔥 laghe and lagsy both take matrix_layout, n, k, a const d, then a, lda, and an lapack_int *iseed — note that d's type differs per precision (const float *d vs const double *d) while a follows the c/z complex split:
lapack_int LAPACKE_claghe (int matrix_layout, lapack_int n, lapack_int
k, const float *d, lapack_complex_float *a, lapack_int lda,
lapack_int *iseed)
lapack_int LAPACKE_zlaghe (int matrix_layout, lapack_int n, lapack_int
k, const double *d, lapack_complex_double *a, lapack_int lda,
lapack_int *iseed)
lapack_int LAPACKE_slagsy (int matrix_layout, lapack_int n, lapack_int
k, const float *d, float *a, lapack_int lda, lapack_int *iseed)
lapack_int LAPACKE_dlagsy (int matrix_layout, lapack_int n, lapack_int
k, const double *d, double *a, lapack_int lda, lapack_int *iseed)
lapack_int LAPACKE_clagsy (int matrix_layout, lapack_int n, lapack_int
k, const float *d, lapack_complex_float *a, lapack_int lda,
lapack_int *iseed)
lapack_int LAPACKE_zlagsy (int matrix_layout, lapack_int n, lapack_int
k, const double *d, lapack_complex_double *a, lapack_int lda,
lapack_int *iseed)
Next: lapmr and lapmt 🦋 — identical argument lists, both taking lapack_logical forwrd, m, n, x, ldx, lapack_int *k:
lapack_int LAPACKE_slapmr (int matrix_layout, lapack_logical forwrd,
lapack_int m, lapack_int n, float *x, lapack_int ldx, lapack_int *k)
lapack_int LAPACKE_dlapmr (int matrix_layout, lapack_logical forwrd,
lapack_int m, lapack_int n, double *x, lapack_int ldx, lapack_int
*k)
lapack_int LAPACKE_clapmr (int matrix_layout, lapack_logical forwrd,
lapack_int m, lapack_int n, lapack_complex_float *x, lapack_int ldx,
lapack_int *k)
lapack_int LAPACKE_zlapmr (int matrix_layout, lapack_logical forwrd,
lapack_int m, lapack_int n, lapack_complex_double *x, lapack_int
ldx, lapack_int *k)
lapack_int LAPACKE_slapmt (int matrix_layout, lapack_logical forwrd,
lapack_int m, lapack_int n, float *x, lapack_int ldx, lapack_int *k)
lapack_int LAPACKE_dlapmt (int matrix_layout, lapack_logical forwrd,
lapack_int m, lapack_int n, double *x, lapack_int ldx, lapack_int
*k)
lapack_int LAPACKE_clapmt (int matrix_layout, lapack_logical forwrd,
lapack_int m, lapack_int n, lapack_complex_float *x, lapack_int ldx,
lapack_int *k)
lapack_int LAPACKE_zlapmt (int matrix_layout, lapack_logical forwrd,
lapack_int m, lapack_int n, lapack_complex_double *x, lapack_int
ldx, lapack_int *k)
These next ones don't even take a matrix_layout 👑 — lapy2 returns a float (or double) straight up from two args, x and y:
float LAPACKE_slapy2 (float x, float y)
double LAPACKE_dlapy2 (double x, double y)
lapy3 is the same deal but with three args — x, y, z 💜
float LAPACKE_slapy3 (float x, float y, float z)
double LAPACKE_dlapy3 (double x, double y, double z)
lartgp is back to lapack_int return, taking f, g and writing into cs, sn, r. lartgs takes x, y, sigma and writes into cs, sn — note no r there 🙂↕️
lapack_int LAPACKE_slartgp (float f, float g, float *cs, float *sn,
float *r)
lapack_int LAPACKE_dlartgp (double f, double g, double *cs, double *sn,
double *r)
lapack_int LAPACKE_slartgs (float x, float y, float sigma, float *cs,
float *sn)
lapack_int LAPACKE_dlartgs (double x, double y, double sigma, double
*cs, double *sn)
And finally the bbcsd moment 🌟 — cbbcsd has the longest glow-up: jobu1, jobu2, jobv1t, jobv2t, trans, then m, p, q, then theta, phi, then u1/ldu1, u2/ldu2, v1t/ldv1t, v2t/ldv2t, and then the whole b11d, b11e, b12d, b12e, b21d, b21e, b22d, b22e set. Breathe. It's giving main character 😭
lapack_int LAPACKE_cbbcsd (int matrix_layout, char jobu1, char jobu2,
char jobv1t, char jobv2t, char trans, lapack_int m, lapack_int p,
lapack_int q, float *theta, float *phi, lapack_complex_float *u1,
lapack_int ldu1, lapack_complex_float *u2, lapack_int ldu2,
lapack_complex_float *v1t, lapack_int ldv1t, lapack_complex_float
*v2t, lapack_int ldv2t, float *b11d, float *b11e, float *b12d, float
*b12e, float *b21d, float *b21e, float *b22d, float *b22e)
And here's where this part runs out of screen — cbbcsd_work gets cut off mid-signature, so I'm handing you exactly what's on the page, no edits, no additions 🙈
lapack_int LAPACKE_cbbcsd_work (int matrix_layout, char jobu1, char
jobu2, char jobv1t, char jobv2t, char trans, lapack_int m,
lapack_int p, lapack_int q, float *theta, float *phi,
Stick around, because this signature is definitely not done yet 💀
...and the tail end of that last signature, the whole b11d…b22e + rwork situation. No worries, we're picking right back up 💖
lapack_complex_float *u1, lapack_int ldu1, lapack_complex_float *u2,
lapack_int ldu2, lapack_complex_float *v1t, lapack_int ldv1t,
lapack_complex_float *v2t, lapack_int ldv2t, float *b11d, float
*b11e, float *b12d, float *b12e, float *b21d, float *b21e, float
*b22d, float *b22e, float *rwork, lapack_int lrwork)
🦋 the che* girlies (complex single precision, Hermitian energy)
Okay so first up, the swap queen. cheswapr is giving "trade you these two indices" realness — she takes uplo, n, a, lda, and then the iconic duo i1 and i2 ✨
lapack_int LAPACKE_cheswapr (int matrix_layout, char uplo, lapack_int n,
lapack_complex_float *a, lapack_int lda, lapack_int i1, lapack_int
i2)
lapack_int LAPACKE_cheswapr_work (int matrix_layout, char uplo,
lapack_int n, lapack_complex_float *a, lapack_int lda, lapack_int
i1, lapack_int i2)
ngl the_workversion here has literally the same argument list — nowork, nolwork, nothing extra. Same fit, different name 💅
Next, the inverse crew. chetri2 takes your ipiv (as a const lapack_int *, cute — she's not touching it, just reading 🔍), and the _work version brings her own work + lwork to the function:
lapack_int LAPACKE_chetri2 (int matrix_layout, char uplo, lapack_int n,
lapack_complex_float *a, lapack_int lda, const lapack_int *ipiv)
lapack_int LAPACKE_chetri2_work (int matrix_layout, char uplo,
lapack_int n, lapack_complex_float *a, lapack_int lda, const
lapack_int *ipiv, lapack_complex_float *work, lapack_int lwork)
And then chetri2x — the x is not a typo bestie, she's her own whole thing, and she's got a nb block-size moment going on 🎀 (look: the _work sibling here passes nb instead of lwork, that's the vibe, that's the tea ☕):
lapack_int LAPACKE_chetri2x (int matrix_layout, char uplo, lapack_int n,
lapack_complex_float *a, lapack_int lda, const lapack_int *ipiv,
lapack_int nb)
lapack_int LAPACKE_chetri2x_work (int matrix_layout, char uplo,
lapack_int n, lapack_complex_float *a, lapack_int lda, const
lapack_int *ipiv, lapack_complex_float *work, lapack_int nb)
Then chetrs2 slides in with nrhs and a b + ldb — she's the solve-y one of the group, and notice a and ipiv are const while b is very much free to be rewritten 💖 The _work version adds work (no lwork this time!! she's built different, literally):
lapack_int LAPACKE_chetrs2 (int matrix_layout, char uplo, lapack_int n,
lapack_int nrhs, const lapack_complex_float *a, lapack_int lda,
const lapack_int *ipiv, lapack_complex_float *b, lapack_int ldb)
lapack_int LAPACKE_chetrs2_work (int matrix_layout, char uplo,
lapack_int n, lapack_int nrhs, const lapack_complex_float *a,
lapack_int lda, const lapack_int *ipiv, lapack_complex_float *b,
lapack_int ldb, lapack_complex_float *work)
💜 the csy* besties (complex single precision, symmetric era)
csyconv has the cutest extra arg: way (yes that's really the parameter name, I'm obsessed, it's char way 🥹). She's also carrying e around, and honestly?
lapack_int LAPACKE_csyconv (int matrix_layout, char uplo, char way,
lapack_int n, lapack_complex_float *a, lapack_int lda, const
lapack_int *ipiv, lapack_complex_float *e)
lapack_int LAPACKE_csyconv_work (int matrix_layout, char uplo, char way,
lapack_int n, lapack_complex_float *a, lapack_int lda, const
lapack_int *ipiv, lapack_complex_float *e)
fr fr the_workversion is identical down to the last character. Same arguments. Sameway. Same everything. She said "I contain multitudes but also the exact same parameter list" 💀
csyswapr = the symmetric sibling of the swap girl above. uplo, n, a, lda, i1, i2, that's the whole recipe 🍓
lapack_int LAPACKE_csyswapr (int matrix_layout, char uplo, lapack_int n,
lapack_complex_float *a, lapack_int lda, lapack_int i1, lapack_int
i2)
lapack_int LAPACKE_csyswapr_work (int matrix_layout, char uplo,
lapack_int n, lapack_complex_float *a, lapack_int lda, lapack_int
i1, lapack_int i2)
csytri2 + her _work, then csytri2x with the nb cameo, then csytrs2 with the nrhs and the b/ldb serve — the whole che lineup but symmetric, and she ate, no cap:
lapack_int LAPACKE_csytri2 (int matrix_layout, char uplo, lapack_int n,
lapack_complex_float *a, lapack_int lda, const lapack_int *ipiv)
lapack_int LAPACKE_csytri2_work (int matrix_layout, char uplo,
lapack_int n, lapack_complex_float *a, lapack_int lda, const
lapack_int *ipiv, lapack_complex_float *work, lapack_int lwork)
lapack_int LAPACKE_csytri2x (int matrix_layout, char uplo, lapack_int n,
lapack_complex_float *a, lapack_int lda, const lapack_int *ipiv,
lapack_int nb)
lapack_int LAPACKE_csytri2x_work (int matrix_layout, char uplo,
lapack_int n, lapack_complex_float *a, lapack_int lda, const
lapack_int *ipiv, lapack_complex_float *work, lapack_int nb)
lapack_int LAPACKE_csytrs2 (int matrix_layout, char uplo, lapack_int n,
lapack_int nrhs, const lapack_complex_float *a, lapack_int lda,
const lapack_int *ipiv, lapack_complex_float *b, lapack_int ldb)
lapack_int LAPACKE_csytrs2_work (int matrix_layout, char uplo,
lapack_int n, lapack_int nrhs, const lapack_complex_float *a,
lapack_int lda, const lapack_int *ipiv, lapack_complex_float *b,
lapack_int ldb, lapack_complex_float *work)
🌈 the CS-decomposition main characters: cunbdb & cuncsd
Okay this is where it gets highkey extra, because cunbdb has the whole alphabet of block args: x11, x12, x21, x22 with matching ldx11, ldx12, ldx21, ldx22, plus theta, phi, and the four taus: taup1, taup2, tauq1, tauq2. Plus trans and signs for flavor ✨ she's not doing a little thing, she's doing a whole thing:
lapack_int LAPACKE_cunbdb (int matrix_layout, char trans, char signs,
lapack_int m, lapack_int p, lapack_int q, lapack_complex_float *x11,
lapack_int ldx11, lapack_complex_float *x12, lapack_int ldx12,
lapack_complex_float *x21, lapack_int ldx21, lapack_complex_float
*x22, lapack_int ldx22, float *theta, float *phi,
lapack_complex_float *taup1, lapack_complex_float *taup2,
lapack_complex_float *tauq1, lapack_complex_float *tauq2)
lapack_int LAPACKE_cunbdb_work (int matrix_layout, char trans, char
signs, lapack_int m, lapack_int p, lapack_int q,
lapack_complex_float *x11, lapack_int ldx11, lapack_complex_float
*x12, lapack_int ldx12, lapack_complex_float *x21, lapack_int ldx21,
lapack_complex_float *x22, lapack_int ldx22, float *theta, float
*phi, lapack_complex_float *taup1, lapack_complex_float *taup2,
lapack_complex_float *tauq1, lapack_complex_float *tauq2,
lapack_complex_float *work, lapack_int lwork)
Then cuncsd — same block energy, but now with jobu1, jobu2, jobv1t, jobv2t stacked up front (four chars of pure decision-making) and u1/u2/v1t/v2t output players with their own ldu1, ldu2, ldv1t, ldv2t. She's a lot. I love her 🫶
lapack_int LAPACKE_cuncsd (int matrix_layout, char jobu1, char jobu2,
char jobv1t, char jobv2t, char trans, char signs, lapack_int m,
lapack_int p, lapack_int q, lapack_complex_float *x11, lapack_int
ldx11, lapack_complex_float *x12, lapack_int ldx12,
lapack_complex_float *x21, lapack_int ldx21, lapack_complex_float
*x22, lapack_int ldx22, float *theta, lapack_complex_float *u1,
lapack_int ldu1, lapack_complex_float *u2, lapack_int ldu2,
lapack_complex_float *v1t, lapack_int ldv1t, lapack_complex_float
*v2t, lapack_int ldv2t)
lapack_int LAPACKE_cuncsd_work (int matrix_layout, char jobu1, char
jobu2, char jobv1t, char jobv2t, char trans, char signs, lapack_int
m, lapack_int p, lapack_int q, lapack_complex_float *x11, lapack_int
ldx11, lapack_complex_float *x12, lapack_int ldx12,
lapack_complex_float *x21, lapack_int ldx21, lapack_complex_float
*x22, lapack_int ldx22, float *theta, lapack_complex_float *u1,
lapack_int ldu1, lapack_complex_float *u2, lapack_int ldu2,
lapack_complex_float *v1t, lapack_int ldv1t, lapack_complex_float
*v2t, lapack_int ldv2t, lapack_complex_float *work, lapack_int
lwork, float *rwork, lapack_int lrwork, lapack_int *iwork)
bestie note the_workglow-up: she picks upwork+lwork, andrwork+lrwork, andiwork. Three work arrays. She's high-maintenance and honestly? deserved 👑
And the 2by1 version, cuncsd2by1, is the leaner one — no x12/x22 blocks, just x11/x21, and no trans/signs. Less baggage, same ambition:
lapack_int LAPACKE_cuncsd2by1 (int matrix_layout, char jobu1, char
jobu2, char jobv1t, lapack_int m, lapack_int p, lapack_int q,
lapack_complex_float *x11, lapack_int ldx11, lapack_complex_float
*x21, lapack_int ldx21, float *theta, lapack_complex_float *u1,
lapack_int ldu1, lapack_complex_float *u2, lapack_int ldu2,
lapack_complex_float *v1t, lapack_int ldv1t)
lapack_int LAPACKE_cuncsd2by1_work (int matrix_layout, char jobu1, char
jobu2, char jobv1t, lapack_int m, lapack_int p, lapack_int q,
lapack_complex_float *x11, lapack_int ldx11, lapack_complex_float
*x21, lapack_int ldx21, float *theta, lapack_complex_float *u1,
lapack_int ldu1, lapack_complex_float *u2, lapack_int ldu2,
lapack_complex_float *v1t, lapack_int ldv1t, lapack_complex_float
*work, lapack_int lwork, float *rwork, lapack_int lrwork, lapack_int
*iwork)
🔥 now the double-precision serves (dbbcsd, dorbdb, dorcsd)
Same energy, double * instead of lapack_complex_float *, and ngl the real ones are so clean to read 🌸 dbbcsd is the bidiagonal one — b11d, b11e, b12d, b12e, b21d, b21e, b22d, b22e (eight of them, count 'em), plus theta, phi, and the u1/u2/v1t/v2t quartet 💅 The _work version just adds work + lwork at the end like a little bow 🎀
lapack_int LAPACKE_dbbcsd (int matrix_layout, char jobu1, char jobu2,
char jobv1t, char jobv2t, char trans, lapack_int m, lapack_int p,
lapack_int q, double *theta, double *phi, double *u1, lapack_int
ldu1, double *u2, lapack_int ldu2, double *v1t, lapack_int ldv1t,
double *v2t, lapack_int ldv2t, double *b11d, double *b11e, double
*b12d, double *b12e, double *b21d, double *b21e, double *b22d,
double *b22e)
lapack_int LAPACKE_dbbcsd_work (int matrix_layout, char jobu1, char
jobu2, char jobv1t, char jobv2t, char trans, lapack_int m,
lapack_int p, lapack_int q, double *theta, double *phi, double *u1,
lapack_int ldu1, double *u2, lapack_int ldu2, double *v1t,
lapack_int ldv1t, double *v2t, lapack_int ldv2t, double *b11d,
double *b11e, double *b12d, double *b12e, double *b21d, double
*b21e, double *b22d, double *b22e, double *work, lapack_int lwork)
dorbdb = the real-valued twin of cunbdb, same x11/x12/x21/x22 block party, same four taus, same theta/phi. Literally the same fit, just double 🦋:
lapack_int LAPACKE_dorbdb (int matrix_layout, char trans, char signs,
lapack_int m, lapack_int p, lapack_int q, double *x11, lapack_int
ldx11, double *x12, lapack_int ldx12, double *x21, lapack_int ldx21,
double *x22, lapack_int ldx22, double *theta, double *phi, double
*taup1, double *taup2, double *tauq1, double *tauq2)
lapack_int LAPACKE_dorbdb_work (int matrix_layout, char trans, char
signs, lapack_int m, lapack_int p, lapack_int q, double *x11,
lapack_int ldx11, double *x12, lapack_int ldx12, double *x21,
lapack_int ldx21, double *x22, lapack_int ldx22, double *theta,
double *phi, double *taup1, double *taup2, double *tauq1, double
*tauq2, double *work, lapack_int lwork)
dorcsd — the real cuncsd counterpart, all four job* chars, trans, signs, and the block crew. And here's the fun bit: dorcsd_work ends with double *work, lapack_int lwork, and lapack_int *iwork — no rwork/lrwork for her, she's built different 😌
lapack_int LAPACKE_dorcsd (int matrix_layout, char jobu1, char jobu2,
char jobv1t, char jobv2t, char trans, char signs, lapack_int m,
lapack_int p, lapack_int q, double *x11, lapack_int ldx11, double
*x12, lapack_int ldx12, double *x21, lapack_int ldx21, double *x22,
lapack_int ldx22, double *theta, double *u1, lapack_int ldu1, double
*u2, lapack_int ldu2, double *v1t, lapack_int ldv1t, double *v2t,
lapack_int ldv2t)
lapack_int LAPACKE_dorcsd_work (int matrix_layout, char jobu1, char
jobu2, char jobv1t, char jobv2t, char trans, char signs, lapack_int
m, lapack_int p, lapack_int q, double *x11, lapack_int ldx11, double
*x12, lapack_int ldx12, double *x21, lapack_int ldx21, double *x22,
lapack_int ldx22, double *theta, double *u1, lapack_int ldu1, double
*u2, lapack_int ldu2, double *v1t, lapack_int ldv1t, double *v2t,
lapack_int ldv2t, double *work, lapack_int lwork, lapack_int *iwork)
And dorcsd2by1, the real 2-by-1 girlie — x11/x21 only, no trans/signs, but she does keep theta, u1, u2, v1t with all their lds. The _work version brings work + lwork + iwork to the function 🍓:
lapack_int LAPACKE_dorcsd2by1 (int matrix_layout, char jobu1, char
jobu2, char jobv1t, lapack_int m, lapack_int p, lapack_int q, double
*x11, lapack_int ldx11, double *x21, lapack_int ldx21, double
*theta, double *u1, lapack_int ldu1, double *u2, lapack_int ldu2,
double *v1t, lapack_int ldv1t)
lapack_int LAPACKE_dorcsd2by1_work (int matrix_layout, char jobu1, char
jobu2, char jobv1t, lapack_int m, lapack_int p, lapack_int q, double
*x11, lapack_int ldx11, double *x21, lapack_int ldx21, double
*theta, double *u1, lapack_int ldu1, double *u2, lapack_int ldu2,
double *v1t, lapack_int ldv1t, double *work, lapack_int lwork,
lapack_int *iwork)
🧚 the dsy* girlies (real symmetric, final stretch of this part)
dsyconv — same way arg as her complex sister (iconic), same ipiv (const, respectful 🙏), same e:
lapack_int LAPACKE_dsyconv (int matrix_layout, char uplo, char way,
lapack_int n, double *a, lapack_int lda, const lapack_int *ipiv,
double *e)
lapack_int LAPACKE_dsyconv_work (int matrix_layout, char uplo, char way,
lapack_int n, double *a, lapack_int lda, const lapack_int *ipiv,
double *e)
dsyswapr — swap those two indices i1 and i2, that's the whole plot:
lapack_int LAPACKE_dsyswapr (int matrix_layout, char uplo, lapack_int n,
double *a, lapack_int lda, lapack_int i1, lapack_int i2)
lapack_int LAPACKE_dsyswapr_work (int matrix_layout, char uplo,
lapack_int n, double *a, lapack_int lda, lapack_int i1, lapack_int
i2)
And dsytri2 + her _work sibling — who, uh, is still mid-sentence as we cut away 💀 she's literally still typing:
lapack_int LAPACKE_dsytri2 (int matrix_layout, char uplo, lapack_int n,
double *a, lapack_int lda, const lapack_int *ipiv)
lapack_int LAPACKE_dsytri2_work (int matrix_layout, char uplo,
lapack_int n, double *a, lapack_int lda, const lapack_int *ipiv,
ok and that's exactly where our girl got cut off — her argument list is still going, bestie, we just have to wait for the next part 😭✋
...aaand we're back, mid-code-block, bestie. No shame, we're just picking up exactly where the last part ended 💅
double *work, lapack_int lwork)
lapack_int LAPACKE_dsytri2x (int matrix_layout, char uplo, lapack_int n,
double *a, lapack_int lda, const lapack_int *ipiv, lapack_int nb)
lapack_int LAPACKE_dsytri2x_work (int matrix_layout, char uplo,
lapack_int n, double *a, lapack_int lda, const lapack_int *ipiv,
double *work, lapack_int nb)
lapack_int LAPACKE_dsytrs2 (int matrix_layout, char uplo, lapack_int n,
lapack_int nrhs, const double *a, lapack_int lda, const lapack_int
*ipiv, double *b, lapack_int ldb)
lapack_int LAPACKE_dsytrs2_work (int matrix_layout, char uplo,
lapack_int n, lapack_int nrhs, const double *a, lapack_int lda,
const lapack_int *ipiv, double *b, lapack_int ldb, double *work)
So that's the double-precision era wrapping up — LAPACKE_dsytri2x doing its thing with that extra nb block-size arg (iconic, honestly), and LAPACKE_dsytrs2 / LAPACKE_dsytrs2_work right after, sitting in their double lane with const double *a and a plain double *work. No lwork for dsytrs2_work, bestie — the trailing double *work is just... there. Don't ask, it's the signature. 🫶
Then we pivot hard into the single-precision chaos corner. Buckle up 🎀
lapack_int LAPACKE_sbbcsd (int matrix_layout, char jobu1, char jobu2,
char jobv1t, char jobv2t, char trans, lapack_int m, lapack_int p,
lapack_int q, float *theta, float *phi, float *u1, lapack_int ldu1,
float *u2, lapack_int ldu2, float *v1t, lapack_int ldv1t, float
*v2t, lapack_int ldv2t, float *b11d, float *b11e, float *b12d, float
*b12e, float *b21d, float *b21e, float *b22d, float *b22e)
lapack_int LAPACKE_sbbcsd_work (int matrix_layout, char jobu1, char
jobu2, char jobv1t, char jobv2t, char trans, lapack_int m,
lapack_int p, lapack_int q, float *theta, float *phi, float *u1,
lapack_int ldu1, float *u2, lapack_int ldu2, float *v1t, lapack_int
ldv1t, float *v2t, lapack_int ldv2t, float *b11d, float *b11e, float
*b12d, float *b12e, float *b21d, float *b21e, float *b22d, float
*b22e, float *work, lapack_int lwork)
lapack_int LAPACKE_sorbdb (int matrix_layout, char trans, char signs,
lapack_int m, lapack_int p, lapack_int q, float *x11, lapack_int
ldx11, float *x12, lapack_int ldx12, float *x21, lapack_int ldx21,
float *x22, lapack_int ldx22, float *theta, float *phi, float
*taup1, float *taup2, float *tauq1, float *tauq2)
lapack_int LAPACKE_sorbdb_work (int matrix_layout, char trans, char
signs, lapack_int m, lapack_int p, lapack_int q, float *x11,
lapack_int ldx11, float *x12, lapack_int ldx12, float *x21,
lapack_int ldx21, float *x22, lapack_int ldx22, float *theta, float
*phi, float *taup1, float *taup2, float *tauq1, float *tauq2, float
*work, lapack_int lwork)
lapack_int LAPACKE_sorcsd (int matrix_layout, char jobu1, char jobu2,
char jobv1t, char jobv2t, char trans, char signs, lapack_int m,
lapack_int p, lapack_int q, float *x11, lapack_int ldx11, float
*x12, lapack_int ldx12, float *x21, lapack_int ldx21, float *x22,
lapack_int ldx22, float *theta, float *u1, lapack_int ldu1, float
*u2, lapack_int ldu2, float *v1t, lapack_int ldv1t, float *v2t,
lapack_int ldv2t)
lapack_int LAPACKE_sorcsd_work (int matrix_layout, char jobu1, char
jobu2, char jobv1t, char jobv2t, char trans, char signs, lapack_int
m, lapack_int p, lapack_int q, float *x11, lapack_int ldx11, float
*x12, lapack_int ldx12, float *x21, lapack_int ldx21, float *x22,
lapack_int ldx22, float *theta, float *u1, lapack_int ldu1, float
*u2, lapack_int ldu2, float *v1t, lapack_int ldv1t, float *v2t,
lapack_int ldv2t, float *work, lapack_int lwork, lapack_int *iwork)
lapack_int LAPACKE_sorcsd2by1 (int matrix_layout, char jobu1, char
jobu2, char jobv1t, lapack_int m, lapack_int p, lapack_int q, float
*x11, lapack_int ldx11, float *x21, lapack_int ldx21, float *theta,
float *u1, lapack_int ldu1, float *u2, lapack_int ldu2, float *v1t,
lapack_int ldv1t)
lapack_int LAPACKE_sorcsd2by1_work (int matrix_layout, char jobu1, char
jobu2, char jobv1t, lapack_int m, lapack_int p, lapack_int q, float
*x11, lapack_int ldx11, float *x21, lapack_int ldx21, float *theta,
float *u1, lapack_int ldu1, float *u2, lapack_int ldu2, float *v1t,
lapack_int ldv1t, float *work, lapack_int lwork, lapack_int *iwork)
OK so <pink>LAPACKE_sbbcsd</pink> is the big one — bidiagonal SVD vibes, with theta, phi, u1/u2/v1t/v2t and a whole zoo of b11d, b11e, b12d, b12e, b21d, b21e, b22d, b22e floats 😭 that's eight — count them, eight — b-diagnostics, and no I will not be memorizing them either, ngl. Its _work twin takes the same party plus float *work, lapack_int lwork. The jobu1, jobu2, jobv1t, jobv2t, trans chars are all just vibes-controlled switches — flag them exactly as written, no renaming, fr fr 💀
Then LAPACKE_sorbdb / LAPACKE_sorbdb_work — no jobs at all, just trans and signs, four x blocks (x11, x12, x21, x22 with their ldx11, ldx12, ldx21, ldx22), theta, phi, and the four taus taup1, taup2, tauq1, tauq2. Obsessed with the symmetry ngl ✨
Then the sorcsd trio: LAPACKE_sorcsd (no iwork, no work), LAPACKE_sorcsd_work (takes float *work, lapack_int lwork, lapack_int *iwork — yes both, bestie, that's the whole point), and LAPACKE_sorcsd2by1 / LAPACKE_sorcsd2by1_work. Notice the 2by1 versions only have jobu1, jobu2, jobv1t — the jobv2t, trans, signs, x12 and x22 are gone, which is lowkey iconic of them to just drop half the alphabet 🦋
Now the ssy* cleanup crew, all float, all business 🌸
lapack_int LAPACKE_ssyconv (int matrix_layout, char uplo, char way,
lapack_int n, float *a, lapack_int lda, const lapack_int *ipiv,
float *e)
lapack_int LAPACKE_ssyconv_work (int matrix_layout, char uplo, char way,
lapack_int n, float *a, lapack_int lda, const lapack_int *ipiv,
float *e)
lapack_int LAPACKE_ssyswapr (int matrix_layout, char uplo, lapack_int n,
float *a, lapack_int lda, lapack_int i1, lapack_int i2)
lapack_int LAPACKE_ssyswapr_work (int matrix_layout, char uplo,
lapack_int n, float *a, lapack_int lda, lapack_int i1, lapack_int
i2)
lapack_int LAPACKE_ssytri2 (int matrix_layout, char uplo, lapack_int n,
float *a, lapack_int lda, const lapack_int *ipiv)
lapack_int LAPACKE_ssytri2_work (int matrix_layout, char uplo,
lapack_int n, float *a, lapack_int lda, const lapack_int *ipiv,
float *work, lapack_int lwork)
lapack_int LAPACKE_ssytri2x (int matrix_layout, char uplo, lapack_int n,
float *a, lapack_int lda, const lapack_int *ipiv, lapack_int nb)
lapack_int LAPACKE_ssytri2x_work (int matrix_layout, char uplo,
lapack_int n, float *a, lapack_int lda, const lapack_int *ipiv,
float *work, lapack_int nb)
lapack_int LAPACKE_ssytrs2 (int matrix_layout, char uplo, lapack_int n,
lapack_int nrhs, const float *a, lapack_int lda, const lapack_int
*ipiv, float *b, lapack_int ldb)
lapack_int LAPACKE_ssytrs2_work (int matrix_layout, char uplo,
lapack_int n, lapack_int nrhs, const float *a, lapack_int lda, const
lapack_int *ipiv, float *b, lapack_int ldb, float *work)
Quick vibe check on these, because the pattern is giving main character:
LAPACKE_ssyconvandLAPACKE_ssyconv_workhave identical parameter lists —char wayis in both, and neither gains awork/lworkwhen you go_work. Copy that exactly, don't "fix" it 🫶LAPACKE_ssyswapr/_work— same deal, the_workvariant has the exact same arguments, no extraworkbuffer. It's giving "the work one is a lie but we love her anyway" 💅LAPACKE_ssytri2has nowork/lwork;LAPACKE_ssytri2_workaddsfloat *work, lapack_int lworkLAPACKE_ssytri2xswapslworkenergy forlapack_int nb, andLAPACKE_ssytri2x_worktakesfloat *work, lapack_int nb— nb, not lwork, do not get it twisted 🔥LAPACKE_ssytrs2→LAPACKE_ssytrs2_workadds justfloat *work, nolworkat the end. Periodt.
And now the complex-double glow-up, z-prefix edition 👑
lapack_int LAPACKE_zbbcsd (int matrix_layout, char jobu1, char jobu2,
char jobv1t, char jobv2t, char trans, lapack_int m, lapack_int p,
lapack_int q, double *theta, double *phi, lapack_complex_double *u1,
lapack_int ldu1, lapack_complex_double *u2, lapack_int ldu2,
lapack_complex_double *v1t, lapack_int ldv1t, lapack_complex_double
*v2t, lapack_int ldv2t, double *b11d, double *b11e, double *b12d,
double *b12e, double *b21d, double *b21e, double *b22d, double
*b22e)
lapack_int LAPACKE_zbbcsd_work (int matrix_layout, char jobu1, char
jobu2, char jobv1t, char jobv2t, char trans, lapack_int m,
lapack_int p, lapack_int q, double *theta, double *phi,
lapack_complex_double *u1, lapack_int ldu1, lapack_complex_double
*u2, lapack_int ldu2, lapack_complex_double *v1t, lapack_int ldv1t,
lapack_complex_double *v2t, lapack_int ldv2t, double *b11d, double
*b11e, double *b12d, double *b12e, double *b21d, double *b21e,
double *b22d, double *b22e, double *rwork, lapack_int lrwork)
lapack_int LAPACKE_zheswapr (int matrix_layout, char uplo, lapack_int n,
lapack_complex_double *a, lapack_int lda, lapack_int i1, lapack_int
i2)
lapack_int LAPACKE_zheswapr_work (int matrix_layout, char uplo,
lapack_int n, lapack_complex_double *a, lapack_int lda, lapack_int
i1, lapack_int i2)
lapack_int LAPACKE_zhetri2 (int matrix_layout, char uplo, lapack_int n,
lapack_complex_double *a, lapack_int lda, const lapack_int *ipiv)
lapack_int LAPACKE_zhetri2_work (int matrix_layout, char uplo,
lapack_int n, lapack_complex_double *a, lapack_int lda, const
lapack_int *ipiv, lapack_complex_double *work, lapack_int lwork)
lapack_int LAPACKE_zhetri2x (int matrix_layout, char uplo, lapack_int n,
lapack_complex_double *a, lapack_int lda, const lapack_int *ipiv,
lapack_int nb)
lapack_int LAPACKE_zhetri2x_work (int matrix_layout, char uplo,
lapack_int n, lapack_complex_double *a, lapack_int lda, const
lapack_int *ipiv, lapack_complex_double *work, lapack_int nb)
lapack_int LAPACKE_zhetrs2 (int matrix_layout, char uplo, lapack_int n,
lapack_int nrhs, const lapack_complex_double *a, lapack_int lda,
const lapack_int *ipiv, lapack_complex_double *b, lapack_int ldb)
lapack_int LAPACKE_zhetrs2_work (int matrix_layout, char uplo,
lapack_int n, lapack_int nrhs, const lapack_complex_double *a,
lapack_int lda, const lapack_int *ipiv, lapack_complex_double *b,
lapack_int ldb, lapack_complex_double *work)
A very important detail, bestie, do not skip: in <purple>LAPACKE_zbbcsd_work</purple> the workspace args are double *rwork, lapack_int lrwork — rwork, not work, and lrwork, not lwork. That's not a typo, that's the signature, copy it exactly or the compiler will have opinions 😭 Also note that even in the complex version, theta, phi, and all eight b-arrays stay plain double * — only u1, u2, v1t, v2t go lapack_complex_double *. The math said no cap 🧚
Then zheswapr, zhetri2, zhetri2x, zhetrs2 and their _work twins mirror the s-crew perfectly: the swapr _work adds nothing, zhetri2_work adds lapack_complex_double *work, lapack_int lwork, zhetri2x uses lapack_int nb and its _work takes lapack_complex_double *work, lapack_int nb, and zhetrs2_work tacks on just lapack_complex_double *work with no lwork. Consistent queen behavior 👑
The zsy* squad plus the grand zunbdb finale 🦋
lapack_int LAPACKE_zsyconv (int matrix_layout, char uplo, char way,
lapack_int n, lapack_complex_double *a, lapack_int lda, const
lapack_int *ipiv, lapack_complex_double *e)
lapack_int LAPACKE_zsyconv_work (int matrix_layout, char uplo, char way,
lapack_int n, lapack_complex_double *a, lapack_int lda, const
lapack_int *ipiv, lapack_complex_double *e)
lapack_int LAPACKE_zsyswapr (int matrix_layout, char uplo, lapack_int n,
lapack_complex_double *a, lapack_int lda, lapack_int i1, lapack_int
i2)
lapack_int LAPACKE_zsyswapr_work (int matrix_layout, char uplo,
lapack_int n, lapack_complex_double *a, lapack_int lda, lapack_int
i1, lapack_int i2)
lapack_int LAPACKE_zsytri2 (int matrix_layout, char uplo, lapack_int n,
lapack_complex_double *a, lapack_int lda, const lapack_int *ipiv)
lapack_int LAPACKE_zsytri2_work (int matrix_layout, char uplo,
lapack_int n, lapack_complex_double *a, lapack_int lda, const
lapack_int *ipiv, lapack_complex_double *work, lapack_int lwork)
lapack_int LAPACKE_zsytri2x (int matrix_layout, char uplo, lapack_int n,
lapack_complex_double *a, lapack_int lda, const lapack_int *ipiv,
lapack_int nb)
lapack_int LAPACKE_zsytri2x_work (int matrix_layout, char uplo,
lapack_int n, lapack_complex_double *a, lapack_int lda, const
lapack_int *ipiv, lapack_complex_double *work, lapack_int nb)
lapack_int LAPACKE_zsytrs2 (int matrix_layout, char uplo, lapack_int n,
lapack_int nrhs, const lapack_complex_double *a, lapack_int lda,
const lapack_int *ipiv, lapack_complex_double *b, lapack_int ldb)
lapack_int LAPACKE_zsytrs2_work (int matrix_layout, char uplo,
lapack_int n, lapack_int nrhs, const lapack_complex_double *a,
lapack_int lda, const lapack_int *ipiv, lapack_complex_double *b,
lapack_int ldb, lapack_complex_double *work)
lapack_int LAPACKE_zunbdb (int matrix_layout, char trans, char signs,
lapack_int m, lapack_int p, lapack_int q, lapack_complex_double
*x11, lapack_int ldx11, lapack_complex_double *x12, lapack_int
ldx12, lapack_complex_double *x21, lapack_int ldx21,
lapack_complex_double *x22, lapack_int ldx22, double *theta, double
*phi, lapack_complex_double *taup1, lapack_complex_double *taup2,
lapack_complex_double *tauq1, lapack_complex_double *tauq2)
lapack_int LAPACKE_zunbdb_work (int matrix_layout, char trans, char
signs, lapack_int m, lapack_int p, lapack_int q,
lapack_complex_double *x11, lapack_int ldx11, lapack_complex_double
*x12, lapack_int ldx12, lapack_complex_double *x21, lapack_int
ldx21, lapack_complex_double *x22, lapack_int ldx22, double *theta,
double *phi, lapack_complex_double *taup1, lapack_complex_double
*taup2, lapack_complex_double *tauq1, lapack_complex_double *tauq2,
lapack_complex_double *work, lapack_int lwork)
Same energy as the s-side: zsyconv/zsyconv_work are twins (both keep char way, both keep lapack_complex_double *e, neither grows a work), zsyswapr/_work are twins with no extra buffer, zsytri2 gets work+lwork in the _work form, zsytri2x runs on nb and so does zsytri2x_work, and zsytrs2_work appends only lapack_complex_double *work. Slay, consistency 💖
And <rainbow>LAPACKE_zunbdb</rainbow> closes us out — the complex twin of sorbdb, same trans, signs, x11/x12/x21/x22 + ldx* layout, theta and phi staying double * (yes, still plain double, even here 🫶), and the four taus taup1, taup2, tauq1, tauq2 as lapack_complex_double *. Its _work twin bolts on lapack_complex_double *work, lapack_int lwork at the very end, exactly like the rest of the family. Gorgeous. Iconic. Not done yet though 😌
Okay so now we get to the actual function wall 💅 — this is the part where lapacke.h just lists its entire roster of prototypes at you like a group chat read-receipt. Same energy, all facts. Let's go family by family.
First up, the CSD girlies — complete orthogonal decomposition via SVD, in double-complex flavor 🦋:
lapack_int LAPACKE_zuncsd (int matrix_layout, char jobu1, char jobu2,
char jobv1t, char jobv2t, char trans, char signs, lapack_int m,
lapack_int p, lapack_int q, lapack_complex_double *x11, lapack_int
ldx11, lapack_complex_double *x12, lapack_int ldx12,
lapack_complex_double *x21, lapack_int ldx21, lapack_complex_double
*x22, lapack_int ldx22, double *theta, lapack_complex_double *u1,
lapack_int ldu1, lapack_complex_double *u2, lapack_int ldu2,
lapack_complex_double *v1t, lapack_int ldv1t, lapack_complex_double
*v2t, lapack_int ldv2t)
And her workspace-allocating twin, who lets you bring the scratch space (that's work, lwork, rwork, lrwork, iwork — yes, all five, she's high maintenance and iconic for it) ✨:
lapack_int LAPACKE_zuncsd_work (int matrix_layout, char jobu1, char
jobu2, char jobv1t, char jobv2t, char trans, char signs, lapack_int
m, lapack_int p, lapack_int q, lapack_complex_double *x11,
lapack_int ldx11, lapack_complex_double *x12, lapack_int ldx12,
lapack_complex_double *x21, lapack_int ldx21, lapack_complex_double
*x22, lapack_int ldx22, double *theta, lapack_complex_double *u1,
lapack_int ldu1, lapack_complex_double *u2, lapack_int ldu2,
lapack_complex_double *v1t, lapack_int ldv1t, lapack_complex_double
*v2t, lapack_int ldv2t, lapack_complex_double *work, lapack_int
lwork, double *rwork, lapack_int lrwork, lapack_int *iwork)
Then the 2-by-1 special case, same vibe but slimmer — notice she drops x12, x22, trans, signs, and jobv2t entirely, because 2-by-1 means what it means 🎀:
lapack_int LAPACKE_zuncsd2by1 (int matrix_layout, char jobu1, char
jobu2, char jobv1t, lapack_int m, lapack_int p, lapack_int q,
lapack_complex_double *x11, lapack_int ldx11, lapack_complex_double
*x21, lapack_int ldx21, double *theta, lapack_complex_double *u1,
lapack_int ldu1, lapack_complex_double *u2, lapack_int ldu2,
lapack_complex_double *v1t, lapack_int ldv1t)
lapack_int LAPACKE_zuncsd2by1_work (int matrix_layout, char jobu1, char
jobu2, char jobv1t, lapack_int m, lapack_int p, lapack_int q,
lapack_complex_double *x11, lapack_int ldx11, lapack_complex_double
*x21, lapack_int ldx21, double *theta, lapack_complex_double *u1,
lapack_int ldu1, lapack_complex_double *u2, lapack_int ldu2,
lapack_complex_double *v1t, lapack_int ldv1t, lapack_complex_double
*work, lapack_int lwork, double *rwork, lapack_int lrwork,
lapack_int *iwork)
The gemqrt squad 💖
Here's where the four precision besties show up in formation: s (float), d (double), c (complex float), z (complex double). Same shape every time, just different types. Slay, consistency:
lapack_int LAPACKE_sgemqrt (int matrix_layout, char side, char trans,
lapack_int m, lapack_int n, lapack_int k, lapack_int nb, const float
*v, lapack_int ldv, const float *t, lapack_int ldt, float *c,
lapack_int ldc)
lapack_int LAPACKE_dgemqrt (int matrix_layout, char side, char trans,
lapack_int m, lapack_int n, lapack_int k, lapack_int nb, const
double *v, lapack_int ldv, const double *t, lapack_int ldt, double
*c, lapack_int ldc)
lapack_int LAPACKE_cgemqrt (int matrix_layout, char side, char trans,
lapack_int m, lapack_int n, lapack_int k, lapack_int nb, const
lapack_complex_float *v, lapack_int ldv, const lapack_complex_float
*t, lapack_int ldt, lapack_complex_float *c, lapack_int ldc)
lapack_int LAPACKE_zgemqrt (int matrix_layout, char side, char trans,
lapack_int m, lapack_int n, lapack_int k, lapack_int nb, const
lapack_complex_double *v, lapack_int ldv, const
lapack_complex_double *t, lapack_int ldt, lapack_complex_double *c,
lapack_int ldc)
See how v and t are const but c is definitely not? She's the output, she's the main character, she gets written to 👑.
geqrt and her sisters 🌸
The plain geqrt — no nb-blocked multiply, just the factorization, all four precisions:
lapack_int LAPACKE_sgeqrt (int matrix_layout, lapack_int m, lapack_int
n, lapack_int nb, float *a, lapack_int lda, float *t, lapack_int
ldt)
lapack_int LAPACKE_dgeqrt (int matrix_layout, lapack_int m, lapack_int
n, lapack_int nb, double *a, lapack_int lda, double *t, lapack_int
ldt)
lapack_int LAPACKE_cgeqrt (int matrix_layout, lapack_int m, lapack_int
n, lapack_int nb, lapack_complex_float *a, lapack_int lda,
lapack_complex_float *t, lapack_int ldt)
lapack_int LAPACKE_zgeqrt (int matrix_layout, lapack_int m, lapack_int
n, lapack_int nb, lapack_complex_double *a, lapack_int lda,
lapack_complex_double *t, lapack_int ldt)
Then geqrt2 — lowkey geqrt but with no nb at all, because she picks her own blocking. Not me noticing the missing parameter 🫶:
lapack_int LAPACKE_sgeqrt2 (int matrix_layout, lapack_int m, lapack_int
n, float *a, lapack_int lda, float *t, lapack_int ldt)
lapack_int LAPACKE_dgeqrt2 (int matrix_layout, lapack_int m, lapack_int
n, double *a, lapack_int lda, double *t, lapack_int ldt)
lapack_int LAPACKE_cgeqrt2 (int matrix_layout, lapack_int m, lapack_int
n, lapack_complex_float *a, lapack_int lda, lapack_complex_float *t,
lapack_int ldt)
lapack_int LAPACKE_zgeqrt2 (int matrix_layout, lapack_int m, lapack_int
n, lapack_complex_double *a, lapack_int lda, lapack_complex_double
*t, lapack_int ldt)
And geqrt3, the third sister, same signature shape as geqrt2 — literally identical parameter list, different algorithm under the hood, and that's the whole tease 🦋:
lapack_int LAPACKE_sgeqrt3 (int matrix_layout, lapack_int m, lapack_int
n, float *a, lapack_int lda, float *t, lapack_int ldt)
lapack_int LAPACKE_dgeqrt3 (int matrix_layout, lapack_int m, lapack_int
n, double *a, lapack_int lda, double *t, lapack_int ldt)
lapack_int LAPACKE_cgeqrt3 (int matrix_layout, lapack_int m, lapack_int
n, lapack_complex_float *a, lapack_int lda, lapack_complex_float *t,
lapack_int ldt)
lapack_int LAPACKE_zgeqrt3 (int matrix_layout, lapack_int m, lapack_int
n, lapack_complex_double *a, lapack_int lda, lapack_complex_double
*t, lapack_int ldt)
tpmqrt / tpqrt / tpqrt2 — the triangular gang 🌈
tpmqrt brings the whole crew: side, trans, m, n, k, l, nb, plus v, t, and two matrices a and b with their own leading dimensions lda and ldb. She's doing the most, respectfully:
lapack_int LAPACKE_stpmqrt (int matrix_layout, char side, char trans,
lapack_int m, lapack_int n, lapack_int k, lapack_int l, lapack_int
nb, const float *v, lapack_int ldv, const float *t, lapack_int ldt,
float *a, lapack_int lda, float *b, lapack_int ldb)
lapack_int LAPACKE_dtpmqrt (int matrix_layout, char side, char trans,
lapack_int m, lapack_int n, lapack_int k, lapack_int l, lapack_int
nb, const double *v, lapack_int ldv, const double *t, lapack_int
ldt, double *a, lapack_int lda, double *b, lapack_int ldb)
lapack_int LAPACKE_ctpmqrt (int matrix_layout, char side, char trans,
lapack_int m, lapack_int n, lapack_int k, lapack_int l, lapack_int
nb, const lapack_complex_float *v, lapack_int ldv, const
lapack_complex_float *t, lapack_int ldt, lapack_complex_float *a,
lapack_int lda, lapack_complex_float *b, lapack_int ldb)
lapack_int LAPACKE_ztpmqrt (int matrix_layout, char side, char trans,
lapack_int m, lapack_int n, lapack_int k, lapack_int l, lapack_int
nb, const lapack_complex_double *v, lapack_int ldv, const
lapack_complex_double *t, lapack_int ldt, lapack_complex_double *a,
lapack_int lda, lapack_complex_double *b, lapack_int ldb)
tpqrt drops side and trans and keeps the l, nb, a, b, t situation. Still four precisions, still eating:
lapack_int LAPACKE_stpqrt (int matrix_layout, lapack_int m, lapack_int
n, lapack_int l, lapack_int nb, float *a, lapack_int lda, float *b,
lapack_int ldb, float *t, lapack_int ldt)
lapack_int LAPACKE_dtpqrt (int matrix_layout, lapack_int m, lapack_int
n, lapack_int l, lapack_int nb, double *a, lapack_int lda, double
*b, lapack_int ldb, double *t, lapack_int ldt)
lapack_int LAPACKE_ctpqrt (int matrix_layout, lapack_int m, lapack_int
n, lapack_int l, lapack_int nb, lapack_complex_float *a, lapack_int
lda, lapack_complex_float *b, lapack_int ldb, lapack_complex_float
*t, lapack_int ldt)
lapack_int LAPACKE_ztpqrt (int matrix_layout, lapack_int m, lapack_int
n, lapack_int l, lapack_int nb, lapack_complex_double *a, lapack_int
lda, lapack_complex_double *b, lapack_int ldb, lapack_complex_double
*t, lapack_int ldt)
tpqrt2 — bye nb, you were cute but we're doing fixed blocking now:
lapack_int LAPACKE_stpqrt2 (int matrix_layout, lapack_int m, lapack_int
n, lapack_int l, float *a, lapack_int lda, float *b, lapack_int ldb,
float *t, lapack_int ldt)
lapack_int LAPACKE_dtpqrt2 (int matrix_layout, lapack_int m, lapack_int
n, lapack_int l, double *a, lapack_int lda, double *b, lapack_int
ldb, double *t, lapack_int ldt)
lapack_int LAPACKE_ctpqrt2 (int matrix_layout, lapack_int m, lapack_int
n, lapack_int l, lapack_complex_float *a, lapack_int lda,
lapack_complex_float *b, lapack_int ldb, lapack_complex_float *t,
lapack_int ldt)
lapack_int LAPACKE_ztpqrt2 (int matrix_layout, lapack_int m, lapack_int
n, lapack_int l, lapack_complex_double *a, lapack_int lda,
lapack_complex_double *b, lapack_int ldb, lapack_complex_double *t,
lapack_int ldt)
tprfb — the apply-the-thing step 💀
Four chars, no waiting: side, trans, direct, storev, then the full m, n, k, l cast plus v, t, a, b and all their leading dimensions. She's the "actually use the factorization you just built" girlie:
lapack_int LAPACKE_stprfb (int matrix_layout, char side, char trans,
char direct, char storev, lapack_int m, lapack_int n, lapack_int k,
lapack_int l, const float *v, lapack_int ldv, const float *t,
lapack_int ldt, float *a, lapack_int lda, float *b, lapack_int ldb)
lapack_int LAPACKE_dtprfb (int matrix_layout, char side, char trans,
char direct, char storev, lapack_int m, lapack_int n, lapack_int k,
lapack_int l, const double *v, lapack_int ldv, const double *t,
lapack_int ldt, double *a, lapack_int lda, double *b, lapack_int
ldb)
lapack_int LAPACKE_ctprfb (int matrix_layout, char side, char trans,
char direct, char storev, lapack_int m, lapack_int n, lapack_int k,
lapack_int l, const lapack_complex_float *v, lapack_int ldv, const
lapack_complex_float *t, lapack_int ldt, lapack_complex_float *a,
lapack_int lda, lapack_complex_float *b, lapack_int ldb)
lapack_int LAPACKE_ztprfb (int matrix_layout, char side, char trans,
char direct, char storev, lapack_int m, lapack_int n, lapack_int k,
lapack_int l, const lapack_complex_double *v, lapack_int ldv, const
lapack_complex_double *t, lapack_int ldt, lapack_complex_double *a,
lapack_int lda, lapack_complex_double *b, lapack_int ldb)
The _work remixes 🔥
Same functions, but now you pass in the buffer yourself — work shows up at the end, and if you get its size wrong that's between you and your lwork. Starting with the gemqrt_work set:
lapack_int LAPACKE_sgemqrt_work (int matrix_layout, char side, char
trans, lapack_int m, lapack_int n, lapack_int k, lapack_int nb,
const float *v, lapack_int ldv, const float *t, lapack_int ldt,
float *c, lapack_int ldc, float *work)
lapack_int LAPACKE_dgemqrt_work (int matrix_layout, char side, char
trans, lapack_int m, lapack_int n, lapack_int k, lapack_int nb,
const double *v, lapack_int ldv, const double *t, lapack_int ldt,
double *c, lapack_int ldc, double *work)
lapack_int LAPACKE_cgemqrt_work (int matrix_layout, char side, char
trans, lapack_int m, lapack_int n, lapack_int k, lapack_int nb,
const lapack_complex_float *v, lapack_int ldv, const
lapack_complex_float *t, lapack_int ldt, lapack_complex_float *c,
lapack_int ldc, lapack_complex_float *work)
lapack_int LAPACKE_zgemqrt_work (int matrix_layout, char side, char
trans, lapack_int m, lapack_int n, lapack_int k, lapack_int nb,
const lapack_complex_double *v, lapack_int ldv, const
lapack_complex_double *t, lapack_int ldt, lapack_complex_double *c,
lapack_int ldc, lapack_complex_double *work)
Then geqrt_work, where the pattern repeats and work just slides into the last slot 🧚:
lapack_int LAPACKE_sgeqrt_work (int matrix_layout, lapack_int m,
lapack_int n, lapack_int nb, float *a, lapack_int lda, float *t,
lapack_int ldt, float *work)
lapack_int LAPACKE_dgeqrt_work (int matrix_layout, lapack_int m,
lapack_int n, lapack_int nb, double *a, lapack_int lda, double *t,
lapack_int ldt, double *work)
lapack_int LAPACKE_cgeqrt_work (int matrix_layout, lapack_int m,
lapack_int n, lapack_int nb, lapack_complex_float *a, lapack_int
…and that's genuinely where this part cuts off mid-signature 😭 — the cgeqrt_work prototype is still going, so hold that thought for the next chunk. No cap, we're literally in the middle of a parameter list.
okay so we're still deep in the SYNOPSIS bestie, and this stretch is giving QR factorization extended universe 🌀✨ — like, the geqrt girlies and their whole tpqrt/tpmqrt/tprfb friend group showed up to the party, then the _rook pivot squad crashed it, and honestly? iconic behavior. let me lay it all out for you exactly as the header declares it, no cap 🫶
First up, the geqrt trio — _work flavors only, which means you're bringing your own workspace to the function like the organized queen you are 💅. s/d/c/z, all four precisions, one after another:
lapack_int LAPACKE_sgeqrt_work (int matrix_layout, lapack_int m,
lapack_int n, lapack_int nb, float *a, lapack_int lda, float *t,
lapack_int ldt, float *work)
lapack_int LAPACKE_dgeqrt_work (int matrix_layout, lapack_int m,
lapack_int n, lapack_int nb, double *a, lapack_int lda, double *t,
lapack_int ldt, double *work)
lapack_int LAPACKE_cgeqrt_work (int matrix_layout, lapack_int m,
lapack_int n, lapack_int nb, lapack_complex_float *a, lapack_int
lda, lapack_complex_float *t, lapack_int ldt, lapack_complex_float
*work)
lapack_int LAPACKE_zgeqrt_work (int matrix_layout, lapack_int m,
lapack_int n, lapack_int nb, lapack_complex_double *a, lapack_int
lda, lapack_complex_double *t, lapack_int ldt, lapack_complex_double
*work)
then the geqrt2 glow-up ✨ (same s/d/c/z energy, no nb, no external work — it's the lowkey version of the family):
lapack_int LAPACKE_sgeqrt2_work (int matrix_layout, lapack_int m,
lapack_int n, float *a, lapack_int lda, float *t, lapack_int ldt)
lapack_int LAPACKE_dgeqrt2_work (int matrix_layout, lapack_int m,
lapack_int n, double *a, lapack_int lda, double *t, lapack_int ldt)
lapack_int LAPACKE_cgeqrt2_work (int matrix_layout, lapack_int m,
lapack_int n, lapack_complex_float *a, lapack_int lda,
lapack_complex_float *t, lapack_int ldt)
lapack_int LAPACKE_zgeqrt2_work (int matrix_layout, lapack_int m,
lapack_int n, lapack_complex_double *a, lapack_int lda,
lapack_complex_double *t, lapack_int ldt)
and geqrt3 said "make it three" 🎀:
lapack_int LAPACKE_sgeqrt3_work (int matrix_layout, lapack_int m,
lapack_int n, float *a, lapack_int lda, float *t, lapack_int ldt)
lapack_int LAPACKE_dgeqrt3_work (int matrix_layout, lapack_int m,
lapack_int n, double *a, lapack_int lda, double *t, lapack_int ldt)
lapack_int LAPACKE_cgeqrt3_work (int matrix_layout, lapack_int m,
lapack_int n, lapack_complex_float *a, lapack_int lda,
lapack_complex_float *t, lapack_int ldt)
lapack_int LAPACKE_zgeqrt3_work (int matrix_layout, lapack_int m,
lapack_int n, lapack_complex_double *a, lapack_int lda,
lapack_complex_double *t, lapack_int ldt)
nowwww the tp crew 🦋 — tpmqrt, tpqrt, tpqrt2, tprfb, each rocking the full s/d/c/z quartet. tpmqrt is the one with all the char arguments (side, trans) plus m, n, k, l, nb, and a whole parade of leading dimensions:
lapack_int LAPACKE_stpmqrt_work (int matrix_layout, char side, char
trans, lapack_int m, lapack_int n, lapack_int k, lapack_int l,
lapack_int nb, const float *v, lapack_int ldv, const float *t,
lapack_int ldt, float *a, lapack_int lda, float *b, lapack_int ldb,
float *work)
lapack_int LAPACKE_dtpmqrt_work (int matrix_layout, char side, char
trans, lapack_int m, lapack_int n, lapack_int k, lapack_int l,
lapack_int nb, const double *v, lapack_int ldv, const double *t,
lapack_int ldt, double *a, lapack_int lda, double *b, lapack_int
ldb, double *work)
lapack_int LAPACKE_ctpmqrt_work (int matrix_layout, char side, char
trans, lapack_int m, lapack_int n, lapack_int k, lapack_int l,
lapack_int nb, const lapack_complex_float *v, lapack_int ldv, const
lapack_complex_float *t, lapack_int ldt, lapack_complex_float *a,
lapack_int lda, lapack_complex_float *b, lapack_int ldb,
lapack_complex_float *work)
lapack_int LAPACKE_ztpmqrt_work (int matrix_layout, char side, char
trans, lapack_int m, lapack_int n, lapack_int k, lapack_int l,
lapack_int nb, const lapack_complex_double *v, lapack_int ldv, const
lapack_complex_double *t, lapack_int ldt, lapack_complex_double *a,
lapack_int lda, lapack_complex_double *b, lapack_int ldb,
lapack_complex_double *work)
tpqrt next, with its l, nb, and work besties tagging along:
lapack_int LAPACKE_stpqrt_work (int matrix_layout, lapack_int m,
lapack_int n, lapack_int l, lapack_int nb, float *a, lapack_int lda,
float *b, lapack_int ldb, float *t, lapack_int ldt, float *work)
lapack_int LAPACKE_dtpqrt_work (int matrix_layout, lapack_int m,
lapack_int n, lapack_int l, lapack_int nb, double *a, lapack_int
lda, double *b, lapack_int ldb, double *t, lapack_int ldt, double
*work)
lapack_int LAPACKE_ctpqrt_work (int matrix_layout, lapack_int m,
lapack_int n, lapack_int l, lapack_int nb, lapack_complex_float *a,
lapack_int lda, lapack_complex_float *b, lapack_int ldb,
lapack_complex_float *t, lapack_int ldt, lapack_complex_float *work)
lapack_int LAPACKE_ztpqrt_work (int matrix_layout, lapack_int m,
lapack_int n, lapack_int l, lapack_int nb, lapack_complex_double *a,
lapack_int lda, lapack_complex_double *b, lapack_int ldb,
lapack_complex_double *t, lapack_int ldt, lapack_complex_double
*work)
tpqrt2 keeps it cute and lean — just m, n, l, the two matrices a and b, and t:
lapack_int LAPACKE_stpqrt2_work (int matrix_layout, lapack_int m,
lapack_int n, lapack_int l, float *a, lapack_int lda, float *b,
lapack_int ldb, float *t, lapack_int ldt)
lapack_int LAPACKE_dtpqrt2_work (int matrix_layout, lapack_int m,
lapack_int n, lapack_int l, double *a, lapack_int lda, double *b,
lapack_int ldb, double *t, lapack_int ldt)
lapack_int LAPACKE_ctpqrt2_work (int matrix_layout, lapack_int m,
lapack_int n, lapack_int l, lapack_complex_float *a, lapack_int lda,
lapack_complex_float *b, lapack_int ldb, lapack_complex_float *t,
lapack_int ldt)
lapack_int LAPACKE_ztpqrt2_work (int matrix_layout, lapack_int m,
lapack_int n, lapack_int l, lapack_complex_double *a, lapack_int
lda, lapack_complex_double *b, lapack_int ldb, lapack_complex_double
*t, lapack_int ldt)
and tprfb has the most char energy of all 🫶 — side, trans, direct, AND storev, plus m, n, k, l, and it even takes an ldwork at the very end:
lapack_int LAPACKE_stprfb_work (int matrix_layout, char side, char
trans, char direct, char storev, lapack_int m, lapack_int n,
lapack_int k, lapack_int l, const float *v, lapack_int ldv, const
float *t, lapack_int ldt, float *a, lapack_int lda, float *b,
lapack_int ldb, float *work, lapack_int ldwork)
lapack_int LAPACKE_dtprfb_work (int matrix_layout, char side, char
trans, char direct, char storev, lapack_int m, lapack_int n,
lapack_int k, lapack_int l, const double *v, lapack_int ldv, const
double *t, lapack_int ldt, double *a, lapack_int lda, double *b,
lapack_int ldb, double *work, lapack_int ldwork)
lapack_int LAPACKE_ctprfb_work (int matrix_layout, char side, char
trans, char direct, char storev, lapack_int m, lapack_int n,
lapack_int k, lapack_int l, const lapack_complex_float *v,
lapack_int ldv, const lapack_complex_float *t, lapack_int ldt,
lapack_complex_float *a, lapack_int lda, lapack_complex_float *b,
lapack_int ldb, lapack_complex_float *work, lapack_int ldwork)
lapack_int LAPACKE_ztprfb_work (int matrix_layout, char side, char
trans, char direct, char storev, lapack_int m, lapack_int n,
lapack_int k, lapack_int l, const lapack_complex_double *v,
lapack_int ldv, const lapack_complex_double *t, lapack_int ldt,
lapack_complex_double *a, lapack_int lda, lapack_complex_double *b,
lapack_int ldb, lapack_complex_double *work, lapack_int ldwork)
okay now the rook pivot group enters the chat and it's a whole moment 👑 — sysv_rook, sytrf_rook, sytrs_rook each come in s/d/c/z, and there's ipiv everywhere because pivots are literally the main characters here:
lapack_int LAPACKE_ssysv_rook (int matrix_layout, char uplo, lapack_int
n, lapack_int nrhs, float *a, lapack_int lda, lapack_int *ipiv,
float *b, lapack_int ldb)
lapack_int LAPACKE_dsysv_rook (int matrix_layout, char uplo, lapack_int
n, lapack_int nrhs, double *a, lapack_int lda, lapack_int *ipiv,
double *b, lapack_int ldb)
lapack_int LAPACKE_csysv_rook (int matrix_layout, char uplo, lapack_int
n, lapack_int nrhs, lapack_complex_float *a, lapack_int lda,
lapack_int *ipiv, lapack_complex_float *b, lapack_int ldb)
lapack_int LAPACKE_zsysv_rook (int matrix_layout, char uplo, lapack_int
n, lapack_int nrhs, lapack_complex_double *a, lapack_int lda,
lapack_int *ipiv, lapack_complex_double *b, lapack_int ldb)
lapack_int LAPACKE_ssytrf_rook (int matrix_layout, char uplo, lapack_int
n, float *a, lapack_int lda, lapack_int *ipiv)
lapack_int LAPACKE_dsytrf_rook (int matrix_layout, char uplo, lapack_int
n, double *a, lapack_int lda, lapack_int *ipiv)
lapack_int LAPACKE_csytrf_rook (int matrix_layout, char uplo, lapack_int
n, lapack_complex_float *a, lapack_int lda, lapack_int *ipiv)
lapack_int LAPACKE_zsytrf_rook (int matrix_layout, char uplo, lapack_int
n, lapack_complex_double *a, lapack_int lda, lapack_int *ipiv)
lapack_int LAPACKE_ssytrs_rook (int matrix_layout, char uplo, lapack_int
n, lapack_int nrhs, const float *a, lapack_int lda, const lapack_int
*ipiv, float *b, lapack_int ldb)
lapack_int LAPACKE_dsytrs_rook (int matrix_layout, char uplo, lapack_int
n, lapack_int nrhs, const double *a, lapack_int lda, const
lapack_int *ipiv, double *b, lapack_int ldb)
lapack_int LAPACKE_csytrs_rook (int matrix_layout, char uplo, lapack_int
n, lapack_int nrhs, const lapack_complex_float *a, lapack_int lda,
const lapack_int *ipiv, lapack_complex_float *b, lapack_int ldb)
lapack_int LAPACKE_zsytrs_rook (int matrix_layout, char uplo, lapack_int
n, lapack_int nrhs, const lapack_complex_double *a, lapack_int lda,
const lapack_int *ipiv, lapack_complex_double *b, lapack_int ldb)
and then the Hermitian rook besties, hetrf_rook and hetrs_rook 🌸 — note they're complex-only (just c and z, no s/d, because Hermitian doesn't do real, iykyk):
lapack_int LAPACKE_chetrf_rook (int matrix_layout, char uplo, lapack_int
n, lapack_complex_float *a, lapack_int lda, lapack_int *ipiv)
lapack_int LAPACKE_zhetrf_rook (int matrix_layout, char uplo, lapack_int
n, lapack_complex_double *a, lapack_int lda, lapack_int *ipiv)
lapack_int LAPACKE_chetrs_rook (int matrix_layout, char uplo, lapack_int
n, lapack_int nrhs, const lapack_complex_float *a, lapack_int lda,
const lapack_int *ipiv, lapack_complex_float *b, lapack_int ldb)
lapack_int LAPACKE_zhetrs_rook (int matrix_layout, char uplo, lapack_int
n, lapack_int nrhs, const lapack_complex_double *a, lapack_int lda,
const lapack_int *ipiv, lapack_complex_double *b, lapack_int ldb)
and then out of NOWHERE we get the lone symmetric rank-1 update duo, csyr and zsyr 💜 — no s/d, just the complex girlies, with an alpha scalar and an x vector and an incx:
lapack_int LAPACKE_csyr (int matrix_layout, char uplo, lapack_int n,
lapack_complex_float alpha, const lapack_complex_float *x,
lapack_int incx, lapack_complex_float *a, lapack_int lda)
lapack_int LAPACKE_zsyr (int matrix_layout, char uplo, lapack_int n,
lapack_complex_double alpha, const lapack_complex_double *x,
lapack_int incx, lapack_complex_double *a, lapack_int lda)
and finallyyyy the _work remixes of the rook squad come rolling in 🎀 — sysv_rook_work and sytrf_rook_work, each adding work + lwork on the end. sysv_rook_work shows up in full s/d/c/z:
lapack_int LAPACKE_ssysv_rook_work (int matrix_layout, char uplo,
lapack_int n, lapack_int nrhs, float *a, lapack_int lda, lapack_int
*ipiv, float *b, lapack_int ldb, float *work, lapack_int lwork)
lapack_int LAPACKE_dsysv_rook_work (int matrix_layout, char uplo,
lapack_int n, lapack_int nrhs, double *a, lapack_int lda, lapack_int
*ipiv, double *b, lapack_int ldb, double *work, lapack_int lwork)
lapack_int LAPACKE_csysv_rook_work (int matrix_layout, char uplo,
lapack_int n, lapack_int nrhs, lapack_complex_float *a, lapack_int
lda, lapack_int *ipiv, lapack_complex_float *b, lapack_int ldb,
lapack_complex_float *work, lapack_int lwork)
lapack_int LAPACKE_zsysv_rook_work (int matrix_layout, char uplo,
lapack_int n, lapack_int nrhs, lapack_complex_double *a, lapack_int
lda, lapack_int *ipiv, lapack_complex_double *b, lapack_int ldb,
lapack_complex_double *work, lapack_int lwork)
and sytrf_rook_work starts its s/d/c/z set — and bestie, the page literally cuts off mid-signature here 🙈 so I'm giving you exactly what's written, cliffhanger and all:
lapack_int LAPACKE_ssytrf_rook_work (int matrix_layout, char uplo,
lapack_int n, float *a, lapack_int lda, lapack_int *ipiv, float
*work, lapack_int lwork)
lapack_int LAPACKE_dsytrf_rook_work (int matrix_layout, char uplo,
lapack_int n, double *a, lapack_int lda, lapack_int *ipiv, double
*work, lapack_int lwork)
lapack_int LAPACKE_csytrf_rook_work (int matrix_layout, char uplo,
lapack_int n, lapack_complex_float *a, lapack_int lda, lapack_int
*ipiv, lapack_complex_float *work, lapack_int lwork)
lapack_int LAPACKE_zsytrf_rook_work (int matrix_layout, char uplo,
to be continued obviously 😭💅 and if you're following along you already know the next part picks up right where this one left off — go get it bestie 🦋✨
...and this signature was literally mid-sentence, so here's the tail end of it exactly as it trails in — no cap, that's just where the page break landed 🫶
lapack_int n, lapack_complex_double *a, lapack_int lda, lapack_int
*ipiv, lapack_complex_double *work, lapack_int lwork)
okay so the _rook pivot girlies are still going 👑 they solve with the factors from their _rook factorization cousins — sytrs_rook_work for the symmetric side, in all four precision flavours:
lapack_int LAPACKE_ssytrs_rook_work (int matrix_layout, char uplo,
lapack_int n, lapack_int nrhs, const float *a, lapack_int lda, const
lapack_int *ipiv, float *b, lapack_int ldb)
lapack_int LAPACKE_dsytrs_rook_work (int matrix_layout, char uplo,
lapack_int n, lapack_int nrhs, const double *a, lapack_int lda,
const lapack_int *ipiv, double *b, lapack_int ldb)
lapack_int LAPACKE_csytrs_rook_work (int matrix_layout, char uplo,
lapack_int n, lapack_int nrhs, const lapack_complex_float *a,
lapack_int lda, const lapack_int *ipiv, lapack_complex_float *b,
lapack_int ldb)
lapack_int LAPACKE_zsytrs_rook_work (int matrix_layout, char uplo,
lapack_int n, lapack_int nrhs, const lapack_complex_double *a,
lapack_int lda, const lapack_int *ipiv, lapack_complex_double *b,
lapack_int ldb)
and then the Hermitian _rook duo — factor and solve, both complex-only because that's their whole thing 💅 chetrf_rook_work / zhetrf_rook_work factor, chetrs_rook_work / zhetrs_rook_work solve:
lapack_int LAPACKE_chetrf_rook_work (int matrix_layout, char uplo,
lapack_int n, lapack_complex_float *a, lapack_int lda, lapack_int
*ipiv, lapack_complex_float *work, lapack_int lwork)
lapack_int LAPACKE_zhetrf_rook_work (int matrix_layout, char uplo,
lapack_int n, lapack_complex_double *a, lapack_int lda, lapack_int
*ipiv, lapack_complex_double *work, lapack_int lwork)
lapack_int LAPACKE_chetrs_rook_work (int matrix_layout, char uplo,
lapack_int n, lapack_int nrhs, const lapack_complex_float *a,
lapack_int lda, const lapack_int *ipiv, lapack_complex_float *b,
lapack_int ldb)
lapack_int LAPACKE_zhetrs_rook_work (int matrix_layout, char uplo,
lapack_int n, lapack_int nrhs, const lapack_complex_double *a,
lapack_int lda, const lapack_int *ipiv, lapack_complex_double *b,
lapack_int ldb)
syr moment 🌸 the symmetric rank-1 update, complex edition, with a scalar alpha and a vector x strutting in with stride incx. Note the vibe shift: no nrhs here, just a and lda getting updated ✨
lapack_int LAPACKE_csyr_work (int matrix_layout, char uplo, lapack_int
n, lapack_complex_float alpha, const lapack_complex_float *x,
lapack_int incx, lapack_complex_float *a, lapack_int lda)
lapack_int LAPACKE_zsyr_work (int matrix_layout, char uplo, lapack_int
n, lapack_complex_double alpha, const lapack_complex_double *x,
lapack_int incx, lapack_complex_double *a, lapack_int lda)
and the little icon she is — LAPACKE_ilaver, the only one in this whole stretch that returns void instead of a lapack_int, and she just hands you the version numbers back through three pointers. main character energy honestly 👑
void LAPACKE_ilaver (lapack_int *vers_major, lapack_int *vers_minor,
lapack_int *vers_patch)
now entering the _aa era 🔥 factor-and-solve-all-at-once, symmetric side first. ssysv_aa / dsysv_aa / csysv_aa / zsysv_aa take ipiv, then each has its _work twin carrying work and lwork:
lapack_int LAPACKE_ssysv_aa (int matrix_layout, char uplo, lapack_int n,
lapack_int nrhs, float *a, lapack_int lda, lapack_int *ipiv, float
*b, lapack_int ldb)
lapack_int LAPACKE_ssysv_aa_work (int matrix_layout, char uplo,
lapack_int n, lapack_int nrhs, float *a, lapack_int lda, lapack_int
*ipiv, float *b, lapack_int ldb, float *work, lapack_int lwork)
lapack_int LAPACKE_dsysv_aa (int matrix_layout, char uplo, lapack_int n,
lapack_int nrhs, double *a, lapack_int lda, lapack_int *ipiv, double
*b, lapack_int ldb)
lapack_int LAPACKE_dsysv_aa_work (int matrix_layout, char uplo,
lapack_int n, lapack_int nrhs, double *a, lapack_int lda, lapack_int
*ipiv, double *b, lapack_int ldb, double *work, lapack_int lwork)
lapack_int LAPACKE_csysv_aa (int matrix_layout, char uplo, lapack_int n,
lapack_int nrhs, lapack_complex_float *a, lapack_int lda, lapack_int
*ipiv, lapack_complex_float *b, lapack_int ldb)
lapack_int LAPACKE_csysv_aa_work (int matrix_layout, char uplo,
lapack_int n, lapack_int nrhs, lapack_complex_float *a, lapack_int
lda, lapack_int *ipiv, lapack_complex_float *b, lapack_int ldb,
lapack_complex_float *work, lapack_int lwork)
lapack_int LAPACKE_zsysv_aa (int matrix_layout, char uplo, lapack_int n,
lapack_int nrhs, lapack_complex_double *a, lapack_int lda,
lapack_int *ipiv, lapack_complex_double *b, lapack_int ldb)
lapack_int LAPACKE_zsysv_aa_work (int matrix_layout, char uplo,
lapack_int n, lapack_int nrhs, lapack_complex_double *a, lapack_int
lda, lapack_int *ipiv, lapack_complex_double *b, lapack_int ldb,
lapack_complex_double *work, lapack_int lwork)
same _aa treatment, Hermitian flavour — only two of them, because Hermitian is complex-only bestie, that's just science 🧚:
lapack_int LAPACKE_chesv_aa (int matrix_layout, char uplo, lapack_int n,
lapack_int nrhs, lapack_complex_float *a, lapack_int lda, lapack_int
*ipiv, lapack_complex_float *b, lapack_int ldb)
lapack_int LAPACKE_chesv_aa_work (int matrix_layout, char uplo,
lapack_int n, lapack_int nrhs, lapack_complex_float *a, lapack_int
lda, lapack_int *ipiv, lapack_complex_float *b, lapack_int ldb,
lapack_complex_float *work, lapack_int lwork)
lapack_int LAPACKE_zhesv_aa (int matrix_layout, char uplo, lapack_int n,
lapack_int nrhs, lapack_complex_double *a, lapack_int lda,
lapack_int *ipiv, lapack_complex_double *b, lapack_int ldb)
lapack_int LAPACKE_zhesv_aa_work (int matrix_layout, char uplo,
lapack_int n, lapack_int nrhs, lapack_complex_double *a, lapack_int
lda, lapack_int *ipiv, lapack_complex_double *b, lapack_int ldb,
lapack_complex_double *work, lapack_int lwork)
the _aa factorizers, now without the solve 💀 six of them, no work/lwork in this batch — just matrix_layout, uplo, n, a, lda, ipiv:
lapack_int LAPACKE_ssytrf_aa (int matrix_layout, char uplo, lapack_int
n, float *a, lapack_int lda, lapack_int *ipiv)
lapack_int LAPACKE_dsytrf_aa (int matrix_layout, char uplo, lapack_int
n, double *a, lapack_int lda, lapack_int *ipiv)
lapack_int LAPACKE_csytrf_aa (int matrix_layout, char uplo, lapack_int
n, lapack_complex_float *a, lapack_int lda, lapack_int *ipiv)
lapack_int LAPACKE_zsytrf_aa (int matrix_layout, char uplo, lapack_int
n, lapack_complex_double *a, lapack_int lda, lapack_int *ipiv)
lapack_int LAPACKE_chetrf_aa (int matrix_layout, char uplo, lapack_int
n, lapack_complex_float *a, lapack_int lda, lapack_int *ipiv)
lapack_int LAPACKE_zhetrf_aa (int matrix_layout, char uplo, lapack_int
n, lapack_complex_double *a, lapack_int lda, lapack_int *ipiv)
and their _work versions, same six, now with the work/lwork glow-up 🦋:
lapack_int LAPACKE_ssytrf_aa_work (int matrix_layout, char uplo,
lapack_int n, float *a, lapack_int lda, lapack_int *ipiv, float
*work, lapack_int lwork)
lapack_int LAPACKE_dsytrf_aa_work (int matrix_layout, char uplo,
lapack_int n, double *a, lapack_int lda, lapack_int *ipiv, double
*work, lapack_int lwork)
lapack_int LAPACKE_csytrf_aa_work (int matrix_layout, char uplo,
lapack_int n, lapack_complex_float *a, lapack_int lda, lapack_int
*ipiv, lapack_complex_float *work, lapack_int lwork)
lapack_int LAPACKE_zsytrf_aa_work (int matrix_layout, char uplo,
lapack_int n, lapack_complex_double *a, lapack_int lda, lapack_int
*ipiv, lapack_complex_double *work, lapack_int lwork)
lapack_int LAPACKE_chetrf_aa_work (int matrix_layout, char uplo,
lapack_int n, lapack_complex_float *a, lapack_int lda, lapack_int
*ipiv, lapack_complex_float *work, lapack_int lwork)
lapack_int LAPACKE_zhetrf_aa_work (int matrix_layout, char uplo,
lapack_int n, lapack_complex_double *a, lapack_int lda, lapack_int
*ipiv, lapack_complex_double *work, lapack_int lwork)
_aa solvers, the whole squad of twelve 🎀 and bestie, look at the ORDER, it is not alphabetical and I need you to respect it: c, c work, che, che work, d, d work, s, s work, z, z work, zhe, zhe work. Do not reorder, do not "tidy" it, it's giving chaotic-but-correct 🌈
lapack_int LAPACKE_csytrs_aa (int matrix_layout, char uplo, lapack_int
n, lapack_int nrhs, const lapack_complex_float *a, lapack_int lda,
const lapack_int *ipiv, lapack_complex_float *b, lapack_int ldb)
lapack_int LAPACKE_csytrs_aa_work (int matrix_layout, char uplo,
lapack_int n, lapack_int nrhs, const lapack_complex_float *a,
lapack_int lda, const lapack_int *ipiv, lapack_complex_float *b,
lapack_int ldb, lapack_complex_float *work, lapack_int lwork)
lapack_int LAPACKE_chetrs_aa (int matrix_layout, char uplo, lapack_int
n, lapack_int nrhs, const lapack_complex_float *a, lapack_int lda,
const lapack_int *ipiv, lapack_complex_float *b, lapack_int ldb)
lapack_int LAPACKE_chetrs_aa_work (int matrix_layout, char uplo,
lapack_int n, lapack_int nrhs, const lapack_complex_float *a,
lapack_int lda, const lapack_int *ipiv, lapack_complex_float *b,
lapack_int ldb, lapack_complex_float *work, lapack_int lwork)
lapack_int LAPACKE_dsytrs_aa (int matrix_layout, char uplo, lapack_int
n, lapack_int nrhs, const double *a, lapack_int lda, const
lapack_int *ipiv, double *b, lapack_int ldb)
lapack_int LAPACKE_dsytrs_aa_work (int matrix_layout, char uplo,
lapack_int n, lapack_int nrhs, const double *a, lapack_int lda,
const lapack_int *ipiv, double *b, lapack_int ldb, double *work,
lapack_int lwork)
lapack_int LAPACKE_ssytrs_aa (int matrix_layout, char uplo, lapack_int
n, lapack_int nrhs, const float *a, lapack_int lda, const lapack_int
*ipiv, float *b, lapack_int ldb)
lapack_int LAPACKE_ssytrs_aa_work (int matrix_layout, char uplo,
lapack_int n, lapack_int nrhs, const float *a, lapack_int lda, const
lapack_int *ipiv, float *b, lapack_int ldb, float *work, lapack_int
lwork)
lapack_int LAPACKE_zsytrs_aa (int matrix_layout, char uplo, lapack_int
n, lapack_int nrhs, const lapack_complex_double *a, lapack_int lda,
const lapack_int *ipiv, lapack_complex_double *b, lapack_int ldb)
lapack_int LAPACKE_zsytrs_aa_work (int matrix_layout, char uplo,
lapack_int n, lapack_int nrhs, const lapack_complex_double *a,
lapack_int lda, const lapack_int *ipiv, lapack_complex_double *b,
lapack_int ldb, lapack_complex_double *work, lapack_int lwork)
lapack_int LAPACKE_zhetrs_aa (int matrix_layout, char uplo, lapack_int
n, lapack_int nrhs, const lapack_complex_double *a, lapack_int lda,
const lapack_int *ipiv, lapack_complex_double *b, lapack_int ldb)
lapack_int LAPACKE_zhetrs_aa_work (int matrix_layout, char uplo,
lapack_int n, lapack_int nrhs, const lapack_complex_double *a,
lapack_int lda, const lapack_int *ipiv, lapack_complex_double *b,
lapack_int ldb, lapack_complex_double *work, lapack_int lwork)
and finally the _rk cuties show up 💜 note the extra e pointer sitting right after lda — that's float *e, double *e, lapack_complex_float *e — before ipiv even gets a turn. ssysv_rk and her _work twin, dsysv_rk and hers, then csysv_rk and csysv_rk_work… and that's where this part runs out of page 🍓
lapack_int LAPACKE_ssysv_rk (int matrix_layout, char uplo, lapack_int n,
lapack_int nrhs, float *a, lapack_int lda, float *e, lapack_int
*ipiv, float *b, lapack_int ldb)
lapack_int LAPACKE_ssysv_rk_work (int matrix_layout, char uplo,
lapack_int n, lapack_int nrhs, float *a, lapack_int lda, float *e,
lapack_int *ipiv, float *b, lapack_int ldb, float *work, lapack_int
lwork)
lapack_int LAPACKE_dsysv_rk (int matrix_layout, char uplo, lapack_int n,
lapack_int nrhs, double *a, lapack_int lda, double *e, lapack_int
*ipiv, double *b, lapack_int ldb)
lapack_int LAPACKE_dsysv_rk_work (int matrix_layout, char uplo,
lapack_int n, lapack_int nrhs, double *a, lapack_int lda, double *e,
lapack_int *ipiv, double *b, lapack_int ldb, double *work,
lapack_int lwork)
lapack_int LAPACKE_csysv_rk (int matrix_layout, char uplo, lapack_int n,
lapack_int nrhs, lapack_complex_float *a, lapack_int lda,
lapack_complex_float *e, lapack_int *ipiv, lapack_complex_float *b,
lapack_int ldb)
lapack_int LAPACKE_csysv_rk_work (int matrix_layout, char uplo,
lapack_int n, lapack_int nrhs, lapack_complex_float *a, lapack_int
lda, lapack_complex_float *e, lapack_int *ipiv, lapack_complex_float
*b, lapack_int ldb, lapack_complex_float *work, lapack_int lwork)
bestie do NOT panic that this cuts off mid-parenthesis — it's a 197-part page, we're on 57, the _rk story literally continues in the next chunk 😭 this is not a typo, it's just the manpage breathing
okay so we're still deep in the prototype dump and honestly? it's giving "the compiler's grocery list" and i'm obsessed. these next ones are all the _rk and _3 variants — the fancy newer factorization fam 💅 — so let's just keep scrolling through them, bestie, no skips.
first up, the _rk solve crew (symmetric and Hermitian, complex only, living their best life):
lapack_int LAPACKE_zsysv_rk (int matrix_layout, char uplo, lapack_int n,
lapack_int nrhs, lapack_complex_double *a, lapack_int lda,
lapack_complex_double *e, lapack_int *ipiv, lapack_complex_double
*b, lapack_int ldb)
lapack_int LAPACKE_zsysv_rk_work (int matrix_layout, char uplo,
lapack_int n, lapack_int nrhs, lapack_complex_double *a, lapack_int
lda, lapack_complex_double *e, lapack_int *ipiv,
lapack_complex_double *b, lapack_int ldb, lapack_complex_double
*work, lapack_int lwork)
lapack_int LAPACKE_chesv_rk (int matrix_layout, char uplo, lapack_int n,
lapack_int nrhs, lapack_complex_float *a, lapack_int lda,
lapack_complex_float *e, lapack_int *ipiv, lapack_complex_float *b,
lapack_int ldb)
lapack_int LAPACKE_chesv_rk_work (int matrix_layout, char uplo,
lapack_int n, lapack_int nrhs, lapack_complex_float *a, lapack_int
lda, lapack_complex_float *e, lapack_int *ipiv, lapack_complex_float
*b, lapack_int ldb, lapack_complex_float *work, lapack_int lwork)
lapack_int LAPACKE_zhesv_rk (int matrix_layout, char uplo, lapack_int n,
lapack_int nrhs, lapack_complex_double *a, lapack_int lda,
lapack_complex_double *e, lapack_int *ipiv, lapack_complex_double
*b, lapack_int ldb)
lapack_int LAPACKE_zhesv_rk_work (int matrix_layout, char uplo,
lapack_int n, lapack_int nrhs, lapack_complex_double *a, lapack_int
lda, lapack_complex_double *e, lapack_int *ipiv,
lapack_complex_double *b, lapack_int ldb, lapack_complex_double
*work, lapack_int lwork)
like, z = double complex, c = single complex, sy = symmetric, he = Hermitian, and sv = solve, and _rk is the whole rook-pivoting glow-up. the _work twin just lets you pass in your own work/lwork scratch space so you're not at the allocator's mercy 🫶
then the trf_rk factorization besties — this is the "break it down first" stage, all four real/complex flavours plus the Hermitian girlies:
lapack_int LAPACKE_ssytrf_rk (int matrix_layout, char uplo, lapack_int
n, float *a, lapack_int lda, float *e, lapack_int *ipiv)
lapack_int LAPACKE_dsytrf_rk (int matrix_layout, char uplo, lapack_int
n, double *a, lapack_int lda, double *e, lapack_int *ipiv)
lapack_int LAPACKE_csytrf_rk (int matrix_layout, char uplo, lapack_int
n, lapack_complex_float *a, lapack_int lda, lapack_complex_float *e,
lapack_int *ipiv)
lapack_int LAPACKE_zsytrf_rk (int matrix_layout, char uplo, lapack_int
n, lapack_complex_double *a, lapack_int lda, lapack_complex_double
*e, lapack_int *ipiv)
lapack_int LAPACKE_chetrf_rk (int matrix_layout, char uplo, lapack_int
n, lapack_complex_float *a, lapack_int lda, lapack_complex_float *e,
lapack_int *ipiv)
lapack_int LAPACKE_zhetrf_rk (int matrix_layout, char uplo, lapack_int
n, lapack_complex_double *a, lapack_int lda, lapack_complex_double
*e, lapack_int *ipiv)
see how e is a whole separate output? that's the rook pivoting's signature little souvenir — it carries the off-diagonal scaling factors, and ipiv is still doing its pivot thing. slay.
and their _work versions, because sometimes you gotta BYO buffer:
lapack_int LAPACKE_ssytrf_rk_work (int matrix_layout, char uplo,
lapack_int n, float *a, lapack_int lda, float *e, lapack_int *ipiv,
float *work, lapack_int lwork)
lapack_int LAPACKE_dsytrf_rk_work (int matrix_layout, char uplo,
lapack_int n, double *a, lapack_int lda, double *e, lapack_int
*ipiv, double *work, lapack_int lwork)
lapack_int LAPACKE_csytrf_rk_work (int matrix_layout, char uplo,
lapack_int n, lapack_complex_float *a, lapack_int lda,
lapack_complex_float *e, lapack_int *ipiv, lapack_complex_float
*work, lapack_int lwork)
lapack_int LAPACKE_zsytrf_rk_work (int matrix_layout, char uplo,
lapack_int n, lapack_complex_double *a, lapack_int lda,
lapack_complex_double *e, lapack_int *ipiv, lapack_complex_double
*work, lapack_int lwork)
lapack_int LAPACKE_chetrf_rk_work (int matrix_layout, char uplo,
lapack_int n, lapack_complex_float *a, lapack_int lda,
lapack_complex_float *e, lapack_int *ipiv, lapack_complex_float
*work, lapack_int lwork)
lapack_int LAPACKE_zhetrf_rk_work (int matrix_layout, char uplo,
lapack_int n, lapack_complex_double *a, lapack_int lda,
lapack_complex_double *e, lapack_int *ipiv, lapack_complex_double
*work, lapack_int lwork)
okay now the trs_3 girls — solving after the _3 factorization, note the const on a, e, and ipiv because we're just reading them, not messy-editing them. respectful. periodt.
lapack_int LAPACKE_csytrs_3 (int matrix_layout, char uplo, lapack_int n,
lapack_int nrhs, const lapack_complex_float *a, lapack_int lda,
const lapack_complex_float *e, const lapack_int *ipiv,
lapack_complex_float *b, lapack_int ldb)
lapack_int LAPACKE_csytrs_3_work (int matrix_layout, char uplo,
lapack_int n, lapack_int nrhs, const lapack_complex_float *a,
lapack_int lda, const lapack_complex_float *e, const lapack_int
*ipiv, lapack_complex_float *b, lapack_int ldb)
lapack_int LAPACKE_chetrs_3 (int matrix_layout, char uplo, lapack_int n,
lapack_int nrhs, const lapack_complex_float *a, lapack_int lda,
const lapack_complex_float *e, const lapack_int *ipiv,
lapack_complex_float *b, lapack_int ldb)
lapack_int LAPACKE_chetrs_3_work (int matrix_layout, char uplo,
lapack_int n, lapack_int nrhs, const lapack_complex_float *a,
lapack_int lda, const lapack_complex_float *e, const lapack_int
*ipiv, lapack_complex_float *b, lapack_int ldb)
lapack_int LAPACKE_dsytrs_3 (int matrix_layout, char uplo, lapack_int n,
lapack_int nrhs, const double *a, lapack_int lda, const double *e,
const lapack_int *ipiv, double *b, lapack_int ldb)
lapack_int LAPACKE_dsytrs_3_work (int matrix_layout, char uplo,
lapack_int n, lapack_int nrhs, const double *a, lapack_int lda,
const double *e, const lapack_int *ipiv, double *b, lapack_int ldb)
lapack_int LAPACKE_ssytrs_3 (int matrix_layout, char uplo, lapack_int n,
lapack_int nrhs, const float *a, lapack_int lda, const float *e,
const lapack_int *ipiv, float *b, lapack_int ldb)
lapack_int LAPACKE_ssytrs_3_work (int matrix_layout, char uplo,
lapack_int n, lapack_int nrhs, const float *a, lapack_int lda, const
float *e, const lapack_int *ipiv, float *b, lapack_int ldb)
lapack_int LAPACKE_zsytrs_3 (int matrix_layout, char uplo, lapack_int n,
lapack_int nrhs, const lapack_complex_double *a, lapack_int lda,
const lapack_complex_double *e, const lapack_int *ipiv,
lapack_complex_double *b, lapack_int ldb)
lapack_int LAPACKE_zsytrs_3_work (int matrix_layout, char uplo,
lapack_int n, lapack_int nrhs, const lapack_complex_double *a,
lapack_int lda, const lapack_complex_double *e, const lapack_int
*ipiv, lapack_complex_double *b, lapack_int ldb)
lapack_int LAPACKE_zhetrs_3 (int matrix_layout, char uplo, lapack_int n,
lapack_int nrhs, const lapack_complex_double *a, lapack_int lda,
const lapack_complex_double *e, const lapack_int *ipiv,
lapack_complex_double *b, lapack_int ldb)
lapack_int LAPACKE_zhetrs_3_work (int matrix_layout, char uplo,
lapack_int n, lapack_int nrhs, const lapack_complex_double *a,
lapack_int lda, const lapack_complex_double *e, const lapack_int
*ipiv, lapack_complex_double *b, lapack_int ldb)
next: the tri_3 icons — computing the actual inverse after the _3 factorization. a is not const here (it gets overwritten with the inverse, bestie, so don't come crying if your original matrix ghosts you 😭):
lapack_int LAPACKE_ssytri_3 (int matrix_layout, char uplo, lapack_int n,
float *a, lapack_int lda, const float *e, const lapack_int *ipiv)
lapack_int LAPACKE_dsytri_3 (int matrix_layout, char uplo, lapack_int n,
double *a, lapack_int lda, const double *e, const lapack_int *ipiv)
lapack_int LAPACKE_csytri_3 (int matrix_layout, char uplo, lapack_int n,
lapack_complex_float *a, lapack_int lda, const lapack_complex_float
*e, const lapack_int *ipiv)
lapack_int LAPACKE_zsytri_3 (int matrix_layout, char uplo, lapack_int n,
lapack_complex_double *a, lapack_int lda, const
lapack_complex_double *e, const lapack_int *ipiv)
lapack_int LAPACKE_chetri_3 (int matrix_layout, char uplo, lapack_int n,
lapack_complex_float *a, lapack_int lda, const lapack_complex_float
*e, const lapack_int *ipiv)
lapack_int LAPACKE_zhetri_3 (int matrix_layout, char uplo, lapack_int n,
lapack_complex_double *a, lapack_int lda, const
lapack_complex_double *e, const lapack_int *ipiv)
lapack_int LAPACKE_ssytri_3_work (int matrix_layout, char uplo,
lapack_int n, float *a, lapack_int lda, const float *e, const
lapack_int *ipiv, float *work, lapack_int lwork)
lapack_int LAPACKE_dsytri_3_work (int matrix_layout, char uplo,
lapack_int n, double *a, lapack_int lda, const double *e, const
lapack_int *ipiv, double *work, lapack_int lwork)
lapack_int LAPACKE_csytri_3_work (int matrix_layout, char uplo,
lapack_int n, lapack_complex_float *a, lapack_int lda, const
lapack_complex_float *e, const lapack_int *ipiv,
lapack_complex_float *work, lapack_int lwork)
lapack_int LAPACKE_zsytri_3_work (int matrix_layout, char uplo,
lapack_int n, lapack_complex_double *a, lapack_int lda, const
lapack_complex_double *e, const lapack_int *ipiv,
lapack_complex_double *work, lapack_int lwork)
lapack_int LAPACKE_chetri_3_work (int matrix_layout, char uplo,
lapack_int n, lapack_complex_float *a, lapack_int lda, const
lapack_complex_float *e, const lapack_int *ipiv,
lapack_complex_float *work, lapack_int lwork)
lapack_int LAPACKE_zhetri_3_work (int matrix_layout, char uplo,
lapack_int n, lapack_complex_double *a, lapack_int lda, const
lapack_complex_double *e, const lapack_int *ipiv,
lapack_complex_double *work, lapack_int lwork)
and finally (for this stretch, anyway 💀) the con_3 crew — condition number estimators, i.e. "how sketchy is my matrix, on a scale from slay to yikes". note the anorm input and rcond output, plus these take iwork as well as work in the _work versions. special little detail, we love a distinct signature:
lapack_int LAPACKE_ssycon_3 (int matrix_layout, char uplo, lapack_int n,
const float *a, lapack_int lda, const float *e, const lapack_int
*ipiv, float anorm, float *rcond)
lapack_int LAPACKE_dsycon_3 (int matrix_layout, char uplo, lapack_int n,
const double *a, lapack_int lda, const double *e, const lapack_int
*ipiv, double anorm, double *rcond)
lapack_int LAPACKE_csycon_3 (int matrix_layout, char uplo, lapack_int n,
const lapack_complex_float *a, lapack_int lda, const
lapack_complex_float *e, const lapack_int *ipiv, float anorm, float
*rcond)
lapack_int LAPACKE_zsycon_3 (int matrix_layout, char uplo, lapack_int n,
const lapack_complex_double *a, lapack_int lda, const
lapack_complex_double *e, const lapack_int *ipiv, double anorm,
double *rcond)
lapack_int LAPACKE_checon_3 (int matrix_layout, char uplo, lapack_int n,
const lapack_complex_float *a, lapack_int lda, const
lapack_complex_float *e, const lapack_int *ipiv, float anorm, float
*rcond)
lapack_int LAPACKE_zhecon_3 (int matrix_layout, char uplo, lapack_int n,
const lapack_complex_double *a, lapack_int lda, const
lapack_complex_double *e, const lapack_int *ipiv, double anorm,
double *rcond)
lapack_int LAPACKE_ssycon_3_work (int matrix_layout, char uplo,
lapack_int n, const float *a, lapack_int lda, const float *e, const
lapack_int *ipiv, float anorm, float *rcond, float *work, lapack_int
*iwork)
lapack_int LAPACKE_dsycon_3_work (int matrix_layout, char uplo,
lapack_int n, const double *a, lapack_int lda, const double *e,
const lapack_int *ipiv, double anorm, double *rcond, double *work,
lapack_int *iwork)
lapack_int LAPACKE_csycon_3_work (int matrix_layout, char uplo,
lapack_int n, const lapack_complex_float *a, lapack_int lda, const
lapack_complex_float *e, const lapack_int *ipiv, float anorm, float
*rcond, lapack_complex_float *work)
okay that's this batch of prototype girlies handled — and yes the list keeps going, because of course it does 💀 but we're literally so close to being fluent in this header, i can feel it. more coming right up ✨
okay so we're still deep in prototype city and honestly? this section is giving "the header file that ate an entire afternoon" 😭 but it's fine, because every single one of these bad boys returns a lapack_int and takes int matrix_layout as its very first argument — that's just the house style, periodt 💅 let's take them in squads ✨
🫶 the condition-number girlies (the _3 era)
these are the _3-flavored condition estimators. you hand over uplo, the dimension n, the matrix a with its lda, the e array, the pivot list ipiv, and an anorm that you bring yourself. rcond comes back out at you through a pointer, and there's a work array because of course there is 🎀
lapack_int LAPACKE_zsycon_3_work (int matrix_layout, char uplo, lapack_int n, const lapack_complex_double *a, lapack_int lda, const lapack_complex_double *e, const lapack_int *ipiv, double anorm, double *rcond, lapack_complex_double *work)
lapack_int LAPACKE_checon_3_work (int matrix_layout, char uplo, lapack_int n, const lapack_complex_float *a, lapack_int lda, const lapack_complex_float *e, const lapack_int *ipiv, float anorm, float *rcond, lapack_complex_float *work)
lapack_int LAPACKE_zhecon_3_work (int matrix_layout, char uplo, lapack_int n, const lapack_complex_double *a, lapack_int lda, const lapack_complex_double *e, const lapack_int *ipiv, double anorm, double *rcond, lapack_complex_double *work)
note how z and c get double/float anorm and rcond — the complex types keep their real precision for those two, iykyk 🌸
🦋 the gelq family (LQ factorization, no cap)
four precisions, four _work-less convenience calls. you pass m, n, the matrix a with lda, then t and its tsize 🌈
lapack_int LAPACKE_sgelq (int matrix_layout, lapack_int m, lapack_int n, float *a, lapack_int lda, float *t, lapack_int tsize)
lapack_int LAPACKE_dgelq (int matrix_layout, lapack_int m, lapack_int n, double *a, lapack_int lda, double *t, lapack_int tsize)
lapack_int LAPACKE_cgelq (int matrix_layout, lapack_int m, lapack_int n, lapack_complex_float *a, lapack_int lda, lapack_complex_float *t, lapack_int tsize)
lapack_int LAPACKE_zgelq (int matrix_layout, lapack_int m, lapack_int n, lapack_complex_double *a, lapack_int lda, lapack_complex_double *t, lapack_int tsize)
and the _work versions, which tack on work + lwork at the end so you can be the main character who manages her own scratch space 🔥
lapack_int LAPACKE_sgelq_work (int matrix_layout, lapack_int m, lapack_int n, float *a, lapack_int lda, float *t, lapack_int tsize, float *work, lapack_int lwork)
lapack_int LAPACKE_dgelq_work (int matrix_layout, lapack_int m, lapack_int n, double *a, lapack_int lda, double *t, lapack_int tsize, double *work, lapack_int lwork)
lapack_int LAPACKE_cgelq_work (int matrix_layout, lapack_int m, lapack_int n, lapack_complex_float *a, lapack_int lda, lapack_complex_float *t, lapack_int tsize, lapack_complex_float *work, lapack_int lwork)
lapack_int LAPACKE_zgelq_work (int matrix_layout, lapack_int m, lapack_int n, lapack_complex_double *a, lapack_int lda, lapack_complex_double *t, lapack_int tsize, lapack_complex_double *work, lapack_int lwork)
💜 gemlq — the multiply-by-Q squad
same energy, but now it's a multiply: side, trans, m, n, k, a const a with lda, a const t with tsize, and c with ldc getting written into 🎀
lapack_int LAPACKE_sgemlq (int matrix_layout, char side, char trans, lapack_int m, lapack_int n, lapack_int k, const float *a, lapack_int lda, const float *t, lapack_int tsize, float *c, lapack_int ldc)
lapack_int LAPACKE_dgemlq (int matrix_layout, char side, char trans, lapack_int m, lapack_int n, lapack_int k, const double *a, lapack_int lda, const double *t, lapack_int tsize, double *c, lapack_int ldc)
lapack_int LAPACKE_cgemlq (int matrix_layout, char side, char trans, lapack_int m, lapack_int n, lapack_int k, const lapack_complex_float *a, lapack_int lda, const lapack_complex_float *t, lapack_int tsize, lapack_complex_float *c, lapack_int ldc)
lapack_int LAPACKE_zgemlq (int matrix_layout, char side, char trans, lapack_int m, lapack_int n, lapack_int k, const lapack_complex_double *a, lapack_int lda, const lapack_complex_double *t, lapack_int tsize, lapack_complex_double *c, lapack_int ldc)
plus the _work foursome — identical, then work and lwork riding at the back 🚗
lapack_int LAPACKE_sgemlq_work (int matrix_layout, char side, char trans, lapack_int m, lapack_int n, lapack_int k, const float *a, lapack_int lda, const float *t, lapack_int tsize, float *c, lapack_int ldc, float *work, lapack_int lwork)
lapack_int LAPACKE_dgemlq_work (int matrix_layout, char side, char trans, lapack_int m, lapack_int n, lapack_int k, const double *a, lapack_int lda, const double *t, lapack_int tsize, double *c, lapack_int ldc, double *work, lapack_int lwork)
lapack_int LAPACKE_cgemlq_work (int matrix_layout, char side, char trans, lapack_int m, lapack_int n, lapack_int k, const lapack_complex_float *a, lapack_int lda, const lapack_complex_float *t, lapack_int tsize, lapack_complex_float *c, lapack_int ldc, lapack_complex_float *work, lapack_int lwork)
lapack_int LAPACKE_zgemlq_work (int matrix_layout, char side, char trans, lapack_int m, lapack_int n, lapack_int k, const lapack_complex_double *a, lapack_int lda, const lapack_complex_double *t, lapack_int tsize, lapack_complex_double *c, lapack_int ldc, lapack_complex_double *work, lapack_int lwork)
🧚 geqr — yes it's the QR twin, we love symmetry
literally the gelq shape again, just qr instead of lq. m, n, a, lda, t, tsize — go off ⭐
lapack_int LAPACKE_sgeqr (int matrix_layout, lapack_int m, lapack_int n, float *a, lapack_int lda, float *t, lapack_int tsize)
lapack_int LAPACKE_dgeqr (int matrix_layout, lapack_int m, lapack_int n, double *a, lapack_int lda, double *t, lapack_int tsize)
lapack_int LAPACKE_cgeqr (int matrix_layout, lapack_int m, lapack_int n, lapack_complex_float *a, lapack_int lda, lapack_complex_float *t, lapack_int tsize)
lapack_int LAPACKE_zgeqr (int matrix_layout, lapack_int m, lapack_int n, lapack_complex_double *a, lapack_int lda, lapack_complex_double *t, lapack_int tsize)
and their _work besties 🫶
lapack_int LAPACKE_sgeqr_work (int matrix_layout, lapack_int m, lapack_int n, float *a, lapack_int lda, float *t, lapack_int tsize, float *work, lapack_int lwork)
lapack_int LAPACKE_dgeqr_work (int matrix_layout, lapack_int m, lapack_int n, double *a, lapack_int lda, double *t, lapack_int tsize, double *work, lapack_int lwork)
lapack_int LAPACKE_cgeqr_work (int matrix_layout, lapack_int m, lapack_int n, lapack_complex_float *a, lapack_int lda, lapack_complex_float *t, lapack_int tsize, lapack_complex_float *work, lapack_int lwork)
lapack_int LAPACKE_zgeqr_work (int matrix_layout, lapack_int m, lapack_int n, lapack_complex_double *a, lapack_int lda, lapack_complex_double *t, lapack_int tsize, lapack_complex_double *work, lapack_int lwork)
💖 gemqr — the multiply-by-Q (QR version)
same side/trans/m/n/k situation, const a, const t, mutable c, and that ldc 💅
lapack_int LAPACKE_sgemqr (int matrix_layout, char side, char trans, lapack_int m, lapack_int n, lapack_int k, const float *a, lapack_int lda, const float *t, lapack_int tsize, float *c, lapack_int ldc)
lapack_int LAPACKE_dgemqr (int matrix_layout, char side, char trans, lapack_int m, lapack_int n, lapack_int k, const double *a, lapack_int lda, const double *t, lapack_int tsize, double *c, lapack_int ldc)
lapack_int LAPACKE_cgemqr (int matrix_layout, char side, char trans, lapack_int m, lapack_int n, lapack_int k, const lapack_complex_float *a, lapack_int lda, const lapack_complex_float *t, lapack_int tsize, lapack_complex_float *c, lapack_int ldc)
lapack_int LAPACKE_zgemqr (int matrix_layout, char side, char trans, lapack_int m, lapack_int n, lapack_int k, const lapack_complex_double *a, lapack_int lda, const lapack_complex_double *t, lapack_int tsize, lapack_complex_double *c, lapack_int ldc)
_work crew, as promised 🎀
lapack_int LAPACKE_sgemqr_work (int matrix_layout, char side, char trans, lapack_int m, lapack_int n, lapack_int k, const float *a, lapack_int lda, const float *t, lapack_int tsize, float *c, lapack_int ldc, float *work, lapack_int lwork)
lapack_int LAPACKE_dgemqr_work (int matrix_layout, char side, char trans, lapack_int m, lapack_int n, lapack_int k, const double *a, lapack_int lda, const double *t, lapack_int tsize, double *c, lapack_int ldc, double *work, lapack_int lwork)
lapack_int LAPACKE_cgemqr_work (int matrix_layout, char side, char trans, lapack_int m, lapack_int n, lapack_int k, const lapack_complex_float *a, lapack_int lda, const lapack_complex_float *t, lapack_int tsize, lapack_complex_float *c, lapack_int ldc, lapack_complex_float *work, lapack_int lwork)
lapack_int LAPACKE_zgemqr_work (int matrix_layout, char side, char trans, lapack_int m, lapack_int n, lapack_int k, const lapack_complex_double *a, lapack_int lda, const lapack_complex_double *t, lapack_int tsize, lapack_complex_double *c, lapack_int ldc, lapack_complex_double *work, lapack_int lwork)
🍓 getsls — trans, m, n, nrhs gang
here a and b are not const (they get chewed up), lda and ldb do their thing, and nrhs tells it how many right-hand sides are in the group chat 👑
lapack_int LAPACKE_sgetsls (int matrix_layout, char trans, lapack_int m, lapack_int n, lapack_int nrhs, float *a, lapack_int lda, float *b, lapack_int ldb)
lapack_int LAPACKE_dgetsls (int matrix_layout, char trans, lapack_int m, lapack_int n, lapack_int nrhs, double *a, lapack_int lda, double *b, lapack_int ldb)
lapack_int LAPACKE_cgetsls (int matrix_layout, char trans, lapack_int m, lapack_int n, lapack_int nrhs, lapack_complex_float *a, lapack_int lda, lapack_complex_float *b, lapack_int ldb)
lapack_int LAPACKE_zgetsls (int matrix_layout, char trans, lapack_int m, lapack_int n, lapack_int nrhs, lapack_complex_double *a, lapack_int lda, lapack_complex_double *b, lapack_int ldb)
and obviously _work, because work/lwork never miss a party 😭
lapack_int LAPACKE_sgetsls_work (int matrix_layout, char trans, lapack_int m, lapack_int n, lapack_int nrhs, float *a, lapack_int lda, float *b, lapack_int ldb, float *work, lapack_int lwork)
lapack_int LAPACKE_dgetsls_work (int matrix_layout, char trans, lapack_int m, lapack_int n, lapack_int nrhs, double *a, lapack_int lda, double *b, lapack_int ldb, double *work, lapack_int lwork)
lapack_int LAPACKE_cgetsls_work (int matrix_layout, char trans, lapack_int m, lapack_int n, lapack_int nrhs, lapack_complex_float *a, lapack_int lda, lapack_complex_float *b, lapack_int ldb, lapack_complex_float *work, lapack_int lwork)
lapack_int LAPACKE_zgetsls_work (int matrix_layout, char trans, lapack_int m, lapack_int n, lapack_int nrhs, lapack_complex_double *a, lapack_int lda, lapack_complex_double *b, lapack_int ldb, lapack_complex_double *work, lapack_int lwork)
👑 the 2stage era has entered the chat
welcome to the two-stage eigenvalue routines. the plain ev and evd ones are jobz, uplo, n, a, lda, w — cute, compact, iconic 🔥
lapack_int LAPACKE_ssyev_2stage (int matrix_layout, char jobz, char uplo, lapack_int n, float *a, lapack_int lda, float *w)
lapack_int LAPACKE_dsyev_2stage (int matrix_layout, char jobz, char uplo, lapack_int n, double *a, lapack_int lda, double *w)
lapack_int LAPACKE_ssyevd_2stage (int matrix_layout, char jobz, char uplo, lapack_int n, float *a, lapack_int lda, float *w)
lapack_int LAPACKE_dsyevd_2stage (int matrix_layout, char jobz, char uplo, lapack_int n, double *a, lapack_int lda, double *w)
then evr shows up with the full glam: jobz, range, uplo, n, a, lda, the interval vl + vu, the indices il + iu, abstol, plus m, w, z, ldz and isuppz 😮💨
lapack_int LAPACKE_ssyevr_2stage (int matrix_layout, char jobz, char range, char uplo, lapack_int n, float *a, lapack_int lda, float vl, float vu, lapack_int il, lapack_int iu, float abstol, lapack_int *m, float *w, float *z, lapack_int ldz, lapack_int *isuppz)
lapack_int LAPACKE_dsyevr_2stage (int matrix_layout, char jobz, char range, char uplo, lapack_int n, double *a, lapack_int lda, double vl, double vu, lapack_int il, lapack_int iu, double abstol, lapack_int *m, double *w, double *z, lapack_int ldz, lapack_int *isuppz)
and evx is basically evr's cousin who swapped isuppz for ifail 🙈
lapack_int LAPACKE_ssyevx_2stage (int matrix_layout, char jobz, char range, char uplo, lapack_int n, float *a, lapack_int lda, float vl, float vu, lapack_int il, lapack_int iu, float abstol, lapack_int *m, float *w, float *z, lapack_int ldz, lapack_int *ifail)
lapack_int LAPACKE_dsyevx_2stage (int matrix_layout, char jobz, char
okay and that last one literally gets cut off mid-signature right here in the source — the double version of syevx_2stage keeps going into the next chunk, so don't panic, she's not broken, she's just continuing 💀 see you in the next drop bestie 🦋
okay so we literally pick up mid-signature — the tail end of the last one from before is this, no cap:
range, char uplo, lapack_int n, double *a, lapack_int lda, double
vl, double vu, lapack_int il, lapack_int iu, double abstol,
lapack_int *m, double *w, double *z, lapack_int ldz, lapack_int
*ifail)
and now we're in the _2stage_work era, bestie. symmetric eigenvalue energy, single and double precision, both showing up like they're matching outfits 🎀
lapack_int LAPACKE_ssyev_2stage_work (int matrix_layout, char jobz, char
uplo, lapack_int n, float *a, lapack_int lda, float *w, float *work,
lapack_int lwork)
lapack_int LAPACKE_dsyev_2stage_work (int matrix_layout, char jobz, char
uplo, lapack_int n, double *a, lapack_int lda, double *w, double
*work, lapack_int lwork)
lapack_int LAPACKE_ssyevd_2stage_work (int matrix_layout, char jobz,
char uplo, lapack_int n, float *a, lapack_int lda, float *w, float
*work, lapack_int lwork, lapack_int *iwork, lapack_int liwork)
lapack_int LAPACKE_dsyevd_2stage_work (int matrix_layout, char jobz,
char uplo, lapack_int n, double *a, lapack_int lda, double *w,
double *work, lapack_int lwork, lapack_int *iwork, lapack_int
liwork)
see how the d versions are just the s versions but thiccer? double the precision, double the work array drama 💅 stay with me.
next up: the evr and evx girlies — they brought their range, vl, vu, il, iu and abstol besties along, plus output counters and workspace for DAYS:
lapack_int LAPACKE_ssyevr_2stage_work (int matrix_layout, char jobz,
char range, char uplo, lapack_int n, float *a, lapack_int lda, float
vl, float vu, lapack_int il, lapack_int iu, float abstol, lapack_int
*m, float *w, float *z, lapack_int ldz, lapack_int *isuppz, float
*work, lapack_int lwork, lapack_int *iwork, lapack_int liwork)
lapack_int LAPACKE_dsyevr_2stage_work (int matrix_layout, char jobz,
char range, char uplo, lapack_int n, double *a, lapack_int lda,
double vl, double vu, lapack_int il, lapack_int iu, double abstol,
lapack_int *m, double *w, double *z, lapack_int ldz, lapack_int
*isuppz, double *work, lapack_int lwork, lapack_int *iwork,
lapack_int liwork)
lapack_int LAPACKE_ssyevx_2stage_work (int matrix_layout, char jobz,
char range, char uplo, lapack_int n, float *a, lapack_int lda, float
vl, float vu, lapack_int il, lapack_int iu, float abstol, lapack_int
*m, float *w, float *z, lapack_int ldz, float *work, lapack_int
lwork, lapack_int *iwork, lapack_int *ifail)
lapack_int LAPACKE_dsyevx_2stage_work (int matrix_layout, char jobz,
char range, char uplo, lapack_int n, double *a, lapack_int lda,
double vl, double vu, lapack_int il, lapack_int iu, double abstol,
lapack_int *m, double *w, double *z, lapack_int ldz, double *work,
lapack_int lwork, lapack_int *iwork, lapack_int *ifail)
the way evr gives you isuppz and evx gives you ifail instead… they're different flavors, okay? don't mix them up 🦋
and THEN we pivot to Hermitian matrices with a c/z moment — complex single and complex double, living their best _2stage lives:
lapack_int LAPACKE_cheev_2stage (int matrix_layout, char jobz, char
uplo, lapack_int n, lapack_complex_float *a, lapack_int lda, float
*w)
lapack_int LAPACKE_zheev_2stage (int matrix_layout, char jobz, char
uplo, lapack_int n, lapack_complex_double *a, lapack_int lda, double
*w)
lapack_int LAPACKE_cheevd_2stage (int matrix_layout, char jobz, char
uplo, lapack_int n, lapack_complex_float *a, lapack_int lda, float
*w)
lapack_int LAPACKE_zheevd_2stage (int matrix_layout, char jobz, char
uplo, lapack_int n, lapack_complex_double *a, lapack_int lda, double
*w)
these are the cute short ones — no extra workspace args in the plain versions, just jobz, uplo, n, a, lda, and w. minimal, clean, iconic ✨
then the evr and evx Hermitian versions roll in with the full entourage again, range through isuppz / ifail:
lapack_int LAPACKE_cheevr_2stage (int matrix_layout, char jobz, char
range, char uplo, lapack_int n, lapack_complex_float *a, lapack_int
lda, float vl, float vu, lapack_int il, lapack_int iu, float abstol,
lapack_int *m, float *w, lapack_complex_float *z, lapack_int ldz,
lapack_int *isuppz)
lapack_int LAPACKE_zheevr_2stage (int matrix_layout, char jobz, char
range, char uplo, lapack_int n, lapack_complex_double *a, lapack_int
lda, double vl, double vu, lapack_int il, lapack_int iu, double
abstol, lapack_int *m, double *w, lapack_complex_double *z,
lapack_int ldz, lapack_int *isuppz)
lapack_int LAPACKE_cheevx_2stage (int matrix_layout, char jobz, char
range, char uplo, lapack_int n, lapack_complex_float *a, lapack_int
lda, float vl, float vu, lapack_int il, lapack_int iu, float abstol,
lapack_int *m, float *w, lapack_complex_float *z, lapack_int ldz,
lapack_int *ifail)
lapack_int LAPACKE_zheevx_2stage (int matrix_layout, char jobz, char
range, char uplo, lapack_int n, lapack_complex_double *a, lapack_int
lda, double vl, double vu, lapack_int il, lapack_int iu, double
abstol, lapack_int *m, double *w, lapack_complex_double *z,
lapack_int ldz, lapack_int *ifail)
and now the _work versions of those, where rwork enters the chat 🌸 (yes, complex routines get a real workspace buddy, that's just how it is):
lapack_int LAPACKE_cheev_2stage_work (int matrix_layout, char jobz, char
uplo, lapack_int n, lapack_complex_float *a, lapack_int lda, float
*w, lapack_complex_float *work, lapack_int lwork, float *rwork)
lapack_int LAPACKE_zheev_2stage_work (int matrix_layout, char jobz, char
uplo, lapack_int n, lapack_complex_double *a, lapack_int lda, double
*w, lapack_complex_double *work, lapack_int lwork, double *rwork)
lapack_int LAPACKE_cheevd_2stage_work (int matrix_layout, char jobz,
char uplo, lapack_int n, lapack_complex_float *a, lapack_int lda,
float *w, lapack_complex_float *work, lapack_int lwork, float
*rwork, lapack_int lrwork, lapack_int *iwork, lapack_int liwork)
lapack_int LAPACKE_zheevd_2stage_work (int matrix_layout, char jobz,
char uplo, lapack_int n, lapack_complex_double *a, lapack_int lda,
double *w, lapack_complex_double *work, lapack_int lwork, double
*rwork, lapack_int lrwork, lapack_int *iwork, lapack_int liwork)
like, work, rwork, iwork, lwork, lrwork, liwork — it's giving workspace overload and honestly? valid. 😭
here come the evr / evx work variants, fully accessorized:
lapack_int LAPACKE_cheevr_2stage_work (int matrix_layout, char jobz,
char range, char uplo, lapack_int n, lapack_complex_float *a,
lapack_int lda, float vl, float vu, lapack_int il, lapack_int iu,
float abstol, lapack_int *m, float *w, lapack_complex_float *z,
lapack_int ldz, lapack_int *isuppz, lapack_complex_float *work,
lapack_int lwork, float *rwork, lapack_int lrwork, lapack_int
*iwork, lapack_int liwork)
lapack_int LAPACKE_zheevr_2stage_work (int matrix_layout, char jobz,
char range, char uplo, lapack_int n, lapack_complex_double *a,
lapack_int lda, double vl, double vu, lapack_int il, lapack_int iu,
double abstol, lapack_int *m, double *w, lapack_complex_double *z,
lapack_int ldz, lapack_int *isuppz, lapack_complex_double *work,
lapack_int lwork, double *rwork, lapack_int lrwork, lapack_int
*iwork, lapack_int liwork)
lapack_int LAPACKE_cheevx_2stage_work (int matrix_layout, char jobz,
char range, char uplo, lapack_int n, lapack_complex_float *a,
lapack_int lda, float vl, float vu, lapack_int il, lapack_int iu,
float abstol, lapack_int *m, float *w, lapack_complex_float *z,
lapack_int ldz, lapack_complex_float *work, lapack_int lwork, float
*rwork, lapack_int *iwork, lapack_int *ifail)
lapack_int LAPACKE_zheevx_2stage_work (int matrix_layout, char jobz,
char range, char uplo, lapack_int n, lapack_complex_double *a,
lapack_int lda, double vl, double vu, lapack_int il, lapack_int iu,
double abstol, lapack_int *m, double *w, lapack_complex_double *z,
lapack_int ldz, lapack_complex_double *work, lapack_int lwork,
double *rwork, lapack_int *iwork, lapack_int *ifail)
okay now the band-matrix section enters and it's a whole different silhouette — you got kd, ab, ldab, and often q / ldq in the mix. banded symmetric, single + double, let's go 🔥
lapack_int LAPACKE_ssbev_2stage (int matrix_layout, char jobz, char
uplo, lapack_int n, lapack_int kd, float *ab, lapack_int ldab, float
*w, float *z, lapack_int ldz)
lapack_int LAPACKE_dsbev_2stage (int matrix_layout, char jobz, char
uplo, lapack_int n, lapack_int kd, double *ab, lapack_int ldab,
double *w, double *z, lapack_int ldz)
lapack_int LAPACKE_ssbevd_2stage (int matrix_layout, char jobz, char
uplo, lapack_int n, lapack_int kd, float *ab, lapack_int ldab, float
*w, float *z, lapack_int ldz)
lapack_int LAPACKE_dsbevd_2stage (int matrix_layout, char jobz, char
uplo, lapack_int n, lapack_int kd, double *ab, lapack_int ldab,
double *w, double *z, lapack_int ldz)
the evx versions show up with range, vl, vu, il, iu, abstol, m, ifail AND the q/ldq pair — main character energy fr fr:
lapack_int LAPACKE_ssbevx_2stage (int matrix_layout, char jobz, char
range, char uplo, lapack_int n, lapack_int kd, float *ab, lapack_int
ldab, float *q, lapack_int ldq, float vl, float vu, lapack_int il,
lapack_int iu, float abstol, lapack_int *m, float *w, float *z,
lapack_int ldz, lapack_int *ifail)
lapack_int LAPACKE_dsbevx_2stage (int matrix_layout, char jobz, char
range, char uplo, lapack_int n, lapack_int kd, double *ab,
lapack_int ldab, double *q, lapack_int ldq, double vl, double vu,
lapack_int il, lapack_int iu, double abstol, lapack_int *m, double
*w, double *z, lapack_int ldz, lapack_int *ifail)
and the _work band girlies — ssbev/dsbev pick up work + lwork:
lapack_int LAPACKE_ssbev_2stage_work (int matrix_layout, char jobz, char
uplo, lapack_int n, lapack_int kd, float *ab, lapack_int ldab, float
*w, float *z, lapack_int ldz, float *work, lapack_int lwork)
lapack_int LAPACKE_dsbev_2stage_work (int matrix_layout, char jobz, char
uplo, lapack_int n, lapack_int kd, double *ab, lapack_int ldab,
double *w, double *z, lapack_int ldz, double *work, lapack_int
lwork)
ssbevd/dsbevd also bring iwork and liwork along for the ride:
lapack_int LAPACKE_ssbevd_2stage_work (int matrix_layout, char jobz,
char uplo, lapack_int n, lapack_int kd, float *ab, lapack_int ldab,
float *w, float *z, lapack_int ldz, float *work, lapack_int lwork,
lapack_int *iwork, lapack_int liwork)
lapack_int LAPACKE_dsbevd_2stage_work (int matrix_layout, char jobz,
char uplo, lapack_int n, lapack_int kd, double *ab, lapack_int ldab,
double *w, double *z, lapack_int ldz, double *work, lapack_int
lwork, lapack_int *iwork, lapack_int liwork)
and the evx work ones are the fullest fit — q, ldq, range stuff, abstol, m, z, ldz, work, lwork, iwork, ifail, all of it 💀:
lapack_int LAPACKE_ssbevx_2stage_work (int matrix_layout, char jobz,
char range, char uplo, lapack_int n, lapack_int kd, float *ab,
lapack_int ldab, float *q, lapack_int ldq, float vl, float vu,
lapack_int il, lapack_int iu, float abstol, lapack_int *m, float *w,
float *z, lapack_int ldz, float *work, lapack_int lwork, lapack_int
*iwork, lapack_int *ifail)
lapack_int LAPACKE_dsbevx_2stage_work (int matrix_layout, char jobz,
char range, char uplo, lapack_int n, lapack_int kd, double *ab,
lapack_int ldab, double *q, lapack_int ldq, double vl, double vu,
lapack_int il, lapack_int iu, double abstol, lapack_int *m, double
*w, double *z, lapack_int ldz, double *work, lapack_int lwork,
lapack_int *iwork, lapack_int *ifail)
finally for this stretch, banded Hermitian — chbev/zhbev and chbevd/zhbevd, complex banded besties with their ab, ldab, w, z, ldz setup 🌈:
lapack_int LAPACKE_chbev_2stage (int matrix_layout, char jobz, char
uplo, lapack_int n, lapack_int kd, lapack_complex_float *ab,
lapack_int ldab, float *w, lapack_complex_float *z, lapack_int ldz)
lapack_int LAPACKE_zhbev_2stage (int matrix_layout, char jobz, char
uplo, lapack_int n, lapack_int kd, lapack_complex_double *ab,
lapack_int ldab, double *w, lapack_complex_double *z, lapack_int
ldz)
lapack_int LAPACKE_chbevd_2stage (int matrix_layout, char jobz, char
uplo, lapack_int n, lapack_int kd, lapack_complex_float *ab,
lapack_int ldab, float *w, lapack_complex_float *z, lapack_int ldz)
lapack_int LAPACKE_zhbevd_2stage (int matrix_layout, char jobz, char
uplo, lapack_int n, lapack_int kd, lapack_complex_double *ab,
lapack_int ldab, double *w, lapack_complex_double *z, lapack_int
ldz)
that's where this part lands, and yes there's still more coming — don't close the tab yet, bestie 🫶
okay so we are STILL in the function-prototype era of this page and honestly? it's giving "wall of text" but make it ✨fancy✨. every one of these is a lapack_int-returning function, and if you clock the pattern you'll be thriving. keep your eyes on the params, bestie, because they are the whole personality 💅
🦋 the 2-stage banded Hermitian eigensolvers (the ones that also want you to pass a q)
lapack_int LAPACKE_chbevx_2stage (int matrix_layout, char jobz, char
range, char uplo, lapack_int n, lapack_int kd, lapack_complex_float
*ab, lapack_int ldab, lapack_complex_float *q, lapack_int ldq, float
vl, float vu, lapack_int il, lapack_int iu, float abstol, lapack_int
*m, float *w, lapack_complex_float *z, lapack_int ldz, lapack_int
*ifail)
lapack_int LAPACKE_zhbevx_2stage (int matrix_layout, char jobz, char
range, char uplo, lapack_int n, lapack_int kd, lapack_complex_double
*ab, lapack_int ldab, lapack_complex_double *q, lapack_int ldq,
double vl, double vu, lapack_int il, lapack_int iu, double abstol,
lapack_int *m, double *w, lapack_complex_double *z, lapack_int ldz,
lapack_int *ifail)
not the range, vl, vu, il, iu, abstol, *m and *ifail combo — that's the "pick me a slice of eigenvalues and tell me who failed" starter pack ✨ the _x in the name is doing so much work here, iykyk.
🎀 the _work girlies for those two
lapack_int LAPACKE_chbev_2stage_work (int matrix_layout, char jobz, char
uplo, lapack_int n, lapack_int kd, lapack_complex_float *ab,
lapack_int ldab, float *w, lapack_complex_float *z, lapack_int ldz,
lapack_complex_float *work, lapack_int lwork, float *rwork)
lapack_int LAPACKE_zhbev_2stage_work (int matrix_layout, char jobz, char
uplo, lapack_int n, lapack_int kd, lapack_complex_double *ab,
lapack_int ldab, double *w, lapack_complex_double *z, lapack_int
ldz, lapack_complex_double *work, lapack_int lwork, double *rwork)
lapack_int LAPACKE_chbevd_2stage_work (int matrix_layout, char jobz,
char uplo, lapack_int n, lapack_int kd, lapack_complex_float *ab,
lapack_int ldab, float *w, lapack_complex_float *z, lapack_int ldz,
lapack_complex_float *work, lapack_int lwork, float *rwork,
lapack_int lrwork, lapack_int *iwork, lapack_int liwork)
lapack_int LAPACKE_zhbevd_2stage_work (int matrix_layout, char jobz,
char uplo, lapack_int n, lapack_int kd, lapack_complex_double *ab,
lapack_int ldab, double *w, lapack_complex_double *z, lapack_int
ldz, lapack_complex_double *work, lapack_int lwork, double *rwork,
lapack_int lrwork, lapack_int *iwork, lapack_int liwork)
lapack_int LAPACKE_chbevx_2stage_work (int matrix_layout, char jobz,
char range, char uplo, lapack_int n, lapack_int kd,
lapack_complex_float *ab, lapack_int ldab, lapack_complex_float *q,
lapack_int ldq, float vl, float vu, lapack_int il, lapack_int iu,
float abstol, lapack_int *m, float *w, lapack_complex_float *z,
lapack_int ldz, lapack_complex_float *work, lapack_int lwork, float
*rwork, lapack_int *iwork, lapack_int *ifail)
lapack_int LAPACKE_zhbevx_2stage_work (int matrix_layout, char jobz,
char range, char uplo, lapack_int n, lapack_int kd,
lapack_complex_double *ab, lapack_int ldab, lapack_complex_double
*q, lapack_int ldq, double vl, double vu, lapack_int il, lapack_int
iu, double abstol, lapack_int *m, double *w, lapack_complex_double
*z, lapack_int ldz, lapack_complex_double *work, lapack_int lwork,
double *rwork, lapack_int *iwork, lapack_int *ifail)
okay the d ones (that's chbevd/zhbevd) said "let's also bring lrwork, iwork and liwork to the function" and honestly? main character energy 👑 the _x ones keep ifail all the way through — if you're passing ifail, hi, you're the responsible friend now 🫶
🌸 generalized symmetric-definite eigenproblems, but make it 2-stage
lapack_int LAPACKE_ssygv_2stage (int matrix_layout, lapack_int itype,
char jobz, char uplo, lapack_int n, float *a, lapack_int lda, float
*b, lapack_int ldb, float *w)
lapack_int LAPACKE_dsygv_2stage (int matrix_layout, lapack_int itype,
char jobz, char uplo, lapack_int n, double *a, lapack_int lda,
double *b, lapack_int ldb, double *w)
lapack_int LAPACKE_ssygv_2stage_work (int matrix_layout, lapack_int
itype, char jobz, char uplo, lapack_int n, float *a, lapack_int lda,
float *b, lapack_int ldb, float *w, float *work, lapack_int lwork)
lapack_int LAPACKE_dsygv_2stage_work (int matrix_layout, lapack_int
itype, char jobz, char uplo, lapack_int n, double *a, lapack_int
lda, double *b, lapack_int ldb, double *w, double *work, lapack_int
lwork)
two matrices besties!! a and b, both with their own leading dimension (lda and ldb), plus that itype selector at the front and *w at the back. so many little guys in one signature 😭
💜 the Hermitian version (same energy, but a and b are complex)
lapack_int LAPACKE_chegv_2stage (int matrix_layout, lapack_int itype,
char jobz, char uplo, lapack_int n, lapack_complex_float *a,
lapack_int lda, lapack_complex_float *b, lapack_int ldb, float *w)
lapack_int LAPACKE_zhegv_2stage (int matrix_layout, lapack_int itype,
char jobz, char uplo, lapack_int n, lapack_complex_double *a,
lapack_int lda, lapack_complex_double *b, lapack_int ldb, double *w)
lapack_int LAPACKE_chegv_2stage_work (int matrix_layout, lapack_int
itype, char jobz, char uplo, lapack_int n, lapack_complex_float *a,
lapack_int lda, lapack_complex_float *b, lapack_int ldb, float *w,
lapack_complex_float *work, lapack_int lwork, float *rwork)
lapack_int LAPACKE_zhegv_2stage_work (int matrix_layout, lapack_int
itype, char jobz, char uplo, lapack_int n, lapack_complex_double *a,
lapack_int lda, lapack_complex_double *b, lapack_int ldb, double *w,
lapack_complex_double *work, lapack_int lwork, double *rwork)
the _work versions picked up a little rwork as a treat 🍓 and the w (eigenvalues) stays real even when a and b are complex — that's just how she is, periodt.
✨ the _aa_2stage solve era begins
lapack_int LAPACKE_ssysv_aa_2stage (int matrix_layout, char uplo,
lapack_int n, lapack_int nrhs, float *a, lapack_int lda, float *tb,
lapack_int ltb, lapack_int *ipiv, lapack_int *ipiv2, float *b,
lapack_int ldb)
lapack_int LAPACKE_ssysv_aa_2stage_work (int matrix_layout, char uplo,
lapack_int n, lapack_int nrhs, float *a, lapack_int lda, float *tb,
lapack_int ltb, lapack_int *ipiv, lapack_int *ipiv2, float *b,
lapack_int ldb, float *work, lapack_int lwork)
lapack_int LAPACKE_dsysv_aa_2stage (int matrix_layout, char uplo,
lapack_int n, lapack_int nrhs, double *a, lapack_int lda, double
*tb, lapack_int ltb, lapack_int *ipiv, lapack_int *ipiv2, double *b,
lapack_int ldb)
lapack_int LAPACKE_dsysv_aa_2stage_work (int matrix_layout, char uplo,
lapack_int n, lapack_int nrhs, double *a, lapack_int lda, double
*tb, lapack_int ltb, lapack_int *ipiv, lapack_int *ipiv2, double *b,
lapack_int ldb, double *work, lapack_int lwork)
lapack_int LAPACKE_csysv_aa_2stage (int matrix_layout, char uplo,
lapack_int n, lapack_int nrhs, lapack_complex_float *a, lapack_int
lda, lapack_complex_float *tb, lapack_int ltb, lapack_int *ipiv,
lapack_int *ipiv2, lapack_complex_float *b, lapack_int ldb)
lapack_int LAPACKE_csysv_aa_2stage_work (int matrix_layout, char uplo,
lapack_int n, lapack_int nrhs, lapack_complex_float *a, lapack_int
lda, lapack_complex_float *tb, lapack_int ltb, lapack_int *ipiv,
lapack_int *ipiv2, lapack_complex_float *b, lapack_int ldb,
lapack_complex_float *work, lapack_int lwork)
lapack_int LAPACKE_zsysv_aa_2stage (int matrix_layout, char uplo,
lapack_int n, lapack_int nrhs, lapack_complex_double *a, lapack_int
lda, lapack_complex_double *tb, lapack_int ltb, lapack_int *ipiv,
lapack_int *ipiv2, lapack_complex_double *b, lapack_int ldb)
lapack_int LAPACKE_zsysv_aa_2stage_work (int matrix_layout, char uplo,
lapack_int n, lapack_int nrhs, lapack_complex_double *a, lapack_int
lda, lapack_complex_double *tb, lapack_int ltb, lapack_int *ipiv,
lapack_int *ipiv2, lapack_complex_double *b, lapack_int ldb,
lapack_complex_double *work, lapack_int lwork)
TWO pivot arrays!! ipiv AND ipiv2 — it's giving "I have a backup plan and a backup plan for my backup plan" 🙈 also peep tb with its own ltb, very demure, very mindful.
🧚 the Hermitian _aa_2stage solvers
lapack_int LAPACKE_chesv_aa_2stage (int matrix_layout, char uplo,
lapack_int n, lapack_int nrhs, lapack_complex_float *a, lapack_int
lda, lapack_complex_float *tb, lapack_int ltb, lapack_int *ipiv,
lapack_int *ipiv2, lapack_complex_float *b, lapack_int ldb)
lapack_int LAPACKE_chesv_aa_2stage_work (int matrix_layout, char uplo,
lapack_int n, lapack_int nrhs, lapack_complex_float *a, lapack_int
lda, lapack_complex_float *tb, lapack_int ltb, lapack_int *ipiv,
lapack_int *ipiv2, lapack_complex_float *b, lapack_int ldb,
lapack_complex_float *work, lapack_int lwork)
lapack_int LAPACKE_zhesv_aa_2stage (int matrix_layout, char uplo,
lapack_int n, lapack_int nrhs, lapack_complex_double *a, lapack_int
lda, lapack_complex_double *tb, lapack_int ltb, lapack_int *ipiv,
lapack_int *ipiv2, lapack_complex_double *b, lapack_int ldb)
lapack_int LAPACKE_zhesv_aa_2stage_work (int matrix_layout, char uplo,
lapack_int n, lapack_int nrhs, lapack_complex_double *a, lapack_int
lda, lapack_complex_double *tb, lapack_int ltb, lapack_int *ipiv,
lapack_int *ipiv2, lapack_complex_double *b, lapack_int ldb,
lapack_complex_double *work, lapack_int lwork)
che/zhe instead of ss/dd/cs/zz — that's the Hermitian glow-up 💅 same arg energy though, so if you learned the sysv ones you're literally already done.
🔥 factorizations: sytrf_aa_2stage (the "no b, just vibes" set)
lapack_int LAPACKE_ssytrf_aa_2stage (int matrix_layout, char uplo,
lapack_int n, float *a, lapack_int lda, float *tb, lapack_int ltb,
lapack_int *ipiv, lapack_int *ipiv2)
lapack_int LAPACKE_ssytrf_aa_2stage_work (int matrix_layout, char uplo,
lapack_int n, float *a, lapack_int lda, float *tb, lapack_int ltb,
lapack_int *ipiv, lapack_int *ipiv2, float *work, lapack_int lwork)
lapack_int LAPACKE_dsytrf_aa_2stage (int matrix_layout, char uplo,
lapack_int n, double *a, lapack_int lda, double *tb, lapack_int ltb,
lapack_int *ipiv, lapack_int *ipiv2)
lapack_int LAPACKE_dsytrf_aa_2stage_work (int matrix_layout, char uplo,
lapack_int n, double *a, lapack_int lda, double *tb, lapack_int ltb,
lapack_int *ipiv, lapack_int *ipiv2, double *work, lapack_int lwork)
lapack_int LAPACKE_csytrf_aa_2stage (int matrix_layout, char uplo,
lapack_int n, lapack_complex_float *a, lapack_int lda,
lapack_complex_float *tb, lapack_int ltb, lapack_int *ipiv,
lapack_int *ipiv2)
lapack_int LAPACKE_csytrf_aa_2stage_work (int matrix_layout, char uplo,
lapack_int n, lapack_complex_float *a, lapack_int lda,
lapack_complex_float *tb, lapack_int ltb, lapack_int *ipiv,
lapack_int *ipiv2, lapack_complex_float *work, lapack_int lwork)
lapack_int LAPACKE_zsytrf_aa_2stage (int matrix_layout, char uplo,
lapack_int n, lapack_complex_double *a, lapack_int lda,
lapack_complex_double *tb, lapack_int ltb, lapack_int *ipiv,
lapack_int *ipiv2)
lapack_int LAPACKE_zsytrf_aa_2stage_work (int matrix_layout, char uplo,
lapack_int n, lapack_complex_double *a, lapack_int lda,
lapack_complex_double *tb, lapack_int ltb, lapack_int *ipiv,
lapack_int *ipiv2, lapack_complex_double *work, lapack_int lwork)
notice how nrhs and b and ldb just… dipped 🫧 no solving today, we're just factoring. the non-_work ones don't even take work/lwork — iconic minimalism, ngl.
💀 and now the Hermitian factorizations
lapack_int LAPACKE_chetrf_aa_2stage (int matrix_layout, char uplo,
lapack_int n, lapack_complex_float *a, lapack_int lda,
lapack_complex_float *tb, lapack_int ltb, lapack_int *ipiv,
lapack_int *ipiv2)
lapack_int LAPACKE_chetrf_aa_2stage_work (int matrix_layout, char uplo,
lapack_int n, lapack_complex_float *a, lapack_int lda,
lapack_complex_float *tb, lapack_int ltb, lapack_int *ipiv,
lapack_int *ipiv2, lapack_complex_float *work, lapack_int lwork)
lapack_int LAPACKE_zhetrf_aa_2stage (int matrix_layout, char uplo,
lapack_int n, lapack_complex_double *a, lapack_int lda,
lapack_complex_double *tb, lapack_int ltb, lapack_int *ipiv,
lapack_int *ipiv2)
lapack_int LAPACKE_zhetrf_aa_2stage_work (int matrix_layout, char uplo,
lapack_int n, lapack_complex_double *a, lapack_int lda,
lapack_complex_double *tb, lapack_int ltb, lapack_int *ipiv,
lapack_int *ipiv2, lapack_complex_double *work, lapack_int lwork)
che/zhe twins of the sy ones above — the way that these are just copy-paste with a new letter is lowkey sending me 😭
🌈 and we get ONE (1) line of the next family before this part cuts off, because of course we do
lapack_int LAPACKE_ssytrs_aa_2stage (int matrix_layout, char uplo,
and that's where the page just… stops mid-signature 💀 _trs said "I'm next" and dipped. keep scrolling, bestie, she finishes in the next part — no cap.
...bestie we're still deep in the prototype wall and honestly? it's giving phonebook, but make it glam 💅 — the _2stage girls are finishing up, so let's not lose the thread. This is the tail end of the ssytrs_aa_2stage_work signature, then the whole squad rolls in:
lapack_int n, lapack_int nrhs, float *a, lapack_int lda, float *tb,
lapack_int ltb, lapack_int *ipiv, lapack_int *ipiv2, float *b,
lapack_int ldb)
lapack_int LAPACKE_ssytrs_aa_2stage_work (int matrix_layout, char uplo,
lapack_int n, lapack_int nrhs, float *a, lapack_int lda, float *tb,
lapack_int ltb, lapack_int *ipiv, lapack_int *ipiv2, float *b,
lapack_int ldb)
lapack_int LAPACKE_dsytrs_aa_2stage (int matrix_layout, char uplo,
lapack_int n, lapack_int nrhs, double *a, lapack_int lda, double
*tb, lapack_int ltb, lapack_int *ipiv, lapack_int *ipiv2, double *b,
lapack_int ldb)
lapack_int LAPACKE_dsytrs_aa_2stage_work (int matrix_layout, char uplo,
lapack_int n, lapack_int nrhs, double *a, lapack_int lda, double
*tb, lapack_int ltb, lapack_int *ipiv, lapack_int *ipiv2, double *b,
lapack_int ldb)
lapack_int LAPACKE_csytrs_aa_2stage (int matrix_layout, char uplo,
lapack_int n, lapack_int nrhs, lapack_complex_float *a, lapack_int
lda, lapack_complex_float *tb, lapack_int ltb, lapack_int *ipiv,
lapack_int *ipiv2, lapack_complex_float *b, lapack_int ldb)
lapack_int LAPACKE_csytrs_aa_2stage_work (int matrix_layout, char uplo,
lapack_int n, lapack_int nrhs, lapack_complex_float *a, lapack_int
lda, lapack_complex_float *tb, lapack_int ltb, lapack_int *ipiv,
lapack_int *ipiv2, lapack_complex_float *b, lapack_int ldb)
lapack_int LAPACKE_zsytrs_aa_2stage (int matrix_layout, char uplo,
lapack_int n, lapack_int nrhs, lapack_complex_double *a, lapack_int
lda, lapack_complex_double *tb, lapack_int ltb, lapack_int *ipiv,
lapack_int *ipiv2, lapack_complex_double *b, lapack_int ldb)
lapack_int LAPACKE_zsytrs_aa_2stage_work (int matrix_layout, char uplo,
lapack_int n, lapack_int nrhs, lapack_complex_double *a, lapack_int
lda, lapack_complex_double *tb, lapack_int ltb, lapack_int *ipiv,
lapack_int *ipiv2, lapack_complex_double *b, lapack_int ldb)
okay so notice the pattern bestie — s/d/c/z for the four precision flavors, and every one of them gets a plain name plus a _work twin. It's the same energy as having a main character and her work-in-progress bestie 🫶
and here come the Hermitian girlies — chetrs_aa_2stage and zhetrs_aa_2stage, same deal, both with their _work counterparts:
lapack_int LAPACKE_chetrs_aa_2stage (int matrix_layout, char uplo,
lapack_int n, lapack_int nrhs, lapack_complex_float *a, lapack_int
lda, lapack_complex_float *tb, lapack_int ltb, lapack_int *ipiv,
lapack_int *ipiv2, lapack_complex_float *b, lapack_int ldb)
lapack_int LAPACKE_chetrs_aa_2stage_work (int matrix_layout, char uplo,
lapack_int n, lapack_int nrhs, lapack_complex_float *a, lapack_int
lda, lapack_complex_float *tb, lapack_int ltb, lapack_int *ipiv,
lapack_int *ipiv2, lapack_complex_float *b, lapack_int ldb)
lapack_int LAPACKE_zhetrs_aa_2stage (int matrix_layout, char uplo,
lapack_int n, lapack_int nrhs, lapack_complex_double *a, lapack_int
lda, lapack_complex_double *tb, lapack_int ltb, lapack_int *ipiv,
lapack_int *ipiv2, lapack_complex_double *b, lapack_int ldb)
lapack_int LAPACKE_zhetrs_aa_2stage_work (int matrix_layout, char uplo,
lapack_int n, lapack_int nrhs, lapack_complex_double *a, lapack_int
lda, lapack_complex_double *tb, lapack_int ltb, lapack_int *ipiv,
lapack_int *ipiv2, lapack_complex_double *b, lapack_int ldb)
🌸 and now we enter the LAPACK_ zone — no E in the middle, these are the raw Fortran-style interfaces, and the way they hand you pointers to everything including the info... it's giving "you WILL be checking your return codes, bestie" 💀
First up, the LU factorization icons — getrf, all four precisions:
void LAPACK_sgetrf (lapack_int *m, lapack_int *n, float *a, lapack_int
*lda, lapack_int *ipiv, lapack_int *info)
void LAPACK_dgetrf (lapack_int *m, lapack_int *n, double *a, lapack_int
*lda, lapack_int *ipiv, lapack_int *info)
void LAPACK_cgetrf (lapack_int *m, lapack_int *n, lapack_complex_float
*a, lapack_int *lda, lapack_int *ipiv, lapack_int *info)
void LAPACK_zgetrf (lapack_int *m, lapack_int *n, lapack_complex_double
*a, lapack_int *lda, lapack_int *ipiv, lapack_int *info)
and their little siblings getrf2 — same energy, different suffix, still iconic:
void LAPACK_sgetrf2 (lapack_int *m, lapack_int *n, float *a, lapack_int
*lda, lapack_int *ipiv, lapack_int *info)
void LAPACK_dgetrf2 (lapack_int *m, lapack_int *n, double *a, lapack_int
*lda, lapack_int *ipiv, lapack_int *info)
void LAPACK_cgetrf2 (lapack_int *m, lapack_int *n, lapack_complex_float
*a, lapack_int *lda, lapack_int *ipiv, lapack_int *info)
void LAPACK_zgetrf2 (lapack_int *m, lapack_int *n, lapack_complex_double
*a, lapack_int *lda, lapack_int *ipiv, lapack_int *info)
then the banded besties gbtrf — note the extra kl and ku args, she's got range (literally, lower and upper bandwidth, iykyk):
void LAPACK_sgbtrf (lapack_int *m, lapack_int *n, lapack_int *kl,
lapack_int *ku, float *ab, lapack_int *ldab, lapack_int *ipiv,
lapack_int *info)
void LAPACK_dgbtrf (lapack_int *m, lapack_int *n, lapack_int *kl,
lapack_int *ku, double *ab, lapack_int *ldab, lapack_int *ipiv,
lapack_int *info)
void LAPACK_cgbtrf (lapack_int *m, lapack_int *n, lapack_int *kl,
lapack_int *ku, lapack_complex_float *ab, lapack_int *ldab,
lapack_int *ipiv, lapack_int *info)
void LAPACK_zgbtrf (lapack_int *m, lapack_int *n, lapack_int *kl,
lapack_int *ku, lapack_complex_double *ab, lapack_int *ldab,
lapack_int *ipiv, lapack_int *info)
and the tridiagonal trio gttrf — dl, d, du, du2, ipiv, info, she's got a lot going on and we respect it 💜:
void LAPACK_sgttrf (lapack_int *n, float *dl, float *d, float *du, float
*du2, lapack_int *ipiv, lapack_int *info)
void LAPACK_dgttrf (lapack_int *n, double *dl, double *d, double *du,
double *du2, lapack_int *ipiv, lapack_int *info)
void LAPACK_cgttrf (lapack_int *n, lapack_complex_float *dl,
lapack_complex_float *d, lapack_complex_float *du,
lapack_complex_float *du2, lapack_int *ipiv, lapack_int *info)
void LAPACK_zgttrf (lapack_int *n, lapack_complex_double *dl,
lapack_complex_double *d, lapack_complex_double *du,
lapack_complex_double *du2, lapack_int *ipiv, lapack_int *info)
✨ Cholesky era ✨ — potrf2 first (the sequel, naturally):
void LAPACK_spotrf2 (char *uplo, lapack_int *n, float *a, lapack_int
*lda, lapack_int *info)
void LAPACK_dpotrf2 (char *uplo, lapack_int *n, double *a, lapack_int
*lda, lapack_int *info)
void LAPACK_cpotrf2 (char *uplo, lapack_int *n, lapack_complex_float *a,
lapack_int *lda, lapack_int *info)
void LAPACK_zpotrf2 (char *uplo, lapack_int *n, lapack_complex_double
*a, lapack_int *lda, lapack_int *info)
then the OGs, potrf:
void LAPACK_spotrf (char *uplo, lapack_int *n, float *a, lapack_int
*lda, lapack_int *info)
void LAPACK_dpotrf (char *uplo, lapack_int *n, double *a, lapack_int
*lda, lapack_int *info)
void LAPACK_cpotrf (char *uplo, lapack_int *n, lapack_complex_float *a,
lapack_int *lda, lapack_int *info)
void LAPACK_zpotrf (char *uplo, lapack_int *n, lapack_complex_double *a,
lapack_int *lda, lapack_int *info)
and pstrf — pivoted, so she's got piv, rank, tol and work to carry, highkey the busiest girl here 🎀:
void LAPACK_dpstrf (char *uplo, lapack_int *n, double *a, lapack_int
*lda, lapack_int *piv, lapack_int *rank, double *tol, double *work,
lapack_int *info)
void LAPACK_spstrf (char *uplo, lapack_int *n, float *a, lapack_int
*lda, lapack_int *piv, lapack_int *rank, float *tol, float *work,
lapack_int *info)
void LAPACK_zpstrf (char *uplo, lapack_int *n, lapack_complex_double *a,
lapack_int *lda, lapack_int *piv, lapack_int *rank, double *tol,
double *work, lapack_int *info)
void LAPACK_cpstrf (char *uplo, lapack_int *n, lapack_complex_float *a,
lapack_int *lda, lapack_int *piv, lapack_int *rank, float *tol,
float *work, lapack_int *info)
(and yes bestie, the d and z ones came first in that list — sometimes the alphabet gets reordered and we just deal 💅)
okay, pftrf — RFP format, she brought transr to the party:
void LAPACK_dpftrf (char *transr, char *uplo, lapack_int *n, double *a,
lapack_int *info)
void LAPACK_spftrf (char *transr, char *uplo, lapack_int *n, float *a,
lapack_int *info)
void LAPACK_zpftrf (char *transr, char *uplo, lapack_int *n,
lapack_complex_double *a, lapack_int *info)
void LAPACK_cpftrf (char *transr, char *uplo, lapack_int *n,
lapack_complex_float *a, lapack_int *info)
packed storage crew pptrf — note it's ap, not a, because packed life is different:
void LAPACK_spptrf (char *uplo, lapack_int *n, float *ap, lapack_int
*info)
void LAPACK_dpptrf (char *uplo, lapack_int *n, double *ap, lapack_int
*info)
void LAPACK_cpptrf (char *uplo, lapack_int *n, lapack_complex_float *ap,
lapack_int *info)
void LAPACK_zpptrf (char *uplo, lapack_int *n, lapack_complex_double
*ap, lapack_int *info)
banded positive-definite pbtrf — kd and ldab in the house:
void LAPACK_spbtrf (char *uplo, lapack_int *n, lapack_int *kd, float
*ab, lapack_int *ldab, lapack_int *info)
void LAPACK_dpbtrf (char *uplo, lapack_int *n, lapack_int *kd, double
*ab, lapack_int *ldab, lapack_int *info)
void LAPACK_cpbtrf (char *uplo, lapack_int *n, lapack_int *kd,
lapack_complex_float *ab, lapack_int *ldab, lapack_int *info)
void LAPACK_zpbtrf (char *uplo, lapack_int *n, lapack_int *kd,
lapack_complex_double *ab, lapack_int *ldab, lapack_int *info)
and tridiagonal positive-definite pttrf — just d and e, minimal queen, no notes 🦋:
void LAPACK_spttrf (lapack_int *n, float *d, float *e, lapack_int *info)
void LAPACK_dpttrf (lapack_int *n, double *d, double *e, lapack_int
*info)
void LAPACK_cpttrf (lapack_int *n, float *d, lapack_complex_float *e,
lapack_int *info)
void LAPACK_zpttrf (lapack_int *n, double *d, lapack_complex_double *e,
lapack_int *info)
🔥 symmetric & Hermitian indefinite factorization hours 🔥 — sytrf with her work/lwork duo:
void LAPACK_ssytrf (char *uplo, lapack_int *n, float *a, lapack_int
*lda, lapack_int *ipiv, float *work, lapack_int *lwork, lapack_int
*info)
void LAPACK_dsytrf (char *uplo, lapack_int *n, double *a, lapack_int
*lda, lapack_int *ipiv, double *work, lapack_int *lwork, lapack_int
*info)
void LAPACK_csytrf (char *uplo, lapack_int *n, lapack_complex_float *a,
lapack_int *lda, lapack_int *ipiv, lapack_complex_float *work,
lapack_int *lwork, lapack_int *info)
void LAPACK_zsytrf (char *uplo, lapack_int *n, lapack_complex_double *a,
lapack_int *lda, lapack_int *ipiv, lapack_complex_double *work,
lapack_int *lwork, lapack_int *info)
and the hetrf twins, same shape, complex-only, living her truth:
void LAPACK_chetrf (char *uplo, lapack_int *n, lapack_complex_float *a,
lapack_int *lda, lapack_int *ipiv, lapack_complex_float *work,
lapack_int *lwork, lapack_int *info)
void LAPACK_zhetrf (char *uplo, lapack_int *n, lapack_complex_double *a,
lapack_int *lda, lapack_int *ipiv, lapack_complex_double *work,
lapack_int *lwork, lapack_int *info)
packed versions sptrf / hptrf — no lwork here, she's low-maintenance:
void LAPACK_ssptrf (char *uplo, lapack_int *n, float *ap, lapack_int
*ipiv, lapack_int *info)
void LAPACK_dsptrf (char *uplo, lapack_int *n, double *ap, lapack_int
*ipiv, lapack_int *info)
void LAPACK_csptrf (char *uplo, lapack_int *n, lapack_complex_float *ap,
lapack_int *ipiv, lapack_int *info)
void LAPACK_zsptrf (char *uplo, lapack_int *n, lapack_complex_double
*ap, lapack_int *ipiv, lapack_int *info)
void LAPACK_chptrf (char *uplo, lapack_int *n, lapack_complex_float *ap,
lapack_int *ipiv, lapack_int *info)
void LAPACK_zhptrf (char *uplo, lapack_int *n, lapack_complex_double
*ap, lapack_int *ipiv, lapack_int *info)
and now the solve girlies arrive — getrs, and heads up: a and ipiv are const here because she's reading, not rewriting, periodt:
void LAPACK_sgetrs (char *trans, lapack_int *n, lapack_int *nrhs, const
float *a, lapack_int *lda, const lapack_int *ipiv, float *b,
lapack_int *ldb, lapack_int *info)
void LAPACK_dgetrs (char *trans, lapack_int *n, lapack_int *nrhs, const
double *a, lapack_int *lda, const lapack_int *ipiv, double *b,
lapack_int *ldb, lapack_int *info)
void LAPACK_cgetrs (char *trans, lapack_int *n, lapack_int *nrhs, const
lapack_complex_float *a, lapack_int *lda, const lapack_int *ipiv,
lapack_complex_float *b, lapack_int *ldb, lapack_int *info)
...and we're cutting right there mid-cgetrs, bestie — do not close the fence in your head, the zgetrs of it all is coming in the next part 😭🫶
okay bestie, buckle up, we're deep in the prototype section and it's just... an absolute parade of solver routines 💅 every single one of these is void and every single argument is a pointer (yes, even the integers, yes, even info, don't ask, it's a LAPACK thing, we love her) 🎀
🦋 the ?getrs girlies — solve after a getrf
void LAPACK_zgetrs (char *trans, lapack_int *n, lapack_int *nrhs, const
lapack_complex_double *a, lapack_int *lda, const lapack_int *ipiv,
lapack_complex_double *b, lapack_int *ldb, lapack_int *info)
✨ banded energy: ?gbtrs
void LAPACK_sgbtrs (char *trans, lapack_int *n, lapack_int *kl,
lapack_int *ku, lapack_int *nrhs, const float *ab, lapack_int *ldab,
const lapack_int *ipiv, float *b, lapack_int *ldb, lapack_int *info)
void LAPACK_dgbtrs (char *trans, lapack_int *n, lapack_int *kl,
lapack_int *ku, lapack_int *nrhs, const double *ab, lapack_int
*ldab, const lapack_int *ipiv, double *b, lapack_int *ldb,
lapack_int *info)
void LAPACK_cgbtrs (char *trans, lapack_int *n, lapack_int *kl,
lapack_int *ku, lapack_int *nrhs, const lapack_complex_float *ab,
lapack_int *ldab, const lapack_int *ipiv, lapack_complex_float *b,
lapack_int *ldb, lapack_int *info)
void LAPACK_zgbtrs (char *trans, lapack_int *n, lapack_int *kl,
lapack_int *ku, lapack_int *nrhs, const lapack_complex_double *ab,
lapack_int *ldab, const lapack_int *ipiv, lapack_complex_double *b,
lapack_int *ldb, lapack_int *info)
like yes, four of them, one per precision, that's the whole vibe — s/d/c/z and she's consistent about it 🌈
🎀 tridiagonal cuties: ?gttrs
void LAPACK_sgttrs (char *trans, lapack_int *n, lapack_int *nrhs, const
float *dl, const float *d, const float *du, const float *du2, const
lapack_int *ipiv, float *b, lapack_int *ldb, lapack_int *info)
void LAPACK_dgttrs (char *trans, lapack_int *n, lapack_int *nrhs, const
double *dl, const double *d, const double *du, const double *du2,
const lapack_int *ipiv, double *b, lapack_int *ldb, lapack_int
*info)
void LAPACK_cgttrs (char *trans, lapack_int *n, lapack_int *nrhs, const
lapack_complex_float *dl, const lapack_complex_float *d, const
lapack_complex_float *du, const lapack_complex_float *du2, const
lapack_int *ipiv, lapack_complex_float *b, lapack_int *ldb,
lapack_int *info)
void LAPACK_zgttrs (char *trans, lapack_int *n, lapack_int *nrhs, const
lapack_complex_double *dl, const lapack_complex_double *d, const
lapack_complex_double *du, const lapack_complex_double *du2, const
lapack_int *ipiv, lapack_complex_double *b, lapack_int *ldb,
lapack_int *info)
not the dl, d, du, du2 lineup 😭 she's got layers, she's got range
💖 positive-definite + packed: ?potrs
void LAPACK_spotrs (char *uplo, lapack_int *n, lapack_int *nrhs, const
float *a, lapack_int *lda, float *b, lapack_int *ldb, lapack_int
*info)
void LAPACK_dpotrs (char *uplo, lapack_int *n, lapack_int *nrhs, const
double *a, lapack_int *lda, double *b, lapack_int *ldb, lapack_int
*info)
void LAPACK_cpotrs (char *uplo, lapack_int *n, lapack_int *nrhs, const
lapack_complex_float *a, lapack_int *lda, lapack_complex_float *b,
lapack_int *ldb, lapack_int *info)
void LAPACK_zpotrs (char *uplo, lapack_int *n, lapack_int *nrhs, const
lapack_complex_double *a, lapack_int *lda, lapack_complex_double *b,
lapack_int *ldb, lapack_int *info)
the uplo girls are back and honestly? iconic 👑
🌸 rectangular full packed, aka ?pftrs with the transr moment
void LAPACK_dpftrs (char *transr, char *uplo, lapack_int *n, lapack_int
*nrhs, const double *a, double *b, lapack_int *ldb, lapack_int
*info)
void LAPACK_spftrs (char *transr, char *uplo, lapack_int *n, lapack_int
*nrhs, const float *a, float *b, lapack_int *ldb, lapack_int *info)
void LAPACK_zpftrs (char *transr, char *uplo, lapack_int *n, lapack_int
*nrhs, const lapack_complex_double *a, lapack_complex_double *b,
lapack_int *ldb, lapack_int *info)
void LAPACK_cpftrs (char *transr, char *uplo, lapack_int *n, lapack_int
*nrhs, const lapack_complex_float *a, lapack_complex_float *b,
lapack_int *ldb, lapack_int *info)
note that d comes first here and s is second, we do not question the ordering, we simply accept her 🫶
🧚 packed symmetric/hermitian riders: ?pptrs
void LAPACK_spptrs (char *uplo, lapack_int *n, lapack_int *nrhs, const
float *ap, float *b, lapack_int *ldb, lapack_int *info)
void LAPACK_dpptrs (char *uplo, lapack_int *n, lapack_int *nrhs, const
double *ap, double *b, lapack_int *ldb, lapack_int *info)
void LAPACK_cpptrs (char *uplo, lapack_int *n, lapack_int *nrhs, const
lapack_complex_float *ap, lapack_complex_float *b, lapack_int *ldb,
lapack_int *info)
void LAPACK_zpptrs (char *uplo, lapack_int *n, lapack_int *nrhs, const
lapack_complex_double *ap, lapack_complex_double *b, lapack_int
*ldb, lapack_int *info)
ap instead of a, no lda in sight — she packed it up and left 💅
⭐ banded positive-definite: ?pbtrs
void LAPACK_spbtrs (char *uplo, lapack_int *n, lapack_int *kd,
lapack_int *nrhs, const float *ab, lapack_int *ldab, float *b,
lapack_int *ldb, lapack_int *info)
void LAPACK_dpbtrs (char *uplo, lapack_int *n, lapack_int *kd,
lapack_int *nrhs, const double *ab, lapack_int *ldab, double *b,
lapack_int *ldb, lapack_int *info)
void LAPACK_cpbtrs (char *uplo, lapack_int *n, lapack_int *kd,
lapack_int *nrhs, const lapack_complex_float *ab, lapack_int *ldab,
lapack_complex_float *b, lapack_int *ldb, lapack_int *info)
void LAPACK_zpbtrs (char *uplo, lapack_int *n, lapack_int *kd,
lapack_int *nrhs, const lapack_complex_double *ab, lapack_int *ldab,
lapack_complex_double *b, lapack_int *ldb, lapack_int *info)
kd is here and she brought ldab, we stan a consistent queen ✨
🍓 tridiagonal positive-definite: ?pttrs
void LAPACK_spttrs (lapack_int *n, lapack_int *nrhs, const float *d,
const float *e, float *b, lapack_int *ldb, lapack_int *info)
void LAPACK_dpttrs (lapack_int *n, lapack_int *nrhs, const double *d,
const double *e, double *b, lapack_int *ldb, lapack_int *info)
void LAPACK_cpttrs (char *uplo, lapack_int *n, lapack_int *nrhs, const
float *d, const lapack_complex_float *e, lapack_complex_float *b,
lapack_int *ldb, lapack_int *info)
void LAPACK_zpttrs (char *uplo, lapack_int *n, lapack_int *nrhs, const
double *d, const lapack_complex_double *e, lapack_complex_double *b,
lapack_int *ldb, lapack_int *info)
okay so real talk, the s and d versions don't even take uplo — only c and z do — and that's not a typo, that's just how she is 🙈
🦋 symmetric indefinite solves: ?sytrs
void LAPACK_ssytrs (char *uplo, lapack_int *n, lapack_int *nrhs, const
float *a, lapack_int *lda, const lapack_int *ipiv, float *b,
lapack_int *ldb, lapack_int *info)
void LAPACK_dsytrs (char *uplo, lapack_int *n, lapack_int *nrhs, const
double *a, lapack_int *lda, const lapack_int *ipiv, double *b,
lapack_int *ldb, lapack_int *info)
void LAPACK_csytrs (char *uplo, lapack_int *n, lapack_int *nrhs, const
lapack_complex_float *a, lapack_int *lda, const lapack_int *ipiv,
lapack_complex_float *b, lapack_int *ldb, lapack_int *info)
void LAPACK_zsytrs (char *uplo, lapack_int *n, lapack_int *nrhs, const
lapack_complex_double *a, lapack_int *lda, const lapack_int *ipiv,
lapack_complex_double *b, lapack_int *ldb, lapack_int *info)
💜 hermitian edition: ?hetrs
void LAPACK_chetrs (char *uplo, lapack_int *n, lapack_int *nrhs, const
lapack_complex_float *a, lapack_int *lda, const lapack_int *ipiv,
lapack_complex_float *b, lapack_int *ldb, lapack_int *info)
void LAPACK_zhetrs (char *uplo, lapack_int *n, lapack_int *nrhs, const
lapack_complex_double *a, lapack_int *lda, const lapack_int *ipiv,
lapack_complex_double *b, lapack_int *ldb, lapack_int *info)
only c and z get to be hermitian, because hermitian is a complex-only concept, and she's not gonna fake it for the real girls 💀
🌈 packed symmetric solves: ?sptrs
void LAPACK_ssptrs (char *uplo, lapack_int *n, lapack_int *nrhs, const
float *ap, const lapack_int *ipiv, float *b, lapack_int *ldb,
lapack_int *info)
void LAPACK_dsptrs (char *uplo, lapack_int *n, lapack_int *nrhs, const
double *ap, const lapack_int *ipiv, double *b, lapack_int *ldb,
lapack_int *info)
void LAPACK_csptrs (char *uplo, lapack_int *n, lapack_int *nrhs, const
lapack_complex_float *ap, const lapack_int *ipiv,
lapack_complex_float *b, lapack_int *ldb, lapack_int *info)
void LAPACK_zsptrs (char *uplo, lapack_int *n, lapack_int *nrhs, const
lapack_complex_double *ap, const lapack_int *ipiv,
lapack_complex_double *b, lapack_int *ldb, lapack_int *info)
🎀 packed hermitian solves: ?hptrs
void LAPACK_chptrs (char *uplo, lapack_int *n, lapack_int *nrhs, const
lapack_complex_float *ap, const lapack_int *ipiv,
lapack_complex_float *b, lapack_int *ldb, lapack_int *info)
void LAPACK_zhptrs (char *uplo, lapack_int *n, lapack_int *nrhs, const
lapack_complex_double *ap, const lapack_int *ipiv,
lapack_complex_double *b, lapack_int *ldb, lapack_int *info)
again, complex besties only, no h in the real world, moving on 🧚
🔥 triangular solves, full storage: ?trtrs
void LAPACK_strtrs (char *uplo, char *trans, char *diag, lapack_int *n,
lapack_int *nrhs, const float *a, lapack_int *lda, float *b,
lapack_int *ldb, lapack_int *info)
void LAPACK_dtrtrs (char *uplo, char *trans, char *diag, lapack_int *n,
lapack_int *nrhs, const double *a, lapack_int *lda, double *b,
lapack_int *ldb, lapack_int *info)
void LAPACK_ctrtrs (char *uplo, char *trans, char *diag, lapack_int *n,
lapack_int *nrhs, const lapack_complex_float *a, lapack_int *lda,
lapack_complex_float *b, lapack_int *ldb, lapack_int *info)
void LAPACK_ztrtrs (char *uplo, char *trans, char *diag, lapack_int *n,
lapack_int *nrhs, const lapack_complex_double *a, lapack_int *lda,
lapack_complex_double *b, lapack_int *ldb, lapack_int *info)
three char * flags in a row — uplo, trans, diag — she's giving menace and honestly? ate 🔥
💀 packed triangular: ?tptrs
void LAPACK_stptrs (char *uplo, char *trans, char *diag, lapack_int *n,
lapack_int *nrhs, const float *ap, float *b, lapack_int *ldb,
lapack_int *info)
void LAPACK_dtptrs (char *uplo, char *trans, char *diag, lapack_int *n,
lapack_int *nrhs, const double *ap, double *b, lapack_int *ldb,
lapack_int *info)
void LAPACK_ctptrs (char *uplo, char *trans, char *diag, lapack_int *n,
lapack_int *nrhs, const lapack_complex_float *ap,
lapack_complex_float *b, lapack_int *ldb, lapack_int *info)
void LAPACK_ztptrs (char *uplo, char *trans, char *diag, lapack_int *n,
lapack_int *nrhs, const lapack_complex_double *ap,
lapack_complex_double *b, lapack_int *ldb, lapack_int *info)
same flags, but ap and no lda — packed girl summer 🌸
👑 banded triangular: ?tbtrs
void LAPACK_stbtrs (char *uplo, char *trans, char *diag, lapack_int *n,
lapack_int *kd, lapack_int *nrhs, const float *ab, lapack_int *ldab,
float *b, lapack_int *ldb, lapack_int *info)
void LAPACK_dtbtrs (char *uplo, char *trans, char *diag, lapack_int *n,
lapack_int *kd, lapack_int *nrhs, const double *ab, lapack_int
*ldab, double *b, lapack_int *ldb, lapack_int *info)
void LAPACK_ctbtrs (char *uplo, char *trans, char *diag, lapack_int *n,
lapack_int *kd, lapack_int *nrhs, const lapack_complex_float *ab,
lapack_int *ldab, lapack_complex_float *b, lapack_int *ldb,
lapack_int *info)
void LAPACK_ztbtrs (char *uplo, char *trans, char *diag, lapack_int *n,
lapack_int *kd, lapack_int *nrhs, const lapack_complex_double *ab,
lapack_int *ldab, lapack_complex_double *b, lapack_int *ldb,
lapack_int *info)
now she's got kd and ldab on top of the three flags, and the argument list is just... long. we respect the hustle 💅
and now we pivot, bestie, because the vibe check says we're done solving and we're onto condition numbers — not me being dramatic, this is just the next chunk of prototypes 😭
🫶 ?gecon — estimating the reciprocal condition number
void LAPACK_sgecon (char *norm, lapack_int *n, const float *a,
lapack_int *lda, float *anorm, float *rcond, float *work, lapack_int
*iwork, lapack_int *info)
void LAPACK_dgecon (char *norm, lapack_int *n, const double *a,
lapack_int *lda, double *anorm, double *rcond, double *work,
lapack_int *iwork, lapack_int *info)
void LAPACK_cgecon (char *norm, lapack_int *n, const
lapack_complex_float *a, lapack_int *lda, float *anorm, float
*rcond, lapack_complex_float *work, float *rwork, lapack_int *info)
void LAPACK_zgecon (char *norm, lapack_int *n, const
lapack_complex_double *a, lapack_int *lda, double *anorm, double
*rcond, lapack_complex_double *work, double *rwork, lapack_int
*info)
okay so notice the complex ones get an extra rwork pointer (of the real type, float for c and double for z) while the real ones don't — and yes the real ones still carry iwork, she's thorough like that 🎀 norm, anorm, rcond, work, iwork, info — the whole squad showed up 💖
more parts incoming, don't go anywhere bestie, we're literally mid-manpage 🦋
okay so this stretch of the header is literally the condition-number corner of lapacke.h — every one of these is a ?con routine, which is the "how trustworthy is my answer tho" check ✨ and then the ?gerfs girlies show up at the end for iterative refinement. same drill: s/d/c/z prefixes, lapack_int pointers everywhere, and info is always the last argument doing its little report-card thing 📋
🦋 the GB girlies — general band condition estimators
band matrices, band condition numbers, band vibes. kl is the lower bandwidth, ku is the upper bandwidth, ldab is the leading dimension of ab, and ipiv is the pivot array from the matching ?gbtrf moment 💅
void LAPACK_sgbcon (char *norm, lapack_int *n, lapack_int *kl,
lapack_int *ku, const float *ab, lapack_int *ldab, const lapack_int
*ipiv, float *anorm, float *rcond, float *work, lapack_int *iwork,
lapack_int *info)
void LAPACK_dgbcon (char *norm, lapack_int *n, lapack_int *kl,
lapack_int *ku, const double *ab, lapack_int *ldab, const lapack_int
*ipiv, double *anorm, double *rcond, double *work, lapack_int
*iwork, lapack_int *info)
void LAPACK_cgbcon (char *norm, lapack_int *n, lapack_int *kl,
lapack_int *ku, const lapack_complex_float *ab, lapack_int *ldab,
const lapack_int *ipiv, float *anorm, float *rcond,
lapack_complex_float *work, float *rwork, lapack_int *info)
void LAPACK_zgbcon (char *norm, lapack_int *n, lapack_int *kl,
lapack_int *ku, const lapack_complex_double *ab, lapack_int *ldab,
const lapack_int *ipiv, double *anorm, double *rcond,
lapack_complex_double *work, double *rwork, lapack_int *info)
bestie notice the pattern: the complex ones get an extra rwork (float *rwork for c, double *rwork for z) because real numbers need somewhere to live too 🫶 the real ones get iwork instead. no cap, that's the whole trick.
🌸 GT — general tridiagonal, and its five-argument glow-up
tridiagonal means you pass dl, d, du — and for the GT routines there's a bonus du2, which is the second superdiagonal, because tridiagonal LU with pivoting fills in one extra diagonal. it's giving "there was a fourth diagonal the whole time" 😭
void LAPACK_sgtcon (char *norm, lapack_int *n, const float *dl, const
float *d, const float *du, const float *du2, const lapack_int *ipiv,
float *anorm, float *rcond, float *work, lapack_int *iwork,
lapack_int *info)
void LAPACK_dgtcon (char *norm, lapack_int *n, const double *dl, const
double *d, const double *du, const double *du2, const lapack_int
*ipiv, double *anorm, double *rcond, double *work, lapack_int
*iwork, lapack_int *info)
void LAPACK_cgtcon (char *norm, lapack_int *n, const
lapack_complex_float *dl, const lapack_complex_float *d, const
lapack_complex_float *du, const lapack_complex_float *du2, const
lapack_int *ipiv, float *anorm, float *rcond, lapack_complex_float
*work, lapack_int *info)
void LAPACK_zgtcon (char *norm, lapack_int *n, const
lapack_complex_double *dl, const lapack_complex_double *d, const
lapack_complex_double *du, const lapack_complex_double *du2, const
lapack_int *ipiv, double *anorm, double *rcond,
lapack_complex_double *work, lapack_int *info)
and yes, the complex ?gtcon squad does not take rwork — only work. iconic inconsistency, we respect it 💅
🎀 PO — positive definite, the good-girl matrices
Cholesky girlies rise up. uplo tells it whether you stored the upper or lower triangle, lda is the leading dimension, anorm is the norm you computed yourself (usually from ?lanhe/?lansy-adjacent routines), and rcond comes out as the reciprocal condition number ⭐
void LAPACK_spocon (char *uplo, lapack_int *n, const float *a,
lapack_int *lda, float *anorm, float *rcond, float *work, lapack_int
*iwork, lapack_int *info)
void LAPACK_dpocon (char *uplo, lapack_int *n, const double *a,
lapack_int *lda, double *anorm, double *rcond, double *work,
lapack_int *iwork, lapack_int *info)
void LAPACK_cpocon (char *uplo, lapack_int *n, const
lapack_complex_float *a, lapack_int *lda, float *anorm, float
*rcond, lapack_complex_float *work, float *rwork, lapack_int *info)
void LAPACK_zpocon (char *uplo, lapack_int *n, const
lapack_complex_double *a, lapack_int *lda, double *anorm, double
*rcond, lapack_complex_double *work, double *rwork, lapack_int
*info)
🧚 PP — same energy, but packed
packed storage means the triangle is squished into one flat array ap with no lda in sight. fewer arguments, same amount of suffering. lowkey a serve tho 💜
void LAPACK_sppcon (char *uplo, lapack_int *n, const float *ap, float
*anorm, float *rcond, float *work, lapack_int *iwork, lapack_int
*info)
void LAPACK_dppcon (char *uplo, lapack_int *n, const double *ap, double
*anorm, double *rcond, double *work, lapack_int *iwork, lapack_int
*info)
void LAPACK_cppcon (char *uplo, lapack_int *n, const
lapack_complex_float *ap, float *anorm, float *rcond,
lapack_complex_float *work, float *rwork, lapack_int *info)
void LAPACK_zppcon (char *uplo, lapack_int *n, const
lapack_complex_double *ap, double *anorm, double *rcond,
lapack_complex_double *work, double *rwork, lapack_int *info)
🍓 PB — positive definite, banded, back for round two
kd is the number of superdiagonals (or subdiagonals, depending on uplo), ab holds the band, ldab is its leading dimension. yes there's ipiv in the ?pocon family? no bestie — look closely, ?pbcon has no ipiv because Cholesky doesn't pivot. write that down 📝
void LAPACK_spbcon (char *uplo, lapack_int *n, lapack_int *kd, const
float *ab, lapack_int *ldab, float *anorm, float *rcond, float
*work, lapack_int *iwork, lapack_int *info)
void LAPACK_dpbcon (char *uplo, lapack_int *n, lapack_int *kd, const
double *ab, lapack_int *ldab, double *anorm, double *rcond, double
*work, lapack_int *iwork, lapack_int *info)
void LAPACK_cpbcon (char *uplo, lapack_int *n, lapack_int *kd, const
lapack_complex_float *ab, lapack_int *ldab, float *anorm, float
*rcond, lapack_complex_float *work, float *rwork, lapack_int *info)
void LAPACK_zpbcon (char *uplo, lapack_int *n, lapack_int *kd, const
lapack_complex_double *ab, lapack_int *ldab, double *anorm, double
*rcond, lapack_complex_double *work, double *rwork, lapack_int
*info)
⭐ PT — tridiagonal positive definite, the minimalist queen
d is the diagonal, e is the off-diagonal, and that's it. no uplo, no lda, no ipiv. the way this routine has fewer arguments than my will to study… honestly aspirational 🌈
heads up: forcptconthe diagonaldisconst float *(real!) whileeisconst lapack_complex_float *. that's not a typo, that's Hermitian tridiagonal life. same deal forzptconwithdoubleandlapack_complex_double💅
void LAPACK_sptcon (lapack_int *n, const float *d, const float *e, float
*anorm, float *rcond, float *work, lapack_int *info)
void LAPACK_dptcon (lapack_int *n, const double *d, const double *e,
double *anorm, double *rcond, double *work, lapack_int *info)
void LAPACK_cptcon (lapack_int *n, const float *d, const
lapack_complex_float *e, float *anorm, float *rcond, float *work,
lapack_int *info)
void LAPACK_zptcon (lapack_int *n, const double *d, const
lapack_complex_double *e, double *anorm, double *rcond, double
*work, lapack_int *info)
💖 SY — symmetric, and now ipiv is back
symmetric indefinite-ish storage, so pivoting returns. ipiv comes from the matching ?sytrf. real symmetric: iwork and no rwork. 🫶
void LAPACK_ssycon (char *uplo, lapack_int *n, const float *a,
lapack_int *lda, const lapack_int *ipiv, float *anorm, float *rcond,
float *work, lapack_int *iwork, lapack_int *info)
void LAPACK_dsycon (char *uplo, lapack_int *n, const double *a,
lapack_int *lda, const lapack_int *ipiv, double *anorm, double
*rcond, double *work, lapack_int *iwork, lapack_int *info)
void LAPACK_csycon (char *uplo, lapack_int *n, const
lapack_complex_float *a, lapack_int *lda, const lapack_int *ipiv,
float *anorm, float *rcond, lapack_complex_float *work, lapack_int
*info)
void LAPACK_zsycon (char *uplo, lapack_int *n, const
lapack_complex_double *a, lapack_int *lda, const lapack_int *ipiv,
double *anorm, double *rcond, lapack_complex_double *work,
lapack_int *info)
👑 HE — Hermitian, the main character
same signature shape as sycon, but the math girlies know the difference: Hermitian means the diagonal is real. no rwork here either, work is complex and that's that ✨
void LAPACK_checon (char *uplo, lapack_int *n, const
lapack_complex_float *a, lapack_int *lda, const lapack_int *ipiv,
float *anorm, float *rcond, lapack_complex_float *work, lapack_int
*info)
void LAPACK_zhecon (char *uplo, lapack_int *n, const
lapack_complex_double *a, lapack_int *lda, const lapack_int *ipiv,
double *anorm, double *rcond, lapack_complex_double *work,
lapack_int *info)
🌈 SP & HP — packed symmetric and packed Hermitian
ap, ipiv, anorm, rcond, work, info. three whole routines' worth of characters saved by not having lda. we love a compact icon 🎀
void LAPACK_sspcon (char *uplo, lapack_int *n, const float *ap, const
lapack_int *ipiv, float *anorm, float *rcond, float *work,
lapack_int *iwork, lapack_int *info)
void LAPACK_dspcon (char *uplo, lapack_int *n, const double *ap, const
lapack_int *ipiv, double *anorm, double *rcond, double *work,
lapack_int *iwork, lapack_int *info)
void LAPACK_cspcon (char *uplo, lapack_int *n, const
lapack_complex_float *ap, const lapack_int *ipiv, float *anorm,
float *rcond, lapack_complex_float *work, lapack_int *info)
void LAPACK_zspcon (char *uplo, lapack_int *n, const
lapack_complex_double *ap, const lapack_int *ipiv, double *anorm,
double *rcond, lapack_complex_double *work, lapack_int *info)
void LAPACK_chpcon (char *uplo, lapack_int *n, const
lapack_complex_float *ap, const lapack_int *ipiv, float *anorm,
float *rcond, lapack_complex_float *work, lapack_int *info)
void LAPACK_zhpcon (char *uplo, lapack_int *n, const
lapack_complex_double *ap, const lapack_int *ipiv, double *anorm,
double *rcond, lapack_complex_double *work, lapack_int *info)
💀 TR — triangular, and now there's a diag too
triangular condition estimators take three char pointers: norm, uplo, and diag (whether the diagonal is assumed to be all ones or actually stored). they also have no anorm argument at all — the routine works that out itself. read it again, bestie, it's true 😭
void LAPACK_strcon (char *norm, char *uplo, char *diag, lapack_int *n,
const float *a, lapack_int *lda, float *rcond, float *work,
lapack_int *iwork, lapack_int *info)
void LAPACK_dtrcon (char *norm, char *uplo, char *diag, lapack_int *n,
const double *a, lapack_int *lda, double *rcond, double *work,
lapack_int *iwork, lapack_int *info)
void LAPACK_ctrcon (char *norm, char *uplo, char *diag, lapack_int *n,
const lapack_complex_float *a, lapack_int *lda, float *rcond,
lapack_complex_float *work, float *rwork, lapack_int *info)
void LAPACK_ztrcon (char *norm, char *uplo, char *diag, lapack_int *n,
const lapack_complex_double *a, lapack_int *lda, double *rcond,
lapack_complex_double *work, double *rwork, lapack_int *info)
🦋 TP — triangular packed, same trio of chars, zero lda
void LAPACK_stpcon (char *norm, char *uplo, char *diag, lapack_int *n,
const float *ap, float *rcond, float *work, lapack_int *iwork,
lapack_int *info)
void LAPACK_dtpcon (char *norm, char *uplo, char *diag, lapack_int *n,
const double *ap, double *rcond, double *work, lapack_int *iwork,
lapack_int *info)
void LAPACK_ctpcon (char *norm, char *uplo, char *diag, lapack_int *n,
const lapack_complex_float *ap, float *rcond, lapack_complex_float
*work, float *rwork, lapack_int *info)
void LAPACK_ztpcon (char *norm, char *uplo, char *diag, lapack_int *n,
const lapack_complex_double *ap, double *rcond,
lapack_complex_double *work, double *rwork, lapack_int *info)
🌸 TB — triangular banded, the full five-char-pointers-and-a-kd situation
norm, uplo, diag, plus kd and ldab for the band. it's giving "every option at once" and honestly? ate 🔥
void LAPACK_stbcon (char *norm, char *uplo, char *diag, lapack_int *n,
lapack_int *kd, const float *ab, lapack_int *ldab, float *rcond,
float *work, lapack_int *iwork, lapack_int *info)
void LAPACK_dtbcon (char *norm, char *uplo, char *diag, lapack_int *n,
lapack_int *kd, const double *ab, lapack_int *ldab, double *rcond,
double *work, lapack_int *iwork, lapack_int *info)
void LAPACK_ctbcon (char *norm, char *uplo, char *diag, lapack_int *n,
lapack_int *kd, const lapack_complex_float *ab, lapack_int *ldab,
float *rcond, lapack_complex_float *work, float *rwork, lapack_int
*info)
void LAPACK_ztbcon (char *norm, char *uplo, char *diag, lapack_int *n,
lapack_int *kd, const lapack_complex_double *ab, lapack_int *ldab,
double *rcond, lapack_complex_double *work, double *rwork,
lapack_int *info)
🔥 GERFS — iterative refinement, aka "my answer but make it accurate"
okay so these are a whole different vibe: you feed in the original a/lda, the factored af/ldaf, the pivots ipiv, the right-hand side b/ldb, and the solution x/ldx. out come ferr (forward error bound) and berr (backward error bound) — two arrays of length nrhs each, bestie, don't skimp 💖
void LAPACK_sgerfs (char *trans, lapack_int *n, lapack_int *nrhs, const
float *a, lapack_int *lda, const float *af, lapack_int *ldaf, const
lapack_int *ipiv, const float *b, lapack_int *ldb, float *x,
lapack_int *ldx, float *ferr, float *berr, float *work, lapack_int
*iwork, lapack_int *info)
void LAPACK_dgerfs (char *trans, lapack_int *n, lapack_int *nrhs, const
double *a, lapack_int *lda, const double *af, lapack_int *ldaf,
const lapack_int *ipiv, const double *b, lapack_int *ldb, double *x,
lapack_int *ldx, double *ferr, double *berr, double *work,
lapack_int *iwork, lapack_int *info)
void LAPACK_cgerfs (char *trans, lapack_int *n, lapack_int *nrhs, const
lapack_complex_float *a, lapack_int *lda, const lapack_complex_float
*af, lapack_int *ldaf, const lapack_int *ipiv, const
lapack_complex_float *b, lapack_int *ldb, lapack_complex_float *x,
lapack_int *ldx, float *ferr, float *berr, lapack_complex_float
*work, float *rwork, lapack_int *info)
void LAPACK_zgerfs (char *trans, lapack_int *n, lapack_int *nrhs, const
lapack_complex_double *a, lapack_int *lda, const
lapack_complex_double *af, lapack_int *ldaf, const lapack_int *ipiv,
const lapack_complex_double *b, lapack_int *ldb,
lapack_complex_double *x, lapack_int *ldx, double *ferr, double
and that's exactly where the source page cuts off mid-signature — double *berr, lapack_complex_double *work, double *rwork, lapack_int *info are still coming, so don't panic, the next chunk picks it right back up 🫶✨
*berr, lapack_complex_double *work, double *rwork, lapack_int *info)
okay so that was the tail end of the last one, bestie — we are so back in the prototype lineup 💅 and this next batch is giving "refinement team" energy. Like, these are the iteratively-refined solve routines, where you pass in your factorized matrix and a right-hand side and they hand you back the solution plus error bounds. Iconic behavior. ✨
first up, the gerfsx squad — general matrices, but the ✨extra✨ version that lets you ask for error bounds, because we simply do not do anything without error bounds anymore:
void LAPACK_dgerfsx (char *trans, char *equed, lapack_int *n, lapack_int
*nrhs, const double *a, lapack_int *lda, const double *af,
lapack_int *ldaf, const lapack_int *ipiv, const double *r, const
double *c, const double *b, lapack_int *ldb, double *x, lapack_int
*ldx, double *rcond, double *berr, lapack_int *n_err_bnds, double
*err_bnds_norm, double *err_bnds_comp, lapack_int *nparams, double
*params, double *work, lapack_int *iwork, lapack_int *info)
void LAPACK_sgerfsx (char *trans, char *equed, lapack_int *n, lapack_int
*nrhs, const float *a, lapack_int *lda, const float *af, lapack_int
*ldaf, const lapack_int *ipiv, const float *r, const float *c, const
float *b, lapack_int *ldb, float *x, lapack_int *ldx, float *rcond,
float *berr, lapack_int *n_err_bnds, float *err_bnds_norm, float
*err_bnds_comp, lapack_int *nparams, float *params, float *work,
lapack_int *iwork, lapack_int *info)
void LAPACK_zgerfsx (char *trans, char *equed, lapack_int *n, lapack_int
*nrhs, const lapack_complex_double *a, lapack_int *lda, const
lapack_complex_double *af, lapack_int *ldaf, const lapack_int *ipiv,
const double *r, const double *c, const lapack_complex_double *b,
lapack_int *ldb, lapack_complex_double *x, lapack_int *ldx, double
*rcond, double *berr, lapack_int *n_err_bnds, double *err_bnds_norm,
double *err_bnds_comp, lapack_int *nparams, double *params,
lapack_complex_double *work, double *rwork, lapack_int *info)
void LAPACK_cgerfsx (char *trans, char *equed, lapack_int *n, lapack_int
*nrhs, const lapack_complex_float *a, lapack_int *lda, const
lapack_complex_float *af, lapack_int *ldaf, const lapack_int *ipiv,
const float *r, const float *c, const lapack_complex_float *b,
lapack_int *ldb, lapack_complex_float *x, lapack_int *ldx, float
*rcond, float *berr, lapack_int *n_err_bnds, float *err_bnds_norm,
float *err_bnds_comp, lapack_int *nparams, float *params,
lapack_complex_float *work, float *rwork, lapack_int *info)
quick vibe check: notice how thez/c(complex) versions get that extrarworkarray and the real ones don't? that's the whole bit — complex math needs a little scratch space for the real parts. not me knowing this by heart 🫶
then the gbrfs besties — same deal but for general band matrices, so you're passing in kl and ku for the lower and upper bandwidth. iykyk 🌸
void LAPACK_sgbrfs (char *trans, lapack_int *n, lapack_int *kl,
lapack_int *ku, lapack_int *nrhs, const float *ab, lapack_int *ldab,
const float *afb, lapack_int *ldafb, const lapack_int *ipiv, const
float *b, lapack_int *ldb, float *x, lapack_int *ldx, float *ferr,
float *berr, float *work, lapack_int *iwork, lapack_int *info)
void LAPACK_dgbrfs (char *trans, lapack_int *n, lapack_int *kl,
lapack_int *ku, lapack_int *nrhs, const double *ab, lapack_int
*ldab, const double *afb, lapack_int *ldafb, const lapack_int *ipiv,
const double *b, lapack_int *ldb, double *x, lapack_int *ldx, double
*ferr, double *berr, double *work, lapack_int *iwork, lapack_int
*info)
void LAPACK_cgbrfs (char *trans, lapack_int *n, lapack_int *kl,
lapack_int *ku, lapack_int *nrhs, const lapack_complex_float *ab,
lapack_int *ldab, const lapack_complex_float *afb, lapack_int
*ldafb, const lapack_int *ipiv, const lapack_complex_float *b,
lapack_int *ldb, lapack_complex_float *x, lapack_int *ldx, float
*ferr, float *berr, lapack_complex_float *work, float *rwork,
lapack_int *info)
void LAPACK_zgbrfs (char *trans, lapack_int *n, lapack_int *kl,
lapack_int *ku, lapack_int *nrhs, const lapack_complex_double *ab,
lapack_int *ldab, const lapack_complex_double *afb, lapack_int
*ldafb, const lapack_int *ipiv, const lapack_complex_double *b,
lapack_int *ldb, lapack_complex_double *x, lapack_int *ldx, double
*ferr, double *berr, lapack_complex_double *work, double *rwork,
lapack_int *info)
and obviously the band fam also gets the ✨x✨ treatment. main character energy, no notes 👑
void LAPACK_dgbrfsx (char *trans, char *equed, lapack_int *n, lapack_int
*kl, lapack_int *ku, lapack_int *nrhs, const double *ab, lapack_int
*ldab, const double *afb, lapack_int *ldafb, const lapack_int *ipiv,
const double *r, const double *c, const double *b, lapack_int *ldb,
double *x, lapack_int *ldx, double *rcond, double *berr, lapack_int
*n_err_bnds, double *err_bnds_norm, double *err_bnds_comp,
lapack_int *nparams, double *params, double *work, lapack_int
*iwork, lapack_int *info)
void LAPACK_sgbrfsx (char *trans, char *equed, lapack_int *n, lapack_int
*kl, lapack_int *ku, lapack_int *nrhs, const float *ab, lapack_int
*ldab, const float *afb, lapack_int *ldafb, const lapack_int *ipiv,
const float *r, const float *c, const float *b, lapack_int *ldb,
float *x, lapack_int *ldx, float *rcond, float *berr, lapack_int
*n_err_bnds, float *err_bnds_norm, float *err_bnds_comp, lapack_int
*nparams, float *params, float *work, lapack_int *iwork, lapack_int
*info)
void LAPACK_zgbrfsx (char *trans, char *equed, lapack_int *n, lapack_int
*kl, lapack_int *ku, lapack_int *nrhs, const lapack_complex_double
*ab, lapack_int *ldab, const lapack_complex_double *afb, lapack_int
*ldafb, const lapack_int *ipiv, const double *r, const double *c,
const lapack_complex_double *b, lapack_int *ldb,
lapack_complex_double *x, lapack_int *ldx, double *rcond, double
*berr, lapack_int *n_err_bnds, double *err_bnds_norm, double
*err_bnds_comp, lapack_int *nparams, double *params,
lapack_complex_double *work, double *rwork, lapack_int *info)
void LAPACK_cgbrfsx (char *trans, char *equed, lapack_int *n, lapack_int
*kl, lapack_int *ku, lapack_int *nrhs, const lapack_complex_float
*ab, lapack_int *ldab, const lapack_complex_float *afb, lapack_int
*ldafb, const lapack_int *ipiv, const float *r, const float *c,
const lapack_complex_float *b, lapack_int *ldb, lapack_complex_float
*x, lapack_int *ldx, float *rcond, float *berr, lapack_int
*n_err_bnds, float *err_bnds_norm, float *err_bnds_comp, lapack_int
*nparams, float *params, lapack_complex_float *work, float *rwork,
lapack_int *info)
now we pivot to tridiagonal energy 🦋 the gtrfs crew — you're handing over dl, d, du for the original tridiagonal matrix and dlf, df, duf, du2 for the factored one. it's giving "I brought the whole friend group" and honestly? valid.
void LAPACK_sgtrfs (char *trans, lapack_int *n, lapack_int *nrhs, const
float *dl, const float *d, const float *du, const float *dlf, const
float *df, const float *duf, const float *du2, const lapack_int
*ipiv, const float *b, lapack_int *ldb, float *x, lapack_int *ldx,
float *ferr, float *berr, float *work, lapack_int *iwork, lapack_int
*info)
void LAPACK_dgtrfs (char *trans, lapack_int *n, lapack_int *nrhs, const
double *dl, const double *d, const double *du, const double *dlf,
const double *df, const double *duf, const double *du2, const
lapack_int *ipiv, const double *b, lapack_int *ldb, double *x,
lapack_int *ldx, double *ferr, double *berr, double *work,
lapack_int *iwork, lapack_int *info)
void LAPACK_cgtrfs (char *trans, lapack_int *n, lapack_int *nrhs, const
lapack_complex_float *dl, const lapack_complex_float *d, const
lapack_complex_float *du, const lapack_complex_float *dlf, const
lapack_complex_float *df, const lapack_complex_float *duf, const
lapack_complex_float *du2, const lapack_int *ipiv, const
lapack_complex_float *b, lapack_int *ldb, lapack_complex_float *x,
lapack_int *ldx, float *ferr, float *berr, lapack_complex_float
*work, float *rwork, lapack_int *info)
void LAPACK_zgtrfs (char *trans, lapack_int *n, lapack_int *nrhs, const
lapack_complex_double *dl, const lapack_complex_double *d, const
lapack_complex_double *du, const lapack_complex_double *dlf, const
lapack_complex_double *df, const lapack_complex_double *duf, const
lapack_complex_double *du2, const lapack_int *ipiv, const
lapack_complex_double *b, lapack_int *ldb, lapack_complex_double *x,
lapack_int *ldx, double *ferr, double *berr, lapack_complex_double
*work, double *rwork, lapack_int *info)
okay and then we get to the positive-definite girlies 💖 porfs — like gerfs but for symmetric/Hermitian positive-definite matrices, so it's uplo instead of trans, and there's no ipiv because PD matrices get Cholesky'd, not pivoted. slay.
void LAPACK_sporfs (char *uplo, lapack_int *n, lapack_int *nrhs, const
float *a, lapack_int *lda, const float *af, lapack_int *ldaf, const
float *b, lapack_int *ldb, float *x, lapack_int *ldx, float *ferr,
float *berr, float *work, lapack_int *iwork, lapack_int *info)
void LAPACK_dporfs (char *uplo, lapack_int *n, lapack_int *nrhs, const
double *a, lapack_int *lda, const double *af, lapack_int *ldaf,
const double *b, lapack_int *ldb, double *x, lapack_int *ldx, double
*ferr, double *berr, double *work, lapack_int *iwork, lapack_int
*info)
void LAPACK_cporfs (char *uplo, lapack_int *n, lapack_int *nrhs, const
lapack_complex_float *a, lapack_int *lda, const lapack_complex_float
*af, lapack_int *ldaf, const lapack_complex_float *b, lapack_int
*ldb, lapack_complex_float *x, lapack_int *ldx, float *ferr, float
*berr, lapack_complex_float *work, float *rwork, lapack_int *info)
void LAPACK_zporfs (char *uplo, lapack_int *n, lapack_int *nrhs, const
lapack_complex_double *a, lapack_int *lda, const
lapack_complex_double *af, lapack_int *ldaf, const
lapack_complex_double *b, lapack_int *ldb, lapack_complex_double *x,
lapack_int *ldx, double *ferr, double *berr, lapack_complex_double
*work, double *rwork, lapack_int *info)
and of course PD gets the x-variant too, because we love consistency in this house 🎀 note the s array floating around in there — that's the scaling factors for the equilibration, bestie, it's doing the most and we respect it:
void LAPACK_dporfsx (char *uplo, char *equed, lapack_int *n, lapack_int
*nrhs, const double *a, lapack_int *lda, const double *af,
lapack_int *ldaf, const double *s, const double *b, lapack_int *ldb,
double *x, lapack_int *ldx, double *rcond, double *berr, lapack_int
*n_err_bnds, double *err_bnds_norm, double *err_bnds_comp,
lapack_int *nparams, double *params, double *work, lapack_int
*iwork, lapack_int *info)
void LAPACK_sporfsx (char *uplo, char *equed, lapack_int *n, lapack_int
*nrhs, const float *a, lapack_int *lda, const float *af, lapack_int
*ldaf, const float *s, const float *b, lapack_int *ldb, float *x,
lapack_int *ldx, float *rcond, float *berr, lapack_int *n_err_bnds,
float *err_bnds_norm, float *err_bnds_comp, lapack_int *nparams,
float *params, float *work, lapack_int *iwork, lapack_int *info)
void LAPACK_zporfsx (char *uplo, char *equed, lapack_int *n, lapack_int
*nrhs, const lapack_complex_double *a, lapack_int *lda, const
lapack_complex_double *af, lapack_int *ldaf, const double *s, const
lapack_complex_double *b, lapack_int *ldb, lapack_complex_double *x,
lapack_int *ldx, double *rcond, double *berr, lapack_int
*n_err_bnds, double *err_bnds_norm, double *err_bnds_comp,
lapack_int *nparams, double *params, lapack_complex_double *work,
double *rwork, lapack_int *info)
void LAPACK_cporfsx (char *uplo, char *equed, lapack_int *n, lapack_int
*nrhs, const lapack_complex_float *a, lapack_int *lda, const
lapack_complex_float *af, lapack_int *ldaf, const float *s, const
lapack_complex_float *b, lapack_int *ldb, lapack_complex_float *x,
lapack_int *ldx, float *rcond, float *berr, lapack_int *n_err_bnds,
float *err_bnds_norm, float *err_bnds_comp, lapack_int *nparams,
……and we're mid-signature, so hold that thought bestie, the next chunk pics up right here 🌈🫶
okay so we're still deep in the prototype lineup 💅 and this whole stretch is the ?pprfs / ?pbrfs / ?ptrfs / ?syrfs / ?herfs / ?sprfs / ?hprfs girls. same skeleton, different precision, and yes they all brought their info pointer to the party 🎀
the ?pprfs quad — packed storage girlies 🍓
void LAPACK_spprfs (char *uplo, lapack_int *n, lapack_int *nrhs, const
float *ap, const float *afp, const float *b, lapack_int *ldb, float
*x, lapack_int *ldx, float *ferr, float *berr, float *work,
lapack_int *iwork, lapack_int *info)
void LAPACK_dpprfs (char *uplo, lapack_int *n, lapack_int *nrhs, const
double *ap, const double *afp, const double *b, lapack_int *ldb,
double *x, lapack_int *ldx, double *ferr, double *berr, double
*work, lapack_int *iwork, lapack_int *info)
void LAPACK_cpprfs (char *uplo, lapack_int *n, lapack_int *nrhs, const
lapack_complex_float *ap, const lapack_complex_float *afp, const
lapack_complex_float *b, lapack_int *ldb, lapack_complex_float *x,
lapack_int *ldx, float *ferr, float *berr, lapack_complex_float
*work, float *rwork, lapack_int *info)
void LAPACK_zpprfs (char *uplo, lapack_int *n, lapack_int *nrhs, const
lapack_complex_double *ap, const lapack_complex_double *afp, const
lapack_complex_double *b, lapack_int *ldb, lapack_complex_double *x,
lapack_int *ldx, double *ferr, double *berr, lapack_complex_double
*work, double *rwork, lapack_int *info)
okay bestie, clock the pattern 👑 — s/d/c/z are literally just the four flavours (float, double, complex float, complex double), and the c and z ones are not like the others: they get an extra float *rwork or double *rwork in the mix 🫶. everyone here takes uplo and n and nrhs, everyone gets ap and afp (the pair, lowkey iconic), everyone has ldb and ldx doing their little leading-dimension thing, and everyone signs off with ferr, berr, work, iwork, info. no cap, that's the whole shape.
the ?pbrfs quad — banded edition 🌈
void LAPACK_spbrfs (char *uplo, lapack_int *n, lapack_int *kd,
lapack_int *nrhs, const float *ab, lapack_int *ldab, const float
*afb, lapack_int *ldafb, const float *b, lapack_int *ldb, float *x,
lapack_int *ldx, float *ferr, float *berr, float *work, lapack_int
*iwork, lapack_int *info)
void LAPACK_dpbrfs (char *uplo, lapack_int *n, lapack_int *kd,
lapack_int *nrhs, const double *ab, lapack_int *ldab, const double
*afb, lapack_int *ldafb, const double *b, lapack_int *ldb, double
*x, lapack_int *ldx, double *ferr, double *berr, double *work,
lapack_int *iwork, lapack_int *info)
void LAPACK_cpbrfs (char *uplo, lapack_int *n, lapack_int *kd,
lapack_int *nrhs, const lapack_complex_float *ab, lapack_int *ldab,
const lapack_complex_float *afb, lapack_int *ldafb, const
lapack_complex_float *b, lapack_int *ldb, lapack_complex_float *x,
lapack_int *ldx, float *ferr, float *berr, lapack_complex_float
*work, float *rwork, lapack_int *info)
void LAPACK_zpbrfs (char *uplo, lapack_int *n, lapack_int *kd,
lapack_int *nrhs, const lapack_complex_double *ab, lapack_int *ldab,
const lapack_complex_double *afb, lapack_int *ldafb, const
lapack_complex_double *b, lapack_int *ldb, lapack_complex_double *x,
lapack_int *ldx, double *ferr, double *berr, lapack_complex_double
*work, double *rwork, lapack_int *info)
two new iconique guests in this one: kd (the band situation) and the twin leading dimensions ldab + ldafb 🦋. ab and afb are the banded besties. again the complex ones carry rwork along for moral support, and the real ones do not — that's it, that's the difference, periodt.
the ?ptrfs quad — tridiagonal girlies ✨
void LAPACK_sptrfs (lapack_int *n, lapack_int *nrhs, const float *d,
const float *e, const float *df, const float *ef, const float *b,
lapack_int *ldb, float *x, lapack_int *ldx, float *ferr, float
*berr, float *work, lapack_int *info)
void LAPACK_dptrfs (lapack_int *n, lapack_int *nrhs, const double *d,
const double *e, const double *df, const double *ef, const double
*b, lapack_int *ldb, double *x, lapack_int *ldx, double *ferr,
double *berr, double *work, lapack_int *info)
void LAPACK_cptrfs (char *uplo, lapack_int *n, lapack_int *nrhs, const
float *d, const lapack_complex_float *e, const float *df, const
lapack_complex_float *ef, const lapack_complex_float *b, lapack_int
*ldb, lapack_complex_float *x, lapack_int *ldx, float *ferr, float
*berr, lapack_complex_float *work, float *rwork, lapack_int *info)
void LAPACK_zptrfs (char *uplo, lapack_int *n, lapack_int *nrhs, const
double *d, const lapack_complex_double *e, const double *df, const
lapack_complex_double *ef, const lapack_complex_double *b,
lapack_int *ldb, lapack_complex_double *x, lapack_int *ldx, double
*ferr, double *berr, lapack_complex_double *work, double *rwork,
lapack_int *info)
okay this is the one that's giving "siblings but make it awkward" 😭 — LAPACK_sptrfs and LAPACK_dptrfs have no uplo and no rwork at all, while LAPACK_cptrfs and LAPACK_zptrfs open with char *uplo and close out with rwork before info. the diagonal pair d / df stays real even in the complex versions, and e / ef go complex. that's not me being cute, that's literally the signatures. respect the asymmetry ig 💅
the ?syrfs quad — symmetric, she's consistent 💜
void LAPACK_ssyrfs (char *uplo, lapack_int *n, lapack_int *nrhs, const
float *a, lapack_int *lda, const float *af, lapack_int *ldaf, const
lapack_int *ipiv, const float *b, lapack_int *ldb, float *x,
lapack_int *ldx, float *ferr, float *berr, float *work, lapack_int
*iwork, lapack_int *info)
void LAPACK_dsyrfs (char *uplo, lapack_int *n, lapack_int *nrhs, const
double *a, lapack_int *lda, const double *af, lapack_int *ldaf,
const lapack_int *ipiv, const double *b, lapack_int *ldb, double *x,
lapack_int *ldx, double *ferr, double *berr, double *work,
lapack_int *iwork, lapack_int *info)
void LAPACK_csyrfs (char *uplo, lapack_int *n, lapack_int *nrhs, const
lapack_complex_float *a, lapack_int *lda, const lapack_complex_float
*af, lapack_int *ldaf, const lapack_int *ipiv, const
lapack_complex_float *b, lapack_int *ldb, lapack_complex_float *x,
lapack_int *ldx, float *ferr, float *berr, lapack_complex_float
*work, float *rwork, lapack_int *info)
void LAPACK_zsyrfs (char *uplo, lapack_int *n, lapack_int *nrhs, const
lapack_complex_double *a, lapack_int *lda, const
lapack_complex_double *af, lapack_int *ldaf, const lapack_int *ipiv,
const lapack_complex_double *b, lapack_int *ldb,
lapack_complex_double *x, lapack_int *ldx, double *ferr, double
*berr, lapack_complex_double *work, double *rwork, lapack_int *info)
ipiv has entered the chat 🎀 and honestly she's the main character here — a const lapack_int *, sitting right there between ldaf and b. all four of these bring lda and ldaf, ldb and ldx, then ferr, berr, work, iwork, info. the c/z ones still sneak in rwork like it's a personality trait, and honestly? iconic.
the ?syrfsx quad — the ones with ✨extra✨ options 🌸
void LAPACK_dsyrfsx (char *uplo, char *equed, lapack_int *n, lapack_int
*nrhs, const double *a, lapack_int *lda, const double *af,
lapack_int *ldaf, const lapack_int *ipiv, const double *s, const
double *b, lapack_int *ldb, double *x, lapack_int *ldx, double
*rcond, double *berr, lapack_int *n_err_bnds, double *err_bnds_norm,
double *err_bnds_comp, lapack_int *nparams, double *params, double
*work, lapack_int *iwork, lapack_int *info)
void LAPACK_ssyrfsx (char *uplo, char *equed, lapack_int *n, lapack_int
*nrhs, const float *a, lapack_int *lda, const float *af, lapack_int
*ldaf, const lapack_int *ipiv, const float *s, const float *b,
lapack_int *ldb, float *x, lapack_int *ldx, float *rcond, float
*berr, lapack_int *n_err_bnds, float *err_bnds_norm, float
*err_bnds_comp, lapack_int *nparams, float *params, float *work,
lapack_int *iwork, lapack_int *info)
void LAPACK_zsyrfsx (char *uplo, char *equed, lapack_int *n, lapack_int
*nrhs, const lapack_complex_double *a, lapack_int *lda, const
lapack_complex_double *af, lapack_int *ldaf, const lapack_int *ipiv,
const double *s, const lapack_complex_double *b, lapack_int *ldb,
lapack_complex_double *x, lapack_int *ldx, double *rcond, double
*berr, lapack_int *n_err_bnds, double *err_bnds_norm, double
*err_bnds_comp, lapack_int *nparams, double *params,
lapack_complex_double *work, double *rwork, lapack_int *info)
void LAPACK_csyrfsx (char *uplo, char *equed, lapack_int *n, lapack_int
*nrhs, const lapack_complex_float *a, lapack_int *lda, const
lapack_complex_float *af, lapack_int *ldaf, const lapack_int *ipiv,
const float *s, const lapack_complex_float *b, lapack_int *ldb,
lapack_complex_float *x, lapack_int *ldx, float *rcond, float *berr,
lapack_int *n_err_bnds, float *err_bnds_norm, float *err_bnds_comp,
lapack_int *nparams, float *params, lapack_complex_float *work,
float *rwork, lapack_int *info)
heads up bestie: these are thexvariants —dsyrfsx,ssyrfsx,zsyrfsx,csyrfsx— so they carry a whole extra cast of characters:equed,s,rcond,n_err_bnds,err_bnds_norm,err_bnds_comp,nparams,params. yes that's a lot. no I'm not going to pretend it isn't 😭
also note the ordering is chaotic in the source — d, then s, then z, then c — and I'm keeping it exactly like that because we don't rewrite the lineup, we just hype it 💅
the ?herfs / ?herfsx girlies — Hermitian, obviously 👑
void LAPACK_cherfs (char *uplo, lapack_int *n, lapack_int *nrhs, const
lapack_complex_float *a, lapack_int *lda, const lapack_complex_float
*af, lapack_int *ldaf, const lapack_int *ipiv, const
lapack_complex_float *b, lapack_int *ldb, lapack_complex_float *x,
lapack_int *ldx, float *ferr, float *berr, lapack_complex_float
*work, float *rwork, lapack_int *info)
void LAPACK_zherfs (char *uplo, lapack_int *n, lapack_int *nrhs, const
lapack_complex_double *a, lapack_int *lda, const
lapack_complex_double *af, lapack_int *ldaf, const lapack_int *ipiv,
const lapack_complex_double *b, lapack_int *ldb,
lapack_complex_double *x, lapack_int *ldx, double *ferr, double
*berr, lapack_complex_double *work, double *rwork, lapack_int *info)
void LAPACK_zherfsx (char *uplo, char *equed, lapack_int *n, lapack_int
*nrhs, const lapack_complex_double *a, lapack_int *lda, const
lapack_complex_double *af, lapack_int *ldaf, const lapack_int *ipiv,
const double *s, const lapack_complex_double *b, lapack_int *ldb,
lapack_complex_double *x, lapack_int *ldx, double *rcond, double
*berr, lapack_int *n_err_bnds, double *err_bnds_norm, double
*err_bnds_comp, lapack_int *nparams, double *params,
lapack_complex_double *work, double *rwork, lapack_int *info)
void LAPACK_cherfsx (char *uplo, char *equed, lapack_int *n, lapack_int
*nrhs, const lapack_complex_float *a, lapack_int *lda, const
lapack_complex_float *af, lapack_int *ldaf, const lapack_int *ipiv,
const float *s, const lapack_complex_float *b, lapack_int *ldb,
lapack_complex_float *x, lapack_int *ldx, float *rcond, float *berr,
lapack_int *n_err_bnds, float *err_bnds_norm, float *err_bnds_comp,
lapack_int *nparams, float *params, lapack_complex_float *work,
float *rwork, lapack_int *info)
notice there's no sherfs or dherfs — Hermitian is complex-only, so it's just c and z 💅 and the x variants again bring the extended guest list (equed, s, rcond, n_err_bnds, err_bnds_norm, err_bnds_comp, nparams, params). and yes, s is const double * / const float * even though a is complex — clock it 🦋
the ?sprfs quad — packed symmetric, welcome back 🎀
void LAPACK_ssprfs (char *uplo, lapack_int *n, lapack_int *nrhs, const
float *ap, const float *afp, const lapack_int *ipiv, const float *b,
lapack_int *ldb, float *x, lapack_int *ldx, float *ferr, float
*berr, float *work, lapack_int *iwork, lapack_int *info)
void LAPACK_dsprfs (char *uplo, lapack_int *n, lapack_int *nrhs, const
double *ap, const double *afp, const lapack_int *ipiv, const double
*b, lapack_int *ldb, double *x, lapack_int *ldx, double *ferr,
double *berr, double *work, lapack_int *iwork, lapack_int *info)
void LAPACK_csprfs (char *uplo, lapack_int *n, lapack_int *nrhs, const
lapack_complex_float *ap, const lapack_complex_float *afp, const
lapack_int *ipiv, const lapack_complex_float *b, lapack_int *ldb,
lapack_complex_float *x, lapack_int *ldx, float *ferr, float *berr,
lapack_complex_float *work, float *rwork, lapack_int *info)
void LAPACK_zsprfs (char *uplo, lapack_int *n, lapack_int *nrhs, const
lapack_complex_double *ap, const lapack_complex_double *afp, const
lapack_int *ipiv, const lapack_complex_double *b, lapack_int *ldb,
lapack_complex_double *x, lapack_int *ldx, double *ferr, double
*berr, lapack_complex_double *work, double *rwork, lapack_int *info)
so this is the packed-storage version of the syrfs vibe — same ap / afp bestie duo as the pprfs girls, but now with ipiv wedged in there too 💀 and again: real ones get iwork, complex ones get rwork, everyone gets info at the end like a little bow 🎀
the ?hprfs pair — and we're mid-signature, hold on 😭
void LAPACK_chprfs (char *uplo, lapack_int *n, lapack_int *nrhs, const
lapack_complex_float *ap, const lapack_complex_float *afp, const
lapack_int *ipiv, const lapack_complex_float *b, lapack_int *ldb,
lapack_complex_float *x, lapack_int *ldx, float *ferr, float *berr,
lapack_complex_float *work, float *rwork, lapack_int *info)
void LAPACK_zhprfs (char *uplo, lapack_int *n, lapack_int *nrhs, const
lapack_complex_double *ap, const lapack_complex_double *afp, const
okay don't panic 💀 LAPACK_zhprfs got cut off mid-declaration — it ends on that lonely little const — because this part of the page stops right there. that's not a bug in the docs, that's literally where the excerpt ends, and the rest of zhprfs walks in with the next chunk. no cap, she's mid-sentence and she knows it 🫶
stay tuned bestie, we're literally not even close to done ✨
…and we're literally right back in it, mid-signature, no breather. The tail end of the last one first, because we don't leave a function hanging 💅
lapack_int *ipiv, const lapack_complex_double *b, lapack_int *ldb,
lapack_complex_double *x, lapack_int *ldx, double *ferr, double
*berr, lapack_complex_double *work, double *rwork, lapack_int *info)
okay so the *rfs crew is up next and it's giving "same energy, four flavors." s for single, d for double, c for complex, z for complex double — the whole alphabet soup lineup, and yes, they all brought their ferr/berr besties along 🫶
void LAPACK_strrfs (char *uplo, char *trans, char *diag, lapack_int *n,
lapack_int *nrhs, const float *a, lapack_int *lda, const float *b,
lapack_int *ldb, const float *x, lapack_int *ldx, float *ferr, float
*berr, float *work, lapack_int *iwork, lapack_int *info)
void LAPACK_dtrrfs (char *uplo, char *trans, char *diag, lapack_int *n,
lapack_int *nrhs, const double *a, lapack_int *lda, const double *b,
lapack_int *ldb, const double *x, lapack_int *ldx, double *ferr,
double *berr, double *work, lapack_int *iwork, lapack_int *info)
void LAPACK_ctrrfs (char *uplo, char *trans, char *diag, lapack_int *n,
lapack_int *nrhs, const lapack_complex_float *a, lapack_int *lda,
const lapack_complex_float *b, lapack_int *ldb, const
lapack_complex_float *x, lapack_int *ldx, float *ferr, float *berr,
lapack_complex_float *work, float *rwork, lapack_int *info)
void LAPACK_ztrrfs (char *uplo, char *trans, char *diag, lapack_int *n,
lapack_int *nrhs, const lapack_complex_double *a, lapack_int *lda,
const lapack_complex_double *b, lapack_int *ldb, const
lapack_complex_double *x, lapack_int *ldx, double *ferr, double
*berr, lapack_complex_double *work, double *rwork, lapack_int *info)
then the tp girlies pull up — packed format represent ✨ notice how the complex ones swap iwork for a rwork era, that's their whole thing:
void LAPACK_stprfs (char *uplo, char *trans, char *diag, lapack_int *n,
lapack_int *nrhs, const float *ap, const float *b, lapack_int *ldb,
const float *x, lapack_int *ldx, float *ferr, float *berr, float
*work, lapack_int *iwork, lapack_int *info)
void LAPACK_dtprfs (char *uplo, char *trans, char *diag, lapack_int *n,
lapack_int *nrhs, const double *ap, const double *b, lapack_int
*ldb, const double *x, lapack_int *ldx, double *ferr, double *berr,
double *work, lapack_int *iwork, lapack_int *info)
void LAPACK_ctprfs (char *uplo, char *trans, char *diag, lapack_int *n,
lapack_int *nrhs, const lapack_complex_float *ap, const
lapack_complex_float *b, lapack_int *ldb, const lapack_complex_float
*x, lapack_int *ldx, float *ferr, float *berr, lapack_complex_float
*work, float *rwork, lapack_int *info)
void LAPACK_ztprfs (char *uplo, char *trans, char *diag, lapack_int *n,
lapack_int *nrhs, const lapack_complex_double *ap, const
lapack_complex_double *b, lapack_int *ldb, const
lapack_complex_double *x, lapack_int *ldx, double *ferr, double
*berr, lapack_complex_double *work, double *rwork, lapack_int *info)
aaaand the tb lineup, which brought a bonus kd to the party — yes bestie, that extra lapack_int *kd is supposed to be there, don't @ me 🙈
void LAPACK_stbrfs (char *uplo, char *trans, char *diag, lapack_int *n,
lapack_int *kd, lapack_int *nrhs, const float *ab, lapack_int *ldab,
const float *b, lapack_int *ldb, const float *x, lapack_int *ldx,
float *ferr, float *berr, float *work, lapack_int *iwork, lapack_int
*info)
void LAPACK_dtbrfs (char *uplo, char *trans, char *diag, lapack_int *n,
lapack_int *kd, lapack_int *nrhs, const double *ab, lapack_int
*ldab, const double *b, lapack_int *ldb, const double *x, lapack_int
*ldx, double *ferr, double *berr, double *work, lapack_int *iwork,
lapack_int *info)
void LAPACK_ctbrfs (char *uplo, char *trans, char *diag, lapack_int *n,
lapack_int *kd, lapack_int *nrhs, const lapack_complex_float *ab,
lapack_int *ldab, const lapack_complex_float *b, lapack_int *ldb,
const lapack_complex_float *x, lapack_int *ldx, float *ferr, float
*berr, lapack_complex_float *work, float *rwork, lapack_int *info)
void LAPACK_ztbrfs (char *uplo, char *trans, char *diag, lapack_int *n,
lapack_int *kd, lapack_int *nrhs, const lapack_complex_double *ab,
lapack_int *ldab, const lapack_complex_double *b, lapack_int *ldb,
const lapack_complex_double *x, lapack_int *ldx, double *ferr,
double *berr, lapack_complex_double *work, double *rwork, lapack_int
*info)
okay pivot era 🔥 we're moving into the tri-adjacent universe and honestly it's a whole lifestyle. First up, the getri squad — they show up with their ipiv and their lwork, main character energy only:
void LAPACK_sgetri (lapack_int *n, float *a, lapack_int *lda, const
lapack_int *ipiv, float *work, lapack_int *lwork, lapack_int *info)
void LAPACK_dgetri (lapack_int *n, double *a, lapack_int *lda, const
lapack_int *ipiv, double *work, lapack_int *lwork, lapack_int *info)
void LAPACK_cgetri (lapack_int *n, lapack_complex_float *a, lapack_int
*lda, const lapack_int *ipiv, lapack_complex_float *work, lapack_int
*lwork, lapack_int *info)
void LAPACK_zgetri (lapack_int *n, lapack_complex_double *a, lapack_int
*lda, const lapack_int *ipiv, lapack_complex_double *work,
lapack_int *lwork, lapack_int *info)
the potri girls said "lwork? never heard of her" and honestly? streamlined. iconic. 💅
void LAPACK_spotri (char *uplo, lapack_int *n, float *a, lapack_int
*lda, lapack_int *info)
void LAPACK_dpotri (char *uplo, lapack_int *n, double *a, lapack_int
*lda, lapack_int *info)
void LAPACK_cpotri (char *uplo, lapack_int *n, lapack_complex_float *a,
lapack_int *lda, lapack_int *info)
void LAPACK_zpotri (char *uplo, lapack_int *n, lapack_complex_double *a,
lapack_int *lda, lapack_int *info)
and now the packed-format pftri crew, who brought a transr instead of a trans — yes it's different, yes it matters, keep up bestie ✨ also note they're listed dpftri, spftri, zpftri, cpftri in that exact order, we do not reshuffle the lineup:
void LAPACK_dpftri (char *transr, char *uplo, lapack_int *n, double *a,
lapack_int *info)
void LAPACK_spftri (char *transr, char *uplo, lapack_int *n, float *a,
lapack_int *info)
void LAPACK_zpftri (char *transr, char *uplo, lapack_int *n,
lapack_complex_double *a, lapack_int *info)
void LAPACK_cpftri (char *transr, char *uplo, lapack_int *n,
lapack_complex_float *a, lapack_int *info)
the pptri quartet keeps it cute — just uplo, n, ap, info, no notes:
void LAPACK_spptri (char *uplo, lapack_int *n, float *ap, lapack_int
*info)
void LAPACK_dpptri (char *uplo, lapack_int *n, double *ap, lapack_int
*info)
void LAPACK_cpptri (char *uplo, lapack_int *n, lapack_complex_float *ap,
lapack_int *info)
void LAPACK_zpptri (char *uplo, lapack_int *n, lapack_complex_double
*ap, lapack_int *info)
*sytri said "we're bringing ipiv AND work," overachievers, we love that for them 🌸
void LAPACK_ssytri (char *uplo, lapack_int *n, float *a, lapack_int
*lda, const lapack_int *ipiv, float *work, lapack_int *info)
void LAPACK_dsytri (char *uplo, lapack_int *n, double *a, lapack_int
*lda, const lapack_int *ipiv, double *work, lapack_int *info)
void LAPACK_csytri (char *uplo, lapack_int *n, lapack_complex_float *a,
lapack_int *lda, const lapack_int *ipiv, lapack_complex_float *work,
lapack_int *info)
void LAPACK_zsytri (char *uplo, lapack_int *n, lapack_complex_double *a,
lapack_int *lda, const lapack_int *ipiv, lapack_complex_double
*work, lapack_int *info)
and the hetri duo, tiny but mighty, only two of them because complex-only is their brand 😌
void LAPACK_chetri (char *uplo, lapack_int *n, lapack_complex_float *a,
lapack_int *lda, const lapack_int *ipiv, lapack_complex_float *work,
lapack_int *info)
void LAPACK_zhetri (char *uplo, lapack_int *n, lapack_complex_double *a,
lapack_int *lda, const lapack_int *ipiv, lapack_complex_double
*work, lapack_int *info)
sptri crew, packed AND pivoted, the multitaskers:
void LAPACK_ssptri (char *uplo, lapack_int *n, float *ap, const
lapack_int *ipiv, float *work, lapack_int *info)
void LAPACK_dsptri (char *uplo, lapack_int *n, double *ap, const
lapack_int *ipiv, double *work, lapack_int *info)
void LAPACK_csptri (char *uplo, lapack_int *n, lapack_complex_float *ap,
const lapack_int *ipiv, lapack_complex_float *work, lapack_int
*info)
void LAPACK_zsptri (char *uplo, lapack_int *n, lapack_complex_double
*ap, const lapack_int *ipiv, lapack_complex_double *work, lapack_int
*info)
hptri, the hermitian-packed girlies, again just the two:
void LAPACK_chptri (char *uplo, lapack_int *n, lapack_complex_float *ap,
const lapack_int *ipiv, lapack_complex_float *work, lapack_int
*info)
void LAPACK_zhptri (char *uplo, lapack_int *n, lapack_complex_double
*ap, const lapack_int *ipiv, lapack_complex_double *work, lapack_int
*info)
trtri said no ipiv, no work, just uplo, diag, and vibes 🦋 look at them go:
void LAPACK_strtri (char *uplo, char *diag, lapack_int *n, float *a,
lapack_int *lda, lapack_int *info)
void LAPACK_dtrtri (char *uplo, char *diag, lapack_int *n, double *a,
lapack_int *lda, lapack_int *info)
void LAPACK_ctrtri (char *uplo, char *diag, lapack_int *n,
lapack_complex_float *a, lapack_int *lda, lapack_int *info)
void LAPACK_ztrtri (char *uplo, char *diag, lapack_int *n,
lapack_complex_double *a, lapack_int *lda, lapack_int *info)
tftri brings transr back AND keeps diag — again the d, s, z, c order, do not touch it:
void LAPACK_dtftri (char *transr, char *uplo, char *diag, lapack_int *n,
double *a, lapack_int *info)
void LAPACK_stftri (char *transr, char *uplo, char *diag, lapack_int *n,
float *a, lapack_int *info)
void LAPACK_ztftri (char *transr, char *uplo, char *diag, lapack_int *n,
lapack_complex_double *a, lapack_int *info)
void LAPACK_ctftri (char *transr, char *uplo, char *diag, lapack_int *n,
lapack_complex_float *a, lapack_int *info)
and tptri, the last of the tri era, packed format, uplo + diag, four flavors, slay:
void LAPACK_stptri (char *uplo, char *diag, lapack_int *n, float *ap,
lapack_int *info)
void LAPACK_dtptri (char *uplo, char *diag, lapack_int *n, double *ap,
lapack_int *info)
void LAPACK_ctptri (char *uplo, char *diag, lapack_int *n,
lapack_complex_float *ap, lapack_int *info)
void LAPACK_ztptri (char *uplo, char *diag, lapack_int *n,
lapack_complex_double *ap, lapack_int *info)
new mini-arc unlocked: the equ family, aka the ones who hand you back r, c, rowcnd, colcnd, AND amax — that's five outputs bestie, they're generous like that 💖
void LAPACK_sgeequ (lapack_int *m, lapack_int *n, const float *a,
lapack_int *lda, float *r, float *c, float *rowcnd, float *colcnd,
float *amax, lapack_int *info)
void LAPACK_dgeequ (lapack_int *m, lapack_int *n, const double *a,
lapack_int *lda, double *r, double *c, double *rowcnd, double
*colcnd, double *amax, lapack_int *info)
void LAPACK_cgeequ (lapack_int *m, lapack_int *n, const
lapack_complex_float *a, lapack_int *lda, float *r, float *c, float
*rowcnd, float *colcnd, float *amax, lapack_int *info)
void LAPACK_zgeequ (lapack_int *m, lapack_int *n, const
lapack_complex_double *a, lapack_int *lda, double *r, double *c,
double *rowcnd, double *colcnd, double *amax, lapack_int *info)
then geequb (yes with the b, it's a different function, no cap) — and notice the order is d, s, z, c this time, which is lowkey chaotic but it's exactly what the page says so we keep it 🫡
void LAPACK_dgeequb (lapack_int *m, lapack_int *n, const double *a,
lapack_int *lda, double *r, double *c, double *rowcnd, double
*colcnd, double *amax, lapack_int *info)
void LAPACK_sgeequb (lapack_int *m, lapack_int *n, const float *a,
lapack_int *lda, float *r, float *c, float *rowcnd, float *colcnd,
float *amax, lapack_int *info)
void LAPACK_zgeequb (lapack_int *m, lapack_int *n, const
lapack_complex_double *a, lapack_int *lda, double *r, double *c,
double *rowcnd, double *colcnd, double *amax, lapack_int *info)
void LAPACK_cgeequb (lapack_int *m, lapack_int *n, const
lapack_complex_float *a, lapack_int *lda, float *r, float *c, float
*rowcnd, float *colcnd, float *amax, lapack_int *info)
and we're ending this part mid-gbequ, because the universe loves a cliffhanger — sgbequ and dgbequ said hi, brought kl and ku along, and the next one is literally still loading 💀
void LAPACK_sgbequ (lapack_int *m, lapack_int *n, lapack_int *kl,
lapack_int *ku, const float *ab, lapack_int *ldab, float *r, float
*c, float *rowcnd, float *colcnd, float *amax, lapack_int *info)
void LAPACK_dgbequ (lapack_int *m, lapack_int *n, lapack_int *kl,
lapack_int *ku, const double *ab, lapack_int *ldab, double *r,
double *c, double *rowcnd, double *colcnd, double *amax, lapack_int
...and bestie we literally start mid-argument-list because the last part got cut off (rude of it, honestly). Here's the tail end of that signature so nothing goes missing:
*info)
okay. so. the band-matrix equ family. four of them in the classic precision lineup, then the same four again wearing a lil b at the end of their names like a matching accessory 🎀. every single one takes m, n, kl, ku, the matrix ab, ldab, and then the iconic five-for-five: r, c, rowcnd, colcnd, amax, finishing on info. no cap, it's giving "same vibe, different dtype."
void LAPACK_cgbequ (lapack_int *m, lapack_int *n, lapack_int *kl,
lapack_int *ku, const lapack_complex_float *ab, lapack_int *ldab,
float *r, float *c, float *rowcnd, float *colcnd, float *amax,
lapack_int *info)
void LAPACK_zgbequ (lapack_int *m, lapack_int *n, lapack_int *kl,
lapack_int *ku, const lapack_complex_double *ab, lapack_int *ldab,
double *r, double *c, double *rowcnd, double *colcnd, double *amax,
lapack_int *info)
void LAPACK_dgbequb (lapack_int *m, lapack_int *n, lapack_int *kl,
lapack_int *ku, const double *ab, lapack_int *ldab, double *r,
double *c, double *rowcnd, double *colcnd, double *amax, lapack_int
*info)
void LAPACK_sgbequb (lapack_int *m, lapack_int *n, lapack_int *kl,
lapack_int *ku, const float *ab, lapack_int *ldab, float *r, float
*c, float *rowcnd, float *colcnd, float *amax, lapack_int *info)
void LAPACK_zgbequb (lapack_int *m, lapack_int *n, lapack_int *kl,
lapack_int *ku, const lapack_complex_double *ab, lapack_int *ldab,
double *r, double *c, double *rowcnd, double *colcnd, double *amax,
lapack_int *info)
void LAPACK_cgbequb (lapack_int *m, lapack_int *n, lapack_int *kl,
lapack_int *ku, const lapack_complex_float *ab, lapack_int *ldab,
float *r, float *c, float *rowcnd, float *colcnd, float *amax,
lapack_int *info)
then we slide into the poequ crowd, and the way they drop kl, ku and ldab and just keep n, a, lda? growth. evolution. she shed the band baggage 💅. same s, scond, amax, info trio-plus-one at the end though — consistency is everything.
void LAPACK_spoequ (lapack_int *n, const float *a, lapack_int *lda,
float *s, float *scond, float *amax, lapack_int *info)
void LAPACK_dpoequ (lapack_int *n, const double *a, lapack_int *lda,
double *s, double *scond, double *amax, lapack_int *info)
void LAPACK_cpoequ (lapack_int *n, const lapack_complex_float *a,
lapack_int *lda, float *s, float *scond, float *amax, lapack_int
*info)
void LAPACK_zpoequ (lapack_int *n, const lapack_complex_double *a,
lapack_int *lda, double *s, double *scond, double *amax, lapack_int
*info)
void LAPACK_dpoequb (lapack_int *n, const double *a, lapack_int *lda,
double *s, double *scond, double *amax, lapack_int *info)
void LAPACK_spoequb (lapack_int *n, const float *a, lapack_int *lda,
float *s, float *scond, float *amax, lapack_int *info)
void LAPACK_zpoequb (lapack_int *n, const lapack_complex_double *a,
lapack_int *lda, double *s, double *scond, double *amax, lapack_int
*info)
void LAPACK_cpoequb (lapack_int *n, const lapack_complex_float *a,
lapack_int *lda, float *s, float *scond, float *amax, lapack_int
*info)
and then the ppequ besties enter the chat, and they brought a char *uplo with them. first argument, front of the line, main character energy 👑. packed-storage ap, no lda anywhere — she said "leading dimension? never met her."
void LAPACK_sppequ (char *uplo, lapack_int *n, const float *ap, float
*s, float *scond, float *amax, lapack_int *info)
void LAPACK_dppequ (char *uplo, lapack_int *n, const double *ap, double
*s, double *scond, double *amax, lapack_int *info)
void LAPACK_cppequ (char *uplo, lapack_int *n, const
lapack_complex_float *ap, float *s, float *scond, float *amax,
lapack_int *info)
void LAPACK_zppequ (char *uplo, lapack_int *n, const
lapack_complex_double *ap, double *s, double *scond, double *amax,
lapack_int *info)
okay and the pbequ girlies said "what if we did uplo and kd and ldab" and honestly? she ate. four of them, s/d/c/z, all wearing the exact same silhouette fr fr.
void LAPACK_spbequ (char *uplo, lapack_int *n, lapack_int *kd, const
float *ab, lapack_int *ldab, float *s, float *scond, float *amax,
lapack_int *info)
void LAPACK_dpbequ (char *uplo, lapack_int *n, lapack_int *kd, const
double *ab, lapack_int *ldab, double *s, double *scond, double
*amax, lapack_int *info)
void LAPACK_cpbequ (char *uplo, lapack_int *n, lapack_int *kd, const
lapack_complex_float *ab, lapack_int *ldab, float *s, float *scond,
float *amax, lapack_int *info)
void LAPACK_zpbequ (char *uplo, lapack_int *n, lapack_int *kd, const
lapack_complex_double *ab, lapack_int *ldab, double *s, double
*scond, double *amax, lapack_int *info)
and now the syequb / heequb squad — these ones are different because they actually want a work array 👀. they're not like the other equ routines. work is typed to match the matrix, so the complex kids get lapack_complex_double *work and lapack_complex_float *work, and the real ones get plain double *work / float *work. no shortcuts, no borrowing, everyone brings their own.
void LAPACK_dsyequb (char *uplo, lapack_int *n, const double *a,
lapack_int *lda, double *s, double *scond, double *amax, double
*work, lapack_int *info)
void LAPACK_ssyequb (char *uplo, lapack_int *n, const float *a,
lapack_int *lda, float *s, float *scond, float *amax, float *work,
lapack_int *info)
void LAPACK_zsyequb (char *uplo, lapack_int *n, const
lapack_complex_double *a, lapack_int *lda, double *s, double *scond,
double *amax, lapack_complex_double *work, lapack_int *info)
void LAPACK_csyequb (char *uplo, lapack_int *n, const
lapack_complex_float *a, lapack_int *lda, float *s, float *scond,
float *amax, lapack_complex_float *work, lapack_int *info)
void LAPACK_zheequb (char *uplo, lapack_int *n, const
lapack_complex_double *a, lapack_int *lda, double *s, double *scond,
double *amax, lapack_complex_double *work, lapack_int *info)
void LAPACK_cheequb (char *uplo, lapack_int *n, const
lapack_complex_float *a, lapack_int *lda, float *s, float *scond,
float *amax, lapack_complex_float *work, lapack_int *info)
okay new cluster, new vibe. 🔥 the gesv four. n, nrhs, a, lda, ipiv, b, ldb, info — that's the whole roster, every time, no notes. clean. efficient. iconic.
void LAPACK_sgesv (lapack_int *n, lapack_int *nrhs, float *a, lapack_int
*lda, lapack_int *ipiv, float *b, lapack_int *ldb, lapack_int *info)
void LAPACK_dgesv (lapack_int *n, lapack_int *nrhs, double *a,
lapack_int *lda, lapack_int *ipiv, double *b, lapack_int *ldb,
lapack_int *info)
void LAPACK_cgesv (lapack_int *n, lapack_int *nrhs, lapack_complex_float
*a, lapack_int *lda, lapack_int *ipiv, lapack_complex_float *b,
lapack_int *ldb, lapack_int *info)
void LAPACK_zgesv (lapack_int *n, lapack_int *nrhs,
lapack_complex_double *a, lapack_int *lda, lapack_int *ipiv,
lapack_complex_double *b, lapack_int *ldb, lapack_int *info)
and then dsgesv and zcgesv show up with so much more stuff — extra x, extra ldx, work, swork, iter 😭. dsgesv packs double *work plus float *swork, and zcgesv goes full maximalist with lapack_complex_double *work, lapack_complex_float *swork, and double *rwork. she's carrying three bags and honestly? respect.
void LAPACK_dsgesv (lapack_int *n, lapack_int *nrhs, double *a,
lapack_int *lda, lapack_int *ipiv, double *b, lapack_int *ldb,
double *x, lapack_int *ldx, double *work, float *swork, lapack_int
*iter, lapack_int *info)
void LAPACK_zcgesv (lapack_int *n, lapack_int *nrhs,
lapack_complex_double *a, lapack_int *lda, lapack_int *ipiv,
lapack_complex_double *b, lapack_int *ldb, lapack_complex_double *x,
lapack_int *ldx, lapack_complex_double *work, lapack_complex_float
*swork, double *rwork, lapack_int *iter, lapack_int *info)
next up: gesvx, aka the one that said "what if we had fact, trans, af, ldaf, equed, r, c, x, ldx, rcond, ferr, berr…" and just kept going 🫶. notice the real ones (s, d) get float *iwork / lapack_int *iwork while the complex ones (c, z) swap that out for float *rwork — so like, watch which one you're calling, bestie, the argument types are not interchangeable and the compiler will absolutely snitch on you.
void LAPACK_sgesvx (char *fact, char *trans, lapack_int *n, lapack_int
*nrhs, float *a, lapack_int *lda, float *af, lapack_int *ldaf,
lapack_int *ipiv, char *equed, float *r, float *c, float *b,
lapack_int *ldb, float *x, lapack_int *ldx, float *rcond, float
*ferr, float *berr, float *work, lapack_int *iwork, lapack_int
*info)
void LAPACK_dgesvx (char *fact, char *trans, lapack_int *n, lapack_int
*nrhs, double *a, lapack_int *lda, double *af, lapack_int *ldaf,
lapack_int *ipiv, char *equed, double *r, double *c, double *b,
lapack_int *ldb, double *x, lapack_int *ldx, double *rcond, double
*ferr, double *berr, double *work, lapack_int *iwork, lapack_int
*info)
void LAPACK_cgesvx (char *fact, char *trans, lapack_int *n, lapack_int
*nrhs, lapack_complex_float *a, lapack_int *lda,
lapack_complex_float *af, lapack_int *ldaf, lapack_int *ipiv, char
*equed, float *r, float *c, lapack_complex_float *b, lapack_int
*ldb, lapack_complex_float *x, lapack_int *ldx, float *rcond, float
*ferr, float *berr, lapack_complex_float *work, float *rwork,
lapack_int *info)
void LAPACK_zgesvx (char *fact, char *trans, lapack_int *n, lapack_int
*nrhs, lapack_complex_double *a, lapack_int *lda,
lapack_complex_double *af, lapack_int *ldaf, lapack_int *ipiv, char
*equed, double *r, double *c, lapack_complex_double *b, lapack_int
*ldb, lapack_complex_double *x, lapack_int *ldx, double *rcond,
double *ferr, double *berr, lapack_complex_double *work, double
*rwork, lapack_int *info)
and gesvxx?? she looked at gesvx and said "cute. anyway, I'm adding rpvgrw, n_err_bnds, err_bnds_norm, err_bnds_comp, nparams, and params" 💀. the argument list is long long. like scroll-for-a-while long. but every single name is there and I'm not skipping one, periodt.
void LAPACK_dgesvxx (char *fact, char *trans, lapack_int *n, lapack_int
*nrhs, double *a, lapack_int *lda, double *af, lapack_int *ldaf,
lapack_int *ipiv, char *equed, double *r, double *c, double *b,
lapack_int *ldb, double *x, lapack_int *ldx, double *rcond, double
*rpvgrw, double *berr, lapack_int *n_err_bnds, double
*err_bnds_norm, double *err_bnds_comp, lapack_int *nparams, double
*params, double *work, lapack_int *iwork, lapack_int *info)
void LAPACK_sgesvxx (char *fact, char *trans, lapack_int *n, lapack_int
*nrhs, float *a, lapack_int *lda, float *af, lapack_int *ldaf,
lapack_int *ipiv, char *equed, float *r, float *c, float *b,
lapack_int *ldb, float *x, lapack_int *ldx, float *rcond, float
*rpvgrw, float *berr, lapack_int *n_err_bnds, float *err_bnds_norm,
float *err_bnds_comp, lapack_int *nparams, float *params, float
*work, lapack_int *iwork, lapack_int *info)
void LAPACK_zgesvxx (char *fact, char *trans, lapack_int *n, lapack_int
*nrhs, lapack_complex_double *a, lapack_int *lda,
lapack_complex_double *af, lapack_int *ldaf, lapack_int *ipiv, char
*equed, double *r, double *c, lapack_complex_double *b, lapack_int
*ldb, lapack_complex_double *x, lapack_int *ldx, double *rcond,
double *rpvgrw, double *berr, lapack_int *n_err_bnds, double
*err_bnds_norm, double *err_bnds_comp, lapack_int *nparams, double
*params, lapack_complex_double *work, double *rwork, lapack_int
*info)
void LAPACK_cgesvxx (char *fact, char *trans, lapack_int *n, lapack_int
*nrhs, lapack_complex_float *a, lapack_int *lda,
lapack_complex_float *af, lapack_int *ldaf, lapack_int *ipiv, char
*equed, float *r, float *c, lapack_complex_float *b, lapack_int
*ldb, lapack_complex_float *x, lapack_int *ldx, float *rcond, float
*rpvgrw, float *berr, lapack_int *n_err_bnds, float *err_bnds_norm,
float *err_bnds_comp, lapack_int *nparams, float *params,
lapack_complex_float *work, float *rwork, lapack_int *info)
okay, band-solve time 🦋. gbsv is the chill one: n, kl, ku, nrhs, ab, ldab, ipiv, b, ldb, info. four dtypes, zero drama.
void LAPACK_sgbsv (lapack_int *n, lapack_int *kl, lapack_int *ku,
lapack_int *nrhs, float *ab, lapack_int *ldab, lapack_int *ipiv,
float *b, lapack_int *ldb, lapack_int *info)
void LAPACK_dgbsv (lapack_int *n, lapack_int *kl, lapack_int *ku,
lapack_int *nrhs, double *ab, lapack_int *ldab, lapack_int *ipiv,
double *b, lapack_int *ldb, lapack_int *info)
void LAPACK_cgbsv (lapack_int *n, lapack_int *kl, lapack_int *ku,
lapack_int *nrhs, lapack_complex_float *ab, lapack_int *ldab,
lapack_int *ipiv, lapack_complex_float *b, lapack_int *ldb,
lapack_int *info)
void LAPACK_zgbsv (lapack_int *n, lapack_int *kl, lapack_int *ku,
lapack_int *nrhs, lapack_complex_double *ab, lapack_int *ldab,
lapack_int *ipiv, lapack_complex_double *b, lapack_int *ldb,
lapack_int *info)
and gbsvx is the x-trailered glow-up — fact, trans, afb, ldafb, equed, r, c, x, ldx, rcond, ferr, berr, work… she is thorough. also heads up: we get cut off mid-signature at the very bottom of this part, so don't panic when it just… stops 😭. cliffhanger behaviour, iykyk.
void LAPACK_sgbsvx (char *fact, char *trans, lapack_int *n, lapack_int
*kl, lapack_int *ku, lapack_int *nrhs, float *ab, lapack_int *ldab,
float *afb, lapack_int *ldafb, lapack_int *ipiv, char *equed, float
*r, float *c, float *b, lapack_int *ldb, float *x, lapack_int *ldx,
float *rcond, float *ferr, float *berr, float *work, lapack_int
okay that's genuinely where it ends — lapack_int and vibes. to be continued, bestie 🌸
...aaand we're back in the function-signature hall of fame ✨ — still in the SYNOPSIS era, just vibing through every LAPACK prototype one by one. The line below is the tail end of the previous prototype (LAPACK_sgbsvx, which started last time), so don't panic, it's not a new function 💖
*iwork, lapack_int *info)
🎀 the gbsvx girlies (general band, expert drivers, solve + equilibrate + error bounds)
LAPACK_dgbsvx— double precision, the whole "factor, equilibrate, solve, and hand youferr/berr" package 👑LAPACK_cgbsvx— complex single, same energy but now withfloat *rworktagging along 🦋LAPACK_zgbsvx— complex double, the big one,double *rwork, no cap 💅
void LAPACK_dgbsvx (char *fact, char *trans, lapack_int *n, lapack_int
*kl, lapack_int *ku, lapack_int *nrhs, double *ab, lapack_int *ldab,
double *afb, lapack_int *ldafb, lapack_int *ipiv, char *equed,
double *r, double *c, double *b, lapack_int *ldb, double *x,
lapack_int *ldx, double *rcond, double *ferr, double *berr, double
*work, lapack_int *iwork, lapack_int *info)
void LAPACK_cgbsvx (char *fact, char *trans, lapack_int *n, lapack_int
*kl, lapack_int *ku, lapack_int *nrhs, lapack_complex_float *ab,
lapack_int *ldab, lapack_complex_float *afb, lapack_int *ldafb,
lapack_int *ipiv, char *equed, float *r, float *c,
lapack_complex_float *b, lapack_int *ldb, lapack_complex_float *x,
lapack_int *ldx, float *rcond, float *ferr, float *berr,
lapack_complex_float *work, float *rwork, lapack_int *info)
void LAPACK_zgbsvx (char *fact, char *trans, lapack_int *n, lapack_int
*kl, lapack_int *ku, lapack_int *nrhs, lapack_complex_double *ab,
lapack_int *ldab, lapack_complex_double *afb, lapack_int *ldafb,
lapack_int *ipiv, char *equed, double *r, double *c,
lapack_complex_double *b, lapack_int *ldb, lapack_complex_double *x,
lapack_int *ldx, double *rcond, double *ferr, double *berr,
lapack_complex_double *work, double *rwork, lapack_int *info)
🌈 the gbsvxx squad (yes, the extra x is real and it's iconic)
Ok so these are the even more extra ones — rpvgrw, n_err_bnds, err_bnds_norm, err_bnds_comp, nparams, params… it's giving "I brought receipts" 😭 Note the order they appear in the page: d, s, z, c — and yes I'm keeping it exactly that way 🫶
void LAPACK_dgbsvxx (char *fact, char *trans, lapack_int *n, lapack_int
*kl, lapack_int *ku, lapack_int *nrhs, double *ab, lapack_int *ldab,
double *afb, lapack_int *ldafb, lapack_int *ipiv, char *equed,
double *r, double *c, double *b, lapack_int *ldb, double *x,
lapack_int *ldx, double *rcond, double *rpvgrw, double *berr,
lapack_int *n_err_bnds, double *err_bnds_norm, double
*err_bnds_comp, lapack_int *nparams, double *params, double *work,
lapack_int *iwork, lapack_int *info)
void LAPACK_sgbsvxx (char *fact, char *trans, lapack_int *n, lapack_int
*kl, lapack_int *ku, lapack_int *nrhs, float *ab, lapack_int *ldab,
float *afb, lapack_int *ldafb, lapack_int *ipiv, char *equed, float
*r, float *c, float *b, lapack_int *ldb, float *x, lapack_int *ldx,
float *rcond, float *rpvgrw, float *berr, lapack_int *n_err_bnds,
float *err_bnds_norm, float *err_bnds_comp, lapack_int *nparams,
float *params, float *work, lapack_int *iwork, lapack_int *info)
void LAPACK_zgbsvxx (char *fact, char *trans, lapack_int *n, lapack_int
*kl, lapack_int *ku, lapack_int *nrhs, lapack_complex_double *ab,
lapack_int *ldab, lapack_complex_double *afb, lapack_int *ldafb,
lapack_int *ipiv, char *equed, double *r, double *c,
lapack_complex_double *b, lapack_int *ldb, lapack_complex_double *x,
lapack_int *ldx, double *rcond, double *rpvgrw, double *berr,
lapack_int *n_err_bnds, double *err_bnds_norm, double
*err_bnds_comp, lapack_int *nparams, double *params,
lapack_complex_double *work, double *rwork, lapack_int *info)
void LAPACK_cgbsvxx (char *fact, char *trans, lapack_int *n, lapack_int
*kl, lapack_int *ku, lapack_int *nrhs, lapack_complex_float *ab,
lapack_int *ldab, lapack_complex_float *afb, lapack_int *ldafb,
lapack_int *ipiv, char *equed, float *r, float *c,
lapack_complex_float *b, lapack_int *ldb, lapack_complex_float *x,
lapack_int *ldx, float *rcond, float *rpvgrw, float *berr,
lapack_int *n_err_bnds, float *err_bnds_norm, float *err_bnds_comp,
lapack_int *nparams, float *params, lapack_complex_float *work,
float *rwork, lapack_int *info)
🦋 gtsv — tridiagonal cuties (dl, d, du bestie, that's the whole vibe)
LAPACK_sgtsv— single precision, four pointers of pure simplicity ✨LAPACK_dgtsv— double, same but withdouble *LAPACK_cgtsv— complex single 🍓LAPACK_zgtsv— complex double, main character energy 👑
void LAPACK_sgtsv (lapack_int *n, lapack_int *nrhs, float *dl, float *d,
float *du, float *b, lapack_int *ldb, lapack_int *info)
void LAPACK_dgtsv (lapack_int *n, lapack_int *nrhs, double *dl, double
*d, double *du, double *b, lapack_int *ldb, lapack_int *info)
void LAPACK_cgtsv (lapack_int *n, lapack_int *nrhs, lapack_complex_float
*dl, lapack_complex_float *d, lapack_complex_float *du,
lapack_complex_float *b, lapack_int *ldb, lapack_int *info)
void LAPACK_zgtsv (lapack_int *n, lapack_int *nrhs,
lapack_complex_double *dl, lapack_complex_double *d,
lapack_complex_double *du, lapack_complex_double *b, lapack_int
*ldb, lapack_int *info)
💜 gtsvx — the expert tridiagonal ones (const-correct, lowkey slay)
Notice const on dl, d, du and b — they're not getting touched, respect 💅 And you get dlf, df, duf, du2, ipiv, plus rcond, ferr, berr for the girls who need the full report card 📋
void LAPACK_sgtsvx (char *fact, char *trans, lapack_int *n, lapack_int
*nrhs, const float *dl, const float *d, const float *du, float *dlf,
float *df, float *duf, float *du2, lapack_int *ipiv, const float *b,
lapack_int *ldb, float *x, lapack_int *ldx, float *rcond, float
*ferr, float *berr, float *work, lapack_int *iwork, lapack_int
*info)
void LAPACK_dgtsvx (char *fact, char *trans, lapack_int *n, lapack_int
*nrhs, const double *dl, const double *d, const double *du, double
*dlf, double *df, double *duf, double *du2, lapack_int *ipiv, const
double *b, lapack_int *ldb, double *x, lapack_int *ldx, double
*rcond, double *ferr, double *berr, double *work, lapack_int *iwork,
lapack_int *info)
void LAPACK_cgtsvx (char *fact, char *trans, lapack_int *n, lapack_int
*nrhs, const lapack_complex_float *dl, const lapack_complex_float
*d, const lapack_complex_float *du, lapack_complex_float *dlf,
lapack_complex_float *df, lapack_complex_float *duf,
lapack_complex_float *du2, lapack_int *ipiv, const
lapack_complex_float *b, lapack_int *ldb, lapack_complex_float *x,
lapack_int *ldx, float *rcond, float *ferr, float *berr,
lapack_complex_float *work, float *rwork, lapack_int *info)
void LAPACK_zgtsvx (char *fact, char *trans, lapack_int *n, lapack_int
*nrhs, const lapack_complex_double *dl, const lapack_complex_double
*d, const lapack_complex_double *du, lapack_complex_double *dlf,
lapack_complex_double *df, lapack_complex_double *duf,
lapack_complex_double *du2, lapack_int *ipiv, const
lapack_complex_double *b, lapack_int *ldb, lapack_complex_double *x,
lapack_int *ldx, double *rcond, double *ferr, double *berr,
lapack_complex_double *work, double *rwork, lapack_int *info)
🌸 posv — positive definite, uplo bestie, just solve it
The bare-minimum baddies. uplo tells them which triangle of a is the moment, then a comes back factored and b comes back as the solution ✨ (that's what the plain posv family does — no equed, no x, no extras, just vibes and info).
void LAPACK_sposv (char *uplo, lapack_int *n, lapack_int *nrhs, float
*a, lapack_int *lda, float *b, lapack_int *ldb, lapack_int *info)
void LAPACK_dposv (char *uplo, lapack_int *n, lapack_int *nrhs, double
*a, lapack_int *lda, double *b, lapack_int *ldb, lapack_int *info)
void LAPACK_cposv (char *uplo, lapack_int *n, lapack_int *nrhs,
lapack_complex_float *a, lapack_int *lda, lapack_complex_float *b,
lapack_int *ldb, lapack_int *info)
void LAPACK_zposv (char *uplo, lapack_int *n, lapack_int *nrhs,
lapack_complex_double *a, lapack_int *lda, lapack_complex_double *b,
lapack_int *ldb, lapack_int *info)
🧚 the mixed-precision girlies: dsposv & zcposv
Ok these two are not like the others — no c``s or z sibling pattern here, it's d and z only ⭐ They've got a work + swork combo and an iter output, so literally giving iterative-refinement main character energy 💫 (dsposv = double with float *swork; zcposv = lapack_complex_double with lapack_complex_float *swork and double *rwork).
void LAPACK_dsposv (char *uplo, lapack_int *n, lapack_int *nrhs, double
*a, lapack_int *lda, double *b, lapack_int *ldb, double *x,
lapack_int *ldx, double *work, float *swork, lapack_int *iter,
lapack_int *info)
void LAPACK_zcposv (char *uplo, lapack_int *n, lapack_int *nrhs,
lapack_complex_double *a, lapack_int *lda, lapack_complex_double *b,
lapack_int *ldb, lapack_complex_double *x, lapack_int *ldx,
lapack_complex_double *work, lapack_complex_float *swork, double
*rwork, lapack_int *iter, lapack_int *info)
🎀 posvx — now with fact, equed, s, and the whole diagnostic kit
fact, uplo, then a/af, equed, s, b→x, rcond, ferr, berr, work, iwork, info. The complex ones swap iwork for rwork — ikyk 💅
void LAPACK_sposvx (char *fact, char *uplo, lapack_int *n, lapack_int
*nrhs, float *a, lapack_int *lda, float *af, lapack_int *ldaf, char
*equed, float *s, float *b, lapack_int *ldb, float *x, lapack_int
*ldx, float *rcond, float *ferr, float *berr, float *work,
lapack_int *iwork, lapack_int *info)
void LAPACK_dposvx (char *fact, char *uplo, lapack_int *n, lapack_int
*nrhs, double *a, lapack_int *lda, double *af, lapack_int *ldaf,
char *equed, double *s, double *b, lapack_int *ldb, double *x,
lapack_int *ldx, double *rcond, double *ferr, double *berr, double
*work, lapack_int *iwork, lapack_int *info)
void LAPACK_cposvx (char *fact, char *uplo, lapack_int *n, lapack_int
*nrhs, lapack_complex_float *a, lapack_int *lda,
lapack_complex_float *af, lapack_int *ldaf, char *equed, float *s,
lapack_complex_float *b, lapack_int *ldb, lapack_complex_float *x,
lapack_int *ldx, float *rcond, float *ferr, float *berr,
lapack_complex_float *work, float *rwork, lapack_int *info)
void LAPACK_zposvx (char *fact, char *uplo, lapack_int *n, lapack_int
*nrhs, lapack_complex_double *a, lapack_int *lda,
lapack_complex_double *af, lapack_int *ldaf, char *equed, double *s,
lapack_complex_double *b, lapack_int *ldb, lapack_complex_double *x,
lapack_int *ldx, double *rcond, double *ferr, double *berr,
lapack_complex_double *work, double *rwork, lapack_int *info)
🔥 posvxx — the maximalist edition
Same as above but with rpvgrw, n_err_bnds, err_bnds_norm, err_bnds_comp, nparams, params 😭 It's giving "I have notes, and the notes have notes". Again: the page lists them d, s, z, c — not alphabetical, and we're not fixing it, bestie 🫶
void LAPACK_dposvxx (char *fact, char *uplo, lapack_int *n, lapack_int
*nrhs, double *a, lapack_int *lda, double *af, lapack_int *ldaf,
char *equed, double *s, double *b, lapack_int *ldb, double *x,
lapack_int *ldx, double *rcond, double *rpvgrw, double *berr,
lapack_int *n_err_bnds, double *err_bnds_norm, double
*err_bnds_comp, lapack_int *nparams, double *params, double *work,
lapack_int *iwork, lapack_int *info)
void LAPACK_sposvxx (char *fact, char *uplo, lapack_int *n, lapack_int
*nrhs, float *a, lapack_int *lda, float *af, lapack_int *ldaf, char
*equed, float *s, float *b, lapack_int *ldb, float *x, lapack_int
*ldx, float *rcond, float *rpvgrw, float *berr, lapack_int
*n_err_bnds, float *err_bnds_norm, float *err_bnds_comp, lapack_int
*nparams, float *params, float *work, lapack_int *iwork, lapack_int
*info)
void LAPACK_zposvxx (char *fact, char *uplo, lapack_int *n, lapack_int
*nrhs, lapack_complex_double *a, lapack_int *lda,
lapack_complex_double *af, lapack_int *ldaf, char *equed, double *s,
lapack_complex_double *b, lapack_int *ldb, lapack_complex_double *x,
lapack_int *ldx, double *rcond, double *rpvgrw, double *berr,
lapack_int *n_err_bnds, double *err_bnds_norm, double
*err_bnds_comp, lapack_int *nparams, double *params,
lapack_complex_double *work, double *rwork, lapack_int *info)
void LAPACK_cposvxx (char *fact, char *uplo, lapack_int *n, lapack_int
*nrhs, lapack_complex_float *a, lapack_int *lda,
lapack_complex_float *af, lapack_int *ldaf, char *equed, float *s,
lapack_complex_float *b, lapack_int *ldb, lapack_complex_float *x,
lapack_int *ldx, float *rcond, float *rpvgrw, float *berr,
lapack_int *n_err_bnds, float *err_bnds_norm, float *err_bnds_comp,
lapack_int *nparams, float *params, lapack_complex_float *work,
float *rwork, lapack_int *info)
🍓 ppsv — packed storage, no lda in sight (she's low-maintenance)
Notice how posv had lda but ppsv just has ap? That's packed storage bestie, the whole triangle squished into one array, no leading dimension needed 💖 The page lists s, d, c… and the c one gets cut off mid-line, so keep reading next part for the rest 🌈
void LAPACK_sppsv (char *uplo, lapack_int *n, lapack_int *nrhs, float
*ap, float *b, lapack_int *ldb, lapack_int *info)
void LAPACK_dppsv (char *uplo, lapack_int *n, lapack_int *nrhs, double
*ap, double *b, lapack_int *ldb, lapack_int *info)
void LAPACK_cppsv (char *uplo, lapack_int *n, lapack_int *nrhs,
bestie that last one is not a typo, the page literally ends there mid-signature — the lapack_complex_float *ap, lapack_complex_float *b, lapack_int *ldb, lapack_int *info) of it all is coming up in the next chunk 💀 hang tight 🫶
okay so we literally walked in on a function mid-sentence 😭 the first chunk here is the tail end of a prototype that started before this page, so if it looks like it begins mid-argument-list… that's because it does. iconic behaviour honestly:
lapack_complex_float *ap, lapack_complex_float *b, lapack_int *ldb,
lapack_int *info)
void LAPACK_zppsv (char *uplo, lapack_int *n, lapack_int *nrhs,
lapack_complex_double *ap, lapack_complex_double *b, lapack_int
*ldb, lapack_int *info)
void LAPACK_sppsvx (char *fact, char *uplo, lapack_int *n, lapack_int
*nrhs, float *ap, float *afp, char *equed, float *s, float *b,
lapack_int *ldb, float *x, lapack_int *ldx, float *rcond, float
*ferr, float *berr, float *work, lapack_int *iwork, lapack_int
*info)
void LAPACK_dppsvx (char *fact, char *uplo, lapack_int *n, lapack_int
*nrhs, double *ap, double *afp, char *equed, double *s, double *b,
lapack_int *ldb, double *x, lapack_int *ldx, double *rcond, double
*ferr, double *berr, double *work, lapack_int *iwork, lapack_int
*info)
void LAPACK_cppsvx (char *fact, char *uplo, lapack_int *n, lapack_int
*nrhs, lapack_complex_float *ap, lapack_complex_float *afp, char
*equed, float *s, lapack_complex_float *b, lapack_int *ldb,
lapack_complex_float *x, lapack_int *ldx, float *rcond, float *ferr,
float *berr, lapack_complex_float *work, float *rwork, lapack_int
*info)
void LAPACK_zppsvx (char *fact, char *uplo, lapack_int *n, lapack_int
*nrhs, lapack_complex_double *ap, lapack_complex_double *afp, char
*equed, double *s, lapack_complex_double *b, lapack_int *ldb,
lapack_complex_double *x, lapack_int *ldx, double *rcond, double
*ferr, double *berr, lapack_complex_double *work, double *rwork,
lapack_int *info)
okay bestie let me give you the cheat code for the whole naming thing because it's giving pattern, and once you see it you can't unsee it 👀 — the leading letter tells you the type: s is float, d is double, c is lapack_complex_float, and z is lapack_complex_double. so sppsv and dppsv and cppsv and zppsv are the same function in four flavours. slay. 💅
also not me noticing that the ones ending in x are dramatically longer — sppsvx/dppsvx/cppsvx/zppsvx show up with *fact, *equed, *rcond, *ferr, *berr and a whole *work situation. the c and z versions also get *rwork because ✨complex numbers need their own support system✨.
notice*afp,*s,*x,*ferr,*berr,*workand*iworkare all pointers too — literally everything here is a pointer. the manpage does not do local variables. it does not do return values. it does*infoand it leaves.
next up, the pbsv / pbsvx crew 🦋 they brought *kd, *ab, *ldab and (for the x girlies) *afb and *ldafb along with them:
void LAPACK_spbsv (char *uplo, lapack_int *n, lapack_int *kd, lapack_int
*nrhs, float *ab, lapack_int *ldab, float *b, lapack_int *ldb,
lapack_int *info)
void LAPACK_dpbsv (char *uplo, lapack_int *n, lapack_int *kd, lapack_int
*nrhs, double *ab, lapack_int *ldab, double *b, lapack_int *ldb,
lapack_int *info)
void LAPACK_cpbsv (char *uplo, lapack_int *n, lapack_int *kd, lapack_int
*nrhs, lapack_complex_float *ab, lapack_int *ldab,
lapack_complex_float *b, lapack_int *ldb, lapack_int *info)
void LAPACK_zpbsv (char *uplo, lapack_int *n, lapack_int *kd, lapack_int
*nrhs, lapack_complex_double *ab, lapack_int *ldab,
lapack_complex_double *b, lapack_int *ldb, lapack_int *info)
void LAPACK_spbsvx (char *fact, char *uplo, lapack_int *n, lapack_int
*kd, lapack_int *nrhs, float *ab, lapack_int *ldab, float *afb,
lapack_int *ldafb, char *equed, float *s, float *b, lapack_int *ldb,
float *x, lapack_int *ldx, float *rcond, float *ferr, float *berr,
float *work, lapack_int *iwork, lapack_int *info)
void LAPACK_dpbsvx (char *fact, char *uplo, lapack_int *n, lapack_int
*kd, lapack_int *nrhs, double *ab, lapack_int *ldab, double *afb,
lapack_int *ldafb, char *equed, double *s, double *b, lapack_int
*ldb, double *x, lapack_int *ldx, double *rcond, double *ferr,
double *berr, double *work, lapack_int *iwork, lapack_int *info)
void LAPACK_cpbsvx (char *fact, char *uplo, lapack_int *n, lapack_int
*kd, lapack_int *nrhs, lapack_complex_float *ab, lapack_int *ldab,
lapack_complex_float *afb, lapack_int *ldafb, char *equed, float *s,
lapack_complex_float *b, lapack_int *ldb, lapack_complex_float *x,
lapack_int *ldx, float *rcond, float *ferr, float *berr,
lapack_complex_float *work, float *rwork, lapack_int *info)
void LAPACK_zpbsvx (char *fact, char *uplo, lapack_int *n, lapack_int
*kd, lapack_int *nrhs, lapack_complex_double *ab, lapack_int *ldab,
lapack_complex_double *afb, lapack_int *ldafb, char *equed, double
*s, lapack_complex_double *b, lapack_int *ldb, lapack_complex_double
*x, lapack_int *ldx, double *rcond, double *ferr, double *berr,
lapack_complex_double *work, double *rwork, lapack_int *info)
the way spbsv/dpbsv/cpbsv/zpbsv have this cute little 4-argument prefix — *uplo, *n, *kd, *nrhs — and then the x versions just keep adding stuff 😭 *afb, *ldafb, *equed, *s, iwork/rwork... it's giving "and my best friend and my other best friend". highkey the x variants are the extroverts of the family 🫶
also can we talk about how *uplo, *fact and *equed are char * while everything else is numeric? three single characters carrying the entire vibe check of the call. character development, literally 💀
then the tridiagonal-ish crew shows up with the tiniest argument lists we've seen all page and I'm obsessed 🎀 d and e instead of a and ab, no uplo, no lda — just vibes:
void LAPACK_sptsv (lapack_int *n, lapack_int *nrhs, float *d, float *e,
float *b, lapack_int *ldb, lapack_int *info)
void LAPACK_dptsv (lapack_int *n, lapack_int *nrhs, double *d, double
*e, double *b, lapack_int *ldb, lapack_int *info)
void LAPACK_cptsv (lapack_int *n, lapack_int *nrhs, float *d,
lapack_complex_float *e, lapack_complex_float *b, lapack_int *ldb,
lapack_int *info)
void LAPACK_zptsv (lapack_int *n, lapack_int *nrhs, double *d,
lapack_complex_double *e, lapack_complex_double *b, lapack_int *ldb,
lapack_int *info)
void LAPACK_sptsvx (char *fact, lapack_int *n, lapack_int *nrhs, const
float *d, const float *e, float *df, float *ef, const float *b,
lapack_int *ldb, float *x, lapack_int *ldx, float *rcond, float
*ferr, float *berr, float *work, lapack_int *info)
void LAPACK_dptsvx (char *fact, lapack_int *n, lapack_int *nrhs, const
double *d, const double *e, double *df, double *ef, const double *b,
lapack_int *ldb, double *x, lapack_int *ldx, double *rcond, double
*ferr, double *berr, double *work, lapack_int *info)
void LAPACK_cptsvx (char *fact, lapack_int *n, lapack_int *nrhs, const
float *d, const lapack_complex_float *e, float *df,
lapack_complex_float *ef, const lapack_complex_float *b, lapack_int
*ldb, lapack_complex_float *x, lapack_int *ldx, float *rcond, float
*ferr, float *berr, lapack_complex_float *work, float *rwork,
lapack_int *info)
void LAPACK_zptsvx (char *fact, lapack_int *n, lapack_int *nrhs, const
double *d, const lapack_complex_double *e, double *df,
lapack_complex_double *ef, const lapack_complex_double *b,
lapack_int *ldb, lapack_complex_double *x, lapack_int *ldx, double
*rcond, double *ferr, double *berr, lapack_complex_double *work,
double *rwork, lapack_int *info)
⚠️ bestie, eyes on the const keyword in the ptsvx ones — const float *d, const double *e, const lapack_complex_float *b — those inputs are not to be touched, okay? read-only. hands off. respectful. ✋ *df, *ef and *x are the writable besties.
and notice cptsv/zptsv have a float *d / double *d (real!) but lapack_complex_float *e / lapack_complex_double *e (complex!) — mixed types, no notes, she contains multitudes 🌸
okay now the SYMMETRIC girlies have entered the chat 🔥 sysv and sysvx, all four flavours, with *ipiv, *lda, *lwork and (for c and z) that extra *rwork:
void LAPACK_ssysv (char *uplo, lapack_int *n, lapack_int *nrhs, float
*a, lapack_int *lda, lapack_int *ipiv, float *b, lapack_int *ldb,
float *work, lapack_int *lwork, lapack_int *info)
void LAPACK_dsysv (char *uplo, lapack_int *n, lapack_int *nrhs, double
*a, lapack_int *lda, lapack_int *ipiv, double *b, lapack_int *ldb,
double *work, lapack_int *lwork, lapack_int *info)
void LAPACK_csysv (char *uplo, lapack_int *n, lapack_int *nrhs,
lapack_complex_float *a, lapack_int *lda, lapack_int *ipiv,
lapack_complex_float *b, lapack_int *ldb, lapack_complex_float
*work, lapack_int *lwork, lapack_int *info)
void LAPACK_zsysv (char *uplo, lapack_int *n, lapack_int *nrhs,
lapack_complex_double *a, lapack_int *lda, lapack_int *ipiv,
lapack_complex_double *b, lapack_int *ldb, lapack_complex_double
*work, lapack_int *lwork, lapack_int *info)
void LAPACK_ssysvx (char *fact, char *uplo, lapack_int *n, lapack_int
*nrhs, const float *a, lapack_int *lda, float *af, lapack_int *ldaf,
lapack_int *ipiv, const float *b, lapack_int *ldb, float *x,
lapack_int *ldx, float *rcond, float *ferr, float *berr, float
*work, lapack_int *lwork, lapack_int *iwork, lapack_int *info)
void LAPACK_dsysvx (char *fact, char *uplo, lapack_int *n, lapack_int
*nrhs, const double *a, lapack_int *lda, double *af, lapack_int
*ldaf, lapack_int *ipiv, const double *b, lapack_int *ldb, double
*x, lapack_int *ldx, double *rcond, double *ferr, double *berr,
double *work, lapack_int *lwork, lapack_int *iwork, lapack_int
*info)
void LAPACK_csysvx (char *fact, char *uplo, lapack_int *n, lapack_int
*nrhs, const lapack_complex_float *a, lapack_int *lda,
lapack_complex_float *af, lapack_int *ldaf, lapack_int *ipiv, const
lapack_complex_float *b, lapack_int *ldb, lapack_complex_float *x,
lapack_int *ldx, float *rcond, float *ferr, float *berr,
lapack_complex_float *work, lapack_int *lwork, float *rwork,
lapack_int *info)
void LAPACK_zsysvx (char *fact, char *uplo, lapack_int *n, lapack_int
*nrhs, const lapack_complex_double *a, lapack_int *lda,
lapack_complex_double *af, lapack_int *ldaf, lapack_int *ipiv, const
lapack_complex_double *b, lapack_int *ldb, lapack_complex_double *x,
lapack_int *ldx, double *rcond, double *ferr, double *berr,
lapack_complex_double *work, lapack_int *lwork, double *rwork,
lapack_int *info)
the way ssysv/dsysv/csysv/zsysv take *a, *lda, *ipiv, *b, *ldb, *work, *lwork, *info — that's a whole little ecosystem, and they do it with no *fact, no *equed, no nothing. minimalism 💅 meanwhile ssysvx/dsysvx/csysvx/zsysvx walk in with const on *a and *b, plus *af, *ldaf, *x, *ldx, *rcond, *ferr, *berr, *iwork and — for c/z — *rwork. that's not a function call that's a situation 😭
small detail i'm obsessed with: *rcond, *ferr, *berr stay float/double even in csysvx/zsysvx where everything else is complex. real numbers reporting on complex drama. main character energy honestly ✨
and then there's sysvxx which is the final boss 🏆 — double-x means business. *rpvgrw, *n_err_bnds, *err_bnds_norm, *err_bnds_comp, *nparams, *params... she has opinions and she has error bounds:
void LAPACK_dsysvxx (char *fact, char *uplo, lapack_int *n, lapack_int
*nrhs, double *a, lapack_int *lda, double *af, lapack_int *ldaf,
lapack_int *ipiv, char *equed, double *s, double *b, lapack_int
*ldb, double *x, lapack_int *ldx, double *rcond, double *rpvgrw,
double *berr, lapack_int *n_err_bnds, double *err_bnds_norm, double
*err_bnds_comp, lapack_int *nparams, double *params, double *work,
lapack_int *iwork, lapack_int *info)
void LAPACK_ssysvxx (char *fact, char *uplo, lapack_int *n, lapack_int
*nrhs, float *a, lapack_int *lda, float *af, lapack_int *ldaf,
lapack_int *ipiv, char *equed, float *s, float *b, lapack_int *ldb,
float *x, lapack_int *ldx, float *rcond, float *rpvgrw, float *berr,
lapack_int *n_err_bnds, float *err_bnds_norm, float *err_bnds_comp,
lapack_int *nparams, float *params, float *work, lapack_int *iwork,
lapack_int *info)
void LAPACK_zsysvxx (char *fact, char *uplo, lapack_int *n, lapack_int
*nrhs, lapack_complex_double *a, lapack_int *lda,
lapack_complex_double *af, lapack_int *ldaf, lapack_int *ipiv, char
*equed, double *s, lapack_complex_double *b, lapack_int *ldb,
lapack_complex_double *x, lapack_int *ldx, double *rcond, double
*rpvgrw, double *berr, lapack_int *n_err_bnds, double
*err_bnds_norm, double *err_bnds_comp, lapack_int *nparams, double
*params, lapack_complex_double *work, double *rwork, lapack_int
*info)
void LAPACK_csysvxx (char *fact, char *uplo, lapack_int *n, lapack_int
*nrhs, lapack_complex_float *a, lapack_int *lda,
lapack_complex_float *af, lapack_int *ldaf, lapack_int *ipiv, char
*equed, float *s, lapack_complex_float *b, lapack_int *ldb,
lapack_complex_float *x, lapack_int *ldx, float *rcond, float
*rpvgrw, float *berr, lapack_int *n_err_bnds, float *err_bnds_norm,
float *err_bnds_comp, lapack_int *nparams, float *params,
lapack_complex_float *work, float *rwork, lapack_int *info)
lowkey note the order here is d, then s, then z, then c — not the usual s/d/c/z lineup 😳 do not assume alphabetical, bestie, always read the actual line. 🙈
and finally we slide into the Hermitian corner of the party 🦋 hesv and the start of hesvx — note these are c and z only, because that's just how she is:
void LAPACK_chesv (char *uplo, lapack_int *n, lapack_int *nrhs,
lapack_complex_float *a, lapack_int *lda, lapack_int *ipiv,
lapack_complex_float *b, lapack_int *ldb, lapack_complex_float
*work, lapack_int *lwork, lapack_int *info)
void LAPACK_zhesv (char *uplo, lapack_int *n, lapack_int *nrhs,
lapack_complex_double *a, lapack_int *lda, lapack_int *ipiv,
lapack_complex_double *b, lapack_int *ldb, lapack_complex_double
*work, lapack_int *lwork, lapack_int *info)
void LAPACK_chesvx (char *fact, char *uplo, lapack_int *n, lapack_int
*nrhs, const lapack_complex_float *a, lapack_int *lda,
lapack_complex_float *af, lapack_int *ldaf, lapack_int *ipiv, const
lapack_complex_float *b, lapack_int *ldb, lapack_complex_float *x,
and yes — that last one cuts off right there, mid-prototype, mid-argument, mid-thought 😭 genuinely the cliffhanger of the century. chesvx is out here with const lapack_complex_float *b, lapack_int *ldb, lapack_complex_float *x and then… we're out of page. stay tuned, the rest of her shows up in the next chunk 🎀🔪
quick recap of the rules of this house, since we just did a lot: every one of these isvoid(nobody returns anything, they all communicate through*info), everything is a pointer, and thefact/uplo/equedtriple are the onlychar *in the building. iykyk 💜
okay so we're still deep in the prototype wall and honestly? this is the part where the page just vibes as one giant roll call. every line is a void function, every line ends in lapack_int *info, and every line is out here living its best life. bestie, these are the signatures — scroll slow, don't skip, they're all here 💅
🫶 the hesvx / hesvxx girlies
starting with the full-fat expert drivers. noticed how the complex ones carry an extra rwork at the end? yeah, that's just their thing. iconic.
void LAPACK_zhesvx (char *fact, char *uplo, lapack_int *n, lapack_int
*nrhs, const lapack_complex_double *a, lapack_int *lda,
lapack_complex_double *af, lapack_int *ldaf, lapack_int *ipiv, const
lapack_complex_double *b, lapack_int *ldb, lapack_complex_double *x,
lapack_int *ldx, double *rcond, double *ferr, double *berr,
lapack_complex_double *work, lapack_int *lwork, double *rwork,
lapack_int *info)
void LAPACK_zhesvxx (char *fact, char *uplo, lapack_int *n, lapack_int
*nrhs, lapack_complex_double *a, lapack_int *lda,
lapack_complex_double *af, lapack_int *ldaf, lapack_int *ipiv, char
*equed, double *s, lapack_complex_double *b, lapack_int *ldb,
lapack_complex_double *x, lapack_int *ldx, double *rcond, double
*rpvgrw, double *berr, lapack_int *n_err_bnds, double
*err_bnds_norm, double *err_bnds_comp, lapack_int *nparams, double
*params, lapack_complex_double *work, double *rwork, lapack_int
*info)
void LAPACK_chesvxx (char *fact, char *uplo, lapack_int *n, lapack_int
*nrhs, lapack_complex_float *a, lapack_int *lda,
lapack_complex_float *af, lapack_int *ldaf, lapack_int *ipiv, char
*equed, float *s, lapack_complex_float *b, lapack_int *ldb,
lapack_complex_float *x, lapack_int *ldx, float *rcond, float
*rpvgrw, float *berr, lapack_int *n_err_bnds, float *err_bnds_norm,
float *err_bnds_comp, lapack_int *nparams, float *params,
lapack_complex_float *work, float *rwork, lapack_int *info)
like, look at LAPACK_zhesvxx and LAPACK_chesvxx side by side — same fit, one's serving double energy and the other's on float duty. periodt, consistency is the moment ✨
🎀 packed symmetric gang: spsv + spsvx
*sp* = packed storage, and yes all four precisions showed up to the party. s = float, d = double, c = lapack_complex_float, z = lapack_complex_double. no cap, the alphabet is doing a lot of heavy lifting on this page 💀
void LAPACK_sspsv (char *uplo, lapack_int *n, lapack_int *nrhs, float
*ap, lapack_int *ipiv, float *b, lapack_int *ldb, lapack_int *info)
void LAPACK_dspsv (char *uplo, lapack_int *n, lapack_int *nrhs, double
*ap, lapack_int *ipiv, double *b, lapack_int *ldb, lapack_int *info)
void LAPACK_cspsv (char *uplo, lapack_int *n, lapack_int *nrhs,
lapack_complex_float *ap, lapack_int *ipiv, lapack_complex_float *b,
lapack_int *ldb, lapack_int *info)
void LAPACK_zspsv (char *uplo, lapack_int *n, lapack_int *nrhs,
lapack_complex_double *ap, lapack_int *ipiv, lapack_complex_double
*b, lapack_int *ldb, lapack_int *info)
void LAPACK_sspsvx (char *fact, char *uplo, lapack_int *n, lapack_int
*nrhs, const float *ap, float *afp, lapack_int *ipiv, const float
*b, lapack_int *ldb, float *x, lapack_int *ldx, float *rcond, float
*ferr, float *berr, float *work, lapack_int *iwork, lapack_int
*info)
void LAPACK_dspsvx (char *fact, char *uplo, lapack_int *n, lapack_int
*nrhs, const double *ap, double *afp, lapack_int *ipiv, const double
*b, lapack_int *ldb, double *x, lapack_int *ldx, double *rcond,
double *ferr, double *berr, double *work, lapack_int *iwork,
lapack_int *info)
void LAPACK_cspsvx (char *fact, char *uplo, lapack_int *n, lapack_int
*nrhs, const lapack_complex_float *ap, lapack_complex_float *afp,
lapack_int *ipiv, const lapack_complex_float *b, lapack_int *ldb,
lapack_complex_float *x, lapack_int *ldx, float *rcond, float *ferr,
float *berr, lapack_complex_float *work, float *rwork, lapack_int
*info)
void LAPACK_zspsvx (char *fact, char *uplo, lapack_int *n, lapack_int
*nrhs, const lapack_complex_double *ap, lapack_complex_double *afp,
lapack_int *ipiv, const lapack_complex_double *b, lapack_int *ldb,
lapack_complex_double *x, lapack_int *ldx, double *rcond, double
*ferr, double *berr, lapack_complex_double *work, double *rwork,
lapack_int *info)
little vibe check for you:sspsvxanddspsvxtakelapack_int *iwork+float/double *work, whilecspsvxandzspsvxswap that whole deal for a*rwork. don't mix them up, i'm begging 🙈
🦋 packed Hermitian: hpsv + hpsvx
same shape as the symmetric crew, just h instead of s. and they only come in complex flavors — chpsv/zhpsv and chpsvx/zhpsvx. keep up 🧚
void LAPACK_chpsv (char *uplo, lapack_int *n, lapack_int *nrhs,
lapack_complex_float *ap, lapack_int *ipiv, lapack_complex_float *b,
lapack_int *ldb, lapack_int *info)
void LAPACK_zhpsv (char *uplo, lapack_int *n, lapack_int *nrhs,
lapack_complex_double *ap, lapack_int *ipiv, lapack_complex_double
*b, lapack_int *ldb, lapack_int *info)
void LAPACK_chpsvx (char *fact, char *uplo, lapack_int *n, lapack_int
*nrhs, const lapack_complex_float *ap, lapack_complex_float *afp,
lapack_int *ipiv, const lapack_complex_float *b, lapack_int *ldb,
lapack_complex_float *x, lapack_int *ldx, float *rcond, float *ferr,
float *berr, lapack_complex_float *work, float *rwork, lapack_int
*info)
void LAPACK_zhpsvx (char *fact, char *uplo, lapack_int *n, lapack_int
*nrhs, const lapack_complex_double *ap, lapack_complex_double *afp,
lapack_int *ipiv, const lapack_complex_double *b, lapack_int *ldb,
lapack_complex_double *x, lapack_int *ldx, double *rcond, double
*ferr, double *berr, lapack_complex_double *work, double *rwork,
lapack_int *info)
🌸 QR era: geqrf
m, n, a, lda, tau, work, lwork, info — the whole squad. four precisions, one dream. the s/d versions stop at work, the c/z versions keep it in complex land the whole way through. slay 💖
void LAPACK_sgeqrf (lapack_int *m, lapack_int *n, float *a, lapack_int
*lda, float *tau, float *work, lapack_int *lwork, lapack_int *info)
void LAPACK_dgeqrf (lapack_int *m, lapack_int *n, double *a, lapack_int
*lda, double *tau, double *work, lapack_int *lwork, lapack_int
*info)
void LAPACK_cgeqrf (lapack_int *m, lapack_int *n, lapack_complex_float
*a, lapack_int *lda, lapack_complex_float *tau, lapack_complex_float
*work, lapack_int *lwork, lapack_int *info)
void LAPACK_zgeqrf (lapack_int *m, lapack_int *n, lapack_complex_double
*a, lapack_int *lda, lapack_complex_double *tau,
lapack_complex_double *work, lapack_int *lwork, lapack_int *info)
⭐ geqpf — the one with jpvt and no lwork
okay, notice: geqpf takes lapack_int *jpvt and has no lwork at all. the complex ones also get a rwork. she's different, she's lowkey built different, we respect her 💜
void LAPACK_sgeqpf (lapack_int *m, lapack_int *n, float *a, lapack_int
*lda, lapack_int *jpvt, float *tau, float *work, lapack_int *info)
void LAPACK_dgeqpf (lapack_int *m, lapack_int *n, double *a, lapack_int
*lda, lapack_int *jpvt, double *tau, double *work, lapack_int *info)
void LAPACK_cgeqpf (lapack_int *m, lapack_int *n, lapack_complex_float
*a, lapack_int *lda, lapack_int *jpvt, lapack_complex_float *tau,
lapack_complex_float *work, float *rwork, lapack_int *info)
void LAPACK_zgeqpf (lapack_int *m, lapack_int *n, lapack_complex_double
*a, lapack_int *lda, lapack_int *jpvt, lapack_complex_double *tau,
lapack_complex_double *work, double *rwork, lapack_int *info)
🔥 geqp3 — she brought lwork back
yup, lwork is back in the building for all four. jpvt stays. tau stays. complex ones keep their rwork too. it's giving glow-up 🌈
void LAPACK_sgeqp3 (lapack_int *m, lapack_int *n, float *a, lapack_int
*lda, lapack_int *jpvt, float *tau, float *work, lapack_int *lwork,
lapack_int *info)
void LAPACK_dgeqp3 (lapack_int *m, lapack_int *n, double *a, lapack_int
*lda, lapack_int *jpvt, double *tau, double *work, lapack_int
*lwork, lapack_int *info)
void LAPACK_cgeqp3 (lapack_int *m, lapack_int *n, lapack_complex_float
*a, lapack_int *lda, lapack_int *jpvt, lapack_complex_float *tau,
lapack_complex_float *work, lapack_int *lwork, float *rwork,
lapack_int *info)
void LAPACK_zgeqp3 (lapack_int *m, lapack_int *n, lapack_complex_double
*a, lapack_int *lda, lapack_int *jpvt, lapack_complex_double *tau,
lapack_complex_double *work, lapack_int *lwork, double *rwork,
lapack_int *info)
👑 generate-Q + apply-Q, the Q-niverse
so orgqr/ungqr are the generate girlies (m, n, k, a, lda, tau, work, lwork, info) and ormqr/unmqr are the apply girlies — they've got the extra side, trans, c, ldc situation. real ones know the difference. iykyk 🎀
void LAPACK_sorgqr (lapack_int *m, lapack_int *n, lapack_int *k, float
*a, lapack_int *lda, const float *tau, float *work, lapack_int
*lwork, lapack_int *info)
void LAPACK_dorgqr (lapack_int *m, lapack_int *n, lapack_int *k, double
*a, lapack_int *lda, const double *tau, double *work, lapack_int
*lwork, lapack_int *info)
void LAPACK_sormqr (char *side, char *trans, lapack_int *m, lapack_int
*n, lapack_int *k, const float *a, lapack_int *lda, const float
*tau, float *c, lapack_int *ldc, float *work, lapack_int *lwork,
lapack_int *info)
void LAPACK_dormqr (char *side, char *trans, lapack_int *m, lapack_int
*n, lapack_int *k, const double *a, lapack_int *lda, const double
*tau, double *c, lapack_int *ldc, double *work, lapack_int *lwork,
lapack_int *info)
void LAPACK_cungqr (lapack_int *m, lapack_int *n, lapack_int *k,
lapack_complex_float *a, lapack_int *lda, const lapack_complex_float
*tau, lapack_complex_float *work, lapack_int *lwork, lapack_int
*info)
void LAPACK_zungqr (lapack_int *m, lapack_int *n, lapack_int *k,
lapack_complex_double *a, lapack_int *lda, const
lapack_complex_double *tau, lapack_complex_double *work, lapack_int
*lwork, lapack_int *info)
void LAPACK_cunmqr (char *side, char *trans, lapack_int *m, lapack_int
*n, lapack_int *k, const lapack_complex_float *a, lapack_int *lda,
const lapack_complex_float *tau, lapack_complex_float *c, lapack_int
*ldc, lapack_complex_float *work, lapack_int *lwork, lapack_int
*info)
void LAPACK_zunmqr (char *side, char *trans, lapack_int *m, lapack_int
*n, lapack_int *k, const lapack_complex_double *a, lapack_int *lda,
const lapack_complex_double *tau, lapack_complex_double *c,
lapack_int *ldc, lapack_complex_double *work, lapack_int *lwork,
lapack_int *info)
🍓 LQ era: gelqf + orglq / ormlq
same energy, l instead of r, and the whole family rolled through again. gelqf first, then the generators, then the appliers. obsessed with the symmetry ngl ✨
void LAPACK_sgelqf (lapack_int *m, lapack_int *n, float *a, lapack_int
*lda, float *tau, float *work, lapack_int *lwork, lapack_int *info)
void LAPACK_dgelqf (lapack_int *m, lapack_int *n, double *a, lapack_int
*lda, double *tau, double *work, lapack_int *lwork, lapack_int
*info)
void LAPACK_cgelqf (lapack_int *m, lapack_int *n, lapack_complex_float
*a, lapack_int *lda, lapack_complex_float *tau, lapack_complex_float
*work, lapack_int *lwork, lapack_int *info)
void LAPACK_zgelqf (lapack_int *m, lapack_int *n, lapack_complex_double
*a, lapack_int *lda, lapack_complex_double *tau,
lapack_complex_double *work, lapack_int *lwork, lapack_int *info)
void LAPACK_sorglq (lapack_int *m, lapack_int *n, lapack_int *k, float
*a, lapack_int *lda, const float *tau, float *work, lapack_int
*lwork, lapack_int *info)
void LAPACK_dorglq (lapack_int *m, lapack_int *n, lapack_int *k, double
*a, lapack_int *lda, const double *tau, double *work, lapack_int
*lwork, lapack_int *info)
void LAPACK_sormlq (char *side, char *trans, lapack_int *m, lapack_int
*n, lapack_int *k, const float *a, lapack_int *lda, const float
*tau, float *c, lapack_int *ldc, float *work, lapack_int *lwork,
lapack_int *info)
void LAPACK_dormlq (char *side, char *trans, lapack_int *m, lapack_int
*n, lapack_int *k, const double *a, lapack_int *lda, const double
*tau, double *c, lapack_int *ldc, double *work, lapack_int *lwork,
lapack_int *info)
void LAPACK_cunglq (lapack_int *m, lapack_int *n, lapack_int *k,
lapack_complex_float *a, lapack_int *lda, const lapack_complex_float
*tau, lapack_complex_float *work, lapack_int *lwork, lapack_int
*info)
void LAPACK_zunglq (lapack_int *m, lapack_int *n, lapack_int *k,
lapack_complex_double *a, lapack_int *lda, const
lapack_complex_double *tau, lapack_complex_double *work, lapack_int
*lwork, lapack_int *info)
void LAPACK_cunmlq (char *side, char *trans, lapack_int *m, lapack_int
and that's exactly where this part cuts off mid-signature — LAPACK_cunmlq is literally mid-sentence and we're just gonna have to see how she ends up in the next chunk 😭💀 don't come for me, i'm transcribing faithfully fr fr 🫶
...and we're still in the signature pit, bestie 😭 — the code block just keeps going, so let's keep going with it. No new heading, we're mid-list, carry on:
*n, lapack_int *k, const lapack_complex_float *a, lapack_int *lda,
const lapack_complex_float *tau, lapack_complex_float *c, lapack_int
*ldc, lapack_complex_float *work, lapack_int *lwork, lapack_int
*info)
void LAPACK_zunmlq (char *side, char *trans, lapack_int *m, lapack_int
*n, lapack_int *k, const lapack_complex_double *a, lapack_int *lda,
const lapack_complex_double *tau, lapack_complex_double *c,
lapack_int *ldc, lapack_complex_double *work, lapack_int *lwork,
lapack_int *info)
That's the LQ-unfold crew closing out 🦋 — and notice how a and tau are both wearing their little const badges in the unmlq variants, while c and work are absolutely not. Inputs stay untouched, outputs get written. Respect the badge, king 👑.
🎀 the QL household (and it is a whole household)
ok so geqlf makes the thing, orgql/ungql build the Q, and ormql/unmql apply it. Four precisions each because LAPACK does not believe in favourites 💅
void LAPACK_sgeqlf (lapack_int *m, lapack_int *n, float *a, lapack_int
*lda, float *tau, float *work, lapack_int *lwork, lapack_int *info)
void LAPACK_dgeqlf (lapack_int *m, lapack_int *n, double *a, lapack_int
*lda, double *tau, double *work, lapack_int *lwork, lapack_int
*info)
void LAPACK_cgeqlf (lapack_int *m, lapack_int *n, lapack_complex_float
*a, lapack_int *lda, lapack_complex_float *tau, lapack_complex_float
*work, lapack_int *lwork, lapack_int *info)
void LAPACK_zgeqlf (lapack_int *m, lapack_int *n, lapack_complex_double
*a, lapack_int *lda, lapack_complex_double *tau,
lapack_complex_double *work, lapack_int *lwork, lapack_int *info)
void LAPACK_sorgql (lapack_int *m, lapack_int *n, lapack_int *k, float
*a, lapack_int *lda, const float *tau, float *work, lapack_int
*lwork, lapack_int *info)
void LAPACK_dorgql (lapack_int *m, lapack_int *n, lapack_int *k, double
*a, lapack_int *lda, const double *tau, double *work, lapack_int
*lwork, lapack_int *info)
void LAPACK_cungql (lapack_int *m, lapack_int *n, lapack_int *k,
lapack_complex_float *a, lapack_int *lda, const lapack_complex_float
*tau, lapack_complex_float *work, lapack_int *lwork, lapack_int
*info)
void LAPACK_zungql (lapack_int *m, lapack_int *n, lapack_int *k,
lapack_complex_double *a, lapack_int *lda, const
lapack_complex_double *tau, lapack_complex_double *work, lapack_int
*lwork, lapack_int *info)
void LAPACK_sormql (char *side, char *trans, lapack_int *m, lapack_int
*n, lapack_int *k, const float *a, lapack_int *lda, const float
*tau, float *c, lapack_int *ldc, float *work, lapack_int *lwork,
lapack_int *info)
void LAPACK_dormql (char *side, char *trans, lapack_int *m, lapack_int
*n, lapack_int *k, const double *a, lapack_int *lda, const double
*tau, double *c, lapack_int *ldc, double *work, lapack_int *lwork,
lapack_int *info)
void LAPACK_cunmql (char *side, char *trans, lapack_int *m, lapack_int
*n, lapack_int *k, const lapack_complex_float *a, lapack_int *lda,
const lapack_complex_float *tau, lapack_complex_float *c, lapack_int
*ldc, lapack_complex_float *work, lapack_int *lwork, lapack_int
*info)
void LAPACK_zunmql (char *side, char *trans, lapack_int *m, lapack_int
*n, lapack_int *k, const lapack_complex_double *a, lapack_int *lda,
const lapack_complex_double *tau, lapack_complex_double *c,
lapack_int *ldc, lapack_complex_double *work, lapack_int *lwork,
lapack_int *info)
the way geqlf gets a non-const tau (it's an output, she's writing ✍️) but orgql and ormql get const tau (now it's an input, hands off 🙅♀️)? character development, honestly.
also side and trans are plain char * with zero const energy in the orm/unm ones. chaotic? yes. iconic? also yes. it's giving "we were young, we didn't know" 💀
🌸 the RQ family, aka gerqf and friends
void LAPACK_sgerqf (lapack_int *m, lapack_int *n, float *a, lapack_int
*lda, float *tau, float *work, lapack_int *lwork, lapack_int *info)
void LAPACK_dgerqf (lapack_int *m, lapack_int *n, double *a, lapack_int
*lda, double *tau, double *work, lapack_int *lwork, lapack_int
*info)
void LAPACK_cgerqf (lapack_int *m, lapack_int *n, lapack_complex_float
*a, lapack_int *lda, lapack_complex_float *tau, lapack_complex_float
*work, lapack_int *lwork, lapack_int *info)
void LAPACK_zgerqf (lapack_int *m, lapack_int *n, lapack_complex_double
*a, lapack_int *lda, lapack_complex_double *tau,
lapack_complex_double *work, lapack_int *lwork, lapack_int *info)
void LAPACK_sorgrq (lapack_int *m, lapack_int *n, lapack_int *k, float
*a, lapack_int *lda, const float *tau, float *work, lapack_int
*lwork, lapack_int *info)
void LAPACK_dorgrq (lapack_int *m, lapack_int *n, lapack_int *k, double
*a, lapack_int *lda, const double *tau, double *work, lapack_int
*lwork, lapack_int *info)
void LAPACK_cungrq (lapack_int *m, lapack_int *n, lapack_int *k,
lapack_complex_float *a, lapack_int *lda, const lapack_complex_float
*tau, lapack_complex_float *work, lapack_int *lwork, lapack_int
*info)
void LAPACK_zungrq (lapack_int *m, lapack_int *n, lapack_int *k,
lapack_complex_double *a, lapack_int *lda, const
lapack_complex_double *tau, lapack_complex_double *work, lapack_int
*lwork, lapack_int *info)
void LAPACK_sormrq (char *side, char *trans, lapack_int *m, lapack_int
*n, lapack_int *k, const float *a, lapack_int *lda, const float
*tau, float *c, lapack_int *ldc, float *work, lapack_int *lwork,
lapack_int *info)
void LAPACK_dormrq (char *side, char *trans, lapack_int *m, lapack_int
*n, lapack_int *k, const double *a, lapack_int *lda, const double
*tau, double *c, lapack_int *ldc, double *work, lapack_int *lwork,
lapack_int *info)
void LAPACK_cunmrq (char *side, char *trans, lapack_int *m, lapack_int
*n, lapack_int *k, const lapack_complex_float *a, lapack_int *lda,
const lapack_complex_float *tau, lapack_complex_float *c, lapack_int
*ldc, lapack_complex_float *work, lapack_int *lwork, lapack_int
*info)
void LAPACK_zunmrq (char *side, char *trans, lapack_int *m, lapack_int
*n, lapack_int *k, const lapack_complex_double *a, lapack_int *lda,
const lapack_complex_double *tau, lapack_complex_double *c,
lapack_int *ldc, lapack_complex_double *work, lapack_int *lwork,
lapack_int *info)
literally the exact same shape as the QL crew, just with an rq on the end instead of ql, and I'm obsessed with the consistency 🫶 copy-paste but make it math.
✨ tzrzf + ormrz: the ones with the extra letter
tzrzf is the m, n + usual suspects situation. then ormrz/unmrz show up with both k and l — one extra lapack_int than everybody else in this club, and honestly? main character behaviour 💅
void LAPACK_stzrzf (lapack_int *m, lapack_int *n, float *a, lapack_int
*lda, float *tau, float *work, lapack_int *lwork, lapack_int *info)
void LAPACK_dtzrzf (lapack_int *m, lapack_int *n, double *a, lapack_int
*lda, double *tau, double *work, lapack_int *lwork, lapack_int
*info)
void LAPACK_ctzrzf (lapack_int *m, lapack_int *n, lapack_complex_float
*a, lapack_int *lda, lapack_complex_float *tau, lapack_complex_float
*work, lapack_int *lwork, lapack_int *info)
void LAPACK_ztzrzf (lapack_int *m, lapack_int *n, lapack_complex_double
*a, lapack_int *lda, lapack_complex_double *tau,
lapack_complex_double *work, lapack_int *lwork, lapack_int *info)
void LAPACK_sormrz (char *side, char *trans, lapack_int *m, lapack_int
*n, lapack_int *k, lapack_int *l, const float *a, lapack_int *lda,
const float *tau, float *c, lapack_int *ldc, float *work, lapack_int
*lwork, lapack_int *info)
void LAPACK_dormrz (char *side, char *trans, lapack_int *m, lapack_int
*n, lapack_int *k, lapack_int *l, const double *a, lapack_int *lda,
const double *tau, double *c, lapack_int *ldc, double *work,
lapack_int *lwork, lapack_int *info)
void LAPACK_cunmrz (char *side, char *trans, lapack_int *m, lapack_int
*n, lapack_int *k, lapack_int *l, const lapack_complex_float *a,
lapack_int *lda, const lapack_complex_float *tau,
lapack_complex_float *c, lapack_int *ldc, lapack_complex_float
*work, lapack_int *lwork, lapack_int *info)
void LAPACK_zunmrz (char *side, char *trans, lapack_int *m, lapack_int
*n, lapack_int *k, lapack_int *l, const lapack_complex_double *a,
lapack_int *lda, const lapack_complex_double *tau,
lapack_complex_double *c, lapack_int *ldc, lapack_complex_double
*work, lapack_int *lwork, lapack_int *info)
💜 the gq pair: two factorizations in one call, she's efficient
ggqrf and ggrqf both take two matrices (a with lda + taua, and b with ldb + taub) — two taus, two leading dimensions, one info at the end holding it all together 😌
watch the argument ORDER tho, because it is NOT the same between them 👀 ggqrf leads with n, m, p and ggrqf leads with m, p, n. do not mix them up, i am begging 🙏
void LAPACK_sggqrf (lapack_int *n, lapack_int *m, lapack_int *p, float
*a, lapack_int *lda, float *taua, float *b, lapack_int *ldb, float
*taub, float *work, lapack_int *lwork, lapack_int *info)
void LAPACK_dggqrf (lapack_int *n, lapack_int *m, lapack_int *p, double
*a, lapack_int *lda, double *taua, double *b, lapack_int *ldb,
double *taub, double *work, lapack_int *lwork, lapack_int *info)
void LAPACK_cggqrf (lapack_int *n, lapack_int *m, lapack_int *p,
lapack_complex_float *a, lapack_int *lda, lapack_complex_float
*taua, lapack_complex_float *b, lapack_int *ldb,
lapack_complex_float *taub, lapack_complex_float *work, lapack_int
*lwork, lapack_int *info)
void LAPACK_zggqrf (lapack_int *n, lapack_int *m, lapack_int *p,
lapack_complex_double *a, lapack_int *lda, lapack_complex_double
*taua, lapack_complex_double *b, lapack_int *ldb,
lapack_complex_double *taub, lapack_complex_double *work, lapack_int
*lwork, lapack_int *info)
void LAPACK_sggrqf (lapack_int *m, lapack_int *p, lapack_int *n, float
*a, lapack_int *lda, float *taua, float *b, lapack_int *ldb, float
*taub, float *work, lapack_int *lwork, lapack_int *info)
void LAPACK_dggrqf (lapack_int *m, lapack_int *p, lapack_int *n, double
*a, lapack_int *lda, double *taua, double *b, lapack_int *ldb,
double *taub, double *work, lapack_int *lwork, lapack_int *info)
void LAPACK_cggrqf (lapack_int *m, lapack_int *p, lapack_int *n,
lapack_complex_float *a, lapack_int *lda, lapack_complex_float
*taua, lapack_complex_float *b, lapack_int *ldb,
lapack_complex_float *taub, lapack_complex_float *work, lapack_int
*lwork, lapack_int *info)
void LAPACK_zggrqf (lapack_int *m, lapack_int *p, lapack_int *n,
lapack_complex_double *a, lapack_int *lda, lapack_complex_double
*taua, lapack_complex_double *b, lapack_int *ldb,
lapack_complex_double *taub, lapack_complex_double *work, lapack_int
*lwork, lapack_int *info)
🔥 gebrd: bidiagonal era
gebrd gives you d and e (two real arrays for the diagonal-ish business) plus tauq and taup. the complex versions still take float *d / float *e / double *d / double *e though — real numbers in a complex world, we love a mixed cast 🌈
void LAPACK_sgebrd (lapack_int *m, lapack_int *n, float *a, lapack_int
*lda, float *d, float *e, float *tauq, float *taup, float *work,
lapack_int *lwork, lapack_int *info)
void LAPACK_dgebrd (lapack_int *m, lapack_int *n, double *a, lapack_int
*lda, double *d, double *e, double *tauq, double *taup, double
*work, lapack_int *lwork, lapack_int *info)
void LAPACK_cgebrd (lapack_int *m, lapack_int *n, lapack_complex_float
*a, lapack_int *lda, float *d, float *e, lapack_complex_float *tauq,
lapack_complex_float *taup, lapack_complex_float *work, lapack_int
*lwork, lapack_int *info)
void LAPACK_zgebrd (lapack_int *m, lapack_int *n, lapack_complex_double
*a, lapack_int *lda, double *d, double *e, lapack_complex_double
*tauq, lapack_complex_double *taup, lapack_complex_double *work,
lapack_int *lwork, lapack_int *info)
🦋 gbbrd: the one with the MOST arguments and NO lwork
bestie. look at this signature. vect, m, n, ncc, kl, ku, ab, ldab, d, e, q, ldq, pt, ldpt, c, ldc, work, info. seventeen things. no lwork in sight. she does not take a lwork. she does not need one. icon behaviour, honestly 💀✨
void LAPACK_sgbbrd (char *vect, lapack_int *m, lapack_int *n, lapack_int
*ncc, lapack_int *kl, lapack_int *ku, float *ab, lapack_int *ldab,
float *d, float *e, float *q, lapack_int *ldq, float *pt, lapack_int
*ldpt, float *c, lapack_int *ldc, float *work, lapack_int *info)
void LAPACK_dgbbrd (char *vect, lapack_int *m, lapack_int *n, lapack_int
*ncc, lapack_int *kl, lapack_int *ku, double *ab, lapack_int *ldab,
double *d, double *e, double *q, lapack_int *ldq, double *pt,
lapack_int *ldpt, double *c, lapack_int *ldc, double *work,
and yes we're stopping mid-signature again because that's just how this page rolls — the dgbbrd signature goes on, and so do we, in the next bit 🫶 don't go anywhere.
...still going, bestie, we're deep in the declaration zone now — but look, there's a whole pattern here and once you clock it you'll be reading these like a text from your best friend 💅
Every single one of these comes in the same little family of four:s=float,d=double,c=lapack_complex_float,z=lapack_complex_double. Same name, same parameters, different precision. It's giving matching friendship bracelets, fr fr.
lapack_int *info)
void LAPACK_cgbbrd (char *vect, lapack_int *m, lapack_int *n, lapack_int
*ncc, lapack_int *kl, lapack_int *ku, lapack_complex_float *ab,
lapack_int *ldab, float *d, float *e, lapack_complex_float *q,
lapack_int *ldq, lapack_complex_float *pt, lapack_int *ldpt,
lapack_complex_float *c, lapack_int *ldc, lapack_complex_float
*work, float *rwork, lapack_int *info)
void LAPACK_zgbbrd (char *vect, lapack_int *m, lapack_int *n, lapack_int
*ncc, lapack_int *kl, lapack_int *ku, lapack_complex_double *ab,
lapack_int *ldab, double *d, double *e, lapack_complex_double *q,
lapack_int *ldq, lapack_complex_double *pt, lapack_int *ldpt,
lapack_complex_double *c, lapack_int *ldc, lapack_complex_double
*work, double *rwork, lapack_int *info)
Bestie notice how cgbbrd and zgbbrd are the only two in this family grabbing rwork on top of work? The real-valued ones didn't need it. That's not a vibe I invented, it's literally in the signature — count the pointers yourself if you don't believe me 🫶
Now the orgbr/ormbr/ungbr/unmbr crew — and yes, s/d come as a pair and c/z come as a pair, and the tau pointer is const on all four while a is not. Slay, const correctness. ✨
void LAPACK_sorgbr (char *vect, lapack_int *m, lapack_int *n, lapack_int
*k, float *a, lapack_int *lda, const float *tau, float *work,
lapack_int *lwork, lapack_int *info)
void LAPACK_dorgbr (char *vect, lapack_int *m, lapack_int *n, lapack_int
*k, double *a, lapack_int *lda, const double *tau, double *work,
lapack_int *lwork, lapack_int *info)
void LAPACK_sormbr (char *vect, char *side, char *trans, lapack_int *m,
lapack_int *n, lapack_int *k, const float *a, lapack_int *lda, const
float *tau, float *c, lapack_int *ldc, float *work, lapack_int
*lwork, lapack_int *info)
void LAPACK_dormbr (char *vect, char *side, char *trans, lapack_int *m,
lapack_int *n, lapack_int *k, const double *a, lapack_int *lda,
const double *tau, double *c, lapack_int *ldc, double *work,
lapack_int *lwork, lapack_int *info)
void LAPACK_cungbr (char *vect, lapack_int *m, lapack_int *n, lapack_int
*k, lapack_complex_float *a, lapack_int *lda, const
lapack_complex_float *tau, lapack_complex_float *work, lapack_int
*lwork, lapack_int *info)
void LAPACK_zungbr (char *vect, lapack_int *m, lapack_int *n, lapack_int
*k, lapack_complex_double *a, lapack_int *lda, const
lapack_complex_double *tau, lapack_complex_double *work, lapack_int
*lwork, lapack_int *info)
void LAPACK_cunmbr (char *vect, char *side, char *trans, lapack_int *m,
lapack_int *n, lapack_int *k, const lapack_complex_float *a,
lapack_int *lda, const lapack_complex_float *tau,
lapack_complex_float *c, lapack_int *ldc, lapack_complex_float
*work, lapack_int *lwork, lapack_int *info)
void LAPACK_zunmbr (char *vect, char *side, char *trans, lapack_int *m,
lapack_int *n, lapack_int *k, const lapack_complex_double *a,
lapack_int *lda, const lapack_complex_double *tau,
lapack_complex_double *c, lapack_int *ldc, lapack_complex_double
*work, lapack_int *lwork, lapack_int *info)
Notice the o vs u thing? sorgbr/dorgbr/sormbr/dormbr for the real ones, cungbr/zungbr/cunmbr/zunmbr for the complex ones. That's not a typo, that's the whole naming convention and if you "fix" it your code will not compile and you'll be sad 😭
Next up: the bidiagonal squad. bdsqr gets four flavours, bdsdc gets two, bdsvdx gets two. The way bdsqr keeps vt, u, and c all as full arrays with their own ldvt, ldu, ldc... main character energy honestly 👑
void LAPACK_sbdsqr (char *uplo, lapack_int *n, lapack_int *ncvt,
lapack_int *nru, lapack_int *ncc, float *d, float *e, float *vt,
lapack_int *ldvt, float *u, lapack_int *ldu, float *c, lapack_int
*ldc, float *work, lapack_int *info)
void LAPACK_dbdsqr (char *uplo, lapack_int *n, lapack_int *ncvt,
lapack_int *nru, lapack_int *ncc, double *d, double *e, double *vt,
lapack_int *ldvt, double *u, lapack_int *ldu, double *c, lapack_int
*ldc, double *work, lapack_int *info)
void LAPACK_cbdsqr (char *uplo, lapack_int *n, lapack_int *ncvt,
lapack_int *nru, lapack_int *ncc, float *d, float *e,
lapack_complex_float *vt, lapack_int *ldvt, lapack_complex_float *u,
lapack_int *ldu, lapack_complex_float *c, lapack_int *ldc, float
*work, lapack_int *info)
void LAPACK_zbdsqr (char *uplo, lapack_int *n, lapack_int *ncvt,
lapack_int *nru, lapack_int *ncc, double *d, double *e,
lapack_complex_double *vt, lapack_int *ldvt, lapack_complex_double
*u, lapack_int *ldu, lapack_complex_double *c, lapack_int *ldc,
double *work, lapack_int *info)
void LAPACK_sbdsdc (char *uplo, char *compq, lapack_int *n, float *d,
float *e, float *u, lapack_int *ldu, float *vt, lapack_int *ldvt,
float *q, lapack_int *iq, float *work, lapack_int *iwork, lapack_int
*info)
void LAPACK_dbdsdc (char *uplo, char *compq, lapack_int *n, double *d,
double *e, double *u, lapack_int *ldu, double *vt, lapack_int *ldvt,
double *q, lapack_int *iq, double *work, lapack_int *iwork,
lapack_int *info)
void LAPACK_sbdsvdx (char *uplo, char *jobz, char *range, lapack_int *n,
float *d, float *e, float *vl, float *vu, lapack_int *il, lapack_int
*iu, lapack_int *ns, float *s, float *z, lapack_int *ldz, float
*work, lapack_int *iwork, lapack_int *info)
void LAPACK_dbdsvdx (char *uplo, char *jobz, char *range, lapack_int *n,
double *d, double *e, double *vl, double *vu, lapack_int *il,
lapack_int *iu, lapack_int *ns, double *s, double *z, lapack_int
*ldz, double *work, lapack_int *iwork, lapack_int *info)
Real talk though: the complex bdsqr versions take float/double for d and e and work (because singular values are always real), but lapack_complex_* for vt, u, c. Mixed types, but make it fashion 💅
Okay and now we hit the tridiagonal block, which is a lot but it's literally the same shape on repeat. sytrd → orgtr → ormtr is your real-valued trio, hetrd → ungtr → unmtr is the complex trio. Same story for the packed versions after: sptrd → opgtr → opmtr, and hptrd → upgtr → upmtr.
void LAPACK_ssytrd (char *uplo, lapack_int *n, float *a, lapack_int
*lda, float *d, float *e, float *tau, float *work, lapack_int
*lwork, lapack_int *info)
void LAPACK_dsytrd (char *uplo, lapack_int *n, double *a, lapack_int
*lda, double *d, double *e, double *tau, double *work, lapack_int
*lwork, lapack_int *info)
void LAPACK_sorgtr (char *uplo, lapack_int *n, float *a, lapack_int
*lda, const float *tau, float *work, lapack_int *lwork, lapack_int
*info)
void LAPACK_dorgtr (char *uplo, lapack_int *n, double *a, lapack_int
*lda, const double *tau, double *work, lapack_int *lwork, lapack_int
*info)
void LAPACK_sormtr (char *side, char *uplo, char *trans, lapack_int *m,
lapack_int *n, const float *a, lapack_int *lda, const float *tau,
float *c, lapack_int *ldc, float *work, lapack_int *lwork,
lapack_int *info)
void LAPACK_dormtr (char *side, char *uplo, char *trans, lapack_int *m,
lapack_int *n, const double *a, lapack_int *lda, const double *tau,
double *c, lapack_int *ldc, double *work, lapack_int *lwork,
lapack_int *info)
void LAPACK_chetrd (char *uplo, lapack_int *n, lapack_complex_float *a,
lapack_int *lda, float *d, float *e, lapack_complex_float *tau,
lapack_complex_float *work, lapack_int *lwork, lapack_int *info)
void LAPACK_zhetrd (char *uplo, lapack_int *n, lapack_complex_double *a,
lapack_int *lda, double *d, double *e, lapack_complex_double *tau,
lapack_complex_double *work, lapack_int *lwork, lapack_int *info)
void LAPACK_cungtr (char *uplo, lapack_int *n, lapack_complex_float *a,
lapack_int *lda, const lapack_complex_float *tau,
lapack_complex_float *work, lapack_int *lwork, lapack_int *info)
void LAPACK_zungtr (char *uplo, lapack_int *n, lapack_complex_double *a,
lapack_int *lda, const lapack_complex_double *tau,
lapack_complex_double *work, lapack_int *lwork, lapack_int *info)
void LAPACK_cunmtr (char *side, char *uplo, char *trans, lapack_int *m,
lapack_int *n, const lapack_complex_float *a, lapack_int *lda, const
lapack_complex_float *tau, lapack_complex_float *c, lapack_int *ldc,
lapack_complex_float *work, lapack_int *lwork, lapack_int *info)
void LAPACK_zunmtr (char *side, char *uplo, char *trans, lapack_int *m,
lapack_int *n, const lapack_complex_double *a, lapack_int *lda,
const lapack_complex_double *tau, lapack_complex_double *c,
lapack_int *ldc, lapack_complex_double *work, lapack_int *lwork,
lapack_int *info)
The trick to remember which is which, iykyk: *trd functions make the tridiagonal form and spit out tau; the org*/ung* ones rebuild an actual orthogonal/unitary matrix q from that tau; and the orm*/unm* ones apply it to some matrix c without ever forming q. Three different jobs, three different signatures, zero guesswork needed. 🧚
Packed storage time — same drama, no lda anywhere because packed arrays don't need a leading dimension. Look at the parameter lists shrinking! Iconic ✨
void LAPACK_ssptrd (char *uplo, lapack_int *n, float *ap, float *d,
float *e, float *tau, lapack_int *info)
void LAPACK_dsptrd (char *uplo, lapack_int *n, double *ap, double *d,
double *e, double *tau, lapack_int *info)
void LAPACK_sopgtr (char *uplo, lapack_int *n, const float *ap, const
float *tau, float *q, lapack_int *ldq, float *work, lapack_int
*info)
void LAPACK_dopgtr (char *uplo, lapack_int *n, const double *ap, const
double *tau, double *q, lapack_int *ldq, double *work, lapack_int
*info)
void LAPACK_sopmtr (char *side, char *uplo, char *trans, lapack_int *m,
lapack_int *n, const float *ap, const float *tau, float *c,
lapack_int *ldc, float *work, lapack_int *info)
void LAPACK_dopmtr (char *side, char *uplo, char *trans, lapack_int *m,
lapack_int *n, const double *ap, const double *tau, double *c,
lapack_int *ldc, double *work, lapack_int *info)
void LAPACK_chptrd (char *uplo, lapack_int *n, lapack_complex_float *ap,
float *d, float *e, lapack_complex_float *tau, lapack_int *info)
void LAPACK_zhptrd (char *uplo, lapack_int *n, lapack_complex_double
*ap, double *d, double *e, lapack_complex_double *tau, lapack_int
*info)
void LAPACK_cupgtr (char *uplo, lapack_int *n, const
lapack_complex_float *ap, const lapack_complex_float *tau,
lapack_complex_float *q, lapack_int *ldq, lapack_complex_float
*work, lapack_int *info)
void LAPACK_zupgtr (char *uplo, lapack_int *n, const
lapack_complex_double *ap, const lapack_complex_double *tau,
lapack_complex_double *q, lapack_int *ldq, lapack_complex_double
*work, lapack_int *info)
void LAPACK_cupmtr (char *side, char *uplo, char *trans, lapack_int *m,
lapack_int *n, const lapack_complex_float *ap, const
lapack_complex_float *tau, lapack_complex_float *c, lapack_int *ldc,
lapack_complex_float *work, lapack_int *info)
void LAPACK_zupmtr (char *side, char *uplo, char *trans, lapack_int *m,
lapack_int *n, const lapack_complex_double *ap, const
lapack_complex_double *tau, lapack_complex_double *c, lapack_int
*ldc, lapack_complex_double *work, lapack_int *info)
Heads up bestie:sptrd/dptrd— sorry,ssptrd/dsptrdand thehptrdpair — have nolwork/workparameter in this declaration at all, and theopgtr/opmtr/upgtr/upmtrones takeworkbut nolwork. Not me making that up — read the lines, the arguments just aren't there. If you're passing extra args, that's a skill issue 💀
And the banded tridiagonal reducers, sbtrd/dbtrd... nope, ssbtrd/dsbtrd/chbtrd/zhbtrd — with vect and uplo and kd all up front. Then the tridiagonal eigensolvers sterf (two flavours, no z in sight) and steqr (two flavours, compz first).
void LAPACK_ssbtrd (char *vect, char *uplo, lapack_int *n, lapack_int
*kd, float *ab, lapack_int *ldab, float *d, float *e, float *q,
lapack_int *ldq, float *work, lapack_int *info)
void LAPACK_dsbtrd (char *vect, char *uplo, lapack_int *n, lapack_int
*kd, double *ab, lapack_int *ldab, double *d, double *e, double *q,
lapack_int *ldq, double *work, lapack_int *info)
void LAPACK_chbtrd (char *vect, char *uplo, lapack_int *n, lapack_int
*kd, lapack_complex_float *ab, lapack_int *ldab, float *d, float *e,
lapack_complex_float *q, lapack_int *ldq, lapack_complex_float
*work, lapack_int *info)
void LAPACK_zhbtrd (char *vect, char *uplo, lapack_int *n, lapack_int
*kd, lapack_complex_double *ab, lapack_int *ldab, double *d, double
*e, lapack_complex_double *q, lapack_int *ldq, lapack_complex_double
*work, lapack_int *info)
void LAPACK_ssterf (lapack_int *n, float *d, float *e, lapack_int *info)
void LAPACK_dsterf (lapack_int *n, double *d, double *e, lapack_int
*info)
void LAPACK_ssteqr (char *compz, lapack_int *n, float *d, float *e,
float *z, lapack_int *ldz, float *work, lapack_int *info)
void LAPACK_dsteqr (char *compz, lapack_int *n, double *d, double *e,
double *z, lapack_int *ldz, double *work, lapack_int *info)
The way sterf is out here with the shortest signature ever — just n, d, e, info, no vectors, no work, no nothing — and then steqr right after it has compz and z and ldz and work... they're literally siblings and one of them is a minimalist 🎀
And sterf has no complex versions at all, only s and d. That's it, that's the whole offering. Obsessed with the restraint. 🌸
kisses we're still mid-SYNOPSIS and there's more coming — don't go anywhere bestie 💖
🦋 the tridiagonal glam squad: steqr & stemr
okay so first up we have the eigenvalue girlies for symmetric tridiagonal matrices, and yes they come in all four flavors because ofc they do 💅
void LAPACK_csteqr (char *compz, lapack_int *n, float *d, float *e,
lapack_complex_float *z, lapack_int *ldz, float *work, lapack_int
*info)
void LAPACK_zsteqr (char *compz, lapack_int *n, double *d, double *e,
lapack_complex_double *z, lapack_int *ldz, double *work, lapack_int
*info)
void LAPACK_sstemr (char *jobz, char *range, lapack_int *n, float *d,
float *e, float *vl, float *vu, lapack_int *il, lapack_int *iu,
lapack_int *m, float *w, float *z, lapack_int *ldz, lapack_int *nzc,
lapack_int *isuppz, lapack_logical *tryrac, float *work, lapack_int
*lwork, lapack_int *iwork, lapack_int *liwork, lapack_int *info)
void LAPACK_dstemr (char *jobz, char *range, lapack_int *n, double *d,
double *e, double *vl, double *vu, lapack_int *il, lapack_int *iu,
lapack_int *m, double *w, double *z, lapack_int *ldz, lapack_int
*nzc, lapack_int *isuppz, lapack_logical *tryrac, double *work,
lapack_int *lwork, lapack_int *iwork, lapack_int *liwork, lapack_int
*info)
void LAPACK_cstemr (char *jobz, char *range, lapack_int *n, float *d,
float *e, float *vl, float *vu, lapack_int *il, lapack_int *iu,
lapack_int *m, float *w, lapack_complex_float *z, lapack_int *ldz,
lapack_int *nzc, lapack_int *isuppz, lapack_logical *tryrac, float
*work, lapack_int *lwork, lapack_int *iwork, lapack_int *liwork,
lapack_int *info)
void LAPACK_zstemr (char *jobz, char *range, lapack_int *n, double *d,
double *e, double *vl, double *vu, lapack_int *il, lapack_int *iu,
lapack_int *m, double *w, lapack_complex_double *z, lapack_int *ldz,
lapack_int *nzc, lapack_int *isuppz, lapack_logical *tryrac, double
*work, lapack_int *lwork, lapack_int *iwork, lapack_int *liwork,
lapack_int *info)
note how steqr is literally just the four complex-precision ones here — c and z — while stemr is out here with the full s/d/c/z set. and stemr? she's thriving, look at that parameter list 😭 nzc, isuppz, tryrac, work, lwork, iwork, liwork… she brought the whole suitcase. also hi lapack_logical *tryrac, we see you bestie 💖
✨ divide & conquer era: stedc
void LAPACK_sstedc (char *compz, lapack_int *n, float *d, float *e,
float *z, lapack_int *ldz, float *work, lapack_int *lwork,
lapack_int *iwork, lapack_int *liwork, lapack_int *info)
void LAPACK_dstedc (char *compz, lapack_int *n, double *d, double *e,
double *z, lapack_int *ldz, double *work, lapack_int *lwork,
lapack_int *iwork, lapack_int *liwork, lapack_int *info)
void LAPACK_cstedc (char *compz, lapack_int *n, float *d, float *e,
lapack_complex_float *z, lapack_int *ldz, lapack_complex_float
*work, lapack_int *lwork, float *rwork, lapack_int *lrwork,
lapack_int *iwork, lapack_int *liwork, lapack_int *info)
void LAPACK_zstedc (char *compz, lapack_int *n, double *d, double *e,
lapack_complex_double *z, lapack_int *ldz, lapack_complex_double
*work, lapack_int *lwork, double *rwork, lapack_int *lrwork,
lapack_int *iwork, lapack_int *liwork, lapack_int *info)
the way the real ones (s, d) only need work/lwork + iwork/liwork, but the complex ones (c, z) ALSO get rwork/lrwork on top — it's giving "extra baggage fees" 💀 iconic honestly.
🎀 the MRRR girlies: stegr
void LAPACK_sstegr (char *jobz, char *range, lapack_int *n, float *d,
float *e, float *vl, float *vu, lapack_int *il, lapack_int *iu,
float *abstol, lapack_int *m, float *w, float *z, lapack_int *ldz,
lapack_int *isuppz, float *work, lapack_int *lwork, lapack_int
*iwork, lapack_int *liwork, lapack_int *info)
void LAPACK_dstegr (char *jobz, char *range, lapack_int *n, double *d,
double *e, double *vl, double *vu, lapack_int *il, lapack_int *iu,
double *abstol, lapack_int *m, double *w, double *z, lapack_int
*ldz, lapack_int *isuppz, double *work, lapack_int *lwork,
lapack_int *iwork, lapack_int *liwork, lapack_int *info)
void LAPACK_cstegr (char *jobz, char *range, lapack_int *n, float *d,
float *e, float *vl, float *vu, lapack_int *il, lapack_int *iu,
float *abstol, lapack_int *m, float *w, lapack_complex_float *z,
lapack_int *ldz, lapack_int *isuppz, float *work, lapack_int *lwork,
lapack_int *iwork, lapack_int *liwork, lapack_int *info)
void LAPACK_zstegr (char *jobz, char *range, lapack_int *n, double *d,
double *e, double *vl, double *vu, lapack_int *il, lapack_int *iu,
double *abstol, lapack_int *m, double *w, lapack_complex_double *z,
lapack_int *ldz, lapack_int *isuppz, double *work, lapack_int
*lwork, lapack_int *iwork, lapack_int *liwork, lapack_int *info)
see the pattern? jobz, range, vl, vu, il, iu, abstol, m, w, z, ldz, isuppz, work, lwork, iwork, liwork, info. same skeleton, four outfits. slay 💅
🌸 pteqr — the positive-definite cuties
void LAPACK_spteqr (char *compz, lapack_int *n, float *d, float *e,
float *z, lapack_int *ldz, float *work, lapack_int *info)
void LAPACK_dpteqr (char *compz, lapack_int *n, double *d, double *e,
double *z, lapack_int *ldz, double *work, lapack_int *info)
void LAPACK_cpteqr (char *compz, lapack_int *n, float *d, float *e,
lapack_complex_float *z, lapack_int *ldz, float *work, lapack_int
*info)
void LAPACK_zpteqr (char *compz, lapack_int *n, double *d, double *e,
lapack_complex_double *z, lapack_int *ldz, double *work, lapack_int
*info)
short, sweet, minimal args — she said "I don't need a lwork, I don't need iwork, I'm low-maintenance" and honestly? respect 🫶
💜 stebz + stein + disna — the bisection clique
void LAPACK_sstebz (char *range, char *order, lapack_int *n, float *vl,
float *vu, lapack_int *il, lapack_int *iu, float *abstol, const
float *d, const float *e, lapack_int *m, lapack_int *nsplit, float
*w, lapack_int *iblock, lapack_int *isplit, float *work, lapack_int
*iwork, lapack_int *info)
void LAPACK_dstebz (char *range, char *order, lapack_int *n, double *vl,
double *vu, lapack_int *il, lapack_int *iu, double *abstol, const
double *d, const double *e, lapack_int *m, lapack_int *nsplit,
double *w, lapack_int *iblock, lapack_int *isplit, double *work,
lapack_int *iwork, lapack_int *info)
void LAPACK_sstein (lapack_int *n, const float *d, const float *e,
lapack_int *m, const float *w, const lapack_int *iblock, const
lapack_int *isplit, float *z, lapack_int *ldz, float *work,
lapack_int *iwork, lapack_int *ifailv, lapack_int *info)
void LAPACK_dstein (lapack_int *n, const double *d, const double *e,
lapack_int *m, const double *w, const lapack_int *iblock, const
lapack_int *isplit, double *z, lapack_int *ldz, double *work,
lapack_int *iwork, lapack_int *ifailv, lapack_int *info)
void LAPACK_cstein (lapack_int *n, const float *d, const float *e,
lapack_int *m, const float *w, const lapack_int *iblock, const
lapack_int *isplit, lapack_complex_float *z, lapack_int *ldz, float
*work, lapack_int *iwork, lapack_int *ifailv, lapack_int *info)
void LAPACK_zstein (lapack_int *n, const double *d, const double *e,
lapack_int *m, const double *w, const lapack_int *iblock, const
lapack_int *isplit, lapack_complex_double *z, lapack_int *ldz,
double *work, lapack_int *iwork, lapack_int *ifailv, lapack_int
*info)
void LAPACK_sdisna (char *job, lapack_int *m, lapack_int *n, const float
*d, float *sep, lapack_int *info)
void LAPACK_ddisna (char *job, lapack_int *m, lapack_int *n, const
double *d, double *sep, lapack_int *info)
not the const qualifiers on d and e 👀 stebz and stein are not letting you touch their inputs, periodt. and disna is the tiny two-precision one at the end with just job, m, n, d, sep, info — she's baby, she's brief, she's valid 💖
🔥 the …gst generalized crew: sygst, hegst, spgst, hpgst, sbgst, hbgst
void LAPACK_ssygst (lapack_int *itype, char *uplo, lapack_int *n, float
*a, lapack_int *lda, const float *b, lapack_int *ldb, lapack_int
*info)
void LAPACK_dsygst (lapack_int *itype, char *uplo, lapack_int *n, double
*a, lapack_int *lda, const double *b, lapack_int *ldb, lapack_int
*info)
void LAPACK_chegst (lapack_int *itype, char *uplo, lapack_int *n,
lapack_complex_float *a, lapack_int *lda, const lapack_complex_float
*b, lapack_int *ldb, lapack_int *info)
void LAPACK_zhegst (lapack_int *itype, char *uplo, lapack_int *n,
lapack_complex_double *a, lapack_int *lda, const
lapack_complex_double *b, lapack_int *ldb, lapack_int *info)
void LAPACK_sspgst (lapack_int *itype, char *uplo, lapack_int *n, float
*ap, const float *bp, lapack_int *info)
void LAPACK_dspgst (lapack_int *itype, char *uplo, lapack_int *n, double
*ap, const double *bp, lapack_int *info)
void LAPACK_chpgst (lapack_int *itype, char *uplo, lapack_int *n,
lapack_complex_float *ap, const lapack_complex_float *bp, lapack_int
*info)
void LAPACK_zhpgst (lapack_int *itype, char *uplo, lapack_int *n,
lapack_complex_double *ap, const lapack_complex_double *bp,
lapack_int *info)
void LAPACK_ssbgst (char *vect, char *uplo, lapack_int *n, lapack_int
*ka, lapack_int *kb, float *ab, lapack_int *ldab, const float *bb,
lapack_int *ldbb, float *x, lapack_int *ldx, float *work, lapack_int
*info)
void LAPACK_dsbgst (char *vect, char *uplo, lapack_int *n, lapack_int
*ka, lapack_int *kb, double *ab, lapack_int *ldab, const double *bb,
lapack_int *ldbb, double *x, lapack_int *ldx, double *work,
lapack_int *info)
void LAPACK_chbgst (char *vect, char *uplo, lapack_int *n, lapack_int
*ka, lapack_int *kb, lapack_complex_float *ab, lapack_int *ldab,
const lapack_complex_float *bb, lapack_int *ldbb,
lapack_complex_float *x, lapack_int *ldx, lapack_complex_float
*work, float *rwork, lapack_int *info)
void LAPACK_zhbgst (char *vect, char *uplo, lapack_int *n, lapack_int
*ka, lapack_int *kb, lapack_complex_double *ab, lapack_int *ldab,
const lapack_complex_double *bb, lapack_int *ldbb,
lapack_complex_double *x, lapack_int *ldx, lapack_complex_double
*work, double *rwork, lapack_int *info)
a whole family reunion 😭 sygst/hegst take a, lda, b, ldb; the packed spgst/hpgst swap in ap/bp and drop the ld* args entirely (packed = no leading dimension, no thoughts, head empty ✨); and the banded sbgst/hbgst show up with ka, kb, ab, ldab, bb, ldbb, x, ldx, work… and the complex ones ALSO get rwork because of course they do. and every single one has b/bp/bb marked const — do NOT touch, she's just here to be referenced 🔒
🧚 pbstf — small but mighty
void LAPACK_spbstf (char *uplo, lapack_int *n, lapack_int *kb, float
*bb, lapack_int *ldbb, lapack_int *info)
void LAPACK_dpbstf (char *uplo, lapack_int *n, lapack_int *kb, double
*bb, lapack_int *ldbb, lapack_int *info)
void LAPACK_cpbstf (char *uplo, lapack_int *n, lapack_int *kb,
lapack_complex_float *bb, lapack_int *ldbb, lapack_int *info)
void LAPACK_zpbstf (char *uplo, lapack_int *n, lapack_int *kb,
lapack_complex_double *bb, lapack_int *ldbb, lapack_int *info)
six args, four precisions, zero notes. she ate and left absolutely no crumbs 🍓
👑 Hessenberg hours: gehrd, orghr, ormhr
void LAPACK_sgehrd (lapack_int *n, lapack_int *ilo, lapack_int *ihi,
float *a, lapack_int *lda, float *tau, float *work, lapack_int
*lwork, lapack_int *info)
void LAPACK_dgehrd (lapack_int *n, lapack_int *ilo, lapack_int *ihi,
double *a, lapack_int *lda, double *tau, double *work, lapack_int
*lwork, lapack_int *info)
void LAPACK_cgehrd (lapack_int *n, lapack_int *ilo, lapack_int *ihi,
lapack_complex_float *a, lapack_int *lda, lapack_complex_float *tau,
lapack_complex_float *work, lapack_int *lwork, lapack_int *info)
void LAPACK_zgehrd (lapack_int *n, lapack_int *ilo, lapack_int *ihi,
lapack_complex_double *a, lapack_int *lda, lapack_complex_double
*tau, lapack_complex_double *work, lapack_int *lwork, lapack_int
*info)
void LAPACK_sorghr (lapack_int *n, lapack_int *ilo, lapack_int *ihi,
float *a, lapack_int *lda, const float *tau, float *work, lapack_int
*lwork, lapack_int *info)
void LAPACK_dorghr (lapack_int *n, lapack_int *ilo, lapack_int *ihi,
double *a, lapack_int *lda, const double *tau, double *work,
lapack_int *lwork, lapack_int *info)
void LAPACK_sormhr (char *side, char *trans, lapack_int *m, lapack_int
*n, lapack_int *ilo, lapack_int *ihi, const float *a, lapack_int
*lda, const float *tau, float *c, lapack_int *ldc, float *work,
lapack_int *lwork, lapack_int *info)
void LAPACK_dormhr (char *side, char *trans, lapack_int *m, lapack_int
okay so gehrd is the one doing the actual work, then orghr swoops in and — wait, notice she takes const float *tau? yep, tau is read-only for her, she's just borrowing it 🫶. and ormhr came through with side, trans, m, n, ilo, ihi, a, lda, tau, c, ldc, work, lwork, info — dormhr is literally mid-sentence right there and then the page cuts off 😭 she's getting finished next time, hold please, don't panic, she'll be back 💀
ngl this stretch is a LOT of prototypes back to back — but every single one is doing her little job and we respect the hustle. more coming, stay tuned bestie 🌈
...and we're still deep in the SYNOPSIS hallway, bestie, don't panic 🫶. Last part we were mid-dunmhr — the signature just ✨continued✨ — so here's the tail of it, and then the complex unghr/unmhr girlies roll in right behind:
*n, lapack_int *ilo, lapack_int *ihi, const double *a, lapack_int
*lda, const double *tau, double *c, lapack_int *ldc, double *work,
lapack_int *lwork, lapack_int *info)
void LAPACK_cunghr (lapack_int *n, lapack_int *ilo, lapack_int *ihi,
lapack_complex_float *a, lapack_int *lda, const lapack_complex_float
*tau, lapack_complex_float *work, lapack_int *lwork, lapack_int
*info)
void LAPACK_zunghr (lapack_int *n, lapack_int *ilo, lapack_int *ihi,
lapack_complex_double *a, lapack_int *lda, const
lapack_complex_double *tau, lapack_complex_double *work, lapack_int
*lwork, lapack_int *info)
void LAPACK_cunmhr (char *side, char *trans, lapack_int *m, lapack_int
*n, lapack_int *ilo, lapack_int *ihi, const lapack_complex_float *a,
lapack_int *lda, const lapack_complex_float *tau,
lapack_complex_float *c, lapack_int *ldc, lapack_complex_float
*work, lapack_int *lwork, lapack_int *info)
void LAPACK_zunmhr (char *side, char *trans, lapack_int *m, lapack_int
*n, lapack_int *ilo, lapack_int *ihi, const lapack_complex_double
*a, lapack_int *lda, const lapack_complex_double *tau,
lapack_complex_double *c, lapack_int *ldc, lapack_complex_double
*work, lapack_int *lwork, lapack_int *info)
Obsessed with how every single argument is a pointer 💅 — *n, *ilo, *ihi, even *info (the girl who reports back). And note the m/n combo on the unmhr pair: two dimension ints, side, trans, no cap 🎀.
🦋 the gebal / gebak quartet, aka the balancing girlies
Four variants, same shape: s and d take plain float/double, c and z take lapack_complex_float/lapack_complex_double — but all four hand you back a real scale array (float *scale or double *scale, never complex, iykyk 🌸).
void LAPACK_sgebal (char *job, lapack_int *n, float *a, lapack_int *lda,
lapack_int *ilo, lapack_int *ihi, float *scale, lapack_int *info)
void LAPACK_dgebal (char *job, lapack_int *n, double *a, lapack_int
*lda, lapack_int *ilo, lapack_int *ihi, double *scale, lapack_int
*info)
void LAPACK_cgebal (char *job, lapack_int *n, lapack_complex_float *a,
lapack_int *lda, lapack_int *ilo, lapack_int *ihi, float *scale,
lapack_int *info)
void LAPACK_zgebal (char *job, lapack_int *n, lapack_complex_double *a,
lapack_int *lda, lapack_int *ilo, lapack_int *ihi, double *scale,
lapack_int *info)
void LAPACK_sgebak (char *job, char *side, lapack_int *n, lapack_int
*ilo, lapack_int *ihi, const float *scale, lapack_int *m, float *v,
lapack_int *ldv, lapack_int *info)
void LAPACK_dgebak (char *job, char *side, lapack_int *n, lapack_int
*ilo, lapack_int *ihi, const double *scale, lapack_int *m, double
*v, lapack_int *ldv, lapack_int *info)
void LAPACK_cgebak (char *job, char *side, lapack_int *n, lapack_int
*ilo, lapack_int *ihi, const float *scale, lapack_int *m,
lapack_complex_float *v, lapack_int *ldv, lapack_int *info)
void LAPACK_zgebak (char *job, char *side, lapack_int *n, lapack_int
*ilo, lapack_int *ihi, const double *scale, lapack_int *m,
lapack_complex_double *v, lapack_int *ldv, lapack_int *info)
Cute detail: in the gebak girlies the scale gets a const glow-up (const float *scale, const double *scale) while the v matrix stays mutable — the way that job and side are char * (yes, char pointers, not chars, don't come for me 😭).
✨ hseqr — queen of the lwork trio
All four take job, compz, n, ilo, ihi, the h matrix with ldh, then the eigen-output, then z with ldz, then work + lwork + info. The real girlies (s/d) split their eigenvalues into two arrays: wr and wi 💖. The complex girlies (c/z) just need the one w.
void LAPACK_shseqr (char *job, char *compz, lapack_int *n, lapack_int
*ilo, lapack_int *ihi, float *h, lapack_int *ldh, float *wr, float
*wi, float *z, lapack_int *ldz, float *work, lapack_int *lwork,
lapack_int *info)
void LAPACK_dhseqr (char *job, char *compz, lapack_int *n, lapack_int
*ilo, lapack_int *ihi, double *h, lapack_int *ldh, double *wr,
double *wi, double *z, lapack_int *ldz, double *work, lapack_int
*lwork, lapack_int *info)
void LAPACK_chseqr (char *job, char *compz, lapack_int *n, lapack_int
*ilo, lapack_int *ihi, lapack_complex_float *h, lapack_int *ldh,
lapack_complex_float *w, lapack_complex_float *z, lapack_int *ldz,
lapack_complex_float *work, lapack_int *lwork, lapack_int *info)
void LAPACK_zhseqr (char *job, char *compz, lapack_int *n, lapack_int
*ilo, lapack_int *ihi, lapack_complex_double *h, lapack_int *ldh,
lapack_complex_double *w, lapack_complex_double *z, lapack_int *ldz,
lapack_complex_double *work, lapack_int *lwork, lapack_int *info)
🎀 hsein — the long-signature icon
Ok this one ate. Look at job, eigsrc, initv, select, n, h/ldh, the eigen stuff, vl/ldvl, vr/ldvr, mm, m, work, the ifails, and info — that's a whole group chat in one function call 🌈.
Small thing but I'm noting it: the real variants (shsein,dhsein) declarelapack_logical *selectwithoutconst, and the complex ones (chsein,zhsein) declareconst lapack_logical *select. Also the complex girlies get an extra realrworkarray (float *rwork/double *rwork) that the real ones don't have. Copy the prototype exactly, bestie, or the compiler will simply end you 💀.
void LAPACK_shsein (char *job, char *eigsrc, char *initv, lapack_logical
*select, lapack_int *n, const float *h, lapack_int *ldh, float *wr,
const float *wi, float *vl, lapack_int *ldvl, float *vr, lapack_int
*ldvr, lapack_int *mm, lapack_int *m, float *work, lapack_int
*ifaill, lapack_int *ifailr, lapack_int *info)
void LAPACK_dhsein (char *job, char *eigsrc, char *initv, lapack_logical
*select, lapack_int *n, const double *h, lapack_int *ldh, double
*wr, const double *wi, double *vl, lapack_int *ldvl, double *vr,
lapack_int *ldvr, lapack_int *mm, lapack_int *m, double *work,
lapack_int *ifaill, lapack_int *ifailr, lapack_int *info)
void LAPACK_chsein (char *job, char *eigsrc, char *initv, const
lapack_logical *select, lapack_int *n, const lapack_complex_float
*h, lapack_int *ldh, lapack_complex_float *w, lapack_complex_float
*vl, lapack_int *ldvl, lapack_complex_float *vr, lapack_int *ldvr,
lapack_int *mm, lapack_int *m, lapack_complex_float *work, float
*rwork, lapack_int *ifaill, lapack_int *ifailr, lapack_int *info)
void LAPACK_zhsein (char *job, char *eigsrc, char *initv, const
lapack_logical *select, lapack_int *n, const lapack_complex_double
*h, lapack_int *ldh, lapack_complex_double *w, lapack_complex_double
*vl, lapack_int *ldvl, lapack_complex_double *vr, lapack_int *ldvr,
lapack_int *mm, lapack_int *m, lapack_complex_double *work, double
*rwork, lapack_int *ifaill, lapack_int *ifailr, lapack_int *info)
Also hi, mm and m sitting right next to each other — do not mix them up, that's not a vibe check you want to fail 🙈.
🍓 trevc & trsna — the select squad
trevc takes side, howmny, select, n, the t matrix + ldt, then vl/ldvl and vr/ldvr, then mm, m, work, info. Same const situation as before: real ones are non-const lapack_logical *select, complex ones are const lapack_logical *select, and complex ones carry the extra rwork at the end 💜.
void LAPACK_strevc (char *side, char *howmny, lapack_logical *select,
lapack_int *n, const float *t, lapack_int *ldt, float *vl,
lapack_int *ldvl, float *vr, lapack_int *ldvr, lapack_int *mm,
lapack_int *m, float *work, lapack_int *info)
void LAPACK_dtrevc (char *side, char *howmny, lapack_logical *select,
lapack_int *n, const double *t, lapack_int *ldt, double *vl,
lapack_int *ldvl, double *vr, lapack_int *ldvr, lapack_int *mm,
lapack_int *m, double *work, lapack_int *info)
void LAPACK_ctrevc (char *side, char *howmny, const lapack_logical
*select, lapack_int *n, lapack_complex_float *t, lapack_int *ldt,
lapack_complex_float *vl, lapack_int *ldvl, lapack_complex_float
*vr, lapack_int *ldvr, lapack_int *mm, lapack_int *m,
lapack_complex_float *work, float *rwork, lapack_int *info)
void LAPACK_ztrevc (char *side, char *howmny, const lapack_logical
*select, lapack_int *n, lapack_complex_double *t, lapack_int *ldt,
lapack_complex_double *vl, lapack_int *ldvl, lapack_complex_double
*vr, lapack_int *ldvr, lapack_int *mm, lapack_int *m,
lapack_complex_double *work, double *rwork, lapack_int *info)
trsna is the one with two output real arrays — s and sep — plus work and ldwork and iwork (lapack_int *iwork). It's giving "I brought snacks for everyone" energy 🧚. Real variants: float *s, float *sep / double *s, double *sep with lapack_int *ldwork and lapack_int *iwork. Complex variants: s and sep are still real (float/double), and they get that extra rwork again.
void LAPACK_strsna (char *job, char *howmny, const lapack_logical
*select, lapack_int *n, const float *t, lapack_int *ldt, const float
*vl, lapack_int *ldvl, const float *vr, lapack_int *ldvr, float *s,
float *sep, lapack_int *mm, lapack_int *m, float *work, lapack_int
*ldwork, lapack_int *iwork, lapack_int *info)
void LAPACK_dtrsna (char *job, char *howmny, const lapack_logical
*select, lapack_int *n, const double *t, lapack_int *ldt, const
double *vl, lapack_int *ldvl, const double *vr, lapack_int *ldvr,
double *s, double *sep, lapack_int *mm, lapack_int *m, double *work,
lapack_int *ldwork, lapack_int *iwork, lapack_int *info)
void LAPACK_ctrsna (char *job, char *howmny, const lapack_logical
*select, lapack_int *n, const lapack_complex_float *t, lapack_int
*ldt, const lapack_complex_float *vl, lapack_int *ldvl, const
lapack_complex_float *vr, lapack_int *ldvr, float *s, float *sep,
lapack_int *mm, lapack_int *m, lapack_complex_float *work,
lapack_int *ldwork, float *rwork, lapack_int *info)
void LAPACK_ztrsna (char *job, char *howmny, const lapack_logical
*select, lapack_int *n, const lapack_complex_double *t, lapack_int
*ldt, const lapack_complex_double *vl, lapack_int *ldvl, const
lapack_complex_double *vr, lapack_int *ldvr, double *s, double *sep,
lapack_int *mm, lapack_int *m, lapack_complex_double *work,
lapack_int *ldwork, double *rwork, lapack_int *info)
(trsna's select is const in all four here, unlike trevc — the way consistency is not always the moment 😭.)
🔥 trexc, trsen, trsyl — the closing trio of this batch
trexc is refreshingly chill: compq, n, t/ldt, q/ldq, ifst, ilst, work, info. No lwork, no rwork, no drama. The complex pair even drops work entirely. Slay 💅.
void LAPACK_strexc (char *compq, lapack_int *n, float *t, lapack_int
*ldt, float *q, lapack_int *ldq, lapack_int *ifst, lapack_int *ilst,
float *work, lapack_int *info)
void LAPACK_dtrexc (char *compq, lapack_int *n, double *t, lapack_int
*ldt, double *q, lapack_int *ldq, lapack_int *ifst, lapack_int
*ilst, double *work, lapack_int *info)
void LAPACK_ctrexc (char *compq, lapack_int *n, lapack_complex_float *t,
lapack_int *ldt, lapack_complex_float *q, lapack_int *ldq,
lapack_int *ifst, lapack_int *ilst, lapack_int *info)
void LAPACK_ztrexc (char *compq, lapack_int *n, lapack_complex_double
*t, lapack_int *ldt, lapack_complex_double *q, lapack_int *ldq,
lapack_int *ifst, lapack_int *ilst, lapack_int *info)
trsen is the maximalist bestie: job, compq, select, n, t/ldt, q/ldq, then eigenvalues, then m, s, sep, work + lwork, iwork + liwork, info. The real girlies split eigenvalues into wr + wi; the complex girlies use one w and skip iwork/liwork entirely — and the complex ctrsen/ztrsen don't take lwork… wait, no, they do take lwork (lapack_int *lwork), they just skip the integer workspace pair. Look at the prototypes, not at me 🫶.
void LAPACK_strsen (char *job, char *compq, const lapack_logical
*select, lapack_int *n, float *t, lapack_int *ldt, float *q,
lapack_int *ldq, float *wr, float *wi, lapack_int *m, float *s,
float *sep, float *work, lapack_int *lwork, lapack_int *iwork,
lapack_int *liwork, lapack_int *info)
void LAPACK_dtrsen (char *job, char *compq, const lapack_logical
*select, lapack_int *n, double *t, lapack_int *ldt, double *q,
lapack_int *ldq, double *wr, double *wi, lapack_int *m, double *s,
double *sep, double *work, lapack_int *lwork, lapack_int *iwork,
lapack_int *liwork, lapack_int *info)
void LAPACK_ctrsen (char *job, char *compq, const lapack_logical
*select, lapack_int *n, lapack_complex_float *t, lapack_int *ldt,
lapack_complex_float *q, lapack_int *ldq, lapack_complex_float *w,
lapack_int *m, float *s, float *sep, lapack_complex_float *work,
lapack_int *lwork, lapack_int *info)
void LAPACK_ztrsen (char *job, char *compq, const lapack_logical
*select, lapack_int *n, lapack_complex_double *t, lapack_int *ldt,
lapack_complex_double *q, lapack_int *ldq, lapack_complex_double *w,
lapack_int *m, double *s, double *sep, lapack_complex_double *work,
lapack_int *lwork, lapack_int *info)
Last up in this batch: trsyl ⭐ — trana, tranb, isgn, m, n, a/lda, b/ldb, c/ldc, scale, info. And in every single variant scale is real (float *scale / double *scale) even for ctrsyl and ztrsyl, whose a, b, c are all complex. Iconic. Also isgn is a lapack_int * in all four, no cap 🎀.
void LAPACK_strsyl (char *trana, char *tranb, lapack_int *isgn,
lapack_int *m, lapack_int *n, const float *a, lapack_int *lda, const
float *b, lapack_int *ldb, float *c, lapack_int *ldc, float *scale,
lapack_int *info)
void LAPACK_dtrsyl (char *trana, char *tranb, lapack_int *isgn,
lapack_int *m, lapack_int *n, const double *a, lapack_int *lda,
const double *b, lapack_int *ldb, double *c, lapack_int *ldc, double
*scale, lapack_int *info)
void LAPACK_ctrsyl (char *trana, char *tranb, lapack_int *isgn,
lapack_int *m, lapack_int *n, const lapack_complex_float *a,
lapack_int *lda, const lapack_complex_float *b, lapack_int *ldb,
lapack_complex_float *c, lapack_int *ldc, float *scale, lapack_int
*info)
void LAPACK_ztrsyl (char *trana, char *tranb, lapack_int *isgn,
lapack_int *m, lapack_int *n, const lapack_complex_double *a,
lapack_int *lda, const lapack_complex_double *b, lapack_int *ldb,
And that's exactly where this chunk cuts off — ztrsyl mid-signature, the cliffhanger of it all 💀. Keep scrolling bestie, the prototypes literally do not stop coming 💖.
okay so we're still very much in the prototype wall, and yes it's giving phone book energy 💅 but every single line here is a real baddie so we lock in. Also bestie — we literally start mid-signature, the last few lines of the previous one, no cap:
lapack_complex_double *c, lapack_int *ldc, double *scale, lapack_int
*info)
that's it, that's the whole tail, and then we're free 🌸
The Hessenberg-triangular reduction girlies: gghrd — four of them, one per precision, same energy, compq and compz decide what happens to q and z, ilo/ihi are your index bounds, and info is the vibe check at the end.
void LAPACK_sgghrd (char *compq, char *compz, lapack_int *n, lapack_int *ilo, lapack_int *ihi, float *a, lapack_int *lda, float *b, lapack_int *ldb, float *q, lapack_int *ldq, float *z, lapack_int *ldz, lapack_int *info)
void LAPACK_dgghrd (char *compq, char *compz, lapack_int *n, lapack_int *ilo, lapack_int *ihi, double *a, lapack_int *lda, double *b, lapack_int *ldb, double *q, lapack_int *ldq, double *z, lapack_int *ldz, lapack_int *info)
void LAPACK_cgghrd (char *compq, char *compz, lapack_int *n, lapack_int *ilo, lapack_int *ihi, lapack_complex_float *a, lapack_int *lda, lapack_complex_float *b, lapack_int *ldb, lapack_complex_float *q, lapack_int *ldq, lapack_complex_float *z, lapack_int *ldz, lapack_int *info)
void LAPACK_zgghrd (char *compq, char *compz, lapack_int *n, lapack_int *ilo, lapack_int *ihi, lapack_complex_double *a, lapack_int *lda, lapack_complex_double *b, lapack_int *ldb, lapack_complex_double *q, lapack_int *ldq, lapack_complex_double *z, lapack_int *ldz, lapack_int *info)
gghd3 walked in like the upgraded version of the same fit — literally the same argument list but with work and lwork tacked on before info, because blocked algorithms need scratch space and they said so 🫶
void LAPACK_sgghd3 (char *compq, char *compz, lapack_int *n, lapack_int *ilo, lapack_int *ihi, float *a, lapack_int *lda, float *b, lapack_int *ldb, float *q, lapack_int *ldq, float *z, lapack_int *ldz, float *work, lapack_int *lwork, lapack_int *info)
void LAPACK_dgghd3 (char *compq, char *compz, lapack_int *n, lapack_int *ilo, lapack_int *ihi, double *a, lapack_int *lda, double *b, lapack_int *ldb, double *q, lapack_int *ldq, double *z, lapack_int *ldz, double *work, lapack_int *lwork, lapack_int *info)
void LAPACK_cgghd3 (char *compq, char *compz, lapack_int *n, lapack_int *ilo, lapack_int *ihi, lapack_complex_float *a, lapack_int *lda, lapack_complex_float *b, lapack_int *ldb, lapack_complex_float *q, lapack_int *ldq, lapack_complex_float *z, lapack_int *ldz, lapack_complex_float *work, lapack_int *lwork, lapack_int *info)
void LAPACK_zgghd3 (char *compq, char *compz, lapack_int *n, lapack_int *ilo, lapack_int *ihi, lapack_complex_double *a, lapack_int *lda, lapack_complex_double *b, lapack_int *ldb, lapack_complex_double *q, lapack_int *ldq, lapack_complex_double *z, lapack_int *ldz, lapack_complex_double *work, lapack_int *lwork, lapack_int *info)
balancing act, literally: ggbal and ggbak — ggbal is the one doing the permute-and-scale, handing you back ilo, ihi, lscale, rscale and a work array. Notice the real ones get float/double scaling factors even in the complex versions — that's not a typo, that's the design 😌
void LAPACK_sggbal (char *job, lapack_int *n, float *a, lapack_int *lda, float *b, lapack_int *ldb, lapack_int *ilo, lapack_int *ihi, float *lscale, float *rscale, float *work, lapack_int *info)
void LAPACK_dggbal (char *job, lapack_int *n, double *a, lapack_int *lda, double *b, lapack_int *ldb, lapack_int *ilo, lapack_int *ihi, double *lscale, double *rscale, double *work, lapack_int *info)
void LAPACK_cggbal (char *job, lapack_int *n, lapack_complex_float *a, lapack_int *lda, lapack_complex_float *b, lapack_int *ldb, lapack_int *ilo, lapack_int *ihi, float *lscale, float *rscale, float *work, lapack_int *info)
void LAPACK_zggbal (char *job, lapack_int *n, lapack_complex_double *a, lapack_int *lda, lapack_complex_double *b, lapack_int *ldb, lapack_int *ilo, lapack_int *ihi, double *lscale, double *rscale, double *work, lapack_int *info)
and ggbak is the undo button, taking lscale and rscale back as const (it's not touching them, promise 🎀), plus side, m, v and ldv.
void LAPACK_sggbak (char *job, char *side, lapack_int *n, lapack_int *ilo, lapack_int *ihi, const float *lscale, const float *rscale, lapack_int *m, float *v, lapack_int *ldv, lapack_int *info)
void LAPACK_dggbak (char *job, char *side, lapack_int *n, lapack_int *ilo, lapack_int *ihi, const double *lscale, const double *rscale, lapack_int *m, double *v, lapack_int *ldv, lapack_int *info)
void LAPACK_cggbak (char *job, char *side, lapack_int *n, lapack_int *ilo, lapack_int *ihi, const float *lscale, const float *rscale, lapack_int *m, lapack_complex_float *v, lapack_int *ldv, lapack_int *info)
void LAPACK_zggbak (char *job, char *side, lapack_int *n, lapack_int *ilo, lapack_int *ihi, const double *lscale, const double *rscale, lapack_int *m, lapack_complex_double *v, lapack_int *ldv, lapack_int *info)
the QZ moment: hgeqz — h and t in, alphar, alphai, beta out (or plain alpha/beta in the complex ones, no cap). Real versions carry work/lwork; complex versions also carry rwork because of course they do 😭
void LAPACK_shgeqz (char *job, char *compq, char *compz, lapack_int *n, lapack_int *ilo, lapack_int *ihi, float *h, lapack_int *ldh, float *t, lapack_int *ldt, float *alphar, float *alphai, float *beta, float *q, lapack_int *ldq, float *z, lapack_int *ldz, float *work, lapack_int *lwork, lapack_int *info)
void LAPACK_dhgeqz (char *job, char *compq, char *compz, lapack_int *n, lapack_int *ilo, lapack_int *ihi, double *h, lapack_int *ldh, double *t, lapack_int *ldt, double *alphar, double *alphai, double *beta, double *q, lapack_int *ldq, double *z, lapack_int *ldz, double *work, lapack_int *lwork, lapack_int *info)
void LAPACK_chgeqz (char *job, char *compq, char *compz, lapack_int *n, lapack_int *ilo, lapack_int *ihi, lapack_complex_float *h, lapack_int *ldh, lapack_complex_float *t, lapack_int *ldt, lapack_complex_float *alpha, lapack_complex_float *beta, lapack_complex_float *q, lapack_int *ldq, lapack_complex_float *z, lapack_int *ldz, lapack_complex_float *work, lapack_int *lwork, float *rwork, lapack_int *info)
void LAPACK_zhgeqz (char *job, char *compq, char *compz, lapack_int *n, lapack_int *ilo, lapack_int *ihi, lapack_complex_double *h, lapack_int *ldh, lapack_complex_double *t, lapack_int *ldt, lapack_complex_double *alpha, lapack_complex_double *beta, lapack_complex_double *q, lapack_int *ldq, lapack_complex_double *z, lapack_int *ldz, lapack_complex_double *work, lapack_int *lwork, double *rwork, lapack_int *info)
eigenvector era: tgevc — side, howmny, a const lapack_logical *select, then s/p in and vl/vr out, with mm, m and work. Complex girlies get rwork too, because extra 🦋
void LAPACK_stgevc (char *side, char *howmny, const lapack_logical *select, lapack_int *n, const float *s, lapack_int *lds, const float *p, lapack_int *ldp, float *vl, lapack_int *ldvl, float *vr, lapack_int *ldvr, lapack_int *mm, lapack_int *m, float *work, lapack_int *info)
void LAPACK_dtgevc (char *side, char *howmny, const lapack_logical *select, lapack_int *n, const double *s, lapack_int *lds, const double *p, lapack_int *ldp, double *vl, lapack_int *ldvl, double *vr, lapack_int *ldvr, lapack_int *mm, lapack_int *m, double *work, lapack_int *info)
void LAPACK_ctgevc (char *side, char *howmny, const lapack_logical *select, lapack_int *n, const lapack_complex_float *s, lapack_int *lds, const lapack_complex_float *p, lapack_int *ldp, lapack_complex_float *vl, lapack_int *ldvl, lapack_complex_float *vr, lapack_int *ldvr, lapack_int *mm, lapack_int *m, lapack_complex_float *work, float *rwork, lapack_int *info)
void LAPACK_ztgevc (char *side, char *howmny, const lapack_logical *select, lapack_int *n, const lapack_complex_double *s, lapack_int *lds, const lapack_complex_double *p, lapack_int *ldp, lapack_complex_double *vl, lapack_int *ldvl, lapack_complex_double *vr, lapack_int *ldvr, lapack_int *mm, lapack_int *m, lapack_complex_double *work, double *rwork, lapack_int *info)
reordering szn: tgexc — wantq and wantz are lapack_logical * here, and you pass ifst/ilst. Sneaky detail bestie: the real ones take work and lwork, the complex ones go straight from ilst to info 👑
void LAPACK_stgexc (lapack_logical *wantq, lapack_logical *wantz, lapack_int *n, float *a, lapack_int *lda, float *b, lapack_int *ldb, float *q, lapack_int *ldq, float *z, lapack_int *ldz, lapack_int *ifst, lapack_int *ilst, float *work, lapack_int *lwork, lapack_int *info)
void LAPACK_dtgexc (lapack_logical *wantq, lapack_logical *wantz, lapack_int *n, double *a, lapack_int *lda, double *b, lapack_int *ldb, double *q, lapack_int *ldq, double *z, lapack_int *ldz, lapack_int *ifst, lapack_int *ilst, double *work, lapack_int *lwork, lapack_int *info)
void LAPACK_ctgexc (lapack_logical *wantq, lapack_logical *wantz, lapack_int *n, lapack_complex_float *a, lapack_int *lda, lapack_complex_float *b, lapack_int *ldb, lapack_complex_float *q, lapack_int *ldq, lapack_complex_float *z, lapack_int *ldz, lapack_int *ifst, lapack_int *ilst, lapack_int *info)
void LAPACK_ztgexc (lapack_logical *wantq, lapack_logical *wantz, lapack_int *n, lapack_complex_double *a, lapack_int *lda, lapack_complex_double *b, lapack_int *ldb, lapack_complex_double *q, lapack_int *ldq, lapack_complex_double *z, lapack_int *ldz, lapack_int *ifst, lapack_int *ilst, lapack_int *info)
tgsen said "and I oop" — biggest glow-up in the group: ijob up front, select as const lapack_logical *, and out come m, pl, pr, dif, plus work/lwork and iwork/liwork. Real ones get alphar/alphai, complex ones just get alpha. Different fits, same function family 💖
void LAPACK_stgsen (lapack_int *ijob, lapack_logical *wantq, lapack_logical *wantz, const lapack_logical *select, lapack_int *n, float *a, lapack_int *lda, float *b, lapack_int *ldb, float *alphar, float *alphai, float *beta, float *q, lapack_int *ldq, float *z, lapack_int *ldz, lapack_int *m, float *pl, float *pr, float *dif, float *work, lapack_int *lwork, lapack_int *iwork, lapack_int *liwork, lapack_int *info)
void LAPACK_dtgsen (lapack_int *ijob, lapack_logical *wantq, lapack_logical *wantz, const lapack_logical *select, lapack_int *n, double *a, lapack_int *lda, double *b, lapack_int *ldb, double *alphar, double *alphai, double *beta, double *q, lapack_int *ldq, double *z, lapack_int *ldz, lapack_int *m, double *pl, double *pr, double *dif, double *work, lapack_int *lwork, lapack_int *iwork, lapack_int *liwork, lapack_int *info)
void LAPACK_ctgsen (lapack_int *ijob, lapack_logical *wantq, lapack_logical *wantz, const lapack_logical *select, lapack_int *n, lapack_complex_float *a, lapack_int *lda, lapack_complex_float *b, lapack_int *ldb, lapack_complex_float *alpha, lapack_complex_float *beta, lapack_complex_float *q, lapack_int *ldq, lapack_complex_float *z, lapack_int *ldz, lapack_int *m, float *pl, float *pr, float *dif, lapack_complex_float *work, lapack_int *lwork, lapack_int *iwork, lapack_int *liwork, lapack_int *info)
void LAPACK_ztgsen (lapack_int *ijob, lapack_logical *wantq, lapack_logical *wantz, const lapack_logical *select, lapack_int *n, lapack_complex_double *a, lapack_int *lda, lapack_complex_double *b, lapack_int *ldb, lapack_complex_double *alpha, lapack_complex_double *beta, lapack_complex_double *q, lapack_int *ldq, lapack_complex_double *z, lapack_int *ldz, lapack_int *m, double *pl, double *pr, double *dif, lapack_complex_double *work, lapack_int *lwork, lapack_int *iwork, lapack_int *liwork, lapack_int *info)
and then tgsyl shows up with trans, ijob, m, n and a whole ensemble cast — a, b, c, d, e, f, scale, dif, work, lwork, iwork, info — and it starts like this:
void LAPACK_stgsyl (char *trans, lapack_int *ijob, lapack_int *m, lapack_int *n, const float *a, lapack_int *lda, const float *b, lapack_int *ldb, float *c, lapack_int *ldc, const float *d, lapack_int *ldd, const float *e, lapack_int *lde, float *f, lapack_int *ldf, float *scale, float *dif, float *work, lapack_int *lwork, lapack_int *iwork, lapack_int *info)
void LAPACK_dtgsyl (char *trans, lapack_int *ijob, lapack_int *m, lapack_int *n, const double *a, lapack_int *lda, const double *b,
and yeah — we get cut off mid-signature, right at const double *b, 😭 to be continued bestie, the rest is coming 💜
okay so we're picking up mid-signature, no big deal, it's giving "walked into the group chat mid-sentence" 💀 — this is the tail end of the <double> solver prototype, all pointers and no chill:
lapack_int *ldb, double *c, lapack_int *ldc, const double *d,
lapack_int *ldd, const double *e, lapack_int *lde, double *f,
lapack_int *ldf, double *scale, double *dif, double *work,
lapack_int *lwork, lapack_int *iwork, lapack_int *info)
and then the complex girlies show up to the same party 💅 <float> first, then <double>:
void LAPACK_ctgsyl (char *trans, lapack_int *ijob, lapack_int *m,
lapack_int *n, const lapack_complex_float *a, lapack_int *lda, const
lapack_complex_float *b, lapack_int *ldb, lapack_complex_float *c,
lapack_int *ldc, const lapack_complex_float *d, lapack_int *ldd,
const lapack_complex_float *e, lapack_int *lde, lapack_complex_float
*f, lapack_int *ldf, float *scale, float *dif, lapack_complex_float
*work, lapack_int *lwork, lapack_int *iwork, lapack_int *info)
void LAPACK_ztgsyl (char *trans, lapack_int *ijob, lapack_int *m,
lapack_int *n, const lapack_complex_double *a, lapack_int *lda,
const lapack_complex_double *b, lapack_int *ldb,
lapack_complex_double *c, lapack_int *ldc, const
lapack_complex_double *d, lapack_int *ldd, const
lapack_complex_double *e, lapack_int *lde, lapack_complex_double *f,
lapack_int *ldf, double *scale, double *dif, lapack_complex_double
*work, lapack_int *lwork, lapack_int *iwork, lapack_int *info)
like, the way ijob just sits there being a whole <char>… main character energy fr fr 🌟
next up: the <tgsna> squad, and bestie, they brought a select array of type <lapack_logical> which is so real of them ✨ all four flavours, in order <s>, <d>, <c>, <z>:
void LAPACK_stgsna (char *job, char *howmny, const lapack_logical
*select, lapack_int *n, const float *a, lapack_int *lda, const float
*b, lapack_int *ldb, const float *vl, lapack_int *ldvl, const float
*vr, lapack_int *ldvr, float *s, float *dif, lapack_int *mm,
lapack_int *m, float *work, lapack_int *lwork, lapack_int *iwork,
lapack_int *info)
void LAPACK_dtgsna (char *job, char *howmny, const lapack_logical
*select, lapack_int *n, const double *a, lapack_int *lda, const
double *b, lapack_int *ldb, const double *vl, lapack_int *ldvl,
const double *vr, lapack_int *ldvr, double *s, double *dif,
lapack_int *mm, lapack_int *m, double *work, lapack_int *lwork,
lapack_int *iwork, lapack_int *info)
void LAPACK_ctgsna (char *job, char *howmny, const lapack_logical
*select, lapack_int *n, const lapack_complex_float *a, lapack_int
*lda, const lapack_complex_float *b, lapack_int *ldb, const
lapack_complex_float *vl, lapack_int *ldvl, const
lapack_complex_float *vr, lapack_int *ldvr, float *s, float *dif,
lapack_int *mm, lapack_int *m, lapack_complex_float *work,
lapack_int *lwork, lapack_int *iwork, lapack_int *info)
void LAPACK_ztgsna (char *job, char *howmny, const lapack_logical
*select, lapack_int *n, const lapack_complex_double *a, lapack_int
*lda, const lapack_complex_double *b, lapack_int *ldb, const
lapack_complex_double *vl, lapack_int *ldvl, const
lapack_complex_double *vr, lapack_int *ldvr, double *s, double *dif,
lapack_int *mm, lapack_int *m, lapack_complex_double *work,
lapack_int *lwork, lapack_int *iwork, lapack_int *info)
notice <c> and <z> keep s and dif as plain <float> / <double> — iconic, no notes 🎀
okay <ggsvp> time!! four of them, <s> <d> <c> <z>, and the complex ones get an extra rwork because of course they do 🙈:
void LAPACK_sggsvp (char *jobu, char *jobv, char *jobq, lapack_int *m,
lapack_int *p, lapack_int *n, float *a, lapack_int *lda, float *b,
lapack_int *ldb, float *tola, float *tolb, lapack_int *k, lapack_int
*l, float *u, lapack_int *ldu, float *v, lapack_int *ldv, float *q,
lapack_int *ldq, lapack_int *iwork, float *tau, float *work,
lapack_int *info)
void LAPACK_dggsvp (char *jobu, char *jobv, char *jobq, lapack_int *m,
lapack_int *p, lapack_int *n, double *a, lapack_int *lda, double *b,
lapack_int *ldb, double *tola, double *tolb, lapack_int *k,
lapack_int *l, double *u, lapack_int *ldu, double *v, lapack_int
*ldv, double *q, lapack_int *ldq, lapack_int *iwork, double *tau,
double *work, lapack_int *info)
void LAPACK_cggsvp (char *jobu, char *jobv, char *jobq, lapack_int *m,
lapack_int *p, lapack_int *n, lapack_complex_float *a, lapack_int
*lda, lapack_complex_float *b, lapack_int *ldb, float *tola, float
*tolb, lapack_int *k, lapack_int *l, lapack_complex_float *u,
lapack_int *ldu, lapack_complex_float *v, lapack_int *ldv,
lapack_complex_float *q, lapack_int *ldq, lapack_int *iwork, float
*rwork, lapack_complex_float *tau, lapack_complex_float *work,
lapack_int *info)
void LAPACK_zggsvp (char *jobu, char *jobv, char *jobq, lapack_int *m,
lapack_int *p, lapack_int *n, lapack_complex_double *a, lapack_int
*lda, lapack_complex_double *b, lapack_int *ldb, double *tola,
double *tolb, lapack_int *k, lapack_int *l, lapack_complex_double
*u, lapack_int *ldu, lapack_complex_double *v, lapack_int *ldv,
lapack_complex_double *q, lapack_int *ldq, lapack_int *iwork, double
*rwork, lapack_complex_double *tau, lapack_complex_double *work,
lapack_int *info)
and then the 3 variants roll through like a sequel that actually ate 💅 same energy, but now with a whole lwork parameter because apparently work needed a budget:
void LAPACK_sggsvp3 (char *jobu, char *jobv, char *jobq, lapack_int *m,
lapack_int *p, lapack_int *n, float *a, lapack_int *lda, float *b,
lapack_int *ldb, float *tola, float *tolb, lapack_int *k, lapack_int
*l, float *u, lapack_int *ldu, float *v, lapack_int *ldv, float *q,
lapack_int *ldq, lapack_int *iwork, float *tau, float *work,
lapack_int *lwork, lapack_int *info)
void LAPACK_dggsvp3 (char *jobu, char *jobv, char *jobq, lapack_int *m,
lapack_int *p, lapack_int *n, double *a, lapack_int *lda, double *b,
lapack_int *ldb, double *tola, double *tolb, lapack_int *k,
lapack_int *l, double *u, lapack_int *ldu, double *v, lapack_int
*ldv, double *q, lapack_int *ldq, lapack_int *iwork, double *tau,
double *work, lapack_int *lwork, lapack_int *info)
void LAPACK_cggsvp3 (char *jobu, char *jobv, char *jobq, lapack_int *m,
lapack_int *p, lapack_int *n, lapack_complex_float *a, lapack_int
*lda, lapack_complex_float *b, lapack_int *ldb, float *tola, float
*tolb, lapack_int *k, lapack_int *l, lapack_complex_float *u,
lapack_int *ldu, lapack_complex_float *v, lapack_int *ldv,
lapack_complex_float *q, lapack_int *ldq, lapack_int *iwork, float
*rwork, lapack_complex_float *tau, lapack_complex_float *work,
lapack_int *lwork, lapack_int *info)
void LAPACK_zggsvp3 (char *jobu, char *jobv, char *jobq, lapack_int *m,
lapack_int *p, lapack_int *n, lapack_complex_double *a, lapack_int
*lda, lapack_complex_double *b, lapack_int *ldb, double *tola,
double *tolb, lapack_int *k, lapack_int *l, lapack_complex_double
*u, lapack_int *ldu, lapack_complex_double *v, lapack_int *ldv,
lapack_complex_double *q, lapack_int *ldq, lapack_int *iwork, double
*rwork, lapack_complex_double *tau, lapack_complex_double *work,
lapack_int *lwork, lapack_int *info)
lowkey the3versions are the upgraded ones — same name, extralwork, that's the whole difference you can see in the signature, and honestly that's enough for me 🫶
<tgsja> next, all four, and look at that ncycle at the end of each — cute name, no cap 🌸:
void LAPACK_stgsja (char *jobu, char *jobv, char *jobq, lapack_int *m,
lapack_int *p, lapack_int *n, lapack_int *k, lapack_int *l, float
*a, lapack_int *lda, float *b, lapack_int *ldb, float *tola, float
*tolb, float *alpha, float *beta, float *u, lapack_int *ldu, float
*v, lapack_int *ldv, float *q, lapack_int *ldq, float *work,
lapack_int *ncycle, lapack_int *info)
void LAPACK_dtgsja (char *jobu, char *jobv, char *jobq, lapack_int *m,
lapack_int *p, lapack_int *n, lapack_int *k, lapack_int *l, double
*a, lapack_int *lda, double *b, lapack_int *ldb, double *tola,
double *tolb, double *alpha, double *beta, double *u, lapack_int
*ldu, double *v, lapack_int *ldv, double *q, lapack_int *ldq, double
*work, lapack_int *ncycle, lapack_int *info)
void LAPACK_ctgsja (char *jobu, char *jobv, char *jobq, lapack_int *m,
lapack_int *p, lapack_int *n, lapack_int *k, lapack_int *l,
lapack_complex_float *a, lapack_int *lda, lapack_complex_float *b,
lapack_int *ldb, float *tola, float *tolb, float *alpha, float
*beta, lapack_complex_float *u, lapack_int *ldu,
lapack_complex_float *v, lapack_int *ldv, lapack_complex_float *q,
lapack_int *ldq, lapack_complex_float *work, lapack_int *ncycle,
lapack_int *info)
void LAPACK_ztgsja (char *jobu, char *jobv, char *jobq, lapack_int *m,
lapack_int *p, lapack_int *n, lapack_int *k, lapack_int *l,
lapack_complex_double *a, lapack_int *lda, lapack_complex_double *b,
lapack_int *ldb, double *tola, double *tolb, double *alpha, double
*beta, lapack_complex_double *u, lapack_int *ldu,
lapack_complex_double *v, lapack_int *ldv, lapack_complex_double *q,
lapack_int *ldq, lapack_complex_double *work, lapack_int *ncycle,
lapack_int *info)
now we're sliding into the least-squares girlies, <gels> first — <trans>, <m>, <n>, <nrhs>, and the classic <a>/<b>/<work>/<lwork> combo ⭐:
void LAPACK_sgels (char *trans, lapack_int *m, lapack_int *n, lapack_int
*nrhs, float *a, lapack_int *lda, float *b, lapack_int *ldb, float
*work, lapack_int *lwork, lapack_int *info)
void LAPACK_dgels (char *trans, lapack_int *m, lapack_int *n, lapack_int
*nrhs, double *a, lapack_int *lda, double *b, lapack_int *ldb,
double *work, lapack_int *lwork, lapack_int *info)
void LAPACK_cgels (char *trans, lapack_int *m, lapack_int *n, lapack_int
*nrhs, lapack_complex_float *a, lapack_int *lda,
lapack_complex_float *b, lapack_int *ldb, lapack_complex_float
*work, lapack_int *lwork, lapack_int *info)
void LAPACK_zgels (char *trans, lapack_int *m, lapack_int *n, lapack_int
*nrhs, lapack_complex_double *a, lapack_int *lda,
lapack_complex_double *b, lapack_int *ldb, lapack_complex_double
*work, lapack_int *lwork, lapack_int *info)
then <gelsy> pulls up with jpvt, rcond and rank in the mix, and no <trans> in sight — because it's a different function, bestie, don't come for me 😭:
void LAPACK_sgelsy (lapack_int *m, lapack_int *n, lapack_int *nrhs,
float *a, lapack_int *lda, float *b, lapack_int *ldb, lapack_int
*jpvt, float *rcond, lapack_int *rank, float *work, lapack_int
*lwork, lapack_int *info)
void LAPACK_dgelsy (lapack_int *m, lapack_int *n, lapack_int *nrhs,
double *a, lapack_int *lda, double *b, lapack_int *ldb, lapack_int
*jpvt, double *rcond, lapack_int *rank, double *work, lapack_int
*lwork, lapack_int *info)
void LAPACK_cgelsy (lapack_int *m, lapack_int *n, lapack_int *nrhs,
lapack_complex_float *a, lapack_int *lda, lapack_complex_float *b,
lapack_int *ldb, lapack_int *jpvt, float *rcond, lapack_int *rank,
lapack_complex_float *work, lapack_int *lwork, float *rwork,
lapack_int *info)
void LAPACK_zgelsy (lapack_int *m, lapack_int *n, lapack_int *nrhs,
lapack_complex_double *a, lapack_int *lda, lapack_complex_double *b,
lapack_int *ldb, lapack_int *jpvt, double *rcond, lapack_int *rank,
lapack_complex_double *work, lapack_int *lwork, double *rwork,
lapack_int *info)
see how <c> and <z> smuggle in that rwork right before <info>? slay for them, confusing for us, we move 🦋
and <gelss> is up next with its <s> output array — <s> for <sgelss>, <s> for <dgelss>… wait, no, <dgelss> gets a <double> version obviously, keeping it consistent is not the vibe today, and that's fine 💖:
void LAPACK_sgelss (lapack_int *m, lapack_int *n, lapack_int *nrhs,
float *a, lapack_int *lda, float *b, lapack_int *ldb, float *s,
float *rcond, lapack_int *rank, float *work, lapack_int *lwork,
lapack_int *info)
void LAPACK_dgelss (lapack_int *m, lapack_int *n, lapack_int *nrhs,
double *a, lapack_int *lda, double *b, lapack_int *ldb, double *s,
double *rcond, lapack_int *rank, double *work, lapack_int *lwork,
lapack_int *info)
void LAPACK_cgelss (lapack_int *m, lapack_int *n, lapack_int *nrhs,
and that's where we're cutting the music for this part, mid-<cgelss> — she's still going, we're just catching our breath 🎀🧚
okay so we're mid-glow-up on the cgelss prototype from last time, and honestly? she's still going. here's the rest of her signature, then the whole squad rolls in 💅
lapack_complex_float *a, lapack_int *lda, lapack_complex_float *b,
lapack_int *ldb, float *s, float *rcond, lapack_int *rank,
lapack_complex_float *work, lapack_int *lwork, float *rwork,
lapack_int *info)
void LAPACK_zgelss (lapack_int *m, lapack_int *n, lapack_int *nrhs,
lapack_complex_double *a, lapack_int *lda, lapack_complex_double *b,
lapack_int *ldb, double *s, double *rcond, lapack_int *rank,
lapack_complex_double *work, lapack_int *lwork, double *rwork,
lapack_int *info)
void LAPACK_sgelsd (lapack_int *m, lapack_int *n, lapack_int *nrhs,
float *a, lapack_int *lda, float *b, lapack_int *ldb, float *s,
float *rcond, lapack_int *rank, float *work, lapack_int *lwork,
lapack_int *iwork, lapack_int *info)
void LAPACK_dgelsd (lapack_int *m, lapack_int *n, lapack_int *nrhs,
double *a, lapack_int *lda, double *b, lapack_int *ldb, double *s,
double *rcond, lapack_int *rank, double *work, lapack_int *lwork,
lapack_int *iwork, lapack_int *info)
void LAPACK_cgelsd (lapack_int *m, lapack_int *n, lapack_int *nrhs,
lapack_complex_float *a, lapack_int *lda, lapack_complex_float *b,
lapack_int *ldb, float *s, float *rcond, lapack_int *rank,
lapack_complex_float *work, lapack_int *lwork, float *rwork,
lapack_int *iwork, lapack_int *info)
void LAPACK_zgelsd (lapack_int *m, lapack_int *n, lapack_int *nrhs,
lapack_complex_double *a, lapack_int *lda, lapack_complex_double *b,
lapack_int *ldb, double *s, double *rcond, lapack_int *rank,
lapack_complex_double *work, lapack_int *lwork, double *rwork,
lapack_int *iwork, lapack_int *info)
🌸 the gelss / gelsd squad
bestie, look at the way these four-packs are built: you got your s (float), d (double), c (complex float), z (complex double), and they're all matching each other parameter for parameter. the c and z girlies get an extra rwork bestie along for the ride, because complex math needs her, and the gelsd branch also brings iwork to the party. lwork is living its best life in every single one. and info is always last — she's the one who tells you if it went well or if it's giving disaster 💀 no cap, check her.
🦋 the gglse girls
void LAPACK_sgglse (lapack_int *m, lapack_int *n, lapack_int *p, float
*a, lapack_int *lda, float *b, lapack_int *ldb, float *c, float *d,
float *x, float *work, lapack_int *lwork, lapack_int *info)
void LAPACK_dgglse (lapack_int *m, lapack_int *n, lapack_int *p, double
*a, lapack_int *lda, double *b, lapack_int *ldb, double *c, double
*d, double *x, double *work, lapack_int *lwork, lapack_int *info)
void LAPACK_cgglse (lapack_int *m, lapack_int *n, lapack_int *p,
lapack_complex_float *a, lapack_int *lda, lapack_complex_float *b,
lapack_int *ldb, lapack_complex_float *c, lapack_complex_float *d,
lapack_complex_float *x, lapack_complex_float *work, lapack_int
*lwork, lapack_int *info)
void LAPACK_zgglse (lapack_int *m, lapack_int *n, lapack_int *p,
lapack_complex_double *a, lapack_int *lda, lapack_complex_double *b,
lapack_int *ldb, lapack_complex_double *c, lapack_complex_double *d,
lapack_complex_double *x, lapack_complex_double *work, lapack_int
*lwork, lapack_int *info)
three dimensions in, three letters out — m, n, p on the way in, and then a, b, c, d, x all vibing in the parameter list. lda and ldb are the leading-dimension girlies for a and b respectively (no ldc or ldd here, that's just how she is ✨). everybody's gotta bring their work and their lwork, and info closes the curtain.
🎀 the ggglm trio-energy
void LAPACK_sggglm (lapack_int *n, lapack_int *m, lapack_int *p, float
*a, lapack_int *lda, float *b, lapack_int *ldb, float *d, float *x,
float *y, float *work, lapack_int *lwork, lapack_int *info)
void LAPACK_dggglm (lapack_int *n, lapack_int *m, lapack_int *p, double
*a, lapack_int *lda, double *b, lapack_int *ldb, double *d, double
*x, double *y, double *work, lapack_int *lwork, lapack_int *info)
void LAPACK_cggglm (lapack_int *n, lapack_int *m, lapack_int *p,
lapack_complex_float *a, lapack_int *lda, lapack_complex_float *b,
lapack_int *ldb, lapack_complex_float *d, lapack_complex_float *x,
lapack_complex_float *y, lapack_complex_float *work, lapack_int
*lwork, lapack_int *info)
void LAPACK_zggglm (lapack_int *n, lapack_int *m, lapack_int *p,
lapack_complex_double *a, lapack_int *lda, lapack_complex_double *b,
lapack_int *ldb, lapack_complex_double *d, lapack_complex_double *x,
lapack_complex_double *y, lapack_complex_double *work, lapack_int
*lwork, lapack_int *info)
okay so compare her to gglse real quick because the tea is: here n comes first, then m, then p 🙈 (dish, not drama — that's just the signature). and she swaps c for d in the output crew, with x and y rounding it out. same lda, ldb, lwork, info besties as always.
👑 the symmetric eigen era, syev / syevd
void LAPACK_ssyev (char *jobz, char *uplo, lapack_int *n, float *a,
lapack_int *lda, float *w, float *work, lapack_int *lwork,
lapack_int *info)
void LAPACK_dsyev (char *jobz, char *uplo, lapack_int *n, double *a,
lapack_int *lda, double *w, double *work, lapack_int *lwork,
lapack_int *info)
void LAPACK_cheev (char *jobz, char *uplo, lapack_int *n,
lapack_complex_float *a, lapack_int *lda, float *w,
lapack_complex_float *work, lapack_int *lwork, float *rwork,
lapack_int *info)
void LAPACK_zheev (char *jobz, char *uplo, lapack_int *n,
lapack_complex_double *a, lapack_int *lda, double *w,
lapack_complex_double *work, lapack_int *lwork, double *rwork,
lapack_int *info)
void LAPACK_ssyevd (char *jobz, char *uplo, lapack_int *n, float *a,
lapack_int *lda, float *w, float *work, lapack_int *lwork,
lapack_int *iwork, lapack_int *liwork, lapack_int *info)
void LAPACK_dsyevd (char *jobz, char *uplo, lapack_int *n, double *a,
lapack_int *lda, double *w, double *work, lapack_int *lwork,
lapack_int *iwork, lapack_int *liwork, lapack_int *info)
void LAPACK_cheevd (char *jobz, char *uplo, lapack_int *n,
lapack_complex_float *a, lapack_int *lda, float *w,
lapack_complex_float *work, lapack_int *lwork, float *rwork,
lapack_int *lrwork, lapack_int *iwork, lapack_int *liwork,
lapack_int *info)
void LAPACK_zheevd (char *jobz, char *uplo, lapack_int *n,
lapack_complex_double *a, lapack_int *lda, double *w,
lapack_complex_double *work, lapack_int *lwork, double *rwork,
lapack_int *lrwork, lapack_int *iwork, lapack_int *liwork,
lapack_int *info)
the way these open with two char * girlies — jobz and uplo, both char *, both essential, both iconic ✨ — and then n, a, lda... and notice w is real even in the complex versions (float *w for cheev, double *w for zheev) which is genuinely so satisfying, because eigenvalues of these are real, periodt. the c/z versions also carry rwork, and once you hit that d suffix the iwork + liwork duo shows up, plus lrwork for the complex kids. that's a LOT of workspace girlies but they're all just doing their jobs 🫶
💜 syevx — the one with range and the ifail bestie
void LAPACK_ssyevx (char *jobz, char *range, char *uplo, lapack_int *n,
float *a, lapack_int *lda, float *vl, float *vu, lapack_int *il,
lapack_int *iu, float *abstol, lapack_int *m, float *w, float *z,
lapack_int *ldz, float *work, lapack_int *lwork, lapack_int *iwork,
lapack_int *ifail, lapack_int *info)
void LAPACK_dsyevx (char *jobz, char *range, char *uplo, lapack_int *n,
double *a, lapack_int *lda, double *vl, double *vu, lapack_int *il,
lapack_int *iu, double *abstol, lapack_int *m, double *w, double *z,
lapack_int *ldz, double *work, lapack_int *lwork, lapack_int *iwork,
lapack_int *ifail, lapack_int *info)
void LAPACK_cheevx (char *jobz, char *range, char *uplo, lapack_int *n,
lapack_complex_float *a, lapack_int *lda, float *vl, float *vu,
lapack_int *il, lapack_int *iu, float *abstol, lapack_int *m, float
*w, lapack_complex_float *z, lapack_int *ldz, lapack_complex_float
*work, lapack_int *lwork, float *rwork, lapack_int *iwork,
lapack_int *ifail, lapack_int *info)
void LAPACK_zheevx (char *jobz, char *range, char *uplo, lapack_int *n,
lapack_complex_double *a, lapack_int *lda, double *vl, double *vu,
lapack_int *il, lapack_int *iu, double *abstol, lapack_int *m,
double *w, lapack_complex_double *z, lapack_int *ldz,
lapack_complex_double *work, lapack_int *lwork, double *rwork,
lapack_int *iwork, lapack_int *ifail, lapack_int *info)
three char * now — jobz, range, uplo — main character energy fr fr. and she brought vl, vu, il, iu (range selectors, lowkey the whole point), plus abstol, an output m, the eigenvector matrix z with her own ldz, and ifail sitting right before info like a little loyalty check. also shoutout to the float *vl, float *vu line breaks, she is not fitting on one line and she does not care 💅
🌈 syevr — extra isuppz, extra workspace
void LAPACK_ssyevr (char *jobz, char *range, char *uplo, lapack_int *n,
float *a, lapack_int *lda, float *vl, float *vu, lapack_int *il,
lapack_int *iu, float *abstol, lapack_int *m, float *w, float *z,
lapack_int *ldz, lapack_int *isuppz, float *work, lapack_int *lwork,
lapack_int *iwork, lapack_int *liwork, lapack_int *info)
void LAPACK_dsyevr (char *jobz, char *range, char *uplo, lapack_int *n,
double *a, lapack_int *lda, double *vl, double *vu, lapack_int *il,
lapack_int *iu, double *abstol, lapack_int *m, double *w, double *z,
lapack_int *ldz, lapack_int *isuppz, double *work, lapack_int
*lwork, lapack_int *iwork, lapack_int *liwork, lapack_int *info)
void LAPACK_cheevr (char *jobz, char *range, char *uplo, lapack_int *n,
lapack_complex_float *a, lapack_int *lda, float *vl, float *vu,
lapack_int *il, lapack_int *iu, float *abstol, lapack_int *m, float
*w, lapack_complex_float *z, lapack_int *ldz, lapack_int *isuppz,
lapack_complex_float *work, lapack_int *lwork, float *rwork,
lapack_int *lrwork, lapack_int *iwork, lapack_int *liwork,
lapack_int *info)
void LAPACK_zheevr (char *jobz, char *range, char *uplo, lapack_int *n,
lapack_complex_double *a, lapack_int *lda, double *vl, double *vu,
lapack_int *il, lapack_int *iu, double *abstol, lapack_int *m,
double *w, lapack_complex_double *z, lapack_int *ldz, lapack_int
*isuppz, lapack_complex_double *work, lapack_int *lwork, double
*rwork, lapack_int *lrwork, lapack_int *iwork, lapack_int *liwork,
lapack_int *info)
versus syevx, bestie gains isuppz (right after ldz) and loses ifail entirely — a trade, and honestly she ate. she's also got the full workspace entourage: work/lwork, iwork/liwork, and for the complex girlies rwork/lrwork too. that's basically a whole group chat of buffers 😭
🧚 packed storage era: spev / spevd
void LAPACK_sspev (char *jobz, char *uplo, lapack_int *n, float *ap,
float *w, float *z, lapack_int *ldz, float *work, lapack_int *info)
void LAPACK_dspev (char *jobz, char *uplo, lapack_int *n, double *ap,
double *w, double *z, lapack_int *ldz, double *work, lapack_int
*info)
void LAPACK_chpev (char *jobz, char *uplo, lapack_int *n,
lapack_complex_float *ap, float *w, lapack_complex_float *z,
lapack_int *ldz, lapack_complex_float *work, float *rwork,
lapack_int *info)
void LAPACK_zhpev (char *jobz, char *uplo, lapack_int *n,
lapack_complex_double *ap, double *w, lapack_complex_double *z,
lapack_int *ldz, lapack_complex_double *work, double *rwork,
lapack_int *info)
void LAPACK_sspevd (char *jobz, char *uplo, lapack_int *n, float *ap,
float *w, float *z, lapack_int *ldz, float *work, lapack_int *lwork,
lapack_int *iwork, lapack_int *liwork, lapack_int *info)
void LAPACK_dspevd (char *jobz, char *uplo, lapack_int *n, double *ap,
double *w, double *z, lapack_int *ldz, double *work, lapack_int
*lwork, lapack_int *iwork, lapack_int *liwork, lapack_int *info)
void LAPACK_chpevd (char *jobz, char *uplo, lapack_int *n,
lapack_complex_float *ap, float *w, lapack_complex_float *z,
lapack_int *ldz, lapack_complex_float *work, lapack_int *lwork,
float *rwork, lapack_int *lrwork, lapack_int *iwork, lapack_int
*liwork, lapack_int *info)
void LAPACK_zhpevd (char *jobz, char *uplo, lapack_int *n,
lapack_complex_double *ap, double *w, lapack_complex_double *z,
lapack_int *ldz, lapack_complex_double *work, lapack_int *lwork,
double *rwork, lapack_int *lrwork, lapack_int *iwork, lapack_int
*liwork, lapack_int *info)
okay the glow-up here is that the matrix parameter is ap (packed!) instead of a, and notice: no lda because packed storage said "leading dimension? never heard of her" 💀 she still keeps ldz for z though, because eigenvectors are real and need their dimension. the plain spev versions are the minimalists — just work, no lwork, no iwork — while the d versions go full extra with lwork, iwork, liwork, and lrwork for the complex ones. pick your fighter, honestly.
🍓 spevx — and we're mid-sentence, oop
void LAPACK_sspevx (char *jobz, char *range, char *uplo, lapack_int *n,
float *ap, float *vl, float *vu, lapack_int *il, lapack_int *iu,
float *abstol, lapack_int *m, float *w, float *z, lapack_int *ldz,
float *work, lapack_int *iwork, lapack_int *ifail, lapack_int *info)
void LAPACK_dspevx (char *jobz, char *range, char *uplo, lapack_int *n,
double *ap, double *vl, double *vu, lapack_int *il, lapack_int *iu,
double *abstol, lapack_int *m, double *w, double *z, lapack_int
*ldz, double *work, lapack_int *iwork, lapack_int *ifail, lapack_int
*info)
void LAPACK_chpevx (char *jobz, char *range, char *uplo, lapack_int *n,
and that's where the clip cuts off 😭 the chpevx crew is literally still walking in — jobz, range, uplo, n, and we're not even done meeting her yet. no vl/vu/il/iu/abstol for this one in this part, sorry bestie, she's in the next one. to be continued, iykyk 🦋
okay so we are still in the prototype parade and honestly it's giving "the compiler's group chat history" 💀 — but every single one of these bad boys is a real signature, so let's not disrespect them. Same rules: names, types, pointers, order — all canon. No edits, no vibes-based renaming. 🌸
first up, the lone zhpevx that got left at the top of this chunk — she's the double-complex one, obviously:
void LAPACK_zhpevx (char *jobz, char *range, char *uplo, lapack_int *n, lapack_complex_double *ap, double *vl, double *vu, lapack_int *il, lapack_int *iu, double *abstol, lapack_int *m, double *w, lapack_complex_double *z, lapack_int *ldz, lapack_complex_double *work, double *rwork, lapack_int *iwork, lapack_int *ifail, lapack_int *info)
then we roll into the ?sbev squad 💅 — four of them, one per precision/flavour combo:
void LAPACK_ssbev (char *jobz, char *uplo, lapack_int *n, lapack_int *kd, float *ab, lapack_int *ldab, float *w, float *z, lapack_int *ldz, float *work, lapack_int *info)
void LAPACK_dsbev (char *jobz, char *uplo, lapack_int *n, lapack_int *kd, double *ab, lapack_int *ldab, double *w, double *z, lapack_int *ldz, double *work, lapack_int *info)
void LAPACK_chbev (char *jobz, char *uplo, lapack_int *n, lapack_int *kd, lapack_complex_float *ab, lapack_int *ldab, float *w, lapack_complex_float *z, lapack_int *ldz, lapack_complex_float *work, float *rwork, lapack_int *info)
void LAPACK_zhbev (char *jobz, char *uplo, lapack_int *n, lapack_int *kd, lapack_complex_double *ab, lapack_int *ldab, double *w, lapack_complex_double *z, lapack_int *ldz, lapack_complex_double *work, double *rwork, lapack_int *info)
see how the complex ones get an extra rwork? iconic consistency ✨
and the ?sbevd glow-up — same family, but now with lwork/liwork and the lrwork situation for the complex girlies:
void LAPACK_ssbevd (char *jobz, char *uplo, lapack_int *n, lapack_int *kd, float *ab, lapack_int *ldab, float *w, float *z, lapack_int *ldz, float *work, lapack_int *lwork, lapack_int *iwork, lapack_int *liwork, lapack_int *info)
void LAPACK_dsbevd (char *jobz, char *uplo, lapack_int *n, lapack_int *kd, double *ab, lapack_int *ldab, double *w, double *z, lapack_int *ldz, double *work, lapack_int *lwork, lapack_int *iwork, lapack_int *liwork, lapack_int *info)
void LAPACK_chbevd (char *jobz, char *uplo, lapack_int *n, lapack_int *kd, lapack_complex_float *ab, lapack_int *ldab, float *w, lapack_complex_float *z, lapack_int *ldz, lapack_complex_float *work, lapack_int *lwork, float *rwork, lapack_int *lrwork, lapack_int *iwork, lapack_int *liwork, lapack_int *info)
void LAPACK_zhbevd (char *jobz, char *uplo, lapack_int *n, lapack_int *kd, lapack_complex_double *ab, lapack_int *ldab, double *w, lapack_complex_double *z, lapack_int *ldz, lapack_complex_double *work, lapack_int *lwork, double *rwork, lapack_int *lrwork, lapack_int *iwork, lapack_int *liwork, lapack_int *info)
not lrwork stepping on the scene with main character energy 😭💜
okay and now the ?sbevx variants, which are lowkey extra: they bring range, q, ldq, vl, vu, il, iu, abstol, m, ifail — the whole extended entourage 🫶
void LAPACK_ssbevx (char *jobz, char *range, char *uplo, lapack_int *n, lapack_int *kd, float *ab, lapack_int *ldab, float *q, lapack_int *ldq, float *vl, float *vu, lapack_int *il, lapack_int *iu, float *abstol, lapack_int *m, float *w, float *z, lapack_int *ldz, float *work, lapack_int *iwork, lapack_int *ifail, lapack_int *info)
void LAPACK_dsbevx (char *jobz, char *range, char *uplo, lapack_int *n, lapack_int *kd, double *ab, lapack_int *ldab, double *q, lapack_int *ldq, double *vl, double *vu, lapack_int *il, lapack_int *iu, double *abstol, lapack_int *m, double *w, double *z, lapack_int *ldz, double *work, lapack_int *iwork, lapack_int *ifail, lapack_int *info)
void LAPACK_chbevx (char *jobz, char *range, char *uplo, lapack_int *n, lapack_int *kd, lapack_complex_float *ab, lapack_int *ldab, lapack_complex_float *q, lapack_int *ldq, float *vl, float *vu, lapack_int *il, lapack_int *iu, float *abstol, lapack_int *m, float *w, lapack_complex_float *z, lapack_int *ldz, lapack_complex_float *work, float *rwork, lapack_int *iwork, lapack_int *ifail, lapack_int *info)
void LAPACK_zhbevx (char *jobz, char *range, char *uplo, lapack_int *n, lapack_int *kd, lapack_complex_double *ab, lapack_int *ldab, lapack_complex_double *q, lapack_int *ldq, double *vl, double *vu, lapack_int *il, lapack_int *iu, double *abstol, lapack_int *m, double *w, lapack_complex_double *z, lapack_int *ldz, lapack_complex_double *work, double *rwork, lapack_int *iwork, lapack_int *ifail, lapack_int *info)
she's long, she's thorough, she's not apologising 💅
next: the tridiagonal girlies ?stev 🌈
void LAPACK_sstev (char *jobz, lapack_int *n, float *d, float *e, float *z, lapack_int *ldz, float *work, lapack_int *info)
void LAPACK_dstev (char *jobz, lapack_int *n, double *d, double *e, double *z, lapack_int *ldz, double *work, lapack_int *info)
two of them, float and double, matching fit 🎀
then ?stevd, who brought lwork, iwork, and liwork to the function:
void LAPACK_sstevd (char *jobz, lapack_int *n, float *d, float *e, float *z, lapack_int *ldz, float *work, lapack_int *lwork, lapack_int *iwork, lapack_int *liwork, lapack_int *info)
void LAPACK_dstevd (char *jobz, lapack_int *n, double *d, double *e, double *z, lapack_int *ldz, double *work, lapack_int *lwork, lapack_int *iwork, lapack_int *liwork, lapack_int *info)
periodt ✨
and ?stevx, the one with the whole range/abstol/m/ifail ensemble again:
void LAPACK_sstevx (char *jobz, char *range, lapack_int *n, float *d, float *e, float *vl, float *vu, lapack_int *il, lapack_int *iu, float *abstol, lapack_int *m, float *w, float *z, lapack_int *ldz, float *work, lapack_int *iwork, lapack_int *ifail, lapack_int *info)
void LAPACK_dstevx (char *jobz, char *range, lapack_int *n, double *d, double *e, double *vl, double *vu, lapack_int *il, lapack_int *iu, double *abstol, lapack_int *m, double *w, double *z, lapack_int *ldz, double *work, lapack_int *iwork, lapack_int *ifail, lapack_int *info)
same energy, different float/double sleeve 🦋
now ?stevr — and bestie, she has isuppz, so she's built different:
void LAPACK_sstevr (char *jobz, char *range, lapack_int *n, float *d, float *e, float *vl, float *vu, lapack_int *il, lapack_int *iu, float *abstol, lapack_int *m, float *w, float *z, lapack_int *ldz, lapack_int *isuppz, float *work, lapack_int *lwork, lapack_int *iwork, lapack_int *liwork, lapack_int *info)
void LAPACK_dstevr (char *jobz, char *range, lapack_int *n, double *d, double *e, double *vl, double *vu, lapack_int *il, lapack_int *iu, double *abstol, lapack_int *m, double *w, double *z, lapack_int *ldz, lapack_int *isuppz, double *work, lapack_int *lwork, lapack_int *iwork, lapack_int *liwork, lapack_int *info)
isuppz carrying the whole vibe check on her back, ngl 😭
okay, shifting gears into the ?gees family — notice the select parameter is a function pointer type, LAPACK_S_SELECT2, LAPACK_D_SELECT2, LAPACK_C_SELECT1, LAPACK_Z_SELECT1. copy the spelling exactly, she's picky:
void LAPACK_sgees (char *jobvs, char *sort, LAPACK_S_SELECT2 select, lapack_int *n, float *a, lapack_int *lda, lapack_int *sdim, float *wr, float *wi, float *vs, lapack_int *ldvs, float *work, lapack_int *lwork, lapack_logical *bwork, lapack_int *info)
void LAPACK_dgees (char *jobvs, char *sort, LAPACK_D_SELECT2 select, lapack_int *n, double *a, lapack_int *lda, lapack_int *sdim, double *wr, double *wi, double *vs, lapack_int *ldvs, double *work, lapack_int *lwork, lapack_logical *bwork, lapack_int *info)
void LAPACK_cgees (char *jobvs, char *sort, LAPACK_C_SELECT1 select, lapack_int *n, lapack_complex_float *a, lapack_int *lda, lapack_int *sdim, lapack_complex_float *w, lapack_complex_float *vs, lapack_int *ldvs, lapack_complex_float *work, lapack_int *lwork, float *rwork, lapack_logical *bwork, lapack_int *info)
void LAPACK_zgees (char *jobvs, char *sort, LAPACK_Z_SELECT1 select, lapack_int *n, lapack_complex_double *a, lapack_int *lda, lapack_int *sdim, lapack_complex_double *w, lapack_complex_double *vs, lapack_int *ldvs, lapack_complex_double *work, lapack_int *lwork, double *rwork, lapack_logical *bwork, lapack_int *info)
also note lapack_logical is its own type — do NOT swap it for plain int, that's not the move 💀
?geesx is the same but with sense, rconde, rcondv, iwork, liwork sliding in — look at her go:
void LAPACK_sgeesx (char *jobvs, char *sort, LAPACK_S_SELECT2 select, char *sense, lapack_int *n, float *a, lapack_int *lda, lapack_int *sdim, float *wr, float *wi, float *vs, lapack_int *ldvs, float *rconde, float *rcondv, float *work, lapack_int *lwork, lapack_int *iwork, lapack_int *liwork, lapack_logical *bwork, lapack_int *info)
void LAPACK_dgeesx (char *jobvs, char *sort, LAPACK_D_SELECT2 select, char *sense, lapack_int *n, double *a, lapack_int *lda, lapack_int *sdim, double *wr, double *wi, double *vs, lapack_int *ldvs, double *rconde, double *rcondv, double *work, lapack_int *lwork, lapack_int *iwork, lapack_int *liwork, lapack_logical *bwork, lapack_int *info)
void LAPACK_cgeesx (char *jobvs, char *sort, LAPACK_C_SELECT1 select, char *sense, lapack_int *n, lapack_complex_float *a, lapack_int *lda, lapack_int *sdim, lapack_complex_float *w, lapack_complex_float *vs, lapack_int *ldvs, float *rconde, float *rcondv, lapack_complex_float *work, lapack_int *lwork, float *rwork, lapack_logical *bwork, lapack_int *info)
void LAPACK_zgeesx (char *jobvs, char *sort, LAPACK_Z_SELECT1 select, char *sense, lapack_int *n, lapack_complex_double *a, lapack_int *lda, lapack_int *sdim, lapack_complex_double *w, lapack_complex_double *vs, lapack_int *ldvs, double *rconde, double *rcondv, lapack_complex_double *work, lapack_int *lwork, double *rwork, lapack_logical *bwork, lapack_int *info)
four of them, all serving 🫶
and now ?geev — the jobvl/jobvr twins, wr, wi, vl, ldvl, vr, ldvr. classic, iconic, no notes 👑
void LAPACK_sgeev (char *jobvl, char *jobvr, lapack_int *n, float *a, lapack_int *lda, float *wr, float *wi, float *vl, lapack_int *ldvl, float *vr, lapack_int *ldvr, float *work, lapack_int *lwork, lapack_int *info)
void LAPACK_dgeev (char *jobvl, char *jobvr, lapack_int *n, double *a, lapack_int *lda, double *wr, double *wi, double *vl, lapack_int *ldvl, double *vr, lapack_int *ldvr, double *work, lapack_int *lwork, lapack_int *info)
void LAPACK_cgeev (char *jobvl, char *jobvr, lapack_int *n, lapack_complex_float *a, lapack_int *lda, lapack_complex_float *w, lapack_complex_float *vl, lapack_int *ldvl, lapack_complex_float *vr, lapack_int *ldvr, lapack_complex_float *work, lapack_int *lwork, float *rwork, lapack_int *info)
void LAPACK_zgeev (char *jobvl, char *jobvr, lapack_int *n, lapack_complex_double *a, lapack_int *lda, lapack_complex_double *w, lapack_complex_double *vl, lapack_int *ldvl, lapack_complex_double *vr, lapack_int *ldvr, lapack_complex_double *work, lapack_int *lwork, double *rwork, lapack_int *info)
the complex ones collapse wr/wi into a single w, and that is correct, don't @ me 💅
lastly, ?geevx walks in with balanc, sense, ilo, ihi, scale, abnrm, plus the condition-number crew:
void LAPACK_sgeevx (char *balanc, char *jobvl, char *jobvr, char *sense, lapack_int *n, float *a, lapack_int *lda, float *wr, float *wi, float *vl, lapack_int *ldvl, float *vr, lapack_int *ldvr, lapack_int *ilo, lapack_int *ihi, float *scale, float *abnrm, float *rconde, float *rcondv, float *work, lapack_int *lwork, lapack_int *iwork, lapack_int *info)
void LAPACK_dgeevx (char *balanc, char *jobvl, char *jobvr, char *sense, lapack_int *n, double *a, lapack_int *lda, double *wr, double *wi, double *vl, lapack_int *ldvl, double *vr, lapack_int *ldvr, lapack_int *ilo, lapack_int *ihi, double *scale, double *abnrm, double *rconde, double *rcondv, double *work, lapack_int *lwork, lapack_int *iwork, lapack_int *info)
void LAPACK_cgeevx (char *balanc, char *jobvl, char *jobvr, char *sense, lapack_int *n, lapack_complex_float *a, lapack_int *lda,
and yeah, cgeevx is mid-sentence right there — the prototype literally trails off at this boundary, so we carry it exactly as written and pick her back up in the next chunk 😭💜 no cap, this section is long, but we are not skipping a single pointer.
...aaaaand we're picking up mid-signature, bestie, don't panic — this is just where the previous part cut off. The tail end of the LAPACK_cgeevx argument list, then her double-precision sister:
lapack_complex_float *w, lapack_complex_float *vl, lapack_int *ldvl,
lapack_complex_float *vr, lapack_int *ldvr, lapack_int *ilo,
lapack_int *ihi, float *scale, float *abnrm, float *rconde, float
*rcondv, lapack_complex_float *work, lapack_int *lwork, float
*rwork, lapack_int *info)
void LAPACK_zgeevx (char *balanc, char *jobvl, char *jobvr, char *sense,
lapack_int *n, lapack_complex_double *a, lapack_int *lda,
lapack_complex_double *w, lapack_complex_double *vl, lapack_int
*ldvl, lapack_complex_double *vr, lapack_int *ldvr, lapack_int *ilo,
lapack_int *ihi, double *scale, double *abnrm, double *rconde,
double *rcondv, lapack_complex_double *work, lapack_int *lwork,
double *rwork, lapack_int *info)
okay so front to back: LAPACK_sgesvd through LAPACK_zgesvd — the whole jobu/jobvt quartet, serving real single, real double, complex single, complex double 💅. Notice the c and z ones lowkey get an extra rwork pointer and a real-valued s array, because eigenvalues of complex matrices are just Like That:
void LAPACK_sgesvd (char *jobu, char *jobvt, lapack_int *m, lapack_int
*n, float *a, lapack_int *lda, float *s, float *u, lapack_int *ldu,
float *vt, lapack_int *ldvt, float *work, lapack_int *lwork,
lapack_int *info)
void LAPACK_dgesvd (char *jobu, char *jobvt, lapack_int *m, lapack_int
*n, double *a, lapack_int *lda, double *s, double *u, lapack_int
*ldu, double *vt, lapack_int *ldvt, double *work, lapack_int *lwork,
lapack_int *info)
void LAPACK_cgesvd (char *jobu, char *jobvt, lapack_int *m, lapack_int
*n, lapack_complex_float *a, lapack_int *lda, float *s,
lapack_complex_float *u, lapack_int *ldu, lapack_complex_float *vt,
lapack_int *ldvt, lapack_complex_float *work, lapack_int *lwork,
float *rwork, lapack_int *info)
void LAPACK_zgesvd (char *jobu, char *jobvt, lapack_int *m, lapack_int
*n, lapack_complex_double *a, lapack_int *lda, double *s,
lapack_complex_double *u, lapack_int *ldu, lapack_complex_double
*vt, lapack_int *ldvt, lapack_complex_double *work, lapack_int
*lwork, double *rwork, lapack_int *info)
✨ next up: gesvdx — the x at the end is giving "I have range options" energy, and you can literally see it in the signature. Extra args unlocked: range, vl, vu, il, iu, ns, plus an iwork pointer. Four flavours, as always 🍓:
void LAPACK_sgesvdx (char *jobu, char *jobvt, char *range, lapack_int
*m, lapack_int *n, float *a, lapack_int *lda, float *vl, float *vu,
lapack_int *il, lapack_int *iu, lapack_int *ns, float *s, float *u,
lapack_int *ldu, float *vt, lapack_int *ldvt, float *work,
lapack_int *lwork, lapack_int *iwork, lapack_int *info)
void LAPACK_dgesvdx (char *jobu, char *jobvt, char *range, lapack_int
*m, lapack_int *n, double *a, lapack_int *lda, double *vl, double
*vu, lapack_int *il, lapack_int *iu, lapack_int *ns, double *s,
double *u, lapack_int *ldu, double *vt, lapack_int *ldvt, double
*work, lapack_int *lwork, lapack_int *iwork, lapack_int *info)
void LAPACK_cgesvdx (char *jobu, char *jobvt, char *range, lapack_int
*m, lapack_int *n, lapack_complex_float *a, lapack_int *lda, float
*vl, float *vu, lapack_int *il, lapack_int *iu, lapack_int *ns,
float *s, lapack_complex_float *u, lapack_int *ldu,
lapack_complex_float *vt, lapack_int *ldvt, lapack_complex_float
*work, lapack_int *lwork, float *rwork, lapack_int *iwork,
lapack_int *info)
void LAPACK_zgesvdx (char *jobu, char *jobvt, char *range, lapack_int
*m, lapack_int *n, lapack_complex_double *a, lapack_int *lda, double
*vl, double *vu, lapack_int *il, lapack_int *iu, lapack_int *ns,
double *s, lapack_complex_double *u, lapack_int *ldu,
lapack_complex_double *vt, lapack_int *ldvt, lapack_complex_double
*work, lapack_int *lwork, double *rwork, lapack_int *iwork,
lapack_int *info)
then gesdd shows up with a single jobz instead of the jobu/jobvt duo — one character arg, icon behaviour 👑 (also taking iwork and, for the complex girlies, rwork):
void LAPACK_sgesdd (char *jobz, lapack_int *m, lapack_int *n, float *a,
lapack_int *lda, float *s, float *u, lapack_int *ldu, float *vt,
lapack_int *ldvt, float *work, lapack_int *lwork, lapack_int *iwork,
lapack_int *info)
void LAPACK_dgesdd (char *jobz, lapack_int *m, lapack_int *n, double *a,
lapack_int *lda, double *s, double *u, lapack_int *ldu, double *vt,
lapack_int *ldvt, double *work, lapack_int *lwork, lapack_int
*iwork, lapack_int *info)
void LAPACK_cgesdd (char *jobz, lapack_int *m, lapack_int *n,
lapack_complex_float *a, lapack_int *lda, float *s,
lapack_complex_float *u, lapack_int *ldu, lapack_complex_float *vt,
lapack_int *ldvt, lapack_complex_float *work, lapack_int *lwork,
float *rwork, lapack_int *iwork, lapack_int *info)
void LAPACK_zgesdd (char *jobz, lapack_int *m, lapack_int *n,
lapack_complex_double *a, lapack_int *lda, double *s,
lapack_complex_double *u, lapack_int *ldu, lapack_complex_double
*vt, lapack_int *ldvt, lapack_complex_double *work, lapack_int
*lwork, double *rwork, lapack_int *iwork, lapack_int *info)
and then gejsv pulls up with a whole row of char args — joba, jobu, jobv, jobr, jobt, jobp — six of them, she's highkey the main character of "options" 🌈. Peep that sva name too, and that the complex versions carry cwork, lwork, work, lrwork, plus iwork:
void LAPACK_dgejsv (char *joba, char *jobu, char *jobv, char *jobr, char
*jobt, char *jobp, lapack_int *m, lapack_int *n, double *a,
lapack_int *lda, double *sva, double *u, lapack_int *ldu, double *v,
lapack_int *ldv, double *work, lapack_int *lwork, lapack_int *iwork,
lapack_int *info)
void LAPACK_sgejsv (char *joba, char *jobu, char *jobv, char *jobr, char
*jobt, char *jobp, lapack_int *m, lapack_int *n, float *a,
lapack_int *lda, float *sva, float *u, lapack_int *ldu, float *v,
lapack_int *ldv, float *work, lapack_int *lwork, lapack_int *iwork,
lapack_int *info)
void LAPACK_cgejsv (char *joba, char *jobu, char *jobv, char *jobr, char
*jobt, char *jobp, lapack_int *m, lapack_int *n,
lapack_complex_float *a, lapack_int *lda, float *sva,
lapack_complex_float *u, lapack_int *ldu, lapack_complex_float *v,
lapack_int *ldv, lapack_complex_float *cwork, lapack_int *lwork,
float *work, lapack_int *lrwork, lapack_int *iwork, lapack_int
*info)
void LAPACK_zgejsv (char *joba, char *jobu, char *jobv, char *jobr, char
*jobt, char *jobp, lapack_int *m, lapack_int *n,
lapack_complex_double *a, lapack_int *lda, double *sva,
lapack_complex_double *u, lapack_int *ldu, lapack_complex_double *v,
lapack_int *ldv, lapack_complex_double *cwork, lapack_int *lwork,
double *work, lapack_int *lrwork, lapack_int *iwork, lapack_int
*info)
gesvj next — shorter char list (joba, jobu, jobv), but she traded that for an mv pointer, and the complex ones again bring cwork + rwork + lrwork along 🧚:
void LAPACK_dgesvj (char *joba, char *jobu, char *jobv, lapack_int *m,
lapack_int *n, double *a, lapack_int *lda, double *sva, lapack_int
*mv, double *v, lapack_int *ldv, double *work, lapack_int *lwork,
lapack_int *info)
void LAPACK_sgesvj (char *joba, char *jobu, char *jobv, lapack_int *m,
lapack_int *n, float *a, lapack_int *lda, float *sva, lapack_int
*mv, float *v, lapack_int *ldv, float *work, lapack_int *lwork,
lapack_int *info)
void LAPACK_cgesvj (char *joba, char *jobu, char *jobv, lapack_int *m,
lapack_int *n, lapack_complex_float *a, lapack_int *lda, float *sva,
lapack_int *mv, lapack_complex_float *v, lapack_int *ldv,
lapack_complex_float *cwork, lapack_int *lwork, float *rwork,
lapack_int *lrwork, lapack_int *info)
void LAPACK_zgesvj (char *joba, char *jobu, char *jobv, lapack_int *m,
lapack_int *n, lapack_complex_double *a, lapack_int *lda, double
*sva, lapack_int *mv, lapack_complex_double *v, lapack_int *ldv,
lapack_complex_double *cwork, lapack_int *lwork, double *rwork,
lapack_int *lrwork, lapack_int *info)
okay and here's the ggsvd gang — jobu, jobv, jobq, plus m, n, p, k, l (yes, both k and l, they're a package deal 💀), alpha and beta output arrays, and u, v, q with their ldu, ldv, ldq. No lwork in this one, bestie — note it takes iwork straight up. The complex pair keeps rwork in the mix 🌸:
void LAPACK_sggsvd (char *jobu, char *jobv, char *jobq, lapack_int *m,
lapack_int *n, lapack_int *p, lapack_int *k, lapack_int *l, float
*a, lapack_int *lda, float *b, lapack_int *ldb, float *alpha, float
*beta, float *u, lapack_int *ldu, float *v, lapack_int *ldv, float
*q, lapack_int *ldq, float *work, lapack_int *iwork, lapack_int
*info)
void LAPACK_dggsvd (char *jobu, char *jobv, char *jobq, lapack_int *m,
lapack_int *n, lapack_int *p, lapack_int *k, lapack_int *l, double
*a, lapack_int *lda, double *b, lapack_int *ldb, double *alpha,
double *beta, double *u, lapack_int *ldu, double *v, lapack_int
*ldv, double *q, lapack_int *ldq, double *work, lapack_int *iwork,
lapack_int *info)
void LAPACK_cggsvd (char *jobu, char *jobv, char *jobq, lapack_int *m,
lapack_int *n, lapack_int *p, lapack_int *k, lapack_int *l,
lapack_complex_float *a, lapack_int *lda, lapack_complex_float *b,
lapack_int *ldb, float *alpha, float *beta, lapack_complex_float *u,
lapack_int *ldu, lapack_complex_float *v, lapack_int *ldv,
lapack_complex_float *q, lapack_int *ldq, lapack_complex_float
*work, float *rwork, lapack_int *iwork, lapack_int *info)
void LAPACK_zggsvd (char *jobu, char *jobv, char *jobq, lapack_int *m,
lapack_int *n, lapack_int *p, lapack_int *k, lapack_int *l,
lapack_complex_double *a, lapack_int *lda, lapack_complex_double *b,
lapack_int *ldb, double *alpha, double *beta, lapack_complex_double
*u, lapack_int *ldu, lapack_complex_double *v, lapack_int *ldv,
lapack_complex_double *q, lapack_int *ldq, lapack_complex_double
*work, double *rwork, lapack_int *iwork, lapack_int *info)
and ggsvd3 is the same squad but with lwork added to the party — the 3 said "we're doing workspace explicitly now" 💅:
void LAPACK_sggsvd3 (char *jobu, char *jobv, char *jobq, lapack_int *m,
lapack_int *n, lapack_int *p, lapack_int *k, lapack_int *l, float
*a, lapack_int *lda, float *b, lapack_int *ldb, float *alpha, float
*beta, float *u, lapack_int *ldu, float *v, lapack_int *ldv, float
*q, lapack_int *ldq, float *work, lapack_int *lwork, lapack_int
*iwork, lapack_int *info)
void LAPACK_dggsvd3 (char *jobu, char *jobv, char *jobq, lapack_int *m,
lapack_int *n, lapack_int *p, lapack_int *k, lapack_int *l, double
*a, lapack_int *lda, double *b, lapack_int *ldb, double *alpha,
double *beta, double *u, lapack_int *ldu, double *v, lapack_int
*ldv, double *q, lapack_int *ldq, double *work, lapack_int *lwork,
lapack_int *iwork, lapack_int *info)
void LAPACK_cggsvd3 (char *jobu, char *jobv, char *jobq, lapack_int *m,
lapack_int *n, lapack_int *p, lapack_int *k, lapack_int *l,
lapack_complex_float *a, lapack_int *lda, lapack_complex_float *b,
lapack_int *ldb, float *alpha, float *beta, lapack_complex_float *u,
lapack_int *ldu, lapack_complex_float *v, lapack_int *ldv,
lapack_complex_float *q, lapack_int *ldq, lapack_complex_float
*work, lapack_int *lwork, float *rwork, lapack_int *iwork,
lapack_int *info)
void LAPACK_zggsvd3 (char *jobu, char *jobv, char *jobq, lapack_int *m,
lapack_int *n, lapack_int *p, lapack_int *k, lapack_int *l,
lapack_complex_double *a, lapack_int *lda, lapack_complex_double *b,
lapack_int *ldb, double *alpha, double *beta, lapack_complex_double
*u, lapack_int *ldu, lapack_complex_double *v, lapack_int *ldv,
lapack_complex_double *q, lapack_int *ldq, lapack_complex_double
*work, lapack_int *lwork, double *rwork, lapack_int *iwork,
lapack_int *info)
and we're rounding out this part with a new family: sygv — starting with itype as the very first arg (she leads, periodt), then jobz, uplo, n, the a/lda and b/ldb pairs, w, work, lwork, info:
void LAPACK_ssygv (lapack_int *itype, char *jobz, char *uplo, lapack_int
*n, float *a, lapack_int *lda, float *b, lapack_int *ldb, float *w,
float *work, lapack_int *lwork, lapack_int *info)
void LAPACK_dsygv (lapack_int *itype, char *jobz, char *uplo, lapack_int
and yeah — we're stopping mid-signature again 😭 that's just how the manpage pagination ate. LAPACK_dsygv picks up in the next part, same bat-time, same bat-place 🦋
Yo so we're still deep in the prototype zone, bestie — this stretch is the generalized symmetric / Hermitian eigenvalue fam, and honestly? It's giving ✨main character energy✨ for anyone doing vibration analysis or quantum stuff. Same deal as before: every one of these is void, every arg is a pointer (yes, even n, even info, LAPACK does not care about your feelings), and info is always the last one. Buckle up 💅
🫶 the gv girlies — generalized eigenproblems (dense, classic)
void LAPACK_ssygv (lapack_int *itype, char *jobz, char *uplo, lapack_int *n, float *a,
lapack_int *lda, float *b, lapack_int *ldb, float *w, float *work,
lapack_int *lwork, lapack_int *info)
void LAPACK_dsygv (lapack_int *itype, char *jobz, char *uplo, lapack_int *n, double *a,
lapack_int *lda, double *b, lapack_int *ldb, double *w, double *work,
lapack_int *lwork, lapack_int *info)
void LAPACK_chegv (lapack_int *itype, char *jobz, char *uplo, lapack_int *n,
lapack_complex_float *a, lapack_int *lda, lapack_complex_float *b, lapack_int *ldb,
float *w, lapack_complex_float *work, lapack_int *lwork, float *rwork,
lapack_int *info)
void LAPACK_zhegv (lapack_int *itype, char *jobz, char *uplo, lapack_int *n,
lapack_complex_double *a, lapack_int *lda, lapack_complex_double *b, lapack_int *ldb,
double *w, lapack_complex_double *work, lapack_int *lwork, double *rwork,
lapack_int *info)
Not the c/z versions catching an extra rwork at the end like "and don't forget my little float friend" 😭 that's just how complex numbers roll, babes.
🌸 the gvd icons — divide & conquer edition
void LAPACK_ssygvd (lapack_int *itype, char *jobz, char *uplo, lapack_int *n, float *a,
lapack_int *lda, float *b, lapack_int *ldb, float *w, float *work, lapack_int *lwork,
lapack_int *iwork, lapack_int *liwork, lapack_int *info)
void LAPACK_dsygvd (lapack_int *itype, char *jobz, char *uplo, lapack_int *n, double *a,
lapack_int *lda, double *b, lapack_int *ldb, double *w, double *work, lapack_int *lwork,
lapack_int *iwork, lapack_int *liwork, lapack_int *info)
void LAPACK_chegvd (lapack_int *itype, char *jobz, char *uplo, lapack_int *n,
lapack_complex_float *a, lapack_int *lda, lapack_complex_float *b, lapack_int *ldb,
float *w, lapack_complex_float *work, lapack_int *lwork, float *rwork,
lapack_int *lrwork, lapack_int *iwork, lapack_int *liwork, lapack_int *info)
void LAPACK_zhegvd (lapack_int *itype, char *jobz, char *uplo, lapack_int *n,
lapack_complex_double *a, lapack_int *lda, lapack_complex_double *b, lapack_int *ldb,
double *w, lapack_complex_double *work, lapack_int *lwork, double *rwork,
lapack_int *lrwork, lapack_int *iwork, lapack_int *liwork, lapack_int *info)
See how the d versions suddenly want iwork and liwork? And the complex ones want rwork and lrwork on top of that? That's the divide-and-conquer tax, bestie 💸 you're paying in workspace for the speed. Worth it, no cap.
🔥 the gvx baddies — expert drivers, they take everything
void LAPACK_ssygvx (lapack_int *itype, char *jobz, char *range, char *uplo, lapack_int *n,
float *a, lapack_int *lda, float *b, lapack_int *ldb, float *vl, float *vu,
lapack_int *il, lapack_int *iu, float *abstol, lapack_int *m, float *w, float *z,
lapack_int *ldz, float *work, lapack_int *lwork, lapack_int *iwork, lapack_int *ifail,
lapack_int *info)
void LAPACK_dsygvx (lapack_int *itype, char *jobz, char *range, char *uplo, lapack_int *n,
double *a, lapack_int *lda, double *b, lapack_int *ldb, double *vl, double *vu,
lapack_int *il, lapack_int *iu, double *abstol, lapack_int *m, double *w, double *z,
lapack_int *ldz, double *work, lapack_int *lwork, lapack_int *iwork, lapack_int *ifail,
lapack_int *info)
void LAPACK_chegvx (lapack_int *itype, char *jobz, char *range, char *uplo, lapack_int *n,
lapack_complex_float *a, lapack_int *lda, lapack_complex_float *b, lapack_int *ldb,
float *vl, float *vu, lapack_int *il, lapack_int *iu, float *abstol, lapack_int *m,
float *w, lapack_complex_float *z, lapack_int *ldz, lapack_complex_float *work,
lapack_int *lwork, float *rwork, lapack_int *iwork, lapack_int *ifail, lapack_int *info)
void LAPACK_zhegvx (lapack_int *itype, char *jobz, char *range, char *uplo, lapack_int *n,
lapack_complex_double *a, lapack_int *lda, lapack_complex_double *b, lapack_int *ldb,
double *vl, double *vu, lapack_int *il, lapack_int *iu, double *abstol, lapack_int *m,
double *w, lapack_complex_double *z, lapack_int *ldz, lapack_complex_double *work,
lapack_int *lwork, double *rwork, lapack_int *iwork, lapack_int *ifail, lapack_int *info)
Ok these are long. range, vl, vu, il, iu, abstol, m, z, ldz, ifail… it's giving "I have 22 arguments and I'm not sorry." If you're calling one of these bad boys, please for the love of 🦋 count your pointers twice.
🎀 now the packed ones — spgv crew, living their most compact life
void LAPACK_sspgv (lapack_int *itype, char *jobz, char *uplo, lapack_int *n, float *ap,
float *bp, float *w, float *z, lapack_int *ldz, float *work, lapack_int *info)
void LAPACK_dspgv (lapack_int *itype, char *jobz, char *uplo, lapack_int *n, double *ap,
double *bp, double *w, double *z, lapack_int *ldz, double *work, lapack_int *info)
void LAPACK_chpgv (lapack_int *itype, char *jobz, char *uplo, lapack_int *n,
lapack_complex_float *ap, lapack_complex_float *bp, float *w, lapack_complex_float *z,
lapack_int *ldz, lapack_complex_float *work, float *rwork, lapack_int *info)
void LAPACK_zhpgv (lapack_int *itype, char *jobz, char *uplo, lapack_int *n,
lapack_complex_double *ap, lapack_complex_double *bp, double *w,
lapack_complex_double *z, lapack_int *ldz, lapack_complex_double *work, double *rwork,
lapack_int *info)
Notice there's no lda/ldb here?? That's the whole point of packed storage — ap and bp are just vibing in a 1-D array, one triangle only, no leading dimension needed. Slay, minimalism 💅
💜 spgvd — packed and divide & conquer
void LAPACK_sspgvd (lapack_int *itype, char *jobz, char *uplo, lapack_int *n, float *ap,
float *bp, float *w, float *z, lapack_int *ldz, float *work, lapack_int *lwork,
lapack_int *iwork, lapack_int *liwork, lapack_int *info)
void LAPACK_dspgvd (lapack_int *itype, char *jobz, char *uplo, lapack_int *n, double *ap,
double *bp, double *w, double *z, lapack_int *ldz, double *work, lapack_int *lwork,
lapack_int *iwork, lapack_int *liwork, lapack_int *info)
void LAPACK_chpgvd (lapack_int *itype, char *jobz, char *uplo, lapack_int *n,
lapack_complex_float *ap, lapack_complex_float *bp, float *w, lapack_complex_float *z,
lapack_int *ldz, lapack_complex_float *work, lapack_int *lwork, float *rwork,
lapack_int *lrwork, lapack_int *iwork, lapack_int *liwork, lapack_int *info)
void LAPACK_zhpgvd (lapack_int *itype, char *jobz, char *uplo, lapack_int *n,
lapack_complex_double *ap, lapack_complex_double *bp, double *w,
lapack_complex_double *z, lapack_int *ldz, lapack_complex_double *work, lapack_int *lwork,
double *rwork, lapack_int *lrwork, lapack_int *iwork, lapack_int *liwork,
lapack_int *info)
⭐ spgvx — packed expert mode, because of course
void LAPACK_sspgvx (lapack_int *itype, char *jobz, char *range, char *uplo, lapack_int *n,
float *ap, float *bp, float *vl, float *vu, lapack_int *il, lapack_int *iu,
float *abstol, lapack_int *m, float *w, float *z, lapack_int *ldz, float *work,
lapack_int *iwork, lapack_int *ifail, lapack_int *info)
void LAPACK_dspgvx (lapack_int *itype, char *jobz, char *range, char *uplo, lapack_int *n,
double *ap, double *bp, double *vl, double *vu, lapack_int *il, lapack_int *iu,
double *abstol, lapack_int *m, double *w, double *z, lapack_int *ldz, double *work,
lapack_int *iwork, lapack_int *ifail, lapack_int *info)
void LAPACK_chpgvx (lapack_int *itype, char *jobz, char *range, char *uplo, lapack_int *n,
lapack_complex_float *ap, lapack_complex_float *bp, float *vl, float *vu,
lapack_int *il, lapack_int *iu, float *abstol, lapack_int *m, float *w,
lapack_complex_float *z, lapack_int *ldz, lapack_complex_float *work, float *rwork,
lapack_int *iwork, lapack_int *ifail, lapack_int *info)
void LAPACK_zhpgvx (lapack_int *itype, char *jobz, char *range, char *uplo, lapack_int *n,
lapack_complex_double *ap, lapack_complex_double *bp, double *vl, double *vu,
lapack_int *il, lapack_int *iu, double *abstol, lapack_int *m, double *w,
lapack_complex_double *z, lapack_int *ldz, lapack_complex_double *work, double *rwork,
lapack_int *iwork, lapack_int *ifail, lapack_int *info)
🧚 band storage time — sbgv and friends, the ka/kb girlies
Ok so these swap out the square matrix for a banded one. That's why you're seeing ka and kb (upper bandwidth of A and of B respectively), plus ab/bb and their leading dims ldab/ldbb. It's giving "I only care about the diagonal-ish part" 🙈
void LAPACK_ssbgv (char *jobz, char *uplo, lapack_int *n, lapack_int *ka, lapack_int *kb,
float *ab, lapack_int *ldab, float *bb, lapack_int *ldbb, float *w, float *z,
lapack_int *ldz, float *work, lapack_int *info)
void LAPACK_dsbgv (char *jobz, char *uplo, lapack_int *n, lapack_int *ka, lapack_int *kb,
double *ab, lapack_int *ldab, double *bb, lapack_int *ldbb, double *w, double *z,
lapack_int *ldz, double *work, lapack_int *info)
void LAPACK_chbgv (char *jobz, char *uplo, lapack_int *n, lapack_int *ka, lapack_int *kb,
lapack_complex_float *ab, lapack_int *ldab, lapack_complex_float *bb, lapack_int *ldbb,
float *w, lapack_complex_float *z, lapack_int *ldz, lapack_complex_float *work,
float *rwork, lapack_int *info)
void LAPACK_zhbgv (char *jobz, char *uplo, lapack_int *n, lapack_int *ka, lapack_int *kb,
lapack_complex_double *ab, lapack_int *ldab, lapack_complex_double *bb,
lapack_int *ldbb, double *w, lapack_complex_double *z, lapack_int *ldz,
lapack_complex_double *work, double *rwork, lapack_int *info)
Heads up: no itype here! Banded versions just do the standard A x = λ B x situation, no generalized-itype menu 😌
🌈 sbgvd — banded + divide & conquer (the workspace-heavy era)
void LAPACK_ssbgvd (char *jobz, char *uplo, lapack_int *n, lapack_int *ka, lapack_int *kb,
float *ab, lapack_int *ldab, float *bb, lapack_int *ldbb, float *w, float *z,
lapack_int *ldz, float *work, lapack_int *lwork, lapack_int *iwork, lapack_int *liwork,
lapack_int *info)
void LAPACK_dsbgvd (char *jobz, char *uplo, lapack_int *n, lapack_int *ka, lapack_int *kb,
double *ab, lapack_int *ldab, double *bb, lapack_int *ldbb, double *w, double *z,
lapack_int *ldz, double *work, lapack_int *lwork, lapack_int *iwork, lapack_int *liwork,
lapack_int *info)
void LAPACK_chbgvd (char *jobz, char *uplo, lapack_int *n, lapack_int *ka, lapack_int *kb,
lapack_complex_float *ab, lapack_int *ldab, lapack_complex_float *bb, lapack_int *ldbb,
float *w, lapack_complex_float *z, lapack_int *ldz, lapack_complex_float *work,
lapack_int *lwork, float *rwork, lapack_int *lrwork, lapack_int *iwork,
lapack_int *liwork, lapack_int *info)
void LAPACK_zhbgvd (char *jobz, char *uplo, lapack_int *n, lapack_int *ka, lapack_int *kb,
lapack_complex_double *ab, lapack_int *ldab, lapack_complex_double *bb,
lapack_int *ldbb, double *w, lapack_complex_double *z, lapack_int *ldz,
lapack_complex_double *work, lapack_int *lwork, double *rwork, lapack_int *lrwork,
lapack_int *iwork, lapack_int *liwork, lapack_int *info)
👑 sbgvx — banded expert, and yes it brought a q matrix
void LAPACK_ssbgvx (char *jobz, char *range, char *uplo, lapack_int *n, lapack_int *ka,
lapack_int *kb, float *ab, lapack_int *ldab, float *bb, lapack_int *ldbb, float *q,
lapack_int *ldq, float *vl, float *vu, lapack_int *il, lapack_int *iu, float *abstol,
lapack_int *m, float *w, float *z, lapack_int *ldz, float *work, lapack_int *iwork,
lapack_int *ifail, lapack_int *info)
void LAPACK_dsbgvx (char *jobz, char *range, char *uplo, lapack_int *n, lapack_int *ka,
lapack_int *kb, double *ab, lapack_int *ldab, double *bb, lapack_int *ldbb, double *q,
lapack_int *ldq, double *vl, double *vu, lapack_int *il, lapack_int *iu, double *abstol,
lapack_int *m, double *w, double *z, lapack_int *ldz, double *work, lapack_int *iwork,
lapack_int *ifail, lapack_int *info)
void LAPACK_chbgvx (char *jobz, char *range, char *uplo, lapack_int *n, lapack_int *ka,
lapack_int *kb, lapack_complex_float *ab, lapack_int *ldab, lapack_complex_float *bb,
lapack_int *ldbb, lapack_complex_float *q, lapack_int *ldq, float *vl, float *vu,
lapack_int *il, lapack_int *iu, float *abstol, lapack_int *m, float *w,
lapack_complex_float *z, lapack_int *ldz, lapack_complex_float *work, float *rwork,
lapack_int *iwork, lapack_int *ifail, lapack_int *info)
See that q? That's the bulge-chasing representation of the band reduction — you only touch it if you're deep in the implementation weeds, so don't stress if it looks scary, bestie. It's in the family for a reason 🫶
That's the whole symmetric/Hermitian generalized protag lineup for this chunk — dense, packed, and banded, all cozy in their void-and-pointers era. More prototypes coming, don't you worry 💖
okay bestie we're still deep in the SYNOPSIS function era — this next batch is the generalized eigenvalue / Schur crowd, plus one little hbgvx straggler that wandered in. eyes on the signatures, they're literal 💅
void LAPACK_zhbgvx (char *jobz, char *range, char *uplo, lapack_int *n,
lapack_int *ka, lapack_int *kb, lapack_complex_double *ab,
lapack_int *ldab, lapack_complex_double *bb, lapack_int *ldbb,
lapack_complex_double *q, lapack_int *ldq, double *vl, double *vu,
lapack_int *il, lapack_int *iu, double *abstol, lapack_int *m,
double *w, lapack_complex_double *z, lapack_int *ldz,
lapack_complex_double *work, double *rwork, lapack_int *iwork,
lapack_int *ifail, lapack_int *info)
she's the complex-double banded generalized eigen-solver with eigenvectors, aka the whole buffet 🍓 — range, vl/vu, il/iu, abstol, m, w, ifail, all of it, no crumbs left behind.
🦋 the generalized Schur decomposition girlies
these four are the OG gges set — deflating the pencil (A, B) and handing you alpha/beta (or alphar/alphai/beta in real land) plus the left and right Schur vectors. the split is giving very real-vs-complex:
void LAPACK_sgges (char *jobvsl, char *jobvsr, char *sort,
LAPACK_S_SELECT3 selctg, lapack_int *n, float *a, lapack_int *lda,
float *b, lapack_int *ldb, lapack_int *sdim, float *alphar, float
*alphai, float *beta, float *vsl, lapack_int *ldvsl, float *vsr,
lapack_int *ldvsr, float *work, lapack_int *lwork, lapack_logical
*bwork, lapack_int *info)
void LAPACK_dgges (char *jobvsl, char *jobvsr, char *sort,
LAPACK_D_SELECT3 selctg, lapack_int *n, double *a, lapack_int *lda,
double *b, lapack_int *ldb, lapack_int *sdim, double *alphar, double
*alphai, double *beta, double *vsl, lapack_int *ldvsl, double *vsr,
lapack_int *ldvsr, double *work, lapack_int *lwork, lapack_logical
*bwork, lapack_int *info)
void LAPACK_cgges (char *jobvsl, char *jobvsr, char *sort,
LAPACK_C_SELECT2 selctg, lapack_int *n, lapack_complex_float *a,
lapack_int *lda, lapack_complex_float *b, lapack_int *ldb,
lapack_int *sdim, lapack_complex_float *alpha, lapack_complex_float
*beta, lapack_complex_float *vsl, lapack_int *ldvsl,
lapack_complex_float *vsr, lapack_int *ldvsr, lapack_complex_float
*work, lapack_int *lwork, float *rwork, lapack_logical *bwork,
lapack_int *info)
void LAPACK_zgges (char *jobvsl, char *jobvsr, char *sort,
LAPACK_Z_SELECT2 selctg, lapack_int *n, lapack_complex_double *a,
lapack_int *lda, lapack_complex_double *b, lapack_int *ldb,
lapack_int *sdim, lapack_complex_double *alpha,
lapack_complex_double *beta, lapack_complex_double *vsl, lapack_int
*ldvsl, lapack_complex_double *vsr, lapack_int *ldvsr,
lapack_complex_double *work, lapack_int *lwork, double *rwork,
lapack_logical *bwork, lapack_int *info)
not the *3 versions sneaking in next — same vibes, same args, just the newer-shinier algorithmic glow-up ✨:
void LAPACK_sgges3 (char *jobvsl, char *jobvsr, char *sort,
LAPACK_S_SELECT3 selctg, lapack_int *n, float *a, lapack_int *lda,
float *b, lapack_int *ldb, lapack_int *sdim, float *alphar, float
*alphai, float *beta, float *vsl, lapack_int *ldvsl, float *vsr,
lapack_int *ldvsr, float *work, lapack_int *lwork, lapack_logical
*bwork, lapack_int *info)
void LAPACK_dgges3 (char *jobvsl, char *jobvsr, char *sort,
LAPACK_D_SELECT3 selctg, lapack_int *n, double *a, lapack_int *lda,
double *b, lapack_int *ldb, lapack_int *sdim, double *alphar, double
*alphai, double *beta, double *vsl, lapack_int *ldvsl, double *vsr,
lapack_int *ldvsr, double *work, lapack_int *lwork, lapack_logical
*bwork, lapack_int *info)
void LAPACK_cgges3 (char *jobvsl, char *jobvsr, char *sort,
LAPACK_C_SELECT2 selctg, lapack_int *n, lapack_complex_float *a,
lapack_int *lda, lapack_complex_float *b, lapack_int *ldb,
lapack_int *sdim, lapack_complex_float *alpha, lapack_complex_float
*beta, lapack_complex_float *vsl, lapack_int *ldvsl,
lapack_complex_float *vsr, lapack_int *ldvsr, lapack_complex_float
*work, lapack_int *lwork, float *rwork, lapack_logical *bwork,
lapack_int *info)
void LAPACK_zgges3 (char *jobvsl, char *jobvsr, char *sort,
LAPACK_Z_SELECT2 selctg, lapack_int *n, lapack_complex_double *a,
lapack_int *lda, lapack_complex_double *b, lapack_int *ldb,
lapack_int *sdim, lapack_complex_double *alpha,
lapack_complex_double *beta, lapack_complex_double *vsl, lapack_int
*ldvsl, lapack_complex_double *vsr, lapack_int *ldvsr,
lapack_complex_double *work, lapack_int *lwork, double *rwork,
lapack_logical *bwork, lapack_int *info)
🎀 ggesx — the with-reciprocal-condition-numbers edition
bestie, these are gges but extra — you get a sense flag and rconde/rcondv, plus iwork/liwork for the real ones (complex ones still carry rwork). highkey the overachiever of the family 👑
void LAPACK_sggesx (char *jobvsl, char *jobvsr, char *sort,
LAPACK_S_SELECT3 selctg, char *sense, lapack_int *n, float *a,
lapack_int *lda, float *b, lapack_int *ldb, lapack_int *sdim, float
*alphar, float *alphai, float *beta, float *vsl, lapack_int *ldvsl,
float *vsr, lapack_int *ldvsr, float *rconde, float *rcondv, float
*work, lapack_int *lwork, lapack_int *iwork, lapack_int *liwork,
lapack_logical *bwork, lapack_int *info)
void LAPACK_dggesx (char *jobvsl, char *jobvsr, char *sort,
LAPACK_D_SELECT3 selctg, char *sense, lapack_int *n, double *a,
lapack_int *lda, double *b, lapack_int *ldb, lapack_int *sdim,
double *alphar, double *alphai, double *beta, double *vsl,
lapack_int *ldvsl, double *vsr, lapack_int *ldvsr, double *rconde,
double *rcondv, double *work, lapack_int *lwork, lapack_int *iwork,
lapack_int *liwork, lapack_logical *bwork, lapack_int *info)
void LAPACK_cggesx (char *jobvsl, char *jobvsr, char *sort,
LAPACK_C_SELECT2 selctg, char *sense, lapack_int *n,
lapack_complex_float *a, lapack_int *lda, lapack_complex_float *b,
lapack_int *ldb, lapack_int *sdim, lapack_complex_float *alpha,
lapack_complex_float *beta, lapack_complex_float *vsl, lapack_int
*ldvsl, lapack_complex_float *vsr, lapack_int *ldvsr, float *rconde,
float *rcondv, lapack_complex_float *work, lapack_int *lwork, float
*rwork, lapack_int *iwork, lapack_int *liwork, lapack_logical
*bwork, lapack_int *info)
void LAPACK_zggesx (char *jobvsl, char *jobvsr, char *sort,
LAPACK_Z_SELECT2 selctg, char *sense, lapack_int *n,
lapack_complex_double *a, lapack_int *lda, lapack_complex_double *b,
lapack_int *ldb, lapack_int *sdim, lapack_complex_double *alpha,
lapack_complex_double *beta, lapack_complex_double *vsl, lapack_int
*ldvsl, lapack_complex_double *vsr, lapack_int *ldvsr, double
*rconde, double *rcondv, lapack_complex_double *work, lapack_int
*lwork, double *rwork, lapack_int *iwork, lapack_int *liwork,
lapack_logical *bwork, lapack_int *info)
🌈 generalized eigenvalue problem, the ggev era
jobvl/jobvr girlies rise up — no sort here, no selctg, just pure pencil-solving energy. real ones give you alphar + alphai + beta; complex ones give you alpha + beta. periodt 💅
void LAPACK_sggev (char *jobvl, char *jobvr, lapack_int *n, float *a,
lapack_int *lda, float *b, lapack_int *ldb, float *alphar, float
*alphai, float *beta, float *vl, lapack_int *ldvl, float *vr,
lapack_int *ldvr, float *work, lapack_int *lwork, lapack_int *info)
void LAPACK_dggev (char *jobvl, char *jobvr, lapack_int *n, double *a,
lapack_int *lda, double *b, lapack_int *ldb, double *alphar, double
*alphai, double *beta, double *vl, lapack_int *ldvl, double *vr,
lapack_int *ldvr, double *work, lapack_int *lwork, lapack_int *info)
void LAPACK_cggev (char *jobvl, char *jobvr, lapack_int *n,
lapack_complex_float *a, lapack_int *lda, lapack_complex_float *b,
lapack_int *ldb, lapack_complex_float *alpha, lapack_complex_float
*beta, lapack_complex_float *vl, lapack_int *ldvl,
lapack_complex_float *vr, lapack_int *ldvr, lapack_complex_float
*work, lapack_int *lwork, float *rwork, lapack_int *info)
void LAPACK_zggev (char *jobvl, char *jobvr, lapack_int *n,
lapack_complex_double *a, lapack_int *lda, lapack_complex_double *b,
lapack_int *ldb, lapack_complex_double *alpha, lapack_complex_double
*beta, lapack_complex_double *vl, lapack_int *ldvl,
lapack_complex_double *vr, lapack_int *ldvr, lapack_complex_double
*work, lapack_int *lwork, double *rwork, lapack_int *info)
and the 3 glow-up again, same signatures, updated internals 🌸:
void LAPACK_sggev3 (char *jobvl, char *jobvr, lapack_int *n, float *a,
lapack_int *lda, float *b, lapack_int *ldb, float *alphar, float
*alphai, float *beta, float *vl, lapack_int *ldvl, float *vr,
lapack_int *ldvr, float *work, lapack_int *lwork, lapack_int *info)
void LAPACK_dggev3 (char *jobvl, char *jobvr, lapack_int *n, double *a,
lapack_int *lda, double *b, lapack_int *ldb, double *alphar, double
*alphai, double *beta, double *vl, lapack_int *ldvl, double *vr,
lapack_int *ldvr, double *work, lapack_int *lwork, lapack_int *info)
void LAPACK_cggev3 (char *jobvl, char *jobvr, lapack_int *n,
lapack_complex_float *a, lapack_int *lda, lapack_complex_float *b,
lapack_int *ldb, lapack_complex_float *alpha, lapack_complex_float
*beta, lapack_complex_float *vl, lapack_int *ldvl,
lapack_complex_float *vr, lapack_int *ldvr, lapack_complex_float
*work, lapack_int *lwork, float *rwork, lapack_int *info)
void LAPACK_zggev3 (char *jobvl, char *jobvr, lapack_int *n,
lapack_complex_double *a, lapack_int *lda, lapack_complex_double *b,
lapack_int *ldb, lapack_complex_double *alpha, lapack_complex_double
*beta, lapack_complex_double *vl, lapack_int *ldvl,
lapack_complex_double *vr, lapack_int *ldvr, lapack_complex_double
*work, lapack_int *lwork, double *rwork, lapack_int *info)
🫶 ggevx — balanc + sense, the maximalist icon
flop era? no bestie this is the EVERYTHING era — balanc, jobvl, jobvr, sense, plus ilo/ihi, lscale/rscale, abnrm/bbnrm, rconde/rcondv AND iwork/bwork. it's giving "I brought my whole backpack" 🎒
void LAPACK_sggevx (char *balanc, char *jobvl, char *jobvr, char *sense,
lapack_int *n, float *a, lapack_int *lda, float *b, lapack_int *ldb,
float *alphar, float *alphai, float *beta, float *vl, lapack_int
*ldvl, float *vr, lapack_int *ldvr, lapack_int *ilo, lapack_int
*ihi, float *lscale, float *rscale, float *abnrm, float *bbnrm,
float *rconde, float *rcondv, float *work, lapack_int *lwork,
lapack_int *iwork, lapack_logical *bwork, lapack_int *info)
void LAPACK_dggevx (char *balanc, char *jobvl, char *jobvr, char *sense,
lapack_int *n, double *a, lapack_int *lda, double *b, lapack_int
*ldb, double *alphar, double *alphai, double *beta, double *vl,
lapack_int *ldvl, double *vr, lapack_int *ldvr, lapack_int *ilo,
lapack_int *ihi, double *lscale, double *rscale, double *abnrm,
double *bbnrm, double *rconde, double *rcondv, double *work,
lapack_int *lwork, lapack_int *iwork, lapack_logical *bwork,
lapack_int *info)
void LAPACK_cggevx (char *balanc, char *jobvl, char *jobvr, char *sense,
lapack_int *n, lapack_complex_float *a, lapack_int *lda,
lapack_complex_float *b, lapack_int *ldb, lapack_complex_float
*alpha, lapack_complex_float *beta, lapack_complex_float *vl,
lapack_int *ldvl, lapack_complex_float *vr, lapack_int *ldvr,
lapack_int *ilo, lapack_int *ihi, float *lscale, float *rscale,
float *abnrm, float *bbnrm, float *rconde, float *rcondv,
lapack_complex_float *work, lapack_int *lwork, float *rwork,
lapack_int *iwork, lapack_logical *bwork, lapack_int *info)
and zggevx is mid-sentence — still rolling, bestie 🌀
void LAPACK_zggevx (char *balanc, char *jobvl, char *jobvr, char *sense,
lapack_int *n, lapack_complex_double *a, lapack_int *lda,
lapack_complex_double *b, lapack_int *ldb, lapack_complex_double
*alpha, lapack_complex_double *beta, lapack_complex_double *vl,
lapack_int *ldvl, lapack_complex_double *vr, lapack_int *ldvr,
lapack_int *ilo, lapack_int *ihi, double *lscale, double *rscale,
double *abnrm, double *bbnrm, double *rconde, double *rcondv,
lapack_complex_double *work, lapack_int *lwork, double *rwork,
yep, she got cut off at *rwork — the rest of the params are chilling in the next chunk 💀 don't @ me, that's just where the page broke.
...and we're literally still mid-declaration, bestie 😭 the argument list from the previous entry just keeps going. Do not panic, this is normal, we're picking it up right where we left off:
lapack_int *iwork, lapack_logical *bwork, lapack_int *info)
void LAPACK_dsfrk (char *transr, char *uplo, char *trans, lapack_int *n,
lapack_int *k, double *alpha, const double *a, lapack_int *lda,
double *beta, double *c)
void LAPACK_ssfrk (char *transr, char *uplo, char *trans, lapack_int *n,
lapack_int *k, float *alpha, const float *a, lapack_int *lda, float
*beta, float *c)
void LAPACK_zhfrk (char *transr, char *uplo, char *trans, lapack_int *n,
lapack_int *k, double *alpha, const lapack_complex_double *a,
lapack_int *lda, double *beta, lapack_complex_double *c)
void LAPACK_chfrk (char *transr, char *uplo, char *trans, lapack_int *n,
lapack_int *k, float *alpha, const lapack_complex_float *a,
lapack_int *lda, float *beta, lapack_complex_float *c)
Okay so that's the sfrk / hfrk block, and the vibe check here is that every single one of them is a *frk — <purple>transr</purple>, uplo, trans, then n and k as the two size arguments, then alpha, a, lda, beta, c. Look at the *hfrk ones though — the data is complex but alpha and beta are double * / float * 🎀 that's not a typo, that's just what the signature says, and the signature is the whole personality. s l a y. 💅
Next up, tfsm, and she brought all four flavors:
void LAPACK_dtfsm (char *transr, char *side, char *uplo, char *trans,
char *diag, lapack_int *m, lapack_int *n, double *alpha, const
double *a, double *b, lapack_int *ldb)
void LAPACK_stfsm (char *transr, char *side, char *uplo, char *trans,
char *diag, lapack_int *m, lapack_int *n, float *alpha, const float
*a, float *b, lapack_int *ldb)
void LAPACK_ztfsm (char *transr, char *side, char *uplo, char *trans,
char *diag, lapack_int *m, lapack_int *n, lapack_complex_double
*alpha, const lapack_complex_double *a, lapack_complex_double *b,
lapack_int *ldb)
void LAPACK_ctfsm (char *transr, char *side, char *uplo, char *trans,
char *diag, lapack_int *m, lapack_int *n, lapack_complex_float
*alpha, const lapack_complex_float *a, lapack_complex_float *b,
lapack_int *ldb)
Five char pointers in a row before you even get to a number — transr, side, uplo, trans, diag — which is honestly giving character select screen energy 🎮 note that this one passes m and n and ldb but no info, a and b are both writable-ish pointers in different ways (a is const, b is not, alpha is not). Read the signature, bestie, she is not hiding anything 🙈
And now, the format-shuffle girlies. Six whole families of them, all doing the t-thing:
void LAPACK_dtfttp (char *transr, char *uplo, lapack_int *n, const
double *arf, double *ap, lapack_int *info)
void LAPACK_stfttp (char *transr, char *uplo, lapack_int *n, const float
*arf, float *ap, lapack_int *info)
void LAPACK_ztfttp (char *transr, char *uplo, lapack_int *n, const
lapack_complex_double *arf, lapack_complex_double *ap, lapack_int
*info)
void LAPACK_ctfttp (char *transr, char *uplo, lapack_int *n, const
lapack_complex_float *arf, lapack_complex_float *ap, lapack_int
*info)
void LAPACK_dtfttr (char *transr, char *uplo, lapack_int *n, const
double *arf, double *a, lapack_int *lda, lapack_int *info)
void LAPACK_stfttr (char *transr, char *uplo, lapack_int *n, const float
*arf, float *a, lapack_int *lda, lapack_int *info)
void LAPACK_ztfttr (char *transr, char *uplo, lapack_int *n, const
lapack_complex_double *arf, lapack_complex_double *a, lapack_int
*lda, lapack_int *info)
void LAPACK_ctfttr (char *transr, char *uplo, lapack_int *n, const
lapack_complex_float *arf, lapack_complex_float *a, lapack_int *lda,
lapack_int *info)
void LAPACK_dtpttf (char *transr, char *uplo, lapack_int *n, const
double *ap, double *arf, lapack_int *info)
void LAPACK_stpttf (char *transr, char *uplo, lapack_int *n, const float
*ap, float *arf, lapack_int *info)
void LAPACK_ztpttf (char *transr, char *uplo, lapack_int *n, const
lapack_complex_double *ap, lapack_complex_double *arf, lapack_int
*info)
void LAPACK_ctpttf (char *transr, char *uplo, lapack_int *n, const
lapack_complex_float *ap, lapack_complex_float *arf, lapack_int
*info)
void LAPACK_dtpttr (char *uplo, lapack_int *n, const double *ap, double
*a, lapack_int *lda, lapack_int *info)
void LAPACK_stpttr (char *uplo, lapack_int *n, const float *ap, float
*a, lapack_int *lda, lapack_int *info)
void LAPACK_ztpttr (char *uplo, lapack_int *n, const
lapack_complex_double *ap, lapack_complex_double *a, lapack_int
*lda, lapack_int *info)
void LAPACK_ctpttr (char *uplo, lapack_int *n, const
lapack_complex_float *ap, lapack_complex_float *a, lapack_int *lda,
lapack_int *info)
void LAPACK_dtrttf (char *transr, char *uplo, lapack_int *n, const
double *a, lapack_int *lda, double *arf, lapack_int *info)
void LAPACK_strttf (char *transr, char *uplo, lapack_int *n, const float
*a, lapack_int *lda, float *arf, lapack_int *info)
void LAPACK_ztrttf (char *transr, char *uplo, lapack_int *n, const
lapack_complex_double *a, lapack_int *lda, lapack_complex_double
*arf, lapack_int *info)
void LAPACK_ctrttf (char *transr, char *uplo, lapack_int *n, const
lapack_complex_float *a, lapack_int *lda, lapack_complex_float *arf,
lapack_int *info)
void LAPACK_dtrttp (char *uplo, lapack_int *n, const double *a,
lapack_int *lda, double *ap, lapack_int *info)
void LAPACK_strttp (char *uplo, lapack_int *n, const float *a,
lapack_int *lda, float *ap, lapack_int *info)
void LAPACK_ztrttp (char *uplo, lapack_int *n, const
lapack_complex_double *a, lapack_int *lda, lapack_complex_double
*ap, lapack_int *info)
void LAPACK_ctrttp (char *uplo, lapack_int *n, const
lapack_complex_float *a, lapack_int *lda, lapack_complex_float *ap,
lapack_int *info)
Okay so the trick to reading these: the last chunk of letters tells you which pointer is going where 👀 ...tfttp switches from arf to ap, ...tpttf switches from ap to arf, ...tfttr goes arf → a, ...trttf goes a → arf, ...tpttr goes ap → a, ...trttp goes a → ap. Iconic, honestly. Also notice the tiny detail that's easy to miss: the ...tpttr and ...trttp ones have no transr argument at all while the others all do, and ...tpttr / ...trttp take exactly uplo, n, source, lda, dest, info. info shows up in every single one here. 💖
Then we get the QR-besties and the helper crew:
void LAPACK_sgeqrfp (lapack_int *m, lapack_int *n, float *a, lapack_int
*lda, float *tau, float *work, lapack_int *lwork, lapack_int *info)
void LAPACK_dgeqrfp (lapack_int *m, lapack_int *n, double *a, lapack_int
*lda, double *tau, double *work, lapack_int *lwork, lapack_int
*info)
void LAPACK_cgeqrfp (lapack_int *m, lapack_int *n, lapack_complex_float
*a, lapack_int *lda, lapack_complex_float *tau, lapack_complex_float
*work, lapack_int *lwork, lapack_int *info)
void LAPACK_zgeqrfp (lapack_int *m, lapack_int *n, lapack_complex_double
*a, lapack_int *lda, lapack_complex_double *tau,
lapack_complex_double *work, lapack_int *lwork, lapack_int *info)
void LAPACK_clacgv (lapack_int *n, lapack_complex_float *x, lapack_int
*incx)
void LAPACK_zlacgv (lapack_int *n, lapack_complex_double *x, lapack_int
*incx)
void LAPACK_slarnv (lapack_int *idist, lapack_int *iseed, lapack_int *n,
float *x)
void LAPACK_dlarnv (lapack_int *idist, lapack_int *iseed, lapack_int *n,
double *x)
void LAPACK_clarnv (lapack_int *idist, lapack_int *iseed, lapack_int *n,
lapack_complex_float *x)
void LAPACK_zlarnv (lapack_int *idist, lapack_int *iseed, lapack_int *n,
lapack_complex_double *x)
void LAPACK_sgeqr2 (lapack_int *m, lapack_int *n, float *a, lapack_int
*lda, float *tau, float *work, lapack_int *info)
void LAPACK_dgeqr2 (lapack_int *m, lapack_int *n, double *a, lapack_int
*lda, double *tau, double *work, lapack_int *info)
void LAPACK_cgeqr2 (lapack_int *m, lapack_int *n, lapack_complex_float
*a, lapack_int *lda, lapack_complex_float *tau, lapack_complex_float
*work, lapack_int *info)
void LAPACK_zgeqr2 (lapack_int *m, lapack_int *n, lapack_complex_double
*a, lapack_int *lda, lapack_complex_double *tau,
lapack_complex_double *work, lapack_int *info)
geqrfp takes m, n, a, lda, tau, work, lwork, info — and her little sister geqr2 is the exact same list minus lwork. Catch that. 🦋 Meanwhile lacgv is just n, x, incx (and only the complex ones exist, clacgv and zlacgv, no s/d version — don't go looking, it's not here) and larnv is idist, iseed, n, x in all four flavors. Short and sweet, we love her. ✨
void LAPACK_slacn2 (lapack_int *n, float *v, float *x, lapack_int *isgn,
float *est, lapack_int *kase, lapack_int *isave)
void LAPACK_dlacn2 (lapack_int *n, double *v, double *x, lapack_int
*isgn, double *est, lapack_int *kase, lapack_int *isave)
void LAPACK_clacn2 (lapack_int *n, lapack_complex_float *v,
lapack_complex_float *x, float *est, lapack_int *kase, lapack_int
*isave)
void LAPACK_zlacn2 (lapack_int *n, lapack_complex_double *v,
lapack_complex_double *x, double *est, lapack_int *kase, lapack_int
*isave)
void LAPACK_slacpy (char *uplo, lapack_int *m, lapack_int *n, const
float *a, lapack_int *lda, float *b, lapack_int *ldb)
void LAPACK_dlacpy (char *uplo, lapack_int *m, lapack_int *n, const
double *a, lapack_int *lda, double *b, lapack_int *ldb)
void LAPACK_clacpy (char *uplo, lapack_int *m, lapack_int *n, const
lapack_complex_float *a, lapack_int *lda, lapack_complex_float *b,
lapack_int *ldb)
void LAPACK_zlacpy (char *uplo, lapack_int *m, lapack_int *n, const
lapack_complex_double *a, lapack_int *lda, lapack_complex_double *b,
lapack_int *ldb)
void LAPACK_clacp2 (char *uplo, lapack_int *m, lapack_int *n, const
float *a, lapack_int *lda, lapack_complex_float *b, lapack_int *ldb)
void LAPACK_zlacp2 (char *uplo, lapack_int *m, lapack_int *n, const
double *a, lapack_int *lda, lapack_complex_double *b, lapack_int
*ldb)
void LAPACK_sgetf2 (lapack_int *m, lapack_int *n, float *a, lapack_int
*lda, lapack_int *ipiv, lapack_int *info)
void LAPACK_dgetf2 (lapack_int *m, lapack_int *n, double *a, lapack_int
*lda, lapack_int *ipiv, lapack_int *info)
void LAPACK_cgetf2 (lapack_int *m, lapack_int *n, lapack_complex_float
*a, lapack_int *lda, lapack_int *ipiv, lapack_int *info)
void LAPACK_zgetf2 (lapack_int *m, lapack_int *n, lapack_complex_double
*a, lapack_int *lda, lapack_int *ipiv, lapack_int *info)
void LAPACK_slaswp (lapack_int *n, float *a, lapack_int *lda, lapack_int
*k1, lapack_int *k2, const lapack_int *ipiv, lapack_int *incx)
void LAPACK_dlaswp (lapack_int *n, double *a, lapack_int *lda,
lapack_int *k1, lapack_int *k2, const lapack_int *ipiv, lapack_int
*incx)
void LAPACK_claswp (lapack_int *n, lapack_complex_float *a, lapack_int
*lda, lapack_int *k1, lapack_int *k2, const lapack_int *ipiv,
lapack_int *incx)
void LAPACK_zlaswp (lapack_int *n, lapack_complex_double *a, lapack_int
*lda, lapack_int *k1, lapack_int *k2, const lapack_int *ipiv,
lapack_int *incx)
Quick tour: lacn2 is the long one with isgn, est, kase and isave (and note the s/d versions take a real isgn, while the c/z ones drop isgn entirely and keep est real — it's right there in the signatures 👑). lacpy is the four-flavor uplo, m, n, a, lda, b, ldb copy party. lacp2 only exists for c and z, and look — a is float */double * but b is complex 🎀 getf2 brings ipiv to the function and info along with it. And laswp is n, a, lda, k1, k2, ipiv, incx with ipiv marked const for all four. Consistency is her love language. 💜
And last stretch for this part — the norm girlies and the multiply girlies:
float LAPACK_slange (char *norm, lapack_int *m, lapack_int *n, const
float *a, lapack_int *lda, float *work)
double LAPACK_dlange (char *norm, lapack_int *m, lapack_int *n, const
double *a, lapack_int *lda, double *work)
float LAPACK_clange (char *norm, lapack_int *m, lapack_int *n, const
lapack_complex_float *a, lapack_int *lda, float *work)
double LAPACK_zlange (char *norm, lapack_int *m, lapack_int *n, const
lapack_complex_double *a, lapack_int *lda, double *work)
float LAPACK_clanhe (char *norm, char *uplo, lapack_int *n, const
lapack_complex_float *a, lapack_int *lda, float *work)
double LAPACK_zlanhe (char *norm, char *uplo, lapack_int *n, const
lapack_complex_double *a, lapack_int *lda, double *work)
void LAPACK_clarcm (lapack_int *m, lapack_int *n, const float *a,
lapack_int *lda, const lapack_complex_float *b, lapack_int *ldb,
lapack_complex_float *c, lapack_int *ldc, float *work)
void LAPACK_zlarcm (lapack_int *m, lapack_int *n, const double *a,
lapack_int *lda, const lapack_complex_double *b, lapack_int *ldb,
lapack_complex_double *c, lapack_int *ldc, double *work)
void LAPACK_clacrm (lapack_int *m, lapack_int *n, const
lapack_complex_float *a, lapack_int *lda, const float *b, lapack_int
*ldb, lapack_complex_float *c, lapack_int *ldc, float *work)
void LAPACK_zlacrm (lapack_int *m, lapack_int *n, const
lapack_complex_double *a, lapack_int *lda, const double *b,
Okay the lange / lanhe ones are the only entries on this whole stretch that actually return something (float / double, no void) — everyone else here is a void. And lanhe only has c and z versions, no s/d, because hermitian needs complex data, bestie 💀
Then larcm vs lacrm: same four letters, different order, different types. larcm = real a × complex b → complex c, lacrm = complex a × real b → complex c. Both have m, n, lda, ldb, ldc, work, both mark a and b const, both hand you back a writable c. Fr fr do not mix them up 😭 and that's exactly where LAPACK_zlacrm is cut off — mid-signature, const double *b, and then the page moves on in the next part 🫶
...and that lonely leftover line up top, lapack_int *ldb, lapack_complex_double *c, lapack_int *ldc, double *work) — yeah bestie, that's just the tail end of the prototype from the last chunk, she's fine, she's just finishing her sentence 💅
matrix normies 🌸
Okay so these are the "how big is this thing actually" girlies. Four precisions each, and they all take pointers to everything, even the poor little scalar return values, because LAPACK does not believe in passing anything by value, ever, periodt:
float LAPACK_slansy (char *norm, char *uplo, lapack_int *n, const float
*a, lapack_int *lda, float *work)
double LAPACK_dlansy (char *norm, char *uplo, lapack_int *n, const
double *a, lapack_int *lda, double *work)
float LAPACK_clansy (char *norm, char *uplo, lapack_int *n, const
lapack_complex_float *a, lapack_int *lda, float *work)
double LAPACK_zlansy (char *norm, char *uplo, lapack_int *n, const
lapack_complex_double *a, lapack_int *lda, double *work)
float LAPACK_slantr (char *norm, char *uplo, char *diag, lapack_int *m,
lapack_int *n, const float *a, lapack_int *lda, float *work)
double LAPACK_dlantr (char *norm, char *uplo, char *diag, lapack_int *m,
lapack_int *n, const double *a, lapack_int *lda, double *work)
float LAPACK_clantr (char *norm, char *uplo, char *diag, lapack_int *m,
lapack_int *n, const lapack_complex_float *a, lapack_int *lda, float
*work)
double LAPACK_zlantr (char *norm, char *uplo, char *diag, lapack_int *m,
lapack_int *n, const lapack_complex_double *a, lapack_int *lda,
double *work)
float LAPACK_slamch (char *cmach)
double LAPACK_dlamch (char *cmach)
Notice slantr and friends get an extra char *diag because triangles are special like that ✨ and lansy/lantr take char *norm and char *uplo as pointers to chars, which is giving "I learned C in 1988 and I'm thriving" energy. And then slamch/dlamch are just... vibing with a single char *cmach, no matrix at all — the s and d girlies only, no complex version, that's the whole list, don't come for me 🫶
the factorization-adjacent besties 🎀
void LAPACK_sgelq2 (lapack_int *m, lapack_int *n, float *a, lapack_int
*lda, float *tau, float *work, lapack_int *info)
void LAPACK_dgelq2 (lapack_int *m, lapack_int *n, double *a, lapack_int
*lda, double *tau, double *work, lapack_int *info)
void LAPACK_cgelq2 (lapack_int *m, lapack_int *n, lapack_complex_float
*a, lapack_int *lda, lapack_complex_float *tau, lapack_complex_float
*work, lapack_int *info)
void LAPACK_zgelq2 (lapack_int *m, lapack_int *n, lapack_complex_double
*a, lapack_int *lda, lapack_complex_double *tau,
lapack_complex_double *work, lapack_int *info)
void LAPACK_slarfb (char *side, char *trans, char *direct, char *storev,
lapack_int *m, lapack_int *n, lapack_int *k, const float *v,
lapack_int *ldv, const float *t, lapack_int *ldt, float *c,
lapack_int *ldc, float *work, lapack_int *ldwork)
void LAPACK_dlarfb (char *side, char *trans, char *direct, char *storev,
lapack_int *m, lapack_int *n, lapack_int *k, const double *v,
lapack_int *ldv, const double *t, lapack_int *ldt, double *c,
lapack_int *ldc, double *work, lapack_int *ldwork)
void LAPACK_clarfb (char *side, char *trans, char *direct, char *storev,
lapack_int *m, lapack_int *n, lapack_int *k, const
lapack_complex_float *v, lapack_int *ldv, const lapack_complex_float
*t, lapack_int *ldt, lapack_complex_float *c, lapack_int *ldc,
lapack_complex_float *work, lapack_int *ldwork)
void LAPACK_zlarfb (char *side, char *trans, char *direct, char *storev,
lapack_int *m, lapack_int *n, lapack_int *k, const
lapack_complex_double *v, lapack_int *ldv, const
lapack_complex_double *t, lapack_int *ldt, lapack_complex_double *c,
lapack_int *ldc, lapack_complex_double *work, lapack_int *ldwork)
larfb said "I'm gonna need four char * flags before we even get to the numbers" and honestly? Iconic. side, trans, direct, storev — a whole little personality quiz before any math happens 🌈 Also lowkey obsessed with the fact that sgelq2 and dgelq2 hand you an info for the tea, but the work array and tau get top billing first. Order matters, bestie.
the tiny workhorses 🔥
void LAPACK_slarfg (lapack_int *n, float *alpha, float *x, lapack_int
*incx, float *tau)
void LAPACK_dlarfg (lapack_int *n, double *alpha, double *x, lapack_int
*incx, double *tau)
void LAPACK_clarfg (lapack_int *n, lapack_complex_float *alpha,
lapack_complex_float *x, lapack_int *incx, lapack_complex_float
*tau)
void LAPACK_zlarfg (lapack_int *n, lapack_complex_double *alpha,
lapack_complex_double *x, lapack_int *incx, lapack_complex_double
*tau)
void LAPACK_slassq (lapack_int *n, float *x, lapack_int *incx, float
*scale, float *sumsq)
void LAPACK_dlassq (lapack_int *n, double *x, lapack_int *incx, double
*scale, double *sumsq)
void LAPACK_classq (lapack_int *n, lapack_complex_float *x, lapack_int
*incx, float *scale, float *sumsq)
void LAPACK_zlassq (lapack_int *n, lapack_complex_double *x, lapack_int
*incx, double *scale, double *sumsq)
larfg girlies: no info, no work, just n, alpha, x, incx, tau and vibes. lassq is the same deal but with scale and sumsq instead — and yes, the complex versions still take real float/double scale and sumsq scalars, look at it, it's right there 💀
more factorization scaffolding 🦋
void LAPACK_slarft (char *direct, char *storev, lapack_int *n,
lapack_int *k, const float *v, lapack_int *ldv, const float *tau,
float *t, lapack_int *ldt)
void LAPACK_dlarft (char *direct, char *storev, lapack_int *n,
lapack_int *k, const double *v, lapack_int *ldv, const double *tau,
double *t, lapack_int *ldt)
void LAPACK_clarft (char *direct, char *storev, lapack_int *n,
lapack_int *k, const lapack_complex_float *v, lapack_int *ldv, const
lapack_complex_float *tau, lapack_complex_float *t, lapack_int *ldt)
void LAPACK_zlarft (char *direct, char *storev, lapack_int *n,
lapack_int *k, const lapack_complex_double *v, lapack_int *ldv,
const lapack_complex_double *tau, lapack_complex_double *t,
lapack_int *ldt)
void LAPACK_slarfx (char *side, lapack_int *m, lapack_int *n, const
float *v, float *tau, float *c, lapack_int *ldc, float *work)
void LAPACK_dlarfx (char *side, lapack_int *m, lapack_int *n, const
double *v, double *tau, double *c, lapack_int *ldc, double *work)
void LAPACK_clarfx (char *side, lapack_int *m, lapack_int *n, const
lapack_complex_float *v, lapack_complex_float *tau,
lapack_complex_float *c, lapack_int *ldc, lapack_complex_float
*work)
void LAPACK_zlarfx (char *side, lapack_int *m, lapack_int *n, const
lapack_complex_double *v, lapack_complex_double *tau,
lapack_complex_double *c, lapack_int *ldc, lapack_complex_double
*work)
Note the difference bestie — larft has const on v and tau but not on t, while larfx has const on v only, and tau and c are wide open for business. Const-correctness is a spectrum and LAPACK is on it 🙈 Neither of these has an info, so if something goes sideways, that's between you and your god.
the matrix generator era 👑
void LAPACK_slatms (lapack_int *m, lapack_int *n, char *dist, lapack_int
*iseed, char *sym, float *d, lapack_int *mode, float *cond, float
*dmax, lapack_int *kl, lapack_int *ku, char *pack, float *a,
lapack_int *lda, float *work, lapack_int *info)
void LAPACK_dlatms (lapack_int *m, lapack_int *n, char *dist, lapack_int
*iseed, char *sym, double *d, lapack_int *mode, double *cond, double
*dmax, lapack_int *kl, lapack_int *ku, char *pack, double *a,
lapack_int *lda, double *work, lapack_int *info)
void LAPACK_clatms (lapack_int *m, lapack_int *n, char *dist, lapack_int
*iseed, char *sym, float *d, lapack_int *mode, float *cond, float
*dmax, lapack_int *kl, lapack_int *ku, char *pack,
lapack_complex_float *a, lapack_int *lda, lapack_complex_float
*work, lapack_int *info)
void LAPACK_zlatms (lapack_int *m, lapack_int *n, char *dist, lapack_int
*iseed, char *sym, double *d, lapack_int *mode, double *cond, double
*dmax, lapack_int *kl, lapack_int *ku, char *pack,
lapack_complex_double *a, lapack_int *lda, lapack_complex_double
*work, lapack_int *info)
Sixteen arguments. Sixteen. dist, iseed, sym, mode, cond, dmax, kl, ku, pack — she's got the whole alphabet in there and she's not sorry. Also peep that clatms/zlatms take a real d, cond and dmax even though the matrix is complex, because consistency is for other people 💅 And yes, info is back, we love a return-to-form.
precision glow-ups ✨
void LAPACK_slag2d (lapack_int *m, lapack_int *n, const float *sa,
lapack_int *ldsa, double *a, lapack_int *lda, lapack_int *info)
void LAPACK_dlag2s (lapack_int *m, lapack_int *n, const double *a,
lapack_int *lda, float *sa, lapack_int *ldsa, lapack_int *info)
void LAPACK_clag2z (lapack_int *m, lapack_int *n, const
lapack_complex_float *sa, lapack_int *ldsa, lapack_complex_double
*a, lapack_int *lda, lapack_int *info)
void LAPACK_zlag2c (lapack_int *m, lapack_int *n, const
lapack_complex_double *a, lapack_int *lda, lapack_complex_float *sa,
lapack_int *ldsa, lapack_int *info)
Okay so watch the naming, this is the cute part: slag2d and clag2z go little → big (sa → a, ldsa → lda), while dlag2s and zlag2c go big → little (a → sa, lda → ldsa). The single/double pair flip the argument order to match, and the complex pair do too. Iykyk — read the type, not the vibe check 🫶 The input is const, the output is not, and info rides along on all four.
void LAPACK_slauum (char *uplo, lapack_int *n, float *a, lapack_int
*lda, lapack_int *info)
void LAPACK_dlauum (char *uplo, lapack_int *n, double *a, lapack_int
*lda, lapack_int *info)
void LAPACK_clauum (char *uplo, lapack_int *n, lapack_complex_float *a,
lapack_int *lda, lapack_int *info)
void LAPACK_zlauum (char *uplo, lapack_int *n, lapack_complex_double *a,
lapack_int *lda, lapack_int *info)
Short, sweet, uplo, n, a, lda, info, done. Honestly refreshing after the sixteen-argument situation up there 😭
fill it, scale it, sort it 🌸
void LAPACK_slagge (lapack_int *m, lapack_int *n, lapack_int *kl,
lapack_int *ku, const float *d, float *a, lapack_int *lda,
lapack_int *iseed, float *work, lapack_int *info)
void LAPACK_dlagge (lapack_int *m, lapack_int *n, lapack_int *kl,
lapack_int *ku, const double *d, double *a, lapack_int *lda,
lapack_int *iseed, double *work, lapack_int *info)
void LAPACK_clagge (lapack_int *m, lapack_int *n, lapack_int *kl,
lapack_int *ku, const float *d, lapack_complex_float *a, lapack_int
*lda, lapack_int *iseed, lapack_complex_float *work, lapack_int
*info)
void LAPACK_zlagge (lapack_int *m, lapack_int *n, lapack_int *kl,
lapack_int *ku, const double *d, lapack_complex_double *a,
lapack_int *lda, lapack_int *iseed, lapack_complex_double *work,
lapack_int *info)
lagge girlies get kl and ku (yes, both, always, even when they're irrelevant — not my business, that's just the signature, don't shoot the messenger 💀) plus a const d and a mutable iseed. Complex versions again take real float/double d. The pattern is pattern-ing.
void LAPACK_slascl (char *type, lapack_int *kl, lapack_int *ku, float
*cfrom, float *cto, lapack_int *m, lapack_int *n, float *a,
lapack_int *lda, lapack_int *info)
void LAPACK_dlascl (char *type, lapack_int *kl, lapack_int *ku, double
*cfrom, double *cto, lapack_int *m, lapack_int *n, double *a,
lapack_int *lda, lapack_int *info)
void LAPACK_clascl (char *type, lapack_int *kl, lapack_int *ku, float
*cfrom, float *cto, lapack_int *m, lapack_int *n,
lapack_complex_float *a, lapack_int *lda, lapack_int *info)
void LAPACK_zlascl (char *type, lapack_int *kl, lapack_int *ku, double
*cfrom, double *cto, lapack_int *m, lapack_int *n,
lapack_complex_double *a, lapack_int *lda, lapack_int *info)
cfrom and cto are not const on the complex ones — nope, plain float/double pointers for all four. That's just how she's written, bestie, write it down 🎀
void LAPACK_slaset (char *uplo, lapack_int *m, lapack_int *n, float
*alpha, float *beta, float *a, lapack_int *lda)
void LAPACK_dlaset (char *uplo, lapack_int *m, lapack_int *n, double
*alpha, double *beta, double *a, lapack_int *lda)
void LAPACK_claset (char *uplo, lapack_int *m, lapack_int *n,
lapack_complex_float *alpha, lapack_complex_float *beta,
lapack_complex_float *a, lapack_int *lda)
void LAPACK_zlaset (char *uplo, lapack_int *m, lapack_int *n,
lapack_complex_double *alpha, lapack_complex_double *beta,
lapack_complex_double *a, lapack_int *lda)
void LAPACK_slasrt (char *id, lapack_int *n, float *d, lapack_int *info)
void LAPACK_dlasrt (char *id, lapack_int *n, double *d, lapack_int
*info)
laset has no info (she's confident, she doesn't need the validation) and lasrt only exists in s and d — no clasrt, no zlasrt, that's the entire roster, don't @ me 😭
the symmetric/hermitian generators 🧚
void LAPACK_claghe (lapack_int *n, lapack_int *k, const float *d,
lapack_complex_float *a, lapack_int *lda, lapack_int *iseed,
lapack_complex_float *work, lapack_int *info)
void LAPACK_zlaghe (lapack_int *n, lapack_int *k, const double *d,
lapack_complex_double *a, lapack_int *lda, lapack_int *iseed,
lapack_complex_double *work, lapack_int *info)
void LAPACK_slagsy (lapack_int *n, lapack_int *k, const float *d, float
*a, lapack_int *lda, lapack_int *iseed, float *work, lapack_int
*info)
void LAPACK_dlagsy (lapack_int *n, lapack_int *k, const double *d,
double *a, lapack_int *lda, lapack_int *iseed, double *work,
lapack_int *info)
void LAPACK_clagsy (lapack_int *n, lapack_int *k, const float *d,
lapack_complex_float *a, lapack_int *lda, lapack_int *iseed,
lapack_complex_float *work, lapack_int *info)
void LAPACK_zlagsy (lapack_int *n, lapack_int *k, const double *d,
lapack_complex_double *a, lapack_int *lda, lapack_int *iseed,
And we're cutting off mid-zlagsy — that lapack_int *iseed, is just hanging there like a text message that got sent too early 💀 Hold that thought, bestie, we pick it up in the next chunk...
…and we're picking up right in the middle of a signature, bestie, don't panic — that's just how the function listings in this header roll 💅
lapack_complex_double *work, lapack_int *info)
Okay so now we hit the permutation girlies — the lapmr/lapmt quartet, which come in all four flavors (that's s/d/c/z for float / double / complex float / complex double, iykyk):
void LAPACK_slapmr (lapack_logical *forwrd, lapack_int *m, lapack_int
*n, float *x, lapack_int *ldx, lapack_int *k)
void LAPACK_dlapmr (lapack_logical *forwrd, lapack_int *m, lapack_int
*n, double *x, lapack_int *ldx, lapack_int *k)
void LAPACK_clapmr (lapack_logical *forwrd, lapack_int *m, lapack_int
*n, lapack_complex_float *x, lapack_int *ldx, lapack_int *k)
void LAPACK_zlapmr (lapack_logical *forwrd, lapack_int *m, lapack_int
*n, lapack_complex_double *x, lapack_int *ldx, lapack_int *k)
void LAPACK_slapmt (lapack_logical *forwrd, lapack_int *m, lapack_int
*n, float *x, lapack_int *ldx, lapack_int *k)
void LAPACK_dlapmt (lapack_logical *forwrd, lapack_int *m, lapack_int
*n, double *x, lapack_int *ldx, lapack_int *k)
void LAPACK_clapmt (lapack_logical *forwrd, lapack_int *m, lapack_int
*n, lapack_complex_float *x, lapack_int *ldx, lapack_int *k)
void LAPACK_zlapmt (lapack_logical *forwrd, lapack_int *m, lapack_int
*n, lapack_complex_double *x, lapack_int *ldx, lapack_int *k)
Notice <pink>**lapmr**</pink> and <pink>**lapmt**</pink> have literally identical argument lists — forwrd, m, n, x, ldx, k — so yes, they're twins, that's not a typo, keep scrolling 🫶
🌸 the tiny math helpers (they're little but they ate)
Next up: <purple>**lapy2**</purple> and <purple>**lapy3**</purple> — and bestie, look at the return types, they're the only ones in this whole stretch returning a value instead of being void:
float LAPACK_slapy2 (float *x, float *y)
double LAPACK_dlapy2 (double *x, double *y)
float LAPACK_slapy3 (float *x, float *y, float *z)
double LAPACK_dlapy3 (double *x, double *y, double *z)
Only s and d for these two, no complex versions — that's not me gatekeeping, that's literally the list 😌
🎀 lartgp & lartgs — the plane-rotation girlies
void LAPACK_slartgp (float *f, float *g, float *cs, float *sn, float *r)
void LAPACK_dlartgp (double *f, double *g, double *cs, double *sn,
double *r)
void LAPACK_slartgs (float *x, float *y, float *sigma, float *cs, float
*sn)
void LAPACK_dlartgs (double *x, double *y, double *sigma, double *cs,
double *sn)
lartgp takes f, g, cs, sn, r. lartgs takes x, y, sigma, cs, sn. Both hand you back cs and sn — the classic cosine/sine pair — and again, <italic>s</italic> and <italic>d</italic> only, no complex siblings fr fr 💖
💅 the complex-only club: bbcsd + the he/ sy family
Brace yourself, <hotpink>**LAPACK_cbbcsd**</hotpink> is that girl with the long signature — twenty-something arguments, and she has a rwork/lrwork pair at the end (that's the real-array work space, so even the complex version needs the real girlies to help out):
void LAPACK_cbbcsd (char *jobu1, char *jobu2, char *jobv1t, char
*jobv2t, char *trans, lapack_int *m, lapack_int *p, lapack_int *q,
float *theta, float *phi, lapack_complex_float *u1, lapack_int
*ldu1, lapack_complex_float *u2, lapack_int *ldu2,
lapack_complex_float *v1t, lapack_int *ldv1t, lapack_complex_float
*v2t, lapack_int *ldv2t, float *b11d, float *b11e, float *b12d,
float *b12e, float *b21d, float *b21e, float *b22d, float *b22e,
float *rwork, lapack_int *lrwork, lapack_int *info)
Then the Hermitian he crew — swap, triangular inverse (two versions!), and solve:
void LAPACK_cheswapr (char *uplo, lapack_int *n, lapack_complex_float
*a, lapack_int *lda, lapack_int *i1, lapack_int *i2)
void LAPACK_chetri2 (char *uplo, lapack_int *n, lapack_complex_float *a,
lapack_int *lda, const lapack_int *ipiv, lapack_complex_float *work,
lapack_int *lwork, lapack_int *info)
void LAPACK_chetri2x (char *uplo, lapack_int *n, lapack_complex_float
*a, lapack_int *lda, const lapack_int *ipiv, lapack_complex_float
*work, lapack_int *nb, lapack_int *info)
void LAPACK_chetrs2 (char *uplo, lapack_int *n, lapack_int *nrhs, const
lapack_complex_float *a, lapack_int *lda, const lapack_int *ipiv,
lapack_complex_float *b, lapack_int *ldb, lapack_complex_float
*work, lapack_int *info)
real talk:cheswaprhas noinfoand nowork— she just swaps and leaves, iconic. The others all report back through*info. Also peep theconstonipiv— she does not get modified, respect her boundaries 💀
🦋 the complex symmetric sy family (yes it's a different family, keep up)
void LAPACK_csyconv (char *uplo, char *way, lapack_int *n,
lapack_complex_float *a, lapack_int *lda, const lapack_int *ipiv,
lapack_complex_float *e, lapack_int *info)
void LAPACK_csyswapr (char *uplo, lapack_int *n, lapack_complex_float
*a, lapack_int *lda, lapack_int *i1, lapack_int *i2)
void LAPACK_csytri2 (char *uplo, lapack_int *n, lapack_complex_float *a,
lapack_int *lda, const lapack_int *ipiv, lapack_complex_float *work,
lapack_int *lwork, lapack_int *info)
void LAPACK_csytri2x (char *uplo, lapack_int *n, lapack_complex_float
*a, lapack_int *lda, const lapack_int *ipiv, lapack_complex_float
*work, lapack_int *nb, lapack_int *info)
void LAPACK_csytrs2 (char *uplo, lapack_int *n, lapack_int *nrhs, const
lapack_complex_float *a, lapack_int *lda, const lapack_int *ipiv,
lapack_complex_float *b, lapack_int *ldb, lapack_complex_float
*work, lapack_int *info)
csyconv is the extra-special one here — she's got the way argument and an e output that the tri2/trs2 girlies don't have. Not me noticing the details, I just did ✨
👑 the CS decomposition trilogy: unbdb, uncsd, uncsd2by1
These are the big ones — <rainbow>**cunbdb**</rainbow>, <rainbow>**cuncsd**</rainbow>, <rainbow>**cuncsd2by1**</rainbow>. They take the four-block layout (x11, x12, x21, x22 with their ldx buddies), plus theta (and phi where she's invited):
void LAPACK_cunbdb (char *trans, char *signs, lapack_int *m, lapack_int
*p, lapack_int *q, lapack_complex_float *x11, lapack_int *ldx11,
lapack_complex_float *x12, lapack_int *ldx12, lapack_complex_float
*x21, lapack_int *ldx21, lapack_complex_float *x22, lapack_int
*ldx22, float *theta, float *phi, lapack_complex_float *taup1,
lapack_complex_float *taup2, lapack_complex_float *tauq1,
lapack_complex_float *tauq2, lapack_complex_float *work, lapack_int
*lwork, lapack_int *info)
void LAPACK_cuncsd (char *jobu1, char *jobu2, char *jobv1t, char
*jobv2t, char *trans, char *signs, lapack_int *m, lapack_int *p,
lapack_int *q, lapack_complex_float *x11, lapack_int *ldx11,
lapack_complex_float *x12, lapack_int *ldx12, lapack_complex_float
*x21, lapack_int *ldx21, lapack_complex_float *x22, lapack_int
*ldx22, float *theta, lapack_complex_float *u1, lapack_int *ldu1,
lapack_complex_float *u2, lapack_int *ldu2, lapack_complex_float
*v1t, lapack_int *ldv1t, lapack_complex_float *v2t, lapack_int
*ldv2t, lapack_complex_float *work, lapack_int *lwork, float *rwork,
lapack_int *lrwork, lapack_int *iwork, lapack_int *info)
void LAPACK_cuncsd2by1 (char *jobu1, char *jobu2, char *jobv1t,
lapack_int *m, lapack_int *p, lapack_int *q, lapack_complex_float
*x11, lapack_int *ldx11, lapack_complex_float *x21, lapack_int
*ldx21, float *theta, lapack_complex_float *u1, lapack_int *ldu1,
lapack_complex_float *u2, lapack_int *ldu2, lapack_complex_float
*v1t, lapack_int *ldv1t, lapack_complex_float *work, lapack_int
*lwork, float *rwork, lapack_int *lrwork, lapack_int *iwork,
lapack_int *info)
the way <hotpink>**cunbdb**</hotpink> is the only one without jobu1/jobu2/jobv1t/jobv2t… she doesn't need job flags, she is the job 😤 and <hotpink>**cuncsd2by1**</hotpink> drops the x12/x22 blocks and their ldx friends entirely — two-by-one, get it? the name ate 💅
🌈 double precision time: dbbcsd, dorbdb, dorcsd, dorcsd2by1
Same shapes, <blue>double` everywhere, no complex types in sight:
void LAPACK_dbbcsd (char *jobu1, char *jobu2, char *jobv1t, char
*jobv2t, char *trans, lapack_int *m, lapack_int *p, lapack_int *q,
double *theta, double *phi, double *u1, lapack_int *ldu1, double
*u2, lapack_int *ldu2, double *v1t, lapack_int *ldv1t, double *v2t,
lapack_int *ldv2t, double *b11d, double *b11e, double *b12d, double
*b12e, double *b21d, double *b21e, double *b22d, double *b22e,
double *work, lapack_int *lwork, lapack_int *info)
void LAPACK_dorbdb (char *trans, char *signs, lapack_int *m, lapack_int
*p, lapack_int *q, double *x11, lapack_int *ldx11, double *x12,
lapack_int *ldx12, double *x21, lapack_int *ldx21, double *x22,
lapack_int *ldx22, double *theta, double *phi, double *taup1, double
*taup2, double *tauq1, double *tauq2, double *work, lapack_int
*lwork, lapack_int *info)
void LAPACK_dorcsd (char *jobu1, char *jobu2, char *jobv1t, char
*jobv2t, char *trans, char *signs, lapack_int *m, lapack_int *p,
lapack_int *q, double *x11, lapack_int *ldx11, double *x12,
lapack_int *ldx12, double *x21, lapack_int *ldx21, double *x22,
lapack_int *ldx22, double *theta, double *u1, lapack_int *ldu1,
double *u2, lapack_int *ldu2, double *v1t, lapack_int *ldv1t, double
*v2t, lapack_int *ldv2t, double *work, lapack_int *lwork, lapack_int
*iwork, lapack_int *info)
void LAPACK_dorcsd2by1 (char *jobu1, char *jobu2, char *jobv1t,
lapack_int *m, lapack_int *p, lapack_int *q, double *x11, lapack_int
*ldx11, double *x21, lapack_int *ldx21, double *theta, double *u1,
lapack_int *ldu1, double *u2, lapack_int *ldu2, double *v1t,
lapack_int *ldv1t, double *work, lapack_int *lwork, lapack_int
*iwork, lapack_int *info)
small detail that matters: <green>**dbbcsd**</green> has work/lwork, but <green>**dorbdb**</green> has no iwork while <green>**dorcsd**</green> and <green>**dorcsd2by1**</green> do. Copy the signature, don't freehand it, please 🫶
🍓 dsyconv / dsyswapr / dsytri2 / dsytri2x / dsytrs2
void LAPACK_dsyconv (char *uplo, char *way, lapack_int *n, double *a,
lapack_int *lda, const lapack_int *ipiv, double *e, lapack_int
*info)
void LAPACK_dsyswapr (char *uplo, lapack_int *n, double *a, lapack_int
*lda, lapack_int *i1, lapack_int *i2)
void LAPACK_dsytri2 (char *uplo, lapack_int *n, double *a, lapack_int
*lda, const lapack_int *ipiv, double *work, lapack_int *lwork,
lapack_int *info)
void LAPACK_dsytri2x (char *uplo, lapack_int *n, double *a, lapack_int
*lda, const lapack_int *ipiv, double *work, lapack_int *nb,
lapack_int *info)
void LAPACK_dsytrs2 (char *uplo, lapack_int *n, lapack_int *nrhs, const
double *a, lapack_int *lda, const lapack_int *ipiv, double *b,
lapack_int *ldb, double *work, lapack_int *info)
dsyconv → has way + e. dsyswapr → has i1 + i2, no ipiv, no info. dsytri2 → lwork. dsytri2x → nb. dsytrs2 → the nrhs/b/ldb solve trio. every girl has her own little accessory, it's giving accessories haul 🎀
⭐ single precision era: sbbcsd, sorbdb, sorcsd, sorcsd2by1
void LAPACK_sbbcsd (char *jobu1, char *jobu2, char *jobv1t, char
*jobv2t, char *trans, lapack_int *m, lapack_int *p, lapack_int *q,
float *theta, float *phi, float *u1, lapack_int *ldu1, float *u2,
lapack_int *ldu2, float *v1t, lapack_int *ldv1t, float *v2t,
lapack_int *ldv2t, float *b11d, float *b11e, float *b12d, float
*b12e, float *b21d, float *b21e, float *b22d, float *b22e, float
*work, lapack_int *lwork, lapack_int *info)
void LAPACK_sorbdb (char *trans, char *signs, lapack_int *m, lapack_int
*p, lapack_int *q, float *x11, lapack_int *ldx11, float *x12,
lapack_int *ldx12, float *x21, lapack_int *ldx21, float *x22,
lapack_int *ldx22, float *theta, float *phi, float *taup1, float
*taup2, float *tauq1, float *tauq2, float *work, lapack_int *lwork,
lapack_int *info)
void LAPACK_sorcsd (char *jobu1, char *jobu2, char *jobv1t, char
*jobv2t, char *trans, char *signs, lapack_int *m, lapack_int *p,
lapack_int *q, float *x11, lapack_int *ldx11, float *x12, lapack_int
*ldx12, float *x21, lapack_int *ldx21, float *x22, lapack_int
*ldx22, float *theta, float *u1, lapack_int *ldu1, float *u2,
lapack_int *ldu2, float *v1t, lapack_int *ldv1t, float *v2t,
lapack_int *ldv2t, float *work, lapack_int *lwork, lapack_int
*iwork, lapack_int *info)
void LAPACK_sorcsd2by1 (char *jobu1, char *jobu2, char *jobv1t,
lapack_int *m, lapack_int *p, lapack_int *q, float *x11, lapack_int
*ldx11, float *x21, lapack_int *ldx21, float *theta, float *u1,
lapack_int *ldu1, float *u2, lapack_int *ldu2, float *v1t,
lapack_int *ldv1t, float *work, lapack_int *lwork, lapack_int
*iwork, lapack_int *info)
literally the <blue>dversions but**float**</mint> — same argument names, same order, same everything. once you learn one you learn them all, that's the beauty of the LAPACKE naming thing 💜
🧚 ssyconv / ssyswapr / ssytri2 / ssytri2x / ssytrs2
void LAPACK_ssyconv (char *uplo, char *way, lapack_int *n, float *a,
lapack_int *lda, const lapack_int *ipiv, float *e, lapack_int *info)
void LAPACK_ssyswapr (char *uplo, lapack_int *n, float *a, lapack_int
*lda, lapack_int *i1, lapack_int *i2)
void LAPACK_ssytri2 (char *uplo, lapack_int *n, float *a, lapack_int
*lda, const lapack_int *ipiv, float *work, lapack_int *lwork,
lapack_int *info)
void LAPACK_ssytri2x (char *uplo, lapack_int *n, float *a, lapack_int
*lda, const lapack_int *ipiv, float *work, lapack_int *nb,
lapack_int *info)
void LAPACK_ssytrs2 (char *uplo, lapack_int *n, lapack_int *nrhs, const
float *a, lapack_int *lda, const lapack_int *ipiv, float *b,
lapack_int *ldb, float *work, lapack_int *info)
ssyconv fits on one tidy line because <mint>float` is short — queen of efficiency honestly 🌸
🙈 and now… the z era begins
<purple>**LAPACK_zbbcsd**</purple> is the complex-double bbcsd, and she's cut off mid-signature in this part — do not come for me, the page continues in the next chunk, we literally end on lapack_complex_double with no closing paren, it's a cliffhanger bestie 😭
void LAPACK_zbbcsd (char *jobu1, char *jobu2, char *jobv1t, char
*jobv2t, char *trans, lapack_int *m, lapack_int *p, lapack_int *q,
double *theta, double *phi, lapack_complex_double *u1, lapack_int
*ldu1, lapack_complex_double *u2, lapack_int *ldu2,
lapack_complex_double *v1t, lapack_int *ldv1t, lapack_complex_double
note howthetaandphiare still plain<blue>doubleeven thoughu1,u2,v1tare**lapack_complex_double**</purple>— mixed types, mixed vibes, that's just how she is. the rest of her arguments (thev2t/ldv2t, theb11d…b22eblock,work,lwork,info) are waiting for us on the other side ✨
stay tuned, the <purple>z` girlies are just getting started 💅
...and we're right back in the thick of it, mid-prototype, no warning, no apology. The tail end of the one from before goes like this 🫶
*v2t, lapack_int *ldv2t, double *b11d, double *b11e, double *b12d,
double *b12e, double *b21d, double *b21e, double *b22d, double *b22e,
double *rwork, lapack_int *lrwork, lapack_int *info)
cool cool cool. that's a whole lot of bs and a v2t and we are simply going to move on 💅
Next up it's the zhes / zsy block. Nine of them. Every single one takes lapack_complex_double, and every single parameter is a pointer — yes, n, yes uplo, yes info, all of it, no exceptions. The const crew is the input squad and the bare pointers are the ones getting written to, and honestly that's the whole vibe check right there ✨
void LAPACK_zheswapr (char *uplo, lapack_int *n, lapack_complex_double
*a, lapack_int *lda, lapack_int *i1, lapack_int *i2)
void LAPACK_zhetri2 (char *uplo, lapack_int *n, lapack_complex_double
*a, lapack_int *lda, const lapack_int *ipiv, lapack_complex_double
*work, lapack_int *lwork, lapack_int *info)
void LAPACK_zhetri2x (char *uplo, lapack_int *n, lapack_complex_double
*a, lapack_int *lda, const lapack_int *ipiv, lapack_complex_double
*work, lapack_int *nb, lapack_int *info)
void LAPACK_zhetrs2 (char *uplo, lapack_int *n, lapack_int *nrhs, const
lapack_complex_double *a, lapack_int *lda, const lapack_int *ipiv,
lapack_complex_double *b, lapack_int *ldb, lapack_complex_double
*work, lapack_int *info)
void LAPACK_zsyconv (char *uplo, char *way, lapack_int *n,
lapack_complex_double *a, lapack_int *lda, const lapack_int *ipiv,
lapack_complex_double *e, lapack_int *info)
void LAPACK_zsyswapr (char *uplo, lapack_int *n, lapack_complex_double
*a, lapack_int *lda, lapack_int *i1, lapack_int *i2)
void LAPACK_zsytri2 (char *uplo, lapack_int *n, lapack_complex_double
*a, lapack_int *lda, const lapack_int *ipiv, lapack_complex_double
*work, lapack_int *lwork, lapack_int *info)
void LAPACK_zsytri2x (char *uplo, lapack_int *n, lapack_complex_double
*a, lapack_int *lda, const lapack_int *ipiv, lapack_complex_double
*work, lapack_int *nb, lapack_int *info)
void LAPACK_zsytrs2 (char *uplo, lapack_int *n, lapack_int *nrhs, const
lapack_complex_double *a, lapack_int *lda, const lapack_int *ipiv,
lapack_complex_double *b, lapack_int *ldb, lapack_complex_double
*work, lapack_int *info)
Not me noticing that zheswapr and zsyswapr are twinsies — same exact argument list, uplo, n, a, lda, i1, i2, zero info, zero work. Iconic minimalism. Meanwhile the tri2/tri2x girlies are collecting ipiv and work and nb like Pokémon cards 🎀
Then the big two-width-theta-phi energy section, plus the 2by1 redux. Look at all these x11, x12, x21, x22 and the matching ldx lineup — it's giving grid realness:
void LAPACK_zunbdb (char *trans, char *signs, lapack_int *m, lapack_int
*p, lapack_int *q, lapack_complex_double *x11, lapack_int *ldx11,
lapack_complex_double *x12, lapack_int *ldx12, lapack_complex_double
*x21, lapack_int *ldx21, lapack_complex_double *x22, lapack_int
*ldx22, double *theta, double *phi, lapack_complex_double *taup1,
lapack_complex_double *taup2, lapack_complex_double *tauq1,
lapack_complex_double *tauq2, lapack_complex_double *work,
lapack_int *lwork, lapack_int *info)
void LAPACK_zuncsd (char *jobu1, char *jobu2, char *jobv1t, char
*jobv2t, char *trans, char *signs, lapack_int *m, lapack_int *p,
lapack_int *q, lapack_complex_double *x11, lapack_int *ldx11,
lapack_complex_double *x12, lapack_int *ldx12, lapack_complex_double
*x21, lapack_int *ldx21, lapack_complex_double *x22, lapack_int
*ldx22, double *theta, lapack_complex_double *u1, lapack_int *ldu1,
lapack_complex_double *u2, lapack_int *ldu2, lapack_complex_double
*v1t, lapack_int *ldv1t, lapack_complex_double *v2t, lapack_int
*ldv2t, lapack_complex_double *work, lapack_int *lwork, double
*rwork, lapack_int *lrwork, lapack_int *iwork, lapack_int *info)
void LAPACK_zuncsd2by1 (char *jobu1, char *jobu2, char *jobv1t,
lapack_int *m, lapack_int *p, lapack_int *q, lapack_complex_double
*x11, lapack_int *ldx11, lapack_complex_double *x21, lapack_int
*ldx21, double *theta, lapack_complex_double *u1, lapack_int *ldu1,
lapack_complex_double *u2, lapack_int *ldu2, lapack_complex_double
*v1t, lapack_int *ldv1t, lapack_complex_double *work, lapack_int
*lwork, double *rwork, lapack_int *lrwork, lapack_int *iwork,
lapack_int *info)
okay but zuncsd is THAT girl — she's hauling around theta AND rwork AND lrwork AND iwork on top of every single x and u and v1t and v2t and their ld partners. The 2by1 version is the same energy but with the x12/x22 half of the grid left at home and no jobv2t/trans/signs in the club. Obsessed. 🦋
Now the gemqrt quartet, and this is where the s / d / c / z pattern really starts showing off: four functions, same skeleton, only the scalar type swaps. float for s, double for d, lapack_complex_float for c, lapack_complex_double for z. Slay, consistency 💜
void LAPACK_sgemqrt (char *side, char *trans, lapack_int *m, lapack_int
*n, lapack_int *k, lapack_int *nb, const float *v, lapack_int *ldv,
const float *t, lapack_int *ldt, float *c, lapack_int *ldc, float
*work, lapack_int *info)
void LAPACK_dgemqrt (char *side, char *trans, lapack_int *m, lapack_int
*n, lapack_int *k, lapack_int *nb, const double *v, lapack_int *ldv,
const double *t, lapack_int *ldt, double *c, lapack_int *ldc, double
*work, lapack_int *info)
void LAPACK_cgemqrt (char *side, char *trans, lapack_int *m, lapack_int
*n, lapack_int *k, lapack_int *nb, const lapack_complex_float *v,
lapack_int *ldv, const lapack_complex_float *t, lapack_int *ldt,
lapack_complex_float *c, lapack_int *ldc, lapack_complex_float
*work, lapack_int *info)
void LAPACK_zgemqrt (char *side, char *trans, lapack_int *m, lapack_int
*n, lapack_int *k, lapack_int *nb, const lapack_complex_double *v,
lapack_int *ldv, const lapack_complex_double *t, lapack_int *ldt,
lapack_complex_double *c, lapack_int *ldc, lapack_complex_double
*work, lapack_int *info)
And then the twelve-function gauntlet: geqrt, geqrt2, geqrt3, times four flavours each. No side, no trans, just m, n, nb (or no nb at all for the 2 and 3 variants) and a t and a work and an info. Note that geqrt2 and geqrt3 drop the nb and the work entirely — they said less is more. Periodt.
void LAPACK_sgeqrt (lapack_int *m, lapack_int *n, lapack_int *nb, float
*a, lapack_int *lda, float *t, lapack_int *ldt, float *work,
lapack_int *info)
void LAPACK_dgeqrt (lapack_int *m, lapack_int *n, lapack_int *nb, double
*a, lapack_int *lda, double *t, lapack_int *ldt, double *work,
lapack_int *info)
void LAPACK_cgeqrt (lapack_int *m, lapack_int *n, lapack_int *nb,
lapack_complex_float *a, lapack_int *lda, lapack_complex_float *t,
lapack_int *ldt, lapack_complex_float *work, lapack_int *info)
void LAPACK_zgeqrt (lapack_int *m, lapack_int *n, lapack_int *nb,
lapack_complex_double *a, lapack_int *lda, lapack_complex_double *t,
lapack_int *ldt, lapack_complex_double *work, lapack_int *info)
void LAPACK_sgeqrt2 (lapack_int *m, lapack_int *n, float *a, lapack_int
*lda, float *t, lapack_int *ldt, lapack_int *info)
void LAPACK_dgeqrt2 (lapack_int *m, lapack_int *n, double *a, lapack_int
*lda, double *t, lapack_int *ldt, lapack_int *info)
void LAPACK_cgeqrt2 (lapack_int *m, lapack_int *n, lapack_complex_float
*a, lapack_int *lda, lapack_complex_float *t, lapack_int *ldt,
lapack_int *info)
void LAPACK_zgeqrt2 (lapack_int *m, lapack_int *n, lapack_complex_double
*a, lapack_int *lda, lapack_complex_double *t, lapack_int *ldt,
lapack_int *info)
void LAPACK_sgeqrt3 (lapack_int *m, lapack_int *n, float *a, lapack_int
*lda, float *t, lapack_int *ldt, lapack_int *info)
void LAPACK_dgeqrt3 (lapack_int *m, lapack_int *n, double *a, lapack_int
*lda, double *t, lapack_int *ldt, lapack_int *info)
void LAPACK_cgeqrt3 (lapack_int *m, lapack_int *n, lapack_complex_float
*a, lapack_int *lda, lapack_complex_float *t, lapack_int *ldt,
lapack_int *info)
void LAPACK_zgeqrt3 (lapack_int *m, lapack_int *n, lapack_complex_double
*a, lapack_int *lda, lapack_complex_double *t, lapack_int *ldt,
lapack_int *info)
tpmqrt time 💀 — side, trans, m, n, k, and l, and nb, then v/ldv, t/ldt, a/lda, b/ldb, work, info. That's a full itinerary. The way this argument list just keeps going, honestly main character energy 🌈
void LAPACK_stpmqrt (char *side, char *trans, lapack_int *m, lapack_int
*n, lapack_int *k, lapack_int *l, lapack_int *nb, const float *v,
lapack_int *ldv, const float *t, lapack_int *ldt, float *a,
lapack_int *lda, float *b, lapack_int *ldb, float *work, lapack_int
*info)
void LAPACK_dtpmqrt (char *side, char *trans, lapack_int *m, lapack_int
*n, lapack_int *k, lapack_int *l, lapack_int *nb, const double *v,
lapack_int *ldv, const double *t, lapack_int *ldt, double *a,
lapack_int *lda, double *b, lapack_int *ldb, double *work,
lapack_int *info)
void LAPACK_ctpmqrt (char *side, char *trans, lapack_int *m, lapack_int
*n, lapack_int *k, lapack_int *l, lapack_int *nb, const
lapack_complex_float *v, lapack_int *ldv, const lapack_complex_float
*t, lapack_int *ldt, lapack_complex_float *a, lapack_int *lda,
lapack_complex_float *b, lapack_int *ldb, lapack_complex_float
*work, lapack_int *info)
void LAPACK_ztpmqrt (char *side, char *trans, lapack_int *m, lapack_int
*n, lapack_int *k, lapack_int *l, lapack_int *nb, const
lapack_complex_double *v, lapack_int *ldv, const
lapack_complex_double *t, lapack_int *ldt, lapack_complex_double *a,
lapack_int *lda, lapack_complex_double *b, lapack_int *ldb,
lapack_complex_double *work, lapack_int *info)
Then tpqrt, which is the same recipe minus the side/trans seasoning:
void LAPACK_stpqrt (lapack_int *m, lapack_int *n, lapack_int *l,
lapack_int *nb, float *a, lapack_int *lda, float *b, lapack_int
*ldb, float *t, lapack_int *ldt, float *work, lapack_int *info)
void LAPACK_dtpqrt (lapack_int *m, lapack_int *n, lapack_int *l,
lapack_int *nb, double *a, lapack_int *lda, double *b, lapack_int
*ldb, double *t, lapack_int *ldt, double *work, lapack_int *info)
void LAPACK_ctpqrt (lapack_int *m, lapack_int *n, lapack_int *l,
lapack_int *nb, lapack_complex_float *a, lapack_int *lda,
lapack_complex_float *b, lapack_int *ldb, lapack_complex_float *t,
lapack_int *ldt, lapack_complex_float *work, lapack_int *info)
void LAPACK_ztpqrt (lapack_int *m, lapack_int *n, lapack_int *l,
lapack_int *nb, lapack_complex_double *a, lapack_int *lda,
lapack_complex_double *b, lapack_int *ldb, lapack_complex_double *t,
lapack_int *ldt, lapack_complex_double *work, lapack_int *info)
And tpqrt2, where nb and work have left the chat — same as what happened with geqrt2:
void LAPACK_stpqrt2 (lapack_int *m, lapack_int *n, lapack_int *l, float
*a, lapack_int *lda, float *b, lapack_int *ldb, float *t, lapack_int
*ldt, lapack_int *info)
void LAPACK_dtpqrt2 (lapack_int *m, lapack_int *n, lapack_int *l, double
*a, lapack_int *lda, double *b, lapack_int *ldb, double *t,
lapack_int *ldt, lapack_int *info)
void LAPACK_ctpqrt2 (lapack_int *m, lapack_int *n, lapack_int *l,
lapack_complex_float *a, lapack_int *lda, lapack_complex_float *b,
lapack_int *ldb, lapack_complex_float *t, lapack_int *ldt,
lapack_int *info)
void LAPACK_ztpqrt2 (lapack_int *m, lapack_int *n, lapack_int *l,
lapack_complex_double *a, lapack_int *lda, lapack_complex_double *b,
lapack_int *ldb, lapack_complex_double *t, lapack_int *ldt,
lapack_int *info)
okay and finally the tprfb squad, and bestie you need to look closely at these because 👏 they 👏 are 👏 different 👏. They've got side, trans, direct, and storev up front, then m, n, k, l, then v/ldv, t/ldt, a/lda, b/ldb, and then — get this — const float *work, lapack_int *ldwork. That's a const work and a *ldwork and no info anywhere. Not a single one. 🙈
void LAPACK_stprfb (char *side, char *trans, char *direct, char *storev,
lapack_int *m, lapack_int *n, lapack_int *k, lapack_int *l, const
float *v, lapack_int *ldv, const float *t, lapack_int *ldt, float
*a, lapack_int *lda, float *b, lapack_int *ldb, const float *work,
lapack_int *ldwork)
void LAPACK_dtprfb (char *side, char *trans, char *direct, char *storev,
lapack_int *m, lapack_int *n, lapack_int *k, lapack_int *l, const
double *v, lapack_int *ldv, const double *t, lapack_int *ldt, double
*a, lapack_int *lda, double *b, lapack_int *ldb, const double *work,
lapack_int *ldwork)
void LAPACK_ctprfb (char *side, char *trans, char *direct, char *storev,
lapack_int *m, lapack_int *n, lapack_int *k, lapack_int *l, const
lapack_complex_float *v, lapack_int *ldv, const lapack_complex_float
*t, lapack_int *ldt, lapack_complex_float *a, lapack_int *lda,
lapack_complex_float *b, lapack_int *ldb, lapack_complex_float
*work, lapack_int *ldwork)
void LAPACK_ztprfb (char *side, char *trans, char *direct, char *storev,
and yes, that's exactly where the page cuts us off — mid-signature, mid-storev, mid-everything. ztprfb is out here teasing us. We'll get the rest of her next time 💀✨
…and it just keeps going, bestie 😭 this is the part where the SYNOPSIS list becomes a whole personality. We're still mid-arg-list from before, so here's the tail end of that one — don't panic, it's not a new function, it's the leftovers:
lapack_int *m, lapack_int *n, lapack_int *k, lapack_int *l, const
lapack_complex_double *v, lapack_int *ldv, const
lapack_complex_double *t, lapack_int *ldt, lapack_complex_double *a,
lapack_int *lda, lapack_complex_double *b, lapack_int *ldb,
lapack_complex_double *work, lapack_int *ldwork)
🎀 the _rook era (yes, all of them)
Okay so first up: a whole squad of routines rocking the _rook suffix. They come in the classic four-flavour lineup — s (float), d (double), c (lapack_complex_float), z (lapack_complex_double) — and sy vs he is the split you'll notice immediately. Here's the entire roll call, no skips, no "and so on" 🙅♀️
void LAPACK_ssysv_rook (char *uplo, lapack_int *n, lapack_int *nrhs,
float *a, lapack_int *lda, lapack_int *ipiv, float *b, lapack_int
*ldb, float *work, lapack_int *lwork, lapack_int *info)
void LAPACK_ssytrf_rook (char *uplo, lapack_int *n, float *a, lapack_int
*lda, lapack_int *ipiv, float *work, lapack_int *lwork, lapack_int
*info)
void LAPACK_dsysv_rook (char *uplo, lapack_int *n, lapack_int *nrhs,
double *a, lapack_int *lda, lapack_int *ipiv, double *b, lapack_int
*ldb, double *work, lapack_int *lwork, lapack_int *info)
void LAPACK_dsytrf_rook (char *uplo, lapack_int *n, double *a,
lapack_int *lda, lapack_int *ipiv, double *work, lapack_int *lwork,
lapack_int *info)
void LAPACK_csysv_rook (char *uplo, lapack_int *n, lapack_int *nrhs,
lapack_complex_float *a, lapack_int *lda, lapack_int *ipiv,
lapack_complex_float *b, lapack_int *ldb, lapack_complex_float
*work, lapack_int *lwork, lapack_int *info)
void LAPACK_csytrf_rook (char *uplo, lapack_int *n, lapack_complex_float
*a, lapack_int *lda, lapack_int *ipiv, lapack_complex_float *work,
lapack_int *lwork, lapack_int *info)
void LAPACK_zsysv_rook (char *uplo, lapack_int *n, lapack_int *nrhs,
lapack_complex_double *a, lapack_int *lda, lapack_int *ipiv,
lapack_complex_double *b, lapack_int *ldb, lapack_complex_double
*work, lapack_int *lwork, lapack_int *info)
void LAPACK_zsytrf_rook (char *uplo, lapack_int *n,
lapack_complex_double *a, lapack_int *lda, lapack_int *ipiv,
lapack_complex_double *work, lapack_int *lwork, lapack_int *info)
And the trs trio-plus-one that goes with them 👇
void LAPACK_ssytrs_rook (char *uplo, lapack_int *n, lapack_int *nrhs,
const float *a, lapack_int *lda, const lapack_int *ipiv, float *b,
lapack_int *ldb, lapack_int *info)
void LAPACK_dsytrs_rook (char *uplo, lapack_int *n, lapack_int *nrhs,
const double *a, lapack_int *lda, const lapack_int *ipiv, double *b,
lapack_int *ldb, lapack_int *info)
void LAPACK_csytrs_rook (char *uplo, lapack_int *n, lapack_int *nrhs,
const lapack_complex_float *a, lapack_int *lda, const lapack_int
*ipiv, lapack_complex_float *b, lapack_int *ldb, lapack_int *info)
void LAPACK_zsytrs_rook (char *uplo, lapack_int *n, lapack_int *nrhs,
const lapack_complex_double *a, lapack_int *lda, const lapack_int
*ipiv, lapack_complex_double *b, lapack_int *ldb, lapack_int *info)
Then the he girlies show up and honestly they ate:
void LAPACK_chetrf_rook (char *uplo, lapack_int *n, lapack_complex_float
*a, lapack_int *lda, lapack_int *ipiv, lapack_complex_float *work,
lapack_int *lwork, lapack_int *info)
void LAPACK_zhetrf_rook (char *uplo, lapack_int *n,
lapack_complex_double *a, lapack_int *lda, lapack_int *ipiv,
lapack_complex_double *work, lapack_int *lwork, lapack_int *info)
void LAPACK_chetrs_rook (char *uplo, lapack_int *n, lapack_int *nrhs,
const lapack_complex_float *a, lapack_int *lda, const lapack_int
*ipiv, lapack_complex_float *b, lapack_int *ldb, lapack_int *info)
void LAPACK_zhetrs_rook (char *uplo, lapack_int *n, lapack_int *nrhs,
const lapack_complex_double *a, lapack_int *lda, const lapack_int
*ipiv, lapack_complex_double *b, lapack_int *ldb, lapack_int *info)
💅 notice how everytrsversion hasconstonaandipivbut a nakedb? That's not a typo, bestie, that's just how the page lists them. Copy the exact prototypes, don't get creative.
🦋 the random little guys
Two lone syr routines (no s/d version here, just complex, and that's iconic of them) plus ilaver, which is the only one in this whole stretch that isn't packing an uplo:
void LAPACK_csyr (char *uplo, lapack_int *n, lapack_complex_float
*alpha, const lapack_complex_float *x, lapack_int *incx,
lapack_complex_float *a, lapack_int *lda)
void LAPACK_zsyr (char *uplo, lapack_int *n, lapack_complex_double
*alpha, const lapack_complex_double *x, lapack_int *incx,
lapack_complex_double *a, lapack_int *lda)
void LAPACK_ilaver (const lapack_int *vers_major, const lapack_int
*vers_minor, const lapack_int *vers_patch)
ilaver taking vers_major, vers_minor, vers_patch is it giving version-number energy? Yes. Is it subtle? Absolutely not. ⭐
✨ the _aa family ✨
Now the suffix changes and the whole cast comes back out. Same argument shapes as before, different letters on the end — this is the part where you go "wait, didn't I just read this?" and the answer is yes, but the name is different so it counts 🙈
Solve-ish ones first:
void LAPACK_ssysv_aa (char *uplo, lapack_int *n, lapack_int *nrhs, float
*a, lapack_int *lda, lapack_int *ipiv, float *b, lapack_int *ldb,
float *work, lapack_int *lwork, lapack_int *info)
void LAPACK_dsysv_aa (char *uplo, lapack_int *n, lapack_int *nrhs,
double *a, lapack_int *lda, lapack_int *ipiv, double *b, lapack_int
*ldb, double *work, lapack_int *lwork, lapack_int *info)
void LAPACK_csysv_aa (char *uplo, lapack_int *n, lapack_int *nrhs,
lapack_complex_float *a, lapack_int *lda, lapack_int *ipiv,
lapack_complex_float *b, lapack_int *ldb, lapack_complex_float
*work, lapack_int *lwork, lapack_int *info)
void LAPACK_zsysv_aa (char *uplo, lapack_int *n, lapack_int *nrhs,
lapack_complex_double *a, lapack_int *lda, lapack_int *ipiv,
lapack_complex_double *b, lapack_int *ldb, lapack_complex_double
*work, lapack_int *lwork, lapack_int *info)
void LAPACK_chesv_aa (char *uplo, lapack_int *n, lapack_int *nrhs,
lapack_complex_float *a, lapack_int *lda, lapack_int *ipiv,
lapack_complex_float *b, lapack_int *ldb, lapack_complex_float
*work, lapack_int *lwork, lapack_int *info)
void LAPACK_zhesv_aa (char *uplo, lapack_int *n, lapack_int *nrhs,
lapack_complex_double *a, lapack_int *lda, lapack_int *ipiv,
lapack_complex_double *b, lapack_int *ldb, lapack_complex_double
*work, lapack_int *lwork, lapack_int *info)
Factor-y ones, note there's no nrhs and no b here, so the list is shorter — enjoy it while it lasts 🍓
void LAPACK_ssytrf_aa (char *uplo, lapack_int *n, float *a, lapack_int
*lda, lapack_int *ipiv, float *work, lapack_int *lwork, lapack_int
*info)
void LAPACK_dsytrf_aa (char *uplo, lapack_int *n, double *a, lapack_int
*lda, lapack_int *ipiv, double *work, lapack_int *lwork, lapack_int
*info)
void LAPACK_csytrf_aa (char *uplo, lapack_int *n, lapack_complex_float
*a, lapack_int *lda, lapack_int *ipiv, lapack_complex_float *work,
lapack_int *lwork, lapack_int *info)
void LAPACK_zsytrf_aa (char *uplo, lapack_int *n, lapack_complex_double
*a, lapack_int *lda, lapack_int *ipiv, lapack_complex_double *work,
lapack_int *lwork, lapack_int *info)
void LAPACK_chetrf_aa (char *uplo, lapack_int *n, lapack_complex_float
*a, lapack_int *lda, lapack_int *ipiv, lapack_complex_float *work,
lapack_int *lwork, lapack_int *info)
void LAPACK_zhetrf_aa (char *uplo, lapack_int *n, lapack_complex_double
*a, lapack_int *lda, lapack_int *ipiv, lapack_complex_double *work,
lapack_int *lwork, lapack_int *info)
And the trs six, which are the only _aa ones with both work and b in the mix — highkey the most extra of the group:
void LAPACK_ssytrs_aa (char *uplo, lapack_int *n, lapack_int *nrhs,
const float *a, lapack_int *lda, const lapack_int *ipiv, float *b,
lapack_int *ldb, float *work, lapack_int *lwork, lapack_int *info)
void LAPACK_dsytrs_aa (char *uplo, lapack_int *n, lapack_int *nrhs,
const double *a, lapack_int *lda, const lapack_int *ipiv, double *b,
lapack_int *ldb, double *work, lapack_int *lwork, lapack_int *info)
void LAPACK_csytrs_aa (char *uplo, lapack_int *n, lapack_int *nrhs,
const lapack_complex_float *a, lapack_int *lda, const lapack_int
*ipiv, lapack_complex_float *b, lapack_int *ldb,
lapack_complex_float *work, lapack_int *lwork, lapack_int *info)
void LAPACK_zsytrs_aa (char *uplo, lapack_int *n, lapack_int *nrhs,
const lapack_complex_double *a, lapack_int *lda, const lapack_int
*ipiv, lapack_complex_double *b, lapack_int *ldb,
lapack_complex_double *work, lapack_int *lwork, lapack_int *info)
void LAPACK_chetrs_aa (char *uplo, lapack_int *n, lapack_int *nrhs,
const lapack_complex_float *a, lapack_int *lda, const lapack_int
*ipiv, lapack_complex_float *b, lapack_int *ldb,
lapack_complex_float *work, lapack_int *lwork, lapack_int *info)
void LAPACK_zhetrs_aa (char *uplo, lapack_int *n, lapack_int *nrhs,
const lapack_complex_double *a, lapack_int *lda, const lapack_int
*ipiv, lapack_complex_double *b, lapack_int *ldb,
lapack_complex_double *work, lapack_int *lwork, lapack_int *info)
🧚 the _rk girlies (new character alert: e)
Okay so the _rk crew is basically the _aa crew but with an extra e pointer dropped in right after lda in the factor/solve ones. That's the whole vibe shift. The sysv_rk / hesv_rk lineup:
void LAPACK_ssysv_rk (char *uplo, lapack_int *n, lapack_int *nrhs, float
*a, lapack_int *lda, float *e, lapack_int *ipiv, float *b,
lapack_int *ldb, float *work, lapack_int *lwork, lapack_int *info)
void LAPACK_dsysv_rk (char *uplo, lapack_int *n, lapack_int *nrhs,
double *a, lapack_int *lda, double *e, lapack_int *ipiv, double *b,
lapack_int *ldb, double *work, lapack_int *lwork, lapack_int *info)
void LAPACK_csysv_rk (char *uplo, lapack_int *n, lapack_int *nrhs,
lapack_complex_float *a, lapack_int *lda, lapack_complex_float *e,
lapack_int *ipiv, lapack_complex_float *b, lapack_int *ldb,
lapack_complex_float *work, lapack_int *lwork, lapack_int *info)
void LAPACK_zsysv_rk (char *uplo, lapack_int *n, lapack_int *nrhs,
lapack_complex_double *a, lapack_int *lda, lapack_complex_double *e,
lapack_int *ipiv, lapack_complex_double *b, lapack_int *ldb,
lapack_complex_double *work, lapack_int *lwork, lapack_int *info)
void LAPACK_chesv_rk (char *uplo, lapack_int *n, lapack_int *nrhs,
lapack_complex_float *a, lapack_int *lda, lapack_complex_float *e,
lapack_int *ipiv, lapack_complex_float *b, lapack_int *ldb,
lapack_complex_float *work, lapack_int *lwork, lapack_int *info)
void LAPACK_zhesv_rk (char *uplo, lapack_int *n, lapack_int *nrhs,
lapack_complex_double *a, lapack_int *lda, lapack_complex_double *e,
lapack_int *ipiv, lapack_complex_double *b, lapack_int *ldb,
lapack_complex_double *work, lapack_int *lwork, lapack_int *info)
The trf_rk ones, also carrying e, no b, no nrhs:
void LAPACK_ssytrf_rk (char *uplo, lapack_int *n, float *a, lapack_int
*lda, float *e, lapack_int *ipiv, float *work, lapack_int *lwork,
lapack_int *info)
void LAPACK_dsytrf_rk (char *uplo, lapack_int *n, double *a, lapack_int
*lda, double *e, lapack_int *ipiv, double *work, lapack_int *lwork,
lapack_int *info)
void LAPACK_csytrf_rk (char *uplo, lapack_int *n, lapack_complex_float
*a, lapack_int *lda, lapack_complex_float *e, lapack_int *ipiv,
lapack_complex_float *work, lapack_int *lwork, lapack_int *info)
void LAPACK_zsytrf_rk (char *uplo, lapack_int *n, lapack_complex_double
*a, lapack_int *lda, lapack_complex_double *e, lapack_int *ipiv,
lapack_complex_double *work, lapack_int *lwork, lapack_int *info)
void LAPACK_chetrf_rk (char *uplo, lapack_int *n, lapack_complex_float
*a, lapack_int *lda, lapack_complex_float *e, lapack_int *ipiv,
lapack_complex_float *work, lapack_int *lwork, lapack_int *info)
void LAPACK_zhetrf_rk (char *uplo, lapack_int *n, lapack_complex_double
*a, lapack_int *lda, lapack_complex_double *e, lapack_int *ipiv,
lapack_complex_double *work, lapack_int *lwork, lapack_int *info)
💀 and now the suffix flipped to _3
Plot twist, bestie: the trs versions of the _rk crew are not called trs_rk, they're called trs_3. Not a typo (we assume, it's what the page says), just vibes. They do keep the e and the const situation from before:
void LAPACK_ssytrs_3 (char *uplo, lapack_int *n, lapack_int *nrhs, const
float *a, lapack_int *lda, const float *e, const lapack_int *ipiv,
float *b, lapack_int *ldb, lapack_int *info)
void LAPACK_dsytrs_3 (char *uplo, lapack_int *n, lapack_int *nrhs, const
…and yeah, that's exactly where this part runs out 😭 mid-LAPACK_dsytrs_3, const dangling, absolutely leaving us on a cliffhanger. Next part picks it right back up — don't touch that dial 🫶
okay so we're still in the SYNOPSIS and it's literally just prototype after prototype at this point 💅 but every single one is a main character, so we're giving them all their screen time. no cap, no skipping, we're gonna get through this together. 🫶
first up: the _3 trs girlies. LAPACK_dsytrs_3 started in the last part, so here's the rest of her signature, exactly as promised:
double *a, lapack_int *lda, const double *e, const lapack_int *ipiv,
double *b, lapack_int *ldb, lapack_int *info)
and then her sisters in full — LAPACK_csytrs_3, LAPACK_zsytrs_3, LAPACK_chetrs_3, LAPACK_zhetrs_3:
void LAPACK_csytrs_3 (char *uplo, lapack_int *n, lapack_int *nrhs, const
lapack_complex_float *a, lapack_int *lda, const lapack_complex_float
*e, const lapack_int *ipiv, lapack_complex_float *b, lapack_int
*ldb, lapack_int *info)
void LAPACK_zsytrs_3 (char *uplo, lapack_int *n, lapack_int *nrhs, const
lapack_complex_double *a, lapack_int *lda, const
lapack_complex_double *e, const lapack_int *ipiv,
lapack_complex_double *b, lapack_int *ldb, lapack_int *info)
void LAPACK_chetrs_3 (char *uplo, lapack_int *n, lapack_int *nrhs, const
lapack_complex_float *a, lapack_int *lda, const lapack_complex_float
*e, const lapack_int *ipiv, lapack_complex_float *b, lapack_int
*ldb, lapack_int *info)
void LAPACK_zhetrs_3 (char *uplo, lapack_int *n, lapack_int *nrhs, const
lapack_complex_double *a, lapack_int *lda, const
lapack_complex_double *e, const lapack_int *ipiv,
lapack_complex_double *b, lapack_int *ldb, lapack_int *info)
the way they all take uplo, n, nrhs, a, lda, e, ipiv, b, ldb, info — that's the whole squad. csytrs_3 and chetrs_3 are the lapack_complex_float ones, zsytrs_3 and zhetrs_3 are the lapack_complex_double ones. the sy and he energy is both present and accounted for. slay. 💅
next: the tri_3 crew. they brought work and lwork because they're doing the most (respectfully):
void LAPACK_ssytri_3 (char *uplo, lapack_int *n, float *a, lapack_int
*lda, const float *e, const lapack_int *ipiv, float *work,
lapack_int *lwork, lapack_int *info)
void LAPACK_dsytri_3 (char *uplo, lapack_int *n, double *a, lapack_int
*lda, const double *e, const lapack_int *ipiv, double *work,
lapack_int *lwork, lapack_int *info)
void LAPACK_csytri_3 (char *uplo, lapack_int *n, lapack_complex_float
*a, lapack_int *lda, const lapack_complex_float *e, const lapack_int
*ipiv, lapack_complex_float *work, lapack_int *lwork, lapack_int
*info)
void LAPACK_zsytri_3 (char *uplo, lapack_int *n, lapack_complex_double
*a, lapack_int *lda, const lapack_complex_double *e, const
lapack_int *ipiv, lapack_complex_double *work, lapack_int *lwork,
lapack_int *info)
void LAPACK_chetri_3 (char *uplo, lapack_int *n, lapack_complex_float
*a, lapack_int *lda, const lapack_complex_float *e, const lapack_int
*ipiv, lapack_complex_float *work, lapack_int *lwork, lapack_int
*info)
void LAPACK_zhetri_3 (char *uplo, lapack_int *n, lapack_complex_double
*a, lapack_int *lda, const lapack_complex_double *e, const
lapack_int *ipiv, lapack_complex_double *work, lapack_int *lwork,
lapack_int *info)
ssytri_3 and dsytri_3 are the real float/double ones, csytri_3 and zsytri_3 are complex, chetri_3 and zhetri_3 are the other complex flavor. every single one takes uplo, n, a, lda, e, ipiv, work, lwork, info. the lwork is just sitting there like a little boss. periodt. ✨
then the con_3 squad — condition-estimating energy, and they're all about anorm and rcond:
void LAPACK_ssycon_3 (char *uplo, lapack_int *n, const float *a,
lapack_int *lda, const float *e, const lapack_int *ipiv, float
*anorm, float *rcond, float *work, lapack_int *iwork, lapack_int
*info)
void LAPACK_dsycon_3 (char *uplo, lapack_int *n, const double *a,
lapack_int *lda, const double *e, const lapack_int *ipiv, double
*anorm, double *rcond, double *work, lapack_int *iwork, lapack_int
*info)
void LAPACK_csycon_3 (char *uplo, lapack_int *n, const
lapack_complex_float *a, lapack_int *lda, const lapack_complex_float
*e, const lapack_int *ipiv, float *anorm, float *rcond,
lapack_complex_float *work, lapack_int *info)
void LAPACK_zsycon_3 (char *uplo, lapack_int *n, const
lapack_complex_double *a, lapack_int *lda, const
lapack_complex_double *e, const lapack_int *ipiv, double *anorm,
double *rcond, lapack_complex_double *work, lapack_int *info)
void LAPACK_checon_3 (char *uplo, lapack_int *n, const
lapack_complex_float *a, lapack_int *lda, const lapack_complex_float
*e, const lapack_int *ipiv, float *anorm, float *rcond,
lapack_complex_float *work, lapack_int *info)
void LAPACK_zhecon_3 (char *uplo, lapack_int *n, const
lapack_complex_double *a, lapack_int *lda, const
lapack_complex_double *e, const lapack_int *ipiv, double *anorm,
double *rcond, lapack_complex_double *work, lapack_int *info)
okay so ssycon_3/dsycon_3 take const float*/const double* for a, e, and ipiv, plus anorm, rcond, work, iwork, info. the complex csycon_3/zsycon_3/checon_3/zhecon_3 take float/double anorm and rcond but lapack_complex_* work — and they don't have iwork in the signature. not me noticing the little differences 👀 anyway, exact tea below.
now we're in the gelq era. sgelq, dgelq, cgelq, zgelq — all of them take m, n, a, lda, t, tsize, work, lwork, info, and tsize is giving mysterious and powerful:
void LAPACK_sgelq (lapack_int *m, lapack_int *n, float *a, lapack_int
*lda, float *t, lapack_int *tsize, float *work, lapack_int *lwork,
lapack_int *info)
void LAPACK_dgelq (lapack_int *m, lapack_int *n, double *a, lapack_int
*lda, double *t, lapack_int *tsize, double *work, lapack_int *lwork,
lapack_int *info)
void LAPACK_cgelq (lapack_int *m, lapack_int *n, lapack_complex_float
*a, lapack_int *lda, lapack_complex_float *t, lapack_int *tsize,
lapack_complex_float *work, lapack_int *lwork, lapack_int *info)
void LAPACK_zgelq (lapack_int *m, lapack_int *n, lapack_complex_double
*a, lapack_int *lda, lapack_complex_double *t, lapack_int *tsize,
lapack_complex_double *work, lapack_int *lwork, lapack_int *info)
float, double, complex-float, complex-double. same parameter list, different types. iconic behavior. 🎀
and the gemlq besties — they add side, trans, k, and c/ldc into the mix, so they're lowkey doing the most:
void LAPACK_sgemlq (char *side, char *trans, lapack_int *m, lapack_int
*n, lapack_int *k, const float *a, lapack_int *lda, const float *t,
lapack_int *tsize, float *c, lapack_int *ldc, float *work,
lapack_int *lwork, lapack_int *info)
void LAPACK_dgemlq (char *side, char *trans, lapack_int *m, lapack_int
*n, lapack_int *k, const double *a, lapack_int *lda, const double
*t, lapack_int *tsize, double *c, lapack_int *ldc, double *work,
lapack_int *lwork, lapack_int *info)
void LAPACK_cgemlq (char *side, char *trans, lapack_int *m, lapack_int
*n, lapack_int *k, const lapack_complex_float *a, lapack_int *lda,
const lapack_complex_float *t, lapack_int *tsize,
lapack_complex_float *c, lapack_int *ldc, lapack_complex_float
*work, lapack_int *lwork, lapack_int *info)
void LAPACK_zgemlq (char *side, char *trans, lapack_int *m, lapack_int
*n, lapack_int *k, const lapack_complex_double *a, lapack_int *lda,
const lapack_complex_double *t, lapack_int *tsize,
lapack_complex_double *c, lapack_int *ldc, lapack_complex_double
*work, lapack_int *lwork, lapack_int *info)
sgemlq and dgemlq take const float*/const double* for a and t, then float*/double* for c and work. the complex cgemlq/zgemlq are the same but with lapack_complex_*. side and trans are both char*, tsize is still there, and info is still the final boss. no notes. 💜
next: geqr. yes, the QR girlies. sgeqr, dgeqr, cgeqr, zgeqr all have the exact same m, n, a, lda, t, tsize, work, lwork, info shape as gelq, just different letter energy:
void LAPACK_sgeqr (lapack_int *m, lapack_int *n, float *a, lapack_int
*lda, float *t, lapack_int *tsize, float *work, lapack_int *lwork,
lapack_int *info)
void LAPACK_dgeqr (lapack_int *m, lapack_int *n, double *a, lapack_int
*lda, double *t, lapack_int *tsize, double *work, lapack_int *lwork,
lapack_int *info)
void LAPACK_cgeqr (lapack_int *m, lapack_int *n, lapack_complex_float
*a, lapack_int *lda, lapack_complex_float *t, lapack_int *tsize,
lapack_complex_float *work, lapack_int *lwork, lapack_int *info)
void LAPACK_zgeqr (lapack_int *m, lapack_int *n, lapack_complex_double
*a, lapack_int *lda, lapack_complex_double *t, lapack_int *tsize,
lapack_complex_double *work, lapack_int *lwork, lapack_int *info)
if you clocked that geqr and gelq have matching parameter lists, congrats, your pattern recognition is slaying. 💅
and the gemqr crew — same deal as gemlq but with a q instead of an l. side, trans, m, n, k, a, lda, t, tsize, c, ldc, work, lwork, info, all present and accounted for:
void LAPACK_sgemqr (char *side, char *trans, lapack_int *m, lapack_int
*n, lapack_int *k, const float *a, lapack_int *lda, const float *t,
lapack_int *tsize, float *c, lapack_int *ldc, float *work,
lapack_int *lwork, lapack_int *info)
void LAPACK_dgemqr (char *side, char *trans, lapack_int *m, lapack_int
*n, lapack_int *k, const double *a, lapack_int *lda, const double
*t, lapack_int *tsize, double *c, lapack_int *ldc, double *work,
lapack_int *lwork, lapack_int *info)
void LAPACK_cgemqr (char *side, char *trans, lapack_int *m, lapack_int
*n, lapack_int *k, const lapack_complex_float *a, lapack_int *lda,
const lapack_complex_float *t, lapack_int *tsize,
lapack_complex_float *c, lapack_int *ldc, lapack_complex_float
*work, lapack_int *lwork, lapack_int *info)
void LAPACK_zgemqr (char *side, char *trans, lapack_int *m, lapack_int
*n, lapack_int *k, const lapack_complex_double *a, lapack_int *lda,
const lapack_complex_double *t, lapack_int *tsize,
lapack_complex_double *c, lapack_int *ldc, lapack_complex_double
*work, lapack_int *lwork, lapack_int *info)
these are literally the QR equivalents in the same precision lineup — float, double, complex-float, complex-double. we love a consistent queen. 🌈
then getsls — the least-squares girlies are here, and they take trans, m, n, nrhs, a, lda, b, ldb, work, lwork, info. no t, no tsize, just vibes and a b:
void LAPACK_sgetsls (char *trans, lapack_int *m, lapack_int *n,
lapack_int *nrhs, float *a, lapack_int *lda, float *b, lapack_int
*ldb, float *work, lapack_int *lwork, lapack_int *info)
void LAPACK_dgetsls (char *trans, lapack_int *m, lapack_int *n,
lapack_int *nrhs, double *a, lapack_int *lda, double *b, lapack_int
*ldb, double *work, lapack_int *lwork, lapack_int *info)
void LAPACK_cgetsls (char *trans, lapack_int *m, lapack_int *n,
lapack_int *nrhs, lapack_complex_float *a, lapack_int *lda,
lapack_complex_float *b, lapack_int *ldb, lapack_complex_float
*work, lapack_int *lwork, lapack_int *info)
void LAPACK_zgetsls (char *trans, lapack_int *m, lapack_int *n,
lapack_int *nrhs, lapack_complex_double *a, lapack_int *lda,
lapack_complex_double *b, lapack_int *ldb, lapack_complex_double
*work, lapack_int *lwork, lapack_int *info)
sgetsls/dgetsls are real, cgetsls/zgetsls are complex. same parameter order, different types. and yes, nrhs is there because multiple right-hand sides are a thing. periodt. 🦋
okay now we're entering the _2stage section and it's giving ✨eigenvalue era✨. first the ev_2stage girlies — ssyev_2stage, dsyev_2stage, cheev_2stage, zheev_2stage. they all take jobz, uplo, n, a, lda, w, work, lwork, info, and the complex ones also brought rwork:
void LAPACK_ssyev_2stage (char *jobz, char *uplo, lapack_int *n, float
*a, lapack_int *lda, float *w, float *work, lapack_int *lwork,
lapack_int *info)
void LAPACK_dsyev_2stage (char *jobz, char *uplo, lapack_int *n, double
*a, lapack_int *lda, double *w, double *work, lapack_int *lwork,
lapack_int *info)
void LAPACK_cheev_2stage (char *jobz, char *uplo, lapack_int *n,
lapack_complex_float *a, lapack_int *lda, float *w,
lapack_complex_float *work, lapack_int *lwork, float *rwork,
lapack_int *info)
void LAPACK_zheev_2stage (char *jobz, char *uplo, lapack_int *n,
lapack_complex_double *a, lapack_int *lda, double *w,
lapack_complex_double *work, lapack_int *lwork, double *rwork,
lapack_int *info)
the real ones ssyev_2stage/dsyev_2stage are chilling with float*/double* w and work. the complex cheev_2stage/zheev_2stage add float*/double* rwork because complex eigenvalues need real workspace, iykyk. slay. 🌸
then evd_2stage — same family but with iwork and liwork added, and the complex ones also get lrwork. they're extra in the best way:
void LAPACK_ssyevd_2stage (char *jobz, char *uplo, lapack_int *n, float
*a, lapack_int *lda, float *w, float *work, lapack_int *lwork,
lapack_int *iwork, lapack_int *liwork, lapack_int *info)
void LAPACK_dsyevd_2stage (char *jobz, char *uplo, lapack_int *n, double
*a, lapack_int *lda, double *w, double *work, lapack_int *lwork,
lapack_int *iwork, lapack_int *liwork, lapack_int *info)
void LAPACK_cheevd_2stage (char *jobz, char *uplo, lapack_int *n,
lapack_complex_float *a, lapack_int *lda, float *w,
lapack_complex_float *work, lapack_int *lwork, float *rwork,
lapack_int *lrwork, lapack_int *iwork, lapack_int *liwork,
lapack_int *info)
void LAPACK_zheevd_2stage (char *jobz, char *uplo, lapack_int *n,
lapack_complex_double *a, lapack_int *lda, double *w,
lapack_complex_double *work, lapack_int *lwork, double *rwork,
lapack_int *lrwork, lapack_int *iwork, lapack_int *liwork,
lapack_int *info)
ssyevd_2stage/dsyevd_2stage: jobz, uplo, n, a, lda, w, work, lwork, iwork, liwork, info. cheevd_2stage/zheevd_2stage: same but with rwork, lrwork too. the d in the name is just there to let you know she's different, and honestly? she ate. 💅
and finally for this part, the evx_2stage duo — ssyevx_2stage and dsyevx_2stage. these are the full-glam versions with range, vl, vu, il, iu, abstol, m, w, z, ldz, work, lwork, iwork, ifail, info. it's a lot, but she ate:
void LAPACK_ssyevx_2stage (char *jobz, char *range, char *uplo,
lapack_int *n, float *a, lapack_int *lda, float *vl, float *vu,
lapack_int *il, lapack_int *iu, float *abstol, lapack_int *m, float
*w, float *z, lapack_int *ldz, float *work, lapack_int *lwork,
lapack_int *iwork, lapack_int *ifail, lapack_int *info)
void LAPACK_dsyevx_2stage (char *jobz, char *range, char *uplo,
lapack_int *n, double *a, lapack_int *lda, double *vl, double *vu,
lapack_int *il, lapack_int *iu, double *abstol, lapack_int *m,
double *w, double *z, lapack_int *ldz, double *work, lapack_int
*lwork, lapack_int *iwork, lapack_int *ifail, lapack_int *info)
like, jobz, range, uplo, n, a, lda, vl, vu, il, iu, abstol, m, w, z, ldz, work, lwork, iwork, ifail, info — that's the whole alphabet almost. if you need to select eigenvalues by range or index, this is the one. no cap. 🔥
and that's where part 88 dips — more _2stage prototypes are coming in part 89, so don't go anywhere. 💖
okay bestie, next batch of LAPACK_*_2stage and LAPACK_*_aa_2stage prototypes is here 💅 every pointer, lapack_int, lapack_complex_float, lapack_complex_double, and char * stays exactly as written — no cap, we do not touch the signatures:
void LAPACK_cheevx_2stage (char *jobz, char *range, char *uplo,
lapack_int *n, lapack_complex_float *a, lapack_int *lda, float *vl,
float *vu, lapack_int *il, lapack_int *iu, float *abstol, lapack_int
*m, float *w, lapack_complex_float *z, lapack_int *ldz,
lapack_complex_float *work, lapack_int *lwork, float *rwork,
lapack_int *iwork, lapack_int *ifail, lapack_int *info)
void LAPACK_zheevx_2stage (char *jobz, char *range, char *uplo,
lapack_int *n, lapack_complex_double *a, lapack_int *lda, double
*vl, double *vu, lapack_int *il, lapack_int *iu, double *abstol,
lapack_int *m, double *w, lapack_complex_double *z, lapack_int *ldz,
lapack_complex_double *work, lapack_int *lwork, double *rwork,
lapack_int *iwork, lapack_int *ifail, lapack_int *info)
void LAPACK_ssyevr_2stage (char *jobz, char *range, char *uplo,
lapack_int *n, float *a, lapack_int *lda, float *vl, float *vu,
lapack_int *il, lapack_int *iu, float *abstol, lapack_int *m, float
*w, float *z, lapack_int *ldz, lapack_int *isuppz, float *work,
lapack_int *lwork, lapack_int *iwork, lapack_int *liwork, lapack_int
*info)
void LAPACK_dsyevr_2stage (char *jobz, char *range, char *uplo,
lapack_int *n, double *a, lapack_int *lda, double *vl, double *vu,
lapack_int *il, lapack_int *iu, double *abstol, lapack_int *m,
double *w, double *z, lapack_int *ldz, lapack_int *isuppz, double
*work, lapack_int *lwork, lapack_int *iwork, lapack_int *liwork,
lapack_int *info)
void LAPACK_cheevr_2stage (char *jobz, char *range, char *uplo,
lapack_int *n, lapack_complex_float *a, lapack_int *lda, float *vl,
float *vu, lapack_int *il, lapack_int *iu, float *abstol, lapack_int
*m, float *w, lapack_complex_float *z, lapack_int *ldz, lapack_int
*isuppz, lapack_complex_float *work, lapack_int *lwork, float
*rwork, lapack_int *lrwork, lapack_int *iwork, lapack_int *liwork,
lapack_int *info)
void LAPACK_zheevr_2stage (char *jobz, char *range, char *uplo,
lapack_int *n, lapack_complex_double *a, lapack_int *lda, double
*vl, double *vu, lapack_int *il, lapack_int *iu, double *abstol,
lapack_int *m, double *w, lapack_complex_double *z, lapack_int *ldz,
lapack_int *isuppz, lapack_complex_double *work, lapack_int *lwork,
double *rwork, lapack_int *lrwork, lapack_int *iwork, lapack_int
*liwork, lapack_int *info)
void LAPACK_ssbev_2stage (char *jobz, char *uplo, lapack_int *n,
lapack_int *kd, float *ab, lapack_int *ldab, float *w, float *z,
lapack_int *ldz, float *work, lapack_int *lwork, lapack_int *info)
void LAPACK_dsbev_2stage (char *jobz, char *uplo, lapack_int *n,
lapack_int *kd, double *ab, lapack_int *ldab, double *w, double *z,
lapack_int *ldz, double *work, lapack_int *lwork, lapack_int *info)
void LAPACK_chbev_2stage (char *jobz, char *uplo, lapack_int *n,
lapack_int *kd, lapack_complex_float *ab, lapack_int *ldab, float
*w, lapack_complex_float *z, lapack_int *ldz, lapack_complex_float
*work, lapack_int *lwork, float *rwork, lapack_int *info)
void LAPACK_zhbev_2stage (char *jobz, char *uplo, lapack_int *n,
lapack_int *kd, lapack_complex_double *ab, lapack_int *ldab, double
*w, lapack_complex_double *z, lapack_int *ldz, lapack_complex_double
*work, lapack_int *lwork, double *rwork, lapack_int *info)
void LAPACK_ssbevd_2stage (char *jobz, char *uplo, lapack_int *n,
lapack_int *kd, float *ab, lapack_int *ldab, float *w, float *z,
lapack_int *ldz, float *work, lapack_int *lwork, lapack_int *iwork,
lapack_int *liwork, lapack_int *info)
void LAPACK_dsbevd_2stage (char *jobz, char *uplo, lapack_int *n,
lapack_int *kd, double *ab, lapack_int *ldab, double *w, double *z,
lapack_int *ldz, double *work, lapack_int *lwork, lapack_int *iwork,
lapack_int *liwork, lapack_int *info)
void LAPACK_chbevd_2stage (char *jobz, char *uplo, lapack_int *n,
lapack_int *kd, lapack_complex_float *ab, lapack_int *ldab, float
*w, lapack_complex_float *z, lapack_int *ldz, lapack_complex_float
*work, lapack_int *lwork, float *rwork, lapack_int *lrwork,
lapack_int *iwork, lapack_int *liwork, lapack_int *info)
void LAPACK_zhbevd_2stage (char *jobz, char *uplo, lapack_int *n,
lapack_int *kd, lapack_complex_double *ab, lapack_int *ldab, double
*w, lapack_complex_double *z, lapack_int *ldz, lapack_complex_double
*work, lapack_int *lwork, double *rwork, lapack_int *lrwork,
lapack_int *iwork, lapack_int *liwork, lapack_int *info)
void LAPACK_ssbevx_2stage (char *jobz, char *range, char *uplo,
lapack_int *n, lapack_int *kd, float *ab, lapack_int *ldab, float
*q, lapack_int *ldq, float *vl, float *vu, lapack_int *il,
lapack_int *iu, float *abstol, lapack_int *m, float *w, float *z,
lapack_int *ldz, float *work, lapack_int *lwork, lapack_int *iwork,
lapack_int *ifail, lapack_int *info)
void LAPACK_dsbevx_2stage (char *jobz, char *range, char *uplo,
lapack_int *n, lapack_int *kd, double *ab, lapack_int *ldab, double
*q, lapack_int *ldq, double *vl, double *vu, lapack_int *il,
lapack_int *iu, double *abstol, lapack_int *m, double *w, double *z,
lapack_int *ldz, double *work, lapack_int *lwork, lapack_int *iwork,
lapack_int *ifail, lapack_int *info)
void LAPACK_chbevx_2stage (char *jobz, char *range, char *uplo,
lapack_int *n, lapack_int *kd, lapack_complex_float *ab, lapack_int
*ldab, lapack_complex_float *q, lapack_int *ldq, float *vl, float
*vu, lapack_int *il, lapack_int *iu, float *abstol, lapack_int *m,
float *w, lapack_complex_float *z, lapack_int *ldz,
lapack_complex_float *work, lapack_int *lwork, float *rwork,
lapack_int *iwork, lapack_int *ifail, lapack_int *info)
void LAPACK_zhbevx_2stage (char *jobz, char *range, char *uplo,
lapack_int *n, lapack_int *kd, lapack_complex_double *ab, lapack_int
*ldab, lapack_complex_double *q, lapack_int *ldq, double *vl, double
*vu, lapack_int *il, lapack_int *iu, double *abstol, lapack_int *m,
double *w, lapack_complex_double *z, lapack_int *ldz,
lapack_complex_double *work, lapack_int *lwork, double *rwork,
lapack_int *iwork, lapack_int *ifail, lapack_int *info)
void LAPACK_ssygv_2stage (lapack_int *itype, char *jobz, char *uplo,
lapack_int *n, float *a, lapack_int *lda, float *b, lapack_int *ldb,
float *w, float *work, lapack_int *lwork, lapack_int *info)
void LAPACK_dsygv_2stage (lapack_int *itype, char *jobz, char *uplo,
lapack_int *n, double *a, lapack_int *lda, double *b, lapack_int
*ldb, double *w, double *work, lapack_int *lwork, lapack_int *info)
void LAPACK_chegv_2stage (lapack_int *itype, char *jobz, char *uplo,
lapack_int *n, lapack_complex_float *a, lapack_int *lda,
lapack_complex_float *b, lapack_int *ldb, float *w,
lapack_complex_float *work, lapack_int *lwork, float *rwork,
lapack_int *info)
void LAPACK_zhegv_2stage (lapack_int *itype, char *jobz, char *uplo,
lapack_int *n, lapack_complex_double *a, lapack_int *lda,
lapack_complex_double *b, lapack_int *ldb, double *w,
lapack_complex_double *work, lapack_int *lwork, double *rwork,
lapack_int *info)
void LAPACK_ssysv_aa_2stage (char *uplo, lapack_int *n, lapack_int
*nrhs, float *a, lapack_int *lda, float *tb, lapack_int *ltb,
lapack_int *ipiv, lapack_int *ipiv2, float *b, lapack_int *ldb,
float *work, lapack_int *lwork, lapack_int *info)
void LAPACK_dsysv_aa_2stage (char *uplo, lapack_int *n, lapack_int
*nrhs, double *a, lapack_int *lda, double *tb, lapack_int *ltb,
lapack_int *ipiv, lapack_int *ipiv2, double *b, lapack_int *ldb,
double *work, lapack_int *lwork, lapack_int *info)
void LAPACK_csysv_aa_2stage (char *uplo, lapack_int *n, lapack_int
*nrhs, lapack_complex_float *a, lapack_int *lda,
lapack_complex_float *tb, lapack_int *ltb, lapack_int *ipiv,
lapack_int *ipiv2, lapack_complex_float *b, lapack_int *ldb,
lapack_complex_float *work, lapack_int *lwork, lapack_int *info)
void LAPACK_zsysv_aa_2stage (char *uplo, lapack_int *n, lapack_int
*nrhs, lapack_complex_double *a, lapack_int *lda,
lapack_complex_double *tb, lapack_int *ltb, lapack_int *ipiv,
lapack_int *ipiv2, lapack_complex_double *b, lapack_int *ldb,
lapack_complex_double *work, lapack_int *lwork, lapack_int *info)
void LAPACK_chesv_aa_2stage (char *uplo, lapack_int *n, lapack_int
*nrhs, lapack_complex_float *a, lapack_int *lda,
lapack_complex_float *tb, lapack_int *ltb, lapack_int *ipiv,
lapack_int *ipiv2, lapack_complex_float *b, lapack_int *ldb,
lapack_complex_float *work, lapack_int *lwork, lapack_int *info)
void LAPACK_zhesv_aa_2stage (char *uplo, lapack_int *n, lapack_int
*nrhs, lapack_complex_double *a, lapack_int *lda,
lapack_complex_double *tb, lapack_int *ltb, lapack_int *ipiv,
lapack_int *ipiv2, lapack_complex_double *b, lapack_int *ldb,
lapack_complex_double *work, lapack_int *lwork, lapack_int *info)
void LAPACK_ssytrf_aa_2stage (char *uplo, lapack_int *n, float *a,
lapack_int *lda, float *tb, lapack_int *ltb, lapack_int *ipiv,
lapack_int *ipiv2, float *work, lapack_int *lwork, lapack_int *info)
void LAPACK_dsytrf_aa_2stage (char *uplo, lapack_int *n, double *a,
lapack_int *lda, double *tb, lapack_int *ltb, lapack_int *ipiv,
lapack_int *ipiv2, double *work, lapack_int *lwork, lapack_int
*info)
void LAPACK_csytrf_aa_2stage (char *uplo, lapack_int *n,
lapack_complex_float *a, lapack_int *lda, lapack_complex_float *tb,
lapack_int *ltb, lapack_int *ipiv, lapack_int *ipiv2,
lapack_complex_float *work, lapack_int *lwork, lapack_int *info)
void LAPACK_zsytrf_aa_2stage (char *uplo, lapack_int *n,
lapack_complex_double *a, lapack_int *lda, lapack_complex_double
*tb, lapack_int *ltb, lapack_int *ipiv, lapack_int *ipiv2,
lapack_complex_double *work, lapack_int *lwork, lapack_int *info)
void LAPACK_chetrf_aa_2stage (char *uplo, lapack_int *n,
lapack_complex_float *a, lapack_int *lda, lapack_complex_float *tb,
lapack_int *ltb, lapack_int *ipiv, lapack_int *ipiv2,
lapack_complex_float *work, lapack_int *lwork, lapack_int *info)
void LAPACK_zhetrf_aa_2stage (char *uplo, lapack_int *n,
lapack_complex_double *a, lapack_int *lda, lapack_complex_double
*tb, lapack_int *ltb, lapack_int *ipiv, lapack_int *ipiv2,
lapack_complex_double *work, lapack_int *lwork, lapack_int *info)
void LAPACK_ssytrs_aa_2stage (char *uplo, lapack_int *n, lapack_int
*nrhs, float *a, lapack_int *lda, float *tb, lapack_int *ltb,
lapack_int *ipiv, lapack_int *ipiv2, float *b, lapack_int *ldb,
lapack_int *info)
void LAPACK_dsytrs_aa_2stage (char *uplo, lapack_int *n, lapack_int
*nrhs, double *a, lapack_int *lda, double *tb, lapack_int *ltb,
okay so the prototype list keeps rolling — here's the rest of that batch, verbatim, no cap:
lapack_int *ipiv, lapack_int *ipiv2, double *b, lapack_int *ldb,
lapack_int *info)
void LAPACK_csytrs_aa_2stage (char *uplo, lapack_int *n, lapack_int
*nrhs, lapack_complex_float *a, lapack_int *lda,
lapack_complex_float *tb, lapack_int *ltb, lapack_int *ipiv,
lapack_int *ipiv2, lapack_complex_float *b, lapack_int *ldb,
lapack_int *info)
void LAPACK_zsytrs_aa_2stage (char *uplo, lapack_int *n, lapack_int
*nrhs, lapack_complex_double *a, lapack_int *lda,
lapack_complex_double *tb, lapack_int *ltb, lapack_int *ipiv,
lapack_int *ipiv2, lapack_complex_double *b, lapack_int *ldb,
lapack_int *info)
void LAPACK_chetrs_aa_2stage (char *uplo, lapack_int *n, lapack_int
*nrhs, lapack_complex_float *a, lapack_int *lda,
lapack_complex_float *tb, lapack_int *ltb, lapack_int *ipiv,
lapack_int *ipiv2, lapack_complex_float *b, lapack_int *ldb,
lapack_int *info)
void LAPACK_zhetrs_aa_2stage (char *uplo, lapack_int *n, lapack_int
*nrhs, lapack_complex_double *a, lapack_int *lda,
lapack_complex_double *tb, lapack_int *ltb, lapack_int *ipiv,
lapack_int *ipiv2, lapack_complex_double *b, lapack_int *ldb,
lapack_int *info)
void LAPACKE_set_nancheck (int flag)
int LAPACKE_get_nancheck ()
bestie look at those two-stage variants — csytrs_aa_2stage, zsytrs_aa_2stage, chetrs_aa_2stage, zhetrs_aa_2stage — all of them carrying tb/ltb and double pivots ipiv/ipiv2 🫶. And then the little duo at the end, LAPACKE_set_nancheck and LAPACKE_get_nancheck, just vibing there: one takes int flag and returns nothing, the other takes nothing and hands you back an int. iconic.
💅 Macro Definition Documentation 💅
okay this is the part that's basically a whole vibe — a massive wall of #defines. Every single one is LAPACK_GLOBAL(...) with the lowercase name and the SHOUTY uppercase name, and each one tells you exactly which line of lapacke.h it lives on. We're going full detail, no skipping, periodt ✨
First up, the one that isn't a LAPACK_GLOBAL at all:
#define LAPACK_C2INT(x) (lapack_int)(*((float*)&x ))
LAPACK_C2INT(x)— definition at line 116 of filelapacke.h. That's the whole thing, character for character: cast the address ofxto afloat*, deref it, then cast that tolapack_int. Very "trust me bestie, I know what I'm doing" energy 💀.
🦋 the cbbcsd → cgbtrs crowd
LAPACK_cbbcsd—LAPACK_GLOBAL(cbbcsd,CBBCSD)— definition at line 13662 of filelapacke.h.LAPACK_cbdsqr—LAPACK_GLOBAL(cbdsqr,CBDSQR)— definition at line 13121 of filelapacke.h.LAPACK_cgbbrd—LAPACK_GLOBAL(cgbbrd,CGBBRD)— definition at line 13109 of filelapacke.h.LAPACK_cgbcon—LAPACK_GLOBAL(cgbcon,CGBCON)— definition at line 12735 of filelapacke.h.LAPACK_cgbequ—LAPACK_GLOBAL(cgbequ,CGBEQU)— definition at line 12901 of filelapacke.h.LAPACK_cgbequb—LAPACK_GLOBAL(cgbequb,CGBEQUB)— definition at line 12906 of filelapacke.h.LAPACK_cgbrfs—LAPACK_GLOBAL(cgbrfs,CGBRFS)— definition at line 12791 of filelapacke.h.LAPACK_cgbrfsx—LAPACK_GLOBAL(cgbrfsx,CGBRFSX)— definition at line 12796 of filelapacke.h.LAPACK_cgbsv—LAPACK_GLOBAL(cgbsv,CGBSV)— definition at line 12945 of filelapacke.h.LAPACK_cgbsvx—LAPACK_GLOBAL(cgbsvx,CGBSVX)— definition at line 12949 of filelapacke.h.LAPACK_cgbsvxx—LAPACK_GLOBAL(cgbsvxx,CGBSVXX)— definition at line 12954 of filelapacke.h.LAPACK_cgbtrf—LAPACK_GLOBAL(cgbtrf,CGBTRF)— definition at line 12615 of filelapacke.h.LAPACK_cgbtrs—LAPACK_GLOBAL(cgbtrs,CGBTRS)— definition at line 12673 of filelapacke.h.
note how cgbsv, cgbsvx, cgbsvxx stack up like a little ladder of increasingly extra behaviour 🌈 — that's the band-matrix solve family doing its thing.
🌸 cge* era
LAPACK_cgebak—LAPACK_GLOBAL(cgebak,CGEBAK)— definition at line 13219 of filelapacke.h.LAPACK_cgebal—LAPACK_GLOBAL(cgebal,CGEBAL)— definition at line 13215 of filelapacke.h.LAPACK_cgebrd—LAPACK_GLOBAL(cgebrd,CGEBRD)— definition at line 13105 of filelapacke.h.LAPACK_cgecon—LAPACK_GLOBAL(cgecon,CGECON)— definition at line 12731 of filelapacke.h.LAPACK_cgeequ—LAPACK_GLOBAL(cgeequ,CGEEQU)— definition at line 12893 of filelapacke.h.LAPACK_cgeequb—LAPACK_GLOBAL(cgeequb,CGEEQUB)— definition at line 12898 of filelapacke.h.LAPACK_cgees—LAPACK_GLOBAL(cgees,CGEES)— definition at line 13403 of filelapacke.h.LAPACK_cgeesx—LAPACK_GLOBAL(cgeesx,CGEESX)— definition at line 13407 of filelapacke.h.LAPACK_cgeev—LAPACK_GLOBAL(cgeev,CGEEV)— definition at line 13411 of filelapacke.h.LAPACK_cgeevx—LAPACK_GLOBAL(cgeevx,CGEEVX)— definition at line 13415 of filelapacke.h.LAPACK_cgehrd—LAPACK_GLOBAL(cgehrd,CGEHRD)— definition at line 13203 of filelapacke.h.LAPACK_cgejsv—LAPACK_GLOBAL(cgejsv,CGEJSV)— definition at line 13431 of filelapacke.h.LAPACK_cgelq—LAPACK_GLOBAL(cgelq,CGELQ)— definition at line 13804 of filelapacke.h.LAPACK_cgelq2—LAPACK_GLOBAL(cgelq2,CGELQ2)— definition at line 13591 of filelapacke.h.LAPACK_cgelqf—LAPACK_GLOBAL(cgelqf,CGELQF)— definition at line 13053 of filelapacke.h.LAPACK_cgels—LAPACK_GLOBAL(cgels,CGELS)— definition at line 13303 of filelapacke.h.LAPACK_cgelsd—LAPACK_GLOBAL(cgelsd,CGELSD)— definition at line 13315 of filelapacke.h.LAPACK_cgelss—LAPACK_GLOBAL(cgelss,CGELSS)— definition at line 13311 of filelapacke.h.LAPACK_cgelsy—LAPACK_GLOBAL(cgelsy,CGELSY)— definition at line 13307 of filelapacke.h.LAPACK_cgemlq—LAPACK_GLOBAL(cgemlq,CGEMLQ)— definition at line 13808 of filelapacke.h.LAPACK_cgemqr—LAPACK_GLOBAL(cgemqr,CGEMQR)— definition at line 13816 of filelapacke.h.LAPACK_cgemqrt—LAPACK_GLOBAL(cgemqrt,CGEMQRT)— definition at line 13709 of filelapacke.h.LAPACK_cgeqlf—LAPACK_GLOBAL(cgeqlf,CGEQLF)— definition at line 13065 of filelapacke.h.LAPACK_cgeqp3—LAPACK_GLOBAL(cgeqp3,CGEQP3)— definition at line 13041 of filelapacke.h.LAPACK_cgeqpf—LAPACK_GLOBAL(cgeqpf,CGEQPF)— definition at line 13037 of filelapacke.h.LAPACK_cgeqr—LAPACK_GLOBAL(cgeqr,CGEQR)— definition at line 13812 of filelapacke.h.LAPACK_cgeqr2—LAPACK_GLOBAL(cgeqr2,CGEQR2)— definition at line 13549 of filelapacke.h.LAPACK_cgeqrf—LAPACK_GLOBAL(cgeqrf,CGEQRF)— definition at line 13033 of filelapacke.h.LAPACK_cgeqrfp—LAPACK_GLOBAL(cgeqrfp,CGEQRFP)— definition at line 13539 of filelapacke.h.LAPACK_cgeqrt—LAPACK_GLOBAL(cgeqrt,CGEQRT)— definition at line 13713 of filelapacke.h.LAPACK_cgeqrt2—LAPACK_GLOBAL(cgeqrt2,CGEQRT2)— definition at line 13717 of filelapacke.h.LAPACK_cgeqrt3—LAPACK_GLOBAL(cgeqrt3,CGEQRT3)— definition at line 13721 of filelapacke.h.LAPACK_cgerfs—LAPACK_GLOBAL(cgerfs,CGERFS)— definition at line 12783 of filelapacke.h.LAPACK_cgerfsx—LAPACK_GLOBAL(cgerfsx,CGERFSX)— definition at line 12788 of filelapacke.h.LAPACK_cgerqf—LAPACK_GLOBAL(cgerqf,CGERQF)— definition at line 13077 of filelapacke.h.LAPACK_cgesdd—LAPACK_GLOBAL(cgesdd,CGESDD)— definition at line 13427 of filelapacke.h.LAPACK_cgesv—LAPACK_GLOBAL(cgesv,CGESV)— definition at line 12931 of filelapacke.h.LAPACK_cgesvd—LAPACK_GLOBAL(cgesvd,CGESVD)— definition at line 13419 of filelapacke.h.LAPACK_cgesvdx—LAPACK_GLOBAL(cgesvdx,CGESVDX)— definition at line 13423 of filelapacke.h.LAPACK_cgesvj—LAPACK_GLOBAL(cgesvj,CGESVJ)— definition at line 13435 of filelapacke.h.LAPACK_cgesvx—LAPACK_GLOBAL(cgesvx,CGESVX)— definition at line 12937 of filelapacke.h.LAPACK_cgesvxx—LAPACK_GLOBAL(cgesvxx,CGESVXX)— definition at line 12942 of filelapacke.h.LAPACK_cgetf2—LAPACK_GLOBAL(cgetf2,CGETF2)— definition at line 13563 of filelapacke.h.LAPACK_cgetrf—LAPACK_GLOBAL(cgetrf,CGETRF)— definition at line 12607 of filelapacke.h.LAPACK_cgetrf2—LAPACK_GLOBAL(cgetrf2,CGETRF2)— definition at line 12611 of filelapacke.h.LAPACK_cgetri—LAPACK_GLOBAL(cgetri,CGETRI)— definition at line 12853 of filelapacke.h.LAPACK_cgetrs—LAPACK_GLOBAL(cgetrs,CGETRS)— definition at line 12669 of filelapacke.h.LAPACK_cgetsls—LAPACK_GLOBAL(cgetsls,CGETSLS)— definition at line 13820 of filelapacke.h.
the way cgeqrf, cgeqrfp, cgeqr2, cgeqr, cgeqrt, cgeqrt2, cgeqrt3 just keep multiplying 😭 that's a whole QR cinematic universe. and yes, cgelq/cgelq2/cgelqf are a separate one, L not R, don't mix them up bestie 🙈
🎀 the cgg* saga (plus the tail of the g's)
LAPACK_cggbak—LAPACK_GLOBAL(cggbak,CGGBAK)— definition at line 13263 of filelapacke.h.LAPACK_cggbal—LAPACK_GLOBAL(cggbal,CGGBAL)— definition at line 13259 of filelapacke.h.LAPACK_cgges—LAPACK_GLOBAL(cgges,CGGES)— definition at line 13483 of filelapacke.h.LAPACK_cgges3—LAPACK_GLOBAL(cgges3,CGGES3)— definition at line 13487 of filelapacke.h.LAPACK_cggesx—LAPACK_GLOBAL(cggesx,CGGESX)— definition at line 13491 of filelapacke.h.LAPACK_cggev—LAPACK_GLOBAL(cggev,CGGEV)— definition at line 13495 of filelapacke.h.LAPACK_cggev3—LAPACK_GLOBAL(cggev3,CGGEV3)— definition at line 13499 of filelapacke.h.LAPACK_cggevx—LAPACK_GLOBAL(cggevx,CGGEVX)— definition at line 13503 of filelapacke.h.LAPACK_cggglm—LAPACK_GLOBAL(cggglm,CGGGLM)— definition at line 13323 of filelapacke.h.LAPACK_cgghd3—LAPACK_GLOBAL(cgghd3,CGGHD3)— definition at line 13255 of filelapacke.h.LAPACK_cgghrd—LAPACK_GLOBAL(cgghrd,CGGHRD)— definition at line 13251 of filelapacke.h.LAPACK_cgglse—LAPACK_GLOBAL(cgglse,CGGLSE)— definition at line 13319 of filelapacke.h.LAPACK_cggqrf—LAPACK_GLOBAL(cggqrf,CGGQRF)— definition at line 13097 of filelapacke.h.LAPACK_cggrqf—LAPACK_GLOBAL(cggrqf,CGGRQF)— definition at line 13101 of filelapacke.h.LAPACK_cggsvd—LAPACK_GLOBAL(cggsvd,CGGSVD)— definition at line 13439 of filelapacke.h.LAPACK_cggsvd3—LAPACK_GLOBAL(cggsvd3,CGGSVD3)— definition at line 13750 of filelapacke.h.LAPACK_cggsvp—LAPACK_GLOBAL(cggsvp,CGGSVP)— definition at line 13291 of filelapacke.h.LAPACK_cggsvp3—LAPACK_GLOBAL(cggsvp3,CGGSVP3)— definition at line 13295 of filelapacke.h.LAPACK_cgtcon—LAPACK_GLOBAL(cgtcon,CGTCON)— definition at line 12739 of filelapacke.h.LAPACK_cgtrfs—LAPACK_GLOBAL(cgtrfs,CGTRFS)— definition at line 12799 of filelapacke.h.LAPACK_cgtsv—LAPACK_GLOBAL(cgtsv,CGTSV)— definition at line 12957 of filelapacke.h.LAPACK_cgtsvx—LAPACK_GLOBAL(cgtsvx,CGTSVX)— definition at line 12961 of filelapacke.h.LAPACK_cgttrf—LAPACK_GLOBAL(cgttrf,CGTTRF)— definition at line 12619 of filelapacke.h.LAPACK_cgttrs—LAPACK_GLOBAL(cgttrs,CGTTRS)— definition at line 12677 of filelapacke.h.
okay cggsvd / cggsvd3 / cggsvp / cggsvp3 — the 3 at the end is literally a whole separate macro, don't get cute and drop it 🔥 and same deal with cgges/cgges3 and cggev/cggev3. They're siblings, not duplicates, iykyk.
💜 and now the ch* hermition era begins
LAPACK_chbev—LAPACK_GLOBAL(chbev,CHBEV)— definition at line 13371 of filelapacke.h.LAPACK_chbev_2stage—LAPACK_GLOBAL(chbev_2stage,CHBEV_2STAGE)— definition at line 13375 of filelapacke.h.LAPACK_chbevd—LAPACK_GLOBAL(chbevd,CHBEVD)— definition at line 13379 of filelapacke.h.LAPACK_chbevd_2stage—LAPACK_GLOBAL(chbevd_2stage,CHBEVD_2STAGE)— definition at line 13383 of filelapacke.h.LAPACK_chbevx—LAPACK_GLOBAL(chbevx,CHBEVX)— definition at line 13387 of filelapacke.h.LAPACK_chbevx_2stage—LAPACK_GLOBAL(chbevx_2stage,CHBEVX_2STAGE)— definition at line 13391 of filelapacke.h.LAPACK_chbgst—LAPACK_GLOBAL(chbgst,CHBGST)— definition at line 13195 of filelapacke.h.LAPACK_chbgv—LAPACK_GLOBAL(chbgv,CHBGV)— definition at line 13471 of filelapacke.h.LAPACK_chbgvd—LAPACK_GLOBAL(chbgvd,CHBGVD)— definition at line 13475 of filelapacke.h.LAPACK_chbgvx—LAPACK_GLOBAL(chbgvx,CHBGVX)— definition at line 13479 of filelapacke.h.LAPACK_chbtrd—LAPACK_GLOBAL(chbtrd,CHBTRD)— definition at line 13153 of filelapacke.h.
the _2stage ones are so real — lowercase in the first slot, ALL CAPS in the second, exactly: LAPACK_GLOBAL(chbev_2stage,CHBEV_2STAGE) 💅 and that chbtrd sitting at 13153 all by itself at the end, cute.
anyway that's where this chunk lands — the ch* family is just getting started and the macros keep coming, so don't touch that dial 🧚
LAPACK_checon— expands toLAPACK_GLOBAL(checon,CHECON)— defined at line 12761 oflapacke.h. 💅LAPACK_checon_3— expands toLAPACK_GLOBAL(checon_3,CHECON_3)— defined at line 13800 oflapacke.h.LAPACK_cheequb— expands toLAPACK_GLOBAL(cheequb,CHEEQUB)— defined at line 12928 oflapacke.h.LAPACK_cheev— expands toLAPACK_GLOBAL(cheev,CHEEV)— defined at line 13327 oflapacke.h.LAPACK_cheev_2stage— expands toLAPACK_GLOBAL(cheev_2stage,CHEEV_2STAGE)— defined at line 13331 oflapacke.h.LAPACK_cheevd— expands toLAPACK_GLOBAL(cheevd,CHEEVD)— defined at line 13335 oflapacke.h.LAPACK_cheevd_2stage— expands toLAPACK_GLOBAL(cheevd_2stage,CHEEVD_2STAGE)— defined at line 13339 oflapacke.h.LAPACK_cheevr— expands toLAPACK_GLOBAL(cheevr,CHEEVR)— defined at line 13351 oflapacke.h.LAPACK_cheevr_2stage— expands toLAPACK_GLOBAL(cheevr_2stage,CHEEVR_2STAGE)— defined at line 13355 oflapacke.h.LAPACK_cheevx— expands toLAPACK_GLOBAL(cheevx,CHEEVX)— defined at line 13343 oflapacke.h.LAPACK_cheevx_2stage— expands toLAPACK_GLOBAL(cheevx_2stage,CHEEVX_2STAGE)— defined at line 13347 oflapacke.h.LAPACK_chegst— expands toLAPACK_GLOBAL(chegst,CHEGST)— defined at line 13187 oflapacke.h.LAPACK_chegv— expands toLAPACK_GLOBAL(chegv,CHEGV)— defined at line 13443 oflapacke.h.LAPACK_chegv_2stage— expands toLAPACK_GLOBAL(chegv_2stage,CHEGV_2STAGE)— defined at line 13447 oflapacke.h.LAPACK_chegvd— expands toLAPACK_GLOBAL(chegvd,CHEGVD)— defined at line 13451 oflapacke.h.LAPACK_chegvx— expands toLAPACK_GLOBAL(chegvx,CHEGVX)— defined at line 13455 oflapacke.h.LAPACK_cherfs— expands toLAPACK_GLOBAL(cherfs,CHERFS)— defined at line 12829 oflapacke.h.LAPACK_cherfsx— expands toLAPACK_GLOBAL(cherfsx,CHERFSX)— defined at line 12832 oflapacke.h.LAPACK_chesv— expands toLAPACK_GLOBAL(chesv,CHESV)— defined at line 13013 oflapacke.h.LAPACK_chesv_aa— expands toLAPACK_GLOBAL(chesv_aa,CHESV_AA)— defined at line 13755 oflapacke.h.LAPACK_chesv_aa_2stage— expands toLAPACK_GLOBAL(chesv_aa_2stage,CHESV_AA_2STAGE)— defined at line 13826 oflapacke.h.LAPACK_chesv_rk— expands toLAPACK_GLOBAL(chesv_rk,CHESV_RK)— defined at line 13774 oflapacke.h.LAPACK_chesvx— expands toLAPACK_GLOBAL(chesvx,CHESVX)— defined at line 13015 oflapacke.h.LAPACK_chesvxx— expands toLAPACK_GLOBAL(chesvxx,CHESVXX)— defined at line 13018 oflapacke.h.LAPACK_cheswapr— expands toLAPACK_GLOBAL(cheswapr,CHESWAPR)— defined at line 13663 oflapacke.h.LAPACK_chetrd— expands toLAPACK_GLOBAL(chetrd,CHETRD)— defined at line 13133 oflapacke.h.LAPACK_chetrf— expands toLAPACK_GLOBAL(chetrf,CHETRF)— defined at line 12657 oflapacke.h.LAPACK_chetrf_aa— expands toLAPACK_GLOBAL(chetrf_aa,CHETRF_AA)— defined at line 13769 oflapacke.h.LAPACK_chetrf_aa_2stage— expands toLAPACK_GLOBAL(chetrf_aa_2stage,CHETRF_AA_2STAGE)— defined at line 13840 oflapacke.h.LAPACK_chetrf_rk— expands toLAPACK_GLOBAL(chetrf_rk,CHETRF_RK)— defined at line 13782 oflapacke.h.LAPACK_chetrf_rook— expands toLAPACK_GLOBAL(chetrf_rook,CHETRF_ROOK)— defined at line 12658 oflapacke.h.LAPACK_chetri— expands toLAPACK_GLOBAL(chetri,CHETRI)— defined at line 12871 oflapacke.h.LAPACK_chetri2— expands toLAPACK_GLOBAL(chetri2,CHETRI2)— defined at line 13664 oflapacke.h.LAPACK_chetri2x— expands toLAPACK_GLOBAL(chetri2x,CHETRI2X)— defined at line 13665 oflapacke.h.LAPACK_chetri_3— expands toLAPACK_GLOBAL(chetri_3,CHETRI_3)— defined at line 13794 oflapacke.h.LAPACK_chetrs— expands toLAPACK_GLOBAL(chetrs,CHETRS)— defined at line 12707 oflapacke.h.LAPACK_chetrs2— expands toLAPACK_GLOBAL(chetrs2,CHETRS2)— defined at line 13666 oflapacke.h.LAPACK_chetrs_3— expands toLAPACK_GLOBAL(chetrs_3,CHETRS_3)— defined at line 13788 oflapacke.h.LAPACK_chetrs_aa— expands toLAPACK_GLOBAL(chetrs_aa,CHETRS_AA)— defined at line 13763 oflapacke.h.LAPACK_chetrs_aa_2stage— expands toLAPACK_GLOBAL(chetrs_aa_2stage,CHETRS_AA_2STAGE)— defined at line 13834 oflapacke.h.LAPACK_chetrs_rook— expands toLAPACK_GLOBAL(chetrs_rook,CHETRS_ROOK)— defined at line 12708 oflapacke.h.LAPACK_chfrk— expands toLAPACK_GLOBAL(chfrk,CHFRK)— defined at line 13508 oflapacke.h.LAPACK_chgeqz— expands toLAPACK_GLOBAL(chgeqz,CHGEQZ)— defined at line 13267 oflapacke.h.LAPACK_chpcon— expands toLAPACK_GLOBAL(chpcon,CHPCON)— defined at line 12767 oflapacke.h.LAPACK_chpev— expands toLAPACK_GLOBAL(chpev,CHPEV)— defined at line 13359 oflapacke.h.LAPACK_chpevd— expands toLAPACK_GLOBAL(chpevd,CHPEVD)— defined at line 13363 oflapacke.h.LAPACK_chpevx— expands toLAPACK_GLOBAL(chpevx,CHPEVX)— defined at line 13367 oflapacke.h.LAPACK_chpgst— expands toLAPACK_GLOBAL(chpgst,CHPGST)— defined at line 13191 oflapacke.h.LAPACK_chpgv— expands toLAPACK_GLOBAL(chpgv,CHPGV)— defined at line 13459 oflapacke.h.LAPACK_chpgvd— expands toLAPACK_GLOBAL(chpgvd,CHPGVD)— defined at line 13463 oflapacke.h.LAPACK_chpgvx— expands toLAPACK_GLOBAL(chpgvx,CHPGVX)— defined at line 13467 oflapacke.h.LAPACK_chprfs— expands toLAPACK_GLOBAL(chprfs,CHPRFS)— defined at line 12837 oflapacke.h.LAPACK_chpsv— expands toLAPACK_GLOBAL(chpsv,CHPSV)— defined at line 13027 oflapacke.h.LAPACK_chpsvx— expands toLAPACK_GLOBAL(chpsvx,CHPSVX)— defined at line 13029 oflapacke.h.LAPACK_chptrd— expands toLAPACK_GLOBAL(chptrd,CHPTRD)— defined at line 13145 oflapacke.h.LAPACK_chptrf— expands toLAPACK_GLOBAL(chptrf,CHPTRF)— defined at line 12665 oflapacke.h.LAPACK_chptri— expands toLAPACK_GLOBAL(chptri,CHPTRI)— defined at line 12877 oflapacke.h.LAPACK_chptrs— expands toLAPACK_GLOBAL(chptrs,CHPTRS)— defined at line 12715 oflapacke.h.LAPACK_chsein— expands toLAPACK_GLOBAL(chsein,CHSEIN)— defined at line 13227 oflapacke.h.LAPACK_chseqr— expands toLAPACK_GLOBAL(chseqr,CHSEQR)— defined at line 13223 oflapacke.h.
Okay bestie, deep breath, because now we're sliding into the clac* / clan* / clar* neighbourhood — this is the helper-function district of the header and honestly? It's giving backstage at the LAPACK show. ✨
LAPACK_clacgv— expands toLAPACK_GLOBAL(clacgv,CLACGV)— defined at line 13541 oflapacke.h.LAPACK_clacn2— expands toLAPACK_GLOBAL(clacn2,CLACN2)— defined at line 13553 oflapacke.h.LAPACK_clacp2— expands toLAPACK_GLOBAL(clacp2,CLACP2)— defined at line 13559 oflapacke.h.LAPACK_clacpy— expands toLAPACK_GLOBAL(clacpy,CLACPY)— defined at line 13557 oflapacke.h.LAPACK_clacrm— expands toLAPACK_GLOBAL(clacrm,CLACRM)— defined at line 13577 oflapacke.h.LAPACK_clag2z— expands toLAPACK_GLOBAL(clag2z,CLAG2Z)— defined at line 13619 oflapacke.h.LAPACK_clagge— expands toLAPACK_GLOBAL(clagge,CLAGGE)— defined at line 13627 oflapacke.h.LAPACK_claghe— expands toLAPACK_GLOBAL(claghe,CLAGHE)— defined at line 13643 oflapacke.h.LAPACK_clagsy— expands toLAPACK_GLOBAL(clagsy,CLAGSY)— defined at line 13641 oflapacke.h.LAPACK_clange— expands toLAPACK_GLOBAL(clange,CLANGE)— defined at line 13571 oflapacke.h.LAPACK_clanhe— expands toLAPACK_GLOBAL(clanhe,CLANHE)— defined at line 13573 oflapacke.h.LAPACK_clansy— expands toLAPACK_GLOBAL(clansy,CLANSY)— defined at line 13581 oflapacke.h.LAPACK_clantr— expands toLAPACK_GLOBAL(clantr,CLANTR)— defined at line 13585 oflapacke.h.LAPACK_clapmr— expands toLAPACK_GLOBAL(clapmr,CLAPMR)— defined at line 13647 oflapacke.h.LAPACK_clapmt— expands toLAPACK_GLOBAL(clapmt,CLAPMT)— defined at line 13651 oflapacke.h.LAPACK_clarcm— expands toLAPACK_GLOBAL(clarcm,CLARCM)— defined at line 13575 oflapacke.h.LAPACK_clarfb— expands toLAPACK_GLOBAL(clarfb,CLARFB)— defined at line 13595 oflapacke.h.LAPACK_clarfg— expands toLAPACK_GLOBAL(clarfg,CLARFG)— defined at line 13599 oflapacke.h.LAPACK_clarft— expands toLAPACK_GLOBAL(clarft,CLARFT)— defined at line 13607 oflapacke.h.LAPACK_clarfx— expands toLAPACK_GLOBAL(clarfx,CLARFX)— defined at line 13611 oflapacke.h.LAPACK_clarnv— expands toLAPACK_GLOBAL(clarnv,CLARNV)— defined at line 13545 oflapacke.h.LAPACK_clascl— expands toLAPACK_GLOBAL(clascl,CLASCL)— defined at line 13631 oflapacke.h.LAPACK_claset— expands toLAPACK_GLOBAL(claset,CLASET)— defined at line 13635 oflapacke.h.LAPACK_classq— expands toLAPACK_GLOBAL(classq,CLASSQ)— defined at line 13603 oflapacke.h.LAPACK_claswp— expands toLAPACK_GLOBAL(claswp,CLASWP)— defined at line 13567 oflapacke.h.LAPACK_clatms— expands toLAPACK_GLOBAL(clatms,CLATMS)— defined at line 13615 oflapacke.h.LAPACK_clauum— expands toLAPACK_GLOBAL(clauum,CLAUUM)— defined at line 13623 oflapacke.h.
And now for a little plot twist — the defines stop being function aliases for a sec and start being, like, actual constants and complex-number plumbing. 🌈
LAPACK_COL_MAJOR— expands to102— defined at line 120 oflapacke.h. (That's the column-major layout marker, bestie — remember that number, it comes back a lot. 👀)lapack_complex_double— expands todouble _Complex— defined at line 90 oflapacke.h.lapack_complex_double_imag(z)— expands to(cimag(z))— defined at line 98 oflapacke.h.lapack_complex_double_real(z)— expands to(creal(z))— defined at line 94 oflapacke.h.lapack_complex_float— expands tofloat _Complex— defined at line 74 oflapacke.h.lapack_complex_float_imag(z)— expands to(cimag(z))— defined at line 82 oflapacke.h.lapack_complex_float_real(z)— expands to(creal(z))— defined at line 78 oflapacke.h.
So like, lapack_complex_float_real(z) and lapack_complex_double_real(z) are literally just wrapping creal, and the _imag ones wrap cimag — no cap, that's the whole vibe. 🫶
Back to the function aliases, and we're in cp* territory now — packed storage girlies, rise. 🎀
LAPACK_cpbcon— expands toLAPACK_GLOBAL(cpbcon,CPBCON)— defined at line 12751 oflapacke.h.LAPACK_cpbequ— expands toLAPACK_GLOBAL(cpbequ,CPBEQU)— defined at line 12921 oflapacke.h.LAPACK_cpbrfs— expands toLAPACK_GLOBAL(cpbrfs,CPBRFS)— defined at line 12815 oflapacke.h.LAPACK_cpbstf— expands toLAPACK_GLOBAL(cpbstf,CPBSTF)— defined at line 13199 oflapacke.h.LAPACK_cpbsv— expands toLAPACK_GLOBAL(cpbsv,CPBSV)— defined at line 12987 oflapacke.h.LAPACK_cpbsvx— expands toLAPACK_GLOBAL(cpbsvx,CPBSVX)— defined at line 12991 oflapacke.h.LAPACK_cpbtrf— expands toLAPACK_GLOBAL(cpbtrf,CPBTRF)— defined at line 12643 oflapacke.h.LAPACK_cpbtrs— expands toLAPACK_GLOBAL(cpbtrs,CPBTRS)— defined at line 12693 oflapacke.h.LAPACK_cpftrf— expands toLAPACK_GLOBAL(cpftrf,CPFTRF)— defined at line 12636 oflapacke.h.LAPACK_cpftri— expands toLAPACK_GLOBAL(cpftri,CPFTRI)— defined at line 12862 oflapacke.h.LAPACK_cpftrs— expands toLAPACK_GLOBAL(cpftrs,CPFTRS)— defined at line 12686 oflapacke.h.LAPACK_cpocon— expands toLAPACK_GLOBAL(cpocon,CPOCON)— defined at line 12743 oflapacke.h.LAPACK_cpoequ— expands toLAPACK_GLOBAL(cpoequ,CPOEQU)— defined at line 12909 oflapacke.h.LAPACK_cpoequb— expands toLAPACK_GLOBAL(cpoequb,CPOEQUB)— defined at line 12914 oflapacke.h.
Okay bestie, we're still deep in the c block — complex single precision girlies, this is your section 💅 Every single one of these is a #define in lapacke.h that glues the lowercase LAPACKE name to its ALL-CAPS Fortran symbol through LAPACK_GLOBAL. Lowercase on the left, uppercase on the right, that's the whole vibe check.
#define LAPACK_cporfs LAPACK_GLOBAL(cporfs,CPORFS)— Definition at line 12803 of filelapacke.h.#define LAPACK_cporfsx LAPACK_GLOBAL(cporfsx,CPORFSX)— Definition at line 12808 of filelapacke.h.#define LAPACK_cposv LAPACK_GLOBAL(cposv,CPOSV)— Definition at line 12965 of filelapacke.h.#define LAPACK_cposvx LAPACK_GLOBAL(cposvx,CPOSVX)— Definition at line 12971 of filelapacke.h.#define LAPACK_cposvxx LAPACK_GLOBAL(cposvxx,CPOSVXX)— Definition at line 12976 of filelapacke.h.#define LAPACK_cpotrf LAPACK_GLOBAL(cpotrf,CPOTRF)— Definition at line 12623 of filelapacke.h.#define LAPACK_cpotrf2 LAPACK_GLOBAL(cpotrf2,CPOTRF2)— Definition at line 12627 of filelapacke.h. the sequel, and honestly? it ate ✨#define LAPACK_cpotri LAPACK_GLOBAL(cpotri,CPOTRI)— Definition at line 12857 of filelapacke.h.#define LAPACK_cpotrs LAPACK_GLOBAL(cpotrs,CPOTRS)— Definition at line 12681 of filelapacke.h.#define LAPACK_cppcon LAPACK_GLOBAL(cppcon,CPPCON)— Definition at line 12747 of filelapacke.h.#define LAPACK_cppequ LAPACK_GLOBAL(cppequ,CPPEQU)— Definition at line 12917 of filelapacke.h.#define LAPACK_cpprfs LAPACK_GLOBAL(cpprfs,CPPRFS)— Definition at line 12811 of filelapacke.h.#define LAPACK_cppsv LAPACK_GLOBAL(cppsv,CPPSV)— Definition at line 12979 of filelapacke.h.#define LAPACK_cppsvx LAPACK_GLOBAL(cppsvx,CPPSVX)— Definition at line 12983 of filelapacke.h.#define LAPACK_cpptrf LAPACK_GLOBAL(cpptrf,CPPTRF)— Definition at line 12639 of filelapacke.h.#define LAPACK_cpptri LAPACK_GLOBAL(cpptri,CPPTRI)— Definition at line 12865 of filelapacke.h.#define LAPACK_cpptrs LAPACK_GLOBAL(cpptrs,CPPTRS)— Definition at line 12689 of filelapacke.h.#define LAPACK_cpstrf LAPACK_GLOBAL(cpstrf,CPSTRF)— Definition at line 12632 of filelapacke.h.#define LAPACK_cptcon LAPACK_GLOBAL(cptcon,CPTCON)— Definition at line 12755 of filelapacke.h.#define LAPACK_cpteqr LAPACK_GLOBAL(cpteqr,CPTEQR)— Definition at line 13175 of filelapacke.h.#define LAPACK_cptrfs LAPACK_GLOBAL(cptrfs,CPTRFS)— Definition at line 12819 of filelapacke.h.#define LAPACK_cptsv LAPACK_GLOBAL(cptsv,CPTSV)— Definition at line 12995 of filelapacke.h.#define LAPACK_cptsvx LAPACK_GLOBAL(cptsvx,CPTSVX)— Definition at line 12999 of filelapacke.h.#define LAPACK_cpttrf LAPACK_GLOBAL(cpttrf,CPTTRF)— Definition at line 12647 of filelapacke.h.#define LAPACK_cpttrs LAPACK_GLOBAL(cpttrs,CPTTRS)— Definition at line 12697 of filelapacke.h.#define LAPACK_cspcon LAPACK_GLOBAL(cspcon,CSPCON)— Definition at line 12765 of filelapacke.h.#define LAPACK_csprfs LAPACK_GLOBAL(csprfs,CSPRFS)— Definition at line 12835 of filelapacke.h.#define LAPACK_cspsv LAPACK_GLOBAL(cspsv,CSPSV)— Definition at line 13021 of filelapacke.h.#define LAPACK_cspsvx LAPACK_GLOBAL(cspsvx,CSPSVX)— Definition at line 13025 of filelapacke.h.#define LAPACK_csptrf LAPACK_GLOBAL(csptrf,CSPTRF)— Definition at line 12663 of filelapacke.h.#define LAPACK_csptri LAPACK_GLOBAL(csptri,CSPTRI)— Definition at line 12875 of filelapacke.h.#define LAPACK_csptrs LAPACK_GLOBAL(csptrs,CSPTRS)— Definition at line 12713 of filelapacke.h.#define LAPACK_cstedc LAPACK_GLOBAL(cstedc,CSTEDC)— Definition at line 13167 of filelapacke.h.#define LAPACK_cstegr LAPACK_GLOBAL(cstegr,CSTEGR)— Definition at line 13171 of filelapacke.h.#define LAPACK_cstein LAPACK_GLOBAL(cstein,CSTEIN)— Definition at line 13181 of filelapacke.h.#define LAPACK_cstemr LAPACK_GLOBAL(cstemr,CSTEMR)— Definition at line 13163 of filelapacke.h.#define LAPACK_csteqr LAPACK_GLOBAL(csteqr,CSTEQR)— Definition at line 13159 of filelapacke.h.
Now we hit the sy era and bestie, it is giving family reunion 😭 so many cousins:
#define LAPACK_csycon LAPACK_GLOBAL(csycon,CSYCON)— Definition at line 12759 of filelapacke.h.#define LAPACK_csycon_3 LAPACK_GLOBAL(csycon_3,CSYCON_3)— Definition at line 13798 of filelapacke.h. yes the_3is part of the name, don't come for me 🙈#define LAPACK_csyconv LAPACK_GLOBAL(csyconv,CSYCONV)— Definition at line 13667 of filelapacke.h.#define LAPACK_csyequb LAPACK_GLOBAL(csyequb,CSYEQUB)— Definition at line 12926 of filelapacke.h.#define LAPACK_csyr LAPACK_GLOBAL(csyr,CSYR)— Definition at line 13744 of filelapacke.h. short king 👑#define LAPACK_csyrfs LAPACK_GLOBAL(csyrfs,CSYRFS)— Definition at line 12823 of filelapacke.h.#define LAPACK_csyrfsx LAPACK_GLOBAL(csyrfsx,CSYRFSX)— Definition at line 12828 of filelapacke.h.#define LAPACK_csysv LAPACK_GLOBAL(csysv,CSYSV)— Definition at line 13003 of filelapacke.h.#define LAPACK_csysv_aa LAPACK_GLOBAL(csysv_aa,CSYSV_AA)— Definition at line 13757 of filelapacke.h.#define LAPACK_csysv_aa_2stage— split over two lines in the source, and it's giving drama:
#define LAPACK_csysv_aa_2stage
LAPACK_GLOBAL(csysv_aa_2stage,CSYSV_AA_2STAGE)
Definition at line 13828 of file lapacke.h.
#define LAPACK_csysv_rk LAPACK_GLOBAL(csysv_rk,CSYSV_RK)— Definition at line 13776 of filelapacke.h.#define LAPACK_csysv_rook LAPACK_GLOBAL(csysv_rook,CSYSV_ROOK)— Definition at line 13742 of filelapacke.h.#define LAPACK_csysvx LAPACK_GLOBAL(csysvx,CSYSVX)— Definition at line 13007 of filelapacke.h.#define LAPACK_csysvxx LAPACK_GLOBAL(csysvxx,CSYSVXX)— Definition at line 13012 of filelapacke.h.#define LAPACK_csyswapr LAPACK_GLOBAL(csyswapr,CSYSWAPR)— Definition at line 13668 of filelapacke.h.#define LAPACK_csytrf LAPACK_GLOBAL(csytrf,CSYTRF)— Definition at line 12653 of filelapacke.h.#define LAPACK_csytrf_aa LAPACK_GLOBAL(csytrf_aa,CSYTRF_AA)— Definition at line 13767 of filelapacke.h.#define LAPACK_csytrf_aa_2stage— another two-liner, stay with me:
#define LAPACK_csytrf_aa_2stage
LAPACK_GLOBAL(csytrf_aa_2stage,CSYTRF_AA_2STAGE)
Definition at line 13838 of file lapacke.h.
#define LAPACK_csytrf_rk LAPACK_GLOBAL(csytrf_rk,CSYTRF_RK)— Definition at line 13780 of filelapacke.h.#define LAPACK_csytrf_rook LAPACK_GLOBAL(csytrf_rook,CSYTRF_ROOK)— Definition at line 12654 of filelapacke.h.#define LAPACK_csytri LAPACK_GLOBAL(csytri,CSYTRI)— Definition at line 12869 of filelapacke.h.#define LAPACK_csytri2 LAPACK_GLOBAL(csytri2,CSYTRI2)— Definition at line 13669 of filelapacke.h.#define LAPACK_csytri2x LAPACK_GLOBAL(csytri2x,CSYTRI2X)— Definition at line 13670 of filelapacke.h.#define LAPACK_csytri_3 LAPACK_GLOBAL(csytri_3,CSYTRI_3)— Definition at line 13792 of filelapacke.h.#define LAPACK_csytrs LAPACK_GLOBAL(csytrs,CSYTRS)— Definition at line 12703 of filelapacke.h.#define LAPACK_csytrs2 LAPACK_GLOBAL(csytrs2,CSYTRS2)— Definition at line 13671 of filelapacke.h.#define LAPACK_csytrs_3 LAPACK_GLOBAL(csytrs_3,CSYTRS_3)— Definition at line 13786 of filelapacke.h.#define LAPACK_csytrs_aa LAPACK_GLOBAL(csytrs_aa,CSYTRS_AA)— Definition at line 13761 of filelapacke.h.#define LAPACK_csytrs_aa_2stage— third two-liner bestie, we're collecting them like Pokémon:
#define LAPACK_csytrs_aa_2stage
LAPACK_GLOBAL(csytrs_aa_2stage,CSYTRS_AA_2STAGE)
Definition at line 13832 of file lapacke.h.
#define LAPACK_csytrs_rook LAPACK_GLOBAL(csytrs_rook,CSYTRS_ROOK)— Definition at line 12704 of filelapacke.h.
The t block said hold my iced coffee ☕ every triangular/bidiagonal girlie gets her moment:
#define LAPACK_ctbcon LAPACK_GLOBAL(ctbcon,CTBCON)— Definition at line 12779 of filelapacke.h.#define LAPACK_ctbrfs LAPACK_GLOBAL(ctbrfs,CTBRFS)— Definition at line 12849 of filelapacke.h.#define LAPACK_ctbtrs LAPACK_GLOBAL(ctbtrs,CTBTRS)— Definition at line 12727 of filelapacke.h.#define LAPACK_ctfsm LAPACK_GLOBAL(ctfsm,CTFSM)— Definition at line 13512 of filelapacke.h.#define LAPACK_ctftri LAPACK_GLOBAL(ctftri,CTFTRI)— Definition at line 12886 of filelapacke.h.#define LAPACK_ctfttp LAPACK_GLOBAL(ctfttp,CTFTTP)— Definition at line 13516 of filelapacke.h.#define LAPACK_ctfttr LAPACK_GLOBAL(ctfttr,CTFTTR)— Definition at line 13520 of filelapacke.h.#define LAPACK_ctgevc LAPACK_GLOBAL(ctgevc,CTGEVC)— Definition at line 13271 of filelapacke.h.#define LAPACK_ctgexc LAPACK_GLOBAL(ctgexc,CTGEXC)— Definition at line 13275 of filelapacke.h.#define LAPACK_ctgsen LAPACK_GLOBAL(ctgsen,CTGSEN)— Definition at line 13279 of filelapacke.h.#define LAPACK_ctgsja LAPACK_GLOBAL(ctgsja,CTGSJA)— Definition at line 13299 of filelapacke.h.#define LAPACK_ctgsna LAPACK_GLOBAL(ctgsna,CTGSNA)— Definition at line 13287 of filelapacke.h.#define LAPACK_ctgsyl LAPACK_GLOBAL(ctgsyl,CTGSYL)— Definition at line 13283 of filelapacke.h.#define LAPACK_ctpcon LAPACK_GLOBAL(ctpcon,CTPCON)— Definition at line 12775 of filelapacke.h.#define LAPACK_ctpmqrt LAPACK_GLOBAL(ctpmqrt,CTPMQRT)— Definition at line 13725 of filelapacke.h.#define LAPACK_ctpqrt LAPACK_GLOBAL(ctpqrt,CTPQRT)— Definition at line 13729 of filelapacke.h.#define LAPACK_ctpqrt2 LAPACK_GLOBAL(ctpqrt2,CTPQRT2)— Definition at line 13733 of filelapacke.h.#define LAPACK_ctprfb LAPACK_GLOBAL(ctprfb,CTPRFB)— Definition at line 13737 of filelapacke.h.#define LAPACK_ctprfs LAPACK_GLOBAL(ctprfs,CTPRFS)— Definition at line 12845 of filelapacke.h.#define LAPACK_ctptri LAPACK_GLOBAL(ctptri,CTPTRI)— Definition at line 12889 of filelapacke.h.#define LAPACK_ctptrs LAPACK_GLOBAL(ctptrs,CTPTRS)— Definition at line 12723 of filelapacke.h.#define LAPACK_ctpttf LAPACK_GLOBAL(ctpttf,CTPTTF)— Definition at line 13524 of filelapacke.h.#define LAPACK_ctpttr LAPACK_GLOBAL(ctpttr,CTPTTR)— Definition at line 13528 of filelapacke.h.#define LAPACK_ctrcon LAPACK_GLOBAL(ctrcon,CTRCON)— Definition at line 12771 of filelapacke.h.#define LAPACK_ctrevc LAPACK_GLOBAL(ctrevc,CTREVC)— Definition at line 13231 of filelapacke.h.#define LAPACK_ctrexc LAPACK_GLOBAL(ctrexc,CTREXC)— Definition at line 13239 of filelapacke.h.#define LAPACK_ctrrfs LAPACK_GLOBAL(ctrrfs,CTRRFS)— Definition at line 12841 of filelapacke.h.#define LAPACK_ctrsen LAPACK_GLOBAL(ctrsen,CTRSEN)— Definition at line 13243 of filelapacke.h.#define LAPACK_ctrsna LAPACK_GLOBAL(ctrsna,CTRSNA)— Definition at line 13235 of filelapacke.h.#define LAPACK_ctrsyl LAPACK_GLOBAL(ctrsyl,CTRSYL)— Definition at line 13247 of filelapacke.h.#define LAPACK_ctrtri LAPACK_GLOBAL(ctrtri,CTRTRI)— Definition at line 12881 of filelapacke.h.#define LAPACK_ctrtrs LAPACK_GLOBAL(ctrtrs,CTRTRS)— Definition at line 12719 of filelapacke.h.#define LAPACK_ctrttf LAPACK_GLOBAL(ctrttf,CTRTTF)— Definition at line 13532 of filelapacke.h.#define LAPACK_ctrttp LAPACK_GLOBAL(ctrttp,CTRTTP)— Definition at line 13536 of filelapacke.h.#define LAPACK_ctzrzf LAPACK_GLOBAL(ctzrzf,CTZRZF)— Definition at line 13089 of filelapacke.h.
And finally the un girlies — unitary all day, no skips 🌈
#define LAPACK_cunbdb LAPACK_GLOBAL(cunbdb,CUNBDB)— Definition at line 13672 of filelapacke.h.#define LAPACK_cuncsd LAPACK_GLOBAL(cuncsd,CUNCSD)— Definition at line 13673 of filelapacke.h.#define LAPACK_cuncsd2by1 LAPACK_GLOBAL(cuncsd2by1,CUNCSD2BY1)— Definition at line 13674 of filelapacke.h.#define LAPACK_cungbr LAPACK_GLOBAL(cungbr,CUNGBR)— Definition at line 13115 of filelapacke.h.#define LAPACK_cunghr LAPACK_GLOBAL(cunghr,CUNGHR)— Definition at line 13209 of filelapacke.h.#define LAPACK_cunglq LAPACK_GLOBAL(cunglq,CUNGLQ)— Definition at line 13059 of filelapacke.h.
bestie note fr: the line numbers are just where each#definesits inlapacke.h— that's the whole fact. Don't read anything else into them, iykyk 🫶
Still more where that came from — the macro list keeps going, so don't go anywhere 💖
alright bestie, next batch of #defines incoming 💅 and the tea is: every single one of these follows the exact same lil shape — #define LAPACK_x LAPACK_GLOBAL(x,X) — so it's just an alias pointing at the real symbol, and each one has its own home address in lapacke.h. no cap, that's the whole vibe. let's roll:
LAPACK_cungql— expands toLAPACK_GLOBAL(cungql,CUNGQL). Definition at line 13069 of filelapacke.h. ✨LAPACK_cungqr— expands toLAPACK_GLOBAL(cungqr,CUNGQR). Definition at line 13047 of filelapacke.h. ✨LAPACK_cungrq— expands toLAPACK_GLOBAL(cungrq,CUNGRQ). Definition at line 13081 of filelapacke.h. ✨LAPACK_cungtr— expands toLAPACK_GLOBAL(cungtr,CUNGTR). Definition at line 13135 of filelapacke.h. ✨LAPACK_cunmbr— expands toLAPACK_GLOBAL(cunmbr,CUNMBR). Definition at line 13117 of filelapacke.h. ✨LAPACK_cunmhr— expands toLAPACK_GLOBAL(cunmhr,CUNMHR). Definition at line 13211 of filelapacke.h. ✨LAPACK_cunmlq— expands toLAPACK_GLOBAL(cunmlq,CUNMLQ). Definition at line 13061 of filelapacke.h. ✨LAPACK_cunmql— expands toLAPACK_GLOBAL(cunmql,CUNMQL). Definition at line 13073 of filelapacke.h. ✨LAPACK_cunmqr— expands toLAPACK_GLOBAL(cunmqr,CUNMQR). Definition at line 13049 of filelapacke.h. ✨LAPACK_cunmrq— expands toLAPACK_GLOBAL(cunmrq,CUNMRQ). Definition at line 13085 of filelapacke.h. ✨LAPACK_cunmrz— expands toLAPACK_GLOBAL(cunmrz,CUNMRZ). Definition at line 13093 of filelapacke.h. ✨LAPACK_cunmtr— expands toLAPACK_GLOBAL(cunmtr,CUNMTR). Definition at line 13137 of filelapacke.h. ✨LAPACK_cupgtr— expands toLAPACK_GLOBAL(cupgtr,CUPGTR). Definition at line 13147 of filelapacke.h. ✨LAPACK_cupmtr— expands toLAPACK_GLOBAL(cupmtr,CUPMTR). Definition at line 13149 of filelapacke.h. ✨
and that's the c crew done, wrapping up the complex-flavoured block 🎀 now the d girlies step in — same deal, same shape, just different letters:
LAPACK_dbbcsd— expands toLAPACK_GLOBAL(dbbcsd,DBBCSD). Definition at line 13675 of filelapacke.h. 🦋LAPACK_dbdsdc— expands toLAPACK_GLOBAL(dbdsdc,DBDSDC). Definition at line 13124 of filelapacke.h. 🦋LAPACK_dbdsqr— expands toLAPACK_GLOBAL(dbdsqr,DBDSQR). Definition at line 13120 of filelapacke.h. 🦋LAPACK_dbdsvdx— expands toLAPACK_GLOBAL(dbdsvdx,DBDSVDX). Definition at line 13126 of filelapacke.h. 🦋LAPACK_ddisna— expands toLAPACK_GLOBAL(ddisna,DDISNA). Definition at line 13184 of filelapacke.h. 🦋LAPACK_dgbbrd— expands toLAPACK_GLOBAL(dgbbrd,DGBBRD). Definition at line 13108 of filelapacke.h. 🦋LAPACK_dgbcon— expands toLAPACK_GLOBAL(dgbcon,DGBCON). Definition at line 12734 of filelapacke.h. 🦋LAPACK_dgbequ— expands toLAPACK_GLOBAL(dgbequ,DGBEQU). Definition at line 12900 of filelapacke.h. 🦋LAPACK_dgbequb— expands toLAPACK_GLOBAL(dgbequb,DGBEQUB). Definition at line 12903 of filelapacke.h. 🦋LAPACK_dgbrfs— expands toLAPACK_GLOBAL(dgbrfs,DGBRFS). Definition at line 12790 of filelapacke.h. 🦋LAPACK_dgbrfsx— expands toLAPACK_GLOBAL(dgbrfsx,DGBRFSX). Definition at line 12793 of filelapacke.h. 🦋LAPACK_dgbsv— expands toLAPACK_GLOBAL(dgbsv,DGBSV). Definition at line 12944 of filelapacke.h. 🦋LAPACK_dgbsvx— expands toLAPACK_GLOBAL(dgbsvx,DGBSVX). Definition at line 12948 of filelapacke.h. 🦋LAPACK_dgbsvxx— expands toLAPACK_GLOBAL(dgbsvxx,DGBSVXX). Definition at line 12951 of filelapacke.h. 🦋LAPACK_dgbtrf— expands toLAPACK_GLOBAL(dgbtrf,DGBTRF). Definition at line 12614 of filelapacke.h. 🦋LAPACK_dgbtrs— expands toLAPACK_GLOBAL(dgbtrs,DGBTRS). Definition at line 12672 of filelapacke.h. 🦋
look at us go, the dge* cluster is next and honestly it's giving main character energy 👑:
LAPACK_dgebak— expands toLAPACK_GLOBAL(dgebak,DGEBAK). Definition at line 13218 of filelapacke.h. ⭐LAPACK_dgebal— expands toLAPACK_GLOBAL(dgebal,DGEBAL). Definition at line 13214 of filelapacke.h. ⭐LAPACK_dgebrd— expands toLAPACK_GLOBAL(dgebrd,DGEBRD). Definition at line 13104 of filelapacke.h. ⭐LAPACK_dgecon— expands toLAPACK_GLOBAL(dgecon,DGECON). Definition at line 12730 of filelapacke.h. ⭐LAPACK_dgeequ— expands toLAPACK_GLOBAL(dgeequ,DGEEQU). Definition at line 12892 of filelapacke.h. ⭐LAPACK_dgeequb— expands toLAPACK_GLOBAL(dgeequb,DGEEQUB). Definition at line 12895 of filelapacke.h. ⭐LAPACK_dgees— expands toLAPACK_GLOBAL(dgees,DGEES). Definition at line 13402 of filelapacke.h. ⭐LAPACK_dgeesx— expands toLAPACK_GLOBAL(dgeesx,DGEESX). Definition at line 13406 of filelapacke.h. ⭐LAPACK_dgeev— expands toLAPACK_GLOBAL(dgeev,DGEEV). Definition at line 13410 of filelapacke.h. ⭐LAPACK_dgeevx— expands toLAPACK_GLOBAL(dgeevx,DGEEVX). Definition at line 13414 of filelapacke.h. ⭐LAPACK_dgehrd— expands toLAPACK_GLOBAL(dgehrd,DGEHRD). Definition at line 13202 of filelapacke.h. ⭐LAPACK_dgejsv— expands toLAPACK_GLOBAL(dgejsv,DGEJSV). Definition at line 13430 of filelapacke.h. ⭐LAPACK_dgelq— expands toLAPACK_GLOBAL(dgelq,DGELQ). Definition at line 13803 of filelapacke.h. ⭐LAPACK_dgelq2— expands toLAPACK_GLOBAL(dgelq2,DGELQ2). Definition at line 13590 of filelapacke.h. ⭐LAPACK_dgelqf— expands toLAPACK_GLOBAL(dgelqf,DGELQF). Definition at line 13052 of filelapacke.h. ⭐LAPACK_dgels— expands toLAPACK_GLOBAL(dgels,DGELS). Definition at line 13302 of filelapacke.h. ⭐LAPACK_dgelsd— expands toLAPACK_GLOBAL(dgelsd,DGELSD). Definition at line 13314 of filelapacke.h. ⭐LAPACK_dgelss— expands toLAPACK_GLOBAL(dgelss,DGELSS). Definition at line 13310 of filelapacke.h. ⭐LAPACK_dgelsy— expands toLAPACK_GLOBAL(dgelsy,DGELSY). Definition at line 13306 of filelapacke.h. ⭐LAPACK_dgemlq— expands toLAPACK_GLOBAL(dgemlq,DGEMLQ). Definition at line 13807 of filelapacke.h. ⭐LAPACK_dgemqr— expands toLAPACK_GLOBAL(dgemqr,DGEMQR). Definition at line 13815 of filelapacke.h. ⭐LAPACK_dgemqrt— expands toLAPACK_GLOBAL(dgemqrt,DGEMQRT). Definition at line 13708 of filelapacke.h. ⭐LAPACK_dgeqlf— expands toLAPACK_GLOBAL(dgeqlf,DGEQLF). Definition at line 13064 of filelapacke.h. ⭐LAPACK_dgeqp3— expands toLAPACK_GLOBAL(dgeqp3,DGEQP3). Definition at line 13040 of filelapacke.h. ⭐LAPACK_dgeqpf— expands toLAPACK_GLOBAL(dgeqpf,DGEQPF). Definition at line 13036 of filelapacke.h. ⭐LAPACK_dgeqr— expands toLAPACK_GLOBAL(dgeqr,DGEQR). Definition at line 13811 of filelapacke.h. ⭐LAPACK_dgeqr2— expands toLAPACK_GLOBAL(dgeqr2,DGEQR2). Definition at line 13548 of filelapacke.h. ⭐LAPACK_dgeqrf— expands toLAPACK_GLOBAL(dgeqrf,DGEQRF). Definition at line 13032 of filelapacke.h. ⭐LAPACK_dgeqrfp— expands toLAPACK_GLOBAL(dgeqrfp,DGEQRFP). Definition at line 13538 of filelapacke.h. ⭐LAPACK_dgeqrt— expands toLAPACK_GLOBAL(dgeqrt,DGEQRT). Definition at line 13712 of filelapacke.h. ⭐LAPACK_dgeqrt2— expands toLAPACK_GLOBAL(dgeqrt2,DGEQRT2). Definition at line 13716 of filelapacke.h. ⭐LAPACK_dgeqrt3— expands toLAPACK_GLOBAL(dgeqrt3,DGEQRT3). Definition at line 13720 of filelapacke.h. ⭐LAPACK_dgerfs— expands toLAPACK_GLOBAL(dgerfs,DGERFS). Definition at line 12782 of filelapacke.h. ⭐LAPACK_dgerfsx— expands toLAPACK_GLOBAL(dgerfsx,DGERFSX). Definition at line 12785 of filelapacke.h. ⭐LAPACK_dgerqf— expands toLAPACK_GLOBAL(dgerqf,DGERQF). Definition at line 13076 of filelapacke.h. ⭐LAPACK_dgesdd— expands toLAPACK_GLOBAL(dgesdd,DGESDD). Definition at line 13426 of filelapacke.h. ⭐LAPACK_dgesv— expands toLAPACK_GLOBAL(dgesv,DGESV). Definition at line 12930 of filelapacke.h. ⭐LAPACK_dgesvd— expands toLAPACK_GLOBAL(dgesvd,DGESVD). Definition at line 13418 of filelapacke.h. ⭐LAPACK_dgesvdx— expands toLAPACK_GLOBAL(dgesvdx,DGESVDX). Definition at line 13422 of filelapacke.h. ⭐LAPACK_dgesvj— expands toLAPACK_GLOBAL(dgesvj,DGESVJ). Definition at line 13434 of filelapacke.h. ⭐LAPACK_dgesvx— expands toLAPACK_GLOBAL(dgesvx,DGESVX). Definition at line 12936 of filelapacke.h. ⭐LAPACK_dgesvxx— expands toLAPACK_GLOBAL(dgesvxx,DGESVXX). Definition at line 12939 of filelapacke.h. ⭐LAPACK_dgetf2— expands toLAPACK_GLOBAL(dgetf2,DGETF2). Definition at line 13562 of filelapacke.h. ⭐LAPACK_dgetrf— expands toLAPACK_GLOBAL(dgetrf,DGETRF). Definition at line 12606 of filelapacke.h. ⭐LAPACK_dgetrf2— expands toLAPACK_GLOBAL(dgetrf2,DGETRF2). Definition at line 12610 of filelapacke.h. ⭐LAPACK_dgetri— expands toLAPACK_GLOBAL(dgetri,DGETRI). Definition at line 12852 of filelapacke.h. ⭐LAPACK_dgetrs— expands toLAPACK_GLOBAL(dgetrs,DGETRS). Definition at line 12668 of filelapacke.h. ⭐LAPACK_dgetsls— expands toLAPACK_GLOBAL(dgetsls,DGETSLS). Definition at line 13819 of filelapacke.h. ⭐
and the dgg* girlies, because of course there's a whole other cluster 🙈:
LAPACK_dggbak— expands toLAPACK_GLOBAL(dggbak,DGGBAK). Definition at line 13262 of filelapacke.h. 🍓LAPACK_dggbal— expands toLAPACK_GLOBAL(dggbal,DGGBAL). Definition at line 13258 of filelapacke.h. 🍓LAPACK_dgges— expands toLAPACK_GLOBAL(dgges,DGGES). Definition at line 13482 of filelapacke.h. 🍓LAPACK_dgges3— expands toLAPACK_GLOBAL(dgges3,DGGES3). Definition at line 13486 of filelapacke.h. 🍓LAPACK_dggesx— expands toLAPACK_GLOBAL(dggesx,DGGESX). Definition at line 13490 of filelapacke.h. 🍓LAPACK_dggev— expands toLAPACK_GLOBAL(dggev,DGGEV). Definition at line 13494 of filelapacke.h. 🍓LAPACK_dggev3— expands toLAPACK_GLOBAL(dggev3,DGGEV3). Definition at line 13498 of filelapacke.h. 🍓LAPACK_dggevx— expands toLAPACK_GLOBAL(dggevx,DGGEVX). Definition at line 13502 of filelapacke.h. 🍓LAPACK_dggglm— expands toLAPACK_GLOBAL(dggglm,DGGGLM). Definition at line 13322 of filelapacke.h. 🍓LAPACK_dgghd3— expands toLAPACK_GLOBAL(dgghd3,DGGHD3). Definition at line 13254 of filelapacke.h. 🍓LAPACK_dgghrd— expands toLAPACK_GLOBAL(dgghrd,DGGHRD). Definition at line 13250 of filelapacke.h. 🍓LAPACK_dgglse— expands toLAPACK_GLOBAL(dgglse,DGGLSE). Definition at line 13318 of filelapacke.h. 🍓LAPACK_dggqrf— expands toLAPACK_GLOBAL(dggqrf,DGGQRF). Definition at line 13096 of filelapacke.h. 🍓LAPACK_dggrqf— expands toLAPACK_GLOBAL(dggrqf,DGGRQF). Definition at line 13100 of filelapacke.h. 🍓LAPACK_dggsvd— expands toLAPACK_GLOBAL(dggsvd,DGGSVD). Definition at line 13438 of filelapacke.h. 🍓LAPACK_dggsvd3— expands toLAPACK_GLOBAL(dggsvd3,DGGSVD3). Definition at line 13749 of filelapacke.h. 🍓LAPACK_dggsvp— expands toLAPACK_GLOBAL(dggsvp,DGGSVP). Definition at line 13290 of filelapacke.h. 🍓LAPACK_dggsvp3— expands toLAPACK_GLOBAL(dggsvp3,DGGSVP3). Definition at line 13294 of filelapacke.h. 🍓
the gt trio-ish situation (there's more than three, don't come for me 💀):
LAPACK_dgtcon— expands toLAPACK_GLOBAL(dgtcon,DGTCON). Definition at line 12738 of filelapacke.h. 🌸LAPACK_dgtrfs— expands toLAPACK_GLOBAL(dgtrfs,DGTRFS). Definition at line 12798 of filelapacke.h. 🌸LAPACK_dgtsv— expands toLAPACK_GLOBAL(dgtsv,DGTSV). Definition at line 12956 of filelapacke.h. 🌸LAPACK_dgtsvx— expands toLAPACK_GLOBAL(dgtsvx,DGTSVX). Definition at line 12960 of filelapacke.h. 🌸LAPACK_dgttrf— expands toLAPACK_GLOBAL(dgttrf,DGTTRF). Definition at line 12618 of filelapacke.h. 🌸LAPACK_dgttrs— expands toLAPACK_GLOBAL(dgttrs,DGTTRS). Definition at line 12676 of filelapacke.h. 🌸
then the h girlies (yes they exist, they're right there in the header, no I will not be explaining why the letters jump around 😭):
LAPACK_dhgeqz— expands toLAPACK_GLOBAL(dhgeqz,DHGEQZ). Definition at line 13266 of filelapacke.h. 🧚LAPACK_dhsein— expands toLAPACK_GLOBAL(dhsein,DHSEIN). Definition at line 13226 of filelapacke.h. 🧚LAPACK_dhseqr— expands toLAPACK_GLOBAL(dhseqr,DHSEQR). Definition at line 13222 of filelapacke.h. 🧚
and finally the lac/lag utility besties, aka the little helpers that ate 💅:
LAPACK_dlacn2— expands toLAPACK_GLOBAL(dlacn2,DLACN2). Definition at line 13552 of filelapacke.h. 🔥LAPACK_dlacpy— expands toLAPACK_GLOBAL(dlacpy,DLACPY). Definition at line 13556 of filelapacke.h. 🔥LAPACK_dlag2s— expands toLAPACK_GLOBAL(dlag2s,DLAG2S). Definition at line 13618 of filelapacke.h. 🔥LAPACK_dlagge— expands toLAPACK_GLOBAL(dlagge,DLAGGE). Definition at line 13626 of filelapacke.h. 🔥LAPACK_dlagsy— expands toLAPACK_GLOBAL(dlagsy,DLAGSY). Definition at line 13640 of filelapacke.h. 🔥
okay that's this chunk done and honestly? ate. no crumbs left. 🫶 still more #defines queued up so don't wander off — the header is LONG long. 💖
#define LAPACK_dlamch LAPACK_GLOBAL(dlamch,DLAMCH)— defined at line13588oflapacke.h💅#define LAPACK_dlange LAPACK_GLOBAL(dlange,DLANGE)— defined at line13570oflapacke.h✨#define LAPACK_dlansy LAPACK_GLOBAL(dlansy,DLANSY)— defined at line13580oflapacke.h#define LAPACK_dlantr LAPACK_GLOBAL(dlantr,DLANTR)— defined at line13584oflapacke.h#define LAPACK_dlapmr LAPACK_GLOBAL(dlapmr,DLAPMR)— defined at line13646oflapacke.h🌸#define LAPACK_dlapmt LAPACK_GLOBAL(dlapmt,DLAPMT)— defined at line13650oflapacke.h#define LAPACK_dlapy2 LAPACK_GLOBAL(dlapy2,DLAPY2)— defined at line13654oflapacke.h#define LAPACK_dlapy3 LAPACK_GLOBAL(dlapy3,DLAPY3)— defined at line13656oflapacke.h#define LAPACK_dlarfb LAPACK_GLOBAL(dlarfb,DLARFB)— defined at line13594oflapacke.h🦋#define LAPACK_dlarfg LAPACK_GLOBAL(dlarfg,DLARFG)— defined at line13598oflapacke.h#define LAPACK_dlarft LAPACK_GLOBAL(dlarft,DLARFT)— defined at line13606oflapacke.h#define LAPACK_dlarfx LAPACK_GLOBAL(dlarfx,DLARFX)— defined at line13610oflapacke.h#define LAPACK_dlarnv LAPACK_GLOBAL(dlarnv,DLARNV)— defined at line13544oflapacke.h🎀#define LAPACK_dlartgp LAPACK_GLOBAL(dlartgp,DLARTGP)— defined at line13658oflapacke.h#define LAPACK_dlartgs LAPACK_GLOBAL(dlartgs,DLARTGS)— defined at line13660oflapacke.h#define LAPACK_dlascl LAPACK_GLOBAL(dlascl,DLASCL)— defined at line13630oflapacke.h✨#define LAPACK_dlaset LAPACK_GLOBAL(dlaset,DLASET)— defined at line13634oflapacke.h#define LAPACK_dlasrt LAPACK_GLOBAL(dlasrt,DLASRT)— defined at line13638oflapacke.h#define LAPACK_dlassq LAPACK_GLOBAL(dlassq,DLASSQ)— defined at line13602oflapacke.h#define LAPACK_dlaswp LAPACK_GLOBAL(dlaswp,DLASWP)— defined at line13566oflapacke.h💫#define LAPACK_dlatms LAPACK_GLOBAL(dlatms,DLATMS)— defined at line13614oflapacke.h#define LAPACK_dlauum LAPACK_GLOBAL(dlauum,DLAUUM)— defined at line13622oflapacke.h
okay and now we drift into the dop/dor region bestie, orthogonality central 💜
#define LAPACK_dopgtr LAPACK_GLOBAL(dopgtr,DOPGTR)— defined at line13142oflapacke.h#define LAPACK_dopmtr LAPACK_GLOBAL(dopmtr,DOPMTR)— defined at line13144oflapacke.h#define LAPACK_dorbdb LAPACK_GLOBAL(dorbdb,DORBDB)— defined at line13676oflapacke.h🌀#define LAPACK_dorcsd LAPACK_GLOBAL(dorcsd,DORCSD)— defined at line13677oflapacke.h#define LAPACK_dorcsd2by1 LAPACK_GLOBAL(dorcsd2by1,DORCSD2BY1)— defined at line13678oflapacke.h#define LAPACK_dorgbr LAPACK_GLOBAL(dorgbr,DORGBR)— defined at line13112oflapacke.h#define LAPACK_dorghr LAPACK_GLOBAL(dorghr,DORGHR)— defined at line13206oflapacke.h#define LAPACK_dorglq LAPACK_GLOBAL(dorglq,DORGLQ)— defined at line13056oflapacke.h🌈#define LAPACK_dorgql LAPACK_GLOBAL(dorgql,DORGQL)— defined at line13068oflapacke.h#define LAPACK_dorgqr LAPACK_GLOBAL(dorgqr,DORGQR)— defined at line13044oflapacke.h#define LAPACK_dorgrq LAPACK_GLOBAL(dorgrq,DORGRQ)— defined at line13080oflapacke.h#define LAPACK_dorgtr LAPACK_GLOBAL(dorgtr,DORGTR)— defined at line13130oflapacke.h#define LAPACK_dormbr LAPACK_GLOBAL(dormbr,DORMBR)— defined at line13114oflapacke.h✨#define LAPACK_dormhr LAPACK_GLOBAL(dormhr,DORMHR)— defined at line13208oflapacke.h#define LAPACK_dormlq LAPACK_GLOBAL(dormlq,DORMLQ)— defined at line13058oflapacke.h#define LAPACK_dormql LAPACK_GLOBAL(dormql,DORMQL)— defined at line13072oflapacke.h#define LAPACK_dormqr LAPACK_GLOBAL(dormqr,DORMQR)— defined at line13046oflapacke.h#define LAPACK_dormrq LAPACK_GLOBAL(dormrq,DORMRQ)— defined at line13084oflapacke.h🫶#define LAPACK_dormrz LAPACK_GLOBAL(dormrz,DORMRZ)— defined at line13092oflapacke.h#define LAPACK_dormtr LAPACK_GLOBAL(dormtr,DORMTR)— defined at line13132oflapacke.h
banded + positive-definite hours, the dpb/dpo/dpp/dpt girlies are here 💅
#define LAPACK_dpbcon LAPACK_GLOBAL(dpbcon,DPBCON)— defined at line12750oflapacke.h#define LAPACK_dpbequ LAPACK_GLOBAL(dpbequ,DPBEQU)— defined at line12920oflapacke.h#define LAPACK_dpbrfs LAPACK_GLOBAL(dpbrfs,DPBRFS)— defined at line12814oflapacke.h#define LAPACK_dpbstf LAPACK_GLOBAL(dpbstf,DPBSTF)— defined at line13198oflapacke.h🌸#define LAPACK_dpbsv LAPACK_GLOBAL(dpbsv,DPBSV)— defined at line12986oflapacke.h#define LAPACK_dpbsvx LAPACK_GLOBAL(dpbsvx,DPBSVX)— defined at line12990oflapacke.h#define LAPACK_dpbtrf LAPACK_GLOBAL(dpbtrf,DPBTRF)— defined at line12642oflapacke.h#define LAPACK_dpbtrs LAPACK_GLOBAL(dpbtrs,DPBTRS)— defined at line12692oflapacke.h✨#define LAPACK_dpftrf LAPACK_GLOBAL(dpftrf,DPFTRF)— defined at line12633oflapacke.h#define LAPACK_dpftri LAPACK_GLOBAL(dpftri,DPFTRI)— defined at line12859oflapacke.h#define LAPACK_dpftrs LAPACK_GLOBAL(dpftrs,DPFTRS)— defined at line12683oflapacke.h#define LAPACK_dpocon LAPACK_GLOBAL(dpocon,DPOCON)— defined at line12742oflapacke.h💖#define LAPACK_dpoequ LAPACK_GLOBAL(dpoequ,DPOEQU)— defined at line12908oflapacke.h#define LAPACK_dpoequb LAPACK_GLOBAL(dpoequb,DPOEQUB)— defined at line12911oflapacke.h#define LAPACK_dporfs LAPACK_GLOBAL(dporfs,DPORFS)— defined at line12802oflapacke.h#define LAPACK_dporfsx LAPACK_GLOBAL(dporfsx,DPORFSX)— defined at line12805oflapacke.h#define LAPACK_dposv LAPACK_GLOBAL(dposv,DPOSV)— defined at line12964oflapacke.h👑#define LAPACK_dposvx LAPACK_GLOBAL(dposvx,DPOSVX)— defined at line12970oflapacke.h#define LAPACK_dposvxx LAPACK_GLOBAL(dposvxx,DPOSVXX)— defined at line12973oflapacke.h#define LAPACK_dpotrf LAPACK_GLOBAL(dpotrf,DPOTRF)— defined at line12622oflapacke.h🔥#define LAPACK_dpotrf2 LAPACK_GLOBAL(dpotrf2,DPOTRF2)— defined at line12626oflapacke.h#define LAPACK_dpotri LAPACK_GLOBAL(dpotri,DPOTRI)— defined at line12856oflapacke.h#define LAPACK_dpotrs LAPACK_GLOBAL(dpotrs,DPOTRS)— defined at line12680oflapacke.h#define LAPACK_dppcon LAPACK_GLOBAL(dppcon,DPPCON)— defined at line12746oflapacke.h🦋#define LAPACK_dppequ LAPACK_GLOBAL(dppequ,DPPEQU)— defined at line12916oflapacke.h#define LAPACK_dpprfs LAPACK_GLOBAL(dpprfs,DPPRFS)— defined at line12810oflapacke.h#define LAPACK_dppsv LAPACK_GLOBAL(dppsv,DPPSV)— defined at line12978oflapacke.h#define LAPACK_dppsvx LAPACK_GLOBAL(dppsvx,DPPSVX)— defined at line12982oflapacke.h#define LAPACK_dpptrf LAPACK_GLOBAL(dpptrf,DPPTRF)— defined at line12638oflapacke.h✨#define LAPACK_dpptri LAPACK_GLOBAL(dpptri,DPPTRI)— defined at line12864oflapacke.h#define LAPACK_dpptrs LAPACK_GLOBAL(dpptrs,DPPTRS)— defined at line12688oflapacke.h#define LAPACK_dpstrf LAPACK_GLOBAL(dpstrf,DPSTRF)— defined at line12629oflapacke.h#define LAPACK_dptcon LAPACK_GLOBAL(dptcon,DPTCON)— defined at line12754oflapacke.h🌸#define LAPACK_dpteqr LAPACK_GLOBAL(dpteqr,DPTEQR)— defined at line13174oflapacke.h#define LAPACK_dptrfs LAPACK_GLOBAL(dptrfs,DPTRFS)— defined at line12818oflapacke.h#define LAPACK_dptsv LAPACK_GLOBAL(dptsv,DPTSV)— defined at line12994oflapacke.h#define LAPACK_dptsvx LAPACK_GLOBAL(dptsvx,DPTSVX)— defined at line12998oflapacke.h🎀#define LAPACK_dpttrf LAPACK_GLOBAL(dpttrf,DPTTRF)— defined at line12646oflapacke.h#define LAPACK_dpttrs LAPACK_GLOBAL(dpttrs,DPTTRS)— defined at line12696oflapacke.h
eigen era unlocked 🔓 the ds* squad said symmetric and meant it 💜
#define LAPACK_dsbev LAPACK_GLOBAL(dsbev,DSBEV)— defined at line13370oflapacke.h#define LAPACK_dsbev_2stage LAPACK_GLOBAL(dsbev_2stage,DSBEV_2STAGE)— defined at line13374oflapacke.h🌀#define LAPACK_dsbevd LAPACK_GLOBAL(dsbevd,DSBEVD)— defined at line13378oflapacke.h#define LAPACK_dsbevd_2stage LAPACK_GLOBAL(dsbevd_2stage,DSBEVD_2STAGE)— defined at line13382oflapacke.h#define LAPACK_dsbevx LAPACK_GLOBAL(dsbevx,DSBEVX)— defined at line13386oflapacke.h#define LAPACK_dsbevx_2stage LAPACK_GLOBAL(dsbevx_2stage,DSBEVX_2STAGE)— defined at line13390oflapacke.h✨#define LAPACK_dsbgst LAPACK_GLOBAL(dsbgst,DSBGST)— defined at line13194oflapacke.h#define LAPACK_dsbgv LAPACK_GLOBAL(dsbgv,DSBGV)— defined at line13470oflapacke.h#define LAPACK_dsbgvd LAPACK_GLOBAL(dsbgvd,DSBGVD)— defined at line13474oflapacke.h#define LAPACK_dsbgvx LAPACK_GLOBAL(dsbgvx,DSBGVX)— defined at line13478oflapacke.h💖#define LAPACK_dsbtrd LAPACK_GLOBAL(dsbtrd,DSBTRD)— defined at line13152oflapacke.h#define LAPACK_dsfrk LAPACK_GLOBAL(dsfrk,DSFRK)— defined at line13505oflapacke.h#define LAPACK_dsgesv LAPACK_GLOBAL(dsgesv,DSGESV)— defined at line12933oflapacke.h🔥#define LAPACK_dspcon LAPACK_GLOBAL(dspcon,DSPCON)— defined at line12764oflapacke.h#define LAPACK_dspev LAPACK_GLOBAL(dspev,DSPEV)— defined at line13358oflapacke.h#define LAPACK_dspevd LAPACK_GLOBAL(dspevd,DSPEVD)— defined at line13362oflapacke.h#define LAPACK_dspevx LAPACK_GLOBAL(dspevx,DSPEVX)— defined at line13366oflapacke.h🦋#define LAPACK_dspgst LAPACK_GLOBAL(dspgst,DSPGST)— defined at line13190oflapacke.h#define LAPACK_dspgv LAPACK_GLOBAL(dspgv,DSPGV)— defined at line13458oflapacke.h#define LAPACK_dspgvd LAPACK_GLOBAL(dspgvd,DSPGVD)— defined at line13462oflapacke.h#define LAPACK_dspgvx LAPACK_GLOBAL(dspgvx,DSPGVX)— defined at line13466oflapacke.h✨#define LAPACK_dsposv LAPACK_GLOBAL(dsposv,DSPOSV)— defined at line12967oflapacke.h#define LAPACK_dsprfs LAPACK_GLOBAL(dsprfs,DSPRFS)— defined at line12834oflapacke.h#define LAPACK_dspsv LAPACK_GLOBAL(dspsv,DSPSV)— defined at line13020oflapacke.h#define LAPACK_dspsvx LAPACK_GLOBAL(dspsvx,DSPSVX)— defined at line13024oflapacke.h🫶#define LAPACK_dsptrd LAPACK_GLOBAL(dsptrd,DSPTRD)— defined at line13140oflapacke.h#define LAPACK_dsptrf LAPACK_GLOBAL(dsptrf,DSPTRF)— defined at line12662oflapacke.h#define LAPACK_dsptri LAPACK_GLOBAL(dsptri,DSPTRI)— defined at line12874oflapacke.h#define LAPACK_dsptrs LAPACK_GLOBAL(dsptrs,DSPTRS)— defined at line12712oflapacke.h🌈
okay the d-crew is still absolutely running the group chat and honestly? we respect the consistency 💅 every single one of these is a LAPACK_GLOBAL wrapper, so let's just vibe through the roll call together, bestie. line numbers stay exactly where they are, no cap 🫶
#define LAPACK_dstebz LAPACK_GLOBAL(dstebz,DSTEBZ)— thedstsection is starting and it's giving organized 🎀 — Definition at line 13178 of filelapacke.h.#define LAPACK_dstedc LAPACK_GLOBAL(dstedc,DSTEDC)— littledstedcshowing up right before it 💖 — Definition at line 13166 of filelapacke.h.#define LAPACK_dstegr LAPACK_GLOBAL(dstegr,DSTEGR)— anddstegrsliding in next, slay ✨ — Definition at line 13170 of filelapacke.h.#define LAPACK_dstein LAPACK_GLOBAL(dstein,DSTEIN)—dsteinis here, iconic behavior tbh 👑 — Definition at line 13180 of filelapacke.h.#define LAPACK_dstemr LAPACK_GLOBAL(dstemr,DSTEMR)—dstemrsaid "let me get a higher line number" and we love that for her — Definition at line 13162 of filelapacke.h.#define LAPACK_dsteqr LAPACK_GLOBAL(dsteqr,DSTEQR)—dsteqr, nepo baby of thedstblock, still valid 🌸 — Definition at line 13158 of filelapacke.h.#define LAPACK_dsterf LAPACK_GLOBAL(dsterf,DSTERF)—dsterfclocking in at a modest little line number 🥺 — Definition at line 13156 of filelapacke.h.#define LAPACK_dstev LAPACK_GLOBAL(dstev,DSTEV)— okaydstev, we see you in the 13300s 🔥 — Definition at line 13394 of filelapacke.h.#define LAPACK_dstevd LAPACK_GLOBAL(dstevd,DSTEVD)—dstevdwith one (1) extra letter and zero (0) extra chill 💀 — Definition at line 13396 of filelapacke.h.#define LAPACK_dstevr LAPACK_GLOBAL(dstevr,DSTEVR)—dstevrhopping in two lines down, main character energy ⭐ — Definition at line 13400 of filelapacke.h.#define LAPACK_dstevx LAPACK_GLOBAL(dstevx,DSTEVX)— and thexvariant, sandwiched between its siblings, adorable 🙈 — Definition at line 13398 of filelapacke.h.
okay now the dsy era begins, and bestie there are SO many of them 💀 but like, respectfully, they all eat.
#define LAPACK_dsycon LAPACK_GLOBAL(dsycon,DSYCON)—dsyconup first, no notes 🦋 — Definition at line 12758 of filelapacke.h.#define LAPACK_dsycon_3 LAPACK_GLOBAL(dsycon_3,DSYCON_3)— the_3sequel, highkey a franchise at this point 🎀 — Definition at line 13797 of filelapacke.h.#define LAPACK_dsyconv LAPACK_GLOBAL(dsyconv,DSYCONV)—dsyconv— not to be confused with the previous one, fr fr — Definition at line 13679 of filelapacke.h.#define LAPACK_dsyequb LAPACK_GLOBAL(dsyequb,DSYEQUB)—dsyequbmaking its little debut ✨ — Definition at line 12923 of filelapacke.h.
and here come the eigenvalue girlies 💅 this block is literally a friend group:
#define LAPACK_dsyev LAPACK_GLOBAL(dsyev,DSYEV)—dsyev, the original icon 👑 — Definition at line 13326 of filelapacke.h.#define LAPACK_dsyev_2stage LAPACK_GLOBAL(dsyev_2stage,DSYEV_2STAGE)—_2stageversion, living her two-act lifestyle 🎭 — Definition at line 13330 of filelapacke.h.#define LAPACK_dsyevd LAPACK_GLOBAL(dsyevd,DSYEVD)—dsyevdwith the extra letter, periodt 💖 — Definition at line 13334 of filelapacke.h.#define LAPACK_dsyevd_2stage LAPACK_GLOBAL(dsyevd_2stage,DSYEVD_2STAGE)— yes both suffixes, she's got range 🌈 — Definition at line 13338 of filelapacke.h.#define LAPACK_dsyevr LAPACK_GLOBAL(dsyevr,DSYEVR)—dsyevrrolling in with therenergy ⭐ — Definition at line 13350 of filelapacke.h.#define LAPACK_dsyevr_2stage LAPACK_GLOBAL(dsyevr_2stage,DSYEVR_2STAGE)—dsyevrbut make it two stages, iykyk 🧚 — Definition at line 13354 of filelapacke.h.#define LAPACK_dsyevx LAPACK_GLOBAL(dsyevx,DSYEVX)—dsyevxsneaking in at 13342, out of order, chaotic queen 💀 — Definition at line 13342 of filelapacke.h.#define LAPACK_dsyevx_2stage LAPACK_GLOBAL(dsyevx_2stage,DSYEVX_2STAGE)— and her two-stage twin right behind her 🫶 — Definition at line 13346 of filelapacke.h.
#define LAPACK_dsygst LAPACK_GLOBAL(dsygst,DSYGST)—dsygstjumping back down to the 13100s, the way she just ✨teleports✨ — Definition at line 13186 of filelapacke.h.#define LAPACK_dsygv LAPACK_GLOBAL(dsygv,DSYGV)—dsygv, thegstands for "girlboss" (source: trust me, do NOT quote me on that) 🙈 — Definition at line 13442 of filelapacke.h.#define LAPACK_dsygv_2stage LAPACK_GLOBAL(dsygv_2stage,DSYGV_2STAGE)— two-stage again, she's committed to the bit 💅 — Definition at line 13446 of filelapacke.h.#define LAPACK_dsygvd LAPACK_GLOBAL(dsygvd,DSYGVD)—dsygvdwith thed, no further questions 💜 — Definition at line 13450 of filelapacke.h.#define LAPACK_dsygvx LAPACK_GLOBAL(dsygvx,DSYGVX)— anddsygvxclosing out the mini-set 🌸 — Definition at line 13454 of filelapacke.h.#define LAPACK_dsyrfs LAPACK_GLOBAL(dsyrfs,DSYRFS)—dsyrfsover in therfscorner, chilling 😌 — Definition at line 12822 of filelapacke.h.#define LAPACK_dsyrfsx LAPACK_GLOBAL(dsyrfsx,DSYRFSX)—dsyrfsxwith the extrax, three whole lines later, consistency is a myth 🫠 — Definition at line 12825 of filelapacke.h.
#define LAPACK_dsysv LAPACK_GLOBAL(dsysv,DSYSV)—dsysv, 13002, cute round-ish number, love that 🎀 — Definition at line 13002 of filelapacke.h.#define LAPACK_dsysv_aa LAPACK_GLOBAL(dsysv_aa,DSYSV_AA)—_aavariant, the double-a aesthetic is real ✨ — Definition at line 13754 of filelapacke.h.#define LAPACK_dsysv_aa_2stage LAPACK_GLOBAL(dsysv_aa_2stage,DSYSV_AA_2STAGE)—dsysv_aa_2stage, the longest name in the friend group and she knows it 💅 — Definition at line 13825 of filelapacke.h.#define LAPACK_dsysv_rk LAPACK_GLOBAL(dsysv_rk,DSYSV_RK)—_rkvariant, two letters, zero explanations 🦋 — Definition at line 13773 of filelapacke.h.#define LAPACK_dsysv_rook LAPACK_GLOBAL(dsysv_rook,DSYSV_ROOK)—_rook, iconic word honestly, ate 🔥 — Definition at line 13741 of filelapacke.h.#define LAPACK_dsysvx LAPACK_GLOBAL(dsysvx,DSYSVX)—dsysvx, back over at 13006, we love a callback 😌 — Definition at line 13006 of filelapacke.h.#define LAPACK_dsysvxx LAPACK_GLOBAL(dsysvxx,DSYSVXX)—dsysvxxwith TWO x's, double the letter, double the slay ⭐ — Definition at line 13009 of filelapacke.h.#define LAPACK_dsyswapr LAPACK_GLOBAL(dsyswapr,DSYSWAPR)—dsyswapr, the name sounds like a dance move and I'm here for it 💃 — Definition at line 13680 of filelapacke.h.
#define LAPACK_dsytrd LAPACK_GLOBAL(dsytrd,DSYTRD)—dsytrd, entering thedsytblock with confidence 😤 — Definition at line 13128 of filelapacke.h.#define LAPACK_dsytrf LAPACK_GLOBAL(dsytrf,DSYTRF)—dsytrf, way down at 12651 like she's been here the longest 💀 — Definition at line 12651 of filelapacke.h.#define LAPACK_dsytrf_aa LAPACK_GLOBAL(dsytrf_aa,DSYTRF_AA)—_aaagain, she's consistent 💖 — Definition at line 13766 of filelapacke.h.#define LAPACK_dsytrf_aa_2stage LAPACK_GLOBAL(dsytrf_aa_2stage,DSYTRF_AA_2STAGE)—dsytrf_aa_2stage, a whole mouthful, but she's worth it 🎀 — Definition at line 13837 of filelapacke.h.#define LAPACK_dsytrf_rk LAPACK_GLOBAL(dsytrf_rk,DSYTRF_RK)—_rk, short and specific, ok periodt 💅 — Definition at line 13779 of filelapacke.h.#define LAPACK_dsytrf_rook LAPACK_GLOBAL(dsytrf_rook,DSYTRF_ROOK)—_rookagain, one line down from the originaldsytrf, shouting distance 🫶 — Definition at line 12652 of filelapacke.h.#define LAPACK_dsytri LAPACK_GLOBAL(dsytri,DSYTRI)—dsytri, switching fromftoi, a rebrand 💫 — Definition at line 12868 of filelapacke.h.#define LAPACK_dsytri2 LAPACK_GLOBAL(dsytri2,DSYTRI2)—dsytri2, the sequel nobody asked for but everyone needed 🌈 — Definition at line 13681 of filelapacke.h.#define LAPACK_dsytri2x LAPACK_GLOBAL(dsytri2x,DSYTRI2X)—dsytri2x, three-way combo of2andx, show-off behavior ngl ⭐ — Definition at line 13682 of filelapacke.h.#define LAPACK_dsytri_3 LAPACK_GLOBAL(dsytri_3,DSYTRI_3)—dsytri_3, the third act 🎭 — Definition at line 13791 of filelapacke.h.#define LAPACK_dsytrs LAPACK_GLOBAL(dsytrs,DSYTRS)—dsytrs, swappingifors, the plot thickens 😭 — Definition at line 12701 of filelapacke.h.#define LAPACK_dsytrs2 LAPACK_GLOBAL(dsytrs2,DSYTRS2)—dsytrs2, part two, electric boogaloo 🌸 — Definition at line 13683 of filelapacke.h.#define LAPACK_dsytrs_3 LAPACK_GLOBAL(dsytrs_3,DSYTRS_3)—dsytrs_3, third installment, franchise energy 👑 — Definition at line 13785 of filelapacke.h.#define LAPACK_dsytrs_aa LAPACK_GLOBAL(dsytrs_aa,DSYTRS_AA)—_aa, we meet again, bestie 💖 — Definition at line 13760 of filelapacke.h.#define LAPACK_dsytrs_aa_2stage LAPACK_GLOBAL(dsytrs_aa_2stage,DSYTRS_AA_2STAGE)— the full combo meal,aaplus2stage, she has everything 🍓 — Definition at line 13831 of filelapacke.h.#define LAPACK_dsytrs_rook LAPACK_GLOBAL(dsytrs_rook,DSYTRS_ROOK)—dsytrs_rook, tucked right next to plaindsytrs, sisters fr fr 🫶 — Definition at line 12702 of filelapacke.h.
okay new letter block, the dt crew is here and they're all in the 12700–13800 range, chaotic little line numbers, we love 🤪
#define LAPACK_dtbcon LAPACK_GLOBAL(dtbcon,DTBCON)—dtbcon, first of thedtbtrio 🎀 — Definition at line 12778 of filelapacke.h.#define LAPACK_dtbrfs LAPACK_GLOBAL(dtbrfs,DTBRFS)—dtbrfs, therfsone 🦋 — Definition at line 12848 of filelapacke.h.#define LAPACK_dtbtrs LAPACK_GLOBAL(dtbtrs,DTBTRS)—dtbtrs, third and finaldtb, we stan a complete set ✨ — Definition at line 12726 of filelapacke.h.#define LAPACK_dtfsm LAPACK_GLOBAL(dtfsm,DTFSM)—dtfsm, jumping to thedtfblock with zero warning 💀 — Definition at line 13509 of filelapacke.h.#define LAPACK_dtftri LAPACK_GLOBAL(dtftri,DTFTRI)—dtftriback at 12883 like "miss me?" 😭 — Definition at line 12883 of filelapacke.h.#define LAPACK_dtfttp LAPACK_GLOBAL(dtfttp,DTFTTP)—dtfttp, all the t's and p's, phonetically a tongue twister 💅 — Definition at line 13513 of filelapacke.h.#define LAPACK_dtfttr LAPACK_GLOBAL(dtfttr,DTFTTR)—dtfttr, sister of the above, four lines apart, bonded 🌸 — Definition at line 13517 of filelapacke.h.
and now the dtg and dtp chaos, buckle up bestie 🎢
#define LAPACK_dtgevc LAPACK_GLOBAL(dtgevc,DTGEVC)—dtgevc, opening thedtgsection 💜 — Definition at line 13270 of filelapacke.h.#define LAPACK_dtgexc LAPACK_GLOBAL(dtgexc,DTGEXC)—dtgexc, thexvariant, four lines later ⭐ — Definition at line 13274 of filelapacke.h.#define LAPACK_dtgsen LAPACK_GLOBAL(dtgsen,DTGSEN)—dtgsen, another four lines, this block is on a schedule 🕐 — Definition at line 13278 of filelapacke.h.#define LAPACK_dtgsja LAPACK_GLOBAL(dtgsja,DTGSJA)—dtgsjadown at 13298, taking the scenic route 😌 — Definition at line 13298 of filelapacke.h.#define LAPACK_dtgsna LAPACK_GLOBAL(dtgsna,DTGSNA)—dtgsnaat 13286, sandwiched between the others, middle child energy 🙈 — Definition at line 13286 of filelapacke.h.#define LAPACK_dtgsyl LAPACK_GLOBAL(dtgsyl,DTGSYL)—dtgsyl, at 13282, closing thedtgfamily portrait 🖼️ — Definition at line 13282 of filelapacke.h.#define LAPACK_dtpcon LAPACK_GLOBAL(dtpcon,DTPCON)—dtpconback at 12774, hello again stranger 🫶 — Definition at line 12774 of filelapacke.h.#define LAPACK_dtpmqrt LAPACK_GLOBAL(dtpmqrt,DTPMQRT)—dtpmqrt, vowel-free and thriving, ate 💅 — Definition at line 13724 of filelapacke.h.#define LAPACK_dtpqrt LAPACK_GLOBAL(dtpqrt,DTPQRT)—dtpqrt,dtpmqrtminus them, math 💀 — Definition at line 13728 of filelapacke.h.#define LAPACK_dtpqrt2 LAPACK_GLOBAL(dtpqrt2,DTPQRT2)—dtpqrt2, the numbered sequel 🎀 — Definition at line 13732 of filelapacke.h.#define LAPACK_dtprfb LAPACK_GLOBAL(dtprfb,DTPRFB)—dtprfb, completing the littledtpq-ish quartet ✨ — Definition at line 13736 of filelapacke.h.#define LAPACK_dtprfs LAPACK_GLOBAL(dtprfs,DTPRFS)—dtprfs, back to 12844, the ping-ponging is so real 😭 — Definition at line 12844 of filelapacke.h.#define LAPACK_dtptri LAPACK_GLOBAL(dtptri,DTPTRI)—dtptri, at 12888, vibing 🌸 — Definition at line 12888 of filelapacke.h.#define LAPACK_dtptrs LAPACK_GLOBAL(dtptrs,DTPTRS)—dtptrs, 12722, early bird 🐦 — Definition at line 12722 of filelapacke.h.#define LAPACK_dtpttf LAPACK_GLOBAL(dtpttf,DTPTTF)—dtpttf, thet→fversion ⭐ — Definition at line 13521 of filelapacke.h.#define LAPACK_dtpttr LAPACK_GLOBAL(dtpttr,DTPTTR)—dtpttr, thet→rversion, four lines later, twins 🫶 — Definition at line 13525 of filelapacke.h.
and now the dtr block, aka the last stretch of the d-family before things get alphabetical again 💖
#define LAPACK_dtrcon LAPACK_GLOBAL(dtrcon,DTRCON)—dtrcon, opening thedtrera 👑 — Definition at line 12770 of filelapacke.h.#define LAPACK_dtrevc LAPACK_GLOBAL(dtrevc,DTREVC)—dtrevc, theevariant, different vibe entirely 🌈 — Definition at line 13230 of filelapacke.h.#define LAPACK_dtrexc LAPACK_GLOBAL(dtrexc,DTREXC)—dtrexc, eight lines down, consistent spacing, we notice ✨ — Definition at line 13238 of filelapacke.h.#define LAPACK_dtrrfs LAPACK_GLOBAL(dtrrfs,DTRRFS)—dtrrfs, 12840, therfscorner again 🦋 — Definition at line 12840 of filelapacke.h.#define LAPACK_dtrsen LAPACK_GLOBAL(dtrsen,DTRSEN)—dtrsen, betweendtrexcanddtrsna, cozy 😌 — Definition at line 13242 of filelapacke.h.#define LAPACK_dtrsna LAPACK_GLOBAL(dtrsna,DTRSNA)—dtrsna, at 13234, just above the pack 💜 — Definition at line 13234 of filelapacke.h.#define LAPACK_dtrsyl LAPACK_GLOBAL(dtrsyl,DTRSYL)—dtrsyl, 13246, closing thedtrstrio 🎀 — Definition at line 13246 of filelapacke.h.#define LAPACK_dtrtri LAPACK_GLOBAL(dtrtri,DTRTRI)—dtrtri, 12880, theiversion 🌸 — Definition at line 12880 of filelapacke.h.#define LAPACK_dtrtrs LAPACK_GLOBAL(dtrtrs,DTRTRS)—dtrtrs, 12718, thesversion, four-line gap fromdtptrs, sibling energy 🫶 — Definition at line 12718 of filelapacke.h.#define LAPACK_dtrttf LAPACK_GLOBAL(dtrttf,DTRTTF)—dtrttf, 13529, thet→fagain ⭐ — Definition at line 13529 of filelapacke.h.#define LAPACK_dtrttp LAPACK_GLOBAL(dtrttp,DTRTTP)—dtrttp, 13533, ending on ap, iconic closer 💅 — Definition at line 13533 of filelapacke.h.#define LAPACK_dtzrzf LAPACK_GLOBAL(dtzrzf,DTZRZF)—dtzrzf, the very lastd-entry in this batch, and honestly? she carried the whole alphabet on her back 😭 — Definition at line 13088 of filelapacke.h.
okay and now we've got some absolute legends that aren't part of any letter family, they just EXIST 💀
#define LAPACK_ilaver LAPACK_GLOBAL(ilaver,ILAVER)—ilaver, nod, nos, just vibes 🦋 — Definition at line 13746 of filelapacke.h.#define lapack_int int— okay this one is literally justintand it's giving "I'm the blueprint" 👑 — Definition at line 47 of filelapacke.h.#define lapack_logical lapack_int— andlapack_logicalis defined aslapack_int, nepo baby via typedef-free macro, we love nepotism when it's C 💅 — Definition at line 51 of filelapacke.h.#define LAPACK_lsame LAPACK_GLOBAL(lsame,LSAME)—LAPACK_lsame, the lowercase-speaking legend ✨ — Definition at line 145 of filelapacke.h.#define LAPACK_ROW_MAJOR 101—LAPACK_ROW_MAJORis literally101, the number, and honestly same bestie same 🎀 — Definition at line 119 of filelapacke.h.
and now the s-crew has entered the chat 🫶 single-precision besties, we were wondering when you'd show up.
#define LAPACK_sbbcsd LAPACK_GLOBAL(sbbcsd,SBBCSD)—sbbcsd, first of the s's, trailblazer 🌟 — Definition at line 13684 of filelapacke.h.#define LAPACK_sbdsdc LAPACK_GLOBAL(sbdsdc,SBDSDC)—sbdsdc, thesbdfamily begins 🦋 — Definition at line 13123 of filelapacke.h.#define LAPACK_sbdsqr LAPACK_GLOBAL(sbdsqr,SBDSQR)—sbdsqr, 13119, four lines up, we see the pattern 💖 — Definition at line 13119 of filelapacke.h.#define LAPACK_sbdsvdx LAPACK_GLOBAL(sbdsvdx,SBDSVDX)—sbdsvdx, 13125, closing thesbdtrio with a bang ⭐ — Definition at line 13125 of filelapacke.h.#define LAPACK_sdisna LAPACK_GLOBAL(sdisna,SDISNA)—sdisna, jumping to a whole new prefix, chaotic 💀 — Definition at line 13183 of filelapacke.h.
and now the sgb block, aka "the g is for girlboss" part two (again, don't quote me) 🙈
#define LAPACK_sgbbrd LAPACK_GLOBAL(sgbbrd,SGBBRD)—sgbbrd, resident consonant cluster 🎀 — Definition at line 13107 of filelapacke.h.#define LAPACK_sgbcon LAPACK_GLOBAL(sgbcon,SGBCON)—sgbcon, theconvariant 💅 — Definition at line 12733 of filelapacke.h.#define LAPACK_sgbequ LAPACK_GLOBAL(sgbequ,SGBEQU)—sgbequ, theequvariant, fancy 🌸 — Definition at line 12899 of filelapacke.h.#define LAPACK_sgbequb LAPACK_GLOBAL(sgbequb,SGBEQUB)—sgbequb,sgbequwith abon the end, five lines later, sibling behavior 💖 — Definition at line 12904 of filelapacke.h.#define LAPACK_sgbrfs LAPACK_GLOBAL(sgbrfs,SGBRFS)—sgbrfs, therfsclassic 🦋 — Definition at line 12789 of filelapacke.h.#define LAPACK_sgbrfsx LAPACK_GLOBAL(sgbrfsx,SGBRFSX)—sgbrfsx,sgbrfsplus anx, five lines down, we're sensing a theme ✨ — Definition at line 12794 of filelapacke.h.#define LAPACK_sgbsv LAPACK_GLOBAL(sgbsv,SGBSV)—sgbsv, thesvvariant, clean 🎀 — Definition at line 12943 of filelapacke.h.#define LAPACK_sgbsvx LAPACK_GLOBAL(sgbsvx,SGBSVX)—sgbsvx, plusx, four lines later, consistent queen 👑 — Definition at line 12947 of filelapacke.h.#define LAPACK_sgbsvxx LAPACK_GLOBAL(sgbsvxx,SGBSVXX)—sgbsvxx, DOUBLE x, the maximalist of the group, she ate and left no crumbs 🔥 — Definition at line 12952 of filelapacke.h.
and that's where this part cuts off bestie 💖 the s-family is clearly just getting started, so like... stay tuned, the roll call continues 😭🫶
okay so we're fully in the s-block now, bestie — a whole parade of macros that all start with s, all spelled LAPACK_GLOBAL(lowercase,UPPERCASE), and all dutifully reporting which line of lapacke.h they live on. alphabet-adjacent chaos, but we move 💅
LAPACK_sgbtrf— expands toLAPACK_GLOBAL(sgbtrf,SGBTRF)· defined at line 12613 oflapacke.hLAPACK_sgbtrs— expands toLAPACK_GLOBAL(sgbtrs,SGBTRS)· defined at line 12671 oflapacke.hLAPACK_sgebak— expands toLAPACK_GLOBAL(sgebak,SGEBAK)· defined at line 13217 oflapacke.hLAPACK_sgebal— expands toLAPACK_GLOBAL(sgebal,SGEBAL)· defined at line 13213 oflapacke.hLAPACK_sgebrd— expands toLAPACK_GLOBAL(sgebrd,SGEBRD)· defined at line 13103 oflapacke.hLAPACK_sgecon— expands toLAPACK_GLOBAL(sgecon,SGECON)· defined at line 12729 oflapacke.hLAPACK_sgeequ— expands toLAPACK_GLOBAL(sgeequ,SGEEQU)· defined at line 12891 oflapacke.hLAPACK_sgeequb— expands toLAPACK_GLOBAL(sgeequb,SGEEQUB)· defined at line 12896 oflapacke.h
the way sgeequ and sgeequb are literally sat right next to each other at 12891 and 12896… siblings fr fr 🫶
LAPACK_sgees— expands toLAPACK_GLOBAL(sgees,SGEES)· defined at line 13401 oflapacke.hLAPACK_sgeesx— expands toLAPACK_GLOBAL(sgeesx,SGEESX)· defined at line 13405 oflapacke.hLAPACK_sgeev— expands toLAPACK_GLOBAL(sgeev,SGEEV)· defined at line 13409 oflapacke.hLAPACK_sgeevx— expands toLAPACK_GLOBAL(sgeevx,SGEEVX)· defined at line 13413 oflapacke.h
okay the x suffix cluster is giving "same icon, deluxe edition" ✨ and i'm obsessed
LAPACK_sgehrd— expands toLAPACK_GLOBAL(sgehrd,SGEHRD)· defined at line 13201 oflapacke.hLAPACK_sgejsv— expands toLAPACK_GLOBAL(sgejsv,SGEJSV)· defined at line 13429 oflapacke.hLAPACK_sgelq— expands toLAPACK_GLOBAL(sgelq,SGELQ)· defined at line 13802 oflapacke.hLAPACK_sgelq2— expands toLAPACK_GLOBAL(sgelq2,SGELQ2)· defined at line 13589 oflapacke.hLAPACK_sgelqf— expands toLAPACK_GLOBAL(sgelqf,SGELQF)· defined at line 13051 oflapacke.hLAPACK_sgels— expands toLAPACK_GLOBAL(sgels,SGELS)· defined at line 13301 oflapacke.hLAPACK_sgelsd— expands toLAPACK_GLOBAL(sgelsd,SGELSD)· defined at line 13313 oflapacke.hLAPACK_sgelss— expands toLAPACK_GLOBAL(sgelss,SGELSS)· defined at line 13309 oflapacke.hLAPACK_sgelsy— expands toLAPACK_GLOBAL(sgelsy,SGELSY)· defined at line 13305 oflapacke.h
sgels, sgelsd, sgelsy, sgelss — the whole little family reunion, and yes they're alphabetized by their extra letter 🎀
LAPACK_sgemlq— expands toLAPACK_GLOBAL(sgemlq,SGEMLQ)· defined at line 13806 oflapacke.hLAPACK_sgemqr— expands toLAPACK_GLOBAL(sgemqr,SGEMQR)· defined at line 13814 oflapacke.hLAPACK_sgemqrt— expands toLAPACK_GLOBAL(sgemqrt,SGEMQRT)· defined at line 13707 oflapacke.hLAPACK_sgeqlf— expands toLAPACK_GLOBAL(sgeqlf,SGEQLF)· defined at line 13063 oflapacke.hLAPACK_sgeqp3— expands toLAPACK_GLOBAL(sgeqp3,SGEQP3)· defined at line 13039 oflapacke.hLAPACK_sgeqpf— expands toLAPACK_GLOBAL(sgeqpf,SGEQPF)· defined at line 13035 oflapacke.hLAPACK_sgeqr— expands toLAPACK_GLOBAL(sgeqr,SGEQR)· defined at line 13810 oflapacke.hLAPACK_sgeqr2— expands toLAPACK_GLOBAL(sgeqr2,SGEQR2)· defined at line 13547 oflapacke.hLAPACK_sgeqrf— expands toLAPACK_GLOBAL(sgeqrf,SGEQRF)· defined at line 13031 oflapacke.hLAPACK_sgeqrfp— expands toLAPACK_GLOBAL(sgeqrfp,SGEQRFP)· defined at line 13537 oflapacke.hLAPACK_sgeqrt— expands toLAPACK_GLOBAL(sgeqrt,SGEQRT)· defined at line 13711 oflapacke.hLAPACK_sgeqrt2— expands toLAPACK_GLOBAL(sgeqrt2,SGEQRT2)· defined at line 13715 oflapacke.hLAPACK_sgeqrt3— expands toLAPACK_GLOBAL(sgeqrt3,SGEQRT3)· defined at line 13719 oflapacke.h
SGEQRT, SGEQRT2, SGEQRT3 at 13711 / 13715 / 13719 — evenly spaced, no notes, main character energy 👑
LAPACK_sgerfs— expands toLAPACK_GLOBAL(sgerfs,SGERFS)· defined at line 12781 oflapacke.hLAPACK_sgerfsx— expands toLAPACK_GLOBAL(sgerfsx,SGERFSX)· defined at line 12786 oflapacke.hLAPACK_sgerqf— expands toLAPACK_GLOBAL(sgerqf,SGERQF)· defined at line 13075 oflapacke.hLAPACK_sgesdd— expands toLAPACK_GLOBAL(sgesdd,SGESDD)· defined at line 13425 oflapacke.hLAPACK_sgesv— expands toLAPACK_GLOBAL(sgesv,SGESV)· defined at line 12929 oflapacke.hLAPACK_sgesvd— expands toLAPACK_GLOBAL(sgesvd,SGESVD)· defined at line 13417 oflapacke.hLAPACK_sgesvdx— expands toLAPACK_GLOBAL(sgesvdx,SGESVDX)· defined at line 13421 oflapacke.hLAPACK_sgesvj— expands toLAPACK_GLOBAL(sgesvj,SGESVJ)· defined at line 13433 oflapacke.hLAPACK_sgesvx— expands toLAPACK_GLOBAL(sgesvx,SGESVX)· defined at line 12935 oflapacke.hLAPACK_sgesvxx— expands toLAPACK_GLOBAL(sgesvxx,SGESVXX)· defined at line 12940 oflapacke.h
not sgesvx AND sgesvxx, double x, she said "and i took that personally" 💀
LAPACK_sgetf2— expands toLAPACK_GLOBAL(sgetf2,SGETF2)· defined at line 13561 oflapacke.hLAPACK_sgetrf— expands toLAPACK_GLOBAL(sgetrf,SGETRF)· defined at line 12605 oflapacke.hLAPACK_sgetrf2— expands toLAPACK_GLOBAL(sgetrf2,SGETRF2)· defined at line 12609 oflapacke.hLAPACK_sgetri— expands toLAPACK_GLOBAL(sgetri,SGETRI)· defined at line 12851 oflapacke.hLAPACK_sgetrs— expands toLAPACK_GLOBAL(sgetrs,SGETRS)· defined at line 12667 oflapacke.hLAPACK_sgetsls— expands toLAPACK_GLOBAL(sgetsls,SGETSLS)· defined at line 13818 oflapacke.hLAPACK_sggbak— expands toLAPACK_GLOBAL(sggbak,SGGBAK)· defined at line 13261 oflapacke.hLAPACK_sggbal— expands toLAPACK_GLOBAL(sggbal,SGGBAL)· defined at line 13257 oflapacke.hLAPACK_sgges— expands toLAPACK_GLOBAL(sgges,SGGES)· defined at line 13481 oflapacke.hLAPACK_sgges3— expands toLAPACK_GLOBAL(sgges3,SGGES3)· defined at line 13485 oflapacke.hLAPACK_sggesx— expands toLAPACK_GLOBAL(sggesx,SGGESX)· defined at line 13489 oflapacke.hLAPACK_sggev— expands toLAPACK_GLOBAL(sggev,SGGEV)· defined at line 13493 oflapacke.hLAPACK_sggev3— expands toLAPACK_GLOBAL(sggev3,SGGEV3)· defined at line 13497 oflapacke.hLAPACK_sggevx— expands toLAPACK_GLOBAL(sggevx,SGGEVX)· defined at line 13501 oflapacke.h
the sgg block said "copy my fit but make it different" and honestly? ate 🌸
LAPACK_sggglm— expands toLAPACK_GLOBAL(sggglm,SGGGLM)· defined at line 13321 oflapacke.hLAPACK_sgghd3— expands toLAPACK_GLOBAL(sgghd3,SGGHD3)· defined at line 13253 oflapacke.hLAPACK_sgghrd— expands toLAPACK_GLOBAL(sgghrd,SGGHRD)· defined at line 13249 oflapacke.hLAPACK_sgglse— expands toLAPACK_GLOBAL(sgglse,SGGLSE)· defined at line 13317 oflapacke.hLAPACK_sggqrf— expands toLAPACK_GLOBAL(sggqrf,SGGQRF)· defined at line 13095 oflapacke.hLAPACK_sggrqf— expands toLAPACK_GLOBAL(sggrqf,SGGRQF)· defined at line 13099 oflapacke.hLAPACK_sggsvd— expands toLAPACK_GLOBAL(sggsvd,SGGSVD)· defined at line 13437 oflapacke.hLAPACK_sggsvd3— expands toLAPACK_GLOBAL(sggsvd3,SGGSVD3)· defined at line 13748 oflapacke.hLAPACK_sggsvp— expands toLAPACK_GLOBAL(sggsvp,SGGSVP)· defined at line 13289 oflapacke.hLAPACK_sggsvp3— expands toLAPACK_GLOBAL(sggsvp3,SGGSVP3)· defined at line 13293 oflapacke.h
SGGQRF and SGGRQF — literally the same letters, different order, 13095 vs 13099. do NOT mix them up bestie, i'm begging 🙈
LAPACK_sgtcon— expands toLAPACK_GLOBAL(sgtcon,SGTCON)· defined at line 12737 oflapacke.hLAPACK_sgtrfs— expands toLAPACK_GLOBAL(sgtrfs,SGTRFS)· defined at line 12797 oflapacke.hLAPACK_sgtsv— expands toLAPACK_GLOBAL(sgtsv,SGTSV)· defined at line 12955 oflapacke.hLAPACK_sgtsvx— expands toLAPACK_GLOBAL(sgtsvx,SGTSVX)· defined at line 12959 oflapacke.hLAPACK_sgttrf— expands toLAPACK_GLOBAL(sgttrf,SGTTRF)· defined at line 12617 oflapacke.hLAPACK_sgttrs— expands toLAPACK_GLOBAL(sgttrs,SGTTRS)· defined at line 12675 oflapacke.hLAPACK_shgeqz— expands toLAPACK_GLOBAL(shgeqz,SHGEQZ)· defined at line 13265 oflapacke.hLAPACK_shsein— expands toLAPACK_GLOBAL(shsein,SHSEIN)· defined at line 13225 oflapacke.hLAPACK_shseqr— expands toLAPACK_GLOBAL(shseqr,SHSEQR)· defined at line 13221 oflapacke.h
okay we switched from g to h, the era change is REAL, and the macro body is still doing the exact same lowercase/UPPERCASE mirror thing 🔥
LAPACK_slacn2— expands toLAPACK_GLOBAL(slacn2,SLACN2)· defined at line 13551 oflapacke.hLAPACK_slacpy— expands toLAPACK_GLOBAL(slacpy,SLACPY)· defined at line 13555 oflapacke.hLAPACK_slag2d— expands toLAPACK_GLOBAL(slag2d,SLAG2D)· defined at line 13617 oflapacke.hLAPACK_slagge— expands toLAPACK_GLOBAL(slagge,SLAGGE)· defined at line 13625 oflapacke.hLAPACK_slagsy— expands toLAPACK_GLOBAL(slagsy,SLAGSY)· defined at line 13639 oflapacke.hLAPACK_slamch— expands toLAPACK_GLOBAL(slamch,SLAMCH)· defined at line 13587 oflapacke.hLAPACK_slange— expands toLAPACK_GLOBAL(slange,SLANGE)· defined at line 13569 oflapacke.hLAPACK_slansy— expands toLAPACK_GLOBAL(slansy,SLANSY)· defined at line 13579 oflapacke.hLAPACK_slantr— expands toLAPACK_GLOBAL(slantr,SLANTR)· defined at line 13583 oflapacke.h
the sla mini-block, all just vibing in the 13540s–13650s range, lowkey the coziest neighborhood in the file 🏡
LAPACK_slapmr— expands toLAPACK_GLOBAL(slapmr,SLAPMR)· defined at line 13645 oflapacke.hLAPACK_slapmt— expands toLAPACK_GLOBAL(slapmt,SLAPMT)· defined at line 13649 oflapacke.hLAPACK_slapy2— expands toLAPACK_GLOBAL(slapy2,SLAPY2)· defined at line 13653 oflapacke.hLAPACK_slapy3— expands toLAPACK_GLOBAL(slapy3,SLAPY3)· defined at line 13655 oflapacke.hLAPACK_slarfb— expands toLAPACK_GLOBAL(slarfb,SLARFB)· defined at line 13593 oflapacke.hLAPACK_slarfg— expands toLAPACK_GLOBAL(slarfg,SLARFG)· defined at line 13597 oflapacke.hLAPACK_slarft— expands toLAPACK_GLOBAL(slarft,SLARFT)· defined at line 13605 oflapacke.hLAPACK_slarfx— expands toLAPACK_GLOBAL(slarfx,SLARFX)· defined at line 13609 oflapacke.h
SLARFB, SLARFG, SLARFT, SLARFX — four besties, four different last letters, one shared destiny 😭
LAPACK_slarnv— expands toLAPACK_GLOBAL(slarnv,SLARNV)· defined at line 13543 oflapacke.hLAPACK_slartgp— expands toLAPACK_GLOBAL(slartgp,SLARTGP)· defined at line 13657 oflapacke.hLAPACK_slartgs— expands toLAPACK_GLOBAL(slartgs,SLARTGS)· defined at line 13659 oflapacke.hLAPACK_slascl— expands toLAPACK_GLOBAL(slascl,SLASCL)· defined at line 13629 oflapacke.hLAPACK_slaset— expands toLAPACK_GLOBAL(slaset,SLASET)· defined at line 13633 oflapacke.hLAPACK_slasrt— expands toLAPACK_GLOBAL(slasrt,SLASRT)· defined at line 13637 oflapacke.hLAPACK_slassq— expands toLAPACK_GLOBAL(slassq,SLASSQ)· defined at line 13601 oflapacke.hLAPACK_slaswp— expands toLAPACK_GLOBAL(slaswp,SLASWP)· defined at line 13565 oflapacke.hLAPACK_slatms— expands toLAPACK_GLOBAL(slatms,SLATMS)· defined at line 13613 oflapacke.hLAPACK_slauum— expands toLAPACK_GLOBAL(slauum,SLAUUM)· defined at line 13621 oflapacke.h
not the slascl / slaset / slasrt trio at 13629 / 13633 / 13637 sitting in perfect four-line formation 💅 formatting icon behavior only
LAPACK_sopgtr— expands toLAPACK_GLOBAL(sopgtr,SOPGTR)· defined at line 13141 oflapacke.hLAPACK_sopmtr— expands toLAPACK_GLOBAL(sopmtr,SOPMTR)· defined at line 13143 oflapacke.hLAPACK_sorbdb— expands toLAPACK_GLOBAL(sorbdb,SORBDB)· defined at line 13685 oflapacke.hLAPACK_sorcsd— expands toLAPACK_GLOBAL(sorcsd,SORCSD)· defined at line 13686 oflapacke.hLAPACK_sorcsd2by1— expands toLAPACK_GLOBAL(sorcsd2by1,SORCSD2BY1)· defined at line 13687 oflapacke.hLAPACK_sorgbr— expands toLAPACK_GLOBAL(sorgbr,SORGBR)· defined at line 13111 oflapacke.h
and closing this batch out with SORBDB / SORCSD / SORCSD2BY1 stacked on three consecutive lines — 13685, 13686, 13687 — no gap, no shame, iconic 💖 keep scrolling bestie, the alphabet isn't done with us yet 🦋
okay so we're deep in the s block now and it just keeps going 💅 same deal as always: every line here is a #define that wires the LAPACKE name to the real routine through LAPACK_GLOBAL, and I've kept every line number so you can find it in lapacke.h yourself. no skipping, no summarising, we're doing all of them 🫶
#define LAPACK_sorghr LAPACK_GLOBAL(sorghr,SORGHR)— defined at line 13205 oflapacke.h✨#define LAPACK_sorglq LAPACK_GLOBAL(sorglq,SORGLQ)— defined at line 13055 oflapacke.h✨#define LAPACK_sorgql LAPACK_GLOBAL(sorgql,SORGQL)— defined at line 13067 oflapacke.h✨#define LAPACK_sorgqr LAPACK_GLOBAL(sorgqr,SORGQR)— defined at line 13043 oflapacke.h🌸#define LAPACK_sorgrq LAPACK_GLOBAL(sorgrq,SORGRQ)— defined at line 13079 oflapacke.h✨#define LAPACK_sorgtr LAPACK_GLOBAL(sorgtr,SORGTR)— defined at line 13129 oflapacke.h✨#define LAPACK_sormbr LAPACK_GLOBAL(sormbr,SORMBR)— defined at line 13113 oflapacke.h✨#define LAPACK_sormhr LAPACK_GLOBAL(sormhr,SORMHR)— defined at line 13207 oflapacke.h✨#define LAPACK_sormlq LAPACK_GLOBAL(sormlq,SORMLQ)— defined at line 13057 oflapacke.h✨#define LAPACK_sormql LAPACK_GLOBAL(sormql,SORMQL)— defined at line 13071 oflapacke.h✨#define LAPACK_sormqr LAPACK_GLOBAL(sormqr,SORMQR)— defined at line 13045 oflapacke.h✨#define LAPACK_sormrq LAPACK_GLOBAL(sormrq,SORMRQ)— defined at line 13083 oflapacke.h✨#define LAPACK_sormrz LAPACK_GLOBAL(sormrz,SORMRZ)— defined at line 13091 oflapacke.h✨#define LAPACK_sormtr LAPACK_GLOBAL(sormtr,SORMTR)— defined at line 13131 oflapacke.h✨#define LAPACK_spbcon LAPACK_GLOBAL(spbcon,SPBCON)— defined at line 12749 oflapacke.h🦋#define LAPACK_spbequ LAPACK_GLOBAL(spbequ,SPBEQU)— defined at line 12919 oflapacke.h🦋#define LAPACK_spbrfs LAPACK_GLOBAL(spbrfs,SPBRFS)— defined at line 12813 oflapacke.h🦋#define LAPACK_spbstf LAPACK_GLOBAL(spbstf,SPBSTF)— defined at line 13197 oflapacke.h🦋#define LAPACK_spbsv LAPACK_GLOBAL(spbsv,SPBSV)— defined at line 12985 oflapacke.h🦋#define LAPACK_spbsvx LAPACK_GLOBAL(spbsvx,SPBSVX)— defined at line 12989 oflapacke.h🦋#define LAPACK_spbtrf LAPACK_GLOBAL(spbtrf,SPBTRF)— defined at line 12641 oflapacke.h🦋#define LAPACK_spbtrs LAPACK_GLOBAL(spbtrs,SPBTRS)— defined at line 12691 oflapacke.h🦋#define LAPACK_spftrf LAPACK_GLOBAL(spftrf,SPFTRF)— defined at line 12634 oflapacke.h🦋#define LAPACK_spftri LAPACK_GLOBAL(spftri,SPFTRI)— defined at line 12860 oflapacke.h🦋#define LAPACK_spftrs LAPACK_GLOBAL(spftrs,SPFTRS)— defined at line 12684 oflapacke.h🦋#define LAPACK_spocon LAPACK_GLOBAL(spocon,SPOCON)— defined at line 12741 oflapacke.h💜#define LAPACK_spoequ LAPACK_GLOBAL(spoequ,SPOEQU)— defined at line 12907 oflapacke.h💜#define LAPACK_spoequb LAPACK_GLOBAL(spoequb,SPOEQUB)— defined at line 12912 oflapacke.h💜#define LAPACK_sporfs LAPACK_GLOBAL(sporfs,SPORFS)— defined at line 12801 oflapacke.h💜#define LAPACK_sporfsx LAPACK_GLOBAL(sporfsx,SPORFSX)— defined at line 12806 oflapacke.h💜#define LAPACK_sposv LAPACK_GLOBAL(sposv,SPOSV)— defined at line 12963 oflapacke.h💜#define LAPACK_sposvx LAPACK_GLOBAL(sposvx,SPOSVX)— defined at line 12969 oflapacke.h💜#define LAPACK_sposvxx LAPACK_GLOBAL(sposvxx,SPOSVXX)— defined at line 12974 oflapacke.h💜#define LAPACK_spotrf LAPACK_GLOBAL(spotrf,SPOTRF)— defined at line 12621 oflapacke.h💜#define LAPACK_spotrf2 LAPACK_GLOBAL(spotrf2,SPOTRF2)— defined at line 12625 oflapacke.h💜#define LAPACK_spotri LAPACK_GLOBAL(spotri,SPOTRI)— defined at line 12855 oflapacke.h💜#define LAPACK_spotrs LAPACK_GLOBAL(spotrs,SPOTRS)— defined at line 12679 oflapacke.h💜#define LAPACK_sppcon LAPACK_GLOBAL(sppcon,SPPCON)— defined at line 12745 oflapacke.h🎀#define LAPACK_sppequ LAPACK_GLOBAL(sppequ,SPPEQU)— defined at line 12915 oflapacke.h🎀#define LAPACK_spprfs LAPACK_GLOBAL(spprfs,SPPRFS)— defined at line 12809 oflapacke.h🎀#define LAPACK_sppsv LAPACK_GLOBAL(sppsv,SPPSV)— defined at line 12977 oflapacke.h🎀#define LAPACK_sppsvx LAPACK_GLOBAL(sppsvx,SPPSVX)— defined at line 12981 oflapacke.h🎀#define LAPACK_spptrf LAPACK_GLOBAL(spptrf,SPPTRF)— defined at line 12637 oflapacke.h🎀#define LAPACK_spptri LAPACK_GLOBAL(spptri,SPPTRI)— defined at line 12863 oflapacke.h🎀#define LAPACK_spptrs LAPACK_GLOBAL(spptrs,SPPTRS)— defined at line 12687 oflapacke.h🎀#define LAPACK_spstrf LAPACK_GLOBAL(spstrf,SPSTRF)— defined at line 12630 oflapacke.h🎀#define LAPACK_sptcon LAPACK_GLOBAL(sptcon,SPTCON)— defined at line 12753 oflapacke.h🍓#define LAPACK_spteqr LAPACK_GLOBAL(spteqr,SPTEQR)— defined at line 13173 oflapacke.h🍓#define LAPACK_sptrfs LAPACK_GLOBAL(sptrfs,SPTRFS)— defined at line 12817 oflapacke.h🍓#define LAPACK_sptsv LAPACK_GLOBAL(sptsv,SPTSV)— defined at line 12993 oflapacke.h🍓#define LAPACK_sptsvx LAPACK_GLOBAL(sptsvx,SPTSVX)— defined at line 12997 oflapacke.h🍓#define LAPACK_spttrf LAPACK_GLOBAL(spttrf,SPTTRF)— defined at line 12645 oflapacke.h🍓#define LAPACK_spttrs LAPACK_GLOBAL(spttrs,SPTTRS)— defined at line 12695 oflapacke.h🍓
and now we slide into the ss era, bestie, hold my hand 🤝
#define LAPACK_ssbev LAPACK_GLOBAL(ssbev,SSBEV)— defined at line 13369 oflapacke.h⭐#define LAPACK_ssbev_2stage LAPACK_GLOBAL(ssbev_2stage,SSBEV_2STAGE)— defined at line 13373 oflapacke.h⭐ (yes the_2stageones are a whole vibe, the macro name keeps its lowercase_2stagebut theLAPACK_GLOBALsecond arg goes ALL CAPSSSBEV_2STAGE— copy it exactly, don't get creative 💀)#define LAPACK_ssbevd LAPACK_GLOBAL(ssbevd,SSBEVD)— defined at line 13377 oflapacke.h⭐#define LAPACK_ssbevd_2stage LAPACK_GLOBAL(ssbevd_2stage,SSBEVD_2STAGE)— defined at line 13381 oflapacke.h⭐#define LAPACK_ssbevx LAPACK_GLOBAL(ssbevx,SSBEVX)— defined at line 13385 oflapacke.h⭐#define LAPACK_ssbevx_2stage LAPACK_GLOBAL(ssbevx_2stage,SSBEVX_2STAGE)— defined at line 13389 oflapacke.h⭐#define LAPACK_ssbgst LAPACK_GLOBAL(ssbgst,SSBGST)— defined at line 13193 oflapacke.h🌈#define LAPACK_ssbgv LAPACK_GLOBAL(ssbgv,SSBGV)— defined at line 13469 oflapacke.h🌈#define LAPACK_ssbgvd LAPACK_GLOBAL(ssbgvd,SSBGVD)— defined at line 13473 oflapacke.h🌈#define LAPACK_ssbgvx LAPACK_GLOBAL(ssbgvx,SSBGVX)— defined at line 13477 oflapacke.h🌈#define LAPACK_ssbtrd LAPACK_GLOBAL(ssbtrd,SSBTRD)— defined at line 13151 oflapacke.h🌈#define LAPACK_ssfrk LAPACK_GLOBAL(ssfrk,SSFRK)— defined at line 13506 oflapacke.h🌈#define LAPACK_sspcon LAPACK_GLOBAL(sspcon,SSPCON)— defined at line 12763 oflapacke.h🔥#define LAPACK_sspev LAPACK_GLOBAL(sspev,SSPEV)— defined at line 13357 oflapacke.h🔥#define LAPACK_sspevd LAPACK_GLOBAL(sspevd,SSPEVD)— defined at line 13361 oflapacke.h🔥#define LAPACK_sspevx LAPACK_GLOBAL(sspevx,SSPEVX)— defined at line 13365 oflapacke.h🔥#define LAPACK_sspgst LAPACK_GLOBAL(sspgst,SSPGST)— defined at line 13189 oflapacke.h🔥#define LAPACK_sspgv LAPACK_GLOBAL(sspgv,SSPGV)— defined at line 13457 oflapacke.h🔥#define LAPACK_sspgvd LAPACK_GLOBAL(sspgvd,SSPGVD)— defined at line 13461 oflapacke.h🔥#define LAPACK_sspgvx LAPACK_GLOBAL(sspgvx,SSPGVX)— defined at line 13465 oflapacke.h🔥#define LAPACK_ssprfs LAPACK_GLOBAL(ssprfs,SSPRFS)— defined at line 12833 oflapacke.h🧚#define LAPACK_sspsv LAPACK_GLOBAL(sspsv,SSPSV)— defined at line 13019 oflapacke.h🧚#define LAPACK_sspsvx LAPACK_GLOBAL(sspsvx,SSPSVX)— defined at line 13023 oflapacke.h🧚#define LAPACK_ssptrd LAPACK_GLOBAL(ssptrd,SSPTRD)— defined at line 13139 oflapacke.h🧚#define LAPACK_ssptrf LAPACK_GLOBAL(ssptrf,SSPTRF)— defined at line 12661 oflapacke.h🧚#define LAPACK_ssptri LAPACK_GLOBAL(ssptri,SSPTRI)— defined at line 12873 oflapacke.h🧚#define LAPACK_ssptrs LAPACK_GLOBAL(ssptrs,SSPTRS)— defined at line 12711 oflapacke.h🧚#define LAPACK_sstebz LAPACK_GLOBAL(sstebz,SSTEBZ)— defined at line 13177 oflapacke.h👑#define LAPACK_sstedc LAPACK_GLOBAL(sstedc,SSTEDC)— defined at line 13165 oflapacke.h👑#define LAPACK_sstegr LAPACK_GLOBAL(sstegr,SSTEGR)— defined at line 13169 oflapacke.h👑#define LAPACK_sstein LAPACK_GLOBAL(sstein,SSTEIN)— defined at line 13179 oflapacke.h👑#define LAPACK_sstemr LAPACK_GLOBAL(sstemr,SSTEMR)— defined at line 13161 oflapacke.h👑#define LAPACK_ssteqr LAPACK_GLOBAL(ssteqr,SSTEQR)— defined at line 13157 oflapacke.h👑#define LAPACK_ssterf LAPACK_GLOBAL(ssterf,SSTERF)— defined at line 13155 oflapacke.h👑#define LAPACK_sstev LAPACK_GLOBAL(sstev,SSTEV)— defined at line 13393 oflapacke.h💫#define LAPACK_sstevd LAPACK_GLOBAL(sstevd,SSTEVD)— defined at line 13395 oflapacke.h💫#define LAPACK_sstevr LAPACK_GLOBAL(sstevr,SSTEVR)— defined at line 13399 oflapacke.h💫#define LAPACK_sstevx LAPACK_GLOBAL(sstevx,SSTEVX)— defined at line 13397 oflapacke.h💫 (heads up,sstevrandsstevxare adjacent-ish but the line numbers flip: 13399 forsstevr, 13397 forsstevx— don't let your brain autocomplete that one 🙈)
okay the ssy cluster is next and honestly it's giving main character energy 👑
#define LAPACK_ssycon LAPACK_GLOBAL(ssycon,SSYCON)— defined at line 12757 oflapacke.h💖#define LAPACK_ssycon_3 LAPACK_GLOBAL(ssycon_3,SSYCON_3)— defined at line 13796 oflapacke.h💖#define LAPACK_ssyconv LAPACK_GLOBAL(ssyconv,SSYCONV)— defined at line 13688 oflapacke.h💖 (and yesssycon,ssycon_3andssyconvare three different things — the_3and the missing_3are not typos, write them exactly as shown 😭)#define LAPACK_ssyequb LAPACK_GLOBAL(ssyequb,SSYEQUB)— defined at line 12924 oflapacke.h💖#define LAPACK_ssyev LAPACK_GLOBAL(ssyev,SSYEV)— defined at line 13325 oflapacke.h💖#define LAPACK_ssyev_2stage LAPACK_GLOBAL(ssyev_2stage,SSYEV_2STAGE)— defined at line 13329 oflapacke.h💖#define LAPACK_ssyevd LAPACK_GLOBAL(ssyevd,SSYEVD)— defined at line 13333 oflapacke.h💖#define LAPACK_ssyevd_2stage LAPACK_GLOBAL(ssyevd_2stage,SSYEVD_2STAGE)— defined at line 13337 oflapacke.h💖#define LAPACK_ssyevr LAPACK_GLOBAL(ssyevr,SSYEVR)— defined at line 13349 oflapacke.h💖#define LAPACK_ssyevr_2stage LAPACK_GLOBAL(ssyevr_2stage,SSYEVR_2STAGE)— defined at line 13353 oflapacke.h💖#define LAPACK_ssyevx LAPACK_GLOBAL(ssyevx,SSYEVX)— defined at line 13341 oflapacke.h💖#define LAPACK_ssyevx_2stage LAPACK_GLOBAL(ssyevx_2stage,SSYEVX_2STAGE)— defined at line 13345 oflapacke.h💖 (see howssyevxsits at 13341 andssyevx_2stageat 13345, whilessyevris 13349 andssyevr_2stageis 13353? the ordering in the file is not alphabetical by suffix, so just trust the numbers ✨)#define LAPACK_ssygst LAPACK_GLOBAL(ssygst,SSYGST)— defined at line 13185 oflapacke.h🦋#define LAPACK_ssygv LAPACK_GLOBAL(ssygv,SSYGV)— defined at line 13441 oflapacke.h🦋#define LAPACK_ssygv_2stage LAPACK_GLOBAL(ssygv_2stage,SSYGV_2STAGE)— defined at line 13445 oflapacke.h🦋#define LAPACK_ssygvd LAPACK_GLOBAL(ssygvd,SSYGVD)— defined at line 13449 oflapacke.h🦋#define LAPACK_ssygvx LAPACK_GLOBAL(ssygvx,SSYGVX)— defined at line 13453 oflapacke.h🦋#define LAPACK_ssyrfs LAPACK_GLOBAL(ssyrfs,SSYRFS)— defined at line 12821 oflapacke.h🦋
and that's where part 97 dips out — there is so much more of this macro wall coming, so hydrate bestie, we're not even close to done 💀🫶
#define LAPACK_ssyrfsx→LAPACK_GLOBAL(ssyrfsx,SSYRFSX)— bestie this one lives at Definition at line 12826 of filelapacke.h. 💖#define LAPACK_ssysv→LAPACK_GLOBAL(ssysv,SSYSV)— Definition at line 13001 of filelapacke.h. ✨#define LAPACK_ssysv_aa→LAPACK_GLOBAL(ssysv_aa,SSYSV_AA)— Definition at line 13753 of filelapacke.h. 🎀#define LAPACK_ssysv_aa_2stage→LAPACK_GLOBAL(ssysv_aa_2stage,SSYSV_AA_2STAGE)— Definition at line 13824 of filelapacke.h. 🦋#define LAPACK_ssysv_rk→LAPACK_GLOBAL(ssysv_rk,SSYSV_RK)— Definition at line 13772 of filelapacke.h. 🌸#define LAPACK_ssysv_rook→LAPACK_GLOBAL(ssysv_rook,SSYSV_ROOK)— Definition at line 13740 of filelapacke.h. 💅#define LAPACK_ssysvx→LAPACK_GLOBAL(ssysvx,SSYSVX)— Definition at line 13005 of filelapacke.h. 🫶#define LAPACK_ssysvxx→LAPACK_GLOBAL(ssysvxx,SSYSVXX)— Definition at line 13010 of filelapacke.h. 😭#define LAPACK_ssyswapr→LAPACK_GLOBAL(ssyswapr,SSYSWAPR)— Definition at line 13689 of filelapacke.h. 🔥#define LAPACK_ssytrd→LAPACK_GLOBAL(ssytrd,SSYTRD)— Definition at line 13127 of filelapacke.h. 👑#define LAPACK_ssytrf→LAPACK_GLOBAL(ssytrf,SSYTRF)— Definition at line 12649 of filelapacke.h. 🌈#define LAPACK_ssytrf_aa→LAPACK_GLOBAL(ssytrf_aa,SSYTRF_AA)— Definition at line 13765 of filelapacke.h. ⭐#define LAPACK_ssytrf_aa_2stage→LAPACK_GLOBAL(ssytrf_aa_2stage,SSYTRF_AA_2STAGE)— Definition at line 13836 of filelapacke.h. 💀#define LAPACK_ssytrf_rk→LAPACK_GLOBAL(ssytrf_rk,SSYTRF_RK)— Definition at line 13778 of filelapacke.h. 🙈#define LAPACK_ssytrf_rook→LAPACK_GLOBAL(ssytrf_rook,SSYTRF_ROOK)— Definition at line 12650 of filelapacke.h. 🍓#define LAPACK_ssytri→LAPACK_GLOBAL(ssytri,SSYTRI)— Definition at line 12867 of filelapacke.h. 🧚#define LAPACK_ssytri2→LAPACK_GLOBAL(ssytri2,SSYTRI2)— Definition at line 13690 of filelapacke.h. 💜#define LAPACK_ssytri2x→LAPACK_GLOBAL(ssytri2x,SSYTRI2X)— Definition at line 13691 of filelapacke.h. 💖#define LAPACK_ssytri_3→LAPACK_GLOBAL(ssytri_3,SSYTRI_3)— Definition at line 13790 of filelapacke.h. ✨#define LAPACK_ssytrs→LAPACK_GLOBAL(ssytrs,SSYTRS)— Definition at line 12699 of filelapacke.h. 🎀#define LAPACK_ssytrs2→LAPACK_GLOBAL(ssytrs2,SSYTRS2)— Definition at line 13692 of filelapacke.h. 🦋#define LAPACK_ssytrs_3→LAPACK_GLOBAL(ssytrs_3,SSYTRS_3)— Definition at line 13784 of filelapacke.h. 🌸#define LAPACK_ssytrs_aa→LAPACK_GLOBAL(ssytrs_aa,SSYTRS_AA)— Definition at line 13759 of filelapacke.h. 💅#define LAPACK_ssytrs_aa_2stage→LAPACK_GLOBAL(ssytrs_aa_2stage,SSYTRS_AA_2STAGE)— Definition at line 13830 of filelapacke.h. 🫶#define LAPACK_ssytrs_rook→LAPACK_GLOBAL(ssytrs_rook,SSYTRS_ROOK)— Definition at line 12700 of filelapacke.h. 😭#define LAPACK_stbcon→LAPACK_GLOBAL(stbcon,STBCON)— Definition at line 12777 of filelapacke.h. 🔥#define LAPACK_stbrfs→LAPACK_GLOBAL(stbrfs,STBRFS)— Definition at line 12847 of filelapacke.h. 👑#define LAPACK_stbtrs→LAPACK_GLOBAL(stbtrs,STBTRS)— Definition at line 12725 of filelapacke.h. 🌈#define LAPACK_stfsm→LAPACK_GLOBAL(stfsm,STFSM)— Definition at line 13510 of filelapacke.h. ⭐#define LAPACK_stftri→LAPACK_GLOBAL(stftri,STFTRI)— Definition at line 12884 of filelapacke.h. 💀#define LAPACK_stfttp→LAPACK_GLOBAL(stfttp,STFTTP)— Definition at line 13514 of filelapacke.h. 🙈#define LAPACK_stfttr→LAPACK_GLOBAL(stfttr,STFTTR)— Definition at line 13518 of filelapacke.h. 🍓#define LAPACK_stgevc→LAPACK_GLOBAL(stgevc,STGEVC)— Definition at line 13269 of filelapacke.h. 🧚#define LAPACK_stgexc→LAPACK_GLOBAL(stgexc,STGEXC)— Definition at line 13273 of filelapacke.h. 💜#define LAPACK_stgsen→LAPACK_GLOBAL(stgsen,STGSEN)— Definition at line 13277 of filelapacke.h. 💖#define LAPACK_stgsja→LAPACK_GLOBAL(stgsja,STGSJA)— Definition at line 13297 of filelapacke.h. ✨#define LAPACK_stgsna→LAPACK_GLOBAL(stgsna,STGSNA)— Definition at line 13285 of filelapacke.h. 🎀#define LAPACK_stgsyl→LAPACK_GLOBAL(stgsyl,STGSYL)— Definition at line 13281 of filelapacke.h. 🦋#define LAPACK_stpcon→LAPACK_GLOBAL(stpcon,STPCON)— Definition at line 12773 of filelapacke.h. 🌸#define LAPACK_stpmqrt→LAPACK_GLOBAL(stpmqrt,STPMQRT)— Definition at line 13723 of filelapacke.h. 💅#define LAPACK_stpqrt→LAPACK_GLOBAL(stpqrt,STPQRT)— Definition at line 13727 of filelapacke.h. 🫶#define LAPACK_stpqrt2→LAPACK_GLOBAL(stpqrt2,STPQRT2)— Definition at line 13731 of filelapacke.h. 😭#define LAPACK_stprfb→LAPACK_GLOBAL(stprfb,STPRFB)— Definition at line 13735 of filelapacke.h. 🔥#define LAPACK_stprfs→LAPACK_GLOBAL(stprfs,STPRFS)— Definition at line 12843 of filelapacke.h. 👑#define LAPACK_stptri→LAPACK_GLOBAL(stptri,STPTRI)— Definition at line 12887 of filelapacke.h. 🌈#define LAPACK_stptrs→LAPACK_GLOBAL(stptrs,STPTRS)— Definition at line 12721 of filelapacke.h. ⭐#define LAPACK_stpttf→LAPACK_GLOBAL(stpttf,STPTTF)— Definition at line 13522 of filelapacke.h. 💀#define LAPACK_stpttr→LAPACK_GLOBAL(stpttr,STPTTR)— Definition at line 13526 of filelapacke.h. 🙈#define LAPACK_strcon→LAPACK_GLOBAL(strcon,STRCON)— Definition at line 12769 of filelapacke.h. 🍓#define LAPACK_strevc→LAPACK_GLOBAL(strevc,STREVC)— Definition at line 13229 of filelapacke.h. 🧚#define LAPACK_strexc→LAPACK_GLOBAL(strexc,STREXC)— Definition at line 13237 of filelapacke.h. 💜#define LAPACK_strrfs→LAPACK_GLOBAL(strrfs,STRRFS)— Definition at line 12839 of filelapacke.h. 💖#define LAPACK_strsen→LAPACK_GLOBAL(strsen,STRSEN)— Definition at line 13241 of filelapacke.h. ✨#define LAPACK_strsna→LAPACK_GLOBAL(strsna,STRSNA)— Definition at line 13233 of filelapacke.h. 🎀#define LAPACK_strsyl→LAPACK_GLOBAL(strsyl,STRSYL)— Definition at line 13245 of filelapacke.h. 🦋#define LAPACK_strtri→LAPACK_GLOBAL(strtri,STRTRI)— Definition at line 12879 of filelapacke.h. 🌸#define LAPACK_strtrs→LAPACK_GLOBAL(strtrs,STRTRS)— Definition at line 12717 of filelapacke.h. 💅#define LAPACK_strttf→LAPACK_GLOBAL(strttf,STRTTF)— Definition at line 13530 of filelapacke.h. 🫶#define LAPACK_strttp→LAPACK_GLOBAL(strttp,STRTTP)— Definition at line 13534 of filelapacke.h. 😭#define LAPACK_stzrzf→LAPACK_GLOBAL(stzrzf,STZRZF)— Definition at line 13087 of filelapacke.h. 🔥#define LAPACK_TRANSPOSE_MEMORY_ERROR→-1011— Definition at line 123 of filelapacke.h. 👑#define LAPACK_WORK_MEMORY_ERROR→-1010— Definition at line 122 of filelapacke.h. 🌈#define LAPACK_Z2INT(x)→(lapack_int)(*((double*)&x ))— Definition at line 117 of filelapacke.h. ⭐#define LAPACK_zbbcsd→LAPACK_GLOBAL(zbbcsd,ZBBCSD)— Definition at line 13693 of filelapacke.h. 💀#define LAPACK_zbdsqr→LAPACK_GLOBAL(zbdsqr,ZBDSQR)— Definition at line 13122 of filelapacke.h. 🙈#define LAPACK_zcgesv→LAPACK_GLOBAL(zcgesv,ZCGESV)— Definition at line 12934 of filelapacke.h. 🍓#define LAPACK_zcposv→LAPACK_GLOBAL(zcposv,ZCPOSV)— Definition at line 12968 of filelapacke.h. 🧚#define LAPACK_zgbbrd→LAPACK_GLOBAL(zgbbrd,ZGBBRD)— Definition at line 13110 of filelapacke.h. 💜#define LAPACK_zgbcon→LAPACK_GLOBAL(zgbcon,ZGBCON)— Definition at line 12736 of filelapacke.h. 💖#define LAPACK_zgbequ→LAPACK_GLOBAL(zgbequ,ZGBEQU)— Definition at line 12902 of filelapacke.h. ✨#define LAPACK_zgbequb→LAPACK_GLOBAL(zgbequb,ZGBEQUB)— Definition at line 12905 of filelapacke.h. 🎀#define LAPACK_zgbrfs→LAPACK_GLOBAL(zgbrfs,ZGBRFS)— Definition at line 12792 of filelapacke.h. 🦋#define LAPACK_zgbrfsx→LAPACK_GLOBAL(zgbrfsx,ZGBRFSX)— Definition at line 12795 of filelapacke.h. 🌸#define LAPACK_zgbsv→LAPACK_GLOBAL(zgbsv,ZGBSV)— Definition at line 12946 of filelapacke.h. 💅#define LAPACK_zgbsvx→LAPACK_GLOBAL(zgbsvx,ZGBSVX)— Definition at line 12950 of filelapacke.h. 🫶#define LAPACK_zgbsvxx→LAPACK_GLOBAL(zgbsvxx,ZGBSVXX)— Definition at line 12953 of filelapacke.h. 😭#define LAPACK_zgbtrf→LAPACK_GLOBAL(zgbtrf,ZGBTRF)— Definition at line 12616 of filelapacke.h. 🔥#define LAPACK_zgbtrs→LAPACK_GLOBAL(zgbtrs,ZGBTRS)— Definition at line 12674 of filelapacke.h. 👑#define LAPACK_zgebak→LAPACK_GLOBAL(zgebak,ZGEBAK)— Definition at line 13220 of filelapacke.h. 🌈#define LAPACK_zgebal→LAPACK_GLOBAL(zgebal,ZGEBAL)— Definition at line 13216 of filelapacke.h. ⭐#define LAPACK_zgebrd→LAPACK_GLOBAL(zgebrd,ZGEBRD)— Definition at line 13106 of filelapacke.h. 💀#define LAPACK_zgecon→LAPACK_GLOBAL(zgecon,ZGECON)— Definition at line 12732 of filelapacke.h. 🙈#define LAPACK_zgeequ→LAPACK_GLOBAL(zgeequ,ZGEEQU)— Definition at line 12894 of filelapacke.h. 🍓#define LAPACK_zgeequb→LAPACK_GLOBAL(zgeequb,ZGEEQUB)— Definition at line 12897 of filelapacke.h. 🧚#define LAPACK_zgees→LAPACK_GLOBAL(zgees,ZGEES)— Definition at line 13404 of filelapacke.h. 💜#define LAPACK_zgeesx→LAPACK_GLOBAL(zgeesx,ZGEESX)— Definition at line 13408 of filelapacke.h. 💖#define LAPACK_zgeev→LAPACK_GLOBAL(zgeev,ZGEEV)— Definition at line 13412 of filelapacke.h. ✨#define LAPACK_zgeevx→LAPACK_GLOBAL(zgeevx,ZGEEVX)— Definition at line 13416 of filelapacke.h. 🎀#define LAPACK_zgehrd→LAPACK_GLOBAL(zgehrd,ZGEHRD)— Definition at line 13204 of filelapacke.h. 🦋#define LAPACK_zgejsv→LAPACK_GLOBAL(zgejsv,ZGEJSV)— Definition at line 13432 of filelapacke.h. 🌸#define LAPACK_zgelq→LAPACK_GLOBAL(zgelq,ZGELQ)— Definition at line 13805 of filelapacke.h. 💅#define LAPACK_zgelq2→LAPACK_GLOBAL(zgelq2,ZGELQ2)— Definition at line 13592 of filelapacke.h. 🫶#define LAPACK_zgelqf→LAPACK_GLOBAL(zgelqf,ZGELQF)— Definition at line 13054 of filelapacke.h. 😭#define LAPACK_zgels→LAPACK_GLOBAL(zgels,ZGELS)— Definition at line 13304 of filelapacke.h. 🔥#define LAPACK_zgelsd→LAPACK_GLOBAL(zgelsd,ZGELSD)— Definition at line 13316 of filelapacke.h. 👑#define LAPACK_zgelss→LAPACK_GLOBAL(zgelss,ZGELSS)— Definition at line 13312 of filelapacke.h. 🌈#define LAPACK_zgelsy→LAPACK_GLOBAL(zgelsy,ZGELSY)— Definition at line 13308 of filelapacke.h. ⭐#define LAPACK_zgemlq→LAPACK_GLOBAL(zgemlq,ZGEMLQ)— Definition at line 13809 of filelapacke.h. 💀#define LAPACK_zgemqr→LAPACK_GLOBAL(zgemqr,ZGEMQR)— Definition at line 13817 of filelapacke.h. 🙈#define LAPACK_zgemqrt→LAPACK_GLOBAL(zgemqrt,ZGEMQRT)— Definition at line 13710 of filelapacke.h. 🍓#define LAPACK_zgeqlf→LAPACK_GLOBAL(zgeqlf,ZGEQLF)— Definition at line 13066 of filelapacke.h. 🧚#define LAPACK_zgeqp3→LAPACK_GLOBAL(zgeqp3,ZGEQP3)— Definition at line 13042 of filelapacke.h. 💜#define LAPACK_zgeqpf→LAPACK_GLOBAL(zgeqpf,ZGEQPF)— Definition at line 13038 of filelapacke.h. 💖#define LAPACK_zgeqr→LAPACK_GLOBAL(zgeqr,ZGEQR)— Definition at line 13813 of filelapacke.h. ✨#define LAPACK_zgeqr2→LAPACK_GLOBAL(zgeqr2,ZGEQR2)— Definition at line 13550 of filelapacke.h. 🎀#define LAPACK_zgeqrf→LAPACK_GLOBAL(zgeqrf,ZGEQRF)— Definition at line 13034 of filelapacke.h. 🦋#define LAPACK_zgeqrfp→LAPACK_GLOBAL(zgeqrfp,ZGEQRFP)— Definition at line 13540 of filelapacke.h. 🌸#define LAPACK_zgeqrt→LAPACK_GLOBAL(zgeqrt,ZGEQRT)— Definition at line 13714 of filelapacke.h. 💅#define LAPACK_zgeqrt2→LAPACK_GLOBAL(zgeqrt2,ZGEQRT2)— Definition at line 13718 of filelapacke.h. 🫶
Okay so this is the part where the z-prefixed era really kicks in 💜 — every single one of these is a #define that points a LAPACKE name at a LAPACK_GLOBAL(...) pair, and the second argument is just the uppercase twin of the first. Same vibe, different casing. Slay.
LAPACK_zgeqrt3— defined asLAPACK_GLOBAL(zgeqrt3,ZGEQRT3). Definition at line 13722 of file lapacke.h.LAPACK_zgerfs— defined asLAPACK_GLOBAL(zgerfs,ZGERFS). Definition at line 12784 of file lapacke.h.LAPACK_zgerfsx— defined asLAPACK_GLOBAL(zgerfsx,ZGERFSX). Definition at line 12787 of file lapacke.h.LAPACK_zgerqf— defined asLAPACK_GLOBAL(zgerqf,ZGERQF). Definition at line 13078 of file lapacke.h.LAPACK_zgesdd— defined asLAPACK_GLOBAL(zgesdd,ZGESDD). Definition at line 13428 of file lapacke.h.LAPACK_zgesv— defined asLAPACK_GLOBAL(zgesv,ZGESV). Definition at line 12932 of file lapacke.h.LAPACK_zgesvd— defined asLAPACK_GLOBAL(zgesvd,ZGESVD). Definition at line 13420 of file lapacke.h.LAPACK_zgesvdx— defined asLAPACK_GLOBAL(zgesvdx,ZGESVDX). Definition at line 13424 of file lapacke.h.LAPACK_zgesvj— defined asLAPACK_GLOBAL(zgesvj,ZGESVJ). Definition at line 13436 of file lapacke.h.LAPACK_zgesvx— defined asLAPACK_GLOBAL(zgesvx,ZGESVX). Definition at line 12938 of file lapacke.h.LAPACK_zgesvxx— defined asLAPACK_GLOBAL(zgesvxx,ZGESVXX). Definition at line 12941 of file lapacke.h.LAPACK_zgetf2— defined asLAPACK_GLOBAL(zgetf2,ZGETF2). Definition at line 13564 of file lapacke.h.LAPACK_zgetrf— defined asLAPACK_GLOBAL(zgetrf,ZGETRF). Definition at line 12608 of file lapacke.h.LAPACK_zgetrf2— defined asLAPACK_GLOBAL(zgetrf2,ZGETRF2). Definition at line 12612 of file lapacke.h.LAPACK_zgetri— defined asLAPACK_GLOBAL(zgetri,ZGETRI). Definition at line 12854 of file lapacke.h.LAPACK_zgetrs— defined asLAPACK_GLOBAL(zgetrs,ZGETRS). Definition at line 12670 of file lapacke.h.LAPACK_zgetsls— defined asLAPACK_GLOBAL(zgetsls,ZGETSLS). Definition at line 13821 of file lapacke.h.
Now we're sliding into the gg block 🦋 — bestie, the double-g gang is long, so buckle up:
LAPACK_zggbak— defined asLAPACK_GLOBAL(zggbak,ZGGBAK). Definition at line 13264 of file lapacke.h.LAPACK_zggbal— defined asLAPACK_GLOBAL(zggbal,ZGGBAL). Definition at line 13260 of file lapacke.h.LAPACK_zgges— defined asLAPACK_GLOBAL(zgges,ZGGES). Definition at line 13484 of file lapacke.h.LAPACK_zgges3— defined asLAPACK_GLOBAL(zgges3,ZGGES3). Definition at line 13488 of file lapacke.h.LAPACK_zggesx— defined asLAPACK_GLOBAL(zggesx,ZGGESX). Definition at line 13492 of file lapacke.h.LAPACK_zggev— defined asLAPACK_GLOBAL(zggev,ZGGEV). Definition at line 13496 of file lapacke.h.LAPACK_zggev3— defined asLAPACK_GLOBAL(zggev3,ZGGEV3). Definition at line 13500 of file lapacke.h.LAPACK_zggevx— defined asLAPACK_GLOBAL(zggevx,ZGGEVX). Definition at line 13504 of file lapacke.h.LAPACK_zggglm— defined asLAPACK_GLOBAL(zggglm,ZGGGLM). Definition at line 13324 of file lapacke.h.LAPACK_zgghd3— defined asLAPACK_GLOBAL(zgghd3,ZGGHD3). Definition at line 13256 of file lapacke.h.LAPACK_zgghrd— defined asLAPACK_GLOBAL(zgghrd,ZGGHRD). Definition at line 13252 of file lapacke.h.LAPACK_zgglse— defined asLAPACK_GLOBAL(zgglse,ZGGLSE). Definition at line 13320 of file lapacke.h.LAPACK_zggqrf— defined asLAPACK_GLOBAL(zggqrf,ZGGQRF). Definition at line 13098 of file lapacke.h.LAPACK_zggrqf— defined asLAPACK_GLOBAL(zggrqf,ZGGRQF). Definition at line 13102 of file lapacke.h.LAPACK_zggsvd— defined asLAPACK_GLOBAL(zggsvd,ZGGSVD). Definition at line 13440 of file lapacke.h.LAPACK_zggsvd3— defined asLAPACK_GLOBAL(zggsvd3,ZGGSVD3). Definition at line 13751 of file lapacke.h.LAPACK_zggsvp— defined asLAPACK_GLOBAL(zggsvp,ZGGSVP). Definition at line 13292 of file lapacke.h.LAPACK_zggsvp3— defined asLAPACK_GLOBAL(zggsvp3,ZGGSVP3). Definition at line 13296 of file lapacke.h.
Triangular town 🎀 — the gt cluster:
LAPACK_zgtcon— defined asLAPACK_GLOBAL(zgtcon,ZGTCON). Definition at line 12740 of file lapacke.h.LAPACK_zgtrfs— defined asLAPACK_GLOBAL(zgtrfs,ZGTRFS). Definition at line 12800 of file lapacke.h.LAPACK_zgtsv— defined asLAPACK_GLOBAL(zgtsv,ZGTSV). Definition at line 12958 of file lapacke.h.LAPACK_zgtsvx— defined asLAPACK_GLOBAL(zgtsvx,ZGTSVX). Definition at line 12962 of file lapacke.h.LAPACK_zgttrf— defined asLAPACK_GLOBAL(zgttrf,ZGTTRF). Definition at line 12620 of file lapacke.h.LAPACK_zgttrs— defined asLAPACK_GLOBAL(zgttrs,ZGTTRS). Definition at line 12678 of file lapacke.h.
And now the herd of Hermitian band stuff 💅 — note that the _2stage ones get their own line numbers, they are not the same macro, don't get it twisted:
LAPACK_zhbev— defined asLAPACK_GLOBAL(zhbev,ZHBEV). Definition at line 13372 of file lapacke.h.LAPACK_zhbev_2stage— defined asLAPACK_GLOBAL(zhbev_2stage,ZHBEV_2STAGE). Definition at line 13376 of file lapacke.h.LAPACK_zhbevd— defined asLAPACK_GLOBAL(zhbevd,ZHBEVD). Definition at line 13380 of file lapacke.h.LAPACK_zhbevd_2stage— defined asLAPACK_GLOBAL(zhbevd_2stage,ZHBEVD_2STAGE). Definition at line 13384 of file lapacke.h.LAPACK_zhbevx— defined asLAPACK_GLOBAL(zhbevx,ZHBEVX). Definition at line 13388 of file lapacke.h.LAPACK_zhbevx_2stage— defined asLAPACK_GLOBAL(zhbevx_2stage,ZHBEVX_2STAGE). Definition at line 13392 of file lapacke.h.LAPACK_zhbgst— defined asLAPACK_GLOBAL(zhbgst,ZHBGST). Definition at line 13196 of file lapacke.h.LAPACK_zhbgv— defined asLAPACK_GLOBAL(zhbgv,ZHBGV). Definition at line 13472 of file lapacke.h.LAPACK_zhbgvd— defined asLAPACK_GLOBAL(zhbgvd,ZHBGVD). Definition at line 13476 of file lapacke.h.LAPACK_zhbgvx— defined asLAPACK_GLOBAL(zhbgvx,ZHBGVX). Definition at line 13480 of file lapacke.h.LAPACK_zhbtrd— defined asLAPACK_GLOBAL(zhbtrd,ZHBTRD). Definition at line 13154 of file lapacke.h.
Enter the he-verse 👑 — this is the big one, so many icons:
LAPACK_zhecon— defined asLAPACK_GLOBAL(zhecon,ZHECON). Definition at line 12762 of file lapacke.h.LAPACK_zhecon_3— defined asLAPACK_GLOBAL(zhecon_3,ZHECON_3). Definition at line 13801 of file lapacke.h.LAPACK_zheequb— defined asLAPACK_GLOBAL(zheequb,ZHEEQUB). Definition at line 12927 of file lapacke.h.LAPACK_zheev— defined asLAPACK_GLOBAL(zheev,ZHEEV). Definition at line 13328 of file lapacke.h.LAPACK_zheev_2stage— defined asLAPACK_GLOBAL(zheev_2stage,ZHEEV_2STAGE). Definition at line 13332 of file lapacke.h.LAPACK_zheevd— defined asLAPACK_GLOBAL(zheevd,ZHEEVD). Definition at line 13336 of file lapacke.h.LAPACK_zheevd_2stage— defined asLAPACK_GLOBAL(zheevd_2stage,ZHEEVD_2STAGE). Definition at line 13340 of file lapacke.h.LAPACK_zheevr— defined asLAPACK_GLOBAL(zheevr,ZHEEVR). Definition at line 13352 of file lapacke.h.LAPACK_zheevr_2stage— defined asLAPACK_GLOBAL(zheevr_2stage,ZHEEVR_2STAGE). Definition at line 13356 of file lapacke.h.LAPACK_zheevx— defined asLAPACK_GLOBAL(zheevx,ZHEEVX). Definition at line 13344 of file lapacke.h.LAPACK_zheevx_2stage— defined asLAPACK_GLOBAL(zheevx_2stage,ZHEEVX_2STAGE). Definition at line 13348 of file lapacke.h.LAPACK_zhegst— defined asLAPACK_GLOBAL(zhegst,ZHEGST). Definition at line 13188 of file lapacke.h.LAPACK_zhegv— defined asLAPACK_GLOBAL(zhegv,ZHEGV). Definition at line 13444 of file lapacke.h.LAPACK_zhegv_2stage— defined asLAPACK_GLOBAL(zhegv_2stage,ZHEGV_2STAGE). Definition at line 13448 of file lapacke.h.LAPACK_zhegvd— defined asLAPACK_GLOBAL(zhegvd,ZHEGVD). Definition at line 13452 of file lapacke.h.LAPACK_zhegvx— defined asLAPACK_GLOBAL(zhegvx,ZHEGVX). Definition at line 13456 of file lapacke.h.LAPACK_zherfs— defined asLAPACK_GLOBAL(zherfs,ZHERFS). Definition at line 12830 of file lapacke.h.LAPACK_zherfsx— defined asLAPACK_GLOBAL(zherfsx,ZHERFSX). Definition at line 12831 of file lapacke.h.LAPACK_zhesv— defined asLAPACK_GLOBAL(zhesv,ZHESV). Definition at line 13014 of file lapacke.h.LAPACK_zhesv_aa— defined asLAPACK_GLOBAL(zhesv_aa,ZHESV_AA). Definition at line 13758 of file lapacke.h.LAPACK_zhesv_aa_2stage— defined asLAPACK_GLOBAL(zhesv_aa_2stage,ZHESV_AA_2STAGE). Definition at line 13829 of file lapacke.h. (Yeah, that one wraps onto two lines in the original — it's just a long name, she's fine.)LAPACK_zhesv_rk— defined asLAPACK_GLOBAL(zhesv_rk,ZHESV_RK). Definition at line 13777 of file lapacke.h.LAPACK_zhesvx— defined asLAPACK_GLOBAL(zhesvx,ZHESVX). Definition at line 13016 of file lapacke.h.LAPACK_zhesvxx— defined asLAPACK_GLOBAL(zhesvxx,ZHESVXX). Definition at line 13017 of file lapacke.h.LAPACK_zheswapr— defined asLAPACK_GLOBAL(zheswapr,ZHESWAPR). Definition at line 13694 of file lapacke.h.LAPACK_zhetrd— defined asLAPACK_GLOBAL(zhetrd,ZHETRD). Definition at line 13134 of file lapacke.h.LAPACK_zhetrf— defined asLAPACK_GLOBAL(zhetrf,ZHETRF). Definition at line 12659 of file lapacke.h.LAPACK_zhetrf_aa— defined asLAPACK_GLOBAL(zhetrf_aa,ZHETRF_AA). Definition at line 13770 of file lapacke.h.LAPACK_zhetrf_aa_2stage— defined asLAPACK_GLOBAL(zhetrf_aa_2stage,ZHETRF_AA_2STAGE). Definition at line 13841 of file lapacke.h. (Also a two-line situation in the source, bestie, it's just long 💀)LAPACK_zhetrf_rk— defined asLAPACK_GLOBAL(zhetrf_rk,ZHETRF_RK). Definition at line 13783 of file lapacke.h.LAPACK_zhetrf_rook— defined asLAPACK_GLOBAL(zhetrf_rook,ZHETRF_ROOK). Definition at line 12660 of file lapacke.h.LAPACK_zhetri— defined asLAPACK_GLOBAL(zhetri,ZHETRI). Definition at line 12872 of file lapacke.h.LAPACK_zhetri2— defined asLAPACK_GLOBAL(zhetri2,ZHETRI2). Definition at line 13695 of file lapacke.h.LAPACK_zhetri2x— defined asLAPACK_GLOBAL(zhetri2x,ZHETRI2X). Definition at line 13696 of file lapacke.h.LAPACK_zhetri_3— defined asLAPACK_GLOBAL(zhetri_3,ZHETRI_3). Definition at line 13795 of file lapacke.h.LAPACK_zhetrs— defined asLAPACK_GLOBAL(zhetrs,ZHETRS). Definition at line 12709 of file lapacke.h.LAPACK_zhetrs2— defined asLAPACK_GLOBAL(zhetrs2,ZHETRS2). Definition at line 13697 of file lapacke.h.LAPACK_zhetrs_3— defined asLAPACK_GLOBAL(zhetrs_3,ZHETRS_3). Definition at line 13789 of file lapacke.h.LAPACK_zhetrs_aa— defined asLAPACK_GLOBAL(zhetrs_aa,ZHETRS_AA). Definition at line 13764 of file lapacke.h.LAPACK_zhetrs_aa_2stage— defined asLAPACK_GLOBAL(zhetrs_aa_2stage,ZHETRS_AA_2STAGE). Definition at line 13835 of file lapacke.h. (Yes, wrapped in the source too — long girl summer 🌈)LAPACK_zhetrs_rook— defined asLAPACK_GLOBAL(zhetrs_rook,ZHETRS_ROOK). Definition at line 12710 of file lapacke.h.
LAPACK_zhfrk— defined asLAPACK_GLOBAL(zhfrk,ZHFRK). Definition at line 13507 of file lapacke.h.LAPACK_zhgeqz— defined asLAPACK_GLOBAL(zhgeqz,ZHGEQZ). Definition at line 13268 of file lapacke.h.
Packed storage crew 🍓 — the hp squad, all lowercase‑h, capital‑P energy:
LAPACK_zhpcon— defined asLAPACK_GLOBAL(zhpcon,ZHPCON). Definition at line 12768 of file lapacke.h.LAPACK_zhpev— defined asLAPACK_GLOBAL(zhpev,ZHPEV). Definition at line 13360 of file lapacke.h.LAPACK_zhpevd— defined asLAPACK_GLOBAL(zhpevd,ZHPEVD). Definition at line 13364 of file lapacke.h.LAPACK_zhpevx— defined asLAPACK_GLOBAL(zhpevx,ZHPEVX). Definition at line 13368 of file lapacke.h.LAPACK_zhpgst— defined asLAPACK_GLOBAL(zhpgst,ZHPGST). Definition at line 13192 of file lapacke.h.LAPACK_zhpgv— defined asLAPACK_GLOBAL(zhpgv,ZHPGV). Definition at line 13460 of file lapacke.h.LAPACK_zhpgvd— defined asLAPACK_GLOBAL(zhpgvd,ZHPGVD). Definition at line 13464 of file lapacke.h.LAPACK_zhpgvx— defined asLAPACK_GLOBAL(zhpgvx,ZHPGVX). Definition at line 13468 of file lapacke.h.LAPACK_zhprfs— defined asLAPACK_GLOBAL(zhprfs,ZHPRFS). Definition at line 12838 of file lapacke.h.LAPACK_zhpsv— defined asLAPACK_GLOBAL(zhpsv,ZHPSV). Definition at line 13028 of file lapacke.h.LAPACK_zhpsvx— defined asLAPACK_GLOBAL(zhpsvx,ZHPSVX). Definition at line 13030 of file lapacke.h.LAPACK_zhptrd— defined asLAPACK_GLOBAL(zhptrd,ZHPTRD). Definition at line 13146 of file lapacke.h.
Lowkey iconic that we got this far, and there's still more alphabet to get through 😭🫶 — next chunk incoming, don't touch that dial.
LAPACK_zhptrf— expands toLAPACK_GLOBAL(zhptrf,ZHPTRF), defined at line 12666 oflapacke.h.LAPACK_zhptri— expands toLAPACK_GLOBAL(zhptri,ZHPTRI), defined at line 12878 oflapacke.h.LAPACK_zhptrs— expands toLAPACK_GLOBAL(zhptrs,ZHPTRS), defined at line 12716 oflapacke.h.
okay bestie we're still deep in the zh* cluster and honestly? it's giving main character energy. ✨
LAPACK_zhsein— expands toLAPACK_GLOBAL(zhsein,ZHSEIN), defined at line 13228 oflapacke.h.LAPACK_zhseqr— expands toLAPACK_GLOBAL(zhseqr,ZHSEQR), defined at line 13224 oflapacke.h.
and now we slide into the zlac* / zla* zone, which is lowkey a whole aesthetic 🦋 — every single one still just a LAPACK_GLOBAL alias, no cap:
LAPACK_zlacgv— expands toLAPACK_GLOBAL(zlacgv,ZLACGV), defined at line 13542 oflapacke.h.LAPACK_zlacn2— expands toLAPACK_GLOBAL(zlacn2,ZLACN2), defined at line 13554 oflapacke.h.LAPACK_zlacp2— expands toLAPACK_GLOBAL(zlacp2,ZLACP2), defined at line 13560 oflapacke.h.LAPACK_zlacpy— expands toLAPACK_GLOBAL(zlacpy,ZLACPY), defined at line 13558 oflapacke.h.LAPACK_zlacrm— expands toLAPACK_GLOBAL(zlacrm,ZLACRM), defined at line 13578 oflapacke.h.LAPACK_zlag2c— expands toLAPACK_GLOBAL(zlag2c,ZLAG2C), defined at line 13620 oflapacke.h.LAPACK_zlagge— expands toLAPACK_GLOBAL(zlagge,ZLAGGE), defined at line 13628 oflapacke.h.LAPACK_zlaghe— expands toLAPACK_GLOBAL(zlaghe,ZLAGHE), defined at line 13644 oflapacke.h.LAPACK_zlagsy— expands toLAPACK_GLOBAL(zlagsy,ZLAGSY), defined at line 13642 oflapacke.h.LAPACK_zlange— expands toLAPACK_GLOBAL(zlange,ZLANGE), defined at line 13572 oflapacke.h.LAPACK_zlanhe— expands toLAPACK_GLOBAL(zlanhe,ZLANHE), defined at line 13574 oflapacke.h.LAPACK_zlansy— expands toLAPACK_GLOBAL(zlansy,ZLANSY), defined at line 13582 oflapacke.h.LAPACK_zlantr— expands toLAPACK_GLOBAL(zlantr,ZLANTR), defined at line 13586 oflapacke.h.LAPACK_zlapmr— expands toLAPACK_GLOBAL(zlapmr,ZLAPMR), defined at line 13648 oflapacke.h.LAPACK_zlapmt— expands toLAPACK_GLOBAL(zlapmt,ZLAPMT), defined at line 13652 oflapacke.h.LAPACK_zlarcm— expands toLAPACK_GLOBAL(zlarcm,ZLARCM), defined at line 13576 oflapacke.h.LAPACK_zlarfb— expands toLAPACK_GLOBAL(zlarfb,ZLARFB), defined at line 13596 oflapacke.h.LAPACK_zlarfg— expands toLAPACK_GLOBAL(zlarfg,ZLARFG), defined at line 13600 oflapacke.h.LAPACK_zlarft— expands toLAPACK_GLOBAL(zlarft,ZLARFT), defined at line 13608 oflapacke.h.LAPACK_zlarfx— expands toLAPACK_GLOBAL(zlarfx,ZLARFX), defined at line 13612 oflapacke.h.LAPACK_zlarnv— expands toLAPACK_GLOBAL(zlarnv,ZLARNV), defined at line 13546 oflapacke.h.LAPACK_zlascl— expands toLAPACK_GLOBAL(zlascl,ZLASCL), defined at line 13632 oflapacke.h.LAPACK_zlaset— expands toLAPACK_GLOBAL(zlaset,ZLASET), defined at line 13636 oflapacke.h.LAPACK_zlassq— expands toLAPACK_GLOBAL(zlassq,ZLASSQ), defined at line 13604 oflapacke.h.LAPACK_zlaswp— expands toLAPACK_GLOBAL(zlaswp,ZLASWP), defined at line 13568 oflapacke.h.LAPACK_zlatms— expands toLAPACK_GLOBAL(zlatms,ZLATMS), defined at line 13616 oflapacke.h.LAPACK_zlauum— expands toLAPACK_GLOBAL(zlauum,ZLAUUM), defined at line 13624 oflapacke.h.
bestie we are now entering the packed-band zone and the zp* girls are all here 💅 perfectly alphabetical, perfectly defined, zero drama:
LAPACK_zpbcon— expands toLAPACK_GLOBAL(zpbcon,ZPBCON), defined at line 12752 oflapacke.h.LAPACK_zpbequ— expands toLAPACK_GLOBAL(zpbequ,ZPBEQU), defined at line 12922 oflapacke.h.LAPACK_zpbrfs— expands toLAPACK_GLOBAL(zpbrfs,ZPBRFS), defined at line 12816 oflapacke.h.LAPACK_zpbstf— expands toLAPACK_GLOBAL(zpbstf,ZPBSTF), defined at line 13200 oflapacke.h.LAPACK_zpbsv— expands toLAPACK_GLOBAL(zpbsv,ZPBSV), defined at line 12988 oflapacke.h.LAPACK_zpbsvx— expands toLAPACK_GLOBAL(zpbsvx,ZPBSVX), defined at line 12992 oflapacke.h.LAPACK_zpbtrf— expands toLAPACK_GLOBAL(zpbtrf,ZPBTRF), defined at line 12644 oflapacke.h.LAPACK_zpbtrs— expands toLAPACK_GLOBAL(zpbtrs,ZPBTRS), defined at line 12694 oflapacke.h.LAPACK_zpftrf— expands toLAPACK_GLOBAL(zpftrf,ZPFTRF), defined at line 12635 oflapacke.h.LAPACK_zpftri— expands toLAPACK_GLOBAL(zpftri,ZPFTRI), defined at line 12861 oflapacke.h.LAPACK_zpftrs— expands toLAPACK_GLOBAL(zpftrs,ZPFTRS), defined at line 12685 oflapacke.h.
okay the zpo* crew — positive-definite vibe check, everyone passed 🌸
LAPACK_zpocon— expands toLAPACK_GLOBAL(zpocon,ZPOCON), defined at line 12744 oflapacke.h.LAPACK_zpoequ— expands toLAPACK_GLOBAL(zpoequ,ZPOEQU), defined at line 12910 oflapacke.h.LAPACK_zpoequb— expands toLAPACK_GLOBAL(zpoequb,ZPOEQUB), defined at line 12913 oflapacke.h.LAPACK_zporfs— expands toLAPACK_GLOBAL(zporfs,ZPORFS), defined at line 12804 oflapacke.h.LAPACK_zporfsx— expands toLAPACK_GLOBAL(zporfsx,ZPORFSX), defined at line 12807 oflapacke.h.LAPACK_zposv— expands toLAPACK_GLOBAL(zposv,ZPOSV), defined at line 12966 oflapacke.h.LAPACK_zposvx— expands toLAPACK_GLOBAL(zposvx,ZPOSVX), defined at line 12972 oflapacke.h.LAPACK_zposvxx— expands toLAPACK_GLOBAL(zposvxx,ZPOSVXX), defined at line 12975 oflapacke.h.LAPACK_zpotrf— expands toLAPACK_GLOBAL(zpotrf,ZPOTRF), defined at line 12624 oflapacke.h.LAPACK_zpotrf2— expands toLAPACK_GLOBAL(zpotrf2,ZPOTRF2), defined at line 12628 oflapacke.h.LAPACK_zpotri— expands toLAPACK_GLOBAL(zpotri,ZPOTRI), defined at line 12858 oflapacke.h.LAPACK_zpotrs— expands toLAPACK_GLOBAL(zpotrs,ZPOTRS), defined at line 12682 oflapacke.h.LAPACK_zppcon— expands toLAPACK_GLOBAL(zppcon,ZPPCON), defined at line 12748 oflapacke.h.LAPACK_zppequ— expands toLAPACK_GLOBAL(zppequ,ZPPEQU), defined at line 12918 oflapacke.h.LAPACK_zpprfs— expands toLAPACK_GLOBAL(zpprfs,ZPPRFS), defined at line 12812 oflapacke.h.LAPACK_zppsv— expands toLAPACK_GLOBAL(zppsv,ZPPSV), defined at line 12980 oflapacke.h.LAPACK_zppsvx— expands toLAPACK_GLOBAL(zppsvx,ZPPSVX), defined at line 12984 oflapacke.h.LAPACK_zpptrf— expands toLAPACK_GLOBAL(zpptrf,ZPPTRF), defined at line 12640 oflapacke.h.LAPACK_zpptri— expands toLAPACK_GLOBAL(zpptri,ZPPTRI), defined at line 12866 oflapacke.h.LAPACK_zpptrs— expands toLAPACK_GLOBAL(zpptrs,ZPPTRS), defined at line 12690 oflapacke.h.LAPACK_zpstrf— expands toLAPACK_GLOBAL(zpstrf,ZPSTRF), defined at line 12631 oflapacke.h.LAPACK_zptcon— expands toLAPACK_GLOBAL(zptcon,ZPTCON), defined at line 12756 oflapacke.h.LAPACK_zpteqr— expands toLAPACK_GLOBAL(zpteqr,ZPTEQR), defined at line 13176 oflapacke.h.LAPACK_zptrfs— expands toLAPACK_GLOBAL(zptrfs,ZPTRFS), defined at line 12820 oflapacke.h.LAPACK_zptsv— expands toLAPACK_GLOBAL(zptsv,ZPTSV), defined at line 12996 oflapacke.h.LAPACK_zptsvx— expands toLAPACK_GLOBAL(zptsvx,ZPTSVX), defined at line 13000 oflapacke.h.LAPACK_zpttrf— expands toLAPACK_GLOBAL(zpttrf,ZPTTRF), defined at line 12648 oflapacke.h.LAPACK_zpttrs— expands toLAPACK_GLOBAL(zpttrs,ZPTTRS), defined at line 12698 oflapacke.h.
and the zs* girlies are pulling up now 🎀 same pattern, same LAPACK_GLOBAL wrapper, same little line number at the end. iconic behaviour, tbh:
LAPACK_zspcon— expands toLAPACK_GLOBAL(zspcon,ZSPCON), defined at line 12766 oflapacke.h.LAPACK_zsprfs— expands toLAPACK_GLOBAL(zsprfs,ZSPRFS), defined at line 12836 oflapacke.h.LAPACK_zspsv— expands toLAPACK_GLOBAL(zspsv,ZSPSV), defined at line 13022 oflapacke.h.LAPACK_zspsvx— expands toLAPACK_GLOBAL(zspsvx,ZSPSVX), defined at line 13026 oflapacke.h.LAPACK_zsptrf— expands toLAPACK_GLOBAL(zsptrf,ZSPTRF), defined at line 12664 oflapacke.h.LAPACK_zsptri— expands toLAPACK_GLOBAL(zsptri,ZSPTRI), defined at line 12876 oflapacke.h.LAPACK_zsptrs— expands toLAPACK_GLOBAL(zsptrs,ZSPTRS), defined at line 12714 oflapacke.h.
eigenvalue era ✨ the zst* block, all accounted for:
LAPACK_zstedc— expands toLAPACK_GLOBAL(zstedc,ZSTEDC), defined at line 13168 oflapacke.h.LAPACK_zstegr— expands toLAPACK_GLOBAL(zstegr,ZSTEGR), defined at line 13172 oflapacke.h.LAPACK_zstein— expands toLAPACK_GLOBAL(zstein,ZSTEIN), defined at line 13182 oflapacke.h.LAPACK_zstemr— expands toLAPACK_GLOBAL(zstemr,ZSTEMR), defined at line 13164 oflapacke.h.LAPACK_zsteqr— expands toLAPACK_GLOBAL(zsteqr,ZSTEQR), defined at line 13160 oflapacke.h.
okay now the symmetric section and bestie, it is long — stay with me, we're doing all of them 💜
LAPACK_zsycon— expands toLAPACK_GLOBAL(zsycon,ZSYCON), defined at line 12760 oflapacke.h.LAPACK_zsycon_3— expands toLAPACK_GLOBAL(zsycon_3,ZSYCON_3), defined at line 13799 oflapacke.h.LAPACK_zsyconv— expands toLAPACK_GLOBAL(zsyconv,ZSYCONV), defined at line 13698 oflapacke.h.LAPACK_zsyequb— expands toLAPACK_GLOBAL(zsyequb,ZSYEQUB), defined at line 12925 oflapacke.h.LAPACK_zsyr— expands toLAPACK_GLOBAL(zsyr,ZSYR), defined at line 13745 oflapacke.h.LAPACK_zsyrfs— expands toLAPACK_GLOBAL(zsyrfs,ZSYRFS), defined at line 12824 oflapacke.h.LAPACK_zsyrfsx— expands toLAPACK_GLOBAL(zsyrfsx,ZSYRFSX), defined at line 12827 oflapacke.h.LAPACK_zsysv— expands toLAPACK_GLOBAL(zsysv,ZSYSV), defined at line 13004 oflapacke.h.LAPACK_zsysv_aa— expands toLAPACK_GLOBAL(zsysv_aa,ZSYSV_AA), defined at line 13756 oflapacke.h.LAPACK_zsysv_aa_2stage— expands toLAPACK_GLOBAL(zsysv_aa_2stage,ZSYSV_AA_2STAGE), defined at line 13827 oflapacke.h.LAPACK_zsysv_rk— expands toLAPACK_GLOBAL(zsysv_rk,ZSYSV_RK), defined at line 13775 oflapacke.h.LAPACK_zsysv_rook— expands toLAPACK_GLOBAL(zsysv_rook,ZSYSV_ROOK), defined at line 13743 oflapacke.h.LAPACK_zsysvx— expands toLAPACK_GLOBAL(zsysvx,ZSYSVX), defined at line 13008 oflapacke.h.LAPACK_zsysvxx— expands toLAPACK_GLOBAL(zsysvxx,ZSYSVXX), defined at line 13011 oflapacke.h.LAPACK_zsyswapr— expands toLAPACK_GLOBAL(zsyswapr,ZSYSWAPR), defined at line 13699 oflapacke.h.LAPACK_zsytrf— expands toLAPACK_GLOBAL(zsytrf,ZSYTRF), defined at line 12655 oflapacke.h.LAPACK_zsytrf_aa— expands toLAPACK_GLOBAL(zsytrf_aa,ZSYTRF_AA), defined at line 13768 oflapacke.h.LAPACK_zsytrf_aa_2stage— expands toLAPACK_GLOBAL(zsytrf_aa_2stage,ZSYTRF_AA_2STAGE), defined at line 13839 oflapacke.h.LAPACK_zsytrf_rk— expands toLAPACK_GLOBAL(zsytrf_rk,ZSYTRF_RK), defined at line 13781 oflapacke.h.LAPACK_zsytrf_rook— expands toLAPACK_GLOBAL(zsytrf_rook,ZSYTRF_ROOK), defined at line 12656 oflapacke.h.LAPACK_zsytri— expands toLAPACK_GLOBAL(zsytri,ZSYTRI), defined at line 12870 oflapacke.h.LAPACK_zsytri2— expands toLAPACK_GLOBAL(zsytri2,ZSYTRI2), defined at line 13700 oflapacke.h.LAPACK_zsytri2x— expands toLAPACK_GLOBAL(zsytri2x,ZSYTRI2X), defined at line 13701 oflapacke.h.LAPACK_zsytri_3— expands toLAPACK_GLOBAL(zsytri_3,ZSYTRI_3), defined at line 13793 oflapacke.h.LAPACK_zsytrs— expands toLAPACK_GLOBAL(zsytrs,ZSYTRS), defined at line 12705 oflapacke.h.LAPACK_zsytrs2— expands toLAPACK_GLOBAL(zsytrs2,ZSYTRS2), defined at line 13702 oflapacke.h.
ngl bestie, none of these change what the macro actually is — every single one is still just a#definealiasing the name toLAPACK_GLOBAL(...)with the exact output written character for character. The line numbers are the receipts, periodt. 🫶
#define LAPACK_zsytrs_3 LAPACK_GLOBAL(zsytrs_3,ZSYTRS_3)— this is the wiring that points the LAPACKE name at the FortranZSYTRS_3. Definition at line 13787 of filelapacke.h.#define LAPACK_zsytrs_aa LAPACK_GLOBAL(zsytrs_aa,ZSYTRS_AA)— same deal,_aaflavour. Definition at line 13762 of filelapacke.h.#define LAPACK_zsytrs_aa_2stage LAPACK_GLOBAL(zsytrs_aa_2stage,ZSYTRS_AA_2STAGE)— the2stageone, all caps on the right side like it's yelling its own name. Definition at line 13833 of filelapacke.h.#define LAPACK_zsytrs_rook LAPACK_GLOBAL(zsytrs_rook,ZSYTRS_ROOK)— rook variant, still just a macro doing macro things. Definition at line 12706 of filelapacke.h.#define LAPACK_ztbcon LAPACK_GLOBAL(ztbcon,ZTBCON)— lowercase on the left, uppercase on the right, the classic glow-up. Definition at line 12780 of filelapacke.h.#define LAPACK_ztbrfs LAPACK_GLOBAL(ztbrfs,ZTBRFS)— 💅. Definition at line 12850 of filelapacke.h.#define LAPACK_ztbtrs LAPACK_GLOBAL(ztbtrs,ZTBTRS)— bestie this is literally just the name twice in different fonts. Definition at line 12728 of filelapacke.h.#define LAPACK_ztfsm LAPACK_GLOBAL(ztfsm,ZTFSM)— four letters, zero notes. Definition at line 13511 of filelapacke.h.#define LAPACK_ztftri LAPACK_GLOBAL(ztftri,ZTFTRI)— ✨ sparkle ✨. Definition at line 12885 of filelapacke.h.#define LAPACK_ztfttp LAPACK_GLOBAL(ztfttp,ZTFTTP)— a whole lot of t's and f's, love that for us. Definition at line 13515 of filelapacke.h.#define LAPACK_ztfttr LAPACK_GLOBAL(ztfttr,ZTFTTR)— one letter away from its sibling above, iconic behaviour honestly. Definition at line 13519 of filelapacke.h.#define LAPACK_ztgevc LAPACK_GLOBAL(ztgevc,ZTGEVC)— definition at line 13272 of filelapacke.h.#define LAPACK_ztgexc LAPACK_GLOBAL(ztgexc,ZTGEXC)— definition at line 13276 of filelapacke.h.#define LAPACK_ztgsen LAPACK_GLOBAL(ztgsen,ZTGSEN)— definition at line 13280 of filelapacke.h.#define LAPACK_ztgsja LAPACK_GLOBAL(ztgsja,ZTGSJA)— definition at line 13300 of filelapacke.h.#define LAPACK_ztgsna LAPACK_GLOBAL(ztgsna,ZTGSNA)— definition at line 13288 of filelapacke.h.#define LAPACK_ztgsyl LAPACK_GLOBAL(ztgsyl,ZTGSYL)— definition at line 13284 of filelapacke.h.
okay the ztg* clique is fully showing up together, no notes 🫶
#define LAPACK_ztpcon LAPACK_GLOBAL(ztpcon,ZTPCON)— definition at line 12776 of filelapacke.h.#define LAPACK_ztpmqrt LAPACK_GLOBAL(ztpmqrt,ZTPMQRT)— definition at line 13726 of filelapacke.h.#define LAPACK_ztpqrt LAPACK_GLOBAL(ztpqrt,ZTPQRT)— the one where you drop them. Definition at line 13730 of filelapacke.h.#define LAPACK_ztpqrt2 LAPACK_GLOBAL(ztpqrt2,ZTPQRT2)— the same but with a lil2on the end. Definition at line 13734 of filelapacke.h.#define LAPACK_ztprfb LAPACK_GLOBAL(ztprfb,ZTPRFB)— definition at line 13738 of filelapacke.h.#define LAPACK_ztprfs LAPACK_GLOBAL(ztprfs,ZTPRFS)—bversuss, the eternal struggle. Definition at line 12846 of filelapacke.h.#define LAPACK_ztptri LAPACK_GLOBAL(ztptri,ZTPTRI)— definition at line 12890 of filelapacke.h.#define LAPACK_ztptrs LAPACK_GLOBAL(ztptrs,ZTPTRS)— definition at line 12724 of filelapacke.h.#define LAPACK_ztpttf LAPACK_GLOBAL(ztpttf,ZTPTTF)— definition at line 13523 of filelapacke.h.#define LAPACK_ztpttr LAPACK_GLOBAL(ztpttr,ZTPTTR)— and the last two letters floof over. Definition at line 13527 of filelapacke.h.#define LAPACK_ztrcon LAPACK_GLOBAL(ztrcon,ZTRCON)— definition at line 12772 of filelapacke.h.#define LAPACK_ztrevc LAPACK_GLOBAL(ztrevc,ZTREVC)— definition at line 13232 of filelapacke.h.#define LAPACK_ztrexc LAPACK_GLOBAL(ztrexc,ZTREXC)— definition at line 13240 of filelapacke.h.#define LAPACK_ztrrfs LAPACK_GLOBAL(ztrrfs,ZTRRFS)— definition at line 12842 of filelapacke.h.#define LAPACK_ztrsen LAPACK_GLOBAL(ztrsen,ZTRSEN)— definition at line 13244 of filelapacke.h.#define LAPACK_ztrsna LAPACK_GLOBAL(ztrsna,ZTRSNA)— definition at line 13236 of filelapacke.h.#define LAPACK_ztrsyl LAPACK_GLOBAL(ztrsyl,ZTRSYL)— definition at line 13248 of filelapacke.h.#define LAPACK_ztrtri LAPACK_GLOBAL(ztrtri,ZTRTRI)— definition at line 12882 of filelapacke.h.#define LAPACK_ztrtrs LAPACK_GLOBAL(ztrtrs,ZTRTRS)— definition at line 12720 of filelapacke.h.#define LAPACK_ztrttf LAPACK_GLOBAL(ztrttf,ZTRTTF)— definition at line 13531 of filelapacke.h.#define LAPACK_ztrttp LAPACK_GLOBAL(ztrttp,ZTRTTP)— definition at line 13535 of filelapacke.h.#define LAPACK_ztzrzf LAPACK_GLOBAL(ztzrzf,ZTZRZF)— the whole z-alphabet decided to show up in one word. Definition at line 13090 of filelapacke.h.
#define LAPACK_zunbdb LAPACK_GLOBAL(zunbdb,ZUNBDB)— definition at line 13703 of filelapacke.h.#define LAPACK_zuncsd LAPACK_GLOBAL(zuncsd,ZUNCSD)— definition at line 13704 of filelapacke.h.#define LAPACK_zuncsd2by1 LAPACK_GLOBAL(zuncsd2by1,ZUNCSD2BY1)— "2by1" said out loud, precious. Definition at line 13705 of filelapacke.h.#define LAPACK_zungbr LAPACK_GLOBAL(zungbr,ZUNGBR)— definition at line 13116 of filelapacke.h.#define LAPACK_zunghr LAPACK_GLOBAL(zunghr,ZUNGHR)— definition at line 13210 of filelapacke.h.#define LAPACK_zunglq LAPACK_GLOBAL(zunglq,ZUNGLQ)— definition at line 13060 of filelapacke.h.#define LAPACK_zungql LAPACK_GLOBAL(zungql,ZUNGQL)— same letters, swapped, and both exist. As they should. Definition at line 13070 of filelapacke.h.#define LAPACK_zungqr LAPACK_GLOBAL(zungqr,ZUNGQR)— definition at line 13048 of filelapacke.h.#define LAPACK_zungrq LAPACK_GLOBAL(zungrq,ZUNGRQ)— definition at line 13082 of filelapacke.h.#define LAPACK_zungtr LAPACK_GLOBAL(zungtr,ZUNGTR)— definition at line 13136 of filelapacke.h.#define LAPACK_zunmbr LAPACK_GLOBAL(zunmbr,ZUNMBR)— note themwhere thegwas a second ago, bestie, don't mix them up. Definition at line 13118 of filelapacke.h.#define LAPACK_zunmhr LAPACK_GLOBAL(zunmhr,ZUNMHR)— definition at line 13212 of filelapacke.h.#define LAPACK_zunmlq LAPACK_GLOBAL(zunmlq,ZUNMLQ)— definition at line 13062 of filelapacke.h.#define LAPACK_zunmql LAPACK_GLOBAL(zunmql,ZUNMQL)— definition at line 13074 of filelapacke.h.#define LAPACK_zunmqr LAPACK_GLOBAL(zunmqr,ZUNMQR)— definition at line 13050 of filelapacke.h.#define LAPACK_zunmrq LAPACK_GLOBAL(zunmrq,ZUNMRQ)— definition at line 13086 of filelapacke.h.#define LAPACK_zunmrz LAPACK_GLOBAL(zunmrz,ZUNMRZ)— definition at line 13094 of filelapacke.h.#define LAPACK_zunmtr LAPACK_GLOBAL(zunmtr,ZUNMTR)— definition at line 13138 of filelapacke.h.#define LAPACK_zupgtr LAPACK_GLOBAL(zupgtr,ZUPGTR)— definition at line 13148 of filelapacke.h.#define LAPACK_zupmtr LAPACK_GLOBAL(zupmtr,ZUPMTR)— and that closes out thezu*squad. Definition at line 13150 of filelapacke.h.
#define LAPACKE_free(p) free( p )— okay this one's cute, it's literally justfree. Pass your pointer as p and she's done. Definition at line 113 of filelapacke.h.#define LAPACKE_malloc(size) malloc( size )— same energy: it's justmalloc, wearing a little LAPACKE jacket. Ask for size bytes. Definition at line 110 of filelapacke.h.
✨ these two are the whole reason your buffers don't leak, so like… respect them ✨
💖 Typedef Documentation 💖
Bestie, these are function-pointer typedefs — little named shapes for "a function that takes these pointers and hands back a lapack_logical". All of them return lapack_logical. That's the whole vibe. 👑
typedef lapack_logical(* LAPACK_C_SELECT1) (const lapack_complex_float *)— one singleconst lapack_complex_float *and nothing else. Definition at line 136 of filelapacke.h.typedef lapack_logical(* LAPACK_C_SELECT2) (const lapack_complex_float *, const lapack_complex_float *)— now it takes two of them. Definition at line 138 of filelapacke.h.typedef lapack_logical(* LAPACK_D_SELECT2) (const double *, const double *)— thedoubletwin of the one above. Definition at line 132 of filelapacke.h.typedef lapack_logical(* LAPACK_D_SELECT3) (const double *, const double *, const double *)— threeconst double *, go off. Definition at line 134 of filelapacke.h.typedef lapack_logical(* LAPACK_S_SELECT2) (const float *, const float *)— it's givingfloathours. Definition at line 129 of filelapacke.h.typedef lapack_logical(* LAPACK_S_SELECT3) (const float *, const float *, const float *)— threeconst float *. Definition at line 131 of filelapacke.h.typedef lapack_logical(* LAPACK_Z_SELECT1) (const lapack_complex_double *)— the double-precision complex singleton of the group. Definition at line 139 of filelapacke.h.typedef lapack_logical(* LAPACK_Z_SELECT2) (const lapack_complex_double *, const lapack_complex_double *)— and the pair. Definition at line 141 of filelapacke.h.
👀 yes theSELECT1/SELECT2/SELECT3numbering doesn't line up across the C/S/D/Z families — that's just how the list reads, so don't come for me, I'm only the messenger 🫶
LAPACK_cbbcsd
void LAPACK_cbbcsd (char * jobu1, char * jobu2, char * jobv1t, char * jobv2t, char * trans,
lapack_int * m, lapack_int * p, lapack_int * q, float * theta, float * phi,
lapack_complex_float * u1, lapack_int * ldu1, lapack_complex_float * u2, lapack_int * ldu2,
lapack_complex_float * v1t, lapack_int * ldv1t, lapack_complex_float * v2t, lapack_int * ldv2t,
float * b11d, float * b11e, float * b12d, float * b12e, float * b21d, float * b21e,
float * b22d, float * b22e, float * rwork, lapack_int * lrwork, lapack_int * info);
okay so this is the single-precision complex bidiagonal SVD ✨ every single arg is a pointer, even the char * job flags, because that's just how LAPACK rolls 💅 theta, phi, b11d…b22e and rwork are your real-valued float stuff, u1/u2/v1t/v2t are the complex matrices, and info tells you how it went 🫶
LAPACK_cbdsqr
void LAPACK_cbdsqr (char * uplo, lapack_int * n, lapack_int * ncvt, lapack_int * nru,
lapack_int * ncc, float * d, float * e, lapack_complex_float * vt, lapack_int * ldvt,
lapack_complex_float * u, lapack_int * ldu, lapack_complex_float * c, lapack_int * ldc,
float * work, lapack_int * info);
bidiagonal SVD, the OG version — d and e are real floats (the diagonal + off-diagonal, bestie 🌸), while vt, u and c are complex. uplo and all the leading dims are pointers, and work is a plain float array. info at the end, as always 🙈
LAPACK_cgbbrd
void LAPACK_cgbbrd (char * vect, lapack_int * m, lapack_int * n, lapack_int * ncc,
lapack_int * kl, lapack_int * ku, lapack_complex_float * ab, lapack_int * ldab,
float * d, float * e, lapack_complex_float * q, lapack_int * ldq,
lapack_complex_float * pt, lapack_int * ldpt, lapack_complex_float * c, lapack_int * ldc,
lapack_complex_float * work, float * rwork, lapack_int * info);
general band → bidiagonal reduction, and it's giving main character energy 🦋 you've got ab on ldab, d/e as real floats, the q and pt matrices with their own leading dims, plus c on ldc, a complex work, a float rwork, and info keeping it real 💜
LAPACK_cgbcon
void LAPACK_cgbcon (char * norm, lapack_int * n, lapack_int * kl, lapack_int * ku,
const lapack_complex_float * ab, lapack_int * ldab, const lapack_int * ipiv,
float * anorm, float * rcond, lapack_complex_float * work, float * rwork,
lapack_int * info);
band matrix condition number estimator, no cap 💅 notice ab and ipiv are const (promise not to touch 🙏) but anorm, rcond, work, rwork and info are all writable, because they're the outputs, obviously ✨
LAPACK_cgbequ
void LAPACK_cgbequ (lapack_int * m, lapack_int * n, lapack_int * kl, lapack_int * ku,
const lapack_complex_float * ab, lapack_int * ldab, float * r, float * c,
float * rowcnd, float * colcnd, float * amax, lapack_int * info);
equilibration for a complex band matrix — rows get r, columns get c, and you find out how badly scaled everything is via rowcnd, colcnd and amax 🎀 ab is const, the rest is yours to fill, info included 🫶
LAPACK_cgbequb
void LAPACK_cgbequb (lapack_int * m, lapack_int * n, lapack_int * kl, lapack_int * ku,
const lapack_complex_float * ab, lapack_int * ldab, float * r, float * c,
float * rowcnd, float * colcnd, float * amax, lapack_int * info);
the b version of cgbequ 🌈 same arg list, same vibe — m, n, kl, ku, ab/ldab (const, as it should be 💅), then r, c, rowcnd, colcnd, amax and info 🍓
LAPACK_cgbrfs
void LAPACK_cgbrfs (char * trans, lapack_int * n, lapack_int * kl, lapack_int * ku,
lapack_int * nrhs, const lapack_complex_float * ab, lapack_int * ldab,
const lapack_complex_float * afb, lapack_int * ldafb, const lapack_int * ipiv,
const lapack_complex_float * b, lapack_int * ldb, lapack_complex_float * x,
lapack_int * ldx, float * ferr, float * berr, lapack_complex_float * work,
float * rwork, lapack_int * info);
refine a band solve, bestie 🔥 ab, afb, ipiv and b are all const — you're just reading them — while x gets updated on ldx and the error bounds land in ferr and berr 😭 trans decides the direction, nrhs is your column count, and info reports back 👑
LAPACK_cgbrfsx
void LAPACK_cgbrfsx (char * trans, char * equed, lapack_int * n, lapack_int * kl,
lapack_int * ku, lapack_int * nrhs, const lapack_complex_float * ab, lapack_int * ldab,
const lapack_complex_float * afb, lapack_int * ldafb, const lapack_int * ipiv,
const float * r, const float * c, const lapack_complex_float * b, lapack_int * ldb,
lapack_complex_float * x, lapack_int * ldx, float * rcond, float * berr,
lapack_int * n_err_bnds, float * err_bnds_norm, float * err_bnds_comp,
lapack_int * nparams, float * params, lapack_complex_float * work, float * rwork,
lapack_int * info);
the extra version, and it's lowkey a lot 🙈 equed is non-const (it gets set), r and c are const floats, and you get the whole error-bound situation: berr, n_err_bnds, err_bnds_norm, err_bnds_comp, nparams and params ✨ plus rcond, work, rwork and info. The way this signature ate and left no crumbs 💅
LAPACK_cgbsv
void LAPACK_cgbsv (lapack_int * n, lapack_int * kl, lapack_int * ku, lapack_int * nrhs,
lapack_complex_float * ab, lapack_int * ldab, lapack_int * ipiv,
lapack_complex_float * b, lapack_int * ldb, lapack_int * info);
straight-up band solve 🦋 no const anywhere because everything's fair game — ab on ldab, ipiv for the pivots, b on ldb gets overwritten by the answer, and info does its thing 🌸
LAPACK_cgbsvx
void LAPACK_cgbsvx (char * fact, char * trans, lapack_int * n, lapack_int * kl,
lapack_int * ku, lapack_int * nrhs, lapack_complex_float * ab, lapack_int * ldab,
lapack_complex_float * afb, lapack_int * ldafb, lapack_int * ipiv, char * equed,
float * r, float * c, lapack_complex_float * b, lapack_int * ldb,
lapack_complex_float * x, lapack_int * ldx, float * rcond, float * ferr, float * berr,
lapack_complex_float * work, float * rwork, lapack_int * info);
band solve plus the whole diagnostics package 💜 fact says whether you're handing it a factorization, equed comes back set, r and c are the scaling floats, x on ldx is the solution, then rcond, ferr, berr, work, rwork, info. Not a single arg missing, we love consistency 🎀
LAPACK_cgbsvxx
void LAPACK_cgbsvxx (char * fact, char * trans, lapack_int * n, lapack_int * kl,
lapack_int * ku, lapack_int * nrhs, lapack_complex_float * ab, lapack_int * ldab,
lapack_complex_float * afb, lapack_int * ldafb, lapack_int * ipiv, char * equed,
float * r, float * c, lapack_complex_float * b, lapack_int * ldb,
lapack_complex_float * x, lapack_int * ldx, float * rcond, float * rpvgrw,
float * berr, lapack_int * n_err_bnds, float * err_bnds_norm, float * err_bnds_comp,
lapack_int * nparams, float * params, lapack_complex_float * work, float * rwork,
lapack_int * info);
cgbsvx but make it xx 🌈 note the new besties: rpvgrw (right there next to rcond), and the full error-bound squad — n_err_bnds, err_bnds_norm, err_bnds_comp, nparams, params. Everything else is exactly as you'd expect: fact, trans, equed, r, c, x/ldx, work, rwork, info 💅
LAPACK_cgbtrf
void LAPACK_cgbtrf (lapack_int * m, lapack_int * n, lapack_int * kl, lapack_int * ku,
lapack_complex_float * ab, lapack_int * ldab, lapack_int * ipiv, lapack_int * info);
band LU factorization, periodt 🔥 ab lives on ldab, ipiv gets the pivot indices, m/n/kl/ku describe the band, and info tells you if anything went sideways 💀
LAPACK_cgbtrs
void LAPACK_cgbtrs (char * trans, lapack_int * n, lapack_int * kl, lapack_int * ku,
lapack_int * nrhs, const lapack_complex_float * ab, lapack_int * ldab,
const lapack_int * ipiv, lapack_complex_float * b, lapack_int * ldb,
lapack_int * info);
the solve step after cgbtrf ✨ ab and ipiv are const (already factored, not touching 🙏) and b on ldb is where your answers land. trans, nrhs, info — you know the drill by now, bestie 🫶
LAPACK_cgebak
void LAPACK_cgebak (char * job, char * side, lapack_int * n, lapack_int * ilo,
lapack_int * ihi, const float * scale, lapack_int * m, lapack_complex_float * v,
lapack_int * ldv, lapack_int * info);
balances eigenvectors back, and yes scale is a const float array while v on ldv is the complex matrix getting rewritten 🌸 job, side, ilo, ihi, m, info round it out 🎀
LAPACK_cgebal
void LAPACK_cgebal (char * job, lapack_int * n, lapack_complex_float * a, lapack_int * lda,
lapack_int * ilo, lapack_int * ihi, float * scale, lapack_int * info);
balances a general complex matrix 🦋 a on lda, the balancing window comes out in ilo and ihi, the scaling factors in scale (floats!), and info reports. job picks how much balancing you want 💅
LAPACK_cgebrd
void LAPACK_cgebrd (lapack_int * m, lapack_int * n, lapack_complex_float * a, lapack_int * lda,
float * d, float * e, lapack_complex_float * tauq, lapack_complex_float * taup,
lapack_complex_float * work, lapack_int * lwork, lapack_int * info);
general → bidiagonal, and the way it splits real from complex is honestly iconic 👑 d and e are plain floats, tauq and taup are complex, work is complex with lwork telling it how big, and info is... info 😭
LAPACK_cgecon
void LAPACK_cgecon (char * norm, lapack_int * n, const lapack_complex_float * a,
lapack_int * lda, float * anorm, float * rcond, lapack_complex_float * work,
float * rwork, lapack_int * info);
condition number, general complex matrix ✨ a is const (read-only era 💅), anorm goes in, rcond comes out, work/rwork are scratch, info is info 🍓
LAPACK_cgeequ
void LAPACK_cgeequ (lapack_int * m, lapack_int * n, const lapack_complex_float * a,
lapack_int * lda, float * r, float * c, float * rowcnd, float * colcnd, float * amax,
lapack_int * info);
equilibrate a general complex matrix 🌸 a stays const, r and c get the row/column scaling, rowcnd, colcnd and amax hand you the scaling info, info at the end 🫶
LAPACK_cgeequb
void LAPACK_cgeequb (lapack_int * m, lapack_int * n, const lapack_complex_float * a,
lapack_int * lda, float * r, float * c, float * rowcnd, float * colcnd, float * amax,
lapack_int * info);
cgeequ but with a b 🌈 identical signature, identical arg order — a const, everything else writable, info last. Copy, paste, slay 💅
LAPACK_cgees
void LAPACK_cgees (char * jobvs, char * sort, LAPACK_C_SELECT1 select, lapack_int * n,
lapack_complex_float * a, lapack_int * lda, lapack_int * sdim, lapack_complex_float * w,
lapack_complex_float * vs, lapack_int * ldvs, lapack_complex_float * work,
lapack_int * lwork, float * rwork, lapack_logical * bwork, lapack_int * info);
Schur factorization, complex edition 👑 and look at that — a function pointer in the wild! select is a LAPACK_C_SELECT1, bwork is lapack_logical *, rwork is floats, everything else is complex. jobvs, sort, sdim, vs/ldvs, work/lwork, info — the whole crew is here 💖
LAPACK_cgeesx
void LAPACK_cgeesx (char * jobvs, char * sort, LAPACK_C_SELECT1 select, char * sense,
lapack_int * n, lapack_complex_float * a, lapack_int * lda, lapack_int * sdim,
lapack_complex_float * w, lapack_complex_float * vs, lapack_int * ldvs,
float * rconde, float * rcondv, lapack_complex_float * work, lapack_int * lwork,
float * rwork, lapack_logical * bwork, lapack_int * info);
cgees with sense bolted on and two extra reciprocal-condition outputs, rconde and rcondv 💜 everything else matches: select of type LAPACK_C_SELECT1, bwork as lapack_logical *, rwork floats, info 🎀
LAPACK_cgeev
void LAPACK_cgeev (char * jobvl, char * jobvr, lapack_int * n, lapack_complex_float * a,
lapack_int * lda, lapack_complex_float * w, lapack_complex_float * vl,
lapack_int * ldvl, lapack_complex_float * vr, lapack_int * ldvr,
lapack_complex_float * work, lapack_int * lwork, float * rwork, lapack_int * info);
eigenvalues and eigenvectors, the classic 🌈 w is the eigenvalues, vl/vr are left and right eigenvectors on ldvl/ldvr, jobvl and jobvr say which ones you actually want, and yes — rwork is still a float array because LAPACK said so 💅
LAPACK_cgeevx
void LAPACK_cgeevx (char * balanc, char * jobvl, char * jobvr, char * sense, lapack_int * n,
lapack_complex_float * a, lapack_int * lda, lapack_complex_float * w,
lapack_complex_float * vl, lapack_int * ldvl, lapack_complex_float * vr, lapack_int * ldvr,
lapack_int * ilo, lapack_int * ihi, float * scale, float * abnrm, float * rconde,
float * rcondv, lapack_complex_float * work, lapack_int * lwork, float * rwork,
lapack_int * info);
the deluxe eigen-solver 😭 balanc and sense join the party, ilo/ihi and scale come from balancing, abnrm is there, plus rconde and rcondv. Same w, vl, vr, work, rwork, info core, just dressed up 💖
LAPACK_cgehrd
void LAPACK_cgehrd (lapack_int * n, lapack_int * ilo, lapack_int * ihi,
lapack_complex_float * a, lapack_int * lda, lapack_complex_float * tau,
lapack_complex_float * work, lapack_int * lwork, lapack_int * info);
general → Hessenberg reduction ✨ ilo/ihi mark the active window, tau holds the reflectors, a on lda gets overwritten, work/lwork do the scratch thing, info reports 🌸
LAPACK_cgejsv
void LAPACK_cgejsv (char * joba, char * jobu, char * jobv, char * jobr, char * jobt,
char * jobp, lapack_int * m, lapack_int * n, lapack_complex_float * a, lapack_int * lda,
float * sva, lapack_complex_float * u, lapack_int * ldu, lapack_complex_float * v,
lapack_int * ldv, lapack_complex_float * cwork, lapack_int * lwork, float * work,
lapack_int * lrwork, lapack_int * iwork, lapack_int * info);
six — count 'em, six — job flags: joba, jobu, jobv, jobr, jobt, jobp 💅 then sva for the singular values (floats), u/v complex on ldu/ldv, a complex cwork with lwork, a float work with lrwork, plus iwork and info. This one is carrying the whole toolbox 🧚
LAPACK_cgelq
void LAPACK_cgelq (lapack_int * m, lapack_int * n, lapack_complex_float * a, lapack_int * lda,
lapack_complex_float * t, lapack_int * tsize, lapack_complex_float * work,
lapack_int * lwork, lapack_int * info);
LQ factorization with an explicit t / tsize representation 🦋 a on lda, work with lwork, info at the end. Short, sweet, iconic 🎀
LAPACK_cgelq2
void LAPACK_cgelq2 (lapack_int * m, lapack_int * n, lapack_complex_float * a, lapack_int * lda,
lapack_complex_float * tau, lapack_complex_float * work, lapack_int * info);
the unblocked LQ2, no lwork in sight 🙈 just a, lda, tau, work and info. Baby version, still slays ✨
LAPACK_cgelqf
void LAPACK_cgelqf (lapack_int * m, lapack_int * n, lapack_complex_float * a, lapack_int * lda,
lapack_complex_float * tau, lapack_complex_float * work, lapack_int * lwork,
lapack_int * info);
blocked LQ factorization — same args as cgelq2 but now work brought lwork along 💅 tau collects the reflectors, info reports, done 🫶
LAPACK_cgels
void LAPACK_cgels (char * trans, lapack_int * m, lapack_int * n, lapack_int * nrhs,
lapack_complex_float * a, lapack_int * lda, lapack_complex_float * b, lapack_int * ldb,
lapack_complex_float * work, lapack_int * lwork, lapack_int * info);
least squares, bestie 🌸 trans picks the problem shape, a on lda, b on ldb gets the solution, work/lwork scratch, info reports. No rwork here — look at that, a complex function that doesn't need floats 👑 (well, this one at least 😭)
LAPACK_cgelsd
void LAPACK_cgelsd (lapack_int * m, lapack_int * n, lapack_int * nrhs,
lapack_complex_float * a, lapack_int * lda, lapack_complex_float * b, lapack_int * ldb,
float * s, float * rcond, lapack_int * rank, lapack_complex_float * work,
lapack_int * lwork, float * rwork, lapack_int * iwork, lapack_int * info);
least squares via SVD, and it brought everything 🍓 s for singular values (float), rcond in, rank out, rwork floats, iwork ints, work complex, info last. Full squad assembled 💜
LAPACK_cgelss
void LAPACK_cgelss (lapack_int * m, lapack_int * n, lapack_int * nrhs,
lapack_complex_float * a, lapack_int * lda, lapack_complex_float * b, lapack_int * ldb,
float * s, float * rcond, lapack_int * rank, lapack_complex_float * work,
lapack_int * lwork, float * rwork, lapack_int * info);
same job as cgelsd minus the iwork 💅 s, rcond, rank, complex work/lwork, float rwork, info. Sometimes less is more, periodt ✨
LAPACK_cgelsy
void LAPACK_cgelsy (lapack_int * m, lapack_int * n, lapack_int * nrhs,
lapack_complex_float * a, lapack_int * lda, lapack_complex_float * b, lapack_int * ldb,
lapack_int * jpvt, float * rcond, lapack_int * rank, lapack_complex_float * work,
lapack_int * lwork, float * rwork, lapack_int * info);
least squares with column pivoting 🦋 jpvt is the pivot int array (not const — it gets written 💀), rcond and rank are the truncation pair, and then the usual work, lwork, rwork, info. No s array, because different algorithm, different vibe 🌸
LAPACK_cgemlq
void LAPACK_cgemlq (char * side, char * trans, lapack_int * m, lapack_int * n, lapack_int * k,
const lapack_complex_float * a, lapack_int * lda, const lapack_complex_float * t,
lapack_int * tsize, lapack_complex_float * c, lapack_int * ldc,
lapack_complex_float * work, lapack_int * lwork, lapack_int * info);
multiply by Q from an LQ factorization 🎀 a and t are both const (they're the representation, we're just vibing off them 💅), c on ldc is what gets multiplied, side and trans decide which side and whether it's Q or Q-transposed, tsize, work, lwork, info 🫶
LAPACK_cgemqr
void LAPACK_cgemqr (char * side, char * trans, lapack_int * m, lapack_int * n, lapack_int * k,
const lapack_complex_float * a, lapack_int * lda, const lapack_complex_float * t,
lapack_int * tsize, lapack_complex_float * c, lapack_int * ldc,
lapack_complex_float * work, lapack_int * lwork, lapack_int * info);
exact same shape as cgemlq but for Q out of a QR factorization ✨ const a and t, writable c, tsize, work, lwork, info. If you've read one you've basically read the other, but they are Not The Same Function, ok 😤
LAPACK_cgemqrt
void LAPACK_cgemqrt (char * side, char * trans, lapack_int * m, lapack_int * n, lapack_int * k,
lapack_int * nb, const lapack_complex_float * v, lapack_int * ldv,
const lapack_complex_float * t, lapack_int * ldt, lapack_complex_float * c,
lapack_int * ldc, lapack_complex_float * work, lapack_int * info);
the blocked one — extra nb for block size, and the representation is v (ldv) + t (ldt) 🦋 both const, c on ldc is the thing being multiplied, work is there but there's no lwork and honestly? slay 💅 info finishes it off 🍓
LAPACK_cgeqlf
void LAPACK_cgeqlf (lapack_int * m, lapack_int * n, lapack_complex_float * a, lapack_int * lda,
lapack_complex_float * tau, lapack_complex_float * work, lapack_int * lwork,
lapack_int * info);
QL factorization 🎀 a on lda, tau gets the elementary reflectors, work with lwork, info reports. Note the name: geqlf — QL, not LQ, don't mix them up bestie 😭
LAPACK_cgeqp3
void LAPACK_cgeqp3 (lapack_int * m, lapack_int * n, lapack_complex_float * a, lapack_int * lda,
lapack_int * jpvt, lapack_complex_float * tau, lapack_complex_float * work,
lapack_int * lwork, float * rwork, lapack_int * info);
QR with column pivoting, the iconic version 👑 jpvt on entry says what's fixed, comes back as the pivots, tau gets the reflectors, complex work with lwork, and — surprise! — a float rwork too, plus info 💖
and that's this chunk 🌈 the pattern kinda writes itself at this point: job flags and descriptors first, matrices and their leading dims next, scratch (work/rwork/iwork/lwork/lrwork/tsize) after, and info always bringing up the rear 💅 next batch incoming 🫶
Okay so these next ones are all the c-flavoured prototypes, still marching along alphabetically, and honestly? The way this list just keeps going is giving "the compiler's gonna need a snack" energy. Every signature below is verbatim, pointers and all — I'm not touching a single asterisk. 💅
LAPACK_cgeqpf
void LAPACK_cgeqpf (lapack_int * m, lapack_int * n, lapack_complex_float * a, lapack_int * lda, lapack_int * jpvt, lapack_complex_float * tau, lapack_complex_float * work, float * rwork, lapack_int * info)
Nine-ish args, one lonely float * tucked in among all the lapack_complex_float — she's got a little rwork sidekick and we respect it. 🫶
LAPACK_cgeqr
void LAPACK_cgeqr (lapack_int * m, lapack_int * n, lapack_complex_float * a, lapack_int * lda, lapack_complex_float * t, lapack_int * tsize, lapack_complex_float * work, lapack_int * lwork, lapack_int * info)
Not me spotting both tsize and lwork in here — two sizes, two mood boards, zero notes. ✨
LAPACK_cgeqr2
void LAPACK_cgeqr2 (lapack_int * m, lapack_int * n, lapack_complex_float * a, lapack_int * lda, lapack_complex_float * tau, lapack_complex_float * work, lapack_int * info)
The 2 version, lowkey shorter — no lwork bestie on this one, work just shows up uninvited and we love that for her.
LAPACK_cgeqrf
void LAPACK_cgeqrf (lapack_int * m, lapack_int * n, lapack_complex_float * a, lapack_int * lda, lapack_complex_float * tau, lapack_complex_float * work, lapack_int * lwork, lapack_int * info)
The classic. Same roster as cgeqr2 but now lwork pulled up, main character energy fr fr.
LAPACK_cgeqrfp
void LAPACK_cgeqrfp (lapack_int * m, lapack_int * n, lapack_complex_float * a, lapack_int * lda, lapack_complex_float * tau, lapack_complex_float * work, lapack_int * lwork, lapack_int * info)
cgeqrf with one extra letter stapled on the end and the exact same parameter list — the twin that showed up in a slightly different outfit. 💀
LAPACK_cgeqrt
void LAPACK_cgeqrt (lapack_int * m, lapack_int * n, lapack_int * nb, lapack_complex_float * a, lapack_int * lda, lapack_complex_float * t, lapack_int * ldt, lapack_complex_float * work, lapack_int * info)
Hiiii nb and ldt, newcomers, love the confidence. Iconic of them to just squeeze into the argument list like they own the place.
LAPACK_cgeqrt2
void LAPACK_cgeqrt2 (lapack_int * m, lapack_int * n, lapack_complex_float * a, lapack_int * lda, lapack_complex_float * t, lapack_int * ldt, lapack_int * info)
Minimalist queen — work didn't even get an invite, info is literally the last one standing. 🌸
LAPACK_cgeqrt3
void LAPACK_cgeqrt3 (lapack_int * m, lapack_int * n, lapack_complex_float * a, lapack_int * lda, lapack_complex_float * t, lapack_int * ldt, lapack_int * info)
Same lineup as cgeqrt2, different number, different plot twist. Not me double-checking that character by character — I did, diva, I did. 😭
LAPACK_cgerfs
void LAPACK_cgerfs (char * trans, lapack_int * n, lapack_int * nrhs, const lapack_complex_float * a, lapack_int * lda, const lapack_complex_float * af, lapack_int * ldaf, const lapack_int * ipiv, const lapack_complex_float * b, lapack_int * ldb, lapack_complex_float * x, lapack_int * ldx, float * ferr, float * berr, lapack_complex_float * work, float * rwork, lapack_int * info)
Oh she's fancy — const all over the inputs like a bouncer at the club, and both ferr and berr showed up to the function. Spoiled tbh. 🔥
LAPACK_cgerfsx
void LAPACK_cgerfsx (char * trans, char * equed, lapack_int * n, lapack_int * nrhs, const lapack_complex_float * a, lapack_int * lda, const lapack_complex_float * af, lapack_int * ldaf, const lapack_int * ipiv, const float * r, const float * c, const lapack_complex_float * b, lapack_int * ldb, lapack_complex_float * x, lapack_int * ldx, float * rcond, float * berr, lapack_int * n_err_bnds, float * err_bnds_norm, float * err_bnds_comp, lapack_int * nparams, float * params, lapack_complex_float * work, float * rwork, lapack_int * info)
The x suffix ate so hard on the parameter count — equed, r, c, rcond, n_err_bnds, err_bnds_norm, err_bnds_comp, nparams, params… bestie this is a whole guest list, not a function signature. 🎀
LAPACK_cgerqf
void LAPACK_cgerqf (lapack_int * m, lapack_int * n, lapack_complex_float * a, lapack_int * lda, lapack_complex_float * tau, lapack_complex_float * work, lapack_int * lwork, lapack_int * info)
Note the r and the f did a little swap-dance compared to cgeqrf — same args, different name, and I'm obsessed that they just did that. 🦋
LAPACK_cgesdd
void LAPACK_cgesdd (char * jobz, lapack_int * m, lapack_int * n, lapack_complex_float * a, lapack_int * lda, float * s, lapack_complex_float * u, lapack_int * ldu, lapack_complex_float * vt, lapack_int * ldvt, lapack_complex_float * work, lapack_int * lwork, float * rwork, lapack_int * iwork, lapack_int * info)
jobz, s, u, vt — she brought the whole ensemble cast, including an iwork that's lapack_int not float, tyvm. ⭐
LAPACK_cgesv
void LAPACK_cgesv (lapack_int * n, lapack_int * nrhs, lapack_complex_float * a, lapack_int * lda, lapack_int * ipiv, lapack_complex_float * b, lapack_int * ldb, lapack_int * info)
Short, sweet, eight args, no work, no nonsense. A little palate cleanser after cgesdd, honestly. 🌈
LAPACK_cgesvd
void LAPACK_cgesvd (char * jobu, char * jobvt, lapack_int * m, lapack_int * n, lapack_complex_float * a, lapack_int * lda, float * s, lapack_complex_float * u, lapack_int * ldu, lapack_complex_float * vt, lapack_int * ldvt, lapack_complex_float * work, lapack_int * lwork, float * rwork, lapack_int * info)
Two separate job chars here (jobu and jobvt) instead of one jobz — different vibe, same icon behaviour. 💜
LAPACK_cgesvdx
void LAPACK_cgesvdx (char * jobu, char * jobvt, char * range, lapack_int * m, lapack_int * n, lapack_complex_float * a, lapack_int * lda, float * vl, float * vu, lapack_int * il, lapack_int * iu, lapack_int * ns, float * s, lapack_complex_float * u, lapack_int * ldu, lapack_complex_float * vt, lapack_int * ldvt, lapack_complex_float * work, lapack_int * lwork, float * rwork, lapack_int * iwork, lapack_int * info)
range, vl, vu, il, iu, ns — she said "I want options" and honestly? She got them. Not a single lwork-less thought in that head. 🔥
LAPACK_cgesvj
void LAPACK_cgesvj (char * joba, char * jobu, char * jobv, lapack_int * m, lapack_int * n, lapack_complex_float * a, lapack_int * lda, float * sva, lapack_int * mv, lapack_complex_float * v, lapack_int * ldv, lapack_complex_float * cwork, lapack_int * lwork, float * rwork, lapack_int * lrwork, lapack_int * info)
THREE job chars (joba, jobu, jobv) and a cwork instead of a plain old work?? She's extra and she's earned it. lrwork is there too, matching rwork. 💅
LAPACK_cgesvx
void LAPACK_cgesvx (char * fact, char * trans, lapack_int * n, lapack_int * nrhs, lapack_complex_float * a, lapack_int * lda, lapack_complex_float * af, lapack_int * ldaf, lapack_int * ipiv, char * equed, float * r, float * c, lapack_complex_float * b, lapack_int * ldb, lapack_complex_float * x, lapack_int * ldx, float * rcond, float * ferr, float * berr, lapack_complex_float * work, float * rwork, lapack_int * info)
fact and trans and equed — three chars before we even hit the numbers, it's giving opening credits sequence. 🎬
LAPACK_cgesvxx
void LAPACK_cgesvxx (char * fact, char * trans, lapack_int * n, lapack_int * nrhs, lapack_complex_float * a, lapack_int * lda, lapack_complex_float * af, lapack_int * ldaf, lapack_int * ipiv, char * equed, float * r, float * c, lapack_complex_float * b, lapack_int * ldb, lapack_complex_float * x, lapack_int * ldx, float * rcond, float * rpvgrw, float * berr, lapack_int * n_err_bnds, float * err_bnds_norm, float * err_bnds_comp, lapack_int * nparams, float * params, lapack_complex_float * work, float * rwork, lapack_int * info)
Double-x means double trouble: rpvgrw slid in where ferr used to be, plus the whole err_bnds/params entourage. She's the loud one and she's thriving. 😭
LAPACK_cgetf2
void LAPACK_cgetf2 (lapack_int * m, lapack_int * n, lapack_complex_float * a, lapack_int * lda, lapack_int * ipiv, lapack_int * info)
Six args, tiny, adorable, gets the job done. A snack. 🍓
LAPACK_cgetrf
void LAPACK_cgetrf (lapack_int * m, lapack_int * n, lapack_complex_float * a, lapack_int * lda, lapack_int * ipiv, lapack_int * info)
Character-for-character the same as cgetf2 above, and no I will not be normal about two differently-named things having identical signatures. 🦋
LAPACK_cgetrf2
void LAPACK_cgetrf2 (lapack_int * m, lapack_int * n, lapack_complex_float * a, lapack_int * lda, lapack_int * ipiv, lapack_int * info)
Three of a kind, all with m, n, a, lda, ipiv, info. The matching-set energy is immaculate. ✨
LAPACK_cgetri
void LAPACK_cgetri (lapack_int * n, lapack_complex_float * a, lapack_int * lda, const lapack_int * ipiv, lapack_complex_float * work, lapack_int * lwork, lapack_int * info)
Hiii const lapack_int * ipiv — she's read-only now, boundaries set, work and lwork back on the roster. We stan a growth arc. 🌱
LAPACK_cgetrs
void LAPACK_cgetrs (char * trans, lapack_int * n, lapack_int * nrhs, const lapack_complex_float * a, lapack_int * lda, const lapack_int * ipiv, lapack_complex_float * b, lapack_int * ldb, lapack_int * info)
No work, no lwork, no problems. Just trans, n, nrhs, and a deeply const-coded cast. Clean. 🌸
LAPACK_cgetsls
void LAPACK_cgetsls (char * trans, lapack_int * m, lapack_int * n, lapack_int * nrhs, lapack_complex_float * a, lapack_int * lda, lapack_complex_float * b, lapack_int * ldb, lapack_complex_float * work, lapack_int * lwork, lapack_int * info)
She's got m and n and nrhs — the full trio — and none of them are const. Bold. We respect it. 💜
LAPACK_cggbak
void LAPACK_cggbak (char * job, char * side, lapack_int * n, lapack_int * ilo, lapack_int * ihi, const float * lscale, const float * rscale, lapack_int * m, lapack_complex_float * v, lapack_int * ldv, lapack_int * info)
Oh we've hit the cgg era, besties — and she starts it with job, side, ilo, ihi, plus two const scales (lscale, rscale). Symmetry, my beloved. ⚖️
LAPACK_cggbal
void LAPACK_cggbal (char * job, lapack_int * n, lapack_complex_float * a, lapack_int * lda, lapack_complex_float * b, lapack_int * ldb, lapack_int * ilo, lapack_int * ihi, float * lscale, float * rscale, float * work, lapack_int * info)
Same lscale/rscale duo but not const this time — the glow-up is them becoming writable. Also ilo/ihi are back, hi angels. 🎀
LAPACK_cgges
void LAPACK_cgges (char * jobvsl, char * jobvsr, char * sort, LAPACK_C_SELECT2 selctg, lapack_int * n, lapack_complex_float * a, lapack_int * lda, lapack_complex_float * b, lapack_int * ldb, lapack_int * sdim, lapack_complex_float * alpha, lapack_complex_float * beta, lapack_complex_float * vsl, lapack_int * ldvsl, lapack_complex_float * vsr, lapack_int * ldvsr, lapack_complex_float * work, lapack_int * lwork, float * rwork, lapack_logical * bwork, lapack_int * info)
BIG one. We got jobvsl, jobvsr, sort, a whole LAPACK_C_SELECT2 selctg passed by value, the alpha/beta twins, vsl/vsr, and — plot twist — a lapack_logical * bwork. Bookmark this lineup, the next two are variations on it. 👑
LAPACK_cgges3
void LAPACK_cgges3 (char * jobvsl, char * jobvsr, char * sort, LAPACK_C_SELECT2 selctg, lapack_int * n, lapack_complex_float * a, lapack_int * lda, lapack_complex_float * b, lapack_int * ldb, lapack_int * sdim, lapack_complex_float * alpha, lapack_complex_float * beta, lapack_complex_float * vsl, lapack_int * ldvsl, lapack_complex_float * vsr, lapack_int * ldvsr, lapack_complex_float * work, lapack_int * lwork, float * rwork, lapack_logical * bwork, lapack_int * info)
Identical parameter-for-parameter to cgges — the 3 is doing all the differentiating work here and honestly, same. 😭
LAPACK_cggesx
void LAPACK_cggesx (char * jobvsl, char * jobvsr, char * sort, LAPACK_C_SELECT2 selctg, char * sense, lapack_int * n, lapack_complex_float * a, lapack_int * lda, lapack_complex_float * b, lapack_int * ldb, lapack_int * sdim, lapack_complex_float * alpha, lapack_complex_float * beta, lapack_complex_float * vsl, lapack_int * ldvsl, lapack_complex_float * vsr, lapack_int * ldvsr, float * rconde, float * rcondv, lapack_complex_float * work, lapack_int * lwork, float * rwork, lapack_int * iwork, lapack_int * liwork, lapack_logical * bwork, lapack_int * info)
The x version said "add sense" and then also "add rconde, rcondv, iwork, and liwork" — ma'am that's not a tweak, that's a renovation. 💀
LAPACK_cggev
void LAPACK_cggev (char * jobvl, char * jobvr, lapack_int * n, lapack_complex_float * a, lapack_int * lda, lapack_complex_float * b, lapack_int * ldb, lapack_complex_float * alpha, lapack_complex_float * beta, lapack_complex_float * vl, lapack_int * ldvl, lapack_complex_float * vr, lapack_int * ldvr, lapack_complex_float * work, lapack_int * lwork, float * rwork, lapack_int * info)
Swapped the vsl/vsr naming for vl/vr, dropped sort/selctg/sdim/bwork entirely. A whole new era, a whole new silhouette. 🦋
LAPACK_cggev3
void LAPACK_cggev3 (char * jobvl, char * jobvr, lapack_int * n, lapack_complex_float * a, lapack_int * lda, lapack_complex_float * b, lapack_int * ldb, lapack_complex_float * alpha, lapack_complex_float * beta, lapack_complex_float * vl, lapack_int * ldvl, lapack_complex_float * vr, lapack_int * ldvr, lapack_complex_float * work, lapack_int * lwork, float * rwork, lapack_int * info)
Yup, exactly cggev with a 3 on the name. The LAPACK naming committee was like "close enough" and honestly? Same. 💅
LAPACK_cggevx
void LAPACK_cggevx (char * balanc, char * jobvl, char * jobvr, char * sense, lapack_int * n, lapack_complex_float * a, lapack_int * lda, lapack_complex_float * b, lapack_int * ldb, lapack_complex_float * alpha, lapack_complex_float * beta, lapack_complex_float * vl, lapack_int * ldvl, lapack_complex_float * vr, lapack_int * ldvr, lapack_int * ilo, lapack_int * ihi, float * lscale, float * rscale, float * abnrm, float * bbnrm, float * rconde, float * rcondv, lapack_complex_float * work, lapack_int * lwork, float * rwork, lapack_int * iwork, lapack_logical * bwork, lapack_int * info)
FOUR leading chars (balanc, jobvl, jobvr, sense) and then ilo, ihi, lscale, rscale, abnrm, bbnrm, rconde, rcondv… she is the longest girl here and she knows it. Absolute unit. 🔥
LAPACK_cggglm
void LAPACK_cggglm (lapack_int * n, lapack_int * m, lapack_int * p, lapack_complex_float * a, lapack_int * lda, lapack_complex_float * b, lapack_int * ldb, lapack_complex_float * d, lapack_complex_float * x, lapack_complex_float * y, lapack_complex_float * work, lapack_int * lwork, lapack_int * info)
⚠️ PSA bestie: this one starts with n, then m, then p — not m, n. Order matters, don't get cute with it, copy it exactly. 🙈
LAPACK_cgghd3
void LAPACK_cgghd3 (char * compq, char * compz, lapack_int * n, lapack_int * ilo, lapack_int * ihi, lapack_complex_float * a, lapack_int * lda, lapack_complex_float * b, lapack_int * ldb, lapack_complex_float * q, lapack_int * ldq, lapack_complex_float * z, lapack_int * ldz, lapack_complex_float * work, lapack_int * lwork, lapack_int * info)
compq + compz + q + z — she really said "what if there were two of everything" and honestly the ldq/ldz matching pair is so satisfying. 😌
LAPACK_cgghrd
void LAPACK_cgghrd (char * compq, char * compz, lapack_int * n, lapack_int * ilo, lapack_int * ihi, lapack_complex_float * a, lapack_int * lda, lapack_complex_float * b, lapack_int * ldb, lapack_complex_float * q, lapack_int * ldq, lapack_complex_float * z, lapack_int * ldz, lapack_int * info)
cgghd3 minus work, minus lwork — the stripped-down edit of the same fit. Still serving. 🧚
LAPACK_cgglse
void LAPACK_cgglse (lapack_int * m, lapack_int * n, lapack_int * p, lapack_complex_float * a, lapack_int * lda, lapack_complex_float * b, lapack_int * ldb, lapack_complex_float * c, lapack_complex_float * d, lapack_complex_float * x, lapack_complex_float * work, lapack_int * lwork, lapack_int * info)
Okay and here the order is m, n, p — so yes, cgglse and cggglm really do flip those first two around, which is exactly the kind of chaos that makes you triple-check before you press enter. 🌈
LAPACK_cggqrf
void LAPACK_cggqrf (lapack_int * n, lapack_int * m, lapack_int * p, lapack_complex_float * a, lapack_int * lda, lapack_complex_float * taua, lapack_complex_float * b, lapack_int * ldb, lapack_complex_float * taub,
And we end the chunk on a cliffhanger — taub's line literally trails off mid-sentence, no info, no closing paren, nothing. 😭 She's mid-tau, bestie. The rest of her is waiting in the next bit, so hold that thought and don't you dare close the paren for her. 🫶
okay bestie we're still deep in the prototype list and honestly? iconic of us. these are all void-returning, all pointer-argument, all lapack_int-coded — so keep your eyes on the stars and your info pointer close. 💫
void LAPACK_cggrqf (lapack_int * m, lapack_int * p, lapack_int * n,
lapack_complex_float * a, lapack_int * lda, lapack_complex_float * taua,
lapack_complex_float * b, lapack_int * ldb, lapack_complex_float * taub,
lapack_complex_float * work, lapack_int * lwork, lapack_int * info)
cggrqf said "I contain multitudes" and honestly it does — m, p, n, two matrices, two tau vectors. we love a maximalist. 💅
void LAPACK_cggsvd (char * jobu, char * jobv, char * jobq, lapack_int * m,
lapack_int * n, lapack_int * p, lapack_int * k, lapack_int * l,
lapack_complex_float * a, lapack_int * lda, lapack_complex_float * b,
lapack_int * ldb, float * alpha, float * beta, lapack_complex_float * u,
lapack_int * ldu, lapack_complex_float * v, lapack_int * ldv,
lapack_complex_float * q, lapack_int * ldq, lapack_complex_float * work,
float * rwork, lapack_int * iwork, lapack_int * info)
the OG gsvd — alpha, beta, three job chars, and yes we're still mad about k and l both existing. no notes, just vibes. 🌸
void LAPACK_cggsvd3 (char * jobu, char * jobv, char * jobq, lapack_int * m,
lapack_int * n, lapack_int * p, lapack_int * k, lapack_int * l,
lapack_complex_float * a, lapack_int * lda, lapack_complex_float * b,
lapack_int * ldb, float * alpha, float * beta, lapack_complex_float * u,
lapack_int * ldu, lapack_complex_float * v, lapack_int * ldv,
lapack_complex_float * q, lapack_int * ldq, lapack_complex_float * work,
lapack_int * lwork, float * rwork, lapack_int * iwork, lapack_int *
info)
same energy, but bestie got an upgrade — lwork has entered the chat. glow-up era. ✨
void LAPACK_cggsvp (char * jobu, char * jobv, char * jobq, lapack_int * m,
lapack_int * p, lapack_int * n, lapack_complex_float * a, lapack_int *
lda, lapack_complex_float * b, lapack_int * ldb, float * tola, float *
tolb, lapack_int * k, lapack_int * l, lapack_complex_float * u,
lapack_int * ldu, lapack_complex_float * v, lapack_int * ldv,
lapack_complex_float * q, lapack_int * ldq, lapack_int * iwork, float *
rwork, lapack_complex_float * tau, lapack_complex_float * work,
lapack_int * info)
tola and tolb said "we're the tolerance girlies" and stepped out. twelve-plus args, zero regrets. 🎀
void LAPACK_cggsvp3 (char * jobu, char * jobv, char * jobq, lapack_int * m,
lapack_int * p, lapack_int * n, lapack_complex_float * a, lapack_int *
lda, lapack_complex_float * b, lapack_int * ldb, float * tola, float *
tolb, lapack_int * k, lapack_int * l, lapack_complex_float * u,
lapack_int * ldu, lapack_complex_float * v, lapack_int * ldv,
lapack_complex_float * q, lapack_int * ldq, lapack_int * iwork, float *
rwork, lapack_complex_float * tau, lapack_complex_float * work,
lapack_int * lwork, lapack_int * info)
bestie got the lwork treatment too. cggsvp3 walked so the rest of the …3 variants could RUN. 🏃♀️
now we're in tridiagonal territory and the names start getting cozy with each other:
void LAPACK_cgtcon (char * norm, lapack_int * n, const lapack_complex_float
* dl, const lapack_complex_float * d, const lapack_complex_float * du,
const lapack_complex_float * du2, const lapack_int * ipiv, float *
anorm, float * rcond, lapack_complex_float * work, lapack_int * info)
dl, d, du, du2 — a whole little tridiagonal family reunion, plus ipiv being the main character as always. ✨
void LAPACK_cgtrfs (char * trans, lapack_int * n, lapack_int * nrhs, const
lapack_complex_float * dl, const lapack_complex_float * d, const
lapack_complex_float * du, const lapack_complex_float * dlf, const
lapack_complex_float * df, const lapack_complex_float * duf, const
lapack_complex_float * du2, const lapack_int * ipiv, const
lapack_complex_float * b, lapack_int * ldb, lapack_complex_float * x,
lapack_int * ldx, float * ferr, float * berr, lapack_complex_float *
work, float * rwork, lapack_int * info)
the f suffix crew (dlf, df, duf) said "we're the factorized versions, say my name" and honestly? they ate. ferr and berr are the error-estimator besties. 🫶
void LAPACK_cgtsv (lapack_int * n, lapack_int * nrhs, lapack_complex_float *
dl, lapack_complex_float * d, lapack_complex_float * du,
lapack_complex_float * b, lapack_int * ldb, lapack_int * info)
short, sweet, no lwork in sight — a minimalist queen. lowkey refreshing tbh. 💜
void LAPACK_cgtsvx (char * fact, char * trans, lapack_int * n, lapack_int *
nrhs, const lapack_complex_float * dl, const lapack_complex_float * d,
const lapack_complex_float * du, lapack_complex_float * dlf,
lapack_complex_float * df, lapack_complex_float * duf,
lapack_complex_float * du2, lapack_int * ipiv, const
lapack_complex_float * b, lapack_int * ldb, lapack_complex_float * x,
lapack_int * ldx, float * rcond, float * ferr, float * berr,
lapack_complex_float * work, float * rwork, lapack_int * info)
the expert driver (the x at the end is literally giving "I did my homework"). fact, trans, rcond, ferr, berr — a whole entourage. 💅
void LAPACK_cgttrf (lapack_int * n, lapack_complex_float * dl,
lapack_complex_float * d, lapack_complex_float * du,
lapack_complex_float * du2, lapack_int * ipiv, lapack_int * info)
factorization time!! note that dl, d, du, du2 and ipiv are all not const here — they get written to, bestie, that's the whole point. 👑
void LAPACK_cgttrs (char * trans, lapack_int * n, lapack_int * nrhs, const
lapack_complex_float * dl, const lapack_complex_float * d, const
lapack_complex_float * du, const lapack_complex_float * du2, const
lapack_int * ipiv, lapack_complex_float * b, lapack_int * ldb,
lapack_int * info)
and now everything's const because the solve step is a read-only queen. b and ldb are the only ones getting touched. 🙈
okay band-matrix arc, let's go. hbev means Hermitian band eigenvalues and the _2stage girlies are here too:
void LAPACK_chbev (char * jobz, char * uplo, lapack_int * n, lapack_int *
kd, lapack_complex_float * ab, lapack_int * ldab, float * w,
lapack_complex_float * z, lapack_int * ldz, lapack_complex_float * work,
float * rwork, lapack_int * info)
kd = the bandwidth, ab = the band storage, w = the eigenvalues, z = the eigenvectors. a classic lineup we stan. 🌟
void LAPACK_chbev_2stage (char * jobz, char * uplo, lapack_int * n,
lapack_int * kd, lapack_complex_float * ab, lapack_int * ldab, float *
w, lapack_complex_float * z, lapack_int * ldz, lapack_complex_float *
work, lapack_int * lwork, float * rwork, lapack_int * info)
two-stage version said "I need lwork actually" and we respect a girl who knows her needs. ✨
void LAPACK_chbevd (char * jobz, char * uplo, lapack_int * n, lapack_int *
kd, lapack_complex_float * ab, lapack_int * ldab, float * w,
lapack_complex_float * z, lapack_int * ldz, lapack_complex_float * work,
lapack_int * lwork, float * rwork, lapack_int * lrwork, lapack_int *
iwork, lapack_int * liwork, lapack_int * info)
the d means divide-and-conquer and the workspace count DOUBLES: lwork, lrwork, liwork. she brought luggage. 🧳
void LAPACK_chbevd_2stage (char * jobz, char * uplo, lapack_int * n,
lapack_int * kd, lapack_complex_float * ab, lapack_int * ldab, float *
w, lapack_complex_float * z, lapack_int * ldz, lapack_complex_float *
work, lapack_int * lwork, float * rwork, lapack_int * lrwork, lapack_int
* iwork, lapack_int * liwork, lapack_int * info)
same luggage, extra stage. truly the "and I took that personally" of eigenvalue routines. 💀
void LAPACK_chbevx (char * jobz, char * range, char * uplo, lapack_int * n,
lapack_int * kd, lapack_complex_float * ab, lapack_int * ldab,
lapack_complex_float * q, lapack_int * ldq, float * vl, float * vu,
lapack_int * il, lapack_int * iu, float * abstol, lapack_int * m, float
* w, lapack_complex_float * z, lapack_int * ldz, lapack_complex_float *
work, float * rwork, lapack_int * iwork, lapack_int * ifail, lapack_int
* info)
range, vl, vu, il, iu, abstol, m, ifail — this one is the full expert-driver deluxe package with a side of ifail. that's a lot of lowercase letters and every single one matters. 🎯
void LAPACK_chbevx_2stage (char * jobz, char * range, char * uplo,
lapack_int * n, lapack_int * kd, lapack_complex_float * ab, lapack_int *
ldab, lapack_complex_float * q, lapack_int * ldq, float * vl, float *
vu, lapack_int * il, lapack_int * iu, float * abstol, lapack_int * m,
float * w, lapack_complex_float * z, lapack_int * ldz,
lapack_complex_float * work, lapack_int * lwork, float * rwork,
lapack_int * iwork, lapack_int * ifail, lapack_int * info)
same deluxe package, plus lwork because of course. the two-stage girlies never travel light. 👜
generalized band problems now, so obviously there's bb (the B matrix) in the mix:
void LAPACK_chbgst (char * vect, char * uplo, lapack_int * n, lapack_int *
ka, lapack_int * kb, lapack_complex_float * ab, lapack_int * ldab, const
lapack_complex_float * bb, lapack_int * ldbb, lapack_complex_float * x,
lapack_int * ldx, lapack_complex_float * work, float * rwork, lapack_int
* info)
two bandwidths ka and kb, two leading dimensions ldab and ldbb — and note bb is const while ab is not. she's reading from B and writing to A, iykyk. 📚
void LAPACK_chbgv (char * jobz, char * uplo, lapack_int * n, lapack_int *
ka, lapack_int * kb, lapack_complex_float * ab, lapack_int * ldab,
lapack_complex_float * bb, lapack_int * ldbb, float * w,
lapack_complex_float * z, lapack_int * ldz, lapack_complex_float * work,
float * rwork, lapack_int * info)
eigenvalues AND eigenvectors for the generalized band problem, no lwork though — old-school and unbothered. 🦋
void LAPACK_chbgvd (char * jobz, char * uplo, lapack_int * n, lapack_int *
ka, lapack_int * kb, lapack_complex_float * ab, lapack_int * ldab,
lapack_complex_float * bb, lapack_int * ldbb, float * w,
lapack_complex_float * z, lapack_int * ldz, lapack_complex_float * work,
lapack_int * lwork, float * rwork, lapack_int * lrwork, lapack_int *
iwork, lapack_int * liwork, lapack_int * info)
divide-and-conquer generalized band edition. four workspace pointers: work, lwork, rwork, lrwork, iwork, liwork — okay that's six, she's highkey extra and we love her for it. 🌈
void LAPACK_chbgvx (char * jobz, char * range, char * uplo, lapack_int * n,
lapack_int * ka, lapack_int * kb, lapack_complex_float * ab, lapack_int
* ldab, lapack_complex_float * bb, lapack_int * ldbb,
lapack_complex_float * q, lapack_int * ldq, float * vl, float * vu,
lapack_int * il, lapack_int * iu, float * abstol, lapack_int * m, float
* w, lapack_complex_float * z, lapack_int * ldz, lapack_complex_float *
work, float * rwork, lapack_int * iwork, lapack_int * ifail, lapack_int
* info)
the full expert generalized band driver. q, ldq, ifail — it's giving "I have every parameter and I'm not sorry". 🔥
void LAPACK_chbtrd (char * vect, char * uplo, lapack_int * n, lapack_int *
kd, lapack_complex_float * ab, lapack_int * ldab, float * d, float * e,
lapack_complex_float * q, lapack_int * ldq, lapack_complex_float * work,
lapack_int * info)
d and e — the diagonal and off-diagonal girlies — plus q for the orthogonal factor if vect says so. no lwork, just vibes. 🍓
and now the he* section, aka Hermitian full-storage, aka my personal fave:
void LAPACK_checon (char * uplo, lapack_int * n, const lapack_complex_float
* a, lapack_int * lda, const lapack_int * ipiv, float * anorm, float *
rcond, lapack_complex_float * work, lapack_int * info)
condition-number estimator. anorm and rcond in, rcond out. a and ipiv are const — she's just looking, not touching. 👀
void LAPACK_checon_3 (char * uplo, lapack_int * n, const
lapack_complex_float * a, lapack_int * lda, const lapack_complex_float *
e, const lapack_int * ipiv, float * anorm, float * rcond,
lapack_complex_float * work, lapack_int * info)
the _3 variant brought a whole extra const lapack_complex_float * e to the function. upgrades, bestie. ✨
void LAPACK_cheequb (char * uplo, lapack_int * n, const lapack_complex_float
* a, lapack_int * lda, float * s, float * scond, float * amax,
lapack_complex_float * work, lapack_int * info)
equb = equilibration, and it hands you s, scond, and amax. scaling queen behavior, honestly. 🎀
void LAPACK_cheev (char * jobz, char * uplo, lapack_int * n,
lapack_complex_float * a, lapack_int * lda, float * w,
lapack_complex_float * work, lapack_int * lwork, float * rwork,
lapack_int * info)
the classic. jobz, uplo, a, lda, w, work, lwork, rwork, info. she's simple, she's reliable, she's iconic. 👑
void LAPACK_cheev_2stage (char * jobz, char * uplo, lapack_int * n,
lapack_complex_float * a, lapack_int * lda, float * w,
lapack_complex_float * work, lapack_int * lwork, float * rwork,
lapack_int * info)
wait. same signature?? yes bestie, the two-stage magic is internal. no cap. 🪄
void LAPACK_cheevd (char * jobz, char * uplo, lapack_int * n,
lapack_complex_float * a, lapack_int * lda, float * w,
lapack_complex_float * work, lapack_int * lwork, float * rwork,
lapack_int * lrwork, lapack_int * iwork, lapack_int * liwork, lapack_int
* info)
divide-and-conquer: add lrwork, iwork, liwork to the guest list. the party got bigger and the workspace got real. 🎉
void LAPACK_cheevd_2stage (char * jobz, char * uplo, lapack_int * n,
lapack_complex_float * a, lapack_int * lda, float * w,
lapack_complex_float * work, lapack_int * lwork, float * rwork,
lapack_int * lrwork, lapack_int * iwork, lapack_int * liwork, lapack_int
* info)
again, identical signature to its non-2stage sibling. the difference lives under the hood and honestly? mysterious. we love a private life. 🤫
void LAPACK_cheevr (char * jobz, char * range, char * uplo, lapack_int * n,
lapack_complex_float * a, lapack_int * lda, float * vl, float * vu,
lapack_int * il, lapack_int * iu, float * abstol, lapack_int * m, float
* w, lapack_complex_float * z, lapack_int * ldz, lapack_int * isuppz,
lapack_complex_float * work, lapack_int * lwork, float * rwork,
lapack_int * lrwork, lapack_int * iwork, lapack_int * liwork, lapack_int
* info)
MRRR algorithm checkpoint!! note isuppz — that's the support array and it is literally the main character of this signature. range, vl, vu, il, iu, abstol, m — the whole selection crew is present. 🌟
void LAPACK_cheevr_2stage (char * jobz, char * range, char * uplo,
lapack_int * n, lapack_complex_float * a, lapack_int * lda, float * vl,
float * vu, lapack_int * il, lapack_int * iu, float * abstol, lapack_int
* m, float * w, lapack_complex_float * z, lapack_int * ldz, lapack_int *
isuppz, lapack_complex_float * work, lapack_int * lwork, float * rwork,
lapack_int * lrwork, lapack_int * iwork, lapack_int * liwork, lapack_int
* info)
same deal, extra stage, isuppz still holding it down. periodt. 💅
void LAPACK_cheevx (char * jobz, char * range, char * uplo, lapack_int * n,
lapack_complex_float * a, lapack_int * lda, float * vl, float * vu,
lapack_int * il, lapack_int * iu, float * abstol, lapack_int * m, float
* w, lapack_complex_float * z, lapack_int * ldz, lapack_complex_float *
work, lapack_int * lwork, float * rwork, lapack_int * iwork, lapack_int
okay that one's signature is literally still typing, so we're gonna let her finish her sentence in the next part — no spoilers, no guessing, we do NOT invent parameters in this house. 🫶 waiting patiently like a good bestie.
reminder for the girlies: every one of these isvoid, every array argument is a raw pointer, and every one of them has a trailinglapack_int * info— except when a signature is mid-cut, in which case we just wait. do not assume, do not fill in blanks, do not passNULLto something you didn't read the rest of. love u, mean it. 💖
still going, obviously. next part continues right where cheevx left off — no goodbyes. 🦋
...and we're back, mid-signature, no shame 💅 the last one from before wraps up like this:
* ifail, lapack_int * info)
okay now the new stuff, and bestie, it's giving two-stage energy:
void LAPACK_cheevx_2stage (char * jobz, char * range, char * uplo,
lapack_int * n, lapack_complex_float * a, lapack_int * lda, float * vl,
float * vu, lapack_int * il, lapack_int * iu, float * abstol, lapack_int
* m, float * w, lapack_complex_float * z, lapack_int * ldz,
lapack_complex_float * work, lapack_int * lwork, float * rwork,
lapack_int * iwork, lapack_int * ifail, lapack_int * info)
look at that parameter list. jobz, range, uplo, then vl, vu, il, iu, abstol. it's literally the whole squad: job, range, triangle, bounds, tolerance, output count m, the works. and then rwork, iwork, ifail, info holding down the end like the last three friends squeezing into a photo 📸
🦋 the cheg era (generalized, obviously)
next up, the cheg-prefixed gang — chegst, chegv, chegv_2stage, chegvd, chegvx. note the itype at the front of most of them, and that chegst is the chill one that just takes a, b and dips 🫶
void LAPACK_chegst (lapack_int * itype, char * uplo, lapack_int * n,
lapack_complex_float * a, lapack_int * lda, const lapack_complex_float *
b, lapack_int * ldb, lapack_int * info)
void LAPACK_chegv (lapack_int * itype, char * jobz, char * uplo, lapack_int
* n, lapack_complex_float * a, lapack_int * lda, lapack_complex_float *
b, lapack_int * ldb, float * w, lapack_complex_float * work, lapack_int
* lwork, float * rwork, lapack_int * info)
void LAPACK_chegv_2stage (lapack_int * itype, char * jobz, char * uplo,
lapack_int * n, lapack_complex_float * a, lapack_int * lda,
lapack_complex_float * b, lapack_int * ldb, float * w,
lapack_complex_float * work, lapack_int * lwork, float * rwork,
lapack_int * info)
void LAPACK_chegvd (lapack_int * itype, char * jobz, char * uplo, lapack_int
* n, lapack_complex_float * a, lapack_int * lda, lapack_complex_float *
b, lapack_int * ldb, float * w, lapack_complex_float * work, lapack_int
* lwork, float * rwork, lapack_int * lrwork, lapack_int * iwork,
lapack_int * liwork, lapack_int * info)
void LAPACK_chegvx (lapack_int * itype, char * jobz, char * range, char *
uplo, lapack_int * n, lapack_complex_float * a, lapack_int * lda,
lapack_complex_float * b, lapack_int * ldb, float * vl, float * vu,
lapack_int * il, lapack_int * iu, float * abstol, lapack_int * m, float
* w, lapack_complex_float * z, lapack_int * ldz, lapack_complex_float *
work, lapack_int * lwork, float * rwork, lapack_int * iwork, lapack_int
* ifail, lapack_int * info)
see how chegvd is the extra one? it's got lrwork AND liwork in there — double the bookkeeping, double the fun ✨ and chegvx is out here with twenty-two parameters, which is a lot of params but she's slaying regardless.
🌸 cherfs + cherfsx (the refinement twins)
void LAPACK_cherfs (char * uplo, lapack_int * n, lapack_int * nrhs, const
lapack_complex_float * a, lapack_int * lda, const lapack_complex_float *
af, lapack_int * ldaf, const lapack_int * ipiv, const
lapack_complex_float * b, lapack_int * ldb, lapack_complex_float * x,
lapack_int * ldx, float * ferr, float * berr, lapack_complex_float *
work, float * rwork, lapack_int * info)
void LAPACK_cherfsx (char * uplo, char * equed, lapack_int * n, lapack_int *
nrhs, const lapack_complex_float * a, lapack_int * lda, const
lapack_complex_float * af, lapack_int * ldaf, const lapack_int * ipiv,
const float * s, const lapack_complex_float * b, lapack_int * ldb,
lapack_complex_float * x, lapack_int * ldx, float * rcond, float * berr,
lapack_int * n_err_bnds, float * err_bnds_norm, float * err_bnds_comp,
lapack_int * nparams, float * params, lapack_complex_float * work, float
* rwork, lapack_int * info)
cherfsx said "i heard you like error bounds" and brought n_err_bnds, err_bnds_norm, err_bnds_comp, nparams and params. plus equed and s for the scaling girlies. also note rcond shows up here. the const qualifiers are doing their thing on a, af, ipiv, s and b — those inputs are not getting touched, periodt 🎀
⭐ the solver section: chesv and all her cousins
okay this is a whole family tree and every branch is iconic in her own way. we got the plain chesv, then chesv_aa, chesv_aa_2stage, chesv_rk, chesvx, chesvxx:
void LAPACK_chesv (char * uplo, lapack_int * n, lapack_int * nrhs,
lapack_complex_float * a, lapack_int * lda, lapack_int * ipiv,
lapack_complex_float * b, lapack_int * ldb, lapack_complex_float * work,
lapack_int * lwork, lapack_int * info)
void LAPACK_chesv_aa (char * uplo, lapack_int * n, lapack_int * nrhs,
lapack_complex_float * a, lapack_int * lda, lapack_int * ipiv,
lapack_complex_float * b, lapack_int * ldb, lapack_complex_float * work,
lapack_int * lwork, lapack_int * info)
void LAPACK_chesv_aa_2stage (char * uplo, lapack_int * n, lapack_int * nrhs,
lapack_complex_float * a, lapack_int * lda, lapack_complex_float * tb,
lapack_int * ltb, lapack_int * ipiv, lapack_int * ipiv2,
lapack_complex_float * b, lapack_int * ldb, lapack_complex_float * work,
lapack_int * lwork, lapack_int * info)
void LAPACK_chesv_rk (char * uplo, lapack_int * n, lapack_int * nrhs,
lapack_complex_float * a, lapack_int * lda, lapack_complex_float * e,
lapack_int * ipiv, lapack_complex_float * b, lapack_int * ldb,
lapack_complex_float * work, lapack_int * lwork, lapack_int * info)
the _aa_2stage one is lowkey the main character here — she's the only one with tb + ltb AND two pivot arrays, ipiv and ipiv2. two pivots. TWO. she's not like other girls 💅 and chesv_rk swaps in e where the others don't have it, which is very her.
then the x variants go full data-collection mode:
void LAPACK_chesvx (char * fact, char * uplo, lapack_int * n, lapack_int *
nrhs, const lapack_complex_float * a, lapack_int * lda,
lapack_complex_float * af, lapack_int * ldaf, lapack_int * ipiv, const
lapack_complex_float * b, lapack_int * ldb, lapack_complex_float * x,
lapack_int * ldx, float * rcond, float * ferr, float * berr,
lapack_complex_float * work, lapack_int * lwork, float * rwork,
lapack_int * info)
void LAPACK_chesvxx (char * fact, char * uplo, lapack_int * n, lapack_int *
nrhs, lapack_complex_float * a, lapack_int * lda, lapack_complex_float *
af, lapack_int * ldaf, lapack_int * ipiv, char * equed, float * s,
lapack_complex_float * b, lapack_int * ldb, lapack_complex_float * x,
lapack_int * ldx, float * rcond, float * rpvgrw, float * berr,
lapack_int * n_err_bnds, float * err_bnds_norm, float * err_bnds_comp,
lapack_int * nparams, float * params, lapack_complex_float * work, float
* rwork, lapack_int * info)
chesvxx has rpvgrw in addition to rcond, plus equed, s and the whole err-bnds ensemble. she's the one who shows up with a spreadsheet and honestly? respect 🫶
🧚 cheswapr through chetrd (short + sweet era)
void LAPACK_cheswapr (char * uplo, lapack_int * n, lapack_complex_float * a,
lapack_int * lda, lapack_int * i1, lapack_int * i2)
void LAPACK_chetrd (char * uplo, lapack_int * n, lapack_complex_float * a,
lapack_int * lda, float * d, float * e, lapack_complex_float * tau,
lapack_complex_float * work, lapack_int * lwork, lapack_int * info)
okay note this one: cheswapr has no info parameter. i repeat, no info. it just takes uplo, n, a, lda, i1, i2 and leaves. she said "i don't do error reporting" and honestly, icon behaviour 🌈 everything else on this page gets an info; she simply declined.
chetrd meanwhile has no ipiv at all, but it does have d, e and tau. different vibe entirely.
🍓 the chetrf cinematic universe
void LAPACK_chetrf (char * uplo, lapack_int * n, lapack_complex_float * a,
lapack_int * lda, lapack_int * ipiv, lapack_complex_float * work,
lapack_int * lwork, lapack_int * info)
void LAPACK_chetrf_aa (char * uplo, lapack_int * n, lapack_complex_float *
a, lapack_int * lda, lapack_int * ipiv, lapack_complex_float * work,
lapack_int * lwork, lapack_int * info)
void LAPACK_chetrf_aa_2stage (char * uplo, lapack_int * n,
lapack_complex_float * a, lapack_int * lda, lapack_complex_float * tb,
lapack_int * ltb, lapack_int * ipiv, lapack_int * ipiv2,
lapack_complex_float * work, lapack_int * lwork, lapack_int * info)
void LAPACK_chetrf_rk (char * uplo, lapack_int * n, lapack_complex_float *
a, lapack_int * lda, lapack_complex_float * e, lapack_int * ipiv,
lapack_complex_float * work, lapack_int * lwork, lapack_int * info)
void LAPACK_chetrf_rook (char * uplo, lapack_int * n, lapack_complex_float *
a, lapack_int * lda, lapack_int * ipiv, lapack_complex_float * work,
lapack_int * lwork, lapack_int * info)
five flavours of the same idea and every single one is valid 💖 _aa_2stage brings tb, ltb, ipiv and ipiv2; _rk brings e; _rook brings... vibes. and the plain one is there being the blueprint.
🎀 chetri and friends (the inverse girlies)
void LAPACK_chetri (char * uplo, lapack_int * n, lapack_complex_float * a,
lapack_int * lda, const lapack_int * ipiv, lapack_complex_float * work,
lapack_int * info)
void LAPACK_chetri2 (char * uplo, lapack_int * n, lapack_complex_float * a,
lapack_int * lda, const lapack_int * ipiv, lapack_complex_float * work,
lapack_int * lwork, lapack_int * info)
void LAPACK_chetri2x (char * uplo, lapack_int * n, lapack_complex_float * a,
lapack_int * lda, const lapack_int * ipiv, lapack_complex_float * work,
lapack_int * nb, lapack_int * info)
void LAPACK_chetri_3 (char * uplo, lapack_int * n, lapack_complex_float * a,
lapack_int * lda, const lapack_complex_float * e, const lapack_int *
ipiv, lapack_complex_float * work, lapack_int * lwork, lapack_int *
info)
quick vibe check bestie: chetri has work but no lwork. chetri2 adds lwork. chetri2x has neither lwork nor... wait, it has nb instead of lwork. and chetri_3 grabs both e and ipiv (both const, we love a read-only moment). they're all different, and that's fine, that's growth 🌱
💜 the chetrs cluster
void LAPACK_chetrs (char * uplo, lapack_int * n, lapack_int * nrhs, const
lapack_complex_float * a, lapack_int * lda, const lapack_int * ipiv,
lapack_complex_float * b, lapack_int * ldb, lapack_int * info)
void LAPACK_chetrs2 (char * uplo, lapack_int * n, lapack_int * nrhs, const
lapack_complex_float * a, lapack_int * lda, const lapack_int * ipiv,
lapack_complex_float * b, lapack_int * ldb, lapack_complex_float * work,
lapack_int * info)
void LAPACK_chetrs_3 (char * uplo, lapack_int * n, lapack_int * nrhs, const
lapack_complex_float * a, lapack_int * lda, const lapack_complex_float *
e, const lapack_int * ipiv, lapack_complex_float * b, lapack_int * ldb,
lapack_int * info)
void LAPACK_chetrs_aa (char * uplo, lapack_int * n, lapack_int * nrhs, const
lapack_complex_float * a, lapack_int * lda, const lapack_int * ipiv,
lapack_complex_float * b, lapack_int * ldb, lapack_complex_float * work,
lapack_int * lwork, lapack_int * info)
void LAPACK_chetrs_aa_2stage (char * uplo, lapack_int * n, lapack_int *
nrhs, lapack_complex_float * a, lapack_int * lda, lapack_complex_float *
tb, lapack_int * ltb, lapack_int * ipiv, lapack_int * ipiv2,
lapack_complex_float * b, lapack_int * ldb, lapack_int * info)
void LAPACK_chetrs_rook (char * uplo, lapack_int * n, lapack_int * nrhs,
const lapack_complex_float * a, lapack_int * lda, const lapack_int *
ipiv, lapack_complex_float * b, lapack_int * ldb, lapack_int * info)
six of them. six!! and they all want uplo, n, nrhs, a, lda, a pivot array and b, ldb, info. the differences: chetrs is bare, chetrs2 adds work, chetrs_3 adds e, chetrs_aa adds work + lwork, chetrs_aa_2stage adds tb, ltb, ipiv, ipiv2, and chetrs_rook stays minimal like her cousin chetrs but with a whole different name. also clock the const on a/ipiv in most of them, but chetrs_aa_2stage takes its a and tb non-const. little details, but they're the moment 👑
🔥 chfrk + chgeqz (the glow-up duo)
void LAPACK_chfrk (char * transr, char * uplo, char * trans, lapack_int * n,
lapack_int * k, float * alpha, const lapack_complex_float * a,
lapack_int * lda, float * beta, lapack_complex_float * c)
chfrk has no info either — so she's out here with transr, uplo, trans, n, k, alpha, a, lda, beta, c and zero error reporting. no info, no problems, no notes 😌
void LAPACK_chgeqz (char * job, char * compq, char * compz, lapack_int * n,
lapack_int * ilo, lapack_int * ihi, lapack_complex_float * h, lapack_int
* ldh, lapack_complex_float * t, lapack_int * ldt, lapack_complex_float
* alpha, lapack_complex_float * beta, lapack_complex_float * q,
lapack_int * ldq, lapack_complex_float * z, lapack_int * ldz,
lapack_complex_float * work, lapack_int * lwork, float * rwork,
lapack_int * info)
okay chgeqz ate. job, compq, compz, n, ilo, ihi, then h/ldh, t/ldt, alpha, beta, q/ldq, z/ldz, work/lwork, rwork, info. note both alpha and beta are lapack_complex_float here, and there are two separate char * flags compq and compz. she's thorough and we're obsessed 💅
🌺 the packed chp family (yes, packed, we're still doing these)
heading into packed-storage territory now — everything's ap/bp instead of a/b. buckle up 🦋
void LAPACK_chpcon (char * uplo, lapack_int * n, const lapack_complex_float
* ap, const lapack_int * ipiv, float * anorm, float * rcond,
lapack_complex_float * work, lapack_int * info)
void LAPACK_chpev (char * jobz, char * uplo, lapack_int * n,
lapack_complex_float * ap, float * w, lapack_complex_float * z,
lapack_int * ldz, lapack_complex_float * work, float * rwork, lapack_int
* info)
void LAPACK_chpevd (char * jobz, char * uplo, lapack_int * n,
lapack_complex_float * ap, float * w, lapack_complex_float * z,
lapack_int * ldz, lapack_complex_float * work, lapack_int * lwork, float
* rwork, lapack_int * lrwork, lapack_int * iwork, lapack_int * liwork,
lapack_int * info)
void LAPACK_chpevx (char * jobz, char * range, char * uplo, lapack_int * n,
lapack_complex_float * ap, float * vl, float * vu, lapack_int * il,
lapack_int * iu, float * abstol, lapack_int * m, float * w,
lapack_complex_float * z, lapack_int * ldz, lapack_complex_float * work,
float * rwork, lapack_int * iwork, lapack_int * ifail, lapack_int *
info)
chpcon is bringing anorm and rcond and also a const on both ap and ipiv. meanwhile chpev keeps it simpler — no lwork, just work and rwork. and chpevd + chpevx are back with the full lwork/lrwork/iwork/liwork spreadsheet (well, chpevx has iwork and ifail but no lrwork/liwork — she's a different shape, ok). ✨
🍨 last but not least: chpgst → chpgvx
void LAPACK_chpgst (lapack_int * itype, char * uplo, lapack_int * n,
lapack_complex_float * ap, const lapack_complex_float * bp, lapack_int *
info)
void LAPACK_chpgv (lapack_int * itype, char * jobz, char * uplo, lapack_int
* n, lapack_complex_float * ap, lapack_complex_float * bp, float * w,
lapack_complex_float * z, lapack_int * ldz, lapack_complex_float * work,
float * rwork, lapack_int * info)
void LAPACK_chpgvd (lapack_int * itype, char * jobz, char * uplo, lapack_int
* n, lapack_complex_float * ap, lapack_complex_float * bp, float * w,
lapack_complex_float * z, lapack_int * ldz, lapack_complex_float * work,
lapack_int * lwork, float * rwork, lapack_int * lrwork, lapack_int *
iwork, lapack_int * liwork, lapack_int * info)
void LAPACK_chpgvx (lapack_int * itype, char * jobz, char * range, char *
uplo, lapack_int * n, lapack_complex_float * ap, lapack_complex_float *
and that's where this part runs out of page 😭 chpgvx is literally mid-parameter-list — we got as far as lapack_complex_float * and then the man page said "to be continued." classic.
so to recap where we're at: chpgst (short king, itype + uplo + n + ap + bp + info, and note bp is const here), chpgv (adds jobz, w, z, ldz, work, rwork), chpgvd (adds the full lwork/lrwork/iwork/liwork set), and chpgvx (all the range/vl/vu/il/iu/abstol action, cut off mid-signature).
catch you in the next chunk bestie, we're so close to finishing this run of prototypes 🫶💖
...and the last one was still typing, so here's the rest of its tail 💀 — no cap, this is the wrap-up of the previous signature:
bp, float * vl, float * vu, lapack_int * il, lapack_int * iu, float *
abstol, lapack_int * m, float * w, lapack_complex_float * z, lapack_int
* ldz, lapack_complex_float * work, float * rwork, lapack_int * iwork,
lapack_int * ifail, lapack_int * info)
LAPACK_chprfs 🫶 — refines a solution for a complex single-precision Hermitian packed system. The whole squad shows up: uplo, n, nrhs, the original ap, the factored afp, ipiv, b with its ldb, x with its ldx, plus ferr, berr, work, rwork, and info carrying the gossip at the end.
void LAPACK_chprfs (char * uplo, lapack_int * n, lapack_int * nrhs, const
lapack_complex_float * ap, const lapack_complex_float * afp, const
lapack_int * ipiv, const lapack_complex_float * b, lapack_int * ldb,
lapack_complex_float * x, lapack_int * ldx, float * ferr, float * berr,
lapack_complex_float * work, float * rwork, lapack_int * info)
LAPACK_chpsv ✨ — solves it outright, no refinement arc. uplo, n, nrhs, ap, ipiv, b, ldb, info. Short, sweet, slays.
void LAPACK_chpsv (char * uplo, lapack_int * n, lapack_int * nrhs,
lapack_complex_float * ap, lapack_int * ipiv, lapack_complex_float * b,
lapack_int * ldb, lapack_int * info)
LAPACK_chpsvx 🎀 — the full-glow-up version: fact, uplo, n, nrhs, ap, afp, ipiv, b, ldb, x, ldx, then rcond, ferr, berr, work, rwork, info. It's giving thorough. Obsessed.
void LAPACK_chpsvx (char * fact, char * uplo, lapack_int * n, lapack_int *
nrhs, const lapack_complex_float * ap, lapack_complex_float * afp,
lapack_int * ipiv, const lapack_complex_float * b, lapack_int * ldb,
lapack_complex_float * x, lapack_int * ldx, float * rcond, float * ferr,
float * berr, lapack_complex_float * work, float * rwork, lapack_int *
info)
LAPACK_chptrd 🦋 — tridiagonal reduction of a complex Hermitian packed matrix. Takes uplo, n, ap, hands you d, e, tau, and reports through info.
void LAPACK_chptrd (char * uplo, lapack_int * n, lapack_complex_float * ap,
float * d, float * e, lapack_complex_float * tau, lapack_int * info)
LAPACK_chptrf 🌸 — the factorization step for packed Hermitian. uplo, n, ap, ipiv, info — the core four plus the pivot homie.
void LAPACK_chptrf (char * uplo, lapack_int * n, lapack_complex_float * ap,
lapack_int * ipiv, lapack_int * info)
LAPACK_chptri 💅 — inverse arc. uplo, n, ap, the ipiv from before, a work scratch, and info for the vibes check.
void LAPACK_chptri (char * uplo, lapack_int * n, lapack_complex_float * ap,
const lapack_int * ipiv, lapack_complex_float * work, lapack_int * info)
LAPACK_chptrs 🔥 — solves using the thing you already factored. uplo, n, nrhs, ap, ipiv, b, ldb, info — it's the payoff of the factorization storyline, periodt.
void LAPACK_chptrs (char * uplo, lapack_int * n, lapack_int * nrhs, const
lapack_complex_float * ap, const lapack_int * ipiv, lapack_complex_float
* b, lapack_int * ldb, lapack_int * info)
LAPACK_chsein 👑 — the eigenvectors-of-Hessenberg one, and she is stacked: job, eigsrc, initv, the select array, n, h, ldh, w, vl/ldvl, vr/ldvr, mm, m, work, rwork, ifaill, ifailr, info. Main character energy fr fr 😭
void LAPACK_chsein (char * job, char * eigsrc, char * initv, const
lapack_logical * select, lapack_int * n, const lapack_complex_float * h,
lapack_int * ldh, lapack_complex_float * w, lapack_complex_float * vl,
lapack_int * ldvl, lapack_complex_float * vr, lapack_int * ldvr,
lapack_int * mm, lapack_int * m, lapack_complex_float * work, float *
rwork, lapack_int * ifaill, lapack_int * ifailr, lapack_int * info)
LAPACK_chseqr ⭐ — Schur factorization of a Hessenberg matrix. job, compz, n, ilo, ihi, h, ldh, w, z, ldz, work, lwork, info. Note lwork is in there — that's a real query-able size, so don't sleep on it 💜
void LAPACK_chseqr (char * job, char * compz, lapack_int * n, lapack_int *
ilo, lapack_int * ihi, lapack_complex_float * h, lapack_int * ldh,
lapack_complex_float * w, lapack_complex_float * z, lapack_int * ldz,
lapack_complex_float * work, lapack_int * lwork, lapack_int * info)
LAPACK_clacgv 🧚 — conjures conjugates in x with n and incx. Tiny icon, does the "flip the imaginary sign" thing iykyk.
void LAPACK_clacgv (lapack_int * n, lapack_complex_float * x, lapack_int *
incx)
LAPACK_clacn2 🌈 — the 1-norm estimator loop. n, v, x, est, kase, isave. Lowkey one of my faves because kase and isave mean you get called back — it's a whole "call me back" situation 💀
void LAPACK_clacn2 (lapack_int * n, lapack_complex_float * v,
lapack_complex_float * x, float * est, lapack_int * kase, lapack_int *
isave)
LAPACK_clacp2 🎀 — copies real a into complex b. uplo, m, n, a, lda, b, ldb. Glow-up by type conversion, honestly iconic.
void LAPACK_clacp2 (char * uplo, lapack_int * m, lapack_int * n, const float
* a, lapack_int * lda, lapack_complex_float * b, lapack_int * ldb)
LAPACK_clacpy 🦋 — same-type copy, the classic. uplo, m, n, a, lda, b, ldb. No notes, she just works.
void LAPACK_clacpy (char * uplo, lapack_int * m, lapack_int * n, const
lapack_complex_float * a, lapack_int * lda, lapack_complex_float * b,
lapack_int * ldb)
LAPACK_clacrm ✨ — complex a times real b into complex c, with work along for the ride. m, n, a, lda, b, ldb, c, ldc, work.
void LAPACK_clacrm (lapack_int * m, lapack_int * n, const
lapack_complex_float * a, lapack_int * lda, const float * b, lapack_int
* ldb, lapack_complex_float * c, lapack_int * ldc, float * work)
LAPACK_clag2z 💖 — single-precision complex IN, double-precision complex OUT. The sa→a glow-up with m, n, ldsa, lda, and info. Leveling up fr fr.
void LAPACK_clag2z (lapack_int * m, lapack_int * n, const
lapack_complex_float * sa, lapack_int * ldsa, lapack_complex_double * a,
lapack_int * lda, lapack_int * info)
LAPACK_clagge 🌸 — generates a general band matrix from d as the diagonal seeds. m, n, kl, ku, d, a, lda, iseed (the RNG state, don't touch it weirdly), work, info.
void LAPACK_clagge (lapack_int * m, lapack_int * n, lapack_int * kl,
lapack_int * ku, const float * d, lapack_complex_float * a, lapack_int *
lda, lapack_int * iseed, lapack_complex_float * work, lapack_int * info)
LAPACK_claghe 🫶 — same generator energy but Hermitian flavored: n, k, d, a, lda, iseed, work, info.
void LAPACK_claghe (lapack_int * n, lapack_int * k, const float * d,
lapack_complex_float * a, lapack_int * lda, lapack_int * iseed,
lapack_complex_float * work, lapack_int * info)
LAPACK_clagsy 🔥 — and the symmetric twin: n, k, d, a, lda, iseed, work, info. Same cast, different symmetry aesthetic.
void LAPACK_clagsy (lapack_int * n, lapack_int * k, const float * d,
lapack_complex_float * a, lapack_int * lda, lapack_int * iseed,
lapack_complex_float * work, lapack_int * info)
LAPACK_clange 💜 — returns a float, and it's a norm. norm picks the flavor, m, n, a, lda, work. A queen that gives you a number back instead of writing into info — respect.
float LAPACK_clange (char * norm, lapack_int * m, lapack_int * n, const
lapack_complex_float * a, lapack_int * lda, float * work)
LAPACK_clanhe 🎀 — Hermitian norm, same shape of deal: norm, uplo, n, a, lda, work, returns float.
float LAPACK_clanhe (char * norm, char * uplo, lapack_int * n, const
lapack_complex_float * a, lapack_int * lda, float * work)
LAPACK_clansy 🌈 — symmetric norm, identical posse: norm, uplo, n, a, lda, work → float.
float LAPACK_clansy (char * norm, char * uplo, lapack_int * n, const
lapack_complex_float * a, lapack_int * lda, float * work)
LAPACK_clantr 👑 — trapezoidal norm, so she needs the whole trio: norm, uplo, diag, plus m, n, a, lda, work, and yes she returns float. Three char pointers, absolutely eating.
float LAPACK_clantr (char * norm, char * uplo, char * diag, lapack_int * m,
lapack_int * n, const lapack_complex_float * a, lapack_int * lda, float
* work)
LAPACK_clapmr 🦋 — permutes the rows of x. Note forwrd is a lapack_logical * (a pointer, bestie, not a plain value), then m, n, x, ldx, and k (the permutation indices live at the end, no separate array param 🙈).
void LAPACK_clapmr (lapack_logical * forwrd, lapack_int * m, lapack_int * n,
lapack_complex_float * x, lapack_int * ldx, lapack_int * k)
LAPACK_clapmt 💫 — the columns version. Same signature, forwrd, m, n, x, ldx, k. Only the letter changed and that's the whole bit 💀
void LAPACK_clapmt (lapack_logical * forwrd, lapack_int * m, lapack_int * n,
lapack_complex_float * x, lapack_int * ldx, lapack_int * k)
LAPACK_clarcm 🍓 — real a times complex b into complex c, with work holding it down. m, n, a, lda, b, ldb, c, ldc, work. The mirror-image of LAPACK_clacrm and she knows it.
void LAPACK_clarcm (lapack_int * m, lapack_int * n, const float * a,
lapack_int * lda, const lapack_complex_float * b, lapack_int * ldb,
lapack_complex_float * c, lapack_int * ldc, float * work)
LAPACK_clarfb ⭐ — applies a block reflector. Nine-ish params deep: side, trans, direct, storev, m, n, k, v/ldv, t/ldt, c/ldc, and work with its own ldwork. It's giving "I have a lot going on but I'm handling it" 💅
void LAPACK_clarfb (char * side, char * trans, char * direct, char * storev,
lapack_int * m, lapack_int * n, lapack_int * k, const
lapack_complex_float * v, lapack_int * ldv, const lapack_complex_float *
t, lapack_int * ldt, lapack_complex_float * c, lapack_int * ldc,
lapack_complex_float * work, lapack_int * ldwork)
LAPACK_clarfg 🧚 — generates a single Householder reflector. n, alpha (gets overwritten, mind you), x, incx, tau. Short and powerful, tiny icon behavior.
void LAPACK_clarfg (lapack_int * n, lapack_complex_float * alpha,
lapack_complex_float * x, lapack_int * incx, lapack_complex_float * tau)
LAPACK_clarft 💖 — forms the triangular factor t of a block reflector. direct, storev, n, k, v, ldv, tau, t, ldt. No info, she just does the thing and dips.
void LAPACK_clarft (char * direct, char * storev, lapack_int * n, lapack_int
* k, const lapack_complex_float * v, lapack_int * ldv, const
lapack_complex_float * tau, lapack_complex_float * t, lapack_int * ldt)
LAPACK_clarfx 🌸 — applies a single Householder reflector to c. side, m, n, v, tau, c, ldc, work. Note tau is passed as a pointer here, not a scalar — don't let anyone gaslight you otherwise 🫶
void LAPACK_clarfx (char * side, lapack_int * m, lapack_int * n, const
lapack_complex_float * v, lapack_complex_float * tau,
lapack_complex_float * c, lapack_int * ldc, lapack_complex_float * work)
Okay so we're deep in the LAPACK_ function prototypes now — this stretch is all c-prefixed (that's lapack_complex_float, single-precision complex, she's fancy 💅) and it's giving "the whole alphabet of matrix storage formats" energy. Same deal as before: signature goes in verbatim, the commentary is just me hyping you up. Keep your info pointer close, bestie 🫶
LAPACK_clarnv
void LAPACK_clarnv (lapack_int * idist, lapack_int * iseed, lapack_int * n,
lapack_complex_float * x)
idist, iseed, n, x — four args, zero drama. The iseed is a pointer, so she's writing back to you, keep that array alive ok 😭
LAPACK_clascl
void LAPACK_clascl (char * type, lapack_int * kl, lapack_int * ku, float *
cfrom, float * cto, lapack_int * m, lapack_int * n, lapack_complex_float
* a, lapack_int * lda, lapack_int * info)
Ten arguments. TEN. And cfrom + cto are both float *, not lapack_complex_float * — do not come for me, that's literally what the header says 🌸
LAPACK_claset
void LAPACK_claset (char * uplo, lapack_int * m, lapack_int * n,
lapack_complex_float * alpha, lapack_complex_float * beta,
lapack_complex_float * a, lapack_int * lda)
Look at her — no info at all. Not every routine needs to snitch about its status, some just vibe ✨
LAPACK_classq
void LAPACK_classq (lapack_int * n, lapack_complex_float * x, lapack_int *
incx, float * scale, float * sumsq)
incx is hanging out on its own line up there with the * — that's just the wrapping, don't panic, it's still a lapack_int * 🎀
LAPACK_claswp
void LAPACK_claswp (lapack_int * n, lapack_complex_float * a, lapack_int *
lda, lapack_int * k1, lapack_int * k2, const lapack_int * ipiv,
lapack_int * incx)
Bestie this one's got const on the ipiv — she's reading your pivot indices, not touching them. Respectful queen 👑
LAPACK_clatms
void LAPACK_clatms (lapack_int * m, lapack_int * n, char * dist, lapack_int
* iseed, char * sym, float * d, lapack_int * mode, float * cond, float *
dmax, lapack_int * kl, lapack_int * ku, char * pack,
lapack_complex_float * a, lapack_int * lda, lapack_complex_float * work,
lapack_int * info)
Fifteen arguments, three char *s, and a partridge in a pear tree 🍓 This is the longest signature in this whole stretch and honestly? Main character energy. Type it exact or don't type it at all.
LAPACK_clauum
void LAPACK_clauum (char * uplo, lapack_int * n, lapack_complex_float * a,
lapack_int * lda, lapack_int * info)
Short, sweet, uplo-first. We love a tidy five-arg queen 💖
LAPACK_cpbcon
void LAPACK_cpbcon (char * uplo, lapack_int * n, lapack_int * kd, const
lapack_complex_float * ab, lapack_int * ldab, float * anorm, float *
rcond, lapack_complex_float * work, float * rwork, lapack_int * info)
Note the ab / ldab pair — and ab is const while work and rwork are not. Also she brought both a complex work and a real rwork. Two works, one routine 😤
LAPACK_cpbequ
void LAPACK_cpbequ (char * uplo, lapack_int * n, lapack_int * kd, const
lapack_complex_float * ab, lapack_int * ldab, float * s, float * scond,
float * amax, lapack_int * info)
s, scond, amax — the three float * girlies. No work array here, she travels light ✨
LAPACK_cpbrfs
void LAPACK_cpbrfs (char * uplo, lapack_int * n, lapack_int * kd, lapack_int
* nrhs, const lapack_complex_float * ab, lapack_int * ldab, const
lapack_complex_float * afb, lapack_int * ldafb, const
lapack_complex_float * b, lapack_int * ldb, lapack_complex_float * x,
lapack_int * ldx, float * ferr, float * berr, lapack_complex_float *
work, float * rwork, lapack_int * info)
Okay the arg count is unwell. kd? also nrhs? and ldab + ldafb + ldb + ldx?? Every leading dimension got an invite to the party 🎉
LAPACK_cpbstf
void LAPACK_cpbstf (char * uplo, lapack_int * n, lapack_int * kb,
lapack_complex_float * bb, lapack_int * ldbb, lapack_int * info)
kb and bb, not kd and ab — yes the letters differ from her sisters above, no that's not a typo, that's the header 🤡
LAPACK_cpbsv
void LAPACK_cpbsv (char * uplo, lapack_int * n, lapack_int * kd, lapack_int
* nrhs, lapack_complex_float * ab, lapack_int * ldab,
lapack_complex_float * b, lapack_int * ldb, lapack_int * info)
Nine args, back to kd/ab. See? Consistency is a spectrum 💀
LAPACK_cpbsvx
void LAPACK_cpbsvx (char * fact, char * uplo, lapack_int * n, lapack_int *
kd, lapack_int * nrhs, lapack_complex_float * ab, lapack_int * ldab,
lapack_complex_float * afb, lapack_int * ldafb, char * equed, float * s,
lapack_complex_float * b, lapack_int * ldb, lapack_complex_float * x,
lapack_int * ldx, float * rcond, float * ferr, float * berr,
lapack_complex_float * work, float * rwork, lapack_int * info)
fact, uplo, equed — three char *s and twenty args total. She's the "expert" variant, obviously she's extra 👑
LAPACK_cpbtrf
void LAPACK_cpbtrf (char * uplo, lapack_int * n, lapack_int * kd,
lapack_complex_float * ab, lapack_int * ldab, lapack_int * info)
Six args. A palate cleanser after cpbsvx. Thank you for your service 🫶
LAPACK_cpbtrs
void LAPACK_cpbtrs (char * uplo, lapack_int * n, lapack_int * kd, lapack_int
* nrhs, const lapack_complex_float * ab, lapack_int * ldab,
lapack_complex_float * b, lapack_int * ldb, lapack_int * info)
Same as cpbsv but ab is const and there's no info-adjacent chaos. Copy, paste, but make it const 💅
LAPACK_cpftrf
void LAPACK_cpftrf (char * transr, char * uplo, lapack_int * n,
lapack_complex_float * a, lapack_int * info)
New letters unlocked: transr. Different from plain trans, ok? Don't @ me, write it exactly 🔥
LAPACK_cpftri
void LAPACK_cpftri (char * transr, char * uplo, lapack_int * n,
lapack_complex_float * a, lapack_int * info)
Literally identical signature to cpftrf above — yes bestie, that happens, the C name is the difference, not the args 🌈
LAPACK_cpftrs
void LAPACK_cpftrs (char * transr, char * uplo, lapack_int * n, lapack_int *
nrhs, const lapack_complex_float * a, lapack_complex_float * b,
lapack_int * ldb, lapack_int * info)
Now with nrhs and a const a. The "s" at the end means she brought friends 🎀
LAPACK_cpocon
void LAPACK_cpocon (char * uplo, lapack_int * n, const lapack_complex_float
* a, lapack_int * lda, float * anorm, float * rcond,
lapack_complex_float * work, float * rwork, lapack_int * info)
const lapack_complex_float with the * wrapped onto the next line — that's the original's line break, keep the spelling const lapack_complex_float 💜
LAPACK_cpoequ
void LAPACK_cpoequ (lapack_int * n, const lapack_complex_float * a,
lapack_int * lda, float * s, float * scond, float * amax, lapack_int *
info)
No uplo! First one in a while with no uplo. Change is good, growth is good 🌱
LAPACK_cpoequb
void LAPACK_cpoequb (lapack_int * n, const lapack_complex_float * a,
lapack_int * lda, float * s, float * scond, float * amax, lapack_int *
info)
Exact same as cpoequ plus a b on the end. That b is doing so much heavy lifting and honestly? She's slaying it ⭐
LAPACK_cporfs
void LAPACK_cporfs (char * uplo, lapack_int * n, lapack_int * nrhs, const
lapack_complex_float * a, lapack_int * lda, const lapack_complex_float *
af, lapack_int * ldaf, const lapack_complex_float * b, lapack_int * ldb,
lapack_complex_float * x, lapack_int * ldx, float * ferr, float * berr,
lapack_complex_float * work, float * rwork, lapack_int * info)
Three consts in a row (a, af, b) and then x unapologetically mutable. The accuracy check goes into x, bestie, that's the whole point 😌
LAPACK_cporfsx
void LAPACK_cporfsx (char * uplo, char * equed, lapack_int * n, lapack_int *
nrhs, const lapack_complex_float * a, lapack_int * lda, const
lapack_complex_float * af, lapack_int * ldaf, const float * s, const
lapack_complex_float * b, lapack_int * ldb, lapack_complex_float * x,
lapack_int * ldx, float * rcond, float * berr, lapack_int * n_err_bnds,
float * err_bnds_norm, float * err_bnds_comp, lapack_int * nparams,
float * params, lapack_complex_float * work, float * rwork, lapack_int *
info)
TWENTY-THREE ARGUMENTS. err_bnds_norm, err_bnds_comp, n_err_bnds, nparams, params — she's the extended one, the deluxe edition, the ✨director's cut✨. Type her slow 😭
LAPACK_cposv
void LAPACK_cposv (char * uplo, lapack_int * n, lapack_int * nrhs,
lapack_complex_float * a, lapack_int * lda, lapack_complex_float * b,
lapack_int * ldb, lapack_int * info)
Eight args, clean lines, no notes. The reliable friend of the group chat 💖
LAPACK_cposvx
void LAPACK_cposvx (char * fact, char * uplo, lapack_int * n, lapack_int *
nrhs, lapack_complex_float * a, lapack_int * lda, lapack_complex_float *
af, lapack_int * ldaf, char * equed, float * s, lapack_complex_float *
b, lapack_int * ldb, lapack_complex_float * x, lapack_int * ldx, float *
rcond, float * ferr, float * berr, lapack_complex_float * work, float *
rwork, lapack_int * info)
Same skeleton as cpbsvx up there but without the kd. See the family resemblance? That's the *svx bloodline 🔥
LAPACK_cposvxx
void LAPACK_cposvxx (char * fact, char * uplo, lapack_int * n, lapack_int *
nrhs, lapack_complex_float * a, lapack_int * lda, lapack_complex_float *
af, lapack_int * ldaf, char * equed, float * s, lapack_complex_float *
b, lapack_int * ldb, lapack_complex_float * x, lapack_int * ldx, float *
rcond, float * rpvgrw, float * berr, lapack_int * n_err_bnds, float *
err_bnds_norm, float * err_bnds_comp, lapack_int * nparams, float *
params, lapack_complex_float * work, float * rwork, lapack_int * info)
Twenty-three again, but she's got rpvgrw and drops ferr — compare carefully with cposvx above, do not assume. Double-x means extra credit, obviously 🎓
LAPACK_cpotrf
void LAPACK_cpotrf (char * uplo, lapack_int * n, lapack_complex_float * a,
lapack_int * lda, lapack_int * info)
The classic. The blueprint. Five args and a dream 🦋
LAPACK_cpotrf2
void LAPACK_cpotrf2 (char * uplo, lapack_int * n, lapack_complex_float * a,
lapack_int * lda, lapack_int * info)
Identical to cpotrf — the 2 is in the name, not the signature. Sneaky but valid 💀
LAPACK_cpotri
void LAPACK_cpotri (char * uplo, lapack_int * n, lapack_complex_float * a,
lapack_int * lda, lapack_int * info)
Also identical! Three routines, one signature, three little letters on the end doing all the differentiation. Iconic honestly 👑
LAPACK_cpotrs
void LAPACK_cpotrs (char * uplo, lapack_int * n, lapack_int * nrhs, const
lapack_complex_float * a, lapack_int * lda, lapack_complex_float * b,
lapack_int * ldb, lapack_int * info)
Here's the s — and of course she's the one with const a. The solver never messes with your factorization, bestie, she's respectful 🫶
LAPACK_cppcon
void LAPACK_cppcon (char * uplo, lapack_int * n, const lapack_complex_float
* ap, float * anorm, float * rcond, lapack_complex_float * work, float *
rwork, lapack_int * info)
Note: ap, not a — the packed girlies get their own letter and their own lda-free life. No leading dimension required 🎀
LAPACK_cppequ
void LAPACK_cppequ (char * uplo, lapack_int * n, const lapack_complex_float
* ap, float * s, float * scond, float * amax, lapack_int * info)
ap, s, scond, amax, info. Seven args, packed life, zero work. So tidy ✨
LAPACK_cpprfs
void LAPACK_cpprfs (char * uplo, lapack_int * n, lapack_int * nrhs, const
lapack_complex_float * ap, const lapack_complex_float * afp, const
lapack_complex_float * b, lapack_int * ldb, lapack_complex_float * x,
lapack_int * ldx, float * ferr, float * berr, lapack_complex_float *
work, float * rwork, lapack_int * info)
ap AND afp, both const. And yes, nrhs sits there even though... anyway, that's the signature, type it 💅
LAPACK_cppsv
void LAPACK_cppsv (char * uplo, lapack_int * n, lapack_int * nrhs,
lapack_complex_float * ap, lapack_complex_float * b, lapack_int * ldb,
lapack_int * info)
No lda because packed, and look — ap is not const here. That distinction matters, don't get cute and add a const 🙈
LAPACK_cppsvx
void LAPACK_cppsvx (char * fact, char * uplo, lapack_int * n, lapack_int *
nrhs, lapack_complex_float * ap, lapack_complex_float * afp, char *
equed, float * s, lapack_complex_float * b, lapack_int * ldb,
lapack_complex_float * x, lapack_int * ldx, float * rcond, float * ferr,
float * berr, lapack_complex_float * work, float * rwork, lapack_int *
info)
Nineteen args, fact + equed + the whole ferr/berr duo. The packed expert variant showed UP 🌟
LAPACK_cpptrf
void LAPACK_cpptrf (char * uplo, lapack_int * n, lapack_complex_float * ap,
lapack_int * info)
Four arguments. Four. That's it. That's the whole routine. Minimalist queen 🎀
LAPACK_cpptri
void LAPACK_cpptri (char * uplo, lapack_int * n, lapack_complex_float * ap,
lapack_int * info)
Also four, also identical to the one above. The f and the i are the only thing telling them apart, iykyk 👀
LAPACK_cpptrs
void LAPACK_cpptrs (char * uplo, lapack_int * n, lapack_int * nrhs, const
lapack_complex_float * ap, lapack_complex_float * b, lapack_int * ldb,
lapack_int * info)
The s returns, the nrhs returns, the const ap returns. Truly the reunion tour 😭
LAPACK_cpstrf
void LAPACK_cpstrf (char * uplo, lapack_int * n, lapack_complex_float * a,
lapack_int * lda, lapack_int * piv, lapack_int * rank, float * tol,
float * work, lapack_int * info)
Ooh she's got piv and rank as lapack_int *s and a tol that's a float *. Nine args, pivot-flavoured. Also — that's cpstrf, with an s, not cpp anything. Eyes on the prize bestie 🔍
LAPACK_cptcon
void LAPACK_cptcon (lapack_int * n, const float * d, const
lapack_complex_float * e, float * anorm, float * rcond, float * work,
lapack_int * info)
d is const float * (real!) and e is const lapack_complex_float * (complex!) — and work is float *, no rwork in sight. Truly a mixed-media moment 🎨
LAPACK_cpteqr
void LAPACK_cpteqr (char * compz, lapack_int * n, float * d, float * e,
lapack_complex_float * z, lapack_int * ldz, float * work, lapack_int *
info)
First compz of this batch 🦋 And here d and e are not const — non-const float * the both of them. Details matter, bestie.
LAPACK_cptrfs
void LAPACK_cptrfs (char * uplo, lapack_int * n, lapack_int * nrhs, const
float * d, const lapack_complex_float * e, const float * df, const
lapack_complex_float * ef, const lapack_complex_float * b, lapack_int *
ldb, lapack_complex_float * x, lapack_int * ldx, float * ferr, float *
berr, lapack_complex_float * work, float * rwork, lapack_int * info)
Okay this one's a whole meal: d/e/df/ef — real, complex, real, complex — it's giving 🎀 alternating 🎀 and d is const here even though it wasn't in cpteqr. Yes. Really. Write what you see 💀
LAPACK_cptsv
void LAPACK_cptsv (lapack_int * n, lapack_int * nrhs, float * d,
lapack_complex_float * e, lapack_complex_float * b, lapack_int * ldb,
lapack_int * info)
Seven args, no uplo, no lda. She's the tridiagonal simplicity icon we deserve 🌸
LAPACK_cptsvx
void LAPACK_cptsvx (char * fact, lapack_int * n, lapack_int * nrhs, const
float * d, const lapack_complex_float * e, float * df,
lapack_complex_float * ef, const lapack_complex_float * b, lapack_int *
ldb, lapack_complex_float * x, lapack_int * ldx, float * rcond, float *
ferr, float * berr, lapack_complex_float * work, float * rwork,
lapack_int * info)
See it? const on d/e/b, but df and ef are mutable — those are the OUTPUT copies, she's writing your factored version back out 😤 Eighteen args, no notes.
LAPACK_cpttrf
void LAPACK_cpttrf (lapack_int * n, float * d, lapack_complex_float * e,
lapack_int * info)
Four args. n, d, e, info. No uplo because tridiagonal doesn't need to pick a side, and I'm obsessed with the restraint ✨
LAPACK_cpttrs
void LAPACK_cpttrs (char * uplo, lapack_int * n, lapack_int * nrhs, const
float * d, const lapack_complex_float * e, lapack_complex_float * b,
lapack_int * ldb, lapack_int * info)
Wait — uplo came back for the solve! And d/e are const here. Compare with cpttrf above and don't get them mixed up bestie 🫶
LAPACK_cspcon
void LAPACK_cspcon (char * uplo, lapack_int * n, const lapack_complex_float
* ap, const lapack_int * ipiv, float * anorm, float * rcond,
lapack_complex_float * work, lapack_int * info)
const lapack_int * ipiv and no rwork — the cs* family travels with one less work array than the cp* girlies. Little differences, big vibes 💜
LAPACK_csprfs
void LAPACK_csprfs (char * uplo, lapack_int * n, lapack_int * nrhs, const
lapack_complex_float * ap, const lapack_complex_float * afp, const
lapack_int * ipiv, const lapack_complex_float * b, lapack_int * ldb,
lapack_complex_float * x, lapack_int * ldx, float * ferr, float * berr,
lapack_complex_float * work, float * rwork, lapack_int * info)
Fifteen args and she does have rwork. So cspcon skipped it and csprfs brought it. Correct. That's the header. We don't question the header 🔥
LAPACK_cspsv
void LAPACK_cspsv (char * uplo, lapack_int * n, lapack_int * nrhs,
lapack_complex_float * ap, lapack_int * ipiv, lapack_complex_float * b,
lapack_int * ldb, lapack_int * info)
Eight args, ipiv in the middle, ap non-const. She's the solver, she's allowed to modify things 👑💅
LAPACK_cspsvx
void LAPACK_cspsvx (char * fact, char * uplo, lapack_int * n, lapack_int *
nrhs, const lapack_complex_float * ap, lapack_complex_float * afp,
lapack_int * ipiv, const lapack_complex_float * b, lapack_int * ldb,
lapack_complex_float * x, lapack_int * ldx, float * rcond, float * ferr,
float * berr, lapack_complex_float * work, float * rwork, lapack_int *
info)
ap is const, afp is not, ipiv is not const here (unlike cspcon, careful!), and the ferr/berr duo is present. Eighteen args of pure ✨pedigree✨
LAPACK_csptrf
void LAPACK_csptrf (char * uplo, lapack_int * n, lapack_complex_float * ap,
lapack_int * ipiv, lapack_int * info)
Five args. Nobody's const. She's here to factor and she will be touching your memory, bestie 😌
LAPACK_csptri
void LAPACK_csptri (char * uplo, lapack_int * n, lapack_complex_float * ap,
const lapack_int * ipiv, lapack_complex_float * work, lapack_int * info)
Look at this — ipiv IS const here, and there's a work that csptrf didn't have. The inverse routine is a whole different creature. Slay 💖
And that's where this chunk cuts off — mid-cs-family, of course, because the manpage loves a cliffhanger 😭 Keep your prototypes in order and I'll see you in the next one 🫶✨
void LAPACK_csptrs (char * uplo, lapack_int * n, lapack_int * nrhs, const
lapack_complex_float * ap, const lapack_int * ipiv, lapack_complex_float
* b, lapack_int * ldb, lapack_int * info)
okay so LAPACK_csptrs 💅 the ap-packed bestie with an ipiv in hand, solving for b and reporting back through info. we love a queen who keeps her uplo close and her ldb closer.
void LAPACK_cstedc (char * compz, lapack_int * n, float * d, float * e,
lapack_complex_float * z, lapack_int * ldz, lapack_complex_float * work,
lapack_int * lwork, float * rwork, lapack_int * lrwork, lapack_int *
iwork, lapack_int * liwork, lapack_int * info)
LAPACK_cstedc is genuinely the overachiever 😭 look at that argument list! compz, d, e, z, ldz, work, lwork, rwork, lrwork, iwork, liwork, info — she brought a whole carry-on luggage of workspaces. two of them are float work arrays and two are int ones, and honestly? iconic. bring your lwork, lrwork, and liwork or don't come at all 🎀
void LAPACK_cstegr (char * jobz, char * range, lapack_int * n, float * d,
float * e, float * vl, float * vu, lapack_int * il, lapack_int * iu,
float * abstol, lapack_int * m, float * w, lapack_complex_float * z,
lapack_int * ldz, lapack_int * isuppz, float * work, lapack_int * lwork,
lapack_int * iwork, lapack_int * liwork, lapack_int * info)
LAPACK_cstegr saying hi with jobz AND range AND vl, vu, il, iu — she simply gives you options, bestie 🦋 abstol is there, m and w are there, isuppz is doing her little thing, and don't forget the work/lwork/iwork/liwork quartet. no cap, that's a lot of pointers and every single one matters.
void LAPACK_cstein (lapack_int * n, const float * d, const float * e,
lapack_int * m, const float * w, const lapack_int * iblock, const
lapack_int * isplit, lapack_complex_float * z, lapack_int * ldz, float *
work, lapack_int * iwork, lapack_int * ifailv, lapack_int * info)
LAPACK_cstein 🫶 notice how d, e, w, iblock, isplit are all const — she is not touching your data, she's just reading, periodt. the outputs go into z (with ldz), plus work, iwork, ifailv and info. respectful queen.
void LAPACK_cstemr (char * jobz, char * range, lapack_int * n, float * d,
float * e, float * vl, float * vu, lapack_int * il, lapack_int * iu,
lapack_int * m, float * w, lapack_complex_float * z, lapack_int * ldz,
lapack_int * nzc, lapack_int * isuppz, lapack_logical * tryrac, float *
work, lapack_int * lwork, lapack_int * iwork, lapack_int * liwork,
lapack_int * info)
LAPACK_cstemr is the deluxe version of the vibe above ✨ she's got everything cstegr has plus nzc and a whole lapack_logical * tryrac — yes bestie, tryrac is a lapack_logical pointer, not a regular int, watch your types 🙈 still bringing work, lwork, iwork, liwork, and info obviously.
void LAPACK_csteqr (char * compz, lapack_int * n, float * d, float * e,
lapack_complex_float * z, lapack_int * ldz, float * work, lapack_int *
info)
LAPACK_csteqr — short, sweet, compz + n + d + e + z + ldz + work + info. sometimes less is more and that's her main character energy 💖
void LAPACK_csycon (char * uplo, lapack_int * n, const lapack_complex_float
* a, lapack_int * lda, const lapack_int * ipiv, float * anorm, float *
rcond, lapack_complex_float * work, lapack_int * info)
LAPACK_csycon slides in with uplo, n, the const a at lda, the const ipiv, and then anorm and rcond as float pointers 👑 work and info round it out. note that a and ipiv are const — she's a reader, not a hater.
void LAPACK_csycon_3 (char * uplo, lapack_int * n, const
lapack_complex_float * a, lapack_int * lda, const lapack_complex_float *
e, const lapack_int * ipiv, float * anorm, float * rcond,
lapack_complex_float * work, lapack_int * info)
the _3 variant, LAPACK_csycon_3 🧚 same energy but now there's a const lapack_complex_float * e wedged in between lda and ipiv. trust, it's there. anorm, rcond, work, info — everything else identical, bestie.
void LAPACK_csyconv (char * uplo, char * way, lapack_int * n,
lapack_complex_float * a, lapack_int * lda, const lapack_int * ipiv,
lapack_complex_float * e, lapack_int * info)
LAPACK_csyconv has a char * way and honestly that's such a mood 🌈 uplo, n, a, lda, const ipiv, e, info — and yes, a and e are not const here, she's allowed to write to them. slay.
void LAPACK_csyequb (char * uplo, lapack_int * n, const lapack_complex_float
* a, lapack_int * lda, float * s, float * scond, float * amax,
lapack_complex_float * work, lapack_int * info)
LAPACK_csyequb handing you s, scond, and amax — all three are plain float * 🌸 a is const at lda, work is a lapack_complex_float *, and info is waiting at the end like always.
void LAPACK_csyr (char * uplo, lapack_int * n, lapack_complex_float * alpha,
const lapack_complex_float * x, lapack_int * incx, lapack_complex_float
* a, lapack_int * lda)
LAPACK_csyr is the one who doesn't take an info 💀 look at her! just uplo, n, alpha, const x with incx, a, lda, and she's out. no info, no work, no drama. and honestly? refreshing.
void LAPACK_csyrfs (char * uplo, lapack_int * n, lapack_int * nrhs, const
lapack_complex_float * a, lapack_int * lda, const lapack_complex_float *
af, lapack_int * ldaf, const lapack_int * ipiv, const
lapack_complex_float * b, lapack_int * ldb, lapack_complex_float * x,
lapack_int * ldx, float * ferr, float * berr, lapack_complex_float *
work, float * rwork, lapack_int * info)
LAPACK_csyrfs is the referee of the group 🔥 a/lda, af/ldaf, const ipiv, b/ldb go in, x/ldx comes out, and ferr + berr tell you how it went. she takes both a work (lapack_complex_float *) and an rwork (float *) — two different work flavours, don't mix them up 💅
void LAPACK_csyrfsx (char * uplo, char * equed, lapack_int * n, lapack_int *
nrhs, const lapack_complex_float * a, lapack_int * lda, const
lapack_complex_float * af, lapack_int * ldaf, const lapack_int * ipiv,
const float * s, const lapack_complex_float * b, lapack_int * ldb,
lapack_complex_float * x, lapack_int * ldx, float * rcond, float * berr,
lapack_int * n_err_bnds, float * err_bnds_norm, float * err_bnds_comp,
lapack_int * nparams, float * params, lapack_complex_float * work, float
* rwork, lapack_int * info)
LAPACK_csyrfsx — the extended cut, the director's version, the one with equed and a const float * s 😭 she's got everything: rcond, berr, n_err_bnds, and then BOTH err_bnds_norm and err_bnds_comp (float * each, naturally), plus nparams and params. plus work, rwork, info. she's giving error-bound realness and we respect it 🎀
void LAPACK_csysv (char * uplo, lapack_int * n, lapack_int * nrhs,
lapack_complex_float * a, lapack_int * lda, lapack_int * ipiv,
lapack_complex_float * b, lapack_int * ldb, lapack_complex_float * work,
lapack_int * lwork, lapack_int * info)
LAPACK_csysv — the classic 🦋 uplo, n, nrhs, a, lda, ipiv, b, ldb, work, lwork, info. no const in sight on a or b, because she's overwriting them and she is not sorry.
void LAPACK_csysv_aa (char * uplo, lapack_int * n, lapack_int * nrhs,
lapack_complex_float * a, lapack_int * lda, lapack_int * ipiv,
lapack_complex_float * b, lapack_int * ldb, lapack_complex_float * work,
lapack_int * lwork, lapack_int * info)
LAPACK_csysv_aa — literally the same list as csysv, bestie: uplo, n, nrhs, a, lda, ipiv, b, ldb, work, lwork, info. the _aa is in the name, that's the whole difference on this page. periodt.
void LAPACK_csysv_aa_2stage (char * uplo, lapack_int * n, lapack_int * nrhs,
lapack_complex_float * a, lapack_int * lda, lapack_complex_float * tb,
lapack_int * ltb, lapack_int * ipiv, lapack_int * ipiv2,
lapack_complex_float * b, lapack_int * ldb, lapack_complex_float * work,
lapack_int * lwork, lapack_int * info)
LAPACK_csysv_aa_2stage came with TWO pivots, ipiv AND ipiv2 🤯 plus a tb at ltb before them. then b, ldb, work, lwork, info. two-stage queen, two pivot energy, one legend 👑
void LAPACK_csysv_rk (char * uplo, lapack_int * n, lapack_int * nrhs,
lapack_complex_float * a, lapack_int * lda, lapack_complex_float * e,
lapack_int * ipiv, lapack_complex_float * b, lapack_int * ldb,
lapack_complex_float * work, lapack_int * lwork, lapack_int * info)
LAPACK_csysv_rk sneaks an e in right after lda and before ipiv 🧚 then it's the usual b, ldb, work, lwork, info. keep your eyes on that e, she's small but she's there.
void LAPACK_csysv_rook (char * uplo, lapack_int * n, lapack_int * nrhs,
lapack_complex_float * a, lapack_int * lda, lapack_int * ipiv,
lapack_complex_float * b, lapack_int * ldb, lapack_complex_float * work,
lapack_int * lwork, lapack_int * info)
LAPACK_csysv_rook — same shape as the original csysv: uplo, n, nrhs, a, lda, ipiv, b, ldb, work, lwork, info ⭐ different name, same gorgeous argument list.
void LAPACK_csysvx (char * fact, char * uplo, lapack_int * n, lapack_int *
nrhs, const lapack_complex_float * a, lapack_int * lda,
lapack_complex_float * af, lapack_int * ldaf, lapack_int * ipiv, const
lapack_complex_float * b, lapack_int * ldb, lapack_complex_float * x,
lapack_int * ldx, float * rcond, float * ferr, float * berr,
lapack_complex_float * work, lapack_int * lwork, float * rwork,
lapack_int * info)
LAPACK_csysvx starts with char * fact — the first argument, front and center, and she means it 💅 a and b are const, af and x are not, and you're getting rcond, ferr, berr, work, lwork, rwork, info on the way out. the full experience.
void LAPACK_csysvxx (char * fact, char * uplo, lapack_int * n, lapack_int *
nrhs, lapack_complex_float * a, lapack_int * lda, lapack_complex_float *
af, lapack_int * ldaf, lapack_int * ipiv, char * equed, float * s,
lapack_complex_float * b, lapack_int * ldb, lapack_complex_float * x,
lapack_int * ldx, float * rcond, float * rpvgrw, float * berr,
lapack_int * n_err_bnds, float * err_bnds_norm, float * err_bnds_comp,
lapack_int * nparams, float * params, lapack_complex_float * work, float
* rwork, lapack_int * info)
LAPACK_csysvxx is the final boss of the csysv family 😭 fact AND equed as char *, a and b here are not const (unlike her little sister csysvx — read carefully bestie), and she throws in rpvgrw alongside rcond and berr, then the whole n_err_bnds / err_bnds_norm / err_bnds_comp / nparams / params situation, plus work, rwork, info. girl brought the entire group chat. 🔥
void LAPACK_csyswapr (char * uplo, lapack_int * n, lapack_complex_float * a,
lapack_int * lda, lapack_int * i1, lapack_int * i2)
LAPACK_csyswapr keeps it tight — uplo, n, a, lda, i1, i2, done. no info, no work, no thoughts, head empty, swap complete 🌸
void LAPACK_csytrf (char * uplo, lapack_int * n, lapack_complex_float * a,
lapack_int * lda, lapack_int * ipiv, lapack_complex_float * work,
lapack_int * lwork, lapack_int * info)
LAPACK_csytrf — uplo, n, a, lda, ipiv, work, lwork, info 🎀 the factory setting, the blueprint, the one everyone else in the csytrf extended universe is built on.
void LAPACK_csytrf_aa (char * uplo, lapack_int * n, lapack_complex_float *
a, lapack_int * lda, lapack_int * ipiv, lapack_complex_float * work,
lapack_int * lwork, lapack_int * info)
LAPACK_csytrf_aa — identical: uplo, n, a, lda, ipiv, work, lwork, info. the _aa is doing literally all the heavy lifting in the name department 🦋
void LAPACK_csytrf_aa_2stage (char * uplo, lapack_int * n,
lapack_complex_float * a, lapack_int * lda, lapack_complex_float * tb,
lapack_int * ltb, lapack_int * ipiv, lapack_int * ipiv2,
lapack_complex_float * work, lapack_int * lwork, lapack_int * info)
LAPACK_csytrf_aa_2stage — two-stage, two-pivot, tb at ltb 😤 ipiv and ipiv2 both in the building, plus work, lwork, info. she's not like the other csytrf girls, she brought extra.
void LAPACK_csytrf_rk (char * uplo, lapack_int * n, lapack_complex_float *
a, lapack_int * lda, lapack_complex_float * e, lapack_int * ipiv,
lapack_complex_float * work, lapack_int * lwork, lapack_int * info)
LAPACK_csytrf_rk with the signature e 🧚 sitting right between lda and ipiv where she belongs. work, lwork, info — you know the drill by now, bestie.
void LAPACK_csytrf_rook (char * uplo, lapack_int * n, lapack_complex_float *
a, lapack_int * lda, lapack_int * ipiv, lapack_complex_float * work,
lapack_int * lwork, lapack_int * info)
LAPACK_csytrf_rook — uplo, n, a, lda, ipiv, work, lwork, info ⭐ same as base csytrf, different surname, still slaying.
void LAPACK_csytri (char * uplo, lapack_int * n, lapack_complex_float * a,
lapack_int * lda, const lapack_int * ipiv, lapack_complex_float * work,
lapack_int * info)
LAPACK_csytri inverts with grace 💖 uplo, n, a, lda, const ipiv (she read it, she didn't change it, respectfully), work, info.
void LAPACK_csytri2 (char * uplo, lapack_int * n, lapack_complex_float * a,
lapack_int * lda, const lapack_int * ipiv, lapack_complex_float * work,
lapack_int * lwork, lapack_int * info)
LAPACK_csytri2 — the sequel! 🎬 same as csytri but work now has a lwork bestie next to her. iconic evolution.
void LAPACK_csytri2x (char * uplo, lapack_int * n, lapack_complex_float * a,
lapack_int * lda, const lapack_int * ipiv, lapack_complex_float * work,
lapack_int * nb, lapack_int * info)
LAPACK_csytri2x says "no lwork for me actually" 🙈 instead there's a lapack_int * nb after work. that's the whole plot twist. uplo, n, a, lda, const ipiv, work, nb, info.
void LAPACK_csytri_3 (char * uplo, lapack_int * n, lapack_complex_float * a,
lapack_int * lda, const lapack_complex_float * e, const lapack_int *
ipiv, lapack_complex_float * work, lapack_int * lwork, lapack_int *
info)
LAPACK_csytri_3 brings a const lapack_complex_float * e to the party 🫶 it sits after lda and before the const ipiv. then work, lwork, info. note that BOTH e and ipiv are const — she's a perfect gentlewoman.
void LAPACK_csytrs (char * uplo, lapack_int * n, lapack_int * nrhs, const
lapack_complex_float * a, lapack_int * lda, const lapack_int * ipiv,
lapack_complex_float * b, lapack_int * ldb, lapack_int * info)
LAPACK_csytrs solves for you 🌈 const a, const ipiv, and a very not-const b that she's about to rewrite. uplo, n, nrhs, lda, ldb, info — all present, all accounted for.
void LAPACK_csytrs2 (char * uplo, lapack_int * n, lapack_int * nrhs, const
lapack_complex_float * a, lapack_int * lda, const lapack_int * ipiv,
lapack_complex_float * b, lapack_int * ldb, lapack_complex_float * work,
lapack_int * info)
LAPACK_csytrs2 — same as csytrs but she asked for a work array first 💅 honestly, boundaries. we love to see it.
void LAPACK_csytrs_3 (char * uplo, lapack_int * n, lapack_int * nrhs, const
lapack_complex_float * a, lapack_int * lda, const lapack_complex_float *
e, const lapack_int * ipiv, lapack_complex_float * b, lapack_int * ldb,
lapack_int * info)
LAPACK_csytrs_3 with const e and const ipiv both chilling in the middle, and no work in sight 😌 uplo, n, nrhs, a, lda, b, ldb, info — clean, efficient, booked and busy.
void LAPACK_csytrs_aa (char * uplo, lapack_int * n, lapack_int * nrhs, const
lapack_complex_float * a, lapack_int * lda, const lapack_int * ipiv,
lapack_complex_float * b, lapack_int * ldb, lapack_complex_float * work,
lapack_int * lwork, lapack_int * info)
LAPACK_csytrs_aa 👑 const a, const ipiv, then b, ldb, and a work/lwork combo before info. she came prepared with the full toolkit.
void LAPACK_csytrs_aa_2stage (char * uplo, lapack_int * n, lapack_int *
nrhs, lapack_complex_float * a, lapack_int * lda, lapack_complex_float *
tb, lapack_int * ltb, lapack_int * ipiv, lapack_int * ipiv2,
lapack_complex_float * b, lapack_int * ldb, lapack_int * info)
LAPACK_csytrs_aa_2stage — two-stage to the very end 😤 tb/ltb, ipiv, ipiv2, then b/ldb and info. and notice: a is not const here, and there's no work/lwork at all. different girl, different rules.
void LAPACK_csytrs_rook (char * uplo, lapack_int * n, lapack_int * nrhs,
const lapack_complex_float * a, lapack_int * lda, const lapack_int *
ipiv, lapack_complex_float * b, lapack_int * ldb, lapack_int * info)
LAPACK_csytrs_rook — const a, const ipiv, mutable b, no work 💖 literally csytrs with a different last name and the exact same guest list.
void LAPACK_ctbcon (char * norm, char * uplo, char * diag, lapack_int * n,
lapack_int * kd, const lapack_complex_float * ab, lapack_int * ldab,
float * rcond, lapack_complex_float * work, float * rwork, lapack_int *
info)
moving into the ctb era and we're starting with THREE char * in a row — norm, uplo, diag 🌟 LAPACK_ctbcon also wants n, kd, const ab at ldab, then hands you rcond, and takes both a work (lapack_complex_float *) and an rwork (float *). plus info. she's thorough and we stan.
void LAPACK_ctbrfs (char * uplo, char * trans, char * diag, lapack_int * n,
lapack_int * kd, lapack_int * nrhs, const lapack_complex_float * ab,
lapack_int * ldab, const lapack_complex_float * b, lapack_int * ldb,
const lapack_complex_float * x, lapack_int * ldx, float * ferr, float *
berr, lapack_complex_float * work, float * rwork, lapack_int * info)
LAPACK_ctbrfs — three char * again but this time it's uplo, trans, diag 🦋 then n, kd, nrhs, const ab/ldab, const b/ldb, const x/ldx, and out come ferr and berr. work, rwork, info close the show. so many consts, so much respect for your data.
void LAPACK_ctbtrs (char * uplo, char * trans, char * diag, lapack_int * n,
lapack_int * kd, lapack_int * nrhs, const lapack_complex_float * ab,
lapack_int * ldab, lapack_complex_float * b, lapack_int * ldb,
lapack_int * info)
LAPACK_ctbtrs keeps it cute and short 🎀 uplo, trans, diag, n, kd, nrhs, const ab/ldab, b/ldb, info. no work, no rwork, no extra credit — she did the assignment and went home.
void LAPACK_ctfsm (char * transr, char * side, char * uplo, char * trans,
char * diag, lapack_int * m, lapack_int * n, lapack_complex_float *
alpha, const lapack_complex_float * a, lapack_complex_float * b,
lapack_int * ldb)
FOUR char * in a row, bestie. FOUR. 😭 LAPACK_ctfsm is giving transr, side, uplo, trans, diag and honestly she earned the right. then m, n, alpha, const a, b at ldb, and NO info — she's confident, she doesn't need the feedback.
void LAPACK_ctftri (char * transr, char * uplo, char * diag, lapack_int * n,
lapack_complex_float * a, lapack_int * info)
LAPACK_ctftri — two lines, six args, zero notes 🌸 transr, uplo, diag, n, a, info. a minimalist icon.
void LAPACK_ctfttp (char * transr, char * uplo, lapack_int * n, const
lapack_complex_float * arf, lapack_complex_float * ap, lapack_int *
info)
LAPACK_ctfttp — note it's transr, uplo, n (no diag this time!) 🧚 then const arf goes in and ap comes out, with info watching from the corner.
void LAPACK_ctfttr (char * transr, char * uplo, lapack_int * n, const
lapack_complex_float * arf, lapack_complex_float * a, lapack_int * lda,
lapack_int * info)
LAPACK_ctfttr is ctfttp's sibling who insists on an lda 💅 transr, uplo, n, const arf, a, lda, info. same vibe, extra pointer, no regrets.
void LAPACK_ctgevc (char * side, char * howmny, const lapack_logical *
select, lapack_int * n, const lapack_complex_float * s, lapack_int *
lds, const lapack_complex_float * p, lapack_int * ldp,
lapack_complex_float * vl, lapack_int * ldvl, lapack_complex_float * vr,
lapack_int * ldvr, lapack_int * mm, lapack_int * m, lapack_complex_float
* work, float * rwork, lapack_int * info)
and to close this chunk out: LAPACK_ctgevc 🔥⚠️ bestie, take a breath. side, howmny, a const lapack_logical * select, n, then const s/lds and const p/ldp, then vl/ldvl AND vr/ldvr (left and right, both living their truth), then mm and m — yes, TWO different ms, do not confuse them — and finally work, rwork, info. iykyk 💜
more coming, don't go anywhere 🫶
okay we're still deep in the function docs and this stretch is all c-prefixed, all single-precision complex 💅 like, every single one. it's giving "we committed to the bit." every prototype below is the exact signature from the header, char * option args and lapack_int * info and all. slay.
🌸 LAPACK_ctgexc
void LAPACK_ctgexc (lapack_logical * wantq, lapack_logical * wantz,
lapack_int * n, lapack_complex_float * a, lapack_int * lda,
lapack_complex_float * b, lapack_int * ldb, lapack_complex_float * q,
lapack_int * ldq, lapack_complex_float * z, lapack_int * ldz, lapack_int
* ifst, lapack_int * ilst, lapack_int * info)
two lapack_logical flags up front (wantq, wantz) deciding whether you even get the q and z matrices, then the a/b pair with their very own lda/ldb, the q/z duo with ldq/ldz, the two index args ifst and ilst, and info closing it out. very "everybody gets a pointer." ✨
💜 LAPACK_ctgsen
void LAPACK_ctgsen (lapack_int * ijob, lapack_logical * wantq,
lapack_logical * wantz, const lapack_logical * select, lapack_int * n,
lapack_complex_float * a, lapack_int * lda, lapack_complex_float * b,
lapack_int * ldb, lapack_complex_float * alpha, lapack_complex_float *
beta, lapack_complex_float * q, lapack_int * ldq, lapack_complex_float *
z, lapack_int * ldz, lapack_int * m, float * pl, float * pr, float *
dif, lapack_complex_float * work, lapack_int * lwork, lapack_int *
iwork, lapack_int * liwork, lapack_int * info)
okay this one ate, honestly — ijob chooses the flavour, wantq/wantz gate the matrices, select is the only const thing in the whole first half (respect), then alpha, beta, q, z, the output m, and the trio pl, pr, dif all as plain float * 🍓 note the two workspaces: work/lwork and iwork/liwork, plus info at the end, always.
🦋 LAPACK_ctgsja
void LAPACK_ctgsja (char * jobu, char * jobv, char * jobq, lapack_int * m,
lapack_int * p, lapack_int * n, lapack_int * k, lapack_int * l,
lapack_complex_float * a, lapack_int * lda, lapack_complex_float * b,
lapack_int * ldb, float * tola, float * tolb, float * alpha, float *
beta, lapack_complex_float * u, lapack_int * ldu, lapack_complex_float *
v, lapack_int * ldv, lapack_complex_float * q, lapack_int * ldq,
lapack_complex_float * work, lapack_int * ncycle, lapack_int * info)
three whole char * job args — jobu, jobv, jobq — because of course there are three matrices to build. then the dimensional squad m, p, n, k, l, the a/b pair, tolerances tola/tolb, alpha/beta, the outputs u, v, q each with their own ld*, one work array, ncycle, and info. no cap, this is a whole ecosystem. 👑
🎀 LAPACK_ctgsna
void LAPACK_ctgsna (char * job, char * howmny, const lapack_logical *
select, lapack_int * n, const lapack_complex_float * a, lapack_int *
lda, const lapack_complex_float * b, lapack_int * ldb, const
lapack_complex_float * vl, lapack_int * ldvl, const lapack_complex_float
* vr, lapack_int * ldvr, float * s, float * dif, lapack_int * mm,
lapack_int * m, lapack_complex_float * work, lapack_int * lwork,
lapack_int * iwork, lapack_int * info)
look at all those consts — select, a, b, vl, vr are all read-only, so the compiler has your back 🫶 job and howmny are the classic char * pair, mm goes in, m comes out, s and dif are plain float *, and yes there's work/lwork, iwork, and info.
🔥 LAPACK_ctgsyl
void LAPACK_ctgsyl (char * trans, lapack_int * ijob, lapack_int * m,
lapack_int * n, const lapack_complex_float * a, lapack_int * lda, const
lapack_complex_float * b, lapack_int * ldb, lapack_complex_float * c,
lapack_int * ldc, const lapack_complex_float * d, lapack_int * ldd,
const lapack_complex_float * e, lapack_int * lde, lapack_complex_float *
f, lapack_int * ldf, float * scale, float * dif, lapack_complex_float *
work, lapack_int * lwork, lapack_int * iwork, lapack_int * info)
trans plus ijob — two ways to tell it what you want before you even get to the data 😭 then m, n, and five matrices a, b, c, d, e, f... okay six, each chained to its own ld*. c and f are writable, the rest are const. scale and dif both come out as float *, and the usual work/lwork, iwork, info send-off. 💜
⭐ LAPACK_ctpcon
void LAPACK_ctpcon (char * norm, char * uplo, char * diag, lapack_int * n,
const lapack_complex_float * ap, float * rcond, lapack_complex_float *
work, float * rwork, lapack_int * info)
short and sweet for once 💖 three char * args (norm, uplo, diag — the holy trinity of packed triangular routines), n, a const packed array ap, the output rcond as float *, then both a complex work and a real rwork, and info. the packed-storage life chose us.
🌈 LAPACK_ctpmqrt
void LAPACK_ctpmqrt (char * side, char * trans, lapack_int * m, lapack_int *
n, lapack_int * k, lapack_int * l, lapack_int * nb, const
lapack_complex_float * v, lapack_int * ldv, const lapack_complex_float *
t, lapack_int * ldt, lapack_complex_float * a, lapack_int * lda,
lapack_complex_float * b, lapack_int * ldb, lapack_complex_float * work,
lapack_int * info)
side and trans (both char *, naturally), then a whole parade of ints — m, n, k, l, nb — before you even reach the arrays 🌸 v and t are const (read-only kings), a and b get written to with lda/ldb, one work, and info to finish. the block size nb is right there front and centre, iykyk.
🧚 LAPACK_ctpqrt
void LAPACK_ctpqrt (lapack_int * m, lapack_int * n, lapack_int * l,
lapack_int * nb, lapack_complex_float * a, lapack_int * lda,
lapack_complex_float * b, lapack_int * ldb, lapack_complex_float * t,
lapack_int * ldt, lapack_complex_float * work, lapack_int * info)
no char * args at all?? a rarity, we love to see it ✨ just m, n, l, nb, then a, b, t — all writable this time, no const in sight — their ld* buddies, work, and info.
💀 LAPACK_ctpqrt2
void LAPACK_ctpqrt2 (lapack_int * m, lapack_int * n, lapack_int * l,
lapack_complex_float * a, lapack_int * lda, lapack_complex_float * b,
lapack_int * ldb, lapack_complex_float * t, lapack_int * ldt, lapack_int
* info)
the 2 version ✨ spot the difference: no nb, no work. literally that's it, ctpqrt minus two args. minimalism is so in right now. the rest is identical — m, n, l, a/lda, b/ldb, t/ldt, info.
🍓 LAPACK_ctprfb
void LAPACK_ctprfb (char * side, char * trans, char * direct, char * storev,
lapack_int * m, lapack_int * n, lapack_int * k, lapack_int * l, const
lapack_complex_float * v, lapack_int * ldv, const lapack_complex_float *
t, lapack_int * ldt, lapack_complex_float * a, lapack_int * lda,
lapack_complex_float * b, lapack_int * ldb, lapack_complex_float * work,
lapack_int * ldwork)
FOUR char * args — side, trans, direct, storev — a full personality quiz before the math 😭 then m, n, k, l, const v with ldv, const t with ldt, writable a/b with their ld*, and work/ldwork. and guess what — no info. iconic deviation, honestly. 🙈
🫶 LAPACK_ctprfs
void LAPACK_ctprfs (char * uplo, char * trans, char * diag, lapack_int * n,
lapack_int * nrhs, const lapack_complex_float * ap, const
lapack_complex_float * b, lapack_int * ldb, const lapack_complex_float *
x, lapack_int * ldx, float * ferr, float * berr, lapack_complex_float *
work, float * rwork, lapack_int * info)
uplo/trans/diag back again, n and nrhs, then three const inputs — ap, b, x — with ldb and ldx on the latter two 💜 the error outputs ferr and berr are both float *, followed by complex work and real rwork, then info. the const-correctness here is lowkey aspirational.
👑 LAPACK_ctptri
void LAPACK_ctptri (char * uplo, char * diag, lapack_int * n,
lapack_complex_float * ap, lapack_int * info)
five args. FIVE. 🎀 uplo, diag, n, the packed ap (writable — it gets overwritten), and info. after the monster signatures above this feels like a lil snack and i'm obsessed.
🦋 LAPACK_ctptrs
void LAPACK_ctptrs (char * uplo, char * trans, char * diag, lapack_int * n,
lapack_int * nrhs, const lapack_complex_float * ap, lapack_complex_float
* b, lapack_int * ldb, lapack_int * info)
three char * options, n, nrhs, const ap, then the writable b with ldb, and info. notice ap is const here but not in ctptri right above — that's the whole difference between solving with it and inverting it, bestie 💅
🌸 LAPACK_ctpttf
void LAPACK_ctpttf (char * transr, char * uplo, lapack_int * n, const
lapack_complex_float * ap, lapack_complex_float * arf, lapack_int *
info)
transr and uplo (yes, transr with the r, not trans — spell it right 😤), n, const ap going in, arf coming out, info. packed ➡️ rectangular full, one array to the other.
⭐ LAPACK_ctpttr
void LAPACK_ctpttr (char * uplo, lapack_int * n, const lapack_complex_float
* ap, lapack_complex_float * a, lapack_int * lda, lapack_int * info)
uplo, n, const ap in, a with lda out, info. another packed-to-full glow-up, no transr this time because there's only one direction to go 🫶
💜 LAPACK_ctrcon
void LAPACK_ctrcon (char * norm, char * uplo, char * diag, lapack_int * n,
const lapack_complex_float * a, lapack_int * lda, float * rcond,
lapack_complex_float * work, float * rwork, lapack_int * info)
the full-storage sibling of ctpcon: same norm/uplo/diag trio, but a comes with an lda instead of being packed 🌈 then rcond, complex work, real rwork, info. same energy, different storage.
🔥 LAPACK_ctrevc
void LAPACK_ctrevc (char * side, char * howmny, const lapack_logical *
select, lapack_int * n, lapack_complex_float * t, lapack_int * ldt,
lapack_complex_float * vl, lapack_int * ldvl, lapack_complex_float * vr,
lapack_int * ldvr, lapack_int * mm, lapack_int * m, lapack_complex_float
* work, float * rwork, lapack_int * info)
side + howmny + const select, n, then t, vl, vr — all writable, each with an ld* — then mm in, m out, complex work, real rwork, info. the vectors are getting computed, no cap. 💅
🎀 LAPACK_ctrexc
void LAPACK_ctrexc (char * compq, lapack_int * n, lapack_complex_float * t,
lapack_int * ldt, lapack_complex_float * q, lapack_int * ldq, lapack_int
* ifst, lapack_int * ilst, lapack_int * info)
compq (the char * that decides whether q is even touched), n, t/ldt, q/ldq, the two indices ifst/ilst, info. neat, tidy, no rwork in sight. we stan a low-maintenance signature. ✨
🧚 LAPACK_ctrrfs
void LAPACK_ctrrfs (char * uplo, char * trans, char * diag, lapack_int * n,
lapack_int * nrhs, const lapack_complex_float * a, lapack_int * lda,
const lapack_complex_float * b, lapack_int * ldb, const
lapack_complex_float * x, lapack_int * ldx, float * ferr, float * berr,
lapack_complex_float * work, float * rwork, lapack_int * info)
basically ctprfs but with full storage — uplo/trans/diag, n, nrhs, three const arrays a, b, x each with an ld*, the float * error outputs ferr/berr, complex work, real rwork, info. copy-paste energy but make it full. 🍓
💀 LAPACK_ctrsen
void LAPACK_ctrsen (char * job, char * compq, const lapack_logical * select,
lapack_int * n, lapack_complex_float * t, lapack_int * ldt,
lapack_complex_float * q, lapack_int * ldq, lapack_complex_float * w,
lapack_int * m, float * s, float * sep, lapack_complex_float * work,
lapack_int * lwork, lapack_int * info)
job and compq are char *, select is the lone const, then n, t/ldt, q/ldq, the eigenvalue output w, the count m, the two float * condition numbers s and sep, work/lwork, info. only one workspace pair here — no iwork, we're travelling light 🦋
🌈 LAPACK_ctrsna
void LAPACK_ctrsna (char * job, char * howmny, const lapack_logical *
select, lapack_int * n, const lapack_complex_float * t, lapack_int *
ldt, const lapack_complex_float * vl, lapack_int * ldvl, const
lapack_complex_float * vr, lapack_int * ldvr, float * s, float * sep,
lapack_int * mm, lapack_int * m, lapack_complex_float * work, lapack_int
* ldwork, float * rwork, lapack_int * info)
the select-ing sibling: job, howmny, const select, n, then t, vl, vr all const with their ld*, outputs s/sep, mm in and m out, work/ldwork (note: ldwork, not lwork 👀), real rwork, and info.
👑 LAPACK_ctrsyl
void LAPACK_ctrsyl (char * trana, char * tranb, lapack_int * isgn,
lapack_int * m, lapack_int * n, const lapack_complex_float * a,
lapack_int * lda, const lapack_complex_float * b, lapack_int * ldb,
lapack_complex_float * c, lapack_int * ldc, float * scale, lapack_int *
info)
two transposes (trana, tranb — one for each matrix, obviously), then isgn, m, n, the two const inputs a and b with lda/ldb, the writable c with ldc, the float * scale, and info. no workspace arrays, no rwork — lean machine ✨
🎀 LAPACK_ctrtri
void LAPACK_ctrtri (char * uplo, char * diag, lapack_int * n,
lapack_complex_float * a, lapack_int * lda, lapack_int * info)
six args, that's the whole thing 💖 uplo, diag, n, a, lda, info. the packed version ctptri has one fewer because the leading dimension is implied. love a consistent design.
🫶 LAPACK_ctrtrs
void LAPACK_ctrtrs (char * uplo, char * trans, char * diag, lapack_int * n,
lapack_int * nrhs, const lapack_complex_float * a, lapack_int * lda,
lapack_complex_float * b, lapack_int * ldb, lapack_int * info)
uplo, trans, diag, n, nrhs, const a with lda, writable b with ldb, info. the full-storage twin of ctptrs, and yes a is const here too. consistent kings. 👑
🌸 LAPACK_ctrttf
void LAPACK_ctrttf (char * transr, char * uplo, lapack_int * n, const
lapack_complex_float * a, lapack_int * lda, lapack_complex_float * arf,
lapack_int * info)
transr/uplo, n, const a + lda in, arf out, info. full ➡️ rectangular-full. the mirror image of ctpttf, and it's giving symmetry. 🦋
🍓 LAPACK_ctrttp
void LAPACK_ctrttp (char * uplo, lapack_int * n, const lapack_complex_float
* a, lapack_int * lda, lapack_complex_float * ap, lapack_int * info)
uplo, n, const a + lda, then the packed output ap, then info. full ➡️ packed. packs it up and sends it off. 🎀
🔥 LAPACK_ctzrzf
void LAPACK_ctzrzf (lapack_int * m, lapack_int * n, lapack_complex_float *
a, lapack_int * lda, lapack_complex_float * tau, lapack_complex_float *
work, lapack_int * lwork, lapack_int * info)
no char * args here, it's a choose-your-own-nothing situation ✨ m, n, a/lda, the output tau, work/lwork, info. clean, no options, just vibes.
💜 LAPACK_cunbdb
void LAPACK_cunbdb (char * trans, char * signs, lapack_int * m, lapack_int *
p, lapack_int * q, lapack_complex_float * x11, lapack_int * ldx11,
lapack_complex_float * x12, lapack_int * ldx12, lapack_complex_float *
x21, lapack_int * ldx21, lapack_complex_float * x22, lapack_int * ldx22,
float * theta, float * phi, lapack_complex_float * taup1,
lapack_complex_float * taup2, lapack_complex_float * tauq1,
lapack_complex_float * tauq2, lapack_complex_float * work, lapack_int *
lwork, lapack_int * info)
okay this is THE big one — trans and signs, then m, p, q, then the four quadrants x11, x12, x21, x22 each with their own ldx11/ldx12/ldx21/ldx22 (the naming?? immaculate consistency 😭), the real outputs theta and phi, four taus — taup1, taup2, tauq1, tauq2 — then work/lwork and info. a whole grid, bestie. 🍓
🧚 LAPACK_cuncsd
void LAPACK_cuncsd (char * jobu1, char * jobu2, char * jobv1t, char *
jobv2t, char * trans, char * signs, lapack_int * m, lapack_int * p,
lapack_int * q, lapack_complex_float * x11, lapack_int * ldx11,
lapack_complex_float * x12, lapack_int * ldx12, lapack_complex_float *
x21, lapack_int * ldx21, lapack_complex_float * x22, lapack_int * ldx22,
float * theta, lapack_complex_float * u1, lapack_int * ldu1,
lapack_complex_float * u2, lapack_int * ldu2, lapack_complex_float *
v1t, lapack_int * ldv1t, lapack_complex_float * v2t, lapack_int * ldv2t,
lapack_complex_float * work, lapack_int * lwork, float * rwork,
lapack_int * lrwork, lapack_int * iwork, lapack_int * info)
FIVE char * option args (jobu1, jobu2, jobv1t, jobv2t, trans, signs — okay that's six, i miscounted, it's six 💀) then m, p, q, the quadrant quartet with all four ldx args, theta, the four outputs u1/u2/v1t/v2t with ldu1/ldu2/ldv1t/ldv2t, and three whole workspaces: work/lwork, rwork/lrwork, and iwork. info at the very end holding it all together. this signature is a masterpiece honestly. 😭
⭐ LAPACK_cuncsd2by1
void LAPACK_cuncsd2by1 (char * jobu1, char * jobu2, char * jobv1t,
lapack_int * m, lapack_int * p, lapack_int * q, lapack_complex_float *
x11, lapack_int * ldx11, lapack_complex_float * x21, lapack_int * ldx21,
float * theta, lapack_complex_float * u1, lapack_int * ldu1,
lapack_complex_float * u2, lapack_int * ldu2, lapack_complex_float *
v1t, lapack_int * ldv1t, lapack_complex_float * work, lapack_int *
lwork, float * rwork, lapack_int * lrwork, lapack_int * iwork,
lapack_int * info)
the 2by1 version and look how much shorter it is 💅 only three char * args (jobu1, jobu2, jobv1t), and only two quadrants — x11 and x21 — so just ldx11 and ldx21. still m, p, q, still theta, still u1/u2/v1t with ldu1/ldu2/ldv1t, and still the triple workspace work/lwork, rwork/lrwork, iwork. info closes. fewer pieces, same energy. 🔥
🫶 LAPACK_cungbr
void LAPACK_cungbr (char * vect, lapack_int * m, lapack_int * n, lapack_int
* k, lapack_complex_float * a, lapack_int * lda, const
lapack_complex_float * tau, lapack_complex_float * work, lapack_int *
lwork, lapack_int * info)
vect picks which thing you're generating, then m, n, k, the in-place a with lda, the const tau (read-only, don't you dare), work/lwork, info. solid middleweight. ✨
🎀 LAPACK_cunghr
void LAPACK_cunghr (lapack_int * n, lapack_int * ilo, lapack_int * ihi,
lapack_complex_float * a, lapack_int * lda, const lapack_complex_float *
tau, lapack_complex_float * work, lapack_int * lwork, lapack_int * info)
no char * at all — just n, the index pair ilo/ihi, a/lda, const tau, work/lwork, info. nine args of pure purpose. 🌸
💜 LAPACK_cunglq
void LAPACK_cunglq (lapack_int * m, lapack_int * n, lapack_int * k,
lapack_complex_float * a, lapack_int * lda, const lapack_complex_float *
tau, lapack_complex_float * work, lapack_int * lwork, lapack_int * info)
m, n, k, a/lda, const tau, work/lwork, info. and yes — the header literally puts a blank line after this one, so we're honouring the blank line. 🦋
🌈 LAPACK_cungql
void LAPACK_cungql (lapack_int * m, lapack_int * n, lapack_int * k,
lapack_complex_float * a, lapack_int * lda, const lapack_complex_float *
tau, lapack_complex_float * work, lapack_int * lwork, lapack_int * info)
hey bestie, it's character-for-character the same signature as cunglq — the only difference is the q vs l in the name 🔥 same m, n, k, a/lda, const tau, work/lwork, info. copy-paste with confidence.
🍓 LAPACK_cungqr
void LAPACK_cungqr (lapack_int * m, lapack_int * n, lapack_int * k,
lapack_complex_float * a, lapack_int * lda, const lapack_complex_float *
tau, lapack_complex_float * work, lapack_int * lwork, lapack_int * info)
aaaand again 💅 cungqr, same nine args, same order, m, n, k, a/lda, const tau, work/lwork, info. the ung-family really said "one signature, multiple interpretations."
⭐ LAPACK_cungrq
void LAPACK_cungrq (lapack_int * m, lapack_int * n, lapack_int * k,
lapack_complex_float * a, lapack_int * lda, const lapack_complex_float *
tau, lapack_complex_float * work, lapack_int * lwork, lapack_int * info)
last one in this batch and it's the same shape yet again — m, n, k, a/lda, const tau, work/lwork, info ✨ if you learned one of these four you learned all four, and that's the beauty of a well-designed family. 🫶
LAPACK_cungtr✨ — the first of thec-crew, bestie. Signature goes like this:
void LAPACK_cungtr (char * uplo, lapack_int * n, lapack_complex_float * a,
lapack_int * lda, const lapack_complex_float * tau,
lapack_complex_float * work, lapack_int * lwork, lapack_int * info)
Look at her. uplo, n, a, lda, tau, work, lwork, info — the whole iconic lineup. 💅
LAPACK_cunmbr🦋 — six string-ish args deep, and honestly it's giving "I have a lot going on but I'm thriving":
void LAPACK_cunmbr (char * vect, char * side, char * trans, lapack_int * m,
lapack_int * n, lapack_int * k, const lapack_complex_float * a,
lapack_int * lda, const lapack_complex_float * tau,
lapack_complex_float * c, lapack_int * ldc,
lapack_complex_float * work, lapack_int * lwork, lapack_int * info)
vect AND side AND trans? main character energy fr fr 👑
LAPACK_cunmhr🎀 — theunmhrgirlie. Same shape as her sisters,sideandtransleading the parade, and yesilo+ihiare in there doing their thing:
void LAPACK_cunmhr (char * side, char * trans, lapack_int * m, lapack_int * n,
lapack_int * ilo, lapack_int * ihi, const lapack_complex_float * a,
lapack_int * lda, const lapack_complex_float * tau,
lapack_complex_float * c, lapack_int * ldc,
lapack_complex_float * work, lapack_int * lwork, lapack_int * info)
LAPACK_cunmlq🌸 —lqhanging off the end of the name like a little bow:
void LAPACK_cunmlq (char * side, char * trans, lapack_int * m, lapack_int * n,
lapack_int * k, const lapack_complex_float * a, lapack_int * lda,
const lapack_complex_float * tau, lapack_complex_float * c,
lapack_int * ldc, lapack_complex_float * work, lapack_int * lwork,
lapack_int * info)
LAPACK_cunmql💜 — missql. Yes she has the exact same parameter list asLAPACK_cunmlqand no I will not be apologising for pointing that out 💀:
void LAPACK_cunmql (char * side, char * trans, lapack_int * m, lapack_int * n,
lapack_int * k, const lapack_complex_float * a, lapack_int * lda,
const lapack_complex_float * tau, lapack_complex_float * c,
lapack_int * ldc, lapack_complex_float * work, lapack_int * lwork,
lapack_int * info)
LAPACK_cunmqr🔥 — theqrone, arguably the most famous of thecunmfamily, and she knows it:
void LAPACK_cunmqr (char * side, char * trans, lapack_int * m, lapack_int * n,
lapack_int * k, const lapack_complex_float * a, lapack_int * lda,
const lapack_complex_float * tau, lapack_complex_float * c,
lapack_int * ldc, lapack_complex_float * work, lapack_int * lwork,
lapack_int * info)
LAPACK_cunmrq🧚 —rqthis time. Same crew, same outfit. Slay:
void LAPACK_cunmrq (char * side, char * trans, lapack_int * m, lapack_int * n,
lapack_int * k, const lapack_complex_float * a, lapack_int * lda,
const lapack_complex_float * tau, lapack_complex_float * c,
lapack_int * ldc, lapack_complex_float * work, lapack_int * lwork,
lapack_int * info)
LAPACK_cunmrz🍓 — okay she's different!! She has BOTHkandlin there, so she ate and left no crumbs:
void LAPACK_cunmrz (char * side, char * trans, lapack_int * m, lapack_int * n,
lapack_int * k, lapack_int * l, const lapack_complex_float * a,
lapack_int * lda, const lapack_complex_float * tau,
lapack_complex_float * c, lapack_int * ldc,
lapack_complex_float * work, lapack_int * lwork, lapack_int * info)
LAPACK_cunmtr🌈 — we're back to the two-char-arg lifestyle:sideanduploandtrans, oh my:
void LAPACK_cunmtr (char * side, char * uplo, char * trans, lapack_int * m,
lapack_int * n, const lapack_complex_float * a, lapack_int * lda,
const lapack_complex_float * tau, lapack_complex_float * c,
lapack_int * ldc, lapack_complex_float * work, lapack_int * lwork,
lapack_int * info)
LAPACK_cupgtr⭐ — noside, notrans, justuplo,n,ap,tau,q,ldq,work,info. Minimalist queen 💅 note theap(packed!) and theq+ldqcombo:
void LAPACK_cupgtr (char * uplo, lapack_int * n,
const lapack_complex_float * ap, const lapack_complex_float * tau,
lapack_complex_float * q, lapack_int * ldq,
lapack_complex_float * work, lapack_int * info)
LAPACK_cupmtr🫶 — and here'scupgtr's extroverted sibling with the fullside/uplo/transtrio:
void LAPACK_cupmtr (char * side, char * uplo, char * trans, lapack_int * m,
lapack_int * n, const lapack_complex_float * ap,
const lapack_complex_float * tau, lapack_complex_float * c,
lapack_int * ldc, lapack_complex_float * work, lapack_int * info)
okay we're switching teams — it's d hours now, double precision girlies rise 🙈
LAPACK_dbbcsd💖 — hold on, she is LONG. Like, count-the-arguments long.jobu1,jobu2,jobv1t,jobv2t,trans, thenmpq, thetheta/phiduo,u1/ldu1,u2/ldu2,v1t/ldv1t,v2t/ldv2t, and then the b-squad:b11d,b11e,b12d,b12e,b21d,b21e,b22d,b22e. Iconic. No notes:
void LAPACK_dbbcsd (char * jobu1, char * jobu2, char * jobv1t, char * jobv2t,
char * trans, lapack_int * m, lapack_int * p, lapack_int * q,
double * theta, double * phi, double * u1, lapack_int * ldu1, double * u2,
lapack_int * ldu2, double * v1t, lapack_int * ldv1t, double * v2t,
lapack_int * ldv2t, double * b11d, double * b11e, double * b12d,
double * b12e, double * b21d, double * b21e, double * b22d, double * b22e,
double * work, lapack_int * lwork, lapack_int * info)
bestie if you're calling this one, count your args twice. trust. 😭
LAPACK_dbdsdc🎀 —uplo+compq, thenn,d,e,u/ldu,vt/ldvt, and the chaoticq+iqpair, plus BOTHworkandiworkbeforeinfo:
void LAPACK_dbdsdc (char * uplo, char * compq, lapack_int * n,
double * d, double * e, double * u, lapack_int * ldu, double * vt,
lapack_int * ldvt, double * q, lapack_int * iq, double * work,
lapack_int * iwork, lapack_int * info)
work AND iwork? she brought both bags 💅
LAPACK_dbdsqr💀 — thebdsqrclassics:uplo,n, then the trioncvt,nru,ncc, and the data girliesd,e,vt,ldvt,u,ldu,c,ldc, wrapping up withwork+info:
void LAPACK_dbdsqr (char * uplo, lapack_int * n, lapack_int * ncvt,
lapack_int * nru, lapack_int * ncc, double * d, double * e, double * vt,
lapack_int * ldvt, double * u, lapack_int * ldu, double * c,
lapack_int * ldc, double * work, lapack_int * info)
LAPACK_dbdsvdx🦋 — okay range queen!!uplo,jobz,range,n,d,e,vl,vu,il,iu,ns,s,z,ldz, and yes bothworkandiwork:
void LAPACK_dbdsvdx (char * uplo, char * jobz, char * range, lapack_int * n,
double * d, double * e, double * vl, double * vu, lapack_int * il,
lapack_int * iu, lapack_int * ns, double * s, double * z, lapack_int * ldz,
double * work, lapack_int * iwork, lapack_int * info)
vl, vu, il, iu — the whole bounds situation, we love to see it ✨
LAPACK_ddisna🌸 — short and sweet for once!job,m,n,d,sep,info. That's it. That's the whole girlie. Obsessed with the restraint:
void LAPACK_ddisna (char * job, lapack_int * m, lapack_int * n,
const double * d, double * sep, lapack_int * info)
LAPACK_dgbbrd🔥 — thegbband chapter begins.vect,m,n,ncc,kl,ku, thenab/ldab,d,e,q/ldq,pt/ldpt,c/ldc,work,info:
void LAPACK_dgbbrd (char * vect, lapack_int * m, lapack_int * n,
lapack_int * ncc, lapack_int * kl, lapack_int * ku, double * ab,
lapack_int * ldab, double * d, double * e, double * q, lapack_int * ldq,
double * pt, lapack_int * ldpt, double * c, lapack_int * ldc,
double * work, lapack_int * info)
LAPACK_dgbcon💜 —norm,n,kl,ku,ab/ldab,ipiv,anorm,rcond,work,iwork,info. Theipivgirlies are here and they broughtiwork:
void LAPACK_dgbcon (char * norm, lapack_int * n, lapack_int * kl,
lapack_int * ku, const double * ab, lapack_int * ldab,
const lapack_int * ipiv, double * anorm, double * rcond, double * work,
lapack_int * iwork, lapack_int * info)
LAPACK_dgbequ🎀 — nojob/norm/transin sight, justm,n,kl,ku, the matrix, then the scaling cutiesr,c,rowcnd,colcnd,amax,info:
void LAPACK_dgbequ (lapack_int * m, lapack_int * n, lapack_int * kl,
lapack_int * ku, const double * ab, lapack_int * ldab, double * r,
double * c, double * rowcnd, double * colcnd, double * amax,
lapack_int * info)
LAPACK_dgbequb✨ — literallydgbequwith abon the end, matching parameter list and all. She's the remix:
void LAPACK_dgbequb (lapack_int * m, lapack_int * n, lapack_int * kl,
lapack_int * ku, const double * ab, lapack_int * ldab, double * r,
double * c, double * rowcnd, double * colcnd, double * amax,
lapack_int * info)
LAPACK_dgbrfs🧚 — therfsgirlies!!trans,n,kl,ku,nrhs, then theab/afbduo (both with their ownld),ipiv,b/ldb,x/ldx, and the error twinsferr+berr:
void LAPACK_dgbrfs (char * trans, lapack_int * n, lapack_int * kl,
lapack_int * ku, lapack_int * nrhs, const double * ab, lapack_int * ldab,
const double * afb, lapack_int * ldafb, const lapack_int * ipiv,
const double * b, lapack_int * ldb, double * x, lapack_int * ldx,
double * ferr, double * berr, double * work, lapack_int * iwork,
lapack_int * info)
ferr and berr bestie duo, we stan 🫶
LAPACK_dgbrfsx⭐ — thexmeans she's extra and she EARNED it. Same start, but then we getequed,r,c,rcond,berr,n_err_bnds,err_bnds_norm,err_bnds_comp,nparams,params,work,iwork,info. It's giving "I have options and I'm using all of them":
void LAPACK_dgbrfsx (char * trans, char * equed, lapack_int * n,
lapack_int * kl, lapack_int * ku, lapack_int * nrhs, const double * ab,
lapack_int * ldab, const double * afb, lapack_int * ldafb,
const lapack_int * ipiv, const double * r, const double * c,
const double * b, lapack_int * ldb, double * x, lapack_int * ldx,
double * rcond, double * berr, lapack_int * n_err_bnds,
double * err_bnds_norm, double * err_bnds_comp, lapack_int * nparams,
double * params, double * work, lapack_int * iwork, lapack_int * info)
LAPACK_dgbsv🌈 — the solver, and look how chill she is:n,kl,ku,nrhs,ab/ldab,ipiv,b/ldb,info. Nowork, nolwork, no drama 💅:
void LAPACK_dgbsv (lapack_int * n, lapack_int * kl, lapack_int * ku,
lapack_int * nrhs, double * ab, lapack_int * ldab, lapack_int * ipiv,
double * b, lapack_int * ldb, lapack_int * info)
LAPACK_dgbsvx💖 — thexversion said "and I took that personally".fact,trans,n,kl,ku,nrhs,ab/ldab,afb/ldafb,ipiv,equed,r,c,b/ldb,x/ldx,rcond,ferr,berr,work,iwork,info:
void LAPACK_dgbsvx (char * fact, char * trans, lapack_int * n, lapack_int * kl,
lapack_int * ku, lapack_int * nrhs, double * ab, lapack_int * ldab,
double * afb, lapack_int * ldafb, lapack_int * ipiv, char * equed,
double * r, double * c, double * b, lapack_int * ldb, double * x,
lapack_int * ldx, double * rcond, double * ferr, double * berr,
double * work, lapack_int * iwork, lapack_int * info)
LAPACK_dgbsvxx👑 — DOUBLE x. DOUBLE. She's the final boss of thegbsvline and she hasrpvgrwwhich nobody else has, plusberr,n_err_bnds,err_bnds_norm,err_bnds_comp,nparams,params,work,iwork:
void LAPACK_dgbsvxx (char * fact, char * trans, lapack_int * n,
lapack_int * kl, lapack_int * ku, lapack_int * nrhs, double * ab,
lapack_int * ldab, double * afb, lapack_int * ldafb, lapack_int * ipiv,
char * equed, double * r, double * c, double * b, lapack_int * ldb,
double * x, lapack_int * ldx, double * rcond, double * rpvgrw,
double * berr, lapack_int * n_err_bnds, double * err_bnds_norm,
double * err_bnds_comp, lapack_int * nparams, double * params,
double * work, lapack_int * iwork, lapack_int * info)
rpvgrwmy beloved 😭 she's only here for thexxgirlies, iykyk
LAPACK_dgbtrf🍓 — thetrf! small cast, big responsibility:m,n,kl,ku,ab,ldab,ipiv,info:
void LAPACK_dgbtrf (lapack_int * m, lapack_int * n, lapack_int * kl,
lapack_int * ku, double * ab, lapack_int * ldab, lapack_int * ipiv,
lapack_int * info)
LAPACK_dgbtrs🌸 —trshastransand noldab-less nonsense;n,kl,ku,nrhs,ab/ldab,ipiv,b/ldb,info:
void LAPACK_dgbtrs (char * trans, lapack_int * n, lapack_int * kl,
lapack_int * ku, lapack_int * nrhs, const double * ab, lapack_int * ldab,
const lapack_int * ipiv, double * b, lapack_int * ldb, lapack_int * info)
moving on to the ge girlies, they're a whole vibe 🦋
LAPACK_dgebak🎀 —job,side,n,ilo,ihi,scale,m,v/ldv,info. The balancing-adjacent family starts here and yesilo+ihiare back:
void LAPACK_dgebak (char * job, char * side, lapack_int * n, lapack_int * ilo,
lapack_int * ihi, const double * scale, lapack_int * m, double * v,
lapack_int * ldv, lapack_int * info)
LAPACK_dgebal💜 — samejob,ilo,ihi,scaleenergy but she works ona/ldadirectly and has nom, nov, noldv:
void LAPACK_dgebal (char * job, lapack_int * n, double * a, lapack_int * lda,
lapack_int * ilo, lapack_int * ihi, double * scale, lapack_int * info)
LAPACK_dgebrd🔥 —brdgirlie:m,n,a/lda,d,e, and the iconictauq+taupdouble act, thenwork/lwork,info:
void LAPACK_dgebrd (lapack_int * m, lapack_int * n, double * a,
lapack_int * lda, double * d, double * e, double * tauq, double * taup,
double * work, lapack_int * lwork, lapack_int * info)
tauq and taup must be protected at all costs 🫶
LAPACK_dgecon💀 —norm,n,a/lda,anorm,rcond,work,iwork,info.anormandrcondtogether again, and yesiworkcame along:
void LAPACK_dgecon (char * norm, lapack_int * n, const double * a,
lapack_int * lda, double * anorm, double * rcond, double * work,
lapack_int * iwork, lapack_int * info)
LAPACK_dgeequ✨ —m,n,a/lda,r,c,rowcnd,colcnd,amax,info. Equilibration crew, nojob, nowork, just vibes:
void LAPACK_dgeequ (lapack_int * m, lapack_int * n, const double * a,
lapack_int * lda, double * r, double * c, double * rowcnd,
double * colcnd, double * amax, lapack_int * info)
LAPACK_dgeequb🌈 — and thebremix, identical parameter list, no notes:
void LAPACK_dgeequb (lapack_int * m, lapack_int * n, const double * a,
lapack_int * lda, double * r, double * c, double * rowcnd,
double * colcnd, double * amax, lapack_int * info)
LAPACK_dgees⭐ — okay she's fancy!!jobvs,sort, and a wholeLAPACK_D_SELECT2 selectcallback in the middle, thenn,a/lda,sdim,wr,wi,vs/ldvs,work/lwork, andbwork(alapack_logical *, note the type!) beforeinfo:
void LAPACK_dgees (char * jobvs, char * sort, LAPACK_D_SELECT2 select,
lapack_int * n, double * a, lapack_int * lda, lapack_int * sdim,
double * wr, double * wi, double * vs, lapack_int * ldvs, double * work,
lapack_int * lwork, lapack_logical * bwork, lapack_int * info)
callback + bwork? she's not like other routines 💅
LAPACK_dgeesx💖 —dgeesbutx, so addsense,rconde,rcondv, and bothwork/lworkANDiwork/liwork. Look at her go:
void LAPACK_dgeesx (char * jobvs, char * sort, LAPACK_D_SELECT2 select,
char * sense, lapack_int * n, double * a, lapack_int * lda,
lapack_int * sdim, double * wr, double * wi, double * vs, lapack_int * ldvs,
double * rconde, double * rcondv, double * work, lapack_int * lwork,
lapack_int * iwork, lapack_int * liwork, lapack_logical * bwork,
lapack_int * info)
LAPACK_dgeev🧚 — the celebrity.jobvl,jobvr,n,a/lda,wr,wi,vl/ldvl,vr/ldvr,work/lwork,info. Left AND right vectors, she's ambidextrous:
void LAPACK_dgeev (char * jobvl, char * jobvr, lapack_int * n, double * a,
lapack_int * lda, double * wr, double * wi, double * vl, lapack_int * ldvl,
double * vr, lapack_int * ldvr, double * work, lapack_int * lwork,
lapack_int * info)
LAPACK_dgeevx🔥 — the extended cut, and there's a LOT:balancup front,jobvl,jobvr,sense,n,a/lda,wr,wi,vl/ldvl,vr/ldvr,ilo,ihi,scale,abnrm,rconde,rcondv,work/lwork,iwork,info:
void LAPACK_dgeevx (char * balanc, char * jobvl, char * jobvr, char * sense,
lapack_int * n, double * a, lapack_int * lda, double * wr, double * wi,
double * vl, lapack_int * ldvl, double * vr, lapack_int * ldvr,
lapack_int * ilo, lapack_int * ihi, double * scale, double * abnrm,
double * rconde, double * rcondv, double * work, lapack_int * lwork,
lapack_int * iwork, lapack_int * info)
not abnrm AND scale AND ilo/ihi in one signature 😭 she contains multitudes
LAPACK_dgehrd🎀 —n,ilo,ihi,a/lda,tau,work/lwork,info. Short, sweet,tau-having:
void LAPACK_dgehrd (lapack_int * n, lapack_int * ilo, lapack_int * ihi,
double * a, lapack_int * lda, double * tau, double * work,
lapack_int * lwork, lapack_int * info)
LAPACK_dgejsv👑 — the job-heavy one!! FIVE job args (joba,jobu,jobv,jobr,jobt,jobp— okay six, I miscounted, that's literally six 💀), thenm,n,a/lda,sva,u/ldu,v/ldv,work/lwork,iwork,info:
void LAPACK_dgejsv (char * joba, char * jobu, char * jobv, char * jobr,
char * jobt, char * jobp, lapack_int * m, lapack_int * n, double * a,
lapack_int * lda, double * sva, double * u, lapack_int * ldu, double * v,
lapack_int * ldv, double * work, lapack_int * lwork, lapack_int * iwork,
lapack_int * info)
six char args before you even get to the numbers. respecting the hustle 🫡
LAPACK_dgelq🌸 — LQ era begins!m,n,a/lda,t,tsize,work/lwork,info. Notetsize— she's special:
void LAPACK_dgelq (lapack_int * m, lapack_int * n, double * a,
lapack_int * lda, double * t, lapack_int * tsize, double * work,
lapack_int * lwork, lapack_int * info)
LAPACK_dgelq2🦋 — the2version, not/tsize, back to the classictau:
void LAPACK_dgelq2 (lapack_int * m, lapack_int * n, double * a,
lapack_int * lda, double * tau, double * work, lapack_int * info)
LAPACK_dgelqf💜 — and thef!!m,n,a/lda,tau,work/lwork,info. She's got thelworkthatdgelq2doesn't, periodt:
void LAPACK_dgelqf (lapack_int * m, lapack_int * n, double * a,
lapack_int * lda, double * tau, double * work, lapack_int * lwork,
lapack_int * info)
and that's where this part wraps, bestie — the gelq fam is only just getting started and there is SO much more d-crew to go 🌟
okay so quick vibe check before we dive in, bestie: this stretch of the page is just declarations. No prose, no lore, no "returns 0 on success" essay — just the raw signatures, one after another, like a receipts folder. And that's honestly fine!! because every single one of them is void, every single one of them takes pointers (yes, even the scalars, we don't make the rules), and the d up front means double precision, periodt. 💅
the least-squares lineup — four ways to solve the same "this system has too many equations and not enough answers" situation, and the page gives you zero hints about which to pick, so I'm just gonna hand you the signatures with love 🫶
void LAPACK_dgels (char * trans, lapack_int * m, lapack_int * n, lapack_int
* nrhs, double * a, lapack_int * lda, double * b, lapack_int * ldb,
double * work, lapack_int * lwork, lapack_int * info)
void LAPACK_dgelsd (lapack_int * m, lapack_int * n, lapack_int * nrhs,
double * a, lapack_int * lda, double * b, lapack_int * ldb, double * s,
double * rcond, lapack_int * rank, double * work, lapack_int * lwork,
lapack_int * iwork, lapack_int * info)
void LAPACK_dgelss (lapack_int * m, lapack_int * n, lapack_int * nrhs,
double * a, lapack_int * lda, double * b, lapack_int * ldb, double * s,
double * rcond, lapack_int * rank, double * work, lapack_int * lwork,
lapack_int * info)
void LAPACK_dgelsy (lapack_int * m, lapack_int * n, lapack_int * nrhs,
double * a, lapack_int * lda, double * b, lapack_int * ldb, lapack_int *
jpvt, double * rcond, lapack_int * rank, double * work, lapack_int *
lwork, lapack_int * info)
note how dgelsy is the only one of the four rocking a jpvt and still no iwork, while dgelsd is out here with iwork but no jpvt — they're all main characters in different ways, no cap 😭
the implicit-Q crew — gemlq, gemqr, gemqrt, and the g...qlf. Same side/trans energy, and every single one of them has a tsize. Watch the const land on a and t and only a and t — the page is very particular about this, and so am I ✨
void LAPACK_dgemlq (char * side, char * trans, lapack_int * m, lapack_int *
n, lapack_int * k, const double * a, lapack_int * lda, const double * t,
lapack_int * tsize, double * c, lapack_int * ldc, double * work,
lapack_int * lwork, lapack_int * info)
void LAPACK_dgemqr (char * side, char * trans, lapack_int * m, lapack_int *
n, lapack_int * k, const double * a, lapack_int * lda, const double * t,
lapack_int * tsize, double * c, lapack_int * ldc, double * work,
lapack_int * lwork, lapack_int * info)
void LAPACK_dgemqrt (char * side, char * trans, lapack_int * m, lapack_int *
n, lapack_int * k, lapack_int * nb, const double * v, lapack_int * ldv,
const double * t, lapack_int * ldt, double * c, lapack_int * ldc, double
* work, lapack_int * info)
bestie,dgemqrtbroughtnband swappedaforvand renamed the T-array asldtinstead oftsize. it's giving "I'm the blocky sibling and I dress differently." 🔥
void LAPACK_dgeqlf (lapack_int * m, lapack_int * n, double * a, lapack_int *
lda, double * tau, double * work, lapack_int * lwork, lapack_int * info)
the QR house party 💖 every factorization flavour, all at once, all void, all with info waiting at the end like the last person to leave the group chat.
void LAPACK_dgeqp3 (lapack_int * m, lapack_int * n, double * a, lapack_int *
lda, lapack_int * jpvt, double * tau, double * work, lapack_int * lwork,
lapack_int * info)
void LAPACK_dgeqpf (lapack_int * m, lapack_int * n, double * a, lapack_int *
lda, lapack_int * jpvt, double * tau, double * work, lapack_int * info)
(see how dgeqpf has no lwork? iconique. different build, different rules. 💅)
void LAPACK_dgeqr (lapack_int * m, lapack_int * n, double * a, lapack_int *
lda, double * t, lapack_int * tsize, double * work, lapack_int * lwork,
lapack_int * info)
void LAPACK_dgeqr2 (lapack_int * m, lapack_int * n, double * a, lapack_int *
lda, double * tau, double * work, lapack_int * info)
void LAPACK_dgeqrf (lapack_int * m, lapack_int * n, double * a, lapack_int *
lda, double * tau, double * work, lapack_int * lwork, lapack_int * info)
void LAPACK_dgeqrfp (lapack_int * m, lapack_int * n, double * a, lapack_int
* lda, double * tau, double * work, lapack_int * lwork, lapack_int *
info)
void LAPACK_dgeqrt (lapack_int * m, lapack_int * n, lapack_int * nb, double
* a, lapack_int * lda, double * t, lapack_int * ldt, double * work,
lapack_int * info)
void LAPACK_dgeqrt2 (lapack_int * m, lapack_int * n, double * a, lapack_int
* lda, double * t, lapack_int * ldt, lapack_int * info)
void LAPACK_dgeqrt3 (lapack_int * m, lapack_int * n, double * a, lapack_int
* lda, double * t, lapack_int * ldt, lapack_int * info)
dgeqrt2 and dgeqrt3 are literally identical signatures and I need you to know I clocked that immediately 👀 (the page lists them separately, so we list them separately — that's the whole deal we made.)
the refinement girlies — dgerfs and dgerfsx. dgerfsx is the deluxe version; the way it has equed, r, c, n_err_bnds, err_bnds_norm, err_bnds_comp, nparams, and params… she's doing the most and honestly? ate. 🌸
void LAPACK_dgerfs (char * trans, lapack_int * n, lapack_int * nrhs, const
double * a, lapack_int * lda, const double * af, lapack_int * ldaf,
const lapack_int * ipiv, const double * b, lapack_int * ldb, double * x,
lapack_int * ldx, double * ferr, double * berr, double * work,
lapack_int * iwork, lapack_int * info)
void LAPACK_dgerfsx (char * trans, char * equed, lapack_int * n, lapack_int
* nrhs, const double * a, lapack_int * lda, const double * af,
lapack_int * ldaf, const lapack_int * ipiv, const double * r, const
double * c, const double * b, lapack_int * ldb, double * x, lapack_int *
ldx, double * rcond, double * berr, lapack_int * n_err_bnds, double *
err_bnds_norm, double * err_bnds_comp, lapack_int * nparams, double *
params, double * work, lapack_int * iwork, lapack_int * info)
and one more RQ for the road:
void LAPACK_dgerqf (lapack_int * m, lapack_int * n, double * a, lapack_int *
lda, double * tau, double * work, lapack_int * lwork, lapack_int * info)
the singular value situation 🔥 SVD is having a moment — dgesdd, dgesvd, dgesvdx, dgesvj. jobz vs jobu/jobvt is the kind of detail that separates the good from the great, and dgesvdx just keeps going with range, vl, vu, il, iu, ns.
void LAPACK_dgesdd (char * jobz, lapack_int * m, lapack_int * n, double * a,
lapack_int * lda, double * s, double * u, lapack_int * ldu, double * vt,
lapack_int * ldvt, double * work, lapack_int * lwork, lapack_int *
iwork, lapack_int * info)
void LAPACK_dgesv (lapack_int * n, lapack_int * nrhs, double * a, lapack_int
* lda, lapack_int * ipiv, double * b, lapack_int * ldb, lapack_int *
info)
(no lwork on dgesv, bestie. that's not a typo on my end — it's literally just not there. 🙈)
void LAPACK_dgesvd (char * jobu, char * jobvt, lapack_int * m, lapack_int *
n, double * a, lapack_int * lda, double * s, double * u, lapack_int *
ldu, double * vt, lapack_int * ldvt, double * work, lapack_int * lwork,
lapack_int * info)
void LAPACK_dgesvdx (char * jobu, char * jobvt, char * range, lapack_int *
m, lapack_int * n, double * a, lapack_int * lda, double * vl, double *
vu, lapack_int * il, lapack_int * iu, lapack_int * ns, double * s,
double * u, lapack_int * ldu, double * vt, lapack_int * ldvt, double *
work, lapack_int * lwork, lapack_int * iwork, lapack_int * info)
void LAPACK_dgesvj (char * joba, char * jobu, char * jobv, lapack_int * m,
lapack_int * n, double * a, lapack_int * lda, double * sva, lapack_int *
mv, double * v, lapack_int * ldv, double * work, lapack_int * lwork,
lapack_int * info)
the expert-mode solvers — same solve, but with receipts. dgesvx gives you rcond, ferr, berr; dgesvxx gives you all of that plus rpvgrw and the whole error-bound apparatus. they are not the same, bestie, do not mix them up 🎀
void LAPACK_dgesvx (char * fact, char * trans, lapack_int * n, lapack_int *
nrhs, double * a, lapack_int * lda, double * af, lapack_int * ldaf,
lapack_int * ipiv, char * equed, double * r, double * c, double * b,
lapack_int * ldb, double * x, lapack_int * ldx, double * rcond, double *
ferr, double * berr, double * work, lapack_int * iwork, lapack_int *
info)
void LAPACK_dgesvxx (char * fact, char * trans, lapack_int * n, lapack_int *
nrhs, double * a, lapack_int * lda, double * af, lapack_int * ldaf,
lapack_int * ipiv, char * equed, double * r, double * c, double * b,
lapack_int * ldb, double * x, lapack_int * ldx, double * rcond, double *
rpvgrw, double * berr, lapack_int * n_err_bnds, double * err_bnds_norm,
double * err_bnds_comp, lapack_int * nparams, double * params, double *
work, lapack_int * iwork, lapack_int * info)
the LU gang — factorization on lock. dgetf2, dgetrf, dgetrf2 all share that m, n, a, lda, ipiv, info shape (no lwork in sight, which lowkey makes them the low-maintenance friends of the group 🦋).
void LAPACK_dgetf2 (lapack_int * m, lapack_int * n, double * a, lapack_int *
lda, lapack_int * ipiv, lapack_int * info)
void LAPACK_dgetrf (lapack_int * m, lapack_int * n, double * a, lapack_int *
lda, lapack_int * ipiv, lapack_int * info)
void LAPACK_dgetrf2 (lapack_int * m, lapack_int * n, double * a, lapack_int
* lda, lapack_int * ipiv, lapack_int * info)
void LAPACK_dgetri (lapack_int * n, double * a, lapack_int * lda, const
lapack_int * ipiv, double * work, lapack_int * lwork, lapack_int * info)
dgetri is the only one here that takes n alone instead of m and n — and yes it's const lapack_int * ipiv while the factorizers get it non-const. it's giving "I only read, I don't write." ⭐
void LAPACK_dgetrs (char * trans, lapack_int * n, lapack_int * nrhs, const
double * a, lapack_int * lda, const lapack_int * ipiv, double * b,
lapack_int * ldb, lapack_int * info)
void LAPACK_dgetsls (char * trans, lapack_int * m, lapack_int * n,
lapack_int * nrhs, double * a, lapack_int * lda, double * b, lapack_int
* ldb, double * work, lapack_int * lwork, lapack_int * info)
generalized eigenvalue hours 👑 this is where the signatures go feral — dggesx alone is rocking rconde, rcondv, iwork, liwork, bwork, and a LAPACK_D_SELECT3 function pointer. note that dgges and dgges3 are signature-twins, and dggev/dggev3 are too. the page lists all of them, so we're listing all of them, periodt.
void LAPACK_dggbak (char * job, char * side, lapack_int * n, lapack_int *
ilo, lapack_int * ihi, const double * lscale, const double * rscale,
lapack_int * m, double * v, lapack_int * ldv, lapack_int * info)
void LAPACK_dggbal (char * job, lapack_int * n, double * a, lapack_int *
lda, double * b, lapack_int * ldb, lapack_int * ilo, lapack_int * ihi,
double * lscale, double * rscale, double * work, lapack_int * info)
(spot the difference: dggbak takes lscale/rscale as const double *, dggbal takes them as plain double *. tiny, crucial, do not get it twisted 💜)
void LAPACK_dgges (char * jobvsl, char * jobvsr, char * sort,
LAPACK_D_SELECT3 selctg, lapack_int * n, double * a, lapack_int * lda,
double * b, lapack_int * ldb, lapack_int * sdim, double * alphar, double
* alphai, double * beta, double * vsl, lapack_int * ldvsl, double * vsr,
lapack_int * ldvsr, double * work, lapack_int * lwork, lapack_logical *
bwork, lapack_int * info)
void LAPACK_dgges3 (char * jobvsl, char * jobvsr, char * sort,
LAPACK_D_SELECT3 selctg, lapack_int * n, double * a, lapack_int * lda,
double * b, lapack_int * ldb, lapack_int * sdim, double * alphar, double
* alphai, double * beta, double * vsl, lapack_int * ldvsl, double * vsr,
lapack_int * ldvsr, double * work, lapack_int * lwork, lapack_logical *
bwork, lapack_int * info)
void LAPACK_dggesx (char * jobvsl, char * jobvsr, char * sort,
LAPACK_D_SELECT3 selctg, char * sense, lapack_int * n, double * a,
lapack_int * lda, double * b, lapack_int * ldb, lapack_int * sdim,
double * alphar, double * alphai, double * beta, double * vsl,
lapack_int * ldvsl, double * vsr, lapack_int * ldvsr, double * rconde,
double * rcondv, double * work, lapack_int * lwork, lapack_int * iwork,
lapack_int * liwork, lapack_logical * bwork, lapack_int * info)
void LAPACK_dggev (char * jobvl, char * jobvr, lapack_int * n, double * a,
lapack_int * lda, double * b, lapack_int * ldb, double * alphar, double
* alphai, double * beta, double * vl, lapack_int * ldvl, double * vr,
lapack_int * ldvr, double * work, lapack_int * lwork, lapack_int * info)
void LAPACK_dggev3 (char * jobvl, char * jobvr, lapack_int * n, double * a,
lapack_int * lda, double * b, lapack_int * ldb, double * alphar, double
* alphai, double * beta, double * vl, lapack_int * ldvl, double * vr,
lapack_int * ldvr, double * work, lapack_int * lwork, lapack_int * info)
k that's this batch!! ✨ forty signatures, zero skipped, every lapack_int * and const exactly where the page put it. more is absolutely coming, so don't wander off 💖
Okay so we're still deep in the LAPACK_* prototype wall, and honestly? This is the part where the generalized eigenvalue / generalized SVD girlies live. Grab a strawberry drink 🍓 and let's go.
void LAPACK_dggevx (char * balanc, char * jobvl, char * jobvr, char * sense,
lapack_int * n, double * a, lapack_int * lda, double * b, lapack_int *
ldb, double * alphar, double * alphai, double * beta, double * vl,
lapack_int * ldvl, double * vr, lapack_int * ldvr, lapack_int * ilo,
lapack_int * ihi, double * lscale, double * rscale, double * abnrm,
double * bbnrm, double * rconde, double * rcondv, double * work,
lapack_int * lwork, lapack_int * iwork, lapack_logical * bwork,
lapack_int * info)
The fully-loaded generalized eigenvalue solver — balancing, left vectors, right vectors, condition numbers, the whole aesthetic. She has twenty-eight arguments and she's not sorry.
void LAPACK_dggglm (lapack_int * n, lapack_int * m, lapack_int * p, double *
a, lapack_int * lda, double * b, lapack_int * ldb, double * d, double *
x, double * y, double * work, lapack_int * lwork, lapack_int * info)
Generalized linear regression, GLM model vibes. Solves the least-squares situation with a, b, d and hands you back x and y. It's giving ✨constrained minimum norm✨.
void LAPACK_dgghd3 (char * compq, char * compz, lapack_int * n, lapack_int *
ilo, lapack_int * ihi, double * a, lapack_int * lda, double * b,
lapack_int * ldb, double * q, lapack_int * ldq, double * z, lapack_int *
ldz, double * work, lapack_int * lwork, lapack_int * info)
The blocked version of the QZ reduction — takes a matrix pair (a, b) down to Hessenberg-triangular form. dgghrd but make it performance. 🔥
void LAPACK_dgghrd (char * compq, char * compz, lapack_int * n, lapack_int *
ilo, lapack_int * ihi, double * a, lapack_int * lda, double * b,
lapack_int * ldb, double * q, lapack_int * ldq, double * z, lapack_int *
ldz, lapack_int * info)
The unblocked original — same Hessenberg-triangular reduction, fewer arguments than dgghd3, no work/lwork at all. Classic, lowkey iconic.
void LAPACK_dgglse (lapack_int * m, lapack_int * n, lapack_int * p, double *
a, lapack_int * lda, double * b, lapack_int * ldb, double * c, double *
d, double * x, double * work, lapack_int * lwork, lapack_int * info)
LSE = least squares with equality constraints. You give her a, b, c, d; she gives you x. Constraints? Handled. 💅
void LAPACK_dggqrf (lapack_int * n, lapack_int * m, lapack_int * p, double *
a, lapack_int * lda, double * taua, double * b, lapack_int * ldb, double
* taub, double * work, lapack_int * lwork, lapack_int * info)
Generalized QR factorization — factors the pair into Q and R pieces, spits out two sets of reflectors (taua, taub).
void LAPACK_dggrqf (lapack_int * m, lapack_int * p, lapack_int * n, double *
a, lapack_int * lda, double * taua, double * b, lapack_int * ldb, double
* taub, double * work, lapack_int * lwork, lapack_int * info)
The RQ sibling 🫶 — same idea as dggqrf, but the factorization goes the other way. Note the argument order shifted (m, p, n), so don't just copy-paste your call, bestie.
void LAPACK_dggsvd (char * jobu, char * jobv, char * jobq, lapack_int * m,
lapack_int * n, lapack_int * p, lapack_int * k, lapack_int * l, double *
a, lapack_int * lda, double * b, lapack_int * ldb, double * alpha,
double * beta, double * u, lapack_int * ldu, double * v, lapack_int *
ldv, double * q, lapack_int * ldq, double * work, lapack_int * iwork,
lapack_int * info)
Generalized SVD, the classic. k and l come back as outputs telling you the structure, and you get alpha, beta, u, v, q. It's a whole production. 🎀
void LAPACK_dggsvd3 (char * jobu, char * jobv, char * jobq, lapack_int * m,
lapack_int * n, lapack_int * p, lapack_int * k, lapack_int * l, double *
a, lapack_int * lda, double * b, lapack_int * ldb, double * alpha,
double * beta, double * u, lapack_int * ldu, double * v, lapack_int *
ldv, double * q, lapack_int * ldq, double * work, lapack_int * lwork,
lapack_int * iwork, lapack_int * info)
dggsvd but glow-up edition ✨ — the only difference in the signature is she takes lwork too. Blocked, faster, same outputs. Note the 3 in the name, iykyk.
void LAPACK_dggsvp (char * jobu, char * jobv, char * jobq, lapack_int * m,
lapack_int * p, lapack_int * n, double * a, lapack_int * lda, double *
b, lapack_int * ldb, double * tola, double * tolb, lapack_int * k,
lapack_int * l, double * u, lapack_int * ldu, double * v, lapack_int *
ldv, double * q, lapack_int * ldq, lapack_int * iwork, double * tau,
double * work, lapack_int * info)
The preprocessing step 🧚 — reduces (a, b) so the generalized SVD actually behaves. Tolerances tola and tolb decide what counts as "basically zero" for each matrix.
void LAPACK_dggsvp3 (char * jobu, char * jobv, char * jobq, lapack_int * m,
lapack_int * p, lapack_int * n, double * a, lapack_int * lda, double *
b, lapack_int * ldb, double * tola, double * tolb, lapack_int * k,
lapack_int * l, double * u, lapack_int * ldu, double * v, lapack_int *
ldv, double * q, lapack_int * ldq, lapack_int * iwork, double * tau,
double * work, lapack_int * lwork, lapack_int * info)
Same as dggsvp but with the extra lwork slot. Blocked version, three at the end, you know the drill. 🔁
Now we pivot into the tridiagonal zone 🦋 — tridiagonal matrices are basically the low-maintenance friend who only needs three diagonals.
void LAPACK_dgtcon (char * norm, lapack_int * n, const double * dl, const
double * d, const double * du, const double * du2, const lapack_int *
ipiv, double * anorm, double * rcond, double * work, lapack_int * iwork,
lapack_int * info)
Condition number estimator for a tridiagonal matrix in its factored form — dl, d, du, du2, ipiv, exactly what dgttrf handed you. Notice du2 and ipiv are const here, because she's only reading. 👑
void LAPACK_dgtrfs (char * trans, lapack_int * n, lapack_int * nrhs, const
double * dl, const double * d, const double * du, const double * dlf,
const double * df, const double * duf, const double * du2, const
lapack_int * ipiv, const double * b, lapack_int * ldb, double * x,
lapack_int * ldx, double * ferr, double * berr, double * work,
lapack_int * iwork, lapack_int * info)
Refines a tridiagonal solution and reports error bounds — ferr (forward) and berr (backward). Two copies of the data: the original (dl, d, du) and the factored one (dlf, df, duf, du2, ipiv). Very "I brought a backup of my backup". 🫶
void LAPACK_dgtsv (lapack_int * n, lapack_int * nrhs, double * dl, double *
d, double * du, double * b, lapack_int * ldb, lapack_int * info)
The easy one! Solves A*X = B for tridiagonal A in one call. No lwork, no drama, just vibes. 🌸
void LAPACK_dgtsvx (char * fact, char * trans, lapack_int * n, lapack_int *
nrhs, const double * dl, const double * d, const double * du, double *
dlf, double * df, double * duf, double * du2, lapack_int * ipiv, const
double * b, lapack_int * ldb, double * x, lapack_int * ldx, double *
rcond, double * ferr, double * berr, double * work, lapack_int * iwork,
lapack_int * info)
The expert-mode version of dgtsv — you choose with fact whether the factorization is already done, plus you get rcond, ferr, and berr back. She's doing the most and honestly? Slay. 💅
void LAPACK_dgttrf (lapack_int * n, double * dl, double * d, double * du,
double * du2, lapack_int * ipiv, lapack_int * info)
Factors the tridiagonal matrix in place — lu-style — and fills in that extra du2 diagonal plus the pivot array ipiv. Then dgttrs can use it over and over. Efficiency queen. ⭐
void LAPACK_dgttrs (char * trans, lapack_int * n, lapack_int * nrhs, const
double * dl, const double * d, const double * du, const double * du2,
const lapack_int * ipiv, double * b, lapack_int * ldb, lapack_int *
info)
Solves using the output of dgttrf. Look at all those const qualifiers on the inputs — she is strictly not touching your factorization. 🙈
Hessenberg time, aka the section where all the names start with h for no reason other than chaos.
void LAPACK_dhgeqz (char * job, char * compq, char * compz, lapack_int * n,
lapack_int * ilo, lapack_int * ihi, double * h, lapack_int * ldh, double
* t, lapack_int * ldt, double * alphar, double * alphai, double * beta,
double * q, lapack_int * ldq, double * z, lapack_int * ldz, double *
work, lapack_int * lwork, lapack_int * info)
The QZ step — takes the Hessenberg-triangular pair (h, t) and hands you back generalized eigenvalues as alphar, alphai, beta. Complex eigenvalues come out as real/imag pairs, hence the split. 😭
void LAPACK_dhsein (char * job, char * eigsrc, char * initv, lapack_logical
* select, lapack_int * n, const double * h, lapack_int * ldh, double *
wr, const double * wi, double * vl, lapack_int * ldvl, double * vr,
lapack_int * ldvr, lapack_int * mm, lapack_int * m, double * work,
lapack_int * ifaill, lapack_int * ifailr, lapack_int * info)
Inverse iteration for Hessenberg eigenvectors. select picks which ones you actually want (lapack_logical array, so a real boolean mask), mm is the max you asked for, m is how many you actually got. And if something couldn't converge? She tells you via ifaill and ifailr. 💀
void LAPACK_dhseqr (char * job, char * compz, lapack_int * n, lapack_int *
ilo, lapack_int * ihi, double * h, lapack_int * ldh, double * wr, double
* wi, double * z, lapack_int * ldz, double * work, lapack_int * lwork,
lapack_int * info)
The Hessenberg QR algorithm itself — gives you wr and wi (real and imaginary parts of the eigenvalues), and optionally accumulates z. The main character of the Hessenberg saga. 👑
LAPACK's internal helper girlies 🌈 — these are the utility routines that do the actual heavy lifting behind the scenes.
void LAPACK_dlacn2 (lapack_int * n, double * v, double * x, lapack_int *
isgn, double * est, lapack_int * kase, lapack_int * isave)
1-norm condition estimator via reverse communication. kase and isave mean she returns to you mid-computation and you've got to call her back — it's a whole conversation, not a one-night stand. 🫶
void LAPACK_dlacpy (char * uplo, lapack_int * m, lapack_int * n, const
double * a, lapack_int * lda, double * b, lapack_int * ldb)
Copies a matrix, or just its upper/lower triangle depending on uplo. Simple, useful, no info because nothing can go wrong. A chill icon. 🌸
void LAPACK_dlag2s (lapack_int * m, lapack_int * n, const double * a,
lapack_int * lda, float * sa, lapack_int * ldsa, lapack_int * info)
Downgrades double precision to single precision — note a is double * and sa is float *, and yes, it reports info because narrowing can overflow. 🙈
void LAPACK_dlagge (lapack_int * m, lapack_int * n, lapack_int * kl,
lapack_int * ku, const double * d, double * a, lapack_int * lda,
lapack_int * iseed, double * work, lapack_int * info)
Generates a random band matrix with kl subdiagonals and ku superdiagonals, with singular values from d. iseed seeds the RNG — it's an in/out array, so keep it around. 🎲
void LAPACK_dlagsy (lapack_int * n, lapack_int * k, const double * d, double
* a, lapack_int * lda, lapack_int * iseed, double * work, lapack_int *
info)
Same energy, but symmetric this time and with k — the spectrum comes from d. 🌈
double LAPACK_dlamch (char * cmach)
Returns machine parameters — epsilon, safe min, base, precision, etc., selected by cmach. Notice it returns double directly, not via a pointer. Different, but she pulls it off. ⭐
double LAPACK_dlange (char * norm, lapack_int * m, lapack_int * n, const
double * a, lapack_int * lda, double * work)
The matrix norm of your choice — pick your norm and she gives a double back. work is there for the norms that need scratch space. No info, no complaints.
double LAPACK_dlansy (char * norm, char * uplo, lapack_int * n, const double
* a, lapack_int * lda, double * work)
Symmetric matrix norm — same deal, but you also say which triangle you're storing via uplo. ✨
double LAPACK_dlantr (char * norm, char * uplo, char * diag, lapack_int * m,
lapack_int * n, const double * a, lapack_int * lda, double * work)
Triangular matrix norm — now with diag too, because whether the diagonal is unit or not actually changes the answer. Three char * options, so read carefully bestie. 🎀
void LAPACK_dlapmr (lapack_logical * forwrd, lapack_int * m, lapack_int * n,
double * x, lapack_int * ldx, lapack_int * k)
Rearranges the rows of x — forward or backward per forwrd, with k telling her how the permutation is arranged. Subtle little routine, but she matters. 🦋
void LAPACK_dlapmt (lapack_logical * forwrd, lapack_int * m, lapack_int * n,
double * x, lapack_int * ldx, lapack_int * k)
The T is for transpose, babes — columns get rearranged, not rows. Same arguments, different axis. 🔁
double LAPACK_dlapy2 (double * x, double * y)
Computes sqrt(x**2 + y**2) without the overflow/underflow drama of doing it naively. Tiny function, huge save. 🫶
double LAPACK_dlapy3 (double * x, double * y, double * z)
The three-argument glow-up: sqrt(x**2 + y**2 + z**2), done safely. Notice these last two take double * even though they just read two or three scalars. That's the Fortran heritage, don't question it. 😭
The reflector / Householder corner of the page. These are the ones that build the Q matrices everyone else brags about.
void LAPACK_dlarfb (char * side, char * trans, char * direct, char * storev,
lapack_int * m, lapack_int * n, lapack_int * k, const double * v,
lapack_int * ldv, const double * t, lapack_int * ldt, double * c,
lapack_int * ldc, double * work, lapack_int * ldwork)
Applies a block reflector to c — four char * options (side, trans, direct, storev), which is honestly a lot of deciding before you're allowed to compute anything. 💀
void LAPACK_dlarfg (lapack_int * n, double * alpha, double * x, lapack_int *
incx, double * tau)
Generates a single Householder reflector. alpha gets overwritten (it's not const!) and tau comes out as the scalar factor. Small but mighty. ⭐
void LAPACK_dlarft (char * direct, char * storev, lapack_int * n, lapack_int
* k, const double * v, lapack_int * ldv, const double * tau, double * t,
lapack_int * ldt)
Forms the triangular factor t from a bunch of reflectors. She takes your tau array and turns chaos into a tidy triangular block. 🧚
void LAPACK_dlarfx (char * side, lapack_int * m, lapack_int * n, const
double * v, double * tau, double * c, lapack_int * ldc, double * work)
Applies one Householder reflector to c. Reads v, reads tau, writes all over c. Very "I'm just going to move some things around in here". 💅
void LAPACK_dlarnv (lapack_int * idist, lapack_int * iseed, lapack_int * n,
double * x)
Fills x with n random numbers from distribution idist, tracked by iseed. This is the RNG royalty of the page. 👑
void LAPACK_dlartgp (double * f, double * g, double * cs, double * sn,
double * r)
Generates a Givens rotation given f and g — outputs cs, sn, and r. Every argument is a double *, even f and g, and honestly? She's consistent. 😭
void LAPACK_dlartgs (double * x, double * y, double * sigma, double * cs,
double * sn)
Same, but with sigma thrown in and only cs/sn coming back. The s in the name stands for something very specific, but you knew that. 🎀
void LAPACK_dlascl (char * type, lapack_int * kl, lapack_int * ku, double *
cfrom, double * cto, lapack_int * m, lapack_int * n, double * a,
lapack_int * lda, lapack_int * info)
Scales a matrix from cfrom to cto — and it's careful about it, so if the scale factor would overflow, info calls it out. Fixes your overflow disasters before they happen. 🫶
void LAPACK_dlaset (char * uplo, lapack_int * m, lapack_int * n, double *
alpha, double * beta, double * a, lapack_int * lda)
Sets off-diagonals to alpha and the diagonal to beta. Zeroing out a matrix? alpha = 0, beta = 0. Iconic, no notes. ✨
void LAPACK_dlasrt (char * id, lapack_int * n, double * d, lapack_int *
info)
Sorts d — increasing or decreasing according to id. She reports info because apparently sorting can go wrong. 💀
void LAPACK_dlassq (lapack_int * n, double * x, lapack_int * incx, double *
scale, double * sumsq)
Updates scale and sumsq so you can accumulate a sum of squares without overflow. Note x is not const here — yes, even though she only reads it. Legacy, bestie. 🙈
void LAPACK_dlaswp (lapack_int * n, double * a, lapack_int * lda, lapack_int
* k1, lapack_int * k2, const lapack_int * ipiv, lapack_int * incx)
Applies the pivot interchanges to rows k1 through k2 of a. The incx means you can do it in chunks — very demure of her. 💅
void LAPACK_dlatms (lapack_int * m, lapack_int * n, char * dist, lapack_int
* iseed, char * sym, double * d, lapack_int * mode, double * cond,
double * dmax, lapack_int * kl, lapack_int * ku, char * pack, double *
a, lapack_int * lda, double * work, lapack_int * info)
The full randomized test-matrix generator — distribution, symmetry, conditioning, singular values from d, bandwidth via kl/ku, packing via pack. If you need a test matrix with a specific personality, this is the one. 🔥
void LAPACK_dlauum (char * uplo, lapack_int * n, double * a, lapack_int *
lda, lapack_int * info)
UU = upper to upper. Takes the triangular factor from a Cholesky and forms A = U'*U (or the L*L' version), overwriting in place. 🧚
Orthogonal matrix generation, aka "please give me a Q that's actually orthogonal, I'm begging".
void LAPACK_dopgtr (char * uplo, lapack_int * n, const double * ap, const
double * tau, double * q, lapack_int * ldq, double * work, lapack_int *
info)
Generates Q from a packed triangular matrix ap plus its reflectors tau. Packed means "the triangle is squished into a 1D array" — cute, compact, confusing the first time. 🎀
void LAPACK_dopmtr (char * side, char * uplo, char * trans, lapack_int * m,
lapack_int * n, const double * ap, const double * tau, double * c,
lapack_int * ldc, double * work, lapack_int * info)
Applies that Q (or Q') to c — side, uplo, and trans let you pick which side and which direction. Three char * decisions, one result. ✨
void LAPACK_dorbdb (char * trans, char * signs, lapack_int * m, lapack_int *
p, lapack_int * q, double * x11, lapack_int * ldx11, double * x12,
lapack_int * ldx12, double * x21, lapack_int * ldx21, double * x22,
lapack_int * ldx22, double * theta, double * phi, double * taup1, double
* taup2, double * tauq1, double * tauq2, double * work, lapack_int *
lwork, lapack_int * info)
The CS decomposition bidiagonalization step. Look at all those x blocks (x11, x12, x21, x22), the theta/phi angles, and four (!) tau arrays. This is the most decorated function on this chunk of the page and she earned it. 👑
void LAPACK_dorcsd (char * jobu1, char * jobu2, char * jobv1t, char *
jobv2t, char * trans, char * signs, lapack_int * m, lapack_int * p,
lapack_int * q, double * x11, lapack_int * ldx11, double * x12,
lapack_int * ldx12, double * x21, lapack_int * ldx21, double * x22,
lapack_int * ldx22, double * theta, double * u1, lapack_int * ldu1,
double * u2, lapack_int * ldu2, double * v1t, lapack_int * ldv1t, double
* v2t, lapack_int * ldv2t, double * work, lapack_int * lwork, lapack_int
* iwork, lapack_int * info)
CS decomposition, full version — five char * options and outputs for u1, u2, v1t, v2t. The t in jobv1t/jobv2t and v1t/v2t means transpose. Nobody escapes the transpose here. 😭
void LAPACK_dorcsd2by1 (char * jobu1, char * jobu2, char * jobv1t,
lapack_int * m, lapack_int * p, lapack_int * q, double * x11, lapack_int
* ldx11, double * x21, lapack_int * ldx21, double * theta, double * u1,
lapack_int * ldu1, double * u2, lapack_int * ldu2, double * v1t,
lapack_int * ldv1t, double * work, lapack_int * lwork, lapack_int *
iwork, lapack_int * info)
The 2by1 variant — only x11 and x21 this time, because the structure is already stacked. Fewer blocks, fewer char options, same energy. 🌈
void LAPACK_dorgbr (char * vect, lapack_int * m, lapack_int * n, lapack_int
And we're cutting off mid-signature at lapack_int — bestie, the page literally stops here. dorgbr generates the orthogonal matrix from a bidiagonal factorization (vect tells her which one), and the rest of her argument list is waiting for you in the next part. Stay tuned, we're not done. 🦋💖
okay so we're picking up mid-signature — literally the tail end of the last one, don't panic, just finishing the sentence we walked in on:
* k, double * a, lapack_int * lda, const double * tau, double * work,
lapack_int * lwork, lapack_int * info)
cool cool cool. and now the next wave of void-returning besties, all of them ending in lapack_int * info like they all coordinated their outfits 💅
LAPACK_dorghr ✨
void LAPACK_dorghr (lapack_int * n, lapack_int * ilo, lapack_int * ihi, double * a, lapack_int * lda, const double * tau, double * work, lapack_int * lwork, lapack_int * info)
ilo and ihi in the same signature? it's giving range girlies 🎀 plus the classic tau / work / lwork trio, plus a with its lda. all star, no notes.
LAPACK_dorglq 🦋
void LAPACK_dorglq (lapack_int * m, lapack_int * n, lapack_int * k, double * a, lapack_int * lda, const double * tau, double * work, lapack_int * lwork, lapack_int * info)
m, n, k stacked like a little staircase — the three-parameter opening is lowkey a signature at this point.
LAPACK_dorgql 🌸
void LAPACK_dorgql (lapack_int * m, lapack_int * n, lapack_int * k, double * a, lapack_int * lda, const double * tau, double * work, lapack_int * lwork, lapack_int * info)
same m n k entrance as the last one, different letters at the end of the name. yes bestie, they're siblings, that's the whole bit 💀
LAPACK_dorgqr ✨
void LAPACK_dorgqr (lapack_int * m, lapack_int * n, lapack_int * k, double * a, lapack_int * lda, const double * tau, double * work, lapack_int * lwork, lapack_int * info)
q and r girlies stand UP. same arg list, const double * tau holding it down in the middle like always.
LAPACK_dorgrq 🎀
void LAPACK_dorgrq (lapack_int * m, lapack_int * n, lapack_int * k, double * a, lapack_int * lda, const double * tau, double * work, lapack_int * lwork, lapack_int * info)
the letters got shuffled, the vibe did not. obsessed with the consistency fr fr.
LAPACK_dorgtr 🫶
void LAPACK_dorgtr (char * uplo, lapack_int * n, double * a, lapack_int * lda, const double * tau, double * work, lapack_int * lwork, lapack_int * info)
ooh she leads with char * uplo — main character energy 🌈 note there's no m or k here at all, just n, a, lda, tau, work, lwork, info.
now the dorm* squad, and every single one of them opens with char * pointers because they literally cannot make a decision without asking 😭
LAPACK_dormbr 💜
void LAPACK_dormbr (char * vect, char * side, char * trans, lapack_int * m, lapack_int * n, lapack_int * k, const double * a, lapack_int * lda, const double * tau, double * c, lapack_int * ldc, double * work, lapack_int * lwork, lapack_int * info)
three char *s before you even get to a number: vect, side, trans. it's giving ✨options✨. then a/lda, tau, c/ldc, work/lwork, info.
LAPACK_dormhr 🔥
void LAPACK_dormhr (char * side, char * trans, lapack_int * m, lapack_int * n, lapack_int * ilo, lapack_int * ihi, const double * a, lapack_int * lda, const double * tau, double * c, lapack_int * ldc, double * work, lapack_int * lwork, lapack_int * info)
side and trans then ilo ihi come back for a lil cameo. the range girlies never really leave, do they.
LAPACK_dormlq 🌸
void LAPACK_dormlq (char * side, char * trans, lapack_int * m, lapack_int * n, lapack_int * k, const double * a, lapack_int * lda, const double * tau, double * c, lapack_int * ldc, double * work, lapack_int * lwork, lapack_int * info)
side, trans, m, n, k — the standard two-chars-then-three-ints opener. and yes c comes with its own ldc, as she should 💅
LAPACK_dormql 🦋
void LAPACK_dormql (char * side, char * trans, lapack_int * m, lapack_int * n, lapack_int * k, const double * a, lapack_int * lda, const double * tau, double * c, lapack_int * ldc, double * work, lapack_int * lwork, lapack_int * info)
identical layout to the last, name swapped. no cap, these two are twins and they know it.
LAPACK_dormqr ⭐
void LAPACK_dormqr (char * side, char * trans, lapack_int * m, lapack_int * n, lapack_int * k, const double * a, lapack_int * lda, const double * tau, double * c, lapack_int * ldc, double * work, lapack_int * lwork, lapack_int * info)
the qr girlie of the family 🎀 same fourteen params, same info at the end, same energy.
LAPACK_dormrq 🌈
void LAPACK_dormrq (char * side, char * trans, lapack_int * m, lapack_int * n, lapack_int * k, const double * a, lapack_int * lda, const double * tau, double * c, lapack_int * ldc, double * work, lapack_int * lwork, lapack_int * info)
yep. same. and honestly? slay. consistency is a love language.
LAPACK_dormrz 💀
void LAPACK_dormrz (char * side, char * trans, lapack_int * m, lapack_int * n, lapack_int * k, lapack_int * l, const double * a, lapack_int * lda, const double * tau, double * c, lapack_int * ldc, double * work, lapack_int * lwork, lapack_int * info)
WAIT. there's an extra lapack_int * l in there between k and a 😭 not me doing a double take. yes bestie, read it twice — m, n, k, l. iconic of her honestly.
LAPACK_dormtr 🌸
void LAPACK_dormtr (char * side, char * uplo, char * trans, lapack_int * m, lapack_int * n, const double * a, lapack_int * lda, const double * tau, double * c, lapack_int * ldc, double * work, lapack_int * lwork, lapack_int * info)
three chars again but it's side, uplo, trans — no k in this one. we love a plot twist 🫶
new letter, new era: the dpb* girlies are here 🎀 and they all brought uplo, n, and kd to the party.
LAPACK_dpbcon ✨
void LAPACK_dpbcon (char * uplo, lapack_int * n, lapack_int * kd, const double * ab, lapack_int * ldab, double * anorm, double * rcond, double * work, lapack_int * iwork, lapack_int * info)
not one but TWO iwork-adjacent situations — okay there's iwork at the end there, plus anorm and rcond are plain old double *, not const. noticing things, as usual 🔥 also ab/ldab not a/lda, she's fancy.
LAPACK_dpbequ 💜
void LAPACK_dpbequ (char * uplo, lapack_int * n, lapack_int * kd, const double * ab, lapack_int * ldab, double * s, double * scond, double * amax, lapack_int * info)
short and sweet — no work, no lwork, no iwork, just s, scond, amax, and info. minimalism? we stan 💅
LAPACK_dpbrfs 🦋
void LAPACK_dpbrfs (char * uplo, lapack_int * n, lapack_int * kd, lapack_int * nrhs, const double * ab, lapack_int * ldab, const double * afb, lapack_int * ldafb, const double * b, lapack_int * ldb, double * x, lapack_int * ldx, double * ferr, double * berr, double * work, lapack_int * iwork, lapack_int * info)
okay she's LONG. count them: uplo, n, kd, nrhs, ab, ldab, afb, ldafb, b, ldb, x, ldx, ferr, berr, work, iwork, info. seventeen. not me out of breath 😭 the f family entries really do the most and I respect it.
LAPACK_dpbstf 🌸
void LAPACK_dpbstf (char * uplo, lapack_int * n, lapack_int * kb, double * bb, lapack_int * ldbb, lapack_int * info)
tiny!! uplo, n, kb (that's kb with a b, not kd, look closely bestie 👀), bb, ldbb, info. six params and she's out. love that for her.
LAPACK_dpbsv ⭐
void LAPACK_dpbsv (char * uplo, lapack_int * n, lapack_int * kd, lapack_int * nrhs, double * ab, lapack_int * ldab, double * b, lapack_int * ldb, lapack_int * info)
no x, no work, no iwork — just gets in, does the thing, and leaves. efficiency icon.
LAPACK_dpbsvx 🔥
void LAPACK_dpbsvx (char * fact, char * uplo, lapack_int * n, lapack_int * kd, lapack_int * nrhs, double * ab, lapack_int * ldab, double * afb, lapack_int * ldafb, char * equed, double * s, double * b, lapack_int * ldb, double * x, lapack_int * ldx, double * rcond, double * ferr, double * berr, double * work, lapack_int * iwork, lapack_int * info)
the x version said "let me cook" and then cooked 😭 fact at the front, equed hiding in the middle at position ten, s, b/ldb, x/ldx, rcond, ferr, berr, work, iwork, info. yes she's extra. no we're not mad about it.
LAPACK_dpbtrf 🎀
void LAPACK_dpbtrf (char * uplo, lapack_int * n, lapack_int * kd, double * ab, lapack_int * ldab, lapack_int * info)
uplo, n, kd, ab, ldab, info. six. done. refreshing honestly, like a little palate cleanser 🌈
LAPACK_dpbtrs 🫶
void LAPACK_dpbtrs (char * uplo, lapack_int * n, lapack_int * kd, lapack_int * nrhs, const double * ab, lapack_int * ldab, double * b, lapack_int * ldb, lapack_int * info)
note const double * ab here — yes the const moved, yes I clocked it, yes I'm that girl 💅 only eight params, she's chill.
and now the dpft* trio, who all share transr and uplo and have literally zero work/lwork in sight. kings of not overexplaining 🔥
LAPACK_dpftrf ✨
void LAPACK_dpftrf (char * transr, char * uplo, lapack_int * n, double * a, lapack_int * info)
five params. FIVE. transr, uplo, n, a, info. not a lda to be found, not a work in sight. it's giving unbothered.
LAPACK_dpftri 💜
void LAPACK_dpftri (char * transr, char * uplo, lapack_int * n, double * a, lapack_int * info)
identical twin of the last one, different last letter. and yes I checked twice, they're literally the same signature 🌸
LAPACK_dpftrs 🦋
void LAPACK_dpftrs (char * transr, char * uplo, lapack_int * n, lapack_int * nrhs, const double * a, double * b, lapack_int * ldb, lapack_int * info)
she's the one who actually takes input — nrhs shows up, and a goes const while b and ldb stay mutable. queen behavior, keeping it eight params and dipping.
okay that's the batch — every one of them void, every one of them closing on lapack_int * info, and the list is still going so don't you dare close the tab 😭 more coming 💖
Okay so we're deep in the function-signature zone and honestly? This stretch is a whole era. 💅 Every single one of these is a d-prefixed prototype, which means it's the double-precision member of the squad, and every pointer is a pointer-to-the-actual-thing — heap, stack, whatever, miss girl does not copy your data, she just knows where it lives. 🫶
Let's go down the list, no skipping, no "etc." energy. ✨
LAPACK_dpocon
void LAPACK_dpocon (char * uplo, lapack_int * n, const double * a,
lapack_int * lda, double * anorm, double * rcond, double * work,
lapack_int * iwork, lapack_int * info)
Bestie, look at the cast list: uplo, n, a, lda, anorm, rcond, work, iwork, info. The a is const (she's reading, not touching 🌸), and you're handing over both a double * work buffer and a lapack_int * iwork buffer so she has somewhere to put her stuff. Also anorm is a plain double *, bestie — not const, so expect it to get written to. 💀
LAPACK_dpoequ
void LAPACK_dpoequ (lapack_int * n, const double * a, lapack_int * lda,
double * s, double * scond, double * amax, lapack_int * info)
No uplo here, no work, no iwork — just n, a, lda, and the three output pointers s, scond, amax. Minimalist queen. 👑
LAPACK_dpoequb
void LAPACK_dpoequb (lapack_int * n, const double * a, lapack_int * lda,
double * s, double * scond, double * amax, lapack_int * info)
The b on the end is doing so much work and yet the signature is character-for-character identical to LAPACK_dpoequ above. n, a, lda, s, scond, amax, info — same shape, different name. Don't get it twisted 🎀
LAPACK_dporfs
void LAPACK_dporfs (char * uplo, lapack_int * n, lapack_int * nrhs, const
double * a, lapack_int * lda, const double * af, lapack_int * ldaf,
const double * b, lapack_int * ldb, double * x, lapack_int * ldx, double
* ferr, double * berr, double * work, lapack_int * iwork, lapack_int *
info)
Okay this one is stacked. 💅 uplo, n, nrhs, then a whole matching set — a/lda and af/ldaf (both const, both read-only, both with their own leading dimension), b/ldb (const), x/ldx (not const!, she's writing into x), then ferr, berr, work, iwork, info. It's giving "I have two matrices and I'm not afraid to use them."
LAPACK_dporfsx
void LAPACK_dporfsx (char * uplo, char * equed, lapack_int * n, lapack_int *
nrhs, const double * a, lapack_int * lda, const double * af, lapack_int
* ldaf, const double * s, const double * b, lapack_int * ldb, double *
x, lapack_int * ldx, double * rcond, double * berr, lapack_int *
n_err_bnds, double * err_bnds_norm, double * err_bnds_comp, lapack_int *
nparams, double * params, double * work, lapack_int * iwork, lapack_int
* info)
The x in rfsx is for extra, clearly. 😭 Look at this list: uplo, equed, n, nrhs, a, lda, af, ldaf, s, b, ldb, x, ldx, rcond, berr, n_err_bnds, err_bnds_norm, err_bnds_comp, nparams, params, work, iwork, info. Note equed is char * and not const, and s here is const while in LAPACK_dpoequ it was writable — different gig, different contract, iykyk. 🦋
LAPACK_dposv
void LAPACK_dposv (char * uplo, lapack_int * n, lapack_int * nrhs, double *
a, lapack_int * lda, double * b, lapack_int * ldb, lapack_int * info)
Short and iconic: uplo, n, nrhs, a, lda, b, ldb, info. Eight args, no work, no iwork — she keeps her buffers to herself. So lowkey humble for someone doing so much. ✨
LAPACK_dposvx
void LAPACK_dposvx (char * fact, char * uplo, lapack_int * n, lapack_int *
nrhs, double * a, lapack_int * lda, double * af, lapack_int * ldaf, char
* equed, double * s, double * b, lapack_int * ldb, double * x,
lapack_int * ldx, double * rcond, double * ferr, double * berr, double *
work, lapack_int * iwork, lapack_int * info)
Two chars up front now: fact and uplo. Then n, nrhs, a/lda, af/ldaf, equed, s, b/ldb, x/ldx, rcond, ferr, berr, work, iwork, info. Not one const in sight on the matrix pointers — everything's fair game. 🙈
LAPACK_dposvxx
void LAPACK_dposvxx (char * fact, char * uplo, lapack_int * n, lapack_int *
nrhs, double * a, lapack_int * lda, double * af, lapack_int * ldaf, char
* equed, double * s, double * b, lapack_int * ldb, double * x,
lapack_int * ldx, double * rcond, double * rpvgrw, double * berr,
lapack_int * n_err_bnds, double * err_bnds_norm, double * err_bnds_comp,
lapack_int * nparams, double * params, double * work, lapack_int *
iwork, lapack_int * info)
Okay so versus LAPACK_dposvx, the double-x version sneaks in rpvgrw, n_err_bnds, err_bnds_norm, err_bnds_comp, nparams, and params. That's it, that's the whole difference in the arg list — but it is a long arg list: fact, uplo, n, nrhs, a, lda, af, ldaf, equed, s, b, ldb, x, ldx, rcond, rpvgrw, berr, n_err_bnds, err_bnds_norm, err_bnds_comp, nparams, params, work, iwork, info. 25 arguments. Twenty-five. Girl said "I'll take everything." 💀🔥
LAPACK_dpotrf
void LAPACK_dpotrf (char * uplo, lapack_int * n, double * a, lapack_int *
lda, lapack_int * info)
Five args and a dream: uplo, n, a, lda, info. She's the moment, she's the legend. 👑
LAPACK_dpotrf2
void LAPACK_dpotrf2 (char * uplo, lapack_int * n, double * a, lapack_int *
lda, lapack_int * info)
The 2 at the end is the whole personality change and the signature is otherwise literally identical to LAPACK_dpotrf: uplo, n, a, lda, info. Same cast, different show. 🎀
LAPACK_dpotri
void LAPACK_dpotri (char * uplo, lapack_int * n, double * a, lapack_int *
lda, lapack_int * info)
Another five-arg situation — uplo, n, a, lda, info — and yeah, this is the third signature in a row that looks exactly like this, and honestly? Consistency is a love language. 🫶
LAPACK_dpotrs
void LAPACK_dpotrs (char * uplo, lapack_int * n, lapack_int * nrhs, const
double * a, lapack_int * lda, double * b, lapack_int * ldb, lapack_int *
info)
Now she's got nrhs and a b/ldb pair, and note the drama: a is const double * but b is plain double *. Read a, write b. The duality of woman. 🦋
LAPACK_dppcon
void LAPACK_dppcon (char * uplo, lapack_int * n, const double * ap, double *
anorm, double * rcond, double * work, lapack_int * iwork, lapack_int *
info)
Welcome to the pp crew — packed storage era. 🌸 uplo, n, ap (that's ap, not a!), anorm, rcond, work, iwork, info. Notice there's no lda anywhere in this family — packed means packed, bestie.
LAPACK_dppequ
void LAPACK_dppequ (char * uplo, lapack_int * n, const double * ap, double *
s, double * scond, double * amax, lapack_int * info)
uplo, n, ap, s, scond, amax, info. Same seven-arg energy as LAPACK_dpoequ except she's got that uplo up front and ap instead of a/lda. ✨
LAPACK_dpprfs
void LAPACK_dpprfs (char * uplo, lapack_int * n, lapack_int * nrhs, const
double * ap, const double * afp, const double * b, lapack_int * ldb,
double * x, lapack_int * ldx, double * ferr, double * berr, double *
work, lapack_int * iwork, lapack_int * info)
Packed twin of LAPACK_dporfs, and look how much lighter she travels without lda/ldaf: uplo, n, nrhs, ap, afp, b, ldb, x, ldx, ferr, berr, work, iwork, info. Three const matrices, one very-writable x. 💅
LAPACK_dppsv
void LAPACK_dppsv (char * uplo, lapack_int * n, lapack_int * nrhs, double *
ap, double * b, lapack_int * ldb, lapack_int * info)
Seven args, zero work buffer: uplo, n, nrhs, ap, b, ldb, info. She said "I'll allocate my own, thanks." 🎀
LAPACK_dppsvx
void LAPACK_dppsvx (char * fact, char * uplo, lapack_int * n, lapack_int *
nrhs, double * ap, double * afp, char * equed, double * s, double * b,
lapack_int * ldb, double * x, lapack_int * ldx, double * rcond, double *
ferr, double * berr, double * work, lapack_int * iwork, lapack_int *
info)
fact, uplo, n, nrhs, ap, afp, equed, s, b, ldb, x, ldx, rcond, ferr, berr, work, iwork, info. Packed and equipped with every diagnostic pointer in the building. 🔥
LAPACK_dpptrf
void LAPACK_dpptrf (char * uplo, lapack_int * n, double * ap, lapack_int *
info)
Four arguments. Four!! uplo, n, ap, info. Cute, brief, devastating. 🌈
LAPACK_dpptri
void LAPACK_dpptri (char * uplo, lapack_int * n, double * ap, lapack_int *
info)
Identical cast to LAPACK_dpptrf — uplo, n, ap, info — one letter apart in the name and that's the entire difference you can see from out here. 🦋
LAPACK_dpptrs
void LAPACK_dpptrs (char * uplo, lapack_int * n, lapack_int * nrhs, const
double * ap, double * b, lapack_int * ldb, lapack_int * info)
And the trio closes out with uplo, n, nrhs, ap (const now!), b, ldb, info. Read the packed thing, write the b. Periodt. 💅
LAPACK_dpstrf
void LAPACK_dpstrf (char * uplo, lapack_int * n, double * a, lapack_int *
lda, lapack_int * piv, lapack_int * rank, double * tol, double * work,
lapack_int * info)
uplo, n, a, lda, piv, rank, tol, work, info — she's got a pivot array, a rank pointer AND a tol pointer, and tol is not const, so she may well write to it. Don't be surprised, bestie. 👀
LAPACK_dptcon
void LAPACK_dptcon (lapack_int * n, const double * d, const double * e,
double * anorm, double * rcond, double * work, lapack_int * info)
Tridiagonal era begins 🎀 — and no uplo in sight, because tridiagonal is tridiagonal, there's nothing to pick. n, d, e, anorm, rcond, work, info, with d and e both const. Note: work here, but no iwork. ⭐
LAPACK_dpteqr
void LAPACK_dpteqr (char * compz, lapack_int * n, double * d, double * e,
double * z, lapack_int * ldz, double * work, lapack_int * info)
compz is the star of the show here (not uplo!), followed by n, d, e, z, ldz, work, info. Eight args, one very important little character. ✨
LAPACK_dptrfs
void LAPACK_dptrfs (lapack_int * n, lapack_int * nrhs, const double * d,
const double * e, const double * df, const double * ef, const double *
b, lapack_int * ldb, double * x, lapack_int * ldx, double * ferr, double
* berr, double * work, lapack_int * info)
Okay the const budget on this one is generous: n, nrhs, d, e, df, ef, b, ldb, then writable x, ldx, ferr, berr, work, info. Five separate const double * inputs and not a single iwork. She's low-maintenance like that. 🫶
LAPACK_dptsv
void LAPACK_dptsv (lapack_int * n, lapack_int * nrhs, double * d, double *
e, double * b, lapack_int * ldb, lapack_int * info)
Seven args, no uplo, no work: n, nrhs, d, e, b, ldb, info. And d/e are not const here — she's allowed to mess with them. 🔥
LAPACK_dptsvx
void LAPACK_dptsvx (char * fact, lapack_int * n, lapack_int * nrhs, const
double * d, const double * e, double * df, double * ef, const double *
b, lapack_int * ldb, double * x, lapack_int * ldx, double * rcond,
double * ferr, double * berr, double * work, lapack_int * info)
Cute lil' symmetry going on: d/e come in const, df/ef are writable copies. Plus fact, n, nrhs, b, ldb, x, ldx, rcond, ferr, berr, work, info. Chef's kiss. 💅
LAPACK_dpttrf
void LAPACK_dpttrf (lapack_int * n, double * d, double * e, lapack_int *
info)
Four args. n, d, e, info. That's it. That's the function. Iconic minimalism. 🎀
LAPACK_dpttrs
void LAPACK_dpttrs (lapack_int * n, lapack_int * nrhs, const double * d,
const double * e, double * b, lapack_int * ldb, lapack_int * info)
n, nrhs, d, e (both const this time!), b, ldb, info. Seven, no uplo, no work buffers, immaculate. 🌸
LAPACK_dsbev
void LAPACK_dsbev (char * jobz, char * uplo, lapack_int * n, lapack_int *
kd, double * ab, lapack_int * ldab, double * w, double * z, lapack_int *
ldz, double * work, lapack_int * info)
Band storage crew, assemble! 🦋 jobz, uplo, n, kd, ab, ldab, w, z, ldz, work, info. Two chars, a bandwidth kd, and the classic ab/ldab pairing. Note: work but no lwork in this one. ⭐
LAPACK_dsbev_2stage
void LAPACK_dsbev_2stage (char * jobz, char * uplo, lapack_int * n,
lapack_int * kd, double * ab, lapack_int * ldab, double * w, double * z,
lapack_int * ldz, double * work, lapack_int * lwork, lapack_int * info)
And there's the difference: _2stage adds lwork between work and info. Full list: jobz, uplo, n, kd, ab, ldab, w, z, ldz, work, lwork, info. Twelve args, one extra pointer, zero ambiguity. 🔍
LAPACK_dsbevd
void LAPACK_dsbevd (char * jobz, char * uplo, lapack_int * n, lapack_int *
kd, double * ab, lapack_int * ldab, double * w, double * z, lapack_int *
ldz, double * work, lapack_int * lwork, lapack_int * iwork, lapack_int *
liwork, lapack_int * info)
Now we're talking — jobz, uplo, n, kd, ab, ldab, w, z, ldz, work, lwork, iwork, liwork, info. Two works, two lengths. Every buffer gets a buddy. 💖
LAPACK_dsbevd_2stage
void LAPACK_dsbevd_2stage (char * jobz, char * uplo, lapack_int * n,
lapack_int * kd, double * ab, lapack_int * ldab, double * w, double * z,
lapack_int * ldz, double * work, lapack_int * lwork, lapack_int * iwork,
lapack_int * liwork, lapack_int * info)
Same cast as LAPACK_dsbevd — jobz, uplo, n, kd, ab, ldab, w, z, ldz, work, lwork, iwork, liwork, info — just wearing the _2stage badge. 💅
LAPACK_dsbevx
void LAPACK_dsbevx (char * jobz, char * range, char * uplo, lapack_int * n,
lapack_int * kd, double * ab, lapack_int * ldab, double * q, lapack_int
* ldq, double * vl, double * vu, lapack_int * il, lapack_int * iu,
double * abstol, lapack_int * m, double * w, double * z, lapack_int *
ldz, double * work, lapack_int * iwork, lapack_int * ifail, lapack_int *
info)
Oh she's fancy. Three chars: jobz, range, uplo. Then n, kd, ab, ldab, q, ldq, vl, vu, il, iu, abstol, m, w, z, ldz, work, iwork, ifail, info. Note: work but no lwork — and there's an ifail lurking at the end, which... just don't ask, it's a whole thing. 🙈
LAPACK_dsbevx_2stage
void LAPACK_dsbevx_2stage (char * jobz, char * range, char * uplo,
lapack_int * n, lapack_int * kd, double * ab, lapack_int * ldab, double
* q, lapack_int * ldq, double * vl, double * vu, lapack_int * il,
lapack_int * iu, double * abstol, lapack_int * m, double * w, double *
z, lapack_int * ldz, double * work, lapack_int * lwork, lapack_int *
iwork, lapack_int * ifail, lapack_int * info)
You guessed it — lwork shows up again. Full squad: jobz, range, uplo, n, kd, ab, ldab, q, ldq, vl, vu, il, iu, abstol, m, w, z, ldz, work, lwork, iwork, ifail, info. 23 pointers. She's thriving. 🌈
LAPACK_dsbgst
void LAPACK_dsbgst (char * vect, char * uplo, lapack_int * n, lapack_int *
ka, lapack_int * kb, double * ab, lapack_int * ldab, const double * bb,
lapack_int * ldbb, double * x, lapack_int * ldx, double * work,
lapack_int * info)
Two bandwidths now (ka and kb — she's got range, literally) 🎀: vect, uplo, n, ka, kb, ab, ldab, bb, ldbb, x, ldx, work, info. Note bb is const and ab is not. Asymmetry, but make it fashion. ✨
LAPACK_dsbgv
void LAPACK_dsbgv (char * jobz, char * uplo, lapack_int * n, lapack_int *
ka, lapack_int * kb, double * ab, lapack_int * ldab, double * bb,
lapack_int * ldbb, double * w, double * z, lapack_int * ldz, double *
work, lapack_int * info)
jobz, uplo, n, ka, kb, ab, ldab, bb, ldbb, w, z, ldz, work, info — 14 args, no lwork, no iwork. She's the chill one. 💜
LAPACK_dsbgvd
void LAPACK_dsbgvd (char * jobz, char * uplo, lapack_int * n, lapack_int *
ka, lapack_int * kb, double * ab, lapack_int * ldab, double * bb,
lapack_int * ldbb, double * w, double * z, lapack_int * ldz, double *
work, lapack_int * lwork, lapack_int * iwork, lapack_int * liwork,
lapack_int * info)
Chill era is over — work/lwork AND iwork/liwork both present. Full list: jobz, uplo, n, ka, kb, ab, ldab, bb, ldbb, w, z, ldz, work, lwork, iwork, liwork, info. 🔥
LAPACK_dsbgvx
void LAPACK_dsbgvx (char * jobz, char * range, char * uplo, lapack_int * n,
lapack_int * ka, lapack_int * kb, double * ab, lapack_int * ldab, double
* bb, lapack_int * ldbb, double * q, lapack_int * ldq, double * vl,
double * vu, lapack_int * il, lapack_int * iu, double * abstol,
lapack_int * m, double * w, double * z, lapack_int * ldz, double * work,
lapack_int * iwork, lapack_int * ifail, lapack_int * info)
Okay deep breath. 😮💨 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. Twenty-five arguments. work with no lwork, plus iwork and ifail both hanging out at the end. She's a lot, but she's worth it. 💀
LAPACK_dsbtrd
void LAPACK_dsbtrd (char * vect, char * uplo, lapack_int * n, lapack_int *
kd, double * ab, lapack_int * ldab, double * d, double * e, double * q,
lapack_int * ldq, double * work, lapack_int * info)
vect, uplo, n, kd, ab, ldab, d, e, q, ldq, work, info. One kd, two output arrays d and e, one work, no lwork. Clean. 🧚
LAPACK_dsfrk
void LAPACK_dsfrk (char * transr, char * uplo, char * trans, lapack_int * n,
lapack_int * k, double * alpha, const double * a, lapack_int * lda,
double * beta, double * c)
Huh, this one's got three char * flags and — plot twist — no info pointer at all! 🤯 Just transr, uplo, trans, n, k, alpha, a, lda, beta, c. Also alpha/beta are double * (not const) while a IS const. Yes bestie, notice the details. 🎀
LAPACK_dsgesv
void LAPACK_dsgesv (lapack_int * n, lapack_int * nrhs, double * a,
lapack_int * lda, lapack_int * ipiv, double * b, lapack_int * ldb,
double * x, lapack_int * ldx, double * work, float * swork, lapack_int *
iter, lapack_int * info)
Okay this one is unhinged in the best way 😭 — everything's double and then out of nowhere: float * swork. A singular float pointer in a double routine. She contains multitudes. Full list: n, nrhs, a, lda, ipiv, b, ldb, x, ldx, work, swork, iter, info. Also ipiv and iter are both non-const lapack_int *, so they're getting written. 💅
LAPACK_dspcon
void LAPACK_dspcon (char * uplo, lapack_int * n, const double * ap, const
lapack_int * ipiv, double * anorm, double * rcond, double * work,
lapack_int * iwork, lapack_int * info)
Packed + pivots: uplo, n, ap, ipiv, anorm, rcond, work, iwork, info. Note ipiv is const lapack_int * here — read-only pivots, which is a vibe. 🌸
LAPACK_dspev
void LAPACK_dspev (char * jobz, char * uplo, lapack_int * n, double * ap,
double * w, double * z, lapack_int * ldz, double * work, lapack_int *
info)
jobz, uplo, n, ap, w, z, ldz, work, info. Nine args, packed, work but no lwork. The starter pack pack. ✨
LAPACK_dspevd
void LAPACK_dspevd (char * jobz, char * uplo, lapack_int * n, double * ap,
double * w, double * z, lapack_int * ldz, double * work, lapack_int *
lwork, lapack_int * iwork, lapack_int * liwork, lapack_int * info)
And the d ending brings the whole support system: jobz, uplo, n, ap, w, z, ldz, work, lwork, iwork, liwork, info. Two works, two lengths, one info. 💖
LAPACK_dspevx
void LAPACK_dspevx (char * jobz, char * range, char * uplo, lapack_int * n,
double * ap, double * vl, double * vu, lapack_int * il, lapack_int * iu,
double * abstol, lapack_int * m, double * w, double * z, lapack_int *
ldz, double * work, lapack_int * iwork, lapack_int * ifail, lapack_int *
info)
jobz, range, uplo, n, ap, vl, vu, il, iu, abstol, m, w, z, ldz, work, iwork, ifail, info. Eighteen args, work with no lwork, and yes ifail is still invited to the party. 🙈
LAPACK_dspgst
void LAPACK_dspgst (lapack_int * itype, char * uplo, lapack_int * n, double
* ap, const double * bp, lapack_int * info)
Short king 👑 — itype (a lapack_int *, not a char!), uplo, n, ap, bp, info. And look: ap is writable but bp is const. She picks favorites. 🎀
LAPACK_dspgv
void LAPACK_dspgv (lapack_int * itype, char * jobz, char * uplo, lapack_int
* n, double * ap, double * bp, double * w, double * z, lapack_int * ldz,
double * work, lapack_int * info)
itype, jobz, uplo, n, ap, bp, w, z, ldz, work, info. Both ap and bp fully writable now, work present, lwork absent. Balance. ⭐
LAPACK_dspgvd
void LAPACK_dspgvd (lapack_int * itype, char * jobz, char * uplo, lapack_int
* n, double * ap, double * bp, double * w, double * z, lapack_int * ldz,
double * work, lapack_int * lwork, lapack_int * iwork, lapack_int *
liwork, lapack_int * info)
itype, jobz, uplo, n, ap, bp, w, z, ldz, work, lwork, iwork, liwork, info. Fourteen args and double the workspace bookkeeping. She came prepared. 💜
LAPACK_dspgvx
void LAPACK_dspgvx (lapack_int * itype, char * jobz, char * range, char *
uplo, lapack_int * n, double * ap, double * bp, double * vl, double *
vu, lapack_int * il, lapack_int * iu, double * abstol, lapack_int * m,
double * w, double * z, lapack_int * ldz, double * work, lapack_int *
iwork, lapack_int * ifail, lapack_int * info)
Okay, twenty-one arguments, let's count 'em: itype, jobz, range, uplo, n, ap, bp, vl, vu, il, iu, abstol, m, w, z, ldz, work, iwork, ifail, info. Yep. work without lwork, iwork with a partner-less existence, ifail still here. She's everything. 💀🌸
LAPACK_dsposv
void LAPACK_dsposv (char * uplo, lapack_int * n, lapack_int * nrhs, double *
a, lapack_int * lda, double * b, lapack_int * ldb, double * x,
lapack_int * ldx, double * work, float * swork, lapack_int * iter,
lapack_int * info)
The float * swork jumpscare returns 😭 — dsgesv's packed cousin keeps the exact same weird little float pointer. Full cast: uplo, n, nrhs, a, lda, b, ldb, x, ldx, work, swork, iter, info. Note uplo is there because she's the symmetric one, unlike LAPACK_dsgesv up top. 🔍
LAPACK_dsprfs
void LAPACK_dsprfs (char * uplo, lapack_int * n, lapack_int * nrhs, const
double * ap, const double * afp, const lapack_int * ipiv, const double *
b, lapack_int * ldb, double * x, lapack_int * ldx, double * ferr, double
* berr, double * work, lapack_int * iwork, lapack_int * info)
Check the const energy: ap, afp, ipiv, and b are all read-only. 🌈 Then uplo, n, nrhs, ldb, x, ldx, ferr, berr, work, iwork, info fill out the rest. Fifteen args, four const pointers, zero regrets. 💅
LAPACK_dspsv
void LAPACK_dspsv (char * uplo, lapack_int * n, lapack_int * nrhs, double *
ap, lapack_int * ipiv, double * b, lapack_int * ldb, lapack_int * info)
And we close this batch on a tight little eight-arg set: uplo, n, nrhs, ap, ipiv, b, ldb, info. Packed, pivoted, ipiv writable, no work buffers, no notes. A perfect little outro. 🎀✨
okay so we're STILL in the LAPACK_d* run and bestie, this part is a whole parade of prototypes 💅 we are not skipping a single one — every char *, every lapack_int *, every single double * work is coming with us. wrap 'em up, let's go 🎀
first up, the packed-storage girlies. <pink>packed</pink> means ap instead of a full a + lda situation, iykyk.
void LAPACK_dspsvx (char * fact, char * uplo, lapack_int * n, lapack_int *
nrhs, const double * ap, double * afp, lapack_int * ipiv, const double *
b, lapack_int * ldb, double * x, lapack_int * ldx, double * rcond,
double * ferr, double * berr, double * work, lapack_int * iwork,
lapack_int * info)
this one's giving "the whole package" energy — fact, uplo, both ap and afp, plus rcond, ferr AND berr. she does not travel light 💀
void LAPACK_dsptrd (char * uplo, lapack_int * n, double * ap, double * d,
double * e, double * tau, lapack_int * info)
trd = the tridiagonal moment. she hands you d, e and tau and dips ✨
void LAPACK_dsptrf (char * uplo, lapack_int * n, double * ap, lapack_int *
ipiv, lapack_int * info)
the f at the end is for factorize, and she's real chill about it — just uplo, n, ap, ipiv, info. lowkey iconic 🦋
void LAPACK_dsptri (char * uplo, lapack_int * n, double * ap, const
lapack_int * ipiv, double * work, lapack_int * info)
i is for inverse bestie, and notice ipiv is const now — she's just reading it, not touching 🙈
void LAPACK_dsptrs (char * uplo, lapack_int * n, lapack_int * nrhs, const
double * ap, const lapack_int * ipiv, double * b, lapack_int * ldb,
lapack_int * info)
solve era 🩷 b and ldb in, answer out, nrhs because she's multitasking fr fr
now the tridiagonal-eigenvalue block, aka the dst* girls. buckle up, there are so many and they all ate 🌸
void LAPACK_dstebz (char * range, char * order, lapack_int * n, double * vl,
double * vu, lapack_int * il, lapack_int * iu, double * abstol, const
double * d, const double * e, lapack_int * m, lapack_int * nsplit,
double * w, lapack_int * iblock, lapack_int * isplit, double * work,
lapack_int * iwork, lapack_int * info)
range AND order, vl/vu AND il/iu, plus iblock and isplit?? she contains multitudes 👑
void LAPACK_dstedc (char * compz, lapack_int * n, double * d, double * e,
double * z, lapack_int * ldz, double * work, lapack_int * lwork,
lapack_int * iwork, lapack_int * liwork, lapack_int * info)
two workspaces, two sizes — lwork/liwork — because she's a divide and conquer baddie and she needs room 💅
void LAPACK_dstegr (char * jobz, char * range, lapack_int * n, double * d,
double * e, double * vl, double * vu, lapack_int * il, lapack_int * iu,
double * abstol, lapack_int * m, double * w, double * z, lapack_int *
ldz, lapack_int * isuppz, double * work, lapack_int * lwork, lapack_int
* iwork, lapack_int * liwork, lapack_int * info)
the isuppz cameo ✨ and yes she takes both lwork and liwork, main character energy only
void LAPACK_dstein (lapack_int * n, const double * d, const double * e,
lapack_int * m, const double * w, const lapack_int * iblock, const
lapack_int * isplit, double * z, lapack_int * ldz, double * work,
lapack_int * iwork, lapack_int * ifailv, lapack_int * info)
not me spotting that she does NOT take a uplo or jobz 🫶 she already knows what she is. also ifailv is right there at the end keeping it real
void LAPACK_dstemr (char * jobz, char * range, lapack_int * n, double * d,
double * e, double * vl, double * vu, lapack_int * il, lapack_int * iu,
lapack_int * m, double * w, double * z, lapack_int * ldz, lapack_int *
nzc, lapack_int * isuppz, lapack_logical * tryrac, double * work,
lapack_int * lwork, lapack_int * iwork, lapack_int * liwork, lapack_int
* info)
tryrac is a lapack_logical * and I'm obsessed — a whole boolean just vibing in the middle of the arg list 🌈
void LAPACK_dsteqr (char * compz, lapack_int * n, double * d, double * e,
double * z, lapack_int * ldz, double * work, lapack_int * info)
qr girlie. compact. compz first, info last, no notes 🎀
void LAPACK_dsterf (lapack_int * n, double * d, double * e, lapack_int *
info)
literally four args. the minimalism?? she said "I'm not doing the vectors, ask someone else" and honestly, respect 💀
void LAPACK_dstev (char * jobz, lapack_int * n, double * d, double * e,
double * z, lapack_int * ldz, double * work, lapack_int * info)
and she DOES do the vectors. the range 😭
void LAPACK_dstevd (char * jobz, lapack_int * n, double * d, double * e,
double * z, lapack_int * ldz, double * work, lapack_int * lwork,
lapack_int * iwork, lapack_int * liwork, lapack_int * info)
d suffix = divide & conquer again, so of course lwork AND liwork showed up 🫶
void LAPACK_dstevr (char * jobz, char * range, lapack_int * n, double * d,
double * e, double * vl, double * vu, lapack_int * il, lapack_int * iu,
double * abstol, lapack_int * m, double * w, double * z, lapack_int *
ldz, lapack_int * isuppz, double * work, lapack_int * lwork, lapack_int
* iwork, lapack_int * liwork, lapack_int * info)
r for relative-robust era, and she brought abstol, m, w, isuppz and both workspaces. packed to the brim 🧳
void LAPACK_dstevx (char * jobz, char * range, lapack_int * n, double * d,
double * e, double * vl, double * vu, lapack_int * il, lapack_int * iu,
double * abstol, lapack_int * m, double * w, double * z, lapack_int *
ldz, double * work, lapack_int * iwork, lapack_int * ifail, lapack_int *
info)
the x one swaps isuppz out for ifail and honestly that's the whole difference, no cap 👀
okay, deep breath — <purple>symmetric</purple> era. the dsy* section is enormous and she's not sorry 💜
void LAPACK_dsycon (char * uplo, lapack_int * n, const double * a,
lapack_int * lda, const lapack_int * ipiv, double * anorm, double *
rcond, double * work, lapack_int * iwork, lapack_int * info)
anorm in, rcond out — she takes a as const because she's only looking respectfully 🙈
void LAPACK_dsycon_3 (char * uplo, lapack_int * n, const double * a,
lapack_int * lda, const double * e, const lapack_int * ipiv, double *
anorm, double * rcond, double * work, lapack_int * iwork, lapack_int *
info)
the _3 variant said "add e" and that's it. a little extra, a lot of slay ✨
void LAPACK_dsyconv (char * uplo, char * way, lapack_int * n, double * a,
lapack_int * lda, const lapack_int * ipiv, double * e, lapack_int *
info)
there's a way argument. a char * way. she literally lets you pick the way and I think that's beautiful 😭
void LAPACK_dsyequb (char * uplo, lapack_int * n, const double * a,
lapack_int * lda, double * s, double * scond, double * amax, double *
work, lapack_int * info)
equilibration bestie, out here handing you s, scond and amax like little gifts 🎁
void LAPACK_dsyev (char * jobz, char * uplo, lapack_int * n, double * a,
lapack_int * lda, double * w, double * work, lapack_int * lwork,
lapack_int * info)
the CLASSIC. jobz + uplo + w + workspace. she's the blueprint fr 🐝
void LAPACK_dsyev_2stage (char * jobz, char * uplo, lapack_int * n, double *
a, lapack_int * lda, double * w, double * work, lapack_int * lwork,
lapack_int * info)
same args, _2stage in the name, two-stage glow-up. she didn't change her personality, she just upgraded 💅
void LAPACK_dsyevd (char * jobz, char * uplo, lapack_int * n, double * a,
lapack_int * lda, double * w, double * work, lapack_int * lwork,
lapack_int * iwork, lapack_int * liwork, lapack_int * info)
and here come iwork/liwork — divide and conquer never met a workspace it didn't want 🫶
void LAPACK_dsyevd_2stage (char * jobz, char * uplo, lapack_int * n, double
* a, lapack_int * lda, double * w, double * work, lapack_int * lwork,
lapack_int * iwork, lapack_int * liwork, lapack_int * info)
same as above but with the _2stage tag attached. the way she just adds a suffix and calls it a day 😌
void LAPACK_dsyevr (char * jobz, char * range, char * uplo, lapack_int * n,
double * a, lapack_int * lda, double * vl, double * vu, lapack_int * il,
lapack_int * iu, double * abstol, lapack_int * m, double * w, double *
z, lapack_int * ldz, lapack_int * isuppz, double * work, lapack_int *
lwork, lapack_int * iwork, lapack_int * liwork, lapack_int * info)
three char * up front (jobz, range, uplo) and then a whole city of pointers. isuppz is back and she brought friends 🔥
void LAPACK_dsyevr_2stage (char * jobz, char * range, char * uplo,
lapack_int * n, double * a, lapack_int * lda, double * vl, double * vu,
lapack_int * il, lapack_int * iu, double * abstol, lapack_int * m,
double * w, double * z, lapack_int * ldz, lapack_int * isuppz, double *
work, lapack_int * lwork, lapack_int * iwork, lapack_int * liwork,
lapack_int * info)
the _2stage twin. same energy, different shirt 🌸
void LAPACK_dsyevx (char * jobz, char * range, char * uplo, lapack_int * n,
double * a, lapack_int * lda, double * vl, double * vu, lapack_int * il,
lapack_int * iu, double * abstol, lapack_int * m, double * w, double *
z, lapack_int * ldz, double * work, lapack_int * lwork, lapack_int *
iwork, lapack_int * ifail, lapack_int * info)
x girlie said "no isuppz, we're doing ifail today" and I support her choices 💀
void LAPACK_dsyevx_2stage (char * jobz, char * range, char * uplo,
lapack_int * n, double * a, lapack_int * lda, double * vl, double * vu,
lapack_int * il, lapack_int * iu, double * abstol, lapack_int * m,
double * w, double * z, lapack_int * ldz, double * work, lapack_int *
lwork, lapack_int * iwork, lapack_int * ifail, lapack_int * info)
yes bestie, _2stage for this one too. the family reunion is complete 🎀
generalized symmetric-definite time — enter itype, the first argument that isn't a char * and I gaslight myself every single time 😭
void LAPACK_dsygst (lapack_int * itype, char * uplo, lapack_int * n, double
* a, lapack_int * lda, const double * b, lapack_int * ldb, lapack_int *
info)
b is const here because she's only reading it, and there's no jobz, no w, no workspace. she just does the thing and leaves 🔥
void LAPACK_dsygv (lapack_int * itype, char * jobz, char * uplo, lapack_int
* n, double * a, lapack_int * lda, double * b, lapack_int * ldb, double
* w, double * work, lapack_int * lwork, lapack_int * info)
now we got jobz, w and lwork in the mix — the full generalized-eigenvalue slay ✨
void LAPACK_dsygv_2stage (lapack_int * itype, char * jobz, char * uplo,
lapack_int * n, double * a, lapack_int * lda, double * b, lapack_int *
ldb, double * w, double * work, lapack_int * lwork, lapack_int * info)
yep. _2stage. she keeps showing up and honestly? she's earned it 💅
void LAPACK_dsygvd (lapack_int * itype, char * jobz, char * uplo, lapack_int
* n, double * a, lapack_int * lda, double * b, lapack_int * ldb, double
* w, double * work, lapack_int * lwork, lapack_int * iwork, lapack_int *
liwork, lapack_int * info)
d for divide and conquer, so obviously iwork + liwork crash the party 🫶
void LAPACK_dsygvx (lapack_int * itype, char * jobz, char * range, char *
uplo, lapack_int * n, double * a, lapack_int * lda, double * b,
lapack_int * ldb, double * vl, double * vu, lapack_int * il, lapack_int
* iu, double * abstol, lapack_int * m, double * w, double * z,
lapack_int * ldz, double * work, lapack_int * lwork, lapack_int * iwork,
lapack_int * ifail, lapack_int * info)
itype + jobz + range + uplo up top, ifail at the bottom, and everything in between. she's the longest one in this chunk and she knows it 👑
then we slid into the rfs/rfsx refinement section and the error-bound girlies arrived 🌈
void LAPACK_dsyrfs (char * uplo, lapack_int * n, lapack_int * nrhs, const
double * a, lapack_int * lda, const double * af, lapack_int * ldaf,
const lapack_int * ipiv, const double * b, lapack_int * ldb, double * x,
lapack_int * ldx, double * ferr, double * berr, double * work,
lapack_int * iwork, lapack_int * info)
a, af, ipiv, b all const — she's reading the whole history of your factorization and just reporting ferr and berr 💜
void LAPACK_dsyrfsx (char * uplo, char * equed, lapack_int * n, lapack_int *
nrhs, const double * a, lapack_int * lda, const double * af, lapack_int
* ldaf, const lapack_int * ipiv, const double * s, const double * b,
lapack_int * ldb, double * x, lapack_int * ldx, double * rcond, double *
berr, lapack_int * n_err_bnds, double * err_bnds_norm, double *
err_bnds_comp, lapack_int * nparams, double * params, double * work,
lapack_int * iwork, lapack_int * info)
equed, n_err_bnds, err_bnds_norm, err_bnds_comp, nparams, params — she is the "extra" friend and every group chat needs one 😭
now the dsysv cinematic universe. same name, so many suffixes, all valid 🎬
void LAPACK_dsysv (char * uplo, lapack_int * n, lapack_int * nrhs, double *
a, lapack_int * lda, lapack_int * ipiv, double * b, lapack_int * ldb,
double * work, lapack_int * lwork, lapack_int * info)
the original recipe. a, ipiv, b, work, lwork, info. simple, clean, slays ✨
void LAPACK_dsysv_aa (char * uplo, lapack_int * n, lapack_int * nrhs, double
* a, lapack_int * lda, lapack_int * ipiv, double * b, lapack_int * ldb,
double * work, lapack_int * lwork, lapack_int * info)
_aa girlie. identical arg list to the one above, and no I'm not joking, go look 🫶
void LAPACK_dsysv_aa_2stage (char * uplo, lapack_int * n, lapack_int * nrhs,
double * a, lapack_int * lda, double * tb, lapack_int * ltb, lapack_int
* ipiv, lapack_int * ipiv2, double * b, lapack_int * ldb, double * work,
lapack_int * lwork, lapack_int * info)
tb, ltb, ipiv AND ipiv2?? two pivot arrays, two stages, zero chill. obsessed 💅
void LAPACK_dsysv_rk (char * uplo, lapack_int * n, lapack_int * nrhs, double
* a, lapack_int * lda, double * e, lapack_int * ipiv, double * b,
lapack_int * ldb, double * work, lapack_int * lwork, lapack_int * info)
_rk brought e along for the ride. small arg, big vibe 🌸
void LAPACK_dsysv_rook (char * uplo, lapack_int * n, lapack_int * nrhs,
double * a, lapack_int * lda, lapack_int * ipiv, double * b, lapack_int
* ldb, double * work, lapack_int * lwork, lapack_int * info)
rook pivoting era. no e, no tb, just the classics. she's lowkey the most normal one here 💀
void LAPACK_dsysvx (char * fact, char * uplo, lapack_int * n, lapack_int *
nrhs, const double * a, lapack_int * lda, double * af, lapack_int *
ldaf, lapack_int * ipiv, const double * b, lapack_int * ldb, double * x,
lapack_int * ldx, double * rcond, double * ferr, double * berr, double *
work, lapack_int * lwork, lapack_int * iwork, lapack_int * info)
fact is back, a and b are const, af is not — she knows exactly what she's allowed to touch 🙈
void LAPACK_dsysvxx (char * fact, char * uplo, lapack_int * n, lapack_int *
nrhs, double * a, lapack_int * lda, double * af, lapack_int * ldaf,
lapack_int * ipiv, char * equed, double * s, double * b, lapack_int *
ldb, double * x, lapack_int * ldx, double * rcond, double * rpvgrw,
double * berr, lapack_int * n_err_bnds, double * err_bnds_norm, double *
err_bnds_comp, lapack_int * nparams, double * params, double * work,
lapack_int * iwork, lapack_int * info)
the xx finale: equed, rpvgrw, n_err_bnds, err_bnds_norm, err_bnds_comp, nparams, params. she said "give me everything" and honestly, queen behavior 👑✨
and then, right at the end, the short-king section:
void LAPACK_dsyswapr (char * uplo, lapack_int * n, double * a, lapack_int *
lda, lapack_int * i1, lapack_int * i2)
NO info!! not a single info in sight!! she just swaps and bounces, no reporting back, no closure, no closure at all 😭🫶
void LAPACK_dsytrd (char * uplo, lapack_int * n, double * a, lapack_int *
lda, double * d, double * e, double * tau, double * work, lapack_int *
lwork, lapack_int * info)
trd girlie bringing d, e, tau AND a workspace. she came prepared 🌟
void LAPACK_dsytrf (char * uplo, lapack_int * n, double * a, lapack_int *
lda, lapack_int * ipiv, double * work, lapack_int * lwork, lapack_int *
info)
the factorizer. she's the reason the rest of this section even functions 💅
void LAPACK_dsytrf_aa (char * uplo, lapack_int * n, double * a, lapack_int *
lda, lapack_int * ipiv, double * work, lapack_int * lwork, lapack_int *
info)
_aa version. same args as the one right above. I'm not repeating myself, LAPACK is repeating itself 🎀
void LAPACK_dsytrf_aa_2stage (char * uplo, lapack_int * n, double * a,
lapack_int * lda, double * tb, lapack_int * ltb, lapack_int * ipiv,
and — bestie the source literally cuts off mid-signature right here, mid-parameter-list, ipiv dangling, no closing paren, no info. she's still typing 💀 more of her is coming in the next chunk, so don't go anywhere 🦋
...and that dangling lapack_int * ipiv2, double * work, lapack_int * lwork, lapack_int * info) at the top? that's just the elbow of a declaration that started in the last part, bestie — not a whole function, just the tail end of one. catching you up: we're still deep in the function prototypes, all the d-prefixed double-precision baddies. let's go 💅
void LAPACK_dsytrf_rk (char * uplo, lapack_int * n, double * a, lapack_int * lda, double * e, double * ipiv, double * work, lapack_int * lwork, lapack_int * info)
the _rk girlie. she's got an extra double * e slot that her plain sisters don't have, and a is fully mutable — no const in sight, she's not precious about it 💖
void LAPACK_dsytrf_rook (char * uplo, lapack_int * n, double * a, lapack_int * lda, lapack_int * ipiv, double * work, lapack_int * lwork, lapack_int * info)
rook energy 👑 same nine-argument silhouette as the classic, char * uplo first, lapack_int * info last, work/lwork doing their lil duo thing in the middle.
void LAPACK_dsytri (char * uplo, lapack_int * n, double * a, lapack_int * lda, const lapack_int * ipiv, double * work, lapack_int * info)
here's where the const era begins — ipiv is const lapack_int * and the compiler will absolutely fight you if you touch it. iconique 🌸
void LAPACK_dsytri2 (char * uplo, lapack_int * n, double * a, lapack_int * lda, const lapack_int * ipiv, double * work, lapack_int * lwork, lapack_int * info)
same as her big sis but with lapack_int * lwork tucked in before info. the "2" is giving sequel-that-ate 🔥
void LAPACK_dsytri2x (char * uplo, lapack_int * n, double * a, lapack_int * lda, const lapack_int * ipiv, double * work, lapack_int * nb, lapack_int * info)
plot twist: no lwork at all — she takes lapack_int * nb instead, and honestly that's her whole personality 🦋
void LAPACK_dsytri_3 (char * uplo, lapack_int * n, double * a, lapack_int * lda, const double * e, const lapack_int * ipiv, double * work, lapack_int * lwork, lapack_int * info)
two const qualifiers in one signature, const double * e AND const lapack_int * ipiv. read-only royalty, we stan ✨
void LAPACK_dsytrs (char * uplo, lapack_int * n, lapack_int * nrhs, const double * a, lapack_int * lda, const lapack_int * ipiv, double * b, lapack_int * ldb, lapack_int * info)
nine args, a and ipiv both const, b and ldb ready to be written into. she's a worker bee fr fr 💜
void LAPACK_dsytrs2 (char * uplo, lapack_int * n, lapack_int * nrhs, const double * a, lapack_int * lda, const lapack_int * ipiv, double * b, lapack_int * ldb, double * work, lapack_int * info)
the sequel again — everyone from the original plus a double * work glow-up at the end, right before info 😌
void LAPACK_dsytrs_3 (char * uplo, lapack_int * n, lapack_int * nrhs, const double * a, lapack_int * lda, const double * e, const lapack_int * ipiv, double * b, lapack_int * ldb, lapack_int * info)
the _3 variant brings that const double * e along for the ride — matching her _3 factorization bestie, as she should 🎀
void LAPACK_dsytrs_aa (char * uplo, lapack_int * n, lapack_int * nrhs, const double * a, lapack_int * lda, const lapack_int * ipiv, double * b, lapack_int * ldb, double * work, lapack_int * lwork, lapack_int * info)
aa means extra work AND extra lwork — she is high maintenance and we respect it 🫶
void LAPACK_dsytrs_aa_2stage (char * uplo, lapack_int * n, lapack_int * nrhs, double * a, lapack_int * lda, double * tb, lapack_int * ltb, lapack_int * ipiv, lapack_int * ipiv2, double * b, lapack_int * ldb, lapack_int * info)
okay THIS one is the whole group chat: tb, ltb, ipiv, ipiv2 — and notice both a and tb are plain non-const double *, no read-only anything. two-stage main character energy 👑🔥
void LAPACK_dsytrs_rook (char * uplo, lapack_int * n, lapack_int * nrhs, const double * a, lapack_int * lda, const lapack_int * ipiv, double * b, lapack_int * ldb, lapack_int * info)
rook-flavored solve, nine args, const on a and ipiv, and she's out the door. slay 💅
okay switching vibes — welcome to the dt section, aka the triangular / banded girls. same pointer obsession, different flavor 🌈
void LAPACK_dtbcon (char * norm, char * uplo, char * diag, lapack_int * n, lapack_int * kd, const double * ab, lapack_int * ldab, double * rcond, double * work, lapack_int * iwork, lapack_int * info)
three char * character arguments stacked at the front (norm, uplo, diag), a rcond output, and both a double * work and a lapack_int * iwork. bilingual queen ⭐
void LAPACK_dtbrfs (char * uplo, char * trans, char * diag, lapack_int * n, lapack_int * kd, lapack_int * nrhs, const double * ab, lapack_int * ldab, const double * b, lapack_int * ldb, const double * x, lapack_int * ldx, double * ferr, double * berr, double * work, lapack_int * iwork, lapack_int * info)
count them: seventeen arguments. SEVENTEEN. ferr and berr both hang out at the end like a matching set, and three of the inputs are const. iconic stamina tbh 😤
void LAPACK_dtbtrs (char * uplo, char * trans, char * diag, lapack_int * n, lapack_int * kd, lapack_int * nrhs, const double * ab, lapack_int * ldab, double * b, lapack_int * ldb, lapack_int * info)
the solve sibling — much chiller, only eleven, const double * ab held down and b free to get overwritten 💖
void LAPACK_dtfsm (char * transr, char * side, char * uplo, char * trans, char * diag, lapack_int * m, lapack_int * n, double * alpha, const double * a, double * b, lapack_int * ldb)
⚠️ bestie look at the end — there is no lapack_int * info on this one. it just stops after ldb. not a typo, that's genuinely the signature. no error channel, no notes, she simply leaves 🌸
void LAPACK_dtftri (char * transr, char * uplo, char * diag, lapack_int * n, double * a, lapack_int * info)
short and sweet — five inputs and an info, and transr is spelled with that extra r so don't come for me 🦋
void LAPACK_dtfttp (char * transr, char * uplo, lapack_int * n, const double * arf, double * ap, lapack_int * info)
arf in, ap out, arf is const because she's a guest, ap is not because she's the host 💜
void LAPACK_dtfttr (char * transr, char * uplo, lapack_int * n, const double * arf, double * a, lapack_int * lda, lapack_int * info)
same deal but landing in a with a lda on the side. the reverse-direction girls are so real for this 🎀
void LAPACK_dtgevc (char * side, char * howmny, const lapack_logical * select, lapack_int * n, const double * s, lapack_int * lds, const double * p, lapack_int * ldp, double * vl, lapack_int * ldvl, double * vr, lapack_int * ldvr, lapack_int * mm, lapack_int * m, double * work, lapack_int * info)
sixteen arguments and one lapack_logical * cameo. vl/vr are the un-const ones — the outputs — while s and p stay respectfully read-only. also mm and m sitting next to each other, chaos 🔥
void LAPACK_dtgexc (lapack_logical * wantq, lapack_logical * wantz, lapack_int * n, double * a, lapack_int * lda, double * b, lapack_int * ldb, double * q, lapack_int * ldq, double * z, lapack_int * ldz, lapack_int * ifst, lapack_int * ilst, double * work, lapack_int * lwork, lapack_int * info)
TWO lapack_logical * up front — wantq and wantz — plus the iconic ifst/ilst pair. nothing is const here, it's a free-for-all 🙈
void LAPACK_dtgsen (lapack_int * ijob, lapack_logical * wantq, lapack_logical * wantz, const lapack_logical * select, lapack_int * n, double * a, lapack_int * lda, double * b, lapack_int * ldb, double * alphar, double * alphai, double * beta, double * q, lapack_int * ldq, double * z, lapack_int * ldz, lapack_int * m, double * pl, double * pr, double * dif, double * work, lapack_int * lwork, lapack_int * iwork, lapack_int * liwork, lapack_int * info)
okay she's the longest so far and I need to breathe. ijob, wantq, wantz, select (the only const one!), alphar/alphai/beta, pl/pr/dif, and BOTH iwork/liwork and work/lwork pairs. twenty-six arguments. twenty-six. 💀👑
void LAPACK_dtgsja (char * jobu, char * jobv, char * jobq, lapack_int * m, lapack_int * p, lapack_int * n, lapack_int * k, lapack_int * l, double * a, lapack_int * lda, double * b, lapack_int * ldb, double * tola, double * tolb, double * alpha, double * beta, double * u, lapack_int * ldu, double * v, lapack_int * ldv, double * q, lapack_int * ldq, double * work, lapack_int * ncycle, lapack_int * info)
three job* chars, tola/tolb, alpha/beta, three whole matrices (u, v, q) with their ld* escorts, and a lapack_int * ncycle right before info. zero const anywhere. unhinged and correct ✨
void LAPACK_dtgsna (char * job, char * howmny, const lapack_logical * select, lapack_int * n, const double * a, lapack_int * lda, const double * b, lapack_int * ldb, const double * vl, lapack_int * ldvl, const double * vr, lapack_int * ldvr, double * s, double * dif, lapack_int * mm, lapack_int * m, double * work, lapack_int * lwork, lapack_int * iwork, lapack_int * info)
job and howmny (yes that's the actual spelling, do not @ me), four separate const qualifiers, and a select that is const lapack_logical *. receipts everywhere 🧾💅
void LAPACK_dtgsyl (char * trans, lapack_int * ijob, lapack_int * m, lapack_int * n, const double * a, lapack_int * lda, const double * b, lapack_int * ldb, double * c, lapack_int * ldc, const double * d, lapack_int * ldd, const double * e, lapack_int * lde, double * f, lapack_int * ldf, double * scale, double * dif, double * work, lapack_int * lwork, lapack_int * iwork, lapack_int * info)
a/b/d/e are all const, c/f/scale/dif are all fair game, and trans + ijob lead the parade. alphabet soup but make it couture 🍓
void LAPACK_dtpcon (char * norm, char * uplo, char * diag, lapack_int * n, const double * ap, double * rcond, double * work, lapack_int * iwork, lapack_int * info)
three chars, one const double * ap, one rcond, two work arrays. tidy, focused, gets it done 🌟
void LAPACK_dtpmqrt (char * side, char * trans, lapack_int * m, lapack_int * n, lapack_int * k, lapack_int * l, lapack_int * nb, const double * v, lapack_int * ldv, const double * t, lapack_int * ldt, double * a, lapack_int * lda, double * b, lapack_int * ldb, double * work, lapack_int * info)
m, n, k, l, nb — five lapack_int in a row before you even meet a double. v and t are const, a and b are not. blocking-coded 💜
void LAPACK_dtpqrt (lapack_int * m, lapack_int * n, lapack_int * l, lapack_int * nb, double * a, lapack_int * lda, double * b, lapack_int * ldb, double * t, lapack_int * ldt, double * work, lapack_int * info)
same fam, no side/trans preface, and literally zero const. everybody's getting overwritten tonight 🔥
void LAPACK_dtpqrt2 (lapack_int * m, lapack_int * n, lapack_int * l, double * a, lapack_int * lda, double * b, lapack_int * ldb, double * t, lapack_int * ldt, lapack_int * info)
the 2 variant drops nb and work entirely. smaller bag, same attitude 🎀
void LAPACK_dtprfb (char * side, char * trans, char * direct, char * storev, lapack_int * m, lapack_int * n, lapack_int * k, lapack_int * l, const double * v, lapack_int * ldv, const double * t, lapack_int * ldt, double * a, lapack_int * lda, double * b, lapack_int * ldb, const double * work, lapack_int * ldwork)
FOUR character args (side, trans, direct, storev) and — heads up — ⚠️ it ends on lapack_int * ldwork with no lapack_int * info at all. also work is const here which is a fun lil curveball. maverick behavior 🦋
void LAPACK_dtprfs (char * uplo, char * trans, char * diag, lapack_int * n, lapack_int * nrhs, const double * ap, const double * b, lapack_int * ldb, const double * x, lapack_int * ldx, double * ferr, double * berr, double * work, lapack_int * iwork, lapack_int * info)
ap, b, x all const (three guests), ferr/berr the twin outputs, work + iwork the twin scrubs. symmetrical queen 🌸
void LAPACK_dtptri (char * uplo, char * diag, lapack_int * n, double * ap, lapack_int * info)
five args, minimal, no notes. she said "less is more" and left 💅
void LAPACK_dtptrs (char * uplo, char * trans, char * diag, lapack_int * n, lapack_int * nrhs, const double * ap, double * b, lapack_int * ldb, lapack_int * info)
ap locked down with const, b open for business. the classic in-place-glow-up structure 💖
void LAPACK_dtpttf (char * transr, char * uplo, lapack_int * n, const double * ap, double * arf, lapack_int * info)
ap → arf, one in, one out, transr with the rogue r again. consistency is a myth and I love that for her ⭐
void LAPACK_dtpttr (char * uplo, lapack_int * n, const double * ap, double * a, lapack_int * lda, lapack_int * info)
the reverse trip — ap out of the packed lane and into a, complete with a lda to hold her hand 🫶
void LAPACK_dtrcon (char * norm, char * uplo, char * diag, lapack_int * n, const double * a, lapack_int * lda, double * rcond, double * work, lapack_int * iwork, lapack_int * info)
three chars, const double * a, rcond output, work + iwork duo. the dtbcon/dtpcon trio is now complete and they're all matching 👑
void LAPACK_dtrevc (char * side, char * howmny, lapack_logical * select, lapack_int * n, const double * t, lapack_int * ldt, double * vl, lapack_int * ldvl, double * vr, lapack_int * ldvr, lapack_int * mm, lapack_int * m, double * work, lapack_int * info)
note the difference from LAPACK_dtgsna: here select is a plain lapack_logical *, NOT const. same word, different rules — iykyk 😭
void LAPACK_dtrexc (char * compq, lapack_int * n, double * t, lapack_int * ldt, double * q, lapack_int * ldq, lapack_int * ifst, lapack_int * ilst, double * work, lapack_int * info)
compq instead of compz/compq chaos, plus the iconic ifst/ilst duo again. no lwork though — work flies solo 🦋
void LAPACK_dtrrfs (char * uplo, char * trans, char * diag, lapack_int * n, lapack_int * nrhs, const double * a, lapack_int * lda, const double * b, lapack_int * ldb, const double * x, lapack_int * ldx, double * ferr, double * berr, double * work, lapack_int * iwork, lapack_int * info)
sixteen args, three const guests (a, b, x), two ferr/berr outputs, two work arrays. she's the dtprfs girlie's slightly taller sister and they share a wardrobe 🌈
void LAPACK_dtrsen (char * job, char * compq, const lapack_logical * select, lapack_int * n, double * t, lapack_int * ldt, double * q, lapack_int * ldq, double * wr, double * wi, lapack_int * m, double * s, double * sep, double * work, lapack_int * lwork, lapack_int * iwork, lapack_int * liwork, lapack_int * info)
nineteen arguments! select is const here (unlike dtrevc, stay woke), and she's got wr/wi, s/sep, AND both work/lwork and iwork/liwork pairs. absolute unit 💀👑
void LAPACK_dtrsna (char * job, char * howmny, const lapack_logical * select, lapack_int * n, const double * t, lapack_int * ldt, const double * vl, lapack_int * ldvl, const double * vr, lapack_int * ldvr, double * s, double * sep, lapack_int * mm, lapack_int * m, double * work, lapack_int * ldwork, lapack_int * iwork, lapack_int * info)
eighteen args, select const, t/vl/vr const, and look — lapack_int * ldwork where you'd expect lwork. read it twice, it's real 🎀
void LAPACK_dtrsyl (char * trana, char * tranb, lapack_int * isgn, lapack_int * m, lapack_int * n, const double * a, lapack_int * lda, const double * b, lapack_int * ldb, double * c, lapack_int * ldc, double * scale, lapack_int * info)
TWO separate trans flags (trana, tranb) because she's doing both sides, plus an isgn. c and scale are the outputs, a and b behave themselves with const ✨
void LAPACK_dtrtri (char * uplo, char * diag, lapack_int * n, double * a, lapack_int * lda, lapack_int * info)
six args, a fully mutable, done. sometimes the short ones hit hardest 💅
void LAPACK_dtrtrs (char * uplo, char * trans, char * diag, lapack_int * n, lapack_int * nrhs, const double * a, lapack_int * lda, double * b, lapack_int * ldb, lapack_int * info)
the solve version: a goes const, b stays free, nrhs joins the party. the classic triangle of trust 🌟
void LAPACK_dtrttf (char * transr, char * uplo, lapack_int * n, const double * a, lapack_int * lda, double * arf, lapack_int * info)
full → packed, a/lda const-adjacent (well, a is), arf receives. transr with the r, always 💜
void LAPACK_dtrttp (char * uplo, lapack_int * n, const double * a, lapack_int * lda, double * ap, lapack_int * info)
NO transr here — just plain uplo. she's the low-key sibling of the packed-format family, and honestly the lack of extra letters is refreshing 🍓
void LAPACK_dtzrzf (lapack_int * m, lapack_int * n, double * a, lapack_int * lda, double * tau, double * work, lapack_int * lwork, lapack_int * info)
m, n, a, lda, tau, plus the work/lwork duo and info. zero const — she came to WRITE 🔥
okay and then we've got three lil oddballs at the end of the list who are NOT void and NOT pointer-everything. pay attention bestie, these are different 💅
void LAPACK_ilaver (const lapack_int * vers_major, const lapack_int * vers_minor, const lapack_int * vers_patch)
back to void, three const lapack_int * — version major, minor, patch — and ⚠️ no lapack_int * info at the end. no error signal, no return value, she just tells you the version and ghosts 😌
lapack_logical LAPACK_lsame (char * ca, char * cb, lapack_int lca, lapack_int lcb)
look at this icon: returns a lapack_logical instead of void, and lca/lcb are passed by value — plain lapack_int, no star, no pointer, nothing. the only pointer args are the two char *. a whole different species, we love range 🦋👑
lapack_complex_double lapack_make_complex_double (double re, double im)
Definition at line 37 of file lapacke_make_complex_double.c.
she RETURNS a lapack_complex_double and takes re and im as plain by-value doubles. no pointers to be found, truly a breath of fresh air 🫶 and yes, the definition lives at line 37 of lapacke_make_complex_double.c — noted, bookmarked, memorized 📌
lapack_complex_float lapack_make_complex_float (float re, float im)
Definition at line 37 of file lapacke_make_complex_float.c.
exactly the same deal but float flavored and returning lapack_complex_float — and she's also defined at line 37 of her own file (lapacke_make_complex_float.c), which is a cute matching-placement moment if you think about it 🌸
and that's this chunk of the prototype parade! still more coming, don't wander off 💖
LAPACK_sbbcsd
void LAPACK_sbbcsd (char * jobu1, char * jobu2, char * jobv1t, char *
jobv2t, char * trans, lapack_int * m, lapack_int * p, lapack_int * q,
float * theta, float * phi, float * u1, lapack_int * ldu1, float * u2,
lapack_int * ldu2, float * v1t, lapack_int * ldv1t, float * v2t,
lapack_int * ldv2t, float * b11d, float * b11e, float * b12d, float *
b12e, float * b21d, float * b21e, float * b22d, float * b22e, float *
work, lapack_int * lwork, lapack_int * info)
okay this one has twenty-eight arguments bestie, she is NOT beating the "too many pointers" allegations 💀 four job chars (jobu1, jobu2, jobv1t, jobv2t) plus a trans on top — five characters deciding her whole personality. Then theta and phi like she's doing astrology not linear algebra ✨ then every combination from b11d, b11e, b12d, b12e, b21d, b21e, b22d, b22e — that's the whole 2×2 grid of little dudes, no cap. rounding out with work and lwork and, obviously, info at the end like every other function at this party 🎀
LAPACK_sbdsdc
void LAPACK_sbdsdc (char * uplo, char * compq, lapack_int * n, float * d,
float * e, float * u, lapack_int * ldu, float * vt, lapack_int * ldvt,
float * q, lapack_int * iq, float * work, lapack_int * iwork, lapack_int
* info)
uplo and compq opening, n for size, then d and e (the tiniest possible variable names, she is efficient 💅), u with its ldu, vt with its ldvt, q with its iq, and both work and iwork because she needs a float workspace AND a lapack_int workspace. icon behaviour tbh. and info. always info. 🫶
LAPACK_sbdsqr
void LAPACK_sbdsqr (char * uplo, lapack_int * n, lapack_int * ncvt,
lapack_int * nru, lapack_int * ncc, float * d, float * e, float * vt,
lapack_int * ldvt, float * u, lapack_int * ldu, float * c, lapack_int *
ldc, float * work, lapack_int * info)
three separate counts (ncvt, nru, ncc) which honestly is a flex — she's tracking three dimensions at once and still remembers uplo at the front 🌸 matrices vt, u and c all with their own leading dimensions, work doing the heavy lifting, info reporting at the end. the way she indexes things is genuinely iconic lowkey 🙈
LAPACK_sbdsvdx
void LAPACK_sbdsvdx (char * uplo, char * jobz, char * range, lapack_int * n,
float * d, float * e, float * vl, float * vu, lapack_int * il,
lapack_int * iu, lapack_int * ns, float * s, float * z, lapack_int *
ldz, float * work, lapack_int * iwork, lapack_int * info)
three char pointers again (uplo, jobz, range) — she's got range, literally, with vl, vu, il and iu sitting right there between the brackets 👑 note ns is lapack_int * while s right beside her is float *, and z comes with ldz. plus work, iwork, info. the vdx on the end of the name is giving deluxe edition ngl 💖
LAPACK_sdisna
void LAPACK_sdisna (char * job, lapack_int * m, lapack_int * n, const float
* d, float * sep, lapack_int * info)
a short queen!! only six params 😭 honestly refreshing after the twenty-eight-argument situation earlier. she's got job, m, n, and then — look at her — d is const float * because she would NEVER modify your input, and sep is just float * and fully mutable. respectful icon. finishes with info like always 🎀
LAPACK_sgbbrd
void LAPACK_sgbbrd (char * vect, lapack_int * m, lapack_int * n, lapack_int
* ncc, lapack_int * kl, lapack_int * ku, float * ab, lapack_int * ldab,
float * d, float * e, float * q, lapack_int * ldq, float * pt,
lapack_int * ldpt, float * c, lapack_int * ldc, float * work, lapack_int
* info)
the "many arguments" club member. vect, m, n, ncc, kl, ku — six inputs before she even gets to a matrix 💀 then ab (with ldab), d, e, q (with ldq), pt (with ldpt), c (with ldc), then work and info. every array gets a plus-one leading dimension, no gatekeeping, no favourites, we love to see it ✨
LAPACK_sgbcon
void LAPACK_sgbcon (char * norm, lapack_int * n, lapack_int * kl, lapack_int
* ku, const float * ab, lapack_int * ldab, const lapack_int * ipiv,
float * anorm, float * rcond, float * work, lapack_int * iwork,
lapack_int * info)
the const respect here is off the charts: ab is const float * and ipiv is const lapack_int * — she is NOT touching your data, bestie, she's just looking 💅 starts with norm, then the trio n, kl, ku, and outputs anorm and rcond into plain non-const pointers. work, iwork, info. tidy. obsessed 🦋
LAPACK_sgbequ
void LAPACK_sgbequ (lapack_int * m, lapack_int * n, lapack_int * kl,
lapack_int * ku, const float * ab, lapack_int * ldab, float * r, float *
c, float * rowcnd, float * colcnd, float * amax, lapack_int * info)
no char args at all!! a purely numeric girlie, she doesn't need a 'N' or a 'U' to define her 😌 m, n, kl, ku, then ab (const, as she should) with ldab, then outputs r, c, rowcnd, colcnd, amax, and finally info. note there's no work and no iwork here — she simply does not need them, minimal queen 🎀
LAPACK_sgbequb
void LAPACK_sgbequb (lapack_int * m, lapack_int * n, lapack_int * kl,
lapack_int * ku, const float * ab, lapack_int * ldab, float * r, float *
c, float * rowcnd, float * colcnd, float * amax, lapack_int * info)
okay so this is LAPACK_sgbequ's sister — literally identical signature, the only difference is a lil b at the end of the name 👯♀️ same m, n, kl, ku, same const ab and ldab, same r, c, rowcnd, colcnd, amax, same lonely info. twins fr fr, don't mix them up, the b is load-bearing (iykyk) 🧚
LAPACK_sgbrfs
void LAPACK_sgbrfs (char * trans, lapack_int * n, lapack_int * kl,
lapack_int * ku, lapack_int * nrhs, const float * ab, lapack_int * ldab,
const float * afb, lapack_int * ldafb, const lapack_int * ipiv, const
float * b, lapack_int * ldb, float * x, lapack_int * ldx, float * ferr,
float * berr, float * work, lapack_int * iwork, lapack_int * info)
the "I have TWO matrices" energy: ab with ldab AND afb with ldafb, both const, because she's a read-only legend 🫶 then ipiv (const) and b (const) with its ldb, and finally the outputs x (with ldx), ferr and berr. work, iwork, info. the naming is like a little code: ferr, berr, work, iwork. satisfying ngl ✨
LAPACK_sgbrfsx
void LAPACK_sgbrfsx (char * trans, char * equed, lapack_int * n, lapack_int
* kl, lapack_int * ku, lapack_int * nrhs, const float * ab, lapack_int *
ldab, const float * afb, lapack_int * ldafb, const lapack_int * ipiv,
const float * r, const float * c, const float * b, lapack_int * ldb,
float * x, lapack_int * ldx, float * rcond, float * berr, lapack_int *
n_err_bnds, float * err_bnds_norm, float * err_bnds_comp, lapack_int *
nparams, float * params, float * work, lapack_int * iwork, lapack_int *
info)
she's the x version, meaning she showed up with EXTRA everything 🔥 two char args now (trans AND equed), more const inputs (r, c, b all const float *), and then the error-bound crew: n_err_bnds, err_bnds_norm, err_bnds_comp, nparams, params. plus rcond, berr, work, iwork, info. that's twenty-five params bestie. twenty-five. she did not come to play 💀
LAPACK_sgbsv
void LAPACK_sgbsv (lapack_int * n, lapack_int * kl, lapack_int * ku,
lapack_int * nrhs, float * ab, lapack_int * ldab, lapack_int * ipiv,
float * b, lapack_int * ldb, lapack_int * info)
okay a RELATIVELY chill one, only ten params, she's the approachable friend of the group 😌 n, kl, ku, nrhs in, then ab with ldab, ipiv, b with ldb, and info closing it out. notice NO const anywhere — everything is fair game, she's allowed to mess with it 💅 slay
LAPACK_sgbsvx
void LAPACK_sgbsvx (char * fact, char * trans, lapack_int * n, lapack_int *
kl, lapack_int * ku, lapack_int * nrhs, float * ab, lapack_int * ldab,
float * afb, lapack_int * ldafb, lapack_int * ipiv, char * equed, float
* r, float * c, float * b, lapack_int * ldb, float * x, lapack_int *
ldx, float * rcond, float * ferr, float * berr, float * work, lapack_int
* iwork, lapack_int * info)
fact and trans up top, equed sneaking in as the third char pointer in the middle there 👀 two matrices (ab/ldab and afb/ldafb), ipiv, then the scaling duo r and c, then b/ldb and x/ldx, then rcond, ferr, berr, work, iwork, info. no const at all, she's fully hands-on. main character energy, fr 🎀
LAPACK_sgbsvxx
void LAPACK_sgbsvxx (char * fact, char * trans, lapack_int * n, lapack_int *
kl, lapack_int * ku, lapack_int * nrhs, float * ab, lapack_int * ldab,
float * afb, lapack_int * ldafb, lapack_int * ipiv, char * equed, float
* r, float * c, float * b, lapack_int * ldb, float * x, lapack_int *
ldx, float * rcond, float * rpvgrw, float * berr, lapack_int *
n_err_bnds, float * err_bnds_norm, float * err_bnds_comp, lapack_int *
nparams, float * params, float * work, lapack_int * iwork, lapack_int *
info)
double x, double the drama 👑 this is LAPACK_sgbsvx but she went shopping: everything from her sister plus rpvgrw and the whole error-bound entourage — n_err_bnds, err_bnds_norm, err_bnds_comp, nparams, params. twenty-six params. the way she just keeps going 😭 and yes info is still last, someone has to be the responsible one 🦋
LAPACK_sgbtrf
void LAPACK_sgbtrf (lapack_int * m, lapack_int * n, lapack_int * kl,
lapack_int * ku, float * ab, lapack_int * ldab, lapack_int * ipiv,
lapack_int * info)
eight params, no char args, she's pure function 💅 m and n (both! not just one! she's rectangular and proud), kl, ku, the matrix ab with ldab, the ipiv array, and info. short, sweet, gets to the point. honestly? ate 🍓
LAPACK_sgbtrs
void LAPACK_sgbtrs (char * trans, lapack_int * n, lapack_int * kl,
lapack_int * ku, lapack_int * nrhs, const float * ab, lapack_int * ldab,
const lapack_int * ipiv, float * b, lapack_int * ldb, lapack_int * info)
last one of this batch and she's a respectful queen 🫶 trans up front, then n, kl, ku, nrhs, and look — ab is const float * and ipiv is const lapack_int *. she's NOT touching those. only b (with ldb) is fair game, then info at the end, as is tradition ✨ what a way to close out this stretch, no cap 💖
okay bestie we're deep in the s-zone now and it is a lot 💅 this whole stretch is the single-precision squad — the ones that eat float * for breakfast — and true to form, literally every single argument is a pointer. even n. even m. there is no mercy, only asterisks. and almost every last one of them ends with a lapack_int * info keeping score for you 🫶 keep scrolling, we're not even close to done.
LAPACK_sgebak— twochar *flags off the top (job,side), anilo/ihiduo, andconst float * scalehaving the decency to beconst. thenm,v,ldv, done.
void LAPACK_sgebak (char * job, char * side, lapack_int * n, lapack_int * ilo, lapack_int * ihi, const float * scale, lapack_int * m, float * v, lapack_int * ldv, lapack_int * info)
LAPACK_sgebal— onechar * joband then it hands you backilo,ihiandscale, which is a lot of gifts honestly 🎁
void LAPACK_sgebal (char * job, lapack_int * n, float * a, lapack_int * lda, lapack_int * ilo, lapack_int * ihi, float * scale, lapack_int * info)
LAPACK_sgebrd— vowel-free name, icon behaviour. you get thed/epair and the legendarytauq+taupduo, pluswork/lwork.
void LAPACK_sgebrd (lapack_int * m, lapack_int * n, float * a, lapack_int * lda, float * d, float * e, float * tauq, float * taup, float * work, lapack_int * lwork, lapack_int * info)
LAPACK_sgecon—char * normup front,const float * abeing polite, thenanorm,rcond,workandiwork(the integer work buffer said hi 👋).
void LAPACK_sgecon (char * norm, lapack_int * n, const float * a, lapack_int * lda, float * anorm, float * rcond, float * work, lapack_int * iwork, lapack_int * info)
LAPACK_sgeequ— output city:r,c,rowcnd,colcndandamax, allfloat *, all yours.
void LAPACK_sgeequ (lapack_int * m, lapack_int * n, const float * a, lapack_int * lda, float * r, float * c, float * rowcnd, float * colcnd, float * amax, lapack_int * info)
LAPACK_sgeequb— same exact cast assgeequ, it just brought one extra letter to the party. king behaviour, no notes 👑
void LAPACK_sgeequb (lapack_int * m, lapack_int * n, const float * a, lapack_int * lda, float * r, float * c, float * rowcnd, float * colcnd, float * amax, lapack_int * info)
LAPACK_sgees— got a wholeLAPACK_S_SELECT2 selectfunction pointer in there (a callback bestie, it's giving higher-order), plussdim,wr,wi,vs,ldvsand thelapack_logical * bwork.
void LAPACK_sgees (char * jobvs, char * sort, LAPACK_S_SELECT2 select, lapack_int * n, float * a, lapack_int * lda, lapack_int * sdim, float * wr, float * wi, float * vs, lapack_int * ldvs, float * work, lapack_int * lwork, lapack_logical * bwork, lapack_int * info)
LAPACK_sgeesx— the deluxe edition: sameselectcallback, thensense,rconde,rcondv, and both theiwork/liworkpair andbwork. maximum buffer energy ✨
void LAPACK_sgeesx (char * jobvs, char * sort, LAPACK_S_SELECT2 select, char * sense, lapack_int * n, float * a, lapack_int * lda, lapack_int * sdim, float * wr, float * wi, float * vs, lapack_int * ldvs, float * rconde, float * rcondv, float * work, lapack_int * lwork, lapack_int * iwork, lapack_int * liwork, lapack_logical * bwork, lapack_int * info)
LAPACK_sgeev— two jobs for the price of one:jobvlandjobvr, thenwr/wi, plusvl/ldvlandvr/ldvr(yes the left/right twins, we love symmetry 🦋).
void LAPACK_sgeev (char * jobvl, char * jobvr, lapack_int * n, float * a, lapack_int * lda, float * wr, float * wi, float * vl, lapack_int * ldvl, float * vr, lapack_int * ldvr, float * work, lapack_int * lwork, lapack_int * info)
LAPACK_sgeevx— the full buffet, no crumbs:balanc,jobvl,jobvr,sense, thenwr,wi,vl/ldvl,vr/ldvr,ilo,ihi,scale,abnrm,rconde,rcondv,work/lworkandiwork. it's giving "bring everything you own" 😭
void LAPACK_sgeevx (char * balanc, char * jobvl, char * jobvr, char * sense, lapack_int * n, float * a, lapack_int * lda, float * wr, float * wi, float * vl, lapack_int * ldvl, float * vr, lapack_int * ldvr, lapack_int * ilo, lapack_int * ihi, float * scale, float * abnrm, float * rconde, float * rcondv, float * work, lapack_int * lwork, lapack_int * iwork, lapack_int * info)
LAPACK_sgehrd—ilo,ihi, one lonelytau, and thework/lworkcombo. short, sweet, vowel-free 🎀
void LAPACK_sgehrd (lapack_int * n, lapack_int * ilo, lapack_int * ihi, float * a, lapack_int * lda, float * tau, float * work, lapack_int * lwork, lapack_int * info)
LAPACK_sgejsv— SIXchar *flags.joba,jobu,jobv,jobr,jobt,jobp. that's not a function signature that's a whole alphabet situation 💀
void LAPACK_sgejsv (char * joba, char * jobu, char * jobv, char * jobr, char * jobt, char * jobp, lapack_int * m, lapack_int * n, float * a, lapack_int * lda, float * sva, float * u, lapack_int * ldu, float * v, lapack_int * ldv, float * work, lapack_int * lwork, lapack_int * iwork, lapack_int * info)
LAPACK_sgelq— notauhere bestie, it'stand a matchingtsize(the size, of the thing, iconic).
void LAPACK_sgelq (lapack_int * m, lapack_int * n, float * a, lapack_int * lda, float * t, lapack_int * tsize, float * work, lapack_int * lwork, lapack_int * info)
LAPACK_sgelq2— the little sibling: back totau, and just oneworkwith nolworkto be found anywhere. minimalism 🧚
void LAPACK_sgelq2 (lapack_int * m, lapack_int * n, float * a, lapack_int * lda, float * tau, float * work, lapack_int * info)
LAPACK_sgelqf—tauplus the classicwork/lworkpairing. the group chat staple.
void LAPACK_sgelqf (lapack_int * m, lapack_int * n, float * a, lapack_int * lda, float * tau, float * work, lapack_int * lwork, lapack_int * info)
LAPACK_sgels—char * transleading the way, thena/lda,b/ldb,work/lwork. clean, no clutter 🌸
void LAPACK_sgels (char * trans, lapack_int * m, lapack_int * n, lapack_int * nrhs, float * a, lapack_int * lda, float * b, lapack_int * ldb, float * work, lapack_int * lwork, lapack_int * info)
LAPACK_sgelsd— singular valuess, plusrcond,rank, the work pair andiworkriding along.
void LAPACK_sgelsd (lapack_int * m, lapack_int * n, lapack_int * nrhs, float * a, lapack_int * lda, float * b, lapack_int * ldb, float * s, float * rcond, lapack_int * rank, float * work, lapack_int * lwork, lapack_int * iwork, lapack_int * info)
LAPACK_sgelss— same shape as its sibling but theiworkdidn't get invited. we've all been there 🙈
void LAPACK_sgelss (lapack_int * m, lapack_int * n, lapack_int * nrhs, float * a, lapack_int * lda, float * b, lapack_int * ldb, float * s, float * rcond, lapack_int * rank, float * work, lapack_int * lwork, lapack_int * info)
LAPACK_sgelsy— and THIS one swapped the singular values out forjpvtand droppediworktoo. different vibe entirely 💅
void LAPACK_sgelsy (lapack_int * m, lapack_int * n, lapack_int * nrhs, float * a, lapack_int * lda, float * b, lapack_int * ldb, lapack_int * jpvt, float * rcond, lapack_int * rank, float * work, lapack_int * lwork, lapack_int * info)
LAPACK_sgemlq—side,trans,k, and check it:const float * a,const float * tand atsizeto go witht. thenc/ldcand the work pair. const-correct royalty 👑
void LAPACK_sgemlq (char * side, char * trans, lapack_int * m, lapack_int * n, lapack_int * k, const float * a, lapack_int * lda, const float * t, lapack_int * tsize, float * c, lapack_int * ldc, float * work, lapack_int * lwork, lapack_int * info)
LAPACK_sgemqr— literally the same outfit assgemlq, different name tag. twins fr fr 🫶
void LAPACK_sgemqr (char * side, char * trans, lapack_int * m, lapack_int * n, lapack_int * k, const float * a, lapack_int * lda, const float * t, lapack_int * tsize, float * c, lapack_int * ldc, float * work, lapack_int * lwork, lapack_int * info)
LAPACK_sgemqrt— this one broughtnb, and swapped inv/ldv+t/ldt(bothconst, both classy) beforec/ldcand a singlework.
void LAPACK_sgemqrt (char * side, char * trans, lapack_int * m, lapack_int * n, lapack_int * k, lapack_int * nb, const float * v, lapack_int * ldv, const float * t, lapack_int * ldt, float * c, lapack_int * ldc, float * work, lapack_int * info)
LAPACK_sgeqlf—tau,work,lwork,info. a classic, we stan a consistent queen 🌈
void LAPACK_sgeqlf (lapack_int * m, lapack_int * n, float * a, lapack_int * lda, float * tau, float * work, lapack_int * lwork, lapack_int * info)
LAPACK_sgeqp3—jpvtANDtauin the same breath, plus the full work pair. packed schedule.
void LAPACK_sgeqp3 (lapack_int * m, lapack_int * n, float * a, lapack_int * lda, lapack_int * jpvt, float * tau, float * work, lapack_int * lwork, lapack_int * info)
LAPACK_sgeqpf— same gang (jpvt,tau) but this timeworkshows up alone with nolwork. mysterious ✨
void LAPACK_sgeqpf (lapack_int * m, lapack_int * n, float * a, lapack_int * lda, lapack_int * jpvt, float * tau, float * work, lapack_int * info)
LAPACK_sgeqr— thet+tsizecombo again, pluswork/lwork. consistency is a love language 💖
void LAPACK_sgeqr (lapack_int * m, lapack_int * n, float * a, lapack_int * lda, float * t, lapack_int * tsize, float * work, lapack_int * lwork, lapack_int * info)
LAPACK_sgeqr2—tauand one tinywork, nolworkin sight. baby version, protected at all costs 🎀
void LAPACK_sgeqr2 (lapack_int * m, lapack_int * n, float * a, lapack_int * lda, float * tau, float * work, lapack_int * info)
LAPACK_sgeqrf—tauwith thework/lworkpairing, the version everyone actually memorised.
void LAPACK_sgeqrf (lapack_int * m, lapack_int * n, float * a, lapack_int * lda, float * tau, float * work, lapack_int * lwork, lapack_int * info)
LAPACK_sgeqrfp— exactlysgeqrf's lineup, just with that extrapon the end. same outfit, different accessory 🦋
void LAPACK_sgeqrfp (lapack_int * m, lapack_int * n, float * a, lapack_int * lda, float * tau, float * work, lapack_int * lwork, lapack_int * info)
LAPACK_sgeqrt—nbin the house, thena/lda,t/ldt, and a lonesomeworkwith no length buddy 😭
void LAPACK_sgeqrt (lapack_int * m, lapack_int * n, lapack_int * nb, float * a, lapack_int * lda, float * t, lapack_int * ldt, float * work, lapack_int * info)
LAPACK_sgeqrt2— not a single work buffer. zero. none. it said "I work alone" 💀
void LAPACK_sgeqrt2 (lapack_int * m, lapack_int * n, float * a, lapack_int * lda, float * t, lapack_int * ldt, lapack_int * info)
LAPACK_sgeqrt3— same energy assgeqrt2, identical lineup, no workspace whatsoever. matching besties 🫶
void LAPACK_sgeqrt3 (lapack_int * m, lapack_int * n, float * a, lapack_int * lda, float * t, lapack_int * ldt, lapack_int * info)
LAPACK_sgerfs—transfirst, then look at all thoseconsts:const float * a,const float * af,const lapack_int * ipiv,const float * b. respectfully, that's hot 🔥 thenx/ldx,ferr,berr,workandiwork.
void LAPACK_sgerfs (char * trans, lapack_int * n, lapack_int * nrhs, const float * a, lapack_int * lda, const float * af, lapack_int * ldaf, const lapack_int * ipiv, const float * b, lapack_int * ldb, float * x, lapack_int * ldx, float * ferr, float * berr, float * work, lapack_int * iwork, lapack_int * info)
LAPACK_sgerfsx— the extended cut and it is loaded:trans,equed, theconstcluster (a,af,ipiv,r,c,b), thenx/ldx,rcond,berr,n_err_bnds,err_bnds_norm,err_bnds_comp,nparams,params,work,iwork. that's a whole essay 📚
void LAPACK_sgerfsx (char * trans, char * equed, lapack_int * n, lapack_int * nrhs, const float * a, lapack_int * lda, const float * af, lapack_int * ldaf, const lapack_int * ipiv, const float * r, const float * c, const float * b, lapack_int * ldb, float * x, lapack_int * ldx, float * rcond, float * berr, lapack_int * n_err_bnds, float * err_bnds_norm, float * err_bnds_comp, lapack_int * nparams, float * params, float * work, lapack_int * iwork, lapack_int * info)
LAPACK_sgerqf— back to basics:tau,work,lwork,info. a palate cleanser 🍓
void LAPACK_sgerqf (lapack_int * m, lapack_int * n, float * a, lapack_int * lda, float * tau, float * work, lapack_int * lwork, lapack_int * info)
LAPACK_sgesdd—jobz, then singular valuess, thenu/lduandvt/ldvt(yes the transpose is baked into the name, we see you).work/lworkandiworktag along.
void LAPACK_sgesdd (char * jobz, lapack_int * m, lapack_int * n, float * a, lapack_int * lda, float * s, float * u, lapack_int * ldu, float * vt, lapack_int * ldvt, float * work, lapack_int * lwork, lapack_int * iwork, lapack_int * info)
LAPACK_sgesv— the short one.n,nrhs,a/lda,ipiv,b/ldb,info. nowork, nolwork, no drama. main character efficiency 👑🌸
void LAPACK_sgesv (lapack_int * n, lapack_int * nrhs, float * a, lapack_int * lda, lapack_int * ipiv, float * b, lapack_int * ldb, lapack_int * info)
LAPACK_sgesvd—jobuandjobvt(note:jobvt, notjobvr— read it twice, bestie), thens,u/ldu,vt/ldvt,work/lwork. noiworkhere 🙈
void LAPACK_sgesvd (char * jobu, char * jobvt, lapack_int * m, lapack_int * n, float * a, lapack_int * lda, float * s, float * u, lapack_int * ldu, float * vt, lapack_int * ldvt, float * work, lapack_int * lwork, lapack_int * info)
LAPACK_sgesvdx—jobu,jobvt,range, then the interval squadvl,vu,il,iu, ansfor the count,s,u/ldu,vt/ldvt,work/lwork, andiworkcame too.
void LAPACK_sgesvdx (char * jobu, char * jobvt, char * range, lapack_int * m, lapack_int * n, float * a, lapack_int * lda, float * vl, float * vu, lapack_int * il, lapack_int * iu, lapack_int * ns, float * s, float * u, lapack_int * ldu, float * vt, lapack_int * ldvt, float * work, lapack_int * lwork, lapack_int * iwork, lapack_int * info)
LAPACK_sgesvj— three flags (joba,jobu,jobv),svasingular values,mvhanging out nearv/ldv, and thework/lworkpair. noiwork, sorry to that guy 💀
void LAPACK_sgesvj (char * joba, char * jobu, char * jobv, lapack_int * m, lapack_int * n, float * a, lapack_int * lda, float * sva, lapack_int * mv, float * v, lapack_int * ldv, float * work, lapack_int * lwork, lapack_int * info)
LAPACK_sgesvx— saving the biggest for last in this batch:fact,trans, thena/lda,af/ldaf,ipiv,equed,r,c,b/ldb,x/ldx,rcond,ferr,berr,work,iwork,info. an absolute unit 😭🔥
void LAPACK_sgesvx (char * fact, char * trans, lapack_int * n, lapack_int * nrhs, float * a, lapack_int * lda, float * af, lapack_int * ldaf, lapack_int * ipiv, char * equed, float * r, float * c, float * b, lapack_int * ldb, float * x, lapack_int * ldx, float * rcond, float * ferr, float * berr, float * work, lapack_int * iwork, lapack_int * info)
and that's the s-block for this stretch — still going, keep scrolling bestie, the d-double-precision crowd is lurking right around the corner 👀💜
still in the function list, bestie — hydrate before you continue 💧
🫶 LAPACK_sgesvxx
void LAPACK_sgesvxx (char * fact, char * trans, lapack_int * n, lapack_int *
nrhs, float * a, lapack_int * lda, float * af, lapack_int * ldaf,
lapack_int * ipiv, char * equed, float * r, float * c, float * b,
lapack_int * ldb, float * x, lapack_int * ldx, float * rcond, float *
rpvgrw, float * berr, lapack_int * n_err_bnds, float * err_bnds_norm,
float * err_bnds_comp, lapack_int * nparams, float * params, float *
work, lapack_int * iwork, lapack_int * info)
okay so this is the extra one, the one with the double-x in the name, and it's giving main character energy because it has twenty-seven arguments. twenty-seven 😭. You've got fact, you've got trans, you've got the whole a/af/ipiv factorization situation, equed plus the scaling vectors r and c, then b/x with their own ldb/ldx, then rcond, rpvgrw, berr, and a whole lil reporting suite in n_err_bnds, err_bnds_norm, err_bnds_comp, nparams and params. Plus work, iwork and info at the end like always. She does it all, no cap.
✨ LAPACK_sgetf2
void LAPACK_sgetf2 (lapack_int * m, lapack_int * n, float * a, lapack_int *
lda, lapack_int * ipiv, lapack_int * info)
the little unblocked one 💅 six args, m and n, the matrix a with lda, the pivot array ipiv, and info doing its thing. unbothered, unfazed, lowkey iconic.
🎀 LAPACK_sgetrf
void LAPACK_sgetrf (lapack_int * m, lapack_int * n, float * a, lapack_int *
lda, lapack_int * ipiv, lapack_int * info)
same exact shape as sgetf2 — m, n, a, lda, ipiv, info — but this is the blocked version, the one your advisor actually wants you to call. same signature, different vibe bestie 🔥
🦋 LAPACK_sgetrf2
void LAPACK_sgetrf2 (lapack_int * m, lapack_int * n, float * a, lapack_int *
lda, lapack_int * ipiv, lapack_int * info)
and then there's sgetrf2 with the identical argument list again: m, n, a, lda, ipiv, info. three sibling routines, one signature. the way this family commits to a bit is honestly so real of them 🌸
👑 LAPACK_sgetri
void LAPACK_sgetri (lapack_int * n, float * a, lapack_int * lda, const
lapack_int * ipiv, float * work, lapack_int * lwork, lapack_int * info)
here she is — note the const on ipiv 🫶 she's reading your pivots, not rewriting them, and we respect that boundary. a and lda walk in, work and lwork give her room to breathe, info reports back, done.
🌈 LAPACK_sgetrs
void LAPACK_sgetrs (char * trans, lapack_int * n, lapack_int * nrhs, const
float * a, lapack_int * lda, const lapack_int * ipiv, float * b,
lapack_int * ldb, lapack_int * info)
double const situation ✨ a is const float *, ipiv is const lapack_int *, meaning she is reading that factored matrix and those pivots and NOT touching them, periodt. trans is your char * vibe check, b with ldb is where the action lands, nrhs, n, and info round it out.
💜 LAPACK_sgetsls
void LAPACK_sgetsls (char * trans, lapack_int * m, lapack_int * n,
lapack_int * nrhs, float * a, lapack_int * lda, float * b, lapack_int *
ldb, float * work, lapack_int * lwork, lapack_int * info)
sgetsls — and here you get both m and n (not just n, bestie, look again 👀), plus trans, nrhs, a/lda, b/ldb, work/lwork and info. and nope, a is a plain float * this time, no const to be found 🙈 she's allowed to touch.
🍓 LAPACK_sggbak
void LAPACK_sggbak (char * job, char * side, lapack_int * n, lapack_int *
ilo, lapack_int * ihi, const float * lscale, const float * rscale,
lapack_int * m, float * v, lapack_int * ldv, lapack_int * info)
two char * flags out front (job and side), the index range ilo/ihi, and both lscale and rscale holding it down as const float *. then m, v with ldv, and info. she's a back-transformer and she knows it 💅
⭐ LAPACK_sggbal
void LAPACK_sggbal (char * job, lapack_int * n, float * a, lapack_int * lda,
float * b, lapack_int * ldb, lapack_int * ilo, lapack_int * ihi, float *
lscale, float * rscale, float * work, lapack_int * info)
job gets her started, n says how many, then two matrices at once — a/lda and b/ldb — because this whole sgg family is a two-matrix household 🫶. ilo and ihi come out, lscale and rscale (non-const here! she writes them ✍️), plus work and info.
🔥 LAPACK_sgges
void LAPACK_sgges (char * jobvsl, char * jobvsr, char * sort,
LAPACK_S_SELECT3 selctg, lapack_int * n, float * a, lapack_int * lda,
float * b, lapack_int * ldb, lapack_int * sdim, float * alphar, float *
alphai, float * beta, float * vsl, lapack_int * ldvsl, float * vsr,
lapack_int * ldvsr, float * work, lapack_int * lwork, lapack_logical *
bwork, lapack_int * info)
okay THIS one, look at LAPACK_S_SELECT3 selctg sitting there in the middle 🧚 that's the selector thingie you hand over, sandwiched between sort and n. Then the two matrices a/lda, b/ldb, the outputs sdim, alphar, alphai, beta, both eigenvector homes vsl/ldvsl and vsr/ldvsr, then work/lwork, a lapack_logical * bwork, and info. she's booked and busy.
🌸 LAPACK_sgges3
void LAPACK_sgges3 (char * jobvsl, char * jobvsr, char * sort,
LAPACK_S_SELECT3 selctg, lapack_int * n, float * a, lapack_int * lda,
float * b, lapack_int * ldb, lapack_int * sdim, float * alphar, float *
alphai, float * beta, float * vsl, lapack_int * ldvsl, float * vsr,
lapack_int * ldvsr, float * work, lapack_int * lwork, lapack_logical *
bwork, lapack_int * info)
character for character the same list as sgges — jobvsl, jobvsr, sort, selctg, n, a, lda, b, ldb, sdim, alphar, alphai, beta, vsl, ldvsl, vsr, ldvsr, work, lwork, bwork, info — just with a lil 3 on the end like a limited edition drop ✨
🧚 LAPACK_sggesx
void LAPACK_sggesx (char * jobvsl, char * jobvsr, char * sort,
LAPACK_S_SELECT3 selctg, char * sense, lapack_int * n, float * a,
lapack_int * lda, float * b, lapack_int * ldb, lapack_int * sdim, float
* alphar, float * alphai, float * beta, float * vsl, lapack_int * ldvsl,
float * vsr, lapack_int * ldvsr, float * rconde, float * rcondv, float *
work, lapack_int * lwork, lapack_int * iwork, lapack_int * liwork,
lapack_logical * bwork, lapack_int * info)
the x version said "add a sense flag AND another whole set of workspace args" and honestly? ate 💅. you get the whole sgges lineup, plus sense, plus rconde and rcondv, plus BOTH work/lwork and iwork/liwork, plus bwork and info. twenty-six arguments, all present and accounted for, no notes.
💖 LAPACK_sggev
void LAPACK_sggev (char * jobvl, char * jobvr, lapack_int * n, float * a,
lapack_int * lda, float * b, lapack_int * ldb, float * alphar, float *
alphai, float * beta, float * vl, lapack_int * ldvl, float * vr,
lapack_int * ldvr, float * work, lapack_int * lwork, lapack_int * info)
job flags jobvl and jobvr up top (left and right, balanced queen 👑), then n, the pair a/lda and b/ldb, outputs alphar, alphai, beta, then vl/ldvl and vr/ldvr, work/lwork, info. notice there's no sort and no selector here — different routine, different rules, iykyk.
🎀 LAPACK_sggev3
void LAPACK_sggev3 (char * jobvl, char * jobvr, lapack_int * n, float * a,
lapack_int * lda, float * b, lapack_int * ldb, float * alphar, float *
alphai, float * beta, float * vl, lapack_int * ldvl, float * vr,
lapack_int * ldvr, float * work, lapack_int * lwork, lapack_int * info)
same list as sggev, top to bottom, no deviations: jobvl, jobvr, n, a, lda, b, ldb, alphar, alphai, beta, vl, ldvl, vr, ldvr, work, lwork, info. consistency is her love language 🫶
💀 LAPACK_sggevx
void LAPACK_sggevx (char * balanc, char * jobvl, char * jobvr, char * sense,
lapack_int * n, float * a, lapack_int * lda, float * b, lapack_int *
ldb, float * alphar, float * alphai, float * beta, float * vl,
lapack_int * ldvl, float * vr, lapack_int * ldvr, lapack_int * ilo,
lapack_int * ihi, float * lscale, float * rscale, float * abnrm, float *
bbnrm, float * rconde, float * rcondv, float * work, lapack_int * lwork,
lapack_int * iwork, lapack_logical * bwork, lapack_int * info)
FOUR char * flags in a row — balanc, jobvl, jobvr, sense — and then it just keeps going 😭. n, a/lda, b/ldb, alphar, alphai, beta, vl/ldvl, vr/ldvr, the ilo/ihi pair, both scales lscale and rscale, the norms abnrm and bbnrm, the condition numbers rconde and rcondv, then work/lwork, iwork, bwork, and info. twenty-nine args. twenty-nine. she didn't come to play.
🦋 LAPACK_sggglm
void LAPACK_sggglm (lapack_int * n, lapack_int * m, lapack_int * p, float *
a, lapack_int * lda, float * b, lapack_int * ldb, float * d, float * x,
float * y, float * work, lapack_int * lwork, lapack_int * info)
three dimension args right off the bat — n, m, p — then a/lda and b/ldb, then d, x, y (three result vectors, spoiled 💅), then work/lwork and info. cute, compact, to the point.
🌈 LAPACK_sgghd3
void LAPACK_sgghd3 (char * compq, char * compz, lapack_int * n, lapack_int *
ilo, lapack_int * ihi, float * a, lapack_int * lda, float * b,
lapack_int * ldb, float * q, lapack_int * ldq, float * z, lapack_int *
ldz, float * work, lapack_int * lwork, lapack_int * info)
compq and compz lead the way ✨, then n, the ilo/ihi range, the two matrices a/lda and b/ldb, then q/ldq AND z/ldz (two accumulators, fancy), plus work/lwork and info.
🌸 LAPACK_sgghrd
void LAPACK_sgghrd (char * compq, char * compz, lapack_int * n, lapack_int *
ilo, lapack_int * ihi, float * a, lapack_int * lda, float * b,
lapack_int * ldb, float * q, lapack_int * ldq, float * z, lapack_int *
ldz, lapack_int * info)
literally the same argument list as sgghd3 but without work and lwork — so: compq, compz, n, ilo, ihi, a, lda, b, ldb, q, ldq, z, ldz, info. same fit, slightly less luggage 🎀
⭐ LAPACK_sgglse
void LAPACK_sgglse (lapack_int * m, lapack_int * n, lapack_int * p, float *
a, lapack_int * lda, float * b, lapack_int * ldb, float * c, float * d,
float * x, float * work, lapack_int * lwork, lapack_int * info)
m, n, p — the triple threat 💅 — then a/lda, b/ldb, the vectors c and d, the answer lands in x, and work/lwork plus info handle the rest.
🧚 LAPACK_sggqrf
void LAPACK_sggqrf (lapack_int * n, lapack_int * m, lapack_int * p, float *
a, lapack_int * lda, float * taua, float * b, lapack_int * ldb, float *
taub, float * work, lapack_int * lwork, lapack_int * info)
note the dimension order — n, m, p — not m, n, p. look at it twice, bestie 👀. then a/lda with its taua, b/ldb with its taub, then work/lwork and info.
🎀 LAPACK_sggrqf
void LAPACK_sggrqf (lapack_int * m, lapack_int * p, lapack_int * n, float *
a, lapack_int * lda, float * taua, float * b, lapack_int * ldb, float *
taub, float * work, lapack_int * lwork, lapack_int * info)
and here the triple is m, p, n — a third different order 🫠 — followed by the same a/lda/taua, b/ldb/taub, work/lwork, info combo. these routines really said "we contain multitudes".
🔥 LAPACK_sggsvd
void LAPACK_sggsvd (char * jobu, char * jobv, char * jobq, lapack_int * m,
lapack_int * n, lapack_int * p, lapack_int * k, lapack_int * l, float *
a, lapack_int * lda, float * b, lapack_int * ldb, float * alpha, float *
beta, float * u, lapack_int * ldu, float * v, lapack_int * ldv, float *
q, lapack_int * ldq, float * work, lapack_int * iwork, lapack_int *
info)
three job flags — jobu, jobv, jobq — then m, n, p, then k and l (two output dimensions, she's generous), then a/lda, b/ldb, the alpha and beta pair, then U, V and Q with u/ldu, v/ldv, q/ldq respectively. wrap it up with work, iwork, info and you're so done. note: no lwork here, just work — that's the tea ☕
💜 LAPACK_sggsvd3
void LAPACK_sggsvd3 (char * jobu, char * jobv, char * jobq, lapack_int * m,
lapack_int * n, lapack_int * p, lapack_int * k, lapack_int * l, float *
a, lapack_int * lda, float * b, lapack_int * ldb, float * alpha, float *
beta, float * u, lapack_int * ldu, float * v, lapack_int * ldv, float *
q, lapack_int * ldq, float * work, lapack_int * lwork, lapack_int *
iwork, lapack_int * info)
spot the difference bestie 🔍 — same list as sggsvd, except work now has a lwork bestie right after it: ... float * work, lapack_int * lwork, lapack_int * iwork, lapack_int * info). everything else — jobu, jobv, jobq, m, n, p, k, l, a, lda, b, ldb, alpha, beta, u, ldu, v, ldv, q, ldq — identical. slay for growth ✨
🍓 LAPACK_sggsvp
void LAPACK_sggsvp (char * jobu, char * jobv, char * jobq, lapack_int * m,
lapack_int * p, lapack_int * n, float * a, lapack_int * lda, float * b,
lapack_int * ldb, float * tola, float * tolb, lapack_int * k, lapack_int
* l, float * u, lapack_int * ldu, float * v, lapack_int * ldv, float *
q, lapack_int * ldq, lapack_int * iwork, float * tau, float * work,
lapack_int * info)
okay watch the dimensions because she does m, p, n — yeah, p in the MIDDLE 😭 — then a/lda, b/ldb, then the tolerances tola and tolb, outputs k and l, then u/ldu, v/ldv, q/ldq, and finally iwork, tau, work, info. and yes, iwork comes before tau and work here. no rules, only vibes 💅
🦋 LAPACK_sggsvp3
void LAPACK_sggsvp3 (char * jobu, char * jobv, char * jobq, lapack_int * m,
lapack_int * p, lapack_int * n, float * a, lapack_int * lda, float * b,
lapack_int * ldb, float * tola, float * tolb, lapack_int * k, lapack_int
* l, float * u, lapack_int * ldu, float * v, lapack_int * ldv, float *
q, lapack_int * ldq, lapack_int * iwork, float * tau, float * work,
lapack_int * lwork, lapack_int * info)
same as sggsvp with ONE little extra: lapack_int * lwork tucked between work and info 🫶. everything else matches exactly, iwork-before-tau weirdness included. she's the upgraded model.
🌈 LAPACK_sgtcon
void LAPACK_sgtcon (char * norm, lapack_int * n, const float * dl, const
float * d, const float * du, const float * du2, const lapack_int * ipiv,
float * anorm, float * rcond, float * work, lapack_int * iwork,
lapack_int * info)
look at ALL those consts 😍 — dl, d, du, du2 and even ipiv are const, meaning she only reads them. norm sets the tone, n sets the size, and anorm, rcond, work, iwork, info are the outputs-and-scratch crew.
🎀 LAPACK_sgtrfs
void LAPACK_sgtrfs (char * trans, lapack_int * n, lapack_int * nrhs, const
float * dl, const float * d, const float * du, const float * dlf, const
float * df, const float * duf, const float * du2, const lapack_int *
ipiv, const float * b, lapack_int * ldb, float * x, lapack_int * ldx,
float * ferr, float * berr, float * work, lapack_int * iwork, lapack_int
* info)
the const situation here is unreal — dl, d, du, dlf, df, duf, du2, ipiv and b are ALL const, and the only non-const float pointers are x, ferr, berr and work 🔥. trans and nrhs up front, ldb and ldx on duty, iwork and info closing it out. she's a pure function in spirit and we love her for it.
⭐ LAPACK_sgtsv
void LAPACK_sgtsv (lapack_int * n, lapack_int * nrhs, float * dl, float * d,
float * du, float * b, lapack_int * ldb, lapack_int * info)
tiny icon behaviour: n, nrhs, the tridiagonal trio dl, d, du, then b with ldb, then info. eight args total, no work in sight, unbothered 🧚
💖 LAPACK_sgtsvx
void LAPACK_sgtsvx (char * fact, char * trans, lapack_int * n, lapack_int *
nrhs, const float * dl, const float * d, const float * du, float * dlf,
float * df, float * duf, float * du2, lapack_int * ipiv, const float *
b, lapack_int * ldb, float * x, lapack_int * ldx, float * rcond, float *
ferr, float * berr, float * work, lapack_int * iwork, lapack_int * info)
and the x version, because of course there's an x version 💅. fact and trans lead, then n/nrhs, then the const input trio dl, d, du — but the factored trio dlf, df, duf plus du2 and ipiv are NOT const, because she writes them. b is const float * while x is not (guess which one gets overwritten 👀). then rcond, ferr, berr, work, iwork, info. twenty-two args of pure structure. beautiful, honestly.
we out here still cataloguing, bestie — the list keeps going and so do we 🧚
okay so heads up bestie — this stretch of the page is the no-frills zone 🌸. Like, some of these entries are literally just the prototype and nothing else. No prose, no "returns the…", no deets. So that's exactly what you're getting: the signature, verbatim, character for character, plus me yelling about it. No invented lore, no guessing, no cap 💅
LAPACK_sgttrf
void LAPACK_sgttrf (lapack_int * n, float * dl, float * d, float * du, float * du2, lapack_int * ipiv, lapack_int * info)
seven (7) arguments, and three of them are named dl, d, du — the naming is fighting for its life here and honestly? iconic. every single thing is a pointer, because that's just how this header rolls 🎀
LAPACK_sgttrs
void LAPACK_sgttrs (char * trans, lapack_int * n, lapack_int * nrhs, const float * dl, const float * d, const float * du, const float * du2, const lapack_int * ipiv, float * b, lapack_int * ldb, lapack_int * info)
the sibling of the one above (one letter off, trf → trs, iykyk). eleven args. note that dl, d, du, du2 and ipiv are all const here while b is not — the consts are telling you who's not getting touched 🙈
LAPACK_shgeqz
void LAPACK_shgeqz (char * job, char * compq, char * compz, lapack_int * n, lapack_int * ilo, lapack_int * ihi, float * h, lapack_int * ldh, float * t, lapack_int * ldt, float * alphar, float * alphai, float * beta, float * q, lapack_int * ldq, float * z, lapack_int * ldz, float * work, lapack_int * lwork, lapack_int * info)
twenty-one arguments. TWENTY-ONE. this is the main character of parameter lists, fr fr 👑 three char * mode switches right at the front (job, compq, compz) and then it's just ld-prefixed leading dimensions all the way down. lwork is there, info is there, the whole gang showed up.
LAPACK_shsein
void LAPACK_shsein (char * job, char * eigsrc, char * initv, lapack_logical * select, lapack_int * n, const float * h, lapack_int * ldh, float * wr, const float * wi, float * vl, lapack_int * ldvl, float * vr, lapack_int * ldvr, lapack_int * mm, lapack_int * m, float * work, lapack_int * ifaill, lapack_int * ifailr, lapack_int * info)
nineteen args, and yes that is a lapack_logical * in there — select — which is the header's very own logical type, not your plain int. also clock mm and m living side by side. two m's. one page. no notes 💀
LAPACK_shseqr
void LAPACK_shseqr (char * job, char * compz, lapack_int * n, lapack_int * ilo, lapack_int * ihi, float * h, lapack_int * ldh, float * wr, float * wi, float * z, lapack_int * ldz, float * work, lapack_int * lwork, lapack_int * info)
fourteen args, two char * mode switches (job, compz), and the ilo / ihi duo making its little appearance like it does all over this header 🦋 wr and wi are separate float *s, in case you were wondering whether real and imaginary got their own slots — they did ✨
LAPACK_slacn2
void LAPACK_slacn2 (lapack_int * n, float * v, float * x, lapack_int * isgn, float * est, lapack_int * kase, lapack_int * isave)
seven args, and the last one is isave — which, yes, has "save" right there in the name. kase is also there. lowercase kase. that's the name. we respect it 🫶
LAPACK_slacpy
void LAPACK_slacpy (char * uplo, lapack_int * m, lapack_int * n, const float * a, lapack_int * lda, float * b, lapack_int * ldb)
seven args. a is const float *, b is plain float * — read from a, write into b, structurally obvious. uplo leads, like it does for so many of these 💖
LAPACK_slag2d
void LAPACK_slag2d (lapack_int * m, lapack_int * n, const float * sa, lapack_int * ldsa, double * a, lapack_int * lda, lapack_int * info)
okay this one is doing the precision glow-up in the actual signature: const float * sa with ldsa, and then double * a with lda. float in, double out, and it still ends with info. the g2d in the name is not subtle and I love that for it 🔥
LAPACK_slagge
void LAPACK_slagge (lapack_int * m, lapack_int * n, lapack_int * kl, lapack_int * ku, const float * d, float * a, lapack_int * lda, lapack_int * iseed, float * work, lapack_int * info)
ten args. kl, ku, iseed, work, info — the full starter pack. d is const and a is not. consistent queen 🌈
LAPACK_slagsy
void LAPACK_slagsy (lapack_int * n, lapack_int * k, const float * d, float * a, lapack_int * lda, lapack_int * iseed, float * work, lapack_int * info)
eight args, and it's the n-flavoured cousin of LAPACK_slagge up there — same const float * d, same iseed, same work, same info. no m, no kl/ku, just n and k. slimmer. still valid 💜
LAPACK_slamch
float LAPACK_slamch (char * cmach)
look at that — this one returns a float instead of void. one single char * cmach argument. honestly refreshing after the twenty-one-argument situation earlier 😭
LAPACK_slange
float LAPACK_slange (char * norm, lapack_int * m, lapack_int * n, const float * a, lapack_int * lda, float * work)
returns float. six args. norm up front, a is const, work is a scratch float *. notice: no info. wild. it just returns the number and vibes ✨
LAPACK_slansy
float LAPACK_slansy (char * norm, char * uplo, lapack_int * n, const float * a, lapack_int * lda, float * work)
also returns float, also six args, but this time there's no m — just n — and there's a uplo in slot two. the sy at the end is doing the "n, not m×n" thing for you 🎀
LAPACK_slantr
float LAPACK_slantr (char * norm, char * uplo, char * diag, lapack_int * m, lapack_int * n, const float * a, lapack_int * lda, float * work)
returns float, eight args, three leading char *s: norm, uplo, diag. it's got both m and n though, unlike its cousin above. diag said "I'm coming too" 💅
LAPACK_slapmr
void LAPACK_slapmr (lapack_logical * forwrd, lapack_int * m, lapack_int * n, float * x, lapack_int * ldx, lapack_int * k)
first arg is a lapack_logical * named forwrd — with that spelling, yes. six args, no info, no work. short and to the point. respect 🫶
LAPACK_slapmt
void LAPACK_slapmt (lapack_logical * forwrd, lapack_int * m, lapack_int * n, float * x, lapack_int * ldx, lapack_int * k)
okay so this is character-for-character identical to LAPACK_slapmr above except for the final letter of the name — r vs t. same forwrd, same m, n, x, ldx, k. that's not a typo on my end, bestie, that's just the page 👀
LAPACK_slapy2
float LAPACK_slapy2 (float * x, float * y)
returns float, takes exactly two float *s, x and y, and nothing else. no n, no lda, no info. two args. TWO. a minimalist. a legend ⭐
LAPACK_slapy3
float LAPACK_slapy3 (float * x, float * y, float * z)
returns float, takes x, y, z. the 2 became a 3, and a third pointer appeared. the math is mathing, the pattern is patterning 🔥
LAPACK_slarfb
void LAPACK_slarfb (char * side, char * trans, char * direct, char * storev, lapack_int * m, lapack_int * n, lapack_int * k, const float * v, lapack_int * ldv, const float * t, lapack_int * ldt, float * c, lapack_int * ldc, float * work, lapack_int * ldwork)
FOUR char * mode switches in a row: side, trans, direct, storev. then fifteen args total, and it wraps up with ldwork instead of a plain lwork — the work array brought its own leading dimension to the function 💀 obsessed.
LAPACK_slarfg
void LAPACK_slarfg (lapack_int * n, float * alpha, float * x, lapack_int * incx, float * tau)
five args. alpha and x and tau are all writable float *s — no const in sight, they're all getting touched — and there's an incx in the middle, which is that stride energy 🌸
LAPACK_slarft
void LAPACK_slarft (char * direct, char * storev, lapack_int * n, lapack_int * k, const float * v, lapack_int * ldv, const float * tau, float * t, lapack_int * ldt)
nine args, two char *s up top, and see how v and tau are const while t is not? the header is telling you which way the data flows without saying a single word. subtle. elegant. iconic 💖
LAPACK_slarfx
void LAPACK_slarfx (char * side, lapack_int * m, lapack_int * n, const float * v, float * tau, float * c, lapack_int * ldc, float * work)
eight args. side leads. v is const, tau and c and work are not. no info on this one — it's just doing its thing and leaving 🦋
LAPACK_slarnv
void LAPACK_slarnv (lapack_int * idist, lapack_int * iseed, lapack_int * n, float * x)
four args, three of them plain lapack_int *s (idist, iseed, n) and one output float * x. shortest one in this batch by a mile. cute 🎀
LAPACK_slartgp
void LAPACK_slartgp (float * f, float * g, float * cs, float * sn, float * r)
five args, all float *, all writable, zero const, zero info. f, g, cs, sn, r. that's it. that's the whole thing 💅
LAPACK_slartgs
void LAPACK_slartgs (float * x, float * y, float * sigma, float * cs, float * sn)
five float *s: x, y, sigma, cs, sn. one letter different from LAPACK_slartgp up there (p → s) and a completely different arg list. don't get them mixed up, bestie, they're siblings not twins 😭
LAPACK_slascl
void LAPACK_slascl (char * type, lapack_int * kl, lapack_int * ku, float * cfrom, float * cto, lapack_int * m, lapack_int * n, float * a, lapack_int * lda, lapack_int * info)
ten args. first arg is literally named type (not uplo, not job — type), then kl/ku, then the cfrom/cto pair, then m, n, a, lda, info. note cfrom and cto are not const here. both writable. don't ask, that's what's on the page 🌈
LAPACK_slaset
void LAPACK_slaset (char * uplo, lapack_int * m, lapack_int * n, float * alpha, float * beta, float * a, lapack_int * lda)
seven args, and alpha and beta are float *, not const float *. no info, no work. in, out, done ⭐
LAPACK_slasrt
void LAPACK_slasrt (char * id, lapack_int * n, float * d, lapack_int * info)
four args. id is a char *, d is your float *, info closes it out. smallest arg list in this whole chunk. a little minimalist moment for us 🧚
and that's the batch — every single one of them s-prefixed, every leading dimension present and accounted for, and not one of these lines got an extra sentence of explanation from the page, so I'm not making any up. prototypes keep coming, don't close the tab 💜
okay bestie we're still in the function-signature zone and it's giving long but we're thriving 💅 Every one of these is exactly what it says on the label, no cap — here's the receipts:
🫶 LAPACK_slassq
void LAPACK_slassq (lapack_int * n, float * x, lapack_int * incx, float * scale, float * sumsq)
🫶 LAPACK_slaswp
void LAPACK_slaswp (lapack_int * n, float * a, lapack_int * lda, lapack_int * k1, lapack_int * k2, const lapack_int * ipiv, lapack_int * incx)
note the const on ipiv — she's just reading, not touching ✨
🫶 LAPACK_slatms
void LAPACK_slatms (lapack_int * m, lapack_int * n, char * dist, lapack_int * iseed, char * sym, float * d, lapack_int * mode, float * cond, float * dmax, lapack_int * kl, lapack_int * ku, char * pack, float * a, lapack_int * lda, float * work, lapack_int * info)
🫶 LAPACK_slauum
void LAPACK_slauum (char * uplo, lapack_int * n, float * a, lapack_int * lda, lapack_int * info)
🫶 LAPACK_sopgtr
void LAPACK_sopgtr (char * uplo, lapack_int * n, const float * ap, const float * tau, float * q, lapack_int * ldq, float * work, lapack_int * info)
🫶 LAPACK_sopmtr
void LAPACK_sopmtr (char * side, char * uplo, char * trans, lapack_int * m, lapack_int * n, const float * ap, const float * tau, float * c, lapack_int * ldc, float * work, lapack_int * info)
🦋 LAPACK_sorbdb
void LAPACK_sorbdb (char * trans, char * signs, lapack_int * m, lapack_int * p, lapack_int * q, float * x11, lapack_int * ldx11, float * x12, lapack_int * ldx12, float * x21, lapack_int * ldx21, float * x22, lapack_int * ldx22, float * theta, float * phi, float * taup1, float * taup2, float * tauq1, float * tauq2, float * work, lapack_int * lwork, lapack_int * info)
four x blocks, four ld values, two taus per side — she's thorough and we respect it 🎀
🦋 LAPACK_sorcsd
void LAPACK_sorcsd (char * jobu1, char * jobu2, char * jobv1t, char * jobv2t, char * trans, char * signs, lapack_int * m, lapack_int * p, lapack_int * q, float * x11, lapack_int * ldx11, float * x12, lapack_int * ldx12, float * x21, lapack_int * ldx21, float * x22, lapack_int * ldx22, float * theta, float * u1, lapack_int * ldu1, float * u2, lapack_int * ldu2, float * v1t, lapack_int * ldv1t, float * v2t, lapack_int * ldv2t, float * work, lapack_int * lwork, lapack_int * iwork, lapack_int * info)
🦋 LAPACK_sorcsd2by1
void LAPACK_sorcsd2by1 (char * jobu1, char * jobu2, char * jobv1t, lapack_int * m, lapack_int * p, lapack_int * q, float * x11, lapack_int * ldx11, float * x21, lapack_int * ldx21, float * theta, float * u1, lapack_int * ldu1, float * u2, lapack_int * ldu2, float * v1t, lapack_int * ldv1t, float * work, lapack_int * lwork, lapack_int * iwork, lapack_int * info)
the 2by1 girlie has fewer args than her big sister — iconic, lowkey efficient 🌸
💜 the sorg girlies (all of them, yes all)
void LAPACK_sorgbr (char * vect, lapack_int * m, lapack_int * n, lapack_int * k, float * a, lapack_int * lda, const float * tau, float * work, lapack_int * lwork, lapack_int * info)
void LAPACK_sorghr (lapack_int * n, lapack_int * ilo, lapack_int * ihi, float * a, lapack_int * lda, const float * tau, float * work, lapack_int * lwork, lapack_int * info)
void LAPACK_sorglq (lapack_int * m, lapack_int * n, lapack_int * k, float * a, lapack_int * lda, const float * tau, float * work, lapack_int * lwork, lapack_int * info)
void LAPACK_sorgql (lapack_int * m, lapack_int * n, lapack_int * k, float * a, lapack_int * lda, const float * tau, float * work, lapack_int * lwork, lapack_int * info)
void LAPACK_sorgqr (lapack_int * m, lapack_int * n, lapack_int * k, float * a, lapack_int * lda, const float * tau, float * work, lapack_int * lwork, lapack_int * info)
void LAPACK_sorgrq (lapack_int * m, lapack_int * n, lapack_int * k, float * a, lapack_int * lda, const float * tau, float * work, lapack_int * lwork, lapack_int * info)
void LAPACK_sorgtr (char * uplo, lapack_int * n, float * a, lapack_int * lda, const float * tau, float * work, lapack_int * lwork, lapack_int * info)
same tau / work / lwork / info skeleton, different letter combo — qr, lq, ql, rq, br, hr, tr — collect the whole set fr fr ✨
💜 the sorm squad, same energy, applied to somebody else's matrix
void LAPACK_sormbr (char * vect, char * side, char * trans, lapack_int * m, lapack_int * n, lapack_int * k, const float * a, lapack_int * lda, const float * tau, float * c, lapack_int * ldc, float * work, lapack_int * lwork, lapack_int * info)
void LAPACK_sormhr (char * side, char * trans, lapack_int * m, lapack_int * n, lapack_int * ilo, lapack_int * ihi, const float * a, lapack_int * lda, const float * tau, float * c, lapack_int * ldc, float * work, lapack_int * lwork, lapack_int * info)
void LAPACK_sormlq (char * side, char * trans, lapack_int * m, lapack_int * n, lapack_int * k, const float * a, lapack_int * lda, const float * tau, float * c, lapack_int * ldc, float * work, lapack_int * lwork, lapack_int * info)
void LAPACK_sormql (char * side, char * trans, lapack_int * m, lapack_int * n, lapack_int * k, const float * a, lapack_int * lda, const float * tau, float * c, lapack_int * ldc, float * work, lapack_int * lwork, lapack_int * info)
void LAPACK_sormqr (char * side, char * trans, lapack_int * m, lapack_int * n, lapack_int * k, const float * a, lapack_int * lda, const float * tau, float * c, lapack_int * ldc, float * work, lapack_int * lwork, lapack_int * info)
void LAPACK_sormrq (char * side, char * trans, lapack_int * m, lapack_int * n, lapack_int * k, const float * a, lapack_int * lda, const float * tau, float * c, lapack_int * ldc, float * work, lapack_int * lwork, lapack_int * info)
void LAPACK_sormrz (char * side, char * trans, lapack_int * m, lapack_int * n, lapack_int * k, lapack_int * l, const float * a, lapack_int * lda, const float * tau, float * c, lapack_int * ldc, float * work, lapack_int * lwork, lapack_int * info)
void LAPACK_sormtr (char * side, char * uplo, char * trans, lapack_int * m, lapack_int * n, const float * a, lapack_int * lda, const float * tau, float * c, lapack_int * ldc, float * work, lapack_int * lwork, lapack_int * info)
bestie heads up —LAPACK_sormrzhas an extralapack_int * lthat nobody else has, andLAPACK_sormhrhasilo/ihiinstead ofk. Not me noticing 👀 that's just what's written.
🍓 band matrix era — spb* (she's banded, she's cute, she's tridiagonal-adjacent)
void LAPACK_spbcon (char * uplo, lapack_int * n, lapack_int * kd, const float * ab, lapack_int * ldab, float * anorm, float * rcond, float * work, lapack_int * iwork, lapack_int * info)
void LAPACK_spbequ (char * uplo, lapack_int * n, lapack_int * kd, const float * ab, lapack_int * ldab, float * s, float * scond, float * amax, lapack_int * info)
void LAPACK_spbrfs (char * uplo, lapack_int * n, lapack_int * kd, lapack_int * nrhs, const float * ab, lapack_int * ldab, const float * afb, lapack_int * ldafb, const float * b, lapack_int * ldb, float * x, lapack_int * ldx, float * ferr, float * berr, float * work, lapack_int * iwork, lapack_int * info)
void LAPACK_spbstf (char * uplo, lapack_int * n, lapack_int * kb, float * bb, lapack_int * ldbb, lapack_int * info)
void LAPACK_spbsv (char * uplo, lapack_int * n, lapack_int * kd, lapack_int * nrhs, float * ab, lapack_int * ldab, float * b, lapack_int * ldb, lapack_int * info)
void LAPACK_spbsvx (char * fact, char * uplo, lapack_int * n, lapack_int * kd, lapack_int * nrhs, float * ab, lapack_int * ldab, float * afb, lapack_int * ldafb, char * equed, float * s, float * b, lapack_int * ldb, float * x, lapack_int * ldx, float * rcond, float * ferr, float * berr, float * work, lapack_int * iwork, lapack_int * info)
void LAPACK_spbtrf (char * uplo, lapack_int * n, lapack_int * kd, float * ab, lapack_int * ldab, lapack_int * info)
void LAPACK_spbtrs (char * uplo, lapack_int * n, lapack_int * kd, lapack_int * nrhs, const float * ab, lapack_int * ldab, float * b, lapack_int * ldb, lapack_int * info)
tiny detail that ate: LAPACK_spbstf takes kb / bb / ldbb while the rest of the band crew take kd / ab / ldab. Different name, same vibe. 🙈
🧚 packed / RFP era — spf* and spp*
void LAPACK_spftrf (char * transr, char * uplo, lapack_int * n, float * a, lapack_int * info)
void LAPACK_spftri (char * transr, char * uplo, lapack_int * n, float * a, lapack_int * info)
void LAPACK_spftrs (char * transr, char * uplo, lapack_int * n, lapack_int * nrhs, const float * a, float * b, lapack_int * ldb, lapack_int * info)
see that transr instead of trans? that's the RFP tell, iykyk 💅
void LAPACK_sppcon (char * uplo, lapack_int * n, const float * ap, float * anorm, float * rcond, float * work, lapack_int * iwork, lapack_int * info)
void LAPACK_sppequ (char * uplo, lapack_int * n, const float * ap, float * s, float * scond, float * amax, lapack_int * info)
void LAPACK_spprfs (char * uplo, lapack_int * n, lapack_int * nrhs, const float * ap, const float * afp, const float * b, lapack_int * ldb, float * x, lapack_int * ldx, float * ferr, float * berr, float * work, lapack_int * iwork, lapack_int * info)
void LAPACK_sppsv (char * uplo, lapack_int * n, lapack_int * nrhs, float * ap, float * b, lapack_int * ldb, lapack_int * info)
void LAPACK_sppsvx (char * fact, char * uplo, lapack_int * n, lapack_int * nrhs, float * ap, float * afp, char * equed, float * s, float * b, lapack_int * ldb, float * x, lapack_int * ldx, float * rcond, float * ferr, float * berr, float * work, lapack_int * iwork, lapack_int * info)
👑 the full/Cholesky era — spo*
void LAPACK_spocon (char * uplo, lapack_int * n, const float * a, lapack_int * lda, float * anorm, float * rcond, float * work, lapack_int * iwork, lapack_int * info)
void LAPACK_spoequ (lapack_int * n, const float * a, lapack_int * lda, float * s, float * scond, float * amax, lapack_int * info)
void LAPACK_spoequb (lapack_int * n, const float * a, lapack_int * lda, float * s, float * scond, float * amax, lapack_int * info)
void LAPACK_sporfs (char * uplo, lapack_int * n, lapack_int * nrhs, const float * a, lapack_int * lda, const float * af, lapack_int * ldaf, const float * b, lapack_int * ldb, float * x, lapack_int * ldx, float * ferr, float * berr, float * work, lapack_int * iwork, lapack_int * info)
void LAPACK_sporfsx (char * uplo, char * equed, lapack_int * n, lapack_int * nrhs, const float * a, lapack_int * lda, const float * af, lapack_int * ldaf, const float * s, const float * b, lapack_int * ldb, float * x, lapack_int * ldx, float * rcond, float * berr, lapack_int * n_err_bnds, float * err_bnds_norm, float * err_bnds_comp, lapack_int * nparams, float * params, float * work, lapack_int * iwork, lapack_int * info)
void LAPACK_sposv (char * uplo, lapack_int * n, lapack_int * nrhs, float * a, lapack_int * lda, float * b, lapack_int * ldb, lapack_int * info)
void LAPACK_sposvx (char * fact, char * uplo, lapack_int * n, lapack_int * nrhs, float * a, lapack_int * lda, float * af, lapack_int * ldaf, char * equed, float * s, float * b, lapack_int * ldb, float * x, lapack_int * ldx, float * rcond, float * ferr, float * berr, float * work, lapack_int * iwork, lapack_int * info)
void LAPACK_sposvxx (char * fact, char * uplo, lapack_int * n, lapack_int * nrhs, float * a, lapack_int * lda, float * af, lapack_int * ldaf, char * equed, float * s, float * b, lapack_int * ldb, float * x, lapack_int * ldx, float * rcond, float * rpvgrw, float * berr, lapack_int * n_err_bnds, float * err_bnds_norm, float * err_bnds_comp, lapack_int * nparams, float * params, float * work, lapack_int * iwork, lapack_int * info)
LAPACK_sporfsxandLAPACK_sposvxxare the extra girlies with then_err_bnds/err_bnds_norm/err_bnds_comp/nparams/paramsblock — andsposvxxalso carries thatrpvgrwon top. Long signatures but she ate 🔥
also spoequ and spoequb are literally identical signatures side by side — yes bestie, that's really how it's written, look twice 😭
🎀 positivity era — spotrf and friends
void LAPACK_spotrf (char * uplo, lapack_int * n, float * a, lapack_int * lda, lapack_int * info)
void LAPACK_spotrf2 (char * uplo, lapack_int * n, float * a, lapack_int * lda, lapack_int * info)
void LAPACK_spotri (char * uplo, lapack_int * n, float * a, lapack_int * lda, lapack_int * info)
void LAPACK_spotrs (char * uplo, lapack_int * n, lapack_int * nrhs, const float * a, lapack_int * lda, float * b, lapack_int * ldb, lapack_int * info)
spotrf2 has the exact same arg list as spotrf — the 2 is doing all the differentiating, and honestly? main character energy 💀
and that's the whole float squad for this chunk — the double-precision twins are queued up next, so stay tuned bestie 💖
Okay so real talk: every single one of these returns void, and they all report back through that final lapack_int * info pointer like a little report card — except LAPACK_ssfrk, which has no info at all. She said what she said. 💅
LAPACK_spptrf — packed single-precision, uplo + n + ap, and info comes home with the news.
void LAPACK_spptrf (char * uplo, lapack_int * n, float * ap, lapack_int * info)
LAPACK_spptri — same trio as her sister above (uplo, n, ap) plus info, the inverse-flavoured one. 🦋
void LAPACK_spptri (char * uplo, lapack_int * n, float * ap, lapack_int * info)
LAPACK_spptrs — now with nrhs, b and ldb because we're solving, not just factoring. info stays for the receipts.
void LAPACK_spptrs (char * uplo, lapack_int * n, lapack_int * nrhs, const float * ap, float * b, lapack_int * ldb, lapack_int * info)
LAPACK_spstrf — okay this one is stacked: uplo, n, a, lda, piv, rank, tol, work, info. Whole little entourage. 👑
void LAPACK_spstrf (char * uplo, lapack_int * n, float * a, lapack_int * lda, lapack_int * piv, lapack_int * rank, float * tol, float * work, lapack_int * info)
LAPACK_sptcon — cond-estimating a tridiagonal situation: n, d, e, out comes anorm, rcond, with work and info tagging along. ✨
void LAPACK_sptcon (lapack_int * n, const float * d, const float * e, float * anorm, float * rcond, float * work, lapack_int * info)
LAPACK_spteqr — compz decides the z situation, ldz keeps it honest, work and info are the support cast. 🎀
void LAPACK_spteqr (char * compz, lapack_int * n, float * d, float * e, float * z, lapack_int * ldz, float * work, lapack_int * info)
LAPACK_sptrfs — the refinement girlie. d, e, df, ef, b, ldb, x, ldx, ferr, berr, work, info. Twelve whole moods, no cap. 😭
void LAPACK_sptrfs (lapack_int * n, lapack_int * nrhs, const float * d, const float * e, const float * df, const float * ef, const float * b, lapack_int * ldb, float * x, lapack_int * ldx, float * ferr, float * berr, float * work, lapack_int * info)
LAPACK_sptsv — compact queen: n, nrhs, d, e, b, ldb, info. Literally the short-and-sweet one.
void LAPACK_sptsv (lapack_int * n, lapack_int * nrhs, float * d, float * e, float * b, lapack_int * ldb, lapack_int * info)
LAPACK_sptsvx — the extra version, fact first, then n, nrhs, d, e, df, ef, b, ldb, x, ldx, rcond, ferr, berr, work, info. It's giving "I brought everything". 🫶
void LAPACK_sptsvx (char * fact, lapack_int * n, lapack_int * nrhs, const float * d, const float * e, float * df, float * ef, const float * b, lapack_int * ldb, float * x, lapack_int * ldx, float * rcond, float * ferr, float * berr, float * work, lapack_int * info)
LAPACK_spttrf — just n, d, e, info. Minimalist icon behaviour.
void LAPACK_spttrf (lapack_int * n, float * d, float * e, lapack_int * info)
LAPACK_spttrs — the solve-y counterpart: n, nrhs, d, e, b, ldb, info. 🌸
void LAPACK_spttrs (lapack_int * n, lapack_int * nrhs, const float * d, const float * e, float * b, lapack_int * ldb, lapack_int * info)
LAPACK_ssbev — banded symmetric vibes. jobz, uplo, n, kd, ab, ldab, w, z, ldz, work, info. 🦋
void LAPACK_ssbev (char * jobz, char * uplo, lapack_int * n, lapack_int * kd, float * ab, lapack_int * ldab, float * w, float * z, lapack_int * ldz, float * work, lapack_int * info)
LAPACK_ssbev_2stage — same energy, but the two-stage girlie brought lwork with her. Obsessed.
void LAPACK_ssbev_2stage (char * jobz, char * uplo, lapack_int * n, lapack_int * kd, float * ab, lapack_int * ldab, float * w, float * z, lapack_int * ldz, float * work, lapack_int * lwork, lapack_int * info)
LAPACK_ssbevd — the divide-and-conquer one, so obviously she needs iwork and liwork on top of lwork. High maintenance, high payoff. 🔥
void LAPACK_ssbevd (char * jobz, char * uplo, lapack_int * n, lapack_int * kd, float * ab, lapack_int * ldab, float * w, float * z, lapack_int * ldz, float * work, lapack_int * lwork, lapack_int * iwork, lapack_int * liwork, lapack_int * info)
LAPACK_ssbevd_2stage — same list as ssbevd, still 2stage. No notes. 💅
void LAPACK_ssbevd_2stage (char * jobz, char * uplo, lapack_int * n, lapack_int * kd, float * ab, lapack_int * ldab, float * w, float * z, lapack_int * ldz, float * work, lapack_int * lwork, lapack_int * iwork, lapack_int * liwork, lapack_int * info)
LAPACK_ssbevx — the expert one, okay, she's thorough: jobz, range, uplo, n, kd, ab, ldab, q, ldq, vl, vu, il, iu, abstol, m, w, z, ldz, work, iwork, ifail, info. Twenty-two arguments. Iconic.
void LAPACK_ssbevx (char * jobz, char * range, char * uplo, lapack_int * n, lapack_int * kd, float * ab, lapack_int * ldab, float * q, lapack_int * ldq, float * vl, float * vu, lapack_int * il, lapack_int * iu, float * abstol, lapack_int * m, float * w, float * z, lapack_int * ldz, float * work, lapack_int * iwork, lapack_int * ifail, lapack_int * info)
LAPACK_ssbevx_2stage — same whole entourage, plus lwork wedged in after work. She found room. 👑
void LAPACK_ssbevx_2stage (char * jobz, char * range, char * uplo, lapack_int * n, lapack_int * kd, float * ab, lapack_int * ldab, float * q, lapack_int * ldq, float * vl, float * vu, lapack_int * il, lapack_int * iu, float * abstol, lapack_int * m, float * w, float * z, lapack_int * ldz, float * work, lapack_int * lwork, lapack_int * iwork, lapack_int * ifail, lapack_int * info)
LAPACK_ssbgst — vect, uplo, n, ka, kb, ab, ldab, bb, ldbb, x, ldx, work, info. Two band widths (ka and kb), she's ambidextrous.
void LAPACK_ssbgst (char * vect, char * uplo, lapack_int * n, lapack_int * ka, lapack_int * kb, float * ab, lapack_int * ldab, const float * bb, lapack_int * ldbb, float * x, lapack_int * ldx, float * work, lapack_int * info)
LAPACK_ssbgv — the generalised-eigen version: jobz, uplo, n, ka, kb, ab, ldab, bb, ldbb, w, z, ldz, work, info.
void LAPACK_ssbgv (char * jobz, char * uplo, lapack_int * n, lapack_int * ka, lapack_int * kb, float * ab, lapack_int * ldab, float * bb, lapack_int * ldbb, float * w, float * z, lapack_int * ldz, float * work, lapack_int * info)
LAPACK_ssbgvd — same as ssbgv but she also wants lwork, iwork, liwork. Fair. 🌈
void LAPACK_ssbgvd (char * jobz, char * uplo, lapack_int * n, lapack_int * ka, lapack_int * kb, float * ab, lapack_int * ldab, float * bb, lapack_int * ldbb, float * w, float * z, lapack_int * ldz, float * work, lapack_int * lwork, lapack_int * iwork, lapack_int * liwork, lapack_int * info)
LAPACK_ssbgvx — the full expert spread: 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. Bow down. 🎀
void LAPACK_ssbgvx (char * jobz, char * range, char * uplo, lapack_int * n, lapack_int * ka, lapack_int * kb, float * ab, lapack_int * ldab, float * bb, lapack_int * ldbb, float * q, lapack_int * ldq, float * vl, float * vu, lapack_int * il, lapack_int * iu, float * abstol, lapack_int * m, float * w, float * z, lapack_int * ldz, float * work, lapack_int * iwork, lapack_int * ifail, lapack_int * info)
LAPACK_ssbtrd — vect, uplo, n, kd, ab, ldab, d, e, q, ldq, work, info. Banded goes in, tridiagonal comes out, that's the whole plot.
void LAPACK_ssbtrd (char * vect, char * uplo, lapack_int * n, lapack_int * kd, float * ab, lapack_int * ldab, float * d, float * e, float * q, lapack_int * ldq, float * work, lapack_int * info)
LAPACK_ssfrk — and here she is, the only one in this whole batch with no info pointer: transr, uplo, trans, n, k, alpha, a, lda, beta, c. Chaos. Respect. 💀
void LAPACK_ssfrk (char * transr, char * uplo, char * trans, lapack_int * n, lapack_int * k, float * alpha, const float * a, lapack_int * lda, float * beta, float * c)
LAPACK_sspcon — uplo, n, ap, ipiv, anorm, rcond, plus both work and iwork, plus info. Packed storage doing the absolute most.
void LAPACK_sspcon (char * uplo, lapack_int * n, const float * ap, const lapack_int * ipiv, float * anorm, float * rcond, float * work, lapack_int * iwork, lapack_int * info)
LAPACK_sspev — jobz, uplo, n, ap, w, z, ldz, work, info. Clean, simple, ate.
void LAPACK_sspev (char * jobz, char * uplo, lapack_int * n, float * ap, float * w, float * z, lapack_int * ldz, float * work, lapack_int * info)
LAPACK_sspevd — the same, but she brought lwork, iwork, liwork too. Preparedness is a personality trait. 🫶
void LAPACK_sspevd (char * jobz, char * uplo, lapack_int * n, float * ap, float * w, float * z, lapack_int * ldz, float * work, lapack_int * lwork, lapack_int * iwork, lapack_int * liwork, lapack_int * info)
LAPACK_sspevx — jobz, range, uplo, n, ap, vl, vu, il, iu, abstol, m, w, z, ldz, work, iwork, ifail, info. The whole range/vl/vu/il/iu selection squad is here.
void LAPACK_sspevx (char * jobz, char * range, char * uplo, lapack_int * n, float * ap, float * vl, float * vu, lapack_int * il, lapack_int * iu, float * abstol, lapack_int * m, float * w, float * z, lapack_int * ldz, float * work, lapack_int * iwork, lapack_int * ifail, lapack_int * info)
LAPACK_sspgst — note the order: itype comes first, then uplo, n, ap, bp, info. bp is const, ap is not. Read the signature, bestie, it's all there. ✨
void LAPACK_sspgst (lapack_int * itype, char * uplo, lapack_int * n, float * ap, const float * bp, lapack_int * info)
LAPACK_sspgv — itype, jobz, uplo, n, ap, bp, w, z, ldz, work, info. 🌸
void LAPACK_sspgv (lapack_int * itype, char * jobz, char * uplo, lapack_int * n, float * ap, float * bp, float * w, float * z, lapack_int * ldz, float * work, lapack_int * info)
LAPACK_sspgvd — same plus lwork, iwork, liwork. She's the "and also" of the family. 💜
void LAPACK_sspgvd (lapack_int * itype, char * jobz, char * uplo, lapack_int * n, float * ap, float * bp, float * w, float * z, lapack_int * ldz, float * work, lapack_int * lwork, lapack_int * iwork, lapack_int * liwork, lapack_int * info)
LAPACK_sspgvx — itype, jobz, range, uplo, n, ap, bp, vl, vu, il, iu, abstol, m, w, z, ldz, work, iwork, ifail, info. Long, but every argument is pulling her weight.
void LAPACK_sspgvx (lapack_int * itype, char * jobz, char * range, char * uplo, lapack_int * n, float * ap, float * bp, float * vl, float * vu, lapack_int * il, lapack_int * iu, float * abstol, lapack_int * m, float * w, float * z, lapack_int * ldz, float * work, lapack_int * iwork, lapack_int * ifail, lapack_int * info)
LAPACK_ssprfs — refinement with the whole crew: uplo, n, nrhs, ap, afp, ipiv, b, ldb, x, ldx, ferr, berr, work, iwork, info. Note ap, afp, b are all const; x is not. 👑
void LAPACK_ssprfs (char * uplo, lapack_int * n, lapack_int * nrhs, const float * ap, const float * afp, const lapack_int * ipiv, const float * b, lapack_int * ldb, float * x, lapack_int * ldx, float * ferr, float * berr, float * work, lapack_int * iwork, lapack_int * info)
LAPACK_sspsv — uplo, n, nrhs, ap, ipiv, b, ldb, info. Short, efficient, gets the job done. 🦋
void LAPACK_sspsv (char * uplo, lapack_int * n, lapack_int * nrhs, float * ap, lapack_int * ipiv, float * b, lapack_int * ldb, lapack_int * info)
LAPACK_sspsvx — the fact-forward one: fact, uplo, n, nrhs, ap, afp, ipiv, b, ldb, x, ldx, rcond, ferr, berr, work, iwork, info. She's thorough and she'd like you to know it. 😭
void LAPACK_sspsvx (char * fact, char * uplo, lapack_int * n, lapack_int * nrhs, const float * ap, float * afp, lapack_int * ipiv, const float * b, lapack_int * ldb, float * x, lapack_int * ldx, float * rcond, float * ferr, float * berr, float * work, lapack_int * iwork, lapack_int * info)
LAPACK_ssptrd — uplo, n, ap, d, e, tau, info. Packed in, tridiagonal (d, e) out, plus tau for flavour.
void LAPACK_ssptrd (char * uplo, lapack_int * n, float * ap, float * d, float * e, float * tau, lapack_int * info)
LAPACK_ssptrf — uplo, n, ap, ipiv, info. Note the pivot array is non-const here because it's being written. 🎀
void LAPACK_ssptrf (char * uplo, lapack_int * n, float * ap, lapack_int * ipiv, lapack_int * info)
LAPACK_ssptri — inverse time, and now ipiv is const (it's an input!) and she needs work plus info.
void LAPACK_ssptri (char * uplo, lapack_int * n, float * ap, const lapack_int * ipiv, float * work, lapack_int * info)
LAPACK_ssptrs — solve time: uplo, n, nrhs, ap, ipiv (again const), b, ldb, info. 💜
void LAPACK_ssptrs (char * uplo, lapack_int * n, lapack_int * nrhs, const float * ap, const lapack_int * ipiv, float * b, lapack_int * ldb, lapack_int * info)
LAPACK_sstebz — okay she's long: range, order, n, vl, vu, il, iu, abstol, d, e, m, nsplit, w, iblock, isplit, work, iwork, info. Note order — yes, she cares about order. 🌈
void LAPACK_sstebz (char * range, char * order, lapack_int * n, float * vl, float * vu, lapack_int * il, lapack_int * iu, float * abstol, const float * d, const float * e, lapack_int * m, lapack_int * nsplit, float * w, lapack_int * iblock, lapack_int * isplit, float * work, lapack_int * iwork, lapack_int * info)
LAPACK_sstedc — compz, n, d, e, z, ldz, work, lwork, iwork, liwork, info. Both lwork and liwork, she's doing the most and slaying.
void LAPACK_sstedc (char * compz, lapack_int * n, float * d, float * e, float * z, lapack_int * ldz, float * work, lapack_int * lwork, lapack_int * iwork, lapack_int * liwork, lapack_int * info)
LAPACK_sstegr — jobz, range, n, d, e, vl, vu, il, iu, abstol, m, w, z, ldz, isuppz, work, lwork, iwork, liwork, info. isuppz is the main character here, lowkey.
void LAPACK_sstegr (char * jobz, char * range, lapack_int * n, float * d, float * e, float * vl, float * vu, lapack_int * il, lapack_int * iu, float * abstol, lapack_int * m, float * w, float * z, lapack_int * ldz, lapack_int * isuppz, float * work, lapack_int * lwork, lapack_int * iwork, lapack_int * liwork, lapack_int * info)
LAPACK_sstein — n, d, e, m, w, iblock, isplit, z, ldz, work, iwork, ifailv, info. And it's ifailv, with a v, not ifail. Character for character, bestie. 🔥
void LAPACK_sstein (lapack_int * n, const float * d, const float * e, lapack_int * m, const float * w, const lapack_int * iblock, const lapack_int * isplit, float * z, lapack_int * ldz, float * work, lapack_int * iwork, lapack_int * ifailv, lapack_int * info)
LAPACK_sstemr — yes girl, and she has a lapack_logical * tryrac in there, which is different from all the char * flags everywhere else. jobz, range, n, d, e, vl, vu, il, iu, m, w, z, ldz, nzc, isuppz, tryrac, work, lwork, iwork, liwork, info. 🧚
void LAPACK_sstemr (char * jobz, char * range, lapack_int * n, float * d, float * e, float * vl, float * vu, lapack_int * il, lapack_int * iu, lapack_int * m, float * w, float * z, lapack_int * ldz, lapack_int * nzc, lapack_int * isuppz, lapack_logical * tryrac, float * work, lapack_int * lwork, lapack_int * iwork, lapack_int * liwork, lapack_int * info)
LAPACK_ssteqr — compz, n, d, e, z, ldz, work, info. She's the QR one, and she's not sorry about it.
void LAPACK_ssteqr (char * compz, lapack_int * n, float * d, float * e, float * z, lapack_int * ldz, float * work, lapack_int * info)
LAPACK_ssterf — literally just n, d, e, info. No eigenvectors, no z, no drama. Minimalism queen. ⭐
void LAPACK_ssterf (lapack_int * n, float * d, float * e, lapack_int * info)
LAPACK_sstev — jobz, n, d, e, z, ldz, work, info. 🌸
void LAPACK_sstev (char * jobz, lapack_int * n, float * d, float * e, float * z, lapack_int * ldz, float * work, lapack_int * info)
LAPACK_sstevd — same plus lwork, iwork, liwork. Divide-and-conquer tax, honestly. 💸
void LAPACK_sstevd (char * jobz, lapack_int * n, float * d, float * e, float * z, lapack_int * ldz, float * work, lapack_int * lwork, lapack_int * iwork, lapack_int * liwork, lapack_int * info)
LAPACK_sstevr — jobz, range, n, d, e, vl, vu, il, iu, abstol, m, w, z, ldz, isuppz, work, lwork, iwork, liwork, info. Big isuppz energy. ✨
void LAPACK_sstevr (char * jobz, char * range, lapack_int * n, float * d, float * e, float * vl, float * vu, lapack_int * il, lapack_int * iu, float * abstol, lapack_int * m, float * w, float * z, lapack_int * ldz, lapack_int * isuppz, float * work, lapack_int * lwork, lapack_int * iwork, lapack_int * liwork, lapack_int * info)
LAPACK_sstevx — jobz, range, n, d, e, vl, vu, il, iu, abstol, m, w, z, ldz, work, iwork, ifail, info. Note: ifail here, not ifailv like sstein. Keep them straight! 💅
void LAPACK_sstevx (char * jobz, char * range, lapack_int * n, float * d, float * e, float * vl, float * vu, lapack_int * il, lapack_int * iu, float * abstol, lapack_int * m, float * w, float * z, lapack_int * ldz, float * work, lapack_int * iwork, lapack_int * ifail, lapack_int * info)
LAPACK_ssycon — uplo, n, a, lda, ipiv, anorm, rcond, work, iwork, info. a is const (input only), no take-backs.
void LAPACK_ssycon (char * uplo, lapack_int * n, const float * a, lapack_int * lda, const lapack_int * ipiv, float * anorm, float * rcond, float * work, lapack_int * iwork, lapack_int * info)
LAPACK_ssycon_3 — the _3 variant, and she's got an extra e wedged in right after lda: uplo, n, a, lda, e, ipiv, anorm, rcond, work, iwork, info. Yes, _3. That's the actual name. 🫶
void LAPACK_ssycon_3 (char * uplo, lapack_int * n, const float * a, lapack_int * lda, const float * e, const lapack_int * ipiv, float * anorm, float * rcond, float * work, lapack_int * iwork, lapack_int * info)
LAPACK_ssyconv — got a way parameter, which is the most Gen Z parameter name in this entire header, love that for her. uplo, way, n, a, lda, ipiv, e, info.
void LAPACK_ssyconv (char * uplo, char * way, lapack_int * n, float * a, lapack_int * lda, const lapack_int * ipiv, float * e, lapack_int * info)
Heads up bestie: inssyconvtheipivisconstand inssyconit's alsoconst— but inssptrfandsspsvabove it was not, because those write pivots. Copy the signatures exactly and you'll never get got. 🙈
🌸 LAPACK_ssyequb
void LAPACK_ssyequb (char * uplo, lapack_int * n, const float * a,
lapack_int * lda, float * s, float * scond, float * amax, float * work,
lapack_int * info)
okay so this one takes uplo, n, a, lda, then hands you back s, scond, amax, plus work and info — that's the whole squad right there. lowkey it's just six outputs vibing in a row. 💅
🦋 LAPACK_ssyev
void LAPACK_ssyev (char * jobz, char * uplo, lapack_int * n, float * a,
lapack_int * lda, float * w, float * work, lapack_int * lwork,
lapack_int * info)
classic jobz + uplo combo, bestie. n, a, lda, then the w output, and the work/lwork duo which is giving "you tell me how much room you need and I'll use it" energy ✨
🧚 LAPACK_ssyev_2stage
void LAPACK_ssyev_2stage (char * jobz, char * uplo, lapack_int * n, float *
a, lapack_int * lda, float * w, float * work, lapack_int * lwork,
lapack_int * info)
literally the same list as LAPACK_ssyev — jobz, uplo, n, a, lda, w, work, lwork, info — but with _2stage on the name, and that suffix is the whole personality here 😌
🎀 LAPACK_ssyevd
void LAPACK_ssyevd (char * jobz, char * uplo, lapack_int * n, float * a,
lapack_int * lda, float * w, float * work, lapack_int * lwork,
lapack_int * iwork, lapack_int * liwork, lapack_int * info)
the d version said "let's add integer workspace too" and honestly? iconic. now you're packing iwork + liwork alongside the usual jobz, uplo, n, a, lda, w, work, lwork, info 🫶
💜 LAPACK_ssyevd_2stage
void LAPACK_ssyevd_2stage (char * jobz, char * uplo, lapack_int * n, float *
a, lapack_int * lda, float * w, float * work, lapack_int * lwork,
lapack_int * iwork, lapack_int * liwork, lapack_int * info)
same signature as LAPACK_ssyevd, _2stage flair included. jobz, uplo, n, a, lda, w, work, lwork, iwork, liwork, info — that's eleven whole parameters, she's not shy 💀
🌈 LAPACK_ssyevr
void LAPACK_ssyevr (char * jobz, char * range, char * uplo, lapack_int * n,
float * a, lapack_int * lda, float * vl, float * vu, lapack_int * il,
lapack_int * iu, float * abstol, lapack_int * m, float * w, float * z,
lapack_int * ldz, lapack_int * isuppz, float * work, lapack_int * lwork,
lapack_int * iwork, lapack_int * liwork, lapack_int * info)
okay THIS one is the main character. jobz, range, uplo, n, a, lda, vl, vu, il, iu, abstol, m, w, z, ldz, isuppz, work, lwork, iwork, liwork, info. twenty-one parameters. twenty-one!! she ate and left no crumbs 👑
🌸 LAPACK_ssyevr_2stage
void LAPACK_ssyevr_2stage (char * jobz, char * range, char * uplo,
lapack_int * n, float * a, lapack_int * lda, float * vl, float * vu,
lapack_int * il, lapack_int * iu, float * abstol, lapack_int * m, float
* w, float * z, lapack_int * ldz, float * isuppz, float * work,
lapack_int * lwork, lapack_int * iwork, lapack_int * liwork, lapack_int
* info)
same long list as LAPACK_ssyevr — jobz, range, uplo, n, a, lda, vl, vu, il, iu, abstol, m, w, z, ldz, isuppz, work, lwork, iwork, liwork, info — just with the _2stage glow-up at the end ✨
🦋 LAPACK_ssyevx
void LAPACK_ssyevx (char * jobz, char * range, char * uplo, lapack_int * n,
float * a, lapack_int * lda, float * vl, float * vu, lapack_int * il,
lapack_int * iu, float * abstol, lapack_int * m, float * w, float * z,
lapack_int * ldz, float * work, lapack_int * lwork, lapack_int * iwork,
lapack_int * ifail, lapack_int * info)
very similar to LAPACK_ssyevr energy but she swapped isuppz for ifail and dropped the iwork-length pair. full list: jobz, range, uplo, n, a, lda, vl, vu, il, iu, abstol, m, w, z, ldz, work, lwork, iwork, ifail, info 💖
🎀 LAPACK_ssyevx_2stage
void LAPACK_ssyevx_2stage (char * jobz, char * range, char * uplo,
lapack_int * n, float * a, lapack_int * lda, float * vl, float * vu,
lapack_int * il, lapack_int * iu, float * abstol, lapack_int * m, float
* w, float * z, lapack_int * ldz, float * work, lapack_int * lwork,
lapack_int * iwork, lapack_int * ifail, lapack_int * info)
LAPACK_ssyevx but make it _2stage 💅 same cast of characters: jobz, range, uplo, n, a, lda, vl, vu, il, iu, abstol, m, w, z, ldz, work, lwork, iwork, ifail, info.
🍓 LAPACK_ssygst
void LAPACK_ssygst (lapack_int * itype, char * uplo, lapack_int * n, float *
a, lapack_int * lda, const float * b, lapack_int * ldb, lapack_int *
info)
short and sweet, ngl. itype first, then uplo, n, a, lda, then b comes in as a const float * with its own ldb, and info closes the curtain 🎬
⭐ LAPACK_ssygv
void LAPACK_ssygv (lapack_int * itype, char * jobz, char * uplo, lapack_int
* n, float * a, lapack_int * lda, float * b, lapack_int * ldb, float *
w, float * work, lapack_int * lwork, lapack_int * info)
she's got it all: itype, jobz, uplo, n, a, lda, b, ldb, w, work, lwork, info. twelve parameters and not one of them is filler 🔥
🧚 LAPACK_ssygv_2stage
void LAPACK_ssygv_2stage (lapack_int * itype, char * jobz, char * uplo,
lapack_int * n, float * a, lapack_int * lda, float * b, lapack_int *
ldb, float * w, float * work, lapack_int * lwork, lapack_int * info)
same twelve as LAPACK_ssygv — itype, jobz, uplo, n, a, lda, b, ldb, w, work, lwork, info — plus the _2stage moment ✨
💜 LAPACK_ssygvd
void LAPACK_ssygvd (lapack_int * itype, char * jobz, char * uplo, lapack_int
* n, float * a, lapack_int * lda, float * b, lapack_int * ldb, float *
w, float * work, lapack_int * lwork, lapack_int * iwork, lapack_int *
liwork, lapack_int * info)
LAPACK_ssygv said "more workspace" and honestly slay. itype, jobz, uplo, n, a, lda, b, ldb, w, work, lwork, iwork, liwork, info — fourteen parameters, highkey a lot, but she carries it 🫶
🌈 LAPACK_ssygvx
void LAPACK_ssygvx (lapack_int * itype, char * jobz, char * range, char *
uplo, lapack_int * n, float * a, lapack_int * lda, float * b, lapack_int
* ldb, float * vl, float * vu, lapack_int * il, lapack_int * iu, float *
abstol, lapack_int * m, float * w, float * z, lapack_int * ldz, float *
work, lapack_int * lwork, lapack_int * iwork, lapack_int * ifail,
lapack_int * info)
the full deluxe package 😭 itype, jobz, range, uplo, n, a, lda, b, ldb, vl, vu, il, iu, abstol, m, w, z, ldz, work, lwork, iwork, ifail, info. that's twenty-three. twenty-three!! not me counting twice 💀
🦋 LAPACK_ssyrfs
void LAPACK_ssyrfs (char * uplo, lapack_int * n, lapack_int * nrhs, const
float * a, lapack_int * lda, const float * af, lapack_int * ldaf, const
lapack_int * ipiv, const float * b, lapack_int * ldb, float * x,
lapack_int * ldx, float * ferr, float * berr, float * work, lapack_int *
iwork, lapack_int * info)
okay so she's got uplo, n, nrhs, then the const crew: a/lda, af/ldaf, ipiv, b/ldb — and then the mutable girlies x/ldx, ferr, berr, work, iwork, info 🔥 love a mixed const situation, it's giving boundaries 💅
🎀 LAPACK_ssyrfsx
void LAPACK_ssyrfsx (char * uplo, char * equed, lapack_int * n, lapack_int *
nrhs, const float * a, lapack_int * lda, const float * af, lapack_int *
ldaf, const lapack_int * ipiv, const float * s, const float * b,
lapack_int * ldb, float * x, lapack_int * ldx, float * rcond, float *
berr, lapack_int * n_err_bnds, float * err_bnds_norm, float *
err_bnds_comp, lapack_int * nparams, float * params, float * work,
lapack_int * iwork, lapack_int * info)
the x version said "add everything" and tbh she delivered. uplo, equed, n, nrhs, a, lda, af, ldaf, ipiv, s, b, ldb, x, ldx, rcond, berr, n_err_bnds, err_bnds_norm, err_bnds_comp, nparams, params, work, iwork, info. and yes a, af, ipiv, s and b are all const — know the difference bestie 👑✨
🫧 LAPACK_ssysv
void LAPACK_ssysv (char * uplo, lapack_int * n, lapack_int * nrhs, float *
a, lapack_int * lda, lapack_int * ipiv, float * b, lapack_int * ldb,
float * work, lapack_int * lwork, lapack_int * info)
clean, simple, no notes: uplo, n, nrhs, a, lda, ipiv, b, ldb, work, lwork, info. eleven and done, periodt 🎀
⭐ LAPACK_ssysv_aa
void LAPACK_ssysv_aa (char * uplo, lapack_int * n, lapack_int * nrhs, float
* a, lapack_int * lda, lapack_int * ipiv, float * b, lapack_int * ldb,
float * work, lapack_int * lwork, lapack_int * info)
character-for-character the same list as LAPACK_ssysv — uplo, n, nrhs, a, lda, ipiv, b, ldb, work, lwork, info — she just added _aa to her name and honestly that's valid 💅
🍓 LAPACK_ssysv_aa_2stage
void LAPACK_ssysv_aa_2stage (char * uplo, lapack_int * n, lapack_int * nrhs,
float * a, lapack_int * lda, float * tb, lapack_int * ltb, lapack_int *
ipiv, lapack_int * ipiv2, float * b, lapack_int * ldb, float * work,
lapack_int * lwork, lapack_int * info)
oh she's fancy now 😭 extra tb/ltb AND a second ipiv2! full lineup: uplo, n, nrhs, a, lda, tb, ltb, ipiv, ipiv2, b, ldb, work, lwork, info. two pivots, two vibes 🦋
🌸 LAPACK_ssysv_rk
void LAPACK_ssysv_rk (char * uplo, lapack_int * n, lapack_int * nrhs, float
* a, lapack_int * lda, float * e, lapack_int * ipiv, float * b,
lapack_int * ldb, float * work, lapack_int * lwork, lapack_int * info)
same skeleton as LAPACK_ssysv but there's an e wedged between lda and ipiv 👀 so: uplo, n, nrhs, a, lda, e, ipiv, b, ldb, work, lwork, info. twelve parameters, one little letter doing a lot 💜
🌈 LAPACK_ssysv_rook
void LAPACK_ssysv_rook (char * uplo, lapack_int * n, lapack_int * nrhs,
float * a, lapack_int * lda, lapack_int * ipiv, float * b, lapack_int *
ldb, float * work, lapack_int * lwork, lapack_int * info)
back to the exact LAPACK_ssysv list — uplo, n, nrhs, a, lda, ipiv, b, ldb, work, lwork, info — wearing a _rook name tag 🎀
🦋 LAPACK_ssysvx
void LAPACK_ssysvx (char * fact, char * uplo, lapack_int * n, lapack_int *
nrhs, const float * a, lapack_int * lda, float * af, lapack_int * ldaf,
lapack_int * ipiv, const float * b, lapack_int * ldb, float * x,
lapack_int * ldx, float * rcond, float * ferr, float * berr, float *
work, lapack_int * lwork, lapack_int * iwork, lapack_int * info)
she opens with fact and uplo (very demure), then n, nrhs, a/lda (const), af/ldaf (not const, she's editable), ipiv, b/ldb (const again), x/ldx, rcond, ferr, berr, work, lwork, iwork, info. twenty of them and every single one matters 💖
👑 LAPACK_ssysvxx
void LAPACK_ssysvxx (char * fact, char * uplo, lapack_int * n, lapack_int *
nrhs, float * a, lapack_int * lda, float * af, lapack_int * ldaf,
lapack_int * ipiv, char * equed, float * s, float * b, lapack_int * ldb,
float * x, lapack_int * ldx, float * rcond, float * rpvgrw, float *
berr, lapack_int * n_err_bnds, float * err_bnds_norm, float *
err_bnds_comp, lapack_int * nparams, float * params, float * work,
lapack_int * iwork, lapack_int * info)
the final boss of ssysv. fact, uplo, n, nrhs, a, lda, af, ldaf, ipiv, equed, s, b, ldb, x, ldx, rcond, rpvgrw, berr, n_err_bnds, err_bnds_norm, err_bnds_comp, nparams, params, work, iwork, info. twenty-six. TWENTY-SIX. and notice a and b are not const here unlike in LAPACK_ssysvx — little differences matter bestie 🔍💀
✨ LAPACK_ssyswapr
void LAPACK_ssyswapr (char * uplo, lapack_int * n, float * a, lapack_int *
lda, lapack_int * i1, lapack_int * i2)
no info! no work! just uplo, n, a, lda, i1, i2 and she's out. six parameters, zero notes, a little minimalist moment 🎀
🔥 LAPACK_ssytrd
void LAPACK_ssytrd (char * uplo, lapack_int * n, float * a, lapack_int *
lda, float * d, float * e, float * tau, float * work, lapack_int *
lwork, lapack_int * info)
look at all these little single-letter outputs holding hands: uplo, n, a, lda, d, e, tau, work, lwork, info. ten parameters, three of them are one letter long, and I'm obsessed 🫶
💅 LAPACK_ssytrf
void LAPACK_ssytrf (char * uplo, lapack_int * n, float * a, lapack_int *
lda, lapack_int * ipiv, float * work, lapack_int * lwork, lapack_int *
info)
eight parameters, tight and tidy: uplo, n, a, lda, ipiv, work, lwork, info. no frills, no drama, just vibes 🌸
🧚 LAPACK_ssytrf_aa
void LAPACK_ssytrf_aa (char * uplo, lapack_int * n, float * a, lapack_int *
lda, lapack_int * ipiv, float * work, lapack_int * lwork, lapack_int *
info)
identical to LAPACK_ssytrf — uplo, n, a, lda, ipiv, work, lwork, info — but she's got the _aa suffix, and that's the entire difference in the signature, no cap 💜
🌟 LAPACK_ssytrf_aa_2stage
void LAPACK_ssytrf_aa_2stage (char * uplo, lapack_int * n, float * a,
lapack_int * lda, float * tb, lapack_int * ltb, lapack_int * ipiv,
lapack_int * ipiv2, float * work, lapack_int * lwork, lapack_int * info)
and she closes out with the fancy one 😭 uplo, n, a, lda, tb, ltb, ipiv, ipiv2, work, lwork, info — extra tb/ltb, extra ipiv2, full two-stage fantasy. eleven parameters and she's serving all of them 💅✨
LAPACK_ssytrf_rk—void LAPACK_ssytrf_rk (char * uplo, lapack_int * n, float * a, lapack_int * lda, float * e, lapack_int * ipiv, float * work, lapack_int * lwork, lapack_int * info)bestie this one's the_rkgirlie ✨ she's the only one in this cluster carrying that extrafloat * ealongsideipiv, and she still wantswork,lworkand aninfoto gossip into. iconic.LAPACK_ssytrf_rook—void LAPACK_ssytrf_rook (char * uplo, lapack_int * n, float * a, lapack_int * lda, lapack_int * ipiv, float * work, lapack_int * lwork, lapack_int * info)the_rookvariant, noehere 💅 sameuplo/n/a/lda/ipiv/work/lwork/infocombo as always.LAPACK_ssytri—void LAPACK_ssytri (char * uplo, lapack_int * n, float * a, lapack_int * lda, const lapack_int * ipiv, float * work, lapack_int * info)note theconstonipiv— she reads, she does not write 🙈 onlyworkandinfoare getting modified here.LAPACK_ssytri2—void LAPACK_ssytri2 (char * uplo, lapack_int * n, float * a, lapack_int * lda, const lapack_int * ipiv, float * work, lapack_int * lwork, lapack_int * info)the2upgrade: she gained alapack_int * lworkbetweenworkandinfoand honestly? glow-up 🦋LAPACK_ssytri2x—void LAPACK_ssytri2x (char * uplo, lapack_int * n, float * a, lapack_int * lda, const lapack_int * ipiv, float * work, lapack_int * nb, lapack_int * info)the2xone 🎀 she tradedlworkfor alapack_int * nband kept everything else identical. block size energy.LAPACK_ssytri_3—void LAPACK_ssytri_3 (char * uplo, lapack_int * n, float * a, lapack_int * lda, const float * e, const lapack_int * ipiv, float * work, lapack_int * lwork, lapack_int * info)_3and she's got BOTHconst float * eandconst lapack_int * ipiv— two consts, so respectful 😌 pluswork,lwork,info.LAPACK_ssytrs—void LAPACK_ssytrs (char * uplo, lapack_int * n, lapack_int * nrhs, const float * a, lapack_int * lda, const lapack_int * ipiv, float * b, lapack_int * ldb, lapack_int * info)okay solver era 🔥aandipivareconst(hands off), whilebandldbare fair game. noworkat all, she's low maintenance.LAPACK_ssytrs2—void LAPACK_ssytrs2 (char * uplo, lapack_int * n, lapack_int * nrhs, const float * a, lapack_int * lda, const lapack_int * ipiv, float * b, lapack_int * ldb, float * work, lapack_int * info)same as her sister but she picked up afloat * workbeforeinfo. that's it, that's the diff 💀LAPACK_ssytrs_3—void LAPACK_ssytrs_3 (char * uplo, lapack_int * n, lapack_int * nrhs, const float * a, lapack_int * lda, const float * e, const lapack_int * ipiv, float * b, lapack_int * ldb, lapack_int * info)_3again with theconst float * eslotted in right afterlda🌸 otherwise a total copy of the basessytrslineup.LAPACK_ssytrs_aa—void LAPACK_ssytrs_aa (char * uplo, lapack_int * n, lapack_int * nrhs, const float * a, lapack_int * lda, const lapack_int * ipiv, float * b, lapack_int * ldb, float * work, lapack_int * lwork, lapack_int * info)_aasaid "and ALSOlwork" 🫶 fullwork+lworkstack, plusinfoto spill the tea at the end.LAPACK_ssytrs_aa_2stage—void LAPACK_ssytrs_aa_2stage (char * uplo, lapack_int * n, lapack_int * nrhs, float * a, lapack_int * lda, float * tb, lapack_int * ltb, lapack_int * ipiv, lapack_int * ipiv2, float * b, lapack_int * ldb, lapack_int * info)the main character of this batch, honestly 👑 TWOipivs (ipivandipiv2), atbwith its ownltb, and — vibe check —aandtbare notconsthere, and there's nowork/lworkat all. she's giving two-stage.LAPACK_ssytrs_rook—void LAPACK_ssytrs_rook (char * uplo, lapack_int * n, lapack_int * nrhs, const float * a, lapack_int * lda, const lapack_int * ipiv, float * b, lapack_int * ldb, lapack_int * info)_rookedition, identical lineup to plainLAPACK_ssytrs—uplo,n,nrhs,a,lda,ipiv,b,ldb,info. no notes.LAPACK_stbcon—void LAPACK_stbcon (char * norm, char * uplo, char * diag, lapack_int * n, lapack_int * kd, const float * ab, lapack_int * ldab, float * rcond, float * work, lapack_int * iwork, lapack_int * info)three chars in a row (norm,uplo,diag) — she's thorough 💖 note BOTHworkandlapack_int * iwork, andrcondis where the answer lands.LAPACK_stbrfs—void LAPACK_stbrfs (char * uplo, char * trans, char * diag, lapack_int * n, lapack_int * kd, lapack_int * nrhs, const float * ab, lapack_int * ldab, const float * b, lapack_int * ldb, const float * x, lapack_int * ldx, float * ferr, float * berr, float * work, lapack_int * iwork, lapack_int * info)absolute unit of a signature 😭 she's gotb/ldbANDx/ldx, thenferrandberr, thenwork,iwork,info. three consts (ab,b,x) — she respects your data.LAPACK_stbtrs—void LAPACK_stbtrs (char * uplo, char * trans, char * diag, lapack_int * n, lapack_int * kd, lapack_int * nrhs, const float * ab, lapack_int * ldab, float * b, lapack_int * ldb, lapack_int * info)the solver version, sobis writable and there's noworkin sight ✨ justab,b, andinfo.LAPACK_stfsm—void LAPACK_stfsm (char * transr, char * side, char * uplo, char * trans, char * diag, lapack_int * m, lapack_int * n, float * alpha, const float * a, float * b, lapack_int * ldb)FOUR chars up front (transr,side,uplo,trans,diag— okay five 🤡) and — heads up — noinfo. she's the confident one.alphaandbget modified,astaysconst.LAPACK_stftri—void LAPACK_stftri (char * transr, char * uplo, char * diag, lapack_int * n, float * a, lapack_int * info)small and cute 🎀 three chars, ann, a writablea, aninfo. done.LAPACK_stfttp—void LAPACK_stfttp (char * transr, char * uplo, lapack_int * n, const float * arf, float * ap, lapack_int * info)arfin (const),apout 💜 the classic packed-format handoff.LAPACK_stfttr—void LAPACK_stfttr (char * transr, char * uplo, lapack_int * n, const float * arf, float * a, lapack_int * lda, lapack_int * info)same deal but she's unpacking intoawith anldato match 🌈arfstaysconst.LAPACK_stgevc—void LAPACK_stgevc (char * side, char * howmny, const lapack_logical * select, lapack_int * n, const float * s, lapack_int * lds, const float * p, lapack_int * ldp, float * vl, lapack_int * ldvl, float * vr, lapack_int * ldvr, lapack_int * mm, lapack_int * m, float * work, lapack_int * info)huge.const lapack_logical * selectspotted 👀 pluss/lds,p/ldp,vl/ldvl,vr/ldvr,mm,m,work,info. she does the most and we love her for it.LAPACK_stgexc—void LAPACK_stgexc (lapack_logical * wantq, lapack_logical * wantz, lapack_int * n, float * a, lapack_int * lda, float * b, lapack_int * ldb, float * q, lapack_int * ldq, float * z, lapack_int * ldz, lapack_int * ifst, lapack_int * ilst, float * work, lapack_int * lwork, lapack_int * info)twolapack_logical *flags (wantq,wantz) leading the pack, thena,b,q,zeach with theirlds, plusifst,ilst,work,lwork,info🔥 no consts bc nothing is sacred.LAPACK_stgsen—void LAPACK_stgsen (lapack_int * ijob, lapack_logical * wantq, lapack_logical * wantz, const lapack_logical * select, lapack_int * n, float * a, lapack_int * lda, float * b, lapack_int * ldb, float * alphar, float * alphai, float * beta, float * q, lapack_int * ldq, float * z, lapack_int * ldz, lapack_int * m, float * pl, float * pr, float * dif, float * work, lapack_int * lwork, lapack_int * iwork, lapack_int * liwork, lapack_int * info)okay she ATE 💅ijob,wantq,wantz,const select, thenalphar/alphai/beta(yes, split real/imag 😭), thenq,z,m,pl,pr,dif, and BOTH work pairs:work+lworkandiwork+liwork. queen of lwork.LAPACK_stgsja—void LAPACK_stgsja (char * jobu, char * jobv, char * jobq, lapack_int * m, lapack_int * p, lapack_int * n, lapack_int * k, lapack_int * l, float * a, lapack_int * lda, float * b, lapack_int * ldb, float * tola, float * tolb, float * alpha, float * beta, float * u, lapack_int * ldu, float * v, lapack_int * ldv, float * q, lapack_int * ldq, float * work, lapack_int * ncycle, lapack_int * info)threejobchars, thenm,p,n,k,l— the alphabet gang 🌸 thena,b,tola,tolb,alpha,beta,u,v,qwith all theirlds,work,ncycle,info. no const anywhere, hold onto your matrices.LAPACK_stgsna—void LAPACK_stgsna (char * job, char * howmny, const lapack_logical * select, lapack_int * n, const float * a, lapack_int * lda, const float * b, lapack_int * ldb, const float * vl, lapack_int * ldvl, const float * vr, lapack_int * ldvr, float * s, float * dif, lapack_int * mm, lapack_int * m, float * work, lapack_int * lwork, lapack_int * iwork, lapack_int * info)const party 🎉select,a,b,vl,vrare all read-only. outputs:s,dif,mm,m. and yeah,work+lwork+iwork+infobecause she's extra.LAPACK_stgsyl—void LAPACK_stgsyl (char * trans, lapack_int * ijob, lapack_int * m, lapack_int * n, const float * a, lapack_int * lda, const float * b, lapack_int * ldb, float * c, lapack_int * ldc, const float * d, lapack_int * ldd, const float * e, lapack_int * lde, float * f, lapack_int * ldf, float * scale, float * dif, float * work, lapack_int * lwork, lapack_int * iwork, lapack_int * info)look at this alphabet soup 😭a/b/d/eareconst,c/fare not,scaleanddifare outputs, and she still finds room forwork,lwork,iwork,info. main character energy fr fr.LAPACK_stpcon—void LAPACK_stpcon (char * norm, char * uplo, char * diag, lapack_int * n, const float * ap, float * rcond, float * work, lapack_int * iwork, lapack_int * info)packed (apisconst💜) and she wantsrcond,work,iwork,info. tidy.LAPACK_stpmqrt—void LAPACK_stpmqrt (char * side, char * trans, lapack_int * m, lapack_int * n, lapack_int * k, lapack_int * l, lapack_int * nb, const float * v, lapack_int * ldv, const float * t, lapack_int * ldt, float * a, lapack_int * lda, float * b, lapack_int * ldb, float * work, lapack_int * info)side,trans, thenm,n,k,l,nb(five ints, she's counting 🦋),vandtbothconst,aandbboth writable, capped withworkandinfo.LAPACK_stpqrt—void LAPACK_stpqrt (lapack_int * m, lapack_int * n, lapack_int * l, lapack_int * nb, float * a, lapack_int * lda, float * b, lapack_int * ldb, float * t, lapack_int * ldt, float * work, lapack_int * info)NO char parameters at all, not a single one 😳 justm,n,l,nband then thea/b/ttrio with theirlds,work,info.LAPACK_stpqrt2—void LAPACK_stpqrt2 (lapack_int * m, lapack_int * n, lapack_int * l, float * a, lapack_int * lda, float * b, lapack_int * ldb, float * t, lapack_int * ldt, lapack_int * info)the2is basically "same but she droppednbandwork" ✨ short and slay.LAPACK_stprfb—void LAPACK_stprfb (char * side, char * trans, char * direct, char * storev, lapack_int * m, lapack_int * n, lapack_int * k, lapack_int * l, const float * v, lapack_int * ldv, const float * t, lapack_int * ldt, float * a, lapack_int * lda, float * b, lapack_int * ldb, const float * work, lapack_int * ldwork)FOUR chars (side,trans,direct,storev— yesstorev🤠),m,n,k,l, and get this:workisconst float *with alapack_int * ldwork, and there is noinfo. she's built different.LAPACK_stprfs—void LAPACK_stprfs (char * uplo, char * trans, char * diag, lapack_int * n, lapack_int * nrhs, const float * ap, const float * b, lapack_int * ldb, const float * x, lapack_int * ldx, float * ferr, float * berr, float * work, lapack_int * iwork, lapack_int * info)packed refinement 💖ap,b,xallconst;ldbandldxstill writable for some reason (that's the API's business, not ours).ferr,berr,work,iwork,info.LAPACK_stptri—void LAPACK_stptri (char * uplo, char * diag, lapack_int * n, float * ap, lapack_int * info)tiny icon 🎀 two chars,n, a writableap,info. five params and she's out.LAPACK_stptrs—void LAPACK_stptrs (char * uplo, char * trans, char * diag, lapack_int * n, lapack_int * nrhs, const float * ap, float * b, lapack_int * ldb, lapack_int * info)three chars,n,nrhs,const ap, writableb,ldb,info. no work arrays, no drama 💅LAPACK_stpttf—void LAPACK_stpttf (char * transr, char * uplo, lapack_int * n, const float * ap, float * arf, lapack_int * info)packedap→ fullarf(or however she likes it,transris right there 😌). const in, writable out,infoat the end.LAPACK_stpttr—void LAPACK_stpttr (char * uplo, lapack_int * n, const float * ap, float * a, lapack_int * lda, lapack_int * info)packedapin, fullaout withlda🌈 plusinfo. short queen.LAPACK_strcon—void LAPACK_strcon (char * norm, char * uplo, char * diag, lapack_int * n, const float * a, lapack_int * lda, float * rcond, float * work, lapack_int * iwork, lapack_int * info)triangular condition estimating, three chars deep 💜 consta, outputrcond, thenwork,iwork,info.LAPACK_strevc—void LAPACK_strevc (char * side, char * howmny, lapack_logical * select, lapack_int * n, const float * t, lapack_int * ldt, float * vl, lapack_int * ldvl, float * vr, lapack_int * ldvr, lapack_int * mm, lapack_int * m, float * work, lapack_int * info)head empty, onlyselect— and NOTE: hereselectislapack_logical *, notconst, unlike her cousinLAPACK_stgevc👀.tis const,vl/vrare not,mm,m,work,info.LAPACK_strexc—void LAPACK_strexc (char * compq, lapack_int * n, float * t, lapack_int * ldt, float * q, lapack_int * ldq, lapack_int * ifst, lapack_int * ilst, float * work, lapack_int * info)one char (compq), thent/qwithldt/ldq, positionsifst/ilst,work,info. no consts, we live dangerously ✨LAPACK_strrfs—void LAPACK_strrfs (char * uplo, char * trans, char * diag, lapack_int * n, lapack_int * nrhs, const float * a, lapack_int * lda, const float * b, lapack_int * ldb, const float * x, lapack_int * ldx, float * ferr, float * berr, float * work, lapack_int * iwork, lapack_int * info)basicallystbrfsbut not banded 🦋 three consts (a,b,x), twof*erroutputs,work,iwork,info.LAPACK_strsen—void LAPACK_strsen (char * job, char * compq, const lapack_logical * select, lapack_int * n, float * t, lapack_int * ldt, float * q, lapack_int * ldq, float * wr, float * wi, lapack_int * m, float * s, float * sep, float * work, lapack_int * lwork, lapack_int * iwork, lapack_int * liwork, lapack_int * info)job,compq,const select, thent,q, thenwr/wi(split again 😭),m,s,sep, and the double troublework+lwork+iwork+liwork, plusinfo. eighteen params, she's booked and busy.LAPACK_strsna—void LAPACK_strsna (char * job, char * howmny, const lapack_logical * select, lapack_int * n, const float * t, lapack_int * ldt, const float * vl, lapack_int * ldvl, const float * vr, lapack_int * ldvr, float * s, float * sep, lapack_int * mm, lapack_int * m, float * work, lapack_int * ldwork, lapack_int * iwork, lapack_int * info)const girlie all over:select,t,vl,vr. outputss,sep,mm,m. and heads up — this one'sworkcomes withldwork(notlwork!) 🙈 plusiworkandinfo.LAPACK_strsyl—void LAPACK_strsyl (char * trana, char * tranb, lapack_int * isgn, lapack_int * m, lapack_int * n, const float * a, lapack_int * lda, const float * b, lapack_int * ldb, float * c, lapack_int * ldc, float * scale, lapack_int * info)TWO trans chars (trana,tranb— the Sylvester special 💅), thenisgn,m,n, consta/b, writablec,scale,info. no work arrays, she's efficient.LAPACK_strtri—void LAPACK_strtri (char * uplo, char * diag, lapack_int * n, float * a, lapack_int * lda, lapack_int * info)six params, in and out, same energy asstptribut unpacked 🎀LAPACK_strtrs—void LAPACK_strtrs (char * uplo, char * trans, char * diag, lapack_int * n, lapack_int * nrhs, const float * a, lapack_int * lda, float * b, lapack_int * ldb, lapack_int * info)the unpacked twin ofstptrs— three chars,n,nrhs,const a, writableb,ldb,info. classic.LAPACK_strttf—void LAPACK_strttf (char * transr, char * uplo, lapack_int * n, const float * a, lapack_int * lda, float * arf, lapack_int * info)fulla(const) → packedarf🦋 she's the reverse ofstfttr, and yes I noticed.LAPACK_strttp—void LAPACK_strttp (char * uplo, lapack_int * n, const float * a, lapack_int * lda, float * ap, lapack_int * info)fulla(const, withlda) → packedap. two chars, two ints, two floats. balanced ✨LAPACK_stzrzf—void LAPACK_stzrzf (lapack_int * m, lapack_int * n, float * a, lapack_int * lda, float * tau, float * work, lapack_int * lwork, lapack_int * info)no chars at all, just straight to business:m,n,a,lda,tau,work,lwork,info🔥
okay and now we cross the threshold into the complex double era 💜🌊 everything below is lapack_complex_double and double — hold my hand, bestie.
LAPACK_zbbcsd—void LAPACK_zbbcsd (char * jobu1, char * jobu2, char * jobv1t, char * jobv2t, char * trans, lapack_int * m, lapack_int * p, lapack_int * q, double * theta, double * phi, lapack_complex_double * u1, lapack_int * ldu1, lapack_complex_double * u2, lapack_int * ldu2, lapack_complex_double * v1t, lapack_int * ldv1t, lapack_complex_double * v2t, lapack_int * ldv2t, double * b11d, double * b11e, double * b12d, double * b12e, double * b21d, double * b21e, double * b22d, double * b22e, double * rwork, lapack_int * lrwork, lapack_int * info)the absolute MONSTER of this page 😭 FIVE chars (jobu1,jobu2,jobv1t,jobv2t,trans), thenm,p,q, thentheta,phi, then four matricesu1,u2,v1t,v2teach with their ownld, then the entireb11d/b11e/b12d/b12e/b21d/b21e/b22d/b22eextended family, thenrwork,lrwork,info. she's giving final boss 👑LAPACK_zbdsqr—void LAPACK_zbdsqr (char * uplo, lapack_int * n, lapack_int * ncvt, lapack_int * nru, lapack_int * ncc, double * d, double * e, lapack_complex_double * vt, lapack_int * ldvt, lapack_complex_double * u, lapack_int * ldu, lapack_complex_double * c, lapack_int * ldc, double * work, lapack_int * info)uplo,n, then the trio of countsncvt,nru,ncc🌸dandeare plaindouble *, the matricesvt,u,care complex withldvt/ldu/ldc, and she closes withworkandinfo. note: nolwork, justwork.LAPACK_zcgesv—void LAPACK_zcgesv (lapack_int * n, lapack_int * nrhs, lapack_complex_double * a, lapack_int * lda, lapack_int * ipiv, lapack_complex_double * b, lapack_int * ldb, lapack_complex_double * x, lapack_int * ldx,…and that's exactly where this chunk of the page ends 😭🫶
no cap, the signature cuts off mid-parameter list right there. that's not me being lazy, that's literally where the source hands off — next part picks it up from lapack_complex_double * x, lapack_int * ldx, and we keep it rolling 💖
...and we're picking right back up mid-signature, bestie — here's the tail end of the prototype we were wrapping up 💖:
lapack_complex_double * work, lapack_complex_float * swork, double *
rwork, lapack_int * iter, lapack_int * info)
LAPACK_zcposv— mixed-precision princess energy, no cap. Takesuploand the wholea/b/x/lda/ldb/ldxcrew, plus aworkbuffer, a single-precisionsworkbestie, adouble * rwork, anitercounter, andinfoso you know what's up. 💅
void LAPACK_zcposv (char * uplo, lapack_int * n, lapack_int * nrhs,
lapack_complex_double * a, lapack_int * lda, lapack_complex_double * b,
lapack_int * ldb, lapack_complex_double * x, lapack_int * ldx,
lapack_complex_double * work, lapack_complex_float * swork, double *
rwork, lapack_int * iter, lapack_int * info)
LAPACK_zgbbrd— the banded-to-bidiagonal serve ✨.vectwalks in, thenm,n,ncc,kl,ku, the band matrixabwithldab, realdande, thenq/ldq,pt/ldpt,cwithldc, and awork+rworkduo for the encore.
void LAPACK_zgbbrd (char * vect, lapack_int * m, lapack_int * n, lapack_int
* ncc, lapack_int * kl, lapack_int * ku, lapack_complex_double * ab,
lapack_int * ldab, double * d, double * e, lapack_complex_double * q,
lapack_int * ldq, lapack_complex_double * pt, lapack_int * ldpt,
lapack_complex_double * c, lapack_int * ldc, lapack_complex_double *
work, double * rwork, lapack_int * info)
LAPACK_zgbcon— condition-number vibe check 🎀.normpicks the flavor,n/kl/kuset the shape,abisconstandldab-strided,ipivisconsttoo, and you hand overanormto getrcondback.workandrworkcome along,inforeports.
void LAPACK_zgbcon (char * norm, lapack_int * n, lapack_int * kl, lapack_int
* ku, const lapack_complex_double * ab, lapack_int * ldab, const
lapack_int * ipiv, double * anorm, double * rcond, lapack_complex_double
* work, double * rwork, lapack_int * info)
LAPACK_zgbequ— equilibration era 🌸.m,n,kl,ku, theconstband matrixabandldab, then out comer,c,rowcnd,colcnd,amax, and yes,info.
void LAPACK_zgbequ (lapack_int * m, lapack_int * n, lapack_int * kl,
lapack_int * ku, const lapack_complex_double * ab, lapack_int * ldab,
double * r, double * c, double * rowcnd, double * colcnd, double * amax,
lapack_int * info)
LAPACK_zgbequb— same squad, but with that extrabbaddie energy 👑. Identical parameter lineup, bestie:r,c,rowcnd,colcnd,amax,info.
void LAPACK_zgbequb (lapack_int * m, lapack_int * n, lapack_int * kl,
lapack_int * ku, const lapack_complex_double * ab, lapack_int * ldab,
double * r, double * c, double * rowcnd, double * colcnd, double * amax,
lapack_int * info)
LAPACK_zgbrfs— refinement o'clock 🔥.trans+n/kl/ku/nrhs, both the originalab/ldaband the factoredafb/ldafb, theconstipiv, thenconstb/ldbin andx/ldxout. It gives youferrandberr(the error baddies), withwork,rwork,info.
void LAPACK_zgbrfs (char * trans, lapack_int * n, lapack_int * kl,
lapack_int * ku, lapack_int * nrhs, const lapack_complex_double * ab,
lapack_int * ldab, const lapack_complex_double * afb, lapack_int *
ldafb, const lapack_int * ipiv, const lapack_complex_double * b,
lapack_int * ldb, lapack_complex_double * x, lapack_int * ldx, double *
ferr, double * berr, lapack_complex_double * work, double * rwork,
lapack_int * info)
LAPACK_zgbrfsx— the extended, main-character version of the above 😭. Addsequed,const double * randconst double * c, plusrcond,n_err_bnds,err_bnds_norm,err_bnds_comp,nparamsandparams. Everything else? Still there, still iconic.
void LAPACK_zgbrfsx (char * trans, char * equed, lapack_int * n, lapack_int
* kl, lapack_int * ku, lapack_int * nrhs, const lapack_complex_double *
ab, lapack_int * ldab, const lapack_complex_double * afb, lapack_int *
ldafb, const lapack_int * ipiv, const double * r, const double * c,
const lapack_complex_double * b, lapack_int * ldb, lapack_complex_double
* x, lapack_int * ldx, double * rcond, double * berr, lapack_int *
n_err_bnds, double * err_bnds_norm, double * err_bnds_comp, lapack_int *
nparams, double * params, lapack_complex_double * work, double * rwork,
lapack_int * info)
LAPACK_zgbsv— solving szn 🦋.n/kl/ku/nrhs, the mutableabwithldab,ipiv,b/ldb, andinfoto spill the tea at the end.
void LAPACK_zgbsv (lapack_int * n, lapack_int * kl, lapack_int * ku,
lapack_int * nrhs, lapack_complex_double * ab, lapack_int * ldab,
lapack_int * ipiv, lapack_complex_double * b, lapack_int * ldb,
lapack_int * info)
LAPACK_zgbsvx— the "also tell me about the error" edition 💀.factdecides if you're bringing factors,transpicks the direction,equed+r+cfor equilibration, and out comercond,ferr,berr.work,rwork,infoas always.
void LAPACK_zgbsvx (char * fact, char * trans, lapack_int * n, lapack_int *
kl, lapack_int * ku, lapack_int * nrhs, lapack_complex_double * ab,
lapack_int * ldab, lapack_complex_double * afb, lapack_int * ldafb,
lapack_int * ipiv, char * equed, double * r, double * c,
lapack_complex_double * b, lapack_int * ldb, lapack_complex_double * x,
lapack_int * ldx, double * rcond, double * ferr, double * berr,
lapack_complex_double * work, double * rwork, lapack_int * info)
LAPACK_zgbsvxx— the XXL version, obviously 🙈. Addsrpvgrw,n_err_bnds,err_bnds_norm,err_bnds_comp,nparamsandparams, and it's still packingrcondandberr. Big main character energy.
void LAPACK_zgbsvxx (char * fact, char * trans, lapack_int * n, lapack_int *
kl, lapack_int * ku, lapack_int * nrhs, lapack_complex_double * ab,
lapack_int * ldab, lapack_complex_double * afb, lapack_int * ldafb,
lapack_int * ipiv, char * equed, double * r, double * c,
lapack_complex_double * b, lapack_int * ldb, lapack_complex_double * x,
lapack_int * ldx, double * rcond, double * rpvgrw, double * berr,
lapack_int * n_err_bnds, double * err_bnds_norm, double * err_bnds_comp,
lapack_int * nparams, double * params, lapack_complex_double * work,
double * rwork, lapack_int * info)
LAPACK_zgbtrf— the factorization one, genuinely obsessed ✨.m,n,kl,ku, the in-placeab/ldab, theipivpivot squad, andinfo.
void LAPACK_zgbtrf (lapack_int * m, lapack_int * n, lapack_int * kl,
lapack_int * ku, lapack_complex_double * ab, lapack_int * ldab,
lapack_int * ipiv, lapack_int * info)
LAPACK_zgbtrs— solving with the factors you already made 🫶.trans,n,kl,ku,nrhs,constab/ldab,constipiv, thenb/ldbgets overwritten like it's nothing, andinforeports.
void LAPACK_zgbtrs (char * trans, lapack_int * n, lapack_int * kl,
lapack_int * ku, lapack_int * nrhs, const lapack_complex_double * ab,
lapack_int * ldab, const lapack_int * ipiv, lapack_complex_double * b,
lapack_int * ldb, lapack_int * info)
LAPACK_zgebak— balancing but make it a callback era 🎀.jobandsidechoose the vibe,n/ilo/ihigive the range,const double * scalecomes in,mandv/ldvget worked on,infofinishes.
void LAPACK_zgebak (char * job, char * side, lapack_int * n, lapack_int *
ilo, lapack_int * ihi, const double * scale, lapack_int * m,
lapack_complex_double * v, lapack_int * ldv, lapack_int * info)
LAPACK_zgebal— the balancing origin story 🌈.job,n, the matrixa/lda, theniloandihicome out, plus thedouble * scalearray, andinfo.
void LAPACK_zgebal (char * job, lapack_int * n, lapack_complex_double * a,
lapack_int * lda, lapack_int * ilo, lapack_int * ihi, double * scale,
lapack_int * info)
LAPACK_zgebrd— bidiagonal reduction, the classic 💅.m,n,a/lda, real outputsdande, thetauqandtaupbesties,work/lwork,info.
void LAPACK_zgebrd (lapack_int * m, lapack_int * n, lapack_complex_double *
a, lapack_int * lda, double * d, double * e, lapack_complex_double *
tauq, lapack_complex_double * taup, lapack_complex_double * work,
lapack_int * lwork, lapack_int * info)
LAPACK_zgecon— condition number, general edition ⭐.norm,n,const a/lda,anormin,rcondout, pluswork,rwork,info.
void LAPACK_zgecon (char * norm, lapack_int * n, const lapack_complex_double
* a, lapack_int * lda, double * anorm, double * rcond,
lapack_complex_double * work, double * rwork, lapack_int * info)
LAPACK_zgeequ— equilibration, general flavor 🌸.m,n,const a/lda→r,c,rowcnd,colcnd,amax,info.
void LAPACK_zgeequ (lapack_int * m, lapack_int * n, const
lapack_complex_double * a, lapack_int * lda, double * r, double * c,
double * rowcnd, double * colcnd, double * amax, lapack_int * info)
LAPACK_zgeequb— thebversion, same fit, still slaying 💜. Same exact parameter party.
void LAPACK_zgeequb (lapack_int * m, lapack_int * n, const
lapack_complex_double * a, lapack_int * lda, double * r, double * c,
double * rowcnd, double * colcnd, double * amax, lapack_int * info)
LAPACK_zgees— Schur-ish serve with aselectcallback 😭.jobvs, thesortflag,LAPACK_Z_SELECT1 select,n,a/lda,sdim,w,vs/ldvs,work/lwork,rwork, and alapack_logical * bwork, theninfo.
void LAPACK_zgees (char * jobvs, char * sort, LAPACK_Z_SELECT1 select,
lapack_int * n, lapack_complex_double * a, lapack_int * lda, lapack_int
* sdim, lapack_complex_double * w, lapack_complex_double * vs,
lapack_int * ldvs, lapack_complex_double * work, lapack_int * lwork,
double * rwork, lapack_logical * bwork, lapack_int * info)
LAPACK_zgeesx— the extra version, and it broughtsense🙈. Also blessed us withrcondeandrcondvon top of the wholezgeeslineup.
void LAPACK_zgeesx (char * jobvs, char * sort, LAPACK_Z_SELECT1 select, char
* sense, lapack_int * n, lapack_complex_double * a, lapack_int * lda,
lapack_int * sdim, lapack_complex_double * w, lapack_complex_double *
vs, lapack_int * ldvs, double * rconde, double * rcondv,
lapack_complex_double * work, lapack_int * lwork, double * rwork,
lapack_logical * bwork, lapack_int * info)
LAPACK_zgeev— eigenvalues and eigenvectors, the moment 🔥.jobvlandjobvrfor which vectors you want,n,a/lda, thenw,vl/ldvl,vr/ldvr,work/lwork,rwork,info.
void LAPACK_zgeev (char * jobvl, char * jobvr, lapack_int * n,
lapack_complex_double * a, lapack_int * lda, lapack_complex_double * w,
lapack_complex_double * vl, lapack_int * ldvl, lapack_complex_double *
vr, lapack_int * ldvr, lapack_complex_double * work, lapack_int * lwork,
double * rwork, lapack_int * info)
LAPACK_zgeevx— the deluxezgeev, literally 👑.balancplussense, thejobvl/jobvrduo,ilo/ihi,scale,abnrm,rconde,rcondv, and the usualwork/lwork+rwork+info.
void LAPACK_zgeevx (char * balanc, char * jobvl, char * jobvr, char * sense,
lapack_int * n, lapack_complex_double * a, lapack_int * lda,
lapack_complex_double * w, lapack_complex_double * vl, lapack_int *
ldvl, lapack_complex_double * vr, lapack_int * ldvr, lapack_int * ilo,
lapack_int * ihi, double * scale, double * abnrm, double * rconde,
double * rcondv, lapack_complex_double * work, lapack_int * lwork,
double * rwork, lapack_int * info)
LAPACK_zgehrd— Hessenberg reduction, he's a real one 🦋.n,ilo,ihi,a/lda, thetauarray,work/lwork,info.
void LAPACK_zgehrd (lapack_int * n, lapack_int * ilo, lapack_int * ihi,
lapack_complex_double * a, lapack_int * lda, lapack_complex_double *
tau, lapack_complex_double * work, lapack_int * lwork, lapack_int *
info)
LAPACK_zgejsv— the SVD with a whole personality quiz of flags 😭.joba,jobu,jobv,jobr,jobt,jobp, thenm/n,a/lda,sva,u/ldu,v/ldv,cwork/lwork,work/lrwork,iwork,info. Not me counting them all.
void LAPACK_zgejsv (char * joba, char * jobu, char * jobv, char * jobr, char
* jobt, char * jobp, lapack_int * m, lapack_int * n,
lapack_complex_double * a, lapack_int * lda, double * sva,
lapack_complex_double * u, lapack_int * ldu, lapack_complex_double * v,
lapack_int * ldv, lapack_complex_double * cwork, lapack_int * lwork,
double * work, lapack_int * lrwork, lapack_int * iwork, lapack_int *
info)
LAPACK_zgelq— LQ representation, periodt 💅.m,n,a/lda, thetarray withtsize,work/lwork,info.
void LAPACK_zgelq (lapack_int * m, lapack_int * n, lapack_complex_double *
a, lapack_int * lda, lapack_complex_double * t, lapack_int * tsize,
lapack_complex_double * work, lapack_int * lwork, lapack_int * info)
LAPACK_zgelq2— the little unblocked sibling 🎀.m,n,a/lda,tau,work(nolworkbestie, sorry),info.
void LAPACK_zgelq2 (lapack_int * m, lapack_int * n, lapack_complex_double *
a, lapack_int * lda, lapack_complex_double * tau, lapack_complex_double
* work, lapack_int * info)
LAPACK_zgelqf— the blocked one, and yes it haslwork🌟.m,n,a/lda,tau,work/lwork,info.
void LAPACK_zgelqf (lapack_int * m, lapack_int * n, lapack_complex_double *
a, lapack_int * lda, lapack_complex_double * tau, lapack_complex_double
* work, lapack_int * lwork, lapack_int * info)
LAPACK_zgels— least squares, the whole point let's be honest 😌.trans,m/n/nrhs,a/lda,b/ldb,work/lwork,info.
void LAPACK_zgels (char * trans, lapack_int * m, lapack_int * n, lapack_int
* nrhs, lapack_complex_double * a, lapack_int * lda,
lapack_complex_double * b, lapack_int * ldb, lapack_complex_double *
work, lapack_int * lwork, lapack_int * info)
LAPACK_zgelsd—dfor divide-and-conquer, and it's giving extra buffers 🫶. Pulls ins,rcond,rank,work/lwork,rwork,iwork,info.
void LAPACK_zgelsd (lapack_int * m, lapack_int * n, lapack_int * nrhs,
lapack_complex_double * a, lapack_int * lda, lapack_complex_double * b,
lapack_int * ldb, double * s, double * rcond, lapack_int * rank,
lapack_complex_double * work, lapack_int * lwork, double * rwork,
lapack_int * iwork, lapack_int * info)
LAPACK_zgelss— same energy,ssflavor, noiworkthis time 💀.s,rcond,rank,work/lwork,rwork,info— that's the lineup.
void LAPACK_zgelss (lapack_int * m, lapack_int * n, lapack_int * nrhs,
lapack_complex_double * a, lapack_int * lda, lapack_complex_double * b,
lapack_int * ldb, double * s, double * rcond, lapack_int * rank,
lapack_complex_double * work, lapack_int * lwork, double * rwork,
lapack_int * info)
LAPACK_zgelsy— theyone, and it broughtjpvtto the party 🍓. Plusrcond,rank,work/lwork,rwork,info.
void LAPACK_zgelsy (lapack_int * m, lapack_int * n, lapack_int * nrhs,
lapack_complex_double * a, lapack_int * lda, lapack_complex_double * b,
lapack_int * ldb, lapack_int * jpvt, double * rcond, lapack_int * rank,
lapack_complex_double * work, lapack_int * lwork, double * rwork,
lapack_int * info)
LAPACK_zgemlq— applies the LQ thing, side and trans and all 💜.side,trans,m/n/k,const a/lda,const t/tsize, andc/ldcgets the glow-up, withwork/lwork,info.
void LAPACK_zgemlq (char * side, char * trans, lapack_int * m, lapack_int *
n, lapack_int * k, const lapack_complex_double * a, lapack_int * lda,
const lapack_complex_double * t, lapack_int * tsize,
lapack_complex_double * c, lapack_int * ldc, lapack_complex_double *
work, lapack_int * lwork, lapack_int * info)
LAPACK_zgemqr— same deal but the QR sibling 🌈. Identical parameter squad:side,trans,m/n/k,const a/lda,const t/tsize,c/ldc,work/lwork,info.
void LAPACK_zgemqr (char * side, char * trans, lapack_int * m, lapack_int *
n, lapack_int * k, const lapack_complex_double * a, lapack_int * lda,
const lapack_complex_double * t, lapack_int * tsize,
lapack_complex_double * c, lapack_int * ldc, lapack_complex_double *
work, lapack_int * lwork, lapack_int * info)
LAPACK_zgemqrt— the blockytversion, extranbfor spice ✨.v/ldvinstead ofa, plusconst t/ldt,c/ldc,work,info.
void LAPACK_zgemqrt (char * side, char * trans, lapack_int * m, lapack_int *
n, lapack_int * k, lapack_int * nb, const lapack_complex_double * v,
lapack_int * ldv, const lapack_complex_double * t, lapack_int * ldt,
lapack_complex_double * c, lapack_int * ldc, lapack_complex_double *
work, lapack_int * info)
LAPACK_zgeqlf— QL factorization, underrated honestly 🌸.m,n,a/lda,tau,work/lwork,info.
void LAPACK_zgeqlf (lapack_int * m, lapack_int * n, lapack_complex_double *
a, lapack_int * lda, lapack_complex_double * tau, lapack_complex_double
* work, lapack_int * lwork, lapack_int * info)
LAPACK_zgeqp3— thep3version withjpvtandrwork🎀.m/n,a/lda,jpvt,tau,work/lwork,rwork,info.
void LAPACK_zgeqp3 (lapack_int * m, lapack_int * n, lapack_complex_double *
a, lapack_int * lda, lapack_int * jpvt, lapack_complex_double * tau,
lapack_complex_double * work, lapack_int * lwork, double * rwork,
lapack_int * info)
LAPACK_zgeqpf— the older one, still hasjpvtandrwork, but nolwork😭.
void LAPACK_zgeqpf (lapack_int * m, lapack_int * n, lapack_complex_double *
a, lapack_int * lda, lapack_int * jpvt, lapack_complex_double * tau,
lapack_complex_double * work, double * rwork, lapack_int * info)
LAPACK_zgeqr— and we're cutting off right in the middle of this icon's parameter list, genuinely rude of the page break 💀:
void LAPACK_zgeqr (lapack_int * m, lapack_int * n, lapack_complex_double *
hold that thought bestie, the rest of LAPACK_zgeqr is waiting for you in the next part 🫶✨
Okay so this stretch is literally just the parade of z-squad declarations — every single one is lapack_complex_double everything, every argument is a pointer, and info is always last like the group chat member who always shows up right at the end 💅. Let's go through them one by one, no skipping, no cap.
First, the tail end of the function that got cut off at the end of the last part — pick up right here:
a, lapack_int * lda, lapack_complex_double * t, lapack_int * tsize,
lapack_complex_double * work, lapack_int * lwork, lapack_int * info)
✨ the QR crew 🎀
void LAPACK_zgeqr2 (lapack_int * m, lapack_int * n, lapack_complex_double *
a, lapack_int * lda, lapack_complex_double * tau, lapack_complex_double
* work, lapack_int * info)
void LAPACK_zgeqrf (lapack_int * m, lapack_int * n, lapack_complex_double *
a, lapack_int * lda, lapack_complex_double * tau, lapack_complex_double
* work, lapack_int * lwork, lapack_int * info)
void LAPACK_zgeqrfp (lapack_int * m, lapack_int * n, lapack_complex_double *
a, lapack_int * lda, lapack_complex_double * tau, lapack_complex_double
* work, lapack_int * lwork, lapack_int * info)
zgeqr2 is the baby version (no lwork, it just brings its own work), and zgeqrf / zgeqrfp are the iconique ones with the lwork glow-up. Note the p on the end of zgeqrfp — yes it matters, don't drop it, it's giving ✨different function✨ energy.
Then the blocked / recursive besties:
void LAPACK_zgeqrt (lapack_int * m, lapack_int * n, lapack_int * nb,
lapack_complex_double * a, lapack_int * lda, lapack_complex_double * t,
lapack_int * ldt, lapack_complex_double * work, lapack_int * info)
void LAPACK_zgeqrt2 (lapack_int * m, lapack_int * n, lapack_complex_double *
a, lapack_int * lda, lapack_complex_double * t, lapack_int * ldt,
lapack_int * info)
void LAPACK_zgeqrt3 (lapack_int * m, lapack_int * n, lapack_complex_double *
a, lapack_int * lda, lapack_complex_double * t, lapack_int * ldt,
lapack_int * info)
The t/ldt duo is lowkey their whole personality 🦋. zgeqrt gets a nb (block size) and a work buffer; zgeqrt2 and zgeqrt3 are the no-work versions — they said "we travel light."
And rounding out the family:
void LAPACK_zgerqf (lapack_int * m, lapack_int * n, lapack_complex_double *
a, lapack_int * lda, lapack_complex_double * tau, lapack_complex_double
* work, lapack_int * lwork, lapack_int * info)
Same shape as zgeqrf, note the f→q swap in the name, bestie, they are not the same function, do not confuse them 💀.
✨ refinement era 🔥
void LAPACK_zgerfs (char * trans, lapack_int * n, lapack_int * nrhs, const
lapack_complex_double * a, lapack_int * lda, const lapack_complex_double
* af, lapack_int * ldaf, const lapack_int * ipiv, const
lapack_complex_double * b, lapack_int * ldb, lapack_complex_double * x,
lapack_int * ldx, double * ferr, double * berr, lapack_complex_double *
work, double * rwork, lapack_int * info)
Look at zgerfs — it's bringing both a lapack_complex_double * work and a double * rwork, plus the error twins ferr and berr. Oh she's thorough 💅. Also peep the const on a, af, ipiv, b but not on x — because x is the one getting refined, she's the main character.
void LAPACK_zgerfsx (char * trans, char * equed, lapack_int * n, lapack_int
* nrhs, const lapack_complex_double * a, lapack_int * lda, const
lapack_complex_double * af, lapack_int * ldaf, const lapack_int * ipiv,
const double * r, const double * c, const lapack_complex_double * b,
lapack_int * ldb, lapack_complex_double * x, lapack_int * ldx, double *
rcond, double * berr, lapack_int * n_err_bnds, double * err_bnds_norm,
double * err_bnds_comp, lapack_int * nparams, double * params,
lapack_complex_double * work, double * rwork, lapack_int * info)
And then zgerfsx shows up with twenty-four arguments like it's nothing 😭. equed, r, c, rcond, n_err_bnds, err_bnds_norm, err_bnds_comp, nparams, params — she ate and left no crumbs. This is the deluxe "x" edition, periodt.
✨ SVD supremacy 👑🌈
void LAPACK_zgesdd (char * jobz, lapack_int * m, lapack_int * n,
lapack_complex_double * a, lapack_int * lda, double * s,
lapack_complex_double * u, lapack_int * ldu, lapack_complex_double * vt,
lapack_int * ldvt, lapack_complex_double * work, lapack_int * lwork,
double * rwork, lapack_int * iwork, lapack_int * info)
zgesdd is a whole vibe — jobz controls both u and vt at once (one char to rule them all), and she's bringing work, rwork and iwork. Three buffers. Three. Iconic ✨.
void LAPACK_zgesvd (char * jobu, char * jobvt, lapack_int * m, lapack_int *
n, lapack_complex_double * a, lapack_int * lda, double * s,
lapack_complex_double * u, lapack_int * ldu, lapack_complex_double * vt,
lapack_int * ldvt, lapack_complex_double * work, lapack_int * lwork,
double * rwork, lapack_int * info)
zgesvd is the OG who does it the other way — separate jobu and jobvt chars, and no iwork because she's lowkey chill. Note the singular values s are plain double *, not complex — yeah, they're real like that 💖.
void LAPACK_zgesvdx (char * jobu, char * jobvt, char * range, lapack_int *
m, lapack_int * n, lapack_complex_double * a, lapack_int * lda, double *
vl, double * vu, lapack_int * il, lapack_int * iu, lapack_int * ns,
double * s, lapack_complex_double * u, lapack_int * ldu,
lapack_complex_double * vt, lapack_int * ldvt, lapack_complex_double *
work, lapack_int * lwork, double * rwork, lapack_int * iwork, lapack_int
* info)
zgesvdx said "let me pick which ones" — range, vl, vu, il, iu, and out comes ns (how many she picked, slay). Full work + rwork + iwork loadout again.
void LAPACK_zgesvj (char * joba, char * jobu, char * jobv, lapack_int * m,
lapack_int * n, lapack_complex_double * a, lapack_int * lda, double *
sva, lapack_int * mv, lapack_complex_double * v, lapack_int * ldv,
lapack_complex_double * cwork, lapack_int * lwork, double * rwork,
lapack_int * lrwork, lapack_int * info)
Now zgesvj is different and she wants you to know it 🦋 — three job chars (joba, jobu, jobv), sva instead of s, mv, and her workspace is literally named cwork with both lwork and lrwork (that's rwork's length, separate from work's length). Do not assume the usual names, bestie, read them again, iykyk.
✨ the solve-and-invert girlies 💜
void LAPACK_zgesv (lapack_int * n, lapack_int * nrhs, lapack_complex_double
* a, lapack_int * lda, lapack_int * ipiv, lapack_complex_double * b,
lapack_int * ldb, lapack_int * info)
zgesv is refreshingly short — no work, no lwork, just vibes and ipiv. A minimalist queen 🌸.
void LAPACK_zgesvx (char * fact, char * trans, lapack_int * n, lapack_int *
nrhs, lapack_complex_double * a, lapack_int * lda, lapack_complex_double
* af, lapack_int * ldaf, lapack_int * ipiv, char * equed, double * r,
double * c, lapack_complex_double * b, lapack_int * ldb,
lapack_complex_double * x, lapack_int * ldx, double * rcond, double *
ferr, double * berr, lapack_complex_double * work, double * rwork,
lapack_int * info)
zgesvx = the expert edition. fact, trans, af, ldaf, equed, r, c, rcond, ferr, berr, work + rwork. She is not playing around 🎀.
void LAPACK_zgesvxx (char * fact, char * trans, lapack_int * n, lapack_int *
nrhs, lapack_complex_double * a, lapack_int * lda, lapack_complex_double
* af, lapack_int * ldaf, lapack_int * ipiv, char * equed, double * r,
double * c, lapack_complex_double * b, lapack_int * ldb,
lapack_complex_double * x, lapack_int * ldx, double * rcond, double *
rpvgrw, double * berr, lapack_int * n_err_bnds, double * err_bnds_norm,
double * err_bnds_comp, lapack_int * nparams, double * params,
lapack_complex_double * work, double * rwork, lapack_int * info)
And zgesvxx is zgesvx with the double x, aka the "I have trust issues" build 😭 — she swaps ferr out for rpvgrw and adds the whole error-bound situation: n_err_bnds, err_bnds_norm, err_bnds_comp, nparams, params. Absolutely unhinged in the best way. Obsessed.
✨ LU central 🧚
void LAPACK_zgetf2 (lapack_int * m, lapack_int * n, lapack_complex_double *
a, lapack_int * lda, lapack_int * ipiv, lapack_int * info)
zgetf2 — tiny, unblocked, straight to the point. No work at all. She said "I don't need a buffer, I need results" ✨.
void LAPACK_zgetrf (lapack_int * m, lapack_int * n, lapack_complex_double *
a, lapack_int * lda, lapack_int * ipiv, lapack_int * info)
void LAPACK_zgetrf2 (lapack_int * m, lapack_int * n, lapack_complex_double *
a, lapack_int * lda, lapack_int * ipiv, lapack_int * info)
zgetrf and zgetrf2 are literally identical signatures — same m, n, a, lda, ipiv, info, in that exact order. Yes bestie, that trailing 2 is the entire difference in the declaration. Not a typo, do not "fix" it 🙈.
void LAPACK_zgetri (lapack_int * n, lapack_complex_double * a, lapack_int *
lda, const lapack_int * ipiv, lapack_complex_double * work, lapack_int *
lwork, lapack_int * info)
void LAPACK_zgetrs (char * trans, lapack_int * n, lapack_int * nrhs, const
lapack_complex_double * a, lapack_int * lda, const lapack_int * ipiv,
lapack_complex_double * b, lapack_int * ldb, lapack_int * info)
zgetri takes n only (no m, she's square and she knows it 💅) and ipiv is const because she's only reading those pivots. zgetrs has trans, nrhs, and a const a + const ipiv while b stays mutable — she's doing the thing.
void LAPACK_zgetsls (char * trans, lapack_int * m, lapack_int * n,
lapack_int * nrhs, lapack_complex_double * a, lapack_int * lda,
lapack_complex_double * b, lapack_int * ldb, lapack_complex_double *
work, lapack_int * lwork, lapack_int * info)
zgetsls — trans, m, n, nrhs, a, lda, b, ldb, work, lwork, info. Clean, no ipiv in sight. Sometimes you just don't need pivots, okay? 🫶
✨ balancing act 🌈
void LAPACK_zggbak (char * job, char * side, lapack_int * n, lapack_int *
ilo, lapack_int * ihi, const double * lscale, const double * rscale,
lapack_int * m, lapack_complex_double * v, lapack_int * ldv, lapack_int
* info)
void LAPACK_zggbal (char * job, lapack_int * n, lapack_complex_double * a,
lapack_int * lda, lapack_complex_double * b, lapack_int * ldb,
lapack_int * ilo, lapack_int * ihi, double * lscale, double * rscale,
double * work, lapack_int * info)
Cute detail: zggbak reads lscale and rscale as const double * (hands off, she's just applying them) while zggbal produces them as plain double *. Also zggbak has side, m and v/ldv; zggbal has a/lda, b/ldb and a work. Sisters, not twins 💖. Both carry ilo and ihi, no exceptions.
✨ generalized eigen, the whole saga 👑💀
void LAPACK_zgges (char * jobvsl, char * jobvsr, char * sort,
LAPACK_Z_SELECT2 selctg, lapack_int * n, lapack_complex_double * a,
lapack_int * lda, lapack_complex_double * b, lapack_int * ldb,
lapack_int * sdim, lapack_complex_double * alpha, lapack_complex_double
* beta, lapack_complex_double * vsl, lapack_int * ldvsl,
lapack_complex_double * vsr, lapack_int * ldvsr, lapack_complex_double *
work, lapack_int * lwork, double * rwork, lapack_logical * bwork,
lapack_int * info)
Okay so zgges — jobvsl, jobvsr, sort, and a LAPACK_Z_SELECT2 selctg callback in the mix (yes, that's a function pointer argument, she's fancy 🎀). Then sdim, the alpha/beta pair, vsl/ldvsl, vsr/ldvsr, work/lwork, rwork, and a lapack_logical * bwork — note that's not a lapack_int, it's lapack_logical, don't get it twisted 🙈.
void LAPACK_zgges3 (char * jobvsl, char * jobvsr, char * sort,
LAPACK_Z_SELECT2 selctg, lapack_int * n, lapack_complex_double * a,
lapack_int * lda, lapack_complex_double * b, lapack_int * ldb,
lapack_int * sdim, lapack_complex_double * alpha, lapack_complex_double
* beta, lapack_complex_double * vsl, lapack_int * ldvsl,
lapack_complex_double * vsr, lapack_int * ldvsr, lapack_complex_double *
work, lapack_int * lwork, double * rwork, lapack_logical * bwork,
lapack_int * info)
zgges3 is character-for-character the same signature as zgges — the 3 is doing all the work, and honestly, good for her ⭐.
void LAPACK_zggesx (char * jobvsl, char * jobvsr, char * sort,
LAPACK_Z_SELECT2 selctg, char * sense, lapack_int * n,
lapack_complex_double * a, lapack_int * lda, lapack_complex_double * b,
lapack_int * ldb, lapack_int * sdim, lapack_complex_double * alpha,
lapack_complex_double * beta, lapack_complex_double * vsl, lapack_int *
ldvsl, lapack_complex_double * vsr, lapack_int * ldvsr, double * rconde,
double * rcondv, lapack_complex_double * work, lapack_int * lwork,
double * rwork, lapack_int * iwork, lapack_int * liwork, lapack_logical
* bwork, lapack_int * info)
zggesx said "add sense" and then kept going — rconde, rcondv, and iwork + liwork. Now there's lwork, liwork, and she still wants bwork. Three length params, bestie. THREE. 😭 Keep them straight.
void LAPACK_zggev (char * jobvl, char * jobvr, lapack_int * n,
lapack_complex_double * a, lapack_int * lda, lapack_complex_double * b,
lapack_int * ldb, lapack_complex_double * alpha, lapack_complex_double *
beta, lapack_complex_double * vl, lapack_int * ldvl,
lapack_complex_double * vr, lapack_int * ldvr, lapack_complex_double *
work, lapack_int * lwork, double * rwork, lapack_int * info)
void LAPACK_zggev3 (char * jobvl, char * jobvr, lapack_int * n,
lapack_complex_double * a, lapack_int * lda, lapack_complex_double * b,
lapack_int * ldb, lapack_complex_double * alpha, lapack_complex_double *
beta, lapack_complex_double * vl, lapack_int * ldvl,
lapack_complex_double * vr, lapack_int * ldvr, lapack_complex_double *
work, lapack_int * lwork, double * rwork, lapack_int * info)
zggev and zggev3 — same deal, identical signatures, the 3 is the whole plot twist 🌸. Note these use jobvl/jobvr (no s!) versus zgges's jobvsl/jobvsr. One tiny s difference and it's a whole different function. Be so serious right now 💀.
void LAPACK_zggevx (char * balanc, char * jobvl, char * jobvr, char * sense,
lapack_int * n, lapack_complex_double * a, lapack_int * lda,
lapack_complex_double * b, lapack_int * ldb, lapack_complex_double *
alpha, lapack_complex_double * beta, lapack_complex_double * vl,
lapack_int * ldvl, lapack_complex_double * vr, lapack_int * ldvr,
lapack_int * ilo, lapack_int * ihi, double * lscale, double * rscale,
double * abnrm, double * bbnrm, double * rconde, double * rcondv,
lapack_complex_double * work, lapack_int * lwork, double * rwork,
lapack_int * iwork, lapack_logical * bwork, lapack_int * info)
zggevx is the final boss 😤 — balanc, jobvl, jobvr, sense, then ilo, ihi, lscale, rscale, abnrm, bbnrm, rconde, rcondv, plus work/lwork, rwork, iwork, bwork. She has everything. Absolute main character energy, crown emoji, no notes 👑.
✨ the generalized least-squares / QZ corner 🫶🦋
void LAPACK_zggglm (lapack_int * n, lapack_int * m, lapack_int * p,
lapack_complex_double * a, lapack_int * lda, lapack_complex_double * b,
lapack_int * ldb, lapack_complex_double * d, lapack_complex_double * x,
lapack_complex_double * y, lapack_complex_double * work, lapack_int *
lwork, lapack_int * info)
zggglm — peep the order: n, then m, then p. Not m, n, p. It's n first, bestie, I promise, look again 🙈. Then a/lda, b/ldb, d, x, y, work/lwork, info.
void LAPACK_zgghd3 (char * compq, char * compz, lapack_int * n, lapack_int *
ilo, lapack_int * ihi, lapack_complex_double * a, lapack_int * lda,
lapack_complex_double * b, lapack_int * ldb, lapack_complex_double * q,
lapack_int * ldq, lapack_complex_double * z, lapack_int * ldz,
lapack_complex_double * work, lapack_int * lwork, lapack_int * info)
void LAPACK_zgghrd (char * compq, char * compz, lapack_int * n, lapack_int *
ilo, lapack_int * ihi, lapack_complex_double * a, lapack_int * lda,
lapack_complex_double * b, lapack_int * ldb, lapack_complex_double * q,
lapack_int * ldq, lapack_complex_double * z, lapack_int * ldz,
lapack_int * info)
zgghd3 vs zgghrd — the only difference is that zgghd3 has work + lwork and zgghrd doesn't. Everything before info is identical: compq, compz, n, ilo, ihi, a, lda, b, ldb, q, ldq, z, ldz. Cute. Same outfit, one's just carrying a bag 💅.
void LAPACK_zgglse (lapack_int * m, lapack_int * n, lapack_int * p,
lapack_complex_double * a, lapack_int * lda, lapack_complex_double * b,
lapack_int * ldb, lapack_complex_double * c, lapack_complex_double * d,
lapack_complex_double * x, lapack_complex_double * work, lapack_int *
lwork, lapack_int * info)
zgglse flips it back — here it's m, n, p (unlike zggglm's n, m, p, and yes that's on purpose, don't @ me). Then a, b, c, d, x, work/lwork, info. c and d, both present, both real 💖.
void LAPACK_zggqrf (lapack_int * n, lapack_int * m, lapack_int * p,
lapack_complex_double * a, lapack_int * lda, lapack_complex_double *
taua, lapack_complex_double * b, lapack_int * ldb, lapack_complex_double
* taub, lapack_complex_double * work, lapack_int * lwork, lapack_int *
info)
And we close this batch with zggqrf — n, m, p again (matches zggglm's order, slay), the taua/taub twin situation (one tau for a, one for b, matching her a/lda and b/ldb), then work/lwork/info. That's the whole run for this part ✨🎀
LAPACK_zggrqf
void LAPACK_zggrqf (lapack_int * m, lapack_int * p, lapack_int * n,
lapack_complex_double * a, lapack_int * lda, lapack_complex_double *
taua, lapack_complex_double * b, lapack_int * ldb, lapack_complex_double
* taub, lapack_complex_double * work, lapack_int * lwork, lapack_int *
info)
okay so this one's giving "generalized RQ factorization of a complex pair" energy — it factors [A; B] with that m×n a and p×n b, spits out taua and taub on the side, and does all its scratch work in work with size lwork. info is your little status bestie at the end. 🎀
LAPACK_zggsvd
void LAPACK_zggsvd (char * jobu, char * jobv, char * jobq, lapack_int * m,
lapack_int * n, lapack_int * p, lapack_int * k, lapack_int * l,
lapack_complex_double * a, lapack_int * lda, lapack_complex_double * b,
lapack_int * ldb, double * alpha, double * beta, lapack_complex_double *
u, lapack_int * ldu, lapack_complex_double * v, lapack_int * ldv,
lapack_complex_double * q, lapack_int * ldq, lapack_complex_double *
work, double * rwork, lapack_int * iwork, lapack_int * info)
the original complex generalized SVD, no cap — jobu/jobv/jobq tell it which unitary matrices you actually want, k and l come back as the effective rank and triangular part indices, and alpha/beta carry the generalized singular values. note: no lwork here, it's the legacy vibe. 💅
LAPACK_zggsvd3
void LAPACK_zggsvd3 (char * jobu, char * jobv, char * jobq, lapack_int * m,
lapack_int * n, lapack_int * p, lapack_int * k, lapack_int * l,
lapack_complex_double * a, lapack_int * lda, lapack_complex_double * b,
lapack_int * ldb, double * alpha, double * beta, lapack_complex_double *
u, lapack_int * ldu, lapack_complex_double * v, lapack_int * ldv,
lapack_complex_double * q, lapack_int * ldq, lapack_complex_double *
work, lapack_int * lwork, double * rwork, lapack_int * iwork, lapack_int
* info)
literally the glow-up of LAPACK_zggsvd — same whole generalized-SVD moment but now it takes lwork, so you can actually tell it how much work space it gets. the 3 is the main-character upgrade, periodt. ✨
LAPACK_zggsvp
void LAPACK_zggsvp (char * jobu, char * jobv, char * jobq, lapack_int * m,
lapack_int * p, lapack_int * n, lapack_complex_double * a, lapack_int *
lda, lapack_complex_double * b, lapack_int * ldb, double * tola, double
* tolb, lapack_int * k, lapack_int * l, lapack_complex_double * u,
lapack_int * ldu, lapack_complex_double * v, lapack_int * ldv,
lapack_complex_double * q, lapack_int * ldq, lapack_int * iwork, double
* rwork, lapack_complex_double * tau, lapack_complex_double * work,
lapack_int * info)
the "pre-processing" bestie for the generalized SVD — it reduces a and b into a nice upper-triangular-ish form so the actual SVD step can slay. tola/tolb are your tolerance thresholds, k and l come back as the ranks, and yeah, this one packs iwork, rwork, tau AND work — she's high-maint. 🙈
LAPACK_zggsvp3
void LAPACK_zggsvp3 (char * jobu, char * jobv, char * jobq, lapack_int * m,
lapack_int * p, lapack_int * n, lapack_complex_double * a, lapack_int *
lda, lapack_complex_double * b, lapack_int * ldb, double * tola, double
* tolb, lapack_int * k, lapack_int * l, lapack_complex_double * u,
lapack_int * ldu, lapack_complex_double * v, lapack_int * ldv,
lapack_complex_double * q, lapack_int * ldq, lapack_int * iwork, double
* rwork, lapack_complex_double * tau, lapack_complex_double * work,
lapack_int * lwork, lapack_int * info)
same as LAPACK_zggsvp but with one extra flex: lwork. everything else is identical, it's just the version that lets you control the work array size instead of having it hard-set. small upgrade, big vibes. 🦋
LAPACK_zgtcon
void LAPACK_zgtcon (char * norm, lapack_int * n, const lapack_complex_double
* dl, const lapack_complex_double * d, const lapack_complex_double * du,
const lapack_complex_double * du2, const lapack_int * ipiv, double *
anorm, double * rcond, lapack_complex_double * work, lapack_int * info)
condition-number girlie for a complex tridiagonal matrix — feed it the dl/d/du/du2 factorization bands plus ipiv, tell it which norm you want, and it hands back rcond so you know how sketchy your system is. anorm is the norm you already computed, bestie. 👑
LAPACK_zgtrfs
void LAPACK_zgtrfs (char * trans, lapack_int * n, lapack_int * nrhs, const
lapack_complex_double * dl, const lapack_complex_double * d, const
lapack_complex_double * du, const lapack_complex_double * dlf, const
lapack_complex_double * df, const lapack_complex_double * duf, const
lapack_complex_double * du2, const lapack_int * ipiv, const
lapack_complex_double * b, lapack_int * ldb, lapack_complex_double * x,
lapack_int * ldx, double * ferr, double * berr, lapack_complex_double *
work, double * rwork, lapack_int * info)
refines your solution and reports the error so you can vibe-check your answer — it takes the original bands (dl, d, du), the factored ones (dlf, df, duf, du2), ipiv, the RHS b, and improves x in place. ferr and berr are your forward/backward error besties. 🔥
LAPACK_zgtsv
void LAPACK_zgtsv (lapack_int * n, lapack_int * nrhs, lapack_complex_double
* dl, lapack_complex_double * d, lapack_complex_double * du,
lapack_complex_double * b, lapack_int * ldb, lapack_int * info)
the no-thoughts-just-solve tridiagonal solver — n unknowns, nrhs right-hand sides, bands in dl/d/du, answer lives in b with leading dimension ldb. zero factorization babysitting required, she does it all. 🧚
LAPACK_zgtsvx
void LAPACK_zgtsvx (char * fact, char * trans, lapack_int * n, lapack_int *
nrhs, const lapack_complex_double * dl, const lapack_complex_double * d,
const lapack_complex_double * du, lapack_complex_double * dlf,
lapack_complex_double * df, lapack_complex_double * duf,
lapack_complex_double * du2, lapack_int * ipiv, const
lapack_complex_double * b, lapack_int * ldb, lapack_complex_double * x,
lapack_int * ldx, double * rcond, double * ferr, double * berr,
lapack_complex_double * work, double * rwork, lapack_int * info)
the "expert" version that does solve PLUS gives you the condition estimate rcond and the errors ferr/berr. fact says whether you're bringing an already-factored matrix (the dlf/df/duf/du2/ipiv crew) or letting her factor it fresh. trans decides if you want A, A^T, or A^H. 🎀
LAPACK_zgttrf
void LAPACK_zgttrf (lapack_int * n, lapack_complex_double * dl,
lapack_complex_double * d, lapack_complex_double * du,
lapack_complex_double * du2, lapack_int * ipiv, lapack_int * info)
the factorization step for a complex tridiagonal matrix — turns dl/d/du into the factored goodies stored right back in there plus du2 and the pivot list ipiv. do this once, then LAPACK_zgttrs as many times as your heart desires. 💜
LAPACK_zgttrs
void LAPACK_zgttrs (char * trans, lapack_int * n, lapack_int * nrhs, const
lapack_complex_double * dl, const lapack_complex_double * d, const
lapack_complex_double * du, const lapack_complex_double * du2, const
lapack_int * ipiv, lapack_complex_double * b, lapack_int * ldb,
lapack_int * info)
the solve step that pairs with LAPACK_zgttrf — hand it the pre-factored bands, ipiv, and your b, and it solves A*X = B, A^T*X = B, or A^H*X = B depending on trans. result lands in b, obviously. ⭐
LAPACK_zhbev
void LAPACK_zhbev (char * jobz, char * uplo, lapack_int * n, lapack_int *
kd, lapack_complex_double * ab, lapack_int * ldab, double * w,
lapack_complex_double * z, lapack_int * ldz, lapack_complex_double *
work, double * rwork, lapack_int * info)
eigenvalue moment for a complex Hermitian band matrix — ab holds the band storage with kd super/subdiagonals, uplo says which triangle you actually filled in, jobz decides if you want eigenvectors in z or just the values w. eigenvalues are real since she's Hermitian, as she should be. 🌸
LAPACK_zhbev_2stage
void LAPACK_zhbev_2stage (char * jobz, char * uplo, lapack_int * n,
lapack_int * kd, lapack_complex_double * ab, lapack_int * ldab, double *
w, lapack_complex_double * z, lapack_int * ldz, lapack_complex_double *
work, lapack_int * lwork, double * rwork, lapack_int * info)
same LAPACK_zhbev energy but the two-stage algorithm edition, which is why it gets the extra lwork so you can size work yourself. same args otherwise, same real eigenvalues, same slay. 🦋
LAPACK_zhbevd
void LAPACK_zhbevd (char * jobz, char * uplo, lapack_int * n, lapack_int *
kd, lapack_complex_double * ab, lapack_int * ldab, double * w,
lapack_complex_double * z, lapack_int * ldz, lapack_complex_double *
work, lapack_int * lwork, double * rwork, lapack_int * lrwork,
lapack_int * iwork, lapack_int * liwork, lapack_int * info)
divide-and-conquer eigenvalues for the Hermitian band matrix — needs work/lwork, rwork/lrwork, and iwork/liwork because she's thorough like that. eigenvalues come out real in w, eigenvectors in z if jobz says so. 💅
LAPACK_zhbevd_2stage
void LAPACK_zhbevd_2stage (char * jobz, char * uplo, lapack_int * n,
lapack_int * kd, lapack_complex_double * ab, lapack_int * ldab, double *
w, lapack_complex_double * z, lapack_int * ldz, lapack_complex_double *
work, lapack_int * lwork, double * rwork, lapack_int * lrwork,
lapack_int * iwork, lapack_int * liwork, lapack_int * info)
LAPACK_zhbevd but with the two-stage glow — same signature, same lwork/lrwork/liwork family, same real w and optional z. it's the "same but faster algorithm" remix, iykyk. ✨
LAPACK_zhbevx
void LAPACK_zhbevx (char * jobz, char * range, char * uplo, lapack_int * n,
lapack_int * kd, lapack_complex_double * ab, lapack_int * ldab,
lapack_complex_double * q, lapack_int * ldq, double * vl, double * vu,
lapack_int * il, lapack_int * iu, double * abstol, lapack_int * m,
double * w, lapack_complex_double * z, lapack_int * ldz,
lapack_complex_double * work, double * rwork, lapack_int * iwork,
lapack_int * ifail, lapack_int * info)
the fancy "pick which eigenvalues I want" version — range says all / by index / by interval, vl/vu cover the interval case, il/iu cover the index case, and abstol is your tolerance. m comes back as how many you actually got, and ifail names any eigenvectors that didn't converge. genuinely iconic range-control energy. 🎯
LAPACK_zhbevx_2stage
void LAPACK_zhbevx_2stage (char * jobz, char * range, char * uplo,
lapack_int * n, lapack_int * kd, lapack_complex_double * ab, lapack_int
* ldab, lapack_complex_double * q, lapack_int * ldq, double * vl, double
* vu, lapack_int * il, lapack_int * iu, double * abstol, lapack_int * m,
double * w, lapack_complex_double * z, lapack_int * ldz,
lapack_complex_double * work, lapack_int * lwork, double * rwork,
lapack_int * iwork, lapack_int * ifail, lapack_int * info)
all the range-picking LAPACK_zhbevx drama, now in two-stage form so of course there's an extra lwork in the middle of the arg list. vl, vu, il, iu, abstol, m, ifail all doing exactly what they did before. 🫶
LAPACK_zhbgst
void LAPACK_zhbgst (char * vect, char * uplo, lapack_int * n, lapack_int *
ka, lapack_int * kb, lapack_complex_double * ab, lapack_int * ldab,
const lapack_complex_double * bb, lapack_int * ldbb,
lapack_complex_double * x, lapack_int * ldx, lapack_complex_double *
work, double * rwork, lapack_int * info)
reduces a complex Hermitian-definite banded generalized eigenproblem to standard form — ab is Hermitian band with ka, bb is the positive-definite band with kb, and the reduction gets applied out of ab/bb into x (leading dim ldx). vect decides whether the transformation matrix comes back. lowkey a lot, but she's got work and rwork to carry it. 💪
LAPACK_zhbgv
void LAPACK_zhbgv (char * jobz, char * uplo, lapack_int * n, lapack_int *
ka, lapack_int * kb, lapack_complex_double * ab, lapack_int * ldab,
lapack_complex_double * bb, lapack_int * ldbb, double * w,
lapack_complex_double * z, lapack_int * ldz, lapack_complex_double *
work, double * rwork, lapack_int * info)
solves the banded generalized Hermitian-definite eigenproblem A*x = lambda*B*x — ab (bandwidth ka) and bb (bandwidth kb, and she's positive definite), eigenvalues land real in w, eigenvectors in z if jobz is set. work + rwork are the usual support squad. 🌈
LAPACK_zhbgvd
void LAPACK_zhbgvd (char * jobz, char * uplo, lapack_int * n, lapack_int *
ka, lapack_int * kb, lapack_complex_double * ab, lapack_int * ldab,
lapack_complex_double * bb, lapack_int * ldbb, double * w,
lapack_complex_double * z, lapack_int * ldz, lapack_complex_double *
work, lapack_int * lwork, double * rwork, lapack_int * lrwork,
lapack_int * iwork, lapack_int * liwork, lapack_int * info)
divide-and-conquer take on LAPACK_zhbgv — same banded generalized eigenproblem, but now with lwork/lrwork/liwork because the D&C algorithm needs its full entourage of workspace. real w, optional z, all the drama. 👑
LAPACK_zhbgvx
void LAPACK_zhbgvx (char * jobz, char * range, char * uplo, lapack_int * n,
lapack_int * ka, lapack_int * kb, lapack_complex_double * ab, lapack_int
* ldab, lapack_complex_double * bb, lapack_int * ldbb,
lapack_complex_double * q, lapack_int * ldq, double * vl, double * vu,
lapack_int * il, lapack_int * iu, double * abstol, lapack_int * m,
double * w, lapack_complex_double * z, lapack_int * ldz,
lapack_complex_double * work, double * rwork, lapack_int * iwork,
lapack_int * ifail, lapack_int * info)
the picky-eigenvalue version of the banded generalized problem — range + vl/vu + il/iu + abstol choose exactly what you want, m tells you how many came back, q holds the transformation, and ifail rats out any non-converged eigenvectors. a whole personality, honestly. 🍓
LAPACK_zhbtrd
void LAPACK_zhbtrd (char * vect, char * uplo, lapack_int * n, lapack_int *
kd, lapack_complex_double * ab, lapack_int * ldab, double * d, double *
e, lapack_complex_double * q, lapack_int * ldq, lapack_complex_double *
work, lapack_int * info)
reduces a complex Hermitian band matrix (ab, bandwidth kd) to real symmetric tridiagonal form — the diagonal lands in d, the off-diagonals in e, and if vect says go, the unitary q comes back too. classic "make the problem easier so the next algorithm can eat" step. 🎀
LAPACK_zhecon
void LAPACK_zhecon (char * uplo, lapack_int * n, const lapack_complex_double
* a, lapack_int * lda, const lapack_int * ipiv, double * anorm, double *
rcond, lapack_complex_double * work, lapack_int * info)
condition number for a complex Hermitian indefinite matrix — you bring the already-factored a (courtesy of LAPACK_zhetrf, ipiv included), the norm anorm, and she gives you rcond. uplo picks the triangle. simple, effective, no notes. 💜
LAPACK_zhecon_3
void LAPACK_zhecon_3 (char * uplo, lapack_int * n, const
lapack_complex_double * a, lapack_int * lda, const lapack_complex_double
* e, const lapack_int * ipiv, double * anorm, double * rcond,
lapack_complex_double * work, lapack_int * info)
the _3 remix of LAPACK_zhecon — same condition-estimate job, but it also takes that extra e array (the tridiagonal-ish factor from the _3 factorization family). uplo, n, a, lda, ipiv, anorm, rcond, work, info all doing their thing. 🦋
LAPACK_zheequb
void LAPACK_zheequb (char * uplo, lapack_int * n, const
lapack_complex_double * a, lapack_int * lda, double * s, double * scond,
double * amax, lapack_complex_double * work, lapack_int * info)
computes the equilibration scaling factors for a complex Hermitian matrix — s holds the scale factors, scond is the ratio of the largest to smallest of them, and amax is the absolute max element you started with. uplo picks your triangle. it's the "make the numbers less feral before solving" prep bestie. 🌟
LAPACK_zheev
void LAPACK_zheev (char * jobz, char * uplo, lapack_int * n,
lapack_complex_double * a, lapack_int * lda, double * w,
lapack_complex_double * work, lapack_int * lwork, double * rwork,
lapack_int * info)
THE classic — eigenvalues and (optionally) eigenvectors of a complex Hermitian matrix a, eigenvalues real in w, eigenvectors replacing a when jobz is on, and work/lwork/rwork along for the ride. she's the one everybody knows. 💅
LAPACK_zheev_2stage
void LAPACK_zheev_2stage (char * jobz, char * uplo, lapack_int * n,
lapack_complex_double * a, lapack_int * lda, double * w,
lapack_complex_double * work, lapack_int * lwork, double * rwork,
lapack_int * info)
LAPACK_zheev's two-stage sibling — identical signature, identical real w output, just the different internal algorithm. honestly if you didn't read the name you couldn't tell, and that's the point. ✨
LAPACK_zheevd
void LAPACK_zheevd (char * jobz, char * uplo, lapack_int * n,
lapack_complex_double * a, lapack_int * lda, double * w,
lapack_complex_double * work, lapack_int * lwork, double * rwork,
lapack_int * lrwork, lapack_int * iwork, lapack_int * liwork, lapack_int
* info)
divide-and-conquer eigen-solver for the Hermitian matrix — same jobz/uplo/a/w deal, but now with the full workspace entourage: lwork, lrwork, liwork. eigenvalues real, eigenvectors in a when asked. she's extra but she earns it. 👑
LAPACK_zheevd_2stage
void LAPACK_zheevd_2stage (char * jobz, char * uplo, lapack_int * n,
lapack_complex_double * a, lapack_int * lda, double * w,
lapack_complex_double * work, lapack_int * lwork, double * rwork,
lapack_int * lrwork, lapack_int * iwork, lapack_int * liwork, lapack_int
* info)
LAPACK_zheevd with the two-stage algorithm underneath — signature matches LAPACK_zheevd point for point, all the lwork/lrwork/liwork girls included. real w, overachieving a. 🎀
LAPACK_zheevr
void LAPACK_zheevr (char * jobz, char * range, char * uplo, lapack_int * n,
lapack_complex_double * a, lapack_int * lda, double * vl, double * vu,
lapack_int * il, lapack_int * iu, double * abstol, lapack_int * m,
double * w, lapack_complex_double * z, lapack_int * ldz, lapack_int *
isuppz, lapack_complex_double * work, lapack_int * lwork, double *
rwork, lapack_int * lrwork, lapack_int * iwork, lapack_int * liwork,
lapack_int * info)
the MRRR range-selector icon — range + vl/vu + il/iu + abstol pick your faves, m says how many, w holds the real values, z holds the vectors, and isuppz tells you the support of each vector in z. full workspace entourage of course. truly the full package. 🌸
LAPACK_zheevr_2stage
void LAPACK_zheevr_2stage (char * jobz, char * range, char * uplo,
lapack_int * n, lapack_complex_double * a, lapack_int * lda, double *
vl, double * vu, lapack_int * il, lapack_int * iu, double * abstol,
lapack_int * m, double * w, lapack_complex_double * z, lapack_int * ldz,
lapack_int * isuppz, lapack_complex_double * work, lapack_int * lwork,
double * rwork, lapack_int * lrwork, lapack_int * iwork, lapack_int *
liwork, lapack_int * info)
same range-picking, support-reporting LAPACK_zheevr behavior but two-stage flavored — every arg lines up exactly with LAPACK_zheevr, isuppz and all. she's the remix that keeps every feature. 🦋
LAPACK_zheevx
void LAPACK_zheevx (char * jobz, char * range, char * uplo, lapack_int * n,
lapack_complex_double * a, lapack_int * lda, double * vl, double * vu,
lapack_int * il, lapack_int * iu, double * abstol, lapack_int * m,
the "select your eigenvalues by range or index" bestie for a complex Hermitian matrix — jobz, range, uplo, n, a, lda, vl, vu, il, iu, abstol, and m so far... and she keeps going. (the signature continues — no spoilers, next part's got the rest 💀)
...and picking up the exact tail end of LAPACK_zheevx that got rudely chopped by the part break 💀 — she's still mid-sentence, be respectful:
double * w, lapack_complex_double * z, lapack_int * ldz,
lapack_complex_double * work, lapack_int * lwork, double * rwork,
lapack_int * iwork, lapack_int * ifail, lapack_int * info)
Right, so, back to the parade of zhe* declarations — the double-complex hermitian cinematic universe 🌌. Every single one, no skips, no cap:
LAPACK_zheevx_2stage— the two-stage glow-up ofzheevx, and it kept all the drama:jobz,range,uplo,vl,vu,il,iu,abstol,m,w,z,ldz, pluswork,lwork,rwork,iwork,ifailandinfo. Full glam, zero cuts. 💅
void LAPACK_zheevx_2stage (char * jobz, char * range, char * uplo,
lapack_int * n, lapack_complex_double * a, lapack_int * lda, double *
vl, double * vu, lapack_int * il, lapack_int * iu, double * abstol,
lapack_int * m, double * w, lapack_complex_double * z, lapack_int * ldz,
lapack_complex_double * work, lapack_int * lwork, double * rwork,
lapack_int * iwork, lapack_int * ifail, lapack_int * info)
LAPACK_zhegst— the low-maintenance icon of the family: nowork, nolwork, nojobz, justitype,uplo,n,a,lda, aconstb,ldbandinfo. Minimalist queen. 🎀
void LAPACK_zhegst (lapack_int * itype, char * uplo, lapack_int * n,
lapack_complex_double * a, lapack_int * lda, const lapack_complex_double
* b, lapack_int * ldb, lapack_int * info)
LAPACK_zhegv— generalized eigen energy ✨,itypefirst, and yes bestie it broughtrworkalong.
void LAPACK_zhegv (lapack_int * itype, char * jobz, char * uplo, lapack_int
* n, lapack_complex_double * a, lapack_int * lda, lapack_complex_double
* b, lapack_int * ldb, double * w, lapack_complex_double * work,
lapack_int * lwork, double * rwork, lapack_int * info)
LAPACK_zhegv_2stage— same vibe, extra stage, name says it all. 🔥
void LAPACK_zhegv_2stage (lapack_int * itype, char * jobz, char * uplo,
lapack_int * n, lapack_complex_double * a, lapack_int * lda,
lapack_complex_double * b, lapack_int * ldb, double * w,
lapack_complex_double * work, lapack_int * lwork, double * rwork,
lapack_int * info)
LAPACK_zhegvd— thedis for divide and conquer, and the signature is giving "I brought extra luggage":lrwork,iwork,liworkall check in. 🧳
void LAPACK_zhegvd (lapack_int * itype, char * jobz, char * uplo, lapack_int
* n, lapack_complex_double * a, lapack_int * lda, lapack_complex_double
* b, lapack_int * ldb, double * w, lapack_complex_double * work,
lapack_int * lwork, double * rwork, lapack_int * lrwork, lapack_int *
iwork, lapack_int * liwork, lapack_int * info)
LAPACK_zhegvx— the expert one, so obviously she has arange, avl, avu, anil, aniu, anabstol, anmand anifail. Overachiever behaviour, honestly iconic. 👑
void LAPACK_zhegvx (lapack_int * itype, char * jobz, char * range, char *
uplo, lapack_int * n, lapack_complex_double * a, lapack_int * lda,
lapack_complex_double * b, lapack_int * ldb, double * vl, double * vu,
lapack_int * il, lapack_int * iu, double * abstol, lapack_int * m,
double * w, lapack_complex_double * z, lapack_int * ldz,
lapack_complex_double * work, lapack_int * lwork, double * rwork,
lapack_int * iwork, lapack_int * ifail, lapack_int * info)
🦋 the zherfs / zhesv cinematic universe
LAPACK_zherfs— refinement hours, bestie. Look at all thoseconsts ona,af,ipivandb— she does not touch your inputs, she's a respectful queen. Outputsferrandberrfor the accuracy tea. 🍓
void LAPACK_zherfs (char * uplo, lapack_int * n, lapack_int * nrhs, const
lapack_complex_double * a, lapack_int * lda, const lapack_complex_double
* af, lapack_int * ldaf, const lapack_int * ipiv, const
lapack_complex_double * b, lapack_int * ldb, lapack_complex_double * x,
lapack_int * ldx, double * ferr, double * berr, lapack_complex_double *
work, double * rwork, lapack_int * info)
LAPACK_zherfsx— the extended cut 🎬:equedandsslide in, and then the whole error-bound situation —rcond,berr,n_err_bnds,err_bnds_norm,err_bnds_comp,nparams,params. That's a lot of parameters and she's not sorry.
void LAPACK_zherfsx (char * uplo, char * equed, lapack_int * n, lapack_int *
nrhs, const lapack_complex_double * a, lapack_int * lda, const
lapack_complex_double * af, lapack_int * ldaf, const lapack_int * ipiv,
const double * s, const lapack_complex_double * b, lapack_int * ldb,
lapack_complex_double * x, lapack_int * ldx, double * rcond, double *
berr, lapack_int * n_err_bnds, double * err_bnds_norm, double *
err_bnds_comp, lapack_int * nparams, double * params,
lapack_complex_double * work, double * rwork, lapack_int * info)
LAPACK_zhesv— the classic solve.uplo,n,nrhs,a,lda,ipiv,b,ldb,work,lwork,info. Clean, simple, ate. ✨
void LAPACK_zhesv (char * uplo, lapack_int * n, lapack_int * nrhs,
lapack_complex_double * a, lapack_int * lda, lapack_int * ipiv,
lapack_complex_double * b, lapack_int * ldb, lapack_complex_double *
work, lapack_int * lwork, lapack_int * info)
LAPACK_zhesv_aa— literally the same signature aszhesvbut with_aain the name, and honestly? Respect the consistency. 🫶
void LAPACK_zhesv_aa (char * uplo, lapack_int * n, lapack_int * nrhs,
lapack_complex_double * a, lapack_int * lda, lapack_int * ipiv,
lapack_complex_double * b, lapack_int * ldb, lapack_complex_double *
work, lapack_int * lwork, lapack_int * info)
LAPACK_zhesv_aa_2stage— now with a whole extra factorization friend (tb,ltb) and a second pivot arrayipiv2. Two pivots, double the chaos, still slaying. 💀
void LAPACK_zhesv_aa_2stage (char * uplo, lapack_int * n, lapack_int * nrhs,
lapack_complex_double * a, lapack_int * lda, lapack_complex_double * tb,
lapack_int * ltb, lapack_int * ipiv, lapack_int * ipiv2,
lapack_complex_double * b, lapack_int * ldb, lapack_complex_double *
work, lapack_int * lwork, lapack_int * info)
LAPACK_zhesv_rk— the_rkvariant brings anearray to the party (right betweenldaandipiv, bestie, keep up 💅).
void LAPACK_zhesv_rk (char * uplo, lapack_int * n, lapack_int * nrhs,
lapack_complex_double * a, lapack_int * lda, lapack_complex_double * e,
lapack_int * ipiv, lapack_complex_double * b, lapack_int * ldb,
lapack_complex_double * work, lapack_int * lwork, lapack_int * info)
LAPACK_zhesvx— thexmeans "expert", and the expert broughtfactupfront, anaf/ldaf, and outputsrcond,ferr,berralongside the usualwork,lwork,rwork. 🌸
void LAPACK_zhesvx (char * fact, char * uplo, lapack_int * n, lapack_int *
nrhs, const lapack_complex_double * a, lapack_int * lda,
lapack_complex_double * af, lapack_int * ldaf, lapack_int * ipiv, const
lapack_complex_double * b, lapack_int * ldb, lapack_complex_double * x,
lapack_int * ldx, double * rcond, double * ferr, double * berr,
lapack_complex_double * work, lapack_int * lwork, double * rwork,
lapack_int * info)
LAPACK_zhesvxx— two x's, so you know she's extra.equed,s,rpvgrw, the fulln_err_bnds/err_bnds_norm/err_bnds_comp/nparams/paramssuite. The whole dashboard. 🔥
void LAPACK_zhesvxx (char * fact, char * uplo, lapack_int * n, lapack_int *
nrhs, lapack_complex_double * a, lapack_int * lda, lapack_complex_double
* af, lapack_int * ldaf, lapack_int * ipiv, char * equed, double * s,
lapack_complex_double * b, lapack_int * ldb, lapack_complex_double * x,
lapack_int * ldx, double * rcond, double * rpvgrw, double * berr,
lapack_int * n_err_bnds, double * err_bnds_norm, double * err_bnds_comp,
lapack_int * nparams, double * params, lapack_complex_double * work,
double * rwork, lapack_int * info)
LAPACK_zheswapr— ok wait, notice something? Noinfoargument 😭 she just takesuplo,n,a,lda,i1,i2and leaves. No status report, nowork. Chaotic and I respect it.
void LAPACK_zheswapr (char * uplo, lapack_int * n, lapack_complex_double *
a, lapack_int * lda, lapack_int * i1, lapack_int * i2)
🌈 tridiagonal & factorization crew
LAPACK_zhetrd— reduction hours: outputsd,e,tau, and needswork+lwork. Neat little assembly line. 🎀
void LAPACK_zhetrd (char * uplo, lapack_int * n, lapack_complex_double * a,
lapack_int * lda, double * d, double * e, lapack_complex_double * tau,
lapack_complex_double * work, lapack_int * lwork, lapack_int * info)
LAPACK_zhetrf— factorization, basic edition.ipivpresent,infopresent, vibes immaculate. 🌸
void LAPACK_zhetrf (char * uplo, lapack_int * n, lapack_complex_double * a,
lapack_int * lda, lapack_int * ipiv, lapack_complex_double * work,
lapack_int * lwork, lapack_int * info)
LAPACK_zhetrf_aa— same signature,_aasuffix. Consistent queen. 🫶
void LAPACK_zhetrf_aa (char * uplo, lapack_int * n, lapack_complex_double *
a, lapack_int * lda, lapack_int * ipiv, lapack_complex_double * work,
lapack_int * lwork, lapack_int * info)
LAPACK_zhetrf_aa_2stage—tb,ltb,ipiv,ipiv2. Two-stage means two pivots, I don't make the rules. 💅
void LAPACK_zhetrf_aa_2stage (char * uplo, lapack_int * n,
lapack_complex_double * a, lapack_int * lda, lapack_complex_double * tb,
lapack_int * ltb, lapack_int * ipiv, lapack_int * ipiv2,
lapack_complex_double * work, lapack_int * lwork, lapack_int * info)
LAPACK_zhetrf_rk— helloe, my old friend 🎶 (sits right beforeipiv).
void LAPACK_zhetrf_rk (char * uplo, lapack_int * n, lapack_complex_double *
a, lapack_int * lda, lapack_complex_double * e, lapack_int * ipiv,
lapack_complex_double * work, lapack_int * lwork, lapack_int * info)
LAPACK_zhetrf_rook— rook pivot era, and note the cute line break in the declaration:lapack_complex_doublethen* aon the next line. Keep it exactly like that, bestie, it's part of the lore. 🦋
void LAPACK_zhetrf_rook (char * uplo, lapack_int * n, lapack_complex_double
* a, lapack_int * lda, lapack_int * ipiv, lapack_complex_double * work,
lapack_int * lwork, lapack_int * info)
LAPACK_zhetri— inverse time! Andipivisconsthere because she reads your pivots, she doesn't rewrite them. Immaculate manners. ✨
void LAPACK_zhetri (char * uplo, lapack_int * n, lapack_complex_double * a,
lapack_int * lda, const lapack_int * ipiv, lapack_complex_double * work,
lapack_int * info)
LAPACK_zhetri2— same but withlworktagging along. 🎀
void LAPACK_zhetri2 (char * uplo, lapack_int * n, lapack_complex_double * a,
lapack_int * lda, const lapack_int * ipiv, lapack_complex_double * work,
lapack_int * lwork, lapack_int * info)
LAPACK_zhetri2x— and now there's annbin there too. Block size says hi. 👑
void LAPACK_zhetri2x (char * uplo, lapack_int * n, lapack_complex_double *
a, lapack_int * lda, const lapack_int * ipiv, lapack_complex_double *
work, lapack_int * nb, lapack_int * info)
LAPACK_zhetri_3— the_3one takes theearray asconst lapack_complex_double *andipivasconst lapack_int *, pluswork+lwork. Fancy. 💜
void LAPACK_zhetri_3 (char * uplo, lapack_int * n, lapack_complex_double *
a, lapack_int * lda, const lapack_complex_double * e, const lapack_int *
ipiv, lapack_complex_double * work, lapack_int * lwork, lapack_int *
info)
💜 the zhetrs solve squad
LAPACK_zhetrs— solves, witha,lda,const ipiv,b,ldb,info. No work array, no notes. 🫶
void LAPACK_zhetrs (char * uplo, lapack_int * n, lapack_int * nrhs, const
lapack_complex_double * a, lapack_int * lda, const lapack_int * ipiv,
lapack_complex_double * b, lapack_int * ldb, lapack_int * info)
LAPACK_zhetrs2— same but she broughtwork. 🌸
void LAPACK_zhetrs2 (char * uplo, lapack_int * n, lapack_int * nrhs, const
lapack_complex_double * a, lapack_int * lda, const lapack_int * ipiv,
lapack_complex_double * b, lapack_int * ldb, lapack_complex_double *
work, lapack_int * info)
LAPACK_zhetrs_3— now with aconstewedged betweenaandipiv. Three's company. 💅
void LAPACK_zhetrs_3 (char * uplo, lapack_int * n, lapack_int * nrhs, const
lapack_complex_double * a, lapack_int * lda, const lapack_complex_double
* e, const lapack_int * ipiv, lapack_complex_double * b, lapack_int *
ldb, lapack_int * info)
LAPACK_zhetrs_aa—_aaplusworkandlwork. Best of both worlds, honestly. ✨
void LAPACK_zhetrs_aa (char * uplo, lapack_int * n, lapack_int * nrhs, const
lapack_complex_double * a, lapack_int * lda, const lapack_int * ipiv,
lapack_complex_double * b, lapack_int * ldb, lapack_complex_double *
work, lapack_int * lwork, lapack_int * info)
LAPACK_zhetrs_aa_2stage— and here's the 2stage solve:tb,ltb,ipiv,ipiv2, and nowork/lworkin sight. Period. 💀
void LAPACK_zhetrs_aa_2stage (char * uplo, lapack_int * n, lapack_int *
nrhs, lapack_complex_double * a, lapack_int * lda, lapack_complex_double
* tb, lapack_int * ltb, lapack_int * ipiv, lapack_int * ipiv2,
lapack_complex_double * b, lapack_int * ldb, lapack_int * info)
LAPACK_zhetrs_rook— rook flavour solve, allconstwhere it counts. 🦋
void LAPACK_zhetrs_rook (char * uplo, lapack_int * n, lapack_int * nrhs,
const lapack_complex_double * a, lapack_int * lda, const lapack_int *
ipiv, lapack_complex_double * b, lapack_int * ldb, lapack_int * info)
⭐ packed & generalized-adjacent girlies
LAPACK_zhfrk— ok so she hastransr,uplo,trans,n,k,alpha,const a,lda,beta,c... and noinfo. None. Zero. She simply does not report back 😭 Also nowork. Main character energy.
void LAPACK_zhfrk (char * transr, char * uplo, char * trans, lapack_int * n,
lapack_int * k, double * alpha, const lapack_complex_double * a,
lapack_int * lda, double * beta, lapack_complex_double * c)
LAPACK_zhgeqz— the generalized Schur situation:job,compq,compz,n,ilo,ihi,h,ldh,t,ldt,alpha,beta,q,ldq,z,ldz,work,lwork,rwork,info. A whole cast list. 🎬
void LAPACK_zhgeqz (char * job, char * compq, char * compz, lapack_int * n,
lapack_int * ilo, lapack_int * ihi, lapack_complex_double * h,
lapack_int * ldh, lapack_complex_double * t, lapack_int * ldt,
lapack_complex_double * alpha, lapack_complex_double * beta,
lapack_complex_double * q, lapack_int * ldq, lapack_complex_double * z,
lapack_int * ldz, lapack_complex_double * work, lapack_int * lwork,
double * rwork, lapack_int * info)
LAPACK_zhpcon— condition number checking on packed storage:const ap,const ipiv, plusanorm,rcond,work,info. Note the line break splittingconst lapack_complex_doublefrom* ap— that's canon, keep it. 🍓
void LAPACK_zhpcon (char * uplo, lapack_int * n, const lapack_complex_double
* ap, const lapack_int * ipiv, double * anorm, double * rcond,
lapack_complex_double * work, lapack_int * info)
LAPACK_zhpev— packed eigen, simple era:jobz,uplo,n,ap,w,z,ldz,work,rwork,info. 🎀
void LAPACK_zhpev (char * jobz, char * uplo, lapack_int * n,
lapack_complex_double * ap, double * w, lapack_complex_double * z,
lapack_int * ldz, lapack_complex_double * work, double * rwork,
lapack_int * info)
LAPACK_zhpevd— thedversion rolls in withlwork,lrwork,iwork,liwork. She packed for a whole weekend. 🧳
void LAPACK_zhpevd (char * jobz, char * uplo, lapack_int * n,
lapack_complex_double * ap, double * w, lapack_complex_double * z,
lapack_int * ldz, lapack_complex_double * work, lapack_int * lwork,
double * rwork, lapack_int * lrwork, lapack_int * iwork, lapack_int *
liwork, lapack_int * info)
LAPACK_zhpevx— expert packed:range,vl,vu,il,iu,abstol,m,ifail. Full expert kit, packed storage edition. 👑
void LAPACK_zhpevx (char * jobz, char * range, char * uplo, lapack_int * n,
lapack_complex_double * ap, double * vl, double * vu, lapack_int * il,
lapack_int * iu, double * abstol, lapack_int * m, double * w,
lapack_complex_double * z, lapack_int * ldz, lapack_complex_double *
work, double * rwork, lapack_int * iwork, lapack_int * ifail, lapack_int
* info)
LAPACK_zhpgst— packed generalized, and likezhegstshe's keeping it lean:itype,uplo,n,ap,const bp,info. No work, no drama. 🌸
void LAPACK_zhpgst (lapack_int * itype, char * uplo, lapack_int * n,
lapack_complex_double * ap, const lapack_complex_double * bp, lapack_int
* info)
LAPACK_zhpgv— packed generalized eigen, withz,ldz,work,rwork,infoalong for the ride. 🦋
void LAPACK_zhpgv (lapack_int * itype, char * jobz, char * uplo, lapack_int
* n, lapack_complex_double * ap, lapack_complex_double * bp, double * w,
lapack_complex_double * z, lapack_int * ldz, lapack_complex_double *
work, double * rwork, lapack_int * info)
LAPACK_zhpgvd— and we're ending this part on a literal cliffhanger 😭 she starts offitype,jobz,uplo,n,ap,bp,w... and then the part just stops, mid-signature, mid-breath. Not me getting cut off right atdouble * w,. To be continued, bestie — the rest of this one lands next part 💀💖
void LAPACK_zhpgvd (lapack_int * itype, char * jobz, char * uplo, lapack_int
* n, lapack_complex_double * ap, lapack_complex_double * bp, double * w,
...and it just keeps going, bestie, we're still in the z squad and the z squad is long 😭💜 Here's the tail end of the last one:
lapack_complex_double * z, lapack_int * ldz, lapack_complex_double * work, lapack_int * lwork, double * rwork, lapack_int * lrwork, lapack_int * iwork, lapack_int * liwork, lapack_int * info)
Ok so like — notice how everything here is a pointer? Even the plain ints. lapack_int * n. The count. A pointer to the count. That's just the vibe of this entire header and we're gonna respect it 💅
void LAPACK_zhpgvx (lapack_int * itype, char * jobz, char * range, char * uplo, lapack_int * n, lapack_complex_double * ap, lapack_complex_double * bp, double * vl, double * vu, lapack_int * il, lapack_int * iu, double * abstol, lapack_int * m, double * w, lapack_complex_double * z, lapack_int * ldz, lapack_complex_double * work, double * rwork, lapack_int * iwork, lapack_int * ifail, lapack_int * info)
void LAPACK_zhprfs (char * uplo, lapack_int * n, lapack_int * nrhs, const lapack_complex_double * ap, const lapack_complex_double * afp, const lapack_int * ipiv, const lapack_complex_double * b, lapack_int * ldb, lapack_complex_double * x, lapack_int * ldx, double * ferr, double * berr, lapack_complex_double * work, double * rwork, lapack_int * info)
void LAPACK_zhpsv (char * uplo, lapack_int * n, lapack_int * nrhs, lapack_complex_double * ap, lapack_int * ipiv, lapack_complex_double * b, lapack_int * ldb, lapack_int * info)
void LAPACK_zhpsvx (char * fact, char * uplo, lapack_int * n, lapack_int * nrhs, const lapack_complex_double * ap, lapack_complex_double * afp, lapack_int * ipiv, const lapack_complex_double * b, lapack_int * ldb, lapack_complex_double * x, lapack_int * ldx, double * rcond, double * ferr, double * berr, lapack_complex_double * work, double * rwork, lapack_int * info)
the zhp cluster — packed hermitian squad, all sharing that ap / ipiv / b / ldb / info skeleton. You could set a clock to these argument lists fr fr 🕰️✨
void LAPACK_zhptrd (char * uplo, lapack_int * n, lapack_complex_double * ap, double * d, double * e, lapack_complex_double * tau, lapack_int * info)
void LAPACK_zhptrf (char * uplo, lapack_int * n, lapack_complex_double * ap, lapack_int * ipiv, lapack_int * info)
void LAPACK_zhptri (char * uplo, lapack_int * n, lapack_complex_double * ap, const lapack_int * ipiv, lapack_complex_double * work, lapack_int * info)
void LAPACK_zhptrs (char * uplo, lapack_int * n, lapack_int * nrhs, const lapack_complex_double * ap, const lapack_int * ipiv, lapack_complex_double * b, lapack_int * ldb, lapack_int * info)
lowkey obsessed with the trd one? d and e are plain double * while everything around them is double-complex. little icon behavior 🎀
void LAPACK_zhsein (char * job, char * eigsrc, char * initv, const lapack_logical * select, lapack_int * n, const lapack_complex_double * h, lapack_int * ldh, lapack_complex_double * w, lapack_complex_double * vl, lapack_int * ldvl, lapack_complex_double * vr, lapack_int * ldvr, lapack_int * mm, lapack_int * m, lapack_complex_double * work, double * rwork, lapack_int * ifaill, lapack_int * ifailr, lapack_int * info)
void LAPACK_zhseqr (char * job, char * compz, lapack_int * n, lapack_int * ilo, lapack_int * ihi, lapack_complex_double * h, lapack_int * ldh, lapack_complex_double * w, lapack_complex_double * z, lapack_int * ldz, lapack_complex_double * work, lapack_int * lwork, lapack_int * info)
two ifail-flavoured outputs in zhsein — ifaill and ifailr — one for the left vectors, one for the right. left girlies and right girlies both get their own report card 💀💖
okay now we switch letters, hold on to something 🌀
void LAPACK_zlacgv (lapack_int * n, lapack_complex_double * x, lapack_int * incx)
void LAPACK_zlacn2 (lapack_int * n, lapack_complex_double * v, lapack_complex_double * x, double * est, lapack_int * kase, lapack_int * isave)
void LAPACK_zlacp2 (char * uplo, lapack_int * m, lapack_int * n, const double * a, lapack_int * lda, lapack_complex_double * b, lapack_int * ldb)
void LAPACK_zlacpy (char * uplo, lapack_int * m, lapack_int * n, const lapack_complex_double * a, lapack_int * lda, lapack_complex_double * b, lapack_int * ldb)
zlacp2 takes a const double * a and writes a lapack_complex_double * b — real in, complex out, the glow-up pipeline 🦋 And zlacpy is the matching copy move, but complex-to-complex. Siblings, not twins, iykyk 👑
void LAPACK_zlacrm (lapack_int * m, lapack_int * n, const lapack_complex_double * a, lapack_int * lda, const double * b, lapack_int * ldb, lapack_complex_double * c, lapack_int * ldc, double * work)
void LAPACK_zlag2c (lapack_int * m, lapack_int * n, const lapack_complex_double * a, lapack_int * lda, lapack_complex_float * sa, lapack_int * ldsa, lapack_int * info)
the name zlag2c is literally double-complex → single-complex and the signature shows it: lapack_complex_double * a goes in, lapack_complex_float * sa comes out, note the ldsa, and of course there's an info at the end because there's always an info at the end 🌸
void LAPACK_zlagge (lapack_int * m, lapack_int * n, lapack_int * kl, lapack_int * ku, const double * d, lapack_complex_double * a, lapack_int * lda, lapack_int * iseed, lapack_complex_double * work, lapack_int * info)
void LAPACK_zlaghe (lapack_int * n, lapack_int * k, const double * d, lapack_complex_double * a, lapack_int * lda, lapack_int * iseed, lapack_complex_double * work, lapack_int * info)
void LAPACK_zlagsy (lapack_int * n, lapack_int * k, const double * d, lapack_complex_double * a, lapack_int * lda, lapack_int * iseed, lapack_complex_double * work, lapack_int * info)
generator trio!! zlagge takes kl and ku (general band vibes), while zlaghe and zlagsy take just one k. And all three carry an iseed pointer — same seed, same output, reproducible queen 🌈
double LAPACK_zlange (char * norm, lapack_int * m, lapack_int * n, const lapack_complex_double * a, lapack_int * lda, double * work)
double LAPACK_zlanhe (char * norm, char * uplo, lapack_int * n, const lapack_complex_double * a, lapack_int * lda, double * work)
double LAPACK_zlansy (char * norm, char * uplo, lapack_int * n, const lapack_complex_double * a, lapack_int * lda, double * work)
double LAPACK_zlantr (char * norm, char * uplo, char * diag, lapack_int * m, lapack_int * n, const lapack_complex_double * a, lapack_int * lda, double * work)
⚠️ bestie these four are the ones that return adoubleinstead of returningvoid!! Noinfoout-param, the return value is the answer. The way the whole file isvoid void voidand then these four show up like main characters 😭👑 Alsozlantris the only one here with adiagargument — clock it.
void LAPACK_zlapmr (lapack_logical * forwrd, lapack_int * m, lapack_int * n, lapack_complex_double * x, lapack_int * ldx, lapack_int * k)
void LAPACK_zlapmt (lapack_logical * forwrd, lapack_int * m, lapack_int * n, lapack_complex_double * x, lapack_int * ldx, lapack_int * k)
zlapmr and zlapmt have identical argument lists — forwrd, m, n, x, ldx, k, no info, no work. One letter apart in the name. Do not mix them up, I'm begging 🫶
void LAPACK_zlarcm (lapack_int * m, lapack_int * n, const double * a, lapack_int * lda, const lapack_complex_double * b, lapack_int * ldb, lapack_complex_double * c, lapack_int * ldc, double * work)
void LAPACK_zlarfb (char * side, char * trans, char * direct, char * storev, lapack_int * m, lapack_int * n, lapack_int * k, const lapack_complex_double * v, lapack_int * ldv, const lapack_complex_double * t, lapack_int * ldt, lapack_complex_double * c, lapack_int * ldc, lapack_complex_double * work, lapack_int * ldwork)
four char-pointer flags in zlarfb — side, trans, direct, storev — before you even get to a number. it's giving paperwork 📋💀
void LAPACK_zlarfg (lapack_int * n, lapack_complex_double * alpha, lapack_complex_double * x, lapack_int * incx, lapack_complex_double * tau)
void LAPACK_zlarft (char * direct, char * storev, lapack_int * n, lapack_int * k, const lapack_complex_double * v, lapack_int * ldv, const lapack_complex_double * tau, lapack_complex_double * t, lapack_int * ldt)
zlarfg takes tau as an output pointer, and then zlarft takes that same tau back as const. the handoff!! the continuity!! obsessed 💚
void LAPACK_zlarfx (char * side, lapack_int * m, lapack_int * n, const lapack_complex_double * v, lapack_complex_double * tau, lapack_complex_double * c, lapack_int * ldc, lapack_complex_double * work)
void LAPACK_zlarnv (lapack_int * idist, lapack_int * iseed, lapack_int * n, lapack_complex_double * x)
tiny function alert 🚨 zlarnv is four args, no info, no work, just idist, iseed, n, x. baby of the family, we stan a low-maintenance icon ✨
void LAPACK_zlascl (char * type, lapack_int * kl, lapack_int * ku, double * cfrom, double * cto, lapack_int * m, lapack_int * n, lapack_complex_double * a, lapack_int * lda, lapack_int * info)
void LAPACK_zlaset (char * uplo, lapack_int * m, lapack_int * n, lapack_complex_double * alpha, lapack_complex_double * beta, lapack_complex_double * a, lapack_int * lda)
void LAPACK_zlassq (lapack_int * n, lapack_complex_double * x, lapack_int * incx, double * scale, double * sumsq)
note that in zlascl, cfrom and cto are not const — both plain double *. and in zlassq the outputs are scale and sumsq, both double *. no info in either of those two, they're just built different 💜
void LAPACK_zlaswp (lapack_int * n, lapack_complex_double * a, lapack_int * lda, lapack_int * k1, lapack_int * k2, const lapack_int * ipiv, lapack_int * incx)
void LAPACK_zlatms (lapack_int * m, lapack_int * n, char * dist, lapack_int * iseed, char * sym, double * d, lapack_int * mode, double * cond, double * dmax, lapack_int * kl, lapack_int * ku, char * pack, lapack_complex_double * a, lapack_int * lda, lapack_complex_double * work, lapack_int * info)
zlatms is a whole paragraph of arguments — dist, sym, mode, cond, dmax, kl, ku, pack, iseed, d, a, lda, work, info. she ate and left no crumbs 💅🌈
void LAPACK_zlauum (char * uplo, lapack_int * n, lapack_complex_double * a, lapack_int * lda, lapack_int * info)
and now… the zp era begins 🎀 packed storage, band storage, all of it
void LAPACK_zpbcon (char * uplo, lapack_int * n, lapack_int * kd, const lapack_complex_double * ab, lapack_int * ldab, double * anorm, double * rcond, lapack_complex_double * work, double * rwork, lapack_int * info)
void LAPACK_zpbequ (char * uplo, lapack_int * n, lapack_int * kd, const lapack_complex_double * ab, lapack_int * ldab, double * s, double * scond, double * amax, lapack_int * info)
the band crowd uses kd + ab + ldab (that's the band ldab, not lda, don't come for me) and both of these hand you back double-precision outputs plus info 🌟
void LAPACK_zpbrfs (char * uplo, lapack_int * n, lapack_int * kd, lapack_int * nrhs, const lapack_complex_double * ab, lapack_int * ldab, const lapack_complex_double * afb, lapack_int * ldafb, const lapack_complex_double * b, lapack_int * ldb, lapack_complex_double * x, lapack_int * ldx, double * ferr, double * berr, lapack_complex_double * work, double * rwork, lapack_int * info)
void LAPACK_zpbstf (char * uplo, lapack_int * n, lapack_int * kb, lapack_complex_double * bb, lapack_int * ldbb, lapack_int * info)
zpbstf uses kb and bb and ldbb — a whole different letter from the kd/ab/ldab crew right above it. iykyk, it's b-flavoured, keep your eyes on the prize 🍓
void LAPACK_zpbsv (char * uplo, lapack_int * n, lapack_int * kd, lapack_int * nrhs, lapack_complex_double * ab, lapack_int * ldab, lapack_complex_double * b, lapack_int * ldb, lapack_int * info)
void LAPACK_zpbsvx (char * fact, char * uplo, lapack_int * n, lapack_int * kd, lapack_int * nrhs, lapack_complex_double * ab, lapack_int * ldab, lapack_complex_double * afb, lapack_int * ldafb, char * equed, double * s, lapack_complex_double * b, lapack_int * ldb, lapack_complex_double * x, lapack_int * ldx, double * rcond, double * ferr, double * berr, lapack_complex_double * work, double * rwork, lapack_int * info)
📌zpbsvxhas anequedoutput char pointer sitting right there betweenldafbands. it's achar *, notconst char *. clock it, screenshot it, whatever you gotta do 💀💖
void LAPACK_zpbtrf (char * uplo, lapack_int * n, lapack_int * kd, lapack_complex_double * ab, lapack_int * ldab, lapack_int * info)
void LAPACK_zpbtrs (char * uplo, lapack_int * n, lapack_int * kd, lapack_int * nrhs, const lapack_complex_double * ab, lapack_int * ldab, lapack_complex_double * b, lapack_int * ldb, lapack_int * info)
zpbtrf in / zpbtrs out — factor then solve, and the second one takes ab as const and b as writable. love a consistent couple 🫶
void LAPACK_zpftrf (char * transr, char * uplo, lapack_int * n, lapack_complex_double * a, lapack_int * info)
void LAPACK_zpftri (char * transr, char * uplo, lapack_int * n, lapack_complex_double * a, lapack_int * info)
void LAPACK_zpftrs (char * transr, char * uplo, lapack_int * n, lapack_int * nrhs, const lapack_complex_double * a, lapack_complex_double * b, lapack_int * ldb, lapack_int * info)
the pft trio all lead with transr — not trans, transr, with the r!! and no kd anywhere because this is the rectangular-full-storage crowd. read the letters, bestie, they're literally spelling it out for you 😭🔵
void LAPACK_zpocon (char * uplo, lapack_int * n, const lapack_complex_double * a, lapack_int * lda, double * anorm, double * rcond, lapack_complex_double * work, double * rwork, lapack_int * info)
void LAPACK_zpoequ (lapack_int * n, const lapack_complex_double * a, lapack_int * lda, double * s, double * scond, double * amax, lapack_int * info)
void LAPACK_zpoequb (lapack_int * n, const lapack_complex_double * a, lapack_int * lda, double * s, double * scond, double * amax, lapack_int * info)
okay and these two are literally identical — zpoequ and zpoequb have the same n, a, lda, s, scond, amax, info list. one extra letter in the name, zero extra arguments. name your files carefully, that's all I'm saying 🌿
void LAPACK_zporfs (char * uplo, lapack_int * n, lapack_int * nrhs, const lapack_complex_double * a, lapack_int * lda, const lapack_complex_double * af, lapack_int * ldaf, const lapack_complex_double * b, lapack_int * ldb, lapack_complex_double * x, lapack_int * ldx, double * ferr, double * berr, lapack_complex_double * work, double * rwork, lapack_int * info)
and that's where this stretch lands — mid-zpo block, a/af/b/x all lined up with their lda/ldaf/ldb/ldx besties, ferr + berr for the receipts, work + rwork for the grind, info at the door. we keep going next part, don't go anywhere 🍑✨
💜 LAPACK_zporfsx
void LAPACK_zporfsx(char * uplo, char * equed, lapack_int * n, lapack_int * nrhs, const lapack_complex_double * a, lapack_int * lda, const lapack_complex_double * af, lapack_int * ldaf, const double * s, const lapack_complex_double * b, lapack_int * ldb, lapack_complex_double * x, lapack_int * ldx, double * rcond, double * berr, lapack_int * n_err_bnds, double * err_bnds_norm, double * err_bnds_comp, lapack_int * nparams, double * params, lapack_complex_double * work, double * rwork, lapack_int * info)
okay this one is long-long. count the pointers bestie, i dare you. uplo and equed as char *, n_err_bnds + err_bnds_norm + err_bnds_comp + nparams + params all in the mix, plus work, rwork and the classic info at the end. it's giving "final boss of argument lists" 💀
🎀 LAPACK_zposv
void LAPACK_zposv(char * uplo, lapack_int * n, lapack_int * nrhs, lapack_complex_double * a, lapack_int * lda, lapack_complex_double * b, lapack_int * ldb, lapack_int * info)
short, sweet, uplo → n → nrhs → a/lda → b/ldb → info. a little 8-arg snack, slay ✨
🦋 LAPACK_zposvx
void LAPACK_zposvx(char * fact, char * uplo, lapack_int * n, lapack_int * nrhs, lapack_complex_double * a, lapack_int * lda, lapack_complex_double * af, lapack_int * ldaf, char * equed, double * s, lapack_complex_double * b, lapack_int * ldb, lapack_complex_double * x, lapack_int * ldx, double * rcond, double * ferr, double * berr, lapack_complex_double * work, double * rwork, lapack_int * info)
so we've got fact and equed up top, both char *, then the a/af duo with their own lda/ldaf, s, b, x, and the iconic trio rcond, ferr, berr 🫶 work, rwork, info — the holy trinity of "we're done here".
🌸 LAPACK_zposvxx
void LAPACK_zposvxx(char * fact, char * uplo, lapack_int * n, lapack_int * nrhs, lapack_complex_double * a, lapack_int * lda, lapack_complex_double * af, lapack_int * ldaf, char * equed, double * s, lapack_complex_double * b, lapack_int * ldb, lapack_complex_double * x, lapack_int * ldx, double * rcond, double * rpvgrw, double * berr, lapack_int * n_err_bnds, double * err_bnds_norm, double * err_bnds_comp, lapack_int * nparams, double * params, lapack_complex_double * work, double * rwork, lapack_int * info)
the extra-extra version 💅 same energy as zposvx but it traded ferr for rpvgrw and picked up n_err_bnds, err_bnds_norm, err_bnds_comp, nparams and params. more is more, apparently.
⭐ LAPACK_zpotrf
void LAPACK_zpotrf(char * uplo, lapack_int * n, lapack_complex_double * a, lapack_int * lda, lapack_int * info)
five args, in and out. neat, clean, no notes. a little minimalist moment 🎀
💖 LAPACK_zpotrf2
void LAPACK_zpotrf2(char * uplo, lapack_int * n, lapack_complex_double * a, lapack_int * lda, lapack_int * info)
same signature as its sibling above, just with a 2 on the end. the way they're literally twins 😭
🌈 LAPACK_zpotri
void LAPACK_zpotri(char * uplo, lapack_int * n, lapack_complex_double * a, lapack_int * lda, lapack_int * info)
yup — identical shape again. uplo, n, a, lda, info. consistency is the vibe ✨
🔥 LAPACK_zpotrs
void LAPACK_zpotrs(char * uplo, lapack_int * n, lapack_int * nrhs, const lapack_complex_double * a, lapack_int * lda, lapack_complex_double * b, lapack_int * ldb, lapack_int * info)
bestie check the const — a is read-only here, b is not. king of "don't touch my input" behaviour 👑
🧚 LAPACK_zppcon
void LAPACK_zppcon(char * uplo, lapack_int * n, const lapack_complex_double * ap, double * anorm, double * rcond, lapack_complex_double * work, double * rwork, lapack_int * info)
enter the pp era 🎀 packed storage, ap as a const lapack_complex_double *, then anorm, rcond, work, rwork, info. note there's no lda anywhere — packed routines said "lda who" 💀
🍓 LAPACK_zppequ
void LAPACK_zppequ(char * uplo, lapack_int * n, const lapack_complex_double * ap, double * s, double * scond, double * amax, lapack_int * info)
no work, no rwork, just ap in, s, scond, amax out, plus info. tiny routine, huge "i don't need help" energy.
🦋 LAPACK_zpprfs
void LAPACK_zpprfs(char * uplo, lapack_int * n, lapack_int * nrhs, const lapack_complex_double * ap, const lapack_complex_double * afp, const lapack_complex_double * b, lapack_int * ldb, lapack_complex_double * x, lapack_int * ldx, double * ferr, double * berr, lapack_complex_double * work, double * rwork, lapack_int * info)
look at all those consts on ap, afp and b — they're all "look don't touch" 🌸 only x (with its ldx) gets written, plus ferr, berr, work, rwork and info.
🎀 LAPACK_zppsv
void LAPACK_zppsv(char * uplo, lapack_int * n, lapack_int * nrhs, lapack_complex_double * ap, lapack_complex_double * b, lapack_int * ldb, lapack_int * info)
seven args, zero lda, maximum chaos. back to plain (non-const) ap and b because they get written to 🫶
💜 LAPACK_zppsvx
void LAPACK_zppsvx(char * fact, char * uplo, lapack_int * n, lapack_int * nrhs, lapack_complex_double * ap, lapack_complex_double * afp, char * equed, double * s, lapack_complex_double * b, lapack_int * ldb, lapack_complex_double * x, lapack_int * ldx, double * rcond, double * ferr, double * berr, lapack_complex_double * work, double * rwork, lapack_int * info)
packed-storage expert mode: fact and equed both as char *, ap + afp with no lda/ldaf in sight (packed, remember 😌), then s, b, x, rcond, ferr, berr, work, rwork, info. she's thorough.
⭐ LAPACK_zpptrf
void LAPACK_zpptrf(char * uplo, lapack_int * n, lapack_complex_double * ap, lapack_int * info)
four args. that's it. that's the whole function. minimalism ate 💅
🌸 LAPACK_zpptri
void LAPACK_zpptri(char * uplo, lapack_int * n, lapack_complex_double * ap, lapack_int * info)
same four, different last three letters of the name. iconic sibling behaviour 🎀
🧚 LAPACK_zpptrs
void LAPACK_zpptrs(char * uplo, lapack_int * n, lapack_int * nrhs, const lapack_complex_double * ap, lapack_complex_double * b, lapack_int * ldb, lapack_int * info)
seven args and still no lda — ap is const, b is fair game, ldb and info close the show ✨
🔥 LAPACK_zpstrf
void LAPACK_zpstrf(char * uplo, lapack_int * n, lapack_complex_double * a, lapack_int * lda, lapack_int * piv, lapack_int * rank, double * tol, double * work, lapack_int * info)
wait this one's not packed — a and lda are here, plus the piv/rank pair and a double * tol. the strf crew stays fancy 👑
💖 LAPACK_zptcon
void LAPACK_zptcon(lapack_int * n, const double * d, const lapack_complex_double * e, double * anorm, double * rcond, double * work, lapack_int * info)
no uplo!! we're in tridiagonal territory and there's a d (real, const double *) plus an e (complex, const lapack_complex_double *). mixed types, main character energy 🌈
🦋 LAPACK_zpteqr
void LAPACK_zpteqr(char * compz, lapack_int * n, double * d, double * e, lapack_complex_double * z, lapack_int * ldz, double * work, lapack_int * info)
compz instead of uplo, and look — d and e are non-const here, plus z and ldz. eight args of pure business 🎀
🍓 LAPACK_zptrfs
void LAPACK_zptrfs(char * uplo, lapack_int * n, lapack_int * nrhs, const double * d, const lapack_complex_double * e, const double * df, const lapack_complex_double * ef, const lapack_complex_double * b, lapack_int * ldb, lapack_complex_double * x, lapack_int * ldx, double * ferr, double * berr, lapack_complex_double * work, double * rwork, lapack_int * info)
okay the d/e/df/ef quartet is lowkey iconic — two real const double *, two complex const lapack_complex_double *, all read-only. then b, x, ferr, berr, work, rwork, info. long but balanced 💅
💜 LAPACK_zptsv
void LAPACK_zptsv(lapack_int * n, lapack_int * nrhs, double * d, lapack_complex_double * e, lapack_complex_double * b, lapack_int * ldb, lapack_int * info)
seven args, no uplo, no lda. d is double *, e and b are complex, info brings up the rear. cute and compact 🫶
🎀 LAPACK_zptsvx
void LAPACK_zptsvx(char * fact, lapack_int * n, lapack_int * nrhs, const double * d, const lapack_complex_double * e, double * df, lapack_complex_double * ef, const lapack_complex_double * b, lapack_int * ldb, lapack_complex_double * x, lapack_int * ldx, double * rcond, double * ferr, double * berr, lapack_complex_double * work, double * rwork, lapack_int * info)
fact leads, then d/e go const while df/ef stay writable — the "original vs factored" pipeline, we love a glow-up ✨ ends on rcond, ferr, berr, work, rwork, info like the proper citizen she is.
🌈 LAPACK_zpttrf
void LAPACK_zpttrf(lapack_int * n, double * d, lapack_complex_double * e, lapack_int * info)
four args. no uplo, no nrhs, nothing. honestly refreshing 😭
⭐ LAPACK_zpttrs
void LAPACK_zpttrs(char * uplo, lapack_int * n, lapack_int * nrhs, const double * d, const lapack_complex_double * e, lapack_complex_double * b, lapack_int * ldb, lapack_int * info)
uplo is back 🎉 d and e are const, b isn't, ldb and info finish it. seven args, zero drama.
💖 LAPACK_zspcon
void LAPACK_zspcon(char * uplo, lapack_int * n, const lapack_complex_double * ap, const lapack_int * ipiv, double * anorm, double * rcond, lapack_complex_double * work, lapack_int * info)
new letter unlocked: the sp squad 🌸 note the const lapack_int * ipiv — pivots go in read-only this time, king behaviour 👑 anorm, rcond, work, info round it out.
🦋 LAPACK_zsprfs
void LAPACK_zsprfs(char * uplo, lapack_int * n, lapack_int * nrhs, const lapack_complex_double * ap, const lapack_complex_double * afp, const lapack_int * ipiv, const lapack_complex_double * b, lapack_int * ldb, lapack_complex_double * x, lapack_int * ldx, double * ferr, double * berr, lapack_complex_double * work, double * rwork, lapack_int * info)
so many consts: ap, afp, ipiv, b — only x, ferr, berr, work, rwork and info get to be written. everyone else is just there to be looked at 💅
🍓 LAPACK_zspsv
void LAPACK_zspsv(char * uplo, lapack_int * n, lapack_int * nrhs, lapack_complex_double * ap, lapack_int * ipiv, lapack_complex_double * b, lapack_int * ldb, lapack_int * info)
eight args, plain (non-const) ap, ipiv and b — everything's writable, no lda, no work. simple, effective, slay ✨
🧚 LAPACK_zspsvx
void LAPACK_zspsvx(char * fact, char * uplo, lapack_int * n, lapack_int * nrhs, const lapack_complex_double * ap, lapack_complex_double * afp, lapack_int * ipiv, const lapack_complex_double * b, lapack_int * ldb, lapack_complex_double * x, lapack_int * ldx, double * rcond, double * ferr, double * berr, lapack_complex_double * work, double * rwork, lapack_int * info)
fact + uplo, ap is const but afp and ipiv aren't — the asymmetry is sending me 🙈 then b, x, rcond, ferr, berr, work, rwork, info. she's got range.
🔥 LAPACK_zsptrf
void LAPACK_zsptrf(char * uplo, lapack_int * n, lapack_complex_double * ap, lapack_int * ipiv, lapack_int * info)
five args, ipiv right in there, info closing. blink and you'll miss it 🎀
💜 LAPACK_zsptri
void LAPACK_zsptri(char * uplo, lapack_int * n, lapack_complex_double * ap, const lapack_int * ipiv, lapack_complex_double * work, lapack_int * info)
here ipiv is const and it picked up a work param — so six args not five. the glow-up nobody asked for but everybody needed ✨
🎀 LAPACK_zsptrs
void LAPACK_zsptrs(char * uplo, lapack_int * n, lapack_int * nrhs, const lapack_complex_double * ap, const lapack_int * ipiv, lapack_complex_double * b, lapack_int * ldb, lapack_int * info)
ap and ipiv both const, b gets the writes, ldb + info say goodbye. tidy seven 🌸
🌈 LAPACK_zstedc
void LAPACK_zstedc(char * compz, lapack_int * n, double * d, double * e, lapack_complex_double * z, lapack_int * ldz, lapack_complex_double * work, lapack_int * lwork, double * rwork, lapack_int * lrwork, lapack_int * iwork, lapack_int * liwork, lapack_int * info)
OH she brought the whole workspace crew 😭 work/lwork, rwork/lrwork, iwork/liwork — three size params, three buffers, one compz, one ldz. this is the "move-in day, bring everything" of function signatures 💀
⭐ LAPACK_zstegr
void LAPACK_zstegr(char * jobz, char * range, lapack_int * n, double * d, double * e, double * vl, double * vu, lapack_int * il, lapack_int * iu, double * abstol, lapack_int * m, double * w, lapack_complex_double * z, lapack_int * ldz, lapack_int * isuppz, double * work, lapack_int * lwork, lapack_int * iwork, lapack_int * liwork, lapack_int * info)
two char * at the top (jobz, range), then vl, vu, il, iu, abstol, m, w, z, ldz, isuppz, and both work/lwork and iwork/liwork pairs. twenty args. i counted. go off queen 👑
🦋 LAPACK_zstein
void LAPACK_zstein(lapack_int * n, const double * d, const double * e, lapack_int * m, const double * w, const lapack_int * iblock, const lapack_int * isplit, lapack_complex_double * z, lapack_int * ldz, double * work, lapack_int * iwork, lapack_int * ifailv, lapack_int * info)
no uplo, no jobz — straight in with n and two const double * beauties. iblock and isplit are const lapack_int *, and there's an ifailv hanging out right before info. niche but essential 🫶
🍓 LAPACK_zstemr
void LAPACK_zstemr(char * jobz, char * range, lapack_int * n, double * d, double * e, double * vl, double * vu, lapack_int * il, lapack_int * iu, lapack_int * m, double * w, lapack_complex_double * z, lapack_int * ldz, lapack_int * nzc, lapack_int * isuppz, lapack_logical * tryrac, double * work, lapack_int * lwork, lapack_int * iwork, lapack_int * liwork, lapack_int * info)
zstegr's cousin with a plot twist: no abstol, extra nzc, and a lapack_logical * tryrac 👀 yes bestie, tryrac is really the name, i'm not joking. same work/lwork + iwork/liwork double act. twenty-one args, an absolute unit 💀
🧚 LAPACK_zsteqr
void LAPACK_zsteqr(char * compz, lapack_int * n, double * d, double * e, lapack_complex_double * z, lapack_int * ldz, double * work, lapack_int * info)
compz, n, d, e, z, ldz, work, info. eight args, zero chaos, pure calm ✨
💖 LAPACK_zsycon
void LAPACK_zsycon(char * uplo, lapack_int * n, const lapack_complex_double * a, lapack_int * lda, const lapack_int * ipiv, double * anorm, double * rcond, lapack_complex_double * work, lapack_int * info)
welcome to the sy section 💅 uplo, n, a with lda, const lapack_int * ipiv, then anorm, rcond, work, info. nine, no notes.
🎀 LAPACK_zsycon_3
void LAPACK_zsycon_3(char * uplo, lapack_int * n, const lapack_complex_double * a, lapack_int * lda, const lapack_complex_double * e, const lapack_int * ipiv, double * anorm, double * rcond, lapack_complex_double * work, lapack_int * info)
yes it's _3, yes that's really the suffix, no i won't be explaining (not my job, the docs said nothing 😭). it's the same as zsycon but with an extra const lapack_complex_double * e wedged in after lda. tiny difference, whole new routine 🦋
🌸 LAPACK_zsyconv
void LAPACK_zsyconv(char * uplo, char * way, lapack_int * n, lapack_complex_double * a, lapack_int * lda, const lapack_int * ipiv, lapack_complex_double * e, lapack_int * info)
two chars up top this time — uplo and way 🎀 then the a/lda pair, const lapack_int * ipiv, an e output, and info. "which way" is literally a parameter, we stan a decisive function.
🔥 LAPACK_zsyequb
void LAPACK_zsyequb(char * uplo, lapack_int * n, const lapack_complex_double * a, lapack_int * lda, double * s, double * scond, double * amax, lapack_complex_double * work, lapack_int * info)
a is const, everything after is outputs: s, scond, amax, work, info. that "equb" in the name and that scond/amax energy? very much the scaling crew ✨
⭐ LAPACK_zsyr
void LAPACK_zsyr(char * uplo, lapack_int * n, lapack_complex_double * alpha, const lapack_complex_double * x, lapack_int * incx, lapack_complex_double * a, lapack_int * lda)
WAIT. look at this. no info 😱 literally ends on lda. uplo, n, alpha, const x with an incx (incx!! we haven't seen that in a while), then a and lda. iconique for the sheer audacity 💅
💜 LAPACK_zsyrfs
void LAPACK_zsyrfs(char * uplo, lapack_int * n, lapack_int * nrhs, const lapack_complex_double * a, lapack_int * lda, const lapack_complex_double * af, lapack_int * ldaf, const lapack_int * ipiv, const lapack_complex_double * b, lapack_int * ldb, lapack_complex_double * x, lapack_int * ldx, double * ferr, double * berr, lapack_complex_double * work, double * rwork, lapack_int * info)
back to the info lifestyle ✅ a, af, ipiv, b all const; x, ferr, berr, work, rwork, info do the writing. seventeen args of pure diligence 🫶
🦋 LAPACK_zsyrfsx
void LAPACK_zsyrfsx(char * uplo, char * equed, lapack_int * n, lapack_int * nrhs, const lapack_complex_double * a, lapack_int * lda, const lapack_complex_double * af, lapack_int * ldaf, const lapack_int * ipiv, const double * s, const lapack_complex_double * b, lapack_int * ldb, lapack_complex_double * x, lapack_int * ldx, double * rcond, double * berr, lapack_int * n_err_bnds, double * err_bnds_norm, double * err_bnds_comp, lapack_int * nparams, double * params, lapack_complex_double * work, double * rwork, lapack_int * info)
the x suffix means business: uplo + equed, the usual a/af/ipiv/b const party (plus a const double * s), then x, rcond, berr, and the full n_err_bnds/err_bnds_norm/err_bnds_comp/nparams/params set. twenty-three args. she said "and one more thing" five times 😭
🍓 LAPACK_zsysv
void LAPACK_zsysv(char * uplo, lapack_int * n, lapack_int * nrhs, lapack_complex_double * a, lapack_int * lda, lapack_int * ipiv, lapack_complex_double * b, lapack_int * ldb, lapack_complex_double * work, lapack_int * lwork, lapack_int * info)
uplo, n, nrhs, a/lda, ipiv, b/ldb, work/lwork, info. eleven args, one very respectable routine 🎀
🧚 LAPACK_zsysv_aa
void LAPACK_zsysv_aa(char * uplo, lapack_int * n, lapack_int * nrhs, lapack_complex_double * a, lapack_int * lda, lapack_int * ipiv, lapack_complex_double * b, lapack_int * ldb, lapack_complex_double * work, lapack_int * lwork, lapack_int * info)
identical to zsysv above, just wearing an _aa name tag. signature twin fr fr ✨
🌈 LAPACK_zsysv_aa_2stage
void LAPACK_zsysv_aa_2stage(char * uplo, lapack_int * n, lapack_int * nrhs, lapack_complex_double * a, lapack_int * lda, lapack_complex_double * tb, lapack_int * ltb, lapack_int * ipiv, lapack_int * ipiv2,
okay so _aa_2stage is a whole different beast — new tb/ltb pair for the 2stage life, AND a second pivot array ipiv2 👀 two pivot families, two stages, one very extra routine.
and that's where this part cuts off — the signature is mid-ipiv2, so the rest of it (plus whatever comes next) is waiting for you in the next chunk. don't panic, keep scrolling bestie 🫶
...and here's the tail end of that previous one, still going, still serving 💅:
lapack_complex_double * b, lapack_int * ldb, lapack_complex_double *
work, lapack_int * lwork, lapack_int * info)
LAPACK_zsysv_rk
okay so this one's giving solver energy — uplo, n, nrhs, a, lda, the e array, ipiv, b, ldb, work, lwork, and bestie info holding it all together at the end 🫶
void LAPACK_zsysv_rk (char * uplo, lapack_int * n, lapack_int * nrhs,
lapack_complex_double * a, lapack_int * lda, lapack_complex_double * e,
lapack_int * ipiv, lapack_complex_double * b, lapack_int * ldb,
lapack_complex_double * work, lapack_int * lwork, lapack_int * info)
LAPACK_zsysv_rook
same vibe, rook edition — no e array this time, just uplo, n, nrhs, a, lda, ipiv, b, ldb, work, lwork, info ✨
void LAPACK_zsysv_rook (char * uplo, lapack_int * n, lapack_int * nrhs,
lapack_complex_double * a, lapack_int * lda, lapack_int * ipiv,
lapack_complex_double * b, lapack_int * ldb, lapack_complex_double *
work, lapack_int * lwork, lapack_int * info)
LAPACK_zsysvx
the x means extra, and extra means extra — now we got fact, af, ldaf, x, ldx, and three little doubles reporting back: rcond, ferr, berr, plus rwork in the mix 🔥
void LAPACK_zsysvx (char * fact, char * uplo, lapack_int * n, lapack_int *
nrhs, const lapack_complex_double * a, lapack_int * lda,
lapack_complex_double * af, lapack_int * ldaf, lapack_int * ipiv, const
lapack_complex_double * b, lapack_int * ldb, lapack_complex_double * x,
lapack_int * ldx, double * rcond, double * ferr, double * berr,
lapack_complex_double * work, lapack_int * lwork, double * rwork,
lapack_int * info)
LAPACK_zsysvxx
not a typo, that's genuinely two x's and she's the main character 👑 look at this roster: fact, uplo, n, nrhs, a, lda, af, ldaf, ipiv, equed, s, b, ldb, x, ldx, rcond, rpvgrw, berr, n_err_bnds, err_bnds_norm, err_bnds_comp, nparams, params, work, rwork, info. that's a whole group chat, no cap 😭
void LAPACK_zsysvxx (char * fact, char * uplo, lapack_int * n, lapack_int *
nrhs, lapack_complex_double * a, lapack_int * lda, lapack_complex_double
* af, lapack_int * ldaf, lapack_int * ipiv, char * equed, double * s,
lapack_complex_double * b, lapack_int * ldb, lapack_complex_double * x,
lapack_int * ldx, double * rcond, double * rpvgrw, double * berr,
lapack_int * n_err_bnds, double * err_bnds_norm, double * err_bnds_comp,
lapack_int * nparams, double * params, lapack_complex_double * work,
double * rwork, lapack_int * info)
LAPACK_zsyswapr
short and sweet, we love a low-argument icon 💖 uplo, n, a, lda, and the swap duo i1 and i2. no info even — she's confident like that.
void LAPACK_zsyswapr (char * uplo, lapack_int * n, lapack_complex_double *
a, lapack_int * lda, lapack_int * i1, lapack_int * i2)
LAPACK_zsytrf
factorization era 🔪 uplo, n, a, lda, ipiv, work, lwork, info — the classic lineup.
void LAPACK_zsytrf (char * uplo, lapack_int * n, lapack_complex_double * a,
lapack_int * lda, lapack_int * ipiv, lapack_complex_double * work,
lapack_int * lwork, lapack_int * info)
LAPACK_zsytrf_aa
same crew as above but with the _aa suffix, and the arguments are literally identical bestie: uplo, n, a, lda, ipiv, work, lwork, info ⭐
void LAPACK_zsytrf_aa (char * uplo, lapack_int * n, lapack_complex_double *
a, lapack_int * lda, lapack_int * ipiv, lapack_complex_double * work,
lapack_int * lwork, lapack_int * info)
LAPACK_zsytrf_aa_2stage
"2stage" said what she said 🎀 now there's tb, ltb, ipiv, and ipiv2 living in here alongside uplo, n, a, lda, work, lwork, info.
void LAPACK_zsytrf_aa_2stage (char * uplo, lapack_int * n,
lapack_complex_double * a, lapack_int * lda, lapack_complex_double * tb,
lapack_int * ltb, lapack_int * ipiv, lapack_int * ipiv2,
lapack_complex_double * work, lapack_int * lwork, lapack_int * info)
LAPACK_zsytrf_rk
_rk variant bringing the e array along for the ride: uplo, n, a, lda, e, ipiv, work, lwork, info 🦋
void LAPACK_zsytrf_rk (char * uplo, lapack_int * n, lapack_complex_double *
a, lapack_int * lda, lapack_complex_double * e, lapack_int * ipiv,
lapack_complex_double * work, lapack_int * lwork, lapack_int * info)
LAPACK_zsytrf_rook
and the _rook sibling, no e this time — uplo, n, a, lda, ipiv, work, lwork, info 💜
void LAPACK_zsytrf_rook (char * uplo, lapack_int * n, lapack_complex_double
* a, lapack_int * lda, lapack_int * ipiv, lapack_complex_double * work,
lapack_int * lwork, lapack_int * info)
LAPACK_zsytri
inverse time, and notice ipiv is const here bestie, she's read-only now 🙈 uplo, n, a, lda, ipiv, work, info.
void LAPACK_zsytri (char * uplo, lapack_int * n, lapack_complex_double * a,
lapack_int * lda, const lapack_int * ipiv, lapack_complex_double * work,
lapack_int * info)
LAPACK_zsytri2
the sequel, and she brought lwork with her ✨ uplo, n, a, lda, ipiv, work, lwork, info.
void LAPACK_zsytri2 (char * uplo, lapack_int * n, lapack_complex_double * a,
lapack_int * lda, const lapack_int * ipiv, lapack_complex_double * work,
lapack_int * lwork, lapack_int * info)
LAPACK_zsytri2x
2x, because apparently 2 wasn't enough 💀 same lwork-free energy as the first one but with an extra nb parameter: uplo, n, a, lda, ipiv, work, nb, info.
void LAPACK_zsytri2x (char * uplo, lapack_int * n, lapack_complex_double *
a, lapack_int * lda, const lapack_int * ipiv, lapack_complex_double *
work, lapack_int * nb, lapack_int * info)
LAPACK_zsytri_3
underscore three, and she's thorough — e is const and ipiv is const, plus lwork returns: uplo, n, a, lda, e, ipiv, work, lwork, info 🌸
void LAPACK_zsytri_3 (char * uplo, lapack_int * n, lapack_complex_double *
a, lapack_int * lda, const lapack_complex_double * e, const lapack_int *
ipiv, lapack_complex_double * work, lapack_int * lwork, lapack_int *
info)
LAPACK_zsytrs
solve mode activated 🔥 uplo, n, nrhs, a, lda, ipiv, b, ldb, info — no work in sight, she travels light.
void LAPACK_zsytrs (char * uplo, lapack_int * n, lapack_int * nrhs, const
lapack_complex_double * a, lapack_int * lda, const lapack_int * ipiv,
lapack_complex_double * b, lapack_int * ldb, lapack_int * info)
LAPACK_zsytrs2
the 2 version adds a work scratch pad: uplo, n, nrhs, a, lda, ipiv, b, ldb, work, info 🎀
void LAPACK_zsytrs2 (char * uplo, lapack_int * n, lapack_int * nrhs, const
lapack_complex_double * a, lapack_int * lda, const lapack_int * ipiv,
lapack_complex_double * b, lapack_int * ldb, lapack_complex_double *
work, lapack_int * info)
LAPACK_zsytrs_3
underscore three again but now in solve form — and yes e is back, const as ever: uplo, n, nrhs, a, lda, e, ipiv, b, ldb, info 🦋
void LAPACK_zsytrs_3 (char * uplo, lapack_int * n, lapack_int * nrhs, const
lapack_complex_double * a, lapack_int * lda, const lapack_complex_double
* e, const lapack_int * ipiv, lapack_complex_double * b, lapack_int *
ldb, lapack_int * info)
LAPACK_zsytrs_aa
_aa solve version, and we're back with work + lwork: uplo, n, nrhs, a, lda, ipiv, b, ldb, work, lwork, info ⭐
void LAPACK_zsytrs_aa (char * uplo, lapack_int * n, lapack_int * nrhs, const
lapack_complex_double * a, lapack_int * lda, const lapack_int * ipiv,
lapack_complex_double * b, lapack_int * ldb, lapack_complex_double *
work, lapack_int * lwork, lapack_int * info)
LAPACK_zsytrs_aa_2stage
two stages, zero chill 👑 uplo, n, nrhs, a, lda, tb, ltb, ipiv, ipiv2, b, ldb, info. note: no work, no lwork, and honestly? she doesn't need them.
void LAPACK_zsytrs_aa_2stage (char * uplo, lapack_int * n, lapack_int *
nrhs, lapack_complex_double * a, lapack_int * lda, lapack_complex_double
* tb, lapack_int * ltb, lapack_int * ipiv, lapack_int * ipiv2,
lapack_complex_double * b, lapack_int * ldb, lapack_int * info)
LAPACK_zsytrs_rook
the _rook solver, keeping it classic: uplo, n, nrhs, a, lda, ipiv, b, ldb, info 💜
void LAPACK_zsytrs_rook (char * uplo, lapack_int * n, lapack_int * nrhs,
const lapack_complex_double * a, lapack_int * lda, const lapack_int *
ipiv, lapack_complex_double * b, lapack_int * ldb, lapack_int * info)
LAPACK_ztbcon
new prefix alert, we're in tb territory now and it's giving tridiagonal realness 💅 norm, uplo, diag, n, kd, ab, ldab, rcond, work, rwork, info. three char pointers at the front — norm, uplo, diag — like a little trio.
void LAPACK_ztbcon (char * norm, char * uplo, char * diag, lapack_int * n,
lapack_int * kd, const lapack_complex_double * ab, lapack_int * ldab,
double * rcond, lapack_complex_double * work, double * rwork, lapack_int
* info)
LAPACK_ztbrfs
and the refine one 🎀 uplo, trans, diag, n, kd, nrhs, ab, ldab, b, ldb, x, ldx, ferr, berr, work, rwork, info. couple of const guys in there (ab, b, x), which is very respectful of them ngl.
void LAPACK_ztbrfs (char * uplo, char * trans, char * diag, lapack_int * n,
lapack_int * kd, lapack_int * nrhs, const lapack_complex_double * ab,
lapack_int * ldab, const lapack_complex_double * b, lapack_int * ldb,
const lapack_complex_double * x, lapack_int * ldx, double * ferr, double
* berr, lapack_complex_double * work, double * rwork, lapack_int * info)
okay so the z-family keeps rolling and bestie, these signatures are long — but we’re keeping every single pointer, every lapack_logical, every double * rwork, no cap 💅 here’s the next batch exactly as they live:
LAPACK_ztbtrs — full signature, untouched:
void LAPACK_ztbtrs (char * uplo, char * trans, char * diag, lapack_int * n,
lapack_int * kd, lapack_int * nrhs, const lapack_complex_double * ab,
lapack_int * ldab, lapack_complex_double * b, lapack_int * ldb,
lapack_int * info)
LAPACK_ztfsm — catch it:
void LAPACK_ztfsm (char * transr, char * side, char * uplo, char * trans,
char * diag, lapack_int * m, lapack_int * n, lapack_complex_double *
alpha, const lapack_complex_double * a, lapack_complex_double * b,
lapack_int * ldb)
LAPACK_ztftri — here’s the whole thing:
void LAPACK_ztftri (char * transr, char * uplo, char * diag, lapack_int * n,
lapack_complex_double * a, lapack_int * info)
LAPACK_ztfttp — signature drop ✨:
void LAPACK_ztfttp (char * transr, char * uplo, lapack_int * n, const
lapack_complex_double * arf, lapack_complex_double * ap, lapack_int *
info)
LAPACK_ztfttr — not me losing a single arg:
void LAPACK_ztfttr (char * transr, char * uplo, lapack_int * n, const
lapack_complex_double * arf, lapack_complex_double * a, lapack_int *
lda, lapack_int * info)
LAPACK_ztgevc — big signature energy:
void LAPACK_ztgevc (char * side, char * howmny, const lapack_logical *
select, lapack_int * n, const lapack_complex_double * s, lapack_int *
lds, const lapack_complex_double * p, lapack_int * ldp,
lapack_complex_double * vl, lapack_int * ldvl, lapack_complex_double *
vr, lapack_int * ldvr, lapack_int * mm, lapack_int * m,
lapack_complex_double * work, double * rwork, lapack_int * info)
LAPACK_ztgexc — full signature, zero skips:
void LAPACK_ztgexc (lapack_logical * wantq, lapack_logical * wantz,
lapack_int * n, lapack_complex_double * a, lapack_int * lda,
lapack_complex_double * b, lapack_int * ldb, lapack_complex_double * q,
lapack_int * ldq, lapack_complex_double * z, lapack_int * ldz,
lapack_int * ifst, lapack_int * ilst, lapack_int * info)
LAPACK_ztgsen — the long one, kept intact:
void LAPACK_ztgsen (lapack_int * ijob, lapack_logical * wantq,
lapack_logical * wantz, const lapack_logical * select, lapack_int * n,
lapack_complex_double * a, lapack_int * lda, lapack_complex_double * b,
lapack_int * ldb, lapack_complex_double * alpha, lapack_complex_double *
beta, lapack_complex_double * q, lapack_int * ldq, lapack_complex_double
* z, lapack_int * ldz, lapack_int * m, double * pl, double * pr, double
* dif, lapack_complex_double * work, lapack_int * lwork, lapack_int *
iwork, lapack_int * liwork, lapack_int * info)
LAPACK_ztgsja — yes bestie, every parameter is here:
void LAPACK_ztgsja (char * jobu, char * jobv, char * jobq, lapack_int * m,
lapack_int * p, lapack_int * n, lapack_int * k, lapack_int * l,
lapack_complex_double * a, lapack_int * lda, lapack_complex_double * b,
lapack_int * ldb, double * tola, double * tolb, double * alpha, double *
beta, lapack_complex_double * u, lapack_int * ldu, lapack_complex_double
* v, lapack_int * ldv, lapack_complex_double * q, lapack_int * ldq,
lapack_complex_double * work, lapack_int * ncycle, lapack_int * info)
LAPACK_ztgsna — signature copied character-for-character:
void LAPACK_ztgsna (char * job, char * howmny, const lapack_logical *
select, lapack_int * n, const lapack_complex_double * a, lapack_int *
lda, const lapack_complex_double * b, lapack_int * ldb, const
lapack_complex_double * vl, lapack_int * ldvl, const
lapack_complex_double * vr, lapack_int * ldvr, double * s, double * dif,
lapack_int * mm, lapack_int * m, lapack_complex_double * work,
lapack_int * lwork, lapack_int * iwork, lapack_int * info)
LAPACK_ztgsyl — another absolute unit of a prototype:
void LAPACK_ztgsyl (char * trans, lapack_int * ijob, lapack_int * m,
lapack_int * n, const lapack_complex_double * a, lapack_int * lda, const
lapack_complex_double * b, lapack_int * ldb, lapack_complex_double * c,
lapack_int * ldc, const lapack_complex_double * d, lapack_int * ldd,
const lapack_complex_double * e, lapack_int * lde, lapack_complex_double
* f, lapack_int * ldf, double * scale, double * dif,
lapack_complex_double * work, lapack_int * lwork, lapack_int * iwork,
lapack_int * info)
LAPACK_ztpcon — here:
void LAPACK_ztpcon (char * norm, char * uplo, char * diag, lapack_int * n,
const lapack_complex_double * ap, double * rcond, lapack_complex_double
* work, double * rwork, lapack_int * info)
LAPACK_ztpmqrt — all the pointers, all the vibes:
void LAPACK_ztpmqrt (char * side, char * trans, lapack_int * m, lapack_int *
n, lapack_int * k, lapack_int * l, lapack_int * nb, const
lapack_complex_double * v, lapack_int * ldv, const lapack_complex_double
* t, lapack_int * ldt, lapack_complex_double * a, lapack_int * lda,
lapack_complex_double * b, lapack_int * ldb, lapack_complex_double *
work, lapack_int * info)
LAPACK_ztpqrt — signature:
void LAPACK_ztpqrt (lapack_int * m, lapack_int * n, lapack_int * l,
lapack_int * nb, lapack_complex_double * a, lapack_int * lda,
lapack_complex_double * b, lapack_int * ldb, lapack_complex_double * t,
lapack_int * ldt, lapack_complex_double * work, lapack_int * info)
LAPACK_ztpqrt2 — modest name, full signature:
void LAPACK_ztpqrt2 (lapack_int * m, lapack_int * n, lapack_int * l,
lapack_complex_double * a, lapack_int * lda, lapack_complex_double * b,
lapack_int * ldb, lapack_complex_double * t, lapack_int * ldt,
lapack_int * info)
LAPACK_ztprfb — bestie, it’s giving parameter list:
void LAPACK_ztprfb (char * side, char * trans, char * direct, char * storev,
lapack_int * m, lapack_int * n, lapack_int * k, lapack_int * l, const
lapack_complex_double * v, lapack_int * ldv, const lapack_complex_double
* t, lapack_int * ldt, lapack_complex_double * a, lapack_int * lda,
lapack_complex_double * b, lapack_int * ldb, lapack_complex_double *
work, lapack_int * ldwork)
LAPACK_ztprfs — keep every ferr, berr, and rwork:
void LAPACK_ztprfs (char * uplo, char * trans, char * diag, lapack_int * n,
lapack_int * nrhs, const lapack_complex_double * ap, const
lapack_complex_double * b, lapack_int * ldb, const lapack_complex_double
* x, lapack_int * ldx, double * ferr, double * berr,
lapack_complex_double * work, double * rwork, lapack_int * info)
LAPACK_ztptri — short and iconic:
void LAPACK_ztptri (char * uplo, char * diag, lapack_int * n,
lapack_complex_double * ap, lapack_int * info)
LAPACK_ztptrs — full prototype:
void LAPACK_ztptrs (char * uplo, char * trans, char * diag, lapack_int * n,
lapack_int * nrhs, const lapack_complex_double * ap,
lapack_complex_double * b, lapack_int * ldb, lapack_int * info)
LAPACK_ztpttf — not skipping anything:
void LAPACK_ztpttf (char * transr, char * uplo, lapack_int * n, const
lapack_complex_double * ap, lapack_complex_double * arf, lapack_int *
info)
LAPACK_ztpttr — here she is:
void LAPACK_ztpttr (char * uplo, lapack_int * n, const lapack_complex_double
* ap, lapack_complex_double * a, lapack_int * lda, lapack_int * info)
LAPACK_ztrcon — all args present and accounted for 🫶:
void LAPACK_ztrcon (char * norm, char * uplo, char * diag, lapack_int * n,
const lapack_complex_double * a, lapack_int * lda, double * rcond,
lapack_complex_double * work, double * rwork, lapack_int * info)
LAPACK_ztrevc — long signature, no crumbs:
void LAPACK_ztrevc (char * side, char * howmny, const lapack_logical *
select, lapack_int * n, lapack_complex_double * t, lapack_int * ldt,
lapack_complex_double * vl, lapack_int * ldvl, lapack_complex_double *
vr, lapack_int * ldvr, lapack_int * mm, lapack_int * m,
lapack_complex_double * work, double * rwork, lapack_int * info)
LAPACK_ztrexc — exact signature:
void LAPACK_ztrexc (char * compq, lapack_int * n, lapack_complex_double * t,
lapack_int * ldt, lapack_complex_double * q, lapack_int * ldq,
lapack_int * ifst, lapack_int * ilst, lapack_int * info)
LAPACK_ztrrfs — signature straight up:
void LAPACK_ztrrfs (char * uplo, char * trans, char * diag, lapack_int * n,
lapack_int * nrhs, const lapack_complex_double * a, lapack_int * lda,
const lapack_complex_double * b, lapack_int * ldb, const
lapack_complex_double * x, lapack_int * ldx, double * ferr, double *
berr, lapack_complex_double * work, double * rwork, lapack_int * info)
LAPACK_ztrsen — all the s, sep, work, and lwork included:
void LAPACK_ztrsen (char * job, char * compq, const lapack_logical * select,
lapack_int * n, lapack_complex_double * t, lapack_int * ldt,
lapack_complex_double * q, lapack_int * ldq, lapack_complex_double * w,
lapack_int * m, double * s, double * sep, lapack_complex_double * work,
lapack_int * lwork, lapack_int * info)
LAPACK_ztrsna — full thing, untouched:
void LAPACK_ztrsna (char * job, char * howmny, const lapack_logical *
select, lapack_int * n, const lapack_complex_double * t, lapack_int *
ldt, const lapack_complex_double * vl, lapack_int * ldvl, const
lapack_complex_double * vr, lapack_int * ldvr, double * s, double * sep,
lapack_int * mm, lapack_int * m, lapack_complex_double * work,
lapack_int * ldwork, double * rwork, lapack_int * info)
LAPACK_ztrsyl — catch:
void LAPACK_ztrsyl (char * trana, char * tranb, lapack_int * isgn,
lapack_int * m, lapack_int * n, const lapack_complex_double * a,
lapack_int * lda, const lapack_complex_double * b, lapack_int * ldb,
lapack_complex_double * c, lapack_int * ldc, double * scale, lapack_int
* info)
LAPACK_ztrtri — here:
void LAPACK_ztrtri (char * uplo, char * diag, lapack_int * n,
lapack_complex_double * a, lapack_int * lda, lapack_int * info)
LAPACK_ztrtrs — full signature:
void LAPACK_ztrtrs (char * uplo, char * trans, char * diag, lapack_int * n,
lapack_int * nrhs, const lapack_complex_double * a, lapack_int * lda,
lapack_complex_double * b, lapack_int * ldb, lapack_int * info)
LAPACK_ztrttf — not a detail out of place:
void LAPACK_ztrttf (char * transr, char * uplo, lapack_int * n, const
lapack_complex_double * a, lapack_int * lda, lapack_complex_double *
arf, lapack_int * info)
LAPACK_ztrttp — signature:
void LAPACK_ztrttp (char * uplo, lapack_int * n, const lapack_complex_double
* a, lapack_int * lda, lapack_complex_double * ap, lapack_int * info)
LAPACK_ztzrzf — all the tau, work, and lwork vibes:
void LAPACK_ztzrzf (lapack_int * m, lapack_int * n, lapack_complex_double *
a, lapack_int * lda, lapack_complex_double * tau, lapack_complex_double
* work, lapack_int * lwork, lapack_int * info)
LAPACK_zunbdb — an absolute icon of a parameter list 👑:
void LAPACK_zunbdb (char * trans, char * signs, lapack_int * m, lapack_int *
p, lapack_int * q, lapack_complex_double * x11, lapack_int * ldx11,
lapack_complex_double * x12, lapack_int * ldx12, lapack_complex_double *
x21, lapack_int * ldx21, lapack_complex_double * x22, lapack_int *
ldx22, double * theta, double * phi, lapack_complex_double * taup1,
lapack_complex_double * taup2, lapack_complex_double * tauq1,
lapack_complex_double * tauq2, lapack_complex_double * work, lapack_int
* lwork, lapack_int * info)
LAPACK_zuncsd — yes, every x11 through v2t is here:
void LAPACK_zuncsd (char * jobu1, char * jobu2, char * jobv1t, char *
jobv2t, char * trans, char * signs, lapack_int * m, lapack_int * p,
lapack_int * q, lapack_complex_double * x11, lapack_int * ldx11,
lapack_complex_double * x12, lapack_int * ldx12, lapack_complex_double *
x21, lapack_int * ldx21, lapack_complex_double * x22, lapack_int *
ldx22, double * theta, lapack_complex_double * u1, lapack_int * ldu1,
lapack_complex_double * u2, lapack_int * ldu2, lapack_complex_double *
v1t, lapack_int * ldv1t, lapack_complex_double * v2t, lapack_int *
ldv2t, lapack_complex_double * work, lapack_int * lwork, double * rwork,
lapack_int * lrwork, lapack_int * iwork, lapack_int * info)
LAPACK_zuncsd2by1 — full signature, no cap:
void LAPACK_zuncsd2by1 (char * jobu1, char * jobu2, char * jobv1t,
lapack_int * m, lapack_int * p, lapack_int * q, lapack_complex_double *
x11, lapack_int * ldx11, lapack_complex_double * x21, lapack_int *
ldx21, double * theta, lapack_complex_double * u1, lapack_int * ldu1,
lapack_complex_double * u2, lapack_int * ldu2, lapack_complex_double *
v1t, lapack_int * ldv1t, lapack_complex_double * work, lapack_int *
lwork, double * rwork, lapack_int * lrwork, lapack_int * iwork,
lapack_int * info)
LAPACK_zungbr — here’s the exact drop:
void LAPACK_zungbr (char * vect, lapack_int * m, lapack_int * n, lapack_int
* k, lapack_complex_double * a, lapack_int * lda, const
lapack_complex_double * tau, lapack_complex_double * work, lapack_int *
lwork, lapack_int * info)
LAPACK_zunghr — this one comes in hot and gets cut off right at the end:
void LAPACK_zunghr (lapack_int * n, lapack_int * ilo, lapack_int * ihi,
lapack_complex_double * a, lapack_int * lda, const lapack_complex_double
okay so we're still deep in the function-declaration trenches, bestie, and the zun* girlies are still showing up. these are all void-returning which lowkey gives "I do my work through pointer arguments and I don't need to tell you about it" energy 💅 anyway, here's the rest of the zung/zunm/zun glow-up squad:
void LAPACK_zunglq (lapack_int * m, lapack_int * n, lapack_int * k,
lapack_complex_double * a, lapack_int * lda, const lapack_complex_double
* tau, lapack_complex_double * work, lapack_int * lwork, lapack_int *
info)
void LAPACK_zungql (lapack_int * m, lapack_int * n, lapack_int * k,
lapack_complex_double * a, lapack_int * lda, const lapack_complex_double
* tau, lapack_complex_double * work, lapack_int * lwork, lapack_int *
info)
void LAPACK_zungqr (lapack_int * m, lapack_int * n, lapack_int * k,
lapack_complex_double * a, lapack_int * lda, const lapack_complex_double
* tau, lapack_complex_double * work, lapack_int * lwork, lapack_int *
info)
void LAPACK_zungrq (lapack_int * m, lapack_int * n, lapack_int * k,
lapack_complex_double * a, lapack_int * lda, const lapack_complex_double
* tau, lapack_complex_double * work, lapack_int * lwork, lapack_int *
info)
void LAPACK_zungtr (char * uplo, lapack_int * n, lapack_complex_double * a,
lapack_int * lda, const lapack_complex_double * tau,
lapack_complex_double * work, lapack_int * lwork, lapack_int * info)
void LAPACK_zunmbr (char * vect, char * side, char * trans, lapack_int * m,
lapack_int * n, lapack_int * k, const lapack_complex_double * a,
lapack_int * lda, const lapack_complex_double * tau,
lapack_complex_double * c, lapack_int * ldc, lapack_complex_double *
work, lapack_int * lwork, lapack_int * info)
void LAPACK_zunmhr (char * side, char * trans, lapack_int * m, lapack_int *
n, lapack_int * ilo, lapack_int * ihi, const lapack_complex_double * a,
lapack_int * lda, const lapack_complex_double * tau,
lapack_complex_double * c, lapack_int * ldc, lapack_complex_double *
work, lapack_int * lwork, lapack_int * info)
void LAPACK_zunmlq (char * side, char * trans, lapack_int * m, lapack_int *
n, lapack_int * k, const lapack_complex_double * a, lapack_int * lda,
const lapack_complex_double * tau, lapack_complex_double * c, lapack_int
* ldc, lapack_complex_double * work, lapack_int * lwork, lapack_int *
info)
void LAPACK_zunmql (char * side, char * trans, lapack_int * m, lapack_int *
n, lapack_int * k, const lapack_complex_double * a, lapack_int * lda,
const lapack_complex_double * tau, lapack_complex_double * c, lapack_int
* ldc, lapack_complex_double * work, lapack_int * lwork, lapack_int *
info)
void LAPACK_zunmqr (char * side, char * trans, lapack_int * m, lapack_int *
n, lapack_int * k, const lapack_complex_double * a, lapack_int * lda,
const lapack_complex_double * tau, lapack_complex_double * c, lapack_int
* ldc, lapack_complex_double * work, lapack_int * lwork, lapack_int *
info)
void LAPACK_zunmrq (char * side, char * trans, lapack_int * m, lapack_int *
n, lapack_int * k, const lapack_complex_double * a, lapack_int * lda,
const lapack_complex_double * tau, lapack_complex_double * c, lapack_int
* ldc, lapack_complex_double * work, lapack_int * lwork, lapack_int *
info)
void LAPACK_zunmrz (char * side, char * trans, lapack_int * m, lapack_int *
n, lapack_int * k, lapack_int * l, const lapack_complex_double * a,
lapack_int * lda, const lapack_complex_double * tau,
lapack_complex_double * c, lapack_int * ldc, lapack_complex_double *
work, lapack_int * lwork, lapack_int * info)
void LAPACK_zunmtr (char * side, char * uplo, char * trans, lapack_int * m,
lapack_int * n, const lapack_complex_double * a, lapack_int * lda, const
lapack_complex_double * tau, lapack_complex_double * c, lapack_int *
ldc, lapack_complex_double * work, lapack_int * lwork, lapack_int *
info)
void LAPACK_zupgtr (char * uplo, lapack_int * n, const lapack_complex_double
* ap, const lapack_complex_double * tau, lapack_complex_double * q,
lapack_int * ldq, lapack_complex_double * work, lapack_int * info)
void LAPACK_zupmtr (char * side, char * uplo, char * trans, lapack_int * m,
lapack_int * n, const lapack_complex_double * ap, const
lapack_complex_double * tau, lapack_complex_double * c, lapack_int *
ldc, lapack_complex_double * work, lapack_int * info)
now we pivot, bestie — say hi to the LAPACKE_c* complex-float crew 🫶 every single one of these returns a lapack_int, and each comes with its own _work twin. matching set, no cap. ✨
LAPACKE_cbbcsd— takesint matrix_layout,char jobu1,char jobu2,char jobv1t,char jobv2t,char trans,lapack_int m,lapack_int p,lapack_int q,float * theta,float * phi,lapack_complex_float * u1,lapack_int ldu1,lapack_complex_float * u2,lapack_int ldu2,lapack_complex_float * v1t,lapack_int ldv1t,lapack_complex_float * v2t,lapack_int ldv2t,float * b11d,float * b11e,float * b12d,float * b12e,float * b21d,float * b21e,float * b22d,float * b22e. Definition at line 36 of filelapacke_cbbcsd.c.
lapack_int LAPACKE_cbbcsd (int matrix_layout, char jobu1, char jobu2, char
jobv1t, char jobv2t, char trans, lapack_int m, lapack_int p, lapack_int
q, float * theta, float * phi, lapack_complex_float * u1, lapack_int
ldu1, lapack_complex_float * u2, lapack_int ldu2, lapack_complex_float *
v1t, lapack_int ldv1t, lapack_complex_float * v2t, lapack_int ldv2t,
float * b11d, float * b11e, float * b12d, float * b12e, float * b21d,
float * b21e, float * b22d, float * b22e)
LAPACKE_cbbcsd_work— same roster as above, thenfloat * rwork,lapack_int lrwork. Definition at line 36 of filelapacke_cbbcsd_work.c.
lapack_int LAPACKE_cbbcsd_work (int matrix_layout, char jobu1, char jobu2,
char jobv1t, char jobv2t, char trans, lapack_int m, lapack_int p,
lapack_int q, float * theta, float * phi, lapack_complex_float * u1,
lapack_int ldu1, lapack_complex_float * u2, lapack_int ldu2,
lapack_complex_float * v1t, lapack_int ldv1t, lapack_complex_float *
v2t, lapack_int ldv2t, float * b11d, float * b11e, float * b12d, float *
b12e, float * b21d, float * b21e, float * b22d, float * b22e, float *
rwork, lapack_int lrwork)
LAPACKE_cbdsqr—int matrix_layout,char uplo,lapack_int n,lapack_int ncvt,lapack_int nru,lapack_int ncc,float * d,float * e,lapack_complex_float * vt,lapack_int ldvt,lapack_complex_float * u,lapack_int ldu,lapack_complex_float * c,lapack_int ldc. Definition at line 36 of filelapacke_cbdsqr.c.
lapack_int LAPACKE_cbdsqr (int matrix_layout, char uplo, lapack_int n,
lapack_int ncvt, lapack_int nru, lapack_int ncc, float * d, float * e,
lapack_complex_float * vt, lapack_int ldvt, lapack_complex_float * u,
lapack_int ldu, lapack_complex_float * c, lapack_int ldc)
LAPACKE_cbdsqr_work— the wholecbdsqrlist, then one more little guy:float * work. Definition at line 36 of filelapacke_cbdsqr_work.c.
lapack_int LAPACKE_cbdsqr_work (int matrix_layout, char uplo, lapack_int n,
lapack_int ncvt, lapack_int nru, lapack_int ncc, float * d, float * e,
lapack_complex_float * vt, lapack_int ldvt, lapack_complex_float * u,
lapack_int ldu, lapack_complex_float * c, lapack_int ldc, float * work)
LAPACKE_cgbbrd—int matrix_layout,char vect,lapack_int m,lapack_int n,lapack_int ncc,lapack_int kl,lapack_int ku,lapack_complex_float * ab,lapack_int ldab,float * d,float * e,lapack_complex_float * q,lapack_int ldq,lapack_complex_float * pt,lapack_int ldpt,lapack_complex_float * c,lapack_int ldc. Definition at line 36 of filelapacke_cgbbrd.c.
lapack_int LAPACKE_cgbbrd (int matrix_layout, char vect, lapack_int m,
lapack_int n, lapack_int ncc, lapack_int kl, lapack_int ku,
lapack_complex_float * ab, lapack_int ldab, float * d, float * e,
lapack_complex_float * q, lapack_int ldq, lapack_complex_float * pt,
lapack_int ldpt, lapack_complex_float * c, lapack_int ldc)
LAPACKE_cgbbrd_work— same deal, pluslapack_complex_float * workandfloat * rwork. Definition at line 36 of filelapacke_cgbbrd_work.c.
lapack_int LAPACKE_cgbbrd_work (int matrix_layout, char vect, lapack_int m,
lapack_int n, lapack_int ncc, lapack_int kl, lapack_int ku,
lapack_complex_float * ab, lapack_int ldab, float * d, float * e,
lapack_complex_float * q, lapack_int ldq, lapack_complex_float * pt,
lapack_int ldpt, lapack_complex_float * c, lapack_int ldc,
lapack_complex_float * work, float * rwork)
LAPACKE_cgbcon—int matrix_layout,char norm,lapack_int n,lapack_int kl,lapack_int ku,const lapack_complex_float * ab,lapack_int ldab,const lapack_int * ipiv,float anorm,float * rcond. Definition at line 36 of filelapacke_cgbcon.c.
lapack_int LAPACKE_cgbcon (int matrix_layout, char norm, lapack_int n,
lapack_int kl, lapack_int ku, const lapack_complex_float * ab,
lapack_int ldab, const lapack_int * ipiv, float anorm, float * rcond)
LAPACKE_cgbcon_work— thecgbconsquad pluslapack_complex_float * workandfloat * rwork. Definition at line 36 of filelapacke_cgbcon_work.c.
lapack_int LAPACKE_cgbcon_work (int matrix_layout, char norm, lapack_int n,
lapack_int kl, lapack_int ku, const lapack_complex_float * ab,
lapack_int ldab, const lapack_int * ipiv, float anorm, float * rcond,
lapack_complex_float * work, float * rwork)
LAPACKE_cgbequ—int matrix_layout,lapack_int m,lapack_int n,lapack_int kl,lapack_int ku,const lapack_complex_float * ab,lapack_int ldab,float * r,float * c,float * rowcnd,float * colcnd,float * amax. Definition at line 36 of filelapacke_cgbequ.c.
lapack_int LAPACKE_cgbequ (int matrix_layout, lapack_int m, lapack_int n,
lapack_int kl, lapack_int ku, const lapack_complex_float * ab,
lapack_int ldab, float * r, float * c, float * rowcnd, float * colcnd,
float * amax)
LAPACKE_cgbequ_work— literally the same argument list, no extra friends. Definition at line 36 of filelapacke_cgbequ_work.c.
lapack_int LAPACKE_cgbequ_work (int matrix_layout, lapack_int m, lapack_int
n, lapack_int kl, lapack_int ku, const lapack_complex_float * ab,
lapack_int ldab, float * r, float * c, float * rowcnd, float * colcnd,
float * amax)
LAPACKE_cgbequb— again the exact same signature asLAPACKE_cgbequ:int matrix_layout,lapack_int m,lapack_int n,lapack_int kl,lapack_int ku,const lapack_complex_float * ab,lapack_int ldab,float * r,float * c,float * rowcnd,float * colcnd,float * amax. Definition at line 36 of filelapacke_cgbequb.c.
lapack_int LAPACKE_cgbequb (int matrix_layout, lapack_int m, lapack_int n,
lapack_int kl, lapack_int ku, const lapack_complex_float * ab,
lapack_int ldab, float * r, float * c, float * rowcnd, float * colcnd,
float * amax)
LAPACKE_cgbequb_work— twin of the above, arguments identical, definition at line 36 of filelapacke_cgbequb_work.c.
lapack_int LAPACKE_cgbequb_work (int matrix_layout, lapack_int m, lapack_int
n, lapack_int kl, lapack_int ku, const lapack_complex_float * ab,
lapack_int ldab, float * r, float * c, float * rowcnd, float * colcnd,
float * amax)
LAPACKE_cgbrfs—int matrix_layout,char trans,lapack_int n,lapack_int kl,lapack_int ku,lapack_int nrhs,const lapack_complex_float * ab,lapack_int ldab,const lapack_complex_float * afb,lapack_int ldafb,const lapack_int * ipiv,const lapack_complex_float * b,lapack_int ldb,lapack_complex_float * x,lapack_int ldx,float * ferr,float * berr. Definition at line 36 of filelapacke_cgbrfs.c.
lapack_int LAPACKE_cgbrfs (int matrix_layout, char trans, lapack_int n,
lapack_int kl, lapack_int ku, lapack_int nrhs, const
lapack_complex_float * ab, lapack_int ldab, const lapack_complex_float *
afb, lapack_int ldafb, const lapack_int * ipiv, const
lapack_complex_float * b, lapack_int ldb, lapack_complex_float * x,
lapack_int ldx, float * ferr, float * berr)
LAPACKE_cgbrfs_work— everything fromcgbrfs, thenlapack_complex_float * workandfloat * rworkat the end. Definition at line 36 of filelapacke_cgbrfs_work.c.
lapack_int LAPACKE_cgbrfs_work (int matrix_layout, char trans, lapack_int n,
lapack_int kl, lapack_int ku, lapack_int nrhs, const
lapack_complex_float * ab, lapack_int ldab, const lapack_complex_float *
afb, lapack_int ldafb, const lapack_int * ipiv, const
lapack_complex_float * b, lapack_int ldb, lapack_complex_float * x,
lapack_int ldx, float * ferr, float * berr, lapack_complex_float * work,
float * rwork)
LAPACKE_cgbrfsx— okay this one's got range, bestie:int matrix_layout,char trans,char equed,lapack_int n,lapack_int kl,lapack_int ku,lapack_int nrhs,const lapack_complex_float * ab,lapack_int ldab,const lapack_complex_float * afb,lapack_int ldafb,const lapack_int * ipiv,const float * r,const float * c,const lapack_complex_float * b,lapack_int ldb,lapack_complex_float * x,lapack_int ldx,float * rcond,float * berr,lapack_int n_err_bnds,float * err_bnds_norm,float * err_bnds_comp,lapack_int nparams,float * params. Definition at line 36 of filelapacke_cgbrfsx.c.
lapack_int LAPACKE_cgbrfsx (int matrix_layout, char trans, char equed,
lapack_int n, lapack_int kl, lapack_int ku, lapack_int nrhs, const
lapack_complex_float * ab, lapack_int ldab, const lapack_complex_float *
afb, lapack_int ldafb, const lapack_int * ipiv, const float * r, const
float * c, const lapack_complex_float * b, lapack_int ldb,
lapack_complex_float * x, lapack_int ldx, float * rcond, float * berr,
lapack_int n_err_bnds, float * err_bnds_norm, float * err_bnds_comp,
lapack_int nparams, float * params)
LAPACKE_cgbrfsx_work— hold onto your seat, it's thecgbrfsxroster pluslapack_complex_float * workandfloat * rworktacked on at the end. Definition at line 36 of filelapacke_cgbrfsx_work.c.
lapack_int LAPACKE_cgbrfsx_work (int matrix_layout, char trans, char equed,
lapack_int n, lapack_int kl, lapack_int ku, lapack_int nrhs, const
lapack_complex_float * ab, lapack_int ldab, const lapack_complex_float *
afb, lapack_int ldafb, const lapack_int * ipiv, const float * r, const
float * c, const lapack_complex_float * b, lapack_int ldb,
lapack_complex_float * x, lapack_int ldx, float * rcond, float * berr,
lapack_int n_err_bnds, float * err_bnds_norm, float * err_bnds_comp,
lapack_int nparams, float * params, lapack_complex_float * work, float *
rwork)
LAPACKE_cgbsv—int matrix_layout,lapack_int n,lapack_int kl,lapack_int ku,lapack_int nrhs,lapack_complex_float * ab,lapack_int ldab,lapack_int * ipiv,lapack_complex_float * b,lapack_int ldb. Definition at line 36 of filelapacke_cgbsv.c.
lapack_int LAPACKE_cgbsv (int matrix_layout, lapack_int n, lapack_int kl,
lapack_int ku, lapack_int nrhs, lapack_complex_float * ab, lapack_int
ldab, lapack_int * ipiv, lapack_complex_float * b, lapack_int ldb)
LAPACKE_cgbsv_work— the same list ascgbsvwith zero extra arguments. Definition at line 36 of filelapacke_cgbsv_work.c.
lapack_int LAPACKE_cgbsv_work (int matrix_layout, lapack_int n, lapack_int
kl, lapack_int ku, lapack_int nrhs, lapack_complex_float * ab,
lapack_int ldab, lapack_int * ipiv, lapack_complex_float * b, lapack_int
ldb)
and that's where this chunk wraps — the c* banded girlies are keeping the party going and honestly? the *work twins are giving "same but with extra scratch space" and we love the consistency 💖
LAPACKE_cgbsvx
lapack_int LAPACKE_cgbsvx (int matrix_layout, char fact, char trans,
lapack_int n, lapack_int kl, lapack_int ku, lapack_int nrhs,
lapack_complex_float * ab, lapack_int ldab, lapack_complex_float * afb,
lapack_int ldafb, lapack_int * ipiv, char * equed, float * r, float * c,
lapack_complex_float * b, lapack_int ldb, lapack_complex_float * x,
lapack_int ldx, float * rcond, float * ferr, float * berr, float *
rpivot)
okay so this is the big one — complex single precision, banded, and it gives you everything back: equed, r, c, rcond, ferr, berr, and even rpivot at the end. Definition at line 36 of lapacke_cgbsvx.c. 💅
LAPACKE_cgbsvx_work
lapack_int LAPACKE_cgbsvx_work (int matrix_layout, char fact, char trans,
lapack_int n, lapack_int kl, lapack_int ku, lapack_int nrhs,
lapack_complex_float * ab, lapack_int ldab, lapack_complex_float * afb,
lapack_int ldafb, lapack_int * ipiv, char * equed, float * r, float * c,
lapack_complex_float * b, lapack_int ldb, lapack_complex_float * x,
lapack_int ldx, float * rcond, float * ferr, float * berr,
lapack_complex_float * work, float * rwork)
same bestie, but now with work and rwork bolted on the end — that's the whole _work vibe right there. Definition at line 36 of lapacke_cgbsvx_work.c. ✨
LAPACKE_cgbsvxx
lapack_int LAPACKE_cgbsvxx (int matrix_layout, char fact, char trans,
lapack_int n, lapack_int kl, lapack_int ku, lapack_int nrhs,
lapack_complex_float * ab, lapack_int ldab, lapack_complex_float * afb,
lapack_int ldafb, lapack_int * ipiv, char * equed, float * r, float * c,
lapack_complex_float * b, lapack_int ldb, lapack_complex_float * x,
lapack_int ldx, float * rcond, float * rpvgrw, float * berr, lapack_int
n_err_bnds, float * err_bnds_norm, float * err_bnds_comp, lapack_int
nparams, float * params)
double-x, double trouble 😭 — n_err_bnds, err_bnds_norm, err_bnds_comp, nparams and params are all hanging out in the parameter list, and rpvgrw replaced the plain rpivot from before. Definition at line 36 of lapacke_cgbsvxx.c. 🔥
LAPACKE_cgbsvxx_work
lapack_int LAPACKE_cgbsvxx_work (int matrix_layout, char fact, char trans,
lapack_int n, lapack_int kl, lapack_int ku, lapack_int nrhs,
lapack_complex_float * ab, lapack_int ldab, lapack_complex_float * afb,
lapack_int ldafb, lapack_int * ipiv, char * equed, float * r, float * c,
lapack_complex_float * b, lapack_int ldb, lapack_complex_float * x,
lapack_int ldx, float * rcond, float * rpvgrw, float * berr, lapack_int
n_err_bnds, float * err_bnds_norm, float * err_bnds_comp, lapack_int
nparams, float * params, lapack_complex_float * work, float * rwork)
yep, the _work twin again, rocking work + rwork at the tail end. Definition at line 36 of lapacke_cgbsvxx_work.c. 🫶
LAPACKE_cgbtrf
lapack_int LAPACKE_cgbtrf (int matrix_layout, lapack_int m, lapack_int n,
lapack_int kl, lapack_int ku, lapack_complex_float * ab, lapack_int
ldab, lapack_int * ipiv)
short, sweet, and it's giving "the f is for factor" energy. Definition at line 36 of lapacke_cgbtrf.c. 🎀
LAPACKE_cgbtrf_work
lapack_int LAPACKE_cgbtrf_work (int matrix_layout, lapack_int m, lapack_int
n, lapack_int kl, lapack_int ku, lapack_complex_float * ab, lapack_int
ldab, lapack_int * ipiv)
literally the same list of args, no extra work param in sight — sometimes the _work version just matches its parent. Definition at line 36 of lapacke_cgbtrf_work.c. ⭐
LAPACKE_cgbtrs
lapack_int LAPACKE_cgbtrs (int matrix_layout, char trans, lapack_int n,
lapack_int kl, lapack_int ku, lapack_int nrhs, const
lapack_complex_float * ab, lapack_int ldab, const lapack_int * ipiv,
lapack_complex_float * b, lapack_int ldb)
not me noticing the const on ab and ipiv 🙈 — those babies are strictly read-only here. Definition at line 36 of lapacke_cgbtrs.c.
LAPACKE_cgbtrs_work
lapack_int LAPACKE_cgbtrs_work (int matrix_layout, char trans, lapack_int n,
lapack_int kl, lapack_int ku, lapack_int nrhs, const
lapack_complex_float * ab, lapack_int ldab, const lapack_int * ipiv,
lapack_complex_float * b, lapack_int ldb)
same consts, same args, zero extra params — the work version is keeping it lowkey identical. Definition at line 36 of lapacke_cgbtrs_work.c. 🌸
LAPACKE_cgebak
lapack_int LAPACKE_cgebak (int matrix_layout, char job, char side,
lapack_int n, lapack_int ilo, lapack_int ihi, const float * scale,
lapack_int m, lapack_complex_float * v, lapack_int ldv)
job, side, ilo, ihi, and a const float * scale — the whole back-transformation starter pack. Definition at line 36 of lapacke_cgebak.c. 🦋
LAPACKE_cgebak_work
lapack_int LAPACKE_cgebak_work (int matrix_layout, char job, char side,
lapack_int n, lapack_int ilo, lapack_int ihi, const float * scale,
lapack_int m, lapack_complex_float * v, lapack_int ldv)
identical signature, work-flavoured name, still holding that const float * scale respectfully. Definition at line 36 of lapacke_cgebak_work.c. 💜
LAPACKE_cgebal
lapack_int LAPACKE_cgebal (int matrix_layout, char job, lapack_int n,
lapack_complex_float * a, lapack_int lda, lapack_int * ilo, lapack_int *
ihi, float * scale)
ilo and ihi show up as pointers here, so the function's handing values back out to you 👑. Definition at line 36 of lapacke_cgebal.c.
LAPACKE_cgebal_work
lapack_int LAPACKE_cgebal_work (int matrix_layout, char job, lapack_int n,
lapack_complex_float * a, lapack_int lda, lapack_int * ilo, lapack_int *
ihi, float * scale)
same pointer-y ilo / ihi situation, same everything tbh. Definition at line 36 of lapacke_cgebal_work.c. ✨
LAPACKE_cgebrd
lapack_int LAPACKE_cgebrd (int matrix_layout, lapack_int m, lapack_int n,
lapack_complex_float * a, lapack_int lda, float * d, float * e,
lapack_complex_float * tauq, lapack_complex_float * taup)
real d and e, complex tauq and taup — it's giving mixed-vibes-on-purpose. Definition at line 36 of lapacke_cgebrd.c. 🌈
LAPACKE_cgebrd_work
lapack_int LAPACKE_cgebrd_work (int matrix_layout, lapack_int m, lapack_int
n, lapack_complex_float * a, lapack_int lda, float * d, float * e,
lapack_complex_float * tauq, lapack_complex_float * taup,
lapack_complex_float * work, lapack_int lwork)
classic _work behaviour: everything from cgebrd plus work and lwork at the end. Definition at line 36 of lapacke_cgebrd_work.c. 💖
LAPACKE_cgecon
lapack_int LAPACKE_cgecon (int matrix_layout, char norm, lapack_int n, const
lapack_complex_float * a, lapack_int lda, float anorm, float * rcond)
note the const on a and the plain float anorm getting passed in by value — rcond is the one coming back out. Definition at line 36 of lapacke_cgecon.c. 🎀
LAPACKE_cgecon_work
lapack_int LAPACKE_cgecon_work (int matrix_layout, char norm, lapack_int n,
const lapack_complex_float * a, lapack_int lda, float anorm, float *
rcond, lapack_complex_float * work, float * rwork)
now with work and rwork — complex work array plus a real one, because of course. Definition at line 36 of lapacke_cgecon_work.c. 🍓
LAPACKE_cgeequ
lapack_int LAPACKE_cgeequ (int matrix_layout, lapack_int m, lapack_int n,
const lapack_complex_float * a, lapack_int lda, float * r, float * c,
float * rowcnd, float * colcnd, float * amax)
r, c, rowcnd, colcnd, amax — five output-ish pointers and a const input, busy busy. Definition at line 36 of lapacke_cgeequ.c. 🧚
LAPACKE_cgeequ_work
lapack_int LAPACKE_cgeequ_work (int matrix_layout, lapack_int m, lapack_int
n, const lapack_complex_float * a, lapack_int lda, float * r, float * c,
float * rowcnd, float * colcnd, float * amax)
same five pointers, same const, still no extra work params — it said "I'm fine as I am" 💅. Definition at line 36 of lapacke_cgeequ_work.c.
LAPACKE_cgeequb
lapack_int LAPACKE_cgeequb (int matrix_layout, lapack_int m, lapack_int n,
const lapack_complex_float * a, lapack_int lda, float * r, float * c,
float * rowcnd, float * colcnd, float * amax)
the b on the end is doing a lot of heavy lifting in that name, but the parameter list is a full-on carbon copy of cgeequ. Definition at line 36 of lapacke_cgeequb.c. ⭐
LAPACKE_cgeequb_work
lapack_int LAPACKE_cgeequb_work (int matrix_layout, lapack_int m, lapack_int
n, const lapack_complex_float * a, lapack_int lda, float * r, float * c,
float * rowcnd, float * colcnd, float * amax)
and the _work version keeps the exact same lineup. consistent queen 👑. Definition at line 36 of lapacke_cgeequb_work.c.
LAPACKE_cgees
lapack_int LAPACKE_cgees (int matrix_layout, char jobvs, char sort,
LAPACK_C_SELECT1 select, lapack_int n, lapack_complex_float * a,
lapack_int lda, lapack_int * sdim, lapack_complex_float * w,
lapack_complex_float * vs, lapack_int ldvs)
okay the LAPACK_C_SELECT1 select parameter is kind of iconic ngl — a whole function-pointer type just vibing in the middle of the arg list. Definition at line 36 of lapacke_cgees.c. 🔥
LAPACKE_cgees_work
lapack_int LAPACKE_cgees_work (int matrix_layout, char jobvs, char sort,
LAPACK_C_SELECT1 select, lapack_int n, lapack_complex_float * a,
lapack_int lda, lapack_int * sdim, lapack_complex_float * w,
lapack_complex_float * vs, lapack_int ldvs, lapack_complex_float * work,
lapack_int lwork, float * rwork, lapack_logical * bwork)
same select, but now trailing work, lwork, rwork and a lapack_logical * bwork — the whole squad came along. Definition at line 36 of lapacke_cgees_work.c. 💀
LAPACKE_cgeesx
lapack_int LAPACKE_cgeesx (int matrix_layout, char jobvs, char sort,
LAPACK_C_SELECT1 select, char sense, lapack_int n, lapack_complex_float
* a, lapack_int lda, lapack_int * sdim, lapack_complex_float * w,
lapack_complex_float * vs, lapack_int ldvs, float * rconde, float *
rcondv)
the x version brought a sense char and two extra float pointers, rconde and rcondv. glow-up fr fr ✨ Definition at line 36 of lapacke_cgeesx.c.
LAPACKE_cgeesx_work
lapack_int LAPACKE_cgeesx_work (int matrix_layout, char jobvs, char sort,
LAPACK_C_SELECT1 select, char sense, lapack_int n, lapack_complex_float
* a, lapack_int lda, lapack_int * sdim, lapack_complex_float * w,
lapack_complex_float * vs, lapack_int ldvs, float * rconde, float *
rcondv, lapack_complex_float * work, lapack_int lwork, float * rwork,
lapack_logical * bwork)
everything from cgeesx plus the full work/lwork/rwork/bwork finale. Definition at line 36 of lapacke_cgeesx_work.c. 🫶
LAPACKE_cgeev
lapack_int LAPACKE_cgeev (int matrix_layout, char jobvl, char jobvr,
lapack_int n, lapack_complex_float * a, lapack_int lda,
lapack_complex_float * w, lapack_complex_float * vl, lapack_int ldvl,
lapack_complex_float * vr, lapack_int ldvr)
jobvl and jobvr are a matched set, and so are vl/ldvl and vr/ldvr — symmetry, we love to see it. Definition at line 36 of lapacke_cgeev.c. 🌸
LAPACKE_cgeev_work
lapack_int LAPACKE_cgeev_work (int matrix_layout, char jobvl, char jobvr,
lapack_int n, lapack_complex_float * a, lapack_int lda,
lapack_complex_float * w, lapack_complex_float * vl, lapack_int ldvl,
lapack_complex_float * vr, lapack_int ldvr, lapack_complex_float * work,
lapack_int lwork, float * rwork)
add work, lwork, rwork, stir gently. Definition at line 36 of lapacke_cgeev_work.c. 🎀
LAPACKE_cgeevx
lapack_int LAPACKE_cgeevx (int matrix_layout, char balanc, char jobvl, char
jobvr, char sense, lapack_int n, lapack_complex_float * a, lapack_int
lda, lapack_complex_float * w, lapack_complex_float * vl, lapack_int
ldvl, lapack_complex_float * vr, lapack_int ldvr, lapack_int * ilo,
lapack_int * ihi, float * scale, float * abnrm, float * rconde, float *
rcondv)
three leading chars (balanc, jobvl, jobvr), then sense, then a whole parade of pointer outputs: ilo, ihi, scale, abnrm, rconde, rcondv. main character energy 👑. Definition at line 36 of lapacke_cgeevx.c.
LAPACKE_cgeevx_work
lapack_int LAPACKE_cgeevx_work (int matrix_layout, char balanc, char jobvl,
char jobvr, char sense, lapack_int n, lapack_complex_float * a,
lapack_int lda, lapack_complex_float * w, lapack_complex_float * vl,
lapack_int ldvl, lapack_complex_float * vr, lapack_int ldvr, lapack_int
* ilo, lapack_int * ihi, float * scale, float * abnrm, float * rconde,
float * rcondv, lapack_complex_float * work, lapack_int lwork, float *
rwork)
same parade, plus work, lwork, rwork bringing up the rear. Definition at line 36 of lapacke_cgeevx_work.c. 🦋
LAPACKE_cgehrd
lapack_int LAPACKE_cgehrd (int matrix_layout, lapack_int n, lapack_int ilo,
lapack_int ihi, lapack_complex_float * a, lapack_int lda,
lapack_complex_float * tau)
no job char here, just straight into n, ilo, ihi, a, lda, tau. efficient. Definition at line 36 of lapacke_cgehrd.c. ⭐
LAPACKE_cgehrd_work
lapack_int LAPACKE_cgehrd_work (int matrix_layout, lapack_int n, lapack_int
ilo, lapack_int ihi, lapack_complex_float * a, lapack_int lda,
lapack_complex_float * tau, lapack_complex_float * work, lapack_int
lwork)
the _work one does add work and lwork though — no gatekeeping. Definition at line 36 of lapacke_cgehrd_work.c. 💜
LAPACKE_cgejsv
lapack_int LAPACKE_cgejsv (int matrix_layout, char joba, char jobu, char
jobv, char jobr, char jobt, char jobp, lapack_int m, lapack_int n,
lapack_complex_float * a, lapack_int lda, float * sva,
lapack_complex_float * u, lapack_int ldu, lapack_complex_float * v,
lapack_int ldv, float * stat, lapack_int * istat)
SIX consecutive job chars: joba, jobu, jobv, jobr, jobt, jobp. not me counting them twice 😭. plus stat and istat living together at the end, one real one integer. Definition at line 36 of lapacke_cgejsv.c. 🔥
LAPACKE_cgejsv_work
lapack_int LAPACKE_cgejsv_work (int matrix_layout, char joba, char jobu,
char jobv, char jobr, char jobt, char jobp, lapack_int m, lapack_int n,
lapack_complex_float * a, lapack_int lda, float * sva,
lapack_complex_float * u, lapack_int ldu, lapack_complex_float * v,
lapack_int ldv, lapack_complex_float * cwork, lapack_int lwork, float *
work, lapack_int lrwork, lapack_int * iwork)
all six jobs again, and then the workspace situation goes full maximalist: cwork, lwork, work, lrwork, iwork. it's giving prepared ✨. Definition at line 36 of lapacke_cgejsv_work.c.
LAPACKE_cgelq
lapack_int LAPACKE_cgelq (int matrix_layout, lapack_int m, lapack_int n,
lapack_complex_float * a, lapack_int lda, lapack_complex_float * t,
lapack_int tsize)
m, n, a, lda, t, tsize — six params, clean, minimal, ate 💅. Definition at line 36 of lapacke_cgelq.c.
LAPACKE_cgelq2
lapack_int LAPACKE_cgelq2 (int matrix_layout, lapack_int m, lapack_int n,
lapack_complex_float * a, lapack_int lda, lapack_complex_float * tau)
the 2 version swaps that t/tsize pair for a single tau pointer. small difference, big vibe shift. Definition at line 36 of lapacke_cgelq2.c. 🌈
🦋 LAPACKE_cgelq2_work
okay so this one's the _work twin — same crew of args, but you're handing it the scratch space yourself. a, lda, tau, and the work buffer, all up to you bestie 💅
lapack_int LAPACKE_cgelq2_work (int matrix_layout, lapack_int m, lapack_int
n, lapack_complex_float * a, lapack_int lda, lapack_complex_float * tau,
lapack_complex_float * work)
Definition at line 36 of file lapacke_cgelq2_work.c.
✨ LAPACKE_cgelq_work
t AND tsize AND lwork — she's high maintenance but she's iconic for it 🎀
lapack_int LAPACKE_cgelq_work (int matrix_layout, lapack_int m, lapack_int
n, lapack_complex_float * a, lapack_int lda, lapack_complex_float * t,
lapack_int tsize, lapack_complex_float * work, lapack_int lwork)
Definition at line 36 of file lapacke_cgelq_work.c.
🌸 LAPACKE_cgelqf
no work buffer, no lwork, no thoughts, just vibes and a/lda/tau 🫶
lapack_int LAPACKE_cgelqf (int matrix_layout, lapack_int m, lapack_int n,
lapack_complex_float * a, lapack_int lda, lapack_complex_float * tau)
Definition at line 36 of file lapacke_cgelqf.c.
💜 LAPACKE_cgelqf_work
same cgelqf energy but now you're bringing the work and the lwork like a responsible main character ⭐
lapack_int LAPACKE_cgelqf_work (int matrix_layout, lapack_int m, lapack_int
n, lapack_complex_float * a, lapack_int lda, lapack_complex_float * tau,
lapack_complex_float * work, lapack_int lwork)
Definition at line 36 of file lapacke_cgelqf_work.c.
🌈 LAPACKE_cgels
trans is here, nrhs is here, b and ldb are here — the whole squad fr fr 💖
lapack_int LAPACKE_cgels (int matrix_layout, char trans, lapack_int m,
lapack_int n, lapack_int nrhs, lapack_complex_float * a, lapack_int lda,
lapack_complex_float * b, lapack_int ldb)
Definition at line 36 of file lapacke_cgels.c.
🔥 LAPACKE_cgels_work
literally the same gang plus work and lwork tagging along at the end, no cap 😌
lapack_int LAPACKE_cgels_work (int matrix_layout, char trans, lapack_int m,
lapack_int n, lapack_int nrhs, lapack_complex_float * a, lapack_int lda,
lapack_complex_float * b, lapack_int ldb, lapack_complex_float * work,
lapack_int lwork)
Definition at line 36 of file lapacke_cgels_work.c.
🎀 LAPACKE_cgelsd
ooh she brought friends: s, rcond, and rank — a float and a lapack_int * walked in 💀
lapack_int LAPACKE_cgelsd (int matrix_layout, lapack_int m, lapack_int n,
lapack_int nrhs, lapack_complex_float * a, lapack_int lda,
lapack_complex_float * b, lapack_int ldb, float * s, float rcond,
lapack_int * rank)
Definition at line 36 of file lapacke_cgelsd.c.
🧚 LAPACKE_cgelsd_work
the way this signature just keeps GOING — work, lwork, rwork, iwork, she's collecting buffers like Pokémon 😭
lapack_int LAPACKE_cgelsd_work (int matrix_layout, lapack_int m, lapack_int
n, lapack_int nrhs, lapack_complex_float * a, lapack_int lda,
lapack_complex_float * b, lapack_int ldb, float * s, float rcond,
lapack_int * rank, lapack_complex_float * work, lapack_int lwork, float
* rwork, lapack_int * iwork)
Definition at line 36 of file lapacke_cgelsd_work.c.
🍓 LAPACKE_cgelss
double-s at the end, double the slay — s, rcond, rank, periodt ✨
lapack_int LAPACKE_cgelss (int matrix_layout, lapack_int m, lapack_int n,
lapack_int nrhs, lapack_complex_float * a, lapack_int lda,
lapack_complex_float * b, lapack_int ldb, float * s, float rcond,
lapack_int * rank)
Definition at line 36 of file lapacke_cgelss.c.
💅 LAPACKE_cgelss_work
cgelss but with the work/lwork/rwork trio added, and honestly? obsessed 🫶
lapack_int LAPACKE_cgelss_work (int matrix_layout, lapack_int m, lapack_int
n, lapack_int nrhs, lapack_complex_float * a, lapack_int lda,
lapack_complex_float * b, lapack_int ldb, float * s, float rcond,
lapack_int * rank, lapack_complex_float * work, lapack_int lwork, float
* rwork)
Definition at line 36 of file lapacke_cgelss_work.c.
🌟 LAPACKE_cgelsy
the y stands for "yes bestie" and also there's jpvt now — a lapack_int *, very demure 👑
lapack_int LAPACKE_cgelsy (int matrix_layout, lapack_int m, lapack_int n,
lapack_int nrhs, lapack_complex_float * a, lapack_int lda,
lapack_complex_float * b, lapack_int ldb, lapack_int * jpvt, float
rcond, lapack_int * rank)
Definition at line 36 of file lapacke_cgelsy.c.
💫 LAPACKE_cgelsy_work
jpvt stays, work, lwork, rwork join — it's giving full house 🎰
lapack_int LAPACKE_cgelsy_work (int matrix_layout, lapack_int m, lapack_int
n, lapack_int nrhs, lapack_complex_float * a, lapack_int lda,
lapack_complex_float * b, lapack_int ldb, lapack_int * jpvt, float
rcond, lapack_int * rank, lapack_complex_float * work, lapack_int lwork,
float * rwork)
Definition at line 36 of file lapacke_cgelsy_work.c.
🦋 LAPACKE_cgemlq
side + trans + everything const that can be const — she's respectful of your data, we love a considerate queen 💖
lapack_int LAPACKE_cgemlq (int matrix_layout, char side, char trans,
lapack_int m, lapack_int n, lapack_int k, const lapack_complex_float *
a, lapack_int lda, const lapack_complex_float * t, lapack_int tsize,
lapack_complex_float * c, lapack_int ldc)
Definition at line 36 of file lapacke_cgemlq.c.
⭐ LAPACKE_cgemlq_work
same deal but work and lwork show up at the end like "sorry I'm late" 🙈
lapack_int LAPACKE_cgemlq_work (int matrix_layout, char side, char trans,
lapack_int m, lapack_int n, lapack_int k, const lapack_complex_float *
a, lapack_int lda, const lapack_complex_float * t, lapack_int tsize,
lapack_complex_float * c, lapack_int ldc, lapack_complex_float * work,
lapack_int lwork)
Definition at line 36 of file lapacke_cgemlq_work.c.
🌸 LAPACKE_cgemqr
cgemlq's sister, same arg list, different letters in the name — iykyk 💅
lapack_int LAPACKE_cgemqr (int matrix_layout, char side, char trans,
lapack_int m, lapack_int n, lapack_int k, const lapack_complex_float *
a, lapack_int lda, const lapack_complex_float * t, lapack_int tsize,
lapack_complex_float * c, lapack_int ldc)
Definition at line 36 of file lapacke_cgemqr.c.
🎀 LAPACKE_cgemqr_work
and here's her _work version with the work/lwork add-on, slaying as usual ✨
lapack_int LAPACKE_cgemqr_work (int matrix_layout, char side, char trans,
lapack_int m, lapack_int n, lapack_int k, const lapack_complex_float *
a, lapack_int lda, const lapack_complex_float * t, lapack_int tsize,
lapack_complex_float * c, lapack_int ldc, lapack_complex_float * work,
lapack_int lwork)
Definition at line 36 of file lapacke_cgemqr_work.c.
🔥 LAPACKE_cgemqrt
the T version has BOTH nb and ldt — she said "I'm not doing this without my blocksize" 😤
lapack_int LAPACKE_cgemqrt (int matrix_layout, char side, char trans,
lapack_int m, lapack_int n, lapack_int k, lapack_int nb, const
lapack_complex_float * v, lapack_int ldv, const lapack_complex_float *
t, lapack_int ldt, lapack_complex_float * c, lapack_int ldc)
Definition at line 36 of file lapacke_cgemqrt.c.
💜 LAPACKE_cgemqrt_work
same as cgemqrt but with a work pointer tacked on, as is tradition 🫶
lapack_int LAPACKE_cgemqrt_work (int matrix_layout, char side, char trans,
lapack_int m, lapack_int n, lapack_int k, lapack_int nb, const
lapack_complex_float * v, lapack_int ldv, const lapack_complex_float *
t, lapack_int ldt, lapack_complex_float * c, lapack_int ldc,
lapack_complex_float * work)
Definition at line 36 of file lapacke_cgemqrt_work.c.
🌈 LAPACKE_cgeqlf
back to the simple life: a, lda, tau, and nothing else bothering us 💖
lapack_int LAPACKE_cgeqlf (int matrix_layout, lapack_int m, lapack_int n,
lapack_complex_float * a, lapack_int lda, lapack_complex_float * tau)
Definition at line 36 of file lapacke_cgeqlf.c.
🧚 LAPACKE_cgeqlf_work
cgeqlf but she brought a work buffer and a lwork to match — prepared icon 👑
lapack_int LAPACKE_cgeqlf_work (int matrix_layout, lapack_int m, lapack_int
n, lapack_complex_float * a, lapack_int lda, lapack_complex_float * tau,
lapack_complex_float * work, lapack_int lwork)
Definition at line 36 of file lapacke_cgeqlf_work.c.
🍓 LAPACKE_cgeqp3
jpvt is a lapack_int * so yes, she's going to be writing into it — not me being dramatic, it's just literally not const 😭
lapack_int LAPACKE_cgeqp3 (int matrix_layout, lapack_int m, lapack_int n,
lapack_complex_float * a, lapack_int lda, lapack_int * jpvt,
lapack_complex_float * tau)
Definition at line 36 of file lapacke_cgeqp3.c.
💅 LAPACKE_cgeqp3_work
now with work, lwork, and a float * rwork guest appearance, absolutely ate 💀
lapack_int LAPACKE_cgeqp3_work (int matrix_layout, lapack_int m, lapack_int
n, lapack_complex_float * a, lapack_int lda, lapack_int * jpvt,
lapack_complex_float * tau, lapack_complex_float * work, lapack_int
lwork, float * rwork)
Definition at line 36 of file lapacke_cgeqp3_work.c.
🌟 LAPACKE_cgeqpf
p3 but pf — different last letters, same jpvt-carrying energy 🎀
lapack_int LAPACKE_cgeqpf (int matrix_layout, lapack_int m, lapack_int n,
lapack_complex_float * a, lapack_int lda, lapack_int * jpvt,
lapack_complex_float * tau)
Definition at line 36 of file lapacke_cgeqpf.c.
🦋 LAPACKE_cgeqpf_work
note the rwork here with NO lwork — she keeps it short and slightly mysterious 🕵️♀️
lapack_int LAPACKE_cgeqpf_work (int matrix_layout, lapack_int m, lapack_int
n, lapack_complex_float * a, lapack_int lda, lapack_int * jpvt,
lapack_complex_float * tau, lapack_complex_float * work, float * rwork)
Definition at line 36 of file lapacke_cgeqpf_work.c.
⭐ LAPACKE_cgeqr
t + tsize, no work in sight, living that minimalist lifestyle ✨
lapack_int LAPACKE_cgeqr (int matrix_layout, lapack_int m, lapack_int n,
lapack_complex_float * a, lapack_int lda, lapack_complex_float * t,
lapack_int tsize)
Definition at line 36 of file lapacke_cgeqr.c.
💜 LAPACKE_cgeqr2
the tiny one. a, lda, tau, done. short king energy 👑 (affectionate)
lapack_int LAPACKE_cgeqr2 (int matrix_layout, lapack_int m, lapack_int n,
lapack_complex_float * a, lapack_int lda, lapack_complex_float * tau)
Definition at line 36 of file lapacke_cgeqr2.c.
🌈 LAPACKE_cgeqr2_work
cgeqr2 with a work pointer added, because even the tiny ones need scratch space sometimes 🫶
lapack_int LAPACKE_cgeqr2_work (int matrix_layout, lapack_int m, lapack_int
n, lapack_complex_float * a, lapack_int lda, lapack_complex_float * tau,
lapack_complex_float * work)
Definition at line 36 of file lapacke_cgeqr2_work.c.
🔥 LAPACKE_cgeqr_work
t, tsize, work, lwork — she's fully packed for the trip, no cap 🎒
lapack_int LAPACKE_cgeqr_work (int matrix_layout, lapack_int m, lapack_int
n, lapack_complex_float * a, lapack_int lda, lapack_complex_float * t,
lapack_int tsize, lapack_complex_float * work, lapack_int lwork)
Definition at line 36 of file lapacke_cgeqr_work.c.
🌸 LAPACKE_cgeqrf
THE classic. a, lda, tau. if you know you know 🤫
lapack_int LAPACKE_cgeqrf (int matrix_layout, lapack_int m, lapack_int n,
lapack_complex_float * a, lapack_int lda, lapack_complex_float * tau)
Definition at line 36 of file lapacke_cgeqrf.c.
🎀 LAPACKE_cgeqrf_work
same as cgeqrf with the work/lwork duo — a matching set, we stan a coordinated moment 💖
lapack_int LAPACKE_cgeqrf_work (int matrix_layout, lapack_int m, lapack_int
n, lapack_complex_float * a, lapack_int lda, lapack_complex_float * tau,
lapack_complex_float * work, lapack_int lwork)
Definition at line 36 of file lapacke_cgeqrf_work.c.
🧚 LAPACKE_cgeqrfp
the extra p and nothing else changed — subtle, chic, lowkey iconic 💅
lapack_int LAPACKE_cgeqrfp (int matrix_layout, lapack_int m, lapack_int n,
lapack_complex_float * a, lapack_int lda, lapack_complex_float * tau)
Definition at line 36 of file lapacke_cgeqrfp.c.
🍓 LAPACKE_cgeqrfp_work
and her _work twin, with work and lwork politely appended 🌟
lapack_int LAPACKE_cgeqrfp_work (int matrix_layout, lapack_int m, lapack_int
n, lapack_complex_float * a, lapack_int lda, lapack_complex_float * tau,
lapack_complex_float * work, lapack_int lwork)
Definition at line 36 of file lapacke_cgeqrfp_work.c.
💫 LAPACKE_cgeqrt
nb AND ldt in the same signature — she has OPINIONS about blocks and I respect it 😤
lapack_int LAPACKE_cgeqrt (int matrix_layout, lapack_int m, lapack_int n,
lapack_int nb, lapack_complex_float * a, lapack_int lda,
lapack_complex_float * t, lapack_int ldt)
Definition at line 36 of file lapacke_cgeqrt.c.
⭐ LAPACKE_cgeqrt2
no nb here, just m, n, a, lda, t, ldt — the block size said "not today" 🙈
lapack_int LAPACKE_cgeqrt2 (int matrix_layout, lapack_int m, lapack_int n,
lapack_complex_float * a, lapack_int lda, lapack_complex_float * t,
lapack_int ldt)
Definition at line 36 of file lapacke_cgeqrt2.c.
💜 LAPACKE_cgeqrt2_work
exciting plot twist: the _work here has the EXACT same arg list as the plain one. no extra buffer. a mystery, a moment 🫶
lapack_int LAPACKE_cgeqrt2_work (int matrix_layout, lapack_int m, lapack_int
n, lapack_complex_float * a, lapack_int lda, lapack_complex_float * t,
lapack_int ldt)
Definition at line 36 of file lapacke_cgeqrt2_work.c.
🌈 LAPACKE_cgeqrt3
three's the charm bestie, same arg roster, new number 🎀
lapack_int LAPACKE_cgeqrt3 (int matrix_layout, lapack_int m, lapack_int n,
lapack_complex_float * a, lapack_int lda, lapack_complex_float * t,
lapack_int ldt)
Definition at line 36 of file lapacke_cgeqrt3.c.
🔥 LAPACKE_cgeqrt3_work
and _work version of the 3, once again identical args — consistency queen 👑
lapack_int LAPACKE_cgeqrt3_work (int matrix_layout, lapack_int m, lapack_int
n, lapack_complex_float * a, lapack_int lda, lapack_complex_float * t,
lapack_int ldt)
Definition at line 36 of file lapacke_cgeqrt3_work.c.
🌸 LAPACKE_cgeqrt_work
okay back to the normal pattern — cgeqrt's args plus a work at the end, order restored ✨
lapack_int LAPACKE_cgeqrt_work (int matrix_layout, lapack_int m, lapack_int
n, lapack_int nb, lapack_complex_float * a, lapack_int lda,
lapack_complex_float * t, lapack_int ldt, lapack_complex_float * work)
Definition at line 36 of file lapacke_cgeqrt_work.c.
💅 LAPACKE_cgerfs
LOOK at all these consts — a, af, ipiv, b are all read-only and she's being SO respectful. x is not though. x is getting written to 😌
lapack_int LAPACKE_cgerfs (int matrix_layout, char trans, lapack_int n,
lapack_int nrhs, const lapack_complex_float * a, lapack_int lda, const
lapack_complex_float * af, lapack_int ldaf, const lapack_int * ipiv,
const lapack_complex_float * b, lapack_int ldb, lapack_complex_float *
x, lapack_int ldx, float * ferr, float * berr)
Definition at line 36 of file lapacke_cgerfs.c.
🦋 LAPACKE_cgerfs_work
the grand finale of this batch 💖 same lineup, ferr and berr still pointing at your floats, plus work and rwork right at the end like a lil bow on top 🎀
lapack_int LAPACKE_cgerfs_work (int matrix_layout, char trans, lapack_int n,
lapack_int nrhs, const lapack_complex_float * a, lapack_int lda, const
lapack_complex_float * af, lapack_int ldaf, const lapack_int * ipiv,
const lapack_complex_float * b, lapack_int ldb, lapack_complex_float *
x, lapack_int ldx, float * ferr, float * berr, lapack_complex_float *
work, float * rwork)
Definition at line 36 of file lapacke_cgerfs_work.c.
💅 LAPACKE_cgerfsx
the "hey bestie, how wrong is my answer actually" one 🫶 it refines a solution and hands you back error bounds like receipts.
lapack_int LAPACKE_cgerfsx (int matrix_layout, char trans, char equed,
lapack_int n, lapack_int nrhs, const lapack_complex_float * a,
lapack_int lda, const lapack_complex_float * af, lapack_int ldaf, const
lapack_int * ipiv, const float * r, const float * c, const
lapack_complex_float * b, lapack_int ldb, lapack_complex_float * x,
lapack_int ldx, float * rcond, float * berr, lapack_int n_err_bnds,
float * err_bnds_norm, float * err_bnds_comp, lapack_int nparams, float
* params)
Definition at line 36 of file lapacke_cgerfsx.c.
🧚 LAPACKE_cgerfsx_work
literally the same function but you're the one bringing the workspace — work and rwork are on you, no cap.
lapack_int LAPACKE_cgerfsx_work (int matrix_layout, char trans, char equed,
lapack_int n, lapack_int nrhs, const lapack_complex_float * a,
lapack_int lda, const lapack_complex_float * af, lapack_int ldaf, const
lapack_int * ipiv, const float * r, const float * c, const
lapack_complex_float * b, lapack_int ldb, lapack_complex_float * x,
lapack_int ldx, float * rcond, float * berr, lapack_int n_err_bnds,
float * err_bnds_norm, float * err_bnds_comp, lapack_int nparams, float
* params, lapack_complex_float * work, float * rwork)
Definition at line 36 of file lapacke_cgerfsx_work.c.
🎀 LAPACKE_cgerqf
RQ factorization moment ✨ you get the tau scalars back and everything.
lapack_int LAPACKE_cgerqf (int matrix_layout, lapack_int m, lapack_int n,
lapack_complex_float * a, lapack_int lda, lapack_complex_float * tau)
Definition at line 36 of file lapacke_cgerqf.c.
🌸 LAPACKE_cgerqf_work
same RQ glow-up, except you're supplying work + lwork yourself 💅
lapack_int LAPACKE_cgerqf_work (int matrix_layout, lapack_int m, lapack_int
n, lapack_complex_float * a, lapack_int lda, lapack_complex_float * tau,
lapack_complex_float * work, lapack_int lwork)
Definition at line 36 of file lapacke_cgerqf_work.c.
👑 LAPACKE_cgesdd
the SVD icon — divide-and-conquer energy, singular values in s, and it fills in u and vt for you. main character behavior fr.
lapack_int LAPACKE_cgesdd (int matrix_layout, char jobz, lapack_int m,
lapack_int n, lapack_complex_float * a, lapack_int lda, float * s,
lapack_complex_float * u, lapack_int ldu, lapack_complex_float * vt,
lapack_int ldvt)
Definition at line 36 of file lapacke_cgesdd.c.
🦋 LAPACKE_cgesdd_work
same SVD slay, but now work, lwork, rwork and iwork are all in your hands 🫶
lapack_int LAPACKE_cgesdd_work (int matrix_layout, char jobz, lapack_int m,
lapack_int n, lapack_complex_float * a, lapack_int lda, float * s,
lapack_complex_float * u, lapack_int ldu, lapack_complex_float * vt,
lapack_int ldvt, lapack_complex_float * work, lapack_int lwork, float *
rwork, lapack_int * iwork)
Definition at line 36 of file lapacke_cgesdd_work.c.
🔥 LAPACKE_cgesv
the classic: solve A * X = B. Pivot city, but make it fashion. ipiv comes back filled in.
lapack_int LAPACKE_cgesv (int matrix_layout, lapack_int n, lapack_int nrhs,
lapack_complex_float * a, lapack_int lda, lapack_int * ipiv,
lapack_complex_float * b, lapack_int ldb)
Definition at line 36 of file lapacke_cgesv.c.
⭐ LAPACKE_cgesv_work
identical parameter list, zero extra drama — just the workspace-flavored twin 💖
lapack_int LAPACKE_cgesv_work (int matrix_layout, lapack_int n, lapack_int
nrhs, lapack_complex_float * a, lapack_int lda, lapack_int * ipiv,
lapack_complex_float * b, lapack_int ldb)
Definition at line 36 of file lapacke_cgesv_work.c.
🌈 LAPACKE_cgesvd
the other SVD bestie — QR-iteration flavor. superb is where the superdiagonal leftovers go btw, don't forget it exists 😭
lapack_int LAPACKE_cgesvd (int matrix_layout, char jobu, char jobvt,
lapack_int m, lapack_int n, lapack_complex_float * a, lapack_int lda,
float * s, lapack_complex_float * u, lapack_int ldu,
lapack_complex_float * vt, lapack_int ldvt, float * superb)
Definition at line 36 of file lapacke_cgesvd.c.
🍓 LAPACKE_cgesvd_work
same superb situation, plus work, lwork and rwork — you're the workspace manager now ✨
lapack_int LAPACKE_cgesvd_work (int matrix_layout, char jobu, char jobvt,
lapack_int m, lapack_int n, lapack_complex_float * a, lapack_int lda,
float * s, lapack_complex_float * u, lapack_int ldu,
lapack_complex_float * vt, lapack_int ldvt, lapack_complex_float * work,
lapack_int lwork, float * rwork)
Definition at line 36 of file lapacke_cgesvd_work.c.
🧚♀️ LAPACKE_cgesvdx
the choose-your-own-singular-values one 🎯 range, vl, vu, il, iu — you literally get to pick which ones. ns tells you how many you actually got.
lapack_int LAPACKE_cgesvdx (int matrix_layout, char jobu, char jobvt, char
range, lapack_int m, lapack_int n, lapack_complex_float * a, lapack_int
lda, float vl, float vu, lapack_int il, lapack_int iu, lapack_int * ns,
float * s, lapack_complex_float * u, lapack_int ldu,
lapack_complex_float * vt, lapack_int ldvt, lapack_int * superb)
Definition at line 36 of file lapacke_cgesvdx.c.
💜 LAPACKE_cgesvdx_work
same picky-singular-values energy, now with work, lwork, rwork and iwork handed over 🫶
lapack_int LAPACKE_cgesvdx_work (int matrix_layout, char jobu, char jobvt,
char range, lapack_int m, lapack_int n, lapack_complex_float * a,
lapack_int lda, float vl, float vu, lapack_int il, lapack_int iu,
lapack_int * ns, float * s, lapack_complex_float * u, lapack_int ldu,
lapack_complex_float * vt, lapack_int ldvt, lapack_complex_float * work,
lapack_int lwork, float * rwork, lapack_int * iwork)
Definition at line 36 of file lapacke_cgesvdx_work.c.
🎀 LAPACKE_cgesvj
Jacobi SVD!! lowkey the underrated one 💅 joba, jobu, jobv control the whole vibe, sva holds the singular values, and stat reports back on convergence.
lapack_int LAPACKE_cgesvj (int matrix_layout, char joba, char jobu, char
jobv, lapack_int m, lapack_int n, lapack_complex_float * a, lapack_int
lda, float * sva, lapack_int mv, lapack_complex_float * v, lapack_int
ldv, float * stat)
Definition at line 36 of file lapacke_cgesvj.c.
🌸 LAPACKE_cgesvj_work
Jacobi but you're carrying cwork, lwork, rwork and lrwork — highkey a lot, but she's worth it ✨
lapack_int LAPACKE_cgesvj_work (int matrix_layout, char joba, char jobu,
char jobv, lapack_int m, lapack_int n, lapack_complex_float * a,
lapack_int lda, float * sva, lapack_int mv, lapack_complex_float * v,
lapack_int ldv, lapack_complex_float * cwork, lapack_int lwork, float *
rwork, lapack_int lrwork)
Definition at line 36 of file lapacke_cgesvj_work.c.
🔥 LAPACKE_cgesvx
the expert-mode solve 👑 factors, equilibrates, solves, and reports rcond, ferr, berr. equed says what scaling got applied, and rpivot is chillin' at the end.
lapack_int LAPACKE_cgesvx (int matrix_layout, char fact, char trans,
lapack_int n, lapack_int nrhs, lapack_complex_float * a, lapack_int lda,
lapack_complex_float * af, lapack_int ldaf, lapack_int * ipiv, char *
equed, float * r, float * c, lapack_complex_float * b, lapack_int ldb,
lapack_complex_float * x, lapack_int ldx, float * rcond, float * ferr,
float * berr, float * rpivot)
Definition at line 36 of file lapacke_cgesvx.c.
🦋 LAPACKE_cgesvx_work
same expert solve, except work and rwork are your responsibility, and notice there's no rpivot here 💅
lapack_int LAPACKE_cgesvx_work (int matrix_layout, char fact, char trans,
lapack_int n, lapack_int nrhs, lapack_complex_float * a, lapack_int lda,
lapack_complex_float * af, lapack_int ldaf, lapack_int * ipiv, char *
equed, float * r, float * c, lapack_complex_float * b, lapack_int ldb,
lapack_complex_float * x, lapack_int ldx, float * rcond, float * ferr,
float * berr, lapack_complex_float * work, float * rwork)
Definition at line 36 of file lapacke_cgesvx_work.c.
🫶 LAPACKE_cgesvxx
the extra-extra expert solve — now with rpvgrw, plus the whole n_err_bnds / err_bnds_norm / err_bnds_comp / nparams / params error-bound situation. it's giving thorough 💖
lapack_int LAPACKE_cgesvxx (int matrix_layout, char fact, char trans,
lapack_int n, lapack_int nrhs, lapack_complex_float * a, lapack_int lda,
lapack_complex_float * af, lapack_int ldaf, lapack_int * ipiv, char *
equed, float * r, float * c, lapack_complex_float * b, lapack_int ldb,
lapack_complex_float * x, lapack_int ldx, float * rcond, float * rpvgrw,
float * berr, lapack_int n_err_bnds, float * err_bnds_norm, float *
err_bnds_comp, lapack_int nparams, float * params)
Definition at line 36 of file lapacke_cgesvxx.c.
🌈 LAPACKE_cgesvxx_work
everything from cgesvxx but now with work + rwork bolted on the end, because of course 🎀
lapack_int LAPACKE_cgesvxx_work (int matrix_layout, char fact, char trans,
lapack_int n, lapack_int nrhs, lapack_complex_float * a, lapack_int lda,
lapack_complex_float * af, lapack_int ldaf, lapack_int * ipiv, char *
equed, float * r, float * c, lapack_complex_float * b, lapack_int ldb,
lapack_complex_float * x, lapack_int ldx, float * rcond, float * rpvgrw,
float * berr, lapack_int n_err_bnds, float * err_bnds_norm, float *
err_bnds_comp, lapack_int nparams, float * params, lapack_complex_float
* work, float * rwork)
Definition at line 36 of file lapacke_cgesvxx_work.c.
🍓 LAPACKE_cgetf2
the unblocked baby LU 💅 small matrices only, but she's the blueprint for everything else. ipiv comes back, obviously.
lapack_int LAPACKE_cgetf2 (int matrix_layout, lapack_int m, lapack_int n,
lapack_complex_float * a, lapack_int lda, lapack_int * ipiv)
Definition at line 36 of file lapacke_cgetf2.c.
🧚 LAPACKE_cgetf2_work
literally the same parameter list as its sibling — unblocked LU, no extras, no notes 🫶
lapack_int LAPACKE_cgetf2_work (int matrix_layout, lapack_int m, lapack_int
n, lapack_complex_float * a, lapack_int lda, lapack_int * ipiv)
Definition at line 36 of file lapacke_cgetf2_work.c.
👑 LAPACKE_cgetrf
the LU factorization main event 🔥 blocked, iconic, ipiv filled in, exactly what you want before calling LAPACKE_cgetrs or LAPACKE_cgetri.
lapack_int LAPACKE_cgetrf (int matrix_layout, lapack_int m, lapack_int n,
lapack_complex_float * a, lapack_int lda, lapack_int * ipiv)
Definition at line 36 of file lapacke_cgetrf.c.
🌸 LAPACKE_cgetrf2
the recursive-flavored LU twin 🌱 same signature vibe, different sauce underneath.
lapack_int LAPACKE_cgetrf2 (int matrix_layout, lapack_int m, lapack_int n,
lapack_complex_float * a, lapack_int lda, lapack_int * ipiv)
Definition at line 36 of file lapacke_cgetrf2.c.
🦋 LAPACKE_cgetrf2_work
recursive LU again, same params, no extra workspace handed over 😌
lapack_int LAPACKE_cgetrf2_work (int matrix_layout, lapack_int m, lapack_int
n, lapack_complex_float * a, lapack_int lda, lapack_int * ipiv)
Definition at line 36 of file lapacke_cgetrf2_work.c.
⭐ LAPACKE_cgetrf_work
the _work edition of the classic LU — identical parameter list, she just lives in a different file 💖
lapack_int LAPACKE_cgetrf_work (int matrix_layout, lapack_int m, lapack_int
n, lapack_complex_float * a, lapack_int lda, lapack_int * ipiv)
Definition at line 36 of file lapacke_cgetrf_work.c.
🎀 LAPACKE_cgetri
inverse time!! 💅 needs the ipiv from a prior LAPACKE_cgetrf, so don't skip steps bestie.
lapack_int LAPACKE_cgetri (int matrix_layout, lapack_int n,
lapack_complex_float * a, lapack_int lda, const lapack_int * ipiv)
Definition at line 36 of file lapacke_cgetri.c.
🎯 LAPACKE_cgetri_work
same inverse, plus work and lwork because you're doing the workspace math now 🫶
lapack_int LAPACKE_cgetri_work (int matrix_layout, lapack_int n,
lapack_complex_float * a, lapack_int lda, const lapack_int * ipiv,
lapack_complex_float * work, lapack_int lwork)
Definition at line 36 of file lapacke_cgetri_work.c.
🔥 LAPACKE_cgetrs
solve using the LU you already factored ✨ trans says whether you want A, A^T or A^H, and a + ipiv must be from LAPACKE_cgetrf. no shortcuts 🫶
lapack_int LAPACKE_cgetrs (int matrix_layout, char trans, lapack_int n,
lapack_int nrhs, const lapack_complex_float * a, lapack_int lda, const
lapack_int * ipiv, lapack_complex_float * b, lapack_int ldb)
Definition at line 36 of file lapacke_cgetrs.c.
🧚♀️ LAPACKE_cgetrs_work
same solve, same params, _work energy 💅
lapack_int LAPACKE_cgetrs_work (int matrix_layout, char trans, lapack_int n,
lapack_int nrhs, const lapack_complex_float * a, lapack_int lda, const
lapack_int * ipiv, lapack_complex_float * b, lapack_int ldb)
Definition at line 36 of file lapacke_cgetrs_work.c.
🌈 LAPACKE_cgetsls
least-squares via SVD vibes 🎀 gets you the minimum-norm solution when the system is being extra. trans again decides which flavor you're solving.
lapack_int LAPACKE_cgetsls (int matrix_layout, char trans, lapack_int m,
lapack_int n, lapack_int nrhs, lapack_complex_float * a, lapack_int lda,
lapack_complex_float * b, lapack_int ldb)
Definition at line 36 of file lapacke_cgetsls.c.
🍓 LAPACKE_cgetsls_work
least-squares but with work + lwork in the mix 🫶
lapack_int LAPACKE_cgetsls_work (int matrix_layout, char trans, lapack_int
m, lapack_int n, lapack_int nrhs, lapack_complex_float * a, lapack_int
lda, lapack_complex_float * b, lapack_int ldb, lapack_complex_float *
work, lapack_int lwork)
Definition at line 36 of file lapacke_cgetsls_work.c.
💜 LAPACKE_cggbak
the "put my eigenvectors back how they were" function bestie 😭 it undoes the balancing from LAPACKE_cggbal using lscale and rscale. job and side decide the scope.
lapack_int LAPACKE_cggbak (int matrix_layout, char job, char side,
lapack_int n, lapack_int ilo, lapack_int ihi, const float * lscale,
const float * rscale, lapack_int m, lapack_complex_float * v, lapack_int
ldv)
Definition at line 36 of file lapacke_cggbak.c.
🌸 LAPACKE_cggbak_work
identical signature to cggbak, just chilling in the _work file 🎀
lapack_int LAPACKE_cggbak_work (int matrix_layout, char job, char side,
lapack_int n, lapack_int ilo, lapack_int ihi, const float * lscale,
const float * rscale, lapack_int m, lapack_complex_float * v, lapack_int
ldv)
Definition at line 36 of file lapacke_cggbak_work.c.
🧚 LAPACKE_cggbal
the balancing act 💅 permutes and scales your pencil (a, b) so the eigenvalues behave, then hands you back ilo, ihi, lscale and rscale.
lapack_int LAPACKE_cggbal (int matrix_layout, char job, lapack_int n,
lapack_complex_float * a, lapack_int lda, lapack_complex_float * b,
lapack_int ldb, lapack_int * ilo, lapack_int * ihi, float * lscale,
float * rscale)
Definition at line 36 of file lapacke_cggbal.c.
🦋 LAPACKE_cggbal_work
same balancing slay, with one bonus work array tacked on at the end ✨
lapack_int LAPACKE_cggbal_work (int matrix_layout, char job, lapack_int n,
lapack_complex_float * a, lapack_int lda, lapack_complex_float * b,
lapack_int ldb, lapack_int * ilo, lapack_int * ihi, float * lscale,
float * rscale, float * work)
Definition at line 36 of file lapacke_cggbal_work.c.
💜 LAPACKE_cgges
lapack_int LAPACKE_cgges (int matrix_layout, char jobvsl, char jobvsr, char
sort, LAPACK_C_SELECT2 selctg, lapack_int n, lapack_complex_float * a,
lapack_int lda, lapack_complex_float * b, lapack_int ldb, lapack_int *
sdim, lapack_complex_float * alpha, lapack_complex_float * beta,
lapack_complex_float * vsl, lapack_int ldvsl, lapack_complex_float *
vsr, lapack_int ldvsr)
Definition at line 36 of file lapacke_cgges.c.
okay so this one is the full-glam version — you get the sort char and a selctg selector up in there, plus both vsl/vsr slots with their own ldvsl/ldvsr leading dims. It returns a lapack_int, like basically every single one of these, and it lives at line 36. 💅
🦋 LAPACKE_cgges3
lapack_int LAPACKE_cgges3 (int matrix_layout, char jobvsl, char jobvsr, char
sort, LAPACK_C_SELECT2 selctg, lapack_int n, lapack_complex_float * a,
lapack_int lda, lapack_complex_float * b, lapack_int ldb, lapack_int *
sdim, lapack_complex_float * alpha, lapack_complex_float * beta,
lapack_complex_float * vsl, lapack_int ldvsl, lapack_complex_float *
vsr, lapack_int ldvsr)
Definition at line 36 of file lapacke_cgges3.c.
the way that this signature is identical to LAPACKE_cgges — same args, same order, same everything — but it's the 3 situation and it points at a whole different file. Yes bestie, they're twins. No, you may not merge them. 😭
✨ LAPACKE_cgges3_work
lapack_int LAPACKE_cgges3_work (int matrix_layout, char jobvsl, char jobvsr,
char sort, LAPACK_C_SELECT2 selctg, lapack_int n, lapack_complex_float *
a, lapack_int lda, lapack_complex_float * b, lapack_int ldb, lapack_int
* sdim, lapack_complex_float * alpha, lapack_complex_float * beta,
lapack_complex_float * vsl, lapack_int ldvsl, lapack_complex_float *
vsr, lapack_int ldvsr, lapack_complex_float * work, lapack_int lwork,
float * rwork, lapack_logical * bwork)
Definition at line 36 of file lapacke_cgges3_work.c.
the _work variant!! 🫶 Same crew as above, but now you're hand-delivering the scratch space: work + lwork, rwork, and bwork (that one's lapack_logical *, don't @ me). If you like controlling your own buffers, this is your main character era.
🎀 LAPACKE_cgges_work
lapack_int LAPACKE_cgges_work (int matrix_layout, char jobvsl, char jobvsr,
char sort, LAPACK_C_SELECT2 selctg, lapack_int n, lapack_complex_float *
a, lapack_int lda, lapack_complex_float * b, lapack_int ldb, lapack_int
* sdim, lapack_complex_float * alpha, lapack_complex_float * beta,
lapack_complex_float * vsl, lapack_int ldvsl, lapack_complex_float *
vsr, lapack_int ldvsr, lapack_complex_float * work, lapack_int lwork,
float * rwork, lapack_logical * bwork)
Definition at line 36 of file lapacke_cgges_work.c.
fr fr the non-3 _work sibling — argument list is character-for-character the same shape as LAPACKE_cgges3_work, tail and all: work, lwork, rwork, bwork. Two files, one aesthetic. 💀
🌈 LAPACKE_cggesx
lapack_int LAPACKE_cggesx (int matrix_layout, char jobvsl, char jobvsr, char
sort, LAPACK_C_SELECT2 selctg, char sense, lapack_int n,
lapack_complex_float * a, lapack_int lda, lapack_complex_float * b,
lapack_int ldb, lapack_int * sdim, lapack_complex_float * alpha,
lapack_complex_float * beta, lapack_complex_float * vsl, lapack_int
ldvsl, lapack_complex_float * vsr, lapack_int ldvsr, float * rconde,
float * rcondv)
Definition at line 36 of file lapacke_cggesx.c.
Obsessed with the x — it brings a new bestie to the group chat: sense (a char, right after selctg), and it signs off with rconde and rcondv, both float *. Everything else is the familiar lineup. 👑
🔥 LAPACKE_cggesx_work
lapack_int LAPACKE_cggesx_work (int matrix_layout, char jobvsl, char jobvsr,
char sort, LAPACK_C_SELECT2 selctg, char sense, lapack_int n,
lapack_complex_float * a, lapack_int lda, lapack_complex_float * b,
lapack_int ldb, lapack_int * sdim, lapack_complex_float * alpha,
lapack_complex_float * beta, lapack_complex_float * vsl, lapack_int
ldvsl, lapack_complex_float * vsr, lapack_int ldvsr, float * rconde,
float * rcondv, lapack_complex_float * work, lapack_int lwork, float *
rwork, lapack_int * iwork, lapack_int liwork, lapack_logical * bwork)
Definition at line 36 of file lapacke_cggesx_work.c.
not me counting the trailing scratch args — work, lwork, rwork, then the integer duo iwork / liwork, then bwork. That's the longest tail in this little cluster and I respect the hustle. 🍓
💖 LAPACKE_cggev
lapack_int LAPACKE_cggev (int matrix_layout, char jobvl, char jobvr,
lapack_int n, lapack_complex_float * a, lapack_int lda,
lapack_complex_float * b, lapack_int ldb, lapack_complex_float * alpha,
lapack_complex_float * beta, lapack_complex_float * vl, lapack_int ldvl,
lapack_complex_float * vr, lapack_int ldvr)
Definition at line 36 of file lapacke_cggev.c.
New family, new vibe check ✨ — no sort, no selctg, no sdim. Just jobvl/jobvr, n, the a/lda + b/ldb pair, then alpha, beta, and the vl/ldvl + vr/ldvr duo. Clean, simple, iconic.
🧚 LAPACKE_cggev3
lapack_int LAPACKE_cggev3 (int matrix_layout, char jobvl, char jobvr,
lapack_int n, lapack_complex_float * a, lapack_int lda,
lapack_complex_float * b, lapack_int ldb, lapack_complex_float * alpha,
lapack_complex_float * beta, lapack_complex_float * vl, lapack_int ldvl,
lapack_complex_float * vr, lapack_int ldvr)
Definition at line 36 of file lapacke_cggev3.c.
Again with the matching signatures 😭 — LAPACKE_cggev3 mirrors LAPACKE_cggev exactly, but it's living its own life in lapacke_cggev3.c. Respect the separate file, she has her own identity.
🎀 LAPACKE_cggev3_work
lapack_int LAPACKE_cggev3_work (int matrix_layout, char jobvl, char jobvr,
lapack_int n, lapack_complex_float * a, lapack_int lda,
lapack_complex_float * b, lapack_int ldb, lapack_complex_float * alpha,
lapack_complex_float * beta, lapack_complex_float * vl, lapack_int ldvl,
lapack_complex_float * vr, lapack_int ldvr, lapack_complex_float * work,
lapack_int lwork, float * rwork)
Definition at line 36 of file lapacke_cggev3_work.c.
The _work glow-up 🌸: same thirteen args, then work, lwork, rwork tacked on the end. Note there's no bwork here — this family keeps the tail short and cute. 🦋
💅 LAPACKE_cggev_work
lapack_int LAPACKE_cggev_work (int matrix_layout, char jobvl, char jobvr,
lapack_int n, lapack_complex_float * a, lapack_int lda,
lapack_complex_float * b, lapack_int ldb, lapack_complex_float * alpha,
lapack_complex_float * beta, lapack_complex_float * vl, lapack_int ldvl,
lapack_complex_float * vr, lapack_int ldvr, lapack_complex_float * work,
lapack_int lwork, float * rwork)
Definition at line 36 of file lapacke_cggev_work.c.
Same shape as LAPACKE_cggev3_work, different file. iykyk — the pattern is the pattern and I'm at peace with it. 🫶
⭐ LAPACKE_cggevx
lapack_int LAPACKE_cggevx (int matrix_layout, char balanc, char jobvl, char
jobvr, char sense, lapack_int n, lapack_complex_float * a, lapack_int
lda, lapack_complex_float * b, lapack_int ldb, lapack_complex_float *
alpha, lapack_complex_float * beta, lapack_complex_float * vl,
lapack_int ldvl, lapack_complex_float * vr, lapack_int ldvr, lapack_int
* ilo, lapack_int * ihi, float * lscale, float * rscale, float * abnrm,
float * bbnrm, float * rconde, float * rcondv)
Definition at line 36 of file lapacke_cggevx.c.
the extended one ate 🌈 — leading chars balanc, jobvl, jobvr, sense, then n, then the matrix block, then a whole parade of outputs: ilo, ihi, lscale, rscale, abnrm, bbnrm, rconde, rcondv. That's a lot of pointers and every single one matters. 🔥
💀 LAPACKE_cggevx_work
lapack_int LAPACKE_cggevx_work (int matrix_layout, char balanc, char jobvl,
char jobvr, char sense, lapack_int n, lapack_complex_float * a,
lapack_int lda, lapack_complex_float * b, lapack_int ldb,
lapack_complex_float * alpha, lapack_complex_float * beta,
lapack_complex_float * vl, lapack_int ldvl, lapack_complex_float * vr,
lapack_int ldvr, lapack_int * ilo, lapack_int * ihi, float * lscale,
float * rscale, float * abnrm, float * bbnrm, float * rconde, float *
rcondv, lapack_complex_float * work, lapack_int lwork, float * rwork,
lapack_int * iwork, lapack_logical * bwork)
Definition at line 36 of file lapacke_cggevx_work.c.
Longest guest list in this batch, no cap 😭 — everything from LAPACKE_cggevx plus work, lwork, rwork, iwork, bwork. Do not lose track of which pointer is which, I'm begging. 🙈
🌸 LAPACKE_cggglm
lapack_int LAPACKE_cggglm (int matrix_layout, lapack_int n, lapack_int m,
lapack_int p, lapack_complex_float * a, lapack_int lda,
lapack_complex_float * b, lapack_int ldb, lapack_complex_float * d,
lapack_complex_float * x, lapack_complex_float * y)
Definition at line 36 of file lapacke_cggglm.c.
hi bestie — three plain integer dims up front (n, m, p), then a/lda, b/ldb, then the trio d, x, y. No char options at all, which honestly? Kind of refreshing. 🍓
🦋 LAPACKE_cggglm_work
lapack_int LAPACKE_cggglm_work (int matrix_layout, lapack_int n, lapack_int
m, lapack_int p, lapack_complex_float * a, lapack_int lda,
lapack_complex_float * b, lapack_int ldb, lapack_complex_float * d,
lapack_complex_float * x, lapack_complex_float * y, lapack_complex_float
* work, lapack_int lwork)
Definition at line 36 of file lapacke_cggglm_work.c.
Just bolts work and lwork onto the end and calls it a day. Minimalist queen. 💅
🧚 LAPACKE_cgghd3
lapack_int LAPACKE_cgghd3 (int matrix_layout, char compq, char compz,
lapack_int n, lapack_int ilo, lapack_int ihi, lapack_complex_float * a,
lapack_int lda, lapack_complex_float * b, lapack_int ldb,
lapack_complex_float * q, lapack_int ldq, lapack_complex_float * z,
lapack_int ldz)
Definition at line 36 of file lapacke_cgghd3.c.
Two char flags (compq, compz), three ints (n, ilo, ihi), then the matched pairs a/lda, b/ldb, q/ldq, z/ldz. Symmetry!! We love to see it. ✨
🎀 LAPACKE_cgghd3_work
lapack_int LAPACKE_cgghd3_work (int matrix_layout, char compq, char compz,
lapack_int n, lapack_int ilo, lapack_int ihi, lapack_complex_float * a,
lapack_int lda, lapack_complex_float * b, lapack_int ldb,
lapack_complex_float * q, lapack_int ldq, lapack_complex_float * z,
lapack_int ldz, lapack_complex_float * work, lapack_int lwork)
Definition at line 36 of file lapacke_cgghd3_work.c.
Same as LAPACKE_cgghd3 with work + lwork appended, and yes that's the entire diff. Slay. 🫶
🌈 LAPACKE_cgghrd
lapack_int LAPACKE_cgghrd (int matrix_layout, char compq, char compz,
lapack_int n, lapack_int ilo, lapack_int ihi, lapack_complex_float * a,
lapack_int lda, lapack_complex_float * b, lapack_int ldb,
lapack_complex_float * q, lapack_int ldq, lapack_complex_float * z,
lapack_int ldz)
Definition at line 36 of file lapacke_cgghrd.c.
Signature identical to LAPACKE_cgghd3 — compq, compz, n, ilo, ihi, then a/lda, b/ldb, q/ldq, z/ldz. Two routines, twin energy, separate files. 😭
⭐ LAPACKE_cgghrd_work
lapack_int LAPACKE_cgghrd_work (int matrix_layout, char compq, char compz,
lapack_int n, lapack_int ilo, lapack_int ihi, lapack_complex_float * a,
lapack_int lda, lapack_complex_float * b, lapack_int ldb,
lapack_complex_float * q, lapack_int ldq, lapack_complex_float * z,
lapack_int ldz)
Definition at line 36 of file lapacke_cgghrd_work.c.
Plot twist 🔥 — this _work version has no work/lwork args at all. The signature is exactly the same as the non-_work one. Don't ask me why, that's just what's written here. 💀
💖 LAPACKE_cgglse
lapack_int LAPACKE_cgglse (int matrix_layout, lapack_int m, lapack_int n,
lapack_int p, lapack_complex_float * a, lapack_int lda,
lapack_complex_float * b, lapack_int ldb, lapack_complex_float * c,
lapack_complex_float * d, lapack_complex_float * x)
Definition at line 36 of file lapacke_cgglse.c.
Note the order bestie: m, n, p — not n, m, p. read twice, code once 💅. Then a/lda, b/ldb, and the c, d, x trio.
🍓 LAPACKE_cgglse_work
lapack_int LAPACKE_cgglse_work (int matrix_layout, lapack_int m, lapack_int
n, lapack_int p, lapack_complex_float * a, lapack_int lda,
lapack_complex_float * b, lapack_int ldb, lapack_complex_float * c,
lapack_complex_float * d, lapack_complex_float * x, lapack_complex_float
* work, lapack_int lwork)
Definition at line 36 of file lapacke_cgglse_work.c.
m, n, p again — same order, she's consistent — plus work and lwork at the end. 🦋
🧚 LAPACKE_cggqrf
lapack_int LAPACKE_cggqrf (int matrix_layout, lapack_int n, lapack_int m,
lapack_int p, lapack_complex_float * a, lapack_int lda,
lapack_complex_float * taua, lapack_complex_float * b, lapack_int ldb,
lapack_complex_float * taub)
Definition at line 36 of file lapacke_cggqrf.c.
And here it's n, m, p — opposite order from the lse one, I know, I know 😭. Then a/lda with taua, and b/ldb with taub. Tau besties, we stan.
🎀 LAPACKE_cggqrf_work
lapack_int LAPACKE_cggqrf_work (int matrix_layout, lapack_int n, lapack_int
m, lapack_int p, lapack_complex_float * a, lapack_int lda,
lapack_complex_float * taua, lapack_complex_float * b, lapack_int ldb,
lapack_complex_float * taub, lapack_complex_float * work, lapack_int
lwork)
Definition at line 36 of file lapacke_cggqrf_work.c.
Adds work + lwork, keeps n, m, p and both taus intact. Nothing lost, nothing invented. 💜
🌸 LAPACKE_cggrqf
lapack_int LAPACKE_cggrqf (int matrix_layout, lapack_int m, lapack_int p,
lapack_int n, lapack_complex_float * a, lapack_int lda,
lapack_complex_float * taua, lapack_complex_float * b, lapack_int ldb,
lapack_complex_float * taub)
Definition at line 36 of file lapacke_cggrqf.c.
Careful now 👀 — this one's m, p, n. The rqf sibling flipped the trio again, so please don't muscle-memory your way through it. taua and taub are still right where you left them.
🦋 LAPACKE_cggrqf_work
lapack_int LAPACKE_cggrqf_work (int matrix_layout, lapack_int m, lapack_int
p, lapack_int n, lapack_complex_float * a, lapack_int lda,
lapack_complex_float * taua, lapack_complex_float * b, lapack_int ldb,
lapack_complex_float * taub, lapack_complex_float * work, lapack_int
lwork)
Definition at line 36 of file lapacke_cggrqf_work.c.
m, p, n preserved ✨ plus work/lwork. That's the whole story, and it's a good one.
👑 LAPACKE_cggsvd
lapack_int LAPACKE_cggsvd (int matrix_layout, char jobu, char jobv, char
jobq, lapack_int m, lapack_int n, lapack_int p, lapack_int * k,
lapack_int * l, lapack_complex_float * a, lapack_int lda,
lapack_complex_float * b, lapack_int ldb, float * alpha, float * beta,
lapack_complex_float * u, lapack_int ldu, lapack_complex_float * v,
lapack_int ldv, lapack_complex_float * q, lapack_int ldq, lapack_int *
iwork)
Definition at line 36 of file lapacke_cggsvd.c.
main character energy 🌈 — three job chars (jobu, jobv, jobq), the dims m, n, p, then pointers k and l (those are lapack_int *, watch out), then a/lda, b/ldb, alpha & beta as float *, then u/ldu, v/ldv, q/ldq, and finally iwork. A whole journey. 👑
💜 LAPACKE_cggsvd3
lapack_int LAPACKE_cggsvd3 (int matrix_layout, char jobu, char jobv, char
jobq, lapack_int m, lapack_int n, lapack_int p, lapack_int * k,
lapack_int * l, lapack_complex_float * a, lapack_int lda,
lapack_complex_float * b, lapack_int ldb, float * alpha, float * beta,
lapack_complex_float * u, lapack_int ldu, lapack_complex_float * v,
lapack_int ldv, lapack_complex_float * q, lapack_int ldq, lapack_int *
iwork)
Definition at line 36 of file lapacke_cggsvd3.c.
Last one in this batch and it's a full-on twin of LAPACKE_cggsvd 🫶 — same arguments, same iwork ending, same everything, just living in lapacke_cggsvd3.c. Periodt. More coming, don't go anywhere 💖
LAPACKE_cggsvd3_work
lapack_int LAPACKE_cggsvd3_work (int matrix_layout, char jobu, char jobv,
char jobq, lapack_int m, lapack_int n, lapack_int p, lapack_int * k,
lapack_int * l, lapack_complex_float * a, lapack_int lda,
lapack_complex_float * b, lapack_int ldb, float * alpha, float * beta,
lapack_complex_float * u, lapack_int ldu, lapack_complex_float * v,
lapack_int ldv, lapack_complex_float * q, lapack_int ldq,
lapack_complex_float * work, lapack_int lwork, float * rwork, lapack_int
* iwork)
Definition at line 36 of file lapacke_cggsvd3_work.c.
okay bestie, this one is the full-workspace era ✨ — the _work version of the generalized SVD, so yes, you bring your own work, your own lwork, your own rwork, and your own iwork. Not me counting the pointers 💀. There's the jobu/jobv/jobq trio making their little appearance, m, n, p doing the dimension thing, and k and l sitting there as lapack_int * outputs. All the arrays are lapack_complex_float, all the strides are named ld + the array letter (lda, ldb, ldu, ldv, ldq) — the naming convention is literally carrying the whole family on its back 🫶.
LAPACKE_cggsvd_work
lapack_int LAPACKE_cggsvd_work (int matrix_layout, char jobu, char jobv,
char jobq, lapack_int m, lapack_int n, lapack_int p, lapack_int * k,
lapack_int * l, lapack_complex_float * a, lapack_int lda,
lapack_complex_float * b, lapack_int ldb, float * alpha, float * beta,
lapack_complex_float * u, lapack_int ldu, lapack_complex_float * v,
lapack_int ldv, lapack_complex_float * q, lapack_int ldq,
lapack_complex_float * work, float * rwork, lapack_int * iwork)
Definition at line 36 of file lapacke_cggsvd_work.c.
And here's the older sibling 👑 — same squad of arguments as LAPACKE_cggsvd3_work right down the line, jobu, jobv, jobq, m, n, p, k, l, a/lda, b/ldb, alpha, beta, u/ldu, v/ldv, q/ldq, work, rwork, iwork — except there's no lwork in the signature here, bestie. It's giving "read the parameter list, it will tell you everything" 💅. Ngl the way these two are basically twins and the only way to tell them apart is the 3 is so iconic.
LAPACKE_cggsvp
lapack_int LAPACKE_cggsvp (int matrix_layout, char jobu, char jobv, char
jobq, lapack_int m, lapack_int p, lapack_int n, lapack_complex_float *
a, lapack_int lda, lapack_complex_float * b, lapack_int ldb, float tola,
float tolb, lapack_int * k, lapack_int * l, lapack_complex_float * u,
lapack_int ldu, lapack_complex_float * v, lapack_int ldv,
lapack_complex_float * q, lapack_int ldq)
Definition at line 36 of file lapacke_cggsvp.c.
🎀 careful, the parameter order shifted on you: after jobq it's m, p, n — not m, n, p. The audacity 😭. You get tola and tolb as plain float tolerances (two of them, a and b, matching the two matrices a and b), plus k and l as lapack_int * outputs, and the triple u, v, q with ldu, ldv, ldq doing the stride duty. No _work in the name, so this is the pretty one you call directly — she's lowkey self-sufficient 💖.
LAPACKE_cggsvp3
lapack_int LAPACKE_cggsvp3 (int matrix_layout, char jobu, char jobv, char
jobq, lapack_int m, lapack_int p, lapack_int n, lapack_complex_float *
a, lapack_int lda, lapack_complex_float * b, lapack_int ldb, float tola,
float tolb, lapack_int * k, lapack_int * l, lapack_complex_float * u,
lapack_int ldu, lapack_complex_float * v, lapack_int ldv,
lapack_complex_float * q, lapack_int ldq)
Definition at line 36 of file lapacke_cggsvp3.c.
The 3 girlie ✨ — and if you go line by line against LAPACKE_cggsvp, the signature is character-for-character the same catalogue of arguments: matrix_layout, jobu, jobv, jobq, m, p, n, a, lda, b, ldb, tola, tolb, k, l, u, ldu, v, ldv, q, ldq. The only thing that changed is the file and the name. Slay, honestly 🌸.
LAPACKE_cggsvp3_work
lapack_int LAPACKE_cggsvp3_work (int matrix_layout, char jobu, char jobv,
char jobq, lapack_int m, lapack_int p, lapack_int n,
lapack_complex_float * a, lapack_int lda, lapack_complex_float * b,
lapack_int ldb, float tola, float tolb, lapack_int * k, lapack_int * l,
lapack_complex_float * u, lapack_int ldu, lapack_complex_float * v,
lapack_int ldv, lapack_complex_float * q, lapack_int ldq, lapack_int *
iwork, float * rwork, lapack_complex_float * tau, lapack_complex_float *
work, lapack_int lwork)
Definition at line 36 of file lapacke_cggsvp3_work.c.
and now we're in workspace central 🫶 — this one adds iwork, rwork, tau (yes, a lapack_complex_float * tau, she's back), work, and lwork on the tail end. Everything before that is the same m, p, n order as its non-working cousin, tola/tolb, k, l, and the u/v/q trio with their ld besties. Note the parameter order of iwork, rwork, tau, work, lwork — don't shuffle them, the compiler will not be nice about it 💀.
LAPACKE_cggsvp_work
lapack_int LAPACKE_cggsvp_work (int matrix_layout, char jobu, char jobv,
char jobq, lapack_int m, lapack_int p, lapack_int n,
lapack_complex_float * a, lapack_int lda, lapack_complex_float * b,
lapack_int ldb, float tola, float tolb, lapack_int * k, lapack_int * l,
lapack_complex_float * u, lapack_int ldu, lapack_complex_float * v,
lapack_int ldv, lapack_complex_float * q, lapack_int ldq, lapack_int *
iwork, float * rwork, lapack_complex_float * tau, lapack_complex_float *
work)
Definition at line 36 of file lapacke_cggsvp_work.c.
Obsessed with the way this is the _work version WITHOUT lwork 👀 — read it, bestie, work is there at the end but lwork is not. So if you're pattern-matching from LAPACKE_cggsvp3_work, mind the difference fr fr. Same jobu/jobv/jobq head, same m, p, n, same tola/tolb, same k and l outputs, same u/ldu, v/ldv, q/ldq trio, then iwork, rwork, tau, work.
LAPACKE_cgtcon
lapack_int LAPACKE_cgtcon (char norm, lapack_int n, const
lapack_complex_float * dl, const lapack_complex_float * d, const
lapack_complex_float * du, const lapack_complex_float * du2, const
lapack_int * ipiv, float anorm, float * rcond)
Definition at line 36 of file lapacke_cgtcon.c.
🎀 no matrix_layout here, which honestly feels like a little plot twist — this one starts straight in with norm (a char) and n. The tridiagonal gang is all present: dl, d, du, and the second superdiagonal du2, all const lapack_complex_float * (const and proud 🫶), plus a const lapack_int * ipiv for the pivots. You hand over anorm as a float and get float * rcond back. She's a condensation queen, and the consts mean she's not touching your arrays 💅.
LAPACKE_cgtcon_work
lapack_int LAPACKE_cgtcon_work (char norm, lapack_int n, const
lapack_complex_float * dl, const lapack_complex_float * d, const
lapack_complex_float * du, const lapack_complex_float * du2, const
lapack_int * ipiv, float anorm, float * rcond, lapack_complex_float *
work)
Definition at line 36 of file lapacke_cgtcon_work.c.
Same exact ride as LAPACKE_cgtcon bestie, except there's a lapack_complex_float * work tacked on the very end so you can bring your own scratch space ✨. Still no matrix_layout, still norm, n, dl, d, du, du2, ipiv, anorm, rcond. And still consts everywhere so she can't mess with your inputs 😌.
LAPACKE_cgtrfs
lapack_int LAPACKE_cgtrfs (int matrix_layout, char trans, lapack_int n,
lapack_int nrhs, const lapack_complex_float * dl, const
lapack_complex_float * d, const lapack_complex_float * du, const
lapack_complex_float * dlf, const lapack_complex_float * df, const
lapack_complex_float * duf, const lapack_complex_float * du2, const
lapack_int * ipiv, const lapack_complex_float * b, lapack_int ldb,
lapack_complex_float * x, lapack_int ldx, float * ferr, float * berr)
Definition at line 36 of file lapacke_cgtrfs.c.
Refinement time 🌈 — matrix_layout is back, then trans and n, then nrhs, then the full tridiagonal cast: dl, d, du, AND the factored dlf, df, duf, du2 (note: four factored args, in that order, don't get cute), plus const lapack_int * ipiv. The const squad covers the whole factor set and the RHS b (ldb), while x (ldx) is your mutable answer slot and ferr/berr are float * outputs. Not me counting the consts, it's twelve of them 😭.
LAPACKE_cgtrfs_work
lapack_int LAPACKE_cgtrfs_work (int matrix_layout, char trans, lapack_int n,
lapack_int nrhs, const lapack_complex_float * dl, const
lapack_complex_float * d, const lapack_complex_float * du, const
lapack_complex_float * dlf, const lapack_complex_float * df, const
lapack_complex_float * duf, const lapack_complex_float * du2, const
lapack_int * ipiv, const lapack_complex_float * b, lapack_int ldb,
lapack_complex_float * x, lapack_int ldx, float * ferr, float * berr,
lapack_complex_float * work, float * rwork)
Definition at line 36 of file lapacke_cgtrfs_work.c.
Exactly the LAPACKE_cgtrfs lineup, then work and rwork get bolted on at the end 💖. Full order, because I love you: matrix_layout, trans, n, nrhs, dl, d, du, dlf, df, duf, du2, ipiv, b, ldb, x, ldx, ferr, berr, work, rwork. Note rwork is float * here even though everything tridiagonal is complex float — that's just how she rolls 🦋.
LAPACKE_cgtsv
lapack_int LAPACKE_cgtsv (int matrix_layout, lapack_int n, lapack_int nrhs,
lapack_complex_float * dl, lapack_complex_float * d,
lapack_complex_float * du, lapack_complex_float * b, lapack_int ldb)
Definition at line 36 of file lapacke_cgtsv.c.
Short and sweet, we love a minimal icon 💅 — matrix_layout, n, nrhs, then the tridiagonal trio dl, d, du and the right-hand side b with ldb. All plain lapack_complex_float *, no consts, no workspace, no outputs beyond whatever happens to those arrays. Nine arguments, in, out, done. Periodt.
LAPACKE_cgtsv_work
lapack_int LAPACKE_cgtsv_work (int matrix_layout, lapack_int n, lapack_int
nrhs, lapack_complex_float * dl, lapack_complex_float * d,
lapack_complex_float * du, lapack_complex_float * b, lapack_int ldb)
Definition at line 36 of file lapacke_cgtsv_work.c.
The way this signature is literally identical to LAPACKE_cgtsv — same matrix_layout, n, nrhs, dl, d, du, b, ldb, nothing added, nothing removed 😭. Bestie, if you're looking for an extra work pointer, it's not in the parameter list. Just read the file name and trust her ✨.
LAPACKE_cgtsvx
lapack_int LAPACKE_cgtsvx (int matrix_layout, char fact, char trans,
lapack_int n, lapack_int nrhs, const lapack_complex_float * dl, const
lapack_complex_float * d, const lapack_complex_float * du,
lapack_complex_float * dlf, lapack_complex_float * df,
lapack_complex_float * duf, lapack_complex_float * du2, lapack_int *
ipiv, const lapack_complex_float * b, lapack_int ldb,
lapack_complex_float * x, lapack_int ldx, float * rcond, float * ferr,
float * berr)
Definition at line 36 of file lapacke_cgtsvx.c.
The expert edition, and honestly she ate 🔥 — matrix_layout, fact and trans up front, n and nrhs, then the input trio dl, d, du as const, and the factored trio dlf, df, duf plus du2 as mutable, followed by ipiv (plain lapack_int * here, not const, I see you 👀). Then const b with ldb, the answer x with ldx, and three float * outputs: rcond, ferr, berr. Count those args, there's a lot of them 💀.
LAPACKE_cgtsvx_work
lapack_int LAPACKE_cgtsvx_work (int matrix_layout, char fact, char trans,
lapack_int n, lapack_int nrhs, const lapack_complex_float * dl, const
lapack_complex_float * d, const lapack_complex_float * du,
lapack_complex_float * dlf, lapack_complex_float * df,
lapack_complex_float * duf, lapack_complex_float * du2, lapack_int *
ipiv, const lapack_complex_float * b, lapack_int ldb,
lapack_complex_float * x, lapack_int ldx, float * rcond, float * ferr,
float * berr, lapack_complex_float * work, float * rwork)
Definition at line 36 of file lapacke_cgtsvx_work.c.
Everything from LAPACKE_cgtsvx in the exact same order, and then — drumroll 🥁 — work and rwork at the end. That's it, that's the diff. matrix_layout, fact, trans, n, nrhs, dl, d, du, dlf, df, duf, du2, ipiv, b, ldb, x, ldx, rcond, ferr, berr, work, rwork. No lwork to be found, don't come for me, I'm just reading the manpage 🫶.
LAPACKE_cgttrf
lapack_int LAPACKE_cgttrf (lapack_int n, lapack_complex_float * dl,
lapack_complex_float * d, lapack_complex_float * du,
lapack_complex_float * du2, lapack_int * ipiv)
Definition at line 36 of file lapacke_cgttrf.c.
Shortest one on the block and she's thriving 💖 — no matrix_layout, no lwork, nothing but n, dl, d, du, du2, ipiv. Six arguments. The f at the end of the name stands for factor and she is NOT doing extra credit. All complex float except n and ipiv. Clean, minimal, iconic 🌸.
LAPACKE_cgttrf_work
lapack_int LAPACKE_cgttrf_work (lapack_int n, lapack_complex_float * dl,
lapack_complex_float * d, lapack_complex_float * du,
lapack_complex_float * du2, lapack_int * ipiv)
Definition at line 36 of file lapacke_cgttrf_work.c.
And the _work version is an exact copy of that parameter list — n, dl, d, du, du2, ipiv — no extra workspace pointer in sight 🙈. Cute that she kept the whole thing so tidy. Different file, same six arguments, and that is the entire tea ☕.
LAPACKE_cgttrs
lapack_int LAPACKE_cgttrs (int matrix_layout, char trans, lapack_int n,
lapack_int nrhs, const lapack_complex_float * dl, const
lapack_complex_float * d, const lapack_complex_float * du, const
lapack_complex_float * du2, const lapack_int * ipiv,
lapack_complex_float * b, lapack_int ldb)
Definition at line 36 of file lapacke_cgttrs.c.
Solve o'clock 🕐 — matrix_layout, trans, n, nrhs, then the factored tridiagonal squad all wearing const like little crowns (dl, d, du, du2, and a const lapack_int * ipiv), and finally the mutable b with its ldb. Notice du2 is in there because you're feeding her already-factored goods, and b is NOT const because she's writing your answer into it 💅.
LAPACKE_cgttrs_work
lapack_int LAPACKE_cgttrs_work (int matrix_layout, char trans, lapack_int n,
lapack_int nrhs, const lapack_complex_float * dl, const
lapack_complex_float * d, const lapack_complex_float * du, const
lapack_complex_float * du2, const lapack_int * ipiv,
lapack_complex_float * b, lapack_int ldb)
Definition at line 36 of file lapacke_cgttrs_work.c.
Identical signature to LAPACKE_cgttrs, bestie — same matrix_layout, trans, n, nrhs, same four const complex arrays plus const ipiv, same b and ldb. No trailing work pointer, no lwork, nothing. The _work in the filename is doing all the heavy lifting here and honestly, respect 🫶.
LAPACKE_chbev
lapack_int LAPACKE_chbev (int matrix_layout, char jobz, char uplo,
lapack_int n, lapack_int kd, lapack_complex_float * ab, lapack_int ldab,
float * w, lapack_complex_float * z, lapack_int ldz)
Definition at line 36 of file lapacke_chbev.c.
Eigen time, and she's giving standard algorithm energy 👑 — matrix_layout, jobz, uplo, n, kd, then your band storage ab with ldab, the eigenvalue output w as float * (computed in float even though the matrix is complex, yes, look at it), the eigenvector output z with ldz. Ten arguments, no workspace, straight to business. The kd is your bandwidth babe, it's right there in the list 🦋.
LAPACKE_chbev_2stage
lapack_int LAPACKE_chbev_2stage (int matrix_layout, char jobz, char uplo,
lapack_int n, lapack_int kd, lapack_complex_float * ab, lapack_int ldab,
float * w, lapack_complex_float * z, lapack_int ldz)
Definition at line 36 of file lapacke_chbev_2stage.c.
Two-stage diva 🌟 — and check it, the signature is the exact same ten arguments as LAPACKE_chbev: matrix_layout, jobz, uplo, n, kd, ab, ldab, w, z, ldz. The _2stage is living entirely in the name and the file, not in the parameter list. Not me double-checking, I promise I did 😭.
LAPACKE_chbev_2stage_work
lapack_int LAPACKE_chbev_2stage_work (int matrix_layout, char jobz, char
uplo, lapack_int n, lapack_int kd, lapack_complex_float * ab, lapack_int
ldab, float * w, lapack_complex_float * z, lapack_int ldz,
lapack_complex_float * work, lapack_int lwork, float * rwork)
Definition at line 36 of file lapacke_chbev_2stage_work.c.
Now she brought her whole bag ✨ — the ten from before, plus work, lwork, and rwork at the end. So: matrix_layout, jobz, uplo, n, kd, ab, ldab, w, z, ldz, work, lwork, rwork. Thirteen arguments, and yes, lwork is finally here — the two-stage girlie needs her workspace budget 💅.
LAPACKE_chbev_work
lapack_int LAPACKE_chbev_work (int matrix_layout, char jobz, char uplo,
lapack_int n, lapack_int kd, lapack_complex_float * ab, lapack_int ldab,
float * w, lapack_complex_float * z, lapack_int ldz,
lapack_complex_float * work, float * rwork)
Definition at line 36 of file lapacke_chbev_work.c.
Careful bestie — compare this to LAPACKE_chbev_2stage_work and you'll spot it: this one has work and rwork but no lwork 👀. So the tail is ab, ldab, w, z, ldz, work, rwork. Same head as the main function: matrix_layout, jobz, uplo, n, kd. Don't assume the lwork is there just because it was there last time, fr fr, I'm looking out for you 🫶.
LAPACKE_chbevd
lapack_int LAPACKE_chbevd (int matrix_layout, char jobz, char uplo,
lapack_int n, lapack_int kd, lapack_complex_float * ab, lapack_int ldab,
float * w, lapack_complex_float * z, lapack_int ldz)
Definition at line 36 of file lapacke_chbevd.c.
The d at the end means divide-and-conquer and she's a whole different vibe from chbev 🌈 — but the signature? Literally identical ten arguments: matrix_layout, jobz, uplo, n, kd, ab, ldab, w, z, ldz. Same inputs, different algorithm under the hood, and the manpage just shows you the front door. Take the free win 💖.
LAPACKE_chbevd_2stage
lapack_int LAPACKE_chbevd_2stage (int matrix_layout, char jobz, char uplo,
lapack_int n, lapack_int kd, lapack_complex_float * ab, lapack_int ldab,
float * w, lapack_complex_float * z, lapack_int ldz)
Definition at line 36 of file lapacke_chbevd_2stage.c.
Divide-and-conquer plus two-stage, and she still kept the parameter list identical to LAPACKE_chbevd 🎀 — matrix_layout, jobz, uplo, n, kd, ab, ldab, w, z, ldz, ten for ten. The naming is doing some serious emotional labour in this family, and honestly it's working.
LAPACKE_chbevd_2stage_work
lapack_int LAPACKE_chbevd_2stage_work (int matrix_layout, char jobz, char
uplo, lapack_int n, lapack_int kd, lapack_complex_float * ab, lapack_int
ldab, float * w, lapack_complex_float * z, lapack_int ldz,
lapack_complex_float * work, lapack_int lwork, float * rwork, lapack_int
lrwork, lapack_int * iwork, lapack_int liwork)
Definition at line 36 of file lapacke_chbevd_2stage_work.c.
NOW we're talking workspace, she brought the entire entourage 😭💜 — after the usual matrix_layout, jobz, uplo, n, kd, ab, ldab, w, z, ldz, you get work, lwork, rwork, lrwork, iwork, liwork. That's three workspace buffers and three lengths, each length paired with its own buffer. Six extras. Don't mix up lrwork and liwork, bestie, they're a matching set and they will not forgive you 💀.
LAPACKE_chbevd_work
lapack_int LAPACKE_chbevd_work (int matrix_layout, char jobz, char uplo,
lapack_int n, lapack_int kd, lapack_complex_float * ab, lapack_int ldab,
float * w, lapack_complex_float * z, lapack_int ldz,
lapack_complex_float * work, lapack_int lwork, float * rwork, lapack_int
lrwork, lapack_int * iwork, lapack_int liwork)
Definition at line 36 of file lapacke_chbevd_work.c.
Same full-workspace line-up as LAPACKE_chbevd_2stage_work, no shortcuts 🫶 — matrix_layout, jobz, uplo, n, kd, ab, ldab, w, z, ldz, work, lwork, rwork, lrwork, iwork, liwork. Sixteen arguments and every single one is pulling its weight. This is the version where you, the caller, are fully in charge of all the scratch space 💅.
LAPACKE_chbevx
lapack_int LAPACKE_chbevx (int matrix_layout, char jobz, char range, char
uplo, lapack_int n, lapack_int kd, lapack_complex_float * ab, lapack_int
ldab, lapack_complex_float * q, lapack_int ldq, float vl, float vu,
lapack_int il, lapack_int iu, float abstol, lapack_int * m, float * w,
lapack_complex_float * z, lapack_int ldz, lapack_int * ifail)
Definition at line 36 of file lapacke_chbevx.c.
The expert one and she is THOROUGH 👑🔥 — matrix_layout, jobz, range, uplo, n, kd, ab, ldab, then a whole q/ldq pair, then vl, vu (your float value bounds), il, iu (your int index bounds), abstol, then outputs m (as lapack_int *, the count of found eigenvalues), w, z/ldz, and ifail as lapack_int *. Twenty arguments. Twenty. She's not minimal and she's not sorry 💖. Only one range char decides whether vl/vu or il/iu are the ones doing the work, and both sets are sitting right there in the signature.
LAPACKE_chbevx_2stage
lapack_int LAPACKE_chbevx_2stage (int matrix_layout, char jobz, char range,
char uplo, lapack_int n, lapack_int kd, lapack_complex_float * ab,
lapack_int ldab, lapack_complex_float * q, lapack_int ldq, float vl,
float vu, lapack_int il, lapack_int iu, float abstol, lapack_int * m,
float * w, lapack_complex_float * z, lapack_int ldz, lapack_int * ifail)
Definition at line 36 of file lapacke_chbevx_2stage.c.
And the two-stage remix keeps the exact same twenty-argument parade 🌟 — matrix_layout, jobz, range, uplo, n, kd, ab, ldab, q, ldq, vl, vu, il, iu, abstol, m, w, z, ldz, ifail. Nothing added, nothing dropped, only the file name changed. Two-stage stays in the name only, and honestly? Iconic behaviour 💅✨.
🌸 LAPACKE_chbevx_2stage_work
lapack_int LAPACKE_chbevx_2stage_work (int matrix_layout, char jobz, char
range, char uplo, lapack_int n, lapack_int kd, lapack_complex_float *
ab, lapack_int ldab, lapack_complex_float * q, lapack_int ldq, float vl,
float vu, lapack_int il, lapack_int iu, float abstol, lapack_int * m,
float * w, lapack_complex_float * z, lapack_int ldz,
lapack_complex_float * work, lapack_int lwork, float * rwork, lapack_int
* iwork, lapack_int * ifail)
Definition at line 36 of file lapacke_chbevx_2stage_work.c.
Okay so this is the _2stage and _work combo version — the full-glow-up one 💅. It's got everything: matrix_layout, jobz, range, uplo, n, kd, the ab/ldab pair, q/ldq, vl, vu, il, iu, abstol, then the outputs — m, w, z/ldz — and the whole workspace entourage: work, lwork, rwork, iwork, ifail. That's a lot of arguments bestie, don't skip a single one 🫶.
✨ LAPACKE_chbevx_work
lapack_int LAPACKE_chbevx_work (int matrix_layout, char jobz, char range,
char uplo, lapack_int n, lapack_int kd, lapack_complex_float * ab,
lapack_int ldab, lapack_complex_float * q, lapack_int ldq, float vl,
float vu, lapack_int il, lapack_int iu, float abstol, lapack_int * m,
float * w, lapack_complex_float * z, lapack_int ldz,
lapack_complex_float * work, float * rwork, lapack_int * iwork,
lapack_int * ifail)
Definition at line 36 of file lapacke_chbevx_work.c.
Same chbevx energy but the plain _work cut — note there's no lwork here, just work, rwork, iwork, ifail riding along. Iconic, lowkey different from its _2stage sibling 👑
🦋 LAPACKE_chbgst
lapack_int LAPACKE_chbgst (int matrix_layout, char vect, char uplo,
lapack_int n, lapack_int ka, lapack_int kb, lapack_complex_float * ab,
lapack_int ldab, const lapack_complex_float * bb, lapack_int ldbb,
lapack_complex_float * x, lapack_int ldx)
Definition at line 36 of file lapacke_chbgst.c.
Ooh okay, vect and uplo up front, then n, ka, kb, and two band-storage pairs — ab/ldab and bb/ldbb (that one's const, periodt 🔒) — finishing with x and ldx. Clean, no workspace drama.
🎀 LAPACKE_chbgst_work
lapack_int LAPACKE_chbgst_work (int matrix_layout, char vect, char uplo,
lapack_int n, lapack_int ka, lapack_int kb, lapack_complex_float * ab,
lapack_int ldab, const lapack_complex_float * bb, lapack_int ldbb,
lapack_complex_float * x, lapack_int ldx, lapack_complex_float * work,
float * rwork)
Definition at line 36 of file lapacke_chbgst_work.c.
The _work twin 🫶 — literally the same argument parade as LAPACKE_chbgst, except it trails work (lapack_complex_float *) and rwork (float *) at the end, iykyk.
💜 LAPACKE_chbgv
lapack_int LAPACKE_chbgv (int matrix_layout, char jobz, char uplo,
lapack_int n, lapack_int ka, lapack_int kb, lapack_complex_float * ab,
lapack_int ldab, lapack_complex_float * bb, lapack_int ldbb, float * w,
lapack_complex_float * z, lapack_int ldz)
Definition at line 36 of file lapacke_chbgv.c.
jobz, uplo, n, ka, kb, ab/ldab, bb/ldbb, w, z/ldz — that's the whole lineup 💖. Note bb is not const here, bestie, it's a plain lapack_complex_float *. Don't come for me, that's what the page says.
🌈 LAPACKE_chbgv_work
lapack_int LAPACKE_chbgv_work (int matrix_layout, char jobz, char uplo,
lapack_int n, lapack_int ka, lapack_int kb, lapack_complex_float * ab,
lapack_int ldab, lapack_complex_float * bb, lapack_int ldbb, float * w,
lapack_complex_float * z, lapack_int ldz, lapack_complex_float * work,
float * rwork)
Definition at line 36 of file lapacke_chbgv_work.c.
Everything from LAPACKE_chbgv plus work and rwork tacked on the end — the workspace girlies have entered the chat ✨.
🔥 LAPACKE_chbgvd
lapack_int LAPACKE_chbgvd (int matrix_layout, char jobz, char uplo,
lapack_int n, lapack_int ka, lapack_int kb, lapack_complex_float * ab,
lapack_int ldab, lapack_complex_float * bb, lapack_int ldbb, float * w,
lapack_complex_float * z, lapack_int ldz)
Definition at line 36 of file lapacke_chbgvd.c.
The d variant, serving the exact same signature as LAPACKE_chbgv, no cap 👑. jobz, uplo, n, ka, kb, ab/ldab, bb/ldbb, w, z/ldz.
💀 LAPACKE_chbgvd_work
lapack_int LAPACKE_chbgvd_work (int matrix_layout, char jobz, char uplo,
lapack_int n, lapack_int ka, lapack_int kb, lapack_complex_float * ab,
lapack_int ldab, lapack_complex_float * bb, lapack_int ldbb, float * w,
lapack_complex_float * z, lapack_int ldz, lapack_complex_float * work,
lapack_int lwork, float * rwork, lapack_int lrwork, lapack_int * iwork,
lapack_int liwork)
Definition at line 36 of file lapacke_chbgvd_work.c.
Okay she's thriving — this one's got the deluxe workspace package: work/lwork, rwork/lrwork, AND iwork/liwork. Three int/float pairs, all matching, all needed. The way that's so satisfying 😭💅
🧚 LAPACKE_chbgvx
lapack_int LAPACKE_chbgvx (int matrix_layout, char jobz, char range, char
uplo, lapack_int n, lapack_int ka, lapack_int kb, lapack_complex_float *
ab, lapack_int ldab, lapack_complex_float * bb, lapack_int ldbb,
lapack_complex_float * q, lapack_int ldq, float vl, float vu, lapack_int
il, lapack_int iu, float abstol, lapack_int * m, float * w,
lapack_complex_float * z, lapack_int ldz, lapack_int * ifail)
Definition at line 36 of file lapacke_chbgvx.c.
range and ifail have joined the party 🎉 — plus q/ldq, vl, vu, il, iu, abstol, m, w, z/ldz. Full cast, no understudies.
🍓 LAPACKE_chbgvx_work
lapack_int LAPACKE_chbgvx_work (int matrix_layout, char jobz, char range,
char uplo, lapack_int n, lapack_int ka, lapack_int kb,
lapack_complex_float * ab, lapack_int ldab, lapack_complex_float * bb,
lapack_int ldbb, lapack_complex_float * q, lapack_int ldq, float vl,
float vu, lapack_int il, lapack_int iu, float abstol, lapack_int * m,
float * w, lapack_complex_float * z, lapack_int ldz,
lapack_complex_float * work, float * rwork, lapack_int * iwork,
lapack_int * ifail)
Definition at line 36 of file lapacke_chbgvx_work.c.
Same as LAPACKE_chbgvx but with work, rwork and iwork snuck in right before ifail 🫶. No lwork, no lrwork, no liwork — literally just the three pointers, bestie.
🌸 LAPACKE_chbtrd
lapack_int LAPACKE_chbtrd (int matrix_layout, char vect, char uplo,
lapack_int n, lapack_int kd, lapack_complex_float * ab, lapack_int ldab,
float * d, float * e, lapack_complex_float * q, lapack_int ldq)
Definition at line 36 of file lapacke_chbtrd.c.
Short and sweet: vect, uplo, n, kd, ab/ldab, then d, e, and the q/ldq pair. Ten args and not one of them extra 💖
⭐ LAPACKE_chbtrd_work
lapack_int LAPACKE_chbtrd_work (int matrix_layout, char vect, char uplo,
lapack_int n, lapack_int kd, lapack_complex_float * ab, lapack_int ldab,
float * d, float * e, lapack_complex_float * q, lapack_int ldq,
lapack_complex_float * work)
Definition at line 36 of file lapacke_chbtrd_work.c.
Exactly LAPACKE_chbtrd plus a single trailing lapack_complex_float * work — one little workspace crumb, that's all she needs 🎀
🦋 LAPACKE_checon
lapack_int LAPACKE_checon (int matrix_layout, char uplo, lapack_int n, const
lapack_complex_float * a, lapack_int lda, const lapack_int * ipiv, float
anorm, float * rcond)
Definition at line 36 of file lapacke_checon.c.
Look at those consts 😌 — a and ipiv are read-only girlies, rcond is the output. Plus uplo, n, lda, and anorm. Chef's kiss.
💜 LAPACKE_checon_3
lapack_int LAPACKE_checon_3 (int matrix_layout, char uplo, lapack_int n,
const lapack_complex_float * a, lapack_int lda, const
lapack_complex_float * e, const lapack_int * ipiv, float anorm, float *
rcond)
Definition at line 36 of file lapacke_checon_3.c.
The _3 version ✨ — it's LAPACKE_checon with an extra const lapack_complex_float * e slid in between lda and ipiv. That's the whole diff, fr fr.
🌈 LAPACKE_checon_3_work
lapack_int LAPACKE_checon_3_work (int matrix_layout, char uplo, lapack_int
n, const lapack_complex_float * a, lapack_int lda, const
lapack_complex_float * e, const lapack_int * ipiv, float anorm, float *
rcond, lapack_complex_float * work)
Definition at line 36 of file lapacke_checon_3_work.c.
LAPACKE_checon_3 with lapack_complex_float * work appended at the very end. Conserve the consts, bestie, they're load-bearing 🫶
🔥 LAPACKE_checon_work
lapack_int LAPACKE_checon_work (int matrix_layout, char uplo, lapack_int n,
const lapack_complex_float * a, lapack_int lda, const lapack_int * ipiv,
float anorm, float * rcond, lapack_complex_float * work)
Definition at line 36 of file lapacke_checon_work.c.
LAPACKE_checon + work. No e in this one — that's the _3 variant's whole personality, don't mix them up 💅
🧚 LAPACKE_cheequb
lapack_int LAPACKE_cheequb (int matrix_layout, char uplo, lapack_int n,
const lapack_complex_float * a, lapack_int lda, float * s, float *
scond, float * amax)
Definition at line 36 of file lapacke_cheequb.c.
Short one! uplo, n, a/lda (that a is const, periodt), then three float pointers out: s, scond, amax. Slay, minimal queen 💖
🎀 LAPACKE_cheequb_work
lapack_int LAPACKE_cheequb_work (int matrix_layout, char uplo, lapack_int n,
const lapack_complex_float * a, lapack_int lda, float * s, float *
scond, float * amax, lapack_complex_float * work)
Definition at line 36 of file lapacke_cheequb_work.c.
LAPACKE_cheequb plus work on the tail end. Same s/scond/amax trio, same const lapack_complex_float * a, all accounted for ✨
👑 LAPACKE_cheev
lapack_int LAPACKE_cheev (int matrix_layout, char jobz, char uplo,
lapack_int n, lapack_complex_float * a, lapack_int lda, float * w)
Definition at line 36 of file lapacke_cheev.c.
Okay this is the simple one and honestly? Main character energy 👑 — jobz, uplo, n, a/lda, and w. Seven args, zero workspace, she just shows up and does the thing.
🌟 LAPACKE_cheev_2stage
lapack_int LAPACKE_cheev_2stage (int matrix_layout, char jobz, char uplo,
lapack_int n, lapack_complex_float * a, lapack_int lda, float * w)
Definition at line 36 of file lapacke_cheev_2stage.c.
Two-stage remix, identical signature to LAPACKE_cheev 🫶. matrix_layout, jobz, uplo, n, a, lda, w — same seven, same order, different file.
💅 LAPACKE_cheev_2stage_work
lapack_int LAPACKE_cheev_2stage_work (int matrix_layout, char jobz, char
uplo, lapack_int n, lapack_complex_float * a, lapack_int lda, float * w,
lapack_complex_float * work, lapack_int lwork, float * rwork)
Definition at line 36 of file lapacke_cheev_2stage_work.c.
Now she's got her workspace bag 💅 — work + lwork, and rwork (no lrwork though, keep up). Everything else is the same seven.
💖 LAPACKE_cheev_work
lapack_int LAPACKE_cheev_work (int matrix_layout, char jobz, char uplo,
lapack_int n, lapack_complex_float * a, lapack_int lda, float * w,
lapack_complex_float * work, lapack_int lwork, float * rwork)
Definition at line 36 of file lapacke_cheev_work.c.
Same ten args as the _2stage_work version — work, lwork, rwork, no lrwork, no iwork, not one of them extra. Twins fr fr 🌸
🦋 LAPACKE_cheevd
lapack_int LAPACKE_cheevd (int matrix_layout, char jobz, char uplo,
lapack_int n, lapack_complex_float * a, lapack_int lda, float * w)
Definition at line 36 of file lapacke_cheevd.c.
Back to the compact seven: matrix_layout, jobz, uplo, n, a, lda, w. Yes it's literally the same as LAPACKE_cheev — no she did not copy, it's a family resemblance, okay 😭
⭐ LAPACKE_cheevd_2stage
lapack_int LAPACKE_cheevd_2stage (int matrix_layout, char jobz, char uplo,
lapack_int n, lapack_complex_float * a, lapack_int lda, float * w)
Definition at line 36 of file lapacke_cheevd_2stage.c.
Yep, same seven again 🎀. matrix_layout, jobz, uplo, n, a, lda, w. The _2stage suffix is doing all the differentiating here, and honestly? Respect.
🔥 LAPACKE_cheevd_2stage_work
lapack_int LAPACKE_cheevd_2stage_work (int matrix_layout, char jobz, char
uplo, lapack_int n, lapack_complex_float * a, lapack_int lda, float * w,
lapack_complex_float * work, lapack_int lwork, float * rwork, lapack_int
lrwork, lapack_int * iwork, lapack_int liwork)
Definition at line 36 of file lapacke_cheevd_2stage_work.c.
FULL workspace loadout, bestie 🔥 — work/lwork, rwork/lrwork, iwork/liwork. All three pairs present and accounted for. That's the deluxe d experience.
🌈 LAPACKE_cheevd_work
lapack_int LAPACKE_cheevd_work (int matrix_layout, char jobz, char uplo,
lapack_int n, lapack_complex_float * a, lapack_int lda, float * w,
lapack_complex_float * work, lapack_int lwork, float * rwork, lapack_int
lrwork, lapack_int * iwork, lapack_int liwork)
Definition at line 36 of file lapacke_cheevd_work.c.
Identical lineup to LAPACKE_cheevd_2stage_work 💖 — thirteen args, three workspace pairs, zero surprises. We love consistency.
🧚 LAPACKE_cheevr
lapack_int LAPACKE_cheevr (int matrix_layout, char jobz, char range, char
uplo, lapack_int n, lapack_complex_float * a, lapack_int lda, float vl,
float vu, lapack_int il, lapack_int iu, float abstol, lapack_int * m,
float * w, lapack_complex_float * z, lapack_int ldz, lapack_int *
isuppz)
Definition at line 36 of file lapacke_cheevr.c.
Now this is a guest list 🎉 — jobz, range, uplo, n, a/lda, vl, vu, il, iu, abstol, m, w, z/ldz, and isuppz closing it out. No ifail here, note — that's cheevx's thing, not hers.
🍓 LAPACKE_cheevr_2stage
lapack_int LAPACKE_cheevr_2stage (int matrix_layout, char jobz, char range,
char uplo, lapack_int n, lapack_complex_float * a, lapack_int lda, float
vl, float vu, lapack_int il, lapack_int iu, float abstol, lapack_int *
m, float * w, lapack_complex_float * z, lapack_int ldz, lapack_int *
isuppz)
Definition at line 36 of file lapacke_cheevr_2stage.c.
Same seventeen-ish args as LAPACKE_cheevr, just wearing the _2stage badge 🫶. isuppz is still the last one, still lapack_int *, still not const.
💀 LAPACKE_cheevr_2stage_work
lapack_int LAPACKE_cheevr_2stage_work (int matrix_layout, char jobz, char
range, char uplo, lapack_int n, lapack_complex_float * a, lapack_int
lda, float vl, float vu, lapack_int il, lapack_int iu, float abstol,
lapack_int * m, float * w, lapack_complex_float * z, lapack_int ldz,
lapack_int * isuppz, lapack_complex_float * work, lapack_int lwork,
float * rwork, lapack_int lrwork, lapack_int * iwork, lapack_int liwork)
Definition at line 36 of file lapacke_cheevr_2stage_work.c.
Longest one yet and it ate 😭 — the full cheevr cast PLUS work/lwork, rwork/lrwork, iwork/liwork piled on after isuppz. Keep the order, bestie, isuppz comes before work. Don't fumble it 💅
🎀 LAPACKE_cheevr_work
lapack_int LAPACKE_cheevr_work (int matrix_layout, char jobz, char range,
char uplo, lapack_int n, lapack_complex_float * a, lapack_int lda, float
vl, float vu, lapack_int il, lapack_int iu, float abstol, lapack_int *
m, float * w, lapack_complex_float * z, lapack_int ldz, lapack_int *
isuppz, lapack_complex_float * work, lapack_int lwork, float * rwork,
lapack_int lrwork, lapack_int * iwork, lapack_int liwork)
Definition at line 36 of file lapacke_cheevr_work.c.
Same monster signature as the _2stage_work sibling, different file name ✨. Three workspace pairs, isuppz sitting right before work, everything in its place. Iconic.
🌸 LAPACKE_cheevx
lapack_int LAPACKE_cheevx (int matrix_layout, char jobz, char range, char
uplo, lapack_int n, lapack_complex_float * a, lapack_int lda, float vl,
float vu, lapack_int il, lapack_int iu, float abstol, lapack_int * m,
float * w, lapack_complex_float * z, lapack_int ldz, lapack_int * ifail)
Definition at line 36 of file lapacke_cheevx.c.
The x version brings ifail instead of isuppz 🔍 — everything else matches the cheevr lineup: jobz, range, uplo, n, a/lda, vl, vu, il, iu, abstol, m, w, z/ldz.
👑 LAPACKE_cheevx_2stage
lapack_int LAPACKE_cheevx_2stage (int matrix_layout, char jobz, char range,
char uplo, lapack_int n, lapack_complex_float * a, lapack_int lda, float
vl, float vu, lapack_int il, lapack_int iu, float abstol, lapack_int *
m, float * w, lapack_complex_float * z, lapack_int ldz, lapack_int *
ifail)
Definition at line 36 of file lapacke_cheevx_2stage.c.
Same as LAPACKE_cheevx, _2stage edition 💖. ifail still last, still lapack_int *. She kept the whole squad.
🦋 LAPACKE_cheevx_2stage_work
lapack_int LAPACKE_cheevx_2stage_work (int matrix_layout, char jobz, char
range, char uplo, lapack_int n, lapack_complex_float * a, lapack_int
lda, float vl, float vu, lapack_int il, lapack_int iu, float abstol,
lapack_int * m, float * w, lapack_complex_float * z, lapack_int ldz,
lapack_complex_float * work, lapack_int lwork, float * rwork, lapack_int
* iwork, lapack_int * ifail)
Definition at line 36 of file lapacke_cheevx_2stage_work.c.
And the finale, bestie 🎬 — the x cast plus work/lwork, rwork, iwork, and ifail after all the workspace. Note there's no lrwork or liwork here, just the bare rwork and iwork pointers. Read it twice, it's long 😭👑
LAPACKE_cheevx_work 🦋
lapack_int LAPACKE_cheevx_work (int matrix_layout, char jobz, char range,
char uplo, lapack_int n, lapack_complex_float * a, lapack_int lda, float
vl, float vu, lapack_int il, lapack_int iu, float abstol, lapack_int *
m, float * w, lapack_complex_float * z, lapack_int ldz,
lapack_complex_float * work, lapack_int lwork, float * rwork, lapack_int
* iwork, lapack_int * ifail)
Ok so this one has the whole friend group in the parameter list — jobz, range, uplo, vl, vu, il, iu, abstol, the works. She's defined at line 36 of lapacke_cheevx_work.c, bestie 💅
LAPACKE_chegst
lapack_int LAPACKE_chegst (int matrix_layout, lapack_int itype, char uplo,
lapack_int n, lapack_complex_float * a, lapack_int lda, const
lapack_complex_float * b, lapack_int ldb)
Look at that const on b — she respects your data, periodt. Defined at line 36 of lapacke_chegst.c 🎀
LAPACKE_chegst_work
lapack_int LAPACKE_chegst_work (int matrix_layout, lapack_int itype, char
uplo, lapack_int n, lapack_complex_float * a, lapack_int lda, const
lapack_complex_float * b, lapack_int ldb)
The _work twin of the one above — same cast, same energy, different file. Defined at line 36 of lapacke_chegst_work.c ✨
LAPACKE_chegv
lapack_int LAPACKE_chegv (int matrix_layout, lapack_int itype, char jobz,
char uplo, lapack_int n, lapack_complex_float * a, lapack_int lda,
lapack_complex_float * b, lapack_int ldb, float * w)
Nine args, not a single const in sight, living her best life. Defined at line 36 of lapacke_chegv.c 🔥
LAPACKE_chegv_2stage
lapack_int LAPACKE_chegv_2stage (int matrix_layout, lapack_int itype, char
jobz, char uplo, lapack_int n, lapack_complex_float * a, lapack_int lda,
lapack_complex_float * b, lapack_int ldb, float * w)
Same signature as LAPACKE_chegv, but she's got two stages in the name — main character energy fr. Defined at line 36 of lapacke_chegv_2stage.c 👑
LAPACKE_chegv_2stage_work
lapack_int LAPACKE_chegv_2stage_work (int matrix_layout, lapack_int itype,
char jobz, char uplo, lapack_int n, lapack_complex_float * a, lapack_int
lda, lapack_complex_float * b, lapack_int ldb, float * w,
lapack_complex_float * work, lapack_int lwork, float * rwork)
Two-stage and _work?? That's a double commitment and honestly we stan. Note the extra work, lwork and rwork at the end. Defined at line 36 of lapacke_chegv_2stage_work.c 🫶
LAPACKE_chegv_work
lapack_int LAPACKE_chegv_work (int matrix_layout, lapack_int itype, char
jobz, char uplo, lapack_int n, lapack_complex_float * a, lapack_int lda,
lapack_complex_float * b, lapack_int ldb, float * w,
lapack_complex_float * work, lapack_int lwork, float * rwork)
The classic _work version — hands you the workspace (work, lwork, rwork) so nothing gets allocated behind your back. Defined at line 36 of lapacke_chegv_work.c 💜
LAPACKE_chegvd
lapack_int LAPACKE_chegvd (int matrix_layout, lapack_int itype, char jobz,
char uplo, lapack_int n, lapack_complex_float * a, lapack_int lda,
lapack_complex_float * b, lapack_int ldb, float * w)
That extra d at the end is doing a lot of heavy lifting, iykyk. Defined at line 36 of lapacke_chegvd.c ⭐
LAPACKE_chegvd_work
lapack_int LAPACKE_chegvd_work (int matrix_layout, lapack_int itype, char
jobz, char uplo, lapack_int n, lapack_complex_float * a, lapack_int lda,
lapack_complex_float * b, lapack_int ldb, float * w,
lapack_complex_float * work, lapack_int lwork, float * rwork, lapack_int
lrwork, lapack_int * iwork, lapack_int liwork)
Okay this one brought everything: work, lwork, rwork, lrwork, iwork, liwork. A whole luggage set 😭 Defined at line 36 of lapacke_chegvd_work.c 🌸
LAPACKE_chegvx
lapack_int LAPACKE_chegvx (int matrix_layout, lapack_int itype, char jobz,
char range, char uplo, lapack_int n, lapack_complex_float * a,
lapack_int lda, lapack_complex_float * b, lapack_int ldb, float vl,
float vu, lapack_int il, lapack_int iu, float abstol, lapack_int * m,
float * w, lapack_complex_float * z, lapack_int ldz, lapack_int * ifail)
Not just abstol but also vl, vu, il, iu, plus z, ldz and ifail — she's extra in the best way. Defined at line 36 of lapacke_chegvx.c 💖
LAPACKE_chegvx_work
lapack_int LAPACKE_chegvx_work (int matrix_layout, lapack_int itype, char
jobz, char range, char uplo, lapack_int n, lapack_complex_float * a,
lapack_int lda, lapack_complex_float * b, lapack_int ldb, float vl,
float vu, lapack_int il, lapack_int iu, float abstol, lapack_int * m,
float * w, lapack_complex_float * z, lapack_int ldz,
lapack_complex_float * work, lapack_int lwork, float * rwork, lapack_int
* iwork, lapack_int * ifail)
Everything from LAPACKE_chegvx plus work, lwork, rwork and iwork tacked on the end. She said "and one more thing" four times 😅 Defined at line 36 of lapacke_chegvx_work.c 🧚
LAPACKE_cherfs
lapack_int LAPACKE_cherfs (int matrix_layout, char uplo, lapack_int n,
lapack_int nrhs, const lapack_complex_float * a, lapack_int lda, const
lapack_complex_float * af, lapack_int ldaf, const lapack_int * ipiv,
const lapack_complex_float * b, lapack_int ldb, lapack_complex_float *
x, lapack_int ldx, float * ferr, float * berr)
Count the consts bestie — a, af, ipiv, b are all protected. Only x, ferr and berr are allowed to change, as a treat. Defined at line 36 of lapacke_cherfs.c 🍓
LAPACKE_cherfs_work
lapack_int LAPACKE_cherfs_work (int matrix_layout, char uplo, lapack_int n,
lapack_int nrhs, const lapack_complex_float * a, lapack_int lda, const
lapack_complex_float * af, lapack_int ldaf, const lapack_int * ipiv,
const lapack_complex_float * b, lapack_int ldb, lapack_complex_float *
x, lapack_int ldx, float * ferr, float * berr, lapack_complex_float *
work, float * rwork)
Exactly the LAPACKE_cherfs cast with work and rwork appended, because even the refined girlies need a scratchpad. Defined at line 36 of lapacke_cherfs_work.c 💫
LAPACKE_cherfsx
lapack_int LAPACKE_cherfsx (int matrix_layout, char uplo, char equed,
lapack_int n, lapack_int nrhs, const lapack_complex_float * a,
lapack_int lda, const lapack_complex_float * af, lapack_int ldaf, const
lapack_int * ipiv, const float * s, const lapack_complex_float * b,
lapack_int ldb, lapack_complex_float * x, lapack_int ldx, float * rcond,
float * berr, lapack_int n_err_bnds, float * err_bnds_norm, float *
err_bnds_comp, lapack_int nparams, float * params)
The x version came to slay: equed, s, rcond, n_err_bnds, err_bnds_norm, err_bnds_comp, nparams, params. She's thorough and we love her for it 🔥 Defined at line 36 of lapacke_cherfsx.c 🌈
LAPACKE_cherfsx_work
lapack_int LAPACKE_cherfsx_work (int matrix_layout, char uplo, char equed,
lapack_int n, lapack_int nrhs, const lapack_complex_float * a,
lapack_int lda, const lapack_complex_float * af, lapack_int ldaf, const
lapack_int * ipiv, const float * s, const lapack_complex_float * b,
lapack_int ldb, lapack_complex_float * x, lapack_int ldx, float * rcond,
float * berr, lapack_int n_err_bnds, float * err_bnds_norm, float *
err_bnds_comp, lapack_int nparams, float * params, lapack_complex_float
* work, float * rwork)
Same as above but she brought work and rwork too. At this point the parameter list is a whole group chat 😭 Defined at line 36 of lapacke_cherfsx_work.c 💀
LAPACKE_chesv
lapack_int LAPACKE_chesv (int matrix_layout, char uplo, lapack_int n,
lapack_int nrhs, lapack_complex_float * a, lapack_int lda, lapack_int *
ipiv, lapack_complex_float * b, lapack_int ldb)
Short, sweet, nine args, ipiv right in the middle where she belongs. Defined at line 36 of lapacke_chesv.c 💅
LAPACKE_chesv_aa
lapack_int LAPACKE_chesv_aa (int matrix_layout, char uplo, lapack_int n,
lapack_int nrhs, lapack_complex_float * a, lapack_int lda, lapack_int *
ipiv, lapack_complex_float * b, lapack_int ldb)
Same signature as plain LAPACKE_chesv, but the _aa suffix is giving "she went to a different school, you wouldn't know her". Defined at line 36 of lapacke_chesv_aa.c 🎀
LAPACKE_chesv_aa_2stage
lapack_int LAPACKE_chesv_aa_2stage (int matrix_layout, char uplo, lapack_int
n, lapack_int nrhs, lapack_complex_float * a, lapack_int lda,
lapack_complex_float * tb, lapack_int ltb, lapack_int * ipiv, lapack_int
* ipiv2, lapack_complex_float * b, lapack_int ldb)
Two pivots (ipiv and ipiv2), a tb with her own ltb, and a two-stage name. Overachiever behavior ngl. Defined at line 36 of lapacke_chesv_aa_2stage.c 👑
LAPACKE_chesv_aa_2stage_work
lapack_int LAPACKE_chesv_aa_2stage_work (int matrix_layout, char uplo,
lapack_int n, lapack_int nrhs, lapack_complex_float * a, lapack_int lda,
lapack_complex_float * tb, lapack_int ltb, lapack_int * ipiv, lapack_int
* ipiv2, lapack_complex_float * b, lapack_int ldb, lapack_complex_float
* work, lapack_int lwork)
Everything from LAPACKE_chesv_aa_2stage plus work and lwork. She ran out of suffix room and just kept typing. Defined at line 36 of lapacke_chesv_aa_2stage_work.c 😭
LAPACKE_chesv_aa_work
lapack_int LAPACKE_chesv_aa_work (int matrix_layout, char uplo, lapack_int
n, lapack_int nrhs, lapack_complex_float * a, lapack_int lda, lapack_int
* ipiv, lapack_complex_float * b, lapack_int ldb, lapack_complex_float *
work, lapack_int lwork)
The _aa version but with her little work/lwork duo along for the ride. Defined at line 36 of lapacke_chesv_aa_work.c 🌸
LAPACKE_chesv_rk
lapack_int LAPACKE_chesv_rk (int matrix_layout, char uplo, lapack_int n,
lapack_int nrhs, lapack_complex_float * a, lapack_int lda,
lapack_complex_float * e, lapack_int * ipiv, lapack_complex_float * b,
lapack_int ldb)
She's got an e parameter wedged between lda and ipiv — different girl, different routine. Defined at line 36 of lapacke_chesv_rk.c 🦋
LAPACKE_chesv_rk_work
lapack_int LAPACKE_chesv_rk_work (int matrix_layout, char uplo, lapack_int
n, lapack_int nrhs, lapack_complex_float * a, lapack_int lda,
lapack_complex_float * e, lapack_int * ipiv, lapack_complex_float * b,
lapack_int ldb, lapack_complex_float * work, lapack_int lwork)
LAPACKE_chesv_rk with work and lwork bolted on the end, obviously. Defined at line 36 of lapacke_chesv_rk_work.c ⭐
LAPACKE_chesv_work
lapack_int LAPACKE_chesv_work (int matrix_layout, char uplo, lapack_int n,
lapack_int nrhs, lapack_complex_float * a, lapack_int lda, lapack_int *
ipiv, lapack_complex_float * b, lapack_int ldb, lapack_complex_float *
work, lapack_int lwork)
Plain LAPACKE_chesv plus the workspace handoff. Reliable, lowkey iconic. Defined at line 36 of lapacke_chesv_work.c ✨
LAPACKE_chesvx
lapack_int LAPACKE_chesvx (int matrix_layout, char fact, char uplo,
lapack_int n, lapack_int nrhs, const lapack_complex_float * a,
lapack_int lda, lapack_complex_float * af, lapack_int ldaf, lapack_int *
ipiv, const lapack_complex_float * b, lapack_int ldb,
lapack_complex_float * x, lapack_int ldx, float * rcond, float * ferr,
float * berr)
Note she starts with fact instead of jumping straight to uplo — and a and b are const while af, ipiv, x, rcond, ferr and berr are not. Defined at line 36 of lapacke_chesvx.c 💜
LAPACKE_chesvx_work
lapack_int LAPACKE_chesvx_work (int matrix_layout, char fact, char uplo,
lapack_int n, lapack_int nrhs, const lapack_complex_float * a,
lapack_int lda, lapack_complex_float * af, lapack_int ldaf, lapack_int *
ipiv, const lapack_complex_float * b, lapack_int ldb,
lapack_complex_float * x, lapack_int ldx, float * rcond, float * ferr,
float * berr, lapack_complex_float * work, lapack_int lwork, float *
rwork)
Same energy, plus work, lwork, rwork. She remembered everything, fr fr. Defined at line 36 of lapacke_chesvx_work.c 🫶
LAPACKE_chesvxx
lapack_int LAPACKE_chesvxx (int matrix_layout, char fact, char uplo,
lapack_int n, lapack_int nrhs, lapack_complex_float * a, lapack_int lda,
lapack_complex_float * af, lapack_int ldaf, lapack_int * ipiv, char *
equed, float * s, lapack_complex_float * b, lapack_int ldb,
lapack_complex_float * x, lapack_int ldx, float * rcond, float * rpvgrw,
float * berr, lapack_int n_err_bnds, float * err_bnds_norm, float *
err_bnds_comp, lapack_int nparams, float * params)
Double x, double trouble. Heads up: here a and b are not const (unlike LAPACKE_chesvx), and she's got equed, s, rpvgrw, n_err_bnds, err_bnds_norm, err_bnds_comp, nparams and params in the mix. Defined at line 36 of lapacke_chesvxx.c 🌈
LAPACKE_chesvxx_work
lapack_int LAPACKE_chesvxx_work (int matrix_layout, char fact, char uplo,
lapack_int n, lapack_int nrhs, lapack_complex_float * a, lapack_int lda,
lapack_complex_float * af, lapack_int ldaf, lapack_int * ipiv, char *
equed, float * s, lapack_complex_float * b, lapack_int ldb,
lapack_complex_float * x, lapack_int ldx, float * rcond, float * rpvgrw,
float * berr, lapack_int n_err_bnds, float * err_bnds_norm, float *
err_bnds_comp, lapack_int nparams, float * params, lapack_complex_float
* work, float * rwork)
The full LAPACKE_chesvxx lineup with work and rwork added — she's the longest guest list at this party, no cap. Defined at line 36 of lapacke_chesvxx_work.c 💀
LAPACKE_cheswapr
lapack_int LAPACKE_cheswapr (int matrix_layout, char uplo, lapack_int n,
lapack_complex_float * a, lapack_int lda, lapack_int i1, lapack_int i2)
i1 and i2 sitting at the end like two besties holding hands. Defined at line 36 of lapacke_cheswapr.c 🎀
LAPACKE_cheswapr_work
lapack_int LAPACKE_cheswapr_work (int matrix_layout, char uplo, lapack_int
n, lapack_complex_float * a, lapack_int lda, lapack_int i1, lapack_int
i2)
Identical signature to LAPACKE_cheswapr, separate file, separate moment. Defined at line 36 of lapacke_cheswapr_work.c 🧚
LAPACKE_chetrd
lapack_int LAPACKE_chetrd (int matrix_layout, char uplo, lapack_int n,
lapack_complex_float * a, lapack_int lda, float * d, float * e,
lapack_complex_float * tau)
Eight args and a tau at the end — cute name, big responsibility. Defined at line 36 of lapacke_chetrd.c 💖
LAPACKE_chetrd_work
lapack_int LAPACKE_chetrd_work (int matrix_layout, char uplo, lapack_int n,
lapack_complex_float * a, lapack_int lda, float * d, float * e,
lapack_complex_float * tau, lapack_complex_float * work, lapack_int
lwork)
d, e, tau, then work and lwork — she packs light but she packs right. Defined at line 36 of lapacke_chetrd_work.c 🌸
LAPACKE_chetrf
lapack_int LAPACKE_chetrf (int matrix_layout, char uplo, lapack_int n,
lapack_complex_float * a, lapack_int lda, lapack_int * ipiv)
Just six parameters and an ipiv, minimalism era. Defined at line 36 of lapacke_chetrf.c ⭐
LAPACKE_chetrf_aa 🦋
lapack_int LAPACKE_chetrf_aa (int matrix_layout, char uplo, lapack_int n,
lapack_complex_float * a, lapack_int lda, lapack_int * ipiv)
Definition at line 36 of file lapacke_chetrf_aa.c.
LAPACKE_chetrf_aa_2stage 💅
lapack_int LAPACKE_chetrf_aa_2stage (int matrix_layout, char uplo,
lapack_int n, lapack_complex_float * a, lapack_int lda,
lapack_complex_float * tb, lapack_int ltb, lapack_int * ipiv, lapack_int
* ipiv2)
Definition at line 36 of file lapacke_chetrf_aa_2stage.c.
Ok bestie the _2stage girlies brought extra luggage — tb, ltb and a whole second pivot array ipiv2 — and honestly? iconic.
LAPACKE_chetrf_aa_2stage_work ✨
lapack_int LAPACKE_chetrf_aa_2stage_work (int matrix_layout, char uplo,
lapack_int n, lapack_complex_float * a, lapack_int lda,
lapack_complex_float * tb, lapack_int ltb, lapack_int * ipiv, lapack_int
* ipiv2, lapack_complex_float * work, lapack_int lwork)
Definition at line 36 of file lapacke_chetrf_aa_2stage_work.c.
LAPACKE_chetrf_aa_work 🎀
lapack_int LAPACKE_chetrf_aa_work (int matrix_layout, char uplo, lapack_int
n, lapack_complex_float * a, lapack_int lda, lapack_int * ipiv,
lapack_complex_float * work, lapack_int lwork)
Definition at line 36 of file lapacke_chetrf_aa_work.c.
LAPACKE_chetrf_rk 🌸
lapack_int LAPACKE_chetrf_rk (int matrix_layout, char uplo, lapack_int n,
lapack_complex_float * a, lapack_int lda, lapack_complex_float * e,
lapack_int * ipiv)
Definition at line 36 of file lapacke_chetrf_rk.c.
LAPACKE_chetrf_rk_work 💜
lapack_int LAPACKE_chetrf_rk_work (int matrix_layout, char uplo, lapack_int
n, lapack_complex_float * a, lapack_int lda, lapack_complex_float * e,
lapack_int * ipiv, lapack_complex_float * work, lapack_int lwork)
Definition at line 36 of file lapacke_chetrf_rk_work.c.
LAPACKE_chetrf_rook 🔥
lapack_int LAPACKE_chetrf_rook (int matrix_layout, char uplo, lapack_int n,
lapack_complex_float * a, lapack_int lda, lapack_int * ipiv)
Definition at line 36 of file lapacke_chetrf_rook.c.
LAPACKE_chetrf_rook_work ⭐
lapack_int LAPACKE_chetrf_rook_work (int matrix_layout, char uplo,
lapack_int n, lapack_complex_float * a, lapack_int lda, lapack_int *
ipiv, lapack_complex_float * work, lapack_int lwork)
Definition at line 36 of file lapacke_chetrf_rook_work.c.
LAPACKE_chetrf_work 🫶
lapack_int LAPACKE_chetrf_work (int matrix_layout, char uplo, lapack_int n,
lapack_complex_float * a, lapack_int lda, lapack_int * ipiv,
lapack_complex_float * work, lapack_int lwork)
Definition at line 36 of file lapacke_chetrf_work.c.
LAPACKE_chetri 👑
lapack_int LAPACKE_chetri (int matrix_layout, char uplo, lapack_int n,
lapack_complex_float * a, lapack_int lda, const lapack_int * ipiv)
Definition at line 36 of file lapacke_chetri.c.
Notice ipiv went const here — she's just reading her pivots, not rewriting them, we love a boundary-setting queen 💅
LAPACKE_chetri2 🌈
lapack_int LAPACKE_chetri2 (int matrix_layout, char uplo, lapack_int n,
lapack_complex_float * a, lapack_int lda, const lapack_int * ipiv)
Definition at line 36 of file lapacke_chetri2.c.
LAPACKE_chetri2_work 🦋
lapack_int LAPACKE_chetri2_work (int matrix_layout, char uplo, lapack_int n,
lapack_complex_float * a, lapack_int lda, const lapack_int * ipiv,
lapack_complex_float * work, lapack_int lwork)
Definition at line 36 of file lapacke_chetri2_work.c.
LAPACKE_chetri2x 💀
lapack_int LAPACKE_chetri2x (int matrix_layout, char uplo, lapack_int n,
lapack_complex_float * a, lapack_int lda, const lapack_int * ipiv,
lapack_int nb)
Definition at line 36 of file lapacke_chetri2x.c.
The x version slides in an nb argument — no lwork in sight on this one, that's her whole vibe.
LAPACKE_chetri2x_work 🌸
lapack_int LAPACKE_chetri2x_work (int matrix_layout, char uplo, lapack_int
n, lapack_complex_float * a, lapack_int lda, const lapack_int * ipiv,
lapack_complex_float * work, lapack_int nb)
Definition at line 36 of file lapacke_chetri2x_work.c.
Careful bestie — here nb is the last argument, after work. Not lwork. nb. Don't mix them up, I'm begging 🙈
LAPACKE_chetri_3 ✨
lapack_int LAPACKE_chetri_3 (int matrix_layout, char uplo, lapack_int n,
lapack_complex_float * a, lapack_int lda, const lapack_complex_float *
e, const lapack_int * ipiv)
Definition at line 36 of file lapacke_chetri_3.c.
LAPACKE_chetri_3_work 🎀
lapack_int LAPACKE_chetri_3_work (int matrix_layout, char uplo, lapack_int
n, lapack_complex_float * a, lapack_int lda, const lapack_complex_float
* e, const lapack_int * ipiv, lapack_complex_float * work, lapack_int
lwork)
Definition at line 36 of file lapacke_chetri_3_work.c.
LAPACKE_chetri_work 💜
lapack_int LAPACKE_chetri_work (int matrix_layout, char uplo, lapack_int n,
lapack_complex_float * a, lapack_int lda, const lapack_int * ipiv,
lapack_complex_float * work)
Definition at line 36 of file lapacke_chetri_work.c.
Double-check before you @ me: this _work one takes work but no lwork. That's not a typo on my end, that's genuinely what's written 🫶
LAPACKE_chetrs 🌈
lapack_int LAPACKE_chetrs (int matrix_layout, char uplo, lapack_int n,
lapack_int nrhs, const lapack_complex_float * a, lapack_int lda, const
lapack_int * ipiv, lapack_complex_float * b, lapack_int ldb)
Definition at line 36 of file lapacke_chetrs.c.
LAPACKE_chetrs2 ⭐
lapack_int LAPACKE_chetrs2 (int matrix_layout, char uplo, lapack_int n,
lapack_int nrhs, const lapack_complex_float * a, lapack_int lda, const
lapack_int * ipiv, lapack_complex_float * b, lapack_int ldb)
Definition at line 36 of file lapacke_chetrs2.c.
LAPACKE_chetrs2_work 🔥
lapack_int LAPACKE_chetrs2_work (int matrix_layout, char uplo, lapack_int n,
lapack_int nrhs, const lapack_complex_float * a, lapack_int lda, const
lapack_int * ipiv, lapack_complex_float * b, lapack_int ldb,
lapack_complex_float * work)
Definition at line 36 of file lapacke_chetrs2_work.c.
Again — work shows up, lwork does not. Read the signature, bestie, it's all right there 🌸
LAPACKE_chetrs_3 🦋
lapack_int LAPACKE_chetrs_3 (int matrix_layout, char uplo, lapack_int n,
lapack_int nrhs, const lapack_complex_float * a, lapack_int lda, const
lapack_complex_float * e, const lapack_int * ipiv, lapack_complex_float
* b, lapack_int ldb)
Definition at line 36 of file lapacke_chetrs_3.c.
LAPACKE_chetrs_3_work 💅
lapack_int LAPACKE_chetrs_3_work (int matrix_layout, char uplo, lapack_int
n, lapack_int nrhs, const lapack_complex_float * a, lapack_int lda,
const lapack_complex_float * e, const lapack_int * ipiv,
lapack_complex_float * b, lapack_int ldb)
Definition at line 36 of file lapacke_chetrs_3_work.c.
LAPACKE_chetrs_aa 🎀
lapack_int LAPACKE_chetrs_aa (int matrix_layout, char uplo, lapack_int n,
lapack_int nrhs, const lapack_complex_float * a, lapack_int lda, const
lapack_int * ipiv, lapack_complex_float * b, lapack_int ldb)
Definition at line 36 of file lapacke_chetrs_aa.c.
LAPACKE_chetrs_aa_2stage 👑
lapack_int LAPACKE_chetrs_aa_2stage (int matrix_layout, char uplo,
lapack_int n, lapack_int nrhs, lapack_complex_float * a, lapack_int lda,
lapack_complex_float * tb, lapack_int ltb, lapack_int * ipiv, lapack_int
* ipiv2, lapack_complex_float * b, lapack_int ldb)
Definition at line 36 of file lapacke_chetrs_aa_2stage.c.
Note the non-const-ness of a, tb, ipiv and ipiv2 here — that's different from plain chetrs_aa, and yes, it matters. Copy the signature exactly, do not freelance ✨
LAPACKE_chetrs_aa_2stage_work 💜
lapack_int LAPACKE_chetrs_aa_2stage_work (int matrix_layout, char uplo,
lapack_int n, lapack_int nrhs, lapack_complex_float * a, lapack_int lda,
lapack_complex_float * tb, lapack_int ltb, lapack_int * ipiv, lapack_int
* ipiv2, lapack_complex_float * b, lapack_int ldb)
Definition at line 36 of file lapacke_chetrs_aa_2stage_work.c.
LAPACKE_chetrs_aa_work 🌸
lapack_int LAPACKE_chetrs_aa_work (int matrix_layout, char uplo, lapack_int
n, lapack_int nrhs, const lapack_complex_float * a, lapack_int lda,
const lapack_int * ipiv, lapack_complex_float * b, lapack_int ldb,
lapack_complex_float * work, lapack_int lwork)
Definition at line 36 of file lapacke_chetrs_aa_work.c.
Here lwork is present. Yes, the family is inconsistent, no, we do not get to fix it, we just deal 😭
LAPACKE_chetrs_rook 🔥
lapack_int LAPACKE_chetrs_rook (int matrix_layout, char uplo, lapack_int n,
lapack_int nrhs, const lapack_complex_float * a, lapack_int lda, const
lapack_int * ipiv, lapack_complex_float * b, lapack_int ldb)
Definition at line 36 of file lapacke_chetrs_rook.c.
LAPACKE_chetrs_rook_work ⭐
lapack_int LAPACKE_chetrs_rook_work (int matrix_layout, char uplo,
lapack_int n, lapack_int nrhs, const lapack_complex_float * a,
lapack_int lda, const lapack_int * ipiv, lapack_complex_float * b,
lapack_int ldb)
Definition at line 36 of file lapacke_chetrs_rook_work.c.
LAPACKE_chetrs_work 🫶
lapack_int LAPACKE_chetrs_work (int matrix_layout, char uplo, lapack_int n,
lapack_int nrhs, const lapack_complex_float * a, lapack_int lda, const
lapack_int * ipiv, lapack_complex_float * b, lapack_int ldb)
Definition at line 36 of file lapacke_chetrs_work.c.
LAPACKE_chfrk 🌈
lapack_int LAPACKE_chfrk (int matrix_layout, char transr, char uplo, char
trans, lapack_int n, lapack_int k, float alpha, const
lapack_complex_float * a, lapack_int lda, float beta,
lapack_complex_float * c)
Definition at line 36 of file lapacke_chfrk.c.
Three separate char args here — transr, uplo, trans — plus two float scalars alpha and beta. Count them. Don't shuffle them. I'm serious 💅
LAPACKE_chfrk_work 🦋
lapack_int LAPACKE_chfrk_work (int matrix_layout, char transr, char uplo,
char trans, lapack_int n, lapack_int k, float alpha, const
lapack_complex_float * a, lapack_int lda, float beta,
lapack_complex_float * c)
Definition at line 36 of file lapacke_chfrk_work.c.
LAPACKE_chgeqz 👑
lapack_int LAPACKE_chgeqz (int matrix_layout, char job, char compq, char
compz, lapack_int n, lapack_int ilo, lapack_int ihi,
lapack_complex_float * h, lapack_int ldh, lapack_complex_float * t,
lapack_int ldt, lapack_complex_float * alpha, lapack_complex_float *
beta, lapack_complex_float * q, lapack_int ldq, lapack_complex_float *
z, lapack_int ldz)
Definition at line 36 of file lapacke_chgeqz.c.
This one has it all: three mode chars (job, compq, compz), the ilo/ihi pair, both h and t, both q and z, and every one of them gets their own leading dimension. Main character energy fr fr 🌟
LAPACKE_chgeqz_work 🔥
lapack_int LAPACKE_chgeqz_work (int matrix_layout, char job, char compq,
char compz, lapack_int n, lapack_int ilo, lapack_int ihi,
lapack_complex_float * h, lapack_int ldh, lapack_complex_float * t,
lapack_int ldt, lapack_complex_float * alpha, lapack_complex_float *
beta, lapack_complex_float * q, lapack_int ldq, lapack_complex_float *
z, lapack_int ldz, lapack_complex_float * work, lapack_int lwork, float
* rwork)
Definition at line 36 of file lapacke_chgeqz_work.c.
Heads up — rwork here is float *, not complex, and it's the final argument. Yes, after lwork. Write it in order, bestie 😭
LAPACKE_chpcon 🎀
lapack_int LAPACKE_chpcon (int matrix_layout, char uplo, lapack_int n, const
lapack_complex_float * ap, const lapack_int * ipiv, float anorm, float *
rcond)
Definition at line 36 of file lapacke_chpcon.c.
Packed storage ap, a real anorm going in, and a rcond pointer coming back out. Note who's const and who isn't 🫶
LAPACKE_chpcon_work 💜
lapack_int LAPACKE_chpcon_work (int matrix_layout, char uplo, lapack_int n,
const lapack_complex_float * ap, const lapack_int * ipiv, float anorm,
float * rcond, lapack_complex_float * work)
Definition at line 36 of file lapacke_chpcon_work.c.
Just work. No lwork. I know. I know. 🌸
LAPACKE_chpev ✨
lapack_int LAPACKE_chpev (int matrix_layout, char jobz, char uplo,
lapack_int n, lapack_complex_float * ap, float * w, lapack_complex_float
* z, lapack_int ldz)
Definition at line 36 of file lapacke_chpev.c.
LAPACKE_chpev_work ⭐
lapack_int LAPACKE_chpev_work (int matrix_layout, char jobz, char uplo,
lapack_int n, lapack_complex_float * ap, float * w, lapack_complex_float
* z, lapack_int ldz, lapack_complex_float * work, float * rwork)
Definition at line 36 of file lapacke_chpev_work.c.
LAPACKE_chpevd 🦋
lapack_int LAPACKE_chpevd (int matrix_layout, char jobz, char uplo,
lapack_int n, lapack_complex_float * ap, float * w, lapack_complex_float
* z, lapack_int ldz)
Definition at line 36 of file lapacke_chpevd.c.
LAPACKE_chpevd_work 💅
lapack_int LAPACKE_chpevd_work (int matrix_layout, char jobz, char uplo,
lapack_int n, lapack_complex_float * ap, float * w, lapack_complex_float
* z, lapack_int ldz, lapack_complex_float * work, lapack_int lwork,
float * rwork, lapack_int lrwork, lapack_int * iwork, lapack_int liwork)
Definition at line 36 of file lapacke_chpevd_work.c.
Ok this is the fully-loaded one: work/lwork, rwork/lrwork, and iwork/liwork. Three scratch families, all paired up. The way she ate that argument list 👑🔥
LAPACKE_chpevx 🌈
lapack_int LAPACKE_chpevx (int matrix_layout, char jobz, char range, char
uplo, lapack_int n, lapack_complex_float * ap, float vl, float vu,
lapack_int il, lapack_int iu, float abstol, lapack_int * m, float * w,
lapack_complex_float * z, lapack_int ldz, lapack_int * ifail)
Definition at line 36 of file lapacke_chpevx.c.
Four chars in a row — jobz, range, uplo — wait, that's three chars then uplo is the third, sorry, three: jobz, range, uplo. Then the range bounds vl/vu and il/iu, a real abstol, an output count m, and ifail at the very end. Keep m and ifail as pointers, they're both outputs, don't you dare dereference them in the call 🎀
LAPACKE_chpevx_work
lapack_int LAPACKE_chpevx_work (int matrix_layout, char jobz, char range, char uplo, lapack_int n, lapack_complex_float * ap, float vl, float vu, lapack_int il, lapack_int iu, float abstol, lapack_int * m, float * w, lapack_complex_float * z, lapack_int ldz, lapack_complex_float * work, float * rwork, lapack_int * iwork, lapack_int * ifail)
Definition at line 36 of file lapacke_chpevx_work.c.
okay this one is long — nineteen arguments bestie, count 'em, I'll wait 💅 note the _work energy: you're bringing your own work, rwork, iwork AND ifail to the function. very "I brought snacks for everyone" of you 🫶
LAPACKE_chpgst
lapack_int LAPACKE_chpgst (int matrix_layout, lapack_int itype, char uplo, lapack_int n, lapack_complex_float * ap, const lapack_complex_float * bp)
Definition at line 36 of file lapacke_chpgst.c.
ap is getting rewritten and bp is const so hands off 🫳✨ the itype is a lapack_int here, not a char, don't get it twisted.
LAPACKE_chpgst_work
lapack_int LAPACKE_chpgst_work (int matrix_layout, lapack_int itype, char uplo, lapack_int n, lapack_complex_float * ap, const lapack_complex_float * bp)
Definition at line 36 of file lapacke_chpgst_work.c.
same lineup as its sibling fr fr, just the _work twin. no extra hidden args, we love a consistent icon 👑
LAPACKE_chpgv
lapack_int LAPACKE_chpgv (int matrix_layout, lapack_int itype, char jobz, char uplo, lapack_int n, lapack_complex_float * ap, lapack_complex_float * bp, float * w, lapack_complex_float * z, lapack_int ldz)
Definition at line 36 of file lapacke_chpgv.c.
two chars of personality (jobz, uplo), one itype, and the rest is the party. note w is float * while the matrices are lapack_complex_float — that's not a typo, that's just how she is 💖
LAPACKE_chpgv_work
lapack_int LAPACKE_chpgv_work (int matrix_layout, lapack_int itype, char jobz, char uplo, lapack_int n, lapack_complex_float * ap, lapack_complex_float * bp, float * w, lapack_complex_float * z, lapack_int ldz, lapack_complex_float * work, float * rwork)
Definition at line 36 of file lapacke_chpgv_work.c.
the _work version said "and I'll also take a work and an rwork, thanks" 🎀 two extra args, zero extra shame.
LAPACKE_chpgvd
lapack_int LAPACKE_chpgvd (int matrix_layout, lapack_int itype, char jobz, char uplo, lapack_int n, lapack_complex_float * ap, lapack_complex_float * bp, float * w, lapack_complex_float * z, lapack_int ldz)
Definition at line 36 of file lapacke_chpgvd.c.
look at that — identical arg list to LAPACKE_chpgv, only the name changed (there's a d on the end, iykyk 👀). the _work one is where the size args come out to play.
LAPACKE_chpgvd_work
lapack_int LAPACKE_chpgvd_work (int matrix_layout, lapack_int itype, char jobz, char uplo, lapack_int n, lapack_complex_float * ap, lapack_complex_float * bp, float * w, lapack_complex_float * z, lapack_int ldz, lapack_complex_float * work, lapack_int lwork, float * rwork, lapack_int lrwork, lapack_int * iwork, lapack_int liwork)
Definition at line 36 of file lapacke_chpgvd_work.c.
the whole workspace gang showed up 🌈 work/lwork, rwork/lrwork, iwork/liwork — every buffer got a plus-one and honestly? iconic.
LAPACKE_chpgvx
lapack_int LAPACKE_chpgvx (int matrix_layout, lapack_int itype, char jobz, char range, char uplo, lapack_int n, lapack_complex_float * ap, lapack_complex_float * bp, float vl, float vu, lapack_int il, lapack_int iu, float abstol, lapack_int * m, float * w, lapack_complex_float * z, lapack_int ldz, lapack_int * ifail)
Definition at line 36 of file lapacke_chpgvx.c.
three chars in a trench coat (jobz, range, uplo) plus vl, vu, il, iu, abstol — the whole "which eigenvalues tho" squad is here 💀 and m + ifail are outputs so they're pointers, obviously.
LAPACKE_chpgvx_work
lapack_int LAPACKE_chpgvx_work (int matrix_layout, lapack_int itype, char jobz, char range, char uplo, lapack_int n, lapack_complex_float * ap, lapack_complex_float * bp, float vl, float vu, lapack_int il, lapack_int iu, float abstol, lapack_int * m, float * w, lapack_complex_float * z, lapack_int ldz, lapack_complex_float * work, float * rwork, lapack_int * iwork, lapack_int * ifail)
Definition at line 36 of file lapacke_chpgvx_work.c.
same as above but now you're also carrying work, rwork, and iwork. twenty-two arguments — she ate and left no crumbs, and also left no room on your line 💅
LAPACKE_chprfs
lapack_int LAPACKE_chprfs (int matrix_layout, char uplo, lapack_int n, lapack_int nrhs, const lapack_complex_float * ap, const lapack_complex_float * afp, const lapack_int * ipiv, const lapack_complex_float * b, lapack_int ldb, lapack_complex_float * x, lapack_int ldx, float * ferr, float * berr)
Definition at line 36 of file lapacke_chprfs.c.
count the consts bestie 🔍 ap, afp, ipiv, and b are all read-only vibes; x, ferr, and berr are the ones getting written. respect the boundaries 🫶
LAPACKE_chprfs_work
lapack_int LAPACKE_chprfs_work (int matrix_layout, char uplo, lapack_int n, lapack_int nrhs, const lapack_complex_float * ap, const lapack_complex_float * afp, const lapack_int * ipiv, const lapack_complex_float * b, lapack_int ldb, lapack_complex_float * x, lapack_int ldx, float * ferr, float * berr, lapack_complex_float * work, float * rwork)
Definition at line 36 of file lapacke_chprfs_work.c.
same cast, plus work and rwork tagging along at the end like the last two friends to get in the car 😭
LAPACKE_chpsv
lapack_int LAPACKE_chpsv (int matrix_layout, char uplo, lapack_int n, lapack_int nrhs, lapack_complex_float * ap, lapack_int * ipiv, lapack_complex_float * b, lapack_int ldb)
Definition at line 36 of file lapacke_chpsv.c.
short, sweet, no const anywhere — everything here is fair game to be rewritten ✨ note ipiv is lapack_int *, that's the pivot situation, we love a pivot.
LAPACKE_chpsv_work
lapack_int LAPACKE_chpsv_work (int matrix_layout, char uplo, lapack_int n, lapack_int nrhs, lapack_complex_float * ap, lapack_int * ipiv, lapack_complex_float * b, lapack_int ldb)
Definition at line 36 of file lapacke_chpsv_work.c.
yes queen, the _work variant has the literal same parameter list as the non-_work one. no cap. read it twice if you must 👑🔍
LAPACKE_chpsvx
lapack_int LAPACKE_chpsvx (int matrix_layout, char fact, char uplo, lapack_int n, lapack_int nrhs, const lapack_complex_float * ap, lapack_complex_float * afp, lapack_int * ipiv, const lapack_complex_float * b, lapack_int ldb, lapack_complex_float * x, lapack_int ldx, float * rcond, float * ferr, float * berr)
Definition at line 36 of file lapacke_chpsvx.c.
fact is a char not a boolean, don't @ me 💀 ap and b are const, afp/ipiv/x are not, and rcond, ferr, berr are all float * outputs. the vibes are immaculate and the const-ness is very deliberate.
LAPACKE_chpsvx_work
lapack_int LAPACKE_chpsvx_work (int matrix_layout, char fact, char uplo, lapack_int n, lapack_int nrhs, const lapack_complex_float * ap, lapack_complex_float * afp, lapack_int * ipiv, const lapack_complex_float * b, lapack_int ldb, lapack_complex_float * x, lapack_int ldx, float * rcond, float * ferr, float * berr, lapack_complex_float * work, float * rwork)
Definition at line 36 of file lapacke_chpsvx_work.c.
everything from LAPACKE_chpsvx plus work and rwork 🎀 she's the same girl, she just brought her own memory.
LAPACKE_chptrd
lapack_int LAPACKE_chptrd (int matrix_layout, char uplo, lapack_int n, lapack_complex_float * ap, float * d, float * e, lapack_complex_float * tau)
Definition at line 36 of file lapacke_chptrd.c.
the little trio at the end — d, e, tau — where d and e are float * but tau is lapack_complex_float *. one of these things is not like the others 🦋
LAPACKE_chptrd_work
lapack_int LAPACKE_chptrd_work (int matrix_layout, char uplo, lapack_int n, lapack_complex_float * ap, float * d, float * e, lapack_complex_float * tau)
Definition at line 36 of file lapacke_chptrd_work.c.
identical parameter list to LAPACKE_chptrd, just living in a different .c file. the _work suffix said "same hat" 🤝
LAPACKE_chptrf
lapack_int LAPACKE_chptrf (int matrix_layout, char uplo, lapack_int n, lapack_complex_float * ap, lapack_int * ipiv)
Definition at line 36 of file lapacke_chptrf.c.
five args, that's it, that's the whole function 🎀 uplo tells it which triangle, ipiv is where the pivots land. short and slay.
LAPACKE_chptrf_work
lapack_int LAPACKE_chptrf_work (int matrix_layout, char uplo, lapack_int n, lapack_complex_float * ap, lapack_int * ipiv)
Definition at line 36 of file lapacke_chptrf_work.c.
same five args, zero notes. lapacke_chptrf_work.c on the definition line, in case you needed the receipts 🧾
LAPACKE_chptri
lapack_int LAPACKE_chptri (int matrix_layout, char uplo, lapack_int n, lapack_complex_float * ap, const lapack_int * ipiv)
Definition at line 36 of file lapacke_chptri.c.
plot twist — here ipiv is const lapack_int * 😳 she's reading the pivots, not writing them. very demure, very mindful.
LAPACKE_chptri_work
lapack_int LAPACKE_chptri_work (int matrix_layout, char uplo, lapack_int n, lapack_complex_float * ap, const lapack_int * ipiv, lapack_complex_float * work)
Definition at line 36 of file lapacke_chptri_work.c.
same const lapack_int * ipiv as her sister, but she also takes a lapack_complex_float * work. one extra arg, one extra slay 💅
LAPACKE_chptrs
lapack_int LAPACKE_chptrs (int matrix_layout, char uplo, lapack_int n, lapack_int nrhs, const lapack_complex_float * ap, const lapack_int * ipiv, lapack_complex_float * b, lapack_int ldb)
Definition at line 36 of file lapacke_chptrs.c.
ap and ipiv are const (read-only besties) and b is the one getting the glow-up. nrhs and ldb are just here for the layout math 📐
LAPACKE_chptrs_work
lapack_int LAPACKE_chptrs_work (int matrix_layout, char uplo, lapack_int n, lapack_int nrhs, const lapack_complex_float * ap, const lapack_int * ipiv, lapack_complex_float * b, lapack_int ldb)
Definition at line 36 of file lapacke_chptrs_work.c.
exact same eight parameters as LAPACKE_chptrs — if you clocked that already, gold star ⭐ for you.
LAPACKE_chsein
lapack_int LAPACKE_chsein (int matrix_layout, char job, char eigsrc, char initv, const lapack_logical * select, lapack_int n, const lapack_complex_float * h, lapack_int ldh, lapack_complex_float * w, lapack_complex_float * vl, lapack_int ldvl, lapack_complex_float * vr, lapack_int ldvr, lapack_int mm, lapack_int * m, lapack_int * ifaill, lapack_int * ifailr)
Definition at line 36 of file lapacke_chsein.c.
three chars (job, eigsrc, initv), a const lapack_logical * select, and not one but TWO failure arrays: ifaill and ifailr 🙈 left and right really said "we both need to know if it went badly".
LAPACKE_chsein_work
lapack_int LAPACKE_chsein_work (int matrix_layout, char job, char eigsrc, char initv, const lapack_logical * select, lapack_int n, const lapack_complex_float * h, lapack_int ldh, lapack_complex_float * w, lapack_complex_float * vl, lapack_int ldvl, lapack_complex_float * vr, lapack_int ldvr, lapack_int mm, lapack_int * m, lapack_complex_float * work, float * rwork, lapack_int * ifaill, lapack_int * ifailr)
Definition at line 36 of file lapacke_chsein_work.c.
the _work version slides work and rwork in right before the two ifail pointers — position matters, don't shuffle these, I'm begging 🫶
LAPACKE_chseqr
lapack_int LAPACKE_chseqr (int matrix_layout, char job, char compz, lapack_int n, lapack_int ilo, lapack_int ihi, lapack_complex_float * h, lapack_int ldh, lapack_complex_float * w, lapack_complex_float * z, lapack_int ldz)
Definition at line 36 of file lapacke_chseqr.c.
job and compz are your two char besties, ilo and ihi are lapack_int bookends, and h, w, z are all writable lapack_complex_float *. no const to be found, she trusts you 💖
LAPACKE_chseqr_work
lapack_int LAPACKE_chseqr_work (int matrix_layout, char job, char compz, lapack_int n, lapack_int ilo, lapack_int ihi, lapack_complex_float * h, lapack_int ldh, lapack_complex_float * w, lapack_complex_float * z, lapack_int ldz, lapack_complex_float * work, lapack_int lwork)
Definition at line 36 of file lapacke_chseqr_work.c.
same body, new ending: work plus lwork 🎀 note it's lwork as a lapack_int, not an int — the typedef is doing its thing.
LAPACKE_clacgv
lapack_int LAPACKE_clacgv (lapack_int n, lapack_complex_float * x, lapack_int incx)
Definition at line 36 of file lapacke_clacgv.c.
no matrix_layout!!! 😱 that's right, this one skips it entirely — just n, x, incx. don't go adding a layout arg out of habit, bestie.
LAPACKE_clacgv_work
lapack_int LAPACKE_clacgv_work (lapack_int n, lapack_complex_float * x, lapack_int incx)
Definition at line 36 of file lapacke_clacgv_work.c.
same three args, also no matrix_layout. the _work version said "I too refuse the layout argument" 💀
LAPACKE_clacn2
lapack_int LAPACKE_clacn2 (lapack_int n, lapack_complex_float * v, lapack_complex_float * x, float * est, lapack_int * kase, lapack_int * isave)
Definition at line 36 of file lapacke_clacn2.c.
again, no matrix_layout — just n, v, x, est, kase, isave 🌸 est is float * and kase + isave are lapack_int *. short king.
LAPACKE_clacn2_work
lapack_int LAPACKE_clacn2_work (lapack_int n, lapack_complex_float * v, lapack_complex_float * x, float * est, lapack_int * kase, lapack_int * isave)
Definition at line 36 of file lapacke_clacn2_work.c.
identical to LAPACKE_clacn2, also layout-free 🦋 if you're keeping a spreadsheet of which functions take matrix_layout, yes, you should be.
LAPACKE_clacp2
lapack_int LAPACKE_clacp2 (int matrix_layout, char uplo, lapack_int m, lapack_int n, const float * a, lapack_int lda, lapack_complex_float * b, lapack_int ldb)
Definition at line 36 of file lapacke_clacp2.c.
ooh look, a is a const float * while b is lapack_complex_float * — mixed types in one call, we love a crossover episode ✨ m AND n are both here, it's a rectangle situation.
LAPACKE_clacp2_work
lapack_int LAPACKE_clacp2_work (int matrix_layout, char uplo, lapack_int m, lapack_int n, const float * a, lapack_int lda, lapack_complex_float * b, lapack_int ldb)
Definition at line 36 of file lapacke_clacp2_work.c.
same eight parameters as the non-_work version, const float * a included. consistency is her love language 🫶
LAPACKE_clacpy
lapack_int LAPACKE_clacpy (int matrix_layout, char uplo, lapack_int m, lapack_int n, const lapack_complex_float * a, lapack_int lda, lapack_complex_float * b, lapack_int ldb)
Definition at line 36 of file lapacke_clacpy.c.
here a is const lapack_complex_float * and b is plain lapack_complex_float * — copy energy, source can't be touched, destination gets everything 🎀
LAPACKE_clacpy_work
lapack_int LAPACKE_clacpy_work (int matrix_layout, char uplo, lapack_int m, lapack_int n, const lapack_complex_float * a, lapack_int lda, lapack_complex_float * b, lapack_int ldb)
Definition at line 36 of file lapacke_clacpy_work.c.
amazing, stunning, identical to LAPACKE_clacpy. the _work suffix is basically a vibe, not an extra arg, in this case 💅
LAPACKE_clacrm
lapack_int LAPACKE_clacrm (int matrix_layout, lapack_int m, lapack_int n, const lapack_complex_float * a, lapack_int lda, const float * b, lapack_int ldb, lapack_complex_float * c, lapack_int ldc)
Definition at line 36 of file lapacke_clacrm.c.
no uplo here bestie, she skipped it 😌 but you get THREE pointers on the matrix beat — a (complex, const), b (float, const), c (complex, writable) — and lda, ldb, ldc for each. organized queen.
LAPACKE_clacrm_work
lapack_int LAPACKE_clacrm_work (int matrix_layout, lapack_int m, lapack_int n, const lapack_complex_float * a, lapack_int lda, const float * b, lapack_int ldb, lapack_complex_float * c, lapack_int ldc, float * work)
Definition at line 36 of file lapacke_clacrm_work.c.
same as LAPACKE_clacrm plus a float * work at the very end. note it's float *, not complex — keep that detail, it's load-bearing 🧚
LAPACKE_clag2z
lapack_int LAPACKE_clag2z (int matrix_layout, lapack_int m, lapack_int n, const lapack_complex_float * sa, lapack_int ldsa, lapack_complex_double * a, lapack_int lda)
Definition at line 36 of file lapacke_clag2z.c.
single precision in, double precision out 🌈 sa is const lapack_complex_float * with ldsa, a is lapack_complex_double * with lda. notice the s prefix on the source and the different ld names — do not mix them up, I'm serious 🙈
LAPACKE_clag2z_work
lapack_int LAPACKE_clag2z_work (int matrix_layout, lapack_int m, lapack_int n, const lapack_complex_float * sa, lapack_int ldsa, lapack_complex_double * a, lapack_int lda)
Definition at line 36 of file lapacke_clag2z_work.c.
same seven args, same float→double glow-up, just a different file. lapack_complex_double * a stays double, no downgrades allowed 💜
LAPACKE_clagge
lapack_int LAPACKE_clagge (int matrix_layout, lapack_int m, lapack_int n, lapack_int kl, lapack_int ku, const float * d, lapack_complex_float * a, lapack_int lda, lapack_int * iseed)
Definition at line 36 of file lapacke_clagge.c.
last one in this batch and she's a cutie 🍓 kl and ku are lapack_int (not chars!), d is const float *, a is writable complex, and iseed is a lapack_int * because seeds gotta change. periodt.
LAPACKE_clagge_work 🦋
lapack_int LAPACKE_clagge_work (int matrix_layout, lapack_int m, lapack_int
n, lapack_int kl, lapack_int ku, const float * d, lapack_complex_float *
a, lapack_int lda, lapack_int * iseed, lapack_complex_float * work)
Definition at line 36 of file lapacke_clagge_work.c.
LAPACKE_claghe ✨
lapack_int LAPACKE_claghe (int matrix_layout, lapack_int n, lapack_int k,
const float * d, lapack_complex_float * a, lapack_int lda, lapack_int *
iseed)
Definition at line 36 of file lapacke_claghe.c.
LAPACKE_claghe_work 💖
lapack_int LAPACKE_claghe_work (int matrix_layout, lapack_int n, lapack_int
k, const float * d, lapack_complex_float * a, lapack_int lda, lapack_int
* iseed, lapack_complex_float * work)
Definition at line 36 of file lapacke_claghe_work.c.
LAPACKE_clagsy 🎀
lapack_int LAPACKE_clagsy (int matrix_layout, lapack_int n, lapack_int k,
const float * d, lapack_complex_float * a, lapack_int lda, lapack_int *
iseed)
Definition at line 36 of file lapacke_clagsy.c.
LAPACKE_clagsy_work 🌸
lapack_int LAPACKE_clagsy_work (int matrix_layout, lapack_int n, lapack_int
k, const float * d, lapack_complex_float * a, lapack_int lda, lapack_int
* iseed, lapack_complex_float * work)
Definition at line 36 of file lapacke_clagsy_work.c.
Okay bestie, now we hit the ones that literally return something other than lapack_int — the norm girlies ✨ they hand you a float back. Iconic behaviour tbh.
LAPACKE_clange 🔥
float LAPACKE_clange (int matrix_layout, char norm, lapack_int m, lapack_int
n, const lapack_complex_float * a, lapack_int lda)
Definition at line 36 of file lapacke_clange.c.
LAPACKE_clange_work 🔥
float LAPACKE_clange_work (int matrix_layout, char norm, lapack_int m,
lapack_int n, const lapack_complex_float * a, lapack_int lda, float *
work)
Definition at line 36 of file lapacke_clange_work.c.
LAPACKE_clanhe 💜
float LAPACKE_clanhe (int matrix_layout, char norm, char uplo, lapack_int n,
const lapack_complex_float * a, lapack_int lda)
Definition at line 36 of file lapacke_clanhe.c.
LAPACKE_clanhe_work 💜
float LAPACKE_clanhe_work (int matrix_layout, char norm, char uplo,
lapack_int n, const lapack_complex_float * a, lapack_int lda, float *
work)
Definition at line 36 of file lapacke_clanhe_work.c.
LAPACKE_clansy 🌈
float LAPACKE_clansy (int matrix_layout, char norm, char uplo, lapack_int n,
const lapack_complex_float * a, lapack_int lda)
Definition at line 36 of file lapacke_clansy.c.
LAPACKE_clansy_work 🌈
float LAPACKE_clansy_work (int matrix_layout, char norm, char uplo,
lapack_int n, const lapack_complex_float * a, lapack_int lda, float *
work)
Definition at line 36 of file lapacke_clansy_work.c.
LAPACKE_clantr ⭐ — this one's got an extra char diag in the mix, she's high-maintenance and we respect it.
float LAPACKE_clantr (int matrix_layout, char norm, char uplo, char diag,
lapack_int m, lapack_int n, const lapack_complex_float * a, lapack_int
lda)
Definition at line 36 of file lapacke_clantr.c.
LAPACKE_clantr_work ⭐
float LAPACKE_clantr_work (int matrix_layout, char norm, char uplo, char
diag, lapack_int m, lapack_int n, const lapack_complex_float * a,
lapack_int lda, float * work)
Definition at line 36 of file lapacke_clantr_work.c.
ngl the_worktwins are everywhere and honestly? consistency slay 🫶 same params, just with the extraworkarray handed to you.
LAPACKE_clapmr 🦋
lapack_int LAPACKE_clapmr (int matrix_layout, lapack_logical forwrd,
lapack_int m, lapack_int n, lapack_complex_float * x, lapack_int ldx,
lapack_int * k)
Definition at line 36 of file lapacke_clapmr.c.
LAPACKE_clapmr_work 🦋
lapack_int LAPACKE_clapmr_work (int matrix_layout, lapack_logical forwrd,
lapack_int m, lapack_int n, lapack_complex_float * x, lapack_int ldx,
lapack_int * k)
Definition at line 36 of file lapacke_clapmr_work.c.
LAPACKE_clapmt 🌸
lapack_int LAPACKE_clapmt (int matrix_layout, lapack_logical forwrd,
lapack_int m, lapack_int n, lapack_complex_float * x, lapack_int ldx,
lapack_int * k)
Definition at line 36 of file lapacke_clapmt.c.
LAPACKE_clapmt_work 🌸
lapack_int LAPACKE_clapmt_work (int matrix_layout, lapack_logical forwrd,
lapack_int m, lapack_int n, lapack_complex_float * x, lapack_int ldx,
lapack_int * k)
Definition at line 36 of file lapacke_clapmt_work.c.
LAPACKE_clarcm 👑
lapack_int LAPACKE_clarcm (int matrix_layout, lapack_int m, lapack_int n,
const float * a, lapack_int lda, const lapack_complex_float * b,
lapack_int ldb, lapack_complex_float * c, lapack_int ldc)
Definition at line 36 of file lapacke_clarcm.c.
LAPACKE_clarcm_work 👑
lapack_int LAPACKE_clarcm_work (int matrix_layout, lapack_int m, lapack_int
n, const float * a, lapack_int lda, const lapack_complex_float * b,
lapack_int ldb, lapack_complex_float * c, lapack_int ldc, float * work)
Definition at line 36 of file lapacke_clarcm_work.c.
LAPACKE_clarfb 💅 — look at all these char flags, she's giving options.
lapack_int LAPACKE_clarfb (int matrix_layout, char side, char trans, char
direct, char storev, lapack_int m, lapack_int n, lapack_int k, const
lapack_complex_float * v, lapack_int ldv, const lapack_complex_float *
t, lapack_int ldt, lapack_complex_float * c, lapack_int ldc)
Definition at line 36 of file lapacke_clarfb.c.
LAPACKE_clarfb_work 💅 — same energy plus work AND ldwork, double trouble fr fr.
lapack_int LAPACKE_clarfb_work (int matrix_layout, char side, char trans,
char direct, char storev, lapack_int m, lapack_int n, lapack_int k,
const lapack_complex_float * v, lapack_int ldv, const
lapack_complex_float * t, lapack_int ldt, lapack_complex_float * c,
lapack_int ldc, lapack_complex_float * work, lapack_int ldwork)
Definition at line 36 of file lapacke_clarfb_work.c.
LAPACKE_clarfg 🎀 — no matrix_layout here bestie, she's built different (no layout param, just vibes).
lapack_int LAPACKE_clarfg (lapack_int n, lapack_complex_float * alpha,
lapack_complex_float * x, lapack_int incx, lapack_complex_float * tau)
Definition at line 36 of file lapacke_clarfg.c.
LAPACKE_clarfg_work 🎀
lapack_int LAPACKE_clarfg_work (lapack_int n, lapack_complex_float * alpha,
lapack_complex_float * x, lapack_int incx, lapack_complex_float * tau)
Definition at line 36 of file lapacke_clarfg_work.c.
LAPACKE_clarft 🦋
lapack_int LAPACKE_clarft (int matrix_layout, char direct, char storev,
lapack_int n, lapack_int k, const lapack_complex_float * v, lapack_int
ldv, const lapack_complex_float * tau, lapack_complex_float * t,
lapack_int ldt)
Definition at line 36 of file lapacke_clarft.c.
LAPACKE_clarft_work 🦋
lapack_int LAPACKE_clarft_work (int matrix_layout, char direct, char storev,
lapack_int n, lapack_int k, const lapack_complex_float * v, lapack_int
ldv, const lapack_complex_float * tau, lapack_complex_float * t,
lapack_int ldt)
Definition at line 36 of file lapacke_clarft_work.c.
LAPACKE_clarfx ✨ — careful, tau here is passed by value, not as a pointer. Character development.
lapack_int LAPACKE_clarfx (int matrix_layout, char side, lapack_int m,
lapack_int n, const lapack_complex_float * v, lapack_complex_float tau,
lapack_complex_float * c, lapack_int ldc, lapack_complex_float * work)
Definition at line 36 of file lapacke_clarfx.c.
LAPACKE_clarfx_work ✨
lapack_int LAPACKE_clarfx_work (int matrix_layout, char side, lapack_int m,
lapack_int n, const lapack_complex_float * v, lapack_complex_float tau,
lapack_complex_float * c, lapack_int ldc, lapack_complex_float * work)
Definition at line 36 of file lapacke_clarfx_work.c.
LAPACKE_clarnv 🍓 — again no matrix_layout, she's a free spirit.
lapack_int LAPACKE_clarnv (lapack_int idist, lapack_int * iseed, lapack_int
n, lapack_complex_float * x)
Definition at line 36 of file lapacke_clarnv.c.
LAPACKE_clarnv_work 🍓
lapack_int LAPACKE_clarnv_work (lapack_int idist, lapack_int * iseed,
lapack_int n, lapack_complex_float * x)
Definition at line 36 of file lapacke_clarnv_work.c.
LAPACKE_clascl 💜
lapack_int LAPACKE_clascl (int matrix_layout, char type, lapack_int kl,
lapack_int ku, float cfrom, float cto, lapack_int m, lapack_int n,
lapack_complex_float * a, lapack_int lda)
Definition at line 36 of file lapacke_clascl.c.
LAPACKE_clascl_work 💜
lapack_int LAPACKE_clascl_work (int matrix_layout, char type, lapack_int kl,
lapack_int ku, float cfrom, float cto, lapack_int m, lapack_int n,
lapack_complex_float * a, lapack_int lda)
Definition at line 36 of file lapacke_clascl_work.c.
LAPACKE_claset 🧚 — alpha and beta passed by value, cute little scalars.
lapack_int LAPACKE_claset (int matrix_layout, char uplo, lapack_int m,
lapack_int n, lapack_complex_float alpha, lapack_complex_float beta,
lapack_complex_float * a, lapack_int lda)
Definition at line 36 of file lapacke_claset.c.
LAPACKE_claset_work 🧚
lapack_int LAPACKE_claset_work (int matrix_layout, char uplo, lapack_int m,
lapack_int n, lapack_complex_float alpha, lapack_complex_float beta,
lapack_complex_float * a, lapack_int lda)
Definition at line 36 of file lapacke_claset_work.c.
LAPACKE_classq 🌟 — no matrix_layout gang again, and she returns lapack_int while filling in scale and sumsq for you.
lapack_int LAPACKE_classq (lapack_int n, lapack_complex_float * x,
lapack_int incx, float * scale, float * sumsq)
Definition at line 36 of file lapacke_classq.c.
LAPACKE_classq_work 🌟
lapack_int LAPACKE_classq_work (lapack_int n, lapack_complex_float * x,
lapack_int incx, float * scale, float * sumsq)
Definition at line 36 of file lapacke_classq_work.c.
LAPACKE_claswp 🔥
lapack_int LAPACKE_claswp (int matrix_layout, lapack_int n,
lapack_complex_float * a, lapack_int lda, lapack_int k1, lapack_int k2,
const lapack_int * ipiv, lapack_int incx)
Definition at line 36 of file lapacke_claswp.c.
LAPACKE_claswp_work 🔥
lapack_int LAPACKE_claswp_work (int matrix_layout, lapack_int n,
lapack_complex_float * a, lapack_int lda, lapack_int k1, lapack_int k2,
const lapack_int * ipiv, lapack_int incx)
Definition at line 36 of file lapacke_claswp_work.c.
LAPACKE_clatms 👑 — ma'am this parameter list is a whole journey, count them if you dare.
lapack_int LAPACKE_clatms (int matrix_layout, lapack_int m, lapack_int n,
char dist, lapack_int * iseed, char sym, float * d, lapack_int mode,
float cond, float dmax, lapack_int kl, lapack_int ku, char pack,
lapack_complex_float * a, lapack_int lda)
Definition at line 36 of file lapacke_clatms.c.
LAPACKE_clatms_work 👑 — same marathon of params, plus the work array at the end. Hydrate before calling.
lapack_int LAPACKE_clatms_work (int matrix_layout, lapack_int m, lapack_int
n, char dist, lapack_int * iseed, char sym, float * d, lapack_int mode,
float cond, float dmax, lapack_int kl, lapack_int ku, char pack,
lapack_complex_float * a, lapack_int lda, lapack_complex_float * work)
Definition at line 36 of file lapacke_clatms_work.c.
LAPACKE_clauum 💖 — short, sweet, three params and a dream.
lapack_int LAPACKE_clauum (int matrix_layout, char uplo, lapack_int n,
lapack_complex_float * a, lapack_int lda)
Definition at line 36 of file lapacke_clauum.c.
LAPACKE_clauum_work 💖
lapack_int LAPACKE_clauum_work (int matrix_layout, char uplo, lapack_int n,
lapack_complex_float * a, lapack_int lda)
Definition at line 36 of file lapacke_clauum_work.c.
And now we slide into the cpb* era of the alphabet, banded-matrix girlies rise up 🫶 notice how they've got kd (band width bestie) hanging out in every signature from here on.
LAPACKE_cpbcon 🦋
lapack_int LAPACKE_cpbcon (int matrix_layout, char uplo, lapack_int n,
lapack_int kd, const lapack_complex_float * ab, lapack_int ldab, float
anorm, float * rcond)
Definition at line 36 of file lapacke_cpbcon.c.
LAPACKE_cpbcon_work 🦋 — she's got BOTH work and rwork, a true overachiever.
lapack_int LAPACKE_cpbcon_work (int matrix_layout, char uplo, lapack_int n,
lapack_int kd, const lapack_complex_float * ab, lapack_int ldab, float
anorm, float * rcond, lapack_complex_float * work, float * rwork)
Definition at line 36 of file lapacke_cpbcon_work.c.
LAPACKE_cpbequ 🌈
lapack_int LAPACKE_cpbequ (int matrix_layout, char uplo, lapack_int n,
lapack_int kd, const lapack_complex_float * ab, lapack_int ldab, float *
s, float * scond, float * amax)
Definition at line 36 of file lapacke_cpbequ.c.
LAPACKE_cpbequ_work 🌈
lapack_int LAPACKE_cpbequ_work (int matrix_layout, char uplo, lapack_int n,
lapack_int kd, const lapack_complex_float * ab, lapack_int ldab, float *
s, float * scond, float * amax)
Definition at line 36 of file lapacke_cpbequ_work.c.
LAPACKE_cpbrfs 💀 — okay this one has so many pointers, ab AND afb AND b AND x, plus ferr and berr on the way out. She's giving full ensemble cast.
lapack_int LAPACKE_cpbrfs (int matrix_layout, char uplo, lapack_int n,
lapack_int kd, lapack_int nrhs, const lapack_complex_float * ab,
lapack_int ldab, const lapack_complex_float * afb, lapack_int ldafb,
const lapack_complex_float * b, lapack_int ldb, lapack_complex_float *
x, lapack_int ldx, float * ferr, float * berr)
Definition at line 36 of file lapacke_cpbrfs.c.
…and we're not even done with the cpb* besties yet, hold that thought 💅
🫶 LAPACKE_cpbrfs_work
lapack_int LAPACKE_cpbrfs_work (int matrix_layout, char uplo, lapack_int n,
lapack_int kd, lapack_int nrhs, const lapack_complex_float * ab,
lapack_int ldab, const lapack_complex_float * afb, lapack_int ldafb,
const lapack_complex_float * b, lapack_int ldb, lapack_complex_float *
x, lapack_int ldx, float * ferr, float * berr, lapack_complex_float *
work, float * rwork)
Definition at line 36 of file lapacke_cpbrfs_work.c.
✨ LAPACKE_cpbstf
lapack_int LAPACKE_cpbstf (int matrix_layout, char uplo, lapack_int n,
lapack_int kb, lapack_complex_float * bb, lapack_int ldbb)
Definition at line 36 of file lapacke_cpbstf.c.
✨ LAPACKE_cpbstf_work
lapack_int LAPACKE_cpbstf_work (int matrix_layout, char uplo, lapack_int n,
lapack_int kb, lapack_complex_float * bb, lapack_int ldbb)
Definition at line 36 of file lapacke_cpbstf_work.c.
💅 LAPACKE_cpbsv
lapack_int LAPACKE_cpbsv (int matrix_layout, char uplo, lapack_int n,
lapack_int kd, lapack_int nrhs, lapack_complex_float * ab, lapack_int
ldab, lapack_complex_float * b, lapack_int ldb)
Definition at line 36 of file lapacke_cpbsv.c.
💅 LAPACKE_cpbsv_work
lapack_int LAPACKE_cpbsv_work (int matrix_layout, char uplo, lapack_int n,
lapack_int kd, lapack_int nrhs, lapack_complex_float * ab, lapack_int
ldab, lapack_complex_float * b, lapack_int ldb)
Definition at line 36 of file lapacke_cpbsv_work.c.
🌸 LAPACKE_cpbsvx
lapack_int LAPACKE_cpbsvx (int matrix_layout, char fact, char uplo,
lapack_int n, lapack_int kd, lapack_int nrhs, lapack_complex_float * ab,
lapack_int ldab, lapack_complex_float * afb, lapack_int ldafb, char *
equed, float * s, lapack_complex_float * b, lapack_int ldb,
lapack_complex_float * x, lapack_int ldx, float * rcond, float * ferr,
float * berr)
Definition at line 36 of file lapacke_cpbsvx.c.
🌸 LAPACKE_cpbsvx_work
lapack_int LAPACKE_cpbsvx_work (int matrix_layout, char fact, char uplo,
lapack_int n, lapack_int kd, lapack_int nrhs, lapack_complex_float * ab,
lapack_int ldab, lapack_complex_float * afb, lapack_int ldafb, char *
equed, float * s, lapack_complex_float * b, lapack_int ldb,
lapack_complex_float * x, lapack_int ldx, float * rcond, float * ferr,
float * berr, lapack_complex_float * work, float * rwork)
Definition at line 36 of file lapacke_cpbsvx_work.c.
🦋 LAPACKE_cpbtrf
lapack_int LAPACKE_cpbtrf (int matrix_layout, char uplo, lapack_int n,
lapack_int kd, lapack_complex_float * ab, lapack_int ldab)
Definition at line 36 of file lapacke_cpbtrf.c.
🦋 LAPACKE_cpbtrf_work
lapack_int LAPACKE_cpbtrf_work (int matrix_layout, char uplo, lapack_int n,
lapack_int kd, lapack_complex_float * ab, lapack_int ldab)
Definition at line 36 of file lapacke_cpbtrf_work.c.
🎀 LAPACKE_cpbtrs
lapack_int LAPACKE_cpbtrs (int matrix_layout, char uplo, lapack_int n,
lapack_int kd, lapack_int nrhs, const lapack_complex_float * ab,
lapack_int ldab, lapack_complex_float * b, lapack_int ldb)
Definition at line 36 of file lapacke_cpbtrs.c.
🎀 LAPACKE_cpbtrs_work
lapack_int LAPACKE_cpbtrs_work (int matrix_layout, char uplo, lapack_int n,
lapack_int kd, lapack_int nrhs, const lapack_complex_float * ab,
lapack_int ldab, lapack_complex_float * b, lapack_int ldb)
Definition at line 36 of file lapacke_cpbtrs_work.c.
🧚 LAPACKE_cpftrf
lapack_int LAPACKE_cpftrf (int matrix_layout, char transr, char uplo,
lapack_int n, lapack_complex_float * a)
Definition at line 36 of file lapacke_cpftrf.c.
🧚 LAPACKE_cpftrf_work
lapack_int LAPACKE_cpftrf_work (int matrix_layout, char transr, char uplo,
lapack_int n, lapack_complex_float * a)
Definition at line 36 of file lapacke_cpftrf_work.c.
🌈 LAPACKE_cpftri
lapack_int LAPACKE_cpftri (int matrix_layout, char transr, char uplo,
lapack_int n, lapack_complex_float * a)
Definition at line 36 of file lapacke_cpftri.c.
🌈 LAPACKE_cpftri_work
lapack_int LAPACKE_cpftri_work (int matrix_layout, char transr, char uplo,
lapack_int n, lapack_complex_float * a)
Definition at line 36 of file lapacke_cpftri_work.c.
🍓 LAPACKE_cpftrs
lapack_int LAPACKE_cpftrs (int matrix_layout, char transr, char uplo,
lapack_int n, lapack_int nrhs, const lapack_complex_float * a,
lapack_complex_float * b, lapack_int ldb)
Definition at line 36 of file lapacke_cpftrs.c.
🍓 LAPACKE_cpftrs_work
lapack_int LAPACKE_cpftrs_work (int matrix_layout, char transr, char uplo,
lapack_int n, lapack_int nrhs, const lapack_complex_float * a,
lapack_complex_float * b, lapack_int ldb)
Definition at line 36 of file lapacke_cpftrs_work.c.
👑 LAPACKE_cpocon
lapack_int LAPACKE_cpocon (int matrix_layout, char uplo, lapack_int n, const
lapack_complex_float * a, lapack_int lda, float anorm, float * rcond)
Definition at line 36 of file lapacke_cpocon.c.
👑 LAPACKE_cpocon_work
lapack_int LAPACKE_cpocon_work (int matrix_layout, char uplo, lapack_int n,
const lapack_complex_float * a, lapack_int lda, float anorm, float *
rcond, lapack_complex_float * work, float * rwork)
Definition at line 36 of file lapacke_cpocon_work.c.
⭐ LAPACKE_cpoequ
lapack_int LAPACKE_cpoequ (int matrix_layout, lapack_int n, const
lapack_complex_float * a, lapack_int lda, float * s, float * scond,
float * amax)
Definition at line 36 of file lapacke_cpoequ.c.
⭐ LAPACKE_cpoequ_work
lapack_int LAPACKE_cpoequ_work (int matrix_layout, lapack_int n, const
lapack_complex_float * a, lapack_int lda, float * s, float * scond,
float * amax)
Definition at line 36 of file lapacke_cpoequ_work.c.
💜 LAPACKE_cpoequb
lapack_int LAPACKE_cpoequb (int matrix_layout, lapack_int n, const
lapack_complex_float * a, lapack_int lda, float * s, float * scond,
float * amax)
Definition at line 36 of file lapacke_cpoequb.c.
Same shape asLAPACKE_cpoequabove, if you clocked it — this one's thebvariant, bestie. 💅
💜 LAPACKE_cpoequb_work
lapack_int LAPACKE_cpoequb_work (int matrix_layout, lapack_int n, const
lapack_complex_float * a, lapack_int lda, float * s, float * scond,
float * amax)
Definition at line 36 of file lapacke_cpoequb_work.c.
🔥 LAPACKE_cporfs
lapack_int LAPACKE_cporfs (int matrix_layout, char uplo, lapack_int n,
lapack_int nrhs, const lapack_complex_float * a, lapack_int lda, const
lapack_complex_float * af, lapack_int ldaf, const lapack_complex_float *
b, lapack_int ldb, lapack_complex_float * x, lapack_int ldx, float *
ferr, float * berr)
Definition at line 36 of file lapacke_cporfs.c.
🔥 LAPACKE_cporfs_work
lapack_int LAPACKE_cporfs_work (int matrix_layout, char uplo, lapack_int n,
lapack_int nrhs, const lapack_complex_float * a, lapack_int lda, const
lapack_complex_float * af, lapack_int ldaf, const lapack_complex_float *
b, lapack_int ldb, lapack_complex_float * x, lapack_int ldx, float *
ferr, float * berr, lapack_complex_float * work, float * rwork)
Definition at line 36 of file lapacke_cporfs_work.c.
💀 LAPACKE_cporfsx
lapack_int LAPACKE_cporfsx (int matrix_layout, char uplo, char equed,
lapack_int n, lapack_int nrhs, const lapack_complex_float * a,
lapack_int lda, const lapack_complex_float * af, lapack_int ldaf, const
float * s, const lapack_complex_float * b, lapack_int ldb,
lapack_complex_float * x, lapack_int ldx, float * rcond, float * berr,
lapack_int n_err_bnds, float * err_bnds_norm, float * err_bnds_comp,
lapack_int nparams, float * params)
Definition at line 36 of file lapacke_cporfsx.c.
The x on the end is giving "extra credit assignment" — look at all those error-bound args. 😭
💀 LAPACKE_cporfsx_work
lapack_int LAPACKE_cporfsx_work (int matrix_layout, char uplo, char equed,
lapack_int n, lapack_int nrhs, const lapack_complex_float * a,
lapack_int lda, const lapack_complex_float * af, lapack_int ldaf, const
float * s, const lapack_complex_float * b, lapack_int ldb,
lapack_complex_float * x, lapack_int ldx, float * rcond, float * berr,
lapack_int n_err_bnds, float * err_bnds_norm, float * err_bnds_comp,
lapack_int nparams, float * params, lapack_complex_float * work, float *
rwork)
Definition at line 36 of file lapacke_cporfsx_work.c.
🫶 LAPACKE_cposv
lapack_int LAPACKE_cposv (int matrix_layout, char uplo, lapack_int n,
lapack_int nrhs, lapack_complex_float * a, lapack_int lda,
lapack_complex_float * b, lapack_int ldb)
Definition at line 36 of file lapacke_cposv.c.
🫶 LAPACKE_cposv_work
lapack_int LAPACKE_cposv_work (int matrix_layout, char uplo, lapack_int n,
lapack_int nrhs, lapack_complex_float * a, lapack_int lda,
lapack_complex_float * b, lapack_int ldb)
Definition at line 36 of file lapacke_cposv_work.c.
🌸 LAPACKE_cposvx
lapack_int LAPACKE_cposvx (int matrix_layout, char fact, char uplo,
lapack_int n, lapack_int nrhs, lapack_complex_float * a, lapack_int lda,
lapack_complex_float * af, lapack_int ldaf, char * equed, float * s,
lapack_complex_float * b, lapack_int ldb, lapack_complex_float * x,
lapack_int ldx, float * rcond, float * ferr, float * berr)
Definition at line 36 of file lapacke_cposvx.c.
🌸 LAPACKE_cposvx_work
lapack_int LAPACKE_cposvx_work (int matrix_layout, char fact, char uplo,
lapack_int n, lapack_int nrhs, lapack_complex_float * a, lapack_int lda,
lapack_complex_float * af, lapack_int ldaf, char * equed, float * s,
lapack_complex_float * b, lapack_int ldb, lapack_complex_float * x,
lapack_int ldx, float * rcond, float * ferr, float * berr,
lapack_complex_float * work, float * rwork)
Definition at line 36 of file lapacke_cposvx_work.c.
🎀 LAPACKE_cposvxx
lapack_int LAPACKE_cposvxx (int matrix_layout, char fact, char uplo,
lapack_int n, lapack_int nrhs, lapack_complex_float * a, lapack_int lda,
lapack_complex_float * af, lapack_int ldaf, char * equed, float * s,
lapack_complex_float * b, lapack_int ldb, lapack_complex_float * x,
lapack_int ldx, float * rcond, float * rpvgrw, float * berr, lapack_int
n_err_bnds, float * err_bnds_norm, float * err_bnds_comp, lapack_int
nparams, float * params)
Definition at line 36 of file lapacke_cposvxx.c.
Doublexenergy, double the args. Noterpvgrwsitting there being all mysterious. 👑
🎀 LAPACKE_cposvxx_work
lapack_int LAPACKE_cposvxx_work (int matrix_layout, char fact, char uplo,
lapack_int n, lapack_int nrhs, lapack_complex_float * a, lapack_int lda,
lapack_complex_float * af, lapack_int ldaf, char * equed, float * s,
lapack_complex_float * b, lapack_int ldb, lapack_complex_float * x,
lapack_int ldx, float * rcond, float * rpvgrw, float * berr, lapack_int
n_err_bnds, float * err_bnds_norm, float * err_bnds_comp, lapack_int
nparams, float * params, lapack_complex_float * work, float * rwork)
Definition at line 36 of file lapacke_cposvxx_work.c.
🦋 LAPACKE_cpotrf
lapack_int LAPACKE_cpotrf (int matrix_layout, char uplo, lapack_int n,
lapack_complex_float * a, lapack_int lda)
Definition at line 36 of file lapacke_cpotrf.c.
🦋 LAPACKE_cpotrf2
lapack_int LAPACKE_cpotrf2 (int matrix_layout, char uplo, lapack_int n,
lapack_complex_float * a, lapack_int lda)
Definition at line 36 of file lapacke_cpotrf2.c.
🦋 LAPACKE_cpotrf2_work
lapack_int LAPACKE_cpotrf2_work (int matrix_layout, char uplo, lapack_int n,
lapack_complex_float * a, lapack_int lda)
Definition at line 36 of file lapacke_cpotrf2_work.c.
🦋 LAPACKE_cpotrf_work
lapack_int LAPACKE_cpotrf_work (int matrix_layout, char uplo, lapack_int n,
lapack_complex_float * a, lapack_int lda)
Definition at line 36 of file lapacke_cpotrf_work.c.
⭐ LAPACKE_cpotri
lapack_int LAPACKE_cpotri (int matrix_layout, char uplo, lapack_int n,
lapack_complex_float * a, lapack_int lda)
Definition at line 36 of file lapacke_cpotri.c.
⭐ LAPACKE_cpotri_work
lapack_int LAPACKE_cpotri_work (int matrix_layout, char uplo, lapack_int n,
lapack_complex_float * a, lapack_int lda)
Definition at line 36 of file lapacke_cpotri_work.c.
💜 LAPACKE_cpotrs
lapack_int LAPACKE_cpotrs (int matrix_layout, char uplo, lapack_int n,
lapack_int nrhs, const lapack_complex_float * a, lapack_int lda,
lapack_complex_float * b, lapack_int ldb)
Definition at line 36 of file lapacke_cpotrs.c.
okay bestie, we're back in the function lineup and the cp* / cs* girlies are all here serving signatures exactly as they came 💅✨ no cap, every single one is staying.
LAPACKE_cpotrs_work 🎀
lapack_int LAPACKE_cpotrs_work (int matrix_layout, char uplo, lapack_int n,
lapack_int nrhs, const lapack_complex_float * a, lapack_int lda,
lapack_complex_float * b, lapack_int ldb)
Definition at line 36 of file lapacke_cpotrs_work.c.
LAPACKE_cppcon 🌸
lapack_int LAPACKE_cppcon (int matrix_layout, char uplo, lapack_int n, const
lapack_complex_float * ap, float anorm, float * rcond)
Definition at line 36 of file lapacke_cppcon.c.
LAPACKE_cppcon_work 🦋
lapack_int LAPACKE_cppcon_work (int matrix_layout, char uplo, lapack_int n,
const lapack_complex_float * ap, float anorm, float * rcond,
lapack_complex_float * work, float * rwork)
Definition at line 36 of file lapacke_cppcon_work.c.
LAPACKE_cppequ ⭐
lapack_int LAPACKE_cppequ (int matrix_layout, char uplo, lapack_int n, const
lapack_complex_float * ap, float * s, float * scond, float * amax)
Definition at line 36 of file lapacke_cppequ.c.
LAPACKE_cppequ_work 💖
lapack_int LAPACKE_cppequ_work (int matrix_layout, char uplo, lapack_int n,
const lapack_complex_float * ap, float * s, float * scond, float * amax)
Definition at line 36 of file lapacke_cppequ_work.c.
LAPACKE_cpprfs 🌈
lapack_int LAPACKE_cpprfs (int matrix_layout, char uplo, lapack_int n,
lapack_int nrhs, const lapack_complex_float * ap, const
lapack_complex_float * afp, const lapack_complex_float * b, lapack_int
ldb, lapack_complex_float * x, lapack_int ldx, float * ferr, float *
berr)
Definition at line 36 of file lapacke_cpprfs.c.
LAPACKE_cpprfs_work 💜
lapack_int LAPACKE_cpprfs_work (int matrix_layout, char uplo, lapack_int n,
lapack_int nrhs, const lapack_complex_float * ap, const
lapack_complex_float * afp, const lapack_complex_float * b, lapack_int
ldb, lapack_complex_float * x, lapack_int ldx, float * ferr, float *
berr, lapack_complex_float * work, float * rwork)
Definition at line 36 of file lapacke_cpprfs_work.c.
LAPACKE_cppsv 🍓
lapack_int LAPACKE_cppsv (int matrix_layout, char uplo, lapack_int n,
lapack_int nrhs, lapack_complex_float * ap, lapack_complex_float * b,
lapack_int ldb)
Definition at line 36 of file lapacke_cppsv.c.
LAPACKE_cppsv_work 🧚
lapack_int LAPACKE_cppsv_work (int matrix_layout, char uplo, lapack_int n,
lapack_int nrhs, lapack_complex_float * ap, lapack_complex_float * b,
lapack_int ldb)
Definition at line 36 of file lapacke_cppsv_work.c.
LAPACKE_cppsvx 👑
lapack_int LAPACKE_cppsvx (int matrix_layout, char fact, char uplo,
lapack_int n, lapack_int nrhs, lapack_complex_float * ap,
lapack_complex_float * afp, char * equed, float * s,
lapack_complex_float * b, lapack_int ldb, lapack_complex_float * x,
lapack_int ldx, float * rcond, float * ferr, float * berr)
Definition at line 36 of file lapacke_cppsvx.c.
LAPACKE_cppsvx_work 💫
lapack_int LAPACKE_cppsvx_work (int matrix_layout, char fact, char uplo,
lapack_int n, lapack_int nrhs, lapack_complex_float * ap,
lapack_complex_float * afp, char * equed, float * s,
lapack_complex_float * b, lapack_int ldb, lapack_complex_float * x,
lapack_int ldx, float * rcond, float * ferr, float * berr,
lapack_complex_float * work, float * rwork)
Definition at line 36 of file lapacke_cppsvx_work.c.
LAPACKE_cpptrf 💅
lapack_int LAPACKE_cpptrf (int matrix_layout, char uplo, lapack_int n,
lapack_complex_float * ap)
Definition at line 36 of file lapacke_cpptrf.c.
LAPACKE_cpptrf_work 🎀
lapack_int LAPACKE_cpptrf_work (int matrix_layout, char uplo, lapack_int n,
lapack_complex_float * ap)
Definition at line 36 of file lapacke_cpptrf_work.c.
LAPACKE_cpptri 🌸
lapack_int LAPACKE_cpptri (int matrix_layout, char uplo, lapack_int n,
lapack_complex_float * ap)
Definition at line 36 of file lapacke_cpptri.c.
LAPACKE_cpptri_work 🦋
lapack_int LAPACKE_cpptri_work (int matrix_layout, char uplo, lapack_int n,
lapack_complex_float * ap)
Definition at line 36 of file lapacke_cpptri_work.c.
LAPACKE_cpptrs ⭐
lapack_int LAPACKE_cpptrs (int matrix_layout, char uplo, lapack_int n,
lapack_int nrhs, const lapack_complex_float * ap, lapack_complex_float *
b, lapack_int ldb)
Definition at line 36 of file lapacke_cpptrs.c.
LAPACKE_cpptrs_work 💖
lapack_int LAPACKE_cpptrs_work (int matrix_layout, char uplo, lapack_int n,
lapack_int nrhs, const lapack_complex_float * ap, lapack_complex_float *
b, lapack_int ldb)
Definition at line 36 of file lapacke_cpptrs_work.c.
LAPACKE_cpstrf 🌈
lapack_int LAPACKE_cpstrf (int matrix_layout, char uplo, lapack_int n,
lapack_complex_float * a, lapack_int lda, lapack_int * piv, lapack_int *
rank, float tol)
Definition at line 36 of file lapacke_cpstrf.c.
LAPACKE_cpstrf_work 💜
lapack_int LAPACKE_cpstrf_work (int matrix_layout, char uplo, lapack_int n,
lapack_complex_float * a, lapack_int lda, lapack_int * piv, lapack_int *
rank, float tol, float * work)
Definition at line 36 of file lapacke_cpstrf_work.c.
LAPACKE_cptcon 🍓
lapack_int LAPACKE_cptcon (lapack_int n, const float * d, const
lapack_complex_float * e, float anorm, float * rcond)
Definition at line 36 of file lapacke_cptcon.c.
LAPACKE_cptcon_work 🧚
lapack_int LAPACKE_cptcon_work (lapack_int n, const float * d, const
lapack_complex_float * e, float anorm, float * rcond, float * work)
Definition at line 36 of file lapacke_cptcon_work.c.
LAPACKE_cpteqr 👑
lapack_int LAPACKE_cpteqr (int matrix_layout, char compz, lapack_int n,
float * d, float * e, lapack_complex_float * z, lapack_int ldz)
Definition at line 36 of file lapacke_cpteqr.c.
LAPACKE_cpteqr_work 💫
lapack_int LAPACKE_cpteqr_work (int matrix_layout, char compz, lapack_int n,
float * d, float * e, lapack_complex_float * z, lapack_int ldz, float *
work)
Definition at line 36 of file lapacke_cpteqr_work.c.
LAPACKE_cptrfs 💅
lapack_int LAPACKE_cptrfs (int matrix_layout, char uplo, lapack_int n,
lapack_int nrhs, const float * d, const lapack_complex_float * e, const
float * df, const lapack_complex_float * ef, const lapack_complex_float
* b, lapack_int ldb, lapack_complex_float * x, lapack_int ldx, float *
ferr, float * berr)
Definition at line 36 of file lapacke_cptrfs.c.
LAPACKE_cptrfs_work 🎀
lapack_int LAPACKE_cptrfs_work (int matrix_layout, char uplo, lapack_int n,
lapack_int nrhs, const float * d, const lapack_complex_float * e, const
float * df, const lapack_complex_float * ef, const lapack_complex_float
* b, lapack_int ldb, lapack_complex_float * x, lapack_int ldx, float *
ferr, float * berr, lapack_complex_float * work, float * rwork)
Definition at line 36 of file lapacke_cptrfs_work.c.
LAPACKE_cptsv 🌸
lapack_int LAPACKE_cptsv (int matrix_layout, lapack_int n, lapack_int nrhs,
float * d, lapack_complex_float * e, lapack_complex_float * b,
lapack_int ldb)
Definition at line 36 of file lapacke_cptsv.c.
LAPACKE_cptsv_work 🦋
lapack_int LAPACKE_cptsv_work (int matrix_layout, lapack_int n, lapack_int
nrhs, float * d, lapack_complex_float * e, lapack_complex_float * b,
lapack_int ldb)
Definition at line 36 of file lapacke_cptsv_work.c.
LAPACKE_cptsvx ⭐
lapack_int LAPACKE_cptsvx (int matrix_layout, char fact, lapack_int n,
lapack_int nrhs, const float * d, const lapack_complex_float * e, float
* df, lapack_complex_float * ef, const lapack_complex_float * b,
lapack_int ldb, lapack_complex_float * x, lapack_int ldx, float * rcond,
float * ferr, float * berr)
Definition at line 36 of file lapacke_cptsvx.c.
LAPACKE_cptsvx_work 💖
lapack_int LAPACKE_cptsvx_work (int matrix_layout, char fact, lapack_int n,
lapack_int nrhs, const float * d, const lapack_complex_float * e, float
* df, lapack_complex_float * ef, const lapack_complex_float * b,
lapack_int ldb, lapack_complex_float * x, lapack_int ldx, float * rcond,
float * ferr, float * berr, lapack_complex_float * work, float * rwork)
Definition at line 36 of file lapacke_cptsvx_work.c.
LAPACKE_cpttrf 🌈
lapack_int LAPACKE_cpttrf (lapack_int n, float * d, lapack_complex_float *
e)
Definition at line 36 of file lapacke_cpttrf.c.
LAPACKE_cpttrf_work 💜
lapack_int LAPACKE_cpttrf_work (lapack_int n, float * d,
lapack_complex_float * e)
Definition at line 36 of file lapacke_cpttrf_work.c.
LAPACKE_cpttrs 🍓
lapack_int LAPACKE_cpttrs (int matrix_layout, char uplo, lapack_int n,
lapack_int nrhs, const float * d, const lapack_complex_float * e,
lapack_complex_float * b, lapack_int ldb)
Definition at line 36 of file lapacke_cpttrs.c.
LAPACKE_cpttrs_work 🧚
lapack_int LAPACKE_cpttrs_work (int matrix_layout, char uplo, lapack_int n,
lapack_int nrhs, const float * d, const lapack_complex_float * e,
lapack_complex_float * b, lapack_int ldb)
Definition at line 36 of file lapacke_cpttrs_work.c.
LAPACKE_cspcon 👑
lapack_int LAPACKE_cspcon (int matrix_layout, char uplo, lapack_int n, const
lapack_complex_float * ap, const lapack_int * ipiv, float anorm, float *
rcond)
Definition at line 36 of file lapacke_cspcon.c.
LAPACKE_cspcon_work 💫
lapack_int LAPACKE_cspcon_work (int matrix_layout, char uplo, lapack_int n,
const lapack_complex_float * ap, const lapack_int * ipiv, float anorm,
float * rcond, lapack_complex_float * work)
Definition at line 36 of file lapacke_cspcon_work.c.
LAPACKE_csprfs 💅
lapack_int LAPACKE_csprfs (int matrix_layout, char uplo, lapack_int n,
lapack_int nrhs, const lapack_complex_float * ap, const
lapack_complex_float * afp, const lapack_int * ipiv, const
lapack_complex_float * b, lapack_int ldb, lapack_complex_float * x,
lapack_int ldx, float * ferr, float * berr)
Definition at line 36 of file lapacke_csprfs.c.
LAPACKE_csprfs_work 🎀
lapack_int LAPACKE_csprfs_work (int matrix_layout, char uplo, lapack_int n,
lapack_int nrhs, const lapack_complex_float * ap, const
lapack_complex_float * afp, const lapack_int * ipiv, const
lapack_complex_float * b, lapack_int ldb, lapack_complex_float * x,
lapack_int ldx, float * ferr, float * berr, lapack_complex_float * work,
float * rwork)
Definition at line 36 of file lapacke_csprfs_work.c.
LAPACKE_cspsv 🌸
lapack_int LAPACKE_cspsv (int matrix_layout, char uplo, lapack_int n,
lapack_int nrhs, lapack_complex_float * ap, lapack_int * ipiv,
lapack_complex_float * b, lapack_int ldb)
Definition at line 36 of file lapacke_cspsv.c.
LAPACKE_cspsv_work 🦋
lapack_int LAPACKE_cspsv_work (int matrix_layout, char uplo, lapack_int n,
lapack_int nrhs, lapack_complex_float * ap, lapack_int * ipiv,
lapack_complex_float * b, lapack_int ldb)
Definition at line 36 of file lapacke_cspsv_work.c.
LAPACKE_cspsvx ⭐
lapack_int LAPACKE_cspsvx (int matrix_layout, char fact, char uplo,
lapack_int n, lapack_int nrhs, const lapack_complex_float * ap,
lapack_complex_float * afp, lapack_int * ipiv, const
lapack_complex_float * b, lapack_int ldb, lapack_complex_float * x,
lapack_int ldx, float * rcond, float * ferr, float * berr)
Definition at line 36 of file lapacke_cspsvx.c.
LAPACKE_cspsvx_work 💖
lapack_int LAPACKE_cspsvx_work (int matrix_layout, char fact, char uplo,
lapack_int n, lapack_int nrhs, const lapack_complex_float * ap,
lapack_complex_float * afp, lapack_int * ipiv, const
lapack_complex_float * b, lapack_int ldb, lapack_complex_float * x,
lapack_int ldx, float * rcond, float * ferr, float * berr,
lapack_complex_float * work, float * rwork)
Definition at line 36 of file lapacke_cspsvx_work.c.
LAPACKE_csptrf 🌈
lapack_int LAPACKE_csptrf (int matrix_layout, char uplo, lapack_int n,
lapack_complex_float * ap, lapack_int * ipiv)
Definition at line 36 of file lapacke_csptrf.c.
LAPACKE_csptrf_work 💜
lapack_int LAPACKE_csptrf_work (int matrix_layout, char uplo, lapack_int n,
lapack_complex_float * ap, lapack_int * ipiv)
Definition at line 36 of file lapacke_csptrf_work.c.
LAPACKE_csptri 🍓
lapack_int LAPACKE_csptri (int matrix_layout, char uplo, lapack_int n,
lapack_complex_float * ap, const lapack_int * ipiv)
Definition at line 36 of file lapacke_csptri.c.
💅 LAPACKE_csptri_work
lapack_int LAPACKE_csptri_work (int matrix_layout, char uplo, lapack_int n,
lapack_complex_float * ap, const lapack_int * ipiv, lapack_complex_float
* work)
Definition at line 36 of file lapacke_csptri_work.c.
🎀 LAPACKE_csptrs
lapack_int LAPACKE_csptrs (int matrix_layout, char uplo, lapack_int n,
lapack_int nrhs, const lapack_complex_float * ap, const lapack_int *
ipiv, lapack_complex_float * b, lapack_int ldb)
Definition at line 36 of file lapacke_csptrs.c.
✨ LAPACKE_csptrs_work
lapack_int LAPACKE_csptrs_work (int matrix_layout, char uplo, lapack_int n,
lapack_int nrhs, const lapack_complex_float * ap, const lapack_int *
ipiv, lapack_complex_float * b, lapack_int ldb)
Definition at line 36 of file lapacke_csptrs_work.c.
🦋 LAPACKE_cstedc
lapack_int LAPACKE_cstedc (int matrix_layout, char compz, lapack_int n,
float * d, float * e, lapack_complex_float * z, lapack_int ldz)
Definition at line 36 of file lapacke_cstedc.c.
🌸 LAPACKE_cstedc_work
lapack_int LAPACKE_cstedc_work (int matrix_layout, char compz, lapack_int n,
float * d, float * e, lapack_complex_float * z, lapack_int ldz,
lapack_complex_float * work, lapack_int lwork, float * rwork, lapack_int
lrwork, lapack_int * iwork, lapack_int liwork)
Definition at line 36 of file lapacke_cstedc_work.c.
🔥 LAPACKE_cstegr
lapack_int LAPACKE_cstegr (int matrix_layout, char jobz, char range,
lapack_int n, float * d, float * e, float vl, float vu, lapack_int il,
lapack_int iu, float abstol, lapack_int * m, float * w,
lapack_complex_float * z, lapack_int ldz, lapack_int * isuppz)
Definition at line 36 of file lapacke_cstegr.c.
💜 LAPACKE_cstegr_work
lapack_int LAPACKE_cstegr_work (int matrix_layout, char jobz, char range,
lapack_int n, float * d, float * e, float vl, float vu, lapack_int il,
lapack_int iu, float abstol, lapack_int * m, float * w,
lapack_complex_float * z, lapack_int ldz, lapack_int * isuppz, float *
work, lapack_int lwork, lapack_int * iwork, lapack_int liwork)
Definition at line 36 of file lapacke_cstegr_work.c.
🧚 LAPACKE_cstein
lapack_int LAPACKE_cstein (int matrix_layout, lapack_int n, const float * d,
const float * e, lapack_int m, const float * w, const lapack_int *
iblock, const lapack_int * isplit, lapack_complex_float * z, lapack_int
ldz, lapack_int * ifailv)
Definition at line 36 of file lapacke_cstein.c.
⭐ LAPACKE_cstein_work
lapack_int LAPACKE_cstein_work (int matrix_layout, lapack_int n, const float
* d, const float * e, lapack_int m, const float * w, const lapack_int *
iblock, const lapack_int * isplit, lapack_complex_float * z, lapack_int
ldz, float * work, lapack_int * iwork, lapack_int * ifailv)
Definition at line 36 of file lapacke_cstein_work.c.
🌈 LAPACKE_cstemr
lapack_int LAPACKE_cstemr (int matrix_layout, char jobz, char range,
lapack_int n, float * d, float * e, float vl, float vu, lapack_int il,
lapack_int iu, lapack_int * m, float * w, lapack_complex_float * z,
lapack_int ldz, lapack_int nzc, lapack_int * isuppz, lapack_logical *
tryrac)
Definition at line 36 of file lapacke_cstemr.c.
🫶 LAPACKE_cstemr_work
lapack_int LAPACKE_cstemr_work (int matrix_layout, char jobz, char range,
lapack_int n, float * d, float * e, float vl, float vu, lapack_int il,
lapack_int iu, lapack_int * m, float * w, lapack_complex_float * z,
lapack_int ldz, lapack_int nzc, lapack_int * isuppz, lapack_logical *
tryrac, float * work, lapack_int lwork, lapack_int * iwork, lapack_int
liwork)
Definition at line 36 of file lapacke_cstemr_work.c.
🍓 LAPACKE_csteqr
lapack_int LAPACKE_csteqr (int matrix_layout, char compz, lapack_int n,
float * d, float * e, lapack_complex_float * z, lapack_int ldz)
Definition at line 36 of file lapacke_csteqr.c.
🎀 LAPACKE_csteqr_work
lapack_int LAPACKE_csteqr_work (int matrix_layout, char compz, lapack_int n,
float * d, float * e, lapack_complex_float * z, lapack_int ldz, float *
work)
Definition at line 36 of file lapacke_csteqr_work.c.
👑 LAPACKE_csycon
lapack_int LAPACKE_csycon (int matrix_layout, char uplo, lapack_int n, const
lapack_complex_float * a, lapack_int lda, const lapack_int * ipiv, float
anorm, float * rcond)
Definition at line 36 of file lapacke_csycon.c.
💖 LAPACKE_csycon_3
lapack_int LAPACKE_csycon_3 (int matrix_layout, char uplo, lapack_int n,
const lapack_complex_float * a, lapack_int lda, const
lapack_complex_float * e, const lapack_int * ipiv, float anorm, float *
rcond)
Definition at line 36 of file lapacke_csycon_3.c.
🌸 LAPACKE_csycon_3_work
lapack_int LAPACKE_csycon_3_work (int matrix_layout, char uplo, lapack_int
n, const lapack_complex_float * a, lapack_int lda, const
lapack_complex_float * e, const lapack_int * ipiv, float anorm, float *
rcond, lapack_complex_float * work)
Definition at line 36 of file lapacke_csycon_3_work.c.
🦋 LAPACKE_csycon_work
lapack_int LAPACKE_csycon_work (int matrix_layout, char uplo, lapack_int n,
const lapack_complex_float * a, lapack_int lda, const lapack_int * ipiv,
float anorm, float * rcond, lapack_complex_float * work)
Definition at line 36 of file lapacke_csycon_work.c.
✨ LAPACKE_csyconv
lapack_int LAPACKE_csyconv (int matrix_layout, char uplo, char way,
lapack_int n, lapack_complex_float * a, lapack_int lda, const lapack_int
* ipiv, lapack_complex_float * e)
Definition at line 36 of file lapacke_csyconv.c.
🧚 LAPACKE_csyconv_work
lapack_int LAPACKE_csyconv_work (int matrix_layout, char uplo, char way,
lapack_int n, lapack_complex_float * a, lapack_int lda, const lapack_int
* ipiv, lapack_complex_float * e)
Definition at line 36 of file lapacke_csyconv_work.c.
🔥 LAPACKE_csyequb
lapack_int LAPACKE_csyequb (int matrix_layout, char uplo, lapack_int n,
const lapack_complex_float * a, lapack_int lda, float * s, float *
scond, float * amax)
Definition at line 36 of file lapacke_csyequb.c.
💜 LAPACKE_csyequb_work
lapack_int LAPACKE_csyequb_work (int matrix_layout, char uplo, lapack_int n,
const lapack_complex_float * a, lapack_int lda, float * s, float *
scond, float * amax, lapack_complex_float * work)
Definition at line 36 of file lapacke_csyequb_work.c.
⭐ LAPACKE_csyr
lapack_int LAPACKE_csyr (int matrix_layout, char uplo, lapack_int n,
lapack_complex_float alpha, const lapack_complex_float * x, lapack_int
incx, lapack_complex_float * a, lapack_int lda)
Definition at line 36 of file lapacke_csyr.c.
🎀 LAPACKE_csyr_work
lapack_int LAPACKE_csyr_work (int matrix_layout, char uplo, lapack_int n,
lapack_complex_float alpha, const lapack_complex_float * x, lapack_int
incx, lapack_complex_float * a, lapack_int lda)
Definition at line 36 of file lapacke_csyr_work.c.
🌈 LAPACKE_csyrfs
lapack_int LAPACKE_csyrfs (int matrix_layout, char uplo, lapack_int n,
lapack_int nrhs, const lapack_complex_float * a, lapack_int lda, const
lapack_complex_float * af, lapack_int ldaf, const lapack_int * ipiv,
const lapack_complex_float * b, lapack_int ldb, lapack_complex_float *
x, lapack_int ldx, float * ferr, float * berr)
Definition at line 36 of file lapacke_csyrfs.c.
🫶 LAPACKE_csyrfs_work
lapack_int LAPACKE_csyrfs_work (int matrix_layout, char uplo, lapack_int n,
lapack_int nrhs, const lapack_complex_float * a, lapack_int lda, const
lapack_complex_float * af, lapack_int ldaf, const lapack_int * ipiv,
const lapack_complex_float * b, lapack_int ldb, lapack_complex_float *
x, lapack_int ldx, float * ferr, float * berr, lapack_complex_float *
work, float * rwork)
Definition at line 36 of file lapacke_csyrfs_work.c.
🍓 LAPACKE_csyrfsx
lapack_int LAPACKE_csyrfsx (int matrix_layout, char uplo, char equed,
lapack_int n, lapack_int nrhs, const lapack_complex_float * a,
lapack_int lda, const lapack_complex_float * af, lapack_int ldaf, const
lapack_int * ipiv, const float * s, const lapack_complex_float * b,
lapack_int ldb, lapack_complex_float * x, lapack_int ldx, float * rcond,
float * berr, lapack_int n_err_bnds, float * err_bnds_norm, float *
err_bnds_comp, lapack_int nparams, float * params)
Definition at line 36 of file lapacke_csyrfsx.c.
👑 LAPACKE_csyrfsx_work
lapack_int LAPACKE_csyrfsx_work (int matrix_layout, char uplo, char equed,
lapack_int n, lapack_int nrhs, const lapack_complex_float * a,
lapack_int lda, const lapack_complex_float * af, lapack_int ldaf, const
lapack_int * ipiv, const float * s, const lapack_complex_float * b,
lapack_int ldb, lapack_complex_float * x, lapack_int ldx, float * rcond,
float * berr, lapack_int n_err_bnds, float * err_bnds_norm, float *
err_bnds_comp, lapack_int nparams, float * params, lapack_complex_float
* work, float * rwork)
Definition at line 36 of file lapacke_csyrfsx_work.c.
💖 LAPACKE_csysv
lapack_int LAPACKE_csysv (int matrix_layout, char uplo, lapack_int n,
lapack_int nrhs, lapack_complex_float * a, lapack_int lda, lapack_int *
ipiv, lapack_complex_float * b, lapack_int ldb)
Definition at line 36 of file lapacke_csysv.c.
🌸 LAPACKE_csysv_aa
lapack_int LAPACKE_csysv_aa (int matrix_layout, char uplo, lapack_int n,
lapack_int nrhs, lapack_complex_float * a, lapack_int lda, lapack_int *
ipiv, lapack_complex_float * b, lapack_int ldb)
Definition at line 36 of file lapacke_csysv_aa.c.
🦋 LAPACKE_csysv_aa_2stage
lapack_int LAPACKE_csysv_aa_2stage (int matrix_layout, char uplo, lapack_int
n, lapack_int nrhs, lapack_complex_float * a, lapack_int lda,
lapack_complex_float * tb, lapack_int ltb, lapack_int * ipiv, lapack_int
* ipiv2, lapack_complex_float * b, lapack_int ldb)
Definition at line 36 of file lapacke_csysv_aa_2stage.c.
✨ LAPACKE_csysv_aa_2stage_work
lapack_int LAPACKE_csysv_aa_2stage_work (int matrix_layout, char uplo,
lapack_int n, lapack_int nrhs, lapack_complex_float * a, lapack_int lda,
lapack_complex_float * tb, lapack_int ltb, lapack_int * ipiv, lapack_int
* ipiv2, lapack_complex_float * b, lapack_int ldb, lapack_complex_float
* work, lapack_int lwork)
Definition at line 36 of file lapacke_csysv_aa_2stage_work.c.
🧚 LAPACKE_csysv_aa_work
lapack_int LAPACKE_csysv_aa_work (int matrix_layout, char uplo, lapack_int
n, lapack_int nrhs, lapack_complex_float * a, lapack_int lda, lapack_int
* ipiv, lapack_complex_float * b, lapack_int ldb, lapack_complex_float *
work, lapack_int lwork)
Definition at line 36 of file lapacke_csysv_aa_work.c.
🔥 LAPACKE_csysv_rk
lapack_int LAPACKE_csysv_rk (int matrix_layout, char uplo, lapack_int n,
lapack_int nrhs, lapack_complex_float * a, lapack_int lda,
lapack_complex_float * e, lapack_int * ipiv, lapack_complex_float * b,
lapack_int ldb)
Definition at line 36 of file lapacke_csysv_rk.c.
💜 LAPACKE_csysv_rk_work
lapack_int LAPACKE_csysv_rk_work (int matrix_layout, char uplo, lapack_int
n, lapack_int nrhs, lapack_complex_float * a, lapack_int lda,
lapack_complex_float * e, lapack_int * ipiv, lapack_complex_float * b,
lapack_int ldb, lapack_complex_float * work, lapack_int lwork)
Definition at line 36 of file lapacke_csysv_rk_work.c.
⭐ LAPACKE_csysv_rook
lapack_int LAPACKE_csysv_rook (int matrix_layout, char uplo, lapack_int n,
lapack_int nrhs, lapack_complex_float * a, lapack_int lda, lapack_int *
ipiv, lapack_complex_float * b, lapack_int ldb)
Definition at line 36 of file lapacke_csysv_rook.c.
🎀 LAPACKE_csysv_rook_work
lapack_int LAPACKE_csysv_rook_work (int matrix_layout, char uplo, lapack_int
n, lapack_int nrhs, lapack_complex_float * a, lapack_int lda, lapack_int
* ipiv, lapack_complex_float * b, lapack_int ldb, lapack_complex_float *
work, lapack_int lwork)
Definition at line 36 of file lapacke_csysv_rook_work.c.
LAPACKE_csysv_work 🫶
okay so this is the workspace-having twin of LAPACKE_csysv — same solve-a-symmetric-complex-system energy, except you show up with your own work array of size lwork instead of letting the library do its own thing. matrix_layout, uplo, n, nrhs, a, lda, ipiv, b, ldb — the whole squad is here.
lapack_int LAPACKE_csysv_work (int matrix_layout, char uplo, lapack_int n,
lapack_int nrhs, lapack_complex_float * a, lapack_int lda, lapack_int *
ipiv, lapack_complex_float * b, lapack_int ldb, lapack_complex_float *
work, lapack_int lwork)
Definition at line 36 of file lapacke_csysv_work.c.
LAPACKE_csysvx ✨
the fancy expert-mode solver, fr fr. it gives you the solution x and the receipts: rcond, ferr, berr 😭 fact tells it whether you're handing over the factored af already or making it do the work itself, and ldaf / ldx keep everything lined up.
lapack_int LAPACKE_csysvx (int matrix_layout, char fact, char uplo,
lapack_int n, lapack_int nrhs, const lapack_complex_float * a,
lapack_int lda, lapack_complex_float * af, lapack_int ldaf, lapack_int *
ipiv, const lapack_complex_float * b, lapack_int ldb,
lapack_complex_float * x, lapack_int ldx, float * rcond, float * ferr,
float * berr)
Definition at line 36 of file lapacke_csysvx.c.
LAPACKE_csysvx_work 💅
same csysvx slay, but now with work (lwork) and rwork because the expert version needs real scratch space on the side. iconic.
lapack_int LAPACKE_csysvx_work (int matrix_layout, char fact, char uplo,
lapack_int n, lapack_int nrhs, const lapack_complex_float * a,
lapack_int lda, lapack_complex_float * af, lapack_int ldaf, lapack_int *
ipiv, const lapack_complex_float * b, lapack_int ldb,
lapack_complex_float * x, lapack_int ldx, float * rcond, float * ferr,
float * berr, lapack_complex_float * work, lapack_int lwork, float *
rwork)
Definition at line 36 of file lapacke_csysvx_work.c.
LAPACKE_csysvxx 👑
the extra extra expert solver — xx stands for "bestie we are doing error bounds now". you've got equed and s for equilibration, rcond and rpvgrw, berr, and the whole error-bound buffet: n_err_bnds, err_bnds_norm, err_bnds_comp, plus nparams and params. it's giving overachiever and we love her.
lapack_int LAPACKE_csysvxx (int matrix_layout, char fact, char uplo,
lapack_int n, lapack_int nrhs, lapack_complex_float * a, lapack_int lda,
lapack_complex_float * af, lapack_int ldaf, lapack_int * ipiv, char *
equed, float * s, lapack_complex_float * b, lapack_int ldb,
lapack_complex_float * x, lapack_int ldx, float * rcond, float * rpvgrw,
float * berr, lapack_int n_err_bnds, float * err_bnds_norm, float *
err_bnds_comp, lapack_int nparams, float * params)
Definition at line 36 of file lapacke_csysvxx.c.
LAPACKE_csysvxx_work 🦋
the _work version of the error-bound queen. literally the exact same parameter list as LAPACKE_csysvxx with work and rwork tacked onto the end so you can supply your own scratch space, periodt.
lapack_int LAPACKE_csysvxx_work (int matrix_layout, char fact, char uplo,
lapack_int n, lapack_int nrhs, lapack_complex_float * a, lapack_int lda,
lapack_complex_float * af, lapack_int ldaf, lapack_int * ipiv, char *
equed, float * s, lapack_complex_float * b, lapack_int ldb,
lapack_complex_float * x, lapack_int ldx, float * rcond, float * rpvgrw,
float * berr, lapack_int n_err_bnds, float * err_bnds_norm, float *
err_bnds_comp, lapack_int nparams, float * params, lapack_complex_float
* work, float * rwork)
Definition at line 36 of file lapacke_csysvxx_work.c.
LAPACKE_csyswapr 🎀
swap two rows and two columns of a symmetric matrix at once — that's the i1 and i2 indices doing their little dance, with a and lda holding the matrix and uplo telling it which triangle you actually care about. no work needed, she's low maintenance.
lapack_int LAPACKE_csyswapr (int matrix_layout, char uplo, lapack_int n,
lapack_complex_float * a, lapack_int lda, lapack_int i1, lapack_int i2)
Definition at line 36 of file lapacke_csyswapr.c.
LAPACKE_csyswapr_work 🌸
this is the _work entry point for the sym-swap. and bestie, the parameter list is literally identical to LAPACKE_csyswapr — same matrix_layout, uplo, n, a, lda, i1, i2. no extra args. it's giving "I have nothing to add but I'm here anyway" and honestly? relatable.
lapack_int LAPACKE_csyswapr_work (int matrix_layout, char uplo, lapack_int
n, lapack_complex_float * a, lapack_int lda, lapack_int i1, lapack_int
i2)
Definition at line 36 of file lapacke_csyswapr_work.c.
LAPACKE_csytrf 🔥
the factorization girlie 💖 factors a complex symmetric matrix using the Bunch-Kaufman diagonal pivoting method — well, that's what sytrf is in LAPACK-land, and here she takes uplo, n, a, lda and spits the pivot info into ipiv.
lapack_int LAPACKE_csytrf (int matrix_layout, char uplo, lapack_int n,
lapack_complex_float * a, lapack_int lda, lapack_int * ipiv)
Definition at line 36 of file lapacke_csytrf.c.
LAPACKE_csytrf_aa ⭐
the _aa variant of the factorization — same matrix_layout, uplo, n, a, lda, ipiv setup, different algorithm vibes under the hood. slay.
lapack_int LAPACKE_csytrf_aa (int matrix_layout, char uplo, lapack_int n,
lapack_complex_float * a, lapack_int lda, lapack_int * ipiv)
Definition at line 36 of file lapacke_csytrf_aa.c.
LAPACKE_csytrf_aa_2stage 🌈
two-stage era!! now you've got tb with its own ltb, and two pivot arrays — ipiv and ipiv2. not me bringing two whole pivot arrays to the function, that's main character energy 👑
lapack_int LAPACKE_csytrf_aa_2stage (int matrix_layout, char uplo,
lapack_int n, lapack_complex_float * a, lapack_int lda,
lapack_complex_float * tb, lapack_int ltb, lapack_int * ipiv, lapack_int
* ipiv2)
Definition at line 36 of file lapacke_csytrf_aa_2stage.c.
LAPACKE_csytrf_aa_2stage_work 💜
same two-stage party as LAPACKE_csytrf_aa_2stage, except now you're the one bringing the snacks — work and lwork. everything else (tb, ltb, ipiv, ipiv2) is exactly where you left it.
lapack_int LAPACKE_csytrf_aa_2stage_work (int matrix_layout, char uplo,
lapack_int n, lapack_complex_float * a, lapack_int lda,
lapack_complex_float * tb, lapack_int ltb, lapack_int * ipiv, lapack_int
* ipiv2, lapack_complex_float * work, lapack_int lwork)
Definition at line 36 of file lapacke_csytrf_aa_2stage_work.c.
LAPACKE_csytrf_aa_work 🧚
_aa plus a work/lwork pair. that's it, that's the tweet. matrix_layout, uplo, n, a, lda, ipiv, work, lwork — all present and accounted for 💅
lapack_int LAPACKE_csytrf_aa_work (int matrix_layout, char uplo, lapack_int
n, lapack_complex_float * a, lapack_int lda, lapack_int * ipiv,
lapack_complex_float * work, lapack_int lwork)
Definition at line 36 of file lapacke_csytrf_aa_work.c.
LAPACKE_csytrf_rk 🍓
the _rk flavour — this one carries an extra output array e alongside the matrix and pivots. so it's uplo, n, a, lda, e, ipiv. note the e bestie, do not forget the e 🙈
lapack_int LAPACKE_csytrf_rk (int matrix_layout, char uplo, lapack_int n,
lapack_complex_float * a, lapack_int lda, lapack_complex_float * e,
lapack_int * ipiv)
Definition at line 36 of file lapacke_csytrf_rk.c.
LAPACKE_csytrf_rk_work 😭
the _rk factorizer but you bring scratch space. e is still there, ipiv is still there, and now work + lwork crash the party too.
lapack_int LAPACKE_csytrf_rk_work (int matrix_layout, char uplo, lapack_int
n, lapack_complex_float * a, lapack_int lda, lapack_complex_float * e,
lapack_int * ipiv, lapack_complex_float * work, lapack_int lwork)
Definition at line 36 of file lapacke_csytrf_rk_work.c.
LAPACKE_csytrf_rook 🎯
rook pivoting variant of the sytrf factorization. same five-ish shape: matrix_layout, uplo, n, a, lda, ipiv. different pivoting brain, same cute little interface.
lapack_int LAPACKE_csytrf_rook (int matrix_layout, char uplo, lapack_int n,
lapack_complex_float * a, lapack_int lda, lapack_int * ipiv)
Definition at line 36 of file lapacke_csytrf_rook.c.
LAPACKE_csytrf_rook_work ⭐
rook pivoting with your own work buffer of size lwork. the rook really said "I'll pivot, you bring the memory" 💀
lapack_int LAPACKE_csytrf_rook_work (int matrix_layout, char uplo,
lapack_int n, lapack_complex_float * a, lapack_int lda, lapack_int *
ipiv, lapack_complex_float * work, lapack_int lwork)
Definition at line 36 of file lapacke_csytrf_rook_work.c.
LAPACKE_csytrf_work 🌟
the workspace-supplying version of plain LAPACKE_csytrf. you pass work and lwork, it does the factorization and fills ipiv. we stan a predictable queen.
lapack_int LAPACKE_csytrf_work (int matrix_layout, char uplo, lapack_int n,
lapack_complex_float * a, lapack_int lda, lapack_int * ipiv,
lapack_complex_float * work, lapack_int lwork)
Definition at line 36 of file lapacke_csytrf_work.c.
LAPACKE_csytri 🌸
inverse time!! this computes the inverse of a complex symmetric matrix using the factorization output — note that ipiv is const here, because she's reading your pivots, not rewriting them 🎀
lapack_int LAPACKE_csytri (int matrix_layout, char uplo, lapack_int n,
lapack_complex_float * a, lapack_int lda, const lapack_int * ipiv)
Definition at line 36 of file lapacke_csytri.c.
LAPACKE_csytri2 ✨
the 2 variant of the inverse. same signature as LAPACKE_csytri — matrix_layout, uplo, n, a, lda, const ipiv. the sequel everyone asked for 💖
lapack_int LAPACKE_csytri2 (int matrix_layout, char uplo, lapack_int n,
lapack_complex_float * a, lapack_int lda, const lapack_int * ipiv)
Definition at line 36 of file lapacke_csytri2.c.
LAPACKE_csytri2_work 🦋
csytri2 but with work and lwork handed in by you. the const lapack_int * ipiv stays const because boundaries bestie 💅
lapack_int LAPACKE_csytri2_work (int matrix_layout, char uplo, lapack_int n,
lapack_complex_float * a, lapack_int lda, const lapack_int * ipiv,
lapack_complex_float * work, lapack_int lwork)
Definition at line 36 of file lapacke_csytri2_work.c.
LAPACKE_csytri2x 🎀
the 2x inverse — and here's the new face: lapack_int nb, a blocking parameter hanging out at the end. plus the usual matrix_layout, uplo, n, a, lda, const ipiv. she's blocked and bookkept 🔥
lapack_int LAPACKE_csytri2x (int matrix_layout, char uplo, lapack_int n,
lapack_complex_float * a, lapack_int lda, const lapack_int * ipiv,
lapack_int nb)
Definition at line 36 of file `lapacke_csytri2x.c.
LAPACKE_csytri2x_work 💀
okay so watch this — this one takes work and nb, but not lwork. no lwork bestie. we checked twice. matrix_layout, uplo, n, a, lda, const ipiv, work, nb. that's the list 🙈
lapack_int LAPACKE_csytri2x_work (int matrix_layout, char uplo, lapack_int
n, lapack_complex_float * a, lapack_int lda, const lapack_int * ipiv,
lapack_complex_float * work, lapack_int nb)
Definition at line 36 of file lapacke_csytri2x_work.c.
LAPACKE_csytri_3 👑
the _3 inverse — new arg alert 🚨 there's a const lapack_complex_float * e sitting between lda and const ipiv, so the factorization's e gets passed straight back in. icon behaviour.
lapack_int LAPACKE_csytri_3 (int matrix_layout, char uplo, lapack_int n,
lapack_complex_float * a, lapack_int lda, const lapack_complex_float *
e, const lapack_int * ipiv)
Definition at line 36 of file lapacke_csytri_3.c.
LAPACKE_csytri_3_work 💜
_3 + _work, and look at that parameter list — matrix_layout, uplo, n, a, lda, const e, const ipiv, work, lwork. the whole extended family showed up 🫶
lapack_int LAPACKE_csytri_3_work (int matrix_layout, char uplo, lapack_int
n, lapack_complex_float * a, lapack_int lda, const lapack_complex_float
* e, const lapack_int * ipiv, lapack_complex_float * work, lapack_int
lwork)
Definition at line 36 of file lapacke_csytri_3_work.c.
LAPACKE_csytri_work 🌟
and the plain _work inverse. heads up bestie — this one takes work but no lwork 😭 that's genuinely what the signature says. matrix_layout, uplo, n, a, lda, const ipiv, work. done.
lapack_int LAPACKE_csytri_work (int matrix_layout, char uplo, lapack_int n,
lapack_complex_float * a, lapack_int lda, const lapack_int * ipiv,
lapack_complex_float * work)
Definition at line 36 of file lapacke_csytri_work.c.
LAPACKE_csytrs 💖
solving using a factorization you already have 🎀 give it uplo, n, nrhs, the factored a and lda, the const ipiv, and your right-hand side b / ldb. no refactoring, we're just here to solve.
lapack_int LAPACKE_csytrs (int matrix_layout, char uplo, lapack_int n,
lapack_int nrhs, const lapack_complex_float * a, lapack_int lda, const
lapack_int * ipiv, lapack_complex_float * b, lapack_int ldb)
Definition at line 36 of file lapacke_csytrs.c.
LAPACKE_csytrs2 ✨
the 2 solve. literally the same arg list as LAPACKE_csytrs — matrix_layout, uplo, n, nrhs, const a, lda, const ipiv, b, ldb. different internals, same cute face 💅
lapack_int LAPACKE_csytrs2 (int matrix_layout, char uplo, lapack_int n,
lapack_int nrhs, const lapack_complex_float * a, lapack_int lda, const
lapack_int * ipiv, lapack_complex_float * b, lapack_int ldb)
Definition at line 36 of file lapacke_csytrs2.c.
LAPACKE_csytrs2_work 🦋
csytrs2 plus a single work argument. no lwork. that's the whole update, and yes we double checked 🔍
lapack_int LAPACKE_csytrs2_work (int matrix_layout, char uplo, lapack_int n,
lapack_int nrhs, const lapack_complex_float * a, lapack_int lda, const
lapack_int * ipiv, lapack_complex_float * b, lapack_int ldb,
lapack_complex_float * work)
Definition at line 36 of file lapacke_csytrs2_work.c.
LAPACKE_csytrs_3 🎯
the _3 solver — const lapack_complex_float * e returns to the lineup, right after lda, before const ipiv. the e girlies stay winning 👑
lapack_int LAPACKE_csytrs_3 (int matrix_layout, char uplo, lapack_int n,
lapack_int nrhs, const lapack_complex_float * a, lapack_int lda, const
lapack_complex_float * e, const lapack_int * ipiv, lapack_complex_float
* b, lapack_int ldb)
Definition at line 36 of file lapacke_csytrs_3.c.
LAPACKE_csytrs_3_work 🌸
fun fact bestie: even though this is the _work version, the parameter list is identical to LAPACKE_csytrs_3 — no extra work buffer appears. same e, same ipiv, same everything. we report, you decide 😭
lapack_int LAPACKE_csytrs_3_work (int matrix_layout, char uplo, lapack_int
n, lapack_int nrhs, const lapack_complex_float * a, lapack_int lda,
const lapack_complex_float * e, const lapack_int * ipiv,
lapack_complex_float * b, lapack_int ldb)
Definition at line 36 of file lapacke_csytrs_3_work.c.
LAPACKE_csytrs_aa ⭐
the _aa solve, back to the nine-arg classic: matrix_layout, uplo, n, nrhs, const a, lda, const ipiv, b, ldb. clean, simple, ate 💅
lapack_int LAPACKE_csytrs_aa (int matrix_layout, char uplo, lapack_int n,
lapack_int nrhs, const lapack_complex_float * a, lapack_int lda, const
lapack_int * ipiv, lapack_complex_float * b, lapack_int ldb)
Definition at line 36 of file lapacke_csytrs_aa.c.
LAPACKE_csytrs_aa_2stage 🌈
two-stage solve!! she's got tb and ltb, plus ipiv and ipiv2, then b and ldb at the end. note that a and tb and the pivots are all non-const here — she's allowed to touch ✨
lapack_int LAPACKE_csytrs_aa_2stage (int matrix_layout, char uplo,
lapack_int n, lapack_int nrhs, lapack_complex_float * a, lapack_int lda,
lapack_complex_float * tb, lapack_int ltb, lapack_int * ipiv, lapack_int
* ipiv2, lapack_complex_float * b, lapack_int ldb)
Definition at line 36 of file lapacke_csytrs_aa_2stage.c.
LAPACKE_csytrs_aa_2stage_work 🔥
the _work twin of the two-stage solve — and surprise, the parameter list matches LAPACKE_csytrs_aa_2stage exactly. no work, no lwork, just vibes and the same twelve args 🫶
lapack_int LAPACKE_csytrs_aa_2stage_work (int matrix_layout, char uplo,
lapack_int n, lapack_int nrhs, lapack_complex_float * a, lapack_int lda,
lapack_complex_float * tb, lapack_int ltb, lapack_int * ipiv, lapack_int
* ipiv2, lapack_complex_float * b, lapack_int ldb)
Definition at line 36 of file lapacke_csytrs_aa_2stage_work.c.
LAPACKE_csytrs_aa_work 💜
now this _work version actually has the goods — work and lwork appended after b and ldb. a and ipiv are const again. balance restored 🧚
lapack_int LAPACKE_csytrs_aa_work (int matrix_layout, char uplo, lapack_int
n, lapack_int nrhs, const lapack_complex_float * a, lapack_int lda,
const lapack_int * ipiv, lapack_complex_float * b, lapack_int ldb,
lapack_complex_float * work, lapack_int lwork)
Definition at line 36 of file lapacke_csytrs_aa_work.c.
LAPACKE_csytrs_rook 🎀
rook-pivoting solve — matrix_layout, uplo, n, nrhs, const a, lda, const ipiv, b, ldb. the rook said solve and she meant it.
lapack_int LAPACKE_csytrs_rook (int matrix_layout, char uplo, lapack_int n,
lapack_int nrhs, const lapack_complex_float * a, lapack_int lda, const
lapack_int * ipiv, lapack_complex_float * b, lapack_int ldb)
Definition at line 36 of file lapacke_csytrs_rook.c.
LAPACKE_csytrs_rook_work 🍓
the rook solve's _work sibling — and yep, the signature is identical to LAPACKE_csytrs_rook. no extra buffer. we're not mad, we're just noticing 💀
lapack_int LAPACKE_csytrs_rook_work (int matrix_layout, char uplo,
lapack_int n, lapack_int nrhs, const lapack_complex_float * a,
lapack_int lda, const lapack_int * ipiv, lapack_complex_float * b,
lapack_int ldb)
Definition at line 36 of file lapacke_csytrs_rook_work.c.
LAPACKE_csytrs_work 🌟
the workspace-indifferent-looking _work solve — signature is the same as plain LAPACKE_csytrs, so no extra work/lwork here either. consistency is a love language 💖
lapack_int LAPACKE_csytrs_work (int matrix_layout, char uplo, lapack_int n,
lapack_int nrhs, const lapack_complex_float * a, lapack_int lda, const
lapack_int * ipiv, lapack_complex_float * b, lapack_int ldb)
Definition at line 36 of file lapacke_csytrs_work.c.
LAPACKE_ctbcon 🦋
new letter, who dis — ctbcon estimates the condition number of a complex triangular band matrix. you've got norm to pick your flavour of norm, uplo, diag, n, kd for the band width, the band storage ab with ldab, and the estimate lands in rcond. she's giving "how ill-conditioned am I" ✨
lapack_int LAPACKE_ctbcon (int matrix_layout, char norm, char uplo, char
diag, lapack_int n, lapack_int kd, const lapack_complex_float * ab,
lapack_int ldab, float * rcond)
Definition at line 36 of file lapacke_ctbcon.c.
LAPACKE_ctbcon_work 💅
the _work version of the triangular-band condition estimator — same matrix_layout, norm, uplo, diag, n, kd, const ab, ldab, rcond, and then the two-for-one scratch deal: work (complex) and rwork (real). two buffers, one function, very demure 🎀
lapack_int LAPACKE_ctbcon_work (int matrix_layout, char norm, char uplo,
char diag, lapack_int n, lapack_int kd, const lapack_complex_float * ab,
lapack_int ldab, float * rcond, lapack_complex_float * work, float *
rwork)
Definition at line 36 of file lapacke_ctbcon_work.c.
Okay continuing the parade of c-prefixed complex-single-precision besties — every single one of these lives at line 36 of its own file, which is honestly iconic consistency 💅
LAPACKE_ctbrfs
lapack_int LAPACKE_ctbrfs (int matrix_layout, char uplo, char trans, char
diag, lapack_int n, lapack_int kd, lapack_int nrhs, const
lapack_complex_float * ab, lapack_int ldab, const lapack_complex_float *
b, lapack_int ldb, const lapack_complex_float * x, lapack_int ldx, float
* ferr, float * berr)
Definition at line 36 of file lapacke_ctbrfs.c.
LAPACKE_ctbrfs_work
lapack_int LAPACKE_ctbrfs_work (int matrix_layout, char uplo, char trans,
char diag, lapack_int n, lapack_int kd, lapack_int nrhs, const
lapack_complex_float * ab, lapack_int ldab, const lapack_complex_float *
b, lapack_int ldb, const lapack_complex_float * x, lapack_int ldx, float
* ferr, float * berr, lapack_complex_float * work, float * rwork)
Definition at line 36 of file lapacke_ctbrfs_work.c.
Same lineup as above, except it brings its own scratch space: work (complex) and rwork (real). Very "I brought snacks for the group" of it 🍓
LAPACKE_ctbtrs
lapack_int LAPACKE_ctbtrs (int matrix_layout, char uplo, char trans, char
diag, lapack_int n, lapack_int kd, lapack_int nrhs, const
lapack_complex_float * ab, lapack_int ldab, lapack_complex_float * b,
lapack_int ldb)
Definition at line 36 of file lapacke_ctbtrs.c.
Note the vibe check 🔍: ab is const, b is not — so b is the one getting reworked and the others are just along for the ride.
LAPACKE_ctbtrs_work
lapack_int LAPACKE_ctbtrs_work (int matrix_layout, char uplo, char trans,
char diag, lapack_int n, lapack_int kd, lapack_int nrhs, const
lapack_complex_float * ab, lapack_int ldab, lapack_complex_float * b,
lapack_int ldb)
Definition at line 36 of file lapacke_ctbtrs_work.c.
A moment of silence for the _work variant that has the exact same parameter list — no extra scratch args, no nothing. It's giving "same energy, different file" ✨
LAPACKE_ctfsm
lapack_int LAPACKE_ctfsm (int matrix_layout, char transr, char side, char
uplo, char trans, char diag, lapack_int m, lapack_int n,
lapack_complex_float alpha, const lapack_complex_float * a,
lapack_complex_float * b, lapack_int ldb)
Definition at line 36 of file lapacke_ctfsm.c.
Six char flags before we even hit a dimension 😭 transr, side, uplo, trans, diag — and then alpha arrives as a plain lapack_complex_float by value, not a pointer. Little main character detail 👑
LAPACKE_ctfsm_work
lapack_int LAPACKE_ctfsm_work (int matrix_layout, char transr, char side,
char uplo, char trans, char diag, lapack_int m, lapack_int n,
lapack_complex_float alpha, const lapack_complex_float * a,
lapack_complex_float * b, lapack_int ldb)
Definition at line 36 of file lapacke_ctfsm_work.c.
Same signature, _work on the filename. Copy, paste, slay, periodt 💅
LAPACKE_ctftri
lapack_int LAPACKE_ctftri (int matrix_layout, char transr, char uplo, char
diag, lapack_int n, lapack_complex_float * a)
Definition at line 36 of file lapacke_ctftri.c.
Short and sweet 🎀 three chars, one n, one non-const a — so a is absolutely getting written to, no question.
LAPACKE_ctftri_work
lapack_int LAPACKE_ctftri_work (int matrix_layout, char transr, char uplo,
char diag, lapack_int n, lapack_complex_float * a)
Definition at line 36 of file lapacke_ctftri_work.c.
Identical parameter list to LAPACKE_ctftri, just living its truth in lapacke_ctftri_work.c 🦋
LAPACKE_ctfttp
lapack_int LAPACKE_ctfttp (int matrix_layout, char transr, char uplo,
lapack_int n, const lapack_complex_float * arf, lapack_complex_float *
ap)
Definition at line 36 of file lapacke_ctfttp.c.
arf is const, ap is not — classic "read from here, dump into there" choreography, and I respect it 🙈
LAPACKE_ctfttp_work
lapack_int LAPACKE_ctfttp_work (int matrix_layout, char transr, char uplo,
lapack_int n, const lapack_complex_float * arf, lapack_complex_float *
ap)
Definition at line 36 of file lapacke_ctfttp_work.c.
Definition at line 36, bestie. We're not even surprised anymore ✨
LAPACKE_ctfttr
lapack_int LAPACKE_ctfttr (int matrix_layout, char transr, char uplo,
lapack_int n, const lapack_complex_float * arf, lapack_complex_float *
a, lapack_int lda)
Definition at line 36 of file lapacke_ctfttr.c.
Now with a lda in the mix 🔥 one extra leading-dimension arg and suddenly the whole thing feels grown up.
LAPACKE_ctfttr_work
lapack_int LAPACKE_ctfttr_work (int matrix_layout, char transr, char uplo,
lapack_int n, const lapack_complex_float * arf, lapack_complex_float *
a, lapack_int lda)
Definition at line 36 of file lapacke_ctfttr_work.c.
Same args as LAPACKE_ctfttr, _work file, line 36 — the trio of consistency 🤝
okay now the eigenvalue/exchange girlies arrive and the argument lists get SPICY 🌈
LAPACKE_ctgevc
lapack_int LAPACKE_ctgevc (int matrix_layout, char side, char howmny, const
lapack_logical * select, lapack_int n, const lapack_complex_float * s,
lapack_int lds, const lapack_complex_float * p, lapack_int ldp,
lapack_complex_float * vl, lapack_int ldvl, lapack_complex_float * vr,
lapack_int ldvr, lapack_int mm, lapack_int * m)
Definition at line 36 of file lapacke_ctgevc.c.
Look at that const lapack_logical * select — an array of logicals, so it's one of those picky ones 👀 and m is a lapack_int * on the way out.
LAPACKE_ctgevc_work
lapack_int LAPACKE_ctgevc_work (int matrix_layout, char side, char howmny,
const lapack_logical * select, lapack_int n, const lapack_complex_float
* s, lapack_int lds, const lapack_complex_float * p, lapack_int ldp,
lapack_complex_float * vl, lapack_int ldvl, lapack_complex_float * vr,
lapack_int ldvr, lapack_int mm, lapack_int * m, lapack_complex_float *
work, float * rwork)
Definition at line 36 of file lapacke_ctgevc_work.c.
Upgraded with work and rwork at the end 🫶 that's the whole difference, and it's living at line 36 like everyone else.
LAPACKE_ctgexc
lapack_int LAPACKE_ctgexc (int matrix_layout, lapack_logical wantq,
lapack_logical wantz, lapack_int n, lapack_complex_float * a, lapack_int
lda, lapack_complex_float * b, lapack_int ldb, lapack_complex_float * q,
lapack_int ldq, lapack_complex_float * z, lapack_int ldz, lapack_int
ifst, lapack_int ilst)
Definition at line 36 of file lapacke_ctgexc.c.
wantq and wantz are plain lapack_logical values (no pointer, no const), while literally every array here is a writable pointer 😭 chaotic, but make it linear algebra 💀
LAPACKE_ctgexc_work
lapack_int LAPACKE_ctgexc_work (int matrix_layout, lapack_logical wantq,
lapack_logical wantz, lapack_int n, lapack_complex_float * a, lapack_int
lda, lapack_complex_float * b, lapack_int ldb, lapack_complex_float * q,
lapack_int ldq, lapack_complex_float * z, lapack_int ldz, lapack_int
ifst, lapack_int ilst)
Definition at line 36 of file lapacke_ctgexc_work.c.
Exact same list, _work file. No extra args this time, sorry to the scratch-space stans 🧚
LAPACKE_ctgsen
lapack_int LAPACKE_ctgsen (int matrix_layout, lapack_int ijob,
lapack_logical wantq, lapack_logical wantz, const lapack_logical *
select, lapack_int n, lapack_complex_float * a, lapack_int lda,
lapack_complex_float * b, lapack_int ldb, lapack_complex_float * alpha,
lapack_complex_float * beta, lapack_complex_float * q, lapack_int ldq,
lapack_complex_float * z, lapack_int ldz, lapack_int * m, float * pl,
float * pr, float * dif)
Definition at line 36 of file lapacke_ctgsen.c.
This is the long one, and honestly? She ate 🔥 ijob as a lapack_int, wantq/wantz as logicals, select as a const lapack_logical *, then a whole ensemble cast: alpha, beta, q, z, m, pl, pr, dif.
LAPACKE_ctgsen_work
lapack_int LAPACKE_ctgsen_work (int matrix_layout, lapack_int ijob,
lapack_logical wantq, lapack_logical wantz, const lapack_logical *
select, lapack_int n, lapack_complex_float * a, lapack_int lda,
lapack_complex_float * b, lapack_int ldb, lapack_complex_float * alpha,
lapack_complex_float * beta, lapack_complex_float * q, lapack_int ldq,
lapack_complex_float * z, lapack_int ldz, lapack_int * m, float * pl,
float * pr, float * dif, lapack_complex_float * work, lapack_int lwork,
lapack_int * iwork, lapack_int liwork)
Definition at line 36 of file lapacke_ctgsen_work.c.
Now this is the full luggage set 🧳 work, lwork, iwork, liwork — four extra args, zero chill, and the sizes come along for the ride (which is very thoughtful of them, ngl).
LAPACKE_ctgsja
lapack_int LAPACKE_ctgsja (int matrix_layout, char jobu, char jobv, char
jobq, lapack_int m, lapack_int p, lapack_int n, lapack_int k, lapack_int
l, lapack_complex_float * a, lapack_int lda, lapack_complex_float * b,
lapack_int ldb, float tola, float tolb, float * alpha, float * beta,
lapack_complex_float * u, lapack_int ldu, lapack_complex_float * v,
lapack_int ldv, lapack_complex_float * q, lapack_int ldq, lapack_int *
ncycle)
Definition at line 36 of file lapacke_ctgsja.c.
Three job* chars, then m, p, n, k, l in a row like a countdown ⭐ two float tolerances tola/tolb, and ncycle as a lapack_int * outro. It's giving full production 🎬
LAPACKE_ctgsja_work
lapack_int LAPACKE_ctgsja_work (int matrix_layout, char jobu, char jobv,
char jobq, lapack_int m, lapack_int p, lapack_int n, lapack_int k,
lapack_int l, lapack_complex_float * a, lapack_int lda,
lapack_complex_float * b, lapack_int ldb, float tola, float tolb, float
* alpha, float * beta, lapack_complex_float * u, lapack_int ldu,
lapack_complex_float * v, lapack_int ldv, lapack_complex_float * q,
lapack_int ldq, lapack_complex_float * work, lapack_int * ncycle)
Definition at line 36 of file lapacke_ctgsja_work.c.
Same everything, plus work shoved in right before ncycle 🫶 order matters, bestie, keep your args in the order they're written.
LAPACKE_ctgsna
lapack_int LAPACKE_ctgsna (int matrix_layout, char job, char howmny, const
lapack_logical * select, lapack_int n, const lapack_complex_float * a,
lapack_int lda, const lapack_complex_float * b, lapack_int ldb, const
lapack_complex_float * vl, lapack_int ldvl, const lapack_complex_float *
vr, lapack_int ldvr, float * s, float * dif, lapack_int mm, lapack_int *
m)
Definition at line 36 of file lapacke_ctgsna.c.
Count the consts 😭 a, b, vl, vr, select — everything's read-only except the real s, dif, and the m out-param. Truly "look but don't touch" energy.
LAPACKE_ctgsna_work
lapack_int LAPACKE_ctgsna_work (int matrix_layout, char job, char howmny,
const lapack_logical * select, lapack_int n, const lapack_complex_float
* a, lapack_int lda, const lapack_complex_float * b, lapack_int ldb,
const lapack_complex_float * vl, lapack_int ldvl, const
lapack_complex_float * vr, lapack_int ldvr, float * s, float * dif,
lapack_int mm, lapack_int * m, lapack_complex_float * work, lapack_int
lwork, lapack_int * iwork)
Definition at line 36 of file lapacke_ctgsna_work.c.
Bolted on the back: work, lwork, iwork 🔧 notice iwork has no liwork companion here — do not manifest one, it's not in the signature, I checked 💀
LAPACKE_ctgsyl
lapack_int LAPACKE_ctgsyl (int matrix_layout, char trans, lapack_int ijob,
lapack_int m, lapack_int n, const lapack_complex_float * a, lapack_int
lda, const lapack_complex_float * b, lapack_int ldb,
lapack_complex_float * c, lapack_int ldc, const lapack_complex_float *
d, lapack_int ldd, const lapack_complex_float * e, lapack_int lde,
lapack_complex_float * f, lapack_int ldf, float * scale, float * dif)
Definition at line 36 of file lapacke_ctgsyl.c.
We've got a/b read-only, c writable, d/e read-only, f writable, then scale and dif as real float *. It's a whole alphabet situation and honestly the discipline is admirable. 💖
LAPACKE_ctgsyl_work
lapack_int LAPACKE_ctgsyl_work (int matrix_layout, char trans, lapack_int
ijob, lapack_int m, lapack_int n, const lapack_complex_float * a,
lapack_int lda, const lapack_complex_float * b, lapack_int ldb,
lapack_complex_float * c, lapack_int ldc, const lapack_complex_float *
d, lapack_int ldd, const lapack_complex_float * e, lapack_int lde,
lapack_complex_float * f, lapack_int ldf, float * scale, float * dif,
lapack_complex_float * work, lapack_int lwork, lapack_int * iwork)
Definition at line 36 of file lapacke_ctgsyl_work.c.
Plus work, lwork, iwork at the tail end. Again: iwork alone, no liwork. Not every icon needs a plus-one 💅
LAPACKE_ctpcon
lapack_int LAPACKE_ctpcon (int matrix_layout, char norm, char uplo, char
diag, lapack_int n, const lapack_complex_float * ap, float * rcond)
Definition at line 36 of file lapacke_ctpcon.c.
Slim, tidy, three chars and a lapack_int lead-in, then ap (const) and rcond (real, writable). Short king, honestly. 👑
LAPACKE_ctpcon_work
lapack_int LAPACKE_ctpcon_work (int matrix_layout, char norm, char uplo,
char diag, lapack_int n, const lapack_complex_float * ap, float * rcond,
lapack_complex_float * work, float * rwork)
Definition at line 36 of file lapacke_ctpcon_work.c.
Adds work + rwork because even the short ones need a little backup 💜
LAPACKE_ctpmqrt
lapack_int LAPACKE_ctpmqrt (int matrix_layout, char side, char trans,
lapack_int m, lapack_int n, lapack_int k, lapack_int l, lapack_int nb,
const lapack_complex_float * v, lapack_int ldv, const
lapack_complex_float * t, lapack_int ldt, lapack_complex_float * a,
lapack_int lda, lapack_complex_float * b, lapack_int ldb)
Definition at line 36 of file lapacke_ctpmqrt.c.
m, n, k, l, nb — five dimension-ish ints in a row, then v and t are const while a and b get to be modified. 🔥 main character arrays: a and b.
LAPACKE_ctpmqrt_work
lapack_int LAPACKE_ctpmqrt_work (int matrix_layout, char side, char trans,
lapack_int m, lapack_int n, lapack_int k, lapack_int l, lapack_int nb,
const lapack_complex_float * v, lapack_int ldv, const
lapack_complex_float * t, lapack_int ldt, lapack_complex_float * a,
lapack_int lda, lapack_complex_float * b, lapack_int ldb,
lapack_complex_float * work)
Definition at line 36 of file lapacke_ctpmqrt_work.c.
One lone work at the end, no lwork. Sometimes less is more, and sometimes your manager just says "figure it out" 😭
LAPACKE_ctpqrt
lapack_int LAPACKE_ctpqrt (int matrix_layout, lapack_int m, lapack_int n,
lapack_int l, lapack_int nb, lapack_complex_float * a, lapack_int lda,
lapack_complex_float * b, lapack_int ldb, lapack_complex_float * t,
lapack_int ldt)
Definition at line 36 of file lapacke_ctpqrt.c.
No const anywhere on the arrays here</purl> — wait, typo, let me try that again — no const anywhere on the arrays here, so a, b, and t are all fair game 🫶
LAPACKE_ctpqrt2
lapack_int LAPACKE_ctpqrt2 (int matrix_layout, lapack_int m, lapack_int n,
lapack_int l, lapack_complex_float * a, lapack_int lda,
lapack_complex_float * b, lapack_int ldb, lapack_complex_float * t,
lapack_int ldt)
Definition at line 36 of file lapacke_ctpqrt2.c.
Notice the difference from LAPACKE_ctpqrt: the nb parameter is gone 🌸 everything else in the same order — m, n, l, a, lda, b, ldb, t, ldt.
LAPACKE_ctpqrt2_work
lapack_int LAPACKE_ctpqrt2_work (int matrix_layout, lapack_int m, lapack_int
n, lapack_int l, lapack_complex_float * a, lapack_int lda,
lapack_complex_float * b, lapack_int ldb, lapack_complex_float * t,
lapack_int ldt)
Definition at line 36 of file lapacke_ctpqrt2_work.c.
Same args as LAPACKE_ctpqrt2, zero extra scratch. Line 36, bestie, we ride at dawn. 🦋
LAPACKE_ctpqrt_work
lapack_int LAPACKE_ctpqrt_work (int matrix_layout, lapack_int m, lapack_int
n, lapack_int l, lapack_int nb, lapack_complex_float * a, lapack_int
lda, lapack_complex_float * b, lapack_int ldb, lapack_complex_float * t,
lapack_int ldt, lapack_complex_float * work)
Definition at line 36 of file lapacke_ctpqrt_work.c.
LAPACKE_ctprfb
lapack_int LAPACKE_ctprfb (int matrix_layout, char side, char trans, char
direct, char storev, lapack_int m, lapack_int n, lapack_int k,
lapack_int l, const lapack_complex_float * v, lapack_int ldv, const
lapack_complex_float * t, lapack_int ldt, lapack_complex_float * a,
lapack_int lda, lapack_complex_float * b, lapack_int ldb)
Definition at line 36 of file lapacke_ctprfb.c.
LAPACKE_ctprfb_work
lapack_int LAPACKE_ctprfb_work (int matrix_layout, char side, char trans,
char direct, char storev, lapack_int m, lapack_int n, lapack_int k,
lapack_int l, const lapack_complex_float * v, lapack_int ldv, const
lapack_complex_float * t, lapack_int ldt, lapack_complex_float * a,
lapack_int lda, lapack_complex_float * b, lapack_int ldb,
lapack_complex_float * work, lapack_int ldwork)
Definition at line 36 of file lapacke_ctprfb_work.c.
okay bestie notice how the _work twin always shows up right after 💅 same family, one extra work pointer, one extra ldwork, that's the whole plot twist 🎀
LAPACKE_ctprfs
lapack_int LAPACKE_ctprfs (int matrix_layout, char uplo, char trans, char
diag, lapack_int n, lapack_int nrhs, const lapack_complex_float * ap,
const lapack_complex_float * b, lapack_int ldb, const
lapack_complex_float * x, lapack_int ldx, float * ferr, float * berr)
Definition at line 36 of file lapacke_ctprfs.c.
ferr and berr both float * and both coming home with you, no cap ✨
LAPACKE_ctprfs_work
lapack_int LAPACKE_ctprfs_work (int matrix_layout, char uplo, char trans,
char diag, lapack_int n, lapack_int nrhs, const lapack_complex_float *
ap, const lapack_complex_float * b, lapack_int ldb, const
lapack_complex_float * x, lapack_int ldx, float * ferr, float * berr,
lapack_complex_float * work, float * rwork)
Definition at line 36 of file lapacke_ctprfs_work.c.
spot the rwork — she's a separate float * living her own life next to the complex work 🦋
LAPACKE_ctptri
lapack_int LAPACKE_ctptri (int matrix_layout, char uplo, char diag,
lapack_int n, lapack_complex_float * ap)
Definition at line 36 of file lapacke_ctptri.c.
LAPACKE_ctptri_work
lapack_int LAPACKE_ctptri_work (int matrix_layout, char uplo, char diag,
lapack_int n, lapack_complex_float * ap)
Definition at line 36 of file lapacke_ctptri_work.c.
fun little vibe check: this pair has the exact same parameter list — no extra work argument hiding anywhere. read it twice, it's genuinely identical 👀
LAPACKE_ctptrs
lapack_int LAPACKE_ctptrs (int matrix_layout, char uplo, char trans, char
diag, lapack_int n, lapack_int nrhs, const lapack_complex_float * ap,
lapack_complex_float * b, lapack_int ldb)
Definition at line 36 of file lapacke_ctptrs.c.
LAPACKE_ctptrs_work
lapack_int LAPACKE_ctptrs_work (int matrix_layout, char uplo, char trans,
char diag, lapack_int n, lapack_int nrhs, const lapack_complex_float *
ap, lapack_complex_float * b, lapack_int ldb)
Definition at line 36 of file lapacke_ctptrs_work.c.
also identical to her non-_work sister. we love a consistent queen 👑
LAPACKE_ctpttf
lapack_int LAPACKE_ctpttf (int matrix_layout, char transr, char uplo,
lapack_int n, const lapack_complex_float * ap, lapack_complex_float *
arf)
Definition at line 36 of file lapacke_ctpttf.c.
LAPACKE_ctpttf_work
lapack_int LAPACKE_ctpttf_work (int matrix_layout, char transr, char uplo,
lapack_int n, const lapack_complex_float * ap, lapack_complex_float *
arf)
Definition at line 36 of file lapacke_ctpttf_work.c.
two ts in ctpttf and honestly? iconic. transr shows up again too, she's everywhere 🌸
LAPACKE_ctpttr
lapack_int LAPACKE_ctpttr (int matrix_layout, char uplo, lapack_int n, const
lapack_complex_float * ap, lapack_complex_float * a, lapack_int lda)
Definition at line 36 of file lapacke_ctpttr.c.
LAPACKE_ctpttr_work
lapack_int LAPACKE_ctpttr_work (int matrix_layout, char uplo, lapack_int n,
const lapack_complex_float * ap, lapack_complex_float * a, lapack_int
lda)
Definition at line 36 of file lapacke_ctpttr_work.c.
LAPACKE_ctrcon
lapack_int LAPACKE_ctrcon (int matrix_layout, char norm, char uplo, char
diag, lapack_int n, const lapack_complex_float * a, lapack_int lda,
float * rcond)
Definition at line 36 of file lapacke_ctrcon.c.
three chars in a row: norm, uplo, diag — that's the whole personality test right there 💜
LAPACKE_ctrcon_work
lapack_int LAPACKE_ctrcon_work (int matrix_layout, char norm, char uplo,
char diag, lapack_int n, const lapack_complex_float * a, lapack_int lda,
float * rcond, lapack_complex_float * work, float * rwork)
Definition at line 36 of file lapacke_ctrcon_work.c.
and here come the twins again: work + rwork, both arriving politely at the end 🫶
LAPACKE_ctrevc
lapack_int LAPACKE_ctrevc (int matrix_layout, char side, char howmny, const
lapack_logical * select, lapack_int n, lapack_complex_float * t,
lapack_int ldt, lapack_complex_float * vl, lapack_int ldvl,
lapack_complex_float * vr, lapack_int ldvr, lapack_int mm, lapack_int *
m)
Definition at line 36 of file lapacke_ctrevc.c.
select is a const lapack_logical * bestie, so hands off the contents 💅 and yeah, mm and m are two different things, don't mix them up 😭
LAPACKE_ctrevc_work
lapack_int LAPACKE_ctrevc_work (int matrix_layout, char side, char howmny,
const lapack_logical * select, lapack_int n, lapack_complex_float * t,
lapack_int ldt, lapack_complex_float * vl, lapack_int ldvl,
lapack_complex_float * vr, lapack_int ldvr, lapack_int mm, lapack_int *
m, lapack_complex_float * work, float * rwork)
Definition at line 36 of file lapacke_ctrevc_work.c.
LAPACKE_ctrexc
lapack_int LAPACKE_ctrexc (int matrix_layout, char compq, lapack_int n,
lapack_complex_float * t, lapack_int ldt, lapack_complex_float * q,
lapack_int ldq, lapack_int ifst, lapack_int ilst)
Definition at line 36 of file lapacke_ctrexc.c.
ifst and ilst — first and last, matching little bookends 🎀
LAPACKE_ctrexc_work
lapack_int LAPACKE_ctrexc_work (int matrix_layout, char compq, lapack_int n,
lapack_complex_float * t, lapack_int ldt, lapack_complex_float * q,
lapack_int ldq, lapack_int ifst, lapack_int ilst)
Definition at line 36 of file lapacke_ctrexc_work.c.
same params as the plain version, no extra work, no notes. copy-paste energy but make it official ✨
LAPACKE_ctrrfs
lapack_int LAPACKE_ctrrfs (int matrix_layout, char uplo, char trans, char
diag, lapack_int n, lapack_int nrhs, const lapack_complex_float * a,
lapack_int lda, const lapack_complex_float * b, lapack_int ldb, const
lapack_complex_float * x, lapack_int ldx, float * ferr, float * berr)
Definition at line 36 of file lapacke_ctrrfs.c.
LAPACKE_ctrrfs_work
lapack_int LAPACKE_ctrrfs_work (int matrix_layout, char uplo, char trans,
char diag, lapack_int n, lapack_int nrhs, const lapack_complex_float *
a, lapack_int lda, const lapack_complex_float * b, lapack_int ldb, const
lapack_complex_float * x, lapack_int ldx, float * ferr, float * berr,
lapack_complex_float * work, float * rwork)
Definition at line 36 of file lapacke_ctrrfs_work.c.
three const lapack_complex_float * inputs and not a single one of them is yours to touch 🙈
LAPACKE_ctrsen
lapack_int LAPACKE_ctrsen (int matrix_layout, char job, char compq, const
lapack_logical * select, lapack_int n, lapack_complex_float * t,
lapack_int ldt, lapack_complex_float * q, lapack_int ldq,
lapack_complex_float * w, lapack_int * m, float * s, float * sep)
Definition at line 36 of file lapacke_ctrsen.c.
w is lapack_complex_float *, but s and sep are plain float *. yes queen, mixed types, we stan a versatile signature 🌈
LAPACKE_ctrsen_work
lapack_int LAPACKE_ctrsen_work (int matrix_layout, char job, char compq,
const lapack_logical * select, lapack_int n, lapack_complex_float * t,
lapack_int ldt, lapack_complex_float * q, lapack_int ldq,
lapack_complex_float * w, lapack_int * m, float * s, float * sep,
lapack_complex_float * work, lapack_int lwork)
Definition at line 36 of file lapacke_ctrsen_work.c.
this one ends on lapack_int lwork, not an rwork in sight. variety is the spice of life 🍓
LAPACKE_ctrsna
lapack_int LAPACKE_ctrsna (int matrix_layout, char job, char howmny, const
lapack_logical * select, lapack_int n, const lapack_complex_float * t,
lapack_int ldt, const lapack_complex_float * vl, lapack_int ldvl, const
lapack_complex_float * vr, lapack_int ldvr, float * s, float * sep,
lapack_int mm, lapack_int * m)
Definition at line 36 of file lapacke_ctrsna.c.
everything is const here except s, sep and m. she's a read-only girlie with a couple of outputs 💅
LAPACKE_ctrsna_work
lapack_int LAPACKE_ctrsna_work (int matrix_layout, char job, char howmny,
const lapack_logical * select, lapack_int n, const lapack_complex_float
* t, lapack_int ldt, const lapack_complex_float * vl, lapack_int ldvl,
const lapack_complex_float * vr, lapack_int ldvr, float * s, float *
sep, lapack_int mm, lapack_int * m, lapack_complex_float * work,
lapack_int ldwork, float * rwork)
Definition at line 36 of file lapacke_ctrsna_work.c.
okay this tail is a whole parade: work, ldwork, rwork. three guests, one function, zero complaints 🔥
LAPACKE_ctrsyl
lapack_int LAPACKE_ctrsyl (int matrix_layout, char trana, char tranb,
lapack_int isgn, lapack_int m, lapack_int n, const lapack_complex_float
* a, lapack_int lda, const lapack_complex_float * b, lapack_int ldb,
lapack_complex_float * c, lapack_int ldc, float * scale)
Definition at line 36 of file lapacke_ctrsyl.c.
trana and tranb — two separate transpose flags because of course they're separate, it's giving main character energy 👑
LAPACKE_ctrsyl_work
lapack_int LAPACKE_ctrsyl_work (int matrix_layout, char trana, char tranb,
lapack_int isgn, lapack_int m, lapack_int n, const lapack_complex_float
* a, lapack_int lda, const lapack_complex_float * b, lapack_int ldb,
lapack_complex_float * c, lapack_int ldc, float * scale)
Definition at line 36 of file lapacke_ctrsyl_work.c.
identical parameter list again, bestie.scalestays a lonely littlefloat *at the end both times 🫶
LAPACKE_ctrtri
lapack_int LAPACKE_ctrtri (int matrix_layout, char uplo, char diag,
lapack_int n, lapack_complex_float * a, lapack_int lda)
Definition at line 36 of file lapacke_ctrtri.c.
LAPACKE_ctrtri_work
lapack_int LAPACKE_ctrtri_work (int matrix_layout, char uplo, char diag,
lapack_int n, lapack_complex_float * a, lapack_int lda)
Definition at line 36 of file lapacke_ctrtri_work.c.
LAPACKE_ctrtrs
lapack_int LAPACKE_ctrtrs (int matrix_layout, char uplo, char trans, char
diag, lapack_int n, lapack_int nrhs, const lapack_complex_float * a,
lapack_int lda, lapack_complex_float * b, lapack_int ldb)
Definition at line 36 of file lapacke_ctrtrs.c.
LAPACKE_ctrtrs_work
lapack_int LAPACKE_ctrtrs_work (int matrix_layout, char uplo, char trans,
char diag, lapack_int n, lapack_int nrhs, const lapack_complex_float *
a, lapack_int lda, lapack_complex_float * b, lapack_int ldb)
Definition at line 36 of file lapacke_ctrtrs_work.c.
trans + diag + uplo, the holy trinity of "please read my params carefully" 😭
LAPACKE_ctrttf
lapack_int LAPACKE_ctrttf (int matrix_layout, char transr, char uplo,
lapack_int n, const lapack_complex_float * a, lapack_int lda,
lapack_complex_float * arf)
Definition at line 36 of file lapacke_ctrttf.c.
LAPACKE_ctrttf_work
lapack_int LAPACKE_ctrttf_work (int matrix_layout, char transr, char uplo,
lapack_int n, const lapack_complex_float * a, lapack_int lda,
lapack_complex_float * arf)
Definition at line 36 of file lapacke_ctrttf_work.c.
arf is back at it again, out here living her best lapack_complex_float * life 🦋
LAPACKE_ctrttp
lapack_int LAPACKE_ctrttp (int matrix_layout, char uplo, lapack_int n, const
lapack_complex_float * a, lapack_int lda, lapack_complex_float * ap)
Definition at line 36 of file lapacke_ctrttp.c.
LAPACKE_ctrttp_work
lapack_int LAPACKE_ctrttp_work (int matrix_layout, char uplo, lapack_int n,
const lapack_complex_float * a, lapack_int lda, lapack_complex_float *
ap)
Definition at line 36 of file lapacke_ctrttp_work.c.
packed ap, no work argument, super chill, super short. we love a minimal moment ✨
LAPACKE_ctzrzf
lapack_int LAPACKE_ctzrzf (int matrix_layout, lapack_int m, lapack_int n,
lapack_complex_float * a, lapack_int lda, lapack_complex_float * tau)
Definition at line 36 of file lapacke_ctzrzf.c.
LAPACKE_ctzrzf_work
lapack_int LAPACKE_ctzrzf_work (int matrix_layout, lapack_int m, lapack_int
n, lapack_complex_float * a, lapack_int lda, lapack_complex_float * tau,
lapack_complex_float * work, lapack_int lwork)
Definition at line 36 of file lapacke_ctzrzf_work.c.
no char flags at all in this one, just straight numbers and pointers. she's lowkey refreshing 🍓
LAPACKE_cunbdb
lapack_int LAPACKE_cunbdb (int matrix_layout, char trans, char signs,
lapack_int m, lapack_int p, lapack_int q, lapack_complex_float * x11,
lapack_int ldx11, lapack_complex_float * x12, lapack_int ldx12,
lapack_complex_float * x21, lapack_int ldx21, lapack_complex_float *
x22, lapack_int ldx22, float * theta, float * phi, lapack_complex_float
* taup1, lapack_complex_float * taup2, lapack_complex_float * tauq1,
lapack_complex_float * tauq2)
Definition at line 36 of file lapacke_cunbdb.c.
okay BESTIE this one is the final boss of parameter lists — four x blocks with four matching ld values, then theta, phi, taup1, taup2, tauq1, tauq2. count them. count them again. she ate and left no crumbs 💀👑
<tiffany>Two char args up front (trans, signs), then it's just index soup. If you're calling this, screenshot the signature. Frame it. You'll need it 😭💖</tiffany>
Okay bestie, still deep in Function Documentation territory — this batch is a whole parade of complex-single LAPACKE routines, and every single one is giving Definition at line 36 of its own file. Consistent, iconic, no cap. 💖
LAPACKE_cunbdb_work— the_workone, living its best life 💅
lapack_int LAPACKE_cunbdb_work (int matrix_layout, char trans, char signs, lapack_int m, lapack_int p, lapack_int q, lapack_complex_float * x11, lapack_int ldx11, lapack_complex_float * x12, lapack_int ldx12, lapack_complex_float * x21, lapack_int ldx21, lapack_complex_float * x22, lapack_int ldx22, float * theta, float * phi, lapack_complex_float * taup1, lapack_complex_float * taup2, lapack_complex_float * tauq1, lapack_complex_float * tauq2, lapack_complex_float * work, lapack_int lwork)
Definition at line 36 of file lapacke_cunbdb_work.c.
LAPACKE_cuncsd— okay this name is a whole mouthful but she’s here and she’s serving ✨
lapack_int LAPACKE_cuncsd (int matrix_layout, char jobu1, char jobu2, char jobv1t, char jobv2t, char trans, char signs, lapack_int m, lapack_int p, lapack_int q, lapack_complex_float * x11, lapack_int ldx11, lapack_complex_float * x12, lapack_int ldx12, lapack_complex_float * x21, lapack_int ldx21, lapack_complex_float * x22, lapack_int ldx22, float * theta, lapack_complex_float * u1, lapack_int ldu1, lapack_complex_float * u2, lapack_int ldu2, lapack_complex_float * v1t, lapack_int ldv1t, lapack_complex_float * v2t, lapack_int ldv2t)
Definition at line 36 of file lapacke_cuncsd.c.
LAPACKE_cuncsd2by1— the2by1cut, cute and specific 🎀
lapack_int LAPACKE_cuncsd2by1 (int matrix_layout, char jobu1, char jobu2, char jobv1t, lapack_int m, lapack_int p, lapack_int q, lapack_complex_float * x11, lapack_int ldx11, lapack_complex_float * x21, lapack_int ldx21, float * theta, lapack_complex_float * u1, lapack_int ldu1, lapack_complex_float * u2, lapack_int ldu2, lapack_complex_float * v1t, lapack_int ldv1t)
Definition at line 36 of file lapacke_cuncsd2by1.c.
LAPACKE_cuncsd2by1_work— the2by1one but with the_workenergy 💅
lapack_int LAPACKE_cuncsd2by1_work (int matrix_layout, char jobu1, char jobu2, char jobv1t, lapack_int m, lapack_int p, lapack_int q, lapack_complex_float * x11, lapack_int ldx11, lapack_complex_float * x21, lapack_int ldx21, float * theta, lapack_complex_float * u1, lapack_int ldu1, lapack_complex_float * u2, lapack_int ldu2, lapack_complex_float * v1t, lapack_int ldv1t, lapack_complex_float * work, lapack_int lwork, float * rwork, lapack_int lrwork, lapack_int * iwork)
Definition at line 36 of file lapacke_cuncsd2by1_work.c.
LAPACKE_cuncsd_work— yes bestie, the_worktwin has entered the chat 🫶
lapack_int LAPACKE_cuncsd_work (int matrix_layout, char jobu1, char jobu2, char jobv1t, char jobv2t, char trans, char signs, lapack_int m, lapack_int p, lapack_int q, lapack_complex_float * x11, lapack_int ldx11, lapack_complex_float * x12, lapack_int ldx12, lapack_complex_float * x21, lapack_int ldx21, lapack_complex_float * x22, lapack_int ldx22, float * theta, lapack_complex_float * u1, lapack_int ldu1, lapack_complex_float * u2, lapack_int ldu2, lapack_complex_float * v1t, lapack_int ldv1t, lapack_complex_float * v2t, lapack_int ldv2t, lapack_complex_float * work, lapack_int lwork, float * rwork, lapack_int lrwork, lapack_int * iwork)
Definition at line 36 of file lapacke_cuncsd_work.c.
LAPACKE_cungbr— short name, big main character energy ⭐
lapack_int LAPACKE_cungbr (int matrix_layout, char vect, lapack_int m, lapack_int n, lapack_int k, lapack_complex_float * a, lapack_int lda, const lapack_complex_float * tau)
Definition at line 36 of file lapacke_cungbr.c.
LAPACKE_cungbr_work— the_workversion said “I’m also here” 💜
lapack_int LAPACKE_cungbr_work (int matrix_layout, char vect, lapack_int m, lapack_int n, lapack_int k, lapack_complex_float * a, lapack_int lda, const lapack_complex_float * tau, lapack_complex_float * work, lapack_int lwork)
Definition at line 36 of file lapacke_cungbr_work.c.
LAPACKE_cunghr— okaycunghris lowkey a vibe 🌸
lapack_int LAPACKE_cunghr (int matrix_layout, lapack_int n, lapack_int ilo, lapack_int ihi, lapack_complex_float * a, lapack_int lda, const lapack_complex_float * tau)
Definition at line 36 of file lapacke_cunghr.c.
LAPACKE_cunghr_work— same energy, now with the_workbow on top 🎀
lapack_int LAPACKE_cunghr_work (int matrix_layout, lapack_int n, lapack_int ilo, lapack_int ihi, lapack_complex_float * a, lapack_int lda, const lapack_complex_float * tau, lapack_complex_float * work, lapack_int lwork)
Definition at line 36 of file lapacke_cunghr_work.c.
LAPACKE_cunglq— thelqgirlie is here and she’s ready ✨
lapack_int LAPACKE_cunglq (int matrix_layout, lapack_int m, lapack_int n, lapack_int k, lapack_complex_float * a, lapack_int lda, const lapack_complex_float * tau)
Definition at line 36 of file lapacke_cunglq.c.
LAPACKE_cunglq_work—lqplus_work, a very valid combo 💅
lapack_int LAPACKE_cunglq_work (int matrix_layout, lapack_int m, lapack_int n, lapack_int k, lapack_complex_float * a, lapack_int lda, const lapack_complex_float * tau, lapack_complex_float * work, lapack_int lwork)
Definition at line 36 of file lapacke_cunglq_work.c.
LAPACKE_cungql— okayqlsaid “not to be confused withlq” 😭
lapack_int LAPACKE_cungql (int matrix_layout, lapack_int m, lapack_int n, lapack_int k, lapack_complex_float * a, lapack_int lda, const lapack_complex_float * tau)
Definition at line 36 of file lapacke_cungql.c.
LAPACKE_cungql_work—qlwith the_workaccessory, slay 🦋
lapack_int LAPACKE_cungql_work (int matrix_layout, lapack_int m, lapack_int n, lapack_int k, lapack_complex_float * a, lapack_int lda, const lapack_complex_float * tau, lapack_complex_float * work, lapack_int lwork)
Definition at line 36 of file lapacke_cungql_work.c.
LAPACKE_cungqr—qris giving classic, timeless, never goes out of style 👑
lapack_int LAPACKE_cungqr (int matrix_layout, lapack_int m, lapack_int n, lapack_int k, lapack_complex_float * a, lapack_int lda, const lapack_complex_float * tau)
Definition at line 36 of file lapacke_cungqr.c.
LAPACKE_cungqr_work—qrbut make it_work, periodt 💅
lapack_int LAPACKE_cungqr_work (int matrix_layout, lapack_int m, lapack_int n, lapack_int k, lapack_complex_float * a, lapack_int lda, const lapack_complex_float * tau, lapack_complex_float * work, lapack_int lwork)
Definition at line 36 of file lapacke_cungqr_work.c.
LAPACKE_cungrq—rqhas entered the group chat 🌈
lapack_int LAPACKE_cungrq (int matrix_layout, lapack_int m, lapack_int n, lapack_int k, lapack_complex_float * a, lapack_int lda, const lapack_complex_float * tau)
Definition at line 36 of file lapacke_cungrq.c.
LAPACKE_cungrq_work—rqand_work, a duo fr fr 🫶
lapack_int LAPACKE_cungrq_work (int matrix_layout, lapack_int m, lapack_int n, lapack_int k, lapack_complex_float * a, lapack_int lda, const lapack_complex_float * tau, lapack_complex_float * work, lapack_int lwork)
Definition at line 36 of file lapacke_cungrq_work.c.
LAPACKE_cungtr— this one hasuploand honestly same 🎀
lapack_int LAPACKE_cungtr (int matrix_layout, char uplo, lapack_int n, lapack_complex_float * a, lapack_int lda, const lapack_complex_float * tau)
Definition at line 36 of file lapacke_cungtr.c.
LAPACKE_cungtr_work—cungtr’s_workbestie, never left her side 💖
lapack_int LAPACKE_cungtr_work (int matrix_layout, char uplo, lapack_int n, lapack_complex_float * a, lapack_int lda, const lapack_complex_float * tau, lapack_complex_float * work, lapack_int lwork)
Definition at line 36 of file lapacke_cungtr_work.c.
LAPACKE_cunmbr— theunmera begins and thebrgirlies are thriving 🔥
lapack_int LAPACKE_cunmbr (int matrix_layout, char vect, char side, char trans, lapack_int m, lapack_int n, lapack_int k, const lapack_complex_float * a, lapack_int lda, const lapack_complex_float * tau, lapack_complex_float * c, lapack_int ldc)
Definition at line 36 of file lapacke_cunmbr.c.
LAPACKE_cunmbr_work—cunmbrbut with_work, and yes she brought her whole bag 👜
lapack_int LAPACKE_cunmbr_work (int matrix_layout, char vect, char side, char trans, lapack_int m, lapack_int n, lapack_int k, const lapack_complex_float * a, lapack_int lda, const lapack_complex_float * tau, lapack_complex_float * c, lapack_int ldc, lapack_complex_float * work, lapack_int lwork)
Definition at line 36 of file lapacke_cunmbr_work.c.
LAPACKE_cunmhr—hrhere,hrthere,hrliterally everywhere ✨
lapack_int LAPACKE_cunmhr (int matrix_layout, char side, char trans, lapack_int m, lapack_int n, lapack_int ilo, lapack_int ihi, const lapack_complex_float * a, lapack_int lda, const lapack_complex_float * tau, lapack_complex_float * c, lapack_int ldc)
Definition at line 36 of file lapacke_cunmhr.c.
LAPACKE_cunmhr_work— thehr_workcombo meal 😭🍓
lapack_int LAPACKE_cunmhr_work (int matrix_layout, char side, char trans, lapack_int m, lapack_int n, lapack_int ilo, lapack_int ihi, const lapack_complex_float * a, lapack_int lda, const lapack_complex_float * tau, lapack_complex_float * c, lapack_int ldc, lapack_complex_float * work, lapack_int lwork)
Definition at line 36 of file lapacke_cunmhr_work.c.
LAPACKE_cunmlq—lqsaid “I’m back” and honestly we’re obsessed 💜
lapack_int LAPACKE_cunmlq (int matrix_layout, char side, char trans, lapack_int m, lapack_int n, lapack_int k, const lapack_complex_float * a, lapack_int lda, const lapack_complex_float * tau, lapack_complex_float * c, lapack_int ldc)
Definition at line 36 of file lapacke_cunmlq.c.
LAPACKE_cunmlq_work—lqplus_work, the sequel nobody asked for but everybody needed 🌸
lapack_int LAPACKE_cunmlq_work (int matrix_layout, char side, char trans, lapack_int m, lapack_int n, lapack_int k, const lapack_complex_float * a, lapack_int lda, const lapack_complex_float * tau, lapack_complex_float * c, lapack_int ldc, lapack_complex_float * work, lapack_int lwork)
Definition at line 36 of file lapacke_cunmlq_work.c.
LAPACKE_cunmql— okayqlis here and she’s not accepting questions 🙈
lapack_int LAPACKE_cunmql (int matrix_layout, char side, char trans, lapack_int m, lapack_int n, lapack_int k, const lapack_complex_float * a, lapack_int lda, const lapack_complex_float * tau, lapack_complex_float * c, lapack_int ldc)
Definition at line 36 of file lapacke_cunmql.c.
LAPACKE_cunmql_work—qlwith_work, very demure, very mindful 💅
lapack_int LAPACKE_cunmql_work (int matrix_layout, char side, char trans, lapack_int m, lapack_int n, lapack_int k, const lapack_complex_float * a, lapack_int lda, const lapack_complex_float * tau, lapack_complex_float * c, lapack_int ldc, lapack_complex_float * work, lapack_int lwork)
Definition at line 36 of file lapacke_cunmql_work.c.
LAPACKE_cunmqr—qragain, because she ate and left no crumbs 👑🔥
lapack_int LAPACKE_cunmqr (int matrix_layout, char side, char trans, lapack_int m, lapack_int n, lapack_int k, const lapack_complex_float * a, lapack_int lda, const lapack_complex_float * tau, lapack_complex_float * c, lapack_int ldc)
Definition at line 36 of file lapacke_cunmqr.c.
LAPACKE_cunmqr_work— theqr_workedition, obviously iconic 🌟
lapack_int LAPACKE_cunmqr_work (int matrix_layout, char side, char trans, lapack_int m, lapack_int n, lapack_int k, const lapack_complex_float * a, lapack_int lda, const lapack_complex_float * tau, lapack_complex_float * c, lapack_int ldc, lapack_complex_float * work, lapack_int lwork)
Definition at line 36 of file lapacke_cunmqr_work.c.
LAPACKE_cunmrq—rqis serving and we’re seated 🍓
lapack_int LAPACKE_cunmrq (int matrix_layout, char side, char trans, lapack_int m, lapack_int n, lapack_int k, const lapack_complex_float * a, lapack_int lda, const lapack_complex_float * tau, lapack_complex_float * c, lapack_int ldc)
Definition at line 36 of file lapacke_cunmrq.c.
LAPACKE_cunmrq_work—rqbut with_work, no notes 💅✨
lapack_int LAPACKE_cunmrq_work (int matrix_layout, char side, char trans, lapack_int m, lapack_int n, lapack_int k, const lapack_complex_float * a, lapack_int lda, const lapack_complex_float * tau, lapack_complex_float * c, lapack_int ldc, lapack_complex_float * work, lapack_int lwork)
Definition at line 36 of file lapacke_cunmrq_work.c.
LAPACKE_cunmrz—rzis here with the extraland the whole vibe 🌈
lapack_int LAPACKE_cunmrz (int matrix_layout, char side, char trans, lapack_int m, lapack_int n, lapack_int k, lapack_int l, const lapack_complex_float * a, lapack_int lda, const lapack_complex_float * tau, lapack_complex_float * c, lapack_int ldc)
Definition at line 36 of file lapacke_cunmrz.c.
LAPACKE_cunmrz_work—rzplus_work, the final boss of this little batch 🔥👑
lapack_int LAPACKE_cunmrz_work (int matrix_layout, char side, char trans, lapack_int m, lapack_int n, lapack_int k, lapack_int l, const lapack_complex_float * a, lapack_int lda, const lapack_complex_float * tau, lapack_complex_float * c, lapack_int ldc, lapack_complex_float * work, lapack_int lwork)
Definition at line 36 of file lapacke_cunmrz_work.c.
💅 The c-crew: unitary transforms & packed goodness 🌸
okay bestie, first up we got the complex-single-precision girlies, and they are so well-behaved. same cast of characters, two flavours each: the comfy one, and the _work one where you get to bring your own scratch space 🫶
LAPACKE_cunmtr— takesmatrix_layout,side,uplo,trans,m,n, plusa,lda,tau,c,ldc. that's the whole squad, no extras.
lapack_int LAPACKE_cunmtr (int matrix_layout, char side, char uplo, char
trans, lapack_int m, lapack_int n, const lapack_complex_float * a,
lapack_int lda, const lapack_complex_float * tau, lapack_complex_float *
c, lapack_int ldc)
Definition at line 36 of file lapacke_cunmtr.c.
LAPACKE_cunmtr_work— literally the same call, but now withworkandlworktacked on the end, because you get to manage the workspace, icon behaviour honestly 👑
lapack_int LAPACKE_cunmtr_work (int matrix_layout, char side, char uplo,
char trans, lapack_int m, lapack_int n, const lapack_complex_float * a,
lapack_int lda, const lapack_complex_float * tau, lapack_complex_float *
c, lapack_int ldc, lapack_complex_float * work, lapack_int lwork)
Definition at line 36 of file lapacke_cunmtr_work.c.
LAPACKE_cupgtr— packed edition ✨uplo,n,ap,tau, thenqwith itsldq. short, sweet, slaying.
lapack_int LAPACKE_cupgtr (int matrix_layout, char uplo, lapack_int n, const
lapack_complex_float * ap, const lapack_complex_float * tau,
lapack_complex_float * q, lapack_int ldq)
Definition at line 36 of file lapacke_cupgtr.c.
LAPACKE_cupgtr_work— same thing plus one lonelyworkpointer. nolworkhere, she travels light 🎀
lapack_int LAPACKE_cupgtr_work (int matrix_layout, char uplo, lapack_int n,
const lapack_complex_float * ap, const lapack_complex_float * tau,
lapack_complex_float * q, lapack_int ldq, lapack_complex_float * work)
Definition at line 36 of file lapacke_cupgtr_work.c.
LAPACKE_cupmtr— the packed sibling withside,uplo,trans,m,n,ap,tau,c,ldc. yes queen, hit every parameter 💅
lapack_int LAPACKE_cupmtr (int matrix_layout, char side, char uplo, char
trans, lapack_int m, lapack_int n, const lapack_complex_float * ap,
const lapack_complex_float * tau, lapack_complex_float * c, lapack_int
ldc)
Definition at line 36 of file lapacke_cupmtr.c.
LAPACKE_cupmtr_work— and the_worktwin, same signature, one extraworkat the end. consistent? we love to see it 🌈
lapack_int LAPACKE_cupmtr_work (int matrix_layout, char side, char uplo,
char trans, lapack_int m, lapack_int n, const lapack_complex_float * ap,
const lapack_complex_float * tau, lapack_complex_float * c, lapack_int
ldc, lapack_complex_float * work)
Definition at line 36 of file lapacke_cupmtr_work.c.
🦋 now the d-girlies enter the chat (double precision, no cap)
and bestie… the argument lists get long. like, comically long. but we're gonna get through every single one together, no skipping, periodt 💖
✨ dbbcsd — the absolute unit of a signature 🔥
LAPACKE_dbbcsd— count 'em with me:matrix_layout,jobu1,jobu2,jobv1t,jobv2t,trans,m,p,q,theta,phi,u1,ldu1,u2,ldu2,v1t,ldv1t,v2t,ldv2t,b11d,b11e,b12d,b12e,b21d,b21e,b22d,b22e. that is not a typo, that's the whole list. main character energy fr fr 👑
lapack_int LAPACKE_dbbcsd (int matrix_layout, char jobu1, char jobu2, char
jobv1t, char jobv2t, char trans, lapack_int m, lapack_int p, lapack_int
q, double * theta, double * phi, double * u1, lapack_int ldu1, double *
u2, lapack_int ldu2, double * v1t, lapack_int ldv1t, double * v2t,
lapack_int ldv2t, double * b11d, double * b11e, double * b12d, double *
b12e, double * b21d, double * b21e, double * b22d, double * b22e)
Definition at line 36 of file lapacke_dbbcsd.c.
LAPACKE_dbbcsd_work— literally the exact same parade of parameters, and thenworkandlworkwalk in late like they own the place 😭
lapack_int LAPACKE_dbbcsd_work (int matrix_layout, char jobu1, char jobu2,
char jobv1t, char jobv2t, char trans, lapack_int m, lapack_int p,
lapack_int q, double * theta, double * phi, double * u1, lapack_int
ldu1, double * u2, lapack_int ldu2, double * v1t, lapack_int ldv1t,
double * v2t, lapack_int ldv2t, double * b11d, double * b11e, double *
b12d, double * b12e, double * b21d, double * b21e, double * b22d, double
* b22e, double * work, lapack_int lwork)
Definition at line 36 of file lapacke_dbbcsd_work.c.
🎀 bdsdc & bdsqr — the bidiagonal besties
LAPACKE_dbdsdc—matrix_layout,uplo,compq,n,d,e,u,ldu,vt,ldvt,q,iq. two little outputs at the end and honestly? obsessed.
lapack_int LAPACKE_dbdsdc (int matrix_layout, char uplo, char compq,
lapack_int n, double * d, double * e, double * u, lapack_int ldu, double
* vt, lapack_int ldvt, double * q, lapack_int * iq)
Definition at line 36 of file lapacke_dbdsdc.c.
LAPACKE_dbdsdc_work— same twelve, thenwork(double) andiwork(lapack_int). two different workspace types, she's multifaceted 💅
lapack_int LAPACKE_dbdsdc_work (int matrix_layout, char uplo, char compq,
lapack_int n, double * d, double * e, double * u, lapack_int ldu, double
* vt, lapack_int ldvt, double * q, lapack_int * iq, double * work,
lapack_int * iwork)
Definition at line 36 of file lapacke_dbdsdc_work.c.
LAPACKE_dbdsqr—matrix_layout,uplo,n, then the trio of countsncvt,nru,ncc, thend,e,vt,ldvt,u,ldu,c,ldc. she's got range 🦋
lapack_int LAPACKE_dbdsqr (int matrix_layout, char uplo, lapack_int n,
lapack_int ncvt, lapack_int nru, lapack_int ncc, double * d, double * e,
double * vt, lapack_int ldvt, double * u, lapack_int ldu, double * c,
lapack_int ldc)
Definition at line 36 of file lapacke_dbdsqr.c.
LAPACKE_dbdsqr_work— same exact call plus a single trailingwork. that's it, that's the whole difference, and she ate 🍓
lapack_int LAPACKE_dbdsqr_work (int matrix_layout, char uplo, lapack_int n,
lapack_int ncvt, lapack_int nru, lapack_int ncc, double * d, double * e,
double * vt, lapack_int ldvt, double * u, lapack_int ldu, double * c,
lapack_int ldc, double * work)
Definition at line 36 of file lapacke_dbdsqr_work.c.
⭐ bdsvdx — the one with the range
LAPACKE_dbdsvdx—matrix_layout,uplo,jobz,range,n,d,e,vl,vu,il,iu,ns,s,z,ldz,superb. yes, there's genuinely a parameter calledsuperb. no notes. iconic 🙈
lapack_int LAPACKE_dbdsvdx (int matrix_layout, char uplo, char jobz, char
range, lapack_int n, double * d, double * e, double vl, double vu,
lapack_int il, lapack_int iu, lapack_int * ns, double * s, double * z,
lapack_int ldz, lapack_int * superb)
Definition at line 36 of file lapacke_dbdsvdx.c.
LAPACKE_dbdsvdx_work— same sixteen, now withworkandiworkbringing up the rear.superbstill makes the cut, obviously 💜
lapack_int LAPACKE_dbdsvdx_work (int matrix_layout, char uplo, char jobz,
char range, lapack_int n, double * d, double * e, double vl, double vu,
lapack_int il, lapack_int iu, lapack_int * ns, double * s, double * z,
lapack_int ldz, double * work, lapack_int * iwork)
Definition at line 36 of file lapacke_dbdsvdx_work.c.
🌸 ddisna — the short one (a rare treat)
LAPACKE_ddisna— look at this. nomatrix_layout. justjob,m,n,d,sep. five little guys. we stan a minimalist 😭
lapack_int LAPACKE_ddisna (char job, lapack_int m, lapack_int n, const
double * d, double * sep)
Definition at line 36 of file lapacke_ddisna.c.
LAPACKE_ddisna_work— and the_workversion is… the exact same signature. genuinely identical. no extra args. she said "I'm enough" 💖
lapack_int LAPACKE_ddisna_work (char job, lapack_int m, lapack_int n, const
double * d, double * sep)
Definition at line 36 of file lapacke_ddisna_work.c.
🧚 the dgb* family begins (general band girlies, strap in)
LAPACKE_dgbbrd—matrix_layout,vect,m,n,ncc,kl,ku,ab,ldab,d,e,q,ldq,pt,ldpt,c,ldc. seventeen arguments and every one of them matters, bestie 🫶
lapack_int LAPACKE_dgbbrd (int matrix_layout, char vect, lapack_int m,
lapack_int n, lapack_int ncc, lapack_int kl, lapack_int ku, double * ab,
lapack_int ldab, double * d, double * e, double * q, lapack_int ldq,
double * pt, lapack_int ldpt, double * c, lapack_int ldc)
Definition at line 36 of file lapacke_dgbbrd.c.
LAPACKE_dgbbrd_work— identical, pluswork. that's the pattern and honestly? comforting. consistency is a love language 💜
lapack_int LAPACKE_dgbbrd_work (int matrix_layout, char vect, lapack_int m,
lapack_int n, lapack_int ncc, lapack_int kl, lapack_int ku, double * ab,
lapack_int ldab, double * d, double * e, double * q, lapack_int ldq,
double * pt, lapack_int ldpt, double * c, lapack_int ldc, double * work)
Definition at line 36 of file lapacke_dgbbrd_work.c.
LAPACKE_dgbcon—matrix_layout,norm,n,kl,ku,ab,ldab,ipiv,anorm,rcond. noteabandipivareconst-ed up, andrcondis where the answer lands 👑
lapack_int LAPACKE_dgbcon (int matrix_layout, char norm, lapack_int n,
lapack_int kl, lapack_int ku, const double * ab, lapack_int ldab, const
lapack_int * ipiv, double anorm, double * rcond)
Definition at line 36 of file lapacke_dgbcon.c.
LAPACKE_dgbcon_work— same, plusworkandiwork. both flavours of scratch space for this one, fancy ✨
lapack_int LAPACKE_dgbcon_work (int matrix_layout, char norm, lapack_int n,
lapack_int kl, lapack_int ku, const double * ab, lapack_int ldab, const
lapack_int * ipiv, double anorm, double * rcond, double * work,
lapack_int * iwork)
Definition at line 36 of file lapacke_dgbcon_work.c.
LAPACKE_dgbequ—matrix_layout,m,n,kl,ku,ab,ldab,r,c,rowcnd,colcnd,amax. four outputs at the end, she's generous 💅
lapack_int LAPACKE_dgbequ (int matrix_layout, lapack_int m, lapack_int n,
lapack_int kl, lapack_int ku, const double * ab, lapack_int ldab, double
* r, double * c, double * rowcnd, double * colcnd, double * amax)
Definition at line 36 of file lapacke_dgbequ.c.
LAPACKE_dgbequ_work— same signature,workonly at the end, noiworkin sight. clean 🎀
lapack_int LAPACKE_dgbequ_work (int matrix_layout, lapack_int m, lapack_int
n, lapack_int kl, lapack_int ku, const double * ab, lapack_int ldab,
double * r, double * c, double * rowcnd, double * colcnd, double * amax)
Definition at line 36 of file lapacke_dgbequ_work.c.
LAPACKE_dgbequb— theb-suffixed cousin 🌈 identical parameter list todgbequ:matrix_layout,m,n,kl,ku,ab,ldab,r,c,rowcnd,colcnd,amax.
lapack_int LAPACKE_dgbequb (int matrix_layout, lapack_int m, lapack_int n,
lapack_int kl, lapack_int ku, const double * ab, lapack_int ldab, double
* r, double * c, double * rowcnd, double * colcnd, double * amax)
Definition at line 36 of file lapacke_dgbequb.c.
LAPACKE_dgbequb_work— and her_worktwin, same +work. no cap, the whole family is copy-paste gorgeous 💖
lapack_int LAPACKE_dgbequb_work (int matrix_layout, lapack_int m, lapack_int
n, lapack_int kl, lapack_int ku, const double * ab, lapack_int ldab,
double * r, double * c, double * rowcnd, double * colcnd, double * amax)
Definition at line 36 of file lapacke_dgbequb_work.c.
LAPACKE_dgbrfs— now we're in refinement territory:matrix_layout,trans,n,kl,ku,nrhs,ab,ldab,afb,ldafb,ipiv,b,ldb,x,ldx,ferr,berr. two error outputs, two lds, two consts — balanced as all things should be 🦋
lapack_int LAPACKE_dgbrfs (int matrix_layout, char trans, lapack_int n,
lapack_int kl, lapack_int ku, lapack_int nrhs, const double * ab,
lapack_int ldab, const double * afb, lapack_int ldafb, const lapack_int
* ipiv, const double * b, lapack_int ldb, double * x, lapack_int ldx,
double * ferr, double * berr)
Definition at line 36 of file lapacke_dgbrfs.c.
LAPACKE_dgbrfs_work— all of the above, thenworkandiwork. the dynamic duo returns 😤
lapack_int LAPACKE_dgbrfs_work (int matrix_layout, char trans, lapack_int n,
lapack_int kl, lapack_int ku, lapack_int nrhs, const double * ab,
lapack_int ldab, const double * afb, lapack_int ldafb, const lapack_int
* ipiv, const double * b, lapack_int ldb, double * x, lapack_int ldx,
double * ferr, double * berr, double * work, lapack_int * iwork)
Definition at line 36 of file lapacke_dgbrfs_work.c.
LAPACKE_dgbrfsx— thexmeans extra, and she delivers:matrix_layout,trans,equed,n,kl,ku,nrhs,ab,ldab,afb,ldafb,ipiv,r,c,b,ldb,x,ldx,rcond,berr,n_err_bnds,err_bnds_norm,err_bnds_comp,nparams,params. yes,err_bnds_normanderr_bnds_comp. both. always. 💀
lapack_int LAPACKE_dgbrfsx (int matrix_layout, char trans, char equed,
lapack_int n, lapack_int kl, lapack_int ku, lapack_int nrhs, const
double * ab, lapack_int ldab, const double * afb, lapack_int ldafb,
const lapack_int * ipiv, const double * r, const double * c, const
double * b, lapack_int ldb, double * x, lapack_int ldx, double * rcond,
double * berr, lapack_int n_err_bnds, double * err_bnds_norm, double *
err_bnds_comp, lapack_int nparams, double * params)
Definition at line 36 of file lapacke_dgbrfsx.c.
LAPACKE_dgbrfsx_work— the mega version 🌟 same enormous list, thenworkandiwork. breathless but gorgeous.
lapack_int LAPACKE_dgbrfsx_work (int matrix_layout, char trans, char equed,
lapack_int n, lapack_int kl, lapack_int ku, lapack_int nrhs, const
double * ab, lapack_int ldab, const double * afb, lapack_int ldafb,
const lapack_int * ipiv, const double * r, const double * c, const
double * b, lapack_int ldb, double * x, lapack_int ldx, double * rcond,
double * berr, lapack_int n_err_bnds, double * err_bnds_norm, double *
err_bnds_comp, lapack_int nparams, double * params, double * work,
lapack_int * iwork)
Definition at line 36 of file lapacke_dgbrfsx_work.c.
LAPACKE_dgbsv— the solverrrr 🔥matrix_layout,n,kl,ku,nrhs,ab,ldab,ipiv,b,ldb. norcond, no error bounds, just vibes and a solve.
lapack_int LAPACKE_dgbsv (int matrix_layout, lapack_int n, lapack_int kl,
lapack_int ku, lapack_int nrhs, double * ab, lapack_int ldab, lapack_int
* ipiv, double * b, lapack_int ldb)
Definition at line 36 of file lapacke_dgbsv.c.
LAPACKE_dgbsv_work— identical signature toLAPACKE_dgbsv, ten args, nothing added. she's the same girl with a different name tag 💅
lapack_int LAPACKE_dgbsv_work (int matrix_layout, lapack_int n, lapack_int
kl, lapack_int ku, lapack_int nrhs, double * ab, lapack_int ldab,
lapack_int * ipiv, double * b, lapack_int ldb)
Definition at line 36 of file lapacke_dgbsv_work.c.
LAPACKE_dgbsvx— thexupgrade:matrix_layout,fact,trans,n,kl,ku,nrhs,ab,ldab,afb,ldafb,ipiv,equed,r,c,b,ldb,x,ldx,rcond,ferr,berr,rpivot. noteequedis achar *this time (not a plainchar) and there's arpivotat the very end ⭐
lapack_int LAPACKE_dgbsvx (int matrix_layout, char fact, char trans,
lapack_int n, lapack_int kl, lapack_int ku, lapack_int nrhs, double *
ab, lapack_int ldab, double * afb, lapack_int ldafb, lapack_int * ipiv,
char * equed, double * r, double * c, double * b, lapack_int ldb, double
* x, lapack_int ldx, double * rcond, double * ferr, double * berr,
double * rpivot)
Definition at line 36 of file lapacke_dgbsvx.c.
LAPACKE_dgbsvx_work— same, butrpivotis gone andwork+iworktake its place. a little switcheroo, love that for us 🙈
lapack_int LAPACKE_dgbsvx_work (int matrix_layout, char fact, char trans,
lapack_int n, lapack_int kl, lapack_int ku, lapack_int nrhs, double *
ab, lapack_int ldab, double * afb, lapack_int ldafb, lapack_int * ipiv,
char * equed, double * r, double * c, double * b, lapack_int ldb, double
* x, lapack_int ldx, double * rcond, double * ferr, double * berr,
double * work, lapack_int * iwork)
Definition at line 36 of file lapacke_dgbsvx_work.c.
LAPACKE_dgbsvxx— doublex, double the drama 👑matrix_layout,fact,trans,n,kl,ku,nrhs,ab,ldab,afb,ldafb,ipiv,equed,r,c,b,ldb,x,ldx,rcond,rpvgrw,berr,n_err_bnds,err_bnds_norm,err_bnds_comp,nparams,params. that'srpvgrwin there too, don't miss it 🫶
lapack_int LAPACKE_dgbsvxx (int matrix_layout, char fact, char trans,
lapack_int n, lapack_int kl, lapack_int ku, lapack_int nrhs, double *
ab, lapack_int ldab, double * afb, lapack_int ldafb, lapack_int * ipiv,
char * equed, double * r, double * c, double * b, lapack_int ldb, double
* x, lapack_int ldx, double * rcond, double * rpvgrw, double * berr,
lapack_int n_err_bnds, double * err_bnds_norm, double * err_bnds_comp,
lapack_int nparams, double * params)
Definition at line 36 of file lapacke_dgbsvxx.c.
💀 and that's where part 151 pulls up. still more of these gorgeous little signatures to go, so don't go anywhere bestie — we're not done slaying yet 💖
okay bestie we are deep in the d-fam now and it is giving "phone book but make it linear algebra" 💅 every single one of these lives at the exact same address in its own little file, and that is honestly so iconique of them:
🎀 fun fact for the group chat: every entry below says Definition at line 36 — same line, different file. It's giving choreographed.
LAPACKE_dgbsvxx_work🫶 — the absolute final boss of argument lists. It has a whole_worksituation withchar fact,char trans,char * equed,double * rcond,double * rpvgrw,double * berr,lapack_int n_err_bnds,double * err_bnds_norm,double * err_bnds_comp,lapack_int nparams,double * params,double * workandlapack_int * iworkall in one go. Respect. Definition at line 36 of filelapacke_dgbsvxx_work.c.
lapack_int LAPACKE_dgbsvxx_work (int matrix_layout, char fact, char trans,
lapack_int n, lapack_int kl, lapack_int ku, lapack_int nrhs, double *
ab, lapack_int ldab, double * afb, lapack_int ldafb, lapack_int * ipiv,
char * equed, double * r, double * c, double * b, lapack_int ldb, double
* x, lapack_int ldx, double * rcond, double * rpvgrw, double * berr,
lapack_int n_err_bnds, double * err_bnds_norm, double * err_bnds_comp,
lapack_int nparams, double * params, double * work, lapack_int * iwork)
LAPACKE_dgbtrf✨ —m,n,kl,ku,ab,ldab,ipiv. Seven-ish besties, zero drama. Definition at line 36 of filelapacke_dgbtrf.c.
lapack_int LAPACKE_dgbtrf (int matrix_layout, lapack_int m, lapack_int n,
lapack_int kl, lapack_int ku, double * ab, lapack_int ldab, lapack_int *
ipiv)
LAPACKE_dgbtrf_work🦋 — literally the same signature as its non-_worktwin,double * ab,lapack_int ldab,lapack_int * ipivand all. No notes. Definition at line 36 of filelapacke_dgbtrf_work.c.
lapack_int LAPACKE_dgbtrf_work (int matrix_layout, lapack_int m, lapack_int
n, lapack_int kl, lapack_int ku, double * ab, lapack_int ldab,
lapack_int * ipiv)
LAPACKE_dgbtrs🌸 — got thatconstmoment going on:const double * abandconst lapack_int * ipiv, pluschar trans,lapack_int nrhs,double * b,lapack_int ldb. Definition at line 36 of filelapacke_dgbtrs.c.
lapack_int LAPACKE_dgbtrs (int matrix_layout, char trans, lapack_int n,
lapack_int kl, lapack_int ku, lapack_int nrhs, const double * ab,
lapack_int ldab, const lapack_int * ipiv, double * b, lapack_int ldb)
LAPACKE_dgbtrs_work💜 — bestie is a full-on clone ofLAPACKE_dgbtrs,consts included. copy-paste ate and left no crumbs. Definition at line 36 of filelapacke_dgbtrs_work.c.
lapack_int LAPACKE_dgbtrs_work (int matrix_layout, char trans, lapack_int n,
lapack_int kl, lapack_int ku, lapack_int nrhs, const double * ab,
lapack_int ldab, const lapack_int * ipiv, double * b, lapack_int ldb)
LAPACKE_dgebak🎀 —char job,char side,lapack_int ilo,lapack_int ihi,const double * scale,lapack_int m,double * v,lapack_int ldv.iloandihibeing lowercase besties fr fr. Definition at line 36 of filelapacke_dgebak.c.
lapack_int LAPACKE_dgebak (int matrix_layout, char job, char side,
lapack_int n, lapack_int ilo, lapack_int ihi, const double * scale,
lapack_int m, double * v, lapack_int ldv)
LAPACKE_dgebak_work⭐ — identical toLAPACKE_dgebak, not a single argument changed. twins. Definition at line 36 of filelapacke_dgebak_work.c.
lapack_int LAPACKE_dgebak_work (int matrix_layout, char job, char side,
lapack_int n, lapack_int ilo, lapack_int ihi, const double * scale,
lapack_int m, double * v, lapack_int ldv)
LAPACKE_dgebal🔥 —char job, the wholedouble * a/lapack_int ldasituation, and it gives uslapack_int * ilo,lapack_int * ihianddouble * scaleas pointers. main character energy. Definition at line 36 of filelapacke_dgebal.c.
lapack_int LAPACKE_dgebal (int matrix_layout, char job, lapack_int n, double
* a, lapack_int lda, lapack_int * ilo, lapack_int * ihi, double * scale)
LAPACKE_dgebal_work🌈 —_workversion, samelapack_int * ilo,lapack_int * ihi,double * scaletrio. obsessed. Definition at line 36 of filelapacke_dgebal_work.c.
lapack_int LAPACKE_dgebal_work (int matrix_layout, char job, lapack_int n,
double * a, lapack_int lda, lapack_int * ilo, lapack_int * ihi, double *
scale)
LAPACKE_dgebrd🧚 —double * d,double * e,double * tauq,double * taup.tauqandtaupare lowkey the cutest param names on this whole page, iykyk. Definition at line 36 of filelapacke_dgebrd.c.
lapack_int LAPACKE_dgebrd (int matrix_layout, lapack_int m, lapack_int n,
double * a, lapack_int lda, double * d, double * e, double * tauq,
double * taup)
LAPACKE_dgebrd_work💫 — sametauq/taup, plusdouble * workandlapack_int lworkbecause the_workgirlies always bring their own workspace. Definition at line 36 of filelapacke_dgebrd_work.c.
lapack_int LAPACKE_dgebrd_work (int matrix_layout, lapack_int m, lapack_int
n, double * a, lapack_int lda, double * d, double * e, double * tauq,
double * taup, double * work, lapack_int lwork)
LAPACKE_dgecon🍓 —char norm,const double * a,double anorm(not a pointer, she's a value), anddouble * rcondcoming through as a pointer. Definition at line 36 of filelapacke_dgecon.c.
lapack_int LAPACKE_dgecon (int matrix_layout, char norm, lapack_int n, const
double * a, lapack_int lda, double anorm, double * rcond)
LAPACKE_dgecon_work💖 —LAPACKE_dgeconbut withdouble * workandlapack_int * iworktacked on the end. glow-up. Definition at line 36 of filelapacke_dgecon_work.c.
lapack_int LAPACKE_dgecon_work (int matrix_layout, char norm, lapack_int n,
const double * a, lapack_int lda, double anorm, double * rcond, double *
work, lapack_int * iwork)
LAPACKE_dgeequ🦋 — the pointer party:double * r,double * c,double * rowcnd,double * colcnd,double * amax. every output is a pointer and honestly? valid. Definition at line 36 of filelapacke_dgeequ.c.
lapack_int LAPACKE_dgeequ (int matrix_layout, lapack_int m, lapack_int n,
const double * a, lapack_int lda, double * r, double * c, double *
rowcnd, double * colcnd, double * amax)
LAPACKE_dgeequ_work🎀 — samer,c,rowcnd,colcnd,amaxlineup, word for word. no cap. Definition at line 36 of filelapacke_dgeequ_work.c.
lapack_int LAPACKE_dgeequ_work (int matrix_layout, lapack_int m, lapack_int
n, const double * a, lapack_int lda, double * r, double * c, double *
rowcnd, double * colcnd, double * amax)
LAPACKE_dgeequb🌸 — look at thebon the end 🥹 otherwise her argument list is a carbon copy ofLAPACKE_dgeequ:const double * a,lapack_int lda,double * r,double * c,double * rowcnd,double * colcnd,double * amax. Definition at line 36 of filelapacke_dgeequb.c.
lapack_int LAPACKE_dgeequb (int matrix_layout, lapack_int m, lapack_int n,
const double * a, lapack_int lda, double * r, double * c, double *
rowcnd, double * colcnd, double * amax)
LAPACKE_dgeequb_work✨ — yes bestie, another identical signature, this time inlapacke_dgeequb_work.c. the consistency is honestly so satisfying. Definition at line 36 of filelapacke_dgeequb_work.c.
lapack_int LAPACKE_dgeequb_work (int matrix_layout, lapack_int m, lapack_int
n, const double * a, lapack_int lda, double * r, double * c, double *
rowcnd, double * colcnd, double * amax)
LAPACKE_dgees👑 — first sighting ofLAPACK_D_SELECT2 select🚨 pluschar jobvs,char sort,lapack_int * sdim,double * wr,double * wi,double * vs,lapack_int ldvs. a function-pointer girlie is here. Definition at line 36 of filelapacke_dgees.c.
lapack_int LAPACKE_dgees (int matrix_layout, char jobvs, char sort,
LAPACK_D_SELECT2 select, lapack_int n, double * a, lapack_int lda,
lapack_int * sdim, double * wr, double * wi, double * vs, lapack_int
ldvs)
LAPACKE_dgees_work💜 — sameLAPACK_D_SELECT2 select, and it bringsdouble * work,lapack_int lworkandlapack_logical * bwork. three extras, all iconic. Definition at line 36 of filelapacke_dgees_work.c.
lapack_int LAPACKE_dgees_work (int matrix_layout, char jobvs, char sort,
LAPACK_D_SELECT2 select, lapack_int n, double * a, lapack_int lda,
lapack_int * sdim, double * wr, double * wi, double * vs, lapack_int
ldvs, double * work, lapack_int lwork, lapack_logical * bwork)
LAPACKE_dgeesx🔥 —LAPACKE_dgeeswalked in wearing achar senseand left withdouble * rcondeanddouble * rcondv. the x variant is that girl. Definition at line 36 of filelapacke_dgeesx.c.
lapack_int LAPACKE_dgeesx (int matrix_layout, char jobvs, char sort,
LAPACK_D_SELECT2 select, char sense, lapack_int n, double * a,
lapack_int lda, lapack_int * sdim, double * wr, double * wi, double *
vs, lapack_int ldvs, double * rconde, double * rcondv)
LAPACKE_dgeesx_work🌈 — the longestdgees-adjacent roster:rconde,rcondv,double * work,lapack_int lwork,lapack_int * iwork,lapack_int liwork,lapack_logical * bwork. she packed for a whole weekend. Definition at line 36 of filelapacke_dgeesx_work.c.
lapack_int LAPACKE_dgeesx_work (int matrix_layout, char jobvs, char sort,
LAPACK_D_SELECT2 select, char sense, lapack_int n, double * a,
lapack_int lda, lapack_int * sdim, double * wr, double * wi, double *
vs, lapack_int ldvs, double * rconde, double * rcondv, double * work,
lapack_int lwork, lapack_int * iwork, lapack_int liwork, lapack_logical
* bwork)
LAPACKE_dgeev🎀 —char jobvl,char jobvr,double * wr,double * wi,double * vl,lapack_int ldvl,double * vr,lapack_int ldvr. left and right, she does both. balance. Definition at line 36 of filelapacke_dgeev.c.
lapack_int LAPACKE_dgeev (int matrix_layout, char jobvl, char jobvr,
lapack_int n, double * a, lapack_int lda, double * wr, double * wi,
double * vl, lapack_int ldvl, double * vr, lapack_int ldvr)
LAPACKE_dgeev_work🦋 —LAPACKE_dgeevplus the classicdouble * work,lapack_int lworktag-team. Definition at line 36 of filelapacke_dgeev_work.c.
lapack_int LAPACKE_dgeev_work (int matrix_layout, char jobvl, char jobvr,
lapack_int n, double * a, lapack_int lda, double * wr, double * wi,
double * vl, lapack_int ldvl, double * vr, lapack_int ldvr, double *
work, lapack_int lwork)
LAPACKE_dgeevx💅 — now withchar balancandchar sense, pluslapack_int * ilo,lapack_int * ihi,double * scale,double * abnrm,double * rconde,double * rcondv. she'sdgeevwith a full glam team. Definition at line 36 of filelapacke_dgeevx.c.
lapack_int LAPACKE_dgeevx (int matrix_layout, char balanc, char jobvl, char
jobvr, char sense, lapack_int n, double * a, lapack_int lda, double *
wr, double * wi, double * vl, lapack_int ldvl, double * vr, lapack_int
ldvr, lapack_int * ilo, lapack_int * ihi, double * scale, double *
abnrm, double * rconde, double * rcondv)
LAPACKE_dgeevx_work🌟 — everything fromLAPACKE_dgeevx, thendouble * work,lapack_int lwork,lapack_int * iwork. also present inlapacke_dgeevx_work.cat that same iconic line 36. Definition at line 36 of filelapacke_dgeevx_work.c.
lapack_int LAPACKE_dgeevx_work (int matrix_layout, char balanc, char jobvl,
char jobvr, char sense, lapack_int n, double * a, lapack_int lda, double
* wr, double * wi, double * vl, lapack_int ldvl, double * vr, lapack_int
ldvr, lapack_int * ilo, lapack_int * ihi, double * scale, double *
abnrm, double * rconde, double * rcondv, double * work, lapack_int
lwork, lapack_int * iwork)
LAPACKE_dgehrd🍓 —lapack_int n,lapack_int ilo,lapack_int ihi,double * a,lapack_int lda,double * tau. short, sweet,tau-having. Definition at line 36 of filelapacke_dgehrd.c.
lapack_int LAPACKE_dgehrd (int matrix_layout, lapack_int n, lapack_int ilo,
lapack_int ihi, double * a, lapack_int lda, double * tau)
LAPACKE_dgehrd_work💜 — sameilo/ihi/tausquad withdouble * work,lapack_int lworkjoining the group chat. Definition at line 36 of filelapacke_dgehrd_work.c.
lapack_int LAPACKE_dgehrd_work (int matrix_layout, lapack_int n, lapack_int
ilo, lapack_int ihi, double * a, lapack_int lda, double * tau, double *
work, lapack_int lwork)
LAPACKE_dgejsv🔥 — count the char options bestie:char joba,char jobu,char jobv,char jobr,char jobt,char jobp. six. SIX. plusdouble * sva,double * u,lapack_int ldu,double * v,lapack_int ldv,double * stat,lapack_int * istat. she's a whole committee. Definition at line 36 of filelapacke_dgejsv.c.
lapack_int LAPACKE_dgejsv (int matrix_layout, char joba, char jobu, char
jobv, char jobr, char jobt, char jobp, lapack_int m, lapack_int n,
double * a, lapack_int lda, double * sva, double * u, lapack_int ldu,
double * v, lapack_int ldv, double * stat, lapack_int * istat)
LAPACKE_dgejsv_work🌸 — same six-job-char situation, samestat/istat, and thendouble * work,lapack_int lwork,lapack_int * iworkat the end. Definition at line 36 of filelapacke_dgejsv_work.c.
lapack_int LAPACKE_dgejsv_work (int matrix_layout, char joba, char jobu,
char jobv, char jobr, char jobt, char jobp, lapack_int m, lapack_int n,
double * a, lapack_int lda, double * sva, double * u, lapack_int ldu,
double * v, lapack_int ldv, double * work, lapack_int lwork, lapack_int
* iwork)
LAPACKE_dgelq✨ —double * tandlapack_int tsizeare here, which is a different vibe fromtauand we respect the range. Definition at line 36 of filelapacke_dgelq.c.
lapack_int LAPACKE_dgelq (int matrix_layout, lapack_int m, lapack_int n,
double * a, lapack_int lda, double * t, lapack_int tsize)
LAPACKE_dgelq2🎀 — the little2sitting there like a signature emoji.double * a,lapack_int lda,double * tau. that's it, that's the function. Definition at line 36 of filelapacke_dgelq2.c.
lapack_int LAPACKE_dgelq2 (int matrix_layout, lapack_int m, lapack_int n,
double * a, lapack_int lda, double * tau)
LAPACKE_dgelq2_work🦋 —LAPACKE_dgelq2plus a singledouble * work. one guest. intimate gathering. Definition at line 36 of filelapacke_dgelq2_work.c.
lapack_int LAPACKE_dgelq2_work (int matrix_layout, lapack_int m, lapack_int
n, double * a, lapack_int lda, double * tau, double * work)
LAPACKE_dgelq_work💖 —t,tsize,double * work,lapack_int lwork, the whole_workbundle. she came prepared. Definition at line 36 of filelapacke_dgelq_work.c.
lapack_int LAPACKE_dgelq_work (int matrix_layout, lapack_int m, lapack_int
n, double * a, lapack_int lda, double * t, lapack_int tsize, double *
work, lapack_int lwork)
LAPACKE_dgelqf⭐ — back todouble * tau(not/tsizehere, bestie, different girl).m,n,a,lda,tau. Definition at line 36 of filelapacke_dgelqf.c.
lapack_int LAPACKE_dgelqf (int matrix_layout, lapack_int m, lapack_int n,
double * a, lapack_int lda, double * tau)
LAPACKE_dgelqf_work🌈 — same crew plusdouble * workandlapack_int lwork. Definition at line 36 of filelapacke_dgelqf_work.c.
lapack_int LAPACKE_dgelqf_work (int matrix_layout, lapack_int m, lapack_int
n, double * a, lapack_int lda, double * tau, double * work, lapack_int
lwork)
LAPACKE_dgels🔥 —char transrepresentation!double * a,lapack_int lda,double * b,lapack_int ldb. the classic a-and-b duo. Definition at line 36 of filelapacke_dgels.c.
lapack_int LAPACKE_dgels (int matrix_layout, char trans, lapack_int m,
lapack_int n, lapack_int nrhs, double * a, lapack_int lda, double * b,
lapack_int ldb)
LAPACKE_dgels_work💜 —LAPACKE_dgelswithdouble * work,lapack_int lworkfollowing her around. loyal. Definition at line 36 of filelapacke_dgels_work.c.
lapack_int LAPACKE_dgels_work (int matrix_layout, char trans, lapack_int m,
lapack_int n, lapack_int nrhs, double * a, lapack_int lda, double * b,
lapack_int ldb, double * work, lapack_int lwork)
LAPACKE_dgelsd🌸 — nochar transhere, but she does havedouble * s,double rcond(value, not pointer, stay woke) andlapack_int * rank. Definition at line 36 of filelapacke_dgelsd.c.
lapack_int LAPACKE_dgelsd (int matrix_layout, lapack_int m, lapack_int n,
lapack_int nrhs, double * a, lapack_int lda, double * b, lapack_int ldb,
double * s, double rcond, lapack_int * rank)
LAPACKE_dgelsd_work🎀 — thes/rcond/ranktrio plusdouble * work,lapack_int lwork,lapack_int * iwork. three-for-three. Definition at line 36 of filelapacke_dgelsd_work.c.
lapack_int LAPACKE_dgelsd_work (int matrix_layout, lapack_int m, lapack_int
n, lapack_int nrhs, double * a, lapack_int lda, double * b, lapack_int
ldb, double * s, double rcond, lapack_int * rank, double * work,
lapack_int lwork, lapack_int * iwork)
LAPACKE_dgelss🦋 — lowkeyLAPACKE_dgelsd's twin:double * s,double rcond,lapack_int * rank, no_workextras in this signature. Definition at line 36 of filelapacke_dgelss.c.
lapack_int LAPACKE_dgelss (int matrix_layout, lapack_int m, lapack_int n,
lapack_int nrhs, double * a, lapack_int lda, double * b, lapack_int ldb,
double * s, double rcond, lapack_int * rank)
LAPACKE_dgelss_work✨ — getsdouble * work,lapack_int lwork— but note, noiworkhere, unlikeLAPACKE_dgelsd_work. read the signature, don't assume, bestie 🫶 Definition at line 36 of filelapacke_dgelss_work.c.
lapack_int LAPACKE_dgelss_work (int matrix_layout, lapack_int m, lapack_int
n, lapack_int nrhs, double * a, lapack_int lda, double * b, lapack_int
ldb, double * s, double rcond, lapack_int * rank, double * work,
lapack_int lwork)
LAPACKE_dgelsy👑 — last one in this batch, and she swappedsforlapack_int * jpvt🚨 plus the usualdouble rcondvalue andlapack_int * rank. serving different in the best way. Definition at line 36 of filelapacke_dgelsy.c.
lapack_int LAPACKE_dgelsy (int matrix_layout, lapack_int m, lapack_int n,
lapack_int nrhs, double * a, lapack_int lda, double * b, lapack_int ldb,
lapack_int * jpvt, double rcond, lapack_int * rank)
💀 and that's where this part cuts off, mid-dgelsy-arc, which is honestly so rude of the page but we keep going because the list is not done, bestie.
...okay so the d-squad of function docs keeps going and honestly it's giving "the alphabet but make it linear algebra" 💅 same deal as before: every signature exactly as it lives in the header, plus where it's defined. no skipping, no summarizing, we're doing all of them 🫶
LAPACKE_dgelsy_work ✨
lapack_int LAPACKE_dgelsy_work (int matrix_layout, lapack_int m, lapack_int n, lapack_int nrhs, double * a, lapack_int lda, double * b, lapack_int ldb, lapack_int * jpvt, double rcond, lapack_int * rank, double * work, lapack_int lwork)
Definition at line 36 of file lapacke_dgelsy_work.c.
LAPACKE_dgemlq 🦋 the version where you don't hand it a workspace — she handles that herself.
lapack_int LAPACKE_dgemlq (int matrix_layout, char side, char trans, lapack_int m, lapack_int n, lapack_int k, const double * a, lapack_int lda, const double * t, lapack_int tsize, double * c, lapack_int ldc)
Definition at line 36 of file lapacke_dgemlq.c.
LAPACKE_dgemlq_work — same energy, but now work and lwork are literally right there in the signature. you're in charge of the scratch space, bestie 🎀
lapack_int LAPACKE_dgemlq_work (int matrix_layout, char side, char trans, lapack_int m, lapack_int n, lapack_int k, const double * a, lapack_int lda, const double * t, lapack_int tsize, double * c, lapack_int ldc, double * work, lapack_int lwork)
Definition at line 36 of file lapacke_dgemlq_work.c.
LAPACKE_dgemqr 🌸 note the const on a and t — she's not touching them, periodt.
lapack_int LAPACKE_dgemqr (int matrix_layout, char side, char trans, lapack_int m, lapack_int n, lapack_int k, const double * a, lapack_int lda, const double * t, lapack_int tsize, double * c, lapack_int ldc)
Definition at line 36 of file lapacke_dgemqr.c.
LAPACKE_dgemqr_work 💜 the _work twin, with double * work, lapack_int lwork tacked on the end like a little bow.
lapack_int LAPACKE_dgemqr_work (int matrix_layout, char side, char trans, lapack_int m, lapack_int n, lapack_int k, const double * a, lapack_int lda, const double * t, lapack_int tsize, double * c, lapack_int ldc, double * work, lapack_int lwork)
Definition at line 36 of file lapacke_dgemqr_work.c.
LAPACKE_dgemqrt 🔥 this one's got nb AND a separate ldt — she's the blocky one, iykyk.
lapack_int LAPACKE_dgemqrt (int matrix_layout, char side, char trans, lapack_int m, lapack_int n, lapack_int k, lapack_int nb, const double * v, lapack_int ldv, const double * t, lapack_int ldt, double * c, lapack_int ldc)
Definition at line 36 of file lapacke_dgemqrt.c.
LAPACKE_dgemqrt_work 🧚 same plus double * work — and only work, no lwork in sight. that's just how she is.
lapack_int LAPACKE_dgemqrt_work (int matrix_layout, char side, char trans, lapack_int m, lapack_int n, lapack_int k, lapack_int nb, const double * v, lapack_int ldv, const double * t, lapack_int ldt, double * c, lapack_int ldc, double * work)
Definition at line 36 of file lapacke_dgemqrt_work.c.
LAPACKE_dgeqlf ⭐ short and sweet: a, lda, tau. that's the whole guest list.
lapack_int LAPACKE_dgeqlf (int matrix_layout, lapack_int m, lapack_int n, double * a, lapack_int lda, double * tau)
Definition at line 36 of file lapacke_dgeqlf.c.
LAPACKE_dgeqlf_work 💫 now with double * work, lapack_int lwork — the classic workspace glow-up.
lapack_int LAPACKE_dgeqlf_work (int matrix_layout, lapack_int m, lapack_int n, double * a, lapack_int lda, double * tau, double * work, lapack_int lwork)
Definition at line 36 of file lapacke_dgeqlf_work.c.
LAPACKE_dgeqp3 🌈 she brought jpvt — the pivoting queen has entered the chat 👑
lapack_int LAPACKE_dgeqp3 (int matrix_layout, lapack_int m, lapack_int n, double * a, lapack_int lda, lapack_int * jpvt, double * tau)
Definition at line 36 of file lapacke_dgeqp3.c.
LAPACKE_dgeqp3_work 🎀 same, plus double * work, lapack_int lwork.
lapack_int LAPACKE_dgeqp3_work (int matrix_layout, lapack_int m, lapack_int n, double * a, lapack_int lda, lapack_int * jpvt, double * tau, double * work, lapack_int lwork)
Definition at line 36 of file lapacke_dgeqp3_work.c.
LAPACKE_dgeqpf 🦋 jpvt and tau again — her whole personality.
lapack_int LAPACKE_dgeqpf (int matrix_layout, lapack_int m, lapack_int n, double * a, lapack_int lda, lapack_int * jpvt, double * tau)
Definition at line 36 of file lapacke_dgeqpf.c.
LAPACKE_dgeqpf_work ✨ and the _work version takes exactly one extra: double * work. no lwork. no notes.
lapack_int LAPACKE_dgeqpf_work (int matrix_layout, lapack_int m, lapack_int n, double * a, lapack_int lda, lapack_int * jpvt, double * tau, double * work)
Definition at line 36 of file lapacke_dgeqpf_work.c.
LAPACKE_dgeqr 💅 t comes with tsize — she needs to know how big her own tea is.
lapack_int LAPACKE_dgeqr (int matrix_layout, lapack_int m, lapack_int n, double * a, lapack_int lda, double * t, lapack_int tsize)
Definition at line 36 of file lapacke_dgeqr.c.
LAPACKE_dgeqr2 🌸 the little 2 one, back to tau and vibes only.
lapack_int LAPACKE_dgeqr2 (int matrix_layout, lapack_int m, lapack_int n, double * a, lapack_int lda, double * tau)
Definition at line 36 of file lapacke_dgeqr2.c.
LAPACKE_dgeqr2_work 💜 tau plus exactly one double * work. minimalist icon.
lapack_int LAPACKE_dgeqr2_work (int matrix_layout, lapack_int m, lapack_int n, double * a, lapack_int lda, double * tau, double * work)
Definition at line 36 of file lapacke_dgeqr2_work.c.
LAPACKE_dgeqr_work 🔥 t, tsize, work, lwork — the whole _work starter pack, assembled.
lapack_int LAPACKE_dgeqr_work (int matrix_layout, lapack_int m, lapack_int n, double * a, lapack_int lda, double * t, lapack_int tsize, double * work, lapack_int lwork)
Definition at line 36 of file lapacke_dgeqr_work.c.
LAPACKE_dgeqrf 💖 the one everybody's cousin has called at least once. a, lda, tau.
lapack_int LAPACKE_dgeqrf (int matrix_layout, lapack_int m, lapack_int n, double * a, lapack_int lda, double * tau)
Definition at line 36 of file lapacke_dgeqrf.c.
LAPACKE_dgeqrf_work 🫶 same cast, now with double * work, lapack_int lwork making a cameo.
lapack_int LAPACKE_dgeqrf_work (int matrix_layout, lapack_int m, lapack_int n, double * a, lapack_int lda, double * tau, double * work, lapack_int lwork)
Definition at line 36 of file lapacke_dgeqrf_work.c.
LAPACKE_dgeqrfp 🌈 the p is right there in the name and she is not subtle about it.
lapack_int LAPACKE_dgeqrfp (int matrix_layout, lapack_int m, lapack_int n, double * a, lapack_int lda, double * tau)
Definition at line 36 of file lapacke_dgeqrfp.c.
LAPACKE_dgeqrfp_work ⭐ and her _work counterpart, same signature as dgeqrf_work because of course it is.
lapack_int LAPACKE_dgeqrfp_work (int matrix_layout, lapack_int m, lapack_int n, double * a, lapack_int lda, double * tau, double * work, lapack_int lwork)
Definition at line 36 of file lapacke_dgeqrfp_work.c.
LAPACKE_dgeqrt 🦋 nb and ldt in the house — block size plus a leading dimension for t. main character parameters, honestly.
lapack_int LAPACKE_dgeqrt (int matrix_layout, lapack_int m, lapack_int n, lapack_int nb, double * a, lapack_int lda, double * t, lapack_int ldt)
Definition at line 36 of file lapacke_dgeqrt.c.
LAPACKE_dgeqrt2 💫 no nb here, just a, lda, t, ldt. clean.
lapack_int LAPACKE_dgeqrt2 (int matrix_layout, lapack_int m, lapack_int n, double * a, lapack_int lda, double * t, lapack_int ldt)
Definition at line 36 of file lapacke_dgeqrt2.c.
LAPACKE_dgeqrt2_work 🎀 identical parameter list to dgeqrt2 — yes, even in the _work file. she said "same".
lapack_int LAPACKE_dgeqrt2_work (int matrix_layout, lapack_int m, lapack_int n, double * a, lapack_int lda, double * t, lapack_int ldt)
Definition at line 36 of file lapacke_dgeqrt2_work.c.
LAPACKE_dgeqrt3 ✨ the third sister. same four-ish friends, different lore.
lapack_int LAPACKE_dgeqrt3 (int matrix_layout, lapack_int m, lapack_int n, double * a, lapack_int lda, double * t, lapack_int ldt)
Definition at line 36 of file lapacke_dgeqrt3.c.
LAPACKE_dgeqrt3_work 🌸 and yes — same again. a, lda, t, ldt. no extra work param sneaking in here, don't @ me.
lapack_int LAPACKE_dgeqrt3_work (int matrix_layout, lapack_int m, lapack_int n, double * a, lapack_int lda, double * t, lapack_int ldt)
Definition at line 36 of file lapacke_dgeqrt3_work.c.
LAPACKE_dgeqrt_work 💜 the base one's workspace twin, with double * work riding along.
lapack_int LAPACKE_dgeqrt_work (int matrix_layout, lapack_int m, lapack_int n, lapack_int nb, double * a, lapack_int lda, double * t, lapack_int ldt, double * work)
Definition at line 36 of file lapacke_dgeqrt_work.c.
LAPACKE_dgerfs 🔥 error bounds era!! ferr and berr at the end, ipiv in the middle, trans up front. she's stacked.
lapack_int LAPACKE_dgerfs (int matrix_layout, char trans, lapack_int n, lapack_int nrhs, const double * a, lapack_int lda, const double * af, lapack_int ldaf, const lapack_int * ipiv, const double * b, lapack_int ldb, double * x, lapack_int ldx, double * ferr, double * berr)
Definition at line 36 of file lapacke_dgerfs.c.
LAPACKE_dgerfs_work 💀 the exact same fourteen args PLUS double * work, lapack_int * iwork. she brought friends. plural.
lapack_int LAPACKE_dgerfs_work (int matrix_layout, char trans, lapack_int n, lapack_int nrhs, const double * a, lapack_int lda, const double * af, lapack_int ldaf, const lapack_int * ipiv, const double * b, lapack_int ldb, double * x, lapack_int ldx, double * ferr, double * berr, double * work, lapack_int * iwork)
Definition at line 36 of file lapacke_dgerfs_work.c.
LAPACKE_dgerfsx 👑 the deluxe edition. equed, r, c, rcond, n_err_bnds, err_bnds_norm, err_bnds_comp, nparams, params — the whole dang registry.
lapack_int LAPACKE_dgerfsx (int matrix_layout, char trans, char equed, lapack_int n, lapack_int nrhs, const double * a, lapack_int lda, const double * af, lapack_int ldaf, const lapack_int * ipiv, const double * r, const double * c, const double * b, lapack_int ldb, double * x, lapack_int ldx, double * rcond, double * berr, lapack_int n_err_bnds, double * err_bnds_norm, double * err_bnds_comp, lapack_int nparams, double * params)
Definition at line 36 of file lapacke_dgerfsx.c.
LAPACKE_dgerfsx_work 🫶 same twenty-three params, and then double * work, lapack_int * iwork show up fashionably late.
lapack_int LAPACKE_dgerfsx_work (int matrix_layout, char trans, char equed, lapack_int n, lapack_int nrhs, const double * a, lapack_int lda, const double * af, lapack_int ldaf, const lapack_int * ipiv, const double * r, const double * c, const double * b, lapack_int ldb, double * x, lapack_int ldx, double * rcond, double * berr, lapack_int n_err_bnds, double * err_bnds_norm, double * err_bnds_comp, lapack_int nparams, double * params, double * work, lapack_int * iwork)
Definition at line 36 of file lapacke_dgerfsx_work.c.
LAPACKE_dgerqf 🌈 back to the cozy three-piece: a, lda, tau.
lapack_int LAPACKE_dgerqf (int matrix_layout, lapack_int m, lapack_int n, double * a, lapack_int lda, double * tau)
Definition at line 36 of file lapacke_dgerqf.c.
LAPACKE_dgerqf_work ⭐ plus double * work, lapack_int lwork, obviously.
lapack_int LAPACKE_dgerqf_work (int matrix_layout, lapack_int m, lapack_int n, double * a, lapack_int lda, double * tau, double * work, lapack_int lwork)
Definition at line 36 of file lapacke_dgerqf_work.c.
LAPACKE_dgesdd 🦋 divide-and-conquer SVD vibes — jobz instead of separate jobu/jobvt, plus s, u, ldu, vt, ldvt. one char, two outputs, iconic.
lapack_int LAPACKE_dgesdd (int matrix_layout, char jobz, lapack_int m, lapack_int n, double * a, lapack_int lda, double * s, double * u, lapack_int ldu, double * vt, lapack_int ldvt)
Definition at line 36 of file lapacke_dgesdd.c.
LAPACKE_dgesdd_work 💫 and she brought BOTH double * work, lapack_int lwork AND lapack_int * iwork. double workspace, zero regrets.
lapack_int LAPACKE_dgesdd_work (int matrix_layout, char jobz, lapack_int m, lapack_int n, double * a, lapack_int lda, double * s, double * u, lapack_int ldu, double * vt, lapack_int ldvt, double * work, lapack_int lwork, lapack_int * iwork)
Definition at line 36 of file lapacke_dgesdd_work.c.
LAPACKE_dgesv 🎀 no m here, just n — square business only. ipiv is in the building, and b/ldb close it out.
lapack_int LAPACKE_dgesv (int matrix_layout, lapack_int n, lapack_int nrhs, double * a, lapack_int lda, lapack_int * ipiv, double * b, lapack_int ldb)
Definition at line 36 of file lapacke_dgesv.c.
LAPACKE_dgesv_work ✨ fun fact from the header: the parameter list is identical to dgesv. no extra work args. she said what she said.
lapack_int LAPACKE_dgesv_work (int matrix_layout, lapack_int n, lapack_int nrhs, double * a, lapack_int lda, lapack_int * ipiv, double * b, lapack_int ldb)
Definition at line 36 of file lapacke_dgesv_work.c.
LAPACKE_dgesvd 💜 the classic SVD — jobu AND jobvt as separate chars, and superb sitting at the end like a little trophy.
lapack_int LAPACKE_dgesvd (int matrix_layout, char jobu, char jobvt, lapack_int m, lapack_int n, double * a, lapack_int lda, double * s, double * u, lapack_int ldu, double * vt, lapack_int ldvt, double * superb)
Definition at line 36 of file lapacke_dgesvd.c.
LAPACKE_dgesvd_work 🌸 same, except superb peaces out and double * work, lapack_int lwork slide in. trade-off.
lapack_int LAPACKE_dgesvd_work (int matrix_layout, char jobu, char jobvt, lapack_int m, lapack_int n, double * a, lapack_int lda, double * s, double * u, lapack_int ldu, double * vt, lapack_int ldvt, double * work, lapack_int lwork)
Definition at line 36 of file lapacke_dgesvd_work.c.
LAPACKE_dgesvdx 🔥 okay she's got RANGE — literally: a char range, plus vl, vu, il, iu, ns. fancy indexing energy fr fr.
lapack_int LAPACKE_dgesvdx (int matrix_layout, char jobu, char jobvt, char range, lapack_int m, lapack_int n, double * a, lapack_int lda, double vl, double vu, lapack_int il, lapack_int iu, lapack_int * ns, double * s, double * u, lapack_int ldu, double * vt, lapack_int ldvt, lapack_int * superb)
Definition at line 36 of file lapacke_dgesvdx.c.
LAPACKE_dgesvdx_work 🧚 same big roster, but superb is swapped for double * work, lapack_int lwork, lapack_int * iwork. the _work special 💅
lapack_int LAPACKE_dgesvdx_work (int matrix_layout, char jobu, char jobvt, char range, lapack_int m, lapack_int n, double * a, lapack_int lda, double vl, double vu, lapack_int il, lapack_int iu, lapack_int * ns, double * s, double * u, lapack_int ldu, double * vt, lapack_int ldvt, double * work, lapack_int lwork, lapack_int * iwork)
Definition at line 36 of file lapacke_dgesvdx_work.c.
LAPACKE_dgesvj 👑 THREE chars up front — joba, jobu, jobv — plus sva, mv, v, ldv, and a stat at the end. she's mysterious and loaded with options.
lapack_int LAPACKE_dgesvj (int matrix_layout, char joba, char jobu, char jobv, lapack_int m, lapack_int n, double * a, lapack_int lda, double * sva, lapack_int mv, double * v, lapack_int ldv, double * stat)
Definition at line 36 of file lapacke_dgesvj.c.
LAPACKE_dgesvj_work 🍓 and the _work edition: stat clocks out, double * work, lapack_int lwork clock in. that's the pattern and she's sticking to it.
lapack_int LAPACKE_dgesvj_work (int matrix_layout, char joba, char jobu, char jobv, lapack_int m, lapack_int n, double * a, lapack_int lda, double * sva, lapack_int mv, double * v, lapack_int ldv, double * work, lapack_int lwork)
Definition at line 36 of file lapacke_dgesvj_work.c.
that's the dge cluster wrapped, and the docs are absolutely not done with us yet — keep scrolling bestie, there's more 💖
LAPACKE_dgesvx — bestie, this is the expert version of the solve: it gives you the solution AND checks its own vibe (equilibration, condition estimate, ferr/berr). Note the extra rpivot at the end, she's special 💅
lapack_int LAPACKE_dgesvx (int matrix_layout, char fact, char trans,
lapack_int n, lapack_int nrhs, double * a, lapack_int lda, double * af,
lapack_int ldaf, lapack_int * ipiv, char * equed, double * r, double *
c, double * b, lapack_int ldb, double * x, lapack_int ldx, double *
rcond, double * ferr, double * berr, double * rpivot)
Defined at line 36 of lapacke_dgesvx.c.
LAPACKE_dgesvx_work — same dgesvx energy 🫶, except you're the one handing over the workspace and integer workspace instead of her doing the shopping for you.
lapack_int LAPACKE_dgesvx_work (int matrix_layout, char fact, char trans,
lapack_int n, lapack_int nrhs, double * a, lapack_int lda, double * af,
lapack_int ldaf, lapack_int * ipiv, char * equed, double * r, double *
c, double * b, lapack_int ldb, double * x, lapack_int ldx, double *
rcond, double * ferr, double * berr, double * work, lapack_int * iwork)
Defined at line 36 of lapacke_dgesvx_work.c.
LAPACKE_dgesvxx — the extra-extra one 😭 she's serving error bounds on a platter: rpvgrw, berr, n_err_bnds, err_bnds_norm, err_bnds_comp, plus nparams and params. Literally the whole confidence package.
lapack_int LAPACKE_dgesvxx (int matrix_layout, char fact, char trans,
lapack_int n, lapack_int nrhs, double * a, lapack_int lda, double * af,
lapack_int ldaf, lapack_int * ipiv, char * equed, double * r, double *
c, double * b, lapack_int ldb, double * x, lapack_int ldx, double *
rcond, double * rpvgrw, double * berr, lapack_int n_err_bnds, double *
err_bnds_norm, double * err_bnds_comp, lapack_int nparams, double *
params)
Defined at line 36 of lapacke_dgesvxx.c.
LAPACKE_dgesvxx_work — the _work twin of the above 🌸 same everything, but work and iwork are your problem now. Slay, but bring your own buffers.
lapack_int LAPACKE_dgesvxx_work (int matrix_layout, char fact, char trans,
lapack_int n, lapack_int nrhs, double * a, lapack_int lda, double * af,
lapack_int ldaf, lapack_int * ipiv, char * equed, double * r, double *
c, double * b, lapack_int ldb, double * x, lapack_int ldx, double *
rcond, double * rpvgrw, double * berr, lapack_int n_err_bnds, double *
err_bnds_norm, double * err_bnds_comp, lapack_int nparams, double *
params, double * work, lapack_int * iwork)
Defined at line 36 of lapacke_dgesvxx_work.c.
🌈 the LU debut era
LAPACKE_dgetf2 — unblocked LU factorization with partial pivoting, the little engine that could ✨ m, n, a, lda, ipiv, that's the whole cast.
lapack_int LAPACKE_dgetf2 (int matrix_layout, lapack_int m, lapack_int n,
double * a, lapack_int lda, lapack_int * ipiv)
Defined at line 36 of lapacke_dgetf2.c.
LAPACKE_dgetf2_work — same dgetf2, _work flavor 🎀
lapack_int LAPACKE_dgetf2_work (int matrix_layout, lapack_int m, lapack_int
n, double * a, lapack_int lda, lapack_int * ipiv)
Defined at line 36 of lapacke_dgetf2_work.c.
LAPACKE_dgetrf — the main character of factorization 👑 blocked LU with partial pivoting. If you've ever wondered "how do I even start", it's this one.
lapack_int LAPACKE_dgetrf (int matrix_layout, lapack_int m, lapack_int n,
double * a, lapack_int lda, lapack_int * ipiv)
Defined at line 36 of lapacke_dgetrf.c.
LAPACKE_dgetrf2 — recursive-flavored dgetrf variant, same signature as its sibling, no cap 🧚
lapack_int LAPACKE_dgetrf2 (int matrix_layout, lapack_int m, lapack_int n,
double * a, lapack_int lda, lapack_int * ipiv)
Defined at line 36 of lapacke_dgetrf2.c.
LAPACKE_dgetrf2_work — and here she is in _work form 💖
lapack_int LAPACKE_dgetrf2_work (int matrix_layout, lapack_int m, lapack_int
n, double * a, lapack_int lda, lapack_int * ipiv)
Defined at line 36 of lapacke_dgetrf2_work.c.
LAPACKE_dgetrf_work — the _work version of dgetrf. Same args, same dreams ⭐
lapack_int LAPACKE_dgetrf_work (int matrix_layout, lapack_int m, lapack_int
n, double * a, lapack_int lda, lapack_int * ipiv)
Defined at line 36 of lapacke_dgetrf_work.c.
LAPACKE_dgetri — you already factored it? Iconic. Now invert it 💅 note that ipiv is const here, she's read-only and thriving.
lapack_int LAPACKE_dgetri (int matrix_layout, lapack_int n, double * a,
lapack_int lda, const lapack_int * ipiv)
Defined at line 36 of lapacke_dgetri.c.
LAPACKE_dgetri_work — same inversion, but you're supplying work and lwork yourself 🫶
lapack_int LAPACKE_dgetri_work (int matrix_layout, lapack_int n, double * a,
lapack_int lda, const lapack_int * ipiv, double * work, lapack_int
lwork)
Defined at line 36 of lapacke_dgetri_work.c.
LAPACKE_dgetrs — solved-by-factoring, bestie 🔥 you hand her the LU factors (a, lda, ipiv) and she handles the solve. trans decides how she reads it.
lapack_int LAPACKE_dgetrs (int matrix_layout, char trans, lapack_int n,
lapack_int nrhs, const double * a, lapack_int lda, const lapack_int *
ipiv, double * b, lapack_int ldb)
Defined at line 36 of lapacke_dgetrs.c.
LAPACKE_dgetrs_work — same solve, _work dressing ✨
lapack_int LAPACKE_dgetrs_work (int matrix_layout, char trans, lapack_int n,
lapack_int nrhs, const double * a, lapack_int lda, const lapack_int *
ipiv, double * b, lapack_int ldb)
Defined at line 36 of lapacke_dgetrs_work.c.
LAPACKE_dgetsls — least squares via divide-and-conquer 🦋 note the cast is m, n, nrhs (not n/nrhs like the square solvers), so mind your shapes.
lapack_int LAPACKE_dgetsls (int matrix_layout, char trans, lapack_int m,
lapack_int n, lapack_int nrhs, double * a, lapack_int lda, double * b,
lapack_int ldb)
Defined at line 36 of lapacke_dgetsls.c.
LAPACKE_dgetsls_work — least squares, but with work + lwork handed over like a good friend 🍓
lapack_int LAPACKE_dgetsls_work (int matrix_layout, char trans, lapack_int
m, lapack_int n, lapack_int nrhs, double * a, lapack_int lda, double *
b, lapack_int ldb, double * work, lapack_int lwork)
Defined at line 36 of lapacke_dgetsls_work.c.
💜 generalized eigenvalue era: balancing & back-transforming
LAPACKE_dggbak — takes the balancing scales from dggbal and back-transforms the eigenvectors in v 😭 the glow-up reversal, fr fr.
lapack_int LAPACKE_dggbak (int matrix_layout, char job, char side,
lapack_int n, lapack_int ilo, lapack_int ihi, const double * lscale,
const double * rscale, lapack_int m, double * v, lapack_int ldv)
Defined at line 36 of lapacke_dggbak.c.
LAPACKE_dggbak_work — same back-transform, _work cut 🎀 same exact argument list too.
lapack_int LAPACKE_dggbak_work (int matrix_layout, char job, char side,
lapack_int n, lapack_int ilo, lapack_int ihi, const double * lscale,
const double * rscale, lapack_int m, double * v, lapack_int ldv)
Defined at line 36 of lapacke_dggbak_work.c.
LAPACKE_dggbal — balances a pair of matrices (a, b) so the eigenproblem behaves 🌸 hands you back ilo, ihi, lscale and rscale. The pre-game ritual.
lapack_int LAPACKE_dggbal (int matrix_layout, char job, lapack_int n, double
* a, lapack_int lda, double * b, lapack_int ldb, lapack_int * ilo,
lapack_int * ihi, double * lscale, double * rscale)
Defined at line 36 of lapacke_dggbal.c.
LAPACKE_dggbal_work — balancing with a work array you provide 🧚
lapack_int LAPACKE_dggbal_work (int matrix_layout, char job, lapack_int n,
double * a, lapack_int lda, double * b, lapack_int ldb, lapack_int *
ilo, lapack_int * ihi, double * lscale, double * rscale, double * work)
Defined at line 36 of lapacke_dggbal_work.c.
🔥 the QZ / generalized Schur squad
LAPACKE_dgges — generalized Schur decomposition, the real deal 👑 jobvsl and jobvsr decide whether you get left/right Schur vectors, sort + selctg (LAPACK_D_SELECT3) let you pick eigenvalues, and sdim reports how many made the cut. Outputs: alphar, alphai, beta.
lapack_int LAPACKE_dgges (int matrix_layout, char jobvsl, char jobvsr, char
sort, LAPACK_D_SELECT3 selctg, lapack_int n, double * a, lapack_int lda,
double * b, lapack_int ldb, lapack_int * sdim, double * alphar, double *
alphai, double * beta, double * vsl, lapack_int ldvsl, double * vsr,
lapack_int ldvsr)
Defined at line 36 of lapacke_dgges.c.
LAPACKE_dgges3 — the 3 variant of dgges, same signature down to the letter ✨ she's just built different internally.
lapack_int LAPACKE_dgges3 (int matrix_layout, char jobvsl, char jobvsr, char
sort, LAPACK_D_SELECT3 selctg, lapack_int n, double * a, lapack_int lda,
double * b, lapack_int ldb, lapack_int * sdim, double * alphar, double *
alphai, double * beta, double * vsl, lapack_int ldvsl, double * vsr,
lapack_int ldvsr)
Defined at line 36 of lapacke_dgges3.c.
LAPACKE_dgges3_work — dgges3 plus work, lwork, and a bwork (lapack_logical *) array for the sort selector 🫶
lapack_int LAPACKE_dgges3_work (int matrix_layout, char jobvsl, char jobvsr,
char sort, LAPACK_D_SELECT3 selctg, lapack_int n, double * a, lapack_int
lda, double * b, lapack_int ldb, lapack_int * sdim, double * alphar,
double * alphai, double * beta, double * vsl, lapack_int ldvsl, double *
vsr, lapack_int ldvsr, double * work, lapack_int lwork, lapack_logical *
bwork)
Defined at line 36 of lapacke_dgges3_work.c.
LAPACKE_dgges_work — dgges with work, lwork and bwork in the mix 💀 same LAPACK_D_SELECT3 selector, no substitutions.
lapack_int LAPACKE_dgges_work (int matrix_layout, char jobvsl, char jobvsr,
char sort, LAPACK_D_SELECT3 selctg, lapack_int n, double * a, lapack_int
lda, double * b, lapack_int ldb, lapack_int * sdim, double * alphar,
double * alphai, double * beta, double * vsl, lapack_int ldvsl, double *
vsr, lapack_int ldvsr, double * work, lapack_int lwork, lapack_logical *
bwork)
Defined at line 36 of lapacke_dgges_work.c.
LAPACKE_dggesx — the deluxe dgges 🎀 extra sense char, and she gives you rconde and rcondv — the reciprocal condition numbers for the eigenvalues and eigenvectors. She's thorough, we love her.
lapack_int LAPACKE_dggesx (int matrix_layout, char jobvsl, char jobvsr, char
sort, LAPACK_D_SELECT3 selctg, char sense, lapack_int n, double * a,
lapack_int lda, double * b, lapack_int ldb, lapack_int * sdim, double *
alphar, double * alphai, double * beta, double * vsl, lapack_int ldvsl,
double * vsr, lapack_int ldvsr, double * rconde, double * rcondv)
Defined at line 36 of lapacke_dggesx.c.
LAPACKE_dggesx_work — the full-workspace dggesx 😭 work/lwork, iwork/liwork, AND bwork. Bring a tote bag.
lapack_int LAPACKE_dggesx_work (int matrix_layout, char jobvsl, char jobvsr,
char sort, LAPACK_D_SELECT3 selctg, char sense, lapack_int n, double *
a, lapack_int lda, double * b, lapack_int ldb, lapack_int * sdim, double
* alphar, double * alphai, double * beta, double * vsl, lapack_int
ldvsl, double * vsr, lapack_int ldvsr, double * rconde, double * rcondv,
double * work, lapack_int lwork, lapack_int * iwork, lapack_int liwork,
lapack_logical * bwork)
Defined at line 36 of lapacke_dggesx_work.c.
🌸 generalized eigenvalue problems, straight up
LAPACKE_dggev — generalized eigenvalues for the pencil (a, b) 💖 jobvl/jobvr control the left and right eigenvector matrices vl/vr, and the eigenvalues come back as alphar, alphai, beta.
lapack_int LAPACKE_dggev (int matrix_layout, char jobvl, char jobvr,
lapack_int n, double * a, lapack_int lda, double * b, lapack_int ldb,
double * alphar, double * alphai, double * beta, double * vl, lapack_int
ldvl, double * vr, lapack_int ldvr)
Defined at line 36 of lapacke_dggev.c.
LAPACKE_dggev3 — the 3 variant of dggev, identical argument list, character for character 🌈
lapack_int LAPACKE_dggev3 (int matrix_layout, char jobvl, char jobvr,
lapack_int n, double * a, lapack_int lda, double * b, lapack_int ldb,
double * alphar, double * alphai, double * beta, double * vl, lapack_int
ldvl, double * vr, lapack_int ldvr)
Defined at line 36 of lapacke_dggev3.c.
LAPACKE_dggev3_work — dggev3 with work and lwork 🧚
lapack_int LAPACKE_dggev3_work (int matrix_layout, char jobvl, char jobvr,
lapack_int n, double * a, lapack_int lda, double * b, lapack_int ldb,
double * alphar, double * alphai, double * beta, double * vl, lapack_int
ldvl, double * vr, lapack_int ldvr, double * work, lapack_int lwork)
Defined at line 36 of lapacke_dggev3_work.c.
LAPACKE_dggev_work — dggev with work and lwork, same everything else ⭐
lapack_int LAPACKE_dggev_work (int matrix_layout, char jobvl, char jobvr,
lapack_int n, double * a, lapack_int lda, double * b, lapack_int ldb,
double * alphar, double * alphai, double * beta, double * vl, lapack_int
ldvl, double * vr, lapack_int ldvr, double * work, lapack_int lwork)
Defined at line 36 of lapacke_dggev_work.c.
LAPACKE_dggevx — the maximalist generalized eigen solver 👑 balanc + sense up front, then she hands you ilo, ihi, lscale, rscale, abnrm, bbnrm, rconde and rcondv. She said "I'm giving you everything."
lapack_int LAPACKE_dggevx (int matrix_layout, char balanc, char jobvl, char
jobvr, char sense, lapack_int n, double * a, lapack_int lda, double * b,
lapack_int ldb, double * alphar, double * alphai, double * beta, double
* vl, lapack_int ldvl, double * vr, lapack_int ldvr, lapack_int * ilo,
lapack_int * ihi, double * lscale, double * rscale, double * abnrm,
double * bbnrm, double * rconde, double * rcondv)
Defined at line 36 of lapacke_dggevx.c.
LAPACKE_dggevx_work — that whole maximalist package, plus work/lwork, iwork, and bwork 💀 packing for a whole semester abroad.
lapack_int LAPACKE_dggevx_work (int matrix_layout, char balanc, char jobvl,
char jobvr, char sense, lapack_int n, double * a, lapack_int lda, double
* b, lapack_int ldb, double * alphar, double * alphai, double * beta,
double * vl, lapack_int ldvl, double * vr, lapack_int ldvr, lapack_int *
ilo, lapack_int * ihi, double * lscale, double * rscale, double * abnrm,
double * bbnrm, double * rconde, double * rcondv, double * work,
lapack_int lwork, lapack_int * iwork, lapack_logical * bwork)
Defined at line 36 of lapacke_dggevx_work.c.
🎀 the constrained-least-squares corner
LAPACKE_dggglm — solves the generalized linear regression problem for the pencil (a, b) 🦋 d goes in, x and y come out. Note the argument order: n, then m, then p. Don't shuffle them, bestie, order matters.
lapack_int LAPACKE_dggglm (int matrix_layout, lapack_int n, lapack_int m,
lapack_int p, double * a, lapack_int lda, double * b, lapack_int ldb,
double * d, double * x, double * y)
Defined at line 36 of lapacke_dggglm.c.
LAPACKE_dggglm_work — the same GLM solve with work and lwork supplied by you 💜
lapack_int LAPACKE_dggglm_work (int matrix_layout, lapack_int n, lapack_int
m, lapack_int p, double * a, lapack_int lda, double * b, lapack_int ldb,
double * d, double * x, double * y, double * work, lapack_int lwork)
Defined at line 36 of lapacke_dggglm_work.c.
LAPACKE_dgghd3 — Hessenberg-triangular reduction of the pair (a, b) 🔥 compq and compz control whether q and z get updated, and ilo/ihi carry the balancing range. This is the setup girlie before the QZ main event.
lapack_int LAPACKE_dgghd3 (int matrix_layout, char compq, char compz,
lapack_int n, lapack_int ilo, lapack_int ihi, double * a, lapack_int
lda, double * b, lapack_int ldb, double * q, lapack_int ldq, double * z,
lapack_int ldz)
Defined at line 36 of lapacke_dgghd3.c.
- ### 🦋
LAPACKE_dgghd3_work
The full-glow-up version with a scratch workspace, bestie 💅
lapack_int LAPACKE_dgghd3_work (int matrix_layout, char compq, char compz,
lapack_int n, lapack_int ilo, lapack_int ihi, double * a, lapack_int
lda, double * b, lapack_int ldb, double * q, lapack_int ldq, double * z,
lapack_int ldz, double * work, lapack_int lwork)
Definition at line 36 of file lapacke_dgghd3_work.c.
- ### 🎀
LAPACKE_dgghrd
Reduces a pair of matrices to generalized Hessenberg form — no _work twin energy here, it just goes ✨
lapack_int LAPACKE_dgghrd (int matrix_layout, char compq, char compz,
lapack_int n, lapack_int ilo, lapack_int ihi, double * a, lapack_int
lda, double * b, lapack_int ldb, double * q, lapack_int ldq, double * z,
lapack_int ldz)
Definition at line 36 of file lapacke_dgghrd.c.
- ### 🎀
LAPACKE_dgghrd_work
Same signature as its sibling above, fr fr — the workspace variant of the Hessenberg reduction 🫶
lapack_int LAPACKE_dgghrd_work (int matrix_layout, char compq, char compz,
lapack_int n, lapack_int ilo, lapack_int ihi, double * a, lapack_int
lda, double * b, lapack_int ldb, double * q, lapack_int ldq, double * z,
lapack_int ldz)
Definition at line 36 of file lapacke_dgghrd_work.c.
- ### 🌸
LAPACKE_dgglse
Solves the linear equality-constrained least squares problem, the way that it just handles it 😌
lapack_int LAPACKE_dgglse (int matrix_layout, lapack_int m, lapack_int n,
lapack_int p, double * a, lapack_int lda, double * b, lapack_int ldb,
double * c, double * d, double * x)
Definition at line 36 of file lapacke_dgglse.c.
- ### 🌸
LAPACKE_dgglse_work
Same solve, but now with work and lwork so you can bring your own scratch space 💖
lapack_int LAPACKE_dgglse_work (int matrix_layout, lapack_int m, lapack_int
n, lapack_int p, double * a, lapack_int lda, double * b, lapack_int ldb,
double * c, double * d, double * x, double * work, lapack_int lwork)
Definition at line 36 of file lapacke_dgglse_work.c.
- ### 🧚
LAPACKE_dggqrf
Generalized QR factorization — note the order bestie, it's n, then m, then p 👀
lapack_int LAPACKE_dggqrf (int matrix_layout, lapack_int n, lapack_int m,
lapack_int p, double * a, lapack_int lda, double * taua, double * b,
lapack_int ldb, double * taub)
Definition at line 36 of file lapacke_dggqrf.c.
- ### 🧚
LAPACKE_dggqrf_work
The workspace edition, two taus and all 🌈
lapack_int LAPACKE_dggqrf_work (int matrix_layout, lapack_int n, lapack_int
m, lapack_int p, double * a, lapack_int lda, double * taua, double * b,
lapack_int ldb, double * taub, double * work, lapack_int lwork)
Definition at line 36 of file lapacke_dggqrf_work.c.
- ### 💜
LAPACKE_dggrqf
Generalized RQ factorization — and heads up, the leading dims go m, p, n here, which is a whole different order than the QR one, so don't mix them up 😭
lapack_int LAPACKE_dggrqf (int matrix_layout, lapack_int m, lapack_int p,
lapack_int n, double * a, lapack_int lda, double * taua, double * b,
lapack_int ldb, double * taub)
Definition at line 36 of file lapacke_dggrqf.c.
- ### 💜
LAPACKE_dggrqf_work
RQ factorization plus your very own work/lwork moment ✨
lapack_int LAPACKE_dggrqf_work (int matrix_layout, lapack_int m, lapack_int
p, lapack_int n, double * a, lapack_int lda, double * taua, double * b,
lapack_int ldb, double * taub, double * work, lapack_int lwork)
Definition at line 36 of file lapacke_dggrqf_work.c.
- ### 👑
LAPACKE_dggsvd
Generalized singular value decomposition, the classic OG — gives you k, l, alpha, beta and the trio u, v, q, plus iwork for the int-loving internals 💀
lapack_int LAPACKE_dggsvd (int matrix_layout, char jobu, char jobv, char
jobq, lapack_int m, lapack_int n, lapack_int p, lapack_int * k,
lapack_int * l, double * a, lapack_int lda, double * b, lapack_int ldb,
double * alpha, double * beta, double * u, lapack_int ldu, double * v,
lapack_int ldv, double * q, lapack_int ldq, lapack_int * iwork)
Definition at line 36 of file lapacke_dggsvd.c.
- ### 👑
LAPACKE_dggsvd3
The 3-era glow-up of the GSVD — same argument list, upgraded internals 🦋
lapack_int LAPACKE_dggsvd3 (int matrix_layout, char jobu, char jobv, char
jobq, lapack_int m, lapack_int n, lapack_int p, lapack_int * k,
lapack_int * l, double * a, lapack_int lda, double * b, lapack_int ldb,
double * alpha, double * beta, double * u, lapack_int ldu, double * v,
lapack_int ldv, double * q, lapack_int ldq, lapack_int * iwork)
Definition at line 36 of file lapacke_dggsvd3.c.
- ### 👑
LAPACKE_dggsvd3_work
The 3 version but make it workspace-y: work, lwork, then iwork at the very end 🎀
lapack_int LAPACKE_dggsvd3_work (int matrix_layout, char jobu, char jobv,
char jobq, lapack_int m, lapack_int n, lapack_int p, lapack_int * k,
lapack_int * l, double * a, lapack_int lda, double * b, lapack_int ldb,
double * alpha, double * beta, double * u, lapack_int ldu, double * v,
lapack_int ldv, double * q, lapack_int ldq, double * work, lapack_int
lwork, lapack_int * iwork)
Definition at line 36 of file lapacke_dggsvd3_work.c.
- ### 👑
LAPACKE_dggsvd_work
Careful, bestie — this one takes work and iwork but there's no lwork in the list, don't invent one 🙈
lapack_int LAPACKE_dggsvd_work (int matrix_layout, char jobu, char jobv,
char jobq, lapack_int m, lapack_int n, lapack_int p, lapack_int * k,
lapack_int * l, double * a, lapack_int lda, double * b, lapack_int ldb,
double * alpha, double * beta, double * u, lapack_int ldu, double * v,
lapack_int ldv, double * q, lapack_int ldq, double * work, lapack_int *
iwork)
Definition at line 36 of file lapacke_dggsvd_work.c.
- ### 🍓
LAPACKE_dggsvp
Preprocessing step for the GSVD pipeline — takes tolerances tola and tolb and hands you back k and l ✨
lapack_int LAPACKE_dggsvp (int matrix_layout, char jobu, char jobv, char
jobq, lapack_int m, lapack_int p, lapack_int n, double * a, lapack_int
lda, double * b, lapack_int ldb, double tola, double tolb, lapack_int *
k, lapack_int * l, double * u, lapack_int ldu, double * v, lapack_int
ldv, double * q, lapack_int ldq)
Definition at line 36 of file lapacke_dggsvp.c.
- ### 🍓
LAPACKE_dggsvp3
The 3-flavored preprocessing — same exact signature as LAPACKE_dggsvp, twin energy fr fr 🫶
lapack_int LAPACKE_dggsvp3 (int matrix_layout, char jobu, char jobv, char
jobq, lapack_int m, lapack_int p, lapack_int n, double * a, lapack_int
lda, double * b, lapack_int ldb, double tola, double tolb, lapack_int *
k, lapack_int * l, double * u, lapack_int ldu, double * v, lapack_int
ldv, double * q, lapack_int ldq)
Definition at line 36 of file lapacke_dggsvp3.c.
- ### 🍓
LAPACKE_dggsvp3_work
Now with a whole backstage crew: iwork, tau, work and lwork 🎤
lapack_int LAPACKE_dggsvp3_work (int matrix_layout, char jobu, char jobv,
char jobq, lapack_int m, lapack_int p, lapack_int n, double * a,
lapack_int lda, double * b, lapack_int ldb, double tola, double tolb,
lapack_int * k, lapack_int * l, double * u, lapack_int ldu, double * v,
lapack_int ldv, double * q, lapack_int ldq, lapack_int * iwork, double *
tau, double * work, lapack_int lwork)
Definition at line 36 of file lapacke_dggsvp3_work.c.
- ### 🍓
LAPACKE_dggsvp_work
Same crew but shorter guest list: iwork, tau, work — and nope, no lwork here either, clock it 💅
lapack_int LAPACKE_dggsvp_work (int matrix_layout, char jobu, char jobv,
char jobq, lapack_int m, lapack_int p, lapack_int n, double * a,
lapack_int lda, double * b, lapack_int ldb, double tola, double tolb,
lapack_int * k, lapack_int * l, double * u, lapack_int ldu, double * v,
lapack_int ldv, double * q, lapack_int ldq, lapack_int * iwork, double *
tau, double * work)
Definition at line 36 of file lapacke_dggsvp_work.c.
- ### 🌈
LAPACKE_dgtcon
Estimates the reciprocal condition number of a tridiagonal matrix — and catch this, there's no matrix_layout argument at all, it's built different 👀
lapack_int LAPACKE_dgtcon (char norm, lapack_int n, const double * dl, const
double * d, const double * du, const double * du2, const lapack_int *
ipiv, double anorm, double * rcond)
Definition at line 36 of file lapacke_dgtcon.c.
- ### 🌈
LAPACKE_dgtcon_work
Condition estimation with your own work and iwork scratch space 🎀
lapack_int LAPACKE_dgtcon_work (char norm, lapack_int n, const double * dl,
const double * d, const double * du, const double * du2, const
lapack_int * ipiv, double anorm, double * rcond, double * work,
lapack_int * iwork)
Definition at line 36 of file lapacke_dgtcon_work.c.
- ### 🔥
LAPACKE_dgtrfs
Refines a tridiagonal solve and hands you back ferr and berr — the error report card, basically 📝
lapack_int LAPACKE_dgtrfs (int matrix_layout, char trans, lapack_int n,
lapack_int nrhs, const double * dl, const double * d, const double * du,
const double * dlf, const double * df, const double * duf, const double
* du2, const lapack_int * ipiv, const double * b, lapack_int ldb, double
* x, lapack_int ldx, double * ferr, double * berr)
Definition at line 36 of file lapacke_dgtrfs.c.
- ### 🔥
LAPACKE_dgtrfs_work
Same refinement, now auditioning work and iwork for the cast ✨
lapack_int LAPACKE_dgtrfs_work (int matrix_layout, char trans, lapack_int n,
lapack_int nrhs, const double * dl, const double * d, const double * du,
const double * dlf, const double * df, const double * duf, const double
* du2, const lapack_int * ipiv, const double * b, lapack_int ldb, double
* x, lapack_int ldx, double * ferr, double * berr, double * work,
lapack_int * iwork)
Definition at line 36 of file lapacke_dgtrfs_work.c.
- ### 💖
LAPACKE_dgtsv
Solves a tridiagonal system — dl, d, du are the three stripes and b gets overwritten all casual-like 👑
lapack_int LAPACKE_dgtsv (int matrix_layout, lapack_int n, lapack_int nrhs,
double * dl, double * d, double * du, double * b, lapack_int ldb)
Definition at line 36 of file lapacke_dgtsv.c.
- ### 💖
LAPACKE_dgtsv_work
Literally the same signature as LAPACKE_dgtsv — the _work name is doing a lot of heavy lifting here 💀
lapack_int LAPACKE_dgtsv_work (int matrix_layout, lapack_int n, lapack_int
nrhs, double * dl, double * d, double * du, double * b, lapack_int ldb)
Definition at line 36 of file lapacke_dgtsv_work.c.
- ### 🦋
LAPACKE_dgtsvx
The expert-mode tridiagonal solver: fact for whether you already factored, trans, and it delivers rcond, ferr, berr like a full report 🎀
lapack_int LAPACKE_dgtsvx (int matrix_layout, char fact, char trans,
lapack_int n, lapack_int nrhs, const double * dl, const double * d,
const double * du, double * dlf, double * df, double * duf, double *
du2, lapack_int * ipiv, const double * b, lapack_int ldb, double * x,
lapack_int ldx, double * rcond, double * ferr, double * berr)
Definition at line 36 of file lapacke_dgtsvx.c.
- ### 🦋
LAPACKE_dgtsvx_work
Everything from above plus work and iwork at the tail end 🫶
lapack_int LAPACKE_dgtsvx_work (int matrix_layout, char fact, char trans,
lapack_int n, lapack_int nrhs, const double * dl, const double * d,
const double * du, double * dlf, double * df, double * duf, double *
du2, lapack_int * ipiv, const double * b, lapack_int ldb, double * x,
lapack_int ldx, double * rcond, double * ferr, double * berr, double *
work, lapack_int * iwork)
Definition at line 36 of file lapacke_dgtsvx_work.c.
- ### 🎀
LAPACKE_dgttrf
Factors a tridiagonal matrix — another one with no matrix_layout, it just starts right in with n 😌
lapack_int LAPACKE_dgttrf (lapack_int n, double * dl, double * d, double *
du, double * du2, lapack_int * ipiv)
Definition at line 36 of file lapacke_dgttrf.c.
- ### 🎀
LAPACKE_dgttrf_work
Identical signature to LAPACKE_dgttrf, same six arguments, no notes 🌸
lapack_int LAPACKE_dgttrf_work (lapack_int n, double * dl, double * d,
double * du, double * du2, lapack_int * ipiv)
Definition at line 36 of file lapacke_dgttrf_work.c.
- ### ⭐
LAPACKE_dgttrs
Solves using the factorization dgttrf already produced — du2 and ipiv come along for the ride 💅
lapack_int LAPACKE_dgttrs (int matrix_layout, char trans, lapack_int n,
lapack_int nrhs, const double * dl, const double * d, const double * du,
const double * du2, const lapack_int * ipiv, double * b, lapack_int ldb)
Definition at line 36 of file lapacke_dgttrs.c.
- ### ⭐
LAPACKE_dgttrs_work
Same arguments as LAPACKE_dgttrs exactly, no extras, that's the whole vibe 🦋
lapack_int LAPACKE_dgttrs_work (int matrix_layout, char trans, lapack_int n,
lapack_int nrhs, const double * dl, const double * d, const double * du,
const double * du2, const lapack_int * ipiv, double * b, lapack_int ldb)
Definition at line 36 of file lapacke_dgttrs_work.c.
- ### 🐛
LAPACKE_dhgeqz
The generalized Hessenberg eigenvalue problem — you feed it h, t, q, z and it hands you alphar, alphai, beta ✨
lapack_int LAPACKE_dhgeqz (int matrix_layout, char job, char compq, char
compz, lapack_int n, lapack_int ilo, lapack_int ihi, double * h,
lapack_int ldh, double * t, lapack_int ldt, double * alphar, double *
alphai, double * beta, double * q, lapack_int ldq, double * z,
lapack_int ldz)
Definition at line 36 of file lapacke_dhgeqz.c.
- ### 🐛
LAPACKE_dhgeqz_work
Same whole eigenvalue quest, plus work and lwork to give it room to breathe 🫶
lapack_int LAPACKE_dhgeqz_work (int matrix_layout, char job, char compq,
char compz, lapack_int n, lapack_int ilo, lapack_int ihi, double * h,
lapack_int ldh, double * t, lapack_int ldt, double * alphar, double *
alphai, double * beta, double * q, lapack_int ldq, double * z,
lapack_int ldz, double * work, lapack_int lwork)
Definition at line 36 of file lapacke_dhgeqz_work.c.
- ### 🌸
LAPACKE_dhsein
Inverse iteration for Hessenberg eigenvectors — select picks your victims and ifaill/ifailr report back on the left and right ones 😭
lapack_int LAPACKE_dhsein (int matrix_layout, char job, char eigsrc, char
initv, lapack_logical * select, lapack_int n, const double * h,
lapack_int ldh, double * wr, const double * wi, double * vl, lapack_int
ldvl, double * vr, lapack_int ldvr, lapack_int mm, lapack_int * m,
lapack_int * ifaill, lapack_int * ifailr)
Definition at line 36 of file lapacke_dhsein.c.
- ### 🌸
LAPACKE_dhsein_work
The workspace cut — work slides in right before ifaill and ifailr, order matters bestie 💅
lapack_int LAPACKE_dhsein_work (int matrix_layout, char job, char eigsrc,
char initv, lapack_logical * select, lapack_int n, const double * h,
lapack_int ldh, double * wr, const double * wi, double * vl, lapack_int
ldvl, double * vr, lapack_int ldvr, lapack_int mm, lapack_int * m,
double * work, lapack_int * ifaill, lapack_int * ifailr)
Definition at line 36 of file lapacke_dhsein_work.c.
- ### 🧚
LAPACKE_dhseqr
Computes the eigenvalues (and optionally the Schur form) of an upper Hessenberg matrix — wr and wi are the real/imaginary couple goals 👑💖
lapack_int LAPACKE_dhseqr (int matrix_layout, char job, char compz,
lapack_int n, lapack_int ilo, lapack_int ihi, double * h, lapack_int
ldh, double * wr, double * wi, double * z, lapack_int ldz)
Definition at line 36 of file lapacke_dhseqr.c.
🦋 LAPACKE_dhseqr_work
lapack_int LAPACKE_dhseqr_work (int matrix_layout, char job, char compz,
lapack_int n, lapack_int ilo, lapack_int ihi, double * h, lapack_int
ldh, double * wr, double * wi, double * z, lapack_int ldz, double *
work, lapack_int lwork)
Definition at line 36 of file lapacke_dhseqr_work.c.
Okay so this is the _work twin, and the way she's carrying a whole double * work plus her own lwork on top of h, ldh, wr, wi, z, ldz… she's fully packed for the trip, bestie. job, compz, ilo, ihi — the little char-and-int entourage. Iconic.
🎀 LAPACKE_dlacn2
lapack_int LAPACKE_dlacn2 (lapack_int n, double * v, double * x, lapack_int
* isgn, double * est, lapack_int * kase, lapack_int * isave)
Definition at line 36 of file lapacke_dlacn2.c.
No matrix_layout here, no layout drama, she just takes n, v, x, isgn, est, kase, isave and goes. Three of those are lapack_int * pointers and honestly the pointer-to-kase and pointer-to-isave combo is giving "state machine main character energy" 🫶.
✨ LAPACKE_dlacn2_work
lapack_int LAPACKE_dlacn2_work (lapack_int n, double * v, double * x,
lapack_int * isgn, double * est, lapack_int * kase, lapack_int * isave)
Definition at line 36 of file lapacke_dlacn2_work.c.
Same seven arguments, same order, one different file — lapacke_dlacn2_work.c instead of lapacke_dlacn2.c. Do not get these two confused, babe, they are twinsies but fr fr different files. 💅
🌸 LAPACKE_dlacpy
lapack_int LAPACKE_dlacpy (int matrix_layout, char uplo, lapack_int m,
lapack_int n, const double * a, lapack_int lda, double * b, lapack_int
ldb)
Definition at line 36 of file lapacke_dlacpy.c.
a comes in const (don't you dare touch her 💀), b comes out as a plain double *, and uplo gets to pick a corner. Plus m, n, lda, ldb because dimensions and leading dimensions are the whole personality of this library lowkey.
🧚 LAPACKE_dlacpy_work
lapack_int LAPACKE_dlacpy_work (int matrix_layout, char uplo, lapack_int m,
lapack_int n, const double * a, lapack_int lda, double * b, lapack_int
ldb)
Definition at line 36 of file lapacke_dlacpy_work.c.
Identical parameter list to her non-_work sister — matrix_layout, uplo, m, n, a, lda, b, ldb — just filed under lapacke_dlacpy_work.c. Slay, same fit different day.
🦋 LAPACKE_dlag2s
lapack_int LAPACKE_dlag2s (int matrix_layout, lapack_int m, lapack_int n,
const double * a, lapack_int lda, float * sa, lapack_int ldsa)
Definition at line 36 of file lapacke_dlag2s.c.
Not me pointing at the float * sa and the double * a in the same breath — yes bestie, both types are here, lda for the double one and ldsa for the float one. Read the leading dimensions carefully, the letters are the lore. 🔥
⭐ LAPACKE_dlag2s_work
lapack_int LAPACKE_dlag2s_work (int matrix_layout, lapack_int m, lapack_int
n, const double * a, lapack_int lda, float * sa, lapack_int ldsa)
Definition at line 36 of file lapacke_dlag2s_work.c.
Same seven args, same float * sa, same ldsa, and she lives at lapacke_dlag2s_work.c. If you're squinting at the screen to tell them apart, valid, we've all been there 😭.
🎀 LAPACKE_dlagge
lapack_int LAPACKE_dlagge (int matrix_layout, lapack_int m, lapack_int n,
lapack_int kl, lapack_int ku, const double * d, double * a, lapack_int
lda, lapack_int * iseed)
Definition at line 36 of file lapacke_dlagge.c.
kl and ku both showing up, d is const and a is not, and iseed is a lapack_int * — that's a seed being handed over by pointer, keep that in mind. No cap, she's got nine parameters and she's using every one. 💜
✨ LAPACKE_dlagge_work
lapack_int LAPACKE_dlagge_work (int matrix_layout, lapack_int m, lapack_int
n, lapack_int kl, lapack_int ku, const double * d, double * a,
lapack_int lda, lapack_int * iseed, double * work)
Definition at line 36 of file lapacke_dlagge_work.c.
Everything from LAPACKE_dlagge plus a trailing double * work — that's the entire diff, bestie, and she's at lapacke_dlagge_work.c. The _work suffix is literally just "and also bring a workspace." 🫶
🌈 LAPACKE_dlagsy
lapack_int LAPACKE_dlagsy (int matrix_layout, lapack_int n, lapack_int k,
const double * d, double * a, lapack_int lda, lapack_int * iseed)
Definition at line 36 of file lapacke_dlagsy.c.
Seven args: layout, n, k, const double * d, double * a, lda, lapack_int * iseed. Shorter than her lagge cousin — no m, no kl/ku — she said "square or nothing" and honestly? Respect.
🦋 LAPACKE_dlagsy_work
lapack_int LAPACKE_dlagsy_work (int matrix_layout, lapack_int n, lapack_int
k, const double * d, double * a, lapack_int lda, lapack_int * iseed,
double * work)
Definition at line 36 of file lapacke_dlagsy_work.c.
Yup, that's LAPACKE_dlagsy with double * work tacked on the end, chillin' in lapacke_dlagsy_work.c. Same vibe, extra baggage, we support her. 🎀
👑 LAPACKE_dlamch
double LAPACKE_dlamch (char cmach)
Definition at line 36 of file lapacke_dlamch.c.
One argument. One. char cmach. And she returns a double. The minimalism is honestly giving main character energy — no layout, no dimensions, just vibes and a character. ⭐
💅 LAPACKE_dlamch_work
double LAPACKE_dlamch_work (char cmach)
Definition at line 36 of file lapacke_dlamch_work.c.
Same single char cmach, same double return, different file: lapacke_dlamch_work.c. Yes the _work version of a one-argument function also exists, and yes she ate. 💀
🌸 LAPACKE_dlange
double LAPACKE_dlange (int matrix_layout, char norm, lapack_int m,
lapack_int n, const double * a, lapack_int lda)
Definition at line 36 of file lapacke_dlange.c.
Returns a double, takes norm as a char, and a is const double * because she's just looking, not touching. m, n, lda — the classic trio. We stan a read-only queen. 🫶
✨ LAPACKE_dlange_work
double LAPACKE_dlange_work (int matrix_layout, char norm, lapack_int m,
lapack_int n, const double * a, lapack_int lda, double * work)
Definition at line 36 of file lapacke_dlange_work.c.
Adds a double * work at the end and relocates to lapacke_dlange_work.c. Still returns double, still char norm, still not modifying a. Consistency is her brand. 🔥
🎀 LAPACKE_dlansy
double LAPACKE_dlansy (int matrix_layout, char norm, char uplo, lapack_int
n, const double * a, lapack_int lda)
Definition at line 36 of file lapacke_dlansy.c.
Two chars this time — norm and uplo — because she wants to know both how you're measuring and which triangle you're admitting exists. Only n here, no m, and I love that for her.
🧚 LAPACKE_dlansy_work
double LAPACKE_dlansy_work (int matrix_layout, char norm, char uplo,
lapack_int n, const double * a, lapack_int lda, double * work)
Definition at line 36 of file lapacke_dlansy_work.c.
matrix_layout, norm, uplo, n, a, lda, then work. That's the whole lineup, and the file is lapacke_dlansy_work.c. Copy that, don't transpose it. 🦋
🌈 LAPACKE_dlantr
double LAPACKE_dlantr (int matrix_layout, char norm, char uplo, char diag,
lapack_int m, lapack_int n, const double * a, lapack_int lda)
Definition at line 36 of file lapacke_dlantr.c.
THREE chars: norm, uplo, diag. Look at her go. Plus m and n are both back, a is const, lda tags along, and the return type is double. She contains multitudes. 💜
⭐ LAPACKE_dlantr_work
double LAPACKE_dlantr_work (int matrix_layout, char norm, char uplo, char
diag, lapack_int m, lapack_int n, const double * a, lapack_int lda,
double * work)
Definition at line 36 of file lapacke_dlantr_work.c.
Same three-char party — norm, uplo, diag — same m, n, a, lda, and then double * work walks in. Definition at line 36 of lapacke_dlantr_work.c. Gorgeous, no notes. 🎀
🦋 LAPACKE_dlapmr
lapack_int LAPACKE_dlapmr (int matrix_layout, lapack_logical forwrd,
lapack_int m, lapack_int n, double * x, lapack_int ldx, lapack_int * k)
Definition at line 36 of file lapacke_dlapmr.c.
lapack_logical forwrd — not int, not char, a whole lapack_logical, and the parameter is literally named forwrd with the vowel missing. The way I would die for this spelling 😭. x is mutable, k is a lapack_int *.
✨ LAPACKE_dlapmr_work
lapack_int LAPACKE_dlapmr_work (int matrix_layout, lapack_logical forwrd,
lapack_int m, lapack_int n, double * x, lapack_int ldx, lapack_int * k)
Definition at line 36 of file lapacke_dlapmr_work.c.
Same seven, forwrd still missing that vowel, and she's at lapacke_dlapmr_work.c. Note bestie: the _work version here takes no extra work argument — the signature is identical. Yes really. Read it again. 👀
🎀 LAPACKE_dlapmt
lapack_int LAPACKE_dlapmt (int matrix_layout, lapack_logical forwrd,
lapack_int m, lapack_int n, double * x, lapack_int ldx, lapack_int * k)
Definition at line 36 of file lapacke_dlapmt.c.
One letter apart from dlapmr in the name and character-for-character identical in the signature — forwrd, m, n, x, ldx, k. Please check your spelling at 2am, I'm begging. 🙈
🌸 LAPACKE_dlapmt_work
lapack_int LAPACKE_dlapmt_work (int matrix_layout, lapack_logical forwrd,
lapack_int m, lapack_int n, double * x, lapack_int ldx, lapack_int * k)
Definition at line 36 of file lapacke_dlapmt_work.c.
Same as above, lands in lapacke_dlapmt_work.c, no extra workspace parameter. She's low-maintenance like that. 💅
🧚 LAPACKE_dlapy2
double LAPACKE_dlapy2 (double x, double y)
Definition at line 36 of file lapacke_dlapy2.c.
Two doubles in, one double out, zero drama. x and y and that's the whole cast. The way she's just a little guy doing her little thing 😭💖
⭐ LAPACKE_dlapy2_work
double LAPACKE_dlapy2_work (double x, double y)
Definition at line 36 of file lapacke_dlapy2_work.c.
double x, double y, returns double, file lapacke_dlapy2_work.c. That's it. That's the entry. Short and perfect and she knows it. ✨
🌈 LAPACKE_dlapy3
double LAPACKE_dlapy3 (double x, double y, double z)
Definition at line 36 of file lapacke_dlapy3.c.
Okay she got a third one. x, y, z, all double, returns double. Growth! Evolution! We love a trilogy. 🔥
🦋 LAPACKE_dlapy3_work
double LAPACKE_dlapy3_work (double x, double y, double z)
Definition at line 36 of file lapacke_dlapy3_work.c.
double x, double y, double z, returns double, lives in lapacke_dlapy3_work.c. Same trio, different address. Periodt. 🎀
💜 LAPACKE_dlarfb
lapack_int LAPACKE_dlarfb (int matrix_layout, char side, char trans, char
direct, char storev, lapack_int m, lapack_int n, lapack_int k, const
double * v, lapack_int ldv, const double * t, lapack_int ldt, double *
c, lapack_int ldc)
Definition at line 36 of file lapacke_dlarfb.c.
FOUR chars — side, trans, direct, storev — and then m, n, k because why have one dimension when you can have three. v and t are const, c is the one getting written to, and ldv, ldt, ldc are all watching their respective backs. This is a fourteen-argument situation and she's thriving. 👑
✨ LAPACKE_dlarfb_work
lapack_int LAPACKE_dlarfb_work (int matrix_layout, char side, char trans,
char direct, char storev, lapack_int m, lapack_int n, lapack_int k,
const double * v, lapack_int ldv, const double * t, lapack_int ldt,
double * c, lapack_int ldc, double * work, lapack_int ldwork)
Definition at line 36 of file lapacke_dlarfb_work.c.
Sixteen args now, because she brought double * work AND lapack_int ldwork to the function. A leading dimension for the workspace. That's not a flex, that's a lifestyle. 🔥
🌸 LAPACKE_dlarfg
lapack_int LAPACKE_dlarfg (lapack_int n, double * alpha, double * x,
lapack_int incx, double * tau)
Definition at line 36 of file lapacke_dlarfg.c.
No matrix_layout! Just n, double * alpha, double * x, lapack_int incx, double * tau. And look at incx — an increment, not a leading dimension. Different flavor of pointer math, bestie, keep up. 😤
🧚 LAPACKE_dlarfg_work
lapack_int LAPACKE_dlarfg_work (lapack_int n, double * alpha, double * x,
lapack_int incx, double * tau)
Definition at line 36 of file lapacke_dlarfg_work.c.
Same five: n, alpha, x, incx, tau. No extra workspace arg. The _work name is doing heavy lifting here and honestly, she's mysterious. 💅
🦋 LAPACKE_dlarft
lapack_int LAPACKE_dlarft (int matrix_layout, char direct, char storev,
lapack_int n, lapack_int k, const double * v, lapack_int ldv, const
double * tau, double * t, lapack_int ldt)
Definition at line 36 of file lapacke_dlarft.c.
direct and storev are the two chars, n and k the two ints, v and tau are both const double *, and t comes out swinging as a plain double *. ldv and ldt for their respective leading dimensions. Ten args, all accounted for. ⭐
🎀 LAPACKE_dlarft_work
lapack_int LAPACKE_dlarft_work (int matrix_layout, char direct, char storev,
lapack_int n, lapack_int k, const double * v, lapack_int ldv, const
double * tau, double * t, lapack_int ldt)
Definition at line 36 of file lapacke_dlarft_work.c.
Identical ten-argument list to LAPACKE_dlarft, just at lapacke_dlarft_work.c. No hidden work param. She's the "I already have everything I need" of _work functions. 🫶
🌈 LAPACKE_dlarfx
lapack_int LAPACKE_dlarfx (int matrix_layout, char side, lapack_int m,
lapack_int n, const double * v, double tau, double * c, lapack_int ldc,
double * work)
Definition at line 36 of file lapacke_dlarfx.c.
Heads up: tau is a plain double, NOT a pointer — do not go dereferencing her, that's a whole different bug. v is const double *, c is writable, and double * work shows up even in the non-_work version. Yes bestie, read the sig twice. 👀
✨ LAPACKE_dlarfx_work
lapack_int LAPACKE_dlarfx_work (int matrix_layout, char side, lapack_int m,
lapack_int n, const double * v, double tau, double * c, lapack_int ldc,
double * work)
Definition at line 36 of file lapacke_dlarfx_work.c.
Byte-for-byte the same parameter list as LAPACKE_dlarfx, double tau included, defined at lapacke_dlarfx_work.c. The only glow-up is the filename. 💀
🦋 LAPACKE_dlarnv
lapack_int LAPACKE_dlarnv (lapack_int idist, lapack_int * iseed, lapack_int
n, double * x)
Definition at line 36 of file lapacke_dlarnv.c.
idist (an int, not a char, don't assume), iseed as a lapack_int *, then n and double * x. Only four args and no layout — she's a tiny little icon and she knows exactly what she's about. 🎀
⭐ LAPACKE_dlarnv_work
lapack_int LAPACKE_dlarnv_work (lapack_int idist, lapack_int * iseed,
lapack_int n, double * x)
Definition at line 36 of file lapacke_dlarnv_work.c.
Same four — idist, iseed, n, x — at lapacke_dlarnv_work.c. Again: no bonus work pointer. The _work suffix is not a contract, bestie, it's a surname. 💅
🌸 LAPACKE_dlartgp
lapack_int LAPACKE_dlartgp (double f, double g, double * cs, double * sn,
double * r)
Definition at line 36 of file lapacke_dlartgp.c.
f and g go in as plain doubles, then THREE double * outputs: cs, sn, r. She's handing you three things back at once, which is basically a gift. 🫶
🧚 LAPACKE_dlartgp_work
lapack_int LAPACKE_dlartgp_work (double f, double g, double * cs, double *
sn, double * r)
Definition at line 36 of file lapacke_dlartgp_work.c.
f, g, cs, sn, r — nothing added, nothing removed, plus the new address lapacke_dlartgp_work.c. She's consistent, she's reliable, she's a queen. 👑
🌈 LAPACKE_dlartgs
lapack_int LAPACKE_dlartgs (double x, double y, double sigma, double * cs,
double * sn)
Definition at line 36 of file lapacke_dlartgs.c.
Sibling of dlartgp but different enough to matter: three plain doubles in — x, y, sigma — and only TWO pointer outputs, cs and sn. No r here. Don't go looking for r, r has left the building. 😭
🎀 LAPACKE_dlartgs_work
lapack_int LAPACKE_dlartgs_work (double x, double y, double sigma, double *
cs, double * sn)
Definition at line 36 of file lapacke_dlartgs_work.c.
x, y, sigma, cs, sn. Five args, zero surprises, definition at line 36 of lapacke_dlartgs_work.c. A calm, collected icon. ✨
🦋 LAPACKE_dlascl
lapack_int LAPACKE_dlascl (int matrix_layout, char type, lapack_int kl,
lapack_int ku, double cfrom, double cto, lapack_int m, lapack_int n,
double * a, lapack_int lda)
Definition at line 36 of file lapacke_dlascl.c.
Careful here, bestie — cfrom and cto are plain doubles, not pointers, and the parameter is named type, not uplo. kl, ku, m, n, a, lda round out the ten. Yes, type is a char. Yes, it matters. 💅
⭐ LAPACKE_dlascl_work
lapack_int LAPACKE_dlascl_work (int matrix_layout, char type, lapack_int kl,
lapack_int ku, double cfrom, double cto, lapack_int m, lapack_int n,
double * a, lapack_int lda)
Definition at line 36 of file lapacke_dlascl_work.c.
Same ten, same plain-double cfrom/cto, same char type, now at lapacke_dlascl_work.c. Copy-paste energy but make it official documentation. 🫶
🌸 LAPACKE_dlaset
lapack_int LAPACKE_dlaset (int matrix_layout, char uplo, lapack_int m,
lapack_int n, double alpha, double beta, double * a, lapack_int lda)
Definition at line 36 of file lapacke_dlaset.c.
alpha and beta are values, not pointers — that's the whole thing to remember, and I need you to remember it so I don't have to explain a segfault at brunch. Then uplo, m, n, a, lda. 🍓
🧚 LAPACKE_dlaset_work
lapack_int LAPACKE_dlaset_work (int matrix_layout, char uplo, lapack_int m,
lapack_int n, double alpha, double beta, double * a, lapack_int lda)
Definition at line 36 of file lapacke_dlaset_work.c.
matrix_layout, uplo, m, n, alpha, beta, a, lda — identical to her sister — but she's filed under lapacke_dlaset_work.c. The _work versions are literally a family at this point. 💜
🌈 LAPACKE_dlasrt
lapack_int LAPACKE_dlasrt (char id, lapack_int n, double * d)
Definition at line 36 of file lapacke_dlasrt.c.
Three arguments. char id, lapack_int n, double * d. That's her whole world and she is unbothered and thriving. The audacity of this minimalism 🔥.
🎀 LAPACKE_dlasrt_work
lapack_int LAPACKE_dlasrt_work (char id, lapack_int n, double * d)
Definition at line 36 of file lapacke_dlasrt_work.c.
id, n, d. Same three, new file: lapacke_dlasrt_work.c. Consistency is literally her superpower. ⭐
🦋 LAPACKE_dlassq
lapack_int LAPACKE_dlassq (lapack_int n, double * x, lapack_int incx, double
* scale, double * sumsq)
Definition at line 36 of file lapacke_dlassq.c.
n, double * x, incx, then TWO in-out doubles — scale and sumsq — both passed by pointer. Note that x isn't const here, bestie, she's not promising anything. 👀
✨ LAPACKE_dlassq_work
lapack_int LAPACKE_dlassq_work (lapack_int n, double * x, lapack_int incx,
double * scale, double * sumsq)
Definition at line 36 of file lapacke_dlassq_work.c.
n, x, incx, scale, sumsq, and nothing else, in lapacke_dlassq_work.c. Still no const. Still not sorry. 💅
🌸 LAPACKE_dlaswp
lapack_int LAPACKE_dlaswp (int matrix_layout, lapack_int n, double * a,
lapack_int lda, lapack_int k1, lapack_int k2, const lapack_int * ipiv,
lapack_int incx)
Definition at line 36 of file lapacke_dlaswp.c.
ipiv is const lapack_int * — that's the permutation index array, and she is NOT being rewritten, so keep your hands off. Then k1, k2, incx, a, lda, n, matrix_layout. Eight and out. 🔥
🧚 LAPACKE_dlaswp_work
lapack_int LAPACKE_dlaswp_work (int matrix_layout, lapack_int n, double * a,
lapack_int lda, lapack_int k1, lapack_int k2, const lapack_int * ipiv,
lapack_int incx)
Definition at line 36 of file lapacke_dlaswp_work.c.
Same eight, const lapack_int * ipiv still const, and the file is lapacke_dlaswp_work.c. Another _work with no extra work arg — colleen, she's booked and busy. 🎀
🌈 LAPACKE_dlatms
lapack_int LAPACKE_dlatms (int matrix_layout, lapack_int m, lapack_int n,
char dist, lapack_int * iseed, char sym, double * d, lapack_int mode,
double cond, double dmax, lapack_int kl, lapack_int ku, char pack,
double * a, lapack_int lda)
Definition at line 36 of file lapacke_dlatms.c.
FIFTEEN arguments and the whole cast is here: dist, iseed, sym, d, mode, cond, dmax, kl, ku, pack, a, lda, m, n, matrix_layout. Chars, ints, a pointer to int, a pointer to double, and two plain doubles (cond and dmax — values, not pointers, don't start). She's the full ensemble episode. 👑🔥
⭐ LAPACKE_dlatms_work
lapack_int LAPACKE_dlatms_work (int matrix_layout, lapack_int m, lapack_int
n, char dist, lapack_int * iseed, char sym, double * d, lapack_int mode,
double cond, double dmax, lapack_int kl, lapack_int ku, char pack,
double * a, lapack_int lda, double * work)
Definition at line 36 of file lapacke_dlatms_work.c.
Sixteen args — everything from LAPACKE_dlatms plus one beautiful trailing double * work. Same dist, same sym, same pack, same plain cond and dmax. At lapacke_dlatms_work.c. Genuinely obsessed. 💜
🦋 LAPACKE_dlauum
lapack_int LAPACKE_dlauum (int matrix_layout, char uplo, lapack_int n,
double * a, lapack_int lda)
Definition at line 36 of file lapacke_dlauum.c.
Five args, name has three vowels in a row, uplo picks a triangle, a goes in and comes back changed, lda supervises. Short, sweet, spelled weirdly — a whole mood. 🎀
✨ LAPACKE_dlauum_work
lapack_int LAPACKE_dlauum_work (int matrix_layout, char uplo, lapack_int n,
double * a, lapack_int lda)
Definition at line 36 of file lapacke_dlauum_work.c.
matrix_layout, uplo, n, a, lda — same five, no additions — but she's registered at lapacke_dlauum_work.c. Three vowels and a _work, iconic. 🌈
🌸 LAPACKE_dopgtr
lapack_int LAPACKE_dopgtr (int matrix_layout, char uplo, lapack_int n, const
double * ap, const double * tau, double * q, lapack_int ldq)
Definition at line 36 of file lapacke_dopgtr.c.
ap and tau are both const double * — she's reading them and leaving them exactly as she found them — while q is the writable one with ldq in tow. Plus uplo and n. Seven, clean, done. 💅
🧚 LAPACKE_dopgtr_work
lapack_int LAPACKE_dopgtr_work (int matrix_layout, char uplo, lapack_int n,
const double * ap, const double * tau, double * q, lapack_int ldq,
double * work)
Definition at line 36 of file lapacke_dopgtr_work.c.
matrix_layout, uplo, n, ap, tau, q, ldq, work — eight args, the last one new, at lapacke_dopgtr_work.c. Same constness promises, extra workspace. 🫶
🌈 LAPACKE_dopmtr
lapack_int LAPACKE_dopmtr (int matrix_layout, char side, char uplo, char
trans, lapack_int m, lapack_int n, const double * ap, const double *
tau, double * c, lapack_int ldc)
Definition at line 36 of file lapacke_dopmtr.c.
Three chars back to back — side, uplo, trans — then m and n, then const double * ap and const double * tau chillin' read-only, and c taking the hit with ldc right there with her. Ten arguments, no work pointer in sight, and that's exactly how she likes it. ⭐
More coming, bestie — hold the vibe check, we're not done yet 🫶✨
LAPACKE_dopmtr_work— the_workedition ofdopmtr, with the fullworkarray handed to you so you can be the boss of your own buffer 💅
lapack_int LAPACKE_dopmtr_work (int matrix_layout, char side, char uplo,
char trans, lapack_int m, lapack_int n, const double * ap, const double
* tau, double * c, lapack_int ldc, double * work)
Definition at line 36 of file lapacke_dopmtr_work.c.
LAPACKE_dorbdb— bestie, that's a lot ofdouble *in one place:x11,x12,x21,x22, each with its ownldescort, plustheta,phi,taup1,taup2,tauq1,tauq2🦋
lapack_int LAPACKE_dorbdb (int matrix_layout, char trans, char signs,
lapack_int m, lapack_int p, lapack_int q, double * x11, lapack_int
ldx11, double * x12, lapack_int ldx12, double * x21, lapack_int ldx21,
double * x22, lapack_int ldx22, double * theta, double * phi, double *
taup1, double * taup2, double * tauq1, double * tauq2)
Definition at line 36 of file lapacke_dorbdb.c.
LAPACKE_dorbdb_work— same iconic cast of characters, except now you're also carryingworkand telling it yourlwork. main character buffer energy ✨
lapack_int LAPACKE_dorbdb_work (int matrix_layout, char trans, char signs,
lapack_int m, lapack_int p, lapack_int q, double * x11, lapack_int
ldx11, double * x12, lapack_int ldx12, double * x21, lapack_int ldx21,
double * x22, lapack_int ldx22, double * theta, double * phi, double *
taup1, double * taup2, double * tauq1, double * tauq2, double * work,
lapack_int lwork)
Definition at line 36 of file lapacke_dorbdb_work.c.
LAPACKE_dorcsd— four job flags in a trench coat:jobu1,jobu2,jobv1t,jobv2t, thentransandsignsfor good measure, and then so many matrices 🫶
lapack_int LAPACKE_dorcsd (int matrix_layout, char jobu1, char jobu2, char
jobv1t, char jobv2t, char trans, char signs, lapack_int m, lapack_int p,
lapack_int q, double * x11, lapack_int ldx11, double * x12, lapack_int
ldx12, double * x21, lapack_int ldx21, double * x22, lapack_int ldx22,
double * theta, double * u1, lapack_int ldu1, double * u2, lapack_int
ldu2, double * v1t, lapack_int ldv1t, double * v2t, lapack_int ldv2t)
Definition at line 36 of file lapacke_dorcsd.c.
LAPACKE_dorcsd2by1— the "2by1" remix 🌈 fewer matrices (x11,x21), same chaotic flag situation.
lapack_int LAPACKE_dorcsd2by1 (int matrix_layout, char jobu1, char jobu2,
char jobv1t, lapack_int m, lapack_int p, lapack_int q, double * x11,
lapack_int ldx11, double * x21, lapack_int ldx21, double * theta, double
* u1, lapack_int ldu1, double * u2, lapack_int ldu2, double * v1t,
lapack_int ldv1t)
Definition at line 36 of file lapacke_dorcsd2by1.c.
LAPACKE_dorcsd2by1_work— the_workversion, and look, it brought friends:work,lworkandiwork😭
lapack_int LAPACKE_dorcsd2by1_work (int matrix_layout, char jobu1, char
jobu2, char jobv1t, lapack_int m, lapack_int p, lapack_int q, double *
x11, lapack_int ldx11, double * x21, lapack_int ldx21, double * theta,
double * u1, lapack_int ldu1, double * u2, lapack_int ldu2, double *
v1t, lapack_int ldv1t, double * work, lapack_int lwork, lapack_int *
iwork)
Definition at line 36 of file lapacke_dorcsd2by1_work.c.
LAPACKE_dorcsd_work— the fulldorcsdguest list pluswork,lwork,iworkat the door 🎀
lapack_int LAPACKE_dorcsd_work (int matrix_layout, char jobu1, char jobu2,
char jobv1t, char jobv2t, char trans, char signs, lapack_int m,
lapack_int p, lapack_int q, double * x11, lapack_int ldx11, double *
x12, lapack_int ldx12, double * x21, lapack_int ldx21, double * x22,
lapack_int ldx22, double * theta, double * u1, lapack_int ldu1, double *
u2, lapack_int ldu2, double * v1t, lapack_int ldv1t, double * v2t,
lapack_int ldv2t, double * work, lapack_int lwork, lapack_int * iwork)
Definition at line 36 of file lapacke_dorcsd_work.c.
LAPACKE_dorgbr—vect,m,n,k, thenawith itslda, andtau. Genuinely so clean for once, we love a low-drama signature 💜
lapack_int LAPACKE_dorgbr (int matrix_layout, char vect, lapack_int m,
lapack_int n, lapack_int k, double * a, lapack_int lda, const double *
tau)
Definition at line 36 of file lapacke_dorgbr.c.
LAPACKE_dorgbr_work— same thing but withworkandlworkbolted on the end, as is tradition ✨
lapack_int LAPACKE_dorgbr_work (int matrix_layout, char vect, lapack_int m,
lapack_int n, lapack_int k, double * a, lapack_int lda, const double *
tau, double * work, lapack_int lwork)
Definition at line 36 of file lapacke_dorgbr_work.c.
LAPACKE_dorgbr's cousinLAPACKE_dorghr— this one's gotiloandihiinstead ofm,n,k, so mind the difference bestie 👀
lapack_int LAPACKE_dorghr (int matrix_layout, lapack_int n, lapack_int ilo,
lapack_int ihi, double * a, lapack_int lda, const double * tau)
Definition at line 36 of file lapacke_dorghr.c.
LAPACKE_dorghr_work—dorghrwith thework/lworkglow-up 🌸
lapack_int LAPACKE_dorghr_work (int matrix_layout, lapack_int n, lapack_int
ilo, lapack_int ihi, double * a, lapack_int lda, const double * tau,
double * work, lapack_int lwork)
Definition at line 36 of file lapacke_dorghr_work.c.
LAPACKE_dorglq— back to them,n,ktrio. Thelqgirlies ate, no notes 🔥
lapack_int LAPACKE_dorglq (int matrix_layout, lapack_int m, lapack_int n,
lapack_int k, double * a, lapack_int lda, const double * tau)
Definition at line 36 of file lapacke_dorglq.c.
LAPACKE_dorglq_work— pluswork, pluslwork. Periodt.
lapack_int LAPACKE_dorglq_work (int matrix_layout, lapack_int m, lapack_int
n, lapack_int k, double * a, lapack_int lda, const double * tau, double
* work, lapack_int lwork)
Definition at line 36 of file lapacke_dorglq_work.c.
LAPACKE_dorgql— literally the same shape asdorglq, just with the letters flipped. Do not mix them up, iykyk 💀
lapack_int LAPACKE_dorgql (int matrix_layout, lapack_int m, lapack_int n,
lapack_int k, double * a, lapack_int lda, const double * tau)
Definition at line 36 of file lapacke_dorgql.c.
LAPACKE_dorgql_work— the_worktwin of the above,workandlworkincluded 🎀
lapack_int LAPACKE_dorgql_work (int matrix_layout, lapack_int m, lapack_int
n, lapack_int k, double * a, lapack_int lda, const double * tau, double
* work, lapack_int lwork)
Definition at line 36 of file lapacke_dorgql_work.c.
LAPACKE_dorgqr— the iconic one, theqrclassic 👑 samem,n,k, samea/lda/tautrio.
lapack_int LAPACKE_dorgqr (int matrix_layout, lapack_int m, lapack_int n,
lapack_int k, double * a, lapack_int lda, const double * tau)
Definition at line 36 of file lapacke_dorgqr.c.
LAPACKE_dorgqr_work— and here's its_workversion, buffer and all 🦋
lapack_int LAPACKE_dorgqr_work (int matrix_layout, lapack_int m, lapack_int
n, lapack_int k, double * a, lapack_int lda, const double * tau, double
* work, lapack_int lwork)
Definition at line 36 of file lapacke_dorgqr_work.c.
LAPACKE_dorgrq—rqedition, same lineup, different vibe ⭐
lapack_int LAPACKE_dorgrq (int matrix_layout, lapack_int m, lapack_int n,
lapack_int k, double * a, lapack_int lda, const double * tau)
Definition at line 36 of file lapacke_dorgrq.c.
LAPACKE_dorgrq_work— same but with thework/lworksprinkles ✨
lapack_int LAPACKE_dorgrq_work (int matrix_layout, lapack_int m, lapack_int
n, lapack_int k, double * a, lapack_int lda, const double * tau, double
* work, lapack_int lwork)
Definition at line 36 of file lapacke_dorgrq_work.c.
LAPACKE_dorgtr— switches it up withuploinstead of them/n/ksituation. Note the flex 💅
lapack_int LAPACKE_dorgtr (int matrix_layout, char uplo, lapack_int n,
double * a, lapack_int lda, const double * tau)
Definition at line 36 of file lapacke_dorgtr.c.
LAPACKE_dorgtr_work—dorgtrwithworkandlworktagging along 🫶
lapack_int LAPACKE_dorgtr_work (int matrix_layout, char uplo, lapack_int n,
double * a, lapack_int lda, const double * tau, double * work,
lapack_int lwork)
Definition at line 36 of file lapacke_dorgtr_work.c.
LAPACKE_dormbr— now we're in theormera, bestie.vectandsideandtrans, plusm,n,k, and thec/ldccombo at the end 🌈
lapack_int LAPACKE_dormbr (int matrix_layout, char vect, char side, char
trans, lapack_int m, lapack_int n, lapack_int k, const double * a,
lapack_int lda, const double * tau, double * c, lapack_int ldc)
Definition at line 36 of file lapacke_dormbr.c.
LAPACKE_dormbr_work— same, plusworkandlwork, obviously 😌
lapack_int LAPACKE_dormbr_work (int matrix_layout, char vect, char side,
char trans, lapack_int m, lapack_int n, lapack_int k, const double * a,
lapack_int lda, const double * tau, double * c, lapack_int ldc, double *
work, lapack_int lwork)
Definition at line 36 of file lapacke_dormbr_work.c.
LAPACKE_dormhr— swapsvectforilo/ihi. Chaotic of her but we respect it 🎀
lapack_int LAPACKE_dormhr (int matrix_layout, char side, char trans,
lapack_int m, lapack_int n, lapack_int ilo, lapack_int ihi, const double
* a, lapack_int lda, const double * tau, double * c, lapack_int ldc)
Definition at line 36 of file lapacke_dormhr.c.
LAPACKE_dormhr_work—_workenergy,workarray,lworkcount 🔥
lapack_int LAPACKE_dormhr_work (int matrix_layout, char side, char trans,
lapack_int m, lapack_int n, lapack_int ilo, lapack_int ihi, const double
* a, lapack_int lda, const double * tau, double * c, lapack_int ldc,
double * work, lapack_int lwork)
Definition at line 36 of file lapacke_dormhr_work.c.
LAPACKE_dormlq—side+trans, thenm,n,k, thena/lda/tauandc/ldc. It's giving very consistent ✨
lapack_int LAPACKE_dormlq (int matrix_layout, char side, char trans,
lapack_int m, lapack_int n, lapack_int k, const double * a, lapack_int
lda, const double * tau, double * c, lapack_int ldc)
Definition at line 36 of file lapacke_dormlq.c.
LAPACKE_dormlq_work— the buffered remix,workandlworkincluded 🦋
lapack_int LAPACKE_dormlq_work (int matrix_layout, char side, char trans,
lapack_int m, lapack_int n, lapack_int k, const double * a, lapack_int
lda, const double * tau, double * c, lapack_int ldc, double * work,
lapack_int lwork)
Definition at line 36 of file lapacke_dormlq_work.c.
LAPACKE_dormql— again, letters flipped fromdormlq, everything else identical. Stay awake bestie ⭐
lapack_int LAPACKE_dormql (int matrix_layout, char side, char trans,
lapack_int m, lapack_int n, lapack_int k, const double * a, lapack_int
lda, const double * tau, double * c, lapack_int ldc)
Definition at line 36 of file lapacke_dormql.c.
LAPACKE_dormql_work— the_worktwin, zero surprises, all vibes 💜
lapack_int LAPACKE_dormql_work (int matrix_layout, char side, char trans,
lapack_int m, lapack_int n, lapack_int k, const double * a, lapack_int
lda, const double * tau, double * c, lapack_int ldc, double * work,
lapack_int lwork)
Definition at line 36 of file lapacke_dormql_work.c.
LAPACKE_dormqr— the main character of theormfamily, sorry not sorry 👑
lapack_int LAPACKE_dormqr (int matrix_layout, char side, char trans,
lapack_int m, lapack_int n, lapack_int k, const double * a, lapack_int
lda, const double * tau, double * c, lapack_int ldc)
Definition at line 36 of file lapacke_dormqr.c.
LAPACKE_dormqr_work—dormqrbut you're driving the buffer yourself 🎀
lapack_int LAPACKE_dormqr_work (int matrix_layout, char side, char trans,
lapack_int m, lapack_int n, lapack_int k, const double * a, lapack_int
lda, const double * tau, double * c, lapack_int ldc, double * work,
lapack_int lwork)
Definition at line 36 of file lapacke_dormqr_work.c.
LAPACKE_dormrq—rqgirlie, same parameter party 🌸
lapack_int LAPACKE_dormrq (int matrix_layout, char side, char trans,
lapack_int m, lapack_int n, lapack_int k, const double * a, lapack_int
lda, const double * tau, double * c, lapack_int ldc)
Definition at line 36 of file lapacke_dormrq.c.
LAPACKE_dormrq_work— and withwork+lwork, she's complete 🫶
lapack_int LAPACKE_dormrq_work (int matrix_layout, char side, char trans,
lapack_int m, lapack_int n, lapack_int k, const double * a, lapack_int
lda, const double * tau, double * c, lapack_int ldc, double * work,
lapack_int lwork)
Definition at line 36 of file lapacke_dormrq_work.c.
LAPACKE_dormrz— ok she's different: there's alapack_int lsitting betweenkanda, so read carefully 👀🔥
lapack_int LAPACKE_dormrz (int matrix_layout, char side, char trans,
lapack_int m, lapack_int n, lapack_int k, lapack_int l, const double *
a, lapack_int lda, const double * tau, double * c, lapack_int ldc)
Definition at line 36 of file lapacke_dormrz.c.
LAPACKE_dormrz_work— the extraland thework/lworkduo. Triple-check your args, ngl 💀
lapack_int LAPACKE_dormrz_work (int matrix_layout, char side, char trans,
lapack_int m, lapack_int n, lapack_int k, lapack_int l, const double *
a, lapack_int lda, const double * tau, double * c, lapack_int ldc,
double * work, lapack_int lwork)
Definition at line 36 of file lapacke_dormrz_work.c.
LAPACKE_dormtr— brings backuplo! So it'sside,uplo,trans, thenm,n,a,lda,tau,c,ldc🌈
lapack_int LAPACKE_dormtr (int matrix_layout, char side, char uplo, char
trans, lapack_int m, lapack_int n, const double * a, lapack_int lda,
const double * tau, double * c, lapack_int ldc)
Definition at line 36 of file lapacke_dormtr.c.
LAPACKE_dormtr_work—dormtrplus thework/lworkencore ⭐
lapack_int LAPACKE_dormtr_work (int matrix_layout, char side, char uplo,
char trans, lapack_int m, lapack_int n, const double * a, lapack_int
lda, const double * tau, double * c, lapack_int ldc, double * work,
lapack_int lwork)
Definition at line 36 of file lapacke_dormtr_work.c.
LAPACKE_dpbcon— new family alert 🚨pb! We gotuplo,n,kd,abwithldab, thenanormandrcond.
lapack_int LAPACKE_dpbcon (int matrix_layout, char uplo, lapack_int n,
lapack_int kd, const double * ab, lapack_int ldab, double anorm, double
* rcond)
Definition at line 36 of file lapacke_dpbcon.c.
LAPACKE_dpbcon_work— same but now with BOTH aworkarray and aniworkinteger array 🍓
lapack_int LAPACKE_dpbcon_work (int matrix_layout, char uplo, lapack_int n,
lapack_int kd, const double * ab, lapack_int ldab, double anorm, double
* rcond, double * work, lapack_int * iwork)
Definition at line 36 of file lapacke_dpbcon_work.c.
LAPACKE_dpbequ— last one in this batch!uplo,n,kd,ab,ldab, then three outputs:s,scond,amax. She's giving results 💅
lapack_int LAPACKE_dpbequ (int matrix_layout, char uplo, lapack_int n,
lapack_int kd, const double * ab, lapack_int ldab, double * s, double *
scond, double * amax)
Definition at line 36 of file lapacke_dpbequ.c.
LAPACKE_dpbequ_work
lapack_int LAPACKE_dpbequ_work (int matrix_layout, char uplo, lapack_int n,
lapack_int kd, const double * ab, lapack_int ldab, double * s, double *
scond, double * amax)
Definition at line 36 of file lapacke_dpbequ_work.c.
okay so this is the _work twin of the equilibration vibe 💅 note the ab/ldab band-storage energy and the trio of output pointers s, scond, amax — all hanging out at the end of the arg list like the last three people to leave the party. 🎀
LAPACKE_dpbrfs
lapack_int LAPACKE_dpbrfs (int matrix_layout, char uplo, lapack_int n,
lapack_int kd, lapack_int nrhs, const double * ab, lapack_int ldab,
const double * afb, lapack_int ldafb, const double * b, lapack_int ldb,
double * x, lapack_int ldx, double * ferr, double * berr)
Definition at line 36 of file lapacke_dpbrfs.c.
bestie look at this arg list — ab + ldab, then afb + ldafb, then b + ldb, then x + ldx, and finally ferr and berr are just... vibing at the end 🦋 every matrix brings its own leading dimension, that's the whole aesthetic, no cap.
LAPACKE_dpbrfs_work
lapack_int LAPACKE_dpbrfs_work (int matrix_layout, char uplo, lapack_int n,
lapack_int kd, lapack_int nrhs, const double * ab, lapack_int ldab,
const double * afb, lapack_int ldafb, const double * b, lapack_int ldb,
double * x, lapack_int ldx, double * ferr, double * berr, double * work,
lapack_int * iwork)
Definition at line 36 of file lapacke_dpbrfs_work.c.
literally the same lineup as LAPACKE_dpbrfs but it brought friends 💀 you get work (a double *) and iwork (a lapack_int *) tacked on the end. the more the merrier honestly 🫶
LAPACKE_dpbstf
lapack_int LAPACKE_dpbstf (int matrix_layout, char uplo, lapack_int n,
lapack_int kb, double * bb, lapack_int ldbb)
Definition at line 36 of file lapacke_dpbstf.c.
short, sweet, and to the point 🌸 uplo, n, kb, then your bb matrix with its ldbb leading dimension. sometimes a function just knows what it wants and doesn't overthink it ✨
LAPACKE_dpbstf_work
lapack_int LAPACKE_dpbstf_work (int matrix_layout, char uplo, lapack_int n,
lapack_int kb, double * bb, lapack_int ldbb)
Definition at line 36 of file lapacke_dpbstf_work.c.
iconic behaviour: identical signature to LAPACKE_dpbstf, just the _work version doing its thing in its own file. yes they're the same. no I will not be explaining further. 💅
LAPACKE_dpbsv
lapack_int LAPACKE_dpbsv (int matrix_layout, char uplo, lapack_int n,
lapack_int kd, lapack_int nrhs, double * ab, lapack_int ldab, double *
b, lapack_int ldb)
Definition at line 36 of file lapacke_dpbsv.c.
the -sv girlies ate with this one 🔥 band matrix ab with ldab, right-hand side b with ldb, and nrhs for how many right-hand sides you're serving. main character energy fr fr 👑
LAPACKE_dpbsv_work
lapack_int LAPACKE_dpbsv_work (int matrix_layout, char uplo, lapack_int n,
lapack_int kd, lapack_int nrhs, double * ab, lapack_int ldab, double *
b, lapack_int ldb)
Definition at line 36 of file lapacke_dpbsv_work.c.
same signature as LAPACKE_dpbsv, different file, same amount of drama. 🍓 two icons, one family.
LAPACKE_dpbsvx
lapack_int LAPACKE_dpbsvx (int matrix_layout, char fact, char uplo,
lapack_int n, lapack_int kd, lapack_int nrhs, double * ab, lapack_int
ldab, double * afb, lapack_int ldafb, char * equed, double * s, double *
b, lapack_int ldb, double * x, lapack_int ldx, double * rcond, double *
ferr, double * berr)
Definition at line 36 of file lapacke_dpbsvx.c.
the extra x at the end of the name really said "let me cook" 😭 and look at this arg list — fact up front as a char, then equed and s and b/ldb and x/ldx, then the review squad rcond, ferr, berr. it's giving whole ordeal. a beautiful one though. ✨
LAPACKE_dpbsvx_work
lapack_int LAPACKE_dpbsvx_work (int matrix_layout, char fact, char uplo,
lapack_int n, lapack_int kd, lapack_int nrhs, double * ab, lapack_int
ldab, double * afb, lapack_int ldafb, char * equed, double * s, double *
b, lapack_int ldb, double * x, lapack_int ldx, double * rcond, double *
ferr, double * berr, double * work, lapack_int * iwork)
Definition at line 36 of file lapacke_dpbsvx_work.c.
LAPACKE_dpbsvx but with work and iwork bolted onto the end like the little bows on a gift 🎀 exact same everything else, keep the order, don't rearrange, iykyk.
LAPACKE_dpbtrf
lapack_int LAPACKE_dpbtrf (int matrix_layout, char uplo, lapack_int n,
lapack_int kd, double * ab, lapack_int ldab)
Definition at line 36 of file lapacke_dpbtrf.c.
uplo + n + kd and one lone ab/ldab pair. six args, zero notes, absolutely flawless. ⭐
LAPACKE_dpbtrf_work
lapack_int LAPACKE_dpbtrf_work (int matrix_layout, char uplo, lapack_int n,
lapack_int kd, double * ab, lapack_int ldab)
Definition at line 36 of file lapacke_dpbtrf_work.c.
yep, identical to LAPACKE_dpbtrf, the _work suffix is doing all the heavy lifting in the naming department. 💜
LAPACKE_dpbtrs
lapack_int LAPACKE_dpbtrs (int matrix_layout, char uplo, lapack_int n,
lapack_int kd, lapack_int nrhs, const double * ab, lapack_int ldab,
double * b, lapack_int ldb)
Definition at line 36 of file lapacke_dpbtrs.c.
notice ab is const double * here but b is plain double * — one reads, one writes, that's the whole dynamic 🔥 nrhs is there to tell you how many right-hand sides b is packing.
LAPACKE_dpbtrs_work
lapack_int LAPACKE_dpbtrs_work (int matrix_layout, char uplo, lapack_int n,
lapack_int kd, lapack_int nrhs, const double * ab, lapack_int ldab,
double * b, lapack_int ldb)
Definition at line 36 of file lapacke_dpbtrs_work.c.
identical to LAPACKE_dpbtrs, no extra args, no notes, just the _work label. consistencty is a love language 🫶
LAPACKE_dpftrf
lapack_int LAPACKE_dpftrf (int matrix_layout, char transr, char uplo,
lapack_int n, double * a)
Definition at line 36 of file lapacke_dpftrf.c.
two char args back to back (transr then uplo) and then a single a with no leading dimension in sight 😳 yes bestie, no lda, read it again, it's really not there. iconic.
LAPACKE_dpftrf_work
lapack_int LAPACKE_dpftrf_work (int matrix_layout, char transr, char uplo,
lapack_int n, double * a)
Definition at line 36 of file lapacke_dpftrf_work.c.
same five args as LAPACKE_dpftrf. still no leading dimension. we stay unbothered 🌸
LAPACKE_dpftri
lapack_int LAPACKE_dpftri (int matrix_layout, char transr, char uplo,
lapack_int n, double * a)
Definition at line 36 of file lapacke_dpftri.c.
transr! uplo! n! a! that's the whole thing. short king behaviour honestly 💀
LAPACKE_dpftri_work
lapack_int LAPACKE_dpftri_work (int matrix_layout, char transr, char uplo,
lapack_int n, double * a)
Definition at line 36 of file lapacke_dpftri_work.c.
identical signature, _work edition, no extra args. the consistency is lowkey soothing 🦋
LAPACKE_dpftrs
lapack_int LAPACKE_dpftrs (int matrix_layout, char transr, char uplo,
lapack_int n, lapack_int nrhs, const double * a, double * b, lapack_int
ldb)
Definition at line 36 of file lapacke_dpftrs.c.
a is const, b is not, nrhs tells you how many columns of b are in play, and ldb is hanging on at the end being its usual self. ✨
LAPACKE_dpftrs_work
lapack_int LAPACKE_dpftrs_work (int matrix_layout, char transr, char uplo,
lapack_int n, lapack_int nrhs, const double * a, double * b, lapack_int
ldb)
Definition at line 36 of file lapacke_dpftrs_work.c.
matchy-matchy with LAPACKE_dpftrs, just living in a different file. we love a reliable sibling 🌈
LAPACKE_dpocon
lapack_int LAPACKE_dpocon (int matrix_layout, char uplo, lapack_int n, const
double * a, lapack_int lda, double anorm, double * rcond)
Definition at line 36 of file lapacke_dpocon.c.
okay so anorm is a plain double (not a pointer!) sitting right between lda and rcond, and that little detail is the whole personality of this function. don't let your brain autopilot past it 🙈
LAPACKE_dpocon_work
lapack_int LAPACKE_dpocon_work (int matrix_layout, char uplo, lapack_int n,
const double * a, lapack_int lda, double anorm, double * rcond, double *
work, lapack_int * iwork)
Definition at line 36 of file lapacke_dpocon_work.c.
anorm is still a plain double, and now work + iwork are at the end. the glow-up is subtle but it's there 💅
LAPACKE_dpoequ
lapack_int LAPACKE_dpoequ (int matrix_layout, lapack_int n, const double *
a, lapack_int lda, double * s, double * scond, double * amax)
Definition at line 36 of file lapacke_dpoequ.c.
no uplo here bestie, it just goes matrix_layout, n, a/lda, then the pointer squad s, scond, amax. three outputs, no waiting 🎀
LAPACKE_dpoequ_work
lapack_int LAPACKE_dpoequ_work (int matrix_layout, lapack_int n, const
double * a, lapack_int lda, double * s, double * scond, double * amax)
Definition at line 36 of file lapacke_dpoequ_work.c.
identical to LAPACKE_dpoequ. same s/scond/amax trio, same no-uplo energy. ⭐
LAPACKE_dpoequb
lapack_int LAPACKE_dpoequb (int matrix_layout, lapack_int n, const double *
a, lapack_int lda, double * s, double * scond, double * amax)
Definition at line 36 of file lapacke_dpoequb.c.
the b at the end of the name is the ONLY difference from LAPACKE_dpoequ and the signature is genuinely the same. read that twice. yes. 🦋
LAPACKE_dpoequb_work
lapack_int LAPACKE_dpoequb_work (int matrix_layout, lapack_int n, const
double * a, lapack_int lda, double * s, double * scond, double * amax)
Definition at line 36 of file lapacke_dpoequb_work.c.
and here's the _work of that one. same args. I'm as surprised as you are ✨
LAPACKE_dporfs
lapack_int LAPACKE_dporfs (int matrix_layout, char uplo, lapack_int n,
lapack_int nrhs, const double * a, lapack_int lda, const double * af,
lapack_int ldaf, const double * b, lapack_int ldb, double * x,
lapack_int ldx, double * ferr, double * berr)
Definition at line 36 of file lapacke_dporfs.c.
count the leading dimensions with me: lda, ldaf, ldb, ldx. four of them. four!! and after all that, ferr and berr just stroll in at the end like they own the place 😭
LAPACKE_dporfs_work
lapack_int LAPACKE_dporfs_work (int matrix_layout, char uplo, lapack_int n,
lapack_int nrhs, const double * a, lapack_int lda, const double * af,
lapack_int ldaf, const double * b, lapack_int ldb, double * x,
lapack_int ldx, double * ferr, double * berr, double * work, lapack_int
* iwork)
Definition at line 36 of file lapacke_dporfs_work.c.
LAPACKE_dporfs plus work and iwork. all your const pointers stay const, don't get creative, just scroll to the end and add the two extras. 🫶
LAPACKE_dporfsx
lapack_int LAPACKE_dporfsx (int matrix_layout, char uplo, char equed,
lapack_int n, lapack_int nrhs, const double * a, lapack_int lda, const
double * af, lapack_int ldaf, const double * s, const double * b,
lapack_int ldb, double * x, lapack_int ldx, double * rcond, double *
berr, lapack_int n_err_bnds, double * err_bnds_norm, double *
err_bnds_comp, lapack_int nparams, double * params)
Definition at line 36 of file lapacke_dporfsx.c.
okay THIS one is the main character 🔥 twenty-one args. equed as a char, s as const, then rcond and berr, then the whole n_err_bnds / err_bnds_norm / err_bnds_comp / nparams / params finale. it's giving finale-of-the-tour energy 👑
LAPACKE_dporfsx_work
lapack_int LAPACKE_dporfsx_work (int matrix_layout, char uplo, char equed,
lapack_int n, lapack_int nrhs, const double * a, lapack_int lda, const
double * af, lapack_int ldaf, const double * s, const double * b,
lapack_int ldb, double * x, lapack_int ldx, double * rcond, double *
berr, lapack_int n_err_bnds, double * err_bnds_norm, double *
err_bnds_comp, lapack_int nparams, double * params, double * work,
lapack_int * iwork)
Definition at line 36 of file lapacke_dporfsx_work.c.
twenty-three args now. TWENTY-THREE. take a breath, scroll the signature, and note that work and iwork are the only new additions at the very end 💀
LAPACKE_dposv
lapack_int LAPACKE_dposv (int matrix_layout, char uplo, lapack_int n,
lapack_int nrhs, double * a, lapack_int lda, double * b, lapack_int ldb)
Definition at line 36 of file lapacke_dposv.c.
short and slay. a/lda, b/ldb, both plain double *, both getting written to. no consts here, we're going in 🌈
LAPACKE_dposv_work
lapack_int LAPACKE_dposv_work (int matrix_layout, char uplo, lapack_int n,
lapack_int nrhs, double * a, lapack_int lda, double * b, lapack_int ldb)
Definition at line 36 of file lapacke_dposv_work.c.
same eight args as LAPACKE_dposv. no extras. no surprises. just vibes 🦋
LAPACKE_dposvx
lapack_int LAPACKE_dposvx (int matrix_layout, char fact, char uplo,
lapack_int n, lapack_int nrhs, double * a, lapack_int lda, double * af,
lapack_int ldaf, char * equed, double * s, double * b, lapack_int ldb,
double * x, lapack_int ldx, double * rcond, double * ferr, double *
berr)
Definition at line 36 of file lapacke_dposvx.c.
fact starts the show, equed is a char * (pointer this time, not a bare char — don't mix them up bestie 🙈), and the tail is rcond, ferr, berr. it's a lot and it's correct. 💅
LAPACKE_dposvx_work
lapack_int LAPACKE_dposvx_work (int matrix_layout, char fact, char uplo,
lapack_int n, lapack_int nrhs, double * a, lapack_int lda, double * af,
lapack_int ldaf, char * equed, double * s, double * b, lapack_int ldb,
double * x, lapack_int ldx, double * rcond, double * ferr, double *
berr, double * work, lapack_int * iwork)
Definition at line 36 of file lapacke_dposvx_work.c.
the same eighteen plus work and iwork equals a nice round twenty. math is mathing today ✨
LAPACKE_dposvxx
lapack_int LAPACKE_dposvxx (int matrix_layout, char fact, char uplo,
lapack_int n, lapack_int nrhs, double * a, lapack_int lda, double * af,
lapack_int ldaf, char * equed, double * s, double * b, lapack_int ldb,
double * x, lapack_int ldx, double * rcond, double * rpvgrw, double *
berr, lapack_int n_err_bnds, double * err_bnds_norm, double *
err_bnds_comp, lapack_int nparams, double * params)
Definition at line 36 of file lapacke_dposvxx.c.
the double-x version said "add more" and honestly? it ate 🔥 spot the new rpvgrw tucked in right after rcond, plus the whole error-bounds crew at the end. one extra x, so many extra args. iconic. 👑
LAPACKE_dposvxx_work
lapack_int LAPACKE_dposvxx_work (int matrix_layout, char fact, char uplo,
lapack_int n, lapack_int nrhs, double * a, lapack_int lda, double * af,
lapack_int ldaf, char * equed, double * s, double * b, lapack_int ldb,
double * x, lapack_int ldx, double * rcond, double * rpvgrw, double *
berr, lapack_int n_err_bnds, double * err_bnds_norm, double *
err_bnds_comp, lapack_int nparams, double * params, double * work,
lapack_int * iwork)
Definition at line 36 of file lapacke_dposvxx_work.c.
genuinely the longest one in this batch and it's not even close 😭 everything from LAPACKE_dposvxx, plus work and iwork, perfectly parked at the end. 🫶
LAPACKE_dpotrf
lapack_int LAPACKE_dpotrf (int matrix_layout, char uplo, lapack_int n,
double * a, lapack_int lda)
Definition at line 36 of file lapacke_dpotrf.c.
five args, one uplo, one a/lda pair. a classic. a legend. the blueprint 💜
LAPACKE_dpotrf2
lapack_int LAPACKE_dpotrf2 (int matrix_layout, char uplo, lapack_int n,
double * a, lapack_int lda)
Definition at line 36 of file lapacke_dpotrf2.c.
the 2 in the name is the entire difference from LAPACKE_dpotrf on the signature level. five args. same five. 🌸
LAPACKE_dpotrf2_work
lapack_int LAPACKE_dpotrf2_work (int matrix_layout, char uplo, lapack_int n,
double * a, lapack_int lda)
Definition at line 36 of file lapacke_dpotrf2_work.c.
_work on the end, still five args, still no extra buffers. obsessed with the restraint honestly 🎀
LAPACKE_dpotrf_work
lapack_int LAPACKE_dpotrf_work (int matrix_layout, char uplo, lapack_int n,
double * a, lapack_int lda)
Definition at line 36 of file lapacke_dpotrf_work.c.
the _work of the original LAPACKE_dpotrf, and yes, same five args, no trailing buffers. did I check twice? absolutely. 💅
LAPACKE_dpotri
lapack_int LAPACKE_dpotri (int matrix_layout, char uplo, lapack_int n,
double * a, lapack_int lda)
Definition at line 36 of file lapacke_dpotri.c.
-tri era. same skeleton as its siblings: matrix_layout, uplo, n, a, lda. a family that dresses alike 🦋
LAPACKE_dpotri_work
lapack_int LAPACKE_dpotri_work (int matrix_layout, char uplo, lapack_int n,
double * a, lapack_int lda)
Definition at line 36 of file lapacke_dpotri_work.c.
same five. _work version. that's the post ✨
LAPACKE_dpotrs
lapack_int LAPACKE_dpotrs (int matrix_layout, char uplo, lapack_int n,
lapack_int nrhs, const double * a, lapack_int lda, double * b,
lapack_int ldb)
Definition at line 36 of file lapacke_dpotrs.c.
here a went const on us (don't write, bestie) while b stays writable, and nrhs is wedged between n and the matrices. classic layout, no notes. ⭐
LAPACKE_dpotrs_work
lapack_int LAPACKE_dpotrs_work (int matrix_layout, char uplo, lapack_int n,
lapack_int nrhs, const double * a, lapack_int lda, double * b,
lapack_int ldb)
Definition at line 36 of file lapacke_dpotrs_work.c.
identical to LAPACKE_dpotrs, a still const, b still not, no extra args. consistent queen 💜
LAPACKE_dppcon
lapack_int LAPACKE_dppcon (int matrix_layout, char uplo, lapack_int n, const
double * ap, double anorm, double * rcond)
Definition at line 36 of file lapacke_dppcon.c.
note the ap (not a, not ab — ap, packed storage energy 🌈), and there's no leading dimension because... there isn't one. anorm is a plain double, rcond is a pointer. 🍓
LAPACKE_dppcon_work
lapack_int LAPACKE_dppcon_work (int matrix_layout, char uplo, lapack_int n,
const double * ap, double anorm, double * rcond, double * work,
lapack_int * iwork)
Definition at line 36 of file lapacke_dppcon_work.c.
ap, anorm, rcond, then work and iwork come crashing the party at the end. same as LAPACKE_dppcon otherwise, promise 🫶
LAPACKE_dppequ 💖
lapack_int LAPACKE_dppequ (int matrix_layout, char uplo, lapack_int n, const double * ap, double * s, double * scond, double * amax)
bestie this one has no work twin energy, it's just out here doing the equilibration thing with s, scond and amax all up in the argument list. Definition at line 36 of file lapacke_dppequ.c.
LAPACKE_dppequ_work ✨
lapack_int LAPACKE_dppequ_work (int matrix_layout, char uplo, lapack_int n, const double * ap, double * s, double * scond, double * amax)
same exact arg list as its non-work sister, no cap, it's giving twins. Definition at line 36 of file lapacke_dppequ_work.c.
LAPACKE_dpprfs 🎀
lapack_int LAPACKE_dpprfs (int matrix_layout, char uplo, lapack_int n, lapack_int nrhs, const double * ap, const double * afp, const double * b, lapack_int ldb, double * x, lapack_int ldx, double * ferr, double * berr)
two const double * pointers, two leading dimension ints, and the iconic ferr/berr duo at the end. we love a full house. Definition at line 36 of file lapacke_dpprfs.c.
LAPACKE_dpprfs_work 💅
lapack_int LAPACKE_dpprfs_work (int matrix_layout, char uplo, lapack_int n, lapack_int nrhs, const double * ap, const double * afp, const double * b, lapack_int ldb, double * x, lapack_int ldx, double * ferr, double * berr, double * work, lapack_int * iwork)
everything from the previous one PLUS double * work, lapack_int * iwork tacked on the end. the work variants always gotta bring their friends fr fr. Definition at line 36 of file lapacke_dpprfs_work.c.
LAPACKE_dppsv 🦋
lapack_int LAPACKE_dppsv (int matrix_layout, char uplo, lapack_int n, lapack_int nrhs, double * ap, double * b, lapack_int ldb)
short king. ap, b, ldb, done. Definition at line 36 of file lapacke_dppsv.c.
LAPACKE_dppsv_work 🌸
lapack_int LAPACKE_dppsv_work (int matrix_layout, char uplo, lapack_int n, lapack_int nrhs, double * ap, double * b, lapack_int ldb)
identical signature to the plain one — not a single extra arg, and honestly? respect. Definition at line 36 of file lapacke_dppsv_work.c.
LAPACKE_dppsvx 🔥
lapack_int LAPACKE_dppsvx (int matrix_layout, char fact, char uplo, lapack_int n, lapack_int nrhs, double * ap, double * afp, char * equed, double * s, double * b, lapack_int ldb, double * x, lapack_int ldx, double * rcond, double * ferr, double * berr)
look at this cast list 😭 three chars (fact, uplo, and the pointer equed), then a whole parade of doubles ending in rcond, ferr, berr. main character energy. Definition at line 36 of file lapacke_dppsvx.c.
LAPACKE_dppsvx_work 👑
lapack_int LAPACKE_dppsvx_work (int matrix_layout, char fact, char uplo, lapack_int n, lapack_int nrhs, double * ap, double * afp, char * equed, double * s, double * b, lapack_int ldb, double * x, lapack_int ldx, double * rcond, double * ferr, double * berr, double * work, lapack_int * iwork)
the whole dppsvx situation plus double * work, lapack_int * iwork because workspace is self-care. Definition at line 36 of file lapacke_dppsvx_work.c.
LAPACKE_dpptrf 🌈
lapack_int LAPACKE_dpptrf (int matrix_layout, char uplo, lapack_int n, double * ap)
four args, zero drama. minimalism ate. Definition at line 36 of file lapacke_dpptrf.c.
LAPACKE_dpptrf_work ⭐
lapack_int LAPACKE_dpptrf_work (int matrix_layout, char uplo, lapack_int n, double * ap)
yep, same four. the _work label here is doing absolutely nothing to the arg list and it's iconic for that. Definition at line 36 of file lapacke_dpptrf_work.c.
LAPACKE_dpptri 💜
lapack_int LAPACKE_dpptri (int matrix_layout, char uplo, lapack_int n, double * ap)
dpptri said "I too shall take exactly matrix_layout, uplo, n and ap." consistency queen. Definition at line 36 of file lapacke_dpptri.c.
LAPACKE_dpptri_work 🍓
lapack_int LAPACKE_dpptri_work (int matrix_layout, char uplo, lapack_int n, double * ap)
four args again, we're on a streak bestie. Definition at line 36 of file lapacke_dpptri_work.c.
LAPACKE_dpptrs 🧚
lapack_int LAPACKE_dpptrs (int matrix_layout, char uplo, lapack_int n, lapack_int nrhs, const double * ap, double * b, lapack_int ldb)
ooh note the const on ap but not on b 👀 that's the tell. Definition at line 36 of file lapacke_dpptrs.c.
LAPACKE_dpptrs_work 💀
lapack_int LAPACKE_dpptrs_work (int matrix_layout, char uplo, lapack_int n, lapack_int nrhs, const double * ap, double * b, lapack_int ldb)
same seven, no work pointer in sight, which is lowkey funny given the name. Definition at line 36 of file lapacke_dpptrs_work.c.
LAPACKE_dpstrf 🫶
lapack_int LAPACKE_dpstrf (int matrix_layout, char uplo, lapack_int n, double * a, lapack_int lda, lapack_int * piv, lapack_int * rank, double tol)
pivot reveal! piv, rank, tol — it's a whole narrative arc in eight parameters. Definition at line 36 of file lapacke_dpstrf.c.
LAPACKE_dpstrf_work 🌸
lapack_int LAPACKE_dpstrf_work (int matrix_layout, char uplo, lapack_int n, double * a, lapack_int lda, lapack_int * piv, lapack_int * rank, double tol, double * work)
the above plus one single double * work at the end. that's it, that's the whole diff. Definition at line 36 of file lapacke_dpstrf_work.c.
LAPACKE_dptcon ✨
lapack_int LAPACKE_dptcon (lapack_int n, const double * d, const double * e, double anorm, double * rcond)
WAIT. no matrix_layout?! bestie this one literally skipped the first parameter that everyone else has and just opened with lapack_int n 😳 note it, don't forget it. Definition at line 36 of file lapacke_dptcon.c.
LAPACKE_dptcon_work 💖
lapack_int LAPACKE_dptcon_work (lapack_int n, const double * d, const double * e, double anorm, double * rcond, double * work)
also matrix_layout-free, and it adds double * work on top of the anorm / rcond business. Definition at line 36 of file lapacke_dptcon_work.c.
LAPACKE_dpteqr 🎀
lapack_int LAPACKE_dpteqr (int matrix_layout, char compz, lapack_int n, double * d, double * e, double * z, lapack_int ldz)
compz is that girl — a char controlling whether z is even in the conversation. Definition at line 36 of file lapacke_dpteqr.c.
LAPACKE_dpteqr_work 🦋
lapack_int LAPACKE_dpteqr_work (int matrix_layout, char compz, lapack_int n, double * d, double * e, double * z, lapack_int ldz, double * work)
compz stays, ldz stays, and double * work joins the group chat. Definition at line 36 of file lapacke_dpteqr_work.c.
LAPACKE_dptrfs 🔥
lapack_int LAPACKE_dptrfs (int matrix_layout, lapack_int n, lapack_int nrhs, const double * d, const double * e, const double * df, const double * ef, const double * b, lapack_int ldb, double * x, lapack_int ldx, double * ferr, double * berr)
count the consts with me: d, e, df, ef, b — five of them, all read-only icons, and only x gets to be written to. Definition at line 36 of file lapacke_dptrfs.c.
LAPACKE_dptrfs_work 💅
lapack_int LAPACKE_dptrfs_work (int matrix_layout, lapack_int n, lapack_int nrhs, const double * d, const double * e, const double * df, const double * ef, const double * b, lapack_int ldb, double * x, lapack_int ldx, double * ferr, double * berr, double * work)
same huge list plus a lone double * work. notice: no iwork here, just the one workspace pointer, okayyy. Definition at line 36 of file lapacke_dptrfs_work.c.
LAPACKE_dptsv 🌈
lapack_int LAPACKE_dptsv (int matrix_layout, lapack_int n, lapack_int nrhs, double * d, double * e, double * b, lapack_int ldb)
no uplo! no packed-anything! just d, e, b and vibes. Definition at line 36 of file lapacke_dptsv.c.
LAPACKE_dptsv_work ⭐
lapack_int LAPACKE_dptsv_work (int matrix_layout, lapack_int n, lapack_int nrhs, double * d, double * e, double * b, lapack_int ldb)
identical seven args, the _work suffix is purely a state of mind. Definition at line 36 of file lapacke_dptsv_work.c.
LAPACKE_dptsvx 💜
lapack_int LAPACKE_dptsvx (int matrix_layout, char fact, lapack_int n, lapack_int nrhs, const double * d, const double * e, double * df, double * ef, const double * b, lapack_int ldb, double * x, lapack_int ldx, double * rcond, double * ferr, double * berr)
sibling reveal: d/e are const but df/ef are NOT. that asymmetry is the whole point and it's giving "one of us has to change". Definition at line 36 of file lapacke_dptsvx.c.
LAPACKE_dptsvx_work 🍓
lapack_int LAPACKE_dptsvx_work (int matrix_layout, char fact, lapack_int n, lapack_int nrhs, const double * d, const double * e, double * df, double * ef, const double * b, lapack_int ldb, double * x, lapack_int ldx, double * rcond, double * ferr, double * berr, double * work)
all those args, fact included, plus double * work at the tail. Definition at line 36 of file lapacke_dptsvx_work.c.
LAPACKE_dpttrf 🧚
lapack_int LAPACKE_dpttrf (lapack_int n, double * d, double * e)
THREE. ARGS. no matrix_layout, no uplo, nothing. d and e and a dream. Definition at line 36 of file lapacke_dpttrf.c.
LAPACKE_dpttrf_work 💀
lapack_int LAPACKE_dpttrf_work (lapack_int n, double * d, double * e)
also just n, d, e. the smallest signature on this whole stretch of the page honestly. Definition at line 36 of file lapacke_dpttrf_work.c.
LAPACKE_dpttrs 🫶
lapack_int LAPACKE_dpttrs (int matrix_layout, lapack_int n, lapack_int nrhs, const double * d, const double * e, double * b, lapack_int ldb)
matrix_layout is back babes, and d/e are const while b is free to be rewritten. Definition at line 36 of file lapacke_dpttrs.c.
LAPACKE_dpttrs_work 🌸
lapack_int LAPACKE_dpttrs_work (int matrix_layout, lapack_int n, lapack_int nrhs, const double * d, const double * e, double * b, lapack_int ldb)
same seven, same const situation, no extra workspace pointer. Definition at line 36 of file lapacke_dpttrs_work.c.
LAPACKE_dsbev ✨
lapack_int LAPACKE_dsbev (int matrix_layout, char jobz, char uplo, lapack_int n, lapack_int kd, double * ab, lapack_int ldab, double * w, double * z, lapack_int ldz)
banded era begins 🎸 kd and ldab and ldz all living together, plus the w/z duo. Definition at line 36 of file lapacke_dsbev.c.
LAPACKE_dsbev_2stage 🔥
lapack_int LAPACKE_dsbev_2stage (int matrix_layout, char jobz, char uplo, lapack_int n, lapack_int kd, double * ab, lapack_int ldab, double * w, double * z, lapack_int ldz)
the _2stage remix drops with the exact same ten args as the original. Definition at line 36 of file lapacke_dsbev_2stage.c.
LAPACKE_dsbev_2stage_work 💖
lapack_int LAPACKE_dsbev_2stage_work (int matrix_layout, char jobz, char uplo, lapack_int n, lapack_int kd, double * ab, lapack_int ldab, double * w, double * z, lapack_int ldz, double * work, lapack_int lwork)
full name is a mouthful, and it brings double * work, lapack_int lwork — both of them, not just the pointer. Definition at line 36 of file lapacke_dsbev_2stage_work.c.
LAPACKE_dsbev_work 🎀
lapack_int LAPACKE_dsbev_work (int matrix_layout, char jobz, char uplo, lapack_int n, lapack_int kd, double * ab, lapack_int ldab, double * w, double * z, lapack_int ldz, double * work)
note the difference from the _2stage_work one: here it's only double * work, no lwork 😌 character development. Definition at line 36 of file lapacke_dsbev_work.c.
LAPACKE_dsbevd 🦋
lapack_int LAPACKE_dsbevd (int matrix_layout, char jobz, char uplo, lapack_int n, lapack_int kd, double * ab, lapack_int ldab, double * w, double * z, lapack_int ldz)
the d on the end stands for drama, and the args are identical to dsbev. Definition at line 36 of file lapacke_dsbevd.c.
LAPACKE_dsbevd_2stage 🌈
lapack_int LAPACKE_dsbevd_2stage (int matrix_layout, char jobz, char uplo, lapack_int n, lapack_int kd, double * ab, lapack_int ldab, double * w, double * z, lapack_int ldz)
same ten, two stages, zero signature changes. Definition at line 36 of file lapacke_dsbevd_2stage.c.
LAPACKE_dsbevd_2stage_work ⭐
lapack_int LAPACKE_dsbevd_2stage_work (int matrix_layout, char jobz, char uplo, lapack_int n, lapack_int kd, double * ab, lapack_int ldab, double * w, double * z, lapack_int ldz, double * work, lapack_int lwork, lapack_int * iwork, lapack_int liwork)
FOUR extra args at the end: work, lwork, iwork, liwork. it said "workspace? yes, both kinds, with sizes." Definition at line 36 of file lapacke_dsbevd_2stage_work.c.
LAPACKE_dsbevd_work 💜
lapack_int LAPACKE_dsbevd_work (int matrix_layout, char jobz, char uplo, lapack_int n, lapack_int kd, double * ab, lapack_int ldab, double * w, double * z, lapack_int ldz, double * work, lapack_int lwork, lapack_int * iwork, lapack_int liwork)
same four extras as the 2stage version — double * work, lapack_int lwork, lapack_int * iwork, lapack_int liwork. matchy matchy. Definition at line 36 of file lapacke_dsbevd_work.c.
LAPACKE_dsbevx 🍓
lapack_int LAPACKE_dsbevx (int matrix_layout, char jobz, char range, char uplo, lapack_int n, lapack_int kd, double * ab, lapack_int ldab, double * q, lapack_int ldq, double vl, double vu, lapack_int il, lapack_int iu, double abstol, lapack_int * m, double * w, double * z, lapack_int ldz, lapack_int * ifail)
HELLO twenty arguments 😭 range, vl, vu, il, iu, abstol, m, and that lovely little ifail pointer at the end. the full deluxe package. Definition at line 36 of file lapacke_dsbevx.c.
LAPACKE_dsbevx_2stage 🧚
lapack_int LAPACKE_dsbevx_2stage (int matrix_layout, char jobz, char range, char uplo, lapack_int n, lapack_int kd, double * ab, lapack_int ldab, double * q, lapack_int ldq, double vl, double vu, lapack_int il, lapack_int iu, double abstol, lapack_int * m, double * w, double * z, lapack_int ldz, lapack_int * ifail)
all twenty again, ifail included, just with the _2stage glow-up. Definition at line 36 of file lapacke_dsbevx_2stage.c.
LAPACKE_dsbevx_2stage_work 💀
lapack_int LAPACKE_dsbevx_2stage_work (int matrix_layout, char jobz, char range, char uplo, lapack_int n, lapack_int kd, double * ab, lapack_int ldab, double * q, lapack_int ldq, double vl, double vu, lapack_int il, lapack_int iu, double abstol, lapack_int * m, double * w, double * z, lapack_int ldz, double * work, lapack_int lwork, lapack_int * iwork, lapack_int * ifail)
twenty becomes twenty-four: double * work, lapack_int lwork, lapack_int * iwork get wedged in there and ifail holds down the last spot. Definition at line 36 of file lapacke_dsbevx_2stage_work.c.
LAPACKE_dsbevx_work 🫶
lapack_int LAPACKE_dsbevx_work (int matrix_layout, char jobz, char range, char uplo, lapack_int n, lapack_int kd, double * ab, lapack_int ldab, double * q, lapack_int ldq, double vl, double vu, lapack_int il, lapack_int iu, double abstol, lapack_int * m, double * w, double * z, lapack_int ldz, double * work, lapack_int * iwork, lapack_int * ifail)
careful bestie, this one has work + iwork but NOT lwork — do not confuse it with the 2stage sibling 🔍 Definition at line 36 of file lapacke_dsbevx_work.c.
LAPACKE_dsbgst 🌸
lapack_int LAPACKE_dsbgst (int matrix_layout, char vect, char uplo, lapack_int n, lapack_int ka, lapack_int kb, double * ab, lapack_int ldab, const double * bb, lapack_int ldbb, double * x, lapack_int ldx)
two bands (ka and kb), two leading dimensions (ldab, ldbb), and vect sitting up top doing its thing. also bb is const and x is not, noted 📝 Definition at line 36 of file lapacke_dsbgst.c.
LAPACKE_dsbgst_work ✨
lapack_int LAPACKE_dsbgst_work (int matrix_layout, char vect, char uplo, lapack_int n, lapack_int ka, lapack_int kb, double * ab, lapack_int ldab, const double * bb, lapack_int ldbb, double * x, lapack_int ldx, double * work)
everything above, plus exactly one double * work. we love a low-drama addition. Definition at line 36 of file lapacke_dsbgst_work.c.
LAPACKE_dsbgv 🎀
lapack_int LAPACKE_dsbgv (int matrix_layout, char jobz, char uplo, lapack_int n, lapack_int ka, lapack_int kb, double * ab, lapack_int ldab, double * bb, lapack_int ldbb, double * w, double * z, lapack_int ldz)
last one in this batch and it's a big mood: jobz, uplo, ka, kb, ab, ldab, bb, ldbb, then w, z, ldz to close it out. thirteen args, chef's kiss 👑 Definition at line 36 of file lapacke_dsbgv.c.
and yes, if you were wondering — every single one of these is at line 36 of its file. not a typo, that's just how this page rolls 💅 more coming, don't go anywhere bestie 🦋
LAPACKE_dsbgv_work 💜
lapack_int LAPACKE_dsbgv_work (int matrix_layout, char jobz, char uplo,
lapack_int n, lapack_int ka, lapack_int kb, double * ab, lapack_int
ldab, double * bb, lapack_int ldbb, double * w, double * z, lapack_int
ldz, double * work)
Definition at line 36 of file lapacke_dsbgv_work.c.
LAPACKE_dsbgvd 🎀
lapack_int LAPACKE_dsbgvd (int matrix_layout, char jobz, char uplo,
lapack_int n, lapack_int ka, lapack_int kb, double * ab, lapack_int
ldab, double * bb, lapack_int ldbb, double * w, double * z, lapack_int
ldz)
Definition at line 36 of file lapacke_dsbgvd.c.
LAPACKE_dsbgvd_work ✨
lapack_int LAPACKE_dsbgvd_work (int matrix_layout, char jobz, char uplo,
lapack_int n, lapack_int ka, lapack_int kb, double * ab, lapack_int
ldab, double * bb, lapack_int ldbb, double * w, double * z, lapack_int
ldz, double * work, lapack_int lwork, lapack_int * iwork, lapack_int
liwork)
Definition at line 36 of file lapacke_dsbgvd_work.c.
LAPACKE_dsbgvx 🦋
lapack_int LAPACKE_dsbgvx (int matrix_layout, char jobz, char range, char
uplo, lapack_int n, lapack_int ka, lapack_int kb, double * ab,
lapack_int ldab, double * bb, lapack_int ldbb, double * q, lapack_int
ldq, double vl, double vu, lapack_int il, lapack_int iu, double abstol,
lapack_int * m, double * w, double * z, lapack_int ldz, lapack_int *
ifail)
Definition at line 36 of file lapacke_dsbgvx.c.
LAPACKE_dsbgvx_work 🌸
lapack_int LAPACKE_dsbgvx_work (int matrix_layout, char jobz, char range,
char uplo, lapack_int n, lapack_int ka, lapack_int kb, double * ab,
lapack_int ldab, double * bb, lapack_int ldbb, double * q, lapack_int
ldq, double vl, double vu, lapack_int il, lapack_int iu, double abstol,
lapack_int * m, double * w, double * z, lapack_int ldz, double * work,
lapack_int * iwork, lapack_int * ifail)
Definition at line 36 of file lapacke_dsbgvx_work.c.
LAPACKE_dsbtrd 🫶
lapack_int LAPACKE_dsbtrd (int matrix_layout, char vect, char uplo,
lapack_int n, lapack_int kd, double * ab, lapack_int ldab, double * d,
double * e, double * q, lapack_int ldq)
Definition at line 36 of file lapacke_dsbtrd.c.
LAPACKE_dsbtrd_work 💫
lapack_int LAPACKE_dsbtrd_work (int matrix_layout, char vect, char uplo,
lapack_int n, lapack_int kd, double * ab, lapack_int ldab, double * d,
double * e, double * q, lapack_int ldq, double * work)
Definition at line 36 of file lapacke_dsbtrd_work.c.
LAPACKE_dsfrk 🔥
lapack_int LAPACKE_dsfrk (int matrix_layout, char transr, char uplo, char
trans, lapack_int n, lapack_int k, double alpha, const double * a,
lapack_int lda, double beta, double * c)
Definition at line 36 of file lapacke_dsfrk.c.
LAPACKE_dsfrk_work ⭐
lapack_int LAPACKE_dsfrk_work (int matrix_layout, char transr, char uplo,
char trans, lapack_int n, lapack_int k, double alpha, const double * a,
lapack_int lda, double beta, double * c)
Definition at line 36 of file lapacke_dsfrk_work.c.
LAPACKE_dsgesv 💅
lapack_int LAPACKE_dsgesv (int matrix_layout, lapack_int n, lapack_int nrhs,
double * a, lapack_int lda, lapack_int * ipiv, double * b, lapack_int
ldb, double * x, lapack_int ldx, lapack_int * iter)
Definition at line 36 of file lapacke_dsgesv.c.
LAPACKE_dsgesv_work 👑
lapack_int LAPACKE_dsgesv_work (int matrix_layout, lapack_int n, lapack_int
nrhs, double * a, lapack_int lda, lapack_int * ipiv, double * b,
lapack_int ldb, double * x, lapack_int ldx, double * work, float *
swork, lapack_int * iter)
Definition at line 36 of file lapacke_dsgesv_work.c.
LAPACKE_dspcon 🌈
lapack_int LAPACKE_dspcon (int matrix_layout, char uplo, lapack_int n, const
double * ap, const lapack_int * ipiv, double anorm, double * rcond)
Definition at line 36 of file lapacke_dspcon.c.
LAPACKE_dspcon_work 🍓
lapack_int LAPACKE_dspcon_work (int matrix_layout, char uplo, lapack_int n,
const double * ap, const lapack_int * ipiv, double anorm, double *
rcond, double * work, lapack_int * iwork)
Definition at line 36 of file lapacke_dspcon_work.c.
LAPACKE_dspev 🧚
lapack_int LAPACKE_dspev (int matrix_layout, char jobz, char uplo,
lapack_int n, double * ap, double * w, double * z, lapack_int ldz)
Definition at line 36 of file lapacke_dspev.c.
LAPACKE_dspev_work 💖
lapack_int LAPACKE_dspev_work (int matrix_layout, char jobz, char uplo,
lapack_int n, double * ap, double * w, double * z, lapack_int ldz,
double * work)
Definition at line 36 of file lapacke_dspev_work.c.
LAPACKE_dspevd 🦋
lapack_int LAPACKE_dspevd (int matrix_layout, char jobz, char uplo,
lapack_int n, double * ap, double * w, double * z, lapack_int ldz)
Definition at line 36 of file lapacke_dspevd.c.
LAPACKE_dspevd_work 💜
lapack_int LAPACKE_dspevd_work (int matrix_layout, char jobz, char uplo,
lapack_int n, double * ap, double * w, double * z, lapack_int ldz,
double * work, lapack_int lwork, lapack_int * iwork, lapack_int liwork)
Definition at line 36 of file lapacke_dspevd_work.c.
LAPACKE_dspevx ✨
lapack_int LAPACKE_dspevx (int matrix_layout, char jobz, char range, char
uplo, lapack_int n, double * ap, double vl, double vu, lapack_int il,
lapack_int iu, double abstol, lapack_int * m, double * w, double * z,
lapack_int ldz, lapack_int * ifail)
Definition at line 36 of file lapacke_dspevx.c.
LAPACKE_dspevx_work 🌸
lapack_int LAPACKE_dspevx_work (int matrix_layout, char jobz, char range,
char uplo, lapack_int n, double * ap, double vl, double vu, lapack_int
il, lapack_int iu, double abstol, lapack_int * m, double * w, double *
z, lapack_int ldz, double * work, lapack_int * iwork, lapack_int *
ifail)
Definition at line 36 of file lapacke_dspevx_work.c.
LAPACKE_dspgst 🎀
lapack_int LAPACKE_dspgst (int matrix_layout, lapack_int itype, char uplo,
lapack_int n, double * ap, const double * bp)
Definition at line 36 of file lapacke_dspgst.c.
LAPACKE_dspgst_work 🫶
lapack_int LAPACKE_dspgst_work (int matrix_layout, lapack_int itype, char
uplo, lapack_int n, double * ap, const double * bp)
Definition at line 36 of file lapacke_dspgst_work.c.
LAPACKE_dspgv 🌟
lapack_int LAPACKE_dspgv (int matrix_layout, lapack_int itype, char jobz,
char uplo, lapack_int n, double * ap, double * bp, double * w, double *
z, lapack_int ldz)
Definition at line 36 of file lapacke_dspgv.c.
LAPACKE_dspgv_work 💫
lapack_int LAPACKE_dspgv_work (int matrix_layout, lapack_int itype, char
jobz, char uplo, lapack_int n, double * ap, double * bp, double * w,
double * z, lapack_int ldz, double * work)
Definition at line 36 of file lapacke_dspgv_work.c.
LAPACKE_dspgvd 🔥
lapack_int LAPACKE_dspgvd (int matrix_layout, lapack_int itype, char jobz,
char uplo, lapack_int n, double * ap, double * bp, double * w, double *
z, lapack_int ldz)
Definition at line 36 of file lapacke_dspgvd.c.
LAPACKE_dspgvd_work ⭐
lapack_int LAPACKE_dspgvd_work (int matrix_layout, lapack_int itype, char
jobz, char uplo, lapack_int n, double * ap, double * bp, double * w,
double * z, lapack_int ldz, double * work, lapack_int lwork, lapack_int
* iwork, lapack_int liwork)
Definition at line 36 of file lapacke_dspgvd_work.c.
LAPACKE_dspgvx 🌈
lapack_int LAPACKE_dspgvx (int matrix_layout, lapack_int itype, char jobz,
char range, char uplo, lapack_int n, double * ap, double * bp, double
vl, double vu, lapack_int il, lapack_int iu, double abstol, lapack_int *
m, double * w, double * z, lapack_int ldz, lapack_int * ifail)
Definition at line 36 of file lapacke_dspgvx.c.
LAPACKE_dspgvx_work 🍓
lapack_int LAPACKE_dspgvx_work (int matrix_layout, lapack_int itype, char
jobz, char range, char uplo, lapack_int n, double * ap, double * bp,
double vl, double vu, lapack_int il, lapack_int iu, double abstol,
lapack_int * m, double * w, double * z, lapack_int ldz, double * work,
lapack_int * iwork, lapack_int * ifail)
Definition at line 36 of file lapacke_dspgvx_work.c.
LAPACKE_dsposv 💖
lapack_int LAPACKE_dsposv (int matrix_layout, char uplo, lapack_int n,
lapack_int nrhs, double * a, lapack_int lda, double * b, lapack_int ldb,
double * x, lapack_int ldx, lapack_int * iter)
Definition at line 36 of file lapacke_dsposv.c.
LAPACKE_dsposv_work 👑
lapack_int LAPACKE_dsposv_work (int matrix_layout, char uplo, lapack_int n,
lapack_int nrhs, double * a, lapack_int lda, double * b, lapack_int ldb,
double * x, lapack_int ldx, double * work, float * swork, lapack_int *
iter)
Definition at line 36 of file lapacke_dsposv_work.c.
LAPACKE_dsprfs 🧚
lapack_int LAPACKE_dsprfs (int matrix_layout, char uplo, lapack_int n,
lapack_int nrhs, const double * ap, const double * afp, const lapack_int
* ipiv, const double * b, lapack_int ldb, double * x, lapack_int ldx,
double * ferr, double * berr)
Definition at line 36 of file lapacke_dsprfs.c.
LAPACKE_dsprfs_work 🦋
lapack_int LAPACKE_dsprfs_work (int matrix_layout, char uplo, lapack_int n,
lapack_int nrhs, const double * ap, const double * afp, const lapack_int
* ipiv, const double * b, lapack_int ldb, double * x, lapack_int ldx,
double * ferr, double * berr, double * work, lapack_int * iwork)
Definition at line 36 of file lapacke_dsprfs_work.c.
LAPACKE_dspsv 💜
lapack_int LAPACKE_dspsv (int matrix_layout, char uplo, lapack_int n,
lapack_int nrhs, double * ap, lapack_int * ipiv, double * b, lapack_int
ldb)
Definition at line 36 of file lapacke_dspsv.c.
LAPACKE_dspsv_work ✨
lapack_int LAPACKE_dspsv_work (int matrix_layout, char uplo, lapack_int n,
lapack_int nrhs, double * ap, lapack_int * ipiv, double * b, lapack_int
ldb)
Definition at line 36 of file lapacke_dspsv_work.c.
LAPACKE_dspsvx 🌸
lapack_int LAPACKE_dspsvx (int matrix_layout, char fact, char uplo,
lapack_int n, lapack_int nrhs, const double * ap, double * afp,
lapack_int * ipiv, const double * b, lapack_int ldb, double * x,
lapack_int ldx, double * rcond, double * ferr, double * berr)
Definition at line 36 of file lapacke_dspsvx.c.
LAPACKE_dspsvx_work 🎀
lapack_int LAPACKE_dspsvx_work (int matrix_layout, char fact, char uplo,
lapack_int n, lapack_int nrhs, const double * ap, double * afp,
lapack_int * ipiv, const double * b, lapack_int ldb, double * x,
lapack_int ldx, double * rcond, double * ferr, double * berr, double *
work, lapack_int * iwork)
Definition at line 36 of file lapacke_dspsvx_work.c.
LAPACKE_dsptrd 🫶
lapack_int LAPACKE_dsptrd (int matrix_layout, char uplo, lapack_int n,
double * ap, double * d, double * e, double * tau)
Definition at line 36 of file lapacke_dsptrd.c.
LAPACKE_dsptrd_work 💫
lapack_int LAPACKE_dsptrd_work (int matrix_layout, char uplo, lapack_int n,
double * ap, double * d, double * e, double * tau)
Definition at line 36 of file lapacke_dsptrd_work.c.
LAPACKE_dsptrf 🔥
lapack_int LAPACKE_dsptrf (int matrix_layout, char uplo, lapack_int n,
double * ap, lapack_int * ipiv)
Definition at line 36 of file lapacke_dsptrf.c.
LAPACKE_dsptrf_work ⭐
lapack_int LAPACKE_dsptrf_work (int matrix_layout, char uplo, lapack_int n,
double * ap, lapack_int * ipiv)
Definition at line 36 of file lapacke_dsptrf_work.c.
LAPACKE_dsptri 🌈
lapack_int LAPACKE_dsptri (int matrix_layout, char uplo, lapack_int n,
double * ap, const lapack_int * ipiv)
Definition at line 36 of file lapacke_dsptri.c.
LAPACKE_dsptri_work 🍓
lapack_int LAPACKE_dsptri_work (int matrix_layout, char uplo, lapack_int n,
double * ap, const lapack_int * ipiv, double * work)
Definition at line 36 of file lapacke_dsptri_work.c.
LAPACKE_dsptrs 💖
lapack_int LAPACKE_dsptrs (int matrix_layout, char uplo, lapack_int n,
lapack_int nrhs, const double * ap, const lapack_int * ipiv, double * b,
lapack_int ldb)
Definition at line 36 of file lapacke_dsptrs.c.
LAPACKE_dsptrs_work 🧚
lapack_int LAPACKE_dsptrs_work (int matrix_layout, char uplo, lapack_int n,
lapack_int nrhs, const double * ap, const lapack_int * ipiv, double * b,
lapack_int ldb)
Definition at line 36 of file lapacke_dsptrs_work.c.
LAPACKE_dstebz
lapack_int LAPACKE_dstebz (char range, char order, lapack_int n, double vl,
double vu, lapack_int il, lapack_int iu, double abstol, const double *
d, const double * e, lapack_int * m, lapack_int * nsplit, double * w,
lapack_int * iblock, lapack_int * isplit)
Definition at line 36 of file lapacke_dstebz.c.
okay so this one does not take a matrix_layout, bestie, it just raw-dogs straight into range, order, n, and the crew 💅 you got your vl/vu pair, your il/iu pair, abstol, and then it hands you back m, nsplit, w, iblock and isplit. That's a lot of outputs and honestly? iconic.
LAPACKE_dstebz_work
lapack_int LAPACKE_dstebz_work (char range, char order, lapack_int n, double
vl, double vu, lapack_int il, lapack_int iu, double abstol, const double
* d, const double * e, lapack_int * m, lapack_int * nsplit, double * w,
lapack_int * iblock, lapack_int * isplit, double * work, lapack_int *
iwork)
Definition at line 36 of file lapacke_dstebz_work.c.
same energy, but now she brought her own scratch space — work and iwork tagged on the end like two extra bags of snacks 🍓.
LAPACKE_dstedc
lapack_int LAPACKE_dstedc (int matrix_layout, char compz, lapack_int n,
double * d, double * e, double * z, lapack_int ldz)
Definition at line 36 of file lapacke_dstedc.c.
we're back on matrix_layout duty bestie ✨ note the compz char and the ldz leading dimension doing its thing at the end.
LAPACKE_dstedc_work
lapack_int LAPACKE_dstedc_work (int matrix_layout, char compz, lapack_int n,
double * d, double * e, double * z, lapack_int ldz, double * work,
lapack_int lwork, lapack_int * iwork, lapack_int liwork)
Definition at line 36 of file lapacke_dstedc_work.c.
the _work version ate and left no crumbs — now with work, lwork, iwork and liwork all up in the signature 💀 both lwork and liwork so you know she's thorough.
LAPACKE_dstegr
lapack_int LAPACKE_dstegr (int matrix_layout, char jobz, char range,
lapack_int n, double * d, double * e, double vl, double vu, lapack_int
il, lapack_int iu, double abstol, lapack_int * m, double * w, double *
z, lapack_int ldz, lapack_int * isuppz)
Definition at line 36 of file lapacke_dstegr.c.
jobz + range combo meal 🍔 and she wraps up with isuppz which is genuinely such a name. ngl I respect it.
LAPACKE_dstegr_work
lapack_int LAPACKE_dstegr_work (int matrix_layout, char jobz, char range,
lapack_int n, double * d, double * e, double vl, double vu, lapack_int
il, lapack_int iu, double abstol, lapack_int * m, double * w, double *
z, lapack_int ldz, lapack_int * isuppz, double * work, lapack_int lwork,
lapack_int * iwork, lapack_int liwork)
Definition at line 36 of file lapacke_dstegr_work.c.
same squad, plus work/lwork/iwork/liwork. she's long, she's extra, she's booked and busy 💅.
LAPACKE_dstein
lapack_int LAPACKE_dstein (int matrix_layout, lapack_int n, const double *
d, const double * e, lapack_int m, const double * w, const lapack_int *
iblock, const lapack_int * isplit, double * z, lapack_int ldz,
lapack_int * ifailv)
Definition at line 36 of file lapacke_dstein.c.
look at all those const pointers — she's a reader, not a writer, for d, e, w, iblock and isplit 🎀 everything else is fair game. ends on ifailv, cutie.
LAPACKE_dstein_work
lapack_int LAPACKE_dstein_work (int matrix_layout, lapack_int n, const
double * d, const double * e, lapack_int m, const double * w, const
lapack_int * iblock, const lapack_int * isplit, double * z, lapack_int
ldz, double * work, lapack_int * iwork, lapack_int * ifailv)
Definition at line 36 of file lapacke_dstein_work.c.
work and iwork slid in before ifailv — no lwork, no liwork here, that's just the vibe she's on ✨.
LAPACKE_dstemr
lapack_int LAPACKE_dstemr (int matrix_layout, char jobz, char range,
lapack_int n, double * d, double * e, double vl, double vu, lapack_int
il, lapack_int iu, lapack_int * m, double * w, double * z, lapack_int
ldz, lapack_int nzc, lapack_int * isuppz, lapack_logical * tryrac)
Definition at line 36 of file lapacke_dstemr.c.
hello?? tryrac?? a lapack_logical * just hanging out at the end 💀 she's got opinions and I'm obsessed. also note there's no abstol in this one — do not come for me, that's literally the signature.
LAPACKE_dstemr_work
lapack_int LAPACKE_dstemr_work (int matrix_layout, char jobz, char range,
lapack_int n, double * d, double * e, double vl, double vu, lapack_int
il, lapack_int iu, lapack_int * m, double * w, double * z, lapack_int
ldz, lapack_int nzc, lapack_int * isuppz, lapack_logical * tryrac,
double * work, lapack_int lwork, lapack_int * iwork, lapack_int liwork)
Definition at line 36 of file lapacke_dstemr_work.c.
tryrac plus four scratch args. that's a full roster, bestie 🫶.
LAPACKE_dsteqr
lapack_int LAPACKE_dsteqr (int matrix_layout, char compz, lapack_int n,
double * d, double * e, double * z, lapack_int ldz)
Definition at line 36 of file lapacke_dsteqr.c.
short, sweet, compz-flavoured 🍓 seven args and she's out.
LAPACKE_dsteqr_work
lapack_int LAPACKE_dsteqr_work (int matrix_layout, char compz, lapack_int n,
double * d, double * e, double * z, lapack_int ldz, double * work)
Definition at line 36 of file lapacke_dsteqr_work.c.
literally just one work pointer bolted on. no lwork, no iwork. minimal queen ✨.
LAPACKE_dsterf
lapack_int LAPACKE_dsterf (lapack_int n, double * d, double * e)
Definition at line 36 of file lapacke_dsterf.c.
THREE ARGS. no matrix_layout, no jobz, no nothing. just n, d, e. she said "keep it simple" and honestly? she ate 💅.
LAPACKE_dsterf_work
lapack_int LAPACKE_dsterf_work (lapack_int n, double * d, double * e)
Definition at line 36 of file lapacke_dsterf_work.c.
bestie. the _work version has the exact same signature. not a single extra arg. n, d, e, done. and that's on periodt 😭👑
LAPACKE_dstev
lapack_int LAPACKE_dstev (int matrix_layout, char jobz, lapack_int n, double
* d, double * e, double * z, lapack_int ldz)
Definition at line 36 of file lapacke_dstev.c.
classic matrix_layout + jobz opener, then n, d, e, z, ldz. the usual suspects 🌸.
LAPACKE_dstev_work
lapack_int LAPACKE_dstev_work (int matrix_layout, char jobz, lapack_int n,
double * d, double * e, double * z, lapack_int ldz, double * work)
Definition at line 36 of file lapacke_dstev_work.c.
one singular work at the end. she packed light 🎀.
LAPACKE_dstevd
lapack_int LAPACKE_dstevd (int matrix_layout, char jobz, lapack_int n,
double * d, double * e, double * z, lapack_int ldz)
Definition at line 36 of file lapacke_dstevd.c.
okay so this is character-for-character the same signature as LAPACKE_dstev — different file, different function, same fit 💖.
LAPACKE_dstevd_work
lapack_int LAPACKE_dstevd_work (int matrix_layout, char jobz, lapack_int n,
double * d, double * e, double * z, lapack_int ldz, double * work,
lapack_int lwork, lapack_int * iwork, lapack_int liwork)
Definition at line 36 of file lapacke_dstevd_work.c.
and here's where they diverge — dstevd_work brought work, lwork, iwork, liwork. she's the overachiever sister, no cap 🔥.
LAPACKE_dstevr
lapack_int LAPACKE_dstevr (int matrix_layout, char jobz, char range,
lapack_int n, double * d, double * e, double vl, double vu, lapack_int
il, lapack_int iu, double abstol, lapack_int * m, double * w, double *
z, lapack_int ldz, lapack_int * isuppz)
Definition at line 36 of file lapacke_dstevr.c.
jobz and range, vl/vu, il/iu, abstol, then m, w, z, ldz, isuppz. she's giving full-service 🌈.
LAPACKE_dstevr_work
lapack_int LAPACKE_dstevr_work (int matrix_layout, char jobz, char range,
lapack_int n, double * d, double * e, double vl, double vu, lapack_int
il, lapack_int iu, double abstol, lapack_int * m, double * w, double *
z, lapack_int ldz, lapack_int * isuppz, double * work, lapack_int lwork,
lapack_int * iwork, lapack_int liwork)
Definition at line 36 of file lapacke_dstevr_work.c.
all of the above plus the four scratch args. chef's kiss 💋.
LAPACKE_dstevx
lapack_int LAPACKE_dstevx (int matrix_layout, char jobz, char range,
lapack_int n, double * d, double * e, double vl, double vu, lapack_int
il, lapack_int iu, double abstol, lapack_int * m, double * w, double *
z, lapack_int ldz, lapack_int * ifail)
Definition at line 36 of file lapacke_dstevx.c.
twinning with dstevr except the last arg is ifail instead of isuppz. small difference, big personality 💅.
LAPACKE_dstevx_work
lapack_int LAPACKE_dstevx_work (int matrix_layout, char jobz, char range,
lapack_int n, double * d, double * e, double vl, double vu, lapack_int
il, lapack_int iu, double abstol, lapack_int * m, double * w, double *
z, lapack_int ldz, double * work, lapack_int * iwork, lapack_int *
ifail)
Definition at line 36 of file lapacke_dstevx_work.c.
careful bestie 👀 the ifail got pushed to the very end after work and iwork — order matters, don't get cute with it.
LAPACKE_dsycon
lapack_int LAPACKE_dsycon (int matrix_layout, char uplo, lapack_int n, const
double * a, lapack_int lda, const lapack_int * ipiv, double anorm,
double * rcond)
Definition at line 36 of file lapacke_dsycon.c.
uplo instead of jobz, ipiv in the middle, anorm and rcond closing it out. note a and ipiv are const — she reads, she doesn't rewrite 🎀.
LAPACKE_dsycon_3
lapack_int LAPACKE_dsycon_3 (int matrix_layout, char uplo, lapack_int n,
const double * a, lapack_int lda, const double * e, const lapack_int *
ipiv, double anorm, double * rcond)
Definition at line 36 of file lapacke_dsycon_3.c.
the _3 variant snuck a const double * e in right after lda. that's the whole difference and she owns it ✨.
LAPACKE_dsycon_3_work
lapack_int LAPACKE_dsycon_3_work (int matrix_layout, char uplo, lapack_int
n, const double * a, lapack_int lda, const double * e, const lapack_int
* ipiv, double anorm, double * rcond, double * work, lapack_int * iwork)
Definition at line 36 of file lapacke_dsycon_3_work.c.
same as _3 with work and iwork tagged on — and nope, no lwork/liwork in sight 🦋.
LAPACKE_dsycon_work
lapack_int LAPACKE_dsycon_work (int matrix_layout, char uplo, lapack_int n,
const double * a, lapack_int lda, const lapack_int * ipiv, double anorm,
double * rcond, double * work, lapack_int * iwork)
Definition at line 36 of file lapacke_dsycon_work.c.
original flavour + work + iwork. that's it, that's the whole upgrade 💜.
LAPACKE_dsyconv
lapack_int LAPACKE_dsyconv (int matrix_layout, char uplo, char way,
lapack_int n, double * a, lapack_int lda, const lapack_int * ipiv,
double * e)
Definition at line 36 of file lapacke_dsyconv.c.
char way — the most Gen Z parameter name in the whole header and I will not be taking questions 💀 her name is way and she has a range.
LAPACKE_dsyconv_work
lapack_int LAPACKE_dsyconv_work (int matrix_layout, char uplo, char way,
lapack_int n, double * a, lapack_int lda, const lapack_int * ipiv,
double * e)
Definition at line 36 of file lapacke_dsyconv_work.c.
and the _work version is byte-for-byte the same signature as the non-_work one. she's got nothing to declare 🙈.
LAPACKE_dsyequb
lapack_int LAPACKE_dsyequb (int matrix_layout, char uplo, lapack_int n,
const double * a, lapack_int lda, double * s, double * scond, double *
amax)
Definition at line 36 of file lapacke_dsyequb.c.
three output scalars in a trench coat: s, scond, amax 😭 she said "you're getting all three, don't ask".
LAPACKE_dsyequb_work
lapack_int LAPACKE_dsyequb_work (int matrix_layout, char uplo, lapack_int n,
const double * a, lapack_int lda, double * s, double * scond, double *
amax, double * work)
Definition at line 36 of file lapacke_dsyequb_work.c.
same trio, plus a single work pointer sitting at the end like a little bow 🎀.
LAPACKE_dsyev
lapack_int LAPACKE_dsyev (int matrix_layout, char jobz, char uplo,
lapack_int n, double * a, lapack_int lda, double * w)
Definition at line 36 of file lapacke_dsyev.c.
the iconic combo: matrix_layout, jobz, uplo, n, a, lda, w. seven args, zero notes, main character energy ✨.
LAPACKE_dsyev_2stage
lapack_int LAPACKE_dsyev_2stage (int matrix_layout, char jobz, char uplo,
lapack_int n, double * a, lapack_int lda, double * w)
Definition at line 36 of file lapacke_dsyev_2stage.c.
identical signature to LAPACKE_dsyev — the 2stage is in the name, bestie, not the arg list 💅.
LAPACKE_dsyev_2stage_work
lapack_int LAPACKE_dsyev_2stage_work (int matrix_layout, char jobz, char
uplo, lapack_int n, double * a, lapack_int lda, double * w, double *
work, lapack_int lwork)
Definition at line 36 of file lapacke_dsyev_2stage_work.c.
now she's got work and lwork but not iwork/liwork — remember that, the d-variants are the ones that go full integer 😌.
LAPACKE_dsyev_work
lapack_int LAPACKE_dsyev_work (int matrix_layout, char jobz, char uplo,
lapack_int n, double * a, lapack_int lda, double * w, double * work,
lapack_int lwork)
Definition at line 36 of file lapacke_dsyev_work.c.
work + lwork, that's the whole glow-up 🌸.
LAPACKE_dsyevd
lapack_int LAPACKE_dsyevd (int matrix_layout, char jobz, char uplo,
lapack_int n, double * a, lapack_int lda, double * w)
Definition at line 36 of file lapacke_dsyevd.c.
again, same seven-arg shape as dsyev and dsyev_2stage. the whole family shares a wardrobe 💖.
LAPACKE_dsyevd_2stage
lapack_int LAPACKE_dsyevd_2stage (int matrix_layout, char jobz, char uplo,
lapack_int n, double * a, lapack_int lda, double * w)
Definition at line 36 of file lapacke_dsyevd_2stage.c.
yep — same seven. consistent queen 👑.
LAPACKE_dsyevd_2stage_work
lapack_int LAPACKE_dsyevd_2stage_work (int matrix_layout, char jobz, char
uplo, lapack_int n, double * a, lapack_int lda, double * w, double *
work, lapack_int lwork, lapack_int * iwork, lapack_int liwork)
Definition at line 36 of file lapacke_dsyevd_2stage_work.c.
THERE they are — work, lwork, iwork, liwork. the d family always shows up with the full set 🔥.
LAPACKE_dsyevd_work
lapack_int LAPACKE_dsyevd_work (int matrix_layout, char jobz, char uplo,
lapack_int n, double * a, lapack_int lda, double * w, double * work,
lapack_int lwork, lapack_int * iwork, lapack_int liwork)
Definition at line 36 of file lapacke_dsyevd_work.c.
same four scratch args, no shortcuts. she's thorough and she's not sorry 🫶.
LAPACKE_dsyevr
lapack_int LAPACKE_dsyevr (int matrix_layout, char jobz, char range, char
uplo, lapack_int n, double * a, lapack_int lda, double vl, double vu,
lapack_int il, lapack_int iu, double abstol, lapack_int * m, double * w,
double * z, lapack_int ldz, lapack_int * isuppz)
Definition at line 36 of file lapacke_dsyevr.c.
okay so dsyevr is that girl — jobz, range, uplo all up front, then the vl/vu/il/iu/abstol block, then m, w, z, ldz, isuppz. seventeen args and she's still standing 💅✨.
LAPACKE_dsyevr_2stage
lapack_int LAPACKE_dsyevr_2stage (int matrix_layout, char jobz, char range,
char uplo, lapack_int n, double * a, lapack_int lda, double vl, double
vu, lapack_int il, lapack_int iu, double abstol, lapack_int * m, double
* w, double * z, lapack_int ldz, lapack_int * isuppz)
Definition at line 36 of file lapacke_dsyevr_2stage.c.
identical to LAPACKE_dsyevr — again, 2stage lives in the name only 🌈.
LAPACKE_dsyevr_2stage_work
lapack_int LAPACKE_dsyevr_2stage_work (int matrix_layout, char jobz, char
range, char uplo, lapack_int n, double * a, lapack_int lda, double vl,
double vu, lapack_int il, lapack_int iu, double abstol, lapack_int * m,
double * w, double * z, lapack_int ldz, lapack_int * isuppz, double *
work, lapack_int lwork, lapack_int * iwork, lapack_int liwork)
Definition at line 36 of file lapacke_dsyevr_2stage_work.c.
and she packed everything: isuppz then work, lwork, iwork, liwork. no notes, full marks 🎀.
LAPACKE_dsyevr_work
lapack_int LAPACKE_dsyevr_work (int matrix_layout, char jobz, char range,
char uplo, lapack_int n, double * a, lapack_int lda, double vl, double
vu, lapack_int il, lapack_int iu, double abstol, lapack_int * m, double
* w, double * z, lapack_int ldz, lapack_int * isuppz, double * work,
lapack_int lwork, lapack_int * iwork, lapack_int liwork)
Definition at line 36 of file lapacke_dsyevr_work.c.
same as LAPACKE_dsyevr with the four scratch args on the tail end. twenty-one arguments. TWENTY-ONE. she's the moment, she's the hype, she's the whole group chat 😭💜.
still deep in the d-department, bestie — the double-precision tour continues 💜
LAPACKE_dsyevx
lapack_int LAPACKE_dsyevx (int matrix_layout, char jobz, char range, char uplo, lapack_int n, double * a, lapack_int lda, double vl, double vu, lapack_int il, lapack_int iu, double abstol, lapack_int * m, double * w, double * z, lapack_int ldz, lapack_int * ifail)
the full-glow-up version with every knob out: jobz, range, uplo, vl/vu, il/iu, abstol, and it even hands you back m, w, z and ifail so nothing's a mystery ✨
Definition at line 36 of file lapacke_dsyevx.c.
LAPACKE_dsyevx_2stage
lapack_int LAPACKE_dsyevx_2stage (int matrix_layout, char jobz, char range, char uplo, lapack_int n, double * a, lapack_int lda, double vl, double vu, lapack_int il, lapack_int iu, double abstol, lapack_int * m, double * w, double * z, lapack_int ldz, lapack_int * ifail)
same exact roster of arguments as LAPACKE_dsyevx, but the _2stage variant — two stages, twice the drama, zero extra params 🎀
Definition at line 36 of file lapacke_dsyevx_2stage.c.
LAPACKE_dsyevx_2stage_work
lapack_int LAPACKE_dsyevx_2stage_work (int matrix_layout, char jobz, char range, char uplo, lapack_int n, double * a, lapack_int lda, double vl, double vu, lapack_int il, lapack_int iu, double abstol, lapack_int * m, double * w, double * z, lapack_int ldz, double * work, lapack_int lwork, lapack_int * iwork, lapack_int * ifail)
the _work one, so you're bringing your own work + lwork and iwork — main character energy, you handle your own workspace 💅
Definition at line 36 of file lapacke_dsyevx_2stage_work.c.
LAPACKE_dsyevx_work
lapack_int LAPACKE_dsyevx_work (int matrix_layout, char jobz, char range, char uplo, lapack_int n, double * a, lapack_int lda, double vl, double vu, lapack_int il, lapack_int iu, double abstol, lapack_int * m, double * w, double * z, lapack_int ldz, double * work, lapack_int lwork, lapack_int * iwork, lapack_int * ifail)
classic _work edition of LAPACKE_dsyevx — everything from the plain version plus work, lwork and iwork 🫶
Definition at line 36 of file lapacke_dsyevx_work.c.
LAPACKE_dsygst
lapack_int LAPACKE_dsygst (int matrix_layout, lapack_int itype, char uplo, lapack_int n, double * a, lapack_int lda, const double * b, lapack_int ldb)
short, sweet, and it's the one where b is const — hands off the b, bestie 🙈 itype sets the whole situation.
Definition at line 36 of file lapacke_dsygst.c.
LAPACKE_dsygst_work
lapack_int LAPACKE_dsygst_work (int matrix_layout, lapack_int itype, char uplo, lapack_int n, double * a, lapack_int lda, const double * b, lapack_int ldb)
okay so this one has the exact same parameter list as LAPACKE_dsygst — no extra work, no lwork, nothing. it's giving "same outfit, different file" 💀
Definition at line 36 of file lapacke_dsygst_work.c.
LAPACKE_dsygv
lapack_int LAPACKE_dsygv (int matrix_layout, lapack_int itype, char jobz, char uplo, lapack_int n, double * a, lapack_int lda, double * b, lapack_int ldb, double * w)
two matrices (a and b), a jobz, an uplo, and out comes w — the little generalised baddie 🌸
Definition at line 36 of file lapacke_dsygv.c.
LAPACKE_dsygv_2stage
lapack_int LAPACKE_dsygv_2stage (int matrix_layout, lapack_int itype, char jobz, char uplo, lapack_int n, double * a, lapack_int lda, double * b, lapack_int ldb, double * w)
identical argument list to LAPACKE_dsygv, _2stage flavoured — the aesthetic upgrade, no new args 🔥
Definition at line 36 of file lapacke_dsygv_2stage.c.
LAPACKE_dsygv_2stage_work
lapack_int LAPACKE_dsygv_2stage_work (int matrix_layout, lapack_int itype, char jobz, char uplo, lapack_int n, double * a, lapack_int lda, double * b, lapack_int ldb, double * w, double * work, lapack_int lwork)
_2stage + _work = you're supplying work and lwork yourself, and honestly? self-sufficient queen ✨
Definition at line 36 of file lapacke_dsygv_2stage_work.c.
LAPACKE_dsygv_work
lapack_int LAPACKE_dsygv_work (int matrix_layout, lapack_int itype, char jobz, char uplo, lapack_int n, double * a, lapack_int lda, double * b, lapack_int ldb, double * w, double * work, lapack_int lwork)
LAPACKE_dsygv plus work + lwork at the end, like an accessory that actually does something 🎀
Definition at line 36 of file lapacke_dsygv_work.c.
LAPACKE_dsygvd
lapack_int LAPACKE_dsygvd (int matrix_layout, lapack_int itype, char jobz, char uplo, lapack_int n, double * a, lapack_int lda, double * b, lapack_int ldb, double * w)
the d on the end is doing heavy lifting — note that this one's argument list matches LAPACKE_dsygv exactly 👑
Definition at line 36 of file lapacke_dsygvd.c.
LAPACKE_dsygvd_work
lapack_int LAPACKE_dsygvd_work (int matrix_layout, lapack_int itype, char jobz, char uplo, lapack_int n, double * a, lapack_int lda, double * b, lapack_int ldb, double * w, double * work, lapack_int lwork, lapack_int * iwork, lapack_int liwork)
oh she's thorough — work, lwork, and iwork with a matching liwork. two workspaces, because one is never enough 😭
Definition at line 36 of file lapacke_dsygvd_work.c.
LAPACKE_dsygvx
lapack_int LAPACKE_dsygvx (int matrix_layout, lapack_int itype, char jobz, char range, char uplo, lapack_int n, double * a, lapack_int lda, double * b, lapack_int ldb, double vl, double vu, lapack_int il, lapack_int iu, double abstol, lapack_int * m, double * w, double * z, lapack_int ldz, lapack_int * ifail)
the maximalist of the dsygv family — range, vl, vu, il, iu, abstol, m, w, z, ldz, ifail, the whole entire friend group 💖
Definition at line 36 of file lapacke_dsygvx.c.
LAPACKE_dsygvx_work
lapack_int LAPACKE_dsygvx_work (int matrix_layout, lapack_int itype, char jobz, char range, char uplo, lapack_int n, double * a, lapack_int lda, double * b, lapack_int ldb, double vl, double vu, lapack_int il, lapack_int iu, double abstol, lapack_int * m, double * w, double * z, lapack_int ldz, double * work, lapack_int lwork, lapack_int * iwork, lapack_int * ifail)
everything LAPACKE_dsygvx has, plus work, lwork, iwork. it's a lot but she carries it gracefully 🦋
Definition at line 36 of file lapacke_dsygvx_work.c.
LAPACKE_dsyrfs
lapack_int LAPACKE_dsyrfs (int matrix_layout, char uplo, lapack_int n, lapack_int nrhs, const double * a, lapack_int lda, const double * af, lapack_int ldaf, const lapack_int * ipiv, const double * b, lapack_int ldb, double * x, lapack_int ldx, double * ferr, double * berr)
the refine-your-answer one — note the const squad: a, af, ipiv, b are all read-only sweeties, while x, ferr, berr are the ones that get written 🧚
Definition at line 36 of file lapacke_dsyrfs.c.
LAPACKE_dsyrfs_work
lapack_int LAPACKE_dsyrfs_work (int matrix_layout, char uplo, lapack_int n, lapack_int nrhs, const double * a, lapack_int lda, const double * af, lapack_int ldaf, const lapack_int * ipiv, const double * b, lapack_int ldb, double * x, lapack_int ldx, double * ferr, double * berr, double * work, lapack_int * iwork)
same as LAPACKE_dsyrfs but you also pass work and iwork (no lwork — don't come for me, that's literally what's written) 💀
Definition at line 36 of file lapacke_dsyrfs_work.c.
LAPACKE_dsyrfsx
lapack_int LAPACKE_dsyrfsx (int matrix_layout, char uplo, char equed, lapack_int n, lapack_int nrhs, const double * a, lapack_int lda, const double * af, lapack_int ldaf, const lapack_int * ipiv, const double * s, const double * b, lapack_int ldb, double * x, lapack_int ldx, double * rcond, double * berr, lapack_int n_err_bnds, double * err_bnds_norm, double * err_bnds_comp, lapack_int nparams, double * params)
the x-tra edition 🙈 extra equed, extra s, and the whole error-bound situation: rcond, berr, n_err_bnds, err_bnds_norm, err_bnds_comp, nparams, params. she wants all the receipts.
Definition at line 36 of file lapacke_dsyrfsx.c.
LAPACKE_dsyrfsx_work
lapack_int LAPACKE_dsyrfsx_work (int matrix_layout, char uplo, char equed, lapack_int n, lapack_int nrhs, const double * a, lapack_int lda, const double * af, lapack_int ldaf, const lapack_int * ipiv, const double * s, const double * b, lapack_int ldb, double * x, lapack_int ldx, double * rcond, double * berr, lapack_int n_err_bnds, double * err_bnds_norm, double * err_bnds_comp, lapack_int nparams, double * params, double * work, lapack_int * iwork)
literally LAPACKE_dsyrfsx with work and iwork tacked on the end, no lwork in sight, and that's just the way it is bestie 🎀
Definition at line 36 of file lapacke_dsyrfsx_work.c.
LAPACKE_dsysv
lapack_int LAPACKE_dsysv (int matrix_layout, char uplo, lapack_int n, lapack_int nrhs, double * a, lapack_int lda, lapack_int * ipiv, double * b, lapack_int ldb)
clean, compact, ipiv in the middle — the no-frills dsysv original 🌈
Definition at line 36 of file lapacke_dsysv.c.
LAPACKE_dsysv_aa
lapack_int LAPACKE_dsysv_aa (int matrix_layout, char uplo, lapack_int n, lapack_int nrhs, double * a, lapack_int lda, lapack_int * ipiv, double * b, lapack_int ldb)
_aa on the name, but look — the parameters are character-for-character the same as LAPACKE_dsysv. the _aa is a personality trait, not a new argument 😌
Definition at line 36 of file lapacke_dsysv_aa.c.
LAPACKE_dsysv_aa_2stage
lapack_int LAPACKE_dsysv_aa_2stage (int matrix_layout, char uplo, lapack_int n, lapack_int nrhs, double * a, lapack_int lda, double * tb, lapack_int ltb, lapack_int * ipiv, lapack_int * ipiv2, double * b, lapack_int ldb)
okay THIS one switches it up: tb + ltb and two pivot arrays, ipiv and ipiv2. double the pivots, double the fun 👑
Definition at line 36 of file lapacke_dsysv_aa_2stage.c.
LAPACKE_dsysv_aa_2stage_work
lapack_int LAPACKE_dsysv_aa_2stage_work (int matrix_layout, char uplo, lapack_int n, lapack_int nrhs, double * a, lapack_int lda, double * tb, lapack_int ltb, lapack_int * ipiv, lapack_int * ipiv2, double * b, lapack_int ldb, double * work, lapack_int lwork)
the _work sibling of LAPACKE_dsysv_aa_2stage — keeps tb, ltb, ipiv, ipiv2, and adds work + lwork 🫶
Definition at line 36 of file lapacke_dsysv_aa_2stage_work.c.
LAPACKE_dsysv_aa_work
lapack_int LAPACKE_dsysv_aa_work (int matrix_layout, char uplo, lapack_int n, lapack_int nrhs, double * a, lapack_int lda, lapack_int * ipiv, double * b, lapack_int ldb, double * work, lapack_int lwork)
LAPACKE_dsysv_aa with work + lwork appended. simple math, iconic result ✨
Definition at line 36 of file lapacke_dsysv_aa_work.c.
LAPACKE_dsysv_rk
lapack_int LAPACKE_dsysv_rk (int matrix_layout, char uplo, lapack_int n, lapack_int nrhs, double * a, lapack_int lda, double * e, lapack_int * ipiv, double * b, lapack_int ldb)
this one brought e to the party — one extra double pointer, sitting right between lda and ipiv 🍓
Definition at line 36 of file lapacke_dsysv_rk.c.
LAPACKE_dsysv_rk_work
lapack_int LAPACKE_dsysv_rk_work (int matrix_layout, char uplo, lapack_int n, lapack_int nrhs, double * a, lapack_int lda, double * e, lapack_int * ipiv, double * b, lapack_int ldb, double * work, lapack_int lwork)
LAPACKE_dsysv_rk + work + lwork. the e stays, obviously, she's not going anywhere 💅
Definition at line 36 of file lapacke_dsysv_rk_work.c.
LAPACKE_dsysv_rook
lapack_int LAPACKE_dsysv_rook (int matrix_layout, char uplo, lapack_int n, lapack_int nrhs, double * a, lapack_int lda, lapack_int * ipiv, double * b, lapack_int ldb)
_rook, and yep — same arguments as plain LAPACKE_dsysv, down to the letter. the name is the whole plot twist 🔥
Definition at line 36 of file lapacke_dsysv_rook.c.
LAPACKE_dsysv_rook_work
lapack_int LAPACKE_dsysv_rook_work (int matrix_layout, char uplo, lapack_int n, lapack_int nrhs, double * a, lapack_int lda, lapack_int * ipiv, double * b, lapack_int ldb, double * work, lapack_int lwork)
the _rook with work + lwork bolted on the end, ready to go 🎀
Definition at line 36 of file lapacke_dsysv_rook_work.c.
LAPACKE_dsysv_work
lapack_int LAPACKE_dsysv_work (int matrix_layout, char uplo, lapack_int n, lapack_int nrhs, double * a, lapack_int lda, lapack_int * ipiv, double * b, lapack_int ldb, double * work, lapack_int lwork)
the plain one, but with feelings (the feelings are work and lwork) 💖
Definition at line 36 of file lapacke_dsysv_work.c.
LAPACKE_dsysvx
lapack_int LAPACKE_dsysvx (int matrix_layout, char fact, char uplo, lapack_int n, lapack_int nrhs, const double * a, lapack_int lda, double * af, lapack_int ldaf, lapack_int * ipiv, const double * b, lapack_int ldb, double * x, lapack_int ldx, double * rcond, double * ferr, double * berr)
note the fact flag up front and the fact that af and ipiv are not const (they're the pre-paid output slots), while a and b are locked down 🔒
Definition at line 36 of file lapacke_dsysvx.c.
LAPACKE_dsysvx_work
lapack_int LAPACKE_dsysvx_work (int matrix_layout, char fact, char uplo, lapack_int n, lapack_int nrhs, const double * a, lapack_int lda, double * af, lapack_int ldaf, lapack_int * ipiv, const double * b, lapack_int ldb, double * x, lapack_int ldx, double * rcond, double * ferr, double * berr, double * work, lapack_int lwork, lapack_int * iwork)
LAPACKE_dsysvx plus work, lwork, iwork. the full stack, no crumbs left behind 😭
Definition at line 36 of file lapacke_dsysvx_work.c.
LAPACKE_dsysvxx
lapack_int LAPACKE_dsysvxx (int matrix_layout, char fact, char uplo, lapack_int n, lapack_int nrhs, double * a, lapack_int lda, double * af, lapack_int ldaf, lapack_int * ipiv, char * equed, double * s, double * b, lapack_int ldb, double * x, lapack_int ldx, double * rcond, double * rpvgrw, double * berr, lapack_int n_err_bnds, double * err_bnds_norm, double * err_bnds_comp, lapack_int nparams, double * params)
the double-x icon 👑 she's got equed, s, rpvgrw, and the entire error-bound entourage. also heads up: a, af, ipiv, b are all non-const here, so nothing's protected. chaotic, love her.
Definition at line 36 of file lapacke_dsysvxx.c.
LAPACKE_dsysvxx_work
lapack_int LAPACKE_dsysvxx_work (int matrix_layout, char fact, char uplo, lapack_int n, lapack_int nrhs, double * a, lapack_int lda, double * af, lapack_int ldaf, lapack_int * ipiv, char * equed, double * s, double * b, lapack_int ldb, double * x, lapack_int ldx, double * rcond, double * rpvgrw, double * berr, lapack_int n_err_bnds, double * err_bnds_norm, double * err_bnds_comp, lapack_int nparams, double * params, double * work, lapack_int * iwork)
same as LAPACKE_dsysvxx plus work and iwork. still no lwork — yes I checked twice 💀
Definition at line 36 of file lapacke_dsysvxx_work.c.
LAPACKE_dsyswapr
lapack_int LAPACKE_dsyswapr (int matrix_layout, char uplo, lapack_int n, double * a, lapack_int lda, lapack_int i1, lapack_int i2)
short one! i1 and i2, two ints, right at the end. no ldz, no work, just vibes 🌸
Definition at line 36 of file lapacke_dsyswapr.c.
LAPACKE_dsyswapr_work
lapack_int LAPACKE_dsyswapr_work (int matrix_layout, char uplo, lapack_int n, double * a, lapack_int lda, lapack_int i1, lapack_int i2)
identical signature to LAPACKE_dsyswapr, _work in the filename only. they're twins, fr fr 🦋
Definition at line 36 of file lapacke_dsyswapr_work.c.
LAPACKE_dsytrd
lapack_int LAPACKE_dsytrd (int matrix_layout, char uplo, lapack_int n, double * a, lapack_int lda, double * d, double * e, double * tau)
d, e, tau — three little doubles out the door, no workspace required 🧚
Definition at line 36 of file lapacke_dsytrd.c.
LAPACKE_dsytrd_work
lapack_int LAPACKE_dsytrd_work (int matrix_layout, char uplo, lapack_int n, double * a, lapack_int lda, double * d, double * e, double * tau, double * work, lapack_int lwork)
the same trio (d, e, tau) but now you're paying rent in work and lwork — worth it 💜
Definition at line 36 of file lapacke_dsytrd_work.c.
LAPACKE_dsytrf
lapack_int LAPACKE_dsytrf (int matrix_layout, char uplo, lapack_int n,
double * a, lapack_int lda, lapack_int * ipiv)
Definition at line 36 of file lapacke_dsytrf.c.
The og. no _work, no suffix, just vibes and six args. matrix_layout, uplo, n, then a, lda and ipiv — and yes ipiv is a pointer to lapack_int, she's writing back to you 💅
LAPACKE_dsytrf_aa
lapack_int LAPACKE_dsytrf_aa (int matrix_layout, char uplo, lapack_int n,
double * a, lapack_int lda, lapack_int * ipiv)
Definition at line 36 of file lapacke_dsytrf_aa.c.
Same shape as her big sister, different file — lapacke_dsytrf_aa.c bestie, don't mix them up 🎀 the _aa suffix is the whole personality here.
LAPACKE_dsytrf_aa_2stage
lapack_int LAPACKE_dsytrf_aa_2stage (int matrix_layout, char uplo,
lapack_int n, double * a, lapack_int lda, double * tb, lapack_int ltb,
lapack_int * ipiv, lapack_int * ipiv2)
Definition at line 36 of file lapacke_dsytrf_aa_2stage.c.
Two stages, two pivot arrays — ipiv and ipiv2, like she's double-booked 😭 plus the new besties tb and ltb show up. Definition at line 36 of lapacke_dsytrf_aa_2stage.c, iconic of her.
LAPACKE_dsytrf_aa_2stage_work
lapack_int LAPACKE_dsytrf_aa_2stage_work (int matrix_layout, char uplo,
lapack_int n, double * a, lapack_int lda, double * tb, lapack_int ltb,
lapack_int * ipiv, lapack_int * ipiv2, double * work, lapack_int lwork)
Definition at line 36 of file lapacke_dsytrf_aa_2stage_work.c.
This is the _work girlie of the 2stage situation, which means she brought her own workspace: work and lwork, both handed straight to you 🫶 count the args, there's a lot, drink some water first.
LAPACKE_dsytrf_aa_work
lapack_int LAPACKE_dsytrf_aa_work (int matrix_layout, char uplo, lapack_int
n, double * a, lapack_int lda, lapack_int * ipiv, double * work,
lapack_int lwork)
Definition at line 36 of file lapacke_dsytrf_aa_work.c.
_aa plus _work equals a workspace you pass in yourself — work and lwork appended to the end, periodt. File: lapacke_dsytrf_aa_work.c ✨
LAPACKE_dsytrf_rk
lapack_int LAPACKE_dsytrf_rk (int matrix_layout, char uplo, lapack_int n,
double * a, lapack_int lda, double * e, lapack_int * ipiv)
Definition at line 36 of file lapacke_dsytrf_rk.c.
_rk era 💖 and she's got a lil extra: e, a double *, sitting right there between lda and ipiv. Lowkey the roster changed, bestie.
LAPACKE_dsytrf_rk_work
lapack_int LAPACKE_dsytrf_rk_work (int matrix_layout, char uplo, lapack_int
n, double * a, lapack_int lda, double * e, lapack_int * ipiv, double *
work, lapack_int lwork)
Definition at line 36 of file lapacke_dsytrf_rk_work.c.
Same _rk cast — matrix_layout, uplo, n, a, lda, e, ipiv — then work and lwork crash the party 🎀 defined at line 36 of lapacke_dsytrf_rk_work.c.
LAPACKE_dsytrf_rook
lapack_int LAPACKE_dsytrf_rook (int matrix_layout, char uplo, lapack_int n,
double * a, lapack_int lda, lapack_int * ipiv)
Definition at line 36 of file lapacke_dsytrf_rook.c.
No e here, no tb, no work — just the classic six. _rook is the whole lewk and the file is lapacke_dsytrf_rook.c 💅
LAPACKE_dsytrf_rook_work
lapack_int LAPACKE_dsytrf_rook_work (int matrix_layout, char uplo,
lapack_int n, double * a, lapack_int lda, lapack_int * ipiv, double *
work, lapack_int lwork)
Definition at line 36 of file lapacke_dsytrf_rook_work.c.
_rook with her _work bestie along for the ride: work is a double *, lwork is a lapack_int, and they go last. obviously 🦋
LAPACKE_dsytrf_work
lapack_int LAPACKE_dsytrf_work (int matrix_layout, char uplo, lapack_int n,
double * a, lapack_int lda, lapack_int * ipiv, double * work,
lapack_int lwork)
Definition at line 36 of file lapacke_dsytrf_work.c.
The plain _work version, no suffixes, no drama, just work + lwork tacked on the end of the og arg list. Definition at line 36 of lapacke_dsytrf_work.c — she's consistent, I respect it ✨
LAPACKE_dsytri
lapack_int LAPACKE_dsytri (int matrix_layout, char uplo, lapack_int n,
double * a, lapack_int lda, const lapack_int * ipiv)
Definition at line 36 of file lapacke_dsytri.c.
New family, same energy 🧚 note that ipiv is now const — she's only reading it, not touching, love that boundary setting for her.
LAPACKE_dsytri2
lapack_int LAPACKE_dsytri2 (int matrix_layout, char uplo, lapack_int n,
double * a, lapack_int lda, const lapack_int * ipiv)
Definition at line 36 of file lapacke_dsytri2.c.
A 2 on the end, bestie, that's the plot twist. Args are identical to LAPACKE_dsytri char for char, but the file says lapacke_dsytri2.c so she's not the same girlie 😭
LAPACKE_dsytri2_work
lapack_int LAPACKE_dsytri2_work (int matrix_layout, char uplo, lapack_int n,
double * a, lapack_int lda, const lapack_int * ipiv, double * work,
lapack_int lwork)
Definition at line 36 of file lapacke_dsytri2_work.c.
_2_work — the sequel to the sequel 🌈 const lapack_int * ipiv stays const, and work / lwork join at the end. Definition at line 36 of lapacke_dsytri2_work.c.
LAPACKE_dsytri2x
lapack_int LAPACKE_dsytri2x (int matrix_layout, char uplo, lapack_int n,
double * a, lapack_int lda, const lapack_int * ipiv, lapack_int nb)
Definition at line 36 of file lapacke_dsytri2x.c.
The x is silent but the nb is not 🎀 she takes a lapack_int nb as her final arg, and no work/lwork at all. different breed, honestly.
LAPACKE_dsytri2x_work
lapack_int LAPACKE_dsytri2x_work (int matrix_layout, char uplo, lapack_int
n, double * a, lapack_int lda, const lapack_int * ipiv, double * work,
lapack_int nb)
Definition at line 36 of file lapacke_dsytri2x_work.c.
And here's the gag: _work edition adds double * work but keeps nb right at the end, still a lapack_int. Not lwork. nb. Read it twice 🫶 file is lapacke_dsytri2x_work.c.
LAPACKE_dsytri_3
lapack_int LAPACKE_dsytri_3 (int matrix_layout, char uplo, lapack_int n,
double * a, lapack_int lda, const double * e, const lapack_int * ipiv)
Definition at line 36 of file lapacke_dsytri_3.c.
_3 girlie pops in with a const double * e before the const lapack_int * ipiv — two consts in one signature, she's very "I know my boundaries" 💜
LAPACKE_dsytri_3_work
lapack_int LAPACKE_dsytri_3_work (int matrix_layout, char uplo, lapack_int
n, double * a, lapack_int lda, const double * e, const lapack_int *
ipiv, double * work, lapack_int lwork)
Definition at line 36 of file lapacke_dsytri_3_work.c.
_3_work = matrix_layout, uplo, n, a, lda, const double * e, const lapack_int * ipiv, then work and lwork. nine args, she's thorough, we stan 🌸
LAPACKE_dsytri_work
lapack_int LAPACKE_dsytri_work (int matrix_layout, char uplo, lapack_int n,
double * a, lapack_int lda, const lapack_int * ipiv, double * work)
Definition at line 36 of file lapacke_dsytri_work.c.
okay bestie look at this one closely 👀 she has a double * work but there is NO lwork anywhere. That is not a typo, that's literally the signature. Definition at line 36 of lapacke_dsytri_work.c.
LAPACKE_dsytrs
lapack_int LAPACKE_dsytrs (int matrix_layout, char uplo, lapack_int n,
lapack_int nrhs, const double * a, lapack_int lda, const lapack_int *
ipiv, double * b, lapack_int ldb)
Definition at line 36 of file lapacke_dsytrs.c.
_trs era begins and she's an s, so b and ldb enter the chat 💅 note a is const double * and ipiv is const lapack_int * — she reads, she does not write, she respects the source material.
LAPACKE_dsytrs2
lapack_int LAPACKE_dsytrs2 (int matrix_layout, char uplo, lapack_int n,
lapack_int nrhs, const double * a, lapack_int lda, const lapack_int *
ipiv, double * b, lapack_int ldb)
Definition at line 36 of file lapacke_dsytrs2.c.
the 2 is back and she brought the exact same arg list 🎀 identical to LAPACKE_dsytrs, but the file is lapacke_dsytrs2.c and that's the whole difference you can see from here. no cap.
LAPACKE_dsytrs2_work
lapack_int LAPACKE_dsytrs2_work (int matrix_layout, char uplo, lapack_int n,
lapack_int nrhs, const double * a, lapack_int lda, const lapack_int *
ipiv, double * b, lapack_int ldb, double * work)
Definition at line 36 of file lapacke_dsytrs2_work.c.
_work version — and once again she adds double * work with no matching lwork. it's giving "I brought a snack but no bag". line 36, lapacke_dsytrs2_work.c 💀
LAPACKE_dsytrs_3
lapack_int LAPACKE_dsytrs_3 (int matrix_layout, char uplo, lapack_int n,
lapack_int nrhs, const double * a, lapack_int lda, const double * e,
const lapack_int * ipiv, double * b, lapack_int ldb)
Definition at line 36 of file lapacke_dsytrs_3.c.
_3 shows up with const double * e squeezed between lda and ipiv. ten args total, she's highkey the main character of this little cluster 👑
LAPACKE_dsytrs_3_work
lapack_int LAPACKE_dsytrs_3_work (int matrix_layout, char uplo, lapack_int
n, lapack_int nrhs, const double * a, lapack_int lda, const double * e,
const lapack_int * ipiv, double * b, lapack_int ldb)
Definition at line 36 of file lapacke_dsytrs_3_work.c.
okay so she's called _work but her arg list is exactly LAPACKE_dsytrs_3's — no work, no lwork, nothing extra. that's just how it is, bestie, I don't make the rules 😭 file: lapacke_dsytrs_3_work.c.
LAPACKE_dsytrs_aa
lapack_int LAPACKE_dsytrs_aa (int matrix_layout, char uplo, lapack_int n,
lapack_int nrhs, const double * a, lapack_int lda, const lapack_int *
ipiv, double * b, lapack_int ldb)
Definition at line 36 of file lapacke_dsytrs_aa.c.
_aa on the _trs side, and the signature is the plain nine again — matrix_layout, uplo, n, nrhs, a, lda, ipiv, b, ldb. consistent queen 🌈
LAPACKE_dsytrs_aa_2stage
lapack_int LAPACKE_dsytrs_aa_2stage (int matrix_layout, char uplo,
lapack_int n, lapack_int nrhs, double * a, lapack_int lda, double * tb,
lapack_int ltb, lapack_int * ipiv, lapack_int * ipiv2, double * b,
lapack_int ldb)
Definition at line 36 of file lapacke_dsytrs_aa_2stage.c.
FULL CAST, no consts in sight on a, tb, ipiv or ipiv2 🙈 both pivot arrays, both tb and ltb, plus b and ldb at the end. twelve args, she's extra in the best way. line 36 of lapacke_dsytrs_aa_2stage.c.
LAPACKE_dsytrs_aa_2stage_work
lapack_int LAPACKE_dsytrs_aa_2stage_work (int matrix_layout, char uplo,
lapack_int n, lapack_int nrhs, double * a, lapack_int lda, double * tb,
lapack_int ltb, lapack_int * ipiv, lapack_int * ipiv2, double * b,
lapack_int ldb)
Definition at line 36 of file lapacke_dsytrs_aa_2stage_work.c.
and the _work version is character-for-character the same as LAPACKE_dsytrs_aa_2stage — no workspace params at all. just the name changing. it's giving "same outfit, different caption" ✨ lapacke_dsytrs_aa_2stage_work.c.
LAPACKE_dsytrs_aa_work
lapack_int LAPACKE_dsytrs_aa_work (int matrix_layout, char uplo, lapack_int
n, lapack_int nrhs, const double * a, lapack_int lda, const lapack_int *
ipiv, double * b, lapack_int ldb, double * work, lapack_int lwork)
Definition at line 36 of file lapacke_dsytrs_aa_work.c.
here _work does bring the goods — double * work AND lapack_int lwork 🫶 consts back on a and ipiv. balance restored.
LAPACKE_dsytrs_rook
lapack_int LAPACKE_dsytrs_rook (int matrix_layout, char uplo, lapack_int n,
lapack_int nrhs, const double * a, lapack_int lda, const lapack_int *
ipiv, double * b, lapack_int ldb)
Definition at line 36 of file lapacke_dsytrs_rook.c.
_rook crossover episode 🔥 same nine args, same const placement, different file: lapacke_dsytrs_rook.c. she's the rook girlie of the _trs world.
LAPACKE_dsytrs_rook_work
lapack_int LAPACKE_dsytrs_rook_work (int matrix_layout, char uplo,
lapack_int n, lapack_int nrhs, const double * a, lapack_int lda, const
lapack_int * ipiv, double * b, lapack_int ldb)
Definition at line 36 of file lapacke_dsytrs_rook_work.c.
again — _work in the name, no work in the args 🤡 she said "I'm working, I'm just not showing you my workspace". lapacke_dsytrs_rook_work.c, line 36.
LAPACKE_dsytrs_work
lapack_int LAPACKE_dsytrs_work (int matrix_layout, char uplo, lapack_int n,
lapack_int nrhs, const double * a, lapack_int lda, const lapack_int *
ipiv, double * b, lapack_int ldb)
Definition at line 36 of file lapacke_dsytrs_work.c.
plain _work, plain nine args, no extra params. that's her whole thing and honestly? slay 💅
LAPACKE_dtbcon
lapack_int LAPACKE_dtbcon (int matrix_layout, char norm, char uplo, char
diag, lapack_int n, lapack_int kd, const double * ab, lapack_int ldab,
double * rcond)
Definition at line 36 of file lapacke_dtbcon.c.
NEW LETTER BLOCK, we're in the dtb era now 🦋 and look at all these chars: norm, uplo, diag — three whole character args before you even get to n. then kd, const double * ab, ldab, and double * rcond to finish. nine args, all accounted for.
LAPACKE_dtbcon_work
lapack_int LAPACKE_dtbcon_work (int matrix_layout, char norm, char uplo,
char diag, lapack_int n, lapack_int kd, const double * ab, lapack_int
ldab, double * rcond, double * work, lapack_int * iwork)
Definition at line 36 of file lapacke_dtbcon_work.c.
her _work twin adds TWO arrays: double * work and lapack_int * iwork — note that iwork is an integer workspace and there's no lwork/liwork here 🎀 just vibes and pointers, line 36 of lapacke_dtbcon_work.c.
LAPACKE_dtbrfs
lapack_int LAPACKE_dtbrfs (int matrix_layout, char uplo, char trans, char
diag, lapack_int n, lapack_int kd, lapack_int nrhs, const double * ab,
lapack_int ldab, const double * b, lapack_int ldb, const double * x,
lapack_int ldx, double * ferr, double * berr)
Definition at line 36 of file lapacke_dtbrfs.c.
FOURTEEN ARGS 😭 she went off. uplo, trans, diag on char duty, then n, kd, nrhs, ab, ldab, b, ldb, x, ldx, and the twin output girlies ferr and berr both double *. count them twice, bestie.
LAPACKE_dtbrfs_work
lapack_int LAPACKE_dtbrfs_work (int matrix_layout, char uplo, char trans,
char diag, lapack_int n, lapack_int kd, lapack_int nrhs, const double *
ab, lapack_int ldab, const double * b, lapack_int ldb, const double * x,
lapack_int ldx, double * ferr, double * berr, double * work, lapack_int
* iwork)
Definition at line 36 of file lapacke_dtbrfs_work.c.
fourteen becomes sixteen with double * work and lapack_int * iwork appended. still no length params for them. she's mysterious like that 💜 lapacke_dtbrfs_work.c.
LAPACKE_dtbtrs
lapack_int LAPACKE_dtbtrs (int matrix_layout, char uplo, char trans, char
diag, lapack_int n, lapack_int kd, lapack_int nrhs, const double * ab,
lapack_int ldab, double * b, lapack_int ldb)
Definition at line 36 of file lapacke_dtbtrs.c.
_trs again but make it dtb 🌸 eleven args, b is the only non-const double * in the data section — she's the one getting written to, and honestly? good for her.
LAPACKE_dtbtrs_work
lapack_int LAPACKE_dtbtrs_work (int matrix_layout, char uplo, char trans,
char diag, lapack_int n, lapack_int kd, lapack_int nrhs, const double *
ab, lapack_int ldab, double * b, lapack_int ldb)
Definition at line 36 of file lapacke_dtbtrs_work.c.
and yes, _work again with zero work params. same eleven args as LAPACKE_dtbtrs. I'm starting to think these _work names are just a personality trait 😭
LAPACKE_dtfsm
lapack_int LAPACKE_dtfsm (int matrix_layout, char transr, char side, char
uplo, char trans, char diag, lapack_int m, lapack_int n, double alpha,
const double * a, double * b, lapack_int ldb)
Definition at line 36 of file lapacke_dtfsm.c.
FIVE CHAR ARGS. transr, side, uplo, trans, diag — she said "let me give you every option at once" 💅 then m, n, a by-value double alpha, const double * a, double * b, and lapack_int ldb. twelve total, no notes.
LAPACKE_dtfsm_work
lapack_int LAPACKE_dtfsm_work (int matrix_layout, char transr, char side,
char uplo, char trans, char diag, lapack_int m, lapack_int n, double
alpha, const double * a, double * b, lapack_int ldb)
Definition at line 36 of file lapacke_dtfsm_work.c.
identical twin, literally same twelve args, alpha still passed by value 🎀 the _work thing continues to be a name-only situation. lapacke_dtfsm_work.c, line 36.
LAPACKE_dtftri
lapack_int LAPACKE_dtftri (int matrix_layout, char transr, char uplo, char
diag, lapack_int n, double * a)
Definition at line 36 of file lapacke_dtftri.c.
finally a short one — six args 🧚 matrix_layout, transr, uplo, diag, n, and a single mutable double * a. after dtbrfs this feels like a spa day.
LAPACKE_dtftri_work
lapack_int LAPACKE_dtftri_work (int matrix_layout, char transr, char uplo,
char diag, lapack_int n, double * a)
Definition at line 36 of file lapacke_dtftri_work.c.
same six, _work in the filename, no work arg. I've made my peace with it 🌈
LAPACKE_dtfttp
lapack_int LAPACKE_dtfttp (int matrix_layout, char transr, char uplo,
lapack_int n, const double * arf, double * ap)
Definition at line 36 of file lapacke_dtfttp.c.
note the spelling bestie — that's arf and ap, _tfttp with the double t 😭 arf is const double *, ap is plain old double *. six args, two arrays.
LAPACKE_dtfttp_work
lapack_int LAPACKE_dtfttp_work (int matrix_layout, char transr, char uplo,
lapack_int n, const double * arf, double * ap)
Definition at line 36 of file lapacke_dtfttp_work.c.
yep. identical. _work in name only. arf const, ap not. line 36 of lapacke_dtfttp_work.c ✨
LAPACKE_dtfttr
lapack_int LAPACKE_dtfttr (int matrix_layout, char transr, char uplo,
lapack_int n, const double * arf, double * a, lapack_int lda)
Definition at line 36 of file lapacke_dtfttr.c.
the tr ending means lda comes back into the picture 🫶 seven args: matrix_layout, transr, uplo, n, const double * arf, double * a, lapack_int lda.
LAPACKE_dtfttr_work
lapack_int LAPACKE_dtfttr_work (int matrix_layout, char transr, char uplo,
lapack_int n, const double * arf, double * a, lapack_int lda)
Definition at line 36 of file lapacke_dtfttr_work.c.
seven args again, _work in the filename only, and I'm just gonna assume she's doing her best 💀 lapacke_dtfttr_work.c.
LAPACKE_dtgevc
lapack_int LAPACKE_dtgevc (int matrix_layout, char side, char howmny, const
lapack_logical * select, lapack_int n, const double * s, lapack_int lds,
const double * p, lapack_int ldp, double * vl, lapack_int ldvl, double *
vr, lapack_int ldvr, lapack_int mm, lapack_int * m)
Definition at line 36 of file lapacke_dtgevc.c.
okay this is the BIG one, FIFTEEN arguments 👑 and she's flexing a const lapack_logical * select right there in position four — a whole different type, not even double, not even a char. also howmny is spelled exactly like that, do not "fix" it. s/lds, p/ldp, vl/ldvl, vr/ldvr, then mm by value and lapack_int * m last. legendary.
LAPACKE_dtgevc_work
lapack_int LAPACKE_dtgevc_work (int matrix_layout, char side, char howmny,
const lapack_logical * select, lapack_int n, const double * s,
lapack_int lds, const double * p, lapack_int ldp, double * vl,
lapack_int ldvl, double * vr, lapack_int ldvr, lapack_int mm, lapack_int
* m, double * work)
Definition at line 36 of file lapacke_dtgevc_work.c.
sixteen args now — she tacked a double * work on the very end, and once more: no lwork 😭 select stays const lapack_logical *, m stays lapack_int *. perfection, no notes, line 36 of lapacke_dtgevc_work.c.
LAPACKE_dtgexc
lapack_int LAPACKE_dtgexc (int matrix_layout, lapack_logical wantq,
lapack_logical wantz, lapack_int n, double * a, lapack_int lda, double *
b, lapack_int ldb, double * q, lapack_int ldq, double * z, lapack_int
ldz, lapack_int * ifst, lapack_int * ilst)
Definition at line 36 of file lapacke_dtgexc.c.
saving the loudest for last 🎀 FOURTEEN args, two lapack_logical flags (wantq, wantz) passed by value, then a/lda, b/ldb, q/ldq, z/ldz, and the finale: lapack_int * ifst and lapack_int * ilst. no const anywhere in the pointer list — she's writing to all of it. iconic. defined at line 36 of lapacke_dtgexc.c 💜
LAPACKE_dtgexc_work— bestie this is the_worktwin of the one above it 🫶 same reorder-the-generalized-eigenvalues energy, except you bring the scratch space: there's adouble * workand alapack_int lworkat the end so you get to say exactly how big the workspace is. Main character of your own memory management, fr.
lapack_int LAPACKE_dtgexc_work (int matrix_layout, lapack_logical wantq,
lapack_logical wantz, lapack_int n, double * a, lapack_int lda, double *
b, lapack_int ldb, double * q, lapack_int ldq, double * z, lapack_int
ldz, lapack_int * ifst, lapack_int * ilst, double * work, lapack_int
lwork)
Definition at line 36 of file lapacke_dtgexc_work.c.
LAPACKE_dtgsen— the reorder-and-decompose situation 👑ijobtells it what you want computed,wantqandwantzsay whether theqandzmatrices are getting updated, andselectis the logical array picking which eigenvalues go in the leading block. Comes back withm(how many got moved),pl,pr(the eigenvalue projections) anddif(the diffs). No workspace of your own — it handles that.
lapack_int LAPACKE_dtgsen (int matrix_layout, lapack_int ijob,
lapack_logical wantq, lapack_logical wantz, const lapack_logical *
select, lapack_int n, double * a, lapack_int lda, double * b, lapack_int
ldb, double * alphar, double * alphai, double * beta, double * q,
lapack_int ldq, double * z, lapack_int ldz, lapack_int * m, double * pl,
double * pr, double * dif)
Definition at line 36 of file lapacke_dtgsen.c.
LAPACKE_dtgsen_work— same whole vibe asLAPACKE_dtgsen, but now you're also supplyingwork/lworkandiwork/liwork. Two workspaces, two sizes, zero excuses 💅
lapack_int LAPACKE_dtgsen_work (int matrix_layout, lapack_int ijob,
lapack_logical wantq, lapack_logical wantz, const lapack_logical *
select, lapack_int n, double * a, lapack_int lda, double * b, lapack_int
ldb, double * alphar, double * alphai, double * beta, double * q,
lapack_int ldq, double * z, lapack_int ldz, lapack_int * m, double * pl,
double * pr, double * dif, double * work, lapack_int lwork, lapack_int *
iwork, lapack_int liwork)
Definition at line 36 of file lapacke_dtgsen_work.c.
LAPACKE_dtgsja— the generalized SVD situation ✨jobu,jobv,jobqdecide how much ofu,vandqyou actually want back,kandlare the sub-block bounds, andtola/tolbare your tolerances. Outputsalphaandbeta(the generalized singular values live there) plusncycle, the count of cycles it took. It ate and left no crumbs.
lapack_int LAPACKE_dtgsja (int matrix_layout, char jobu, char jobv, char
jobq, lapack_int m, lapack_int p, lapack_int n, lapack_int k, lapack_int
l, double * a, lapack_int lda, double * b, lapack_int ldb, double tola,
double tolb, double * alpha, double * beta, double * u, lapack_int ldu,
double * v, lapack_int ldv, double * q, lapack_int ldq, lapack_int *
ncycle)
Definition at line 36 of file lapacke_dtgsja.c.
LAPACKE_dtgsja_work— identical cast of characters toLAPACKE_dtgsja, plus adouble * workslot at the end 🎀 note it'sworkwith nolworkhere, so the sizing situation is what it is.
lapack_int LAPACKE_dtgsja_work (int matrix_layout, char jobu, char jobv,
char jobq, lapack_int m, lapack_int p, lapack_int n, lapack_int k,
lapack_int l, double * a, lapack_int lda, double * b, lapack_int ldb,
double tola, double tolb, double * alpha, double * beta, double * u,
lapack_int ldu, double * v, lapack_int ldv, double * q, lapack_int ldq,
double * work, lapack_int * ncycle)
Definition at line 36 of file lapacke_dtgsja_work.c.
LAPACKE_dtgsna— condition numbers for eigenvalues and eigenvectors of a matrix pair, iykyk 🦋jobpicks what you're estimating,howmnysays whetherselectmatters,vlandvrare the left/right eigenvector matrices, andmmis how many you're allowed to ask about — actual count lands inm. Answers go intosanddif.
lapack_int LAPACKE_dtgsna (int matrix_layout, char job, char howmny, const
lapack_logical * select, lapack_int n, const double * a, lapack_int lda,
const double * b, lapack_int ldb, const double * vl, lapack_int ldvl,
const double * vr, lapack_int ldvr, double * s, double * dif, lapack_int
mm, lapack_int * m)
Definition at line 36 of file lapacke_dtgsna.c.
LAPACKE_dtgsna_work— the_workversion, obviously 💅 samejob/howmny/selectsetup, and now you're also handing overwork+lworkandiwork. Two extras, both yours to size.
lapack_int LAPACKE_dtgsna_work (int matrix_layout, char job, char howmny,
const lapack_logical * select, lapack_int n, const double * a,
lapack_int lda, const double * b, lapack_int ldb, const double * vl,
lapack_int ldvl, const double * vr, lapack_int ldvr, double * s, double
* dif, lapack_int mm, lapack_int * m, double * work, lapack_int lwork,
lapack_int * iwork)
Definition at line 36 of file lapacke_dtgsna_work.c.
LAPACKE_dtgsyl— solves the generalized Sylvester equation, no cap 🔥transpicks the transpose flavour,ijobpicks the job,mandnare the block dims, and it works acrossa,b,c,d,e,fwith theirld*leading dimensions. Comes back withscaleanddif— like, it even tells you the scaling factor it had to apply. Considerate king behaviour.
lapack_int LAPACKE_dtgsyl (int matrix_layout, char trans, lapack_int ijob,
lapack_int m, lapack_int n, const double * a, lapack_int lda, const
double * b, lapack_int ldb, double * c, lapack_int ldc, const double *
d, lapack_int ldd, const double * e, lapack_int lde, double * f,
lapack_int ldf, double * scale, double * dif)
Definition at line 36 of file lapacke_dtgsyl.c.
LAPACKE_dtgsyl_work— same equation, same drama, but withwork/lworkandiworkbolted on the end so you control the scratch 🧚
lapack_int LAPACKE_dtgsyl_work (int matrix_layout, char trans, lapack_int
ijob, lapack_int m, lapack_int n, const double * a, lapack_int lda,
const double * b, lapack_int ldb, double * c, lapack_int ldc, const
double * d, lapack_int ldd, const double * e, lapack_int lde, double *
f, lapack_int ldf, double * scale, double * dif, double * work,
lapack_int lwork, lapack_int * iwork)
Definition at line 36 of file lapacke_dtgsyl_work.c.
LAPACKE_dtpcon— estimate the reciprocal condition number of a triangular matrix in packed storage 🎀norm,uploanddiagare your classic trio,apis the packed matrix, and the answer drops intorcond. Short and iconic.
lapack_int LAPACKE_dtpcon (int matrix_layout, char norm, char uplo, char
diag, lapack_int n, const double * ap, double * rcond)
Definition at line 36 of file lapacke_dtpcon.c.
LAPACKE_dtpcon_work— same packed condition-number estimating, except nowworkandiworkare on you too 💀 the parameter list is doing the absolute most but she's worth it.
lapack_int LAPACKE_dtpcon_work (int matrix_layout, char norm, char uplo,
char diag, lapack_int n, const double * ap, double * rcond, double *
work, lapack_int * iwork)
Definition at line 36 of file lapacke_dtpcon_work.c.
LAPACKE_dtpmqrt— applies a real orthogonal matrix defined as the product of a triangular-pentagonal block reflector 😭 okay the name is terrifying but she's just doing the multiply thing.sideandtransset the direction/transpose,m,n,k,l,nbshape it all,vandtare the reflectors,aandbare the ones getting hit.
lapack_int LAPACKE_dtpmqrt (int matrix_layout, char side, char trans,
lapack_int m, lapack_int n, lapack_int k, lapack_int l, lapack_int nb,
const double * v, lapack_int ldv, const double * t, lapack_int ldt,
double * a, lapack_int lda, double * b, lapack_int ldb)
Definition at line 36 of file lapacke_dtpmqrt.c.
LAPACKE_dtpmqrt_work— the same triangular-pentagonal reflector application, but you showed up with your owndouble * work🌸 one extra arg, all the same facts.
lapack_int LAPACKE_dtpmqrt_work (int matrix_layout, char side, char trans,
lapack_int m, lapack_int n, lapack_int k, lapack_int l, lapack_int nb,
const double * v, lapack_int ldv, const double * t, lapack_int ldt,
double * a, lapack_int lda, double * b, lapack_int ldb, double * work)
Definition at line 36 of file lapacke_dtpmqrt_work.c.
LAPACKE_dtpqrt— computes a QR factorization of a triangular-pentagonal matrix pair 🦋 blocks ofm,n,l,nb, matrixa, matrixb, output reflector stuff intot. This is the blocked-flavoured one.
lapack_int LAPACKE_dtpqrt (int matrix_layout, lapack_int m, lapack_int n,
lapack_int l, lapack_int nb, double * a, lapack_int lda, double * b,
lapack_int ldb, double * t, lapack_int ldt)
Definition at line 36 of file lapacke_dtpqrt.c.
LAPACKE_dtpqrt2— same triangular-pentagonal QR deal but the unblocked one — notice there's nonbhere bestie, justm,n,land the matrices 💅
lapack_int LAPACKE_dtpqrt2 (int matrix_layout, lapack_int m, lapack_int n,
lapack_int l, double * a, lapack_int lda, double * b, lapack_int ldb,
double * t, lapack_int ldt)
Definition at line 36 of file lapacke_dtpqrt2.c.
LAPACKE_dtpqrt2_work— literally the exact same parameter list asLAPACKE_dtpqrt2😭 samem,n,l,a,lda,b,ldb,t,ldt— she just lives in a differently-named file. No extra args. Not me pointing it out. 🙈
lapack_int LAPACKE_dtpqrt2_work (int matrix_layout, lapack_int m, lapack_int
n, lapack_int l, double * a, lapack_int lda, double * b, lapack_int ldb,
double * t, lapack_int ldt)
Definition at line 36 of file lapacke_dtpqrt2_work.c.
LAPACKE_dtpqrt_work— the blocked version again, withnbback in the lineup, plus adouble * workat the end for the scratch 🫶
lapack_int LAPACKE_dtpqrt_work (int matrix_layout, lapack_int m, lapack_int
n, lapack_int l, lapack_int nb, double * a, lapack_int lda, double * b,
lapack_int ldb, double * t, lapack_int ldt, double * work)
Definition at line 36 of file lapacke_dtpqrt_work.c.
LAPACKE_dtprfb— applies a real block reflector from the left or right 🔥side,trans,directandstorevare four whole chars of configuration, thenm,n,k,lsized things,vandtare the reflector data, anda/bget updated. Four char args is giving "I have layers" honestly.
lapack_int LAPACKE_dtprfb (int matrix_layout, char side, char trans, char
direct, char storev, lapack_int m, lapack_int n, lapack_int k,
lapack_int l, const double * v, lapack_int ldv, const double * t,
lapack_int ldt, double * a, lapack_int lda, double * b, lapack_int ldb)
Definition at line 36 of file lapacke_dtprfb.c.
LAPACKE_dtprfb_work— same block reflector application, and the workspace arg isdouble * work, lapack_int ldwork👀 yes bestie it'sldworkhere, notlwork. Do not get got by the name.
lapack_int LAPACKE_dtprfb_work (int matrix_layout, char side, char trans,
char direct, char storev, lapack_int m, lapack_int n, lapack_int k,
lapack_int l, const double * v, lapack_int ldv, const double * t,
lapack_int ldt, double * a, lapack_int lda, double * b, lapack_int ldb,
double * work, lapack_int ldwork)
Definition at line 36 of file lapacke_dtprfb_work.c.
LAPACKE_dtprfs— error bounds for a triangular solve in packed storage ✨uplo,trans,diagset the problem,nandnrhssize it,apis the packed factor,bis the right-hand side,xis the computed solution, andferr/berrcome back as your forward and backward error bounds. Chef's kiss.
lapack_int LAPACKE_dtprfs (int matrix_layout, char uplo, char trans, char
diag, lapack_int n, lapack_int nrhs, const double * ap, const double *
b, lapack_int ldb, const double * x, lapack_int ldx, double * ferr,
double * berr)
Definition at line 36 of file lapacke_dtprfs.c.
LAPACKE_dtprfs_work— identical packed-solve error-bound situation, plusworkandiworkfor the internals 🎀 four extra tokens of pure administrative burden.
lapack_int LAPACKE_dtprfs_work (int matrix_layout, char uplo, char trans,
char diag, lapack_int n, lapack_int nrhs, const double * ap, const
double * b, lapack_int ldb, const double * x, lapack_int ldx, double *
ferr, double * berr, double * work, lapack_int * iwork)
Definition at line 36 of file lapacke_dtprfs_work.c.
LAPACKE_dtptri— inverse of a triangular matrix, packed storage, that's it that's the function 💜uploanddiagsay which triangle and whether the diagonal is unit,nis the order,apis the packed matrix in and the inverse out. Six args. Iconic minimalism.
lapack_int LAPACKE_dtptri (int matrix_layout, char uplo, char diag,
lapack_int n, double * ap)
Definition at line 36 of file lapacke_dtptri.c.
LAPACKE_dtptri_work— you already know the drill bestie: byte-for-byte the same parameters asLAPACKE_dtptri, just living in the_workfile. No extra workspace, no notes. 💅
lapack_int LAPACKE_dtptri_work (int matrix_layout, char uplo, char diag,
lapack_int n, double * ap)
Definition at line 36 of file lapacke_dtptri_work.c.
LAPACKE_dtptrs— solves a system with a triangular packed matrix, multiple right-hand sides welcome 🌈uplo,trans,diag,n,nrhs, packedap, andbwithldbis overwritten with the solution. Simple. Effective. Slays.
lapack_int LAPACKE_dtptrs (int matrix_layout, char uplo, char trans, char
diag, lapack_int n, lapack_int nrhs, const double * ap, double * b,
lapack_int ldb)
Definition at line 36 of file lapacke_dtptrs.c.
LAPACKE_dtptrs_work— same triangular packed solve, same parameters exactly, different file 😌lapacke_dtptrs_work.cis the whole difference. We love a low-effort queen.
lapack_int LAPACKE_dtptrs_work (int matrix_layout, char uplo, char trans,
char diag, lapack_int n, lapack_int nrhs, const double * ap, double * b,
lapack_int ldb)
Definition at line 36 of file lapacke_dtptrs_work.c.
LAPACKE_dtpttf— converts from packed triangular format (ap) to RFP / rectangular full packed format (arf) ⭐️transrsays whether the RFP output is normal or transposed,uplopicks the triangle,nis the order. A format glow-up, honestly.
lapack_int LAPACKE_dtpttf (int matrix_layout, char transr, char uplo,
lapack_int n, const double * ap, double * arf)
Definition at line 36 of file lapacke_dtpttf.c.
LAPACKE_dtpttf_work— the exact same packed-to-RFP conversion with the exact same arguments 🫶 yes, both of them, identical. Don't ask.
lapack_int LAPACKE_dtpttf_work (int matrix_layout, char transr, char uplo,
lapack_int n, const double * ap, double * arf)
Definition at line 36 of file lapacke_dtpttf_work.c.
LAPACKE_dtpttr— the reverse glow-up: packed triangular (ap) → full triangular storage ina, withldaas the leading dim 🌸uploandnas always. Unpacking arc.
lapack_int LAPACKE_dtpttr (int matrix_layout, char uplo, lapack_int n, const
double * ap, double * a, lapack_int lda)
Definition at line 36 of file lapacke_dtpttr.c.
LAPACKE_dtpttr_work— same unpacking arc, same six args, different filename 🎀 consistency is a love language.
lapack_int LAPACKE_dtpttr_work (int matrix_layout, char uplo, lapack_int n,
const double * ap, double * a, lapack_int lda)
Definition at line 36 of file lapacke_dtpttr_work.c.
LAPACKE_dtrcon— reciprocal condition number estimate for a full-storage triangular matrix 👑norm,uplo,diag,n, the matrixawithlda, answer intorcond. Classic trio, classic output.
lapack_int LAPACKE_dtrcon (int matrix_layout, char norm, char uplo, char
diag, lapack_int n, const double * a, lapack_int lda, double * rcond)
Definition at line 36 of file lapacke_dtrcon.c.
LAPACKE_dtrcon_work— same full-storage condition estimate withworkandiworkhanded over by you 💜
lapack_int LAPACKE_dtrcon_work (int matrix_layout, char norm, char uplo,
char diag, lapack_int n, const double * a, lapack_int lda, double *
rcond, double * work, lapack_int * iwork)
Definition at line 36 of file lapacke_dtrcon_work.c.
LAPACKE_dtrevc— computes eigenvectors of a real upper quasi-triangular matrix 😭 say that five times fast.sidepicks left / right / both,howmnydecides whetherselectis even consulted,tis the quasi-triangular input,vlandvrreceive the eigenvectors,mmis your capacity andmreports the real count.
lapack_int LAPACKE_dtrevc (int matrix_layout, char side, char howmny,
lapack_logical * select, lapack_int n, const double * t, lapack_int ldt,
double * vl, lapack_int ldvl, double * vr, lapack_int ldvr, lapack_int
mm, lapack_int * m)
Definition at line 36 of file lapacke_dtrevc.c.
LAPACKE_dtrevc_work— same eigenvector extraction, plus a singledouble * workat the end. That's it, that's the diff 🦋
lapack_int LAPACKE_dtrevc_work (int matrix_layout, char side, char howmny,
lapack_logical * select, lapack_int n, const double * t, lapack_int ldt,
double * vl, lapack_int ldvl, double * vr, lapack_int ldvr, lapack_int
mm, lapack_int * m, double * work)
Definition at line 36 of file lapacke_dtrevc_work.c.
LAPACKE_dtrexc— reorders the Schur factorization of a real matrix 🔥compqsays whetherqgets updated,tis the quasi-triangular Schur factor,qis the orthogonal matrix, andifst/ilstare read-write: you say where the block is, it tells you where the block ended up. Sneaky little in-out pair.
lapack_int LAPACKE_dtrexc (int matrix_layout, char compq, lapack_int n,
double * t, lapack_int ldt, double * q, lapack_int ldq, lapack_int *
ifst, lapack_int * ilst)
Definition at line 36 of file lapacke_dtrexc.c.
LAPACKE_dtrexc_work— the Schur reorder again, plusdouble * workon the end 🌟 note: nolwork. Just vibes.
lapack_int LAPACKE_dtrexc_work (int matrix_layout, char compq, lapack_int n,
double * t, lapack_int ldt, double * q, lapack_int ldq, lapack_int *
ifst, lapack_int * ilst, double * work)
Definition at line 36 of file lapacke_dtrexc_work.c.
LAPACKE_dtrrfs— error bounds for a triangular solve, full storage edition ✨uplo,trans,diag,n,nrhs, matrixawithlda, right-hand sidebwithldb, computed solutionxwithldx, andferr/berrout. Nine-ish things and every one of them matters.
lapack_int LAPACKE_dtrrfs (int matrix_layout, char uplo, char trans, char
diag, lapack_int n, lapack_int nrhs, const double * a, lapack_int lda,
const double * b, lapack_int ldb, const double * x, lapack_int ldx,
double * ferr, double * berr)
Definition at line 36 of file lapacke_dtrrfs.c.
LAPACKE_dtrrfs_work— same bounds, sameferr/berrpayoff, plusworkandiworkbecause of course 🎀
lapack_int LAPACKE_dtrrfs_work (int matrix_layout, char uplo, char trans,
char diag, lapack_int n, lapack_int nrhs, const double * a, lapack_int
lda, const double * b, lapack_int ldb, const double * x, lapack_int ldx,
double * ferr, double * berr, double * work, lapack_int * iwork)
Definition at line 36 of file lapacke_dtrrfs_work.c.
LAPACKE_dtrsen— reorders a real Schur factorization and spits out condition numbers for the reordered cluster 👑jobandcompqcontrol what's computed and whetherqis touched,selectpicks the eigenvalues,tis the Schur factor,qthe orthogonal guy,wrandwiare the real/imaginary parts of the eigenvalues,mreports the cluster size, ands/sepcome back as the condition estimates. A whole main-character arc in one call.
lapack_int LAPACKE_dtrsen (int matrix_layout, char job, char compq, const
lapack_logical * select, lapack_int n, double * t, lapack_int ldt,
double * q, lapack_int ldq, double * wr, double * wi, lapack_int * m,
double * s, double * sep)
Definition at line 36 of file lapacke_dtrsen.c.
LAPACKE_dtrsen_work 💖 — exact signature, no cap:
lapack_int LAPACKE_dtrsen_work (int matrix_layout, char job, char compq,
const lapack_logical * select, lapack_int n, double * t, lapack_int ldt,
double * q, lapack_int ldq, double * wr, double * wi, lapack_int * m,
double * s, double * sep, double * work, lapack_int lwork, lapack_int *
iwork, lapack_int liwork)
Definition at line 36 of file lapacke_dtrsen_work.c.
LAPACKE_dtrsna 🌸 — the non-_work one, serving all its parameters:
lapack_int LAPACKE_dtrsna (int matrix_layout, char job, char howmny, const
lapack_logical * select, lapack_int n, const double * t, lapack_int ldt,
const double * vl, lapack_int ldvl, const double * vr, lapack_int ldvr,
double * s, double * sep, lapack_int mm, lapack_int * m)
Definition at line 36 of file lapacke_dtrsna.c.
LAPACKE_dtrsna_work 🎀 — yes bestie, ldwork is right there, exactly like that:
lapack_int LAPACKE_dtrsna_work (int matrix_layout, char job, char howmny,
const lapack_logical * select, lapack_int n, const double * t,
lapack_int ldt, const double * vl, lapack_int ldvl, const double * vr,
lapack_int ldvr, double * s, double * sep, lapack_int mm, lapack_int *
m, double * work, lapack_int ldwork, lapack_int * iwork)
Definition at line 36 of file lapacke_dtrsna_work.c.
LAPACKE_dtrsyl 🦋 — exact signature:
lapack_int LAPACKE_dtrsyl (int matrix_layout, char trana, char tranb,
lapack_int isgn, lapack_int m, lapack_int n, const double * a,
lapack_int lda, const double * b, lapack_int ldb, double * c, lapack_int
ldc, double * scale)
Definition at line 36 of file lapacke_dtrsyl.c.
LAPACKE_dtrsyl_work 💅 — _work edition, same parameter crew:
lapack_int LAPACKE_dtrsyl_work (int matrix_layout, char trana, char tranb,
lapack_int isgn, lapack_int m, lapack_int n, const double * a,
lapack_int lda, const double * b, lapack_int ldb, double * c, lapack_int
ldc, double * scale)
Definition at line 36 of file lapacke_dtrsyl_work.c.
LAPACKE_dtrtri ✨ — short and iconic:
lapack_int LAPACKE_dtrtri (int matrix_layout, char uplo, char diag,
lapack_int n, double * a, lapack_int lda)
Definition at line 36 of file lapacke_dtrtri.c.
LAPACKE_dtrtri_work 🫶 — same signature, _work name:
lapack_int LAPACKE_dtrtri_work (int matrix_layout, char uplo, char diag,
lapack_int n, double * a, lapack_int lda)
Definition at line 36 of file lapacke_dtrtri_work.c.
LAPACKE_dtrtrs 😭 — exact signature:
lapack_int LAPACKE_dtrtrs (int matrix_layout, char uplo, char trans, char
diag, lapack_int n, lapack_int nrhs, const double * a, lapack_int lda,
double * b, lapack_int ldb)
Definition at line 36 of file lapacke_dtrtrs.c.
LAPACKE_dtrtrs_work 🔥 — exact signature:
lapack_int LAPACKE_dtrtrs_work (int matrix_layout, char uplo, char trans,
char diag, lapack_int n, lapack_int nrhs, const double * a, lapack_int
lda, double * b, lapack_int ldb)
Definition at line 36 of file lapacke_dtrtrs_work.c.
LAPACKE_dtrttf 👑 — exact signature:
lapack_int LAPACKE_dtrttf (int matrix_layout, char transr, char uplo,
lapack_int n, const double * a, lapack_int lda, double * arf)
Definition at line 36 of file lapacke_dtrttf.c.
LAPACKE_dtrttf_work 🌈 — exact signature:
lapack_int LAPACKE_dtrttf_work (int matrix_layout, char transr, char uplo,
lapack_int n, const double * a, lapack_int lda, double * arf)
Definition at line 36 of file lapacke_dtrttf_work.c.
LAPACKE_dtrttp ⭐ — exact signature:
lapack_int LAPACKE_dtrttp (int matrix_layout, char uplo, lapack_int n, const
double * a, lapack_int lda, double * ap)
Definition at line 36 of file lapacke_dtrttp.c.
LAPACKE_dtrttp_work 💀 — exact signature:
lapack_int LAPACKE_dtrttp_work (int matrix_layout, char uplo, lapack_int n,
const double * a, lapack_int lda, double * ap)
Definition at line 36 of file lapacke_dtrttp_work.c.
LAPACKE_dtzrzf 🙈 — exact signature:
lapack_int LAPACKE_dtzrzf (int matrix_layout, lapack_int m, lapack_int n,
double * a, lapack_int lda, double * tau)
Definition at line 36 of file lapacke_dtzrzf.c.
LAPACKE_dtzrzf_work 🍓 — exact signature:
lapack_int LAPACKE_dtzrzf_work (int matrix_layout, lapack_int m, lapack_int
n, double * a, lapack_int lda, double * tau, double * work, lapack_int
lwork)
Definition at line 36 of file lapacke_dtzrzf_work.c.
LAPACKE_get_nancheck 🧚 — tiny no-arg one, living at line 43:
int LAPACKE_get_nancheck ()
Definition at line 43 of file lapacke_nancheck.c.
LAPACKE_ilaver 💜 — exact signature:
void LAPACKE_ilaver (lapack_int * vers_major, lapack_int * vers_minor,
lapack_int * vers_patch)
Definition at line 36 of file lapacke_ilaver.c.
LAPACKE_sbbcsd 💖 — okay this parameter list is a whole main-character moment:
lapack_int LAPACKE_sbbcsd (int matrix_layout, char jobu1, char jobu2, char
jobv1t, char jobv2t, char trans, lapack_int m, lapack_int p, lapack_int
q, float * theta, float * phi, float * u1, lapack_int ldu1, float * u2,
lapack_int ldu2, float * v1t, lapack_int ldv1t, float * v2t, lapack_int
ldv2t, float * b11d, float * b11e, float * b12d, float * b12e, float *
b21d, float * b21e, float * b22d, float * b22e)
Definition at line 36 of file lapacke_sbbcsd.c.
LAPACKE_sbbcsd_work 🌸 — same energy, plus work and lwork:
lapack_int LAPACKE_sbbcsd_work (int matrix_layout, char jobu1, char jobu2,
char jobv1t, char jobv2t, char trans, lapack_int m, lapack_int p,
lapack_int q, float * theta, float * phi, float * u1, lapack_int ldu1,
float * u2, lapack_int ldu2, float * v1t, lapack_int ldv1t, float * v2t,
lapack_int ldv2t, float * b11d, float * b11e, float * b12d, float *
b12e, float * b21d, float * b21e, float * b22d, float * b22e, float *
work, lapack_int lwork)
Definition at line 36 of file lapacke_sbbcsd_work.c.
LAPACKE_sbdsdc 🎀 — exact signature:
lapack_int LAPACKE_sbdsdc (int matrix_layout, char uplo, char compq,
lapack_int n, float * d, float * e, float * u, lapack_int ldu, float *
vt, lapack_int ldvt, float * q, lapack_int * iq)
Definition at line 36 of file lapacke_sbdsdc.c.
LAPACKE_sbdsdc_work 🦋 — exact signature:
lapack_int LAPACKE_sbdsdc_work (int matrix_layout, char uplo, char compq,
lapack_int n, float * d, float * e, float * u, lapack_int ldu, float *
vt, lapack_int ldvt, float * q, lapack_int * iq, float * work,
lapack_int * iwork)
Definition at line 36 of file lapacke_sbdsdc_work.c.
LAPACKE_sbdsqr 💅 — exact signature:
lapack_int LAPACKE_sbdsqr (int matrix_layout, char uplo, lapack_int n,
lapack_int ncvt, lapack_int nru, lapack_int ncc, float * d, float * e,
float * vt, lapack_int ldvt, float * u, lapack_int ldu, float * c,
lapack_int ldc)
Definition at line 36 of file lapacke_sbdsqr.c.
LAPACKE_sbdsqr_work ✨ — exact signature:
lapack_int LAPACKE_sbdsqr_work (int matrix_layout, char uplo, lapack_int n,
lapack_int ncvt, lapack_int nru, lapack_int ncc, float * d, float * e,
float * vt, lapack_int ldvt, float * u, lapack_int ldu, float * c,
lapack_int ldc, float * work)
Definition at line 36 of file lapacke_sbdsqr_work.c.
LAPACKE_sbdsvdx 🫶 — exact signature:
lapack_int LAPACKE_sbdsvdx (int matrix_layout, char uplo, char jobz, char
range, lapack_int n, float * d, float * e, float vl, float vu,
lapack_int il, lapack_int iu, lapack_int * ns, float * s, float * z,
lapack_int ldz, lapack_int * superb)
Definition at line 36 of file lapacke_sbdsvdx.c.
LAPACKE_sbdsvdx_work 😭 — exact signature, with work and iwork:
lapack_int LAPACKE_sbdsvdx_work (int matrix_layout, char uplo, char jobz,
char range, lapack_int n, float * d, float * e, float vl, float vu,
lapack_int il, lapack_int iu, lapack_int * ns, float * s, float * z,
lapack_int ldz, float * work, lapack_int * iwork)
Definition at line 36 of file lapacke_sbdsvdx_work.c.
LAPACKE_sdisna 🔥 — exact signature:
lapack_int LAPACKE_sdisna (char job, lapack_int m, lapack_int n, const float
* d, float * sep)
Definition at line 36 of file lapacke_sdisna.c.
LAPACKE_sdisna_work 👑 — exact signature:
lapack_int LAPACKE_sdisna_work (char job, lapack_int m, lapack_int n, const
float * d, float * sep)
Definition at line 36 of file lapacke_sdisna_work.c.
LAPACKE_set_nancheck 🌈 — takes an int flag, line 38 said so:
void LAPACKE_set_nancheck (int flag)
Definition at line 38 of file lapacke_nancheck.c.
LAPACKE_sgbbrd ⭐ — exact signature:
lapack_int LAPACKE_sgbbrd (int matrix_layout, char vect, lapack_int m,
lapack_int n, lapack_int ncc, lapack_int kl, lapack_int ku, float * ab,
lapack_int ldab, float * d, float * e, float * q, lapack_int ldq, float
* pt, lapack_int ldpt, float * c, lapack_int ldc)
Definition at line 36 of file lapacke_sgbbrd.c.
LAPACKE_sgbbrd_work 💀 — exact signature, plus work:
lapack_int LAPACKE_sgbbrd_work (int matrix_layout, char vect, lapack_int m,
lapack_int n, lapack_int ncc, lapack_int kl, lapack_int ku, float * ab,
lapack_int ldab, float * d, float * e, float * q, lapack_int ldq, float
* pt, lapack_int ldpt, float * c, lapack_int ldc, float * work)
Definition at line 36 of file lapacke_sgbbrd_work.c.
LAPACKE_sgbcon 🙈 — exact signature:
lapack_int LAPACKE_sgbcon (int matrix_layout, char norm, lapack_int n,
lapack_int kl, lapack_int ku, const float * ab, lapack_int ldab, const
lapack_int * ipiv, float anorm, float * rcond)
Definition at line 36 of file lapacke_sgbcon.c.
LAPACKE_sgbcon_work 🍓 — exact signature:
lapack_int LAPACKE_sgbcon_work (int matrix_layout, char norm, lapack_int n,
lapack_int kl, lapack_int ku, const float * ab, lapack_int ldab, const
lapack_int * ipiv, float anorm, float * rcond, float * work, lapack_int
* iwork)
Definition at line 36 of file lapacke_sgbcon_work.c.
LAPACKE_sgbequ 🧚 — exact signature:
lapack_int LAPACKE_sgbequ (int matrix_layout, lapack_int m, lapack_int n,
lapack_int kl, lapack_int ku, const float * ab, lapack_int ldab, float *
r, float * c, float * rowcnd, float * colcnd, float * amax)
Definition at line 36 of file lapacke_sgbequ.c.
LAPACKE_sgbequ_work 💜 — exact signature:
lapack_int LAPACKE_sgbequ_work (int matrix_layout, lapack_int m, lapack_int
n, lapack_int kl, lapack_int ku, const float * ab, lapack_int ldab,
float * r, float * c, float * rowcnd, float * colcnd, float * amax)
Definition at line 36 of file lapacke_sgbequ_work.c.
LAPACKE_sgbequb 💖 — exact signature:
lapack_int LAPACKE_sgbequb (int matrix_layout, lapack_int m, lapack_int n,
lapack_int kl, lapack_int ku, const float * ab, lapack_int ldab, float *
r, float * c, float * rowcnd, float * colcnd, float * amax)
Definition at line 36 of file lapacke_sgbequb.c.
LAPACKE_sgbequb_work 🌸 — exact signature:
lapack_int LAPACKE_sgbequb_work (int matrix_layout, lapack_int m, lapack_int
n, lapack_int kl, lapack_int ku, const float * ab, lapack_int ldab,
float * r, float * c, float * rowcnd, float * colcnd, float * amax)
Definition at line 36 of file lapacke_sgbequb_work.c.
LAPACKE_sgbrfs 🎀 — exact signature:
lapack_int LAPACKE_sgbrfs (int matrix_layout, char trans, lapack_int n,
lapack_int kl, lapack_int ku, lapack_int nrhs, const float * ab,
lapack_int ldab, const float * afb, lapack_int ldafb, const lapack_int *
ipiv, const float * b, lapack_int ldb, float * x, lapack_int ldx, float
* ferr, float * berr)
Definition at line 36 of file lapacke_sgbrfs.c.
LAPACKE_sgbrfs_work 🦋 — exact signature:
lapack_int LAPACKE_sgbrfs_work (int matrix_layout, char trans, lapack_int n,
lapack_int kl, lapack_int ku, lapack_int nrhs, const float * ab,
lapack_int ldab, const float * afb, lapack_int ldafb, const lapack_int *
ipiv, const float * b, lapack_int ldb, float * x, lapack_int ldx, float
* ferr, float * berr, float * work, lapack_int * iwork)
Definition at line 36 of file lapacke_sgbrfs_work.c.
LAPACKE_sgbrfsx 💅 — okay this one is long, but every parameter is staying:
lapack_int LAPACKE_sgbrfsx (int matrix_layout, char trans, char equed,
lapack_int n, lapack_int kl, lapack_int ku, lapack_int nrhs, const float
* ab, lapack_int ldab, const float * afb, lapack_int ldafb, const
lapack_int * ipiv, const float * r, const float * c, const float * b,
lapack_int ldb, float * x, lapack_int ldx, float * rcond, float * berr,
lapack_int n_err_bnds, float * err_bnds_norm, float * err_bnds_comp,
lapack_int nparams, float * params)
Definition at line 36 of file lapacke_sgbrfsx.c.
LAPACKE_sgbrfsx_work ✨ — same long lineup, plus work and iwork:
lapack_int LAPACKE_sgbrfsx_work (int matrix_layout, char trans, char equed,
lapack_int n, lapack_int kl, lapack_int ku, lapack_int nrhs, const float
* ab, lapack_int ldab, const float * afb, lapack_int ldafb, const
lapack_int * ipiv, const float * r, const float * c, const float * b,
lapack_int ldb, float * x, lapack_int ldx, float * rcond, float * berr,
lapack_int n_err_bnds, float * err_bnds_norm, float * err_bnds_comp,
lapack_int nparams, float * params, float * work, lapack_int * iwork)
Definition at line 36 of file lapacke_sgbrfsx_work.c.
LAPACKE_sgbsv 🩵
lapack_int LAPACKE_sgbsv (int matrix_layout, lapack_int n, lapack_int kl,
lapack_int ku, lapack_int nrhs, float * ab, lapack_int ldab, lapack_int
* ipiv, float * b, lapack_int ldb)
Definition at line 36 of file lapacke_sgbsv.c.
Ten args, bestie. matrix_layout leads the parade, n, kl, ku, nrhs right behind it, then the band-storage pointer ab with its ldab, the pivot array ipiv, and finally b with ldb. Float in, float out. 💖
LAPACKE_sgbsv_work— same signature, top to bottom:int matrix_layout, lapack_int n, lapack_int kl, lapack_int ku, lapack_int nrhs, float * ab, lapack_int ldab, lapack_int * ipiv, float * b, lapack_int ldb. Definition at line 36 of filelapacke_sgbsv_work.c. The_worktwin, same face card. 🫶
LAPACKE_sgbsvx ✨
lapack_int LAPACKE_sgbsvx (int matrix_layout, char fact, char trans,
lapack_int n, lapack_int kl, lapack_int ku, lapack_int nrhs, float * ab,
lapack_int ldab, float * afb, lapack_int ldafb, lapack_int * ipiv, char
* equed, float * r, float * c, float * b, lapack_int ldb, float * x,
lapack_int ldx, float * rcond, float * ferr, float * berr, float *
rpivot)
Definition at line 36 of file lapacke_sgbsvx.c.
okay this one is long long — twenty-three arguments, and the way she's serving fact, trans and equed as chars alongside all those float * outputs… character development fr fr. Note fact, trans, equed are char while ab, afb, r, c, b, x, rcond, ferr, berr, rpivot are all float *. Two matrices, two leading dims (ldab, ldafb), then ldb and ldx. Not a typo in sight. 💅
LAPACKE_sgbsvx_work— carries the exact same argument list asLAPACKE_sgbsvx, and then keeps going withfloat * work, lapack_int * iworktacked on the end. Definition at line 36 of filelapacke_sgbsvx_work.c. The extra workspace era. 🎀
LAPACKE_sgbsvxx 👑
lapack_int LAPACKE_sgbsvxx (int matrix_layout, char fact, char trans,
lapack_int n, lapack_int kl, lapack_int ku, lapack_int nrhs, float * ab,
lapack_int ldab, float * afb, lapack_int ldafb, lapack_int * ipiv, char
* equed, float * r, float * c, float * b, lapack_int ldb, float * x,
lapack_int ldx, float * rcond, float * rpvgrw, float * berr, lapack_int
n_err_bnds, float * err_bnds_norm, float * err_bnds_comp, lapack_int
nparams, float * params)
Definition at line 36 of file lapacke_sgbsvxx.c.
The double-x variant said "and I took that personally." Twenty-seven arguments — she picked up rpvgrw, n_err_bnds, err_bnds_norm, err_bnds_comp, nparams and params where sgbsvx had ferr. Main character energy, no cap. 🌈
LAPACKE_sgbsvxx_work— everythingLAPACKE_sgbsvxxhas, plusfloat * work, lapack_int * iworkat the tail. Definition at line 36 of filelapacke_sgbsvxx_work.c. Twenty-nine args and she's still standing. 💀
LAPACKE_sgbtrf 🦋
lapack_int LAPACKE_sgbtrf (int matrix_layout, lapack_int m, lapack_int n,
lapack_int kl, lapack_int ku, float * ab, lapack_int ldab, lapack_int *
ipiv)
Definition at line 36 of file lapacke_sgbtrf.c.
Heads up: this one takes m and n, not just n like the gbsv crowd. So the full squad is matrix_layout, m, n, kl, ku, ab, ldab, ipiv. That's the whole list, nothing hiding. ✨
LAPACKE_sgbtrf_work— identical:int matrix_layout, lapack_int m, lapack_int n, lapack_int kl, lapack_int ku, float * ab, lapack_int ldab, lapack_int * ipiv. Definition at line 36 of filelapacke_sgbtrf_work.c.
LAPACKE_sgbtrs 🌸
lapack_int LAPACKE_sgbtrs (int matrix_layout, char trans, lapack_int n,
lapack_int kl, lapack_int ku, lapack_int nrhs, const float * ab,
lapack_int ldab, const lapack_int * ipiv, float * b, lapack_int ldb)
Definition at line 36 of file lapacke_sgbtrs.c.
Lowkey the glow-up here is the const: ab is const float * and ipiv is const lapack_int * — those two are read-only, they're just here to be looked at. b stays a plain float * because she's the one getting written. Respect the const-correctness, iykyk. 💜
LAPACKE_sgbtrs_work— same as above,constand all:int matrix_layout, char trans, lapack_int n, lapack_int kl, lapack_int ku, lapack_int nrhs, const float * ab, lapack_int ldab, const lapack_int * ipiv, float * b, lapack_int ldb. Definition at line 36 of filelapacke_sgbtrs_work.c.
LAPACKE_sgebak 🎀
lapack_int LAPACKE_sgebak (int matrix_layout, char job, char side,
lapack_int n, lapack_int ilo, lapack_int ihi, const float * scale,
lapack_int m, float * v, lapack_int ldv)
Definition at line 36 of file lapacke_sgebak.c.
Two chars out front (job, side), the ilo/ihi pair doing their little balancing act, a const float * scale, then m, v and ldv. Note that m shows up after scale — order matters when you're calling, bestie, don't shuffle the deck. 🫶
LAPACKE_sgebak_work— identical argument list, character for character. Definition at line 36 of filelapacke_sgebak_work.c.
LAPACKE_sgebal 🧚
lapack_int LAPACKE_sgebal (int matrix_layout, char job, lapack_int n, float
* a, lapack_int lda, lapack_int * ilo, lapack_int * ihi, float * scale)
Definition at line 36 of file lapacke_sgebal.c.
ilo and ihi are lapack_int * here — pointers, so they're getting filled in. Same with scale. The matrix a comes with lda like always. Clean, tidy, iconic. ⭐
LAPACKE_sgebal_work— same:int matrix_layout, char job, lapack_int n, float * a, lapack_int lda, lapack_int * ilo, lapack_int * ihi, float * scale. Definition at line 36 of filelapacke_sgebal_work.c.
LAPACKE_sgebrd 🔥
lapack_int LAPACKE_sgebrd (int matrix_layout, lapack_int m, lapack_int n,
float * a, lapack_int lda, float * d, float * e, float * tauq, float *
taup)
Definition at line 36 of file lapacke_sgebrd.c.
m and n both present, then a/lda, and the quartet of outputs d, e, tauq, taup. Note the spelling — tauq and taup, q first, then p. Don't flip them, I'm begging. 😭
LAPACKE_sgebrd_work— the fullLAPACKE_sgebrdlist plusfloat * work, lapack_int lworkon the end. Definition at line 36 of filelapacke_sgebrd_work.c. Workspace era unlocked.
LAPACKE_sgecon 💅
lapack_int LAPACKE_sgecon (int matrix_layout, char norm, lapack_int n, const
float * a, lapack_int lda, float anorm, float * rcond)
Definition at line 36 of file lapacke_sgecon.c.
norm is a char, a is const float * (read-only queen), and anorm is a plain float passed by value — not a pointer! Only rcond gets the *. That contrast is the whole vibe check of this signature tbh. 🌸
LAPACKE_sgecon_work— same front half, thenfloat * work, lapack_int * iwork. Definition at line 36 of filelapacke_sgecon_work.c.
LAPACKE_sgeequ and LAPACKE_sgeequb 🍓
These two are literal twins and I'm obsessed.
lapack_int LAPACKE_sgeequ (int matrix_layout, lapack_int m, lapack_int n,
const float * a, lapack_int lda, float * r, float * c, float * rowcnd,
float * colcnd, float * amax)
Definition at line 36 of file lapacke_sgeequ.c.
LAPACKE_sgeequ_work— identical list:int matrix_layout, lapack_int m, lapack_int n, const float * a, lapack_int lda, float * r, float * c, float * rowcnd, float * colcnd, float * amax. Definition at line 36 of filelapacke_sgeequ_work.c.
lapack_int LAPACKE_sgeequb (int matrix_layout, lapack_int m, lapack_int n,
const float * a, lapack_int lda, float * r, float * c, float * rowcnd,
float * colcnd, float * amax)
Definition at line 36 of file lapacke_sgeequb.c.
LAPACKE_sgeequb_work— same again:int matrix_layout, lapack_int m, lapack_int n, const float * a, lapack_int lda, float * r, float * c, float * rowcnd, float * colcnd, float * amax. Definition at line 36 of filelapacke_sgeequb_work.c.
Four functions, one signature, zero notes. const float * a stays const in all of them. 🫶
LAPACKE_sgees 💜
lapack_int LAPACKE_sgees (int matrix_layout, char jobvs, char sort,
LAPACK_S_SELECT2 select, lapack_int n, float * a, lapack_int lda,
lapack_int * sdim, float * wr, float * wi, float * vs, lapack_int ldvs)
Definition at line 36 of file lapacke_sgees.c.
Ooh, a function pointer! LAPACK_S_SELECT2 select sits right there in position four, between char sort and lapack_int n. That's the typedef flex. Then sdim, wr, wi are all pointer outputs, and vs brings ldvs as its plus-one. ✨
LAPACKE_sgees_work— everything above plusfloat * work, lapack_int lwork, lapack_logical * bwork. Definition at line 36 of filelapacke_sgees_work.c. Note that'slapack_logical *, notlapack_int *— different type, bestie, don't get it twisted. 😭
LAPACKE_sgeesx 🌈
lapack_int LAPACKE_sgeesx (int matrix_layout, char jobvs, char sort,
LAPACK_S_SELECT2 select, char sense, lapack_int n, float * a, lapack_int
lda, lapack_int * sdim, float * wr, float * wi, float * vs, lapack_int
ldvs, float * rconde, float * rcondv)
Definition at line 36 of file lapacke_sgeesx.c.
LAPACKE_sgees but make it extra: char sense slides in right after select, and the tail gains rconde and rcondv. Everything else is untouched. The x suffix is doing exactly what it says on the tin. 🔥
LAPACKE_sgeesx_work— the whole thing plusfloat * work, lapack_int lwork, lapack_int * iwork, lapack_int liwork, lapack_logical * bwork. Definition at line 36 of filelapacke_sgeesx_work.c. Yes,iwork/liworkandbworkboth ride along. Both. 🎀
LAPACKE_sgeev 🦋
lapack_int LAPACKE_sgeev (int matrix_layout, char jobvl, char jobvr,
lapack_int n, float * a, lapack_int lda, float * wr, float * wi, float *
vl, lapack_int ldvl, float * vr, lapack_int ldvr)
Definition at line 36 of file lapacke_sgeev.c.
The classic!! Note the naming: jobvl and jobvr — no underscore, just l and r glued on. And the left/right eigenvectors come as the pairs vl/ldvl and vr/ldvr. Symmetry. We love to see it. 💖
LAPACKE_sgeev_work— the same twelve plusfloat * work, lapack_int lwork. Definition at line 36 of filelapacke_sgeev_work.c.
LAPACKE_sgeevx 👑
lapack_int LAPACKE_sgeevx (int matrix_layout, char balanc, char jobvl, char
jobvr, char sense, lapack_int n, float * a, lapack_int lda, float * wr,
float * wi, float * vl, lapack_int ldvl, float * vr, lapack_int ldvr,
lapack_int * ilo, lapack_int * ihi, float * scale, float * abnrm, float *
rconde, float * rcondv)
Definition at line 36 of file lapacke_sgeevx.c.
Four chars stacked up front — balanc, jobvl, jobvr, sense — and then a whole parade of outputs: wr, wi, vl, vr, ilo, ihi, scale, abnrm, rconde, rcondv. ilo and ihi are lapack_int *; everything else output-ish is float *. Twenty args of pure ✨.
LAPACKE_sgeevx_work— the exact same list plusfloat * work, lapack_int lwork, lapack_int * iworkat the end. Definition at line 36 of filelapacke_sgeevx_work.c. Note:iworkhere, but nobwork— don't assume, check the signature. 🙈
LAPACKE_sgehrd ⭐
lapack_int LAPACKE_sgehrd (int matrix_layout, lapack_int n, lapack_int ilo,
lapack_int ihi, float * a, lapack_int lda, float * tau)
Definition at line 36 of file lapacke_sgehrd.c.
Short and sweet — no m here, just n. ilo and ihi are by-value lapack_int this time (compare with sgebal, where they were pointers — love that journey for them). tau is a single float *. 💅
LAPACKE_sgehrd_work— same plusfloat * work, lapack_int lwork. Definition at line 36 of filelapacke_sgehrd_work.c.
LAPACKE_sgejsv 🧚
lapack_int LAPACKE_sgejsv (int matrix_layout, char joba, char jobu, char
jobv, char jobr, char jobt, char jobp, lapack_int m, lapack_int n, float
* a, lapack_int lda, float * sva, float * u, lapack_int ldu, float * v,
lapack_int ldv, float * stat, lapack_int * istat)
Definition at line 36 of file lapacke_sgejsv.c.
Six — SIX — char job-prefixed arguments: joba, jobu, jobv, jobr, jobt, jobp. Say that five times fast. Then m, n, a/lda, sva, u/ldu, v/ldv, and the pair stat (float *) + istat (lapack_int *). The s-prefix on sva, stat and istat? Chef's kiss naming consistency. 🍓
LAPACKE_sgejsv_work— everything above, exceptstatandistatget swapped forfloat * work, lapack_int lwork, lapack_int * iwork. Definition at line 36 of filelapacke_sgejsv_work.c. Read that tail carefully, bestie — it's different. 😭
LAPACKE_sgelq 🌸
lapack_int LAPACKE_sgelq (int matrix_layout, lapack_int m, lapack_int n,
float * a, lapack_int lda, float * t, lapack_int tsize)
Definition at line 36 of file lapacke_sgelq.c.
t comes with tsize — and tsize is a plain lapack_int, not a pointer. Little detail, big deal. ✨
LAPACKE_sgelq2 🎀
lapack_int LAPACKE_sgelq2 (int matrix_layout, lapack_int m, lapack_int n,
float * a, lapack_int lda, float * tau)
Definition at line 36 of file lapacke_sgelq2.c.
The 2 version swaps the t/tsize duo for a single float * tau. That's it, that's the difference. 💖
LAPACKE_sgelq2_work—int matrix_layout, lapack_int m, lapack_int n, float * a, lapack_int lda, float * tau, float * work. Definition at line 36 of filelapacke_sgelq2_work.c. Notice:workbut nolwork. Justfloat * work. Don't add args that aren't there. 🫶
LAPACKE_sgelq_work ⭐
lapack_int LAPACKE_sgelq_work (int matrix_layout, lapack_int m, lapack_int
n, float * a, lapack_int lda, float * t, lapack_int tsize, float * work,
lapack_int lwork)
Definition at line 36 of file lapacke_sgelq_work.c.
There's the lwork!! t + tsize keep their spots and work + lwork join at the end. So if you were confused about which _work gets a length and which doesn't — sgelq_work yes, sgelq2_work no. Screenshot this. 📸
LAPACKE_sgelqf 🌈
lapack_int LAPACKE_sgelqf (int matrix_layout, lapack_int m, lapack_int n,
float * a, lapack_int lda, float * tau)
Definition at line 36 of file lapacke_sgelqf.c.
Same shape as LAPACKE_sgelq2 — m, n, a, lda, tau. Those two are giving matching outfits. 👑
LAPACKE_sgelqf_work—int matrix_layout, lapack_int m, lapack_int n, float * a, lapack_int lda, float * tau, float * work, lapack_int lwork. Definition at line 36 of filelapacke_sgelqf_work.c. And this one does bringlwork. Full house. 🔥
✨ LAPACKE_sgels ✨
lapack_int LAPACKE_sgels (int matrix_layout, char trans, lapack_int m,
lapack_int n, lapack_int nrhs, float * a, lapack_int lda, float * b,
lapack_int ldb)
Definition at line 36 of file lapacke_sgels.c. 💅
✨ LAPACKE_sgels_work ✨
lapack_int LAPACKE_sgels_work (int matrix_layout, char trans, lapack_int m,
lapack_int n, lapack_int nrhs, float * a, lapack_int lda, float * b,
lapack_int ldb, float * work, lapack_int lwork)
Definition at line 36 of file lapacke_sgels_work.c. 🫶 the _work twin, same energy, extra work buffer.
✨ LAPACKE_sgelsd ✨
lapack_int LAPACKE_sgelsd (int matrix_layout, lapack_int m, lapack_int n,
lapack_int nrhs, float * a, lapack_int lda, float * b, lapack_int ldb,
float * s, float rcond, lapack_int * rank)
Definition at line 36 of file lapacke_sgelsd.c. 🎀 it's giving divide-and-conquer, honestly iconic.
✨ LAPACKE_sgelsd_work ✨
lapack_int LAPACKE_sgelsd_work (int matrix_layout, lapack_int m, lapack_int
n, lapack_int nrhs, float * a, lapack_int lda, float * b, lapack_int
ldb, float * s, float rcond, lapack_int * rank, float * work, lapack_int
lwork, lapack_int * iwork)
Definition at line 36 of file lapacke_sgelsd_work.c. ✨ note the extra iwork bestie, she brought a friend.
✨ LAPACKE_sgelss ✨
lapack_int LAPACKE_sgelss (int matrix_layout, lapack_int m, lapack_int n,
lapack_int nrhs, float * a, lapack_int lda, float * b, lapack_int ldb,
float * s, float rcond, lapack_int * rank)
Definition at line 36 of file lapacke_sgelss.c. 🌸 singular values, rcond, rank — the whole squad's here.
✨ LAPACKE_sgelss_work ✨
lapack_int LAPACKE_sgelss_work (int matrix_layout, lapack_int m, lapack_int
n, lapack_int nrhs, float * a, lapack_int lda, float * b, lapack_int
ldb, float * s, float rcond, lapack_int * rank, float * work, lapack_int
lwork)
Definition at line 36 of file lapacke_sgelss_work.c. 💜
✨ LAPACKE_sgelsy ✨
lapack_int LAPACKE_sgelsy (int matrix_layout, lapack_int m, lapack_int n,
lapack_int nrhs, float * a, lapack_int lda, float * b, lapack_int ldb,
lapack_int * jpvt, float rcond, lapack_int * rank)
Definition at line 36 of file lapacke_sgelsy.c. 🦋 that jpvt pointer says she does column pivoting, periodt.
✨ LAPACKE_sgelsy_work ✨
lapack_int LAPACKE_sgelsy_work (int matrix_layout, lapack_int m, lapack_int
n, lapack_int nrhs, float * a, lapack_int lda, float * b, lapack_int
ldb, lapack_int * jpvt, float rcond, lapack_int * rank, float * work,
lapack_int lwork)
Definition at line 36 of file lapacke_sgelsy_work.c. 🧚
✨ LAPACKE_sgemlq ✨
lapack_int LAPACKE_sgemlq (int matrix_layout, char side, char trans,
lapack_int m, lapack_int n, lapack_int k, const float * a, lapack_int
lda, const float * t, lapack_int tsize, float * c, lapack_int ldc)
Definition at line 36 of file lapacke_sgemlq.c. 🔥 side, trans, a tsize — she's fancy and she knows it. Also lowkey note the const — she does NOT mutate a or t, respectful queen.
✨ LAPACKE_sgemlq_work ✨
lapack_int LAPACKE_sgemlq_work (int matrix_layout, char side, char trans,
lapack_int m, lapack_int n, lapack_int k, const float * a, lapack_int
lda, const float * t, lapack_int tsize, float * c, lapack_int ldc, float
* work, lapack_int lwork)
Definition at line 36 of file lapacke_sgemlq_work.c. ⭐
✨ LAPACKE_sgemqr ✨
lapack_int LAPACKE_sgemqr (int matrix_layout, char side, char trans,
lapack_int m, lapack_int n, lapack_int k, const float * a, lapack_int
lda, const float * t, lapack_int tsize, float * c, lapack_int ldc)
Definition at line 36 of file lapacke_sgemqr.c. 🌈 same shape as her sister sgemlq, different vibe entirely.
✨ LAPACKE_sgemqr_work ✨
lapack_int LAPACKE_sgemqr_work (int matrix_layout, char side, char trans,
lapack_int m, lapack_int n, lapack_int k, const float * a, lapack_int
lda, const float * t, lapack_int tsize, float * c, lapack_int ldc, float
* work, lapack_int lwork)
Definition at line 36 of file lapacke_sgemqr_work.c. 🍓
✨ LAPACKE_sgemqrt ✨
lapack_int LAPACKE_sgemqrt (int matrix_layout, char side, char trans,
lapack_int m, lapack_int n, lapack_int k, lapack_int nb, const float *
v, lapack_int ldv, const float * t, lapack_int ldt, float * c,
lapack_int ldc)
Definition at line 36 of file lapacke_sgemqrt.c. 💫 block size nb walked in so the QR could be blocked, as she should.
✨ LAPACKE_sgemqrt_work ✨
lapack_int LAPACKE_sgemqrt_work (int matrix_layout, char side, char trans,
lapack_int m, lapack_int n, lapack_int k, lapack_int nb, const float *
v, lapack_int ldv, const float * t, lapack_int ldt, float * c,
lapack_int ldc, float * work)
Definition at line 36 of file lapacke_sgemqrt_work.c. 🎀 heads up bestie, this _work one takes float * work but no lwork — that's exactly how it's written here, don't come for me.
✨ LAPACKE_sgeqlf ✨
lapack_int LAPACKE_sgeqlf (int matrix_layout, lapack_int m, lapack_int n,
float * a, lapack_int lda, float * tau)
Definition at line 36 of file lapacke_sgeqlf.c. 🌸 QL factorization, the underrated L-on-the-left one, we stan.
✨ LAPACKE_sgeqlf_work ✨
lapack_int LAPACKE_sgeqlf_work (int matrix_layout, lapack_int m, lapack_int
n, float * a, lapack_int lda, float * tau, float * work, lapack_int
lwork)
Definition at line 36 of file lapacke_sgeqlf_work.c. 💜
✨ LAPACKE_sgeqp3 ✨
lapack_int LAPACKE_sgeqp3 (int matrix_layout, lapack_int m, lapack_int n,
float * a, lapack_int lda, lapack_int * jpvt, float * tau)
Definition at line 36 of file lapacke_sgeqp3.c. ✨ pivoting plus QR — the p3 is the moment, iykyk.
✨ LAPACKE_sgeqp3_work ✨
lapack_int LAPACKE_sgeqp3_work (int matrix_layout, lapack_int m, lapack_int
n, float * a, lapack_int lda, lapack_int * jpvt, float * tau, float *
work, lapack_int lwork)
Definition at line 36 of file lapacke_sgeqp3_work.c. 🦋
✨ LAPACKE_sgeqpf ✨
lapack_int LAPACKE_sgeqpf (int matrix_layout, lapack_int m, lapack_int n,
float * a, lapack_int lda, lapack_int * jpvt, float * tau)
Definition at line 36 of file lapacke_sgeqpf.c. 🎀 same fit as sgeqp3, different gen.
✨ LAPACKE_sgeqpf_work ✨
lapack_int LAPACKE_sgeqpf_work (int matrix_layout, lapack_int m, lapack_int
n, float * a, lapack_int lda, lapack_int * jpvt, float * tau, float *
work)
Definition at line 36 of file lapacke_sgeqpf_work.c. ⚠️ again — float * work with no lwork in the signature, exactly as written. Not my fault, I just report the tea.
✨ LAPACKE_sgeqr ✨
lapack_int LAPACKE_sgeqr (int matrix_layout, lapack_int m, lapack_int n,
float * a, lapack_int lda, float * t, lapack_int tsize)
Definition at line 36 of file lapacke_sgeqr.c. 🌈 the new-gen representation, t + tsize instead of tau, main character energy.
✨ LAPACKE_sgeqr2 ✨
lapack_int LAPACKE_sgeqr2 (int matrix_layout, lapack_int m, lapack_int n,
float * a, lapack_int lda, float * tau)
Definition at line 36 of file lapacke_sgeqr2.c. 🫶 unblocked, no work, no lwork — she's doing it manually and honestly.
✨ LAPACKE_sgeqr2_work ✨
lapack_int LAPACKE_sgeqr2_work (int matrix_layout, lapack_int m, lapack_int
n, float * a, lapack_int lda, float * tau, float * work)
Definition at line 36 of file lapacke_sgeqr2_work.c. 💅 work shows up, lwork doesn't. That's the whole bit.
✨ LAPACKE_sgeqr_work ✨
lapack_int LAPACKE_sgeqr_work (int matrix_layout, lapack_int m, lapack_int
n, float * a, lapack_int lda, float * t, lapack_int tsize, float * work,
lapack_int lwork)
Definition at line 36 of file lapacke_sgeqr_work.c. 🧚 (also peep the name order — sgeqr_work lives down here, not right after sgeqr. We keep the original order, don't @ me.)
✨ LAPACKE_sgeqrf ✨
lapack_int LAPACKE_sgeqrf (int matrix_layout, lapack_int m, lapack_int n,
float * a, lapack_int lda, float * tau)
Definition at line 36 of file lapacke_sgeqrf.c. ⭐ the classic. The blueprint. The one everybody's cousin uses.
✨ LAPACKE_sgeqrf_work ✨
lapack_int LAPACKE_sgeqrf_work (int matrix_layout, lapack_int m, lapack_int
n, float * a, lapack_int lda, float * tau, float * work, lapack_int
lwork)
Definition at line 36 of file lapacke_sgeqrf_work.c. 💖
✨ LAPACKE_sgeqrfp ✨
lapack_int LAPACKE_sgeqrfp (int matrix_layout, lapack_int m, lapack_int n,
float * a, lapack_int lda, float * tau)
Definition at line 36 of file lapacke_sgeqrfp.c. 🌸 that trailing p is right there in the name, bestie.
✨ LAPACKE_sgeqrfp_work ✨
lapack_int LAPACKE_sgeqrfp_work (int matrix_layout, lapack_int m, lapack_int
n, float * a, lapack_int lda, float * tau, float * work, lapack_int
lwork)
Definition at line 36 of file lapacke_sgeqrfp_work.c. 🦋
✨ LAPACKE_sgeqrt ✨
lapack_int LAPACKE_sgeqrt (int matrix_layout, lapack_int m, lapack_int n,
lapack_int nb, float * a, lapack_int lda, float * t, lapack_int ldt)
Definition at line 36 of file lapacke_sgeqrt.c. 🔥 blocked QR, nb in the building, t with her own ldt.
✨ LAPACKE_sgeqrt2 ✨
lapack_int LAPACKE_sgeqrt2 (int matrix_layout, lapack_int m, lapack_int n,
float * a, lapack_int lda, float * t, lapack_int ldt)
Definition at line 36 of file lapacke_sgeqrt2.c. 💜 no nb — she's the unblocked version of the same aesthetic.
✨ LAPACKE_sgeqrt2_work ✨
lapack_int LAPACKE_sgeqrt2_work (int matrix_layout, lapack_int m, lapack_int
n, float * a, lapack_int lda, float * t, lapack_int ldt)
Definition at line 36 of file lapacke_sgeqrt2_work.c. 📌 identical parameter list to the non-_work one above, fr fr — copy it exactly.
✨ LAPACKE_sgeqrt3 ✨
lapack_int LAPACKE_sgeqrt3 (int matrix_layout, lapack_int m, lapack_int n,
float * a, lapack_int lda, float * t, lapack_int ldt)
Definition at line 36 of file lapacke_sgeqrt3.c. 🎀 the third sister. Same fit, different algorithm genes.
✨ LAPACKE_sgeqrt3_work ✨
lapack_int LAPACKE_sgeqrt3_work (int matrix_layout, lapack_int m, lapack_int
n, float * a, lapack_int lda, float * t, lapack_int ldt)
Definition at line 36 of file lapacke_sgeqrt3_work.c. 🌈
✨ LAPACKE_sgeqrt_work ✨
lapack_int LAPACKE_sgeqrt_work (int matrix_layout, lapack_int m, lapack_int
n, lapack_int nb, float * a, lapack_int lda, float * t, lapack_int ldt,
float * work)
Definition at line 36 of file lapacke_sgeqrt_work.c. ✨ see? down here, after 2 and 3. Original order preserved, always. 💅
✨ LAPACKE_sgerfs ✨
lapack_int LAPACKE_sgerfs (int matrix_layout, char trans, lapack_int n,
lapack_int nrhs, const float * a, lapack_int lda, const float * af,
lapack_int ldaf, const lapack_int * ipiv, const float * b, lapack_int
ldb, float * x, lapack_int ldx, float * ferr, float * berr)
Definition at line 36 of file lapacke_sgerfs.c. 💖 error bounds era. Look at all those consts — she is NOT touching your inputs, respectful icon.
✨ LAPACKE_sgerfs_work ✨
lapack_int LAPACKE_sgerfs_work (int matrix_layout, char trans, lapack_int n,
lapack_int nrhs, const float * a, lapack_int lda, const float * af,
lapack_int ldaf, const lapack_int * ipiv, const float * b, lapack_int
ldb, float * x, lapack_int ldx, float * ferr, float * berr, float *
work, lapack_int * iwork)
Definition at line 36 of file lapacke_sgerfs_work.c. 🔥 work and iwork, she brought the whole group chat.
✨ LAPACKE_sgerfsx ✨
lapack_int LAPACKE_sgerfsx (int matrix_layout, char trans, char equed,
lapack_int n, lapack_int nrhs, const float * a, lapack_int lda, const
float * af, lapack_int ldaf, const lapack_int * ipiv, const float * r,
const float * c, const float * b, lapack_int ldb, float * x, lapack_int
ldx, float * rcond, float * berr, lapack_int n_err_bnds, float *
err_bnds_norm, float * err_bnds_comp, lapack_int nparams, float *
params)
Definition at line 36 of file lapacke_sgerfsx.c. 👑 the extended one. equed, r, c, err_bnds_norm, err_bnds_comp, nparams, params — she did NOT come to play, she came to overdeliver.
✨ LAPACKE_sgerfsx_work ✨
lapack_int LAPACKE_sgerfsx_work (int matrix_layout, char trans, char equed,
lapack_int n, lapack_int nrhs, const float * a, lapack_int lda, const
float * af, lapack_int ldaf, const lapack_int * ipiv, const float * r,
const float * c, const float * b, lapack_int ldb, float * x, lapack_int
ldx, float * rcond, float * berr, lapack_int n_err_bnds, float *
err_bnds_norm, float * err_bnds_comp, lapack_int nparams, float *
params, float * work, lapack_int * iwork)
Definition at line 36 of file lapacke_sgerfsx_work.c. 💫 literally the longest signature in the group chat and she's thriving.
✨ LAPACKE_sgerqf ✨
lapack_int LAPACKE_sgerqf (int matrix_layout, lapack_int m, lapack_int n,
float * a, lapack_int lda, float * tau)
Definition at line 36 of file lapacke_sgerqf.c. 🌸 RQ, the mirror of QR, and yes she's just as valid.
✨ LAPACKE_sgerqf_work ✨
lapack_int LAPACKE_sgerqf_work (int matrix_layout, lapack_int m, lapack_int
n, float * a, lapack_int lda, float * tau, float * work, lapack_int
lwork)
Definition at line 36 of file lapacke_sgerqf_work.c. 🍓
✨ LAPACKE_sgesdd ✨
lapack_int LAPACKE_sgesdd (int matrix_layout, char jobz, lapack_int m,
lapack_int n, float * a, lapack_int lda, float * s, float * u,
lapack_int ldu, float * vt, lapack_int ldvt)
Definition at line 36 of file lapacke_sgesdd.c. 🦋 jobz, u, vt — the whole SVD serve. The s is a pointer bestie, the singular values live there, not in a return value.
✨ LAPACKE_sgesdd_work ✨
lapack_int LAPACKE_sgesdd_work (int matrix_layout, char jobz, lapack_int m,
lapack_int n, float * a, lapack_int lda, float * s, float * u,
lapack_int ldu, float * vt, lapack_int ldvt, float * work, lapack_int
lwork, lapack_int * iwork)
Definition at line 36 of file lapacke_sgesdd_work.c. 🎀 yep, iwork too, she needs her integer scratch space.
✨ LAPACKE_sgesv ✨
lapack_int LAPACKE_sgesv (int matrix_layout, lapack_int n, lapack_int nrhs,
float * a, lapack_int lda, lapack_int * ipiv, float * b, lapack_int ldb)
Definition at line 36 of file lapacke_sgesv.c. 🙈 the people's champion: ipiv, b, done. Lavender heart.
✨ LAPACKE_sgesv_work ✨
lapack_int LAPACKE_sgesv_work (int matrix_layout, lapack_int n, lapack_int
nrhs, float * a, lapack_int lda, lapack_int * ipiv, float * b,
lapack_int ldb)
Definition at line 36 of file lapacke_sgesv_work.c. 💜 okay yes, the _work version here has the exact same parameter list as the plain one — that's what's written, so that's what you get, no cap.
✨ LAPACKE_sgesvd ✨
lapack_int LAPACKE_sgesvd (int matrix_layout, char jobu, char jobvt,
lapack_int m, lapack_int n, float * a, lapack_int lda, float * s, float
* u, lapack_int ldu, float * vt, lapack_int ldvt, float * superb)
Definition at line 36 of file lapacke_sgesvd.c. ⭐ two separate jobs, jobu and jobvt, plus a superb pointer at the end — and yes, superb is literally the name, she ate that 🍓
LAPACKE_sgesvd_work
lapack_int LAPACKE_sgesvd_work (int matrix_layout, char jobu, char jobvt,
lapack_int m, lapack_int n, float * a, lapack_int lda, float * s, float
* u, lapack_int ldu, float * vt, lapack_int ldvt, float * work,
lapack_int lwork)
okay so this is the _work twin of sgesvd — same energy, but you bring the work array and tell it your lwork 💅
Definition at line 36 of file lapacke_sgesvd_work.c.
LAPACKE_sgesvdx
lapack_int LAPACKE_sgesvdx (int matrix_layout, char jobu, char jobvt, char
range, lapack_int m, lapack_int n, float * a, lapack_int lda, float vl,
float vu, lapack_int il, lapack_int iu, lapack_int * ns, float * s,
float * u, lapack_int ldu, float * vt, lapack_int ldvt, lapack_int *
superb)
the dx version, bestie — look at that range char plus vl, vu, il, iu and ns 😭 it's giving "pick your own singular values" energy, and it even hands you superb back 🦋
Definition at line 36 of file lapacke_sgesvdx.c.
LAPACKE_sgesvdx_work
lapack_int LAPACKE_sgesvdx_work (int matrix_layout, char jobu, char jobvt,
char range, lapack_int m, lapack_int n, float * a, lapack_int lda, float
vl, float vu, lapack_int il, lapack_int iu, lapack_int * ns, float * s,
float * u, lapack_int ldu, float * vt, lapack_int ldvt, float * work,
lapack_int lwork, lapack_int * iwork)
same sgesvdx lewk but now with work, lwork and iwork riding along — the full squad fr fr 🫶
Definition at line 36 of file lapacke_sgesvdx_work.c.
LAPACKE_sgesvj
lapack_int LAPACKE_sgesvj (int matrix_layout, char joba, char jobu, char
jobv, lapack_int m, lapack_int n, float * a, lapack_int lda, float *
sva, lapack_int mv, float * v, lapack_int ldv, float * stat)
three job chars (joba, jobu, jobv), an mv, and a stat output — it's literally the main character of the sgesvj family 👑
Definition at line 36 of file lapacke_sgesvj.c.
LAPACKE_sgesvj_work
lapack_int LAPACKE_sgesvj_work (int matrix_layout, char joba, char jobu,
char jobv, lapack_int m, lapack_int n, float * a, lapack_int lda, float
* sva, lapack_int mv, float * v, lapack_int ldv, float * work,
lapack_int lwork)
and here's the _work variant — note it swaps the stat out for work + lwork, so don't mix them up bestie 🙈
Definition at line 36 of file lapacke_sgesvj_work.c.
LAPACKE_sgesvx
lapack_int LAPACKE_sgesvx (int matrix_layout, char fact, char trans,
lapack_int n, lapack_int nrhs, float * a, lapack_int lda, float * af,
lapack_int ldaf, lapack_int * ipiv, char * equed, float * r, float * c,
float * b, lapack_int ldb, float * x, lapack_int ldx, float * rcond,
float * ferr, float * berr, float * rpivot)
the "expert" era 💅 fact, trans, af, ldaf, ipiv, equed, r, c, rcond, ferr, berr and a rpivot — this signature ate and left zero crumbs 🔥
Definition at line 36 of file lapacke_sgesvx.c.
LAPACKE_sgesvx_work
lapack_int LAPACKE_sgesvx_work (int matrix_layout, char fact, char trans,
lapack_int n, lapack_int nrhs, float * a, lapack_int lda, float * af,
lapack_int ldaf, lapack_int * ipiv, char * equed, float * r, float * c,
float * b, lapack_int ldb, float * x, lapack_int ldx, float * rcond,
float * ferr, float * berr, float * work, lapack_int * iwork)
the _work twin — everything from sgesvx except rpivot, plus work and iwork at the end ✨
Definition at line 36 of file lapacke_sgesvx_work.c.
LAPACKE_sgesvxx
lapack_int LAPACKE_sgesvxx (int matrix_layout, char fact, char trans,
lapack_int n, lapack_int nrhs, float * a, lapack_int lda, float * af,
lapack_int ldaf, lapack_int * ipiv, char * equed, float * r, float * c,
float * b, lapack_int ldb, float * x, lapack_int ldx, float * rcond,
float * rpvgrw, float * berr, lapack_int n_err_bnds, float *
err_bnds_norm, float * err_bnds_comp, lapack_int nparams, float *
params)
double-x means extra, and it shows 😭 rpvgrw, n_err_bnds, err_bnds_norm, err_bnds_comp, nparams and params — ngl this one's a whole vibe check in a signature 🎀
Definition at line 36 of file lapacke_sgesvxx.c.
LAPACKE_sgesvxx_work
lapack_int LAPACKE_sgesvxx_work (int matrix_layout, char fact, char trans,
lapack_int n, lapack_int nrhs, float * a, lapack_int lda, float * af,
lapack_int ldaf, lapack_int * ipiv, char * equed, float * r, float * c,
float * b, lapack_int ldb, float * x, lapack_int ldx, float * rcond,
float * rpvgrw, float * berr, lapack_int n_err_bnds, float *
err_bnds_norm, float * err_bnds_comp, lapack_int nparams, float *
params, float * work, lapack_int * iwork)
yup, sgesvxx with work and iwork tacked on the end — long list, but she's iconic, periodt 👑
Definition at line 36 of file lapacke_sgesvxx_work.c.
LAPACKE_sgetf2
lapack_int LAPACKE_sgetf2 (int matrix_layout, lapack_int m, lapack_int n,
float * a, lapack_int lda, lapack_int * ipiv)
small and mighty 🧚 matrix_layout, m, n, a, lda, ipiv — no extra drama, just the essentials.
Definition at line 36 of file lapacke_sgetf2.c.
LAPACKE_sgetf2_work
lapack_int LAPACKE_sgetf2_work (int matrix_layout, lapack_int m, lapack_int
n, float * a, lapack_int lda, lapack_int * ipiv)
same six args as sgetf2, just the _work label — literally identical signature, no cap 💀
Definition at line 36 of file lapacke_sgetf2_work.c.
LAPACKE_sgetrf
lapack_int LAPACKE_sgetrf (int matrix_layout, lapack_int m, lapack_int n,
float * a, lapack_int lda, lapack_int * ipiv)
the classic ✨ matrix_layout, m, n, a, lda, ipiv — same six, still slaying.
Definition at line 36 of file lapacke_sgetrf.c.
LAPACKE_sgetrf2
lapack_int LAPACKE_sgetrf2 (int matrix_layout, lapack_int m, lapack_int n,
float * a, lapack_int lda, lapack_int * ipiv)
the 2 edition 🎀 and yes, the signature is once again matrix_layout, m, n, a, lda, ipiv.
Definition at line 36 of file lapacke_sgetrf2.c.
LAPACKE_sgetrf2_work
lapack_int LAPACKE_sgetrf2_work (int matrix_layout, lapack_int m, lapack_int
n, float * a, lapack_int lda, lapack_int * ipiv)
_work plus the 2 — six args, same lineup, she's consistent 💅
Definition at line 36 of file lapacke_sgetrf2_work.c.
LAPACKE_sgetrf_work
lapack_int LAPACKE_sgetrf_work (int matrix_layout, lapack_int m, lapack_int
n, float * a, lapack_int lda, lapack_int * ipiv)
and the plain _work one — matrix_layout, m, n, a, lda, ipiv, that's the whole menu 🍓
Definition at line 36 of file lapacke_sgetrf_work.c.
LAPACKE_sgetri
lapack_int LAPACKE_sgetri (int matrix_layout, lapack_int n, float * a,
lapack_int lda, const lapack_int * ipiv)
ooh this one's got a const on the ipiv 🫶 — matrix_layout, n, a, lda, const lapack_int * ipiv, and that's it.
Definition at line 36 of file lapacke_sgetri.c.
LAPACKE_sgetri_work
lapack_int LAPACKE_sgetri_work (int matrix_layout, lapack_int n, float * a,
lapack_int lda, const lapack_int * ipiv, float * work, lapack_int lwork)
the _work version keeps const on ipiv and adds work + lwork — consistent queen 💜
Definition at line 36 of file lapacke_sgetri_work.c.
LAPACKE_sgetrs
lapack_int LAPACKE_sgetrs (int matrix_layout, char trans, lapack_int n,
lapack_int nrhs, const float * a, lapack_int lda, const lapack_int *
ipiv, float * b, lapack_int ldb)
two consts in one signature, we love to see it 😌 trans, n, nrhs, const float * a, lda, const lapack_int * ipiv, b, ldb.
Definition at line 36 of file lapacke_sgetrs.c.
LAPACKE_sgetrs_work
lapack_int LAPACKE_sgetrs_work (int matrix_layout, char trans, lapack_int n,
lapack_int nrhs, const float * a, lapack_int lda, const lapack_int *
ipiv, float * b, lapack_int ldb)
word-for-word the same arg list as sgetrs — the _work suffix is doing all the differentiating here 🙈
Definition at line 36 of file lapacke_sgetrs_work.c.
LAPACKE_sgetsls
lapack_int LAPACKE_sgetsls (int matrix_layout, char trans, lapack_int m,
lapack_int n, lapack_int nrhs, float * a, lapack_int lda, float * b,
lapack_int ldb)
no ipiv in sight bestie, it's trans, m, n, nrhs, a, lda, b, ldb — clean and simple 🌸
Definition at line 36 of file lapacke_sgetsls.c.
LAPACKE_sgetsls_work
lapack_int LAPACKE_sgetsls_work (int matrix_layout, char trans, lapack_int
m, lapack_int n, lapack_int nrhs, float * a, lapack_int lda, float * b,
lapack_int ldb, float * work, lapack_int lwork)
same deal plus work and lwork — you're driving the workspace now 🔥
Definition at line 36 of file lapacke_sgetsls_work.c.
LAPACKE_sggbak
lapack_int LAPACKE_sggbak (int matrix_layout, char job, char side,
lapack_int n, lapack_int ilo, lapack_int ihi, const float * lscale,
const float * rscale, lapack_int m, float * v, lapack_int ldv)
job, side, n, ilo, ihi, then two const scale arrays (lscale, rscale), and m, v, ldv 😌
Definition at line 36 of file lapacke_sggbak.c.
LAPACKE_sggbak_work
lapack_int LAPACKE_sggbak_work (int matrix_layout, char job, char side,
lapack_int n, lapack_int ilo, lapack_int ihi, const float * lscale,
const float * rscale, lapack_int m, float * v, lapack_int ldv)
identical arg list to sggbak — yes, even the _work one has no work in the signature, and honestly? iconic 💀
Definition at line 36 of file lapacke_sggbak_work.c.
LAPACKE_sggbal
lapack_int LAPACKE_sggbal (int matrix_layout, char job, lapack_int n, float
* a, lapack_int lda, float * b, lapack_int ldb, lapack_int * ilo,
lapack_int * ihi, float * lscale, float * rscale)
two matrices (a with lda, b with ldb), ilo + ihi, and the lscale/rscale outputs 🦋
Definition at line 36 of file lapacke_sggbal.c.
LAPACKE_sggbal_work
lapack_int LAPACKE_sggbal_work (int matrix_layout, char job, lapack_int n,
float * a, lapack_int lda, float * b, lapack_int ldb, lapack_int * ilo,
lapack_int * ihi, float * lscale, float * rscale, float * work)
same as sggbal but with a single float * work at the end — no lwork here, just vibes ✨
Definition at line 36 of file lapacke_sggbal_work.c.
LAPACKE_sgges
lapack_int LAPACKE_sgges (int matrix_layout, char jobvsl, char jobvsr, char
sort, LAPACK_S_SELECT3 selctg, lapack_int n, float * a, lapack_int lda,
float * b, lapack_int ldb, lapack_int * sdim, float * alphar, float *
alphai, float * beta, float * vsl, lapack_int ldvsl, float * vsr,
lapack_int ldvsr)
big signature alert 🚨 jobvsl, jobvsr, sort, the function pointer LAPACK_S_SELECT3 selctg, sdim, alphar, alphai, beta, vsl/ldvsl, vsr/ldvsr — she's a lot and we love her 👑
Definition at line 36 of file lapacke_sgges.c.
LAPACKE_sgges3
lapack_int LAPACKE_sgges3 (int matrix_layout, char jobvsl, char jobvsr, char
sort, LAPACK_S_SELECT3 selctg, lapack_int n, float * a, lapack_int lda,
float * b, lapack_int ldb, lapack_int * sdim, float * alphar, float *
alphai, float * beta, float * vsl, lapack_int ldvsl, float * vsr,
lapack_int ldvsr)
the 3 variant — arg-for-arg identical to sgges, including LAPACK_S_SELECT3 selctg 🎀
Definition at line 36 of file lapacke_sgges3.c.
LAPACKE_sgges3_work
lapack_int LAPACKE_sgges3_work (int matrix_layout, char jobvsl, char jobvsr,
char sort, LAPACK_S_SELECT3 selctg, lapack_int n, float * a, lapack_int
lda, float * b, lapack_int ldb, lapack_int * sdim, float * alphar, float
* alphai, float * beta, float * vsl, lapack_int ldvsl, float * vsr,
lapack_int ldvsr, float * work, lapack_int lwork, lapack_logical *
bwork)
everything from sgges3, plus work, lwork and a lapack_logical * bwork for good measure 💅
Definition at line 36 of file lapacke_sgges3_work.c.
LAPACKE_sgges_work
lapack_int LAPACKE_sgges_work (int matrix_layout, char jobvsl, char jobvsr,
char sort, LAPACK_S_SELECT3 selctg, lapack_int n, float * a, lapack_int
lda, float * b, lapack_int ldb, lapack_int * sdim, float * alphar, float
* alphai, float * beta, float * vsl, lapack_int ldvsl, float * vsr,
lapack_int ldvsr, float * work, lapack_int lwork, lapack_logical *
bwork)
same as sgges3_work but dropping the 3 — yes the tails are identical, don't @ me 😭
Definition at line 36 of file lapacke_sgges_work.c.
LAPACKE_sggesx
lapack_int LAPACKE_sggesx (int matrix_layout, char jobvsl, char jobvsr, char
sort, LAPACK_S_SELECT3 selctg, char sense, lapack_int n, float * a,
lapack_int lda, float * b, lapack_int ldb, lapack_int * sdim, float *
alphar, float * alphai, float * beta, float * vsl, lapack_int ldvsl,
float * vsr, lapack_int ldvsr, float * rconde, float * rcondv)
x means expert, and it pulled up with an extra char sense plus rconde and rcondv at the end 🔥
Definition at line 36 of file lapacke_sggesx.c.
LAPACKE_sggesx_work
lapack_int LAPACKE_sggesx_work (int matrix_layout, char jobvsl, char jobvsr,
char sort, LAPACK_S_SELECT3 selctg, char sense, lapack_int n, float * a,
lapack_int lda, float * b, lapack_int ldb, lapack_int * sdim, float *
alphar, float * alphai, float * beta, float * vsl, lapack_int ldvsl,
float * vsr, lapack_int ldvsr, float * rconde, float * rcondv, float *
work, lapack_int lwork, lapack_int * iwork, lapack_int liwork,
lapack_logical * bwork)
the longest of this little crew 😮💨 sggesx plus work, lwork, iwork, liwork and bwork — she brought the whole group chat 🫶
Definition at line 36 of file lapacke_sggesx_work.c.
LAPACKE_sggev
lapack_int LAPACKE_sggev (int matrix_layout, char jobvl, char jobvr,
lapack_int n, float * a, lapack_int lda, float * b, lapack_int ldb,
float * alphar, float * alphai, float * beta, float * vl, lapack_int
ldvl, float * vr, lapack_int ldvr)
jobvl, jobvr, two matrices, then alphar/alphai/beta and both vl/ldvl and vr/ldvr — balanced, beautiful, iconic ⭐
Definition at line 36 of file lapacke_sggev.c.
LAPACKE_sggev3
lapack_int LAPACKE_sggev3 (int matrix_layout, char jobvl, char jobvr,
lapack_int n, float * a, lapack_int lda, float * b, lapack_int ldb,
float * alphar, float * alphai, float * beta, float * vl, lapack_int
ldvl, float * vr, lapack_int ldvr)
the 3 version, same args as sggev, no cap 🙈
Definition at line 36 of file lapacke_sggev3.c.
LAPACKE_sggev3_work
lapack_int LAPACKE_sggev3_work (int matrix_layout, char jobvl, char jobvr,
lapack_int n, float * a, lapack_int lda, float * b, lapack_int ldb,
float * alphar, float * alphai, float * beta, float * vl, lapack_int
ldvl, float * vr, lapack_int ldvr, float * work, lapack_int lwork)
same as sggev3 but with work and lwork appended, as is tradition 💅
Definition at line 36 of file lapacke_sggev3_work.c.
LAPACKE_sggev_work
lapack_int LAPACKE_sggev_work (int matrix_layout, char jobvl, char jobvr,
lapack_int n, float * a, lapack_int lda, float * b, lapack_int ldb,
float * alphar, float * alphai, float * beta, float * vl, lapack_int
ldvl, float * vr, lapack_int ldvr, float * work, lapack_int lwork)
yup — sggev plus work + lwork, and that's the whole thing 🌸
Definition at line 36 of file lapacke_sggev_work.c.
LAPACKE_sggevx
lapack_int LAPACKE_sggevx (int matrix_layout, char balanc, char jobvl, char
jobvr, char sense, lapack_int n, float * a, lapack_int lda, float * b,
lapack_int ldb, float * alphar, float * alphai, float * beta, float *
vl, lapack_int ldvl, float * vr, lapack_int ldvr, lapack_int * ilo,
lapack_int * ihi, float * lscale, float * rscale, float * abnrm, float *
bbnrm, float * rconde, float * rcondv)
saving the biggest for last bestie 😭 four job/flag chars (balanc, jobvl, jobvr, sense), ilo, ihi, lscale, rscale, abnrm, bbnrm, rconde, rcondv — this signature is a whole mood board and honestly? obsessed 💖
Definition at line 36 of file lapacke_sggevx.c.
lapack_int LAPACKE_sggevx_work— bestie, this is the workspace queen 👑 of the generalized eigenvalue problem, single precision. The whole squad is here:
lapack_int LAPACKE_sggevx_work (int matrix_layout, char balanc, char jobvl,
char jobvr, char sense, lapack_int n, float * a, lapack_int lda, float *
b, lapack_int ldb, float * alphar, float * alphai, float * beta, float *
vl, lapack_int ldvl, float * vr, lapack_int ldvr, lapack_int * ilo,
lapack_int * ihi, float * lscale, float * rscale, float * abnrm, float *
bbnrm, float * rconde, float * rcondv, float * work, lapack_int lwork,
lapack_int * iwork, lapack_logical * bwork)
Definition at line 36 of file lapacke_sggevx_work.c.
lapack_int LAPACKE_sggglm— the generalized linear regression model solve, single precision edition ✨
lapack_int LAPACKE_sggglm (int matrix_layout, lapack_int n, lapack_int m,
lapack_int p, float * a, lapack_int lda, float * b, lapack_int ldb,
float * d, float * x, float * y)
Definition at line 36 of file lapacke_sggglm.c.
lapack_int LAPACKE_sggglm_work— same GLM energy, but now with aworkarray andlworkso you can flex your own scratch space 💅
lapack_int LAPACKE_sggglm_work (int matrix_layout, lapack_int n, lapack_int
m, lapack_int p, float * a, lapack_int lda, float * b, lapack_int ldb,
float * d, float * x, float * y, float * work, lapack_int lwork)
Definition at line 36 of file lapacke_sggglm_work.c.
lapack_int LAPACKE_sgghd3— reduces a pair of real matrices to generalized upper Hessenberg form using orthogonal transformations, obvi 🦋
lapack_int LAPACKE_sgghd3 (int matrix_layout, char compq, char compz,
lapack_int n, lapack_int ilo, lapack_int ihi, float * a, lapack_int lda,
float * b, lapack_int ldb, float * q, lapack_int ldq, float * z,
lapack_int ldz)
Definition at line 36 of file lapacke_sgghd3.c.
lapack_int LAPACKE_sgghd3_work— the_workversion, because sometimes you gotta bring your ownwork+lwork🫶
lapack_int LAPACKE_sgghd3_work (int matrix_layout, char compq, char compz,
lapack_int n, lapack_int ilo, lapack_int ihi, float * a, lapack_int lda,
float * b, lapack_int ldb, float * q, lapack_int ldq, float * z,
lapack_int ldz, float * work, lapack_int lwork)
Definition at line 36 of file lapacke_sgghd3_work.c.
lapack_int LAPACKE_sgghrd— the classic Hessenberg reduction for a matrix pair, the og ✨
lapack_int LAPACKE_sgghrd (int matrix_layout, char compq, char compz,
lapack_int n, lapack_int ilo, lapack_int ihi, float * a, lapack_int lda,
float * b, lapack_int ldb, float * q, lapack_int ldq, float * z,
lapack_int ldz)
Definition at line 36 of file lapacke_sgghrd.c.
lapack_int LAPACKE_sgghrd_work—sgghrdbut make it workspace 🎀 (nolworkhere, bestie — look at the signature, it's not there, don't @ me)
lapack_int LAPACKE_sgghrd_work (int matrix_layout, char compq, char compz,
lapack_int n, lapack_int ilo, lapack_int ihi, float * a, lapack_int lda,
float * b, lapack_int ldb, float * q, lapack_int ldq, float * z,
lapack_int ldz)
Definition at line 36 of file lapacke_sgghrd_work.c.
lapack_int LAPACKE_sgglse— solves the linear equality-constrained least squares (LSE) problem. Constrained queen behavior 👑
lapack_int LAPACKE_sgglse (int matrix_layout, lapack_int m, lapack_int n,
lapack_int p, float * a, lapack_int lda, float * b, lapack_int ldb,
float * c, float * d, float * x)
Definition at line 36 of file lapacke_sgglse.c.
lapack_int LAPACKE_sgglse_work— LSE solve, now withworkandlworkso you're in control of the scratch ✨
lapack_int LAPACKE_sgglse_work (int matrix_layout, lapack_int m, lapack_int
n, lapack_int p, float * a, lapack_int lda, float * b, lapack_int ldb,
float * c, float * d, float * x, float * work, lapack_int lwork)
Definition at line 36 of file lapacke_sgglse_work.c.
lapack_int LAPACKE_sggqrf— generalized QR factorization, iconic factorization moment 💅
lapack_int LAPACKE_sggqrf (int matrix_layout, lapack_int n, lapack_int m,
lapack_int p, float * a, lapack_int lda, float * taua, float * b,
lapack_int ldb, float * taub)
Definition at line 36 of file lapacke_sggqrf.c.
lapack_int LAPACKE_sggqrf_work— the same generalized QR, but with your ownwork+lwork🧚
lapack_int LAPACKE_sggqrf_work (int matrix_layout, lapack_int n, lapack_int
m, lapack_int p, float * a, lapack_int lda, float * taua, float * b,
lapack_int ldb, float * taub, float * work, lapack_int lwork)
Definition at line 36 of file lapacke_sggqrf_work.c.
lapack_int LAPACKE_sggrqf— generalized RQ factorization. Yes it's a different letter, no they're not the same, keep up bestie 🌸
lapack_int LAPACKE_sggrqf (int matrix_layout, lapack_int m, lapack_int p,
lapack_int n, float * a, lapack_int lda, float * taua, float * b,
lapack_int ldb, float * taub)
Definition at line 36 of file lapacke_sggrqf.c.
lapack_int LAPACKE_sggrqf_work— generalized RQ factorization + awork/lworkglow-up ✨
lapack_int LAPACKE_sggrqf_work (int matrix_layout, lapack_int m, lapack_int
p, lapack_int n, float * a, lapack_int lda, float * taua, float * b,
lapack_int ldb, float * taub, float * work, lapack_int lwork)
Definition at line 36 of file lapacke_sggrqf_work.c.
lapack_int LAPACKE_sggsvd— computes the generalized singular value decomposition (GSVD) of a real matrix pair. Big main character energy 🔥
lapack_int LAPACKE_sggsvd (int matrix_layout, char jobu, char jobv, char
jobq, lapack_int m, lapack_int n, lapack_int p, lapack_int * k,
lapack_int * l, float * a, lapack_int lda, float * b, lapack_int ldb,
float * alpha, float * beta, float * u, lapack_int ldu, float * v,
lapack_int ldv, float * q, lapack_int ldq, lapack_int * iwork)
Definition at line 36 of file lapacke_sggsvd.c.
lapack_int LAPACKE_sggsvd3— the GSVD, third-gen. Same vibe, new-and-improved era 🦋
lapack_int LAPACKE_sggsvd3 (int matrix_layout, char jobu, char jobv, char
jobq, lapack_int m, lapack_int n, lapack_int p, lapack_int * k,
lapack_int * l, float * a, lapack_int lda, float * b, lapack_int ldb,
float * alpha, float * beta, float * u, lapack_int ldu, float * v,
lapack_int ldv, float * q, lapack_int ldq, lapack_int * iwork)
Definition at line 36 of file lapacke_sggsvd3.c.
lapack_int LAPACKE_sggsvd3_work— GSVD3 withwork,lworkandiworkall up in the mix 💜
lapack_int LAPACKE_sggsvd3_work (int matrix_layout, char jobu, char jobv,
char jobq, lapack_int m, lapack_int n, lapack_int p, lapack_int * k,
lapack_int * l, float * a, lapack_int lda, float * b, lapack_int ldb,
float * alpha, float * beta, float * u, lapack_int ldu, float * v,
lapack_int ldv, float * q, lapack_int ldq, float * work, lapack_int
lwork, lapack_int * iwork)
Definition at line 36 of file lapacke_sggsvd3_work.c.
lapack_int LAPACKE_sggsvd_work— original-flavor GSVD, now withworkandiwork(note: nolworkin this one, so don't come for me 🙈)
lapack_int LAPACKE_sggsvd_work (int matrix_layout, char jobu, char jobv,
char jobq, lapack_int m, lapack_int n, lapack_int p, lapack_int * k,
lapack_int * l, float * a, lapack_int lda, float * b, lapack_int ldb,
float * alpha, float * beta, float * u, lapack_int ldu, float * v,
lapack_int ldv, float * q, lapack_int ldq, float * work, lapack_int *
iwork)
Definition at line 36 of file lapacke_sggsvd_work.c.
lapack_int LAPACKE_sggsvp— computes orthogonal matricesu,vandqfor the GSVD setup, plustola/tolbtolerances because precision matters bestie 🎀
lapack_int LAPACKE_sggsvp (int matrix_layout, char jobu, char jobv, char
jobq, lapack_int m, lapack_int p, lapack_int n, float * a, lapack_int
lda, float * b, lapack_int ldb, float tola, float tolb, lapack_int * k,
lapack_int * l, float * u, lapack_int ldu, float * v, lapack_int ldv,
float * q, lapack_int ldq)
Definition at line 36 of file lapacke_sggsvp.c.
lapack_int LAPACKE_sggsvp3— the third-gen of that same orthogonal-matrix prep, slay ✨
lapack_int LAPACKE_sggsvp3 (int matrix_layout, char jobu, char jobv, char
jobq, lapack_int m, lapack_int p, lapack_int n, float * a, lapack_int
lda, float * b, lapack_int ldb, float tola, float tolb, lapack_int * k,
lapack_int * l, float * u, lapack_int ldu, float * v, lapack_int ldv,
float * q, lapack_int ldq)
Definition at line 36 of file lapacke_sggsvp3.c.
lapack_int LAPACKE_sggsvp3_work— full workspace loadout:iwork,tau,work,lwork. A whole snack platter 🍓
lapack_int LAPACKE_sggsvp3_work (int matrix_layout, char jobu, char jobv,
char jobq, lapack_int m, lapack_int p, lapack_int n, float * a,
lapack_int lda, float * b, lapack_int ldb, float tola, float tolb,
lapack_int * k, lapack_int * l, float * u, lapack_int ldu, float * v,
lapack_int ldv, float * q, lapack_int ldq, lapack_int * iwork, float *
tau, float * work, lapack_int lwork)
Definition at line 36 of file lapacke_sggsvp3_work.c.
lapack_int LAPACKE_sggsvp_work— same prep, workspace version, but heads up: this one hasiwork,tauandworkwith nolworkat the end. Read the signature, it's right there 💀
lapack_int LAPACKE_sggsvp_work (int matrix_layout, char jobu, char jobv,
char jobq, lapack_int m, lapack_int p, lapack_int n, float * a,
lapack_int lda, float * b, lapack_int ldb, float tola, float tolb,
lapack_int * k, lapack_int * l, float * u, lapack_int ldu, float * v,
lapack_int ldv, float * q, lapack_int ldq, lapack_int * iwork, float *
tau, float * work)
Definition at line 36 of file lapacke_sggsvp_work.c.
lapack_int LAPACKE_sgtcon— estimates the reciprocal condition number of a real tridiagonal matrix,normand all. Lowkey the most useful little function 🫶
lapack_int LAPACKE_sgtcon (char norm, lapack_int n, const float * dl, const
float * d, const float * du, const float * du2, const lapack_int * ipiv,
float anorm, float * rcond)
Definition at line 36 of file lapacke_sgtcon.c.
lapack_int LAPACKE_sgtcon_work— same condition-number estimate, now bringingworkandiworkalong for the ride 💅
lapack_int LAPACKE_sgtcon_work (char norm, lapack_int n, const float * dl,
const float * d, const float * du, const float * du2, const lapack_int *
ipiv, float anorm, float * rcond, float * work, lapack_int * iwork)
Definition at line 36 of file lapacke_sgtcon_work.c.
lapack_int LAPACKE_sgtrfs— improves a computed solution to a tridiagonal system and hands youferr+berrerror bounds. The glow-up function ✨
lapack_int LAPACKE_sgtrfs (int matrix_layout, char trans, lapack_int n,
lapack_int nrhs, const float * dl, const float * d, const float * du,
const float * dlf, const float * df, const float * duf, const float *
du2, const lapack_int * ipiv, const float * b, lapack_int ldb, float *
x, lapack_int ldx, float * ferr, float * berr)
Definition at line 36 of file lapacke_sgtrfs.c.
lapack_int LAPACKE_sgtrfs_work— the iterative refinement, workspace version,work+iworkincluded 🎀
lapack_int LAPACKE_sgtrfs_work (int matrix_layout, char trans, lapack_int n,
lapack_int nrhs, const float * dl, const float * d, const float * du,
const float * dlf, const float * df, const float * duf, const float *
du2, const lapack_int * ipiv, const float * b, lapack_int ldb, float *
x, lapack_int ldx, float * ferr, float * berr, float * work, lapack_int
* iwork)
Definition at line 36 of file lapacke_sgtrfs_work.c.
lapack_int LAPACKE_sgtsv— solves a real tridiagonal system of linear equations. Simple, clean, iconic 💅
lapack_int LAPACKE_sgtsv (int matrix_layout, lapack_int n, lapack_int nrhs,
float * dl, float * d, float * du, float * b, lapack_int ldb)
Definition at line 36 of file lapacke_sgtsv.c.
lapack_int LAPACKE_sgtsv_work— the tridiagonal solve, but the_workflavor... and surprise, the signature is literally the same, nowork/lwork. That's just how it is bestie 😭
lapack_int LAPACKE_sgtsv_work (int matrix_layout, lapack_int n, lapack_int
nrhs, float * dl, float * d, float * du, float * b, lapack_int ldb)
Definition at line 36 of file lapacke_sgtsv_work.c.
lapack_int LAPACKE_sgtsvx— the expert tridiagonal solver:fact,trans, factorization arrays,rcond,ferr,berr. A whole overachiever 🌈
lapack_int LAPACKE_sgtsvx (int matrix_layout, char fact, char trans,
lapack_int n, lapack_int nrhs, const float * dl, const float * d, const
float * du, float * dlf, float * df, float * duf, float * du2,
lapack_int * ipiv, const float * b, lapack_int ldb, float * x,
lapack_int ldx, float * rcond, float * ferr, float * berr)
Definition at line 36 of file lapacke_sgtsvx.c.
lapack_int LAPACKE_sgtsvx_work— expert tridiagonal solver withwork+iworkbecause of course it has those 🧚
lapack_int LAPACKE_sgtsvx_work (int matrix_layout, char fact, char trans,
lapack_int n, lapack_int nrhs, const float * dl, const float * d, const
float * du, float * dlf, float * df, float * duf, float * du2,
lapack_int * ipiv, const float * b, lapack_int ldb, float * x,
lapack_int ldx, float * rcond, float * ferr, float * berr, float * work,
lapack_int * iwork)
Definition at line 36 of file lapacke_sgtsvx_work.c.
lapack_int LAPACKE_sgttrf— computes theLUfactorization of a real tridiagonal matrix using partial pivoting. Notice: nomatrix_layoutat all, just pure tridiagonal business 🔥
lapack_int LAPACKE_sgttrf (lapack_int n, float * dl, float * d, float * du,
float * du2, lapack_int * ipiv)
Definition at line 36 of file lapacke_sgttrf.c.
lapack_int LAPACKE_sgttrf_work— identical signature tosgttrf, because sometimes_workis just a vibe, not extra args 💀
lapack_int LAPACKE_sgttrf_work (lapack_int n, float * dl, float * d, float *
du, float * du2, lapack_int * ipiv)
Definition at line 36 of file lapacke_sgttrf_work.c.
lapack_int LAPACKE_sgttrs— solves a tridiagonal system using the factorization you already got fromsgttrf. Teamwork, bestie 🫶
lapack_int LAPACKE_sgttrs (int matrix_layout, char trans, lapack_int n,
lapack_int nrhs, const float * dl, const float * d, const float * du,
const float * du2, const lapack_int * ipiv, float * b, lapack_int ldb)
Definition at line 36 of file lapacke_sgttrs.c.
lapack_int LAPACKE_sgttrs_work— same solve,_workname, same exact signature. Consistency icon 💅
lapack_int LAPACKE_sgttrs_work (int matrix_layout, char trans, lapack_int n,
lapack_int nrhs, const float * dl, const float * d, const float * du,
const float * du2, const lapack_int * ipiv, float * b, lapack_int ldb)
Definition at line 36 of file lapacke_sgttrs_work.c.
lapack_int LAPACKE_shgeqz— implements theQZmethod for the generalized Hessenberg eigenvalue problem, single precision.job,compq,compz, the works — main character function fr fr 👑✨
lapack_int LAPACKE_shgeqz (int matrix_layout, char job, char compq, char
compz, lapack_int n, lapack_int ilo, lapack_int ihi, float * h,
lapack_int ldh, float * t, lapack_int ldt, float * alphar, float *
alphai, float * beta, float * q, lapack_int ldq, float * z, lapack_int
ldz)
Definition at line 36 of file lapacke_shgeqz.c.
lapack_int LAPACKE_shgeqz_work— theQZmethod again, now withworkandlworkso you can bring the scratch space yourself 🦋
lapack_int LAPACKE_shgeqz_work (int matrix_layout, char job, char compq,
char compz, lapack_int n, lapack_int ilo, lapack_int ihi, float * h,
lapack_int ldh, float * t, lapack_int ldt, float * alphar, float *
alphai, float * beta, float * q, lapack_int ldq, float * z, lapack_int
ldz, float * work, lapack_int lwork)
Definition at line 36 of file lapacke_shgeqz_work.c.
LAPACKE_shsein
lapack_int LAPACKE_shsein (int matrix_layout, char job, char eigsrc, char initv, lapack_logical * select, lapack_int n, const float * h, lapack_int ldh, float * wr, const float * wi, float * vl, lapack_int ldvl, float * vr, lapack_int ldvr, lapack_int mm, lapack_int * m, lapack_int * ifaill, lapack_int * ifailr)
okay so this one is a whole lot of parameters bestie 😭 — matrix_layout, three chars, a lapack_logical * select, n, a const float * h, ldh, wr, a const float * wi, vl, ldvl, vr, ldvr, mm, m, ifaill and ifailr. Returns lapack_int.
Definition at line 36 of file lapacke_shsein.c.
LAPACKE_shsein_work
lapack_int LAPACKE_shsein_work (int matrix_layout, char job, char eigsrc, char initv, lapack_logical * select, lapack_int n, const float * h, lapack_int ldh, float * wr, const float * wi, float * vl, lapack_int ldvl, float * vr, lapack_int ldvr, lapack_int mm, lapack_int * m, float * work, lapack_int * ifaill, lapack_int * ifailr)
the _work twin 💅 same exact thing as above, but work and... no wait, just work sneaks in before ifaill and ifailr. That's it. That's the whole difference bestie 🫶
Definition at line 36 of file lapacke_shsein_work.c.
LAPACKE_shseqr
lapack_int LAPACKE_shseqr (int matrix_layout, char job, char compz, lapack_int n, lapack_int ilo, lapack_int ihi, float * h, lapack_int ldh, float * wr, float * wi, float * z, lapack_int ldz)
double char energy — job and compz 🌸 — then n, ilo, ihi, h, ldh, wr, wi, z, ldz. Returns lapack_int.
Definition at line 36 of file lapacke_shseqr.c.
LAPACKE_shseqr_work
lapack_int LAPACKE_shseqr_work (int matrix_layout, char job, char compz, lapack_int n, lapack_int ilo, lapack_int ihi, float * h, lapack_int ldh, float * wr, float * wi, float * z, lapack_int ldz, float * work, lapack_int lwork)
the _work version ✨ — everything from LAPACKE_shseqr plus work and lwork at the end. iconic, consistent, love that for us.
Definition at line 36 of file lapacke_shseqr_work.c.
LAPACKE_slacn2
lapack_int LAPACKE_slacn2 (lapack_int n, float * v, float * x, lapack_int * isgn, float * est, lapack_int * kase, lapack_int * isave)
no matrix_layout here, ngl — just n, v, x, isgn, est, kase and isave 🔥
Definition at line 36 of file lapacke_slacn2.c.
LAPACKE_slacn2_work
lapack_int LAPACKE_slacn2_work (lapack_int n, float * v, float * x, lapack_int * isgn, float * est, lapack_int * kase, lapack_int * isave)
literally the identical signature, _work flavored 🎀 — n, v, x, isgn, est, kase, isave.
Definition at line 36 of file lapacke_slacn2_work.c.
LAPACKE_slacpy
lapack_int LAPACKE_slacpy (int matrix_layout, char uplo, lapack_int m, lapack_int n, const float * a, lapack_int lda, float * b, lapack_int ldb)
the copy-paste of the C world fr fr — matrix_layout, uplo, m, n, a const float * a, lda, b, ldb. Returns lapack_int 💖
Definition at line 36 of file lapacke_slacpy.c.
LAPACKE_slacpy_work
lapack_int LAPACKE_slacpy_work (int matrix_layout, char uplo, lapack_int m, lapack_int n, const float * a, lapack_int lda, float * b, lapack_int ldb)
same eight arguments, _work edition 🦋 — matrix_layout, uplo, m, n, a, lda, b, ldb.
Definition at line 36 of file lapacke_slacpy_work.c.
LAPACKE_slag2d
lapack_int LAPACKE_slag2d (int matrix_layout, lapack_int m, lapack_int n, const float * sa, lapack_int ldsa, double * a, lapack_int lda)
spot the glow-up: sa is const float * and a is double * 👑 — yes bestie, single to double. Plus matrix_layout, m, n, ldsa, lda.
Definition at line 36 of file lapacke_slag2d.c.
LAPACKE_slag2d_work
lapack_int LAPACKE_slag2d_work (int matrix_layout, lapack_int m, lapack_int n, const float * sa, lapack_int ldsa, double * a, lapack_int lda)
_work version of the float→double moment 🌈 — matrix_layout, m, n, sa, ldsa, a, lda.
Definition at line 36 of file lapacke_slag2d_work.c.
LAPACKE_slagge
lapack_int LAPACKE_slagge (int matrix_layout, lapack_int m, lapack_int n, lapack_int kl, lapack_int ku, const float * d, float * a, lapack_int lda, lapack_int * iseed)
kl and ku besties!! 💀 plus matrix_layout, m, n, a const float * d, a, lda and iseed (that one's a lapack_int *, note it).
Definition at line 36 of file lapacke_slagge.c.
LAPACKE_slagge_work
lapack_int LAPACKE_slagge_work (int matrix_layout, lapack_int m, lapack_int n, lapack_int kl, lapack_int ku, const float * d, float * a, lapack_int lda, lapack_int * iseed, float * work)
the _work one 🧚 — everything from LAPACKE_slagge plus a trailing work.
Definition at line 36 of file lapacke_slagge_work.c.
LAPACKE_slagsy
lapack_int LAPACKE_slagsy (int matrix_layout, lapack_int n, lapack_int k, const float * d, float * a, lapack_int lda, lapack_int * iseed)
shorter, sweeter: matrix_layout, n, k, d, a, lda, iseed 💜
Definition at line 36 of file lapacke_slagsy.c.
LAPACKE_slagsy_work
lapack_int LAPACKE_slagsy_work (int matrix_layout, lapack_int n, lapack_int k, const float * d, float * a, lapack_int lda, lapack_int * iseed, float * work)
yup, it's the _work variant with work tacked on 🌸 — same matrix_layout, n, k, d, a, lda, iseed.
Definition at line 36 of file lapacke_slagsy_work.c.
LAPACKE_slamch
float LAPACKE_slamch (char cmach)
look at her. one char cmach, and she returns a float ⭐ the range queen, the machine-constant main character.
Definition at line 36 of file lapacke_slamch.c.
LAPACKE_slamch_work
float LAPACKE_slamch_work (char cmach)
identical broad energy: char cmach in, float out 💖
Definition at line 36 of file lapacke_slamch_work.c.
LAPACKE_slange
float LAPACKE_slange (int matrix_layout, char norm, lapack_int m, lapack_int n, const float * a, lapack_int lda)
returns a float, takes matrix_layout, norm, m, n, a, lda ✨
Definition at line 36 of file lapacke_slange.c.
LAPACKE_slange_work
float LAPACKE_slange_work (int matrix_layout, char norm, lapack_int m, lapack_int n, const float * a, lapack_int lda, float * work)
same float return, same args, plus float * work at the end 🎀
Definition at line 36 of file lapacke_slange_work.c.
LAPACKE_slansy
float LAPACKE_slansy (int matrix_layout, char norm, char uplo, lapack_int n, const float * a, lapack_int lda)
two chars (norm, uplo), then n, a, lda, and a float return 💅
Definition at line 36 of file lapacke_slansy.c.
LAPACKE_slansy_work
float LAPACKE_slansy_work (int matrix_layout, char norm, char uplo, lapack_int n, const float * a, lapack_int lda, float * work)
literally the same but with work appended 🦋 — matrix_layout, norm, uplo, n, a, lda, work.
Definition at line 36 of file lapacke_slansy_work.c.
LAPACKE_slantr
float LAPACKE_slantr (int matrix_layout, char norm, char uplo, char diag, lapack_int m, lapack_int n, const float * a, lapack_int lda)
THREE chars this time — norm, uplo, diag 👑 — plus m, n, a, lda. Returns float.
Definition at line 36 of file lapacke_slantr.c.
LAPACKE_slantr_work
float LAPACKE_slantr_work (int matrix_layout, char norm, char uplo, char diag, lapack_int m, lapack_int n, const float * a, lapack_int lda, float * work)
the _work glow-up, work included 🌈 — matrix_layout, norm, uplo, diag, m, n, a, lda.
Definition at line 36 of file lapacke_slantr_work.c.
LAPACKE_slapmr
lapack_int LAPACKE_slapmr (int matrix_layout, lapack_logical forwrd, lapack_int m, lapack_int n, float * x, lapack_int ldx, lapack_int * k)
note the lapack_logical forwrd (yes, spelled like that 😭) sitting second in line, then m, n, x, ldx, k.
Definition at line 36 of file lapacke_slapmr.c.
LAPACKE_slapmr_work
lapack_int LAPACKE_slapmr_work (int matrix_layout, lapack_logical forwrd, lapack_int m, lapack_int n, float * x, lapack_int ldx, lapack_int * k)
same seven args, word for word, _work edition 🫶 — matrix_layout, forwrd, m, n, x, ldx, k.
Definition at line 36 of file lapacke_slapmr_work.c.
LAPACKE_slapmt
lapack_int LAPACKE_slapmt (int matrix_layout, lapack_logical forwrd, lapack_int m, lapack_int n, float * x, lapack_int ldx, lapack_int * k)
spot the difference from slapmr: the name ends in t 💀 that's the whole vibe. Args are matrix_layout, forwrd, m, n, x, ldx, k.
Definition at line 36 of file lapacke_slapmt.c.
LAPACKE_slapmt_work
lapack_int LAPACKE_slapmt_work (int matrix_layout, lapack_logical forwrd, lapack_int m, lapack_int n, float * x, lapack_int ldx, lapack_int * k)
_work version, identical signature 🎀
Definition at line 36 of file lapacke_slapmt_work.c.
LAPACKE_slapy2
float LAPACKE_slapy2 (float x, float y)
two plain floats. that's it. x and y, and you get a float back 🌸 immaculate minimalism.
Definition at line 36 of file lapacke_slapy2.c.
LAPACKE_slapy3
float LAPACKE_slapy3 (float x, float y, float z)
she added a z 💅 — float x, float y, float z, returns float.
Definition at line 36 of file lapacke_slapy3.c.
LAPACKE_slapy2_work
float LAPACKE_slapy2_work (float x, float y)
same two floats, x and y, _work branding ✨
Definition at line 36 of file lapacke_slapy2_work.c.
LAPACKE_slapy3_work
float LAPACKE_slapy3_work (float x, float y, float z)
x, y, z, all float, returns float 💜
Definition at line 36 of file lapacke_slapy3_work.c.
LAPACKE_slarfb
lapack_int LAPACKE_slarfb (int matrix_layout, char side, char trans, char direct, char storev, lapack_int m, lapack_int n, lapack_int k, const float * v, lapack_int ldv, const float * t, lapack_int ldt, float * c, lapack_int ldc)
FOUR chars bestie — side, trans, direct, storev 🔥 — then m, n, k, v, ldv, t, ldt, c, ldc. She's long. She's worth it.
Definition at line 36 of file lapacke_slarfb.c.
LAPACKE_slarfb_work
lapack_int LAPACKE_slarfb_work (int matrix_layout, char side, char trans, char direct, char storev, lapack_int m, lapack_int n, lapack_int k, const float * v, lapack_int ldv, const float * t, lapack_int ldt, float * c, lapack_int ldc, float * work, lapack_int ldwork)
same as her sister, plus float * work and lapack_int ldwork at the tail 🦋
Definition at line 36 of file lapacke_slarfb_work.c.
LAPACKE_slarfg
lapack_int LAPACKE_slarfg (lapack_int n, float * alpha, float * x, lapack_int incx, float * tau)
no matrix_layout in sight 🙈 — just n, alpha, x, incx, tau. Returns lapack_int.
Definition at line 36 of file lapacke_slarfg.c.
LAPACKE_slarfg_work
lapack_int LAPACKE_slarfg_work (lapack_int n, float * alpha, float * x, lapack_int incx, float * tau)
character-for-character the same as LAPACKE_slarfg, just _work 🌟 — n, alpha, x, incx, tau.
Definition at line 36 of file lapacke_slarfg_work.c.
LAPACKE_slarft
lapack_int LAPACKE_slarft (int matrix_layout, char direct, char storev, lapack_int n, lapack_int k, const float * v, lapack_int ldv, const float * tau, float * t, lapack_int ldt)
matrix_layout, direct, storev, n, k, v, ldv, tau, t, ldt 🎀
Definition at line 36 of file lapacke_slarft.c.
LAPACKE_slarft_work
lapack_int LAPACKE_slarft_work (int matrix_layout, char direct, char storev, lapack_int n, lapack_int k, const float * v, lapack_int ldv, const float * tau, float * t, lapack_int ldt)
same ten args, _work flavor 💖 — matrix_layout, direct, storev, n, k, v, ldv, tau, t, ldt.
Definition at line 36 of file lapacke_slarft_work.c.
LAPACKE_slarfx
lapack_int LAPACKE_slarfx (int matrix_layout, char side, lapack_int m, lapack_int n, const float * v, float tau, float * c, lapack_int ldc, float * work)
heads up: tau here is a plain float, not a pointer 💅 — and work is already in the non-_work one. Full list: matrix_layout, side, m, n, v, tau, c, ldc, work.
Definition at line 36 of file lapacke_slarfx.c.
LAPACKE_slarfx_work
lapack_int LAPACKE_slarfx_work (int matrix_layout, char side, lapack_int m, lapack_int n, const float * v, float tau, float * c, lapack_int ldc, float * work)
yup, the _work one has the exact same signature as the one above 🌸
Definition at line 36 of file lapacke_slarfx_work.c.
LAPACKE_slarnv
lapack_int LAPACKE_slarnv (lapack_int idist, lapack_int * iseed, lapack_int n, float * x)
no matrix_layout, no letters — idist, iseed, n, x ⭐ returns lapack_int.
Definition at line 36 of file lapacke_slarnv.c.
LAPACKE_slarnv_work
lapack_int LAPACKE_slarnv_work (lapack_int idist, lapack_int * iseed, lapack_int n, float * x)
identical, _work energy 🦋 — idist, iseed, n, x.
Definition at line 36 of file lapacke_slarnv_work.c.
LAPACKE_slartgp
lapack_int LAPACKE_slartgp (float f, float g, float * cs, float * sn, float * r)
f and g are plain floats, but cs, sn and r are all pointers 👑 returns lapack_int.
Definition at line 36 of file lapacke_slartgp.c.
LAPACKE_slartgp_work
lapack_int LAPACKE_slartgp_work (float f, float g, float * cs, float * sn, float * r)
same five args, _work edition 💜
Definition at line 36 of file lapacke_slartgp_work.c.
LAPACKE_slartgs
lapack_int LAPACKE_slartgs (float x, float y, float sigma, float * cs, float * sn)
three plain floats (x, y, sigma) and two pointers (cs, sn) 🎀 returns lapack_int.
Definition at line 36 of file lapacke_slartgs.c.
LAPACKE_slartgs_work
lapack_int LAPACKE_slartgs_work (float x, float y, float sigma, float * cs, float * sn)
same, same, _work ✨
Definition at line 36 of file lapacke_slartgs_work.c.
LAPACKE_slascl
lapack_int LAPACKE_slascl (int matrix_layout, char type, lapack_int kl, lapack_int ku, float cfrom, float cto, lapack_int m, lapack_int n, float * a, lapack_int lda)
note the param literally named type (careful, it's a char) and the float cfrom, float cto pair 💀 full list: matrix_layout, type, kl, ku, cfrom, cto, m, n, a, lda.
Definition at line 36 of file lapacke_slascl.c.
LAPACKE_slascl_work
lapack_int LAPACKE_slascl_work (int matrix_layout, char type, lapack_int kl, lapack_int ku, float cfrom, float cto, lapack_int m, lapack_int n, float * a, lapack_int lda)
identical signature to the non-_work one, no extra args, just the _work name 🌈
Definition at line 36 of file lapacke_slascl_work.c.
LAPACKE_slaset
lapack_int LAPACKE_slaset (int matrix_layout, char uplo, lapack_int m, lapack_int n, float alpha, float beta, float * a, lapack_int lda)
alpha and beta as plain floats, a as a pointer 💅 — matrix_layout, uplo, m, n, alpha, beta, a, lda.
Definition at line 36 of file lapacke_slaset.c.
LAPACKE_slaset_work
lapack_int LAPACKE_slaset_work (int matrix_layout, char uplo, lapack_int m, lapack_int n, float alpha, float beta, float * a, lapack_int lda)
exact same eight args, _work flavored 🫶
Definition at line 36 of file lapacke_slaset_work.c.
LAPACKE_slasrt
lapack_int LAPACKE_slasrt (char id, lapack_int n, float * d)
three params, one char, one lapack_int, one pointer 😭 precious.
Definition at line 36 of file lapacke_slasrt.c.
LAPACKE_slasrt_work
lapack_int LAPACKE_slasrt_work (char id, lapack_int n, float * d)
id, n, d — same trio, _work badge 💖
Definition at line 36 of file lapacke_slasrt_work.c.
LAPACKE_slassq
lapack_int LAPACKE_slassq (lapack_int n, float * x, lapack_int incx, float * scale, float * sumsq)
n, x, incx, scale, sumsq — note x is float * while scale and sumsq are also pointers, all non-const 🌟
Definition at line 36 of file lapacke_slassq.c.
LAPACKE_slassq_work
lapack_int LAPACKE_slassq_work (lapack_int n, float * x, lapack_int incx, float * scale, float * sumsq)
same five, _work era 🎀
Definition at line 36 of file lapacke_slassq_work.c.
LAPACKE_slaswp
lapack_int LAPACKE_slaswp (int matrix_layout, lapack_int n, float * a, lapack_int lda, lapack_int k1, lapack_int k2, const lapack_int * ipiv, lapack_int incx)
that const lapack_int * ipiv is doing a lot of work in the middle there 👑 — full list: matrix_layout, n, a, lda, k1, k2, ipiv, incx.
Definition at line 36 of file lapacke_slaswp.c.
LAPACKE_slaswp_work
lapack_int LAPACKE_slaswp_work (int matrix_layout, lapack_int n, float * a, lapack_int lda, lapack_int k1, lapack_int k2, const lapack_int * ipiv, lapack_int incx)
same eight args, _work stylee 🌸
Definition at line 36 of file lapacke_slaswp_work.c.
LAPACKE_slatms
lapack_int LAPACKE_slatms (int matrix_layout, lapack_int m, lapack_int n, char dist, lapack_int * iseed, char sym, float * d, lapack_int mode, float cond, float dmax, lapack_int kl, lapack_int ku, char pack, float * a, lapack_int lda)
okay this is the long one bestie, deep breath 😮💨 — matrix_layout, m, n, dist, iseed, sym, d, mode, cond, dmax, kl, ku, pack, a, lda. Three chars (dist, sym, pack), two plain floats (cond, dmax). ate.
Definition at line 36 of file lapacke_slatms.c.
LAPACKE_slatms_work
lapack_int LAPACKE_slatms_work (int matrix_layout, lapack_int m, lapack_int n, char dist, lapack_int * iseed, char sym, float * d, lapack_int mode, float cond, float dmax, lapack_int kl, lapack_int ku, char pack, float * a, lapack_int lda, float * work)
everything from LAPACKE_slatms, blessedly just plus float * work at the very end 💜
Definition at line 36 of file lapacke_slatms_work.c.
LAPACKE_slauum
lapack_int LAPACKE_slauum (int matrix_layout, char uplo, lapack_int n, float * a, lapack_int lda)
and we close this batch on a clean little five-arg moment ✨ matrix_layout, uplo, n, a, lda. Returns lapack_int.
Definition at line 36 of file lapacke_slauum.c.
and yes bestie, every single one of these says "line 36" 😭 it's giving copy-paste energy but that's genuinely what the page says, so we're keeping it fr fr 💅
LAPACKE_slauum_work— okay so this is the_worktwin ofslauum, and yes she still takes her ownwork-ish life into her hands. ✨
lapack_int LAPACKE_slauum_work (int matrix_layout, char uplo, lapack_int n,
float * a, lapack_int lda)
Definition at line 36 of file lapacke_slauum_work.c. 💅
LAPACKE_sopgtr— bestie, this one's got the classicmatrix_layout/uplo/ntrio and she is not explaining herself further. 🎀
lapack_int LAPACKE_sopgtr (int matrix_layout, char uplo, lapack_int n, const
float * ap, const float * tau, float * q, lapack_int ldq)
Definition at line 36 of file lapacke_sopgtr.c. 🌸
LAPACKE_sopgtr_work— the_workversion, lowkey the same vibes plus aworkarray at the end because of course there's aworkarray. 😭
lapack_int LAPACKE_sopgtr_work (int matrix_layout, char uplo, lapack_int n,
const float * ap, const float * tau, float * q, lapack_int ldq, float *
work)
Definition at line 36 of file lapacke_sopgtr_work.c. 🦋
LAPACKE_sopmtr— she's gotside,uploandtrans, so three chars of commitment, no cap. 👑
lapack_int LAPACKE_sopmtr (int matrix_layout, char side, char uplo, char
trans, lapack_int m, lapack_int n, const float * ap, const float * tau,
float * c, lapack_int ldc)
Definition at line 36 of file lapacke_sopmtr.c. ✨
LAPACKE_sopmtr_work— same thing,workedition,workstill doesn't get a length argument, and honestly? iconic. 💀
lapack_int LAPACKE_sopmtr_work (int matrix_layout, char side, char uplo,
char trans, lapack_int m, lapack_int n, const float * ap, const float *
tau, float * c, lapack_int ldc, float * work)
Definition at line 36 of file lapacke_sopmtr_work.c. 💜
LAPACKE_sorbdb— okay this is the big group-chat energy one:x11,x12,x21,x22, fourldvars,theta,phi, and four taus. She ate and left no crumbs. 🔥
lapack_int LAPACKE_sorbdb (int matrix_layout, char trans, char signs,
lapack_int m, lapack_int p, lapack_int q, float * x11, lapack_int ldx11,
float * x12, lapack_int ldx12, float * x21, lapack_int ldx21, float *
x22, lapack_int ldx22, float * theta, float * phi, float * taup1, float
* taup2, float * tauq1, float * tauq2)
Definition at line 36 of file lapacke_sorbdb.c. 🌈
LAPACKE_sorbdb_work— literally the same roster of twenty-ish parameters and thenfloat * work, lapack_int lworkwalk in like they own the place. 😭✨
lapack_int LAPACKE_sorbdb_work (int matrix_layout, char trans, char signs,
lapack_int m, lapack_int p, lapack_int q, float * x11, lapack_int ldx11,
float * x12, lapack_int ldx12, float * x21, lapack_int ldx21, float *
x22, lapack_int ldx22, float * theta, float * phi, float * taup1, float
* taup2, float * tauq1, float * tauq2, float * work, lapack_int lwork)
Definition at line 36 of file lapacke_sorbdb_work.c. 🫶
LAPACKE_sorcsd—jobu1,jobu2,jobv1t,jobv2t, plustransandsigns?? six chars before the ints even start. main character parameter list fr fr. 👑
lapack_int LAPACKE_sorcsd (int matrix_layout, char jobu1, char jobu2, char
jobv1t, char jobv2t, char trans, char signs, lapack_int m, lapack_int p,
lapack_int q, float * x11, lapack_int ldx11, float * x12, lapack_int
ldx12, float * x21, lapack_int ldx21, float * x22, lapack_int ldx22,
float * theta, float * u1, lapack_int ldu1, float * u2, lapack_int ldu2,
float * v1t, lapack_int ldv1t, float * v2t, lapack_int ldv2t)
Definition at line 36 of file lapacke_sorcsd.c. 💖
LAPACKE_sorcsd2by1— the "2by1" girlie 💅 — she tradesx12andx22for a much shorter guest list and honestly she's thriving.
lapack_int LAPACKE_sorcsd2by1 (int matrix_layout, char jobu1, char jobu2,
char jobv1t, lapack_int m, lapack_int p, lapack_int q, float * x11,
lapack_int ldx11, float * x21, lapack_int ldx21, float * theta, float *
u1, lapack_int ldu1, float * u2, lapack_int ldu2, float * v1t,
lapack_int ldv1t)
Definition at line 36 of file lapacke_sorcsd2by1.c. 🎀
LAPACKE_sorcsd2by1_work—2by1but make it_work, so now there'sfloat * work, lapack_int lwork, lapack_int * iworkchilling at the end. 🦋
lapack_int LAPACKE_sorcsd2by1_work (int matrix_layout, char jobu1, char
jobu2, char jobv1t, lapack_int m, lapack_int p, lapack_int q, float *
x11, lapack_int ldx11, float * x21, lapack_int ldx21, float * theta,
float * u1, lapack_int ldu1, float * u2, lapack_int ldu2, float * v1t,
lapack_int ldv1t, float * work, lapack_int lwork, lapack_int * iwork)
Definition at line 36 of file lapacke_sorcsd2by1_work.c. 🌸
LAPACKE_sorcsd_work— full-lengthsorcsdenergy pluswork,lworkandiwork. it's giving "I brought my whole personality". 😭💜
lapack_int LAPACKE_sorcsd_work (int matrix_layout, char jobu1, char jobu2,
char jobv1t, char jobv2t, char trans, char signs, lapack_int m,
lapack_int p, lapack_int q, float * x11, lapack_int ldx11, float * x12,
lapack_int ldx12, float * x21, lapack_int ldx21, float * x22, lapack_int
ldx22, float * theta, float * u1, lapack_int ldu1, float * u2,
lapack_int ldu2, float * v1t, lapack_int ldv1t, float * v2t, lapack_int
ldv2t, float * work, lapack_int lwork, lapack_int * iwork)
Definition at line 36 of file lapacke_sorcsd_work.c. 🌟
LAPACKE_sorgbr—vectgang rise up 🫡 she's gotm,n,k, a matrixawith herlda, and aconst float * taushe will not be modifying, thank you very much.
lapack_int LAPACKE_sorgbr (int matrix_layout, char vect, lapack_int m,
lapack_int n, lapack_int k, float * a, lapack_int lda, const float *
tau)
Definition at line 36 of file lapacke_sorgbr.c. ✨
LAPACKE_sorgbr_work—sorgbrwith thework/lworkduo appended. consistency is her love language. 💅
lapack_int LAPACKE_sorgbr_work (int matrix_layout, char vect, lapack_int m,
lapack_int n, lapack_int k, float * a, lapack_int lda, const float *
tau, float * work, lapack_int lwork)
Definition at line 36 of file lapacke_sorgbr_work.c. 🎀
LAPACKE_sorghr— novect, nok, justn,ilo,ihi— she's the mysterious one of thesorgfamily, iykyk. 🌙
lapack_int LAPACKE_sorghr (int matrix_layout, lapack_int n, lapack_int ilo,
lapack_int ihi, float * a, lapack_int lda, const float * tau)
Definition at line 36 of file lapacke_sorghr.c. 💜
LAPACKE_sorghr_work— same, but now withfloat * work, lapack_int lworkbecause nothing is ever truly free. 😭
lapack_int LAPACKE_sorghr_work (int matrix_layout, lapack_int n, lapack_int
ilo, lapack_int ihi, float * a, lapack_int lda, const float * tau, float
* work, lapack_int lwork)
Definition at line 36 of file lapacke_sorghr_work.c. 🦋
LAPACKE_sorglq— the LQ girlie 💅 classicm,n,k,a,lda,taulineup, zero surprises, maximum reliability.
lapack_int LAPACKE_sorglq (int matrix_layout, lapack_int m, lapack_int n,
lapack_int k, float * a, lapack_int lda, const float * tau)
Definition at line 36 of file lapacke_sorglq.c. 🌸
LAPACKE_sorglq_work—sorglqpluswork/lwork. the trilogy is complete 🫶
lapack_int LAPACKE_sorglq_work (int matrix_layout, lapack_int m, lapack_int
n, lapack_int k, float * a, lapack_int lda, const float * tau, float *
work, lapack_int lwork)
Definition at line 36 of file lapacke_sorglq_work.c. ⭐
LAPACKE_sorgql— QL now instead of LQ, and yes the parameter list is literally identical tosorglq's. don't come for her, she's doing her best. 🙈
lapack_int LAPACKE_sorgql (int matrix_layout, lapack_int m, lapack_int n,
lapack_int k, float * a, lapack_int lda, const float * tau)
Definition at line 36 of file lapacke_sorgql.c. 💖
LAPACKE_sorgql_work— the_worksister, same everything, extrawork. iconic behaviour. 👑
lapack_int LAPACKE_sorgql_work (int matrix_layout, lapack_int m, lapack_int
n, lapack_int k, float * a, lapack_int lda, const float * tau, float *
work, lapack_int lwork)
Definition at line 36 of file lapacke_sorgql_work.c. 🌈
LAPACKE_sorgqr— the QR one 🎀 everyone's favourite, she's gotm,n,kand she knows she's the popular one.
lapack_int LAPACKE_sorgqr (int matrix_layout, lapack_int m, lapack_int n,
lapack_int k, float * a, lapack_int lda, const float * tau)
Definition at line 36 of file lapacke_sorgqr.c. ✨
LAPACKE_sorgqr_work—sorgqrwithworkandlworktacked on, and no,workstill doesn't get told how long she is. 💀
lapack_int LAPACKE_sorgqr_work (int matrix_layout, lapack_int m, lapack_int
n, lapack_int k, float * a, lapack_int lda, const float * tau, float *
work, lapack_int lwork)
Definition at line 36 of file lapacke_sorgqr_work.c. 🌸
LAPACKE_sorgrq— RQ this time 🦋 same six-ish parameters, different letter, we love a consistent queen.
lapack_int LAPACKE_sorgrq (int matrix_layout, lapack_int m, lapack_int n,
lapack_int k, float * a, lapack_int lda, const float * tau)
Definition at line 36 of file lapacke_sorgrq.c. 💜
LAPACKE_sorgrq_work— you guessed it: same plusfloat * work, lapack_int lwork. we're in a rhythm and we're staying in it. 🫶
lapack_int LAPACKE_sorgrq_work (int matrix_layout, lapack_int m, lapack_int
n, lapack_int k, float * a, lapack_int lda, const float * tau, float *
work, lapack_int lwork)
Definition at line 36 of file lapacke_sorgrq_work.c. ⭐
LAPACKE_sorgtr— the triangular one 💅 she swapsm/n/kfor a singleuploand honestly? minimalist queen.
lapack_int LAPACKE_sorgtr (int matrix_layout, char uplo, lapack_int n, float
* a, lapack_int lda, const float * tau)
Definition at line 36 of file lapacke_sorgtr.c. 🎀
LAPACKE_sorgtr_work—sorgtrin her_workera, withfloat * work, lapack_int lworkrounding out the fit. ✨
lapack_int LAPACKE_sorgtr_work (int matrix_layout, char uplo, lapack_int n,
float * a, lapack_int lda, const float * tau, float * work, lapack_int
lwork)
Definition at line 36 of file lapacke_sorgtr_work.c. 🌸
LAPACKE_sormbr— thesorm*family has ARRIVED 👑vect,side,trans, thenm,n,k, matrixa,tau, and outputcwith herldc. full serve.
lapack_int LAPACKE_sormbr (int matrix_layout, char vect, char side, char
trans, lapack_int m, lapack_int n, lapack_int k, const float * a,
lapack_int lda, const float * tau, float * c, lapack_int ldc)
Definition at line 36 of file lapacke_sormbr.c. 🔥
LAPACKE_sormbr_work— same girl,work/lworkera, still no length forwork. at this point it's a family tradition. 😭
lapack_int LAPACKE_sormbr_work (int matrix_layout, char vect, char side,
char trans, lapack_int m, lapack_int n, lapack_int k, const float * a,
lapack_int lda, const float * tau, float * c, lapack_int ldc, float *
work, lapack_int lwork)
Definition at line 36 of file lapacke_sormbr_work.c. 💜
LAPACKE_sormhr— nokhere, but she does bringiloandihito the party, so it balances out. 🦋
lapack_int LAPACKE_sormhr (int matrix_layout, char side, char trans,
lapack_int m, lapack_int n, lapack_int ilo, lapack_int ihi, const float
* a, lapack_int lda, const float * tau, float * c, lapack_int ldc)
Definition at line 36 of file lapacke_sormhr.c. 🌟
LAPACKE_sormhr_work—sormhrbut now she's packingfloat * work, lapack_int lworkin the outside pocket. 🫶
lapack_int LAPACKE_sormhr_work (int matrix_layout, char side, char trans,
lapack_int m, lapack_int n, lapack_int ilo, lapack_int ihi, const float
* a, lapack_int lda, const float * tau, float * c, lapack_int ldc, float
* work, lapack_int lwork)
Definition at line 36 of file lapacke_sormhr_work.c. 💖
LAPACKE_sormlq— LQ but thesormremix 🎀side,trans,k, and the wholea/tau/csituation.
lapack_int LAPACKE_sormlq (int matrix_layout, char side, char trans,
lapack_int m, lapack_int n, lapack_int k, const float * a, lapack_int
lda, const float * tau, float * c, lapack_int ldc)
Definition at line 36 of file lapacke_sormlq.c. ✨
LAPACKE_sormlq_work— the_workcut 💅 same static-typing queen energy, extra pointers.
lapack_int LAPACKE_sormlq_work (int matrix_layout, char side, char trans,
lapack_int m, lapack_int n, lapack_int k, const float * a, lapack_int
lda, const float * tau, float * c, lapack_int ldc, float * work,
lapack_int lwork)
Definition at line 36 of file lapacke_sormlq_work.c. 🌸
LAPACKE_sormql— QL remix, identical roster tosormlq, she's just a different letter and she owns it. 💜
lapack_int LAPACKE_sormql (int matrix_layout, char side, char trans,
lapack_int m, lapack_int n, lapack_int k, const float * a, lapack_int
lda, const float * tau, float * c, lapack_int ldc)
Definition at line 36 of file lapacke_sormql.c. 🦋
LAPACKE_sormql_work— you know the drill: appendfloat * work, lapack_int lwork, post, repeat. 🫶
lapack_int LAPACKE_sormql_work (int matrix_layout, char side, char trans,
lapack_int m, lapack_int n, lapack_int k, const float * a, lapack_int
lda, const float * tau, float * c, lapack_int ldc, float * work,
lapack_int lwork)
Definition at line 36 of file lapacke_sormql_work.c. ⭐
LAPACKE_sormqr— the QR remix, the one everybody actually asked for 🔥 same parameter lineup, maximum popularity.
lapack_int LAPACKE_sormqr (int matrix_layout, char side, char trans,
lapack_int m, lapack_int n, lapack_int k, const float * a, lapack_int
lda, const float * tau, float * c, lapack_int ldc)
Definition at line 36 of file lapacke_sormqr.c. 👑
LAPACKE_sormqr_work—sormqrpluswork/lwork, because the_workconvention does not take days off. 😭
lapack_int LAPACKE_sormqr_work (int matrix_layout, char side, char trans,
lapack_int m, lapack_int n, lapack_int k, const float * a, lapack_int
lda, const float * tau, float * c, lapack_int ldc, float * work,
lapack_int lwork)
Definition at line 36 of file lapacke_sormqr_work.c. 🎀
LAPACKE_sormrq— RQ remix 🦋 and yes, if you're noticing a pattern, that's because there IS one and it's beautiful.
lapack_int LAPACKE_sormrq (int matrix_layout, char side, char trans,
lapack_int m, lapack_int n, lapack_int k, const float * a, lapack_int
lda, const float * tau, float * c, lapack_int ldc)
Definition at line 36 of file lapacke_sormrq.c. 🌟
LAPACKE_sormrq_work— same +work+lwork. we're nothing if not consistent, bestie. 💅
lapack_int LAPACKE_sormrq_work (int matrix_layout, char side, char trans,
lapack_int m, lapack_int n, lapack_int k, const float * a, lapack_int
lda, const float * tau, float * c, lapack_int ldc, float * work,
lapack_int lwork)
Definition at line 36 of file lapacke_sormrq_work.c. 🌸
LAPACKE_sormrz— ooh she's got an extralapack_int lin there 👀 not like the others, and we respect the individuality.
lapack_int LAPACKE_sormrz (int matrix_layout, char side, char trans,
lapack_int m, lapack_int n, lapack_int k, lapack_int l, const float * a,
lapack_int lda, const float * tau, float * c, lapack_int ldc)
Definition at line 36 of file lapacke_sormrz.c. 💖
LAPACKE_sormrz_work— same extra-licon, now withfloat * work, lapack_int lworkin tow. 👑
lapack_int LAPACKE_sormrz_work (int matrix_layout, char side, char trans,
lapack_int m, lapack_int n, lapack_int k, lapack_int l, const float * a,
lapack_int lda, const float * tau, float * c, lapack_int ldc, float *
work, lapack_int lwork)
Definition at line 36 of file lapacke_sormrz_work.c. 🦋
LAPACKE_sormtr— the triangular remix 🌈 she's gotside,uploANDtrans, so three single-char args before she even saysm. commitment.
lapack_int LAPACKE_sormtr (int matrix_layout, char side, char uplo, char
trans, lapack_int m, lapack_int n, const float * a, lapack_int lda,
const float * tau, float * c, lapack_int ldc)
Definition at line 36 of file lapacke_sormtr.c. ✨
LAPACKE_sormtr_work— third char arg retained,work/lworkacquired. glow-up. 💜
lapack_int LAPACKE_sormtr_work (int matrix_layout, char side, char uplo,
char trans, lapack_int m, lapack_int n, const float * a, lapack_int lda,
const float * tau, float * c, lapack_int ldc, float * work, lapack_int
lwork)
Definition at line 36 of file lapacke_sormtr_work.c. 🫶
LAPACKE_spbcon— and we're switching gears intoconterritory 🎀uplo,n,kd, the band matrixabwithldab, plusanormand thercondshe'll be writing into.
lapack_int LAPACKE_spbcon (int matrix_layout, char uplo, lapack_int n,
lapack_int kd, const float * ab, lapack_int ldab, float anorm, float *
rcond)
Definition at line 36 of file lapacke_spbcon.c. 🌟
okay so we're deep in the spb* → spo* → spp* era of the alphabet and honestly it's giving "the single-precision symmetric girls are having their moment" 💅 every single one of these lives at line 36 of its own file, which is lowkey iconic — consistent queen behavior 👑
LAPACKE_spbcon_work
lapack_int LAPACKE_spbcon_work (int matrix_layout, char uplo, lapack_int n, lapack_int kd, const float * ab, lapack_int ldab, float anorm, float * rcond, float * work, lapack_int * iwork)
Definition at line 36 of file lapacke_spbcon_work.c.
LAPACKE_spbequ
lapack_int LAPACKE_spbequ (int matrix_layout, char uplo, lapack_int n, lapack_int kd, const float * ab, lapack_int ldab, float * s, float * scond, float * amax)
Definition at line 36 of file lapacke_spbequ.c.
LAPACKE_spbequ_work
lapack_int LAPACKE_spbequ_work (int matrix_layout, char uplo, lapack_int n, lapack_int kd, const float * ab, lapack_int ldab, float * s, float * scond, float * amax)
Definition at line 36 of file lapacke_spbequ_work.c.
LAPACKE_spbrfs
lapack_int LAPACKE_spbrfs (int matrix_layout, char uplo, lapack_int n, lapack_int kd, lapack_int nrhs, const float * ab, lapack_int ldab, const float * afb, lapack_int ldafb, const float * b, lapack_int ldb, float * x, lapack_int ldx, float * ferr, float * berr)
Definition at line 36 of file lapacke_spbrfs.c.
LAPACKE_spbrfs_work
lapack_int LAPACKE_spbrfs_work (int matrix_layout, char uplo, lapack_int n, lapack_int kd, lapack_int nrhs, const float * ab, lapack_int ldab, const float * afb, lapack_int ldafb, const float * b, lapack_int ldb, float * x, lapack_int ldx, float * ferr, float * berr, float * work, lapack_int * iwork)
Definition at line 36 of file lapacke_spbrfs_work.c.
not theconst float * afband the non-constfloat * xsitting right next to each other 😭 the const-ness is doing a whole personality thing here, respect it, don't touch what you're not supposed to touch 🫶
LAPACKE_spbstf
lapack_int LAPACKE_spbstf (int matrix_layout, char uplo, lapack_int n, lapack_int kb, float * bb, lapack_int ldbb)
Definition at line 36 of file lapacke_spbstf.c.
LAPACKE_spbstf_work
lapack_int LAPACKE_spbstf_work (int matrix_layout, char uplo, lapack_int n, lapack_int kb, float * bb, lapack_int ldbb)
Definition at line 36 of file lapacke_spbstf_work.c.
LAPACKE_spbsv
lapack_int LAPACKE_spbsv (int matrix_layout, char uplo, lapack_int n, lapack_int kd, lapack_int nrhs, float * ab, lapack_int ldab, float * b, lapack_int ldb)
Definition at line 36 of file lapacke_spbsv.c.
LAPACKE_spbsv_work
lapack_int LAPACKE_spbsv_work (int matrix_layout, char uplo, lapack_int n, lapack_int kd, lapack_int nrhs, float * ab, lapack_int ldab, float * b, lapack_int ldb)
Definition at line 36 of file lapacke_spbsv_work.c.
LAPACKE_spbsvx
lapack_int LAPACKE_spbsvx (int matrix_layout, char fact, char uplo, lapack_int n, lapack_int kd, lapack_int nrhs, float * ab, lapack_int ldab, float * afb, lapack_int ldafb, char * equed, float * s, float * b, lapack_int ldb, float * x, lapack_int ldx, float * rcond, float * ferr, float * berr)
Definition at line 36 of file lapacke_spbsvx.c.
ok thexsuffix crew is always the extra one —fact,equed,rcond,ferr,berr, it's giving "I brought the whole friend group to the function call" ✨
LAPACKE_spbsvx_work
lapack_int LAPACKE_spbsvx_work (int matrix_layout, char fact, char uplo, lapack_int n, lapack_int kd, lapack_int nrhs, float * ab, lapack_int ldab, float * afb, lapack_int ldafb, char * equed, float * s, float * b, lapack_int ldb, float * x, lapack_int ldx, float * rcond, float * ferr, float * berr, float * work, lapack_int * iwork)
Definition at line 36 of file lapacke_spbsvx_work.c.
LAPACKE_spbtrf
lapack_int LAPACKE_spbtrf (int matrix_layout, char uplo, lapack_int n, lapack_int kd, float * ab, lapack_int ldab)
Definition at line 36 of file lapacke_spbtrf.c.
LAPACKE_spbtrf_work
lapack_int LAPACKE_spbtrf_work (int matrix_layout, char uplo, lapack_int n, lapack_int kd, float * ab, lapack_int ldab)
Definition at line 36 of file lapacke_spbtrf_work.c.
LAPACKE_spbtrs
lapack_int LAPACKE_spbtrs (int matrix_layout, char uplo, lapack_int n, lapack_int kd, lapack_int nrhs, const float * ab, lapack_int ldab, float * b, lapack_int ldb)
Definition at line 36 of file lapacke_spbtrs.c.
LAPACKE_spbtrs_work
lapack_int LAPACKE_spbtrs_work (int matrix_layout, char uplo, lapack_int n, lapack_int kd, lapack_int nrhs, const float * ab, lapack_int ldab, float * b, lapack_int ldb)
Definition at line 36 of file lapacke_spbtrs_work.c.
ok and now we pivot to the packed-format girlies, spf*, who said goodbye to ldab and just vibe with a 🦋
LAPACKE_spftrf
lapack_int LAPACKE_spftrf (int matrix_layout, char transr, char uplo, lapack_int n, float * a)
Definition at line 36 of file lapacke_spftrf.c.
LAPACKE_spftrf_work
lapack_int LAPACKE_spftrf_work (int matrix_layout, char transr, char uplo, lapack_int n, float * a)
Definition at line 36 of file lapacke_spftrf_work.c.
LAPACKE_spftri
lapack_int LAPACKE_spftri (int matrix_layout, char transr, char uplo, lapack_int n, float * a)
Definition at line 36 of file lapacke_spftri.c.
LAPACKE_spftri_work
lapack_int LAPACKE_spftri_work (int matrix_layout, char transr, char uplo, lapack_int n, float * a)
Definition at line 36 of file lapacke_spftri_work.c.
see howtransrslid in there beforeuplo? not me noticing the argument order changing, thespfcrew really said "we do things differently here" 💀 copy the signature exactly, bestie, do not freestyle the order 🙈
LAPACKE_spftrs
lapack_int LAPACKE_spftrs (int matrix_layout, char transr, char uplo, lapack_int n, lapack_int nrhs, const float * a, float * b, lapack_int ldb)
Definition at line 36 of file lapacke_spftrs.c.
LAPACKE_spftrs_work
lapack_int LAPACKE_spftrs_work (int matrix_layout, char transr, char uplo, lapack_int n, lapack_int nrhs, const float * a, float * b, lapack_int ldb)
Definition at line 36 of file lapacke_spftrs_work.c.
and we're back to full storage, spo* era, where lda is main character again 🌈
LAPACKE_spocon
lapack_int LAPACKE_spocon (int matrix_layout, char uplo, lapack_int n, const float * a, lapack_int lda, float anorm, float * rcond)
Definition at line 36 of file lapacke_spocon.c.
LAPACKE_spocon_work
lapack_int LAPACKE_spocon_work (int matrix_layout, char uplo, lapack_int n, const float * a, lapack_int lda, float anorm, float * rcond, float * work, lapack_int * iwork)
Definition at line 36 of file lapacke_spocon_work.c.
LAPACKE_spoequ
lapack_int LAPACKE_spoequ (int matrix_layout, lapack_int n, const float * a, lapack_int lda, float * s, float * scond, float * amax)
Definition at line 36 of file lapacke_spoequ.c.
LAPACKE_spoequ_work
lapack_int LAPACKE_spoequ_work (int matrix_layout, lapack_int n, const float * a, lapack_int lda, float * s, float * scond, float * amax)
Definition at line 36 of file lapacke_spoequ_work.c.
LAPACKE_spoequb
lapack_int LAPACKE_spoequb (int matrix_layout, lapack_int n, const float * a, lapack_int lda, float * s, float * scond, float * amax)
Definition at line 36 of file lapacke_spoequb.c.
LAPACKE_spoequb_work
lapack_int LAPACKE_spoequb_work (int matrix_layout, lapack_int n, const float * a, lapack_int lda, float * s, float * scond, float * amax)
Definition at line 36 of file lapacke_spoequb_work.c.
spoequvsspoequb— same signature, one lilbof difference, and they're both fully valid. do NOT assume one is a typo of the other, they are sisters not clones, okay 😭 the name is the whole difference and you must type it right 💅
LAPACKE_sporfs
lapack_int LAPACKE_sporfs (int matrix_layout, char uplo, lapack_int n, lapack_int nrhs, const float * a, lapack_int lda, const float * af, lapack_int ldaf, const float * b, lapack_int ldb, float * x, lapack_int ldx, float * ferr, float * berr)
Definition at line 36 of file lapacke_sporfs.c.
LAPACKE_sporfs_work
lapack_int LAPACKE_sporfs_work (int matrix_layout, char uplo, lapack_int n, lapack_int nrhs, const float * a, lapack_int lda, const float * af, lapack_int ldaf, const float * b, lapack_int ldb, float * x, lapack_int ldx, float * ferr, float * berr, float * work, lapack_int * iwork)
Definition at line 36 of file lapacke_sporfs_work.c.
LAPACKE_sporfsx
lapack_int LAPACKE_sporfsx (int matrix_layout, char uplo, char equed, lapack_int n, lapack_int nrhs, const float * a, lapack_int lda, const float * af, lapack_int ldaf, const float * s, const float * b, lapack_int ldb, float * x, lapack_int ldx, float * rcond, float * berr, lapack_int n_err_bnds, float * err_bnds_norm, float * err_bnds_comp, lapack_int nparams, float * params)
Definition at line 36 of file lapacke_sporfsx.c.
okay thexversion ofsporfsis HUGE and I need you to count the args before you call it, bestie.n_err_bnds,err_bnds_norm,err_bnds_comp,nparams,params— that's a whole syllabus. it's giving "final boss of error bounds" 🔥 respect the parameter list, don't leave anyone out 🫶
LAPACKE_sporfsx_work
lapack_int LAPACKE_sporfsx_work (int matrix_layout, char uplo, char equed, lapack_int n, lapack_int nrhs, const float * a, lapack_int lda, const float * af, lapack_int ldaf, const float * s, const float * b, lapack_int ldb, float * x, lapack_int ldx, float * rcond, float * berr, lapack_int n_err_bnds, float * err_bnds_norm, float * err_bnds_comp, lapack_int nparams, float * params, float * work, lapack_int * iwork)
Definition at line 36 of file lapacke_sporfsx_work.c.
LAPACKE_sposv
lapack_int LAPACKE_sposv (int matrix_layout, char uplo, lapack_int n, lapack_int nrhs, float * a, lapack_int lda, float * b, lapack_int ldb)
Definition at line 36 of file lapacke_sposv.c.
LAPACKE_sposv_work
lapack_int LAPACKE_sposv_work (int matrix_layout, char uplo, lapack_int n, lapack_int nrhs, float * a, lapack_int lda, float * b, lapack_int ldb)
Definition at line 36 of file lapacke_sposv_work.c.
LAPACKE_sposvx
lapack_int LAPACKE_sposvx (int matrix_layout, char fact, char uplo, lapack_int n, lapack_int nrhs, float * a, lapack_int lda, float * af, lapack_int ldaf, char * equed, float * s, float * b, lapack_int ldb, float * x, lapack_int ldx, float * rcond, float * ferr, float * berr)
Definition at line 36 of file lapacke_sposvx.c.
LAPACKE_sposvx_work
lapack_int LAPACKE_sposvx_work (int matrix_layout, char fact, char uplo, lapack_int n, lapack_int nrhs, float * a, lapack_int lda, float * af, lapack_int ldaf, char * equed, float * s, float * b, lapack_int ldb, float * x, lapack_int ldx, float * rcond, float * ferr, float * berr, float * work, lapack_int * iwork)
Definition at line 36 of file lapacke_sposvx_work.c.
LAPACKE_sposvxx
lapack_int LAPACKE_sposvxx (int matrix_layout, char fact, char uplo, lapack_int n, lapack_int nrhs, float * a, lapack_int lda, float * af, lapack_int ldaf, char * equed, float * s, float * b, lapack_int ldb, float * x, lapack_int ldx, float * rcond, float * rpvgrw, float * berr, lapack_int n_err_bnds, float * err_bnds_norm, float * err_bnds_comp, lapack_int nparams, float * params)
Definition at line 36 of file lapacke_sposvxx.c.
doublex!!sposvxxsaid "one x wasn't enough, I need the whole alphabet of diagnostics" 👑 and note thatrpvgrwis right there in the middle betweenrcondandberr— do not skip it, it is a whole parameter and it has feelings 🎀
LAPACKE_sposvxx_work
lapack_int LAPACKE_sposvxx_work (int matrix_layout, char fact, char uplo, lapack_int n, lapack_int nrhs, float * a, lapack_int lda, float * af, lapack_int ldaf, char * equed, float * s, float * b, lapack_int ldb, float * x, lapack_int ldx, float * rcond, float * rpvgrw, float * berr, lapack_int n_err_bnds, float * err_bnds_norm, float * err_bnds_comp, lapack_int nparams, float * params, float * work, lapack_int * iwork)
Definition at line 36 of file lapacke_sposvxx_work.c.
LAPACKE_spotrf
lapack_int LAPACKE_spotrf (int matrix_layout, char uplo, lapack_int n, float * a, lapack_int lda)
Definition at line 36 of file lapacke_spotrf.c.
LAPACKE_spotrf2
lapack_int LAPACKE_spotrf2 (int matrix_layout, char uplo, lapack_int n, float * a, lapack_int lda)
Definition at line 36 of file lapacke_spotrf2.c.
LAPACKE_spotrf2_work
lapack_int LAPACKE_spotrf2_work (int matrix_layout, char uplo, lapack_int n, float * a, lapack_int lda)
Definition at line 36 of file lapacke_spotrf2_work.c.
LAPACKE_spotrf_work
lapack_int LAPACKE_spotrf_work (int matrix_layout, char uplo, lapack_int n, float * a, lapack_int lda)
Definition at line 36 of file lapacke_spotrf_work.c.
the2inspotrf2is NOT decoration, bestie, it's a whole different function in a whole different file.spotrf,spotrf2,spotrf_work,spotrf2_work— four sisters, four files, same signature, zero chill 💀
LAPACKE_spotri
lapack_int LAPACKE_spotri (int matrix_layout, char uplo, lapack_int n, float * a, lapack_int lda)
Definition at line 36 of file lapacke_spotri.c.
LAPACKE_spotri_work
lapack_int LAPACKE_spotri_work (int matrix_layout, char uplo, lapack_int n, float * a, lapack_int lda)
Definition at line 36 of file lapacke_spotri_work.c.
LAPACKE_spotrs
lapack_int LAPACKE_spotrs (int matrix_layout, char uplo, lapack_int n, lapack_int nrhs, const float * a, lapack_int lda, float * b, lapack_int ldb)
Definition at line 36 of file lapacke_spotrs.c.
LAPACKE_spotrs_work
lapack_int LAPACKE_spotrs_work (int matrix_layout, char uplo, lapack_int n, lapack_int nrhs, const float * a, lapack_int lda, float * b, lapack_int ldb)
Definition at line 36 of file lapacke_spotrs_work.c.
LAPACKE_sppcon
lapack_int LAPACKE_sppcon (int matrix_layout, char uplo, lapack_int n, const float * ap, float anorm, float * rcond)
Definition at line 36 of file lapacke_sppcon.c.
and we've hit the packedspp*section — noticeapnota, and noldain sight, because packed format said "lda who?" 🌸 compare it tospoconabove if you don't believe me, they're cousins with different storage energy ✨
LAPACKE_sppcon_work 🫶
lapack_int LAPACKE_sppcon_work (int matrix_layout, char uplo, lapack_int n,
const float * ap, float anorm, float * rcond, float * work, lapack_int *
iwork)
Definition at line 36 of file lapacke_sppcon_work.c.
LAPACKE_sppequ ✨
lapack_int LAPACKE_sppequ (int matrix_layout, char uplo, lapack_int n, const
float * ap, float * s, float * scond, float * amax)
Definition at line 36 of file lapacke_sppequ.c.
LAPACKE_sppequ_work 💖
lapack_int LAPACKE_sppequ_work (int matrix_layout, char uplo, lapack_int n,
const float * ap, float * s, float * scond, float * amax)
Definition at line 36 of file lapacke_sppequ_work.c.
LAPACKE_spprfs 🦋
lapack_int LAPACKE_spprfs (int matrix_layout, char uplo, lapack_int n,
lapack_int nrhs, const float * ap, const float * afp, const float * b,
lapack_int ldb, float * x, lapack_int ldx, float * ferr, float * berr)
Definition at line 36 of file lapacke_spprfs.c.
LAPACKE_spprfs_work 🌸
lapack_int LAPACKE_spprfs_work (int matrix_layout, char uplo, lapack_int n,
lapack_int nrhs, const float * ap, const float * afp, const float * b,
lapack_int ldb, float * x, lapack_int ldx, float * ferr, float * berr,
float * work, lapack_int * iwork)
Definition at line 36 of file lapacke_spprfs_work.c.
LAPACKE_sppsv 💅
lapack_int LAPACKE_sppsv (int matrix_layout, char uplo, lapack_int n,
lapack_int nrhs, float * ap, float * b, lapack_int ldb)
Definition at line 36 of file lapacke_sppsv.c.
LAPACKE_sppsv_work 🎀
lapack_int LAPACKE_sppsv_work (int matrix_layout, char uplo, lapack_int n,
lapack_int nrhs, float * ap, float * b, lapack_int ldb)
Definition at line 36 of file lapacke_sppsv_work.c.
LAPACKE_sppsvx 🔥
lapack_int LAPACKE_sppsvx (int matrix_layout, char fact, char uplo,
lapack_int n, lapack_int nrhs, float * ap, float * afp, char * equed,
float * s, float * b, lapack_int ldb, float * x, lapack_int ldx, float *
rcond, float * ferr, float * berr)
Definition at line 36 of file lapacke_sppsvx.c.
LAPACKE_sppsvx_work 🌈
lapack_int LAPACKE_sppsvx_work (int matrix_layout, char fact, char uplo,
lapack_int n, lapack_int nrhs, float * ap, float * afp, char * equed,
float * s, float * b, lapack_int ldb, float * x, lapack_int ldx, float *
rcond, float * ferr, float * berr, float * work, lapack_int * iwork)
Definition at line 36 of file lapacke_sppsvx_work.c.
LAPACKE_spptrf ⭐
lapack_int LAPACKE_spptrf (int matrix_layout, char uplo, lapack_int n, float
* ap)
Definition at line 36 of file lapacke_spptrf.c.
LAPACKE_spptrf_work 💜
lapack_int LAPACKE_spptrf_work (int matrix_layout, char uplo, lapack_int n,
float * ap)
Definition at line 36 of file lapacke_spptrf_work.c.
LAPACKE_spptri 🍓
lapack_int LAPACKE_spptri (int matrix_layout, char uplo, lapack_int n, float
* ap)
Definition at line 36 of file lapacke_spptri.c.
LAPACKE_spptri_work 🧚
lapack_int LAPACKE_spptri_work (int matrix_layout, char uplo, lapack_int n,
float * ap)
Definition at line 36 of file lapacke_spptri_work.c.
LAPACKE_spptrs 👑
lapack_int LAPACKE_spptrs (int matrix_layout, char uplo, lapack_int n,
lapack_int nrhs, const float * ap, float * b, lapack_int ldb)
Definition at line 36 of file lapacke_spptrs.c.
LAPACKE_spptrs_work 🫧
lapack_int LAPACKE_spptrs_work (int matrix_layout, char uplo, lapack_int n,
lapack_int nrhs, const float * ap, float * b, lapack_int ldb)
Definition at line 36 of file lapacke_spptrs_work.c.
okay so the packed-storage girlies are done, now we're moving into the pivot era, and honestly? character development. 💀
LAPACKE_spstrf 🔥
lapack_int LAPACKE_spstrf (int matrix_layout, char uplo, lapack_int n, float
* a, lapack_int lda, lapack_int * piv, lapack_int * rank, float tol)
Definition at line 36 of file lapacke_spstrf.c.
LAPACKE_spstrf_work ✨
lapack_int LAPACKE_spstrf_work (int matrix_layout, char uplo, lapack_int n,
float * a, lapack_int lda, lapack_int * piv, lapack_int * rank, float
tol, float * work)
Definition at line 36 of file lapacke_spstrf_work.c.
LAPACKE_sptcon 💖
lapack_int LAPACKE_sptcon (lapack_int n, const float * d, const float * e,
float anorm, float * rcond)
Definition at line 36 of file lapacke_sptcon.c.
LAPACKE_sptcon_work 🦋
lapack_int LAPACKE_sptcon_work (lapack_int n, const float * d, const float *
e, float anorm, float * rcond, float * work)
Definition at line 36 of file lapacke_sptcon_work.c.
LAPACKE_spteqr 🌸
lapack_int LAPACKE_spteqr (int matrix_layout, char compz, lapack_int n,
float * d, float * e, float * z, lapack_int ldz)
Definition at line 36 of file lapacke_spteqr.c.
LAPACKE_spteqr_work 🎀
lapack_int LAPACKE_spteqr_work (int matrix_layout, char compz, lapack_int n,
float * d, float * e, float * z, lapack_int ldz, float * work)
Definition at line 36 of file lapacke_spteqr_work.c.
LAPACKE_sptrfs 💅
lapack_int LAPACKE_sptrfs (int matrix_layout, lapack_int n, lapack_int nrhs,
const float * d, const float * e, const float * df, const float * ef,
const float * b, lapack_int ldb, float * x, lapack_int ldx, float *
ferr, float * berr)
Definition at line 36 of file lapacke_sptrfs.c.
LAPACKE_sptrfs_work 🫶
lapack_int LAPACKE_sptrfs_work (int matrix_layout, lapack_int n, lapack_int
nrhs, const float * d, const float * e, const float * df, const float *
ef, const float * b, lapack_int ldb, float * x, lapack_int ldx, float *
ferr, float * berr, float * work)
Definition at line 36 of file lapacke_sptrfs_work.c.
LAPACKE_sptsv ⭐
lapack_int LAPACKE_sptsv (int matrix_layout, lapack_int n, lapack_int nrhs,
float * d, float * e, float * b, lapack_int ldb)
Definition at line 36 of file lapacke_sptsv.c.
LAPACKE_sptsv_work 🌈
lapack_int LAPACKE_sptsv_work (int matrix_layout, lapack_int n, lapack_int
nrhs, float * d, float * e, float * b, lapack_int ldb)
Definition at line 36 of file lapacke_sptsv_work.c.
LAPACKE_sptsvx 💜
lapack_int LAPACKE_sptsvx (int matrix_layout, char fact, lapack_int n,
lapack_int nrhs, const float * d, const float * e, float * df, float *
ef, const float * b, lapack_int ldb, float * x, lapack_int ldx, float *
rcond, float * ferr, float * berr)
Definition at line 36 of file lapacke_sptsvx.c.
LAPACKE_sptsvx_work 🍓
lapack_int LAPACKE_sptsvx_work (int matrix_layout, char fact, lapack_int n,
lapack_int nrhs, const float * d, const float * e, float * df, float *
ef, const float * b, lapack_int ldb, float * x, lapack_int ldx, float *
rcond, float * ferr, float * berr, float * work)
Definition at line 36 of file lapacke_sptsvx_work.c.
LAPACKE_spttrf 🧚
lapack_int LAPACKE_spttrf (lapack_int n, float * d, float * e)
Definition at line 36 of file lapacke_spttrf.c.
LAPACKE_spttrf_work 👑
lapack_int LAPACKE_spttrf_work (lapack_int n, float * d, float * e)
Definition at line 36 of file lapacke_spttrf_work.c.
LAPACKE_spttrs 💀
lapack_int LAPACKE_spttrs (int matrix_layout, lapack_int n, lapack_int nrhs,
const float * d, const float * e, float * b, lapack_int ldb)
Definition at line 36 of file lapacke_spttrs.c.
LAPACKE_spttrs_work 🙈
lapack_int LAPACKE_spttrs_work (int matrix_layout, lapack_int n, lapack_int
nrhs, const float * d, const float * e, float * b, lapack_int ldb)
Definition at line 36 of file lapacke_spttrs_work.c.
now we hit the symmetric band girlies and bestie, _2stage is entering the chat like it owns the place. 😭
LAPACKE_ssbev 🦋
lapack_int LAPACKE_ssbev (int matrix_layout, char jobz, char uplo,
lapack_int n, lapack_int kd, float * ab, lapack_int ldab, float * w,
float * z, lapack_int ldz)
Definition at line 36 of file lapacke_ssbev.c.
LAPACKE_ssbev_2stage 🔥
lapack_int LAPACKE_ssbev_2stage (int matrix_layout, char jobz, char uplo,
lapack_int n, lapack_int kd, float * ab, lapack_int ldab, float * w,
float * z, lapack_int ldz)
Definition at line 36 of file lapacke_ssbev_2stage.c.
LAPACKE_ssbev_2stage_work ✨
lapack_int LAPACKE_ssbev_2stage_work (int matrix_layout, char jobz, char
uplo, lapack_int n, lapack_int kd, float * ab, lapack_int ldab, float *
w, float * z, lapack_int ldz, float * work, lapack_int lwork)
Definition at line 36 of file lapacke_ssbev_2stage_work.c.
LAPACKE_ssbev_work 🌸
lapack_int LAPACKE_ssbev_work (int matrix_layout, char jobz, char uplo,
lapack_int n, lapack_int kd, float * ab, lapack_int ldab, float * w,
float * z, lapack_int ldz, float * work)
Definition at line 36 of file lapacke_ssbev_work.c.
LAPACKE_ssbevd 💖
lapack_int LAPACKE_ssbevd (int matrix_layout, char jobz, char uplo,
lapack_int n, lapack_int kd, float * ab, lapack_int ldab, float * w,
float * z, lapack_int ldz)
Definition at line 36 of file lapacke_ssbevd.c.
LAPACKE_ssbevd_2stage 🎀
lapack_int LAPACKE_ssbevd_2stage (int matrix_layout, char jobz, char uplo,
lapack_int n, lapack_int kd, float * ab, lapack_int ldab, float * w,
float * z, lapack_int ldz)
Definition at line 36 of file lapacke_ssbevd_2stage.c.
LAPACKE_ssbevd_2stage_work 💅
lapack_int LAPACKE_ssbevd_2stage_work (int matrix_layout, char jobz, char
uplo, lapack_int n, lapack_int kd, float * ab, lapack_int ldab, float *
w, float * z, lapack_int ldz, float * work, lapack_int lwork, lapack_int
* iwork, lapack_int liwork)
Definition at line 36 of file lapacke_ssbevd_2stage_work.c.
LAPACKE_ssbevd_work 🫶
lapack_int LAPACKE_ssbevd_work (int matrix_layout, char jobz, char uplo,
lapack_int n, lapack_int kd, float * ab, lapack_int ldab, float * w,
float * z, lapack_int ldz, float * work, lapack_int lwork, lapack_int *
iwork, lapack_int liwork)
Definition at line 36 of file lapacke_ssbevd_work.c.
LAPACKE_ssbevx ⭐
lapack_int LAPACKE_ssbevx (int matrix_layout, char jobz, char range, char
uplo, lapack_int n, lapack_int kd, float * ab, lapack_int ldab, float *
q, lapack_int ldq, float vl, float vu, lapack_int il, lapack_int iu,
float abstol, lapack_int * m, float * w, float * z, lapack_int ldz,
lapack_int * ifail)
Definition at line 36 of file lapacke_ssbevx.c.
LAPACKE_ssbevx_2stage 🌈
lapack_int LAPACKE_ssbevx_2stage (int matrix_layout, char jobz, char range,
char uplo, lapack_int n, lapack_int kd, float * ab, lapack_int ldab,
float * q, lapack_int ldq, float vl, float vu, lapack_int il, lapack_int
iu, float abstol, lapack_int * m, float * w, float * z, lapack_int ldz,
lapack_int * ifail)
Definition at line 36 of file lapacke_ssbevx_2stage.c.
LAPACKE_ssbevx_2stage_work 💜
lapack_int LAPACKE_ssbevx_2stage_work (int matrix_layout, char jobz, char
range, char uplo, lapack_int n, lapack_int kd, float * ab, lapack_int
ldab, float * q, lapack_int ldq, float vl, float vu, lapack_int il,
lapack_int iu, float abstol, lapack_int * m, float * w, float * z,
lapack_int ldz, float * work, lapack_int lwork, lapack_int * iwork,
lapack_int * ifail)
Definition at line 36 of file lapacke_ssbevx_2stage_work.c.
LAPACKE_ssbevx_work 🍓
lapack_int LAPACKE_ssbevx_work (int matrix_layout, char jobz, char range,
char uplo, lapack_int n, lapack_int kd, float * ab, lapack_int ldab,
float * q, lapack_int ldq, float vl, float vu, lapack_int il, lapack_int
iu, float abstol, lapack_int * m, float * w, float * z, lapack_int ldz,
float * work, lapack_int * iwork, lapack_int * ifail)
Definition at line 36 of file lapacke_ssbevx_work.c.
LAPACKE_ssbgst 🧚
lapack_int LAPACKE_ssbgst (int matrix_layout, char vect, char uplo,
lapack_int n, lapack_int ka, lapack_int kb, float * ab, lapack_int ldab,
const float * bb, lapack_int ldbb, float * x, lapack_int ldx)
Definition at line 36 of file lapacke_ssbgst.c.
LAPACKE_ssbgst_work 👑
lapack_int LAPACKE_ssbgst_work (int matrix_layout, char vect, char uplo,
lapack_int n, lapack_int ka, lapack_int kb, float * ab, lapack_int ldab,
const float * bb, lapack_int ldbb, float * x, lapack_int ldx, float *
work)
Definition at line 36 of file lapacke_ssbgst_work.c.
LAPACKE_ssbgv 🔥
lapack_int LAPACKE_ssbgv (int matrix_layout, char jobz, char uplo,
lapack_int n, lapack_int ka, lapack_int kb, float * ab, lapack_int ldab,
float * bb, lapack_int ldbb, float * w, float * z, lapack_int ldz)
Definition at line 36 of file lapacke_ssbgv.c.
LAPACKE_ssbgv_work 🦋
lapack_int LAPACKE_ssbgv_work (int matrix_layout, char jobz, char uplo,
lapack_int n, lapack_int ka, lapack_int kb, float * ab, lapack_int ldab,
float * bb, lapack_int ldbb, float * w, float * z, lapack_int ldz, float
* work)
Definition at line 36 of file lapacke_ssbgv_work.c.
The _work twin of ssbgv, bestie — same whole cast of characters, but you're handing over your own work array instead of letting it fend for itself 💅
LAPACKE_ssbgvd 💖
lapack_int LAPACKE_ssbgvd (int matrix_layout, char jobz, char uplo,
lapack_int n, lapack_int ka, lapack_int kb, float * ab, lapack_int ldab,
float * bb, lapack_int ldbb, float * w, float * z, lapack_int ldz)
Definition at line 36 of file lapacke_ssbgvd.c.
ssbgvd with no workspace of your own to pass — it just handles that internally, main character energy honestly ✨
LAPACKE_ssbgvd_work 🎀
lapack_int LAPACKE_ssbgvd_work (int matrix_layout, char jobz, char uplo,
lapack_int n, lapack_int ka, lapack_int kb, float * ab, lapack_int ldab,
float * bb, lapack_int ldbb, float * w, float * z, lapack_int ldz, float
* work, lapack_int lwork, lapack_int * iwork, lapack_int liwork)
Definition at line 36 of file lapacke_ssbgvd_work.c.
Look at all those workspace params — work, lwork, iwork, liwork — she's thorough, she's prepared, she's giving organized 🧚
LAPACKE_ssbgvx 🌸
lapack_int LAPACKE_ssbgvx (int matrix_layout, char jobz, char range, char
uplo, lapack_int n, lapack_int ka, lapack_int kb, float * ab, lapack_int
ldab, float * bb, lapack_int ldbb, float * q, lapack_int ldq, float vl,
float vu, lapack_int il, lapack_int iu, float abstol, lapack_int * m,
float * w, float * z, lapack_int ldz, lapack_int * ifail)
Definition at line 36 of file lapacke_ssbgvx.c.
Full parameter list absolutely ate — range, vl, vu, il, iu, abstol, plus an ifail pointer at the end there 👑
LAPACKE_ssbgvx_work 🔥
lapack_int LAPACKE_ssbgvx_work (int matrix_layout, char jobz, char range,
char uplo, lapack_int n, lapack_int ka, lapack_int kb, float * ab,
lapack_int ldab, float * bb, lapack_int ldbb, float * q, lapack_int ldq,
float vl, float vu, lapack_int il, lapack_int iu, float abstol,
lapack_int * m, float * w, float * z, lapack_int ldz, float * work,
lapack_int * iwork, lapack_int * ifail)
Definition at line 36 of file lapacke_ssbgvx_work.c.
Yeah she's long, but she's worth it — work and iwork join the party and ldz is still chilling in there 😭
LAPACKE_ssbtrd 🌈
lapack_int LAPACKE_ssbtrd (int matrix_layout, char vect, char uplo,
lapack_int n, lapack_int kd, float * ab, lapack_int ldab, float * d,
float * e, float * q, lapack_int ldq)
Definition at line 36 of file lapacke_ssbtrd.c.
vect, uplo, kd, d, e, q, ldq — compact little crew, no notes 💜
LAPACKE_ssbtrd_work 🍓
lapack_int LAPACKE_ssbtrd_work (int matrix_layout, char vect, char uplo,
lapack_int n, lapack_int kd, float * ab, lapack_int ldab, float * d,
float * e, float * q, lapack_int ldq, float * work)
Definition at line 36 of file lapacke_ssbtrd_work.c.
Same as above but with a float * work tacked on the end — the little ✨extra✨
LAPACKE_ssfrk ⭐
lapack_int LAPACKE_ssfrk (int matrix_layout, char transr, char uplo, char
trans, lapack_int n, lapack_int k, float alpha, const float * a,
lapack_int lda, float beta, float * c)
Definition at line 36 of file lapacke_ssfrk.c.
Three chars deep — transr, uplo, trans — plus alpha and beta doing their thing 🫶
LAPACKE_ssfrk_work 🦋
lapack_int LAPACKE_ssfrk_work (int matrix_layout, char transr, char uplo,
char trans, lapack_int n, lapack_int k, float alpha, const float * a,
lapack_int lda, float beta, float * c)
Definition at line 36 of file lapacke_ssfrk_work.c.
Not me noticing the _work version has the exact same parameter list as the non-_work one — no extra work pointer here, that's just how she is 💀
LAPACKE_sspcon 🎀
lapack_int LAPACKE_sspcon (int matrix_layout, char uplo, lapack_int n, const
float * ap, const lapack_int * ipiv, float anorm, float * rcond)
Definition at line 36 of file lapacke_sspcon.c.
anorm goes in, rcond comes out — and ipiv is const so bestie, do not touch 🫶
LAPACKE_sspcon_work 🌸
lapack_int LAPACKE_sspcon_work (int matrix_layout, char uplo, lapack_int n,
const float * ap, const lapack_int * ipiv, float anorm, float * rcond,
float * work, lapack_int * iwork)
Definition at line 36 of file lapacke_sspcon_work.c.
Now with work and iwork — the full ensemble cast, we love to see it 💅
LAPACKE_sspev ✨
lapack_int LAPACKE_sspev (int matrix_layout, char jobz, char uplo,
lapack_int n, float * ap, float * w, float * z, lapack_int ldz)
Definition at line 36 of file lapacke_sspev.c.
Short, sweet, jobz-driven — she said minimalism 🧚
LAPACKE_sspev_work 💜
lapack_int LAPACKE_sspev_work (int matrix_layout, char jobz, char uplo,
lapack_int n, float * ap, float * w, float * z, lapack_int ldz, float *
work)
Definition at line 36 of file lapacke_sspev_work.c.
sspev but you bring the work — that's the whole vibe 🔥
LAPACKE_sspevd 🌺
lapack_int LAPACKE_sspevd (int matrix_layout, char jobz, char uplo,
lapack_int n, float * ap, float * w, float * z, lapack_int ldz)
Definition at line 36 of file lapacke_sspevd.c.
Identical parameter list to sspev, different last letter, iconic honestly ⭐
LAPACKE_sspevd_work 🦋
lapack_int LAPACKE_sspevd_work (int matrix_layout, char jobz, char uplo,
lapack_int n, float * ap, float * w, float * z, lapack_int ldz, float *
work, lapack_int lwork, lapack_int * iwork, lapack_int liwork)
Definition at line 36 of file lapacke_sspevd_work.c.
Four workspace params at the end — work, lwork, iwork, liwork — she brought the whole luggage set 🎀
LAPACKE_sspevx 🌈
lapack_int LAPACKE_sspevx (int matrix_layout, char jobz, char range, char
uplo, lapack_int n, float * ap, float vl, float vu, lapack_int il,
lapack_int iu, float abstol, lapack_int * m, float * w, float * z,
lapack_int ldz, lapack_int * ifail)
Definition at line 36 of file lapacke_sspevx.c.
range + vl/vu + il/iu + abstol — she's asking a lot of questions and honestly? valid 🫶
LAPACKE_sspevx_work 🔥
lapack_int LAPACKE_sspevx_work (int matrix_layout, char jobz, char range,
char uplo, lapack_int n, float * ap, float vl, float vu, lapack_int il,
lapack_int iu, float abstol, lapack_int * m, float * w, float * z,
lapack_int ldz, float * work, lapack_int * iwork, lapack_int * ifail)
Definition at line 36 of file lapacke_sspevx_work.c.
Everything from sspevx plus work and iwork — she's giving full service 💅
LAPACKE_sspgst 🍓
lapack_int LAPACKE_sspgst (int matrix_layout, lapack_int itype, char uplo,
lapack_int n, float * ap, const float * bp)
Definition at line 36 of file lapacke_sspgst.c.
itype leads, bp is const — read-only bestie, hands off 😌
LAPACKE_sspgst_work ✨
lapack_int LAPACKE_sspgst_work (int matrix_layout, lapack_int itype, char
uplo, lapack_int n, float * ap, const float * bp)
Definition at line 36 of file lapacke_sspgst_work.c.
Same six params, _work suffix — twin behaviour, no cap 💜
LAPACKE_sspgv 🌸
lapack_int LAPACKE_sspgv (int matrix_layout, lapack_int itype, char jobz,
char uplo, lapack_int n, float * ap, float * bp, float * w, float * z,
lapack_int ldz)
Definition at line 36 of file lapacke_sspgv.c.
itype, jobz, uplo, then the float army — ap, bp, w, z — and ldz closing it out 🎀
LAPACKE_sspgv_work 🦋
lapack_int LAPACKE_sspgv_work (int matrix_layout, lapack_int itype, char
jobz, char uplo, lapack_int n, float * ap, float * bp, float * w, float
* z, lapack_int ldz, float * work)
Definition at line 36 of file lapacke_sspgv_work.c.
sspgv + one lonely work pointer at the end. She's lowkey just there for support 😭
LAPACKE_sspgvd ⭐
lapack_int LAPACKE_sspgvd (int matrix_layout, lapack_int itype, char jobz,
char uplo, lapack_int n, float * ap, float * bp, float * w, float * z,
lapack_int ldz)
Definition at line 36 of file lapacke_sspgvd.c.
Yeah the signature is literally the same as sspgv's — different file, different letter, love that for her 🌈
LAPACKE_sspgvd_work 🧚
lapack_int LAPACKE_sspgvd_work (int matrix_layout, lapack_int itype, char
jobz, char uplo, lapack_int n, float * ap, float * bp, float * w, float
* z, lapack_int ldz, float * work, lapack_int lwork, lapack_int * iwork,
lapack_int liwork)
Definition at line 36 of file lapacke_sspgvd_work.c.
work, lwork, iwork, liwork — she said bring the whole squad or don't come 🔥
LAPACKE_sspgvx 💖
lapack_int LAPACKE_sspgvx (int matrix_layout, lapack_int itype, char jobz,
char range, char uplo, lapack_int n, float * ap, float * bp, float vl,
float vu, lapack_int il, lapack_int iu, float abstol, lapack_int * m,
float * w, float * z, lapack_int ldz, lapack_int * ifail)
Definition at line 36 of file lapacke_sspgvx.c.
The full range-specifying, tolerance-taking, ifail-reporting situation — she's thorough 💅
LAPACKE_sspgvx_work 👑
lapack_int LAPACKE_sspgvx_work (int matrix_layout, lapack_int itype, char
jobz, char range, char uplo, lapack_int n, float * ap, float * bp, float
vl, float vu, lapack_int il, lapack_int iu, float abstol, lapack_int *
m, float * w, float * z, lapack_int ldz, float * work, lapack_int *
iwork, lapack_int * ifail)
Definition at line 36 of file lapacke_sspgvx_work.c.
Longest one yet and she's not apologizing for it — work, iwork, ifail, all present and accounted for 🌺
LAPACKE_ssprfs 🫶
lapack_int LAPACKE_ssprfs (int matrix_layout, char uplo, lapack_int n,
lapack_int nrhs, const float * ap, const float * afp, const lapack_int *
ipiv, const float * b, lapack_int ldb, float * x, lapack_int ldx, float
* ferr, float * berr)
Definition at line 36 of file lapacke_ssprfs.c.
Two const floats (ap, afp), a const ipiv, a const b… the const collection is real, do not write to them 😌
LAPACKE_ssprfs_work 🌈
lapack_int LAPACKE_ssprfs_work (int matrix_layout, char uplo, lapack_int n,
lapack_int nrhs, const float * ap, const float * afp, const lapack_int *
ipiv, const float * b, lapack_int ldb, float * x, lapack_int ldx, float
* ferr, float * berr, float * work, lapack_int * iwork)
Definition at line 36 of file lapacke_ssprfs_work.c.
Everything from ssprfs with work and iwork appended — and yes ferr and berr are still there 🍓
LAPACKE_sspsv ✨
lapack_int LAPACKE_sspsv (int matrix_layout, char uplo, lapack_int n,
lapack_int nrhs, float * ap, lapack_int * ipiv, float * b, lapack_int
ldb)
Definition at line 36 of file lapacke_sspsv.c.
uplo, n, nrhs, ap, ipiv, b, ldb — seven params and not one wasted 💜
LAPACKE_sspsv_work 🦋
lapack_int LAPACKE_sspsv_work (int matrix_layout, char uplo, lapack_int n,
lapack_int nrhs, float * ap, lapack_int * ipiv, float * b, lapack_int
ldb)
Definition at line 36 of file lapacke_sspsv_work.c.
Exact same parameter list as sspsv — she said copy my fit but change the file name 💀
LAPACKE_sspsvx 🎀
lapack_int LAPACKE_sspsvx (int matrix_layout, char fact, char uplo,
lapack_int n, lapack_int nrhs, const float * ap, float * afp, lapack_int
* ipiv, const float * b, lapack_int ldb, float * x, lapack_int ldx,
float * rcond, float * ferr, float * berr)
Definition at line 36 of file lapacke_sspsvx.c.
Note fact up front and ap/b marked const while afp and ipiv are not — read the consts carefully bestie 🔍
LAPACKE_sspsvx_work 🌸
lapack_int LAPACKE_sspsvx_work (int matrix_layout, char fact, char uplo,
lapack_int n, lapack_int nrhs, const float * ap, float * afp, lapack_int
* ipiv, const float * b, lapack_int ldb, float * x, lapack_int ldx,
float * rcond, float * ferr, float * berr, float * work, lapack_int *
iwork)
Definition at line 36 of file lapacke_sspsvx_work.c.
The whole sspsvx situation plus work and iwork — she's fully equipped 🧚
LAPACKE_ssptrd ⭐
lapack_int LAPACKE_ssptrd (int matrix_layout, char uplo, lapack_int n, float
* ap, float * d, float * e, float * tau)
Definition at line 36 of file lapacke_ssptrd.c.
Short king — uplo, n, ap, d, e, tau, done 💅
LAPACKE_ssptrd_work 🌺
lapack_int LAPACKE_ssptrd_work (int matrix_layout, char uplo, lapack_int n,
float * ap, float * d, float * e, float * tau)
Definition at line 36 of file lapacke_ssptrd_work.c.
Identical list again, _work edition — consistent queen 💖
LAPACKE_ssptrf 🔥
lapack_int LAPACKE_ssptrf (int matrix_layout, char uplo, lapack_int n, float
* ap, lapack_int * ipiv)
Definition at line 36 of file lapacke_ssptrf.c.
Five params, zero drama — ap in, ipiv out 🫶
LAPACKE_ssptrf_work 🍓
lapack_int LAPACKE_ssptrf_work (int matrix_layout, char uplo, lapack_int n,
float * ap, lapack_int * ipiv)
Definition at line 36 of file lapacke_ssptrf_work.c.
Same five, different file — the _work tradition continues 😌
LAPACKE_ssptri 💜
lapack_int LAPACKE_ssptri (int matrix_layout, char uplo, lapack_int n, float
* ap, const lapack_int * ipiv)
Definition at line 36 of file lapacke_ssptri.c.
ipiv is const here — read only, no take-backs 💅
LAPACKE_ssptri_work ✨
lapack_int LAPACKE_ssptri_work (int matrix_layout, char uplo, lapack_int n,
float * ap, const lapack_int * ipiv, float * work)
Definition at line 36 of file lapacke_ssptri_work.c.
Now with a work pointer — she remembered her bag this time 🎀
LAPACKE_ssptrs 🦋
lapack_int LAPACKE_ssptrs (int matrix_layout, char uplo, lapack_int n,
lapack_int nrhs, const float * ap, const lapack_int * ipiv, float * b,
lapack_int ldb)
Definition at line 36 of file lapacke_ssptrs.c.
ap and ipiv const, b writable — she knows exactly which arrays she's allowed to mess with 🔍
LAPACKE_ssptrs_work 🌈
lapack_int LAPACKE_ssptrs_work (int matrix_layout, char uplo, lapack_int n,
lapack_int nrhs, const float * ap, const lapack_int * ipiv, float * b,
lapack_int ldb)
Definition at line 36 of file lapacke_ssptrs_work.c.
Same eight params verbatim, _work in the name — that's it, that's the whole difference here ⭐
LAPACKE_sstebz 👑
lapack_int LAPACKE_sstebz (char range, char order, lapack_int n, float vl,
float vu, lapack_int il, lapack_int iu, float abstol, const float * d,
const float * e, lapack_int * m, lapack_int * nsplit, float * w,
lapack_int * iblock, lapack_int * isplit)
Definition at line 36 of file lapacke_sstebz.c.
Okay wait — no matrix_layout here, she starts straight at range and order 😭 and d/e are const. Mark that, bestie.
LAPACKE_sstebz_work 🌸
lapack_int LAPACKE_sstebz_work (char range, char order, lapack_int n, float
vl, float vu, lapack_int il, lapack_int iu, float abstol, const float *
d, const float * e, lapack_int * m, lapack_int * nsplit, float * w,
lapack_int * iblock, lapack_int * isplit, float * work, lapack_int *
iwork)
Definition at line 36 of file lapacke_sstebz_work.c.
Also no matrix_layout — she matches her sister — plus work and iwork on the tail end 🧚
LAPACKE_sstedc 💖
lapack_int LAPACKE_sstedc (int matrix_layout, char compz, lapack_int n,
float * d, float * e, float * z, lapack_int ldz)
Definition at line 36 of file lapacke_sstedc.c.
compz is the vibe-setter here, then d, e, z, ldz — short and slay 🔥
LAPACKE_sstedc_work 🌺
lapack_int LAPACKE_sstedc_work (int matrix_layout, char compz, lapack_int n,
float * d, float * e, float * z, lapack_int ldz, float * work,
lapack_int lwork, lapack_int * iwork, lapack_int liwork)
Definition at line 36 of file lapacke_sstedc_work.c.
And she closes with the full workspace quartet — work, lwork, iwork, liwork — go off, honestly 💜
🫶 LAPACKE_sstegr 🫶
lapack_int LAPACKE_sstegr (int matrix_layout, char jobz, char range,
lapack_int n, float * d, float * e, float vl, float vu, lapack_int il,
lapack_int iu, float abstol, lapack_int * m, float * w, float * z,
lapack_int ldz, lapack_int * isuppz)
Definition at line 36 of file lapacke_sstegr.c.
okay so this one's lowkey stacked with args — matrix_layout, jobz, range, n, then the d/e float pointers, vl, vu, il, iu, the abstol, out comes m, w, z, ldz, and isuppz at the end. She's got range, literally. 💅
✨ LAPACKE_sstegr_work ✨
lapack_int LAPACKE_sstegr_work (int matrix_layout, char jobz, char range,
lapack_int n, float * d, float * e, float vl, float vu, lapack_int il,
lapack_int iu, float abstol, lapack_int * m, float * w, float * z,
lapack_int ldz, lapack_int * isuppz, float * work, lapack_int lwork,
lapack_int * iwork, lapack_int liwork)
Definition at line 36 of file lapacke_sstegr_work.c.
same whole vibe as her sister but now you're the one bringing the workspace: work, lwork, iwork, liwork. main character energy where you supply the scratch space. 🧚
🌸 LAPACKE_sstein 🌸
lapack_int LAPACKE_sstein (int matrix_layout, lapack_int n, const float * d,
const float * e, lapack_int m, const float * w, const lapack_int *
iblock, const lapack_int * isplit, float * z, lapack_int ldz, lapack_int
* ifailv)
Definition at line 36 of file lapacke_sstein.c.
not me noticing the const glow-up on d, e, w, iblock and isplit — read-only besties, we respect them. z and ifailv are the mutable ones doing the werk. 🙈
💜 LAPACKE_sstein_work 💜
lapack_int LAPACKE_sstein_work (int matrix_layout, lapack_int n, const float
* d, const float * e, lapack_int m, const float * w, const lapack_int *
iblock, const lapack_int * isplit, float * z, lapack_int ldz, float *
work, lapack_int * iwork, lapack_int * ifailv)
Definition at line 36 of file lapacke_sstein_work.c.
the _work edition drags work and iwork along for the ride, and ifailv is still sitting there at the end like 👑. note there's no lwork/liwork here — that's not me being shady, that's genuinely just what the signature says, fr fr.
🦋 LAPACKE_sstemr 🦋
lapack_int LAPACKE_sstemr (int matrix_layout, char jobz, char range,
lapack_int n, float * d, float * e, float vl, float vu, lapack_int il,
lapack_int iu, lapack_int * m, float * w, float * z, lapack_int ldz,
lapack_int nzc, lapack_int * isuppz, lapack_logical * tryrac)
Definition at line 36 of file lapacke_sstemr.c.
we got nzc in the building AND a lapack_logical * tryrac at the very end — yes bestie, lapack_logical, not lapack_int, don't come for me, that's literally what's written. ⭐
🌈 LAPACKE_sstemr_work 🌈
lapack_int LAPACKE_sstemr_work (int matrix_layout, char jobz, char range,
lapack_int n, float * d, float * e, float vl, float vu, lapack_int il,
lapack_int iu, lapack_int * m, float * w, float * z, lapack_int ldz,
lapack_int nzc, lapack_int * isuppz, lapack_logical * tryrac, float *
work, lapack_int lwork, lapack_int * iwork, lapack_int liwork)
Definition at line 36 of file lapacke_sstemr_work.c.
everything from the non-_work version plus work, lwork, iwork, liwork. she ate and left zero crumbs. 🔥
🎀 LAPACKE_ssteqr 🎀
lapack_int LAPACKE_ssteqr (int matrix_layout, char compz, lapack_int n,
float * d, float * e, float * z, lapack_int ldz)
Definition at line 36 of file lapacke_ssteqr.c.
short queen! matrix_layout, compz, n, then d, e, z, ldz. that's it, that's the whole squad. 🫶
💅 LAPACKE_ssteqr_work 💅
lapack_int LAPACKE_ssteqr_work (int matrix_layout, char compz, lapack_int n,
float * d, float * e, float * z, lapack_int ldz, float * work)
Definition at line 36 of file lapacke_ssteqr_work.c.
identical energy, except one extra float * work tagged on the end like the last sticker on your laptop. ✨
🍓 LAPACKE_ssterf 🍓
lapack_int LAPACKE_ssterf (lapack_int n, float * d, float * e)
Definition at line 36 of file lapacke_ssterf.c.
bestie. look at this. no matrix_layout. no ldz. just n, d, e. minimalist icon, honestly obsessed. 😭
🌸 LAPACKE_ssterf_work 🌸
lapack_int LAPACKE_ssterf_work (lapack_int n, float * d, float * e)
Definition at line 36 of file lapacke_ssterf_work.c.
the _work version has the exact same signature as the plain one — lapack_int n, float * d, float * e, no extra args. yes really. yes I checked. no I'm not being weird about it. 💀
⭐ LAPACKE_sstev ⭐
lapack_int LAPACKE_sstev (int matrix_layout, char jobz, lapack_int n, float
* d, float * e, float * z, lapack_int ldz)
Definition at line 36 of file lapacke_sstev.c.
back to the classic lineup: matrix_layout, jobz, n, d, e, z, ldz. comfort routine, lowkey. 🎀
🦋 LAPACKE_sstev_work 🦋
lapack_int LAPACKE_sstev_work (int matrix_layout, char jobz, lapack_int n,
float * d, float * e, float * z, lapack_int ldz, float * work)
Definition at line 36 of file lapacke_sstev_work.c.
same seven, plus work gliding in at the end like she was always invited. 💜
👑 LAPACKE_sstevd 👑
lapack_int LAPACKE_sstevd (int matrix_layout, char jobz, lapack_int n, float
* d, float * e, float * z, lapack_int ldz)
Definition at line 36 of file lapacke_sstevd.c.
d version, same arg list as sstev — matrix_layout, jobz, n, d, e, z, ldz. don't let the single letter fool you, she's her own routine. 🔥
🌈 LAPACKE_sstevd_work 🌈
lapack_int LAPACKE_sstevd_work (int matrix_layout, char jobz, lapack_int n,
float * d, float * e, float * z, lapack_int ldz, float * work,
lapack_int lwork, lapack_int * iwork, lapack_int liwork)
Definition at line 36 of file lapacke_sstevd_work.c.
now THIS _work went all out: work, lwork, iwork, liwork. four extra params, zero regrets. she understood the assignment. 💅
💖 LAPACKE_sstevr 💖
lapack_int LAPACKE_sstevr (int matrix_layout, char jobz, char range,
lapack_int n, float * d, float * e, float vl, float vu, lapack_int il,
lapack_int iu, float abstol, lapack_int * m, float * w, float * z,
lapack_int ldz, lapack_int * isuppz)
Definition at line 36 of file lapacke_sstevr.c.
the r girlie brought out the whole cast: range, vl, vu, il, iu, abstol, m, w, z, ldz, isuppz. no notes. 🫶
✨ LAPACKE_sstevr_work ✨
lapack_int LAPACKE_sstevr_work (int matrix_layout, char jobz, char range,
lapack_int n, float * d, float * e, float vl, float vu, lapack_int il,
lapack_int iu, float abstol, lapack_int * m, float * w, float * z,
lapack_int ldz, lapack_int * isuppz, float * work, lapack_int lwork,
lapack_int * iwork, lapack_int liwork)
Definition at line 36 of file lapacke_sstevr_work.c.
same lineup + work, lwork, iwork, liwork. the _work pipeline is consistent and honestly iconic. ⭐
🎀 LAPACKE_sstevx 🎀
lapack_int LAPACKE_sstevx (int matrix_layout, char jobz, char range,
lapack_int n, float * d, float * e, float vl, float vu, lapack_int il,
lapack_int iu, float abstol, lapack_int * m, float * w, float * z,
lapack_int ldz, lapack_int * ifail)
Definition at line 36 of file lapacke_sstevx.c.
x version! same as sstevr but the last param is lapack_int * ifail instead of isuppz. yes that's the difference. no I won't elaborate further than the signature allows. 🙈
💜 LAPACKE_sstevx_work 💜
lapack_int LAPACKE_sstevx_work (int matrix_layout, char jobz, char range,
lapack_int n, float * d, float * e, float vl, float vu, lapack_int il,
lapack_int iu, float abstol, lapack_int * m, float * w, float * z,
lapack_int ldz, float * work, lapack_int * iwork, lapack_int * ifail)
Definition at line 36 of file lapacke_sstevx_work.c.
and here's the plot twist: _work adds work and iwork, but there's no lwork or liwork in this one. that's not a typo, that's literally the signature, babe. 😭
🧚 LAPACKE_ssycon 🧚
lapack_int LAPACKE_ssycon (int matrix_layout, char uplo, lapack_int n, const
float * a, lapack_int lda, const lapack_int * ipiv, float anorm, float *
rcond)
Definition at line 36 of file lapacke_ssycon.c.
new prefix, who dis — ssy era begins 💅 uplo, n, const float * a, lda, const lapack_int * ipiv, then anorm and out comes rcond. 🦋
🌸 LAPACKE_ssycon_3 🌸
lapack_int LAPACKE_ssycon_3 (int matrix_layout, char uplo, lapack_int n,
const float * a, lapack_int lda, const float * e, const lapack_int *
ipiv, float anorm, float * rcond)
Definition at line 36 of file lapacke_ssycon_3.c.
the _3 variant slides a const float * e in right after lda, before ipiv. everything else is unchanged. she's an extra-credit student. ⭐
🎀 LAPACKE_ssycon_3_work 🎀
lapack_int LAPACKE_ssycon_3_work (int matrix_layout, char uplo, lapack_int
n, const float * a, lapack_int lda, const float * e, const lapack_int *
ipiv, float anorm, float * rcond, float * work, lapack_int * iwork)
Definition at line 36 of file lapacke_ssycon_3_work.c.
_3 plus work and iwork. yes the name is LAPACKE_ssycon_3_work, yes it has two suffixes, no that's not a glitch. 💀
🦋 LAPACKE_ssycon_work 🦋
lapack_int LAPACKE_ssycon_work (int matrix_layout, char uplo, lapack_int n,
const float * a, lapack_int lda, const lapack_int * ipiv, float anorm,
float * rcond, float * work, lapack_int * iwork)
Definition at line 36 of file lapacke_ssycon_work.c.
the plain one plus work and iwork — note: no e here, that's the _3 girlie's thing. keep up bestie 📝
🔥 LAPACKE_ssyconv 🔥
lapack_int LAPACKE_ssyconv (int matrix_layout, char uplo, char way,
lapack_int n, float * a, lapack_int lda, const lapack_int * ipiv, float
* e)
Definition at line 36 of file lapacke_ssyconv.c.
okay there's a char way in here and I am obsessed — she literally has a "way" parameter, main character behavior honestly 👑 also a and e are writable while ipiv stays const. 🎀
🍓 LAPACKE_ssyconv_work 🍓
lapack_int LAPACKE_ssyconv_work (int matrix_layout, char uplo, char way,
lapack_int n, float * a, lapack_int lda, const lapack_int * ipiv, float
* e)
Definition at line 36 of file lapacke_ssyconv_work.c.
identical signature to the non-_work version — same matrix_layout, uplo, way, n, a, lda, ipiv, e. no extra work params. that's just how she is. ✨
🌈 LAPACKE_ssyequb 🌈
lapack_int LAPACKE_ssyequb (int matrix_layout, char uplo, lapack_int n,
const float * a, lapack_int lda, float * s, float * scond, float * amax)
Definition at line 36 of file lapacke_ssyequb.c.
equb era 🫶 takes a + lda, hands you s, scond and amax. three outputs, one little function. she's generous. 💖
💜 LAPACKE_ssyequb_work 💜
lapack_int LAPACKE_ssyequb_work (int matrix_layout, char uplo, lapack_int n,
const float * a, lapack_int lda, float * s, float * scond, float * amax,
float * work)
Definition at line 36 of file lapacke_ssyequb_work.c.
exactly the same plus one lonely float * work at the end. no lwork, no iwork — just work, doing her solo. ⭐
👑 LAPACKE_ssyev 👑
lapack_int LAPACKE_ssyev (int matrix_layout, char jobz, char uplo,
lapack_int n, float * a, lapack_int lda, float * w)
Definition at line 36 of file lapacke_ssyev.c.
the classic seven: matrix_layout, jobz, uplo, n, a, lda, w. the blueprint, the template, the moment. 💅
✨ LAPACKE_ssyev_2stage ✨
lapack_int LAPACKE_ssyev_2stage (int matrix_layout, char jobz, char uplo,
lapack_int n, float * a, lapack_int lda, float * w)
Definition at line 36 of file lapacke_ssyev_2stage.c.
TWO STAGE. two. stage. and the signature is character-for-character the same as LAPACKE_ssyev — same args, same order. the drama is all in the name, bestie. 🎀
🦋 LAPACKE_ssyev_2stage_work 🦋
lapack_int LAPACKE_ssyev_2stage_work (int matrix_layout, char jobz, char
uplo, lapack_int n, float * a, lapack_int lda, float * w, float * work,
lapack_int lwork)
Definition at line 36 of file lapacke_ssyev_2stage_work.c.
_2stage_work — say it five times fast 😭 adds work and lwork. no iwork, no liwork. keep that in mind for the next one. 🙈
🌸 LAPACKE_ssyev_work 🌸
lapack_int LAPACKE_ssyev_work (int matrix_layout, char jobz, char uplo,
lapack_int n, float * a, lapack_int lda, float * w, float * work,
lapack_int lwork)
Definition at line 36 of file lapacke_ssyev_work.c.
base ssyev plus work and lwork. same tail as the _2stage_work version, for the record. 🫶
💖 LAPACKE_ssyevd 💖
lapack_int LAPACKE_ssyevd (int matrix_layout, char jobz, char uplo,
lapack_int n, float * a, lapack_int lda, float * w)
Definition at line 36 of file lapacke_ssyevd.c.
d suffix, same seven params as ssyev and ssyev_2stage. she's part of the matched set, collector's item. 🌈
🌟 LAPACKE_ssyevd_2stage 🌟
lapack_int LAPACKE_ssyevd_2stage (int matrix_layout, char jobz, char uplo,
lapack_int n, float * a, lapack_int lda, float * w)
Definition at line 36 of file lapacke_ssyevd_2stage.c.
d AND 2stage in one name. truly the crossover event nobody asked for but everybody needed. signature = the standard seven, again. 💜
🎀 LAPACKE_ssyevd_2stage_work 🎀
lapack_int LAPACKE_ssyevd_2stage_work (int matrix_layout, char jobz, char
uplo, lapack_int n, float * a, lapack_int lda, float * w, float * work,
lapack_int lwork, lapack_int * iwork, lapack_int liwork)
Definition at line 36 of file lapacke_ssyevd_2stage_work.c.
okay this _work goes FULL send: work, lwork, iwork, liwork. four extra. she brought the whole friend group. 🔥
⭐ LAPACKE_ssyevd_work ⭐
lapack_int LAPACKE_ssyevd_work (int matrix_layout, char jobz, char uplo,
lapack_int n, float * a, lapack_int lda, float * w, float * work,
lapack_int lwork, lapack_int * iwork, lapack_int liwork)
Definition at line 36 of file lapacke_ssyevd_work.c.
same four extra params as her _2stage twin — work, lwork, iwork, liwork. matched energies, fr fr. ✨
🦋 LAPACKE_ssyevr 🦋
lapack_int LAPACKE_ssyevr (int matrix_layout, char jobz, char range, char
uplo, lapack_int n, float * a, lapack_int lda, float vl, float vu,
lapack_int il, lapack_int iu, float abstol, lapack_int * m, float * w,
float * z, lapack_int ldz, lapack_int * isuppz)
Definition at line 36 of file lapacke_ssyevr.c.
the r girlie is a long function, look at her go 😭 range, vl, vu, il, iu, abstol, then m, w, z, ldz, and isuppz closing it out. icon. 👑
🌈 LAPACKE_ssyevr_2stage 🌈
lapack_int LAPACKE_ssyevr_2stage (int matrix_layout, char jobz, char range,
char uplo, lapack_int n, float * a, lapack_int lda, float vl, float vu,
lapack_int il, lapack_int iu, float abstol, lapack_int * m, float * w,
float * z, lapack_int ldz, lapack_int * isuppz)
Definition at line 36 of file lapacke_ssyevr_2stage.c.
ssyevr but _2stage, and the signature is literally identical to plain ssyevr. eighteen params of pure commitment. 💅
💜 LAPACKE_ssyevr_2stage_work 💜
lapack_int LAPACKE_ssyevr_2stage_work (int matrix_layout, char jobz, char
range, char uplo, lapack_int n, float * a, lapack_int lda, float vl,
float vu, lapack_int il, lapack_int iu, float abstol, lapack_int * m,
float * w, float * z, lapack_int ldz, lapack_int * isuppz, float * work,
lapack_int lwork, lapack_int * iwork, lapack_int liwork)
Definition at line 36 of file lapacke_ssyevr_2stage_work.c.
allll of that plus work, lwork, iwork, liwork. this is the longest signature so far and she's thriving, ngl. 🫶
🎀 LAPACKE_ssyevr_work 🎀
lapack_int LAPACKE_ssyevr_work (int matrix_layout, char jobz, char range,
char uplo, lapack_int n, float * a, lapack_int lda, float vl, float vu,
lapack_int il, lapack_int iu, float abstol, lapack_int * m, float * w,
float * z, lapack_int ldz, lapack_int * isuppz, float * work, lapack_int
lwork, lapack_int * iwork, lapack_int liwork)
Definition at line 36 of file lapacke_ssyevr_work.c.
note lapack_int lwork sits on its own wrapped line here — that's just the manpage's line break, she's still the same param bestie 💖 same tail four: work, lwork, iwork, liwork.
⭐ LAPACKE_ssyevx ⭐
lapack_int LAPACKE_ssyevx (int matrix_layout, char jobz, char range, char
uplo, lapack_int n, float * a, lapack_int lda, float vl, float vu,
lapack_int il, lapack_int iu, float abstol, lapack_int * m, float * w,
float * z, lapack_int ldz, lapack_int * ifail)
Definition at line 36 of file lapacke_ssyevx.c.
x marks the spot ✨ same big lineup as ssyevr but the final param is lapack_int * ifail instead of isuppz. that's the tea. 🍓
🌟 LAPACKE_ssyevx_2stage 🌟
lapack_int LAPACKE_ssyevx_2stage (int matrix_layout, char jobz, char range,
char uplo, lapack_int n, float * a, lapack_int lda, float vl, float vu,
lapack_int il, lapack_int iu, float abstol, lapack_int * m, float * w,
float * z, lapack_int ldz, lapack_int * ifail)
Definition at line 36 of file lapacke_ssyevx_2stage.c.
_2stage again, still ending on ifail, still identical args to plain ssyevx. consistent queen. 👑
🧚 LAPACKE_ssyevx_2stage_work 🧚
lapack_int LAPACKE_ssyevx_2stage_work (int matrix_layout, char jobz, char
range, char uplo, lapack_int n, float * a, lapack_int lda, float vl,
float vu, lapack_int il, lapack_int iu, float abstol, lapack_int * m,
float * w, float * z, lapack_int ldz, float * work, lapack_int lwork,
lapack_int * iwork, lapack_int * ifail)
Definition at line 36 of file lapacke_ssyevx_2stage_work.c.
heads up bestie: this _work adds work, lwork and iwork — but no liwork, and ifail comes last, after the workspace. read it twice, I did. 😭
💖 LAPACKE_ssyevx_work 💖
lapack_int LAPACKE_ssyevx_work (int matrix_layout, char jobz, char range,
char uplo, lapack_int n, float * a, lapack_int lda, float vl, float vu,
lapack_int il, lapack_int iu, float abstol, lapack_int * m, float * w,
float * z, lapack_int ldz, float * work, lapack_int lwork, lapack_int *
iwork, lapack_int * ifail)
Definition at line 36 of file lapacke_ssyevx_work.c.
and the final boss of this batch: same as the _2stage_work version, tail is work, lwork, iwork, ifail. three workspace params, no liwork, ifail bringing up the rear. periodt. 🫶
Okay so we're still rolling through the function list and literally every single one of these is chilling at line 36 of its own file — the consistency is genuinely iconic 🎀
LAPACKE_ssygst 💅
lapack_int LAPACKE_ssygst (int matrix_layout, lapack_int itype, char uplo,
lapack_int n, float * a, lapack_int lda, const float * b, lapack_int
ldb)
Definition at line 36 of file lapacke_ssygst.c.
LAPACKE_ssygst_work ✨ — same name with that _work garnish, in a file of its very own.
lapack_int LAPACKE_ssygst_work (int matrix_layout, lapack_int itype, char
uplo, lapack_int n, float * a, lapack_int lda, const float * b,
lapack_int ldb)
Definition at line 36 of file lapacke_ssygst_work.c.
LAPACKE_ssygv 🦋 — bestie this one brought jobz and w to the party.
lapack_int LAPACKE_ssygv (int matrix_layout, lapack_int itype, char jobz,
char uplo, lapack_int n, float * a, lapack_int lda, float * b,
lapack_int ldb, float * w)
Definition at line 36 of file lapacke_ssygv.c.
LAPACKE_ssygv_2stage 🌸 — yes the 2stage variant is real and yes she's got the exact same arg list, no cap.
lapack_int LAPACKE_ssygv_2stage (int matrix_layout, lapack_int itype, char
jobz, char uplo, lapack_int n, float * a, lapack_int lda, float * b,
lapack_int ldb, float * w)
Definition at line 36 of file lapacke_ssygv_2stage.c.
LAPACKE_ssygv_2stage_work 🔥 — the _2stage one, but with work and lwork pulled up.
lapack_int LAPACKE_ssygv_2stage_work (int matrix_layout, lapack_int itype,
char jobz, char uplo, lapack_int n, float * a, lapack_int lda, float *
b, lapack_int ldb, float * w, float * work, lapack_int lwork)
Definition at line 36 of file lapacke_ssygv_2stage_work.c.
LAPACKE_ssygv_work 💜 — the work-y twin of LAPACKE_ssygv, same energy, extra args.
lapack_int LAPACKE_ssygv_work (int matrix_layout, lapack_int itype, char
jobz, char uplo, lapack_int n, float * a, lapack_int lda, float * b,
lapack_int ldb, float * w, float * work, lapack_int lwork)
Definition at line 36 of file lapacke_ssygv_work.c.
LAPACKE_ssygvd 🎀 — note the d on the end, that's a whole different function, don't mix them up.
lapack_int LAPACKE_ssygvd (int matrix_layout, lapack_int itype, char jobz,
char uplo, lapack_int n, float * a, lapack_int lda, float * b,
lapack_int ldb, float * w)
Definition at line 36 of file lapacke_ssygvd.c.
LAPACKE_ssygvd_work ⭐ — look at this arg list, she's eating. work, lwork, iwork and liwork all invited.
lapack_int LAPACKE_ssygvd_work (int matrix_layout, lapack_int itype, char
jobz, char uplo, lapack_int n, float * a, lapack_int lda, float * b,
lapack_int ldb, float * w, float * work, lapack_int lwork, lapack_int *
iwork, lapack_int liwork)
Definition at line 36 of file lapacke_ssygvd_work.c.
LAPACKE_ssygvx 🌈 — the x variant said "let me add range, vl, vu, il, iu, abstol, m, z, ldz and ifail" and honestly? Main character behaviour.
lapack_int LAPACKE_ssygvx (int matrix_layout, lapack_int itype, char jobz,
char range, char uplo, lapack_int n, float * a, lapack_int lda, float *
b, lapack_int ldb, float vl, float vu, lapack_int il, lapack_int iu,
float abstol, lapack_int * m, float * w, float * z, lapack_int ldz,
lapack_int * ifail)
Definition at line 36 of file lapacke_ssygvx.c.
LAPACKE_ssygvx_work 😭 — everything ssygvx has, plus work, lwork and iwork. It's giving maximalist.
lapack_int LAPACKE_ssygvx_work (int matrix_layout, lapack_int itype, char
jobz, char range, char uplo, lapack_int n, float * a, lapack_int lda,
float * b, lapack_int ldb, float vl, float vu, lapack_int il, lapack_int
iu, float abstol, lapack_int * m, float * w, float * z, lapack_int ldz,
float * work, lapack_int lwork, lapack_int * iwork, lapack_int * ifail)
Definition at line 36 of file lapacke_ssygvx_work.c.
LAPACKE_ssyrfs 🫶 — new name prefix, ssyrfs, and she's bringing ferr and berr along.
lapack_int LAPACKE_ssyrfs (int matrix_layout, char uplo, lapack_int n,
lapack_int nrhs, const float * a, lapack_int lda, const float * af,
lapack_int ldaf, const lapack_int * ipiv, const float * b, lapack_int
ldb, float * x, lapack_int ldx, float * ferr, float * berr)
Definition at line 36 of file lapacke_ssyrfs.c.
LAPACKE_ssyrfs_work 🍓 — same situation, now with work and iwork tacked on the end. Classic.
lapack_int LAPACKE_ssyrfs_work (int matrix_layout, char uplo, lapack_int n,
lapack_int nrhs, const float * a, lapack_int lda, const float * af,
lapack_int ldaf, const lapack_int * ipiv, const float * b, lapack_int
ldb, float * x, lapack_int ldx, float * ferr, float * berr, float *
work, lapack_int * iwork)
Definition at line 36 of file lapacke_ssyrfs_work.c.
LAPACKE_ssyrfsx 🧚 — okay the x versions are always the ones with the long cast list, and this one has equed, s, rcond, n_err_bnds, err_bnds_norm, err_bnds_comp, nparams and params. Obsessed.
lapack_int LAPACKE_ssyrfsx (int matrix_layout, char uplo, char equed,
lapack_int n, lapack_int nrhs, const float * a, lapack_int lda, const
float * af, lapack_int ldaf, const lapack_int * ipiv, const float * s,
const float * b, lapack_int ldb, float * x, lapack_int ldx, float *
rcond, float * berr, lapack_int n_err_bnds, float * err_bnds_norm, float
* err_bnds_comp, lapack_int nparams, float * params)
Definition at line 36 of file lapacke_ssyrfsx.c.
LAPACKE_ssyrfsx_work 👑 — the _work version keeps every single one of those and then adds work and iwork because why not.
lapack_int LAPACKE_ssyrfsx_work (int matrix_layout, char uplo, char equed,
lapack_int n, lapack_int nrhs, const float * a, lapack_int lda, const
float * af, lapack_int ldaf, const lapack_int * ipiv, const float * s,
const float * b, lapack_int ldb, float * x, lapack_int ldx, float *
rcond, float * berr, lapack_int n_err_bnds, float * err_bnds_norm, float
* err_bnds_comp, lapack_int nparams, float * params, float * work,
lapack_int * iwork)
Definition at line 36 of file lapacke_ssyrfsx_work.c.
LAPACKE_ssysv 💖 — short and sweet: uplo, n, nrhs, a, lda, ipiv, b, ldb. Breath of fresh air ngl.
lapack_int LAPACKE_ssysv (int matrix_layout, char uplo, lapack_int n,
lapack_int nrhs, float * a, lapack_int lda, lapack_int * ipiv, float *
b, lapack_int ldb)
Definition at line 36 of file lapacke_ssysv.c.
LAPACKE_ssysv_aa 🦋 — the _aa remix, same arg list as above, different file.
lapack_int LAPACKE_ssysv_aa (int matrix_layout, char uplo, lapack_int n,
lapack_int nrhs, float * a, lapack_int lda, lapack_int * ipiv, float *
b, lapack_int ldb)
Definition at line 36 of file lapacke_ssysv_aa.c.
LAPACKE_ssysv_aa_2stage ✨ — aa and 2stage?? She said let me add tb, ltb and a second ipiv2 while I'm here.
lapack_int LAPACKE_ssysv_aa_2stage (int matrix_layout, char uplo, lapack_int
n, lapack_int nrhs, float * a, lapack_int lda, float * tb, lapack_int
ltb, lapack_int * ipiv, lapack_int * ipiv2, float * b, lapack_int ldb)
Definition at line 36 of file lapacke_ssysv_aa_2stage.c.
LAPACKE_ssysv_aa_2stage_work 💀 — every one of those, plus work and lwork. Respectfully, that's a lot of args.
lapack_int LAPACKE_ssysv_aa_2stage_work (int matrix_layout, char uplo,
lapack_int n, lapack_int nrhs, float * a, lapack_int lda, float * tb,
lapack_int ltb, lapack_int * ipiv, lapack_int * ipiv2, float * b,
lapack_int ldb, float * work, lapack_int lwork)
Definition at line 36 of file lapacke_ssysv_aa_2stage_work.c.
LAPACKE_ssysv_aa_work 🌸 — the _aa one with work/lwork added on. Standard procedure.
lapack_int LAPACKE_ssysv_aa_work (int matrix_layout, char uplo, lapack_int
n, lapack_int nrhs, float * a, lapack_int lda, lapack_int * ipiv, float
* b, lapack_int ldb, float * work, lapack_int lwork)
Definition at line 36 of file lapacke_ssysv_aa_work.c.
LAPACKE_ssysv_rk 💜 — the _rk flavour, serving e and ipiv together.
lapack_int LAPACKE_ssysv_rk (int matrix_layout, char uplo, lapack_int n,
lapack_int nrhs, float * a, lapack_int lda, float * e, lapack_int *
ipiv, float * b, lapack_int ldb)
Definition at line 36 of file lapacke_ssysv_rk.c.
LAPACKE_ssysv_rk_work 🎀 — same but with the work/lwork duo.
lapack_int LAPACKE_ssysv_rk_work (int matrix_layout, char uplo, lapack_int
n, lapack_int nrhs, float * a, lapack_int lda, float * e, lapack_int *
ipiv, float * b, lapack_int ldb, float * work, lapack_int lwork)
Definition at line 36 of file lapacke_ssysv_rk_work.c.
LAPACKE_ssysv_rook 🔥 — _rook variant, same shape as plain ssysv.
lapack_int LAPACKE_ssysv_rook (int matrix_layout, char uplo, lapack_int n,
lapack_int nrhs, float * a, lapack_int lda, lapack_int * ipiv, float *
b, lapack_int ldb)
Definition at line 36 of file lapacke_ssysv_rook.c.
LAPACKE_ssysv_rook_work 🌈 — _rook plus work/lwork, as the pattern demands.
lapack_int LAPACKE_ssysv_rook_work (int matrix_layout, char uplo, lapack_int
n, lapack_int nrhs, float * a, lapack_int lda, lapack_int * ipiv, float
* b, lapack_int ldb, float * work, lapack_int lwork)
Definition at line 36 of file lapacke_ssysv_rook_work.c.
LAPACKE_ssysv_work 🫶 — the base ssysv with the work args, nothing spicy, just consistent.
lapack_int LAPACKE_ssysv_work (int matrix_layout, char uplo, lapack_int n,
lapack_int nrhs, float * a, lapack_int lda, lapack_int * ipiv, float *
b, lapack_int ldb, float * work, lapack_int lwork)
Definition at line 36 of file lapacke_ssysv_work.c.
LAPACKE_ssysvx 🍓 — x marks the spot: fact shows up, and so do rcond, ferr and berr.
lapack_int LAPACKE_ssysvx (int matrix_layout, char fact, char uplo,
lapack_int n, lapack_int nrhs, const float * a, lapack_int lda, float *
af, lapack_int ldaf, lapack_int * ipiv, const float * b, lapack_int ldb,
float * x, lapack_int ldx, float * rcond, float * ferr, float * berr)
Definition at line 36 of file lapacke_ssysvx.c.
LAPACKE_ssysvx_work 🧚 — all of that plus work, lwork and iwork. She's thorough.
lapack_int LAPACKE_ssysvx_work (int matrix_layout, char fact, char uplo,
lapack_int n, lapack_int nrhs, const float * a, lapack_int lda, float *
af, lapack_int ldaf, lapack_int * ipiv, const float * b, lapack_int ldb,
float * x, lapack_int ldx, float * rcond, float * ferr, float * berr,
float * work, lapack_int lwork, lapack_int * iwork)
Definition at line 36 of file lapacke_ssysvx_work.c.
LAPACKE_ssysvxx 👑 — two x's, so you know it's extra. Note equed and s are non-const pointers here — everything is getting written to, iykyk.
lapack_int LAPACKE_ssysvxx (int matrix_layout, char fact, char uplo,
lapack_int n, lapack_int nrhs, float * a, lapack_int lda, float * af,
lapack_int ldaf, lapack_int * ipiv, char * equed, float * s, float * b,
lapack_int ldb, float * x, lapack_int ldx, float * rcond, float *
rpvgrw, float * berr, lapack_int n_err_bnds, float * err_bnds_norm,
float * err_bnds_comp, lapack_int nparams, float * params)
Definition at line 36 of file lapacke_ssysvxx.c.
LAPACKE_ssysvxx_work 💖 — the longest one yet, and yes, rpvgrw is really spelled like that.
lapack_int LAPACKE_ssysvxx_work (int matrix_layout, char fact, char uplo,
lapack_int n, lapack_int nrhs, float * a, lapack_int lda, float * af,
lapack_int ldaf, lapack_int * ipiv, char * equed, float * s, float * b,
lapack_int ldb, float * x, lapack_int ldx, float * rcond, float *
rpvgrw, float * berr, lapack_int n_err_bnds, float * err_bnds_norm,
float * err_bnds_comp, lapack_int nparams, float * params, float * work,
lapack_int * iwork)
Definition at line 36 of file lapacke_ssysvxx_work.c.
LAPACKE_ssyswapr 💅 — short queen. matrix_layout, uplo, n, a, lda, i1, i2, done.
lapack_int LAPACKE_ssyswapr (int matrix_layout, char uplo, lapack_int n,
float * a, lapack_int lda, lapack_int i1, lapack_int i2)
Definition at line 36 of file lapacke_ssyswapr.c.
LAPACKE_ssyswapr_work ⭐ — identical arg list to the one above, but she lives in the _work file.
lapack_int LAPACKE_ssyswapr_work (int matrix_layout, char uplo, lapack_int
n, float * a, lapack_int lda, lapack_int i1, lapack_int i2)
Definition at line 36 of file lapacke_ssyswapr_work.c.
LAPACKE_ssytrd 🌺 — new prefix ssytrd, bringing d, e and tau to the function.
lapack_int LAPACKE_ssytrd (int matrix_layout, char uplo, lapack_int n, float
* a, lapack_int lda, float * d, float * e, float * tau)
Definition at line 36 of file lapacke_ssytrd.c.
LAPACKE_ssytrd_work 🦋 — same, plus work and lwork. You already know the drill.
lapack_int LAPACKE_ssytrd_work (int matrix_layout, char uplo, lapack_int n,
float * a, lapack_int lda, float * d, float * e, float * tau, float *
work, lapack_int lwork)
Definition at line 36 of file lapacke_ssytrd_work.c.
LAPACKE_ssytrf ✨ — ssytrf, short and tidy, with ipiv in the mix.
lapack_int LAPACKE_ssytrf (int matrix_layout, char uplo, lapack_int n, float
* a, lapack_int lda, lapack_int * ipiv)
Definition at line 36 of file lapacke_ssytrf.c.
LAPACKE_ssytrf_aa 💜 — the _aa take, same arg list.
lapack_int LAPACKE_ssytrf_aa (int matrix_layout, char uplo, lapack_int n,
float * a, lapack_int lda, lapack_int * ipiv)
Definition at line 36 of file lapacke_ssytrf_aa.c.
LAPACKE_ssytrf_aa_2stage 🔥 — aa + 2stage + tb, ltb, ipiv and ipiv2. She's doing the most and honestly? Slay.
lapack_int LAPACKE_ssytrf_aa_2stage (int matrix_layout, char uplo,
lapack_int n, float * a, lapack_int lda, float * tb, lapack_int ltb,
lapack_int * ipiv, lapack_int * ipiv2)
Definition at line 36 of file lapacke_ssytrf_aa_2stage.c.
LAPACKE_ssytrf_aa_2stage_work 😭 — that entire cast list plus work and lwork. Take a breath bestie.
lapack_int LAPACKE_ssytrf_aa_2stage_work (int matrix_layout, char uplo,
lapack_int n, float * a, lapack_int lda, float * tb, lapack_int ltb,
lapack_int * ipiv, lapack_int * ipiv2, float * work, lapack_int lwork)
Definition at line 36 of file lapacke_ssytrf_aa_2stage_work.c.
LAPACKE_ssytrf_aa_work 🌸 — _aa with the work/lwork add-on. Consistent to the end.
lapack_int LAPACKE_ssytrf_aa_work (int matrix_layout, char uplo, lapack_int
n, float * a, lapack_int lda, lapack_int * ipiv, float * work,
lapack_int lwork)
Definition at line 36 of file lapacke_ssytrf_aa_work.c.
LAPACKE_ssytrf_rk 🎀 — the _rk sibling, back with e and ipiv.
lapack_int LAPACKE_ssytrf_rk (int matrix_layout, char uplo, lapack_int n,
float * a, lapack_int lda, float * e, lapack_int * ipiv)
Definition at line 36 of file lapacke_ssytrf_rk.c.
LAPACKE_ssytrf_rk_work 💀 — _rk plus work/lwork, exactly like you'd expect.
lapack_int LAPACKE_ssytrf_rk_work (int matrix_layout, char uplo, lapack_int
n, float * a, lapack_int lda, float * e, lapack_int * ipiv, float *
work, lapack_int lwork)
Definition at line 36 of file lapacke_ssytrf_rk_work.c.
LAPACKE_ssytrf_rook 🍓 — and finally for this stretch, the _rook one, closing us out with the same tidy a, lda, ipiv trio.
lapack_int LAPACKE_ssytrf_rook (int matrix_layout, char uplo, lapack_int n,
float * a, lapack_int lda, lapack_int * ipiv)
Definition at line 36 of file lapacke_ssytrf_rook.c.
LAPACKE_ssytrf_rook_work 💅
lapack_int LAPACKE_ssytrf_rook_work (int matrix_layout, char uplo, lapack_int n, float * a, lapack_int lda, lapack_int * ipiv, float * work, lapack_int lwork)
rook flavour and a _work variant?? okay multitasking icon ✨
Definition at line 36 of file lapacke_ssytrf_rook_work.c.
LAPACKE_ssytrf_work 🎀
lapack_int LAPACKE_ssytrf_work (int matrix_layout, char uplo, lapack_int n, float * a, lapack_int lda, lapack_int * ipiv, float * work, lapack_int lwork)
same float crew, no rook in the name, work + lwork still invited to the party 🫶
Definition at line 36 of file lapacke_ssytrf_work.c.
LAPACKE_ssytri 🦋
lapack_int LAPACKE_ssytri (int matrix_layout, char uplo, lapack_int n, float * a, lapack_int lda, const lapack_int * ipiv)
short, sweet, ipiv is const here so bestie's just reading, not touching 😌
Definition at line 36 of file lapacke_ssytri.c.
LAPACKE_ssytri2 🌸
lapack_int LAPACKE_ssytri2 (int matrix_layout, char uplo, lapack_int n, float * a, lapack_int lda, const lapack_int * ipiv)
the 2 sequel, same exact parameter list, no extra baggage 💖
Definition at line 36 of file lapacke_ssytri2.c.
LAPACKE_ssytri2_work ✨
lapack_int LAPACKE_ssytri2_work (int matrix_layout, char uplo, lapack_int n, float * a, lapack_int lda, const lapack_int * ipiv, float * work, lapack_int lwork)
now with work and lwork because sometimes you gotta bring your own space 👜
Definition at line 36 of file lapacke_ssytri2_work.c.
LAPACKE_ssytri2x 💫
lapack_int LAPACKE_ssytri2x (int matrix_layout, char uplo, lapack_int n, float * a, lapack_int lda, const lapack_int * ipiv, lapack_int nb)
2x means there's an nb in the mix, and honestly? she's giving block-size main character energy 👑
Definition at line 36 of file lapacke_ssytri2x.c.
LAPACKE_ssytri2x_work 🧚
lapack_int LAPACKE_ssytri2x_work (int matrix_layout, char uplo, lapack_int n, float * a, lapack_int lda, const lapack_int * ipiv, float * work, lapack_int nb)
work but no lwork — instead you get nb. iconic little plot twist ngl 🙈
Definition at line 36 of file lapacke_ssytri2x_work.c.
LAPACKE_ssytri_3 🔥
lapack_int LAPACKE_ssytri_3 (int matrix_layout, char uplo, lapack_int n, float * a, lapack_int lda, const float * e, const lapack_int * ipiv)
part three bestie!! this one brought a whole extra const float * e to the function 💅
Definition at line 36 of file lapacke_ssytri_3.c.
LAPACKE_ssytri_3_work 🌈
lapack_int LAPACKE_ssytri_3_work (int matrix_layout, char uplo, lapack_int n, float * a, lapack_int lda, const float * e, const lapack_int * ipiv, float * work, lapack_int lwork)
e and work and lwork — the full trio, no notes, she ate 🍓
Definition at line 36 of file lapacke_ssytri_3_work.c.
LAPACKE_ssytri_work ⭐
lapack_int LAPACKE_ssytri_work (int matrix_layout, char uplo, lapack_int n, float * a, lapack_int lda, const lapack_int * ipiv, float * work)
heads up: work shows up but there's literally no lwork in this signature. that's not a typo, that's just the vibe 💀
Definition at line 36 of file lapacke_ssytri_work.c.
LAPACKE_ssytrs 🎀
lapack_int LAPACKE_ssytrs (int matrix_layout, char uplo, lapack_int n, lapack_int nrhs, const float * a, lapack_int lda, const lapack_int * ipiv, float * b, lapack_int ldb)
enters nrhs, b and ldb — the solve-flavoured crew, all present and accounted for 🫶
Definition at line 36 of file lapacke_ssytrs.c.
LAPACKE_ssytrs2 💖
lapack_int LAPACKE_ssytrs2 (int matrix_layout, char uplo, lapack_int n, lapack_int nrhs, const float * a, lapack_int lda, const lapack_int * ipiv, float * b, lapack_int ldb)
two! identical parameter list to the original, she just has a 2 now and a whole attitude ✨
Definition at line 36 of file lapacke_ssytrs2.c.
LAPACKE_ssytrs2_work 🦋
lapack_int LAPACKE_ssytrs2_work (int matrix_layout, char uplo, lapack_int n, lapack_int nrhs, const float * a, lapack_int lda, const lapack_int * ipiv, float * b, lapack_int ldb, float * work)
work joined but not lwork, bestie's flying solo on this one 😭
Definition at line 36 of file lapacke_ssytrs2_work.c.
LAPACKE_ssytrs_3 🌸
lapack_int LAPACKE_ssytrs_3 (int matrix_layout, char uplo, lapack_int n, lapack_int nrhs, const float * a, lapack_int lda, const float * e, const lapack_int * ipiv, float * b, lapack_int ldb)
threequel energy, and e is back for round two of being const float * 💜
Definition at line 36 of file lapacke_ssytrs_3.c.
LAPACKE_ssytrs_3_work 💫
lapack_int LAPACKE_ssytrs_3_work (int matrix_layout, char uplo, lapack_int n, lapack_int nrhs, const float * a, lapack_int lda, const float * e, const lapack_int * ipiv, float * b, lapack_int ldb)
yes bestie, _work is in the filename but there's no work parameter here. read the signature, trust the signature 👀
Definition at line 36 of file lapacke_ssytrs_3_work.c.
LAPACKE_ssytrs_aa 🧚
lapack_int LAPACKE_ssytrs_aa (int matrix_layout, char uplo, lapack_int n, lapack_int nrhs, const float * a, lapack_int lda, const lapack_int * ipiv, float * b, lapack_int ldb)
aa suffix, same shape as the base one, no extra args, clean girl aesthetic 🤍
Definition at line 36 of file lapacke_ssytrs_aa.c.
LAPACKE_ssytrs_aa_2stage 👑
lapack_int LAPACKE_ssytrs_aa_2stage (int matrix_layout, char uplo, lapack_int n, lapack_int nrhs, float * a, lapack_int lda, float * tb, lapack_int ltb, lapack_int * ipiv, lapack_int * ipiv2, float * b, lapack_int ldb)
okay this one is stacked: tb, ltb, ipiv, and ipiv2?? two pivot arrays, two stages, absolute diva behaviour 💅🔥
also notes: a and tb and ipiv/ipiv2 and b are all non-const here — she writes, she does not read-only.
Definition at line 36 of file lapacke_ssytrs_aa_2stage.c.
LAPACKE_ssytrs_aa_2stage_work 🌈
lapack_int LAPACKE_ssytrs_aa_2stage_work (int matrix_layout, char uplo, lapack_int n, lapack_int nrhs, float * a, lapack_int lda, float * tb, lapack_int ltb, lapack_int * ipiv, lapack_int * ipiv2, float * b, lapack_int ldb)
longest name award goes to… this one 🏆 and the signature is identical to the non-_work version, work-less and unbothered 🍓
Definition at line 36 of file lapacke_ssytrs_aa_2stage_work.c.
LAPACKE_ssytrs_aa_work ⭐
lapack_int LAPACKE_ssytrs_aa_work (int matrix_layout, char uplo, lapack_int n, lapack_int nrhs, const float * a, lapack_int lda, const lapack_int * ipiv, float * b, lapack_int ldb, float * work, lapack_int lwork)
here work and lwork do show up, so the name isn't lying this time 💖
Definition at line 36 of file lapacke_ssytrs_aa_work.c.
LAPACKE_ssytrs_rook 🎀
lapack_int LAPACKE_ssytrs_rook (int matrix_layout, char uplo, lapack_int n, lapack_int nrhs, const float * a, lapack_int lda, const lapack_int * ipiv, float * b, lapack_int ldb)
rook edition of the solve, same params as the classic, just with that lil suffix 🦋
Definition at line 36 of file lapacke_ssytrs_rook.c.
LAPACKE_ssytrs_rook_work 🫶
lapack_int LAPACKE_ssytrs_rook_work (int matrix_layout, char uplo, lapack_int n, lapack_int nrhs, const float * a, lapack_int lda, const lapack_int * ipiv, float * b, lapack_int ldb)
rook and _work, but again — no work, no lwork. she's mysterious like that 🙈
Definition at line 36 of file lapacke_ssytrs_rook_work.c.
LAPACKE_ssytrs_work 🌸
lapack_int LAPACKE_ssytrs_work (int matrix_layout, char uplo, lapack_int n, lapack_int nrhs, const float * a, lapack_int lda, const lapack_int * ipiv, float * b, lapack_int ldb)
and the plot twist continues: _work in the name, zero work in the args. it's giving minimalism 😭
Definition at line 36 of file lapacke_ssytrs_work.c.
okay new letter, new family: stb* — triangular band crew, and rcond has entered the chat 💀
LAPACKE_stbcon 🔥
lapack_int LAPACKE_stbcon (int matrix_layout, char norm, char uplo, char diag, lapack_int n, lapack_int kd, const float * ab, lapack_int ldab, float * rcond)
three chars in a row — norm, uplo, diag — plus kd, ab, ldab and an out-param rcond. char buffet, she ate 💅
Definition at line 36 of file lapacke_stbcon.c.
LAPACKE_stbcon_work ✨
lapack_int LAPACKE_stbcon_work (int matrix_layout, char norm, char uplo, char diag, lapack_int n, lapack_int kd, const float * ab, lapack_int ldab, float * rcond, float * work, lapack_int * iwork)
now with both work and iwork — float workspace and int workspace, double-booked and thriving 🧚
Definition at line 36 of file lapacke_stbcon_work.c.
LAPACKE_stbrfs 🌈
lapack_int LAPACKE_stbrfs (int matrix_layout, char uplo, char trans, char diag, lapack_int n, lapack_int kd, lapack_int nrhs, const float * ab, lapack_int ldab, const float * b, lapack_int ldb, const float * x, lapack_int ldx, float * ferr, float * berr)
the long one 😮💨 b/ldb and x/ldx both show up, plus ferr and berr out-params. very "I have two phones" energy 🔥
Definition at line 36 of file lapacke_stbrfs.c.
LAPACKE_stbrfs_work 💜
lapack_int LAPACKE_stbrfs_work (int matrix_layout, char uplo, char trans, char diag, lapack_int n, lapack_int kd, lapack_int nrhs, const float * ab, lapack_int ldab, const float * b, lapack_int ldb, const float * x, lapack_int ldx, float * ferr, float * berr, float * work, lapack_int * iwork)
everything from above plus work and iwork tacked on the end. she just keeps going and honestly? respect 🫶
Definition at line 36 of file lapacke_stbrfs_work.c.
LAPACKE_stbtrs 🎀
lapack_int LAPACKE_stbtrs (int matrix_layout, char uplo, char trans, char diag, lapack_int n, lapack_int kd, lapack_int nrhs, const float * ab, lapack_int ldab, float * b, lapack_int ldb)
chill little band solve — no rcond, no ferr/berr, just b and ldb getting written 💖
Definition at line 36 of file lapacke_stbtrs.c.
LAPACKE_stbtrs_work 🦋
lapack_int LAPACKE_stbtrs_work (int matrix_layout, char uplo, char trans, char diag, lapack_int n, lapack_int kd, lapack_int nrhs, const float * ab, lapack_int ldab, float * b, lapack_int ldb)
_work in the name, no work in the args. we've been over this, it's a lifestyle at this point 🙈
Definition at line 36 of file lapacke_stbtrs_work.c.
and now the packed-transr girlies 🧚 stfsm through stfttr — they all start with transr and honestly it's a whole aesthetic.
LAPACKE_stfsm ⭐
lapack_int LAPACKE_stfsm (int matrix_layout, char transr, char side, char uplo, char trans, char diag, lapack_int m, lapack_int n, float alpha, const float * a, float * b, lapack_int ldb)
four chars before a single int 😭 transr, side, uplo, trans, diag — then m, n, alpha, a, b, ldb. yes alpha is a plain float, not a pointer. she's built different 💅
Definition at line 36 of file lapacke_stfsm.c.
LAPACKE_stfsm_work 🌸
lapack_int LAPACKE_stfsm_work (int matrix_layout, char transr, char side, char uplo, char trans, char diag, lapack_int m, lapack_int n, float alpha, const float * a, float * b, lapack_int ldb)
identical signature to the non-_work one, because the _work is a state of mind, not a parameter 🫶
Definition at line 36 of file lapacke_stfsm_work.c.
LAPACKE_stftri 🎀
lapack_int LAPACKE_stftri (int matrix_layout, char transr, char uplo, char diag, lapack_int n, float * a)
tiny!! no lda, no work — just a as a bare float *. minimal queen ✨
Definition at line 36 of file lapacke_stftri.c.
LAPACKE_stftri_work 🦋
lapack_int LAPACKE_stftri_work (int matrix_layout, char transr, char uplo, char diag, lapack_int n, float * a)
same six args, _work edition, still no lda. consistency icon 💖
Definition at line 36 of file lapacke_stftri_work.c.
LAPACKE_stfttp 💫
lapack_int LAPACKE_stfttp (int matrix_layout, char transr, char uplo, lapack_int n, const float * arf, float * ap)
two pointers, two jobs: arf is const float * going in, ap is float * coming out. conversion energy 🌈
Definition at line 36 of file lapacke_stfttp.c.
LAPACKE_stfttp_work 💜
lapack_int LAPACKE_stfttp_work (int matrix_layout, char transr, char uplo, lapack_int n, const float * arf, float * ap)
same again bestie, no extra args, she's just got _work in the filename for the branding 👑
Definition at line 36 of file lapacke_stfttp_work.c.
LAPACKE_stfttr 🍓
lapack_int LAPACKE_stfttr (int matrix_layout, char transr, char uplo, lapack_int n, const float * arf, float * a, lapack_int lda)
this one does have lda — so arf in, a + lda out, and the whole transr squad out front 🎀
Definition at line 36 of file lapacke_stfttr.c.
LAPACKE_stfttr_work 🌟
lapack_int LAPACKE_stfttr_work (int matrix_layout, char transr, char uplo, lapack_int n, const float * arf, float * a, lapack_int lda)
yeah, same. lda included, work excluded, business as usual 💅
Definition at line 36 of file lapacke_stfttr_work.c.
and we've hit the pencil-s family 🥕 (s for single precision, bestie, we're still in float land).
LAPACKE_stgevc 🔥
lapack_int LAPACKE_stgevc (int matrix_layout, char side, char howmny, const lapack_logical * select, lapack_int n, const float * s, lapack_int lds, const float * p, lapack_int ldp, float * vl, lapack_int ldvl, float * vr, lapack_int ldvr, lapack_int mm, lapack_int * m)
a lot going on: select is const lapack_logical * (yes, lapack_logical, not float!), and you've got mm in and m as a pointer out 😮💨 long-distance-relationship-core function 💀
Definition at line 36 of file lapacke_stgevc.c.
LAPACKE_stgevc_work 🫶
lapack_int LAPACKE_stgevc_work (int matrix_layout, char side, char howmny, const lapack_logical * select, lapack_int n, const float * s, lapack_int lds, const float * p, lapack_int ldp, float * vl, lapack_int ldvl, float * vr, lapack_int ldvr, lapack_int mm, lapack_int * m, float * work)
everything above plus float * work at the very end. one extra bestie, no lwork needed 💖
Definition at line 36 of file lapacke_stgevc_work.c.
LAPACKE_stgexc ✨
lapack_int LAPACKE_stgexc (int matrix_layout, lapack_logical wantq, lapack_logical wantz, lapack_int n, float * a, lapack_int lda, float * b, lapack_int ldb, float * q, lapack_int ldq, float * z, lapack_int ldz, lapack_int * ifst, lapack_int * ilst)
wantq and wantz are plain lapack_logical values (not pointers!) and they're asking the real questions 🎀 then ifst and ilst are lapack_int * at the end, both writeable 👀
Definition at line 36 of file lapacke_stgexc.c.
LAPACKE_stgexc_work 🌸
lapack_int LAPACKE_stgexc_work (int matrix_layout, lapack_logical wantq, lapack_logical wantz, lapack_int n, float * a, lapack_int lda, float * b, lapack_int ldb, float * q, lapack_int ldq, float * z, lapack_int ldz, lapack_int * ifst, lapack_int * ilst, float * work, lapack_int lwork)
the full work + lwork combo, appended like a little bow on top 🎀✨
Definition at line 36 of file lapacke_stgexc_work.c.
LAPACKE_stgsen 💫
lapack_int LAPACKE_stgsen (int matrix_layout, lapack_int ijob, lapack_logical wantq, lapack_logical wantz, const lapack_logical * select, lapack_int n, float * a, lapack_int lda, float * b, lapack_int ldb, float * alphar, float * alphai, float * beta, float * q, lapack_int ldq, float * z, lapack_int ldz, lapack_int * m, float * pl, float * pr, float * dif)
okay this is THE long one, count the args bestie 😭 ijob as a lapack_int, wantq/wantz as plain logicals, select as const lapack_logical *, and then out-params for days: alphar, alphai, beta, q, z, m, pl, pr, dif. she's giving final-boss energy 👑🔥
Definition at line 36 of file lapacke_stgsen.c.
LAPACKE_stgsen_work 🌈
lapack_int LAPACKE_stgsen_work (int matrix_layout, lapack_int ijob, lapack_logical wantq, lapack_logical wantz, const lapack_logical * select, lapack_int n, float * a, lapack_int lda, float * b, lapack_int ldb, float * alphar, float * alphai, float * beta, float * q, lapack_int ldq, float * z, lapack_int ldz, lapack_int * m, float * pl, float * pr, float * dif, float * work, lapack_int lwork, lapack_int * iwork, lapack_int liwork)
same huge list plus work, lwork, iwork, liwork — both work types, both lengths, absolutely no restraint and I love that for her 💜🫶
Definition at line 36 of file lapacke_stgsen_work.c.
LAPACKE_stgsja 🍓
lapack_int LAPACKE_stgsja (int matrix_layout, char jobu, char jobv, char jobq, lapack_int m, lapack_int p, lapack_int n, lapack_int k, lapack_int l, float * a, lapack_int lda, float * b, lapack_int ldb, float tola, float tolb, float * alpha, float * beta, float * u, lapack_int ldu, float * v, lapack_int ldv, float * q, lapack_int ldq, lapack_int * ncycle)
closing out this batch with a monster 💀 three job chars (jobu, jobv, jobq), three dims (m, p, n), then k and l, then tola/tolb as plain float tolerances, then a, b, alpha, beta, u, v, q with all their ld* besties, and ncycle as a lapack_int * out-param. twenty-four parameters. twenty-four!! she said go big or go home and then went big anyway ✨👑💅
Definition at line 36 of file lapacke_stgsja.c.
LAPACKE_stgsja_work
lapack_int LAPACKE_stgsja_work (int matrix_layout, char jobu, char jobv,
char jobq, lapack_int m, lapack_int p, lapack_int n, lapack_int k,
lapack_int l, float * a, lapack_int lda, float * b, lapack_int ldb,
float tola, float tolb, float * alpha, float * beta, float * u,
lapack_int ldu, float * v, lapack_int ldv, float * q, lapack_int ldq,
float * work, lapack_int * ncycle)
Definition at line 36 of lapacke_stgsja_work.c. 💅 three job chars (jobu, jobv, jobq), three matrices (u, v, q), three leading dimensions (ldu, ldv, ldq) — the way this one is so symmetrical, we love a consistent queen. It's the _work flavor, so work and ncycle come along too.
LAPACKE_stgsna
lapack_int LAPACKE_stgsna (int matrix_layout, char job, char howmny,
const lapack_logical * select, lapack_int n, const float * a, lapack_int lda,
const float * b, lapack_int ldb, const float * vl, lapack_int ldvl,
const float * vr, lapack_int ldvr, float * s, float * dif, lapack_int
mm, lapack_int * m)
Definition at line 36 of lapacke_stgsna.c. bestie look at the select, mm and m trio — select is a const lapack_logical *, mm is your capacity, m is a pointer where the count comes back. classic in-out energy. 🦋
LAPACKE_stgsna_work
lapack_int LAPACKE_stgsna_work (int matrix_layout, char job, char howmny,
const lapack_logical * select, lapack_int n, const float * a, lapack_int
lda, const float * b, lapack_int ldb, const float * vl, lapack_int ldvl,
const float * vr, lapack_int ldvr, float * s, float * dif, lapack_int
mm, lapack_int * m, float * work, lapack_int lwork, lapack_int * iwork)
Definition at line 36 of lapacke_stgsna_work.c. literally the same list as above with work, lwork and iwork tacked on the end — you bring the scratch, it brings the math. ✨
LAPACKE_stgsyl
lapack_int LAPACKE_stgsyl (int matrix_layout, char trans, lapack_int ijob,
lapack_int m, lapack_int n, const float * a, lapack_int lda, const float
* b, lapack_int ldb, float * c, lapack_int ldc, const float * d,
lapack_int ldd, const float * e, lapack_int lde, float * f, lapack_int
ldf, float * scale, float * dif)
Definition at line 36 of lapacke_stgsyl.c. six matrices, six leading dims, one ijob, one trans, and the lil scale + dif out-params at the end. she's thorough. 👑
LAPACKE_stgsyl_work
lapack_int LAPACKE_stgsyl_work (int matrix_layout, char trans, lapack_int
ijob, lapack_int m, lapack_int n, const float * a, lapack_int lda, const
float * b, lapack_int ldb, float * c, lapack_int ldc, const float * d,
lapack_int ldd, const float * e, lapack_int lde, float * f, lapack_int
ldf, float * scale, float * dif, float * work, lapack_int lwork,
lapack_int * iwork)
Definition at line 36 of lapacke_stgsyl_work.c. same whole crew, plus work, lwork, iwork. 🫶
LAPACKE_stpcon
lapack_int LAPACKE_stpcon (int matrix_layout, char norm, char uplo, char
diag, lapack_int n, const float * ap, float * rcond)
Definition at line 36 of lapacke_stpcon.c. short and sweet — norm, uplo, diag, n, packed ap, and rcond comes back to you. compact icon behavior. 🎀
LAPACKE_stpcon_work
lapack_int LAPACKE_stpcon_work (int matrix_layout, char norm, char uplo,
char diag, lapack_int n, const float * ap, float * rcond, float * work,
lapack_int * iwork)
Definition at line 36 of lapacke_stpcon_work.c. the same call with work and iwork bolted on. no lwork here, don't go looking for one. 🙈
LAPACKE_stpmqrt
lapack_int LAPACKE_stpmqrt (int matrix_layout, char side, char trans,
lapack_int m, lapack_int n, lapack_int k, lapack_int l, lapack_int nb,
const float * v, lapack_int ldv, const float * t, lapack_int ldt, float
* a, lapack_int lda, float * b, lapack_int ldb)
Definition at line 36 of lapacke_stpmqrt.c. four size ints (m, n, k, l) plus a block size nb, and two const inputs v and t feeding two in-out matrices a and b. it's giving blocked-algorithm main character energy. 🔥
LAPACKE_stpmqrt_work
lapack_int LAPACKE_stpmqrt_work (int matrix_layout, char side, char trans,
lapack_int m, lapack_int n, lapack_int k, lapack_int l, lapack_int nb,
const float * v, lapack_int ldv, const float * t, lapack_int ldt, float
* a, lapack_int lda, float * b, lapack_int ldb, float * work)
Definition at line 36 of lapacke_stpmqrt_work.c. identical line-up with one extra work pointer, no length arg. noted, bestie. ⭐
LAPACKE_stpqrt
lapack_int LAPACKE_stpqrt (int matrix_layout, lapack_int m, lapack_int n,
lapack_int l, lapack_int nb, float * a, lapack_int lda, float * b,
lapack_int ldb, float * t, lapack_int ldt)
Definition at line 36 of lapacke_stpqrt.c. m, n, l, nb, then a/lda, b/ldb, t/ldt. everything's a float pointer here, nothing's const, lowkey lawless. 💀
LAPACKE_stpqrt2
lapack_int LAPACKE_stpqrt2 (int matrix_layout, lapack_int m, lapack_int n,
lapack_int l, float * a, lapack_int lda, float * b, lapack_int ldb,
float * t, lapack_int ldt)
Definition at line 36 of lapacke_stpqrt2.c. same as LAPACKE_stpqrt minus the nb, plus a 2 in the name. yes the 2 matters, it's a whole different function, do not swap them. 😭
LAPACKE_stpqrt2_work
lapack_int LAPACKE_stpqrt2_work (int matrix_layout, lapack_int m, lapack_int
n, lapack_int l, float * a, lapack_int lda, float * b, lapack_int ldb,
float * t, lapack_int ldt)
Definition at line 36 of lapacke_stpqrt2_work.c. and yes — this signature is character-for-character the same as LAPACKE_stpqrt2. no work array, no lwork, nothing. that's not me being lazy, that's literally the page. ngl iconic of it. 💅
LAPACKE_stpqrt_work
lapack_int LAPACKE_stpqrt_work (int matrix_layout, lapack_int m, lapack_int
n, lapack_int l, lapack_int nb, float * a, lapack_int lda, float * b,
lapack_int ldb, float * t, lapack_int ldt, float * work)
Definition at line 36 of lapacke_stpqrt_work.c. keeps the nb, gains a work. balance restored. 🌸
LAPACKE_stprfb
lapack_int LAPACKE_stprfb (int matrix_layout, char side, char trans, char
direct, char storev, lapack_int m, lapack_int n, lapack_int k,
lapack_int l, const float * v, lapack_int ldv, const float * t,
lapack_int ldt, float * a, lapack_int lda, float * b, lapack_int ldb)
Definition at line 36 of lapacke_stprfb.c. four chars to start — side, trans, direct, storev — the way that's four personality traits in a row. then the usual size squad and the matrix parade. 🦋
LAPACKE_stprfb_work
lapack_int LAPACKE_stprfb_work (int matrix_layout, char side, char trans,
char direct, char storev, lapack_int m, lapack_int n, lapack_int k,
lapack_int l, const float * v, lapack_int ldv, const float * t,
lapack_int ldt, float * a, lapack_int lda, float * b, lapack_int ldb,
float * work, lapack_int ldwork)
Definition at line 36 of lapacke_stprfb_work.c. extra points for the sixteenth arg being ldwork and not lwork. she's different, she's a ldwork girlie. 🙈
LAPACKE_stprfs
lapack_int LAPACKE_stprfs (int matrix_layout, char uplo, char trans, char
diag, lapack_int n, lapack_int nrhs, const float * ap, const float * b,
lapack_int ldb, const float * x, lapack_int ldx, float * ferr, float *
berr)
Definition at line 36 of lapacke_stprfs.c. packed ap in, b and x with their own lds, and the iconic ferr/berr error pair on the way out. 🎀
LAPACKE_stprfs_work
lapack_int LAPACKE_stprfs_work (int matrix_layout, char uplo, char trans,
char diag, lapack_int n, lapack_int nrhs, const float * ap, const float
* b, lapack_int ldb, const float * x, lapack_int ldx, float * ferr,
float * berr, float * work, lapack_int * iwork)
Definition at line 36 of lapacke_stprfs_work.c. plus work and iwork, as per. ✨
LAPACKE_stptri
lapack_int LAPACKE_stptri (int matrix_layout, char uplo, char diag,
lapack_int n, float * ap)
Definition at line 36 of lapacke_stptri.c. five args total. five!! a minimalist. ap is non-const so bestie it's getting changed in place. 🫶
LAPACKE_stptri_work
lapack_int LAPACKE_stptri_work (int matrix_layout, char uplo, char diag,
lapack_int n, float * ap)
Definition at line 36 of lapacke_stptri_work.c. and here we go again — matches LAPACKE_stptri exactly, arg for arg, no trailing extras. copy-paste energy but make it API. 👑
LAPACKE_stptrs
lapack_int LAPACKE_stptrs (int matrix_layout, char uplo, char trans, char
diag, lapack_int n, lapack_int nrhs, const float * ap, float * b,
lapack_int ldb)
Definition at line 36 of lapacke_stptrs.c. ap is const, b is not — one of them is a read-only diva and one of them is doing the work. 🍓
LAPACKE_stptrs_work
lapack_int LAPACKE_stptrs_work (int matrix_layout, char uplo, char trans,
char diag, lapack_int n, lapack_int nrhs, const float * ap, float * b,
lapack_int ldb)
Definition at line 36 of lapacke_stptrs_work.c. identical to LAPACKE_stptrs, every single token. i checked. twice. 💀
LAPACKE_stpttf
lapack_int LAPACKE_stpttf (int matrix_layout, char transr, char uplo,
lapack_int n, const float * ap, float * arf)
Definition at line 36 of lapacke_stpttf.c. packed to rectangular-free — ap goes in const, arf comes out. note it's transr with an r, not trans. yes that matters. 🦋
LAPACKE_stpttf_work
lapack_int LAPACKE_stpttf_work (int matrix_layout, char transr, char uplo,
lapack_int n, const float * ap, float * arf)
Definition at line 36 of lapacke_stpttf_work.c. same six args, same order, same everything. they're twins fr fr. 🌈
LAPACKE_stpttr
lapack_int LAPACKE_stpttr (int matrix_layout, char uplo, lapack_int n, const
float * ap, float * a, lapack_int lda)
Definition at line 36 of lapacke_stpttr.c. only one char option (uplo) and then it's straight to business with ap → a, lda. efficient queen. ⭐
LAPACKE_stpttr_work
lapack_int LAPACKE_stpttr_work (int matrix_layout, char uplo, lapack_int n,
const float * ap, float * a, lapack_int lda)
Definition at line 36 of lapacke_stpttr_work.c. yep, character-for-character the same as LAPACKE_stpttr. the _work suffix is doing absolutely nothing structural here and i respect it. 💅
LAPACKE_strcon
lapack_int LAPACKE_strcon (int matrix_layout, char norm, char uplo, char
diag, lapack_int n, const float * a, lapack_int lda, float * rcond)
Definition at line 36 of lapacke_strcon.c. norm, uplo, diag, the size n, a with lda, and rcond returned. tight, clean, no notes. 🎀
LAPACKE_strcon_work
lapack_int LAPACKE_strcon_work (int matrix_layout, char norm, char uplo,
char diag, lapack_int n, const float * a, lapack_int lda, float * rcond,
float * work, lapack_int * iwork)
Definition at line 36 of lapacke_strcon_work.c. + work + iwork. the standard glow-up. 🔥
LAPACKE_strevc
lapack_int LAPACKE_strevc (int matrix_layout, char side, char howmny,
lapack_logical * select, lapack_int n, const float * t, lapack_int ldt,
float * vl, lapack_int ldvl, float * vr, lapack_int ldvr, lapack_int mm,
lapack_int * m)
Definition at line 36 of lapacke_strevc.c. watch the select here — it's a non-const lapack_logical *, unlike her cousin LAPACKE_stgsna up above which takes it const. details matter, bestie. 👑
LAPACKE_strevc_work
lapack_int LAPACKE_strevc_work (int matrix_layout, char side, char howmny,
lapack_logical * select, lapack_int n, const float * t, lapack_int ldt,
float * vl, lapack_int ldvl, float * vr, lapack_int ldvr, lapack_int mm,
lapack_int * m, float * work)
Definition at line 36 of lapacke_strevc_work.c. same, plus a single trailing work. no length, no iwork. she travels light. 🦋
LAPACKE_strexc
lapack_int LAPACKE_strexc (int matrix_layout, char compq, lapack_int n,
float * t, lapack_int ldt, float * q, lapack_int ldq, lapack_int * ifst,
lapack_int * ilst)
Definition at line 36 of lapacke_strexc.c. two in-out matrices (t and q), and ifst + ilst as mutable lapack_int * — those two are basically coordinates in pointer form. 📍
LAPACKE_strexc_work
lapack_int LAPACKE_strexc_work (int matrix_layout, char compq, lapack_int n,
float * t, lapack_int ldt, float * q, lapack_int ldq, lapack_int * ifst,
lapack_int * ilst, float * work)
Definition at line 36 of lapacke_strexc_work.c. everything above, then work. that's the whole diff. 💜
LAPACKE_strrfs
lapack_int LAPACKE_strrfs (int matrix_layout, char uplo, char trans, char
diag, lapack_int n, lapack_int nrhs, const float * a, lapack_int lda,
const float * b, lapack_int ldb, const float * x, lapack_int ldx, float
* ferr, float * berr)
Definition at line 36 of lapacke_strrfs.c. three const inputs (a, b, x), each with its own leading dim, and the ferr/berr duo at the finish line. consistent girlie. 🎀
LAPACKE_strrfs_work
lapack_int LAPACKE_strrfs_work (int matrix_layout, char uplo, char trans,
char diag, lapack_int n, lapack_int nrhs, const float * a, lapack_int
lda, const float * b, lapack_int ldb, const float * x, lapack_int ldx,
float * ferr, float * berr, float * work, lapack_int * iwork)
Definition at line 36 of lapacke_strrfs_work.c. + work + iwork, no lwork. keep up. ✨
LAPACKE_strsen
lapack_int LAPACKE_strsen (int matrix_layout, char job, char compq, const
lapack_logical * select, lapack_int n, float * t, lapack_int ldt, float
* q, lapack_int ldq, float * wr, float * wi, lapack_int * m, float * s,
float * sep)
Definition at line 36 of lapacke_strsen.c. job and compq chars, a const select, then t, q, wr, wi, m, s, sep. that's a lot of out-params and honestly? she earned them. 🌸
LAPACKE_strsen_work
lapack_int LAPACKE_strsen_work (int matrix_layout, char job, char compq,
const lapack_logical * select, lapack_int n, float * t, lapack_int ldt,
float * q, lapack_int ldq, float * wr, float * wi, lapack_int * m, float
* s, float * sep, float * work, lapack_int lwork, lapack_int * iwork,
lapack_int liwork)
Definition at line 36 of lapacke_strsen_work.c. and HERE she goes full maximalist: work, lwork, iwork, liwork. four scratch args. that's the boss-level _work signature, no cap. 🔥
LAPACKE_strsna
lapack_int LAPACKE_strsna (int matrix_layout, char job, char howmny, const
lapack_logical * select, lapack_int n, const float * t, lapack_int ldt,
const float * vl, lapack_int ldvl, const float * vr, lapack_int ldvr,
float * s, float * sep, lapack_int mm, lapack_int * m)
Definition at line 36 of lapacke_strsna.c. t, vl, vr all const, s and sep as outputs, mm in and m out. note it's sep here and dif over in LAPACKE_stgsna — different pages, different letters, don't mix them up. 🫶
LAPACKE_strsna_work
lapack_int LAPACKE_strsna_work (int matrix_layout, char job, char howmny,
const lapack_logical * select, lapack_int n, const float * t, lapack_int
ldt, const float * vl, lapack_int ldvl, const float * vr, lapack_int
ldvr, float * s, float * sep, lapack_int mm, lapack_int * m, float *
work, lapack_int ldwork, lapack_int * iwork)
Definition at line 36 of lapacke_strsna_work.c. watch it — the middle scratch arg is ldwork, not lwork. and there's still an iwork after. yes, both. 😭
LAPACKE_strsyl
lapack_int LAPACKE_strsyl (int matrix_layout, char trana, char tranb,
lapack_int isgn, lapack_int m, lapack_int n, const float * a, lapack_int
lda, const float * b, lapack_int ldb, float * c, lapack_int ldc, float *
scale)
Definition at line 36 of lapacke_strsyl.c. two trans chars (trana, tranb — not one shared trans), an isgn, two const inputs feeding one in-out c, and scale hanging out at the end. 💅
LAPACKE_strsyl_work
lapack_int LAPACKE_strsyl_work (int matrix_layout, char trana, char tranb,
lapack_int isgn, lapack_int m, lapack_int n, const float * a, lapack_int
lda, const float * b, lapack_int ldb, float * c, lapack_int ldc, float *
scale)
Definition at line 36 of lapacke_strsyl_work.c. identical to LAPACKE_strsyl, all thirteen args, zero additions. the _work name is purely vibes this time. 🦋
LAPACKE_strtri
lapack_int LAPACKE_strtri (int matrix_layout, char uplo, char diag,
lapack_int n, float * a, lapack_int lda)
Definition at line 36 of lapacke_strtri.c. uplo, diag, n, and a mutable a with lda — in-place queen, coming through. 👑
💅 LAPACKE_strtri_work
lapack_int LAPACKE_strtri_work (int matrix_layout, char uplo, char diag,
lapack_int n, float * a, lapack_int lda)
Definition at line 36 of file lapacke_strtri_work.c.
the _work twin has entered the chat 🫶 same cast, same float * a, same lda, just with the workspace vibe spelled out. and yes bestie — line 36 again. we love consistency.
✨ LAPACKE_strtrs
lapack_int LAPACKE_strtrs (int matrix_layout, char uplo, char trans, char
diag, lapack_int n, lapack_int nrhs, const float * a, lapack_int lda,
float * b, lapack_int ldb)
Definition at line 36 of file lapacke_strtrs.c.
four chars in a row (uplo, trans, diag) and then the classic a/lda, b/ldb duo — it's giving "I know exactly what I'm doing" energy 💅 note the const on a and no const on b, because b is the one getting changed up in here, periodt.
🌸 LAPACKE_strtrs_work
lapack_int LAPACKE_strtrs_work (int matrix_layout, char uplo, char trans,
char diag, lapack_int n, lapack_int nrhs, const float * a, lapack_int
lda, float * b, lapack_int ldb)
Definition at line 36 of file lapacke_strtrs_work.c.
look at that — literally the same parameter list as LAPACKE_strtrs, no extra work array in sight, and the wrapper still gets its own file. iconic behavior honestly. 🎀
🦋 LAPACKE_strttf
lapack_int LAPACKE_strttf (int matrix_layout, char transr, char uplo,
lapack_int n, const float * a, lapack_int lda, float * arf)
Definition at line 36 of file lapacke_strttf.c.
okay so this one has transr (with the r, don't @ me) and outputs into arf — that's a whole extra output pointer, main character energy fr fr. ⭐
🧚 LAPACKE_strttf_work
lapack_int LAPACKE_strttf_work (int matrix_layout, char transr, char uplo,
lapack_int n, const float * a, lapack_int lda, float * arf)
Definition at line 36 of file lapacke_strttf_work.c.
same signature, _work edition, zero extra args. the audacity?? 😭 love that for us though, less typing.
🍓 LAPACKE_strttp
lapack_int LAPACKE_strttp (int matrix_layout, char uplo, lapack_int n, const
float * a, lapack_int lda, float * ap)
Definition at line 36 of file lapacke_strttp.c.
no trans anything here, just uplo, n, and the a → ap glow-up. ap is not const, so it's definitely the one being written into, no cap. 🎀
🌈 LAPACKE_strttp_work
lapack_int LAPACKE_strttp_work (int matrix_layout, char uplo, lapack_int n,
const float * a, lapack_int lda, float * ap)
Definition at line 36 of file lapacke_strttp_work.c.
identical twin behavior, _work suffix only. the way these two are just the same thing with different filenames 😭 Definition at line 36 — every single time, bestie, it's a bit at this point.
👑 LAPACKE_stzrzf
lapack_int LAPACKE_stzrzf (int matrix_layout, lapack_int m, lapack_int n,
float * a, lapack_int lda, float * tau)
Definition at line 36 of file lapacke_stzrzf.c.
okay the name is a whole keyboard smash (stzrzf?? say it with your chest 💀) but the args are chill: m, n, a mutable a with its lda, and tau. no const on a, so it's getting rewritten. 🫶
🔥 LAPACKE_stzrzf_work
lapack_int LAPACKE_stzrzf_work (int matrix_layout, lapack_int m, lapack_int
n, float * a, lapack_int lda, float * tau, float * work, lapack_int
lwork)
Definition at line 36 of file lapacke_stzrzf_work.c.
here's where _work actually earns its name — float * work and lapack_int lwork show up at the end, exactly like you'd expect. plus tau still chilling in the middle. ⭐
💜 LAPACKE_zbbcsd
lapack_int LAPACKE_zbbcsd (int matrix_layout, char jobu1, char jobu2, char
jobv1t, char jobv2t, char trans, lapack_int m, lapack_int p, lapack_int
q, double * theta, double * phi, lapack_complex_double * u1, lapack_int
ldu1, lapack_complex_double * u2, lapack_int ldu2, lapack_complex_double
* v1t, lapack_int ldv1t, lapack_complex_double * v2t, lapack_int ldv2t,
double * b11d, double * b11e, double * b12d, double * b12e, double *
b21d, double * b21e, double * b22d, double * b22e)
Definition at line 36 of file lapacke_zbbcsd.c.
BESTIE. look at this parameter list. 😭 five chars of job/trans flags (jobu1, jobu2, jobv1t, jobv2t, trans), then m, p, q, then a whole parade of complex u1/u2/v1t/v2t with their ld buddies, and then — count 'em — eight double * pointers named b11d, b11e, b12d, b12e, b21d, b21e, b22d, b22e. that's the b-matrix core, sliced and diced. genuinely ate and left no crumbs 👑 no const anywhere, everything's getting touched.
🌟 LAPACKE_zbbcsd_work
lapack_int LAPACKE_zbbcsd_work (int matrix_layout, char jobu1, char jobu2,
char jobv1t, char jobv2t, char trans, lapack_int m, lapack_int p,
lapack_int q, double * theta, double * phi, lapack_complex_double * u1,
lapack_int ldu1, lapack_complex_double * u2, lapack_int ldu2,
lapack_complex_double * v1t, lapack_int ldv1t, lapack_complex_double *
v2t, lapack_int ldv2t, double * b11d, double * b11e, double * b12d,
double * b12e, double * b21d, double * b21e, double * b22d, double *
b22e, double * rwork, lapack_int lrwork)
Definition at line 36 of file lapacke_zbbcsd_work.c.
the _work version of the beast above, and all it adds is double * rwork + lapack_int lrwork tacked on the end. that's it. that's the whole difference. 😭 everything else is byte-for-byte the vibe.
🦋 LAPACKE_zbdsqr
lapack_int LAPACKE_zbdsqr (int matrix_layout, char uplo, lapack_int n,
lapack_int ncvt, lapack_int nru, lapack_int ncc, double * d, double * e,
lapack_complex_double * vt, lapack_int ldvt, lapack_complex_double * u,
lapack_int ldu, lapack_complex_double * c, lapack_int ldc)
Definition at line 36 of file lapacke_zbdsqr.c.
okay so we got n, ncvt, nru, ncc — yes those are four separate sizes, stay with me — then the real-valued d and e arrays (doubles, not complexes, iykyk), then complex vt/u/c each with their ld. uplo leads the whole thing. no consts, so everything is fair game to be written. 💅
🌸 LAPACKE_zbdsqr_work
lapack_int LAPACKE_zbdsqr_work (int matrix_layout, char uplo, lapack_int n,
lapack_int ncvt, lapack_int nru, lapack_int ncc, double * d, double * e,
lapack_complex_double * vt, lapack_int ldvt, lapack_complex_double * u,
lapack_int ldu, lapack_complex_double * c, lapack_int ldc, double *
work)
Definition at line 36 of file lapacke_zbdsqr_work.c.
same as LAPACKE_zbdsqr with one single double * work on the end. no lwork here — just the pointer, and that's the tea. 🍵 note that it's a double *, not complex, because that's what the original says and we do NOT freelance. 🫶
💀 LAPACKE_zcgesv
lapack_int LAPACKE_zcgesv (int matrix_layout, lapack_int n, lapack_int nrhs,
lapack_complex_double * a, lapack_int lda, lapack_int * ipiv,
lapack_complex_double * b, lapack_int ldb, lapack_complex_double * x,
lapack_int ldx, lapack_int * iter)
Definition at line 36 of file lapacke_zcgesv.c.
the zc prefix means double-complex calling single-complex internals, and honestly the name is telling you that up front — we love a name that does its job. 🔥 you've got the classic a/lda, b/ldb, then x/ldx and lapack_int * ipiv plus an output-ish lapack_int * iter right at the end. no consts. all vibes.
⭐ LAPACKE_zcgesv_work
lapack_int LAPACKE_zcgesv_work (int matrix_layout, lapack_int n, lapack_int
nrhs, lapack_complex_double * a, lapack_int lda, lapack_int * ipiv,
lapack_complex_double * b, lapack_int ldb, lapack_complex_double * x,
lapack_int ldx, lapack_complex_double * work, lapack_complex_float *
swork, double * rwork, lapack_int * iter)
Definition at line 36 of file lapacke_zcgesv_work.c.
okay now THIS is a workspace moment. 👑 three whole scratch arrays before iter: lapack_complex_double * work, lapack_complex_float * swork (notice it's the single complex type, exactly as written, don't come for me), and double * rwork. no lwork/lrwork in sight — just hand over the buffers and pray, bestie. 🙈
🎀 LAPACKE_zcposv
lapack_int LAPACKE_zcposv (int matrix_layout, char uplo, lapack_int n,
lapack_int nrhs, lapack_complex_double * a, lapack_int lda,
lapack_complex_double * b, lapack_int ldb, lapack_complex_double * x,
lapack_int ldx, lapack_int * iter)
Definition at line 36 of file lapacke_zcposv.c.
LAPACKE_zcgesv's cousin who leads with uplo instead of dropping straight into the sizes. ✨ otherwise same energy: a/lda, b/ldb, x/ldx, ending on lapack_int * iter. no consts, everything mutable, we move. 🦋
💖 LAPACKE_zcposv_work
lapack_int LAPACKE_zcposv_work (int matrix_layout, char uplo, lapack_int n,
lapack_int nrhs, lapack_complex_double * a, lapack_int lda,
lapack_complex_double * b, lapack_int ldb, lapack_complex_double * x,
lapack_int ldx, lapack_complex_double * work, lapack_complex_float *
swork, double * rwork, lapack_int * iter)
Definition at line 36 of file lapacke_zcposv_work.c.
and the _work twin brings the exact same trio of scratch buffers — work, swork, rwork — right before iter. consistency is so sexy. 💅
🧚 LAPACKE_zgbbrd
lapack_int LAPACKE_zgbbrd (int matrix_layout, char vect, lapack_int m,
lapack_int n, lapack_int ncc, lapack_int kl, lapack_int ku,
lapack_complex_double * ab, lapack_int ldab, double * d, double * e,
lapack_complex_double * q, lapack_int ldq, lapack_complex_double * pt,
lapack_int ldpt, lapack_complex_double * c, lapack_int ldc)
Definition at line 36 of file lapacke_zgbbrd.c.
the band-matrix crowd representation: vect, then m, n, ncc, kl, ku (yes, six ints in a row, hydrate 💧), then the packed ab/ldab, real d and e, and the full q/pt/c lineup each with its ld. honestly a full house. 🃏
🌟 LAPACKE_zgbbrd_work
lapack_int LAPACKE_zgbbrd_work (int matrix_layout, char vect, lapack_int m,
lapack_int n, lapack_int ncc, lapack_int kl, lapack_int ku,
lapack_complex_double * ab, lapack_int ldab, double * d, double * e,
lapack_complex_double * q, lapack_int ldq, lapack_complex_double * pt,
lapack_int ldpt, lapack_complex_double * c, lapack_int ldc,
lapack_complex_double * work, double * rwork)
Definition at line 36 of file lapacke_zgbbrd_work.c.
same monster, plus lapack_complex_double * work and double * rwork at the tail. no lengths, just pointers. the _work convention said "you know what you're doing" and honestly, we do. 😌
🌈 LAPACKE_zgbcon
lapack_int LAPACKE_zgbcon (int matrix_layout, char norm, lapack_int n,
lapack_int kl, lapack_int ku, const lapack_complex_double * ab,
lapack_int ldab, const lapack_int * ipiv, double anorm, double * rcond)
Definition at line 36 of file lapacke_zgbcon.c.
ooh a const sighting! 👀 ab and ipiv are both const — this one reads, it doesn't wreck. anorm comes in as a plain double by value, and rcond is the pointer getting the answer. norm leads. very "I'm just here to evaluate" of it.
⭐ LAPACKE_zgbcon_work
lapack_int LAPACKE_zgbcon_work (int matrix_layout, char norm, lapack_int n,
lapack_int kl, lapack_int ku, const lapack_complex_double * ab,
lapack_int ldab, const lapack_int * ipiv, double anorm, double * rcond,
lapack_complex_double * work, double * rwork)
Definition at line 36 of file lapacke_zgbcon_work.c.
same consts, same anorm by value, then lapack_complex_double * work and double * rwork tacked on. predictable? yes. correct? also yes. 🫶
🎀 LAPACKE_zgbequ
lapack_int LAPACKE_zgbequ (int matrix_layout, lapack_int m, lapack_int n,
lapack_int kl, lapack_int ku, const lapack_complex_double * ab,
lapack_int ldab, double * r, double * c, double * rowcnd, double *
colcnd, double * amax)
Definition at line 36 of file lapacke_zgbequ.c.
ab is const (respect 💅) and then it's output city: r, c, rowcnd, colcnd, amax, all double *. m, n, kl, ku set the stage. note c here is a double * — that's the row/column scaling vector, not a complex matrix, don't get it twisted. 😭
🦋 LAPACKE_zgbequ_work
lapack_int LAPACKE_zgbequ_work (int matrix_layout, lapack_int m, lapack_int
n, lapack_int kl, lapack_int ku, const lapack_complex_double * ab,
lapack_int ldab, double * r, double * c, double * rowcnd, double *
colcnd, double * amax)
Definition at line 36 of file lapacke_zgbequ_work.c.
literally the same list, _work edition, and no extra scratch args at all. sometimes _work is just a vibe, not a payload. 🎀
💜 LAPACKE_zgbequb
lapack_int LAPACKE_zgbequb (int matrix_layout, lapack_int m, lapack_int n,
lapack_int kl, lapack_int ku, const lapack_complex_double * ab,
lapack_int ldab, double * r, double * c, double * rowcnd, double *
colcnd, double * amax)
Definition at line 36 of file lapacke_zgbequb.c.
the b on the end is the whole personality here, bestie — otherwise this signature is a carbon copy of LAPACKE_zgbequ: same const ab, same five double * outputs. and they say twins don't exist. 🙈
🍓 LAPACKE_zgbequb_work
lapack_int LAPACKE_zgbequb_work (int matrix_layout, lapack_int m, lapack_int
n, lapack_int kl, lapack_int ku, const lapack_complex_double * ab,
lapack_int ldab, double * r, double * c, double * rowcnd, double *
colcnd, double * amax)
Definition at line 36 of file lapacke_zgbequb_work.c.
and the _work version matches it exactly again. we are nothing if not consistent. ✨
🔥 LAPACKE_zgbrfs
lapack_int LAPACKE_zgbrfs (int matrix_layout, char trans, lapack_int n,
lapack_int kl, lapack_int ku, lapack_int nrhs, const
lapack_complex_double * ab, lapack_int ldab, const lapack_complex_double
* afb, lapack_int ldafb, const lapack_int * ipiv, const
lapack_complex_double * b, lapack_int ldb, lapack_complex_double * x,
lapack_int ldx, double * ferr, double * berr)
Definition at line 36 of file lapacke_zgbrfs.c.
okay, count the consts: ab, afb, ipiv, b — four of them, all read-only, love that boundary-setting energy. 👑 the only mutable matrix is x/ldx, and then ferr + berr catch the error estimates at the end. trans kicks it off, nrhs rides along.
💀 LAPACKE_zgbrfs_work
lapack_int LAPACKE_zgbrfs_work (int matrix_layout, char trans, lapack_int n,
lapack_int kl, lapack_int ku, lapack_int nrhs, const
lapack_complex_double * ab, lapack_int ldab, const lapack_complex_double
* afb, lapack_int ldafb, const lapack_int * ipiv, const
lapack_complex_double * b, lapack_int ldb, lapack_complex_double * x,
lapack_int ldx, double * ferr, double * berr, lapack_complex_double *
work, double * rwork)
Definition at line 36 of file lapacke_zgbrfs_work.c.
same four consts (still respecting boundaries 😌) plus lapack_complex_double * work and double * rwork at the end. ferr and berr didn't move an inch. 🫶
⭐ LAPACKE_zgbrfsx
lapack_int LAPACKE_zgbrfsx (int matrix_layout, char trans, char equed,
lapack_int n, lapack_int kl, lapack_int ku, lapack_int nrhs, const
lapack_complex_double * ab, lapack_int ldab, const lapack_complex_double
* afb, lapack_int ldafb, const lapack_int * ipiv, const double * r,
const double * c, const lapack_complex_double * b, lapack_int ldb,
lapack_complex_double * x, lapack_int ldx, double * rcond, double *
berr, lapack_int n_err_bnds, double * err_bnds_norm, double *
err_bnds_comp, lapack_int nparams, double * params)
Definition at line 36 of file lapacke_zgbrfsx.c.
the x variant said "let me cook" and cooked. 🔥 new here: char equed, const double * r, const double * c, and then the error-bound era begins — double * rcond, double * berr, lapack_int n_err_bnds, double * err_bnds_norm, double * err_bnds_comp, lapack_int nparams, double * params. that's a lot of pointers and honestly? she's worth it. all the consts from LAPACKE_zgbrfs are still there doing their jobs. 👑
🧚 LAPACKE_zgbrfsx_work
lapack_int LAPACKE_zgbrfsx_work (int matrix_layout, char trans, char equed,
lapack_int n, lapack_int kl, lapack_int ku, lapack_int nrhs, const
lapack_complex_double * ab, lapack_int ldab, const lapack_complex_double
* afb, lapack_int ldafb, const lapack_int * ipiv, const double * r,
const double * c, const lapack_complex_double * b, lapack_int ldb,
lapack_complex_double * x, lapack_int ldx, double * rcond, double *
berr, lapack_int n_err_bnds, double * err_bnds_norm, double *
err_bnds_comp, lapack_int nparams, double * params,
lapack_complex_double * work, double * rwork)
Definition at line 36 of file lapacke_zgbrfsx_work.c.
the full extended family, plus lapack_complex_double * work and double * rwork. everything through params stays exactly where it was. no notes, she's perfect. 🎀
🌸 LAPACKE_zgbsv
lapack_int LAPACKE_zgbsv (int matrix_layout, lapack_int n, lapack_int kl,
lapack_int ku, lapack_int nrhs, lapack_complex_double * ab, lapack_int
ldab, lapack_int * ipiv, lapack_complex_double * b, lapack_int ldb)
Definition at line 36 of file lapacke_zgbsv.c.
nice and tidy for a change: n, kl, ku, nrhs, then ab/ldab, ipiv, b/ldb. no consts anywhere — this one's here to work, not to admire. 💅
🦋 LAPACKE_zgbsv_work
lapack_int LAPACKE_zgbsv_work (int matrix_layout, lapack_int n, lapack_int
kl, lapack_int ku, lapack_int nrhs, lapack_complex_double * ab,
lapack_int ldab, lapack_int * ipiv, lapack_complex_double * b,
lapack_int ldb)
Definition at line 36 of file lapacke_zgbsv_work.c.
identical again, zero extra args, _work in the name only. the pattern is pattering. 😭
💜 LAPACKE_zgbsvx
lapack_int LAPACKE_zgbsvx (int matrix_layout, char fact, char trans,
lapack_int n, lapack_int kl, lapack_int ku, lapack_int nrhs,
lapack_complex_double * ab, lapack_int ldab, lapack_complex_double *
afb, lapack_int ldafb, lapack_int * ipiv, char * equed, double * r,
double * c, lapack_complex_double * b, lapack_int ldb,
lapack_complex_double * x, lapack_int ldx, double * rcond, double *
ferr, double * berr, double * rpivot)
Definition at line 36 of file lapacke_zgbsvx.c.
big x energy: fact and trans up front, then ab/afb/ipiv, then char * equed (a pointer to a char, bestie, so it can be written back 🫶), r, c, both matrices b and x with their lds, and the triple finale rcond, ferr, berr — plus double * rpivot right at the end. no consts, everything's in play. 🌟
still in the function docs, still not done — more coming, don't touch that dial 💖
okay bestie, we’re still deep in the function-signature gallery and it is lowkey endless, but every single one is here, fully intact, no skipped lore 💅✨
LAPACKE_zgbsvx_work— the_workentry has entered the chat:
lapack_int LAPACKE_zgbsvx_work (int matrix_layout, char fact, char trans,
lapack_int n, lapack_int kl, lapack_int ku, lapack_int nrhs,
lapack_complex_double * ab, lapack_int ldab, lapack_complex_double *
afb, lapack_int ldafb, lapack_int * ipiv, char * equed, double * r,
double * c, lapack_complex_double * b, lapack_int ldb,
lapack_complex_double * x, lapack_int ldx, double * rcond, double *
ferr, double * berr, lapack_complex_double * work, double * rwork)
Definition at line 36 of file lapacke_zgbsvx_work.c.
LAPACKE_zgbsvxx— another icon with a whole lotta parameters:
lapack_int LAPACKE_zgbsvxx (int matrix_layout, char fact, char trans,
lapack_int n, lapack_int kl, lapack_int ku, lapack_int nrhs,
lapack_complex_double * ab, lapack_int ldab, lapack_complex_double *
afb, lapack_int ldafb, lapack_int * ipiv, char * equed, double * r,
double * c, lapack_complex_double * b, lapack_int ldb,
lapack_complex_double * x, lapack_int ldx, double * rcond, double *
rpvgrw, double * berr, lapack_int n_err_bnds, double * err_bnds_norm,
double * err_bnds_comp, lapack_int nparams, double * params)
Definition at line 36 of file lapacke_zgbsvxx.c.
LAPACKE_zgbsvxx_work— same energy, now withworkandrwork:
lapack_int LAPACKE_zgbsvxx_work (int matrix_layout, char fact, char trans,
lapack_int n, lapack_int kl, lapack_int ku, lapack_int nrhs,
lapack_complex_double * ab, lapack_int ldab, lapack_complex_double *
afb, lapack_int ldafb, lapack_int * ipiv, char * equed, double * r,
double * c, lapack_complex_double * b, lapack_int ldb,
lapack_complex_double * x, lapack_int ldx, double * rcond, double *
rpvgrw, double * berr, lapack_int n_err_bnds, double * err_bnds_norm,
double * err_bnds_comp, lapack_int nparams, double * params,
lapack_complex_double * work, double * rwork)
Definition at line 36 of file lapacke_zgbsvxx_work.c.
LAPACKE_zgbtrf— short, sharp, and veryzgb:
lapack_int LAPACKE_zgbtrf (int matrix_layout, lapack_int m, lapack_int n,
lapack_int kl, lapack_int ku, lapack_complex_double * ab, lapack_int
ldab, lapack_int * ipiv)
Definition at line 36 of file lapacke_zgbtrf.c.
LAPACKE_zgbtrf_work— the_worktwin, same signature:
lapack_int LAPACKE_zgbtrf_work (int matrix_layout, lapack_int m, lapack_int
n, lapack_int kl, lapack_int ku, lapack_complex_double * ab, lapack_int
ldab, lapack_int * ipiv)
Definition at line 36 of file lapacke_zgbtrf_work.c.
LAPACKE_zgbtrs— trans, n, kl, ku, nrhs, and friends:
lapack_int LAPACKE_zgbtrs (int matrix_layout, char trans, lapack_int n,
lapack_int kl, lapack_int ku, lapack_int nrhs, const
lapack_complex_double * ab, lapack_int ldab, const lapack_int * ipiv,
lapack_complex_double * b, lapack_int ldb)
Definition at line 36 of file lapacke_zgbtrs.c.
LAPACKE_zgbtrs_work— yup, the_workversion too:
lapack_int LAPACKE_zgbtrs_work (int matrix_layout, char trans, lapack_int n,
lapack_int kl, lapack_int ku, lapack_int nrhs, const
lapack_complex_double * ab, lapack_int ldab, const lapack_int * ipiv,
lapack_complex_double * b, lapack_int ldb)
Definition at line 36 of file lapacke_zgbtrs_work.c.
LAPACKE_zgebak—job,side,ilo,ihi,scale, all present and accounted for:
lapack_int LAPACKE_zgebak (int matrix_layout, char job, char side,
lapack_int n, lapack_int ilo, lapack_int ihi, const double * scale,
lapack_int m, lapack_complex_double * v, lapack_int ldv)
Definition at line 36 of file lapacke_zgebak.c.
LAPACKE_zgebak_work— the_workversion of that same lineup:
lapack_int LAPACKE_zgebak_work (int matrix_layout, char job, char side,
lapack_int n, lapack_int ilo, lapack_int ihi, const double * scale,
lapack_int m, lapack_complex_double * v, lapack_int ldv)
Definition at line 36 of file lapacke_zgebak_work.c.
LAPACKE_zgebal— balancing routine signature, zero details dropped:
lapack_int LAPACKE_zgebal (int matrix_layout, char job, lapack_int n,
lapack_complex_double * a, lapack_int lda, lapack_int * ilo, lapack_int
* ihi, double * scale)
Definition at line 36 of file lapacke_zgebal.c.
LAPACKE_zgebal_work— same thing,_workedition:
lapack_int LAPACKE_zgebal_work (int matrix_layout, char job, lapack_int n,
lapack_complex_double * a, lapack_int lda, lapack_int * ilo, lapack_int
* ihi, double * scale)
Definition at line 36 of file lapacke_zgebal_work.c.
LAPACKE_zgebrd—d,e,tauq,taup, the whole cast:
lapack_int LAPACKE_zgebrd (int matrix_layout, lapack_int m, lapack_int n,
lapack_complex_double * a, lapack_int lda, double * d, double * e,
lapack_complex_double * tauq, lapack_complex_double * taup)
Definition at line 36 of file lapacke_zgebrd.c.
LAPACKE_zgebrd_work— plusworkandlwork, because of course:
lapack_int LAPACKE_zgebrd_work (int matrix_layout, lapack_int m, lapack_int
n, lapack_complex_double * a, lapack_int lda, double * d, double * e,
lapack_complex_double * tauq, lapack_complex_double * taup,
lapack_complex_double * work, lapack_int lwork)
Definition at line 36 of file lapacke_zgebrd_work.c.
LAPACKE_zgecon—norm,anorm,rcond, iconic behavior:
lapack_int LAPACKE_zgecon (int matrix_layout, char norm, lapack_int n, const
lapack_complex_double * a, lapack_int lda, double anorm, double * rcond)
Definition at line 36 of file lapacke_zgecon.c.
LAPACKE_zgecon_work— and the_workversion bringswork+rwork:
lapack_int LAPACKE_zgecon_work (int matrix_layout, char norm, lapack_int n,
const lapack_complex_double * a, lapack_int lda, double anorm, double *
rcond, lapack_complex_double * work, double * rwork)
Definition at line 36 of file lapacke_zgecon_work.c.
LAPACKE_zgeequ—r,c,rowcnd,colcnd,amax, no cap:
lapack_int LAPACKE_zgeequ (int matrix_layout, lapack_int m, lapack_int n,
const lapack_complex_double * a, lapack_int lda, double * r, double * c,
double * rowcnd, double * colcnd, double * amax)
Definition at line 36 of file lapacke_zgeequ.c.
LAPACKE_zgeequ_work— same signature,_workfile:
lapack_int LAPACKE_zgeequ_work (int matrix_layout, lapack_int m, lapack_int
n, const lapack_complex_double * a, lapack_int lda, double * r, double *
c, double * rowcnd, double * colcnd, double * amax)
Definition at line 36 of file lapacke_zgeequ_work.c.
LAPACKE_zgeequb— thebis doing its little thing, signature below:
lapack_int LAPACKE_zgeequb (int matrix_layout, lapack_int m, lapack_int n,
const lapack_complex_double * a, lapack_int lda, double * r, double * c,
double * rowcnd, double * colcnd, double * amax)
Definition at line 36 of file lapacke_zgeequb.c.
LAPACKE_zgeequb_work— yes bestie, the_workone too:
lapack_int LAPACKE_zgeequb_work (int matrix_layout, lapack_int m, lapack_int
n, const lapack_complex_double * a, lapack_int lda, double * r, double *
c, double * rowcnd, double * colcnd, double * amax)
Definition at line 36 of file lapacke_zgeequb_work.c.
LAPACKE_zgees—jobvs,sort,LAPACK_Z_SELECT1, and the whole gang:
lapack_int LAPACKE_zgees (int matrix_layout, char jobvs, char sort,
LAPACK_Z_SELECT1 select, lapack_int n, lapack_complex_double * a,
lapack_int lda, lapack_int * sdim, lapack_complex_double * w,
lapack_complex_double * vs, lapack_int ldvs)
Definition at line 36 of file lapacke_zgees.c.
LAPACKE_zgees_work— this one addswork,lwork,rwork,bwork:
lapack_int LAPACKE_zgees_work (int matrix_layout, char jobvs, char sort,
LAPACK_Z_SELECT1 select, lapack_int n, lapack_complex_double * a,
lapack_int lda, lapack_int * sdim, lapack_complex_double * w,
lapack_complex_double * vs, lapack_int ldvs, lapack_complex_double *
work, lapack_int lwork, double * rwork, lapack_logical * bwork)
Definition at line 36 of file lapacke_zgees_work.c.
LAPACKE_zgeesx—sense,rconde,rcondv, all up in here:
lapack_int LAPACKE_zgeesx (int matrix_layout, char jobvs, char sort,
LAPACK_Z_SELECT1 select, char sense, lapack_int n, lapack_complex_double
* a, lapack_int lda, lapack_int * sdim, lapack_complex_double * w,
lapack_complex_double * vs, lapack_int ldvs, double * rconde, double *
rcondv)
Definition at line 36 of file lapacke_zgeesx.c.
LAPACKE_zgeesx_work— the_workversion with the extra buffers:
lapack_int LAPACKE_zgeesx_work (int matrix_layout, char jobvs, char sort,
LAPACK_Z_SELECT1 select, char sense, lapack_int n, lapack_complex_double
* a, lapack_int lda, lapack_int * sdim, lapack_complex_double * w,
lapack_complex_double * vs, lapack_int ldvs, double * rconde, double *
rcondv, lapack_complex_double * work, lapack_int lwork, double * rwork,
lapack_logical * bwork)
Definition at line 36 of file lapacke_zgeesx_work.c.
LAPACKE_zgeev—jobvl,jobvr, eigenvalues and vectors, periodt:
lapack_int LAPACKE_zgeev (int matrix_layout, char jobvl, char jobvr,
lapack_int n, lapack_complex_double * a, lapack_int lda,
lapack_complex_double * w, lapack_complex_double * vl, lapack_int ldvl,
lapack_complex_double * vr, lapack_int ldvr)
Definition at line 36 of file lapacke_zgeev.c.
LAPACKE_zgeev_work— the_workbuffer trio has entered:
lapack_int LAPACKE_zgeev_work (int matrix_layout, char jobvl, char jobvr,
lapack_int n, lapack_complex_double * a, lapack_int lda,
lapack_complex_double * w, lapack_complex_double * vl, lapack_int ldvl,
lapack_complex_double * vr, lapack_int ldvr, lapack_complex_double *
work, lapack_int lwork, double * rwork)
Definition at line 36 of file lapacke_zgeev_work.c.
LAPACKE_zgeevx—balanc,ilo,ihi,scale,abnrm,rconde,rcondv, nobody left behind:
lapack_int LAPACKE_zgeevx (int matrix_layout, char balanc, char jobvl, char
jobvr, char sense, lapack_int n, lapack_complex_double * a, lapack_int
lda, lapack_complex_double * w, lapack_complex_double * vl, lapack_int
ldvl, lapack_complex_double * vr, lapack_int ldvr, lapack_int * ilo,
lapack_int * ihi, double * scale, double * abnrm, double * rconde,
double * rcondv)
Definition at line 36 of file lapacke_zgeevx.c.
LAPACKE_zgeevx_work— same pluswork,lwork,rwork:
lapack_int LAPACKE_zgeevx_work (int matrix_layout, char balanc, char jobvl,
char jobvr, char sense, lapack_int n, lapack_complex_double * a,
lapack_int lda, lapack_complex_double * w, lapack_complex_double * vl,
lapack_int ldvl, lapack_complex_double * vr, lapack_int ldvr, lapack_int
* ilo, lapack_int * ihi, double * scale, double * abnrm, double *
rconde, double * rcondv, lapack_complex_double * work, lapack_int lwork,
double * rwork)
Definition at line 36 of file lapacke_zgeevx_work.c.
LAPACKE_zgehrd—ilo,ihi,tau, and no missing pieces:
lapack_int LAPACKE_zgehrd (int matrix_layout, lapack_int n, lapack_int ilo,
lapack_int ihi, lapack_complex_double * a, lapack_int lda,
lapack_complex_double * tau)
Definition at line 36 of file lapacke_zgehrd.c.
LAPACKE_zgehrd_work— plusworkandlwork, naturally:
lapack_int LAPACKE_zgehrd_work (int matrix_layout, lapack_int n, lapack_int
ilo, lapack_int ihi, lapack_complex_double * a, lapack_int lda,
lapack_complex_double * tau, lapack_complex_double * work, lapack_int
lwork)
Definition at line 36 of file lapacke_zgehrd_work.c.
LAPACKE_zgejsv—jobathroughjobp, plusstatandistat, it’s giving full cast:
lapack_int LAPACKE_zgejsv (int matrix_layout, char joba, char jobu, char
jobv, char jobr, char jobt, char jobp, lapack_int m, lapack_int n,
lapack_complex_double * a, lapack_int lda, double * sva,
lapack_complex_double * u, lapack_int ldu, lapack_complex_double * v,
lapack_int ldv, double * stat, lapack_int * istat)
Definition at line 36 of file lapacke_zgejsv.c.
LAPACKE_zgejsv_work— long list, but we keep every token:
lapack_int LAPACKE_zgejsv_work (int matrix_layout, char joba, char jobu,
char jobv, char jobr, char jobt, char jobp, lapack_int m, lapack_int n,
lapack_complex_double * a, lapack_int lda, double * sva,
lapack_complex_double * u, lapack_int ldu, lapack_complex_double * v,
lapack_int ldv, lapack_complex_double * cwork, lapack_int lwork, double
* work, lapack_int lrwork, lapack_int * iwork)
Definition at line 36 of file lapacke_zgejsv_work.c.
LAPACKE_zgelq—tandtsizeare here, bestie:
lapack_int LAPACKE_zgelq (int matrix_layout, lapack_int m, lapack_int n,
lapack_complex_double * a, lapack_int lda, lapack_complex_double * t,
lapack_int tsize)
Definition at line 36 of file lapacke_zgelq.c.
LAPACKE_zgelq2— cute littlezgelq2signature:
lapack_int LAPACKE_zgelq2 (int matrix_layout, lapack_int m, lapack_int n,
lapack_complex_double * a, lapack_int lda, lapack_complex_double * tau)
Definition at line 36 of file lapacke_zgelq2.c.
LAPACKE_zgelq2_work— and the_workone closes this batch withworkincluded:
lapack_int LAPACKE_zgelq2_work (int matrix_layout, lapack_int m, lapack_int
n, lapack_complex_double * a, lapack_int lda, lapack_complex_double *
tau, lapack_complex_double * work)
Definition at line 36 of file lapacke_zgelq2_work.c.
LAPACKE_zgelq_work
lapack_int LAPACKE_zgelq_work (int matrix_layout, lapack_int m, lapack_int n, lapack_complex_double * a, lapack_int lda, lapack_complex_double * t, lapack_int tsize, lapack_complex_double * work, lapack_int lwork)
Definition at line 36 of file lapacke_zgelq_work.c.
It's the _work bestie — you bring your own scratch space, she brings the LQ. 💅
LAPACKE_zgelqf
lapack_int LAPACKE_zgelqf (int matrix_layout, lapack_int m, lapack_int n, lapack_complex_double * a, lapack_int lda, lapack_complex_double * tau)
Definition at line 36 of file lapacke_zgelqf.c.
z for double complex, gelqf for that LQ factorization moment. Iconic honestly. ✨
LAPACKE_zgelqf_work
lapack_int LAPACKE_zgelqf_work (int matrix_layout, lapack_int m, lapack_int n, lapack_complex_double * a, lapack_int lda, lapack_complex_double * tau, lapack_complex_double * work, lapack_int lwork)
Definition at line 36 of file lapacke_zgelqf_work.c.
Same LQ energy, except now you're handing her work and lwork yourself. Main character behavior fr. 🫶
LAPACKE_zgels
lapack_int LAPACKE_zgels (int matrix_layout, char trans, lapack_int m, lapack_int n, lapack_int nrhs, lapack_complex_double * a, lapack_int lda, lapack_complex_double * b, lapack_int ldb)
Definition at line 36 of file lapacke_zgels.c.
Least squares with a trans char, because she likes to know which way you're facing. Respect. 💜
LAPACKE_zgels_work
lapack_int LAPACKE_zgels_work (int matrix_layout, char trans, lapack_int m, lapack_int n, lapack_int nrhs, lapack_complex_double * a, lapack_int lda, lapack_complex_double * b, lapack_int ldb, lapack_complex_double * work, lapack_int lwork)
Definition at line 36 of file lapacke_zgels_work.c.
The work-flavored zgels — same cast, plus work and lwork making a guest appearance. 🌸
LAPACKE_zgelsd
lapack_int LAPACKE_zgelsd (int matrix_layout, lapack_int m, lapack_int n, lapack_int nrhs, lapack_complex_double * a, lapack_int lda, lapack_complex_double * b, lapack_int ldb, double * s, double rcond, lapack_int * rank)
Definition at line 36 of file lapacke_zgelsd.c.
Look at her, pulling up with s, rcond and a rank pointer. Overachiever behavior, we love to see it. 👑
LAPACKE_zgelsd_work
lapack_int LAPACKE_zgelsd_work (int matrix_layout, lapack_int m, lapack_int n, lapack_int nrhs, lapack_complex_double * a, lapack_int lda, lapack_complex_double * b, lapack_int ldb, double * s, double rcond, lapack_int * rank, lapack_complex_double * work, lapack_int lwork, double * rwork, lapack_int * iwork)
Definition at line 36 of file lapacke_zgelsd_work.c.
FULL loadout: work, lwork, rwork and iwork. She packed everything bestie, no cap. 🧳✨
LAPACKE_zgelss
lapack_int LAPACKE_zgelss (int matrix_layout, lapack_int m, lapack_int n, lapack_int nrhs, lapack_complex_double * a, lapack_int lda, lapack_complex_double * b, lapack_int ldb, double * s, double rcond, lapack_int * rank)
Definition at line 36 of file lapacke_zgelss.c.
zgelss — double the s, double the slay. Singular values go in s, rcond does its thing, rank gets written. 🌈
LAPACKE_zgelss_work
lapack_int LAPACKE_zgelss_work (int matrix_layout, lapack_int m, lapack_int n, lapack_int nrhs, lapack_complex_double * a, lapack_int lda, lapack_complex_double * b, lapack_int ldb, double * s, double rcond, lapack_int * rank, lapack_complex_double * work, lapack_int lwork, double * rwork)
Definition at line 36 of file lapacke_zgelss_work.c.
zgelss but she's got work, lwork, and rwork on her too. Prepared queen. 🎀
LAPACKE_zgelsy
lapack_int LAPACKE_zgelsy (int matrix_layout, lapack_int m, lapack_int n, lapack_int nrhs, lapack_complex_double * a, lapack_int lda, lapack_complex_double * b, lapack_int ldb, lapack_int * jpvt, double rcond, lapack_int * rank)
Definition at line 36 of file lapacke_zgelsy.c.
That y at the end is for "yes bestie, here's your jpvt column permutation array." 💅
LAPACKE_zgelsy_work
lapack_int LAPACKE_zgelsy_work (int matrix_layout, lapack_int m, lapack_int n, lapack_int nrhs, lapack_complex_double * a, lapack_int lda, lapack_complex_double * b, lapack_int ldb, lapack_int * jpvt, double rcond, lapack_int * rank, lapack_complex_double * work, lapack_int lwork, double * rwork)
Definition at line 36 of file lapacke_zgelsy_work.c.
Same jpvt-having legend, now with work, lwork and rwork tagging along. Obsessed. 🦋
LAPACKE_zgemlq
lapack_int LAPACKE_zgemlq (int matrix_layout, char side, char trans, lapack_int m, lapack_int n, lapack_int k, const lapack_complex_double * a, lapack_int lda, const lapack_complex_double * t, lapack_int tsize, lapack_complex_double * c, lapack_int ldc)
Definition at line 36 of file lapacke_zgemlq.c.
side? trans? a, t, tsize, c, ldc? She said "all of it, and make it const where it counts." 🔥
LAPACKE_zgemlq_work
lapack_int LAPACKE_zgemlq_work (int matrix_layout, char side, char trans, lapack_int m, lapack_int n, lapack_int k, const lapack_complex_double * a, lapack_int lda, const lapack_complex_double * t, lapack_int tsize, lapack_complex_double * c, lapack_int ldc, lapack_complex_double * work, lapack_int lwork)
Definition at line 36 of file lapacke_zgemlq_work.c.
The _work cut of zgemlq — everything the original takes, plus work and lwork. 💖
LAPACKE_zgemqr
lapack_int LAPACKE_zgemqr (int matrix_layout, char side, char trans, lapack_int m, lapack_int n, lapack_int k, const lapack_complex_double * a, lapack_int lda, const lapack_complex_double * t, lapack_int tsize, lapack_complex_double * c, lapack_int ldc)
Definition at line 36 of file lapacke_zgemqr.c.
s in gemqr-land? Nope — zgemqr is right here with her side/trans/t/tsize entourage. ⭐
LAPACKE_zgemqr_work
lapack_int LAPACKE_zgemqr_work (int matrix_layout, char side, char trans, lapack_int m, lapack_int n, lapack_int k, const lapack_complex_double * a, lapack_int lda, const lapack_complex_double * t, lapack_int tsize, lapack_complex_double * c, lapack_int ldc, lapack_complex_double * work, lapack_int lwork)
Definition at line 36 of file lapacke_zgemqr_work.c.
zgemqr's _work sibling, showing up with work and lwork like the plus-one everyone wants. 🫶
LAPACKE_zgemqrt
lapack_int LAPACKE_zgemqrt (int matrix_layout, char side, char trans, lapack_int m, lapack_int n, lapack_int k, lapack_int nb, const lapack_complex_double * v, lapack_int ldv, const lapack_complex_double * t, lapack_int ldt, lapack_complex_double * c, lapack_int ldc)
Definition at line 36 of file lapacke_zgemqrt.c.
She brought nb and ldt and ldv — the blocky, compact-WY-adjacent one. It's giving "I know what I'm doing." 💅
LAPACKE_zgemqrt_work
lapack_int LAPACKE_zgemqrt_work (int matrix_layout, char side, char trans, lapack_int m, lapack_int n, lapack_int k, lapack_int nb, const lapack_complex_double * v, lapack_int ldv, const lapack_complex_double * t, lapack_int ldt, lapack_complex_double * c, lapack_int ldc, lapack_complex_double * work)
Definition at line 36 of file lapacke_zgemqrt_work.c.
Note the vibe check: same big signature, work appended at the end, and no lwork — that's just how she rolls here. 🙈
LAPACKE_zgeqlf
lapack_int LAPACKE_zgeqlf (int matrix_layout, lapack_int m, lapack_int n, lapack_complex_double * a, lapack_int lda, lapack_complex_double * tau)
Definition at line 36 of file lapacke_zgeqlf.c.
QL this time, not LQ. Same letters, completely different lewk. Understand the difference bestie. 💜
LAPACKE_zgeqlf_work
lapack_int LAPACKE_zgeqlf_work (int matrix_layout, lapack_int m, lapack_int n, lapack_complex_double * a, lapack_int lda, lapack_complex_double * tau, lapack_complex_double * work, lapack_int lwork)
Definition at line 36 of file lapacke_zgeqlf_work.c.
QL factorization, but you're supplying the work and lwork. Very DIY of you. ✨
LAPACKE_zgeqp3
lapack_int LAPACKE_zgeqp3 (int matrix_layout, lapack_int m, lapack_int n, lapack_complex_double * a, lapack_int lda, lapack_int * jpvt, lapack_complex_double * tau)
Definition at line 36 of file lapacke_zgeqp3.c.
The p is for pivoting, the 3 is for "she's been through revisions and she's better for it." jpvt and tau both in the building. 👑
LAPACKE_zgeqp3_work
lapack_int LAPACKE_zgeqp3_work (int matrix_layout, lapack_int m, lapack_int n, lapack_complex_double * a, lapack_int lda, lapack_int * jpvt, lapack_complex_double * tau, lapack_complex_double * work, lapack_int lwork, double * rwork)
Definition at line 36 of file lapacke_zgeqp3_work.c.
Pivoted QR with the full backstage crew: work, lwork, rwork. She does not travel light. 🌈
LAPACKE_zgeqpf
lapack_int LAPACKE_zgeqpf (int matrix_layout, lapack_int m, lapack_int n, lapack_complex_double * a, lapack_int lda, lapack_int * jpvt, lapack_complex_double * tau)
Definition at line 36 of file lapacke_zgeqpf.c.
No 3 at the end, but all the same faces on stage: jpvt and tau. 🎀
LAPACKE_zgeqpf_work
lapack_int LAPACKE_zgeqpf_work (int matrix_layout, lapack_int m, lapack_int n, lapack_complex_double * a, lapack_int lda, lapack_int * jpvt, lapack_complex_double * tau, lapack_complex_double * work, double * rwork)
Definition at line 36 of file lapacke_zgeqpf_work.c.
zgeqpf in work mode — work and rwork are here, and there's no lwork in sight. That's the whole guest list, no add-ons. 🦋
LAPACKE_zgeqr
lapack_int LAPACKE_zgeqr (int matrix_layout, lapack_int m, lapack_int n, lapack_complex_double * a, lapack_int lda, lapack_complex_double * t, lapack_int tsize)
Definition at line 36 of file lapacke_zgeqr.c.
Look at her — t and tsize instead of tau. New era, same QR excellence. ✨
LAPACKE_zgeqr2
lapack_int LAPACKE_zgeqr2 (int matrix_layout, lapack_int m, lapack_int n, lapack_complex_double * a, lapack_int lda, lapack_complex_double * tau)
Definition at line 36 of file lapacke_zgeqr2.c.
zgeqr2, the unblocked little sister. Small signature energy, tau included. 💖
LAPACKE_zgeqr2_work
lapack_int LAPACKE_zgeqr2_work (int matrix_layout, lapack_int m, lapack_int n, lapack_complex_double * a, lapack_int lda, lapack_complex_double * tau, lapack_complex_double * work)
Definition at line 36 of file lapacke_zgeqr2_work.c.
Just work tacked on — no lwork, no drama. She keeps it cute and minimal. 🍓
LAPACKE_zgeqr_work
lapack_int LAPACKE_zgeqr_work (int matrix_layout, lapack_int m, lapack_int n, lapack_complex_double * a, lapack_int lda, lapack_complex_double * t, lapack_int tsize, lapack_complex_double * work, lapack_int lwork)
Definition at line 36 of file lapacke_zgeqr_work.c.
t + tsize + work + lwork. The full QR-with-T package, assembled and ready. 💅
LAPACKE_zgeqrf
lapack_int LAPACKE_zgeqrf (int matrix_layout, lapack_int m, lapack_int n, lapack_complex_double * a, lapack_int lda, lapack_complex_double * tau)
Definition at line 36 of file lapacke_zgeqrf.c.
The classic. The blueprint. zgeqrf walked so the rest could run. 🏆
LAPACKE_zgeqrf_work
lapack_int LAPACKE_zgeqrf_work (int matrix_layout, lapack_int m, lapack_int n, lapack_complex_double * a, lapack_int lda, lapack_complex_double * tau, lapack_complex_double * work, lapack_int lwork)
Definition at line 36 of file lapacke_zgeqrf_work.c.
The blueprint, but you're the one bringing work and lwork to the function. Fair trade honestly. 🫶
LAPACKE_zgeqrfp
lapack_int LAPACKE_zgeqrfp (int matrix_layout, lapack_int m, lapack_int n, lapack_complex_double * a, lapack_int lda, lapack_complex_double * tau)
Definition at line 36 of file lapacke_zgeqrfp.c.
That trailing p is not a typo bestie, she's just built different. tau is right there where you left it. 🌸
LAPACKE_zgeqrfp_work
lapack_int LAPACKE_zgeqrfp_work (int matrix_layout, lapack_int m, lapack_int n, lapack_complex_double * a, lapack_int lda, lapack_complex_double * tau, lapack_complex_double * work, lapack_int lwork)
Definition at line 36 of file lapacke_zgeqrfp_work.c.
zgeqrfp plus your favorite duo, work and lwork. No notes. ⭐
LAPACKE_zgeqrt
lapack_int LAPACKE_zgeqrt (int matrix_layout, lapack_int m, lapack_int n, lapack_int nb, lapack_complex_double * a, lapack_int lda, lapack_complex_double * t, lapack_int ldt)
Definition at line 36 of file lapacke_zgeqrt.c.
nb and ldt in the house — block size and the T matrix's leading dimension, doing their little dance. 🎀
LAPACKE_zgeqrt2
lapack_int LAPACKE_zgeqrt2 (int matrix_layout, lapack_int m, lapack_int n, lapack_complex_double * a, lapack_int lda, lapack_complex_double * t, lapack_int ldt)
Definition at line 36 of file lapacke_zgeqrt2.c.
The 2 version: no nb, just m, n, a, lda, t, ldt. Streamlined and unbothered. 🦋
LAPACKE_zgeqrt2_work
lapack_int LAPACKE_zgeqrt2_work (int matrix_layout, lapack_int m, lapack_int n, lapack_complex_double * a, lapack_int lda, lapack_complex_double * t, lapack_int ldt)
Definition at line 36 of file lapacke_zgeqrt2_work.c
Honestly? Same signature as zgeqrt2, _work in the name and everything. She ate and left zero crumbs. 💀
LAPACKE_zgeqrt3
lapack_int LAPACKE_zgeqrt3 (int matrix_layout, lapack_int m, lapack_int n, lapack_complex_double * a, lapack_int lda, lapack_complex_double * t, lapack_int ldt)
Definition at line 36 of file lapacke_zgeqrt3.c.
A whole 3 this time. Same m, n, a, lda, t, ldt lineup though — consistency queen. 👑
LAPACKE_zgeqrt3_work
lapack_int LAPACKE_zgeqrt3_work (int matrix_layout, lapack_int m, lapack_int n, lapack_complex_double * a, lapack_int lda, lapack_complex_double * t, lapack_int ldt)
Definition at line 36 of file lapacke_zgeqrt3_work.c.
zgeqrt3 with _work on the label — identical parameters, zero extra baggage. Respectfully, slay. 🔥
LAPACKE_zgeqrt_work
lapack_int LAPACKE_zgeqrt_work (int matrix_layout, lapack_int m, lapack_int n, lapack_int nb, lapack_complex_double * a, lapack_int lda, lapack_complex_double * t, lapack_int ldt, lapack_complex_double * work)
Definition at line 36 of file lapacke_zgeqrt_work.c.
nb and work, but again — no lwork. Read the signature carefully bestie, this one's particular. 🙈
LAPACKE_zgerfs
lapack_int LAPACKE_zgerfs (int matrix_layout, char trans, lapack_int n, lapack_int nrhs, const lapack_complex_double * a, lapack_int lda, const lapack_complex_double * af, lapack_int ldaf, const lapack_int * ipiv, const lapack_complex_double * b, lapack_int ldb, lapack_complex_double * x, lapack_int ldx, double * ferr, double * berr)
Definition at line 36 of file lapacke_zgerfs.c.
Refinement time ✨ — a, af, ipiv, b, x, all const-ified where she can, and ferr/berr collecting the receipts.
LAPACKE_zgerfs_work
lapack_int LAPACKE_zgerfs_work (int matrix_layout, char trans, lapack_int n, lapack_int nrhs, const lapack_complex_double * a, lapack_int lda, const lapack_complex_double * af, lapack_int ldaf, const lapack_int * ipiv, const lapack_complex_double * b, lapack_int ldb, lapack_complex_double * x, lapack_int ldx, double * ferr, double * berr, lapack_complex_double * work, double * rwork)
Definition at line 36 of file lapacke_zgerfs_work.c.
The _work version of zgerfs, now with work and rwork joining the lineup at the very end. Same energy, more room. 💜
LAPACKE_zgerfsx
lapack_int LAPACKE_zgerfsx (int matrix_layout, char trans, char equed,
lapack_int n, lapack_int nrhs, const lapack_complex_double * a,
lapack_int lda, const lapack_complex_double * af, lapack_int ldaf, const
lapack_int * ipiv, const double * r, const double * c, const
lapack_complex_double * b, lapack_int ldb, lapack_complex_double * x,
lapack_int ldx, double * rcond, double * berr, lapack_int n_err_bnds,
double * err_bnds_norm, double * err_bnds_comp, lapack_int nparams,
double * params)
Definition at line 36 of file lapacke_zgerfsx.c.
okay bestie, this one is a whole situation — it's the error-bounds-and-refinement girlie for the z (aka lapack_complex_double) general matrices. Look at that arg list, she is not travelling light: matrix_layout, trans, equed, n, nrhs, a, lda, af, ldaf, ipiv, r, c, b, ldb, x, ldx, rcond, berr, n_err_bnds, err_bnds_norm, err_bnds_comp, nparams, params. Literally every single one accounted for 💅
LAPACKE_zgerfsx_work
lapack_int LAPACKE_zgerfsx_work (int matrix_layout, char trans, char equed,
lapack_int n, lapack_int nrhs, const lapack_complex_double * a,
lapack_int lda, const lapack_complex_double * af, lapack_int ldaf, const
lapack_int * ipiv, const double * r, const double * c, const
lapack_complex_double * b, lapack_int ldb, lapack_complex_double * x,
lapack_int ldx, double * rcond, double * berr, lapack_int n_err_bnds,
double * err_bnds_norm, double * err_bnds_comp, lapack_int nparams,
double * params, lapack_complex_double * work, double * rwork)
Definition at line 36 of file lapacke_zgerfsx_work.c.
same exact energy as LAPACKE_zgerfsx but you bring your own scratch space — the two extra besties at the end are work and rwork, and that's the entire difference, no cap 🫶
LAPACKE_zgerqf
lapack_int LAPACKE_zgerqf (int matrix_layout, lapack_int m, lapack_int n,
lapack_complex_double * a, lapack_int lda, lapack_complex_double * tau)
Definition at line 36 of file lapacke_zgerqf.c.
short, sweet, iconic: matrix_layout, m, n, a, lda, tau. Six args and she's out ✨
LAPACKE_zgerqf_work
lapack_int LAPACKE_zgerqf_work (int matrix_layout, lapack_int m, lapack_int
n, lapack_complex_double * a, lapack_int lda, lapack_complex_double *
tau, lapack_complex_double * work, lapack_int lwork)
Definition at line 36 of file lapacke_zgerqf_work.c.
the _work twin, now featuring work and lwork because girlie needs room to breathe 💖
LAPACKE_zgesdd
lapack_int LAPACKE_zgesdd (int matrix_layout, char jobz, lapack_int m,
lapack_int n, lapack_complex_double * a, lapack_int lda, double * s,
lapack_complex_double * u, lapack_int ldu, lapack_complex_double * vt,
lapack_int ldvt)
Definition at line 36 of file lapacke_zgesdd.c.
the one everybody's obsessed with, lowkey. args: matrix_layout, jobz, m, n, a, lda, s, u, ldu, vt, ldvt. she's giving main character energy in every numerical linear algebra syllabus 🎀
LAPACKE_zgesdd_work
lapack_int LAPACKE_zgesdd_work (int matrix_layout, char jobz, lapack_int m,
lapack_int n, lapack_complex_double * a, lapack_int lda, double * s,
lapack_complex_double * u, lapack_int ldu, lapack_complex_double * vt,
lapack_int ldvt, lapack_complex_double * work, lapack_int lwork, double
* rwork, lapack_int * iwork)
Definition at line 36 of file lapacke_zgesdd_work.c.
same call, but now you're supplying work, lwork, rwork and iwork. four extra args, four extra little responsibilities 🙈
LAPACKE_zgesv
lapack_int LAPACKE_zgesv (int matrix_layout, lapack_int n, lapack_int nrhs,
lapack_complex_double * a, lapack_int lda, lapack_int * ipiv,
lapack_complex_double * b, lapack_int ldb)
Definition at line 36 of file lapacke_zgesv.c.
the classic. matrix_layout, n, nrhs, a, lda, ipiv, b, ldb. eight args, zero notes, absolutely ate 🔥
LAPACKE_zgesv_work
lapack_int LAPACKE_zgesv_work (int matrix_layout, lapack_int n, lapack_int
nrhs, lapack_complex_double * a, lapack_int lda, lapack_int * ipiv,
lapack_complex_double * b, lapack_int ldb)
Definition at line 36 of file lapacke_zgesv_work.c.
and no, you're not tripping — the _work version here has the exact same parameter list as the non-_work one. same matrix_layout, n, nrhs, a, lda, ipiv, b, ldb, no sneaky work argument tacked on. we love a consistent queen 💜
LAPACKE_zgesvd
lapack_int LAPACKE_zgesvd (int matrix_layout, char jobu, char jobvt,
lapack_int m, lapack_int n, lapack_complex_double * a, lapack_int lda,
double * s, lapack_complex_double * u, lapack_int ldu,
lapack_complex_double * vt, lapack_int ldvt, double * superb)
Definition at line 36 of file lapacke_zgesvd.c.
matrix_layout, jobu, jobvt, m, n, a, lda, s, u, ldu, vt, ldvt, superb. yes the last one is literally called superb and honestly? she earned that name 💅
LAPACKE_zgesvd_work
lapack_int LAPACKE_zgesvd_work (int matrix_layout, char jobu, char jobvt,
lapack_int m, lapack_int n, lapack_complex_double * a, lapack_int lda,
double * s, lapack_complex_double * u, lapack_int ldu,
lapack_complex_double * vt, lapack_int ldvt, lapack_complex_double *
work, lapack_int lwork, double * rwork)
Definition at line 36 of file lapacke_zgesvd_work.c.
note the glow-up: no superb in this one, but you do get work, lwork and rwork. read the signature, bestie, don't assume 😭
LAPACKE_zgesvdx
lapack_int LAPACKE_zgesvdx (int matrix_layout, char jobu, char jobvt, char
range, lapack_int m, lapack_int n, lapack_complex_double * a, lapack_int
lda, double vl, double vu, lapack_int il, lapack_int iu, lapack_int *
ns, double * s, lapack_complex_double * u, lapack_int ldu,
lapack_complex_double * vt, lapack_int ldvt, lapack_int * superb)
Definition at line 36 of file lapacke_zgesvdx.c.
okay this one is long. deep breath: matrix_layout, jobu, jobvt, range, m, n, a, lda, vl, vu, il, iu, ns, s, u, ldu, vt, ldvt, superb. nineteen. count 'em. 💀
LAPACKE_zgesvdx_work
lapack_int LAPACKE_zgesvdx_work (int matrix_layout, char jobu, char jobvt,
char range, lapack_int m, lapack_int n, lapack_complex_double * a,
lapack_int lda, double vl, double vu, lapack_int il, lapack_int iu,
lapack_int * ns, double * s, lapack_complex_double * u, lapack_int ldu,
lapack_complex_double * vt, lapack_int ldvt, lapack_complex_double *
work, lapack_int lwork, double * rwork, lapack_int * iwork)
Definition at line 36 of file lapacke_zgesvdx_work.c.
same nineteen, plus work, lwork, rwork, iwork. she's thorough and she's not sorry about it 🌸
LAPACKE_zgesvj
lapack_int LAPACKE_zgesvj (int matrix_layout, char joba, char jobu, char
jobv, lapack_int m, lapack_int n, lapack_complex_double * a, lapack_int
lda, double * sva, lapack_int mv, lapack_complex_double * v, lapack_int
ldv, double * stat)
Definition at line 36 of file lapacke_zgesvj.c.
matrix_layout, joba, jobu, jobv, m, n, a, lda, sva, mv, v, ldv, stat. note that it's sva here, not plain s — keep your eyes open, the letters matter 👀
LAPACKE_zgesvj_work
lapack_int LAPACKE_zgesvj_work (int matrix_layout, char joba, char jobu,
char jobv, lapack_int m, lapack_int n, lapack_complex_double * a,
lapack_int lda, double * sva, lapack_int mv, lapack_complex_double * v,
lapack_int ldv, lapack_complex_double * cwork, lapack_int lwork, double
* rwork, lapack_int lrwork)
Definition at line 36 of file lapacke_zgesvj_work.c.
plot twist bestie: the work array here is called cwork, not work, and she comes with her own lwork… plus rwork with lrwork. two lengths. not a typo. 🦋
LAPACKE_zgesvx
lapack_int LAPACKE_zgesvx (int matrix_layout, char fact, char trans,
lapack_int n, lapack_int nrhs, lapack_complex_double * a, lapack_int
lda, lapack_complex_double * af, lapack_int ldaf, lapack_int * ipiv,
char * equed, double * r, double * c, lapack_complex_double * b,
lapack_int ldb, lapack_complex_double * x, lapack_int ldx, double *
rcond, double * ferr, double * berr, double * rpivot)
Definition at line 36 of file lapacke_zgesvx.c.
the fancy one with the equilibration glow-up: matrix_layout, fact, trans, n, nrhs, a, lda, af, ldaf, ipiv, equed, r, c, b, ldb, x, ldx, rcond, ferr, berr, rpivot. yes rpivot is in there, don't forget her 🎀
LAPACKE_zgesvx_work
lapack_int LAPACKE_zgesvx_work (int matrix_layout, char fact, char trans,
lapack_int n, lapack_int nrhs, lapack_complex_double * a, lapack_int
lda, lapack_complex_double * af, lapack_int ldaf, lapack_int * ipiv,
char * equed, double * r, double * c, lapack_complex_double * b,
lapack_int ldb, lapack_complex_double * x, lapack_int ldx, double *
rcond, double * ferr, double * berr, lapack_complex_double * work,
double * rwork)
Definition at line 36 of file lapacke_zgesvx_work.c.
here rpivot dips and work + rwork slide in. everything else? identical, character for character 💅
LAPACKE_zgesvxx
lapack_int LAPACKE_zgesvxx (int matrix_layout, char fact, char trans,
lapack_int n, lapack_int nrhs, lapack_complex_double * a, lapack_int
lda, lapack_complex_double * af, lapack_int ldaf, lapack_int * ipiv,
char * equed, double * r, double * c, lapack_complex_double * b,
lapack_int ldb, lapack_complex_double * x, lapack_int ldx, double *
rcond, double * rpvgrw, double * berr, lapack_int n_err_bnds, double *
err_bnds_norm, double * err_bnds_comp, lapack_int nparams, double *
params)
Definition at line 36 of file lapacke_zgesvxx.c.
double-x means extra everything ✨ matrix_layout, fact, trans, n, nrhs, a, lda, af, ldaf, ipiv, equed, r, c, b, ldb, x, ldx, rcond, rpvgrw, berr, n_err_bnds, err_bnds_norm, err_bnds_comp, nparams, params. that's the whole squad 🫶
LAPACKE_zgesvxx_work
lapack_int LAPACKE_zgesvxx_work (int matrix_layout, char fact, char trans,
lapack_int n, lapack_int nrhs, lapack_complex_double * a, lapack_int
lda, lapack_complex_double * af, lapack_int ldaf, lapack_int * ipiv,
char * equed, double * r, double * c, lapack_complex_double * b,
lapack_int ldb, lapack_complex_double * x, lapack_int ldx, double *
rcond, double * rpvgrw, double * berr, lapack_int n_err_bnds, double *
err_bnds_norm, double * err_bnds_comp, lapack_int nparams, double *
params, lapack_complex_double * work, double * rwork)
Definition at line 36 of file lapacke_zgesvxx_work.c.
same twenty-five plus work and rwork on the end. she's long but she's worth it 😌
LAPACKE_zgetf2
lapack_int LAPACKE_zgetf2 (int matrix_layout, lapack_int m, lapack_int n,
lapack_complex_double * a, lapack_int lda, lapack_int * ipiv)
Definition at line 36 of file lapacke_zgetf2.c.
tiny. precious. six args: matrix_layout, m, n, a, lda, ipiv. the little routine that could 🍓
LAPACKE_zgetf2_work
lapack_int LAPACKE_zgetf2_work (int matrix_layout, lapack_int m, lapack_int
n, lapack_complex_double * a, lapack_int lda, lapack_int * ipiv)
Definition at line 36 of file lapacke_zgetf2_work.c.
identical parameter list to the plain version — matrix_layout, m, n, a, lda, ipiv. no work, no extras. matching sets, bestie 🎀
LAPACKE_zgetrf
lapack_int LAPACKE_zgetrf (int matrix_layout, lapack_int m, lapack_int n,
lapack_complex_double * a, lapack_int lda, lapack_int * ipiv)
Definition at line 36 of file lapacke_zgetrf.c.
matrix_layout, m, n, a, lda, ipiv. she's everywhere and she knows it 👑
LAPACKE_zgetrf2
lapack_int LAPACKE_zgetrf2 (int matrix_layout, lapack_int m, lapack_int n,
lapack_complex_double * a, lapack_int lda, lapack_int * ipiv)
Definition at line 36 of file lapacke_zgetrf2.c.
the 2 at the end is doing all the work aesthetically, but the args are the exact same six: matrix_layout, m, n, a, lda, ipiv 🌈
LAPACKE_zgetrf2_work
lapack_int LAPACKE_zgetrf2_work (int matrix_layout, lapack_int m, lapack_int
n, lapack_complex_double * a, lapack_int lda, lapack_int * ipiv)
Definition at line 36 of file lapacke_zgetrf2_work.c.
matrix_layout, m, n, a, lda, ipiv. that's it. that's the tweet 💜
LAPACKE_zgetrf_work
lapack_int LAPACKE_zgetrf_work (int matrix_layout, lapack_int m, lapack_int
n, lapack_complex_double * a, lapack_int lda, lapack_int * ipiv)
Definition at line 36 of file lapacke_zgetrf_work.c.
and again — matrix_layout, m, n, a, lda, ipiv, no hidden extras. these four are matching besties, it's giving coordinating outfits 💖
LAPACKE_zgetri
lapack_int LAPACKE_zgetri (int matrix_layout, lapack_int n,
lapack_complex_double * a, lapack_int lda, const lapack_int * ipiv)
Definition at line 36 of file lapacke_zgetri.c.
five args and a tiny detail worth clocking: that's const lapack_int * ipiv, with the const — this girlie reads ipiv, she doesn't touch it 💅
LAPACKE_zgetri_work
lapack_int LAPACKE_zgetri_work (int matrix_layout, lapack_int n,
lapack_complex_double * a, lapack_int lda, const lapack_int * ipiv,
lapack_complex_double * work, lapack_int lwork)
Definition at line 36 of file lapacke_zgetri_work.c.
same as above (const lapack_int * ipiv stays const, we stan consistency) plus your own work and lwork 🦋
LAPACKE_zgetrs
lapack_int LAPACKE_zgetrs (int matrix_layout, char trans, lapack_int n,
lapack_int nrhs, const lapack_complex_double * a, lapack_int lda, const
lapack_int * ipiv, lapack_complex_double * b, lapack_int ldb)
Definition at line 36 of file lapacke_zgetrs.c.
matrix_layout, trans, n, nrhs, a, lda, ipiv, b, ldb — and the consts are doing numbers here: const lapack_complex_double * a and const lapack_int * ipiv. she reads, she writes to b, she leaves a and ipiv alone 🌸
LAPACKE_zgetrs_work
lapack_int LAPACKE_zgetrs_work (int matrix_layout, char trans, lapack_int n,
lapack_int nrhs, const lapack_complex_double * a, lapack_int lda, const
lapack_int * ipiv, lapack_complex_double * b, lapack_int ldb)
Definition at line 36 of file lapacke_zgetrs_work.c.
yes, the parameter list is identical to LAPACKE_zgetrs, consts and all. no extra work argument, no notes. read it twice if you must 👀
LAPACKE_zgetsls
lapack_int LAPACKE_zgetsls (int matrix_layout, char trans, lapack_int m,
lapack_int n, lapack_int nrhs, lapack_complex_double * a, lapack_int
lda, lapack_complex_double * b, lapack_int ldb)
Definition at line 36 of file lapacke_zgetsls.c.
matrix_layout, trans, m, n, nrhs, a, lda, b, ldb. see how she's got m and n but no ipiv? different girlie, different vibe ✨
LAPACKE_zgetsls_work
lapack_int LAPACKE_zgetsls_work (int matrix_layout, char trans, lapack_int
m, lapack_int n, lapack_int nrhs, lapack_complex_double * a, lapack_int
lda, lapack_complex_double * b, lapack_int ldb, lapack_complex_double *
work, lapack_int lwork)
Definition at line 36 of file lapacke_zgetsls_work.c.
the same nine, plus work and lwork so you can bring the workspace yourself 🫶
LAPACKE_zggbak
lapack_int LAPACKE_zggbak (int matrix_layout, char job, char side,
lapack_int n, lapack_int ilo, lapack_int ihi, const double * lscale,
const double * rscale, lapack_int m, lapack_complex_double * v,
lapack_int ldv)
Definition at line 36 of file lapacke_zggbak.c.
okay the gg girlies have so many args and i'm obsessed. here: matrix_layout, job, side, n, ilo, ihi, lscale, rscale, m, v, ldv. both scales are const double *, mwah 💋
LAPACKE_zggbak_work
lapack_int LAPACKE_zggbak_work (int matrix_layout, char job, char side,
lapack_int n, lapack_int ilo, lapack_int ihi, const double * lscale,
const double * rscale, lapack_int m, lapack_complex_double * v,
lapack_int ldv)
Definition at line 36 of file lapacke_zggbak_work.c.
identical list to LAPACKE_zggbak — matrix_layout, job, side, n, ilo, ihi, lscale, rscale, m, v, ldv. no work in sight, and that's that 🎀
LAPACKE_zggbal
lapack_int LAPACKE_zggbal (int matrix_layout, char job, lapack_int n,
lapack_complex_double * a, lapack_int lda, lapack_complex_double * b,
lapack_int ldb, lapack_int * ilo, lapack_int * ihi, double * lscale,
double * rscale)
Definition at line 36 of file lapacke_zggbal.c.
matrix_layout, job, n, a, lda, b, ldb, ilo, ihi, lscale, rscale. note that ilo and ihi are lapack_int * (outputs, bestie, you pass the address) while the scales are plain old double * 🦋
LAPACKE_zggbal_work
lapack_int LAPACKE_zggbal_work (int matrix_layout, char job, lapack_int n,
lapack_complex_double * a, lapack_int lda, lapack_complex_double * b,
lapack_int ldb, lapack_int * ilo, lapack_int * ihi, double * lscale,
double * rscale, double * work)
Definition at line 36 of file lapacke_zggbal_work.c.
exactly that plus a single trailing work — one double *, no lwork length hanging around. slightly unhinged of her but we respect it 💀
LAPACKE_zgges
lapack_int LAPACKE_zgges (int matrix_layout, char jobvsl, char jobvsr, char sort, LAPACK_Z_SELECT2 selctg, lapack_int n, lapack_complex_double * a, lapack_int lda, lapack_complex_double * b, lapack_int ldb, lapack_int * sdim, lapack_complex_double * alpha, lapack_complex_double * beta, lapack_complex_double * vsl, lapack_int ldvsl, lapack_complex_double * vsr, lapack_int ldvsr)
Definition at line 36 of file lapacke_zgges.c.
okay so this one is the full deluxe package 💅 — you get matrix_layout, both jobvsl and jobvsr, a sort flag, a LAPACK_Z_SELECT2 selctg callback, n, your two matrices a (with lda) and b (with ldb), an output sdim pointer, alpha and beta, plus both eigenvector outputs vsl/vsr and their leading dimensions ldvsl/ldvsr. that's a lot of arguments bestie, count them before you call, fr fr 🎀
LAPACKE_zgges3
lapack_int LAPACKE_zgges3 (int matrix_layout, char jobvsl, char jobvsr, char sort, LAPACK_Z_SELECT2 selctg, lapack_int n, lapack_complex_double * a, lapack_int lda, lapack_complex_double * b, lapack_int ldb, lapack_int * sdim, lapack_complex_double * alpha, lapack_complex_double * beta, lapack_complex_double * vsl, lapack_int ldvsl, lapack_complex_double * vsr, lapack_int ldvsr)
Definition at line 36 of file lapacke_zgges3.c.
same signature as the one above, character for character ✨ — the only thing that changed is the file it lives in. so if you're swapping between them, your call site does not need to move a muscle 🫶
LAPACKE_zgges3_work
lapack_int LAPACKE_zgges3_work (int matrix_layout, char jobvsl, char jobvsr, char sort, LAPACK_Z_SELECT2 selctg, lapack_int n, lapack_complex_double * a, lapack_int lda, lapack_complex_double * b, lapack_int ldb, lapack_int * sdim, lapack_complex_double * alpha, lapack_complex_double * beta, lapack_complex_double * vsl, lapack_int ldvsl, lapack_complex_double * vsr, lapack_int ldvsr, lapack_complex_double * work, lapack_int lwork, double * rwork, lapack_logical * bwork)
Definition at line 36 of file lapacke_zgges3_work.c.
the _work version 🧚 — everything from zgges3 is still there, and then at the tail end you pick up work, lwork, rwork and bwork. yes you're managing your own scratch space now, you're so grown 💖
LAPACKE_zgges_work
lapack_int LAPACKE_zgges_work (int matrix_layout, char jobvsl, char jobvsr, char sort, LAPACK_Z_SELECT2 selctg, lapack_int n, lapack_complex_double * a, lapack_int lda, lapack_complex_double * b, lapack_int ldb, lapack_int * sdim, lapack_complex_double * alpha, lapack_complex_double * beta, lapack_complex_double * vsl, lapack_int ldvsl, lapack_complex_double * vsr, lapack_int ldvsr, lapack_complex_double * work, lapack_int lwork, double * rwork, lapack_logical * bwork)
Definition at line 36 of file lapacke_zgges_work.c.
and here's the work-form of the non-3 one. same argument list as LAPACKE_zgges3_work, different file — lapacke_zgges_work.c. keep your eyes on the filename bestie, they are twins 👯
LAPACKE_zggesx
lapack_int LAPACKE_zggesx (int matrix_layout, char jobvsl, char jobvsr, char sort, LAPACK_Z_SELECT2 selctg, char sense, lapack_int n, lapack_complex_double * a, lapack_int lda, lapack_complex_double * b, lapack_int ldb, lapack_int * sdim, lapack_complex_double * alpha, lapack_complex_double * beta, lapack_complex_double * vsl, lapack_int ldvsl, lapack_complex_double * vsr, lapack_int ldvsr, double * rconde, double * rcondv)
Definition at line 36 of file lapacke_zggesx.c.
the x variant 🦋 — it slides a char sense in right after selctg, and it brings two extra outputs at the very end: rconde and rcondv. everything else is in the same order you already memorised (you did memorise it, right 😭)
LAPACKE_zggesx_work
lapack_int LAPACKE_zggesx_work (int matrix_layout, char jobvsl, char jobvsr, char sort, LAPACK_Z_SELECT2 selctg, char sense, lapack_int n, lapack_complex_double * a, lapack_int lda, lapack_complex_double * b, lapack_int ldb, lapack_int * sdim, lapack_complex_double * alpha, lapack_complex_double * beta, lapack_complex_double * vsl, lapack_int ldvsl, lapack_complex_double * vsr, lapack_int ldvsr, double * rconde, double * rcondv, lapack_complex_double * work, lapack_int lwork, double * rwork, lapack_int * iwork, lapack_int liwork, lapack_logical * bwork)
Definition at line 36 of file lapacke_zggesx_work.c.
okay this is the longest one in this batch 💀 zggesx_work keeps the whole zggesx sandwich and then stacks work, lwork, rwork, iwork, liwork, bwork on top. note that this one has an int-flavoured iwork and a liwork, plus the lapack_logical * bwork — five scratch pointers, no cap. count them twice before you compile 🙈
LAPACKE_zggev
lapack_int LAPACKE_zggev (int matrix_layout, char jobvl, char jobvr, lapack_int n, lapack_complex_double * a, lapack_int lda, lapack_complex_double * b, lapack_int ldb, lapack_complex_double * alpha, lapack_complex_double * beta, lapack_complex_double * vl, lapack_int ldvl, lapack_complex_double * vr, lapack_int ldvr)
Definition at line 36 of file lapacke_zggev.c.
new family, new flags ✨ — no sort, no selctg, no sdim here. just jobvl / jobvr, n, the two matrices a (lda) and b (ldb), then alpha, beta, and the vector outputs vl (ldvl) and vr (ldvr). it's giving clean and simple 🌸
LAPACKE_zggev3
lapack_int LAPACKE_zggev3 (int matrix_layout, char jobvl, char jobvr, lapack_int n, lapack_complex_double * a, lapack_int lda, lapack_complex_double * b, lapack_int ldb, lapack_complex_double * alpha, lapack_complex_double * beta, lapack_complex_double * vl, lapack_int ldvl, lapack_complex_double * vr, lapack_int ldvr)
Definition at line 36 of file lapacke_zggev3.c.
identical argument list to LAPACKE_zggev 💅 only the file name grew a 3. iconic, no notes.
LAPACKE_zggev3_work
lapack_int LAPACKE_zggev3_work (int matrix_layout, char jobvl, char jobvr, lapack_int n, lapack_complex_double * a, lapack_int lda, lapack_complex_double * b, lapack_int ldb, lapack_complex_double * alpha, lapack_complex_double * beta, lapack_complex_double * vl, lapack_int ldvl, lapack_complex_double * vr, lapack_int ldvr, lapack_complex_double * work, lapack_int lwork, double * rwork)
Definition at line 36 of file lapacke_zggev3_work.c.
the work form 🎀 tacks exactly three extras on the end: work, lwork, rwork. only three, bestie, breathe 😭
LAPACKE_zggev_work
lapack_int LAPACKE_zggev_work (int matrix_layout, char jobvl, char jobvr, lapack_int n, lapack_complex_double * a, lapack_int lda, lapack_complex_double * b, lapack_int ldb, lapack_complex_double * alpha, lapack_complex_double * beta, lapack_complex_double * vl, lapack_int ldvl, lapack_complex_double * vr, lapack_int ldvr, lapack_complex_double * work, lapack_int lwork, double * rwork)
Definition at line 36 of file lapacke_zggev_work.c.
same three extras (work, lwork, rwork), same everything else, different file. it's a matching set with zggev3_work, iykyk 🫶
LAPACKE_zggevx
lapack_int LAPACKE_zggevx (int matrix_layout, char balanc, char jobvl, char jobvr, char sense, lapack_int n, lapack_complex_double * a, lapack_int lda, lapack_complex_double * b, lapack_int ldb, lapack_complex_double * alpha, lapack_complex_double * beta, lapack_complex_double * vl, lapack_int ldvl, lapack_complex_double * vr, lapack_int ldvr, lapack_int * ilo, lapack_int * ihi, double * lscale, double * rscale, double * abnrm, double * bbnrm, double * rconde, double * rcondv)
Definition at line 36 of file lapacke_zggevx.c.
the maximalist one 👑 balanc first, then jobvl, jobvr, and a sense — then the usual n, a/lda, b/ldb, alpha, beta, vl/ldvl, vr/ldvr. and then the afterparty: ilo, ihi, lscale, rscale, abnrm, bbnrm, rconde, rcondv. that's eight, yes eight, trailing pointers. hydrate before you write this call 💀🍓
LAPACKE_zggevx_work
lapack_int LAPACKE_zggevx_work (int matrix_layout, char balanc, char jobvl, char jobvr, char sense, lapack_int n, lapack_complex_double * a, lapack_int lda, lapack_complex_double * b, lapack_int ldb, lapack_complex_double * alpha, lapack_complex_double * beta, lapack_complex_double * vl, lapack_int ldvl, lapack_complex_double * vr, lapack_int ldvr, lapack_int * ilo, lapack_int * ihi, double * lscale, double * rscale, double * abnrm, double * bbnrm, double * rconde, double * rcondv, lapack_complex_double * work, lapack_int lwork, double * rwork, lapack_int * iwork, lapack_logical * bwork)
Definition at line 36 of file lapacke_zggevx_work.c.
and the work form just keeps going 💅 after rcondv you get work, lwork, rwork, iwork, bwork. it's giving scroll bar — but every single one of those arguments is real and you need all of them, periodt.
LAPACKE_zggglm
lapack_int LAPACKE_zggglm (int matrix_layout, lapack_int n, lapack_int m, lapack_int p, lapack_complex_double * a, lapack_int lda, lapack_complex_double * b, lapack_int ldb, lapack_complex_double * d, lapack_complex_double * x, lapack_complex_double * y)
Definition at line 36 of file lapacke_zggglm.c.
cute and compact 🎀 — matrix_layout, then the dimensions n, m, p (note the order: n before m, girlies), a/lda, b/ldb, and three lone pointers with no leading dimension in sight: d, x, y. slay.
LAPACKE_zggglm_work
lapack_int LAPACKE_zggglm_work (int matrix_layout, lapack_int n, lapack_int m, lapack_int p, lapack_complex_double * a, lapack_int lda, lapack_complex_double * b, lapack_int ldb, lapack_complex_double * d, lapack_complex_double * x, lapack_complex_double * y, lapack_complex_double * work, lapack_int lwork)
Definition at line 36 of file lapacke_zggglm_work.c.
same as above plus work and lwork at the end. two extras and done ✨
LAPACKE_zgghd3
lapack_int LAPACKE_zgghd3 (int matrix_layout, char compq, char compz, lapack_int n, lapack_int ilo, lapack_int ihi, lapack_complex_double * a, lapack_int lda, lapack_complex_double * b, lapack_int ldb, lapack_complex_double * q, lapack_int ldq, lapack_complex_double * z, lapack_int ldz)
Definition at line 36 of file lapacke_zgghd3.c.
compq and compz, bestie 🦋 — then n, ilo, ihi (those two are ints, not pointers, don't @ me), a/lda, b/ldb, q/ldq, z/ldz. four matrix-and-ld pairs, one layout, three ints, two chars. tidy.
LAPACKE_zgghd3_work
lapack_int LAPACKE_zgghd3_work (int matrix_layout, char compq, char compz, lapack_int n, lapack_int ilo, lapack_int ihi, lapack_complex_double * a, lapack_int lda, lapack_complex_double * b, lapack_int ldb, lapack_complex_double * q, lapack_int ldq, lapack_complex_double * z, lapack_int ldz, lapack_complex_double * work, lapack_int lwork)
Definition at line 36 of file lapacke_zgghd3_work.c.
identical to LAPACKE_zgghd3 and then work, lwork. that's it, that's the tweet 💜
LAPACKE_zgghrd
lapack_int LAPACKE_zgghrd (int matrix_layout, char compq, char compz, lapack_int n, lapack_int ilo, lapack_int ihi, lapack_complex_double * a, lapack_int lda, lapack_complex_double * b, lapack_int ldb, lapack_complex_double * q, lapack_int ldq, lapack_complex_double * z, lapack_int ldz)
Definition at line 36 of file lapacke_zgghrd.c.
yup, this is the same argument list as LAPACKE_zgghd3 — different file (lapacke_zgghrd.c), zero signature drama 🌸
LAPACKE_zgghrd_work
lapack_int LAPACKE_zgghrd_work (int matrix_layout, char compq, char compz, lapack_int n, lapack_int ilo, lapack_int ihi, lapack_complex_double * a, lapack_int lda, lapack_complex_double * b, lapack_int ldb, lapack_complex_double * q, lapack_int ldq, lapack_complex_double * z, lapack_int ldz)
Definition at line 36 of file lapacke_zgghrd_work.c.
plot twist 🫶 — this _work one has no work and no lwork in the signature. it ends at ldz, exactly like the non-work version. don't go adding arguments that aren't there, bestie, that's how compilers get mad at you 😭
LAPACKE_zgglse
lapack_int LAPACKE_zgglse (int matrix_layout, lapack_int m, lapack_int n, lapack_int p, lapack_complex_double * a, lapack_int lda, lapack_complex_double * b, lapack_int ldb, lapack_complex_double * c, lapack_complex_double * d, lapack_complex_double * x)
Definition at line 36 of file lapacke_zgglse.c.
careful, the dimension order flips here: it's m, n, p — m first this time, unlike zggglm's n, m, p. then a/lda, b/ldb, and the bare pointers c, d, x. the way that ordering matters… 👀
LAPACKE_zgglse_work
lapack_int LAPACKE_zgglse_work (int matrix_layout, lapack_int m, lapack_int n, lapack_int p, lapack_complex_double * a, lapack_int lda, lapack_complex_double * b, lapack_int ldb, lapack_complex_double * c, lapack_complex_double * d, lapack_complex_double * x, lapack_complex_double * work, lapack_int lwork)
Definition at line 36 of file lapacke_zgglse_work.c.
plus work and lwork. classic ✨
LAPACKE_zggqrf
lapack_int LAPACKE_zggqrf (int matrix_layout, lapack_int n, lapack_int m, lapack_int p, lapack_complex_double * a, lapack_int lda, lapack_complex_double * taua, lapack_complex_double * b, lapack_int ldb, lapack_complex_double * taub)
Definition at line 36 of file lapacke_zggqrf.c.
🎀 n, m, p — n first again — then a/lda, a taua, b/ldb, and a taub to close it out. note the interleaving: taua sits between a and b, taub sits at the very end. don't shuffle them, i'm begging 🙈
LAPACKE_zggqrf_work
lapack_int LAPACKE_zggqrf_work (int matrix_layout, lapack_int n, lapack_int m, lapack_int p, lapack_complex_double * a, lapack_int lda, lapack_complex_double * taua, lapack_complex_double * b, lapack_int ldb, lapack_complex_double * taub, lapack_complex_double * work, lapack_int lwork)
Definition at line 36 of file lapacke_zggqrf_work.c.
same plus work, lwork. 10/10, no notes 💅
LAPACKE_zggrqf
lapack_int LAPACKE_zggrqf (int matrix_layout, lapack_int m, lapack_int p, lapack_int n, lapack_complex_double * a, lapack_int lda, lapack_complex_double * taua, lapack_complex_double * b, lapack_int ldb, lapack_complex_double * taub)
Definition at line 36 of file lapacke_zggrqf.c.
vibe check ⚠️ this one is not a copy of zggqrf — the dimension triple is m, p, n. the others stay put: a/lda, taua, b/ldb, taub. it's giving "trust nobody, read the signature" 🔥
LAPACKE_zggrqf_work
lapack_int LAPACKE_zggrqf_work (int matrix_layout, lapack_int m, lapack_int p, lapack_int n, lapack_complex_double * a, lapack_int lda, lapack_complex_double * taua, lapack_complex_double * b, lapack_int ldb, lapack_complex_double * taub, lapack_complex_double * work, lapack_int lwork)
Definition at line 36 of file lapacke_zggrqf_work.c.
m, p, n again here (yes, still that order) plus work, lwork 🫶
LAPACKE_zggsvd
lapack_int LAPACKE_zggsvd (int matrix_layout, char jobu, char jobv, char jobq, lapack_int m, lapack_int n, lapack_int p, lapack_int * k, lapack_int * l, lapack_complex_double * a, lapack_int lda, lapack_complex_double * b, lapack_int ldb, double * alpha, double * beta, lapack_complex_double * u, lapack_int ldu, lapack_complex_double * v, lapack_int ldv, lapack_complex_double * q, lapack_int ldq, lapack_int * iwork)
Definition at line 36 of file lapacke_zggsvd.c.
big one 👑 three chars up front (jobu, jobv, jobq), then m, n, p, then two pointers to ints k and l, then a/lda, b/ldb, then alpha and beta as double * (yes, plain doubles even though everything else is complex double — that's what's written, bestie), then u/ldu, v/ldv, q/ldq, and finally a stray iwork. seventeen-ish arguments of pure main character energy ✨
LAPACKE_zggsvd3
lapack_int LAPACKE_zggsvd3 (int matrix_layout, char jobu, char jobv, char jobq, lapack_int m, lapack_int n, lapack_int p, lapack_int * k, lapack_int * l, lapack_complex_double * a, lapack_int lda, lapack_complex_double * b, lapack_int ldb, double * alpha, double * beta, lapack_complex_double * u, lapack_int ldu, lapack_complex_double * v, lapack_int ldv, lapack_complex_double * q, lapack_int ldq, lapack_int * iwork)
Definition at line 36 of file lapacke_zggsvd3.c.
same exact list as LAPACKE_zggsvd, just living in lapacke_zggsvd3.c 💖 swap the call, keep the args, go live your life 🦋
💜 LAPACKE_zggsvd3_work
okay so this one's the worker for the generalized SVD (the 3 edition, bestie), and look at that parameter list, it's giving "I know what I'm doing":
lapack_int LAPACKE_zggsvd3_work (int matrix_layout, char jobu, char jobv,
char jobq, lapack_int m, lapack_int n, lapack_int p, lapack_int * k,
lapack_int * l, lapack_complex_double * a, lapack_int lda,
lapack_complex_double * b, lapack_int ldb, double * alpha, double *
beta, lapack_complex_double * u, lapack_int ldu, lapack_complex_double *
v, lapack_int ldv, lapack_complex_double * q, lapack_int ldq,
lapack_complex_double * work, lapack_int lwork, double * rwork,
lapack_int * iwork)
Definition at line 36 of file lapacke_zggsvd3_work.c.
💜 LAPACKE_zggsvd_work
same energy as above but without the lwork moment — yes it still has work, it just doesn't ask you for the workspace size ✨
lapack_int LAPACKE_zggsvd_work (int matrix_layout, char jobu, char jobv,
char jobq, lapack_int m, lapack_int n, lapack_int p, lapack_int * k,
lapack_int * l, lapack_complex_double * a, lapack_int lda,
lapack_complex_double * b, lapack_int ldb, double * alpha, double *
beta, lapack_complex_double * u, lapack_int ldu, lapack_complex_double *
v, lapack_int ldv, lapack_complex_double * q, lapack_int ldq,
lapack_complex_double * work, double * rwork, lapack_int * iwork)
Definition at line 36 of file lapacke_zggsvd_work.c.
🎀 LAPACKE_zggsvp
the preprocessing queen 👑 note the order here is m, p, n — not m, n, p, so bestie please read the signature before you yell at your code:
lapack_int LAPACKE_zggsvp (int matrix_layout, char jobu, char jobv, char
jobq, lapack_int m, lapack_int p, lapack_int n, lapack_complex_double *
a, lapack_int lda, lapack_complex_double * b, lapack_int ldb, double
tola, double tolb, lapack_int * k, lapack_int * l, lapack_complex_double
* u, lapack_int ldu, lapack_complex_double * v, lapack_int ldv,
lapack_complex_double * q, lapack_int ldq)
Definition at line 36 of file lapacke_zggsvp.c.
🎀 LAPACKE_zggsvp3
literally the 3 variant of the one above and the signature is identical in every character, so don't come for me 💅
lapack_int LAPACKE_zggsvp3 (int matrix_layout, char jobu, char jobv, char
jobq, lapack_int m, lapack_int p, lapack_int n, lapack_complex_double *
a, lapack_int lda, lapack_complex_double * b, lapack_int ldb, double
tola, double tolb, lapack_int * k, lapack_int * l, lapack_complex_double
* u, lapack_int ldu, lapack_complex_double * v, lapack_int ldv,
lapack_complex_double * q, lapack_int ldq)
Definition at line 36 of file lapacke_zggsvp3.c.
🦋 LAPACKE_zggsvp3_work
and here's the worker version, which brings the whole friend group: iwork, rwork, tau, work and lwork all showed up 🫶
lapack_int LAPACKE_zggsvp3_work (int matrix_layout, char jobu, char jobv,
char jobq, lapack_int m, lapack_int p, lapack_int n,
lapack_complex_double * a, lapack_int lda, lapack_complex_double * b,
lapack_int ldb, double tola, double tolb, lapack_int * k, lapack_int *
l, lapack_complex_double * u, lapack_int ldu, lapack_complex_double * v,
lapack_int ldv, lapack_complex_double * q, lapack_int ldq, lapack_int *
iwork, double * rwork, lapack_complex_double * tau,
lapack_complex_double * work, lapack_int lwork)
Definition at line 36 of file lapacke_zggsvp3_work.c.
🦋 LAPACKE_zggsvp_work
same lineup, minus the lwork at the end — the workspace is just there, no size negotiation 😌
lapack_int LAPACKE_zggsvp_work (int matrix_layout, char jobu, char jobv,
char jobq, lapack_int m, lapack_int p, lapack_int n,
lapack_complex_double * a, lapack_int lda, lapack_complex_double * b,
lapack_int ldb, double tola, double tolb, lapack_int * k, lapack_int *
l, lapack_complex_double * u, lapack_int ldu, lapack_complex_double * v,
lapack_int ldv, lapack_complex_double * q, lapack_int ldq, lapack_int *
iwork, double * rwork, lapack_complex_double * tau,
lapack_complex_double * work)
Definition at line 36 of file lapacke_zggsvp_work.c.
🌸 LAPACKE_zgtcon
tridiagonal condition estimator, no matrix_layout in sight — it just starts with norm and goes. iconic honestly:
lapack_int LAPACKE_zgtcon (char norm, lapack_int n, const
lapack_complex_double * dl, const lapack_complex_double * d, const
lapack_complex_double * du, const lapack_complex_double * du2, const
lapack_int * ipiv, double anorm, double * rcond)
Definition at line 36 of file lapacke_zgtcon.c.
🌸 LAPACKE_zgtcon_work
same, plus a work array tacked on the end because of course 🎀
lapack_int LAPACKE_zgtcon_work (char norm, lapack_int n, const
lapack_complex_double * dl, const lapack_complex_double * d, const
lapack_complex_double * du, const lapack_complex_double * du2, const
lapack_int * ipiv, double anorm, double * rcond, lapack_complex_double *
work)
Definition at line 36 of file lapacke_zgtcon_work.c.
⭐ LAPACKE_zgtrfs
refinement time bestie — so many const pointers, dlf, df, duf, du2, ipiv, then b, x, ferr, berr:
lapack_int LAPACKE_zgtrfs (int matrix_layout, char trans, lapack_int n,
lapack_int nrhs, const lapack_complex_double * dl, const
lapack_complex_double * d, const lapack_complex_double * du, const
lapack_complex_double * dlf, const lapack_complex_double * df, const
lapack_complex_double * duf, const lapack_complex_double * du2, const
lapack_int * ipiv, const lapack_complex_double * b, lapack_int ldb,
lapack_complex_double * x, lapack_int ldx, double * ferr, double * berr)
Definition at line 36 of file lapacke_zgtrfs.c.
⭐ LAPACKE_zgtrfs_work
and here she is with work and rwork bringing up the rear 💖
lapack_int LAPACKE_zgtrfs_work (int matrix_layout, char trans, lapack_int n,
lapack_int nrhs, const lapack_complex_double * dl, const
lapack_complex_double * d, const lapack_complex_double * du, const
lapack_complex_double * dlf, const lapack_complex_double * df, const
lapack_complex_double * duf, const lapack_complex_double * du2, const
lapack_int * ipiv, const lapack_complex_double * b, lapack_int ldb,
lapack_complex_double * x, lapack_int ldx, double * ferr, double * berr,
lapack_complex_double * work, double * rwork)
Definition at line 36 of file lapacke_zgtrfs_work.c.
🍓 LAPACKE_zgtsv
tridiagonal solve, short and sweet, lowkey my fave because the signature doesn't need a whole scroll:
lapack_int LAPACKE_zgtsv (int matrix_layout, lapack_int n, lapack_int nrhs,
lapack_complex_double * dl, lapack_complex_double * d,
lapack_complex_double * du, lapack_complex_double * b, lapack_int ldb)
Definition at line 36 of file lapacke_zgtsv.c.
🍓 LAPACKE_zgtsv_work
identical twin, different file, we love a matching set ✨
lapack_int LAPACKE_zgtsv_work (int matrix_layout, lapack_int n, lapack_int
nrhs, lapack_complex_double * dl, lapack_complex_double * d,
lapack_complex_double * du, lapack_complex_double * b, lapack_int ldb)
Definition at line 36 of file lapacke_zgtsv_work.c.
🔥 LAPACKE_zgtsvx
the "x" means business — fact, trans, factored arrays, rcond, ferr, berr, the whole cast 😭
lapack_int LAPACKE_zgtsvx (int matrix_layout, char fact, char trans,
lapack_int n, lapack_int nrhs, const lapack_complex_double * dl, const
lapack_complex_double * d, const lapack_complex_double * du,
lapack_complex_double * dlf, lapack_complex_double * df,
lapack_complex_double * duf, lapack_complex_double * du2, lapack_int *
ipiv, const lapack_complex_double * b, lapack_int ldb,
lapack_complex_double * x, lapack_int ldx, double * rcond, double *
ferr, double * berr)
Definition at line 36 of file lapacke_zgtsvx.c.
🔥 LAPACKE_zgtsvx_work
same whole cast, plus work and rwork because the workers always bring snacks 🫶
lapack_int LAPACKE_zgtsvx_work (int matrix_layout, char fact, char trans,
lapack_int n, lapack_int nrhs, const lapack_complex_double * dl, const
lapack_complex_double * d, const lapack_complex_double * du,
lapack_complex_double * dlf, lapack_complex_double * df,
lapack_complex_double * duf, lapack_complex_double * du2, lapack_int *
ipiv, const lapack_complex_double * b, lapack_int ldb,
lapack_complex_double * x, lapack_int ldx, double * rcond, double *
ferr, double * berr, lapack_complex_double * work, double * rwork)
Definition at line 36 of file lapacke_zgtsvx_work.c.
🧚 LAPACKE_zgttrf
factorization! no matrix_layout here, it's just n and the bands and ipiv — minimal, clean, ate 💅
lapack_int LAPACKE_zgttrf (lapack_int n, lapack_complex_double * dl,
lapack_complex_double * d, lapack_complex_double * du,
lapack_complex_double * du2, lapack_int * ipiv)
Definition at line 36 of file lapacke_zgttrf.c.
🧚 LAPACKE_zgttrf_work
same signature, _work file, no notes, we move 🌈
lapack_int LAPACKE_zgttrf_work (lapack_int n, lapack_complex_double * dl,
lapack_complex_double * d, lapack_complex_double * du,
lapack_complex_double * du2, lapack_int * ipiv)
Definition at line 36 of file lapacke_zgttrf_work.c.
💀 LAPACKE_zgttrs
the solve that uses the factorization — all those const bands and ipiv, then the b you're here to fix:
lapack_int LAPACKE_zgttrs (int matrix_layout, char trans, lapack_int n,
lapack_int nrhs, const lapack_complex_double * dl, const
lapack_complex_double * d, const lapack_complex_double * du, const
lapack_complex_double * du2, const lapack_int * ipiv,
lapack_complex_double * b, lapack_int ldb)
Definition at line 36 of file lapacke_zgttrs.c.
💀 LAPACKE_zgttrs_work
and the worker twin, character-for-character the same list 💜
lapack_int LAPACKE_zgttrs_work (int matrix_layout, char trans, lapack_int n,
lapack_int nrhs, const lapack_complex_double * dl, const
lapack_complex_double * d, const lapack_complex_double * du, const
lapack_complex_double * du2, const lapack_int * ipiv,
lapack_complex_double * b, lapack_int ldb)
Definition at line 36 of file lapacke_zgttrs_work.c.
👑 LAPACKE_zhbev
here come the Hermitian banded eigenvalue girlies 🌸 jobz, uplo, kd, ab, ldab, eigenvalues w, eigenvectors z:
lapack_int LAPACKE_zhbev (int matrix_layout, char jobz, char uplo,
lapack_int n, lapack_int kd, lapack_complex_double * ab, lapack_int
ldab, double * w, lapack_complex_double * z, lapack_int ldz)
Definition at line 36 of file lapacke_zhbev.c.
👑 LAPACKE_zhbev_2stage
the _2stage remix, and the signature is literally the same as the original — two-stage said "no new params, just vibes" ✨
lapack_int LAPACKE_zhbev_2stage (int matrix_layout, char jobz, char uplo,
lapack_int n, lapack_int kd, lapack_complex_double * ab, lapack_int
ldab, double * w, lapack_complex_double * z, lapack_int ldz)
Definition at line 36 of file lapacke_zhbev_2stage.c.
🦋 LAPACKE_zhbev_2stage_work
and NOW the workspace shows up — work, lwork, rwork all in formation 🫶
lapack_int LAPACKE_zhbev_2stage_work (int matrix_layout, char jobz, char
uplo, lapack_int n, lapack_int kd, lapack_complex_double * ab,
lapack_int ldab, double * w, lapack_complex_double * z, lapack_int ldz,
lapack_complex_double * work, lapack_int lwork, double * rwork)
Definition at line 36 of file lapacke_zhbev_2stage_work.c.
🦋 LAPACKE_zhbev_work
same but the work tail is work + rwork, no lwork. subtly different, so don't mix them up bestie 😭
lapack_int LAPACKE_zhbev_work (int matrix_layout, char jobz, char uplo,
lapack_int n, lapack_int kd, lapack_complex_double * ab, lapack_int
ldab, double * w, lapack_complex_double * z, lapack_int ldz,
lapack_complex_double * work, double * rwork)
Definition at line 36 of file lapacke_zhbev_work.c.
🎀 LAPACKE_zhbevd
the d is for divide-and-conquer, and the public signature stays cute and compact:
lapack_int LAPACKE_zhbevd (int matrix_layout, char jobz, char uplo,
lapack_int n, lapack_int kd, lapack_complex_double * ab, lapack_int
ldab, double * w, lapack_complex_double * z, lapack_int ldz)
Definition at line 36 of file lapacke_zhbevd.c.
🎀 LAPACKE_zhbevd_2stage
two-stage divide-and-conquer, same public list again, consistency is the moment 💅
lapack_int LAPACKE_zhbevd_2stage (int matrix_layout, char jobz, char uplo,
lapack_int n, lapack_int kd, lapack_complex_double * ab, lapack_int
ldab, double * w, lapack_complex_double * z, lapack_int ldz)
Definition at line 36 of file lapacke_zhbevd_2stage.c.
🔥 LAPACKE_zhbevd_2stage_work
okay this worker is THIRSTY for integers — lwork, lrwork, iwork, liwork, all the sizes, all the glory:
lapack_int LAPACKE_zhbevd_2stage_work (int matrix_layout, char jobz, char
uplo, lapack_int n, lapack_int kd, lapack_complex_double * ab,
lapack_int ldab, double * w, lapack_complex_double * z, lapack_int ldz,
lapack_complex_double * work, lapack_int lwork, double * rwork,
lapack_int lrwork, lapack_int * iwork, lapack_int liwork)
Definition at line 36 of file lapacke_zhbevd_2stage_work.c.
🔥 LAPACKE_zhbevd_work
identical parameter list to the _2stage_work one, just a different file name — copy that carefully fr fr:
lapack_int LAPACKE_zhbevd_work (int matrix_layout, char jobz, char uplo,
lapack_int n, lapack_int kd, lapack_complex_double * ab, lapack_int
ldab, double * w, lapack_complex_double * z, lapack_int ldz,
lapack_complex_double * work, lapack_int lwork, double * rwork,
lapack_int lrwork, lapack_int * iwork, lapack_int liwork)
Definition at line 36 of file lapacke_zhbevd_work.c.
⭐ LAPACKE_zhbevx
the x one is doing the MOST — jobz, range, uplo, vl, vu, il, iu, abstol, then m, w, z, and ifail 😭 she's thorough:
lapack_int LAPACKE_zhbevx (int matrix_layout, char jobz, char range, char
uplo, lapack_int n, lapack_int kd, lapack_complex_double * ab,
lapack_int ldab, lapack_complex_double * q, lapack_int ldq, double vl,
double vu, lapack_int il, lapack_int iu, double abstol, lapack_int * m,
double * w, lapack_complex_double * z, lapack_int ldz, lapack_int *
ifail)
Definition at line 36 of file lapacke_zhbevx.c.
⭐ LAPACKE_zhbevx_2stage
two-stage version of the exact same long list — yes, ifail made it in again, she never misses 💜
lapack_int LAPACKE_zhbevx_2stage (int matrix_layout, char jobz, char range,
char uplo, lapack_int n, lapack_int kd, lapack_complex_double * ab,
lapack_int ldab, lapack_complex_double * q, lapack_int ldq, double vl,
double vu, lapack_int il, lapack_int iu, double abstol, lapack_int * m,
double * w, lapack_complex_double * z, lapack_int ldz, lapack_int *
ifail)
Definition at line 36 of file lapacke_zhbevx_2stage.c.
🌈 LAPACKE_zhbevx_2stage_work
lapack_int LAPACKE_zhbevx_2stage_work (int matrix_layout, char jobz, char range, char uplo, lapack_int n, lapack_int kd, lapack_complex_double * ab, lapack_int ldab, lapack_complex_double * q, lapack_int ldq, double vl, double vu, lapack_int il, lapack_int iu, double abstol, lapack_int * m, double * w, lapack_complex_double * z, lapack_int ldz, lapack_complex_double * work, lapack_int lwork, double * rwork, lapack_int * iwork, lapack_int * ifail)
Definition at line 36 of file lapacke_zhbevx_2stage_work.c.
bestie the parameter list on this one is genuinely a whole friend group — count them: matrix_layout, jobz, range, uplo, n, kd, ab, ldab, q, ldq, vl, vu, il, iu, abstol, m, w, z, ldz, work, lwork, rwork, iwork, ifail. It's giving field trip 🚌 and yes, iwork AND ifail both showed up, so they packed everything.
🦋 LAPACKE_zhbevx_work
lapack_int LAPACKE_zhbevx_work (int matrix_layout, char jobz, char range, char uplo, lapack_int n, lapack_int kd, lapack_complex_double * ab, lapack_int ldab, lapack_complex_double * q, lapack_int ldq, double vl, double vu, lapack_int il, lapack_int iu, double abstol, lapack_int * m, double * w, lapack_complex_double * z, lapack_int ldz, lapack_complex_double * work, double * rwork, lapack_int * iwork, lapack_int * ifail)
Definition at line 36 of file lapacke_zhbevx_work.c.
okay so this is the non-2stage sibling of the one above — same vibe, but the work pointer list is shorter: just work and rwork extra, no lwork in sight. the way these two are basically twins with one difference is so sibling energy 😭💅
🌸 LAPACKE_zhbgst
lapack_int LAPACKE_zhbgst (int matrix_layout, char vect, char uplo, lapack_int n, lapack_int ka, lapack_int kb, lapack_complex_double * ab, lapack_int ldab, const lapack_complex_double * bb, lapack_int ldbb, lapack_complex_double * x, lapack_int ldx)
Definition at line 36 of file lapacke_zhbgst.c.
not the bb being const while ab is out here living its mutable life 💀 honestly iconic of it. ka and kb both in the house — two bandwidths, one function 🎀
💜 LAPACKE_zhbgst_work
lapack_int LAPACKE_zhbgst_work (int matrix_layout, char vect, char uplo, lapack_int n, lapack_int ka, lapack_int kb, lapack_complex_double * ab, lapack_int ldab, const lapack_complex_double * bb, lapack_int ldbb, lapack_complex_double * x, lapack_int ldx, lapack_complex_double * work, double * rwork)
Definition at line 36 of file lapacke_zhbgst_work.c.
same friend, but now with work and rwork tacked on the end, because the _work version always gotta bring snacks to the function 🍓
✨ LAPACKE_zhbgv
lapack_int LAPACKE_zhbgv (int matrix_layout, char jobz, char uplo, lapack_int n, lapack_int ka, lapack_int kb, lapack_complex_double * ab, lapack_int ldab, lapack_complex_double * bb, lapack_int ldbb, double * w, lapack_complex_double * z, lapack_int ldz)
Definition at line 36 of file lapacke_zhbgv.c.
no const anywhere this time, everybody's mutable, we're all main characters here 👑 and note that bb lost its const compared to zhbgst — small glow-up, no cap.
🎀 LAPACKE_zhbgv_work
lapack_int LAPACKE_zhbgv_work (int matrix_layout, char jobz, char uplo, lapack_int n, lapack_int ka, lapack_int kb, lapack_complex_double * ab, lapack_int ldab, lapack_complex_double * bb, lapack_int ldbb, double * w, lapack_complex_double * z, lapack_int ldz, lapack_complex_double * work, double * rwork)
Definition at line 36 of file lapacke_zhbgv_work.c.
boom: work + rwork appended, same 13 args before the add-ons. consistency is such a slay ✨
🌈 LAPACKE_zhbgvd
lapack_int LAPACKE_zhbgvd (int matrix_layout, char jobz, char uplo, lapack_int n, lapack_int ka, lapack_int kb, lapack_complex_double * ab, lapack_int ldab, lapack_complex_double * bb, lapack_int ldbb, double * w, lapack_complex_double * z, lapack_int ldz)
Definition at line 36 of file lapacke_zhbgvd.c.
the d is doing something and the signature is identical to zhbgv's. literally character for character the same list — twins, not clones, okay maybe clones 🙈
🫶 LAPACKE_zhbgvd_work
lapack_int LAPACKE_zhbgvd_work (int matrix_layout, char jobz, char uplo, lapack_int n, lapack_int ka, lapack_int kb, lapack_complex_double * ab, lapack_int ldab, lapack_complex_double * bb, lapack_int ldbb, double * w, lapack_complex_double * z, lapack_int ldz, lapack_complex_double * work, lapack_int lwork, double * rwork, lapack_int lrwork, lapack_int * iwork, lapack_int liwork)
Definition at line 36 of file lapacke_zhbgvd_work.c.
ok THIS one is the full glam version: work, lwork, rwork, lrwork, iwork, liwork — six slots at the end, each with a matching length buddy. it's giving matched set 💅
🧚 LAPACKE_zhbgvx
lapack_int LAPACKE_zhbgvx (int matrix_layout, char jobz, char range, char uplo, lapack_int n, lapack_int ka, lapack_int kb, lapack_complex_double * ab, lapack_int ldab, lapack_complex_double * bb, lapack_int ldbb, lapack_complex_double * q, lapack_int ldq, double vl, double vu, lapack_int il, lapack_int iu, double abstol, lapack_int * m, double * w, lapack_complex_double * z, lapack_int ldz, lapack_int * ifail)
Definition at line 36 of file lapacke_zhbgvx.c.
range is here, vl/vu are here, il/iu are here, abstol is here — it's the picky-about-which-ones era of the family 🔥 and ifail closes out the list, as it does.
💜 LAPACKE_zhbgvx_work
lapack_int LAPACKE_zhbgvx_work (int matrix_layout, char jobz, char range, char uplo, lapack_int n, lapack_int ka, lapack_int kb, lapack_complex_double * ab, lapack_int ldab, lapack_complex_double * bb, lapack_int ldbb, lapack_complex_double * q, lapack_int ldq, double vl, double vu, lapack_int il, lapack_int iu, double abstol, lapack_int * m, double * w, lapack_complex_double * z, lapack_int ldz, lapack_complex_double * work, double * rwork, lapack_int * iwork, lapack_int * ifail)
Definition at line 36 of file lapacke_zhbgvx_work.c.
the _work glow-up drops work, rwork, iwork in right before ifail — like holding the door open for the workspace crew 🚪✨
🌸 LAPACKE_zhbtrd
lapack_int LAPACKE_zhbtrd (int matrix_layout, char vect, char uplo, lapack_int n, lapack_int kd, lapack_complex_double * ab, lapack_int ldab, double * d, double * e, lapack_complex_double * q, lapack_int ldq)
Definition at line 36 of file lapacke_zhbtrd.c.
vect (not jobz, bestie, read the room) and a cute little d/e pair in the middle — the only single-letter doubles in the whole squad 🎀
🦋 LAPACKE_zhbtrd_work
lapack_int LAPACKE_zhbtrd_work (int matrix_layout, char vect, char uplo, lapack_int n, lapack_int kd, lapack_complex_double * ab, lapack_int ldab, double * d, double * e, lapack_complex_double * q, lapack_int ldq, lapack_complex_double * work)
Definition at line 36 of file lapacke_zhbtrd_work.c.
one extra arg: work. that's it, that's the tweet 🐦 no lwork, no rwork, just vibes.
⭐ LAPACKE_zhecon
lapack_int LAPACKE_zhecon (int matrix_layout, char uplo, lapack_int n, const lapack_complex_double * a, lapack_int lda, const lapack_int * ipiv, double anorm, double * rcond)
Definition at line 36 of file lapacke_zhecon.c.
two consts in one signature (a and ipiv) — respectful, doesn't touch your stuff 🫶 and it takes an anorm in and hands you back an rcond. very give-and-take of it.
💜 LAPACKE_zhecon_3
lapack_int LAPACKE_zhecon_3 (int matrix_layout, char uplo, lapack_int n, const lapack_complex_double * a, lapack_int lda, const lapack_complex_double * e, const lapack_int * ipiv, double anorm, double * rcond)
Definition at line 36 of file lapacke_zhecon_3.c.
the _3 variant slides a whole extra const lapack_complex_double * e in between lda and ipiv. three consts now — it's giving trust issues, but make it fashion 💅
🧚 LAPACKE_zhecon_3_work
lapack_int LAPACKE_zhecon_3_work (int matrix_layout, char uplo, lapack_int n, const lapack_complex_double * a, lapack_int lda, const lapack_complex_double * e, const lapack_int * ipiv, double anorm, double * rcond, lapack_complex_double * work)
Definition at line 36 of file lapacke_zhecon_3_work.c.
exact same as zhecon_3 but with work parked at the end like a little backpack 🎒
🌈 LAPACKE_zhecon_work
lapack_int LAPACKE_zhecon_work (int matrix_layout, char uplo, lapack_int n, const lapack_complex_double * a, lapack_int lda, const lapack_int * ipiv, double anorm, double * rcond, lapack_complex_double * work)
Definition at line 36 of file lapacke_zhecon_work.c.
no _3, no e, just a, ipiv, anorm, rcond, work. the stripped-down version, we love a minimalist 👑
🎀 LAPACKE_zheequb
lapack_int LAPACKE_zheequb (int matrix_layout, char uplo, lapack_int n, const lapack_complex_double * a, lapack_int lda, double * s, double * scond, double * amax)
Definition at line 36 of file lapacke_zheequb.c.
s, scond, amax — three doubles walking into a function together, no explanation, iykyk 😌 and a is the only const here, the rest are free.
💜 LAPACKE_zheequb_work
lapack_int LAPACKE_zheequb_work (int matrix_layout, char uplo, lapack_int n, const lapack_complex_double * a, lapack_int lda, double * s, double * scond, double * amax, lapack_complex_double * work)
Definition at line 36 of file lapacke_zheequb_work.c.
add work, ship it, definition still at line 36 because of course it is 🫠
🔥 LAPACKE_zheev
lapack_int LAPACKE_zheev (int matrix_layout, char jobz, char uplo, lapack_int n, lapack_complex_double * a, lapack_int lda, double * w)
Definition at line 36 of file lapacke_zheev.c.
look at this short little icon — seven args total, no workspace at all. a rare clean-face moment in the middle of all this chaos ✨
⭐ LAPACKE_zheev_2stage
lapack_int LAPACKE_zheev_2stage (int matrix_layout, char jobz, char uplo, lapack_int n, lapack_complex_double * a, lapack_int lda, double * w)
Definition at line 36 of file lapacke_zheev_2stage.c.
identical list to zheev, only the name grew a _2stage. same face, different wig 💇♀️
🌸 LAPACKE_zheev_2stage_work
lapack_int LAPACKE_zheev_2stage_work (int matrix_layout, char jobz, char uplo, lapack_int n, lapack_complex_double * a, lapack_int lda, double * w, lapack_complex_double * work, lapack_int lwork, double * rwork)
Definition at line 36 of file lapacke_zheev_2stage_work.c.
here come work, lwork, rwork in that exact order — the classic trio 🎶
🦋 LAPACKE_zheev_work
lapack_int LAPACKE_zheev_work (int matrix_layout, char jobz, char uplo, lapack_int n, lapack_complex_double * a, lapack_int lda, double * w, lapack_complex_double * work, lapack_int lwork, double * rwork)
Definition at line 36 of file lapacke_zheev_work.c.
and it's the exact same parameter list as the _2stage_work one. literally. character for character. siblings your honor 😭
💜 LAPACKE_zheevd
lapack_int LAPACKE_zheevd (int matrix_layout, char jobz, char uplo, lapack_int n, lapack_complex_double * a, lapack_int lda, double * w)
Definition at line 36 of file lapacke_zheevd.c.
seven args again, no workspace. the d suffix is the only difference from zheev. they're the same picture 🖼️
✨ LAPACKE_zheevd_2stage
lapack_int LAPACKE_zheevd_2stage (int matrix_layout, char jobz, char uplo, lapack_int n, lapack_complex_double * a, lapack_int lda, double * w)
Definition at line 36 of file lapacke_zheevd_2stage.c.
another one, another identical seven. the consistency is honestly stunning 🌈
🫶 LAPACKE_zheevd_2stage_work
lapack_int LAPACKE_zheevd_2stage_work (int matrix_layout, char jobz, char uplo, lapack_int n, lapack_complex_double * a, lapack_int lda, double * w, lapack_complex_double * work, lapack_int lwork, double * rwork, lapack_int lrwork, lapack_int * iwork, lapack_int liwork)
Definition at line 36 of file lapacke_zheevd_2stage_work.c.
now we're stacking: work, lwork, rwork, lrwork, iwork, liwork — three pairs, all matched, no notes 🎀
🧚 LAPACKE_zheevd_work
lapack_int LAPACKE_zheevd_work (int matrix_layout, char jobz, char uplo, lapack_int n, lapack_complex_double * a, lapack_int lda, double * w, lapack_complex_double * work, lapack_int lwork, double * rwork, lapack_int lrwork, lapack_int * iwork, lapack_int liwork)
Definition at line 36 of file lapacke_zheevd_work.c.
same six extra args as its _2stage_work bestie. twinning, again, forever 👯♀️
🌈 LAPACKE_zheevr
lapack_int LAPACKE_zheevr (int matrix_layout, char jobz, char range, char uplo, lapack_int n, lapack_complex_double * a, lapack_int lda, double vl, double vu, lapack_int il, lapack_int iu, double abstol, lapack_int * m, double * w, lapack_complex_double * z, lapack_int ldz, lapack_int * isuppz)
Definition at line 36 of file lapacke_zheevr.c.
range + vl/vu + il/iu + abstol all up in here, and the closer is isuppz this time, not ifail. plot twist 🌀 the r-squad rolls different
💜 LAPACKE_zheevr_2stage
lapack_int LAPACKE_zheevr_2stage (int matrix_layout, char jobz, char range, char uplo, lapack_int n, lapack_complex_double * a, lapack_int lda, double vl, double vu, lapack_int il, lapack_int iu, double abstol, lapack_int * m, double * w, lapack_complex_double * z, lapack_int ldz, lapack_int * isuppz)
Definition at line 36 of file lapacke_zheevr_2stage.c.
identical to zheevr's list, isuppz and all. copy, paste, but make it legal ✅
🎀 LAPACKE_zheevr_2stage_work
lapack_int LAPACKE_zheevr_2stage_work (int matrix_layout, char jobz, char range, char uplo, lapack_int n, lapack_complex_double * a, lapack_int lda, double vl, double vu, lapack_int il, lapack_int iu, double abstol, lapack_int * m, double * w, lapack_complex_double * z, lapack_int ldz, lapack_int * isuppz, lapack_complex_double * work, lapack_int lwork, double * rwork, lapack_int lrwork, lapack_int * iwork, lapack_int liwork)
Definition at line 36 of file lapacke_zheevr_2stage_work.c.
okay this is the long one: everything from zheevr_2stage PLUS work, lwork, rwork, lrwork, iwork, liwork. do not lose track, bestie, isuppz comes before work 💅
🌸 LAPACKE_zheevr_work
lapack_int LAPACKE_zheevr_work (int matrix_layout, char jobz, char range, char uplo, lapack_int n, lapack_complex_double * a, lapack_int lda, double vl, double vu, lapack_int il, lapack_int iu, double abstol, lapack_int * m, double * w, lapack_complex_double * z, lapack_int ldz, lapack_int * isuppz, lapack_complex_double * work, lapack_int lwork, double * rwork, lapack_int lrwork, lapack_int * iwork, lapack_int liwork)
Definition at line 36 of file lapacke_zheevr_work.c.
yep — identical to the _2stage_work list. not a single character out of place. the LAPACKE naming committee ate 🍽️
⭐ LAPACKE_zheevx
lapack_int LAPACKE_zheevx (int matrix_layout, char jobz, char range, char uplo, lapack_int n, lapack_complex_double * a, lapack_int lda, double vl, double vu, lapack_int il, lapack_int iu, double abstol, lapack_int * m, double * w, lapack_complex_double * z, lapack_int ldz, lapack_int * ifail)
Definition at line 36 of file lapacke_zheevx.c.
x marks the spot and ifail is back on closing duty 👑 same first 17 args as zheevr, different last one — that's the whole bit 🎤
🦋 LAPACKE_zheevx_2stage
lapack_int LAPACKE_zheevx_2stage (int matrix_layout, char jobz, char range, char uplo, lapack_int n, lapack_complex_double * a, lapack_int lda, double vl, double vu, lapack_int il, lapack_int iu, double abstol, lapack_int * m, double * w, lapack_complex_double * z, lapack_int ldz, lapack_int * ifail)
Definition at line 36 of file lapacke_zheevx_2stage.c.
and we end this stretch on a perfect copy of zheevx's parameter list, just with _2stage in the name and in the filename. definition at line 36 as always, the house style is unshakeable 🏠✨
LAPACKE_zheevx_2stage_work 💜
lapack_int LAPACKE_zheevx_2stage_work (int matrix_layout, char jobz, char range, char uplo, lapack_int n, lapack_complex_double * a, lapack_int lda, double vl, double vu, lapack_int il, lapack_int iu, double abstol, lapack_int * m, double * w, lapack_complex_double * z, lapack_int ldz, lapack_complex_double * work, lapack_int lwork, double * rwork, lapack_int * iwork, lapack_int * ifail)
Definition at line 36 of file lapacke_zheevx_2stage_work.c.
okay bestie, look at that argument list 💀 it's giving extended edition. matrix_layout, jobz, range, uplo, n, the matrix a and its lda, the vl/vu/il/iu crew, abstol, then m, w, z, ldz, and the full work squad: work, lwork, rwork, iwork, ifail. Chef's kiss of completeness 🫶
LAPACKE_zheevx_work ✨
lapack_int LAPACKE_zheevx_work (int matrix_layout, char jobz, char range, char uplo, lapack_int n, lapack_complex_double * a, lapack_int lda, double vl, double vu, lapack_int il, lapack_int iu, double abstol, lapack_int * m, double * w, lapack_complex_double * z, lapack_int ldz, lapack_complex_double * work, lapack_int lwork, double * rwork, lapack_int * iwork, lapack_int * ifail)
Definition at line 36 of file lapacke_zheevx_work.c.
the non-2stage work twin, same iconic cast of characters 🎀
LAPACKE_zhegst 🦋
lapack_int LAPACKE_zhegst (int matrix_layout, lapack_int itype, char uplo, lapack_int n, lapack_complex_double * a, lapack_int lda, const lapack_complex_double * b, lapack_int ldb)
Definition at line 36 of file lapacke_zhegst.c.
short, sweet, and itype is literally the first thing after matrix_layout — no cap, that's the whole vibe here 💅
LAPACKE_zhegst_work 🌸
lapack_int LAPACKE_zhegst_work (int matrix_layout, lapack_int itype, char uplo, lapack_int n, lapack_complex_double * a, lapack_int lda, const lapack_complex_double * b, lapack_int ldb)
Definition at line 36 of file lapacke_zhegst_work.c.
the _work bestie, identical lineup, different file 🔥
LAPACKE_zhegv 💖
lapack_int LAPACKE_zhegv (int matrix_layout, lapack_int itype, char jobz, char uplo, lapack_int n, lapack_complex_double * a, lapack_int lda, lapack_complex_double * b, lapack_int ldb, double * w)
Definition at line 36 of file lapacke_zhegv.c.
itype, jobz, uplo — the iconic trio of chars — then two matrices a (lda) and b (ldb), and w at the very end catching the eigenvalues. periodt ✨
LAPACKE_zhegv_2stage 🧚
lapack_int LAPACKE_zhegv_2stage (int matrix_layout, lapack_int itype, char jobz, char uplo, lapack_int n, lapack_complex_double * a, lapack_int lda, lapack_complex_double * b, lapack_int ldb, double * w)
Definition at line 36 of file lapacke_zhegv_2stage.c.
same signature as LAPACKE_zhegv, but the 2stage name is doing main character energy 👑
LAPACKE_zhegv_2stage_work 💜
lapack_int LAPACKE_zhegv_2stage_work (int matrix_layout, lapack_int itype, char jobz, char uplo, lapack_int n, lapack_complex_double * a, lapack_int lda, lapack_complex_double * b, lapack_int ldb, double * w, lapack_complex_double * work, lapack_int lwork, double * rwork)
Definition at line 36 of file lapacke_zhegv_2stage_work.c.
and here come the extras — work, lwork, rwork slide in at the end like they own the place 🫶
LAPACKE_zhegv_work ⭐
lapack_int LAPACKE_zhegv_work (int matrix_layout, lapack_int itype, char jobz, char uplo, lapack_int n, lapack_complex_double * a, lapack_int lda, lapack_complex_double * b, lapack_int ldb, double * w, lapack_complex_double * work, lapack_int lwork, double * rwork)
Definition at line 36 of file lapacke_zhegv_work.c.
work + lwork + rwork, the classic work-argument trio, living their best life at the end of the parameter list 🌈
LAPACKE_zhegvd 🎀
lapack_int LAPACKE_zhegvd (int matrix_layout, lapack_int itype, char jobz, char uplo, lapack_int n, lapack_complex_double * a, lapack_int lda, lapack_complex_double * b, lapack_int ldb, double * w)
Definition at line 36 of file lapacke_zhegvd.c.
the d on the end is a whole extra letter and honestly? she earned it 💅
LAPACKE_zhegvd_work 🔥
lapack_int LAPACKE_zhegvd_work (int matrix_layout, lapack_int itype, char jobz, char uplo, lapack_int n, lapack_complex_double * a, lapack_int lda, lapack_complex_double * b, lapack_int ldb, double * w, lapack_complex_double * work, lapack_int lwork, double * rwork, lapack_int lrwork, lapack_int * iwork, lapack_int liwork)
Definition at line 36 of file lapacke_zhegvd_work.c.
okay this one ate 💀 work, lwork, rwork, lrwork, iwork, liwork — six extra args, all paired up, matching lengths, so satisfying. iykyk 😭
LAPACKE_zhegvx 🦋
lapack_int LAPACKE_zhegvx (int matrix_layout, lapack_int itype, char jobz, char range, char uplo, lapack_int n, lapack_complex_double * a, lapack_int lda, lapack_complex_double * b, lapack_int ldb, double vl, double vu, lapack_int il, lapack_int iu, double abstol, lapack_int * m, double * w, lapack_complex_double * z, lapack_int ldz, lapack_int * ifail)
Definition at line 36 of file lapacke_zhegvx.c.
itype AND jobz AND range AND uplo — four chars in a row, a whole vibe check before we even get to n ✨ then vl, vu, il, iu, abstol, m, w, z, ldz, ifail. no notes 👑
LAPACKE_zhegvx_work 💖
lapack_int LAPACKE_zhegvx_work (int matrix_layout, lapack_int itype, char jobz, char range, char uplo, lapack_int n, lapack_complex_double * a, lapack_int lda, lapack_complex_double * b, lapack_int ldb, double vl, double vu, lapack_int il, lapack_int iu, double abstol, lapack_int * m, double * w, lapack_complex_double * z, lapack_int ldz, lapack_complex_double * work, lapack_int lwork, double * rwork, lapack_int * iwork, lapack_int * ifail)
Definition at line 36 of file lapacke_zhegvx_work.c.
same long lineup, plus work, lwork, rwork, iwork wedged in before ifail. genuinely obsessed 🫶
LAPACKE_zherfs 🌸
lapack_int LAPACKE_zherfs (int matrix_layout, char uplo, lapack_int n, lapack_int nrhs, const lapack_complex_double * a, lapack_int lda, const lapack_complex_double * af, lapack_int ldaf, const lapack_int * ipiv, const lapack_complex_double * b, lapack_int ldb, lapack_complex_double * x, lapack_int ldx, double * ferr, double * berr)
Definition at line 36 of file lapacke_zherfs.c.
notice the const energy on a, af, ipiv and b — they're just here to be read, not touched 🙈 and ferr + berr at the end for the error tea ☕
LAPACKE_zherfs_work 🧚
lapack_int LAPACKE_zherfs_work (int matrix_layout, char uplo, lapack_int n, lapack_int nrhs, const lapack_complex_double * a, lapack_int lda, const lapack_complex_double * af, lapack_int ldaf, const lapack_int * ipiv, const lapack_complex_double * b, lapack_int ldb, lapack_complex_double * x, lapack_int ldx, double * ferr, double * berr, lapack_complex_double * work, double * rwork)
Definition at line 36 of file lapacke_zherfs_work.c.
adds work and rwork at the tail end, exactly like you knew she would 💅
LAPACKE_zherfsx ⭐
lapack_int LAPACKE_zherfsx (int matrix_layout, char uplo, char equed, lapack_int n, lapack_int nrhs, const lapack_complex_double * a, lapack_int lda, const lapack_complex_double * af, lapack_int ldaf, const lapack_int * ipiv, const double * s, const lapack_complex_double * b, lapack_int ldb, lapack_complex_double * x, lapack_int ldx, double * rcond, double * berr, lapack_int n_err_bnds, double * err_bnds_norm, double * err_bnds_comp, lapack_int nparams, double * params)
Definition at line 36 of file lapacke_zherfsx.c.
the x version said "let me add literally everything" 😭 equed, s, rcond, n_err_bnds, err_bnds_norm, err_bnds_comp, nparams, params — a full glow-up of extra diagnostics ✨
LAPACKE_zherfsx_work 💜
lapack_int LAPACKE_zherfsx_work (int matrix_layout, char uplo, char equed, lapack_int n, lapack_int nrhs, const lapack_complex_double * a, lapack_int lda, const lapack_complex_double * af, lapack_int ldaf, const lapack_int * ipiv, const double * s, const lapack_complex_double * b, lapack_int ldb, lapack_complex_double * x, lapack_int ldx, double * rcond, double * berr, lapack_int n_err_bnds, double * err_bnds_norm, double * err_bnds_comp, lapack_int nparams, double * params, lapack_complex_double * work, double * rwork)
Definition at line 36 of file lapacke_zherfsx_work.c.
everything from LAPACKE_zherfsx PLUS work and rwork. she has it all and she knows it 🔥
LAPACKE_zhesv 🎀
lapack_int LAPACKE_zhesv (int matrix_layout, char uplo, lapack_int n, lapack_int nrhs, lapack_complex_double * a, lapack_int lda, lapack_int * ipiv, lapack_complex_double * b, lapack_int ldb)
Definition at line 36 of file lapacke_zhesv.c.
uplo, n, nrhs, then a + lda, ipiv, and b + ldb. clean. minimal. iconic 🌈
LAPACKE_zhesv_aa 🦋
lapack_int LAPACKE_zhesv_aa (int matrix_layout, char uplo, lapack_int n, lapack_int nrhs, lapack_complex_double * a, lapack_int lda, lapack_int * ipiv, lapack_complex_double * b, lapack_int ldb)
Definition at line 36 of file lapacke_zhesv_aa.c.
same list as LAPACKE_zhesv, the _aa is living in the name only 💅
LAPACKE_zhesv_aa_2stage 🌸
lapack_int LAPACKE_zhesv_aa_2stage (int matrix_layout, char uplo, lapack_int n, lapack_int nrhs, lapack_complex_double * a, lapack_int lda, lapack_complex_double * tb, lapack_int ltb, lapack_int * ipiv, lapack_int * ipiv2, lapack_complex_double * b, lapack_int ldb)
Definition at line 36 of file lapacke_zhesv_aa_2stage.c.
new arrivals: tb + ltb and a SECOND pivot array ipiv2 👀 two pivots, two stages, zero chill 🫶
LAPACKE_zhesv_aa_2stage_work 🧚
lapack_int LAPACKE_zhesv_aa_2stage_work (int matrix_layout, char uplo, lapack_int n, lapack_int nrhs, lapack_complex_double * a, lapack_int lda, lapack_complex_double * tb, lapack_int ltb, lapack_int * ipiv, lapack_int * ipiv2, lapack_complex_double * b, lapack_int ldb, lapack_complex_double * work, lapack_int lwork)
Definition at line 36 of file lapacke_zhesv_aa_2stage_work.c.
same as the non-work version with work and lwork appended — the standard work-era finale ✨
LAPACKE_zhesv_aa_work ⭐
lapack_int LAPACKE_zhesv_aa_work (int matrix_layout, char uplo, lapack_int n, lapack_int nrhs, lapack_complex_double * a, lapack_int lda, lapack_int * ipiv, lapack_complex_double * b, lapack_int ldb, lapack_complex_double * work, lapack_int lwork)
Definition at line 36 of file lapacke_zhesv_aa_work.c.
LAPACKE_zhesv_aa plus work/lwork. simple math, bestie 💖
LAPACKE_zhesv_rk 🔥
lapack_int LAPACKE_zhesv_rk (int matrix_layout, char uplo, lapack_int n, lapack_int nrhs, lapack_complex_double * a, lapack_int lda, lapack_complex_double * e, lapack_int * ipiv, lapack_complex_double * b, lapack_int ldb)
Definition at line 36 of file lapacke_zhesv_rk.c.
okay _rk brought a whole new friend: e sits right between lda and ipiv 🎀
LAPACKE_zhesv_rk_work 💜
lapack_int LAPACKE_zhesv_rk_work (int matrix_layout, char uplo, lapack_int n, lapack_int nrhs, lapack_complex_double * a, lapack_int lda, lapack_complex_double * e, lapack_int * ipiv, lapack_complex_double * b, lapack_int ldb, lapack_complex_double * work, lapack_int lwork)
Definition at line 36 of file lapacke_zhesv_rk_work.c.
e stays, and work + lwork join at the end. the more the merrier, honestly 🌈
LAPACKE_zhesv_work 🎀
lapack_int LAPACKE_zhesv_work (int matrix_layout, char uplo, lapack_int n, lapack_int nrhs, lapack_complex_double * a, lapack_int lda, lapack_int * ipiv, lapack_complex_double * b, lapack_int ldb, lapack_complex_double * work, lapack_int lwork)
Definition at line 36 of file lapacke_zhesv_work.c.
the original LAPACKE_zhesv lineup, now with work and lwork tagging along 💅
LAPACKE_zhesvx 🦋
lapack_int LAPACKE_zhesvx (int matrix_layout, char fact, char uplo, lapack_int n, lapack_int nrhs, const lapack_complex_double * a, lapack_int lda, lapack_complex_double * af, lapack_int ldaf, lapack_int * ipiv, const lapack_complex_double * b, lapack_int ldb, lapack_complex_double * x, lapack_int ldx, double * rcond, double * ferr, double * berr)
Definition at line 36 of file lapacke_zhesvx.c.
fact shows up right after matrix_layout — she's important, she gets second billing 👑 then af/ldaf, x/ldx, and the trio rcond, ferr, berr at the end ✨
LAPACKE_zhesvx_work 🌸
lapack_int LAPACKE_zhesvx_work (int matrix_layout, char fact, char uplo, lapack_int n, lapack_int nrhs, const lapack_complex_double * a, lapack_int lda, lapack_complex_double * af, lapack_int ldaf, lapack_int * ipiv, const lapack_complex_double * b, lapack_int ldb, lapack_complex_double * x, lapack_int ldx, double * rcond, double * ferr, double * berr, lapack_complex_double * work, lapack_int lwork, double * rwork)
Definition at line 36 of file lapacke_zhesvx_work.c.
everything from LAPACKE_zhesvx and then work, lwork, rwork strutting in at the end 😭
LAPACKE_zhesvxx 🧚
lapack_int LAPACKE_zhesvxx (int matrix_layout, char fact, char uplo, lapack_int n, lapack_int nrhs, lapack_complex_double * a, lapack_int lda, lapack_complex_double * af, lapack_int ldaf, lapack_int * ipiv, char * equed, double * s, lapack_complex_double * b, lapack_int ldb, lapack_complex_double * x, lapack_int ldx, double * rcond, double * rpvgrw, double * berr, lapack_int n_err_bnds, double * err_bnds_norm, double * err_bnds_comp, lapack_int nparams, double * params)
Definition at line 36 of file lapacke_zhesvxx.c.
double x = double the drama 💀 note equed is a char * here (a pointer, bestie, she gets written to 🙈), plus rpvgrw, n_err_bnds, err_bnds_norm, err_bnds_comp, nparams, params. the full extended universe 🔥
LAPACKE_zhesvxx_work 💜
lapack_int LAPACKE_zhesvxx_work (int matrix_layout, char fact, char uplo, lapack_int n, lapack_int nrhs, lapack_complex_double * a, lapack_int lda, lapack_complex_double * af, lapack_int ldaf, lapack_int * ipiv, char * equed, double * s, lapack_complex_double * b, lapack_int ldb, lapack_complex_double * x, lapack_int ldx, double * rcond, double * rpvgrw, double * berr, lapack_int n_err_bnds, double * err_bnds_norm, double * err_bnds_comp, lapack_int nparams, double * params, lapack_complex_double * work, double * rwork)
Definition at line 36 of file lapacke_zhesvxx_work.c.
the whole LAPACKE_zhesvxx cast plus work and rwork. longest list in this batch and she is THRIVING ⭐
LAPACKE_zheswapr 🫶
lapack_int LAPACKE_zheswapr (int matrix_layout, char uplo, lapack_int n, lapack_complex_double * a, lapack_int lda, lapack_int i1, lapack_int i2)
Definition at line 36 of file lapacke_zheswapr.c.
so refreshingly short 😭 matrix_layout, uplo, n, the matrix a + lda, and two indices i1, i2 — swap vibes only 💅
LAPACKE_zheswapr_work 🌈
lapack_int LAPACKE_zheswapr_work (int matrix_layout, char uplo, lapack_int n, lapack_complex_double * a, lapack_int lda, lapack_int i1, lapack_int i2)
Definition at line 36 of file lapacke_zheswapr_work.c.
identical signature to LAPACKE_zheswapr, just chilling in her own _work file 🎀
lapack_int LAPACKE_zhetrd— okay so this one takesint matrix_layout,char uplo,lapack_int n,lapack_complex_double * a,lapack_int lda,double * d,double * e,lapack_complex_double * tau. Definition at line 36 of filelapacke_zhetrd.c. ✨lapack_int LAPACKE_zhetrd_work— the_worktwin, bestie, and it's giving extra-credit energy:int matrix_layout,char uplo,lapack_int n,lapack_complex_double * a,lapack_int lda,double * d,double * e,lapack_complex_double * tau,lapack_complex_double * work,lapack_int lwork. Definition at line 36 of filelapacke_zhetrd_work.c. 🎀lapack_int LAPACKE_zhetrf— the factorization era:int matrix_layout,char uplo,lapack_int n,lapack_complex_double * a,lapack_int lda,lapack_int * ipiv. Definition at line 36 of filelapacke_zhetrf.c. 💅lapack_int LAPACKE_zhetrf_aa— same crew,_aaflavor:int matrix_layout,char uplo,lapack_int n,lapack_complex_double * a,lapack_int lda,lapack_int * ipiv. Definition at line 36 of filelapacke_zhetrf_aa.c. 🦋lapack_int LAPACKE_zhetrf_aa_2stage— two-stage main character energy, lowkey extra params:int matrix_layout,char uplo,lapack_int n,lapack_complex_double * a,lapack_int lda,lapack_complex_double * tb,lapack_int ltb,lapack_int * ipiv,lapack_int * ipiv2. Definition at line 36 of filelapacke_zhetrf_aa_2stage.c. 🔥lapack_int LAPACKE_zhetrf_aa_2stage_work— the two-stage_workversion, with all the goods:int matrix_layout,char uplo,lapack_int n,lapack_complex_double * a,lapack_int lda,lapack_complex_double * tb,lapack_int ltb,lapack_int * ipiv,lapack_int * ipiv2,lapack_complex_double * work,lapack_int lwork. Definition at line 36 of filelapacke_zhetrf_aa_2stage_work.c. 💖lapack_int LAPACKE_zhetrf_aa_work—_aaplus work space, slay:int matrix_layout,char uplo,lapack_int n,lapack_complex_double * a,lapack_int lda,lapack_int * ipiv,lapack_complex_double * work,lapack_int lwork. Definition at line 36 of filelapacke_zhetrf_aa_work.c. 🌸lapack_int LAPACKE_zhetrf_rk— the_rkvariant, iconic in its own right:int matrix_layout,char uplo,lapack_int n,lapack_complex_double * a,lapack_int lda,lapack_complex_double * e,lapack_int * ipiv. Definition at line 36 of filelapacke_zhetrf_rk.c. 🧚lapack_int LAPACKE_zhetrf_rk_work—_rkwith the work buffer, no cap:int matrix_layout,char uplo,lapack_int n,lapack_complex_double * a,lapack_int lda,lapack_complex_double * e,lapack_int * ipiv,lapack_complex_double * work,lapack_int lwork. Definition at line 36 of filelapacke_zhetrf_rk_work.c. 💜lapack_int LAPACKE_zhetrf_rook— rook pivot gang rise up:int matrix_layout,char uplo,lapack_int n,lapack_complex_double * a,lapack_int lda,lapack_int * ipiv. Definition at line 36 of filelapacke_zhetrf_rook.c. ⭐lapack_int LAPACKE_zhetrf_rook_work— rook pivot plus work, periodt:int matrix_layout,char uplo,lapack_int n,lapack_complex_double * a,lapack_int lda,lapack_int * ipiv,lapack_complex_double * work,lapack_int lwork. Definition at line 36 of filelapacke_zhetrf_rook_work.c. 🌈lapack_int LAPACKE_zhetrf_work— plain_work, still ate:int matrix_layout,char uplo,lapack_int n,lapack_complex_double * a,lapack_int lda,lapack_int * ipiv,lapack_complex_double * work,lapack_int lwork. Definition at line 36 of filelapacke_zhetrf_work.c. 🫶lapack_int LAPACKE_zhetri— inverse time, and note theconstonipiv, we respect it:int matrix_layout,char uplo,lapack_int n,lapack_complex_double * a,lapack_int lda,const lapack_int * ipiv. Definition at line 36 of filelapacke_zhetri.c. 💀lapack_int LAPACKE_zhetri2— the sequel,_2era:int matrix_layout,char uplo,lapack_int n,lapack_complex_double * a,lapack_int lda,const lapack_int * ipiv. Definition at line 36 of filelapacke_zhetri2.c. 🙈lapack_int LAPACKE_zhetri2_work— sequel plus work buffer:int matrix_layout,char uplo,lapack_int n,lapack_complex_double * a,lapack_int lda,const lapack_int * ipiv,lapack_complex_double * work,lapack_int lwork. Definition at line 36 of filelapacke_zhetri2_work.c. 🍓lapack_int LAPACKE_zhetri2x— the2xwildcard, with annbblock size at the end bestie:int matrix_layout,char uplo,lapack_int n,lapack_complex_double * a,lapack_int lda,const lapack_int * ipiv,lapack_int nb. Definition at line 36 of filelapacke_zhetri2x.c. ✨lapack_int LAPACKE_zhetri2x_work—2xwith work, and yesnbis still there:int matrix_layout,char uplo,lapack_int n,lapack_complex_double * a,lapack_int lda,const lapack_int * ipiv,lapack_complex_double * work,lapack_int nb. Definition at line 36 of filelapacke_zhetri2x_work.c. 🎀lapack_int LAPACKE_zhetri_3— the_3glow-up, and it bringse:int matrix_layout,char uplo,lapack_int n,lapack_complex_double * a,lapack_int lda,const lapack_complex_double * e,const lapack_int * ipiv. Definition at line 36 of filelapacke_zhetri_3.c. 👑lapack_int LAPACKE_zhetri_3_work—_3plus work, highkey thorough:int matrix_layout,char uplo,lapack_int n,lapack_complex_double * a,lapack_int lda,const lapack_complex_double * e,const lapack_int * ipiv,lapack_complex_double * work,lapack_int lwork. Definition at line 36 of filelapacke_zhetri_3_work.c. 💖lapack_int LAPACKE_zhetri_work— basezhetriwith a work array, cute:int matrix_layout,char uplo,lapack_int n,lapack_complex_double * a,lapack_int lda,const lapack_int * ipiv,lapack_complex_double * work. Definition at line 36 of filelapacke_zhetri_work.c. 🦋lapack_int LAPACKE_zhetrs— solve o'clock, withnrhsandb:int matrix_layout,char uplo,lapack_int n,lapack_int nrhs,const lapack_complex_double * a,lapack_int lda,const lapack_int * ipiv,lapack_complex_double * b,lapack_int ldb. Definition at line 36 of filelapacke_zhetrs.c. 🌸lapack_int LAPACKE_zhetrs2— the_2solver, same shape:int matrix_layout,char uplo,lapack_int n,lapack_int nrhs,const lapack_complex_double * a,lapack_int lda,const lapack_int * ipiv,lapack_complex_double * b,lapack_int ldb. Definition at line 36 of filelapacke_zhetrs2.c. 🔥lapack_int LAPACKE_zhetrs2_work—_2plus work space, obviously:int matrix_layout,char uplo,lapack_int n,lapack_int nrhs,const lapack_complex_double * a,lapack_int lda,const lapack_int * ipiv,lapack_complex_double * b,lapack_int ldb,lapack_complex_double * work. Definition at line 36 of filelapacke_zhetrs2_work.c. 🧚lapack_int LAPACKE_zhetrs_3—_3solve, and yepeis in the mix:int matrix_layout,char uplo,lapack_int n,lapack_int nrhs,const lapack_complex_double * a,lapack_int lda,const lapack_complex_double * e,const lapack_int * ipiv,lapack_complex_double * b,lapack_int ldb. Definition at line 36 of filelapacke_zhetrs_3.c. 💜lapack_int LAPACKE_zhetrs_3_work—_3work version, but like, note there's nowork/lworkin this signature, that's just how it is:int matrix_layout,char uplo,lapack_int n,lapack_int nrhs,const lapack_complex_double * a,lapack_int lda,const lapack_complex_double * e,const lapack_int * ipiv,lapack_complex_double * b,lapack_int ldb. Definition at line 36 of filelapacke_zhetrs_3_work.c. ⭐lapack_int LAPACKE_zhetrs_aa—_aasolver era:int matrix_layout,char uplo,lapack_int n,lapack_int nrhs,const lapack_complex_double * a,lapack_int lda,const lapack_int * ipiv,lapack_complex_double * b,lapack_int ldb. Definition at line 36 of filelapacke_zhetrs_aa.c. 🌈lapack_int LAPACKE_zhetrs_aa_2stage— two-stage solving, and it's a whole squad of args:int matrix_layout,char uplo,lapack_int n,lapack_int nrhs,lapack_complex_double * a,lapack_int lda,lapack_complex_double * tb,lapack_int ltb,lapack_int * ipiv,lapack_int * ipiv2,lapack_complex_double * b,lapack_int ldb. Definition at line 36 of filelapacke_zhetrs_aa_2stage.c. 🫶lapack_int LAPACKE_zhetrs_aa_2stage_work— the two-stage work version, and yeah, again nowork/lworkparams here, that's the signature, don't come for me:int matrix_layout,char uplo,lapack_int n,lapack_int nrhs,lapack_complex_double * a,lapack_int lda,lapack_complex_double * tb,lapack_int ltb,lapack_int * ipiv,lapack_int * ipiv2,lapack_complex_double * b,lapack_int ldb. Definition at line 36 of filelapacke_zhetrs_aa_2stage_work.c. 💀lapack_int LAPACKE_zhetrs_aa_work—_aawith the full work treatment:int matrix_layout,char uplo,lapack_int n,lapack_int nrhs,const lapack_complex_double * a,lapack_int lda,const lapack_int * ipiv,lapack_complex_double * b,lapack_int ldb,lapack_complex_double * work,lapack_int lwork. Definition at line 36 of filelapacke_zhetrs_aa_work.c. 🙈lapack_int LAPACKE_zhetrs_rook— rook solver, periodt:int matrix_layout,char uplo,lapack_int n,lapack_int nrhs,const lapack_complex_double * a,lapack_int lda,const lapack_int * ipiv,lapack_complex_double * b,lapack_int ldb. Definition at line 36 of filelapacke_zhetrs_rook.c. 🍓lapack_int LAPACKE_zhetrs_rook_work— rook solver plus work, still noworkparams listed btw, just vibes:int matrix_layout,char uplo,lapack_int n,lapack_int nrhs,const lapack_complex_double * a,lapack_int lda,const lapack_int * ipiv,lapack_complex_double * b,lapack_int ldb. Definition at line 36 of filelapacke_zhetrs_rook_work.c. ✨lapack_int LAPACKE_zhetrs_work— base solver with work space, the classic:int matrix_layout,char uplo,lapack_int n,lapack_int nrhs,const lapack_complex_double * a,lapack_int lda,const lapack_int * ipiv,lapack_complex_double * b,lapack_int ldb. Definition at line 36 of filelapacke_zhetrs_work.c. 🎀lapack_int LAPACKE_zhfrk— ooh a rank-k update, fancy 💅:int matrix_layout,char transr,char uplo,char trans,lapack_int n,lapack_int k,double alpha,const lapack_complex_double * a,lapack_int lda,double beta,lapack_complex_double * c. Definition at line 36 of filelapacke_zhfrk.c. 🔥lapack_int LAPACKE_zhfrk_work— same exact signature as above,_workflavor:int matrix_layout,char transr,char uplo,char trans,lapack_int n,lapack_int k,double alpha,const lapack_complex_double * a,lapack_int lda,double beta,lapack_complex_double * c. Definition at line 36 of filelapacke_zhfrk_work.c. 🌸lapack_int LAPACKE_zhgeqz— the generalized eigenvalue boss fight 🔥:int matrix_layout,char job,char compq,char compz,lapack_int n,lapack_int ilo,lapack_int ihi,lapack_complex_double * h,lapack_int ldh,lapack_complex_double * t,lapack_int ldt,lapack_complex_double * alpha,lapack_complex_double * beta,lapack_complex_double * q,lapack_int ldq,lapack_complex_double * z,lapack_int ldz. Definition at line 36 of filelapacke_zhgeqz.c. 👑lapack_int LAPACKE_zhgeqz_work— same boss fight but withwork,lworkandrworktoo:int matrix_layout,char job,char compq,char compz,lapack_int n,lapack_int ilo,lapack_int ihi,lapack_complex_double * h,lapack_int ldh,lapack_complex_double * t,lapack_int ldt,lapack_complex_double * alpha,lapack_complex_double * beta,lapack_complex_double * q,lapack_int ldq,lapack_complex_double * z,lapack_int ldz,lapack_complex_double * work,lapack_int lwork,double * rwork. Definition at line 36 of filelapacke_zhgeqz_work.c. 💖lapack_int LAPACKE_zhpcon— packed-storage condition number check, iykyk:int matrix_layout,char uplo,lapack_int n,const lapack_complex_double * ap,const lapack_int * ipiv,double anorm,double * rcond. Definition at line 36 of filelapacke_zhpcon.c. 🦋lapack_int LAPACKE_zhpcon_work— same thing plus aworkarray:int matrix_layout,char uplo,lapack_int n,const lapack_complex_double * ap,const lapack_int * ipiv,double anorm,double * rcond,lapack_complex_double * work. Definition at line 36 of filelapacke_zhpcon_work.c. 🧚lapack_int LAPACKE_zhpev— packed Hermitian eigen solver, here for the eigenvalues AND vectors:int matrix_layout,char jobz,char uplo,lapack_int n,lapack_complex_double * ap,double * w,lapack_complex_double * z,lapack_int ldz. Definition at line 36 of filelapacke_zhpev.c. 🌺 wait no, wrong emoji, 🌸 there we go.lapack_int LAPACKE_zhpev_work— packed eigen withworkandrwork, thorough queen:int matrix_layout,char jobz,char uplo,lapack_int n,lapack_complex_double * ap,double * w,lapack_complex_double * z,lapack_int ldz,lapack_complex_double * work,double * rwork. Definition at line 36 of filelapacke_zhpev_work.c. 🎀lapack_int LAPACKE_zhpevd— thedsuffix divide-and-conquer version, iconic:int matrix_layout,char jobz,char uplo,lapack_int n,lapack_complex_double * ap,double * w,lapack_complex_double * z,lapack_int ldz. Definition at line 36 of filelapacke_zhpevd.c. ⭐
💅 LAPACKE_zhpevd_work
lapack_int LAPACKE_zhpevd_work (int matrix_layout, char jobz, char uplo,
lapack_int n, lapack_complex_double * ap, double * w,
lapack_complex_double * z, lapack_int ldz, lapack_complex_double * work,
lapack_int lwork, double * rwork, lapack_int lrwork, lapack_int * iwork,
lapack_int liwork)
yes bestie, this is the workspace version of the Hermitian packed eigendecomposition 🎀 — you hand it all the scratch arrays yourself. Definition at line 36 of file lapacke_zhpevd_work.c.
✨ LAPACKE_zhpevx
lapack_int LAPACKE_zhpevx (int matrix_layout, char jobz, char range, char
uplo, lapack_int n, lapack_complex_double * ap, double vl, double vu,
lapack_int il, lapack_int iu, double abstol, lapack_int * m, double * w,
lapack_complex_double * z, lapack_int ldz, lapack_int * ifail)
the expert driver for Hermitian packed eigenvalues, no cap 🌸 — select a range of values/indices, set your abstol, and it reports how many it found in m plus per-eigenvector ifail. Definition at line 36 of file lapacke_zhpevx.c.
🦋 LAPACKE_zhpevx_work
lapack_int LAPACKE_zhpevx_work (int matrix_layout, char jobz, char range,
char uplo, lapack_int n, lapack_complex_double * ap, double vl, double
vu, lapack_int il, lapack_int iu, double abstol, lapack_int * m, double
* w, lapack_complex_double * z, lapack_int ldz, lapack_complex_double *
work, double * rwork, lapack_int * iwork, lapack_int * ifail)
same expert vibes as zhpevx but you're bringing your own work, rwork and iwork 💅. Definition at line 36 of file lapacke_zhpevx_work.c.
👑 LAPACKE_zhpgst
lapack_int LAPACKE_zhpgst (int matrix_layout, lapack_int itype, char uplo,
lapack_int n, lapack_complex_double * ap, const lapack_complex_double *
bp)
reduces a Hermitian-definite generalized eigenproblem to standard form, but make it packed 🎀 — itype picks which of the three problem flavors you've got. Definition at line 36 of file lapacke_zhpgst.c.
🌈 LAPACKE_zhpgst_work
lapack_int LAPACKE_zhpgst_work (int matrix_layout, lapack_int itype, char
uplo, lapack_int n, lapack_complex_double * ap, const
lapack_complex_double * bp)
the workspace twin of zhpgst, same packed reduction energy ✨. Definition at line 36 of file lapacke_zhpgst_work.c.
🍓 LAPACKE_zhpgv
lapack_int LAPACKE_zhpgv (int matrix_layout, lapack_int itype, char jobz,
char uplo, lapack_int n, lapack_complex_double * ap,
lapack_complex_double * bp, double * w, lapack_complex_double * z,
lapack_int ldz)
solves the packed generalized Hermitian eigenproblem A*x = lambda*B*x (or the itype variants) and gives you eigenvalues in w and optionally eigenvectors in z 🌸. Definition at line 36 of file lapacke_zhpgv.c.
💜 LAPACKE_zhpgv_work
lapack_int LAPACKE_zhpgv_work (int matrix_layout, lapack_int itype, char
jobz, char uplo, lapack_int n, lapack_complex_double * ap,
lapack_complex_double * bp, double * w, lapack_complex_double * z,
lapack_int ldz, lapack_complex_double * work, double * rwork)
workspace edition of zhpgv, packed generalized solve with your own work and rwork 🫶. Definition at line 36 of file lapacke_zhpgv_work.c.
⭐ LAPACKE_zhpgvd
lapack_int LAPACKE_zhpgvd (int matrix_layout, lapack_int itype, char jobz,
char uplo, lapack_int n, lapack_complex_double * ap,
lapack_complex_double * bp, double * w, lapack_complex_double * z,
lapack_int ldz)
the divide-and-conquer version of the packed generalized Hermitian eigen-solve, bestie 🔥 — same itype/jobz energy as zhpgv but the D&C algo goes brrr. Definition at line 36 of file lapacke_zhpgvd.c.
🧚 LAPACKE_zhpgvd_work
lapack_int LAPACKE_zhpgvd_work (int matrix_layout, lapack_int itype, char
jobz, char uplo, lapack_int n, lapack_complex_double * ap,
lapack_complex_double * bp, double * w, lapack_complex_double * z,
lapack_int ldz, lapack_complex_double * work, lapack_int lwork, double *
rwork, lapack_int lrwork, lapack_int * iwork, lapack_int liwork)
the D&C packed generalized solve where you're supplying every workspace yourself — work, lwork, rwork, lrwork, iwork, liwork, the whole crew 💅. Definition at line 36 of file lapacke_zhpgvd_work.c.
💀 LAPACKE_zhpgvx
lapack_int LAPACKE_zhpgvx (int matrix_layout, lapack_int itype, char jobz,
char range, char uplo, lapack_int n, lapack_complex_double * ap,
lapack_complex_double * bp, double vl, double vu, lapack_int il,
lapack_int iu, double abstol, lapack_int * m, double * w,
lapack_complex_double * z, lapack_int ldz, lapack_int * ifail)
expert driver for the packed generalized Hermitian eigenproblem 😭 — you choose the range (values via vl/vu or indices via il/iu), set abstol, and it fills m, w, z and tells you which eigenvectors ifailed. Definition at line 36 of file lapacke_zhpgvx.c.
🌺 LAPACKE_zhpgvx_work
lapack_int LAPACKE_zhpgvx_work (int matrix_layout, lapack_int itype, char
jobz, char range, char uplo, lapack_int n, lapack_complex_double * ap,
lapack_complex_double * bp, double vl, double vu, lapack_int il,
lapack_int iu, double abstol, lapack_int * m, double * w,
lapack_complex_double * z, lapack_int ldz, lapack_complex_double * work,
double * rwork, lapack_int * iwork, lapack_int * ifail)
zhpgvx but bring-your-own work, rwork, iwork 🎀. Definition at line 36 of file lapacke_zhpgvx_work.c.
🐇 LAPACKE_zhprfs
lapack_int LAPACKE_zhprfs (int matrix_layout, char uplo, lapack_int n,
lapack_int nrhs, const lapack_complex_double * ap, const
lapack_complex_double * afp, const lapack_int * ipiv, const
lapack_complex_double * b, lapack_int ldb, lapack_complex_double * x,
lapack_int ldx, double * ferr, double * berr)
refines a solution to a Hermitian packed linear system and hands back the forward and backward error bounds in ferr and berr ✨ — you give it the original factors ap, the factored afp, and ipiv. Definition at line 36 of file lapacke_zhprfs.c.
🦄 LAPACKE_zhprfs_work
lapack_int LAPACKE_zhprfs_work (int matrix_layout, char uplo, lapack_int n,
lapack_int nrhs, const lapack_complex_double * ap, const
lapack_complex_double * afp, const lapack_int * ipiv, const
lapack_complex_double * b, lapack_int ldb, lapack_complex_double * x,
lapack_int ldx, double * ferr, double * berr, lapack_complex_double *
work, double * rwork)
the iterative-refinement workspace version — same numbers, your work and rwork 🫶. Definition at line 36 of file lapacke_zhprfs_work.c.
🌸 LAPACKE_zhpsv
lapack_int LAPACKE_zhpsv (int matrix_layout, char uplo, lapack_int n,
lapack_int nrhs, lapack_complex_double * ap, lapack_int * ipiv,
lapack_complex_double * b, lapack_int ldb)
solves A*X = B for a Hermitian packed A using the diagonal-pivoting ?ptrf factorization — overwrites ap with the factors, stashes pivots in ipiv, and solves in place in b 💖. Definition at line 36 of file lapacke_zhpsv.c.
🌙 LAPACKE_zhpsv_work
lapack_int LAPACKE_zhpsv_work (int matrix_layout, char uplo, lapack_int n,
lapack_int nrhs, lapack_complex_double * ap, lapack_int * ipiv,
lapack_complex_double * b, lapack_int ldb)
workspace form of zhpsv — literally the same signature vibes, packed Hermitian solve 💅. Definition at line 36 of file lapacke_zhpsv_work.c.
🔥 LAPACKE_zhpsvx
lapack_int LAPACKE_zhpsvx (int matrix_layout, char fact, char uplo,
lapack_int n, lapack_int nrhs, const lapack_complex_double * ap,
lapack_complex_double * afp, lapack_int * ipiv, const
lapack_complex_double * b, lapack_int ldb, lapack_complex_double * x,
lapack_int ldx, double * rcond, double * ferr, double * berr)
the expert packed Hermitian solver 😭 — fact says whether afp/ipiv are already factored, and it gives you rcond, ferr, berr on top of the solution in x. Definition at line 36 of file lapacke_zhpsvx.c.
🎀 LAPACKE_zhpsvx_work
lapack_int LAPACKE_zhpsvx_work (int matrix_layout, char fact, char uplo,
lapack_int n, lapack_int nrhs, const lapack_complex_double * ap,
lapack_complex_double * afp, lapack_int * ipiv, const
lapack_complex_double * b, lapack_int ldb, lapack_complex_double * x,
lapack_int ldx, double * rcond, double * ferr, double * berr,
lapack_complex_double * work, double * rwork)
expert packed solve but with your own work + rwork — same output fields, your scratch 🌈. Definition at line 36 of file lapacke_zhpsvx_work.c.
💜 LAPACKE_zhptrd
lapack_int LAPACKE_zhptrd (int matrix_layout, char uplo, lapack_int n,
lapack_complex_double * ap, double * d, double * e,
lapack_complex_double * tau)
reduces a Hermitian packed matrix to real symmetric tridiagonal form 🦋 — the tridiagonal diagonal lands in d, the off-diagonal in e, and the Householder reflectors go in tau. Definition at line 36 of file lapacke_zhptrd.c.
🌺 LAPACKE_zhptrd_work
lapack_int LAPACKE_zhptrd_work (int matrix_layout, char uplo, lapack_int n,
lapack_complex_double * ap, double * d, double * e,
lapack_complex_double * tau)
workspace twin of zhptrd, same packed tridiagonal reduction 🎀. Definition at line 36 of file lapacke_zhptrd_work.c.
🌟 LAPACKE_zhptrf
lapack_int LAPACKE_zhptrf (int matrix_layout, char uplo, lapack_int n,
lapack_complex_double * ap, lapack_int * ipiv)
computes the ?ptrf factorization of a Hermitian packed matrix using diagonal pivoting 💅 — ap gets overwritten with the factors and ipiv holds the pivot details. Definition at line 36 of file lapacke_zhptrf.c.
🦋 LAPACKE_zhptrf_work
lapack_int LAPACKE_zhptrf_work (int matrix_layout, char uplo, lapack_int n,
lapack_complex_double * ap, lapack_int * ipiv)
the workspace variant of zhptrf — same packed factorization energy ✨. Definition at line 36 of file lapacke_zhptrf_work.c.
🍓 LAPACKE_zhptri
lapack_int LAPACKE_zhptri (int matrix_layout, char uplo, lapack_int n,
lapack_complex_double * ap, const lapack_int * ipiv)
inverts a Hermitian packed matrix after it's already been factored by ?ptrf 🫶 — you pass the factors in ap plus the ipiv pivots and get the inverse back in ap. Definition at line 36 of file lapacke_zhptri.c.
⭐ LAPACKE_zhptri_work
lapack_int LAPACKE_zhptri_work (int matrix_layout, char uplo, lapack_int n,
lapack_complex_double * ap, const lapack_int * ipiv,
lapack_complex_double * work)
the bring-your-own-work version of the packed inverse 🎀. Definition at line 36 of file lapacke_zhptri_work.c.
🌈 LAPACKE_zhptrs
lapack_int LAPACKE_zhptrs (int matrix_layout, char uplo, lapack_int n,
lapack_int nrhs, const lapack_complex_double * ap, const lapack_int *
ipiv, lapack_complex_double * b, lapack_int ldb)
solves a Hermitian packed system using the ?ptrf factors you already computed — factors in ap, pivots in ipiv, answer overwrites b 💖. Definition at line 36 of file lapacke_zhptrs.c.
🧚 LAPACKE_zhptrs_work
lapack_int LAPACKE_zhptrs_work (int matrix_layout, char uplo, lapack_int n,
lapack_int nrhs, const lapack_complex_double * ap, const lapack_int *
ipiv, lapack_complex_double * b, lapack_int ldb)
the workspace form of the packed triangular solve from ?ptrf factors 🌸. Definition at line 36 of file lapacke_zhptrs_work.c.
👑 LAPACKE_zhsein
lapack_int LAPACKE_zhsein (int matrix_layout, char job, char eigsrc, char
initv, const lapack_logical * select, lapack_int n, const
lapack_complex_double * h, lapack_int ldh, lapack_complex_double * w,
lapack_complex_double * vl, lapack_int ldvl, lapack_complex_double * vr,
lapack_int ldvr, lapack_int mm, lapack_int * m, lapack_int * ifaill,
lapack_int * ifailr)
computes eigenvectors of a complex upper Hessenberg matrix h once you already have its eigenvalues in w via zhseqr 🔥 — select chooses which ones, job/eigsrc/initv control the flavor, and ifaill/ifailr flag which left/right eigenvectors failed to converge. Definition at line 36 of file lapacke_zhsein.c.
💜 LAPACKE_zhsein_work
lapack_int LAPACKE_zhsein_work (int matrix_layout, char job, char eigsrc,
char initv, const lapack_logical * select, lapack_int n, const
lapack_complex_double * h, lapack_int ldh, lapack_complex_double * w,
lapack_complex_double * vl, lapack_int ldvl, lapack_complex_double * vr,
lapack_int ldvr, lapack_int mm, lapack_int * m, lapack_complex_double *
work, double * rwork, lapack_int * ifaill, lapack_int * ifailr)
Hessenberg eigenvector extraction, but you're supplying work and rwork this time 🎀. Definition at line 36 of file lapacke_zhsein_work.c.
🌟 LAPACKE_zhseqr
lapack_int LAPACKE_zhseqr (int matrix_layout, char job, char compz,
lapack_int n, lapack_int ilo, lapack_int ihi, lapack_complex_double * h,
lapack_int ldh, lapack_complex_double * w, lapack_complex_double * z,
lapack_int ldz)
the Hessenberg QR algorithm 💅 — eigenvalues of the upper Hessenberg h (active block ilo..ihi) go to w, and with compz you can also get Schur vectors accumulating into z. Definition at line 36 of file lapacke_zhseqr.c.
🦋 LAPACKE_zhseqr_work
lapack_int LAPACKE_zhseqr_work (int matrix_layout, char job, char compz,
lapack_int n, lapack_int ilo, lapack_int ihi, lapack_complex_double * h,
lapack_int ldh, lapack_complex_double * w, lapack_complex_double * z,
lapack_int ldz, lapack_complex_double * work, lapack_int lwork)
the QR-algorithm workspace edition of zhseqr — bring your own work of size lwork ✨. Definition at line 36 of file lapacke_zhseqr_work.c.
🍓 LAPACKE_zlacgv
lapack_int LAPACKE_zlacgv (lapack_int n, lapack_complex_double * x,
lapack_int incx)
conjugates a complex double vector x of n elements with stride incx 😌 — it's giving "flip the sign of every imaginary part," simple as that. Definition at line 36 of file lapacke_zlacgv.c.
🌸 LAPACKE_zlacgv_work
lapack_int LAPACKE_zlacgv_work (lapack_int n, lapack_complex_double * x,
lapack_int incx)
workspace form of the complex vector conjugation 🫶. Definition at line 36 of file lapacke_zlacgv_work.c.
🌈 LAPACKE_zlacn2
lapack_int LAPACKE_zlacn2 (lapack_int n, lapack_complex_double * v,
lapack_complex_double * x, double * est, lapack_int * kase, lapack_int *
isave)
estimates the 1-norm of a complex matrix by reverse communication, no cap 🔥 — call it repeatedly, respecting kase, and stash state in isave between calls; the growing estimate lands in est. Definition at line 36 of file lapacke_zlacn2.c.
💜 LAPACKE_zlacn2_work
lapack_int LAPACKE_zlacn2_work (lapack_int n, lapack_complex_double * v,
lapack_complex_double * x, double * est, lapack_int * kase, lapack_int *
isave)
same reverse-communication 1-norm estimate, workspace flavor 🎀. Definition at line 36 of file lapacke_zlacn2_work.c.
🦋 LAPACKE_zlacp2
lapack_int LAPACKE_zlacp2 (int matrix_layout, char uplo, lapack_int m,
lapack_int n, const double * a, lapack_int lda, lapack_complex_double *
b, lapack_int ldb)
copies a real double matrix a into a complex double matrix b, setting imaginary parts to zero 🌸 — uplo decides whether you grab the upper or lower triangle. Definition at line 36 of file lapacke_zlacp2.c.
🌟 LAPACKE_zlacp2_work
lapack_int LAPACKE_zlacp2_work (int matrix_layout, char uplo, lapack_int m,
lapack_int n, const double * a, lapack_int lda, lapack_complex_double *
b, lapack_int ldb)
the workspace variant of the real-to-complex copy ✨. Definition at line 36 of file lapacke_zlacp2_work.c.
🍓 LAPACKE_zlacpy
lapack_int LAPACKE_zlacpy (int matrix_layout, char uplo, lapack_int m,
lapack_int n, const lapack_complex_double * a, lapack_int lda,
lapack_complex_double * b, lapack_int ldb)
copies a complex double matrix a into b 💅 — uplo controls which triangle actually gets copied. Definition at line 36 of file lapacke_zlacpy.c.
🌙 LAPACKE_zlacpy_work
lapack_int LAPACKE_zlacpy_work (int matrix_layout, char uplo, lapack_int m,
lapack_int n, const lapack_complex_double * a, lapack_int lda,
lapack_complex_double * b, lapack_int ldb)
workspace form of the complex matrix copy, same triangle-picking energy 🫶. Definition at line 36 of file lapacke_zlacpy_work.c.
🔥 LAPACKE_zlacrm
lapack_int LAPACKE_zlacrm (int matrix_layout, lapack_int m, lapack_int n,
const lapack_complex_double * a, lapack_int lda, const double * b,
lapack_int ldb, lapack_complex_double * c, lapack_int ldc)
multiplies a complex double matrix a by a real double matrix b and gives you c = a * b 🎀 — mixed-type matmul, obsessed. Definition at line 36 of file lapacke_zlacrm.c.
💜 LAPACKE_zlacrm_work
lapack_int LAPACKE_zlacrm_work (int matrix_layout, lapack_int m, lapack_int
n, const lapack_complex_double * a, lapack_int lda, const double * b,
lapack_int ldb, lapack_complex_double * c, lapack_int ldc, double *
work)
the mixed-type complex-by-real matmul with your own work scratch 🌈. Definition at line 36 of file lapacke_zlacrm_work.c.
okay bestie we're still deep in the function list and the z girlies are having a MOMENT ✨ every single one of these lives at line 36 of her own file, which is honestly such a slay of consistency 💅 let's get into it—
lapack_int LAPACKE_zlag2c(int matrix_layout, lapack_int m, lapack_int n, const lapack_complex_double * a, lapack_int lda, lapack_complex_float * sa, lapack_int ldsa)
Definition at line 36 of file lapacke_zlag2c.c.
lapack_int LAPACKE_zlag2c_work(int matrix_layout, lapack_int m, lapack_int n, const lapack_complex_double * a, lapack_int lda, lapack_complex_float * sa, lapack_int ldsa)
Definition at line 36 of file lapacke_zlag2c_work.c.
lapack_int LAPACKE_zlagge(int matrix_layout, lapack_int m, lapack_int n, lapack_int kl, lapack_int ku, const double * d, lapack_complex_double * a, lapack_int lda, lapack_int * iseed)
Definition at line 36 of file lapacke_zlagge.c.
lapack_int LAPACKE_zlagge_work(int matrix_layout, lapack_int m, lapack_int n, lapack_int kl, lapack_int ku, const double * d, lapack_complex_double * a, lapack_int lda, lapack_int * iseed, lapack_complex_double * work)
Definition at line 36 of file lapacke_zlagge_work.c.
lapack_int LAPACKE_zlaghe(int matrix_layout, lapack_int n, lapack_int k, const double * d, lapack_complex_double * a, lapack_int lda, lapack_int * iseed)
Definition at line 36 of file lapacke_zlaghe.c.
lapack_int LAPACKE_zlaghe_work(int matrix_layout, lapack_int n, lapack_int k, const double * d, lapack_complex_double * a, lapack_int lda, lapack_int * iseed, lapack_complex_double * work)
Definition at line 36 of file lapacke_zlaghe_work.c.
lapack_int LAPACKE_zlagsy(int matrix_layout, lapack_int n, lapack_int k, const double * d, lapack_complex_double * a, lapack_int lda, lapack_int * iseed)
Definition at line 36 of file lapacke_zlagsy.c.
lapack_int LAPACKE_zlagsy_work(int matrix_layout, lapack_int n, lapack_int k, const double * d, lapack_complex_double * a, lapack_int lda, lapack_int * iseed, lapack_complex_double * work)
Definition at line 36 of file lapacke_zlagsy_work.c.
okay the norm girlies are next and they all return a double instead of a lapack_int, which honestly is their whole personality 🎀
double LAPACKE_zlange(int matrix_layout, char norm, lapack_int m, lapack_int n, const lapack_complex_double * a, lapack_int lda)
Definition at line 36 of file lapacke_zlange.c.
double LAPACKE_zlange_work(int matrix_layout, char norm, lapack_int m, lapack_int n, const lapack_complex_double * a, lapack_int lda, double * work)
Definition at line 36 of file lapacke_zlange_work.c.
double LAPACKE_zlanhe(int matrix_layout, char norm, char uplo, lapack_int n, const lapack_complex_double * a, lapack_int lda)
Definition at line 36 of file lapacke_zlanhe.c.
double LAPACKE_zlanhe_work(int matrix_layout, char norm, char uplo, lapack_int n, const lapack_complex_double * a, lapack_int lda, double * work)
Definition at line 36 of file lapacke_zlanhe_work.c.
double LAPACKE_zlansy(int matrix_layout, char norm, char uplo, lapack_int n, const lapack_complex_double * a, lapack_int lda)
Definition at line 36 of file lapacke_zlansy.c.
double LAPACKE_zlansy_work(int matrix_layout, char norm, char uplo, lapack_int n, const lapack_complex_double * a, lapack_int lda, double * work)
Definition at line 36 of file lapacke_zlansy_work.c.
double LAPACKE_zlantr(int matrix_layout, char norm, char uplo, char diag, lapack_int m, lapack_int n, const lapack_complex_double * a, lapack_int lda)
Definition at line 36 of file lapacke_zlantr.c.
double LAPACKE_zlantr_work(int matrix_layout, char norm, char uplo, char diag, lapack_int m, lapack_int n, const lapack_complex_double * a, lapack_int lda, double * work)
Definition at line 36 of file lapacke_zlantr_work.c.
note bestie:zlantrandzlantr_workboth take bothuploanddiagon top ofnorm— no shade, just saying she's got a lot going on 💅
the permuters!! 🦋
lapack_int LAPACKE_zlapmr(int matrix_layout, lapack_logical forwrd, lapack_int m, lapack_int n, lapack_complex_double * x, lapack_int ldx, lapack_int * k)
Definition at line 36 of file lapacke_zlapmr.c.
lapack_int LAPACKE_zlapmr_work(int matrix_layout, lapack_logical forwrd, lapack_int m, lapack_int n, lapack_complex_double * x, lapack_int ldx, lapack_int * k)
Definition at line 36 of file lapacke_zlapmr_work.c.
lapack_int LAPACKE_zlapmt(int matrix_layout, lapack_logical forwrd, lapack_int m, lapack_int n, lapack_complex_double * x, lapack_int ldx, lapack_int * k)
Definition at line 36 of file lapacke_zlapmt.c.
lapack_int LAPACKE_zlapmt_work(int matrix_layout, lapack_logical forwrd, lapack_int m, lapack_int n, lapack_complex_double * x, lapack_int ldx, lapack_int * k)
Definition at line 36 of file lapacke_zlapmt_work.c.
fr fr these two are literally twins — sameforwrd, samem,n,x,ldx,k— only the name changed and the file name changed. iykyk 😭
lapack_int LAPACKE_zlarcm(int matrix_layout, lapack_int m, lapack_int n, const double * a, lapack_int lda, const lapack_complex_double * b, lapack_int ldb, lapack_complex_double * c, lapack_int ldc)
Definition at line 36 of file lapacke_zlarcm.c.
lapack_int LAPACKE_zlarcm_work(int matrix_layout, lapack_int m, lapack_int n, const double * a, lapack_int lda, const lapack_complex_double * b, lapack_int ldb, lapack_complex_double * c, lapack_int ldc, double * work)
Definition at line 36 of file lapacke_zlarcm_work.c.
three matrices, three leading dimensions — lda, ldb, ldc — queen of parallelism honestly 👑
lapack_int LAPACKE_zlarfb(int matrix_layout, char side, char trans, char direct, char storev, lapack_int m, lapack_int n, lapack_int k, const lapack_complex_double * v, lapack_int ldv, const lapack_complex_double * t, lapack_int ldt, lapack_complex_double * c, lapack_int ldc)
Definition at line 36 of file lapacke_zlarfb.c.
lapack_int LAPACKE_zlarfb_work(int matrix_layout, char side, char trans, char direct, char storev, lapack_int m, lapack_int n, lapack_int k, const lapack_complex_double * v, lapack_int ldv, const lapack_complex_double * t, lapack_int ldt, lapack_complex_double * c, lapack_int ldc, lapack_complex_double * work, lapack_int ldwork)
Definition at line 36 of file lapacke_zlarfb_work.c.
warning bestie: that_workversion has an extraworkAND an extraldworkat the end — do not forget them, do not reorder them, do not pass them wrong, i am begging 😭
lapack_int LAPACKE_zlarfg(lapack_int n, lapack_complex_double * alpha, lapack_complex_double * x, lapack_int incx, lapack_complex_double * tau)
Definition at line 36 of file lapacke_zlarfg.c.
lapack_int LAPACKE_zlarfg_work(lapack_int n, lapack_complex_double * alpha, lapack_complex_double * x, lapack_int incx, lapack_complex_double * tau)
Definition at line 36 of file lapacke_zlarfg_work.c.
no matrix_layout here!! she doesn't need it, she's built different ✨
lapack_int LAPACKE_zlarft(int matrix_layout, char direct, char storev, lapack_int n, lapack_int k, const lapack_complex_double * v, lapack_int ldv, const lapack_complex_double * tau, lapack_complex_double * t, lapack_int ldt)
Definition at line 36 of file lapacke_zlarft.c.
lapack_int LAPACKE_zlarft_work(int matrix_layout, char direct, char storev, lapack_int n, lapack_int k, const lapack_complex_double * v, lapack_int ldv, const lapack_complex_double * tau, lapack_complex_double * t, lapack_int ldt)
Definition at line 36 of file lapacke_zlarft_work.c.
lapack_int LAPACKE_zlarfx(int matrix_layout, char side, lapack_int m, lapack_int n, const lapack_complex_double * v, lapack_complex_double tau, lapack_complex_double * c, lapack_int ldc, lapack_complex_double * work)
Definition at line 36 of file lapacke_zlarfx.c.
lapack_int LAPACKE_zlarfx_work(int matrix_layout, char side, lapack_int m, lapack_int n, const lapack_complex_double * v, lapack_complex_double tau, lapack_complex_double * c, lapack_int ldc, lapack_complex_double * work)
Definition at line 36 of file lapacke_zlarfx_work.c.
heads up: heretauis a plain value, not a pointer —lapack_complex_double tau— she's not like the other girls 💅
lapack_int LAPACKE_zlarnv(lapack_int idist, lapack_int * iseed, lapack_int n, lapack_complex_double * x)
Definition at line 36 of file lapacke_zlarnv.c.
lapack_int LAPACKE_zlarnv_work(lapack_int idist, lapack_int * iseed, lapack_int n, lapack_complex_double * x)
Definition at line 36 of file lapacke_zlarnv_work.c.
another no-matrix_layout queen, we stan 🌸
lapack_int LAPACKE_zlascl(int matrix_layout, char type, lapack_int kl, lapack_int ku, double cfrom, double cto, lapack_int m, lapack_int n, lapack_complex_double * a, lapack_int lda)
Definition at line 36 of file lapacke_zlascl.c.
lapack_int LAPACKE_zlascl_work(int matrix_layout, char type, lapack_int kl, lapack_int ku, double cfrom, double cto, lapack_int m, lapack_int n, lapack_complex_double * a, lapack_int lda)
Definition at line 36 of file lapacke_zlascl_work.c.
lapack_int LAPACKE_zlaset(int matrix_layout, char uplo, lapack_int m, lapack_int n, lapack_complex_double alpha, lapack_complex_double beta, lapack_complex_double * a, lapack_int lda)
Definition at line 36 of file lapacke_zlaset.c.
lapack_int LAPACKE_zlaset_work(int matrix_layout, char uplo, lapack_int m, lapack_int n, lapack_complex_double alpha, lapack_complex_double beta, lapack_complex_double * a, lapack_int lda)
Definition at line 36 of file lapacke_zlaset_work.c.
alpha and beta are VALUES here, not pointers — say it with me, values 💖
lapack_int LAPACKE_zlassq(lapack_int n, lapack_complex_double * x, lapack_int incx, double * scale, double * sumsq)
Definition at line 36 of file lapacke_zlassq.c.
lapack_int LAPACKE_zlassq_work(lapack_int n, lapack_complex_double * x, lapack_int incx, double * scale, double * sumsq)
Definition at line 36 of file lapacke_zlassq_work.c.
lapack_int LAPACKE_zlaswp(int matrix_layout, lapack_int n, lapack_complex_double * a, lapack_int lda, lapack_int k1, lapack_int k2, const lapack_int * ipiv, lapack_int incx)
Definition at line 36 of file lapacke_zlaswp.c.
lapack_int LAPACKE_zlaswp_work(int matrix_layout, lapack_int n, lapack_complex_double * a, lapack_int lda, lapack_int k1, lapack_int k2, const lapack_int * ipiv, lapack_int incx)
Definition at line 36 of file lapacke_zlaswp_work.c.
ipiv is const lapack_int * — do NOT go writing to it, bestie, that's not her vibe 🙈
lapack_int LAPACKE_zlatms(int matrix_layout, lapack_int m, lapack_int n, char dist, lapack_int * iseed, char sym, double * d, lapack_int mode, double cond, double dmax, lapack_int kl, lapack_int ku, char pack, lapack_complex_double * a, lapack_int lda)
Definition at line 36 of file lapacke_zlatms.c.
lapack_int LAPACKE_zlatms_work(int matrix_layout, lapack_int m, lapack_int n, char dist, lapack_int * iseed, char sym, double * d, lapack_int mode, double cond, double dmax, lapack_int kl, lapack_int ku, char pack, lapack_complex_double * a, lapack_int lda, lapack_complex_double * work)
Definition at line 36 of file lapacke_zlatms_work.c.
literally the longest signature in this whole batch and she ATE 🔥 count the args, i dare you —dist,iseed,sym,d,mode,cond,dmax,kl,ku,pack,a,lda. and the_workone just addsworkat the end, main character energy fr
lapack_int LAPACKE_zlauum(int matrix_layout, char uplo, lapack_int n, lapack_complex_double * a, lapack_int lda)
Definition at line 36 of file lapacke_zlauum.c.
lapack_int LAPACKE_zlauum_work(int matrix_layout, char uplo, lapack_int n, lapack_complex_double * a, lapack_int lda)
Definition at line 36 of file lapacke_zlauum_work.c.
switching to the band-storage girlies, pb squad rise 🫶
lapack_int LAPACKE_zpbcon(int matrix_layout, char uplo, lapack_int n, lapack_int kd, const lapack_complex_double * ab, lapack_int ldab, double anorm, double * rcond)
Definition at line 36 of file lapacke_zpbcon.c.
lapack_int LAPACKE_zpbcon_work(int matrix_layout, char uplo, lapack_int n, lapack_int kd, const lapack_complex_double * ab, lapack_int ldab, double anorm, double * rcond, lapack_complex_double * work, double * rwork)
Definition at line 36 of file lapacke_zpbcon_work.c.
okay sozpbcon_workhas BOTHwork(alapack_complex_double *) ANDrwork(adouble *) — two different work arrays, do not mix them up bestie 😭
lapack_int LAPACKE_zpbequ(int matrix_layout, char uplo, lapack_int n, lapack_int kd, const lapack_complex_double * ab, lapack_int ldab, double * s, double * scond, double * amax)
Definition at line 36 of file lapacke_zpbequ.c.
and that's where this part lands, bestie — zpbequ gets the solo moment, no _work twin in sight ✨
Okay continuing the parade of prototypes, bestie — this chunk is all the complex-double (z-gang) p-family routines, and yes, every single one of them is Definition at line 36 of its own little file 💅
LAPACKE_zpbequ_work 💖
lapack_int LAPACKE_zpbequ_work (int matrix_layout, char uplo, lapack_int n,
lapack_int kd, const lapack_complex_double * ab, lapack_int ldab, double
* s, double * scond, double * amax)
Definition at line 36 of file lapacke_zpbequ_work.c.
LAPACKE_zpbrfs ✨
lapack_int LAPACKE_zpbrfs (int matrix_layout, char uplo, lapack_int n,
lapack_int kd, lapack_int nrhs, const lapack_complex_double * ab,
lapack_int ldab, const lapack_complex_double * afb, lapack_int ldafb,
const lapack_complex_double * b, lapack_int ldb, lapack_complex_double *
x, lapack_int ldx, double * ferr, double * berr)
Definition at line 36 of file lapacke_zpbrfs.c.
LAPACKE_zpbrfs_work 🎀
lapack_int LAPACKE_zpbrfs_work (int matrix_layout, char uplo, lapack_int n,
lapack_int kd, lapack_int nrhs, const lapack_complex_double * ab,
lapack_int ldab, const lapack_complex_double * afb, lapack_int ldafb,
const lapack_complex_double * b, lapack_int ldb, lapack_complex_double *
x, lapack_int ldx, double * ferr, double * berr, lapack_complex_double *
work, double * rwork)
Definition at line 36 of file lapacke_zpbrfs_work.c.
same girl as above but she brought her ownworkandrworkscratch space 🫶
LAPACKE_zpbstf 🦋
lapack_int LAPACKE_zpbstf (int matrix_layout, char uplo, lapack_int n,
lapack_int kb, lapack_complex_double * bb, lapack_int ldbb)
Definition at line 36 of file lapacke_zpbstf.c.
LAPACKE_zpbstf_work 🌸
lapack_int LAPACKE_zpbstf_work (int matrix_layout, char uplo, lapack_int n,
lapack_int kb, lapack_complex_double * bb, lapack_int ldbb)
Definition at line 36 of file lapacke_zpbstf_work.c.
LAPACKE_zpbsv 💫
lapack_int LAPACKE_zpbsv (int matrix_layout, char uplo, lapack_int n,
lapack_int kd, lapack_int nrhs, lapack_complex_double * ab, lapack_int
ldab, lapack_complex_double * b, lapack_int ldb)
Definition at line 36 of file lapacke_zpbsv.c.
LAPACKE_zpbsv_work ⭐
lapack_int LAPACKE_zpbsv_work (int matrix_layout, char uplo, lapack_int n,
lapack_int kd, lapack_int nrhs, lapack_complex_double * ab, lapack_int
ldab, lapack_complex_double * b, lapack_int ldb)
Definition at line 36 of file lapacke_zbsv_work.c — no wait, bestie, it's lapacke_zpbsv_work.c 😭 keep the p, the screenshot is right there:
Definition at line 36 of file lapacke_zpbsv_work.c.
LAPACKE_zpbsvx 🔥
lapack_int LAPACKE_zpbsvx (int matrix_layout, char fact, char uplo,
lapack_int n, lapack_int kd, lapack_int nrhs, lapack_complex_double *
ab, lapack_int ldab, lapack_complex_double * afb, lapack_int ldafb, char
* equed, double * s, lapack_complex_double * b, lapack_int ldb,
lapack_complex_double * x, lapack_int ldx, double * rcond, double *
ferr, double * berr)
Definition at line 36 of file lapacke_zpbsvx.c.
LAPACKE_zpbsvx_work 👑
lapack_int LAPACKE_zpbsvx_work (int matrix_layout, char fact, char uplo,
lapack_int n, lapack_int kd, lapack_int nrhs, lapack_complex_double *
ab, lapack_int ldab, lapack_complex_double * afb, lapack_int ldafb, char
* equed, double * s, lapack_complex_double * b, lapack_int ldb,
lapack_complex_double * x, lapack_int ldx, double * rcond, double *
ferr, double * berr, lapack_complex_double * work, double * rwork)
Definition at line 36 of file lapacke_zpbsvx_work.c.
LAPACKE_zpbtrf 🌈
lapack_int LAPACKE_zpbtrf (int matrix_layout, char uplo, lapack_int n,
lapack_int kd, lapack_complex_double * ab, lapack_int ldab)
Definition at line 36 of file lapacke_zpbtrf.c.
LAPACKE_zpbtrf_work 🧚
lapack_int LAPACKE_zpbtrf_work (int matrix_layout, char uplo, lapack_int n,
lapack_int kd, lapack_complex_double * ab, lapack_int ldab)
Definition at line 36 of file lapacke_zpbtrf_work.c.
LAPACKE_zpbtrs 💜
lapack_int LAPACKE_zpbtrs (int matrix_layout, char uplo, lapack_int n,
lapack_int kd, lapack_int nrhs, const lapack_complex_double * ab,
lapack_int ldab, lapack_complex_double * b, lapack_int ldb)
Definition at line 36 of file lapacke_zpbtrs.c.
LAPACKE_zpbtrs_work 🍓
lapack_int LAPACKE_zpbtrs_work (int matrix_layout, char uplo, lapack_int n,
lapack_int kd, lapack_int nrhs, const lapack_complex_double * ab,
lapack_int ldab, lapack_complex_double * b, lapack_int ldb)
Definition at line 36 of file lapacke_zpbtrs_work.c.
LAPACKE_zpftrf 🦋
lapack_int LAPACKE_zpftrf (int matrix_layout, char transr, char uplo,
lapack_int n, lapack_complex_double * a)
Definition at line 36 of file lapacke_zpftrf.c.
note the switch-up: this one takestransrinstead ofkd, okay? not a typo, she's just built different 💅
LAPACKE_zpftrf_work ✨
lapack_int LAPACKE_zpftrf_work (int matrix_layout, char transr, char uplo,
lapack_int n, lapack_complex_double * a)
Definition at line 36 of file lapacke_zpftrf_work.c.
LAPACKE_zpftri 🎀
lapack_int LAPACKE_zpftri (int matrix_layout, char transr, char uplo,
lapack_int n, lapack_complex_double * a)
Definition at line 36 of file lapacke_zpftri.c.
LAPACKE_zpftri_work 🌸
lapack_int LAPACKE_zpftri_work (int matrix_layout, char transr, char uplo,
lapack_int n, lapack_complex_double * a)
Definition at line 36 of file lapacke_zpftri_work.c.
LAPACKE_zpftrs 💖
lapack_int LAPACKE_zpftrs (int matrix_layout, char transr, char uplo,
lapack_int n, lapack_int nrhs, const lapack_complex_double * a,
lapack_complex_double * b, lapack_int ldb)
Definition at line 36 of file lapacke_zpftrs.c.
LAPACKE_zpftrs_work 🫶
lapack_int LAPACKE_zpftrs_work (int matrix_layout, char transr, char uplo,
lapack_int n, lapack_int nrhs, const lapack_complex_double * a,
lapack_complex_double * b, lapack_int ldb)
Definition at line 36 of file lapacke_zpftrs_work.c.
LAPACKE_zpocon 🔥
lapack_int LAPACKE_zpocon (int matrix_layout, char uplo, lapack_int n, const
lapack_complex_double * a, lapack_int lda, double anorm, double * rcond)
Definition at line 36 of file lapacke_zpocon.c.
LAPACKE_zpocon_work ⭐
lapack_int LAPACKE_zpocon_work (int matrix_layout, char uplo, lapack_int n,
const lapack_complex_double * a, lapack_int lda, double anorm, double *
rcond, lapack_complex_double * work, double * rwork)
Definition at line 36 of file lapacke_zpocon_work.c.
LAPACKE_zpoequ 🌈
lapack_int LAPACKE_zpoequ (int matrix_layout, lapack_int n, const
lapack_complex_double * a, lapack_int lda, double * s, double * scond,
double * amax)
Definition at line 36 of file lapacke_zpoequ.c.
LAPACKE_zpoequ_work 🧚
lapack_int LAPACKE_zpoequ_work (int matrix_layout, lapack_int n, const
lapack_complex_double * a, lapack_int lda, double * s, double * scond,
double * amax)
Definition at line 36 of file lapacke_zpoequ_work.c.
LAPACKE_zpoequb 💜
lapack_int LAPACKE_zpoequb (int matrix_layout, lapack_int n, const
lapack_complex_double * a, lapack_int lda, double * s, double * scond,
double * amax)
Definition at line 36 of file lapacke_zpoequb.c.
yes bestie,zpoequbwith the extrabat the end is a whole separate icon, not me mistyping 🙈
LAPACKE_zpoequb_work 🍓
lapack_int LAPACKE_zpoequb_work (int matrix_layout, lapack_int n, const
lapack_complex_double * a, lapack_int lda, double * s, double * scond,
double * amax)
Definition at line 36 of file lapacke_zpoequb_work.c.
LAPACKE_zporfs 👑
lapack_int LAPACKE_zporfs (int matrix_layout, char uplo, lapack_int n,
lapack_int nrhs, const lapack_complex_double * a, lapack_int lda, const
lapack_complex_double * af, lapack_int ldaf, const lapack_complex_double
* b, lapack_int ldb, lapack_complex_double * x, lapack_int ldx, double *
ferr, double * berr)
Definition at line 36 of file lapacke_zporfs.c.
LAPACKE_zporfs_work 💫
lapack_int LAPACKE_zporfs_work (int matrix_layout, char uplo, lapack_int n,
lapack_int nrhs, const lapack_complex_double * a, lapack_int lda, const
lapack_complex_double * af, lapack_int ldaf, const lapack_complex_double
* b, lapack_int ldb, lapack_complex_double * x, lapack_int ldx, double *
ferr, double * berr, lapack_complex_double * work, double * rwork)
Definition at line 36 of file lapacke_zporfs_work.c.
LAPACKE_zporfsx 🌟
lapack_int LAPACKE_zporfsx (int matrix_layout, char uplo, char equed,
lapack_int n, lapack_int nrhs, const lapack_complex_double * a,
lapack_int lda, const lapack_complex_double * af, lapack_int ldaf, const
double * s, const lapack_complex_double * b, lapack_int ldb,
lapack_complex_double * x, lapack_int ldx, double * rcond, double *
berr, lapack_int n_err_bnds, double * err_bnds_norm, double *
err_bnds_comp, lapack_int nparams, double * params)
Definition at line 36 of file lapacke_zporfsx.c.
thexon the end means she's the extra one — look at all thoseerr_bnds_norm,err_bnds_comp,nparamsandparamsshe's carrying 😭 main character energy fr
LAPACKE_zporfsx_work 🎀
lapack_int LAPACKE_zporfsx_work (int matrix_layout, char uplo, char equed,
lapack_int n, lapack_int nrhs, const lapack_complex_double * a,
lapack_int lda, const lapack_complex_double * af, lapack_int ldaf, const
double * s, const lapack_complex_double * b, lapack_int ldb,
lapack_complex_double * x, lapack_int ldx, double * rcond, double *
berr, lapack_int n_err_bnds, double * err_bnds_norm, double *
err_bnds_comp, lapack_int nparams, double * params,
lapack_complex_double * work, double * rwork)
Definition at line 36 of file lapacke_zporfsx_work.c.
LAPACKE_zposv 💖
lapack_int LAPACKE_zposv (int matrix_layout, char uplo, lapack_int n,
lapack_int nrhs, lapack_complex_double * a, lapack_int lda,
lapack_complex_double * b, lapack_int ldb)
Definition at line 36 of file lapacke_zposv.c.
LAPACKE_zposv_work 🌸
lapack_int LAPACKE_zposv_work (int matrix_layout, char uplo, lapack_int n,
lapack_int nrhs, lapack_complex_double * a, lapack_int lda,
lapack_complex_double * b, lapack_int ldb)
Definition at line 36 of file lapacke_zposv_work.c.
LAPACKE_zposvx 🦋
lapack_int LAPACKE_zposvx (int matrix_layout, char fact, char uplo,
lapack_int n, lapack_int nrhs, lapack_complex_double * a, lapack_int
lda, lapack_complex_double * af, lapack_int ldaf, char * equed, double *
s, lapack_complex_double * b, lapack_int ldb, lapack_complex_double * x,
lapack_int ldx, double * rcond, double * ferr, double * berr)
Definition at line 36 of file lapacke_zposvx.c.
LAPACKE_zposvx_work 🔥
lapack_int LAPACKE_zposvx_work (int matrix_layout, char fact, char uplo,
lapack_int n, lapack_int nrhs, lapack_complex_double * a, lapack_int
lda, lapack_complex_double * af, lapack_int ldaf, char * equed, double *
s, lapack_complex_double * b, lapack_int ldb, lapack_complex_double * x,
lapack_int ldx, double * rcond, double * ferr, double * berr,
lapack_complex_double * work, double * rwork)
Definition at line 36 of file lapacke_zposvx_work.c.
LAPACKE_zposvxx 🌈
lapack_int LAPACKE_zposvxx (int matrix_layout, char fact, char uplo,
lapack_int n, lapack_int nrhs, lapack_complex_double * a, lapack_int
lda, lapack_complex_double * af, lapack_int ldaf, char * equed, double *
s, lapack_complex_double * b, lapack_int ldb, lapack_complex_double * x,
lapack_int ldx, double * rcond, double * rpvgrw, double * berr,
lapack_int n_err_bnds, double * err_bnds_norm, double * err_bnds_comp,
lapack_int nparams, double * params)
Definition at line 36 of file lapacke_zposvxx.c.
doublex, double trouble —zposvxxis the deluxe edition and she knows it 👑
LAPACKE_zposvxx_work 💜
lapack_int LAPACKE_zposvxx_work (int matrix_layout, char fact, char uplo,
lapack_int n, lapack_int nrhs, lapack_complex_double * a, lapack_int
lda, lapack_complex_double * af, lapack_int ldaf, char * equed, double *
s, lapack_complex_double * b, lapack_int ldb, lapack_complex_double * x,
lapack_int ldx, double * rcond, double * rpvgrw, double * berr,
lapack_int n_err_bnds, double * err_bnds_norm, double * err_bnds_comp,
lapack_int nparams, double * params, lapack_complex_double * work,
double * rwork)
Definition at line 36 of file lapacke_zposvxx_work.c.
LAPACKE_zpotrf 🍓
lapack_int LAPACKE_zpotrf (int matrix_layout, char uplo, lapack_int n,
lapack_complex_double * a, lapack_int lda)
Definition at line 36 of file lapacke_zpotrf.c.
LAPACKE_zpotrf2 🧚
lapack_int LAPACKE_zpotrf2 (int matrix_layout, char uplo, lapack_int n,
lapack_complex_double * a, lapack_int lda)
Definition at line 36 of file lapacke_zpotrf2.c.
same signature aszpotrf, but she's the2girlie — different file, different vibe ✨
LAPACKE_zpotrf2_work 💫
lapack_int LAPACKE_zpotrf2_work (int matrix_layout, char uplo, lapack_int n,
lapack_complex_double * a, lapack_int lda)
Definition at line 36 of file lapacke_zpotrf2_work.c.
That's the whole z-p block done, bestie — every ab/ldab, every work/rwork, every Definition at line 36 accounted for 💅 more coming right up 🫶
✨ LAPACKE_zpotrf_work
lapack_int LAPACKE_zpotrf_work (int matrix_layout, char uplo, lapack_int n,
lapack_complex_double * a, lapack_int lda)
the _work twin of zpotrf, bestie — same little crew of matrix_layout, uplo, n, a and lda, zero surprises. Definition at line 36 of file lapacke_zpotrf_work.c. 🫶
✨ LAPACKE_zpotri
lapack_int LAPACKE_zpotri (int matrix_layout, char uplo, lapack_int n,
lapack_complex_double * a, lapack_int lda)
four-ish args and a name that lowkey says it all 💅 — matrix_layout, uplo, n, then a hanging out with its leading dimension lda. Definition at line 36 of file lapacke_zpotri.c.
✨ LAPACKE_zpotri_work
lapack_int LAPACKE_zpotri_work (int matrix_layout, char uplo, lapack_int n,
lapack_complex_double * a, lapack_int lda)
the workspace-flavoured zpotri, identical signature energy, no extra drama. Definition at line 36 of file lapacke_zpotri_work.c. 🎀
✨ LAPACKE_zpotrs
lapack_int LAPACKE_zpotrs (int matrix_layout, char uplo, lapack_int n,
lapack_int nrhs, const lapack_complex_double * a, lapack_int lda,
lapack_complex_double * b, lapack_int ldb)
okay THIS one brought friends — nrhs showed up, a went const (respect), and b walked in with its own ldb 🦋. Definition at line 36 of file lapacke_zpotrs.c.
✨ LAPACKE_zpotrs_work
lapack_int LAPACKE_zpotrs_work (int matrix_layout, char uplo, lapack_int n,
lapack_int nrhs, const lapack_complex_double * a, lapack_int lda,
lapack_complex_double * b, lapack_int ldb)
same squad as zpotrs, now in workspace-dispatch form. It's giving consistency, honestly 👑. Definition at line 36 of file lapacke_zpotrs_work.c.
✨ LAPACKE_zppcon
lapack_int LAPACKE_zppcon (int matrix_layout, char uplo, lapack_int n, const
lapack_complex_double * ap, double anorm, double * rcond)
packed-storage vibes — that's ap with no lda in sight, plus a real double anorm going in and a double * rcond coming out 🌸. Definition at line 36 of file lapacke_zppcon.c.
✨ LAPACKE_zppcon_work
lapack_int LAPACKE_zppcon_work (int matrix_layout, char uplo, lapack_int n,
const lapack_complex_double * ap, double anorm, double * rcond,
lapack_complex_double * work, double * rwork)
now with the full backstage crew: work AND rwork, bestie, both of them 😭. Definition at line 36 of file lapacke_zppcon_work.c.
✨ LAPACKE_zppequ
lapack_int LAPACKE_zppequ (int matrix_layout, char uplo, lapack_int n, const
lapack_complex_double * ap, double * s, double * scond, double * amax)
three separate double * out-params — s, scond, amax — just handing out numbers like party favours 💜. Definition at line 36 of file lapacke_zppequ.c.
✨ LAPACKE_zppequ_work
lapack_int LAPACKE_zppequ_work (int matrix_layout, char uplo, lapack_int n,
const lapack_complex_double * ap, double * s, double * scond, double *
amax)
the _work version of zppequ, same argument lineup, same packed ap energy ✨. Definition at line 36 of file lapacke_zppequ_work.c.
✨ LAPACKE_zpprfs
lapack_int LAPACKE_zpprfs (int matrix_layout, char uplo, lapack_int n,
lapack_int nrhs, const lapack_complex_double * ap, const
lapack_complex_double * afp, const lapack_complex_double * b, lapack_int
ldb, lapack_complex_double * x, lapack_int ldx, double * ferr, double *
berr)
this signature is LONG and unbothered — three const complex pointers (ap, afp, b), two leading dims (ldb, ldx), and two error outputs ferr and berr 🍓. Definition at line 36 of file lapacke_zpprfs.c.
✨ LAPACKE_zpprfs_work
lapack_int LAPACKE_zpprfs_work (int matrix_layout, char uplo, lapack_int n,
lapack_int nrhs, const lapack_complex_double * ap, const
lapack_complex_double * afp, const lapack_complex_double * b, lapack_int
ldb, lapack_complex_double * x, lapack_int ldx, double * ferr, double *
berr, lapack_complex_double * work, double * rwork)
everything from zpprfs plus work and rwork tacked on the end — the signature that ate 💀. Definition at line 36 of file lapacke_zpprfs_work.c.
✨ LAPACKE_zppsv
lapack_int LAPACKE_zppsv (int matrix_layout, char uplo, lapack_int n,
lapack_int nrhs, lapack_complex_double * ap, lapack_complex_double * b,
lapack_int ldb)
no const in sight on ap and b, so yes bestie, these get written to 🙈 — plus nrhs and ldb riding along. Definition at line 36 of file lapacke_zppsv.c.
✨ LAPACKE_zppsv_work
lapack_int LAPACKE_zppsv_work (int matrix_layout, char uplo, lapack_int n,
lapack_int nrhs, lapack_complex_double * ap, lapack_complex_double * b,
lapack_int ldb)
the workspace edition of zppsv, same non-const lineup, same vibes. Definition at line 36 of file lapacke_zppsv_work.c. 🦋
✨ LAPACKE_zppsvx
lapack_int LAPACKE_zppsvx (int matrix_layout, char fact, char uplo,
lapack_int n, lapack_int nrhs, lapack_complex_double * ap,
lapack_complex_double * afp, char * equed, double * s,
lapack_complex_double * b, lapack_int ldb, lapack_complex_double * x,
lapack_int ldx, double * rcond, double * ferr, double * berr)
TWO char params now — fact AND uplo — plus a char * equed output pointer, which is a whole mood 🌈. And that's before s, rcond, ferr, berr. Definition at line 36 of file lapacke_zppsvx.c.
✨ LAPACKE_zppsvx_work
lapack_int LAPACKE_zppsvx_work (int matrix_layout, char fact, char uplo,
lapack_int n, lapack_int nrhs, lapack_complex_double * ap,
lapack_complex_double * afp, char * equed, double * s,
lapack_complex_double * b, lapack_int ldb, lapack_complex_double * x,
lapack_int ldx, double * rcond, double * ferr, double * berr,
lapack_complex_double * work, double * rwork)
literally the same monster with work and rwork bolted on the tail — iconic, exhausting, perfect 😭💅. Definition at line 36 of file lapacke_zppsvx_work.c.
✨ LAPACKE_zpptrf
lapack_int LAPACKE_zpptrf (int matrix_layout, char uplo, lapack_int n,
lapack_complex_double * ap)
tiny signature, huge main-character energy — just matrix_layout, uplo, n and ap. Definition at line 36 of file lapacke_zpptrf.c. 👑
✨ LAPACKE_zpptrf_work
lapack_int LAPACKE_zpptrf_work (int matrix_layout, char uplo, lapack_int n,
lapack_complex_double * ap)
same four args, _work suffix, no notes. Definition at line 36 of file lapacke_zpptrf_work.c. ✨
✨ LAPACKE_zpptri
lapack_int LAPACKE_zpptri (int matrix_layout, char uplo, lapack_int n,
lapack_complex_double * ap)
zpptri, keeping it minimal with matrix_layout, uplo, n, ap. Definition at line 36 of file lapacke_zpptri.c. 🎀
✨ LAPACKE_zpptri_work
lapack_int LAPACKE_zpptri_work (int matrix_layout, char uplo, lapack_int n,
lapack_complex_double * ap)
the _work sibling of zpptri, matching arg-for-arg. Definition at line 36 of file lapacke_zpptri_work.c. 💜
✨ LAPACKE_zpptrs
lapack_int LAPACKE_zpptrs (int matrix_layout, char uplo, lapack_int n,
lapack_int nrhs, const lapack_complex_double * ap, lapack_complex_double
* b, lapack_int ldb)
here ap is const (ty king) but b is definitely getting modified, and ldb is right there supervising 🫶. Definition at line 36 of file lapacke_zpptrs.c.
✨ LAPACKE_zpptrs_work
lapack_int LAPACKE_zpptrs_work (int matrix_layout, char uplo, lapack_int n,
lapack_int nrhs, const lapack_complex_double * ap, lapack_complex_double
* b, lapack_int ldb)
zpptrs but make it workspace. Same args, no cap. Definition at line 36 of file lapacke_zpptrs_work.c. ⭐
✨ LAPACKE_zpstrf
lapack_int LAPACKE_zpstrf (int matrix_layout, char uplo, lapack_int n,
lapack_complex_double * a, lapack_int lda, lapack_int * piv, lapack_int
* rank, double tol)
look at this glow-up — lapack_int * piv, lapack_int * rank, and a real-valued double tol all up in here 🔥. Definition at line 36 of file lapacke_zpstrf.c.
✨ LAPACKE_zpstrf_work
lapack_int LAPACKE_zpstrf_work (int matrix_layout, char uplo, lapack_int n,
lapack_complex_double * a, lapack_int lda, lapack_int * piv, lapack_int
* rank, double tol, double * work)
same as zpstrf plus a double * work out the back, because of course 🫠. Definition at line 36 of file lapacke_zpstrf_work.c.
✨ LAPACKE_zptcon
lapack_int LAPACKE_zptcon (lapack_int n, const double * d, const
lapack_complex_double * e, double anorm, double * rcond)
WAIT — no matrix_layout?? no uplo?? just n, then d (real!), e (complex!), anorm and rcond 💀. A plot twist, truly. Definition at line 36 of file lapacke_zptcon.c.
✨ LAPACKE_zptcon_work
lapack_int LAPACKE_zptcon_work (lapack_int n, const double * d, const
lapack_complex_double * e, double anorm, double * rcond, double * work)
the left-field non-layout version again, now with a double * work for good measure 🌸. Definition at line 36 of file lapacke_zptcon_work.c.
✨ LAPACKE_zpteqr
lapack_int LAPACKE_zpteqr (int matrix_layout, char compz, lapack_int n,
double * d, double * e, lapack_complex_double * z, lapack_int ldz)
compz instead of uplo — switch it up, we love to see it — with real arrays d and e and a complex z plus ldz 🌈. Definition at line 36 of file lapacke_zpteqr.c.
✨ LAPACKE_zpteqr_work
lapack_int LAPACKE_zpteqr_work (int matrix_layout, char compz, lapack_int n,
double * d, double * e, lapack_complex_double * z, lapack_int ldz,
double * work)
same as above but the double * work said "room for one more?" 😌. Definition at line 36 of file lapacke_zpteqr_work.c.
✨ LAPACKE_zptrfs
lapack_int LAPACKE_zptrfs (int matrix_layout, char uplo, lapack_int n,
lapack_int nrhs, const double * d, const lapack_complex_double * e,
const double * df, const lapack_complex_double * ef, const
lapack_complex_double * b, lapack_int ldb, lapack_complex_double * x,
lapack_int ldx, double * ferr, double * berr)
the alternating real/complex duo is BACK: d + e, df + ef — all four const, all four besties 💜. Then b, x, both leading dims, and ferr/berr to finish. Definition at line 36 of file lapacke_zptrfs.c.
✨ LAPACKE_zptrfs_work
lapack_int LAPACKE_zptrfs_work (int matrix_layout, char uplo, lapack_int n,
lapack_int nrhs, const double * d, const lapack_complex_double * e,
const double * df, const lapack_complex_double * ef, const
lapack_complex_double * b, lapack_int ldb, lapack_complex_double * x,
lapack_int ldx, double * ferr, double * berr, lapack_complex_double *
work, double * rwork)
zptrfs with work AND rwork — one for each flavour of number, naturally 🍓. Definition at line 36 of file lapacke_zptrfs_work.c.
✨ LAPACKE_zptsv
lapack_int LAPACKE_zptsv (int matrix_layout, lapack_int n, lapack_int nrhs,
double * d, lapack_complex_double * e, lapack_complex_double * b,
lapack_int ldb)
no uplo needed here — just matrix_layout, n, nrhs, then d, e, b and ldb doing their thing 🦋. Definition at line 36 of file lapacke_zptsv.c.
✨ LAPACKE_zptsv_work
lapack_int LAPACKE_zptsv_work (int matrix_layout, lapack_int n, lapack_int
nrhs, double * d, lapack_complex_double * e, lapack_complex_double * b,
lapack_int ldb)
same seven-arg lineup, _work on the end of the name, business as usual ✨. Definition at line 36 of file lapacke_zptsv_work.c.
✨ LAPACKE_zptsvx
lapack_int LAPACKE_zptsvx (int matrix_layout, char fact, lapack_int n,
lapack_int nrhs, const double * d, const lapack_complex_double * e,
double * df, lapack_complex_double * ef, const lapack_complex_double *
b, lapack_int ldb, lapack_complex_double * x, lapack_int ldx, double *
rcond, double * ferr, double * berr)
oh she's fancy — note that d/e are const but df/ef are NOT, and fact is steering the whole thing 👑. Definition at line 36 of file lapacke_zptsvx.c.
✨ LAPACKE_zptsvx_work
lapack_int LAPACKE_zptsvx_work (int matrix_layout, char fact, lapack_int n,
lapack_int nrhs, const double * d, const lapack_complex_double * e,
double * df, lapack_complex_double * ef, const lapack_complex_double *
b, lapack_int ldb, lapack_complex_double * x, lapack_int ldx, double *
rcond, double * ferr, double * berr, lapack_complex_double * work,
double * rwork)
everything from zptsvx, then work and rwork slide in at the end like they own the place 💅. Definition at line 36 of file lapacke_zptsvx_work.c.
✨ LAPACKE_zpttrf
lapack_int LAPACKE_zpttrf (lapack_int n, double * d, lapack_complex_double *
e)
three args, no layout, no uplo, just n, d and e — a minimalist queen 🌸. Definition at line 36 of file lapacke_zpttrf.c.
✨ LAPACKE_zpttrf_work
lapack_int LAPACKE_zpttrf_work (lapack_int n, double * d,
lapack_complex_double * e)
identical to zpttrf, _work edition, still only three args. Definition at line 36 of file lapacke_zpttrf_work.c. 🎀
✨ LAPACKE_zpttrs
lapack_int LAPACKE_zpttrs (int matrix_layout, char uplo, lapack_int n,
lapack_int nrhs, const double * d, const lapack_complex_double * e,
lapack_complex_double * b, lapack_int ldb)
uplo is back babes, and now d and e are const while b takes the writes, with ldb watching 🫶. Definition at line 36 of file lapacke_zpttrs.c.
✨ LAPACKE_zpttrs_work
lapack_int LAPACKE_zpttrs_work (int matrix_layout, char uplo, lapack_int n,
lapack_int nrhs, const double * d, const lapack_complex_double * e,
lapack_complex_double * b, lapack_int ldb)
zpttrs with the workspace hat on. Same eight args, no chaos. Definition at line 36 of file lapacke_zpttrs_work.c. 💜
✨ LAPACKE_zspcon
lapack_int LAPACKE_zspcon (int matrix_layout, char uplo, lapack_int n, const
lapack_complex_double * ap, const lapack_int * ipiv, double anorm,
double * rcond)
ooh, new guest star: const lapack_int * ipiv 🔥 — plus anorm in and rcond out. Definition at line 36 of file lapacke_zspcon.c.
✨ LAPACKE_zspcon_work
lapack_int LAPACKE_zspcon_work (int matrix_layout, char uplo, lapack_int n,
const lapack_complex_double * ap, const lapack_int * ipiv, double anorm,
double * rcond, lapack_complex_double * work)
same as zspcon with a lapack_complex_double * work appended, as tradition dictates ✨. Definition at line 36 of file lapacke_zspcon_work.c.
✨ LAPACKE_zsprfs
lapack_int LAPACKE_zsprfs (int matrix_layout, char uplo, lapack_int n,
lapack_int nrhs, const lapack_complex_double * ap, const
lapack_complex_double * afp, const lapack_int * ipiv, const
lapack_complex_double * b, lapack_int ldb, lapack_complex_double * x,
lapack_int ldx, double * ferr, double * berr)
ipiv is here too, sitting snugly between afp and b, and literally everything except x, ferr and berr is const 😌💅. Definition at line 36 of file lapacke_zsprfs.c.
✨ LAPACKE_zsprfs_work
lapack_int LAPACKE_zsprfs_work (int matrix_layout, char uplo, lapack_int n,
lapack_int nrhs, const lapack_complex_double * ap, const
lapack_complex_double * afp, const lapack_int * ipiv, const
lapack_complex_double * b, lapack_int ldb, lapack_complex_double * x,
lapack_int ldx, double * ferr, double * berr, lapack_complex_double *
work, double * rwork)
the full-length version — everything above, then work and rwork making it a party 💀🎉. Definition at line 36 of file lapacke_zsprfs_work.c.
✨ LAPACKE_zspsv
lapack_int LAPACKE_zspsv (int matrix_layout, char uplo, lapack_int n,
lapack_int nrhs, lapack_complex_double * ap, lapack_int * ipiv,
lapack_complex_double * b, lapack_int ldb)
note ap and ipiv are both non-const here — they get touched, bestie 🙈 — and b with ldb tags along. Definition at line 36 of file lapacke_zspsv.c.
✨ LAPACKE_zspsv_work
lapack_int LAPACKE_zspsv_work (int matrix_layout, char uplo, lapack_int n,
lapack_int nrhs, lapack_complex_double * ap, lapack_int * ipiv,
lapack_complex_double * b, lapack_int ldb)
zspsv in workspace form, same eight args, same mutable energy 🌈. Definition at line 36 of file lapacke_zspsv_work.c.
✨ LAPACKE_zspsvx
lapack_int LAPACKE_zspsvx (int matrix_layout, char fact, char uplo,
lapack_int n, lapack_int nrhs, const lapack_complex_double * ap,
lapack_complex_double * afp, lapack_int * ipiv, const
lapack_complex_double * b, lapack_int ldb, lapack_complex_double * x,
lapack_int ldx, double * rcond, double * ferr, double * berr)
okay so check the const-ness gymnastics: ap is const, afp is NOT, ipiv is NOT, b is const, x is NOT 🧚 — plus fact, both layout-ish chars, and the trio rcond/ferr/berr 💜. Definition at line 36 of file lapacke_zspsvx.c.
LAPACKE_zspsvx_work
lapack_int LAPACKE_zspsvx_work (int matrix_layout, char fact, char uplo,
lapack_int n, lapack_int nrhs, const lapack_complex_double * ap,
lapack_complex_double * afp, lapack_int * ipiv, const
lapack_complex_double * b, lapack_int ldb, lapack_complex_double * x,
lapack_int ldx, double * rcond, double * ferr, double * berr,
lapack_complex_double * work, double * rwork)
Definition at line 36 of file lapacke_zspsvx_work.c.
okay bestie this one is stacked — seventeen arguments, both a work and an rwork, and it still lives at line 36 like everyone else 💀 iconic behaviour honestly.
LAPACKE_zsptrf
lapack_int LAPACKE_zsptrf (int matrix_layout, char uplo, lapack_int n,
lapack_complex_double * ap, lapack_int * ipiv)
Definition at line 36 of file lapacke_zsptrf.c.
five args, no workspace, no drama. she's lowkey the chill one of the group 🫶
LAPACKE_zsptrf_work
lapack_int LAPACKE_zsptrf_work (int matrix_layout, char uplo, lapack_int n,
lapack_complex_double * ap, lapack_int * ipiv)
Definition at line 36 of file lapacke_zsptrf_work.c.
the _work twin with the exact same argument list as LAPACKE_zsptrf — yes, same params, no extra work pointer, and that's genuinely how it's written, don't come for me 🙈
LAPACKE_zsptri
lapack_int LAPACKE_zsptri (int matrix_layout, char uplo, lapack_int n,
lapack_complex_double * ap, const lapack_int * ipiv)
Definition at line 36 of file lapacke_zsptri.c.
note the const on ipiv here — she reads her pivots and does not touch them, we respect a boundaries queen ✨
LAPACKE_zsptri_work
lapack_int LAPACKE_zsptri_work (int matrix_layout, char uplo, lapack_int n,
lapack_complex_double * ap, const lapack_int * ipiv,
lapack_complex_double * work)
Definition at line 36 of file lapacke_zsptri_work.c.
and here's the version that does take a work buffer at the end. six args. very demure, very mindful 🎀
LAPACKE_zsptrs
lapack_int LAPACKE_zsptrs (int matrix_layout, char uplo, lapack_int n,
lapack_int nrhs, const lapack_complex_double * ap, const lapack_int *
ipiv, lapack_complex_double * b, lapack_int ldb)
Definition at line 36 of file lapacke_zsptrs.c.
ap is const, ipiv is const, b is very much not const because that's the whole point bestie 🦋
LAPACKE_zsptrs_work
lapack_int LAPACKE_zsptrs_work (int matrix_layout, char uplo, lapack_int n,
lapack_int nrhs, const lapack_complex_double * ap, const lapack_int *
ipiv, lapack_complex_double * b, lapack_int ldb)
Definition at line 36 of file lapacke_zsptrs_work.c.
same signature as the plain one, zero extra args. the _work in the name is carrying the whole personality here ngl 💅
LAPACKE_zstedc
lapack_int LAPACKE_zstedc (int matrix_layout, char compz, lapack_int n,
double * d, double * e, lapack_complex_double * z, lapack_int ldz)
Definition at line 36 of file lapacke_zstedc.c.
seven params, two chars (compz says hi), and d/e are plain double * while z is lapack_complex_double *. the way it mixes real and complex and doesn't even apologise 😭
LAPACKE_zstedc_work
lapack_int LAPACKE_zstedc_work (int matrix_layout, char compz, lapack_int n,
double * d, double * e, lapack_complex_double * z, lapack_int ldz,
lapack_complex_double * work, lapack_int lwork, double * rwork,
lapack_int lrwork, lapack_int * iwork, lapack_int liwork)
Definition at line 36 of file lapacke_zstedc_work.c.
THIRTEEN arguments. three separate workspaces: work/lwork, rwork/lrwork, iwork/liwork. she brought her whole friend group to the function call 🔥
LAPACKE_zstegr
lapack_int LAPACKE_zstegr (int matrix_layout, char jobz, char range,
lapack_int n, double * d, double * e, double vl, double vu, lapack_int
il, lapack_int iu, double abstol, lapack_int * m, double * w,
lapack_complex_double * z, lapack_int ldz, lapack_int * isuppz)
Definition at line 36 of file lapacke_zstegr.c.
two chars, two plain double scalars vl and vu, an abstol, a pointer m, a pointer isuppz… it's giving "I contain multitudes" 👑
LAPACKE_zstegr_work
lapack_int LAPACKE_zstegr_work (int matrix_layout, char jobz, char range,
lapack_int n, double * d, double * e, double vl, double vu, lapack_int
il, lapack_int iu, double abstol, lapack_int * m, double * w,
lapack_complex_double * z, lapack_int ldz, lapack_int * isuppz, double *
work, lapack_int lwork, lapack_int * iwork, lapack_int liwork)
Definition at line 36 of file lapacke_zstegr_work.c.
the non-_work one plus work/lwork and iwork/liwork. notice there's no rwork here — I'm just reporting what's on the page, don't shoot the messenger 🍓
LAPACKE_zstein
lapack_int LAPACKE_zstein (int matrix_layout, lapack_int n, const double *
d, const double * e, lapack_int m, const double * w, const lapack_int *
iblock, const lapack_int * isplit, lapack_complex_double * z, lapack_int
ldz, lapack_int * ifailv)
Definition at line 36 of file lapacke_zstein.c.
count the consts bestie: d, e, w, iblock, isplit. all read-only. only z and ifailv get to be written to. boundaries!! 🎀
LAPACKE_zstein_work
lapack_int LAPACKE_zstein_work (int matrix_layout, lapack_int n, const
double * d, const double * e, lapack_int m, const double * w, const
lapack_int * iblock, const lapack_int * isplit, lapack_complex_double *
z, lapack_int ldz, double * work, lapack_int * iwork, lapack_int *
ifailv)
Definition at line 36 of file lapacke_zstein_work.c.
same as LAPACKE_zstein but with double * work and lapack_int * iwork wedged in before ifailv. and yes, still line 36 😭
LAPACKE_zstemr
lapack_int LAPACKE_zstemr (int matrix_layout, char jobz, char range,
lapack_int n, double * d, double * e, double vl, double vu, lapack_int
il, lapack_int iu, lapack_int * m, double * w, lapack_complex_double *
z, lapack_int ldz, lapack_int nzc, lapack_int * isuppz, lapack_logical *
tryrac)
Definition at line 36 of file lapacke_zstemr.c.
spot the icon: lapack_logical * tryrac at the very end. yes queen, take a chance on it ✨
LAPACKE_zstemr_work
lapack_int LAPACKE_zstemr_work (int matrix_layout, char jobz, char range,
lapack_int n, double * d, double * e, double vl, double vu, lapack_int
il, lapack_int iu, lapack_int * m, double * w, lapack_complex_double *
z, lapack_int ldz, lapack_int nzc, lapack_int * isuppz, lapack_logical *
tryrac, double * work, lapack_int lwork, lapack_int * iwork, lapack_int
liwork)
Definition at line 36 of file lapacke_zstemr_work.c.
that's the full LAPACKE_zstemr list plus work/lwork and iwork/liwork tacked on the end. twenty-one arguments total, and honestly? she ate 💅
LAPACKE_zsteqr
lapack_int LAPACKE_zsteqr (int matrix_layout, char compz, lapack_int n,
double * d, double * e, lapack_complex_double * z, lapack_int ldz)
Definition at line 36 of file lapacke_zsteqr.c.
literally the same arg list as LAPACKE_zstedc — matrix_layout, compz, n, d, e, z, ldz. twins fr fr 👯
LAPACKE_zsteqr_work
lapack_int LAPACKE_zsteqr_work (int matrix_layout, char compz, lapack_int n,
double * d, double * e, lapack_complex_double * z, lapack_int ldz,
double * work)
Definition at line 36 of file lapacke_zsteqr_work.c.
one extra double * work at the end and that's it, that's the whole update. short king 🫶
LAPACKE_zsycon
lapack_int LAPACKE_zsycon (int matrix_layout, char uplo, lapack_int n, const
lapack_complex_double * a, lapack_int lda, const lapack_int * ipiv,
double anorm, double * rcond)
Definition at line 36 of file lapacke_zsycon.c.
anorm comes in as a plain old double, rcond is the pointer you're filling. no e, no workspace — clean, minimal, hydrated 💧
LAPACKE_zsycon_3
lapack_int LAPACKE_zsycon_3 (int matrix_layout, char uplo, lapack_int n,
const lapack_complex_double * a, lapack_int lda, const
lapack_complex_double * e, const lapack_int * ipiv, double anorm, double
* rcond)
Definition at line 36 of file lapacke_zsycon_3.c.
the _3 version slides a const lapack_complex_double * e in between lda and ipiv. one extra arg, maximum chaos 🌈
LAPACKE_zsycon_3_work
lapack_int LAPACKE_zsycon_3_work (int matrix_layout, char uplo, lapack_int
n, const lapack_complex_double * a, lapack_int lda, const
lapack_complex_double * e, const lapack_int * ipiv, double anorm, double
* rcond, lapack_complex_double * work)
Definition at line 36 of file lapacke_zsycon_3_work.c.
same as LAPACKE_zsycon_3 with a lapack_complex_double * work at the end. the _work suffix said what it said 💅
LAPACKE_zsycon_work
lapack_int LAPACKE_zsycon_work (int matrix_layout, char uplo, lapack_int n,
const lapack_complex_double * a, lapack_int lda, const lapack_int *
ipiv, double anorm, double * rcond, lapack_complex_double * work)
Definition at line 36 of file lapacke_zsycon_work.c.
no e here — that's the _3 branch's whole thing. this one is LAPACKE_zsycon + work. simple as 🎀
LAPACKE_zsyconv
lapack_int LAPACKE_zsyconv (int matrix_layout, char uplo, char way,
lapack_int n, lapack_complex_double * a, lapack_int lda, const
lapack_int * ipiv, lapack_complex_double * e)
Definition at line 36 of file lapacke_zsyconv.c.
two chars bestie: uplo and way. and a is not const while ipiv is. read the room, read the signatures 🌸
LAPACKE_zsyconv_work
lapack_int LAPACKE_zsyconv_work (int matrix_layout, char uplo, char way,
lapack_int n, lapack_complex_double * a, lapack_int lda, const
lapack_int * ipiv, lapack_complex_double * e)
Definition at line 36 of file lapacke_zsyconv_work.c.
identical parameter list to LAPACKE_zsyconv, no extra work arg. yes I double-checked, and yes I'm as surprised as you 🙈
LAPACKE_zsyequb
lapack_int LAPACKE_zsyequb (int matrix_layout, char uplo, lapack_int n,
const lapack_complex_double * a, lapack_int lda, double * s, double *
scond, double * amax)
Definition at line 36 of file lapacke_zsyequb.c.
three output doubles in a row: s, scond, amax. the holy trinity of "here's your scaling info" ⭐
LAPACKE_zsyequb_work
lapack_int LAPACKE_zsyequb_work (int matrix_layout, char uplo, lapack_int n,
const lapack_complex_double * a, lapack_int lda, double * s, double *
scond, double * amax, lapack_complex_double * work)
Definition at line 36 of file lapacke_zsyequb_work.c.
all of the above, plus lapack_complex_double * work. nine args, still line 36, still slaying 🦋
LAPACKE_zsyr
lapack_int LAPACKE_zsyr (int matrix_layout, char uplo, lapack_int n,
lapack_complex_double alpha, const lapack_complex_double * x, lapack_int
incx, lapack_complex_double * a, lapack_int lda)
Definition at line 36 of file lapacke_zsyr.c.
alpha is passed by value as a lapack_complex_double — not a pointer, bestie, look at it, no star 👀 and there's an incx because of course there is 💅
LAPACKE_zsyr_work
lapack_int LAPACKE_zsyr_work (int matrix_layout, char uplo, lapack_int n,
lapack_complex_double alpha, const lapack_complex_double * x, lapack_int
incx, lapack_complex_double * a, lapack_int lda)
Definition at line 36 of file lapacke_zsyr_work.c.
same eight args as LAPACKE_zsyr, no extra buffer. if you were waiting for a work pointer, she's not coming 😭
LAPACKE_zsyrfs
lapack_int LAPACKE_zsyrfs (int matrix_layout, char uplo, lapack_int n,
lapack_int nrhs, const lapack_complex_double * a, lapack_int lda, const
lapack_complex_double * af, lapack_int ldaf, const lapack_int * ipiv,
const lapack_complex_double * b, lapack_int ldb, lapack_complex_double *
x, lapack_int ldx, double * ferr, double * berr)
Definition at line 36 of file lapacke_zsyrfs.c.
a/lda, af/ldaf, b/ldb, x/ldx — four matrix-plus-leading-dimension pairs, then ferr and berr to close it out. the symmetry?? obsessed 🎀
LAPACKE_zsyrfs_work
lapack_int LAPACKE_zsyrfs_work (int matrix_layout, char uplo, lapack_int n,
lapack_int nrhs, const lapack_complex_double * a, lapack_int lda, const
lapack_complex_double * af, lapack_int ldaf, const lapack_int * ipiv,
const lapack_complex_double * b, lapack_int ldb, lapack_complex_double *
x, lapack_int ldx, double * ferr, double * berr, lapack_complex_double *
work, double * rwork)
Definition at line 36 of file lapacke_zsyrfs_work.c.
everything from LAPACKE_zsyrfs plus lapack_complex_double * work and double * rwork. two buffers, one queen 🔥
LAPACKE_zsyrfsx
lapack_int LAPACKE_zsyrfsx (int matrix_layout, char uplo, char equed,
lapack_int n, lapack_int nrhs, const lapack_complex_double * a,
lapack_int lda, const lapack_complex_double * af, lapack_int ldaf, const
lapack_int * ipiv, const double * s, const lapack_complex_double * b,
lapack_int ldb, lapack_complex_double * x, lapack_int ldx, double *
rcond, double * berr, lapack_int n_err_bnds, double * err_bnds_norm,
double * err_bnds_comp, lapack_int nparams, double * params)
Definition at line 36 of file lapacke_zsyrfsx.c.
the x suffix means business: equed, const double * s, rcond, berr, n_err_bnds, err_bnds_norm, err_bnds_comp, nparams, params. error bounds for days, honey 🌈
LAPACKE_zsyrfsx_work
lapack_int LAPACKE_zsyrfsx_work (int matrix_layout, char uplo, char equed,
lapack_int n, lapack_int nrhs, const lapack_complex_double * a,
lapack_int lda, const lapack_complex_double * af, lapack_int ldaf, const
lapack_int * ipiv, const double * s, const lapack_complex_double * b,
lapack_int ldb, lapack_complex_double * x, lapack_int ldx, double *
rcond, double * berr, lapack_int n_err_bnds, double * err_bnds_norm,
double * err_bnds_comp, lapack_int nparams, double * params,
lapack_complex_double * work, double * rwork)
Definition at line 36 of file lapacke_zsyrfsx_work.c.
the big one: every single arg from LAPACKE_zsyrfsx plus lapack_complex_double * work and double * rwork. twenty-four parameters. twenty-four!! she's the main character of this whole stretch ngl 👑💅
LAPACKE_zsysv
lapack_int LAPACKE_zsysv (int matrix_layout, char uplo, lapack_int n,
lapack_int nrhs, lapack_complex_double * a, lapack_int lda, lapack_int *
ipiv, lapack_complex_double * b, lapack_int ldb)
Definition at line 36 of file lapacke_zsysv.c.
nine args, and a is writable because factorization goes right back into it. ipiv comes out too. she's a working girlie ✨
LAPACKE_zsysv_aa
lapack_int LAPACKE_zsysv_aa (int matrix_layout, char uplo, lapack_int n,
lapack_int nrhs, lapack_complex_double * a, lapack_int lda, lapack_int *
ipiv, lapack_complex_double * b, lapack_int ldb)
Definition at line 36 of file lapacke_zsysv_aa.c.
exactly the same nine params as LAPACKE_zsysv — the _aa is living in the name and the filename, that's it, that's the whole difference from where I'm standing 🙈
LAPACKE_zsysv_aa_2stage
lapack_int LAPACKE_zsysv_aa_2stage (int matrix_layout, char uplo, lapack_int
n, lapack_int nrhs, lapack_complex_double * a, lapack_int lda,
lapack_complex_double * tb, lapack_int ltb, lapack_int * ipiv,
lapack_int * ipiv2, lapack_complex_double * b, lapack_int ldb)
Definition at line 36 of file lapacke_zsysv_aa_2stage.c.
now we're talking — she's got tb/ltb and two pivot arrays, ipiv and ipiv2. two-stage, two pivots, two hundred percent that girl 💅
LAPACKE_zsysv_aa_2stage_work
lapack_int LAPACKE_zsysv_aa_2stage_work (int matrix_layout, char uplo,
lapack_int n, lapack_int nrhs, lapack_complex_double * a, lapack_int
lda, lapack_complex_double * tb, lapack_int ltb, lapack_int * ipiv,
lapack_int * ipiv2, lapack_complex_double * b, lapack_int ldb,
lapack_complex_double * work, lapack_int lwork)
Definition at line 36 of file lapacke_zsysv_aa_2stage_work.c.
all twelve from the line above plus work/lwork. fourteen args and a workspace to match — no notes 💖
LAPACKE_zsysv_aa_work
lapack_int LAPACKE_zsysv_aa_work (int matrix_layout, char uplo, lapack_int
n, lapack_int nrhs, lapack_complex_double * a, lapack_int lda,
lapack_int * ipiv, lapack_complex_double * b, lapack_int ldb,
lapack_complex_double * work, lapack_int lwork)
Definition at line 36 of file lapacke_zsysv_aa_work.c.
the _aa nine plus work/lwork. no tb, no ipiv2 — that's the 2stage girlie's job, not hers 🫶
LAPACKE_zsysv_rk
lapack_int LAPACKE_zsysv_rk (int matrix_layout, char uplo, lapack_int n,
lapack_int nrhs, lapack_complex_double * a, lapack_int lda,
lapack_complex_double * e, lapack_int * ipiv, lapack_complex_double * b,
lapack_int ldb)
Definition at line 36 of file lapacke_zsysv_rk.c.
and this one's got an e sandwiched between lda and ipiv, with no ltb and no work in sight. different flavour, same energy 🍓 and yep — definition at line 36, because apparently line 36 is the moment for everyone in this house 😭✨
okay bestie we're still deep in the zsys-and-zsyt cinematic universe and honestly it's giving season finale energy 🌈 every single one of these bad boys lives at line 36 of its own little file, so let's just vibe through them in order, no skipping, no cap 💅
LAPACKE_zsysv_rk_work— the_rkwork-horse of thezsysvcrew, complete with its owneandwork/lworksituation ✨
lapack_int LAPACKE_zsysv_rk_work (int matrix_layout, char uplo, lapack_int n, lapack_int nrhs, lapack_complex_double * a, lapack_int lda, lapack_complex_double * e, lapack_int * ipiv, lapack_complex_double * b, lapack_int ldb, lapack_complex_double * work, lapack_int lwork)
Definition at line 36 of file lapacke_zsysv_rk_work.c.
LAPACKE_zsysv_rook—rook-flavouredzsysv, no extra work array invited to the party 🎀
lapack_int LAPACKE_zsysv_rook (int matrix_layout, char uplo, lapack_int n, lapack_int nrhs, lapack_complex_double * a, lapack_int lda, lapack_int * ipiv, lapack_complex_double * b, lapack_int ldb)
Definition at line 36 of file lapacke_zsysv_rook.c.
LAPACKE_zsysv_rook_work— samerookenergy, now withworkandlworkbecause she's thorough 💅
lapack_int LAPACKE_zsysv_rook_work (int matrix_layout, char uplo, lapack_int n, lapack_int nrhs, lapack_complex_double * a, lapack_int lda, lapack_int * ipiv, lapack_complex_double * b, lapack_int ldb, lapack_complex_double * work, lapack_int lwork)
Definition at line 36 of file lapacke_zsysv_rook_work.c.
LAPACKE_zsysv_work— the classiczsysvwith the work array, the moment, the everything 🦋
lapack_int LAPACKE_zsysv_work (int matrix_layout, char uplo, lapack_int n, lapack_int nrhs, lapack_complex_double * a, lapack_int lda, lapack_int * ipiv, lapack_complex_double * b, lapack_int ldb, lapack_complex_double * work, lapack_int lwork)
Definition at line 36 of file lapacke_zsysv_work.c.
LAPACKE_zsysvx— thexvariant, out here collectingrcond,ferrandberrlike they're friendship bracelets 🫶
lapack_int LAPACKE_zsysvx (int matrix_layout, char fact, char uplo, lapack_int n, lapack_int nrhs, const lapack_complex_double * a, lapack_int lda, lapack_complex_double * af, lapack_int ldaf, lapack_int * ipiv, const lapack_complex_double * b, lapack_int ldb, lapack_complex_double * x, lapack_int ldx, double * rcond, double * ferr, double * berr)
Definition at line 36 of file lapacke_zsysvx.c.
LAPACKE_zsysvx_work—zsysvxbut she broughtwork,lworkandrwork😭 iconic
lapack_int LAPACKE_zsysvx_work (int matrix_layout, char fact, char uplo, lapack_int n, lapack_int nrhs, const lapack_complex_double * a, lapack_int lda, lapack_complex_double * af, lapack_int ldaf, lapack_int * ipiv, const lapack_complex_double * b, lapack_int ldb, lapack_complex_double * x, lapack_int ldx, double * rcond, double * ferr, double * berr, lapack_complex_double * work, lapack_int lwork, double * rwork)
Definition at line 36 of file lapacke_zsysvx_work.c.
LAPACKE_zsysvxx— thexxone, absolutely stacked:equed,s,rpvgrw,n_err_bnds,err_bnds_norm,err_bnds_comp,nparams,params. main character energy, fr fr 👑
lapack_int LAPACKE_zsysvxx (int matrix_layout, char fact, char uplo, lapack_int n, lapack_int nrhs, lapack_complex_double * a, lapack_int lda, lapack_complex_double * af, lapack_int ldaf, lapack_int * ipiv, char * equed, double * s, lapack_complex_double * b, lapack_int ldb, lapack_complex_double * x, lapack_int ldx, double * rcond, double * rpvgrw, double * berr, lapack_int n_err_bnds, double * err_bnds_norm, double * err_bnds_comp, lapack_int nparams, double * params)
Definition at line 36 of file lapacke_zsysvxx.c.
LAPACKE_zsysvxx_work— all of the above plusworkandrwork, because why gatekeep 💀
lapack_int LAPACKE_zsysvxx_work (int matrix_layout, char fact, char uplo, lapack_int n, lapack_int nrhs, lapack_complex_double * a, lapack_int lda, lapack_complex_double * af, lapack_int ldaf, lapack_int * ipiv, char * equed, double * s, lapack_complex_double * b, lapack_int ldb, lapack_complex_double * x, lapack_int ldx, double * rcond, double * rpvgrw, double * berr, lapack_int n_err_bnds, double * err_bnds_norm, double * err_bnds_comp, lapack_int nparams, double * params, lapack_complex_double * work, double * rwork)
Definition at line 36 of file lapacke_zsysvxx_work.c.
LAPACKE_zsyswapr— tiny icon behaviour: she just swapsi1andi2, periodt 🌸
lapack_int LAPACKE_zsyswapr (int matrix_layout, char uplo, lapack_int n, lapack_complex_double * a, lapack_int lda, lapack_int i1, lapack_int i2)
Definition at line 36 of file lapacke_zsyswapr.c.
LAPACKE_zsyswapr_work— the same swap agenda,_workedition ✨
lapack_int LAPACKE_zsyswapr_work (int matrix_layout, char uplo, lapack_int n, lapack_complex_double * a, lapack_int lda, lapack_int i1, lapack_int i2)
Definition at line 36 of file lapacke_zsyswapr_work.c.
LAPACKE_zsytrf— factorization era begins,ipivis literally the blueprint 🎀
lapack_int LAPACKE_zsytrf (int matrix_layout, char uplo, lapack_int n, lapack_complex_double * a, lapack_int lda, lapack_int * ipiv)
Definition at line 36 of file lapacke_zsytrf.c.
LAPACKE_zsytrf_aa—_aaremix, same signature, different aura 💜
lapack_int LAPACKE_zsytrf_aa (int matrix_layout, char uplo, lapack_int n, lapack_complex_double * a, lapack_int lda, lapack_int * ipiv)
Definition at line 36 of file lapacke_zsytrf_aa.c.
LAPACKE_zsytrf_aa_2stage— two-stage girlie withtb,ltb,ipivandipiv2— double the pivots, double the slay 🔥
lapack_int LAPACKE_zsytrf_aa_2stage (int matrix_layout, char uplo, lapack_int n, lapack_complex_double * a, lapack_int lda, lapack_complex_double * tb, lapack_int ltb, lapack_int * ipiv, lapack_int * ipiv2)
Definition at line 36 of file lapacke_zsytrf_aa_2stage.c.
LAPACKE_zsytrf_aa_2stage_work— the two-stage one but withwork/lworktagging along 🙈
lapack_int LAPACKE_zsytrf_aa_2stage_work (int matrix_layout, char uplo, lapack_int n, lapack_complex_double * a, lapack_int lda, lapack_complex_double * tb, lapack_int ltb, lapack_int * ipiv, lapack_int * ipiv2, lapack_complex_double * work, lapack_int lwork)
Definition at line 36 of file lapacke_zsytrf_aa_2stage_work.c.
LAPACKE_zsytrf_aa_work—_aawith the work array, obviously 💅
lapack_int LAPACKE_zsytrf_aa_work (int matrix_layout, char uplo, lapack_int n, lapack_complex_double * a, lapack_int lda, lapack_int * ipiv, lapack_complex_double * work, lapack_int lwork)
Definition at line 36 of file lapacke_zsytrf_aa_work.c.
LAPACKE_zsytrf_rk—_rkvariant carrying herealongsideipiv🦋
lapack_int LAPACKE_zsytrf_rk (int matrix_layout, char uplo, lapack_int n, lapack_complex_double * a, lapack_int lda, lapack_complex_double * e, lapack_int * ipiv)
Definition at line 36 of file lapacke_zsytrf_rk.c.
LAPACKE_zsytrf_rk_work— same_rksituation, now withworkandlwork🎀
lapack_int LAPACKE_zsytrf_rk_work (int matrix_layout, char uplo, lapack_int n, lapack_complex_double * a, lapack_int lda, lapack_complex_double * e, lapack_int * ipiv, lapack_complex_double * work, lapack_int lwork)
Definition at line 36 of file lapacke_zsytrf_rk_work.c.
LAPACKE_zsytrf_rook—rookremix of the factorization, clean and mean 🌟
lapack_int LAPACKE_zsytrf_rook (int matrix_layout, char uplo, lapack_int n, lapack_complex_double * a, lapack_int lda, lapack_int * ipiv)
Definition at line 36 of file lapacke_zsytrf_rook.c.
LAPACKE_zsytrf_rook_work—rookpluswork/lwork, because she doesn't do anything halfway 💖
lapack_int LAPACKE_zsytrf_rook_work (int matrix_layout, char uplo, lapack_int n, lapack_complex_double * a, lapack_int lda, lapack_int * ipiv, lapack_complex_double * work, lapack_int lwork)
Definition at line 36 of file lapacke_zsytrf_rook_work.c.
LAPACKE_zsytrf_work— plainzsytrfwith the work array invite 😌
lapack_int LAPACKE_zsytrf_work (int matrix_layout, char uplo, lapack_int n, lapack_complex_double * a, lapack_int lda, lapack_int * ipiv, lapack_complex_double * work, lapack_int lwork)
Definition at line 36 of file lapacke_zsytrf_work.c.
LAPACKE_zsytri— inverse time bestie,ipivcomes in asconst🎀
lapack_int LAPACKE_zsytri (int matrix_layout, char uplo, lapack_int n, lapack_complex_double * a, lapack_int lda, const lapack_int * ipiv)
Definition at line 36 of file lapacke_zsytri.c.
LAPACKE_zsytri2— the2version, same dish, extra garnish ✨
lapack_int LAPACKE_zsytri2 (int matrix_layout, char uplo, lapack_int n, lapack_complex_double * a, lapack_int lda, const lapack_int * ipiv)
Definition at line 36 of file lapacke_zsytri2.c.
LAPACKE_zsytri2_work—zsytri2withworkandlwork, thriving 💜
lapack_int LAPACKE_zsytri2_work (int matrix_layout, char uplo, lapack_int n, lapack_complex_double * a, lapack_int lda, const lapack_int * ipiv, lapack_complex_double * work, lapack_int lwork)
Definition at line 36 of file lapacke_zsytri2_work.c.
LAPACKE_zsytri2x— now withnb, a whole blocking parameter, fancy 🍓
lapack_int LAPACKE_zsytri2x (int matrix_layout, char uplo, lapack_int n, lapack_complex_double * a, lapack_int lda, const lapack_int * ipiv, lapack_int nb)
Definition at line 36 of file lapacke_zsytri2x.c.
LAPACKE_zsytri2x_work—zsytri2x+work+nb, the full trio 🌸
lapack_int LAPACKE_zsytri2x_work (int matrix_layout, char uplo, lapack_int n, lapack_complex_double * a, lapack_int lda, const lapack_int * ipiv, lapack_complex_double * work, lapack_int nb)
Definition at line 36 of file lapacke_zsytri2x_work.c.
LAPACKE_zsytri_3— the_3girlie, and note she takes aconst lapack_complex_double * etoo 👀
lapack_int LAPACKE_zsytri_3 (int matrix_layout, char uplo, lapack_int n, lapack_complex_double * a, lapack_int lda, const lapack_complex_double * e, const lapack_int * ipiv)
Definition at line 36 of file lapacke_zsytri_3.c.
LAPACKE_zsytri_3_work—_3withwork/lwork, because of course 💅
lapack_int LAPACKE_zsytri_3_work (int matrix_layout, char uplo, lapack_int n, lapack_complex_double * a, lapack_int lda, const lapack_complex_double * e, const lapack_int * ipiv, lapack_complex_double * work, lapack_int lwork)
Definition at line 36 of file lapacke_zsytri_3_work.c.
LAPACKE_zsytri_work— and hereworkis a pointer with nolwork, love that for her 🫶
lapack_int LAPACKE_zsytri_work (int matrix_layout, char uplo, lapack_int n, lapack_complex_double * a, lapack_int lda, const lapack_int * ipiv, lapack_complex_double * work)
Definition at line 36 of file lapacke_zsytri_work.c.
LAPACKE_zsytrs— solve szn,ipivisconst,bis on deck 🌈
lapack_int LAPACKE_zsytrs (int matrix_layout, char uplo, lapack_int n, lapack_int nrhs, const lapack_complex_double * a, lapack_int lda, const lapack_int * ipiv, lapack_complex_double * b, lapack_int ldb)
Definition at line 36 of file lapacke_zsytrs.c.
LAPACKE_zsytrs2— the2remix of the solve, same squad 😌
lapack_int LAPACKE_zsytrs2 (int matrix_layout, char uplo, lapack_int n, lapack_int nrhs, const lapack_complex_double * a, lapack_int lda, const lapack_int * ipiv, lapack_complex_double * b, lapack_int ldb)
Definition at line 36 of file lapacke_zsytrs2.c.
LAPACKE_zsytrs2_work—zsytrs2plus aworkpointer (nolworkhere, bestie, justwork) 🎀
lapack_int LAPACKE_zsytrs2_work (int matrix_layout, char uplo, lapack_int n, lapack_int nrhs, const lapack_complex_double * a, lapack_int lda, const lapack_int * ipiv, lapack_complex_double * b, lapack_int ldb, lapack_complex_double * work)
Definition at line 36 of file lapacke_zsytrs2_work.c.
LAPACKE_zsytrs_3—_3solve, draggingconst ... * ealong for the ride 💜
lapack_int LAPACKE_zsytrs_3 (int matrix_layout, char uplo, lapack_int n, lapack_int nrhs, const lapack_complex_double * a, lapack_int lda, const lapack_complex_double * e, const lapack_int * ipiv, lapack_complex_double * b, lapack_int ldb)
Definition at line 36 of file lapacke_zsytrs_3.c.
LAPACKE_zsytrs_3_work— same signature as_3up there, and yes that's on purpose, don't come for her 😭
lapack_int LAPACKE_zsytrs_3_work (int matrix_layout, char uplo, lapack_int n, lapack_int nrhs, const lapack_complex_double * a, lapack_int lda, const lapack_complex_double * e, const lapack_int * ipiv, lapack_complex_double * b, lapack_int ldb)
Definition at line 36 of file lapacke_zsytrs_3_work.c.
LAPACKE_zsytrs_aa—_aasolve, cleanconstenergy all the way through ⭐
lapack_int LAPACKE_zsytrs_aa (int matrix_layout, char uplo, lapack_int n, lapack_int nrhs, const lapack_complex_double * a, lapack_int lda, const lapack_int * ipiv, lapack_complex_double * b, lapack_int ldb)
Definition at line 36 of file lapacke_zsytrs_aa.c.
LAPACKE_zsytrs_aa_2stage— two-stage solve withtb,ltb,ipivandipiv2, she's booked and busy 🔥
lapack_int LAPACKE_zsytrs_aa_2stage (int matrix_layout, char uplo, lapack_int n, lapack_int nrhs, lapack_complex_double * a, lapack_int lda, lapack_complex_double * tb, lapack_int ltb, lapack_int * ipiv, lapack_int * ipiv2, lapack_complex_double * b, lapack_int ldb)
Definition at line 36 of file lapacke_zsytrs_aa_2stage.c.
LAPACKE_zsytrs_aa_2stage_work— identical parameter list to the non-_workone, and that's just how it is 🌸
lapack_int LAPACKE_zsytrs_aa_2stage_work (int matrix_layout, char uplo, lapack_int n, lapack_int nrhs, lapack_complex_double * a, lapack_int lda, lapack_complex_double * tb, lapack_int ltb, lapack_int * ipiv, lapack_int * ipiv2, lapack_complex_double * b, lapack_int ldb)
Definition at line 36 of file lapacke_zsytrs_aa_2stage_work.c.
LAPACKE_zsytrs_aa_work—_aasolve withworkandlworkback in the mix 🙈
lapack_int LAPACKE_zsytrs_aa_work (int matrix_layout, char uplo, lapack_int n, lapack_int nrhs, const lapack_complex_double * a, lapack_int lda, const lapack_int * ipiv, lapack_complex_double * b, lapack_int ldb, lapack_complex_double * work, lapack_int lwork)
Definition at line 36 of file lapacke_zsytrs_aa_work.c.
LAPACKE_zsytrs_rook— and therooksolve closes out this little batch, no cap 💖
lapack_int LAPACKE_zsytrs_rook (int matrix_layout, char uplo, lapack_int n, lapack_int nrhs, const lapack_complex_double * a, lapack_int lda, const lapack_int * ipiv, lapack_complex_double * b, lapack_int ldb)
Definition at line 36 of file lapacke_zsytrs_rook.c.
lapack_int LAPACKE_zsytrs_rook_work (int matrix_layout, char uplo, lapack_int n, lapack_int nrhs, const lapack_complex_double * a, lapack_int lda, const lapack_int * ipiv, lapack_complex_double * b, lapack_int ldb)
lapack_int LAPACKE_zsytrs_rook_work (int matrix_layout, char uplo,
lapack_int n, lapack_int nrhs, const lapack_complex_double * a,
lapack_int lda, const lapack_int * ipiv, lapack_complex_double * b,
lapack_int ldb)
Bestie, it's the _work twin of zsytrs_rook 💜 same args, same double-precision-complex vibes, and yeah — Definition at line 36 of file lapacke_zsytrs_rook_work.c. She's giving "I do the actual work while my non-_work sister takes the credit" ✨
lapack_int LAPACKE_zsytrs_work (int matrix_layout, char uplo, lapack_int n, lapack_int nrhs, const lapack_complex_double * a, lapack_int lda, const lapack_int * ipiv, lapack_complex_double * b, lapack_int ldb)
lapack_int LAPACKE_zsytrs_work (int matrix_layout, char uplo, lapack_int n,
lapack_int nrhs, const lapack_complex_double * a, lapack_int lda, const
lapack_int * ipiv, lapack_complex_double * b, lapack_int ldb)
The workspace-having solve for symmetric complex-double systems 🫶 Definition at line 36 of file lapacke_zsytrs_work.c. Same signature as her rook cousin, no additions, no surprises, slay 🎀
🦋 Triangular band — the ztb* girlies 🦋
lapack_int LAPACKE_ztbcon (int matrix_layout, char norm, char uplo, char diag, lapack_int n, lapack_int kd, const lapack_complex_double * ab, lapack_int ldab, double * rcond)
lapack_int LAPACKE_ztbcon (int matrix_layout, char norm, char uplo, char
diag, lapack_int n, lapack_int kd, const lapack_complex_double * ab,
lapack_int ldab, double * rcond)
Condition-number estimate for a triangular band matrix in complex double — that's what tb means, iykyk 💅 rcond comes back as a plain double, which honestly? iconic. Definition at line 36 of file lapacke_ztbcon.c ✨
lapack_int LAPACKE_ztbcon_work (int matrix_layout, char norm, char uplo, char diag, lapack_int n, lapack_int kd, const lapack_complex_double * ab, lapack_int ldab, double * rcond, lapack_complex_double * work, double * rwork)
lapack_int LAPACKE_ztbcon_work (int matrix_layout, char norm, char uplo,
char diag, lapack_int n, lapack_int kd, const lapack_complex_double *
ab, lapack_int ldab, double * rcond, lapack_complex_double * work,
double * rwork)
Same condition-number party but now you're bringing your own work AND rwork — two buffers, main character energy 👑 Definition at line 36 of file lapacke_ztbcon_work.c
lapack_int LAPACKE_ztbrfs (int matrix_layout, char uplo, char trans, char diag, lapack_int n, lapack_int kd, lapack_int nrhs, const lapack_complex_double * ab, lapack_int ldab, const lapack_complex_double * b, lapack_int ldb, const lapack_complex_double * x, lapack_int ldx, double * ferr, double * berr)
lapack_int LAPACKE_ztbrfs (int matrix_layout, char uplo, char trans, char
diag, lapack_int n, lapack_int kd, lapack_int nrhs, const
lapack_complex_double * ab, lapack_int ldab, const lapack_complex_double
* b, lapack_int ldb, const lapack_complex_double * x, lapack_int ldx,
double * ferr, double * berr)
Refinement time 🧚 triangular-band system gets checked against an improved solution x, and you get ferr + berr back so you know exactly how much to trust it, fr fr. Definition at line 36 of file lapacke_ztbrfs.c
lapack_int LAPACKE_ztbrfs_work (int matrix_layout, char uplo, char trans, char diag, lapack_int n, lapack_int kd, lapack_int nrhs, const lapack_complex_double * ab, lapack_int ldab, const lapack_complex_double * b, lapack_int ldb, const lapack_complex_double * x, lapack_int ldx, double * ferr, double * berr, lapack_complex_double * work, double * rwork)
lapack_int LAPACKE_ztbrfs_work (int matrix_layout, char uplo, char trans,
char diag, lapack_int n, lapack_int kd, lapack_int nrhs, const
lapack_complex_double * ab, lapack_int ldab, const lapack_complex_double
* b, lapack_int ldb, const lapack_complex_double * x, lapack_int ldx,
double * ferr, double * berr, lapack_complex_double * work, double *
rwork)
The refined version with your own work + rwork bolted on the end 🫶 same game, more buffers. Definition at line 36 of file lapacke_ztbrfs_work.c 💖
lapack_int LAPACKE_ztbtrs (int matrix_layout, char uplo, char trans, char diag, lapack_int n, lapack_int kd, lapack_int nrhs, const lapack_complex_double * ab, lapack_int ldab, lapack_complex_double * b, lapack_int ldb)
lapack_int LAPACKE_ztbtrs (int matrix_layout, char uplo, char trans, char
diag, lapack_int n, lapack_int kd, lapack_int nrhs, const
lapack_complex_double * ab, lapack_int ldab, lapack_complex_double * b,
lapack_int ldb)
Solving A*X = B when A is triangular-band complex double 🔥 b gets overwritten with the answer, which is lowkey the whole point. Definition at line 36 of file lapacke_ztbtrs.c ⭐
lapack_int LAPACKE_ztbtrs_work (int matrix_layout, char uplo, char trans, char diag, lapack_int n, lapack_int kd, lapack_int nrhs, const lapack_complex_double * ab, lapack_int ldab, lapack_complex_double * b, lapack_int ldb)
lapack_int LAPACKE_ztbtrs_work (int matrix_layout, char uplo, char trans,
char diag, lapack_int n, lapack_int kd, lapack_int nrhs, const
lapack_complex_double * ab, lapack_int ldab, lapack_complex_double * b,
lapack_int ldb)
Identical arg list to the non-_work one, no cap 🧢 Definition at line 36 of file lapacke_ztbtrs_work.c — same signature, different file name, and that's the tea ☕
🎀 RFP triangular squad — ztf* 🎀
lapack_int LAPACKE_ztfsm (int matrix_layout, char transr, char side, char uplo, char trans, char diag, lapack_int m, lapack_int n, lapack_complex_double alpha, const lapack_complex_double * a, lapack_complex_double * b, lapack_int ldb)
lapack_int LAPACKE_ztfsm (int matrix_layout, char transr, char side, char
uplo, char trans, char diag, lapack_int m, lapack_int n,
lapack_complex_double alpha, const lapack_complex_double * a,
lapack_complex_double * b, lapack_int ldb)
B := alpha*op(A)*B (or B*op(A), depending on side) where A is triangular in RFP storage 🌈 note the transr — that's the rectangular-full-pack thing, not a typo, iykyk. alpha is a lapack_complex_double. Definition at line 36 of file lapacke_ztfsm.c 💫
lapack_int LAPACKE_ztfsm_work (int matrix_layout, char transr, char side, char uplo, char trans, char diag, lapack_int m, lapack_int n, lapack_complex_double alpha, const lapack_complex_double * a, lapack_complex_double * b, lapack_int ldb)
lapack_int LAPACKE_ztfsm_work (int matrix_layout, char transr, char side,
char uplo, char trans, char diag, lapack_int m, lapack_int n,
lapack_complex_double alpha, const lapack_complex_double * a,
lapack_complex_double * b, lapack_int ldb)
The _work twin, same args verbatim, living her best life in her own file 💜 Definition at line 36 of file lapacke_ztfsm_work.c
lapack_int LAPACKE_ztftri (int matrix_layout, char transr, char uplo, char diag, lapack_int n, lapack_complex_double * a)
lapack_int LAPACKE_ztftri (int matrix_layout, char transr, char uplo, char
diag, lapack_int n, lapack_complex_double * a)
Inverse of a triangular matrix in RFP format ✨ a is in/out, n is the order, that's the whole vibe. Definition at line 36 of file lapacke_ztftri.c 🦋
lapack_int LAPACKE_ztftri_work (int matrix_layout, char transr, char uplo, char diag, lapack_int n, lapack_complex_double * a)
lapack_int LAPACKE_ztftri_work (int matrix_layout, char transr, char uplo,
char diag, lapack_int n, lapack_complex_double * a)
Same six args, same energy, _work in the filename 🫶 Definition at line 36 of file lapacke_ztftri_work.c
lapack_int LAPACKE_ztfttp (int matrix_layout, char transr, char uplo, lapack_int n, const lapack_complex_double * arf, lapack_complex_double * ap)
lapack_int LAPACKE_ztfttp (int matrix_layout, char transr, char uplo,
lapack_int n, const lapack_complex_double * arf, lapack_complex_double *
ap)
Copy time 💅 RFP-stored arf goes in, packed-triangular ap comes out. It's giving "translation layer between two storage girlies." Definition at line 36 of file lapacke_ztfttp.c 🎀
lapack_int LAPACKE_ztfttp_work (int matrix_layout, char transr, char uplo, lapack_int n, const lapack_complex_double * arf, lapack_complex_double * ap)
lapack_int LAPACKE_ztfttp_work (int matrix_layout, char transr, char uplo,
lapack_int n, const lapack_complex_double * arf, lapack_complex_double *
ap)
Exact same signature, _work edition 💖 Definition at line 36 of file lapacke_ztfttp_work.c
lapack_int LAPACKE_ztfttr (int matrix_layout, char transr, char uplo, lapack_int n, const lapack_complex_double * arf, lapack_complex_double * a, lapack_int lda)
lapack_int LAPACKE_ztfttr (int matrix_layout, char transr, char uplo,
lapack_int n, const lapack_complex_double * arf, lapack_complex_double *
a, lapack_int lda)
RFP → full rectangular triangle matrix, with lda because we're being proper about leading dimensions now 👑 Definition at line 36 of file lapacke_ztfttr.c ⭐
lapack_int LAPACKE_ztfttr_work (int matrix_layout, char transr, char uplo, lapack_int n, const lapack_complex_double * arf, lapack_complex_double * a, lapack_int lda)
lapack_int LAPACKE_ztfttr_work (int matrix_layout, char transr, char uplo,
lapack_int n, const lapack_complex_double * arf, lapack_complex_double *
a, lapack_int lda)
Same seven params, _work suffix, no notes 😌 Definition at line 36 of file lapacke_ztfttr_work.c 🌸
💀 Generalized eigen — the ztg* icons 👑
lapack_int LAPACKE_ztgevc (int matrix_layout, char side, char howmny, const lapack_logical * select, lapack_int n, const lapack_complex_double * s, lapack_int lds, const lapack_complex_double * p, lapack_int ldp, lapack_complex_double * vl, lapack_int ldvl, lapack_complex_double * vr, lapack_int ldvr, lapack_int mm, lapack_int * m)
lapack_int LAPACKE_ztgevc (int matrix_layout, char side, char howmny, const
lapack_logical * select, lapack_int n, const lapack_complex_double * s,
lapack_int lds, const lapack_complex_double * p, lapack_int ldp,
lapack_complex_double * vl, lapack_int ldvl, lapack_complex_double * vr,
lapack_int ldvr, lapack_int mm, lapack_int * m)
Computes eigenvectors of a complex-double pencil (S, P) 😭 howmny decides whether you want all of them or just the ones flagged in select, mm is your column budget for vl/vr, and m tells you how many you actually got. Definition at line 36 of file lapacke_ztgevc.c 🔥
lapack_int LAPACKE_ztgevc_work (int matrix_layout, char side, char howmny, const lapack_logical * select, lapack_int n, const lapack_complex_double * s, lapack_int lds, const lapack_complex_double * p, lapack_int ldp, lapack_complex_double * vl, lapack_int ldvl, lapack_complex_double * vr, lapack_int ldvr, lapack_int mm, lapack_int * m, lapack_complex_double * work, double * rwork)
lapack_int LAPACKE_ztgevc_work (int matrix_layout, char side, char howmny,
const lapack_logical * select, lapack_int n, const lapack_complex_double
* s, lapack_int lds, const lapack_complex_double * p, lapack_int ldp,
lapack_complex_double * vl, lapack_int ldvl, lapack_complex_double * vr,
lapack_int ldvr, lapack_int mm, lapack_int * m, lapack_complex_double *
work, double * rwork)
Same as above but you're supplying work and rwork yourself because you're an independent queen 💅 Definition at line 36 of file lapacke_ztgevc_work.c 🫶
lapack_int LAPACKE_ztgexc (int matrix_layout, lapack_logical wantq, lapack_logical wantz, lapack_int n, lapack_complex_double * a, lapack_int lda, lapack_complex_double * b, lapack_int ldb, lapack_complex_double * q, lapack_int ldq, lapack_complex_double * z, lapack_int ldz, lapack_int ifst, lapack_int ilst)
lapack_int LAPACKE_ztgexc (int matrix_layout, lapack_logical wantq,
lapack_logical wantz, lapack_int n, lapack_complex_double * a,
lapack_int lda, lapack_complex_double * b, lapack_int ldb,
lapack_complex_double * q, lapack_int ldq, lapack_complex_double * z,
lapack_int ldz, lapack_int ifst, lapack_int ilst)
Swaps diagonal blocks ifst and ilst in a generalized Schur form, and wantq/wantz say whether q and z come along for the ride ✨ Definition at line 36 of file lapacke_ztgexc.c 🌈
lapack_int LAPACKE_ztgexc_work (int matrix_layout, lapack_logical wantq, lapack_logical wantz, lapack_int n, lapack_complex_double * a, lapack_int lda, lapack_complex_double * b, lapack_int ldb, lapack_complex_double * q, lapack_int ldq, lapack_complex_double * z, lapack_int ldz, lapack_int ifst, lapack_int ilst)
lapack_int LAPACKE_ztgexc_work (int matrix_layout, lapack_logical wantq,
lapack_logical wantz, lapack_int n, lapack_complex_double * a,
lapack_int lda, lapack_complex_double * b, lapack_int ldb,
lapack_complex_double * q, lapack_int ldq, lapack_complex_double * z,
lapack_int ldz, lapack_int ifst, lapack_int ilst)
Yep, identical param list, _work file 🧚 Definition at line 36 of file lapacke_ztgexc_work.c
lapack_int LAPACKE_ztgsen (int matrix_layout, lapack_int ijob, lapack_logical wantq, lapack_logical wantz, const lapack_logical * select, lapack_int n, lapack_complex_double * a, lapack_int lda, lapack_complex_double * b, lapack_int ldb, lapack_complex_double * alpha, lapack_complex_double * beta, lapack_complex_double * q, lapack_int ldq, lapack_complex_double * z, lapack_int ldz, lapack_int * m, double * pl, double * pr, double * dif)
lapack_int LAPACKE_ztgsen (int matrix_layout, lapack_int ijob,
lapack_logical wantq, lapack_logical wantz, const lapack_logical *
select, lapack_int n, lapack_complex_double * a, lapack_int lda,
lapack_complex_double * b, lapack_int ldb, lapack_complex_double *
alpha, lapack_complex_double * beta, lapack_complex_double * q,
lapack_int ldq, lapack_complex_double * z, lapack_int ldz, lapack_int *
m, double * pl, double * pr, double * dif)
Reorders the generalized Schur decomposition so your selected eigenvalues are up front 👑 ijob controls whether you get pl/pr condition numbers, dif differences, or both. Definition at line 36 of file lapacke_ztgsen.c 💀
lapack_int LAPACKE_ztgsen_work (int matrix_layout, lapack_int ijob, lapack_logical wantq, lapack_logical wantz, const lapack_logical * select, lapack_int n, lapack_complex_double * a, lapack_int lda, lapack_complex_double * b, lapack_int ldb, lapack_complex_double * alpha, lapack_complex_double * beta, lapack_complex_double * q, lapack_int ldq, lapack_complex_double * z, lapack_int ldz, lapack_int * m, double * pl, double * pr, double * dif, lapack_complex_double * work, lapack_int lwork, lapack_int * iwork, lapack_int liwork)
lapack_int LAPACKE_ztgsen_work (int matrix_layout, lapack_int ijob,
lapack_logical wantq, lapack_logical wantz, const lapack_logical *
select, lapack_int n, lapack_complex_double * a, lapack_int lda,
lapack_complex_double * b, lapack_int ldb, lapack_complex_double *
alpha, lapack_complex_double * beta, lapack_complex_double * q,
lapack_int ldq, lapack_complex_double * z, lapack_int ldz, lapack_int *
m, double * pl, double * pr, double * dif, lapack_complex_double * work,
lapack_int lwork, lapack_int * iwork, lapack_int liwork)
The full manual-buffer edition: work + lwork + iwork + liwork all handed over by you, bestie 🫶 Definition at line 36 of file lapacke_ztgsen_work.c 🌟
lapack_int LAPACKE_ztgsja (int matrix_layout, char jobu, char jobv, char jobq, lapack_int m, lapack_int p, lapack_int n, lapack_int k, lapack_int l, lapack_complex_double * a, lapack_int lda, lapack_complex_double * b, lapack_int ldb, double tola, double tolb, double * alpha, double * beta, lapack_complex_double * u, lapack_int ldu, lapack_complex_double * v, lapack_int ldv, lapack_complex_double * q, lapack_int ldq, lapack_int * ncycle)
lapack_int LAPACKE_ztgsja (int matrix_layout, char jobu, char jobv, char
jobq, lapack_int m, lapack_int p, lapack_int n, lapack_int k, lapack_int
l, lapack_complex_double * a, lapack_int lda, lapack_complex_double * b,
lapack_int ldb, double tola, double tolb, double * alpha, double * beta,
lapack_complex_double * u, lapack_int ldu, lapack_complex_double * v,
lapack_int ldv, lapack_complex_double * q, lapack_int ldq, lapack_int *
ncycle)
Generalized SVD via the Kogbetliantz-style Jacobi grind 🔥 jobu/jobv/jobq tell her which of u, v, q you actually want computed, tola/tolb are your tolerances, and ncycle reports how many sweeps it took. Definition at line 36 of file lapacke_ztgsja.c ⭐
lapack_int LAPACKE_ztgsja_work (int matrix_layout, char jobu, char jobv, char jobq, lapack_int m, lapack_int p, lapack_int n, lapack_int k, lapack_int l, lapack_complex_double * a, lapack_int lda, lapack_complex_double * b, lapack_int ldb, double tola, double tolb, double * alpha, double * beta, lapack_complex_double * u, lapack_int ldu, lapack_complex_double * v, lapack_int ldv, lapack_complex_double * q, lapack_int ldq, lapack_complex_double * work, lapack_int * ncycle)
lapack_int LAPACKE_ztgsja_work (int matrix_layout, char jobu, char jobv,
char jobq, lapack_int m, lapack_int p, lapack_int n, lapack_int k,
lapack_int l, lapack_complex_double * a, lapack_int lda,
lapack_complex_double * b, lapack_int ldb, double tola, double tolb,
double * alpha, double * beta, lapack_complex_double * u, lapack_int
ldu, lapack_complex_double * v, lapack_int ldv, lapack_complex_double *
q, lapack_int ldq, lapack_complex_double * work, lapack_int * ncycle)
Same generalized-SVD situation, except a work buffer slides in right before ncycle 💅 Definition at line 36 of file lapacke_ztgsja_work.c 🎀
lapack_int LAPACKE_ztgsna (int matrix_layout, char job, char howmny, const lapack_logical * select, lapack_int n, const lapack_complex_double * a, lapack_int lda, const lapack_complex_double * b, lapack_int ldb, const lapack_complex_double * vl, lapack_int ldvl, const lapack_complex_double * vr, lapack_int ldvr, double * s, double * dif, lapack_int mm, lapack_int * m)
lapack_int LAPACKE_ztgsna (int matrix_layout, char job, char howmny, const
lapack_logical * select, lapack_int n, const lapack_complex_double * a,
lapack_int lda, const lapack_complex_double * b, lapack_int ldb, const
lapack_complex_double * vl, lapack_int ldvl, const lapack_complex_double
* vr, lapack_int ldvr, double * s, double * dif, lapack_int mm,
lapack_int * m)
Eigenvalue condition numbers for the pencil (A, B) 😭 job picks whether you're here for s, dif, or both, howmny + select narrow it down, mm caps the eigenvector columns and m reports the count. Definition at line 36 of file lapacke_ztgsna.c 💖
lapack_int LAPACKE_ztgsna_work (int matrix_layout, char job, char howmny, const lapack_logical * select, lapack_int n, const lapack_complex_double * a, lapack_int lda, const lapack_complex_double * b, lapack_int ldb, const lapack_complex_double * vl, lapack_int ldvl, const lapack_complex_double * vr, lapack_int ldvr, double * s, double * dif, lapack_int mm, lapack_int * m, lapack_complex_double * work, lapack_int lwork, lapack_int * iwork)
lapack_int LAPACKE_ztgsna_work (int matrix_layout, char job, char howmny,
const lapack_logical * select, lapack_int n, const lapack_complex_double
* a, lapack_int lda, const lapack_complex_double * b, lapack_int ldb,
const lapack_complex_double * vl, lapack_int ldvl, const
lapack_complex_double * vr, lapack_int ldvr, double * s, double * dif,
lapack_int mm, lapack_int * m, lapack_complex_double * work, lapack_int
lwork, lapack_int * iwork)
Condition numbers, but DIY buffers: work, lwork, iwork — collect all three 🫶 Definition at line 36 of file lapacke_ztgsna_work.c 🦋
lapack_int LAPACKE_ztgsyl (int matrix_layout, char trans, lapack_int ijob, lapack_int m, lapack_int n, const lapack_complex_double * a, lapack_int lda, const lapack_complex_double * b, lapack_int ldb, lapack_complex_double * c, lapack_int ldc, const lapack_complex_double * d, lapack_int ldd, const lapack_complex_double * e, lapack_int lde, lapack_complex_double * f, lapack_int ldf, double * scale, double * dif)
lapack_int LAPACKE_ztgsyl (int matrix_layout, char trans, lapack_int ijob,
lapack_int m, lapack_int n, const lapack_complex_double * a, lapack_int
lda, const lapack_complex_double * b, lapack_int ldb,
lapack_complex_double * c, lapack_int ldc, const lapack_complex_double *
d, lapack_int ldd, const lapack_complex_double * e, lapack_int lde,
lapack_complex_double * f, lapack_int ldf, double * scale, double * dif)
Solves the Sylvester-ish equation for the pencils (A, D) and (B, E), and hands you back scale plus dif 🔥 six matrices total, she's booked and busy. Definition at line 36 of file lapacke_ztgsyl.c 👑
lapack_int LAPACKE_ztgsyl_work (int matrix_layout, char trans, lapack_int ijob, lapack_int m, lapack_int n, const lapack_complex_double * a, lapack_int lda, const lapack_complex_double * b, lapack_int ldb, lapack_complex_double * c, lapack_int ldc, const lapack_complex_double * d, lapack_int ldd, const lapack_complex_double * e, lapack_int lde, lapack_complex_double * f, lapack_int ldf, double * scale, double * dif, lapack_complex_double * work, lapack_int lwork, lapack_int * iwork)
lapack_int LAPACKE_ztgsyl_work (int matrix_layout, char trans, lapack_int
ijob, lapack_int m, lapack_int n, const lapack_complex_double * a,
lapack_int lda, const lapack_complex_double * b, lapack_int ldb,
lapack_complex_double * c, lapack_int ldc, const lapack_complex_double *
d, lapack_int ldd, const lapack_complex_double * e, lapack_int lde,
lapack_complex_double * f, lapack_int ldf, double * scale, double * dif,
lapack_complex_double * work, lapack_int lwork, lapack_int * iwork)
Add work/lwork/iwork and you've got the _work version, periodt 💜 Definition at line 36 of file lapacke_ztgsyl_work.c ⭐
🌸 Packed triangular girlies — ztp* 🌸
lapack_int LAPACKE_ztpcon (int matrix_layout, char norm, char uplo, char diag, lapack_int n, const lapack_complex_double * ap, double * rcond)
lapack_int LAPACKE_ztpcon (int matrix_layout, char norm, char uplo, char
diag, lapack_int n, const lapack_complex_double * ap, double * rcond)
Condition number estimate for a packed triangular complex-double matrix — ap is the packed storage, rcond comes back as a double 💅 Definition at line 36 of file lapacke_ztpcon.c ✨
lapack_int LAPACKE_ztpcon_work (int matrix_layout, char norm, char uplo, char diag, lapack_int n, const lapack_complex_double * ap, double * rcond, lapack_complex_double * work, double * rwork)
lapack_int LAPACKE_ztpcon_work (int matrix_layout, char norm, char uplo,
char diag, lapack_int n, const lapack_complex_double * ap, double *
rcond, lapack_complex_double * work, double * rwork)
Same packed condition-number check, now with work and rwork appended 🫶 Definition at line 36 of file lapacke_ztpcon_work.c 🎀
lapack_int LAPACKE_ztpmqrt (int matrix_layout, char side, char trans, lapack_int m, lapack_int n, lapack_int k, lapack_int l, lapack_int nb, const lapack_complex_double * v, lapack_int ldv, const lapack_complex_double * t, lapack_int ldt, lapack_complex_double * a, lapack_int lda, lapack_complex_double * b, lapack_int ldb)
lapack_int LAPACKE_ztpmqrt (int matrix_layout, char side, char trans,
lapack_int m, lapack_int n, lapack_int k, lapack_int l, lapack_int nb,
const lapack_complex_double * v, lapack_int ldv, const
lapack_complex_double * t, lapack_int ldt, lapack_complex_double * a,
lapack_int lda, lapack_complex_double * b, lapack_int ldb)
Applies a complex-double block reflector (v + t) to a packed a and a rectangular b 🔥 side, trans, nb — she's got range, fr fr. Definition at line 36 of file lapacke_ztpmqrt.c 💖
🫶 LAPACKE_ztpmqrt_work
lapack_int LAPACKE_ztpmqrt_work (int matrix_layout, char side, char trans, lapack_int m, lapack_int n, lapack_int k, lapack_int l, lapack_int nb, const lapack_complex_double * v, lapack_int ldv, const lapack_complex_double * t, lapack_int ldt, lapack_complex_double * a, lapack_int lda, lapack_complex_double * b, lapack_int ldb, lapack_complex_double * work)
okay so this is the _work sibling of ztpmqrt — the one where you bring the scratch space, bestie. All the usual suspects are here: matrix_layout, side, trans, then the dims m, n, k, l, the blocking factor nb, the const inputs v/t with their ldv/ldt, the outputs a/b with lda/ldb, and of course work at the end carrying the payload. 💅
Definition at line 36 of file lapacke_ztpmqrt_work.c.
🌸 LAPACKE_ztpqrt
lapack_int LAPACKE_ztpqrt (int matrix_layout, lapack_int m, lapack_int n, lapack_int l, lapack_int nb, lapack_complex_double * a, lapack_int lda, lapack_complex_double * b, lapack_int ldb, lapack_complex_double * t, lapack_int ldt)
the QR factorization-flavored one, no _work energy, she handles her own internals. you pass matrix_layout, m, n, l, nb, then a/lda, b/ldb, and the t factor with ldt. iconic. ✨
Definition at line 36 of file lapacke_ztpqrt.c.
🦋 LAPACKE_ztpqrt2
lapack_int LAPACKE_ztpqrt2 (int matrix_layout, lapack_int m, lapack_int n, lapack_int l, lapack_complex_double * a, lapack_int lda, lapack_complex_double * b, lapack_int ldb, lapack_complex_double * t, lapack_int ldt)
ztpqrt2 is the "2" version — note the missing nb bestie, no blocking param here, she's built different. still got matrix_layout, m, n, l, a/lda, b/ldb, t/ldt though. 💜
Definition at line 36 of file lapacke_ztpqrt2.c.
🎀 LAPACKE_ztpqrt2_work
lapack_int LAPACKE_ztpqrt2_work (int matrix_layout, lapack_int m, lapack_int n, lapack_int l, lapack_complex_double * a, lapack_int lda, lapack_complex_double * b, lapack_int ldb, lapack_complex_double * t, lapack_int ldt)
exactly the same roster of arguments as LAPACKE_ztpqrt2 — matrix_layout, m, n, l, a/lda, b/ldb, t/ldt — but she's the _work variant. same squad, different filing cabinet. 🗂️
Definition at line 36 of file lapacke_ztpqrt2_work.c.
🌈 LAPACKE_ztpqrt_work
lapack_int LAPACKE_ztpqrt_work (int matrix_layout, lapack_int m, lapack_int n, lapack_int l, lapack_int nb, lapack_complex_double * a, lapack_int lda, lapack_complex_double * b, lapack_int ldb, lapack_complex_double * t, lapack_int ldt, lapack_complex_double * work)
yup, ztpqrt again but now with work riding along at the end 🫶 — everything else is unchanged: matrix_layout, m, n, l, nb, a/lda, b/ldb, t/ldt.
Definition at line 36 of file lapacke_ztpqrt_work.c.
💅 LAPACKE_ztprfb
lapack_int LAPACKE_ztprfb (int matrix_layout, char side, char trans, char direct, char storev, lapack_int m, lapack_int n, lapack_int k, lapack_int l, const lapack_complex_double * v, lapack_int ldv, const lapack_complex_double * t, lapack_int ldt, lapack_complex_double * a, lapack_int lda, lapack_complex_double * b, lapack_int ldb)
the triangular packed "apply" routine — she's got a whole personality lineup of char args: side, trans, direct, storev, plus dims m, n, k, l. then the const v/ldv and t/ldt, and the mutable a/lda, b/ldb. main character behavior fr. 👑
Definition at line 36 of file lapacke_ztprfb.c.
🔥 LAPACKE_ztprfb_work
lapack_int LAPACKE_ztprfb_work (int matrix_layout, char side, char trans, char direct, char storev, lapack_int m, lapack_int n, lapack_int k, lapack_int l, const lapack_complex_double * v, lapack_int ldv, const lapack_complex_double * t, lapack_int ldt, lapack_complex_double * a, lapack_int lda, lapack_complex_double * b, lapack_int ldb, lapack_complex_double * work, lapack_int ldwork)
the _work glow-up of ztprfb — same side, trans, direct, storev, m, n, k, l, v/ldv, t/ldt, a/lda, b/ldb, and then she brings work and ldwork to the party. two extra guests, no cap. 🎉
Definition at line 36 of file lapacke_ztprfb_work.c.
⭐ LAPACKE_ztprfs
lapack_int LAPACKE_ztprfs (int matrix_layout, char uplo, char trans, char diag, lapack_int n, lapack_int nrhs, const lapack_complex_double * ap, const lapack_complex_double * b, lapack_int ldb, const lapack_complex_double * x, lapack_int ldx, double * ferr, double * berr)
refinement time 💖 — this one computes error bounds, so she takes ferr and berr as double * outputs at the end. before those: matrix_layout, uplo, trans, diag, n, nrhs, const ap, const b/ldb, const x/ldx. so many consts.
Definition at line 36 of file lapacke_ztprfs.c.
🍓 LAPACKE_ztprfs_work
lapack_int LAPACKE_ztprfs_work (int matrix_layout, char uplo, char trans, char diag, lapack_int n, lapack_int nrhs, const lapack_complex_double * ap, const lapack_complex_double * b, lapack_int ldb, const lapack_complex_double * x, lapack_int ldx, double * ferr, double * berr, lapack_complex_double * work, double * rwork)
same as LAPACKE_ztprfs — matrix_layout, uplo, trans, diag, n, nrhs, ap, b/ldb, x/ldx, ferr, berr — but now with work (complex) and rwork (real) tacked on because she does her own bookkeeping. ✨
Definition at line 36 of file lapacke_ztprfs_work.c.
🧚 LAPACKE_ztptri
lapack_int LAPACKE_ztptri (int matrix_layout, char uplo, char diag, lapack_int n, lapack_complex_double * ap)
inverse of a triangular packed matrix, short and sweet. matrix_layout, uplo, diag, n, and the packed ap that gets overwritten in place. tiny cast, big impact. 🎀
Definition at line 36 of file lapacke_ztptri.c.
🌸 LAPACKE_ztptri_work
lapack_int LAPACKE_ztptri_work (int matrix_layout, char uplo, char diag, lapack_int n, lapack_complex_double * ap)
identical argument list to LAPACKE_ztptri — matrix_layout, uplo, diag, n, ap — she's just the _work entry. same energy, different filename. 🦋
Definition at line 36 of file lapacke_ztptri_work.c.
💜 LAPACKE_ztptrs
lapack_int LAPACKE_ztptrs (int matrix_layout, char uplo, char trans, char diag, lapack_int n, lapack_int nrhs, const lapack_complex_double * ap, lapack_complex_double * b, lapack_int ldb)
triangular packed solve — she takes matrix_layout, uplo, trans, diag, n, nrhs, const ap, and the mutable b/ldb that comes back solved. work smarter not harder bestie. 💅
Definition at line 36 of file lapacke_ztptrs.c.
🫶 LAPACKE_ztptrs_work
lapack_int LAPACKE_ztptrs_work (int matrix_layout, char uplo, char trans, char diag, lapack_int n, lapack_int nrhs, const lapack_complex_double * ap, lapack_complex_double * b, lapack_int ldb)
same signature as LAPACKE_ztptrs: matrix_layout, uplo, trans, diag, n, nrhs, ap, b, ldb. the _work twin strikes again. 😭
Definition at line 36 of file lapacke_ztptrs_work.c.
🌈 LAPACKE_ztpttf
lapack_int LAPACKE_ztpttf (int matrix_layout, char transr, char uplo, lapack_int n, const lapack_complex_double * ap, lapack_complex_double * arf)
packed → rectangular full (RFP) conversion, iykyk. args are matrix_layout, transr, uplo, n, const ap, and the arf output. she's a format-shifter, a real transformer. 🦋
Definition at line 36 of file lapacke_ztpttf.c.
⭐ LAPACKE_ztpttf_work
lapack_int LAPACKE_ztpttf_work (int matrix_layout, char transr, char uplo, lapack_int n, const lapack_complex_double * ap, lapack_complex_double * arf)
same cast as LAPACKE_ztpttf — matrix_layout, transr, uplo, n, ap, arf — just the _work name tag. 🌟
Definition at line 36 of file lapacke_ztpttf_work.c.
🎀 LAPACKE_ztpttr
lapack_int LAPACKE_ztpttr (int matrix_layout, char uplo, lapack_int n, const lapack_complex_double * ap, lapack_complex_double * a, lapack_int lda)
the reverse vibe of ztpttf — packed goes back to full triangular-ish storage. matrix_layout, uplo, n, const ap, output a/lda. iconic little unpacking moment. 🍓
Definition at line 36 of file lapacke_ztpttr.c.
🧚 LAPACKE_ztpttr_work
lapack_int LAPACKE_ztpttr_work (int matrix_layout, char uplo, lapack_int n, const lapack_complex_double * ap, lapack_complex_double * a, lapack_int lda)
literally the same args as LAPACKE_ztpttr: matrix_layout, uplo, n, ap, a, lda. nothing new, just the _work badge. 💜
Definition at line 36 of file lapacke_ztpttr_work.c.
👑 LAPACKE_ztrcon
lapack_int LAPACKE_ztrcon (int matrix_layout, char norm, char uplo, char diag, lapack_int n, const lapack_complex_double * a, lapack_int lda, double * rcond)
condition number estimator for a triangular matrix — she gives you rcond as a double * at the end 🫶. before that: matrix_layout, norm, uplo, diag, n, const a, lda. precision queen.
Definition at line 36 of file lapacke_ztrcon.c.
🔥 LAPACKE_ztrcon_work
lapack_int LAPACKE_ztrcon_work (int matrix_layout, char norm, char uplo, char diag, lapack_int n, const lapack_complex_double * a, lapack_int lda, double * rcond, lapack_complex_double * work, double * rwork)
ztrcon but she's carrying her own bags: matrix_layout, norm, uplo, diag, n, a/lda, rcond, plus work and rwork. slay. 💅
Definition at line 36 of file lapacke_ztrcon_work.c.
🦋 LAPACKE_ztrevc
lapack_int LAPACKE_ztrevc (int matrix_layout, char side, char howmny, const lapack_logical * select, lapack_int n, lapack_complex_double * t, lapack_int ldt, lapack_complex_double * vl, lapack_int ldvl, lapack_complex_double * vr, lapack_int ldvr, lapack_int mm, lapack_int * m)
eigenvector central right here 🌈 — note the lapack_logical * select const pointer, the side and howmny chars, n, t/ldt, vl/ldvl, vr/ldvr, mm, and the m output pointer. two outputs live in this house.
Definition at line 36 of file lapacke_ztrevc.c.
🌟 LAPACKE_ztrevc_work
lapack_int LAPACKE_ztrevc_work (int matrix_layout, char side, char howmny, const lapack_logical * select, lapack_int n, lapack_complex_double * t, lapack_int ldt, lapack_complex_double * vl, lapack_int ldvl, lapack_complex_double * vr, lapack_int ldvr, lapack_int mm, lapack_int * m, lapack_complex_double * work, double * rwork)
ztrevc with the workspace flex: everything from matrix_layout through m is the same — side, howmny, select, n, t/ldt, vl/ldvl, vr/ldvr, mm, m — plus work and rwork on the tail. 💖
Definition at line 36 of file lapacke_ztrevc_work.c.
🎀 LAPACKE_ztrexc
lapack_int LAPACKE_ztrexc (int matrix_layout, char compq, lapack_int n, lapack_complex_double * t, lapack_int ldt, lapack_complex_double * q, lapack_int ldq, lapack_int ifst, lapack_int ilst)
reorders that Schur form, bestie — she shuffles things from position ifst to ilst and doesn't apologize. args: matrix_layout, compq, n, t/ldt, q/ldq, ifst, ilst. 🌀
Definition at line 36 of file lapacke_ztrexc.c.
💜 LAPACKE_ztrexc_work
lapack_int LAPACKE_ztrexc_work (int matrix_layout, char compq, lapack_int n, lapack_complex_double * t, lapack_int ldt, lapack_complex_double * q, lapack_int ldq, lapack_int ifst, lapack_int ilst)
exact same roster as LAPACKE_ztrexc — matrix_layout, compq, n, t/ldt, q/ldq, ifst, ilst — just with _work in the name. no notes. 🫶
Definition at line 36 of file lapacke_ztrexc_work.c.
🍓 LAPACKE_ztrrfs
lapack_int LAPACKE_ztrrfs (int matrix_layout, char uplo, char trans, char diag, lapack_int n, lapack_int nrhs, const lapack_complex_double * a, lapack_int lda, const lapack_complex_double * b, lapack_int ldb, const lapack_complex_double * x, lapack_int ldx, double * ferr, double * berr)
triangular refinement, so ferr and berr are the whole point 🎯. she needs matrix_layout, uplo, trans, diag, n, nrhs, const a/lda, const b/ldb, const x/ldx. lots of consts, lots of trust.
Definition at line 36 of file lapacke_ztrrfs.c.
✨ LAPACKE_ztrrfs_work
lapack_int LAPACKE_ztrrfs_work (int matrix_layout, char uplo, char trans, char diag, lapack_int n, lapack_int nrhs, const lapack_complex_double * a, lapack_int lda, const lapack_complex_double * b, lapack_int ldb, const lapack_complex_double * x, lapack_int ldx, double * ferr, double * berr, lapack_complex_double * work, double * rwork)
ztrrfs + work + rwork. the rest is untouched: matrix_layout, uplo, trans, diag, n, nrhs, a/lda, b/ldb, x/ldx, ferr, berr. 💅
Definition at line 36 of file lapacke_ztrrfs_work.c.
👑 LAPACKE_ztrsen
lapack_int LAPACKE_ztrsen (int matrix_layout, char job, char compq, const lapack_logical * select, lapack_int n, lapack_complex_double * t, lapack_int ldt, lapack_complex_double * q, lapack_int ldq, lapack_complex_double * w, lapack_int * m, double * s, double * sep)
reorder + condition estimate, the triple-threat 💀. matrix_layout, job, compq, const select (lapack_logical *), n, t/ldt, q/ldq, w, and then the outputs m, s, sep — all pointers, she's not copying anything for free.
Definition at line 36 of file lapacke_ztrsen.c.
🔥 LAPACKE_ztrsen_work
lapack_int LAPACKE_ztrsen_work (int matrix_layout, char job, char compq, const lapack_logical * select, lapack_int n, lapack_complex_double * t, lapack_int ldt, lapack_complex_double * q, lapack_int ldq, lapack_complex_double * w, lapack_int * m, double * s, double * sep, lapack_complex_double * work, lapack_int lwork)
same as LAPACKE_ztrsen all the way through sep — matrix_layout, job, compq, select, n, t/ldt, q/ldq, w, m, s, sep — and then she asks for work and lwork too. queen of preparedness. 🌈
Definition at line 36 of file lapacke_ztrsen_work.c.
🦋 LAPACKE_ztrsna
lapack_int LAPACKE_ztrsna (int matrix_layout, char job, char howmny, const lapack_logical * select, lapack_int n, const lapack_complex_double * t, lapack_int ldt, const lapack_complex_double * vl, lapack_int ldvl, const lapack_complex_double * vr, lapack_int ldvr, double * s, double * sep, lapack_int mm, lapack_int * m)
estimates s and sep for selected eigenvalues 🫶 — everything is const except the outputs. args: matrix_layout, job, howmny, select, n, t/ldt, vl/ldvl, vr/ldvr, s, sep, mm, m. big cast, all business.
Definition at line 36 of file lapacke_ztrsna.c.
🌟 LAPACKE_ztrsna_work
lapack_int LAPACKE_ztrsna_work (int matrix_layout, char job, char howmny, const lapack_logical * select, lapack_int n, const lapack_complex_double * t, lapack_int ldt, const lapack_complex_double * vl, lapack_int ldvl, const lapack_complex_double * vr, lapack_int ldvr, double * s, double * sep, lapack_int mm, lapack_int * m, lapack_complex_double * work, lapack_int ldwork, double * rwork)
ztrsna but she brings work, ldwork, and rwork 🎒. the front half is identical: matrix_layout, job, howmny, select, n, t/ldt, vl/ldvl, vr/ldvr, s, sep, mm, m.
Definition at line 36 of file lapacke_ztrsna_work.c.
💜 LAPACKE_ztrsyl
lapack_int LAPACKE_ztrsyl (int matrix_layout, char trana, char tranb, lapack_int isgn, lapack_int m, lapack_int n, const lapack_complex_double * a, lapack_int lda, const lapack_complex_double * b, lapack_int ldb, lapack_complex_double * c, lapack_int ldc, double * scale)
Sylvester equation solver, periodt. 🌀 she takes matrix_layout, trana, tranb, isgn, m, n, const a/lda, const b/ldb, the mutable c/ldc, and the scale output at the end — that last one's important, don't lose her.
Definition at line 36 of file lapacke_ztrsyl.c.
🎀 LAPACKE_ztrsyl_work
lapack_int LAPACKE_ztrsyl_work (int matrix_layout, char trana, char tranb, lapack_int isgn, lapack_int m, lapack_int n, const lapack_complex_double * a, lapack_int lda, const lapack_complex_double * b, lapack_int ldb, lapack_complex_double * c, lapack_int ldc, double * scale)
identical argument list to LAPACKE_ztrsyl — matrix_layout, trana, tranb, isgn, m, n, a/lda, b/ldb, c/ldc, scale. _work suffix only, no plot twist. ✨
Definition at line 36 of file lapacke_ztrsyl_work.c.
🍓 LAPACKE_ztrtri
lapack_int LAPACKE_ztrtri (int matrix_layout, char uplo, char diag, lapack_int n, lapack_complex_double * a, lapack_int lda)
inverts a triangular matrix in place, ngl she's efficient like that. matrix_layout, uplo, diag, n, and a/lda getting completely rewritten. 💅
Definition at line 36 of file lapacke_ztrtri.c.
🧚 LAPACKE_ztrtri_work
lapack_int LAPACKE_ztrtri_work (int matrix_layout, char uplo, char diag, lapack_int n, lapack_complex_double * a, lapack_int lda)
same as LAPACKE_ztrtri: matrix_layout, uplo, diag, n, a, lda. just the _work version being her usual self. 🌸
Definition at line 36 of file lapacke_ztrtri_work.c.
⭐ LAPACKE_ztrtrs
lapack_int LAPACKE_ztrtrs (int matrix_layout, char uplo, char trans, char diag, lapack_int n, lapack_int nrhs, const lapack_complex_double * a, lapack_int lda, lapack_complex_double * b, lapack_int ldb)
triangular solve, the classic 🫶. matrix_layout, uplo, trans, diag, n, nrhs, const a/lda, and b/ldb which comes home solved. we love a working relationship.
Definition at line 36 of file lapacke_ztrtrs.c.
🌈 LAPACKE_ztrtrs_work
lapack_int LAPACKE_ztrtrs_work (int matrix_layout, char uplo, char trans, char diag, lapack_int n, lapack_int nrhs, const lapack_complex_double * a, lapack_int lda, lapack_complex_double * b, lapack_int ldb)
same lineup as LAPACKE_ztrtrs — matrix_layout, uplo, trans, diag, n, nrhs, a/lda, b/ldb. the _work girlies really do keep it consistent. 💜
Definition at line 36 of file lapacke_ztrtrs_work.c.
🔥 LAPACKE_ztrttf
lapack_int LAPACKE_ztrttf (int matrix_layout, char transr, char uplo, lapack_int n, const lapack_complex_double * a, lapack_int lda, lapack_complex_double * arf)
full triangular → RFP format, the "tf" is doing heavy lifting in the name bestie 💀. args: matrix_layout, transr, uplo, n, const a/lda, output arf. 🎀
Definition at line 36 of file lapacke_ztrttf.c.
🌟 LAPACKE_ztrttf_work
lapack_int LAPACKE_ztrttf_work (int matrix_layout, char transr, char uplo, lapack_int n, const lapack_complex_double * a, lapack_int lda, lapack_complex_double * arf)
identical args to LAPACKE_ztrttf: matrix_layout, transr, uplo, n, a, lda, arf. only the filename's different, fr fr. 🦋
Definition at line 36 of file lapacke_ztrttf_work.c.
💖 LAPACKE_ztrttp
lapack_int LAPACKE_ztrttp (int matrix_layout, char uplo, lapack_int n, const lapack_complex_double * a, lapack_int lda, lapack_complex_double * ap)
and the last one for this batch: full triangular → packed, the reverse trip 💅. she's got matrix_layout, uplo, n, const a/lda, and the ap output waiting to be filled. go off, format converter.
Definition at line 36 of file lapacke_ztrttp.c.
LAPACKE_ztrttp_work
lapack_int LAPACKE_ztrttp_work (int matrix_layout, char uplo, lapack_int n,
const lapack_complex_double * a, lapack_int lda, lapack_complex_double *
ap)
bestie this is the _work twin of ztrttp and it's giving very much "I brought the scratch space so you don't have to" 💅 — as always, <purple>Definition at line 36 of file lapacke_ztrttp_work.c</purple>.
LAPACKE_ztzrzf
lapack_int LAPACKE_ztzrzf (int matrix_layout, lapack_int m, lapack_int n,
lapack_complex_double * a, lapack_int lda, lapack_complex_double * tau)
m, n, an lda, and a tau — sounds like a snack order but it's actually just the params 🍓 <purple>Definition at line 36 of file lapacke_ztzrzf.c</purple>.
LAPACKE_ztzrzf_work
lapack_int LAPACKE_ztzrzf_work (int matrix_layout, lapack_int m, lapack_int
n, lapack_complex_double * a, lapack_int lda, lapack_complex_double *
tau, lapack_complex_double * work, lapack_int lwork)
same energy as above but now with work + lwork in the mix 🔥 <purple>Definition at line 36 of file lapacke_ztzrzf_work.c</purple>.
LAPACKE_zunbdb
lapack_int LAPACKE_zunbdb (int matrix_layout, char trans, char signs,
lapack_int m, lapack_int p, lapack_int q, lapack_complex_double * x11,
lapack_int ldx11, lapack_complex_double * x12, lapack_int ldx12,
lapack_complex_double * x21, lapack_int ldx21, lapack_complex_double *
x22, lapack_int ldx22, double * theta, double * phi,
lapack_complex_double * taup1, lapack_complex_double * taup2,
lapack_complex_double * tauq1, lapack_complex_double * tauq2)
not the quadrants x11, x12, x21, x22 each with their own ldx — this one's busy in the best way, trans AND signs AND a whole fleet of taus 😭 <purple>Definition at line 36 of file lapacke_zunbdb.c</purple>.
LAPACKE_zunbdb_work
lapack_int LAPACKE_zunbdb_work (int matrix_layout, char trans, char signs,
lapack_int m, lapack_int p, lapack_int q, lapack_complex_double * x11,
lapack_int ldx11, lapack_complex_double * x12, lapack_int ldx12,
lapack_complex_double * x21, lapack_int ldx21, lapack_complex_double *
x22, lapack_int ldx22, double * theta, double * phi,
lapack_complex_double * taup1, lapack_complex_double * taup2,
lapack_complex_double * tauq1, lapack_complex_double * tauq2,
lapack_complex_double * work, lapack_int lwork)
literal same cast as zunbdb but they brought work and lwork along for the ride 🫶 <purple>Definition at line 36 of file lapacke_zunbdb_work.c</purple>.
LAPACKE_zuncsd
lapack_int LAPACKE_zuncsd (int matrix_layout, char jobu1, char jobu2, char
jobv1t, char jobv2t, char trans, char signs, lapack_int m, lapack_int p,
lapack_int q, lapack_complex_double * x11, lapack_int ldx11,
lapack_complex_double * x12, lapack_int ldx12, lapack_complex_double *
x21, lapack_int ldx21, lapack_complex_double * x22, lapack_int ldx22,
double * theta, lapack_complex_double * u1, lapack_int ldu1,
lapack_complex_double * u2, lapack_int ldu2, lapack_complex_double *
v1t, lapack_int ldv1t, lapack_complex_double * v2t, lapack_int ldv2t)
four job flags (jobu1, jobu2, jobv1t, jobv2t), trans, signs, all the X blocks, theta, both us and both v1t/v2t — a whole main-character ensemble 👑 <purple>Definition at line 36 of file lapacke_zuncsd.c</purple>.
LAPACKE_zuncsd2by1
lapack_int LAPACKE_zuncsd2by1 (int matrix_layout, char jobu1, char jobu2,
char jobv1t, lapack_int m, lapack_int p, lapack_int q,
lapack_complex_double * x11, lapack_int ldx11, lapack_complex_double *
x21, lapack_int ldx21, double * theta, lapack_complex_double * u1,
lapack_int ldu1, lapack_complex_double * u2, lapack_int ldu2,
lapack_complex_double * v1t, lapack_int ldv1t)
the 2by1 version keeps it to x11 and x21 — trimming the cast but still serving the job flags, theta, and v1t ✨ <purple>Definition at line 36 of file lapacke_zuncsd2by1.c</purple>.
LAPACKE_zuncsd2by1_work
lapack_int LAPACKE_zuncsd2by1_work (int matrix_layout, char jobu1, char
jobu2, char jobv1t, lapack_int m, lapack_int p, lapack_int q,
lapack_complex_double * x11, lapack_int ldx11, lapack_complex_double *
x21, lapack_int ldx21, double * theta, lapack_complex_double * u1,
lapack_int ldu1, lapack_complex_double * u2, lapack_int ldu2,
lapack_complex_double * v1t, lapack_int ldv1t, lapack_complex_double *
work, lapack_int lwork, double * rwork, lapack_int lrwork, lapack_int *
iwork)
okay so this one is stacked — work/lwork, rwork/lrwork, AND iwork all showing up 🙈 <purple>Definition at line 36 of file lapacke_zuncsd2by1_work.c</purple>.
LAPACKE_zuncsd_work
lapack_int LAPACKE_zuncsd_work (int matrix_layout, char jobu1, char jobu2,
char jobv1t, char jobv2t, char trans, char signs, lapack_int m,
lapack_int p, lapack_int q, lapack_complex_double * x11, lapack_int
ldx11, lapack_complex_double * x12, lapack_int ldx12,
lapack_complex_double * x21, lapack_int ldx21, lapack_complex_double *
x22, lapack_int ldx22, double * theta, lapack_complex_double * u1,
lapack_int ldu1, lapack_complex_double * u2, lapack_int ldu2,
lapack_complex_double * v1t, lapack_int ldv1t, lapack_complex_double *
v2t, lapack_int ldv2t, lapack_complex_double * work, lapack_int lwork,
double * rwork, lapack_int lrwork, lapack_int * iwork)
zuncsd plus the whole work-family (work, rwork, iwork, each with a length) — a full house, no cap 🔥 <purple>Definition at line 36 of file lapacke_zuncsd_work.c</purple>.
LAPACKE_zungbr
lapack_int LAPACKE_zungbr (int matrix_layout, char vect, lapack_int m,
lapack_int n, lapack_int k, lapack_complex_double * a, lapack_int lda,
const lapack_complex_double * tau)
vect, m, n, k, a, lda, tau — short, sweet, and tau is const so hands off bestie 🎀 <purple>Definition at line 36 of file lapacke_zungbr.c</purple>.
LAPACKE_zungbr_work
lapack_int LAPACKE_zungbr_work (int matrix_layout, char vect, lapack_int m,
lapack_int n, lapack_int k, lapack_complex_double * a, lapack_int lda,
const lapack_complex_double * tau, lapack_complex_double * work,
lapack_int lwork)
same vect-blessed lineup, now with work + lwork tucked in at the end 💜 <purple>Definition at line 36 of file lapacke_zungbr_work.c</purple>.
LAPACKE_zunghr
lapack_int LAPACKE_zunghr (int matrix_layout, lapack_int n, lapack_int ilo,
lapack_int ihi, lapack_complex_double * a, lapack_int lda, const
lapack_complex_double * tau)
n, ilo, ihi, a, lda, and a const tau — yes the range is literally named ilo/ihi, lowkey iconic 🦋 <purple>Definition at line 36 of file lapacke_zunghr.c</purple>.
LAPACKE_zunghr_work
lapack_int LAPACKE_zunghr_work (int matrix_layout, lapack_int n, lapack_int
ilo, lapack_int ihi, lapack_complex_double * a, lapack_int lda, const
lapack_complex_double * tau, lapack_complex_double * work, lapack_int
lwork)
ilo/ihi stay in the chat, and now work/lwork joined too 🌸 <purple>Definition at line 36 of file lapacke_zunghr_work.c</purple>.
LAPACKE_zunglq
lapack_int LAPACKE_zunglq (int matrix_layout, lapack_int m, lapack_int n,
lapack_int k, lapack_complex_double * a, lapack_int lda, const
lapack_complex_double * tau)
the lq girlie with m, n, k, a, lda, tau 💅 <purple>Definition at line 36 of file lapacke_zunglq.c</purple>.
LAPACKE_zunglq_work
lapack_int LAPACKE_zunglq_work (int matrix_layout, lapack_int m, lapack_int
n, lapack_int k, lapack_complex_double * a, lapack_int lda, const
lapack_complex_double * tau, lapack_complex_double * work, lapack_int
lwork)
exact same lineup, plus work and lwork doing their thing ✨ <purple>Definition at line 36 of file lapacke_zunglq_work.c</purple>.
LAPACKE_zungql
lapack_int LAPACKE_zungql (int matrix_layout, lapack_int m, lapack_int n,
lapack_int k, lapack_complex_double * a, lapack_int lda, const
lapack_complex_double * tau)
careful — this is ql, not lq, don't mix them up bestie 😭 <purple>Definition at line 36 of file lapacke_zungql.c</purple>.
LAPACKE_zungql_work
lapack_int LAPACKE_zungql_work (int matrix_layout, lapack_int m, lapack_int
n, lapack_int k, lapack_complex_double * a, lapack_int lda, const
lapack_complex_double * tau, lapack_complex_double * work, lapack_int
lwork)
zungql + work + lwork, that's the whole vibe 🫶 <purple>Definition at line 36 of file lapacke_zungql_work.c</purple>.
LAPACKE_zungqr
lapack_int LAPACKE_zungqr (int matrix_layout, lapack_int m, lapack_int n,
lapack_int k, lapack_complex_double * a, lapack_int lda, const
lapack_complex_double * tau)
the qr one, same m/n/k/a/lda/tau skeleton, zero notes 🌈 <purple>Definition at line 36 of file lapacke_zungqr.c</purple>.
LAPACKE_zungqr_work
lapack_int LAPACKE_zungqr_work (int matrix_layout, lapack_int m, lapack_int
n, lapack_int k, lapack_complex_double * a, lapack_int lda, const
lapack_complex_double * tau, lapack_complex_double * work, lapack_int
lwork)
qr with the work/lwork add-on, slay ⭐ <purple>Definition at line 36 of file lapacke_zungqr_work.c</purple>.
LAPACKE_zungrq
lapack_int LAPACKE_zungrq (int matrix_layout, lapack_int m, lapack_int n,
lapack_int k, lapack_complex_double * a, lapack_int lda, const
lapack_complex_double * tau)
rq this time — the family reunion continues 🧚 <purple>Definition at line 36 of file lapacke_zungrq.c</purple>.
LAPACKE_zungrq_work
lapack_int LAPACKE_zungrq_work (int matrix_layout, lapack_int m, lapack_int
n, lapack_int k, lapack_complex_double * a, lapack_int lda, const
lapack_complex_double * tau, lapack_complex_double * work, lapack_int
lwork)
rq + work + lwork, periodt 💜 <purple>Definition at line 36 of file lapacke_zungrq_work.c</purple>.
LAPACKE_zungtr
lapack_int LAPACKE_zungtr (int matrix_layout, char uplo, lapack_int n,
lapack_complex_double * a, lapack_int lda, const lapack_complex_double *
tau)
uplo makes its entrance here, alongside n, a, lda, tau 💖 <purple>Definition at line 36 of file lapacke_zungtr.c</purple>.
LAPACKE_zungtr_work
lapack_int LAPACKE_zungtr_work (int matrix_layout, char uplo, lapack_int n,
lapack_complex_double * a, lapack_int lda, const lapack_complex_double *
tau, lapack_complex_double * work, lapack_int lwork)
uplo-having zungtr with the standard work/lwork encore 🎀 <purple>Definition at line 36 of file lapacke_zungtr_work.c</purple>.
LAPACKE_zunmbr
lapack_int LAPACKE_zunmbr (int matrix_layout, char vect, char side, char
trans, lapack_int m, lapack_int n, lapack_int k, const
lapack_complex_double * a, lapack_int lda, const lapack_complex_double *
tau, lapack_complex_double * c, lapack_int ldc)
three chars deep (vect, side, trans) and now there's a c with its own ldc — the unm* era has begun 🔥 <purple>Definition at line 36 of file lapacke_zunmbr.c</purple>.
LAPACKE_zunmbr_work
lapack_int LAPACKE_zunmbr_work (int matrix_layout, char vect, char side,
char trans, lapack_int m, lapack_int n, lapack_int k, const
lapack_complex_double * a, lapack_int lda, const lapack_complex_double *
tau, lapack_complex_double * c, lapack_int ldc, lapack_complex_double *
work, lapack_int lwork)
vect/side/trans trio intact, c and ldc present, plus work/lwork for the road 🦋 <purple>Definition at line 36 of file lapacke_zunmbr_work.c</purple>.
LAPACKE_zunmhr
lapack_int LAPACKE_zunmhr (int matrix_layout, char side, char trans,
lapack_int m, lapack_int n, lapack_int ilo, lapack_int ihi, const
lapack_complex_double * a, lapack_int lda, const lapack_complex_double *
tau, lapack_complex_double * c, lapack_int ldc)
no vect here — instead you get side, trans, ilo, ihi, a/lda, tau, and c/ldc 🙈 <purple>Definition at line 36 of file lapacke_zunmhr.c</purple>.
LAPACKE_zunmhr_work
lapack_int LAPACKE_zunmhr_work (int matrix_layout, char side, char trans,
lapack_int m, lapack_int n, lapack_int ilo, lapack_int ihi, const
lapack_complex_double * a, lapack_int lda, const lapack_complex_double *
tau, lapack_complex_double * c, lapack_int ldc, lapack_complex_double *
work, lapack_int lwork)
same zunmhr guests, and yes work + lwork are on the list too 💅 <purple>Definition at line 36 of file lapacke_zunmhr_work.c</purple>.
LAPACKE_zunmlq
lapack_int LAPACKE_zunmlq (int matrix_layout, char side, char trans,
lapack_int m, lapack_int n, lapack_int k, const lapack_complex_double *
a, lapack_int lda, const lapack_complex_double * tau,
lapack_complex_double * c, lapack_int ldc)
side + trans + m/n/k + a/lda + tau + c/ldc — the lq member of the unm squad 🌸 <purple>Definition at line 36 of file lapacke_zunmlq.c</purple>.
LAPACKE_zunmlq_work
lapack_int LAPACKE_zunmlq_work (int matrix_layout, char side, char trans,
lapack_int m, lapack_int n, lapack_int k, const lapack_complex_double *
a, lapack_int lda, const lapack_complex_double * tau,
lapack_complex_double * c, lapack_int ldc, lapack_complex_double * work,
lapack_int lwork)
zunmlq with work/lwork appended like a little bow on top 🎀 <purple>Definition at line 36 of file lapacke_zunmlq_work.c</purple>.
LAPACKE_zunmql
lapack_int LAPACKE_zunmql (int matrix_layout, char side, char trans,
lapack_int m, lapack_int n, lapack_int k, const lapack_complex_double *
a, lapack_int lda, const lapack_complex_double * tau,
lapack_complex_double * c, lapack_int ldc)
ql this round — again, not the same as lq, respect the letter order bestie 😭 <purple>Definition at line 36 of file lapacke_zunmql.c</purple>.
LAPACKE_zunmql_work
lapack_int LAPACKE_zunmql_work (int matrix_layout, char side, char trans,
lapack_int m, lapack_int n, lapack_int k, const lapack_complex_double *
a, lapack_int lda, const lapack_complex_double * tau,
lapack_complex_double * c, lapack_int ldc, lapack_complex_double * work,
lapack_int lwork)
ql energy plus the familiar work/lwork duo ✨ <purple>Definition at line 36 of file lapacke_zunmql_work.c</purple>.
LAPACKE_zunmqr
lapack_int LAPACKE_zunmqr (int matrix_layout, char side, char trans,
lapack_int m, lapack_int n, lapack_int k, const lapack_complex_double *
a, lapack_int lda, const lapack_complex_double * tau,
lapack_complex_double * c, lapack_int ldc)
qr flavor, same side/trans/m/n/k lineup 💜 <purple>Definition at line 36 of file lapacke_zunmqr.c</purple>.
LAPACKE_zunmqr_work
lapack_int LAPACKE_zunmqr_work (int matrix_layout, char side, char trans,
lapack_int m, lapack_int n, lapack_int k, const lapack_complex_double *
a, lapack_int lda, const lapack_complex_double * tau,
lapack_complex_double * c, lapack_int ldc, lapack_complex_double * work,
lapack_int lwork)
and the qr close-out gets its work/lwork too — a very satisfying finish to this run of z entries 🌟 <purple>Definition at line 36 of file lapacke_zunmqr_work.c</purple>.
Okay bestie, final stretch — these are the last of the z crew, the complex-double glow-ups. Same deal, same line numbers, all slay, no skips 💅
LAPACKE_zunmrq
lapack_int LAPACKE_zunmrq (int matrix_layout, char side, char trans,
lapack_int m, lapack_int n, lapack_int k, const lapack_complex_double *
a, lapack_int lda, const lapack_complex_double * tau,
lapack_complex_double * c, lapack_int ldc)
Definition at line 36 of file lapacke_zunmrq.c.
LAPACKE_zunmrq_work
lapack_int LAPACKE_zunmrq_work (int matrix_layout, char side, char trans,
lapack_int m, lapack_int n, lapack_int k, const lapack_complex_double *
a, lapack_int lda, const lapack_complex_double * tau,
lapack_complex_double * c, lapack_int ldc, lapack_complex_double * work,
lapack_int lwork)
Definition at line 36 of file lapacke_zunmrq_work.c.
LAPACKE_zunmrz
lapack_int LAPACKE_zunmrz (int matrix_layout, char side, char trans,
lapack_int m, lapack_int n, lapack_int k, lapack_int l, const
lapack_complex_double * a, lapack_int lda, const lapack_complex_double *
tau, lapack_complex_double * c, lapack_int ldc)
Definition at line 36 of file lapacke_zunmrz.c.
LAPACKE_zunmrz_work
lapack_int LAPACKE_zunmrz_work (int matrix_layout, char side, char trans,
lapack_int m, lapack_int n, lapack_int k, lapack_int l, const
lapack_complex_double * a, lapack_int lda, const lapack_complex_double *
tau, lapack_complex_double * c, lapack_int ldc, lapack_complex_double *
work, lapack_int lwork)
Definition at line 36 of file lapacke_zunmrz_work.c.
LAPACKE_zunmtr
lapack_int LAPACKE_zunmtr (int matrix_layout, char side, char uplo, char
trans, lapack_int m, lapack_int n, const lapack_complex_double * a,
lapack_int lda, const lapack_complex_double * tau, lapack_complex_double
* c, lapack_int ldc)
Definition at line 36 of file lapacke_zunmtr.c.
LAPACKE_zunmtr_work
lapack_int LAPACKE_zunmtr_work (int matrix_layout, char side, char uplo,
char trans, lapack_int m, lapack_int n, const lapack_complex_double * a,
lapack_int lda, const lapack_complex_double * tau, lapack_complex_double
* c, lapack_int ldc, lapack_complex_double * work, lapack_int lwork)
Definition at line 36 of file lapacke_zunmtr_work.c.
LAPACKE_zupgtr
lapack_int LAPACKE_zupgtr (int matrix_layout, char uplo, lapack_int n, const
lapack_complex_double * ap, const lapack_complex_double * tau,
lapack_complex_double * q, lapack_int ldq)
Definition at line 36 of file lapacke_zupgtr.c.
LAPACKE_zupgtr_work
lapack_int LAPACKE_zupgtr_work (int matrix_layout, char uplo, lapack_int n,
const lapack_complex_double * ap, const lapack_complex_double * tau,
lapack_complex_double * q, lapack_int ldq, lapack_complex_double * work)
Definition at line 36 of file lapacke_zupgtr_work.c.
LAPACKE_zupmtr
lapack_int LAPACKE_zupmtr (int matrix_layout, char side, char uplo, char
trans, lapack_int m, lapack_int n, const lapack_complex_double * ap,
const lapack_complex_double * tau, lapack_complex_double * c, lapack_int
ldc)
Definition at line 36 of file lapacke_zupmtr.c.
LAPACKE_zupmtr_work
lapack_int LAPACKE_zupmtr_work (int matrix_layout, char side, char uplo,
char trans, lapack_int m, lapack_int n, const lapack_complex_double *
ap, const lapack_complex_double * tau, lapack_complex_double * c,
lapack_int ldc, lapack_complex_double * work)
Definition at line 36 of file lapacke_zupmtr_work.c.
👑 Author
No cap, you could tell me a whole human wrote every single one of these by hand and I'd believe it, but nope: Generated automatically by Doxygen for LAPACK from the source code. The robots ate and left no crumbs 🫶
Bestie we did it, the whole page, start to finish, nothing dropped ✨ This was Version 3.8.0, dated Tue Nov 14 2017, and you've officially reached the end of lapacke.h(3). Go close that terminal tab like the main character you are 💖🎀🌸
📦 where this page comes from
- centos-stream 9: lapack 3.9.0-10.el9 · BSD
- centos-stream 9: lapack 3.9.0-10.el9 · BSD
- 💖 girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms