Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package python-mmh3 for openSUSE:Factory checked in at 2026-10-26 10:05:02 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/python-mmh3 (Old) and /work/SRC/openSUSE:Factory/.python-mmh3.new.2252680 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-mmh3" Mon Oct 26 10:05:02 2026 rev:5 rq:1392639 version:5.3.1 Changes: -------- --- /work/SRC/openSUSE:Factory/python-mmh3/python-mmh3.changes 2026-03-12 22:26:30.836722954 +0100 +++ /work/SRC/openSUSE:Factory/.python-mmh3.new.2252680/python-mmh3.changes 2026-10-26 10:06:29.409036719 +0100 @@ -1,0 +2,8 @@ +Mon Oct 26 07:45:16 UTC 2026 - Dirk Müller <[email protected]> + +- update to 5.3.1: + * Add support for Python 3.15 (#192). + * Fix undefined behavior when writing to const-qualified + 128-bit digest buffers + +------------------------------------------------------------------- Old: ---- mmh3-5.2.1.tar.gz New: ---- mmh3-5.3.1.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ python-mmh3.spec ++++++ --- /var/tmp/diff_new_pack.KECkJ4/_old 2026-10-26 10:06:30.793094765 +0100 +++ /var/tmp/diff_new_pack.KECkJ4/_new 2026-10-26 10:06:30.797094933 +0100 @@ -18,7 +18,7 @@ %{?sle15_python_module_pythons} Name: python-mmh3 -Version: 5.2.1 +Version: 5.3.1 Release: 0 Summary: Python extension for MurmurHash (MurmurHash3) License: MIT ++++++ mmh3-5.2.1.tar.gz -> mmh3-5.3.1.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mmh3-5.2.1/.github/actionlint.yml new/mmh3-5.3.1/.github/actionlint.yml --- old/mmh3-5.2.1/.github/actionlint.yml 2026-03-05 16:11:36.000000000 +0100 +++ new/mmh3-5.3.1/.github/actionlint.yml 2026-09-30 18:40:47.000000000 +0200 @@ -1,6 +1,6 @@ -# As of March 5, 2026, actionlint via super-linter 8.5.0 does not support macOS 26, so we ignore the runner-label warning for now. +# As of August 26, 2026, Actionlint via Super-Linter does not support Ubuntu +# 26.04, so we ignore this runner-label warning for now. paths: .github/workflows/**/*.{yml,yaml}: ignore: - - 'label "macos-26" is unknown.+' - - 'label "macos-26-intel" is unknown.+' + - 'label "ubuntu-26.04" is unknown.+' diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mmh3-5.2.1/.github/dependabot.yml new/mmh3-5.3.1/.github/dependabot.yml --- old/mmh3-5.2.1/.github/dependabot.yml 2026-03-05 16:11:36.000000000 +0100 +++ new/mmh3-5.3.1/.github/dependabot.yml 2026-09-30 18:40:47.000000000 +0200 @@ -12,6 +12,8 @@ - "*" cooldown: default-days: 7 + commit-message: + prefix: "chore(ci)" - package-ecosystem: "pip" directory: "/" schedule: @@ -24,3 +26,6 @@ - "*" cooldown: default-days: 7 + commit-message: + prefix: "chore" + include: "scope" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mmh3-5.2.1/.github/workflows/benchmark-base-hash.yml new/mmh3-5.3.1/.github/workflows/benchmark-base-hash.yml --- old/mmh3-5.2.1/.github/workflows/benchmark-base-hash.yml 2026-03-05 16:11:36.000000000 +0100 +++ new/mmh3-5.3.1/.github/workflows/benchmark-base-hash.yml 2026-09-30 18:40:47.000000000 +0200 @@ -11,16 +11,16 @@ permissions: contents: read packages: read - runs-on: ubuntu-24.04 + runs-on: ubuntu-26.04 env: BENCHMARK_MAX_SIZE: 65536 steps: - name: Checkout - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: persist-credentials: false - name: Set up Python - uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0 + uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0 with: python-version: "3.14" - name: Install dependencies @@ -87,7 +87,7 @@ sudo systemctl restart irqbalance systemctl status irqbalance - name: Upload artifacts - uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # v7.0.0 + uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 with: name: benchmark-results path: var diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mmh3-5.2.1/.github/workflows/benchmark.yml new/mmh3-5.3.1/.github/workflows/benchmark.yml --- old/mmh3-5.2.1/.github/workflows/benchmark.yml 2026-03-05 16:11:36.000000000 +0100 +++ new/mmh3-5.3.1/.github/workflows/benchmark.yml 2026-09-30 18:40:47.000000000 +0200 @@ -11,16 +11,16 @@ permissions: contents: read packages: read - runs-on: ubuntu-24.04 + runs-on: ubuntu-26.04 env: BENCHMARK_MAX_SIZE: 262144 steps: - name: Checkout - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: persist-credentials: false - name: Set up Python - uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0 + uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0 with: python-version: "3.14" - name: Install dependencies @@ -82,7 +82,7 @@ sudo systemctl restart irqbalance systemctl status irqbalance - name: Upload artifacts - uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # v7.0.0 + uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 with: name: benchmark-results path: var diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mmh3-5.2.1/.github/workflows/build.yml new/mmh3-5.3.1/.github/workflows/build.yml --- old/mmh3-5.2.1/.github/workflows/build.yml 2026-03-05 16:11:36.000000000 +0100 +++ new/mmh3-5.3.1/.github/workflows/build.yml 2026-09-30 18:40:47.000000000 +0200 @@ -22,17 +22,27 @@ strategy: matrix: - os: [macos-26, windows-2025, ubuntu-24.04] - python-version: ["3.10", "3.11", "3.12", "3.13", "3.14", "3.14t"] + os: [macos-26, windows-2025, ubuntu-26.04] + python-version: + [ + "3.10", + "3.11", + "3.12", + "3.13", + "3.14", + "3.14t", + "3.15-dev", + "3.15t-dev", + ] runs-on: ${{ matrix.os }} steps: - name: Checkout - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: persist-credentials: false - name: Set up Python ${{ matrix.python-version }} - uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0 + uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0 with: python-version: ${{ matrix.python-version }} - name: Install dependencies diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mmh3-5.2.1/.github/workflows/draft-pdf.yml new/mmh3-5.3.1/.github/workflows/draft-pdf.yml --- old/mmh3-5.2.1/.github/workflows/draft-pdf.yml 2026-03-05 16:11:36.000000000 +0100 +++ new/mmh3-5.3.1/.github/workflows/draft-pdf.yml 2026-09-30 18:40:47.000000000 +0200 @@ -21,7 +21,7 @@ if: github.event_name == 'workflow_dispatch' && github.ref == 'refs/heads/master' steps: - name: Checkout - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: persist-credentials: false - name: Build draft PDF @@ -31,7 +31,7 @@ # This should be the path to the paper within your repo. paper-path: paper/paper.md - name: Upload - uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # v7.0.0 + uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 with: name: paper # This is the output path where Pandoc will write the compiled diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mmh3-5.2.1/.github/workflows/superlinter.yml new/mmh3-5.3.1/.github/workflows/superlinter.yml --- old/mmh3-5.2.1/.github/workflows/superlinter.yml 2026-03-05 16:11:36.000000000 +0100 +++ new/mmh3-5.3.1/.github/workflows/superlinter.yml 2026-09-30 18:40:47.000000000 +0200 @@ -30,7 +30,7 @@ steps: # Checks out a copy of your repository on the ubuntu-latest machine - name: Checkout code - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: persist-credentials: false # super-linter needs the full git history to get the @@ -39,7 +39,7 @@ # Runs the Super-Linter action - name: Run Super-Linter - uses: super-linter/super-linter@61abc07d755095a68f4987d1c2c3d1d64408f1f9 # v8.5.0 + uses: super-linter/super-linter@4ce20838b8ab83717e78138c5b3a1407148e0918 # v8.7.0 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} LINTER_RULES_PATH: / @@ -62,7 +62,7 @@ # super-linter 7 does not honor the ignore-paths option of pylint # so we run pylint separately - name: Set up Python - uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0 + uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0 with: python-version: "3.14" - name: Run pylint diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mmh3-5.2.1/.github/workflows/wheels.yml new/mmh3-5.3.1/.github/workflows/wheels.yml --- old/mmh3-5.2.1/.github/workflows/wheels.yml 2026-03-05 16:11:36.000000000 +0100 +++ new/mmh3-5.3.1/.github/workflows/wheels.yml 2026-09-30 18:40:47.000000000 +0200 @@ -16,14 +16,14 @@ strategy: matrix: os: [ubuntu-24.04] - archs: [x86_64, i686, aarch64, ppc64le, s390x] + archs: [x86_64, i686, aarch64, ppc64le, s390x, riscv64] build: [manylinux, musllinux] include: - os: windows-2025 archs: AMD64 - os: windows-2025 archs: x86 - - os: windows-2025 + - os: windows-11-arm archs: ARM64 - os: macos-26-intel archs: x86_64 @@ -50,11 +50,11 @@ archs: x86_64_iphonesimulator steps: - name: Checkout - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: persist-credentials: false - name: Set up Python - uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0 + uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0 with: python-version: "3.14" - name: Set dev version for TestPyPI @@ -78,7 +78,7 @@ open("pyproject.toml", "w", encoding="utf-8").write(new_text) - name: Set up QEMU if: runner.os == 'Linux' && matrix.platform != 'android' - uses: docker/setup-qemu-action@c7c53464625b32c7a7e944ae62b3e17d2b600130 # v3.7.0 + uses: docker/setup-qemu-action@1f40c72289eff860ee54a304f1438e3cff362e0a # v4.3.0 # https://github.blog/changelog/2024-04-02-github-actions-hardware-accelerated-android-virtualization-now-available/ - name: Set up KVM for Android emulation if: runner.os == 'Linux' && matrix.platform == 'android' @@ -87,11 +87,11 @@ sudo udevadm control --reload-rules sudo udevadm trigger --name-match=kvm - name: Build wheels - uses: pypa/cibuildwheel@ee02a1537ce3071a004a6b08c41e72f0fdc42d9a # v3.4.0 + uses: pypa/cibuildwheel@e090b81e30c4d855ea63bf4b6e59204c09a101ae # v4.2.1 with: output-dir: wheelhouse env: - CIBW_BUILD: "{cp310,cp311,cp312,cp313,cp314,cp314t}-${{ matrix.build }}*" + CIBW_BUILD: "{cp310,cp311,cp312,cp313,cp314,cp314t,cp315,cp315t}-${{ matrix.build }}*" CIBW_PLATFORM: ${{ matrix.platform || 'auto' }} CIBW_ARCHS: ${{ matrix.archs }} CIBW_BUILD_FRONTEND: "build" @@ -101,21 +101,21 @@ CIBW_TEST_COMMAND: "pytest {project}" CIBW_TEST_COMMAND_ANDROID: "python -m pytest ./tests" CIBW_TEST_COMMAND_IOS: "python -m pytest ./tests" - CIBW_TEST_SKIP: "*-win_arm64 *-android_arm64_v8a" - - uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # v7.0.0 + CIBW_TEST_SKIP: "*-android_arm64_v8a" + - uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 with: name: Wheel-${{ matrix.os }}-${{ matrix.platform }}-${{ matrix.build }}${{ matrix.archs }} path: ./wheelhouse/*.whl build_sdist: name: Build a source distribution - runs-on: ubuntu-24.04 + runs-on: ubuntu-26.04 steps: - name: Checkout - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: persist-credentials: false - name: Set up Python - uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0 + uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0 with: python-version: "3.14" - name: Set dev version for TestPyPI @@ -150,14 +150,14 @@ python -m pip install dist/*.tar.gz python -m pytest mypy --strict tests - - uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # v7.0.0 + - uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 with: path: dist/*.tar.gz publish-to-pypi: name: "Publish artifacts to PyPI" if: startsWith(github.ref, 'refs/tags/') needs: [build_wheels, build_sdist] - runs-on: ubuntu-24.04 + runs-on: ubuntu-26.04 environment: name: pypi url: https://pypi.org/p/mmh3 @@ -165,17 +165,17 @@ id-token: write # IMPORTANT: this permission is mandatory for trusted publishing steps: - name: Set up built items - uses: actions/download-artifact@70fc10c6e5e1ce46ad2ea6f2b72d43f7d47b13c3 # v8.0.0 + uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1 with: path: dist merge-multiple: true - name: Publish package distributions to PyPI - uses: pypa/gh-action-pypi-publish@ed0c53931b1dc9bd32cbe73a98c7f6766f8a527e # v1.13.0 + uses: pypa/gh-action-pypi-publish@dc37677b2e1c63e2034f94d8a5b11f265b73ba33 # v1.14.2 publish-to-testpypi: name: "Publish artifacts to TestPyPI" if: github.event_name == 'workflow_dispatch' && github.ref == 'refs/heads/master' needs: [build_wheels, build_sdist] - runs-on: ubuntu-24.04 + runs-on: ubuntu-26.04 environment: name: testpypi url: https://test.pypi.org/p/mmh3 @@ -183,11 +183,11 @@ id-token: write # IMPORTANT: this permission is mandatory for trusted publishing steps: - name: Set up built items - uses: actions/download-artifact@70fc10c6e5e1ce46ad2ea6f2b72d43f7d47b13c3 # v8.0.0 + uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1 with: path: dist merge-multiple: true - name: Publish package distributions to TestPyPI - uses: pypa/gh-action-pypi-publish@ed0c53931b1dc9bd32cbe73a98c7f6766f8a527e # v1.13.0 + uses: pypa/gh-action-pypi-publish@dc37677b2e1c63e2034f94d8a5b11f265b73ba33 # v1.14.2 with: repository-url: https://test.pypi.org/legacy/ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mmh3-5.2.1/CHANGELOG.md new/mmh3-5.3.1/CHANGELOG.md --- old/mmh3-5.2.1/CHANGELOG.md 2026-03-05 16:11:36.000000000 +0100 +++ new/mmh3-5.3.1/CHANGELOG.md 2026-09-30 18:40:47.000000000 +0200 @@ -5,11 +5,29 @@ [Contributors](https://mmh3.readthedocs.io/en/stable/CONTRIBUTORS.html) page. The format is based on -[Keep a Changelog 1.1.0](https://keepachangelog.com/en/1.1.0/). +[Keep a Changelog 2.0.0](https://keepachangelog.com/en/2.0.0/). This project has adhered to [Semantic Versioning 2.0.0](https://semver.org/spec/v2.0.0.html) since version 3.0.0. +## [5.3.1] - 2026-10-01 + +### Added + +- Add Linux riscv64 wheels (manylinux and musllinux) + ([#199](https://github.com/hajimes/mmh3/pull/199)). + +## [5.3.0] - 2026-08-26 + +### Added + +- Add support for Python 3.15 ([#192](https://github.com/hajimes/mmh3/pull/192)). + +### Fixed + +- Fix undefined behavior when writing to const-qualified 128-bit digest buffers + ([#188](https://github.com/hajimes/mmh3/pull/188)). + ## [5.2.1] - 2026-03-06 ### Added @@ -281,9 +299,9 @@ the same as that of 2.0**. E.g.,: ```pycon ->>> mmh3.hash("foo") # in mmh3 2.0 +>>> mmh3.hash("foo") # in mmh3 2.0 -292180858 ->>> mmh3.hash("foo") # in mmh3 2.1 +>>> mmh3.hash("foo") # in mmh3 2.1 -156908512 ``` @@ -310,6 +328,8 @@ [Softpedia collected mmh3 1.0 on April 27, 2011](https://web.archive.org/web/20110430172027/https://linux.softpedia.com/get/Programming/Libraries/mmh3-68314.shtml), it must have been uploaded to PyPI on or slightly before this date. +[5.3.1]: https://github.com/hajimes/mmh3/compare/v5.3.0...v5.3.1 +[5.3.0]: https://github.com/hajimes/mmh3/compare/v5.2.1...v5.3.0 [5.2.1]: https://github.com/hajimes/mmh3/compare/v5.2.0...v5.2.1 [5.2.0]: https://github.com/hajimes/mmh3/compare/v5.1.0...v5.2.0 [5.1.0]: https://github.com/hajimes/mmh3/compare/v5.0.1...v5.1.0 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mmh3-5.2.1/README.md new/mmh3-5.3.1/README.md --- old/mmh3-5.2.1/README.md 2026-03-05 16:11:36.000000000 +0100 +++ new/mmh3-5.3.1/README.md 2026-09-30 18:40:47.000000000 +0200 @@ -41,13 +41,13 @@ ```pycon >>> import mmh3 ->>> mmh3.hash(b"foo") # returns a 32-bit signed int +>>> mmh3.hash(b"foo") # returns a 32-bit signed int -156908512 ->>> mmh3.hash("foo") # accepts str (UTF-8 encoded) +>>> mmh3.hash("foo") # accepts str (UTF-8 encoded) -156908512 ->>> mmh3.hash(b"foo", 42) # uses 42 as the seed +>>> mmh3.hash(b"foo", 42) # uses 42 as the seed -1322301282 ->>> mmh3.hash(b"foo", 0, False) # returns a 32-bit unsigned int +>>> mmh3.hash(b"foo", 0, False) # returns a 32-bit unsigned int 4138058784 ``` @@ -81,48 +81,33 @@ See [Changelog (latest version)](https://mmh3.readthedocs.io/en/latest/changelog.html) for the complete changelog. -### [5.2.1] - 2026-03-06 +### [5.3.1] - 2026-10-01 #### Added -- Add support for the Android wheel for Python 3.14. +- Add Linux riscv64 wheels (manylinux and musllinux) + ([#199](https://github.com/hajimes/mmh3/pull/199)). -#### Removed +### [5.3.0] - 2026-08-26 -- Drop support for Python 3.9, as it has reached the end of life on 2025-10-31. +#### Added -### [5.2.0] - 2025-07-29 +- Add support for Python 3.15 ([#192](https://github.com/hajimes/mmh3/pull/192)). -#### Added +#### Fixed -- Add support for Python 3.14, including 3.14t (no-GIL) wheels. However, thread - safety for the no-GIL variant is not fully tested yet. Please report any - issues you encounter ([#134](https://github.com/hajimes/mmh3/pull/134), - [#136](https://github.com/hajimes/mmh3/pull/136)). -- Add support for Android (Python 3.13 only) and iOS (Python 3.13 and 3.14) wheels, - enabled by the major version update of - [cibuildwheel](https://github.com/pypa/cibuildwheel) - ([#135](https://github.com/hajimes/mmh3/pull/135)). +- Fix undefined behavior when writing to const-qualified 128-bit digest buffers + ([#188](https://github.com/hajimes/mmh3/pull/188)). -### [5.1.0] - 2025-01-25 +### [5.2.1] - 2026-03-06 #### Added -- Improve the performance of `hash128()`, `hash64()`, and `hash_bytes()` by - using - [METH_FASTCALL](https://docs.python.org/3/c-api/structures.html#c.METH_FASTCALL), - reducing the overhead of function calls - ([#116](https://github.com/hajimes/mmh3/pull/116)). -- Add the software paper for this library - ([doi:10.21105/joss.06124](https://doi.org/10.21105/joss.06124)), following - its publication in the - [_Journal of Open Source Software_](https://joss.theoj.org) - ([#118](https://github.com/hajimes/mmh3/pull/118)). +- Add support for the Android wheel for Python 3.14. #### Removed -- Drop support for Python 3.8, as it has reached the end of life on 2024-10-07 - ([#117](https://github.com/hajimes/mmh3/pull/117)). +- Drop support for Python 3.9, as it has reached the end of life on 2025-10-31. ## License @@ -167,7 +152,7 @@ >>> mmh3.hash(b"quux", 4294967295) 258499980 >>> d = -1 ->>> mmh3.hash(b"quux", d & 0xffffffff) +>>> mmh3.hash(b"quux", d & 0xFFFFFFFF) 258499980 ``` @@ -270,6 +255,6 @@ - <https://github.com/ifduyue/python-xxhash>: Python bindings for xxHash (Yue Du) +[5.3.1]: https://github.com/hajimes/mmh3/compare/v5.3.0...v5.3.1 +[5.3.0]: https://github.com/hajimes/mmh3/compare/v5.2.1...v5.3.0 [5.2.1]: https://github.com/hajimes/mmh3/compare/v5.2.0...v5.2.1 -[5.2.0]: https://github.com/hajimes/mmh3/compare/v5.1.0...v5.2.0 -[5.1.0]: https://github.com/hajimes/mmh3/compare/v5.0.1...v5.1.0 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mmh3-5.2.1/docs/CODE_OF_CONDUCT.md new/mmh3-5.3.1/docs/CODE_OF_CONDUCT.md --- old/mmh3-5.2.1/docs/CODE_OF_CONDUCT.md 2026-03-05 16:11:36.000000000 +0100 +++ new/mmh3-5.3.1/docs/CODE_OF_CONDUCT.md 2026-09-30 18:40:47.000000000 +0200 @@ -1,5 +1,7 @@ # Code of Conduct -This project adheres to the ACM Code of Ethics and Professional Conduct -([https://www.acm.org/code-of-ethics](https://www.acm.org/code-of-ethics)), as -specified in the version adopted on June 22nd, 2018. +Contributors to this project are expected to follow the ACM Code of Ethics and +Professional Conduct, available at +[https://www.acm.org/code-of-ethics](https://www.acm.org/code-of-ethics). The +current version of the Code and its guidelines was adopted by the ACM Council +on June 22, 2018. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mmh3-5.2.1/docs/CONTRIBUTORS.md new/mmh3-5.3.1/docs/CONTRIBUTORS.md --- old/mmh3-5.2.1/docs/CONTRIBUTORS.md 2026-03-05 16:11:36.000000000 +0100 +++ new/mmh3-5.3.1/docs/CONTRIBUTORS.md 2026-09-30 18:40:47.000000000 +0200 @@ -11,6 +11,8 @@ - [Alexander Maznev](https://github.com/pik), [#6](https://github.com/hajimes/mmh3/pull/6). +- [Anton Karpov](https://github.com/karpovantonme), + [#188](https://github.com/hajimes/mmh3/pull/188). - [@arieleizenberg](https://github.com/arieleizenberg), [#34](https://github.com/hajimes/mmh3/pull/34). - [Micha Gorelick](https://github.com/mynameisfiber), @@ -26,8 +28,12 @@ [#15](https://github.com/hajimes/mmh3/pull/15). - [Dušan Nikolić](https://github.com/n-dusan), [#37](https://github.com/hajimes/mmh3/pull/37). +- [Julien Stephan](https://github.com/justeph), + [#199](https://github.com/hajimes/mmh3/pull/199). - [Matthew Honnibal](https://github.com/honnibal), [#22](https://github.com/hajimes/mmh3/pull/22). +- [MUGUNDAN](https://github.com/MugundanMCW), + [#175](https://github.com/hajimes/mmh3/pull/175). - [wouter bolsterlee](https://github.com/wbolster), [#35](https://github.com/hajimes/mmh3/pull/35). diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mmh3-5.2.1/docs/api.md new/mmh3-5.3.1/docs/api.md --- old/mmh3-5.2.1/docs/api.md 2026-03-05 16:11:36.000000000 +0100 +++ new/mmh3-5.3.1/docs/api.md 2026-09-30 18:40:47.000000000 +0200 @@ -125,17 +125,17 @@ ```pycon >>> import mmh3 ->>> hasher = mmh3.mmh3_x64_128(b"foo", 42) # seed=42 +>>> hasher = mmh3.mmh3_x64_128(b"foo", 42) # seed=42 >>> hasher.update(b"bar") >>> hasher.digest() b'\x82_n\xdd \xac\xb6j\xef\x99\xb1e\xc4\n\xc9\xfd' ->>> hasher.sintdigest() # 128 bit signed int +>>> hasher.sintdigest() # 128 bit signed int -2943813934500665152301506963178627198 ->>> hasher.uintdigest() # 128 bit unsigned int +>>> hasher.uintdigest() # 128 bit unsigned int 337338552986437798311073100468589584258 ->>> hasher.stupledigest() # two 64 bit signed ints +>>> hasher.stupledigest() # two 64 bit signed ints (7689522670935629698, -159584473158936081) ->>> hasher.utupledigest() # two 64 bit unsigned ints +>>> hasher.utupledigest() # two 64 bit unsigned ints (7689522670935629698, 18287159600550615535) ``` diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mmh3-5.2.1/pyproject.toml new/mmh3-5.3.1/pyproject.toml --- old/mmh3-5.2.1/pyproject.toml 2026-03-05 16:11:36.000000000 +0100 +++ new/mmh3-5.3.1/pyproject.toml 2026-09-30 18:40:47.000000000 +0200 @@ -5,7 +5,7 @@ [project] name = "mmh3" -version = "5.2.1" +version = "5.3.1" description = "Python extension for MurmurHash (MurmurHash3), a set of fast and robust hash functions." readme = "README.md" license = {file = "LICENSE"} @@ -24,6 +24,7 @@ "Programming Language :: Python :: 3.12", "Programming Language :: Python :: 3.13", "Programming Language :: Python :: 3.14", + "Programming Language :: Python :: 3.15", "Programming Language :: Python :: Free Threading :: 2 - Beta", "Topic :: Software Development :: Libraries", "Topic :: Utilities" @@ -31,32 +32,32 @@ [project.optional-dependencies] test = [ - "pytest == 9.0.2", + "pytest == 9.1.1", "pytest-sugar == 1.1.1" ] lint = [ - "actionlint-py == 1.7.11.24", - "clang-format == 22.1.0", - "codespell == 2.4.1", - "pylint == 4.0.5", - "ruff == 0.15.4" + "actionlint-py == 1.7.12.24", + "clang-format == 23.1.0", + "codespell == 2.4.3", + "pylint == 4.0.8", + "ruff == 0.16.5" ] type = [ - "mypy == 1.19.1" + "mypy == 2.3.1" ] docs = [ "myst-parser == 5.0.0", - "shibuya == 2026.1.9", + "shibuya == 2026.7.12", "sphinx == 8.2.3", "sphinx-copybutton == 0.5.2" ] benchmark = [ "pymmh3 == 0.0.5", "pyperf == 2.10.0", - "xxhash == 3.6.0" + "xxhash == 4.0.1" ] plot = [ - "matplotlib == 3.10.8", + "matplotlib == 3.10.9", "pandas == 3.0.1" ] diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mmh3-5.2.1/src/mmh3/mmh3module.c new/mmh3-5.3.1/src/mmh3/mmh3module.c --- old/mmh3-5.2.1/src/mmh3/mmh3module.c 2026-03-05 16:11:36.000000000 +0100 +++ new/mmh3-5.3.1/src/mmh3/mmh3module.c 2026-09-30 18:40:47.000000000 +0200 @@ -1765,7 +1765,7 @@ static PyObject * MMH3Hasher128x64_digest(MMH3Hasher128x64 *self, PyObject *Py_UNUSED(ignored)) { - const char out[MMH3_128_DIGESTSIZE]; + char out[MMH3_128_DIGESTSIZE]; MMH3_HASHER_LOCK(self); digest_x64_128_impl(self->h1, self->h2, self->buffer1, self->buffer2, self->length, out); @@ -1777,7 +1777,7 @@ MMH3Hasher128x64_sintdigest(MMH3Hasher128x64 *self, PyObject *Py_UNUSED(ignored)) { - const char out[MMH3_128_DIGESTSIZE]; + char out[MMH3_128_DIGESTSIZE]; MMH3_HASHER_LOCK(self); digest_x64_128_impl(self->h1, self->h2, self->buffer1, self->buffer2, self->length, out); @@ -1801,7 +1801,7 @@ MMH3Hasher128x64_uintdigest(MMH3Hasher128x64 *self, PyObject *Py_UNUSED(ignored)) { - const char out[MMH3_128_DIGESTSIZE]; + char out[MMH3_128_DIGESTSIZE]; MMH3_HASHER_LOCK(self); digest_x64_128_impl(self->h1, self->h2, self->buffer1, self->buffer2, self->length, out); @@ -1834,7 +1834,7 @@ MMH3Hasher128x64_stupledigest(MMH3Hasher128x64 *self, PyObject *Py_UNUSED(ignored)) { - const char out[MMH3_128_DIGESTSIZE]; + char out[MMH3_128_DIGESTSIZE]; MMH3_HASHER_LOCK(self); digest_x64_128_impl(self->h1, self->h2, self->buffer1, self->buffer2, self->length, out); @@ -1866,7 +1866,7 @@ MMH3Hasher128x64_utupledigest(MMH3Hasher128x64 *self, PyObject *Py_UNUSED(ignored)) { - const char out[MMH3_128_DIGESTSIZE]; + char out[MMH3_128_DIGESTSIZE]; MMH3_HASHER_LOCK(self); digest_x64_128_impl(self->h1, self->h2, self->buffer1, self->buffer2, self->length, out); @@ -2160,7 +2160,7 @@ MMH3Hasher128x86_sintdigest(MMH3Hasher128x86 *self, PyObject *Py_UNUSED(ignored)) { - const char out[MMH3_128_DIGESTSIZE]; + char out[MMH3_128_DIGESTSIZE]; MMH3_HASHER_LOCK(self); digest_x86_128_impl(self->h1, self->h2, self->h3, self->h4, self->buffer1, self->buffer2, self->buffer3, self->buffer4, @@ -2185,7 +2185,7 @@ MMH3Hasher128x86_uintdigest(MMH3Hasher128x86 *self, PyObject *Py_UNUSED(ignored)) { - const char out[MMH3_128_DIGESTSIZE]; + char out[MMH3_128_DIGESTSIZE]; MMH3_HASHER_LOCK(self); digest_x86_128_impl(self->h1, self->h2, self->h3, self->h4, self->buffer1, self->buffer2, self->buffer3, self->buffer4, @@ -2210,7 +2210,7 @@ MMH3Hasher128x86_stupledigest(MMH3Hasher128x86 *self, PyObject *Py_UNUSED(ignored)) { - const char out[MMH3_128_DIGESTSIZE]; + char out[MMH3_128_DIGESTSIZE]; MMH3_HASHER_LOCK(self); digest_x86_128_impl(self->h1, self->h2, self->h3, self->h4, self->buffer1, self->buffer2, self->buffer3, self->buffer4, @@ -2233,7 +2233,7 @@ MMH3Hasher128x86_utupledigest(MMH3Hasher128x86 *self, PyObject *Py_UNUSED(ignored)) { - const char out[MMH3_128_DIGESTSIZE]; + char out[MMH3_128_DIGESTSIZE]; MMH3_HASHER_LOCK(self); digest_x86_128_impl(self->h1, self->h2, self->h3, self->h4, self->buffer1, self->buffer2, self->buffer3, self->buffer4, diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mmh3-5.2.1/src/mmh3/murmurhash3.h new/mmh3-5.3.1/src/mmh3/murmurhash3.h --- old/mmh3-5.2.1/src/mmh3/murmurhash3.h 2026-03-05 16:11:36.000000000 +0100 +++ new/mmh3-5.3.1/src/mmh3/murmurhash3.h 2026-09-30 18:40:47.000000000 +0200 @@ -233,7 +233,7 @@ static FORCE_INLINE void digest_x64_128_impl(uint64_t h1, uint64_t h2, const uint64_t k1, - const uint64_t k2, const Py_ssize_t len, const char *out) + const uint64_t k2, const Py_ssize_t len, char *out) { h1 ^= mixK1_x64_128(k1); h2 ^= mixK2_x64_128(k2); @@ -261,7 +261,7 @@ static FORCE_INLINE void digest_x86_128_impl(uint32_t h1, uint32_t h2, uint32_t h3, uint32_t h4, const uint32_t k1, const uint32_t k2, const uint32_t k3, - const uint32_t k4, const Py_ssize_t len, const char *out) + const uint32_t k4, const Py_ssize_t len, char *out) { const uint32_t c1 = 0x239b961b; const uint32_t c2 = 0xab0e9789; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mmh3-5.2.1/tox.ini new/mmh3-5.3.1/tox.ini --- old/mmh3-5.2.1/tox.ini 2026-03-05 16:11:36.000000000 +0100 +++ new/mmh3-5.3.1/tox.ini 2026-09-30 18:40:47.000000000 +0200 @@ -1,7 +1,7 @@ [tox] requires = tox>=4 -envlist = lint, type, py{310,311,312,313,314,314t} +envlist = lint, type, py{310,311,312,313,314,314t,315} [testenv] description = run unit tests
