diff --git a/.github/workflows/core.yml b/.github/workflows/core.yml index 0bf0bc517..87dbb29ff 100644 --- a/.github/workflows/core.yml +++ b/.github/workflows/core.yml @@ -23,15 +23,17 @@ jobs: - name: Install dependencies run: | python -m pip install --upgrade pip + pip install scipy-openblas64 pip install pytest-xdist - sudo apt install libopenblas-dev ${{ matrix.cpp-version }} + sudo apt install ${{ matrix.cpp-version }} if test ${{ matrix.python-version }} != 'pypy-3.9'; then pip install scipy ; fi - name: Setup run: | python -m pip install . python -m pip install . 'pythran[test]' - printf '[compiler]\nblas=openblas\n' > ~/.config/.pythranrc - printf 'cflags=-std=c++11 -Wall -Werror -Wno-unknown-pragmas -Wno-unused-local-typedefs -Wno-cpp -Wno-deprecated-declarations -Wno-absolute-value -Wno-parentheses-equality\n' >> ~/.config/.pythranrc + printf '[compiler]\nblas=scipy-openblas\n' > ~/.config/.pythranrc + printf 'cflags=-std=c++11 -Wall -Werror -Wno-unknown-pragmas -Wno-unused-local-typedefs -Wno-cpp -Wno-deprecated-declarations' >> ~/.config/.pythranrc + if test "${{ matrix.cpp-version }}" = "clang-7" ; then printf -- " -Wno-absolute-value -Wno-parentheses-equality\n" ; else printf "\n" ; fi >> ~/.config/.pythranrc - name: Testing minimal CLI run: | pythran --version diff --git a/docs/MANUAL.rst b/docs/MANUAL.rst index 0cdc1e4f1..4af0b5120 100644 --- a/docs/MANUAL.rst +++ b/docs/MANUAL.rst @@ -591,9 +591,9 @@ loaded. This can be helpful for reproducible builds. All the options in the ``.pythranrc`` file can be specified when running pythran by using the command line argument --config= . For example:: - pythran --config compiler.blas=pythran-openblas this_file.py + pythran --config compiler.blas=scipy-openblas this_file.py -would specify that pythran-openblas is the blas library to use. +would specify that ``scipy-openblas`` is the blas library to use. Options specified using command-line arguments override the options found in the ``.pythranrc`` file @@ -648,15 +648,17 @@ This section contains compiler flags configuration. For education purpose, the d :``blas``: - BLAS library to use. ``none``, ``pythran-openblas``, ``blas``, - ``openblas``, ``atlas`` or ``mkl`` are viable choices. - ``none`` prevents from linking with blas. - ``pythran-openblas`` requires the `pythran-openblas - `_ package, which provides a - statically linked version of `OpenBLAS `_. Other - options are system dependant. Depending on your setup, you *may* need to - update ``include_dirs`` to point to the location of the BLAS headers, e.g. - ``/usr/include/openblas``. + BLAS library to use. ``none``, ``scipy-openblas``, ``pythran-openblas``, + ``blas``, ``openblas``, ``atlas`` or ``mkl`` are viable choices. ``none`` + prevents from linking with blas. ``scipy-openblas`` requires the + `scipy-openblas64 `_ package, + which provides a prepcompiled version of `OpenBLAS + `_. ``pythran-openblas`` requires the + `pythran-openblas `_ package, + which provides a statically linked version of `OpenBLAS + `_. Other options are system dependant. Depending + on your setup, you *may* need to update ``include_dirs`` to point to the + location of the BLAS headers, e.g. ``/usr/include/openblas``. :``ignoreflags``: diff --git a/pythran/config.py b/pythran/config.py index e094a55a3..4a7d31ae1 100644 --- a/pythran/config.py +++ b/pythran/config.py @@ -231,7 +231,7 @@ def parse_define(define): extension['include_dirs'].append(numpy.get_include()) # blas dependency - reserved_blas_entries = 'pythran-openblas', 'none' + reserved_blas_entries = 'scipy-openblas', 'pythran-openblas', 'none' user_blas = cfg.get('compiler', 'blas') if user_blas == 'pythran-openblas': try: @@ -247,6 +247,21 @@ def parse_define(define): "Please install it or change the compiler.blas " "setting. Defaulting to 'none'") user_blas = 'none' + elif user_blas == 'scipy-openblas': + try: + import scipy_openblas64 as openblas + # required to cope with atlas missing extern "C" + extension['define_macros'].append('PYTHRAN_BLAS_SCIPY_OPENBLAS') + extension['include_dirs'].append(openblas.get_include_dir()) + extension['library_dirs'].append(openblas.get_lib_dir()) + extension['libraries'].append(openblas.get_library()) + extension['extra_link_args'].append("-Wl,-rpath=" + openblas.get_lib_dir()) + except ImportError: + logger.warning("Failed to find 'scipy-openblas64' package. " + "Please install it or change the compiler.blas " + "setting. Defaulting to 'none'") + user_blas = 'none' + if user_blas == 'none': extension['define_macros'].append('PYTHRAN_BLAS_NONE') diff --git a/pythran/pythonic/numpy/dot.hpp b/pythran/pythonic/numpy/dot.hpp index 46d93dae9..69ab12015 100644 --- a/pythran/pythonic/numpy/dot.hpp +++ b/pythran/pythonic/numpy/dot.hpp @@ -12,6 +12,1286 @@ #error pythran configured without BLAS but BLAS seem needed #endif +#if defined(PYTHRAN_BLAS_SCIPY_OPENBLAS) +#define BLAS_MANGLE(s) scipy_##s##64_ + +/* FIXED VENDORED HEADER { */ +#include "openblas_config.h" +#include + +extern "C" { +/* Assume C declarations for C++ */ + +/*Set the number of threads on runtime.*/ +void scipy_openblas_set_num_threads64_(int num_threads); +void scipy_goto_set_num_threads64_(int num_threads); +int scipy_openblas_set_num_threads_local64_(int num_threads); + +/*Get the number of threads on runtime.*/ +int scipy_openblas_get_num_threads64_(void); + +/*Get the number of physical processors (cores).*/ +int scipy_openblas_get_num_procs64_(void); + +/*Get the build configure on runtime.*/ +char *scipy_openblas_get_config64_(void); + +/*Get the CPU corename on runtime.*/ +char *scipy_openblas_get_corename64_(void); + +/*Set the threading backend to a custom callback.*/ +typedef void (*scipy_openblas_dojob_callback64_)(int thread_num, void *jobdata, + int dojob_data); +typedef void (*scipy_openblas_threads_callback64_)( + int sync, scipy_openblas_dojob_callback64_ dojob, int numjobs, + size_t jobdata_elsize, void *jobdata, int dojob_data); +void scipy_openblas_set_threads_callback_function64_( + scipy_openblas_threads_callback64_ callback); + +#ifdef OPENBLAS_OS_LINUX +/* Sets thread affinity for OpenBLAS threads. `thread_idx` is in [0, + * scipy_openblas_get_num_threads64_()-1]. */ +int scipy_openblas_setaffinity64_(int thread_idx, size_t cpusetsize, + cpu_set_t *cpu_set); +/* Queries thread affinity for OpenBLAS threads. `thread_idx` is in [0, + * scipy_openblas_get_num_threads64_()-1]. */ +int scipy_openblas_getaffinity64_(int thread_idx, size_t cpusetsize, + cpu_set_t *cpu_set); +#endif + +/* Get the parallelization type which is used by OpenBLAS */ +int scipy_openblas_get_parallel64_(void); +/* OpenBLAS is compiled for sequential use */ +#define OPENBLAS_SEQUENTIAL 0 +/* OpenBLAS is compiled using normal threading model */ +#define OPENBLAS_THREAD 1 +/* OpenBLAS is compiled using OpenMP threading model */ +#define OPENBLAS_OPENMP 2 + +/* + * Since all of GotoBlas was written without const, + * we disable it at build time. + */ +#ifndef OPENBLAS_CONST +#define OPENBLAS_CONST const +#endif + +#define CBLAS_INDEX size_t + +typedef enum CBLAS_ORDER { + CblasRowMajor = 101, + CblasColMajor = 102 +} CBLAS_ORDER; +typedef enum CBLAS_TRANSPOSE { + CblasNoTrans = 111, + CblasTrans = 112, + CblasConjTrans = 113, + CblasConjNoTrans = 114 +} CBLAS_TRANSPOSE; +typedef enum CBLAS_UPLO { CblasUpper = 121, CblasLower = 122 } CBLAS_UPLO; +typedef enum CBLAS_DIAG { CblasNonUnit = 131, CblasUnit = 132 } CBLAS_DIAG; +typedef enum CBLAS_SIDE { CblasLeft = 141, CblasRight = 142 } CBLAS_SIDE; +typedef CBLAS_ORDER CBLAS_LAYOUT; + +float scipy_cblas_sdsdot64_(OPENBLAS_CONST blasint n, + OPENBLAS_CONST float alpha, OPENBLAS_CONST float *x, + OPENBLAS_CONST blasint incx, + OPENBLAS_CONST float *y, + OPENBLAS_CONST blasint incy); +double scipy_cblas_dsdot64_(OPENBLAS_CONST blasint n, OPENBLAS_CONST float *x, + OPENBLAS_CONST blasint incx, + OPENBLAS_CONST float *y, + OPENBLAS_CONST blasint incy); +float scipy_cblas_sdot64_(OPENBLAS_CONST blasint n, OPENBLAS_CONST float *x, + OPENBLAS_CONST blasint incx, OPENBLAS_CONST float *y, + OPENBLAS_CONST blasint incy); +double scipy_cblas_ddot64_(OPENBLAS_CONST blasint n, OPENBLAS_CONST double *x, + OPENBLAS_CONST blasint incx, + OPENBLAS_CONST double *y, + OPENBLAS_CONST blasint incy); + +openblas_complex_float scipy_cblas_cdotu64_(OPENBLAS_CONST blasint n, + OPENBLAS_CONST void *x, + OPENBLAS_CONST blasint incx, + OPENBLAS_CONST void *y, + OPENBLAS_CONST blasint incy); +openblas_complex_float scipy_cblas_cdotc64_(OPENBLAS_CONST blasint n, + OPENBLAS_CONST void *x, + OPENBLAS_CONST blasint incx, + OPENBLAS_CONST void *y, + OPENBLAS_CONST blasint incy); +openblas_complex_double scipy_cblas_zdotu64_(OPENBLAS_CONST blasint n, + OPENBLAS_CONST void *x, + OPENBLAS_CONST blasint incx, + OPENBLAS_CONST void *y, + OPENBLAS_CONST blasint incy); +openblas_complex_double scipy_cblas_zdotc64_(OPENBLAS_CONST blasint n, + OPENBLAS_CONST void *x, + OPENBLAS_CONST blasint incx, + OPENBLAS_CONST void *y, + OPENBLAS_CONST blasint incy); + +void scipy_cblas_cdotu_sub64_(OPENBLAS_CONST blasint n, OPENBLAS_CONST void *x, + OPENBLAS_CONST blasint incx, + OPENBLAS_CONST void *y, + OPENBLAS_CONST blasint incy, void *ret); +void scipy_cblas_cdotc_sub64_(OPENBLAS_CONST blasint n, OPENBLAS_CONST void *x, + OPENBLAS_CONST blasint incx, + OPENBLAS_CONST void *y, + OPENBLAS_CONST blasint incy, void *ret); +void scipy_cblas_zdotu_sub64_(OPENBLAS_CONST blasint n, OPENBLAS_CONST void *x, + OPENBLAS_CONST blasint incx, + OPENBLAS_CONST void *y, + OPENBLAS_CONST blasint incy, void *ret); +void scipy_cblas_zdotc_sub64_(OPENBLAS_CONST blasint n, OPENBLAS_CONST void *x, + OPENBLAS_CONST blasint incx, + OPENBLAS_CONST void *y, + OPENBLAS_CONST blasint incy, void *ret); + +float scipy_cblas_sasum64_(OPENBLAS_CONST blasint n, OPENBLAS_CONST float *x, + OPENBLAS_CONST blasint incx); +double scipy_cblas_dasum64_(OPENBLAS_CONST blasint n, OPENBLAS_CONST double *x, + OPENBLAS_CONST blasint incx); +float scipy_cblas_scasum64_(OPENBLAS_CONST blasint n, OPENBLAS_CONST void *x, + OPENBLAS_CONST blasint incx); +double scipy_cblas_dzasum64_(OPENBLAS_CONST blasint n, OPENBLAS_CONST void *x, + OPENBLAS_CONST blasint incx); + +float scipy_cblas_ssum64_(OPENBLAS_CONST blasint n, OPENBLAS_CONST float *x, + OPENBLAS_CONST blasint incx); +double scipy_cblas_dsum64_(OPENBLAS_CONST blasint n, OPENBLAS_CONST double *x, + OPENBLAS_CONST blasint incx); +float scipy_cblas_scsum64_(OPENBLAS_CONST blasint n, OPENBLAS_CONST void *x, + OPENBLAS_CONST blasint incx); +double scipy_cblas_dzsum64_(OPENBLAS_CONST blasint n, OPENBLAS_CONST void *x, + OPENBLAS_CONST blasint incx); + +float scipy_cblas_snrm264_(OPENBLAS_CONST blasint N, OPENBLAS_CONST float *X, + OPENBLAS_CONST blasint incX); +double scipy_cblas_dnrm264_(OPENBLAS_CONST blasint N, OPENBLAS_CONST double *X, + OPENBLAS_CONST blasint incX); +float scipy_cblas_scnrm264_(OPENBLAS_CONST blasint N, OPENBLAS_CONST void *X, + OPENBLAS_CONST blasint incX); +double scipy_cblas_dznrm264_(OPENBLAS_CONST blasint N, OPENBLAS_CONST void *X, + OPENBLAS_CONST blasint incX); + +CBLAS_INDEX scipy_cblas_isamax64_(OPENBLAS_CONST blasint n, + OPENBLAS_CONST float *x, + OPENBLAS_CONST blasint incx); +CBLAS_INDEX scipy_cblas_idamax64_(OPENBLAS_CONST blasint n, + OPENBLAS_CONST double *x, + OPENBLAS_CONST blasint incx); +CBLAS_INDEX scipy_cblas_icamax64_(OPENBLAS_CONST blasint n, + OPENBLAS_CONST void *x, + OPENBLAS_CONST blasint incx); +CBLAS_INDEX scipy_cblas_izamax64_(OPENBLAS_CONST blasint n, + OPENBLAS_CONST void *x, + OPENBLAS_CONST blasint incx); + +CBLAS_INDEX scipy_cblas_isamin64_(OPENBLAS_CONST blasint n, + OPENBLAS_CONST float *x, + OPENBLAS_CONST blasint incx); +CBLAS_INDEX scipy_cblas_idamin64_(OPENBLAS_CONST blasint n, + OPENBLAS_CONST double *x, + OPENBLAS_CONST blasint incx); +CBLAS_INDEX scipy_cblas_icamin64_(OPENBLAS_CONST blasint n, + OPENBLAS_CONST void *x, + OPENBLAS_CONST blasint incx); +CBLAS_INDEX scipy_cblas_izamin64_(OPENBLAS_CONST blasint n, + OPENBLAS_CONST void *x, + OPENBLAS_CONST blasint incx); + +float scipy_cblas_samax64_(OPENBLAS_CONST blasint n, OPENBLAS_CONST float *x, + OPENBLAS_CONST blasint incx); +double scipy_cblas_damax64_(OPENBLAS_CONST blasint n, OPENBLAS_CONST double *x, + OPENBLAS_CONST blasint incx); +float scipy_cblas_scamax64_(OPENBLAS_CONST blasint n, OPENBLAS_CONST void *x, + OPENBLAS_CONST blasint incx); +double scipy_cblas_dzamax64_(OPENBLAS_CONST blasint n, OPENBLAS_CONST void *x, + OPENBLAS_CONST blasint incx); + +float scipy_cblas_samin64_(OPENBLAS_CONST blasint n, OPENBLAS_CONST float *x, + OPENBLAS_CONST blasint incx); +double scipy_cblas_damin64_(OPENBLAS_CONST blasint n, OPENBLAS_CONST double *x, + OPENBLAS_CONST blasint incx); +float scipy_cblas_scamin64_(OPENBLAS_CONST blasint n, OPENBLAS_CONST void *x, + OPENBLAS_CONST blasint incx); +double scipy_cblas_dzamin64_(OPENBLAS_CONST blasint n, OPENBLAS_CONST void *x, + OPENBLAS_CONST blasint incx); + +CBLAS_INDEX scipy_cblas_ismax64_(OPENBLAS_CONST blasint n, + OPENBLAS_CONST float *x, + OPENBLAS_CONST blasint incx); +CBLAS_INDEX scipy_cblas_idmax64_(OPENBLAS_CONST blasint n, + OPENBLAS_CONST double *x, + OPENBLAS_CONST blasint incx); +CBLAS_INDEX scipy_cblas_icmax64_(OPENBLAS_CONST blasint n, + OPENBLAS_CONST void *x, + OPENBLAS_CONST blasint incx); +CBLAS_INDEX scipy_cblas_izmax64_(OPENBLAS_CONST blasint n, + OPENBLAS_CONST void *x, + OPENBLAS_CONST blasint incx); + +CBLAS_INDEX scipy_cblas_ismin64_(OPENBLAS_CONST blasint n, + OPENBLAS_CONST float *x, + OPENBLAS_CONST blasint incx); +CBLAS_INDEX scipy_cblas_idmin64_(OPENBLAS_CONST blasint n, + OPENBLAS_CONST double *x, + OPENBLAS_CONST blasint incx); +CBLAS_INDEX scipy_cblas_icmin64_(OPENBLAS_CONST blasint n, + OPENBLAS_CONST void *x, + OPENBLAS_CONST blasint incx); +CBLAS_INDEX scipy_cblas_izmin64_(OPENBLAS_CONST blasint n, + OPENBLAS_CONST void *x, + OPENBLAS_CONST blasint incx); + +void scipy_cblas_saxpy64_(OPENBLAS_CONST blasint n, OPENBLAS_CONST float alpha, + OPENBLAS_CONST float *x, OPENBLAS_CONST blasint incx, + float *y, OPENBLAS_CONST blasint incy); +void scipy_cblas_daxpy64_(OPENBLAS_CONST blasint n, OPENBLAS_CONST double alpha, + OPENBLAS_CONST double *x, OPENBLAS_CONST blasint incx, + double *y, OPENBLAS_CONST blasint incy); +void scipy_cblas_caxpy64_(OPENBLAS_CONST blasint n, OPENBLAS_CONST void *alpha, + OPENBLAS_CONST void *x, OPENBLAS_CONST blasint incx, + void *y, OPENBLAS_CONST blasint incy); +void scipy_cblas_zaxpy64_(OPENBLAS_CONST blasint n, OPENBLAS_CONST void *alpha, + OPENBLAS_CONST void *x, OPENBLAS_CONST blasint incx, + void *y, OPENBLAS_CONST blasint incy); + +void scipy_cblas_caxpyc64_(OPENBLAS_CONST blasint n, OPENBLAS_CONST void *alpha, + OPENBLAS_CONST void *x, OPENBLAS_CONST blasint incx, + void *y, OPENBLAS_CONST blasint incy); +void scipy_cblas_zaxpyc64_(OPENBLAS_CONST blasint n, OPENBLAS_CONST void *alpha, + OPENBLAS_CONST void *x, OPENBLAS_CONST blasint incx, + void *y, OPENBLAS_CONST blasint incy); + +void scipy_cblas_scopy64_(OPENBLAS_CONST blasint n, OPENBLAS_CONST float *x, + OPENBLAS_CONST blasint incx, float *y, + OPENBLAS_CONST blasint incy); +void scipy_cblas_dcopy64_(OPENBLAS_CONST blasint n, OPENBLAS_CONST double *x, + OPENBLAS_CONST blasint incx, double *y, + OPENBLAS_CONST blasint incy); +void scipy_cblas_ccopy64_(OPENBLAS_CONST blasint n, OPENBLAS_CONST void *x, + OPENBLAS_CONST blasint incx, void *y, + OPENBLAS_CONST blasint incy); +void scipy_cblas_zcopy64_(OPENBLAS_CONST blasint n, OPENBLAS_CONST void *x, + OPENBLAS_CONST blasint incx, void *y, + OPENBLAS_CONST blasint incy); + +void scipy_cblas_sswap64_(OPENBLAS_CONST blasint n, float *x, + OPENBLAS_CONST blasint incx, float *y, + OPENBLAS_CONST blasint incy); +void scipy_cblas_dswap64_(OPENBLAS_CONST blasint n, double *x, + OPENBLAS_CONST blasint incx, double *y, + OPENBLAS_CONST blasint incy); +void scipy_cblas_cswap64_(OPENBLAS_CONST blasint n, void *x, + OPENBLAS_CONST blasint incx, void *y, + OPENBLAS_CONST blasint incy); +void scipy_cblas_zswap64_(OPENBLAS_CONST blasint n, void *x, + OPENBLAS_CONST blasint incx, void *y, + OPENBLAS_CONST blasint incy); + +void scipy_cblas_srot64_(OPENBLAS_CONST blasint N, float *X, + OPENBLAS_CONST blasint incX, float *Y, + OPENBLAS_CONST blasint incY, OPENBLAS_CONST float c, + OPENBLAS_CONST float s); +void scipy_cblas_drot64_(OPENBLAS_CONST blasint N, double *X, + OPENBLAS_CONST blasint incX, double *Y, + OPENBLAS_CONST blasint incY, OPENBLAS_CONST double c, + OPENBLAS_CONST double s); +void scipy_cblas_csrot64_(OPENBLAS_CONST blasint n, OPENBLAS_CONST void *x, + OPENBLAS_CONST blasint incx, void *y, + OPENBLAS_CONST blasint incY, OPENBLAS_CONST float c, + OPENBLAS_CONST float s); +void scipy_cblas_zdrot64_(OPENBLAS_CONST blasint n, OPENBLAS_CONST void *x, + OPENBLAS_CONST blasint incx, void *y, + OPENBLAS_CONST blasint incY, OPENBLAS_CONST double c, + OPENBLAS_CONST double s); + +void scipy_cblas_srotg64_(float *a, float *b, float *c, float *s); +void scipy_cblas_drotg64_(double *a, double *b, double *c, double *s); +void scipy_cblas_crotg64_(void *a, void *b, float *c, void *s); +void scipy_cblas_zrotg64_(void *a, void *b, double *c, void *s); + +void scipy_cblas_srotm64_(OPENBLAS_CONST blasint N, float *X, + OPENBLAS_CONST blasint incX, float *Y, + OPENBLAS_CONST blasint incY, OPENBLAS_CONST float *P); +void scipy_cblas_drotm64_(OPENBLAS_CONST blasint N, double *X, + OPENBLAS_CONST blasint incX, double *Y, + OPENBLAS_CONST blasint incY, + OPENBLAS_CONST double *P); + +void scipy_cblas_srotmg64_(float *d1, float *d2, float *b1, + OPENBLAS_CONST float b2, float *P); +void scipy_cblas_drotmg64_(double *d1, double *d2, double *b1, + OPENBLAS_CONST double b2, double *P); + +void scipy_cblas_sscal64_(OPENBLAS_CONST blasint N, OPENBLAS_CONST float alpha, + float *X, OPENBLAS_CONST blasint incX); +void scipy_cblas_dscal64_(OPENBLAS_CONST blasint N, OPENBLAS_CONST double alpha, + double *X, OPENBLAS_CONST blasint incX); +void scipy_cblas_cscal64_(OPENBLAS_CONST blasint N, OPENBLAS_CONST void *alpha, + void *X, OPENBLAS_CONST blasint incX); +void scipy_cblas_zscal64_(OPENBLAS_CONST blasint N, OPENBLAS_CONST void *alpha, + void *X, OPENBLAS_CONST blasint incX); +void scipy_cblas_csscal64_(OPENBLAS_CONST blasint N, OPENBLAS_CONST float alpha, + void *X, OPENBLAS_CONST blasint incX); +void scipy_cblas_zdscal64_(OPENBLAS_CONST blasint N, + OPENBLAS_CONST double alpha, void *X, + OPENBLAS_CONST blasint incX); + +void scipy_cblas_sgemv64_(OPENBLAS_CONST enum CBLAS_ORDER order, + OPENBLAS_CONST enum CBLAS_TRANSPOSE trans, + OPENBLAS_CONST blasint m, OPENBLAS_CONST blasint n, + OPENBLAS_CONST float alpha, OPENBLAS_CONST float *a, + OPENBLAS_CONST blasint lda, OPENBLAS_CONST float *x, + OPENBLAS_CONST blasint incx, + OPENBLAS_CONST float beta, float *y, + OPENBLAS_CONST blasint incy); +void scipy_cblas_dgemv64_(OPENBLAS_CONST enum CBLAS_ORDER order, + OPENBLAS_CONST enum CBLAS_TRANSPOSE trans, + OPENBLAS_CONST blasint m, OPENBLAS_CONST blasint n, + OPENBLAS_CONST double alpha, OPENBLAS_CONST double *a, + OPENBLAS_CONST blasint lda, OPENBLAS_CONST double *x, + OPENBLAS_CONST blasint incx, + OPENBLAS_CONST double beta, double *y, + OPENBLAS_CONST blasint incy); +void scipy_cblas_cgemv64_(OPENBLAS_CONST enum CBLAS_ORDER order, + OPENBLAS_CONST enum CBLAS_TRANSPOSE trans, + OPENBLAS_CONST blasint m, OPENBLAS_CONST blasint n, + OPENBLAS_CONST void *alpha, OPENBLAS_CONST void *a, + OPENBLAS_CONST blasint lda, OPENBLAS_CONST void *x, + OPENBLAS_CONST blasint incx, + OPENBLAS_CONST void *beta, void *y, + OPENBLAS_CONST blasint incy); +void scipy_cblas_zgemv64_(OPENBLAS_CONST enum CBLAS_ORDER order, + OPENBLAS_CONST enum CBLAS_TRANSPOSE trans, + OPENBLAS_CONST blasint m, OPENBLAS_CONST blasint n, + OPENBLAS_CONST void *alpha, OPENBLAS_CONST void *a, + OPENBLAS_CONST blasint lda, OPENBLAS_CONST void *x, + OPENBLAS_CONST blasint incx, + OPENBLAS_CONST void *beta, void *y, + OPENBLAS_CONST blasint incy); + +void scipy_cblas_sger64_(OPENBLAS_CONST enum CBLAS_ORDER order, + OPENBLAS_CONST blasint M, OPENBLAS_CONST blasint N, + OPENBLAS_CONST float alpha, OPENBLAS_CONST float *X, + OPENBLAS_CONST blasint incX, OPENBLAS_CONST float *Y, + OPENBLAS_CONST blasint incY, float *A, + OPENBLAS_CONST blasint lda); +void scipy_cblas_dger64_(OPENBLAS_CONST enum CBLAS_ORDER order, + OPENBLAS_CONST blasint M, OPENBLAS_CONST blasint N, + OPENBLAS_CONST double alpha, OPENBLAS_CONST double *X, + OPENBLAS_CONST blasint incX, OPENBLAS_CONST double *Y, + OPENBLAS_CONST blasint incY, double *A, + OPENBLAS_CONST blasint lda); +void scipy_cblas_cgeru64_(OPENBLAS_CONST enum CBLAS_ORDER order, + OPENBLAS_CONST blasint M, OPENBLAS_CONST blasint N, + OPENBLAS_CONST void *alpha, OPENBLAS_CONST void *X, + OPENBLAS_CONST blasint incX, OPENBLAS_CONST void *Y, + OPENBLAS_CONST blasint incY, void *A, + OPENBLAS_CONST blasint lda); +void scipy_cblas_cgerc64_(OPENBLAS_CONST enum CBLAS_ORDER order, + OPENBLAS_CONST blasint M, OPENBLAS_CONST blasint N, + OPENBLAS_CONST void *alpha, OPENBLAS_CONST void *X, + OPENBLAS_CONST blasint incX, OPENBLAS_CONST void *Y, + OPENBLAS_CONST blasint incY, void *A, + OPENBLAS_CONST blasint lda); +void scipy_cblas_zgeru64_(OPENBLAS_CONST enum CBLAS_ORDER order, + OPENBLAS_CONST blasint M, OPENBLAS_CONST blasint N, + OPENBLAS_CONST void *alpha, OPENBLAS_CONST void *X, + OPENBLAS_CONST blasint incX, OPENBLAS_CONST void *Y, + OPENBLAS_CONST blasint incY, void *A, + OPENBLAS_CONST blasint lda); +void scipy_cblas_zgerc64_(OPENBLAS_CONST enum CBLAS_ORDER order, + OPENBLAS_CONST blasint M, OPENBLAS_CONST blasint N, + OPENBLAS_CONST void *alpha, OPENBLAS_CONST void *X, + OPENBLAS_CONST blasint incX, OPENBLAS_CONST void *Y, + OPENBLAS_CONST blasint incY, void *A, + OPENBLAS_CONST blasint lda); + +void scipy_cblas_strsv64_(OPENBLAS_CONST enum CBLAS_ORDER order, + OPENBLAS_CONST enum CBLAS_UPLO Uplo, + OPENBLAS_CONST enum CBLAS_TRANSPOSE TransA, + OPENBLAS_CONST enum CBLAS_DIAG Diag, + OPENBLAS_CONST blasint N, OPENBLAS_CONST float *A, + OPENBLAS_CONST blasint lda, float *X, + OPENBLAS_CONST blasint incX); +void scipy_cblas_dtrsv64_(OPENBLAS_CONST enum CBLAS_ORDER order, + OPENBLAS_CONST enum CBLAS_UPLO Uplo, + OPENBLAS_CONST enum CBLAS_TRANSPOSE TransA, + OPENBLAS_CONST enum CBLAS_DIAG Diag, + OPENBLAS_CONST blasint N, OPENBLAS_CONST double *A, + OPENBLAS_CONST blasint lda, double *X, + OPENBLAS_CONST blasint incX); +void scipy_cblas_ctrsv64_(OPENBLAS_CONST enum CBLAS_ORDER order, + OPENBLAS_CONST enum CBLAS_UPLO Uplo, + OPENBLAS_CONST enum CBLAS_TRANSPOSE TransA, + OPENBLAS_CONST enum CBLAS_DIAG Diag, + OPENBLAS_CONST blasint N, OPENBLAS_CONST void *A, + OPENBLAS_CONST blasint lda, void *X, + OPENBLAS_CONST blasint incX); +void scipy_cblas_ztrsv64_(OPENBLAS_CONST enum CBLAS_ORDER order, + OPENBLAS_CONST enum CBLAS_UPLO Uplo, + OPENBLAS_CONST enum CBLAS_TRANSPOSE TransA, + OPENBLAS_CONST enum CBLAS_DIAG Diag, + OPENBLAS_CONST blasint N, OPENBLAS_CONST void *A, + OPENBLAS_CONST blasint lda, void *X, + OPENBLAS_CONST blasint incX); + +void scipy_cblas_strmv64_(OPENBLAS_CONST enum CBLAS_ORDER order, + OPENBLAS_CONST enum CBLAS_UPLO Uplo, + OPENBLAS_CONST enum CBLAS_TRANSPOSE TransA, + OPENBLAS_CONST enum CBLAS_DIAG Diag, + OPENBLAS_CONST blasint N, OPENBLAS_CONST float *A, + OPENBLAS_CONST blasint lda, float *X, + OPENBLAS_CONST blasint incX); +void scipy_cblas_dtrmv64_(OPENBLAS_CONST enum CBLAS_ORDER order, + OPENBLAS_CONST enum CBLAS_UPLO Uplo, + OPENBLAS_CONST enum CBLAS_TRANSPOSE TransA, + OPENBLAS_CONST enum CBLAS_DIAG Diag, + OPENBLAS_CONST blasint N, OPENBLAS_CONST double *A, + OPENBLAS_CONST blasint lda, double *X, + OPENBLAS_CONST blasint incX); +void scipy_cblas_ctrmv64_(OPENBLAS_CONST enum CBLAS_ORDER order, + OPENBLAS_CONST enum CBLAS_UPLO Uplo, + OPENBLAS_CONST enum CBLAS_TRANSPOSE TransA, + OPENBLAS_CONST enum CBLAS_DIAG Diag, + OPENBLAS_CONST blasint N, OPENBLAS_CONST void *A, + OPENBLAS_CONST blasint lda, void *X, + OPENBLAS_CONST blasint incX); +void scipy_cblas_ztrmv64_(OPENBLAS_CONST enum CBLAS_ORDER order, + OPENBLAS_CONST enum CBLAS_UPLO Uplo, + OPENBLAS_CONST enum CBLAS_TRANSPOSE TransA, + OPENBLAS_CONST enum CBLAS_DIAG Diag, + OPENBLAS_CONST blasint N, OPENBLAS_CONST void *A, + OPENBLAS_CONST blasint lda, void *X, + OPENBLAS_CONST blasint incX); + +void scipy_cblas_ssyr64_(OPENBLAS_CONST enum CBLAS_ORDER order, + OPENBLAS_CONST enum CBLAS_UPLO Uplo, + OPENBLAS_CONST blasint N, OPENBLAS_CONST float alpha, + OPENBLAS_CONST float *X, OPENBLAS_CONST blasint incX, + float *A, OPENBLAS_CONST blasint lda); +void scipy_cblas_dsyr64_(OPENBLAS_CONST enum CBLAS_ORDER order, + OPENBLAS_CONST enum CBLAS_UPLO Uplo, + OPENBLAS_CONST blasint N, OPENBLAS_CONST double alpha, + OPENBLAS_CONST double *X, OPENBLAS_CONST blasint incX, + double *A, OPENBLAS_CONST blasint lda); +void scipy_cblas_cher64_(OPENBLAS_CONST enum CBLAS_ORDER order, + OPENBLAS_CONST enum CBLAS_UPLO Uplo, + OPENBLAS_CONST blasint N, OPENBLAS_CONST float alpha, + OPENBLAS_CONST void *X, OPENBLAS_CONST blasint incX, + void *A, OPENBLAS_CONST blasint lda); +void scipy_cblas_zher64_(OPENBLAS_CONST enum CBLAS_ORDER order, + OPENBLAS_CONST enum CBLAS_UPLO Uplo, + OPENBLAS_CONST blasint N, OPENBLAS_CONST double alpha, + OPENBLAS_CONST void *X, OPENBLAS_CONST blasint incX, + void *A, OPENBLAS_CONST blasint lda); + +void scipy_cblas_ssyr264_(OPENBLAS_CONST enum CBLAS_ORDER order, + OPENBLAS_CONST enum CBLAS_UPLO Uplo, + OPENBLAS_CONST blasint N, OPENBLAS_CONST float alpha, + OPENBLAS_CONST float *X, OPENBLAS_CONST blasint incX, + OPENBLAS_CONST float *Y, OPENBLAS_CONST blasint incY, + float *A, OPENBLAS_CONST blasint lda); +void scipy_cblas_dsyr264_(OPENBLAS_CONST enum CBLAS_ORDER order, + OPENBLAS_CONST enum CBLAS_UPLO Uplo, + OPENBLAS_CONST blasint N, OPENBLAS_CONST double alpha, + OPENBLAS_CONST double *X, OPENBLAS_CONST blasint incX, + OPENBLAS_CONST double *Y, OPENBLAS_CONST blasint incY, + double *A, OPENBLAS_CONST blasint lda); +void scipy_cblas_cher264_(OPENBLAS_CONST enum CBLAS_ORDER order, + OPENBLAS_CONST enum CBLAS_UPLO Uplo, + OPENBLAS_CONST blasint N, OPENBLAS_CONST void *alpha, + OPENBLAS_CONST void *X, OPENBLAS_CONST blasint incX, + OPENBLAS_CONST void *Y, OPENBLAS_CONST blasint incY, + void *A, OPENBLAS_CONST blasint lda); +void scipy_cblas_zher264_(OPENBLAS_CONST enum CBLAS_ORDER order, + OPENBLAS_CONST enum CBLAS_UPLO Uplo, + OPENBLAS_CONST blasint N, OPENBLAS_CONST void *alpha, + OPENBLAS_CONST void *X, OPENBLAS_CONST blasint incX, + OPENBLAS_CONST void *Y, OPENBLAS_CONST blasint incY, + void *A, OPENBLAS_CONST blasint lda); + +void scipy_cblas_sgbmv64_(OPENBLAS_CONST enum CBLAS_ORDER order, + OPENBLAS_CONST enum CBLAS_TRANSPOSE TransA, + OPENBLAS_CONST blasint M, OPENBLAS_CONST blasint N, + OPENBLAS_CONST blasint KL, OPENBLAS_CONST blasint KU, + OPENBLAS_CONST float alpha, OPENBLAS_CONST float *A, + OPENBLAS_CONST blasint lda, OPENBLAS_CONST float *X, + OPENBLAS_CONST blasint incX, + OPENBLAS_CONST float beta, float *Y, + OPENBLAS_CONST blasint incY); +void scipy_cblas_dgbmv64_(OPENBLAS_CONST enum CBLAS_ORDER order, + OPENBLAS_CONST enum CBLAS_TRANSPOSE TransA, + OPENBLAS_CONST blasint M, OPENBLAS_CONST blasint N, + OPENBLAS_CONST blasint KL, OPENBLAS_CONST blasint KU, + OPENBLAS_CONST double alpha, OPENBLAS_CONST double *A, + OPENBLAS_CONST blasint lda, OPENBLAS_CONST double *X, + OPENBLAS_CONST blasint incX, + OPENBLAS_CONST double beta, double *Y, + OPENBLAS_CONST blasint incY); +void scipy_cblas_cgbmv64_(OPENBLAS_CONST enum CBLAS_ORDER order, + OPENBLAS_CONST enum CBLAS_TRANSPOSE TransA, + OPENBLAS_CONST blasint M, OPENBLAS_CONST blasint N, + OPENBLAS_CONST blasint KL, OPENBLAS_CONST blasint KU, + OPENBLAS_CONST void *alpha, OPENBLAS_CONST void *A, + OPENBLAS_CONST blasint lda, OPENBLAS_CONST void *X, + OPENBLAS_CONST blasint incX, + OPENBLAS_CONST void *beta, void *Y, + OPENBLAS_CONST blasint incY); +void scipy_cblas_zgbmv64_(OPENBLAS_CONST enum CBLAS_ORDER order, + OPENBLAS_CONST enum CBLAS_TRANSPOSE TransA, + OPENBLAS_CONST blasint M, OPENBLAS_CONST blasint N, + OPENBLAS_CONST blasint KL, OPENBLAS_CONST blasint KU, + OPENBLAS_CONST void *alpha, OPENBLAS_CONST void *A, + OPENBLAS_CONST blasint lda, OPENBLAS_CONST void *X, + OPENBLAS_CONST blasint incX, + OPENBLAS_CONST void *beta, void *Y, + OPENBLAS_CONST blasint incY); + +void scipy_cblas_ssbmv64_(OPENBLAS_CONST enum CBLAS_ORDER order, + OPENBLAS_CONST enum CBLAS_UPLO Uplo, + OPENBLAS_CONST blasint N, OPENBLAS_CONST blasint K, + OPENBLAS_CONST float alpha, OPENBLAS_CONST float *A, + OPENBLAS_CONST blasint lda, OPENBLAS_CONST float *X, + OPENBLAS_CONST blasint incX, + OPENBLAS_CONST float beta, float *Y, + OPENBLAS_CONST blasint incY); +void scipy_cblas_dsbmv64_(OPENBLAS_CONST enum CBLAS_ORDER order, + OPENBLAS_CONST enum CBLAS_UPLO Uplo, + OPENBLAS_CONST blasint N, OPENBLAS_CONST blasint K, + OPENBLAS_CONST double alpha, OPENBLAS_CONST double *A, + OPENBLAS_CONST blasint lda, OPENBLAS_CONST double *X, + OPENBLAS_CONST blasint incX, + OPENBLAS_CONST double beta, double *Y, + OPENBLAS_CONST blasint incY); + +void scipy_cblas_stbmv64_(OPENBLAS_CONST enum CBLAS_ORDER order, + OPENBLAS_CONST enum CBLAS_UPLO Uplo, + OPENBLAS_CONST enum CBLAS_TRANSPOSE TransA, + OPENBLAS_CONST enum CBLAS_DIAG Diag, + OPENBLAS_CONST blasint N, OPENBLAS_CONST blasint K, + OPENBLAS_CONST float *A, OPENBLAS_CONST blasint lda, + float *X, OPENBLAS_CONST blasint incX); +void scipy_cblas_dtbmv64_(OPENBLAS_CONST enum CBLAS_ORDER order, + OPENBLAS_CONST enum CBLAS_UPLO Uplo, + OPENBLAS_CONST enum CBLAS_TRANSPOSE TransA, + OPENBLAS_CONST enum CBLAS_DIAG Diag, + OPENBLAS_CONST blasint N, OPENBLAS_CONST blasint K, + OPENBLAS_CONST double *A, OPENBLAS_CONST blasint lda, + double *X, OPENBLAS_CONST blasint incX); +void scipy_cblas_ctbmv64_(OPENBLAS_CONST enum CBLAS_ORDER order, + OPENBLAS_CONST enum CBLAS_UPLO Uplo, + OPENBLAS_CONST enum CBLAS_TRANSPOSE TransA, + OPENBLAS_CONST enum CBLAS_DIAG Diag, + OPENBLAS_CONST blasint N, OPENBLAS_CONST blasint K, + OPENBLAS_CONST void *A, OPENBLAS_CONST blasint lda, + void *X, OPENBLAS_CONST blasint incX); +void scipy_cblas_ztbmv64_(OPENBLAS_CONST enum CBLAS_ORDER order, + OPENBLAS_CONST enum CBLAS_UPLO Uplo, + OPENBLAS_CONST enum CBLAS_TRANSPOSE TransA, + OPENBLAS_CONST enum CBLAS_DIAG Diag, + OPENBLAS_CONST blasint N, OPENBLAS_CONST blasint K, + OPENBLAS_CONST void *A, OPENBLAS_CONST blasint lda, + void *X, OPENBLAS_CONST blasint incX); + +void scipy_cblas_stbsv64_(OPENBLAS_CONST enum CBLAS_ORDER order, + OPENBLAS_CONST enum CBLAS_UPLO Uplo, + OPENBLAS_CONST enum CBLAS_TRANSPOSE TransA, + OPENBLAS_CONST enum CBLAS_DIAG Diag, + OPENBLAS_CONST blasint N, OPENBLAS_CONST blasint K, + OPENBLAS_CONST float *A, OPENBLAS_CONST blasint lda, + float *X, OPENBLAS_CONST blasint incX); +void scipy_cblas_dtbsv64_(OPENBLAS_CONST enum CBLAS_ORDER order, + OPENBLAS_CONST enum CBLAS_UPLO Uplo, + OPENBLAS_CONST enum CBLAS_TRANSPOSE TransA, + OPENBLAS_CONST enum CBLAS_DIAG Diag, + OPENBLAS_CONST blasint N, OPENBLAS_CONST blasint K, + OPENBLAS_CONST double *A, OPENBLAS_CONST blasint lda, + double *X, OPENBLAS_CONST blasint incX); +void scipy_cblas_ctbsv64_(OPENBLAS_CONST enum CBLAS_ORDER order, + OPENBLAS_CONST enum CBLAS_UPLO Uplo, + OPENBLAS_CONST enum CBLAS_TRANSPOSE TransA, + OPENBLAS_CONST enum CBLAS_DIAG Diag, + OPENBLAS_CONST blasint N, OPENBLAS_CONST blasint K, + OPENBLAS_CONST void *A, OPENBLAS_CONST blasint lda, + void *X, OPENBLAS_CONST blasint incX); +void scipy_cblas_ztbsv64_(OPENBLAS_CONST enum CBLAS_ORDER order, + OPENBLAS_CONST enum CBLAS_UPLO Uplo, + OPENBLAS_CONST enum CBLAS_TRANSPOSE TransA, + OPENBLAS_CONST enum CBLAS_DIAG Diag, + OPENBLAS_CONST blasint N, OPENBLAS_CONST blasint K, + OPENBLAS_CONST void *A, OPENBLAS_CONST blasint lda, + void *X, OPENBLAS_CONST blasint incX); + +void scipy_cblas_stpmv64_(OPENBLAS_CONST enum CBLAS_ORDER order, + OPENBLAS_CONST enum CBLAS_UPLO Uplo, + OPENBLAS_CONST enum CBLAS_TRANSPOSE TransA, + OPENBLAS_CONST enum CBLAS_DIAG Diag, + OPENBLAS_CONST blasint N, OPENBLAS_CONST float *Ap, + float *X, OPENBLAS_CONST blasint incX); +void scipy_cblas_dtpmv64_(OPENBLAS_CONST enum CBLAS_ORDER order, + OPENBLAS_CONST enum CBLAS_UPLO Uplo, + OPENBLAS_CONST enum CBLAS_TRANSPOSE TransA, + OPENBLAS_CONST enum CBLAS_DIAG Diag, + OPENBLAS_CONST blasint N, OPENBLAS_CONST double *Ap, + double *X, OPENBLAS_CONST blasint incX); +void scipy_cblas_ctpmv64_(OPENBLAS_CONST enum CBLAS_ORDER order, + OPENBLAS_CONST enum CBLAS_UPLO Uplo, + OPENBLAS_CONST enum CBLAS_TRANSPOSE TransA, + OPENBLAS_CONST enum CBLAS_DIAG Diag, + OPENBLAS_CONST blasint N, OPENBLAS_CONST void *Ap, + void *X, OPENBLAS_CONST blasint incX); +void scipy_cblas_ztpmv64_(OPENBLAS_CONST enum CBLAS_ORDER order, + OPENBLAS_CONST enum CBLAS_UPLO Uplo, + OPENBLAS_CONST enum CBLAS_TRANSPOSE TransA, + OPENBLAS_CONST enum CBLAS_DIAG Diag, + OPENBLAS_CONST blasint N, OPENBLAS_CONST void *Ap, + void *X, OPENBLAS_CONST blasint incX); + +void scipy_cblas_stpsv64_(OPENBLAS_CONST enum CBLAS_ORDER order, + OPENBLAS_CONST enum CBLAS_UPLO Uplo, + OPENBLAS_CONST enum CBLAS_TRANSPOSE TransA, + OPENBLAS_CONST enum CBLAS_DIAG Diag, + OPENBLAS_CONST blasint N, OPENBLAS_CONST float *Ap, + float *X, OPENBLAS_CONST blasint incX); +void scipy_cblas_dtpsv64_(OPENBLAS_CONST enum CBLAS_ORDER order, + OPENBLAS_CONST enum CBLAS_UPLO Uplo, + OPENBLAS_CONST enum CBLAS_TRANSPOSE TransA, + OPENBLAS_CONST enum CBLAS_DIAG Diag, + OPENBLAS_CONST blasint N, OPENBLAS_CONST double *Ap, + double *X, OPENBLAS_CONST blasint incX); +void scipy_cblas_ctpsv64_(OPENBLAS_CONST enum CBLAS_ORDER order, + OPENBLAS_CONST enum CBLAS_UPLO Uplo, + OPENBLAS_CONST enum CBLAS_TRANSPOSE TransA, + OPENBLAS_CONST enum CBLAS_DIAG Diag, + OPENBLAS_CONST blasint N, OPENBLAS_CONST void *Ap, + void *X, OPENBLAS_CONST blasint incX); +void scipy_cblas_ztpsv64_(OPENBLAS_CONST enum CBLAS_ORDER order, + OPENBLAS_CONST enum CBLAS_UPLO Uplo, + OPENBLAS_CONST enum CBLAS_TRANSPOSE TransA, + OPENBLAS_CONST enum CBLAS_DIAG Diag, + OPENBLAS_CONST blasint N, OPENBLAS_CONST void *Ap, + void *X, OPENBLAS_CONST blasint incX); + +void scipy_cblas_ssymv64_(OPENBLAS_CONST enum CBLAS_ORDER order, + OPENBLAS_CONST enum CBLAS_UPLO Uplo, + OPENBLAS_CONST blasint N, OPENBLAS_CONST float alpha, + OPENBLAS_CONST float *A, OPENBLAS_CONST blasint lda, + OPENBLAS_CONST float *X, OPENBLAS_CONST blasint incX, + OPENBLAS_CONST float beta, float *Y, + OPENBLAS_CONST blasint incY); +void scipy_cblas_dsymv64_(OPENBLAS_CONST enum CBLAS_ORDER order, + OPENBLAS_CONST enum CBLAS_UPLO Uplo, + OPENBLAS_CONST blasint N, OPENBLAS_CONST double alpha, + OPENBLAS_CONST double *A, OPENBLAS_CONST blasint lda, + OPENBLAS_CONST double *X, OPENBLAS_CONST blasint incX, + OPENBLAS_CONST double beta, double *Y, + OPENBLAS_CONST blasint incY); +void scipy_cblas_chemv64_(OPENBLAS_CONST enum CBLAS_ORDER order, + OPENBLAS_CONST enum CBLAS_UPLO Uplo, + OPENBLAS_CONST blasint N, OPENBLAS_CONST void *alpha, + OPENBLAS_CONST void *A, OPENBLAS_CONST blasint lda, + OPENBLAS_CONST void *X, OPENBLAS_CONST blasint incX, + OPENBLAS_CONST void *beta, void *Y, + OPENBLAS_CONST blasint incY); +void scipy_cblas_zhemv64_(OPENBLAS_CONST enum CBLAS_ORDER order, + OPENBLAS_CONST enum CBLAS_UPLO Uplo, + OPENBLAS_CONST blasint N, OPENBLAS_CONST void *alpha, + OPENBLAS_CONST void *A, OPENBLAS_CONST blasint lda, + OPENBLAS_CONST void *X, OPENBLAS_CONST blasint incX, + OPENBLAS_CONST void *beta, void *Y, + OPENBLAS_CONST blasint incY); + +void scipy_cblas_sspmv64_(OPENBLAS_CONST enum CBLAS_ORDER order, + OPENBLAS_CONST enum CBLAS_UPLO Uplo, + OPENBLAS_CONST blasint N, OPENBLAS_CONST float alpha, + OPENBLAS_CONST float *Ap, OPENBLAS_CONST float *X, + OPENBLAS_CONST blasint incX, + OPENBLAS_CONST float beta, float *Y, + OPENBLAS_CONST blasint incY); +void scipy_cblas_dspmv64_(OPENBLAS_CONST enum CBLAS_ORDER order, + OPENBLAS_CONST enum CBLAS_UPLO Uplo, + OPENBLAS_CONST blasint N, OPENBLAS_CONST double alpha, + OPENBLAS_CONST double *Ap, OPENBLAS_CONST double *X, + OPENBLAS_CONST blasint incX, + OPENBLAS_CONST double beta, double *Y, + OPENBLAS_CONST blasint incY); + +void scipy_cblas_sspr64_(OPENBLAS_CONST enum CBLAS_ORDER order, + OPENBLAS_CONST enum CBLAS_UPLO Uplo, + OPENBLAS_CONST blasint N, OPENBLAS_CONST float alpha, + OPENBLAS_CONST float *X, OPENBLAS_CONST blasint incX, + float *Ap); +void scipy_cblas_dspr64_(OPENBLAS_CONST enum CBLAS_ORDER order, + OPENBLAS_CONST enum CBLAS_UPLO Uplo, + OPENBLAS_CONST blasint N, OPENBLAS_CONST double alpha, + OPENBLAS_CONST double *X, OPENBLAS_CONST blasint incX, + double *Ap); + +void scipy_cblas_chpr64_(OPENBLAS_CONST enum CBLAS_ORDER order, + OPENBLAS_CONST enum CBLAS_UPLO Uplo, + OPENBLAS_CONST blasint N, OPENBLAS_CONST float alpha, + OPENBLAS_CONST void *X, OPENBLAS_CONST blasint incX, + void *A); +void scipy_cblas_zhpr64_(OPENBLAS_CONST enum CBLAS_ORDER order, + OPENBLAS_CONST enum CBLAS_UPLO Uplo, + OPENBLAS_CONST blasint N, OPENBLAS_CONST double alpha, + OPENBLAS_CONST void *X, OPENBLAS_CONST blasint incX, + void *A); + +void scipy_cblas_sspr264_(OPENBLAS_CONST enum CBLAS_ORDER order, + OPENBLAS_CONST enum CBLAS_UPLO Uplo, + OPENBLAS_CONST blasint N, OPENBLAS_CONST float alpha, + OPENBLAS_CONST float *X, OPENBLAS_CONST blasint incX, + OPENBLAS_CONST float *Y, OPENBLAS_CONST blasint incY, + float *A); +void scipy_cblas_dspr264_(OPENBLAS_CONST enum CBLAS_ORDER order, + OPENBLAS_CONST enum CBLAS_UPLO Uplo, + OPENBLAS_CONST blasint N, OPENBLAS_CONST double alpha, + OPENBLAS_CONST double *X, OPENBLAS_CONST blasint incX, + OPENBLAS_CONST double *Y, OPENBLAS_CONST blasint incY, + double *A); +void scipy_cblas_chpr264_(OPENBLAS_CONST enum CBLAS_ORDER order, + OPENBLAS_CONST enum CBLAS_UPLO Uplo, + OPENBLAS_CONST blasint N, OPENBLAS_CONST void *alpha, + OPENBLAS_CONST void *X, OPENBLAS_CONST blasint incX, + OPENBLAS_CONST void *Y, OPENBLAS_CONST blasint incY, + void *Ap); +void scipy_cblas_zhpr264_(OPENBLAS_CONST enum CBLAS_ORDER order, + OPENBLAS_CONST enum CBLAS_UPLO Uplo, + OPENBLAS_CONST blasint N, OPENBLAS_CONST void *alpha, + OPENBLAS_CONST void *X, OPENBLAS_CONST blasint incX, + OPENBLAS_CONST void *Y, OPENBLAS_CONST blasint incY, + void *Ap); + +void scipy_cblas_chbmv64_(OPENBLAS_CONST enum CBLAS_ORDER order, + OPENBLAS_CONST enum CBLAS_UPLO Uplo, + OPENBLAS_CONST blasint N, OPENBLAS_CONST blasint K, + OPENBLAS_CONST void *alpha, OPENBLAS_CONST void *A, + OPENBLAS_CONST blasint lda, OPENBLAS_CONST void *X, + OPENBLAS_CONST blasint incX, + OPENBLAS_CONST void *beta, void *Y, + OPENBLAS_CONST blasint incY); +void scipy_cblas_zhbmv64_(OPENBLAS_CONST enum CBLAS_ORDER order, + OPENBLAS_CONST enum CBLAS_UPLO Uplo, + OPENBLAS_CONST blasint N, OPENBLAS_CONST blasint K, + OPENBLAS_CONST void *alpha, OPENBLAS_CONST void *A, + OPENBLAS_CONST blasint lda, OPENBLAS_CONST void *X, + OPENBLAS_CONST blasint incX, + OPENBLAS_CONST void *beta, void *Y, + OPENBLAS_CONST blasint incY); + +void scipy_cblas_chpmv64_(OPENBLAS_CONST enum CBLAS_ORDER order, + OPENBLAS_CONST enum CBLAS_UPLO Uplo, + OPENBLAS_CONST blasint N, OPENBLAS_CONST void *alpha, + OPENBLAS_CONST void *Ap, OPENBLAS_CONST void *X, + OPENBLAS_CONST blasint incX, + OPENBLAS_CONST void *beta, void *Y, + OPENBLAS_CONST blasint incY); +void scipy_cblas_zhpmv64_(OPENBLAS_CONST enum CBLAS_ORDER order, + OPENBLAS_CONST enum CBLAS_UPLO Uplo, + OPENBLAS_CONST blasint N, OPENBLAS_CONST void *alpha, + OPENBLAS_CONST void *Ap, OPENBLAS_CONST void *X, + OPENBLAS_CONST blasint incX, + OPENBLAS_CONST void *beta, void *Y, + OPENBLAS_CONST blasint incY); + +void scipy_cblas_sgemm64_(OPENBLAS_CONST enum CBLAS_ORDER Order, + OPENBLAS_CONST enum CBLAS_TRANSPOSE TransA, + OPENBLAS_CONST enum CBLAS_TRANSPOSE TransB, + OPENBLAS_CONST blasint M, OPENBLAS_CONST blasint N, + OPENBLAS_CONST blasint K, OPENBLAS_CONST float alpha, + OPENBLAS_CONST float *A, OPENBLAS_CONST blasint lda, + OPENBLAS_CONST float *B, OPENBLAS_CONST blasint ldb, + OPENBLAS_CONST float beta, float *C, + OPENBLAS_CONST blasint ldc); +void scipy_cblas_dgemm64_(OPENBLAS_CONST enum CBLAS_ORDER Order, + OPENBLAS_CONST enum CBLAS_TRANSPOSE TransA, + OPENBLAS_CONST enum CBLAS_TRANSPOSE TransB, + OPENBLAS_CONST blasint M, OPENBLAS_CONST blasint N, + OPENBLAS_CONST blasint K, OPENBLAS_CONST double alpha, + OPENBLAS_CONST double *A, OPENBLAS_CONST blasint lda, + OPENBLAS_CONST double *B, OPENBLAS_CONST blasint ldb, + OPENBLAS_CONST double beta, double *C, + OPENBLAS_CONST blasint ldc); +void scipy_cblas_cgemm64_(OPENBLAS_CONST enum CBLAS_ORDER Order, + OPENBLAS_CONST enum CBLAS_TRANSPOSE TransA, + OPENBLAS_CONST enum CBLAS_TRANSPOSE TransB, + OPENBLAS_CONST blasint M, OPENBLAS_CONST blasint N, + OPENBLAS_CONST blasint K, OPENBLAS_CONST void *alpha, + OPENBLAS_CONST void *A, OPENBLAS_CONST blasint lda, + OPENBLAS_CONST void *B, OPENBLAS_CONST blasint ldb, + OPENBLAS_CONST void *beta, void *C, + OPENBLAS_CONST blasint ldc); +void scipy_cblas_cgemm3m64_(OPENBLAS_CONST enum CBLAS_ORDER Order, + OPENBLAS_CONST enum CBLAS_TRANSPOSE TransA, + OPENBLAS_CONST enum CBLAS_TRANSPOSE TransB, + OPENBLAS_CONST blasint M, OPENBLAS_CONST blasint N, + OPENBLAS_CONST blasint K, + OPENBLAS_CONST void *alpha, OPENBLAS_CONST void *A, + OPENBLAS_CONST blasint lda, OPENBLAS_CONST void *B, + OPENBLAS_CONST blasint ldb, + OPENBLAS_CONST void *beta, void *C, + OPENBLAS_CONST blasint ldc); +void scipy_cblas_zgemm64_(OPENBLAS_CONST enum CBLAS_ORDER Order, + OPENBLAS_CONST enum CBLAS_TRANSPOSE TransA, + OPENBLAS_CONST enum CBLAS_TRANSPOSE TransB, + OPENBLAS_CONST blasint M, OPENBLAS_CONST blasint N, + OPENBLAS_CONST blasint K, OPENBLAS_CONST void *alpha, + OPENBLAS_CONST void *A, OPENBLAS_CONST blasint lda, + OPENBLAS_CONST void *B, OPENBLAS_CONST blasint ldb, + OPENBLAS_CONST void *beta, void *C, + OPENBLAS_CONST blasint ldc); +void scipy_cblas_zgemm3m64_(OPENBLAS_CONST enum CBLAS_ORDER Order, + OPENBLAS_CONST enum CBLAS_TRANSPOSE TransA, + OPENBLAS_CONST enum CBLAS_TRANSPOSE TransB, + OPENBLAS_CONST blasint M, OPENBLAS_CONST blasint N, + OPENBLAS_CONST blasint K, + OPENBLAS_CONST void *alpha, OPENBLAS_CONST void *A, + OPENBLAS_CONST blasint lda, OPENBLAS_CONST void *B, + OPENBLAS_CONST blasint ldb, + OPENBLAS_CONST void *beta, void *C, + OPENBLAS_CONST blasint ldc); + +void scipy_cblas_sgemmt64_(OPENBLAS_CONST enum CBLAS_ORDER Order, + OPENBLAS_CONST enum CBLAS_UPLO Uplo, + OPENBLAS_CONST enum CBLAS_TRANSPOSE TransA, + OPENBLAS_CONST enum CBLAS_TRANSPOSE TransB, + OPENBLAS_CONST blasint M, OPENBLAS_CONST blasint K, + OPENBLAS_CONST float alpha, OPENBLAS_CONST float *A, + OPENBLAS_CONST blasint lda, OPENBLAS_CONST float *B, + OPENBLAS_CONST blasint ldb, + OPENBLAS_CONST float beta, float *C, + OPENBLAS_CONST blasint ldc); +void scipy_cblas_dgemmt64_(OPENBLAS_CONST enum CBLAS_ORDER Order, + OPENBLAS_CONST enum CBLAS_UPLO Uplo, + OPENBLAS_CONST enum CBLAS_TRANSPOSE TransA, + OPENBLAS_CONST enum CBLAS_TRANSPOSE TransB, + OPENBLAS_CONST blasint M, OPENBLAS_CONST blasint K, + OPENBLAS_CONST double alpha, + OPENBLAS_CONST double *A, OPENBLAS_CONST blasint lda, + OPENBLAS_CONST double *B, OPENBLAS_CONST blasint ldb, + OPENBLAS_CONST double beta, double *C, + OPENBLAS_CONST blasint ldc); +void scipy_cblas_cgemmt64_(OPENBLAS_CONST enum CBLAS_ORDER Order, + OPENBLAS_CONST enum CBLAS_UPLO Uplo, + OPENBLAS_CONST enum CBLAS_TRANSPOSE TransA, + OPENBLAS_CONST enum CBLAS_TRANSPOSE TransB, + OPENBLAS_CONST blasint M, OPENBLAS_CONST blasint K, + OPENBLAS_CONST void *alpha, OPENBLAS_CONST void *A, + OPENBLAS_CONST blasint lda, OPENBLAS_CONST void *B, + OPENBLAS_CONST blasint ldb, + OPENBLAS_CONST void *beta, void *C, + OPENBLAS_CONST blasint ldc); +void scipy_cblas_zgemmt64_(OPENBLAS_CONST enum CBLAS_ORDER Order, + OPENBLAS_CONST enum CBLAS_UPLO Uplo, + OPENBLAS_CONST enum CBLAS_TRANSPOSE TransA, + OPENBLAS_CONST enum CBLAS_TRANSPOSE TransB, + OPENBLAS_CONST blasint M, OPENBLAS_CONST blasint K, + OPENBLAS_CONST void *alpha, OPENBLAS_CONST void *A, + OPENBLAS_CONST blasint lda, OPENBLAS_CONST void *B, + OPENBLAS_CONST blasint ldb, + OPENBLAS_CONST void *beta, void *C, + OPENBLAS_CONST blasint ldc); + +void scipy_cblas_ssymm64_(OPENBLAS_CONST enum CBLAS_ORDER Order, + OPENBLAS_CONST enum CBLAS_SIDE Side, + OPENBLAS_CONST enum CBLAS_UPLO Uplo, + OPENBLAS_CONST blasint M, OPENBLAS_CONST blasint N, + OPENBLAS_CONST float alpha, OPENBLAS_CONST float *A, + OPENBLAS_CONST blasint lda, OPENBLAS_CONST float *B, + OPENBLAS_CONST blasint ldb, OPENBLAS_CONST float beta, + float *C, OPENBLAS_CONST blasint ldc); +void scipy_cblas_dsymm64_(OPENBLAS_CONST enum CBLAS_ORDER Order, + OPENBLAS_CONST enum CBLAS_SIDE Side, + OPENBLAS_CONST enum CBLAS_UPLO Uplo, + OPENBLAS_CONST blasint M, OPENBLAS_CONST blasint N, + OPENBLAS_CONST double alpha, OPENBLAS_CONST double *A, + OPENBLAS_CONST blasint lda, OPENBLAS_CONST double *B, + OPENBLAS_CONST blasint ldb, + OPENBLAS_CONST double beta, double *C, + OPENBLAS_CONST blasint ldc); +void scipy_cblas_csymm64_(OPENBLAS_CONST enum CBLAS_ORDER Order, + OPENBLAS_CONST enum CBLAS_SIDE Side, + OPENBLAS_CONST enum CBLAS_UPLO Uplo, + OPENBLAS_CONST blasint M, OPENBLAS_CONST blasint N, + OPENBLAS_CONST void *alpha, OPENBLAS_CONST void *A, + OPENBLAS_CONST blasint lda, OPENBLAS_CONST void *B, + OPENBLAS_CONST blasint ldb, OPENBLAS_CONST void *beta, + void *C, OPENBLAS_CONST blasint ldc); +void scipy_cblas_zsymm64_(OPENBLAS_CONST enum CBLAS_ORDER Order, + OPENBLAS_CONST enum CBLAS_SIDE Side, + OPENBLAS_CONST enum CBLAS_UPLO Uplo, + OPENBLAS_CONST blasint M, OPENBLAS_CONST blasint N, + OPENBLAS_CONST void *alpha, OPENBLAS_CONST void *A, + OPENBLAS_CONST blasint lda, OPENBLAS_CONST void *B, + OPENBLAS_CONST blasint ldb, OPENBLAS_CONST void *beta, + void *C, OPENBLAS_CONST blasint ldc); + +void scipy_cblas_ssyrk64_(OPENBLAS_CONST enum CBLAS_ORDER Order, + OPENBLAS_CONST enum CBLAS_UPLO Uplo, + OPENBLAS_CONST enum CBLAS_TRANSPOSE Trans, + OPENBLAS_CONST blasint N, OPENBLAS_CONST blasint K, + OPENBLAS_CONST float alpha, OPENBLAS_CONST float *A, + OPENBLAS_CONST blasint lda, OPENBLAS_CONST float beta, + float *C, OPENBLAS_CONST blasint ldc); +void scipy_cblas_dsyrk64_(OPENBLAS_CONST enum CBLAS_ORDER Order, + OPENBLAS_CONST enum CBLAS_UPLO Uplo, + OPENBLAS_CONST enum CBLAS_TRANSPOSE Trans, + OPENBLAS_CONST blasint N, OPENBLAS_CONST blasint K, + OPENBLAS_CONST double alpha, OPENBLAS_CONST double *A, + OPENBLAS_CONST blasint lda, + OPENBLAS_CONST double beta, double *C, + OPENBLAS_CONST blasint ldc); +void scipy_cblas_csyrk64_(OPENBLAS_CONST enum CBLAS_ORDER Order, + OPENBLAS_CONST enum CBLAS_UPLO Uplo, + OPENBLAS_CONST enum CBLAS_TRANSPOSE Trans, + OPENBLAS_CONST blasint N, OPENBLAS_CONST blasint K, + OPENBLAS_CONST void *alpha, OPENBLAS_CONST void *A, + OPENBLAS_CONST blasint lda, OPENBLAS_CONST void *beta, + void *C, OPENBLAS_CONST blasint ldc); +void scipy_cblas_zsyrk64_(OPENBLAS_CONST enum CBLAS_ORDER Order, + OPENBLAS_CONST enum CBLAS_UPLO Uplo, + OPENBLAS_CONST enum CBLAS_TRANSPOSE Trans, + OPENBLAS_CONST blasint N, OPENBLAS_CONST blasint K, + OPENBLAS_CONST void *alpha, OPENBLAS_CONST void *A, + OPENBLAS_CONST blasint lda, OPENBLAS_CONST void *beta, + void *C, OPENBLAS_CONST blasint ldc); + +void scipy_cblas_ssyr2k64_(OPENBLAS_CONST enum CBLAS_ORDER Order, + OPENBLAS_CONST enum CBLAS_UPLO Uplo, + OPENBLAS_CONST enum CBLAS_TRANSPOSE Trans, + OPENBLAS_CONST blasint N, OPENBLAS_CONST blasint K, + OPENBLAS_CONST float alpha, OPENBLAS_CONST float *A, + OPENBLAS_CONST blasint lda, OPENBLAS_CONST float *B, + OPENBLAS_CONST blasint ldb, + OPENBLAS_CONST float beta, float *C, + OPENBLAS_CONST blasint ldc); +void scipy_cblas_dsyr2k64_(OPENBLAS_CONST enum CBLAS_ORDER Order, + OPENBLAS_CONST enum CBLAS_UPLO Uplo, + OPENBLAS_CONST enum CBLAS_TRANSPOSE Trans, + OPENBLAS_CONST blasint N, OPENBLAS_CONST blasint K, + OPENBLAS_CONST double alpha, + OPENBLAS_CONST double *A, OPENBLAS_CONST blasint lda, + OPENBLAS_CONST double *B, OPENBLAS_CONST blasint ldb, + OPENBLAS_CONST double beta, double *C, + OPENBLAS_CONST blasint ldc); +void scipy_cblas_csyr2k64_(OPENBLAS_CONST enum CBLAS_ORDER Order, + OPENBLAS_CONST enum CBLAS_UPLO Uplo, + OPENBLAS_CONST enum CBLAS_TRANSPOSE Trans, + OPENBLAS_CONST blasint N, OPENBLAS_CONST blasint K, + OPENBLAS_CONST void *alpha, OPENBLAS_CONST void *A, + OPENBLAS_CONST blasint lda, OPENBLAS_CONST void *B, + OPENBLAS_CONST blasint ldb, + OPENBLAS_CONST void *beta, void *C, + OPENBLAS_CONST blasint ldc); +void scipy_cblas_zsyr2k64_(OPENBLAS_CONST enum CBLAS_ORDER Order, + OPENBLAS_CONST enum CBLAS_UPLO Uplo, + OPENBLAS_CONST enum CBLAS_TRANSPOSE Trans, + OPENBLAS_CONST blasint N, OPENBLAS_CONST blasint K, + OPENBLAS_CONST void *alpha, OPENBLAS_CONST void *A, + OPENBLAS_CONST blasint lda, OPENBLAS_CONST void *B, + OPENBLAS_CONST blasint ldb, + OPENBLAS_CONST void *beta, void *C, + OPENBLAS_CONST blasint ldc); + +void scipy_cblas_strmm64_(OPENBLAS_CONST enum CBLAS_ORDER Order, + OPENBLAS_CONST enum CBLAS_SIDE Side, + OPENBLAS_CONST enum CBLAS_UPLO Uplo, + OPENBLAS_CONST enum CBLAS_TRANSPOSE TransA, + OPENBLAS_CONST enum CBLAS_DIAG Diag, + OPENBLAS_CONST blasint M, OPENBLAS_CONST blasint N, + OPENBLAS_CONST float alpha, OPENBLAS_CONST float *A, + OPENBLAS_CONST blasint lda, float *B, + OPENBLAS_CONST blasint ldb); +void scipy_cblas_dtrmm64_(OPENBLAS_CONST enum CBLAS_ORDER Order, + OPENBLAS_CONST enum CBLAS_SIDE Side, + OPENBLAS_CONST enum CBLAS_UPLO Uplo, + OPENBLAS_CONST enum CBLAS_TRANSPOSE TransA, + OPENBLAS_CONST enum CBLAS_DIAG Diag, + OPENBLAS_CONST blasint M, OPENBLAS_CONST blasint N, + OPENBLAS_CONST double alpha, OPENBLAS_CONST double *A, + OPENBLAS_CONST blasint lda, double *B, + OPENBLAS_CONST blasint ldb); +void scipy_cblas_ctrmm64_(OPENBLAS_CONST enum CBLAS_ORDER Order, + OPENBLAS_CONST enum CBLAS_SIDE Side, + OPENBLAS_CONST enum CBLAS_UPLO Uplo, + OPENBLAS_CONST enum CBLAS_TRANSPOSE TransA, + OPENBLAS_CONST enum CBLAS_DIAG Diag, + OPENBLAS_CONST blasint M, OPENBLAS_CONST blasint N, + OPENBLAS_CONST void *alpha, OPENBLAS_CONST void *A, + OPENBLAS_CONST blasint lda, void *B, + OPENBLAS_CONST blasint ldb); +void scipy_cblas_ztrmm64_(OPENBLAS_CONST enum CBLAS_ORDER Order, + OPENBLAS_CONST enum CBLAS_SIDE Side, + OPENBLAS_CONST enum CBLAS_UPLO Uplo, + OPENBLAS_CONST enum CBLAS_TRANSPOSE TransA, + OPENBLAS_CONST enum CBLAS_DIAG Diag, + OPENBLAS_CONST blasint M, OPENBLAS_CONST blasint N, + OPENBLAS_CONST void *alpha, OPENBLAS_CONST void *A, + OPENBLAS_CONST blasint lda, void *B, + OPENBLAS_CONST blasint ldb); + +void scipy_cblas_strsm64_(OPENBLAS_CONST enum CBLAS_ORDER Order, + OPENBLAS_CONST enum CBLAS_SIDE Side, + OPENBLAS_CONST enum CBLAS_UPLO Uplo, + OPENBLAS_CONST enum CBLAS_TRANSPOSE TransA, + OPENBLAS_CONST enum CBLAS_DIAG Diag, + OPENBLAS_CONST blasint M, OPENBLAS_CONST blasint N, + OPENBLAS_CONST float alpha, OPENBLAS_CONST float *A, + OPENBLAS_CONST blasint lda, float *B, + OPENBLAS_CONST blasint ldb); +void scipy_cblas_dtrsm64_(OPENBLAS_CONST enum CBLAS_ORDER Order, + OPENBLAS_CONST enum CBLAS_SIDE Side, + OPENBLAS_CONST enum CBLAS_UPLO Uplo, + OPENBLAS_CONST enum CBLAS_TRANSPOSE TransA, + OPENBLAS_CONST enum CBLAS_DIAG Diag, + OPENBLAS_CONST blasint M, OPENBLAS_CONST blasint N, + OPENBLAS_CONST double alpha, OPENBLAS_CONST double *A, + OPENBLAS_CONST blasint lda, double *B, + OPENBLAS_CONST blasint ldb); +void scipy_cblas_ctrsm64_(OPENBLAS_CONST enum CBLAS_ORDER Order, + OPENBLAS_CONST enum CBLAS_SIDE Side, + OPENBLAS_CONST enum CBLAS_UPLO Uplo, + OPENBLAS_CONST enum CBLAS_TRANSPOSE TransA, + OPENBLAS_CONST enum CBLAS_DIAG Diag, + OPENBLAS_CONST blasint M, OPENBLAS_CONST blasint N, + OPENBLAS_CONST void *alpha, OPENBLAS_CONST void *A, + OPENBLAS_CONST blasint lda, void *B, + OPENBLAS_CONST blasint ldb); +void scipy_cblas_ztrsm64_(OPENBLAS_CONST enum CBLAS_ORDER Order, + OPENBLAS_CONST enum CBLAS_SIDE Side, + OPENBLAS_CONST enum CBLAS_UPLO Uplo, + OPENBLAS_CONST enum CBLAS_TRANSPOSE TransA, + OPENBLAS_CONST enum CBLAS_DIAG Diag, + OPENBLAS_CONST blasint M, OPENBLAS_CONST blasint N, + OPENBLAS_CONST void *alpha, OPENBLAS_CONST void *A, + OPENBLAS_CONST blasint lda, void *B, + OPENBLAS_CONST blasint ldb); + +void scipy_cblas_chemm64_(OPENBLAS_CONST enum CBLAS_ORDER Order, + OPENBLAS_CONST enum CBLAS_SIDE Side, + OPENBLAS_CONST enum CBLAS_UPLO Uplo, + OPENBLAS_CONST blasint M, OPENBLAS_CONST blasint N, + OPENBLAS_CONST void *alpha, OPENBLAS_CONST void *A, + OPENBLAS_CONST blasint lda, OPENBLAS_CONST void *B, + OPENBLAS_CONST blasint ldb, OPENBLAS_CONST void *beta, + void *C, OPENBLAS_CONST blasint ldc); +void scipy_cblas_zhemm64_(OPENBLAS_CONST enum CBLAS_ORDER Order, + OPENBLAS_CONST enum CBLAS_SIDE Side, + OPENBLAS_CONST enum CBLAS_UPLO Uplo, + OPENBLAS_CONST blasint M, OPENBLAS_CONST blasint N, + OPENBLAS_CONST void *alpha, OPENBLAS_CONST void *A, + OPENBLAS_CONST blasint lda, OPENBLAS_CONST void *B, + OPENBLAS_CONST blasint ldb, OPENBLAS_CONST void *beta, + void *C, OPENBLAS_CONST blasint ldc); + +void scipy_cblas_cherk64_(OPENBLAS_CONST enum CBLAS_ORDER Order, + OPENBLAS_CONST enum CBLAS_UPLO Uplo, + OPENBLAS_CONST enum CBLAS_TRANSPOSE Trans, + OPENBLAS_CONST blasint N, OPENBLAS_CONST blasint K, + OPENBLAS_CONST float alpha, OPENBLAS_CONST void *A, + OPENBLAS_CONST blasint lda, OPENBLAS_CONST float beta, + void *C, OPENBLAS_CONST blasint ldc); +void scipy_cblas_zherk64_(OPENBLAS_CONST enum CBLAS_ORDER Order, + OPENBLAS_CONST enum CBLAS_UPLO Uplo, + OPENBLAS_CONST enum CBLAS_TRANSPOSE Trans, + OPENBLAS_CONST blasint N, OPENBLAS_CONST blasint K, + OPENBLAS_CONST double alpha, OPENBLAS_CONST void *A, + OPENBLAS_CONST blasint lda, + OPENBLAS_CONST double beta, void *C, + OPENBLAS_CONST blasint ldc); + +void scipy_cblas_cher2k64_(OPENBLAS_CONST enum CBLAS_ORDER Order, + OPENBLAS_CONST enum CBLAS_UPLO Uplo, + OPENBLAS_CONST enum CBLAS_TRANSPOSE Trans, + OPENBLAS_CONST blasint N, OPENBLAS_CONST blasint K, + OPENBLAS_CONST void *alpha, OPENBLAS_CONST void *A, + OPENBLAS_CONST blasint lda, OPENBLAS_CONST void *B, + OPENBLAS_CONST blasint ldb, + OPENBLAS_CONST float beta, void *C, + OPENBLAS_CONST blasint ldc); +void scipy_cblas_zher2k64_(OPENBLAS_CONST enum CBLAS_ORDER Order, + OPENBLAS_CONST enum CBLAS_UPLO Uplo, + OPENBLAS_CONST enum CBLAS_TRANSPOSE Trans, + OPENBLAS_CONST blasint N, OPENBLAS_CONST blasint K, + OPENBLAS_CONST void *alpha, OPENBLAS_CONST void *A, + OPENBLAS_CONST blasint lda, OPENBLAS_CONST void *B, + OPENBLAS_CONST blasint ldb, + OPENBLAS_CONST double beta, void *C, + OPENBLAS_CONST blasint ldc); + +void scipy_cblas_xerbla64_(blasint p, OPENBLAS_CONST char *rout, + OPENBLAS_CONST char *form, ...); + +/*** BLAS extensions ***/ + +void scipy_cblas_saxpby64_(OPENBLAS_CONST blasint n, OPENBLAS_CONST float alpha, + OPENBLAS_CONST float *x, OPENBLAS_CONST blasint incx, + OPENBLAS_CONST float beta, float *y, + OPENBLAS_CONST blasint incy); + +void scipy_cblas_daxpby64_(OPENBLAS_CONST blasint n, + OPENBLAS_CONST double alpha, + OPENBLAS_CONST double *x, + OPENBLAS_CONST blasint incx, + OPENBLAS_CONST double beta, double *y, + OPENBLAS_CONST blasint incy); + +void scipy_cblas_caxpby64_(OPENBLAS_CONST blasint n, OPENBLAS_CONST void *alpha, + OPENBLAS_CONST void *x, OPENBLAS_CONST blasint incx, + OPENBLAS_CONST void *beta, void *y, + OPENBLAS_CONST blasint incy); + +void scipy_cblas_zaxpby64_(OPENBLAS_CONST blasint n, OPENBLAS_CONST void *alpha, + OPENBLAS_CONST void *x, OPENBLAS_CONST blasint incx, + OPENBLAS_CONST void *beta, void *y, + OPENBLAS_CONST blasint incy); + +void scipy_cblas_somatcopy64_(OPENBLAS_CONST enum CBLAS_ORDER CORDER, + OPENBLAS_CONST enum CBLAS_TRANSPOSE CTRANS, + OPENBLAS_CONST blasint crows, + OPENBLAS_CONST blasint ccols, + OPENBLAS_CONST float calpha, + OPENBLAS_CONST float *a, + OPENBLAS_CONST blasint clda, float *b, + OPENBLAS_CONST blasint cldb); +void scipy_cblas_domatcopy64_(OPENBLAS_CONST enum CBLAS_ORDER CORDER, + OPENBLAS_CONST enum CBLAS_TRANSPOSE CTRANS, + OPENBLAS_CONST blasint crows, + OPENBLAS_CONST blasint ccols, + OPENBLAS_CONST double calpha, + OPENBLAS_CONST double *a, + OPENBLAS_CONST blasint clda, double *b, + OPENBLAS_CONST blasint cldb); +void scipy_cblas_comatcopy64_(OPENBLAS_CONST enum CBLAS_ORDER CORDER, + OPENBLAS_CONST enum CBLAS_TRANSPOSE CTRANS, + OPENBLAS_CONST blasint crows, + OPENBLAS_CONST blasint ccols, + OPENBLAS_CONST float *calpha, + OPENBLAS_CONST float *a, + OPENBLAS_CONST blasint clda, float *b, + OPENBLAS_CONST blasint cldb); +void scipy_cblas_zomatcopy64_(OPENBLAS_CONST enum CBLAS_ORDER CORDER, + OPENBLAS_CONST enum CBLAS_TRANSPOSE CTRANS, + OPENBLAS_CONST blasint crows, + OPENBLAS_CONST blasint ccols, + OPENBLAS_CONST double *calpha, + OPENBLAS_CONST double *a, + OPENBLAS_CONST blasint clda, double *b, + OPENBLAS_CONST blasint cldb); + +void scipy_cblas_simatcopy64_(OPENBLAS_CONST enum CBLAS_ORDER CORDER, + OPENBLAS_CONST enum CBLAS_TRANSPOSE CTRANS, + OPENBLAS_CONST blasint crows, + OPENBLAS_CONST blasint ccols, + OPENBLAS_CONST float calpha, float *a, + OPENBLAS_CONST blasint clda, + OPENBLAS_CONST blasint cldb); +void scipy_cblas_dimatcopy64_(OPENBLAS_CONST enum CBLAS_ORDER CORDER, + OPENBLAS_CONST enum CBLAS_TRANSPOSE CTRANS, + OPENBLAS_CONST blasint crows, + OPENBLAS_CONST blasint ccols, + OPENBLAS_CONST double calpha, double *a, + OPENBLAS_CONST blasint clda, + OPENBLAS_CONST blasint cldb); +void scipy_cblas_cimatcopy64_(OPENBLAS_CONST enum CBLAS_ORDER CORDER, + OPENBLAS_CONST enum CBLAS_TRANSPOSE CTRANS, + OPENBLAS_CONST blasint crows, + OPENBLAS_CONST blasint ccols, + OPENBLAS_CONST float *calpha, float *a, + OPENBLAS_CONST blasint clda, + OPENBLAS_CONST blasint cldb); +void scipy_cblas_zimatcopy64_(OPENBLAS_CONST enum CBLAS_ORDER CORDER, + OPENBLAS_CONST enum CBLAS_TRANSPOSE CTRANS, + OPENBLAS_CONST blasint crows, + OPENBLAS_CONST blasint ccols, + OPENBLAS_CONST double *calpha, double *a, + OPENBLAS_CONST blasint clda, + OPENBLAS_CONST blasint cldb); + +void scipy_cblas_sgeadd64_(OPENBLAS_CONST enum CBLAS_ORDER CORDER, + OPENBLAS_CONST blasint crows, + OPENBLAS_CONST blasint ccols, + OPENBLAS_CONST float calpha, float *a, + OPENBLAS_CONST blasint clda, + OPENBLAS_CONST float cbeta, float *c, + OPENBLAS_CONST blasint cldc); +void scipy_cblas_dgeadd64_(OPENBLAS_CONST enum CBLAS_ORDER CORDER, + OPENBLAS_CONST blasint crows, + OPENBLAS_CONST blasint ccols, + OPENBLAS_CONST double calpha, double *a, + OPENBLAS_CONST blasint clda, + OPENBLAS_CONST double cbeta, double *c, + OPENBLAS_CONST blasint cldc); +void scipy_cblas_cgeadd64_(OPENBLAS_CONST enum CBLAS_ORDER CORDER, + OPENBLAS_CONST blasint crows, + OPENBLAS_CONST blasint ccols, + OPENBLAS_CONST float *calpha, float *a, + OPENBLAS_CONST blasint clda, + OPENBLAS_CONST float *cbeta, float *c, + OPENBLAS_CONST blasint cldc); +void scipy_cblas_zgeadd64_(OPENBLAS_CONST enum CBLAS_ORDER CORDER, + OPENBLAS_CONST blasint crows, + OPENBLAS_CONST blasint ccols, + OPENBLAS_CONST double *calpha, double *a, + OPENBLAS_CONST blasint clda, + OPENBLAS_CONST double *cbeta, double *c, + OPENBLAS_CONST blasint cldc); + +/*** BFLOAT16 and INT8 extensions ***/ +/* convert float array to BFLOAT16 array by rounding */ +void scipy_cblas_sbstobf1664_(OPENBLAS_CONST blasint n, + OPENBLAS_CONST float *in, + OPENBLAS_CONST blasint incin, bfloat16 *out, + OPENBLAS_CONST blasint incout); +/* convert double array to BFLOAT16 array by rounding */ +void scipy_cblas_sbdtobf1664_(OPENBLAS_CONST blasint n, + OPENBLAS_CONST double *in, + OPENBLAS_CONST blasint incin, bfloat16 *out, + OPENBLAS_CONST blasint incout); +/* convert BFLOAT16 array to float array */ +void scipy_cblas_sbf16tos64_(OPENBLAS_CONST blasint n, + OPENBLAS_CONST bfloat16 *in, + OPENBLAS_CONST blasint incin, float *out, + OPENBLAS_CONST blasint incout); +/* convert BFLOAT16 array to double array */ +void scipy_cblas_dbf16tod64_(OPENBLAS_CONST blasint n, + OPENBLAS_CONST bfloat16 *in, + OPENBLAS_CONST blasint incin, double *out, + OPENBLAS_CONST blasint incout); +/* dot production of BFLOAT16 input arrays, and output as float */ +float scipy_cblas_sbdot64_(OPENBLAS_CONST blasint n, OPENBLAS_CONST bfloat16 *x, + OPENBLAS_CONST blasint incx, + OPENBLAS_CONST bfloat16 *y, + OPENBLAS_CONST blasint incy); +void scipy_cblas_sbgemv64_( + OPENBLAS_CONST enum CBLAS_ORDER order, + OPENBLAS_CONST enum CBLAS_TRANSPOSE trans, OPENBLAS_CONST blasint m, + OPENBLAS_CONST blasint n, OPENBLAS_CONST float alpha, + OPENBLAS_CONST bfloat16 *a, OPENBLAS_CONST blasint lda, + OPENBLAS_CONST bfloat16 *x, OPENBLAS_CONST blasint incx, + OPENBLAS_CONST float beta, float *y, OPENBLAS_CONST blasint incy); + +void scipy_cblas_sbgemm64_(OPENBLAS_CONST enum CBLAS_ORDER Order, + OPENBLAS_CONST enum CBLAS_TRANSPOSE TransA, + OPENBLAS_CONST enum CBLAS_TRANSPOSE TransB, + OPENBLAS_CONST blasint M, OPENBLAS_CONST blasint N, + OPENBLAS_CONST blasint K, OPENBLAS_CONST float alpha, + OPENBLAS_CONST bfloat16 *A, + OPENBLAS_CONST blasint lda, + OPENBLAS_CONST bfloat16 *B, + OPENBLAS_CONST blasint ldb, + OPENBLAS_CONST float beta, float *C, + OPENBLAS_CONST blasint ldc); +} +/* } VENDORED HEADER */ + +#else +#define BLAS_MANGLE(s) s #if defined(PYTHRAN_BLAS_ATLAS) || defined(PYTHRAN_BLAS_SATLAS) extern "C" { #endif @@ -19,6 +1299,7 @@ extern "C" { #if defined(PYTHRAN_BLAS_ATLAS) || defined(PYTHRAN_BLAS_SATLAS) } #endif +#endif PYTHONIC_NS_BEGIN @@ -83,7 +1364,8 @@ namespace numpy float>::type dot(E const &e, F const &f) { - return cblas_sdot(e.size(), blas_buffer(e), 1, blas_buffer(f), 1); + return BLAS_MANGLE(cblas_sdot)(e.size(), blas_buffer(e), 1, blas_buffer(f), + 1); } template @@ -95,7 +1377,8 @@ namespace numpy double>::type dot(E const &e, F const &f) { - return cblas_ddot(e.size(), blas_buffer(e), 1, blas_buffer(f), 1); + return BLAS_MANGLE(cblas_ddot)(e.size(), blas_buffer(e), 1, blas_buffer(f), + 1); } template @@ -108,7 +1391,8 @@ namespace numpy dot(E const &e, F const &f) { std::complex out; - cblas_cdotu_sub(e.size(), blas_buffer(e), 1, blas_buffer(f), 1, &out); + BLAS_MANGLE(cblas_cdotu_sub) + (e.size(), blas_buffer(e), 1, blas_buffer(f), 1, &out); return out; } @@ -122,7 +1406,8 @@ namespace numpy dot(E const &e, F const &f) { std::complex out; - cblas_zdotu_sub(e.size(), blas_buffer(e), 1, blas_buffer(f), 1, &out); + BLAS_MANGLE(cblas_zdotu_sub) + (e.size(), blas_buffer(e), 1, blas_buffer(f), 1, &out); return out; } @@ -131,8 +1416,8 @@ namespace numpy #define MV_DEF(T, L) \ inline void mv(int m, int n, T *A, T *B, T *C) \ { \ - cblas_##L##gemv(CblasRowMajor, CblasNoTrans, n, m, 1, A, m, B, 1, 0, C, \ - 1); \ + BLAS_MANGLE(cblas_##L##gemv) \ + (CblasRowMajor, CblasNoTrans, n, m, 1, A, m, B, 1, 0, C, 1); \ } MV_DEF(double, d) @@ -143,7 +1428,8 @@ namespace numpy #define TV_DEF(T, L) \ inline void tv(int m, int n, T *A, T *B, T *C) \ { \ - cblas_##L##gemv(CblasRowMajor, CblasTrans, m, n, 1, A, n, B, 1, 0, C, 1); \ + BLAS_MANGLE(cblas_##L##gemv) \ + (CblasRowMajor, CblasTrans, m, n, 1, A, n, B, 1, 0, C, 1); \ } TV_DEF(double, d) @@ -155,8 +1441,9 @@ namespace numpy inline void mv(int m, int n, T *A, T *B, T *C) \ { \ T alpha = 1, beta = 0; \ - cblas_##L##gemv(CblasRowMajor, CblasNoTrans, n, m, (K *)&alpha, (K *)A, m, \ - (K *)B, 1, (K *)&beta, (K *)C, 1); \ + BLAS_MANGLE(cblas_##L##gemv) \ + (CblasRowMajor, CblasNoTrans, n, m, (K *)&alpha, (K *)A, m, (K *)B, 1, \ + (K *)&beta, (K *)C, 1); \ } MV_DEF(std::complex, float, c) MV_DEF(std::complex, double, z) @@ -195,7 +1482,8 @@ namespace numpy #define VM_DEF(T, L) \ inline void vm(int m, int n, T *A, T *B, T *C) \ { \ - cblas_##L##gemv(CblasRowMajor, CblasTrans, n, m, 1, A, m, B, 1, 0, C, 1); \ + BLAS_MANGLE(cblas_##L##gemv) \ + (CblasRowMajor, CblasTrans, n, m, 1, A, m, B, 1, 0, C, 1); \ } VM_DEF(double, d) @@ -205,8 +1493,8 @@ namespace numpy #define VT_DEF(T, L) \ inline void vt(int m, int n, T *A, T *B, T *C) \ { \ - cblas_##L##gemv(CblasRowMajor, CblasNoTrans, m, n, 1, A, n, B, 1, 0, C, \ - 1); \ + BLAS_MANGLE(cblas_##L##gemv) \ + (CblasRowMajor, CblasNoTrans, m, n, 1, A, n, B, 1, 0, C, 1); \ } VT_DEF(double, d) @@ -217,8 +1505,9 @@ namespace numpy inline void vm(int m, int n, T *A, T *B, T *C) \ { \ T alpha = 1, beta = 0; \ - cblas_##L##gemv(CblasRowMajor, CblasTrans, n, m, (K *)&alpha, (K *)A, m, \ - (K *)B, 1, (K *)&beta, (K *)C, 1); \ + BLAS_MANGLE(cblas_##L##gemv) \ + (CblasRowMajor, CblasTrans, n, m, (K *)&alpha, (K *)A, m, (K *)B, 1, \ + (K *)&beta, (K *)C, 1); \ } VM_DEF(std::complex, float, c) VM_DEF(std::complex, double, z) @@ -358,8 +1647,9 @@ namespace numpy #define MM_DEF(T, L) \ inline void mm(int m, int n, int k, T *A, T *B, T *C) \ { \ - cblas_##L##gemm(CblasRowMajor, CblasNoTrans, CblasNoTrans, m, n, k, 1, A, \ - k, B, n, 0, C, n); \ + BLAS_MANGLE(cblas_##L##gemm) \ + (CblasRowMajor, CblasNoTrans, CblasNoTrans, m, n, k, 1, A, k, B, n, 0, C, \ + n); \ } MM_DEF(double, d) MM_DEF(float, s) @@ -368,8 +1658,9 @@ namespace numpy inline void mm(int m, int n, int k, T *A, T *B, T *C) \ { \ T alpha = 1, beta = 0; \ - cblas_##L##gemm(CblasRowMajor, CblasNoTrans, CblasNoTrans, m, n, k, \ - (K *)&alpha, (K *)A, k, (K *)B, n, (K *)&beta, (K *)C, n); \ + BLAS_MANGLE(cblas_##L##gemm) \ + (CblasRowMajor, CblasNoTrans, CblasNoTrans, m, n, k, (K *)&alpha, (K *)A, \ + k, (K *)B, n, (K *)&beta, (K *)C, n); \ } MM_DEF(std::complex, float, c) MM_DEF(std::complex, double, z) @@ -409,8 +1700,9 @@ namespace numpy #define TM_DEF(T, L) \ inline void tm(int m, int n, int k, T *A, T *B, T *C) \ { \ - cblas_##L##gemm(CblasRowMajor, CblasTrans, CblasNoTrans, m, n, k, 1, A, m, \ - B, n, 0, C, n); \ + BLAS_MANGLE(cblas_##L##gemm) \ + (CblasRowMajor, CblasTrans, CblasNoTrans, m, n, k, 1, A, m, B, n, 0, C, \ + n); \ } TM_DEF(double, d) TM_DEF(float, s) @@ -419,8 +1711,9 @@ namespace numpy inline void tm(int m, int n, int k, T *A, T *B, T *C) \ { \ T alpha = 1, beta = 0; \ - cblas_##L##gemm(CblasRowMajor, CblasTrans, CblasNoTrans, m, n, k, \ - (K *)&alpha, (K *)A, m, (K *)B, n, (K *)&beta, (K *)C, n); \ + BLAS_MANGLE(cblas_##L##gemm) \ + (CblasRowMajor, CblasTrans, CblasNoTrans, m, n, k, (K *)&alpha, (K *)A, m, \ + (K *)B, n, (K *)&beta, (K *)C, n); \ } TM_DEF(std::complex, float, c) TM_DEF(std::complex, double, z) @@ -446,8 +1739,9 @@ namespace numpy #define MT_DEF(T, L) \ inline void mt(int m, int n, int k, T *A, T *B, T *C) \ { \ - cblas_##L##gemm(CblasRowMajor, CblasNoTrans, CblasTrans, m, n, k, 1, A, k, \ - B, k, 0, C, n); \ + BLAS_MANGLE(cblas_##L##gemm) \ + (CblasRowMajor, CblasNoTrans, CblasTrans, m, n, k, 1, A, k, B, k, 0, C, \ + n); \ } MT_DEF(double, d) MT_DEF(float, s) @@ -456,8 +1750,9 @@ namespace numpy inline void mt(int m, int n, int k, T *A, T *B, T *C) \ { \ T alpha = 1, beta = 0; \ - cblas_##L##gemm(CblasRowMajor, CblasNoTrans, CblasTrans, m, n, k, \ - (K *)&alpha, (K *)A, k, (K *)B, k, (K *)&beta, (K *)C, n); \ + BLAS_MANGLE(cblas_##L##gemm) \ + (CblasRowMajor, CblasNoTrans, CblasTrans, m, n, k, (K *)&alpha, (K *)A, k, \ + (K *)B, k, (K *)&beta, (K *)C, n); \ } MT_DEF(std::complex, float, c) MT_DEF(std::complex, double, z) @@ -483,8 +1778,8 @@ namespace numpy #define TT_DEF(T, L) \ inline void tt(int m, int n, int k, T *A, T *B, T *C) \ { \ - cblas_##L##gemm(CblasRowMajor, CblasTrans, CblasTrans, m, n, k, 1, A, m, \ - B, k, 0, C, n); \ + BLAS_MANGLE(cblas_##L##gemm) \ + (CblasRowMajor, CblasTrans, CblasTrans, m, n, k, 1, A, m, B, k, 0, C, n); \ } TT_DEF(double, d) TT_DEF(float, s) @@ -493,8 +1788,9 @@ namespace numpy inline void tt(int m, int n, int k, T *A, T *B, T *C) \ { \ T alpha = 1, beta = 0; \ - cblas_##L##gemm(CblasRowMajor, CblasTrans, CblasTrans, m, n, k, \ - (K *)&alpha, (K *)A, m, (K *)B, k, (K *)&beta, (K *)C, n); \ + BLAS_MANGLE(cblas_##L##gemm) \ + (CblasRowMajor, CblasTrans, CblasTrans, m, n, k, (K *)&alpha, (K *)A, m, \ + (K *)B, k, (K *)&beta, (K *)C, n); \ } TT_DEF(std::complex, float, c) TT_DEF(std::complex, double, z) @@ -601,4 +1897,6 @@ namespace numpy } // namespace numpy PYTHONIC_NS_END +#undef BLAS_MANGLE + #endif