diff --git a/modules/RulesPrecisions.cmake b/modules/RulesPrecisions.cmake index c615b5a558a89f8ae00c77352501860a55dd0207..ab9931c088893c8363b319c9224d07c08d809123 100644 --- a/modules/RulesPrecisions.cmake +++ b/modules/RulesPrecisions.cmake @@ -62,12 +62,15 @@ set( ${CMAKE_PROJECT_NAME}_COMPILE_INPLACE ${__inplace} # Detect default settings # ----------------------- +set( _prec_P OFF ) set( _prec_S OFF ) set( _prec_D OFF ) set( _prec_DS OFF ) +set( _prec_XD OFF ) set( _prec_C OFF ) set( _prec_Z OFF ) set( _prec_ZC OFF ) +set( _prec_XZ OFF ) foreach(_prec ${RP_${CMAKE_PROJECT_NAME}_PRECISIONS}) if ( ${_prec} STREQUAL zc ) set( _prec_S ON ) @@ -75,25 +78,52 @@ foreach(_prec ${RP_${CMAKE_PROJECT_NAME}_PRECISIONS}) set( _prec_C ON ) set( _prec_Z ON ) set( _prec_ZC ON ) - elseif( ${_prec} STREQUAL z ) + endif() + if( ${_prec} STREQUAL z ) set( _prec_D ON ) set( _prec_Z ON ) - elseif( ${_prec} STREQUAL c ) + endif() + if( ${_prec} STREQUAL c ) set( _prec_S ON ) set( _prec_C ON ) - elseif( ${_prec} STREQUAL ds ) + endif() + if( ${_prec} STREQUAL ds ) set( _prec_S ON ) set( _prec_D ON ) set( _prec_DS ON ) - elseif( ${_prec} STREQUAL d ) + endif() + if( ${_prec} STREQUAL d ) + set( _prec_S ON ) + endif() + if( ${_prec} STREQUAL s ) + set( _prec_S ON ) + endif() + if( ${_prec} STREQUAL p ) + set( _prec_P ON ) + endif() + if( ${_prec} STREQUAL xd ) set( _prec_S ON ) - elseif( ${_prec} STREQUAL s ) + set( _prec_D ON ) + set( _prec_DS ON ) + set( _prec_XD ON ) + endif() + if( ${_prec} STREQUAL xz ) set( _prec_S ON ) + set( _prec_D ON ) + set( _prec_C ON ) + set( _prec_Z ON ) + set( _prec_DS ON ) + set( _prec_ZC ON ) + set( _prec_XZ ON ) endif() endforeach() # set computed precisions # ----------------------- +if( ${_prec_P} ) + option(${PROJECT_NAME}_PREC_P + "Build ${PROJECT_NAME} pattern/integer precision" ON) +endif() if( ${_prec_S} ) option(${PROJECT_NAME}_PREC_S "Build ${PROJECT_NAME} real single precision" ON) @@ -121,6 +151,16 @@ if( ${_prec_ZC} ) "Build ${PROJECT_NAME} complex mixed precision" ON "${PROJECT_NAME}_PREC_C;${PROJECT_NAME}_PREC_Z" OFF) endif() +if( ${_prec_XD} ) + cmake_dependent_option(${PROJECT_NAME}_PREC_XD + "Build ${PROJECT_NAME} real extended mixed precision" ON "${PROJECT_NAME}_PREC_S;${PROJECT_NAME}_PREC_D;${PROJECT_NAME}_PREC_DS" OFF) +endif() + +if( ${_prec_XZ} ) + cmake_dependent_option(${PROJECT_NAME}_PREC_XZ + "Build ${PROJECT_NAME} real extended mixed precision" ON "${PROJECT_NAME}_PREC_C;${PROJECT_NAME}_PREC_Z;${PROJECT_NAME}_PREC_ZC" OFF) +endif() + # Define precision supported by the project # ----------------------------------------- set( ${CMAKE_PROJECT_NAME}_PRECISION "" ) @@ -148,6 +188,18 @@ if(${CMAKE_PROJECT_NAME}_PREC_ZC) list(APPEND ${CMAKE_PROJECT_NAME}_PRECISION "zc") endif() +if(${CMAKE_PROJECT_NAME}_PREC_P) + list(APPEND ${CMAKE_PROJECT_NAME}_PRECISION "p") +endif() + +if(${CMAKE_PROJECT_NAME}_PREC_XD) + list(APPEND ${CMAKE_PROJECT_NAME}_PRECISION "xd") +endif() + +if(${CMAKE_PROJECT_NAME}_PREC_XZ) + list(APPEND ${CMAKE_PROJECT_NAME}_PRECISION "xz") +endif() + # # Generates a rule for every SOURCES file, to create the precisions in PRECISIONS. If TARGETDIR # is not empty then all generated files will be prepended with the $TARGETDIR/. diff --git a/modules/precision_generator/subs.py b/modules/precision_generator/subs.py index af87b55938ea74e897bae6909bbe543c4f50f7cd..ecd843c8e24617fe699d8fcba3e96f1116270f5f 100644 --- a/modules/precision_generator/subs.py +++ b/modules/precision_generator/subs.py @@ -143,6 +143,8 @@ _subs = { (r'_ds_h_\b', r'_zc_h_\b' ), (r'_d\.h\b', r'_z\.h\b' ), (r'_s\.h\b', r'_c\.h\b' ), + (r'_xd\.h\b', r'_xz\.h\b' ), + (r'_xd_h_\b', r'_xz_h_\b' ), # ----- Prefixes (r'\bds_', r'\bzc_' ), @@ -151,6 +153,8 @@ _subs = { (r'\bDS_', r'\bZC_' ), (r'\bD_', r'\bZ_' ), (r'\bS_', r'\bC_' ), + (r'\bxd_', r'\bxz_' ), + (r'\bXD_', r'\bXZ_' ), # See note in "normal" section below #('LAPACKE_d', 'LAPACKE_z' ), @@ -166,38 +170,38 @@ _subs = { # ------------------------------------------------------------ # replacements applied to most files. 'normal' : [ - # pattern single double single-complex double-complex - #'12345678901234567890', '12345678901234567890', '12345678901234567890', '12345678901234567890', '12345678901234567890') + # pattern double-mixed single double complex-mixed single-complex double-complex + #'12345678901234567890', '12345678901234567890', '12345678901234567890', '12345678901234567890', '12345678901234567890', '12345678901234567890', '12345678901234567890') # ----- header (identifies precision; not a substitution) - ['p', 's', 'd', 'c', 'z' ], + ['p', 'xd', 's', 'd', 'xz', 'c', 'z' ], # ----- Text - (r'\ba symmetric', r'\ba symmetric', r'\ba symmetric', r'\ban hermitian', r'\ba hermitian' ), - ('symmetric', 'symmetric', 'symmetric', 'hermitian', 'hermitian' ), - ('Symmetric', 'Symmetric', 'Symmetric', 'Hermitian', 'Hermitian' ), - ('SYMMETRIC', 'SYMMETRIC', 'SYMMETRIC', 'HERMITIAN', 'HERMITIAN' ), - ('orthogonal', 'orthogonal', 'orthogonal', 'unitary', 'unitary' ), - ('\^T', '\^T', '\^T', '\^H', '\^H' ), + (r'\ba symmetric', r'\ba symmetric', r'\ba symmetric', r'\ba symmetric', r'\ban hermitian', r'\ban hermitian', r'\ban hermitian' ), + ('symmetric', 'symmetric', 'symmetric', 'symmetric', 'hermitian', 'hermitian', 'hermitian' ), + ('Symmetric', 'Symmetric', 'Symmetric', 'Symmetric', 'Hermitian', 'Hermitian', 'Hermitian' ), + ('SYMMETRIC', 'SYMMETRIC', 'SYMMETRIC', 'SYMMETRIC', 'HERMITIAN', 'HERMITIAN', 'HERMITIAN' ), + ('orthogonal', 'orthogonal', 'orthogonal', 'orthogonal', 'unitary', 'unitary', 'unitary' ), + ('\^T', '\^T', '\^T', '\^T', '\^H', '\^H', '\^H' ), # ----- CBLAS - ('', '', '', 'CBLAS_SADDR', 'CBLAS_SADDR' ), + ('', '', '', '', 'CBLAS_SADDR', 'CBLAS_SADDR', 'CBLAS_SADDR' ), # ----- Complex numbers # \b regexp here avoids conjugate -> conjfugate, and fabs -> fabsf -> fabsff. # Note r for raw string literals, otherwise \b is a bell character. # The \b is deleted from replacement strings. # conj() and fabs() are overloaded in MAGMA, so don't need substitution. - (r'', r'', r'', r'\bconjf\b', r'\bconj\b' ), - (r'', r'\bfabsf\b', r'\bfabs\b', r'\bfabsf\b', r'\bfabs\b' ), - (r'', r'\bfabsf\b', r'\bfabs\b', r'\bcabsf\b', r'\bcabs\b' ), - (r'', r'\bsqrtf\b', r'\bsqrt\b', r'\bcsqrtf\b', r'\bcsqrt\b' ), - (r'', r'\bsqrtf\b', r'\bsqrt\b', r'\bsqrtf\b', r'\bsqrt\b' ), - (r'', r'', r'', r'\bcrealf\b', r'\bcreal\b' ), - (r'', r'', r'', r'\bcimagf\b', r'\bcimag\b' ), + (r'', r'', r'', r'', r'\bconj\b', r'\bconjf\b', r'\bconj\b' ), + (r'', r'\bfabs\b', r'\bfabsf\b', r'\bfabs\b', r'\bfabs\b', r'\bfabsf\b', r'\bfabs\b' ), + (r'', r'\bfabs\b', r'\bfabsf\b', r'\bfabs\b', r'\bcabs\b', r'\bcabsf\b', r'\bcabs\b' ), + (r'', r'\bsqrt\b', r'\bsqrtf\b', r'\bsqrt\b', r'\bcsqrt\b', r'\bcsqrtf\b', r'\bcsqrt\b' ), + (r'', r'\bsqrt\b', r'\bsqrtf\b', r'\bsqrt\b', r'\bsqrt\b', r'\bsqrtf\b', r'\bsqrt\b' ), + (r'', r'', r'', r'', r'\bcreal\b', r'\bcrealf\b', r'\bcreal\b' ), + (r'', r'', r'', r'', r'\bcimag\b', r'\bcimagf\b', r'\bcimag\b' ), # ----- Constants - ('Trans', 'Trans', 'Trans', 'ConjTrans', 'ConjTrans' ), + ('Trans', 'Trans', 'Trans', 'Trans', 'ConjTrans', 'ConjTrans', 'ConjTrans' ), # ----- BLAS & LAPACK ] @@ -209,34 +213,34 @@ _subs = { + _upper( lapack ) # e.g., DGETRF + [ # ----- Fortran Types - ('int\(', 'real\(', 'real\(', 'complex\(', 'complex\(' ), - ('int', 'real', 'double precision', 'real', r'\bdouble precision\b'), # before double - ('_int', '_float', '_double', '_complex', '_double_complex' ), - (r'\bint', r'\bfloat', r'\bdouble', r'\bcomplex', r'\bdouble_complex' ), - (r'\bint', r'\bfloat', r'\bdouble', r'\bfloat', r'\bdouble' ), - ('int', 'real', 'double precision', 'complex', r'\bcomplex\*16' ), - ('INT', 'REAL', 'DOUBLE_PRECISION', 'COMPLEX', r'\bCOMPLEX_16' ), - ('INT', 'REAL', 'DOUBLE PRECISION', 'COMPLEX', r'\bDOUBLE COMPLEX' ), - ('INT', 'REAL', 'DOUBLE PRECISION', 'REAL', r'\bDOUBLE PRECISION' ), - ('MPI_INT', 'MPI_FLOAT', 'MPI_DOUBLE', 'MPI_COMPLEX', 'MPI_DOUBLE_COMPLEX' ), - ('MPI_INT', 'MPI_FLOAT', 'MPI_DOUBLE', 'MPI_FLOAT', 'MPI_DOUBLE' ), + ('int\(', 'real\(', 'real\(', 'real\(', 'complex\(', 'complex\(', 'complex\(' ), + ('int', 'double precision', 'real', 'double precision', r'\bdouble precision\b', 'real', r'\bdouble precision\b'), # before double + ('_int', '_double', '_float', '_double', '_double_complex', '_complex', '_double_complex' ), + (r'\bint', r'\bdouble', r'\bfloat', r'\bdouble', r'\bdouble_complex', r'\bcomplex', r'\bdouble_complex' ), + (r'\bint', r'\bdouble', r'\bfloat', r'\bdouble', r'\bdouble', r'\bfloat', r'\bdouble' ), + ('int', 'double precision', 'real', 'double precision', r'\bcomplex\*16', 'complex', r'\bcomplex\*16' ), + ('INT', 'DOUBLE_PRECISION', 'REAL', 'DOUBLE_PRECISION', r'\bCOMPLEX_16', 'COMPLEX', r'\bCOMPLEX_16' ), + ('INT', 'DOUBLE PRECISION', 'REAL', 'DOUBLE PRECISION', r'\bDOUBLE COMPLEX', 'COMPLEX', r'\bDOUBLE COMPLEX' ), + ('INT', 'DOUBLE PRECISION', 'REAL', 'DOUBLE PRECISION', r'\bDOUBLE PRECISION', 'REAL', r'\bDOUBLE PRECISION' ), + ('MPI_INT', 'MPI_DOUBLE', 'MPI_FLOAT', 'MPI_DOUBLE', 'MPI_DOUBLE_COMPLEX', 'MPI_COMPLEX', 'MPI_DOUBLE_COMPLEX' ), + ('MPI_INT', 'MPI_DOUBLE', 'MPI_FLOAT', 'MPI_DOUBLE', 'MPI_DOUBLE', 'MPI_FLOAT', 'MPI_DOUBLE' ), # ----- Data types # C++ - ('int', 'float', 'double', 'float _Complex', r'\bdouble _Complex' ), + ('int', 'double', 'float', 'double', r'\bdouble _Complex', 'float _Complex', r'\bdouble _Complex' ), # CUDA - ('int', 'float', 'double', 'make_cuFloatComplex', 'make_cuDoubleComplex'), - (r'\bint', r'\bfloat', r'\bdouble', r'\bcuFloatComplex', r'\bcuDoubleComplex' ), - (r'\bint', r'\breal', r'\breal', r'\bcomplex', r'\bcomplex' ), - (r'\bint', r'\bfloat', r'\bdouble', r'\bfloat2', r'\bdouble2' ), + ('int', 'double', 'float', 'double', 'make_cuDoubleComplex', 'make_cuFloatComplex', 'make_cuDoubleComplex'), + (r'\bint', r'\bdouble', r'\bfloat', r'\bdouble', r'\bcuDoubleComplex', r'\bcuFloatComplex', r'\bcuDoubleComplex' ), + (r'\bint', r'\breal', r'\breal', r'\breal', r'\bcomplex', r'\bcomplex', r'\bcomplex' ), + (r'\bint', r'\bdouble', r'\bfloat', r'\bdouble', r'\bdouble2', r'\bfloat2', r'\bdouble2' ), # HIP - (r'\bint', r'\bfloat', r'\bdouble', r'\bhipblasComplex', r'\bhipblasDoubleComplex'), + (r'\bint', r'\bdouble', r'\bfloat', r'\bdouble', r'\bhipblasDoubleComplex', r'\bchipblasComplex', r'\bhipblasDoubleComplex' ), # ----- header files - (r'_p\.h\b', r'_s\.h\b', r'_d\.h\b', r'_c\.h\b', r'_z\.h\b' ), - ('_p_', '_s_', '_d_', '_c_', '_z_' ), - ('_P_', '_S_', '_D_', '_C_', '_Z_' ), - (r'\bp_', r'\bs_', r'\bd_', r'\bc_', r'\bz_' ), + (r'_p\.h\b', r'_xd\.h\b', r'_s\.h\b', r'_d\.h\b', r'_xz\.h\b', r'_c\.h\b', r'_z\.h\b' ), + ('_p_', '_xd_', '_s_', '_d_', '_xz_', '_c_', '_z_' ), + ('_P_', '_XD_', '_S_', '_D_', '_XZ_', '_C_', '_Z_' ), + (r'\bp_', r'\bxd_', r'\bs_', r'\bd_', r'\bxz_', r'\bc_', r'\bz_' ), ], # end normal } #end _subs diff --git a/modules/precision_generator/subs_blas.py b/modules/precision_generator/subs_blas.py index f8b86b8c0b3d7c20b2f3906563832d44ab4dc20f..ce3fc2507f82bf1112466725c9276a280214fc5c 100644 --- a/modules/precision_generator/subs_blas.py +++ b/modules/precision_generator/subs_blas.py @@ -94,231 +94,231 @@ blas_mixed = [ # ---------------------------------------- blas = [ # BLAS, lowercase, alphabetic order - #int single double single-complex double-complex - #'', '12345678901234567890', '12345678901234567890', '12345678901234567890', '12345678901234567890') - ('', 'isamax', 'idamax', 'icamax', 'izamax' ), - ('', 'isamax', 'idamax', 'isamax', 'idamax' ), - ('', 'isamin', 'idamin', 'icamin', 'izamin' ), - ('', 'samax', 'damax', 'samax', 'damax' ), - ('', 'samax', 'damax', 'scamax', 'dzamax' ), - ('', 'sasum', 'dasum', 'scasum', 'dzasum' ), - ('', 'saxpy', 'daxpy', 'saxpy', 'daxpy' ), - ('', 'saxpy', 'daxpy', 'caxpy', 'zaxpy' ), - ('', 'scopy', 'dcopy', 'ccopy', 'zcopy' ), - ('', 'scopy', 'dcopy', 'scopy', 'dcopy' ), - ('', 'sdot', 'ddot', 'cdotc', 'zdotc' ), - ('', 'sdot', 'ddot', 'cdotu', 'zdotu' ), - ('', 'dot', 'dot', 'dotc', 'dotc' ), - ('', 'dot', 'dot', 'dotu', 'dotu' ), - ('', 'sgeadd', 'dgeadd', 'cgeadd', 'zgeadd' ), - ('', 'sgem', 'dgem', 'cgem', 'zgem' ), # zgemm, zgemdm, zgemv - ('', 'sger', 'dger', 'cgerc', 'zgerc' ), - ('', 'sger', 'dger', 'cgeru', 'zgeru' ), - ('', 'snrm2', 'dnrm2', 'scnrm2', 'dznrm2' ), - ('', 'snrm2', 'dnrm2', 'snrm2', 'dnrm2' ), - ('', 'srot', 'drot', 'crot', 'zrot' ), - ('', 'srot', 'drot', 'csrot', 'zdrot' ), - ('', 'srot', 'drot', 'srot', 'drot' ), - ('', 'sscal', 'dscal', 'cscal', 'zscal' ), - ('', 'sscal', 'dscal', 'csscal', 'zdscal' ), - ('', 'sscal', 'dscal', 'sscal', 'dscal' ), - ('', 'sswap', 'dswap', 'cswap', 'zswap' ), - ('', 'ssymm', 'dsymm', 'chemm', 'zhemm' ), - ('', 'ssymm', 'dsymm', 'csymm', 'zsymm' ), - ('', 'ssymv', 'dsymv', 'chemv', 'zhemv' ), - ('', 'ssymv', 'dsymv', 'csymv', 'zsymv' ), - ('', 'ssyr', 'dsyr', 'cher', 'zher' ), # also does zher2, zher2k, zherk - ('', 'ssyr', 'dsyr', 'csyr', 'zsyr' ), # also does zsyrk, zsyr2k - ('', 'stbsm', 'dtbsm', 'ctbsm', 'ztbsm' ), - ('', 'stradd', 'dtradd', 'ctradd', 'ztradd' ), - ('', 'strmm', 'dtrmm', 'ctrmm', 'ztrmm' ), - ('', 'strmv', 'dtrmv', 'ctrmv', 'ztrmv' ), - ('', 'strsm', 'dtrsm', 'ctrsm', 'ztrsm' ), - ('', 'strsv', 'dtrsv', 'ctrsv', 'ztrsv' ), + #int double mixed single double complex-mixed single-complex double-complex + #'', '12345678901234567890', '12345678901234567890', '12345678901234567890', '12345678901234567890', '12345678901234567890', '12345678901234567890') + ('', 'ixdamax', 'isamax', 'idamax', 'izamax', 'icamax', 'izamax' ), + ('', 'ixdamax', 'isamax', 'idamax', 'idamax', 'isamax', 'idamax' ), + ('', 'ixdamin', 'isamin', 'idamin', 'izamin', 'icamin', 'izamin' ), + ('', 'xdamax', 'samax', 'damax', 'xzamax', 'samax', 'damax' ), + ('', 'xdamax', 'samax', 'damax', 'scamax', 'scamax', 'dzamax' ), + ('', 'xdasum', 'sasum', 'dasum', 'scasum', 'scasum', 'dzasum' ), + ('', 'xxaxpy', 'saxpy', 'daxpy', 'xzaxpy', 'saxpy', 'daxpy' ), + ('', 'xdaxpy', 'saxpy', 'daxpy', 'xzaxpy', 'caxpy', 'zaxpy' ), + ('', 'xdcopy', 'scopy', 'dcopy', 'xzcopy', 'ccopy', 'zcopy' ), + ('', 'xdcopy', 'scopy', 'dcopy', 'xzcopy', 'scopy', 'dcopy' ), + ('', 'xddot', 'sdot', 'ddot', 'xzdotc', 'cdotc', 'zdotc' ), + ('', 'xddot', 'sdot', 'ddot', 'xzdotu', 'cdotu', 'zdotu' ), + ('', 'xdot', 'dot', 'dot', 'dotc', 'dotc', 'dotc' ), + ('', 'xdot', 'dot', 'dot', 'dotu', 'dotu', 'dotu' ), + ('', 'xdgeadd', 'sgeadd', 'dgeadd', 'xzgeadd', 'cgeadd', 'zgeadd' ), + ('', 'xdgem', 'sgem', 'dgem', 'xzgem', 'cgem', 'zgem' ), # zgemm, zgemdm, zgemv + ('', 'xdger', 'sger', 'dger', 'xzgerc', 'cgerc', 'zgerc' ), + ('', 'xdger', 'sger', 'dger', 'xzgeru', 'cgeru', 'zgeru' ), + ('', 'xdnrm2', 'snrm2', 'dnrm2', 'xznrm2', 'scnrm2', 'dznrm2' ), + ('', 'xdnrm2', 'snrm2', 'dnrm2', 'xznrm2', 'snrm2', 'dnrm2' ), + ('', 'xdrot', 'srot', 'drot', 'xzrot', 'crot', 'zrot' ), + ('', 'xdrot', 'srot', 'drot', 'xzrot', 'csrot', 'zdrot' ), + ('', 'xdrot', 'srot', 'drot', 'xzrot', 'srot', 'drot' ), + ('', 'xdscal', 'sscal', 'dscal', 'xzscal', 'cscal', 'zscal' ), + ('', 'xdscal', 'sscal', 'dscal', 'xzscal', 'csscal', 'zdscal' ), + ('', 'xdscal', 'sscal', 'dscal', 'xzscal', 'sscal', 'dscal' ), + ('', 'xdswap', 'sswap', 'dswap', 'xzswap', 'cswap', 'zswap' ), + ('', 'xdsymm', 'ssymm', 'dsymm', 'xzhemm', 'chemm', 'zhemm' ), + ('', 'xdsymm', 'ssymm', 'dsymm', 'xzsymm', 'csymm', 'zsymm' ), + ('', 'xdsymv', 'ssymv', 'dsymv', 'xzhemv', 'chemv', 'zhemv' ), + ('', 'xdsymv', 'ssymv', 'dsymv', 'xzsymv', 'csymv', 'zsymv' ), + ('', 'xdsyr', 'ssyr', 'dsyr', 'xzher', 'cher', 'zher' ), # also does zher2, zher2k, zherk + ('', 'xdsyr', 'ssyr', 'dsyr', 'xzsyr', 'csyr', 'zsyr' ), # also does zsyrk, zsyr2k + ('', 'xdtbsm', 'stbsm', 'dtbsm', 'xztbsm', 'ctbsm', 'ztbsm' ), + ('', 'xdtradd', 'stradd', 'dtradd', 'xztradd', 'ctradd', 'ztradd' ), + ('', 'xdtrmm', 'strmm', 'dtrmm', 'xztrmm', 'ctrmm', 'ztrmm' ), + ('', 'xdtrmv', 'strmv', 'dtrmv', 'xztrmv', 'ctrmv', 'ztrmv' ), + ('', 'xdtrsm', 'strsm', 'dtrsm', 'xztrsm', 'ctrsm', 'ztrsm' ), + ('', 'xdtrsv', 'strsv', 'dtrsv', 'xztrsv', 'ctrsv', 'ztrsv' ), ] # ---------------------------------------- lapack = [ # LAPACK, lowercase, alphabetic order - #int single double single-complex double-complex - #'', '12345678901234567890', '12345678901234567890', '12345678901234567890', '12345678901234567890') - ('', 'sbdsdc', 'dbdsdc', 'sbdsdc', 'dbdsdc' ), - ('', 'sbdsqr', 'dbdsqr', 'cbdsqr', 'zbdsqr' ), - ('', 'sbdt01', 'dbdt01', 'cbdt01', 'zbdt01' ), - ('', 'sgbbrd', 'dgbbrd', 'cgbbrd', 'zgbbrd' ), - ('', 'sgbsv', 'dgbsv', 'cgbsv', 'zgbsv' ), - ('', 'sgbtrf', 'dgbtrf', 'cgbtrf', 'zgbtrf' ), - ('', 'sgbtrs', 'dgbtrs', 'cgbtrs', 'zgbtrs' ), - ('', 'sgebak', 'dgebak', 'cgebak', 'zgebak' ), - ('', 'sgebal', 'dgebal', 'cgebal', 'zgebal' ), - ('', 'sgebd2', 'dgebd2', 'cgebd2', 'zgebd2' ), - ('', 'sgebrd', 'dgebrd', 'cgebrd', 'zgebrd' ), - ('', 'sgeev', 'dgeev', 'cgeev', 'zgeev' ), - ('', 'sgegqr', 'dgegqr', 'cgegqr', 'zgegqr' ), - ('', 'sgehd2', 'dgehd2', 'cgehd2', 'zgehd2' ), - ('', 'sgehrd', 'dgehrd', 'cgehrd', 'zgehrd' ), - ('', 'sgeinv', 'dgeinv', 'cgeinv', 'zgeinv' ), - ('', 'sgelq2', 'dgelq2', 'cgelq2', 'zgelq2' ), - ('', 'sgelqf', 'dgelqf', 'cgelqf', 'zgelqf' ), - ('', 'sgelqs', 'dgelqs', 'cgelqs', 'zgelqs' ), - ('', 'sgelqt', 'dgelqt', 'cgelqt', 'zgelqt' ), - ('', 'sgels', 'dgels', 'cgels', 'zgels' ), - ('', 'sgeqlf', 'dgeqlf', 'cgeqlf', 'zgeqlf' ), - ('', 'sgeqp3', 'dgeqp3', 'cgeqp3', 'zgeqp3' ), - ('', 'sgeqr2', 'dgeqr2', 'cgeqr2', 'zgeqr2' ), - ('', 'sgeqrf', 'dgeqrf', 'cgeqrf', 'zgeqrf' ), - ('', 'sgeqrs', 'dgeqrs', 'cgeqrs', 'zgeqrs' ), - ('', 'sgeqrt', 'dgeqrt', 'cgeqrt', 'zgeqrt' ), - ('', 'sgerfs', 'dgerfs', 'cgerfs', 'zgerfs' ), - ('', 'sgesdd', 'dgesdd', 'cgesdd', 'zgesdd' ), - ('', 'sgessm', 'dgessm', 'cgessm', 'zgessm' ), - ('', 'sgessq', 'dgessq', 'cgessq', 'zgessq' ), - ('', 'sgessq', 'dgessq', 'sgessq', 'dgessq' ), - ('', 'sgesv', 'dgesv', 'cgesv', 'zgesv' ), # also does zgesvd - ('', 'sgeswp', 'dgeswp', 'cgeswp', 'zgeswp' ), - ('', 'sget22', 'dget22', 'cget22', 'zget22' ), - ('', 'sgetf2', 'dgetf2', 'cgetf2', 'zgetf2' ), - ('', 'sgetmi', 'dgetmi', 'cgetmi', 'zgetmi' ), - ('', 'sgetmo', 'dgetmo', 'cgetmo', 'zgetmo' ), - ('', 'sgetrf', 'dgetrf', 'cgetrf', 'zgetrf' ), - ('', 'sgetri', 'dgetri', 'cgetri', 'zgetri' ), - ('', 'sgetrs', 'dgetrs', 'cgetrs', 'zgetrs' ), - ('', 'shseqr', 'dhseqr', 'chseqr', 'zhseqr' ), - ('', 'shst01', 'dhst01', 'chst01', 'zhst01' ), - ('', 'slabad', 'dlabad', 'slabad', 'dlabad' ), - ('', 'slabrd', 'dlabrd', 'clabrd', 'zlabrd' ), - ('', 'slacgv', 'dlacgv', 'clacgv', 'zlacgv' ), - ('', 'slacp2', 'dlacp2', 'clacp2', 'zlacp2' ), - ('', 'slacpy', 'dlacpy', 'clacpy', 'zlacpy' ), - ('', 'slacrm', 'dlacrm', 'clacrm', 'zlacrm' ), - ('', 'sladiv', 'dladiv', 'cladiv', 'zladiv' ), - ('', 'slaed', 'dlaed', 'slaed', 'dlaed' ), - ('', 'slaex', 'dlaex', 'slaex', 'dlaex' ), - ('', 'slag2d', 'dlag2s', 'clag2z', 'zlag2c' ), - ('', 'slagsy', 'dlagsy', 'claghe', 'zlaghe' ), - ('', 'slagsy', 'dlagsy', 'clagsy', 'zlagsy' ), - ('', 'slahr', 'dlahr', 'clahr', 'zlahr' ), - ('', 'slaln2', 'dlaln2', 'slaln2', 'dlaln2' ), - ('', 'slamc3', 'dlamc3', 'slamc3', 'dlamc3' ), - ('', 'slamch', 'dlamch', 'slamch', 'dlamch' ), - ('', 'slamrg', 'dlamrg', 'slamrg', 'dlamrg' ), - ('', 'slangb', 'dlangb', 'clangb', 'zlangb' ), - ('', 'slange', 'dlange', 'clange', 'zlange' ), - ('', 'slange', 'dlange', 'slange', 'dlange' ), - ('', 'slanst', 'dlanst', 'clanht', 'zlanht' ), - ('', 'slansy', 'dlansy', 'clanhe', 'zlanhe' ), - ('', 'slansy', 'dlansy', 'clansy', 'zlansy' ), - ('', 'slansy', 'dlansy', 'slansy', 'dlansy' ), - ('', 'slantr', 'dlantr', 'clantr', 'zlantr' ), - ('', 'slantr', 'dlantr', 'slantr', 'dlantr' ), - ('', 'slapy3', 'dlapy3', 'slapy3', 'dlapy3' ), - ('', 'slaqp2', 'dlaqp2', 'claqp2', 'zlaqp2' ), - ('', 'slaqps', 'dlaqps', 'claqps', 'zlaqps' ), - ('', 'slaqtrs', 'dlaqtrs', 'claqtrs', 'zlaqtrs' ), - ('', 'slarcm', 'dlarcm', 'clarcm', 'zlarcm' ), - ('', 'slarf', 'dlarf', 'clarf', 'zlarf' ), # also does zlarfb, zlarfg, etc. - ('', 'slarnv', 'dlarnv', 'clarnv', 'zlarnv' ), - ('', 'slarnv', 'dlarnv', 'slarnv', 'dlarnv' ), - ('', 'slartg', 'dlartg', 'clartg', 'zlartg' ), - ('', 'slascl', 'dlascl', 'clascl', 'zlascl' ), - ('', 'slaset', 'dlaset', 'claset', 'zlaset' ), - ('', 'slapmr', 'dlapmr', 'clapmr', 'zlapmr' ), - ('', 'slasrt', 'dlasrt', 'slasrt', 'dlasrt' ), - ('', 'slassq', 'dlassq', 'classq', 'zlassq' ), - ('', 'slaswp', 'dlaswp', 'claswp', 'zlaswp' ), - ('', 'slasyf', 'dlasyf', 'clahef', 'zlahef' ), - ('', 'slatms', 'dlatms', 'clatms', 'zlatms' ), - ('', 'slatrd', 'dlatrd', 'clatrd', 'zlatrd' ), - ('', 'slatrs', 'dlatrs', 'clatrs', 'zlatrs' ), - ('', 'slauum', 'dlauum', 'clauum', 'zlauum' ), - ('', 'slavsy', 'dlavsy', 'clavhe', 'zlavhe' ), - ('', 'sorg2r', 'dorg2r', 'cung2r', 'zung2r' ), - ('', 'sorgbr', 'dorgbr', 'cungbr', 'zungbr' ), - ('', 'sorghr', 'dorghr', 'cunghr', 'zunghr' ), - ('', 'sorglq', 'dorglq', 'cunglq', 'zunglq' ), - ('', 'sorgql', 'dorgql', 'cungql', 'zungql' ), - ('', 'sorgqr', 'dorgqr', 'cungqr', 'zungqr' ), - ('', 'sorgtr', 'dorgtr', 'cungtr', 'zungtr' ), - ('', 'sorm2r', 'dorm2r', 'cunm2r', 'zunm2r' ), - ('', 'sormbr', 'dormbr', 'cunmbr', 'zunmbr' ), - ('', 'sormlq', 'dormlq', 'cunmlq', 'zunmlq' ), - ('', 'sormql', 'dormql', 'cunmql', 'zunmql' ), - ('', 'sormqr', 'dormqr', 'cunmqr', 'zunmqr' ), - ('', 'sormr2', 'dormr2', 'cunmr2', 'zunmr2' ), - ('', 'sormtr', 'dormtr', 'cunmtr', 'zunmtr' ), - ('', 'sort01', 'dort01', 'cunt01', 'zunt01' ), - ('', 'spack', 'dpack', 'cpack', 'zpack' ), - ('', 'spamm', 'dpamm', 'cpamm', 'zpamm' ), - ('', 'sparfb', 'dparfb', 'cparfb', 'zparfb' ), - ('', 'spbsv', 'dpbsv', 'cpbsv', 'zpbsv' ), - ('', 'spbtrf', 'dpbtrf', 'cpbtrf', 'zpbtrf' ), - ('', 'spbtrf', 'dpbtrf', 'cpbtrf', 'zpbtrf' ), - ('', 'spbtrs', 'dpbtrs', 'cpbtrs', 'zpbtrs' ), - ('', 'spbtrs', 'dpbtrs', 'cpbtrs', 'zpbtrs' ), - ('', 'spemv', 'dpemv', 'cpemv', 'zpemv' ), - ('', 'splgsy', 'dplgsy', 'cplghe', 'zplghe' ), - ('', 'splgsy', 'dplgsy', 'cplgsy', 'zplgsy' ), - ('', 'splrnt', 'dplrnt', 'cplrnt', 'zplrnt' ), - ('', 'splrnt', 'dplrnt', 'splrnt', 'dplrnt' ), - ('', 'spoinv', 'dpoinv', 'cpoinv', 'zpoinv' ), - ('', 'sposv', 'dposv', 'cposv', 'zposv' ), - ('', 'spotf2', 'dpotf2', 'cpotf2', 'zpotf2' ), - ('', 'spotrf', 'dpotrf', 'cpotrf', 'zpotrf' ), - ('', 'spotri', 'dpotri', 'cpotri', 'zpotri' ), - ('', 'spotrs', 'dpotrs', 'cpotrs', 'zpotrs' ), - ('', 'sqpt01', 'dqpt01', 'cqpt01', 'zqpt01' ), - ('', 'sqrt02', 'dqrt02', 'cqrt02', 'zqrt02' ), - ('', 'ssbtrd', 'dsbtrd', 'chbtrd', 'zhbtrd' ), - ('', 'sshift', 'dshift', 'cshift', 'zshift' ), - ('', 'sssssm', 'dssssm', 'cssssm', 'zssssm' ), - ('', 'sstebz', 'dstebz', 'sstebz', 'dstebz' ), - ('', 'sstedc', 'dstedc', 'cstedc', 'zstedc' ), - ('', 'sstedx', 'dstedx', 'cstedx', 'zstedx' ), - ('', 'sstedx', 'dstedx', 'sstedx', 'dstedx' ), - ('', 'sstegr', 'dstegr', 'cstegr', 'zstegr' ), - ('', 'sstein', 'dstein', 'cstein', 'zstein' ), - ('', 'sstemr', 'dstemr', 'cstemr', 'zstemr' ), - ('', 'ssteqr', 'dsteqr', 'csteqr', 'zsteqr' ), - ('', 'ssterf', 'dsterf', 'ssterf', 'dsterf' ), - ('', 'ssterm', 'dsterm', 'csterm', 'zsterm' ), - ('', 'sstt21', 'dstt21', 'cstt21', 'zstt21' ), - ('', 'ssyev', 'dsyev', 'cheev', 'zheev' ), - ('', 'ssyevd', 'dsyevd', 'cheevd', 'zheevd' ), - ('', 'ssygs2', 'dsygs2', 'chegs2', 'zhegs2' ), - ('', 'ssygst', 'dsygst', 'chegst', 'zhegst' ), - ('', 'ssygv', 'dsygv', 'chegv', 'zhegv' ), - ('', 'ssyssq', 'dsyssq', 'chessq', 'zhessq' ), - ('', 'ssyssq', 'dsyssq', 'csyssq', 'zsyssq' ), - ('', 'ssyssq', 'dsyssq', 'ssyssq', 'dsyssq' ), - ('', 'ssysv', 'dsysv', 'chesv', 'zhesv' ), - ('', 'ssysv', 'dsysv', 'csysv', 'zsysv' ), - ('', 'ssyswp', 'dsyswp', 'cheswp', 'zheswp' ), - ('', 'ssyt21', 'dsyt21', 'chet21', 'zhet21' ), - ('', 'ssytd2', 'dsytd2', 'chetd2', 'zhetd2' ), - ('', 'ssytf2', 'dsytf2', 'chetf2', 'zhetf2' ), - ('', 'ssytf2', 'dsytf2', 'csytf2', 'zsytf2' ), - ('', 'ssytrd', 'dsytrd', 'chetrd', 'zhetrd' ), - ('', 'ssytrf', 'dsytrf', 'chetrf', 'zhetrf' ), - ('', 'ssytrf', 'dsytrf', 'csytrf', 'zsytrf' ), - ('', 'ssytrs', 'dsytrs', 'chetrs', 'zhetrs' ), - ('', 'ssytrs', 'dsytrs', 'csytrs', 'zsytrs' ), - ('', 'stpgqrt', 'dtpgqrt', 'ctpgqrt', 'ztpgqrt' ), - ('', 'stplqt', 'dtplqt', 'ctplqt', 'ztplqt' ), - ('', 'stpmlqt', 'dtpmlqt', 'ctpmlqt', 'ztpmlqt' ), - ('', 'stpmqrt', 'dtpmqrt', 'ctpmqrt', 'ztpmqrt' ), - ('', 'stpqrt', 'dtpqrt', 'ctpqrt', 'ztpqrt' ), - ('', 'strevc', 'dtrevc', 'ctrevc', 'ztrevc' ), - ('', 'strsmpl', 'dtrsmpl', 'ctrsmpl', 'ztrsmpl' ), - ('', 'strssq', 'dtrssq', 'ctrssq', 'ztrssq' ), - ('', 'strtri', 'dtrtri', 'ctrtri', 'ztrtri' ), - ('', 'stslqt', 'dtslqt', 'ctslqt', 'ztslqt' ), - ('', 'stsmlq', 'dtsmlq', 'ctsmlq', 'ztsmlq' ), - ('', 'stsmqr', 'dtsmqr', 'ctsmqr', 'ztsmqr' ), - ('', 'stsqrt', 'dtsqrt', 'ctsqrt', 'ztsqrt' ), - ('', 'ststrf', 'dtstrf', 'ctstrf', 'ztstrf' ), - ('', 'sttlqt', 'dttlqt', 'cttlqt', 'zttlqt' ), - ('', 'sttmlq', 'dttmlq', 'cttmlq', 'zttmlq' ), - ('', 'sttmqr', 'dttmqr', 'cttmqr', 'zttmqr' ), - ('', 'sttqrt', 'dttqrt', 'cttqrt', 'zttqrt' ), + #int double mixed single double single-complex single-complex double-complex + #'', '12345678901234567890', '12345678901234567890', '12345678901234567890', '12345678901234567890', '12345678901234567890', '12345678901234567890') + ('', 'xdbdsdc', 'sbdsdc', 'dbdsdc', 'xzbdsdc', 'sbdsdc', 'dbdsdc' ), + ('', 'xdbdsqr', 'sbdsqr', 'dbdsqr', 'xzbdsqr', 'cbdsqr', 'zbdsqr' ), + ('', 'xdbdt01', 'sbdt01', 'dbdt01', 'xzbdt01', 'cbdt01', 'zbdt01' ), + ('', 'xdgbbrd', 'sgbbrd', 'dgbbrd', 'xzgbbrd', 'cgbbrd', 'zgbbrd' ), + ('', 'xdgbsv', 'sgbsv', 'dgbsv', 'xzgbsv', 'cgbsv', 'zgbsv' ), + ('', 'xdgbtrf', 'sgbtrf', 'dgbtrf', 'xzgbtrf', 'cgbtrf', 'zgbtrf' ), + ('', 'xdgbtrs', 'sgbtrs', 'dgbtrs', 'xzgbtrs', 'cgbtrs', 'zgbtrs' ), + ('', 'xdgebak', 'sgebak', 'dgebak', 'xzgebak', 'cgebak', 'zgebak' ), + ('', 'xdgebal', 'sgebal', 'dgebal', 'xzgebal', 'cgebal', 'zgebal' ), + ('', 'xdgebd2', 'sgebd2', 'dgebd2', 'xzgebd2', 'cgebd2', 'zgebd2' ), + ('', 'xdgebrd', 'sgebrd', 'dgebrd', 'xzgebrd', 'cgebrd', 'zgebrd' ), + ('', 'xdgeev', 'sgeev', 'dgeev', 'xzgeev', 'cgeev', 'zgeev' ), + ('', 'xdgegqr', 'sgegqr', 'dgegqr', 'xzgegqr', 'cgegqr', 'zgegqr' ), + ('', 'xdgehd2', 'sgehd2', 'dgehd2', 'xzgehd2', 'cgehd2', 'zgehd2' ), + ('', 'xdgehrd', 'sgehrd', 'dgehrd', 'xzgehrd', 'cgehrd', 'zgehrd' ), + ('', 'xdgeinv', 'sgeinv', 'dgeinv', 'xzgeinv', 'cgeinv', 'zgeinv' ), + ('', 'xdgelq2', 'sgelq2', 'dgelq2', 'xzgelq2', 'cgelq2', 'zgelq2' ), + ('', 'xdgelqf', 'sgelqf', 'dgelqf', 'xzgelqf', 'cgelqf', 'zgelqf' ), + ('', 'xdgelqs', 'sgelqs', 'dgelqs', 'xzgelqs', 'cgelqs', 'zgelqs' ), + ('', 'xdgelqt', 'sgelqt', 'dgelqt', 'xzgelqt', 'cgelqt', 'zgelqt' ), + ('', 'xdgels', 'sgels', 'dgels', 'xzgels', 'cgels', 'zgels' ), + ('', 'xdgeqlf', 'sgeqlf', 'dgeqlf', 'xzgeqlf', 'cgeqlf', 'zgeqlf' ), + ('', 'xdgeqp3', 'sgeqp3', 'dgeqp3', 'xzgeqp3', 'cgeqp3', 'zgeqp3' ), + ('', 'xdgeqr2', 'sgeqr2', 'dgeqr2', 'xzgeqr2', 'cgeqr2', 'zgeqr2' ), + ('', 'xdgeqrf', 'sgeqrf', 'dgeqrf', 'xzgeqrf', 'cgeqrf', 'zgeqrf' ), + ('', 'xdgeqrs', 'sgeqrs', 'dgeqrs', 'xzgeqrs', 'cgeqrs', 'zgeqrs' ), + ('', 'xdgeqrt', 'sgeqrt', 'dgeqrt', 'xzgeqrt', 'cgeqrt', 'zgeqrt' ), + ('', 'xdgerfs', 'sgerfs', 'dgerfs', 'xzgerfs', 'cgerfs', 'zgerfs' ), + ('', 'xdgesdd', 'sgesdd', 'dgesdd', 'xzgesdd', 'cgesdd', 'zgesdd' ), + ('', 'xdgessm', 'sgessm', 'dgessm', 'xzgessm', 'cgessm', 'zgessm' ), + ('', 'xdgessq', 'sgessq', 'dgessq', 'xzgessq', 'cgessq', 'zgessq' ), + ('', 'xdgessq', 'sgessq', 'dgessq', 'xzgessq', 'sgessq', 'dgessq' ), + ('', 'xdgesv', 'sgesv', 'dgesv', 'xzgesv', 'cgesv', 'zgesv' ), # also does zgesvd + ('', 'xdgeswp', 'sgeswp', 'dgeswp', 'xzgeswp', 'cgeswp', 'zgeswp' ), + ('', 'xdget22', 'sget22', 'dget22', 'xzget22', 'cget22', 'zget22' ), + ('', 'xdgetf2', 'sgetf2', 'dgetf2', 'xzgetf2', 'cgetf2', 'zgetf2' ), + ('', 'xdgetmi', 'sgetmi', 'dgetmi', 'xzgetmi', 'cgetmi', 'zgetmi' ), + ('', 'xdgetmo', 'sgetmo', 'dgetmo', 'xzgetmo', 'cgetmo', 'zgetmo' ), + ('', 'xdgetrf', 'sgetrf', 'dgetrf', 'xzgetrf', 'cgetrf', 'zgetrf' ), + ('', 'xdgetri', 'sgetri', 'dgetri', 'xzgetri', 'cgetri', 'zgetri' ), + ('', 'xdgetrs', 'sgetrs', 'dgetrs', 'xzgetrs', 'cgetrs', 'zgetrs' ), + ('', 'xdhseqr', 'shseqr', 'dhseqr', 'xzhseqr', 'chseqr', 'zhseqr' ), + ('', 'xdhst01', 'shst01', 'dhst01', 'xzhst01', 'chst01', 'zhst01' ), + ('', 'xdlabad', 'slabad', 'dlabad', 'xzlabad', 'slabad', 'dlabad' ), + ('', 'xdlabrd', 'slabrd', 'dlabrd', 'xzlabrd', 'clabrd', 'zlabrd' ), + ('', 'xdlacgv', 'slacgv', 'dlacgv', 'xzlacgv', 'clacgv', 'zlacgv' ), + ('', 'xdlacp2', 'slacp2', 'dlacp2', 'xzlacp2', 'clacp2', 'zlacp2' ), + ('', 'xdlacpy', 'slacpy', 'dlacpy', 'xzlacpy', 'clacpy', 'zlacpy' ), + ('', 'xdlacrm', 'slacrm', 'dlacrm', 'xzlacrm', 'clacrm', 'zlacrm' ), + ('', 'xdladiv', 'sladiv', 'dladiv', 'xzladiv', 'cladiv', 'zladiv' ), + ('', 'xdlaed', 'slaed', 'dlaed', 'xzlaed', 'slaed', 'dlaed' ), + ('', 'xdlaex', 'slaex', 'dlaex', 'xzlaex', 'slaex', 'dlaex' ), + ('', 'xdlag2s', 'slag2d', 'dlag2s', 'xzlag2z', 'clag2z', 'zlag2c' ), + ('', 'xdlagsy', 'slagsy', 'dlagsy', 'xzlaghe', 'claghe', 'zlaghe' ), + ('', 'xdlagsy', 'slagsy', 'dlagsy', 'xzlagsy', 'clagsy', 'zlagsy' ), + ('', 'xdlahr', 'slahr', 'dlahr', 'xzlahr', 'clahr', 'zlahr' ), + ('', 'xdlaln2', 'slaln2', 'dlaln2', 'xzlaln2', 'slaln2', 'dlaln2' ), + ('', 'xdlamc3', 'slamc3', 'dlamc3', 'xzlamc3', 'slamc3', 'dlamc3' ), + ('', 'dlamch', 'slamch', 'dlamch', 'zlamch', 'slamch', 'dlamch' ), + ('', 'xdlamrg', 'slamrg', 'dlamrg', 'xzlamrg', 'slamrg', 'dlamrg' ), + ('', 'xdlangb', 'slangb', 'dlangb', 'xzlangb', 'clangb', 'zlangb' ), + ('', 'xdlange', 'slange', 'dlange', 'xzlange', 'clange', 'zlange' ), + ('', 'xdlange', 'slange', 'dlange', 'xzlange', 'slange', 'dlange' ), + ('', 'xdlanst', 'slanst', 'dlanst', 'xzlanht', 'clanht', 'zlanht' ), + ('', 'xdlansy', 'slansy', 'dlansy', 'xzlanhe', 'clanhe', 'zlanhe' ), + ('', 'xdlansy', 'slansy', 'dlansy', 'xzlansy', 'clansy', 'zlansy' ), + ('', 'xdlansy', 'slansy', 'dlansy', 'xzlansy', 'slansy', 'dlansy' ), + ('', 'xdlantr', 'slantr', 'dlantr', 'xzlantr', 'clantr', 'zlantr' ), + ('', 'xdlantr', 'slantr', 'dlantr', 'xzlantr', 'slantr', 'dlantr' ), + ('', 'xdlapy3', 'slapy3', 'dlapy3', 'xzlapy3', 'slapy3', 'dlapy3' ), + ('', 'xdlaqp2', 'slaqp2', 'dlaqp2', 'xzlaqp2', 'claqp2', 'zlaqp2' ), + ('', 'xdlaqps', 'slaqps', 'dlaqps', 'xzlaqps', 'claqps', 'zlaqps' ), + ('', 'xdlaqtrs', 'slaqtrs', 'dlaqtrs', 'xzlaqtrs', 'claqtrs', 'zlaqtrs' ), + ('', 'xdlarcm', 'slarcm', 'dlarcm', 'xzlarcm', 'clarcm', 'zlarcm' ), + ('', 'xdlarf', 'slarf', 'dlarf', 'xzlarf', 'clarf', 'zlarf' ), # also does zlarfb, zlarfg, etc. + ('', 'xdlarnv', 'slarnv', 'dlarnv', 'xzlarnv', 'clarnv', 'zlarnv' ), + ('', 'xdlarnv', 'slarnv', 'dlarnv', 'xzlarnv', 'slarnv', 'dlarnv' ), + ('', 'xdlartg', 'slartg', 'dlartg', 'xzlartg', 'clartg', 'zlartg' ), + ('', 'xdlascl', 'slascl', 'dlascl', 'xzlascl', 'clascl', 'zlascl' ), + ('', 'xdlaset', 'slaset', 'dlaset', 'xzlaset', 'claset', 'zlaset' ), + ('', 'xdlapmr', 'slapmr', 'dlapmr', 'xzlapmr', 'clapmr', 'zlapmr' ), + ('', 'xdlasrt', 'slasrt', 'dlasrt', 'xzlasrt', 'slasrt', 'dlasrt' ), + ('', 'xdlassq', 'slassq', 'dlassq', 'xzlassq', 'classq', 'zlassq' ), + ('', 'xdlaswp', 'slaswp', 'dlaswp', 'xzlaswp', 'claswp', 'zlaswp' ), + ('', 'xdlasyf', 'slasyf', 'dlasyf', 'xzlahef', 'clahef', 'zlahef' ), + ('', 'xdlatms', 'slatms', 'dlatms', 'xzlatms', 'clatms', 'zlatms' ), + ('', 'xdlatrd', 'slatrd', 'dlatrd', 'xzlatrd', 'clatrd', 'zlatrd' ), + ('', 'xdlatrs', 'slatrs', 'dlatrs', 'xzlatrs', 'clatrs', 'zlatrs' ), + ('', 'xdlauum', 'slauum', 'dlauum', 'xzlauum', 'clauum', 'zlauum' ), + ('', 'xdlavsy', 'slavsy', 'dlavsy', 'xzlavhe', 'clavhe', 'zlavhe' ), + ('', 'xdorg2r', 'sorg2r', 'dorg2r', 'xzung2r', 'cung2r', 'zung2r' ), + ('', 'xdorgbr', 'sorgbr', 'dorgbr', 'xzungbr', 'cungbr', 'zungbr' ), + ('', 'xdorghr', 'sorghr', 'dorghr', 'xzunghr', 'cunghr', 'zunghr' ), + ('', 'xdorglq', 'sorglq', 'dorglq', 'xzunglq', 'cunglq', 'zunglq' ), + ('', 'xdorgql', 'sorgql', 'dorgql', 'xzungql', 'cungql', 'zungql' ), + ('', 'xdorgqr', 'sorgqr', 'dorgqr', 'xzungqr', 'cungqr', 'zungqr' ), + ('', 'xdorgtr', 'sorgtr', 'dorgtr', 'xzungtr', 'cungtr', 'zungtr' ), + ('', 'xdorm2r', 'sorm2r', 'dorm2r', 'xzunm2r', 'cunm2r', 'zunm2r' ), + ('', 'xdormbr', 'sormbr', 'dormbr', 'xzunmbr', 'cunmbr', 'zunmbr' ), + ('', 'xdormlq', 'sormlq', 'dormlq', 'xzunmlq', 'cunmlq', 'zunmlq' ), + ('', 'xdormql', 'sormql', 'dormql', 'xzunmql', 'cunmql', 'zunmql' ), + ('', 'xdormqr', 'sormqr', 'dormqr', 'xzunmqr', 'cunmqr', 'zunmqr' ), + ('', 'xdormr2', 'sormr2', 'dormr2', 'xzunmr2', 'cunmr2', 'zunmr2' ), + ('', 'xdormtr', 'sormtr', 'dormtr', 'xzunmtr', 'cunmtr', 'zunmtr' ), + ('', 'xdort01', 'sort01', 'dort01', 'xzunt01', 'cunt01', 'zunt01' ), + ('', 'xdpack', 'spack', 'dpack', 'xzpack', 'cpack', 'zpack' ), + ('', 'xdpamm', 'spamm', 'dpamm', 'xzpamm', 'cpamm', 'zpamm' ), + ('', 'xdparfb', 'sparfb', 'dparfb', 'xzparfb', 'cparfb', 'zparfb' ), + ('', 'xdpbsv', 'spbsv', 'dpbsv', 'xzpbsv', 'cpbsv', 'zpbsv' ), + ('', 'xdpbtrf', 'spbtrf', 'dpbtrf', 'xzpbtrf', 'cpbtrf', 'zpbtrf' ), + ('', 'xdpbtrf', 'spbtrf', 'dpbtrf', 'xzpbtrf', 'cpbtrf', 'zpbtrf' ), + ('', 'xdpbtrs', 'spbtrs', 'dpbtrs', 'xzpbtrs', 'cpbtrs', 'zpbtrs' ), + ('', 'xdpbtrs', 'spbtrs', 'dpbtrs', 'xzpbtrs', 'cpbtrs', 'zpbtrs' ), + ('', 'xdpemv', 'spemv', 'dpemv', 'xzpemv', 'cpemv', 'zpemv' ), + ('', 'xdplgsy', 'splgsy', 'dplgsy', 'xzplghe', 'cplghe', 'zplghe' ), + ('', 'xdplgsy', 'splgsy', 'dplgsy', 'xzplgsy', 'cplgsy', 'zplgsy' ), + ('', 'xdplrnt', 'splrnt', 'dplrnt', 'xzplrnt', 'cplrnt', 'zplrnt' ), + ('', 'xdplrnt', 'splrnt', 'dplrnt', 'xzplrnt', 'splrnt', 'dplrnt' ), + ('', 'xdpoinv', 'spoinv', 'dpoinv', 'xzpoinv', 'cpoinv', 'zpoinv' ), + ('', 'xdposv', 'sposv', 'dposv', 'xzposv', 'cposv', 'zposv' ), + ('', 'xdpotf2', 'spotf2', 'dpotf2', 'xzpotf2', 'cpotf2', 'zpotf2' ), + ('', 'xdpotrf', 'spotrf', 'dpotrf', 'xzpotrf', 'cpotrf', 'zpotrf' ), + ('', 'xdpotri', 'spotri', 'dpotri', 'xzpotri', 'cpotri', 'zpotri' ), + ('', 'xdpotrs', 'spotrs', 'dpotrs', 'xzpotrs', 'cpotrs', 'zpotrs' ), + ('', 'xdqpt01', 'sqpt01', 'dqpt01', 'xzqpt01', 'cqpt01', 'zqpt01' ), + ('', 'xdqrt02', 'sqrt02', 'dqrt02', 'xzqrt02', 'cqrt02', 'zqrt02' ), + ('', 'xdsbtrd', 'ssbtrd', 'dsbtrd', 'xzhbtrd', 'chbtrd', 'zhbtrd' ), + ('', 'xdshift', 'sshift', 'dshift', 'xzshift', 'cshift', 'zshift' ), + ('', 'xdssssm', 'sssssm', 'dssssm', 'xzssssm', 'cssssm', 'zssssm' ), + ('', 'xdstebz', 'sstebz', 'dstebz', 'xzstebz', 'sstebz', 'dstebz' ), + ('', 'xdstedc', 'sstedc', 'dstedc', 'xzstedc', 'cstedc', 'zstedc' ), + ('', 'xdstedx', 'sstedx', 'dstedx', 'xzstedx', 'cstedx', 'zstedx' ), + ('', 'xdstedx', 'sstedx', 'dstedx', 'xzstedx', 'sstedx', 'dstedx' ), + ('', 'xdstegr', 'sstegr', 'dstegr', 'xzstegr', 'cstegr', 'zstegr' ), + ('', 'xdstein', 'sstein', 'dstein', 'xzstein', 'cstein', 'zstein' ), + ('', 'xdstemr', 'sstemr', 'dstemr', 'xzstemr', 'cstemr', 'zstemr' ), + ('', 'xdsteqr', 'ssteqr', 'dsteqr', 'xzsteqr', 'csteqr', 'zsteqr' ), + ('', 'xdsterf', 'ssterf', 'dsterf', 'xzsterf', 'ssterf', 'dsterf' ), + ('', 'xdsterm', 'ssterm', 'dsterm', 'xzsterm', 'csterm', 'zsterm' ), + ('', 'xdstt21', 'sstt21', 'dstt21', 'xzstt21', 'cstt21', 'zstt21' ), + ('', 'xdsyev', 'ssyev', 'dsyev', 'xzheev', 'cheev', 'zheev' ), + ('', 'xdsyevd', 'ssyevd', 'dsyevd', 'xzheevd', 'cheevd', 'zheevd' ), + ('', 'xdsygs2', 'ssygs2', 'dsygs2', 'xzhegs2', 'chegs2', 'zhegs2' ), + ('', 'xdsygst', 'ssygst', 'dsygst', 'xzhegst', 'chegst', 'zhegst' ), + ('', 'xdsygv', 'ssygv', 'dsygv', 'xzhegv', 'chegv', 'zhegv' ), + ('', 'xdsyssq', 'ssyssq', 'dsyssq', 'xzhessq', 'chessq', 'zhessq' ), + ('', 'xdsyssq', 'ssyssq', 'dsyssq', 'xzsyssq', 'csyssq', 'zsyssq' ), + ('', 'xdsyssq', 'ssyssq', 'dsyssq', 'xzsyssq', 'ssyssq', 'dsyssq' ), + ('', 'xdsysv', 'ssysv', 'dsysv', 'xzhesv', 'chesv', 'zhesv' ), + ('', 'xdsysv', 'ssysv', 'dsysv', 'xzsysv', 'csysv', 'zsysv' ), + ('', 'xdsyswp', 'ssyswp', 'dsyswp', 'xzheswp', 'cheswp', 'zheswp' ), + ('', 'xdsyt21', 'ssyt21', 'dsyt21', 'xzhet21', 'chet21', 'zhet21' ), + ('', 'xdsytd2', 'ssytd2', 'dsytd2', 'xzhetd2', 'chetd2', 'zhetd2' ), + ('', 'xdsytf2', 'ssytf2', 'dsytf2', 'xzhetf2', 'chetf2', 'zhetf2' ), + ('', 'xdsytf2', 'ssytf2', 'dsytf2', 'xzsytf2', 'csytf2', 'zsytf2' ), + ('', 'xdsytrd', 'ssytrd', 'dsytrd', 'xzhetrd', 'chetrd', 'zhetrd' ), + ('', 'xdsytrf', 'ssytrf', 'dsytrf', 'xzhetrf', 'chetrf', 'zhetrf' ), + ('', 'xdsytrf', 'ssytrf', 'dsytrf', 'xzsytrf', 'csytrf', 'zsytrf' ), + ('', 'xdsytrs', 'ssytrs', 'dsytrs', 'xzhetrs', 'chetrs', 'zhetrs' ), + ('', 'xdsytrs', 'ssytrs', 'dsytrs', 'xzsytrs', 'csytrs', 'zsytrs' ), + ('', 'xdtpgqrt', 'stpgqrt', 'dtpgqrt', 'xztpgqrt', 'ctpgqrt', 'ztpgqrt' ), + ('', 'xdtplqt', 'stplqt', 'dtplqt', 'xztplqt', 'ctplqt', 'ztplqt' ), + ('', 'xdtpmlqt', 'stpmlqt', 'dtpmlqt', 'xztpmlqt', 'ctpmlqt', 'ztpmlqt' ), + ('', 'xdtpmqrt', 'stpmqrt', 'dtpmqrt', 'xztpmqrt', 'ctpmqrt', 'ztpmqrt' ), + ('', 'xdtpqrt', 'stpqrt', 'dtpqrt', 'xztpqrt', 'ctpqrt', 'ztpqrt' ), + ('', 'xdtrevc', 'strevc', 'dtrevc', 'xztrevc', 'ctrevc', 'ztrevc' ), + ('', 'xdtrsmpl', 'strsmpl', 'dtrsmpl', 'xztrsmpl', 'ctrsmpl', 'ztrsmpl' ), + ('', 'xdtrssq', 'strssq', 'dtrssq', 'xztrssq', 'ctrssq', 'ztrssq' ), + ('', 'xdtrtri', 'strtri', 'dtrtri', 'xztrtri', 'ctrtri', 'ztrtri' ), + ('', 'xdtslqt', 'stslqt', 'dtslqt', 'xztslqt', 'ctslqt', 'ztslqt' ), + ('', 'xdtsmlq', 'stsmlq', 'dtsmlq', 'xztsmlq', 'ctsmlq', 'ztsmlq' ), + ('', 'xdtsmqr', 'stsmqr', 'dtsmqr', 'xztsmqr', 'ctsmqr', 'ztsmqr' ), + ('', 'xdtsqrt', 'stsqrt', 'dtsqrt', 'xztsqrt', 'ctsqrt', 'ztsqrt' ), + ('', 'xdtstrf', 'ststrf', 'dtstrf', 'xztstrf', 'ctstrf', 'ztstrf' ), + ('', 'xdttlqt', 'sttlqt', 'dttlqt', 'xzttlqt', 'cttlqt', 'zttlqt' ), + ('', 'xdttmlq', 'sttmlq', 'dttmlq', 'xzttmlq', 'cttmlq', 'zttmlq' ), + ('', 'xdttmqr', 'sttmqr', 'dttmqr', 'xzttmqr', 'cttmqr', 'zttmqr' ), + ('', 'xdttqrt', 'sttqrt', 'dttqrt', 'xzttqrt', 'cttqrt', 'zttqrt' ), ]