Skip to content

Bug in ATLAS version detection #14212

@adamjstewart

Description

@adamjstewart

I'm trying to build the latest numpy release on macOS with ATLAS as my BLAS/LAPACK provider but numpy fails to detect the ATLAS version correctly.

Reproducing code example:

First, I create the following site.cfg:

[atlas]
libraries = satlas
library_dirs = /Users/Adam/spack/opt/spack/darwin-mojave-x86_64/clang-10.0.1-apple/atlas-3.10.3-j53o6sg7cswtaak6duqdofi7emddfg6z/lib
rpath = /Users/Adam/spack/opt/spack/darwin-mojave-x86_64/clang-10.0.1-apple/atlas-3.10.3-j53o6sg7cswtaak6duqdofi7emddfg6z/lib
include_dirs = /Users/Adam/spack/opt/spack/darwin-mojave-x86_64/clang-10.0.1-apple/atlas-3.10.3-j53o6sg7cswtaak6duqdofi7emddfg6z/include

Then, I build numpy with:

$ python -s setup.py --no-user-cfg build
$ python -s setup.py --no-user-cfg install --prefix=/Users/Adam/spack/opt/spack/darwin-mojave-x86_64/clang-10.0.1-apple/py-numpy-1.17.0-37xrxjmnbitsruc7alrutzpvdil2xhhy --single-version-externally-managed --root=/

Error message:

blas_opt_info:
atlas_3_10_blas_threads_info:
Setting PTATLAS=ATLAS
customize UnixCCompiler
Setting PTATLAS=ATLAS
get_default_fcompiler: matching types: '['gnu95', 'nag', 'absoft', 'ibm', 'intel', 'gnu', 'g95', 'pg']'
customize Gnu95FCompiler
Found executable /Users/Adam/spack/lib/spack/env/clang/gfortran
customize Gnu95FCompiler
customize Gnu95FCompiler using config
compiling '_configtest.c':

/* This file is generated from numpy/distutils/system_info.py */
void ATL_buildinfo(void);
int main(void) {
  ATL_buildinfo();
  return 0;
}

C compiler: /Users/Adam/spack/lib/spack/env/clang/clang -Wno-unused-result -Wsign-compare -Wunreachable-code -DNDEBUG -g -fwrapv -O3 -Wall -fPIC

compile options: '-c'
clang: _configtest.c
/Users/Adam/spack/lib/spack/env/clang/clang _configtest.o -L/Users/Adam/spack/opt/spack/darwin-mojave-x86_64/clang-10.0.1-apple/atlas-3.10.3-j53o6sg7cswtaak6duqdofi7emddfg6z/lib -lsatlas -o _configtest
dyld: __dyld section not supported in /Users/Adam/spack/opt/spack/darwin-mojave-x86_64/clang-10.0.1-apple/atlas-3.10.3-j53o6sg7cswtaak6duqdofi7emddfg6z/lib/libsatlas.dylib
subprocess exited with signal 122
success!
removing: _configtest.c _configtest.o _configtest.o.d _configtest
Status: 255
Output: 
Running from numpy source directory.
Traceback (most recent call last):
  File "setup.py", line 443, in <module>
    setup_package()
  File "setup.py", line 435, in setup_package
    setup(**metadata)
  File "/private/var/folders/21/hwq39zyj4g36x6zjfyl5l8080000gn/T/Adam/spack-stage/spack-stage-y1kdwttz/spack-src/numpy/distutils/core.py", line 137, in setup
    config = configuration()
  File "setup.py", line 158, in configuration
    config.add_subpackage('numpy')
  File "/private/var/folders/21/hwq39zyj4g36x6zjfyl5l8080000gn/T/Adam/spack-stage/spack-stage-y1kdwttz/spack-src/numpy/distutils/misc_util.py", line 1035, in add_subpackage
    caller_level = 2)
  File "/private/var/folders/21/hwq39zyj4g36x6zjfyl5l8080000gn/T/Adam/spack-stage/spack-stage-y1kdwttz/spack-src/numpy/distutils/misc_util.py", line 1004, in get_subpackage
    caller_level = caller_level + 1)
  File "/private/var/folders/21/hwq39zyj4g36x6zjfyl5l8080000gn/T/Adam/spack-stage/spack-stage-y1kdwttz/spack-src/numpy/distutils/misc_util.py", line 941, in _get_configuration_from_setup_py
    config = setup_module.configuration(*args)
  File "numpy/setup.py", line 10, in configuration
    config.add_subpackage('core')
  File "/private/var/folders/21/hwq39zyj4g36x6zjfyl5l8080000gn/T/Adam/spack-stage/spack-stage-y1kdwttz/spack-src/numpy/distutils/misc_util.py", line 1035, in add_subpackage
    caller_level = 2)
  File "/private/var/folders/21/hwq39zyj4g36x6zjfyl5l8080000gn/T/Adam/spack-stage/spack-stage-y1kdwttz/spack-src/numpy/distutils/misc_util.py", line 1004, in get_subpackage
    caller_level = caller_level + 1)
  File "/private/var/folders/21/hwq39zyj4g36x6zjfyl5l8080000gn/T/Adam/spack-stage/spack-stage-y1kdwttz/spack-src/numpy/distutils/misc_util.py", line 941, in _get_configuration_from_setup_py
    config = setup_module.configuration(*args)
  File "numpy/core/setup.py", line 764, in configuration
    blas_info = get_info('blas_opt', 0)
  File "/private/var/folders/21/hwq39zyj4g36x6zjfyl5l8080000gn/T/Adam/spack-stage/spack-stage-y1kdwttz/spack-src/numpy/distutils/system_info.py", line 444, in get_info
    return cl().get_info(notfound_action)
  File "/private/var/folders/21/hwq39zyj4g36x6zjfyl5l8080000gn/T/Adam/spack-stage/spack-stage-y1kdwttz/spack-src/numpy/distutils/system_info.py", line 690, in get_info
    self.calc_info()
  File "/private/var/folders/21/hwq39zyj4g36x6zjfyl5l8080000gn/T/Adam/spack-stage/spack-stage-y1kdwttz/spack-src/numpy/distutils/system_info.py", line 1810, in calc_info
    if getattr(self, '_calc_info_{}'.format(blas))():
  File "/private/var/folders/21/hwq39zyj4g36x6zjfyl5l8080000gn/T/Adam/spack-stage/spack-stage-y1kdwttz/spack-src/numpy/distutils/system_info.py", line 1750, in _calc_info_atlas
    info = get_info('atlas_3_10_blas_threads')
  File "/private/var/folders/21/hwq39zyj4g36x6zjfyl5l8080000gn/T/Adam/spack-stage/spack-stage-y1kdwttz/spack-src/numpy/distutils/system_info.py", line 444, in get_info
    return cl().get_info(notfound_action)
  File "/private/var/folders/21/hwq39zyj4g36x6zjfyl5l8080000gn/T/Adam/spack-stage/spack-stage-y1kdwttz/spack-src/numpy/distutils/system_info.py", line 690, in get_info
    self.calc_info()
  File "/private/var/folders/21/hwq39zyj4g36x6zjfyl5l8080000gn/T/Adam/spack-stage/spack-stage-y1kdwttz/spack-src/numpy/distutils/system_info.py", line 1347, in calc_info
    atlas_version, atlas_extra_info = get_atlas_version(**atlas)
  File "/private/var/folders/21/hwq39zyj4g36x6zjfyl5l8080000gn/T/Adam/spack-stage/spack-stage-y1kdwttz/spack-src/numpy/distutils/system_info.py", line 1589, in get_atlas_version
    'ATLAS_INFO', _c_string_literal(atlas_version))
  File "/private/var/folders/21/hwq39zyj4g36x6zjfyl5l8080000gn/T/Adam/spack-stage/spack-stage-y1kdwttz/spack-src/numpy/distutils/system_info.py", line 177, in _c_string_literal
    s = s.replace('\\', r'\\')
AttributeError: 'NoneType' object has no attribute 'replace'

For whatever reason, my ATLAS version is None, not a string. Hopefully this should be an easy fix.

Numpy/Python version information:

macOS 10.14.6
Clang 10.0.1
ATLAS 3.10.3
Python 3.7.4
Setuptools 41.0.1
Numpy 1.17.0

Note that this bug only occurs on macOS or with the Clang compiler. I was able to successfully build numpy with ATLAS on CentOS 7 with GCC 4.8.5.

EDIT: I tried setting ATLAS_VERSION to 3.10.3 but that didn't work.

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions