├── .dockerignore ├── .gitignore ├── Dockerfile ├── LICENSE ├── README.md ├── custom └── export-functions.example.js ├── example └── index.js ├── gulpfile.js ├── package.json ├── scripts ├── custom_build.sh └── docker_build.sh ├── src ├── blas-files.js ├── export-functions.js ├── export.js ├── lapack-files.js └── libf2c-files.js └── test ├── blas-level1 ├── daxpy.js ├── dcopy.js └── ddot.js ├── blas-level2 └── dgemv.js ├── blas-level3 ├── dgemm.js └── dsyrk.js ├── lapack ├── dsyev.js └── dsysv.js └── util.js /.dockerignore: -------------------------------------------------------------------------------- 1 | build 2 | clapack 3 | node_modules 4 | *.md 5 | *.log 6 | asmjs.js 7 | wasm.js 8 | emlapack.wasm 9 | custom/*.example.js 10 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | build 2 | clapack 3 | node_modules 4 | asmjs.js 5 | wasm.js 6 | emlapack.wasm 7 | custom/* 8 | !custom/*.example.js 9 | *.log 10 | .npmrc 11 | -------------------------------------------------------------------------------- /Dockerfile: -------------------------------------------------------------------------------- 1 | FROM apiaryio/emcc:latest 2 | 3 | ENV EMLAPACK_DIR=/emlapack \ 4 | CLAPACK_VERSION=3.2.1 5 | 6 | ENV EMLAPACK_DIST_DIR="${EMLAPACK_DIR}/dist" 7 | 8 | WORKDIR "${EMLAPACK_DIR}" 9 | 10 | RUN set -ex \ 11 | && apt-get update -y \ 12 | && apt-get install -y \ 13 | build-essential \ 14 | wget \ 15 | vim \ 16 | && apt-get autoremove -y \ 17 | && rm -rf /var/lib/apt/lists/* 18 | 19 | RUN wget "http://www.netlib.org/clapack/clapack-${CLAPACK_VERSION}.tgz" -O /tmp/clapack.tgz \ 20 | && tar xvf /tmp/clapack.tgz \ 21 | && mv "CLAPACK-${CLAPACK_VERSION}" clapack \ 22 | && cp clapack/make.inc.example clapack/make.inc \ 23 | && cd clapack/F2CLIBS/libf2c \ 24 | && make all \ 25 | && rm -rf /tmp/clapack.tgz \ 26 | && cd "${EMLAPACK_DIR}" \ 27 | && \ 28 | ( \ 29 | grep -Fxq '#include "stdio.h"' clapack/BLAS/SRC/xerbla.c \ 30 | || \ 31 | sed -i '1i #include "stdio.h"' clapack/BLAS/SRC/xerbla.c \ 32 | ) 33 | 34 | COPY package.json . 35 | 36 | RUN npm install 37 | 38 | COPY . . 39 | 40 | RUN chmod +x scripts/custom_build.sh 41 | 42 | VOLUME "${EMLAPACK_DIST_DIR}" 43 | 44 | CMD "${EMLAPACK_DIR}/scripts/custom_build.sh" 45 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Copyright (c) 2015, Yosuke ONOUE All rights reserved. 2 | Copyright (c) 1992-2008 The University of Tennessee. All rights reserved. 3 | 4 | $COPYRIGHT$ 5 | 6 | Additional copyrights may follow 7 | 8 | $HEADER$ 9 | 10 | Redistribution and use in source and binary forms, with or without 11 | modification, are permitted provided that the following conditions are 12 | met: 13 | 14 | - Redistributions of source code must retain the above copyright 15 | notice, this list of conditions and the following disclaimer. 16 | 17 | - Redistributions in binary form must reproduce the above copyright 18 | notice, this list of conditions and the following disclaimer listed 19 | in this license in the documentation and/or other materials 20 | provided with the distribution. 21 | 22 | - Neither the name of the copyright holders nor the names of its 23 | contributors may be used to endorse or promote products derived from 24 | this software without specific prior written permission. 25 | 26 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 27 | "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 28 | LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 29 | A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 30 | OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 31 | SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 32 | LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 33 | DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 34 | THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 35 | (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 36 | OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 37 | 38 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # emlapack 2 | Porting BLAS / LAPACK to JavaScript. 3 | 4 | [CLAPACK](http://www.netlib.org/clapack/) is compiled with emscripten. 5 | 6 | ## Install 7 | 8 | ``` 9 | npm install emlapack 10 | ``` 11 | 12 | ## Example 13 | 14 | Computing all eigenvalues of a real (upper triangular) symmetric matrix A 15 | 16 | ```javascript 17 | var emlapack = require('emlapack'), 18 | n = 5, 19 | dsyev = emlapack.cwrap('dsyev_', null, ['number', 'number', 'number', 'number', 'number', 'number', 'number', 'number', 'number']), 20 | pjobz = emlapack._malloc(1), 21 | puplo = emlapack._malloc(1), 22 | pn = emlapack._malloc(4), 23 | pa = emlapack._malloc(n * n * 8), 24 | plda = emlapack._malloc(4), 25 | pw = emlapack._malloc(n * 8), 26 | plwork = emlapack._malloc(4), 27 | pinfo = emlapack._malloc(4), 28 | pworkopt = emlapack._malloc(4); 29 | 30 | emlapack.setValue(pjobz, 'V'.charCodeAt(0), 'i8'); 31 | emlapack.setValue(puplo, 'U'.charCodeAt(0), 'i8'); 32 | emlapack.setValue(pn, n, 'i32'); 33 | emlapack.setValue(plda, n, 'i32'); 34 | emlapack.setValue(plwork, -1, 'i32'); 35 | 36 | var a = new Float64Array(emlapack.HEAPF64.buffer, pa, n * n); 37 | var w = new Float64Array(emlapack.HEAPF64.buffer, pw, n); 38 | a.set([1.96, 0, 0, 0, 0, -6.49, 3.8, 0, 0, 0, -0.47, -6.39, 4.17, 0, 0, -7.2, 1.5, -1.51, 5.7, 0, -0.65, -6.34, 2.67, 1.8, -7.1]); 39 | 40 | dsyev(pjobz, puplo, pn, pa, plda, pw, pworkopt, plwork, pinfo); 41 | 42 | var workopt = emlapack.getValue(pworkopt, 'double'), 43 | pwork = emlapack._malloc(workopt * 8); 44 | emlapack.setValue(plwork, workopt, 'i32'); 45 | 46 | dsyev(pjobz, puplo, pn, pa, plda, pw, pwork, plwork, pinfo); 47 | 48 | console.log(w); 49 | // { '0': -11.065575263268391, 50 | // '1': -6.22874693239854, 51 | // '2': 0.8640279752720624, 52 | // '3': 8.865457108365518, 53 | // '4': 16.09483711202934 } 54 | ``` 55 | 56 | ## Building 57 | 58 | To build, you'll need to install and set up [Emscripten](http://kripken.github.io/emscripten-site), then download [clapack](http://www.netlib.org/clapack/) into `./clapack`. 59 | 60 | First, configure `clapack` by creating `make.inc`: 61 | 62 | ```bash 63 | $ cd clapack 64 | $ cp make.inc.example make.inc 65 | ``` 66 | 67 | Next, follow the `libf2c` installation instructions. You'll need to tell it to create `*.h` from `*.h0` files. The easiest way is to just `make all`: 68 | 69 | ```bash 70 | $ cd F2CLIBS/libf2c 71 | $ make all 72 | ``` 73 | 74 | Now from the main emlapack directory, proceed with gulp build: 75 | 76 | ```bash 77 | $ gulp build 78 | ``` 79 | 80 | This should take a while. Coffee, perhaps? 81 | 82 | ## Customizing Builds 83 | 84 | ### Manual 85 | 86 | You can modify [src/export-functions.js](./src/export-functions.js) with the functions you are using to reduce the bundle size significantly. 87 | 88 | ### Custom 89 | 90 | If the bundle is too large and you know the specific set of functions you would like to use, you can create a file called `custom/export-functions.js` which exports the list of functions you want. 91 | 92 | You could copy the [src/export-functions.js](./src/export-functions.js) file to the [custom](./custom) directory and modify it to your needs. 93 | 94 | The [custom](./custom) folder also contains a `export-functions.example.js` you could copy and rename to `export-functions.js` and modify. 95 | 96 | ## Docker 97 | 98 | For convenience, this repo also includes a Dockerfile so you can build everything in Docker. 99 | 100 | If you need a custom build, just add your `export-functions.js` file to the [custom](./custom) folder and execute the [scripts/docker_build.sh](./scripts/docker_build.sh) script. All it does is build the container and then runs it. 101 | 102 | **NOTE:** Make sure you run this script in the project root directory. 103 | 104 | ```shell 105 | ./scripts/docker_build.sh 106 | ``` 107 | 108 | After the script completes, you will see `asmjs.js`, `emlapack.wasm`, and `wasm.js` outputted to the root of the project directory. 109 | 110 | ## References 111 | 112 | For more detail, see: 113 | 114 | * http://www.netlib.org/blas/ 115 | * http://www.netlib.org/lapack/ 116 | * http://emscripten.org/ 117 | 118 | ## License 119 | 120 | © 2015 Yosuke Onoue, BSD-3-Clause. 121 | 122 | -------------------------------------------------------------------------------- /custom/export-functions.example.js: -------------------------------------------------------------------------------- 1 | const exportFunctions = [ 2 | '_dsyev_', 3 | '_dgesdd_' 4 | ] 5 | 6 | module.exports = exportFunctions 7 | -------------------------------------------------------------------------------- /example/index.js: -------------------------------------------------------------------------------- 1 | var emlapack = require('../emlapack'), 2 | n = 5, 3 | dsyev = emlapack.cwrap('dsyev_', null, ['number', 'number', 'number', 'number', 'number', 'number', 'number', 'number', 'number']), 4 | pjobz = emlapack._malloc(1), 5 | puplo = emlapack._malloc(1), 6 | pn = emlapack._malloc(4), 7 | pa = emlapack._malloc(n * n * 8), 8 | plda = emlapack._malloc(4), 9 | pw = emlapack._malloc(n * 8), 10 | plwork = emlapack._malloc(4), 11 | pinfo = emlapack._malloc(4), 12 | pworkopt = emlapack._malloc(4); 13 | 14 | emlapack.setValue(pjobz, 'V'.charCodeAt(0), 'i8'); 15 | emlapack.setValue(puplo, 'U'.charCodeAt(0), 'i8'); 16 | emlapack.setValue(pn, n, 'i32'); 17 | emlapack.setValue(plda, n, 'i32'); 18 | emlapack.setValue(plwork, -1, 'i32'); 19 | 20 | var a = new Float64Array(emlapack.HEAPF64.buffer, pa, n * n); 21 | var w = new Float64Array(emlapack.HEAPF64.buffer, pw, n); 22 | a.set([1.96, 0, 0, 0, 0, -6.49, 3.8, 0, 0, 0, -0.47, -6.39, 4.17, 0, 0, -7.2, 1.5, -1.51, 5.7, 0, -0.65, -6.34, 2.67, 1.8, -7.1]); 23 | 24 | dsyev(pjobz, puplo, pn, pa, plda, pw, pworkopt, plwork, pinfo); 25 | 26 | var workopt = emlapack.getValue(pworkopt, 'double'), 27 | pwork = emlapack._malloc(workopt * 8); 28 | emlapack.setValue(plwork, workopt, 'i32'); 29 | 30 | dsyev(pjobz, puplo, pn, pa, plda, pw, pwork, plwork, pinfo); 31 | 32 | console.log(w); 33 | -------------------------------------------------------------------------------- /gulpfile.js: -------------------------------------------------------------------------------- 1 | const gulp = require('gulp') 2 | const shell = require('gulp-shell') 3 | const libf2cFiles = require('./src/libf2c-files') 4 | const blasFiles = require('./src/blas-files') 5 | const lapackFiles = require('./src/lapack-files') 6 | const exportFunctions = require('./src/export-functions') 7 | 8 | const lapackInstallFiles = [ 9 | 'dlamch', 10 | 'slamch' 11 | ] 12 | 13 | var joinNames = function (names) { 14 | return names 15 | .map(function (name) { 16 | return '"' + name + '"' 17 | }) 18 | .join(',') 19 | } 20 | 21 | gulp.task('mkbuild', shell.task(['mkdir -p build'])) 22 | 23 | gulp.task('compile-libf2c', ['mkbuild'], shell.task( 24 | libf2cFiles.map(function (name) { 25 | return 'emcc clapack/F2CLIBS/libf2c/' + name + '.c -O2 -Iclapack/INCLUDE -o build/' + name + '.bc' 26 | }) 27 | )) 28 | 29 | gulp.task('compile-blas', ['mkbuild'], shell.task( 30 | blasFiles 31 | .map(function (name) { 32 | return 'emcc clapack/BLAS/SRC/' + name + '.c -O2 -Iclapack/INCLUDE -o build/' + name + '.bc' 33 | }) 34 | )) 35 | 36 | gulp.task('compile-lapack-install', ['mkbuild'], shell.task( 37 | lapackInstallFiles 38 | .map(function (name) { 39 | return 'emcc clapack/INSTALL/' + name + '.c -O2 -Iclapack/INCLUDE -o build/' + name + '.bc' 40 | }) 41 | )) 42 | 43 | gulp.task('compile-lapack', ['mkbuild'], shell.task( 44 | lapackFiles 45 | .map(function (name) { 46 | return 'emcc clapack/SRC/' + name + '.c -O2 -Iclapack/INCLUDE -o build/' + name + '.bc' 47 | }) 48 | )) 49 | 50 | gulp.task('link-asmjs', ['compile-libf2c', 'compile-blas', 'compile-lapack', 'compile-lapack-install'], shell.task([ 51 | "emcc build/*.bc -o asmjs.js -O2 --memory-init-file 0 -s EXPORTED_FUNCTIONS='[" + joinNames(exportFunctions) + "]' --post-js src/export.js" 52 | ])) 53 | 54 | gulp.task('link-wasm', ['compile-libf2c', 'compile-blas', 'compile-lapack', 'compile-lapack-install'], shell.task([ 55 | "emcc build/*.bc -o emlapack.js -O2 --memory-init-file 0 -s WASM=1 -s EXPORTED_FUNCTIONS='[" + joinNames(exportFunctions) + "]' --post-js src/export.js", 56 | 'mv emlapack.js wasm.js' 57 | ])) 58 | 59 | gulp.task('build', ['link-asmjs', 'link-wasm']) 60 | 61 | gulp.task('test', shell.task('mocha --recursive --colors --reporter dot')) 62 | 63 | gulp.task('default', ['build']) 64 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "emlapack", 3 | "version": "0.0.3", 4 | "description": "BLAS/LAPACK for JavaScript", 5 | "main": "asmjs.js", 6 | "files": [ 7 | "asmjs.js", 8 | "wasm.js", 9 | "emlapack.wasm" 10 | ], 11 | "devDependencies": { 12 | "babel": "^5.3.0", 13 | "expect.js": "^0.3.1", 14 | "gulp": "^3.8.11", 15 | "gulp-shell": "^0.4.1", 16 | "mocha": "^2.2.4" 17 | }, 18 | "scripts": { 19 | "build": "gulp build", 20 | "test": "gulp test" 21 | }, 22 | "repository": { 23 | "type": "git", 24 | "url": "https://github.com/likr/emlapack.git" 25 | }, 26 | "author": "Yosuke ONOUE ", 27 | "license": "BSD-3-Clause", 28 | "bugs": { 29 | "url": "https://github.com/likr/emlapack/issues" 30 | }, 31 | "homepage": "https://github.com/likr/emlapack" 32 | } 33 | -------------------------------------------------------------------------------- /scripts/custom_build.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | set -euxo pipefail 4 | 5 | DEFAULT_EMLAPACK_DIST_DIR=/tmp/emlapack/dist 6 | EMLAPACK_DIST_DIR="${EMLAPACK_DIST_DIR:=$DEFAULT_EMLAPACK_DIST_DIR}" 7 | 8 | add_custom_js () { 9 | local FILENAME=$1 10 | 11 | if [[ -f "custom/${FILENAME}" ]]; then 12 | echo "Adding custom ${FILENAME}..." 13 | 14 | mv "src/${FILENAME}" "src/${FILENAME}.bak" 15 | 16 | cp "custom/${FILENAME}" "src/${FILENAME}" 17 | fi 18 | } 19 | 20 | remove_custom_js () { 21 | local FILENAME=$1 22 | 23 | if [[ -f "custom/${FILENAME}" ]]; then 24 | echo "Removing custom ${FILENAME}..." 25 | 26 | rm "src/${FILENAME}" 27 | 28 | mv "src/${FILENAME}.bak" "src/${FILENAME}" 29 | fi 30 | } 31 | 32 | if [[ -d custom ]]; then 33 | echo "[1/3]: Preparing custom build..." 34 | 35 | add_custom_js "export-functions.js" 36 | 37 | echo "[2/3]: Building custom bundle..." 38 | 39 | npm run build 40 | 41 | echo "[3/3]: Cleaning up custom build..." 42 | 43 | remove_custom_js "export-functions.js" 44 | else 45 | echo "Building default bundle (all functions)..." 46 | 47 | npm run build 48 | fi 49 | 50 | echo "Copying output to build..." 51 | 52 | mkdir -p "${EMLAPACK_DIST_DIR}" 53 | cp asmjs.js wasm.js emlapack.wasm "${EMLAPACK_DIST_DIR}" 54 | -------------------------------------------------------------------------------- /scripts/docker_build.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | set -euxo pipefail 4 | 5 | DEFAULT_EMLAPACK_DIST_DIR=/tmp/emlapack/dist 6 | EMLAPACK_DIST_DIR="${EMLAPACK_DIST_DIR:=$DEFAULT_EMLAPACK_DIST_DIR}" 7 | 8 | docker build . --tag=emlapack 9 | exec docker run --rm -it -v `pwd`:"${EMLAPACK_DIST_DIR}" emlapack 10 | -------------------------------------------------------------------------------- /src/blas-files.js: -------------------------------------------------------------------------------- 1 | const blasFiles = [ 2 | 'dcabs1', 3 | 'lsame', 4 | 'scabs1', 5 | 'xerbla', 6 | 'srotg', 7 | 'srotmg', 8 | 'srot', 9 | 'srotm', 10 | 'sswap', 11 | 'sscal', 12 | 'scopy', 13 | 'saxpy', 14 | 'sdot', 15 | 'sdsdot', 16 | 'snrm2', 17 | 'scnrm2', 18 | 'sasum', 19 | 'isamax', 20 | 'drotg', 21 | 'drotmg', 22 | 'drot', 23 | 'drotm', 24 | 'dswap', 25 | 'dscal', 26 | 'dcopy', 27 | 'daxpy', 28 | 'ddot', 29 | 'dsdot', 30 | 'dnrm2', 31 | 'dznrm2', 32 | 'dasum', 33 | 'idamax', 34 | 'crotg', 35 | 'csrot', 36 | 'cswap', 37 | 'cscal', 38 | 'csscal', 39 | 'ccopy', 40 | 'caxpy', 41 | 'cdotu', 42 | 'cdotc', 43 | 'scasum', 44 | 'icamax', 45 | 'zrotg', 46 | 'zdrot', 47 | 'zswap', 48 | 'zscal', 49 | 'zdscal', 50 | 'zcopy', 51 | 'zaxpy', 52 | 'zdotu', 53 | 'zdotc', 54 | 'dzasum', 55 | 'izamax', 56 | 'sgemv', 57 | 'sgbmv', 58 | 'ssymv', 59 | 'ssbmv', 60 | 'sspmv', 61 | 'strmv', 62 | 'stbmv', 63 | 'stpmv', 64 | 'strsv', 65 | 'stbsv', 66 | 'stpsv', 67 | 'sger', 68 | 'ssyr', 69 | 'sspr', 70 | 'ssyr2', 71 | 'sspr2', 72 | 'dgemv', 73 | 'dgbmv', 74 | 'dsymv', 75 | 'dsbmv', 76 | 'dspmv', 77 | 'dtrmv', 78 | 'dtbmv', 79 | 'dtpmv', 80 | 'dtrsv', 81 | 'dtbsv', 82 | 'dtpsv', 83 | 'dger', 84 | 'dsyr', 85 | 'dspr', 86 | 'dsyr2', 87 | 'dspr2', 88 | 'cgemv', 89 | 'cgbmv', 90 | 'chemv', 91 | 'chbmv', 92 | 'chpmv', 93 | 'ctrmv', 94 | 'ctbmv', 95 | 'ctpmv', 96 | 'ctrsv', 97 | 'ctbsv', 98 | 'ctpsv', 99 | 'cgeru', 100 | 'cgerc', 101 | 'cher', 102 | 'chpr', 103 | 'cher2', 104 | 'chpr2', 105 | 'zgemv', 106 | 'zgbmv', 107 | 'zhemv', 108 | 'zhbmv', 109 | 'zhpmv', 110 | 'ztrmv', 111 | 'ztbmv', 112 | 'ztpmv', 113 | 'ztrsv', 114 | 'ztbsv', 115 | 'ztpsv', 116 | 'zgeru', 117 | 'zgerc', 118 | 'zher', 119 | 'zhpr', 120 | 'zher2', 121 | 'zhpr2', 122 | 'sgemm', 123 | 'ssymm', 124 | 'ssyrk', 125 | 'ssyr2k', 126 | 'strmm', 127 | 'strsm', 128 | 'dgemm', 129 | 'dsymm', 130 | 'dsyrk', 131 | 'dsyr2k', 132 | 'dtrmm', 133 | 'dtrsm', 134 | 'cgemm', 135 | 'csymm', 136 | 'chemm', 137 | 'csyrk', 138 | 'cherk', 139 | 'csyr2k', 140 | 'cher2k', 141 | 'ctrmm', 142 | 'ctrsm', 143 | 'zgemm', 144 | 'zsymm', 145 | 'zhemm', 146 | 'zsyrk', 147 | 'zherk', 148 | 'zsyr2k', 149 | 'zher2k', 150 | 'ztrmm', 151 | 'ztrsm' 152 | ] 153 | 154 | module.exports = blasFiles 155 | -------------------------------------------------------------------------------- /src/export-functions.js: -------------------------------------------------------------------------------- 1 | const exportFunctions = [ 2 | '_f2c_srotg', 3 | '_f2c_srotmg', 4 | '_f2c_srot', 5 | '_f2c_srotm', 6 | '_f2c_sswap', 7 | '_f2c_sscal', 8 | '_f2c_scopy', 9 | '_f2c_saxpy', 10 | '_f2c_sdot', 11 | '_sdsdot_', 12 | '_f2c_snrm2', 13 | '_f2c_scnrm2', 14 | '_f2c_sasum', 15 | '_f2c_isamax', 16 | '_f2c_drotg', 17 | '_f2c_drotmg', 18 | '_f2c_drot', 19 | '_f2c_drotm', 20 | '_f2c_dswap', 21 | '_f2c_dscal', 22 | '_f2c_dcopy', 23 | '_f2c_daxpy', 24 | '_f2c_ddot', 25 | '_dsdot_', 26 | '_f2c_dnrm2', 27 | '_f2c_dznrm2', 28 | '_f2c_dasum', 29 | '_f2c_idamax', 30 | '_f2c_crotg', 31 | '_csrot_', 32 | '_f2c_cswap', 33 | '_f2c_cscal', 34 | '_f2c_csscal', 35 | '_f2c_ccopy', 36 | '_f2c_caxpy', 37 | '_f2c_cdotu', 38 | '_f2c_cdotc', 39 | '_f2c_scasum', 40 | '_f2c_icamax', 41 | '_f2c_zrotg', 42 | '_zdrot_', 43 | '_f2c_zswap', 44 | '_f2c_zscal', 45 | '_f2c_zdscal', 46 | '_f2c_zcopy', 47 | '_f2c_zaxpy', 48 | '_f2c_zdotu', 49 | '_f2c_zdotc', 50 | '_f2c_dzasum', 51 | '_f2c_izamax', 52 | '_f2c_sgemv', 53 | '_f2c_sgbmv', 54 | '_f2c_ssymv', 55 | '_f2c_ssbmv', 56 | '_f2c_sspmv', 57 | '_f2c_strmv', 58 | '_f2c_stbmv', 59 | '_f2c_stpmv', 60 | '_f2c_strsv', 61 | '_f2c_stbsv', 62 | '_f2c_stpsv', 63 | '_f2c_sger', 64 | '_f2c_ssyr', 65 | '_f2c_sspr', 66 | '_f2c_ssyr2', 67 | '_f2c_sspr2', 68 | '_f2c_dgemv', 69 | '_f2c_dgbmv', 70 | '_f2c_dsymv', 71 | '_f2c_dsbmv', 72 | '_f2c_dspmv', 73 | '_f2c_dtrmv', 74 | '_f2c_dtbmv', 75 | '_f2c_dtpmv', 76 | '_f2c_dtrsv', 77 | '_f2c_dtbsv', 78 | '_f2c_dtpsv', 79 | '_f2c_dger', 80 | '_f2c_dsyr', 81 | '_f2c_dspr', 82 | '_f2c_dsyr2', 83 | '_f2c_dspr2', 84 | '_f2c_cgemv', 85 | '_f2c_cgbmv', 86 | '_f2c_chemv', 87 | '_f2c_chbmv', 88 | '_f2c_chpmv', 89 | '_f2c_ctrmv', 90 | '_f2c_ctbmv', 91 | '_f2c_ctpmv', 92 | '_f2c_ctrsv', 93 | '_f2c_ctbsv', 94 | '_f2c_ctpsv', 95 | '_f2c_cgeru', 96 | '_f2c_cgerc', 97 | '_f2c_cher', 98 | '_f2c_chpr', 99 | '_f2c_cher2', 100 | '_f2c_chpr2', 101 | '_f2c_zgemv', 102 | '_f2c_zgbmv', 103 | '_f2c_zhemv', 104 | '_f2c_zhbmv', 105 | '_f2c_zhpmv', 106 | '_f2c_ztrmv', 107 | '_f2c_ztbmv', 108 | '_f2c_ztpmv', 109 | '_f2c_ztrsv', 110 | '_f2c_ztbsv', 111 | '_f2c_ztpsv', 112 | '_f2c_zgeru', 113 | '_f2c_zgerc', 114 | '_f2c_zher', 115 | '_f2c_zhpr', 116 | '_f2c_zher2', 117 | '_f2c_zhpr2', 118 | '_f2c_sgemm', 119 | '_f2c_ssymm', 120 | '_f2c_ssyrk', 121 | '_f2c_ssyr2k', 122 | '_f2c_strmm', 123 | '_f2c_strsm', 124 | '_f2c_dgemm', 125 | '_f2c_dsymm', 126 | '_f2c_dsyrk', 127 | '_f2c_dsyr2k', 128 | '_f2c_dtrmm', 129 | '_f2c_dtrsm', 130 | '_f2c_cgemm', 131 | '_f2c_csymm', 132 | '_f2c_chemm', 133 | '_f2c_csyrk', 134 | '_f2c_cherk', 135 | '_f2c_csyr2k', 136 | '_f2c_cher2k', 137 | '_f2c_ctrmm', 138 | '_f2c_ctrsm', 139 | '_f2c_zgemm', 140 | '_f2c_zsymm', 141 | '_f2c_zhemm', 142 | '_f2c_zsyrk', 143 | '_f2c_zherk', 144 | '_f2c_zsyr2k', 145 | '_f2c_zher2k', 146 | '_f2c_ztrmm', 147 | '_f2c_ztrsm', 148 | '_sbdsdc_', 149 | '_sbdsqr_', 150 | '_sdisna_', 151 | '_sgbbrd_', 152 | '_sgbcon_', 153 | '_sgbequ_', 154 | '_sgbequb_', 155 | '_sgbrfs_', 156 | '_sgbsv_', 157 | '_sgbsvx_', 158 | '_sgbtrf_', 159 | '_sgbtrs_', 160 | '_sgebak_', 161 | '_sgebal_', 162 | '_sgebrd_', 163 | '_sgecon_', 164 | '_sgeequ_', 165 | '_sgeequb_', 166 | '_sgees_', 167 | '_sgeesx_', 168 | '_sgeev_', 169 | '_sgeevx_', 170 | '_sgehrd_', 171 | '_sgejsv_', 172 | '_sgelqf_', 173 | '_sgels_', 174 | '_sgelsd_', 175 | '_sgelss_', 176 | '_sgelsy_', 177 | '_sgeqlf_', 178 | '_sgeqp3_', 179 | '_sgeqpf_', 180 | '_sgeqrf_', 181 | '_sgerfs_', 182 | '_sgerqf_', 183 | '_sgesdd_', 184 | '_sgesv_', 185 | '_sgesvd_', 186 | '_sgesvj_', 187 | '_sgesvx_', 188 | '_sgetrf_', 189 | '_sgetri_', 190 | '_sgetrs_', 191 | '_sggbak_', 192 | '_sggbal_', 193 | '_sgges_', 194 | '_sggesx_', 195 | '_sggev_', 196 | '_sggevx_', 197 | '_sggglm_', 198 | '_sgghrd_', 199 | '_sgglse_', 200 | '_sggqrf_', 201 | '_sggrqf_', 202 | '_sggsvd_', 203 | '_sggsvp_', 204 | '_sgtcon_', 205 | '_sgtrfs_', 206 | '_sgtsv_', 207 | '_sgtsvx_', 208 | '_sgttrf_', 209 | '_sgttrs_', 210 | '_shgeqz_', 211 | '_shsein_', 212 | '_shseqr_', 213 | '_sopgtr_', 214 | '_sopmtr_', 215 | '_sorgbr_', 216 | '_sorghr_', 217 | '_sorglq_', 218 | '_sorgql_', 219 | '_sorgqr_', 220 | '_sorgrq_', 221 | '_sorgtr_', 222 | '_sormbr_', 223 | '_sormhr_', 224 | '_sormlq_', 225 | '_sormql_', 226 | '_sormqr_', 227 | '_sormrq_', 228 | '_sormrz_', 229 | '_sormtr_', 230 | '_spbcon_', 231 | '_spbequ_', 232 | '_spbrfs_', 233 | '_spbstf_', 234 | '_spbsv_', 235 | '_spbsvx_', 236 | '_spbtrf_', 237 | '_spbtrs_', 238 | '_spftrf_', 239 | '_spftri_', 240 | '_spftrs_', 241 | '_spocon_', 242 | '_spoequ_', 243 | '_spoequb_', 244 | '_sporfs_', 245 | '_sposv_', 246 | '_sposvx_', 247 | '_spotrf_', 248 | '_spotri_', 249 | '_spotrs_', 250 | '_sppcon_', 251 | '_sppequ_', 252 | '_spprfs_', 253 | '_sppsv_', 254 | '_sppsvx_', 255 | '_spptrf_', 256 | '_spptri_', 257 | '_spptrs_', 258 | '_spstrf_', 259 | '_sptcon_', 260 | '_spteqr_', 261 | '_sptrfs_', 262 | '_sptsv_', 263 | '_sptsvx_', 264 | '_spttrf_', 265 | '_spttrs_', 266 | '_ssbev_', 267 | '_ssbevd_', 268 | '_ssbevx_', 269 | '_ssbgst_', 270 | '_ssbgv_', 271 | '_ssbgvd_', 272 | '_ssbgvx_', 273 | '_ssbtrd_', 274 | '_ssfrk_', 275 | '_sspcon_', 276 | '_sspev_', 277 | '_sspevd_', 278 | '_sspevx_', 279 | '_sspgst_', 280 | '_sspgv_', 281 | '_sspgvd_', 282 | '_sspgvx_', 283 | '_ssprfs_', 284 | '_sspsv_', 285 | '_sspsvx_', 286 | '_ssptrd_', 287 | '_ssptrf_', 288 | '_ssptri_', 289 | '_ssptrs_', 290 | '_sstebz_', 291 | '_sstedc_', 292 | '_sstegr_', 293 | '_sstein_', 294 | '_sstemr_', 295 | '_ssteqr_', 296 | '_ssterf_', 297 | '_sstev_', 298 | '_sstevd_', 299 | '_sstevr_', 300 | '_sstevx_', 301 | '_ssycon_', 302 | '_ssyequb_', 303 | '_ssyev_', 304 | '_ssyevd_', 305 | '_ssyevr_', 306 | '_ssyevx_', 307 | '_ssygst_', 308 | '_ssygv_', 309 | '_ssygvd_', 310 | '_ssygvx_', 311 | '_ssyrfs_', 312 | '_ssysv_', 313 | '_ssysvx_', 314 | '_ssytrd_', 315 | '_ssytrf_', 316 | '_ssytri_', 317 | '_ssytrs_', 318 | '_stbcon_', 319 | '_stbrfs_', 320 | '_stbtrs_', 321 | '_stfsm_', 322 | '_stftri_', 323 | '_stfttp_', 324 | '_stfttr_', 325 | '_stgevc_', 326 | '_stgexc_', 327 | '_stgsen_', 328 | '_stgsja_', 329 | '_stgsna_', 330 | '_stgsyl_', 331 | '_stpcon_', 332 | '_stprfs_', 333 | '_stptri_', 334 | '_stptrs_', 335 | '_stpttf_', 336 | '_stpttr_', 337 | '_strcon_', 338 | '_strevc_', 339 | '_strexc_', 340 | '_strrfs_', 341 | '_strsen_', 342 | '_strsna_', 343 | '_strsyl_', 344 | '_strtri_', 345 | '_strtrs_', 346 | '_strttf_', 347 | '_strttp_', 348 | '_stzrzf_', 349 | '_dbdsdc_', 350 | '_dbdsqr_', 351 | '_ddisna_', 352 | '_dgbbrd_', 353 | '_dgbcon_', 354 | '_dgbequ_', 355 | '_dgbequb_', 356 | '_dgbrfs_', 357 | '_dgbsv_', 358 | '_dgbsvx_', 359 | '_dgbtrf_', 360 | '_dgbtrs_', 361 | '_dgebak_', 362 | '_dgebal_', 363 | '_dgebrd_', 364 | '_dgecon_', 365 | '_dgeequ_', 366 | '_dgeequb_', 367 | '_dgees_', 368 | '_dgeesx_', 369 | '_dgeev_', 370 | '_dgeevx_', 371 | '_dgehrd_', 372 | '_dgejsv_', 373 | '_dgelqf_', 374 | '_dgels_', 375 | '_dgelsd_', 376 | '_dgelss_', 377 | '_dgelsy_', 378 | '_dgeqlf_', 379 | '_dgeqp3_', 380 | '_dgeqpf_', 381 | '_dgeqrf_', 382 | '_dgerfs_', 383 | '_dgerqf_', 384 | '_dgesdd_', 385 | '_dgesv_', 386 | '_dgesvd_', 387 | '_dgesvj_', 388 | '_dgesvx_', 389 | '_dgetrf_', 390 | '_dgetri_', 391 | '_dgetrs_', 392 | '_dggbak_', 393 | '_dggbal_', 394 | '_dgges_', 395 | '_dggesx_', 396 | '_dggev_', 397 | '_dggevx_', 398 | '_dggglm_', 399 | '_dgghrd_', 400 | '_dgglse_', 401 | '_dggqrf_', 402 | '_dggrqf_', 403 | '_dggsvd_', 404 | '_dggsvp_', 405 | '_dgtcon_', 406 | '_dgtrfs_', 407 | '_dgtsv_', 408 | '_dgtsvx_', 409 | '_dgttrf_', 410 | '_dgttrs_', 411 | '_dhgeqz_', 412 | '_dhsein_', 413 | '_dhseqr_', 414 | '_dopgtr_', 415 | '_dopmtr_', 416 | '_dorgbr_', 417 | '_dorghr_', 418 | '_dorglq_', 419 | '_dorgql_', 420 | '_dorgqr_', 421 | '_dorgrq_', 422 | '_dorgtr_', 423 | '_dormbr_', 424 | '_dormhr_', 425 | '_dormlq_', 426 | '_dormql_', 427 | '_dormqr_', 428 | '_dormrq_', 429 | '_dormrz_', 430 | '_dormtr_', 431 | '_dpbcon_', 432 | '_dpbequ_', 433 | '_dpbrfs_', 434 | '_dpbstf_', 435 | '_dpbsv_', 436 | '_dpbsvx_', 437 | '_dpbtrf_', 438 | '_dpbtrs_', 439 | '_dpftrf_', 440 | '_dpftri_', 441 | '_dpftrs_', 442 | '_dpocon_', 443 | '_dpoequ_', 444 | '_dpoequb_', 445 | '_dporfs_', 446 | '_dposv_', 447 | '_dposvx_', 448 | '_dpotrf_', 449 | '_dpotri_', 450 | '_dpotrs_', 451 | '_dppcon_', 452 | '_dppequ_', 453 | '_dpprfs_', 454 | '_dppsv_', 455 | '_dppsvx_', 456 | '_dpptrf_', 457 | '_dpptri_', 458 | '_dpptrs_', 459 | '_dpstrf_', 460 | '_dptcon_', 461 | '_dpteqr_', 462 | '_dptrfs_', 463 | '_dptsv_', 464 | '_dptsvx_', 465 | '_dpttrf_', 466 | '_dpttrs_', 467 | '_dsbev_', 468 | '_dsbevd_', 469 | '_dsbevx_', 470 | '_dsbgst_', 471 | '_dsbgv_', 472 | '_dsbgvd_', 473 | '_dsbgvx_', 474 | '_dsbtrd_', 475 | '_dsfrk_', 476 | '_dspcon_', 477 | '_dspev_', 478 | '_dspevd_', 479 | '_dspevx_', 480 | '_dspgst_', 481 | '_dspgv_', 482 | '_dspgvd_', 483 | '_dspgvx_', 484 | '_dsprfs_', 485 | '_dspsv_', 486 | '_dspsvx_', 487 | '_dsptrd_', 488 | '_dsptrf_', 489 | '_dsptri_', 490 | '_dsptrs_', 491 | '_dstebz_', 492 | '_dstedc_', 493 | '_dstegr_', 494 | '_dstein_', 495 | '_dstemr_', 496 | '_dsteqr_', 497 | '_dsterf_', 498 | '_dstev_', 499 | '_dstevd_', 500 | '_dstevr_', 501 | '_dstevx_', 502 | '_dsycon_', 503 | '_dsyequb_', 504 | '_dsyev_', 505 | '_dsyevd_', 506 | '_dsyevr_', 507 | '_dsyevx_', 508 | '_dsygst_', 509 | '_dsygv_', 510 | '_dsygvd_', 511 | '_dsygvx_', 512 | '_dsyrfs_', 513 | '_dsysv_', 514 | '_dsysvx_', 515 | '_dsytrd_', 516 | '_dsytrf_', 517 | '_dsytri_', 518 | '_dsytrs_', 519 | '_dtbcon_', 520 | '_dtbrfs_', 521 | '_dtbtrs_', 522 | '_dtfsm_', 523 | '_dtftri_', 524 | '_dtfttp_', 525 | '_dtfttr_', 526 | '_dtgevc_', 527 | '_dtgexc_', 528 | '_dtgsen_', 529 | '_dtgsja_', 530 | '_dtgsna_', 531 | '_dtgsyl_', 532 | '_dtpcon_', 533 | '_dtprfs_', 534 | '_dtptri_', 535 | '_dtptrs_', 536 | '_dtpttf_', 537 | '_dtpttr_', 538 | '_dtrcon_', 539 | '_dtrevc_', 540 | '_dtrexc_', 541 | '_dtrrfs_', 542 | '_dtrsen_', 543 | '_dtrsna_', 544 | '_dtrsyl_', 545 | '_dtrtri_', 546 | '_dtrtrs_', 547 | '_dtrttf_', 548 | '_dtrttp_', 549 | '_dtzrzf_', 550 | '_cbdsdc_', 551 | '_cbdsqr_', 552 | '_cdisna_', 553 | '_cgbbrd_', 554 | '_cgbcon_', 555 | '_cgbequ_', 556 | '_cgbequb_', 557 | '_cgbrfs_', 558 | '_cgbsv_', 559 | '_cgbsvx_', 560 | '_cgbtrf_', 561 | '_cgbtrs_', 562 | '_cgebak_', 563 | '_cgebal_', 564 | '_cgebrd_', 565 | '_cgecon_', 566 | '_cgeequ_', 567 | '_cgeequb_', 568 | '_cgees_', 569 | '_cgeesx_', 570 | '_cgeev_', 571 | '_cgeevx_', 572 | '_cgehrd_', 573 | '_cgejsv_', 574 | '_cgelqf_', 575 | '_cgels_', 576 | '_cgelsd_', 577 | '_cgelss_', 578 | '_cgelsy_', 579 | '_cgeqlf_', 580 | '_cgeqp3_', 581 | '_cgeqpf_', 582 | '_cgeqrf_', 583 | '_cgerfs_', 584 | '_cgerqf_', 585 | '_cgesdd_', 586 | '_cgesv_', 587 | '_cgesvd_', 588 | '_cgesvj_', 589 | '_cgesvx_', 590 | '_cgetrf_', 591 | '_cgetri_', 592 | '_cgetrs_', 593 | '_cggbak_', 594 | '_cggbal_', 595 | '_cgges_', 596 | '_cggesx_', 597 | '_cggev_', 598 | '_cggevx_', 599 | '_cggglm_', 600 | '_cgghrd_', 601 | '_cgglse_', 602 | '_cggqrf_', 603 | '_cggrqf_', 604 | '_cggsvd_', 605 | '_cggsvp_', 606 | '_cgtcon_', 607 | '_cgtrfs_', 608 | '_cgtsv_', 609 | '_cgtsvx_', 610 | '_cgttrf_', 611 | '_cgttrs_', 612 | '_chgeqz_', 613 | '_chsein_', 614 | '_chseqr_', 615 | '_copgtr_', 616 | '_copmtr_', 617 | '_corgbr_', 618 | '_corghr_', 619 | '_corglq_', 620 | '_corgql_', 621 | '_corgqr_', 622 | '_corgrq_', 623 | '_corgtr_', 624 | '_cormbr_', 625 | '_cormhr_', 626 | '_cormlq_', 627 | '_cormql_', 628 | '_cormqr_', 629 | '_cormrq_', 630 | '_cormrz_', 631 | '_cormtr_', 632 | '_cpbcon_', 633 | '_cpbequ_', 634 | '_cpbrfs_', 635 | '_cpbstf_', 636 | '_cpbsv_', 637 | '_cpbsvx_', 638 | '_cpbtrf_', 639 | '_cpbtrs_', 640 | '_cpftrf_', 641 | '_cpftri_', 642 | '_cpftrs_', 643 | '_cpocon_', 644 | '_cpoequ_', 645 | '_cpoequb_', 646 | '_cporfs_', 647 | '_cposv_', 648 | '_cposvx_', 649 | '_cpotrf_', 650 | '_cpotri_', 651 | '_cpotrs_', 652 | '_cppcon_', 653 | '_cppequ_', 654 | '_cpprfs_', 655 | '_cppsv_', 656 | '_cppsvx_', 657 | '_cpptrf_', 658 | '_cpptri_', 659 | '_cpptrs_', 660 | '_cpstrf_', 661 | '_cptcon_', 662 | '_cpteqr_', 663 | '_cptrfs_', 664 | '_cptsv_', 665 | '_cptsvx_', 666 | '_cpttrf_', 667 | '_cpttrs_', 668 | '_csbev_', 669 | '_csbevd_', 670 | '_csbevx_', 671 | '_csbgst_', 672 | '_csbgv_', 673 | '_csbgvd_', 674 | '_csbgvx_', 675 | '_csbtrd_', 676 | '_csfrk_', 677 | '_cspcon_', 678 | '_cspev_', 679 | '_cspevd_', 680 | '_cspevx_', 681 | '_cspgst_', 682 | '_cspgv_', 683 | '_cspgvd_', 684 | '_cspgvx_', 685 | '_csprfs_', 686 | '_cspsv_', 687 | '_cspsvx_', 688 | '_csptrd_', 689 | '_csptrf_', 690 | '_csptri_', 691 | '_csptrs_', 692 | '_cstebz_', 693 | '_cstedc_', 694 | '_cstegr_', 695 | '_cstein_', 696 | '_cstemr_', 697 | '_csteqr_', 698 | '_csterf_', 699 | '_cstev_', 700 | '_cstevd_', 701 | '_cstevr_', 702 | '_cstevx_', 703 | '_csycon_', 704 | '_csyequb_', 705 | '_csyev_', 706 | '_csyevd_', 707 | '_csyevr_', 708 | '_csyevx_', 709 | '_csygst_', 710 | '_csygv_', 711 | '_csygvd_', 712 | '_csygvx_', 713 | '_csyrfs_', 714 | '_csysv_', 715 | '_csysvx_', 716 | '_csytrd_', 717 | '_csytrf_', 718 | '_csytri_', 719 | '_csytrs_', 720 | '_ctbcon_', 721 | '_ctbrfs_', 722 | '_ctbtrs_', 723 | '_ctfsm_', 724 | '_ctftri_', 725 | '_ctfttp_', 726 | '_ctfttr_', 727 | '_ctgevc_', 728 | '_ctgexc_', 729 | '_ctgsen_', 730 | '_ctgsja_', 731 | '_ctgsna_', 732 | '_ctgsyl_', 733 | '_ctpcon_', 734 | '_ctprfs_', 735 | '_ctptri_', 736 | '_ctptrs_', 737 | '_ctpttf_', 738 | '_ctpttr_', 739 | '_ctrcon_', 740 | '_ctrevc_', 741 | '_ctrexc_', 742 | '_ctrrfs_', 743 | '_ctrsen_', 744 | '_ctrsna_', 745 | '_ctrsyl_', 746 | '_ctrtri_', 747 | '_ctrtrs_', 748 | '_ctrttf_', 749 | '_ctrttp_', 750 | '_ctzrzf_', 751 | '_zbdsdc_', 752 | '_zbdsqr_', 753 | '_zdisna_', 754 | '_zgbbrd_', 755 | '_zgbcon_', 756 | '_zgbequ_', 757 | '_zgbequb_', 758 | '_zgbrfs_', 759 | '_zgbsv_', 760 | '_zgbsvx_', 761 | '_zgbtrf_', 762 | '_zgbtrs_', 763 | '_zgebak_', 764 | '_zgebal_', 765 | '_zgebrd_', 766 | '_zgecon_', 767 | '_zgeequ_', 768 | '_zgeequb_', 769 | '_zgees_', 770 | '_zgeesx_', 771 | '_zgeev_', 772 | '_zgeevx_', 773 | '_zgehrd_', 774 | '_zgejsv_', 775 | '_zgelqf_', 776 | '_zgels_', 777 | '_zgelsd_', 778 | '_zgelss_', 779 | '_zgelsy_', 780 | '_zgeqlf_', 781 | '_zgeqp3_', 782 | '_zgeqpf_', 783 | '_zgeqrf_', 784 | '_zgerfs_', 785 | '_zgerqf_', 786 | '_zgesdd_', 787 | '_zgesv_', 788 | '_zgesvd_', 789 | '_zgesvj_', 790 | '_zgesvx_', 791 | '_zgetrf_', 792 | '_zgetri_', 793 | '_zgetrs_', 794 | '_zggbak_', 795 | '_zggbal_', 796 | '_zgges_', 797 | '_zggesx_', 798 | '_zggev_', 799 | '_zggevx_', 800 | '_zggglm_', 801 | '_zgghrd_', 802 | '_zgglse_', 803 | '_zggqrf_', 804 | '_zggrqf_', 805 | '_zggsvd_', 806 | '_zggsvp_', 807 | '_zgtcon_', 808 | '_zgtrfs_', 809 | '_zgtsv_', 810 | '_zgtsvx_', 811 | '_zgttrf_', 812 | '_zgttrs_', 813 | '_zhgeqz_', 814 | '_zhsein_', 815 | '_zhseqr_', 816 | '_zopgtr_', 817 | '_zopmtr_', 818 | '_zorgbr_', 819 | '_zorghr_', 820 | '_zorglq_', 821 | '_zorgql_', 822 | '_zorgqr_', 823 | '_zorgrq_', 824 | '_zorgtr_', 825 | '_zormbr_', 826 | '_zormhr_', 827 | '_zormlq_', 828 | '_zormql_', 829 | '_zormqr_', 830 | '_zormrq_', 831 | '_zormrz_', 832 | '_zormtr_', 833 | '_zpbcon_', 834 | '_zpbequ_', 835 | '_zpbrfs_', 836 | '_zpbstf_', 837 | '_zpbsv_', 838 | '_zpbsvx_', 839 | '_zpbtrf_', 840 | '_zpbtrs_', 841 | '_zpftrf_', 842 | '_zpftri_', 843 | '_zpftrs_', 844 | '_zpocon_', 845 | '_zpoequ_', 846 | '_zpoequb_', 847 | '_zporfs_', 848 | '_zposv_', 849 | '_zposvx_', 850 | '_zpotrf_', 851 | '_zpotri_', 852 | '_zpotrs_', 853 | '_zppcon_', 854 | '_zppequ_', 855 | '_zpprfs_', 856 | '_zppsv_', 857 | '_zppsvx_', 858 | '_zpptrf_', 859 | '_zpptri_', 860 | '_zpptrs_', 861 | '_zpstrf_', 862 | '_zptcon_', 863 | '_zpteqr_', 864 | '_zptrfs_', 865 | '_zptsv_', 866 | '_zptsvx_', 867 | '_zpttrf_', 868 | '_zpttrs_', 869 | '_zsbev_', 870 | '_zsbevd_', 871 | '_zsbevx_', 872 | '_zsbgst_', 873 | '_zsbgv_', 874 | '_zsbgvd_', 875 | '_zsbgvx_', 876 | '_zsbtrd_', 877 | '_zsfrk_', 878 | '_zspcon_', 879 | '_zspev_', 880 | '_zspevd_', 881 | '_zspevx_', 882 | '_zspgst_', 883 | '_zspgv_', 884 | '_zspgvd_', 885 | '_zspgvx_', 886 | '_zsprfs_', 887 | '_zspsv_', 888 | '_zspsvx_', 889 | '_zsptrd_', 890 | '_zsptrf_', 891 | '_zsptri_', 892 | '_zsptrs_', 893 | '_zstebz_', 894 | '_zstedc_', 895 | '_zstegr_', 896 | '_zstein_', 897 | '_zstemr_', 898 | '_zsteqr_', 899 | '_zsterf_', 900 | '_zstev_', 901 | '_zstevd_', 902 | '_zstevr_', 903 | '_zstevx_', 904 | '_zsycon_', 905 | '_zsyequb_', 906 | '_zsyev_', 907 | '_zsyevd_', 908 | '_zsyevr_', 909 | '_zsyevx_', 910 | '_zsygst_', 911 | '_zsygv_', 912 | '_zsygvd_', 913 | '_zsygvx_', 914 | '_zsyrfs_', 915 | '_zsysv_', 916 | '_zsysvx_', 917 | '_zsytrd_', 918 | '_zsytrf_', 919 | '_zsytri_', 920 | '_zsytrs_', 921 | '_ztbcon_', 922 | '_ztbrfs_', 923 | '_ztbtrs_', 924 | '_ztfsm_', 925 | '_ztftri_', 926 | '_ztfttp_', 927 | '_ztfttr_', 928 | '_ztgevc_', 929 | '_ztgexc_', 930 | '_ztgsen_', 931 | '_ztgsja_', 932 | '_ztgsna_', 933 | '_ztgsyl_', 934 | '_ztpcon_', 935 | '_ztprfs_', 936 | '_ztptri_', 937 | '_ztptrs_', 938 | '_ztpttf_', 939 | '_ztpttr_', 940 | '_ztrcon_', 941 | '_ztrevc_', 942 | '_ztrexc_', 943 | '_ztrrfs_', 944 | '_ztrsen_', 945 | '_ztrsna_', 946 | '_ztrsyl_', 947 | '_ztrtri_', 948 | '_ztrtrs_', 949 | '_ztrttf_', 950 | '_ztrttp_', 951 | '_ztzrzf_' 952 | ] 953 | 954 | module.exports = exportFunctions 955 | -------------------------------------------------------------------------------- /src/export.js: -------------------------------------------------------------------------------- 1 | module.exports = Module 2 | -------------------------------------------------------------------------------- /src/lapack-files.js: -------------------------------------------------------------------------------- 1 | const lapackFiles = [ 2 | 'chla_transtype', 3 | 'dgbtf2', 4 | 'dgebd2', 5 | 'dgehd2', 6 | 'dgelq2', 7 | 'dgeql2', 8 | 'dgeqr2', 9 | 'dgerq2', 10 | 'dgesc2', 11 | 'dgetc2', 12 | 'dgetf2', 13 | 'dgsvj0', 14 | 'dgsvj1', 15 | 'dgtts2', 16 | 'disnan', 17 | 'dlabad', 18 | 'dlabrd', 19 | 'dlacn2', 20 | 'dlacpy', 21 | 'dladiv', 22 | 'dlae2', 23 | 'dlaebz', 24 | 'dlaed0', 25 | 'dlaed1', 26 | 'dlaed2', 27 | 'dlaed3', 28 | 'dlaed5', 29 | 'dlaed6', 30 | 'dlaed4', 31 | 'dlaed7', 32 | 'dlaed8', 33 | 'dlaed9', 34 | 'dlaeda', 35 | 'dlaein', 36 | 'dlaev2', 37 | 'dlaexc', 38 | 'dlag2', 39 | 'dlags2', 40 | 'dlagtf', 41 | 'dlagtm', 42 | 'dlagts', 43 | 'dlagv2', 44 | 'dlahqr', 45 | 'dlahr2', 46 | 'dlaic1', 47 | 'dlaisnan', 48 | 'dlaln2', 49 | 'dlals0', 50 | 'dlalsa', 51 | 'dlalsd', 52 | 'dlamrg', 53 | 'dlaneg', 54 | 'dlangb', 55 | 'dlange', 56 | 'dlangt', 57 | 'dlanhs', 58 | 'dlansb', 59 | 'dlansp', 60 | 'dlanst', 61 | 'dlansy', 62 | 'dlantb', 63 | 'dlantp', 64 | 'dlantr', 65 | 'dlanv2', 66 | 'dlapll', 67 | 'dlapmt', 68 | 'dlapy2', 69 | 'dlapy3', 70 | 'dlaqgb', 71 | 'dlaqge', 72 | 'dlaqp2', 73 | 'dlaqps', 74 | 'dlaqr0', 75 | 'dlaqr1', 76 | 'dlaqr2', 77 | 'dlaqr3', 78 | 'dlaqr4', 79 | 'dlaqr5', 80 | 'dlaqsb', 81 | 'dlaqsp', 82 | 'dlaqsy', 83 | 'dlaqtr', 84 | 'dlar1v', 85 | 'dlar2v', 86 | 'dlarf', 87 | 'dlarfb', 88 | 'dlarfg', 89 | 'dlarfp', 90 | 'dlarft', 91 | 'dlarfx', 92 | 'dlargv', 93 | 'dlarnv', 94 | 'dlarra', 95 | 'dlarrb', 96 | 'dlarrc', 97 | 'dlarrd', 98 | 'dlarre', 99 | 'dlarrf', 100 | 'dlarrj', 101 | 'dlarrk', 102 | 'dlarrr', 103 | 'dlarrv', 104 | 'dlartg', 105 | 'dlartv', 106 | 'dlaruv', 107 | 'dlarz', 108 | 'dlarzb', 109 | 'dlarzt', 110 | 'dlas2', 111 | 'dlascl', 112 | 'dlascl2', 113 | 'dlasd0', 114 | 'dlasd1', 115 | 'dlasd2', 116 | 'dlasd3', 117 | 'dlasd4', 118 | 'dlasd5', 119 | 'dlasd6', 120 | 'dlasd7', 121 | 'dlasd8', 122 | 'dlasda', 123 | 'dlasdq', 124 | 'dlasdt', 125 | 'dlaset', 126 | 'dlasq1', 127 | 'dlasq2', 128 | 'dlasq3', 129 | 'dlasq4', 130 | 'dlasq5', 131 | 'dlasq6', 132 | 'dlasr', 133 | 'dlasrt', 134 | 'dlassq', 135 | 'dlasv2', 136 | 'dlaswp', 137 | 'dlasy2', 138 | 'dlasyf', 139 | 'dlatbs', 140 | 'dlatdf', 141 | 'dlatps', 142 | 'dlatrd', 143 | 'dlatrs', 144 | 'dlatrz', 145 | 'dlauu2', 146 | 'dlauum', 147 | 'dorg2l', 148 | 'dorg2r', 149 | 'dorgl2', 150 | 'dorgr2', 151 | 'dorm2l', 152 | 'dorm2r', 153 | 'dorml2', 154 | 'dormr2', 155 | 'dormr3', 156 | 'dpbtf2', 157 | 'dpotf2', 158 | 'dpstf2', 159 | 'dptts2', 160 | 'drscl', 161 | 'dsygs2', 162 | 'dsytd2', 163 | 'dsytf2', 164 | 'dtgex2', 165 | 'dtgsy2', 166 | 'dtrti2', 167 | 'ieeeck', 168 | 'iladlc', 169 | 'iladlr', 170 | 'ilaenv', 171 | 'ilaprec', 172 | 'ilaslc', 173 | 'ilaslr', 174 | 'ilatrans', 175 | 'ilauplo', 176 | 'iparmq', 177 | 'maxloc', 178 | 'sgbtf2', 179 | 'sgebd2', 180 | 'sgehd2', 181 | 'sgelq2', 182 | 'sgeql2', 183 | 'sgeqr2', 184 | 'sgerq2', 185 | 'sgesc2', 186 | 'sgesc2', 187 | 'sgetc2', 188 | 'sgetf2', 189 | 'sgsvj0', 190 | 'sgsvj1', 191 | 'sgtts2', 192 | 'sisnan', 193 | 'slabad', 194 | 'slabrd', 195 | 'slacn2', 196 | 'slacpy', 197 | 'sladiv', 198 | 'slae2', 199 | 'slaebz', 200 | 'slaed0', 201 | 'slaed1', 202 | 'slaed2', 203 | 'slaed3', 204 | 'slaed4', 205 | 'slaed5', 206 | 'slaed6', 207 | 'slaed7', 208 | 'slaed8', 209 | 'slaed9', 210 | 'slaeda', 211 | 'slaein', 212 | 'slaev2', 213 | 'slaexc', 214 | 'slag2', 215 | 'slags2', 216 | 'slagtf', 217 | 'slagtm', 218 | 'slagts', 219 | 'slagv2', 220 | 'slahqr', 221 | 'slahr2', 222 | 'slaic1', 223 | 'slaisnan', 224 | 'slaln2', 225 | 'slals0', 226 | 'slalsa', 227 | 'slalsd', 228 | 'slamrg', 229 | 'slaneg', 230 | 'slangb', 231 | 'slange', 232 | 'slangt', 233 | 'slanhs', 234 | 'slansb', 235 | 'slansp', 236 | 'slanst', 237 | 'slansy', 238 | 'slantb', 239 | 'slantp', 240 | 'slantr', 241 | 'slanv2', 242 | 'slapll', 243 | 'slapmt', 244 | 'slapy2', 245 | 'slapy3', 246 | 'slaqgb', 247 | 'slaqge', 248 | 'slaqp2', 249 | 'slaqps', 250 | 'slaqr0', 251 | 'slaqr1', 252 | 'slaqr2', 253 | 'slaqr3', 254 | 'slaqr4', 255 | 'slaqr5', 256 | 'slaqsb', 257 | 'slaqsp', 258 | 'slaqsy', 259 | 'slaqtr', 260 | 'slar1v', 261 | 'slar2v', 262 | 'slarf', 263 | 'slarfb', 264 | 'slarfg', 265 | 'slarfp', 266 | 'slarft', 267 | 'slarfx', 268 | 'slargv', 269 | 'slarnv', 270 | 'slarra', 271 | 'slarrb', 272 | 'slarrc', 273 | 'slarrd', 274 | 'slarre', 275 | 'slarrf', 276 | 'slarrj', 277 | 'slarrk', 278 | 'slarrr', 279 | 'slarrv', 280 | 'slartg', 281 | 'slartv', 282 | 'slaruv', 283 | 'slarz', 284 | 'slarzb', 285 | 'slarzt', 286 | 'slas2', 287 | 'slascl', 288 | 'slasd0', 289 | 'slasd1', 290 | 'slasd2', 291 | 'slasd3', 292 | 'slasd4', 293 | 'slasd5', 294 | 'slasd6', 295 | 'slasd7', 296 | 'slasd8', 297 | 'slasda', 298 | 'slasdq', 299 | 'slasdt', 300 | 'slaset', 301 | 'slasq1', 302 | 'slasq2', 303 | 'slasq3', 304 | 'slasq4', 305 | 'slasq5', 306 | 'slasq6', 307 | 'slasr', 308 | 'slasrt', 309 | 'slassq', 310 | 'slasv2', 311 | 'slaswp', 312 | 'slasy2', 313 | 'slasyf', 314 | 'slatbs', 315 | 'slatdf', 316 | 'slatps', 317 | 'slatrd', 318 | 'slatrs', 319 | 'slatrz', 320 | 'slauu2', 321 | 'slauum', 322 | 'sorg2l', 323 | 'sorg2r', 324 | 'sorgl2', 325 | 'sorgr2', 326 | 'sorm2l', 327 | 'sorm2r', 328 | 'sorml2', 329 | 'sormr2', 330 | 'sormr3', 331 | 'spbtf2', 332 | 'spotf2', 333 | 'spstf2', 334 | 'sptts2', 335 | 'srscl', 336 | 'ssygs2', 337 | 'ssytd2', 338 | 'ssytf2', 339 | 'stgex2', 340 | 'stgsy2', 341 | 'strti2', 342 | 'sbdsdc', 343 | 'sbdsqr', 344 | 'sdisna', 345 | 'sgbbrd', 346 | 'sgbcon', 347 | 'sgbequ', 348 | 'sgbequb', 349 | 'sgbrfs', 350 | 'sgbsv', 351 | 'sgbsvx', 352 | 'sgbtrf', 353 | 'sgbtrs', 354 | 'sgebak', 355 | 'sgebal', 356 | 'sgebrd', 357 | 'sgecon', 358 | 'sgeequ', 359 | 'sgeequb', 360 | 'sgees', 361 | 'sgeesx', 362 | 'sgeev', 363 | 'sgeevx', 364 | 'sgehrd', 365 | 'sgejsv', 366 | 'sgelqf', 367 | 'sgels', 368 | 'sgelsd', 369 | 'sgelss', 370 | 'sgelsy', 371 | 'sgeqlf', 372 | 'sgeqp3', 373 | 'sgeqpf', 374 | 'sgeqrf', 375 | 'sgerfs', 376 | 'sgerqf', 377 | 'sgesdd', 378 | 'sgesv', 379 | 'sgesvd', 380 | 'sgesvj', 381 | 'sgesvx', 382 | 'sgetrf', 383 | 'sgetri', 384 | 'sgetrs', 385 | 'sggbak', 386 | 'sggbal', 387 | 'sgges', 388 | 'sggesx', 389 | 'sggev', 390 | 'sggevx', 391 | 'sggglm', 392 | 'sgghrd', 393 | 'sgglse', 394 | 'sggqrf', 395 | 'sggrqf', 396 | 'sggsvd', 397 | 'sggsvp', 398 | 'sgtcon', 399 | 'sgtrfs', 400 | 'sgtsv', 401 | 'sgtsvx', 402 | 'sgttrf', 403 | 'sgttrs', 404 | 'shgeqz', 405 | 'shsein', 406 | 'shseqr', 407 | 'sopgtr', 408 | 'sopmtr', 409 | 'sorgbr', 410 | 'sorghr', 411 | 'sorglq', 412 | 'sorgql', 413 | 'sorgqr', 414 | 'sorgrq', 415 | 'sorgtr', 416 | 'sormbr', 417 | 'sormhr', 418 | 'sormlq', 419 | 'sormql', 420 | 'sormqr', 421 | 'sormrq', 422 | 'sormrz', 423 | 'sormtr', 424 | 'spbcon', 425 | 'spbequ', 426 | 'spbrfs', 427 | 'spbstf', 428 | 'spbsv', 429 | 'spbsvx', 430 | 'spbtrf', 431 | 'spbtrs', 432 | 'spftrf', 433 | 'spftri', 434 | 'spftrs', 435 | 'spocon', 436 | 'spoequ', 437 | 'spoequb', 438 | 'sporfs', 439 | 'sposv', 440 | 'sposvx', 441 | 'spotrf', 442 | 'spotri', 443 | 'spotrs', 444 | 'sppcon', 445 | 'sppequ', 446 | 'spprfs', 447 | 'sppsv', 448 | 'sppsvx', 449 | 'spptrf', 450 | 'spptri', 451 | 'spptrs', 452 | 'spstrf', 453 | 'sptcon', 454 | 'spteqr', 455 | 'sptrfs', 456 | 'sptsv', 457 | 'sptsvx', 458 | 'spttrf', 459 | 'spttrs', 460 | 'ssbev', 461 | 'ssbevd', 462 | 'ssbevx', 463 | 'ssbgst', 464 | 'ssbgv', 465 | 'ssbgvd', 466 | 'ssbgvx', 467 | 'ssbtrd', 468 | 'ssfrk', 469 | 'sspcon', 470 | 'sspev', 471 | 'sspevd', 472 | 'sspevx', 473 | 'sspgst', 474 | 'sspgv', 475 | 'sspgvd', 476 | 'sspgvx', 477 | 'ssprfs', 478 | 'sspsv', 479 | 'sspsvx', 480 | 'ssptrd', 481 | 'ssptrf', 482 | 'ssptri', 483 | 'ssptrs', 484 | 'sstebz', 485 | 'sstedc', 486 | 'sstegr', 487 | 'sstein', 488 | 'sstemr', 489 | 'ssteqr', 490 | 'ssterf', 491 | 'sstev', 492 | 'sstevd', 493 | 'sstevr', 494 | 'sstevx', 495 | 'ssycon', 496 | 'ssyequb', 497 | 'ssyev', 498 | 'ssyevd', 499 | 'ssyevr', 500 | 'ssyevx', 501 | 'ssygst', 502 | 'ssygv', 503 | 'ssygvd', 504 | 'ssygvx', 505 | 'ssyrfs', 506 | 'ssysv', 507 | 'ssysvx', 508 | 'ssytrd', 509 | 'ssytrf', 510 | 'ssytri', 511 | 'ssytrs', 512 | 'stbcon', 513 | 'stbrfs', 514 | 'stbtrs', 515 | 'stfsm', 516 | 'stftri', 517 | 'stfttp', 518 | 'stfttr', 519 | 'stgevc', 520 | 'stgexc', 521 | 'stgsen', 522 | 'stgsja', 523 | 'stgsna', 524 | 'stgsyl', 525 | 'stpcon', 526 | 'stprfs', 527 | 'stptri', 528 | 'stptrs', 529 | 'stpttf', 530 | 'stpttr', 531 | 'strcon', 532 | 'strevc', 533 | 'strexc', 534 | 'strrfs', 535 | 'strsen', 536 | 'strsna', 537 | 'strsyl', 538 | 'strtri', 539 | 'strtrs', 540 | 'strttf', 541 | 'strttp', 542 | 'stzrzf', 543 | 'dbdsdc', 544 | 'dbdsqr', 545 | 'ddisna', 546 | 'dgbbrd', 547 | 'dgbcon', 548 | 'dgbequ', 549 | 'dgbequb', 550 | 'dgbrfs', 551 | 'dgbsv', 552 | 'dgbsvx', 553 | 'dgbtrf', 554 | 'dgbtrs', 555 | 'dgebak', 556 | 'dgebal', 557 | 'dgebrd', 558 | 'dgecon', 559 | 'dgeequ', 560 | 'dgeequb', 561 | 'dgees', 562 | 'dgeesx', 563 | 'dgeev', 564 | 'dgeevx', 565 | 'dgehrd', 566 | 'dgejsv', 567 | 'dgelqf', 568 | 'dgels', 569 | 'dgelsd', 570 | 'dgelss', 571 | 'dgelsy', 572 | 'dgeqlf', 573 | 'dgeqp3', 574 | 'dgeqpf', 575 | 'dgeqrf', 576 | 'dgerfs', 577 | 'dgerqf', 578 | 'dgesdd', 579 | 'dgesv', 580 | 'dgesvd', 581 | 'dgesvj', 582 | 'dgesvx', 583 | 'dgetrf', 584 | 'dgetri', 585 | 'dgetrs', 586 | 'dggbak', 587 | 'dggbal', 588 | 'dgges', 589 | 'dggesx', 590 | 'dggev', 591 | 'dggevx', 592 | 'dggglm', 593 | 'dgghrd', 594 | 'dgglse', 595 | 'dggqrf', 596 | 'dggrqf', 597 | 'dggsvd', 598 | 'dggsvp', 599 | 'dgtcon', 600 | 'dgtrfs', 601 | 'dgtsv', 602 | 'dgtsvx', 603 | 'dgttrf', 604 | 'dgttrs', 605 | 'dhgeqz', 606 | 'dhsein', 607 | 'dhseqr', 608 | 'dopgtr', 609 | 'dopmtr', 610 | 'dorgbr', 611 | 'dorghr', 612 | 'dorglq', 613 | 'dorgql', 614 | 'dorgqr', 615 | 'dorgrq', 616 | 'dorgtr', 617 | 'dormbr', 618 | 'dormhr', 619 | 'dormlq', 620 | 'dormql', 621 | 'dormqr', 622 | 'dormrq', 623 | 'dormrz', 624 | 'dormtr', 625 | 'dpbcon', 626 | 'dpbequ', 627 | 'dpbrfs', 628 | 'dpbstf', 629 | 'dpbsv', 630 | 'dpbsvx', 631 | 'dpbtrf', 632 | 'dpbtrs', 633 | 'dpftrf', 634 | 'dpftri', 635 | 'dpftrs', 636 | 'dpocon', 637 | 'dpoequ', 638 | 'dpoequb', 639 | 'dporfs', 640 | 'dposv', 641 | 'dposvx', 642 | 'dpotrf', 643 | 'dpotri', 644 | 'dpotrs', 645 | 'dppcon', 646 | 'dppequ', 647 | 'dpprfs', 648 | 'dppsv', 649 | 'dppsvx', 650 | 'dpptrf', 651 | 'dpptri', 652 | 'dpptrs', 653 | 'dpstrf', 654 | 'dptcon', 655 | 'dpteqr', 656 | 'dptrfs', 657 | 'dptsv', 658 | 'dptsvx', 659 | 'dpttrf', 660 | 'dpttrs', 661 | 'dsbev', 662 | 'dsbevd', 663 | 'dsbevx', 664 | 'dsbgst', 665 | 'dsbgv', 666 | 'dsbgvd', 667 | 'dsbgvx', 668 | 'dsbtrd', 669 | 'dsfrk', 670 | 'dspcon', 671 | 'dspev', 672 | 'dspevd', 673 | 'dspevx', 674 | 'dspgst', 675 | 'dspgv', 676 | 'dspgvd', 677 | 'dspgvx', 678 | 'dsprfs', 679 | 'dspsv', 680 | 'dspsvx', 681 | 'dsptrd', 682 | 'dsptrf', 683 | 'dsptri', 684 | 'dsptrs', 685 | 'dstebz', 686 | 'dstedc', 687 | 'dstegr', 688 | 'dstein', 689 | 'dstemr', 690 | 'dsteqr', 691 | 'dsterf', 692 | 'dstev', 693 | 'dstevd', 694 | 'dstevr', 695 | 'dstevx', 696 | 'dsycon', 697 | 'dsyequb', 698 | 'dsyev', 699 | 'dsyevd', 700 | 'dsyevr', 701 | 'dsyevx', 702 | 'dsygst', 703 | 'dsygv', 704 | 'dsygvd', 705 | 'dsygvx', 706 | 'dsyrfs', 707 | 'dsysv', 708 | 'dsysvx', 709 | 'dsytrd', 710 | 'dsytrf', 711 | 'dsytri', 712 | 'dsytrs', 713 | 'dtbcon', 714 | 'dtbrfs', 715 | 'dtbtrs', 716 | 'dtfsm', 717 | 'dtftri', 718 | 'dtfttp', 719 | 'dtfttr', 720 | 'dtgevc', 721 | 'dtgexc', 722 | 'dtgsen', 723 | 'dtgsja', 724 | 'dtgsna', 725 | 'dtgsyl', 726 | 'dtpcon', 727 | 'dtprfs', 728 | 'dtptri', 729 | 'dtptrs', 730 | 'dtpttf', 731 | 'dtpttr', 732 | 'dtrcon', 733 | 'dtrevc', 734 | 'dtrexc', 735 | 'dtrrfs', 736 | 'dtrsen', 737 | 'dtrsna', 738 | 'dtrsyl', 739 | 'dtrtri', 740 | 'dtrtrs', 741 | 'dtrttf', 742 | 'dtrttp', 743 | 'dtzrzf', 744 | 'cbdsqr', 745 | 'cgbbrd', 746 | 'cgbcon', 747 | 'cgbequ', 748 | 'cgbrfs', 749 | 'cgbsv', 750 | 'cgbsvx', 751 | 'cgbtf2', 752 | 'cgbtrf', 753 | 'cgbtrs', 754 | 'cgebak', 755 | 'cgebal', 756 | 'cgebd2', 757 | 'cgebrd', 758 | 'cgecon', 759 | 'cgeequ', 760 | 'cgees', 761 | 'cgeesx', 762 | 'cgeev', 763 | 'cgeevx', 764 | 'cgegs', 765 | 'cgegv', 766 | 'cgehd2', 767 | 'cgehrd', 768 | 'cgelq2', 769 | 'cgelqf', 770 | 'cgels', 771 | 'cgelsd', 772 | 'cgelss', 773 | 'cgelsx', 774 | 'cgelsy', 775 | 'cgeql2', 776 | 'cgeqlf', 777 | 'cgeqp3', 778 | 'cgeqpf', 779 | 'cgeqr2', 780 | 'cgeqrf', 781 | 'cgerfs', 782 | 'cgerq2', 783 | 'cgerqf', 784 | 'cgesc2', 785 | 'cgesdd', 786 | 'cgesv', 787 | 'cgesvd', 788 | 'cgesvx', 789 | 'cgetc2', 790 | 'cgetf2', 791 | 'cgetrf', 792 | 'cgetri', 793 | 'cgetrs', 794 | 'cggbak', 795 | 'cggbal', 796 | 'cgges', 797 | 'cggesx', 798 | 'cggev', 799 | 'cggevx', 800 | 'cggglm', 801 | 'cgghrd', 802 | 'cgglse', 803 | 'cggqrf', 804 | 'cggrqf', 805 | 'cggsvd', 806 | 'cggsvp', 807 | 'cgtcon', 808 | 'cgtrfs', 809 | 'cgtsv', 810 | 'cgtsvx', 811 | 'cgttrf', 812 | 'cgttrs', 813 | 'cgtts2', 814 | 'chbev', 815 | 'chbevd', 816 | 'chbevx', 817 | 'chbgst', 818 | 'chbgv', 819 | 'chbgvd', 820 | 'chbgvx', 821 | 'chbtrd', 822 | 'checon', 823 | 'cheev', 824 | 'cheevd', 825 | 'cheevr', 826 | 'cheevx', 827 | 'chegs2', 828 | 'chegst', 829 | 'chegv', 830 | 'chegvd', 831 | 'chegvx', 832 | 'cherfs', 833 | 'chesv', 834 | 'chesvx', 835 | 'chetd2', 836 | 'chetf2', 837 | 'chetrd', 838 | 'chetrf', 839 | 'chetri', 840 | 'chetrs', 841 | 'chgeqz', 842 | 'chpcon', 843 | 'chpev', 844 | 'chpevd', 845 | 'chpevx', 846 | 'chpgst', 847 | 'chpgv', 848 | 'chpgvd', 849 | 'chpgvx', 850 | 'chprfs', 851 | 'chpsv', 852 | 'chpsvx', 853 | 'chptrd', 854 | 'chptrf', 855 | 'chptri', 856 | 'chptrs', 857 | 'chsein', 858 | 'chseqr', 859 | 'clabrd', 860 | 'clacgv', 861 | 'clacon', 862 | 'clacn2', 863 | 'clacp2', 864 | 'clacpy', 865 | 'clacrm', 866 | 'clacrt', 867 | 'cladiv', 868 | 'claed0', 869 | 'claed7', 870 | 'claed8', 871 | 'claein', 872 | 'claesy', 873 | 'claev2', 874 | 'clags2', 875 | 'clagtm', 876 | 'clahef', 877 | 'clahqr', 878 | 'clahrd', 879 | 'clahr2', 880 | 'claic1', 881 | 'clals0', 882 | 'clalsa', 883 | 'clalsd', 884 | 'clangb', 885 | 'clange', 886 | 'clangt', 887 | 'clanhb', 888 | 'clanhe', 889 | 'clanhp', 890 | 'clanhs', 891 | 'clanht', 892 | 'clansb', 893 | 'clansp', 894 | 'clansy', 895 | 'clantb', 896 | 'clantp', 897 | 'clantr', 898 | 'clapll', 899 | 'clapmt', 900 | 'clarcm', 901 | 'claqgb', 902 | 'claqge', 903 | 'claqhb', 904 | 'claqhe', 905 | 'claqhp', 906 | 'claqp2', 907 | 'claqps', 908 | 'claqsb', 909 | 'claqr0', 910 | 'claqr1', 911 | 'claqr2', 912 | 'claqr3', 913 | 'claqr4', 914 | 'claqr5', 915 | 'claqsp', 916 | 'claqsy', 917 | 'clar1v', 918 | 'clar2v', 919 | 'ilaclr', 920 | 'ilaclc', 921 | 'clarf', 922 | 'clarfb', 923 | 'clarfg', 924 | 'clarft', 925 | 'clarfp', 926 | 'clarfx', 927 | 'clargv', 928 | 'clarnv', 929 | 'clarrv', 930 | 'clartg', 931 | 'clartv', 932 | 'clarz', 933 | 'clarzb', 934 | 'clarzt', 935 | 'clascl', 936 | 'claset', 937 | 'clasr', 938 | 'classq', 939 | 'claswp', 940 | 'clasyf', 941 | 'clatbs', 942 | 'clatdf', 943 | 'clatps', 944 | 'clatrd', 945 | 'clatrs', 946 | 'clatrz', 947 | 'clatzm', 948 | 'clauu2', 949 | 'clauum', 950 | 'cpbcon', 951 | 'cpbequ', 952 | 'cpbrfs', 953 | 'cpbstf', 954 | 'cpbsv', 955 | 'cpbsvx', 956 | 'cpbtf2', 957 | 'cpbtrf', 958 | 'cpbtrs', 959 | 'cpocon', 960 | 'cpoequ', 961 | 'cporfs', 962 | 'cposv', 963 | 'cposvx', 964 | 'cpotf2', 965 | 'cpotrf', 966 | 'cpotri', 967 | 'cpotrs', 968 | 'cpstrf', 969 | 'cpstf2', 970 | 'cppcon', 971 | 'cppequ', 972 | 'cpprfs', 973 | 'cppsv', 974 | 'cppsvx', 975 | 'cpptrf', 976 | 'cpptri', 977 | 'cpptrs', 978 | 'cptcon', 979 | 'cpteqr', 980 | 'cptrfs', 981 | 'cptsv', 982 | 'cptsvx', 983 | 'cpttrf', 984 | 'cpttrs', 985 | 'cptts2', 986 | 'crot', 987 | 'cspcon', 988 | 'cspmv', 989 | 'cspr', 990 | 'csprfs', 991 | 'cspsv', 992 | 'cspsvx', 993 | 'csptrf', 994 | 'csptri', 995 | 'csptrs', 996 | 'csrscl', 997 | 'cstedc', 998 | 'cstegr', 999 | 'cstein', 1000 | 'csteqr', 1001 | 'csycon', 1002 | 'csymv', 1003 | 'csyr', 1004 | 'csyrfs', 1005 | 'csysv', 1006 | 'csysvx', 1007 | 'csytf2', 1008 | 'csytrf', 1009 | 'csytri', 1010 | 'csytrs', 1011 | 'ctbcon', 1012 | 'ctbrfs', 1013 | 'ctbtrs', 1014 | 'ctgevc', 1015 | 'ctgex2', 1016 | 'ctgexc', 1017 | 'ctgsen', 1018 | 'ctgsja', 1019 | 'ctgsna', 1020 | 'ctgsy2', 1021 | 'ctgsyl', 1022 | 'ctpcon', 1023 | 'ctprfs', 1024 | 'ctptri', 1025 | 'ctptrs', 1026 | 'ctrcon', 1027 | 'ctrevc', 1028 | 'ctrexc', 1029 | 'ctrrfs', 1030 | 'ctrsen', 1031 | 'ctrsna', 1032 | 'ctrsyl', 1033 | 'ctrti2', 1034 | 'ctrtri', 1035 | 'ctrtrs', 1036 | 'ctzrqf', 1037 | 'ctzrzf', 1038 | 'cung2l', 1039 | 'cung2r', 1040 | 'cungbr', 1041 | 'cunghr', 1042 | 'cungl2', 1043 | 'cunglq', 1044 | 'cungql', 1045 | 'cungqr', 1046 | 'cungr2', 1047 | 'cungrq', 1048 | 'cungtr', 1049 | 'cunm2l', 1050 | 'cunm2r', 1051 | 'cunmbr', 1052 | 'cunmhr', 1053 | 'cunml2', 1054 | 'cunmlq', 1055 | 'cunmql', 1056 | 'cunmqr', 1057 | 'cunmr2', 1058 | 'cunmr3', 1059 | 'cunmrq', 1060 | 'cunmrz', 1061 | 'cunmtr', 1062 | 'cupgtr', 1063 | 'cupmtr', 1064 | 'icmax1', 1065 | 'scsum1', 1066 | 'cstemr', 1067 | 'chfrk', 1068 | 'ctfttp', 1069 | 'clanhf', 1070 | 'cpftrf', 1071 | 'cpftri', 1072 | 'cpftrs', 1073 | 'ctfsm', 1074 | 'ctftri', 1075 | 'ctfttr', 1076 | 'ctpttf', 1077 | 'ctpttr', 1078 | 'ctrttf', 1079 | 'ctrttp', 1080 | 'cgeequb', 1081 | 'cgbequb', 1082 | 'csyequb', 1083 | 'cpoequb', 1084 | 'cheequb', 1085 | 'zbdsqr', 1086 | 'zgbbrd', 1087 | 'zgbcon', 1088 | 'zgbequ', 1089 | 'zgbrfs', 1090 | 'zgbsv', 1091 | 'zgbsvx', 1092 | 'zgbtf2', 1093 | 'zgbtrf', 1094 | 'zgbtrs', 1095 | 'zgebak', 1096 | 'zgebal', 1097 | 'zgebd2', 1098 | 'zgebrd', 1099 | 'zgecon', 1100 | 'zgeequ', 1101 | 'zgees', 1102 | 'zgeesx', 1103 | 'zgeev', 1104 | 'zgeevx', 1105 | 'zgegs', 1106 | 'zgegv', 1107 | 'zgehd2', 1108 | 'zgehrd', 1109 | 'zgelq2', 1110 | 'zgelqf', 1111 | 'zgels', 1112 | 'zgelsd', 1113 | 'zgelss', 1114 | 'zgelsx', 1115 | 'zgelsy', 1116 | 'zgeql2', 1117 | 'zgeqlf', 1118 | 'zgeqp3', 1119 | 'zgeqpf', 1120 | 'zgeqr2', 1121 | 'zgeqrf', 1122 | 'zgerfs', 1123 | 'zgerq2', 1124 | 'zgerqf', 1125 | 'zgesc2', 1126 | 'zgesdd', 1127 | 'zgesv', 1128 | 'zgesvd', 1129 | 'zgesvx', 1130 | 'zgetc2', 1131 | 'zgetf2', 1132 | 'zgetrf', 1133 | 'zgetri', 1134 | 'zgetrs', 1135 | 'zggbak', 1136 | 'zggbal', 1137 | 'zgges', 1138 | 'zggesx', 1139 | 'zggev', 1140 | 'zggevx', 1141 | 'zggglm', 1142 | 'zgghrd', 1143 | 'zgglse', 1144 | 'zggqrf', 1145 | 'zggrqf', 1146 | 'zggsvd', 1147 | 'zggsvp', 1148 | 'zgtcon', 1149 | 'zgtrfs', 1150 | 'zgtsv', 1151 | 'zgtsvx', 1152 | 'zgttrf', 1153 | 'zgttrs', 1154 | 'zgtts2', 1155 | 'zhbev', 1156 | 'zhbevd', 1157 | 'zhbevx', 1158 | 'zhbgst', 1159 | 'zhbgv', 1160 | 'zhbgvd', 1161 | 'zhbgvx', 1162 | 'zhbtrd', 1163 | 'zhecon', 1164 | 'zheev', 1165 | 'zheevd', 1166 | 'zheevr', 1167 | 'zheevx', 1168 | 'zhegs2', 1169 | 'zhegst', 1170 | 'zhegv', 1171 | 'zhegvd', 1172 | 'zhegvx', 1173 | 'zherfs', 1174 | 'zhesv', 1175 | 'zhesvx', 1176 | 'zhetd2', 1177 | 'zhetf2', 1178 | 'zhetrd', 1179 | 'zhetrf', 1180 | 'zhetri', 1181 | 'zhetrs', 1182 | 'zhgeqz', 1183 | 'zhpcon', 1184 | 'zhpev', 1185 | 'zhpevd', 1186 | 'zhpevx', 1187 | 'zhpgst', 1188 | 'zhpgv', 1189 | 'zhpgvd', 1190 | 'zhpgvx', 1191 | 'zhprfs', 1192 | 'zhpsv', 1193 | 'zhpsvx', 1194 | 'zhptrd', 1195 | 'zhptrf', 1196 | 'zhptri', 1197 | 'zhptrs', 1198 | 'zhsein', 1199 | 'zhseqr', 1200 | 'zlabrd', 1201 | 'zlacgv', 1202 | 'zlacon', 1203 | 'zlacn2', 1204 | 'zlacp2', 1205 | 'zlacpy', 1206 | 'zlacrm', 1207 | 'zlacrt', 1208 | 'zladiv', 1209 | 'zlaed0', 1210 | 'zlaed7', 1211 | 'zlaed8', 1212 | 'zlaein', 1213 | 'zlaesy', 1214 | 'zlaev2', 1215 | 'zlags2', 1216 | 'zlagtm', 1217 | 'zlahef', 1218 | 'zlahqr', 1219 | 'zlahrd', 1220 | 'zlahr2', 1221 | 'zlaic1', 1222 | 'zlals0', 1223 | 'zlalsa', 1224 | 'zlalsd', 1225 | 'zlangb', 1226 | 'zlange', 1227 | 'zlangt', 1228 | 'zlanhb', 1229 | 'zlanhe', 1230 | 'zlanhp', 1231 | 'zlanhs', 1232 | 'zlanht', 1233 | 'zlansb', 1234 | 'zlansp', 1235 | 'zlansy', 1236 | 'zlantb', 1237 | 'zlantp', 1238 | 'zlantr', 1239 | 'zlapll', 1240 | 'zlapmt', 1241 | 'zlaqgb', 1242 | 'zlaqge', 1243 | 'zlaqhb', 1244 | 'zlaqhe', 1245 | 'zlaqhp', 1246 | 'zlaqp2', 1247 | 'zlaqps', 1248 | 'zlaqsb', 1249 | 'zlaqr0', 1250 | 'zlaqr1', 1251 | 'zlaqr2', 1252 | 'zlaqr3', 1253 | 'zlaqr4', 1254 | 'zlaqr5', 1255 | 'zlaqsp', 1256 | 'zlaqsy', 1257 | 'zlar1v', 1258 | 'zlar2v', 1259 | 'ilazlr', 1260 | 'ilazlc', 1261 | 'zlarcm', 1262 | 'zlarf', 1263 | 'zlarfb', 1264 | 'zlarfg', 1265 | 'zlarft', 1266 | 'zlarfp', 1267 | 'zlarfx', 1268 | 'zlargv', 1269 | 'zlarnv', 1270 | 'zlarrv', 1271 | 'zlartg', 1272 | 'zlartv', 1273 | 'zlarz', 1274 | 'zlarzb', 1275 | 'zlarzt', 1276 | 'zlascl', 1277 | 'zlaset', 1278 | 'zlasr', 1279 | 'zlassq', 1280 | 'zlaswp', 1281 | 'zlasyf', 1282 | 'zlatbs', 1283 | 'zlatdf', 1284 | 'zlatps', 1285 | 'zlatrd', 1286 | 'zlatrs', 1287 | 'zlatrz', 1288 | 'zlatzm', 1289 | 'zlauu2', 1290 | 'zlauum', 1291 | 'zpbcon', 1292 | 'zpbequ', 1293 | 'zpbrfs', 1294 | 'zpbstf', 1295 | 'zpbsv', 1296 | 'zpbsvx', 1297 | 'zpbtf2', 1298 | 'zpbtrf', 1299 | 'zpbtrs', 1300 | 'zpocon', 1301 | 'zpoequ', 1302 | 'zporfs', 1303 | 'zposv', 1304 | 'zposvx', 1305 | 'zpotf2', 1306 | 'zpotrf', 1307 | 'zpotri', 1308 | 'zpotrs', 1309 | 'zpstrf', 1310 | 'zpstf2', 1311 | 'zppcon', 1312 | 'zppequ', 1313 | 'zpprfs', 1314 | 'zppsv', 1315 | 'zppsvx', 1316 | 'zpptrf', 1317 | 'zpptri', 1318 | 'zpptrs', 1319 | 'zptcon', 1320 | 'zpteqr', 1321 | 'zptrfs', 1322 | 'zptsv', 1323 | 'zptsvx', 1324 | 'zpttrf', 1325 | 'zpttrs', 1326 | 'zptts2', 1327 | 'zrot', 1328 | 'zspcon', 1329 | 'zspmv', 1330 | 'zspr', 1331 | 'zsprfs', 1332 | 'zspsv', 1333 | 'zspsvx', 1334 | 'zsptrf', 1335 | 'zsptri', 1336 | 'zsptrs', 1337 | 'zdrscl', 1338 | 'zstedc', 1339 | 'zstegr', 1340 | 'zstein', 1341 | 'zsteqr', 1342 | 'zsycon', 1343 | 'zsymv', 1344 | 'zsyr', 1345 | 'zsyrfs', 1346 | 'zsysv', 1347 | 'zsysvx', 1348 | 'zsytf2', 1349 | 'zsytrf', 1350 | 'zsytri', 1351 | 'zsytrs', 1352 | 'ztbcon', 1353 | 'ztbrfs', 1354 | 'ztbtrs', 1355 | 'ztgevc', 1356 | 'ztgex2', 1357 | 'ztgexc', 1358 | 'ztgsen', 1359 | 'ztgsja', 1360 | 'ztgsna', 1361 | 'ztgsy2', 1362 | 'ztgsyl', 1363 | 'ztpcon', 1364 | 'ztprfs', 1365 | 'ztptri', 1366 | 'ztptrs', 1367 | 'ztrcon', 1368 | 'ztrevc', 1369 | 'ztrexc', 1370 | 'ztrrfs', 1371 | 'ztrsen', 1372 | 'ztrsna', 1373 | 'ztrsyl', 1374 | 'ztrti2', 1375 | 'ztrtri', 1376 | 'ztrtrs', 1377 | 'ztzrqf', 1378 | 'ztzrzf', 1379 | 'zung2l', 1380 | 'zung2r', 1381 | 'zungbr', 1382 | 'zunghr', 1383 | 'zungl2', 1384 | 'zunglq', 1385 | 'zungql', 1386 | 'zungqr', 1387 | 'zungr2', 1388 | 'zungrq', 1389 | 'zungtr', 1390 | 'zunm2l', 1391 | 'zunm2r', 1392 | 'zunmbr', 1393 | 'zunmhr', 1394 | 'zunml2', 1395 | 'zunmlq', 1396 | 'zunmql', 1397 | 'zunmqr', 1398 | 'zunmr2', 1399 | 'zunmr3', 1400 | 'zunmrq', 1401 | 'zunmrz', 1402 | 'zunmtr', 1403 | 'zupgtr', 1404 | 'zupmtr', 1405 | 'izmax1', 1406 | 'dzsum1', 1407 | 'zstemr', 1408 | 'zcgesv', 1409 | 'zcposv', 1410 | 'zlag2c', 1411 | 'clag2z', 1412 | 'zlat2c', 1413 | 'zhfrk', 1414 | 'ztfttp', 1415 | 'zlanhf', 1416 | 'zpftrf', 1417 | 'zpftri', 1418 | 'zpftrs', 1419 | 'ztfsm', 1420 | 'ztftri', 1421 | 'ztfttr', 1422 | 'ztpttf', 1423 | 'ztpttr', 1424 | 'ztrttf', 1425 | 'ztrttp', 1426 | 'zgeequb', 1427 | 'zgbequb', 1428 | 'zsyequb', 1429 | 'zpoequb', 1430 | 'zheequb' 1431 | ] 1432 | 1433 | module.exports = lapackFiles 1434 | -------------------------------------------------------------------------------- /src/libf2c-files.js: -------------------------------------------------------------------------------- 1 | var libf2cFiles = [ 2 | 'c_abs', 3 | 'c_div', 4 | 'c_sqrt', 5 | 'cabs', 6 | 'close', 7 | 'ctype', 8 | 'd_cnjg', 9 | 'd_imag', 10 | 'd_lg10', 11 | 'd_sign', 12 | 'endfile', 13 | 'err', 14 | 'exit_', 15 | 'f77_aloc', 16 | 'fmt', 17 | 'fmtlib', 18 | 'i_dnnt', 19 | 'i_nint', 20 | 'open', 21 | 'pow_ci', 22 | 'pow_dd', 23 | 'pow_di', 24 | 'pow_ii', 25 | 'pow_ri', 26 | 'pow_zi', 27 | 'r_cnjg', 28 | 'r_imag', 29 | 'r_lg10', 30 | 'r_sign', 31 | 's_cat', 32 | 's_cmp', 33 | 's_copy', 34 | 'sfe', 35 | 'sig_die', 36 | 'util', 37 | 'wsfe', 38 | 'wref', 39 | 'wrtfmt', 40 | 'z_abs', 41 | 'z_div', 42 | 'z_sqrt' 43 | ] 44 | 45 | module.exports = libf2cFiles 46 | -------------------------------------------------------------------------------- /test/blas-level1/daxpy.js: -------------------------------------------------------------------------------- 1 | /* eslint-env mocha */ 2 | const expect = require('expect.js') 3 | const run = require('../util') 4 | 5 | run((emlapack) => { 6 | describe('daxpy(n, da, dx, incx, dy, incy)', () => { 7 | it('computes dy := da * dx + dy', () => { 8 | const pn = emlapack._malloc(4) 9 | const pda = emlapack._malloc(8) 10 | const pdx = emlapack._malloc(32) 11 | const pincx = emlapack._malloc(4) 12 | const pdy = emlapack._malloc(32) 13 | const pincy = emlapack._malloc(4) 14 | 15 | const n = new Int32Array(emlapack.HEAP32.buffer, pn, 1) 16 | const da = new Float64Array(emlapack.HEAPF64.buffer, pda, 2) 17 | const dx = new Float64Array(emlapack.HEAPF64.buffer, pdx, 4) 18 | const incx = new Int32Array(emlapack.HEAP32.buffer, pincx, 1) 19 | const dy = new Float64Array(emlapack.HEAPF64.buffer, pdy, 4) 20 | const incy = new Int32Array(emlapack.HEAP32.buffer, pincy, 1) 21 | 22 | n[0] = 4 23 | da[0] = 2.5 24 | dx.set([1, 2, 3, 4]) 25 | incx[0] = 1 26 | dy.set([2, 3, 4, 5]) 27 | incy[0] = 1 28 | 29 | const daxpy = emlapack.cwrap('f2c_daxpy', null, ['number', 'number', 'number', 'number', 'number', 'number']) 30 | daxpy(pn, pda, pdx, pincx, pdy, pincy) 31 | 32 | expect(dy).to.be.eql([4.5, 8, 11.5, 15]) 33 | }) 34 | }) 35 | }) 36 | -------------------------------------------------------------------------------- /test/blas-level1/dcopy.js: -------------------------------------------------------------------------------- 1 | /* eslint-env mocha */ 2 | const expect = require('expect.js') 3 | const run = require('../util') 4 | 5 | run((emlapack) => { 6 | describe('dcopy(n, dx, incx, dy, incy)', () => { 7 | it('computes dy := dx', () => { 8 | const n = 4 9 | const pn = emlapack._malloc(4) 10 | const pdx = emlapack._malloc(n * 8) 11 | const pincx = emlapack._malloc(4) 12 | const pdy = emlapack._malloc(n * 8) 13 | const pincy = emlapack._malloc(4) 14 | const dx = new Float64Array(emlapack.HEAPF64.buffer, pdx, n) 15 | const dy = new Float64Array(emlapack.HEAPF64.buffer, pdy, n) 16 | 17 | emlapack.setValue(pn, n, 'i32') 18 | emlapack.setValue(pincx, 1, 'i32') 19 | emlapack.setValue(pincy, 1, 'i32') 20 | dx.set([1, 2, 3, 4]) 21 | 22 | const dcopy = emlapack.cwrap('f2c_dcopy', null, ['number', 'number', 'number', 'number', 'number']) 23 | dcopy(pn, pdx, pincx, pdy, pincy) 24 | 25 | expect(dy).to.be.eql([1, 2, 3, 4]) 26 | }) 27 | }) 28 | }) 29 | -------------------------------------------------------------------------------- /test/blas-level1/ddot.js: -------------------------------------------------------------------------------- 1 | /* eslint-env mocha */ 2 | const expect = require('expect.js') 3 | const run = require('../util') 4 | 5 | run((emlapack) => { 6 | describe('ddot(n, dx, incx, dy, incy)', () => { 7 | it('returns dx^t dy', () => { 8 | const n = 4 9 | const pn = emlapack._malloc(4) 10 | const pdx = emlapack._malloc(n * 8) 11 | const pincx = emlapack._malloc(4) 12 | const pdy = emlapack._malloc(n * 8) 13 | const pincy = emlapack._malloc(4) 14 | const dx = new Float64Array(emlapack.HEAPF64.buffer, pdx, n) 15 | const dy = new Float64Array(emlapack.HEAPF64.buffer, pdy, n) 16 | 17 | emlapack.setValue(pn, n, 'i32') 18 | emlapack.setValue(pincx, 1, 'i32') 19 | emlapack.setValue(pincy, 1, 'i32') 20 | dx.set([1, 2, 3, 4]) 21 | dy.set([2, 3, 4, 5]) 22 | 23 | const ddot = emlapack.cwrap('f2c_ddot', null, ['number', 'number', 'number', 'number', 'number']) 24 | expect(ddot(pn, pdx, pincx, pdy, pincy)).to.be(40) 25 | }) 26 | }) 27 | }) 28 | -------------------------------------------------------------------------------- /test/blas-level2/dgemv.js: -------------------------------------------------------------------------------- 1 | /* eslint-env mocha */ 2 | const expect = require('expect.js') 3 | const run = require('../util') 4 | 5 | run((emlapack) => { 6 | describe('dgemv("N", m, n, alpha, A, lda, x, incx, beta, y, incy)', function () { 7 | it('computes y := alpha*A*x + beta*y', function () { 8 | const m = 3 9 | const n = 2 10 | const ptrans = emlapack._malloc(1) 11 | const pm = emlapack._malloc(4) 12 | const pn = emlapack._malloc(4) 13 | const palpha = emlapack._malloc(8) 14 | const pA = emlapack._malloc(n * m * 8) 15 | const plda = emlapack._malloc(4) 16 | const px = emlapack._malloc(n * 8) 17 | const pincx = emlapack._malloc(4) 18 | const pbeta = emlapack._malloc(8) 19 | const py = emlapack._malloc(m * 8) 20 | const pincy = emlapack._malloc(4) 21 | const A = new Float64Array(emlapack.HEAPF64.buffer, pA, n * m) 22 | const x = new Float64Array(emlapack.HEAPF64.buffer, px, n) 23 | const y = new Float64Array(emlapack.HEAPF64.buffer, py, m) 24 | 25 | emlapack.setValue(ptrans, 'N'.charCodeAt(0), 'i8') 26 | emlapack.setValue(pm, m, 'i32') 27 | emlapack.setValue(pn, n, 'i32') 28 | emlapack.setValue(palpha, 2, 'double') 29 | emlapack.setValue(pbeta, 3, 'double') 30 | emlapack.setValue(plda, m, 'i32') 31 | emlapack.setValue(pincx, 1, 'i32') 32 | emlapack.setValue(pincy, 1, 'i32') 33 | 34 | A.set([1, 2, 3, 1, 2, 3]) 35 | x.set([1, 2]) 36 | y.set([1, 1, 1]) 37 | 38 | const dgemv = emlapack.cwrap('f2c_dgemv', null, ['number', 'number', 'number', 'number', 'number', 'number', 'number', 'number', 'number', 'number']) 39 | dgemv(ptrans, pm, pn, palpha, pA, plda, px, pincx, pbeta, py, pincy) 40 | 41 | expect(y).to.be.eql([9, 15, 21]) 42 | }) 43 | }) 44 | }) 45 | -------------------------------------------------------------------------------- /test/blas-level3/dgemm.js: -------------------------------------------------------------------------------- 1 | /* eslint-env mocha */ 2 | const expect = require('expect.js') 3 | const run = require('../util') 4 | 5 | run((emlapack) => { 6 | describe('dgemm(transa, transb, m, n, k, alpha, a, lda, b, ldb, beta, c, ldc)', function () { 7 | it('computes c := alpha * a * b + beta * c', function () { 8 | const ptransa = emlapack._malloc(1) 9 | const ptransb = emlapack._malloc(1) 10 | const pm = emlapack._malloc(4) 11 | const pn = emlapack._malloc(4) 12 | const pk = emlapack._malloc(4) 13 | const palpha = emlapack._malloc(8) 14 | const pa = emlapack._malloc(128) 15 | const plda = emlapack._malloc(4) 16 | const pb = emlapack._malloc(128) 17 | const pldb = emlapack._malloc(4) 18 | const pbeta = emlapack._malloc(8) 19 | const pc = emlapack._malloc(128) 20 | const pldc = emlapack._malloc(4) 21 | 22 | emlapack.setValue(ptransa, 'N'.charCodeAt(0), 'i8') 23 | emlapack.setValue(ptransb, 'N'.charCodeAt(0), 'i8') 24 | emlapack.setValue(pm, 4, 'i32') 25 | emlapack.setValue(pn, 4, 'i32') 26 | emlapack.setValue(pk, 4, 'i32') 27 | emlapack.setValue(palpha, 1.5, 'double') 28 | emlapack.setValue(plda, 4, 'i32') 29 | emlapack.setValue(pldb, 4, 'i32') 30 | emlapack.setValue(pbeta, 2.5, 'double') 31 | emlapack.setValue(pldc, 4, 'i32') 32 | 33 | const a = new Float64Array(emlapack.HEAPF64.buffer, pa, 16) 34 | const b = new Float64Array(emlapack.HEAPF64.buffer, pb, 16) 35 | const c = new Float64Array(emlapack.HEAPF64.buffer, pc, 16) 36 | a.set([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]) 37 | b.set([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]) 38 | c.set([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]) 39 | 40 | const dgemm = emlapack.cwrap('f2c_dgemm', null, ['number', 'number', 'number', 'number', 'number', 'number', 'number', 'number', 'number', 'number', 'number', 'number', 'number']) 41 | dgemm(ptransa, ptransb, pm, pn, pk, palpha, pa, plda, pb, pldb, pbeta, pc, pldc) 42 | 43 | expect(c).to.be.eql([8.5, 8.5, 8.5, 8.5, 8.5, 8.5, 8.5, 8.5, 8.5, 8.5, 8.5, 8.5, 8.5, 8.5, 8.5, 8.5]) 44 | }) 45 | }) 46 | }) 47 | -------------------------------------------------------------------------------- /test/blas-level3/dsyrk.js: -------------------------------------------------------------------------------- 1 | /* eslint-env mocha */ 2 | const expect = require('expect.js') 3 | const run = require('../util') 4 | 5 | run((emlapack) => { 6 | describe('dsyrk("U", "N", n, k, alpha, A, lda, beta, C, ldc)', function () { 7 | it('computes C := alpha * A * A^t + beta * C (upper triangular part of C is updated)', function () { 8 | const n = 2 9 | const k = 4 10 | const puplo = emlapack._malloc(1) 11 | const ptrans = emlapack._malloc(1) 12 | const pn = emlapack._malloc(4) 13 | const pk = emlapack._malloc(4) 14 | const palpha = emlapack._malloc(8) 15 | const pa = emlapack._malloc(n * k * 8) 16 | const plda = emlapack._malloc(4) 17 | const pbeta = emlapack._malloc(8) 18 | const pc = emlapack._malloc(n * n * 8) 19 | const pldc = emlapack._malloc(4) 20 | const a = new Float64Array(emlapack.HEAPF64.buffer, pa, n * k) 21 | const c = new Float64Array(emlapack.HEAPF64.buffer, pc, n * n) 22 | 23 | emlapack.setValue(puplo, 'U'.charCodeAt(0), 'i8') 24 | emlapack.setValue(ptrans, 'N'.charCodeAt(0), 'i8') 25 | emlapack.setValue(pn, n, 'i32') 26 | emlapack.setValue(pk, k, 'i32') 27 | emlapack.setValue(palpha, 1 / k, 'double') 28 | emlapack.setValue(pbeta, 0, 'double') 29 | emlapack.setValue(plda, n, 'i32') 30 | emlapack.setValue(pldc, n, 'i32') 31 | 32 | a.set([0, 1, 2, 1, -2, -1, 0, -1]) 33 | 34 | const dsyrk = emlapack.cwrap('f2c_dsyrk', null, ['number', 'number', 'number', 'number', 'number', 'number', 'number', 'number', 'number', 'number']) 35 | dsyrk(puplo, ptrans, pn, pk, palpha, pa, plda, pbeta, pc, pldc) 36 | 37 | expect(c).to.be.eql([2, 0, 1, 1]) 38 | }) 39 | }) 40 | }) 41 | -------------------------------------------------------------------------------- /test/lapack/dsyev.js: -------------------------------------------------------------------------------- 1 | /* eslint-env mocha */ 2 | const expect = require('expect.js') 3 | const run = require('../util') 4 | 5 | run((emlapack) => { 6 | describe('dsyev("N", "U", n, A, lda, w, work, lwork, info)', function () { 7 | it('computes all eigenvalues of a real (upper triangular) symmetric matrix A', function () { 8 | const n = 5 9 | const dsyev = emlapack.cwrap('dsyev_', null, ['number', 'number', 'number', 'number', 'number', 'number', 'number', 'number', 'number']) 10 | const pjobz = emlapack._malloc(1) 11 | const puplo = emlapack._malloc(1) 12 | const pn = emlapack._malloc(4) 13 | const pa = emlapack._malloc(n * n * 8) 14 | const plda = emlapack._malloc(4) 15 | const pw = emlapack._malloc(n * 8) 16 | const plwork = emlapack._malloc(4) 17 | const pinfo = emlapack._malloc(4) 18 | const pworkopt = emlapack._malloc(4) 19 | 20 | emlapack.setValue(pjobz, 'V'.charCodeAt(0), 'i8') 21 | emlapack.setValue(puplo, 'U'.charCodeAt(0), 'i8') 22 | emlapack.setValue(pn, n, 'i32') 23 | emlapack.setValue(plda, n, 'i32') 24 | emlapack.setValue(plwork, -1, 'i32') 25 | 26 | const a = new Float64Array(emlapack.HEAPF64.buffer, pa, n * n) 27 | const w = new Float64Array(emlapack.HEAPF64.buffer, pw, n) 28 | a.set([1.96, 0, 0, 0, 0, -6.49, 3.8, 0, 0, 0, -0.47, -6.39, 4.17, 0, 0, -7.2, 1.5, -1.51, 5.7, 0, -0.65, -6.34, 2.67, 1.8, -7.1]) 29 | 30 | dsyev(pjobz, puplo, pn, pa, plda, pw, pworkopt, plwork, pinfo) 31 | 32 | const workopt = emlapack.getValue(pworkopt, 'double') 33 | const pwork = emlapack._malloc(workopt * 8) 34 | emlapack.setValue(plwork, workopt, 'i32') 35 | 36 | dsyev(pjobz, puplo, pn, pa, plda, pw, pwork, plwork, pinfo) 37 | 38 | expect(+w[0].toFixed(2)).to.be(-11.07) 39 | expect(+w[1].toFixed(2)).to.be(-6.23) 40 | expect(+w[2].toFixed(2)).to.be(0.86) 41 | expect(+w[3].toFixed(2)).to.be(8.87) 42 | expect(+w[4].toFixed(2)).to.be(16.09) 43 | }) 44 | }) 45 | }) 46 | -------------------------------------------------------------------------------- /test/lapack/dsysv.js: -------------------------------------------------------------------------------- 1 | /* eslint-env mocha */ 2 | const expect = require('expect.js') 3 | const run = require('../util') 4 | 5 | run((emlapack) => { 6 | describe('dsysv("L", n, nrhs, A, lda, ipiv, B, ldb, work, lwork, info)', function () { 7 | it('solves A x = B where A is a real (lower triangular) symmetric matrix', function () { 8 | const n = 5 9 | const nrhs = 3 10 | const puplo = emlapack._malloc(1) 11 | const pn = emlapack._malloc(4) 12 | const pnrhs = emlapack._malloc(4) 13 | const pa = emlapack._malloc(n * n * 8) 14 | const plda = emlapack._malloc(4) 15 | const pipiv = emlapack._malloc(n * 4) 16 | const pb = emlapack._malloc(n * nrhs * 8) 17 | const pldb = emlapack._malloc(4) 18 | const plwork = emlapack._malloc(4) 19 | const pinfo = emlapack._malloc(4) 20 | const pworkopt = emlapack._malloc(4) 21 | const a = new Float64Array(emlapack.HEAPF64.buffer, pa, n * n) 22 | const b = new Float64Array(emlapack.HEAPF64.buffer, pb, n * nrhs) 23 | 24 | emlapack.setValue(puplo, 'L'.charCodeAt(0), 'i8') 25 | emlapack.setValue(pn, n, 'i32') 26 | emlapack.setValue(pnrhs, nrhs, 'i32') 27 | emlapack.setValue(plda, n, 'i32') 28 | emlapack.setValue(pldb, n, 'i32') 29 | emlapack.setValue(plwork, -1, 'i32') 30 | 31 | a.set([-5.86, 3.99, -5.93, -2.82, 7.69, 0, 4.46, 2.58, 4.42, 4.61, 0, 0, -8.52, 8.57, 7.69, 0, 0, 0, 3.72, 8.07, 0, 0, 0, 0, 9.83]) 32 | b.set([1.32, 2.22, 0.12, -6.41, 6.33, -6.33, 1.69, -1.56, -9.49, -3.67, -8.77, -8.33, 9.54, 9.56, 7.48]) 33 | 34 | const dsysv = emlapack.cwrap('dsysv_', null, ['number', 'number', 'number', 'number', 'number', 'number', 'number', 'number', 'number', 'number', 'number']) 35 | dsysv(puplo, pn, pnrhs, pa, plda, pipiv, pb, pldb, pworkopt, plwork, pinfo) 36 | 37 | const workopt = emlapack.getValue(pworkopt, 'double') 38 | const pwork = emlapack._malloc(workopt * 8) 39 | emlapack.setValue(plwork, workopt, 'i32') 40 | 41 | dsysv(puplo, pn, pnrhs, pa, plda, pipiv, pb, pldb, pwork, plwork, pinfo) 42 | 43 | expect(+b[0].toFixed(2)).to.be(1.17) 44 | expect(+b[1].toFixed(2)).to.be(-0.71) 45 | expect(+b[2].toFixed(2)).to.be(-0.63) 46 | expect(+b[3].toFixed(2)).to.be(-0.33) 47 | expect(+b[4].toFixed(2)).to.be(0.83) 48 | expect(+b[5].toFixed(2)).to.be(0.52) 49 | expect(+b[6].toFixed(2)).to.be(1.05) 50 | expect(+b[7].toFixed(2)).to.be(-0.52) 51 | expect(+b[8].toFixed(2)).to.be(0.43) 52 | expect(+b[9].toFixed(2)).to.be(-1.22) 53 | expect(+b[10].toFixed(2)).to.be(-0.86) 54 | expect(+b[11].toFixed(2)).to.be(-4.9) 55 | expect(+b[12].toFixed(2)).to.be(0.99) 56 | expect(+b[13].toFixed(2)).to.be(1.22) 57 | expect(+b[14].toFixed(2)).to.be(1.96) 58 | }) 59 | }) 60 | }) 61 | -------------------------------------------------------------------------------- /test/util.js: -------------------------------------------------------------------------------- 1 | /* eslint-env mocha */ 2 | const run = (f, path) => { 3 | const emlapack = require(path) 4 | f(emlapack) 5 | } 6 | 7 | module.exports = (f) => { 8 | describe('asmjs', () => { 9 | run(f, '../asmjs') 10 | }) 11 | describe('wasm', () => { 12 | run(f, '../wasm') 13 | }) 14 | } 15 | --------------------------------------------------------------------------------