From 31f782aed3de56300886dd7350f1faff657e14dd Mon Sep 17 00:00:00 2001 From: Spencer Clark Date: Sat, 29 Jul 2023 09:51:10 -0400 Subject: [PATCH] Set c_api_binop_methods compiler directive to True This retains Cython 0.x behavior for arithmetic operators for Cython >= 3.0.0. --- Changelog | 2 ++ pyproject.toml | 2 +- requirements-dev.txt | 2 +- setup.py | 9 ++++++++- 4 files changed, 12 insertions(+), 3 deletions(-) Index: cftime-1.6.2/pyproject.toml =================================================================== --- cftime-1.6.2.orig/pyproject.toml +++ cftime-1.6.2/pyproject.toml @@ -1,3 +1,3 @@ [build-system] -requires = ["setuptools>=41.2", "cython", "wheel", "oldest-supported-numpy"] +requires = ["setuptools>=41.2", "cython>=0.29.20", "wheel", "oldest-supported-numpy"] build-backend = "setuptools.build_meta" Index: cftime-1.6.2/requirements-dev.txt =================================================================== --- cftime-1.6.2.orig/requirements-dev.txt +++ cftime-1.6.2/requirements-dev.txt @@ -1,7 +1,7 @@ check-manifest coverage coveralls -cython>0.26.1 +cython>=0.29.20 pytest pytest-cov sphinx Index: cftime-1.6.2/setup.py =================================================================== --- cftime-1.6.2.orig/setup.py +++ cftime-1.6.2/setup.py @@ -16,7 +16,14 @@ except ImportError: BASEDIR = os.path.abspath(os.path.dirname(__file__)) SRCDIR = os.path.join(BASEDIR,'src') CMDS_NOCYTHONIZE = ['clean','clean_cython','sdist'] -COMPILER_DIRECTIVES = {} +COMPILER_DIRECTIVES = { + # Cython 3.0.0 changes the default of the c_api_binop_methods directive to + # False, resulting in errors in datetime and timedelta arithmetic: + # https://github.com/Unidata/cftime/issues/271. We explicitly set it to + # True to retain Cython 0.x behavior for future Cython versions. This + # directive was added in Cython version 0.29.20. + "c_api_binop_methods": True +} DEFINE_MACROS = [("NPY_NO_DEPRECATED_API", "NPY_1_7_API_VERSION")] FLAG_COVERAGE = '--cython-coverage' # custom flag enabling Cython line tracing NAME = 'cftime'