setup.py 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172
  1. from __future__ import division, print_function, absolute_import
  2. import os
  3. from os.path import join
  4. def configuration(parent_package='', top_path=None):
  5. from distutils.sysconfig import get_python_inc
  6. from scipy._build_utils.system_info import get_info, NotFoundError, numpy_info
  7. from numpy.distutils.misc_util import Configuration, get_numpy_include_dirs
  8. from scipy._build_utils import (get_g77_abi_wrappers, split_fortran_files)
  9. config = Configuration('linalg', parent_package, top_path)
  10. lapack_opt = get_info('lapack_opt')
  11. atlas_version = ([v[3:-3] for k, v in lapack_opt.get('define_macros', [])
  12. if k == 'ATLAS_INFO']+[None])[0]
  13. if atlas_version:
  14. print(('ATLAS version: %s' % atlas_version))
  15. # fblas:
  16. sources = ['fblas.pyf.src']
  17. sources += get_g77_abi_wrappers(lapack_opt)
  18. config.add_extension('_fblas',
  19. sources=sources,
  20. depends=['fblas_l?.pyf.src'],
  21. extra_info=lapack_opt
  22. )
  23. # flapack:
  24. sources = ['flapack.pyf.src']
  25. sources += get_g77_abi_wrappers(lapack_opt)
  26. dep_pfx = join('src', 'lapack_deprecations')
  27. deprecated_lapack_routines = [join(dep_pfx, c + 'gegv.f') for c in 'cdsz']
  28. sources += deprecated_lapack_routines
  29. config.add_extension('_flapack',
  30. sources=sources,
  31. depends=['flapack_gen.pyf.src',
  32. 'flapack_gen_banded.pyf.src',
  33. 'flapack_gen_tri.pyf.src',
  34. 'flapack_pos_def.pyf.src',
  35. 'flapack_pos_def_tri.pyf.src',
  36. 'flapack_sym_herm.pyf.src',
  37. 'flapack_other.pyf.src',
  38. 'flapack_user.pyf.src'],
  39. extra_info=lapack_opt
  40. )
  41. if atlas_version is not None:
  42. # cblas:
  43. config.add_extension('_cblas',
  44. sources=['cblas.pyf.src'],
  45. depends=['cblas.pyf.src', 'cblas_l1.pyf.src'],
  46. extra_info=lapack_opt
  47. )
  48. # clapack:
  49. config.add_extension('_clapack',
  50. sources=['clapack.pyf.src'],
  51. depends=['clapack.pyf.src'],
  52. extra_info=lapack_opt
  53. )
  54. # _flinalg:
  55. config.add_extension('_flinalg',
  56. sources=[join('src', 'det.f'), join('src', 'lu.f')],
  57. extra_info=lapack_opt
  58. )
  59. # _interpolative:
  60. routines_to_split = [
  61. 'dfftb1',
  62. 'dfftf1',
  63. 'dffti1',
  64. 'dsint1',
  65. 'dzfft1',
  66. 'id_srand',
  67. 'idd_copyints',
  68. 'idd_id2svd0',
  69. 'idd_pairsamps',
  70. 'idd_permute',
  71. 'idd_permuter',
  72. 'idd_random_transf0',
  73. 'idd_random_transf0_inv',
  74. 'idd_random_transf_init0',
  75. 'idd_subselect',
  76. 'iddp_asvd0',
  77. 'iddp_rsvd0',
  78. 'iddr_asvd0',
  79. 'iddr_rsvd0',
  80. 'idz_estrank0',
  81. 'idz_id2svd0',
  82. 'idz_permute',
  83. 'idz_permuter',
  84. 'idz_random_transf0_inv',
  85. 'idz_random_transf_init0',
  86. 'idz_random_transf_init00',
  87. 'idz_realcomp',
  88. 'idz_realcomplex',
  89. 'idz_reco',
  90. 'idz_subselect',
  91. 'idzp_aid0',
  92. 'idzp_aid1',
  93. 'idzp_asvd0',
  94. 'idzp_rsvd0',
  95. 'idzr_asvd0',
  96. 'idzr_reco',
  97. 'idzr_rsvd0',
  98. 'zfftb1',
  99. 'zfftf1',
  100. 'zffti1',
  101. ]
  102. print('Splitting linalg.interpolative Fortran source files')
  103. dirname = os.path.split(os.path.abspath(__file__))[0]
  104. fnames = split_fortran_files(join(dirname, 'src', 'id_dist', 'src'),
  105. routines_to_split)
  106. fnames = [join('src', 'id_dist', 'src', f) for f in fnames]
  107. config.add_extension('_interpolative', fnames + ["interpolative.pyf"],
  108. extra_info=lapack_opt
  109. )
  110. # _solve_toeplitz:
  111. config.add_extension('_solve_toeplitz',
  112. sources=[('_solve_toeplitz.c')],
  113. include_dirs=[get_numpy_include_dirs()])
  114. config.add_data_dir('tests')
  115. # Cython BLAS/LAPACK
  116. config.add_data_files('cython_blas.pxd')
  117. config.add_data_files('cython_lapack.pxd')
  118. sources = ['_blas_subroutine_wrappers.f', '_lapack_subroutine_wrappers.f']
  119. sources += get_g77_abi_wrappers(lapack_opt)
  120. includes = numpy_info().get_include_dirs() + [get_python_inc()]
  121. config.add_library('fwrappers', sources=sources, include_dirs=includes)
  122. config.add_extension('cython_blas',
  123. sources=['cython_blas.c'],
  124. depends=['cython_blas.pyx', 'cython_blas.pxd',
  125. 'fortran_defs.h', '_blas_subroutines.h'],
  126. include_dirs=['.'],
  127. libraries=['fwrappers'],
  128. extra_info=lapack_opt)
  129. config.add_extension('cython_lapack',
  130. sources=['cython_lapack.c'],
  131. depends=['cython_lapack.pyx', 'cython_lapack.pxd',
  132. 'fortran_defs.h', '_lapack_subroutines.h'],
  133. include_dirs=['.'],
  134. libraries=['fwrappers'],
  135. extra_info=lapack_opt)
  136. config.add_extension('_decomp_update',
  137. sources=['_decomp_update.c'])
  138. # Add any license files
  139. config.add_data_files('src/id_dist/doc/doc.tex')
  140. config.add_data_files('src/lapack_deprecations/LICENSE')
  141. return config
  142. if __name__ == '__main__':
  143. from numpy.distutils.core import setup
  144. from linalg_version import linalg_version
  145. setup(version=linalg_version,
  146. **configuration(top_path='').todict())