setup.py 2.7 KB

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