170 lines
6.1 KiB
Python
170 lines
6.1 KiB
Python
import os
|
|
import sys
|
|
from os.path import join, dirname
|
|
from distutils.sysconfig import get_python_inc
|
|
import subprocess
|
|
import numpy
|
|
from numpy.distutils.misc_util import get_numpy_include_dirs
|
|
|
|
try:
|
|
from numpy.distutils.misc_util import get_info
|
|
except ImportError:
|
|
raise ValueError("numpy >= 1.4 is required (detected %s from %s)" %
|
|
(numpy.__version__, numpy.__file__))
|
|
|
|
|
|
def configuration(parent_package='',top_path=None):
|
|
from numpy.distutils.misc_util import Configuration
|
|
from scipy._build_utils.system_info import get_info as get_system_info
|
|
|
|
config = Configuration('special', parent_package, top_path)
|
|
|
|
define_macros = []
|
|
if sys.platform == 'win32':
|
|
# define_macros.append(('NOINFINITIES',None))
|
|
# define_macros.append(('NONANS',None))
|
|
define_macros.append(('_USE_MATH_DEFINES',None))
|
|
|
|
curdir = os.path.abspath(os.path.dirname(__file__))
|
|
python_inc_dirs = get_python_inc()
|
|
plat_specific_python_inc_dirs = get_python_inc(plat_specific=1)
|
|
inc_dirs = [get_numpy_include_dirs(), python_inc_dirs]
|
|
if python_inc_dirs != plat_specific_python_inc_dirs:
|
|
inc_dirs.append(plat_specific_python_inc_dirs)
|
|
inc_dirs.append(join(dirname(dirname(__file__)), '_lib'))
|
|
|
|
# C libraries
|
|
cephes_src = [join('cephes','*.c')]
|
|
cephes_hdr = [join('cephes', '*.h')]
|
|
config.add_library('sc_cephes',sources=cephes_src,
|
|
include_dirs=[curdir] + inc_dirs,
|
|
depends=(cephes_hdr + ['*.h']),
|
|
macros=define_macros)
|
|
|
|
# Fortran/C++ libraries
|
|
mach_src = [join('mach','*.f')]
|
|
amos_src = [join('amos','*.f')]
|
|
cdf_src = [join('cdflib','*.f')]
|
|
specfun_src = [join('specfun','*.f')]
|
|
config.add_library('sc_mach',sources=mach_src,
|
|
config_fc={'noopt':(__file__,1)})
|
|
config.add_library('sc_amos',sources=amos_src)
|
|
config.add_library('sc_cdf',sources=cdf_src)
|
|
config.add_library('sc_specfun',sources=specfun_src)
|
|
|
|
# Extension specfun
|
|
config.add_extension('specfun',
|
|
sources=['specfun.pyf'],
|
|
f2py_options=['--no-wrap-functions'],
|
|
depends=specfun_src,
|
|
define_macros=[],
|
|
libraries=['sc_specfun'])
|
|
|
|
# Extension _ufuncs
|
|
headers = ['*.h', join('cephes', '*.h')]
|
|
ufuncs_src = ['_ufuncs.c', 'sf_error.c', '_logit.c.src',
|
|
"amos_wrappers.c", "cdf_wrappers.c", "specfun_wrappers.c"]
|
|
ufuncs_dep = (
|
|
headers
|
|
+ ufuncs_src
|
|
+ amos_src
|
|
+ cephes_src
|
|
+ mach_src
|
|
+ cdf_src
|
|
+ specfun_src
|
|
)
|
|
cfg = dict(get_system_info('lapack_opt'))
|
|
cfg.setdefault('include_dirs', []).extend([curdir] + inc_dirs + [numpy.get_include()])
|
|
cfg.setdefault('libraries', []).extend(
|
|
['sc_amos', 'sc_cephes', 'sc_mach', 'sc_cdf', 'sc_specfun']
|
|
)
|
|
cfg.setdefault('define_macros', []).extend(define_macros)
|
|
config.add_extension('_ufuncs',
|
|
depends=ufuncs_dep,
|
|
sources=ufuncs_src,
|
|
extra_info=get_info("npymath"),
|
|
**cfg)
|
|
|
|
# Extension _ufuncs_cxx
|
|
ufuncs_cxx_src = ['_ufuncs_cxx.cxx', 'sf_error.c',
|
|
'_faddeeva.cxx', 'Faddeeva.cc',
|
|
'_wright.cxx', 'wright.cc']
|
|
ufuncs_cxx_dep = (headers + ufuncs_cxx_src + cephes_src
|
|
+ ['*.hh'])
|
|
config.add_extension('_ufuncs_cxx',
|
|
sources=ufuncs_cxx_src,
|
|
depends=ufuncs_cxx_dep,
|
|
include_dirs=[curdir] + inc_dirs,
|
|
define_macros=define_macros,
|
|
extra_info=get_info("npymath"))
|
|
|
|
cfg = dict(get_system_info('lapack_opt'))
|
|
config.add_extension('_ellip_harm_2',
|
|
sources=['_ellip_harm_2.c', 'sf_error.c',],
|
|
**cfg
|
|
)
|
|
|
|
# Cython API
|
|
config.add_data_files('cython_special.pxd')
|
|
|
|
cython_special_src = ['cython_special.c', 'sf_error.c', '_logit.c.src',
|
|
"amos_wrappers.c", "cdf_wrappers.c", "specfun_wrappers.c"]
|
|
cython_special_dep = (
|
|
headers
|
|
+ ufuncs_src
|
|
+ ufuncs_cxx_src
|
|
+ amos_src
|
|
+ cephes_src
|
|
+ mach_src
|
|
+ cdf_src
|
|
+ specfun_src
|
|
)
|
|
cfg = dict(get_system_info('lapack_opt'))
|
|
cfg.setdefault('include_dirs', []).extend([curdir] + inc_dirs + [numpy.get_include()])
|
|
cfg.setdefault('libraries', []).extend(
|
|
['sc_amos', 'sc_cephes', 'sc_mach', 'sc_cdf', 'sc_specfun']
|
|
)
|
|
cfg.setdefault('define_macros', []).extend(define_macros)
|
|
config.add_extension('cython_special',
|
|
depends=cython_special_dep,
|
|
sources=cython_special_src,
|
|
extra_info=get_info("npymath"),
|
|
**cfg)
|
|
|
|
# combinatorics
|
|
config.add_extension('_comb',
|
|
sources=['_comb.c'])
|
|
|
|
# testing for _round.h
|
|
config.add_extension('_test_round',
|
|
sources=['_test_round.c'],
|
|
depends=['_round.h', 'cephes/dd_idefs.h'],
|
|
include_dirs=[numpy.get_include()] + inc_dirs,
|
|
extra_info=get_info('npymath'))
|
|
|
|
config.add_data_files('tests/*.py')
|
|
config.add_data_files('tests/data/README')
|
|
|
|
# regenerate npz data files
|
|
makenpz = os.path.join(os.path.dirname(__file__),
|
|
'utils', 'makenpz.py')
|
|
data_dir = os.path.join(os.path.dirname(__file__),
|
|
'tests', 'data')
|
|
for name in ['boost', 'gsl', 'local']:
|
|
subprocess.check_call([sys.executable, makenpz,
|
|
'--use-timestamp',
|
|
os.path.join(data_dir, name)])
|
|
|
|
config.add_data_files('tests/data/*.npz')
|
|
|
|
config.add_subpackage('_precompute')
|
|
|
|
# Type stubs
|
|
config.add_data_files('*.pyi')
|
|
|
|
return config
|
|
|
|
|
|
if __name__ == '__main__':
|
|
from numpy.distutils.core import setup
|
|
setup(**configuration(top_path='').todict())
|