I'm trying to link my code (scipy.linalg.solve notably) to a given library like OpenBLAS.
I am using python 3.7.7 in a virtual environment:
Python 3.7.7 (default, Mar 29 2020, 18:12:06)
[Clang 11.0.3 (clang-1103.0.32.29)] on darwin
Also of note, I installed numpy and scipy into my virtual environment using pip
pip install numpy
pip install scipy
>>> scipy.__version__
'1.4.1'
>>> numpy.__version__
'1.18.0'
>>> scipy.show_config()
lapack_mkl_info:
NOT AVAILABLE
openblas_lapack_info:
libraries = ['openblas', 'openblas']
library_dirs = ['/usr/local/lib']
language = c
define_macros = [('HAVE_CBLAS', None)]
lapack_opt_info:
libraries = ['openblas', 'openblas']
library_dirs = ['/usr/local/lib']
language = c
define_macros = [('HAVE_CBLAS', None)]
blas_mkl_info:
NOT AVAILABLE
blis_info:
NOT AVAILABLE
openblas_info:
libraries = ['openblas', 'openblas']
library_dirs = ['/usr/local/lib']
language = c
define_macros = [('HAVE_CBLAS', None)]
blas_opt_info:
libraries = ['openblas', 'openblas']
library_dirs = ['/usr/local/lib']
language = c
define_macros = [('HAVE_CBLAS', None)]
>>> numpy.show_config()
lapack_mkl_info:
NOT AVAILABLE
openblas_lapack_info:
libraries = ['openblas', 'openblas']
library_dirs = ['/usr/local/lib']
language = c
define_macros = [('HAVE_CBLAS', None)]
lapack_opt_info:
libraries = ['openblas', 'openblas']
library_dirs = ['/usr/local/lib']
language = c
define_macros = [('HAVE_CBLAS', None)]
blas_mkl_info:
NOT AVAILABLE
blis_info:
NOT AVAILABLE
openblas_info:
libraries = ['openblas', 'openblas']
library_dirs = ['/usr/local/lib']
language = c
define_macros = [('HAVE_CBLAS', None)]
blas_opt_info:
libraries = ['openblas', 'openblas']
library_dirs = ['/usr/local/lib']
language = c
define_macros = [('HAVE_CBLAS', None)]
When I do:
$ brew install openblas
Warning: openblas 0.3.9 is already installed and up-to-date
I have OpenBLAS, and my scipy/numpy tells me that they are linked to it. However, when I do:
from numpy.distutils.system_info import get_info
info = get_info('blas_opt')
print(info)
I then get:
{'extra_compile_args': ['-msse3', '-I/System/Library/Frameworks/vecLib.framework/Headers'], 'extra_link_args': ['-Wl,-framework', '-Wl,Accelerate'], 'define_macros': [('NO_ATLAS_INFO', 3), ('HAVE_CBLAS', None)]}
It still tries to use the Accelerate library and not use OpenBLAS.
If I look at some links in the numpy package:
$ otool -L ~/.virtualenvs/myvenv/lib/python3.7/site-packages/numpy/core/_multiarray_umath.cpython-37m-darwin.so
/Users/myself/.virtualenvs/myvenv/lib/python3.7/site-packages/numpy/core/_multiarray_umath.cpython-37m-darwin.so:
@loader_path/../.dylibs/libopenblasp-r0.3.7.dylib (compatibility version 0.0.0, current version 0.0.0)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1252.50.4)
There it does tell me it links to OpenBLAS.
So, anyone knows what's going on here? What step do I need to take in order to use the OpenBLAS?