def configuration(parent_package='',parent_path=None): from scipy_distutils.core import Extension from scipy_distutils.misc_util import get_path,dot_join,\ default_config_dict,dict_append from scipy_distutils.system_info import get_info,FFTWNotFoundError,\ DJBFFTNotFoundError package_name = 'fftpack' fftw_info = get_info('fftw') or get_info('dfftw') if not fftw_info: print FFTWNotFoundError.__doc__ djbfft_info = get_info('djbfft') if not djbfft_info: print DJBFFTNotFoundError.__doc__ #djbfft_info = None #fftw_info = None config = default_config_dict(package_name,parent_package) local_path = get_path(__name__,parent_path) test_path = os.path.join(local_path,'tests') config['packages'].append(dot_join(parent_package,package_name,'tests')) config['package_dir'][package_name+'.tests'] = test_path dfftpack = glob(os.path.join(local_path,'dfftpack','*.f')) config['fortran_libraries'].append(('dfftpack',{'sources':dfftpack})) sources = ['fftpack.pyf','src/zfft.c','src/drfft.c','src/zrfft.c', 'src/zfftnd.c'] sources = [os.path.join(local_path,x) for x in sources] ext_args = {} dict_append(ext_args, name = dot_join(parent_package,package_name,'_fftpack'), sources = sources, libraries = ['dfftpack']) if fftw_info: dict_append(ext_args,**fftw_info) if djbfft_info: dict_append(ext_args,**djbfft_info) ext = Extension(**ext_args) config['ext_modules'].append(ext) sources = ['convolve.pyf','src/convolve.c'] sources = [os.path.join(local_path,x) for x in sources] ext_args = {} dict_append(ext_args, name = dot_join(parent_package,package_name,'convolve'), sources = sources, libraries = ['dfftpack']) if fftw_info: dict_append(ext_args,**fftw_info) if djbfft_info: dict_append(ext_args,**djbfft_info) ext = Extension(**ext_args) config['ext_modules'].append(ext) return config
def configuration (parent_package=''): package = 'linalg' config = default_config_dict(package,parent_package) del config['fortran_libraries'] local_path = get_path(__name__) atlas_info = get_info('atlas_threads') if not atlas_info: atlas_info = get_info('atlas') if not atlas_info: raise AtlasNotFoundError,AtlasNotFoundError.__doc__ ext = Extension('atlas_version', sources=[os.path.join(local_path,'atlas_version.c')], libraries=[atlas_info['libraries'][-1]], library_dirs=atlas_info['library_dirs']) config['ext_modules'].append(ext) return config
def apply_backend_info(self, backend): log.info('applying backend (%s) info to extensions'\ % (backend)) backend_info = get_info(backend, notfound_action=1) if not backend_info: return extensions = [] for ext in self.extensions: ext_args = {} for a in _get_constructor_argnames(ext): ext_args[a] = copy.copy(getattr(ext, a)) dict_append(ext_args, **backend_info) new_ext = Extension(**ext_args) extensions.append(new_ext) self.extensions[:] = extensions return
def split_extension(self, ext, backend): fullname = self.get_ext_fullname(ext.name) modpath = fullname.split('.') package = '.'.join(modpath[0:-1]) name = modpath[-1] ext_args = {} for a in _get_constructor_argnames(ext): if a == 'name': ext_args[a] = dot_join(package, '_%s.%s' % (backend, name)) else: ext_args[a] = copy.copy(getattr(ext, a)) backend_info = get_info(backend, notfound_action=1) if backend_info: dict_append(ext_args, **backend_info) new_ext = Extension(**ext_args) new_ext.backend = backend return new_ext
def run_compile(): """ Do it all in one call! """ import tempfile,os,shutil i = sys.argv.index('-c') del sys.argv[i] remove_build_dir = 0 try: i = sys.argv.index('--build-dir') except ValueError: i=None if i is not None: build_dir = sys.argv[i+1] del sys.argv[i+1] del sys.argv[i] else: remove_build_dir = 1 build_dir = os.path.join(tempfile.mktemp()) sysinfo_flags = filter(re.compile(r'[-][-]link[-]').match,sys.argv[1:]) sys.argv = filter(lambda a,flags=sysinfo_flags:a not in flags,sys.argv) if sysinfo_flags: sysinfo_flags = [f[7:] for f in sysinfo_flags] f2py_flags = filter(re.compile(r'[-][-]((no[-]|)(wrap[-]functions|lower)|debug[-]capi|quiet)|[-]include').match,sys.argv[1:]) sys.argv = filter(lambda a,flags=f2py_flags:a not in flags,sys.argv) f2py_flags2 = [] fl = 0 for a in sys.argv[1:]: if a in ['only:','skip:']: fl = 1 elif a==':': fl = 0 if fl or a==':': f2py_flags2.append(a) if f2py_flags2 and f2py_flags2[-1]!=':': f2py_flags2.append(':') f2py_flags.extend(f2py_flags2) sys.argv = filter(lambda a,flags=f2py_flags2:a not in flags,sys.argv) flib_flags = filter(re.compile(r'[-][-]((f(90)?compiler([-]exec|)|compiler)=|help[-]compiler)').match,sys.argv[1:]) sys.argv = filter(lambda a,flags=flib_flags:a not in flags,sys.argv) fc_flags = filter(re.compile(r'[-][-]((f(77|90)(flags|exec)|opt|arch)=|(debug|noopt|noarch|help[-]fcompiler))').match,sys.argv[1:]) sys.argv = filter(lambda a,flags=fc_flags:a not in flags,sys.argv) if scipy_distutils_version[:5]>='0.2.2': del_list = [] for s in flib_flags: v = '--help-compiler' if s==v: nv = '--help-fcompiler' print v,'is depreciated. Use',nv,'instead.' fc_flags.append(nv) del_list.append(s) continue v = '--fcompiler=' if s[:len(v)]==v: import scipy_distutils.fcompiler allowed_keys = scipy_distutils.fcompiler.fcompiler_class.keys() nv = ov = s[len(v):].lower() if ov not in allowed_keys: vmap = {} # XXX try: nv = vmap[ov] except KeyError: if ov not in vmap.values(): print 'Unknown vendor: "%s"' % (s[len(v):]) nv = ov i = flib_flags.index(s) flib_flags[i] = '--fcompiler=' + nv continue v = '--fcompiler-exec=' if s[:len(v)]==v: fc_flags.append('--f77exec='+s[len(v):]) print v+' is depreciated. Use "%s" instead.' % (fc_flags[-1]) del_list.append(s) continue v = '--f90compiler-exec=' if s[:len(v)]==v: fc_flags.append('--f90exec='+s[len(v):]) print v+' is depreciated. Use "%s" instead.' % (fc_flags[-1]) del_list.append(s) continue for s in del_list: i = flib_flags.index(s) del flib_flags[i] assert len(flib_flags)<=2,`flib_flags` setup_flags = filter(re.compile(r'[-][-](verbose)').match,sys.argv[1:]) sys.argv = filter(lambda a,flags=setup_flags:a not in flags,sys.argv) if '--quiet' in f2py_flags: setup_flags.append('--quiet') modulename = 'untitled' sources = sys.argv[1:] if '-m' in sys.argv: i = sys.argv.index('-m') modulename = sys.argv[i+1] del sys.argv[i+1],sys.argv[i] sources = sys.argv[1:] elif scipy_distutils_version[:5]>='0.2.2': from scipy_distutils.command.build_src import get_f2py_modulename pyf_files,sources = filter_files('','[.]pyf([.]src|)',sources) sources = pyf_files + sources for f in pyf_files: modulename = get_f2py_modulename(f) if modulename: break extra_objects, sources = filter_files('','[.](o|a|so)',sources) include_dirs, sources = filter_files('-I','',sources,remove_prefix=1) library_dirs, sources = filter_files('-L','',sources,remove_prefix=1) libraries, sources = filter_files('-l','',sources,remove_prefix=1) undef_macros, sources = filter_files('-U','',sources,remove_prefix=1) define_macros, sources = filter_files('-D','',sources,remove_prefix=1) using_numarray = 0 for i in range(len(define_macros)): name_value = string.split(define_macros[i],'=',1) if len(name_value)==1: name_value.append(None) if name_value[0]=='NUMARRAY': using_numarray = 1 if len(name_value)==2: define_macros[i] = tuple(name_value) else: print 'Invalid use of -D:',name_value from scipy_distutils.system_info import get_info num_include_dir = None if using_numarray: try: import numarray n = 'numarray' p = get_prefix(numarray) import numarray.numinclude as numinclude include_dirs.append(numinclude.include_dir) except ImportError: print 'Failed to import numarray:',sys.exc_value raise ImportError,'Must have numarray installed.' num_info = get_info('numarray') else: try: import Numeric n = 'Numeric' p = get_prefix(Numeric) except ImportError: print 'Failed to import Numeric:',sys.exc_value raise ImportError,'Must have Numeric installed.' num_info = get_info('NumPy') if num_info: include_dirs.extend(num_info.get('include_dirs',[])) from scipy_distutils.core import setup,Extension ext_args = {'name':modulename,'sources':sources, 'include_dirs': include_dirs, 'library_dirs': library_dirs, 'libraries': libraries, 'define_macros': define_macros, 'undef_macros': undef_macros, 'extra_objects': extra_objects, 'f2py_options': f2py_flags, } if sysinfo_flags: from scipy_distutils.misc_util import dict_append for n in sysinfo_flags: i = get_info(n) if not i: outmess('No %s resources found in system'\ ' (try `f2py --help-link`)\n' % (`n`)) dict_append(ext_args,**i) ext = Extension(**ext_args) sys.argv = [sys.argv[0]] + setup_flags sys.argv.extend(['build', '--build-temp',build_dir, '--build-base',build_dir, '--build-platlib','.']) if fc_flags: sys.argv.extend(['config_fc']+fc_flags) if flib_flags: if scipy_distutils_version[:5]>='0.2.2': sys.argv.extend(['build_ext']+flib_flags) else: sys.argv.extend(['build_flib']+flib_flags) setup(ext_modules = [ext]) if remove_build_dir and os.path.exists(build_dir): outmess('Removing build directory %s\n'%(build_dir)) shutil.rmtree(build_dir)
def configuration(parent_package='',parent_path=None): from scipy_distutils.core import Extension from scipy_distutils.misc_util import dot_join, get_path, default_config_dict from scipy_distutils.system_info import get_info, dict_append, NotFoundError from interface_gen import generate_interface package = 'linalg' config = default_config_dict(package,parent_package) local_path = get_path(__name__,parent_path) def local_join(*paths): return os.path.join(*((local_path,)+paths)) lapack_opt = get_info('lapack_opt') if not lapack_opt: raise NotFoundError,'no lapack/blas resources found' atlas_version = ([v[3:-3] for k,v in lapack_opt.get('define_macros',[]) \ if k=='ATLAS_INFO']+[None])[0] if atlas_version: print 'ATLAS version',atlas_version target_dir = '' skip_names = {'clapack':[],'flapack':[],'cblas':[],'fblas':[]} if skip_single_routines: target_dir = 'dbl' skip_names['clapack'].extend(\ 'sgesv cgesv sgetrf cgetrf sgetrs cgetrs sgetri cgetri'\ ' sposv cposv spotrf cpotrf spotrs cpotrs spotri cpotri'\ ' slauum clauum strtri ctrtri'.split()) skip_names['flapack'].extend(skip_names['clapack']) skip_names['flapack'].extend(\ 'sgesdd cgesdd sgelss cgelss sgeqrf cgeqrf sgeev cgeev'\ ' sgegv cgegv ssyev cheev slaswp claswp sgees cgees' ' sggev cggev'.split()) skip_names['cblas'].extend('saxpy caxpy'.split()) skip_names['fblas'].extend(skip_names['cblas']) skip_names['fblas'].extend(\ 'srotg crotg srotmg srot csrot srotm sswap cswap sscal cscal'\ ' csscal scopy ccopy sdot cdotu cdotc snrm2 scnrm2 sasum scasum'\ ' isamax icamax sgemv cgemv chemv ssymv strmv ctrmv'\ ' sgemm cgemm'.split()) if using_lapack_blas: target_dir = join(target_dir,'blas') skip_names['fblas'].extend(\ 'drotmg srotmg drotm srotm'.split()) if atlas_version=='3.2.1_pre3.3.6': target_dir = join(target_dir,'atlas321') skip_names['clapack'].extend(\ 'sgetri dgetri cgetri zgetri spotri dpotri cpotri zpotri'\ ' slauum dlauum clauum zlauum strtri dtrtri ctrtri ztrtri'.split()) elif atlas_version>'3.4.0' and atlas_version<='3.5.12': skip_names['clapack'].extend('cpotrf zpotrf'.split()) def generate_pyf(extension, build_dir): name = extension.name.split('.')[-1] target = join(build_dir,target_dir,name+'.pyf') if name[0]=='c' and atlas_version is None and newer(__file__,target): f = open(target,'w') f.write('python module '+name+'\n') f.write('usercode void empty_module(void) {}\n') f.write('interface\n') f.write('subroutine empty_module()\n') f.write('intent(c) empty_module\n') f.write('end subroutine empty_module\n') f.write('end interface\nend python module'+name+'\n') f.close() return target if newer_group(extension.depends,target): generate_interface(name, extension.depends[0], target, skip_names[name]) return target # fblas: ext_args = {'name': dot_join(parent_package,package,'fblas'), 'sources': [generate_pyf, local_join('src','fblaswrap.f')], 'depends': map(local_join,['generic_fblas.pyf', 'generic_fblas1.pyf', 'generic_fblas2.pyf', 'generic_fblas3.pyf', 'interface_gen.py']) } dict_append(ext_args,**lapack_opt) ext = Extension(**ext_args) config['ext_modules'].append(ext) # cblas: ext_args = {'name': dot_join(parent_package,package,'cblas'), 'sources': [generate_pyf], 'depends': map(local_join,['generic_cblas.pyf', 'generic_cblas1.pyf', 'interface_gen.py']) } dict_append(ext_args,**lapack_opt) ext = Extension(**ext_args) config['ext_modules'].append(ext) # flapack: ext_args = {'name': dot_join(parent_package,package,'flapack'), 'sources': [generate_pyf], 'depends': map(local_join,['generic_flapack.pyf', 'flapack_user_routines.pyf', 'interface_gen.py']) } dict_append(ext_args,**lapack_opt) ext = Extension(**ext_args) config['ext_modules'].append(ext) # clapack: ext_args = {'name': dot_join(parent_package,package,'clapack'), 'sources': [generate_pyf], 'depends': map(local_join,['generic_clapack.pyf', 'interface_gen.py']) } dict_append(ext_args,**lapack_opt) ext = Extension(**ext_args) config['ext_modules'].append(ext) # _flinalg: ext_args = {'name':dot_join(parent_package,package,'_flinalg'), 'sources':[local_join('src','det.f'), local_join('src','lu.f')] } dict_append(ext_args,**lapack_opt) config['ext_modules'].append(Extension(**ext_args)) # calc_lwork: ext_args = {'name':dot_join(parent_package,package,'calc_lwork'), 'sources':[local_join('src','calc_lwork.f')], } dict_append(ext_args,**lapack_opt) config['ext_modules'].append(Extension(**ext_args)) # atlas_version: ext_args = {'name':dot_join(parent_package,package,'atlas_version'), 'sources':[os.path.join(local_path,'atlas_version.c')]} dict_append(ext_args,**lapack_opt) ext = Extension(**ext_args) config['ext_modules'].append(ext) # iterative methods methods = ['BiCGREVCOM.f.src', 'BiCGSTABREVCOM.f.src', 'CGREVCOM.f.src', 'CGSREVCOM.f.src', # 'ChebyREVCOM.f.src', 'GMRESREVCOM.f.src', # 'JacobiREVCOM.f.src', 'QMRREVCOM.f.src', # 'SORREVCOM.f.src' ] Util = ['STOPTEST2.f.src','getbreak.f.src'] sources = Util + methods + ['_iterative.pyf.src'] ext_args = { 'name': dot_join(parent_package,package,'_iterative'), 'sources': [local_join('iterative',x) for x in sources] } dict_append(ext_args, **lapack_opt) ext = Extension(**ext_args) config['ext_modules'].append(ext) return config