This is an automated email from the ASF dual-hosted git repository.

fokko pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/iceberg-python.git


The following commit(s) were added to refs/heads/main by this push:
     new dea80784 infra: Add Python 3.13 support (#2863)
dea80784 is described below

commit dea80784a5f9d6936a605c7ccb0f3f8d4ba30d9d
Author: Kevin Liu <[email protected]>
AuthorDate: Mon Jan 5 05:00:35 2026 -0500

    infra: Add Python 3.13 support (#2863)
    
    <!--
    Thanks for opening a pull request!
    -->
    
    <!-- In the case this PR will resolve an issue, please replace
    ${GITHUB_ISSUE_ID} below with the actual Github issue id. -->
    <!-- Closes #${GITHUB_ISSUE_ID} -->
    
    # Rationale for this change
    Closes #1372, #2530
    
    Based on #1377, #2536, #2658
    
    Adds Python 3.13 throughout the repo
    Upgrade `ray` to a version built with python 3.13
    Add `filterwarnings` for `ResourceWarnings` coming from `sqlite` and
    `ray` for now, will follow up with a proper fix
    
    ## Are these changes tested?
    Yes
    ```
    PYTHON=3.13 make install
    PYTHON=3.13 make test
    PYTHON=3.13 make test-integration
    ```
    
    ## Are there any user-facing changes?
    
    <!-- In the case of user-facing changes, please add the changelog label.
    -->
    
    ---------
    
    Co-authored-by: Saurabh Kumar <[email protected]>
    Co-authored-by: Saurabh Kumar <[email protected]>
---
 .github/workflows/pypi-build-artifacts.yml |  3 ++-
 .github/workflows/python-ci.yml            |  4 ++--
 .github/workflows/svn-build-artifacts.yml  |  3 ++-
 pyproject.toml                             |  8 ++++++-
 tests/catalog/test_base.py                 |  7 ++++--
 tests/conftest.py                          | 13 +++++++++++
 tests/integration/test_reads.py            | 12 ++++++----
 uv.lock                                    | 36 ++++++++++++++----------------
 8 files changed, 56 insertions(+), 30 deletions(-)

diff --git a/.github/workflows/pypi-build-artifacts.yml 
b/.github/workflows/pypi-build-artifacts.yml
index a3f6006b..bc2a5046 100644
--- a/.github/workflows/pypi-build-artifacts.yml
+++ b/.github/workflows/pypi-build-artifacts.yml
@@ -45,6 +45,7 @@ jobs:
             3.10
             3.11
             3.12
+            3.13
 
       - name: Install UV
         uses: astral-sh/setup-uv@v7
@@ -68,7 +69,7 @@ jobs:
         env:
           # Ignore 32 bit architectures
           CIBW_ARCHS: "auto64"
-          CIBW_PROJECT_REQUIRES_PYTHON: ">=3.10"
+          CIBW_PROJECT_REQUIRES_PYTHON: ">=3.10,<3.14"
           CIBW_TEST_REQUIRES: "pytest==7.4.2 moto==5.0.1"
           CIBW_TEST_COMMAND: "pytest {project}/tests/avro/test_decoder.py"
           # Ignore tests for pypy since not all dependencies are compiled for 
it
diff --git a/.github/workflows/python-ci.yml b/.github/workflows/python-ci.yml
index 2b3682cc..e7299d3f 100644
--- a/.github/workflows/python-ci.yml
+++ b/.github/workflows/python-ci.yml
@@ -47,7 +47,7 @@ jobs:
     runs-on: ubuntu-latest
     strategy:
       matrix:
-        python: ['3.10', '3.11', '3.12']
+        python: ['3.10', '3.11', '3.12', '3.13']
 
     steps:
     - uses: actions/checkout@v6
@@ -71,7 +71,7 @@ jobs:
     runs-on: ubuntu-latest
     strategy:
       matrix:
-        python: ['3.10', '3.11', '3.12']
+        python: ['3.10', '3.11', '3.12', '3.13']
 
     steps:
     - uses: actions/checkout@v6
diff --git a/.github/workflows/svn-build-artifacts.yml 
b/.github/workflows/svn-build-artifacts.yml
index 62d37990..193a9d00 100644
--- a/.github/workflows/svn-build-artifacts.yml
+++ b/.github/workflows/svn-build-artifacts.yml
@@ -45,6 +45,7 @@ jobs:
             3.10
             3.11
             3.12
+            3.13
 
       - name: Install UV
         uses: astral-sh/setup-uv@v7
@@ -63,7 +64,7 @@ jobs:
         env:
           # Ignore 32 bit architectures
           CIBW_ARCHS: "auto64"
-          CIBW_PROJECT_REQUIRES_PYTHON: ">=3.10"
+          CIBW_PROJECT_REQUIRES_PYTHON: ">=3.10,<3.14"
           CIBW_TEST_REQUIRES: "pytest==7.4.2 moto==5.0.1"
           CIBW_TEST_COMMAND: "pytest {project}/tests/avro/test_decoder.py"
           # Ignore tests for pypy since not all dependencies are compiled for 
it
diff --git a/pyproject.toml b/pyproject.toml
index 670e3ad6..a92914bc 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -28,6 +28,7 @@ classifiers = [
     "Programming Language :: Python :: 3.10",
     "Programming Language :: Python :: 3.11",
     "Programming Language :: Python :: 3.12",
+    "Programming Language :: Python :: 3.13",
 ]
 dependencies = [
     "mmh3>=4.0.0,<6.0.0",
@@ -66,7 +67,7 @@ duckdb = [
     "pyarrow>=17.0.0",
 ]
 ray = [
-    "ray>=2.10.0,<=2.44.0",
+    "ray>=2.10.0,<3.0.0",
     "pyarrow>=17.0.0",
     "pandas>=1.0.0,<3.0.0",
 ]
@@ -160,6 +161,11 @@ filterwarnings = [
   "error",
   # Ignore Python version deprecation warning from google.api_core while we 
still support 3.10
   "ignore:You are using a Python version.*which Google will stop 
supporting:FutureWarning:google.api_core",
+  # Python 3.13 sqlite3 module ResourceWarnings for unclosed database 
connections
+  "ignore:unclosed database in <sqlite3.Connection object*:ResourceWarning",
+  # Ignore Ray subprocess cleanup warnings
+  "ignore:unclosed file:ResourceWarning",
+  "ignore:subprocess.*is still running:ResourceWarning",
 ]
 
 [tool.black]
diff --git a/tests/catalog/test_base.py b/tests/catalog/test_base.py
index 42702c8c..96e04c19 100644
--- a/tests/catalog/test_base.py
+++ b/tests/catalog/test_base.py
@@ -17,6 +17,7 @@
 # pylint:disable=redefined-outer-name
 
 
+from collections.abc import Generator
 from pathlib import PosixPath
 
 import pyarrow as pa
@@ -51,8 +52,10 @@ from pyiceberg.types import IntegerType, LongType, 
NestedField, StringType
 
 
 @pytest.fixture
-def catalog(tmp_path: PosixPath) -> InMemoryCatalog:
-    return InMemoryCatalog("test.in_memory.catalog", **{WAREHOUSE: 
tmp_path.absolute().as_posix(), "test.key": "test.value"})
+def catalog(tmp_path: PosixPath) -> Generator[Catalog, None, None]:
+    catalog = InMemoryCatalog("test.in_memory.catalog", **{WAREHOUSE: 
tmp_path.absolute().as_posix(), "test.key": "test.value"})
+    yield catalog
+    catalog.close()
 
 
 TEST_TABLE_IDENTIFIER = ("com", "organization", "department", "my_table")
diff --git a/tests/conftest.py b/tests/conftest.py
index 85c15d3e..9dff4258 100644
--- a/tests/conftest.py
+++ b/tests/conftest.py
@@ -2947,3 +2947,16 @@ def 
pyarrow_table_with_promoted_types(pyarrow_schema_with_promoted_types: "pa.Sc
         },
         schema=pyarrow_schema_with_promoted_types,
     )
+
+
[email protected](scope="session")
+def ray_session() -> Generator[Any, None, None]:
+    """Fixture to manage Ray initialization and shutdown for tests."""
+    import ray
+
+    ray.init(
+        ignore_reinit_error=True,
+        runtime_env={"working_dir": None},  # Prevent Ray from serializing the 
working directory to workers
+    )
+    yield ray
+    ray.shutdown()
diff --git a/tests/integration/test_reads.py b/tests/integration/test_reads.py
index 785037ae..0d52365d 100644
--- a/tests/integration/test_reads.py
+++ b/tests/integration/test_reads.py
@@ -21,6 +21,7 @@ import time
 import uuid
 from datetime import datetime, timedelta
 from pathlib import PosixPath
+from typing import Any
 from urllib.parse import urlparse
 
 import pyarrow as pa
@@ -357,7 +358,7 @@ def test_bodo_nan(catalog: Catalog, monkeypatch: 
pytest.MonkeyPatch) -> None:
 @pytest.mark.integration
 @pytest.mark.filterwarnings("ignore")
 @pytest.mark.parametrize("catalog", 
[pytest.lazy_fixture("session_catalog_hive"), 
pytest.lazy_fixture("session_catalog")])
-def test_ray_nan(catalog: Catalog) -> None:
+def test_ray_nan(catalog: Catalog, ray_session: Any) -> None:
     table_test_null_nan_rewritten = 
catalog.load_table("default.test_null_nan_rewritten")
     ray_dataset = table_test_null_nan_rewritten.scan().to_ray()
     assert ray_dataset.count() == 3
@@ -365,8 +366,9 @@ def test_ray_nan(catalog: Catalog) -> None:
 
 
 @pytest.mark.integration
[email protected]("ignore")
 @pytest.mark.parametrize("catalog", 
[pytest.lazy_fixture("session_catalog_hive"), 
pytest.lazy_fixture("session_catalog")])
-def test_ray_nan_rewritten(catalog: Catalog) -> None:
+def test_ray_nan_rewritten(catalog: Catalog, ray_session: Any) -> None:
     table_test_null_nan_rewritten = 
catalog.load_table("default.test_null_nan_rewritten")
     ray_dataset = table_test_null_nan_rewritten.scan(
         row_filter=IsNaN("col_numeric"), selected_fields=("idx", "col_numeric")
@@ -377,17 +379,19 @@ def test_ray_nan_rewritten(catalog: Catalog) -> None:
 
 
 @pytest.mark.integration
[email protected]("ignore")
 @pytest.mark.parametrize("catalog", 
[pytest.lazy_fixture("session_catalog_hive"), 
pytest.lazy_fixture("session_catalog")])
 @pytest.mark.skip(reason="Fixing issues with NaN's: 
https://github.com/apache/arrow/issues/34162";)
-def test_ray_not_nan_count(catalog: Catalog) -> None:
+def test_ray_not_nan_count(catalog: Catalog, ray_session: Any) -> None:
     table_test_null_nan_rewritten = 
catalog.load_table("default.test_null_nan_rewritten")
     ray_dataset = 
table_test_null_nan_rewritten.scan(row_filter=NotNaN("col_numeric"), 
selected_fields=("idx",)).to_ray()
     assert ray_dataset.count() == 2
 
 
 @pytest.mark.integration
[email protected]("ignore")
 @pytest.mark.parametrize("catalog", 
[pytest.lazy_fixture("session_catalog_hive"), 
pytest.lazy_fixture("session_catalog")])
-def test_ray_all_types(catalog: Catalog) -> None:
+def test_ray_all_types(catalog: Catalog, ray_session: Any) -> None:
     table_test_all_types = catalog.load_table("default.test_all_types")
     ray_dataset = table_test_all_types.scan().to_ray()
     pandas_dataframe = table_test_all_types.scan().to_pandas()
diff --git a/uv.lock b/uv.lock
index a334fdbe..73de11f6 100644
--- a/uv.lock
+++ b/uv.lock
@@ -3846,7 +3846,7 @@ requires-dist = [
     { name = "pyparsing", specifier = ">=3.1.0,<4.0.0" },
     { name = "pyroaring", specifier = ">=1.0.0,<2.0.0" },
     { name = "python-snappy", marker = "extra == 'snappy'", specifier = 
">=0.6.0,<1.0.0" },
-    { name = "ray", marker = "extra == 'ray'", specifier = ">=2.10.0,<=2.44.0" 
},
+    { name = "ray", marker = "extra == 'ray'", specifier = ">=2.10.0,<3.0.0" },
     { name = "requests", specifier = ">=2.20.0,<3.0.0" },
     { name = "rich", specifier = ">=10.11.0,<15.0.0" },
     { name = "s3fs", marker = "extra == 's3fs'", specifier = ">=2023.1.0" },
@@ -4225,13 +4225,11 @@ wheels = [
 
 [[package]]
 name = "ray"
-version = "2.44.0"
+version = "2.53.0"
 source = { registry = "https://pypi.org/simple"; }
 dependencies = [
-    { name = "aiosignal" },
     { name = "click" },
     { name = "filelock" },
-    { name = "frozenlist" },
     { name = "jsonschema" },
     { name = "msgpack" },
     { name = "packaging" },
@@ -4240,21 +4238,21 @@ dependencies = [
     { name = "requests" },
 ]
 wheels = [
-    { url = 
"https://files.pythonhosted.org/packages/63/d6/bee5993f7e4a5de8937047b86e5b6cb486b953a57a67274acf028587e583/ray-2.44.0-cp310-cp310-macosx_10_15_x86_64.whl";,
 hash = 
"sha256:632790c327e6931a7a8ccadde8fd3afaeb73ad382f87df4dd47a52ca8bfe051c", size 
= 68183659, upload-time = "2025-03-21T05:22:57.18Z" },
-    { url = 
"https://files.pythonhosted.org/packages/68/a0/446c510cb613f67a0592522a8e356cd9e1c0cdf4015d4760bc8e2e8d5bfe/ray-2.44.0-cp310-cp310-macosx_11_0_arm64.whl";,
 hash = 
"sha256:5dfbf26b30aec37e5d4425c660145e5520299a8855324686e2f17fc8601bf4c8", size 
= 65482853, upload-time = "2025-03-21T05:23:04.801Z" },
-    { url = 
"https://files.pythonhosted.org/packages/c9/3e/e01fc118a9a77d91d57da0718d8eeaac336034640b53e416c5c576c7b46a/ray-2.44.0-cp310-cp310-manylinux2014_aarch64.whl";,
 hash = 
"sha256:a99fbb9ad2c1af221870d86b8a8e3d59c18a5513adde9d7088a4a275dc59da7f", size 
= 67031809, upload-time = "2025-03-21T05:23:10.944Z" },
-    { url = 
"https://files.pythonhosted.org/packages/bb/81/d17f50b0c995850232df17a3bfc314c462e27bffa990c63a25a021f03855/ray-2.44.0-cp310-cp310-manylinux2014_x86_64.whl";,
 hash = 
"sha256:b4fdbd4b2b5b45e413dc16a19a4abf5000d36c3c5854908dca4697323ff5d7e1", size 
= 67948459, upload-time = "2025-03-21T05:23:16.965Z" },
-    { url = 
"https://files.pythonhosted.org/packages/37/c3/29c94bc274120b666292e07299039a130bf54c351eba0415b2b1aae1ddd8/ray-2.44.0-cp310-cp310-win_amd64.whl";,
 hash = 
"sha256:0258a48e49f531f83a7c65c3482df0c6568491e35ac606a6f651fb4718e49dbb", size 
= 25746862, upload-time = "2025-03-21T05:23:22.252Z" },
-    { url = 
"https://files.pythonhosted.org/packages/11/1c/850cb2ee30444cfbec4cc69d0ae49b54a2bd3dbd6b896535b855f5a5e2a3/ray-2.44.0-cp311-cp311-macosx_10_15_x86_64.whl";,
 hash = 
"sha256:fbe4832cb2efcfc0493ea4742b4828b1eb0dabcfedf87f64be6be1d0ce874c69", size 
= 68146593, upload-time = "2025-03-21T05:23:28.326Z" },
-    { url = 
"https://files.pythonhosted.org/packages/a9/7a/f4cc6da9953b620f7a550850f389bf971ba53820786a47f580ce2e384d3e/ray-2.44.0-cp311-cp311-macosx_11_0_arm64.whl";,
 hash = 
"sha256:5337227dc9f8084280c29456988a244ca9b4ce0fbc7385d73070120f47e46979", size 
= 65444864, upload-time = "2025-03-21T05:23:34.591Z" },
-    { url = 
"https://files.pythonhosted.org/packages/7b/67/c1bf9bce604b5c234f7c2180a851be0dde2a01134183f065b69ea74a0d07/ray-2.44.0-cp311-cp311-manylinux2014_aarch64.whl";,
 hash = 
"sha256:c337237e7a8a1d8702dcf67e0a98ea8cd4ec0357d288bf0816f8990c258d8bc3", size 
= 67171926, upload-time = "2025-03-21T05:23:40.637Z" },
-    { url = 
"https://files.pythonhosted.org/packages/ee/5c/ae371cb53bf7413043629f64278a5156c8588ab10fbd7ac72aa7806d0d16/ray-2.44.0-cp311-cp311-manylinux2014_x86_64.whl";,
 hash = 
"sha256:864f0a69b3cd7ca4eb7043f7f79dc9ce8b71a2c982eeec7f117f48f2846b713c", size 
= 68075001, upload-time = "2025-03-21T05:23:47.093Z" },
-    { url = 
"https://files.pythonhosted.org/packages/35/16/5c280ced4f3f18c30ba69ee9cf5642dd1ede379943bdb520c606f3d7970a/ray-2.44.0-cp311-cp311-win_amd64.whl";,
 hash = 
"sha256:18cef276f2789a3ed22d78274d58803e28defb66ff8d03bdce1ea8b433dea5f8", size 
= 25702733, upload-time = "2025-03-21T05:23:52.396Z" },
-    { url = 
"https://files.pythonhosted.org/packages/f9/2f/15ec0da8b0716b838299760b88b7ffc042ef79d40248a799364eb2ef1b13/ray-2.44.0-cp312-cp312-macosx_10_15_x86_64.whl";,
 hash = 
"sha256:53dc75ea2b4fd869ea4a6cca9de5e02aa24f2f0d18e0a08b8a765ab2be65dd1c", size 
= 68138830, upload-time = "2025-03-21T05:23:57.54Z" },
-    { url = 
"https://files.pythonhosted.org/packages/30/64/77d2839d66058530ca434dd0d5fa4299480644208f1966cdd972f3ada7f6/ray-2.44.0-cp312-cp312-macosx_11_0_arm64.whl";,
 hash = 
"sha256:398e9be193c97f734af019f0eface1f45c94195b96ecc4a647ad607650df572c", size 
= 65431753, upload-time = "2025-03-21T05:24:04.94Z" },
-    { url = 
"https://files.pythonhosted.org/packages/34/5b/fa9a467d2b8b53d04be1743cd7732a5ef98f5227200bb75544cdae0c75eb/ray-2.44.0-cp312-cp312-manylinux2014_aarch64.whl";,
 hash = 
"sha256:2a911e699e483ac4879110b608b06b35e602191c0e7b97326ca497c5caafe6a8", size 
= 67189648, upload-time = "2025-03-21T05:24:11.206Z" },
-    { url = 
"https://files.pythonhosted.org/packages/70/eb/aba1de11b1dda0257599ed04260c9fec9cb3d0e77f4abcac9319db59e60d/ray-2.44.0-cp312-cp312-manylinux2014_x86_64.whl";,
 hash = 
"sha256:0d65ac523801e40a397bbf552f406867bb9469dd261046ca63cdc2ec3110db87", size 
= 68129021, upload-time = "2025-03-21T05:24:17.539Z" },
-    { url = 
"https://files.pythonhosted.org/packages/98/b9/04043b1fa05994b459eb32cd8fcebe495df5558099a705e6dd1e99b76444/ray-2.44.0-cp312-cp312-win_amd64.whl";,
 hash = 
"sha256:9bb3b6df352653c4479325161a0e17e2c6b3278661c69ff842602d7440312af7", size 
= 25682480, upload-time = "2025-03-21T05:24:22.865Z" },
+    { url = 
"https://files.pythonhosted.org/packages/2f/99/21986c7f8135dafbf7c49229c52faaa9d2d365db7d86fffe978dde8ee967/ray-2.53.0-cp310-cp310-macosx_12_0_arm64.whl";,
 hash = 
"sha256:4db914a0a6dd608fa49c066929a1282745a2dbd73caee67d7b80fe684ca65bdd", size 
= 69473649, upload-time = "2025-12-20T16:05:40.58Z" },
+    { url = 
"https://files.pythonhosted.org/packages/70/d9/58b5426a3f11993851db3c93841358cebdddd948153481d355b720f31f9d/ray-2.53.0-cp310-cp310-manylinux2014_aarch64.whl";,
 hash = 
"sha256:4108280d8a1cb90d7d68e5c954c35e63b8bb9a4ba15f88c5e7da0e2025647712", size 
= 71342662, upload-time = "2025-12-20T16:05:46.936Z" },
+    { url = 
"https://files.pythonhosted.org/packages/c5/05/4aa32370b313481c2d1d41cb53ec786daebdb2ef665b01ef2ac43d9cf457/ray-2.53.0-cp310-cp310-manylinux2014_x86_64.whl";,
 hash = 
"sha256:4dbb5fce1364763f29741055f50abe33cf726397141f9cc0e845dd3cc963e455", size 
= 72188620, upload-time = "2025-12-20T16:05:52.817Z" },
+    { url = 
"https://files.pythonhosted.org/packages/f7/c6/21efe5886898421df20078a333b0984eade7d7aa4bdc68a336f0c66db27e/ray-2.53.0-cp310-cp310-win_amd64.whl";,
 hash = 
"sha256:90faf630d20b6abf3135997fb3edb5842134aff92e04ee709865db04816d97ef", size 
= 27200553, upload-time = "2025-12-20T16:05:57.655Z" },
+    { url = 
"https://files.pythonhosted.org/packages/bf/64/d5c29a4b014d8b9a624203a88b67630072c1d6960425dbf7a1f0fa5d6b74/ray-2.53.0-cp311-cp311-macosx_12_0_arm64.whl";,
 hash = 
"sha256:bd3ec4c342776ddac23ae2b108c64f5939f417ccc4875900d586c7c978463269", size 
= 69479296, upload-time = "2025-12-20T16:06:05.111Z" },
+    { url = 
"https://files.pythonhosted.org/packages/c6/41/9e19d1e5d9458a5ba157c36642e2874bcb22fddbd7c1e77b668e5afc3f3d/ray-2.53.0-cp311-cp311-manylinux2014_aarch64.whl";,
 hash = 
"sha256:a0bbb98b0b0f25a3ee075ca10171e1260e70b6bc690cd509ecd7ce1228af854d", size 
= 71463449, upload-time = "2025-12-20T16:06:10.983Z" },
+    { url = 
"https://files.pythonhosted.org/packages/63/de/58c19906b0dd16ea06b4f2465b7327f5f180e6b6e1c8c9b610d7c589ea5f/ray-2.53.0-cp311-cp311-manylinux2014_x86_64.whl";,
 hash = 
"sha256:eb000c17f7301071fdd15c44c4cd3ac0f7953bb4c7c227e61719fe7048195bcd", size 
= 72305102, upload-time = "2025-12-20T16:06:17.989Z" },
+    { url = 
"https://files.pythonhosted.org/packages/b1/43/72cc1cfe17d26abe62a793eab10445f9546dce24192b85a6cd0cdc47ed86/ray-2.53.0-cp311-cp311-win_amd64.whl";,
 hash = 
"sha256:4a1bb3fe09ab4cd0d16ddc96b9f60c9ed83b3f93b87aa8506e0d3b746fd4e825", size 
= 27194174, upload-time = "2025-12-20T16:06:23.042Z" },
+    { url = 
"https://files.pythonhosted.org/packages/b2/44/562718a634e63e8ef7985285288a167d4af62bc2a7decce3300cf937776a/ray-2.53.0-cp312-cp312-macosx_12_0_arm64.whl";,
 hash = 
"sha256:d8b95d047d947493803fb8417aea31225dcacdab15afdc75b8a238901949d457", size 
= 69463763, upload-time = "2025-12-20T16:06:28.685Z" },
+    { url = 
"https://files.pythonhosted.org/packages/38/68/8e59b8413f3751fe7ce8b98ee8787d13964b47a4043587950790a9dd2151/ray-2.53.0-cp312-cp312-manylinux2014_aarch64.whl";,
 hash = 
"sha256:65e2ce58d3dc6baa3cf45824d889c1968ebde565ee54dfd80a98af8f31af8e4a", size 
= 71504450, upload-time = "2025-12-20T16:06:34.922Z" },
+    { url = 
"https://files.pythonhosted.org/packages/2a/db/978a50d264565ca42e2a4bf115ec9a1f04f19ca5e620e6aa2f280747b644/ray-2.53.0-cp312-cp312-manylinux2014_x86_64.whl";,
 hash = 
"sha256:14f46363e9b4cf0c1c8b4d8623ec337c5bd408377831b5e5b50067930137bbca", size 
= 72370424, upload-time = "2025-12-20T16:06:40.821Z" },
+    { url = 
"https://files.pythonhosted.org/packages/8d/6c/bba6f22a9d83ee8f236000ba315f0c197bdc79888b4fa42fd762f729cbbd/ray-2.53.0-cp312-cp312-win_amd64.whl";,
 hash = 
"sha256:b828c147f9ff2f277b1d254e4fe9a746fdfaee7e313a93a97c7edf4dae9b81a4", size 
= 27178106, upload-time = "2025-12-20T16:06:45.594Z" },
+    { url = 
"https://files.pythonhosted.org/packages/3d/38/450cf9cf3c490fa4cc6d470597f819444da60f85579d2b34b95ee79fcb6f/ray-2.53.0-cp313-cp313-macosx_12_0_arm64.whl";,
 hash = 
"sha256:85b472ab6fb8f1189f8cef81913fd91b24dd69b3fa7dcca7e144827bd924f6c0", size 
= 69409819, upload-time = "2025-12-20T16:06:50.668Z" },
+    { url = 
"https://files.pythonhosted.org/packages/71/5e/d452970b07174d5e4f8688abae889d01321b51ced827db1f1d1cb7d56d44/ray-2.53.0-cp313-cp313-manylinux2014_aarch64.whl";,
 hash = 
"sha256:7196e5358dfcc8211be864f45e6dfe4827202df294af3c7a76ff8fbc080e0522", size 
= 71409529, upload-time = "2025-12-20T16:06:56.2Z" },
+    { url = 
"https://files.pythonhosted.org/packages/cb/84/50b317a125617a638a64694c12f56183edd5df01828a35fa4c55c7b13c66/ray-2.53.0-cp313-cp313-manylinux2014_x86_64.whl";,
 hash = 
"sha256:73dbbaa7962a7f5e38aa8cf9483e0e9817205e989aa3dc859c738c2af1ae01df", size 
= 72283961, upload-time = "2025-12-20T16:07:05.831Z" },
 ]
 
 [[package]]

Reply via email to