From 544b8b3bcf1bb7ae6d185bc91a389e2c89664edf Mon Sep 17 00:00:00 2001 From: Matthew Honnibal Date: Thu, 22 May 2025 14:12:42 +0200 Subject: [PATCH 1/5] Add noexcept to support Cython3 without acquiring gil unnecessarily --- murmurhash/mrmr.pxd | 10 +++++----- murmurhash/mrmr.pyx | 20 ++++++++++---------- 2 files changed, 15 insertions(+), 15 deletions(-) diff --git a/murmurhash/mrmr.pxd b/murmurhash/mrmr.pxd index e675245..341228b 100644 --- a/murmurhash/mrmr.pxd +++ b/murmurhash/mrmr.pxd @@ -1,8 +1,8 @@ from libc.stdint cimport uint64_t, int64_t, uint32_t -cdef uint32_t hash32(void* key, int length, uint32_t seed) nogil -cdef uint64_t hash64(void* key, int length, uint64_t seed) nogil -cdef uint64_t real_hash64(void* key, int length, uint64_t seed) nogil -cdef void hash128_x86(const void* key, int len, uint32_t seed, void* out) nogil -cdef void hash128_x64(const void* key, int len, uint32_t seed, void* out) nogil +cdef uint32_t hash32(void* key, int length, uint32_t seed) noexcept nogil +cdef uint64_t hash64(void* key, int length, uint64_t seed) noexcept nogil +cdef uint64_t real_hash64(void* key, int length, uint64_t seed) noexcept nogil +cdef void hash128_x86(const void* key, int len, uint32_t seed, void* out) noexcept nogil +cdef void hash128_x64(const void* key, int len, uint32_t seed, void* out) noexcept nogil diff --git a/murmurhash/mrmr.pyx b/murmurhash/mrmr.pyx index e7b9d7d..5d1cfb5 100644 --- a/murmurhash/mrmr.pyx +++ b/murmurhash/mrmr.pyx @@ -2,35 +2,35 @@ from libc.stdint cimport uint64_t, int64_t, int32_t cdef extern from "murmurhash/MurmurHash3.h": - void MurmurHash3_x86_32(void * key, uint64_t len, uint64_t seed, void* out) nogil - void MurmurHash3_x86_128(void * key, int len, uint32_t seed, void* out) nogil - void MurmurHash3_x64_128(void * key, int len, uint32_t seed, void* out) nogil + void MurmurHash3_x86_32(void * key, uint64_t len, uint64_t seed, void* out) noexcept nogil + void MurmurHash3_x86_128(void * key, int len, uint32_t seed, void* out) noexcept nogil + void MurmurHash3_x64_128(void * key, int len, uint32_t seed, void* out) noexcept nogil cdef extern from "murmurhash/MurmurHash2.h": - uint64_t MurmurHash64A(void * key, int length, uint32_t seed) nogil - uint64_t MurmurHash64B(void * key, int length, uint32_t seed) nogil + uint64_t MurmurHash64A(void * key, int length, uint32_t seed) noexcept nogil + uint64_t MurmurHash64B(void * key, int length, uint32_t seed) noexcept nogil -cdef uint32_t hash32(void* key, int length, uint32_t seed) nogil: +cdef uint32_t hash32(void* key, int length, uint32_t seed) noexcept nogil: cdef int32_t out MurmurHash3_x86_32(key, length, seed, &out) return out -cdef uint64_t hash64(void* key, int length, uint64_t seed) nogil: +cdef uint64_t hash64(void* key, int length, uint64_t seed) noexcept nogil: return MurmurHash64A(key, length, seed) -cdef uint64_t real_hash64(void* key, int length, uint64_t seed) nogil: +cdef uint64_t real_hash64(void* key, int length, uint64_t seed) noexcept nogil: cdef uint64_t[2] out MurmurHash3_x86_128(key, length, seed, &out) return out[1] -cdef void hash128_x86(const void* key, int length, uint32_t seed, void* out) nogil: +cdef void hash128_x86(const void* key, int length, uint32_t seed, void* out) noexcept nogil: MurmurHash3_x86_128(key, length, seed, out) -cdef void hash128_x64(const void* key, int length, uint32_t seed, void* out) nogil: +cdef void hash128_x64(const void* key, int length, uint32_t seed, void* out) noexcept nogil: MurmurHash3_x64_128(key, length, seed, out) From c0aa4de2e3b75892d1372ed2364bd15f403d950f Mon Sep 17 00:00:00 2001 From: Matthew Honnibal Date: Thu, 22 May 2025 14:13:02 +0200 Subject: [PATCH 2/5] Increment version --- murmurhash/about.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/murmurhash/about.py b/murmurhash/about.py index bcebbd5..3882cd9 100644 --- a/murmurhash/about.py +++ b/murmurhash/about.py @@ -1,5 +1,5 @@ __title__ = "murmurhash" -__version__ = "1.0.12" +__version__ = "1.0.13" __summary__ = "Cython bindings for MurmurHash" __uri__ = "https://github.com/explosion/murmurhash" __author__ = "Explosion" From 96f7e2a4dbfc8026b59f2b02125a11ce4ad614f5 Mon Sep 17 00:00:00 2001 From: Matthew Honnibal Date: Thu, 22 May 2025 14:15:28 +0200 Subject: [PATCH 3/5] Test python 3.13 --- .github/workflows/tests.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 8fd383c..89c5c25 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -24,7 +24,7 @@ jobs: fail-fast: false matrix: os: [ubuntu-latest, windows-latest, macos-latest] - python_version: ["3.7", "3.8", "3.9", "3.10", "3.11", "3.12"] + python_version: ["3.7", "3.8", "3.9", "3.10", "3.11", "3.12", "3.13"] include: - os: windows-2019 python_version: "3.6" From 08b81baf9326ce59d3d81407eb71747aeb3f35cf Mon Sep 17 00:00:00 2001 From: Matthew Honnibal Date: Thu, 22 May 2025 14:16:08 +0200 Subject: [PATCH 4/5] Fix python_requires --- setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.py b/setup.py index 21e5b4f..8cb59c2 100755 --- a/setup.py +++ b/setup.py @@ -114,7 +114,7 @@ def setup_package(): url=about["__uri__"], license=about["__license__"], ext_modules=cythonize(ext_modules, language_level=2), - python_requires=">=3.6", + python_requires=">=3.6,<3.14", classifiers=[ "Development Status :: 5 - Production/Stable", "Environment :: Console", From 7ebcc4b478b595e3ba5a1a42d13553b8c291e068 Mon Sep 17 00:00:00 2001 From: Matthew Honnibal Date: Thu, 22 May 2025 14:19:51 +0200 Subject: [PATCH 5/5] Update test CI --- .github/workflows/tests.yml | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 89c5c25..37a73b6 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -24,23 +24,17 @@ jobs: fail-fast: false matrix: os: [ubuntu-latest, windows-latest, macos-latest] - python_version: ["3.7", "3.8", "3.9", "3.10", "3.11", "3.12", "3.13"] - include: - - os: windows-2019 - python_version: "3.6" - - os: ubuntu-20.04 - python_version: "3.6" + python_version: ["3.9", "3.10", "3.11", "3.12", "3.13"] runs-on: ${{ matrix.os }} steps: - name: Check out repo - uses: actions/checkout@v3 + uses: actions/checkout@v4 - name: Configure Python version uses: actions/setup-python@v4 with: python-version: ${{ matrix.python_version }} - architecture: x64 - name: Build sdist run: |