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

Gerrrr pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/otava.git


The following commit(s) were added to refs/heads/master by this push:
     new 1ceb153  Build multi-platform Docker images (amd64 + arm64) (#149)
1ceb153 is described below

commit 1ceb1537a49d516cf6cef9a79bea6926002082f8
Author: Alex Sorokoumov <[email protected]>
AuthorDate: Wed Apr 22 14:15:20 2026 -0700

    Build multi-platform Docker images (amd64 + arm64) (#149)
    
    * Build multi-platform Docker images (amd64 + arm64)
    
    The docker buildx build command had no --platform flag, so images were
    built only for the host architecture. This caused examples to fail on
    amd64 when the published image was arm64-only.
    
    - Add --platform linux/amd64,linux/arm64 to buildx commands in tox.ini
    - Add QEMU and Buildx setup steps to CI workflow
    - Simplify tox docker-push to push directly to Dockerhub
    - Update RELEASE.md to use tox -e docker-push
    -  Bump numpy version for 3.14 to avoid building numpy within amd64 
container.
---
 .github/workflows/python-app.yml |   6 +++
 Dockerfile                       |  16 ++-----
 docs/RELEASE.md                  |  16 ++-----
 pyproject.toml                   |   7 ++-
 tox.ini                          |  16 ++-----
 uv.lock                          | 100 +++++++++++++++++++++++++++++++++++++--
 6 files changed, 121 insertions(+), 40 deletions(-)

diff --git a/.github/workflows/python-app.yml b/.github/workflows/python-app.yml
index 4ecd00a..4d43097 100644
--- a/.github/workflows/python-app.yml
+++ b/.github/workflows/python-app.yml
@@ -61,6 +61,12 @@ jobs:
     steps:
       - uses: actions/checkout@v4
 
+      - name: Set up QEMU
+        uses: 
docker/setup-qemu-action@ce360397dd3f832beb865e1373c09c0e9f86d70a # v4.0.0
+
+      - name: Set up Docker Buildx
+        uses: 
docker/setup-buildx-action@4d04d5d9486b7bd6fa91e7baf45bbb4f8b9deedd # v4.0.0
+
       - name: Set up Python
         uses: actions/setup-python@v5
         with:
diff --git a/Dockerfile b/Dockerfile
index 406d588..1f67460 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -56,19 +56,11 @@ RUN addgroup -g 8192 otava && \
 COPY --from=builder /usr/local/bin/uv /usr/local/bin/uv
 COPY --from=builder /build/dist/*.whl /tmp/
 
-# Install build dependencies, install the wheel, then remove build tools
-RUN apk add --no-cache --virtual .build-deps \
-    gcc \
-    g++ \
-    musl-dev \
-    python3-dev \
-    libffi-dev \
-    openblas-dev \
-    gfortran \
-    && apk add --no-cache libstdc++ openblas \
-    && uv pip install --system --no-cache /tmp/apache_otava-*.whl \
+# Install the wheel and remove temporary artifacts.
+# With the slim runtime image this should resolve binary dependencies from
+# prebuilt wheels instead of compiling NumPy/SciPy from source.
+RUN uv pip install --system --no-cache /tmp/apache_otava-*.whl \
     && rm /tmp/apache_otava-*.whl \
-    && apk del .build-deps \
     && rm /usr/local/bin/uv
 
 # Switch to otava user
diff --git a/docs/RELEASE.md b/docs/RELEASE.md
index b5eb1a6..61bb699 100644
--- a/docs/RELEASE.md
+++ b/docs/RELEASE.md
@@ -411,23 +411,17 @@ twine upload --verbose  
apache_otava-$RELEASE_VERSION-py3-none-any.whl apache_ot
 
 ### Publish Docker Image
 
-Build the image:
+Ensure you have a multi-platform builder set up:
 
 ```bash
-uv run tox -e docker-build
+docker buildx create --name multiplatform --use || docker buildx use 
multiplatform
 ```
 
-Tag the image:
+Log in to Dockerhub and build and push the multi-platform image:
 
 ```bash
-docker tag apache/otava:latest apache/otava:$RELEASE_VERSION-incubating
-```
-
-Push the image to Dockerhub:
-
-```bash
-docker push apache/otava:$RELEASE_VERSION-incubating
-docker push apache/otava:latest
+docker login
+RELEASE_VERSION=$RELEASE_VERSION-incubating uv run tox -e docker-push
 ```
 
 ### Remove old release candidates from dist.apache.org
diff --git a/pyproject.toml b/pyproject.toml
index 6d5d61a..83f79be 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -38,7 +38,12 @@ classifiers = [
 ]
 dependencies = [
     "dateparser>=1.0.0",
-    "numpy==2.2.0.*",
+
+    # NumPy 2.2.x supports Python 3.10–3.13, while Python 3.14 requires a
+    # newer NumPy release to get prebuilt wheels on all supported platforms.
+    "numpy==2.2.0.*; python_version < '3.14'",
+    "numpy>=2.3.2,<2.4; python_version >= '3.14'",
+
     "python-dateutil>=2.9.0",
     "ruamel.yaml==0.18.16",
     "requests>=2.32.5",
diff --git a/tox.ini b/tox.ini
index d628acd..62beada 100644
--- a/tox.ini
+++ b/tox.ini
@@ -67,8 +67,8 @@ commands =
     pre-commit run --all-files --hook-stage pre-push insert-license
 
 # docker-build and docker-push environments; docker-push requires
-# RELEASE_VERSION (x.y.z), DOCKER_REGISTRY, DOCKER_REGISTRY_CREDS_USR and
-# DOCKER_REGISTR_CREDS_PSW to be set
+# RELEASE_VERSION (e.g. 0.7.0-incubating) to be set.
+# Log in to Dockerhub (docker login) before running docker-push.
 [testenv:docker-{build,push}]
 skip_install = true
 allowlist_externals =
@@ -77,21 +77,13 @@ allowlist_externals =
 passenv =
     SSH_AUTH_SOCK
     RELEASE_VERSION
-    DOCKER_REGISTRY
-    DOCKER_REGISTRY_CREDS_USR
-    DOCKER_REGISTRY_CREDS_PSW
 setenv =
     DOCKER_BUILDKIT=1
     DOCKER_PROJECT=apache/otava
     UV_OPTS = -v
 commands =
-    docker buildx build --tag {env:DOCKER_PROJECT}:latest .
-    push: docker image tag {env:DOCKER_PROJECT}:latest 
{env:DOCKER_PROJECT}:{env:RELEASE_VERSION}
-    push: docker image tag {env:DOCKER_PROJECT}:{env:RELEASE_VERSION} 
{env:DOCKER_REGISTRY}/{env:DOCKER_PROJECT}:{env:RELEASE_VERSION}
-    push: docker image tag {env:DOCKER_PROJECT}:latest 
{env:DOCKER_REGISTRY}/{env:DOCKER_PROJECT}:latest
-    push: docker login -u {env:DOCKER_REGISTRY_CREDS_USR} -p 
{env:DOCKER_REGISTRY_CREDS_PSW} {env:DOCKER_REGISTRY}
-    push: docker image push 
{env:DOCKER_REGISTRY}/{env:DOCKER_PROJECT}:{env:RELEASE_VERSION}
-    push: docker image push {env:DOCKER_REGISTRY}/{env:DOCKER_PROJECT}:latest
+    build: docker buildx build --platform linux/amd64,linux/arm64 --tag 
{env:DOCKER_PROJECT}:latest .
+    push: docker buildx build --platform linux/amd64,linux/arm64 --tag 
{env:DOCKER_PROJECT}:{env:RELEASE_VERSION} --tag {env:DOCKER_PROJECT}:latest 
--push .
 
 [pytest]
 # Ensure we do not include BUILD_DIR by explicitly specifying where to search 
for tests
diff --git a/uv.lock b/uv.lock
index 3a70288..60b7f14 100644
--- a/uv.lock
+++ b/uv.lock
@@ -16,7 +16,8 @@ dependencies = [
     { name = "configargparse" },
     { name = "dateparser" },
     { name = "google-cloud-bigquery" },
-    { name = "numpy" },
+    { name = "numpy", version = "2.2.0", source = { registry = 
"https://pypi.org/simple"; }, marker = "python_full_version < '3.14'" },
+    { name = "numpy", version = "2.3.5", source = { registry = 
"https://pypi.org/simple"; }, marker = "python_full_version >= '3.14'" },
     { name = "pg8000" },
     { name = "pystache" },
     { name = "python-dateutil" },
@@ -50,7 +51,8 @@ requires-dist = [
     { name = "flake8", marker = "extra == 'dev'", specifier = ">=7.3.0" },
     { name = "google-cloud-bigquery", specifier = ">=3.38.0" },
     { name = "isort", marker = "extra == 'dev'", specifier = ">=7.0.0" },
-    { name = "numpy", specifier = "==2.2.0.*" },
+    { name = "numpy", marker = "python_full_version < '3.14'", specifier = 
"==2.2.0.*" },
+    { name = "numpy", marker = "python_full_version >= '3.14'", specifier = 
">=2.3.2,<2.4" },
     { name = "pg8000", specifier = ">=1.31.5" },
     { name = "pre-commit", marker = "extra == 'dev'", specifier = "==4.5.0" },
     { name = "pystache", specifier = ">=0.6.8" },
@@ -553,6 +555,11 @@ wheels = [
 name = "numpy"
 version = "2.2.0"
 source = { registry = "https://pypi.org/simple"; }
+resolution-markers = [
+    "python_full_version == '3.13.*'",
+    "python_full_version >= '3.11' and python_full_version < '3.13'",
+    "python_full_version < '3.11'",
+]
 sdist = { url = 
"https://files.pythonhosted.org/packages/47/1b/1d565e0f6e156e1522ab564176b8b29d71e13d8caf003a08768df3d5cec5/numpy-2.2.0.tar.gz";,
 hash = 
"sha256:140dd80ff8981a583a60980be1a655068f8adebf7a45a06a6858c873fcdcd4a0", size 
= 20225497, upload-time = "2024-12-08T15:45:53.828Z" }
 wheels = [
     { url = 
"https://files.pythonhosted.org/packages/c7/81/3882353e097204fe4d7a5fe026b694b0104b78f930c969faadeed1538e00/numpy-2.2.0-cp310-cp310-macosx_10_9_x86_64.whl";,
 hash = 
"sha256:1e25507d85da11ff5066269d0bd25d06e0a0f2e908415534f3e603d2a78e4ffa", size 
= 21212476, upload-time = "2024-12-08T15:20:47.292Z" },
@@ -611,6 +618,90 @@ wheels = [
     { url = 
"https://files.pythonhosted.org/packages/67/17/209bda34fc83f3436834392f44643e66dcf3c77465f232102e7f1c7d8eae/numpy-2.2.0-pp310-pypy310_pp73-win_amd64.whl";,
 hash = 
"sha256:df12a1f99b99f569a7c2ae59aa2d31724e8d835fc7f33e14f4792e3071d11221", size 
= 12819486, upload-time = "2024-12-08T15:41:05.529Z" },
 ]
 
+[[package]]
+name = "numpy"
+version = "2.3.5"
+source = { registry = "https://pypi.org/simple"; }
+resolution-markers = [
+    "python_full_version >= '3.14'",
+]
+sdist = { url = 
"https://files.pythonhosted.org/packages/76/65/21b3bc86aac7b8f2862db1e808f1ea22b028e30a225a34a5ede9bf8678f2/numpy-2.3.5.tar.gz";,
 hash = 
"sha256:784db1dcdab56bf0517743e746dfb0f885fc68d948aba86eeec2cba234bdf1c0", size 
= 20584950, upload-time = "2025-11-16T22:52:42.067Z" }
+wheels = [
+    { url = 
"https://files.pythonhosted.org/packages/43/77/84dd1d2e34d7e2792a236ba180b5e8fcc1e3e414e761ce0253f63d7f572e/numpy-2.3.5-cp311-cp311-macosx_10_9_x86_64.whl";,
 hash = 
"sha256:de5672f4a7b200c15a4127042170a694d4df43c992948f5e1af57f0174beed10", size 
= 17034641, upload-time = "2025-11-16T22:49:19.336Z" },
+    { url = 
"https://files.pythonhosted.org/packages/2a/ea/25e26fa5837106cde46ae7d0b667e20f69cbbc0efd64cba8221411ab26ae/numpy-2.3.5-cp311-cp311-macosx_11_0_arm64.whl";,
 hash = 
"sha256:acfd89508504a19ed06ef963ad544ec6664518c863436306153e13e94605c218", size 
= 12528324, upload-time = "2025-11-16T22:49:22.582Z" },
+    { url = 
"https://files.pythonhosted.org/packages/4d/1a/e85f0eea4cf03d6a0228f5c0256b53f2df4bc794706e7df019fc622e47f1/numpy-2.3.5-cp311-cp311-macosx_14_0_arm64.whl";,
 hash = 
"sha256:ffe22d2b05504f786c867c8395de703937f934272eb67586817b46188b4ded6d", size 
= 5356872, upload-time = "2025-11-16T22:49:25.408Z" },
+    { url = 
"https://files.pythonhosted.org/packages/5c/bb/35ef04afd567f4c989c2060cde39211e4ac5357155c1833bcd1166055c61/numpy-2.3.5-cp311-cp311-macosx_14_0_x86_64.whl";,
 hash = 
"sha256:872a5cf366aec6bb1147336480fef14c9164b154aeb6542327de4970282cd2f5", size 
= 6893148, upload-time = "2025-11-16T22:49:27.549Z" },
+    { url = 
"https://files.pythonhosted.org/packages/f2/2b/05bbeb06e2dff5eab512dfc678b1cc5ee94d8ac5956a0885c64b6b26252b/numpy-2.3.5-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl";,
 hash = 
"sha256:3095bdb8dd297e5920b010e96134ed91d852d81d490e787beca7e35ae1d89cf7", size 
= 14557282, upload-time = "2025-11-16T22:49:30.964Z" },
+    { url = 
"https://files.pythonhosted.org/packages/65/fb/2b23769462b34398d9326081fad5655198fcf18966fcb1f1e49db44fbf31/numpy-2.3.5-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl";,
 hash = 
"sha256:8cba086a43d54ca804ce711b2a940b16e452807acebe7852ff327f1ecd49b0d4", size 
= 16897903, upload-time = "2025-11-16T22:49:34.191Z" },
+    { url = 
"https://files.pythonhosted.org/packages/ac/14/085f4cf05fc3f1e8aa95e85404e984ffca9b2275a5dc2b1aae18a67538b8/numpy-2.3.5-cp311-cp311-musllinux_1_2_aarch64.whl";,
 hash = 
"sha256:6cf9b429b21df6b99f4dee7a1218b8b7ffbbe7df8764dc0bd60ce8a0708fed1e", size 
= 16341672, upload-time = "2025-11-16T22:49:37.2Z" },
+    { url = 
"https://files.pythonhosted.org/packages/6f/3b/1f73994904142b2aa290449b3bb99772477b5fd94d787093e4f24f5af763/numpy-2.3.5-cp311-cp311-musllinux_1_2_x86_64.whl";,
 hash = 
"sha256:396084a36abdb603546b119d96528c2f6263921c50df3c8fd7cb28873a237748", size 
= 18838896, upload-time = "2025-11-16T22:49:39.727Z" },
+    { url = 
"https://files.pythonhosted.org/packages/cd/b9/cf6649b2124f288309ffc353070792caf42ad69047dcc60da85ee85fea58/numpy-2.3.5-cp311-cp311-win32.whl";,
 hash = 
"sha256:b0c7088a73aef3d687c4deef8452a3ac7c1be4e29ed8bf3b366c8111128ac60c", size 
= 6563608, upload-time = "2025-11-16T22:49:42.079Z" },
+    { url = 
"https://files.pythonhosted.org/packages/aa/44/9fe81ae1dcc29c531843852e2874080dc441338574ccc4306b39e2ff6e59/numpy-2.3.5-cp311-cp311-win_amd64.whl";,
 hash = 
"sha256:a414504bef8945eae5f2d7cb7be2d4af77c5d1cb5e20b296c2c25b61dff2900c", size 
= 13078442, upload-time = "2025-11-16T22:49:43.99Z" },
+    { url = 
"https://files.pythonhosted.org/packages/6d/a7/f99a41553d2da82a20a2f22e93c94f928e4490bb447c9ff3c4ff230581d3/numpy-2.3.5-cp311-cp311-win_arm64.whl";,
 hash = 
"sha256:0cd00b7b36e35398fa2d16af7b907b65304ef8bb4817a550e06e5012929830fa", size 
= 10458555, upload-time = "2025-11-16T22:49:47.092Z" },
+    { url = 
"https://files.pythonhosted.org/packages/44/37/e669fe6cbb2b96c62f6bbedc6a81c0f3b7362f6a59230b23caa673a85721/numpy-2.3.5-cp312-cp312-macosx_10_13_x86_64.whl";,
 hash = 
"sha256:74ae7b798248fe62021dbf3c914245ad45d1a6b0cb4a29ecb4b31d0bfbc4cc3e", size 
= 16733873, upload-time = "2025-11-16T22:49:49.84Z" },
+    { url = 
"https://files.pythonhosted.org/packages/c5/65/df0db6c097892c9380851ab9e44b52d4f7ba576b833996e0080181c0c439/numpy-2.3.5-cp312-cp312-macosx_11_0_arm64.whl";,
 hash = 
"sha256:ee3888d9ff7c14604052b2ca5535a30216aa0a58e948cdd3eeb8d3415f638769", size 
= 12259838, upload-time = "2025-11-16T22:49:52.863Z" },
+    { url = 
"https://files.pythonhosted.org/packages/5b/e1/1ee06e70eb2136797abe847d386e7c0e830b67ad1d43f364dd04fa50d338/numpy-2.3.5-cp312-cp312-macosx_14_0_arm64.whl";,
 hash = 
"sha256:612a95a17655e213502f60cfb9bf9408efdc9eb1d5f50535cc6eb365d11b42b5", size 
= 5088378, upload-time = "2025-11-16T22:49:55.055Z" },
+    { url = 
"https://files.pythonhosted.org/packages/6d/9c/1ca85fb86708724275103b81ec4cf1ac1d08f465368acfc8da7ab545bdae/numpy-2.3.5-cp312-cp312-macosx_14_0_x86_64.whl";,
 hash = 
"sha256:3101e5177d114a593d79dd79658650fe28b5a0d8abeb8ce6f437c0e6df5be1a4", size 
= 6628559, upload-time = "2025-11-16T22:49:57.371Z" },
+    { url = 
"https://files.pythonhosted.org/packages/74/78/fcd41e5a0ce4f3f7b003da85825acddae6d7ecb60cf25194741b036ca7d6/numpy-2.3.5-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl";,
 hash = 
"sha256:8b973c57ff8e184109db042c842423ff4f60446239bd585a5131cc47f06f789d", size 
= 14250702, upload-time = "2025-11-16T22:49:59.632Z" },
+    { url = 
"https://files.pythonhosted.org/packages/b6/23/2a1b231b8ff672b4c450dac27164a8b2ca7d9b7144f9c02d2396518352eb/numpy-2.3.5-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl";,
 hash = 
"sha256:0d8163f43acde9a73c2a33605353a4f1bc4798745a8b1d73183b28e5b435ae28", size 
= 16606086, upload-time = "2025-11-16T22:50:02.127Z" },
+    { url = 
"https://files.pythonhosted.org/packages/a0/c5/5ad26fbfbe2012e190cc7d5003e4d874b88bb18861d0829edc140a713021/numpy-2.3.5-cp312-cp312-musllinux_1_2_aarch64.whl";,
 hash = 
"sha256:51c1e14eb1e154ebd80e860722f9e6ed6ec89714ad2db2d3aa33c31d7c12179b", size 
= 16025985, upload-time = "2025-11-16T22:50:04.536Z" },
+    { url = 
"https://files.pythonhosted.org/packages/d2/fa/dd48e225c46c819288148d9d060b047fd2a6fb1eb37eae25112ee4cb4453/numpy-2.3.5-cp312-cp312-musllinux_1_2_x86_64.whl";,
 hash = 
"sha256:b46b4ec24f7293f23adcd2d146960559aaf8020213de8ad1909dba6c013bf89c", size 
= 18542976, upload-time = "2025-11-16T22:50:07.557Z" },
+    { url = 
"https://files.pythonhosted.org/packages/05/79/ccbd23a75862d95af03d28b5c6901a1b7da4803181513d52f3b86ed9446e/numpy-2.3.5-cp312-cp312-win32.whl";,
 hash = 
"sha256:3997b5b3c9a771e157f9aae01dd579ee35ad7109be18db0e85dbdbe1de06e952", size 
= 6285274, upload-time = "2025-11-16T22:50:10.746Z" },
+    { url = 
"https://files.pythonhosted.org/packages/2d/57/8aeaf160312f7f489dea47ab61e430b5cb051f59a98ae68b7133ce8fa06a/numpy-2.3.5-cp312-cp312-win_amd64.whl";,
 hash = 
"sha256:86945f2ee6d10cdfd67bcb4069c1662dd711f7e2a4343db5cecec06b87cf31aa", size 
= 12782922, upload-time = "2025-11-16T22:50:12.811Z" },
+    { url = 
"https://files.pythonhosted.org/packages/78/a6/aae5cc2ca78c45e64b9ef22f089141d661516856cf7c8a54ba434576900d/numpy-2.3.5-cp312-cp312-win_arm64.whl";,
 hash = 
"sha256:f28620fe26bee16243be2b7b874da327312240a7cdc38b769a697578d2100013", size 
= 10194667, upload-time = "2025-11-16T22:50:16.16Z" },
+    { url = 
"https://files.pythonhosted.org/packages/db/69/9cde09f36da4b5a505341180a3f2e6fadc352fd4d2b7096ce9778db83f1a/numpy-2.3.5-cp313-cp313-macosx_10_13_x86_64.whl";,
 hash = 
"sha256:d0f23b44f57077c1ede8c5f26b30f706498b4862d3ff0a7298b8411dd2f043ff", size 
= 16728251, upload-time = "2025-11-16T22:50:19.013Z" },
+    { url = 
"https://files.pythonhosted.org/packages/79/fb/f505c95ceddd7027347b067689db71ca80bd5ecc926f913f1a23e65cf09b/numpy-2.3.5-cp313-cp313-macosx_11_0_arm64.whl";,
 hash = 
"sha256:aa5bc7c5d59d831d9773d1170acac7893ce3a5e130540605770ade83280e7188", size 
= 12254652, upload-time = "2025-11-16T22:50:21.487Z" },
+    { url = 
"https://files.pythonhosted.org/packages/78/da/8c7738060ca9c31b30e9301ee0cf6c5ffdbf889d9593285a1cead337f9a5/numpy-2.3.5-cp313-cp313-macosx_14_0_arm64.whl";,
 hash = 
"sha256:ccc933afd4d20aad3c00bcef049cb40049f7f196e0397f1109dba6fed63267b0", size 
= 5083172, upload-time = "2025-11-16T22:50:24.562Z" },
+    { url = 
"https://files.pythonhosted.org/packages/a4/b4/ee5bb2537fb9430fd2ef30a616c3672b991a4129bb1c7dcc42aa0abbe5d7/numpy-2.3.5-cp313-cp313-macosx_14_0_x86_64.whl";,
 hash = 
"sha256:afaffc4393205524af9dfa400fa250143a6c3bc646c08c9f5e25a9f4b4d6a903", size 
= 6622990, upload-time = "2025-11-16T22:50:26.47Z" },
+    { url = 
"https://files.pythonhosted.org/packages/95/03/dc0723a013c7d7c19de5ef29e932c3081df1c14ba582b8b86b5de9db7f0f/numpy-2.3.5-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl";,
 hash = 
"sha256:9c75442b2209b8470d6d5d8b1c25714270686f14c749028d2199c54e29f20b4d", size 
= 14248902, upload-time = "2025-11-16T22:50:28.861Z" },
+    { url = 
"https://files.pythonhosted.org/packages/f5/10/ca162f45a102738958dcec8023062dad0cbc17d1ab99d68c4e4a6c45fb2b/numpy-2.3.5-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl";,
 hash = 
"sha256:11e06aa0af8c0f05104d56450d6093ee639e15f24ecf62d417329d06e522e017", size 
= 16597430, upload-time = "2025-11-16T22:50:31.56Z" },
+    { url = 
"https://files.pythonhosted.org/packages/2a/51/c1e29be863588db58175175f057286900b4b3327a1351e706d5e0f8dd679/numpy-2.3.5-cp313-cp313-musllinux_1_2_aarch64.whl";,
 hash = 
"sha256:ed89927b86296067b4f81f108a2271d8926467a8868e554eaf370fc27fa3ccaf", size 
= 16024551, upload-time = "2025-11-16T22:50:34.242Z" },
+    { url = 
"https://files.pythonhosted.org/packages/83/68/8236589d4dbb87253d28259d04d9b814ec0ecce7cb1c7fed29729f4c3a78/numpy-2.3.5-cp313-cp313-musllinux_1_2_x86_64.whl";,
 hash = 
"sha256:51c55fe3451421f3a6ef9a9c1439e82101c57a2c9eab9feb196a62b1a10b58ce", size 
= 18533275, upload-time = "2025-11-16T22:50:37.651Z" },
+    { url = 
"https://files.pythonhosted.org/packages/40/56/2932d75b6f13465239e3b7b7e511be27f1b8161ca2510854f0b6e521c395/numpy-2.3.5-cp313-cp313-win32.whl";,
 hash = 
"sha256:1978155dd49972084bd6ef388d66ab70f0c323ddee6f693d539376498720fb7e", size 
= 6277637, upload-time = "2025-11-16T22:50:40.11Z" },
+    { url = 
"https://files.pythonhosted.org/packages/0c/88/e2eaa6cffb115b85ed7c7c87775cb8bcf0816816bc98ca8dbfa2ee33fe6e/numpy-2.3.5-cp313-cp313-win_amd64.whl";,
 hash = 
"sha256:00dc4e846108a382c5869e77c6ed514394bdeb3403461d25a829711041217d5b", size 
= 12779090, upload-time = "2025-11-16T22:50:42.503Z" },
+    { url = 
"https://files.pythonhosted.org/packages/8f/88/3f41e13a44ebd4034ee17baa384acac29ba6a4fcc2aca95f6f08ca0447d1/numpy-2.3.5-cp313-cp313-win_arm64.whl";,
 hash = 
"sha256:0472f11f6ec23a74a906a00b48a4dcf3849209696dff7c189714511268d103ae", size 
= 10194710, upload-time = "2025-11-16T22:50:44.971Z" },
+    { url = 
"https://files.pythonhosted.org/packages/13/cb/71744144e13389d577f867f745b7df2d8489463654a918eea2eeb166dfc9/numpy-2.3.5-cp313-cp313t-macosx_10_13_x86_64.whl";,
 hash = 
"sha256:414802f3b97f3c1eef41e530aaba3b3c1620649871d8cb38c6eaff034c2e16bd", size 
= 16827292, upload-time = "2025-11-16T22:50:47.715Z" },
+    { url = 
"https://files.pythonhosted.org/packages/71/80/ba9dc6f2a4398e7f42b708a7fdc841bb638d353be255655498edbf9a15a8/numpy-2.3.5-cp313-cp313t-macosx_11_0_arm64.whl";,
 hash = 
"sha256:5ee6609ac3604fa7780e30a03e5e241a7956f8e2fcfe547d51e3afa5247ac47f", size 
= 12378897, upload-time = "2025-11-16T22:50:51.327Z" },
+    { url = 
"https://files.pythonhosted.org/packages/2e/6d/db2151b9f64264bcceccd51741aa39b50150de9b602d98ecfe7e0c4bff39/numpy-2.3.5-cp313-cp313t-macosx_14_0_arm64.whl";,
 hash = 
"sha256:86d835afea1eaa143012a2d7a3f45a3adce2d7adc8b4961f0b362214d800846a", size 
= 5207391, upload-time = "2025-11-16T22:50:54.542Z" },
+    { url = 
"https://files.pythonhosted.org/packages/80/ae/429bacace5ccad48a14c4ae5332f6aa8ab9f69524193511d60ccdfdc65fa/numpy-2.3.5-cp313-cp313t-macosx_14_0_x86_64.whl";,
 hash = 
"sha256:30bc11310e8153ca664b14c5f1b73e94bd0503681fcf136a163de856f3a50139", size 
= 6721275, upload-time = "2025-11-16T22:50:56.794Z" },
+    { url = 
"https://files.pythonhosted.org/packages/74/5b/1919abf32d8722646a38cd527bc3771eb229a32724ee6ba340ead9b92249/numpy-2.3.5-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl";,
 hash = 
"sha256:1062fde1dcf469571705945b0f221b73928f34a20c904ffb45db101907c3454e", size 
= 14306855, upload-time = "2025-11-16T22:50:59.208Z" },
+    { url = 
"https://files.pythonhosted.org/packages/a5/87/6831980559434973bebc30cd9c1f21e541a0f2b0c280d43d3afd909b66d0/numpy-2.3.5-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl";,
 hash = 
"sha256:ce581db493ea1a96c0556360ede6607496e8bf9b3a8efa66e06477267bc831e9", size 
= 16657359, upload-time = "2025-11-16T22:51:01.991Z" },
+    { url = 
"https://files.pythonhosted.org/packages/dd/91/c797f544491ee99fd00495f12ebb7802c440c1915811d72ac5b4479a3356/numpy-2.3.5-cp313-cp313t-musllinux_1_2_aarch64.whl";,
 hash = 
"sha256:cc8920d2ec5fa99875b670bb86ddeb21e295cb07aa331810d9e486e0b969d946", size 
= 16093374, upload-time = "2025-11-16T22:51:05.291Z" },
+    { url = 
"https://files.pythonhosted.org/packages/74/a6/54da03253afcbe7a72785ec4da9c69fb7a17710141ff9ac5fcb2e32dbe64/numpy-2.3.5-cp313-cp313t-musllinux_1_2_x86_64.whl";,
 hash = 
"sha256:9ee2197ef8c4f0dfe405d835f3b6a14f5fee7782b5de51ba06fb65fc9b36e9f1", size 
= 18594587, upload-time = "2025-11-16T22:51:08.585Z" },
+    { url = 
"https://files.pythonhosted.org/packages/80/e9/aff53abbdd41b0ecca94285f325aff42357c6b5abc482a3fcb4994290b18/numpy-2.3.5-cp313-cp313t-win32.whl";,
 hash = 
"sha256:70b37199913c1bd300ff6e2693316c6f869c7ee16378faf10e4f5e3275b299c3", size 
= 6405940, upload-time = "2025-11-16T22:51:11.541Z" },
+    { url = 
"https://files.pythonhosted.org/packages/d5/81/50613fec9d4de5480de18d4f8ef59ad7e344d497edbef3cfd80f24f98461/numpy-2.3.5-cp313-cp313t-win_amd64.whl";,
 hash = 
"sha256:b501b5fa195cc9e24fe102f21ec0a44dffc231d2af79950b451e0d99cea02234", size 
= 12920341, upload-time = "2025-11-16T22:51:14.312Z" },
+    { url = 
"https://files.pythonhosted.org/packages/bb/ab/08fd63b9a74303947f34f0bd7c5903b9c5532c2d287bead5bdf4c556c486/numpy-2.3.5-cp313-cp313t-win_arm64.whl";,
 hash = 
"sha256:a80afd79f45f3c4a7d341f13acbe058d1ca8ac017c165d3fa0d3de6bc1a079d7", size 
= 10262507, upload-time = "2025-11-16T22:51:16.846Z" },
+    { url = 
"https://files.pythonhosted.org/packages/ba/97/1a914559c19e32d6b2e233cf9a6a114e67c856d35b1d6babca571a3e880f/numpy-2.3.5-cp314-cp314-macosx_10_15_x86_64.whl";,
 hash = 
"sha256:bf06bc2af43fa8d32d30fae16ad965663e966b1a3202ed407b84c989c3221e82", size 
= 16735706, upload-time = "2025-11-16T22:51:19.558Z" },
+    { url = 
"https://files.pythonhosted.org/packages/57/d4/51233b1c1b13ecd796311216ae417796b88b0616cfd8a33ae4536330748a/numpy-2.3.5-cp314-cp314-macosx_11_0_arm64.whl";,
 hash = 
"sha256:052e8c42e0c49d2575621c158934920524f6c5da05a1d3b9bab5d8e259e045f0", size 
= 12264507, upload-time = "2025-11-16T22:51:22.492Z" },
+    { url = 
"https://files.pythonhosted.org/packages/45/98/2fe46c5c2675b8306d0b4a3ec3494273e93e1226a490f766e84298576956/numpy-2.3.5-cp314-cp314-macosx_14_0_arm64.whl";,
 hash = 
"sha256:1ed1ec893cff7040a02c8aa1c8611b94d395590d553f6b53629a4461dc7f7b63", size 
= 5093049, upload-time = "2025-11-16T22:51:25.171Z" },
+    { url = 
"https://files.pythonhosted.org/packages/ce/0e/0698378989bb0ac5f1660c81c78ab1fe5476c1a521ca9ee9d0710ce54099/numpy-2.3.5-cp314-cp314-macosx_14_0_x86_64.whl";,
 hash = 
"sha256:2dcd0808a421a482a080f89859a18beb0b3d1e905b81e617a188bd80422d62e9", size 
= 6626603, upload-time = "2025-11-16T22:51:27Z" },
+    { url = 
"https://files.pythonhosted.org/packages/5e/a6/9ca0eecc489640615642a6cbc0ca9e10df70df38c4d43f5a928ff18d8827/numpy-2.3.5-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl";,
 hash = 
"sha256:727fd05b57df37dc0bcf1a27767a3d9a78cbbc92822445f32cc3436ba797337b", size 
= 14262696, upload-time = "2025-11-16T22:51:29.402Z" },
+    { url = 
"https://files.pythonhosted.org/packages/c8/f6/07ec185b90ec9d7217a00eeeed7383b73d7e709dae2a9a021b051542a708/numpy-2.3.5-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl";,
 hash = 
"sha256:fffe29a1ef00883599d1dc2c51aa2e5d80afe49523c261a74933df395c15c520", size 
= 16597350, upload-time = "2025-11-16T22:51:32.167Z" },
+    { url = 
"https://files.pythonhosted.org/packages/75/37/164071d1dde6a1a84c9b8e5b414fa127981bad47adf3a6b7e23917e52190/numpy-2.3.5-cp314-cp314-musllinux_1_2_aarch64.whl";,
 hash = 
"sha256:8f7f0e05112916223d3f438f293abf0727e1181b5983f413dfa2fefc4098245c", size 
= 16040190, upload-time = "2025-11-16T22:51:35.403Z" },
+    { url = 
"https://files.pythonhosted.org/packages/08/3c/f18b82a406b04859eb026d204e4e1773eb41c5be58410f41ffa511d114ae/numpy-2.3.5-cp314-cp314-musllinux_1_2_x86_64.whl";,
 hash = 
"sha256:2e2eb32ddb9ccb817d620ac1d8dae7c3f641c1e5f55f531a33e8ab97960a75b8", size 
= 18536749, upload-time = "2025-11-16T22:51:39.698Z" },
+    { url = 
"https://files.pythonhosted.org/packages/40/79/f82f572bf44cf0023a2fe8588768e23e1592585020d638999f15158609e1/numpy-2.3.5-cp314-cp314-win32.whl";,
 hash = 
"sha256:66f85ce62c70b843bab1fb14a05d5737741e74e28c7b8b5a064de10142fad248", size 
= 6335432, upload-time = "2025-11-16T22:51:42.476Z" },
+    { url = 
"https://files.pythonhosted.org/packages/a3/2e/235b4d96619931192c91660805e5e49242389742a7a82c27665021db690c/numpy-2.3.5-cp314-cp314-win_amd64.whl";,
 hash = 
"sha256:e6a0bc88393d65807d751a614207b7129a310ca4fe76a74e5c7da5fa5671417e", size 
= 12919388, upload-time = "2025-11-16T22:51:45.275Z" },
+    { url = 
"https://files.pythonhosted.org/packages/07/2b/29fd75ce45d22a39c61aad74f3d718e7ab67ccf839ca8b60866054eb15f8/numpy-2.3.5-cp314-cp314-win_arm64.whl";,
 hash = 
"sha256:aeffcab3d4b43712bb7a60b65f6044d444e75e563ff6180af8f98dd4b905dfd2", size 
= 10476651, upload-time = "2025-11-16T22:51:47.749Z" },
+    { url = 
"https://files.pythonhosted.org/packages/17/e1/f6a721234ebd4d87084cfa68d081bcba2f5cfe1974f7de4e0e8b9b2a2ba1/numpy-2.3.5-cp314-cp314t-macosx_10_15_x86_64.whl";,
 hash = 
"sha256:17531366a2e3a9e30762c000f2c43a9aaa05728712e25c11ce1dbe700c53ad41", size 
= 16834503, upload-time = "2025-11-16T22:51:50.443Z" },
+    { url = 
"https://files.pythonhosted.org/packages/5c/1c/baf7ffdc3af9c356e1c135e57ab7cf8d247931b9554f55c467efe2c69eff/numpy-2.3.5-cp314-cp314t-macosx_11_0_arm64.whl";,
 hash = 
"sha256:d21644de1b609825ede2f48be98dfde4656aefc713654eeee280e37cadc4e0ad", size 
= 12381612, upload-time = "2025-11-16T22:51:53.609Z" },
+    { url = 
"https://files.pythonhosted.org/packages/74/91/f7f0295151407ddc9ba34e699013c32c3c91944f9b35fcf9281163dc1468/numpy-2.3.5-cp314-cp314t-macosx_14_0_arm64.whl";,
 hash = 
"sha256:c804e3a5aba5460c73955c955bdbd5c08c354954e9270a2c1565f62e866bdc39", size 
= 5210042, upload-time = "2025-11-16T22:51:56.213Z" },
+    { url = 
"https://files.pythonhosted.org/packages/2e/3b/78aebf345104ec50dd50a4d06ddeb46a9ff5261c33bcc58b1c4f12f85ec2/numpy-2.3.5-cp314-cp314t-macosx_14_0_x86_64.whl";,
 hash = 
"sha256:cc0a57f895b96ec78969c34f682c602bf8da1a0270b09bc65673df2e7638ec20", size 
= 6724502, upload-time = "2025-11-16T22:51:58.584Z" },
+    { url = 
"https://files.pythonhosted.org/packages/02/c6/7c34b528740512e57ef1b7c8337ab0b4f0bddf34c723b8996c675bc2bc91/numpy-2.3.5-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl";,
 hash = 
"sha256:900218e456384ea676e24ea6a0417f030a3b07306d29d7ad843957b40a9d8d52", size 
= 14308962, upload-time = "2025-11-16T22:52:01.698Z" },
+    { url = 
"https://files.pythonhosted.org/packages/80/35/09d433c5262bc32d725bafc619e095b6a6651caf94027a03da624146f655/numpy-2.3.5-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl";,
 hash = 
"sha256:09a1bea522b25109bf8e6f3027bd810f7c1085c64a0c7ce050c1676ad0ba010b", size 
= 16655054, upload-time = "2025-11-16T22:52:04.267Z" },
+    { url = 
"https://files.pythonhosted.org/packages/7a/ab/6a7b259703c09a88804fa2430b43d6457b692378f6b74b356155283566ac/numpy-2.3.5-cp314-cp314t-musllinux_1_2_aarch64.whl";,
 hash = 
"sha256:04822c00b5fd0323c8166d66c701dc31b7fbd252c100acd708c48f763968d6a3", size 
= 16091613, upload-time = "2025-11-16T22:52:08.651Z" },
+    { url = 
"https://files.pythonhosted.org/packages/c2/88/330da2071e8771e60d1038166ff9d73f29da37b01ec3eb43cb1427464e10/numpy-2.3.5-cp314-cp314t-musllinux_1_2_x86_64.whl";,
 hash = 
"sha256:d6889ec4ec662a1a37eb4b4fb26b6100841804dac55bd9df579e326cdc146227", size 
= 18591147, upload-time = "2025-11-16T22:52:11.453Z" },
+    { url = 
"https://files.pythonhosted.org/packages/51/41/851c4b4082402d9ea860c3626db5d5df47164a712cb23b54be028b184c1c/numpy-2.3.5-cp314-cp314t-win32.whl";,
 hash = 
"sha256:93eebbcf1aafdf7e2ddd44c2923e2672e1010bddc014138b229e49725b4d6be5", size 
= 6479806, upload-time = "2025-11-16T22:52:14.641Z" },
+    { url = 
"https://files.pythonhosted.org/packages/90/30/d48bde1dfd93332fa557cff1972fbc039e055a52021fbef4c2c4b1eefd17/numpy-2.3.5-cp314-cp314t-win_amd64.whl";,
 hash = 
"sha256:c8a9958e88b65c3b27e22ca2a076311636850b612d6bbfb76e8d156aacde2aaf", size 
= 13105760, upload-time = "2025-11-16T22:52:17.975Z" },
+    { url = 
"https://files.pythonhosted.org/packages/2d/fd/4b5eb0b3e888d86aee4d198c23acec7d214baaf17ea93c1adec94c9518b9/numpy-2.3.5-cp314-cp314t-win_arm64.whl";,
 hash = 
"sha256:6203fdf9f3dc5bdaed7319ad8698e685c7a3be10819f41d32a0723e611733b42", size 
= 10545459, upload-time = "2025-11-16T22:52:20.55Z" },
+    { url = 
"https://files.pythonhosted.org/packages/c6/65/f9dea8e109371ade9c782b4e4756a82edf9d3366bca495d84d79859a0b79/numpy-2.3.5-pp311-pypy311_pp73-macosx_10_15_x86_64.whl";,
 hash = 
"sha256:f0963b55cdd70fad460fa4c1341f12f976bb26cb66021a5580329bd498988310", size 
= 16910689, upload-time = "2025-11-16T22:52:23.247Z" },
+    { url = 
"https://files.pythonhosted.org/packages/00/4f/edb00032a8fb92ec0a679d3830368355da91a69cab6f3e9c21b64d0bb986/numpy-2.3.5-pp311-pypy311_pp73-macosx_11_0_arm64.whl";,
 hash = 
"sha256:f4255143f5160d0de972d28c8f9665d882b5f61309d8362fdd3e103cf7bf010c", size 
= 12457053, upload-time = "2025-11-16T22:52:26.367Z" },
+    { url = 
"https://files.pythonhosted.org/packages/16/a4/e8a53b5abd500a63836a29ebe145fc1ab1f2eefe1cfe59276020373ae0aa/numpy-2.3.5-pp311-pypy311_pp73-macosx_14_0_arm64.whl";,
 hash = 
"sha256:a4b9159734b326535f4dd01d947f919c6eefd2d9827466a696c44ced82dfbc18", size 
= 5285635, upload-time = "2025-11-16T22:52:29.266Z" },
+    { url = 
"https://files.pythonhosted.org/packages/a3/2f/37eeb9014d9c8b3e9c55bc599c68263ca44fdbc12a93e45a21d1d56df737/numpy-2.3.5-pp311-pypy311_pp73-macosx_14_0_x86_64.whl";,
 hash = 
"sha256:2feae0d2c91d46e59fcd62784a3a83b3fb677fead592ce51b5a6fbb4f95965ff", size 
= 6801770, upload-time = "2025-11-16T22:52:31.421Z" },
+    { url = 
"https://files.pythonhosted.org/packages/7d/e4/68d2f474df2cb671b2b6c2986a02e520671295647dad82484cde80ca427b/numpy-2.3.5-pp311-pypy311_pp73-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl";,
 hash = 
"sha256:ffac52f28a7849ad7576293c0cb7b9f08304e8f7d738a8cb8a90ec4c55a998eb", size 
= 14391768, upload-time = "2025-11-16T22:52:33.593Z" },
+    { url = 
"https://files.pythonhosted.org/packages/b8/50/94ccd8a2b141cb50651fddd4f6a48874acb3c91c8f0842b08a6afc4b0b21/numpy-2.3.5-pp311-pypy311_pp73-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl";,
 hash = 
"sha256:63c0e9e7eea69588479ebf4a8a270d5ac22763cc5854e9a7eae952a3908103f7", size 
= 16729263, upload-time = "2025-11-16T22:52:36.369Z" },
+    { url = 
"https://files.pythonhosted.org/packages/2d/ee/346fa473e666fe14c52fcdd19ec2424157290a032d4c41f98127bfb31ac7/numpy-2.3.5-pp311-pypy311_pp73-win_amd64.whl";,
 hash = 
"sha256:f16417ec91f12f814b10bafe79ef77e70113a2f5f7018640e7425ff979253425", size 
= 12967213, upload-time = "2025-11-16T22:52:39.38Z" },
+]
+
 [[package]]
 name = "packaging"
 version = "25.0"
@@ -1123,7 +1214,7 @@ resolution-markers = [
     "python_full_version < '3.11'",
 ]
 dependencies = [
-    { name = "numpy", marker = "python_full_version < '3.11'" },
+    { name = "numpy", version = "2.2.0", source = { registry = 
"https://pypi.org/simple"; }, marker = "python_full_version < '3.11'" },
 ]
 sdist = { url = 
"https://files.pythonhosted.org/packages/0f/37/6964b830433e654ec7485e45a00fc9a27cf868d622838f6b6d9c5ec0d532/scipy-1.15.3.tar.gz";,
 hash = 
"sha256:eae3cf522bc7df64b42cad3925c876e1b0b6c35c1337c93e12c0f366f55b0eaf", size 
= 59419214, upload-time = "2025-05-08T16:13:05.955Z" }
 wheels = [
@@ -1184,7 +1275,8 @@ resolution-markers = [
     "python_full_version >= '3.11' and python_full_version < '3.13'",
 ]
 dependencies = [
-    { name = "numpy", marker = "python_full_version >= '3.11'" },
+    { name = "numpy", version = "2.2.0", source = { registry = 
"https://pypi.org/simple"; }, marker = "python_full_version >= '3.11' and 
python_full_version < '3.14'" },
+    { name = "numpy", version = "2.3.5", source = { registry = 
"https://pypi.org/simple"; }, marker = "python_full_version >= '3.14'" },
 ]
 sdist = { url = 
"https://files.pythonhosted.org/packages/0a/ca/d8ace4f98322d01abcd52d381134344bf7b431eba7ed8b42bdea5a3c2ac9/scipy-1.16.3.tar.gz";,
 hash = 
"sha256:01e87659402762f43bd2fee13370553a17ada367d42e7487800bf2916535aecb", size 
= 30597883, upload-time = "2025-10-28T17:38:54.068Z" }
 wheels = [

Reply via email to