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

potiuk pushed a commit to branch v3-3-test
in repository https://gitbox.apache.org/repos/asf/airflow.git


The following commit(s) were added to refs/heads/v3-3-test by this push:
     new ebca37fd955 [v3-3-test] Keep not-ready providers out of the all extra 
(#71165) (#71167)
ebca37fd955 is described below

commit ebca37fd955ee683e5a019bc5a67d06fc8495d14
Author: Jarek Potiuk <[email protected]>
AuthorDate: Wed Aug 5 17:43:27 2026 +0800

    [v3-3-test] Keep not-ready providers out of the all extra (#71165) (#71167)
    
    A not-ready provider has never been published, so naming it in an extra 
makes
    that extra impossible to satisfy - there is no version on PyPI to resolve 
to.
    It broke constraints generation for 3.3.1rc1, where apache-airflow[all] 
could
    not resolve because it required apache-airflow-providers-ibm-mq.
    
    Only the extras change. The source tree still holds those providers, so they
    stay in the workspace and under mypy - which is how CI installs and checks 
them.
    (cherry picked from commit fb459dec5072051563d1924b57fa6f85fb265381)
---
 .github/workflows/additional-ci-image-checks.yml   |  17 +-
 .github/workflows/refresh-image-cache.yml          | 136 +++++++++
 dev/breeze/tests/test_selective_checks.py          |  38 +++
 .../providers/apache/kafka/plugins/__init__.py     |  16 +
 .../providers/openai/example_dags/__init__.py      |  16 +
 pyproject.toml                                     |   4 -
 scripts/ci/prek/common_prek_utils.py               |  17 +-
 scripts/ci/prek/update_airflow_pyproject_toml.py   |  20 +-
 uv.lock                                            | 338 ++++++++++-----------
 9 files changed, 415 insertions(+), 187 deletions(-)

diff --git a/.github/workflows/additional-ci-image-checks.yml 
b/.github/workflows/additional-ci-image-checks.yml
index d0a4cb55fa6..051fbd02029 100644
--- a/.github/workflows/additional-ci-image-checks.yml
+++ b/.github/workflows/additional-ci-image-checks.yml
@@ -91,15 +91,18 @@ jobs:
   # We only push CI cache as PROD cache usually does not gain as much from 
fresh cache because
   # it uses prepared airflow and provider distributions that invalidate the 
cache anyway most of the time
   #
-  # Runs on `push` as well, not only on the scheduled canary. Release branches 
(`v*-*-test`) are built
-  # by `push` only, and their other refresh path -- the Regular cache push in 
`finalize-tests.yml` -- sits
-  # behind the whole test matrix. A branch that is red therefore never 
refreshes its cache at all, and the
-  # staler the cache gets the slower it is to turn green again. `main` is 
unaffected either way: it is not
-  # built on push, so it keeps refreshing through the scheduled canary.
+  # Only for the scheduled canary and manual dispatch -- both of which run to 
completion. Push events
+  # are refreshed by `refresh-image-cache.yml` instead: this workflow is part 
of the CI run, which
+  # cancels in progress on the next push, and a cache refresh that keeps being 
cancelled leaves the
+  # branch building cold forever (see that workflow's header for the loop it 
broke).
   #
   # Pull requests stay excluded -- `canary-run` is also true for a PR carrying 
the `canary` label, and
   # pushing cache from an unmerged branch is not something a label should 
authorise. This is the same
   # condition the Regular cache push uses.
+  #
+  # Both paths cover every Python version: `refresh-image-cache.yml` forces 
it, and on `schedule` /
+  # `workflow_dispatch` selective checks always resolves `python-versions` to 
all of them
+  # (`_should_run_all_tests_and_versions`), which 
`test_all_python_versions_on_scheduled_canary` pins.
   push-early-buildx-cache-to-github-registry:
     name: Push Early Image Cache
     uses: ./.github/workflows/push-image-cache.yml
@@ -121,7 +124,9 @@ jobs:
       include-success-outputs: ${{ inputs.include-success-outputs }}
       docker-cache: ${{ inputs.docker-cache }}
       disable-airflow-repo-cache: ${{ inputs.disable-airflow-repo-cache }}
-    if: inputs.canary-run == 'true' && github.event_name != 'pull_request'
+    if: >
+      inputs.canary-run == 'true' && github.event_name != 'pull_request'
+      && github.event_name != 'push'
 
   # Check that after earlier cache push, breeze command will build quickly
   # This build is a bit slow from in-the scratch builds, so we should run it 
only in
diff --git a/.github/workflows/refresh-image-cache.yml 
b/.github/workflows/refresh-image-cache.yml
new file mode 100644
index 00000000000..43e9e5facd4
--- /dev/null
+++ b/.github/workflows/refresh-image-cache.yml
@@ -0,0 +1,136 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+#
+---
+name: Refresh image cache
+# Refreshes the CI image cache in the GitHub registry, in its own workflow run.
+#
+# It lives outside `ci-amd.yml` / `ci-arm.yml` because those cancel in 
progress runs on the next
+# push (`cancel-in-progress: true`), and a cache refresh is precisely the job 
that must not be
+# cancelled: a branch with no cache builds cold (~20 minutes per Python 
version), which widens the
+# window in which the next push cancels the run, which leaves the cache 
missing. `v3-3-test` sat in
+# exactly that loop -- its `linux/amd64` cache existed for the default Python 
version only, because
+# that was the single matrix entry that finished before the next push killed 
the rest.
+#
+# Cancelling here would recreate the loop, so this workflow does not cancel. A 
newer run queues
+# behind the one in flight instead of replacing it.
+on:  # yamllint disable-line rule:truthy
+  workflow_dispatch:
+    inputs:
+      platform:
+        description: "Platform to refresh the cache for"
+        type: choice
+        options:
+          - "both"
+          - "linux/amd64"
+          - "linux/arm64"
+        default: "both"
+  push:
+    # Release-prep and providers branches only. `main` refreshes its cache 
through the scheduled
+    # canary in `ci-amd.yml` / `ci-arm.yml`, which nothing cancels -- it is 
not built on push.
+    branches:
+      - v[0-9]+-[0-9]+-test
+      - providers-[a-z]+-?[a-z]*/v[0-9]+-[0-9]+
+permissions:
+  contents: read
+concurrency:
+  group: refresh-image-cache-${{ github.ref }}
+  cancel-in-progress: false
+jobs:
+  build-info:
+    name: "Build info"
+    # No outputs yet at this stage, so the runner has to be hard-coded to a 
public one.
+    runs-on: ["ubuntu-22.04"]
+    outputs:
+      default-branch: ${{ steps.selective-checks.outputs.default-branch }}
+      default-constraints-branch: ${{ 
steps.selective-checks.outputs.default-constraints-branch }}
+      disable-airflow-repo-cache: ${{ 
steps.selective-checks.outputs.disable-airflow-repo-cache }}
+      docker-cache: ${{ steps.selective-checks.outputs.docker-cache }}
+      include-success-outputs: ${{ 
steps.selective-checks.outputs.include-success-outputs }}
+      python-versions: ${{ steps.selective-checks.outputs.python-versions }}
+      use-uv: ${{ steps.selective-checks.outputs.force-pip == 'true' && 
'false' || 'true' }}
+    steps:
+      - name: "Cleanup repo"
+        shell: bash
+        run: sudo rm -rf ${GITHUB_WORKSPACE}/*
+      - name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )"
+        uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1  # 
v7.0.1
+        with:
+          persist-credentials: false
+      - name: "Install Breeze"
+        uses: ./.github/actions/breeze
+      - name: Selective checks
+        id: selective-checks
+        env:
+          # A cache is only useful for the Python versions that are actually 
built, so the refresh
+          # always covers all of them. Selective checks would otherwise narrow 
`python-versions`
+          # down to the default one -- on a push where only text files changed 
it does exactly
+          # that (`_should_run_all_tests_and_versions`), which is the other 
way a branch ends up
+          # with cache for one Python version and nothing for the rest.
+          PR_LABELS: '["all versions"]'
+          COMMIT_REF: "${{ github.sha }}"
+          VERBOSE: "false"
+        run: breeze ci selective-check 2>> ${GITHUB_OUTPUT}
+
+  refresh-ci-cache-amd:
+    name: "Refresh cache linux/amd64"
+    needs: [build-info]
+    uses: ./.github/workflows/push-image-cache.yml
+    permissions:
+      contents: read
+      # Only granted for `push` / `workflow_dispatch` on apache/airflow 
itself, never for forks.
+      packages: write
+    with:
+      runners: '["ubuntu-22.04"]'
+      platform: "linux/amd64"
+      cache-type: "Refresh"
+      # PROD cache is built from distributions prepared earlier in a CI run, 
which a standalone
+      # refresh has no artifact for. CI cache is also where the build time 
actually goes.
+      include-prod-images: "false"
+      # `latest` is what CI pulls when it has no cache at all; moving it 
belongs to a full canary
+      # run that ran the tests, not to a cache refresh.
+      push-latest-images: "false"
+      python-versions: ${{ needs.build-info.outputs.python-versions }}
+      branch: ${{ needs.build-info.outputs.default-branch }}
+      constraints-branch: ${{ 
needs.build-info.outputs.default-constraints-branch }}
+      use-uv: ${{ needs.build-info.outputs.use-uv }}
+      include-success-outputs: ${{ 
needs.build-info.outputs.include-success-outputs }}
+      docker-cache: ${{ needs.build-info.outputs.docker-cache }}
+      disable-airflow-repo-cache: ${{ 
needs.build-info.outputs.disable-airflow-repo-cache }}
+    if: inputs.platform == 'both' || inputs.platform == 'linux/amd64' || 
github.event_name == 'push'
+
+  refresh-ci-cache-arm:
+    name: "Refresh cache linux/arm64"
+    needs: [build-info]
+    uses: ./.github/workflows/push-image-cache.yml
+    permissions:
+      contents: read
+      packages: write
+    with:
+      runners: '["ubuntu-22.04-arm"]'
+      platform: "linux/arm64"
+      cache-type: "Refresh"
+      include-prod-images: "false"
+      push-latest-images: "false"
+      python-versions: ${{ needs.build-info.outputs.python-versions }}
+      branch: ${{ needs.build-info.outputs.default-branch }}
+      constraints-branch: ${{ 
needs.build-info.outputs.default-constraints-branch }}
+      use-uv: ${{ needs.build-info.outputs.use-uv }}
+      include-success-outputs: ${{ 
needs.build-info.outputs.include-success-outputs }}
+      docker-cache: ${{ needs.build-info.outputs.docker-cache }}
+      disable-airflow-repo-cache: ${{ 
needs.build-info.outputs.disable-airflow-repo-cache }}
+    if: inputs.platform == 'both' || inputs.platform == 'linux/arm64' || 
github.event_name == 'push'
diff --git a/dev/breeze/tests/test_selective_checks.py 
b/dev/breeze/tests/test_selective_checks.py
index b0ff2703d46..535d4786934 100644
--- a/dev/breeze/tests/test_selective_checks.py
+++ b/dev/breeze/tests/test_selective_checks.py
@@ -27,6 +27,7 @@ from rich.console import Console
 from airflow_breeze.global_constants import (
     ALLOWED_KUBERNETES_VERSIONS,
     ALLOWED_PYTHON_MAJOR_MINOR_VERSIONS,
+    CURRENT_PYTHON_MAJOR_MINOR_VERSIONS,
     DEFAULT_KUBERNETES_VERSION,
     DEFAULT_PYTHON_MAJOR_MINOR_VERSION,
     JAVA_SDK_VERSION,
@@ -55,6 +56,9 @@ ALL_KUBERNETES_VERSIONS_AS_STRING = " 
".join(ALLOWED_KUBERNETES_VERSIONS)
 ALL_KUBERNETES_VERSIONS_AS_LIST = "[" + ", ".join([f"'{v}'" for v in 
ALLOWED_KUBERNETES_VERSIONS]) + "]"
 ALL_PYTHON_VERSIONS_AS_STRING = " ".join(ALLOWED_PYTHON_MAJOR_MINOR_VERSIONS)
 ALL_PYTHON_VERSIONS_AS_LIST = "[" + ", ".join([f"'{v}'" for v in 
ALLOWED_PYTHON_MAJOR_MINOR_VERSIONS]) + "]"
+CURRENT_PYTHON_VERSIONS_AS_LIST = (
+    "[" + ", ".join([f"'{v}'" for v in CURRENT_PYTHON_MAJOR_MINOR_VERSIONS]) + 
"]"
+)
 
 DEFAULT_HELM_K8S_VERSION = ALLOWED_KUBERNETES_VERSIONS[0].lstrip("v")
 LAST_HELM_K8S_VERSION = ALLOWED_KUBERNETES_VERSIONS[-1].lstrip("v")
@@ -2692,6 +2696,40 @@ def 
test_no_commit_provided_trigger_full_build_for_any_event_type(mock_get, gith
     )
 
 
+# The image cache is pushed for `python-versions`, so a narrowed list leaves 
the remaining
+# versions with no cache at all and they build cold on every run. The two 
tests below pin the
+# two paths that refresh it: the canary in `additional-ci-image-checks.yml` 
and the standalone
+# `refresh-image-cache.yml`.
+
+
[email protected](
+    "github_event",
+    [GithubEvents.SCHEDULE, GithubEvents.WORKFLOW_DISPATCH],
+)
+def test_all_python_versions_on_scheduled_canary(github_event):
+    """Only a `push` may narrow to the default version on a text-only change; 
the canary may not."""
+    stderr = SelectiveChecks(
+        files=("INTHEWILD.md",),
+        commit_ref=NEUTRAL_COMMIT,
+        github_event=github_event,
+        pr_labels=(),
+        default_branch="main",
+    )
+    assert_outputs_are_printed({"python-versions": 
CURRENT_PYTHON_VERSIONS_AS_LIST}, str(stderr))
+
+
+def test_all_python_versions_with_all_versions_label():
+    """`refresh-image-cache.yml` forces this label, on the event that would 
otherwise narrow."""
+    stderr = SelectiveChecks(
+        files=("INTHEWILD.md",),
+        commit_ref=NEUTRAL_COMMIT,
+        github_event=GithubEvents.PUSH,
+        pr_labels=("all versions",),
+        default_branch="main",
+    )
+    assert_outputs_are_printed({"python-versions": 
CURRENT_PYTHON_VERSIONS_AS_LIST}, str(stderr))
+
+
 @pytest.mark.parametrize(
     "github_event",
     [
diff --git 
a/providers/apache/kafka/src/airflow/providers/apache/kafka/plugins/__init__.py 
b/providers/apache/kafka/src/airflow/providers/apache/kafka/plugins/__init__.py
new file mode 100644
index 00000000000..13a83393a91
--- /dev/null
+++ 
b/providers/apache/kafka/src/airflow/providers/apache/kafka/plugins/__init__.py
@@ -0,0 +1,16 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
diff --git 
a/providers/openai/src/airflow/providers/openai/example_dags/__init__.py 
b/providers/openai/src/airflow/providers/openai/example_dags/__init__.py
new file mode 100644
index 00000000000..13a83393a91
--- /dev/null
+++ b/providers/openai/src/airflow/providers/openai/example_dags/__init__.py
@@ -0,0 +1,16 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
diff --git a/pyproject.toml b/pyproject.toml
index 19b006906ca..ce33605869e 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -251,9 +251,6 @@ apache-airflow = "airflow.__main__:main"
 "http" = [
     "apache-airflow-providers-http>=4.13.2"
 ]
-"ibm.mq" = [
-    "apache-airflow-providers-ibm-mq>=0.1.0; platform_machine !=\"aarch64\" 
and platform_machine !=\"arm64\""
-]
 "imap" = [
     "apache-airflow-providers-imap>=3.8.0"
 ]
@@ -458,7 +455,6 @@ apache-airflow = "airflow.__main__:main"
     "apache-airflow-providers-grpc>=3.7.0",
     "apache-airflow-providers-hashicorp>=4.0.0",
     "apache-airflow-providers-http>=4.13.2",
-    "apache-airflow-providers-ibm-mq>=0.1.0; platform_machine !=\"aarch64\" 
and platform_machine !=\"arm64\"",
     "apache-airflow-providers-imap>=3.8.0",
     "apache-airflow-providers-influxdb>=2.8.0",
     "apache-airflow-providers-informatica>=0.1.1",
diff --git a/scripts/ci/prek/common_prek_utils.py 
b/scripts/ci/prek/common_prek_utils.py
index 5574294e39e..61b914c891f 100644
--- a/scripts/ci/prek/common_prek_utils.py
+++ b/scripts/ci/prek/common_prek_utils.py
@@ -588,19 +588,30 @@ def get_provider_base_dir_from_path(file_path: Path) -> 
Path | None:
     return None
 
 
-def get_all_provider_ids(exclude_suspended_providers: bool = False) -> 
list[str]:
+def get_all_provider_ids(
+    exclude_suspended_providers: bool = False, exclude_not_ready_providers: 
bool = False
+) -> list[str]:
     """
     Get all providers from the new provider structure
+
+    :param exclude_suspended_providers: skip providers whose state is 
``suspended``
+    :param exclude_not_ready_providers: skip providers whose state is 
``not-ready`` - those have
+        never been published, so anything describing what is installable must 
leave them out
     """
     all_provider_ids = []
+    excluded_states = set()
+    if exclude_suspended_providers:
+        excluded_states.add("suspended")
+    if exclude_not_ready_providers:
+        excluded_states.add("not-ready")
     for provider_file in AIRFLOW_PROVIDERS_ROOT_PATH.rglob("provider.yaml"):
         if provider_file.is_relative_to(AIRFLOW_PROVIDERS_ROOT_PATH / "src"):
             continue
-        if exclude_suspended_providers:
+        if excluded_states:
             import yaml
 
             provider_info = yaml.safe_load(provider_file.read_text())
-            if provider_info.get("state") == "suspended":
+            if provider_info.get("state") in excluded_states:
                 continue
         provider_id = get_provider_id_from_path(provider_file)
         if provider_id:
diff --git a/scripts/ci/prek/update_airflow_pyproject_toml.py 
b/scripts/ci/prek/update_airflow_pyproject_toml.py
index 2313790e0a5..f66a3d7ba5d 100755
--- a/scripts/ci/prek/update_airflow_pyproject_toml.py
+++ b/scripts/ci/prek/update_airflow_pyproject_toml.py
@@ -269,9 +269,20 @@ if __name__ == "__main__":
             all_optional_dependencies.append(f'"{optional}" = [\n    
"apache-airflow-core[{optional}]"\n]\n')
     optional_airflow_task_sdk_dependencies = 
get_optional_dependencies(AIRFLOW_TASK_SDK_PYPROJECT_TOML_FILE)
     all_optional_dependencies.append('"all-task-sdk" = [\n    
"apache-airflow-task-sdk[all]"\n]\n')
+    # Two lists, because the sections below describe two different things.
+    #
+    # `all_providers` describes the source tree: mypy has to type-check a 
not-ready provider and uv
+    # has to keep it in the workspace, which is how CI installs it. Only 
suspended providers drop out.
+    #
+    # `released_providers` describes what is installable from PyPI. A 
not-ready provider has never
+    # been published, so naming it in an extra makes that extra unsatisfiable 
- there is no version
+    # of it to resolve to.
     all_providers = 
sorted(get_all_provider_ids(exclude_suspended_providers=True))
+    released_providers = sorted(
+        get_all_provider_ids(exclude_suspended_providers=True, 
exclude_not_ready_providers=True)
+    )
     all_provider_lines = []
-    for provider_id in all_providers:
+    for provider_id in released_providers:
         distribution_name = provider_distribution_name(provider_id)
         min_provider_version, comment = find_min_provider_version(provider_id)
         exclusion_marker = 
get_exclusion_marker(all_providers_dependencies.get(provider_id, {}))
@@ -288,10 +299,15 @@ if __name__ == "__main__":
             all_provider_lines.append(f'    "{distribution_name}",\n')
     all_optional_dependencies.append('"all" = [\n')
     optional_apache_airflow_dependencies = 
get_optional_dependencies(AIRFLOW_PYPROJECT_TOML_FILE)
+    # Filtered against every provider id rather than against `all_providers`: 
a provider left out of
+    # `all_providers` still has an extra named after it, and testing only 
against the included ones
+    # would sweep that extra in here instead of dropping it - which is how a 
not-ready provider would
+    # come back into `all` through the side door.
+    every_provider_id = set(get_all_provider_ids())
     all_local_extras = [
         extra
         for extra in sorted(optional_apache_airflow_dependencies)
-        if extra not in all_providers and not extra.startswith("all")
+        if extra not in every_provider_id and not extra.startswith("all")
     ]
     all_optional_dependencies.append(f'    
"apache-airflow[{",".join(all_local_extras)}]",\n')
     all_optional_dependencies.append('    "apache-airflow-core[all]",\n')
diff --git a/uv.lock b/uv.lock
index 36ead8dbe94..b339636011f 100644
--- a/uv.lock
+++ b/uv.lock
@@ -333,7 +333,7 @@ name = "adbc-driver-manager"
 version = "1.11.0"
 source = { registry = "https://pypi.org/simple"; }
 dependencies = [
-    { name = "typing-extensions", marker = "python_full_version < '3.13'" },
+    { name = "typing-extensions" },
 ]
 sdist = { url = 
"https://files.pythonhosted.org/packages/e9/5e/50aab18cb501e42d3aca3cd2cc26c6637094fcaf5b6576e350c444188f1f/adbc_driver_manager-1.11.0.tar.gz";,
 hash = 
"sha256:c64aaabeb5810109ab3d2961008f1b014e9f2d87b3df4416c2a080a40237af50", size 
= 233059, upload-time = "2026-04-07T00:17:28.263Z" }
 wheels = [
@@ -378,8 +378,8 @@ name = "adbc-driver-postgresql"
 version = "1.11.0"
 source = { registry = "https://pypi.org/simple"; }
 dependencies = [
-    { name = "adbc-driver-manager", marker = "python_full_version < '3.13'" },
-    { name = "importlib-resources", marker = "python_full_version < '3.13'" },
+    { name = "adbc-driver-manager" },
+    { name = "importlib-resources" },
 ]
 sdist = { url = 
"https://files.pythonhosted.org/packages/68/10/2962c25035887cd03af3b348eac3302493936f45048c220021a802d07f12/adbc_driver_postgresql-1.11.0.tar.gz";,
 hash = 
"sha256:f5688b8648ac7a86d8b89340231bb3686ac5df56ee95d1ca0b875dad5d52b48a", size 
= 32328, upload-time = "2026-04-07T00:17:29.232Z" }
 wheels = [
@@ -395,8 +395,8 @@ name = "adbc-driver-sqlite"
 version = "1.11.0"
 source = { registry = "https://pypi.org/simple"; }
 dependencies = [
-    { name = "adbc-driver-manager", marker = "python_full_version < '3.13'" },
-    { name = "importlib-resources", marker = "python_full_version < '3.13'" },
+    { name = "adbc-driver-manager" },
+    { name = "importlib-resources" },
 ]
 sdist = { url = 
"https://files.pythonhosted.org/packages/3a/dd/8a5f4908aa4bdec64dcd672734fa314d692517458ce169591639d0123fe1/adbc_driver_sqlite-1.11.0.tar.gz";,
 hash = 
"sha256:a4c6b4962610f7cd67cd754c42dd74e18a2c11fabeec9488c5501d73ae62dc62", size 
= 28885, upload-time = "2026-04-07T00:17:31.325Z" }
 wheels = [
@@ -459,7 +459,7 @@ resolution-markers = [
     "(python_full_version < '3.11' and platform_machine != 'arm64') or 
(python_full_version < '3.11' and sys_platform != 'darwin')",
 ]
 dependencies = [
-    { name = "caio", marker = "python_full_version < '3.11'" },
+    { name = "caio" },
 ]
 sdist = { url = 
"https://files.pythonhosted.org/packages/67/e2/d7cb819de8df6b5c1968a2756c3cb4122d4fa2b8fc768b53b7c9e5edb646/aiofile-3.9.0.tar.gz";,
 hash = 
"sha256:e5ad718bb148b265b6df1b3752c4d1d83024b93da9bd599df74b9d9ffcf7919b", size 
= 17943, upload-time = "2024-10-08T10:39:35.846Z" }
 wheels = [
@@ -491,7 +491,7 @@ resolution-markers = [
     "(python_full_version == '3.11.*' and platform_machine != 'arm64' and 
sys_platform == 'darwin') or (python_full_version == '3.11.*' and sys_platform 
!= 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32')",
 ]
 dependencies = [
-    { name = "caio", marker = "python_full_version >= '3.11'" },
+    { name = "caio" },
 ]
 sdist = { url = 
"https://files.pythonhosted.org/packages/48/41/2fea7e193e061ce54eacc3b7bc0e6a99e4fcff43c78cf0a76dd781ed8334/aiofile-3.11.1.tar.gz";,
 hash = 
"sha256:1f91912c6643d2a4e49ca4ae3514f0bf3867ce948a36d99a6411b8f4755f4cf9", size 
= 19342, upload-time = "2026-05-16T08:18:33.538Z" }
 wheels = [
@@ -658,7 +658,7 @@ name = "aiohttp-cors"
 version = "0.8.1"
 source = { registry = "https://pypi.org/simple"; }
 dependencies = [
-    { name = "aiohttp", marker = "python_full_version < '3.15'" },
+    { name = "aiohttp" },
 ]
 sdist = { url = 
"https://files.pythonhosted.org/packages/6f/6d/d89e846a5444b3d5eb8985a6ddb0daef3774928e1bfbce8e84ec97b0ffa7/aiohttp_cors-0.8.1.tar.gz";,
 hash = 
"sha256:ccacf9cb84b64939ea15f859a146af1f662a6b1d68175754a07315e305fb1403", size 
= 38626, upload-time = "2025-03-31T14:16:20.048Z" }
 wheels = [
@@ -1050,7 +1050,6 @@ all = [
     { name = "apache-airflow-providers-grpc" },
     { name = "apache-airflow-providers-hashicorp" },
     { name = "apache-airflow-providers-http" },
-    { name = "apache-airflow-providers-ibm-mq", marker = "platform_machine != 
'aarch64' and platform_machine != 'arm64'" },
     { name = "apache-airflow-providers-imap" },
     { name = "apache-airflow-providers-influxdb" },
     { name = "apache-airflow-providers-informatica" },
@@ -1289,9 +1288,6 @@ hashicorp = [
 http = [
     { name = "apache-airflow-providers-http" },
 ]
-ibm-mq = [
-    { name = "apache-airflow-providers-ibm-mq", marker = "platform_machine != 
'aarch64' and platform_machine != 'arm64'" },
-]
 imap = [
     { name = "apache-airflow-providers-imap" },
 ]
@@ -1668,8 +1664,6 @@ requires-dist = [
     { name = "apache-airflow-providers-hashicorp", marker = "extra == 
'hashicorp'", editable = "providers/hashicorp" },
     { name = "apache-airflow-providers-http", marker = "extra == 'all'", 
editable = "providers/http" },
     { name = "apache-airflow-providers-http", marker = "extra == 'http'", 
editable = "providers/http" },
-    { name = "apache-airflow-providers-ibm-mq", marker = "platform_machine != 
'aarch64' and platform_machine != 'arm64' and extra == 'all'", editable = 
"providers/ibm/mq" },
-    { name = "apache-airflow-providers-ibm-mq", marker = "platform_machine != 
'aarch64' and platform_machine != 'arm64' and extra == 'ibm-mq'", editable = 
"providers/ibm/mq" },
     { name = "apache-airflow-providers-imap", marker = "extra == 'all'", 
editable = "providers/imap" },
     { name = "apache-airflow-providers-imap", marker = "extra == 'imap'", 
editable = "providers/imap" },
     { name = "apache-airflow-providers-influxdb", marker = "extra == 'all'", 
editable = "providers/influxdb" },
@@ -1780,7 +1774,7 @@ requires-dist = [
     { name = "sentry-sdk", marker = "extra == 'sentry'", specifier = 
">=2.30.0" },
     { name = "uv", marker = "extra == 'uv'", specifier = ">=0.11.21" },
 ]
-provides-extras = ["all-core", "async", "graphviz", "gunicorn", "kerberos", 
"memray", "otel", "statsd", "all-task-sdk", "airbyte", "akeyless", "alibaba", 
"amazon", "apache-cassandra", "apache-drill", "apache-druid", "apache-flink", 
"apache-hdfs", "apache-hive", "apache-iceberg", "apache-impala", 
"apache-kafka", "apache-kylin", "apache-livy", "apache-pig", "apache-pinot", 
"apache-spark", "apache-tinkerpop", "apprise", "arangodb", "asana", 
"atlassian-jira", "celery", "clickhousedb", "cloud [...]
+provides-extras = ["all-core", "async", "graphviz", "gunicorn", "kerberos", 
"memray", "otel", "statsd", "all-task-sdk", "airbyte", "akeyless", "alibaba", 
"amazon", "apache-cassandra", "apache-drill", "apache-druid", "apache-flink", 
"apache-hdfs", "apache-hive", "apache-iceberg", "apache-impala", 
"apache-kafka", "apache-kylin", "apache-livy", "apache-pig", "apache-pinot", 
"apache-spark", "apache-tinkerpop", "apprise", "arangodb", "asana", 
"atlassian-jira", "celery", "clickhousedb", "cloud [...]
 
 [package.metadata.requires-dev]
 ci-image = [
@@ -2700,7 +2694,7 @@ requires-dist = [
     { name = "types-deprecated", marker = "extra == 'mypy'", specifier = 
">=1.2.9.20240311" },
     { name = "types-docutils", marker = "extra == 'mypy'", specifier = 
">=0.21.0.20240704" },
     { name = "types-markdown", marker = "extra == 'mypy'", specifier = 
">=3.6.0.20240316" },
-    { name = "types-paramiko", marker = "extra == 'mypy'", specifier = 
">=3.4.0.20240423,<4.0.0" },
+    { name = "types-paramiko", marker = "extra == 'mypy'", specifier = 
">=4.0.0.20260402" },
     { name = "types-protobuf", marker = "extra == 'mypy'", specifier = 
">=5.26.0.20240422" },
     { name = "types-pymysql", marker = "extra == 'mypy'", specifier = 
">=1.1.0.20240425" },
     { name = "types-python-dateutil", marker = "extra == 'mypy'", specifier = 
">=2.9.0.20240316" },
@@ -10328,8 +10322,8 @@ name = "cassandra-driver"
 version = "3.30.1"
 source = { registry = "https://pypi.org/simple"; }
 dependencies = [
-    { name = "deprecated", marker = "python_full_version < '3.14'" },
-    { name = "geomet", marker = "python_full_version < '3.14'" },
+    { name = "deprecated" },
+    { name = "geomet" },
 ]
 sdist = { url = 
"https://files.pythonhosted.org/packages/bb/ed/4e16210e194660f107929ee494f1cf18557252655067d9b39029c241be2d/cassandra_driver-3.30.1.tar.gz";,
 hash = 
"sha256:0c6a3e1428f7c6a9aa6c944b9c47a37cd2cdbeb5b5a82d42c33afdd56f14e398", size 
= 289233, upload-time = "2026-07-06T20:14:31.37Z" }
 wheels = [
@@ -10927,7 +10921,7 @@ name = "colorful"
 version = "0.5.8"
 source = { registry = "https://pypi.org/simple"; }
 dependencies = [
-    { name = "colorama", marker = "python_full_version < '3.15' and 
sys_platform == 'win32'" },
+    { name = "colorama", marker = "sys_platform == 'win32'" },
 ]
 sdist = { url = 
"https://files.pythonhosted.org/packages/82/31/109ef4bedeb32b4202e02ddb133162457adc4eb890a9ed9c05c9dd126ed0/colorful-0.5.8.tar.gz";,
 hash = 
"sha256:bb16502b198be2f1c42ba3c52c703d5f651d826076817185f0294c1a549a7445", size 
= 209361, upload-time = "2025-10-29T11:53:21.663Z" }
 wheels = [
@@ -12418,7 +12412,7 @@ name = "geomet"
 version = "1.1.0"
 source = { registry = "https://pypi.org/simple"; }
 dependencies = [
-    { name = "click", marker = "python_full_version < '3.14'" },
+    { name = "click" },
 ]
 sdist = { url = 
"https://files.pythonhosted.org/packages/2a/8c/dde022aa6747b114f6b14a7392871275dea8867e2bd26cddb80cc6d66620/geomet-1.1.0.tar.gz";,
 hash = 
"sha256:51e92231a0ef6aaa63ac20c443377ba78a303fd2ecd179dc3567de79f3c11605", size 
= 28732, upload-time = "2023-11-14T15:43:36.764Z" }
 wheels = [
@@ -13850,7 +13844,7 @@ name = "gssapi"
 version = "1.11.1"
 source = { registry = "https://pypi.org/simple"; }
 dependencies = [
-    { name = "decorator", marker = "python_full_version < '3.11' or 
sys_platform != 'win32'" },
+    { name = "decorator" },
 ]
 sdist = { url = 
"https://files.pythonhosted.org/packages/23/52/c1e90623c259a42ab0587078bb04f959867b970add46ff66750ead8fc7c5/gssapi-1.11.1.tar.gz";,
 hash = 
"sha256:2049ee4b1d0c363163a1344b7282a363f9f4094e51d2c36de0cf01d4735e0ae2", size 
= 95233, upload-time = "2026-01-26T21:01:39.463Z" }
 wheels = [
@@ -14616,17 +14610,17 @@ resolution-markers = [
     "(python_full_version < '3.11' and platform_machine != 'arm64') or 
(python_full_version < '3.11' and sys_platform != 'darwin')",
 ]
 dependencies = [
-    { name = "colorama", marker = "python_full_version < '3.11' and 
sys_platform == 'win32'" },
-    { name = "decorator", marker = "python_full_version < '3.11'" },
-    { name = "exceptiongroup", marker = "python_full_version < '3.11'" },
-    { name = "jedi", marker = "python_full_version < '3.11'" },
-    { name = "matplotlib-inline", marker = "python_full_version < '3.11'" },
-    { name = "pexpect", marker = "python_full_version < '3.11' and 
sys_platform != 'emscripten' and sys_platform != 'win32'" },
-    { name = "prompt-toolkit", marker = "python_full_version < '3.11'" },
-    { name = "pygments", marker = "python_full_version < '3.11'" },
-    { name = "stack-data", marker = "python_full_version < '3.11'" },
-    { name = "traitlets", marker = "python_full_version < '3.11'" },
-    { name = "typing-extensions", marker = "python_full_version < '3.11'" },
+    { name = "colorama", marker = "sys_platform == 'win32'" },
+    { name = "decorator" },
+    { name = "exceptiongroup" },
+    { name = "jedi" },
+    { name = "matplotlib-inline" },
+    { name = "pexpect", marker = "sys_platform != 'emscripten' and 
sys_platform != 'win32'" },
+    { name = "prompt-toolkit" },
+    { name = "pygments" },
+    { name = "stack-data" },
+    { name = "traitlets" },
+    { name = "typing-extensions" },
 ]
 sdist = { url = 
"https://files.pythonhosted.org/packages/40/18/f8598d287006885e7136451fdea0755af4ebcbfe342836f24deefaed1164/ipython-8.39.0.tar.gz";,
 hash = 
"sha256:4110ae96012c379b8b6db898a07e186c40a2a1ef5d57a7fa83166047d9da7624", size 
= 5513971, upload-time = "2026-03-27T10:02:13.94Z" }
 wheels = [
@@ -14658,18 +14652,18 @@ resolution-markers = [
     "(python_full_version == '3.11.*' and platform_machine != 'arm64' and 
sys_platform == 'darwin') or (python_full_version == '3.11.*' and sys_platform 
!= 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32')",
 ]
 dependencies = [
-    { name = "colorama", marker = "python_full_version >= '3.11' and 
sys_platform == 'win32'" },
-    { name = "decorator", marker = "python_full_version >= '3.11'" },
-    { name = "ipython-pygments-lexers", marker = "python_full_version >= 
'3.11'" },
-    { name = "jedi", marker = "python_full_version >= '3.11'" },
-    { name = "matplotlib-inline", marker = "python_full_version >= '3.11'" },
-    { name = "pexpect", marker = "python_full_version >= '3.11' and 
sys_platform != 'emscripten' and sys_platform != 'win32'" },
-    { name = "prompt-toolkit", marker = "python_full_version >= '3.11'" },
-    { name = "psutil", marker = "python_full_version >= '3.11' and 
sys_platform != 'cygwin' and sys_platform != 'emscripten'" },
-    { name = "pygments", marker = "python_full_version >= '3.11'" },
-    { name = "stack-data", marker = "python_full_version >= '3.11'" },
-    { name = "traitlets", marker = "python_full_version >= '3.11'" },
-    { name = "typing-extensions", marker = "python_full_version == '3.11.*'" },
+    { name = "colorama", marker = "sys_platform == 'win32'" },
+    { name = "decorator" },
+    { name = "ipython-pygments-lexers" },
+    { name = "jedi" },
+    { name = "matplotlib-inline" },
+    { name = "pexpect", marker = "sys_platform != 'emscripten' and 
sys_platform != 'win32'" },
+    { name = "prompt-toolkit" },
+    { name = "psutil", marker = "sys_platform != 'cygwin' and sys_platform != 
'emscripten'" },
+    { name = "pygments" },
+    { name = "stack-data" },
+    { name = "traitlets" },
+    { name = "typing-extensions", marker = "python_full_version < '3.12'" },
 ]
 sdist = { url = 
"https://files.pythonhosted.org/packages/53/59/165d3b4d75cc34add3122c4417ecb229085140ac573103c223cd01dde96f/ipython-9.15.0.tar.gz";,
 hash = 
"sha256:da2819ce2aa83135257df830660b1176d986c3d2876db24df01974fa955b2756", size 
= 4442580, upload-time = "2026-06-26T11:03:35.913Z" }
 wheels = [
@@ -14681,7 +14675,7 @@ name = "ipython-pygments-lexers"
 version = "1.1.1"
 source = { registry = "https://pypi.org/simple"; }
 dependencies = [
-    { name = "pygments", marker = "python_full_version >= '3.11'" },
+    { name = "pygments" },
 ]
 sdist = { url = 
"https://files.pythonhosted.org/packages/ef/4c/5dd1d8af08107f88c7f741ead7a40854b8ac24ddf9ae850afbcf698aa552/ipython_pygments_lexers-1.1.1.tar.gz";,
 hash = 
"sha256:09c0138009e56b6854f9535736f4171d855c8c08a563a0dcd8022f78355c7e81", size 
= 8393, upload-time = "2025-01-17T11:24:34.505Z" }
 wheels = [
@@ -17518,9 +17512,9 @@ name = "opencensus"
 version = "0.11.4"
 source = { registry = "https://pypi.org/simple"; }
 dependencies = [
-    { name = "google-api-core", marker = "python_full_version < '3.15'" },
-    { name = "opencensus-context", marker = "python_full_version < '3.15'" },
-    { name = "six", marker = "python_full_version < '3.15'" },
+    { name = "google-api-core" },
+    { name = "opencensus-context" },
+    { name = "six" },
 ]
 sdist = { url = 
"https://files.pythonhosted.org/packages/15/a7/a46dcffa1b63084f9f17fe3c8cb20724c4c8f91009fd0b2cfdb27d5d2b35/opencensus-0.11.4.tar.gz";,
 hash = 
"sha256:cbef87d8b8773064ab60e5c2a1ced58bbaa38a6d052c41aec224958ce544eff2", size 
= 64966, upload-time = "2024-01-03T18:04:07.085Z" }
 wheels = [
@@ -18092,9 +18086,9 @@ wheels = [
 
 [package.optional-dependencies]
 sql-other = [
-    { name = "adbc-driver-postgresql", marker = "python_full_version < '3.13'" 
},
-    { name = "adbc-driver-sqlite", marker = "python_full_version < '3.13'" },
-    { name = "sqlalchemy", marker = "python_full_version < '3.13'" },
+    { name = "adbc-driver-postgresql" },
+    { name = "adbc-driver-sqlite" },
+    { name = "sqlalchemy" },
 ]
 
 [[package]]
@@ -18131,8 +18125,8 @@ resolution-markers = [
     "(python_full_version < '3.11' and platform_machine != 'arm64') or 
(python_full_version < '3.11' and sys_platform != 'darwin')",
 ]
 dependencies = [
-    { name = "numpy", version = "2.2.6", source = { registry = 
"https://pypi.org/simple"; }, marker = "python_full_version < '3.11'" },
-    { name = "types-pytz", marker = "python_full_version < '3.11'" },
+    { name = "numpy", version = "2.2.6", source = { registry = 
"https://pypi.org/simple"; } },
+    { name = "types-pytz" },
 ]
 sdist = { url = 
"https://files.pythonhosted.org/packages/92/5d/be23854a73fda69f1dbdda7bc10fbd6f930bd1fa87aaec389f00c901c1e8/pandas_stubs-2.3.3.260113.tar.gz";,
 hash = 
"sha256:076e3724bcaa73de78932b012ec64b3010463d377fa63116f4e6850643d93800", size 
= 116131, upload-time = "2026-01-13T22:30:16.704Z" }
 wheels = [
@@ -18164,7 +18158,7 @@ resolution-markers = [
     "(python_full_version == '3.11.*' and platform_machine != 'arm64' and 
sys_platform == 'darwin') or (python_full_version == '3.11.*' and sys_platform 
!= 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32')",
 ]
 dependencies = [
-    { name = "numpy", version = "2.4.6", source = { registry = 
"https://pypi.org/simple"; }, marker = "python_full_version == '3.11.*'" },
+    { name = "numpy", version = "2.4.6", source = { registry = 
"https://pypi.org/simple"; }, marker = "python_full_version < '3.12'" },
     { name = "numpy", version = "2.5.1", source = { registry = 
"https://pypi.org/simple"; }, marker = "python_full_version >= '3.12'" },
 ]
 sdist = { url = 
"https://files.pythonhosted.org/packages/3d/aa/c41a8a0ff86fd85dbb3ec0c1f3fa488ca64a8b5f82654ae1b07d84acefe5/pandas_stubs-3.0.3.260530.tar.gz";,
 hash = 
"sha256:d1efe47b2e5a312c047d7feabec5cb7a55365747983420077e9fcbe9ab74f714", size 
= 113183, upload-time = "2026-05-30T17:47:40.34Z" }
@@ -20618,9 +20612,9 @@ name = "python3-saml"
 version = "1.16.0"
 source = { registry = "https://pypi.org/simple"; }
 dependencies = [
-    { name = "isodate", marker = "python_full_version < '3.13'" },
-    { name = "lxml", marker = "python_full_version < '3.13'" },
-    { name = "xmlsec", marker = "python_full_version < '3.13'" },
+    { name = "isodate" },
+    { name = "lxml" },
+    { name = "xmlsec" },
 ]
 sdist = { url = 
"https://files.pythonhosted.org/packages/5d/98/6e0268c3a9893af3d4c5cf670183e0314cd6b5cb034a612d6a7cc5060df8/python3-saml-1.16.0.tar.gz";,
 hash = 
"sha256:97c9669aecabc283c6e5fb4eb264f446b6e006f5267d01c9734f9d8bffdac133", size 
= 83468, upload-time = "2023-10-09T10:37:43.128Z" }
 wheels = [
@@ -20933,14 +20927,14 @@ name = "ray"
 version = "2.56.1"
 source = { registry = "https://pypi.org/simple"; }
 dependencies = [
-    { name = "click", marker = "python_full_version < '3.15'" },
-    { name = "filelock", marker = "python_full_version < '3.15'" },
-    { name = "jsonschema", marker = "python_full_version < '3.15'" },
-    { name = "msgpack", marker = "python_full_version < '3.15'" },
-    { name = "packaging", marker = "python_full_version < '3.15'" },
-    { name = "protobuf", marker = "python_full_version < '3.15'" },
-    { name = "pyyaml", marker = "python_full_version < '3.15'" },
-    { name = "requests", marker = "python_full_version < '3.15'" },
+    { name = "click" },
+    { name = "filelock" },
+    { name = "jsonschema" },
+    { name = "msgpack" },
+    { name = "packaging" },
+    { name = "protobuf" },
+    { name = "pyyaml" },
+    { name = "requests" },
 ]
 wheels = [
     { url = 
"https://files.pythonhosted.org/packages/62/f5/89dc8571f35355a7f889cd4709b440abf6db2c5fc8b5427b614d5084e9cb/ray-2.56.1-cp310-cp310-macosx_12_0_arm64.whl";,
 hash = 
"sha256:58b8c037a9f2b7b7866439cb6fe19d452ba3961f2b62d0a247dc3adf2ca45265", size 
= 66364186, upload-time = "2026-07-17T21:27:58.09Z" },
@@ -20965,20 +20959,20 @@ wheels = [
 
 [package.optional-dependencies]
 default = [
-    { name = "aiohttp", marker = "python_full_version < '3.15'" },
-    { name = "aiohttp-cors", marker = "python_full_version < '3.15'" },
-    { name = "colorful", marker = "python_full_version < '3.15'" },
-    { name = "grpcio", marker = "python_full_version < '3.15'" },
-    { name = "opencensus", marker = "python_full_version < '3.15'" },
-    { name = "opentelemetry-exporter-prometheus", marker = 
"python_full_version < '3.15'" },
-    { name = "opentelemetry-proto", marker = "python_full_version < '3.15'" },
-    { name = "opentelemetry-sdk", marker = "python_full_version < '3.15'" },
-    { name = "prometheus-client", marker = "python_full_version < '3.15'" },
-    { name = "py-spy", marker = "python_full_version < '3.15'" },
-    { name = "pydantic", marker = "python_full_version < '3.15'" },
-    { name = "requests", marker = "python_full_version < '3.15'" },
-    { name = "smart-open", marker = "python_full_version < '3.15'" },
-    { name = "virtualenv", marker = "python_full_version < '3.15'" },
+    { name = "aiohttp" },
+    { name = "aiohttp-cors" },
+    { name = "colorful" },
+    { name = "grpcio" },
+    { name = "opencensus" },
+    { name = "opentelemetry-exporter-prometheus" },
+    { name = "opentelemetry-proto" },
+    { name = "opentelemetry-sdk" },
+    { name = "prometheus-client" },
+    { name = "py-spy" },
+    { name = "pydantic" },
+    { name = "requests" },
+    { name = "smart-open" },
+    { name = "virtualenv" },
 ]
 
 [[package]]
@@ -21761,10 +21755,10 @@ resolution-markers = [
     "(python_full_version < '3.11' and platform_machine != 'arm64') or 
(python_full_version < '3.11' and sys_platform != 'darwin')",
 ]
 dependencies = [
-    { name = "joblib", marker = "python_full_version < '3.11'" },
-    { name = "numpy", version = "2.2.6", source = { registry = 
"https://pypi.org/simple"; }, marker = "python_full_version < '3.11'" },
-    { name = "scipy", version = "1.15.3", source = { registry = 
"https://pypi.org/simple"; }, marker = "python_full_version < '3.11'" },
-    { name = "threadpoolctl", marker = "python_full_version < '3.11'" },
+    { name = "joblib" },
+    { name = "numpy", version = "2.2.6", source = { registry = 
"https://pypi.org/simple"; } },
+    { name = "scipy", version = "1.15.3", source = { registry = 
"https://pypi.org/simple"; } },
+    { name = "threadpoolctl" },
 ]
 sdist = { url = 
"https://files.pythonhosted.org/packages/37/59/44985a2bdc95c74e34fef3d10cb5d93ce13b0e2a7baefffe1b53853b502d/scikit_learn-1.5.2.tar.gz";,
 hash = 
"sha256:b4237ed7b3fdd0a4882792e68ef2545d5baa50aca3bb45aa7df468138ad8f94d", size 
= 7001680, upload-time = "2024-09-11T15:50:10.957Z" }
 wheels = [
@@ -21815,13 +21809,13 @@ resolution-markers = [
     "(python_full_version == '3.11.*' and platform_machine != 'arm64' and 
sys_platform == 'darwin') or (python_full_version == '3.11.*' and sys_platform 
!= 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32')",
 ]
 dependencies = [
-    { name = "joblib", marker = "python_full_version >= '3.11'" },
-    { name = "narwhals", marker = "python_full_version >= '3.11'" },
-    { name = "numpy", version = "2.4.6", source = { registry = 
"https://pypi.org/simple"; }, marker = "python_full_version == '3.11.*'" },
+    { name = "joblib" },
+    { name = "narwhals" },
+    { name = "numpy", version = "2.4.6", source = { registry = 
"https://pypi.org/simple"; }, marker = "python_full_version < '3.12'" },
     { name = "numpy", version = "2.5.1", source = { registry = 
"https://pypi.org/simple"; }, marker = "python_full_version >= '3.12'" },
-    { name = "scipy", version = "1.17.1", source = { registry = 
"https://pypi.org/simple"; }, marker = "python_full_version == '3.11.*'" },
+    { name = "scipy", version = "1.17.1", source = { registry = 
"https://pypi.org/simple"; }, marker = "python_full_version < '3.12'" },
     { name = "scipy", version = "1.18.0", source = { registry = 
"https://pypi.org/simple"; }, marker = "python_full_version >= '3.12'" },
-    { name = "threadpoolctl", marker = "python_full_version >= '3.11'" },
+    { name = "threadpoolctl" },
 ]
 sdist = { url = 
"https://files.pythonhosted.org/packages/fa/6f/37092bdb25f712817231799fc5674d8e704066a8a70c1d2d40517e18b4ab/scikit_learn-1.9.0.tar.gz";,
 hash = 
"sha256:8833266989d3a5110178a9fae30783675460724d0e1efb13b14901d2c660c557", size 
= 7750767, upload-time = "2026-06-02T11:54:32.706Z" }
 wheels = [
@@ -21866,7 +21860,7 @@ resolution-markers = [
     "(python_full_version < '3.11' and platform_machine != 'arm64') or 
(python_full_version < '3.11' and sys_platform != 'darwin')",
 ]
 dependencies = [
-    { name = "numpy", version = "2.2.6", source = { registry = 
"https://pypi.org/simple"; }, marker = "python_full_version < '3.11'" },
+    { name = "numpy", version = "2.2.6", source = { registry = 
"https://pypi.org/simple"; } },
 ]
 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 = [
@@ -21928,7 +21922,7 @@ resolution-markers = [
     "(python_full_version == '3.11.*' and platform_machine != 'arm64' and 
sys_platform == 'darwin') or (python_full_version == '3.11.*' and sys_platform 
!= 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32')",
 ]
 dependencies = [
-    { name = "numpy", version = "2.4.6", source = { registry = 
"https://pypi.org/simple"; }, marker = "python_full_version == '3.11.*'" },
+    { name = "numpy", version = "2.4.6", source = { registry = 
"https://pypi.org/simple"; } },
 ]
 sdist = { url = 
"https://files.pythonhosted.org/packages/7a/97/5a3609c4f8d58b039179648e62dd220f89864f56f7357f5d4f45c29eb2cc/scipy-1.17.1.tar.gz";,
 hash = 
"sha256:95d8e012d8cb8816c226aef832200b1d45109ed4464303e997c5b13122b297c0", size 
= 30573822, upload-time = "2026-02-23T00:26:24.851Z" }
 wheels = [
@@ -22015,7 +22009,7 @@ resolution-markers = [
     "(python_full_version == '3.12.*' and platform_machine != 'arm64' and 
sys_platform == 'darwin') or (python_full_version == '3.12.*' and sys_platform 
!= 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32')",
 ]
 dependencies = [
-    { name = "numpy", version = "2.5.1", source = { registry = 
"https://pypi.org/simple"; }, marker = "python_full_version >= '3.12'" },
+    { name = "numpy", version = "2.5.1", source = { registry = 
"https://pypi.org/simple"; } },
 ]
 sdist = { url = 
"https://files.pythonhosted.org/packages/a7/25/c2700dfaf6442b4effaa91af24ebce5dc9d31bb4a69706313aae70d72cd0/scipy-1.18.0.tar.gz";,
 hash = 
"sha256:67b2ad2ad54c72ca6d04975a9b2df8c3638c34ddd5b28738e94fc2b57929d378", size 
= 30774447, upload-time = "2026-06-19T15:01:43.456Z" }
 wheels = [
@@ -22100,8 +22094,8 @@ name = "secretstorage"
 version = "3.5.0"
 source = { registry = "https://pypi.org/simple"; }
 dependencies = [
-    { name = "cryptography", marker = "(python_full_version >= '3.14' and 
sys_platform == 'darwin') or (python_full_version < '3.11' and sys_platform == 
'emscripten') or (python_full_version < '3.11' and sys_platform == 'win32') or 
(platform_machine != 'arm64' and sys_platform == 'darwin') or (sys_platform != 
'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32')" },
-    { name = "jeepney", marker = "(python_full_version >= '3.14' and 
sys_platform == 'darwin') or (python_full_version < '3.11' and sys_platform == 
'emscripten') or (python_full_version < '3.11' and sys_platform == 'win32') or 
(platform_machine != 'arm64' and sys_platform == 'darwin') or (sys_platform != 
'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32')" },
+    { name = "cryptography" },
+    { name = "jeepney" },
 ]
 sdist = { url = 
"https://files.pythonhosted.org/packages/1c/03/e834bcd866f2f8a49a85eaff47340affa3bfa391ee9912a952a1faa68c7b/secretstorage-3.5.0.tar.gz";,
 hash = 
"sha256:f04b8e4689cbce351744d5537bf6b1329c6fc68f91fa666f60a380edddcd11be", size 
= 19884, upload-time = "2025-11-23T19:02:53.191Z" }
 wheels = [
@@ -22300,7 +22294,7 @@ name = "smart-open"
 version = "8.0.1"
 source = { registry = "https://pypi.org/simple"; }
 dependencies = [
-    { name = "wrapt", marker = "python_full_version < '3.15'" },
+    { name = "wrapt" },
 ]
 sdist = { url = 
"https://files.pythonhosted.org/packages/76/53/9c513747547fd595d5c143259129ea8b9c3ea2f6b7bb9dcea2b1966ded3c/smart_open-8.0.1.tar.gz";,
 hash = 
"sha256:18b1c4496003c6902be17c15f032b5c319f307c89c6ae9e6b028b508bed8b2cf", size 
= 61882, upload-time = "2026-07-15T13:56:10.492Z" }
 wheels = [
@@ -22404,15 +22398,15 @@ name = "snowflake-snowpark-python"
 version = "1.53.1"
 source = { registry = "https://pypi.org/simple"; }
 dependencies = [
-    { name = "cloudpickle", version = "3.1.1", source = { registry = 
"https://pypi.org/simple"; }, marker = "python_full_version < '3.14'" },
-    { name = "protobuf", marker = "python_full_version < '3.14'" },
-    { name = "python-dateutil", marker = "python_full_version < '3.14'" },
-    { name = "pyyaml", marker = "python_full_version < '3.14'" },
-    { name = "setuptools", marker = "python_full_version < '3.14'" },
-    { name = "snowflake-connector-python", marker = "python_full_version < 
'3.14'" },
-    { name = "typing-extensions", marker = "python_full_version < '3.14'" },
-    { name = "tzlocal", marker = "python_full_version < '3.14'" },
-    { name = "wheel", marker = "python_full_version < '3.14'" },
+    { name = "cloudpickle", version = "3.1.1", source = { registry = 
"https://pypi.org/simple"; } },
+    { name = "protobuf" },
+    { name = "python-dateutil" },
+    { name = "pyyaml" },
+    { name = "setuptools" },
+    { name = "snowflake-connector-python" },
+    { name = "typing-extensions" },
+    { name = "tzlocal" },
+    { name = "wheel" },
 ]
 sdist = { url = 
"https://files.pythonhosted.org/packages/72/5b/4a0eb18191c98d62b8a0a363a4c2d9ee5f01f0f33f32ecd59ddea7b56e3e/snowflake_snowpark_python-1.53.1.tar.gz";,
 hash = 
"sha256:5a0bcbf01aac54336c7763b748837281762e57214b6425c84ed412706fb58df7", size 
= 1784995, upload-time = "2026-07-15T23:06:44.704Z" }
 wheels = [
@@ -22459,23 +22453,23 @@ resolution-markers = [
     "(python_full_version < '3.11' and platform_machine != 'arm64') or 
(python_full_version < '3.11' and sys_platform != 'darwin')",
 ]
 dependencies = [
-    { name = "alabaster", marker = "python_full_version < '3.11'" },
-    { name = "babel", marker = "python_full_version < '3.11'" },
-    { name = "colorama", marker = "python_full_version < '3.11' and 
sys_platform == 'win32'" },
-    { name = "docutils", version = "0.21.2", source = { registry = 
"https://pypi.org/simple"; }, marker = "python_full_version < '3.11'" },
-    { name = "imagesize", marker = "python_full_version < '3.11'" },
-    { name = "jinja2", marker = "python_full_version < '3.11'" },
-    { name = "packaging", marker = "python_full_version < '3.11'" },
-    { name = "pygments", marker = "python_full_version < '3.11'" },
-    { name = "requests", marker = "python_full_version < '3.11'" },
-    { name = "snowballstemmer", marker = "python_full_version < '3.11'" },
-    { name = "sphinxcontrib-applehelp", marker = "python_full_version < 
'3.11'" },
-    { name = "sphinxcontrib-devhelp", marker = "python_full_version < '3.11'" 
},
-    { name = "sphinxcontrib-htmlhelp", marker = "python_full_version < '3.11'" 
},
-    { name = "sphinxcontrib-jsmath", marker = "python_full_version < '3.11'" },
-    { name = "sphinxcontrib-qthelp", marker = "python_full_version < '3.11'" },
-    { name = "sphinxcontrib-serializinghtml", marker = "python_full_version < 
'3.11'" },
-    { name = "tomli", marker = "python_full_version < '3.11'" },
+    { name = "alabaster" },
+    { name = "babel" },
+    { name = "colorama", marker = "sys_platform == 'win32'" },
+    { name = "docutils", version = "0.21.2", source = { registry = 
"https://pypi.org/simple"; } },
+    { name = "imagesize" },
+    { name = "jinja2" },
+    { name = "packaging" },
+    { name = "pygments" },
+    { name = "requests" },
+    { name = "snowballstemmer" },
+    { name = "sphinxcontrib-applehelp" },
+    { name = "sphinxcontrib-devhelp" },
+    { name = "sphinxcontrib-htmlhelp" },
+    { name = "sphinxcontrib-jsmath" },
+    { name = "sphinxcontrib-qthelp" },
+    { name = "sphinxcontrib-serializinghtml" },
+    { name = "tomli" },
 ]
 sdist = { url = 
"https://files.pythonhosted.org/packages/6f/6d/be0b61178fe2cdcb67e2a92fc9ebb488e3c51c4f74a36a7824c0adf23425/sphinx-8.1.3.tar.gz";,
 hash = 
"sha256:43c1911eecb0d3e161ad78611bc905d1ad0e523e4ddc202a58a821773dc4c927", size 
= 8184611, upload-time = "2024-10-13T20:27:13.93Z" }
 wheels = [
@@ -22493,23 +22487,23 @@ resolution-markers = [
     "(python_full_version == '3.11.*' and platform_machine != 'arm64' and 
sys_platform == 'darwin') or (python_full_version == '3.11.*' and sys_platform 
!= 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32')",
 ]
 dependencies = [
-    { name = "alabaster", marker = "python_full_version == '3.11.*'" },
-    { name = "babel", marker = "python_full_version == '3.11.*'" },
-    { name = "colorama", marker = "python_full_version == '3.11.*' and 
sys_platform == 'win32'" },
-    { name = "docutils", version = "0.22.4", source = { registry = 
"https://pypi.org/simple"; }, marker = "python_full_version == '3.11.*'" },
-    { name = "imagesize", marker = "python_full_version == '3.11.*'" },
-    { name = "jinja2", marker = "python_full_version == '3.11.*'" },
-    { name = "packaging", marker = "python_full_version == '3.11.*'" },
-    { name = "pygments", marker = "python_full_version == '3.11.*'" },
-    { name = "requests", marker = "python_full_version == '3.11.*'" },
-    { name = "roman-numerals", marker = "python_full_version == '3.11.*'" },
-    { name = "snowballstemmer", marker = "python_full_version == '3.11.*'" },
-    { name = "sphinxcontrib-applehelp", marker = "python_full_version == 
'3.11.*'" },
-    { name = "sphinxcontrib-devhelp", marker = "python_full_version == 
'3.11.*'" },
-    { name = "sphinxcontrib-htmlhelp", marker = "python_full_version == 
'3.11.*'" },
-    { name = "sphinxcontrib-jsmath", marker = "python_full_version == 
'3.11.*'" },
-    { name = "sphinxcontrib-qthelp", marker = "python_full_version == 
'3.11.*'" },
-    { name = "sphinxcontrib-serializinghtml", marker = "python_full_version == 
'3.11.*'" },
+    { name = "alabaster" },
+    { name = "babel" },
+    { name = "colorama", marker = "sys_platform == 'win32'" },
+    { name = "docutils", version = "0.22.4", source = { registry = 
"https://pypi.org/simple"; } },
+    { name = "imagesize" },
+    { name = "jinja2" },
+    { name = "packaging" },
+    { name = "pygments" },
+    { name = "requests" },
+    { name = "roman-numerals" },
+    { name = "snowballstemmer" },
+    { name = "sphinxcontrib-applehelp" },
+    { name = "sphinxcontrib-devhelp" },
+    { name = "sphinxcontrib-htmlhelp" },
+    { name = "sphinxcontrib-jsmath" },
+    { name = "sphinxcontrib-qthelp" },
+    { name = "sphinxcontrib-serializinghtml" },
 ]
 sdist = { url = 
"https://files.pythonhosted.org/packages/42/50/a8c6ccc36d5eacdfd7913ddccd15a9cee03ecafc5ee2bc40e1f168d85022/sphinx-9.0.4.tar.gz";,
 hash = 
"sha256:594ef59d042972abbc581d8baa577404abe4e6c3b04ef61bd7fc2acbd51f3fa3", size 
= 8710502, upload-time = "2025-12-04T07:45:27.343Z" }
 wheels = [
@@ -22537,23 +22531,23 @@ resolution-markers = [
     "(python_full_version == '3.12.*' and platform_machine != 'arm64' and 
sys_platform == 'darwin') or (python_full_version == '3.12.*' and sys_platform 
!= 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32')",
 ]
 dependencies = [
-    { name = "alabaster", marker = "python_full_version >= '3.12'" },
-    { name = "babel", marker = "python_full_version >= '3.12'" },
-    { name = "colorama", marker = "python_full_version >= '3.12' and 
sys_platform == 'win32'" },
-    { name = "docutils", version = "0.22.4", source = { registry = 
"https://pypi.org/simple"; }, marker = "python_full_version >= '3.12'" },
-    { name = "imagesize", marker = "python_full_version >= '3.12'" },
-    { name = "jinja2", marker = "python_full_version >= '3.12'" },
-    { name = "packaging", marker = "python_full_version >= '3.12'" },
-    { name = "pygments", marker = "python_full_version >= '3.12'" },
-    { name = "requests", marker = "python_full_version >= '3.12'" },
-    { name = "roman-numerals", marker = "python_full_version >= '3.12'" },
-    { name = "snowballstemmer", marker = "python_full_version >= '3.12'" },
-    { name = "sphinxcontrib-applehelp", marker = "python_full_version >= 
'3.12'" },
-    { name = "sphinxcontrib-devhelp", marker = "python_full_version >= '3.12'" 
},
-    { name = "sphinxcontrib-htmlhelp", marker = "python_full_version >= 
'3.12'" },
-    { name = "sphinxcontrib-jsmath", marker = "python_full_version >= '3.12'" 
},
-    { name = "sphinxcontrib-qthelp", marker = "python_full_version >= '3.12'" 
},
-    { name = "sphinxcontrib-serializinghtml", marker = "python_full_version >= 
'3.12'" },
+    { name = "alabaster" },
+    { name = "babel" },
+    { name = "colorama", marker = "sys_platform == 'win32'" },
+    { name = "docutils", version = "0.22.4", source = { registry = 
"https://pypi.org/simple"; } },
+    { name = "imagesize" },
+    { name = "jinja2" },
+    { name = "packaging" },
+    { name = "pygments" },
+    { name = "requests" },
+    { name = "roman-numerals" },
+    { name = "snowballstemmer" },
+    { name = "sphinxcontrib-applehelp" },
+    { name = "sphinxcontrib-devhelp" },
+    { name = "sphinxcontrib-htmlhelp" },
+    { name = "sphinxcontrib-jsmath" },
+    { name = "sphinxcontrib-qthelp" },
+    { name = "sphinxcontrib-serializinghtml" },
 ]
 sdist = { url = 
"https://files.pythonhosted.org/packages/cd/bd/f08eb0f4eed5c83f1ba2a3bd18f7745a2b1525fad70660a1c00224ec468a/sphinx-9.1.0.tar.gz";,
 hash = 
"sha256:7741722357dd75f8190766926071fed3bdc211c74dd2d7d4df5404da95930ddb", size 
= 8718324, upload-time = "2025-12-31T15:09:27.646Z" }
 wheels = [
@@ -22619,12 +22613,12 @@ resolution-markers = [
     "(python_full_version < '3.11' and platform_machine != 'arm64') or 
(python_full_version < '3.11' and sys_platform != 'darwin')",
 ]
 dependencies = [
-    { name = "colorama", marker = "python_full_version < '3.11'" },
-    { name = "sphinx", version = "8.1.3", source = { registry = 
"https://pypi.org/simple"; }, marker = "python_full_version < '3.11'" },
-    { name = "starlette", marker = "python_full_version < '3.11'" },
-    { name = "uvicorn", marker = "python_full_version < '3.11'" },
-    { name = "watchfiles", marker = "python_full_version < '3.11'" },
-    { name = "websockets", marker = "python_full_version < '3.11'" },
+    { name = "colorama" },
+    { name = "sphinx", version = "8.1.3", source = { registry = 
"https://pypi.org/simple"; } },
+    { name = "starlette" },
+    { name = "uvicorn" },
+    { name = "watchfiles" },
+    { name = "websockets" },
 ]
 sdist = { url = 
"https://files.pythonhosted.org/packages/a5/2c/155e1de2c1ba96a72e5dba152c509a8b41e047ee5c2def9e9f0d812f8be7/sphinx_autobuild-2024.10.3.tar.gz";,
 hash = 
"sha256:248150f8f333e825107b6d4b86113ab28fa51750e5f9ae63b59dc339be951fb1", size 
= 14023, upload-time = "2024-10-02T23:15:30.172Z" }
 wheels = [
@@ -22656,13 +22650,13 @@ resolution-markers = [
     "(python_full_version == '3.11.*' and platform_machine != 'arm64' and 
sys_platform == 'darwin') or (python_full_version == '3.11.*' and sys_platform 
!= 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32')",
 ]
 dependencies = [
-    { name = "colorama", marker = "python_full_version >= '3.11'" },
-    { name = "sphinx", version = "9.0.4", source = { registry = 
"https://pypi.org/simple"; }, marker = "python_full_version == '3.11.*'" },
+    { name = "colorama" },
+    { name = "sphinx", version = "9.0.4", source = { registry = 
"https://pypi.org/simple"; }, marker = "python_full_version < '3.12'" },
     { name = "sphinx", version = "9.1.0", source = { registry = 
"https://pypi.org/simple"; }, marker = "python_full_version >= '3.12'" },
-    { name = "starlette", marker = "python_full_version >= '3.11'" },
-    { name = "uvicorn", marker = "python_full_version >= '3.11'" },
-    { name = "watchfiles", marker = "python_full_version >= '3.11'" },
-    { name = "websockets", marker = "python_full_version >= '3.11'" },
+    { name = "starlette" },
+    { name = "uvicorn" },
+    { name = "watchfiles" },
+    { name = "websockets" },
 ]
 sdist = { url = 
"https://files.pythonhosted.org/packages/e0/3c/a59a3a453d4133777f7ed2e83c80b7dc817d43c74b74298ca0af869662ad/sphinx_autobuild-2025.8.25.tar.gz";,
 hash = 
"sha256:9cf5aab32853c8c31af572e4fecdc09c997e2b8be5a07daf2a389e270e85b213", size 
= 15200, upload-time = "2025-08-25T18:44:55.436Z" }
 wheels = [
@@ -22692,7 +22686,7 @@ resolution-markers = [
     "(python_full_version < '3.11' and platform_machine != 'arm64') or 
(python_full_version < '3.11' and sys_platform != 'darwin')",
 ]
 dependencies = [
-    { name = "sphinx", version = "8.1.3", source = { registry = 
"https://pypi.org/simple"; }, marker = "python_full_version < '3.11'" },
+    { name = "sphinx", version = "8.1.3", source = { registry = 
"https://pypi.org/simple"; } },
 ]
 sdist = { url = 
"https://files.pythonhosted.org/packages/2b/69/b34e0cb5336f09c6866d53b4a19d76c227cdec1bbc7ac4de63ca7d58c9c7/sphinx_design-0.6.1.tar.gz";,
 hash = 
"sha256:b44eea3719386d04d765c1a8257caca2b3e6f8421d7b3a5e742c0fd45f84e632", size 
= 2193689, upload-time = "2024-08-02T13:48:44.277Z" }
 wheels = [
@@ -22724,7 +22718,7 @@ resolution-markers = [
     "(python_full_version == '3.11.*' and platform_machine != 'arm64' and 
sys_platform == 'darwin') or (python_full_version == '3.11.*' and sys_platform 
!= 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32')",
 ]
 dependencies = [
-    { name = "sphinx", version = "9.0.4", source = { registry = 
"https://pypi.org/simple"; }, marker = "python_full_version == '3.11.*'" },
+    { name = "sphinx", version = "9.0.4", source = { registry = 
"https://pypi.org/simple"; }, marker = "python_full_version < '3.12'" },
     { name = "sphinx", version = "9.1.0", source = { registry = 
"https://pypi.org/simple"; }, marker = "python_full_version >= '3.12'" },
 ]
 sdist = { url = 
"https://files.pythonhosted.org/packages/13/7b/804f311da4663a4aecc6cf7abd83443f3d4ded970826d0c958edc77d4527/sphinx_design-0.7.0.tar.gz";,
 hash = 
"sha256:d2a3f5b19c24b916adb52f97c5f00efab4009ca337812001109084a740ec9b7a", size 
= 2203582, upload-time = "2026-01-19T13:12:53.297Z" }
@@ -23835,14 +23829,14 @@ wheels = [
 
 [[package]]
 name = "types-paramiko"
-version = "3.5.0.20250801"
+version = "5.0.0.20260724"
 source = { registry = "https://pypi.org/simple"; }
 dependencies = [
     { name = "cryptography" },
 ]
-sdist = { url = 
"https://files.pythonhosted.org/packages/d5/c4/4df427c835e9c795662241410732ab936c6f58be798ec25ce7015771c448/types_paramiko-3.5.0.20250801.tar.gz";,
 hash = 
"sha256:e79ff84eaf44f2a5ad811743edef5d9c0cd6632a264a526f00405b87db1ec99b", size 
= 28838, upload-time = "2025-08-01T03:48:52.777Z" }
+sdist = { url = 
"https://files.pythonhosted.org/packages/66/c2/445549ed6f0944352f2b91d88d16bbdc3993a4d6dbbedb81c557b3cad85a/types_paramiko-5.0.0.20260724.tar.gz";,
 hash = 
"sha256:37e7f3f2196cf187c89649ad836621c675bc318369d80fa78051507a4ae770c9", size 
= 28548, upload-time = "2026-07-24T04:59:59.889Z" }
 wheels = [
-    { url = 
"https://files.pythonhosted.org/packages/bd/5b/0f0bb1e45f7547d081ae9d490a88c6f6031d0f2c97459236e0a2a8b27207/types_paramiko-3.5.0.20250801-py3-none-any.whl";,
 hash = 
"sha256:3e02a0fcf2b7e7b213e0cd569f7223ff9af417052a4d149d84172ebaa6fd742e", size 
= 39705, upload-time = "2025-08-01T03:48:51.855Z" },
+    { url = 
"https://files.pythonhosted.org/packages/4c/16/fca52784f979821e2205ff514322d0e83452536acc4807a79ddb2085bbb2/types_paramiko-5.0.0.20260724-py3-none-any.whl";,
 hash = 
"sha256:40c7083803a5a28ab7a8d2fe4cd9b7746d0a03538598582ce68f60967a2ad272", size 
= 37125, upload-time = "2026-07-24T04:59:58.955Z" },
 ]
 
 [[package]]
@@ -24771,7 +24765,7 @@ name = "xmlsec"
 version = "1.3.17"
 source = { registry = "https://pypi.org/simple"; }
 dependencies = [
-    { name = "lxml", marker = "python_full_version < '3.13'" },
+    { name = "lxml" },
 ]
 sdist = { url = 
"https://files.pythonhosted.org/packages/49/14/538b75379e6ab8f688f14d8663e2ab138d9c778bac4999d155b5f33c71c1/xmlsec-1.3.17.tar.gz";,
 hash = 
"sha256:f3fac9ae679f66585925cc00c5f6839ae36c1d03157619571dee18acc05b9c01", size 
= 115637, upload-time = "2025-11-11T16:20:46.019Z" }
 wheels = [

Reply via email to