diff --git a/.github/workflows/build_pip.yaml b/.github/workflows/build_pip.yaml index ea262d1..d9c11e9 100644 --- a/.github/workflows/build_pip.yaml +++ b/.github/workflows/build_pip.yaml @@ -1,6 +1,10 @@ name: Editable build using pip and pre-release NumPy -on: push +on: + push: + branches: + - master + pull_request: permissions: read-all diff --git a/.github/workflows/conda-package-cf.yml b/.github/workflows/conda-package-cf.yml index 0d70ed8..611cb17 100644 --- a/.github/workflows/conda-package-cf.yml +++ b/.github/workflows/conda-package-cf.yml @@ -1,6 +1,10 @@ name: Conda package with conda-forge channel only -on: push +on: + push: + branches: + - master + pull_request: permissions: read-all diff --git a/.github/workflows/conda-package.yml b/.github/workflows/conda-package.yml index 11b1c54..39e7c10 100644 --- a/.github/workflows/conda-package.yml +++ b/.github/workflows/conda-package.yml @@ -1,6 +1,10 @@ name: Conda package -on: push +on: + push: + branches: + - master + pull_request: permissions: read-all diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..630ac69 --- /dev/null +++ b/.gitignore @@ -0,0 +1,9 @@ +_vendored/__pycache__/ +build/ +mkl_fft.egg-info/ +mkl_fft/__pycache__/ +mkl_fft/_pydfti.c +mkl_fft/_pydfti.cpython-310-x86_64-linux-gnu.so +mkl_fft/interfaces/__pycache__/ +mkl_fft/src/mklfft.c +mkl_fft/tests/__pycache__/ diff --git a/README.md b/README.md index 26c0916..8f92204 100644 --- a/README.md +++ b/README.md @@ -82,5 +82,5 @@ The package also provides `mkl_fft._numpy_fft` and `mkl_fft._scipy_fft` interfac To build ``mkl_fft`` from sources on Linux: - install a recent version of MKL, if necessary; - - execute ``source /path/to/mklroot/bin/mklvars.sh intel64`` ; - - execute ``pip install .`` + - execute ``source /path_to_oneapi/mkl/latest/env/vars.sh`` ; + - execute ``python -m pip install .`` diff --git a/pyproject.toml b/pyproject.toml new file mode 100644 index 0000000..fb33340 --- /dev/null +++ b/pyproject.toml @@ -0,0 +1,77 @@ +# Copyright (c) 2025, Intel Corporation +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# +# * Redistributions of source code must retain the above copyright notice, +# this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# * Neither the name of Intel Corporation nor the names of its contributors +# may be used to endorse or promote products derived from this software +# without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE +# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +[build-system] +requires = ["setuptools>=64", "Cython", "numpy"] +build-backend = "setuptools.build_meta" + +[project] +name = "mkl_fft" +dynamic = ["version"] +description = "MKL-based FFT transforms for NumPy arrays" +readme = { file = "README.md", content-type = "text/markdown" } +requires-python = ">=3.9,<3.13" +license = { text = "BSD" } +authors = [ + { name = "Intel Corporation", email = "scripting@intel.com" } +] +keywords = ["DFTI", "FFT", "Fourier", "MKL"] +classifiers = [ + "Development Status :: 5 - Production/Stable", + "Intended Audience :: Science/Research", + "Intended Audience :: Developers", + "License :: OSI Approved", + "Programming Language :: C", + "Programming Language :: Python", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3.9", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: 3.12", + "Programming Language :: Python :: Implementation :: CPython", + "Topic :: Software Development", + "Topic :: Scientific/Engineering", + "Operating System :: Microsoft :: Windows", + "Operating System :: POSIX", + "Operating System :: Unix", +] +dependencies = ["numpy >=1.26.4", "mkl", "mkl-service"] + +[project.optional-dependencies] +test = ["pytest"] + +[project.urls] +Homepage = "http://github.com/IntelPython/mkl_fft" +Download = "http://github.com/IntelPython/mkl_fft" + +[tool.setuptools] +packages = ["mkl_fft", "mkl_fft.interfaces"] +include-package-data = true + +[tool.setuptools.package-data] +"mkl_fft" = ["tests/*.py"] + +[tool.setuptools.dynamic] +version = {attr = "mkl_fft._version.__version__"} diff --git a/setup.py b/setup.py index 907efd8..ec78807 100644 --- a/setup.py +++ b/setup.py @@ -24,43 +24,15 @@ # OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -import io +import sys import os -import re from os.path import join import Cython.Build from setuptools import setup, Extension import numpy as np -from _vendored.conv_template import process_file as process_c_file - -with io.open('mkl_fft/_version.py', 'rt', encoding='utf8') as f: - version = re.search(r'__version__ = \'(.*?)\'', f.read()).group(1) - -with open("README.md", "r", encoding="utf-8") as file: - long_description = file.read() -VERSION = version - -CLASSIFIERS = """\ -Development Status :: 5 - Production/Stable -Intended Audience :: Science/Research -Intended Audience :: Developers -License :: OSI Approved -Programming Language :: C -Programming Language :: Python -Programming Language :: Python :: 3 -Programming Language :: Python :: 3.9 -Programming Language :: Python :: 3.10 -Programming Language :: Python :: 3.11 -Programming Language :: Python :: 3.12 -Programming Language :: Python :: Implementation :: CPython -Topic :: Software Development -Topic :: Scientific/Engineering -Operating System :: Microsoft :: Windows -Operating System :: POSIX -Operating System :: Unix -Operating System :: MacOS -""" +sys.path.insert(0, os.path.dirname(__file__)) # Ensures local imports work +from _vendored.conv_template import process_file as process_c_file def extensions(): mkl_root = os.environ.get('MKLROOT', None) @@ -80,8 +52,8 @@ def extensions(): mkl_library_dirs = mkl_info.get('library_dirs', []) mkl_libraries = mkl_info.get('libraries', ['mkl_rt']) - mklfft_templ = os.path.join("mkl_fft", "src", "mklfft.c.src") - processed_mklfft_fn = os.path.join("mkl_fft", "src", "mklfft.c") + mklfft_templ = join("mkl_fft", "src", "mklfft.c.src") + processed_mklfft_fn = join("mkl_fft", "src", "mklfft.c") src_processed = process_c_file(mklfft_templ) with open(processed_mklfft_fn, 'w') as fid: @@ -90,52 +62,27 @@ def extensions(): return [ Extension( "mkl_fft._pydfti", - [ - os.path.join("mkl_fft", "_pydfti.pyx"), - os.path.join("mkl_fft", "src", "mklfft.c"), + sources = [ + join("mkl_fft", "_pydfti.pyx"), + join("mkl_fft", "src", "mklfft.c"), ], depends = [ - os.path.join("mkl_fft", "src", 'mklfft.h'), - os.path.join("mkl_fft", "src", "multi_iter.h") + join("mkl_fft", "src", 'mklfft.h'), + join("mkl_fft", "src", "multi_iter.h") ], - include_dirs = [os.path.join("mkl_fft", "src"), np.get_include()] + mkl_include_dirs, + include_dirs = [join("mkl_fft", "src"), np.get_include()] + mkl_include_dirs, libraries = mkl_libraries, library_dirs = mkl_library_dirs, extra_compile_args = [ '-DNDEBUG', # '-ggdb', '-O0', '-Wall', '-Wextra', '-DDEBUG', ], - define_macros=[("NPY_NO_DEPRECATED_API", None), ("PY_ARRAY_UNIQUE_SYMBOL", "mkl_fft_ext")] + define_macros=[("NPY_NO_DEPRECATED_API", None), ("PY_ARRAY_UNIQUE_SYMBOL", "mkl_fft_ext")], ) ] - setup( - name = "mkl_fft", - maintainer = "Intel Corp.", - maintainer_email = "scripting@intel.com", - description = "MKL-based FFT transforms for NumPy arrays", - version = version, cmdclass={'build_ext': Cython.Build.build_ext}, - packages=[ - "mkl_fft", - "mkl_fft.interfaces", - ], - package_data={"mkl_fft": ["tests/*.py"]}, - include_package_data=True, ext_modules=extensions(), zip_safe=False, - long_description = long_description, - long_description_content_type="text/markdown", - url = "http://github.com/IntelPython/mkl_fft", - author = "Intel Corporation", - download_url = "http://github.com/IntelPython/mkl_fft", - license = "BSD", - classifiers = [_f for _f in CLASSIFIERS.split('\n') if _f], - platforms = ["Windows", "Linux", "Mac OS-X"], - test_suite = "pytest", - python_requires = '>=3.7', - setup_requires=["Cython",], - install_requires = ["numpy >=1.16", "mkl"], - keywords=["DFTI", "FFT", "Fourier", "MKL",], )