diff --git a/README.rst b/README.rst index aa8fc4cc75c80c422f69d33a7136921352e26120_UkVBRE1FLnJzdA==..472be668f6ce6f500d6619092229713ee7b739b3_UkVBRE1FLnJzdA== 100644 --- a/README.rst +++ b/README.rst @@ -2,5 +2,5 @@ FluidSim ======== -*Framework for studying fluid dynamics by numerical simulation.* +|release| |docs| @@ -6,5 +6,11 @@ -`Package Documentation <http://fluidsim.readthedocs.org>`__ +.. |release| image:: https://img.shields.io/pypi/v/fluidsim.svg + :target: https://pypi.python.org/pypi/fluidsim/ + :alt: Latest version + +.. |docs| image:: https://readthedocs.org/projects/fluidsim/badge/?version=latest + :target: http://fluidsim.readthedocs.org + :alt: Documentation status FluidSim is the numerically oriented package of the `FluidDyn project <http://fluiddyn.readthedocs.org>`__. The project is still in a diff --git a/config.py b/config.py index aa8fc4cc75c80c422f69d33a7136921352e26120_Y29uZmlnLnB5..472be668f6ce6f500d6619092229713ee7b739b3_Y29uZmlnLnB5 100644 --- a/config.py +++ b/config.py @@ -1,5 +1,4 @@ -""" -Script to configure before Fluidsim setup. +"""Script to configure before Fluidsim setup. Custom paths for MPI and FFTW libraries and shared objects are managed here. Provides @@ -7,9 +6,9 @@ MPI4PY : bool True if mpi4py installed and can be imported -FFTW3 : bool +FFTW3 : bool True if FFTW3 library is available FFTW3MPI : bool True if FFTW3-MPI library is available @@ -11,8 +10,8 @@ True if FFTW3 library is available FFTW3MPI : bool True if FFTW3-MPI library is available -dico_ldd : dict +dict_ldd : dict list of flags to use while building shared objects (*.so) @@ -17,5 +16,5 @@ list of flags to use while building shared objects (*.so) -dico_lib : dict +dict_lib : dict list of paths where necessary libraries can be found (eg: libmpi.so) @@ -20,6 +19,8 @@ list of paths where necessary libraries can be found (eg: libmpi.so) -dico_inc : dict - list of paths to include where necessary header files can be found (eg: mpi-compat.h, fftw3.h) +dict_inc : dict + list of paths to include where necessary header files can be found (eg: + mpi-compat.h, fftw3.h) + """ @@ -24,6 +25,8 @@ """ +from __future__ import print_function + import os import sys import subprocess @@ -26,7 +29,8 @@ import os import sys import subprocess + def check_avail_library(library_name): try: libraries = subprocess.check_output('/sbin/ldconfig -p', shell=True) @@ -38,9 +42,10 @@ return library_name in libraries -def find_library_dirs(args, library_dirs=[], debug=True, skip=True): + +def find_library_dirs(args, library_dirs=None, debug=True, skip=True): """ Takes care of non-standard library directories, instead of using LDFLAGS. Set `skip` as `True` if you do not want to use this. """ @@ -42,6 +47,9 @@ """ Takes care of non-standard library directories, instead of using LDFLAGS. Set `skip` as `True` if you do not want to use this. """ + if library_dirs is None: + library_dirs = [] + if skip: @@ -47,6 +55,6 @@ if skip: - print('* Skipping search for additional LDFLAGS: ',args) + # print('* Skipping search for additional LDFLAGS: ', args) return library_dirs for library_name in args: libso = "'lib"+library_name+".so'" @@ -49,8 +57,8 @@ return library_dirs for library_name in args: libso = "'lib"+library_name+".so'" - filter1 = " | grep " + libso + filter1 = " | grep " + libso filter2 = " | awk -F'=> ' '{print $2}'" filter3 = " | awk -F" + libso + " '{print $1}'" try: @@ -54,7 +62,8 @@ filter2 = " | awk -F'=> ' '{print $2}'" filter3 = " | awk -F" + libso + " '{print $1}'" try: - cmd = 'readlink -f $(/sbin/ldconfig -p' + filter1 + filter2 + ')' + filter3 + cmd = 'readlink -f $(/sbin/ldconfig -p' + \ + filter1 + filter2 + ')' + filter3 if debug: print(cmd) @@ -65,5 +74,5 @@ library_dirs.append(item) except subprocess.CalledProcessError: - print('* Cannot extract library directory: '+library_name) + print('* Cannot extract library directory: ' + library_name) @@ -69,4 +78,4 @@ - default_dirs = ['/usr/lib/','/usr/lib32/'] + default_dirs = ['/usr/lib/', '/usr/lib32/'] library_dirs = list(set(library_dirs) - set(default_dirs)) if debug: @@ -71,6 +80,6 @@ library_dirs = list(set(library_dirs) - set(default_dirs)) if debug: - print('LDFLAGS for ',args,' => ',library_dirs) + print('LDFLAGS for ', args, ' => ', library_dirs) return library_dirs @@ -81,5 +90,4 @@ print('* ImportError of mpi4py: no mpi extensions will be built.') else: MPI4PY = True - print('* Compiling Cython extensions with the compiler/wrapper: ') try: @@ -85,3 +93,3 @@ try: - print(os.environ["CC"]) + cc = os.environ["CC"] except KeyError: @@ -87,9 +95,10 @@ except KeyError: - os.environ["CC"] = 'mpicc' - print('mpicc') + cc = 'mpicc' + os.environ["CC"] = cc + print('* Compiling Cython extensions with the compiler/wrapper: ' + cc) FFTW3 = check_avail_library('fftw3') FFTW3MPI = check_avail_library('fftw3_mpi') # Shared libraries used while compiling shared objects keys = ['mpi', 'fftw'] @@ -90,11 +99,11 @@ FFTW3 = check_avail_library('fftw3') FFTW3MPI = check_avail_library('fftw3_mpi') # Shared libraries used while compiling shared objects keys = ['mpi', 'fftw'] -dico_ldd = dict.fromkeys(keys, []) -dico_lib = dict.fromkeys(keys, []) -dico_inc = dict.fromkeys(keys, []) +dict_ldd = dict.fromkeys(keys, []) +dict_lib = dict.fromkeys(keys, []) +dict_inc = dict.fromkeys(keys, []) if MPI4PY: @@ -99,5 +108,5 @@ if MPI4PY: - if os.environ["CC"] not in ('mpicc','cc'): - dico_ldd['mpi'] = ['mpi'] + if os.environ["CC"] not in ('mpicc', 'cc'): + dict_ldd['mpi'] = ['mpi'] @@ -103,3 +112,3 @@ - dico_lib['mpi'] = find_library_dirs(['mpi']) + dict_lib['mpi'] = find_library_dirs(['mpi']) here = os.path.abspath(os.path.dirname(__file__)) @@ -105,4 +114,4 @@ here = os.path.abspath(os.path.dirname(__file__)) - dico_inc['mpi'] = [mpi4py.get_include(), here + '/include'] + dict_inc['mpi'] = [mpi4py.get_include(), here + '/include'] if FFTW3 or FFTW3MPI: @@ -107,5 +116,5 @@ if FFTW3 or FFTW3MPI: - print('* Compiling FFTW extensions with the fftw3.h and libfftw3.so') - dico_ldd['fftw'] = ['fftw3'] + print('* Compiling FFTW extensions with the fftw3.h and libfftw3.so') + dict_ldd['fftw'] = ['fftw3'] if FFTW3MPI: @@ -111,5 +120,5 @@ if FFTW3MPI: - print('... and also fftw3_mpi.h and libfftw3_mpi.so') - dico_ldd['fftw'].append('fftw3_mpi') + print(' ... and also fftw3_mpi.h and libfftw3_mpi.so') + dict_ldd['fftw'].append('fftw3_mpi') try: @@ -114,9 +123,9 @@ try: - dico_lib['fftw'].append(os.environ['FFTW_DIR']) - dico_inc['fftw'].append(os.environ['FFTW_INC']) + dict_lib['fftw'].append(os.environ['FFTW_DIR']) + dict_inc['fftw'].append(os.environ['FFTW_INC']) except KeyError: if sys.platform == 'win32': if MPI4PY: raise ValueError( 'We have to work on this case with MPI4PY on Windows...') @@ -118,9 +127,9 @@ except KeyError: if sys.platform == 'win32': if MPI4PY: raise ValueError( 'We have to work on this case with MPI4PY on Windows...') - dico_lib['fftw'].append(r'c:\Prog\fftw-3.3.4-dll64') - dico_inc['fftw'].append(r'c:\Prog\fftw-3.3.4-dll64') + dict_lib['fftw'].append(r'c:\Prog\fftw-3.3.4-dll64') + dict_inc['fftw'].append(r'c:\Prog\fftw-3.3.4-dll64') else: @@ -125,5 +134,4 @@ else: - dico_lib['fftw'].extend(find_library_dirs('fftw3')) - dico_inc['fftw'] = [] - + dict_lib['fftw'].extend(find_library_dirs('fftw3')) + dict_inc['fftw'] = [] diff --git a/setup.py b/setup.py index aa8fc4cc75c80c422f69d33a7136921352e26120_c2V0dXAucHk=..472be668f6ce6f500d6619092229713ee7b739b3_c2V0dXAucHk= 100644 --- a/setup.py +++ b/setup.py @@ -6,5 +6,7 @@ try: from Cython.Distutils.extension import Extension from Cython.Distutils import build_ext + has_cython = True + ext_source = 'pyx' except ImportError: from setuptools import Extension @@ -9,4 +11,6 @@ except ImportError: from setuptools import Extension - from distutils.command import build_ext + from distutils.command.build_ext import build_ext + has_cython = False + ext_source = 'c' @@ -12,5 +16,3 @@ -import subprocess -import numpy as np import os import sys @@ -15,6 +17,12 @@ import os import sys -from config import MPI4PY, FFTW3, FFTW3MPI, dico_ldd, dico_lib, dico_inc +from runpy import run_path + +import numpy as np + +from config import MPI4PY, FFTW3, FFTW3MPI, dict_ldd, dict_lib, dict_inc + +print('Running fluidsim setup.py on platform ' + sys.platform) here = os.path.abspath(os.path.dirname(__file__)) if sys.version_info[:2] < (2, 7) or (3, 0) <= sys.version_info[0:2] < (3, 2): @@ -24,6 +32,6 @@ with open(os.path.join(here, 'README.rst')) as f: long_description = f.read() lines = long_description.splitlines(True) -long_description = ''.join(lines[8:]) +long_description = ''.join(lines[14:]) # Get the version from the relevant file @@ -28,7 +36,6 @@ # Get the version from the relevant file -d = {} -execfile('fluidsim/_version.py', d) +d = run_path('fluidsim/_version.py') __version__ = d['__version__'] # Get the development status from the version string @@ -41,5 +48,5 @@ ext_modules = [] -if MPI4PY and FFTW3: #..TODO: Redundant? Check. +if MPI4PY and FFTW3: # ..TODO: Redundant? Check. path_sources = 'fluidsim/operators/fft/Sources_fftw2dmpiccy' @@ -45,7 +52,8 @@ path_sources = 'fluidsim/operators/fft/Sources_fftw2dmpiccy' - include_dirs = [path_sources, np.get_include()] + dico_inc['mpi'] + dico_inc['fftw'] - libraries = dico_ldd['mpi'] + dico_ldd['fftw'] + ['m'] - library_dirs = dico_lib['mpi'] + dico_lib['fftw'] + include_dirs = [path_sources, np.get_include()] + \ + dict_inc['mpi'] + dict_inc['fftw'] + libraries = dict_ldd['mpi'] + dict_ldd['fftw'] + ['m'] + library_dirs = dict_lib['mpi'] + dict_lib['fftw'] ext_fftw2dmpiccy = Extension( 'fluidsim.operators.fft.fftw2dmpiccy', @@ -53,8 +61,8 @@ libraries=libraries, library_dirs=library_dirs, sources=[path_sources+'/libcfftw2dmpi.c', - path_sources+'/fftw2dmpiccy.pyx']) + path_sources + '/fftw2dmpiccy.' + ext_source]) ext_modules.append(ext_fftw2dmpiccy) if FFTW3: path_sources = 'fluidsim/operators/fft/Sources_fftw2dmpicy' @@ -57,10 +65,11 @@ ext_modules.append(ext_fftw2dmpiccy) if FFTW3: path_sources = 'fluidsim/operators/fft/Sources_fftw2dmpicy' - include_dirs = [path_sources, np.get_include()] + dico_inc['mpi'] + dico_inc['fftw'] - libraries = dico_ldd['mpi'] + dico_ldd['fftw'] + ['m'] - library_dirs = dico_lib['mpi'] + dico_lib['fftw'] + include_dirs = [path_sources, np.get_include()] + \ + dict_inc['mpi'] + dict_inc['fftw'] + libraries = dict_ldd['mpi'] + dict_ldd['fftw'] + ['m'] + library_dirs = dict_lib['mpi'] + dict_lib['fftw'] if FFTW3MPI: ext_fftw2dmpicy = Extension( @@ -69,7 +78,7 @@ libraries=libraries, library_dirs=library_dirs, cython_compile_time_env={'MPI4PY': MPI4PY}, - sources=[path_sources+'/fftw2dmpicy.pyx']) + sources=[path_sources+'/fftw2dmpicy.' + ext_source]) ext_modules.append(ext_fftw2dmpicy) path_sources = 'fluidsim/operators/CySources' @@ -73,9 +82,9 @@ ext_modules.append(ext_fftw2dmpicy) path_sources = 'fluidsim/operators/CySources' -include_dirs = [path_sources, np.get_include()] + dico_inc['mpi'] -libraries = dico_ldd['mpi'] + ['m'] -library_dirs = dico_lib['mpi'] +include_dirs = [path_sources, np.get_include()] + dict_inc['mpi'] +libraries = dict_ldd['mpi'] + ['m'] +library_dirs = dict_lib['mpi'] ext_operators = Extension( 'fluidsim.operators.operators', @@ -83,7 +92,7 @@ libraries=libraries, library_dirs=library_dirs, cython_compile_time_env={'MPI4PY': MPI4PY}, - sources=[path_sources+'/operators_cy.pyx']) + sources=[path_sources+'/operators_cy.' + ext_source]) ext_misc = Extension( 'fluidsim.operators.miscellaneous', @@ -91,7 +100,7 @@ libraries=libraries, library_dirs=library_dirs, cython_compile_time_env={'MPI4PY': MPI4PY}, - sources=[path_sources+'/miscellaneous_cy.pyx']) + sources=[path_sources+'/miscellaneous_cy.' + ext_source]) path_sources = 'fluidsim/base/time_stepping' @@ -102,10 +111,10 @@ np.get_include()], libraries=['m'], library_dirs=[], - sources=[path_sources+'/pseudo_spect_cy.pyx']) + sources=[path_sources+'/pseudo_spect_cy.' + ext_source]) ext_modules.extend([ ext_operators, ext_misc, ext_cyfunc]) @@ -106,10 +115,10 @@ ext_modules.extend([ ext_operators, ext_misc, ext_cyfunc]) -print('The following extensions are going to be built if necessary:\n' + +print('The following extensions could be built if necessary:\n' + ''.join([ext.name + '\n' for ext in ext_modules]))