setup.py 3.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. import os
  2. import sys
  3. def configuration(parent_package='', top_path=None):
  4. from numpy.distutils.misc_util import Configuration
  5. from numpy.distutils.system_info import (
  6. get_info, system_info, lapack_opt_info, blas_opt_info)
  7. config = Configuration('linalg', parent_package, top_path)
  8. config.add_subpackage('tests')
  9. # Accelerate is buggy, disallow it. See also numpy/core/setup.py
  10. for opt_order in (blas_opt_info.blas_order, lapack_opt_info.lapack_order):
  11. if 'accelerate' in opt_order:
  12. opt_order.remove('accelerate')
  13. # Configure lapack_lite
  14. src_dir = 'lapack_lite'
  15. lapack_lite_src = [
  16. os.path.join(src_dir, 'python_xerbla.c'),
  17. os.path.join(src_dir, 'f2c_z_lapack.c'),
  18. os.path.join(src_dir, 'f2c_c_lapack.c'),
  19. os.path.join(src_dir, 'f2c_d_lapack.c'),
  20. os.path.join(src_dir, 'f2c_s_lapack.c'),
  21. os.path.join(src_dir, 'f2c_lapack.c'),
  22. os.path.join(src_dir, 'f2c_blas.c'),
  23. os.path.join(src_dir, 'f2c_config.c'),
  24. os.path.join(src_dir, 'f2c.c'),
  25. ]
  26. all_sources = config.paths(lapack_lite_src)
  27. if os.environ.get('NPY_USE_BLAS_ILP64', "0") != "0":
  28. lapack_info = get_info('lapack_ilp64_opt', 2)
  29. else:
  30. lapack_info = get_info('lapack_opt', 0) # and {}
  31. use_lapack_lite = not lapack_info
  32. if use_lapack_lite:
  33. # This makes numpy.distutils write the fact that lapack_lite
  34. # is being used to numpy.__config__
  35. class numpy_linalg_lapack_lite(system_info):
  36. def calc_info(self):
  37. info = {'language': 'c'}
  38. if sys.maxsize > 2**32:
  39. # Build lapack-lite in 64-bit integer mode.
  40. # The suffix is arbitrary (lapack_lite symbols follow it),
  41. # but use the "64_" convention here.
  42. info['define_macros'] = [
  43. ('HAVE_BLAS_ILP64', None),
  44. ('BLAS_SYMBOL_SUFFIX', '64_')
  45. ]
  46. self.set_info(**info)
  47. lapack_info = numpy_linalg_lapack_lite().get_info(2)
  48. def get_lapack_lite_sources(ext, build_dir):
  49. if use_lapack_lite:
  50. print("### Warning: Using unoptimized lapack ###")
  51. return all_sources
  52. else:
  53. if sys.platform == 'win32':
  54. print("### Warning: python_xerbla.c is disabled ###")
  55. return []
  56. return [all_sources[0]]
  57. config.add_extension(
  58. 'lapack_lite',
  59. sources=['lapack_litemodule.c', get_lapack_lite_sources],
  60. depends=['lapack_lite/f2c.h'],
  61. extra_info=lapack_info,
  62. )
  63. # umath_linalg module
  64. config.add_extension(
  65. '_umath_linalg',
  66. sources=['umath_linalg.c.src', get_lapack_lite_sources],
  67. depends=['lapack_lite/f2c.h'],
  68. extra_info=lapack_info,
  69. libraries=['npymath'],
  70. )
  71. config.add_data_files('*.pyi')
  72. return config
  73. if __name__ == '__main__':
  74. from numpy.distutils.core import setup
  75. setup(configuration=configuration)