From c3fc825ec98b9f13ffbb67be7eb857b5e4beef26 Mon Sep 17 00:00:00 2001 From: Vahid Tavanashad Date: Wed, 12 Mar 2025 10:52:21 -0700 Subject: [PATCH 1/4] migrate from setup.py to pyproject.toml --- .github/workflows/build_pip.yaml | 6 +- .github/workflows/conda-package-cf.yml | 6 +- .github/workflows/conda-package.yml | 6 +- .gitignore | 9 +++ README.md | 4 +- pyproject.toml | 78 ++++++++++++++++++++++++++ setup.py | 77 ++++--------------------- 7 files changed, 116 insertions(+), 70 deletions(-) create mode 100644 .gitignore create mode 100644 pyproject.toml 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..de61b3c --- /dev/null +++ b/pyproject.toml @@ -0,0 +1,78 @@ +# 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.7" +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", + "Operating System :: MacOS" +] +dependencies = ["numpy >=1.16", "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",], ) From bb017430da0a2e049e8d668e2618d28e26d55878 Mon Sep 17 00:00:00 2001 From: Vahid Tavanashad Date: Thu, 13 Mar 2025 06:57:08 -0700 Subject: [PATCH 2/4] update required python version --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index de61b3c..c5a107e 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -32,7 +32,7 @@ name = "mkl_fft" dynamic = ["version"] description = "MKL-based FFT transforms for NumPy arrays" readme = { file = "README.md", content-type = "text/markdown" } -requires-python = ">=3.7" +requires-python = ">=3.9,<3.13" license = { text = "BSD" } authors = [ { name = "Intel Corporation", email = "scripting@intel.com" } From fbc3c3e3489d23f804627bb5742463b10f605942 Mon Sep 17 00:00:00 2001 From: Vahid Tavanashad Date: Thu, 13 Mar 2025 07:19:25 -0700 Subject: [PATCH 3/4] update numpy version --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index c5a107e..e515f48 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -58,7 +58,7 @@ classifiers = [ "Operating System :: Unix", "Operating System :: MacOS" ] -dependencies = ["numpy >=1.16", "mkl", "mkl-service"] +dependencies = ["numpy >=1.26.4", "mkl", "mkl-service"] [project.optional-dependencies] test = ["pytest"] From 6e2243081f99539d17128be71299547f868b7344 Mon Sep 17 00:00:00 2001 From: Vahid Tavanashad Date: Thu, 13 Mar 2025 07:24:03 -0700 Subject: [PATCH 4/4] remove infor for support of macOS --- pyproject.toml | 1 - 1 file changed, 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index e515f48..fb33340 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -56,7 +56,6 @@ classifiers = [ "Operating System :: Microsoft :: Windows", "Operating System :: POSIX", "Operating System :: Unix", - "Operating System :: MacOS" ] dependencies = ["numpy >=1.26.4", "mkl", "mkl-service"]