From 113b4b2e59d7ce3c87332a01193550fc7d5d99b4 Mon Sep 17 00:00:00 2001 From: Thomas Robitaille Date: Tue, 23 Aug 2022 17:01:23 +0100 Subject: [PATCH 1/5] Experiment with limited API --- reproject/spherical_intersect/setup_package.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/reproject/spherical_intersect/setup_package.py b/reproject/spherical_intersect/setup_package.py index 0fa4d6b53..560071a95 100644 --- a/reproject/spherical_intersect/setup_package.py +++ b/reproject/spherical_intersect/setup_package.py @@ -23,7 +23,10 @@ def get_extensions(): if int(os.environ.get("DEBUG_OVERLAP_AREA", 0)): define_macros = [("DEBUG_OVERLAP_AREA", 1)] else: - define_macros = None + define_macros = [] + + define_macros.append(('CYTHON_LIMITED_API', '0x030800f0')) + define_macros.append(('Py_LIMITED_API', '0x030800f0')) extension = Extension( name="reproject.spherical_intersect._overlap", @@ -33,6 +36,7 @@ def get_extensions(): language="c", extra_compile_args=["-O2"], define_macros=define_macros, + py_limited_api=True, ) return [extension] From dad6162a699457597a2fd012d6d100f0982f4467 Mon Sep 17 00:00:00 2001 From: Thomas Robitaille Date: Tue, 12 Sep 2023 17:15:38 +0100 Subject: [PATCH 2/5] Added a setup_package.py for adaptive --- reproject/adaptive/setup_package.py | 31 +++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 reproject/adaptive/setup_package.py diff --git a/reproject/adaptive/setup_package.py b/reproject/adaptive/setup_package.py new file mode 100644 index 000000000..56d559eef --- /dev/null +++ b/reproject/adaptive/setup_package.py @@ -0,0 +1,31 @@ +import os + +import numpy as np +from setuptools import Extension + + +def get_extensions(): + libraries = [] + + sources = [] + sources.append(os.path.join(REPROJECT_ROOT, "deforest.pyx")) + + include_dirs = [np.get_include()] + + define_macros = [] + + define_macros.append(("CYTHON_LIMITED_API", "0x030800f0")) + define_macros.append(("Py_LIMITED_API", "0x030800f0")) + + extension = Extension( + name="reproject.adaptive.deforest", + sources=sources, + include_dirs=include_dirs, + libraries=libraries, + language="c", + extra_compile_args=["-O2"], + define_macros=define_macros, + py_limited_api=True, + ) + + return [extension] From feba19331c6431abca4351ac7a93dc79a331bb9c Mon Sep 17 00:00:00 2001 From: Thomas Robitaille Date: Sun, 5 Jan 2025 22:31:32 +0000 Subject: [PATCH 3/5] Use Cython 3.1.0a1 --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index 509aca3d7..d08a03f27 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -48,7 +48,7 @@ requires = ["setuptools", "setuptools_scm", "extension-helpers==1.*", "numpy>=2.0.0rc1", - "cython>=3.0,<3.1"] + "cython==3.1.0a1"] build-backend = 'setuptools.build_meta' [tool.setuptools] From e3893c8d613f8449b28fc8fe80fc27f77e320717 Mon Sep 17 00:00:00 2001 From: Thomas Robitaille Date: Mon, 6 Jan 2025 11:07:18 +0000 Subject: [PATCH 4/5] Try fork of Cython which allows cimport of cpython --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index d08a03f27..bc23836b5 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -48,7 +48,7 @@ requires = ["setuptools", "setuptools_scm", "extension-helpers==1.*", "numpy>=2.0.0rc1", - "cython==3.1.0a1"] + "cython @ git+https://github.com/da-woods/cython@cpython-library-limited-api"] build-backend = 'setuptools.build_meta' [tool.setuptools] From a19b86ccd89cdf4b9450d7791aa51c452abe9653 Mon Sep 17 00:00:00 2001 From: Thomas Robitaille Date: Mon, 6 Jan 2025 11:43:05 +0000 Subject: [PATCH 5/5] Fix error --- reproject/adaptive/setup_package.py | 8 +++++--- reproject/spherical_intersect/setup_package.py | 4 ++-- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/reproject/adaptive/setup_package.py b/reproject/adaptive/setup_package.py index 56d559eef..5041e5348 100644 --- a/reproject/adaptive/setup_package.py +++ b/reproject/adaptive/setup_package.py @@ -3,19 +3,21 @@ import numpy as np from setuptools import Extension +ADAPTIVE_SUBPKG = os.path.dirname(__file__) + def get_extensions(): libraries = [] sources = [] - sources.append(os.path.join(REPROJECT_ROOT, "deforest.pyx")) + sources.append(os.path.join(ADAPTIVE_SUBPKG, "deforest.pyx")) include_dirs = [np.get_include()] define_macros = [] - define_macros.append(("CYTHON_LIMITED_API", "0x030800f0")) - define_macros.append(("Py_LIMITED_API", "0x030800f0")) + define_macros.append(("CYTHON_LIMITED_API", "0x030C0000")) + define_macros.append(("Py_LIMITED_API", "0x030C0000")) extension = Extension( name="reproject.adaptive.deforest", diff --git a/reproject/spherical_intersect/setup_package.py b/reproject/spherical_intersect/setup_package.py index 560071a95..6d1402c47 100644 --- a/reproject/spherical_intersect/setup_package.py +++ b/reproject/spherical_intersect/setup_package.py @@ -25,8 +25,8 @@ def get_extensions(): else: define_macros = [] - define_macros.append(('CYTHON_LIMITED_API', '0x030800f0')) - define_macros.append(('Py_LIMITED_API', '0x030800f0')) + define_macros.append(('CYTHON_LIMITED_API', '0x030C0000')) + define_macros.append(('Py_LIMITED_API', '0x030C0000')) extension = Extension( name="reproject.spherical_intersect._overlap",