Skip to content

classmethod properties are removed in Python 3.13 #553

Closed

Description

@QuLogic

Problem description

This was added in #519:

@classmethod
@property
def default_level(cls):
"""Returns the default compression level of the underlying zstd library."""
return ZSTD_defaultCLevel()
@classmethod
@property
def min_level(cls):
"""Returns the minimum compression level of the underlying zstd library."""
return ZSTD_minCLevel()
@classmethod
@property
def max_level(cls):
"""Returns the maximum compression level of the underlying zstd library."""
return ZSTD_maxCLevel()

However, as of Python 3.11, using classmethod on property was deprecated, and has been removed in Python 3.13:
https://docs.python.org/3.13/library/functions.html#classmethod

Deprecated since version 3.11, removed in version 3.13: Class methods can no longer wrap other descriptors such as property().

This causes tests to fail on Python 3.13:

____________________________ test_native_functions _____________________________
    def test_native_functions():
        # Note, these assertions might need to be changed for new versions of zstd
>       assert Zstd.default_level == 3
E       AssertionError: assert <bound method default_level of <class 'numcodecs.zstd.Zstd'>> == 3
E        +  where <bound method default_level of <class 'numcodecs.zstd.Zstd'>> = Zstd.default_level
../../BUILDROOT/usr/lib64/python3.13/site-packages/numcodecs/tests/test_zstd.py:93: AssertionError

https://kojipkgs.fedoraproject.org/work/tasks/9111/120819111/build.log

Version and installation information

Please provide the following:

  • Value of numcodecs.__version__ 0.13.0
  • Version of Python interpreter 3.13.0b3
  • Operating system (Linux/Windows/Mac) Fedora Rawhide
  • How NumCodecs was installed (e.g., "using pip into virtual environment", or "using conda") from source

Activity

  1. QuLogic commented on Sep 13, 2024

    @QuLogic
    ContributorAuthor

    Ping? We're less than a month away from Python 3.13 final.

  2. dstansby commented on Sep 14, 2024

    @dstansby
    Contributor

    I guess a blocker to this is running tests on Python 3.13. Do you know the best way to test on pre-release Python these days? We're currently using conda to manage Python in the tests, which last time I checked didn't ship pre-release versions of Python, but I'm open to moving to another way of managing Python in CI if it gives us pre-release Python.

  3. QuLogic commented on Sep 14, 2024

    @QuLogic
    ContributorAuthor

    For Matplotlib, we use actions/setup-python@v5 with allow-prereleases: true and the usual pip install. I don't know about all numcodecs dependencies though.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions