コード例 #1
0
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
コード例 #2
0
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
コード例 #3
0
 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
コード例 #4
0
 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
コード例 #5
0
ファイル: f2py2e.py プロジェクト: priyankmodiPM/GasSimulator
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)
コード例 #6
0
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