1#!/usr/local/bin/python3.8
2# -*- coding: utf-8 -*-
3
4import re
5from setuptools import setup
6
7
8# PyFR version
9vfile = open('pyfr/_version.py').read()
10vsrch = re.search(r"^__version__ = ['\"]([^'\"]*)['\"]", vfile, re.M)
11
12if vsrch:
13    version = vsrch.group(1)
14else:
15    print('Unable to find a version string in pyfr/_version.py')
16
17# Modules
18modules = [
19    'pyfr.backends',
20    'pyfr.backends.base',
21    'pyfr.backends.cuda',
22    'pyfr.backends.cuda.kernels',
23    'pyfr.backends.hip',
24    'pyfr.backends.hip.kernels',
25    'pyfr.backends.opencl',
26    'pyfr.backends.opencl.kernels',
27    'pyfr.backends.openmp',
28    'pyfr.backends.openmp.kernels',
29    'pyfr.integrators',
30    'pyfr.integrators.dual',
31    'pyfr.integrators.dual.phys',
32    'pyfr.integrators.dual.pseudo',
33    'pyfr.integrators.dual.pseudo.kernels',
34    'pyfr.integrators.std',
35    'pyfr.integrators.std.kernels',
36    'pyfr.plugins',
37    'pyfr.quadrules',
38    'pyfr.readers',
39    'pyfr.partitioners',
40    'pyfr.solvers',
41    'pyfr.solvers.aceuler',
42    'pyfr.solvers.aceuler.kernels',
43    'pyfr.solvers.aceuler.kernels.bcs',
44    'pyfr.solvers.aceuler.kernels.rsolvers',
45    'pyfr.solvers.acnavstokes',
46    'pyfr.solvers.acnavstokes.kernels',
47    'pyfr.solvers.acnavstokes.kernels.bcs',
48    'pyfr.solvers.base',
49    'pyfr.solvers.baseadvec',
50    'pyfr.solvers.baseadvec.kernels',
51    'pyfr.solvers.baseadvecdiff',
52    'pyfr.solvers.baseadvecdiff.kernels',
53    'pyfr.solvers.euler',
54    'pyfr.solvers.euler.kernels',
55    'pyfr.solvers.euler.kernels.bcs',
56    'pyfr.solvers.euler.kernels.rsolvers',
57    'pyfr.solvers.navstokes',
58    'pyfr.solvers.navstokes.kernels',
59    'pyfr.solvers.navstokes.kernels.bcs',
60    'pyfr.writers'
61]
62
63# Tests
64tests = [
65    'pyfr.tests'
66]
67
68# Data
69package_data = {
70    'pyfr.backends.cuda.kernels': ['*.mako'],
71    'pyfr.backends.hip.kernels': ['*.mako'],
72    'pyfr.backends.opencl.kernels': ['*.mako'],
73    'pyfr.backends.openmp.kernels': ['*.mako'],
74    'pyfr.integrators.dual.pseudo.kernels': ['*.mako'],
75    'pyfr.integrators.std.kernels': ['*.mako'],
76    'pyfr.integrators': ['schemes/*.txt'],
77    'pyfr.quadrules': [
78        'hex/*.txt',
79        'line/*.txt',
80        'pri/*.txt',
81        'pyr/*.txt',
82        'quad/*.txt',
83        'tet/*.txt',
84        'tri/*.txt'
85    ],
86    'pyfr.solvers.aceuler.kernels': ['*.mako'],
87    'pyfr.solvers.aceuler.kernels.bcs': ['*.mako'],
88    'pyfr.solvers.aceuler.kernels.rsolvers': ['*.mako'],
89    'pyfr.solvers.acnavstokes.kernels': ['*.mako'],
90    'pyfr.solvers.acnavstokes.kernels.bcs': ['*.mako'],
91    'pyfr.solvers.baseadvec.kernels': ['*.mako'],
92    'pyfr.solvers.baseadvecdiff.kernels': ['*.mako'],
93    'pyfr.solvers.euler.kernels': ['*.mako'],
94    'pyfr.solvers.euler.kernels.bcs': ['*.mako'],
95    'pyfr.solvers.euler.kernels.rsolvers': ['*.mako'],
96    'pyfr.solvers.navstokes.kernels': ['*.mako'],
97    'pyfr.solvers.navstokes.kernels.bcs': ['*.mako'],
98    'pyfr.tests': ['*.npz']
99}
100
101# Additional data
102data_files = [
103    ('', ['pyfr/__main__.py'])
104]
105
106# Hard dependencies
107install_requires = [
108    'appdirs >= 1.4.0',
109    'gimmik >= 2.0',
110    'h5py >= 2.10',
111    'mako >= 1.0.0',
112    'mpi4py >= 3.0',
113    'numpy >= 1.20',
114    'pytools >= 2016.2.1'
115]
116
117# Soft dependencies
118extras_require = {
119    'opencl': ['pyopencl >= 2015.2.4']
120}
121
122# Scripts
123console_scripts = [
124    'pyfr = pyfr.__main__:main'
125]
126
127# Info
128classifiers = [
129    'License :: OSI Approved :: BSD License',
130    'Programming Language :: Python',
131    'Programming Language :: Python :: 3.9',
132    'Programming Language :: Python :: 3.10',
133    'Topic :: Scientific/Engineering'
134]
135
136long_description = '''PyFR is an open-source Python based framework for
137solving advection-diffusion type problems on streaming architectures
138using the Flux Reconstruction approach of Huynh. The framework is
139designed to solve a range of governing systems on mixed unstructured
140grids containing various element types. It is also designed to target a
141range of hardware platforms via use of an in-built domain specific
142language derived from the Mako templating engine.'''
143
144setup(name='pyfr',
145      version=version,
146      description='Flux Reconstruction in Python',
147      long_description=long_description,
148      author='Imperial College London',
149      author_email='info@pyfr.org',
150      url='http://www.pyfr.org/',
151      license='BSD',
152      keywords='Math',
153      packages=['pyfr'] + modules + tests,
154      package_data=package_data,
155      data_files=data_files,
156      entry_points={'console_scripts': console_scripts},
157      python_requires='>=3.8',
158      install_requires=install_requires,
159      extras_require=extras_require,
160      classifiers=classifiers
161)
162