From f293ae8d9f2d858c2b97fa5502cb113e926302d4 Mon Sep 17 00:00:00 2001
From: Anthonette Adanyin <106275232+antznette1@users.noreply.github.com>
Date: Wed, 17 Dec 2025 11:20:02 +0000
Subject: [PATCH 01/26] fix: Populate Postgres `registry.path` during `feast
init` (#5785)
---
.../postgres/feature_repo/feature_store.yaml | 2 +-
.../tests/unit/local_feast_tests/test_init.py | 14 ++++++++++++++
2 files changed, 15 insertions(+), 1 deletion(-)
diff --git a/sdk/python/feast/templates/postgres/feature_repo/feature_store.yaml b/sdk/python/feast/templates/postgres/feature_repo/feature_store.yaml
index 0663ff0ad97..a2fc2f51b61 100644
--- a/sdk/python/feast/templates/postgres/feature_repo/feature_store.yaml
+++ b/sdk/python/feast/templates/postgres/feature_repo/feature_store.yaml
@@ -2,7 +2,7 @@ project: my_project
provider: local
registry:
registry_type: sql
- path: postgresql://postgres:mysecretpassword@127.0.0.1:55001/feast
+ path: postgresql://DB_USERNAME:DB_PASSWORD@DB_HOST:DB_PORT/DB_NAME
cache_ttl_seconds: 60
sqlalchemy_config_kwargs:
echo: false
diff --git a/sdk/python/tests/unit/local_feast_tests/test_init.py b/sdk/python/tests/unit/local_feast_tests/test_init.py
index 4543a239796..1f3c0993845 100644
--- a/sdk/python/tests/unit/local_feast_tests/test_init.py
+++ b/sdk/python/tests/unit/local_feast_tests/test_init.py
@@ -67,3 +67,17 @@ def test_repo_init_with_underscore_in_project_name() -> None:
)
result = runner.run(["apply"], cwd=repo_dir)
assert result.returncode != 0
+
+
+def test_postgres_template_registry_path_is_parameterized() -> None:
+ template_fs_yaml = (
+ Path(__file__).resolve().parents[3]
+ / "feast"
+ / "templates"
+ / "postgres"
+ / "feature_repo"
+ / "feature_store.yaml"
+ )
+ contents = template_fs_yaml.read_text(encoding="utf-8")
+ expected = "path: postgresql://DB_USERNAME:DB_PASSWORD@DB_HOST:DB_PORT/DB_NAME"
+ assert expected in contents
From fc1599b7d60b38842753f6e9297634d01750f125 Mon Sep 17 00:00:00 2001
From: Willem Pienaar <6728866+woop@users.noreply.github.com>
Date: Wed, 17 Dec 2025 19:52:49 -0800
Subject: [PATCH 02/26] Remove Cast.ai logo from index page
Removed Cast.ai logo from the homepage.
---
infra/website/src/pages/index.astro | 3 ---
1 file changed, 3 deletions(-)
diff --git a/infra/website/src/pages/index.astro b/infra/website/src/pages/index.astro
index 9c0b8ba1d9e..fd651d86a02 100644
--- a/infra/website/src/pages/index.astro
+++ b/infra/website/src/pages/index.astro
@@ -114,9 +114,6 @@ features = store.retrieve_online_documents(
-
-

-
From f2486a9b3657da1a92dff43ca337fc3f6134461e Mon Sep 17 00:00:00 2001
From: Srihari
Date: Mon, 15 Dec 2025 11:05:46 +0530
Subject: [PATCH 03/26] Add Workbecnh Ray Compute engine and offline store test
Signed-off-by: Srihari
---
.../feast_wb_connection_integration_test.go | 30 +-
.../test/e2e_rhoai/feast_wb_milvus_test.go | 31 +-
.../feast_wb_ray_offline_store_test.go | 77 +++
.../resources/feast-wb-ray-test.ipynb | 516 ++++++++++++++++++
.../resources/kueue_resources_setup.yaml | 31 ++
.../test/utils/notebook_util.go | 30 +
6 files changed, 659 insertions(+), 56 deletions(-)
create mode 100644 infra/feast-operator/test/e2e_rhoai/feast_wb_ray_offline_store_test.go
create mode 100644 infra/feast-operator/test/e2e_rhoai/resources/feast-wb-ray-test.ipynb
create mode 100644 infra/feast-operator/test/e2e_rhoai/resources/kueue_resources_setup.yaml
diff --git a/infra/feast-operator/test/e2e_rhoai/feast_wb_connection_integration_test.go b/infra/feast-operator/test/e2e_rhoai/feast_wb_connection_integration_test.go
index a284dc9e839..5b42bfe1276 100644
--- a/infra/feast-operator/test/e2e_rhoai/feast_wb_connection_integration_test.go
+++ b/infra/feast-operator/test/e2e_rhoai/feast_wb_connection_integration_test.go
@@ -43,16 +43,6 @@ var _ = Describe("Feast Workbench Integration Connection Testing", Ordered, func
feastCRName = "credit-scoring"
)
- // Create and monitor notebook
- createAndMonitorNotebook := func() {
- nbParams := utils.GetNotebookParams(namespace, configMapName, notebookPVC, notebookName, testDir)
- By("Creating Jupyter Notebook")
- Expect(utils.CreateNotebook(nbParams)).To(Succeed(), "Failed to create notebook")
-
- By("Monitoring notebook logs")
- Expect(utils.MonitorNotebookPod(namespace, "jupyter-nb-", notebookName)).To(Succeed(), "Notebook execution failed")
- }
-
// Parameterized test function that handles both auth and non-auth scenarios
runFeastWorkbenchIntegration := func(authEnabled bool) {
// Apply permissions only if auth is enabled
@@ -61,24 +51,8 @@ var _ = Describe("Feast Workbench Integration Connection Testing", Ordered, func
utils.ApplyFeastPermissions(permissionFile, "/feast-data/credit_scoring_local/feature_repo/permissions.py", namespace, feastDeploymentName)
}
- By(fmt.Sprintf("Setting namespace context to : %s", namespace))
- Expect(utils.SetNamespaceContext(namespace, testDir)).To(Succeed())
- fmt.Printf("Successfully set namespace context to: %s\n", namespace)
-
- By(fmt.Sprintf("Creating Config map: %s", configMapName))
- Expect(utils.CreateNotebookConfigMap(namespace, configMapName, notebookFile, "test/e2e_rhoai/resources/feature_repo", testDir)).To(Succeed())
- fmt.Printf("ConfigMap %s created successfully\n", configMapName)
-
- By(fmt.Sprintf("Creating Persistent volume claim: %s", notebookPVC))
- Expect(utils.CreateNotebookPVC(pvcFile, testDir)).To(Succeed())
- fmt.Printf("Persistent Volume Claim %s created successfully\n", notebookPVC)
-
- By(fmt.Sprintf("Creating rolebinding %s for the user", rolebindingName))
- Expect(utils.CreateNotebookRoleBinding(namespace, rolebindingName, utils.GetOCUser(testDir), testDir)).To(Succeed())
- fmt.Printf("Created rolebinding %s successfully\n", rolebindingName)
-
- // Create and monitor notebook for execution status
- createAndMonitorNotebook()
+ // Use the shared RunNotebookTest function for common setup and execution
+ utils.RunNotebookTest(namespace, configMapName, notebookFile, "test/e2e_rhoai/resources/feature_repo", pvcFile, rolebindingName, notebookPVC, notebookName, testDir)
}
BeforeAll(func() {
diff --git a/infra/feast-operator/test/e2e_rhoai/feast_wb_milvus_test.go b/infra/feast-operator/test/e2e_rhoai/feast_wb_milvus_test.go
index 91e5e4c2e41..4849670399d 100644
--- a/infra/feast-operator/test/e2e_rhoai/feast_wb_milvus_test.go
+++ b/infra/feast-operator/test/e2e_rhoai/feast_wb_milvus_test.go
@@ -52,34 +52,9 @@ var _ = Describe("Feast Jupyter Notebook Testing", Ordered, func() {
fmt.Printf("Namespace %s deleted successfully\n", namespace)
})
- runNotebookTest := func() {
- // Execute common setup steps
- By(fmt.Sprintf("Setting namespace context to : %s", namespace))
- Expect(utils.SetNamespaceContext(namespace, testDir)).To(Succeed())
- fmt.Printf("Successfully set namespace context to: %s\n", namespace)
-
- By(fmt.Sprintf("Creating Config map: %s", configMapName))
- Expect(utils.CreateNotebookConfigMap(namespace, configMapName, notebookFile, "test/e2e_rhoai/resources/feature_repo", testDir)).To(Succeed())
- fmt.Printf("ConfigMap %s created successfully\n", configMapName)
-
- By(fmt.Sprintf("Creating Persistent volume claim: %s", notebookPVC))
- Expect(utils.CreateNotebookPVC(pvcFile, testDir)).To(Succeed())
- fmt.Printf("Persistent Volume Claim %s created successfully\n", notebookPVC)
-
- By(fmt.Sprintf("Creating rolebinding %s for the user", rolebindingName))
- Expect(utils.CreateNotebookRoleBinding(namespace, rolebindingName, utils.GetOCUser(testDir), testDir)).To(Succeed())
- fmt.Printf("Created rolebinding %s successfully\n", rolebindingName)
-
- // Build notebook parameters and create notebook
- nbParams := utils.GetNotebookParams(namespace, configMapName, notebookPVC, notebookName, testDir)
- By("Creating Jupyter Notebook")
- Expect(utils.CreateNotebook(nbParams)).To(Succeed(), "Failed to create notebook")
-
- By("Monitoring notebook logs")
- Expect(utils.MonitorNotebookPod(namespace, "jupyter-nb-", notebookName)).To(Succeed(), "Notebook execution failed")
- }
-
Context("Feast Jupyter Notebook Test", func() {
- It("Should create and run a "+feastMilvusTest+" successfully", runNotebookTest)
+ It("Should create and run a "+feastMilvusTest+" successfully", func() {
+ utils.RunNotebookTest(namespace, configMapName, notebookFile, "test/e2e_rhoai/resources/feature_repo", pvcFile, rolebindingName, notebookPVC, notebookName, testDir)
+ })
})
})
diff --git a/infra/feast-operator/test/e2e_rhoai/feast_wb_ray_offline_store_test.go b/infra/feast-operator/test/e2e_rhoai/feast_wb_ray_offline_store_test.go
new file mode 100644
index 00000000000..a7e482063f0
--- /dev/null
+++ b/infra/feast-operator/test/e2e_rhoai/feast_wb_ray_offline_store_test.go
@@ -0,0 +1,77 @@
+/*
+Copyright 2025 Feast Community.
+
+Licensed 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.
+*/
+
+// Package e2erhoai provides end-to-end (E2E) test coverage for Feast integration with
+// Red Hat OpenShift AI (RHOAI) environments. This specific test validates the functionality
+// of executing a Feast Jupyter notebook with Ray offline store within a fully configured OpenShift namespace
+package e2erhoai
+
+import (
+ "fmt"
+ "os/exec"
+
+ utils "github.com/feast-dev/feast/infra/feast-operator/test/utils"
+ . "github.com/onsi/ginkgo/v2"
+ . "github.com/onsi/gomega"
+)
+
+var _ = Describe("Feast Jupyter Notebook Testing with Ray Offline Store", Ordered, func() {
+ const (
+ namespace = "test-ns-feast-wb-ray"
+ configMapName = "feast-wb-ray-cm"
+ rolebindingName = "rb-feast-ray-test"
+ notebookFile = "test/e2e_rhoai/resources/feast-wb-ray-test.ipynb"
+ pvcFile = "test/e2e_rhoai/resources/pvc.yaml"
+ kueueResourcesFile = "test/e2e_rhoai/resources/kueue_resources_setup.yaml"
+ notebookPVC = "jupyterhub-nb-kube-3aadmin-pvc"
+ testDir = "/test/e2e_rhoai"
+ notebookName = "feast-wb-ray-test.ipynb"
+ feastRayTest = "TestFeastRayOfflineStoreNotebook"
+ )
+
+ BeforeAll(func() {
+ By(fmt.Sprintf("Creating test namespace: %s", namespace))
+ Expect(utils.CreateNamespace(namespace, testDir)).To(Succeed())
+ fmt.Printf("Namespace %s created successfully\n", namespace)
+
+ By("Applying Kueue resources setup")
+ // Apply with namespace flag - cluster-scoped resources (ResourceFlavor, ClusterQueue) will be applied at cluster level,
+ // and namespace-scoped resources (LocalQueue) will be applied in the specified namespace
+ cmd := exec.Command("kubectl", "apply", "-f", kueueResourcesFile, "-n", namespace)
+ output, err := utils.Run(cmd, testDir)
+ Expect(err).ToNot(HaveOccurred(), fmt.Sprintf("Failed to apply Kueue resources: %v\nOutput: %s", err, output))
+ fmt.Printf("Kueue resources applied successfully\n")
+ })
+
+ AfterAll(func() {
+ By("Deleting Kueue resources")
+ // Delete with namespace flag - will delete namespace-scoped resources from the namespace
+ // and cluster-scoped resources from the cluster
+ cmd := exec.Command("kubectl", "delete", "-f", kueueResourcesFile, "-n", namespace, "--ignore-not-found=true")
+ _, _ = utils.Run(cmd, testDir)
+ fmt.Printf("Kueue resources cleanup completed\n")
+
+ By(fmt.Sprintf("Deleting test namespace: %s", namespace))
+ Expect(utils.DeleteNamespace(namespace, testDir)).To(Succeed())
+ fmt.Printf("Namespace %s deleted successfully\n", namespace)
+ })
+
+ Context("Feast Jupyter Notebook Test with Ray Offline store", func() {
+ It("Should create and run a "+feastRayTest+" successfully", func() {
+ utils.RunNotebookTest(namespace, configMapName, notebookFile, "test/e2e_rhoai/resources/feature_repo", pvcFile, rolebindingName, notebookPVC, notebookName, testDir)
+ })
+ })
+})
diff --git a/infra/feast-operator/test/e2e_rhoai/resources/feast-wb-ray-test.ipynb b/infra/feast-operator/test/e2e_rhoai/resources/feast-wb-ray-test.ipynb
new file mode 100644
index 00000000000..3b91bcccd8e
--- /dev/null
+++ b/infra/feast-operator/test/e2e_rhoai/resources/feast-wb-ray-test.ipynb
@@ -0,0 +1,516 @@
+{
+ "cells": [
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# --- Configuration Variables ---\n",
+ "import os \n",
+ "\n",
+ "# Namespace where your resources exist\n",
+ "namespace = os.environ.get(\"NAMESPACE\")\n",
+ "\n",
+ "fsconfigmap = \"cm-fs-data\"\n",
+ "\n",
+ "# Fetch token and server directly from oc CLI\n",
+ "import subprocess\n",
+ "\n",
+ "def oc(cmd):\n",
+ " return subprocess.check_output(cmd, shell=True).decode(\"utf-8\").strip()\n",
+ "\n",
+ "token = oc(\"oc whoami -t\")\n",
+ "server = oc(\"oc whoami --show-server\")\n",
+ "\n",
+ "os.environ[\"CLUSTER_TOKEN\"] = token\n",
+ "os.environ[\"CLUSTER_SERVER\"] = server\n",
+ "\n",
+ "\n",
+ "# RayCluster name\n",
+ "raycluster = \"feastraytest\"\n",
+ "os.environ[\"RAY_CLUSTER\"] = raycluster\n",
+ "\n",
+ "# Show configured values\n",
+ "print(\"Configuration Variables:\")\n",
+ "print(f\" Namespace: {namespace}\")\n",
+ "print(f\" Server: {server}\")\n",
+ "print(f\" Token: {'*' * 20}\") # hide actual token\n",
+ "print(f\" Ray Cluster: {raycluster}\")"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "! git clone https://github.com/Srihari1192/feast-rag-ray.git"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "%cd feast-rag-ray/feature_repo"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "!oc login --token=$token --server=$server"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "!oc create configmap $fsconfigmap --from-file=data/customer_daily_profile.parquet --from-file=data/driver_stats.parquet -n $namespace"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# Import pieces from codeflare-sdk\n",
+ "from codeflare_sdk import Cluster, ClusterConfiguration, TokenAuthentication\n",
+ "\n",
+ "# Create authentication with token and server from oc\n",
+ "auth = TokenAuthentication(\n",
+ " token=token,\n",
+ " server=server,\n",
+ " skip_tls=True\n",
+ ")\n",
+ "auth.login()\n",
+ "print(\"✓ Authentication successful\")\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "from kubernetes.client import (\n",
+ " V1Volume,\n",
+ " V1ConfigMapVolumeSource,\n",
+ " V1VolumeMount,\n",
+ ") \n",
+ "\n",
+ "data_volume = V1Volume(\n",
+ " name=\"data\",\n",
+ " config_map=V1ConfigMapVolumeSource(name=fsconfigmap)\n",
+ ")\n",
+ "\n",
+ "data_mount = V1VolumeMount(\n",
+ " name=\"data\",\n",
+ " mount_path=\"/opt/app-root/src/feast-rag-ray/feature_repo/data\",\n",
+ " read_only=True\n",
+ ")\n",
+ "\n",
+ "cluster = Cluster(ClusterConfiguration(\n",
+ " name=raycluster,\n",
+ " head_cpu_requests=1,\n",
+ " head_cpu_limits=1,\n",
+ " head_memory_requests=4,\n",
+ " head_memory_limits=4,\n",
+ " head_extended_resource_requests={'nvidia.com/gpu':0}, # For GPU enabled workloads set the head_extended_resource_requests and worker_extended_resource_requests\n",
+ " worker_extended_resource_requests={'nvidia.com/gpu':0},\n",
+ " num_workers=2,\n",
+ " worker_cpu_requests='250m',\n",
+ " worker_cpu_limits=1,\n",
+ " worker_memory_requests=4,\n",
+ " worker_memory_limits=4,\n",
+ " # image=\"\", # Optional Field \n",
+ " write_to_file=False, # When enabled Ray Cluster yaml files are written to /HOME/.codeflare/resources\n",
+ " local_queue=\"fs-user-queue\", # Specify the local queue manually\n",
+ " # ⭐ Best method: Use secretKeyRef to expose AWS credentials safely\n",
+ " volumes=[data_volume],\n",
+ " volume_mounts=[data_mount],\n",
+ " \n",
+ "))"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "cluster.apply()\n",
+ "# cluster.wait_ready()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "import time\n",
+ "\n",
+ "MAX_WAIT = 180 # 3 minutes\n",
+ "INTERVAL = 5 # check every 5 seconds\n",
+ "elapsed = 0\n",
+ "\n",
+ "print(\"⏳ Waiting up to 3 minutes for RayCluster to be READY...\\n\")\n",
+ "\n",
+ "while elapsed < MAX_WAIT:\n",
+ " details = cluster.details()\n",
+ " status = details.status.value\n",
+ "\n",
+ " print(details)\n",
+ " print(\"Cluster Status:\", status)\n",
+ "\n",
+ " if status == \"ready\":\n",
+ " print(\"✅ RayCluster is READY!\")\n",
+ " break\n",
+ " \n",
+ " print(f\"⏳ RayCluster is NOT ready yet: {status} ... checking again in {INTERVAL}s\\n\")\n",
+ " time.sleep(INTERVAL)\n",
+ " elapsed += INTERVAL\n",
+ "\n",
+ "else:\n",
+ " print(\"❌ Timeout: RayCluster did NOT become READY within 3 minutes.\")\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "! feast apply"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "import sys\n",
+ "from pathlib import Path\n",
+ "from feast import FeatureStore\n",
+ "\n",
+ "# Add feature repo to PYTHONPATH\n",
+ "repo_path = Path(\".\")\n",
+ "sys.path.append(str(repo_path))\n",
+ "\n",
+ "# Initialize Feature Store\n",
+ "print(\"Initializing Feast with Ray configuration...\")\n",
+ "store = FeatureStore(repo_path=\".\")\n",
+ "\n",
+ "# Assertions: Verify store is initialized correctly\n",
+ "assert store is not None, \"FeatureStore should be initialized\"\n",
+ "assert store.config is not None, \"Store config should be available\"\n",
+ "assert store.config.offline_store is not None, \"Offline store should be configured\"\n",
+ "\n",
+ "print(f\"✓ Offline store: {store.config.offline_store.type}\")\n",
+ "if hasattr(store.config, \"batch_engine\") and store.config.batch_engine:\n",
+ " print(f\"✓ Compute engine: {store.config.batch_engine.type}\")\n",
+ " # Assertion: Verify batch engine is configured if present\n",
+ " assert store.config.batch_engine.type is not None, \"Batch engine type should be set\"\n",
+ "else:\n",
+ " print(\"⚠ No compute engine configured\")\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## 2. Create Entity DataFrame\n",
+ "\n",
+ "Create an entity DataFrame for historical feature retrieval with point-in-time timestamps.\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "from datetime import datetime, timedelta\n",
+ "import pandas as pd\n",
+ "\n",
+ "# --- Create time window ---\n",
+ "end_date = datetime.now().replace(microsecond=0, second=0, minute=0)\n",
+ "start_date = end_date - timedelta(days=2)\n",
+ "\n",
+ "\n",
+ "entity_df = pd.DataFrame(\n",
+ " {\n",
+ " \"driver_id\": [1001, 1002, 1003],\n",
+ " \"customer_id\": [2001, 2002, 2003],\n",
+ " \"event_timestamp\": [\n",
+ " pd.Timestamp(end_date - timedelta(hours=24), tz=\"UTC\"),\n",
+ " pd.Timestamp(end_date - timedelta(hours=12), tz=\"UTC\"),\n",
+ " pd.Timestamp(end_date - timedelta(hours=6), tz=\"UTC\"),\n",
+ " ],\n",
+ " }\n",
+ ")\n",
+ "\n",
+ "# Assertions: Verify entity DataFrame is created correctly\n",
+ "assert len(entity_df) == 3, f\"Expected 3 rows, got {len(entity_df)}\"\n",
+ "assert \"driver_id\" in entity_df.columns, \"driver_id column should be present\"\n",
+ "assert \"customer_id\" in entity_df.columns, \"customer_id column should be present\"\n",
+ "assert \"event_timestamp\" in entity_df.columns, \"event_timestamp column should be present\"\n",
+ "assert all(entity_df[\"driver_id\"].isin([1001, 1002, 1003])), \"driver_id values should match expected\"\n",
+ "assert all(entity_df[\"customer_id\"].isin([2001, 2002, 2003])), \"customer_id values should match expected\"\n",
+ "assert entity_df[\"event_timestamp\"].notna().all(), \"All event_timestamp values should be non-null\"\n",
+ "\n",
+ "print(f\"✓ Created entity DataFrame with {len(entity_df)} rows\")\n",
+ "print(f\"✓ Time range: {start_date} to {end_date}\")\n",
+ "print(\"\\nEntity DataFrame:\")\n",
+ "print(entity_df)\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## 3. Retrieve Historical Features\n",
+ "\n",
+ "Retrieve historical features using Ray compute engine for distributed point-in-time joins.\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# Cell 4: Retrieve Historical Features\n",
+ "print(\"Retrieving historical features with Ray compute engine...\")\n",
+ "print(\"(This demonstrates distributed point-in-time joins)\")\n",
+ "\n",
+ "try:\n",
+ " # Get historical features - this uses Ray compute engine for distributed processing\n",
+ " historical_features = store.get_historical_features(\n",
+ " entity_df=entity_df,\n",
+ " features=[\n",
+ " \"driver_hourly_stats:conv_rate\",\n",
+ " \"driver_hourly_stats:acc_rate\",\n",
+ " \"driver_hourly_stats:avg_daily_trips\",\n",
+ " \"customer_daily_profile:current_balance\",\n",
+ " \"customer_daily_profile:avg_passenger_count\",\n",
+ " \"customer_daily_profile:lifetime_trip_count\",\n",
+ " ],\n",
+ " )\n",
+ "\n",
+ " # Convert to DataFrame - Ray processes this efficiently\n",
+ " historical_df = historical_features.to_df()\n",
+ " \n",
+ " # Assertions: Verify historical features are retrieved correctly\n",
+ " assert historical_df is not None, \"Historical features DataFrame should not be None\"\n",
+ " assert len(historical_df) > 0, \"Should retrieve at least one row of historical features\"\n",
+ " assert \"driver_id\" in historical_df.columns, \"driver_id should be in the result\"\n",
+ " assert \"customer_id\" in historical_df.columns, \"customer_id should be in the result\"\n",
+ " \n",
+ " # Verify expected feature columns are present (some may be None if data doesn't exist)\n",
+ " expected_features = [\n",
+ " \"conv_rate\", \"acc_rate\", \"avg_daily_trips\",\n",
+ " \"current_balance\", \"avg_passenger_count\", \"lifetime_trip_count\"\n",
+ " ]\n",
+ " feature_columns = [col for col in historical_df.columns if col in expected_features]\n",
+ " assert len(feature_columns) > 0, f\"Should have at least one feature column, got: {historical_df.columns.tolist()}\"\n",
+ " \n",
+ " print(f\"✓ Retrieved {len(historical_df)} historical feature rows\")\n",
+ " print(f\"✓ Features: {list(historical_df.columns)}\")\n",
+ " \n",
+ " # Display the results\n",
+ " print(\"\\nHistorical Features DataFrame:\")\n",
+ " display(historical_df.head(10))\n",
+ "\n",
+ "except Exception as e:\n",
+ " print(f\"⚠ Historical features retrieval failed: {e}\")\n",
+ " print(\"This might be due to missing Ray dependencies or data\")\n",
+ " raise\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## 4. Test On-Demand Feature Transformations\n",
+ "\n",
+ "Demonstrate on-demand feature transformations that are computed at request time.\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# Cell 5: Test On-Demand Features\n",
+ "print(\"Testing on-demand feature transformations...\")\n",
+ "\n",
+ "try:\n",
+ " # Get features including on-demand transformations\n",
+ " features_with_odfv = store.get_historical_features(\n",
+ " entity_df=entity_df.head(1),\n",
+ " features=[\n",
+ " \"driver_hourly_stats:conv_rate\",\n",
+ " \"driver_hourly_stats:acc_rate\",\n",
+ " \"driver_hourly_stats:avg_daily_trips\",\n",
+ " \"driver_activity_v2:conv_rate_plus_acc_rate\",\n",
+ " \"driver_activity_v2:trips_per_day_normalized\",\n",
+ " ],\n",
+ " )\n",
+ "\n",
+ " odfv_df = features_with_odfv.to_df()\n",
+ " \n",
+ " # Assertions: Verify on-demand features are computed correctly\n",
+ " assert odfv_df is not None, \"On-demand features DataFrame should not be None\"\n",
+ " assert len(odfv_df) > 0, \"Should retrieve at least one row with on-demand features\"\n",
+ " assert \"driver_id\" in odfv_df.columns, \"driver_id should be in the result\"\n",
+ " \n",
+ " # Verify on-demand feature columns if they exist\n",
+ " if \"conv_rate_plus_acc_rate\" in odfv_df.columns:\n",
+ " # Assertion: Verify the on-demand feature is computed\n",
+ " assert odfv_df[\"conv_rate_plus_acc_rate\"].notna().any(), \"conv_rate_plus_acc_rate should have non-null values\"\n",
+ " print(\"✓ On-demand feature 'conv_rate_plus_acc_rate' is computed\")\n",
+ " \n",
+ " if \"trips_per_day_normalized\" in odfv_df.columns:\n",
+ " assert odfv_df[\"trips_per_day_normalized\"].notna().any(), \"trips_per_day_normalized should have non-null values\"\n",
+ " print(\"✓ On-demand feature 'trips_per_day_normalized' is computed\")\n",
+ " \n",
+ " print(f\"✓ Retrieved {len(odfv_df)} rows with on-demand transformations\")\n",
+ " \n",
+ " # Display results\n",
+ " print(\"\\nFeatures with On-Demand Transformations:\")\n",
+ " display(odfv_df)\n",
+ " \n",
+ " # Show specific transformed features\n",
+ " if \"conv_rate_plus_acc_rate\" in odfv_df.columns:\n",
+ " print(\"\\nSample with on-demand features:\")\n",
+ " display(\n",
+ " odfv_df[[\"driver_id\", \"conv_rate\", \"acc_rate\", \"conv_rate_plus_acc_rate\"]]\n",
+ " )\n",
+ "\n",
+ "except Exception as e:\n",
+ " print(f\"⚠ On-demand features failed: {e}\")\n",
+ " raise\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## 5. Materialize Features to Online Store\n",
+ "\n",
+ "Materialize features to the online store using Ray compute engine for efficient batch processing.\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "from datetime import timezone\n",
+ "print(\"Materializing features to online store...\")\n",
+ "store.materialize(\n",
+ "\tstart_date=datetime(2025, 1, 1, tzinfo=timezone.utc),\n",
+ "\tend_date=end_date,\n",
+ ")\n",
+ "\n",
+ "# Minimal output assertion: materialization succeeded if no exception\n",
+ "assert True, \"Materialization completed successfully\"\n",
+ "print(\"✓ Initial materialization successful\")"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## 6. Test Online Feature Serving\n",
+ "\n",
+ "Retrieve features from the online store for low-latency serving.\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# Cell 7: Test Online Feature Serving\n",
+ "print(\"Testing online feature serving...\")\n",
+ "\n",
+ "try:\n",
+ " entity_rows = [\n",
+ " {\"driver_id\": 1001, \"customer_id\": 2001},\n",
+ " {\"driver_id\": 1002, \"customer_id\": 2002},\n",
+ " ]\n",
+ " \n",
+ " # Assertion: Verify entity rows are valid\n",
+ " assert len(entity_rows) == 2, \"Should have 2 entity rows\"\n",
+ " assert all(\"driver_id\" in row for row in entity_rows), \"All entity rows should have driver_id\"\n",
+ " assert all(\"customer_id\" in row for row in entity_rows), \"All entity rows should have customer_id\"\n",
+ " \n",
+ " online_features = store.get_online_features(\n",
+ " features=[\n",
+ " \"driver_hourly_stats:conv_rate\",\n",
+ " \"driver_hourly_stats:acc_rate\",\n",
+ " \"customer_daily_profile:current_balance\",\n",
+ " ],\n",
+ " entity_rows=entity_rows,\n",
+ " )\n",
+ "\n",
+ " online_df = online_features.to_df()\n",
+ " \n",
+ " # Assertions: Verify online features are retrieved correctly\n",
+ " assert online_df is not None, \"Online features DataFrame should not be None\"\n",
+ " assert len(online_df) == len(entity_rows), f\"Should retrieve {len(entity_rows)} rows, got {len(online_df)}\"\n",
+ " assert \"driver_id\" in online_df.columns, \"driver_id should be in the result\"\n",
+ " assert \"customer_id\" in online_df.columns, \"customer_id should be in the result\"\n",
+ " \n",
+ " # Verify expected feature columns are present\n",
+ " expected_features = [\"conv_rate\", \"acc_rate\", \"current_balance\"]\n",
+ " feature_columns = [col for col in online_df.columns if col in expected_features]\n",
+ " assert len(feature_columns) > 0, f\"Should have at least one feature column, got: {online_df.columns.tolist()}\"\n",
+ " \n",
+ " # Verify entity IDs match\n",
+ " assert all(online_df[\"driver_id\"].isin([1001, 1002])), \"driver_id values should match entity rows\"\n",
+ " assert all(online_df[\"customer_id\"].isin([2001, 2002])), \"customer_id values should match entity rows\"\n",
+ " \n",
+ " print(f\"✓ Retrieved {len(online_df)} online feature rows\")\n",
+ " print(f\"✓ Features retrieved: {feature_columns}\")\n",
+ " \n",
+ " print(\"\\nOnline Features DataFrame:\")\n",
+ " display(online_df)\n",
+ "\n",
+ "except Exception as e:\n",
+ " print(f\"⚠ Online serving failed: {e}\")\n",
+ " raise\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "cluster.down()"
+ ]
+ }
+ ],
+ "metadata": {
+ "language_info": {
+ "name": "python"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 2
+}
diff --git a/infra/feast-operator/test/e2e_rhoai/resources/kueue_resources_setup.yaml b/infra/feast-operator/test/e2e_rhoai/resources/kueue_resources_setup.yaml
new file mode 100644
index 00000000000..ebcac54f4a0
--- /dev/null
+++ b/infra/feast-operator/test/e2e_rhoai/resources/kueue_resources_setup.yaml
@@ -0,0 +1,31 @@
+apiVersion: kueue.x-k8s.io/v1beta1
+kind: ResourceFlavor
+metadata:
+ name: "fs-resource-flavor"
+---
+apiVersion: kueue.x-k8s.io/v1beta1
+kind: ClusterQueue
+metadata:
+ name: "fs-cluster-queue"
+spec:
+ namespaceSelector: {} # match all.
+ resourceGroups:
+ - coveredResources: ["cpu", "memory","nvidia.com/gpu"]
+ flavors:
+ - name: "fs-resource-flavor"
+ resources:
+ - name: "cpu"
+ nominalQuota: 9
+ - name: "memory"
+ nominalQuota: 36Gi
+ - name: "nvidia.com/gpu"
+ nominalQuota: 0
+---
+apiVersion: kueue.x-k8s.io/v1beta1
+kind: LocalQueue
+metadata:
+ name: "fs-user-queue"
+ annotations:
+ "kueue.x-k8s.io/default-queue": "true"
+spec:
+ clusterQueue: "fs-cluster-queue"
diff --git a/infra/feast-operator/test/utils/notebook_util.go b/infra/feast-operator/test/utils/notebook_util.go
index a4a3e14a2ce..cad4a734a01 100644
--- a/infra/feast-operator/test/utils/notebook_util.go
+++ b/infra/feast-operator/test/utils/notebook_util.go
@@ -9,6 +9,7 @@ import (
"text/template"
"time"
+ . "github.com/onsi/ginkgo/v2"
. "github.com/onsi/gomega"
)
@@ -340,3 +341,32 @@ func SetupNotebookEnvironment(namespace, configMapName, notebookFile, featureRep
return nil
}
+
+// RunNotebookTest performs all the setup steps, creates a notebook, and monitors its execution.
+// This function encapsulates the common notebook test workflow used across multiple test files.
+func RunNotebookTest(namespace, configMapName, notebookFile, featureRepoPath, pvcFile, rolebindingName, notebookPVC, notebookName, testDir string) {
+ // Execute common setup steps
+ By(fmt.Sprintf("Setting namespace context to : %s", namespace))
+ Expect(SetNamespaceContext(namespace, testDir)).To(Succeed())
+ fmt.Printf("Successfully set namespace context to: %s\n", namespace)
+
+ By(fmt.Sprintf("Creating Config map: %s", configMapName))
+ Expect(CreateNotebookConfigMap(namespace, configMapName, notebookFile, featureRepoPath, testDir)).To(Succeed())
+ fmt.Printf("ConfigMap %s created successfully\n", configMapName)
+
+ By(fmt.Sprintf("Creating Persistent volume claim: %s", notebookPVC))
+ Expect(CreateNotebookPVC(pvcFile, testDir)).To(Succeed())
+ fmt.Printf("Persistent Volume Claim %s created successfully\n", notebookPVC)
+
+ By(fmt.Sprintf("Creating rolebinding %s for the user", rolebindingName))
+ Expect(CreateNotebookRoleBinding(namespace, rolebindingName, GetOCUser(testDir), testDir)).To(Succeed())
+ fmt.Printf("Created rolebinding %s successfully\n", rolebindingName)
+
+ // Build notebook parameters and create notebook
+ nbParams := GetNotebookParams(namespace, configMapName, notebookPVC, notebookName, testDir)
+ By("Creating Jupyter Notebook")
+ Expect(CreateNotebook(nbParams)).To(Succeed(), "Failed to create notebook")
+
+ By("Monitoring notebook logs")
+ Expect(MonitorNotebookPod(namespace, "jupyter-nb-", notebookName)).To(Succeed(), "Notebook execution failed")
+}
From edefc3f0afdb46d73070e230eef19c0941f0b581 Mon Sep 17 00:00:00 2001
From: Francisco Javier Arceo
Date: Mon, 22 Dec 2025 20:04:28 -0500
Subject: [PATCH 04/26] feat: Enable static artifacts for feature server that
can be used in Feature Transformations (#5787)
* feat: Enable static artifacts for feature server that can be used in Feature Transformations
Signed-off-by: Francisco Javier Arceo
* feat: Enable static artifacts for feature server that can be used in Feature Transformations
Signed-off-by: Francisco Javier Arceo
* feat: Enable static artifacts for feature server that can be used in Feature Transformations
Signed-off-by: Francisco Javier Arceo
* updated docs
Signed-off-by: Francisco Javier Arceo
* adding docs
Signed-off-by: Francisco Javier Arceo
* update
Signed-off-by: Francisco Javier Arceo
---------
Signed-off-by: Francisco Javier Arceo
---
docs/SUMMARY.md | 1 +
docs/reference/alpha-static-artifacts.md | 314 ++++++++++++++++++
.../feature-servers/python-feature-server.md | 42 +++
sdk/python/feast/feature_server.py | 49 +++
.../feast/templates/pytorch_nlp/README.md | 127 ++++++-
.../pytorch_nlp/feature_repo/example_repo.py | 115 +++----
.../feature_repo/static_artifacts.py | 139 ++++++++
sdk/python/tests/unit/test_feature_server.py | 201 +++++++++++
8 files changed, 921 insertions(+), 67 deletions(-)
create mode 100644 docs/reference/alpha-static-artifacts.md
create mode 100644 sdk/python/feast/templates/pytorch_nlp/feature_repo/static_artifacts.py
diff --git a/docs/SUMMARY.md b/docs/SUMMARY.md
index 50fea300675..7d85aba1ad0 100644
--- a/docs/SUMMARY.md
+++ b/docs/SUMMARY.md
@@ -158,6 +158,7 @@
* [Registry server](reference/feature-servers/registry-server.md)
* [\[Beta\] Web UI](reference/alpha-web-ui.md)
* [\[Beta\] On demand feature view](reference/beta-on-demand-feature-view.md)
+* [\[Alpha\] Static Artifacts Loading](reference/alpha-static-artifacts.md)
* [\[Alpha\] Vector Database](reference/alpha-vector-database.md)
* [\[Alpha\] Data quality monitoring](reference/dqm.md)
* [\[Alpha\] Streaming feature computation with Denormalized](reference/denormalized.md)
diff --git a/docs/reference/alpha-static-artifacts.md b/docs/reference/alpha-static-artifacts.md
new file mode 100644
index 00000000000..627898f847f
--- /dev/null
+++ b/docs/reference/alpha-static-artifacts.md
@@ -0,0 +1,314 @@
+# [Alpha] Static Artifacts Loading
+
+**Warning**: This is an experimental feature. To our knowledge, this is stable, but there are still rough edges in the experience. Contributions are welcome!
+
+## Overview
+
+Static Artifacts Loading allows you to load models, lookup tables, and other static resources once during feature server startup instead of loading them on each request. These artifacts are cached in memory and accessible to on-demand feature views for real-time inference.
+
+This feature optimizes the performance of on-demand feature views that require external resources by eliminating the overhead of repeatedly loading the same artifacts during request processing.
+
+### Why Use Static Artifacts Loading?
+
+Static artifacts loading enables data scientists and ML engineers to:
+
+1. **Improve performance**: Eliminate model loading overhead from each feature request
+2. **Enable complex transformations**: Use pre-trained models in on-demand feature views without performance penalties
+3. **Share resources**: Multiple feature views can access the same loaded artifacts
+4. **Simplify deployment**: Package models and lookup tables with your feature repository
+
+Common use cases include:
+- Sentiment analysis using pre-trained transformers models
+- Text classification with small neural networks
+- Lookup-based transformations using static dictionaries
+- Embedding generation with pre-computed vectors
+
+## How It Works
+
+1. **Feature Repository Setup**: Create a `static_artifacts.py` file in your feature repository root
+2. **Server Startup**: When `feast serve` starts, it automatically looks for and loads the artifacts
+3. **Memory Storage**: Artifacts are stored in the FastAPI application state and accessible via global references
+4. **Request Processing**: On-demand feature views access pre-loaded artifacts for fast transformations
+
+## Example 1: Basic Model Loading
+
+Create a `static_artifacts.py` file in your feature repository:
+
+```python
+# static_artifacts.py
+from fastapi import FastAPI
+from transformers import pipeline
+
+def load_sentiment_model():
+ """Load sentiment analysis model."""
+ return pipeline(
+ "sentiment-analysis",
+ model="cardiffnlp/twitter-roberta-base-sentiment-latest",
+ device="cpu"
+ )
+
+def load_artifacts(app: FastAPI):
+ """Load static artifacts into app.state."""
+ app.state.sentiment_model = load_sentiment_model()
+
+ # Update global references for access from feature views
+ import example_repo
+ example_repo._sentiment_model = app.state.sentiment_model
+```
+
+Use the pre-loaded model in your on-demand feature view:
+
+```python
+# example_repo.py
+import pandas as pd
+from feast.on_demand_feature_view import on_demand_feature_view
+from feast import Field
+from feast.types import String, Float32
+
+# Global reference for static artifacts
+_sentiment_model = None
+
+@on_demand_feature_view(
+ sources=[text_input_request],
+ schema=[
+ Field(name="predicted_sentiment", dtype=String),
+ Field(name="sentiment_confidence", dtype=Float32),
+ ],
+)
+def sentiment_prediction(inputs: pd.DataFrame) -> pd.DataFrame:
+ """Sentiment prediction using pre-loaded model."""
+ global _sentiment_model
+
+ results = []
+ for text in inputs["input_text"]:
+ predictions = _sentiment_model(text)
+ best_pred = max(predictions, key=lambda x: x["score"])
+
+ results.append({
+ "predicted_sentiment": best_pred["label"],
+ "sentiment_confidence": best_pred["score"],
+ })
+
+ return pd.DataFrame(results)
+```
+
+## Example 2: Multiple Artifacts with Lookup Tables
+
+Load multiple types of artifacts:
+
+```python
+# static_artifacts.py
+from fastapi import FastAPI
+from transformers import pipeline
+import json
+from pathlib import Path
+
+def load_sentiment_model():
+ """Load sentiment analysis model."""
+ return pipeline("sentiment-analysis", model="distilbert-base-uncased-finetuned-sst-2-english")
+
+def load_lookup_tables():
+ """Load static lookup tables."""
+ return {
+ "sentiment_labels": {"NEGATIVE": "negative", "POSITIVE": "positive"},
+ "domain_categories": {"twitter.com": "social", "news.com": "news", "github.com": "tech"},
+ "priority_users": {"user_123", "user_456", "user_789"}
+ }
+
+def load_config():
+ """Load application configuration."""
+ return {
+ "model_threshold": 0.7,
+ "max_text_length": 512,
+ "default_sentiment": "neutral"
+ }
+
+def load_artifacts(app: FastAPI):
+ """Load all static artifacts."""
+ app.state.sentiment_model = load_sentiment_model()
+ app.state.lookup_tables = load_lookup_tables()
+ app.state.config = load_config()
+
+ # Update global references
+ import example_repo
+ example_repo._sentiment_model = app.state.sentiment_model
+ example_repo._lookup_tables = app.state.lookup_tables
+ example_repo._config = app.state.config
+```
+
+Use multiple artifacts in feature transformations:
+
+```python
+# example_repo.py
+import pandas as pd
+from feast.on_demand_feature_view import on_demand_feature_view
+
+# Global references for static artifacts
+_sentiment_model = None
+_lookup_tables: dict = {}
+_config: dict = {}
+
+@on_demand_feature_view(
+ sources=[text_input_request, user_input_request],
+ schema=[
+ Field(name="predicted_sentiment", dtype=String),
+ Field(name="is_priority_user", dtype=Bool),
+ Field(name="domain_category", dtype=String),
+ ],
+)
+def enriched_prediction(inputs: pd.DataFrame) -> pd.DataFrame:
+ """Multi-artifact feature transformation."""
+ global _sentiment_model, _lookup_tables, _config
+
+ results = []
+ for i, row in inputs.iterrows():
+ text = row["input_text"]
+ user_id = row["user_id"]
+ domain = row.get("domain", "")
+
+ # Use pre-loaded model
+ predictions = _sentiment_model(text)
+ sentiment_scores = {pred["label"]: pred["score"] for pred in predictions}
+
+ # Use lookup tables
+ predicted_sentiment = _lookup_tables["sentiment_labels"].get(
+ max(sentiment_scores, key=sentiment_scores.get),
+ _config["default_sentiment"]
+ )
+
+ is_priority = user_id in _lookup_tables["priority_users"]
+ category = _lookup_tables["domain_categories"].get(domain, "unknown")
+
+ results.append({
+ "predicted_sentiment": predicted_sentiment,
+ "is_priority_user": is_priority,
+ "domain_category": category,
+ })
+
+ return pd.DataFrame(results)
+```
+
+## Container Deployment
+
+Static artifacts work with containerized deployments. Include your artifacts in the container image:
+
+```dockerfile
+FROM python:3.11-slim
+
+# Install dependencies
+COPY requirements.txt .
+RUN pip install -r requirements.txt
+
+# Copy feature repository including static_artifacts.py
+COPY feature_repo/ /app/feature_repo/
+
+WORKDIR /app/feature_repo
+
+# Start feature server
+CMD ["feast", "serve", "--host", "0.0.0.0"]
+```
+
+The server will automatically load static artifacts during container startup.
+
+## Supported Artifact Types
+
+### Recommended Artifacts
+- **Small ML models**: Sentiment analysis, text classification, small neural networks
+- **Lookup tables**: Label mappings, category dictionaries, user segments
+- **Configuration data**: Model parameters, feature mappings, business rules
+- **Pre-computed embeddings**: User vectors, item features, static representations
+
+### Not Recommended
+- **Large Language Models**: Use dedicated serving solutions (vLLM, TensorRT-LLM, TGI)
+- **Models requiring specialized hardware**: GPU clusters, TPUs
+- **Frequently updated models**: Consider model registries with versioning
+- **Large datasets**: Use feature views with proper data sources instead
+
+## Error Handling
+
+Static artifacts loading includes graceful error handling:
+- **Missing file**: Server starts normally without static artifacts
+- **Loading errors**: Warnings are logged, feature views should implement fallback logic
+- **Partial failures**: Successfully loaded artifacts remain available
+
+Always implement fallback behavior in your feature transformations:
+
+```python
+@on_demand_feature_view(...)
+def robust_prediction(inputs: pd.DataFrame) -> pd.DataFrame:
+ global _sentiment_model
+
+ results = []
+ for text in inputs["input_text"]:
+ if _sentiment_model is not None:
+ # Use pre-loaded model
+ predictions = _sentiment_model(text)
+ sentiment = max(predictions, key=lambda x: x["score"])["label"]
+ else:
+ # Fallback when artifacts aren't available
+ sentiment = "neutral"
+
+ results.append({"predicted_sentiment": sentiment})
+
+ return pd.DataFrame(results)
+```
+
+## Starting the Feature Server
+
+Start the feature server as usual:
+
+```bash
+feast serve
+```
+
+You'll see log messages indicating artifact loading:
+
+```
+INFO:fastapi:Loading static artifacts from static_artifacts.py
+INFO:fastapi:Static artifacts loading completed
+INFO:uvicorn:Application startup complete
+```
+
+## Template Example
+
+The PyTorch NLP template demonstrates static artifacts loading:
+
+```bash
+feast init my-nlp-project -t pytorch_nlp
+cd my-nlp-project/feature_repo
+feast serve
+```
+
+This template includes a complete example with sentiment analysis model loading, lookup tables, and integration with on-demand feature views.
+
+## Performance Considerations
+
+- **Startup time**: Artifacts are loaded during server initialization, which may increase startup time
+- **Memory usage**: All artifacts remain in memory for the server's lifetime
+- **Concurrency**: Artifacts are shared across all request threads
+- **Container resources**: Ensure sufficient memory allocation for your artifacts
+
+## Configuration
+
+Currently, static artifacts loading uses convention-based configuration:
+- **File name**: Must be named `static_artifacts.py`
+- **Location**: Must be in the feature repository root directory
+- **Function name**: Must implement `load_artifacts(app: FastAPI)` function
+
+## Limitations
+
+- File name and location are currently fixed (not configurable)
+- Artifacts are loaded synchronously during startup
+- No built-in artifact versioning or hot reloading
+- Limited to Python-based artifacts (no external binaries)
+
+## Contributing
+
+This is an alpha feature and we welcome contributions! Areas for improvement:
+- Configurable artifact file locations
+- Asynchronous artifact loading
+- Built-in artifact versioning
+- Performance monitoring and metrics
+- Integration with model registries
+
+Please report issues and contribute improvements via the [Feast GitHub repository](https://github.com/feast-dev/feast).
\ No newline at end of file
diff --git a/docs/reference/feature-servers/python-feature-server.md b/docs/reference/feature-servers/python-feature-server.md
index f8e121ad6af..df0b0b1f78d 100644
--- a/docs/reference/feature-servers/python-feature-server.md
+++ b/docs/reference/feature-servers/python-feature-server.md
@@ -268,6 +268,48 @@ To start the feature server in TLS mode, you need to provide the private and pub
feast serve --key /path/to/key.pem --cert /path/to/cert.pem
```
+# [Alpha] Static Artifacts Loading
+
+**Warning**: This is an experimental feature. To our knowledge, this is stable, but there are still rough edges in the experience.
+
+Static artifacts loading allows you to load models, lookup tables, and other static resources once during feature server startup instead of loading them on each request. This improves performance for on-demand feature views that require external resources.
+
+## Quick Example
+
+Create a `static_artifacts.py` file in your feature repository:
+
+```python
+# static_artifacts.py
+from fastapi import FastAPI
+from transformers import pipeline
+
+def load_artifacts(app: FastAPI):
+ """Load static artifacts into app.state."""
+ app.state.sentiment_model = pipeline("sentiment-analysis", model="distilbert-base-uncased-finetuned-sst-2-english")
+
+ # Update global references for access from feature views
+ import example_repo
+ example_repo._sentiment_model = app.state.sentiment_model
+```
+
+Access pre-loaded artifacts in your on-demand feature views:
+
+```python
+# example_repo.py
+_sentiment_model = None
+
+@on_demand_feature_view(...)
+def sentiment_prediction(inputs: pd.DataFrame) -> pd.DataFrame:
+ global _sentiment_model
+ return _sentiment_model(inputs["text"])
+```
+
+## Documentation
+
+For comprehensive documentation, examples, and best practices, see the [Alpha Static Artifacts Loading](../alpha-static-artifacts.md) reference guide.
+
+The [PyTorch NLP template](https://github.com/feast-dev/feast/tree/main/sdk/python/feast/templates/pytorch_nlp) provides a complete working example.
+
# Online Feature Server Permissions and Access Control
## API Endpoints and Permissions
diff --git a/sdk/python/feast/feature_server.py b/sdk/python/feast/feature_server.py
index e3ec16496cc..fbbb38821af 100644
--- a/sdk/python/feast/feature_server.py
+++ b/sdk/python/feast/feature_server.py
@@ -155,6 +155,52 @@ async def _get_features(
return features
+async def load_static_artifacts(app: FastAPI, store):
+ """
+ Load static artifacts (models, lookup tables, etc.) into app.state.
+
+ This function can be extended to load various types of static artifacts:
+ - Small ML models (scikit-learn, small neural networks)
+ - Lookup tables and reference data
+ - Configuration parameters
+ - Pre-computed embeddings
+
+ Note: Not recommended for large language models - use dedicated
+ model serving solutions (vLLM, TGI, etc.) for those.
+ """
+ try:
+ # Import here to avoid loading heavy dependencies unless needed
+ import importlib.util
+ import inspect
+ from pathlib import Path
+
+ # Look for static artifacts loading in the feature repository
+ # This allows templates and users to define their own artifact loading
+ repo_path = Path(store.repo_path) if store.repo_path else Path.cwd()
+ artifacts_file = repo_path / "static_artifacts.py"
+
+ if artifacts_file.exists():
+ # Load and execute custom static artifacts loading
+ spec = importlib.util.spec_from_file_location(
+ "static_artifacts", artifacts_file
+ )
+ if spec and spec.loader:
+ artifacts_module = importlib.util.module_from_spec(spec)
+ spec.loader.exec_module(artifacts_module)
+
+ # Look for load_artifacts function
+ if hasattr(artifacts_module, "load_artifacts"):
+ load_func = artifacts_module.load_artifacts
+ if inspect.iscoroutinefunction(load_func):
+ await load_func(app)
+ else:
+ load_func(app)
+ logger.info("Loaded static artifacts from static_artifacts.py")
+ except Exception as e:
+ # Non-fatal error - feature server should still start
+ logger.warning(f"Failed to load static artifacts: {e}")
+
+
def get_app(
store: "feast.FeatureStore",
registry_ttl_sec: int = DEFAULT_FEATURE_SERVER_REGISTRY_TTL,
@@ -217,6 +263,9 @@ def async_refresh():
@asynccontextmanager
async def lifespan(app: FastAPI):
+ # Load static artifacts before initializing store
+ await load_static_artifacts(app, store)
+
await store.initialize()
async_refresh()
yield
diff --git a/sdk/python/feast/templates/pytorch_nlp/README.md b/sdk/python/feast/templates/pytorch_nlp/README.md
index 3d9babbd232..7fe0e0e708d 100644
--- a/sdk/python/feast/templates/pytorch_nlp/README.md
+++ b/sdk/python/feast/templates/pytorch_nlp/README.md
@@ -157,7 +157,8 @@ my-sentiment-project/
├── README.md # This file
└── feature_repo/
├── feature_store.yaml # Feast configuration
- ├── example_repo.py # Feature definitions
+ ├── example_repo.py # Feature definitions (uses pre-loaded artifacts)
+ ├── static_artifacts.py # Static artifacts loading (models, lookup tables)
├── test_workflow.py # Complete demo workflow
└── data/ # Generated sample data
└── sentiment_data.parquet
@@ -205,6 +206,109 @@ offline_store:
- ✅ **No external services** - No Redis/cloud required
- ✅ **Perfect for demos** - Easy to share and understand
+## 🚀 Static Artifacts Loading
+
+This template demonstrates **static artifacts loading** - a performance optimization that loads models, lookup tables, and other artifacts once at feature server startup instead of on each request.
+
+### What are Static Artifacts?
+
+Static artifacts are pre-loaded resources that remain constant during server operation:
+- **Small ML models** (sentiment analysis, classification, small neural networks)
+- **Lookup tables and mappings** (label encoders, category mappings)
+- **Configuration data** (model parameters, feature mappings)
+- **Pre-computed embeddings** (user embeddings, item features)
+
+### Performance Benefits
+
+**Before (Per-Request Loading):**
+```python
+def sentiment_prediction(inputs):
+ # ❌ Model loads on every request - slow!
+ model = pipeline("sentiment-analysis", model="...")
+ return model(inputs["text"])
+```
+
+**After (Startup Loading):**
+```python
+# ✅ Model loads once at server startup
+def sentiment_prediction(inputs):
+ global _sentiment_model # Pre-loaded model
+ return _sentiment_model(inputs["text"])
+```
+
+**Performance Impact:**
+- 🚀 **10-100x faster** inference (no model loading overhead)
+- 💾 **Lower memory usage** (shared model across requests)
+- ⚡ **Better scalability** (consistent response times)
+
+### How It Works
+
+1. **Startup**: Feast server loads `static_artifacts.py` during initialization
+2. **Loading**: `load_artifacts(app)` function stores models in `app.state`
+3. **Access**: On-demand feature views access pre-loaded artifacts via global references
+
+```python
+# static_artifacts.py - Define what to load
+def load_artifacts(app: FastAPI):
+ app.state.sentiment_model = load_sentiment_model()
+ app.state.lookup_tables = load_lookup_tables()
+
+ # Update global references for easy access
+ import example_repo
+ example_repo._sentiment_model = app.state.sentiment_model
+ example_repo._lookup_tables = app.state.lookup_tables
+
+# example_repo.py - Use pre-loaded artifacts
+_sentiment_model = None # Set by static_artifacts.py
+
+def sentiment_prediction(inputs):
+ global _sentiment_model
+ if _sentiment_model is not None:
+ return _sentiment_model(inputs["text"])
+ else:
+ return fallback_predictions()
+```
+
+### Scope and Limitations
+
+**✅ Great for:**
+- Small to medium models (< 1GB)
+- Fast-loading models (sentiment analysis, classification)
+- Lookup tables and reference data
+- Configuration parameters
+- Pre-computed embeddings
+
+**❌ Not recommended for:**
+- **Large Language Models (LLMs)** - Use dedicated serving solutions like vLLM, TGI, or TensorRT-LLM
+- Models requiring GPU clusters
+- Frequently updated models
+- Models with complex initialization dependencies
+
+**Note:** Feast is optimized for feature serving, not large model inference. For production LLM workloads, use specialized model serving platforms.
+
+### Customizing Static Artifacts
+
+To add your own artifacts, modify `static_artifacts.py`:
+
+```python
+def load_custom_embeddings():
+ """Load pre-computed user embeddings."""
+ embeddings_file = Path(__file__).parent / "data" / "user_embeddings.npy"
+ if embeddings_file.exists():
+ import numpy as np
+ return {"embeddings": np.load(embeddings_file)}
+ return None
+
+def load_artifacts(app: FastAPI):
+ # Load your custom artifacts
+ app.state.custom_embeddings = load_custom_embeddings()
+ app.state.config_params = {"threshold": 0.7, "top_k": 10}
+
+ # Make them available to feature views
+ import example_repo
+ example_repo._custom_embeddings = app.state.custom_embeddings
+```
+
## 📚 Detailed Usage
### 1. Feature Store Setup
@@ -409,20 +513,21 @@ def toxicity_detection(inputs: pd.DataFrame) -> pd.DataFrame:
### Performance Optimization
**Current Architecture:**
-- Models load on each request (see `sentiment_prediction` function)
+- ✅ **Static artifacts loading** at server startup (see `static_artifacts.py`)
+- ✅ **Pre-loaded models** cached in memory for fast inference
- CPU-only operation to avoid multiprocessing issues
- SQLite-based storage for fast local access
-**TODO: Optimization Opportunities:**
-- **Startup-time Model Loading**: Load models once at server startup instead of per-request
-- **Custom Provider**: Implement model caching via custom Feast provider
-- **Model Serving Layer**: Use dedicated model servers (TorchServe, MLflow) for heavy models
+**Implemented Optimizations:**
+- **Startup-time Model Loading**: ✅ Models load once at server startup via `static_artifacts.py`
+- **Memory-efficient Caching**: ✅ Models stored in `app.state` and accessed via global references
+- **Fallback Handling**: ✅ Graceful degradation when artifacts fail to load
-**Production Optimizations:**
-1. **Model Caching**: Cache loaded models in memory to avoid repeated loading
-2. **Batch Inference**: Process multiple texts together for efficiency
-3. **Feature Materialization**: Pre-compute expensive features offline
-4. **Async Processing**: Use async patterns for real-time serving
+**Additional Production Optimizations:**
+1. **Batch Inference**: Process multiple texts together for efficiency
+2. **Feature Materialization**: Pre-compute expensive features offline
+3. **Async Processing**: Use async patterns for real-time serving
+4. **Model Serving Layer**: Use dedicated model servers (TorchServe, vLLM) for large models
### Production Configuration Examples
diff --git a/sdk/python/feast/templates/pytorch_nlp/feature_repo/example_repo.py b/sdk/python/feast/templates/pytorch_nlp/feature_repo/example_repo.py
index e78614aacea..ee49bea2899 100644
--- a/sdk/python/feast/templates/pytorch_nlp/feature_repo/example_repo.py
+++ b/sdk/python/feast/templates/pytorch_nlp/feature_repo/example_repo.py
@@ -25,6 +25,18 @@
from feast.on_demand_feature_view import on_demand_feature_view
from feast.types import Array, Float32, Int64, String
+try:
+ # Import static artifacts helpers (available when feature server loads artifacts)
+ from static_artifacts import get_lookup_tables, get_sentiment_model
+except ImportError:
+ # Fallback for when static_artifacts.py is not available
+ get_sentiment_model = None
+ get_lookup_tables = None
+
+# Global references for static artifacts (set by feature server)
+_sentiment_model = None
+_lookup_tables: dict = {}
+
# Configuration
repo_path = Path(__file__).parent
data_path = repo_path / "data"
@@ -143,76 +155,67 @@
)
def sentiment_prediction(inputs: pd.DataFrame) -> pd.DataFrame:
"""
- Real-time sentiment prediction using pre-trained models.
+ Real-time sentiment prediction using pre-loaded static artifacts.
- This function demonstrates how to integrate PyTorch/HuggingFace models
- directly into Feast feature views for real-time inference.
+ This function demonstrates how to use static artifacts (pre-loaded models,
+ lookup tables) for efficient real-time inference. Models are loaded once
+ at feature server startup rather than on each request.
"""
try:
import numpy as np
- from transformers import pipeline
except ImportError:
- # Fallback to dummy predictions if dependencies aren't available
- df = pd.DataFrame()
- df["predicted_sentiment"] = ["neutral"] * len(inputs)
- df["sentiment_confidence"] = np.array([0.5] * len(inputs), dtype=np.float32)
- df["positive_prob"] = np.array([0.33] * len(inputs), dtype=np.float32)
- df["negative_prob"] = np.array([0.33] * len(inputs), dtype=np.float32)
- df["neutral_prob"] = np.array([0.34] * len(inputs), dtype=np.float32)
- df["text_embedding"] = [[np.float32(0.0)] * 384] * len(inputs)
- return df
+ # Fallback to dummy predictions if numpy isn't available
- # Initialize model (in production, you'd want to cache this)
- model_name = "cardiffnlp/twitter-roberta-base-sentiment-latest"
- try:
- # Use sentiment pipeline for convenience (force CPU to avoid MPS forking issues)
- sentiment_pipeline = pipeline(
- "sentiment-analysis",
- model=model_name,
- tokenizer=model_name,
- return_all_scores=True,
- device="cpu", # Force CPU to avoid MPS forking issues on macOS
- )
-
- except Exception:
- # Fallback if model loading fails
df = pd.DataFrame()
df["predicted_sentiment"] = ["neutral"] * len(inputs)
- df["sentiment_confidence"] = np.array([0.5] * len(inputs), dtype=np.float32)
- df["positive_prob"] = np.array([0.33] * len(inputs), dtype=np.float32)
- df["negative_prob"] = np.array([0.33] * len(inputs), dtype=np.float32)
- df["neutral_prob"] = np.array([0.34] * len(inputs), dtype=np.float32)
- df["text_embedding"] = [[np.float32(0.0)] * 384] * len(inputs)
+ df["sentiment_confidence"] = [0.5] * len(inputs)
+ df["positive_prob"] = [0.33] * len(inputs)
+ df["negative_prob"] = [0.33] * len(inputs)
+ df["neutral_prob"] = [0.34] * len(inputs)
+ df["text_embedding"] = [[0.0] * 384] * len(inputs)
return df
+ # Get pre-loaded static artifacts from global references
+ # These are loaded once at startup via static_artifacts.py
+ global _sentiment_model, _lookup_tables
+
+ sentiment_model = _sentiment_model
+ lookup_tables = _lookup_tables
+
+ # Use lookup table for label mapping (from static artifacts)
+ label_map = lookup_tables.get(
+ "sentiment_labels",
+ {"LABEL_0": "negative", "LABEL_1": "neutral", "LABEL_2": "positive"},
+ )
+
results = []
for text in inputs["input_text"]:
try:
- # Get sentiment predictions
- predictions = sentiment_pipeline(text)
-
- # Parse results (RoBERTa model returns LABEL_0, LABEL_1, LABEL_2)
- label_map = {
- "LABEL_0": "negative",
- "LABEL_1": "neutral",
- "LABEL_2": "positive",
- }
-
- scores = {
- label_map.get(pred["label"], pred["label"]): pred["score"]
- for pred in predictions
- }
-
- # Get best prediction
- best_pred = max(predictions, key=lambda x: x["score"])
- predicted_sentiment = label_map.get(best_pred["label"], best_pred["label"])
- confidence = best_pred["score"]
-
- # Get embeddings (simplified - dummy embeddings for demo)
- # In a real implementation, you'd run the model to get embeddings
- # For this demo, we'll create a dummy embedding
- embedding = np.random.rand(384).tolist() # DistilBERT size
+ if sentiment_model is not None:
+ # Use pre-loaded model for prediction
+ predictions = sentiment_model(text)
+
+ # Parse results using static lookup tables
+ scores = {
+ label_map.get(pred["label"], pred["label"]): pred["score"]
+ for pred in predictions
+ }
+
+ # Get best prediction
+ best_pred = max(predictions, key=lambda x: x["score"])
+ predicted_sentiment = label_map.get(
+ best_pred["label"], best_pred["label"]
+ )
+ confidence = best_pred["score"]
+ else:
+ # Fallback when model is not available
+ predicted_sentiment = "neutral"
+ confidence = 0.5
+ scores = {"positive": 0.33, "negative": 0.33, "neutral": 0.34}
+
+ # Generate dummy embeddings (in production, use pre-loaded embeddings)
+ embedding = np.random.rand(384).tolist()
results.append(
{
diff --git a/sdk/python/feast/templates/pytorch_nlp/feature_repo/static_artifacts.py b/sdk/python/feast/templates/pytorch_nlp/feature_repo/static_artifacts.py
new file mode 100644
index 00000000000..6f7a5ae3091
--- /dev/null
+++ b/sdk/python/feast/templates/pytorch_nlp/feature_repo/static_artifacts.py
@@ -0,0 +1,139 @@
+"""
+Static Artifacts Loading for PyTorch NLP Template
+
+This module demonstrates how to load static artifacts (models, lookup tables, etc.)
+into the Feast feature server at startup for efficient real-time inference.
+
+Supported artifact types:
+- Small ML models (transformers, scikit-learn, etc.)
+- Lookup tables and reference data
+- Configuration parameters
+- Pre-computed embeddings
+
+Note: Feast is not optimized for large language models. For LLM inference,
+use dedicated model serving solutions like vLLM, TensorRT-LLM, or TGI.
+"""
+
+from pathlib import Path
+from typing import Any, Dict, Optional
+
+from fastapi import FastAPI
+from fastapi.logger import logger
+
+
+def load_sentiment_model():
+ """Load sentiment analysis model for real-time inference."""
+ try:
+ from transformers import pipeline
+
+ logger.info("Loading sentiment analysis model...")
+ model = pipeline(
+ "sentiment-analysis",
+ model="cardiffnlp/twitter-roberta-base-sentiment-latest",
+ tokenizer="cardiffnlp/twitter-roberta-base-sentiment-latest",
+ return_all_scores=True,
+ device="cpu", # Force CPU to avoid MPS forking issues on macOS
+ )
+ logger.info("✅ Sentiment analysis model loaded successfully")
+ return model
+ except ImportError:
+ logger.warning(
+ "⚠️ Transformers not available, sentiment model will use fallback"
+ )
+ return None
+ except Exception as e:
+ logger.warning(f"⚠️ Failed to load sentiment model: {e}")
+ return None
+
+
+def load_lookup_tables() -> Dict[str, Any]:
+ """Load static lookup tables for feature engineering."""
+ # Example: Load static mappings that are expensive to compute at request time
+ return {
+ "sentiment_labels": {
+ "LABEL_0": "negative",
+ "LABEL_1": "neutral",
+ "LABEL_2": "positive",
+ },
+ "emoji_sentiment": {"😊": "positive", "😞": "negative", "😐": "neutral"},
+ "domain_categories": {"twitter.com": "social", "news.com": "news"},
+ }
+
+
+def load_user_embeddings() -> Optional[Dict[str, Any]]:
+ """Load pre-computed user embeddings if available."""
+ # Example: Load static user embeddings for recommendation features
+ embeddings_file = Path(__file__).parent / "data" / "user_embeddings.npy"
+
+ if embeddings_file.exists():
+ try:
+ import numpy as np
+
+ embeddings = np.load(embeddings_file)
+ logger.info(f"✅ Loaded user embeddings: {embeddings.shape}")
+ return {"embeddings": embeddings}
+ except Exception as e:
+ logger.warning(f"⚠️ Failed to load user embeddings: {e}")
+
+ return None
+
+
+def load_artifacts(app: FastAPI):
+ """
+ Main function called by Feast feature server to load static artifacts.
+
+ This function is called during server startup and should store artifacts
+ in app.state for access by on-demand feature views.
+ """
+ logger.info("🔄 Loading static artifacts for PyTorch NLP template...")
+
+ # Load sentiment analysis model
+ app.state.sentiment_model = load_sentiment_model()
+
+ # Load lookup tables
+ app.state.lookup_tables = load_lookup_tables()
+
+ # Load user embeddings (optional)
+ app.state.user_embeddings = load_user_embeddings()
+
+ # Also set global references for easier access from on-demand feature views
+ try:
+ import example_repo
+
+ example_repo._sentiment_model = app.state.sentiment_model
+ example_repo._lookup_tables = app.state.lookup_tables
+ logger.info("✅ Global artifact references updated")
+ except ImportError:
+ logger.warning("⚠️ Could not update global artifact references")
+
+ logger.info("✅ Static artifacts loading completed")
+
+
+def get_static_artifact(app_state: Any, name: str) -> Any:
+ """
+ Helper function to safely access static artifacts from app.state.
+
+ Args:
+ app_state: FastAPI app.state object
+ name: Name of the artifact to retrieve
+
+ Returns:
+ The requested artifact or None if not found
+ """
+ return getattr(app_state, name, None)
+
+
+# Convenience functions for accessing specific artifacts
+def get_sentiment_model(app_state: Any):
+ """Get the pre-loaded sentiment analysis model."""
+ return get_static_artifact(app_state, "sentiment_model")
+
+
+def get_lookup_tables(app_state: Any) -> Dict[str, Any]:
+ """Get the pre-loaded lookup tables."""
+ return get_static_artifact(app_state, "lookup_tables") or {}
+
+
+def get_user_embeddings(app_state: Any):
+ """Get the pre-loaded user embeddings."""
+ return get_static_artifact(app_state, "user_embeddings")
diff --git a/sdk/python/tests/unit/test_feature_server.py b/sdk/python/tests/unit/test_feature_server.py
index 21c01d61765..e3fd0387fb9 100644
--- a/sdk/python/tests/unit/test_feature_server.py
+++ b/sdk/python/tests/unit/test_feature_server.py
@@ -207,3 +207,204 @@ def test_materialize_request_model():
assert req2.disable_event_timestamp is False
assert req2.start_ts == "2021-01-01T00:00:00"
assert req2.end_ts == "2021-01-02T00:00:00"
+
+
+# Static Artifacts Tests
+@pytest.fixture
+def mock_store_with_static_artifacts(tmp_path):
+ """Create a mock store with static_artifacts.py file for testing."""
+ # Create static_artifacts.py file
+ static_artifacts_content = '''
+from fastapi import FastAPI
+from fastapi.logger import logger
+
+def load_test_model():
+ """Mock model loading for testing."""
+ logger.info("Loading test model...")
+ return "test_model_loaded"
+
+def load_test_lookup_tables():
+ """Mock lookup tables for testing."""
+ return {"test_label": "test_value"}
+
+def load_artifacts(app: FastAPI):
+ """Load test static artifacts."""
+ app.state.test_model = load_test_model()
+ app.state.test_lookup_tables = load_test_lookup_tables()
+ logger.info("✅ Test static artifacts loaded")
+'''
+
+ # Write static_artifacts.py to temp directory
+ artifacts_file = tmp_path / "static_artifacts.py"
+ artifacts_file.write_text(static_artifacts_content)
+
+ # Create mock store
+ mock_store = MagicMock()
+ mock_store.repo_path = str(tmp_path)
+ return mock_store
+
+
+def test_load_static_artifacts_success(mock_store_with_static_artifacts):
+ """Test successful loading of static artifacts during server startup."""
+ import asyncio
+
+ from fastapi import FastAPI
+
+ from feast.feature_server import load_static_artifacts
+
+ app = FastAPI()
+
+ # Load static artifacts
+ asyncio.run(load_static_artifacts(app, mock_store_with_static_artifacts))
+
+ # Verify artifacts were loaded into app.state
+ assert hasattr(app.state, "test_model")
+ assert hasattr(app.state, "test_lookup_tables")
+ assert app.state.test_model == "test_model_loaded"
+ assert app.state.test_lookup_tables == {"test_label": "test_value"}
+
+
+def test_load_static_artifacts_no_file(tmp_path):
+ """Test graceful handling when static_artifacts.py doesn't exist."""
+ import asyncio
+
+ from fastapi import FastAPI
+
+ from feast.feature_server import load_static_artifacts
+
+ app = FastAPI()
+ mock_store = MagicMock()
+ mock_store.repo_path = str(tmp_path) # Empty directory
+
+ # Should not raise an exception
+ asyncio.run(load_static_artifacts(app, mock_store))
+
+ # Should not have added test artifacts
+ assert not hasattr(app.state, "test_model")
+ assert not hasattr(app.state, "test_lookup_tables")
+
+
+def test_load_static_artifacts_invalid_file(tmp_path):
+ """Test graceful handling when static_artifacts.py has errors."""
+ import asyncio
+
+ from fastapi import FastAPI
+
+ from feast.feature_server import load_static_artifacts
+
+ # Create invalid static_artifacts.py
+ artifacts_file = tmp_path / "static_artifacts.py"
+ artifacts_file.write_text("raise ValueError('Test error')")
+
+ app = FastAPI()
+ mock_store = MagicMock()
+ mock_store.repo_path = str(tmp_path)
+
+ # Should handle the error gracefully
+ asyncio.run(load_static_artifacts(app, mock_store))
+
+ # Should not have artifacts due to error
+ assert not hasattr(app.state, "test_model")
+
+
+def test_load_static_artifacts_no_load_function(tmp_path):
+ """Test handling when static_artifacts.py has no load_artifacts function."""
+ import asyncio
+
+ from fastapi import FastAPI
+
+ from feast.feature_server import load_static_artifacts
+
+ # Create static_artifacts.py without load_artifacts function
+ artifacts_file = tmp_path / "static_artifacts.py"
+ artifacts_file.write_text("TEST_CONSTANT = 'test'")
+
+ app = FastAPI()
+ mock_store = MagicMock()
+ mock_store.repo_path = str(tmp_path)
+
+ # Should handle gracefully
+ asyncio.run(load_static_artifacts(app, mock_store))
+
+ # Should not have artifacts since no load_artifacts function
+ assert not hasattr(app.state, "test_model")
+
+
+def test_static_artifacts_persist_across_requests(mock_store_with_static_artifacts):
+ """Test that static artifacts persist across multiple requests."""
+ from feast.feature_server import get_app
+
+ # Create app with static artifacts
+ app = get_app(mock_store_with_static_artifacts)
+
+ # Simulate artifacts being loaded (normally done in lifespan)
+ app.state.test_model = "persistent_model"
+ app.state.test_lookup_tables = {"persistent": "data"}
+
+ # Artifacts should be available and persistent
+ assert app.state.test_model == "persistent_model"
+ assert app.state.test_lookup_tables["persistent"] == "data"
+
+ # After simulated requests, artifacts should still be there
+ assert app.state.test_model == "persistent_model"
+ assert app.state.test_lookup_tables["persistent"] == "data"
+
+
+def test_pytorch_nlp_template_artifacts_pattern(tmp_path):
+ """Test the specific PyTorch NLP template static artifacts pattern."""
+ import asyncio
+
+ from fastapi import FastAPI
+
+ from feast.feature_server import load_static_artifacts
+
+ # Create PyTorch NLP template-style static_artifacts.py
+ pytorch_artifacts_content = '''
+from fastapi import FastAPI
+from fastapi.logger import logger
+
+def load_sentiment_model():
+ """Mock sentiment analysis model loading."""
+ logger.info("Loading sentiment analysis model...")
+ return "mock_roberta_sentiment_model"
+
+def load_lookup_tables():
+ """Load lookup tables for sentiment mapping."""
+ return {
+ "sentiment_labels": {"LABEL_0": "negative", "LABEL_1": "neutral", "LABEL_2": "positive"},
+ "emoji_sentiment": {"😊": "positive", "😞": "negative", "😐": "neutral"},
+ }
+
+def load_artifacts(app: FastAPI):
+ """Load all static artifacts for PyTorch NLP template."""
+ app.state.sentiment_model = load_sentiment_model()
+ app.state.lookup_tables = load_lookup_tables()
+
+ # Update global references (simulating example_repo.py pattern)
+ # In real template, this would be: import example_repo; example_repo._sentiment_model = ...
+ logger.info("✅ PyTorch NLP static artifacts loaded successfully")
+'''
+
+ artifacts_file = tmp_path / "static_artifacts.py"
+ artifacts_file.write_text(pytorch_artifacts_content)
+
+ # Test loading
+ app = FastAPI()
+ mock_store = MagicMock()
+ mock_store.repo_path = str(tmp_path)
+
+ asyncio.run(load_static_artifacts(app, mock_store))
+
+ # Verify PyTorch NLP template artifacts
+ assert hasattr(app.state, "sentiment_model")
+ assert hasattr(app.state, "lookup_tables")
+ assert app.state.sentiment_model == "mock_roberta_sentiment_model"
+
+ # Verify lookup tables structure matches template
+ lookup_tables = app.state.lookup_tables
+ assert "sentiment_labels" in lookup_tables
+ assert "emoji_sentiment" in lookup_tables
+ assert lookup_tables["sentiment_labels"]["LABEL_0"] == "negative"
+ assert lookup_tables["sentiment_labels"]["LABEL_1"] == "neutral"
+ assert lookup_tables["sentiment_labels"]["LABEL_2"] == "positive"
+ assert lookup_tables["emoji_sentiment"]["😊"] == "positive"
From 59dbb33ec809cd3020cb3c5ac2dcbf2fc920fd4d Mon Sep 17 00:00:00 2001
From: Lukas Valatka
Date: Tue, 23 Dec 2025 09:55:02 +0200
Subject: [PATCH 05/26] fix: Add possibility to overwrite send_receive_timeout
for clickhouse offline store (#5792)
* add changes + fix linting issues
Signed-off-by: lukas.valatka
* generalize based on pr suggestion
Signed-off-by: lukas.valatka
* add test verifying config parsing
Signed-off-by: lukas.valatka
* rework test into integration, since CH instance is needed
Signed-off-by: lukas.valatka
---------
Signed-off-by: lukas.valatka
---
.../tests/data_source.py | 28 +++++++++
.../utils/clickhouse/clickhouse_config.py | 6 ++
.../utils/clickhouse/connection_utils.py | 26 ++++++---
.../infra/offline_stores/test_clickhouse.py | 57 +++++++++++++++++++
4 files changed, 110 insertions(+), 7 deletions(-)
diff --git a/sdk/python/feast/infra/offline_stores/contrib/clickhouse_offline_store/tests/data_source.py b/sdk/python/feast/infra/offline_stores/contrib/clickhouse_offline_store/tests/data_source.py
index 80fd1751dc5..4234c46eb3f 100644
--- a/sdk/python/feast/infra/offline_stores/contrib/clickhouse_offline_store/tests/data_source.py
+++ b/sdk/python/feast/infra/offline_stores/contrib/clickhouse_offline_store/tests/data_source.py
@@ -15,6 +15,8 @@
from feast.infra.offline_stores.contrib.clickhouse_offline_store.clickhouse_source import (
ClickhouseSource,
)
+from feast.infra.utils.clickhouse.clickhouse_config import ClickhouseConfig
+from feast.infra.utils.clickhouse.connection_utils import get_client
from tests.integration.feature_repos.universal.data_source_creator import (
DataSourceCreator,
)
@@ -114,3 +116,29 @@ def create_saved_dataset_destination(self):
def teardown(self):
pass
+
+
+def test_get_client_with_additional_params(clickhouse_container):
+ """
+ Test that get_client works with a real ClickHouse container and properly passes
+ additional settings like send_receive_timeout.
+ """
+ # Create config with custom send_receive_timeout
+ config = ClickhouseConfig(
+ host=clickhouse_container.get_container_host_ip(),
+ port=clickhouse_container.get_exposed_port(8123),
+ user=CLICKHOUSE_USER,
+ password=CLICKHOUSE_PASSWORD,
+ database=CLICKHOUSE_OFFLINE_DB,
+ additional_client_args={"send_receive_timeout": 60},
+ )
+
+ # Get client and verify it works
+ client = get_client(config)
+
+ # Verify client is connected and functional by running a simple query
+ result = client.query("SELECT 1 AS test_value")
+ assert result.result_rows == [(1,)]
+
+ # Verify the send_receive_timeout was applied
+ assert client.timeout._read == 60
diff --git a/sdk/python/feast/infra/utils/clickhouse/clickhouse_config.py b/sdk/python/feast/infra/utils/clickhouse/clickhouse_config.py
index 1f163e0a81b..75167f8a60e 100644
--- a/sdk/python/feast/infra/utils/clickhouse/clickhouse_config.py
+++ b/sdk/python/feast/infra/utils/clickhouse/clickhouse_config.py
@@ -1,3 +1,5 @@
+from typing import Any
+
from pydantic import ConfigDict, StrictStr
from feast.repo_config import FeastConfigBaseModel
@@ -11,4 +13,8 @@ class ClickhouseConfig(FeastConfigBaseModel):
password: StrictStr
use_temporary_tables_for_entity_df: bool = True
+ # See https://github.com/ClickHouse/clickhouse-connect/blob/main/clickhouse_connect/driver/__init__.py#L51
+ # Some typical ones e.g. send_receive_timeout (read_timeout), etc
+ additional_client_args: dict[str, Any] | None = None
+
model_config = ConfigDict(frozen=True)
diff --git a/sdk/python/feast/infra/utils/clickhouse/connection_utils.py b/sdk/python/feast/infra/utils/clickhouse/connection_utils.py
index 88f5334db14..6d5f1b87052 100644
--- a/sdk/python/feast/infra/utils/clickhouse/connection_utils.py
+++ b/sdk/python/feast/infra/utils/clickhouse/connection_utils.py
@@ -11,12 +11,24 @@
def get_client(config: ClickhouseConfig) -> Client:
# Clickhouse client is not thread-safe, so we need to create a separate instance for each thread.
if not hasattr(thread_local, "clickhouse_client"):
- thread_local.clickhouse_client = clickhouse_connect.get_client(
- host=config.host,
- port=config.port,
- user=config.user,
- password=config.password,
- database=config.database,
- )
+ additional_client_args = config.additional_client_args
+
+ if additional_client_args:
+ thread_local.clickhouse_client = clickhouse_connect.get_client(
+ host=config.host,
+ port=config.port,
+ user=config.user,
+ password=config.password,
+ database=config.database,
+ **additional_client_args,
+ )
+ else:
+ thread_local.clickhouse_client = clickhouse_connect.get_client(
+ host=config.host,
+ port=config.port,
+ user=config.user,
+ password=config.password,
+ database=config.database,
+ )
return thread_local.clickhouse_client
diff --git a/sdk/python/tests/unit/infra/offline_stores/test_clickhouse.py b/sdk/python/tests/unit/infra/offline_stores/test_clickhouse.py
index 38c632a59a7..f5440ed367d 100644
--- a/sdk/python/tests/unit/infra/offline_stores/test_clickhouse.py
+++ b/sdk/python/tests/unit/infra/offline_stores/test_clickhouse.py
@@ -1,3 +1,4 @@
+import logging
import threading
from unittest.mock import MagicMock, patch
@@ -6,6 +7,8 @@
from feast.infra.utils.clickhouse.clickhouse_config import ClickhouseConfig
from feast.infra.utils.clickhouse.connection_utils import get_client, thread_local
+logger = logging.getLogger(__name__)
+
@pytest.fixture
def clickhouse_config():
@@ -76,3 +79,57 @@ def thread_2_work():
assert client_1a is not client_2, (
"Different threads should get different client instances (not cached)"
)
+
+
+def test_clickhouse_config_parses_additional_client_args():
+ """
+ Test that ClickhouseConfig correctly parses additional_client_args from a dict,
+ simulating how it would be parsed from YAML by Pydantic.
+ """
+ # This simulates the dict that would come from yaml.safe_load()
+ raw_config = {
+ "host": "localhost",
+ "port": 8123,
+ "database": "default",
+ "user": "default",
+ "password": "password",
+ "additional_client_args": {
+ "send_receive_timeout": 60,
+ "compress": True,
+ "client_name": "feast_test",
+ },
+ }
+
+ # Pydantic should parse this dict into a ClickhouseConfig object
+ config = ClickhouseConfig(**raw_config)
+
+ # Verify all fields are correctly parsed
+ assert config.host == "localhost"
+ assert config.port == 8123
+ assert config.database == "default"
+ assert config.user == "default"
+ assert config.password == "password"
+
+ # Verify additional_client_args is correctly parsed as a dict
+ assert config.additional_client_args is not None
+ assert isinstance(config.additional_client_args, dict)
+ assert config.additional_client_args["send_receive_timeout"] == 60
+ assert config.additional_client_args["compress"] is True
+ assert config.additional_client_args["client_name"] == "feast_test"
+
+
+def test_clickhouse_config_handles_none_additional_client_args():
+ """
+ Test that ClickhouseConfig correctly handles when additional_client_args is not provided.
+ """
+ raw_config = {
+ "host": "localhost",
+ "port": 8123,
+ "database": "default",
+ "user": "default",
+ "password": "password",
+ }
+
+ config = ClickhouseConfig(**raw_config)
+
+ assert config.additional_client_args is None
From 75b562805ccfc6af20bd14d555a64fe974b405a6 Mon Sep 17 00:00:00 2001
From: Aniket Paluskar <64416568+aniketpalu@users.noreply.github.com>
Date: Tue, 30 Dec 2025 20:30:52 +0530
Subject: [PATCH 06/26] chore: Bump urllib3 version to >=2.6.0 (#5801)
* chore: Bump urllib3 version to >=2.6.0
Signed-off-by: Aniket Paluskar
* Updated library version in setup.py
Signed-off-by: Aniket Paluskar
---------
Signed-off-by: Aniket Paluskar
---
pyproject.toml | 2 +-
.../requirements/py3.10-ci-requirements.txt | 635 ++++++-------
.../py3.10-minimal-requirements.txt | 475 +++++-----
...y3.10-minimal-sdist-requirements-build.txt | 280 +++---
.../py3.10-minimal-sdist-requirements.txt | 475 +++++-----
.../requirements/py3.10-requirements.txt | 314 +++----
.../requirements/py3.11-ci-requirements.txt | 848 +++++++++---------
.../py3.11-minimal-requirements.txt | 623 ++++++-------
...y3.11-minimal-sdist-requirements-build.txt | 437 ++++-----
.../py3.11-minimal-sdist-requirements.txt | 635 ++++++-------
.../requirements/py3.11-requirements.txt | 462 +++++-----
.../requirements/py3.12-ci-requirements.txt | 848 +++++++++---------
.../py3.12-minimal-requirements.txt | 617 ++++++-------
...y3.12-minimal-sdist-requirements-build.txt | 433 ++++-----
.../py3.12-minimal-sdist-requirements.txt | 629 ++++++-------
.../requirements/py3.12-requirements.txt | 456 +++++-----
setup.py | 2 +-
17 files changed, 4145 insertions(+), 4026 deletions(-)
diff --git a/pyproject.toml b/pyproject.toml
index b87c70364bb..f2620b0915d 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -147,7 +147,7 @@ ci = [
"mock==2.0.0",
"moto<5",
"mypy>=1.4.1,<1.11.3",
- "urllib3>=1.25.4,<3",
+ "urllib3>=2.6.0,<3",
"psutil==5.9.0",
"py>=1.11.0", # https://github.com/pytest-dev/pytest/issues/10420
"pytest>=6.0.0,<8",
diff --git a/sdk/python/requirements/py3.10-ci-requirements.txt b/sdk/python/requirements/py3.10-ci-requirements.txt
index a9fe1faf9bf..2c448173938 100644
--- a/sdk/python/requirements/py3.10-ci-requirements.txt
+++ b/sdk/python/requirements/py3.10-ci-requirements.txt
@@ -250,9 +250,9 @@ attrs==25.4.0 \
# jsonlines
# jsonschema
# referencing
-azure-core==1.36.0 \
- --hash=sha256:22e5605e6d0bf1d229726af56d9e92bc37b6e726b141a18be0b4d424131741b7 \
- --hash=sha256:fee9923a3a753e94a259563429f3644aaf05c486d45b1215d098115102d91d3b
+azure-core==1.37.0 \
+ --hash=sha256:7064f2c11e4b97f340e8e8c6d923b822978be3016e46b7bc4aa4b337cfb48aee \
+ --hash=sha256:b3abe2c59e7d6bb18b38c275a5029ff80f98990e7c90a5e646249a56630fcc19
# via
# azure-identity
# azure-storage-blob
@@ -276,9 +276,9 @@ beautifulsoup4==4.14.3 \
# via
# docling
# nbconvert
-bigtree==1.0.3 \
- --hash=sha256:18402a143130868b17ca84a74ca263e6f32f046d6978c30d244f8b94c4a01227 \
- --hash=sha256:99a18b6937a9b4ab8e560fec5c0720e10ebf37f84e44f9b5f47702c2e84c9aaa
+bigtree==1.0.4 \
+ --hash=sha256:e4af0c5bc0d2cd72e18442965e4509f642b16a0de65db6d0ec116e30f959010c \
+ --hash=sha256:f58a3238bb9b1142d893c9de4921bfd18d435427c75e0c168dd580eabf6dc7fd
# via feast (setup.py)
bleach[css]==6.3.0 \
--hash=sha256:6f3b91b1c0a02bb9a78b5a454c92506aa0fdf197e1d5e114d2e00c6f64306d22 \
@@ -308,9 +308,9 @@ build==1.3.0 \
# feast (setup.py)
# pip-tools
# singlestoredb
-cachetools==6.2.2 \
- --hash=sha256:6c09c98183bf58560c97b2abfcedcbaf6a896a490f534b031b661d3723b45ace \
- --hash=sha256:8e6d266b25e539df852251cfd6f990b4bc3a141db73b939058d809ebd2590fc6
+cachetools==6.2.4 \
+ --hash=sha256:69a7a52634fed8b8bf6e24a050fb60bff1c9bd8f6d24572b99c32d4e71e62a51 \
+ --hash=sha256:82c5c05585e70b6ba2d3ae09ea60b79548872185d2f24ae1f2709d37299fd607
# via google-auth
cassandra-driver==3.29.3 \
--hash=sha256:064bf45d3ca87239e11168c0110676fc64f7fdbddb4bcba9be787b8ad5f6d734 \
@@ -553,9 +553,9 @@ charset-normalizer==3.4.4 \
# via
# requests
# snowflake-connector-python
-click==8.2.1 \
- --hash=sha256:27c491cc05d968d271d5a1db13e3b5a184636d9d930f148c50b038f0d0646202 \
- --hash=sha256:61a3265b914e850b85317d0b3109c7f8cd35a670f963866005d6ef1d5175a12b
+click==8.3.1 \
+ --hash=sha256:12ff4785d337a1bb490bb7e9c2b1ee5da3112e94a8622f26a6c77f5d2fc6842a \
+ --hash=sha256:981153a64e25f12d547d3426c367a4857371575ee7ad18df2a6183ab0545b2a6
# via
# feast (setup.py)
# dask
@@ -708,99 +708,99 @@ couchbase-columnar==1.0.0 \
--hash=sha256:fc0fad2d386c5b5df7aaaccd8751e01caa886cc640cc8c92523dd07c4e7be519 \
--hash=sha256:fc4efa3e15190c3731478006de494b046bc57785e9c8ae99ac8b375a91683e38
# via feast (setup.py)
-coverage[toml]==7.13.0 \
- --hash=sha256:0018f73dfb4301a89292c73be6ba5f58722ff79f51593352759c1790ded1cabe \
- --hash=sha256:00c3d22cf6fb1cf3bf662aaaa4e563be8243a5ed2630339069799835a9cc7f9b \
- --hash=sha256:02d9fb9eccd48f6843c98a37bd6817462f130b86da8660461e8f5e54d4c06070 \
- --hash=sha256:0602f701057c6823e5db1b74530ce85f17c3c5be5c85fc042ac939cbd909426e \
- --hash=sha256:06cac81bf10f74034e055e903f5f946e3e26fc51c09fc9f584e4a1605d977053 \
- --hash=sha256:086cede306d96202e15a4b77ace8472e39d9f4e5f9fd92dd4fecdfb2313b2080 \
- --hash=sha256:0900872f2fdb3ee5646b557918d02279dc3af3dfb39029ac4e945458b13f73bc \
- --hash=sha256:0a3a30f0e257df382f5f9534d4ce3d4cf06eafaf5192beb1a7bd066cb10e78fb \
- --hash=sha256:0b3d67d31383c4c68e19a88e28fc4c2e29517580f1b0ebec4a069d502ce1e0bf \
- --hash=sha256:0dfa3855031070058add1a59fdfda0192fd3e8f97e7c81de0596c145dea51820 \
- --hash=sha256:0f4872f5d6c54419c94c25dd6ae1d015deeb337d06e448cd890a1e89a8ee7f3b \
- --hash=sha256:11c21557d0e0a5a38632cbbaca5f008723b26a89d70db6315523df6df77d6232 \
- --hash=sha256:166ad2a22ee770f5656e1257703139d3533b4a0b6909af67c6b4a3adc1c98657 \
- --hash=sha256:193c3887285eec1dbdb3f2bd7fbc351d570ca9c02ca756c3afbc71b3c98af6ef \
- --hash=sha256:1d84e91521c5e4cb6602fe11ece3e1de03b2760e14ae4fcf1a4b56fa3c801fcd \
- --hash=sha256:1ed5630d946859de835a85e9a43b721123a8a44ec26e2830b296d478c7fd4259 \
- --hash=sha256:22486cdafba4f9e471c816a2a5745337742a617fef68e890d8baf9f3036d7833 \
- --hash=sha256:22ccfe8d9bb0d6134892cbe1262493a8c70d736b9df930f3f3afae0fe3ac924d \
- --hash=sha256:24e4e56304fdb56f96f80eabf840eab043b3afea9348b88be680ec5986780a0f \
- --hash=sha256:25dc33618d45456ccb1d37bce44bc78cf269909aa14c4db2e03d63146a8a1493 \
- --hash=sha256:263c3dbccc78e2e331e59e90115941b5f53e85cfcc6b3b2fbff1fd4e3d2c6ea8 \
- --hash=sha256:28ee1c96109974af104028a8ef57cec21447d42d0e937c0275329272e370ebcf \
- --hash=sha256:30a3a201a127ea57f7e14ba43c93c9c4be8b7d17a26e03bb49e6966d019eede9 \
- --hash=sha256:3188936845cd0cb114fa6a51842a304cdbac2958145d03be2377ec41eb285d19 \
- --hash=sha256:367449cf07d33dc216c083f2036bb7d976c6e4903ab31be400ad74ad9f85ce98 \
- --hash=sha256:37eee4e552a65866f15dedd917d5e5f3d59805994260720821e2c1b51ac3248f \
- --hash=sha256:3a10260e6a152e5f03f26db4a407c4c62d3830b9af9b7c0450b183615f05d43b \
- --hash=sha256:3a7b1cd820e1b6116f92c6128f1188e7afe421c7e1b35fa9836b11444e53ebd9 \
- --hash=sha256:3ab483ea0e251b5790c2aac03acde31bff0c736bf8a86829b89382b407cd1c3b \
- --hash=sha256:3ad968d1e3aa6ce5be295ab5fe3ae1bf5bb4769d0f98a80a0252d543a2ef2e9e \
- --hash=sha256:445badb539005283825959ac9fa4a28f712c214b65af3a2c464f1adc90f5fcbc \
- --hash=sha256:453b7ec753cf5e4356e14fe858064e5520c460d3bbbcb9c35e55c0d21155c256 \
- --hash=sha256:494f5459ffa1bd45e18558cd98710c36c0b8fbfa82a5eabcbe671d80ecffbfe8 \
- --hash=sha256:4b5de7d4583e60d5fd246dd57fcd3a8aa23c6e118a8c72b38adf666ba8e7e927 \
- --hash=sha256:4f3e223b2b2db5e0db0c2b97286aba0036ca000f06aca9b12112eaa9af3d92ae \
- --hash=sha256:4fdb6f54f38e334db97f72fa0c701e66d8479af0bc3f9bfb5b90f1c30f54500f \
- --hash=sha256:51a202e0f80f241ccb68e3e26e19ab5b3bf0f813314f2c967642f13ebcf1ddfe \
- --hash=sha256:581f086833d24a22c89ae0fe2142cfaa1c92c930adf637ddf122d55083fb5a0f \
- --hash=sha256:583221913fbc8f53b88c42e8dbb8fca1d0f2e597cb190ce45916662b8b9d9621 \
- --hash=sha256:58632b187be6f0be500f553be41e277712baa278147ecb7559983c6d9faf7ae1 \
- --hash=sha256:5c67dace46f361125e6b9cace8fe0b729ed8479f47e70c89b838d319375c8137 \
- --hash=sha256:5e70f92ef89bac1ac8a99b3324923b4749f008fdbd7aa9cb35e01d7a284a04f9 \
- --hash=sha256:5f5d9bd30756fff3e7216491a0d6d520c448d5124d3d8e8f56446d6412499e74 \
- --hash=sha256:5f8a0297355e652001015e93be345ee54393e45dc3050af4a0475c5a2b767d46 \
- --hash=sha256:62d7c4f13102148c78d7353c6052af6d899a7f6df66a32bddcc0c0eb7c5326f8 \
- --hash=sha256:69ac2c492918c2461bc6ace42d0479638e60719f2a4ef3f0815fa2df88e9f940 \
- --hash=sha256:6abb3a4c52f05e08460bd9acf04fec027f8718ecaa0d09c40ffbc3fbd70ecc39 \
- --hash=sha256:6e63ccc6e0ad8986386461c3c4b737540f20426e7ec932f42e030320896c311a \
- --hash=sha256:6e9e451dee940a86789134b6b0ffbe31c454ade3b849bb8a9d2cca2541a8e91d \
- --hash=sha256:6fb2d5d272341565f08e962cce14cdf843a08ac43bd621783527adb06b089c4b \
- --hash=sha256:71936a8b3b977ddd0b694c28c6a34f4fff2e9dd201969a4ff5d5fc7742d614b0 \
- --hash=sha256:73419b89f812f498aca53f757dd834919b48ce4799f9d5cad33ca0ae442bdb1a \
- --hash=sha256:739c6c051a7540608d097b8e13c76cfa85263ced467168dc6b477bae3df7d0e2 \
- --hash=sha256:7464663eaca6adba4175f6c19354feea61ebbdd735563a03d1e472c7072d27bb \
- --hash=sha256:74c136e4093627cf04b26a35dab8cbfc9b37c647f0502fc313376e11726ba303 \
- --hash=sha256:76541dc8d53715fb4f7a3a06b34b0dc6846e3c69bc6204c55653a85dd6220971 \
- --hash=sha256:7a485ff48fbd231efa32d58f479befce52dcb6bfb2a88bb7bf9a0b89b1bc8030 \
- --hash=sha256:7e442c013447d1d8d195be62852270b78b6e255b79b8675bad8479641e21fd96 \
- --hash=sha256:7f15a931a668e58087bc39d05d2b4bf4b14ff2875b49c994bbdb1c2217a8daeb \
- --hash=sha256:7f88ae3e69df2ab62fb0bc5219a597cb890ba5c438190ffa87490b315190bb33 \
- --hash=sha256:8069e831f205d2ff1f3d355e82f511eb7c5522d7d413f5db5756b772ec8697f8 \
- --hash=sha256:850d2998f380b1e266459ca5b47bc9e7daf9af1d070f66317972f382d46f1904 \
- --hash=sha256:898cce66d0836973f48dda4e3514d863d70142bdf6dfab932b9b6a90ea5b222d \
- --hash=sha256:9097818b6cc1cfb5f174e3263eba4a62a17683bcfe5c4b5d07f4c97fa51fbf28 \
- --hash=sha256:936bc20503ce24770c71938d1369461f0c5320830800933bc3956e2a4ded930e \
- --hash=sha256:9372dff5ea15930fea0445eaf37bbbafbc771a49e70c0aeed8b4e2c2614cc00e \
- --hash=sha256:9987a9e4f8197a1000280f7cc089e3ea2c8b3c0a64d750537809879a7b4ceaf9 \
- --hash=sha256:99acd4dfdfeb58e1937629eb1ab6ab0899b131f183ee5f23e0b5da5cba2fec74 \
- --hash=sha256:9b01c22bc74a7fb44066aaf765224c0d933ddf1f5047d6cdfe4795504a4493f8 \
- --hash=sha256:a00d3a393207ae12f7c49bb1c113190883b500f48979abb118d8b72b8c95c032 \
- --hash=sha256:a23e5a1f8b982d56fa64f8e442e037f6ce29322f1f9e6c2344cd9e9f4407ee57 \
- --hash=sha256:a2bdb3babb74079f021696cb46b8bb5f5661165c385d3a238712b031a12355be \
- --hash=sha256:a394aa27f2d7ff9bc04cf703817773a59ad6dfbd577032e690f961d2460ee936 \
- --hash=sha256:a6c6e16b663be828a8f0b6c5027d36471d4a9f90d28444aa4ced4d48d7d6ae8f \
- --hash=sha256:af0a583efaacc52ae2521f8d7910aff65cdb093091d76291ac5820d5e947fc1c \
- --hash=sha256:af827b7cbb303e1befa6c4f94fd2bf72f108089cfa0f8abab8f4ca553cf5ca5a \
- --hash=sha256:c4be718e51e86f553bcf515305a158a1cd180d23b72f07ae76d6017c3cc5d791 \
- --hash=sha256:cdb3c9f8fef0a954c632f64328a3935988d33a6604ce4bf67ec3e39670f12ae5 \
- --hash=sha256:d10fd186aac2316f9bbb46ef91977f9d394ded67050ad6d84d94ed6ea2e8e54e \
- --hash=sha256:d1e97353dcc5587b85986cda4ff3ec98081d7e84dd95e8b2a6d59820f0545f8a \
- --hash=sha256:d2a9d7f1c11487b1c69367ab3ac2d81b9b3721f097aa409a3191c3e90f8f3dd7 \
- --hash=sha256:de7f6748b890708578fc4b7bb967d810aeb6fcc9bff4bb77dbca77dab2f9df6a \
- --hash=sha256:e5330fa0cc1f5c3c4c3bb8e101b742025933e7848989370a1d4c8c5e401ea753 \
- --hash=sha256:e999e2dcc094002d6e2c7bbc1fb85b58ba4f465a760a8014d97619330cdbbbf3 \
- --hash=sha256:eb76670874fdd6091eedcc856128ee48c41a9bbbb9c3f1c7c3cf169290e3ffd6 \
- --hash=sha256:f1c23e24a7000da892a312fb17e33c5f94f8b001de44b7cf8ba2e36fbd15859e \
- --hash=sha256:f2ffc92b46ed6e6760f1d47a71e56b5664781bc68986dbd1836b2b70c0ce2071 \
- --hash=sha256:f4f72a85316d8e13234cafe0a9f81b40418ad7a082792fa4165bd7d45d96066b \
- --hash=sha256:f59883c643cb19630500f57016f76cfdcd6845ca8c5b5ea1f6e17f74c8e5f511 \
- --hash=sha256:f6aaef16d65d1787280943f1c8718dc32e9cf141014e4634d64446702d26e0ff \
- --hash=sha256:fe81055d8c6c9de76d60c94ddea73c290b416e061d40d542b24a5871bad498b7 \
- --hash=sha256:ff45e0cd8451e293b63ced93161e189780baf444119391b3e7d25315060368a6
+coverage[toml]==7.13.1 \
+ --hash=sha256:0403f647055de2609be776965108447deb8e384fe4a553c119e3ff6bfbab4784 \
+ --hash=sha256:0642eae483cc8c2902e4af7298bf886d605e80f26382124cddc3967c2a3df09e \
+ --hash=sha256:0b609fc9cdbd1f02e51f67f51e5aee60a841ef58a68d00d5ee2c0faf357481a3 \
+ --hash=sha256:0d2c11f3ea4db66b5cbded23b20185c35066892c67d80ec4be4bab257b9ad1e0 \
+ --hash=sha256:0e42e0ec0cd3e0d851cb3c91f770c9301f48647cb2877cb78f74bdaa07639a79 \
+ --hash=sha256:132718176cc723026d201e347f800cd1a9e4b62ccd3f82476950834dad501c75 \
+ --hash=sha256:16cc1da46c04fb0fb128b4dc430b78fa2aba8a6c0c9f8eb391fd5103409a6ac6 \
+ --hash=sha256:18be793c4c87de2965e1c0f060f03d9e5aff66cfeae8e1dbe6e5b88056ec153f \
+ --hash=sha256:1a55d509a1dc5a5b708b5dad3b5334e07a16ad4c2185e27b40e4dba796ab7f88 \
+ --hash=sha256:1dcb645d7e34dcbcc96cd7c132b1fc55c39263ca62eb961c064eb3928997363b \
+ --hash=sha256:2016745cb3ba554469d02819d78958b571792bb68e31302610e898f80dd3a573 \
+ --hash=sha256:228b90f613b25ba0019361e4ab81520b343b622fc657daf7e501c4ed6a2366c0 \
+ --hash=sha256:309ef5706e95e62578cda256b97f5e097916a2c26247c287bbe74794e7150df2 \
+ --hash=sha256:339dc63b3eba969067b00f41f15ad161bf2946613156fb131266d8debc8e44d0 \
+ --hash=sha256:3820778ea1387c2b6a818caec01c63adc5b3750211af6447e8dcfb9b6f08dbba \
+ --hash=sha256:3d42df8201e00384736f0df9be2ced39324c3907607d17d50d50116c989d84cd \
+ --hash=sha256:3e7b8bd70c48ffb28461ebe092c2345536fb18bbbf19d287c8913699735f505c \
+ --hash=sha256:3f2f725aa3e909b3c5fdb8192490bdd8e1495e85906af74fe6e34a2a77ba0673 \
+ --hash=sha256:3fc6a169517ca0d7ca6846c3c5392ef2b9e38896f61d615cb75b9e7134d4ee1e \
+ --hash=sha256:45980ea19277dc0a579e432aef6a504fe098ef3a9032ead15e446eb0f1191aee \
+ --hash=sha256:4d010d080c4888371033baab27e47c9df7d6fb28d0b7b7adf85a4a49be9298b3 \
+ --hash=sha256:4de84e71173d4dada2897e5a0e1b7877e5eefbfe0d6a44edee6ce31d9b8ec09e \
+ --hash=sha256:549d195116a1ba1e1ae2f5ca143f9777800f6636eab917d4f02b5310d6d73461 \
+ --hash=sha256:562ec27dfa3f311e0db1ba243ec6e5f6ab96b1edfcfc6cf86f28038bc4961ce6 \
+ --hash=sha256:57dfc8048c72ba48a8c45e188d811e5efd7e49b387effc8fb17e97936dde5bf6 \
+ --hash=sha256:5899d28b5276f536fcf840b18b61a9fce23cc3aec1d114c44c07fe94ebeaa500 \
+ --hash=sha256:60cfb538fe9ef86e5b2ab0ca8fc8d62524777f6c611dcaf76dc16fbe9b8e698a \
+ --hash=sha256:623dcc6d7a7ba450bbdbeedbaa0c42b329bdae16491af2282f12a7e809be7eb9 \
+ --hash=sha256:67170979de0dacac3f3097d02b0ad188d8edcea44ccc44aaa0550af49150c7dc \
+ --hash=sha256:6e73ebb44dca5f708dc871fe0b90cf4cff1a13f9956f747cc87b535a840386f5 \
+ --hash=sha256:6f34591000f06e62085b1865c9bc5f7858df748834662a51edadfd2c3bfe0dd3 \
+ --hash=sha256:724b1b270cb13ea2e6503476e34541a0b1f62280bc997eab443f87790202033d \
+ --hash=sha256:75a6f4aa904301dab8022397a22c0039edc1f51e90b83dbd4464b8a38dc87842 \
+ --hash=sha256:77545b5dcda13b70f872c3b5974ac64c21d05e65b1590b441c8560115dc3a0d1 \
+ --hash=sha256:776483fd35b58d8afe3acbd9988d5de592ab6da2d2a865edfdbc9fdb43e7c486 \
+ --hash=sha256:77cc258aeb29a3417062758975521eae60af6f79e930d6993555eeac6a8eac29 \
+ --hash=sha256:794f7c05af0763b1bbd1b9e6eff0e52ad068be3b12cd96c87de037b01390c968 \
+ --hash=sha256:868a2fae76dfb06e87291bcbd4dcbcc778a8500510b618d50496e520bd94d9b9 \
+ --hash=sha256:8842af7f175078456b8b17f1b73a0d16a65dcbdc653ecefeb00a56b3c8c298c4 \
+ --hash=sha256:8d9bc218650022a768f3775dd7fdac1886437325d8d295d923ebcfef4892ad5c \
+ --hash=sha256:8f572d989142e0908e6acf57ad1b9b86989ff057c006d13b76c146ec6a20216a \
+ --hash=sha256:90480b2134999301eea795b3a9dbf606c6fbab1b489150c501da84a959442465 \
+ --hash=sha256:916abf1ac5cf7eb16bc540a5bf75c71c43a676f5c52fcb9fe75a2bd75fb944e8 \
+ --hash=sha256:92f980729e79b5d16d221038dbf2e8f9a9136afa072f9d5d6ed4cb984b126a09 \
+ --hash=sha256:933082f161bbb3e9f90d00990dc956120f608cdbcaeea15c4d897f56ef4fe416 \
+ --hash=sha256:97ab3647280d458a1f9adb85244e81587505a43c0c7cff851f5116cd2814b894 \
+ --hash=sha256:985b7836931d033570b94c94713c6dba5f9d3ff26045f72c3e5dbc5fe3361e5a \
+ --hash=sha256:9e549d642426e3579b3f4b92d0431543b012dcb6e825c91619d4e93b7363c3f9 \
+ --hash=sha256:9edd0e01a343766add6817bc448408858ba6b489039eaaa2018474e4001651a4 \
+ --hash=sha256:9ee68b21909686eeb21dfcba2c3b81fee70dcf38b140dcd5aa70680995fa3aa5 \
+ --hash=sha256:9f5e772ed5fef25b3de9f2008fe67b92d46831bd2bc5bdc5dd6bfd06b83b316f \
+ --hash=sha256:a03a4f3a19a189919c7055098790285cc5c5b0b3976f8d227aea39dbf9f8bfdb \
+ --hash=sha256:a4d240d260a1aed814790bbe1f10a5ff31ce6c21bc78f0da4a1e8268d6c80dbd \
+ --hash=sha256:a5a68357f686f8c4d527a2dc04f52e669c2fc1cbde38f6f7eb6a0e58cbd17cae \
+ --hash=sha256:a998cc0aeeea4c6d5622a3754da5a493055d2d95186bad877b0a34ea6e6dbe0a \
+ --hash=sha256:b67e47c5595b9224599016e333f5ec25392597a89d5744658f837d204e16c63e \
+ --hash=sha256:b6f3b96617e9852703f5b633ea01315ca45c77e879584f283c44127f0f1ec564 \
+ --hash=sha256:b7593fe7eb5feaa3fbb461ac79aac9f9fc0387a5ca8080b0c6fe2ca27b091afd \
+ --hash=sha256:bb3f6562e89bad0110afbe64e485aac2462efdce6232cdec7862a095dc3412f6 \
+ --hash=sha256:bb4f8c3c9a9f34423dba193f241f617b08ffc63e27f67159f60ae6baf2dcfe0f \
+ --hash=sha256:bd63e7b74661fed317212fab774e2a648bc4bb09b35f25474f8e3325d2945cd7 \
+ --hash=sha256:be753b225d159feb397bd0bf91ae86f689bad0da09d3b301478cd39b878ab31a \
+ --hash=sha256:bf100a3288f9bb7f919b87eb84f87101e197535b9bd0e2c2b5b3179633324fee \
+ --hash=sha256:c223d078112e90dc0e5c4e35b98b9584164bea9fbbd221c0b21c5241f6d51b62 \
+ --hash=sha256:c3d8c679607220979434f494b139dfb00131ebf70bb406553d69c1ff01a5c33d \
+ --hash=sha256:c43257717611ff5e9a1d79dce8e47566235ebda63328718d9b65dd640bc832ef \
+ --hash=sha256:c832ec92c4499ac463186af72f9ed4d8daec15499b16f0a879b0d1c8e5cf4a3b \
+ --hash=sha256:c8e2706ceb622bc63bac98ebb10ef5da80ed70fbd8a7999a5076de3afaef0fb1 \
+ --hash=sha256:cb237bfd0ef4d5eb6a19e29f9e528ac67ac3be932ea6b44fb6cc09b9f3ecff78 \
+ --hash=sha256:ccd7a6fca48ca9c131d9b0a2972a581e28b13416fc313fb98b6d24a03ce9a398 \
+ --hash=sha256:d10a2ed46386e850bb3de503a54f9fe8192e5917fcbb143bfef653a9355e9a53 \
+ --hash=sha256:d1443ba9acbb593fa7c1c29e011d7c9761545fe35e7652e85ce7f51a16f7e08d \
+ --hash=sha256:d2287ac9360dec3837bfdad969963a5d073a09a85d898bd86bea82aa8876ef3c \
+ --hash=sha256:d3c9f051b028810f5a87c88e5d6e9af3c0ff32ef62763bf15d29f740453ca909 \
+ --hash=sha256:d72140ccf8a147e94274024ff6fd8fb7811354cf7ef88b1f0a988ebaa5bc774f \
+ --hash=sha256:d938b4a840fb1523b9dfbbb454f652967f18e197569c32266d4d13f37244c3d9 \
+ --hash=sha256:db622b999ffe49cb891f2fff3b340cdc2f9797d01a0a202a0973ba2562501d90 \
+ --hash=sha256:e09fbecc007f7b6afdfb3b07ce5bd9f8494b6856dd4f577d26c66c391b829851 \
+ --hash=sha256:e1fa280b3ad78eea5be86f94f461c04943d942697e0dac889fa18fff8f5f9147 \
+ --hash=sha256:e4f18eca6028ffa62adbd185a8f1e1dd242f2e68164dba5c2b74a5204850b4cf \
+ --hash=sha256:e825dbb7f84dfa24663dd75835e7257f8882629fc11f03ecf77d84a75134b864 \
+ --hash=sha256:eaecf47ef10c72ece9a2a92118257da87e460e113b83cc0d2905cbbe931792b4 \
+ --hash=sha256:ef6688db9bf91ba111ae734ba6ef1a063304a881749726e0d3575f5c10a9facf \
+ --hash=sha256:f398ba4df52d30b1763f62eed9de5620dcde96e6f491f4c62686736b155aa6e4 \
+ --hash=sha256:f80e2bb21bfab56ed7405c2d79d34b5dc0bc96c2c1d2a067b643a09fb756c43a \
+ --hash=sha256:f83351e0f7dcdb14d7326c3d8d8c4e915fa685cbfdc6281f9470d97a04e9dfe4 \
+ --hash=sha256:f8dca5590fec7a89ed6826fce625595279e586ead52e9e958d3237821fbc750c \
+ --hash=sha256:fa3edde1aa8807de1d05934982416cb3ec46d1d4d91e280bcce7cca01c507992 \
+ --hash=sha256:fea07c1a39a22614acb762e3fbbb4011f65eedafcb2948feeef641ac78b4ee5c \
+ --hash=sha256:ff10896fa55167371960c5908150b434b71c876dfab97b69478f22c8b445ea19 \
+ --hash=sha256:ff86d4e85188bba72cfb876df3e11fa243439882c55957184af44a35bd5880b7 \
+ --hash=sha256:ffed1e4980889765c84a5d1a566159e363b71d6b6fbaf0bebc9d3c30bc016766
# via pytest-cov
cryptography==43.0.3 \
--hash=sha256:0c580952eef9bf68c4747774cde7ec1d85a6e61de97281f2dba83c7d2c806362 \
@@ -843,51 +843,51 @@ cryptography==43.0.3 \
# snowflake-connector-python
# types-pyopenssl
# types-redis
-dask[dataframe]==2025.11.0 \
- --hash=sha256:08c35a8146c05c93b34f83cf651009129c42ee71762da7ca452fb7308641c2b8 \
- --hash=sha256:23d59e624b80ee05b7cc8df858682cca58262c4c3b197ccf61da0f6543c8f7c3
+dask[dataframe]==2025.12.0 \
+ --hash=sha256:4213ce9c5d51d6d89337cff69de35d902aa0bf6abdb8a25c942a4d0281f3a598 \
+ --hash=sha256:8d478f2aabd025e2453cf733ad64559de90cf328c20209e4574e9543707c3e1b
# via feast (setup.py)
datasets==4.0.0 \
--hash=sha256:7ef95e62025fd122882dbce6cb904c8cd3fbc829de6669a5eb939c77d50e203d \
--hash=sha256:9657e7140a9050db13443ba21cb5de185af8af944479b00e7ff1e00a61c8dbf1
# via feast (setup.py)
-db-dtypes==1.4.4 \
- --hash=sha256:26f53db5df1acd746b88c5647913a1b20f731c0af1b11abcb6bec5365f31098a \
- --hash=sha256:32c13039982656a8598a0835f25f0e07e34c9a423e471ee60c2553240b7fcf1e
+db-dtypes==1.5.0 \
+ --hash=sha256:abdbb2e4eb965800ed6f98af0c5c1cafff9063ace09114be2d26a7f046be2c8a \
+ --hash=sha256:ad9e94243f53e104bc77dbf9ae44b580d83a770d3694483aba59c9767966daa5
# via
# google-cloud-bigquery
# pandas-gbq
-debugpy==1.8.17 \
- --hash=sha256:045290c010bcd2d82bc97aa2daf6837443cd52f6328592698809b4549babcee1 \
- --hash=sha256:1440fd514e1b815edd5861ca394786f90eb24960eb26d6f7200994333b1d79e3 \
- --hash=sha256:17e456da14848d618662354e1dccfd5e5fb75deec3d1d48dc0aa0baacda55860 \
- --hash=sha256:24693179ef9dfa20dca8605905a42b392be56d410c333af82f1c5dff807a64cc \
- --hash=sha256:3a32c0af575749083d7492dc79f6ab69f21b2d2ad4cd977a958a07d5865316e4 \
- --hash=sha256:3bea3b0b12f3946e098cce9b43c3c46e317b567f79570c3f43f0b96d00788088 \
- --hash=sha256:5c59b74aa5630f3a5194467100c3b3d1c77898f9ab27e3f7dc5d40fc2f122670 \
- --hash=sha256:60c7dca6571efe660ccb7a9508d73ca14b8796c4ed484c2002abba714226cfef \
- --hash=sha256:6a4e9dacf2cbb60d2514ff7b04b4534b0139facbf2abdffe0639ddb6088e59cf \
- --hash=sha256:6c5cd6f009ad4fca8e33e5238210dc1e5f42db07d4b6ab21ac7ffa904a196420 \
- --hash=sha256:857c1dd5d70042502aef1c6d1c2801211f3ea7e56f75e9c335f434afb403e464 \
- --hash=sha256:893cba7bb0f55161de4365584b025f7064e1f88913551bcd23be3260b231429c \
- --hash=sha256:8deb4e31cd575c9f9370042876e078ca118117c1b5e1f22c32befcfbb6955f0c \
- --hash=sha256:a3aad0537cf4d9c1996434be68c6c9a6d233ac6f76c2a482c7803295b4e4f99a \
- --hash=sha256:b13eea5587e44f27f6c48588b5ad56dcb74a4f3a5f89250443c94587f3eb2ea1 \
- --hash=sha256:b532282ad4eca958b1b2d7dbcb2b7218e02cb934165859b918e3b6ba7772d3f4 \
- --hash=sha256:b69b6bd9dba6a03632534cdf67c760625760a215ae289f7489a452af1031fe1f \
- --hash=sha256:b75868b675949a96ab51abc114c7163f40ff0d8f7d6d5fd63f8932fd38e9c6d7 \
- --hash=sha256:bb1bbf92317e1f35afcf3ef0450219efb3afe00be79d8664b250ac0933b9015f \
- --hash=sha256:c41d2ce8bbaddcc0009cc73f65318eedfa3dbc88a8298081deb05389f1ab5542 \
- --hash=sha256:c6bdf134457ae0cac6fb68205776be635d31174eeac9541e1d0c062165c6461f \
- --hash=sha256:d3fce3f0e3de262a3b67e69916d001f3e767661c6e1ee42553009d445d1cd840 \
- --hash=sha256:e34ee844c2f17b18556b5bbe59e1e2ff4e86a00282d2a46edab73fd7f18f4a83 \
- --hash=sha256:e79a195f9e059edfe5d8bf6f3749b2599452d3e9380484cd261f6b7cd2c7c4da \
- --hash=sha256:e851beb536a427b5df8aa7d0c7835b29a13812f41e46292ff80b2ef77327355a \
- --hash=sha256:e8f8f61c518952fb15f74a302e068b48d9c4691768ade433e4adeea961993464 \
- --hash=sha256:eaa85bce251feca8e4c87ce3b954aba84b8c645b90f0e6a515c00394a9f5c0e7 \
- --hash=sha256:f14467edef672195c6f6b8e27ce5005313cb5d03c9239059bc7182b60c176e2d \
- --hash=sha256:f2ac8055a0c4a09b30b931100996ba49ef334c6947e7ae365cdd870416d7513e \
- --hash=sha256:fd723b47a8c08892b1a16b2c6239a8b96637c62a59b94bb5dab4bac592a58a8e
+debugpy==1.8.19 \
+ --hash=sha256:0601708223fe1cd0e27c6cce67a899d92c7d68e73690211e6788a4b0e1903f5b \
+ --hash=sha256:14035cbdbb1fe4b642babcdcb5935c2da3b1067ac211c5c5a8fdc0bb31adbcaa \
+ --hash=sha256:1e8c4d1bd230067bf1bbcdbd6032e5a57068638eb28b9153d008ecde288152af \
+ --hash=sha256:327cb28c3ad9e17bc925efc7f7018195fd4787c2fe4b7af1eec11f1d19bdec62 \
+ --hash=sha256:360ffd231a780abbc414ba0f005dad409e71c78637efe8f2bd75837132a41d38 \
+ --hash=sha256:4468de0c30012d367944f0eab4ecb8371736e8ef9522a465f61214f344c11183 \
+ --hash=sha256:6599cab8a783d1496ae9984c52cb13b7c4a3bd06a8e6c33446832a5d97ce0bee \
+ --hash=sha256:66e3d2fd8f2035a8f111eb127fa508469dfa40928a89b460b41fd988684dc83d \
+ --hash=sha256:76f566baaf7f3e06adbe67ffedccd2ee911d1e486f55931939ce3f0fe1090774 \
+ --hash=sha256:783a519e6dfb1f3cd773a9bda592f4887a65040cb0c7bd38dde410f4e53c40d4 \
+ --hash=sha256:7b62c0f015120ede25e5124a5f9d8a424e1208e3d96a36c89958f046ee21fff6 \
+ --hash=sha256:806d6800246244004625d5222d7765874ab2d22f3ba5f615416cf1342d61c488 \
+ --hash=sha256:85016a73ab84dea1c1f1dcd88ec692993bcbe4532d1b49ecb5f3c688ae50c606 \
+ --hash=sha256:8e19a725f5d486f20e53a1dde2ab8bb2c9607c40c00a42ab646def962b41125f \
+ --hash=sha256:91e35db2672a0abaf325f4868fcac9c1674a0d9ad9bb8a8c849c03a5ebba3e6d \
+ --hash=sha256:a21bfdea088f713df05fa246ba0520f6ba44dd7eaec224742f51987a6979a648 \
+ --hash=sha256:b1cb98e5325da3059ca24445fca48314bfddfdf65ce1b59ff07055e723f06bd2 \
+ --hash=sha256:b605f17e89ba0ecee994391194285fada89cee111cfcd29d6f2ee11cbdc40976 \
+ --hash=sha256:b7dd275cf2c99e53adb9654f5ae015f70415bbe2bacbe24cfee30d54b6aa03c5 \
+ --hash=sha256:bccb1540a49cde77edc7ce7d9d075c1dbeb2414751bc0048c7a11e1b597a4c2e \
+ --hash=sha256:c047177ab2d286451f242b855b650d313198c4a987140d4b35218b2855a64a4a \
+ --hash=sha256:c30639998a9f9cd9699b4b621942c0179a6527f083c72351f95c6ab1728d5b73 \
+ --hash=sha256:c5dcfa21de1f735a4f7ced4556339a109aa0f618d366ede9da0a3600f2516d8b \
+ --hash=sha256:c9b9bf440141a36836bdbe4320a2b126bb38aafa85e1aed05d7bfbb0e2a278bf \
+ --hash=sha256:d40c016c1f538dbf1762936e3aeb43a89b965069d9f60f9e39d35d9d25e6b809 \
+ --hash=sha256:d9b6f633fd2865af2afba2beb0c1819b6ecd4aed1c8f90f5d1bbca3272306b10 \
+ --hash=sha256:e24b1652a1df1ab04d81e7ead446a91c226de704ff5dde6bd0a0dbaab07aa3f2 \
+ --hash=sha256:e9c68d9a382ec754dc05ed1d1b4ed5bd824b9f7c1a8cd1083adb84b3c93501de \
+ --hash=sha256:eea7e5987445ab0b5ed258093722d5ecb8bb72217c5c9b1e21f64efe23ddebdb \
+ --hash=sha256:fce6da15d73be5935b4438435c53adb512326a3e11e4f90793ea87cd9f018254
# via ipykernel
decorator==5.2.1 \
--hash=sha256:65f266143752f734b0a7cc83c46f4618af75b8c5911b00ccb61d0ac9b6da0360 \
@@ -929,9 +929,9 @@ docling==2.27.0 \
--hash=sha256:1288ed75b27e33bf94daff34faffc6d11b7d7ccc13e3df84fb24adad3991f72d \
--hash=sha256:faba35662612a2c687a3a463e501d95f645316436084af92a0442ce162429a3d
# via feast (setup.py)
-docling-core[chunking]==2.54.1 \
- --hash=sha256:2d22ee1cd8508fa7ffdd2e01ef30d7521390ff55ef240610f16be0cf54ffe73e \
- --hash=sha256:c6595e8b84f5e9de7a0a6298206d749f4be5730824604e684f204078a3689985
+docling-core[chunking]==2.57.0 \
+ --hash=sha256:24b71172e8bc4fbe2b4213b29f51878114f4c13f25fc0bc9920168505c76c1a3 \
+ --hash=sha256:398768b4d275ad2e11703ad9446fd0315a9a5fc8d09bc45ed207302d844d6ed5
# via
# docling
# docling-ibm-models
@@ -1044,13 +1044,13 @@ durationpy==0.10 \
easyocr==1.7.2 \
--hash=sha256:5be12f9b0e595d443c9c3d10b0542074b50f0ec2d98b141a109cd961fd1c177c
# via docling
-elastic-transport==9.2.0 \
- --hash=sha256:0331466ca8febdb7d168c0fbf159294b0066492733b51da94f4dd28a0ee596cd \
- --hash=sha256:f52b961e58e6b76d488993286907f61a6ddccbdae8e0135ce8d369227b6282d8
+elastic-transport==9.2.1 \
+ --hash=sha256:39e1a25e486af34ce7aa1bc9005d1c736f1b6fb04c9b64ea0604ded5a61fc1d4 \
+ --hash=sha256:97d9abd638ba8aa90faa4ca1bf1a18bde0fe2088fbc8757f2eb7b299f205773d
# via elasticsearch
-elasticsearch==9.2.0 \
- --hash=sha256:87090fe98c515ec0fce82f633fe11d7e90e04d93581b6b3e05de29efe4cc8b74 \
- --hash=sha256:99656baa34b10130402b6c38429feddf7aee1c3247566e8f95f0d0267fe9f9ab
+elasticsearch==9.2.1 \
+ --hash=sha256:8665f5a0b4d29a7c2772851c05ea8a09279abb7928b7d727524613bd61d75958 \
+ --hash=sha256:97f473418e8976611349757287ac982acf12f4e305182863d985d5a031c36830
# via feast (setup.py)
entrypoints==0.4 \
--hash=sha256:b706eddaa9218a19ebcd67b56818f05bb27589b1ca9e8d797b74affad4ccacd4 \
@@ -1102,9 +1102,9 @@ faiss-cpu==1.10.0 \
--hash=sha256:e71f7e24d5b02d3a51df47b77bd10f394a1b48a8331d5c817e71e9e27a8a75ac \
--hash=sha256:f71c5860c860df2320299f9e4f2ca1725beb559c04acb1cf961ed24e6218277a
# via feast (setup.py)
-fastapi==0.124.0 \
- --hash=sha256:260cd178ad75e6d259991f2fd9b0fee924b224850079df576a3ba604ce58f4e6 \
- --hash=sha256:91596bdc6dde303c318f06e8d2bc75eafb341fc793a0c9c92c0bc1db1ac52480
+fastapi==0.128.0 \
+ --hash=sha256:1cc179e1cef10a6be60ffe429f79b829dce99d8de32d7acb7e6c8dfdf7f2645a \
+ --hash=sha256:aebd93f9716ee3b4f4fcfe13ffb7cf308d99c9f3ab5622d8877441072561582d
# via
# feast (setup.py)
# fastapi-mcp
@@ -1116,9 +1116,9 @@ fastjsonschema==2.21.2 \
--hash=sha256:1c797122d0a86c5cace2e54bf4e819c36223b552017172f32c5c024a6b77e463 \
--hash=sha256:b1eb43748041c880796cd077f1a07c3d94e93ae84bba5ed36800a33554ae05de
# via nbformat
-filelock==3.20.0 \
- --hash=sha256:339b4732ffda5cd79b13f4e2711a31b0365ce445d95d243bb996273d072546a2 \
- --hash=sha256:711e943b4ec6be42e1d4e6690b48dc175c822967466bb31c0c293f34334c13f4
+filelock==3.20.1 \
+ --hash=sha256:15d9e9a67306188a44baa72f569d2bfd803076269365fdea0934385da4dc361a \
+ --hash=sha256:b8360948b351b80f420878d8516519a2204b07aefcdcfd24912a5d33127f188c
# via
# datasets
# huggingface-hub
@@ -1294,9 +1294,9 @@ google-api-core[grpc]==2.28.1 \
# google-cloud-datastore
# google-cloud-storage
# pandas-gbq
-google-auth==2.43.0 \
- --hash=sha256:88228eee5fc21b62a1b5fe773ca15e67778cb07dc8363adcb4a8827b52d81483 \
- --hash=sha256:af628ba6fa493f75c7e9dbe9373d148ca9f4399b5ea29976519e0a3848eddd16
+google-auth==2.45.0 \
+ --hash=sha256:82344e86dc00410ef5382d99be677c6043d72e502b625aa4f4afa0bdacca0f36 \
+ --hash=sha256:90d3f41b6b72ea72dd9811e765699ee491ab24139f34ebf1ca2b9cc0c38708f3
# via
# google-api-core
# google-auth-oauthlib
@@ -1315,19 +1315,19 @@ google-auth-oauthlib==1.2.2 \
# via
# pandas-gbq
# pydata-google-auth
-google-cloud-bigquery[pandas]==3.38.0 \
- --hash=sha256:8afcb7116f5eac849097a344eb8bfda78b7cfaae128e60e019193dd483873520 \
- --hash=sha256:e06e93ff7b245b239945ef59cb59616057598d369edac457ebf292bd61984da6
+google-cloud-bigquery[pandas]==3.39.0 \
+ --hash=sha256:cb375e1d63dea9bd5bf735e66024338f294159d43afdf63e1d023f5fcbbf55ea \
+ --hash=sha256:dc7a64921465859105461b43c42562e38e797d7a73feb72b3cfc4865b7b1c5ef
# via
# feast (setup.py)
# pandas-gbq
-google-cloud-bigquery-storage==2.35.0 \
- --hash=sha256:c9bab6b8e41d6cb9806e589e65f320c89ada84f466e61566b7208d87924c1430 \
- --hash=sha256:f2e3a08882155de1e9ec53c71c5784eb1f25dc6514c535f5796c3c9eeac17d17
+google-cloud-bigquery-storage==2.36.0 \
+ --hash=sha256:1769e568070db672302771d2aec18341de10712aa9c4a8c549f417503e0149f0 \
+ --hash=sha256:d3c1ce9d2d3a4d7116259889dcbe3c7c70506f71f6ce6bbe54aa0a68bbba8f8f
# via feast (setup.py)
-google-cloud-bigtable==2.34.0 \
- --hash=sha256:773258b00cd3f9a3a35639cc38bd711f4f1418aaa0c8d70cb028978ed98dc2c2 \
- --hash=sha256:a4a8db4903840cd3f89fb19c060eea2e7c09c1265cb0538cfc11288dbc6000e4
+google-cloud-bigtable==2.35.0 \
+ --hash=sha256:f355bfce1f239453ec2bb3839b0f4f9937cf34ef06ef29e1ca63d58fd38d0c50 \
+ --hash=sha256:f5699012c5fea4bd4bdf7e80e5e3a812a847eb8f41bf8dc2f43095d6d876b83b
# via feast (setup.py)
google-cloud-core==2.5.0 \
--hash=sha256:67d977b41ae6c7211ee830c7912e41003ea8194bff15ae7d72fd6f51e57acabc \
@@ -1337,49 +1337,48 @@ google-cloud-core==2.5.0 \
# google-cloud-bigtable
# google-cloud-datastore
# google-cloud-storage
-google-cloud-datastore==2.21.0 \
- --hash=sha256:eee454dd4a55f5b327f9f344928ff1a09a6f77c23d5e3d908ad31a13cc2f4073 \
- --hash=sha256:f303f27cd1983383f20bd227019cd8a7897419e0ec6b878367c58c66245f9d9b
+google-cloud-datastore==2.23.0 \
+ --hash=sha256:24a1b1d29b902148fe41b109699f76fd3aa60591e9d547c0f8b87d7bf9ff213f \
+ --hash=sha256:80049883a4ae928fdcc661ba6803ec267665dc0e6f3ce2da91441079a6bb6387
# via feast (setup.py)
google-cloud-storage==2.19.0 \
--hash=sha256:aeb971b5c29cf8ab98445082cbfe7b161a1f48ed275822f59ed3f1524ea54fba \
--hash=sha256:cd05e9e7191ba6cb68934d8eb76054d9be4562aa89dbc4236feee4d7d51342b2
# via feast (setup.py)
-google-crc32c==1.7.1 \
- --hash=sha256:0f99eaa09a9a7e642a61e06742856eec8b19fc0037832e03f941fe7cf0c8e4db \
- --hash=sha256:19eafa0e4af11b0a4eb3974483d55d2d77ad1911e6cf6f832e1574f6781fd337 \
- --hash=sha256:1c67ca0a1f5b56162951a9dae987988679a7db682d6f97ce0f6381ebf0fbea4c \
- --hash=sha256:1f2b3522222746fff0e04a9bd0a23ea003ba3cccc8cf21385c564deb1f223242 \
- --hash=sha256:22beacf83baaf59f9d3ab2bbb4db0fb018da8e5aebdce07ef9f09fce8220285e \
- --hash=sha256:2bff2305f98846f3e825dbeec9ee406f89da7962accdb29356e4eadc251bd472 \
- --hash=sha256:2d73a68a653c57281401871dd4aeebbb6af3191dcac751a76ce430df4d403194 \
- --hash=sha256:32d1da0d74ec5634a05f53ef7df18fc646666a25efaaca9fc7dcfd4caf1d98c3 \
- --hash=sha256:3bda0fcb632d390e3ea8b6b07bf6b4f4a66c9d02dcd6fbf7ba00a197c143f582 \
- --hash=sha256:6335de12921f06e1f774d0dd1fbea6bf610abe0887a1638f64d694013138be5d \
- --hash=sha256:6b211ddaf20f7ebeec5c333448582c224a7c90a9d98826fbab82c0ddc11348e6 \
- --hash=sha256:6efb97eb4369d52593ad6f75e7e10d053cf00c48983f7a973105bc70b0ac4d82 \
- --hash=sha256:6fbab4b935989e2c3610371963ba1b86afb09537fd0c633049be82afe153ac06 \
- --hash=sha256:713121af19f1a617054c41f952294764e0c5443d5a5d9034b2cd60f5dd7e0349 \
- --hash=sha256:754561c6c66e89d55754106739e22fdaa93fafa8da7221b29c8b8e8270c6ec8a \
- --hash=sha256:7cc81b3a2fbd932a4313eb53cc7d9dde424088ca3a0337160f35d91826880c1d \
- --hash=sha256:85fef7fae11494e747c9fd1359a527e5970fc9603c90764843caabd3a16a0a48 \
- --hash=sha256:905a385140bf492ac300026717af339790921f411c0dfd9aa5a9e69a08ed32eb \
- --hash=sha256:9fc196f0b8d8bd2789352c6a522db03f89e83a0ed6b64315923c396d7a932315 \
- --hash=sha256:a8e9afc74168b0b2232fb32dd202c93e46b7d5e4bf03e66ba5dc273bb3559589 \
- --hash=sha256:b07d48faf8292b4db7c3d64ab86f950c2e94e93a11fd47271c28ba458e4a0d76 \
- --hash=sha256:b6d86616faaea68101195c6bdc40c494e4d76f41e07a37ffdef270879c15fb65 \
- --hash=sha256:b7491bdc0c7564fcf48c0179d2048ab2f7c7ba36b84ccd3a3e1c3f7a72d3bba6 \
- --hash=sha256:bb5e35dcd8552f76eed9461a23de1030920a3c953c1982f324be8f97946e7127 \
- --hash=sha256:d68e17bad8f7dd9a49181a1f5a8f4b251c6dbc8cc96fb79f1d321dfd57d66f53 \
- --hash=sha256:dcdf5a64adb747610140572ed18d011896e3b9ae5195f2514b7ff678c80f1603 \
- --hash=sha256:df8b38bdaf1629d62d51be8bdd04888f37c451564c2042d36e5812da9eff3c35 \
- --hash=sha256:e10554d4abc5238823112c2ad7e4560f96c7bf3820b202660373d769d9e6e4c9 \
- --hash=sha256:e42e20a83a29aa2709a0cf271c7f8aefaa23b7ab52e53b322585297bb94d4638 \
- --hash=sha256:ed66cbe1ed9cbaaad9392b5259b3eba4a9e565420d734e6238813c428c3336c9 \
- --hash=sha256:ee6547b657621b6cbed3562ea7826c3e11cab01cd33b74e1f677690652883e77 \
- --hash=sha256:f2226b6a8da04f1d9e61d3e357f2460b9551c5e6950071437e122c958a18ae14 \
- --hash=sha256:fa8136cc14dd27f34a3221c0f16fd42d8a40e4778273e61a3c19aedaa44daf6b \
- --hash=sha256:fc5319db92daa516b653600794d5b9f9439a9a121f3e162f94b0e1891c7933cb
+google-crc32c==1.8.0 \
+ --hash=sha256:014a7e68d623e9a4222d663931febc3033c5c7c9730785727de2a81f87d5bab8 \
+ --hash=sha256:01f126a5cfddc378290de52095e2c7052be2ba7656a9f0caf4bcd1bfb1833f8a \
+ --hash=sha256:0470b8c3d73b5f4e3300165498e4cf25221c7eb37f1159e221d1825b6df8a7ff \
+ --hash=sha256:119fcd90c57c89f30040b47c211acee231b25a45d225e3225294386f5d258288 \
+ --hash=sha256:14f87e04d613dfa218d6135e81b78272c3b904e2a7053b841481b38a7d901411 \
+ --hash=sha256:17446feb05abddc187e5441a45971b8394ea4c1b6efd88ab0af393fd9e0a156a \
+ --hash=sha256:19b40d637a54cb71e0829179f6cb41835f0fbd9e8eb60552152a8b52c36cbe15 \
+ --hash=sha256:2a3dc3318507de089c5384cc74d54318401410f82aa65b2d9cdde9d297aca7cb \
+ --hash=sha256:3b9776774b24ba76831609ffbabce8cdf6fa2bd5e9df37b594221c7e333a81fa \
+ --hash=sha256:3cc0c8912038065eafa603b238abf252e204accab2a704c63b9e14837a854962 \
+ --hash=sha256:3d488e98b18809f5e322978d4506373599c0c13e6c5ad13e53bb44758e18d215 \
+ --hash=sha256:3ebb04528e83b2634857f43f9bb8ef5b2bbe7f10f140daeb01b58f972d04736b \
+ --hash=sha256:450dc98429d3e33ed2926fc99ee81001928d63460f8538f21a5d6060912a8e27 \
+ --hash=sha256:4b8286b659c1335172e39563ab0a768b8015e88e08329fa5321f774275fc3113 \
+ --hash=sha256:57a50a9035b75643996fbf224d6661e386c7162d1dfdab9bc4ca790947d1007f \
+ --hash=sha256:61f58b28e0b21fcb249a8247ad0db2e64114e201e2e9b4200af020f3b6242c9f \
+ --hash=sha256:6f35aaffc8ccd81ba3162443fabb920e65b1f20ab1952a31b13173a67811467d \
+ --hash=sha256:71734788a88f551fbd6a97be9668a0020698e07b2bf5b3aa26a36c10cdfb27b2 \
+ --hash=sha256:864abafe7d6e2c4c66395c1eb0fe12dc891879769b52a3d56499612ca93b6092 \
+ --hash=sha256:86cfc00fe45a0ac7359e5214a1704e51a99e757d0272554874f419f79838c5f7 \
+ --hash=sha256:87b0072c4ecc9505cfa16ee734b00cd7721d20a0f595be4d40d3d21b41f65ae2 \
+ --hash=sha256:87fa445064e7db928226b2e6f0d5304ab4cd0339e664a4e9a25029f384d9bb93 \
+ --hash=sha256:89c17d53d75562edfff86679244830599ee0a48efc216200691de8b02ab6b2b8 \
+ --hash=sha256:8b3f68782f3cbd1bce027e48768293072813469af6a61a86f6bb4977a4380f21 \
+ --hash=sha256:a428e25fb7691024de47fecfbff7ff957214da51eddded0da0ae0e0f03a2cf79 \
+ --hash=sha256:b0d1a7afc6e8e4635564ba8aa5c0548e3173e41b6384d7711a9123165f582de2 \
+ --hash=sha256:ba6aba18daf4d36ad4412feede6221414692f44d17e5428bdd81ad3fc1eee5dc \
+ --hash=sha256:cb5c869c2923d56cb0c8e6bcdd73c009c36ae39b652dbe46a05eb4ef0ad01454 \
+ --hash=sha256:d511b3153e7011a27ab6ee6bb3a5404a55b994dc1a7322c0b87b29606d9790e2 \
+ --hash=sha256:db3fe8eaf0612fc8b20fa21a5f25bd785bc3cd5be69f8f3412b0ac2ffd49e733 \
+ --hash=sha256:e6584b12cb06796d285d09e33f63309a09368b9d806a551d8036a4207ea43697 \
+ --hash=sha256:f4b51844ef67d6cf2e9425983274da75f18b1597bb2c998e1c0a0e8d46f8f651 \
+ --hash=sha256:f639065ea2042d5c034bf258a9f085eaa7af0cd250667c0635a3118e8f92c69c
# via
# google-cloud-bigtable
# google-cloud-storage
@@ -1466,6 +1465,7 @@ grpcio==1.62.3 \
# google-api-core
# google-cloud-bigquery
# google-cloud-bigquery-storage
+ # google-cloud-datastore
# googleapis-common-protos
# grpc-google-iam-v1
# grpcio-health-checking
@@ -1806,9 +1806,9 @@ imagesize==1.4.1 \
--hash=sha256:0d8d18d08f840c19d0ee7ca1fd82490fdc3729b7ac93f49870406ddde8ef8d8b \
--hash=sha256:69150444affb9cb0d5cc5a92b3676f0b2fb7cd9ae39e947a5e11a36b4497cd4a
# via sphinx
-importlib-metadata==8.7.0 \
- --hash=sha256:d13b81ad223b890aa16c5471f2ac3056cf76c5f10f82d6f9292f0b415f389000 \
- --hash=sha256:e5dd1551894c77868a30651cef00984d50e1002d06942a7101d34870c5f02afd
+importlib-metadata==8.7.1 \
+ --hash=sha256:49fef1ae6440c182052f407c8d34a68f72efc36db9ca90dc0113398f2fdde8bb \
+ --hash=sha256:5a1f80bf1daa489495071efbb095d75a634cf28a8bc299581244063b53176151
# via
# build
# dask
@@ -1869,9 +1869,9 @@ jmespath==1.0.1 \
# aiobotocore
# boto3
# botocore
-joblib==1.5.2 \
- --hash=sha256:3faa5c39054b2f03ca547da9b2f52fde67c06240c31853f306aea97f13647b55 \
- --hash=sha256:4e1f0bdbb987e6d843c70cf43714cb276623def372df3c22fe5266b2670bc241
+joblib==1.5.3 \
+ --hash=sha256:5fc3c5039fc5ca8c0276333a188bbd59d6b7ab37fe6632daa76bc7f9ec18e713 \
+ --hash=sha256:8561a3269e6801106863fd0d6d84bb737be9e7631e33aaed3fb9ce5953688da3
# via scikit-learn
json5==0.12.1 \
--hash=sha256:b2743e77b3242f8d03c143dd975a6ec7c52e2f2afe76ed934e53503dd4ad4990 \
@@ -1951,9 +1951,9 @@ jupyter-server-terminals==0.5.3 \
--hash=sha256:41ee0d7dc0ebf2809c668e0fc726dfaf258fcd3e769568996ca731b6194ae9aa \
--hash=sha256:5ae0295167220e9ace0edcfdb212afd2b01ee8d179fe6f23c899590e9b8a5269
# via jupyter-server
-jupyterlab==4.5.0 \
- --hash=sha256:88e157c75c1afff64c7dc4b801ec471450b922a4eae4305211ddd40da8201c8a \
- --hash=sha256:aec33d6d8f1225b495ee2cf20f0514f45e6df8e360bdd7ac9bace0b7ac5177ea
+jupyterlab==4.5.1 \
+ --hash=sha256:09da1ddfbd9eec18b5101dbb8515612aa1e47443321fb99503725a88e93d20d9 \
+ --hash=sha256:31b059de96de0754ff1f2ce6279774b6aab8c34d7082e9752db58207c99bd514
# via notebook
jupyterlab-pygments==0.3.0 \
--hash=sha256:721aca4d9029252b11cfa9d185e5b5af4d54772bb8072f9b7036f4170054d35d \
@@ -2297,9 +2297,9 @@ markupsafe==3.0.3 \
# jinja2
# nbconvert
# werkzeug
-marshmallow==3.26.1 \
- --hash=sha256:3350409f20a70a7e4e11a27661187b77cdcaeb20abca41c1454fe33636bea09c \
- --hash=sha256:e6d8affb6cb61d39d26402096dc0aee12d5a26d490a121f118d2e81dc0719dc6
+marshmallow==3.26.2 \
+ --hash=sha256:013fa8a3c4c276c24d26d84ce934dc964e2aa794345a0f8c7e5a7191482c8a73 \
+ --hash=sha256:bbe2adb5a03e6e3571b573f42527c6fe926e17467833660bebd11593ab8dfd57
# via great-expectations
matplotlib-inline==0.2.1 \
--hash=sha256:d56ce5156ba6085e00a9d54fead6ed29a9c47e215cd1bba2e976ef39f5710a76 \
@@ -2307,9 +2307,9 @@ matplotlib-inline==0.2.1 \
# via
# ipykernel
# ipython
-mcp==1.23.3 \
- --hash=sha256:32768af4b46a1b4f7df34e2bfdf5c6011e7b63d7f1b0e321d0fdef4cd6082031 \
- --hash=sha256:b3b0da2cc949950ce1259c7bfc1b081905a51916fcd7c8182125b85e70825201
+mcp==1.25.0 \
+ --hash=sha256:56310361ebf0364e2d438e5b45f7668cbb124e158bb358333cd06e49e83a6802 \
+ --hash=sha256:b37c38144a666add0862614cc79ec276e97d72aa8ca26d622818d4e278b9721a
# via fastapi-mcp
mdurl==0.1.2 \
--hash=sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8 \
@@ -2327,9 +2327,9 @@ minio==7.2.11 \
--hash=sha256:153582ed52ff3b5005ba558e1f25bfe1e9e834f7f0745e594777f28e3e81e1a0 \
--hash=sha256:4db95a21fe1e2022ec975292d8a1f83bd5b18f830d23d42a4518ac7a5281d7c5
# via feast (setup.py)
-mistune==3.1.4 \
- --hash=sha256:93691da911e5d9d2e23bc54472892aff676df27a75274962ff9edc210364266d \
- --hash=sha256:b5a7f801d389f724ec702840c11d8fc48f2b33519102fc7ee739e8177b672164
+mistune==3.2.0 \
+ --hash=sha256:708487c8a8cdd99c9d90eb3ed4c3ed961246ff78ac82f03418f5183ab70e398a \
+ --hash=sha256:febdc629a3c78616b94393c6580551e0e34cc289987ec6c35ed3f4be42d0eee1
# via
# great-expectations
# nbconvert
@@ -2752,9 +2752,9 @@ mypy-protobuf==3.3.0 \
--hash=sha256:15604f6943b16c05db646903261e3b3e775cf7f7990b7c37b03d043a907b650d \
--hash=sha256:24f3b0aecb06656e983f58e07c732a90577b9d7af3e1066fc2b663bbf0370248
# via feast (setup.py)
-nbclient==0.10.2 \
- --hash=sha256:4ffee11e788b4a27fabeb7955547e4318a5298f34342a4bfd01f2e1faaeadc3d \
- --hash=sha256:90b7fc6b810630db87a6d0c2250b1f0ab4cf4d3c27a299b0cde78a4ed3fd9193
+nbclient==0.10.4 \
+ --hash=sha256:1e54091b16e6da39e297b0ece3e10f6f29f4ac4e8ee515d29f8a7099bd6553c9 \
+ --hash=sha256:9162df5a7373d70d606527300a95a975a47c137776cd942e52d9c7e29ff83440
# via nbconvert
nbconvert==7.16.6 \
--hash=sha256:1375a7b67e0c2883678c48e506dc320febb57685e5ee67faa51b18a90f3a712b \
@@ -2799,13 +2799,13 @@ ninja==1.13.0 \
--hash=sha256:fb46acf6b93b8dd0322adc3a4945452a4e774b75b91293bafcc7b7f8e6517dfa \
--hash=sha256:fb8ee8719f8af47fed145cced4a85f0755dd55d45b2bddaf7431fa89803c5f3e
# via easyocr
-nodeenv==1.9.1 \
- --hash=sha256:6ec12890a2dab7946721edbfbcd91f3319c6ccc9aec47be7c7e6b7011ee6645f \
- --hash=sha256:ba11c9782d29c27c70ffbdda2d7415098754709be8a7056d79a737cd901155c9
+nodeenv==1.10.0 \
+ --hash=sha256:5bb13e3eed2923615535339b3c620e76779af4cb4c6a90deccc9e36b274d3827 \
+ --hash=sha256:996c191ad80897d076bdfba80a41994c2b47c68e224c542b48feba42ba00f8bb
# via pre-commit
-notebook==7.5.0 \
- --hash=sha256:3300262d52905ca271bd50b22617681d95f08a8360d099e097726e6d2efb5811 \
- --hash=sha256:3b27eaf9913033c28dde92d02139414c608992e1df4b969c843219acf2ff95e4
+notebook==7.5.1 \
+ --hash=sha256:b2fb4cef4d47d08c33aecce1c6c6e84be05436fbd791f88fce8df9fbca088b75 \
+ --hash=sha256:f4e2451c19910c33b88709b84537e11f6368c1cdff1aa0c43db701aea535dd44
# via great-expectations
notebook-shim==0.2.4 \
--hash=sha256:411a5be4e9dc882a074ccbcae671eda64cceb068767e9a3419096986560e1cef \
@@ -3439,9 +3439,9 @@ propcache==0.4.1 \
# via
# aiohttp
# yarl
-proto-plus==1.26.1 \
- --hash=sha256:13285478c2dcf2abb829db158e1047e2f1e8d63a077d94263c2b88b043c75a66 \
- --hash=sha256:21a515a4c4c0088a773899e23c7bbade3d18f9c66c73edd4c7ee3816bc96a012
+proto-plus==1.27.0 \
+ --hash=sha256:1baa7f81cf0f8acb8bc1f6d085008ba4171eaf669629d1b6d1673b21ed1c0a82 \
+ --hash=sha256:873af56dd0d7e91836aee871e5799e1c6f1bda86ac9a983e0bb9f0c266a568c4
# via
# google-api-core
# google-cloud-bigquery-storage
@@ -4074,9 +4074,9 @@ pyopenssl==25.1.0 \
--hash=sha256:2b11f239acc47ac2e5aca04fd7fa829800aeee22a2eb30d744572a157bd8a1ab \
--hash=sha256:8d031884482e0c67ee92bf9a4d8cceb08d92aba7136432ffb0703c5280fc205b
# via snowflake-connector-python
-pyparsing==3.2.5 \
- --hash=sha256:2df8d5b7b2802ef88e8d016a2eb9c7aeaa923529cd251ed0fe4608275d4105b6 \
- --hash=sha256:e38a4f02064cf41fe6593d328d0512495ad1f3d8a91c4f73fc401b3079a59a5e
+pyparsing==3.3.1 \
+ --hash=sha256:023b5e7e5520ad96642e2c6db4cb683d3970bd640cdf7115049a6e9c3682df82 \
+ --hash=sha256:47fad0f17ac1e2cad3de3b458570fbc9b03560aa029ed5e16ee5554da9a2251c
# via great-expectations
pypdfium2==4.30.0 \
--hash=sha256:0dfa61421b5eb68e1188b0b2231e7ba35735aef2d867d86e48ee6cab6975195e \
@@ -4099,8 +4099,8 @@ pyproject-hooks==1.2.0 \
# via
# build
# pip-tools
-pyspark==4.0.1 \
- --hash=sha256:9d1f22d994f60369228397e3479003ffe2dd736ba79165003246ff7bd48e2c73
+pyspark==4.1.0 \
+ --hash=sha256:09c714ada88dfac3e1213c066617c6f473c1e22fbe279855028f77e12434147d
# via feast (setup.py)
pytest==7.4.4 \
--hash=sha256:2cf0005922c6ace4a3e2ec8b4080eb0d9753fdc93107415332f50ce9e7994280 \
@@ -4297,9 +4297,9 @@ python-keycloak==4.2.2 \
--hash=sha256:1d43a1accd4a038ed39317fcb3eb78211df6c75bbcbc4c482c99ee76327136f2 \
--hash=sha256:5137fd87c69031a372a578df96bae96b9aead2c9dad976613bc978e9e0246a1e
# via feast (setup.py)
-python-multipart==0.0.20 \
- --hash=sha256:8a62d3a8335e06589fe01f2a3e178cdcc632f3fbe0d492ad9ee0ec35aab1f104 \
- --hash=sha256:8dd0cab45b8e23064ae09147625994d090fa46f5b0d1e13af944c331a7fa9d13
+python-multipart==0.0.21 \
+ --hash=sha256:7137ebd4d3bbf70ea1622998f902b97a29434a9e8dc40eb203bbcf7c2a2cba92 \
+ --hash=sha256:cf7a6713e01c87aa35387f4774e812c4361150938d20d232800f75ffcf266090
# via mcp
python-pptx==1.0.2 \
--hash=sha256:160838e0b8565a8b1f67947675886e9fea18aa5e795db7ae531606d68e785cba \
@@ -4503,26 +4503,26 @@ pyzmq==27.1.0 \
# ipykernel
# jupyter-client
# jupyter-server
-qdrant-client==1.16.1 \
- --hash=sha256:1eefe89f66e8a468ba0de1680e28b441e69825cfb62e8fb2e457c15e24ce5e3b \
- --hash=sha256:676c7c10fd4d4cb2981b8fcb32fd764f5f661b04b7334d024034d07212f971fd
+qdrant-client==1.16.2 \
+ --hash=sha256:442c7ef32ae0f005e88b5d3c0783c63d4912b97ae756eb5e052523be682f17d3 \
+ --hash=sha256:ca4ef5f9be7b5eadeec89a085d96d5c723585a391eb8b2be8192919ab63185f0
# via feast (setup.py)
-ray==2.52.1 \
- --hash=sha256:08eb8f5fd55292ba6bee363a32491136a5e54af54e007f81e0603986fbea41a4 \
- --hash=sha256:24694e60cdc7770b90f123cc578cabb9d1a231c1fe673b5da0027b118de45846 \
- --hash=sha256:2b57ef272a2a0a0dbae6d18d70aa541eab620b4fe3b44d50466d3a533c16f9d9 \
- --hash=sha256:4e8478544fef69a17d865431c0bebdcfeff7c0f76a306f29b73c3bc3cbb0bdb9 \
- --hash=sha256:65bf461fdfe4ffa667c46f9455f8740b2ad6c1fa471b461d5f5cf6b7baf177b5 \
- --hash=sha256:6831592fedf0a122016f5dab4b67d85fa3d4db3b21f588d18834b5c031396d1c \
- --hash=sha256:8045172ad3fcff62b9dab9a4cd2e0991ad0e27fc814fe625a8d3a120306651d6 \
- --hash=sha256:843c0108ad72bb7fc6c23a22e29e6099546a5eaad3ad675c78a146d9080f6ec6 \
- --hash=sha256:993194a8be70540e0f819862031bbf19a64401fbe6c31b42065fd313ba466d34 \
- --hash=sha256:a5a3c268d45060c50cd029979ecc5f1eaaec040b19fa88dd4fe9e927d19ff13e \
- --hash=sha256:b3f9e61b799fb3cc8fd7077a3d2eb676ddfef7db644f6b6a2b657c5c3214cf19 \
- --hash=sha256:b5bc29548abb0a0a7ae9e6ff3b0ccca2824edaf011a4336e15a32793d574fbfd \
- --hash=sha256:bbe492c780a39a64bd3d0766cad10d54cf12222df88d287ec2d8f2d52de37c79 \
- --hash=sha256:e3826aeb4e4399de0c6885bd8be7ce2f629fa0010f0013f1183e0726b3d25e40 \
- --hash=sha256:f59e3b2d1a1466ac0778f2c6fac9ccb5f30107d77e3dddd1d60167248d268474
+ray==2.53.0 \
+ --hash=sha256:14f46363e9b4cf0c1c8b4d8623ec337c5bd408377831b5e5b50067930137bbca \
+ --hash=sha256:4108280d8a1cb90d7d68e5c954c35e63b8bb9a4ba15f88c5e7da0e2025647712 \
+ --hash=sha256:4a1bb3fe09ab4cd0d16ddc96b9f60c9ed83b3f93b87aa8506e0d3b746fd4e825 \
+ --hash=sha256:4db914a0a6dd608fa49c066929a1282745a2dbd73caee67d7b80fe684ca65bdd \
+ --hash=sha256:4dbb5fce1364763f29741055f50abe33cf726397141f9cc0e845dd3cc963e455 \
+ --hash=sha256:65e2ce58d3dc6baa3cf45824d889c1968ebde565ee54dfd80a98af8f31af8e4a \
+ --hash=sha256:7196e5358dfcc8211be864f45e6dfe4827202df294af3c7a76ff8fbc080e0522 \
+ --hash=sha256:73dbbaa7962a7f5e38aa8cf9483e0e9817205e989aa3dc859c738c2af1ae01df \
+ --hash=sha256:85b472ab6fb8f1189f8cef81913fd91b24dd69b3fa7dcca7e144827bd924f6c0 \
+ --hash=sha256:90faf630d20b6abf3135997fb3edb5842134aff92e04ee709865db04816d97ef \
+ --hash=sha256:a0bbb98b0b0f25a3ee075ca10171e1260e70b6bc690cd509ecd7ce1228af854d \
+ --hash=sha256:b828c147f9ff2f277b1d254e4fe9a746fdfaee7e313a93a97c7edf4dae9b81a4 \
+ --hash=sha256:bd3ec4c342776ddac23ae2b108c64f5939f417ccc4875900d586c7c978463269 \
+ --hash=sha256:d8b95d047d947493803fb8417aea31225dcacdab15afdc75b8a238901949d457 \
+ --hash=sha256:eb000c17f7301071fdd15c44c4cd3ac0f7953bb4c7c227e61719fe7048195bcd
# via feast (setup.py)
redis==4.6.0 \
--hash=sha256:585dc516b9eb042a619ef0a39c3d7d55fe81bdb4df09a52c9cdde0d07bf1aa7d \
@@ -4861,26 +4861,26 @@ ruamel-yaml==0.17.17 \
--hash=sha256:9751de4cbb57d4bfbf8fc394e125ed4a2f170fbff3dc3d78abf50be85924f8be \
--hash=sha256:9af3ec5d7f8065582f3aa841305465025d0afd26c5fb54e15b964e11838fc74f
# via great-expectations
-ruff==0.14.8 \
- --hash=sha256:15f04cb45c051159baebb0f0037f404f1dc2f15a927418f29730f411a79bc4e7 \
- --hash=sha256:1af35c2d62633d4da0521178e8a2641c636d2a7153da0bac1b30cfd4ccd91344 \
- --hash=sha256:1d62cb310c4fbcb9ee4ac023fe17f984ae1e12b8a4a02e3d21489f9a2a5f730c \
- --hash=sha256:21d48fa744c9d1cb8d71eb0a740c4dd02751a5de9db9a730a8ef75ca34cf138e \
- --hash=sha256:25add4575ffecc53d60eed3f24b1e934493631b48ebbc6ebaf9d8517924aca4b \
- --hash=sha256:2c87e09b3cd9d126fc67a9ecd3b5b1d3ded2b9c7fce3f16e315346b9d05cfb52 \
- --hash=sha256:2e2fcbefe91f9fad0916850edf0854530c15bd1926b6b779de47e9ab619ea38f \
- --hash=sha256:4c943d847b7f02f7db4201a0600ea7d244d8a404fbb639b439e987edcf2baf9a \
- --hash=sha256:774ed0dd87d6ce925e3b8496feb3a00ac564bea52b9feb551ecd17e0a23d1eed \
- --hash=sha256:7aaf2974f378e6b01d1e257c6948207aec6a9b5ba53fab23d0182efb887a0e4a \
- --hash=sha256:8cdb162a7159f4ca36ce980a18c43d8f036966e7f73f866ac8f493b75e0c27e9 \
- --hash=sha256:965a582c93c63fe715fd3e3f8aa37c4b776777203d8e1d8aa3cc0c14424a4b99 \
- --hash=sha256:9eeb0b24242b5bbff3011409a739929f497f3fb5fe3b5698aba5e77e8c833097 \
- --hash=sha256:a9d70721066a296f45786ec31916dc287b44040f553da21564de0ab4d45a869b \
- --hash=sha256:cb6e8bf7b4f627548daa1b69283dac5a296bfe9ce856703b03130732e20ddfe2 \
- --hash=sha256:e5758ca513c43ad8a4ef13f0f081f80f08008f410790f3611a21a92421ab045b \
- --hash=sha256:ec071e9c82eca417f6111fd39f7043acb53cd3fde9b1f95bbed745962e345afb \
- --hash=sha256:eed28f6fafcc9591994c42254f5a5c5ca40e69a30721d2ab18bb0bb3baac3ab6 \
- --hash=sha256:f74f7ba163b6e85a8d81a590363bf71618847e5078d90827749bfda1d88c9cdf
+ruff==0.14.10 \
+ --hash=sha256:104c49fc7ab73f3f3a758039adea978869a918f31b73280db175b43a2d9b51d6 \
+ --hash=sha256:1484983559f026788e3a5c07c81ef7d1e97c1c78ed03041a18f75df104c45405 \
+ --hash=sha256:16a01dfb7b9e4eee556fbfd5392806b1b8550c9b4a9f6acd3dbe6812b193c70a \
+ --hash=sha256:213db2b2e44be8625002dbea33bb9c60c66ea2c07c084a00d55732689d697a7f \
+ --hash=sha256:466297bd73638c6bdf06485683e812db1c00c7ac96d4ddd0294a338c62fdc154 \
+ --hash=sha256:4bb98fcbbc61725968893682fd4df8966a34611239c9fd07a1f6a07e7103d08e \
+ --hash=sha256:59aabd2e2c4fd614d2862e7939c34a532c04f1084476d6833dddef4afab87e9f \
+ --hash=sha256:5bcf45b681e9f1ee6445d317ce1fa9d6cba9a6049542d1c3d5b5958986be8830 \
+ --hash=sha256:674f9be9372907f7257c51f1d4fc902cb7cf014b9980152b802794317941f08f \
+ --hash=sha256:6987ebe0501ae4f4308d7d24e2d0fe3d7a98430f5adfd0f1fead050a740a3a77 \
+ --hash=sha256:7165d31a925b7a294465fa81be8c12a0e9b60fb02bf177e79067c867e71f8b1f \
+ --hash=sha256:7a3ce585f2ade3e1f29ec1b92df13e3da262178df8c8bdf876f48fa0e8316c49 \
+ --hash=sha256:9a2e830f075d1a42cd28420d7809ace390832a490ed0966fe373ba288e77aaf4 \
+ --hash=sha256:b914c40ab64865a17a9a5b67911d14df72346a634527240039eb3bd650e5979d \
+ --hash=sha256:c561695675b972effb0c0a45db233f2c816ff3da8dcfbe7dfc7eed625f218935 \
+ --hash=sha256:c70427132db492d25f982fffc8d6c7535cc2fd2c83fc8888f05caaa248521e60 \
+ --hash=sha256:d85713d522348837ef9df8efca33ccb8bd6fcfc86a2cde3ccb4bc9d28a18003d \
+ --hash=sha256:e51d046cf6dda98a4633b8a8a771451107413b0f07183b2bef03f075599e44e6 \
+ --hash=sha256:f24b47993a9d8cb858429e97bdf8544c78029f09b520af615c1d261bf827001d
# via feast (setup.py)
s3transfer==0.13.1 \
--hash=sha256:a981aa7429be23fe6dfc13e80e4020057cbab622b08c0315288758d67cabc724 \
@@ -5171,9 +5171,9 @@ sortedcontainers==2.4.0 \
--hash=sha256:25caa5a06cc30b6b83d11423433f65d1f9d76c4c6a0c90e3379eaa43b9bfdb88 \
--hash=sha256:a163dcaede0f1c021485e957a39245190e74249897e2ae4b2aa38595db237ee0
# via snowflake-connector-python
-soupsieve==2.8 \
- --hash=sha256:0cc76456a30e20f5d7f2e14a98a4ae2ee4e5abdc7c5ea0aafe795f344bc7984c \
- --hash=sha256:e2dd4a40a628cb5f28f6d4b0db8800b8f581b65bb380b97de22ba5ca8d72572f
+soupsieve==2.8.1 \
+ --hash=sha256:4cf733bc50fa805f5df4b8ef4740fc0e0fa6218cf3006269afd3f9d6d80fd350 \
+ --hash=sha256:a11fe2a6f3d76ab3cf2de04eb339c1be5b506a8a47f2ceb6d139803177f85434
# via beautifulsoup4
sphinx==6.2.1 \
--hash=sha256:6d56a34697bb749ffa0152feafc4b19836c755d90a7c59b72bc7dfd371b9cc6b \
@@ -5215,12 +5215,14 @@ sqlalchemy[mypy]==2.0.45 \
--hash=sha256:1d8b4a7a8c9b537509d56d5cd10ecdcfbb95912d72480c8861524efecc6a3fff \
--hash=sha256:215f0528b914e5c75ef2559f69dca86878a3beeb0c1be7279d77f18e8d180ed4 \
--hash=sha256:2c0b74aa79e2deade948fe8593654c8ef4228c44ba862bb7c9585c8e0db90f33 \
+ --hash=sha256:2e90a344c644a4fa871eb01809c32096487928bd2038bf10f3e4515cb688cc56 \
--hash=sha256:3c5f76216e7b85770d5bb5130ddd11ee89f4d52b11783674a662c7dd57018177 \
--hash=sha256:470daea2c1ce73910f08caf10575676a37159a6d16c4da33d0033546bddebc9b \
--hash=sha256:4748601c8ea959e37e03d13dcda4a44837afcd1b21338e637f7c935b8da06177 \
--hash=sha256:4b6bec67ca45bc166c8729910bd2a87f1c0407ee955df110d78948f5b5827e8a \
--hash=sha256:5225a288e4c8cc2308dbdd874edad6e7d0fd38eac1e9e5f23503425c8eee20d0 \
--hash=sha256:56ead1f8dfb91a54a28cd1d072c74b3d635bcffbd25e50786533b822d4f2cde2 \
+ --hash=sha256:5964f832431b7cdfaaa22a660b4c7eb1dfcd6ed41375f67fd3e3440fd95cb3cc \
--hash=sha256:59a8b8bd9c6bedf81ad07c8bd5543eedca55fe9b8780b2b628d495ba55f8db1e \
--hash=sha256:672c45cae53ba88e0dad74b9027dddd09ef6f441e927786b05bec75d949fbb2e \
--hash=sha256:6d0beadc2535157070c9c17ecf25ecec31e13c229a8f69196d7590bde8082bf1 \
@@ -5239,7 +5241,9 @@ sqlalchemy[mypy]==2.0.45 \
--hash=sha256:b8c8b41b97fba5f62349aa285654230296829672fc9939cd7f35aab246d1c08b \
--hash=sha256:ba547ac0b361ab4f1608afbc8432db669bd0819b3e12e29fb5fa9529a8bba81d \
--hash=sha256:c1c2091b1489435ff85728fafeb990f073e64f6f5e81d5cd53059773e8521eb6 \
+ --hash=sha256:c64772786d9eee72d4d3784c28f0a636af5b0a29f3fe26ff11f55efe90c0bd85 \
--hash=sha256:cd337d3526ec5298f67d6a30bbbe4ed7e5e68862f0bf6dd21d289f8d37b7d60b \
+ --hash=sha256:d29b2b99d527dbc66dd87c3c3248a5dd789d974a507f4653c969999fc7c1191b \
--hash=sha256:d2c3684fca8a05f0ac1d9a21c1f4a266983a7ea9180efb80ffeb03861ecd01a0 \
--hash=sha256:d62e47f5d8a50099b17e2bfc1b0c7d7ecd8ba6b46b1507b58cc4f05eefc3bb1c \
--hash=sha256:d8a2ca754e5415cde2b656c27900b19d50ba076aa05ce66e2207623d3fe41f5a \
@@ -5333,9 +5337,9 @@ sqlparams==6.2.0 \
--hash=sha256:3744a2ad16f71293db6505b21fd5229b4757489a9b09f3553656a1ae97ba7ca5 \
--hash=sha256:63b32ed9051bdc52e7e8b38bc4f78aed51796cdd9135e730f4c6a7db1048dedf
# via singlestoredb
-sse-starlette==3.0.3 \
- --hash=sha256:88cfb08747e16200ea990c8ca876b03910a23b547ab3bd764c0d8eb81019b971 \
- --hash=sha256:af5bf5a6f3933df1d9c7f8539633dc8444ca6a97ab2e2a7cd3b6e431ac03a431
+sse-starlette==3.1.1 \
+ --hash=sha256:bb38f71ae74cfd86b529907a9fda5632195dfa6ae120f214ea4c890c7ee9d436 \
+ --hash=sha256:bffa531420c1793ab224f63648c059bcadc412bf9fdb1301ac8de1cf9a67b7fb
# via mcp
stack-data==0.6.3 \
--hash=sha256:836a778de4fec4dcd1dcd89ed8abff8a221f58308462e1c4aa2a3cf30148f0b9 \
@@ -5347,6 +5351,7 @@ starlette==0.50.0 \
# via
# fastapi
# mcp
+ # sse-starlette
substrait==0.24.2 \
--hash=sha256:743cc352e96b0927b2cd37cd5a8fdac0a96a68df9600bd104fc36aebd222a836 \
--hash=sha256:d1d475833566fa9d67eed3273456883c0568486ccced92b524b31709d2817e19
@@ -5616,19 +5621,19 @@ torchvision==0.24.1 \
# docling-ibm-models
# easyocr
# timm
-tornado==6.5.2 \
- --hash=sha256:06ceb1300fd70cb20e43b1ad8aaee0266e69e7ced38fa910ad2e03285009ce7c \
- --hash=sha256:2436822940d37cde62771cff8774f4f00b3c8024fe482e16ca8387b8a2724db6 \
- --hash=sha256:583a52c7aa94ee046854ba81d9ebb6c81ec0fd30386d96f7640c96dad45a03ef \
- --hash=sha256:74db443e0f5251be86cbf37929f84d8c20c27a355dd452a5cfa2aada0d001ec4 \
- --hash=sha256:ab53c8f9a0fa351e2c0741284e06c7a45da86afb544133201c5cc8578eb076a0 \
- --hash=sha256:b0fe179f28d597deab2842b86ed4060deec7388f1fd9c1b4a41adf8af058907e \
- --hash=sha256:b186e85d1e3536d69583d2298423744740986018e393d0321df7340e71898882 \
- --hash=sha256:b5e735ab2889d7ed33b32a459cac490eda71a1ba6857b0118de476ab6c366c04 \
- --hash=sha256:c6f29e94d9b37a95013bb669616352ddb82e3bfe8326fccee50583caebc8a5f0 \
- --hash=sha256:d6c33dc3672e3a1f3618eb63b7ef4683a7688e7b9e6e8f0d9aa5726360a004af \
- --hash=sha256:e56a5af51cc30dd2cae649429af65ca2f6571da29504a07995175df14c18f35f \
- --hash=sha256:e792706668c87709709c18b353da1f7662317b563ff69f00bab83595940c7108
+tornado==6.5.4 \
+ --hash=sha256:053e6e16701eb6cbe641f308f4c1a9541f91b6261991160391bfc342e8a551a1 \
+ --hash=sha256:1768110f2411d5cd281bac0a090f707223ce77fd110424361092859e089b38d1 \
+ --hash=sha256:2d50f63dda1d2cac3ae1fa23d254e16b5e38153758470e9956cbc3d813d40843 \
+ --hash=sha256:50ff0a58b0dc97939d29da29cd624da010e7f804746621c78d14b80238669335 \
+ --hash=sha256:6076d5dda368c9328ff41ab5d9dd3608e695e8225d1cd0fd1e006f05da3635a8 \
+ --hash=sha256:6eb82872335a53dd063a4f10917b3efd28270b56a33db69009606a0312660a6f \
+ --hash=sha256:9c86b1643b33a4cd415f8d0fe53045f913bf07b4a3ef646b735a6a86047dda84 \
+ --hash=sha256:a22fa9047405d03260b483980635f0b041989d8bcc9a313f8fe18b411d84b1d7 \
+ --hash=sha256:d1cf66105dc6acb5af613c054955b8137e34a03698aa53272dbda4afe252be17 \
+ --hash=sha256:d6241c1a16b1c9e4cc28148b1cda97dd1c6cb4fb7068ac1bedc610768dff0ba9 \
+ --hash=sha256:e5fb5e04efa54cf0baabdd10061eb4148e0be137166146fff835745f59ab9f7f \
+ --hash=sha256:fa07d31e0cd85c60713f2b995da613588aa03e1303d75705dca6af8babc18ddc
# via
# ipykernel
# jupyter-client
@@ -5788,9 +5793,9 @@ types-protobuf==3.19.22 \
# via
# feast (setup.py)
# mypy-protobuf
-types-pymysql==1.1.0.20250916 \
- --hash=sha256:873eb9836bb5e3de4368cc7010ca72775f86e9692a5c7810f8c7f48da082e55b \
- --hash=sha256:98d75731795fcc06723a192786662bdfa760e1e00f22809c104fbb47bac5e29b
+types-pymysql==1.1.0.20251220 \
+ --hash=sha256:ae1c3df32a777489431e2e9963880a0df48f6591e0aa2fd3a6fabd9dee6eca54 \
+ --hash=sha256:fa1082af7dea6c53b6caa5784241924b1296ea3a8d3bd060417352c5e10c0618
# via feast (setup.py)
types-pyopenssl==24.1.0.20240722 \
--hash=sha256:47913b4678a01d879f503a12044468221ed8576263c1540dcb0484ca21b08c39 \
@@ -5816,9 +5821,9 @@ types-requests==2.30.0.0 \
--hash=sha256:c6cf08e120ca9f0dc4fa4e32c3f953c3fba222bcc1db6b97695bce8da1ba9864 \
--hash=sha256:dec781054324a70ba64430ae9e62e7e9c8e4618c185a5cb3f87a6738251b5a31
# via feast (setup.py)
-types-setuptools==80.9.0.20250822 \
- --hash=sha256:070ea7716968ec67a84c7f7768d9952ff24d28b65b6594797a464f1b3066f965 \
- --hash=sha256:53bf881cb9d7e46ed12c76ef76c0aaf28cfe6211d3fab12e0b83620b1a8642c3
+types-setuptools==80.9.0.20251223 \
+ --hash=sha256:1b36db79d724c2287d83dc052cf887b47c0da6a2fff044378be0b019545f56e6 \
+ --hash=sha256:d3411059ae2f5f03985217d86ac6084efea2c9e9cacd5f0869ef950f308169b2
# via
# feast (setup.py)
# types-cffi
@@ -5881,9 +5886,9 @@ typing-inspection==0.4.2 \
# mcp
# pydantic
# pydantic-settings
-tzdata==2025.2 \
- --hash=sha256:1a403fada01ff9221ca8044d701868fa132215d84beb92242d9acd2147f667a8 \
- --hash=sha256:b60a638fcc0daffadf82fe0f57e53d06bdec2f36c4df66280ae79bce6bd6f2b9
+tzdata==2025.3 \
+ --hash=sha256:06a47e5700f3081aab02b2e513160914ff0694bce9947d6b76ebd6bf57cfc5d1 \
+ --hash=sha256:de39c2ca5dc7b0344f2eba86f49d614019d29f060fc4ebc8a417896a620b56a7
# via
# arrow
# pandas
@@ -5983,9 +5988,9 @@ uri-template==1.3.0 \
--hash=sha256:0e00f8eb65e18c7de20d595a14336e9f337ead580c70934141624b6d1ffdacc7 \
--hash=sha256:a44a133ea12d44a0c0f06d7d42a52d71282e77e2f937d8abd5655b8d56fc1363
# via jsonschema
-urllib3==2.6.1 \
- --hash=sha256:5379eb6e1aba4088bae84f8242960017ec8d8e3decf30480b3a1abdaa9671a3f \
- --hash=sha256:e67d06fe947c36a7ca39f4994b08d73922d40e6cca949907be05efa6fd75110b
+urllib3==2.6.2 \
+ --hash=sha256:016f9c98bb7e98085cb2b4b17b87d2c702975664e4f060c6532e64d1c1a5e797 \
+ --hash=sha256:ec21cddfe7724fc7cb4ba4bea7aa8e2ef36f607a4bab81aa6ce42a13dc3f03dd
# via
# feast (setup.py)
# botocore
diff --git a/sdk/python/requirements/py3.10-minimal-requirements.txt b/sdk/python/requirements/py3.10-minimal-requirements.txt
index 947efc21837..66d34c10570 100644
--- a/sdk/python/requirements/py3.10-minimal-requirements.txt
+++ b/sdk/python/requirements/py3.10-minimal-requirements.txt
@@ -176,9 +176,9 @@ attrs==25.4.0 \
# aiohttp
# jsonschema
# referencing
-bigtree==1.0.3 \
- --hash=sha256:18402a143130868b17ca84a74ca263e6f32f046d6978c30d244f8b94c4a01227 \
- --hash=sha256:99a18b6937a9b4ab8e560fec5c0720e10ebf37f84e44f9b5f47702c2e84c9aaa
+bigtree==1.0.4 \
+ --hash=sha256:e4af0c5bc0d2cd72e18442965e4509f642b16a0de65db6d0ec116e30f959010c \
+ --hash=sha256:f58a3238bb9b1142d893c9de4921bfd18d435427c75e0c168dd580eabf6dc7fd
# via feast (setup.py)
boto3==1.38.27 \
--hash=sha256:94bd7fdd92d5701b362d4df100d21e28f8307a67ff56b6a8b0398119cf22f859 \
@@ -194,9 +194,9 @@ botocore==1.38.46 \
# boto3
# s3transfer
# snowflake-connector-python
-cachetools==6.2.2 \
- --hash=sha256:6c09c98183bf58560c97b2abfcedcbaf6a896a490f534b031b661d3723b45ace \
- --hash=sha256:8e6d266b25e539df852251cfd6f990b4bc3a141db73b939058d809ebd2590fc6
+cachetools==6.2.4 \
+ --hash=sha256:69a7a52634fed8b8bf6e24a050fb60bff1c9bd8f6d24572b99c32d4e71e62a51 \
+ --hash=sha256:82c5c05585e70b6ba2d3ae09ea60b79548872185d2f24ae1f2709d37299fd607
# via google-auth
certifi==2025.11.12 \
--hash=sha256:97de8790030bbd5c2d96b7ec782fc2f7820ef8dba6db909ccf95449f2d062d4b \
@@ -471,13 +471,13 @@ cryptography==46.0.0 \
# pyjwt
# pyopenssl
# snowflake-connector-python
-dask[dataframe]==2025.11.0 \
- --hash=sha256:08c35a8146c05c93b34f83cf651009129c42ee71762da7ca452fb7308641c2b8 \
- --hash=sha256:23d59e624b80ee05b7cc8df858682cca58262c4c3b197ccf61da0f6543c8f7c3
+dask[dataframe]==2025.12.0 \
+ --hash=sha256:4213ce9c5d51d6d89337cff69de35d902aa0bf6abdb8a25c942a4d0281f3a598 \
+ --hash=sha256:8d478f2aabd025e2453cf733ad64559de90cf328c20209e4574e9543707c3e1b
# via feast (setup.py)
-db-dtypes==1.4.4 \
- --hash=sha256:26f53db5df1acd746b88c5647913a1b20f731c0af1b11abcb6bec5365f31098a \
- --hash=sha256:32c13039982656a8598a0835f25f0e07e34c9a423e471ee60c2553240b7fcf1e
+db-dtypes==1.5.0 \
+ --hash=sha256:abdbb2e4eb965800ed6f98af0c5c1cafff9063ace09114be2d26a7f046be2c8a \
+ --hash=sha256:ad9e94243f53e104bc77dbf9ae44b580d83a770d3694483aba59c9767966daa5
# via
# google-cloud-bigquery
# pandas-gbq
@@ -547,9 +547,9 @@ exceptiongroup==1.3.1 \
--hash=sha256:8b412432c6055b0b7d14c310000ae93352ed6754f70fa8f7c34141f91c4e3219 \
--hash=sha256:a7a39a3bd276781e98394987d3a5701d0c4edffb633bb7a5144577f82c773598
# via anyio
-fastapi==0.124.0 \
- --hash=sha256:260cd178ad75e6d259991f2fd9b0fee924b224850079df576a3ba604ce58f4e6 \
- --hash=sha256:91596bdc6dde303c318f06e8d2bc75eafb341fc793a0c9c92c0bc1db1ac52480
+fastapi==0.128.0 \
+ --hash=sha256:1cc179e1cef10a6be60ffe429f79b829dce99d8de32d7acb7e6c8dfdf7f2645a \
+ --hash=sha256:aebd93f9716ee3b4f4fcfe13ffb7cf308d99c9f3ab5622d8877441072561582d
# via
# feast (setup.py)
# fastapi-mcp
@@ -557,9 +557,9 @@ fastapi-mcp==0.4.0 \
--hash=sha256:d4a3fe7966af24d44e4b412720561c95eb12bed999a4443a88221834b3b15aec \
--hash=sha256:d4ca9410996f4c7b8ea0d7b20fdf79878dc359ebf89cbf3b222e0b675a55097d
# via feast (setup.py)
-filelock==3.20.0 \
- --hash=sha256:339b4732ffda5cd79b13f4e2711a31b0365ce445d95d243bb996273d072546a2 \
- --hash=sha256:711e943b4ec6be42e1d4e6690b48dc175c822967466bb31c0c293f34334c13f4
+filelock==3.20.1 \
+ --hash=sha256:15d9e9a67306188a44baa72f569d2bfd803076269365fdea0934385da4dc361a \
+ --hash=sha256:b8360948b351b80f420878d8516519a2204b07aefcdcfd24912a5d33127f188c
# via snowflake-connector-python
frozenlist==1.8.0 \
--hash=sha256:0325024fe97f94c41c08872db482cf8ac4800d80e79222c6b0b7b162d5b13686 \
@@ -713,9 +713,9 @@ google-api-core[grpc]==2.28.1 \
# google-cloud-datastore
# google-cloud-storage
# pandas-gbq
-google-auth==2.43.0 \
- --hash=sha256:88228eee5fc21b62a1b5fe773ca15e67778cb07dc8363adcb4a8827b52d81483 \
- --hash=sha256:af628ba6fa493f75c7e9dbe9373d148ca9f4399b5ea29976519e0a3848eddd16
+google-auth==2.45.0 \
+ --hash=sha256:82344e86dc00410ef5382d99be677c6043d72e502b625aa4f4afa0bdacca0f36 \
+ --hash=sha256:90d3f41b6b72ea72dd9811e765699ee491ab24139f34ebf1ca2b9cc0c38708f3
# via
# google-api-core
# google-auth-oauthlib
@@ -734,19 +734,19 @@ google-auth-oauthlib==1.2.2 \
# via
# pandas-gbq
# pydata-google-auth
-google-cloud-bigquery[pandas]==3.38.0 \
- --hash=sha256:8afcb7116f5eac849097a344eb8bfda78b7cfaae128e60e019193dd483873520 \
- --hash=sha256:e06e93ff7b245b239945ef59cb59616057598d369edac457ebf292bd61984da6
+google-cloud-bigquery[pandas]==3.39.0 \
+ --hash=sha256:cb375e1d63dea9bd5bf735e66024338f294159d43afdf63e1d023f5fcbbf55ea \
+ --hash=sha256:dc7a64921465859105461b43c42562e38e797d7a73feb72b3cfc4865b7b1c5ef
# via
# feast (setup.py)
# pandas-gbq
-google-cloud-bigquery-storage==2.35.0 \
- --hash=sha256:c9bab6b8e41d6cb9806e589e65f320c89ada84f466e61566b7208d87924c1430 \
- --hash=sha256:f2e3a08882155de1e9ec53c71c5784eb1f25dc6514c535f5796c3c9eeac17d17
+google-cloud-bigquery-storage==2.36.0 \
+ --hash=sha256:1769e568070db672302771d2aec18341de10712aa9c4a8c549f417503e0149f0 \
+ --hash=sha256:d3c1ce9d2d3a4d7116259889dcbe3c7c70506f71f6ce6bbe54aa0a68bbba8f8f
# via feast (setup.py)
-google-cloud-bigtable==2.34.0 \
- --hash=sha256:773258b00cd3f9a3a35639cc38bd711f4f1418aaa0c8d70cb028978ed98dc2c2 \
- --hash=sha256:a4a8db4903840cd3f89fb19c060eea2e7c09c1265cb0538cfc11288dbc6000e4
+google-cloud-bigtable==2.35.0 \
+ --hash=sha256:f355bfce1f239453ec2bb3839b0f4f9937cf34ef06ef29e1ca63d58fd38d0c50 \
+ --hash=sha256:f5699012c5fea4bd4bdf7e80e5e3a812a847eb8f41bf8dc2f43095d6d876b83b
# via feast (setup.py)
google-cloud-core==2.5.0 \
--hash=sha256:67d977b41ae6c7211ee830c7912e41003ea8194bff15ae7d72fd6f51e57acabc \
@@ -756,49 +756,48 @@ google-cloud-core==2.5.0 \
# google-cloud-bigtable
# google-cloud-datastore
# google-cloud-storage
-google-cloud-datastore==2.21.0 \
- --hash=sha256:eee454dd4a55f5b327f9f344928ff1a09a6f77c23d5e3d908ad31a13cc2f4073 \
- --hash=sha256:f303f27cd1983383f20bd227019cd8a7897419e0ec6b878367c58c66245f9d9b
+google-cloud-datastore==2.23.0 \
+ --hash=sha256:24a1b1d29b902148fe41b109699f76fd3aa60591e9d547c0f8b87d7bf9ff213f \
+ --hash=sha256:80049883a4ae928fdcc661ba6803ec267665dc0e6f3ce2da91441079a6bb6387
# via feast (setup.py)
google-cloud-storage==2.19.0 \
--hash=sha256:aeb971b5c29cf8ab98445082cbfe7b161a1f48ed275822f59ed3f1524ea54fba \
--hash=sha256:cd05e9e7191ba6cb68934d8eb76054d9be4562aa89dbc4236feee4d7d51342b2
# via feast (setup.py)
-google-crc32c==1.7.1 \
- --hash=sha256:0f99eaa09a9a7e642a61e06742856eec8b19fc0037832e03f941fe7cf0c8e4db \
- --hash=sha256:19eafa0e4af11b0a4eb3974483d55d2d77ad1911e6cf6f832e1574f6781fd337 \
- --hash=sha256:1c67ca0a1f5b56162951a9dae987988679a7db682d6f97ce0f6381ebf0fbea4c \
- --hash=sha256:1f2b3522222746fff0e04a9bd0a23ea003ba3cccc8cf21385c564deb1f223242 \
- --hash=sha256:22beacf83baaf59f9d3ab2bbb4db0fb018da8e5aebdce07ef9f09fce8220285e \
- --hash=sha256:2bff2305f98846f3e825dbeec9ee406f89da7962accdb29356e4eadc251bd472 \
- --hash=sha256:2d73a68a653c57281401871dd4aeebbb6af3191dcac751a76ce430df4d403194 \
- --hash=sha256:32d1da0d74ec5634a05f53ef7df18fc646666a25efaaca9fc7dcfd4caf1d98c3 \
- --hash=sha256:3bda0fcb632d390e3ea8b6b07bf6b4f4a66c9d02dcd6fbf7ba00a197c143f582 \
- --hash=sha256:6335de12921f06e1f774d0dd1fbea6bf610abe0887a1638f64d694013138be5d \
- --hash=sha256:6b211ddaf20f7ebeec5c333448582c224a7c90a9d98826fbab82c0ddc11348e6 \
- --hash=sha256:6efb97eb4369d52593ad6f75e7e10d053cf00c48983f7a973105bc70b0ac4d82 \
- --hash=sha256:6fbab4b935989e2c3610371963ba1b86afb09537fd0c633049be82afe153ac06 \
- --hash=sha256:713121af19f1a617054c41f952294764e0c5443d5a5d9034b2cd60f5dd7e0349 \
- --hash=sha256:754561c6c66e89d55754106739e22fdaa93fafa8da7221b29c8b8e8270c6ec8a \
- --hash=sha256:7cc81b3a2fbd932a4313eb53cc7d9dde424088ca3a0337160f35d91826880c1d \
- --hash=sha256:85fef7fae11494e747c9fd1359a527e5970fc9603c90764843caabd3a16a0a48 \
- --hash=sha256:905a385140bf492ac300026717af339790921f411c0dfd9aa5a9e69a08ed32eb \
- --hash=sha256:9fc196f0b8d8bd2789352c6a522db03f89e83a0ed6b64315923c396d7a932315 \
- --hash=sha256:a8e9afc74168b0b2232fb32dd202c93e46b7d5e4bf03e66ba5dc273bb3559589 \
- --hash=sha256:b07d48faf8292b4db7c3d64ab86f950c2e94e93a11fd47271c28ba458e4a0d76 \
- --hash=sha256:b6d86616faaea68101195c6bdc40c494e4d76f41e07a37ffdef270879c15fb65 \
- --hash=sha256:b7491bdc0c7564fcf48c0179d2048ab2f7c7ba36b84ccd3a3e1c3f7a72d3bba6 \
- --hash=sha256:bb5e35dcd8552f76eed9461a23de1030920a3c953c1982f324be8f97946e7127 \
- --hash=sha256:d68e17bad8f7dd9a49181a1f5a8f4b251c6dbc8cc96fb79f1d321dfd57d66f53 \
- --hash=sha256:dcdf5a64adb747610140572ed18d011896e3b9ae5195f2514b7ff678c80f1603 \
- --hash=sha256:df8b38bdaf1629d62d51be8bdd04888f37c451564c2042d36e5812da9eff3c35 \
- --hash=sha256:e10554d4abc5238823112c2ad7e4560f96c7bf3820b202660373d769d9e6e4c9 \
- --hash=sha256:e42e20a83a29aa2709a0cf271c7f8aefaa23b7ab52e53b322585297bb94d4638 \
- --hash=sha256:ed66cbe1ed9cbaaad9392b5259b3eba4a9e565420d734e6238813c428c3336c9 \
- --hash=sha256:ee6547b657621b6cbed3562ea7826c3e11cab01cd33b74e1f677690652883e77 \
- --hash=sha256:f2226b6a8da04f1d9e61d3e357f2460b9551c5e6950071437e122c958a18ae14 \
- --hash=sha256:fa8136cc14dd27f34a3221c0f16fd42d8a40e4778273e61a3c19aedaa44daf6b \
- --hash=sha256:fc5319db92daa516b653600794d5b9f9439a9a121f3e162f94b0e1891c7933cb
+google-crc32c==1.8.0 \
+ --hash=sha256:014a7e68d623e9a4222d663931febc3033c5c7c9730785727de2a81f87d5bab8 \
+ --hash=sha256:01f126a5cfddc378290de52095e2c7052be2ba7656a9f0caf4bcd1bfb1833f8a \
+ --hash=sha256:0470b8c3d73b5f4e3300165498e4cf25221c7eb37f1159e221d1825b6df8a7ff \
+ --hash=sha256:119fcd90c57c89f30040b47c211acee231b25a45d225e3225294386f5d258288 \
+ --hash=sha256:14f87e04d613dfa218d6135e81b78272c3b904e2a7053b841481b38a7d901411 \
+ --hash=sha256:17446feb05abddc187e5441a45971b8394ea4c1b6efd88ab0af393fd9e0a156a \
+ --hash=sha256:19b40d637a54cb71e0829179f6cb41835f0fbd9e8eb60552152a8b52c36cbe15 \
+ --hash=sha256:2a3dc3318507de089c5384cc74d54318401410f82aa65b2d9cdde9d297aca7cb \
+ --hash=sha256:3b9776774b24ba76831609ffbabce8cdf6fa2bd5e9df37b594221c7e333a81fa \
+ --hash=sha256:3cc0c8912038065eafa603b238abf252e204accab2a704c63b9e14837a854962 \
+ --hash=sha256:3d488e98b18809f5e322978d4506373599c0c13e6c5ad13e53bb44758e18d215 \
+ --hash=sha256:3ebb04528e83b2634857f43f9bb8ef5b2bbe7f10f140daeb01b58f972d04736b \
+ --hash=sha256:450dc98429d3e33ed2926fc99ee81001928d63460f8538f21a5d6060912a8e27 \
+ --hash=sha256:4b8286b659c1335172e39563ab0a768b8015e88e08329fa5321f774275fc3113 \
+ --hash=sha256:57a50a9035b75643996fbf224d6661e386c7162d1dfdab9bc4ca790947d1007f \
+ --hash=sha256:61f58b28e0b21fcb249a8247ad0db2e64114e201e2e9b4200af020f3b6242c9f \
+ --hash=sha256:6f35aaffc8ccd81ba3162443fabb920e65b1f20ab1952a31b13173a67811467d \
+ --hash=sha256:71734788a88f551fbd6a97be9668a0020698e07b2bf5b3aa26a36c10cdfb27b2 \
+ --hash=sha256:864abafe7d6e2c4c66395c1eb0fe12dc891879769b52a3d56499612ca93b6092 \
+ --hash=sha256:86cfc00fe45a0ac7359e5214a1704e51a99e757d0272554874f419f79838c5f7 \
+ --hash=sha256:87b0072c4ecc9505cfa16ee734b00cd7721d20a0f595be4d40d3d21b41f65ae2 \
+ --hash=sha256:87fa445064e7db928226b2e6f0d5304ab4cd0339e664a4e9a25029f384d9bb93 \
+ --hash=sha256:89c17d53d75562edfff86679244830599ee0a48efc216200691de8b02ab6b2b8 \
+ --hash=sha256:8b3f68782f3cbd1bce027e48768293072813469af6a61a86f6bb4977a4380f21 \
+ --hash=sha256:a428e25fb7691024de47fecfbff7ff957214da51eddded0da0ae0e0f03a2cf79 \
+ --hash=sha256:b0d1a7afc6e8e4635564ba8aa5c0548e3173e41b6384d7711a9123165f582de2 \
+ --hash=sha256:ba6aba18daf4d36ad4412feede6221414692f44d17e5428bdd81ad3fc1eee5dc \
+ --hash=sha256:cb5c869c2923d56cb0c8e6bcdd73c009c36ae39b652dbe46a05eb4ef0ad01454 \
+ --hash=sha256:d511b3153e7011a27ab6ee6bb3a5404a55b994dc1a7322c0b87b29606d9790e2 \
+ --hash=sha256:db3fe8eaf0612fc8b20fa21a5f25bd785bc3cd5be69f8f3412b0ac2ffd49e733 \
+ --hash=sha256:e6584b12cb06796d285d09e33f63309a09368b9d806a551d8036a4207ea43697 \
+ --hash=sha256:f4b51844ef67d6cf2e9425983274da75f18b1597bb2c998e1c0a0e8d46f8f651 \
+ --hash=sha256:f639065ea2042d5c034bf258a9f085eaa7af0cd250667c0635a3118e8f92c69c
# via
# google-cloud-bigtable
# google-cloud-storage
@@ -881,6 +880,7 @@ grpcio==1.62.3 \
# google-api-core
# google-cloud-bigquery
# google-cloud-bigquery-storage
+ # google-cloud-datastore
# googleapis-common-protos
# grpc-google-iam-v1
# grpcio-health-checking
@@ -1079,9 +1079,9 @@ idna==3.11 \
# requests
# snowflake-connector-python
# yarl
-importlib-metadata==8.7.0 \
- --hash=sha256:d13b81ad223b890aa16c5471f2ac3056cf76c5f10f82d6f9292f0b415f389000 \
- --hash=sha256:e5dd1551894c77868a30651cef00984d50e1002d06942a7101d34870c5f02afd
+importlib-metadata==8.7.1 \
+ --hash=sha256:49fef1ae6440c182052f407c8d34a68f72efc36db9ca90dc0113398f2fdde8bb \
+ --hash=sha256:5a1f80bf1daa489495071efbb095d75a634cf28a8bc299581244063b53176151
# via dask
jinja2==3.1.6 \
--hash=sha256:0137fb05990d35f1275a587e9aee6d56da821fc83491a0fb838183be43f66d6d \
@@ -1108,83 +1108,83 @@ kubernetes==33.1.0 \
--hash=sha256:544de42b24b64287f7e0aa9513c93cb503f7f40eea39b20f66810011a86eabc5 \
--hash=sha256:f64d829843a54c251061a8e7a14523b521f2dc5c896cf6d65ccf348648a88993
# via feast (setup.py)
-librt==0.7.3 \
- --hash=sha256:020c6db391268bcc8ce75105cb572df8cb659a43fd347366aaa407c366e5117a \
- --hash=sha256:0fa9ac2e49a6bee56e47573a6786cb635e128a7b12a0dc7851090037c0d397a3 \
- --hash=sha256:11ad45122bbed42cfc8b0597450660126ef28fd2d9ae1a219bc5af8406f95678 \
- --hash=sha256:120dd21d46ff875e849f1aae19346223cf15656be489242fe884036b23d39e93 \
- --hash=sha256:14569ac5dd38cfccf0a14597a88038fb16811a6fede25c67b79c6d50fc2c8fdc \
- --hash=sha256:1617bea5ab31266e152871208502ee943cb349c224846928a1173c864261375e \
- --hash=sha256:170cdb8436188347af17bf9cccf3249ba581c933ed56d926497119d4cf730cec \
- --hash=sha256:1975eda520957c6e0eb52d12968dd3609ffb7eef05d4223d097893d6daf1d8a7 \
- --hash=sha256:1fe603877e1865b5fd047a5e40379509a4a60204aa7aa0f72b16f7a41c3f0712 \
- --hash=sha256:24d70810f6e2ea853ff79338001533716b373cc0f63e2a0be5bc96129edb5fb5 \
- --hash=sha256:256793988bff98040de23c57cf36e1f4c2f2dc3dcd17537cdac031d3b681db71 \
- --hash=sha256:25711f364c64cab2c910a0247e90b51421e45dbc8910ceeb4eac97a9e132fc6f \
- --hash=sha256:2682162855a708e3270eba4b92026b93f8257c3e65278b456c77631faf0f4f7a \
- --hash=sha256:2cf9d73499486ce39eebbff5f42452518cc1f88d8b7ea4a711ab32962b176ee2 \
- --hash=sha256:2e40520c37926166c24d0c2e0f3bc3a5f46646c34bdf7b4ea9747c297d6ee809 \
- --hash=sha256:2e980cf1ed1a2420a6424e2ed884629cdead291686f1048810a817de07b5eb18 \
- --hash=sha256:2f03484b54bf4ae80ab2e504a8d99d20d551bfe64a7ec91e218010b467d77093 \
- --hash=sha256:35f1609e3484a649bb80431310ddbec81114cd86648f1d9482bc72a3b86ded2e \
- --hash=sha256:399938edbd3d78339f797d685142dd8a623dfaded023cf451033c85955e4838a \
- --hash=sha256:399bbd7bcc1633c3e356ae274a1deb8781c7bf84d9c7962cc1ae0c6e87837292 \
- --hash=sha256:3ec50cf65235ff5c02c5b747748d9222e564ad48597122a361269dd3aa808798 \
- --hash=sha256:3edbf257c40d21a42615e9e332a6b10a8bacaaf58250aed8552a14a70efd0d65 \
- --hash=sha256:440c788f707c061d237c1e83edf6164ff19f5c0f823a3bf054e88804ebf971ec \
- --hash=sha256:44b3689b040df57f492e02cd4f0bacd1b42c5400e4b8048160c9d5e866de8abe \
- --hash=sha256:4887c29cadbdc50640179e3861c276325ff2986791e6044f73136e6e798ff806 \
- --hash=sha256:5460d99ed30f043595bbdc888f542bad2caeb6226b01c33cda3ae444e8f82d42 \
- --hash=sha256:550fdbfbf5bba6a2960b27376ca76d6aaa2bd4b1a06c4255edd8520c306fcfc0 \
- --hash=sha256:56f2a47beda8409061bc1c865bef2d4bd9ff9255219402c0817e68ab5ad89aed \
- --hash=sha256:572a24fc5958c61431da456a0ef1eeea6b4989d81eeb18b8e5f1f3077592200b \
- --hash=sha256:59cb0470612d21fa1efddfa0dd710756b50d9c7fb6c1236bbf8ef8529331dc70 \
- --hash=sha256:6038ccbd5968325a5d6fd393cf6e00b622a8de545f0994b89dd0f748dcf3e19e \
- --hash=sha256:6488e69d408b492e08bfb68f20c4a899a354b4386a446ecd490baff8d0862720 \
- --hash=sha256:687403cced6a29590e6be6964463835315905221d797bc5c934a98750fe1a9af \
- --hash=sha256:6b407c23f16ccc36614c136251d6b32bf30de7a57f8e782378f1107be008ddb0 \
- --hash=sha256:6b4e7bff1d76dd2b46443078519dc75df1b5e01562345f0bb740cea5266d8218 \
- --hash=sha256:6bdd9adfca615903578d2060ee8a6eb1c24eaf54919ff0ddc820118e5718931b \
- --hash=sha256:6eb9295c730e26b849ed1f4022735f36863eb46b14b6e10604c1c39b8b5efaea \
- --hash=sha256:703456146dc2bf430f7832fd1341adac5c893ec3c1430194fdcefba00012555c \
- --hash=sha256:754a0d09997095ad764ccef050dd5bf26cbf457aab9effcba5890dad081d879e \
- --hash=sha256:7af7785f5edd1f418da09a8cdb9ec84b0213e23d597413e06525340bcce1ea4f \
- --hash=sha256:7b29e97273bd6999e2bfe9fe3531b1f4f64effd28327bced048a33e49b99674a \
- --hash=sha256:7b4f57f7a0c65821c5441d98c47ff7c01d359b1e12328219709bdd97fdd37f90 \
- --hash=sha256:8837d5a52a2d7aa9f4c3220a8484013aed1d8ad75240d9a75ede63709ef89055 \
- --hash=sha256:8ccadf260bb46a61b9c7e89e2218f6efea9f3eeaaab4e3d1f58571890e54858e \
- --hash=sha256:8d8cf653e798ee4c4e654062b633db36984a1572f68c3aa25e364a0ddfbbb910 \
- --hash=sha256:93b2a1f325fefa1482516ced160c8c7b4b8d53226763fa6c93d151fa25164207 \
- --hash=sha256:9f0e0927efe87cd42ad600628e595a1a0aa1c64f6d0b55f7e6059079a428641a \
- --hash=sha256:a59a69deeb458c858b8fea6acf9e2acd5d755d76cd81a655256bc65c20dfff5b \
- --hash=sha256:a9f9b661f82693eb56beb0605156c7fca57f535704ab91837405913417d6990b \
- --hash=sha256:abfc57cab3c53c4546aee31859ef06753bfc136c9d208129bad23e2eca39155a \
- --hash=sha256:aca73d70c3f553552ba9133d4a09e767dcfeee352d8d8d3eb3f77e38a3beb3ed \
- --hash=sha256:adeaa886d607fb02563c1f625cf2ee58778a2567c0c109378da8f17ec3076ad7 \
- --hash=sha256:b278a9248a4e3260fee3db7613772ca9ab6763a129d6d6f29555e2f9b168216d \
- --hash=sha256:b7c1239b64b70be7759554ad1a86288220bbb04d68518b527783c4ad3fb4f80b \
- --hash=sha256:bf8c7735fbfc0754111f00edda35cf9e98a8d478de6c47b04eaa9cef4300eaa7 \
- --hash=sha256:c634a0a6db395fdaba0361aa78395597ee72c3aad651b9a307a3a7eaf5efd67e \
- --hash=sha256:cad9971881e4fec00d96af7eaf4b63aa7a595696fc221808b0d3ce7ca9743258 \
- --hash=sha256:cbdb3f337c88b43c3b49ca377731912c101178be91cb5071aac48faa898e6f8e \
- --hash=sha256:cd8551aa21df6c60baa2624fd086ae7486bdde00c44097b32e1d1b1966e365e0 \
- --hash=sha256:d09f677693328503c9e492e33e9601464297c01f9ebd966ea8fc5308f3069bfd \
- --hash=sha256:d376a35c6561e81d2590506804b428fc1075fcc6298fc5bb49b771534c0ba010 \
- --hash=sha256:d39079379a9a28e74f4d57dc6357fa310a1977b51ff12239d7271ec7e71d67f5 \
- --hash=sha256:d86f94743a11873317094326456b23f8a5788bad9161fd2f0e52088c33564620 \
- --hash=sha256:d91e60ac44bbe3a77a67af4a4c13114cbe9f6d540337ce22f2c9eaf7454ca71f \
- --hash=sha256:d9883b2d819ce83f87ba82a746c81d14ada78784db431e57cc9719179847376e \
- --hash=sha256:e094e445c37c57e9ec612847812c301840239d34ccc5d153a982fa9814478c60 \
- --hash=sha256:e19acfde38cb532a560b98f473adc741c941b7a9bc90f7294bc273d08becb58b \
- --hash=sha256:e32d43610dff472eab939f4d7fbdd240d1667794192690433672ae22d7af8445 \
- --hash=sha256:ed028fc3d41adda916320712838aec289956c89b4f0a361ceadf83a53b4c047a \
- --hash=sha256:ef59c938f72bdbc6ab52dc50f81d0637fde0f194b02d636987cea2ab30f8f55a \
- --hash=sha256:f3d4801db8354436fd3936531e7f0e4feb411f62433a6b6cb32bb416e20b529f \
- --hash=sha256:f57aca20e637750a2c18d979f7096e2c2033cc40cf7ed201494318de1182f135 \
- --hash=sha256:f9da128d0edf990cf0d2ca011b02cd6f639e79286774bd5b0351245cbb5a6e51 \
- --hash=sha256:fbd7351d43b80d9c64c3cfcb50008f786cc82cba0450e8599fdd64f264320bd3 \
- --hash=sha256:fcb72249ac4ea81a7baefcbff74df7029c3cb1cf01a711113fa052d563639c9c \
- --hash=sha256:ff21c554304e8226bf80c3a7754be27c6c3549a9fec563a03c06ee8f494da8fc
+librt==0.7.5 \
+ --hash=sha256:060bde69c3604f694bd8ae21a780fe8be46bb3dbb863642e8dfc75c931ca8eee \
+ --hash=sha256:08153ea537609d11f774d2bfe84af39d50d5c9ca3a4d061d946e0c9d8bce04a1 \
+ --hash=sha256:0b4791202296ad51ac09a3ff58eb49d9da8e3a4009167a6d76ac418a974e5fd4 \
+ --hash=sha256:0b7f080ba30601dfa3e3deed3160352273e1b9bc92e652f51103c3e9298f7899 \
+ --hash=sha256:0e2bf8f91093fac43e3eaebacf777f12fd539dce9ec5af3efc6d8424e96ccd49 \
+ --hash=sha256:118716de5ad6726332db1801bc90fa6d94194cd2e07c1a7822cebf12c496714d \
+ --hash=sha256:168e04663e126416ba712114050f413ac306759a1791d87b7c11d4428ba75760 \
+ --hash=sha256:191cbd42660446d67cf7a95ac7bfa60f49b8b3b0417c64f216284a1d86fc9335 \
+ --hash=sha256:263f4fae9eba277513357c871275b18d14de93fd49bf5e43dc60a97b81ad5eb8 \
+ --hash=sha256:265729b551a2dd329cc47b323a182fb7961af42abf21e913c9dd7d3331b2f3c2 \
+ --hash=sha256:26b46620e1e0e45af510d9848ea0915e7040605dd2ae94ebefb6c962cbb6f7ec \
+ --hash=sha256:29c8d2fae11d4379ea207ba7fc69d43237e42cf8a9f90ec6e05993687e6d648b \
+ --hash=sha256:2fcbf2e135c11f721193aa5f42ba112bb1046afafbffd407cbc81d8d735c74d0 \
+ --hash=sha256:39183abee670bc37b85f11e86c44a9cad1ed6efa48b580083e89ecee13dd9717 \
+ --hash=sha256:3919c9407faeeee35430ae135e3a78acd4ecaaaa73767529e2c15ca1d73ba325 \
+ --hash=sha256:3c98a8d0ac9e2a7cb8ff8c53e5d6e8d82bfb2839abf144fdeaaa832f2a12aa45 \
+ --hash=sha256:3dd58f7ce20360c6ce0c04f7bd9081c7f9c19fc6129a3c705d0c5a35439f201d \
+ --hash=sha256:46aa91813c267c3f60db75d56419b42c0c0b9748ec2c568a0e3588e543fb4233 \
+ --hash=sha256:49c596cd18e90e58b7caa4d7ca7606049c1802125fcff96b8af73fa5c3870e4d \
+ --hash=sha256:532ddc6a8a6ca341b1cd7f4d999043e4c71a212b26fe9fd2e7f1e8bb4e873544 \
+ --hash=sha256:54d2aef0b0f5056f130981ad45081b278602ff3657fe16c88529f5058038e802 \
+ --hash=sha256:553dc58987d1d853adda8aeadf4db8e29749f0b11877afcc429a9ad892818ae2 \
+ --hash=sha256:584cb3e605ec45ba350962cec853e17be0a25a772f21f09f1e422f7044ae2a7d \
+ --hash=sha256:5cd3afd71e9bc146203b6c8141921e738364158d4aa7cdb9a874e2505163770f \
+ --hash=sha256:63055d3dda433ebb314c9f1819942f16a19203c454508fdb2d167613f7017169 \
+ --hash=sha256:654fdc971c76348a73af5240d8e2529265b9a7ba6321e38dd5bae7b0d4ab3abe \
+ --hash=sha256:6b7b58913d475911f6f33e8082f19dd9b120c4f4a5c911d07e395d67b81c6982 \
+ --hash=sha256:6e860909fea75baef941ee6436e0453612505883b9d0d87924d4fda27865b9a2 \
+ --hash=sha256:730be847daad773a3c898943cf67fb9845a3961d06fb79672ceb0a8cd8624cfa \
+ --hash=sha256:732e0aa0385b59a1b2545159e781c792cc58ce9c134249233a7c7250a44684c4 \
+ --hash=sha256:75965c1f4efb7234ff52a58b729d245a21e87e4b6a26a0ec08052f02b16274e4 \
+ --hash=sha256:7a488908a470451338607650f1c064175094aedebf4a4fa37890682e30ce0b57 \
+ --hash=sha256:81056e01bba1394f1d92904ec61a4078f66df785316275edbaf51d90da8c6e26 \
+ --hash=sha256:82f3f088482e2229387eadf8215c03f7726d56f69cce8c0c40f0795aebc9b361 \
+ --hash=sha256:84d4a6b9efd6124f728558a18e79e7cc5c5d4efc09b2b846c910de7e564f5bad \
+ --hash=sha256:85f485b7471571e99fab4f44eeb327dc0e1f814ada575f3fa85e698417d8a54e \
+ --hash=sha256:8a3cfb15961e7333ea6ef033dc574af75153b5c230d5ad25fbcd55198f21e0cf \
+ --hash=sha256:8bb7883c1e94ceb87c2bf81385266f032da09cd040e804cc002f2c9d6b842e2f \
+ --hash=sha256:8dcae24de1bc9da93aa689cb6313c70e776d7cea2fcf26b9b6160fedfe6bd9af \
+ --hash=sha256:9937574e6d842f359b8585903d04f5b4ab62277a091a93e02058158074dc52f2 \
+ --hash=sha256:9bbb8facc5375476d392990dd6a71f97e4cb42e2ac66f32e860f6e47299d5e89 \
+ --hash=sha256:9c08527055fbb03c641c15bbc5b79dd2942fb6a3bd8dabf141dd7e97eeea4904 \
+ --hash=sha256:9cffa3ef0af29687455161cb446eff059bf27607f95163d6a37e27bcb37180f6 \
+ --hash=sha256:9f85f9b5db87b0f52e53c68ad2a0c5a53e00afa439bd54a1723742a2b1021276 \
+ --hash=sha256:a82d5a0ee43aeae2116d7292c77cc8038f4841830ade8aa922e098933b468b9e \
+ --hash=sha256:a9eacbf983319b26b5f340a2e0cd47ac1ee4725a7f3a72fd0f15063c934b69d6 \
+ --hash=sha256:ab4b0d3bee6f6ff7017e18e576ac7e41a06697d8dea4b8f3ab9e0c8e1300c409 \
+ --hash=sha256:af69d9e159575e877c7546d1ee817b4ae089aa221dd1117e20c24ad8dc8659c7 \
+ --hash=sha256:b1795c4b2789b458fa290059062c2f5a297ddb28c31e704d27e161386469691a \
+ --hash=sha256:b591c094afd0ffda820e931148c9e48dc31a556dc5b2b9b3cc552fa710d858e4 \
+ --hash=sha256:b8e0fd344bad57026a8f4ccfaf406486c2fc991838050c2fef156170edc3b775 \
+ --hash=sha256:ba1077c562a046208a2dc6366227b3eeae8f2c2ab4b41eaf4fd2fa28cece4203 \
+ --hash=sha256:bb41f04046b4f22b1e7ba5ef513402cd2e3477ec610e5f92d38fe2bba383d419 \
+ --hash=sha256:c039bbf79a9a2498404d1ae7e29a6c175e63678d7a54013a97397c40aee026c5 \
+ --hash=sha256:c566a4672564c5d54d8ab65cdaae5a87ee14c1564c1a2ddc7a9f5811c750f023 \
+ --hash=sha256:cda8b025875946ffff5a9a7590bf9acde3eb02cb6200f06a2d3e691ef3d9955b \
+ --hash=sha256:cdb001a1a0e4f41e613bca2c0fc147fc8a7396f53fc94201cbfd8ec7cd69ca4b \
+ --hash=sha256:cdde31759bd8888f3ef0eebda80394a48961328a17c264dce8cc35f4b9cde35d \
+ --hash=sha256:d2cc7d187e8c6e9b7bdbefa9697ce897a704ea7a7ce844f2b4e0e2aa07ae51d3 \
+ --hash=sha256:d7aa33153a5bb0bac783d2c57885889b1162823384e8313d47800a0e10d0070e \
+ --hash=sha256:d7c72c8756eeb3aefb1b9e3dac7c37a4a25db63640cac0ab6fc18e91a0edf05a \
+ --hash=sha256:dd810f2d39c526c42ea205e0addad5dc08ef853c625387806a29d07f9d150d9b \
+ --hash=sha256:ddc0ab9dbc5f9ceaf2bf7a367bf01f2697660e908f6534800e88f43590b271db \
+ --hash=sha256:ddc4a16207f88f9597b397fc1f60781266d13b13de922ff61c206547a29e4bbd \
+ --hash=sha256:de4221a1181fa9c8c4b5f35506ed6f298948f44003d84d2a8b9885d7e01e6cfa \
+ --hash=sha256:df2e210400b28e50994477ebf82f055698c79797b6ee47a1669d383ca33263e1 \
+ --hash=sha256:df3146d52465b3b6397d25d513f428cb421c18df65b7378667bb5f1e3cc45805 \
+ --hash=sha256:e47fc52602ffc374e69bf1b76536dc99f7f6dd876bd786c8213eaa3598be030a \
+ --hash=sha256:e9e9c988b5ffde7be02180f864cbd17c0b0c1231c235748912ab2afa05789c25 \
+ --hash=sha256:ea1b60b86595a5dc1f57b44a801a1c4d8209c0a69518391d349973a4491408e6 \
+ --hash=sha256:edf6b465306215b19dbe6c3fb63cf374a8f3e1ad77f3b4c16544b83033bbb67b \
+ --hash=sha256:f02c4337bf271c4f06637f5ff254fad2238c0b8e32a3a480ebb2fc5e26f754a5 \
+ --hash=sha256:f7f51ffe59f4556243d3cc82d827bde74765f594fa3ceb80ec4de0c13ccd3416 \
+ --hash=sha256:f952e1a78c480edee8fb43aa2bf2e84dcd46c917d44f8065b883079d3893e8fc \
+ --hash=sha256:fb565b4219abc8ea2402e61c7ba648a62903831059ed3564fa1245cc245d58d7 \
+ --hash=sha256:fee15c2a190ef389f14928135c6fb2d25cd3fdb7887bfd9a7b444bbdc8c06b96
# via mypy
locket==1.0.0 \
--hash=sha256:5c0d4c052a8bbbf750e056a8e65ccd309086f4f0f18a2eac306a8dfa4112a632 \
@@ -1285,9 +1285,9 @@ markupsafe==3.0.3 \
--hash=sha256:f9e130248f4462aaa8e2552d547f36ddadbeaa573879158d721bbd33dfe4743a \
--hash=sha256:fed51ac40f757d41b7c48425901843666a6677e3e8eb0abcff09e4ba6e664f50
# via jinja2
-mcp==1.23.3 \
- --hash=sha256:32768af4b46a1b4f7df34e2bfdf5c6011e7b63d7f1b0e321d0fdef4cd6082031 \
- --hash=sha256:b3b0da2cc949950ce1259c7bfc1b081905a51916fcd7c8182125b85e70825201
+mcp==1.25.0 \
+ --hash=sha256:56310361ebf0364e2d438e5b45f7668cbb124e158bb358333cd06e49e83a6802 \
+ --hash=sha256:b37c38144a666add0862614cc79ec276e97d72aa8ca26d622818d4e278b9721a
# via fastapi-mcp
mdurl==0.1.2 \
--hash=sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8 \
@@ -1575,45 +1575,45 @@ multidict==6.7.0 \
# aiobotocore
# aiohttp
# yarl
-mypy==1.19.0 \
- --hash=sha256:0c01c99d626380752e527d5ce8e69ffbba2046eb8a060db0329690849cf9b6f9 \
- --hash=sha256:0dde5cb375cb94deff0d4b548b993bec52859d1651e073d63a1386d392a95495 \
- --hash=sha256:0e3c3d1e1d62e678c339e7ade72746a9e0325de42cd2cccc51616c7b2ed1a018 \
- --hash=sha256:0ea4fd21bb48f0da49e6d3b37ef6bd7e8228b9fe41bbf4d80d9364d11adbd43c \
- --hash=sha256:0fb3115cb8fa7c5f887c8a8d81ccdcb94cff334684980d847e5a62e926910e1d \
- --hash=sha256:11f7254c15ab3f8ed68f8e8f5cbe88757848df793e31c36aaa4d4f9783fd08ab \
- --hash=sha256:120cffe120cca5c23c03c77f84abc0c14c5d2e03736f6c312480020082f1994b \
- --hash=sha256:16f76ff3f3fd8137aadf593cb4607d82634fca675e8211ad75c43d86033ee6c6 \
- --hash=sha256:1cf9c59398db1c68a134b0b5354a09a1e124523f00bacd68e553b8bd16ff3299 \
- --hash=sha256:318ba74f75899b0e78b847d8c50821e4c9637c79d9a59680fc1259f29338cb3e \
- --hash=sha256:3210d87b30e6af9c8faed61be2642fcbe60ef77cec64fa1ef810a630a4cf671c \
- --hash=sha256:34ec1ac66d31644f194b7c163d7f8b8434f1b49719d403a5d26c87fff7e913f7 \
- --hash=sha256:37af5166f9475872034b56c5efdcf65ee25394e9e1d172907b84577120714364 \
- --hash=sha256:3ad925b14a0bb99821ff6f734553294aa6a3440a8cb082fe1f5b84dfb662afb1 \
- --hash=sha256:510c014b722308c9bd377993bcbf9a07d7e0692e5fa8fc70e639c1eb19fc6bee \
- --hash=sha256:6016c52ab209919b46169651b362068f632efcd5eb8ef9d1735f6f86da7853b2 \
- --hash=sha256:6148ede033982a8c5ca1143de34c71836a09f105068aaa8b7d5edab2b053e6c8 \
- --hash=sha256:63ea6a00e4bd6822adbfc75b02ab3653a17c02c4347f5bb0cf1d5b9df3a05835 \
- --hash=sha256:7686ed65dbabd24d20066f3115018d2dce030d8fa9db01aa9f0a59b6813e9f9e \
- --hash=sha256:7a500ab5c444268a70565e374fc803972bfd1f09545b13418a5174e29883dab7 \
- --hash=sha256:8f44f2ae3c58421ee05fe609160343c25f70e3967f6e32792b5a78006a9d850f \
- --hash=sha256:a18d8abdda14035c5718acb748faec09571432811af129bf0d9e7b2d6699bf18 \
- --hash=sha256:a31e4c28e8ddb042c84c5e977e28a21195d086aaffaf08b016b78e19c9ef8106 \
- --hash=sha256:a9ac09e52bb0f7fb912f5d2a783345c72441a08ef56ce3e17c1752af36340a39 \
- --hash=sha256:b9d491295825182fba01b6ffe2c6fe4e5a49dbf4e2bb4d1217b6ced3b4797bc6 \
- --hash=sha256:c14a98bc63fd867530e8ec82f217dae29d0550c86e70debc9667fff1ec83284e \
- --hash=sha256:c3385246593ac2b97f155a0e9639be906e73534630f663747c71908dfbf26134 \
- --hash=sha256:cabbee74f29aa9cd3b444ec2f1e4fa5a9d0d746ce7567a6a609e224429781f53 \
- --hash=sha256:cb64b0ba5980466a0f3f9990d1c582bcab8db12e29815ecb57f1408d99b4bff7 \
- --hash=sha256:cf7d84f497f78b682edd407f14a7b6e1a2212b433eedb054e2081380b7395aa3 \
- --hash=sha256:e2c1101ab41d01303103ab6ef82cbbfedb81c1a060c868fa7cc013d573d37ab5 \
- --hash=sha256:f188dcf16483b3e59f9278c4ed939ec0254aa8a60e8fc100648d9ab5ee95a431 \
- --hash=sha256:f2e36bed3c6d9b5f35d28b63ca4b727cb0228e480826ffc8953d1892ddc8999d \
- --hash=sha256:f3e19e3b897562276bb331074d64c076dbdd3e79213f36eed4e592272dabd760 \
- --hash=sha256:f6b874ca77f733222641e5c46e4711648c4037ea13646fd0cdc814c2eaec2528 \
- --hash=sha256:f75e60aca3723a23511948539b0d7ed514dda194bc3755eae0bfc7a6b4887aa7 \
- --hash=sha256:fc51a5b864f73a3a182584b1ac75c404396a17eced54341629d8bdcb644a5bba \
- --hash=sha256:fd4a985b2e32f23bead72e2fb4bbe5d6aceee176be471243bd831d5b2644672d
+mypy==1.19.1 \
+ --hash=sha256:016f2246209095e8eda7538944daa1d60e1e8134d98983b9fc1e92c1fc0cb8dd \
+ --hash=sha256:022ea7279374af1a5d78dfcab853fe6a536eebfda4b59deab53cd21f6cd9f00b \
+ --hash=sha256:06e6170bd5836770e8104c8fdd58e5e725cfeb309f0a6c681a811f557e97eac1 \
+ --hash=sha256:19d88bb05303fe63f71dd2c6270daca27cb9401c4ca8255fe50d1d920e0eb9ba \
+ --hash=sha256:21761006a7f497cb0d4de3d8ef4ca70532256688b0523eee02baf9eec895e27b \
+ --hash=sha256:28902ee51f12e0f19e1e16fbe2f8f06b6637f482c459dd393efddd0ec7f82045 \
+ --hash=sha256:2899753e2f61e571b3971747e302d5f420c3fd09650e1951e99f823bc3089dac \
+ --hash=sha256:2abb24cf3f17864770d18d673c85235ba52456b36a06b6afc1e07c1fdcd3d0e6 \
+ --hash=sha256:34c81968774648ab5ac09c29a375fdede03ba253f8f8287847bd480782f73a6a \
+ --hash=sha256:409088884802d511ee52ca067707b90c883426bd95514e8cfda8281dc2effe24 \
+ --hash=sha256:481daf36a4c443332e2ae9c137dfee878fcea781a2e3f895d54bd3002a900957 \
+ --hash=sha256:4b84a7a18f41e167f7995200a1d07a4a6810e89d29859df936f1c3923d263042 \
+ --hash=sha256:4f28f99c824ecebcdaa2e55d82953e38ff60ee5ec938476796636b86afa3956e \
+ --hash=sha256:5f05aa3d375b385734388e844bc01733bd33c644ab48e9684faa54e5389775ec \
+ --hash=sha256:7bcfc336a03a1aaa26dfce9fff3e287a3ba99872a157561cbfcebe67c13308e3 \
+ --hash=sha256:804bd67b8054a85447c8954215a906d6eff9cabeabe493fb6334b24f4bfff718 \
+ --hash=sha256:8bb5c6f6d043655e055be9b542aa5f3bdd30e4f3589163e85f93f3640060509f \
+ --hash=sha256:a009ffa5a621762d0c926a078c2d639104becab69e79538a494bcccb62cc0331 \
+ --hash=sha256:a8174a03289288c1f6c46d55cef02379b478bfbc8e358e02047487cad44c6ca1 \
+ --hash=sha256:ab43590f9cd5108f41aacf9fca31841142c786827a74ab7cc8a2eacb634e09a1 \
+ --hash=sha256:b10e7c2cd7870ba4ad9b2d8a6102eb5ffc1f16ca35e3de6bfa390c1113029d13 \
+ --hash=sha256:b13cfdd6c87fc3efb69ea4ec18ef79c74c3f98b4e5498ca9b85ab3b2c2329a67 \
+ --hash=sha256:b64d987153888790bcdb03a6473d321820597ab8dd9243b27a92153c4fa50fd2 \
+ --hash=sha256:b7951a701c07ea584c4fe327834b92a30825514c868b1f69c30445093fdd9d5a \
+ --hash=sha256:bdb12f69bcc02700c2b47e070238f42cb87f18c0bc1fc4cdb4fb2bc5fd7a3b8b \
+ --hash=sha256:c35d298c2c4bba75feb2195655dfea8124d855dfd7343bf8b8c055421eaf0cf8 \
+ --hash=sha256:c608937067d2fc5a4dd1a5ce92fd9e1398691b8c5d012d66e1ddd430e9244376 \
+ --hash=sha256:c9a6538e0415310aad77cb94004ca6482330fece18036b5f360b62c45814c4ef \
+ --hash=sha256:d8dfc6ab58ca7dda47d9237349157500468e404b17213d44fc1cb77bce532288 \
+ --hash=sha256:da4869fc5e7f62a88f3fe0b5c919d1d9f7ea3cef92d3689de2823fd27e40aa75 \
+ --hash=sha256:de759aafbae8763283b2ee5869c7255391fbc4de3ff171f8f030b5ec48381b74 \
+ --hash=sha256:e3157c7594ff2ef1634ee058aafc56a82db665c9438fd41b390f3bde1ab12250 \
+ --hash=sha256:e3f276d8493c3c97930e354b2595a44a21348b320d859fb4a2b9f66da9ed27ab \
+ --hash=sha256:ee4c11e460685c3e0c64a4c5de82ae143622410950d6be863303a1c4ba0e36d6 \
+ --hash=sha256:f1235f5ea01b7db5468d53ece6aaddf1ad0b88d9e7462b86ef96fe04995d7247 \
+ --hash=sha256:f7cee03c9a2e2ee26ec07479f38ea9c884e301d42c6d43a19d20fb014e3ba925 \
+ --hash=sha256:f859fb09d9583a985be9a493d5cfc5515b56b08f7447759a0c5deaf68d80506e \
+ --hash=sha256:ffcebe56eb09ff0c0885e750036a095e23793ba6c2e894e7e63f6d89ad51f22e
# via sqlalchemy
mypy-extensions==1.1.0 \
--hash=sha256:1be4cccdb0f2482337c4743e60421de3a356cd97508abadd57d47403e94f5505 \
@@ -1765,9 +1765,9 @@ pandas==2.3.3 \
# pandas-gbq
# pymilvus
# snowflake-connector-python
-pandas-gbq==0.31.1 \
- --hash=sha256:a5d6e897917302c50feaca2ed1ce6a284abd8b9139383bf063307aab8d0556d9 \
- --hash=sha256:c59878504adee211cf1c34b22cf94393c59cc953626c61ce76e06c8d25fd146d
+pandas-gbq==0.32.0 \
+ --hash=sha256:249623d574c65e98cf19b7b7ecda97729f4f0a843eae3a0a82d9ef50adcdf4ef \
+ --hash=sha256:28018ff09f2e49ab2b01a11329bd4e562fd65da406030b4a8001a3a4e80a1e34
# via google-cloud-bigquery
parsy==2.2 \
--hash=sha256:5e981613d9d2d8b68012d1dd0afe928967bea2e4eefdb76c2f545af0dd02a9e7 \
@@ -1915,9 +1915,9 @@ propcache==0.4.1 \
# via
# aiohttp
# yarl
-proto-plus==1.26.1 \
- --hash=sha256:13285478c2dcf2abb829db158e1047e2f1e8d63a077d94263c2b88b043c75a66 \
- --hash=sha256:21a515a4c4c0088a773899e23c7bbade3d18f9c66c73edd4c7ee3816bc96a012
+proto-plus==1.27.0 \
+ --hash=sha256:1baa7f81cf0f8acb8bc1f6d085008ba4171eaf669629d1b6d1673b21ed1c0a82 \
+ --hash=sha256:873af56dd0d7e91836aee871e5799e1c6f1bda86ac9a983e0bb9f0c266a568c4
# via
# google-api-core
# google-cloud-bigquery-storage
@@ -1947,26 +1947,28 @@ protobuf==6.33.2 \
# grpcio-status
# proto-plus
# pymilvus
-psutil==7.1.3 \
- --hash=sha256:0005da714eee687b4b8decd3d6cc7c6db36215c9e74e5ad2264b90c3df7d92dc \
- --hash=sha256:1068c303be3a72f8e18e412c5b2a8f6d31750fb152f9cb106b54090296c9d251 \
- --hash=sha256:18349c5c24b06ac5612c0428ec2a0331c26443d259e2a0144a9b24b4395b58fa \
- --hash=sha256:19644c85dcb987e35eeeaefdc3915d059dac7bd1167cdcdbf27e0ce2df0c08c0 \
- --hash=sha256:2bdbcd0e58ca14996a42adf3621a6244f1bb2e2e528886959c72cf1e326677ab \
- --hash=sha256:31d77fcedb7529f27bb3a0472bea9334349f9a04160e8e6e5020f22c59893264 \
- --hash=sha256:3792983e23b69843aea49c8f5b8f115572c5ab64c153bada5270086a2123c7e7 \
- --hash=sha256:3bb428f9f05c1225a558f53e30ccbad9930b11c3fc206836242de1091d3e7dd3 \
- --hash=sha256:56d974e02ca2c8eb4812c3f76c30e28836fffc311d55d979f1465c1feeb2b68b \
- --hash=sha256:6c86281738d77335af7aec228328e944b30930899ea760ecf33a4dba66be5e74 \
- --hash=sha256:8f33a3702e167783a9213db10ad29650ebf383946e91bc77f28a5eb083496bc9 \
- --hash=sha256:95ef04cf2e5ba0ab9eaafc4a11eaae91b44f4ef5541acd2ee91d9108d00d59a7 \
- --hash=sha256:ad81425efc5e75da3f39b3e636293360ad8d0b49bed7df824c79764fb4ba9b8b \
- --hash=sha256:b403da1df4d6d43973dc004d19cee3b848e998ae3154cc8097d139b77156c353 \
- --hash=sha256:bc31fa00f1fbc3c3802141eede66f3a2d51d89716a194bf2cd6fc68310a19880 \
- --hash=sha256:bd0d69cee829226a761e92f28140bec9a5ee9d5b4fb4b0cc589068dbfff559b1 \
- --hash=sha256:c525ffa774fe4496282fb0b1187725793de3e7c6b29e41562733cae9ada151ee \
- --hash=sha256:f39c2c19fe824b47484b96f9692932248a54c43799a84282cfe58d05a6449efd \
- --hash=sha256:fac9cd332c67f4422504297889da5ab7e05fd11e3c4392140f7370f4208ded1f
+psutil==7.2.1 \
+ --hash=sha256:05cc68dbb8c174828624062e73078e7e35406f4ca2d0866c272c2410d8ef06d1 \
+ --hash=sha256:08a2f175e48a898c8eb8eace45ce01777f4785bc744c90aa2cc7f2fa5462a266 \
+ --hash=sha256:0d67c1822c355aa6f7314d92018fb4268a76668a536f133599b91edd48759442 \
+ --hash=sha256:2ceae842a78d1603753561132d5ad1b2f8a7979cb0c283f5b52fb4e6e14b1a79 \
+ --hash=sha256:35630d5af80d5d0d49cfc4d64c1c13838baf6717a13effb35869a5919b854cdf \
+ --hash=sha256:3fce5f92c22b00cdefd1645aa58ab4877a01679e901555067b1bd77039aa589f \
+ --hash=sha256:494c513ccc53225ae23eec7fe6e1482f1b8a44674241b54561f755a898650679 \
+ --hash=sha256:5e38404ca2bb30ed7267a46c02f06ff842e92da3bb8c5bfdadbd35a5722314d8 \
+ --hash=sha256:81442dac7abfc2f4f4385ea9e12ddf5a796721c0f6133260687fec5c3780fa49 \
+ --hash=sha256:923f8653416604e356073e6e0bccbe7c09990acef442def2f5640dd0faa9689f \
+ --hash=sha256:93f3f7b0bb07711b49626e7940d6fe52aa9940ad86e8f7e74842e73189712129 \
+ --hash=sha256:99a4cd17a5fdd1f3d014396502daa70b5ec21bf4ffe38393e152f8e449757d67 \
+ --hash=sha256:ab2b98c9fc19f13f59628d94df5cc4cc4844bc572467d113a8b517d634e362c6 \
+ --hash=sha256:b1b0671619343aa71c20ff9767eced0483e4fc9e1f489d50923738caf6a03c17 \
+ --hash=sha256:b2e953fcfaedcfbc952b44744f22d16575d3aa78eb4f51ae74165b4e96e55f42 \
+ --hash=sha256:ba9f33bb525b14c3ea563b2fd521a84d2fa214ec59e3e6a2858f78d0844dd60d \
+ --hash=sha256:cfbe6b40ca48019a51827f20d830887b3107a74a79b01ceb8cc8de4ccb17b672 \
+ --hash=sha256:d34d2ca888208eea2b5c68186841336a7f5e0b990edec929be909353a202768a \
+ --hash=sha256:ea46c0d060491051d39f0d2cff4f98d5c72b288289f57a21556cc7d504db37fc \
+ --hash=sha256:f7583aec590485b43ca601dd9cea0dcd65bd7bb21d30ef4ddbf4ea6b5ed1bdd3 \
+ --hash=sha256:f78baafb38436d5a128f837fab2d92c276dfb48af01a240b861ae02b2413ada8
# via
# feast (setup.py)
# pandas-gbq
@@ -2228,9 +2230,9 @@ python-dotenv==1.2.1 \
# pydantic-settings
# pymilvus
# uvicorn
-python-multipart==0.0.20 \
- --hash=sha256:8a62d3a8335e06589fe01f2a3e178cdcc632f3fbe0d492ad9ee0ec35aab1f104 \
- --hash=sha256:8dd0cab45b8e23064ae09147625994d090fa46f5b0d1e13af944c331a7fa9d13
+python-multipart==0.0.21 \
+ --hash=sha256:7137ebd4d3bbf70ea1622998f902b97a29434a9e8dc40eb203bbcf7c2a2cba92 \
+ --hash=sha256:cf7a6713e01c87aa35387f4774e812c4361150938d20d232800f75ffcf266090
# via mcp
pytz==2025.2 \
--hash=sha256:360b9e3dbb49a209c21ad61809c7fb453643e048b38924c765813546746e81c3 \
@@ -2542,12 +2544,14 @@ sqlalchemy[mypy]==2.0.45 \
--hash=sha256:1d8b4a7a8c9b537509d56d5cd10ecdcfbb95912d72480c8861524efecc6a3fff \
--hash=sha256:215f0528b914e5c75ef2559f69dca86878a3beeb0c1be7279d77f18e8d180ed4 \
--hash=sha256:2c0b74aa79e2deade948fe8593654c8ef4228c44ba862bb7c9585c8e0db90f33 \
+ --hash=sha256:2e90a344c644a4fa871eb01809c32096487928bd2038bf10f3e4515cb688cc56 \
--hash=sha256:3c5f76216e7b85770d5bb5130ddd11ee89f4d52b11783674a662c7dd57018177 \
--hash=sha256:470daea2c1ce73910f08caf10575676a37159a6d16c4da33d0033546bddebc9b \
--hash=sha256:4748601c8ea959e37e03d13dcda4a44837afcd1b21338e637f7c935b8da06177 \
--hash=sha256:4b6bec67ca45bc166c8729910bd2a87f1c0407ee955df110d78948f5b5827e8a \
--hash=sha256:5225a288e4c8cc2308dbdd874edad6e7d0fd38eac1e9e5f23503425c8eee20d0 \
--hash=sha256:56ead1f8dfb91a54a28cd1d072c74b3d635bcffbd25e50786533b822d4f2cde2 \
+ --hash=sha256:5964f832431b7cdfaaa22a660b4c7eb1dfcd6ed41375f67fd3e3440fd95cb3cc \
--hash=sha256:59a8b8bd9c6bedf81ad07c8bd5543eedca55fe9b8780b2b628d495ba55f8db1e \
--hash=sha256:672c45cae53ba88e0dad74b9027dddd09ef6f441e927786b05bec75d949fbb2e \
--hash=sha256:6d0beadc2535157070c9c17ecf25ecec31e13c229a8f69196d7590bde8082bf1 \
@@ -2566,7 +2570,9 @@ sqlalchemy[mypy]==2.0.45 \
--hash=sha256:b8c8b41b97fba5f62349aa285654230296829672fc9939cd7f35aab246d1c08b \
--hash=sha256:ba547ac0b361ab4f1608afbc8432db669bd0819b3e12e29fb5fa9529a8bba81d \
--hash=sha256:c1c2091b1489435ff85728fafeb990f073e64f6f5e81d5cd53059773e8521eb6 \
+ --hash=sha256:c64772786d9eee72d4d3784c28f0a636af5b0a29f3fe26ff11f55efe90c0bd85 \
--hash=sha256:cd337d3526ec5298f67d6a30bbbe4ed7e5e68862f0bf6dd21d289f8d37b7d60b \
+ --hash=sha256:d29b2b99d527dbc66dd87c3c3248a5dd789d974a507f4653c969999fc7c1191b \
--hash=sha256:d2c3684fca8a05f0ac1d9a21c1f4a266983a7ea9180efb80ffeb03861ecd01a0 \
--hash=sha256:d62e47f5d8a50099b17e2bfc1b0c7d7ecd8ba6b46b1507b58cc4f05eefc3bb1c \
--hash=sha256:d8a2ca754e5415cde2b656c27900b19d50ba076aa05ce66e2207623d3fe41f5a \
@@ -2584,9 +2590,9 @@ sqlglot==25.20.2 \
--hash=sha256:169fe8308dd70d7bd40117b2221b62bdc7c4e2ea8eb07394b2a6146cdedf05ab \
--hash=sha256:cdbfd7ce3f2f39f32bd7b4c23fd9e0fd261636a6b14285b914e8def25fd0a567
# via ibis-framework
-sse-starlette==3.0.3 \
- --hash=sha256:88cfb08747e16200ea990c8ca876b03910a23b547ab3bd764c0d8eb81019b971 \
- --hash=sha256:af5bf5a6f3933df1d9c7f8539633dc8444ca6a97ab2e2a7cd3b6e431ac03a431
+sse-starlette==3.1.1 \
+ --hash=sha256:bb38f71ae74cfd86b529907a9fda5632195dfa6ae120f214ea4c890c7ee9d436 \
+ --hash=sha256:bffa531420c1793ab224f63648c059bcadc412bf9fdb1301ac8de1cf9a67b7fb
# via mcp
starlette==0.50.0 \
--hash=sha256:9e5391843ec9b6e472eed1365a78c8098cfceb7a74bfd4d6b1c0c0095efb3bca \
@@ -2594,6 +2600,7 @@ starlette==0.50.0 \
# via
# fastapi
# mcp
+ # sse-starlette
tabulate==0.9.0 \
--hash=sha256:0095b12bf5966de529c0feb1fa08671671b3368eec77d7ef7ab114be2c068b3c \
--hash=sha256:024ca478df22e9340661486f85298cff5f6dcdba14f3813e8830015b9ed1948f
@@ -2673,13 +2680,13 @@ typeguard==4.4.4 \
--hash=sha256:3a7fd2dffb705d4d0efaed4306a704c89b9dee850b688f060a8b1615a79e5f74 \
--hash=sha256:b5f562281b6bfa1f5492470464730ef001646128b180769880468bd84b68b09e
# via feast (setup.py)
-typer==0.20.0 \
- --hash=sha256:1aaf6494031793e4876fb0bacfa6a912b551cf43c1e63c800df8b1a866720c37 \
- --hash=sha256:5b463df6793ec1dca6213a3cf4c0f03bc6e322ac5e16e13ddd622a889489784a
+typer==0.21.0 \
+ --hash=sha256:c79c01ca6b30af9fd48284058a7056ba0d3bf5cf10d0ff3d0c5b11b68c258ac6 \
+ --hash=sha256:c87c0d2b6eee3b49c5c64649ec92425492c14488096dfbc8a0c2799b2f6f9c53
# via fastapi-mcp
-types-pymysql==1.1.0.20250916 \
- --hash=sha256:873eb9836bb5e3de4368cc7010ca72775f86e9692a5c7810f8c7f48da082e55b \
- --hash=sha256:98d75731795fcc06723a192786662bdfa760e1e00f22809c104fbb47bac5e29b
+types-pymysql==1.1.0.20251220 \
+ --hash=sha256:ae1c3df32a777489431e2e9963880a0df48f6591e0aa2fd3a6fabd9dee6eca54 \
+ --hash=sha256:fa1082af7dea6c53b6caa5784241924b1296ea3a8d3bd060417352c5e10c0618
# via feast (setup.py)
typing-extensions==4.15.0 \
--hash=sha256:0cea48d173cc12fa28ecabc3b837ea3cf6f38c6d1136f85cbaaf598984861466 \
@@ -2715,9 +2722,9 @@ typing-inspection==0.4.2 \
# mcp
# pydantic
# pydantic-settings
-tzdata==2025.2 \
- --hash=sha256:1a403fada01ff9221ca8044d701868fa132215d84beb92242d9acd2147f667a8 \
- --hash=sha256:b60a638fcc0daffadf82fe0f57e53d06bdec2f36c4df66280ae79bce6bd6f2b9
+tzdata==2025.3 \
+ --hash=sha256:06a47e5700f3081aab02b2e513160914ff0694bce9947d6b76ebd6bf57cfc5d1 \
+ --hash=sha256:de39c2ca5dc7b0344f2eba86f49d614019d29f060fc4ebc8a417896a620b56a7
# via pandas
ujson==5.11.0 \
--hash=sha256:0180a480a7d099082501cad1fe85252e4d4bf926b40960fb3d9e87a3a6fbbc80 \
@@ -2805,9 +2812,9 @@ ujson==5.11.0 \
--hash=sha256:fa79fdb47701942c2132a9dd2297a1a85941d966d8c87bfd9e29b0cf423f26cc \
--hash=sha256:fac6c0649d6b7c3682a0a6e18d3de6857977378dce8d419f57a0b20e3d775b39
# via pymilvus
-urllib3==2.6.1 \
- --hash=sha256:5379eb6e1aba4088bae84f8242960017ec8d8e3decf30480b3a1abdaa9671a3f \
- --hash=sha256:e67d06fe947c36a7ca39f4994b08d73922d40e6cca949907be05efa6fd75110b
+urllib3==2.6.2 \
+ --hash=sha256:016f9c98bb7e98085cb2b4b17b87d2c702975664e4f060c6532e64d1c1a5e797 \
+ --hash=sha256:ec21cddfe7724fc7cb4ba4bea7aa8e2ef36f607a4bab81aa6ce42a13dc3f03dd
# via
# botocore
# kubernetes
diff --git a/sdk/python/requirements/py3.10-minimal-sdist-requirements-build.txt b/sdk/python/requirements/py3.10-minimal-sdist-requirements-build.txt
index 8749629ccb6..8bb08a3bea9 100644
--- a/sdk/python/requirements/py3.10-minimal-sdist-requirements-build.txt
+++ b/sdk/python/requirements/py3.10-minimal-sdist-requirements-build.txt
@@ -97,7 +97,9 @@ cffi==2.0.0 \
coherent-licensed==0.5.2 \
--hash=sha256:d8071403ce742d3ac3592ddc4fb7057a46caffb415b928b4d52802e5f208416d \
--hash=sha256:edccc5193ca2786f8fb3f0c7374637a143985f781f7eaa21aca3af2bd634b82f
- # via zipp
+ # via
+ # importlib-metadata
+ # zipp
cython==3.0.12 \
--hash=sha256:0038c9bae46c459669390e53a1ec115f8096b2e4647ae007ff1bf4e6dee92806 \
--hash=sha256:0faa5e39e5c8cdf6f9c3b1c3f24972826e45911e7f5b99cf99453fca5432f45e \
@@ -170,46 +172,46 @@ cython==3.0.12 \
# pyyaml
# snowflake-connector-python
# sqlalchemy
-cython==3.2.2 \
- --hash=sha256:034ab96cb8bc8e7432bc27491f8d66f51e435b1eb21ddc03aa844be8f21ad847 \
- --hash=sha256:098590c1dc309f8a0406ade031963a95a87714296b425539f9920aebf924560d \
- --hash=sha256:0e35ff0f1bb3a7a5c40afb8fb540e4178b6551909f10748bf39d323f8140ccf3 \
- --hash=sha256:13b99ecb9482aff6a6c12d1ca6feef6940c507af909914b49f568de74fa965fb \
- --hash=sha256:14432d7f207245a3c35556155873f494784169297b28978a6204f1c60d31553e \
- --hash=sha256:177faf4d61e9f2d4d2db61194ac9ec16d3fe3041c1b6830f871a01935319eeb3 \
- --hash=sha256:2b910b89a2a71004064c5e890b9512a251eda63fae252caa0feb9835057035f9 \
- --hash=sha256:3de43a5786033a27fae1c882feb5ff0d023c38b83356e6800c1be0bcd6cf9f11 \
- --hash=sha256:436eb562d0affbc0b959f62f3f9c1ed251b9499e4f29c1d19514ae859894b6bf \
- --hash=sha256:50bbaabee733fd2780985e459fc20f655e02def83e8eff10220ad88455a34622 \
- --hash=sha256:5f818d40bbcf17e2089e2de7840f0de1c0ca527acf9b044aba79d5f5d8a5bdba \
- --hash=sha256:60f4aa425e1ff98abf8d965ae7020f06dd2cbc01dbd945137d2f9cca4ff0524a \
- --hash=sha256:692a41c8fe06fb2dc55ca2c8d71c80c469fd16fe69486ed99f3b3cbb2d3af83f \
- --hash=sha256:820c4a99dbf6b3e6c0300be42b4040b501eff0e1feeb80cfa52c48a346fb0df2 \
- --hash=sha256:826cad0ad43ab05a26e873b5d625f64d458dc739ec6fdeecab848b60a91c4252 \
- --hash=sha256:86b1d39a1ea974dd16fe3bcef0df7b64dadd0bd38d05a339f287b48d37cb109f \
- --hash=sha256:8c9265b3e84ae2d999b7c3165c683e366bbbbbe4346468055ca2366fe013f2df \
- --hash=sha256:8db28aef793c81dc69383b619ca508668998aaf099cd839d3cbae85184cce744 \
- --hash=sha256:8e72ee88a9a5381d30a6da116a3c8352730b9b038a49ed9bc5c3d0ed6d69b06c \
- --hash=sha256:9cd2ede6af225499ad22888dbfb13b92d71fc1016f401ee637559a5831b177c2 \
- --hash=sha256:a3898c076e9c458bcb3e4936187919fda5f5365fe4c567d35d2b003444b6f3fe \
- --hash=sha256:a473df474ba89e9fee81ee82b31062a267f9e598096b222783477e56d02ad12c \
- --hash=sha256:a6387e3ad31342443916db9a419509935fddd8d4cbac34aab9c895ae55326a56 \
- --hash=sha256:a9509f1e9c41c86b790cff745bb31927bbc861662a3b462596d71d3d2a578abb \
- --hash=sha256:aa24cd0bdab27ca099b2467806c684404add597c1108e07ddf7b6471653c85d7 \
- --hash=sha256:aff11412ed5fc78bd8b148621f4d1034fcad6cfcba468c20cd9f327b4f61ec3e \
- --hash=sha256:b223c1f84c3420c24f6a4858e979524bd35a79437a5839e29d41201c87ed119d \
- --hash=sha256:b4df52101209817fde7284cf779156f79142fb639b1d7840f11680ff4bb30604 \
- --hash=sha256:b4fe499eed7cd70b2aa4e096b9ce2588f5e6fdf049b46d40a5e55efcde6e4904 \
- --hash=sha256:b5afac4e77e71a9010dc7fd3191ced00f9b12b494dd7525c140781054ce63a73 \
- --hash=sha256:c3add3d483acc73129a61d105389344d792c17e7c1cee24863f16416bd071634 \
- --hash=sha256:ca18d9d53c0e2f0c9347478b37532b46e0dc34c704e052ab1b0d8b21a290fc0f \
- --hash=sha256:d140c2701cbb8cf960300cf1b67f3b4fa9d294d32e51b85f329bff56936a82fd \
- --hash=sha256:d7b3447b2005dffc5f276d420a480d2b57d15091242652d410b6a46fb00ed251 \
- --hash=sha256:d8c93fe128b58942832b1fcac96e48f93c2c69b569eff0d38d30fb5995fecfa0 \
- --hash=sha256:e7200309b81f4066cf36a96efeec646716ca74afd73d159045169263db891133 \
- --hash=sha256:f560ff3aea5b5df93853ec7bf1a1e9623d6d511f4192f197559aca18fca43392 \
- --hash=sha256:fed44d0ab2d36f1b0301c770b0dafec23bcb9700d58e7769cd6d9136b3304c11 \
- --hash=sha256:ff07e784ea748225bbdea07fec0ac451379e9e41a0a84cb57b36db19dd01ae71
+cython==3.2.3 \
+ --hash=sha256:0145e64485f0a9741c9314ae176282dffeb48d2ef30ae315d7224698867c317f \
+ --hash=sha256:06a1317097f540d3bb6c7b81ed58a0d8b9dbfa97abf39dfd4c22ee87a6c7241e \
+ --hash=sha256:0a75a04688875b275a6c875565e672325bae04327dd6ec2fc25aeb5c6cf82fce \
+ --hash=sha256:1309bdce06f767e8514377f44b3a5b9e5b91e58af1348010cca10b572e1852ad \
+ --hash=sha256:18b5e738c9dbb1cb488b51e35c3a1b9aa7363166cce40158fe6ccb454f6498ac \
+ --hash=sha256:18edc858e6a52de47fe03ffa97ea14dadf450e20069de0a8aef531006c4bbd93 \
+ --hash=sha256:1d097ad4686b58b8c03d760d08eca28f79878d404ef7452c49636170571654e0 \
+ --hash=sha256:228f11be8406015d1ce84a25bf4f96167ff6fc18b834deca5716d95ae15a818c \
+ --hash=sha256:22a624290c2883387b2c2cfb5224c15bff21432c6a2cf0c23ac8df3dcbd45e96 \
+ --hash=sha256:25732f3981a93407826297f4423206e5e22c3cfccfc74e37bf444453bbdc076f \
+ --hash=sha256:26404441f733fd1cfb0dd9c45477f501437e7d51fad05bb402bd2feb4e127aa3 \
+ --hash=sha256:283262b8f902323ceb6ed3b643f275a2a963e7ab059f0714a467933383cbc56d \
+ --hash=sha256:2a18f2e3bcd018416157d0a83446e29b4a31437ab79061fe5504c077e70389d0 \
+ --hash=sha256:3141734fb15f8b5e9402b9240f8da8336edecae91742b41c85678c31ab68f66d \
+ --hash=sha256:3829f99d611412288f44ff543e9d2b5c0c83274998b2a6680bbe5cca3539c1fd \
+ --hash=sha256:4f40efa83c93060a271046930d2322ec045abb9722d25a377702cb57aa823c2b \
+ --hash=sha256:51fd1a56d0fc682c05ecc44f11927dbe28dd2867c30148557b62d7d1017a13d8 \
+ --hash=sha256:55c0157a5940fbf0b054508207fe0fc5cc796d0532af492c0fa35b5b41a883f7 \
+ --hash=sha256:60d19376252722241a3d3ec8a695c5cae4deb053486d2e5f9a40cb569a0cf984 \
+ --hash=sha256:6b01b36c9eb1b68c25bddbeef7379f7bfc37f7c9afc044e71840ffab761a2dd0 \
+ --hash=sha256:6b6dd6b7aca8447b2a6779b314cc402f1e4990754507a88477e535b3c8b41ad1 \
+ --hash=sha256:73afc824896ffaf22bf8122d0a7107f0120e3188a353bdcfa92317fc0d9a87ce \
+ --hash=sha256:74f482da8b605c61b4df6ff716d013f20131949cb2fa59b03e63abd36ef5bac0 \
+ --hash=sha256:80f20369d7aaf4e76cfef902025256918a5cc6eb0aed6d8783e4b1c563e4f6c4 \
+ --hash=sha256:84330e7c8bf220a82b633678b9f99e10227c8f4c406d67c5552449ab2afedef8 \
+ --hash=sha256:9a24cc653fad3adbd9cbaa638d80df3aa08a1fe27f62eb35850971c70be680df \
+ --hash=sha256:9aa1a8abf3d8bb53cc19cfaa21c004afad8d4ccb17513f8aa11a788d1f525abd \
+ --hash=sha256:9c5ac7201d8382c0da69e4a119c14be6acd7c286615a0383ffbd1dbfdbaa3df7 \
+ --hash=sha256:b39dff92db70cbd95528f3b81d70e06bd6d3fc9c1dd91321e4d3b999ece3bceb \
+ --hash=sha256:c041f7e338cca2422e0924716b04fabeda57636214324fc1941396acce99e7c7 \
+ --hash=sha256:c102388cf7604ff5647164d5041fd5de2393198a87883fdb50f6c078fc2f4f8e \
+ --hash=sha256:c2365a0c79ab9c0fa86d30a4a6ba7e37fc1be9537c48b79b9d63ee7e08bf2fef \
+ --hash=sha256:cf210228c15b5c625824d8e31d43b6fea25f9e13c81dac632f2f7d838e0229a5 \
+ --hash=sha256:d1f8700ba89c977438744f083890d87187f15709507a5489e0f6d682053b7fa0 \
+ --hash=sha256:e31f52ea7e35463b21410f150006eb07b663a0b3ceea8ee8f35e0b8e02b75f50 \
+ --hash=sha256:e4293f1861480b397809a6f021a6c12e15e918feae1c7add80c99d07af206578 \
+ --hash=sha256:f13832412d633376ffc08d751cc18ed0d7d00a398a4065e2871db505258748a6 \
+ --hash=sha256:f5bf0cebeb4147e172a114437d3fce5a507595d8fdd821be792b1bb25c691514 \
+ --hash=sha256:fabe2f37acb63a5521d16193effb15acd082e35458f30f1c1f3e506271fee8a7
# via uvloop
dunamai==1.25.0 \
--hash=sha256:7f9dc687dd3256e613b6cc978d9daabfd2bb5deb8adc541fc135ee423ffa98ab \
@@ -334,83 +336,83 @@ jinja2==3.1.6 \
# via
# poetry-dynamic-versioning
# uv-dynamic-versioning
-librt==0.7.3 \
- --hash=sha256:020c6db391268bcc8ce75105cb572df8cb659a43fd347366aaa407c366e5117a \
- --hash=sha256:0fa9ac2e49a6bee56e47573a6786cb635e128a7b12a0dc7851090037c0d397a3 \
- --hash=sha256:11ad45122bbed42cfc8b0597450660126ef28fd2d9ae1a219bc5af8406f95678 \
- --hash=sha256:120dd21d46ff875e849f1aae19346223cf15656be489242fe884036b23d39e93 \
- --hash=sha256:14569ac5dd38cfccf0a14597a88038fb16811a6fede25c67b79c6d50fc2c8fdc \
- --hash=sha256:1617bea5ab31266e152871208502ee943cb349c224846928a1173c864261375e \
- --hash=sha256:170cdb8436188347af17bf9cccf3249ba581c933ed56d926497119d4cf730cec \
- --hash=sha256:1975eda520957c6e0eb52d12968dd3609ffb7eef05d4223d097893d6daf1d8a7 \
- --hash=sha256:1fe603877e1865b5fd047a5e40379509a4a60204aa7aa0f72b16f7a41c3f0712 \
- --hash=sha256:24d70810f6e2ea853ff79338001533716b373cc0f63e2a0be5bc96129edb5fb5 \
- --hash=sha256:256793988bff98040de23c57cf36e1f4c2f2dc3dcd17537cdac031d3b681db71 \
- --hash=sha256:25711f364c64cab2c910a0247e90b51421e45dbc8910ceeb4eac97a9e132fc6f \
- --hash=sha256:2682162855a708e3270eba4b92026b93f8257c3e65278b456c77631faf0f4f7a \
- --hash=sha256:2cf9d73499486ce39eebbff5f42452518cc1f88d8b7ea4a711ab32962b176ee2 \
- --hash=sha256:2e40520c37926166c24d0c2e0f3bc3a5f46646c34bdf7b4ea9747c297d6ee809 \
- --hash=sha256:2e980cf1ed1a2420a6424e2ed884629cdead291686f1048810a817de07b5eb18 \
- --hash=sha256:2f03484b54bf4ae80ab2e504a8d99d20d551bfe64a7ec91e218010b467d77093 \
- --hash=sha256:35f1609e3484a649bb80431310ddbec81114cd86648f1d9482bc72a3b86ded2e \
- --hash=sha256:399938edbd3d78339f797d685142dd8a623dfaded023cf451033c85955e4838a \
- --hash=sha256:399bbd7bcc1633c3e356ae274a1deb8781c7bf84d9c7962cc1ae0c6e87837292 \
- --hash=sha256:3ec50cf65235ff5c02c5b747748d9222e564ad48597122a361269dd3aa808798 \
- --hash=sha256:3edbf257c40d21a42615e9e332a6b10a8bacaaf58250aed8552a14a70efd0d65 \
- --hash=sha256:440c788f707c061d237c1e83edf6164ff19f5c0f823a3bf054e88804ebf971ec \
- --hash=sha256:44b3689b040df57f492e02cd4f0bacd1b42c5400e4b8048160c9d5e866de8abe \
- --hash=sha256:4887c29cadbdc50640179e3861c276325ff2986791e6044f73136e6e798ff806 \
- --hash=sha256:5460d99ed30f043595bbdc888f542bad2caeb6226b01c33cda3ae444e8f82d42 \
- --hash=sha256:550fdbfbf5bba6a2960b27376ca76d6aaa2bd4b1a06c4255edd8520c306fcfc0 \
- --hash=sha256:56f2a47beda8409061bc1c865bef2d4bd9ff9255219402c0817e68ab5ad89aed \
- --hash=sha256:572a24fc5958c61431da456a0ef1eeea6b4989d81eeb18b8e5f1f3077592200b \
- --hash=sha256:59cb0470612d21fa1efddfa0dd710756b50d9c7fb6c1236bbf8ef8529331dc70 \
- --hash=sha256:6038ccbd5968325a5d6fd393cf6e00b622a8de545f0994b89dd0f748dcf3e19e \
- --hash=sha256:6488e69d408b492e08bfb68f20c4a899a354b4386a446ecd490baff8d0862720 \
- --hash=sha256:687403cced6a29590e6be6964463835315905221d797bc5c934a98750fe1a9af \
- --hash=sha256:6b407c23f16ccc36614c136251d6b32bf30de7a57f8e782378f1107be008ddb0 \
- --hash=sha256:6b4e7bff1d76dd2b46443078519dc75df1b5e01562345f0bb740cea5266d8218 \
- --hash=sha256:6bdd9adfca615903578d2060ee8a6eb1c24eaf54919ff0ddc820118e5718931b \
- --hash=sha256:6eb9295c730e26b849ed1f4022735f36863eb46b14b6e10604c1c39b8b5efaea \
- --hash=sha256:703456146dc2bf430f7832fd1341adac5c893ec3c1430194fdcefba00012555c \
- --hash=sha256:754a0d09997095ad764ccef050dd5bf26cbf457aab9effcba5890dad081d879e \
- --hash=sha256:7af7785f5edd1f418da09a8cdb9ec84b0213e23d597413e06525340bcce1ea4f \
- --hash=sha256:7b29e97273bd6999e2bfe9fe3531b1f4f64effd28327bced048a33e49b99674a \
- --hash=sha256:7b4f57f7a0c65821c5441d98c47ff7c01d359b1e12328219709bdd97fdd37f90 \
- --hash=sha256:8837d5a52a2d7aa9f4c3220a8484013aed1d8ad75240d9a75ede63709ef89055 \
- --hash=sha256:8ccadf260bb46a61b9c7e89e2218f6efea9f3eeaaab4e3d1f58571890e54858e \
- --hash=sha256:8d8cf653e798ee4c4e654062b633db36984a1572f68c3aa25e364a0ddfbbb910 \
- --hash=sha256:93b2a1f325fefa1482516ced160c8c7b4b8d53226763fa6c93d151fa25164207 \
- --hash=sha256:9f0e0927efe87cd42ad600628e595a1a0aa1c64f6d0b55f7e6059079a428641a \
- --hash=sha256:a59a69deeb458c858b8fea6acf9e2acd5d755d76cd81a655256bc65c20dfff5b \
- --hash=sha256:a9f9b661f82693eb56beb0605156c7fca57f535704ab91837405913417d6990b \
- --hash=sha256:abfc57cab3c53c4546aee31859ef06753bfc136c9d208129bad23e2eca39155a \
- --hash=sha256:aca73d70c3f553552ba9133d4a09e767dcfeee352d8d8d3eb3f77e38a3beb3ed \
- --hash=sha256:adeaa886d607fb02563c1f625cf2ee58778a2567c0c109378da8f17ec3076ad7 \
- --hash=sha256:b278a9248a4e3260fee3db7613772ca9ab6763a129d6d6f29555e2f9b168216d \
- --hash=sha256:b7c1239b64b70be7759554ad1a86288220bbb04d68518b527783c4ad3fb4f80b \
- --hash=sha256:bf8c7735fbfc0754111f00edda35cf9e98a8d478de6c47b04eaa9cef4300eaa7 \
- --hash=sha256:c634a0a6db395fdaba0361aa78395597ee72c3aad651b9a307a3a7eaf5efd67e \
- --hash=sha256:cad9971881e4fec00d96af7eaf4b63aa7a595696fc221808b0d3ce7ca9743258 \
- --hash=sha256:cbdb3f337c88b43c3b49ca377731912c101178be91cb5071aac48faa898e6f8e \
- --hash=sha256:cd8551aa21df6c60baa2624fd086ae7486bdde00c44097b32e1d1b1966e365e0 \
- --hash=sha256:d09f677693328503c9e492e33e9601464297c01f9ebd966ea8fc5308f3069bfd \
- --hash=sha256:d376a35c6561e81d2590506804b428fc1075fcc6298fc5bb49b771534c0ba010 \
- --hash=sha256:d39079379a9a28e74f4d57dc6357fa310a1977b51ff12239d7271ec7e71d67f5 \
- --hash=sha256:d86f94743a11873317094326456b23f8a5788bad9161fd2f0e52088c33564620 \
- --hash=sha256:d91e60ac44bbe3a77a67af4a4c13114cbe9f6d540337ce22f2c9eaf7454ca71f \
- --hash=sha256:d9883b2d819ce83f87ba82a746c81d14ada78784db431e57cc9719179847376e \
- --hash=sha256:e094e445c37c57e9ec612847812c301840239d34ccc5d153a982fa9814478c60 \
- --hash=sha256:e19acfde38cb532a560b98f473adc741c941b7a9bc90f7294bc273d08becb58b \
- --hash=sha256:e32d43610dff472eab939f4d7fbdd240d1667794192690433672ae22d7af8445 \
- --hash=sha256:ed028fc3d41adda916320712838aec289956c89b4f0a361ceadf83a53b4c047a \
- --hash=sha256:ef59c938f72bdbc6ab52dc50f81d0637fde0f194b02d636987cea2ab30f8f55a \
- --hash=sha256:f3d4801db8354436fd3936531e7f0e4feb411f62433a6b6cb32bb416e20b529f \
- --hash=sha256:f57aca20e637750a2c18d979f7096e2c2033cc40cf7ed201494318de1182f135 \
- --hash=sha256:f9da128d0edf990cf0d2ca011b02cd6f639e79286774bd5b0351245cbb5a6e51 \
- --hash=sha256:fbd7351d43b80d9c64c3cfcb50008f786cc82cba0450e8599fdd64f264320bd3 \
- --hash=sha256:fcb72249ac4ea81a7baefcbff74df7029c3cb1cf01a711113fa052d563639c9c \
- --hash=sha256:ff21c554304e8226bf80c3a7754be27c6c3549a9fec563a03c06ee8f494da8fc
+librt==0.7.5 \
+ --hash=sha256:060bde69c3604f694bd8ae21a780fe8be46bb3dbb863642e8dfc75c931ca8eee \
+ --hash=sha256:08153ea537609d11f774d2bfe84af39d50d5c9ca3a4d061d946e0c9d8bce04a1 \
+ --hash=sha256:0b4791202296ad51ac09a3ff58eb49d9da8e3a4009167a6d76ac418a974e5fd4 \
+ --hash=sha256:0b7f080ba30601dfa3e3deed3160352273e1b9bc92e652f51103c3e9298f7899 \
+ --hash=sha256:0e2bf8f91093fac43e3eaebacf777f12fd539dce9ec5af3efc6d8424e96ccd49 \
+ --hash=sha256:118716de5ad6726332db1801bc90fa6d94194cd2e07c1a7822cebf12c496714d \
+ --hash=sha256:168e04663e126416ba712114050f413ac306759a1791d87b7c11d4428ba75760 \
+ --hash=sha256:191cbd42660446d67cf7a95ac7bfa60f49b8b3b0417c64f216284a1d86fc9335 \
+ --hash=sha256:263f4fae9eba277513357c871275b18d14de93fd49bf5e43dc60a97b81ad5eb8 \
+ --hash=sha256:265729b551a2dd329cc47b323a182fb7961af42abf21e913c9dd7d3331b2f3c2 \
+ --hash=sha256:26b46620e1e0e45af510d9848ea0915e7040605dd2ae94ebefb6c962cbb6f7ec \
+ --hash=sha256:29c8d2fae11d4379ea207ba7fc69d43237e42cf8a9f90ec6e05993687e6d648b \
+ --hash=sha256:2fcbf2e135c11f721193aa5f42ba112bb1046afafbffd407cbc81d8d735c74d0 \
+ --hash=sha256:39183abee670bc37b85f11e86c44a9cad1ed6efa48b580083e89ecee13dd9717 \
+ --hash=sha256:3919c9407faeeee35430ae135e3a78acd4ecaaaa73767529e2c15ca1d73ba325 \
+ --hash=sha256:3c98a8d0ac9e2a7cb8ff8c53e5d6e8d82bfb2839abf144fdeaaa832f2a12aa45 \
+ --hash=sha256:3dd58f7ce20360c6ce0c04f7bd9081c7f9c19fc6129a3c705d0c5a35439f201d \
+ --hash=sha256:46aa91813c267c3f60db75d56419b42c0c0b9748ec2c568a0e3588e543fb4233 \
+ --hash=sha256:49c596cd18e90e58b7caa4d7ca7606049c1802125fcff96b8af73fa5c3870e4d \
+ --hash=sha256:532ddc6a8a6ca341b1cd7f4d999043e4c71a212b26fe9fd2e7f1e8bb4e873544 \
+ --hash=sha256:54d2aef0b0f5056f130981ad45081b278602ff3657fe16c88529f5058038e802 \
+ --hash=sha256:553dc58987d1d853adda8aeadf4db8e29749f0b11877afcc429a9ad892818ae2 \
+ --hash=sha256:584cb3e605ec45ba350962cec853e17be0a25a772f21f09f1e422f7044ae2a7d \
+ --hash=sha256:5cd3afd71e9bc146203b6c8141921e738364158d4aa7cdb9a874e2505163770f \
+ --hash=sha256:63055d3dda433ebb314c9f1819942f16a19203c454508fdb2d167613f7017169 \
+ --hash=sha256:654fdc971c76348a73af5240d8e2529265b9a7ba6321e38dd5bae7b0d4ab3abe \
+ --hash=sha256:6b7b58913d475911f6f33e8082f19dd9b120c4f4a5c911d07e395d67b81c6982 \
+ --hash=sha256:6e860909fea75baef941ee6436e0453612505883b9d0d87924d4fda27865b9a2 \
+ --hash=sha256:730be847daad773a3c898943cf67fb9845a3961d06fb79672ceb0a8cd8624cfa \
+ --hash=sha256:732e0aa0385b59a1b2545159e781c792cc58ce9c134249233a7c7250a44684c4 \
+ --hash=sha256:75965c1f4efb7234ff52a58b729d245a21e87e4b6a26a0ec08052f02b16274e4 \
+ --hash=sha256:7a488908a470451338607650f1c064175094aedebf4a4fa37890682e30ce0b57 \
+ --hash=sha256:81056e01bba1394f1d92904ec61a4078f66df785316275edbaf51d90da8c6e26 \
+ --hash=sha256:82f3f088482e2229387eadf8215c03f7726d56f69cce8c0c40f0795aebc9b361 \
+ --hash=sha256:84d4a6b9efd6124f728558a18e79e7cc5c5d4efc09b2b846c910de7e564f5bad \
+ --hash=sha256:85f485b7471571e99fab4f44eeb327dc0e1f814ada575f3fa85e698417d8a54e \
+ --hash=sha256:8a3cfb15961e7333ea6ef033dc574af75153b5c230d5ad25fbcd55198f21e0cf \
+ --hash=sha256:8bb7883c1e94ceb87c2bf81385266f032da09cd040e804cc002f2c9d6b842e2f \
+ --hash=sha256:8dcae24de1bc9da93aa689cb6313c70e776d7cea2fcf26b9b6160fedfe6bd9af \
+ --hash=sha256:9937574e6d842f359b8585903d04f5b4ab62277a091a93e02058158074dc52f2 \
+ --hash=sha256:9bbb8facc5375476d392990dd6a71f97e4cb42e2ac66f32e860f6e47299d5e89 \
+ --hash=sha256:9c08527055fbb03c641c15bbc5b79dd2942fb6a3bd8dabf141dd7e97eeea4904 \
+ --hash=sha256:9cffa3ef0af29687455161cb446eff059bf27607f95163d6a37e27bcb37180f6 \
+ --hash=sha256:9f85f9b5db87b0f52e53c68ad2a0c5a53e00afa439bd54a1723742a2b1021276 \
+ --hash=sha256:a82d5a0ee43aeae2116d7292c77cc8038f4841830ade8aa922e098933b468b9e \
+ --hash=sha256:a9eacbf983319b26b5f340a2e0cd47ac1ee4725a7f3a72fd0f15063c934b69d6 \
+ --hash=sha256:ab4b0d3bee6f6ff7017e18e576ac7e41a06697d8dea4b8f3ab9e0c8e1300c409 \
+ --hash=sha256:af69d9e159575e877c7546d1ee817b4ae089aa221dd1117e20c24ad8dc8659c7 \
+ --hash=sha256:b1795c4b2789b458fa290059062c2f5a297ddb28c31e704d27e161386469691a \
+ --hash=sha256:b591c094afd0ffda820e931148c9e48dc31a556dc5b2b9b3cc552fa710d858e4 \
+ --hash=sha256:b8e0fd344bad57026a8f4ccfaf406486c2fc991838050c2fef156170edc3b775 \
+ --hash=sha256:ba1077c562a046208a2dc6366227b3eeae8f2c2ab4b41eaf4fd2fa28cece4203 \
+ --hash=sha256:bb41f04046b4f22b1e7ba5ef513402cd2e3477ec610e5f92d38fe2bba383d419 \
+ --hash=sha256:c039bbf79a9a2498404d1ae7e29a6c175e63678d7a54013a97397c40aee026c5 \
+ --hash=sha256:c566a4672564c5d54d8ab65cdaae5a87ee14c1564c1a2ddc7a9f5811c750f023 \
+ --hash=sha256:cda8b025875946ffff5a9a7590bf9acde3eb02cb6200f06a2d3e691ef3d9955b \
+ --hash=sha256:cdb001a1a0e4f41e613bca2c0fc147fc8a7396f53fc94201cbfd8ec7cd69ca4b \
+ --hash=sha256:cdde31759bd8888f3ef0eebda80394a48961328a17c264dce8cc35f4b9cde35d \
+ --hash=sha256:d2cc7d187e8c6e9b7bdbefa9697ce897a704ea7a7ce844f2b4e0e2aa07ae51d3 \
+ --hash=sha256:d7aa33153a5bb0bac783d2c57885889b1162823384e8313d47800a0e10d0070e \
+ --hash=sha256:d7c72c8756eeb3aefb1b9e3dac7c37a4a25db63640cac0ab6fc18e91a0edf05a \
+ --hash=sha256:dd810f2d39c526c42ea205e0addad5dc08ef853c625387806a29d07f9d150d9b \
+ --hash=sha256:ddc0ab9dbc5f9ceaf2bf7a367bf01f2697660e908f6534800e88f43590b271db \
+ --hash=sha256:ddc4a16207f88f9597b397fc1f60781266d13b13de922ff61c206547a29e4bbd \
+ --hash=sha256:de4221a1181fa9c8c4b5f35506ed6f298948f44003d84d2a8b9885d7e01e6cfa \
+ --hash=sha256:df2e210400b28e50994477ebf82f055698c79797b6ee47a1669d383ca33263e1 \
+ --hash=sha256:df3146d52465b3b6397d25d513f428cb421c18df65b7378667bb5f1e3cc45805 \
+ --hash=sha256:e47fc52602ffc374e69bf1b76536dc99f7f6dd876bd786c8213eaa3598be030a \
+ --hash=sha256:e9e9c988b5ffde7be02180f864cbd17c0b0c1231c235748912ab2afa05789c25 \
+ --hash=sha256:ea1b60b86595a5dc1f57b44a801a1c4d8209c0a69518391d349973a4491408e6 \
+ --hash=sha256:edf6b465306215b19dbe6c3fb63cf374a8f3e1ad77f3b4c16544b83033bbb67b \
+ --hash=sha256:f02c4337bf271c4f06637f5ff254fad2238c0b8e32a3a480ebb2fc5e26f754a5 \
+ --hash=sha256:f7f51ffe59f4556243d3cc82d827bde74765f594fa3ceb80ec4de0c13ccd3416 \
+ --hash=sha256:f952e1a78c480edee8fb43aa2bf2e84dcd46c917d44f8065b883079d3893e8fc \
+ --hash=sha256:fb565b4219abc8ea2402e61c7ba648a62903831059ed3564fa1245cc245d58d7 \
+ --hash=sha256:fee15c2a190ef389f14928135c6fb2d25cd3fdb7887bfd9a7b444bbdc8c06b96
# via mypy
markupsafe==3.0.3 \
--hash=sha256:0303439a41979d9e74d18ff5e2dd8c43ed6c6001fd40e5bf2e43f7bd9bbc523f \
@@ -503,21 +505,21 @@ markupsafe==3.0.3 \
--hash=sha256:f9e130248f4462aaa8e2552d547f36ddadbeaa573879158d721bbd33dfe4743a \
--hash=sha256:fed51ac40f757d41b7c48425901843666a6677e3e8eb0abcff09e4ba6e664f50
# via jinja2
-maturin==1.10.2 \
- --hash=sha256:04df81ee295dcda37828bd025a4ac688ea856e3946e4cb300a8f44a448de0069 \
- --hash=sha256:07a82864352feeaf2167247c8206937ef6c6ae9533025d416b7004ade0ea601d \
- --hash=sha256:11c73815f21a755d2129c410e6cb19dbfacbc0155bfc46c706b69930c2eb794b \
- --hash=sha256:259292563da89850bf8f7d37aa4ddba22905214c1e180b1c8f55505dfd8c0e81 \
- --hash=sha256:7fbd997c5347649ee7987bd05a92bd5b8b07efa4ac3f8bcbf6196e07eb573d89 \
- --hash=sha256:96e1d391e4c1fa87edf2a37e4d53d5f2e5f39dd880b9d8306ac9f8eb212d23f8 \
- --hash=sha256:a217aa7c42aa332fb8e8377eb07314e1f02cf0fe036f614aca4575121952addd \
- --hash=sha256:a41ec70d99e27c05377be90f8e3c3def2a7bae4d0d9d5ea874aaf2d1da625d5c \
- --hash=sha256:a4c29a770ea2c76082e0afc6d4efd8ee94405588bfae00d10828f72e206c739b \
- --hash=sha256:da031771d9fb6ddb1d373638ec2556feee29e4507365cd5749a2d354bcadd818 \
- --hash=sha256:da777766fd584440dc9fecd30059a94f85e4983f58b09e438ae38ee4b494024c \
- --hash=sha256:e3ce9b2ad4fb9c341f450a6d32dc3edb409a2d582a81bc46ba55f6e3b6196b22 \
- --hash=sha256:efcd496a3202ffe0d0489df1f83d08b91399782fb2dd545d5a1e7bf6fd81af39 \
- --hash=sha256:f0d1b7b5f73c8d30a7e71cd2a2189a7f0126a3a3cd8b3d6843e7e1d4db50f759
+maturin==1.11.0 \
+ --hash=sha256:0fbe565ede0901de7743cd028ad6c13be623b1c7158641f8a50d7a4353f4a97c \
+ --hash=sha256:16cb48f1f2b6b3d8c2732f77d98d8f7f0ab84765abf0c1c82df2c8ea7d8ef2ec \
+ --hash=sha256:276a900d4096c246cc236aa00460adb3ab195c37172a9f1087bbde6a127f0780 \
+ --hash=sha256:51cadd0373950cfae6aac6823a3d2bf56e34e4efed0abae8c7d15e337d9bb5e6 \
+ --hash=sha256:83b73299f36301d943550c609e0a0dff08d21e3674c1369c10df77ce470fd97b \
+ --hash=sha256:8695b79462e1f46013993d715485db289cf5a7702aa2d9941ac333564ca20d79 \
+ --hash=sha256:8bf16fc56f4abcf3af7d5fb6dab3888f73e3648287c8efe77e14fa1b006a3ef4 \
+ --hash=sha256:95c5d778c96ab237837cd6d38e01f0bdca52c64e0d00647a69133a8e7ae4eed4 \
+ --hash=sha256:9aaaec73e120ac7add99f53d606aa6d432c8e0337af742b2ca26fb8d17181500 \
+ --hash=sha256:aa2d9db1c03e9eb0640a578caf00a6fa2d9399abb7375a970b0f6d6e934b5441 \
+ --hash=sha256:d13d3721931d407491d9b3fe161146aa78ab08a8fc9735302abee1d368aedb03 \
+ --hash=sha256:d53bde4f939dac9340aa253c2765073de6b8595a29a294503042fcbfec8bd842 \
+ --hash=sha256:dba7daeb54615532c11f8fe39bc9514b81215f6f4e91909ec227e06227c286cf \
+ --hash=sha256:debf472d3ecd76a3a750b056b99dcb64c119467dc44f0e2d6e6363acb128b96a
# via
# cryptography
# pydantic-core
@@ -784,9 +786,9 @@ types-psutil==7.0.0.20250218 \
--hash=sha256:1447a30c282aafefcf8941ece854e1100eee7b0296a9d9be9977292f0269b121 \
--hash=sha256:1e642cdafe837b240295b23b1cbd4691d80b08a07d29932143cbbae30eb0db9c
# via mypy
-types-setuptools==80.9.0.20250822 \
- --hash=sha256:070ea7716968ec67a84c7f7768d9952ff24d28b65b6594797a464f1b3066f965 \
- --hash=sha256:53bf881cb9d7e46ed12c76ef76c0aaf28cfe6211d3fab12e0b83620b1a8642c3
+types-setuptools==80.9.0.20251223 \
+ --hash=sha256:1b36db79d724c2287d83dc052cf887b47c0da6a2fff044378be0b019545f56e6 \
+ --hash=sha256:d3411059ae2f5f03985217d86ac6084efea2c9e9cacd5f0869ef950f308169b2
# via mypy
typing-extensions==4.15.0 \
--hash=sha256:0cea48d173cc12fa28ecabc3b837ea3cf6f38c6d1136f85cbaaf598984861466 \
@@ -795,9 +797,9 @@ typing-extensions==4.15.0 \
# exceptiongroup
# mypy
# setuptools-scm
-uv-dynamic-versioning==0.11.2 \
- --hash=sha256:4c785ea02e00b93896d015fd3613c451735af1715a7f5f52e8e4e1d76e6ec3c5 \
- --hash=sha256:563ab4b7a93904eb8fb8fd9f2959dad853d62baa71f3cdb0233acf8a749d512f
+uv-dynamic-versioning==0.12.0 \
+ --hash=sha256:2d2f1fb806c2e351d0d0a3840aaf7b3c6ce73757080b1ada4ac5dc44f7dd4c9e \
+ --hash=sha256:e853e0c5b2425a68005580325d4975a8c37b66015589ca45ef96e660fe0f8f16
# via mcp
versioneer==0.29 \
--hash=sha256:0f1a137bb5d6811e96a79bb0486798aeae9b9c6efc24b389659cebb0ee396cb9 \
diff --git a/sdk/python/requirements/py3.10-minimal-sdist-requirements.txt b/sdk/python/requirements/py3.10-minimal-sdist-requirements.txt
index 26ae4fa6590..1c92409c888 100644
--- a/sdk/python/requirements/py3.10-minimal-sdist-requirements.txt
+++ b/sdk/python/requirements/py3.10-minimal-sdist-requirements.txt
@@ -184,9 +184,9 @@ babel==2.17.0 \
--hash=sha256:0c54cffb19f690cdcc52a3b50bcbf71e07a808d1c80d549f2459b9d2cf0afb9d \
--hash=sha256:4d0b53093fdfb4b21c92b5213dba5a1b23885afa8383709427046b21c366e5f2
# via sphinx
-bigtree==1.0.3 \
- --hash=sha256:18402a143130868b17ca84a74ca263e6f32f046d6978c30d244f8b94c4a01227 \
- --hash=sha256:99a18b6937a9b4ab8e560fec5c0720e10ebf37f84e44f9b5f47702c2e84c9aaa
+bigtree==1.0.4 \
+ --hash=sha256:e4af0c5bc0d2cd72e18442965e4509f642b16a0de65db6d0ec116e30f959010c \
+ --hash=sha256:f58a3238bb9b1142d893c9de4921bfd18d435427c75e0c168dd580eabf6dc7fd
# via feast (setup.py)
boto3==1.38.27 \
--hash=sha256:94bd7fdd92d5701b362d4df100d21e28f8307a67ff56b6a8b0398119cf22f859 \
@@ -202,9 +202,9 @@ botocore==1.38.46 \
# boto3
# s3transfer
# snowflake-connector-python
-cachetools==6.2.2 \
- --hash=sha256:6c09c98183bf58560c97b2abfcedcbaf6a896a490f534b031b661d3723b45ace \
- --hash=sha256:8e6d266b25e539df852251cfd6f990b4bc3a141db73b939058d809ebd2590fc6
+cachetools==6.2.4 \
+ --hash=sha256:69a7a52634fed8b8bf6e24a050fb60bff1c9bd8f6d24572b99c32d4e71e62a51 \
+ --hash=sha256:82c5c05585e70b6ba2d3ae09ea60b79548872185d2f24ae1f2709d37299fd607
# via google-auth
calver==2025.3.31 \
--hash=sha256:07511edf5e7fa75ae97445c8c5921240e0fe62937289a3ebe6963eddd3c691b6 \
@@ -549,13 +549,13 @@ cython==3.0.12 \
--hash=sha256:feb86122a823937cc06e4c029d80ff69f082ebb0b959ab52a5af6cdd271c5dc3 \
--hash=sha256:ff5c0b6a65b08117d0534941d404833d516dac422eee88c6b4fd55feb409a5ed
# via feast (setup.py)
-dask[dataframe]==2025.11.0 \
- --hash=sha256:08c35a8146c05c93b34f83cf651009129c42ee71762da7ca452fb7308641c2b8 \
- --hash=sha256:23d59e624b80ee05b7cc8df858682cca58262c4c3b197ccf61da0f6543c8f7c3
+dask[dataframe]==2025.12.0 \
+ --hash=sha256:4213ce9c5d51d6d89337cff69de35d902aa0bf6abdb8a25c942a4d0281f3a598 \
+ --hash=sha256:8d478f2aabd025e2453cf733ad64559de90cf328c20209e4574e9543707c3e1b
# via feast (setup.py)
-db-dtypes==1.4.4 \
- --hash=sha256:26f53db5df1acd746b88c5647913a1b20f731c0af1b11abcb6bec5365f31098a \
- --hash=sha256:32c13039982656a8598a0835f25f0e07e34c9a423e471ee60c2553240b7fcf1e
+db-dtypes==1.5.0 \
+ --hash=sha256:abdbb2e4eb965800ed6f98af0c5c1cafff9063ace09114be2d26a7f046be2c8a \
+ --hash=sha256:ad9e94243f53e104bc77dbf9ae44b580d83a770d3694483aba59c9767966daa5
# via
# google-cloud-bigquery
# pandas-gbq
@@ -635,9 +635,9 @@ exceptiongroup==1.3.1 \
# via
# anyio
# scikit-build-core
-fastapi==0.124.0 \
- --hash=sha256:260cd178ad75e6d259991f2fd9b0fee924b224850079df576a3ba604ce58f4e6 \
- --hash=sha256:91596bdc6dde303c318f06e8d2bc75eafb341fc793a0c9c92c0bc1db1ac52480
+fastapi==0.128.0 \
+ --hash=sha256:1cc179e1cef10a6be60ffe429f79b829dce99d8de32d7acb7e6c8dfdf7f2645a \
+ --hash=sha256:aebd93f9716ee3b4f4fcfe13ffb7cf308d99c9f3ab5622d8877441072561582d
# via
# feast (setup.py)
# fastapi-mcp
@@ -645,9 +645,9 @@ fastapi-mcp==0.4.0 \
--hash=sha256:d4a3fe7966af24d44e4b412720561c95eb12bed999a4443a88221834b3b15aec \
--hash=sha256:d4ca9410996f4c7b8ea0d7b20fdf79878dc359ebf89cbf3b222e0b675a55097d
# via feast (setup.py)
-filelock==3.20.0 \
- --hash=sha256:339b4732ffda5cd79b13f4e2711a31b0365ce445d95d243bb996273d072546a2 \
- --hash=sha256:711e943b4ec6be42e1d4e6690b48dc175c822967466bb31c0c293f34334c13f4
+filelock==3.20.1 \
+ --hash=sha256:15d9e9a67306188a44baa72f569d2bfd803076269365fdea0934385da4dc361a \
+ --hash=sha256:b8360948b351b80f420878d8516519a2204b07aefcdcfd24912a5d33127f188c
# via snowflake-connector-python
flit-core==3.12.0 \
--hash=sha256:18f63100d6f94385c6ed57a72073443e1a71a4acb4339491615d0f16d6ff01b2 \
@@ -805,9 +805,9 @@ google-api-core[grpc]==2.28.1 \
# google-cloud-datastore
# google-cloud-storage
# pandas-gbq
-google-auth==2.43.0 \
- --hash=sha256:88228eee5fc21b62a1b5fe773ca15e67778cb07dc8363adcb4a8827b52d81483 \
- --hash=sha256:af628ba6fa493f75c7e9dbe9373d148ca9f4399b5ea29976519e0a3848eddd16
+google-auth==2.45.0 \
+ --hash=sha256:82344e86dc00410ef5382d99be677c6043d72e502b625aa4f4afa0bdacca0f36 \
+ --hash=sha256:90d3f41b6b72ea72dd9811e765699ee491ab24139f34ebf1ca2b9cc0c38708f3
# via
# google-api-core
# google-auth-oauthlib
@@ -826,19 +826,19 @@ google-auth-oauthlib==1.2.2 \
# via
# pandas-gbq
# pydata-google-auth
-google-cloud-bigquery[pandas]==3.38.0 \
- --hash=sha256:8afcb7116f5eac849097a344eb8bfda78b7cfaae128e60e019193dd483873520 \
- --hash=sha256:e06e93ff7b245b239945ef59cb59616057598d369edac457ebf292bd61984da6
+google-cloud-bigquery[pandas]==3.39.0 \
+ --hash=sha256:cb375e1d63dea9bd5bf735e66024338f294159d43afdf63e1d023f5fcbbf55ea \
+ --hash=sha256:dc7a64921465859105461b43c42562e38e797d7a73feb72b3cfc4865b7b1c5ef
# via
# feast (setup.py)
# pandas-gbq
-google-cloud-bigquery-storage==2.35.0 \
- --hash=sha256:c9bab6b8e41d6cb9806e589e65f320c89ada84f466e61566b7208d87924c1430 \
- --hash=sha256:f2e3a08882155de1e9ec53c71c5784eb1f25dc6514c535f5796c3c9eeac17d17
+google-cloud-bigquery-storage==2.36.0 \
+ --hash=sha256:1769e568070db672302771d2aec18341de10712aa9c4a8c549f417503e0149f0 \
+ --hash=sha256:d3c1ce9d2d3a4d7116259889dcbe3c7c70506f71f6ce6bbe54aa0a68bbba8f8f
# via feast (setup.py)
-google-cloud-bigtable==2.34.0 \
- --hash=sha256:773258b00cd3f9a3a35639cc38bd711f4f1418aaa0c8d70cb028978ed98dc2c2 \
- --hash=sha256:a4a8db4903840cd3f89fb19c060eea2e7c09c1265cb0538cfc11288dbc6000e4
+google-cloud-bigtable==2.35.0 \
+ --hash=sha256:f355bfce1f239453ec2bb3839b0f4f9937cf34ef06ef29e1ca63d58fd38d0c50 \
+ --hash=sha256:f5699012c5fea4bd4bdf7e80e5e3a812a847eb8f41bf8dc2f43095d6d876b83b
# via feast (setup.py)
google-cloud-core==2.5.0 \
--hash=sha256:67d977b41ae6c7211ee830c7912e41003ea8194bff15ae7d72fd6f51e57acabc \
@@ -848,49 +848,48 @@ google-cloud-core==2.5.0 \
# google-cloud-bigtable
# google-cloud-datastore
# google-cloud-storage
-google-cloud-datastore==2.21.0 \
- --hash=sha256:eee454dd4a55f5b327f9f344928ff1a09a6f77c23d5e3d908ad31a13cc2f4073 \
- --hash=sha256:f303f27cd1983383f20bd227019cd8a7897419e0ec6b878367c58c66245f9d9b
+google-cloud-datastore==2.23.0 \
+ --hash=sha256:24a1b1d29b902148fe41b109699f76fd3aa60591e9d547c0f8b87d7bf9ff213f \
+ --hash=sha256:80049883a4ae928fdcc661ba6803ec267665dc0e6f3ce2da91441079a6bb6387
# via feast (setup.py)
google-cloud-storage==2.19.0 \
--hash=sha256:aeb971b5c29cf8ab98445082cbfe7b161a1f48ed275822f59ed3f1524ea54fba \
--hash=sha256:cd05e9e7191ba6cb68934d8eb76054d9be4562aa89dbc4236feee4d7d51342b2
# via feast (setup.py)
-google-crc32c==1.7.1 \
- --hash=sha256:0f99eaa09a9a7e642a61e06742856eec8b19fc0037832e03f941fe7cf0c8e4db \
- --hash=sha256:19eafa0e4af11b0a4eb3974483d55d2d77ad1911e6cf6f832e1574f6781fd337 \
- --hash=sha256:1c67ca0a1f5b56162951a9dae987988679a7db682d6f97ce0f6381ebf0fbea4c \
- --hash=sha256:1f2b3522222746fff0e04a9bd0a23ea003ba3cccc8cf21385c564deb1f223242 \
- --hash=sha256:22beacf83baaf59f9d3ab2bbb4db0fb018da8e5aebdce07ef9f09fce8220285e \
- --hash=sha256:2bff2305f98846f3e825dbeec9ee406f89da7962accdb29356e4eadc251bd472 \
- --hash=sha256:2d73a68a653c57281401871dd4aeebbb6af3191dcac751a76ce430df4d403194 \
- --hash=sha256:32d1da0d74ec5634a05f53ef7df18fc646666a25efaaca9fc7dcfd4caf1d98c3 \
- --hash=sha256:3bda0fcb632d390e3ea8b6b07bf6b4f4a66c9d02dcd6fbf7ba00a197c143f582 \
- --hash=sha256:6335de12921f06e1f774d0dd1fbea6bf610abe0887a1638f64d694013138be5d \
- --hash=sha256:6b211ddaf20f7ebeec5c333448582c224a7c90a9d98826fbab82c0ddc11348e6 \
- --hash=sha256:6efb97eb4369d52593ad6f75e7e10d053cf00c48983f7a973105bc70b0ac4d82 \
- --hash=sha256:6fbab4b935989e2c3610371963ba1b86afb09537fd0c633049be82afe153ac06 \
- --hash=sha256:713121af19f1a617054c41f952294764e0c5443d5a5d9034b2cd60f5dd7e0349 \
- --hash=sha256:754561c6c66e89d55754106739e22fdaa93fafa8da7221b29c8b8e8270c6ec8a \
- --hash=sha256:7cc81b3a2fbd932a4313eb53cc7d9dde424088ca3a0337160f35d91826880c1d \
- --hash=sha256:85fef7fae11494e747c9fd1359a527e5970fc9603c90764843caabd3a16a0a48 \
- --hash=sha256:905a385140bf492ac300026717af339790921f411c0dfd9aa5a9e69a08ed32eb \
- --hash=sha256:9fc196f0b8d8bd2789352c6a522db03f89e83a0ed6b64315923c396d7a932315 \
- --hash=sha256:a8e9afc74168b0b2232fb32dd202c93e46b7d5e4bf03e66ba5dc273bb3559589 \
- --hash=sha256:b07d48faf8292b4db7c3d64ab86f950c2e94e93a11fd47271c28ba458e4a0d76 \
- --hash=sha256:b6d86616faaea68101195c6bdc40c494e4d76f41e07a37ffdef270879c15fb65 \
- --hash=sha256:b7491bdc0c7564fcf48c0179d2048ab2f7c7ba36b84ccd3a3e1c3f7a72d3bba6 \
- --hash=sha256:bb5e35dcd8552f76eed9461a23de1030920a3c953c1982f324be8f97946e7127 \
- --hash=sha256:d68e17bad8f7dd9a49181a1f5a8f4b251c6dbc8cc96fb79f1d321dfd57d66f53 \
- --hash=sha256:dcdf5a64adb747610140572ed18d011896e3b9ae5195f2514b7ff678c80f1603 \
- --hash=sha256:df8b38bdaf1629d62d51be8bdd04888f37c451564c2042d36e5812da9eff3c35 \
- --hash=sha256:e10554d4abc5238823112c2ad7e4560f96c7bf3820b202660373d769d9e6e4c9 \
- --hash=sha256:e42e20a83a29aa2709a0cf271c7f8aefaa23b7ab52e53b322585297bb94d4638 \
- --hash=sha256:ed66cbe1ed9cbaaad9392b5259b3eba4a9e565420d734e6238813c428c3336c9 \
- --hash=sha256:ee6547b657621b6cbed3562ea7826c3e11cab01cd33b74e1f677690652883e77 \
- --hash=sha256:f2226b6a8da04f1d9e61d3e357f2460b9551c5e6950071437e122c958a18ae14 \
- --hash=sha256:fa8136cc14dd27f34a3221c0f16fd42d8a40e4778273e61a3c19aedaa44daf6b \
- --hash=sha256:fc5319db92daa516b653600794d5b9f9439a9a121f3e162f94b0e1891c7933cb
+google-crc32c==1.8.0 \
+ --hash=sha256:014a7e68d623e9a4222d663931febc3033c5c7c9730785727de2a81f87d5bab8 \
+ --hash=sha256:01f126a5cfddc378290de52095e2c7052be2ba7656a9f0caf4bcd1bfb1833f8a \
+ --hash=sha256:0470b8c3d73b5f4e3300165498e4cf25221c7eb37f1159e221d1825b6df8a7ff \
+ --hash=sha256:119fcd90c57c89f30040b47c211acee231b25a45d225e3225294386f5d258288 \
+ --hash=sha256:14f87e04d613dfa218d6135e81b78272c3b904e2a7053b841481b38a7d901411 \
+ --hash=sha256:17446feb05abddc187e5441a45971b8394ea4c1b6efd88ab0af393fd9e0a156a \
+ --hash=sha256:19b40d637a54cb71e0829179f6cb41835f0fbd9e8eb60552152a8b52c36cbe15 \
+ --hash=sha256:2a3dc3318507de089c5384cc74d54318401410f82aa65b2d9cdde9d297aca7cb \
+ --hash=sha256:3b9776774b24ba76831609ffbabce8cdf6fa2bd5e9df37b594221c7e333a81fa \
+ --hash=sha256:3cc0c8912038065eafa603b238abf252e204accab2a704c63b9e14837a854962 \
+ --hash=sha256:3d488e98b18809f5e322978d4506373599c0c13e6c5ad13e53bb44758e18d215 \
+ --hash=sha256:3ebb04528e83b2634857f43f9bb8ef5b2bbe7f10f140daeb01b58f972d04736b \
+ --hash=sha256:450dc98429d3e33ed2926fc99ee81001928d63460f8538f21a5d6060912a8e27 \
+ --hash=sha256:4b8286b659c1335172e39563ab0a768b8015e88e08329fa5321f774275fc3113 \
+ --hash=sha256:57a50a9035b75643996fbf224d6661e386c7162d1dfdab9bc4ca790947d1007f \
+ --hash=sha256:61f58b28e0b21fcb249a8247ad0db2e64114e201e2e9b4200af020f3b6242c9f \
+ --hash=sha256:6f35aaffc8ccd81ba3162443fabb920e65b1f20ab1952a31b13173a67811467d \
+ --hash=sha256:71734788a88f551fbd6a97be9668a0020698e07b2bf5b3aa26a36c10cdfb27b2 \
+ --hash=sha256:864abafe7d6e2c4c66395c1eb0fe12dc891879769b52a3d56499612ca93b6092 \
+ --hash=sha256:86cfc00fe45a0ac7359e5214a1704e51a99e757d0272554874f419f79838c5f7 \
+ --hash=sha256:87b0072c4ecc9505cfa16ee734b00cd7721d20a0f595be4d40d3d21b41f65ae2 \
+ --hash=sha256:87fa445064e7db928226b2e6f0d5304ab4cd0339e664a4e9a25029f384d9bb93 \
+ --hash=sha256:89c17d53d75562edfff86679244830599ee0a48efc216200691de8b02ab6b2b8 \
+ --hash=sha256:8b3f68782f3cbd1bce027e48768293072813469af6a61a86f6bb4977a4380f21 \
+ --hash=sha256:a428e25fb7691024de47fecfbff7ff957214da51eddded0da0ae0e0f03a2cf79 \
+ --hash=sha256:b0d1a7afc6e8e4635564ba8aa5c0548e3173e41b6384d7711a9123165f582de2 \
+ --hash=sha256:ba6aba18daf4d36ad4412feede6221414692f44d17e5428bdd81ad3fc1eee5dc \
+ --hash=sha256:cb5c869c2923d56cb0c8e6bcdd73c009c36ae39b652dbe46a05eb4ef0ad01454 \
+ --hash=sha256:d511b3153e7011a27ab6ee6bb3a5404a55b994dc1a7322c0b87b29606d9790e2 \
+ --hash=sha256:db3fe8eaf0612fc8b20fa21a5f25bd785bc3cd5be69f8f3412b0ac2ffd49e733 \
+ --hash=sha256:e6584b12cb06796d285d09e33f63309a09368b9d806a551d8036a4207ea43697 \
+ --hash=sha256:f4b51844ef67d6cf2e9425983274da75f18b1597bb2c998e1c0a0e8d46f8f651 \
+ --hash=sha256:f639065ea2042d5c034bf258a9f085eaa7af0cd250667c0635a3118e8f92c69c
# via
# google-cloud-bigtable
# google-cloud-storage
@@ -1023,6 +1022,7 @@ grpcio==1.62.3 \
# google-api-core
# google-cloud-bigquery
# google-cloud-bigquery-storage
+ # google-cloud-datastore
# googleapis-common-protos
# grpc-google-iam-v1
# grpcio-health-checking
@@ -1246,9 +1246,9 @@ imagesize==1.4.1 \
--hash=sha256:0d8d18d08f840c19d0ee7ca1fd82490fdc3729b7ac93f49870406ddde8ef8d8b \
--hash=sha256:69150444affb9cb0d5cc5a92b3676f0b2fb7cd9ae39e947a5e11a36b4497cd4a
# via sphinx
-importlib-metadata==8.7.0 \
- --hash=sha256:d13b81ad223b890aa16c5471f2ac3056cf76c5f10f82d6f9292f0b415f389000 \
- --hash=sha256:e5dd1551894c77868a30651cef00984d50e1002d06942a7101d34870c5f02afd
+importlib-metadata==8.7.1 \
+ --hash=sha256:49fef1ae6440c182052f407c8d34a68f72efc36db9ca90dc0113398f2fdde8bb \
+ --hash=sha256:5a1f80bf1daa489495071efbb095d75a634cf28a8bc299581244063b53176151
# via dask
jinja2==3.1.6 \
--hash=sha256:0137fb05990d35f1275a587e9aee6d56da821fc83491a0fb838183be43f66d6d \
@@ -1278,83 +1278,83 @@ kubernetes==33.1.0 \
--hash=sha256:544de42b24b64287f7e0aa9513c93cb503f7f40eea39b20f66810011a86eabc5 \
--hash=sha256:f64d829843a54c251061a8e7a14523b521f2dc5c896cf6d65ccf348648a88993
# via feast (setup.py)
-librt==0.7.3 \
- --hash=sha256:020c6db391268bcc8ce75105cb572df8cb659a43fd347366aaa407c366e5117a \
- --hash=sha256:0fa9ac2e49a6bee56e47573a6786cb635e128a7b12a0dc7851090037c0d397a3 \
- --hash=sha256:11ad45122bbed42cfc8b0597450660126ef28fd2d9ae1a219bc5af8406f95678 \
- --hash=sha256:120dd21d46ff875e849f1aae19346223cf15656be489242fe884036b23d39e93 \
- --hash=sha256:14569ac5dd38cfccf0a14597a88038fb16811a6fede25c67b79c6d50fc2c8fdc \
- --hash=sha256:1617bea5ab31266e152871208502ee943cb349c224846928a1173c864261375e \
- --hash=sha256:170cdb8436188347af17bf9cccf3249ba581c933ed56d926497119d4cf730cec \
- --hash=sha256:1975eda520957c6e0eb52d12968dd3609ffb7eef05d4223d097893d6daf1d8a7 \
- --hash=sha256:1fe603877e1865b5fd047a5e40379509a4a60204aa7aa0f72b16f7a41c3f0712 \
- --hash=sha256:24d70810f6e2ea853ff79338001533716b373cc0f63e2a0be5bc96129edb5fb5 \
- --hash=sha256:256793988bff98040de23c57cf36e1f4c2f2dc3dcd17537cdac031d3b681db71 \
- --hash=sha256:25711f364c64cab2c910a0247e90b51421e45dbc8910ceeb4eac97a9e132fc6f \
- --hash=sha256:2682162855a708e3270eba4b92026b93f8257c3e65278b456c77631faf0f4f7a \
- --hash=sha256:2cf9d73499486ce39eebbff5f42452518cc1f88d8b7ea4a711ab32962b176ee2 \
- --hash=sha256:2e40520c37926166c24d0c2e0f3bc3a5f46646c34bdf7b4ea9747c297d6ee809 \
- --hash=sha256:2e980cf1ed1a2420a6424e2ed884629cdead291686f1048810a817de07b5eb18 \
- --hash=sha256:2f03484b54bf4ae80ab2e504a8d99d20d551bfe64a7ec91e218010b467d77093 \
- --hash=sha256:35f1609e3484a649bb80431310ddbec81114cd86648f1d9482bc72a3b86ded2e \
- --hash=sha256:399938edbd3d78339f797d685142dd8a623dfaded023cf451033c85955e4838a \
- --hash=sha256:399bbd7bcc1633c3e356ae274a1deb8781c7bf84d9c7962cc1ae0c6e87837292 \
- --hash=sha256:3ec50cf65235ff5c02c5b747748d9222e564ad48597122a361269dd3aa808798 \
- --hash=sha256:3edbf257c40d21a42615e9e332a6b10a8bacaaf58250aed8552a14a70efd0d65 \
- --hash=sha256:440c788f707c061d237c1e83edf6164ff19f5c0f823a3bf054e88804ebf971ec \
- --hash=sha256:44b3689b040df57f492e02cd4f0bacd1b42c5400e4b8048160c9d5e866de8abe \
- --hash=sha256:4887c29cadbdc50640179e3861c276325ff2986791e6044f73136e6e798ff806 \
- --hash=sha256:5460d99ed30f043595bbdc888f542bad2caeb6226b01c33cda3ae444e8f82d42 \
- --hash=sha256:550fdbfbf5bba6a2960b27376ca76d6aaa2bd4b1a06c4255edd8520c306fcfc0 \
- --hash=sha256:56f2a47beda8409061bc1c865bef2d4bd9ff9255219402c0817e68ab5ad89aed \
- --hash=sha256:572a24fc5958c61431da456a0ef1eeea6b4989d81eeb18b8e5f1f3077592200b \
- --hash=sha256:59cb0470612d21fa1efddfa0dd710756b50d9c7fb6c1236bbf8ef8529331dc70 \
- --hash=sha256:6038ccbd5968325a5d6fd393cf6e00b622a8de545f0994b89dd0f748dcf3e19e \
- --hash=sha256:6488e69d408b492e08bfb68f20c4a899a354b4386a446ecd490baff8d0862720 \
- --hash=sha256:687403cced6a29590e6be6964463835315905221d797bc5c934a98750fe1a9af \
- --hash=sha256:6b407c23f16ccc36614c136251d6b32bf30de7a57f8e782378f1107be008ddb0 \
- --hash=sha256:6b4e7bff1d76dd2b46443078519dc75df1b5e01562345f0bb740cea5266d8218 \
- --hash=sha256:6bdd9adfca615903578d2060ee8a6eb1c24eaf54919ff0ddc820118e5718931b \
- --hash=sha256:6eb9295c730e26b849ed1f4022735f36863eb46b14b6e10604c1c39b8b5efaea \
- --hash=sha256:703456146dc2bf430f7832fd1341adac5c893ec3c1430194fdcefba00012555c \
- --hash=sha256:754a0d09997095ad764ccef050dd5bf26cbf457aab9effcba5890dad081d879e \
- --hash=sha256:7af7785f5edd1f418da09a8cdb9ec84b0213e23d597413e06525340bcce1ea4f \
- --hash=sha256:7b29e97273bd6999e2bfe9fe3531b1f4f64effd28327bced048a33e49b99674a \
- --hash=sha256:7b4f57f7a0c65821c5441d98c47ff7c01d359b1e12328219709bdd97fdd37f90 \
- --hash=sha256:8837d5a52a2d7aa9f4c3220a8484013aed1d8ad75240d9a75ede63709ef89055 \
- --hash=sha256:8ccadf260bb46a61b9c7e89e2218f6efea9f3eeaaab4e3d1f58571890e54858e \
- --hash=sha256:8d8cf653e798ee4c4e654062b633db36984a1572f68c3aa25e364a0ddfbbb910 \
- --hash=sha256:93b2a1f325fefa1482516ced160c8c7b4b8d53226763fa6c93d151fa25164207 \
- --hash=sha256:9f0e0927efe87cd42ad600628e595a1a0aa1c64f6d0b55f7e6059079a428641a \
- --hash=sha256:a59a69deeb458c858b8fea6acf9e2acd5d755d76cd81a655256bc65c20dfff5b \
- --hash=sha256:a9f9b661f82693eb56beb0605156c7fca57f535704ab91837405913417d6990b \
- --hash=sha256:abfc57cab3c53c4546aee31859ef06753bfc136c9d208129bad23e2eca39155a \
- --hash=sha256:aca73d70c3f553552ba9133d4a09e767dcfeee352d8d8d3eb3f77e38a3beb3ed \
- --hash=sha256:adeaa886d607fb02563c1f625cf2ee58778a2567c0c109378da8f17ec3076ad7 \
- --hash=sha256:b278a9248a4e3260fee3db7613772ca9ab6763a129d6d6f29555e2f9b168216d \
- --hash=sha256:b7c1239b64b70be7759554ad1a86288220bbb04d68518b527783c4ad3fb4f80b \
- --hash=sha256:bf8c7735fbfc0754111f00edda35cf9e98a8d478de6c47b04eaa9cef4300eaa7 \
- --hash=sha256:c634a0a6db395fdaba0361aa78395597ee72c3aad651b9a307a3a7eaf5efd67e \
- --hash=sha256:cad9971881e4fec00d96af7eaf4b63aa7a595696fc221808b0d3ce7ca9743258 \
- --hash=sha256:cbdb3f337c88b43c3b49ca377731912c101178be91cb5071aac48faa898e6f8e \
- --hash=sha256:cd8551aa21df6c60baa2624fd086ae7486bdde00c44097b32e1d1b1966e365e0 \
- --hash=sha256:d09f677693328503c9e492e33e9601464297c01f9ebd966ea8fc5308f3069bfd \
- --hash=sha256:d376a35c6561e81d2590506804b428fc1075fcc6298fc5bb49b771534c0ba010 \
- --hash=sha256:d39079379a9a28e74f4d57dc6357fa310a1977b51ff12239d7271ec7e71d67f5 \
- --hash=sha256:d86f94743a11873317094326456b23f8a5788bad9161fd2f0e52088c33564620 \
- --hash=sha256:d91e60ac44bbe3a77a67af4a4c13114cbe9f6d540337ce22f2c9eaf7454ca71f \
- --hash=sha256:d9883b2d819ce83f87ba82a746c81d14ada78784db431e57cc9719179847376e \
- --hash=sha256:e094e445c37c57e9ec612847812c301840239d34ccc5d153a982fa9814478c60 \
- --hash=sha256:e19acfde38cb532a560b98f473adc741c941b7a9bc90f7294bc273d08becb58b \
- --hash=sha256:e32d43610dff472eab939f4d7fbdd240d1667794192690433672ae22d7af8445 \
- --hash=sha256:ed028fc3d41adda916320712838aec289956c89b4f0a361ceadf83a53b4c047a \
- --hash=sha256:ef59c938f72bdbc6ab52dc50f81d0637fde0f194b02d636987cea2ab30f8f55a \
- --hash=sha256:f3d4801db8354436fd3936531e7f0e4feb411f62433a6b6cb32bb416e20b529f \
- --hash=sha256:f57aca20e637750a2c18d979f7096e2c2033cc40cf7ed201494318de1182f135 \
- --hash=sha256:f9da128d0edf990cf0d2ca011b02cd6f639e79286774bd5b0351245cbb5a6e51 \
- --hash=sha256:fbd7351d43b80d9c64c3cfcb50008f786cc82cba0450e8599fdd64f264320bd3 \
- --hash=sha256:fcb72249ac4ea81a7baefcbff74df7029c3cb1cf01a711113fa052d563639c9c \
- --hash=sha256:ff21c554304e8226bf80c3a7754be27c6c3549a9fec563a03c06ee8f494da8fc
+librt==0.7.5 \
+ --hash=sha256:060bde69c3604f694bd8ae21a780fe8be46bb3dbb863642e8dfc75c931ca8eee \
+ --hash=sha256:08153ea537609d11f774d2bfe84af39d50d5c9ca3a4d061d946e0c9d8bce04a1 \
+ --hash=sha256:0b4791202296ad51ac09a3ff58eb49d9da8e3a4009167a6d76ac418a974e5fd4 \
+ --hash=sha256:0b7f080ba30601dfa3e3deed3160352273e1b9bc92e652f51103c3e9298f7899 \
+ --hash=sha256:0e2bf8f91093fac43e3eaebacf777f12fd539dce9ec5af3efc6d8424e96ccd49 \
+ --hash=sha256:118716de5ad6726332db1801bc90fa6d94194cd2e07c1a7822cebf12c496714d \
+ --hash=sha256:168e04663e126416ba712114050f413ac306759a1791d87b7c11d4428ba75760 \
+ --hash=sha256:191cbd42660446d67cf7a95ac7bfa60f49b8b3b0417c64f216284a1d86fc9335 \
+ --hash=sha256:263f4fae9eba277513357c871275b18d14de93fd49bf5e43dc60a97b81ad5eb8 \
+ --hash=sha256:265729b551a2dd329cc47b323a182fb7961af42abf21e913c9dd7d3331b2f3c2 \
+ --hash=sha256:26b46620e1e0e45af510d9848ea0915e7040605dd2ae94ebefb6c962cbb6f7ec \
+ --hash=sha256:29c8d2fae11d4379ea207ba7fc69d43237e42cf8a9f90ec6e05993687e6d648b \
+ --hash=sha256:2fcbf2e135c11f721193aa5f42ba112bb1046afafbffd407cbc81d8d735c74d0 \
+ --hash=sha256:39183abee670bc37b85f11e86c44a9cad1ed6efa48b580083e89ecee13dd9717 \
+ --hash=sha256:3919c9407faeeee35430ae135e3a78acd4ecaaaa73767529e2c15ca1d73ba325 \
+ --hash=sha256:3c98a8d0ac9e2a7cb8ff8c53e5d6e8d82bfb2839abf144fdeaaa832f2a12aa45 \
+ --hash=sha256:3dd58f7ce20360c6ce0c04f7bd9081c7f9c19fc6129a3c705d0c5a35439f201d \
+ --hash=sha256:46aa91813c267c3f60db75d56419b42c0c0b9748ec2c568a0e3588e543fb4233 \
+ --hash=sha256:49c596cd18e90e58b7caa4d7ca7606049c1802125fcff96b8af73fa5c3870e4d \
+ --hash=sha256:532ddc6a8a6ca341b1cd7f4d999043e4c71a212b26fe9fd2e7f1e8bb4e873544 \
+ --hash=sha256:54d2aef0b0f5056f130981ad45081b278602ff3657fe16c88529f5058038e802 \
+ --hash=sha256:553dc58987d1d853adda8aeadf4db8e29749f0b11877afcc429a9ad892818ae2 \
+ --hash=sha256:584cb3e605ec45ba350962cec853e17be0a25a772f21f09f1e422f7044ae2a7d \
+ --hash=sha256:5cd3afd71e9bc146203b6c8141921e738364158d4aa7cdb9a874e2505163770f \
+ --hash=sha256:63055d3dda433ebb314c9f1819942f16a19203c454508fdb2d167613f7017169 \
+ --hash=sha256:654fdc971c76348a73af5240d8e2529265b9a7ba6321e38dd5bae7b0d4ab3abe \
+ --hash=sha256:6b7b58913d475911f6f33e8082f19dd9b120c4f4a5c911d07e395d67b81c6982 \
+ --hash=sha256:6e860909fea75baef941ee6436e0453612505883b9d0d87924d4fda27865b9a2 \
+ --hash=sha256:730be847daad773a3c898943cf67fb9845a3961d06fb79672ceb0a8cd8624cfa \
+ --hash=sha256:732e0aa0385b59a1b2545159e781c792cc58ce9c134249233a7c7250a44684c4 \
+ --hash=sha256:75965c1f4efb7234ff52a58b729d245a21e87e4b6a26a0ec08052f02b16274e4 \
+ --hash=sha256:7a488908a470451338607650f1c064175094aedebf4a4fa37890682e30ce0b57 \
+ --hash=sha256:81056e01bba1394f1d92904ec61a4078f66df785316275edbaf51d90da8c6e26 \
+ --hash=sha256:82f3f088482e2229387eadf8215c03f7726d56f69cce8c0c40f0795aebc9b361 \
+ --hash=sha256:84d4a6b9efd6124f728558a18e79e7cc5c5d4efc09b2b846c910de7e564f5bad \
+ --hash=sha256:85f485b7471571e99fab4f44eeb327dc0e1f814ada575f3fa85e698417d8a54e \
+ --hash=sha256:8a3cfb15961e7333ea6ef033dc574af75153b5c230d5ad25fbcd55198f21e0cf \
+ --hash=sha256:8bb7883c1e94ceb87c2bf81385266f032da09cd040e804cc002f2c9d6b842e2f \
+ --hash=sha256:8dcae24de1bc9da93aa689cb6313c70e776d7cea2fcf26b9b6160fedfe6bd9af \
+ --hash=sha256:9937574e6d842f359b8585903d04f5b4ab62277a091a93e02058158074dc52f2 \
+ --hash=sha256:9bbb8facc5375476d392990dd6a71f97e4cb42e2ac66f32e860f6e47299d5e89 \
+ --hash=sha256:9c08527055fbb03c641c15bbc5b79dd2942fb6a3bd8dabf141dd7e97eeea4904 \
+ --hash=sha256:9cffa3ef0af29687455161cb446eff059bf27607f95163d6a37e27bcb37180f6 \
+ --hash=sha256:9f85f9b5db87b0f52e53c68ad2a0c5a53e00afa439bd54a1723742a2b1021276 \
+ --hash=sha256:a82d5a0ee43aeae2116d7292c77cc8038f4841830ade8aa922e098933b468b9e \
+ --hash=sha256:a9eacbf983319b26b5f340a2e0cd47ac1ee4725a7f3a72fd0f15063c934b69d6 \
+ --hash=sha256:ab4b0d3bee6f6ff7017e18e576ac7e41a06697d8dea4b8f3ab9e0c8e1300c409 \
+ --hash=sha256:af69d9e159575e877c7546d1ee817b4ae089aa221dd1117e20c24ad8dc8659c7 \
+ --hash=sha256:b1795c4b2789b458fa290059062c2f5a297ddb28c31e704d27e161386469691a \
+ --hash=sha256:b591c094afd0ffda820e931148c9e48dc31a556dc5b2b9b3cc552fa710d858e4 \
+ --hash=sha256:b8e0fd344bad57026a8f4ccfaf406486c2fc991838050c2fef156170edc3b775 \
+ --hash=sha256:ba1077c562a046208a2dc6366227b3eeae8f2c2ab4b41eaf4fd2fa28cece4203 \
+ --hash=sha256:bb41f04046b4f22b1e7ba5ef513402cd2e3477ec610e5f92d38fe2bba383d419 \
+ --hash=sha256:c039bbf79a9a2498404d1ae7e29a6c175e63678d7a54013a97397c40aee026c5 \
+ --hash=sha256:c566a4672564c5d54d8ab65cdaae5a87ee14c1564c1a2ddc7a9f5811c750f023 \
+ --hash=sha256:cda8b025875946ffff5a9a7590bf9acde3eb02cb6200f06a2d3e691ef3d9955b \
+ --hash=sha256:cdb001a1a0e4f41e613bca2c0fc147fc8a7396f53fc94201cbfd8ec7cd69ca4b \
+ --hash=sha256:cdde31759bd8888f3ef0eebda80394a48961328a17c264dce8cc35f4b9cde35d \
+ --hash=sha256:d2cc7d187e8c6e9b7bdbefa9697ce897a704ea7a7ce844f2b4e0e2aa07ae51d3 \
+ --hash=sha256:d7aa33153a5bb0bac783d2c57885889b1162823384e8313d47800a0e10d0070e \
+ --hash=sha256:d7c72c8756eeb3aefb1b9e3dac7c37a4a25db63640cac0ab6fc18e91a0edf05a \
+ --hash=sha256:dd810f2d39c526c42ea205e0addad5dc08ef853c625387806a29d07f9d150d9b \
+ --hash=sha256:ddc0ab9dbc5f9ceaf2bf7a367bf01f2697660e908f6534800e88f43590b271db \
+ --hash=sha256:ddc4a16207f88f9597b397fc1f60781266d13b13de922ff61c206547a29e4bbd \
+ --hash=sha256:de4221a1181fa9c8c4b5f35506ed6f298948f44003d84d2a8b9885d7e01e6cfa \
+ --hash=sha256:df2e210400b28e50994477ebf82f055698c79797b6ee47a1669d383ca33263e1 \
+ --hash=sha256:df3146d52465b3b6397d25d513f428cb421c18df65b7378667bb5f1e3cc45805 \
+ --hash=sha256:e47fc52602ffc374e69bf1b76536dc99f7f6dd876bd786c8213eaa3598be030a \
+ --hash=sha256:e9e9c988b5ffde7be02180f864cbd17c0b0c1231c235748912ab2afa05789c25 \
+ --hash=sha256:ea1b60b86595a5dc1f57b44a801a1c4d8209c0a69518391d349973a4491408e6 \
+ --hash=sha256:edf6b465306215b19dbe6c3fb63cf374a8f3e1ad77f3b4c16544b83033bbb67b \
+ --hash=sha256:f02c4337bf271c4f06637f5ff254fad2238c0b8e32a3a480ebb2fc5e26f754a5 \
+ --hash=sha256:f7f51ffe59f4556243d3cc82d827bde74765f594fa3ceb80ec4de0c13ccd3416 \
+ --hash=sha256:f952e1a78c480edee8fb43aa2bf2e84dcd46c917d44f8065b883079d3893e8fc \
+ --hash=sha256:fb565b4219abc8ea2402e61c7ba648a62903831059ed3564fa1245cc245d58d7 \
+ --hash=sha256:fee15c2a190ef389f14928135c6fb2d25cd3fdb7887bfd9a7b444bbdc8c06b96
# via mypy
locket==1.0.0 \
--hash=sha256:5c0d4c052a8bbbf750e056a8e65ccd309086f4f0f18a2eac306a8dfa4112a632 \
@@ -1455,9 +1455,9 @@ markupsafe==3.0.3 \
--hash=sha256:f9e130248f4462aaa8e2552d547f36ddadbeaa573879158d721bbd33dfe4743a \
--hash=sha256:fed51ac40f757d41b7c48425901843666a6677e3e8eb0abcff09e4ba6e664f50
# via jinja2
-mcp==1.23.3 \
- --hash=sha256:32768af4b46a1b4f7df34e2bfdf5c6011e7b63d7f1b0e321d0fdef4cd6082031 \
- --hash=sha256:b3b0da2cc949950ce1259c7bfc1b081905a51916fcd7c8182125b85e70825201
+mcp==1.25.0 \
+ --hash=sha256:56310361ebf0364e2d438e5b45f7668cbb124e158bb358333cd06e49e83a6802 \
+ --hash=sha256:b37c38144a666add0862614cc79ec276e97d72aa8ca26d622818d4e278b9721a
# via fastapi-mcp
mdurl==0.1.2 \
--hash=sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8 \
@@ -1747,45 +1747,45 @@ multidict==6.7.0 \
# aiobotocore
# aiohttp
# yarl
-mypy==1.19.0 \
- --hash=sha256:0c01c99d626380752e527d5ce8e69ffbba2046eb8a060db0329690849cf9b6f9 \
- --hash=sha256:0dde5cb375cb94deff0d4b548b993bec52859d1651e073d63a1386d392a95495 \
- --hash=sha256:0e3c3d1e1d62e678c339e7ade72746a9e0325de42cd2cccc51616c7b2ed1a018 \
- --hash=sha256:0ea4fd21bb48f0da49e6d3b37ef6bd7e8228b9fe41bbf4d80d9364d11adbd43c \
- --hash=sha256:0fb3115cb8fa7c5f887c8a8d81ccdcb94cff334684980d847e5a62e926910e1d \
- --hash=sha256:11f7254c15ab3f8ed68f8e8f5cbe88757848df793e31c36aaa4d4f9783fd08ab \
- --hash=sha256:120cffe120cca5c23c03c77f84abc0c14c5d2e03736f6c312480020082f1994b \
- --hash=sha256:16f76ff3f3fd8137aadf593cb4607d82634fca675e8211ad75c43d86033ee6c6 \
- --hash=sha256:1cf9c59398db1c68a134b0b5354a09a1e124523f00bacd68e553b8bd16ff3299 \
- --hash=sha256:318ba74f75899b0e78b847d8c50821e4c9637c79d9a59680fc1259f29338cb3e \
- --hash=sha256:3210d87b30e6af9c8faed61be2642fcbe60ef77cec64fa1ef810a630a4cf671c \
- --hash=sha256:34ec1ac66d31644f194b7c163d7f8b8434f1b49719d403a5d26c87fff7e913f7 \
- --hash=sha256:37af5166f9475872034b56c5efdcf65ee25394e9e1d172907b84577120714364 \
- --hash=sha256:3ad925b14a0bb99821ff6f734553294aa6a3440a8cb082fe1f5b84dfb662afb1 \
- --hash=sha256:510c014b722308c9bd377993bcbf9a07d7e0692e5fa8fc70e639c1eb19fc6bee \
- --hash=sha256:6016c52ab209919b46169651b362068f632efcd5eb8ef9d1735f6f86da7853b2 \
- --hash=sha256:6148ede033982a8c5ca1143de34c71836a09f105068aaa8b7d5edab2b053e6c8 \
- --hash=sha256:63ea6a00e4bd6822adbfc75b02ab3653a17c02c4347f5bb0cf1d5b9df3a05835 \
- --hash=sha256:7686ed65dbabd24d20066f3115018d2dce030d8fa9db01aa9f0a59b6813e9f9e \
- --hash=sha256:7a500ab5c444268a70565e374fc803972bfd1f09545b13418a5174e29883dab7 \
- --hash=sha256:8f44f2ae3c58421ee05fe609160343c25f70e3967f6e32792b5a78006a9d850f \
- --hash=sha256:a18d8abdda14035c5718acb748faec09571432811af129bf0d9e7b2d6699bf18 \
- --hash=sha256:a31e4c28e8ddb042c84c5e977e28a21195d086aaffaf08b016b78e19c9ef8106 \
- --hash=sha256:a9ac09e52bb0f7fb912f5d2a783345c72441a08ef56ce3e17c1752af36340a39 \
- --hash=sha256:b9d491295825182fba01b6ffe2c6fe4e5a49dbf4e2bb4d1217b6ced3b4797bc6 \
- --hash=sha256:c14a98bc63fd867530e8ec82f217dae29d0550c86e70debc9667fff1ec83284e \
- --hash=sha256:c3385246593ac2b97f155a0e9639be906e73534630f663747c71908dfbf26134 \
- --hash=sha256:cabbee74f29aa9cd3b444ec2f1e4fa5a9d0d746ce7567a6a609e224429781f53 \
- --hash=sha256:cb64b0ba5980466a0f3f9990d1c582bcab8db12e29815ecb57f1408d99b4bff7 \
- --hash=sha256:cf7d84f497f78b682edd407f14a7b6e1a2212b433eedb054e2081380b7395aa3 \
- --hash=sha256:e2c1101ab41d01303103ab6ef82cbbfedb81c1a060c868fa7cc013d573d37ab5 \
- --hash=sha256:f188dcf16483b3e59f9278c4ed939ec0254aa8a60e8fc100648d9ab5ee95a431 \
- --hash=sha256:f2e36bed3c6d9b5f35d28b63ca4b727cb0228e480826ffc8953d1892ddc8999d \
- --hash=sha256:f3e19e3b897562276bb331074d64c076dbdd3e79213f36eed4e592272dabd760 \
- --hash=sha256:f6b874ca77f733222641e5c46e4711648c4037ea13646fd0cdc814c2eaec2528 \
- --hash=sha256:f75e60aca3723a23511948539b0d7ed514dda194bc3755eae0bfc7a6b4887aa7 \
- --hash=sha256:fc51a5b864f73a3a182584b1ac75c404396a17eced54341629d8bdcb644a5bba \
- --hash=sha256:fd4a985b2e32f23bead72e2fb4bbe5d6aceee176be471243bd831d5b2644672d
+mypy==1.19.1 \
+ --hash=sha256:016f2246209095e8eda7538944daa1d60e1e8134d98983b9fc1e92c1fc0cb8dd \
+ --hash=sha256:022ea7279374af1a5d78dfcab853fe6a536eebfda4b59deab53cd21f6cd9f00b \
+ --hash=sha256:06e6170bd5836770e8104c8fdd58e5e725cfeb309f0a6c681a811f557e97eac1 \
+ --hash=sha256:19d88bb05303fe63f71dd2c6270daca27cb9401c4ca8255fe50d1d920e0eb9ba \
+ --hash=sha256:21761006a7f497cb0d4de3d8ef4ca70532256688b0523eee02baf9eec895e27b \
+ --hash=sha256:28902ee51f12e0f19e1e16fbe2f8f06b6637f482c459dd393efddd0ec7f82045 \
+ --hash=sha256:2899753e2f61e571b3971747e302d5f420c3fd09650e1951e99f823bc3089dac \
+ --hash=sha256:2abb24cf3f17864770d18d673c85235ba52456b36a06b6afc1e07c1fdcd3d0e6 \
+ --hash=sha256:34c81968774648ab5ac09c29a375fdede03ba253f8f8287847bd480782f73a6a \
+ --hash=sha256:409088884802d511ee52ca067707b90c883426bd95514e8cfda8281dc2effe24 \
+ --hash=sha256:481daf36a4c443332e2ae9c137dfee878fcea781a2e3f895d54bd3002a900957 \
+ --hash=sha256:4b84a7a18f41e167f7995200a1d07a4a6810e89d29859df936f1c3923d263042 \
+ --hash=sha256:4f28f99c824ecebcdaa2e55d82953e38ff60ee5ec938476796636b86afa3956e \
+ --hash=sha256:5f05aa3d375b385734388e844bc01733bd33c644ab48e9684faa54e5389775ec \
+ --hash=sha256:7bcfc336a03a1aaa26dfce9fff3e287a3ba99872a157561cbfcebe67c13308e3 \
+ --hash=sha256:804bd67b8054a85447c8954215a906d6eff9cabeabe493fb6334b24f4bfff718 \
+ --hash=sha256:8bb5c6f6d043655e055be9b542aa5f3bdd30e4f3589163e85f93f3640060509f \
+ --hash=sha256:a009ffa5a621762d0c926a078c2d639104becab69e79538a494bcccb62cc0331 \
+ --hash=sha256:a8174a03289288c1f6c46d55cef02379b478bfbc8e358e02047487cad44c6ca1 \
+ --hash=sha256:ab43590f9cd5108f41aacf9fca31841142c786827a74ab7cc8a2eacb634e09a1 \
+ --hash=sha256:b10e7c2cd7870ba4ad9b2d8a6102eb5ffc1f16ca35e3de6bfa390c1113029d13 \
+ --hash=sha256:b13cfdd6c87fc3efb69ea4ec18ef79c74c3f98b4e5498ca9b85ab3b2c2329a67 \
+ --hash=sha256:b64d987153888790bcdb03a6473d321820597ab8dd9243b27a92153c4fa50fd2 \
+ --hash=sha256:b7951a701c07ea584c4fe327834b92a30825514c868b1f69c30445093fdd9d5a \
+ --hash=sha256:bdb12f69bcc02700c2b47e070238f42cb87f18c0bc1fc4cdb4fb2bc5fd7a3b8b \
+ --hash=sha256:c35d298c2c4bba75feb2195655dfea8124d855dfd7343bf8b8c055421eaf0cf8 \
+ --hash=sha256:c608937067d2fc5a4dd1a5ce92fd9e1398691b8c5d012d66e1ddd430e9244376 \
+ --hash=sha256:c9a6538e0415310aad77cb94004ca6482330fece18036b5f360b62c45814c4ef \
+ --hash=sha256:d8dfc6ab58ca7dda47d9237349157500468e404b17213d44fc1cb77bce532288 \
+ --hash=sha256:da4869fc5e7f62a88f3fe0b5c919d1d9f7ea3cef92d3689de2823fd27e40aa75 \
+ --hash=sha256:de759aafbae8763283b2ee5869c7255391fbc4de3ff171f8f030b5ec48381b74 \
+ --hash=sha256:e3157c7594ff2ef1634ee058aafc56a82db665c9438fd41b390f3bde1ab12250 \
+ --hash=sha256:e3f276d8493c3c97930e354b2595a44a21348b320d859fb4a2b9f66da9ed27ab \
+ --hash=sha256:ee4c11e460685c3e0c64a4c5de82ae143622410950d6be863303a1c4ba0e36d6 \
+ --hash=sha256:f1235f5ea01b7db5468d53ece6aaddf1ad0b88d9e7462b86ef96fe04995d7247 \
+ --hash=sha256:f7cee03c9a2e2ee26ec07479f38ea9c884e301d42c6d43a19d20fb014e3ba925 \
+ --hash=sha256:f859fb09d9583a985be9a493d5cfc5515b56b08f7447759a0c5deaf68d80506e \
+ --hash=sha256:ffcebe56eb09ff0c0885e750036a095e23793ba6c2e894e7e63f6d89ad51f22e
# via sqlalchemy
mypy-extensions==1.1.0 \
--hash=sha256:1be4cccdb0f2482337c4743e60421de3a356cd97508abadd57d47403e94f5505 \
@@ -1944,9 +1944,9 @@ pandas==2.3.3 \
# pandas-gbq
# pymilvus
# snowflake-connector-python
-pandas-gbq==0.31.1 \
- --hash=sha256:a5d6e897917302c50feaca2ed1ce6a284abd8b9139383bf063307aab8d0556d9 \
- --hash=sha256:c59878504adee211cf1c34b22cf94393c59cc953626c61ce76e06c8d25fd146d
+pandas-gbq==0.32.0 \
+ --hash=sha256:249623d574c65e98cf19b7b7ecda97729f4f0a843eae3a0a82d9ef50adcdf4ef \
+ --hash=sha256:28018ff09f2e49ab2b01a11329bd4e562fd65da406030b4a8001a3a4e80a1e34
# via google-cloud-bigquery
parsy==2.2 \
--hash=sha256:5e981613d9d2d8b68012d1dd0afe928967bea2e4eefdb76c2f545af0dd02a9e7 \
@@ -2120,9 +2120,9 @@ propcache==0.4.1 \
# via
# aiohttp
# yarl
-proto-plus==1.26.1 \
- --hash=sha256:13285478c2dcf2abb829db158e1047e2f1e8d63a077d94263c2b88b043c75a66 \
- --hash=sha256:21a515a4c4c0088a773899e23c7bbade3d18f9c66c73edd4c7ee3816bc96a012
+proto-plus==1.27.0 \
+ --hash=sha256:1baa7f81cf0f8acb8bc1f6d085008ba4171eaf669629d1b6d1673b21ed1c0a82 \
+ --hash=sha256:873af56dd0d7e91836aee871e5799e1c6f1bda86ac9a983e0bb9f0c266a568c4
# via
# google-api-core
# google-cloud-bigquery-storage
@@ -2153,26 +2153,28 @@ protobuf==6.33.2 \
# proto-plus
# pymilvus
# substrait
-psutil==7.1.3 \
- --hash=sha256:0005da714eee687b4b8decd3d6cc7c6db36215c9e74e5ad2264b90c3df7d92dc \
- --hash=sha256:1068c303be3a72f8e18e412c5b2a8f6d31750fb152f9cb106b54090296c9d251 \
- --hash=sha256:18349c5c24b06ac5612c0428ec2a0331c26443d259e2a0144a9b24b4395b58fa \
- --hash=sha256:19644c85dcb987e35eeeaefdc3915d059dac7bd1167cdcdbf27e0ce2df0c08c0 \
- --hash=sha256:2bdbcd0e58ca14996a42adf3621a6244f1bb2e2e528886959c72cf1e326677ab \
- --hash=sha256:31d77fcedb7529f27bb3a0472bea9334349f9a04160e8e6e5020f22c59893264 \
- --hash=sha256:3792983e23b69843aea49c8f5b8f115572c5ab64c153bada5270086a2123c7e7 \
- --hash=sha256:3bb428f9f05c1225a558f53e30ccbad9930b11c3fc206836242de1091d3e7dd3 \
- --hash=sha256:56d974e02ca2c8eb4812c3f76c30e28836fffc311d55d979f1465c1feeb2b68b \
- --hash=sha256:6c86281738d77335af7aec228328e944b30930899ea760ecf33a4dba66be5e74 \
- --hash=sha256:8f33a3702e167783a9213db10ad29650ebf383946e91bc77f28a5eb083496bc9 \
- --hash=sha256:95ef04cf2e5ba0ab9eaafc4a11eaae91b44f4ef5541acd2ee91d9108d00d59a7 \
- --hash=sha256:ad81425efc5e75da3f39b3e636293360ad8d0b49bed7df824c79764fb4ba9b8b \
- --hash=sha256:b403da1df4d6d43973dc004d19cee3b848e998ae3154cc8097d139b77156c353 \
- --hash=sha256:bc31fa00f1fbc3c3802141eede66f3a2d51d89716a194bf2cd6fc68310a19880 \
- --hash=sha256:bd0d69cee829226a761e92f28140bec9a5ee9d5b4fb4b0cc589068dbfff559b1 \
- --hash=sha256:c525ffa774fe4496282fb0b1187725793de3e7c6b29e41562733cae9ada151ee \
- --hash=sha256:f39c2c19fe824b47484b96f9692932248a54c43799a84282cfe58d05a6449efd \
- --hash=sha256:fac9cd332c67f4422504297889da5ab7e05fd11e3c4392140f7370f4208ded1f
+psutil==7.2.1 \
+ --hash=sha256:05cc68dbb8c174828624062e73078e7e35406f4ca2d0866c272c2410d8ef06d1 \
+ --hash=sha256:08a2f175e48a898c8eb8eace45ce01777f4785bc744c90aa2cc7f2fa5462a266 \
+ --hash=sha256:0d67c1822c355aa6f7314d92018fb4268a76668a536f133599b91edd48759442 \
+ --hash=sha256:2ceae842a78d1603753561132d5ad1b2f8a7979cb0c283f5b52fb4e6e14b1a79 \
+ --hash=sha256:35630d5af80d5d0d49cfc4d64c1c13838baf6717a13effb35869a5919b854cdf \
+ --hash=sha256:3fce5f92c22b00cdefd1645aa58ab4877a01679e901555067b1bd77039aa589f \
+ --hash=sha256:494c513ccc53225ae23eec7fe6e1482f1b8a44674241b54561f755a898650679 \
+ --hash=sha256:5e38404ca2bb30ed7267a46c02f06ff842e92da3bb8c5bfdadbd35a5722314d8 \
+ --hash=sha256:81442dac7abfc2f4f4385ea9e12ddf5a796721c0f6133260687fec5c3780fa49 \
+ --hash=sha256:923f8653416604e356073e6e0bccbe7c09990acef442def2f5640dd0faa9689f \
+ --hash=sha256:93f3f7b0bb07711b49626e7940d6fe52aa9940ad86e8f7e74842e73189712129 \
+ --hash=sha256:99a4cd17a5fdd1f3d014396502daa70b5ec21bf4ffe38393e152f8e449757d67 \
+ --hash=sha256:ab2b98c9fc19f13f59628d94df5cc4cc4844bc572467d113a8b517d634e362c6 \
+ --hash=sha256:b1b0671619343aa71c20ff9767eced0483e4fc9e1f489d50923738caf6a03c17 \
+ --hash=sha256:b2e953fcfaedcfbc952b44744f22d16575d3aa78eb4f51ae74165b4e96e55f42 \
+ --hash=sha256:ba9f33bb525b14c3ea563b2fd521a84d2fa214ec59e3e6a2858f78d0844dd60d \
+ --hash=sha256:cfbe6b40ca48019a51827f20d830887b3107a74a79b01ceb8cc8de4ccb17b672 \
+ --hash=sha256:d34d2ca888208eea2b5c68186841336a7f5e0b990edec929be909353a202768a \
+ --hash=sha256:ea46c0d060491051d39f0d2cff4f98d5c72b288289f57a21556cc7d504db37fc \
+ --hash=sha256:f7583aec590485b43ca601dd9cea0dcd65bd7bb21d30ef4ddbf4ea6b5ed1bdd3 \
+ --hash=sha256:f78baafb38436d5a128f837fab2d92c276dfb48af01a240b861ae02b2413ada8
# via
# feast (setup.py)
# pandas-gbq
@@ -2443,9 +2445,9 @@ python-dotenv==1.2.1 \
# pydantic-settings
# pymilvus
# uvicorn
-python-multipart==0.0.20 \
- --hash=sha256:8a62d3a8335e06589fe01f2a3e178cdcc632f3fbe0d492ad9ee0ec35aab1f104 \
- --hash=sha256:8dd0cab45b8e23064ae09147625994d090fa46f5b0d1e13af944c331a7fa9d13
+python-multipart==0.0.21 \
+ --hash=sha256:7137ebd4d3bbf70ea1622998f902b97a29434a9e8dc40eb203bbcf7c2a2cba92 \
+ --hash=sha256:cf7a6713e01c87aa35387f4774e812c4361150938d20d232800f75ffcf266090
# via mcp
pytz==2025.2 \
--hash=sha256:360b9e3dbb49a209c21ad61809c7fb453643e048b38924c765813546746e81c3 \
@@ -2800,12 +2802,14 @@ sqlalchemy[mypy]==2.0.45 \
--hash=sha256:1d8b4a7a8c9b537509d56d5cd10ecdcfbb95912d72480c8861524efecc6a3fff \
--hash=sha256:215f0528b914e5c75ef2559f69dca86878a3beeb0c1be7279d77f18e8d180ed4 \
--hash=sha256:2c0b74aa79e2deade948fe8593654c8ef4228c44ba862bb7c9585c8e0db90f33 \
+ --hash=sha256:2e90a344c644a4fa871eb01809c32096487928bd2038bf10f3e4515cb688cc56 \
--hash=sha256:3c5f76216e7b85770d5bb5130ddd11ee89f4d52b11783674a662c7dd57018177 \
--hash=sha256:470daea2c1ce73910f08caf10575676a37159a6d16c4da33d0033546bddebc9b \
--hash=sha256:4748601c8ea959e37e03d13dcda4a44837afcd1b21338e637f7c935b8da06177 \
--hash=sha256:4b6bec67ca45bc166c8729910bd2a87f1c0407ee955df110d78948f5b5827e8a \
--hash=sha256:5225a288e4c8cc2308dbdd874edad6e7d0fd38eac1e9e5f23503425c8eee20d0 \
--hash=sha256:56ead1f8dfb91a54a28cd1d072c74b3d635bcffbd25e50786533b822d4f2cde2 \
+ --hash=sha256:5964f832431b7cdfaaa22a660b4c7eb1dfcd6ed41375f67fd3e3440fd95cb3cc \
--hash=sha256:59a8b8bd9c6bedf81ad07c8bd5543eedca55fe9b8780b2b628d495ba55f8db1e \
--hash=sha256:672c45cae53ba88e0dad74b9027dddd09ef6f441e927786b05bec75d949fbb2e \
--hash=sha256:6d0beadc2535157070c9c17ecf25ecec31e13c229a8f69196d7590bde8082bf1 \
@@ -2824,7 +2828,9 @@ sqlalchemy[mypy]==2.0.45 \
--hash=sha256:b8c8b41b97fba5f62349aa285654230296829672fc9939cd7f35aab246d1c08b \
--hash=sha256:ba547ac0b361ab4f1608afbc8432db669bd0819b3e12e29fb5fa9529a8bba81d \
--hash=sha256:c1c2091b1489435ff85728fafeb990f073e64f6f5e81d5cd53059773e8521eb6 \
+ --hash=sha256:c64772786d9eee72d4d3784c28f0a636af5b0a29f3fe26ff11f55efe90c0bd85 \
--hash=sha256:cd337d3526ec5298f67d6a30bbbe4ed7e5e68862f0bf6dd21d289f8d37b7d60b \
+ --hash=sha256:d29b2b99d527dbc66dd87c3c3248a5dd789d974a507f4653c969999fc7c1191b \
--hash=sha256:d2c3684fca8a05f0ac1d9a21c1f4a266983a7ea9180efb80ffeb03861ecd01a0 \
--hash=sha256:d62e47f5d8a50099b17e2bfc1b0c7d7ecd8ba6b46b1507b58cc4f05eefc3bb1c \
--hash=sha256:d8a2ca754e5415cde2b656c27900b19d50ba076aa05ce66e2207623d3fe41f5a \
@@ -2842,9 +2848,9 @@ sqlglot==25.20.2 \
--hash=sha256:169fe8308dd70d7bd40117b2221b62bdc7c4e2ea8eb07394b2a6146cdedf05ab \
--hash=sha256:cdbfd7ce3f2f39f32bd7b4c23fd9e0fd261636a6b14285b914e8def25fd0a567
# via ibis-framework
-sse-starlette==3.0.3 \
- --hash=sha256:88cfb08747e16200ea990c8ca876b03910a23b547ab3bd764c0d8eb81019b971 \
- --hash=sha256:af5bf5a6f3933df1d9c7f8539633dc8444ca6a97ab2e2a7cd3b6e431ac03a431
+sse-starlette==3.1.1 \
+ --hash=sha256:bb38f71ae74cfd86b529907a9fda5632195dfa6ae120f214ea4c890c7ee9d436 \
+ --hash=sha256:bffa531420c1793ab224f63648c059bcadc412bf9fdb1301ac8de1cf9a67b7fb
# via mcp
starlette==0.50.0 \
--hash=sha256:9e5391843ec9b6e472eed1365a78c8098cfceb7a74bfd4d6b1c0c0095efb3bca \
@@ -2852,6 +2858,7 @@ starlette==0.50.0 \
# via
# fastapi
# mcp
+ # sse-starlette
substrait==0.24.2 \
--hash=sha256:743cc352e96b0927b2cd37cd5a8fdac0a96a68df9600bd104fc36aebd222a836 \
--hash=sha256:d1d475833566fa9d67eed3273456883c0568486ccced92b524b31709d2817e19
@@ -2949,17 +2956,17 @@ typeguard==4.4.4 \
--hash=sha256:3a7fd2dffb705d4d0efaed4306a704c89b9dee850b688f060a8b1615a79e5f74 \
--hash=sha256:b5f562281b6bfa1f5492470464730ef001646128b180769880468bd84b68b09e
# via feast (setup.py)
-typer==0.20.0 \
- --hash=sha256:1aaf6494031793e4876fb0bacfa6a912b551cf43c1e63c800df8b1a866720c37 \
- --hash=sha256:5b463df6793ec1dca6213a3cf4c0f03bc6e322ac5e16e13ddd622a889489784a
+typer==0.21.0 \
+ --hash=sha256:c79c01ca6b30af9fd48284058a7056ba0d3bf5cf10d0ff3d0c5b11b68c258ac6 \
+ --hash=sha256:c87c0d2b6eee3b49c5c64649ec92425492c14488096dfbc8a0c2799b2f6f9c53
# via fastapi-mcp
types-psutil==7.0.0.20250218 \
--hash=sha256:1447a30c282aafefcf8941ece854e1100eee7b0296a9d9be9977292f0269b121 \
--hash=sha256:1e642cdafe837b240295b23b1cbd4691d80b08a07d29932143cbbae30eb0db9c
# via feast (setup.py)
-types-pymysql==1.1.0.20250916 \
- --hash=sha256:873eb9836bb5e3de4368cc7010ca72775f86e9692a5c7810f8c7f48da082e55b \
- --hash=sha256:98d75731795fcc06723a192786662bdfa760e1e00f22809c104fbb47bac5e29b
+types-pymysql==1.1.0.20251220 \
+ --hash=sha256:ae1c3df32a777489431e2e9963880a0df48f6591e0aa2fd3a6fabd9dee6eca54 \
+ --hash=sha256:fa1082af7dea6c53b6caa5784241924b1296ea3a8d3bd060417352c5e10c0618
# via feast (setup.py)
typing-extensions==4.15.0 \
--hash=sha256:0cea48d173cc12fa28ecabc3b837ea3cf6f38c6d1136f85cbaaf598984861466 \
@@ -2995,9 +3002,9 @@ typing-inspection==0.4.2 \
# mcp
# pydantic
# pydantic-settings
-tzdata==2025.2 \
- --hash=sha256:1a403fada01ff9221ca8044d701868fa132215d84beb92242d9acd2147f667a8 \
- --hash=sha256:b60a638fcc0daffadf82fe0f57e53d06bdec2f36c4df66280ae79bce6bd6f2b9
+tzdata==2025.3 \
+ --hash=sha256:06a47e5700f3081aab02b2e513160914ff0694bce9947d6b76ebd6bf57cfc5d1 \
+ --hash=sha256:de39c2ca5dc7b0344f2eba86f49d614019d29f060fc4ebc8a417896a620b56a7
# via pandas
ujson==5.11.0 \
--hash=sha256:0180a480a7d099082501cad1fe85252e4d4bf926b40960fb3d9e87a3a6fbbc80 \
@@ -3085,9 +3092,9 @@ ujson==5.11.0 \
--hash=sha256:fa79fdb47701942c2132a9dd2297a1a85941d966d8c87bfd9e29b0cf423f26cc \
--hash=sha256:fac6c0649d6b7c3682a0a6e18d3de6857977378dce8d419f57a0b20e3d775b39
# via pymilvus
-urllib3==2.6.1 \
- --hash=sha256:5379eb6e1aba4088bae84f8242960017ec8d8e3decf30480b3a1abdaa9671a3f \
- --hash=sha256:e67d06fe947c36a7ca39f4994b08d73922d40e6cca949907be05efa6fd75110b
+urllib3==2.6.2 \
+ --hash=sha256:016f9c98bb7e98085cb2b4b17b87d2c702975664e4f060c6532e64d1c1a5e797 \
+ --hash=sha256:ec21cddfe7724fc7cb4ba4bea7aa8e2ef36f607a4bab81aa6ce42a13dc3f03dd
# via
# botocore
# kubernetes
diff --git a/sdk/python/requirements/py3.10-requirements.txt b/sdk/python/requirements/py3.10-requirements.txt
index f3844cb169b..6f38b0c16c6 100644
--- a/sdk/python/requirements/py3.10-requirements.txt
+++ b/sdk/python/requirements/py3.10-requirements.txt
@@ -20,9 +20,9 @@ attrs==25.4.0 \
# via
# jsonschema
# referencing
-bigtree==1.0.3 \
- --hash=sha256:18402a143130868b17ca84a74ca263e6f32f046d6978c30d244f8b94c4a01227 \
- --hash=sha256:99a18b6937a9b4ab8e560fec5c0720e10ebf37f84e44f9b5f47702c2e84c9aaa
+bigtree==1.0.4 \
+ --hash=sha256:e4af0c5bc0d2cd72e18442965e4509f642b16a0de65db6d0ec116e30f959010c \
+ --hash=sha256:f58a3238bb9b1142d893c9de4921bfd18d435427c75e0c168dd580eabf6dc7fd
# via feast (setup.py)
certifi==2025.11.12 \
--hash=sha256:97de8790030bbd5c2d96b7ec782fc2f7820ef8dba6db909ccf95449f2d062d4b \
@@ -158,9 +158,9 @@ colorama==0.4.6 \
--hash=sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44 \
--hash=sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6
# via feast (setup.py)
-dask[dataframe]==2025.11.0 \
- --hash=sha256:08c35a8146c05c93b34f83cf651009129c42ee71762da7ca452fb7308641c2b8 \
- --hash=sha256:23d59e624b80ee05b7cc8df858682cca58262c4c3b197ccf61da0f6543c8f7c3
+dask[dataframe]==2025.12.0 \
+ --hash=sha256:4213ce9c5d51d6d89337cff69de35d902aa0bf6abdb8a25c942a4d0281f3a598 \
+ --hash=sha256:8d478f2aabd025e2453cf733ad64559de90cf328c20209e4574e9543707c3e1b
# via feast (setup.py)
dill==0.3.9 \
--hash=sha256:468dff3b89520b474c0397703366b7b95eebe6303f108adf9b19da1f702be87a \
@@ -170,9 +170,9 @@ exceptiongroup==1.3.1 \
--hash=sha256:8b412432c6055b0b7d14c310000ae93352ed6754f70fa8f7c34141f91c4e3219 \
--hash=sha256:a7a39a3bd276781e98394987d3a5701d0c4edffb633bb7a5144577f82c773598
# via anyio
-fastapi==0.124.0 \
- --hash=sha256:260cd178ad75e6d259991f2fd9b0fee924b224850079df576a3ba604ce58f4e6 \
- --hash=sha256:91596bdc6dde303c318f06e8d2bc75eafb341fc793a0c9c92c0bc1db1ac52480
+fastapi==0.128.0 \
+ --hash=sha256:1cc179e1cef10a6be60ffe429f79b829dce99d8de32d7acb7e6c8dfdf7f2645a \
+ --hash=sha256:aebd93f9716ee3b4f4fcfe13ffb7cf308d99c9f3ab5622d8877441072561582d
# via feast (setup.py)
fsspec==2025.12.0 \
--hash=sha256:8bf1fe301b7d8acfa6e8571e3b1c3d158f909666642431cc78a1b7b4dbc5ec5b \
@@ -239,9 +239,9 @@ idna==3.11 \
# via
# anyio
# requests
-importlib-metadata==8.7.0 \
- --hash=sha256:d13b81ad223b890aa16c5471f2ac3056cf76c5f10f82d6f9292f0b415f389000 \
- --hash=sha256:e5dd1551894c77868a30651cef00984d50e1002d06942a7101d34870c5f02afd
+importlib-metadata==8.7.1 \
+ --hash=sha256:49fef1ae6440c182052f407c8d34a68f72efc36db9ca90dc0113398f2fdde8bb \
+ --hash=sha256:5a1f80bf1daa489495071efbb095d75a634cf28a8bc299581244063b53176151
# via dask
jinja2==3.1.6 \
--hash=sha256:0137fb05990d35f1275a587e9aee6d56da821fc83491a0fb838183be43f66d6d \
@@ -255,83 +255,83 @@ jsonschema-specifications==2025.9.1 \
--hash=sha256:98802fee3a11ee76ecaca44429fda8a41bff98b00a0f2838151b113f210cc6fe \
--hash=sha256:b540987f239e745613c7a9176f3edb72b832a4ac465cf02712288397832b5e8d
# via jsonschema
-librt==0.7.3 \
- --hash=sha256:020c6db391268bcc8ce75105cb572df8cb659a43fd347366aaa407c366e5117a \
- --hash=sha256:0fa9ac2e49a6bee56e47573a6786cb635e128a7b12a0dc7851090037c0d397a3 \
- --hash=sha256:11ad45122bbed42cfc8b0597450660126ef28fd2d9ae1a219bc5af8406f95678 \
- --hash=sha256:120dd21d46ff875e849f1aae19346223cf15656be489242fe884036b23d39e93 \
- --hash=sha256:14569ac5dd38cfccf0a14597a88038fb16811a6fede25c67b79c6d50fc2c8fdc \
- --hash=sha256:1617bea5ab31266e152871208502ee943cb349c224846928a1173c864261375e \
- --hash=sha256:170cdb8436188347af17bf9cccf3249ba581c933ed56d926497119d4cf730cec \
- --hash=sha256:1975eda520957c6e0eb52d12968dd3609ffb7eef05d4223d097893d6daf1d8a7 \
- --hash=sha256:1fe603877e1865b5fd047a5e40379509a4a60204aa7aa0f72b16f7a41c3f0712 \
- --hash=sha256:24d70810f6e2ea853ff79338001533716b373cc0f63e2a0be5bc96129edb5fb5 \
- --hash=sha256:256793988bff98040de23c57cf36e1f4c2f2dc3dcd17537cdac031d3b681db71 \
- --hash=sha256:25711f364c64cab2c910a0247e90b51421e45dbc8910ceeb4eac97a9e132fc6f \
- --hash=sha256:2682162855a708e3270eba4b92026b93f8257c3e65278b456c77631faf0f4f7a \
- --hash=sha256:2cf9d73499486ce39eebbff5f42452518cc1f88d8b7ea4a711ab32962b176ee2 \
- --hash=sha256:2e40520c37926166c24d0c2e0f3bc3a5f46646c34bdf7b4ea9747c297d6ee809 \
- --hash=sha256:2e980cf1ed1a2420a6424e2ed884629cdead291686f1048810a817de07b5eb18 \
- --hash=sha256:2f03484b54bf4ae80ab2e504a8d99d20d551bfe64a7ec91e218010b467d77093 \
- --hash=sha256:35f1609e3484a649bb80431310ddbec81114cd86648f1d9482bc72a3b86ded2e \
- --hash=sha256:399938edbd3d78339f797d685142dd8a623dfaded023cf451033c85955e4838a \
- --hash=sha256:399bbd7bcc1633c3e356ae274a1deb8781c7bf84d9c7962cc1ae0c6e87837292 \
- --hash=sha256:3ec50cf65235ff5c02c5b747748d9222e564ad48597122a361269dd3aa808798 \
- --hash=sha256:3edbf257c40d21a42615e9e332a6b10a8bacaaf58250aed8552a14a70efd0d65 \
- --hash=sha256:440c788f707c061d237c1e83edf6164ff19f5c0f823a3bf054e88804ebf971ec \
- --hash=sha256:44b3689b040df57f492e02cd4f0bacd1b42c5400e4b8048160c9d5e866de8abe \
- --hash=sha256:4887c29cadbdc50640179e3861c276325ff2986791e6044f73136e6e798ff806 \
- --hash=sha256:5460d99ed30f043595bbdc888f542bad2caeb6226b01c33cda3ae444e8f82d42 \
- --hash=sha256:550fdbfbf5bba6a2960b27376ca76d6aaa2bd4b1a06c4255edd8520c306fcfc0 \
- --hash=sha256:56f2a47beda8409061bc1c865bef2d4bd9ff9255219402c0817e68ab5ad89aed \
- --hash=sha256:572a24fc5958c61431da456a0ef1eeea6b4989d81eeb18b8e5f1f3077592200b \
- --hash=sha256:59cb0470612d21fa1efddfa0dd710756b50d9c7fb6c1236bbf8ef8529331dc70 \
- --hash=sha256:6038ccbd5968325a5d6fd393cf6e00b622a8de545f0994b89dd0f748dcf3e19e \
- --hash=sha256:6488e69d408b492e08bfb68f20c4a899a354b4386a446ecd490baff8d0862720 \
- --hash=sha256:687403cced6a29590e6be6964463835315905221d797bc5c934a98750fe1a9af \
- --hash=sha256:6b407c23f16ccc36614c136251d6b32bf30de7a57f8e782378f1107be008ddb0 \
- --hash=sha256:6b4e7bff1d76dd2b46443078519dc75df1b5e01562345f0bb740cea5266d8218 \
- --hash=sha256:6bdd9adfca615903578d2060ee8a6eb1c24eaf54919ff0ddc820118e5718931b \
- --hash=sha256:6eb9295c730e26b849ed1f4022735f36863eb46b14b6e10604c1c39b8b5efaea \
- --hash=sha256:703456146dc2bf430f7832fd1341adac5c893ec3c1430194fdcefba00012555c \
- --hash=sha256:754a0d09997095ad764ccef050dd5bf26cbf457aab9effcba5890dad081d879e \
- --hash=sha256:7af7785f5edd1f418da09a8cdb9ec84b0213e23d597413e06525340bcce1ea4f \
- --hash=sha256:7b29e97273bd6999e2bfe9fe3531b1f4f64effd28327bced048a33e49b99674a \
- --hash=sha256:7b4f57f7a0c65821c5441d98c47ff7c01d359b1e12328219709bdd97fdd37f90 \
- --hash=sha256:8837d5a52a2d7aa9f4c3220a8484013aed1d8ad75240d9a75ede63709ef89055 \
- --hash=sha256:8ccadf260bb46a61b9c7e89e2218f6efea9f3eeaaab4e3d1f58571890e54858e \
- --hash=sha256:8d8cf653e798ee4c4e654062b633db36984a1572f68c3aa25e364a0ddfbbb910 \
- --hash=sha256:93b2a1f325fefa1482516ced160c8c7b4b8d53226763fa6c93d151fa25164207 \
- --hash=sha256:9f0e0927efe87cd42ad600628e595a1a0aa1c64f6d0b55f7e6059079a428641a \
- --hash=sha256:a59a69deeb458c858b8fea6acf9e2acd5d755d76cd81a655256bc65c20dfff5b \
- --hash=sha256:a9f9b661f82693eb56beb0605156c7fca57f535704ab91837405913417d6990b \
- --hash=sha256:abfc57cab3c53c4546aee31859ef06753bfc136c9d208129bad23e2eca39155a \
- --hash=sha256:aca73d70c3f553552ba9133d4a09e767dcfeee352d8d8d3eb3f77e38a3beb3ed \
- --hash=sha256:adeaa886d607fb02563c1f625cf2ee58778a2567c0c109378da8f17ec3076ad7 \
- --hash=sha256:b278a9248a4e3260fee3db7613772ca9ab6763a129d6d6f29555e2f9b168216d \
- --hash=sha256:b7c1239b64b70be7759554ad1a86288220bbb04d68518b527783c4ad3fb4f80b \
- --hash=sha256:bf8c7735fbfc0754111f00edda35cf9e98a8d478de6c47b04eaa9cef4300eaa7 \
- --hash=sha256:c634a0a6db395fdaba0361aa78395597ee72c3aad651b9a307a3a7eaf5efd67e \
- --hash=sha256:cad9971881e4fec00d96af7eaf4b63aa7a595696fc221808b0d3ce7ca9743258 \
- --hash=sha256:cbdb3f337c88b43c3b49ca377731912c101178be91cb5071aac48faa898e6f8e \
- --hash=sha256:cd8551aa21df6c60baa2624fd086ae7486bdde00c44097b32e1d1b1966e365e0 \
- --hash=sha256:d09f677693328503c9e492e33e9601464297c01f9ebd966ea8fc5308f3069bfd \
- --hash=sha256:d376a35c6561e81d2590506804b428fc1075fcc6298fc5bb49b771534c0ba010 \
- --hash=sha256:d39079379a9a28e74f4d57dc6357fa310a1977b51ff12239d7271ec7e71d67f5 \
- --hash=sha256:d86f94743a11873317094326456b23f8a5788bad9161fd2f0e52088c33564620 \
- --hash=sha256:d91e60ac44bbe3a77a67af4a4c13114cbe9f6d540337ce22f2c9eaf7454ca71f \
- --hash=sha256:d9883b2d819ce83f87ba82a746c81d14ada78784db431e57cc9719179847376e \
- --hash=sha256:e094e445c37c57e9ec612847812c301840239d34ccc5d153a982fa9814478c60 \
- --hash=sha256:e19acfde38cb532a560b98f473adc741c941b7a9bc90f7294bc273d08becb58b \
- --hash=sha256:e32d43610dff472eab939f4d7fbdd240d1667794192690433672ae22d7af8445 \
- --hash=sha256:ed028fc3d41adda916320712838aec289956c89b4f0a361ceadf83a53b4c047a \
- --hash=sha256:ef59c938f72bdbc6ab52dc50f81d0637fde0f194b02d636987cea2ab30f8f55a \
- --hash=sha256:f3d4801db8354436fd3936531e7f0e4feb411f62433a6b6cb32bb416e20b529f \
- --hash=sha256:f57aca20e637750a2c18d979f7096e2c2033cc40cf7ed201494318de1182f135 \
- --hash=sha256:f9da128d0edf990cf0d2ca011b02cd6f639e79286774bd5b0351245cbb5a6e51 \
- --hash=sha256:fbd7351d43b80d9c64c3cfcb50008f786cc82cba0450e8599fdd64f264320bd3 \
- --hash=sha256:fcb72249ac4ea81a7baefcbff74df7029c3cb1cf01a711113fa052d563639c9c \
- --hash=sha256:ff21c554304e8226bf80c3a7754be27c6c3549a9fec563a03c06ee8f494da8fc
+librt==0.7.5 \
+ --hash=sha256:060bde69c3604f694bd8ae21a780fe8be46bb3dbb863642e8dfc75c931ca8eee \
+ --hash=sha256:08153ea537609d11f774d2bfe84af39d50d5c9ca3a4d061d946e0c9d8bce04a1 \
+ --hash=sha256:0b4791202296ad51ac09a3ff58eb49d9da8e3a4009167a6d76ac418a974e5fd4 \
+ --hash=sha256:0b7f080ba30601dfa3e3deed3160352273e1b9bc92e652f51103c3e9298f7899 \
+ --hash=sha256:0e2bf8f91093fac43e3eaebacf777f12fd539dce9ec5af3efc6d8424e96ccd49 \
+ --hash=sha256:118716de5ad6726332db1801bc90fa6d94194cd2e07c1a7822cebf12c496714d \
+ --hash=sha256:168e04663e126416ba712114050f413ac306759a1791d87b7c11d4428ba75760 \
+ --hash=sha256:191cbd42660446d67cf7a95ac7bfa60f49b8b3b0417c64f216284a1d86fc9335 \
+ --hash=sha256:263f4fae9eba277513357c871275b18d14de93fd49bf5e43dc60a97b81ad5eb8 \
+ --hash=sha256:265729b551a2dd329cc47b323a182fb7961af42abf21e913c9dd7d3331b2f3c2 \
+ --hash=sha256:26b46620e1e0e45af510d9848ea0915e7040605dd2ae94ebefb6c962cbb6f7ec \
+ --hash=sha256:29c8d2fae11d4379ea207ba7fc69d43237e42cf8a9f90ec6e05993687e6d648b \
+ --hash=sha256:2fcbf2e135c11f721193aa5f42ba112bb1046afafbffd407cbc81d8d735c74d0 \
+ --hash=sha256:39183abee670bc37b85f11e86c44a9cad1ed6efa48b580083e89ecee13dd9717 \
+ --hash=sha256:3919c9407faeeee35430ae135e3a78acd4ecaaaa73767529e2c15ca1d73ba325 \
+ --hash=sha256:3c98a8d0ac9e2a7cb8ff8c53e5d6e8d82bfb2839abf144fdeaaa832f2a12aa45 \
+ --hash=sha256:3dd58f7ce20360c6ce0c04f7bd9081c7f9c19fc6129a3c705d0c5a35439f201d \
+ --hash=sha256:46aa91813c267c3f60db75d56419b42c0c0b9748ec2c568a0e3588e543fb4233 \
+ --hash=sha256:49c596cd18e90e58b7caa4d7ca7606049c1802125fcff96b8af73fa5c3870e4d \
+ --hash=sha256:532ddc6a8a6ca341b1cd7f4d999043e4c71a212b26fe9fd2e7f1e8bb4e873544 \
+ --hash=sha256:54d2aef0b0f5056f130981ad45081b278602ff3657fe16c88529f5058038e802 \
+ --hash=sha256:553dc58987d1d853adda8aeadf4db8e29749f0b11877afcc429a9ad892818ae2 \
+ --hash=sha256:584cb3e605ec45ba350962cec853e17be0a25a772f21f09f1e422f7044ae2a7d \
+ --hash=sha256:5cd3afd71e9bc146203b6c8141921e738364158d4aa7cdb9a874e2505163770f \
+ --hash=sha256:63055d3dda433ebb314c9f1819942f16a19203c454508fdb2d167613f7017169 \
+ --hash=sha256:654fdc971c76348a73af5240d8e2529265b9a7ba6321e38dd5bae7b0d4ab3abe \
+ --hash=sha256:6b7b58913d475911f6f33e8082f19dd9b120c4f4a5c911d07e395d67b81c6982 \
+ --hash=sha256:6e860909fea75baef941ee6436e0453612505883b9d0d87924d4fda27865b9a2 \
+ --hash=sha256:730be847daad773a3c898943cf67fb9845a3961d06fb79672ceb0a8cd8624cfa \
+ --hash=sha256:732e0aa0385b59a1b2545159e781c792cc58ce9c134249233a7c7250a44684c4 \
+ --hash=sha256:75965c1f4efb7234ff52a58b729d245a21e87e4b6a26a0ec08052f02b16274e4 \
+ --hash=sha256:7a488908a470451338607650f1c064175094aedebf4a4fa37890682e30ce0b57 \
+ --hash=sha256:81056e01bba1394f1d92904ec61a4078f66df785316275edbaf51d90da8c6e26 \
+ --hash=sha256:82f3f088482e2229387eadf8215c03f7726d56f69cce8c0c40f0795aebc9b361 \
+ --hash=sha256:84d4a6b9efd6124f728558a18e79e7cc5c5d4efc09b2b846c910de7e564f5bad \
+ --hash=sha256:85f485b7471571e99fab4f44eeb327dc0e1f814ada575f3fa85e698417d8a54e \
+ --hash=sha256:8a3cfb15961e7333ea6ef033dc574af75153b5c230d5ad25fbcd55198f21e0cf \
+ --hash=sha256:8bb7883c1e94ceb87c2bf81385266f032da09cd040e804cc002f2c9d6b842e2f \
+ --hash=sha256:8dcae24de1bc9da93aa689cb6313c70e776d7cea2fcf26b9b6160fedfe6bd9af \
+ --hash=sha256:9937574e6d842f359b8585903d04f5b4ab62277a091a93e02058158074dc52f2 \
+ --hash=sha256:9bbb8facc5375476d392990dd6a71f97e4cb42e2ac66f32e860f6e47299d5e89 \
+ --hash=sha256:9c08527055fbb03c641c15bbc5b79dd2942fb6a3bd8dabf141dd7e97eeea4904 \
+ --hash=sha256:9cffa3ef0af29687455161cb446eff059bf27607f95163d6a37e27bcb37180f6 \
+ --hash=sha256:9f85f9b5db87b0f52e53c68ad2a0c5a53e00afa439bd54a1723742a2b1021276 \
+ --hash=sha256:a82d5a0ee43aeae2116d7292c77cc8038f4841830ade8aa922e098933b468b9e \
+ --hash=sha256:a9eacbf983319b26b5f340a2e0cd47ac1ee4725a7f3a72fd0f15063c934b69d6 \
+ --hash=sha256:ab4b0d3bee6f6ff7017e18e576ac7e41a06697d8dea4b8f3ab9e0c8e1300c409 \
+ --hash=sha256:af69d9e159575e877c7546d1ee817b4ae089aa221dd1117e20c24ad8dc8659c7 \
+ --hash=sha256:b1795c4b2789b458fa290059062c2f5a297ddb28c31e704d27e161386469691a \
+ --hash=sha256:b591c094afd0ffda820e931148c9e48dc31a556dc5b2b9b3cc552fa710d858e4 \
+ --hash=sha256:b8e0fd344bad57026a8f4ccfaf406486c2fc991838050c2fef156170edc3b775 \
+ --hash=sha256:ba1077c562a046208a2dc6366227b3eeae8f2c2ab4b41eaf4fd2fa28cece4203 \
+ --hash=sha256:bb41f04046b4f22b1e7ba5ef513402cd2e3477ec610e5f92d38fe2bba383d419 \
+ --hash=sha256:c039bbf79a9a2498404d1ae7e29a6c175e63678d7a54013a97397c40aee026c5 \
+ --hash=sha256:c566a4672564c5d54d8ab65cdaae5a87ee14c1564c1a2ddc7a9f5811c750f023 \
+ --hash=sha256:cda8b025875946ffff5a9a7590bf9acde3eb02cb6200f06a2d3e691ef3d9955b \
+ --hash=sha256:cdb001a1a0e4f41e613bca2c0fc147fc8a7396f53fc94201cbfd8ec7cd69ca4b \
+ --hash=sha256:cdde31759bd8888f3ef0eebda80394a48961328a17c264dce8cc35f4b9cde35d \
+ --hash=sha256:d2cc7d187e8c6e9b7bdbefa9697ce897a704ea7a7ce844f2b4e0e2aa07ae51d3 \
+ --hash=sha256:d7aa33153a5bb0bac783d2c57885889b1162823384e8313d47800a0e10d0070e \
+ --hash=sha256:d7c72c8756eeb3aefb1b9e3dac7c37a4a25db63640cac0ab6fc18e91a0edf05a \
+ --hash=sha256:dd810f2d39c526c42ea205e0addad5dc08ef853c625387806a29d07f9d150d9b \
+ --hash=sha256:ddc0ab9dbc5f9ceaf2bf7a367bf01f2697660e908f6534800e88f43590b271db \
+ --hash=sha256:ddc4a16207f88f9597b397fc1f60781266d13b13de922ff61c206547a29e4bbd \
+ --hash=sha256:de4221a1181fa9c8c4b5f35506ed6f298948f44003d84d2a8b9885d7e01e6cfa \
+ --hash=sha256:df2e210400b28e50994477ebf82f055698c79797b6ee47a1669d383ca33263e1 \
+ --hash=sha256:df3146d52465b3b6397d25d513f428cb421c18df65b7378667bb5f1e3cc45805 \
+ --hash=sha256:e47fc52602ffc374e69bf1b76536dc99f7f6dd876bd786c8213eaa3598be030a \
+ --hash=sha256:e9e9c988b5ffde7be02180f864cbd17c0b0c1231c235748912ab2afa05789c25 \
+ --hash=sha256:ea1b60b86595a5dc1f57b44a801a1c4d8209c0a69518391d349973a4491408e6 \
+ --hash=sha256:edf6b465306215b19dbe6c3fb63cf374a8f3e1ad77f3b4c16544b83033bbb67b \
+ --hash=sha256:f02c4337bf271c4f06637f5ff254fad2238c0b8e32a3a480ebb2fc5e26f754a5 \
+ --hash=sha256:f7f51ffe59f4556243d3cc82d827bde74765f594fa3ceb80ec4de0c13ccd3416 \
+ --hash=sha256:f952e1a78c480edee8fb43aa2bf2e84dcd46c917d44f8065b883079d3893e8fc \
+ --hash=sha256:fb565b4219abc8ea2402e61c7ba648a62903831059ed3564fa1245cc245d58d7 \
+ --hash=sha256:fee15c2a190ef389f14928135c6fb2d25cd3fdb7887bfd9a7b444bbdc8c06b96
# via mypy
locket==1.0.0 \
--hash=sha256:5c0d4c052a8bbbf750e056a8e65ccd309086f4f0f18a2eac306a8dfa4112a632 \
@@ -551,45 +551,45 @@ mmh3==5.2.0 \
--hash=sha256:fdfd3fb739f4e22746e13ad7ba0c6eedf5f454b18d11249724a388868e308ee4 \
--hash=sha256:ff3d50dc3fe8a98059f99b445dfb62792b5d006c5e0b8f03c6de2813b8376110
# via feast (setup.py)
-mypy==1.19.0 \
- --hash=sha256:0c01c99d626380752e527d5ce8e69ffbba2046eb8a060db0329690849cf9b6f9 \
- --hash=sha256:0dde5cb375cb94deff0d4b548b993bec52859d1651e073d63a1386d392a95495 \
- --hash=sha256:0e3c3d1e1d62e678c339e7ade72746a9e0325de42cd2cccc51616c7b2ed1a018 \
- --hash=sha256:0ea4fd21bb48f0da49e6d3b37ef6bd7e8228b9fe41bbf4d80d9364d11adbd43c \
- --hash=sha256:0fb3115cb8fa7c5f887c8a8d81ccdcb94cff334684980d847e5a62e926910e1d \
- --hash=sha256:11f7254c15ab3f8ed68f8e8f5cbe88757848df793e31c36aaa4d4f9783fd08ab \
- --hash=sha256:120cffe120cca5c23c03c77f84abc0c14c5d2e03736f6c312480020082f1994b \
- --hash=sha256:16f76ff3f3fd8137aadf593cb4607d82634fca675e8211ad75c43d86033ee6c6 \
- --hash=sha256:1cf9c59398db1c68a134b0b5354a09a1e124523f00bacd68e553b8bd16ff3299 \
- --hash=sha256:318ba74f75899b0e78b847d8c50821e4c9637c79d9a59680fc1259f29338cb3e \
- --hash=sha256:3210d87b30e6af9c8faed61be2642fcbe60ef77cec64fa1ef810a630a4cf671c \
- --hash=sha256:34ec1ac66d31644f194b7c163d7f8b8434f1b49719d403a5d26c87fff7e913f7 \
- --hash=sha256:37af5166f9475872034b56c5efdcf65ee25394e9e1d172907b84577120714364 \
- --hash=sha256:3ad925b14a0bb99821ff6f734553294aa6a3440a8cb082fe1f5b84dfb662afb1 \
- --hash=sha256:510c014b722308c9bd377993bcbf9a07d7e0692e5fa8fc70e639c1eb19fc6bee \
- --hash=sha256:6016c52ab209919b46169651b362068f632efcd5eb8ef9d1735f6f86da7853b2 \
- --hash=sha256:6148ede033982a8c5ca1143de34c71836a09f105068aaa8b7d5edab2b053e6c8 \
- --hash=sha256:63ea6a00e4bd6822adbfc75b02ab3653a17c02c4347f5bb0cf1d5b9df3a05835 \
- --hash=sha256:7686ed65dbabd24d20066f3115018d2dce030d8fa9db01aa9f0a59b6813e9f9e \
- --hash=sha256:7a500ab5c444268a70565e374fc803972bfd1f09545b13418a5174e29883dab7 \
- --hash=sha256:8f44f2ae3c58421ee05fe609160343c25f70e3967f6e32792b5a78006a9d850f \
- --hash=sha256:a18d8abdda14035c5718acb748faec09571432811af129bf0d9e7b2d6699bf18 \
- --hash=sha256:a31e4c28e8ddb042c84c5e977e28a21195d086aaffaf08b016b78e19c9ef8106 \
- --hash=sha256:a9ac09e52bb0f7fb912f5d2a783345c72441a08ef56ce3e17c1752af36340a39 \
- --hash=sha256:b9d491295825182fba01b6ffe2c6fe4e5a49dbf4e2bb4d1217b6ced3b4797bc6 \
- --hash=sha256:c14a98bc63fd867530e8ec82f217dae29d0550c86e70debc9667fff1ec83284e \
- --hash=sha256:c3385246593ac2b97f155a0e9639be906e73534630f663747c71908dfbf26134 \
- --hash=sha256:cabbee74f29aa9cd3b444ec2f1e4fa5a9d0d746ce7567a6a609e224429781f53 \
- --hash=sha256:cb64b0ba5980466a0f3f9990d1c582bcab8db12e29815ecb57f1408d99b4bff7 \
- --hash=sha256:cf7d84f497f78b682edd407f14a7b6e1a2212b433eedb054e2081380b7395aa3 \
- --hash=sha256:e2c1101ab41d01303103ab6ef82cbbfedb81c1a060c868fa7cc013d573d37ab5 \
- --hash=sha256:f188dcf16483b3e59f9278c4ed939ec0254aa8a60e8fc100648d9ab5ee95a431 \
- --hash=sha256:f2e36bed3c6d9b5f35d28b63ca4b727cb0228e480826ffc8953d1892ddc8999d \
- --hash=sha256:f3e19e3b897562276bb331074d64c076dbdd3e79213f36eed4e592272dabd760 \
- --hash=sha256:f6b874ca77f733222641e5c46e4711648c4037ea13646fd0cdc814c2eaec2528 \
- --hash=sha256:f75e60aca3723a23511948539b0d7ed514dda194bc3755eae0bfc7a6b4887aa7 \
- --hash=sha256:fc51a5b864f73a3a182584b1ac75c404396a17eced54341629d8bdcb644a5bba \
- --hash=sha256:fd4a985b2e32f23bead72e2fb4bbe5d6aceee176be471243bd831d5b2644672d
+mypy==1.19.1 \
+ --hash=sha256:016f2246209095e8eda7538944daa1d60e1e8134d98983b9fc1e92c1fc0cb8dd \
+ --hash=sha256:022ea7279374af1a5d78dfcab853fe6a536eebfda4b59deab53cd21f6cd9f00b \
+ --hash=sha256:06e6170bd5836770e8104c8fdd58e5e725cfeb309f0a6c681a811f557e97eac1 \
+ --hash=sha256:19d88bb05303fe63f71dd2c6270daca27cb9401c4ca8255fe50d1d920e0eb9ba \
+ --hash=sha256:21761006a7f497cb0d4de3d8ef4ca70532256688b0523eee02baf9eec895e27b \
+ --hash=sha256:28902ee51f12e0f19e1e16fbe2f8f06b6637f482c459dd393efddd0ec7f82045 \
+ --hash=sha256:2899753e2f61e571b3971747e302d5f420c3fd09650e1951e99f823bc3089dac \
+ --hash=sha256:2abb24cf3f17864770d18d673c85235ba52456b36a06b6afc1e07c1fdcd3d0e6 \
+ --hash=sha256:34c81968774648ab5ac09c29a375fdede03ba253f8f8287847bd480782f73a6a \
+ --hash=sha256:409088884802d511ee52ca067707b90c883426bd95514e8cfda8281dc2effe24 \
+ --hash=sha256:481daf36a4c443332e2ae9c137dfee878fcea781a2e3f895d54bd3002a900957 \
+ --hash=sha256:4b84a7a18f41e167f7995200a1d07a4a6810e89d29859df936f1c3923d263042 \
+ --hash=sha256:4f28f99c824ecebcdaa2e55d82953e38ff60ee5ec938476796636b86afa3956e \
+ --hash=sha256:5f05aa3d375b385734388e844bc01733bd33c644ab48e9684faa54e5389775ec \
+ --hash=sha256:7bcfc336a03a1aaa26dfce9fff3e287a3ba99872a157561cbfcebe67c13308e3 \
+ --hash=sha256:804bd67b8054a85447c8954215a906d6eff9cabeabe493fb6334b24f4bfff718 \
+ --hash=sha256:8bb5c6f6d043655e055be9b542aa5f3bdd30e4f3589163e85f93f3640060509f \
+ --hash=sha256:a009ffa5a621762d0c926a078c2d639104becab69e79538a494bcccb62cc0331 \
+ --hash=sha256:a8174a03289288c1f6c46d55cef02379b478bfbc8e358e02047487cad44c6ca1 \
+ --hash=sha256:ab43590f9cd5108f41aacf9fca31841142c786827a74ab7cc8a2eacb634e09a1 \
+ --hash=sha256:b10e7c2cd7870ba4ad9b2d8a6102eb5ffc1f16ca35e3de6bfa390c1113029d13 \
+ --hash=sha256:b13cfdd6c87fc3efb69ea4ec18ef79c74c3f98b4e5498ca9b85ab3b2c2329a67 \
+ --hash=sha256:b64d987153888790bcdb03a6473d321820597ab8dd9243b27a92153c4fa50fd2 \
+ --hash=sha256:b7951a701c07ea584c4fe327834b92a30825514c868b1f69c30445093fdd9d5a \
+ --hash=sha256:bdb12f69bcc02700c2b47e070238f42cb87f18c0bc1fc4cdb4fb2bc5fd7a3b8b \
+ --hash=sha256:c35d298c2c4bba75feb2195655dfea8124d855dfd7343bf8b8c055421eaf0cf8 \
+ --hash=sha256:c608937067d2fc5a4dd1a5ce92fd9e1398691b8c5d012d66e1ddd430e9244376 \
+ --hash=sha256:c9a6538e0415310aad77cb94004ca6482330fece18036b5f360b62c45814c4ef \
+ --hash=sha256:d8dfc6ab58ca7dda47d9237349157500468e404b17213d44fc1cb77bce532288 \
+ --hash=sha256:da4869fc5e7f62a88f3fe0b5c919d1d9f7ea3cef92d3689de2823fd27e40aa75 \
+ --hash=sha256:de759aafbae8763283b2ee5869c7255391fbc4de3ff171f8f030b5ec48381b74 \
+ --hash=sha256:e3157c7594ff2ef1634ee058aafc56a82db665c9438fd41b390f3bde1ab12250 \
+ --hash=sha256:e3f276d8493c3c97930e354b2595a44a21348b320d859fb4a2b9f66da9ed27ab \
+ --hash=sha256:ee4c11e460685c3e0c64a4c5de82ae143622410950d6be863303a1c4ba0e36d6 \
+ --hash=sha256:f1235f5ea01b7db5468d53ece6aaddf1ad0b88d9e7462b86ef96fe04995d7247 \
+ --hash=sha256:f7cee03c9a2e2ee26ec07479f38ea9c884e301d42c6d43a19d20fb014e3ba925 \
+ --hash=sha256:f859fb09d9583a985be9a493d5cfc5515b56b08f7447759a0c5deaf68d80506e \
+ --hash=sha256:ffcebe56eb09ff0c0885e750036a095e23793ba6c2e894e7e63f6d89ad51f22e
# via sqlalchemy
mypy-extensions==1.1.0 \
--hash=sha256:1be4cccdb0f2482337c4743e60421de3a356cd97508abadd57d47403e94f5505 \
@@ -744,26 +744,28 @@ protobuf==6.33.2 \
--hash=sha256:d9b19771ca75935b3a4422957bc518b0cecb978b31d1dd12037b088f6bcc0e43 \
--hash=sha256:fc2a0e8b05b180e5fc0dd1559fe8ebdae21a27e81ac77728fb6c42b12c7419b4
# via feast (setup.py)
-psutil==7.1.3 \
- --hash=sha256:0005da714eee687b4b8decd3d6cc7c6db36215c9e74e5ad2264b90c3df7d92dc \
- --hash=sha256:1068c303be3a72f8e18e412c5b2a8f6d31750fb152f9cb106b54090296c9d251 \
- --hash=sha256:18349c5c24b06ac5612c0428ec2a0331c26443d259e2a0144a9b24b4395b58fa \
- --hash=sha256:19644c85dcb987e35eeeaefdc3915d059dac7bd1167cdcdbf27e0ce2df0c08c0 \
- --hash=sha256:2bdbcd0e58ca14996a42adf3621a6244f1bb2e2e528886959c72cf1e326677ab \
- --hash=sha256:31d77fcedb7529f27bb3a0472bea9334349f9a04160e8e6e5020f22c59893264 \
- --hash=sha256:3792983e23b69843aea49c8f5b8f115572c5ab64c153bada5270086a2123c7e7 \
- --hash=sha256:3bb428f9f05c1225a558f53e30ccbad9930b11c3fc206836242de1091d3e7dd3 \
- --hash=sha256:56d974e02ca2c8eb4812c3f76c30e28836fffc311d55d979f1465c1feeb2b68b \
- --hash=sha256:6c86281738d77335af7aec228328e944b30930899ea760ecf33a4dba66be5e74 \
- --hash=sha256:8f33a3702e167783a9213db10ad29650ebf383946e91bc77f28a5eb083496bc9 \
- --hash=sha256:95ef04cf2e5ba0ab9eaafc4a11eaae91b44f4ef5541acd2ee91d9108d00d59a7 \
- --hash=sha256:ad81425efc5e75da3f39b3e636293360ad8d0b49bed7df824c79764fb4ba9b8b \
- --hash=sha256:b403da1df4d6d43973dc004d19cee3b848e998ae3154cc8097d139b77156c353 \
- --hash=sha256:bc31fa00f1fbc3c3802141eede66f3a2d51d89716a194bf2cd6fc68310a19880 \
- --hash=sha256:bd0d69cee829226a761e92f28140bec9a5ee9d5b4fb4b0cc589068dbfff559b1 \
- --hash=sha256:c525ffa774fe4496282fb0b1187725793de3e7c6b29e41562733cae9ada151ee \
- --hash=sha256:f39c2c19fe824b47484b96f9692932248a54c43799a84282cfe58d05a6449efd \
- --hash=sha256:fac9cd332c67f4422504297889da5ab7e05fd11e3c4392140f7370f4208ded1f
+psutil==7.2.1 \
+ --hash=sha256:05cc68dbb8c174828624062e73078e7e35406f4ca2d0866c272c2410d8ef06d1 \
+ --hash=sha256:08a2f175e48a898c8eb8eace45ce01777f4785bc744c90aa2cc7f2fa5462a266 \
+ --hash=sha256:0d67c1822c355aa6f7314d92018fb4268a76668a536f133599b91edd48759442 \
+ --hash=sha256:2ceae842a78d1603753561132d5ad1b2f8a7979cb0c283f5b52fb4e6e14b1a79 \
+ --hash=sha256:35630d5af80d5d0d49cfc4d64c1c13838baf6717a13effb35869a5919b854cdf \
+ --hash=sha256:3fce5f92c22b00cdefd1645aa58ab4877a01679e901555067b1bd77039aa589f \
+ --hash=sha256:494c513ccc53225ae23eec7fe6e1482f1b8a44674241b54561f755a898650679 \
+ --hash=sha256:5e38404ca2bb30ed7267a46c02f06ff842e92da3bb8c5bfdadbd35a5722314d8 \
+ --hash=sha256:81442dac7abfc2f4f4385ea9e12ddf5a796721c0f6133260687fec5c3780fa49 \
+ --hash=sha256:923f8653416604e356073e6e0bccbe7c09990acef442def2f5640dd0faa9689f \
+ --hash=sha256:93f3f7b0bb07711b49626e7940d6fe52aa9940ad86e8f7e74842e73189712129 \
+ --hash=sha256:99a4cd17a5fdd1f3d014396502daa70b5ec21bf4ffe38393e152f8e449757d67 \
+ --hash=sha256:ab2b98c9fc19f13f59628d94df5cc4cc4844bc572467d113a8b517d634e362c6 \
+ --hash=sha256:b1b0671619343aa71c20ff9767eced0483e4fc9e1f489d50923738caf6a03c17 \
+ --hash=sha256:b2e953fcfaedcfbc952b44744f22d16575d3aa78eb4f51ae74165b4e96e55f42 \
+ --hash=sha256:ba9f33bb525b14c3ea563b2fd521a84d2fa214ec59e3e6a2858f78d0844dd60d \
+ --hash=sha256:cfbe6b40ca48019a51827f20d830887b3107a74a79b01ceb8cc8de4ccb17b672 \
+ --hash=sha256:d34d2ca888208eea2b5c68186841336a7f5e0b990edec929be909353a202768a \
+ --hash=sha256:ea46c0d060491051d39f0d2cff4f98d5c72b288289f57a21556cc7d504db37fc \
+ --hash=sha256:f7583aec590485b43ca601dd9cea0dcd65bd7bb21d30ef4ddbf4ea6b5ed1bdd3 \
+ --hash=sha256:f78baafb38436d5a128f837fab2d92c276dfb48af01a240b861ae02b2413ada8
# via feast (setup.py)
pyarrow==21.0.0 \
--hash=sha256:067c66ca29aaedae08218569a114e413b26e742171f526e828e1064fcdec13f4 \
@@ -1184,12 +1186,14 @@ sqlalchemy[mypy]==2.0.45 \
--hash=sha256:1d8b4a7a8c9b537509d56d5cd10ecdcfbb95912d72480c8861524efecc6a3fff \
--hash=sha256:215f0528b914e5c75ef2559f69dca86878a3beeb0c1be7279d77f18e8d180ed4 \
--hash=sha256:2c0b74aa79e2deade948fe8593654c8ef4228c44ba862bb7c9585c8e0db90f33 \
+ --hash=sha256:2e90a344c644a4fa871eb01809c32096487928bd2038bf10f3e4515cb688cc56 \
--hash=sha256:3c5f76216e7b85770d5bb5130ddd11ee89f4d52b11783674a662c7dd57018177 \
--hash=sha256:470daea2c1ce73910f08caf10575676a37159a6d16c4da33d0033546bddebc9b \
--hash=sha256:4748601c8ea959e37e03d13dcda4a44837afcd1b21338e637f7c935b8da06177 \
--hash=sha256:4b6bec67ca45bc166c8729910bd2a87f1c0407ee955df110d78948f5b5827e8a \
--hash=sha256:5225a288e4c8cc2308dbdd874edad6e7d0fd38eac1e9e5f23503425c8eee20d0 \
--hash=sha256:56ead1f8dfb91a54a28cd1d072c74b3d635bcffbd25e50786533b822d4f2cde2 \
+ --hash=sha256:5964f832431b7cdfaaa22a660b4c7eb1dfcd6ed41375f67fd3e3440fd95cb3cc \
--hash=sha256:59a8b8bd9c6bedf81ad07c8bd5543eedca55fe9b8780b2b628d495ba55f8db1e \
--hash=sha256:672c45cae53ba88e0dad74b9027dddd09ef6f441e927786b05bec75d949fbb2e \
--hash=sha256:6d0beadc2535157070c9c17ecf25ecec31e13c229a8f69196d7590bde8082bf1 \
@@ -1208,7 +1212,9 @@ sqlalchemy[mypy]==2.0.45 \
--hash=sha256:b8c8b41b97fba5f62349aa285654230296829672fc9939cd7f35aab246d1c08b \
--hash=sha256:ba547ac0b361ab4f1608afbc8432db669bd0819b3e12e29fb5fa9529a8bba81d \
--hash=sha256:c1c2091b1489435ff85728fafeb990f073e64f6f5e81d5cd53059773e8521eb6 \
+ --hash=sha256:c64772786d9eee72d4d3784c28f0a636af5b0a29f3fe26ff11f55efe90c0bd85 \
--hash=sha256:cd337d3526ec5298f67d6a30bbbe4ed7e5e68862f0bf6dd21d289f8d37b7d60b \
+ --hash=sha256:d29b2b99d527dbc66dd87c3c3248a5dd789d974a507f4653c969999fc7c1191b \
--hash=sha256:d2c3684fca8a05f0ac1d9a21c1f4a266983a7ea9180efb80ffeb03861ecd01a0 \
--hash=sha256:d62e47f5d8a50099b17e2bfc1b0c7d7ecd8ba6b46b1507b58cc4f05eefc3bb1c \
--hash=sha256:d8a2ca754e5415cde2b656c27900b19d50ba076aa05ce66e2207623d3fe41f5a \
@@ -1316,13 +1322,13 @@ typing-inspection==0.4.2 \
--hash=sha256:4ed1cacbdc298c220f1bd249ed5287caa16f34d44ef4e9c3d0cbad5b521545e7 \
--hash=sha256:ba561c48a67c5958007083d386c3295464928b01faa735ab8547c5692e87f464
# via pydantic
-tzdata==2025.2 \
- --hash=sha256:1a403fada01ff9221ca8044d701868fa132215d84beb92242d9acd2147f667a8 \
- --hash=sha256:b60a638fcc0daffadf82fe0f57e53d06bdec2f36c4df66280ae79bce6bd6f2b9
+tzdata==2025.3 \
+ --hash=sha256:06a47e5700f3081aab02b2e513160914ff0694bce9947d6b76ebd6bf57cfc5d1 \
+ --hash=sha256:de39c2ca5dc7b0344f2eba86f49d614019d29f060fc4ebc8a417896a620b56a7
# via pandas
-urllib3==2.6.1 \
- --hash=sha256:5379eb6e1aba4088bae84f8242960017ec8d8e3decf30480b3a1abdaa9671a3f \
- --hash=sha256:e67d06fe947c36a7ca39f4994b08d73922d40e6cca949907be05efa6fd75110b
+urllib3==2.6.2 \
+ --hash=sha256:016f9c98bb7e98085cb2b4b17b87d2c702975664e4f060c6532e64d1c1a5e797 \
+ --hash=sha256:ec21cddfe7724fc7cb4ba4bea7aa8e2ef36f607a4bab81aa6ce42a13dc3f03dd
# via requests
uvicorn[standard]==0.34.0 \
--hash=sha256:023dc038422502fa28a09c7a30bf2b6991512da7dcdb8fd35fe57cfc154126f4 \
diff --git a/sdk/python/requirements/py3.11-ci-requirements.txt b/sdk/python/requirements/py3.11-ci-requirements.txt
index afc0ff1c64b..091236521ff 100644
--- a/sdk/python/requirements/py3.11-ci-requirements.txt
+++ b/sdk/python/requirements/py3.11-ci-requirements.txt
@@ -254,9 +254,9 @@ attrs==25.4.0 \
# jsonlines
# jsonschema
# referencing
-azure-core==1.36.0 \
- --hash=sha256:22e5605e6d0bf1d229726af56d9e92bc37b6e726b141a18be0b4d424131741b7 \
- --hash=sha256:fee9923a3a753e94a259563429f3644aaf05c486d45b1215d098115102d91d3b
+azure-core==1.37.0 \
+ --hash=sha256:7064f2c11e4b97f340e8e8c6d923b822978be3016e46b7bc4aa4b337cfb48aee \
+ --hash=sha256:b3abe2c59e7d6bb18b38c275a5029ff80f98990e7c90a5e646249a56630fcc19
# via
# azure-identity
# azure-storage-blob
@@ -345,9 +345,9 @@ beautifulsoup4==4.14.3 \
# via
# docling
# nbconvert
-bigtree==1.0.3 \
- --hash=sha256:18402a143130868b17ca84a74ca263e6f32f046d6978c30d244f8b94c4a01227 \
- --hash=sha256:99a18b6937a9b4ab8e560fec5c0720e10ebf37f84e44f9b5f47702c2e84c9aaa
+bigtree==1.0.4 \
+ --hash=sha256:e4af0c5bc0d2cd72e18442965e4509f642b16a0de65db6d0ec116e30f959010c \
+ --hash=sha256:f58a3238bb9b1142d893c9de4921bfd18d435427c75e0c168dd580eabf6dc7fd
# via feast (setup.py)
bleach[css]==6.3.0 \
--hash=sha256:6f3b91b1c0a02bb9a78b5a454c92506aa0fdf197e1d5e114d2e00c6f64306d22 \
@@ -377,9 +377,9 @@ build==1.3.0 \
# feast (setup.py)
# pip-tools
# singlestoredb
-cachetools==6.2.2 \
- --hash=sha256:6c09c98183bf58560c97b2abfcedcbaf6a896a490f534b031b661d3723b45ace \
- --hash=sha256:8e6d266b25e539df852251cfd6f990b4bc3a141db73b939058d809ebd2590fc6
+cachetools==6.2.4 \
+ --hash=sha256:69a7a52634fed8b8bf6e24a050fb60bff1c9bd8f6d24572b99c32d4e71e62a51 \
+ --hash=sha256:82c5c05585e70b6ba2d3ae09ea60b79548872185d2f24ae1f2709d37299fd607
# via google-auth
cassandra-driver==3.29.3 \
--hash=sha256:064bf45d3ca87239e11168c0110676fc64f7fdbddb4bcba9be787b8ad5f6d734 \
@@ -786,99 +786,99 @@ couchbase-columnar==1.0.0 \
--hash=sha256:fc0fad2d386c5b5df7aaaccd8751e01caa886cc640cc8c92523dd07c4e7be519 \
--hash=sha256:fc4efa3e15190c3731478006de494b046bc57785e9c8ae99ac8b375a91683e38
# via feast (setup.py)
-coverage[toml]==7.13.0 \
- --hash=sha256:0018f73dfb4301a89292c73be6ba5f58722ff79f51593352759c1790ded1cabe \
- --hash=sha256:00c3d22cf6fb1cf3bf662aaaa4e563be8243a5ed2630339069799835a9cc7f9b \
- --hash=sha256:02d9fb9eccd48f6843c98a37bd6817462f130b86da8660461e8f5e54d4c06070 \
- --hash=sha256:0602f701057c6823e5db1b74530ce85f17c3c5be5c85fc042ac939cbd909426e \
- --hash=sha256:06cac81bf10f74034e055e903f5f946e3e26fc51c09fc9f584e4a1605d977053 \
- --hash=sha256:086cede306d96202e15a4b77ace8472e39d9f4e5f9fd92dd4fecdfb2313b2080 \
- --hash=sha256:0900872f2fdb3ee5646b557918d02279dc3af3dfb39029ac4e945458b13f73bc \
- --hash=sha256:0a3a30f0e257df382f5f9534d4ce3d4cf06eafaf5192beb1a7bd066cb10e78fb \
- --hash=sha256:0b3d67d31383c4c68e19a88e28fc4c2e29517580f1b0ebec4a069d502ce1e0bf \
- --hash=sha256:0dfa3855031070058add1a59fdfda0192fd3e8f97e7c81de0596c145dea51820 \
- --hash=sha256:0f4872f5d6c54419c94c25dd6ae1d015deeb337d06e448cd890a1e89a8ee7f3b \
- --hash=sha256:11c21557d0e0a5a38632cbbaca5f008723b26a89d70db6315523df6df77d6232 \
- --hash=sha256:166ad2a22ee770f5656e1257703139d3533b4a0b6909af67c6b4a3adc1c98657 \
- --hash=sha256:193c3887285eec1dbdb3f2bd7fbc351d570ca9c02ca756c3afbc71b3c98af6ef \
- --hash=sha256:1d84e91521c5e4cb6602fe11ece3e1de03b2760e14ae4fcf1a4b56fa3c801fcd \
- --hash=sha256:1ed5630d946859de835a85e9a43b721123a8a44ec26e2830b296d478c7fd4259 \
- --hash=sha256:22486cdafba4f9e471c816a2a5745337742a617fef68e890d8baf9f3036d7833 \
- --hash=sha256:22ccfe8d9bb0d6134892cbe1262493a8c70d736b9df930f3f3afae0fe3ac924d \
- --hash=sha256:24e4e56304fdb56f96f80eabf840eab043b3afea9348b88be680ec5986780a0f \
- --hash=sha256:25dc33618d45456ccb1d37bce44bc78cf269909aa14c4db2e03d63146a8a1493 \
- --hash=sha256:263c3dbccc78e2e331e59e90115941b5f53e85cfcc6b3b2fbff1fd4e3d2c6ea8 \
- --hash=sha256:28ee1c96109974af104028a8ef57cec21447d42d0e937c0275329272e370ebcf \
- --hash=sha256:30a3a201a127ea57f7e14ba43c93c9c4be8b7d17a26e03bb49e6966d019eede9 \
- --hash=sha256:3188936845cd0cb114fa6a51842a304cdbac2958145d03be2377ec41eb285d19 \
- --hash=sha256:367449cf07d33dc216c083f2036bb7d976c6e4903ab31be400ad74ad9f85ce98 \
- --hash=sha256:37eee4e552a65866f15dedd917d5e5f3d59805994260720821e2c1b51ac3248f \
- --hash=sha256:3a10260e6a152e5f03f26db4a407c4c62d3830b9af9b7c0450b183615f05d43b \
- --hash=sha256:3a7b1cd820e1b6116f92c6128f1188e7afe421c7e1b35fa9836b11444e53ebd9 \
- --hash=sha256:3ab483ea0e251b5790c2aac03acde31bff0c736bf8a86829b89382b407cd1c3b \
- --hash=sha256:3ad968d1e3aa6ce5be295ab5fe3ae1bf5bb4769d0f98a80a0252d543a2ef2e9e \
- --hash=sha256:445badb539005283825959ac9fa4a28f712c214b65af3a2c464f1adc90f5fcbc \
- --hash=sha256:453b7ec753cf5e4356e14fe858064e5520c460d3bbbcb9c35e55c0d21155c256 \
- --hash=sha256:494f5459ffa1bd45e18558cd98710c36c0b8fbfa82a5eabcbe671d80ecffbfe8 \
- --hash=sha256:4b5de7d4583e60d5fd246dd57fcd3a8aa23c6e118a8c72b38adf666ba8e7e927 \
- --hash=sha256:4f3e223b2b2db5e0db0c2b97286aba0036ca000f06aca9b12112eaa9af3d92ae \
- --hash=sha256:4fdb6f54f38e334db97f72fa0c701e66d8479af0bc3f9bfb5b90f1c30f54500f \
- --hash=sha256:51a202e0f80f241ccb68e3e26e19ab5b3bf0f813314f2c967642f13ebcf1ddfe \
- --hash=sha256:581f086833d24a22c89ae0fe2142cfaa1c92c930adf637ddf122d55083fb5a0f \
- --hash=sha256:583221913fbc8f53b88c42e8dbb8fca1d0f2e597cb190ce45916662b8b9d9621 \
- --hash=sha256:58632b187be6f0be500f553be41e277712baa278147ecb7559983c6d9faf7ae1 \
- --hash=sha256:5c67dace46f361125e6b9cace8fe0b729ed8479f47e70c89b838d319375c8137 \
- --hash=sha256:5e70f92ef89bac1ac8a99b3324923b4749f008fdbd7aa9cb35e01d7a284a04f9 \
- --hash=sha256:5f5d9bd30756fff3e7216491a0d6d520c448d5124d3d8e8f56446d6412499e74 \
- --hash=sha256:5f8a0297355e652001015e93be345ee54393e45dc3050af4a0475c5a2b767d46 \
- --hash=sha256:62d7c4f13102148c78d7353c6052af6d899a7f6df66a32bddcc0c0eb7c5326f8 \
- --hash=sha256:69ac2c492918c2461bc6ace42d0479638e60719f2a4ef3f0815fa2df88e9f940 \
- --hash=sha256:6abb3a4c52f05e08460bd9acf04fec027f8718ecaa0d09c40ffbc3fbd70ecc39 \
- --hash=sha256:6e63ccc6e0ad8986386461c3c4b737540f20426e7ec932f42e030320896c311a \
- --hash=sha256:6e9e451dee940a86789134b6b0ffbe31c454ade3b849bb8a9d2cca2541a8e91d \
- --hash=sha256:6fb2d5d272341565f08e962cce14cdf843a08ac43bd621783527adb06b089c4b \
- --hash=sha256:71936a8b3b977ddd0b694c28c6a34f4fff2e9dd201969a4ff5d5fc7742d614b0 \
- --hash=sha256:73419b89f812f498aca53f757dd834919b48ce4799f9d5cad33ca0ae442bdb1a \
- --hash=sha256:739c6c051a7540608d097b8e13c76cfa85263ced467168dc6b477bae3df7d0e2 \
- --hash=sha256:7464663eaca6adba4175f6c19354feea61ebbdd735563a03d1e472c7072d27bb \
- --hash=sha256:74c136e4093627cf04b26a35dab8cbfc9b37c647f0502fc313376e11726ba303 \
- --hash=sha256:76541dc8d53715fb4f7a3a06b34b0dc6846e3c69bc6204c55653a85dd6220971 \
- --hash=sha256:7a485ff48fbd231efa32d58f479befce52dcb6bfb2a88bb7bf9a0b89b1bc8030 \
- --hash=sha256:7e442c013447d1d8d195be62852270b78b6e255b79b8675bad8479641e21fd96 \
- --hash=sha256:7f15a931a668e58087bc39d05d2b4bf4b14ff2875b49c994bbdb1c2217a8daeb \
- --hash=sha256:7f88ae3e69df2ab62fb0bc5219a597cb890ba5c438190ffa87490b315190bb33 \
- --hash=sha256:8069e831f205d2ff1f3d355e82f511eb7c5522d7d413f5db5756b772ec8697f8 \
- --hash=sha256:850d2998f380b1e266459ca5b47bc9e7daf9af1d070f66317972f382d46f1904 \
- --hash=sha256:898cce66d0836973f48dda4e3514d863d70142bdf6dfab932b9b6a90ea5b222d \
- --hash=sha256:9097818b6cc1cfb5f174e3263eba4a62a17683bcfe5c4b5d07f4c97fa51fbf28 \
- --hash=sha256:936bc20503ce24770c71938d1369461f0c5320830800933bc3956e2a4ded930e \
- --hash=sha256:9372dff5ea15930fea0445eaf37bbbafbc771a49e70c0aeed8b4e2c2614cc00e \
- --hash=sha256:9987a9e4f8197a1000280f7cc089e3ea2c8b3c0a64d750537809879a7b4ceaf9 \
- --hash=sha256:99acd4dfdfeb58e1937629eb1ab6ab0899b131f183ee5f23e0b5da5cba2fec74 \
- --hash=sha256:9b01c22bc74a7fb44066aaf765224c0d933ddf1f5047d6cdfe4795504a4493f8 \
- --hash=sha256:a00d3a393207ae12f7c49bb1c113190883b500f48979abb118d8b72b8c95c032 \
- --hash=sha256:a23e5a1f8b982d56fa64f8e442e037f6ce29322f1f9e6c2344cd9e9f4407ee57 \
- --hash=sha256:a2bdb3babb74079f021696cb46b8bb5f5661165c385d3a238712b031a12355be \
- --hash=sha256:a394aa27f2d7ff9bc04cf703817773a59ad6dfbd577032e690f961d2460ee936 \
- --hash=sha256:a6c6e16b663be828a8f0b6c5027d36471d4a9f90d28444aa4ced4d48d7d6ae8f \
- --hash=sha256:af0a583efaacc52ae2521f8d7910aff65cdb093091d76291ac5820d5e947fc1c \
- --hash=sha256:af827b7cbb303e1befa6c4f94fd2bf72f108089cfa0f8abab8f4ca553cf5ca5a \
- --hash=sha256:c4be718e51e86f553bcf515305a158a1cd180d23b72f07ae76d6017c3cc5d791 \
- --hash=sha256:cdb3c9f8fef0a954c632f64328a3935988d33a6604ce4bf67ec3e39670f12ae5 \
- --hash=sha256:d10fd186aac2316f9bbb46ef91977f9d394ded67050ad6d84d94ed6ea2e8e54e \
- --hash=sha256:d1e97353dcc5587b85986cda4ff3ec98081d7e84dd95e8b2a6d59820f0545f8a \
- --hash=sha256:d2a9d7f1c11487b1c69367ab3ac2d81b9b3721f097aa409a3191c3e90f8f3dd7 \
- --hash=sha256:de7f6748b890708578fc4b7bb967d810aeb6fcc9bff4bb77dbca77dab2f9df6a \
- --hash=sha256:e5330fa0cc1f5c3c4c3bb8e101b742025933e7848989370a1d4c8c5e401ea753 \
- --hash=sha256:e999e2dcc094002d6e2c7bbc1fb85b58ba4f465a760a8014d97619330cdbbbf3 \
- --hash=sha256:eb76670874fdd6091eedcc856128ee48c41a9bbbb9c3f1c7c3cf169290e3ffd6 \
- --hash=sha256:f1c23e24a7000da892a312fb17e33c5f94f8b001de44b7cf8ba2e36fbd15859e \
- --hash=sha256:f2ffc92b46ed6e6760f1d47a71e56b5664781bc68986dbd1836b2b70c0ce2071 \
- --hash=sha256:f4f72a85316d8e13234cafe0a9f81b40418ad7a082792fa4165bd7d45d96066b \
- --hash=sha256:f59883c643cb19630500f57016f76cfdcd6845ca8c5b5ea1f6e17f74c8e5f511 \
- --hash=sha256:f6aaef16d65d1787280943f1c8718dc32e9cf141014e4634d64446702d26e0ff \
- --hash=sha256:fe81055d8c6c9de76d60c94ddea73c290b416e061d40d542b24a5871bad498b7 \
- --hash=sha256:ff45e0cd8451e293b63ced93161e189780baf444119391b3e7d25315060368a6
+coverage[toml]==7.13.1 \
+ --hash=sha256:0403f647055de2609be776965108447deb8e384fe4a553c119e3ff6bfbab4784 \
+ --hash=sha256:0642eae483cc8c2902e4af7298bf886d605e80f26382124cddc3967c2a3df09e \
+ --hash=sha256:0b609fc9cdbd1f02e51f67f51e5aee60a841ef58a68d00d5ee2c0faf357481a3 \
+ --hash=sha256:0d2c11f3ea4db66b5cbded23b20185c35066892c67d80ec4be4bab257b9ad1e0 \
+ --hash=sha256:0e42e0ec0cd3e0d851cb3c91f770c9301f48647cb2877cb78f74bdaa07639a79 \
+ --hash=sha256:132718176cc723026d201e347f800cd1a9e4b62ccd3f82476950834dad501c75 \
+ --hash=sha256:16cc1da46c04fb0fb128b4dc430b78fa2aba8a6c0c9f8eb391fd5103409a6ac6 \
+ --hash=sha256:18be793c4c87de2965e1c0f060f03d9e5aff66cfeae8e1dbe6e5b88056ec153f \
+ --hash=sha256:1a55d509a1dc5a5b708b5dad3b5334e07a16ad4c2185e27b40e4dba796ab7f88 \
+ --hash=sha256:1dcb645d7e34dcbcc96cd7c132b1fc55c39263ca62eb961c064eb3928997363b \
+ --hash=sha256:2016745cb3ba554469d02819d78958b571792bb68e31302610e898f80dd3a573 \
+ --hash=sha256:228b90f613b25ba0019361e4ab81520b343b622fc657daf7e501c4ed6a2366c0 \
+ --hash=sha256:309ef5706e95e62578cda256b97f5e097916a2c26247c287bbe74794e7150df2 \
+ --hash=sha256:339dc63b3eba969067b00f41f15ad161bf2946613156fb131266d8debc8e44d0 \
+ --hash=sha256:3820778ea1387c2b6a818caec01c63adc5b3750211af6447e8dcfb9b6f08dbba \
+ --hash=sha256:3d42df8201e00384736f0df9be2ced39324c3907607d17d50d50116c989d84cd \
+ --hash=sha256:3e7b8bd70c48ffb28461ebe092c2345536fb18bbbf19d287c8913699735f505c \
+ --hash=sha256:3f2f725aa3e909b3c5fdb8192490bdd8e1495e85906af74fe6e34a2a77ba0673 \
+ --hash=sha256:3fc6a169517ca0d7ca6846c3c5392ef2b9e38896f61d615cb75b9e7134d4ee1e \
+ --hash=sha256:45980ea19277dc0a579e432aef6a504fe098ef3a9032ead15e446eb0f1191aee \
+ --hash=sha256:4d010d080c4888371033baab27e47c9df7d6fb28d0b7b7adf85a4a49be9298b3 \
+ --hash=sha256:4de84e71173d4dada2897e5a0e1b7877e5eefbfe0d6a44edee6ce31d9b8ec09e \
+ --hash=sha256:549d195116a1ba1e1ae2f5ca143f9777800f6636eab917d4f02b5310d6d73461 \
+ --hash=sha256:562ec27dfa3f311e0db1ba243ec6e5f6ab96b1edfcfc6cf86f28038bc4961ce6 \
+ --hash=sha256:57dfc8048c72ba48a8c45e188d811e5efd7e49b387effc8fb17e97936dde5bf6 \
+ --hash=sha256:5899d28b5276f536fcf840b18b61a9fce23cc3aec1d114c44c07fe94ebeaa500 \
+ --hash=sha256:60cfb538fe9ef86e5b2ab0ca8fc8d62524777f6c611dcaf76dc16fbe9b8e698a \
+ --hash=sha256:623dcc6d7a7ba450bbdbeedbaa0c42b329bdae16491af2282f12a7e809be7eb9 \
+ --hash=sha256:67170979de0dacac3f3097d02b0ad188d8edcea44ccc44aaa0550af49150c7dc \
+ --hash=sha256:6e73ebb44dca5f708dc871fe0b90cf4cff1a13f9956f747cc87b535a840386f5 \
+ --hash=sha256:6f34591000f06e62085b1865c9bc5f7858df748834662a51edadfd2c3bfe0dd3 \
+ --hash=sha256:724b1b270cb13ea2e6503476e34541a0b1f62280bc997eab443f87790202033d \
+ --hash=sha256:75a6f4aa904301dab8022397a22c0039edc1f51e90b83dbd4464b8a38dc87842 \
+ --hash=sha256:77545b5dcda13b70f872c3b5974ac64c21d05e65b1590b441c8560115dc3a0d1 \
+ --hash=sha256:776483fd35b58d8afe3acbd9988d5de592ab6da2d2a865edfdbc9fdb43e7c486 \
+ --hash=sha256:77cc258aeb29a3417062758975521eae60af6f79e930d6993555eeac6a8eac29 \
+ --hash=sha256:794f7c05af0763b1bbd1b9e6eff0e52ad068be3b12cd96c87de037b01390c968 \
+ --hash=sha256:868a2fae76dfb06e87291bcbd4dcbcc778a8500510b618d50496e520bd94d9b9 \
+ --hash=sha256:8842af7f175078456b8b17f1b73a0d16a65dcbdc653ecefeb00a56b3c8c298c4 \
+ --hash=sha256:8d9bc218650022a768f3775dd7fdac1886437325d8d295d923ebcfef4892ad5c \
+ --hash=sha256:8f572d989142e0908e6acf57ad1b9b86989ff057c006d13b76c146ec6a20216a \
+ --hash=sha256:90480b2134999301eea795b3a9dbf606c6fbab1b489150c501da84a959442465 \
+ --hash=sha256:916abf1ac5cf7eb16bc540a5bf75c71c43a676f5c52fcb9fe75a2bd75fb944e8 \
+ --hash=sha256:92f980729e79b5d16d221038dbf2e8f9a9136afa072f9d5d6ed4cb984b126a09 \
+ --hash=sha256:933082f161bbb3e9f90d00990dc956120f608cdbcaeea15c4d897f56ef4fe416 \
+ --hash=sha256:97ab3647280d458a1f9adb85244e81587505a43c0c7cff851f5116cd2814b894 \
+ --hash=sha256:985b7836931d033570b94c94713c6dba5f9d3ff26045f72c3e5dbc5fe3361e5a \
+ --hash=sha256:9e549d642426e3579b3f4b92d0431543b012dcb6e825c91619d4e93b7363c3f9 \
+ --hash=sha256:9edd0e01a343766add6817bc448408858ba6b489039eaaa2018474e4001651a4 \
+ --hash=sha256:9ee68b21909686eeb21dfcba2c3b81fee70dcf38b140dcd5aa70680995fa3aa5 \
+ --hash=sha256:9f5e772ed5fef25b3de9f2008fe67b92d46831bd2bc5bdc5dd6bfd06b83b316f \
+ --hash=sha256:a03a4f3a19a189919c7055098790285cc5c5b0b3976f8d227aea39dbf9f8bfdb \
+ --hash=sha256:a4d240d260a1aed814790bbe1f10a5ff31ce6c21bc78f0da4a1e8268d6c80dbd \
+ --hash=sha256:a5a68357f686f8c4d527a2dc04f52e669c2fc1cbde38f6f7eb6a0e58cbd17cae \
+ --hash=sha256:a998cc0aeeea4c6d5622a3754da5a493055d2d95186bad877b0a34ea6e6dbe0a \
+ --hash=sha256:b67e47c5595b9224599016e333f5ec25392597a89d5744658f837d204e16c63e \
+ --hash=sha256:b6f3b96617e9852703f5b633ea01315ca45c77e879584f283c44127f0f1ec564 \
+ --hash=sha256:b7593fe7eb5feaa3fbb461ac79aac9f9fc0387a5ca8080b0c6fe2ca27b091afd \
+ --hash=sha256:bb3f6562e89bad0110afbe64e485aac2462efdce6232cdec7862a095dc3412f6 \
+ --hash=sha256:bb4f8c3c9a9f34423dba193f241f617b08ffc63e27f67159f60ae6baf2dcfe0f \
+ --hash=sha256:bd63e7b74661fed317212fab774e2a648bc4bb09b35f25474f8e3325d2945cd7 \
+ --hash=sha256:be753b225d159feb397bd0bf91ae86f689bad0da09d3b301478cd39b878ab31a \
+ --hash=sha256:bf100a3288f9bb7f919b87eb84f87101e197535b9bd0e2c2b5b3179633324fee \
+ --hash=sha256:c223d078112e90dc0e5c4e35b98b9584164bea9fbbd221c0b21c5241f6d51b62 \
+ --hash=sha256:c3d8c679607220979434f494b139dfb00131ebf70bb406553d69c1ff01a5c33d \
+ --hash=sha256:c43257717611ff5e9a1d79dce8e47566235ebda63328718d9b65dd640bc832ef \
+ --hash=sha256:c832ec92c4499ac463186af72f9ed4d8daec15499b16f0a879b0d1c8e5cf4a3b \
+ --hash=sha256:c8e2706ceb622bc63bac98ebb10ef5da80ed70fbd8a7999a5076de3afaef0fb1 \
+ --hash=sha256:cb237bfd0ef4d5eb6a19e29f9e528ac67ac3be932ea6b44fb6cc09b9f3ecff78 \
+ --hash=sha256:ccd7a6fca48ca9c131d9b0a2972a581e28b13416fc313fb98b6d24a03ce9a398 \
+ --hash=sha256:d10a2ed46386e850bb3de503a54f9fe8192e5917fcbb143bfef653a9355e9a53 \
+ --hash=sha256:d1443ba9acbb593fa7c1c29e011d7c9761545fe35e7652e85ce7f51a16f7e08d \
+ --hash=sha256:d2287ac9360dec3837bfdad969963a5d073a09a85d898bd86bea82aa8876ef3c \
+ --hash=sha256:d3c9f051b028810f5a87c88e5d6e9af3c0ff32ef62763bf15d29f740453ca909 \
+ --hash=sha256:d72140ccf8a147e94274024ff6fd8fb7811354cf7ef88b1f0a988ebaa5bc774f \
+ --hash=sha256:d938b4a840fb1523b9dfbbb454f652967f18e197569c32266d4d13f37244c3d9 \
+ --hash=sha256:db622b999ffe49cb891f2fff3b340cdc2f9797d01a0a202a0973ba2562501d90 \
+ --hash=sha256:e09fbecc007f7b6afdfb3b07ce5bd9f8494b6856dd4f577d26c66c391b829851 \
+ --hash=sha256:e1fa280b3ad78eea5be86f94f461c04943d942697e0dac889fa18fff8f5f9147 \
+ --hash=sha256:e4f18eca6028ffa62adbd185a8f1e1dd242f2e68164dba5c2b74a5204850b4cf \
+ --hash=sha256:e825dbb7f84dfa24663dd75835e7257f8882629fc11f03ecf77d84a75134b864 \
+ --hash=sha256:eaecf47ef10c72ece9a2a92118257da87e460e113b83cc0d2905cbbe931792b4 \
+ --hash=sha256:ef6688db9bf91ba111ae734ba6ef1a063304a881749726e0d3575f5c10a9facf \
+ --hash=sha256:f398ba4df52d30b1763f62eed9de5620dcde96e6f491f4c62686736b155aa6e4 \
+ --hash=sha256:f80e2bb21bfab56ed7405c2d79d34b5dc0bc96c2c1d2a067b643a09fb756c43a \
+ --hash=sha256:f83351e0f7dcdb14d7326c3d8d8c4e915fa685cbfdc6281f9470d97a04e9dfe4 \
+ --hash=sha256:f8dca5590fec7a89ed6826fce625595279e586ead52e9e958d3237821fbc750c \
+ --hash=sha256:fa3edde1aa8807de1d05934982416cb3ec46d1d4d91e280bcce7cca01c507992 \
+ --hash=sha256:fea07c1a39a22614acb762e3fbbb4011f65eedafcb2948feeef641ac78b4ee5c \
+ --hash=sha256:ff10896fa55167371960c5908150b434b71c876dfab97b69478f22c8b445ea19 \
+ --hash=sha256:ff86d4e85188bba72cfb876df3e11fa243439882c55957184af44a35bd5880b7 \
+ --hash=sha256:ffed1e4980889765c84a5d1a566159e363b71d6b6fbaf0bebc9d3c30bc016766
# via pytest-cov
cryptography==43.0.3 \
--hash=sha256:0c580952eef9bf68c4747774cde7ec1d85a6e61de97281f2dba83c7d2c806362 \
@@ -923,51 +923,51 @@ cryptography==43.0.3 \
# snowflake-connector-python
# types-pyopenssl
# types-redis
-dask[dataframe]==2025.11.0 \
- --hash=sha256:08c35a8146c05c93b34f83cf651009129c42ee71762da7ca452fb7308641c2b8 \
- --hash=sha256:23d59e624b80ee05b7cc8df858682cca58262c4c3b197ccf61da0f6543c8f7c3
+dask[dataframe]==2025.12.0 \
+ --hash=sha256:4213ce9c5d51d6d89337cff69de35d902aa0bf6abdb8a25c942a4d0281f3a598 \
+ --hash=sha256:8d478f2aabd025e2453cf733ad64559de90cf328c20209e4574e9543707c3e1b
# via feast (setup.py)
datasets==4.0.0 \
--hash=sha256:7ef95e62025fd122882dbce6cb904c8cd3fbc829de6669a5eb939c77d50e203d \
--hash=sha256:9657e7140a9050db13443ba21cb5de185af8af944479b00e7ff1e00a61c8dbf1
# via feast (setup.py)
-db-dtypes==1.4.4 \
- --hash=sha256:26f53db5df1acd746b88c5647913a1b20f731c0af1b11abcb6bec5365f31098a \
- --hash=sha256:32c13039982656a8598a0835f25f0e07e34c9a423e471ee60c2553240b7fcf1e
+db-dtypes==1.5.0 \
+ --hash=sha256:abdbb2e4eb965800ed6f98af0c5c1cafff9063ace09114be2d26a7f046be2c8a \
+ --hash=sha256:ad9e94243f53e104bc77dbf9ae44b580d83a770d3694483aba59c9767966daa5
# via
# google-cloud-bigquery
# pandas-gbq
-debugpy==1.8.17 \
- --hash=sha256:045290c010bcd2d82bc97aa2daf6837443cd52f6328592698809b4549babcee1 \
- --hash=sha256:1440fd514e1b815edd5861ca394786f90eb24960eb26d6f7200994333b1d79e3 \
- --hash=sha256:17e456da14848d618662354e1dccfd5e5fb75deec3d1d48dc0aa0baacda55860 \
- --hash=sha256:24693179ef9dfa20dca8605905a42b392be56d410c333af82f1c5dff807a64cc \
- --hash=sha256:3a32c0af575749083d7492dc79f6ab69f21b2d2ad4cd977a958a07d5865316e4 \
- --hash=sha256:3bea3b0b12f3946e098cce9b43c3c46e317b567f79570c3f43f0b96d00788088 \
- --hash=sha256:5c59b74aa5630f3a5194467100c3b3d1c77898f9ab27e3f7dc5d40fc2f122670 \
- --hash=sha256:60c7dca6571efe660ccb7a9508d73ca14b8796c4ed484c2002abba714226cfef \
- --hash=sha256:6a4e9dacf2cbb60d2514ff7b04b4534b0139facbf2abdffe0639ddb6088e59cf \
- --hash=sha256:6c5cd6f009ad4fca8e33e5238210dc1e5f42db07d4b6ab21ac7ffa904a196420 \
- --hash=sha256:857c1dd5d70042502aef1c6d1c2801211f3ea7e56f75e9c335f434afb403e464 \
- --hash=sha256:893cba7bb0f55161de4365584b025f7064e1f88913551bcd23be3260b231429c \
- --hash=sha256:8deb4e31cd575c9f9370042876e078ca118117c1b5e1f22c32befcfbb6955f0c \
- --hash=sha256:a3aad0537cf4d9c1996434be68c6c9a6d233ac6f76c2a482c7803295b4e4f99a \
- --hash=sha256:b13eea5587e44f27f6c48588b5ad56dcb74a4f3a5f89250443c94587f3eb2ea1 \
- --hash=sha256:b532282ad4eca958b1b2d7dbcb2b7218e02cb934165859b918e3b6ba7772d3f4 \
- --hash=sha256:b69b6bd9dba6a03632534cdf67c760625760a215ae289f7489a452af1031fe1f \
- --hash=sha256:b75868b675949a96ab51abc114c7163f40ff0d8f7d6d5fd63f8932fd38e9c6d7 \
- --hash=sha256:bb1bbf92317e1f35afcf3ef0450219efb3afe00be79d8664b250ac0933b9015f \
- --hash=sha256:c41d2ce8bbaddcc0009cc73f65318eedfa3dbc88a8298081deb05389f1ab5542 \
- --hash=sha256:c6bdf134457ae0cac6fb68205776be635d31174eeac9541e1d0c062165c6461f \
- --hash=sha256:d3fce3f0e3de262a3b67e69916d001f3e767661c6e1ee42553009d445d1cd840 \
- --hash=sha256:e34ee844c2f17b18556b5bbe59e1e2ff4e86a00282d2a46edab73fd7f18f4a83 \
- --hash=sha256:e79a195f9e059edfe5d8bf6f3749b2599452d3e9380484cd261f6b7cd2c7c4da \
- --hash=sha256:e851beb536a427b5df8aa7d0c7835b29a13812f41e46292ff80b2ef77327355a \
- --hash=sha256:e8f8f61c518952fb15f74a302e068b48d9c4691768ade433e4adeea961993464 \
- --hash=sha256:eaa85bce251feca8e4c87ce3b954aba84b8c645b90f0e6a515c00394a9f5c0e7 \
- --hash=sha256:f14467edef672195c6f6b8e27ce5005313cb5d03c9239059bc7182b60c176e2d \
- --hash=sha256:f2ac8055a0c4a09b30b931100996ba49ef334c6947e7ae365cdd870416d7513e \
- --hash=sha256:fd723b47a8c08892b1a16b2c6239a8b96637c62a59b94bb5dab4bac592a58a8e
+debugpy==1.8.19 \
+ --hash=sha256:0601708223fe1cd0e27c6cce67a899d92c7d68e73690211e6788a4b0e1903f5b \
+ --hash=sha256:14035cbdbb1fe4b642babcdcb5935c2da3b1067ac211c5c5a8fdc0bb31adbcaa \
+ --hash=sha256:1e8c4d1bd230067bf1bbcdbd6032e5a57068638eb28b9153d008ecde288152af \
+ --hash=sha256:327cb28c3ad9e17bc925efc7f7018195fd4787c2fe4b7af1eec11f1d19bdec62 \
+ --hash=sha256:360ffd231a780abbc414ba0f005dad409e71c78637efe8f2bd75837132a41d38 \
+ --hash=sha256:4468de0c30012d367944f0eab4ecb8371736e8ef9522a465f61214f344c11183 \
+ --hash=sha256:6599cab8a783d1496ae9984c52cb13b7c4a3bd06a8e6c33446832a5d97ce0bee \
+ --hash=sha256:66e3d2fd8f2035a8f111eb127fa508469dfa40928a89b460b41fd988684dc83d \
+ --hash=sha256:76f566baaf7f3e06adbe67ffedccd2ee911d1e486f55931939ce3f0fe1090774 \
+ --hash=sha256:783a519e6dfb1f3cd773a9bda592f4887a65040cb0c7bd38dde410f4e53c40d4 \
+ --hash=sha256:7b62c0f015120ede25e5124a5f9d8a424e1208e3d96a36c89958f046ee21fff6 \
+ --hash=sha256:806d6800246244004625d5222d7765874ab2d22f3ba5f615416cf1342d61c488 \
+ --hash=sha256:85016a73ab84dea1c1f1dcd88ec692993bcbe4532d1b49ecb5f3c688ae50c606 \
+ --hash=sha256:8e19a725f5d486f20e53a1dde2ab8bb2c9607c40c00a42ab646def962b41125f \
+ --hash=sha256:91e35db2672a0abaf325f4868fcac9c1674a0d9ad9bb8a8c849c03a5ebba3e6d \
+ --hash=sha256:a21bfdea088f713df05fa246ba0520f6ba44dd7eaec224742f51987a6979a648 \
+ --hash=sha256:b1cb98e5325da3059ca24445fca48314bfddfdf65ce1b59ff07055e723f06bd2 \
+ --hash=sha256:b605f17e89ba0ecee994391194285fada89cee111cfcd29d6f2ee11cbdc40976 \
+ --hash=sha256:b7dd275cf2c99e53adb9654f5ae015f70415bbe2bacbe24cfee30d54b6aa03c5 \
+ --hash=sha256:bccb1540a49cde77edc7ce7d9d075c1dbeb2414751bc0048c7a11e1b597a4c2e \
+ --hash=sha256:c047177ab2d286451f242b855b650d313198c4a987140d4b35218b2855a64a4a \
+ --hash=sha256:c30639998a9f9cd9699b4b621942c0179a6527f083c72351f95c6ab1728d5b73 \
+ --hash=sha256:c5dcfa21de1f735a4f7ced4556339a109aa0f618d366ede9da0a3600f2516d8b \
+ --hash=sha256:c9b9bf440141a36836bdbe4320a2b126bb38aafa85e1aed05d7bfbb0e2a278bf \
+ --hash=sha256:d40c016c1f538dbf1762936e3aeb43a89b965069d9f60f9e39d35d9d25e6b809 \
+ --hash=sha256:d9b6f633fd2865af2afba2beb0c1819b6ecd4aed1c8f90f5d1bbca3272306b10 \
+ --hash=sha256:e24b1652a1df1ab04d81e7ead446a91c226de704ff5dde6bd0a0dbaab07aa3f2 \
+ --hash=sha256:e9c68d9a382ec754dc05ed1d1b4ed5bd824b9f7c1a8cd1083adb84b3c93501de \
+ --hash=sha256:eea7e5987445ab0b5ed258093722d5ecb8bb72217c5c9b1e21f64efe23ddebdb \
+ --hash=sha256:fce6da15d73be5935b4438435c53adb512326a3e11e4f90793ea87cd9f018254
# via ipykernel
decorator==5.2.1 \
--hash=sha256:65f266143752f734b0a7cc83c46f4618af75b8c5911b00ccb61d0ac9b6da0360 \
@@ -1009,9 +1009,9 @@ docling==2.27.0 \
--hash=sha256:1288ed75b27e33bf94daff34faffc6d11b7d7ccc13e3df84fb24adad3991f72d \
--hash=sha256:faba35662612a2c687a3a463e501d95f645316436084af92a0442ce162429a3d
# via feast (setup.py)
-docling-core[chunking]==2.54.1 \
- --hash=sha256:2d22ee1cd8508fa7ffdd2e01ef30d7521390ff55ef240610f16be0cf54ffe73e \
- --hash=sha256:c6595e8b84f5e9de7a0a6298206d749f4be5730824604e684f204078a3689985
+docling-core[chunking]==2.57.0 \
+ --hash=sha256:24b71172e8bc4fbe2b4213b29f51878114f4c13f25fc0bc9920168505c76c1a3 \
+ --hash=sha256:398768b4d275ad2e11703ad9446fd0315a9a5fc8d09bc45ed207302d844d6ed5
# via
# docling
# docling-ibm-models
@@ -1124,13 +1124,13 @@ durationpy==0.10 \
easyocr==1.7.2 \
--hash=sha256:5be12f9b0e595d443c9c3d10b0542074b50f0ec2d98b141a109cd961fd1c177c
# via docling
-elastic-transport==9.2.0 \
- --hash=sha256:0331466ca8febdb7d168c0fbf159294b0066492733b51da94f4dd28a0ee596cd \
- --hash=sha256:f52b961e58e6b76d488993286907f61a6ddccbdae8e0135ce8d369227b6282d8
+elastic-transport==9.2.1 \
+ --hash=sha256:39e1a25e486af34ce7aa1bc9005d1c736f1b6fb04c9b64ea0604ded5a61fc1d4 \
+ --hash=sha256:97d9abd638ba8aa90faa4ca1bf1a18bde0fe2088fbc8757f2eb7b299f205773d
# via elasticsearch
-elasticsearch==9.2.0 \
- --hash=sha256:87090fe98c515ec0fce82f633fe11d7e90e04d93581b6b3e05de29efe4cc8b74 \
- --hash=sha256:99656baa34b10130402b6c38429feddf7aee1c3247566e8f95f0d0267fe9f9ab
+elasticsearch==9.2.1 \
+ --hash=sha256:8665f5a0b4d29a7c2772851c05ea8a09279abb7928b7d727524613bd61d75958 \
+ --hash=sha256:97f473418e8976611349757287ac982acf12f4e305182863d985d5a031c36830
# via feast (setup.py)
entrypoints==0.4 \
--hash=sha256:b706eddaa9218a19ebcd67b56818f05bb27589b1ca9e8d797b74affad4ccacd4 \
@@ -1177,9 +1177,9 @@ faiss-cpu==1.10.0 \
--hash=sha256:e71f7e24d5b02d3a51df47b77bd10f394a1b48a8331d5c817e71e9e27a8a75ac \
--hash=sha256:f71c5860c860df2320299f9e4f2ca1725beb559c04acb1cf961ed24e6218277a
# via feast (setup.py)
-fastapi==0.124.0 \
- --hash=sha256:260cd178ad75e6d259991f2fd9b0fee924b224850079df576a3ba604ce58f4e6 \
- --hash=sha256:91596bdc6dde303c318f06e8d2bc75eafb341fc793a0c9c92c0bc1db1ac52480
+fastapi==0.128.0 \
+ --hash=sha256:1cc179e1cef10a6be60ffe429f79b829dce99d8de32d7acb7e6c8dfdf7f2645a \
+ --hash=sha256:aebd93f9716ee3b4f4fcfe13ffb7cf308d99c9f3ab5622d8877441072561582d
# via
# feast (setup.py)
# fastapi-mcp
@@ -1191,9 +1191,9 @@ fastjsonschema==2.21.2 \
--hash=sha256:1c797122d0a86c5cace2e54bf4e819c36223b552017172f32c5c024a6b77e463 \
--hash=sha256:b1eb43748041c880796cd077f1a07c3d94e93ae84bba5ed36800a33554ae05de
# via nbformat
-filelock==3.20.0 \
- --hash=sha256:339b4732ffda5cd79b13f4e2711a31b0365ce445d95d243bb996273d072546a2 \
- --hash=sha256:711e943b4ec6be42e1d4e6690b48dc175c822967466bb31c0c293f34334c13f4
+filelock==3.20.1 \
+ --hash=sha256:15d9e9a67306188a44baa72f569d2bfd803076269365fdea0934385da4dc361a \
+ --hash=sha256:b8360948b351b80f420878d8516519a2204b07aefcdcfd24912a5d33127f188c
# via
# datasets
# huggingface-hub
@@ -1371,9 +1371,9 @@ google-api-core[grpc]==2.28.1 \
# google-cloud-storage
# opencensus
# pandas-gbq
-google-auth==2.43.0 \
- --hash=sha256:88228eee5fc21b62a1b5fe773ca15e67778cb07dc8363adcb4a8827b52d81483 \
- --hash=sha256:af628ba6fa493f75c7e9dbe9373d148ca9f4399b5ea29976519e0a3848eddd16
+google-auth==2.45.0 \
+ --hash=sha256:82344e86dc00410ef5382d99be677c6043d72e502b625aa4f4afa0bdacca0f36 \
+ --hash=sha256:90d3f41b6b72ea72dd9811e765699ee491ab24139f34ebf1ca2b9cc0c38708f3
# via
# google-api-core
# google-auth-oauthlib
@@ -1392,19 +1392,19 @@ google-auth-oauthlib==1.2.2 \
# via
# pandas-gbq
# pydata-google-auth
-google-cloud-bigquery[pandas]==3.38.0 \
- --hash=sha256:8afcb7116f5eac849097a344eb8bfda78b7cfaae128e60e019193dd483873520 \
- --hash=sha256:e06e93ff7b245b239945ef59cb59616057598d369edac457ebf292bd61984da6
+google-cloud-bigquery[pandas]==3.39.0 \
+ --hash=sha256:cb375e1d63dea9bd5bf735e66024338f294159d43afdf63e1d023f5fcbbf55ea \
+ --hash=sha256:dc7a64921465859105461b43c42562e38e797d7a73feb72b3cfc4865b7b1c5ef
# via
# feast (setup.py)
# pandas-gbq
-google-cloud-bigquery-storage==2.35.0 \
- --hash=sha256:c9bab6b8e41d6cb9806e589e65f320c89ada84f466e61566b7208d87924c1430 \
- --hash=sha256:f2e3a08882155de1e9ec53c71c5784eb1f25dc6514c535f5796c3c9eeac17d17
+google-cloud-bigquery-storage==2.36.0 \
+ --hash=sha256:1769e568070db672302771d2aec18341de10712aa9c4a8c549f417503e0149f0 \
+ --hash=sha256:d3c1ce9d2d3a4d7116259889dcbe3c7c70506f71f6ce6bbe54aa0a68bbba8f8f
# via feast (setup.py)
-google-cloud-bigtable==2.34.0 \
- --hash=sha256:773258b00cd3f9a3a35639cc38bd711f4f1418aaa0c8d70cb028978ed98dc2c2 \
- --hash=sha256:a4a8db4903840cd3f89fb19c060eea2e7c09c1265cb0538cfc11288dbc6000e4
+google-cloud-bigtable==2.35.0 \
+ --hash=sha256:f355bfce1f239453ec2bb3839b0f4f9937cf34ef06ef29e1ca63d58fd38d0c50 \
+ --hash=sha256:f5699012c5fea4bd4bdf7e80e5e3a812a847eb8f41bf8dc2f43095d6d876b83b
# via feast (setup.py)
google-cloud-core==2.5.0 \
--hash=sha256:67d977b41ae6c7211ee830c7912e41003ea8194bff15ae7d72fd6f51e57acabc \
@@ -1414,49 +1414,48 @@ google-cloud-core==2.5.0 \
# google-cloud-bigtable
# google-cloud-datastore
# google-cloud-storage
-google-cloud-datastore==2.21.0 \
- --hash=sha256:eee454dd4a55f5b327f9f344928ff1a09a6f77c23d5e3d908ad31a13cc2f4073 \
- --hash=sha256:f303f27cd1983383f20bd227019cd8a7897419e0ec6b878367c58c66245f9d9b
+google-cloud-datastore==2.23.0 \
+ --hash=sha256:24a1b1d29b902148fe41b109699f76fd3aa60591e9d547c0f8b87d7bf9ff213f \
+ --hash=sha256:80049883a4ae928fdcc661ba6803ec267665dc0e6f3ce2da91441079a6bb6387
# via feast (setup.py)
google-cloud-storage==2.19.0 \
--hash=sha256:aeb971b5c29cf8ab98445082cbfe7b161a1f48ed275822f59ed3f1524ea54fba \
--hash=sha256:cd05e9e7191ba6cb68934d8eb76054d9be4562aa89dbc4236feee4d7d51342b2
# via feast (setup.py)
-google-crc32c==1.7.1 \
- --hash=sha256:0f99eaa09a9a7e642a61e06742856eec8b19fc0037832e03f941fe7cf0c8e4db \
- --hash=sha256:19eafa0e4af11b0a4eb3974483d55d2d77ad1911e6cf6f832e1574f6781fd337 \
- --hash=sha256:1c67ca0a1f5b56162951a9dae987988679a7db682d6f97ce0f6381ebf0fbea4c \
- --hash=sha256:1f2b3522222746fff0e04a9bd0a23ea003ba3cccc8cf21385c564deb1f223242 \
- --hash=sha256:22beacf83baaf59f9d3ab2bbb4db0fb018da8e5aebdce07ef9f09fce8220285e \
- --hash=sha256:2bff2305f98846f3e825dbeec9ee406f89da7962accdb29356e4eadc251bd472 \
- --hash=sha256:2d73a68a653c57281401871dd4aeebbb6af3191dcac751a76ce430df4d403194 \
- --hash=sha256:32d1da0d74ec5634a05f53ef7df18fc646666a25efaaca9fc7dcfd4caf1d98c3 \
- --hash=sha256:3bda0fcb632d390e3ea8b6b07bf6b4f4a66c9d02dcd6fbf7ba00a197c143f582 \
- --hash=sha256:6335de12921f06e1f774d0dd1fbea6bf610abe0887a1638f64d694013138be5d \
- --hash=sha256:6b211ddaf20f7ebeec5c333448582c224a7c90a9d98826fbab82c0ddc11348e6 \
- --hash=sha256:6efb97eb4369d52593ad6f75e7e10d053cf00c48983f7a973105bc70b0ac4d82 \
- --hash=sha256:6fbab4b935989e2c3610371963ba1b86afb09537fd0c633049be82afe153ac06 \
- --hash=sha256:713121af19f1a617054c41f952294764e0c5443d5a5d9034b2cd60f5dd7e0349 \
- --hash=sha256:754561c6c66e89d55754106739e22fdaa93fafa8da7221b29c8b8e8270c6ec8a \
- --hash=sha256:7cc81b3a2fbd932a4313eb53cc7d9dde424088ca3a0337160f35d91826880c1d \
- --hash=sha256:85fef7fae11494e747c9fd1359a527e5970fc9603c90764843caabd3a16a0a48 \
- --hash=sha256:905a385140bf492ac300026717af339790921f411c0dfd9aa5a9e69a08ed32eb \
- --hash=sha256:9fc196f0b8d8bd2789352c6a522db03f89e83a0ed6b64315923c396d7a932315 \
- --hash=sha256:a8e9afc74168b0b2232fb32dd202c93e46b7d5e4bf03e66ba5dc273bb3559589 \
- --hash=sha256:b07d48faf8292b4db7c3d64ab86f950c2e94e93a11fd47271c28ba458e4a0d76 \
- --hash=sha256:b6d86616faaea68101195c6bdc40c494e4d76f41e07a37ffdef270879c15fb65 \
- --hash=sha256:b7491bdc0c7564fcf48c0179d2048ab2f7c7ba36b84ccd3a3e1c3f7a72d3bba6 \
- --hash=sha256:bb5e35dcd8552f76eed9461a23de1030920a3c953c1982f324be8f97946e7127 \
- --hash=sha256:d68e17bad8f7dd9a49181a1f5a8f4b251c6dbc8cc96fb79f1d321dfd57d66f53 \
- --hash=sha256:dcdf5a64adb747610140572ed18d011896e3b9ae5195f2514b7ff678c80f1603 \
- --hash=sha256:df8b38bdaf1629d62d51be8bdd04888f37c451564c2042d36e5812da9eff3c35 \
- --hash=sha256:e10554d4abc5238823112c2ad7e4560f96c7bf3820b202660373d769d9e6e4c9 \
- --hash=sha256:e42e20a83a29aa2709a0cf271c7f8aefaa23b7ab52e53b322585297bb94d4638 \
- --hash=sha256:ed66cbe1ed9cbaaad9392b5259b3eba4a9e565420d734e6238813c428c3336c9 \
- --hash=sha256:ee6547b657621b6cbed3562ea7826c3e11cab01cd33b74e1f677690652883e77 \
- --hash=sha256:f2226b6a8da04f1d9e61d3e357f2460b9551c5e6950071437e122c958a18ae14 \
- --hash=sha256:fa8136cc14dd27f34a3221c0f16fd42d8a40e4778273e61a3c19aedaa44daf6b \
- --hash=sha256:fc5319db92daa516b653600794d5b9f9439a9a121f3e162f94b0e1891c7933cb
+google-crc32c==1.8.0 \
+ --hash=sha256:014a7e68d623e9a4222d663931febc3033c5c7c9730785727de2a81f87d5bab8 \
+ --hash=sha256:01f126a5cfddc378290de52095e2c7052be2ba7656a9f0caf4bcd1bfb1833f8a \
+ --hash=sha256:0470b8c3d73b5f4e3300165498e4cf25221c7eb37f1159e221d1825b6df8a7ff \
+ --hash=sha256:119fcd90c57c89f30040b47c211acee231b25a45d225e3225294386f5d258288 \
+ --hash=sha256:14f87e04d613dfa218d6135e81b78272c3b904e2a7053b841481b38a7d901411 \
+ --hash=sha256:17446feb05abddc187e5441a45971b8394ea4c1b6efd88ab0af393fd9e0a156a \
+ --hash=sha256:19b40d637a54cb71e0829179f6cb41835f0fbd9e8eb60552152a8b52c36cbe15 \
+ --hash=sha256:2a3dc3318507de089c5384cc74d54318401410f82aa65b2d9cdde9d297aca7cb \
+ --hash=sha256:3b9776774b24ba76831609ffbabce8cdf6fa2bd5e9df37b594221c7e333a81fa \
+ --hash=sha256:3cc0c8912038065eafa603b238abf252e204accab2a704c63b9e14837a854962 \
+ --hash=sha256:3d488e98b18809f5e322978d4506373599c0c13e6c5ad13e53bb44758e18d215 \
+ --hash=sha256:3ebb04528e83b2634857f43f9bb8ef5b2bbe7f10f140daeb01b58f972d04736b \
+ --hash=sha256:450dc98429d3e33ed2926fc99ee81001928d63460f8538f21a5d6060912a8e27 \
+ --hash=sha256:4b8286b659c1335172e39563ab0a768b8015e88e08329fa5321f774275fc3113 \
+ --hash=sha256:57a50a9035b75643996fbf224d6661e386c7162d1dfdab9bc4ca790947d1007f \
+ --hash=sha256:61f58b28e0b21fcb249a8247ad0db2e64114e201e2e9b4200af020f3b6242c9f \
+ --hash=sha256:6f35aaffc8ccd81ba3162443fabb920e65b1f20ab1952a31b13173a67811467d \
+ --hash=sha256:71734788a88f551fbd6a97be9668a0020698e07b2bf5b3aa26a36c10cdfb27b2 \
+ --hash=sha256:864abafe7d6e2c4c66395c1eb0fe12dc891879769b52a3d56499612ca93b6092 \
+ --hash=sha256:86cfc00fe45a0ac7359e5214a1704e51a99e757d0272554874f419f79838c5f7 \
+ --hash=sha256:87b0072c4ecc9505cfa16ee734b00cd7721d20a0f595be4d40d3d21b41f65ae2 \
+ --hash=sha256:87fa445064e7db928226b2e6f0d5304ab4cd0339e664a4e9a25029f384d9bb93 \
+ --hash=sha256:89c17d53d75562edfff86679244830599ee0a48efc216200691de8b02ab6b2b8 \
+ --hash=sha256:8b3f68782f3cbd1bce027e48768293072813469af6a61a86f6bb4977a4380f21 \
+ --hash=sha256:a428e25fb7691024de47fecfbff7ff957214da51eddded0da0ae0e0f03a2cf79 \
+ --hash=sha256:b0d1a7afc6e8e4635564ba8aa5c0548e3173e41b6384d7711a9123165f582de2 \
+ --hash=sha256:ba6aba18daf4d36ad4412feede6221414692f44d17e5428bdd81ad3fc1eee5dc \
+ --hash=sha256:cb5c869c2923d56cb0c8e6bcdd73c009c36ae39b652dbe46a05eb4ef0ad01454 \
+ --hash=sha256:d511b3153e7011a27ab6ee6bb3a5404a55b994dc1a7322c0b87b29606d9790e2 \
+ --hash=sha256:db3fe8eaf0612fc8b20fa21a5f25bd785bc3cd5be69f8f3412b0ac2ffd49e733 \
+ --hash=sha256:e6584b12cb06796d285d09e33f63309a09368b9d806a551d8036a4207ea43697 \
+ --hash=sha256:f4b51844ef67d6cf2e9425983274da75f18b1597bb2c998e1c0a0e8d46f8f651 \
+ --hash=sha256:f639065ea2042d5c034bf258a9f085eaa7af0cd250667c0635a3118e8f92c69c
# via
# google-cloud-bigtable
# google-cloud-storage
@@ -1543,6 +1542,7 @@ grpcio==1.62.3 \
# google-api-core
# google-cloud-bigquery
# google-cloud-bigquery-storage
+ # google-cloud-datastore
# googleapis-common-protos
# grpc-google-iam-v1
# grpcio-health-checking
@@ -1884,9 +1884,9 @@ imagesize==1.4.1 \
--hash=sha256:0d8d18d08f840c19d0ee7ca1fd82490fdc3729b7ac93f49870406ddde8ef8d8b \
--hash=sha256:69150444affb9cb0d5cc5a92b3676f0b2fb7cd9ae39e947a5e11a36b4497cd4a
# via sphinx
-importlib-metadata==8.7.0 \
- --hash=sha256:d13b81ad223b890aa16c5471f2ac3056cf76c5f10f82d6f9292f0b415f389000 \
- --hash=sha256:e5dd1551894c77868a30651cef00984d50e1002d06942a7101d34870c5f02afd
+importlib-metadata==8.7.1 \
+ --hash=sha256:49fef1ae6440c182052f407c8d34a68f72efc36db9ca90dc0113398f2fdde8bb \
+ --hash=sha256:5a1f80bf1daa489495071efbb095d75a634cf28a8bc299581244063b53176151
# via
# dask
# opentelemetry-api
@@ -1957,9 +1957,9 @@ jmespath==1.0.1 \
# aiobotocore
# boto3
# botocore
-joblib==1.5.2 \
- --hash=sha256:3faa5c39054b2f03ca547da9b2f52fde67c06240c31853f306aea97f13647b55 \
- --hash=sha256:4e1f0bdbb987e6d843c70cf43714cb276623def372df3c22fe5266b2670bc241
+joblib==1.5.3 \
+ --hash=sha256:5fc3c5039fc5ca8c0276333a188bbd59d6b7ab37fe6632daa76bc7f9ec18e713 \
+ --hash=sha256:8561a3269e6801106863fd0d6d84bb737be9e7631e33aaed3fb9ce5953688da3
# via scikit-learn
json5==0.12.1 \
--hash=sha256:b2743e77b3242f8d03c143dd975a6ec7c52e2f2afe76ed934e53503dd4ad4990 \
@@ -2039,9 +2039,9 @@ jupyter-server-terminals==0.5.3 \
--hash=sha256:41ee0d7dc0ebf2809c668e0fc726dfaf258fcd3e769568996ca731b6194ae9aa \
--hash=sha256:5ae0295167220e9ace0edcfdb212afd2b01ee8d179fe6f23c899590e9b8a5269
# via jupyter-server
-jupyterlab==4.5.0 \
- --hash=sha256:88e157c75c1afff64c7dc4b801ec471450b922a4eae4305211ddd40da8201c8a \
- --hash=sha256:aec33d6d8f1225b495ee2cf20f0514f45e6df8e360bdd7ac9bace0b7ac5177ea
+jupyterlab==4.5.1 \
+ --hash=sha256:09da1ddfbd9eec18b5101dbb8515612aa1e47443321fb99503725a88e93d20d9 \
+ --hash=sha256:31b059de96de0754ff1f2ce6279774b6aab8c34d7082e9752db58207c99bd514
# via notebook
jupyterlab-pygments==0.3.0 \
--hash=sha256:721aca4d9029252b11cfa9d185e5b5af4d54772bb8072f9b7036f4170054d35d \
@@ -2387,9 +2387,9 @@ markupsafe==3.0.3 \
# jinja2
# nbconvert
# werkzeug
-marshmallow==3.26.1 \
- --hash=sha256:3350409f20a70a7e4e11a27661187b77cdcaeb20abca41c1454fe33636bea09c \
- --hash=sha256:e6d8affb6cb61d39d26402096dc0aee12d5a26d490a121f118d2e81dc0719dc6
+marshmallow==3.26.2 \
+ --hash=sha256:013fa8a3c4c276c24d26d84ce934dc964e2aa794345a0f8c7e5a7191482c8a73 \
+ --hash=sha256:bbe2adb5a03e6e3571b573f42527c6fe926e17467833660bebd11593ab8dfd57
# via great-expectations
matplotlib-inline==0.2.1 \
--hash=sha256:d56ce5156ba6085e00a9d54fead6ed29a9c47e215cd1bba2e976ef39f5710a76 \
@@ -2397,9 +2397,9 @@ matplotlib-inline==0.2.1 \
# via
# ipykernel
# ipython
-mcp==1.23.3 \
- --hash=sha256:32768af4b46a1b4f7df34e2bfdf5c6011e7b63d7f1b0e321d0fdef4cd6082031 \
- --hash=sha256:b3b0da2cc949950ce1259c7bfc1b081905a51916fcd7c8182125b85e70825201
+mcp==1.25.0 \
+ --hash=sha256:56310361ebf0364e2d438e5b45f7668cbb124e158bb358333cd06e49e83a6802 \
+ --hash=sha256:b37c38144a666add0862614cc79ec276e97d72aa8ca26d622818d4e278b9721a
# via fastapi-mcp
mdurl==0.1.2 \
--hash=sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8 \
@@ -2417,9 +2417,9 @@ minio==7.2.11 \
--hash=sha256:153582ed52ff3b5005ba558e1f25bfe1e9e834f7f0745e594777f28e3e81e1a0 \
--hash=sha256:4db95a21fe1e2022ec975292d8a1f83bd5b18f830d23d42a4518ac7a5281d7c5
# via feast (setup.py)
-mistune==3.1.4 \
- --hash=sha256:93691da911e5d9d2e23bc54472892aff676df27a75274962ff9edc210364266d \
- --hash=sha256:b5a7f801d389f724ec702840c11d8fc48f2b33519102fc7ee739e8177b672164
+mistune==3.2.0 \
+ --hash=sha256:708487c8a8cdd99c9d90eb3ed4c3ed961246ff78ac82f03418f5183ab70e398a \
+ --hash=sha256:febdc629a3c78616b94393c6580551e0e34cc289987ec6c35ed3f4be42d0eee1
# via
# great-expectations
# nbconvert
@@ -2842,9 +2842,9 @@ mypy-protobuf==3.3.0 \
--hash=sha256:15604f6943b16c05db646903261e3b3e775cf7f7990b7c37b03d043a907b650d \
--hash=sha256:24f3b0aecb06656e983f58e07c732a90577b9d7af3e1066fc2b663bbf0370248
# via feast (setup.py)
-nbclient==0.10.2 \
- --hash=sha256:4ffee11e788b4a27fabeb7955547e4318a5298f34342a4bfd01f2e1faaeadc3d \
- --hash=sha256:90b7fc6b810630db87a6d0c2250b1f0ab4cf4d3c27a299b0cde78a4ed3fd9193
+nbclient==0.10.4 \
+ --hash=sha256:1e54091b16e6da39e297b0ece3e10f6f29f4ac4e8ee515d29f8a7099bd6553c9 \
+ --hash=sha256:9162df5a7373d70d606527300a95a975a47c137776cd942e52d9c7e29ff83440
# via nbconvert
nbconvert==7.16.6 \
--hash=sha256:1375a7b67e0c2883678c48e506dc320febb57685e5ee67faa51b18a90f3a712b \
@@ -2889,13 +2889,13 @@ ninja==1.13.0 \
--hash=sha256:fb46acf6b93b8dd0322adc3a4945452a4e774b75b91293bafcc7b7f8e6517dfa \
--hash=sha256:fb8ee8719f8af47fed145cced4a85f0755dd55d45b2bddaf7431fa89803c5f3e
# via easyocr
-nodeenv==1.9.1 \
- --hash=sha256:6ec12890a2dab7946721edbfbcd91f3319c6ccc9aec47be7c7e6b7011ee6645f \
- --hash=sha256:ba11c9782d29c27c70ffbdda2d7415098754709be8a7056d79a737cd901155c9
+nodeenv==1.10.0 \
+ --hash=sha256:5bb13e3eed2923615535339b3c620e76779af4cb4c6a90deccc9e36b274d3827 \
+ --hash=sha256:996c191ad80897d076bdfba80a41994c2b47c68e224c542b48feba42ba00f8bb
# via pre-commit
-notebook==7.5.0 \
- --hash=sha256:3300262d52905ca271bd50b22617681d95f08a8360d099e097726e6d2efb5811 \
- --hash=sha256:3b27eaf9913033c28dde92d02139414c608992e1df4b969c843219acf2ff95e4
+notebook==7.5.1 \
+ --hash=sha256:b2fb4cef4d47d08c33aecce1c6c6e84be05436fbd791f88fce8df9fbca088b75 \
+ --hash=sha256:f4e2451c19910c33b88709b84537e11f6368c1cdff1aa0c43db701aea535dd44
# via great-expectations
notebook-shim==0.2.4 \
--hash=sha256:411a5be4e9dc882a074ccbcae671eda64cceb068767e9a3419096986560e1cef \
@@ -2903,81 +2903,79 @@ notebook-shim==0.2.4 \
# via
# jupyterlab
# notebook
-numpy==2.3.5 \
- --hash=sha256:00dc4e846108a382c5869e77c6ed514394bdeb3403461d25a829711041217d5b \
- --hash=sha256:0472f11f6ec23a74a906a00b48a4dcf3849209696dff7c189714511268d103ae \
- --hash=sha256:04822c00b5fd0323c8166d66c701dc31b7fbd252c100acd708c48f763968d6a3 \
- --hash=sha256:052e8c42e0c49d2575621c158934920524f6c5da05a1d3b9bab5d8e259e045f0 \
- --hash=sha256:09a1bea522b25109bf8e6f3027bd810f7c1085c64a0c7ce050c1676ad0ba010b \
- --hash=sha256:0cd00b7b36e35398fa2d16af7b907b65304ef8bb4817a550e06e5012929830fa \
- --hash=sha256:0d8163f43acde9a73c2a33605353a4f1bc4798745a8b1d73183b28e5b435ae28 \
- --hash=sha256:1062fde1dcf469571705945b0f221b73928f34a20c904ffb45db101907c3454e \
- --hash=sha256:11e06aa0af8c0f05104d56450d6093ee639e15f24ecf62d417329d06e522e017 \
- --hash=sha256:17531366a2e3a9e30762c000f2c43a9aaa05728712e25c11ce1dbe700c53ad41 \
- --hash=sha256:1978155dd49972084bd6ef388d66ab70f0c323ddee6f693d539376498720fb7e \
- --hash=sha256:1ed1ec893cff7040a02c8aa1c8611b94d395590d553f6b53629a4461dc7f7b63 \
- --hash=sha256:2dcd0808a421a482a080f89859a18beb0b3d1e905b81e617a188bd80422d62e9 \
- --hash=sha256:2e2eb32ddb9ccb817d620ac1d8dae7c3f641c1e5f55f531a33e8ab97960a75b8 \
- --hash=sha256:2feae0d2c91d46e59fcd62784a3a83b3fb677fead592ce51b5a6fbb4f95965ff \
- --hash=sha256:3095bdb8dd297e5920b010e96134ed91d852d81d490e787beca7e35ae1d89cf7 \
- --hash=sha256:30bc11310e8153ca664b14c5f1b73e94bd0503681fcf136a163de856f3a50139 \
- --hash=sha256:3101e5177d114a593d79dd79658650fe28b5a0d8abeb8ce6f437c0e6df5be1a4 \
- --hash=sha256:396084a36abdb603546b119d96528c2f6263921c50df3c8fd7cb28873a237748 \
- --hash=sha256:3997b5b3c9a771e157f9aae01dd579ee35ad7109be18db0e85dbdbe1de06e952 \
- --hash=sha256:414802f3b97f3c1eef41e530aaba3b3c1620649871d8cb38c6eaff034c2e16bd \
- --hash=sha256:51c1e14eb1e154ebd80e860722f9e6ed6ec89714ad2db2d3aa33c31d7c12179b \
- --hash=sha256:51c55fe3451421f3a6ef9a9c1439e82101c57a2c9eab9feb196a62b1a10b58ce \
- --hash=sha256:5ee6609ac3604fa7780e30a03e5e241a7956f8e2fcfe547d51e3afa5247ac47f \
- --hash=sha256:612a95a17655e213502f60cfb9bf9408efdc9eb1d5f50535cc6eb365d11b42b5 \
- --hash=sha256:6203fdf9f3dc5bdaed7319ad8698e685c7a3be10819f41d32a0723e611733b42 \
- --hash=sha256:63c0e9e7eea69588479ebf4a8a270d5ac22763cc5854e9a7eae952a3908103f7 \
- --hash=sha256:66f85ce62c70b843bab1fb14a05d5737741e74e28c7b8b5a064de10142fad248 \
- --hash=sha256:6cf9b429b21df6b99f4dee7a1218b8b7ffbbe7df8764dc0bd60ce8a0708fed1e \
- --hash=sha256:70b37199913c1bd300ff6e2693316c6f869c7ee16378faf10e4f5e3275b299c3 \
- --hash=sha256:727fd05b57df37dc0bcf1a27767a3d9a78cbbc92822445f32cc3436ba797337b \
- --hash=sha256:74ae7b798248fe62021dbf3c914245ad45d1a6b0cb4a29ecb4b31d0bfbc4cc3e \
- --hash=sha256:784db1dcdab56bf0517743e746dfb0f885fc68d948aba86eeec2cba234bdf1c0 \
- --hash=sha256:86945f2ee6d10cdfd67bcb4069c1662dd711f7e2a4343db5cecec06b87cf31aa \
- --hash=sha256:86d835afea1eaa143012a2d7a3f45a3adce2d7adc8b4961f0b362214d800846a \
- --hash=sha256:872a5cf366aec6bb1147336480fef14c9164b154aeb6542327de4970282cd2f5 \
- --hash=sha256:8b973c57ff8e184109db042c842423ff4f60446239bd585a5131cc47f06f789d \
- --hash=sha256:8cba086a43d54ca804ce711b2a940b16e452807acebe7852ff327f1ecd49b0d4 \
- --hash=sha256:8f7f0e05112916223d3f438f293abf0727e1181b5983f413dfa2fefc4098245c \
- --hash=sha256:900218e456384ea676e24ea6a0417f030a3b07306d29d7ad843957b40a9d8d52 \
- --hash=sha256:93eebbcf1aafdf7e2ddd44c2923e2672e1010bddc014138b229e49725b4d6be5 \
- --hash=sha256:9c75442b2209b8470d6d5d8b1c25714270686f14c749028d2199c54e29f20b4d \
- --hash=sha256:9ee2197ef8c4f0dfe405d835f3b6a14f5fee7782b5de51ba06fb65fc9b36e9f1 \
- --hash=sha256:a414504bef8945eae5f2d7cb7be2d4af77c5d1cb5e20b296c2c25b61dff2900c \
- --hash=sha256:a4b9159734b326535f4dd01d947f919c6eefd2d9827466a696c44ced82dfbc18 \
- --hash=sha256:a80afd79f45f3c4a7d341f13acbe058d1ca8ac017c165d3fa0d3de6bc1a079d7 \
- --hash=sha256:aa5bc7c5d59d831d9773d1170acac7893ce3a5e130540605770ade83280e7188 \
- --hash=sha256:acfd89508504a19ed06ef963ad544ec6664518c863436306153e13e94605c218 \
- --hash=sha256:aeffcab3d4b43712bb7a60b65f6044d444e75e563ff6180af8f98dd4b905dfd2 \
- --hash=sha256:afaffc4393205524af9dfa400fa250143a6c3bc646c08c9f5e25a9f4b4d6a903 \
- --hash=sha256:b0c7088a73aef3d687c4deef8452a3ac7c1be4e29ed8bf3b366c8111128ac60c \
- --hash=sha256:b46b4ec24f7293f23adcd2d146960559aaf8020213de8ad1909dba6c013bf89c \
- --hash=sha256:b501b5fa195cc9e24fe102f21ec0a44dffc231d2af79950b451e0d99cea02234 \
- --hash=sha256:bf06bc2af43fa8d32d30fae16ad965663e966b1a3202ed407b84c989c3221e82 \
- --hash=sha256:c804e3a5aba5460c73955c955bdbd5c08c354954e9270a2c1565f62e866bdc39 \
- --hash=sha256:c8a9958e88b65c3b27e22ca2a076311636850b612d6bbfb76e8d156aacde2aaf \
- --hash=sha256:cc0a57f895b96ec78969c34f682c602bf8da1a0270b09bc65673df2e7638ec20 \
- --hash=sha256:cc8920d2ec5fa99875b670bb86ddeb21e295cb07aa331810d9e486e0b969d946 \
- --hash=sha256:ccc933afd4d20aad3c00bcef049cb40049f7f196e0397f1109dba6fed63267b0 \
- --hash=sha256:ce581db493ea1a96c0556360ede6607496e8bf9b3a8efa66e06477267bc831e9 \
- --hash=sha256:d0f23b44f57077c1ede8c5f26b30f706498b4862d3ff0a7298b8411dd2f043ff \
- --hash=sha256:d21644de1b609825ede2f48be98dfde4656aefc713654eeee280e37cadc4e0ad \
- --hash=sha256:d6889ec4ec662a1a37eb4b4fb26b6100841804dac55bd9df579e326cdc146227 \
- --hash=sha256:de5672f4a7b200c15a4127042170a694d4df43c992948f5e1af57f0174beed10 \
- --hash=sha256:e6a0bc88393d65807d751a614207b7129a310ca4fe76a74e5c7da5fa5671417e \
- --hash=sha256:ed89927b86296067b4f81f108a2271d8926467a8868e554eaf370fc27fa3ccaf \
- --hash=sha256:ee3888d9ff7c14604052b2ca5535a30216aa0a58e948cdd3eeb8d3415f638769 \
- --hash=sha256:f0963b55cdd70fad460fa4c1341f12f976bb26cb66021a5580329bd498988310 \
- --hash=sha256:f16417ec91f12f814b10bafe79ef77e70113a2f5f7018640e7425ff979253425 \
- --hash=sha256:f28620fe26bee16243be2b7b874da327312240a7cdc38b769a697578d2100013 \
- --hash=sha256:f4255143f5160d0de972d28c8f9665d882b5f61309d8362fdd3e103cf7bf010c \
- --hash=sha256:ffac52f28a7849ad7576293c0cb7b9f08304e8f7d738a8cb8a90ec4c55a998eb \
- --hash=sha256:ffe22d2b05504f786c867c8395de703937f934272eb67586817b46188b4ded6d \
- --hash=sha256:fffe29a1ef00883599d1dc2c51aa2e5d80afe49523c261a74933df395c15c520
+numpy==2.4.0 \
+ --hash=sha256:009bd0ea12d3c784b6639a8457537016ce5172109e585338e11334f6a7bb88ee \
+ --hash=sha256:02a2038eb27f9443a8b266a66911e926566b5a6ffd1a689b588f7f35b81e7dc3 \
+ --hash=sha256:0804a8e4ab070d1d35496e65ffd3cf8114c136a2b81f61dfab0de4b218aacfd5 \
+ --hash=sha256:0feafc9e03128074689183031181fac0897ff169692d8492066e949041096548 \
+ --hash=sha256:1889b3a3f47a7b5bee16bc25a2145bd7cb91897f815ce3499db64c7458b6d91d \
+ --hash=sha256:1d8f9fde5f6dc1b6fc34df8162f3b3079365468703fee7f31d4e0cc8c63baed9 \
+ --hash=sha256:1ee32359fb7543b7b7bd0b2f46294db27e29e7bbdf70541e81b190836cd83ded \
+ --hash=sha256:20c115517513831860c573996e395707aa9fb691eb179200125c250e895fcd93 \
+ --hash=sha256:21555da4ec4a0c942520ead42c3b0dc9477441e085c42b0fbdd6a084869a6f6b \
+ --hash=sha256:23a3e9d1a6f360267e8fbb38ba5db355a6a7e9be71d7fce7ab3125e88bb646c8 \
+ --hash=sha256:2a8b6bb8369abefb8bd1801b054ad50e02b3275c8614dc6e5b0373c305291037 \
+ --hash=sha256:2e284ca13d5a8367e43734148622caf0b261b275673823593e3e3634a6490f83 \
+ --hash=sha256:2f585f52b2baf07ff3356158d9268ea095e221371f1074fadea2f42544d58b4d \
+ --hash=sha256:316b2f2584682318539f0bcaca5a496ce9ca78c88066579ebd11fd06f8e4741e \
+ --hash=sha256:32ed06d0fe9cae27d8fb5f400c63ccee72370599c75e683a6358dd3a4fb50aaf \
+ --hash=sha256:355354388cba60f2132df297e2d53053d4063f79077b67b481d21276d61fc4df \
+ --hash=sha256:35ddc8f4914466e6fc954c76527aa91aa763682a4f6d73249ef20b418fe6effb \
+ --hash=sha256:36667db4d6c1cea79c8930ab72fadfb4060feb4bfe724141cd4bd064d2e5f8ce \
+ --hash=sha256:36cbfb13c152b1c7c184ddac43765db8ad672567e7bafff2cc755a09917ed2e6 \
+ --hash=sha256:39699233bc72dd482da1415dcb06076e32f60eddc796a796c5fb6c5efce94667 \
+ --hash=sha256:39b19251dec4de8ff8496cd0806cbe27bf0684f765abb1f4809554de93785f2d \
+ --hash=sha256:3d857f55e7fdf7c38ab96c4558c95b97d1c685be6b05c249f5fdafcbd6f9899e \
+ --hash=sha256:3de19cfecd1465d0dcf8a5b5ea8b3155b42ed0b639dba4b71e323d74f2a3be5e \
+ --hash=sha256:3f3096405acc48887458bbf9f6814d43785ac7ba2a57ea6442b581dedbc60ce6 \
+ --hash=sha256:40483b2f2d3ba7aad426443767ff5632ec3156ef09742b96913787d13c336471 \
+ --hash=sha256:413aa561266a4be2d06cd2b9665e89d9f54c543f418773076a76adcf2af08bc7 \
+ --hash=sha256:44aba2f0cafd287871a495fb3163408b0bd25bbce135c6f621534a07f4f7875c \
+ --hash=sha256:49ff32b09f5aa0cd30a20c2b39db3e669c845589f2b7fc910365210887e39344 \
+ --hash=sha256:4d1cfce39e511069b11e67cd0bd78ceff31443b7c9e5c04db73c7a19f572967c \
+ --hash=sha256:57c540ed8fb1f05cb997c6761cd56db72395b0d6985e90571ff660452ade4f98 \
+ --hash=sha256:5f48cb3e88fbc294dc90e215d86fbaf1c852c63dbdb6c3a3e63f45c4b57f7344 \
+ --hash=sha256:5fe44e277225fd3dff6882d86d3d447205d43532c3627313d17e754fb3905a0e \
+ --hash=sha256:60e8c196cd82cbbd4f130b5290007e13e6de3eca79f0d4d38014769d96a7c475 \
+ --hash=sha256:65167da969cd1ec3a1df31cb221ca3a19a8aaa25370ecb17d428415e93c1935e \
+ --hash=sha256:680060061adb2d74ce352628cb798cfdec399068aa7f07ba9fb818b2b3305f98 \
+ --hash=sha256:6bbaebf0d11567fa8926215ae731e1d58e6ec28a8a25235b8a47405d301332db \
+ --hash=sha256:6c05483c3136ac4c91b4e81903cb53a8707d316f488124d0398499a4f8e8ef51 \
+ --hash=sha256:6dc8b7e2f4eb184b37655195f421836cfae6f58197b67e3ffc501f1333d993fa \
+ --hash=sha256:6e504f7b16118198f138ef31ba24d985b124c2c469fe8467007cf30fd992f934 \
+ --hash=sha256:74623f2ab5cc3f7c886add4f735d1031a1d2be4a4ae63c0546cfd74e7a31ddf6 \
+ --hash=sha256:77f0d13fa87036d7553bf81f0e1fe3ce68d14c9976c9851744e4d3e91127e95f \
+ --hash=sha256:85eef4cb5625c47ee6425c58a3502555e10f45ee973da878ac8248ad58c136f3 \
+ --hash=sha256:882567b7ae57c1b1a0250208cc21a7976d8cbcc49d5a322e607e6f09c9e0bd53 \
+ --hash=sha256:8b986403023c8f3bf8f487c2e6186afda156174d31c175f747d8934dfddf3479 \
+ --hash=sha256:8cfa5f29a695cb7438965e6c3e8d06e0416060cf0d709c1b1c1653a939bf5c2a \
+ --hash=sha256:8eafe7c36c8430b7794edeab3087dec7bf31d634d92f2af9949434b9d1964cba \
+ --hash=sha256:9198f447e1dc5647d07c9a6bbe2063cc0132728cc7175b39dbc796da5b54920d \
+ --hash=sha256:92190db305a6f48734d3982f2c60fa30d6b5ee9bff10f2887b930d7b40119f4c \
+ --hash=sha256:927ccf5cd17c48f801f4ed43a7e5673a2724bd2171460be3e3894e6e332ef83a \
+ --hash=sha256:98e81648e0b36e325ab67e46b5400a7a6d4a22b8a7c8e8bbfe20e7db7906bf95 \
+ --hash=sha256:9a818668b674047fd88c4cddada7ab8f1c298812783e8328e956b78dc4807f9f \
+ --hash=sha256:a152d86a3ae00ba5f47b3acf3b827509fd0b6cb7d3259665e63dafbad22a75ea \
+ --hash=sha256:a2718c1de8504121714234b6f8241d0019450353276c88b9453c9c3d92e101db \
+ --hash=sha256:a39fb973a726e63223287adc6dafe444ce75af952d711e400f3bf2b36ef55a7b \
+ --hash=sha256:a899699294f28f7be8992853c0c60741f16ff199205e2e6cdca155762cbaa59d \
+ --hash=sha256:a8fdfed3deaf1928fb7667d96e0567cdf58c2b370ea2ee7e586aa383ec2cb346 \
+ --hash=sha256:aabb081ca0ec5d39591fc33018cd4b3f96e1a2dd6756282029986d00a785fba4 \
+ --hash=sha256:b1f5b45829ac1848893f0ddf5cb326110604d6df96cdc255b0bf9edd154104d4 \
+ --hash=sha256:b48e35f4ab6f6a7597c46e301126ceba4c44cd3280e3750f85db48b082624fa4 \
+ --hash=sha256:b54c83f1c0c0f1d748dca0af516062b8829d53d1f0c402be24b4257a9c48ada6 \
+ --hash=sha256:ba0cb30acd3ef11c94dc27fbfba68940652492bc107075e7ffe23057f9425681 \
+ --hash=sha256:bb50ce5fb202a26fd5404620e7ef820ad1ab3558b444cb0b55beb7ef66cd2d63 \
+ --hash=sha256:c95eb6db2884917d86cde0b4d4cf31adf485c8ec36bf8696dd66fa70de96f36b \
+ --hash=sha256:d0ffd9e2e4441c96a9c91ec1783285d80bf835b677853fc2770a89d50c1e48ac \
+ --hash=sha256:d57b5046c120561ba8fa8e4030fbb8b822f3063910fa901ffadf16e2b7128ad6 \
+ --hash=sha256:d9e6a7664ddd9746e20b7325351fe1a8408d0a2bf9c63b5e898290ddc8f09544 \
+ --hash=sha256:dc578891de1db95b2a35001b695451767b580bb45753717498213c5ff3c41d63 \
+ --hash=sha256:e0434aa22c821f44eeb4c650b81c7fbdd8c0122c6c4b5a576a76d5a35625ecd9 \
+ --hash=sha256:e06a922a469cae9a57100864caf4f8a97a1026513793969f8ba5b63137a35d25 \
+ --hash=sha256:e493962256a38f58283de033d8af176c5c91c084ea30f15834f7545451c42059 \
+ --hash=sha256:ecb0019d44f4cdb50b676c5d0cb4b1eae8e15d1ed3d3e6639f986fc92b2ec52c \
+ --hash=sha256:f935c4493eda9069851058fa0d9e39dbf6286be690066509305e52912714dbb2
# via
# feast (setup.py)
# accelerate
@@ -3036,30 +3034,30 @@ openshift-client==1.0.18 \
--hash=sha256:be3979440cfd96788146a3a1650dabe939d4d516eea0b39f87e66d2ab39495b1 \
--hash=sha256:d8a84080307ccd9556f6c62a3707a3e6507baedee36fa425754f67db9ded528b
# via codeflare-sdk
-opentelemetry-api==1.39.0 \
- --hash=sha256:3c3b3ca5c5687b1b5b37e5c5027ff68eacea8675241b29f13110a8ffbb8f0459 \
- --hash=sha256:6130644268c5ac6bdffaf660ce878f10906b3e789f7e2daa5e169b047a2933b9
+opentelemetry-api==1.39.1 \
+ --hash=sha256:2edd8463432a7f8443edce90972169b195e7d6a05500cd29e6d13898187c9950 \
+ --hash=sha256:fbde8c80e1b937a2c61f20347e91c0c18a1940cecf012d62e65a7caf08967c9c
# via
# opentelemetry-exporter-prometheus
# opentelemetry-sdk
# opentelemetry-semantic-conventions
-opentelemetry-exporter-prometheus==0.60b0 \
- --hash=sha256:4f616397040257fae4c5e5272b57b47c13372e3b7f0f2db2427fd4dbe69c60b5 \
- --hash=sha256:c6ae33e52cdd1dbfed1f7436935df94eb03c725b57322026d04e6fbc37108e6e
+opentelemetry-exporter-prometheus==0.60b1 \
+ --hash=sha256:49f59178de4f4590e3cef0b8b95cf6e071aae70e1f060566df5546fad773b8fd \
+ --hash=sha256:a4011b46906323f71724649d301b4dc188aaa068852e814f4df38cc76eac616b
# via ray
opentelemetry-proto==1.27.0 \
--hash=sha256:33c9345d91dafd8a74fc3d7576c5a38f18b7fdf8d02983ac67485386132aedd6 \
--hash=sha256:b133873de5581a50063e1e4b29cdcf0c5e253a8c2d8dc1229add20a4c3830ace
# via ray
-opentelemetry-sdk==1.39.0 \
- --hash=sha256:90cfb07600dfc0d2de26120cebc0c8f27e69bf77cd80ef96645232372709a514 \
- --hash=sha256:c22204f12a0529e07aa4d985f1bca9d6b0e7b29fe7f03e923548ae52e0e15dde
+opentelemetry-sdk==1.39.1 \
+ --hash=sha256:4d5482c478513ecb0a5d938dcc61394e647066e0cc2676bee9f3af3f3f45f01c \
+ --hash=sha256:cf4d4563caf7bff906c9f7967e2be22d0d6b349b908be0d90fb21c8e9c995cc6
# via
# opentelemetry-exporter-prometheus
# ray
-opentelemetry-semantic-conventions==0.60b0 \
- --hash=sha256:069530852691136018087b52688857d97bba61cd641d0f8628d2d92788c4f78a \
- --hash=sha256:227d7aa73cbb8a2e418029d6b6465553aa01cf7e78ec9d0bc3255c7b3ac5bf8f
+opentelemetry-semantic-conventions==0.60b1 \
+ --hash=sha256:87c228b5a0669b748c76d76df6c364c369c28f1c465e50f661e39737e84bc953 \
+ --hash=sha256:9fa8c8b0c110da289809292b0591220d3a7b53c1526a23021e977d68597893fb
# via opentelemetry-sdk
orjson==3.11.5 \
--hash=sha256:0522003e9f7fba91982e83a97fec0708f5a714c96c4209db7104e6b9d132f111 \
@@ -3593,9 +3591,9 @@ propcache==0.4.1 \
# via
# aiohttp
# yarl
-proto-plus==1.26.1 \
- --hash=sha256:13285478c2dcf2abb829db158e1047e2f1e8d63a077d94263c2b88b043c75a66 \
- --hash=sha256:21a515a4c4c0088a773899e23c7bbade3d18f9c66c73edd4c7ee3816bc96a012
+proto-plus==1.27.0 \
+ --hash=sha256:1baa7f81cf0f8acb8bc1f6d085008ba4171eaf669629d1b6d1673b21ed1c0a82 \
+ --hash=sha256:873af56dd0d7e91836aee871e5799e1c6f1bda86ac9a983e0bb9f0c266a568c4
# via
# google-api-core
# google-cloud-bigquery-storage
@@ -4272,9 +4270,9 @@ pyopenssl==25.1.0 \
--hash=sha256:2b11f239acc47ac2e5aca04fd7fa829800aeee22a2eb30d744572a157bd8a1ab \
--hash=sha256:8d031884482e0c67ee92bf9a4d8cceb08d92aba7136432ffb0703c5280fc205b
# via snowflake-connector-python
-pyparsing==3.2.5 \
- --hash=sha256:2df8d5b7b2802ef88e8d016a2eb9c7aeaa923529cd251ed0fe4608275d4105b6 \
- --hash=sha256:e38a4f02064cf41fe6593d328d0512495ad1f3d8a91c4f73fc401b3079a59a5e
+pyparsing==3.3.1 \
+ --hash=sha256:023b5e7e5520ad96642e2c6db4cb683d3970bd640cdf7115049a6e9c3682df82 \
+ --hash=sha256:47fad0f17ac1e2cad3de3b458570fbc9b03560aa029ed5e16ee5554da9a2251c
# via great-expectations
pypdfium2==4.30.0 \
--hash=sha256:0dfa61421b5eb68e1188b0b2231e7ba35735aef2d867d86e48ee6cab6975195e \
@@ -4297,8 +4295,8 @@ pyproject-hooks==1.2.0 \
# via
# build
# pip-tools
-pyspark==4.0.1 \
- --hash=sha256:9d1f22d994f60369228397e3479003ffe2dd736ba79165003246ff7bd48e2c73
+pyspark==4.1.0 \
+ --hash=sha256:09c714ada88dfac3e1213c066617c6f473c1e22fbe279855028f77e12434147d
# via feast (setup.py)
pytest==7.4.4 \
--hash=sha256:2cf0005922c6ace4a3e2ec8b4080eb0d9753fdc93107415332f50ce9e7994280 \
@@ -4495,9 +4493,9 @@ python-keycloak==4.2.2 \
--hash=sha256:1d43a1accd4a038ed39317fcb3eb78211df6c75bbcbc4c482c99ee76327136f2 \
--hash=sha256:5137fd87c69031a372a578df96bae96b9aead2c9dad976613bc978e9e0246a1e
# via feast (setup.py)
-python-multipart==0.0.20 \
- --hash=sha256:8a62d3a8335e06589fe01f2a3e178cdcc632f3fbe0d492ad9ee0ec35aab1f104 \
- --hash=sha256:8dd0cab45b8e23064ae09147625994d090fa46f5b0d1e13af944c331a7fa9d13
+python-multipart==0.0.21 \
+ --hash=sha256:7137ebd4d3bbf70ea1622998f902b97a29434a9e8dc40eb203bbcf7c2a2cba92 \
+ --hash=sha256:cf7a6713e01c87aa35387f4774e812c4361150938d20d232800f75ffcf266090
# via mcp
python-pptx==1.0.2 \
--hash=sha256:160838e0b8565a8b1f67947675886e9fea18aa5e795db7ae531606d68e785cba \
@@ -4702,9 +4700,9 @@ pyzmq==27.1.0 \
# ipykernel
# jupyter-client
# jupyter-server
-qdrant-client==1.16.1 \
- --hash=sha256:1eefe89f66e8a468ba0de1680e28b441e69825cfb62e8fb2e457c15e24ce5e3b \
- --hash=sha256:676c7c10fd4d4cb2981b8fcb32fd764f5f661b04b7334d024034d07212f971fd
+qdrant-client==1.16.2 \
+ --hash=sha256:442c7ef32ae0f005e88b5d3c0783c63d4912b97ae756eb5e052523be682f17d3 \
+ --hash=sha256:ca4ef5f9be7b5eadeec89a085d96d5c723585a391eb8b2be8192919ab63185f0
# via feast (setup.py)
ray[data, default]==2.52.1 \
--hash=sha256:08eb8f5fd55292ba6bee363a32491136a5e54af54e007f81e0603986fbea41a4 \
@@ -5061,26 +5059,26 @@ ruamel-yaml==0.17.17 \
--hash=sha256:9751de4cbb57d4bfbf8fc394e125ed4a2f170fbff3dc3d78abf50be85924f8be \
--hash=sha256:9af3ec5d7f8065582f3aa841305465025d0afd26c5fb54e15b964e11838fc74f
# via great-expectations
-ruff==0.14.8 \
- --hash=sha256:15f04cb45c051159baebb0f0037f404f1dc2f15a927418f29730f411a79bc4e7 \
- --hash=sha256:1af35c2d62633d4da0521178e8a2641c636d2a7153da0bac1b30cfd4ccd91344 \
- --hash=sha256:1d62cb310c4fbcb9ee4ac023fe17f984ae1e12b8a4a02e3d21489f9a2a5f730c \
- --hash=sha256:21d48fa744c9d1cb8d71eb0a740c4dd02751a5de9db9a730a8ef75ca34cf138e \
- --hash=sha256:25add4575ffecc53d60eed3f24b1e934493631b48ebbc6ebaf9d8517924aca4b \
- --hash=sha256:2c87e09b3cd9d126fc67a9ecd3b5b1d3ded2b9c7fce3f16e315346b9d05cfb52 \
- --hash=sha256:2e2fcbefe91f9fad0916850edf0854530c15bd1926b6b779de47e9ab619ea38f \
- --hash=sha256:4c943d847b7f02f7db4201a0600ea7d244d8a404fbb639b439e987edcf2baf9a \
- --hash=sha256:774ed0dd87d6ce925e3b8496feb3a00ac564bea52b9feb551ecd17e0a23d1eed \
- --hash=sha256:7aaf2974f378e6b01d1e257c6948207aec6a9b5ba53fab23d0182efb887a0e4a \
- --hash=sha256:8cdb162a7159f4ca36ce980a18c43d8f036966e7f73f866ac8f493b75e0c27e9 \
- --hash=sha256:965a582c93c63fe715fd3e3f8aa37c4b776777203d8e1d8aa3cc0c14424a4b99 \
- --hash=sha256:9eeb0b24242b5bbff3011409a739929f497f3fb5fe3b5698aba5e77e8c833097 \
- --hash=sha256:a9d70721066a296f45786ec31916dc287b44040f553da21564de0ab4d45a869b \
- --hash=sha256:cb6e8bf7b4f627548daa1b69283dac5a296bfe9ce856703b03130732e20ddfe2 \
- --hash=sha256:e5758ca513c43ad8a4ef13f0f081f80f08008f410790f3611a21a92421ab045b \
- --hash=sha256:ec071e9c82eca417f6111fd39f7043acb53cd3fde9b1f95bbed745962e345afb \
- --hash=sha256:eed28f6fafcc9591994c42254f5a5c5ca40e69a30721d2ab18bb0bb3baac3ab6 \
- --hash=sha256:f74f7ba163b6e85a8d81a590363bf71618847e5078d90827749bfda1d88c9cdf
+ruff==0.14.10 \
+ --hash=sha256:104c49fc7ab73f3f3a758039adea978869a918f31b73280db175b43a2d9b51d6 \
+ --hash=sha256:1484983559f026788e3a5c07c81ef7d1e97c1c78ed03041a18f75df104c45405 \
+ --hash=sha256:16a01dfb7b9e4eee556fbfd5392806b1b8550c9b4a9f6acd3dbe6812b193c70a \
+ --hash=sha256:213db2b2e44be8625002dbea33bb9c60c66ea2c07c084a00d55732689d697a7f \
+ --hash=sha256:466297bd73638c6bdf06485683e812db1c00c7ac96d4ddd0294a338c62fdc154 \
+ --hash=sha256:4bb98fcbbc61725968893682fd4df8966a34611239c9fd07a1f6a07e7103d08e \
+ --hash=sha256:59aabd2e2c4fd614d2862e7939c34a532c04f1084476d6833dddef4afab87e9f \
+ --hash=sha256:5bcf45b681e9f1ee6445d317ce1fa9d6cba9a6049542d1c3d5b5958986be8830 \
+ --hash=sha256:674f9be9372907f7257c51f1d4fc902cb7cf014b9980152b802794317941f08f \
+ --hash=sha256:6987ebe0501ae4f4308d7d24e2d0fe3d7a98430f5adfd0f1fead050a740a3a77 \
+ --hash=sha256:7165d31a925b7a294465fa81be8c12a0e9b60fb02bf177e79067c867e71f8b1f \
+ --hash=sha256:7a3ce585f2ade3e1f29ec1b92df13e3da262178df8c8bdf876f48fa0e8316c49 \
+ --hash=sha256:9a2e830f075d1a42cd28420d7809ace390832a490ed0966fe373ba288e77aaf4 \
+ --hash=sha256:b914c40ab64865a17a9a5b67911d14df72346a634527240039eb3bd650e5979d \
+ --hash=sha256:c561695675b972effb0c0a45db233f2c816ff3da8dcfbe7dfc7eed625f218935 \
+ --hash=sha256:c70427132db492d25f982fffc8d6c7535cc2fd2c83fc8888f05caaa248521e60 \
+ --hash=sha256:d85713d522348837ef9df8efca33ccb8bd6fcfc86a2cde3ccb4bc9d28a18003d \
+ --hash=sha256:e51d046cf6dda98a4633b8a8a771451107413b0f07183b2bef03f075599e44e6 \
+ --hash=sha256:f24b47993a9d8cb858429e97bdf8544c78029f09b520af615c1d261bf827001d
# via feast (setup.py)
s3transfer==0.13.1 \
--hash=sha256:a981aa7429be23fe6dfc13e80e4020057cbab622b08c0315288758d67cabc724 \
@@ -5115,29 +5113,56 @@ safetensors[torch]==0.7.0 \
# docling-ibm-models
# timm
# transformers
-scikit-image==0.25.2 \
- --hash=sha256:24cc986e1f4187a12aa319f777b36008764e856e5013666a4a83f8df083c2641 \
- --hash=sha256:28182a9d3e2ce3c2e251383bdda68f8d88d9fff1a3ebe1eb61206595c9773341 \
- --hash=sha256:330d061bd107d12f8d68f1d611ae27b3b813b8cdb0300a71d07b1379178dd4cd \
- --hash=sha256:483bd8cc10c3d8a7a37fae36dfa5b21e239bd4ee121d91cad1f81bba10cfb0ed \
- --hash=sha256:5c311069899ce757d7dbf1d03e32acb38bb06153236ae77fcd820fd62044c063 \
- --hash=sha256:60516257c5a2d2f74387c502aa2f15a0ef3498fbeaa749f730ab18f0a40fd054 \
- --hash=sha256:64785a8acefee460ec49a354706db0b09d1f325674107d7fa3eadb663fb56d6f \
- --hash=sha256:7efa888130f6c548ec0439b1a7ed7295bc10105458a421e9bf739b457730b6da \
- --hash=sha256:8db8dd03663112783221bf01ccfc9512d1cc50ac9b5b0fe8f4023967564719fb \
- --hash=sha256:9d1e80107bcf2bf1291acfc0bf0425dceb8890abe9f38d8e94e23497cbf7ee0d \
- --hash=sha256:a17e17eb8562660cc0d31bb55643a4da996a81944b82c54805c91b3fe66f4824 \
- --hash=sha256:a4c464b90e978d137330be433df4e76d92ad3c5f46a22f159520ce0fdbea8a09 \
- --hash=sha256:b2cfc96b27afe9a05bc92f8c6235321d3a66499995675b27415e0d0c76625173 \
- --hash=sha256:b4f6b61fc2db6340696afe3db6b26e0356911529f5f6aee8c322aa5157490c9b \
- --hash=sha256:b8abd3c805ce6944b941cfed0406d88faeb19bab3ed3d4b50187af55cf24d147 \
- --hash=sha256:bdd2b8c1de0849964dbc54037f36b4e9420157e67e45a8709a80d727f52c7da2 \
- --hash=sha256:be455aa7039a6afa54e84f9e38293733a2622b8c2fb3362b822d459cc5605e99 \
- --hash=sha256:d3278f586793176599df6a4cf48cb6beadae35c31e58dc01a98023af3dc31c78 \
- --hash=sha256:d989d64ff92e0c6c0f2018c7495a5b20e2451839299a018e0e5108b2680f71e0 \
- --hash=sha256:dd8011efe69c3641920614d550f5505f83658fe33581e49bed86feab43a180fc \
- --hash=sha256:e5a37e6cd4d0c018a7a55b9d601357e3382826d3888c10d0213fc63bff977dde \
- --hash=sha256:f4bac9196fb80d37567316581c6060763b0f4893d3aca34a9ede3825bc035b17
+scikit-image==0.26.0 \
+ --hash=sha256:0608aa4a9ec39e0843de10d60edb2785a30c1c47819b67866dd223ebd149acaf \
+ --hash=sha256:0660b83968c15293fd9135e8d860053ee19500d52bf55ca4fb09de595a1af650 \
+ --hash=sha256:09bad6a5d5949c7896c8347424c4cca899f1d11668030e5548813ab9c2865dcb \
+ --hash=sha256:0baa0108d2d027f34d748e84e592b78acc23e965a5de0e4bb03cf371de5c0581 \
+ --hash=sha256:163e9afb5b879562b9aeda0dd45208a35316f26cc7a3aed54fd601604e5cf46f \
+ --hash=sha256:20ef4a155e2e78b8ab973998e04d8a361d49d719e65412405f4dadd9155a61d9 \
+ --hash=sha256:21a818ee6ca2f2131b9e04d8eb7637b5c18773ebe7b399ad23dcc5afaa226d2d \
+ --hash=sha256:27d58bc8b2acd351f972c6508c1b557cfed80299826080a4d803dd29c51b707e \
+ --hash=sha256:2c1e7bd342f43e7a97e571b3f03ba4c1293ea1a35c3f13f41efdc8a81c1dc8f2 \
+ --hash=sha256:3268f13310e6857508bd87202620df996199a016a1d281b309441d227c822394 \
+ --hash=sha256:3409e89d66eff5734cd2b672d1c48d2759360057e714e1d92a11df82c87cba37 \
+ --hash=sha256:3f5bf622d7c0435884e1e141ebbe4b2804e16b2dd23ae4c6183e2ea99233be70 \
+ --hash=sha256:4c717490cec9e276afb0438dd165b7c3072d6c416709cc0f9f5a4c1070d23a44 \
+ --hash=sha256:4d57e39ef67a95d26860c8caf9b14b8fb130f83b34c6656a77f191fa6d1d04d8 \
+ --hash=sha256:52c496f75a7e45844d951557f13c08c81487c6a1da2e3c9c8a39fcde958e02cc \
+ --hash=sha256:6381edf972b32e4f54085449afde64365a57316637496c1325a736987083e2ab \
+ --hash=sha256:63af3d3a26125f796f01052052f86806da5b5e54c6abef152edb752683075a9c \
+ --hash=sha256:6caec76e16c970c528d15d1c757363334d5cb3069f9cea93d2bead31820511f3 \
+ --hash=sha256:724f79fd9b6cb6f4a37864fe09f81f9f5d5b9646b6868109e1b100d1a7019e59 \
+ --hash=sha256:74aa5518ccea28121f57a95374581d3b979839adc25bb03f289b1bc9b99c58af \
+ --hash=sha256:7af7aa331c6846bd03fa28b164c18d0c3fd419dbb888fb05e958ac4257a78fdd \
+ --hash=sha256:7df650e79031634ac90b11e64a9eedaf5a5e06fcd09bcd03a34be01745744466 \
+ --hash=sha256:915bb3ba66455cf8adac00dc8fdf18a4cd29656aec7ddd38cb4dda90289a6f21 \
+ --hash=sha256:92242351bccf391fc5df2d1529d15470019496d2498d615beb68da85fe7fdf37 \
+ --hash=sha256:9490360c8d3f9a7e85c8de87daf7c0c66507960cf4947bb9610d1751928721c7 \
+ --hash=sha256:98329aab3bc87db352b9887f64ce8cdb8e75f7c2daa19927f2e121b797b678d5 \
+ --hash=sha256:9ea6207d9e9d21c3f464efe733121c0504e494dbdc7728649ff3e23c3c5a4953 \
+ --hash=sha256:9eefb4adad066da408a7601c4c24b07af3b472d90e08c3e7483d4e9e829d8c49 \
+ --hash=sha256:a07200fe09b9d99fcdab959859fe0f7db8df6333d6204344425d476850ce3604 \
+ --hash=sha256:a2d211bc355f59725efdcae699b93b30348a19416cc9e017f7b2fb599faf7219 \
+ --hash=sha256:a2e852eccf41d2d322b8e60144e124802873a92b8d43a6f96331aa42888491c7 \
+ --hash=sha256:abed017474593cd3056ae0fe948d07d0747b27a085e92df5474f4955dd65aec0 \
+ --hash=sha256:ac529eb9dbd5954f9aaa2e3fe9a3fd9661bfe24e134c688587d811a0233127f1 \
+ --hash=sha256:aeb14db1ed09ad4bee4ceb9e635547a8d5f3549be67fc6c768c7f923e027e6cd \
+ --hash=sha256:b1ede33a0fb3731457eaf53af6361e73dd510f449dac437ab54573b26788baf0 \
+ --hash=sha256:b36ab5e778bf50af5ff386c3ac508027dc3aaeccf2161bdf96bde6848f44d21b \
+ --hash=sha256:b702c3bb115e1dcf4abf5297429b5c90f2189655888cbed14921f3d26f81d3a4 \
+ --hash=sha256:b8d14d3181c21c11170477a42542c1addc7072a90b986675a71266ad17abc37f \
+ --hash=sha256:c6624a76c6085218248154cc7e1500e6b488edcd9499004dd0d35040607d7505 \
+ --hash=sha256:c9087cf7d0e7f33ab5c46d2068d86d785e70b05400a891f73a13400f1e1faf6a \
+ --hash=sha256:cde0bbd57e6795eba83cb10f71a677f7239271121dc950bc060482834a668ad1 \
+ --hash=sha256:ce00600cd70d4562ed59f80523e18cdcc1fae0e10676498a01f73c255774aefd \
+ --hash=sha256:cefd85033e66d4ea35b525bb0937d7f42d4cdcfed2d1888e1570d5ce450d3932 \
+ --hash=sha256:d454b93a6fa770ac5ae2d33570f8e7a321bb80d29511ce4b6b78058ebe176e8c \
+ --hash=sha256:d5c244656de905e195a904e36dbc18585e06ecf67d90f0482cbde63d7f9ad59d \
+ --hash=sha256:ede4d6d255cc5da9faeb2f9ba7fedbc990abbc652db429f40a16b22e770bb578 \
+ --hash=sha256:f5f970ab04efad85c24714321fcc91613fcb64ef2a892a13167df2f3e59199fa \
+ --hash=sha256:f775f0e420faac9c2aa6757135f4eb468fb7b70e0b67fa77a5e79be3c30ee331 \
+ --hash=sha256:fac96a1f9b06cd771cbbb3cd96c5332f36d4efd839b1d8b053f79e5887acde62
# via easyocr
scikit-learn==1.8.0 \
--hash=sha256:00d6f1d66fbcf4eba6e356e1420d33cc06c70a45bb1363cd6f6a8e4ebbbdece2 \
@@ -5398,9 +5423,9 @@ sortedcontainers==2.4.0 \
--hash=sha256:25caa5a06cc30b6b83d11423433f65d1f9d76c4c6a0c90e3379eaa43b9bfdb88 \
--hash=sha256:a163dcaede0f1c021485e957a39245190e74249897e2ae4b2aa38595db237ee0
# via snowflake-connector-python
-soupsieve==2.8 \
- --hash=sha256:0cc76456a30e20f5d7f2e14a98a4ae2ee4e5abdc7c5ea0aafe795f344bc7984c \
- --hash=sha256:e2dd4a40a628cb5f28f6d4b0db8800b8f581b65bb380b97de22ba5ca8d72572f
+soupsieve==2.8.1 \
+ --hash=sha256:4cf733bc50fa805f5df4b8ef4740fc0e0fa6218cf3006269afd3f9d6d80fd350 \
+ --hash=sha256:a11fe2a6f3d76ab3cf2de04eb339c1be5b506a8a47f2ceb6d139803177f85434
# via beautifulsoup4
sphinx==6.2.1 \
--hash=sha256:6d56a34697bb749ffa0152feafc4b19836c755d90a7c59b72bc7dfd371b9cc6b \
@@ -5442,12 +5467,14 @@ sqlalchemy[mypy]==2.0.45 \
--hash=sha256:1d8b4a7a8c9b537509d56d5cd10ecdcfbb95912d72480c8861524efecc6a3fff \
--hash=sha256:215f0528b914e5c75ef2559f69dca86878a3beeb0c1be7279d77f18e8d180ed4 \
--hash=sha256:2c0b74aa79e2deade948fe8593654c8ef4228c44ba862bb7c9585c8e0db90f33 \
+ --hash=sha256:2e90a344c644a4fa871eb01809c32096487928bd2038bf10f3e4515cb688cc56 \
--hash=sha256:3c5f76216e7b85770d5bb5130ddd11ee89f4d52b11783674a662c7dd57018177 \
--hash=sha256:470daea2c1ce73910f08caf10575676a37159a6d16c4da33d0033546bddebc9b \
--hash=sha256:4748601c8ea959e37e03d13dcda4a44837afcd1b21338e637f7c935b8da06177 \
--hash=sha256:4b6bec67ca45bc166c8729910bd2a87f1c0407ee955df110d78948f5b5827e8a \
--hash=sha256:5225a288e4c8cc2308dbdd874edad6e7d0fd38eac1e9e5f23503425c8eee20d0 \
--hash=sha256:56ead1f8dfb91a54a28cd1d072c74b3d635bcffbd25e50786533b822d4f2cde2 \
+ --hash=sha256:5964f832431b7cdfaaa22a660b4c7eb1dfcd6ed41375f67fd3e3440fd95cb3cc \
--hash=sha256:59a8b8bd9c6bedf81ad07c8bd5543eedca55fe9b8780b2b628d495ba55f8db1e \
--hash=sha256:672c45cae53ba88e0dad74b9027dddd09ef6f441e927786b05bec75d949fbb2e \
--hash=sha256:6d0beadc2535157070c9c17ecf25ecec31e13c229a8f69196d7590bde8082bf1 \
@@ -5466,7 +5493,9 @@ sqlalchemy[mypy]==2.0.45 \
--hash=sha256:b8c8b41b97fba5f62349aa285654230296829672fc9939cd7f35aab246d1c08b \
--hash=sha256:ba547ac0b361ab4f1608afbc8432db669bd0819b3e12e29fb5fa9529a8bba81d \
--hash=sha256:c1c2091b1489435ff85728fafeb990f073e64f6f5e81d5cd53059773e8521eb6 \
+ --hash=sha256:c64772786d9eee72d4d3784c28f0a636af5b0a29f3fe26ff11f55efe90c0bd85 \
--hash=sha256:cd337d3526ec5298f67d6a30bbbe4ed7e5e68862f0bf6dd21d289f8d37b7d60b \
+ --hash=sha256:d29b2b99d527dbc66dd87c3c3248a5dd789d974a507f4653c969999fc7c1191b \
--hash=sha256:d2c3684fca8a05f0ac1d9a21c1f4a266983a7ea9180efb80ffeb03861ecd01a0 \
--hash=sha256:d62e47f5d8a50099b17e2bfc1b0c7d7ecd8ba6b46b1507b58cc4f05eefc3bb1c \
--hash=sha256:d8a2ca754e5415cde2b656c27900b19d50ba076aa05ce66e2207623d3fe41f5a \
@@ -5560,9 +5589,9 @@ sqlparams==6.2.0 \
--hash=sha256:3744a2ad16f71293db6505b21fd5229b4757489a9b09f3553656a1ae97ba7ca5 \
--hash=sha256:63b32ed9051bdc52e7e8b38bc4f78aed51796cdd9135e730f4c6a7db1048dedf
# via singlestoredb
-sse-starlette==3.0.3 \
- --hash=sha256:88cfb08747e16200ea990c8ca876b03910a23b547ab3bd764c0d8eb81019b971 \
- --hash=sha256:af5bf5a6f3933df1d9c7f8539633dc8444ca6a97ab2e2a7cd3b6e431ac03a431
+sse-starlette==3.1.1 \
+ --hash=sha256:bb38f71ae74cfd86b529907a9fda5632195dfa6ae120f214ea4c890c7ee9d436 \
+ --hash=sha256:bffa531420c1793ab224f63648c059bcadc412bf9fdb1301ac8de1cf9a67b7fb
# via mcp
stack-data==0.6.3 \
--hash=sha256:836a778de4fec4dcd1dcd89ed8abff8a221f58308462e1c4aa2a3cf30148f0b9 \
@@ -5574,6 +5603,7 @@ starlette==0.50.0 \
# via
# fastapi
# mcp
+ # sse-starlette
substrait==0.24.2 \
--hash=sha256:743cc352e96b0927b2cd37cd5a8fdac0a96a68df9600bd104fc36aebd222a836 \
--hash=sha256:d1d475833566fa9d67eed3273456883c0568486ccced92b524b31709d2817e19
@@ -5672,9 +5702,9 @@ thriftpy2==0.5.3 \
--hash=sha256:fd4c6131ca6e919f03263cc83b713f1797bc20126a858da8518ed49b3e32c334 \
--hash=sha256:fdc5676b52fa6a3009d205360eb9ba257b8b4813883ed52797a20838bcc45dde
# via happybase
-tifffile==2025.10.16 \
- --hash=sha256:41463d979c1c262b0a5cdef2a7f95f0388a072ad82d899458b154a48609d759c \
- --hash=sha256:425179ec7837ac0e07bc95d2ea5bea9b179ce854967c12ba07fc3f093e58efc1
+tifffile==2025.12.20 \
+ --hash=sha256:bc0345a20675149353cfcb3f1c48d0a3654231ee26bd46beebaab4d2168feeb6 \
+ --hash=sha256:cb8a4fee327d15b3e3eeac80bbdd8a53b323c80473330bcfb99418ee4c1c827f
# via scikit-image
timm==1.0.22 \
--hash=sha256:14fd74bcc17db3856b1a47d26fb305576c98579ab9d02b36714a5e6b25cde422 \
@@ -5836,19 +5866,19 @@ torchvision==0.24.1 \
# docling-ibm-models
# easyocr
# timm
-tornado==6.5.2 \
- --hash=sha256:06ceb1300fd70cb20e43b1ad8aaee0266e69e7ced38fa910ad2e03285009ce7c \
- --hash=sha256:2436822940d37cde62771cff8774f4f00b3c8024fe482e16ca8387b8a2724db6 \
- --hash=sha256:583a52c7aa94ee046854ba81d9ebb6c81ec0fd30386d96f7640c96dad45a03ef \
- --hash=sha256:74db443e0f5251be86cbf37929f84d8c20c27a355dd452a5cfa2aada0d001ec4 \
- --hash=sha256:ab53c8f9a0fa351e2c0741284e06c7a45da86afb544133201c5cc8578eb076a0 \
- --hash=sha256:b0fe179f28d597deab2842b86ed4060deec7388f1fd9c1b4a41adf8af058907e \
- --hash=sha256:b186e85d1e3536d69583d2298423744740986018e393d0321df7340e71898882 \
- --hash=sha256:b5e735ab2889d7ed33b32a459cac490eda71a1ba6857b0118de476ab6c366c04 \
- --hash=sha256:c6f29e94d9b37a95013bb669616352ddb82e3bfe8326fccee50583caebc8a5f0 \
- --hash=sha256:d6c33dc3672e3a1f3618eb63b7ef4683a7688e7b9e6e8f0d9aa5726360a004af \
- --hash=sha256:e56a5af51cc30dd2cae649429af65ca2f6571da29504a07995175df14c18f35f \
- --hash=sha256:e792706668c87709709c18b353da1f7662317b563ff69f00bab83595940c7108
+tornado==6.5.4 \
+ --hash=sha256:053e6e16701eb6cbe641f308f4c1a9541f91b6261991160391bfc342e8a551a1 \
+ --hash=sha256:1768110f2411d5cd281bac0a090f707223ce77fd110424361092859e089b38d1 \
+ --hash=sha256:2d50f63dda1d2cac3ae1fa23d254e16b5e38153758470e9956cbc3d813d40843 \
+ --hash=sha256:50ff0a58b0dc97939d29da29cd624da010e7f804746621c78d14b80238669335 \
+ --hash=sha256:6076d5dda368c9328ff41ab5d9dd3608e695e8225d1cd0fd1e006f05da3635a8 \
+ --hash=sha256:6eb82872335a53dd063a4f10917b3efd28270b56a33db69009606a0312660a6f \
+ --hash=sha256:9c86b1643b33a4cd415f8d0fe53045f913bf07b4a3ef646b735a6a86047dda84 \
+ --hash=sha256:a22fa9047405d03260b483980635f0b041989d8bcc9a313f8fe18b411d84b1d7 \
+ --hash=sha256:d1cf66105dc6acb5af613c054955b8137e34a03698aa53272dbda4afe252be17 \
+ --hash=sha256:d6241c1a16b1c9e4cc28148b1cda97dd1c6cb4fb7068ac1bedc610768dff0ba9 \
+ --hash=sha256:e5fb5e04efa54cf0baabdd10061eb4148e0be137166146fff835745f59ab9f7f \
+ --hash=sha256:fa07d31e0cd85c60713f2b995da613588aa03e1303d75705dca6af8babc18ddc
# via
# ipykernel
# jupyter-client
@@ -6008,9 +6038,9 @@ types-protobuf==3.19.22 \
# via
# feast (setup.py)
# mypy-protobuf
-types-pymysql==1.1.0.20250916 \
- --hash=sha256:873eb9836bb5e3de4368cc7010ca72775f86e9692a5c7810f8c7f48da082e55b \
- --hash=sha256:98d75731795fcc06723a192786662bdfa760e1e00f22809c104fbb47bac5e29b
+types-pymysql==1.1.0.20251220 \
+ --hash=sha256:ae1c3df32a777489431e2e9963880a0df48f6591e0aa2fd3a6fabd9dee6eca54 \
+ --hash=sha256:fa1082af7dea6c53b6caa5784241924b1296ea3a8d3bd060417352c5e10c0618
# via feast (setup.py)
types-pyopenssl==24.1.0.20240722 \
--hash=sha256:47913b4678a01d879f503a12044468221ed8576263c1540dcb0484ca21b08c39 \
@@ -6036,9 +6066,9 @@ types-requests==2.30.0.0 \
--hash=sha256:c6cf08e120ca9f0dc4fa4e32c3f953c3fba222bcc1db6b97695bce8da1ba9864 \
--hash=sha256:dec781054324a70ba64430ae9e62e7e9c8e4618c185a5cb3f87a6738251b5a31
# via feast (setup.py)
-types-setuptools==80.9.0.20250822 \
- --hash=sha256:070ea7716968ec67a84c7f7768d9952ff24d28b65b6594797a464f1b3066f965 \
- --hash=sha256:53bf881cb9d7e46ed12c76ef76c0aaf28cfe6211d3fab12e0b83620b1a8642c3
+types-setuptools==80.9.0.20251223 \
+ --hash=sha256:1b36db79d724c2287d83dc052cf887b47c0da6a2fff044378be0b019545f56e6 \
+ --hash=sha256:d3411059ae2f5f03985217d86ac6084efea2c9e9cacd5f0869ef950f308169b2
# via
# feast (setup.py)
# types-cffi
@@ -6097,9 +6127,9 @@ typing-inspection==0.4.2 \
# mcp
# pydantic
# pydantic-settings
-tzdata==2025.2 \
- --hash=sha256:1a403fada01ff9221ca8044d701868fa132215d84beb92242d9acd2147f667a8 \
- --hash=sha256:b60a638fcc0daffadf82fe0f57e53d06bdec2f36c4df66280ae79bce6bd6f2b9
+tzdata==2025.3 \
+ --hash=sha256:06a47e5700f3081aab02b2e513160914ff0694bce9947d6b76ebd6bf57cfc5d1 \
+ --hash=sha256:de39c2ca5dc7b0344f2eba86f49d614019d29f060fc4ebc8a417896a620b56a7
# via
# arrow
# pandas
@@ -6199,9 +6229,9 @@ uri-template==1.3.0 \
--hash=sha256:0e00f8eb65e18c7de20d595a14336e9f337ead580c70934141624b6d1ffdacc7 \
--hash=sha256:a44a133ea12d44a0c0f06d7d42a52d71282e77e2f937d8abd5655b8d56fc1363
# via jsonschema
-urllib3==2.6.1 \
- --hash=sha256:5379eb6e1aba4088bae84f8242960017ec8d8e3decf30480b3a1abdaa9671a3f \
- --hash=sha256:e67d06fe947c36a7ca39f4994b08d73922d40e6cca949907be05efa6fd75110b
+urllib3==2.6.2 \
+ --hash=sha256:016f9c98bb7e98085cb2b4b17b87d2c702975664e4f060c6532e64d1c1a5e797 \
+ --hash=sha256:ec21cddfe7724fc7cb4ba4bea7aa8e2ef36f607a4bab81aa6ce42a13dc3f03dd
# via
# feast (setup.py)
# botocore
diff --git a/sdk/python/requirements/py3.11-minimal-requirements.txt b/sdk/python/requirements/py3.11-minimal-requirements.txt
index eafab51c27d..93613cb6e50 100644
--- a/sdk/python/requirements/py3.11-minimal-requirements.txt
+++ b/sdk/python/requirements/py3.11-minimal-requirements.txt
@@ -174,9 +174,9 @@ attrs==25.4.0 \
# aiohttp
# jsonschema
# referencing
-bigtree==1.0.3 \
- --hash=sha256:18402a143130868b17ca84a74ca263e6f32f046d6978c30d244f8b94c4a01227 \
- --hash=sha256:99a18b6937a9b4ab8e560fec5c0720e10ebf37f84e44f9b5f47702c2e84c9aaa
+bigtree==1.0.4 \
+ --hash=sha256:e4af0c5bc0d2cd72e18442965e4509f642b16a0de65db6d0ec116e30f959010c \
+ --hash=sha256:f58a3238bb9b1142d893c9de4921bfd18d435427c75e0c168dd580eabf6dc7fd
# via feast (setup.py)
boto3==1.38.27 \
--hash=sha256:94bd7fdd92d5701b362d4df100d21e28f8307a67ff56b6a8b0398119cf22f859 \
@@ -192,9 +192,9 @@ botocore==1.38.46 \
# boto3
# s3transfer
# snowflake-connector-python
-cachetools==6.2.2 \
- --hash=sha256:6c09c98183bf58560c97b2abfcedcbaf6a896a490f534b031b661d3723b45ace \
- --hash=sha256:8e6d266b25e539df852251cfd6f990b4bc3a141db73b939058d809ebd2590fc6
+cachetools==6.2.4 \
+ --hash=sha256:69a7a52634fed8b8bf6e24a050fb60bff1c9bd8f6d24572b99c32d4e71e62a51 \
+ --hash=sha256:82c5c05585e70b6ba2d3ae09ea60b79548872185d2f24ae1f2709d37299fd607
# via google-auth
certifi==2025.11.12 \
--hash=sha256:97de8790030bbd5c2d96b7ec782fc2f7820ef8dba6db909ccf95449f2d062d4b \
@@ -469,13 +469,13 @@ cryptography==46.0.0 \
# pyjwt
# pyopenssl
# snowflake-connector-python
-dask[dataframe]==2025.11.0 \
- --hash=sha256:08c35a8146c05c93b34f83cf651009129c42ee71762da7ca452fb7308641c2b8 \
- --hash=sha256:23d59e624b80ee05b7cc8df858682cca58262c4c3b197ccf61da0f6543c8f7c3
+dask[dataframe]==2025.12.0 \
+ --hash=sha256:4213ce9c5d51d6d89337cff69de35d902aa0bf6abdb8a25c942a4d0281f3a598 \
+ --hash=sha256:8d478f2aabd025e2453cf733ad64559de90cf328c20209e4574e9543707c3e1b
# via feast (setup.py)
-db-dtypes==1.4.4 \
- --hash=sha256:26f53db5df1acd746b88c5647913a1b20f731c0af1b11abcb6bec5365f31098a \
- --hash=sha256:32c13039982656a8598a0835f25f0e07e34c9a423e471ee60c2553240b7fcf1e
+db-dtypes==1.5.0 \
+ --hash=sha256:abdbb2e4eb965800ed6f98af0c5c1cafff9063ace09114be2d26a7f046be2c8a \
+ --hash=sha256:ad9e94243f53e104bc77dbf9ae44b580d83a770d3694483aba59c9767966daa5
# via
# google-cloud-bigquery
# pandas-gbq
@@ -541,9 +541,9 @@ durationpy==0.10 \
--hash=sha256:1fa6893409a6e739c9c72334fc65cca1f355dbdd93405d30f726deb5bde42fba \
--hash=sha256:3b41e1b601234296b4fb368338fdcd3e13e0b4fb5b67345948f4f2bf9868b286
# via kubernetes
-fastapi==0.124.0 \
- --hash=sha256:260cd178ad75e6d259991f2fd9b0fee924b224850079df576a3ba604ce58f4e6 \
- --hash=sha256:91596bdc6dde303c318f06e8d2bc75eafb341fc793a0c9c92c0bc1db1ac52480
+fastapi==0.128.0 \
+ --hash=sha256:1cc179e1cef10a6be60ffe429f79b829dce99d8de32d7acb7e6c8dfdf7f2645a \
+ --hash=sha256:aebd93f9716ee3b4f4fcfe13ffb7cf308d99c9f3ab5622d8877441072561582d
# via
# feast (setup.py)
# fastapi-mcp
@@ -551,9 +551,9 @@ fastapi-mcp==0.4.0 \
--hash=sha256:d4a3fe7966af24d44e4b412720561c95eb12bed999a4443a88221834b3b15aec \
--hash=sha256:d4ca9410996f4c7b8ea0d7b20fdf79878dc359ebf89cbf3b222e0b675a55097d
# via feast (setup.py)
-filelock==3.20.0 \
- --hash=sha256:339b4732ffda5cd79b13f4e2711a31b0365ce445d95d243bb996273d072546a2 \
- --hash=sha256:711e943b4ec6be42e1d4e6690b48dc175c822967466bb31c0c293f34334c13f4
+filelock==3.20.1 \
+ --hash=sha256:15d9e9a67306188a44baa72f569d2bfd803076269365fdea0934385da4dc361a \
+ --hash=sha256:b8360948b351b80f420878d8516519a2204b07aefcdcfd24912a5d33127f188c
# via snowflake-connector-python
frozenlist==1.8.0 \
--hash=sha256:0325024fe97f94c41c08872db482cf8ac4800d80e79222c6b0b7b162d5b13686 \
@@ -707,9 +707,9 @@ google-api-core[grpc]==2.28.1 \
# google-cloud-datastore
# google-cloud-storage
# pandas-gbq
-google-auth==2.43.0 \
- --hash=sha256:88228eee5fc21b62a1b5fe773ca15e67778cb07dc8363adcb4a8827b52d81483 \
- --hash=sha256:af628ba6fa493f75c7e9dbe9373d148ca9f4399b5ea29976519e0a3848eddd16
+google-auth==2.45.0 \
+ --hash=sha256:82344e86dc00410ef5382d99be677c6043d72e502b625aa4f4afa0bdacca0f36 \
+ --hash=sha256:90d3f41b6b72ea72dd9811e765699ee491ab24139f34ebf1ca2b9cc0c38708f3
# via
# google-api-core
# google-auth-oauthlib
@@ -728,19 +728,19 @@ google-auth-oauthlib==1.2.2 \
# via
# pandas-gbq
# pydata-google-auth
-google-cloud-bigquery[pandas]==3.38.0 \
- --hash=sha256:8afcb7116f5eac849097a344eb8bfda78b7cfaae128e60e019193dd483873520 \
- --hash=sha256:e06e93ff7b245b239945ef59cb59616057598d369edac457ebf292bd61984da6
+google-cloud-bigquery[pandas]==3.39.0 \
+ --hash=sha256:cb375e1d63dea9bd5bf735e66024338f294159d43afdf63e1d023f5fcbbf55ea \
+ --hash=sha256:dc7a64921465859105461b43c42562e38e797d7a73feb72b3cfc4865b7b1c5ef
# via
# feast (setup.py)
# pandas-gbq
-google-cloud-bigquery-storage==2.35.0 \
- --hash=sha256:c9bab6b8e41d6cb9806e589e65f320c89ada84f466e61566b7208d87924c1430 \
- --hash=sha256:f2e3a08882155de1e9ec53c71c5784eb1f25dc6514c535f5796c3c9eeac17d17
+google-cloud-bigquery-storage==2.36.0 \
+ --hash=sha256:1769e568070db672302771d2aec18341de10712aa9c4a8c549f417503e0149f0 \
+ --hash=sha256:d3c1ce9d2d3a4d7116259889dcbe3c7c70506f71f6ce6bbe54aa0a68bbba8f8f
# via feast (setup.py)
-google-cloud-bigtable==2.34.0 \
- --hash=sha256:773258b00cd3f9a3a35639cc38bd711f4f1418aaa0c8d70cb028978ed98dc2c2 \
- --hash=sha256:a4a8db4903840cd3f89fb19c060eea2e7c09c1265cb0538cfc11288dbc6000e4
+google-cloud-bigtable==2.35.0 \
+ --hash=sha256:f355bfce1f239453ec2bb3839b0f4f9937cf34ef06ef29e1ca63d58fd38d0c50 \
+ --hash=sha256:f5699012c5fea4bd4bdf7e80e5e3a812a847eb8f41bf8dc2f43095d6d876b83b
# via feast (setup.py)
google-cloud-core==2.5.0 \
--hash=sha256:67d977b41ae6c7211ee830c7912e41003ea8194bff15ae7d72fd6f51e57acabc \
@@ -750,49 +750,48 @@ google-cloud-core==2.5.0 \
# google-cloud-bigtable
# google-cloud-datastore
# google-cloud-storage
-google-cloud-datastore==2.21.0 \
- --hash=sha256:eee454dd4a55f5b327f9f344928ff1a09a6f77c23d5e3d908ad31a13cc2f4073 \
- --hash=sha256:f303f27cd1983383f20bd227019cd8a7897419e0ec6b878367c58c66245f9d9b
+google-cloud-datastore==2.23.0 \
+ --hash=sha256:24a1b1d29b902148fe41b109699f76fd3aa60591e9d547c0f8b87d7bf9ff213f \
+ --hash=sha256:80049883a4ae928fdcc661ba6803ec267665dc0e6f3ce2da91441079a6bb6387
# via feast (setup.py)
google-cloud-storage==2.19.0 \
--hash=sha256:aeb971b5c29cf8ab98445082cbfe7b161a1f48ed275822f59ed3f1524ea54fba \
--hash=sha256:cd05e9e7191ba6cb68934d8eb76054d9be4562aa89dbc4236feee4d7d51342b2
# via feast (setup.py)
-google-crc32c==1.7.1 \
- --hash=sha256:0f99eaa09a9a7e642a61e06742856eec8b19fc0037832e03f941fe7cf0c8e4db \
- --hash=sha256:19eafa0e4af11b0a4eb3974483d55d2d77ad1911e6cf6f832e1574f6781fd337 \
- --hash=sha256:1c67ca0a1f5b56162951a9dae987988679a7db682d6f97ce0f6381ebf0fbea4c \
- --hash=sha256:1f2b3522222746fff0e04a9bd0a23ea003ba3cccc8cf21385c564deb1f223242 \
- --hash=sha256:22beacf83baaf59f9d3ab2bbb4db0fb018da8e5aebdce07ef9f09fce8220285e \
- --hash=sha256:2bff2305f98846f3e825dbeec9ee406f89da7962accdb29356e4eadc251bd472 \
- --hash=sha256:2d73a68a653c57281401871dd4aeebbb6af3191dcac751a76ce430df4d403194 \
- --hash=sha256:32d1da0d74ec5634a05f53ef7df18fc646666a25efaaca9fc7dcfd4caf1d98c3 \
- --hash=sha256:3bda0fcb632d390e3ea8b6b07bf6b4f4a66c9d02dcd6fbf7ba00a197c143f582 \
- --hash=sha256:6335de12921f06e1f774d0dd1fbea6bf610abe0887a1638f64d694013138be5d \
- --hash=sha256:6b211ddaf20f7ebeec5c333448582c224a7c90a9d98826fbab82c0ddc11348e6 \
- --hash=sha256:6efb97eb4369d52593ad6f75e7e10d053cf00c48983f7a973105bc70b0ac4d82 \
- --hash=sha256:6fbab4b935989e2c3610371963ba1b86afb09537fd0c633049be82afe153ac06 \
- --hash=sha256:713121af19f1a617054c41f952294764e0c5443d5a5d9034b2cd60f5dd7e0349 \
- --hash=sha256:754561c6c66e89d55754106739e22fdaa93fafa8da7221b29c8b8e8270c6ec8a \
- --hash=sha256:7cc81b3a2fbd932a4313eb53cc7d9dde424088ca3a0337160f35d91826880c1d \
- --hash=sha256:85fef7fae11494e747c9fd1359a527e5970fc9603c90764843caabd3a16a0a48 \
- --hash=sha256:905a385140bf492ac300026717af339790921f411c0dfd9aa5a9e69a08ed32eb \
- --hash=sha256:9fc196f0b8d8bd2789352c6a522db03f89e83a0ed6b64315923c396d7a932315 \
- --hash=sha256:a8e9afc74168b0b2232fb32dd202c93e46b7d5e4bf03e66ba5dc273bb3559589 \
- --hash=sha256:b07d48faf8292b4db7c3d64ab86f950c2e94e93a11fd47271c28ba458e4a0d76 \
- --hash=sha256:b6d86616faaea68101195c6bdc40c494e4d76f41e07a37ffdef270879c15fb65 \
- --hash=sha256:b7491bdc0c7564fcf48c0179d2048ab2f7c7ba36b84ccd3a3e1c3f7a72d3bba6 \
- --hash=sha256:bb5e35dcd8552f76eed9461a23de1030920a3c953c1982f324be8f97946e7127 \
- --hash=sha256:d68e17bad8f7dd9a49181a1f5a8f4b251c6dbc8cc96fb79f1d321dfd57d66f53 \
- --hash=sha256:dcdf5a64adb747610140572ed18d011896e3b9ae5195f2514b7ff678c80f1603 \
- --hash=sha256:df8b38bdaf1629d62d51be8bdd04888f37c451564c2042d36e5812da9eff3c35 \
- --hash=sha256:e10554d4abc5238823112c2ad7e4560f96c7bf3820b202660373d769d9e6e4c9 \
- --hash=sha256:e42e20a83a29aa2709a0cf271c7f8aefaa23b7ab52e53b322585297bb94d4638 \
- --hash=sha256:ed66cbe1ed9cbaaad9392b5259b3eba4a9e565420d734e6238813c428c3336c9 \
- --hash=sha256:ee6547b657621b6cbed3562ea7826c3e11cab01cd33b74e1f677690652883e77 \
- --hash=sha256:f2226b6a8da04f1d9e61d3e357f2460b9551c5e6950071437e122c958a18ae14 \
- --hash=sha256:fa8136cc14dd27f34a3221c0f16fd42d8a40e4778273e61a3c19aedaa44daf6b \
- --hash=sha256:fc5319db92daa516b653600794d5b9f9439a9a121f3e162f94b0e1891c7933cb
+google-crc32c==1.8.0 \
+ --hash=sha256:014a7e68d623e9a4222d663931febc3033c5c7c9730785727de2a81f87d5bab8 \
+ --hash=sha256:01f126a5cfddc378290de52095e2c7052be2ba7656a9f0caf4bcd1bfb1833f8a \
+ --hash=sha256:0470b8c3d73b5f4e3300165498e4cf25221c7eb37f1159e221d1825b6df8a7ff \
+ --hash=sha256:119fcd90c57c89f30040b47c211acee231b25a45d225e3225294386f5d258288 \
+ --hash=sha256:14f87e04d613dfa218d6135e81b78272c3b904e2a7053b841481b38a7d901411 \
+ --hash=sha256:17446feb05abddc187e5441a45971b8394ea4c1b6efd88ab0af393fd9e0a156a \
+ --hash=sha256:19b40d637a54cb71e0829179f6cb41835f0fbd9e8eb60552152a8b52c36cbe15 \
+ --hash=sha256:2a3dc3318507de089c5384cc74d54318401410f82aa65b2d9cdde9d297aca7cb \
+ --hash=sha256:3b9776774b24ba76831609ffbabce8cdf6fa2bd5e9df37b594221c7e333a81fa \
+ --hash=sha256:3cc0c8912038065eafa603b238abf252e204accab2a704c63b9e14837a854962 \
+ --hash=sha256:3d488e98b18809f5e322978d4506373599c0c13e6c5ad13e53bb44758e18d215 \
+ --hash=sha256:3ebb04528e83b2634857f43f9bb8ef5b2bbe7f10f140daeb01b58f972d04736b \
+ --hash=sha256:450dc98429d3e33ed2926fc99ee81001928d63460f8538f21a5d6060912a8e27 \
+ --hash=sha256:4b8286b659c1335172e39563ab0a768b8015e88e08329fa5321f774275fc3113 \
+ --hash=sha256:57a50a9035b75643996fbf224d6661e386c7162d1dfdab9bc4ca790947d1007f \
+ --hash=sha256:61f58b28e0b21fcb249a8247ad0db2e64114e201e2e9b4200af020f3b6242c9f \
+ --hash=sha256:6f35aaffc8ccd81ba3162443fabb920e65b1f20ab1952a31b13173a67811467d \
+ --hash=sha256:71734788a88f551fbd6a97be9668a0020698e07b2bf5b3aa26a36c10cdfb27b2 \
+ --hash=sha256:864abafe7d6e2c4c66395c1eb0fe12dc891879769b52a3d56499612ca93b6092 \
+ --hash=sha256:86cfc00fe45a0ac7359e5214a1704e51a99e757d0272554874f419f79838c5f7 \
+ --hash=sha256:87b0072c4ecc9505cfa16ee734b00cd7721d20a0f595be4d40d3d21b41f65ae2 \
+ --hash=sha256:87fa445064e7db928226b2e6f0d5304ab4cd0339e664a4e9a25029f384d9bb93 \
+ --hash=sha256:89c17d53d75562edfff86679244830599ee0a48efc216200691de8b02ab6b2b8 \
+ --hash=sha256:8b3f68782f3cbd1bce027e48768293072813469af6a61a86f6bb4977a4380f21 \
+ --hash=sha256:a428e25fb7691024de47fecfbff7ff957214da51eddded0da0ae0e0f03a2cf79 \
+ --hash=sha256:b0d1a7afc6e8e4635564ba8aa5c0548e3173e41b6384d7711a9123165f582de2 \
+ --hash=sha256:ba6aba18daf4d36ad4412feede6221414692f44d17e5428bdd81ad3fc1eee5dc \
+ --hash=sha256:cb5c869c2923d56cb0c8e6bcdd73c009c36ae39b652dbe46a05eb4ef0ad01454 \
+ --hash=sha256:d511b3153e7011a27ab6ee6bb3a5404a55b994dc1a7322c0b87b29606d9790e2 \
+ --hash=sha256:db3fe8eaf0612fc8b20fa21a5f25bd785bc3cd5be69f8f3412b0ac2ffd49e733 \
+ --hash=sha256:e6584b12cb06796d285d09e33f63309a09368b9d806a551d8036a4207ea43697 \
+ --hash=sha256:f4b51844ef67d6cf2e9425983274da75f18b1597bb2c998e1c0a0e8d46f8f651 \
+ --hash=sha256:f639065ea2042d5c034bf258a9f085eaa7af0cd250667c0635a3118e8f92c69c
# via
# google-cloud-bigtable
# google-cloud-storage
@@ -875,6 +874,7 @@ grpcio==1.62.3 \
# google-api-core
# google-cloud-bigquery
# google-cloud-bigquery-storage
+ # google-cloud-datastore
# googleapis-common-protos
# grpc-google-iam-v1
# grpcio-health-checking
@@ -1073,9 +1073,9 @@ idna==3.11 \
# requests
# snowflake-connector-python
# yarl
-importlib-metadata==8.7.0 \
- --hash=sha256:d13b81ad223b890aa16c5471f2ac3056cf76c5f10f82d6f9292f0b415f389000 \
- --hash=sha256:e5dd1551894c77868a30651cef00984d50e1002d06942a7101d34870c5f02afd
+importlib-metadata==8.7.1 \
+ --hash=sha256:49fef1ae6440c182052f407c8d34a68f72efc36db9ca90dc0113398f2fdde8bb \
+ --hash=sha256:5a1f80bf1daa489495071efbb095d75a634cf28a8bc299581244063b53176151
# via dask
jinja2==3.1.6 \
--hash=sha256:0137fb05990d35f1275a587e9aee6d56da821fc83491a0fb838183be43f66d6d \
@@ -1102,83 +1102,83 @@ kubernetes==33.1.0 \
--hash=sha256:544de42b24b64287f7e0aa9513c93cb503f7f40eea39b20f66810011a86eabc5 \
--hash=sha256:f64d829843a54c251061a8e7a14523b521f2dc5c896cf6d65ccf348648a88993
# via feast (setup.py)
-librt==0.7.3 \
- --hash=sha256:020c6db391268bcc8ce75105cb572df8cb659a43fd347366aaa407c366e5117a \
- --hash=sha256:0fa9ac2e49a6bee56e47573a6786cb635e128a7b12a0dc7851090037c0d397a3 \
- --hash=sha256:11ad45122bbed42cfc8b0597450660126ef28fd2d9ae1a219bc5af8406f95678 \
- --hash=sha256:120dd21d46ff875e849f1aae19346223cf15656be489242fe884036b23d39e93 \
- --hash=sha256:14569ac5dd38cfccf0a14597a88038fb16811a6fede25c67b79c6d50fc2c8fdc \
- --hash=sha256:1617bea5ab31266e152871208502ee943cb349c224846928a1173c864261375e \
- --hash=sha256:170cdb8436188347af17bf9cccf3249ba581c933ed56d926497119d4cf730cec \
- --hash=sha256:1975eda520957c6e0eb52d12968dd3609ffb7eef05d4223d097893d6daf1d8a7 \
- --hash=sha256:1fe603877e1865b5fd047a5e40379509a4a60204aa7aa0f72b16f7a41c3f0712 \
- --hash=sha256:24d70810f6e2ea853ff79338001533716b373cc0f63e2a0be5bc96129edb5fb5 \
- --hash=sha256:256793988bff98040de23c57cf36e1f4c2f2dc3dcd17537cdac031d3b681db71 \
- --hash=sha256:25711f364c64cab2c910a0247e90b51421e45dbc8910ceeb4eac97a9e132fc6f \
- --hash=sha256:2682162855a708e3270eba4b92026b93f8257c3e65278b456c77631faf0f4f7a \
- --hash=sha256:2cf9d73499486ce39eebbff5f42452518cc1f88d8b7ea4a711ab32962b176ee2 \
- --hash=sha256:2e40520c37926166c24d0c2e0f3bc3a5f46646c34bdf7b4ea9747c297d6ee809 \
- --hash=sha256:2e980cf1ed1a2420a6424e2ed884629cdead291686f1048810a817de07b5eb18 \
- --hash=sha256:2f03484b54bf4ae80ab2e504a8d99d20d551bfe64a7ec91e218010b467d77093 \
- --hash=sha256:35f1609e3484a649bb80431310ddbec81114cd86648f1d9482bc72a3b86ded2e \
- --hash=sha256:399938edbd3d78339f797d685142dd8a623dfaded023cf451033c85955e4838a \
- --hash=sha256:399bbd7bcc1633c3e356ae274a1deb8781c7bf84d9c7962cc1ae0c6e87837292 \
- --hash=sha256:3ec50cf65235ff5c02c5b747748d9222e564ad48597122a361269dd3aa808798 \
- --hash=sha256:3edbf257c40d21a42615e9e332a6b10a8bacaaf58250aed8552a14a70efd0d65 \
- --hash=sha256:440c788f707c061d237c1e83edf6164ff19f5c0f823a3bf054e88804ebf971ec \
- --hash=sha256:44b3689b040df57f492e02cd4f0bacd1b42c5400e4b8048160c9d5e866de8abe \
- --hash=sha256:4887c29cadbdc50640179e3861c276325ff2986791e6044f73136e6e798ff806 \
- --hash=sha256:5460d99ed30f043595bbdc888f542bad2caeb6226b01c33cda3ae444e8f82d42 \
- --hash=sha256:550fdbfbf5bba6a2960b27376ca76d6aaa2bd4b1a06c4255edd8520c306fcfc0 \
- --hash=sha256:56f2a47beda8409061bc1c865bef2d4bd9ff9255219402c0817e68ab5ad89aed \
- --hash=sha256:572a24fc5958c61431da456a0ef1eeea6b4989d81eeb18b8e5f1f3077592200b \
- --hash=sha256:59cb0470612d21fa1efddfa0dd710756b50d9c7fb6c1236bbf8ef8529331dc70 \
- --hash=sha256:6038ccbd5968325a5d6fd393cf6e00b622a8de545f0994b89dd0f748dcf3e19e \
- --hash=sha256:6488e69d408b492e08bfb68f20c4a899a354b4386a446ecd490baff8d0862720 \
- --hash=sha256:687403cced6a29590e6be6964463835315905221d797bc5c934a98750fe1a9af \
- --hash=sha256:6b407c23f16ccc36614c136251d6b32bf30de7a57f8e782378f1107be008ddb0 \
- --hash=sha256:6b4e7bff1d76dd2b46443078519dc75df1b5e01562345f0bb740cea5266d8218 \
- --hash=sha256:6bdd9adfca615903578d2060ee8a6eb1c24eaf54919ff0ddc820118e5718931b \
- --hash=sha256:6eb9295c730e26b849ed1f4022735f36863eb46b14b6e10604c1c39b8b5efaea \
- --hash=sha256:703456146dc2bf430f7832fd1341adac5c893ec3c1430194fdcefba00012555c \
- --hash=sha256:754a0d09997095ad764ccef050dd5bf26cbf457aab9effcba5890dad081d879e \
- --hash=sha256:7af7785f5edd1f418da09a8cdb9ec84b0213e23d597413e06525340bcce1ea4f \
- --hash=sha256:7b29e97273bd6999e2bfe9fe3531b1f4f64effd28327bced048a33e49b99674a \
- --hash=sha256:7b4f57f7a0c65821c5441d98c47ff7c01d359b1e12328219709bdd97fdd37f90 \
- --hash=sha256:8837d5a52a2d7aa9f4c3220a8484013aed1d8ad75240d9a75ede63709ef89055 \
- --hash=sha256:8ccadf260bb46a61b9c7e89e2218f6efea9f3eeaaab4e3d1f58571890e54858e \
- --hash=sha256:8d8cf653e798ee4c4e654062b633db36984a1572f68c3aa25e364a0ddfbbb910 \
- --hash=sha256:93b2a1f325fefa1482516ced160c8c7b4b8d53226763fa6c93d151fa25164207 \
- --hash=sha256:9f0e0927efe87cd42ad600628e595a1a0aa1c64f6d0b55f7e6059079a428641a \
- --hash=sha256:a59a69deeb458c858b8fea6acf9e2acd5d755d76cd81a655256bc65c20dfff5b \
- --hash=sha256:a9f9b661f82693eb56beb0605156c7fca57f535704ab91837405913417d6990b \
- --hash=sha256:abfc57cab3c53c4546aee31859ef06753bfc136c9d208129bad23e2eca39155a \
- --hash=sha256:aca73d70c3f553552ba9133d4a09e767dcfeee352d8d8d3eb3f77e38a3beb3ed \
- --hash=sha256:adeaa886d607fb02563c1f625cf2ee58778a2567c0c109378da8f17ec3076ad7 \
- --hash=sha256:b278a9248a4e3260fee3db7613772ca9ab6763a129d6d6f29555e2f9b168216d \
- --hash=sha256:b7c1239b64b70be7759554ad1a86288220bbb04d68518b527783c4ad3fb4f80b \
- --hash=sha256:bf8c7735fbfc0754111f00edda35cf9e98a8d478de6c47b04eaa9cef4300eaa7 \
- --hash=sha256:c634a0a6db395fdaba0361aa78395597ee72c3aad651b9a307a3a7eaf5efd67e \
- --hash=sha256:cad9971881e4fec00d96af7eaf4b63aa7a595696fc221808b0d3ce7ca9743258 \
- --hash=sha256:cbdb3f337c88b43c3b49ca377731912c101178be91cb5071aac48faa898e6f8e \
- --hash=sha256:cd8551aa21df6c60baa2624fd086ae7486bdde00c44097b32e1d1b1966e365e0 \
- --hash=sha256:d09f677693328503c9e492e33e9601464297c01f9ebd966ea8fc5308f3069bfd \
- --hash=sha256:d376a35c6561e81d2590506804b428fc1075fcc6298fc5bb49b771534c0ba010 \
- --hash=sha256:d39079379a9a28e74f4d57dc6357fa310a1977b51ff12239d7271ec7e71d67f5 \
- --hash=sha256:d86f94743a11873317094326456b23f8a5788bad9161fd2f0e52088c33564620 \
- --hash=sha256:d91e60ac44bbe3a77a67af4a4c13114cbe9f6d540337ce22f2c9eaf7454ca71f \
- --hash=sha256:d9883b2d819ce83f87ba82a746c81d14ada78784db431e57cc9719179847376e \
- --hash=sha256:e094e445c37c57e9ec612847812c301840239d34ccc5d153a982fa9814478c60 \
- --hash=sha256:e19acfde38cb532a560b98f473adc741c941b7a9bc90f7294bc273d08becb58b \
- --hash=sha256:e32d43610dff472eab939f4d7fbdd240d1667794192690433672ae22d7af8445 \
- --hash=sha256:ed028fc3d41adda916320712838aec289956c89b4f0a361ceadf83a53b4c047a \
- --hash=sha256:ef59c938f72bdbc6ab52dc50f81d0637fde0f194b02d636987cea2ab30f8f55a \
- --hash=sha256:f3d4801db8354436fd3936531e7f0e4feb411f62433a6b6cb32bb416e20b529f \
- --hash=sha256:f57aca20e637750a2c18d979f7096e2c2033cc40cf7ed201494318de1182f135 \
- --hash=sha256:f9da128d0edf990cf0d2ca011b02cd6f639e79286774bd5b0351245cbb5a6e51 \
- --hash=sha256:fbd7351d43b80d9c64c3cfcb50008f786cc82cba0450e8599fdd64f264320bd3 \
- --hash=sha256:fcb72249ac4ea81a7baefcbff74df7029c3cb1cf01a711113fa052d563639c9c \
- --hash=sha256:ff21c554304e8226bf80c3a7754be27c6c3549a9fec563a03c06ee8f494da8fc
+librt==0.7.5 \
+ --hash=sha256:060bde69c3604f694bd8ae21a780fe8be46bb3dbb863642e8dfc75c931ca8eee \
+ --hash=sha256:08153ea537609d11f774d2bfe84af39d50d5c9ca3a4d061d946e0c9d8bce04a1 \
+ --hash=sha256:0b4791202296ad51ac09a3ff58eb49d9da8e3a4009167a6d76ac418a974e5fd4 \
+ --hash=sha256:0b7f080ba30601dfa3e3deed3160352273e1b9bc92e652f51103c3e9298f7899 \
+ --hash=sha256:0e2bf8f91093fac43e3eaebacf777f12fd539dce9ec5af3efc6d8424e96ccd49 \
+ --hash=sha256:118716de5ad6726332db1801bc90fa6d94194cd2e07c1a7822cebf12c496714d \
+ --hash=sha256:168e04663e126416ba712114050f413ac306759a1791d87b7c11d4428ba75760 \
+ --hash=sha256:191cbd42660446d67cf7a95ac7bfa60f49b8b3b0417c64f216284a1d86fc9335 \
+ --hash=sha256:263f4fae9eba277513357c871275b18d14de93fd49bf5e43dc60a97b81ad5eb8 \
+ --hash=sha256:265729b551a2dd329cc47b323a182fb7961af42abf21e913c9dd7d3331b2f3c2 \
+ --hash=sha256:26b46620e1e0e45af510d9848ea0915e7040605dd2ae94ebefb6c962cbb6f7ec \
+ --hash=sha256:29c8d2fae11d4379ea207ba7fc69d43237e42cf8a9f90ec6e05993687e6d648b \
+ --hash=sha256:2fcbf2e135c11f721193aa5f42ba112bb1046afafbffd407cbc81d8d735c74d0 \
+ --hash=sha256:39183abee670bc37b85f11e86c44a9cad1ed6efa48b580083e89ecee13dd9717 \
+ --hash=sha256:3919c9407faeeee35430ae135e3a78acd4ecaaaa73767529e2c15ca1d73ba325 \
+ --hash=sha256:3c98a8d0ac9e2a7cb8ff8c53e5d6e8d82bfb2839abf144fdeaaa832f2a12aa45 \
+ --hash=sha256:3dd58f7ce20360c6ce0c04f7bd9081c7f9c19fc6129a3c705d0c5a35439f201d \
+ --hash=sha256:46aa91813c267c3f60db75d56419b42c0c0b9748ec2c568a0e3588e543fb4233 \
+ --hash=sha256:49c596cd18e90e58b7caa4d7ca7606049c1802125fcff96b8af73fa5c3870e4d \
+ --hash=sha256:532ddc6a8a6ca341b1cd7f4d999043e4c71a212b26fe9fd2e7f1e8bb4e873544 \
+ --hash=sha256:54d2aef0b0f5056f130981ad45081b278602ff3657fe16c88529f5058038e802 \
+ --hash=sha256:553dc58987d1d853adda8aeadf4db8e29749f0b11877afcc429a9ad892818ae2 \
+ --hash=sha256:584cb3e605ec45ba350962cec853e17be0a25a772f21f09f1e422f7044ae2a7d \
+ --hash=sha256:5cd3afd71e9bc146203b6c8141921e738364158d4aa7cdb9a874e2505163770f \
+ --hash=sha256:63055d3dda433ebb314c9f1819942f16a19203c454508fdb2d167613f7017169 \
+ --hash=sha256:654fdc971c76348a73af5240d8e2529265b9a7ba6321e38dd5bae7b0d4ab3abe \
+ --hash=sha256:6b7b58913d475911f6f33e8082f19dd9b120c4f4a5c911d07e395d67b81c6982 \
+ --hash=sha256:6e860909fea75baef941ee6436e0453612505883b9d0d87924d4fda27865b9a2 \
+ --hash=sha256:730be847daad773a3c898943cf67fb9845a3961d06fb79672ceb0a8cd8624cfa \
+ --hash=sha256:732e0aa0385b59a1b2545159e781c792cc58ce9c134249233a7c7250a44684c4 \
+ --hash=sha256:75965c1f4efb7234ff52a58b729d245a21e87e4b6a26a0ec08052f02b16274e4 \
+ --hash=sha256:7a488908a470451338607650f1c064175094aedebf4a4fa37890682e30ce0b57 \
+ --hash=sha256:81056e01bba1394f1d92904ec61a4078f66df785316275edbaf51d90da8c6e26 \
+ --hash=sha256:82f3f088482e2229387eadf8215c03f7726d56f69cce8c0c40f0795aebc9b361 \
+ --hash=sha256:84d4a6b9efd6124f728558a18e79e7cc5c5d4efc09b2b846c910de7e564f5bad \
+ --hash=sha256:85f485b7471571e99fab4f44eeb327dc0e1f814ada575f3fa85e698417d8a54e \
+ --hash=sha256:8a3cfb15961e7333ea6ef033dc574af75153b5c230d5ad25fbcd55198f21e0cf \
+ --hash=sha256:8bb7883c1e94ceb87c2bf81385266f032da09cd040e804cc002f2c9d6b842e2f \
+ --hash=sha256:8dcae24de1bc9da93aa689cb6313c70e776d7cea2fcf26b9b6160fedfe6bd9af \
+ --hash=sha256:9937574e6d842f359b8585903d04f5b4ab62277a091a93e02058158074dc52f2 \
+ --hash=sha256:9bbb8facc5375476d392990dd6a71f97e4cb42e2ac66f32e860f6e47299d5e89 \
+ --hash=sha256:9c08527055fbb03c641c15bbc5b79dd2942fb6a3bd8dabf141dd7e97eeea4904 \
+ --hash=sha256:9cffa3ef0af29687455161cb446eff059bf27607f95163d6a37e27bcb37180f6 \
+ --hash=sha256:9f85f9b5db87b0f52e53c68ad2a0c5a53e00afa439bd54a1723742a2b1021276 \
+ --hash=sha256:a82d5a0ee43aeae2116d7292c77cc8038f4841830ade8aa922e098933b468b9e \
+ --hash=sha256:a9eacbf983319b26b5f340a2e0cd47ac1ee4725a7f3a72fd0f15063c934b69d6 \
+ --hash=sha256:ab4b0d3bee6f6ff7017e18e576ac7e41a06697d8dea4b8f3ab9e0c8e1300c409 \
+ --hash=sha256:af69d9e159575e877c7546d1ee817b4ae089aa221dd1117e20c24ad8dc8659c7 \
+ --hash=sha256:b1795c4b2789b458fa290059062c2f5a297ddb28c31e704d27e161386469691a \
+ --hash=sha256:b591c094afd0ffda820e931148c9e48dc31a556dc5b2b9b3cc552fa710d858e4 \
+ --hash=sha256:b8e0fd344bad57026a8f4ccfaf406486c2fc991838050c2fef156170edc3b775 \
+ --hash=sha256:ba1077c562a046208a2dc6366227b3eeae8f2c2ab4b41eaf4fd2fa28cece4203 \
+ --hash=sha256:bb41f04046b4f22b1e7ba5ef513402cd2e3477ec610e5f92d38fe2bba383d419 \
+ --hash=sha256:c039bbf79a9a2498404d1ae7e29a6c175e63678d7a54013a97397c40aee026c5 \
+ --hash=sha256:c566a4672564c5d54d8ab65cdaae5a87ee14c1564c1a2ddc7a9f5811c750f023 \
+ --hash=sha256:cda8b025875946ffff5a9a7590bf9acde3eb02cb6200f06a2d3e691ef3d9955b \
+ --hash=sha256:cdb001a1a0e4f41e613bca2c0fc147fc8a7396f53fc94201cbfd8ec7cd69ca4b \
+ --hash=sha256:cdde31759bd8888f3ef0eebda80394a48961328a17c264dce8cc35f4b9cde35d \
+ --hash=sha256:d2cc7d187e8c6e9b7bdbefa9697ce897a704ea7a7ce844f2b4e0e2aa07ae51d3 \
+ --hash=sha256:d7aa33153a5bb0bac783d2c57885889b1162823384e8313d47800a0e10d0070e \
+ --hash=sha256:d7c72c8756eeb3aefb1b9e3dac7c37a4a25db63640cac0ab6fc18e91a0edf05a \
+ --hash=sha256:dd810f2d39c526c42ea205e0addad5dc08ef853c625387806a29d07f9d150d9b \
+ --hash=sha256:ddc0ab9dbc5f9ceaf2bf7a367bf01f2697660e908f6534800e88f43590b271db \
+ --hash=sha256:ddc4a16207f88f9597b397fc1f60781266d13b13de922ff61c206547a29e4bbd \
+ --hash=sha256:de4221a1181fa9c8c4b5f35506ed6f298948f44003d84d2a8b9885d7e01e6cfa \
+ --hash=sha256:df2e210400b28e50994477ebf82f055698c79797b6ee47a1669d383ca33263e1 \
+ --hash=sha256:df3146d52465b3b6397d25d513f428cb421c18df65b7378667bb5f1e3cc45805 \
+ --hash=sha256:e47fc52602ffc374e69bf1b76536dc99f7f6dd876bd786c8213eaa3598be030a \
+ --hash=sha256:e9e9c988b5ffde7be02180f864cbd17c0b0c1231c235748912ab2afa05789c25 \
+ --hash=sha256:ea1b60b86595a5dc1f57b44a801a1c4d8209c0a69518391d349973a4491408e6 \
+ --hash=sha256:edf6b465306215b19dbe6c3fb63cf374a8f3e1ad77f3b4c16544b83033bbb67b \
+ --hash=sha256:f02c4337bf271c4f06637f5ff254fad2238c0b8e32a3a480ebb2fc5e26f754a5 \
+ --hash=sha256:f7f51ffe59f4556243d3cc82d827bde74765f594fa3ceb80ec4de0c13ccd3416 \
+ --hash=sha256:f952e1a78c480edee8fb43aa2bf2e84dcd46c917d44f8065b883079d3893e8fc \
+ --hash=sha256:fb565b4219abc8ea2402e61c7ba648a62903831059ed3564fa1245cc245d58d7 \
+ --hash=sha256:fee15c2a190ef389f14928135c6fb2d25cd3fdb7887bfd9a7b444bbdc8c06b96
# via mypy
locket==1.0.0 \
--hash=sha256:5c0d4c052a8bbbf750e056a8e65ccd309086f4f0f18a2eac306a8dfa4112a632 \
@@ -1279,9 +1279,9 @@ markupsafe==3.0.3 \
--hash=sha256:f9e130248f4462aaa8e2552d547f36ddadbeaa573879158d721bbd33dfe4743a \
--hash=sha256:fed51ac40f757d41b7c48425901843666a6677e3e8eb0abcff09e4ba6e664f50
# via jinja2
-mcp==1.23.3 \
- --hash=sha256:32768af4b46a1b4f7df34e2bfdf5c6011e7b63d7f1b0e321d0fdef4cd6082031 \
- --hash=sha256:b3b0da2cc949950ce1259c7bfc1b081905a51916fcd7c8182125b85e70825201
+mcp==1.25.0 \
+ --hash=sha256:56310361ebf0364e2d438e5b45f7668cbb124e158bb358333cd06e49e83a6802 \
+ --hash=sha256:b37c38144a666add0862614cc79ec276e97d72aa8ca26d622818d4e278b9721a
# via fastapi-mcp
mdurl==0.1.2 \
--hash=sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8 \
@@ -1569,125 +1569,123 @@ multidict==6.7.0 \
# aiobotocore
# aiohttp
# yarl
-mypy==1.19.0 \
- --hash=sha256:0c01c99d626380752e527d5ce8e69ffbba2046eb8a060db0329690849cf9b6f9 \
- --hash=sha256:0dde5cb375cb94deff0d4b548b993bec52859d1651e073d63a1386d392a95495 \
- --hash=sha256:0e3c3d1e1d62e678c339e7ade72746a9e0325de42cd2cccc51616c7b2ed1a018 \
- --hash=sha256:0ea4fd21bb48f0da49e6d3b37ef6bd7e8228b9fe41bbf4d80d9364d11adbd43c \
- --hash=sha256:0fb3115cb8fa7c5f887c8a8d81ccdcb94cff334684980d847e5a62e926910e1d \
- --hash=sha256:11f7254c15ab3f8ed68f8e8f5cbe88757848df793e31c36aaa4d4f9783fd08ab \
- --hash=sha256:120cffe120cca5c23c03c77f84abc0c14c5d2e03736f6c312480020082f1994b \
- --hash=sha256:16f76ff3f3fd8137aadf593cb4607d82634fca675e8211ad75c43d86033ee6c6 \
- --hash=sha256:1cf9c59398db1c68a134b0b5354a09a1e124523f00bacd68e553b8bd16ff3299 \
- --hash=sha256:318ba74f75899b0e78b847d8c50821e4c9637c79d9a59680fc1259f29338cb3e \
- --hash=sha256:3210d87b30e6af9c8faed61be2642fcbe60ef77cec64fa1ef810a630a4cf671c \
- --hash=sha256:34ec1ac66d31644f194b7c163d7f8b8434f1b49719d403a5d26c87fff7e913f7 \
- --hash=sha256:37af5166f9475872034b56c5efdcf65ee25394e9e1d172907b84577120714364 \
- --hash=sha256:3ad925b14a0bb99821ff6f734553294aa6a3440a8cb082fe1f5b84dfb662afb1 \
- --hash=sha256:510c014b722308c9bd377993bcbf9a07d7e0692e5fa8fc70e639c1eb19fc6bee \
- --hash=sha256:6016c52ab209919b46169651b362068f632efcd5eb8ef9d1735f6f86da7853b2 \
- --hash=sha256:6148ede033982a8c5ca1143de34c71836a09f105068aaa8b7d5edab2b053e6c8 \
- --hash=sha256:63ea6a00e4bd6822adbfc75b02ab3653a17c02c4347f5bb0cf1d5b9df3a05835 \
- --hash=sha256:7686ed65dbabd24d20066f3115018d2dce030d8fa9db01aa9f0a59b6813e9f9e \
- --hash=sha256:7a500ab5c444268a70565e374fc803972bfd1f09545b13418a5174e29883dab7 \
- --hash=sha256:8f44f2ae3c58421ee05fe609160343c25f70e3967f6e32792b5a78006a9d850f \
- --hash=sha256:a18d8abdda14035c5718acb748faec09571432811af129bf0d9e7b2d6699bf18 \
- --hash=sha256:a31e4c28e8ddb042c84c5e977e28a21195d086aaffaf08b016b78e19c9ef8106 \
- --hash=sha256:a9ac09e52bb0f7fb912f5d2a783345c72441a08ef56ce3e17c1752af36340a39 \
- --hash=sha256:b9d491295825182fba01b6ffe2c6fe4e5a49dbf4e2bb4d1217b6ced3b4797bc6 \
- --hash=sha256:c14a98bc63fd867530e8ec82f217dae29d0550c86e70debc9667fff1ec83284e \
- --hash=sha256:c3385246593ac2b97f155a0e9639be906e73534630f663747c71908dfbf26134 \
- --hash=sha256:cabbee74f29aa9cd3b444ec2f1e4fa5a9d0d746ce7567a6a609e224429781f53 \
- --hash=sha256:cb64b0ba5980466a0f3f9990d1c582bcab8db12e29815ecb57f1408d99b4bff7 \
- --hash=sha256:cf7d84f497f78b682edd407f14a7b6e1a2212b433eedb054e2081380b7395aa3 \
- --hash=sha256:e2c1101ab41d01303103ab6ef82cbbfedb81c1a060c868fa7cc013d573d37ab5 \
- --hash=sha256:f188dcf16483b3e59f9278c4ed939ec0254aa8a60e8fc100648d9ab5ee95a431 \
- --hash=sha256:f2e36bed3c6d9b5f35d28b63ca4b727cb0228e480826ffc8953d1892ddc8999d \
- --hash=sha256:f3e19e3b897562276bb331074d64c076dbdd3e79213f36eed4e592272dabd760 \
- --hash=sha256:f6b874ca77f733222641e5c46e4711648c4037ea13646fd0cdc814c2eaec2528 \
- --hash=sha256:f75e60aca3723a23511948539b0d7ed514dda194bc3755eae0bfc7a6b4887aa7 \
- --hash=sha256:fc51a5b864f73a3a182584b1ac75c404396a17eced54341629d8bdcb644a5bba \
- --hash=sha256:fd4a985b2e32f23bead72e2fb4bbe5d6aceee176be471243bd831d5b2644672d
+mypy==1.19.1 \
+ --hash=sha256:016f2246209095e8eda7538944daa1d60e1e8134d98983b9fc1e92c1fc0cb8dd \
+ --hash=sha256:022ea7279374af1a5d78dfcab853fe6a536eebfda4b59deab53cd21f6cd9f00b \
+ --hash=sha256:06e6170bd5836770e8104c8fdd58e5e725cfeb309f0a6c681a811f557e97eac1 \
+ --hash=sha256:19d88bb05303fe63f71dd2c6270daca27cb9401c4ca8255fe50d1d920e0eb9ba \
+ --hash=sha256:21761006a7f497cb0d4de3d8ef4ca70532256688b0523eee02baf9eec895e27b \
+ --hash=sha256:28902ee51f12e0f19e1e16fbe2f8f06b6637f482c459dd393efddd0ec7f82045 \
+ --hash=sha256:2899753e2f61e571b3971747e302d5f420c3fd09650e1951e99f823bc3089dac \
+ --hash=sha256:2abb24cf3f17864770d18d673c85235ba52456b36a06b6afc1e07c1fdcd3d0e6 \
+ --hash=sha256:34c81968774648ab5ac09c29a375fdede03ba253f8f8287847bd480782f73a6a \
+ --hash=sha256:409088884802d511ee52ca067707b90c883426bd95514e8cfda8281dc2effe24 \
+ --hash=sha256:481daf36a4c443332e2ae9c137dfee878fcea781a2e3f895d54bd3002a900957 \
+ --hash=sha256:4b84a7a18f41e167f7995200a1d07a4a6810e89d29859df936f1c3923d263042 \
+ --hash=sha256:4f28f99c824ecebcdaa2e55d82953e38ff60ee5ec938476796636b86afa3956e \
+ --hash=sha256:5f05aa3d375b385734388e844bc01733bd33c644ab48e9684faa54e5389775ec \
+ --hash=sha256:7bcfc336a03a1aaa26dfce9fff3e287a3ba99872a157561cbfcebe67c13308e3 \
+ --hash=sha256:804bd67b8054a85447c8954215a906d6eff9cabeabe493fb6334b24f4bfff718 \
+ --hash=sha256:8bb5c6f6d043655e055be9b542aa5f3bdd30e4f3589163e85f93f3640060509f \
+ --hash=sha256:a009ffa5a621762d0c926a078c2d639104becab69e79538a494bcccb62cc0331 \
+ --hash=sha256:a8174a03289288c1f6c46d55cef02379b478bfbc8e358e02047487cad44c6ca1 \
+ --hash=sha256:ab43590f9cd5108f41aacf9fca31841142c786827a74ab7cc8a2eacb634e09a1 \
+ --hash=sha256:b10e7c2cd7870ba4ad9b2d8a6102eb5ffc1f16ca35e3de6bfa390c1113029d13 \
+ --hash=sha256:b13cfdd6c87fc3efb69ea4ec18ef79c74c3f98b4e5498ca9b85ab3b2c2329a67 \
+ --hash=sha256:b64d987153888790bcdb03a6473d321820597ab8dd9243b27a92153c4fa50fd2 \
+ --hash=sha256:b7951a701c07ea584c4fe327834b92a30825514c868b1f69c30445093fdd9d5a \
+ --hash=sha256:bdb12f69bcc02700c2b47e070238f42cb87f18c0bc1fc4cdb4fb2bc5fd7a3b8b \
+ --hash=sha256:c35d298c2c4bba75feb2195655dfea8124d855dfd7343bf8b8c055421eaf0cf8 \
+ --hash=sha256:c608937067d2fc5a4dd1a5ce92fd9e1398691b8c5d012d66e1ddd430e9244376 \
+ --hash=sha256:c9a6538e0415310aad77cb94004ca6482330fece18036b5f360b62c45814c4ef \
+ --hash=sha256:d8dfc6ab58ca7dda47d9237349157500468e404b17213d44fc1cb77bce532288 \
+ --hash=sha256:da4869fc5e7f62a88f3fe0b5c919d1d9f7ea3cef92d3689de2823fd27e40aa75 \
+ --hash=sha256:de759aafbae8763283b2ee5869c7255391fbc4de3ff171f8f030b5ec48381b74 \
+ --hash=sha256:e3157c7594ff2ef1634ee058aafc56a82db665c9438fd41b390f3bde1ab12250 \
+ --hash=sha256:e3f276d8493c3c97930e354b2595a44a21348b320d859fb4a2b9f66da9ed27ab \
+ --hash=sha256:ee4c11e460685c3e0c64a4c5de82ae143622410950d6be863303a1c4ba0e36d6 \
+ --hash=sha256:f1235f5ea01b7db5468d53ece6aaddf1ad0b88d9e7462b86ef96fe04995d7247 \
+ --hash=sha256:f7cee03c9a2e2ee26ec07479f38ea9c884e301d42c6d43a19d20fb014e3ba925 \
+ --hash=sha256:f859fb09d9583a985be9a493d5cfc5515b56b08f7447759a0c5deaf68d80506e \
+ --hash=sha256:ffcebe56eb09ff0c0885e750036a095e23793ba6c2e894e7e63f6d89ad51f22e
# via sqlalchemy
mypy-extensions==1.1.0 \
--hash=sha256:1be4cccdb0f2482337c4743e60421de3a356cd97508abadd57d47403e94f5505 \
--hash=sha256:52e68efc3284861e772bbcd66823fde5ae21fd2fdb51c62a211403730b916558
# via mypy
-numpy==2.3.5 \
- --hash=sha256:00dc4e846108a382c5869e77c6ed514394bdeb3403461d25a829711041217d5b \
- --hash=sha256:0472f11f6ec23a74a906a00b48a4dcf3849209696dff7c189714511268d103ae \
- --hash=sha256:04822c00b5fd0323c8166d66c701dc31b7fbd252c100acd708c48f763968d6a3 \
- --hash=sha256:052e8c42e0c49d2575621c158934920524f6c5da05a1d3b9bab5d8e259e045f0 \
- --hash=sha256:09a1bea522b25109bf8e6f3027bd810f7c1085c64a0c7ce050c1676ad0ba010b \
- --hash=sha256:0cd00b7b36e35398fa2d16af7b907b65304ef8bb4817a550e06e5012929830fa \
- --hash=sha256:0d8163f43acde9a73c2a33605353a4f1bc4798745a8b1d73183b28e5b435ae28 \
- --hash=sha256:1062fde1dcf469571705945b0f221b73928f34a20c904ffb45db101907c3454e \
- --hash=sha256:11e06aa0af8c0f05104d56450d6093ee639e15f24ecf62d417329d06e522e017 \
- --hash=sha256:17531366a2e3a9e30762c000f2c43a9aaa05728712e25c11ce1dbe700c53ad41 \
- --hash=sha256:1978155dd49972084bd6ef388d66ab70f0c323ddee6f693d539376498720fb7e \
- --hash=sha256:1ed1ec893cff7040a02c8aa1c8611b94d395590d553f6b53629a4461dc7f7b63 \
- --hash=sha256:2dcd0808a421a482a080f89859a18beb0b3d1e905b81e617a188bd80422d62e9 \
- --hash=sha256:2e2eb32ddb9ccb817d620ac1d8dae7c3f641c1e5f55f531a33e8ab97960a75b8 \
- --hash=sha256:2feae0d2c91d46e59fcd62784a3a83b3fb677fead592ce51b5a6fbb4f95965ff \
- --hash=sha256:3095bdb8dd297e5920b010e96134ed91d852d81d490e787beca7e35ae1d89cf7 \
- --hash=sha256:30bc11310e8153ca664b14c5f1b73e94bd0503681fcf136a163de856f3a50139 \
- --hash=sha256:3101e5177d114a593d79dd79658650fe28b5a0d8abeb8ce6f437c0e6df5be1a4 \
- --hash=sha256:396084a36abdb603546b119d96528c2f6263921c50df3c8fd7cb28873a237748 \
- --hash=sha256:3997b5b3c9a771e157f9aae01dd579ee35ad7109be18db0e85dbdbe1de06e952 \
- --hash=sha256:414802f3b97f3c1eef41e530aaba3b3c1620649871d8cb38c6eaff034c2e16bd \
- --hash=sha256:51c1e14eb1e154ebd80e860722f9e6ed6ec89714ad2db2d3aa33c31d7c12179b \
- --hash=sha256:51c55fe3451421f3a6ef9a9c1439e82101c57a2c9eab9feb196a62b1a10b58ce \
- --hash=sha256:5ee6609ac3604fa7780e30a03e5e241a7956f8e2fcfe547d51e3afa5247ac47f \
- --hash=sha256:612a95a17655e213502f60cfb9bf9408efdc9eb1d5f50535cc6eb365d11b42b5 \
- --hash=sha256:6203fdf9f3dc5bdaed7319ad8698e685c7a3be10819f41d32a0723e611733b42 \
- --hash=sha256:63c0e9e7eea69588479ebf4a8a270d5ac22763cc5854e9a7eae952a3908103f7 \
- --hash=sha256:66f85ce62c70b843bab1fb14a05d5737741e74e28c7b8b5a064de10142fad248 \
- --hash=sha256:6cf9b429b21df6b99f4dee7a1218b8b7ffbbe7df8764dc0bd60ce8a0708fed1e \
- --hash=sha256:70b37199913c1bd300ff6e2693316c6f869c7ee16378faf10e4f5e3275b299c3 \
- --hash=sha256:727fd05b57df37dc0bcf1a27767a3d9a78cbbc92822445f32cc3436ba797337b \
- --hash=sha256:74ae7b798248fe62021dbf3c914245ad45d1a6b0cb4a29ecb4b31d0bfbc4cc3e \
- --hash=sha256:784db1dcdab56bf0517743e746dfb0f885fc68d948aba86eeec2cba234bdf1c0 \
- --hash=sha256:86945f2ee6d10cdfd67bcb4069c1662dd711f7e2a4343db5cecec06b87cf31aa \
- --hash=sha256:86d835afea1eaa143012a2d7a3f45a3adce2d7adc8b4961f0b362214d800846a \
- --hash=sha256:872a5cf366aec6bb1147336480fef14c9164b154aeb6542327de4970282cd2f5 \
- --hash=sha256:8b973c57ff8e184109db042c842423ff4f60446239bd585a5131cc47f06f789d \
- --hash=sha256:8cba086a43d54ca804ce711b2a940b16e452807acebe7852ff327f1ecd49b0d4 \
- --hash=sha256:8f7f0e05112916223d3f438f293abf0727e1181b5983f413dfa2fefc4098245c \
- --hash=sha256:900218e456384ea676e24ea6a0417f030a3b07306d29d7ad843957b40a9d8d52 \
- --hash=sha256:93eebbcf1aafdf7e2ddd44c2923e2672e1010bddc014138b229e49725b4d6be5 \
- --hash=sha256:9c75442b2209b8470d6d5d8b1c25714270686f14c749028d2199c54e29f20b4d \
- --hash=sha256:9ee2197ef8c4f0dfe405d835f3b6a14f5fee7782b5de51ba06fb65fc9b36e9f1 \
- --hash=sha256:a414504bef8945eae5f2d7cb7be2d4af77c5d1cb5e20b296c2c25b61dff2900c \
- --hash=sha256:a4b9159734b326535f4dd01d947f919c6eefd2d9827466a696c44ced82dfbc18 \
- --hash=sha256:a80afd79f45f3c4a7d341f13acbe058d1ca8ac017c165d3fa0d3de6bc1a079d7 \
- --hash=sha256:aa5bc7c5d59d831d9773d1170acac7893ce3a5e130540605770ade83280e7188 \
- --hash=sha256:acfd89508504a19ed06ef963ad544ec6664518c863436306153e13e94605c218 \
- --hash=sha256:aeffcab3d4b43712bb7a60b65f6044d444e75e563ff6180af8f98dd4b905dfd2 \
- --hash=sha256:afaffc4393205524af9dfa400fa250143a6c3bc646c08c9f5e25a9f4b4d6a903 \
- --hash=sha256:b0c7088a73aef3d687c4deef8452a3ac7c1be4e29ed8bf3b366c8111128ac60c \
- --hash=sha256:b46b4ec24f7293f23adcd2d146960559aaf8020213de8ad1909dba6c013bf89c \
- --hash=sha256:b501b5fa195cc9e24fe102f21ec0a44dffc231d2af79950b451e0d99cea02234 \
- --hash=sha256:bf06bc2af43fa8d32d30fae16ad965663e966b1a3202ed407b84c989c3221e82 \
- --hash=sha256:c804e3a5aba5460c73955c955bdbd5c08c354954e9270a2c1565f62e866bdc39 \
- --hash=sha256:c8a9958e88b65c3b27e22ca2a076311636850b612d6bbfb76e8d156aacde2aaf \
- --hash=sha256:cc0a57f895b96ec78969c34f682c602bf8da1a0270b09bc65673df2e7638ec20 \
- --hash=sha256:cc8920d2ec5fa99875b670bb86ddeb21e295cb07aa331810d9e486e0b969d946 \
- --hash=sha256:ccc933afd4d20aad3c00bcef049cb40049f7f196e0397f1109dba6fed63267b0 \
- --hash=sha256:ce581db493ea1a96c0556360ede6607496e8bf9b3a8efa66e06477267bc831e9 \
- --hash=sha256:d0f23b44f57077c1ede8c5f26b30f706498b4862d3ff0a7298b8411dd2f043ff \
- --hash=sha256:d21644de1b609825ede2f48be98dfde4656aefc713654eeee280e37cadc4e0ad \
- --hash=sha256:d6889ec4ec662a1a37eb4b4fb26b6100841804dac55bd9df579e326cdc146227 \
- --hash=sha256:de5672f4a7b200c15a4127042170a694d4df43c992948f5e1af57f0174beed10 \
- --hash=sha256:e6a0bc88393d65807d751a614207b7129a310ca4fe76a74e5c7da5fa5671417e \
- --hash=sha256:ed89927b86296067b4f81f108a2271d8926467a8868e554eaf370fc27fa3ccaf \
- --hash=sha256:ee3888d9ff7c14604052b2ca5535a30216aa0a58e948cdd3eeb8d3415f638769 \
- --hash=sha256:f0963b55cdd70fad460fa4c1341f12f976bb26cb66021a5580329bd498988310 \
- --hash=sha256:f16417ec91f12f814b10bafe79ef77e70113a2f5f7018640e7425ff979253425 \
- --hash=sha256:f28620fe26bee16243be2b7b874da327312240a7cdc38b769a697578d2100013 \
- --hash=sha256:f4255143f5160d0de972d28c8f9665d882b5f61309d8362fdd3e103cf7bf010c \
- --hash=sha256:ffac52f28a7849ad7576293c0cb7b9f08304e8f7d738a8cb8a90ec4c55a998eb \
- --hash=sha256:ffe22d2b05504f786c867c8395de703937f934272eb67586817b46188b4ded6d \
- --hash=sha256:fffe29a1ef00883599d1dc2c51aa2e5d80afe49523c261a74933df395c15c520
+numpy==2.4.0 \
+ --hash=sha256:009bd0ea12d3c784b6639a8457537016ce5172109e585338e11334f6a7bb88ee \
+ --hash=sha256:02a2038eb27f9443a8b266a66911e926566b5a6ffd1a689b588f7f35b81e7dc3 \
+ --hash=sha256:0804a8e4ab070d1d35496e65ffd3cf8114c136a2b81f61dfab0de4b218aacfd5 \
+ --hash=sha256:0feafc9e03128074689183031181fac0897ff169692d8492066e949041096548 \
+ --hash=sha256:1889b3a3f47a7b5bee16bc25a2145bd7cb91897f815ce3499db64c7458b6d91d \
+ --hash=sha256:1d8f9fde5f6dc1b6fc34df8162f3b3079365468703fee7f31d4e0cc8c63baed9 \
+ --hash=sha256:1ee32359fb7543b7b7bd0b2f46294db27e29e7bbdf70541e81b190836cd83ded \
+ --hash=sha256:20c115517513831860c573996e395707aa9fb691eb179200125c250e895fcd93 \
+ --hash=sha256:21555da4ec4a0c942520ead42c3b0dc9477441e085c42b0fbdd6a084869a6f6b \
+ --hash=sha256:23a3e9d1a6f360267e8fbb38ba5db355a6a7e9be71d7fce7ab3125e88bb646c8 \
+ --hash=sha256:2a8b6bb8369abefb8bd1801b054ad50e02b3275c8614dc6e5b0373c305291037 \
+ --hash=sha256:2e284ca13d5a8367e43734148622caf0b261b275673823593e3e3634a6490f83 \
+ --hash=sha256:2f585f52b2baf07ff3356158d9268ea095e221371f1074fadea2f42544d58b4d \
+ --hash=sha256:316b2f2584682318539f0bcaca5a496ce9ca78c88066579ebd11fd06f8e4741e \
+ --hash=sha256:32ed06d0fe9cae27d8fb5f400c63ccee72370599c75e683a6358dd3a4fb50aaf \
+ --hash=sha256:355354388cba60f2132df297e2d53053d4063f79077b67b481d21276d61fc4df \
+ --hash=sha256:35ddc8f4914466e6fc954c76527aa91aa763682a4f6d73249ef20b418fe6effb \
+ --hash=sha256:36667db4d6c1cea79c8930ab72fadfb4060feb4bfe724141cd4bd064d2e5f8ce \
+ --hash=sha256:36cbfb13c152b1c7c184ddac43765db8ad672567e7bafff2cc755a09917ed2e6 \
+ --hash=sha256:39699233bc72dd482da1415dcb06076e32f60eddc796a796c5fb6c5efce94667 \
+ --hash=sha256:39b19251dec4de8ff8496cd0806cbe27bf0684f765abb1f4809554de93785f2d \
+ --hash=sha256:3d857f55e7fdf7c38ab96c4558c95b97d1c685be6b05c249f5fdafcbd6f9899e \
+ --hash=sha256:3de19cfecd1465d0dcf8a5b5ea8b3155b42ed0b639dba4b71e323d74f2a3be5e \
+ --hash=sha256:3f3096405acc48887458bbf9f6814d43785ac7ba2a57ea6442b581dedbc60ce6 \
+ --hash=sha256:40483b2f2d3ba7aad426443767ff5632ec3156ef09742b96913787d13c336471 \
+ --hash=sha256:413aa561266a4be2d06cd2b9665e89d9f54c543f418773076a76adcf2af08bc7 \
+ --hash=sha256:44aba2f0cafd287871a495fb3163408b0bd25bbce135c6f621534a07f4f7875c \
+ --hash=sha256:49ff32b09f5aa0cd30a20c2b39db3e669c845589f2b7fc910365210887e39344 \
+ --hash=sha256:4d1cfce39e511069b11e67cd0bd78ceff31443b7c9e5c04db73c7a19f572967c \
+ --hash=sha256:57c540ed8fb1f05cb997c6761cd56db72395b0d6985e90571ff660452ade4f98 \
+ --hash=sha256:5f48cb3e88fbc294dc90e215d86fbaf1c852c63dbdb6c3a3e63f45c4b57f7344 \
+ --hash=sha256:5fe44e277225fd3dff6882d86d3d447205d43532c3627313d17e754fb3905a0e \
+ --hash=sha256:60e8c196cd82cbbd4f130b5290007e13e6de3eca79f0d4d38014769d96a7c475 \
+ --hash=sha256:65167da969cd1ec3a1df31cb221ca3a19a8aaa25370ecb17d428415e93c1935e \
+ --hash=sha256:680060061adb2d74ce352628cb798cfdec399068aa7f07ba9fb818b2b3305f98 \
+ --hash=sha256:6bbaebf0d11567fa8926215ae731e1d58e6ec28a8a25235b8a47405d301332db \
+ --hash=sha256:6c05483c3136ac4c91b4e81903cb53a8707d316f488124d0398499a4f8e8ef51 \
+ --hash=sha256:6dc8b7e2f4eb184b37655195f421836cfae6f58197b67e3ffc501f1333d993fa \
+ --hash=sha256:6e504f7b16118198f138ef31ba24d985b124c2c469fe8467007cf30fd992f934 \
+ --hash=sha256:74623f2ab5cc3f7c886add4f735d1031a1d2be4a4ae63c0546cfd74e7a31ddf6 \
+ --hash=sha256:77f0d13fa87036d7553bf81f0e1fe3ce68d14c9976c9851744e4d3e91127e95f \
+ --hash=sha256:85eef4cb5625c47ee6425c58a3502555e10f45ee973da878ac8248ad58c136f3 \
+ --hash=sha256:882567b7ae57c1b1a0250208cc21a7976d8cbcc49d5a322e607e6f09c9e0bd53 \
+ --hash=sha256:8b986403023c8f3bf8f487c2e6186afda156174d31c175f747d8934dfddf3479 \
+ --hash=sha256:8cfa5f29a695cb7438965e6c3e8d06e0416060cf0d709c1b1c1653a939bf5c2a \
+ --hash=sha256:8eafe7c36c8430b7794edeab3087dec7bf31d634d92f2af9949434b9d1964cba \
+ --hash=sha256:9198f447e1dc5647d07c9a6bbe2063cc0132728cc7175b39dbc796da5b54920d \
+ --hash=sha256:92190db305a6f48734d3982f2c60fa30d6b5ee9bff10f2887b930d7b40119f4c \
+ --hash=sha256:927ccf5cd17c48f801f4ed43a7e5673a2724bd2171460be3e3894e6e332ef83a \
+ --hash=sha256:98e81648e0b36e325ab67e46b5400a7a6d4a22b8a7c8e8bbfe20e7db7906bf95 \
+ --hash=sha256:9a818668b674047fd88c4cddada7ab8f1c298812783e8328e956b78dc4807f9f \
+ --hash=sha256:a152d86a3ae00ba5f47b3acf3b827509fd0b6cb7d3259665e63dafbad22a75ea \
+ --hash=sha256:a2718c1de8504121714234b6f8241d0019450353276c88b9453c9c3d92e101db \
+ --hash=sha256:a39fb973a726e63223287adc6dafe444ce75af952d711e400f3bf2b36ef55a7b \
+ --hash=sha256:a899699294f28f7be8992853c0c60741f16ff199205e2e6cdca155762cbaa59d \
+ --hash=sha256:a8fdfed3deaf1928fb7667d96e0567cdf58c2b370ea2ee7e586aa383ec2cb346 \
+ --hash=sha256:aabb081ca0ec5d39591fc33018cd4b3f96e1a2dd6756282029986d00a785fba4 \
+ --hash=sha256:b1f5b45829ac1848893f0ddf5cb326110604d6df96cdc255b0bf9edd154104d4 \
+ --hash=sha256:b48e35f4ab6f6a7597c46e301126ceba4c44cd3280e3750f85db48b082624fa4 \
+ --hash=sha256:b54c83f1c0c0f1d748dca0af516062b8829d53d1f0c402be24b4257a9c48ada6 \
+ --hash=sha256:ba0cb30acd3ef11c94dc27fbfba68940652492bc107075e7ffe23057f9425681 \
+ --hash=sha256:bb50ce5fb202a26fd5404620e7ef820ad1ab3558b444cb0b55beb7ef66cd2d63 \
+ --hash=sha256:c95eb6db2884917d86cde0b4d4cf31adf485c8ec36bf8696dd66fa70de96f36b \
+ --hash=sha256:d0ffd9e2e4441c96a9c91ec1783285d80bf835b677853fc2770a89d50c1e48ac \
+ --hash=sha256:d57b5046c120561ba8fa8e4030fbb8b822f3063910fa901ffadf16e2b7128ad6 \
+ --hash=sha256:d9e6a7664ddd9746e20b7325351fe1a8408d0a2bf9c63b5e898290ddc8f09544 \
+ --hash=sha256:dc578891de1db95b2a35001b695451767b580bb45753717498213c5ff3c41d63 \
+ --hash=sha256:e0434aa22c821f44eeb4c650b81c7fbdd8c0122c6c4b5a576a76d5a35625ecd9 \
+ --hash=sha256:e06a922a469cae9a57100864caf4f8a97a1026513793969f8ba5b63137a35d25 \
+ --hash=sha256:e493962256a38f58283de033d8af176c5c91c084ea30f15834f7545451c42059 \
+ --hash=sha256:ecb0019d44f4cdb50b676c5d0cb4b1eae8e15d1ed3d3e6639f986fc92b2ec52c \
+ --hash=sha256:f935c4493eda9069851058fa0d9e39dbf6286be690066509305e52912714dbb2
# via
# feast (setup.py)
# dask
@@ -1778,9 +1776,9 @@ pandas==2.3.3 \
# pandas-gbq
# pymilvus
# snowflake-connector-python
-pandas-gbq==0.31.1 \
- --hash=sha256:a5d6e897917302c50feaca2ed1ce6a284abd8b9139383bf063307aab8d0556d9 \
- --hash=sha256:c59878504adee211cf1c34b22cf94393c59cc953626c61ce76e06c8d25fd146d
+pandas-gbq==0.32.0 \
+ --hash=sha256:249623d574c65e98cf19b7b7ecda97729f4f0a843eae3a0a82d9ef50adcdf4ef \
+ --hash=sha256:28018ff09f2e49ab2b01a11329bd4e562fd65da406030b4a8001a3a4e80a1e34
# via google-cloud-bigquery
parsy==2.2 \
--hash=sha256:5e981613d9d2d8b68012d1dd0afe928967bea2e4eefdb76c2f545af0dd02a9e7 \
@@ -1928,9 +1926,9 @@ propcache==0.4.1 \
# via
# aiohttp
# yarl
-proto-plus==1.26.1 \
- --hash=sha256:13285478c2dcf2abb829db158e1047e2f1e8d63a077d94263c2b88b043c75a66 \
- --hash=sha256:21a515a4c4c0088a773899e23c7bbade3d18f9c66c73edd4c7ee3816bc96a012
+proto-plus==1.27.0 \
+ --hash=sha256:1baa7f81cf0f8acb8bc1f6d085008ba4171eaf669629d1b6d1673b21ed1c0a82 \
+ --hash=sha256:873af56dd0d7e91836aee871e5799e1c6f1bda86ac9a983e0bb9f0c266a568c4
# via
# google-api-core
# google-cloud-bigquery-storage
@@ -1960,26 +1958,28 @@ protobuf==6.33.2 \
# grpcio-status
# proto-plus
# pymilvus
-psutil==7.1.3 \
- --hash=sha256:0005da714eee687b4b8decd3d6cc7c6db36215c9e74e5ad2264b90c3df7d92dc \
- --hash=sha256:1068c303be3a72f8e18e412c5b2a8f6d31750fb152f9cb106b54090296c9d251 \
- --hash=sha256:18349c5c24b06ac5612c0428ec2a0331c26443d259e2a0144a9b24b4395b58fa \
- --hash=sha256:19644c85dcb987e35eeeaefdc3915d059dac7bd1167cdcdbf27e0ce2df0c08c0 \
- --hash=sha256:2bdbcd0e58ca14996a42adf3621a6244f1bb2e2e528886959c72cf1e326677ab \
- --hash=sha256:31d77fcedb7529f27bb3a0472bea9334349f9a04160e8e6e5020f22c59893264 \
- --hash=sha256:3792983e23b69843aea49c8f5b8f115572c5ab64c153bada5270086a2123c7e7 \
- --hash=sha256:3bb428f9f05c1225a558f53e30ccbad9930b11c3fc206836242de1091d3e7dd3 \
- --hash=sha256:56d974e02ca2c8eb4812c3f76c30e28836fffc311d55d979f1465c1feeb2b68b \
- --hash=sha256:6c86281738d77335af7aec228328e944b30930899ea760ecf33a4dba66be5e74 \
- --hash=sha256:8f33a3702e167783a9213db10ad29650ebf383946e91bc77f28a5eb083496bc9 \
- --hash=sha256:95ef04cf2e5ba0ab9eaafc4a11eaae91b44f4ef5541acd2ee91d9108d00d59a7 \
- --hash=sha256:ad81425efc5e75da3f39b3e636293360ad8d0b49bed7df824c79764fb4ba9b8b \
- --hash=sha256:b403da1df4d6d43973dc004d19cee3b848e998ae3154cc8097d139b77156c353 \
- --hash=sha256:bc31fa00f1fbc3c3802141eede66f3a2d51d89716a194bf2cd6fc68310a19880 \
- --hash=sha256:bd0d69cee829226a761e92f28140bec9a5ee9d5b4fb4b0cc589068dbfff559b1 \
- --hash=sha256:c525ffa774fe4496282fb0b1187725793de3e7c6b29e41562733cae9ada151ee \
- --hash=sha256:f39c2c19fe824b47484b96f9692932248a54c43799a84282cfe58d05a6449efd \
- --hash=sha256:fac9cd332c67f4422504297889da5ab7e05fd11e3c4392140f7370f4208ded1f
+psutil==7.2.1 \
+ --hash=sha256:05cc68dbb8c174828624062e73078e7e35406f4ca2d0866c272c2410d8ef06d1 \
+ --hash=sha256:08a2f175e48a898c8eb8eace45ce01777f4785bc744c90aa2cc7f2fa5462a266 \
+ --hash=sha256:0d67c1822c355aa6f7314d92018fb4268a76668a536f133599b91edd48759442 \
+ --hash=sha256:2ceae842a78d1603753561132d5ad1b2f8a7979cb0c283f5b52fb4e6e14b1a79 \
+ --hash=sha256:35630d5af80d5d0d49cfc4d64c1c13838baf6717a13effb35869a5919b854cdf \
+ --hash=sha256:3fce5f92c22b00cdefd1645aa58ab4877a01679e901555067b1bd77039aa589f \
+ --hash=sha256:494c513ccc53225ae23eec7fe6e1482f1b8a44674241b54561f755a898650679 \
+ --hash=sha256:5e38404ca2bb30ed7267a46c02f06ff842e92da3bb8c5bfdadbd35a5722314d8 \
+ --hash=sha256:81442dac7abfc2f4f4385ea9e12ddf5a796721c0f6133260687fec5c3780fa49 \
+ --hash=sha256:923f8653416604e356073e6e0bccbe7c09990acef442def2f5640dd0faa9689f \
+ --hash=sha256:93f3f7b0bb07711b49626e7940d6fe52aa9940ad86e8f7e74842e73189712129 \
+ --hash=sha256:99a4cd17a5fdd1f3d014396502daa70b5ec21bf4ffe38393e152f8e449757d67 \
+ --hash=sha256:ab2b98c9fc19f13f59628d94df5cc4cc4844bc572467d113a8b517d634e362c6 \
+ --hash=sha256:b1b0671619343aa71c20ff9767eced0483e4fc9e1f489d50923738caf6a03c17 \
+ --hash=sha256:b2e953fcfaedcfbc952b44744f22d16575d3aa78eb4f51ae74165b4e96e55f42 \
+ --hash=sha256:ba9f33bb525b14c3ea563b2fd521a84d2fa214ec59e3e6a2858f78d0844dd60d \
+ --hash=sha256:cfbe6b40ca48019a51827f20d830887b3107a74a79b01ceb8cc8de4ccb17b672 \
+ --hash=sha256:d34d2ca888208eea2b5c68186841336a7f5e0b990edec929be909353a202768a \
+ --hash=sha256:ea46c0d060491051d39f0d2cff4f98d5c72b288289f57a21556cc7d504db37fc \
+ --hash=sha256:f7583aec590485b43ca601dd9cea0dcd65bd7bb21d30ef4ddbf4ea6b5ed1bdd3 \
+ --hash=sha256:f78baafb38436d5a128f837fab2d92c276dfb48af01a240b861ae02b2413ada8
# via
# feast (setup.py)
# pandas-gbq
@@ -2241,9 +2241,9 @@ python-dotenv==1.2.1 \
# pydantic-settings
# pymilvus
# uvicorn
-python-multipart==0.0.20 \
- --hash=sha256:8a62d3a8335e06589fe01f2a3e178cdcc632f3fbe0d492ad9ee0ec35aab1f104 \
- --hash=sha256:8dd0cab45b8e23064ae09147625994d090fa46f5b0d1e13af944c331a7fa9d13
+python-multipart==0.0.21 \
+ --hash=sha256:7137ebd4d3bbf70ea1622998f902b97a29434a9e8dc40eb203bbcf7c2a2cba92 \
+ --hash=sha256:cf7a6713e01c87aa35387f4774e812c4361150938d20d232800f75ffcf266090
# via mcp
pytz==2025.2 \
--hash=sha256:360b9e3dbb49a209c21ad61809c7fb453643e048b38924c765813546746e81c3 \
@@ -2555,12 +2555,14 @@ sqlalchemy[mypy]==2.0.45 \
--hash=sha256:1d8b4a7a8c9b537509d56d5cd10ecdcfbb95912d72480c8861524efecc6a3fff \
--hash=sha256:215f0528b914e5c75ef2559f69dca86878a3beeb0c1be7279d77f18e8d180ed4 \
--hash=sha256:2c0b74aa79e2deade948fe8593654c8ef4228c44ba862bb7c9585c8e0db90f33 \
+ --hash=sha256:2e90a344c644a4fa871eb01809c32096487928bd2038bf10f3e4515cb688cc56 \
--hash=sha256:3c5f76216e7b85770d5bb5130ddd11ee89f4d52b11783674a662c7dd57018177 \
--hash=sha256:470daea2c1ce73910f08caf10575676a37159a6d16c4da33d0033546bddebc9b \
--hash=sha256:4748601c8ea959e37e03d13dcda4a44837afcd1b21338e637f7c935b8da06177 \
--hash=sha256:4b6bec67ca45bc166c8729910bd2a87f1c0407ee955df110d78948f5b5827e8a \
--hash=sha256:5225a288e4c8cc2308dbdd874edad6e7d0fd38eac1e9e5f23503425c8eee20d0 \
--hash=sha256:56ead1f8dfb91a54a28cd1d072c74b3d635bcffbd25e50786533b822d4f2cde2 \
+ --hash=sha256:5964f832431b7cdfaaa22a660b4c7eb1dfcd6ed41375f67fd3e3440fd95cb3cc \
--hash=sha256:59a8b8bd9c6bedf81ad07c8bd5543eedca55fe9b8780b2b628d495ba55f8db1e \
--hash=sha256:672c45cae53ba88e0dad74b9027dddd09ef6f441e927786b05bec75d949fbb2e \
--hash=sha256:6d0beadc2535157070c9c17ecf25ecec31e13c229a8f69196d7590bde8082bf1 \
@@ -2579,7 +2581,9 @@ sqlalchemy[mypy]==2.0.45 \
--hash=sha256:b8c8b41b97fba5f62349aa285654230296829672fc9939cd7f35aab246d1c08b \
--hash=sha256:ba547ac0b361ab4f1608afbc8432db669bd0819b3e12e29fb5fa9529a8bba81d \
--hash=sha256:c1c2091b1489435ff85728fafeb990f073e64f6f5e81d5cd53059773e8521eb6 \
+ --hash=sha256:c64772786d9eee72d4d3784c28f0a636af5b0a29f3fe26ff11f55efe90c0bd85 \
--hash=sha256:cd337d3526ec5298f67d6a30bbbe4ed7e5e68862f0bf6dd21d289f8d37b7d60b \
+ --hash=sha256:d29b2b99d527dbc66dd87c3c3248a5dd789d974a507f4653c969999fc7c1191b \
--hash=sha256:d2c3684fca8a05f0ac1d9a21c1f4a266983a7ea9180efb80ffeb03861ecd01a0 \
--hash=sha256:d62e47f5d8a50099b17e2bfc1b0c7d7ecd8ba6b46b1507b58cc4f05eefc3bb1c \
--hash=sha256:d8a2ca754e5415cde2b656c27900b19d50ba076aa05ce66e2207623d3fe41f5a \
@@ -2597,9 +2601,9 @@ sqlglot==25.20.2 \
--hash=sha256:169fe8308dd70d7bd40117b2221b62bdc7c4e2ea8eb07394b2a6146cdedf05ab \
--hash=sha256:cdbfd7ce3f2f39f32bd7b4c23fd9e0fd261636a6b14285b914e8def25fd0a567
# via ibis-framework
-sse-starlette==3.0.3 \
- --hash=sha256:88cfb08747e16200ea990c8ca876b03910a23b547ab3bd764c0d8eb81019b971 \
- --hash=sha256:af5bf5a6f3933df1d9c7f8539633dc8444ca6a97ab2e2a7cd3b6e431ac03a431
+sse-starlette==3.1.1 \
+ --hash=sha256:bb38f71ae74cfd86b529907a9fda5632195dfa6ae120f214ea4c890c7ee9d436 \
+ --hash=sha256:bffa531420c1793ab224f63648c059bcadc412bf9fdb1301ac8de1cf9a67b7fb
# via mcp
starlette==0.50.0 \
--hash=sha256:9e5391843ec9b6e472eed1365a78c8098cfceb7a74bfd4d6b1c0c0095efb3bca \
@@ -2607,6 +2611,7 @@ starlette==0.50.0 \
# via
# fastapi
# mcp
+ # sse-starlette
tabulate==0.9.0 \
--hash=sha256:0095b12bf5966de529c0feb1fa08671671b3368eec77d7ef7ab114be2c068b3c \
--hash=sha256:024ca478df22e9340661486f85298cff5f6dcdba14f3813e8830015b9ed1948f
@@ -2684,13 +2689,13 @@ typeguard==4.4.4 \
--hash=sha256:3a7fd2dffb705d4d0efaed4306a704c89b9dee850b688f060a8b1615a79e5f74 \
--hash=sha256:b5f562281b6bfa1f5492470464730ef001646128b180769880468bd84b68b09e
# via feast (setup.py)
-typer==0.20.0 \
- --hash=sha256:1aaf6494031793e4876fb0bacfa6a912b551cf43c1e63c800df8b1a866720c37 \
- --hash=sha256:5b463df6793ec1dca6213a3cf4c0f03bc6e322ac5e16e13ddd622a889489784a
+typer==0.21.0 \
+ --hash=sha256:c79c01ca6b30af9fd48284058a7056ba0d3bf5cf10d0ff3d0c5b11b68c258ac6 \
+ --hash=sha256:c87c0d2b6eee3b49c5c64649ec92425492c14488096dfbc8a0c2799b2f6f9c53
# via fastapi-mcp
-types-pymysql==1.1.0.20250916 \
- --hash=sha256:873eb9836bb5e3de4368cc7010ca72775f86e9692a5c7810f8c7f48da082e55b \
- --hash=sha256:98d75731795fcc06723a192786662bdfa760e1e00f22809c104fbb47bac5e29b
+types-pymysql==1.1.0.20251220 \
+ --hash=sha256:ae1c3df32a777489431e2e9963880a0df48f6591e0aa2fd3a6fabd9dee6eca54 \
+ --hash=sha256:fa1082af7dea6c53b6caa5784241924b1296ea3a8d3bd060417352c5e10c0618
# via feast (setup.py)
typing-extensions==4.15.0 \
--hash=sha256:0cea48d173cc12fa28ecabc3b837ea3cf6f38c6d1136f85cbaaf598984861466 \
@@ -2721,9 +2726,9 @@ typing-inspection==0.4.2 \
# mcp
# pydantic
# pydantic-settings
-tzdata==2025.2 \
- --hash=sha256:1a403fada01ff9221ca8044d701868fa132215d84beb92242d9acd2147f667a8 \
- --hash=sha256:b60a638fcc0daffadf82fe0f57e53d06bdec2f36c4df66280ae79bce6bd6f2b9
+tzdata==2025.3 \
+ --hash=sha256:06a47e5700f3081aab02b2e513160914ff0694bce9947d6b76ebd6bf57cfc5d1 \
+ --hash=sha256:de39c2ca5dc7b0344f2eba86f49d614019d29f060fc4ebc8a417896a620b56a7
# via pandas
ujson==5.11.0 \
--hash=sha256:0180a480a7d099082501cad1fe85252e4d4bf926b40960fb3d9e87a3a6fbbc80 \
@@ -2811,9 +2816,9 @@ ujson==5.11.0 \
--hash=sha256:fa79fdb47701942c2132a9dd2297a1a85941d966d8c87bfd9e29b0cf423f26cc \
--hash=sha256:fac6c0649d6b7c3682a0a6e18d3de6857977378dce8d419f57a0b20e3d775b39
# via pymilvus
-urllib3==2.6.1 \
- --hash=sha256:5379eb6e1aba4088bae84f8242960017ec8d8e3decf30480b3a1abdaa9671a3f \
- --hash=sha256:e67d06fe947c36a7ca39f4994b08d73922d40e6cca949907be05efa6fd75110b
+urllib3==2.6.2 \
+ --hash=sha256:016f9c98bb7e98085cb2b4b17b87d2c702975664e4f060c6532e64d1c1a5e797 \
+ --hash=sha256:ec21cddfe7724fc7cb4ba4bea7aa8e2ef36f607a4bab81aa6ce42a13dc3f03dd
# via
# botocore
# kubernetes
diff --git a/sdk/python/requirements/py3.11-minimal-sdist-requirements-build.txt b/sdk/python/requirements/py3.11-minimal-sdist-requirements-build.txt
index 08b3ebd9c79..beaafd3e5fd 100644
--- a/sdk/python/requirements/py3.11-minimal-sdist-requirements-build.txt
+++ b/sdk/python/requirements/py3.11-minimal-sdist-requirements-build.txt
@@ -97,7 +97,9 @@ cffi==2.0.0 \
coherent-licensed==0.5.2 \
--hash=sha256:d8071403ce742d3ac3592ddc4fb7057a46caffb415b928b4d52802e5f208416d \
--hash=sha256:edccc5193ca2786f8fb3f0c7374637a143985f781f7eaa21aca3af2bd634b82f
- # via zipp
+ # via
+ # importlib-metadata
+ # zipp
cython==3.0.12 \
--hash=sha256:0038c9bae46c459669390e53a1ec115f8096b2e4647ae007ff1bf4e6dee92806 \
--hash=sha256:0faa5e39e5c8cdf6f9c3b1c3f24972826e45911e7f5b99cf99453fca5432f45e \
@@ -170,46 +172,46 @@ cython==3.0.12 \
# pyyaml
# snowflake-connector-python
# sqlalchemy
-cython==3.2.2 \
- --hash=sha256:034ab96cb8bc8e7432bc27491f8d66f51e435b1eb21ddc03aa844be8f21ad847 \
- --hash=sha256:098590c1dc309f8a0406ade031963a95a87714296b425539f9920aebf924560d \
- --hash=sha256:0e35ff0f1bb3a7a5c40afb8fb540e4178b6551909f10748bf39d323f8140ccf3 \
- --hash=sha256:13b99ecb9482aff6a6c12d1ca6feef6940c507af909914b49f568de74fa965fb \
- --hash=sha256:14432d7f207245a3c35556155873f494784169297b28978a6204f1c60d31553e \
- --hash=sha256:177faf4d61e9f2d4d2db61194ac9ec16d3fe3041c1b6830f871a01935319eeb3 \
- --hash=sha256:2b910b89a2a71004064c5e890b9512a251eda63fae252caa0feb9835057035f9 \
- --hash=sha256:3de43a5786033a27fae1c882feb5ff0d023c38b83356e6800c1be0bcd6cf9f11 \
- --hash=sha256:436eb562d0affbc0b959f62f3f9c1ed251b9499e4f29c1d19514ae859894b6bf \
- --hash=sha256:50bbaabee733fd2780985e459fc20f655e02def83e8eff10220ad88455a34622 \
- --hash=sha256:5f818d40bbcf17e2089e2de7840f0de1c0ca527acf9b044aba79d5f5d8a5bdba \
- --hash=sha256:60f4aa425e1ff98abf8d965ae7020f06dd2cbc01dbd945137d2f9cca4ff0524a \
- --hash=sha256:692a41c8fe06fb2dc55ca2c8d71c80c469fd16fe69486ed99f3b3cbb2d3af83f \
- --hash=sha256:820c4a99dbf6b3e6c0300be42b4040b501eff0e1feeb80cfa52c48a346fb0df2 \
- --hash=sha256:826cad0ad43ab05a26e873b5d625f64d458dc739ec6fdeecab848b60a91c4252 \
- --hash=sha256:86b1d39a1ea974dd16fe3bcef0df7b64dadd0bd38d05a339f287b48d37cb109f \
- --hash=sha256:8c9265b3e84ae2d999b7c3165c683e366bbbbbe4346468055ca2366fe013f2df \
- --hash=sha256:8db28aef793c81dc69383b619ca508668998aaf099cd839d3cbae85184cce744 \
- --hash=sha256:8e72ee88a9a5381d30a6da116a3c8352730b9b038a49ed9bc5c3d0ed6d69b06c \
- --hash=sha256:9cd2ede6af225499ad22888dbfb13b92d71fc1016f401ee637559a5831b177c2 \
- --hash=sha256:a3898c076e9c458bcb3e4936187919fda5f5365fe4c567d35d2b003444b6f3fe \
- --hash=sha256:a473df474ba89e9fee81ee82b31062a267f9e598096b222783477e56d02ad12c \
- --hash=sha256:a6387e3ad31342443916db9a419509935fddd8d4cbac34aab9c895ae55326a56 \
- --hash=sha256:a9509f1e9c41c86b790cff745bb31927bbc861662a3b462596d71d3d2a578abb \
- --hash=sha256:aa24cd0bdab27ca099b2467806c684404add597c1108e07ddf7b6471653c85d7 \
- --hash=sha256:aff11412ed5fc78bd8b148621f4d1034fcad6cfcba468c20cd9f327b4f61ec3e \
- --hash=sha256:b223c1f84c3420c24f6a4858e979524bd35a79437a5839e29d41201c87ed119d \
- --hash=sha256:b4df52101209817fde7284cf779156f79142fb639b1d7840f11680ff4bb30604 \
- --hash=sha256:b4fe499eed7cd70b2aa4e096b9ce2588f5e6fdf049b46d40a5e55efcde6e4904 \
- --hash=sha256:b5afac4e77e71a9010dc7fd3191ced00f9b12b494dd7525c140781054ce63a73 \
- --hash=sha256:c3add3d483acc73129a61d105389344d792c17e7c1cee24863f16416bd071634 \
- --hash=sha256:ca18d9d53c0e2f0c9347478b37532b46e0dc34c704e052ab1b0d8b21a290fc0f \
- --hash=sha256:d140c2701cbb8cf960300cf1b67f3b4fa9d294d32e51b85f329bff56936a82fd \
- --hash=sha256:d7b3447b2005dffc5f276d420a480d2b57d15091242652d410b6a46fb00ed251 \
- --hash=sha256:d8c93fe128b58942832b1fcac96e48f93c2c69b569eff0d38d30fb5995fecfa0 \
- --hash=sha256:e7200309b81f4066cf36a96efeec646716ca74afd73d159045169263db891133 \
- --hash=sha256:f560ff3aea5b5df93853ec7bf1a1e9623d6d511f4192f197559aca18fca43392 \
- --hash=sha256:fed44d0ab2d36f1b0301c770b0dafec23bcb9700d58e7769cd6d9136b3304c11 \
- --hash=sha256:ff07e784ea748225bbdea07fec0ac451379e9e41a0a84cb57b36db19dd01ae71
+cython==3.2.3 \
+ --hash=sha256:0145e64485f0a9741c9314ae176282dffeb48d2ef30ae315d7224698867c317f \
+ --hash=sha256:06a1317097f540d3bb6c7b81ed58a0d8b9dbfa97abf39dfd4c22ee87a6c7241e \
+ --hash=sha256:0a75a04688875b275a6c875565e672325bae04327dd6ec2fc25aeb5c6cf82fce \
+ --hash=sha256:1309bdce06f767e8514377f44b3a5b9e5b91e58af1348010cca10b572e1852ad \
+ --hash=sha256:18b5e738c9dbb1cb488b51e35c3a1b9aa7363166cce40158fe6ccb454f6498ac \
+ --hash=sha256:18edc858e6a52de47fe03ffa97ea14dadf450e20069de0a8aef531006c4bbd93 \
+ --hash=sha256:1d097ad4686b58b8c03d760d08eca28f79878d404ef7452c49636170571654e0 \
+ --hash=sha256:228f11be8406015d1ce84a25bf4f96167ff6fc18b834deca5716d95ae15a818c \
+ --hash=sha256:22a624290c2883387b2c2cfb5224c15bff21432c6a2cf0c23ac8df3dcbd45e96 \
+ --hash=sha256:25732f3981a93407826297f4423206e5e22c3cfccfc74e37bf444453bbdc076f \
+ --hash=sha256:26404441f733fd1cfb0dd9c45477f501437e7d51fad05bb402bd2feb4e127aa3 \
+ --hash=sha256:283262b8f902323ceb6ed3b643f275a2a963e7ab059f0714a467933383cbc56d \
+ --hash=sha256:2a18f2e3bcd018416157d0a83446e29b4a31437ab79061fe5504c077e70389d0 \
+ --hash=sha256:3141734fb15f8b5e9402b9240f8da8336edecae91742b41c85678c31ab68f66d \
+ --hash=sha256:3829f99d611412288f44ff543e9d2b5c0c83274998b2a6680bbe5cca3539c1fd \
+ --hash=sha256:4f40efa83c93060a271046930d2322ec045abb9722d25a377702cb57aa823c2b \
+ --hash=sha256:51fd1a56d0fc682c05ecc44f11927dbe28dd2867c30148557b62d7d1017a13d8 \
+ --hash=sha256:55c0157a5940fbf0b054508207fe0fc5cc796d0532af492c0fa35b5b41a883f7 \
+ --hash=sha256:60d19376252722241a3d3ec8a695c5cae4deb053486d2e5f9a40cb569a0cf984 \
+ --hash=sha256:6b01b36c9eb1b68c25bddbeef7379f7bfc37f7c9afc044e71840ffab761a2dd0 \
+ --hash=sha256:6b6dd6b7aca8447b2a6779b314cc402f1e4990754507a88477e535b3c8b41ad1 \
+ --hash=sha256:73afc824896ffaf22bf8122d0a7107f0120e3188a353bdcfa92317fc0d9a87ce \
+ --hash=sha256:74f482da8b605c61b4df6ff716d013f20131949cb2fa59b03e63abd36ef5bac0 \
+ --hash=sha256:80f20369d7aaf4e76cfef902025256918a5cc6eb0aed6d8783e4b1c563e4f6c4 \
+ --hash=sha256:84330e7c8bf220a82b633678b9f99e10227c8f4c406d67c5552449ab2afedef8 \
+ --hash=sha256:9a24cc653fad3adbd9cbaa638d80df3aa08a1fe27f62eb35850971c70be680df \
+ --hash=sha256:9aa1a8abf3d8bb53cc19cfaa21c004afad8d4ccb17513f8aa11a788d1f525abd \
+ --hash=sha256:9c5ac7201d8382c0da69e4a119c14be6acd7c286615a0383ffbd1dbfdbaa3df7 \
+ --hash=sha256:b39dff92db70cbd95528f3b81d70e06bd6d3fc9c1dd91321e4d3b999ece3bceb \
+ --hash=sha256:c041f7e338cca2422e0924716b04fabeda57636214324fc1941396acce99e7c7 \
+ --hash=sha256:c102388cf7604ff5647164d5041fd5de2393198a87883fdb50f6c078fc2f4f8e \
+ --hash=sha256:c2365a0c79ab9c0fa86d30a4a6ba7e37fc1be9537c48b79b9d63ee7e08bf2fef \
+ --hash=sha256:cf210228c15b5c625824d8e31d43b6fea25f9e13c81dac632f2f7d838e0229a5 \
+ --hash=sha256:d1f8700ba89c977438744f083890d87187f15709507a5489e0f6d682053b7fa0 \
+ --hash=sha256:e31f52ea7e35463b21410f150006eb07b663a0b3ceea8ee8f35e0b8e02b75f50 \
+ --hash=sha256:e4293f1861480b397809a6f021a6c12e15e918feae1c7add80c99d07af206578 \
+ --hash=sha256:f13832412d633376ffc08d751cc18ed0d7d00a398a4065e2871db505258748a6 \
+ --hash=sha256:f5bf0cebeb4147e172a114437d3fce5a507595d8fdd821be792b1bb25c691514 \
+ --hash=sha256:fabe2f37acb63a5521d16193effb15acd082e35458f30f1c1f3e506271fee8a7
# via uvloop
dunamai==1.25.0 \
--hash=sha256:7f9dc687dd3256e613b6cc978d9daabfd2bb5deb8adc541fc135ee423ffa98ab \
@@ -326,83 +328,83 @@ jinja2==3.1.6 \
# via
# poetry-dynamic-versioning
# uv-dynamic-versioning
-librt==0.7.3 \
- --hash=sha256:020c6db391268bcc8ce75105cb572df8cb659a43fd347366aaa407c366e5117a \
- --hash=sha256:0fa9ac2e49a6bee56e47573a6786cb635e128a7b12a0dc7851090037c0d397a3 \
- --hash=sha256:11ad45122bbed42cfc8b0597450660126ef28fd2d9ae1a219bc5af8406f95678 \
- --hash=sha256:120dd21d46ff875e849f1aae19346223cf15656be489242fe884036b23d39e93 \
- --hash=sha256:14569ac5dd38cfccf0a14597a88038fb16811a6fede25c67b79c6d50fc2c8fdc \
- --hash=sha256:1617bea5ab31266e152871208502ee943cb349c224846928a1173c864261375e \
- --hash=sha256:170cdb8436188347af17bf9cccf3249ba581c933ed56d926497119d4cf730cec \
- --hash=sha256:1975eda520957c6e0eb52d12968dd3609ffb7eef05d4223d097893d6daf1d8a7 \
- --hash=sha256:1fe603877e1865b5fd047a5e40379509a4a60204aa7aa0f72b16f7a41c3f0712 \
- --hash=sha256:24d70810f6e2ea853ff79338001533716b373cc0f63e2a0be5bc96129edb5fb5 \
- --hash=sha256:256793988bff98040de23c57cf36e1f4c2f2dc3dcd17537cdac031d3b681db71 \
- --hash=sha256:25711f364c64cab2c910a0247e90b51421e45dbc8910ceeb4eac97a9e132fc6f \
- --hash=sha256:2682162855a708e3270eba4b92026b93f8257c3e65278b456c77631faf0f4f7a \
- --hash=sha256:2cf9d73499486ce39eebbff5f42452518cc1f88d8b7ea4a711ab32962b176ee2 \
- --hash=sha256:2e40520c37926166c24d0c2e0f3bc3a5f46646c34bdf7b4ea9747c297d6ee809 \
- --hash=sha256:2e980cf1ed1a2420a6424e2ed884629cdead291686f1048810a817de07b5eb18 \
- --hash=sha256:2f03484b54bf4ae80ab2e504a8d99d20d551bfe64a7ec91e218010b467d77093 \
- --hash=sha256:35f1609e3484a649bb80431310ddbec81114cd86648f1d9482bc72a3b86ded2e \
- --hash=sha256:399938edbd3d78339f797d685142dd8a623dfaded023cf451033c85955e4838a \
- --hash=sha256:399bbd7bcc1633c3e356ae274a1deb8781c7bf84d9c7962cc1ae0c6e87837292 \
- --hash=sha256:3ec50cf65235ff5c02c5b747748d9222e564ad48597122a361269dd3aa808798 \
- --hash=sha256:3edbf257c40d21a42615e9e332a6b10a8bacaaf58250aed8552a14a70efd0d65 \
- --hash=sha256:440c788f707c061d237c1e83edf6164ff19f5c0f823a3bf054e88804ebf971ec \
- --hash=sha256:44b3689b040df57f492e02cd4f0bacd1b42c5400e4b8048160c9d5e866de8abe \
- --hash=sha256:4887c29cadbdc50640179e3861c276325ff2986791e6044f73136e6e798ff806 \
- --hash=sha256:5460d99ed30f043595bbdc888f542bad2caeb6226b01c33cda3ae444e8f82d42 \
- --hash=sha256:550fdbfbf5bba6a2960b27376ca76d6aaa2bd4b1a06c4255edd8520c306fcfc0 \
- --hash=sha256:56f2a47beda8409061bc1c865bef2d4bd9ff9255219402c0817e68ab5ad89aed \
- --hash=sha256:572a24fc5958c61431da456a0ef1eeea6b4989d81eeb18b8e5f1f3077592200b \
- --hash=sha256:59cb0470612d21fa1efddfa0dd710756b50d9c7fb6c1236bbf8ef8529331dc70 \
- --hash=sha256:6038ccbd5968325a5d6fd393cf6e00b622a8de545f0994b89dd0f748dcf3e19e \
- --hash=sha256:6488e69d408b492e08bfb68f20c4a899a354b4386a446ecd490baff8d0862720 \
- --hash=sha256:687403cced6a29590e6be6964463835315905221d797bc5c934a98750fe1a9af \
- --hash=sha256:6b407c23f16ccc36614c136251d6b32bf30de7a57f8e782378f1107be008ddb0 \
- --hash=sha256:6b4e7bff1d76dd2b46443078519dc75df1b5e01562345f0bb740cea5266d8218 \
- --hash=sha256:6bdd9adfca615903578d2060ee8a6eb1c24eaf54919ff0ddc820118e5718931b \
- --hash=sha256:6eb9295c730e26b849ed1f4022735f36863eb46b14b6e10604c1c39b8b5efaea \
- --hash=sha256:703456146dc2bf430f7832fd1341adac5c893ec3c1430194fdcefba00012555c \
- --hash=sha256:754a0d09997095ad764ccef050dd5bf26cbf457aab9effcba5890dad081d879e \
- --hash=sha256:7af7785f5edd1f418da09a8cdb9ec84b0213e23d597413e06525340bcce1ea4f \
- --hash=sha256:7b29e97273bd6999e2bfe9fe3531b1f4f64effd28327bced048a33e49b99674a \
- --hash=sha256:7b4f57f7a0c65821c5441d98c47ff7c01d359b1e12328219709bdd97fdd37f90 \
- --hash=sha256:8837d5a52a2d7aa9f4c3220a8484013aed1d8ad75240d9a75ede63709ef89055 \
- --hash=sha256:8ccadf260bb46a61b9c7e89e2218f6efea9f3eeaaab4e3d1f58571890e54858e \
- --hash=sha256:8d8cf653e798ee4c4e654062b633db36984a1572f68c3aa25e364a0ddfbbb910 \
- --hash=sha256:93b2a1f325fefa1482516ced160c8c7b4b8d53226763fa6c93d151fa25164207 \
- --hash=sha256:9f0e0927efe87cd42ad600628e595a1a0aa1c64f6d0b55f7e6059079a428641a \
- --hash=sha256:a59a69deeb458c858b8fea6acf9e2acd5d755d76cd81a655256bc65c20dfff5b \
- --hash=sha256:a9f9b661f82693eb56beb0605156c7fca57f535704ab91837405913417d6990b \
- --hash=sha256:abfc57cab3c53c4546aee31859ef06753bfc136c9d208129bad23e2eca39155a \
- --hash=sha256:aca73d70c3f553552ba9133d4a09e767dcfeee352d8d8d3eb3f77e38a3beb3ed \
- --hash=sha256:adeaa886d607fb02563c1f625cf2ee58778a2567c0c109378da8f17ec3076ad7 \
- --hash=sha256:b278a9248a4e3260fee3db7613772ca9ab6763a129d6d6f29555e2f9b168216d \
- --hash=sha256:b7c1239b64b70be7759554ad1a86288220bbb04d68518b527783c4ad3fb4f80b \
- --hash=sha256:bf8c7735fbfc0754111f00edda35cf9e98a8d478de6c47b04eaa9cef4300eaa7 \
- --hash=sha256:c634a0a6db395fdaba0361aa78395597ee72c3aad651b9a307a3a7eaf5efd67e \
- --hash=sha256:cad9971881e4fec00d96af7eaf4b63aa7a595696fc221808b0d3ce7ca9743258 \
- --hash=sha256:cbdb3f337c88b43c3b49ca377731912c101178be91cb5071aac48faa898e6f8e \
- --hash=sha256:cd8551aa21df6c60baa2624fd086ae7486bdde00c44097b32e1d1b1966e365e0 \
- --hash=sha256:d09f677693328503c9e492e33e9601464297c01f9ebd966ea8fc5308f3069bfd \
- --hash=sha256:d376a35c6561e81d2590506804b428fc1075fcc6298fc5bb49b771534c0ba010 \
- --hash=sha256:d39079379a9a28e74f4d57dc6357fa310a1977b51ff12239d7271ec7e71d67f5 \
- --hash=sha256:d86f94743a11873317094326456b23f8a5788bad9161fd2f0e52088c33564620 \
- --hash=sha256:d91e60ac44bbe3a77a67af4a4c13114cbe9f6d540337ce22f2c9eaf7454ca71f \
- --hash=sha256:d9883b2d819ce83f87ba82a746c81d14ada78784db431e57cc9719179847376e \
- --hash=sha256:e094e445c37c57e9ec612847812c301840239d34ccc5d153a982fa9814478c60 \
- --hash=sha256:e19acfde38cb532a560b98f473adc741c941b7a9bc90f7294bc273d08becb58b \
- --hash=sha256:e32d43610dff472eab939f4d7fbdd240d1667794192690433672ae22d7af8445 \
- --hash=sha256:ed028fc3d41adda916320712838aec289956c89b4f0a361ceadf83a53b4c047a \
- --hash=sha256:ef59c938f72bdbc6ab52dc50f81d0637fde0f194b02d636987cea2ab30f8f55a \
- --hash=sha256:f3d4801db8354436fd3936531e7f0e4feb411f62433a6b6cb32bb416e20b529f \
- --hash=sha256:f57aca20e637750a2c18d979f7096e2c2033cc40cf7ed201494318de1182f135 \
- --hash=sha256:f9da128d0edf990cf0d2ca011b02cd6f639e79286774bd5b0351245cbb5a6e51 \
- --hash=sha256:fbd7351d43b80d9c64c3cfcb50008f786cc82cba0450e8599fdd64f264320bd3 \
- --hash=sha256:fcb72249ac4ea81a7baefcbff74df7029c3cb1cf01a711113fa052d563639c9c \
- --hash=sha256:ff21c554304e8226bf80c3a7754be27c6c3549a9fec563a03c06ee8f494da8fc
+librt==0.7.5 \
+ --hash=sha256:060bde69c3604f694bd8ae21a780fe8be46bb3dbb863642e8dfc75c931ca8eee \
+ --hash=sha256:08153ea537609d11f774d2bfe84af39d50d5c9ca3a4d061d946e0c9d8bce04a1 \
+ --hash=sha256:0b4791202296ad51ac09a3ff58eb49d9da8e3a4009167a6d76ac418a974e5fd4 \
+ --hash=sha256:0b7f080ba30601dfa3e3deed3160352273e1b9bc92e652f51103c3e9298f7899 \
+ --hash=sha256:0e2bf8f91093fac43e3eaebacf777f12fd539dce9ec5af3efc6d8424e96ccd49 \
+ --hash=sha256:118716de5ad6726332db1801bc90fa6d94194cd2e07c1a7822cebf12c496714d \
+ --hash=sha256:168e04663e126416ba712114050f413ac306759a1791d87b7c11d4428ba75760 \
+ --hash=sha256:191cbd42660446d67cf7a95ac7bfa60f49b8b3b0417c64f216284a1d86fc9335 \
+ --hash=sha256:263f4fae9eba277513357c871275b18d14de93fd49bf5e43dc60a97b81ad5eb8 \
+ --hash=sha256:265729b551a2dd329cc47b323a182fb7961af42abf21e913c9dd7d3331b2f3c2 \
+ --hash=sha256:26b46620e1e0e45af510d9848ea0915e7040605dd2ae94ebefb6c962cbb6f7ec \
+ --hash=sha256:29c8d2fae11d4379ea207ba7fc69d43237e42cf8a9f90ec6e05993687e6d648b \
+ --hash=sha256:2fcbf2e135c11f721193aa5f42ba112bb1046afafbffd407cbc81d8d735c74d0 \
+ --hash=sha256:39183abee670bc37b85f11e86c44a9cad1ed6efa48b580083e89ecee13dd9717 \
+ --hash=sha256:3919c9407faeeee35430ae135e3a78acd4ecaaaa73767529e2c15ca1d73ba325 \
+ --hash=sha256:3c98a8d0ac9e2a7cb8ff8c53e5d6e8d82bfb2839abf144fdeaaa832f2a12aa45 \
+ --hash=sha256:3dd58f7ce20360c6ce0c04f7bd9081c7f9c19fc6129a3c705d0c5a35439f201d \
+ --hash=sha256:46aa91813c267c3f60db75d56419b42c0c0b9748ec2c568a0e3588e543fb4233 \
+ --hash=sha256:49c596cd18e90e58b7caa4d7ca7606049c1802125fcff96b8af73fa5c3870e4d \
+ --hash=sha256:532ddc6a8a6ca341b1cd7f4d999043e4c71a212b26fe9fd2e7f1e8bb4e873544 \
+ --hash=sha256:54d2aef0b0f5056f130981ad45081b278602ff3657fe16c88529f5058038e802 \
+ --hash=sha256:553dc58987d1d853adda8aeadf4db8e29749f0b11877afcc429a9ad892818ae2 \
+ --hash=sha256:584cb3e605ec45ba350962cec853e17be0a25a772f21f09f1e422f7044ae2a7d \
+ --hash=sha256:5cd3afd71e9bc146203b6c8141921e738364158d4aa7cdb9a874e2505163770f \
+ --hash=sha256:63055d3dda433ebb314c9f1819942f16a19203c454508fdb2d167613f7017169 \
+ --hash=sha256:654fdc971c76348a73af5240d8e2529265b9a7ba6321e38dd5bae7b0d4ab3abe \
+ --hash=sha256:6b7b58913d475911f6f33e8082f19dd9b120c4f4a5c911d07e395d67b81c6982 \
+ --hash=sha256:6e860909fea75baef941ee6436e0453612505883b9d0d87924d4fda27865b9a2 \
+ --hash=sha256:730be847daad773a3c898943cf67fb9845a3961d06fb79672ceb0a8cd8624cfa \
+ --hash=sha256:732e0aa0385b59a1b2545159e781c792cc58ce9c134249233a7c7250a44684c4 \
+ --hash=sha256:75965c1f4efb7234ff52a58b729d245a21e87e4b6a26a0ec08052f02b16274e4 \
+ --hash=sha256:7a488908a470451338607650f1c064175094aedebf4a4fa37890682e30ce0b57 \
+ --hash=sha256:81056e01bba1394f1d92904ec61a4078f66df785316275edbaf51d90da8c6e26 \
+ --hash=sha256:82f3f088482e2229387eadf8215c03f7726d56f69cce8c0c40f0795aebc9b361 \
+ --hash=sha256:84d4a6b9efd6124f728558a18e79e7cc5c5d4efc09b2b846c910de7e564f5bad \
+ --hash=sha256:85f485b7471571e99fab4f44eeb327dc0e1f814ada575f3fa85e698417d8a54e \
+ --hash=sha256:8a3cfb15961e7333ea6ef033dc574af75153b5c230d5ad25fbcd55198f21e0cf \
+ --hash=sha256:8bb7883c1e94ceb87c2bf81385266f032da09cd040e804cc002f2c9d6b842e2f \
+ --hash=sha256:8dcae24de1bc9da93aa689cb6313c70e776d7cea2fcf26b9b6160fedfe6bd9af \
+ --hash=sha256:9937574e6d842f359b8585903d04f5b4ab62277a091a93e02058158074dc52f2 \
+ --hash=sha256:9bbb8facc5375476d392990dd6a71f97e4cb42e2ac66f32e860f6e47299d5e89 \
+ --hash=sha256:9c08527055fbb03c641c15bbc5b79dd2942fb6a3bd8dabf141dd7e97eeea4904 \
+ --hash=sha256:9cffa3ef0af29687455161cb446eff059bf27607f95163d6a37e27bcb37180f6 \
+ --hash=sha256:9f85f9b5db87b0f52e53c68ad2a0c5a53e00afa439bd54a1723742a2b1021276 \
+ --hash=sha256:a82d5a0ee43aeae2116d7292c77cc8038f4841830ade8aa922e098933b468b9e \
+ --hash=sha256:a9eacbf983319b26b5f340a2e0cd47ac1ee4725a7f3a72fd0f15063c934b69d6 \
+ --hash=sha256:ab4b0d3bee6f6ff7017e18e576ac7e41a06697d8dea4b8f3ab9e0c8e1300c409 \
+ --hash=sha256:af69d9e159575e877c7546d1ee817b4ae089aa221dd1117e20c24ad8dc8659c7 \
+ --hash=sha256:b1795c4b2789b458fa290059062c2f5a297ddb28c31e704d27e161386469691a \
+ --hash=sha256:b591c094afd0ffda820e931148c9e48dc31a556dc5b2b9b3cc552fa710d858e4 \
+ --hash=sha256:b8e0fd344bad57026a8f4ccfaf406486c2fc991838050c2fef156170edc3b775 \
+ --hash=sha256:ba1077c562a046208a2dc6366227b3eeae8f2c2ab4b41eaf4fd2fa28cece4203 \
+ --hash=sha256:bb41f04046b4f22b1e7ba5ef513402cd2e3477ec610e5f92d38fe2bba383d419 \
+ --hash=sha256:c039bbf79a9a2498404d1ae7e29a6c175e63678d7a54013a97397c40aee026c5 \
+ --hash=sha256:c566a4672564c5d54d8ab65cdaae5a87ee14c1564c1a2ddc7a9f5811c750f023 \
+ --hash=sha256:cda8b025875946ffff5a9a7590bf9acde3eb02cb6200f06a2d3e691ef3d9955b \
+ --hash=sha256:cdb001a1a0e4f41e613bca2c0fc147fc8a7396f53fc94201cbfd8ec7cd69ca4b \
+ --hash=sha256:cdde31759bd8888f3ef0eebda80394a48961328a17c264dce8cc35f4b9cde35d \
+ --hash=sha256:d2cc7d187e8c6e9b7bdbefa9697ce897a704ea7a7ce844f2b4e0e2aa07ae51d3 \
+ --hash=sha256:d7aa33153a5bb0bac783d2c57885889b1162823384e8313d47800a0e10d0070e \
+ --hash=sha256:d7c72c8756eeb3aefb1b9e3dac7c37a4a25db63640cac0ab6fc18e91a0edf05a \
+ --hash=sha256:dd810f2d39c526c42ea205e0addad5dc08ef853c625387806a29d07f9d150d9b \
+ --hash=sha256:ddc0ab9dbc5f9ceaf2bf7a367bf01f2697660e908f6534800e88f43590b271db \
+ --hash=sha256:ddc4a16207f88f9597b397fc1f60781266d13b13de922ff61c206547a29e4bbd \
+ --hash=sha256:de4221a1181fa9c8c4b5f35506ed6f298948f44003d84d2a8b9885d7e01e6cfa \
+ --hash=sha256:df2e210400b28e50994477ebf82f055698c79797b6ee47a1669d383ca33263e1 \
+ --hash=sha256:df3146d52465b3b6397d25d513f428cb421c18df65b7378667bb5f1e3cc45805 \
+ --hash=sha256:e47fc52602ffc374e69bf1b76536dc99f7f6dd876bd786c8213eaa3598be030a \
+ --hash=sha256:e9e9c988b5ffde7be02180f864cbd17c0b0c1231c235748912ab2afa05789c25 \
+ --hash=sha256:ea1b60b86595a5dc1f57b44a801a1c4d8209c0a69518391d349973a4491408e6 \
+ --hash=sha256:edf6b465306215b19dbe6c3fb63cf374a8f3e1ad77f3b4c16544b83033bbb67b \
+ --hash=sha256:f02c4337bf271c4f06637f5ff254fad2238c0b8e32a3a480ebb2fc5e26f754a5 \
+ --hash=sha256:f7f51ffe59f4556243d3cc82d827bde74765f594fa3ceb80ec4de0c13ccd3416 \
+ --hash=sha256:f952e1a78c480edee8fb43aa2bf2e84dcd46c917d44f8065b883079d3893e8fc \
+ --hash=sha256:fb565b4219abc8ea2402e61c7ba648a62903831059ed3564fa1245cc245d58d7 \
+ --hash=sha256:fee15c2a190ef389f14928135c6fb2d25cd3fdb7887bfd9a7b444bbdc8c06b96
# via mypy
markupsafe==3.0.3 \
--hash=sha256:0303439a41979d9e74d18ff5e2dd8c43ed6c6001fd40e5bf2e43f7bd9bbc523f \
@@ -495,21 +497,21 @@ markupsafe==3.0.3 \
--hash=sha256:f9e130248f4462aaa8e2552d547f36ddadbeaa573879158d721bbd33dfe4743a \
--hash=sha256:fed51ac40f757d41b7c48425901843666a6677e3e8eb0abcff09e4ba6e664f50
# via jinja2
-maturin==1.10.2 \
- --hash=sha256:04df81ee295dcda37828bd025a4ac688ea856e3946e4cb300a8f44a448de0069 \
- --hash=sha256:07a82864352feeaf2167247c8206937ef6c6ae9533025d416b7004ade0ea601d \
- --hash=sha256:11c73815f21a755d2129c410e6cb19dbfacbc0155bfc46c706b69930c2eb794b \
- --hash=sha256:259292563da89850bf8f7d37aa4ddba22905214c1e180b1c8f55505dfd8c0e81 \
- --hash=sha256:7fbd997c5347649ee7987bd05a92bd5b8b07efa4ac3f8bcbf6196e07eb573d89 \
- --hash=sha256:96e1d391e4c1fa87edf2a37e4d53d5f2e5f39dd880b9d8306ac9f8eb212d23f8 \
- --hash=sha256:a217aa7c42aa332fb8e8377eb07314e1f02cf0fe036f614aca4575121952addd \
- --hash=sha256:a41ec70d99e27c05377be90f8e3c3def2a7bae4d0d9d5ea874aaf2d1da625d5c \
- --hash=sha256:a4c29a770ea2c76082e0afc6d4efd8ee94405588bfae00d10828f72e206c739b \
- --hash=sha256:da031771d9fb6ddb1d373638ec2556feee29e4507365cd5749a2d354bcadd818 \
- --hash=sha256:da777766fd584440dc9fecd30059a94f85e4983f58b09e438ae38ee4b494024c \
- --hash=sha256:e3ce9b2ad4fb9c341f450a6d32dc3edb409a2d582a81bc46ba55f6e3b6196b22 \
- --hash=sha256:efcd496a3202ffe0d0489df1f83d08b91399782fb2dd545d5a1e7bf6fd81af39 \
- --hash=sha256:f0d1b7b5f73c8d30a7e71cd2a2189a7f0126a3a3cd8b3d6843e7e1d4db50f759
+maturin==1.11.0 \
+ --hash=sha256:0fbe565ede0901de7743cd028ad6c13be623b1c7158641f8a50d7a4353f4a97c \
+ --hash=sha256:16cb48f1f2b6b3d8c2732f77d98d8f7f0ab84765abf0c1c82df2c8ea7d8ef2ec \
+ --hash=sha256:276a900d4096c246cc236aa00460adb3ab195c37172a9f1087bbde6a127f0780 \
+ --hash=sha256:51cadd0373950cfae6aac6823a3d2bf56e34e4efed0abae8c7d15e337d9bb5e6 \
+ --hash=sha256:83b73299f36301d943550c609e0a0dff08d21e3674c1369c10df77ce470fd97b \
+ --hash=sha256:8695b79462e1f46013993d715485db289cf5a7702aa2d9941ac333564ca20d79 \
+ --hash=sha256:8bf16fc56f4abcf3af7d5fb6dab3888f73e3648287c8efe77e14fa1b006a3ef4 \
+ --hash=sha256:95c5d778c96ab237837cd6d38e01f0bdca52c64e0d00647a69133a8e7ae4eed4 \
+ --hash=sha256:9aaaec73e120ac7add99f53d606aa6d432c8e0337af742b2ca26fb8d17181500 \
+ --hash=sha256:aa2d9db1c03e9eb0640a578caf00a6fa2d9399abb7375a970b0f6d6e934b5441 \
+ --hash=sha256:d13d3721931d407491d9b3fe161146aa78ab08a8fc9735302abee1d368aedb03 \
+ --hash=sha256:d53bde4f939dac9340aa253c2765073de6b8595a29a294503042fcbfec8bd842 \
+ --hash=sha256:dba7daeb54615532c11f8fe39bc9514b81215f6f4e91909ec227e06227c286cf \
+ --hash=sha256:debf472d3ecd76a3a750b056b99dcb64c119467dc44f0e2d6e6363acb128b96a
# via
# cryptography
# pydantic-core
@@ -518,9 +520,11 @@ maturin==1.10.2 \
meson-python==0.15.0 \
--hash=sha256:3ae38253ff02b2e947a05e362a2eaf5a9a09d133c5666b4123399ee5fbf2e591 \
--hash=sha256:fddb73eecd49e89c1c41c87937cd89c2d0b65a1c63ba28238681d4bd9484d26f
- # via
- # numpy
- # pandas
+ # via pandas
+meson-python==0.18.0 \
+ --hash=sha256:3b0fe051551cc238f5febb873247c0949cd60ded556efa130aa57021804868e2 \
+ --hash=sha256:c56a99ec9df669a40662fe46960321af6e4b14106c14db228709c1628e23848d
+ # via numpy
meson==1.7.1 \
--hash=sha256:155780a5be87f6dd7f427ad8bcbf0f2b2c5f62ee5fdacca7caa9de8439a24b89 \
--hash=sha256:6d9cbc9ce87a70243c75e4cc668ee3f206ab50b184beb0a08ece948112f19bd7
@@ -531,81 +535,79 @@ mypy-extensions==1.1.0 \
--hash=sha256:1be4cccdb0f2482337c4743e60421de3a356cd97508abadd57d47403e94f5505 \
--hash=sha256:52e68efc3284861e772bbcd66823fde5ae21fd2fdb51c62a211403730b916558
# via mypy
-numpy==2.3.5 \
- --hash=sha256:00dc4e846108a382c5869e77c6ed514394bdeb3403461d25a829711041217d5b \
- --hash=sha256:0472f11f6ec23a74a906a00b48a4dcf3849209696dff7c189714511268d103ae \
- --hash=sha256:04822c00b5fd0323c8166d66c701dc31b7fbd252c100acd708c48f763968d6a3 \
- --hash=sha256:052e8c42e0c49d2575621c158934920524f6c5da05a1d3b9bab5d8e259e045f0 \
- --hash=sha256:09a1bea522b25109bf8e6f3027bd810f7c1085c64a0c7ce050c1676ad0ba010b \
- --hash=sha256:0cd00b7b36e35398fa2d16af7b907b65304ef8bb4817a550e06e5012929830fa \
- --hash=sha256:0d8163f43acde9a73c2a33605353a4f1bc4798745a8b1d73183b28e5b435ae28 \
- --hash=sha256:1062fde1dcf469571705945b0f221b73928f34a20c904ffb45db101907c3454e \
- --hash=sha256:11e06aa0af8c0f05104d56450d6093ee639e15f24ecf62d417329d06e522e017 \
- --hash=sha256:17531366a2e3a9e30762c000f2c43a9aaa05728712e25c11ce1dbe700c53ad41 \
- --hash=sha256:1978155dd49972084bd6ef388d66ab70f0c323ddee6f693d539376498720fb7e \
- --hash=sha256:1ed1ec893cff7040a02c8aa1c8611b94d395590d553f6b53629a4461dc7f7b63 \
- --hash=sha256:2dcd0808a421a482a080f89859a18beb0b3d1e905b81e617a188bd80422d62e9 \
- --hash=sha256:2e2eb32ddb9ccb817d620ac1d8dae7c3f641c1e5f55f531a33e8ab97960a75b8 \
- --hash=sha256:2feae0d2c91d46e59fcd62784a3a83b3fb677fead592ce51b5a6fbb4f95965ff \
- --hash=sha256:3095bdb8dd297e5920b010e96134ed91d852d81d490e787beca7e35ae1d89cf7 \
- --hash=sha256:30bc11310e8153ca664b14c5f1b73e94bd0503681fcf136a163de856f3a50139 \
- --hash=sha256:3101e5177d114a593d79dd79658650fe28b5a0d8abeb8ce6f437c0e6df5be1a4 \
- --hash=sha256:396084a36abdb603546b119d96528c2f6263921c50df3c8fd7cb28873a237748 \
- --hash=sha256:3997b5b3c9a771e157f9aae01dd579ee35ad7109be18db0e85dbdbe1de06e952 \
- --hash=sha256:414802f3b97f3c1eef41e530aaba3b3c1620649871d8cb38c6eaff034c2e16bd \
- --hash=sha256:51c1e14eb1e154ebd80e860722f9e6ed6ec89714ad2db2d3aa33c31d7c12179b \
- --hash=sha256:51c55fe3451421f3a6ef9a9c1439e82101c57a2c9eab9feb196a62b1a10b58ce \
- --hash=sha256:5ee6609ac3604fa7780e30a03e5e241a7956f8e2fcfe547d51e3afa5247ac47f \
- --hash=sha256:612a95a17655e213502f60cfb9bf9408efdc9eb1d5f50535cc6eb365d11b42b5 \
- --hash=sha256:6203fdf9f3dc5bdaed7319ad8698e685c7a3be10819f41d32a0723e611733b42 \
- --hash=sha256:63c0e9e7eea69588479ebf4a8a270d5ac22763cc5854e9a7eae952a3908103f7 \
- --hash=sha256:66f85ce62c70b843bab1fb14a05d5737741e74e28c7b8b5a064de10142fad248 \
- --hash=sha256:6cf9b429b21df6b99f4dee7a1218b8b7ffbbe7df8764dc0bd60ce8a0708fed1e \
- --hash=sha256:70b37199913c1bd300ff6e2693316c6f869c7ee16378faf10e4f5e3275b299c3 \
- --hash=sha256:727fd05b57df37dc0bcf1a27767a3d9a78cbbc92822445f32cc3436ba797337b \
- --hash=sha256:74ae7b798248fe62021dbf3c914245ad45d1a6b0cb4a29ecb4b31d0bfbc4cc3e \
- --hash=sha256:784db1dcdab56bf0517743e746dfb0f885fc68d948aba86eeec2cba234bdf1c0 \
- --hash=sha256:86945f2ee6d10cdfd67bcb4069c1662dd711f7e2a4343db5cecec06b87cf31aa \
- --hash=sha256:86d835afea1eaa143012a2d7a3f45a3adce2d7adc8b4961f0b362214d800846a \
- --hash=sha256:872a5cf366aec6bb1147336480fef14c9164b154aeb6542327de4970282cd2f5 \
- --hash=sha256:8b973c57ff8e184109db042c842423ff4f60446239bd585a5131cc47f06f789d \
- --hash=sha256:8cba086a43d54ca804ce711b2a940b16e452807acebe7852ff327f1ecd49b0d4 \
- --hash=sha256:8f7f0e05112916223d3f438f293abf0727e1181b5983f413dfa2fefc4098245c \
- --hash=sha256:900218e456384ea676e24ea6a0417f030a3b07306d29d7ad843957b40a9d8d52 \
- --hash=sha256:93eebbcf1aafdf7e2ddd44c2923e2672e1010bddc014138b229e49725b4d6be5 \
- --hash=sha256:9c75442b2209b8470d6d5d8b1c25714270686f14c749028d2199c54e29f20b4d \
- --hash=sha256:9ee2197ef8c4f0dfe405d835f3b6a14f5fee7782b5de51ba06fb65fc9b36e9f1 \
- --hash=sha256:a414504bef8945eae5f2d7cb7be2d4af77c5d1cb5e20b296c2c25b61dff2900c \
- --hash=sha256:a4b9159734b326535f4dd01d947f919c6eefd2d9827466a696c44ced82dfbc18 \
- --hash=sha256:a80afd79f45f3c4a7d341f13acbe058d1ca8ac017c165d3fa0d3de6bc1a079d7 \
- --hash=sha256:aa5bc7c5d59d831d9773d1170acac7893ce3a5e130540605770ade83280e7188 \
- --hash=sha256:acfd89508504a19ed06ef963ad544ec6664518c863436306153e13e94605c218 \
- --hash=sha256:aeffcab3d4b43712bb7a60b65f6044d444e75e563ff6180af8f98dd4b905dfd2 \
- --hash=sha256:afaffc4393205524af9dfa400fa250143a6c3bc646c08c9f5e25a9f4b4d6a903 \
- --hash=sha256:b0c7088a73aef3d687c4deef8452a3ac7c1be4e29ed8bf3b366c8111128ac60c \
- --hash=sha256:b46b4ec24f7293f23adcd2d146960559aaf8020213de8ad1909dba6c013bf89c \
- --hash=sha256:b501b5fa195cc9e24fe102f21ec0a44dffc231d2af79950b451e0d99cea02234 \
- --hash=sha256:bf06bc2af43fa8d32d30fae16ad965663e966b1a3202ed407b84c989c3221e82 \
- --hash=sha256:c804e3a5aba5460c73955c955bdbd5c08c354954e9270a2c1565f62e866bdc39 \
- --hash=sha256:c8a9958e88b65c3b27e22ca2a076311636850b612d6bbfb76e8d156aacde2aaf \
- --hash=sha256:cc0a57f895b96ec78969c34f682c602bf8da1a0270b09bc65673df2e7638ec20 \
- --hash=sha256:cc8920d2ec5fa99875b670bb86ddeb21e295cb07aa331810d9e486e0b969d946 \
- --hash=sha256:ccc933afd4d20aad3c00bcef049cb40049f7f196e0397f1109dba6fed63267b0 \
- --hash=sha256:ce581db493ea1a96c0556360ede6607496e8bf9b3a8efa66e06477267bc831e9 \
- --hash=sha256:d0f23b44f57077c1ede8c5f26b30f706498b4862d3ff0a7298b8411dd2f043ff \
- --hash=sha256:d21644de1b609825ede2f48be98dfde4656aefc713654eeee280e37cadc4e0ad \
- --hash=sha256:d6889ec4ec662a1a37eb4b4fb26b6100841804dac55bd9df579e326cdc146227 \
- --hash=sha256:de5672f4a7b200c15a4127042170a694d4df43c992948f5e1af57f0174beed10 \
- --hash=sha256:e6a0bc88393d65807d751a614207b7129a310ca4fe76a74e5c7da5fa5671417e \
- --hash=sha256:ed89927b86296067b4f81f108a2271d8926467a8868e554eaf370fc27fa3ccaf \
- --hash=sha256:ee3888d9ff7c14604052b2ca5535a30216aa0a58e948cdd3eeb8d3415f638769 \
- --hash=sha256:f0963b55cdd70fad460fa4c1341f12f976bb26cb66021a5580329bd498988310 \
- --hash=sha256:f16417ec91f12f814b10bafe79ef77e70113a2f5f7018640e7425ff979253425 \
- --hash=sha256:f28620fe26bee16243be2b7b874da327312240a7cdc38b769a697578d2100013 \
- --hash=sha256:f4255143f5160d0de972d28c8f9665d882b5f61309d8362fdd3e103cf7bf010c \
- --hash=sha256:ffac52f28a7849ad7576293c0cb7b9f08304e8f7d738a8cb8a90ec4c55a998eb \
- --hash=sha256:ffe22d2b05504f786c867c8395de703937f934272eb67586817b46188b4ded6d \
- --hash=sha256:fffe29a1ef00883599d1dc2c51aa2e5d80afe49523c261a74933df395c15c520
+numpy==2.4.0 \
+ --hash=sha256:009bd0ea12d3c784b6639a8457537016ce5172109e585338e11334f6a7bb88ee \
+ --hash=sha256:02a2038eb27f9443a8b266a66911e926566b5a6ffd1a689b588f7f35b81e7dc3 \
+ --hash=sha256:0804a8e4ab070d1d35496e65ffd3cf8114c136a2b81f61dfab0de4b218aacfd5 \
+ --hash=sha256:0feafc9e03128074689183031181fac0897ff169692d8492066e949041096548 \
+ --hash=sha256:1889b3a3f47a7b5bee16bc25a2145bd7cb91897f815ce3499db64c7458b6d91d \
+ --hash=sha256:1d8f9fde5f6dc1b6fc34df8162f3b3079365468703fee7f31d4e0cc8c63baed9 \
+ --hash=sha256:1ee32359fb7543b7b7bd0b2f46294db27e29e7bbdf70541e81b190836cd83ded \
+ --hash=sha256:20c115517513831860c573996e395707aa9fb691eb179200125c250e895fcd93 \
+ --hash=sha256:21555da4ec4a0c942520ead42c3b0dc9477441e085c42b0fbdd6a084869a6f6b \
+ --hash=sha256:23a3e9d1a6f360267e8fbb38ba5db355a6a7e9be71d7fce7ab3125e88bb646c8 \
+ --hash=sha256:2a8b6bb8369abefb8bd1801b054ad50e02b3275c8614dc6e5b0373c305291037 \
+ --hash=sha256:2e284ca13d5a8367e43734148622caf0b261b275673823593e3e3634a6490f83 \
+ --hash=sha256:2f585f52b2baf07ff3356158d9268ea095e221371f1074fadea2f42544d58b4d \
+ --hash=sha256:316b2f2584682318539f0bcaca5a496ce9ca78c88066579ebd11fd06f8e4741e \
+ --hash=sha256:32ed06d0fe9cae27d8fb5f400c63ccee72370599c75e683a6358dd3a4fb50aaf \
+ --hash=sha256:355354388cba60f2132df297e2d53053d4063f79077b67b481d21276d61fc4df \
+ --hash=sha256:35ddc8f4914466e6fc954c76527aa91aa763682a4f6d73249ef20b418fe6effb \
+ --hash=sha256:36667db4d6c1cea79c8930ab72fadfb4060feb4bfe724141cd4bd064d2e5f8ce \
+ --hash=sha256:36cbfb13c152b1c7c184ddac43765db8ad672567e7bafff2cc755a09917ed2e6 \
+ --hash=sha256:39699233bc72dd482da1415dcb06076e32f60eddc796a796c5fb6c5efce94667 \
+ --hash=sha256:39b19251dec4de8ff8496cd0806cbe27bf0684f765abb1f4809554de93785f2d \
+ --hash=sha256:3d857f55e7fdf7c38ab96c4558c95b97d1c685be6b05c249f5fdafcbd6f9899e \
+ --hash=sha256:3de19cfecd1465d0dcf8a5b5ea8b3155b42ed0b639dba4b71e323d74f2a3be5e \
+ --hash=sha256:3f3096405acc48887458bbf9f6814d43785ac7ba2a57ea6442b581dedbc60ce6 \
+ --hash=sha256:40483b2f2d3ba7aad426443767ff5632ec3156ef09742b96913787d13c336471 \
+ --hash=sha256:413aa561266a4be2d06cd2b9665e89d9f54c543f418773076a76adcf2af08bc7 \
+ --hash=sha256:44aba2f0cafd287871a495fb3163408b0bd25bbce135c6f621534a07f4f7875c \
+ --hash=sha256:49ff32b09f5aa0cd30a20c2b39db3e669c845589f2b7fc910365210887e39344 \
+ --hash=sha256:4d1cfce39e511069b11e67cd0bd78ceff31443b7c9e5c04db73c7a19f572967c \
+ --hash=sha256:57c540ed8fb1f05cb997c6761cd56db72395b0d6985e90571ff660452ade4f98 \
+ --hash=sha256:5f48cb3e88fbc294dc90e215d86fbaf1c852c63dbdb6c3a3e63f45c4b57f7344 \
+ --hash=sha256:5fe44e277225fd3dff6882d86d3d447205d43532c3627313d17e754fb3905a0e \
+ --hash=sha256:60e8c196cd82cbbd4f130b5290007e13e6de3eca79f0d4d38014769d96a7c475 \
+ --hash=sha256:65167da969cd1ec3a1df31cb221ca3a19a8aaa25370ecb17d428415e93c1935e \
+ --hash=sha256:680060061adb2d74ce352628cb798cfdec399068aa7f07ba9fb818b2b3305f98 \
+ --hash=sha256:6bbaebf0d11567fa8926215ae731e1d58e6ec28a8a25235b8a47405d301332db \
+ --hash=sha256:6c05483c3136ac4c91b4e81903cb53a8707d316f488124d0398499a4f8e8ef51 \
+ --hash=sha256:6dc8b7e2f4eb184b37655195f421836cfae6f58197b67e3ffc501f1333d993fa \
+ --hash=sha256:6e504f7b16118198f138ef31ba24d985b124c2c469fe8467007cf30fd992f934 \
+ --hash=sha256:74623f2ab5cc3f7c886add4f735d1031a1d2be4a4ae63c0546cfd74e7a31ddf6 \
+ --hash=sha256:77f0d13fa87036d7553bf81f0e1fe3ce68d14c9976c9851744e4d3e91127e95f \
+ --hash=sha256:85eef4cb5625c47ee6425c58a3502555e10f45ee973da878ac8248ad58c136f3 \
+ --hash=sha256:882567b7ae57c1b1a0250208cc21a7976d8cbcc49d5a322e607e6f09c9e0bd53 \
+ --hash=sha256:8b986403023c8f3bf8f487c2e6186afda156174d31c175f747d8934dfddf3479 \
+ --hash=sha256:8cfa5f29a695cb7438965e6c3e8d06e0416060cf0d709c1b1c1653a939bf5c2a \
+ --hash=sha256:8eafe7c36c8430b7794edeab3087dec7bf31d634d92f2af9949434b9d1964cba \
+ --hash=sha256:9198f447e1dc5647d07c9a6bbe2063cc0132728cc7175b39dbc796da5b54920d \
+ --hash=sha256:92190db305a6f48734d3982f2c60fa30d6b5ee9bff10f2887b930d7b40119f4c \
+ --hash=sha256:927ccf5cd17c48f801f4ed43a7e5673a2724bd2171460be3e3894e6e332ef83a \
+ --hash=sha256:98e81648e0b36e325ab67e46b5400a7a6d4a22b8a7c8e8bbfe20e7db7906bf95 \
+ --hash=sha256:9a818668b674047fd88c4cddada7ab8f1c298812783e8328e956b78dc4807f9f \
+ --hash=sha256:a152d86a3ae00ba5f47b3acf3b827509fd0b6cb7d3259665e63dafbad22a75ea \
+ --hash=sha256:a2718c1de8504121714234b6f8241d0019450353276c88b9453c9c3d92e101db \
+ --hash=sha256:a39fb973a726e63223287adc6dafe444ce75af952d711e400f3bf2b36ef55a7b \
+ --hash=sha256:a899699294f28f7be8992853c0c60741f16ff199205e2e6cdca155762cbaa59d \
+ --hash=sha256:a8fdfed3deaf1928fb7667d96e0567cdf58c2b370ea2ee7e586aa383ec2cb346 \
+ --hash=sha256:aabb081ca0ec5d39591fc33018cd4b3f96e1a2dd6756282029986d00a785fba4 \
+ --hash=sha256:b1f5b45829ac1848893f0ddf5cb326110604d6df96cdc255b0bf9edd154104d4 \
+ --hash=sha256:b48e35f4ab6f6a7597c46e301126ceba4c44cd3280e3750f85db48b082624fa4 \
+ --hash=sha256:b54c83f1c0c0f1d748dca0af516062b8829d53d1f0c402be24b4257a9c48ada6 \
+ --hash=sha256:ba0cb30acd3ef11c94dc27fbfba68940652492bc107075e7ffe23057f9425681 \
+ --hash=sha256:bb50ce5fb202a26fd5404620e7ef820ad1ab3558b444cb0b55beb7ef66cd2d63 \
+ --hash=sha256:c95eb6db2884917d86cde0b4d4cf31adf485c8ec36bf8696dd66fa70de96f36b \
+ --hash=sha256:d0ffd9e2e4441c96a9c91ec1783285d80bf835b677853fc2770a89d50c1e48ac \
+ --hash=sha256:d57b5046c120561ba8fa8e4030fbb8b822f3063910fa901ffadf16e2b7128ad6 \
+ --hash=sha256:d9e6a7664ddd9746e20b7325351fe1a8408d0a2bf9c63b5e898290ddc8f09544 \
+ --hash=sha256:dc578891de1db95b2a35001b695451767b580bb45753717498213c5ff3c41d63 \
+ --hash=sha256:e0434aa22c821f44eeb4c650b81c7fbdd8c0122c6c4b5a576a76d5a35625ecd9 \
+ --hash=sha256:e06a922a469cae9a57100864caf4f8a97a1026513793969f8ba5b63137a35d25 \
+ --hash=sha256:e493962256a38f58283de033d8af176c5c91c084ea30f15834f7545451c42059 \
+ --hash=sha256:ecb0019d44f4cdb50b676c5d0cb4b1eae8e15d1ed3d3e6639f986fc92b2ec52c \
+ --hash=sha256:f935c4493eda9069851058fa0d9e39dbf6286be690066509305e52912714dbb2
# via
# pandas
# pyarrow
@@ -615,6 +617,7 @@ packaging==24.2 \
# via
# dunamai
# hatchling
+ # meson-python
# pyproject-metadata
# scikit-build-core
# setuptools-scm
@@ -776,9 +779,9 @@ types-psutil==7.0.0.20250218 \
--hash=sha256:1447a30c282aafefcf8941ece854e1100eee7b0296a9d9be9977292f0269b121 \
--hash=sha256:1e642cdafe837b240295b23b1cbd4691d80b08a07d29932143cbbae30eb0db9c
# via mypy
-types-setuptools==80.9.0.20250822 \
- --hash=sha256:070ea7716968ec67a84c7f7768d9952ff24d28b65b6594797a464f1b3066f965 \
- --hash=sha256:53bf881cb9d7e46ed12c76ef76c0aaf28cfe6211d3fab12e0b83620b1a8642c3
+types-setuptools==80.9.0.20251223 \
+ --hash=sha256:1b36db79d724c2287d83dc052cf887b47c0da6a2fff044378be0b019545f56e6 \
+ --hash=sha256:d3411059ae2f5f03985217d86ac6084efea2c9e9cacd5f0869ef950f308169b2
# via mypy
typing-extensions==4.15.0 \
--hash=sha256:0cea48d173cc12fa28ecabc3b837ea3cf6f38c6d1136f85cbaaf598984861466 \
@@ -786,9 +789,9 @@ typing-extensions==4.15.0 \
# via
# mypy
# setuptools-scm
-uv-dynamic-versioning==0.11.2 \
- --hash=sha256:4c785ea02e00b93896d015fd3613c451735af1715a7f5f52e8e4e1d76e6ec3c5 \
- --hash=sha256:563ab4b7a93904eb8fb8fd9f2959dad853d62baa71f3cdb0233acf8a749d512f
+uv-dynamic-versioning==0.12.0 \
+ --hash=sha256:2d2f1fb806c2e351d0d0a3840aaf7b3c6ce73757080b1ada4ac5dc44f7dd4c9e \
+ --hash=sha256:e853e0c5b2425a68005580325d4975a8c37b66015589ca45ef96e660fe0f8f16
# via mcp
versioneer==0.29 \
--hash=sha256:0f1a137bb5d6811e96a79bb0486798aeae9b9c6efc24b389659cebb0ee396cb9 \
diff --git a/sdk/python/requirements/py3.11-minimal-sdist-requirements.txt b/sdk/python/requirements/py3.11-minimal-sdist-requirements.txt
index 9ff17ded290..3fb8dbf6562 100644
--- a/sdk/python/requirements/py3.11-minimal-sdist-requirements.txt
+++ b/sdk/python/requirements/py3.11-minimal-sdist-requirements.txt
@@ -182,9 +182,9 @@ babel==2.17.0 \
--hash=sha256:0c54cffb19f690cdcc52a3b50bcbf71e07a808d1c80d549f2459b9d2cf0afb9d \
--hash=sha256:4d0b53093fdfb4b21c92b5213dba5a1b23885afa8383709427046b21c366e5f2
# via sphinx
-bigtree==1.0.3 \
- --hash=sha256:18402a143130868b17ca84a74ca263e6f32f046d6978c30d244f8b94c4a01227 \
- --hash=sha256:99a18b6937a9b4ab8e560fec5c0720e10ebf37f84e44f9b5f47702c2e84c9aaa
+bigtree==1.0.4 \
+ --hash=sha256:e4af0c5bc0d2cd72e18442965e4509f642b16a0de65db6d0ec116e30f959010c \
+ --hash=sha256:f58a3238bb9b1142d893c9de4921bfd18d435427c75e0c168dd580eabf6dc7fd
# via feast (setup.py)
boto3==1.38.27 \
--hash=sha256:94bd7fdd92d5701b362d4df100d21e28f8307a67ff56b6a8b0398119cf22f859 \
@@ -200,9 +200,9 @@ botocore==1.38.46 \
# boto3
# s3transfer
# snowflake-connector-python
-cachetools==6.2.2 \
- --hash=sha256:6c09c98183bf58560c97b2abfcedcbaf6a896a490f534b031b661d3723b45ace \
- --hash=sha256:8e6d266b25e539df852251cfd6f990b4bc3a141db73b939058d809ebd2590fc6
+cachetools==6.2.4 \
+ --hash=sha256:69a7a52634fed8b8bf6e24a050fb60bff1c9bd8f6d24572b99c32d4e71e62a51 \
+ --hash=sha256:82c5c05585e70b6ba2d3ae09ea60b79548872185d2f24ae1f2709d37299fd607
# via google-auth
calver==2025.3.31 \
--hash=sha256:07511edf5e7fa75ae97445c8c5921240e0fe62937289a3ebe6963eddd3c691b6 \
@@ -547,13 +547,13 @@ cython==3.0.12 \
--hash=sha256:feb86122a823937cc06e4c029d80ff69f082ebb0b959ab52a5af6cdd271c5dc3 \
--hash=sha256:ff5c0b6a65b08117d0534941d404833d516dac422eee88c6b4fd55feb409a5ed
# via feast (setup.py)
-dask[dataframe]==2025.11.0 \
- --hash=sha256:08c35a8146c05c93b34f83cf651009129c42ee71762da7ca452fb7308641c2b8 \
- --hash=sha256:23d59e624b80ee05b7cc8df858682cca58262c4c3b197ccf61da0f6543c8f7c3
+dask[dataframe]==2025.12.0 \
+ --hash=sha256:4213ce9c5d51d6d89337cff69de35d902aa0bf6abdb8a25c942a4d0281f3a598 \
+ --hash=sha256:8d478f2aabd025e2453cf733ad64559de90cf328c20209e4574e9543707c3e1b
# via feast (setup.py)
-db-dtypes==1.4.4 \
- --hash=sha256:26f53db5df1acd746b88c5647913a1b20f731c0af1b11abcb6bec5365f31098a \
- --hash=sha256:32c13039982656a8598a0835f25f0e07e34c9a423e471ee60c2553240b7fcf1e
+db-dtypes==1.5.0 \
+ --hash=sha256:abdbb2e4eb965800ed6f98af0c5c1cafff9063ace09114be2d26a7f046be2c8a \
+ --hash=sha256:ad9e94243f53e104bc77dbf9ae44b580d83a770d3694483aba59c9767966daa5
# via
# google-cloud-bigquery
# pandas-gbq
@@ -561,9 +561,9 @@ dill==0.3.9 \
--hash=sha256:468dff3b89520b474c0397703366b7b95eebe6303f108adf9b19da1f702be87a \
--hash=sha256:81aa267dddf68cbfe8029c42ca9ec6a4ab3b22371d1c450abc54422577b4512c
# via feast (setup.py)
-docutils==0.22.3 \
- --hash=sha256:21486ae730e4ca9f622677b1412b879af1791efcfba517e4c6f60be543fc8cdd \
- --hash=sha256:bd772e4aca73aff037958d44f2be5229ded4c09927fcf8690c577b66234d6ceb
+docutils==0.22.4 \
+ --hash=sha256:4db53b1fde9abecbb74d91230d32ab626d94f6badfc575d6db9194a49df29968 \
+ --hash=sha256:d0013f540772d1420576855455d050a2180186c91c15779301ac2ccb3eeb68de
# via sphinx
duckdb==1.1.3 \
--hash=sha256:00cca22df96aa3473fe4584f84888e2cf1c516e8c2dd837210daec44eadba586 \
@@ -627,9 +627,9 @@ durationpy==0.10 \
--hash=sha256:1fa6893409a6e739c9c72334fc65cca1f355dbdd93405d30f726deb5bde42fba \
--hash=sha256:3b41e1b601234296b4fb368338fdcd3e13e0b4fb5b67345948f4f2bf9868b286
# via kubernetes
-fastapi==0.124.0 \
- --hash=sha256:260cd178ad75e6d259991f2fd9b0fee924b224850079df576a3ba604ce58f4e6 \
- --hash=sha256:91596bdc6dde303c318f06e8d2bc75eafb341fc793a0c9c92c0bc1db1ac52480
+fastapi==0.128.0 \
+ --hash=sha256:1cc179e1cef10a6be60ffe429f79b829dce99d8de32d7acb7e6c8dfdf7f2645a \
+ --hash=sha256:aebd93f9716ee3b4f4fcfe13ffb7cf308d99c9f3ab5622d8877441072561582d
# via
# feast (setup.py)
# fastapi-mcp
@@ -637,9 +637,9 @@ fastapi-mcp==0.4.0 \
--hash=sha256:d4a3fe7966af24d44e4b412720561c95eb12bed999a4443a88221834b3b15aec \
--hash=sha256:d4ca9410996f4c7b8ea0d7b20fdf79878dc359ebf89cbf3b222e0b675a55097d
# via feast (setup.py)
-filelock==3.20.0 \
- --hash=sha256:339b4732ffda5cd79b13f4e2711a31b0365ce445d95d243bb996273d072546a2 \
- --hash=sha256:711e943b4ec6be42e1d4e6690b48dc175c822967466bb31c0c293f34334c13f4
+filelock==3.20.1 \
+ --hash=sha256:15d9e9a67306188a44baa72f569d2bfd803076269365fdea0934385da4dc361a \
+ --hash=sha256:b8360948b351b80f420878d8516519a2204b07aefcdcfd24912a5d33127f188c
# via snowflake-connector-python
flit-core==3.12.0 \
--hash=sha256:18f63100d6f94385c6ed57a72073443e1a71a4acb4339491615d0f16d6ff01b2 \
@@ -797,9 +797,9 @@ google-api-core[grpc]==2.28.1 \
# google-cloud-datastore
# google-cloud-storage
# pandas-gbq
-google-auth==2.43.0 \
- --hash=sha256:88228eee5fc21b62a1b5fe773ca15e67778cb07dc8363adcb4a8827b52d81483 \
- --hash=sha256:af628ba6fa493f75c7e9dbe9373d148ca9f4399b5ea29976519e0a3848eddd16
+google-auth==2.45.0 \
+ --hash=sha256:82344e86dc00410ef5382d99be677c6043d72e502b625aa4f4afa0bdacca0f36 \
+ --hash=sha256:90d3f41b6b72ea72dd9811e765699ee491ab24139f34ebf1ca2b9cc0c38708f3
# via
# google-api-core
# google-auth-oauthlib
@@ -818,19 +818,19 @@ google-auth-oauthlib==1.2.2 \
# via
# pandas-gbq
# pydata-google-auth
-google-cloud-bigquery[pandas]==3.38.0 \
- --hash=sha256:8afcb7116f5eac849097a344eb8bfda78b7cfaae128e60e019193dd483873520 \
- --hash=sha256:e06e93ff7b245b239945ef59cb59616057598d369edac457ebf292bd61984da6
+google-cloud-bigquery[pandas]==3.39.0 \
+ --hash=sha256:cb375e1d63dea9bd5bf735e66024338f294159d43afdf63e1d023f5fcbbf55ea \
+ --hash=sha256:dc7a64921465859105461b43c42562e38e797d7a73feb72b3cfc4865b7b1c5ef
# via
# feast (setup.py)
# pandas-gbq
-google-cloud-bigquery-storage==2.35.0 \
- --hash=sha256:c9bab6b8e41d6cb9806e589e65f320c89ada84f466e61566b7208d87924c1430 \
- --hash=sha256:f2e3a08882155de1e9ec53c71c5784eb1f25dc6514c535f5796c3c9eeac17d17
+google-cloud-bigquery-storage==2.36.0 \
+ --hash=sha256:1769e568070db672302771d2aec18341de10712aa9c4a8c549f417503e0149f0 \
+ --hash=sha256:d3c1ce9d2d3a4d7116259889dcbe3c7c70506f71f6ce6bbe54aa0a68bbba8f8f
# via feast (setup.py)
-google-cloud-bigtable==2.34.0 \
- --hash=sha256:773258b00cd3f9a3a35639cc38bd711f4f1418aaa0c8d70cb028978ed98dc2c2 \
- --hash=sha256:a4a8db4903840cd3f89fb19c060eea2e7c09c1265cb0538cfc11288dbc6000e4
+google-cloud-bigtable==2.35.0 \
+ --hash=sha256:f355bfce1f239453ec2bb3839b0f4f9937cf34ef06ef29e1ca63d58fd38d0c50 \
+ --hash=sha256:f5699012c5fea4bd4bdf7e80e5e3a812a847eb8f41bf8dc2f43095d6d876b83b
# via feast (setup.py)
google-cloud-core==2.5.0 \
--hash=sha256:67d977b41ae6c7211ee830c7912e41003ea8194bff15ae7d72fd6f51e57acabc \
@@ -840,49 +840,48 @@ google-cloud-core==2.5.0 \
# google-cloud-bigtable
# google-cloud-datastore
# google-cloud-storage
-google-cloud-datastore==2.21.0 \
- --hash=sha256:eee454dd4a55f5b327f9f344928ff1a09a6f77c23d5e3d908ad31a13cc2f4073 \
- --hash=sha256:f303f27cd1983383f20bd227019cd8a7897419e0ec6b878367c58c66245f9d9b
+google-cloud-datastore==2.23.0 \
+ --hash=sha256:24a1b1d29b902148fe41b109699f76fd3aa60591e9d547c0f8b87d7bf9ff213f \
+ --hash=sha256:80049883a4ae928fdcc661ba6803ec267665dc0e6f3ce2da91441079a6bb6387
# via feast (setup.py)
google-cloud-storage==2.19.0 \
--hash=sha256:aeb971b5c29cf8ab98445082cbfe7b161a1f48ed275822f59ed3f1524ea54fba \
--hash=sha256:cd05e9e7191ba6cb68934d8eb76054d9be4562aa89dbc4236feee4d7d51342b2
# via feast (setup.py)
-google-crc32c==1.7.1 \
- --hash=sha256:0f99eaa09a9a7e642a61e06742856eec8b19fc0037832e03f941fe7cf0c8e4db \
- --hash=sha256:19eafa0e4af11b0a4eb3974483d55d2d77ad1911e6cf6f832e1574f6781fd337 \
- --hash=sha256:1c67ca0a1f5b56162951a9dae987988679a7db682d6f97ce0f6381ebf0fbea4c \
- --hash=sha256:1f2b3522222746fff0e04a9bd0a23ea003ba3cccc8cf21385c564deb1f223242 \
- --hash=sha256:22beacf83baaf59f9d3ab2bbb4db0fb018da8e5aebdce07ef9f09fce8220285e \
- --hash=sha256:2bff2305f98846f3e825dbeec9ee406f89da7962accdb29356e4eadc251bd472 \
- --hash=sha256:2d73a68a653c57281401871dd4aeebbb6af3191dcac751a76ce430df4d403194 \
- --hash=sha256:32d1da0d74ec5634a05f53ef7df18fc646666a25efaaca9fc7dcfd4caf1d98c3 \
- --hash=sha256:3bda0fcb632d390e3ea8b6b07bf6b4f4a66c9d02dcd6fbf7ba00a197c143f582 \
- --hash=sha256:6335de12921f06e1f774d0dd1fbea6bf610abe0887a1638f64d694013138be5d \
- --hash=sha256:6b211ddaf20f7ebeec5c333448582c224a7c90a9d98826fbab82c0ddc11348e6 \
- --hash=sha256:6efb97eb4369d52593ad6f75e7e10d053cf00c48983f7a973105bc70b0ac4d82 \
- --hash=sha256:6fbab4b935989e2c3610371963ba1b86afb09537fd0c633049be82afe153ac06 \
- --hash=sha256:713121af19f1a617054c41f952294764e0c5443d5a5d9034b2cd60f5dd7e0349 \
- --hash=sha256:754561c6c66e89d55754106739e22fdaa93fafa8da7221b29c8b8e8270c6ec8a \
- --hash=sha256:7cc81b3a2fbd932a4313eb53cc7d9dde424088ca3a0337160f35d91826880c1d \
- --hash=sha256:85fef7fae11494e747c9fd1359a527e5970fc9603c90764843caabd3a16a0a48 \
- --hash=sha256:905a385140bf492ac300026717af339790921f411c0dfd9aa5a9e69a08ed32eb \
- --hash=sha256:9fc196f0b8d8bd2789352c6a522db03f89e83a0ed6b64315923c396d7a932315 \
- --hash=sha256:a8e9afc74168b0b2232fb32dd202c93e46b7d5e4bf03e66ba5dc273bb3559589 \
- --hash=sha256:b07d48faf8292b4db7c3d64ab86f950c2e94e93a11fd47271c28ba458e4a0d76 \
- --hash=sha256:b6d86616faaea68101195c6bdc40c494e4d76f41e07a37ffdef270879c15fb65 \
- --hash=sha256:b7491bdc0c7564fcf48c0179d2048ab2f7c7ba36b84ccd3a3e1c3f7a72d3bba6 \
- --hash=sha256:bb5e35dcd8552f76eed9461a23de1030920a3c953c1982f324be8f97946e7127 \
- --hash=sha256:d68e17bad8f7dd9a49181a1f5a8f4b251c6dbc8cc96fb79f1d321dfd57d66f53 \
- --hash=sha256:dcdf5a64adb747610140572ed18d011896e3b9ae5195f2514b7ff678c80f1603 \
- --hash=sha256:df8b38bdaf1629d62d51be8bdd04888f37c451564c2042d36e5812da9eff3c35 \
- --hash=sha256:e10554d4abc5238823112c2ad7e4560f96c7bf3820b202660373d769d9e6e4c9 \
- --hash=sha256:e42e20a83a29aa2709a0cf271c7f8aefaa23b7ab52e53b322585297bb94d4638 \
- --hash=sha256:ed66cbe1ed9cbaaad9392b5259b3eba4a9e565420d734e6238813c428c3336c9 \
- --hash=sha256:ee6547b657621b6cbed3562ea7826c3e11cab01cd33b74e1f677690652883e77 \
- --hash=sha256:f2226b6a8da04f1d9e61d3e357f2460b9551c5e6950071437e122c958a18ae14 \
- --hash=sha256:fa8136cc14dd27f34a3221c0f16fd42d8a40e4778273e61a3c19aedaa44daf6b \
- --hash=sha256:fc5319db92daa516b653600794d5b9f9439a9a121f3e162f94b0e1891c7933cb
+google-crc32c==1.8.0 \
+ --hash=sha256:014a7e68d623e9a4222d663931febc3033c5c7c9730785727de2a81f87d5bab8 \
+ --hash=sha256:01f126a5cfddc378290de52095e2c7052be2ba7656a9f0caf4bcd1bfb1833f8a \
+ --hash=sha256:0470b8c3d73b5f4e3300165498e4cf25221c7eb37f1159e221d1825b6df8a7ff \
+ --hash=sha256:119fcd90c57c89f30040b47c211acee231b25a45d225e3225294386f5d258288 \
+ --hash=sha256:14f87e04d613dfa218d6135e81b78272c3b904e2a7053b841481b38a7d901411 \
+ --hash=sha256:17446feb05abddc187e5441a45971b8394ea4c1b6efd88ab0af393fd9e0a156a \
+ --hash=sha256:19b40d637a54cb71e0829179f6cb41835f0fbd9e8eb60552152a8b52c36cbe15 \
+ --hash=sha256:2a3dc3318507de089c5384cc74d54318401410f82aa65b2d9cdde9d297aca7cb \
+ --hash=sha256:3b9776774b24ba76831609ffbabce8cdf6fa2bd5e9df37b594221c7e333a81fa \
+ --hash=sha256:3cc0c8912038065eafa603b238abf252e204accab2a704c63b9e14837a854962 \
+ --hash=sha256:3d488e98b18809f5e322978d4506373599c0c13e6c5ad13e53bb44758e18d215 \
+ --hash=sha256:3ebb04528e83b2634857f43f9bb8ef5b2bbe7f10f140daeb01b58f972d04736b \
+ --hash=sha256:450dc98429d3e33ed2926fc99ee81001928d63460f8538f21a5d6060912a8e27 \
+ --hash=sha256:4b8286b659c1335172e39563ab0a768b8015e88e08329fa5321f774275fc3113 \
+ --hash=sha256:57a50a9035b75643996fbf224d6661e386c7162d1dfdab9bc4ca790947d1007f \
+ --hash=sha256:61f58b28e0b21fcb249a8247ad0db2e64114e201e2e9b4200af020f3b6242c9f \
+ --hash=sha256:6f35aaffc8ccd81ba3162443fabb920e65b1f20ab1952a31b13173a67811467d \
+ --hash=sha256:71734788a88f551fbd6a97be9668a0020698e07b2bf5b3aa26a36c10cdfb27b2 \
+ --hash=sha256:864abafe7d6e2c4c66395c1eb0fe12dc891879769b52a3d56499612ca93b6092 \
+ --hash=sha256:86cfc00fe45a0ac7359e5214a1704e51a99e757d0272554874f419f79838c5f7 \
+ --hash=sha256:87b0072c4ecc9505cfa16ee734b00cd7721d20a0f595be4d40d3d21b41f65ae2 \
+ --hash=sha256:87fa445064e7db928226b2e6f0d5304ab4cd0339e664a4e9a25029f384d9bb93 \
+ --hash=sha256:89c17d53d75562edfff86679244830599ee0a48efc216200691de8b02ab6b2b8 \
+ --hash=sha256:8b3f68782f3cbd1bce027e48768293072813469af6a61a86f6bb4977a4380f21 \
+ --hash=sha256:a428e25fb7691024de47fecfbff7ff957214da51eddded0da0ae0e0f03a2cf79 \
+ --hash=sha256:b0d1a7afc6e8e4635564ba8aa5c0548e3173e41b6384d7711a9123165f582de2 \
+ --hash=sha256:ba6aba18daf4d36ad4412feede6221414692f44d17e5428bdd81ad3fc1eee5dc \
+ --hash=sha256:cb5c869c2923d56cb0c8e6bcdd73c009c36ae39b652dbe46a05eb4ef0ad01454 \
+ --hash=sha256:d511b3153e7011a27ab6ee6bb3a5404a55b994dc1a7322c0b87b29606d9790e2 \
+ --hash=sha256:db3fe8eaf0612fc8b20fa21a5f25bd785bc3cd5be69f8f3412b0ac2ffd49e733 \
+ --hash=sha256:e6584b12cb06796d285d09e33f63309a09368b9d806a551d8036a4207ea43697 \
+ --hash=sha256:f4b51844ef67d6cf2e9425983274da75f18b1597bb2c998e1c0a0e8d46f8f651 \
+ --hash=sha256:f639065ea2042d5c034bf258a9f085eaa7af0cd250667c0635a3118e8f92c69c
# via
# google-cloud-bigtable
# google-cloud-storage
@@ -1015,6 +1014,7 @@ grpcio==1.62.3 \
# google-api-core
# google-cloud-bigquery
# google-cloud-bigquery-storage
+ # google-cloud-datastore
# googleapis-common-protos
# grpc-google-iam-v1
# grpcio-health-checking
@@ -1238,9 +1238,9 @@ imagesize==1.4.1 \
--hash=sha256:0d8d18d08f840c19d0ee7ca1fd82490fdc3729b7ac93f49870406ddde8ef8d8b \
--hash=sha256:69150444affb9cb0d5cc5a92b3676f0b2fb7cd9ae39e947a5e11a36b4497cd4a
# via sphinx
-importlib-metadata==8.7.0 \
- --hash=sha256:d13b81ad223b890aa16c5471f2ac3056cf76c5f10f82d6f9292f0b415f389000 \
- --hash=sha256:e5dd1551894c77868a30651cef00984d50e1002d06942a7101d34870c5f02afd
+importlib-metadata==8.7.1 \
+ --hash=sha256:49fef1ae6440c182052f407c8d34a68f72efc36db9ca90dc0113398f2fdde8bb \
+ --hash=sha256:5a1f80bf1daa489495071efbb095d75a634cf28a8bc299581244063b53176151
# via dask
jinja2==3.1.6 \
--hash=sha256:0137fb05990d35f1275a587e9aee6d56da821fc83491a0fb838183be43f66d6d \
@@ -1270,83 +1270,83 @@ kubernetes==33.1.0 \
--hash=sha256:544de42b24b64287f7e0aa9513c93cb503f7f40eea39b20f66810011a86eabc5 \
--hash=sha256:f64d829843a54c251061a8e7a14523b521f2dc5c896cf6d65ccf348648a88993
# via feast (setup.py)
-librt==0.7.3 \
- --hash=sha256:020c6db391268bcc8ce75105cb572df8cb659a43fd347366aaa407c366e5117a \
- --hash=sha256:0fa9ac2e49a6bee56e47573a6786cb635e128a7b12a0dc7851090037c0d397a3 \
- --hash=sha256:11ad45122bbed42cfc8b0597450660126ef28fd2d9ae1a219bc5af8406f95678 \
- --hash=sha256:120dd21d46ff875e849f1aae19346223cf15656be489242fe884036b23d39e93 \
- --hash=sha256:14569ac5dd38cfccf0a14597a88038fb16811a6fede25c67b79c6d50fc2c8fdc \
- --hash=sha256:1617bea5ab31266e152871208502ee943cb349c224846928a1173c864261375e \
- --hash=sha256:170cdb8436188347af17bf9cccf3249ba581c933ed56d926497119d4cf730cec \
- --hash=sha256:1975eda520957c6e0eb52d12968dd3609ffb7eef05d4223d097893d6daf1d8a7 \
- --hash=sha256:1fe603877e1865b5fd047a5e40379509a4a60204aa7aa0f72b16f7a41c3f0712 \
- --hash=sha256:24d70810f6e2ea853ff79338001533716b373cc0f63e2a0be5bc96129edb5fb5 \
- --hash=sha256:256793988bff98040de23c57cf36e1f4c2f2dc3dcd17537cdac031d3b681db71 \
- --hash=sha256:25711f364c64cab2c910a0247e90b51421e45dbc8910ceeb4eac97a9e132fc6f \
- --hash=sha256:2682162855a708e3270eba4b92026b93f8257c3e65278b456c77631faf0f4f7a \
- --hash=sha256:2cf9d73499486ce39eebbff5f42452518cc1f88d8b7ea4a711ab32962b176ee2 \
- --hash=sha256:2e40520c37926166c24d0c2e0f3bc3a5f46646c34bdf7b4ea9747c297d6ee809 \
- --hash=sha256:2e980cf1ed1a2420a6424e2ed884629cdead291686f1048810a817de07b5eb18 \
- --hash=sha256:2f03484b54bf4ae80ab2e504a8d99d20d551bfe64a7ec91e218010b467d77093 \
- --hash=sha256:35f1609e3484a649bb80431310ddbec81114cd86648f1d9482bc72a3b86ded2e \
- --hash=sha256:399938edbd3d78339f797d685142dd8a623dfaded023cf451033c85955e4838a \
- --hash=sha256:399bbd7bcc1633c3e356ae274a1deb8781c7bf84d9c7962cc1ae0c6e87837292 \
- --hash=sha256:3ec50cf65235ff5c02c5b747748d9222e564ad48597122a361269dd3aa808798 \
- --hash=sha256:3edbf257c40d21a42615e9e332a6b10a8bacaaf58250aed8552a14a70efd0d65 \
- --hash=sha256:440c788f707c061d237c1e83edf6164ff19f5c0f823a3bf054e88804ebf971ec \
- --hash=sha256:44b3689b040df57f492e02cd4f0bacd1b42c5400e4b8048160c9d5e866de8abe \
- --hash=sha256:4887c29cadbdc50640179e3861c276325ff2986791e6044f73136e6e798ff806 \
- --hash=sha256:5460d99ed30f043595bbdc888f542bad2caeb6226b01c33cda3ae444e8f82d42 \
- --hash=sha256:550fdbfbf5bba6a2960b27376ca76d6aaa2bd4b1a06c4255edd8520c306fcfc0 \
- --hash=sha256:56f2a47beda8409061bc1c865bef2d4bd9ff9255219402c0817e68ab5ad89aed \
- --hash=sha256:572a24fc5958c61431da456a0ef1eeea6b4989d81eeb18b8e5f1f3077592200b \
- --hash=sha256:59cb0470612d21fa1efddfa0dd710756b50d9c7fb6c1236bbf8ef8529331dc70 \
- --hash=sha256:6038ccbd5968325a5d6fd393cf6e00b622a8de545f0994b89dd0f748dcf3e19e \
- --hash=sha256:6488e69d408b492e08bfb68f20c4a899a354b4386a446ecd490baff8d0862720 \
- --hash=sha256:687403cced6a29590e6be6964463835315905221d797bc5c934a98750fe1a9af \
- --hash=sha256:6b407c23f16ccc36614c136251d6b32bf30de7a57f8e782378f1107be008ddb0 \
- --hash=sha256:6b4e7bff1d76dd2b46443078519dc75df1b5e01562345f0bb740cea5266d8218 \
- --hash=sha256:6bdd9adfca615903578d2060ee8a6eb1c24eaf54919ff0ddc820118e5718931b \
- --hash=sha256:6eb9295c730e26b849ed1f4022735f36863eb46b14b6e10604c1c39b8b5efaea \
- --hash=sha256:703456146dc2bf430f7832fd1341adac5c893ec3c1430194fdcefba00012555c \
- --hash=sha256:754a0d09997095ad764ccef050dd5bf26cbf457aab9effcba5890dad081d879e \
- --hash=sha256:7af7785f5edd1f418da09a8cdb9ec84b0213e23d597413e06525340bcce1ea4f \
- --hash=sha256:7b29e97273bd6999e2bfe9fe3531b1f4f64effd28327bced048a33e49b99674a \
- --hash=sha256:7b4f57f7a0c65821c5441d98c47ff7c01d359b1e12328219709bdd97fdd37f90 \
- --hash=sha256:8837d5a52a2d7aa9f4c3220a8484013aed1d8ad75240d9a75ede63709ef89055 \
- --hash=sha256:8ccadf260bb46a61b9c7e89e2218f6efea9f3eeaaab4e3d1f58571890e54858e \
- --hash=sha256:8d8cf653e798ee4c4e654062b633db36984a1572f68c3aa25e364a0ddfbbb910 \
- --hash=sha256:93b2a1f325fefa1482516ced160c8c7b4b8d53226763fa6c93d151fa25164207 \
- --hash=sha256:9f0e0927efe87cd42ad600628e595a1a0aa1c64f6d0b55f7e6059079a428641a \
- --hash=sha256:a59a69deeb458c858b8fea6acf9e2acd5d755d76cd81a655256bc65c20dfff5b \
- --hash=sha256:a9f9b661f82693eb56beb0605156c7fca57f535704ab91837405913417d6990b \
- --hash=sha256:abfc57cab3c53c4546aee31859ef06753bfc136c9d208129bad23e2eca39155a \
- --hash=sha256:aca73d70c3f553552ba9133d4a09e767dcfeee352d8d8d3eb3f77e38a3beb3ed \
- --hash=sha256:adeaa886d607fb02563c1f625cf2ee58778a2567c0c109378da8f17ec3076ad7 \
- --hash=sha256:b278a9248a4e3260fee3db7613772ca9ab6763a129d6d6f29555e2f9b168216d \
- --hash=sha256:b7c1239b64b70be7759554ad1a86288220bbb04d68518b527783c4ad3fb4f80b \
- --hash=sha256:bf8c7735fbfc0754111f00edda35cf9e98a8d478de6c47b04eaa9cef4300eaa7 \
- --hash=sha256:c634a0a6db395fdaba0361aa78395597ee72c3aad651b9a307a3a7eaf5efd67e \
- --hash=sha256:cad9971881e4fec00d96af7eaf4b63aa7a595696fc221808b0d3ce7ca9743258 \
- --hash=sha256:cbdb3f337c88b43c3b49ca377731912c101178be91cb5071aac48faa898e6f8e \
- --hash=sha256:cd8551aa21df6c60baa2624fd086ae7486bdde00c44097b32e1d1b1966e365e0 \
- --hash=sha256:d09f677693328503c9e492e33e9601464297c01f9ebd966ea8fc5308f3069bfd \
- --hash=sha256:d376a35c6561e81d2590506804b428fc1075fcc6298fc5bb49b771534c0ba010 \
- --hash=sha256:d39079379a9a28e74f4d57dc6357fa310a1977b51ff12239d7271ec7e71d67f5 \
- --hash=sha256:d86f94743a11873317094326456b23f8a5788bad9161fd2f0e52088c33564620 \
- --hash=sha256:d91e60ac44bbe3a77a67af4a4c13114cbe9f6d540337ce22f2c9eaf7454ca71f \
- --hash=sha256:d9883b2d819ce83f87ba82a746c81d14ada78784db431e57cc9719179847376e \
- --hash=sha256:e094e445c37c57e9ec612847812c301840239d34ccc5d153a982fa9814478c60 \
- --hash=sha256:e19acfde38cb532a560b98f473adc741c941b7a9bc90f7294bc273d08becb58b \
- --hash=sha256:e32d43610dff472eab939f4d7fbdd240d1667794192690433672ae22d7af8445 \
- --hash=sha256:ed028fc3d41adda916320712838aec289956c89b4f0a361ceadf83a53b4c047a \
- --hash=sha256:ef59c938f72bdbc6ab52dc50f81d0637fde0f194b02d636987cea2ab30f8f55a \
- --hash=sha256:f3d4801db8354436fd3936531e7f0e4feb411f62433a6b6cb32bb416e20b529f \
- --hash=sha256:f57aca20e637750a2c18d979f7096e2c2033cc40cf7ed201494318de1182f135 \
- --hash=sha256:f9da128d0edf990cf0d2ca011b02cd6f639e79286774bd5b0351245cbb5a6e51 \
- --hash=sha256:fbd7351d43b80d9c64c3cfcb50008f786cc82cba0450e8599fdd64f264320bd3 \
- --hash=sha256:fcb72249ac4ea81a7baefcbff74df7029c3cb1cf01a711113fa052d563639c9c \
- --hash=sha256:ff21c554304e8226bf80c3a7754be27c6c3549a9fec563a03c06ee8f494da8fc
+librt==0.7.5 \
+ --hash=sha256:060bde69c3604f694bd8ae21a780fe8be46bb3dbb863642e8dfc75c931ca8eee \
+ --hash=sha256:08153ea537609d11f774d2bfe84af39d50d5c9ca3a4d061d946e0c9d8bce04a1 \
+ --hash=sha256:0b4791202296ad51ac09a3ff58eb49d9da8e3a4009167a6d76ac418a974e5fd4 \
+ --hash=sha256:0b7f080ba30601dfa3e3deed3160352273e1b9bc92e652f51103c3e9298f7899 \
+ --hash=sha256:0e2bf8f91093fac43e3eaebacf777f12fd539dce9ec5af3efc6d8424e96ccd49 \
+ --hash=sha256:118716de5ad6726332db1801bc90fa6d94194cd2e07c1a7822cebf12c496714d \
+ --hash=sha256:168e04663e126416ba712114050f413ac306759a1791d87b7c11d4428ba75760 \
+ --hash=sha256:191cbd42660446d67cf7a95ac7bfa60f49b8b3b0417c64f216284a1d86fc9335 \
+ --hash=sha256:263f4fae9eba277513357c871275b18d14de93fd49bf5e43dc60a97b81ad5eb8 \
+ --hash=sha256:265729b551a2dd329cc47b323a182fb7961af42abf21e913c9dd7d3331b2f3c2 \
+ --hash=sha256:26b46620e1e0e45af510d9848ea0915e7040605dd2ae94ebefb6c962cbb6f7ec \
+ --hash=sha256:29c8d2fae11d4379ea207ba7fc69d43237e42cf8a9f90ec6e05993687e6d648b \
+ --hash=sha256:2fcbf2e135c11f721193aa5f42ba112bb1046afafbffd407cbc81d8d735c74d0 \
+ --hash=sha256:39183abee670bc37b85f11e86c44a9cad1ed6efa48b580083e89ecee13dd9717 \
+ --hash=sha256:3919c9407faeeee35430ae135e3a78acd4ecaaaa73767529e2c15ca1d73ba325 \
+ --hash=sha256:3c98a8d0ac9e2a7cb8ff8c53e5d6e8d82bfb2839abf144fdeaaa832f2a12aa45 \
+ --hash=sha256:3dd58f7ce20360c6ce0c04f7bd9081c7f9c19fc6129a3c705d0c5a35439f201d \
+ --hash=sha256:46aa91813c267c3f60db75d56419b42c0c0b9748ec2c568a0e3588e543fb4233 \
+ --hash=sha256:49c596cd18e90e58b7caa4d7ca7606049c1802125fcff96b8af73fa5c3870e4d \
+ --hash=sha256:532ddc6a8a6ca341b1cd7f4d999043e4c71a212b26fe9fd2e7f1e8bb4e873544 \
+ --hash=sha256:54d2aef0b0f5056f130981ad45081b278602ff3657fe16c88529f5058038e802 \
+ --hash=sha256:553dc58987d1d853adda8aeadf4db8e29749f0b11877afcc429a9ad892818ae2 \
+ --hash=sha256:584cb3e605ec45ba350962cec853e17be0a25a772f21f09f1e422f7044ae2a7d \
+ --hash=sha256:5cd3afd71e9bc146203b6c8141921e738364158d4aa7cdb9a874e2505163770f \
+ --hash=sha256:63055d3dda433ebb314c9f1819942f16a19203c454508fdb2d167613f7017169 \
+ --hash=sha256:654fdc971c76348a73af5240d8e2529265b9a7ba6321e38dd5bae7b0d4ab3abe \
+ --hash=sha256:6b7b58913d475911f6f33e8082f19dd9b120c4f4a5c911d07e395d67b81c6982 \
+ --hash=sha256:6e860909fea75baef941ee6436e0453612505883b9d0d87924d4fda27865b9a2 \
+ --hash=sha256:730be847daad773a3c898943cf67fb9845a3961d06fb79672ceb0a8cd8624cfa \
+ --hash=sha256:732e0aa0385b59a1b2545159e781c792cc58ce9c134249233a7c7250a44684c4 \
+ --hash=sha256:75965c1f4efb7234ff52a58b729d245a21e87e4b6a26a0ec08052f02b16274e4 \
+ --hash=sha256:7a488908a470451338607650f1c064175094aedebf4a4fa37890682e30ce0b57 \
+ --hash=sha256:81056e01bba1394f1d92904ec61a4078f66df785316275edbaf51d90da8c6e26 \
+ --hash=sha256:82f3f088482e2229387eadf8215c03f7726d56f69cce8c0c40f0795aebc9b361 \
+ --hash=sha256:84d4a6b9efd6124f728558a18e79e7cc5c5d4efc09b2b846c910de7e564f5bad \
+ --hash=sha256:85f485b7471571e99fab4f44eeb327dc0e1f814ada575f3fa85e698417d8a54e \
+ --hash=sha256:8a3cfb15961e7333ea6ef033dc574af75153b5c230d5ad25fbcd55198f21e0cf \
+ --hash=sha256:8bb7883c1e94ceb87c2bf81385266f032da09cd040e804cc002f2c9d6b842e2f \
+ --hash=sha256:8dcae24de1bc9da93aa689cb6313c70e776d7cea2fcf26b9b6160fedfe6bd9af \
+ --hash=sha256:9937574e6d842f359b8585903d04f5b4ab62277a091a93e02058158074dc52f2 \
+ --hash=sha256:9bbb8facc5375476d392990dd6a71f97e4cb42e2ac66f32e860f6e47299d5e89 \
+ --hash=sha256:9c08527055fbb03c641c15bbc5b79dd2942fb6a3bd8dabf141dd7e97eeea4904 \
+ --hash=sha256:9cffa3ef0af29687455161cb446eff059bf27607f95163d6a37e27bcb37180f6 \
+ --hash=sha256:9f85f9b5db87b0f52e53c68ad2a0c5a53e00afa439bd54a1723742a2b1021276 \
+ --hash=sha256:a82d5a0ee43aeae2116d7292c77cc8038f4841830ade8aa922e098933b468b9e \
+ --hash=sha256:a9eacbf983319b26b5f340a2e0cd47ac1ee4725a7f3a72fd0f15063c934b69d6 \
+ --hash=sha256:ab4b0d3bee6f6ff7017e18e576ac7e41a06697d8dea4b8f3ab9e0c8e1300c409 \
+ --hash=sha256:af69d9e159575e877c7546d1ee817b4ae089aa221dd1117e20c24ad8dc8659c7 \
+ --hash=sha256:b1795c4b2789b458fa290059062c2f5a297ddb28c31e704d27e161386469691a \
+ --hash=sha256:b591c094afd0ffda820e931148c9e48dc31a556dc5b2b9b3cc552fa710d858e4 \
+ --hash=sha256:b8e0fd344bad57026a8f4ccfaf406486c2fc991838050c2fef156170edc3b775 \
+ --hash=sha256:ba1077c562a046208a2dc6366227b3eeae8f2c2ab4b41eaf4fd2fa28cece4203 \
+ --hash=sha256:bb41f04046b4f22b1e7ba5ef513402cd2e3477ec610e5f92d38fe2bba383d419 \
+ --hash=sha256:c039bbf79a9a2498404d1ae7e29a6c175e63678d7a54013a97397c40aee026c5 \
+ --hash=sha256:c566a4672564c5d54d8ab65cdaae5a87ee14c1564c1a2ddc7a9f5811c750f023 \
+ --hash=sha256:cda8b025875946ffff5a9a7590bf9acde3eb02cb6200f06a2d3e691ef3d9955b \
+ --hash=sha256:cdb001a1a0e4f41e613bca2c0fc147fc8a7396f53fc94201cbfd8ec7cd69ca4b \
+ --hash=sha256:cdde31759bd8888f3ef0eebda80394a48961328a17c264dce8cc35f4b9cde35d \
+ --hash=sha256:d2cc7d187e8c6e9b7bdbefa9697ce897a704ea7a7ce844f2b4e0e2aa07ae51d3 \
+ --hash=sha256:d7aa33153a5bb0bac783d2c57885889b1162823384e8313d47800a0e10d0070e \
+ --hash=sha256:d7c72c8756eeb3aefb1b9e3dac7c37a4a25db63640cac0ab6fc18e91a0edf05a \
+ --hash=sha256:dd810f2d39c526c42ea205e0addad5dc08ef853c625387806a29d07f9d150d9b \
+ --hash=sha256:ddc0ab9dbc5f9ceaf2bf7a367bf01f2697660e908f6534800e88f43590b271db \
+ --hash=sha256:ddc4a16207f88f9597b397fc1f60781266d13b13de922ff61c206547a29e4bbd \
+ --hash=sha256:de4221a1181fa9c8c4b5f35506ed6f298948f44003d84d2a8b9885d7e01e6cfa \
+ --hash=sha256:df2e210400b28e50994477ebf82f055698c79797b6ee47a1669d383ca33263e1 \
+ --hash=sha256:df3146d52465b3b6397d25d513f428cb421c18df65b7378667bb5f1e3cc45805 \
+ --hash=sha256:e47fc52602ffc374e69bf1b76536dc99f7f6dd876bd786c8213eaa3598be030a \
+ --hash=sha256:e9e9c988b5ffde7be02180f864cbd17c0b0c1231c235748912ab2afa05789c25 \
+ --hash=sha256:ea1b60b86595a5dc1f57b44a801a1c4d8209c0a69518391d349973a4491408e6 \
+ --hash=sha256:edf6b465306215b19dbe6c3fb63cf374a8f3e1ad77f3b4c16544b83033bbb67b \
+ --hash=sha256:f02c4337bf271c4f06637f5ff254fad2238c0b8e32a3a480ebb2fc5e26f754a5 \
+ --hash=sha256:f7f51ffe59f4556243d3cc82d827bde74765f594fa3ceb80ec4de0c13ccd3416 \
+ --hash=sha256:f952e1a78c480edee8fb43aa2bf2e84dcd46c917d44f8065b883079d3893e8fc \
+ --hash=sha256:fb565b4219abc8ea2402e61c7ba648a62903831059ed3564fa1245cc245d58d7 \
+ --hash=sha256:fee15c2a190ef389f14928135c6fb2d25cd3fdb7887bfd9a7b444bbdc8c06b96
# via mypy
locket==1.0.0 \
--hash=sha256:5c0d4c052a8bbbf750e056a8e65ccd309086f4f0f18a2eac306a8dfa4112a632 \
@@ -1447,9 +1447,9 @@ markupsafe==3.0.3 \
--hash=sha256:f9e130248f4462aaa8e2552d547f36ddadbeaa573879158d721bbd33dfe4743a \
--hash=sha256:fed51ac40f757d41b7c48425901843666a6677e3e8eb0abcff09e4ba6e664f50
# via jinja2
-mcp==1.23.3 \
- --hash=sha256:32768af4b46a1b4f7df34e2bfdf5c6011e7b63d7f1b0e321d0fdef4cd6082031 \
- --hash=sha256:b3b0da2cc949950ce1259c7bfc1b081905a51916fcd7c8182125b85e70825201
+mcp==1.25.0 \
+ --hash=sha256:56310361ebf0364e2d438e5b45f7668cbb124e158bb358333cd06e49e83a6802 \
+ --hash=sha256:b37c38144a666add0862614cc79ec276e97d72aa8ca26d622818d4e278b9721a
# via fastapi-mcp
mdurl==0.1.2 \
--hash=sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8 \
@@ -1739,125 +1739,123 @@ multidict==6.7.0 \
# aiobotocore
# aiohttp
# yarl
-mypy==1.19.0 \
- --hash=sha256:0c01c99d626380752e527d5ce8e69ffbba2046eb8a060db0329690849cf9b6f9 \
- --hash=sha256:0dde5cb375cb94deff0d4b548b993bec52859d1651e073d63a1386d392a95495 \
- --hash=sha256:0e3c3d1e1d62e678c339e7ade72746a9e0325de42cd2cccc51616c7b2ed1a018 \
- --hash=sha256:0ea4fd21bb48f0da49e6d3b37ef6bd7e8228b9fe41bbf4d80d9364d11adbd43c \
- --hash=sha256:0fb3115cb8fa7c5f887c8a8d81ccdcb94cff334684980d847e5a62e926910e1d \
- --hash=sha256:11f7254c15ab3f8ed68f8e8f5cbe88757848df793e31c36aaa4d4f9783fd08ab \
- --hash=sha256:120cffe120cca5c23c03c77f84abc0c14c5d2e03736f6c312480020082f1994b \
- --hash=sha256:16f76ff3f3fd8137aadf593cb4607d82634fca675e8211ad75c43d86033ee6c6 \
- --hash=sha256:1cf9c59398db1c68a134b0b5354a09a1e124523f00bacd68e553b8bd16ff3299 \
- --hash=sha256:318ba74f75899b0e78b847d8c50821e4c9637c79d9a59680fc1259f29338cb3e \
- --hash=sha256:3210d87b30e6af9c8faed61be2642fcbe60ef77cec64fa1ef810a630a4cf671c \
- --hash=sha256:34ec1ac66d31644f194b7c163d7f8b8434f1b49719d403a5d26c87fff7e913f7 \
- --hash=sha256:37af5166f9475872034b56c5efdcf65ee25394e9e1d172907b84577120714364 \
- --hash=sha256:3ad925b14a0bb99821ff6f734553294aa6a3440a8cb082fe1f5b84dfb662afb1 \
- --hash=sha256:510c014b722308c9bd377993bcbf9a07d7e0692e5fa8fc70e639c1eb19fc6bee \
- --hash=sha256:6016c52ab209919b46169651b362068f632efcd5eb8ef9d1735f6f86da7853b2 \
- --hash=sha256:6148ede033982a8c5ca1143de34c71836a09f105068aaa8b7d5edab2b053e6c8 \
- --hash=sha256:63ea6a00e4bd6822adbfc75b02ab3653a17c02c4347f5bb0cf1d5b9df3a05835 \
- --hash=sha256:7686ed65dbabd24d20066f3115018d2dce030d8fa9db01aa9f0a59b6813e9f9e \
- --hash=sha256:7a500ab5c444268a70565e374fc803972bfd1f09545b13418a5174e29883dab7 \
- --hash=sha256:8f44f2ae3c58421ee05fe609160343c25f70e3967f6e32792b5a78006a9d850f \
- --hash=sha256:a18d8abdda14035c5718acb748faec09571432811af129bf0d9e7b2d6699bf18 \
- --hash=sha256:a31e4c28e8ddb042c84c5e977e28a21195d086aaffaf08b016b78e19c9ef8106 \
- --hash=sha256:a9ac09e52bb0f7fb912f5d2a783345c72441a08ef56ce3e17c1752af36340a39 \
- --hash=sha256:b9d491295825182fba01b6ffe2c6fe4e5a49dbf4e2bb4d1217b6ced3b4797bc6 \
- --hash=sha256:c14a98bc63fd867530e8ec82f217dae29d0550c86e70debc9667fff1ec83284e \
- --hash=sha256:c3385246593ac2b97f155a0e9639be906e73534630f663747c71908dfbf26134 \
- --hash=sha256:cabbee74f29aa9cd3b444ec2f1e4fa5a9d0d746ce7567a6a609e224429781f53 \
- --hash=sha256:cb64b0ba5980466a0f3f9990d1c582bcab8db12e29815ecb57f1408d99b4bff7 \
- --hash=sha256:cf7d84f497f78b682edd407f14a7b6e1a2212b433eedb054e2081380b7395aa3 \
- --hash=sha256:e2c1101ab41d01303103ab6ef82cbbfedb81c1a060c868fa7cc013d573d37ab5 \
- --hash=sha256:f188dcf16483b3e59f9278c4ed939ec0254aa8a60e8fc100648d9ab5ee95a431 \
- --hash=sha256:f2e36bed3c6d9b5f35d28b63ca4b727cb0228e480826ffc8953d1892ddc8999d \
- --hash=sha256:f3e19e3b897562276bb331074d64c076dbdd3e79213f36eed4e592272dabd760 \
- --hash=sha256:f6b874ca77f733222641e5c46e4711648c4037ea13646fd0cdc814c2eaec2528 \
- --hash=sha256:f75e60aca3723a23511948539b0d7ed514dda194bc3755eae0bfc7a6b4887aa7 \
- --hash=sha256:fc51a5b864f73a3a182584b1ac75c404396a17eced54341629d8bdcb644a5bba \
- --hash=sha256:fd4a985b2e32f23bead72e2fb4bbe5d6aceee176be471243bd831d5b2644672d
+mypy==1.19.1 \
+ --hash=sha256:016f2246209095e8eda7538944daa1d60e1e8134d98983b9fc1e92c1fc0cb8dd \
+ --hash=sha256:022ea7279374af1a5d78dfcab853fe6a536eebfda4b59deab53cd21f6cd9f00b \
+ --hash=sha256:06e6170bd5836770e8104c8fdd58e5e725cfeb309f0a6c681a811f557e97eac1 \
+ --hash=sha256:19d88bb05303fe63f71dd2c6270daca27cb9401c4ca8255fe50d1d920e0eb9ba \
+ --hash=sha256:21761006a7f497cb0d4de3d8ef4ca70532256688b0523eee02baf9eec895e27b \
+ --hash=sha256:28902ee51f12e0f19e1e16fbe2f8f06b6637f482c459dd393efddd0ec7f82045 \
+ --hash=sha256:2899753e2f61e571b3971747e302d5f420c3fd09650e1951e99f823bc3089dac \
+ --hash=sha256:2abb24cf3f17864770d18d673c85235ba52456b36a06b6afc1e07c1fdcd3d0e6 \
+ --hash=sha256:34c81968774648ab5ac09c29a375fdede03ba253f8f8287847bd480782f73a6a \
+ --hash=sha256:409088884802d511ee52ca067707b90c883426bd95514e8cfda8281dc2effe24 \
+ --hash=sha256:481daf36a4c443332e2ae9c137dfee878fcea781a2e3f895d54bd3002a900957 \
+ --hash=sha256:4b84a7a18f41e167f7995200a1d07a4a6810e89d29859df936f1c3923d263042 \
+ --hash=sha256:4f28f99c824ecebcdaa2e55d82953e38ff60ee5ec938476796636b86afa3956e \
+ --hash=sha256:5f05aa3d375b385734388e844bc01733bd33c644ab48e9684faa54e5389775ec \
+ --hash=sha256:7bcfc336a03a1aaa26dfce9fff3e287a3ba99872a157561cbfcebe67c13308e3 \
+ --hash=sha256:804bd67b8054a85447c8954215a906d6eff9cabeabe493fb6334b24f4bfff718 \
+ --hash=sha256:8bb5c6f6d043655e055be9b542aa5f3bdd30e4f3589163e85f93f3640060509f \
+ --hash=sha256:a009ffa5a621762d0c926a078c2d639104becab69e79538a494bcccb62cc0331 \
+ --hash=sha256:a8174a03289288c1f6c46d55cef02379b478bfbc8e358e02047487cad44c6ca1 \
+ --hash=sha256:ab43590f9cd5108f41aacf9fca31841142c786827a74ab7cc8a2eacb634e09a1 \
+ --hash=sha256:b10e7c2cd7870ba4ad9b2d8a6102eb5ffc1f16ca35e3de6bfa390c1113029d13 \
+ --hash=sha256:b13cfdd6c87fc3efb69ea4ec18ef79c74c3f98b4e5498ca9b85ab3b2c2329a67 \
+ --hash=sha256:b64d987153888790bcdb03a6473d321820597ab8dd9243b27a92153c4fa50fd2 \
+ --hash=sha256:b7951a701c07ea584c4fe327834b92a30825514c868b1f69c30445093fdd9d5a \
+ --hash=sha256:bdb12f69bcc02700c2b47e070238f42cb87f18c0bc1fc4cdb4fb2bc5fd7a3b8b \
+ --hash=sha256:c35d298c2c4bba75feb2195655dfea8124d855dfd7343bf8b8c055421eaf0cf8 \
+ --hash=sha256:c608937067d2fc5a4dd1a5ce92fd9e1398691b8c5d012d66e1ddd430e9244376 \
+ --hash=sha256:c9a6538e0415310aad77cb94004ca6482330fece18036b5f360b62c45814c4ef \
+ --hash=sha256:d8dfc6ab58ca7dda47d9237349157500468e404b17213d44fc1cb77bce532288 \
+ --hash=sha256:da4869fc5e7f62a88f3fe0b5c919d1d9f7ea3cef92d3689de2823fd27e40aa75 \
+ --hash=sha256:de759aafbae8763283b2ee5869c7255391fbc4de3ff171f8f030b5ec48381b74 \
+ --hash=sha256:e3157c7594ff2ef1634ee058aafc56a82db665c9438fd41b390f3bde1ab12250 \
+ --hash=sha256:e3f276d8493c3c97930e354b2595a44a21348b320d859fb4a2b9f66da9ed27ab \
+ --hash=sha256:ee4c11e460685c3e0c64a4c5de82ae143622410950d6be863303a1c4ba0e36d6 \
+ --hash=sha256:f1235f5ea01b7db5468d53ece6aaddf1ad0b88d9e7462b86ef96fe04995d7247 \
+ --hash=sha256:f7cee03c9a2e2ee26ec07479f38ea9c884e301d42c6d43a19d20fb014e3ba925 \
+ --hash=sha256:f859fb09d9583a985be9a493d5cfc5515b56b08f7447759a0c5deaf68d80506e \
+ --hash=sha256:ffcebe56eb09ff0c0885e750036a095e23793ba6c2e894e7e63f6d89ad51f22e
# via sqlalchemy
mypy-extensions==1.1.0 \
--hash=sha256:1be4cccdb0f2482337c4743e60421de3a356cd97508abadd57d47403e94f5505 \
--hash=sha256:52e68efc3284861e772bbcd66823fde5ae21fd2fdb51c62a211403730b916558
# via mypy
-numpy==2.3.5 \
- --hash=sha256:00dc4e846108a382c5869e77c6ed514394bdeb3403461d25a829711041217d5b \
- --hash=sha256:0472f11f6ec23a74a906a00b48a4dcf3849209696dff7c189714511268d103ae \
- --hash=sha256:04822c00b5fd0323c8166d66c701dc31b7fbd252c100acd708c48f763968d6a3 \
- --hash=sha256:052e8c42e0c49d2575621c158934920524f6c5da05a1d3b9bab5d8e259e045f0 \
- --hash=sha256:09a1bea522b25109bf8e6f3027bd810f7c1085c64a0c7ce050c1676ad0ba010b \
- --hash=sha256:0cd00b7b36e35398fa2d16af7b907b65304ef8bb4817a550e06e5012929830fa \
- --hash=sha256:0d8163f43acde9a73c2a33605353a4f1bc4798745a8b1d73183b28e5b435ae28 \
- --hash=sha256:1062fde1dcf469571705945b0f221b73928f34a20c904ffb45db101907c3454e \
- --hash=sha256:11e06aa0af8c0f05104d56450d6093ee639e15f24ecf62d417329d06e522e017 \
- --hash=sha256:17531366a2e3a9e30762c000f2c43a9aaa05728712e25c11ce1dbe700c53ad41 \
- --hash=sha256:1978155dd49972084bd6ef388d66ab70f0c323ddee6f693d539376498720fb7e \
- --hash=sha256:1ed1ec893cff7040a02c8aa1c8611b94d395590d553f6b53629a4461dc7f7b63 \
- --hash=sha256:2dcd0808a421a482a080f89859a18beb0b3d1e905b81e617a188bd80422d62e9 \
- --hash=sha256:2e2eb32ddb9ccb817d620ac1d8dae7c3f641c1e5f55f531a33e8ab97960a75b8 \
- --hash=sha256:2feae0d2c91d46e59fcd62784a3a83b3fb677fead592ce51b5a6fbb4f95965ff \
- --hash=sha256:3095bdb8dd297e5920b010e96134ed91d852d81d490e787beca7e35ae1d89cf7 \
- --hash=sha256:30bc11310e8153ca664b14c5f1b73e94bd0503681fcf136a163de856f3a50139 \
- --hash=sha256:3101e5177d114a593d79dd79658650fe28b5a0d8abeb8ce6f437c0e6df5be1a4 \
- --hash=sha256:396084a36abdb603546b119d96528c2f6263921c50df3c8fd7cb28873a237748 \
- --hash=sha256:3997b5b3c9a771e157f9aae01dd579ee35ad7109be18db0e85dbdbe1de06e952 \
- --hash=sha256:414802f3b97f3c1eef41e530aaba3b3c1620649871d8cb38c6eaff034c2e16bd \
- --hash=sha256:51c1e14eb1e154ebd80e860722f9e6ed6ec89714ad2db2d3aa33c31d7c12179b \
- --hash=sha256:51c55fe3451421f3a6ef9a9c1439e82101c57a2c9eab9feb196a62b1a10b58ce \
- --hash=sha256:5ee6609ac3604fa7780e30a03e5e241a7956f8e2fcfe547d51e3afa5247ac47f \
- --hash=sha256:612a95a17655e213502f60cfb9bf9408efdc9eb1d5f50535cc6eb365d11b42b5 \
- --hash=sha256:6203fdf9f3dc5bdaed7319ad8698e685c7a3be10819f41d32a0723e611733b42 \
- --hash=sha256:63c0e9e7eea69588479ebf4a8a270d5ac22763cc5854e9a7eae952a3908103f7 \
- --hash=sha256:66f85ce62c70b843bab1fb14a05d5737741e74e28c7b8b5a064de10142fad248 \
- --hash=sha256:6cf9b429b21df6b99f4dee7a1218b8b7ffbbe7df8764dc0bd60ce8a0708fed1e \
- --hash=sha256:70b37199913c1bd300ff6e2693316c6f869c7ee16378faf10e4f5e3275b299c3 \
- --hash=sha256:727fd05b57df37dc0bcf1a27767a3d9a78cbbc92822445f32cc3436ba797337b \
- --hash=sha256:74ae7b798248fe62021dbf3c914245ad45d1a6b0cb4a29ecb4b31d0bfbc4cc3e \
- --hash=sha256:784db1dcdab56bf0517743e746dfb0f885fc68d948aba86eeec2cba234bdf1c0 \
- --hash=sha256:86945f2ee6d10cdfd67bcb4069c1662dd711f7e2a4343db5cecec06b87cf31aa \
- --hash=sha256:86d835afea1eaa143012a2d7a3f45a3adce2d7adc8b4961f0b362214d800846a \
- --hash=sha256:872a5cf366aec6bb1147336480fef14c9164b154aeb6542327de4970282cd2f5 \
- --hash=sha256:8b973c57ff8e184109db042c842423ff4f60446239bd585a5131cc47f06f789d \
- --hash=sha256:8cba086a43d54ca804ce711b2a940b16e452807acebe7852ff327f1ecd49b0d4 \
- --hash=sha256:8f7f0e05112916223d3f438f293abf0727e1181b5983f413dfa2fefc4098245c \
- --hash=sha256:900218e456384ea676e24ea6a0417f030a3b07306d29d7ad843957b40a9d8d52 \
- --hash=sha256:93eebbcf1aafdf7e2ddd44c2923e2672e1010bddc014138b229e49725b4d6be5 \
- --hash=sha256:9c75442b2209b8470d6d5d8b1c25714270686f14c749028d2199c54e29f20b4d \
- --hash=sha256:9ee2197ef8c4f0dfe405d835f3b6a14f5fee7782b5de51ba06fb65fc9b36e9f1 \
- --hash=sha256:a414504bef8945eae5f2d7cb7be2d4af77c5d1cb5e20b296c2c25b61dff2900c \
- --hash=sha256:a4b9159734b326535f4dd01d947f919c6eefd2d9827466a696c44ced82dfbc18 \
- --hash=sha256:a80afd79f45f3c4a7d341f13acbe058d1ca8ac017c165d3fa0d3de6bc1a079d7 \
- --hash=sha256:aa5bc7c5d59d831d9773d1170acac7893ce3a5e130540605770ade83280e7188 \
- --hash=sha256:acfd89508504a19ed06ef963ad544ec6664518c863436306153e13e94605c218 \
- --hash=sha256:aeffcab3d4b43712bb7a60b65f6044d444e75e563ff6180af8f98dd4b905dfd2 \
- --hash=sha256:afaffc4393205524af9dfa400fa250143a6c3bc646c08c9f5e25a9f4b4d6a903 \
- --hash=sha256:b0c7088a73aef3d687c4deef8452a3ac7c1be4e29ed8bf3b366c8111128ac60c \
- --hash=sha256:b46b4ec24f7293f23adcd2d146960559aaf8020213de8ad1909dba6c013bf89c \
- --hash=sha256:b501b5fa195cc9e24fe102f21ec0a44dffc231d2af79950b451e0d99cea02234 \
- --hash=sha256:bf06bc2af43fa8d32d30fae16ad965663e966b1a3202ed407b84c989c3221e82 \
- --hash=sha256:c804e3a5aba5460c73955c955bdbd5c08c354954e9270a2c1565f62e866bdc39 \
- --hash=sha256:c8a9958e88b65c3b27e22ca2a076311636850b612d6bbfb76e8d156aacde2aaf \
- --hash=sha256:cc0a57f895b96ec78969c34f682c602bf8da1a0270b09bc65673df2e7638ec20 \
- --hash=sha256:cc8920d2ec5fa99875b670bb86ddeb21e295cb07aa331810d9e486e0b969d946 \
- --hash=sha256:ccc933afd4d20aad3c00bcef049cb40049f7f196e0397f1109dba6fed63267b0 \
- --hash=sha256:ce581db493ea1a96c0556360ede6607496e8bf9b3a8efa66e06477267bc831e9 \
- --hash=sha256:d0f23b44f57077c1ede8c5f26b30f706498b4862d3ff0a7298b8411dd2f043ff \
- --hash=sha256:d21644de1b609825ede2f48be98dfde4656aefc713654eeee280e37cadc4e0ad \
- --hash=sha256:d6889ec4ec662a1a37eb4b4fb26b6100841804dac55bd9df579e326cdc146227 \
- --hash=sha256:de5672f4a7b200c15a4127042170a694d4df43c992948f5e1af57f0174beed10 \
- --hash=sha256:e6a0bc88393d65807d751a614207b7129a310ca4fe76a74e5c7da5fa5671417e \
- --hash=sha256:ed89927b86296067b4f81f108a2271d8926467a8868e554eaf370fc27fa3ccaf \
- --hash=sha256:ee3888d9ff7c14604052b2ca5535a30216aa0a58e948cdd3eeb8d3415f638769 \
- --hash=sha256:f0963b55cdd70fad460fa4c1341f12f976bb26cb66021a5580329bd498988310 \
- --hash=sha256:f16417ec91f12f814b10bafe79ef77e70113a2f5f7018640e7425ff979253425 \
- --hash=sha256:f28620fe26bee16243be2b7b874da327312240a7cdc38b769a697578d2100013 \
- --hash=sha256:f4255143f5160d0de972d28c8f9665d882b5f61309d8362fdd3e103cf7bf010c \
- --hash=sha256:ffac52f28a7849ad7576293c0cb7b9f08304e8f7d738a8cb8a90ec4c55a998eb \
- --hash=sha256:ffe22d2b05504f786c867c8395de703937f934272eb67586817b46188b4ded6d \
- --hash=sha256:fffe29a1ef00883599d1dc2c51aa2e5d80afe49523c261a74933df395c15c520
+numpy==2.4.0 \
+ --hash=sha256:009bd0ea12d3c784b6639a8457537016ce5172109e585338e11334f6a7bb88ee \
+ --hash=sha256:02a2038eb27f9443a8b266a66911e926566b5a6ffd1a689b588f7f35b81e7dc3 \
+ --hash=sha256:0804a8e4ab070d1d35496e65ffd3cf8114c136a2b81f61dfab0de4b218aacfd5 \
+ --hash=sha256:0feafc9e03128074689183031181fac0897ff169692d8492066e949041096548 \
+ --hash=sha256:1889b3a3f47a7b5bee16bc25a2145bd7cb91897f815ce3499db64c7458b6d91d \
+ --hash=sha256:1d8f9fde5f6dc1b6fc34df8162f3b3079365468703fee7f31d4e0cc8c63baed9 \
+ --hash=sha256:1ee32359fb7543b7b7bd0b2f46294db27e29e7bbdf70541e81b190836cd83ded \
+ --hash=sha256:20c115517513831860c573996e395707aa9fb691eb179200125c250e895fcd93 \
+ --hash=sha256:21555da4ec4a0c942520ead42c3b0dc9477441e085c42b0fbdd6a084869a6f6b \
+ --hash=sha256:23a3e9d1a6f360267e8fbb38ba5db355a6a7e9be71d7fce7ab3125e88bb646c8 \
+ --hash=sha256:2a8b6bb8369abefb8bd1801b054ad50e02b3275c8614dc6e5b0373c305291037 \
+ --hash=sha256:2e284ca13d5a8367e43734148622caf0b261b275673823593e3e3634a6490f83 \
+ --hash=sha256:2f585f52b2baf07ff3356158d9268ea095e221371f1074fadea2f42544d58b4d \
+ --hash=sha256:316b2f2584682318539f0bcaca5a496ce9ca78c88066579ebd11fd06f8e4741e \
+ --hash=sha256:32ed06d0fe9cae27d8fb5f400c63ccee72370599c75e683a6358dd3a4fb50aaf \
+ --hash=sha256:355354388cba60f2132df297e2d53053d4063f79077b67b481d21276d61fc4df \
+ --hash=sha256:35ddc8f4914466e6fc954c76527aa91aa763682a4f6d73249ef20b418fe6effb \
+ --hash=sha256:36667db4d6c1cea79c8930ab72fadfb4060feb4bfe724141cd4bd064d2e5f8ce \
+ --hash=sha256:36cbfb13c152b1c7c184ddac43765db8ad672567e7bafff2cc755a09917ed2e6 \
+ --hash=sha256:39699233bc72dd482da1415dcb06076e32f60eddc796a796c5fb6c5efce94667 \
+ --hash=sha256:39b19251dec4de8ff8496cd0806cbe27bf0684f765abb1f4809554de93785f2d \
+ --hash=sha256:3d857f55e7fdf7c38ab96c4558c95b97d1c685be6b05c249f5fdafcbd6f9899e \
+ --hash=sha256:3de19cfecd1465d0dcf8a5b5ea8b3155b42ed0b639dba4b71e323d74f2a3be5e \
+ --hash=sha256:3f3096405acc48887458bbf9f6814d43785ac7ba2a57ea6442b581dedbc60ce6 \
+ --hash=sha256:40483b2f2d3ba7aad426443767ff5632ec3156ef09742b96913787d13c336471 \
+ --hash=sha256:413aa561266a4be2d06cd2b9665e89d9f54c543f418773076a76adcf2af08bc7 \
+ --hash=sha256:44aba2f0cafd287871a495fb3163408b0bd25bbce135c6f621534a07f4f7875c \
+ --hash=sha256:49ff32b09f5aa0cd30a20c2b39db3e669c845589f2b7fc910365210887e39344 \
+ --hash=sha256:4d1cfce39e511069b11e67cd0bd78ceff31443b7c9e5c04db73c7a19f572967c \
+ --hash=sha256:57c540ed8fb1f05cb997c6761cd56db72395b0d6985e90571ff660452ade4f98 \
+ --hash=sha256:5f48cb3e88fbc294dc90e215d86fbaf1c852c63dbdb6c3a3e63f45c4b57f7344 \
+ --hash=sha256:5fe44e277225fd3dff6882d86d3d447205d43532c3627313d17e754fb3905a0e \
+ --hash=sha256:60e8c196cd82cbbd4f130b5290007e13e6de3eca79f0d4d38014769d96a7c475 \
+ --hash=sha256:65167da969cd1ec3a1df31cb221ca3a19a8aaa25370ecb17d428415e93c1935e \
+ --hash=sha256:680060061adb2d74ce352628cb798cfdec399068aa7f07ba9fb818b2b3305f98 \
+ --hash=sha256:6bbaebf0d11567fa8926215ae731e1d58e6ec28a8a25235b8a47405d301332db \
+ --hash=sha256:6c05483c3136ac4c91b4e81903cb53a8707d316f488124d0398499a4f8e8ef51 \
+ --hash=sha256:6dc8b7e2f4eb184b37655195f421836cfae6f58197b67e3ffc501f1333d993fa \
+ --hash=sha256:6e504f7b16118198f138ef31ba24d985b124c2c469fe8467007cf30fd992f934 \
+ --hash=sha256:74623f2ab5cc3f7c886add4f735d1031a1d2be4a4ae63c0546cfd74e7a31ddf6 \
+ --hash=sha256:77f0d13fa87036d7553bf81f0e1fe3ce68d14c9976c9851744e4d3e91127e95f \
+ --hash=sha256:85eef4cb5625c47ee6425c58a3502555e10f45ee973da878ac8248ad58c136f3 \
+ --hash=sha256:882567b7ae57c1b1a0250208cc21a7976d8cbcc49d5a322e607e6f09c9e0bd53 \
+ --hash=sha256:8b986403023c8f3bf8f487c2e6186afda156174d31c175f747d8934dfddf3479 \
+ --hash=sha256:8cfa5f29a695cb7438965e6c3e8d06e0416060cf0d709c1b1c1653a939bf5c2a \
+ --hash=sha256:8eafe7c36c8430b7794edeab3087dec7bf31d634d92f2af9949434b9d1964cba \
+ --hash=sha256:9198f447e1dc5647d07c9a6bbe2063cc0132728cc7175b39dbc796da5b54920d \
+ --hash=sha256:92190db305a6f48734d3982f2c60fa30d6b5ee9bff10f2887b930d7b40119f4c \
+ --hash=sha256:927ccf5cd17c48f801f4ed43a7e5673a2724bd2171460be3e3894e6e332ef83a \
+ --hash=sha256:98e81648e0b36e325ab67e46b5400a7a6d4a22b8a7c8e8bbfe20e7db7906bf95 \
+ --hash=sha256:9a818668b674047fd88c4cddada7ab8f1c298812783e8328e956b78dc4807f9f \
+ --hash=sha256:a152d86a3ae00ba5f47b3acf3b827509fd0b6cb7d3259665e63dafbad22a75ea \
+ --hash=sha256:a2718c1de8504121714234b6f8241d0019450353276c88b9453c9c3d92e101db \
+ --hash=sha256:a39fb973a726e63223287adc6dafe444ce75af952d711e400f3bf2b36ef55a7b \
+ --hash=sha256:a899699294f28f7be8992853c0c60741f16ff199205e2e6cdca155762cbaa59d \
+ --hash=sha256:a8fdfed3deaf1928fb7667d96e0567cdf58c2b370ea2ee7e586aa383ec2cb346 \
+ --hash=sha256:aabb081ca0ec5d39591fc33018cd4b3f96e1a2dd6756282029986d00a785fba4 \
+ --hash=sha256:b1f5b45829ac1848893f0ddf5cb326110604d6df96cdc255b0bf9edd154104d4 \
+ --hash=sha256:b48e35f4ab6f6a7597c46e301126ceba4c44cd3280e3750f85db48b082624fa4 \
+ --hash=sha256:b54c83f1c0c0f1d748dca0af516062b8829d53d1f0c402be24b4257a9c48ada6 \
+ --hash=sha256:ba0cb30acd3ef11c94dc27fbfba68940652492bc107075e7ffe23057f9425681 \
+ --hash=sha256:bb50ce5fb202a26fd5404620e7ef820ad1ab3558b444cb0b55beb7ef66cd2d63 \
+ --hash=sha256:c95eb6db2884917d86cde0b4d4cf31adf485c8ec36bf8696dd66fa70de96f36b \
+ --hash=sha256:d0ffd9e2e4441c96a9c91ec1783285d80bf835b677853fc2770a89d50c1e48ac \
+ --hash=sha256:d57b5046c120561ba8fa8e4030fbb8b822f3063910fa901ffadf16e2b7128ad6 \
+ --hash=sha256:d9e6a7664ddd9746e20b7325351fe1a8408d0a2bf9c63b5e898290ddc8f09544 \
+ --hash=sha256:dc578891de1db95b2a35001b695451767b580bb45753717498213c5ff3c41d63 \
+ --hash=sha256:e0434aa22c821f44eeb4c650b81c7fbdd8c0122c6c4b5a576a76d5a35625ecd9 \
+ --hash=sha256:e06a922a469cae9a57100864caf4f8a97a1026513793969f8ba5b63137a35d25 \
+ --hash=sha256:e493962256a38f58283de033d8af176c5c91c084ea30f15834f7545451c42059 \
+ --hash=sha256:ecb0019d44f4cdb50b676c5d0cb4b1eae8e15d1ed3d3e6639f986fc92b2ec52c \
+ --hash=sha256:f935c4493eda9069851058fa0d9e39dbf6286be690066509305e52912714dbb2
# via
# feast (setup.py)
# dask
@@ -1955,9 +1953,9 @@ pandas==2.3.3 \
# pandas-gbq
# pymilvus
# snowflake-connector-python
-pandas-gbq==0.31.1 \
- --hash=sha256:a5d6e897917302c50feaca2ed1ce6a284abd8b9139383bf063307aab8d0556d9 \
- --hash=sha256:c59878504adee211cf1c34b22cf94393c59cc953626c61ce76e06c8d25fd146d
+pandas-gbq==0.32.0 \
+ --hash=sha256:249623d574c65e98cf19b7b7ecda97729f4f0a843eae3a0a82d9ef50adcdf4ef \
+ --hash=sha256:28018ff09f2e49ab2b01a11329bd4e562fd65da406030b4a8001a3a4e80a1e34
# via google-cloud-bigquery
parsy==2.2 \
--hash=sha256:5e981613d9d2d8b68012d1dd0afe928967bea2e4eefdb76c2f545af0dd02a9e7 \
@@ -2131,9 +2129,9 @@ propcache==0.4.1 \
# via
# aiohttp
# yarl
-proto-plus==1.26.1 \
- --hash=sha256:13285478c2dcf2abb829db158e1047e2f1e8d63a077d94263c2b88b043c75a66 \
- --hash=sha256:21a515a4c4c0088a773899e23c7bbade3d18f9c66c73edd4c7ee3816bc96a012
+proto-plus==1.27.0 \
+ --hash=sha256:1baa7f81cf0f8acb8bc1f6d085008ba4171eaf669629d1b6d1673b21ed1c0a82 \
+ --hash=sha256:873af56dd0d7e91836aee871e5799e1c6f1bda86ac9a983e0bb9f0c266a568c4
# via
# google-api-core
# google-cloud-bigquery-storage
@@ -2164,26 +2162,28 @@ protobuf==6.33.2 \
# proto-plus
# pymilvus
# substrait
-psutil==7.1.3 \
- --hash=sha256:0005da714eee687b4b8decd3d6cc7c6db36215c9e74e5ad2264b90c3df7d92dc \
- --hash=sha256:1068c303be3a72f8e18e412c5b2a8f6d31750fb152f9cb106b54090296c9d251 \
- --hash=sha256:18349c5c24b06ac5612c0428ec2a0331c26443d259e2a0144a9b24b4395b58fa \
- --hash=sha256:19644c85dcb987e35eeeaefdc3915d059dac7bd1167cdcdbf27e0ce2df0c08c0 \
- --hash=sha256:2bdbcd0e58ca14996a42adf3621a6244f1bb2e2e528886959c72cf1e326677ab \
- --hash=sha256:31d77fcedb7529f27bb3a0472bea9334349f9a04160e8e6e5020f22c59893264 \
- --hash=sha256:3792983e23b69843aea49c8f5b8f115572c5ab64c153bada5270086a2123c7e7 \
- --hash=sha256:3bb428f9f05c1225a558f53e30ccbad9930b11c3fc206836242de1091d3e7dd3 \
- --hash=sha256:56d974e02ca2c8eb4812c3f76c30e28836fffc311d55d979f1465c1feeb2b68b \
- --hash=sha256:6c86281738d77335af7aec228328e944b30930899ea760ecf33a4dba66be5e74 \
- --hash=sha256:8f33a3702e167783a9213db10ad29650ebf383946e91bc77f28a5eb083496bc9 \
- --hash=sha256:95ef04cf2e5ba0ab9eaafc4a11eaae91b44f4ef5541acd2ee91d9108d00d59a7 \
- --hash=sha256:ad81425efc5e75da3f39b3e636293360ad8d0b49bed7df824c79764fb4ba9b8b \
- --hash=sha256:b403da1df4d6d43973dc004d19cee3b848e998ae3154cc8097d139b77156c353 \
- --hash=sha256:bc31fa00f1fbc3c3802141eede66f3a2d51d89716a194bf2cd6fc68310a19880 \
- --hash=sha256:bd0d69cee829226a761e92f28140bec9a5ee9d5b4fb4b0cc589068dbfff559b1 \
- --hash=sha256:c525ffa774fe4496282fb0b1187725793de3e7c6b29e41562733cae9ada151ee \
- --hash=sha256:f39c2c19fe824b47484b96f9692932248a54c43799a84282cfe58d05a6449efd \
- --hash=sha256:fac9cd332c67f4422504297889da5ab7e05fd11e3c4392140f7370f4208ded1f
+psutil==7.2.1 \
+ --hash=sha256:05cc68dbb8c174828624062e73078e7e35406f4ca2d0866c272c2410d8ef06d1 \
+ --hash=sha256:08a2f175e48a898c8eb8eace45ce01777f4785bc744c90aa2cc7f2fa5462a266 \
+ --hash=sha256:0d67c1822c355aa6f7314d92018fb4268a76668a536f133599b91edd48759442 \
+ --hash=sha256:2ceae842a78d1603753561132d5ad1b2f8a7979cb0c283f5b52fb4e6e14b1a79 \
+ --hash=sha256:35630d5af80d5d0d49cfc4d64c1c13838baf6717a13effb35869a5919b854cdf \
+ --hash=sha256:3fce5f92c22b00cdefd1645aa58ab4877a01679e901555067b1bd77039aa589f \
+ --hash=sha256:494c513ccc53225ae23eec7fe6e1482f1b8a44674241b54561f755a898650679 \
+ --hash=sha256:5e38404ca2bb30ed7267a46c02f06ff842e92da3bb8c5bfdadbd35a5722314d8 \
+ --hash=sha256:81442dac7abfc2f4f4385ea9e12ddf5a796721c0f6133260687fec5c3780fa49 \
+ --hash=sha256:923f8653416604e356073e6e0bccbe7c09990acef442def2f5640dd0faa9689f \
+ --hash=sha256:93f3f7b0bb07711b49626e7940d6fe52aa9940ad86e8f7e74842e73189712129 \
+ --hash=sha256:99a4cd17a5fdd1f3d014396502daa70b5ec21bf4ffe38393e152f8e449757d67 \
+ --hash=sha256:ab2b98c9fc19f13f59628d94df5cc4cc4844bc572467d113a8b517d634e362c6 \
+ --hash=sha256:b1b0671619343aa71c20ff9767eced0483e4fc9e1f489d50923738caf6a03c17 \
+ --hash=sha256:b2e953fcfaedcfbc952b44744f22d16575d3aa78eb4f51ae74165b4e96e55f42 \
+ --hash=sha256:ba9f33bb525b14c3ea563b2fd521a84d2fa214ec59e3e6a2858f78d0844dd60d \
+ --hash=sha256:cfbe6b40ca48019a51827f20d830887b3107a74a79b01ceb8cc8de4ccb17b672 \
+ --hash=sha256:d34d2ca888208eea2b5c68186841336a7f5e0b990edec929be909353a202768a \
+ --hash=sha256:ea46c0d060491051d39f0d2cff4f98d5c72b288289f57a21556cc7d504db37fc \
+ --hash=sha256:f7583aec590485b43ca601dd9cea0dcd65bd7bb21d30ef4ddbf4ea6b5ed1bdd3 \
+ --hash=sha256:f78baafb38436d5a128f837fab2d92c276dfb48af01a240b861ae02b2413ada8
# via
# feast (setup.py)
# pandas-gbq
@@ -2454,9 +2454,9 @@ python-dotenv==1.2.1 \
# pydantic-settings
# pymilvus
# uvicorn
-python-multipart==0.0.20 \
- --hash=sha256:8a62d3a8335e06589fe01f2a3e178cdcc632f3fbe0d492ad9ee0ec35aab1f104 \
- --hash=sha256:8dd0cab45b8e23064ae09147625994d090fa46f5b0d1e13af944c331a7fa9d13
+python-multipart==0.0.21 \
+ --hash=sha256:7137ebd4d3bbf70ea1622998f902b97a29434a9e8dc40eb203bbcf7c2a2cba92 \
+ --hash=sha256:cf7a6713e01c87aa35387f4774e812c4361150938d20d232800f75ffcf266090
# via mcp
pytz==2025.2 \
--hash=sha256:360b9e3dbb49a209c21ad61809c7fb453643e048b38924c765813546746e81c3 \
@@ -2581,9 +2581,9 @@ rich==13.9.4 \
# fastapi-mcp
# ibis-framework
# typer
-roman-numerals==3.1.0 \
- --hash=sha256:384e36fc1e8d4bd361bdb3672841faae7a345b3f708aae9895d074c878332551 \
- --hash=sha256:842ae5fd12912d62720c9aad8cab706e8c692556d01a38443e051ee6cc158d90
+roman-numerals==4.1.0 \
+ --hash=sha256:1af8b147eb1405d5839e78aeb93131690495fe9da5c91856cb33ad55a7f1e5b2 \
+ --hash=sha256:647ba99caddc2cc1e55a51e4360689115551bf4476d90e8162cf8c345fe233c7
# via sphinx
rpds-py==0.30.0 \
--hash=sha256:07ae8a593e1c3c6b82ca3292efbe73c30b61332fd612e05abee07c79359f292f \
@@ -2815,12 +2815,14 @@ sqlalchemy[mypy]==2.0.45 \
--hash=sha256:1d8b4a7a8c9b537509d56d5cd10ecdcfbb95912d72480c8861524efecc6a3fff \
--hash=sha256:215f0528b914e5c75ef2559f69dca86878a3beeb0c1be7279d77f18e8d180ed4 \
--hash=sha256:2c0b74aa79e2deade948fe8593654c8ef4228c44ba862bb7c9585c8e0db90f33 \
+ --hash=sha256:2e90a344c644a4fa871eb01809c32096487928bd2038bf10f3e4515cb688cc56 \
--hash=sha256:3c5f76216e7b85770d5bb5130ddd11ee89f4d52b11783674a662c7dd57018177 \
--hash=sha256:470daea2c1ce73910f08caf10575676a37159a6d16c4da33d0033546bddebc9b \
--hash=sha256:4748601c8ea959e37e03d13dcda4a44837afcd1b21338e637f7c935b8da06177 \
--hash=sha256:4b6bec67ca45bc166c8729910bd2a87f1c0407ee955df110d78948f5b5827e8a \
--hash=sha256:5225a288e4c8cc2308dbdd874edad6e7d0fd38eac1e9e5f23503425c8eee20d0 \
--hash=sha256:56ead1f8dfb91a54a28cd1d072c74b3d635bcffbd25e50786533b822d4f2cde2 \
+ --hash=sha256:5964f832431b7cdfaaa22a660b4c7eb1dfcd6ed41375f67fd3e3440fd95cb3cc \
--hash=sha256:59a8b8bd9c6bedf81ad07c8bd5543eedca55fe9b8780b2b628d495ba55f8db1e \
--hash=sha256:672c45cae53ba88e0dad74b9027dddd09ef6f441e927786b05bec75d949fbb2e \
--hash=sha256:6d0beadc2535157070c9c17ecf25ecec31e13c229a8f69196d7590bde8082bf1 \
@@ -2839,7 +2841,9 @@ sqlalchemy[mypy]==2.0.45 \
--hash=sha256:b8c8b41b97fba5f62349aa285654230296829672fc9939cd7f35aab246d1c08b \
--hash=sha256:ba547ac0b361ab4f1608afbc8432db669bd0819b3e12e29fb5fa9529a8bba81d \
--hash=sha256:c1c2091b1489435ff85728fafeb990f073e64f6f5e81d5cd53059773e8521eb6 \
+ --hash=sha256:c64772786d9eee72d4d3784c28f0a636af5b0a29f3fe26ff11f55efe90c0bd85 \
--hash=sha256:cd337d3526ec5298f67d6a30bbbe4ed7e5e68862f0bf6dd21d289f8d37b7d60b \
+ --hash=sha256:d29b2b99d527dbc66dd87c3c3248a5dd789d974a507f4653c969999fc7c1191b \
--hash=sha256:d2c3684fca8a05f0ac1d9a21c1f4a266983a7ea9180efb80ffeb03861ecd01a0 \
--hash=sha256:d62e47f5d8a50099b17e2bfc1b0c7d7ecd8ba6b46b1507b58cc4f05eefc3bb1c \
--hash=sha256:d8a2ca754e5415cde2b656c27900b19d50ba076aa05ce66e2207623d3fe41f5a \
@@ -2857,9 +2861,9 @@ sqlglot==25.20.2 \
--hash=sha256:169fe8308dd70d7bd40117b2221b62bdc7c4e2ea8eb07394b2a6146cdedf05ab \
--hash=sha256:cdbfd7ce3f2f39f32bd7b4c23fd9e0fd261636a6b14285b914e8def25fd0a567
# via ibis-framework
-sse-starlette==3.0.3 \
- --hash=sha256:88cfb08747e16200ea990c8ca876b03910a23b547ab3bd764c0d8eb81019b971 \
- --hash=sha256:af5bf5a6f3933df1d9c7f8539633dc8444ca6a97ab2e2a7cd3b6e431ac03a431
+sse-starlette==3.1.1 \
+ --hash=sha256:bb38f71ae74cfd86b529907a9fda5632195dfa6ae120f214ea4c890c7ee9d436 \
+ --hash=sha256:bffa531420c1793ab224f63648c059bcadc412bf9fdb1301ac8de1cf9a67b7fb
# via mcp
starlette==0.50.0 \
--hash=sha256:9e5391843ec9b6e472eed1365a78c8098cfceb7a74bfd4d6b1c0c0095efb3bca \
@@ -2867,6 +2871,7 @@ starlette==0.50.0 \
# via
# fastapi
# mcp
+ # sse-starlette
substrait==0.24.2 \
--hash=sha256:743cc352e96b0927b2cd37cd5a8fdac0a96a68df9600bd104fc36aebd222a836 \
--hash=sha256:d1d475833566fa9d67eed3273456883c0568486ccced92b524b31709d2817e19
@@ -2956,17 +2961,17 @@ typeguard==4.4.4 \
--hash=sha256:3a7fd2dffb705d4d0efaed4306a704c89b9dee850b688f060a8b1615a79e5f74 \
--hash=sha256:b5f562281b6bfa1f5492470464730ef001646128b180769880468bd84b68b09e
# via feast (setup.py)
-typer==0.20.0 \
- --hash=sha256:1aaf6494031793e4876fb0bacfa6a912b551cf43c1e63c800df8b1a866720c37 \
- --hash=sha256:5b463df6793ec1dca6213a3cf4c0f03bc6e322ac5e16e13ddd622a889489784a
+typer==0.21.0 \
+ --hash=sha256:c79c01ca6b30af9fd48284058a7056ba0d3bf5cf10d0ff3d0c5b11b68c258ac6 \
+ --hash=sha256:c87c0d2b6eee3b49c5c64649ec92425492c14488096dfbc8a0c2799b2f6f9c53
# via fastapi-mcp
types-psutil==7.0.0.20250218 \
--hash=sha256:1447a30c282aafefcf8941ece854e1100eee7b0296a9d9be9977292f0269b121 \
--hash=sha256:1e642cdafe837b240295b23b1cbd4691d80b08a07d29932143cbbae30eb0db9c
# via feast (setup.py)
-types-pymysql==1.1.0.20250916 \
- --hash=sha256:873eb9836bb5e3de4368cc7010ca72775f86e9692a5c7810f8c7f48da082e55b \
- --hash=sha256:98d75731795fcc06723a192786662bdfa760e1e00f22809c104fbb47bac5e29b
+types-pymysql==1.1.0.20251220 \
+ --hash=sha256:ae1c3df32a777489431e2e9963880a0df48f6591e0aa2fd3a6fabd9dee6eca54 \
+ --hash=sha256:fa1082af7dea6c53b6caa5784241924b1296ea3a8d3bd060417352c5e10c0618
# via feast (setup.py)
typing-extensions==4.15.0 \
--hash=sha256:0cea48d173cc12fa28ecabc3b837ea3cf6f38c6d1136f85cbaaf598984861466 \
@@ -2997,9 +3002,9 @@ typing-inspection==0.4.2 \
# mcp
# pydantic
# pydantic-settings
-tzdata==2025.2 \
- --hash=sha256:1a403fada01ff9221ca8044d701868fa132215d84beb92242d9acd2147f667a8 \
- --hash=sha256:b60a638fcc0daffadf82fe0f57e53d06bdec2f36c4df66280ae79bce6bd6f2b9
+tzdata==2025.3 \
+ --hash=sha256:06a47e5700f3081aab02b2e513160914ff0694bce9947d6b76ebd6bf57cfc5d1 \
+ --hash=sha256:de39c2ca5dc7b0344f2eba86f49d614019d29f060fc4ebc8a417896a620b56a7
# via pandas
ujson==5.11.0 \
--hash=sha256:0180a480a7d099082501cad1fe85252e4d4bf926b40960fb3d9e87a3a6fbbc80 \
@@ -3087,9 +3092,9 @@ ujson==5.11.0 \
--hash=sha256:fa79fdb47701942c2132a9dd2297a1a85941d966d8c87bfd9e29b0cf423f26cc \
--hash=sha256:fac6c0649d6b7c3682a0a6e18d3de6857977378dce8d419f57a0b20e3d775b39
# via pymilvus
-urllib3==2.6.1 \
- --hash=sha256:5379eb6e1aba4088bae84f8242960017ec8d8e3decf30480b3a1abdaa9671a3f \
- --hash=sha256:e67d06fe947c36a7ca39f4994b08d73922d40e6cca949907be05efa6fd75110b
+urllib3==2.6.2 \
+ --hash=sha256:016f9c98bb7e98085cb2b4b17b87d2c702975664e4f060c6532e64d1c1a5e797 \
+ --hash=sha256:ec21cddfe7724fc7cb4ba4bea7aa8e2ef36f607a4bab81aa6ce42a13dc3f03dd
# via
# botocore
# kubernetes
diff --git a/sdk/python/requirements/py3.11-requirements.txt b/sdk/python/requirements/py3.11-requirements.txt
index 0bdcae16825..8253a7a0800 100644
--- a/sdk/python/requirements/py3.11-requirements.txt
+++ b/sdk/python/requirements/py3.11-requirements.txt
@@ -20,9 +20,9 @@ attrs==25.4.0 \
# via
# jsonschema
# referencing
-bigtree==1.0.3 \
- --hash=sha256:18402a143130868b17ca84a74ca263e6f32f046d6978c30d244f8b94c4a01227 \
- --hash=sha256:99a18b6937a9b4ab8e560fec5c0720e10ebf37f84e44f9b5f47702c2e84c9aaa
+bigtree==1.0.4 \
+ --hash=sha256:e4af0c5bc0d2cd72e18442965e4509f642b16a0de65db6d0ec116e30f959010c \
+ --hash=sha256:f58a3238bb9b1142d893c9de4921bfd18d435427c75e0c168dd580eabf6dc7fd
# via feast (setup.py)
certifi==2025.11.12 \
--hash=sha256:97de8790030bbd5c2d96b7ec782fc2f7820ef8dba6db909ccf95449f2d062d4b \
@@ -158,17 +158,17 @@ colorama==0.4.6 \
--hash=sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44 \
--hash=sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6
# via feast (setup.py)
-dask[dataframe]==2025.11.0 \
- --hash=sha256:08c35a8146c05c93b34f83cf651009129c42ee71762da7ca452fb7308641c2b8 \
- --hash=sha256:23d59e624b80ee05b7cc8df858682cca58262c4c3b197ccf61da0f6543c8f7c3
+dask[dataframe]==2025.12.0 \
+ --hash=sha256:4213ce9c5d51d6d89337cff69de35d902aa0bf6abdb8a25c942a4d0281f3a598 \
+ --hash=sha256:8d478f2aabd025e2453cf733ad64559de90cf328c20209e4574e9543707c3e1b
# via feast (setup.py)
dill==0.3.9 \
--hash=sha256:468dff3b89520b474c0397703366b7b95eebe6303f108adf9b19da1f702be87a \
--hash=sha256:81aa267dddf68cbfe8029c42ca9ec6a4ab3b22371d1c450abc54422577b4512c
# via feast (setup.py)
-fastapi==0.124.0 \
- --hash=sha256:260cd178ad75e6d259991f2fd9b0fee924b224850079df576a3ba604ce58f4e6 \
- --hash=sha256:91596bdc6dde303c318f06e8d2bc75eafb341fc793a0c9c92c0bc1db1ac52480
+fastapi==0.128.0 \
+ --hash=sha256:1cc179e1cef10a6be60ffe429f79b829dce99d8de32d7acb7e6c8dfdf7f2645a \
+ --hash=sha256:aebd93f9716ee3b4f4fcfe13ffb7cf308d99c9f3ab5622d8877441072561582d
# via feast (setup.py)
fsspec==2025.12.0 \
--hash=sha256:8bf1fe301b7d8acfa6e8571e3b1c3d158f909666642431cc78a1b7b4dbc5ec5b \
@@ -235,9 +235,9 @@ idna==3.11 \
# via
# anyio
# requests
-importlib-metadata==8.7.0 \
- --hash=sha256:d13b81ad223b890aa16c5471f2ac3056cf76c5f10f82d6f9292f0b415f389000 \
- --hash=sha256:e5dd1551894c77868a30651cef00984d50e1002d06942a7101d34870c5f02afd
+importlib-metadata==8.7.1 \
+ --hash=sha256:49fef1ae6440c182052f407c8d34a68f72efc36db9ca90dc0113398f2fdde8bb \
+ --hash=sha256:5a1f80bf1daa489495071efbb095d75a634cf28a8bc299581244063b53176151
# via dask
jinja2==3.1.6 \
--hash=sha256:0137fb05990d35f1275a587e9aee6d56da821fc83491a0fb838183be43f66d6d \
@@ -251,83 +251,83 @@ jsonschema-specifications==2025.9.1 \
--hash=sha256:98802fee3a11ee76ecaca44429fda8a41bff98b00a0f2838151b113f210cc6fe \
--hash=sha256:b540987f239e745613c7a9176f3edb72b832a4ac465cf02712288397832b5e8d
# via jsonschema
-librt==0.7.3 \
- --hash=sha256:020c6db391268bcc8ce75105cb572df8cb659a43fd347366aaa407c366e5117a \
- --hash=sha256:0fa9ac2e49a6bee56e47573a6786cb635e128a7b12a0dc7851090037c0d397a3 \
- --hash=sha256:11ad45122bbed42cfc8b0597450660126ef28fd2d9ae1a219bc5af8406f95678 \
- --hash=sha256:120dd21d46ff875e849f1aae19346223cf15656be489242fe884036b23d39e93 \
- --hash=sha256:14569ac5dd38cfccf0a14597a88038fb16811a6fede25c67b79c6d50fc2c8fdc \
- --hash=sha256:1617bea5ab31266e152871208502ee943cb349c224846928a1173c864261375e \
- --hash=sha256:170cdb8436188347af17bf9cccf3249ba581c933ed56d926497119d4cf730cec \
- --hash=sha256:1975eda520957c6e0eb52d12968dd3609ffb7eef05d4223d097893d6daf1d8a7 \
- --hash=sha256:1fe603877e1865b5fd047a5e40379509a4a60204aa7aa0f72b16f7a41c3f0712 \
- --hash=sha256:24d70810f6e2ea853ff79338001533716b373cc0f63e2a0be5bc96129edb5fb5 \
- --hash=sha256:256793988bff98040de23c57cf36e1f4c2f2dc3dcd17537cdac031d3b681db71 \
- --hash=sha256:25711f364c64cab2c910a0247e90b51421e45dbc8910ceeb4eac97a9e132fc6f \
- --hash=sha256:2682162855a708e3270eba4b92026b93f8257c3e65278b456c77631faf0f4f7a \
- --hash=sha256:2cf9d73499486ce39eebbff5f42452518cc1f88d8b7ea4a711ab32962b176ee2 \
- --hash=sha256:2e40520c37926166c24d0c2e0f3bc3a5f46646c34bdf7b4ea9747c297d6ee809 \
- --hash=sha256:2e980cf1ed1a2420a6424e2ed884629cdead291686f1048810a817de07b5eb18 \
- --hash=sha256:2f03484b54bf4ae80ab2e504a8d99d20d551bfe64a7ec91e218010b467d77093 \
- --hash=sha256:35f1609e3484a649bb80431310ddbec81114cd86648f1d9482bc72a3b86ded2e \
- --hash=sha256:399938edbd3d78339f797d685142dd8a623dfaded023cf451033c85955e4838a \
- --hash=sha256:399bbd7bcc1633c3e356ae274a1deb8781c7bf84d9c7962cc1ae0c6e87837292 \
- --hash=sha256:3ec50cf65235ff5c02c5b747748d9222e564ad48597122a361269dd3aa808798 \
- --hash=sha256:3edbf257c40d21a42615e9e332a6b10a8bacaaf58250aed8552a14a70efd0d65 \
- --hash=sha256:440c788f707c061d237c1e83edf6164ff19f5c0f823a3bf054e88804ebf971ec \
- --hash=sha256:44b3689b040df57f492e02cd4f0bacd1b42c5400e4b8048160c9d5e866de8abe \
- --hash=sha256:4887c29cadbdc50640179e3861c276325ff2986791e6044f73136e6e798ff806 \
- --hash=sha256:5460d99ed30f043595bbdc888f542bad2caeb6226b01c33cda3ae444e8f82d42 \
- --hash=sha256:550fdbfbf5bba6a2960b27376ca76d6aaa2bd4b1a06c4255edd8520c306fcfc0 \
- --hash=sha256:56f2a47beda8409061bc1c865bef2d4bd9ff9255219402c0817e68ab5ad89aed \
- --hash=sha256:572a24fc5958c61431da456a0ef1eeea6b4989d81eeb18b8e5f1f3077592200b \
- --hash=sha256:59cb0470612d21fa1efddfa0dd710756b50d9c7fb6c1236bbf8ef8529331dc70 \
- --hash=sha256:6038ccbd5968325a5d6fd393cf6e00b622a8de545f0994b89dd0f748dcf3e19e \
- --hash=sha256:6488e69d408b492e08bfb68f20c4a899a354b4386a446ecd490baff8d0862720 \
- --hash=sha256:687403cced6a29590e6be6964463835315905221d797bc5c934a98750fe1a9af \
- --hash=sha256:6b407c23f16ccc36614c136251d6b32bf30de7a57f8e782378f1107be008ddb0 \
- --hash=sha256:6b4e7bff1d76dd2b46443078519dc75df1b5e01562345f0bb740cea5266d8218 \
- --hash=sha256:6bdd9adfca615903578d2060ee8a6eb1c24eaf54919ff0ddc820118e5718931b \
- --hash=sha256:6eb9295c730e26b849ed1f4022735f36863eb46b14b6e10604c1c39b8b5efaea \
- --hash=sha256:703456146dc2bf430f7832fd1341adac5c893ec3c1430194fdcefba00012555c \
- --hash=sha256:754a0d09997095ad764ccef050dd5bf26cbf457aab9effcba5890dad081d879e \
- --hash=sha256:7af7785f5edd1f418da09a8cdb9ec84b0213e23d597413e06525340bcce1ea4f \
- --hash=sha256:7b29e97273bd6999e2bfe9fe3531b1f4f64effd28327bced048a33e49b99674a \
- --hash=sha256:7b4f57f7a0c65821c5441d98c47ff7c01d359b1e12328219709bdd97fdd37f90 \
- --hash=sha256:8837d5a52a2d7aa9f4c3220a8484013aed1d8ad75240d9a75ede63709ef89055 \
- --hash=sha256:8ccadf260bb46a61b9c7e89e2218f6efea9f3eeaaab4e3d1f58571890e54858e \
- --hash=sha256:8d8cf653e798ee4c4e654062b633db36984a1572f68c3aa25e364a0ddfbbb910 \
- --hash=sha256:93b2a1f325fefa1482516ced160c8c7b4b8d53226763fa6c93d151fa25164207 \
- --hash=sha256:9f0e0927efe87cd42ad600628e595a1a0aa1c64f6d0b55f7e6059079a428641a \
- --hash=sha256:a59a69deeb458c858b8fea6acf9e2acd5d755d76cd81a655256bc65c20dfff5b \
- --hash=sha256:a9f9b661f82693eb56beb0605156c7fca57f535704ab91837405913417d6990b \
- --hash=sha256:abfc57cab3c53c4546aee31859ef06753bfc136c9d208129bad23e2eca39155a \
- --hash=sha256:aca73d70c3f553552ba9133d4a09e767dcfeee352d8d8d3eb3f77e38a3beb3ed \
- --hash=sha256:adeaa886d607fb02563c1f625cf2ee58778a2567c0c109378da8f17ec3076ad7 \
- --hash=sha256:b278a9248a4e3260fee3db7613772ca9ab6763a129d6d6f29555e2f9b168216d \
- --hash=sha256:b7c1239b64b70be7759554ad1a86288220bbb04d68518b527783c4ad3fb4f80b \
- --hash=sha256:bf8c7735fbfc0754111f00edda35cf9e98a8d478de6c47b04eaa9cef4300eaa7 \
- --hash=sha256:c634a0a6db395fdaba0361aa78395597ee72c3aad651b9a307a3a7eaf5efd67e \
- --hash=sha256:cad9971881e4fec00d96af7eaf4b63aa7a595696fc221808b0d3ce7ca9743258 \
- --hash=sha256:cbdb3f337c88b43c3b49ca377731912c101178be91cb5071aac48faa898e6f8e \
- --hash=sha256:cd8551aa21df6c60baa2624fd086ae7486bdde00c44097b32e1d1b1966e365e0 \
- --hash=sha256:d09f677693328503c9e492e33e9601464297c01f9ebd966ea8fc5308f3069bfd \
- --hash=sha256:d376a35c6561e81d2590506804b428fc1075fcc6298fc5bb49b771534c0ba010 \
- --hash=sha256:d39079379a9a28e74f4d57dc6357fa310a1977b51ff12239d7271ec7e71d67f5 \
- --hash=sha256:d86f94743a11873317094326456b23f8a5788bad9161fd2f0e52088c33564620 \
- --hash=sha256:d91e60ac44bbe3a77a67af4a4c13114cbe9f6d540337ce22f2c9eaf7454ca71f \
- --hash=sha256:d9883b2d819ce83f87ba82a746c81d14ada78784db431e57cc9719179847376e \
- --hash=sha256:e094e445c37c57e9ec612847812c301840239d34ccc5d153a982fa9814478c60 \
- --hash=sha256:e19acfde38cb532a560b98f473adc741c941b7a9bc90f7294bc273d08becb58b \
- --hash=sha256:e32d43610dff472eab939f4d7fbdd240d1667794192690433672ae22d7af8445 \
- --hash=sha256:ed028fc3d41adda916320712838aec289956c89b4f0a361ceadf83a53b4c047a \
- --hash=sha256:ef59c938f72bdbc6ab52dc50f81d0637fde0f194b02d636987cea2ab30f8f55a \
- --hash=sha256:f3d4801db8354436fd3936531e7f0e4feb411f62433a6b6cb32bb416e20b529f \
- --hash=sha256:f57aca20e637750a2c18d979f7096e2c2033cc40cf7ed201494318de1182f135 \
- --hash=sha256:f9da128d0edf990cf0d2ca011b02cd6f639e79286774bd5b0351245cbb5a6e51 \
- --hash=sha256:fbd7351d43b80d9c64c3cfcb50008f786cc82cba0450e8599fdd64f264320bd3 \
- --hash=sha256:fcb72249ac4ea81a7baefcbff74df7029c3cb1cf01a711113fa052d563639c9c \
- --hash=sha256:ff21c554304e8226bf80c3a7754be27c6c3549a9fec563a03c06ee8f494da8fc
+librt==0.7.5 \
+ --hash=sha256:060bde69c3604f694bd8ae21a780fe8be46bb3dbb863642e8dfc75c931ca8eee \
+ --hash=sha256:08153ea537609d11f774d2bfe84af39d50d5c9ca3a4d061d946e0c9d8bce04a1 \
+ --hash=sha256:0b4791202296ad51ac09a3ff58eb49d9da8e3a4009167a6d76ac418a974e5fd4 \
+ --hash=sha256:0b7f080ba30601dfa3e3deed3160352273e1b9bc92e652f51103c3e9298f7899 \
+ --hash=sha256:0e2bf8f91093fac43e3eaebacf777f12fd539dce9ec5af3efc6d8424e96ccd49 \
+ --hash=sha256:118716de5ad6726332db1801bc90fa6d94194cd2e07c1a7822cebf12c496714d \
+ --hash=sha256:168e04663e126416ba712114050f413ac306759a1791d87b7c11d4428ba75760 \
+ --hash=sha256:191cbd42660446d67cf7a95ac7bfa60f49b8b3b0417c64f216284a1d86fc9335 \
+ --hash=sha256:263f4fae9eba277513357c871275b18d14de93fd49bf5e43dc60a97b81ad5eb8 \
+ --hash=sha256:265729b551a2dd329cc47b323a182fb7961af42abf21e913c9dd7d3331b2f3c2 \
+ --hash=sha256:26b46620e1e0e45af510d9848ea0915e7040605dd2ae94ebefb6c962cbb6f7ec \
+ --hash=sha256:29c8d2fae11d4379ea207ba7fc69d43237e42cf8a9f90ec6e05993687e6d648b \
+ --hash=sha256:2fcbf2e135c11f721193aa5f42ba112bb1046afafbffd407cbc81d8d735c74d0 \
+ --hash=sha256:39183abee670bc37b85f11e86c44a9cad1ed6efa48b580083e89ecee13dd9717 \
+ --hash=sha256:3919c9407faeeee35430ae135e3a78acd4ecaaaa73767529e2c15ca1d73ba325 \
+ --hash=sha256:3c98a8d0ac9e2a7cb8ff8c53e5d6e8d82bfb2839abf144fdeaaa832f2a12aa45 \
+ --hash=sha256:3dd58f7ce20360c6ce0c04f7bd9081c7f9c19fc6129a3c705d0c5a35439f201d \
+ --hash=sha256:46aa91813c267c3f60db75d56419b42c0c0b9748ec2c568a0e3588e543fb4233 \
+ --hash=sha256:49c596cd18e90e58b7caa4d7ca7606049c1802125fcff96b8af73fa5c3870e4d \
+ --hash=sha256:532ddc6a8a6ca341b1cd7f4d999043e4c71a212b26fe9fd2e7f1e8bb4e873544 \
+ --hash=sha256:54d2aef0b0f5056f130981ad45081b278602ff3657fe16c88529f5058038e802 \
+ --hash=sha256:553dc58987d1d853adda8aeadf4db8e29749f0b11877afcc429a9ad892818ae2 \
+ --hash=sha256:584cb3e605ec45ba350962cec853e17be0a25a772f21f09f1e422f7044ae2a7d \
+ --hash=sha256:5cd3afd71e9bc146203b6c8141921e738364158d4aa7cdb9a874e2505163770f \
+ --hash=sha256:63055d3dda433ebb314c9f1819942f16a19203c454508fdb2d167613f7017169 \
+ --hash=sha256:654fdc971c76348a73af5240d8e2529265b9a7ba6321e38dd5bae7b0d4ab3abe \
+ --hash=sha256:6b7b58913d475911f6f33e8082f19dd9b120c4f4a5c911d07e395d67b81c6982 \
+ --hash=sha256:6e860909fea75baef941ee6436e0453612505883b9d0d87924d4fda27865b9a2 \
+ --hash=sha256:730be847daad773a3c898943cf67fb9845a3961d06fb79672ceb0a8cd8624cfa \
+ --hash=sha256:732e0aa0385b59a1b2545159e781c792cc58ce9c134249233a7c7250a44684c4 \
+ --hash=sha256:75965c1f4efb7234ff52a58b729d245a21e87e4b6a26a0ec08052f02b16274e4 \
+ --hash=sha256:7a488908a470451338607650f1c064175094aedebf4a4fa37890682e30ce0b57 \
+ --hash=sha256:81056e01bba1394f1d92904ec61a4078f66df785316275edbaf51d90da8c6e26 \
+ --hash=sha256:82f3f088482e2229387eadf8215c03f7726d56f69cce8c0c40f0795aebc9b361 \
+ --hash=sha256:84d4a6b9efd6124f728558a18e79e7cc5c5d4efc09b2b846c910de7e564f5bad \
+ --hash=sha256:85f485b7471571e99fab4f44eeb327dc0e1f814ada575f3fa85e698417d8a54e \
+ --hash=sha256:8a3cfb15961e7333ea6ef033dc574af75153b5c230d5ad25fbcd55198f21e0cf \
+ --hash=sha256:8bb7883c1e94ceb87c2bf81385266f032da09cd040e804cc002f2c9d6b842e2f \
+ --hash=sha256:8dcae24de1bc9da93aa689cb6313c70e776d7cea2fcf26b9b6160fedfe6bd9af \
+ --hash=sha256:9937574e6d842f359b8585903d04f5b4ab62277a091a93e02058158074dc52f2 \
+ --hash=sha256:9bbb8facc5375476d392990dd6a71f97e4cb42e2ac66f32e860f6e47299d5e89 \
+ --hash=sha256:9c08527055fbb03c641c15bbc5b79dd2942fb6a3bd8dabf141dd7e97eeea4904 \
+ --hash=sha256:9cffa3ef0af29687455161cb446eff059bf27607f95163d6a37e27bcb37180f6 \
+ --hash=sha256:9f85f9b5db87b0f52e53c68ad2a0c5a53e00afa439bd54a1723742a2b1021276 \
+ --hash=sha256:a82d5a0ee43aeae2116d7292c77cc8038f4841830ade8aa922e098933b468b9e \
+ --hash=sha256:a9eacbf983319b26b5f340a2e0cd47ac1ee4725a7f3a72fd0f15063c934b69d6 \
+ --hash=sha256:ab4b0d3bee6f6ff7017e18e576ac7e41a06697d8dea4b8f3ab9e0c8e1300c409 \
+ --hash=sha256:af69d9e159575e877c7546d1ee817b4ae089aa221dd1117e20c24ad8dc8659c7 \
+ --hash=sha256:b1795c4b2789b458fa290059062c2f5a297ddb28c31e704d27e161386469691a \
+ --hash=sha256:b591c094afd0ffda820e931148c9e48dc31a556dc5b2b9b3cc552fa710d858e4 \
+ --hash=sha256:b8e0fd344bad57026a8f4ccfaf406486c2fc991838050c2fef156170edc3b775 \
+ --hash=sha256:ba1077c562a046208a2dc6366227b3eeae8f2c2ab4b41eaf4fd2fa28cece4203 \
+ --hash=sha256:bb41f04046b4f22b1e7ba5ef513402cd2e3477ec610e5f92d38fe2bba383d419 \
+ --hash=sha256:c039bbf79a9a2498404d1ae7e29a6c175e63678d7a54013a97397c40aee026c5 \
+ --hash=sha256:c566a4672564c5d54d8ab65cdaae5a87ee14c1564c1a2ddc7a9f5811c750f023 \
+ --hash=sha256:cda8b025875946ffff5a9a7590bf9acde3eb02cb6200f06a2d3e691ef3d9955b \
+ --hash=sha256:cdb001a1a0e4f41e613bca2c0fc147fc8a7396f53fc94201cbfd8ec7cd69ca4b \
+ --hash=sha256:cdde31759bd8888f3ef0eebda80394a48961328a17c264dce8cc35f4b9cde35d \
+ --hash=sha256:d2cc7d187e8c6e9b7bdbefa9697ce897a704ea7a7ce844f2b4e0e2aa07ae51d3 \
+ --hash=sha256:d7aa33153a5bb0bac783d2c57885889b1162823384e8313d47800a0e10d0070e \
+ --hash=sha256:d7c72c8756eeb3aefb1b9e3dac7c37a4a25db63640cac0ab6fc18e91a0edf05a \
+ --hash=sha256:dd810f2d39c526c42ea205e0addad5dc08ef853c625387806a29d07f9d150d9b \
+ --hash=sha256:ddc0ab9dbc5f9ceaf2bf7a367bf01f2697660e908f6534800e88f43590b271db \
+ --hash=sha256:ddc4a16207f88f9597b397fc1f60781266d13b13de922ff61c206547a29e4bbd \
+ --hash=sha256:de4221a1181fa9c8c4b5f35506ed6f298948f44003d84d2a8b9885d7e01e6cfa \
+ --hash=sha256:df2e210400b28e50994477ebf82f055698c79797b6ee47a1669d383ca33263e1 \
+ --hash=sha256:df3146d52465b3b6397d25d513f428cb421c18df65b7378667bb5f1e3cc45805 \
+ --hash=sha256:e47fc52602ffc374e69bf1b76536dc99f7f6dd876bd786c8213eaa3598be030a \
+ --hash=sha256:e9e9c988b5ffde7be02180f864cbd17c0b0c1231c235748912ab2afa05789c25 \
+ --hash=sha256:ea1b60b86595a5dc1f57b44a801a1c4d8209c0a69518391d349973a4491408e6 \
+ --hash=sha256:edf6b465306215b19dbe6c3fb63cf374a8f3e1ad77f3b4c16544b83033bbb67b \
+ --hash=sha256:f02c4337bf271c4f06637f5ff254fad2238c0b8e32a3a480ebb2fc5e26f754a5 \
+ --hash=sha256:f7f51ffe59f4556243d3cc82d827bde74765f594fa3ceb80ec4de0c13ccd3416 \
+ --hash=sha256:f952e1a78c480edee8fb43aa2bf2e84dcd46c917d44f8065b883079d3893e8fc \
+ --hash=sha256:fb565b4219abc8ea2402e61c7ba648a62903831059ed3564fa1245cc245d58d7 \
+ --hash=sha256:fee15c2a190ef389f14928135c6fb2d25cd3fdb7887bfd9a7b444bbdc8c06b96
# via mypy
locket==1.0.0 \
--hash=sha256:5c0d4c052a8bbbf750e056a8e65ccd309086f4f0f18a2eac306a8dfa4112a632 \
@@ -547,125 +547,123 @@ mmh3==5.2.0 \
--hash=sha256:fdfd3fb739f4e22746e13ad7ba0c6eedf5f454b18d11249724a388868e308ee4 \
--hash=sha256:ff3d50dc3fe8a98059f99b445dfb62792b5d006c5e0b8f03c6de2813b8376110
# via feast (setup.py)
-mypy==1.19.0 \
- --hash=sha256:0c01c99d626380752e527d5ce8e69ffbba2046eb8a060db0329690849cf9b6f9 \
- --hash=sha256:0dde5cb375cb94deff0d4b548b993bec52859d1651e073d63a1386d392a95495 \
- --hash=sha256:0e3c3d1e1d62e678c339e7ade72746a9e0325de42cd2cccc51616c7b2ed1a018 \
- --hash=sha256:0ea4fd21bb48f0da49e6d3b37ef6bd7e8228b9fe41bbf4d80d9364d11adbd43c \
- --hash=sha256:0fb3115cb8fa7c5f887c8a8d81ccdcb94cff334684980d847e5a62e926910e1d \
- --hash=sha256:11f7254c15ab3f8ed68f8e8f5cbe88757848df793e31c36aaa4d4f9783fd08ab \
- --hash=sha256:120cffe120cca5c23c03c77f84abc0c14c5d2e03736f6c312480020082f1994b \
- --hash=sha256:16f76ff3f3fd8137aadf593cb4607d82634fca675e8211ad75c43d86033ee6c6 \
- --hash=sha256:1cf9c59398db1c68a134b0b5354a09a1e124523f00bacd68e553b8bd16ff3299 \
- --hash=sha256:318ba74f75899b0e78b847d8c50821e4c9637c79d9a59680fc1259f29338cb3e \
- --hash=sha256:3210d87b30e6af9c8faed61be2642fcbe60ef77cec64fa1ef810a630a4cf671c \
- --hash=sha256:34ec1ac66d31644f194b7c163d7f8b8434f1b49719d403a5d26c87fff7e913f7 \
- --hash=sha256:37af5166f9475872034b56c5efdcf65ee25394e9e1d172907b84577120714364 \
- --hash=sha256:3ad925b14a0bb99821ff6f734553294aa6a3440a8cb082fe1f5b84dfb662afb1 \
- --hash=sha256:510c014b722308c9bd377993bcbf9a07d7e0692e5fa8fc70e639c1eb19fc6bee \
- --hash=sha256:6016c52ab209919b46169651b362068f632efcd5eb8ef9d1735f6f86da7853b2 \
- --hash=sha256:6148ede033982a8c5ca1143de34c71836a09f105068aaa8b7d5edab2b053e6c8 \
- --hash=sha256:63ea6a00e4bd6822adbfc75b02ab3653a17c02c4347f5bb0cf1d5b9df3a05835 \
- --hash=sha256:7686ed65dbabd24d20066f3115018d2dce030d8fa9db01aa9f0a59b6813e9f9e \
- --hash=sha256:7a500ab5c444268a70565e374fc803972bfd1f09545b13418a5174e29883dab7 \
- --hash=sha256:8f44f2ae3c58421ee05fe609160343c25f70e3967f6e32792b5a78006a9d850f \
- --hash=sha256:a18d8abdda14035c5718acb748faec09571432811af129bf0d9e7b2d6699bf18 \
- --hash=sha256:a31e4c28e8ddb042c84c5e977e28a21195d086aaffaf08b016b78e19c9ef8106 \
- --hash=sha256:a9ac09e52bb0f7fb912f5d2a783345c72441a08ef56ce3e17c1752af36340a39 \
- --hash=sha256:b9d491295825182fba01b6ffe2c6fe4e5a49dbf4e2bb4d1217b6ced3b4797bc6 \
- --hash=sha256:c14a98bc63fd867530e8ec82f217dae29d0550c86e70debc9667fff1ec83284e \
- --hash=sha256:c3385246593ac2b97f155a0e9639be906e73534630f663747c71908dfbf26134 \
- --hash=sha256:cabbee74f29aa9cd3b444ec2f1e4fa5a9d0d746ce7567a6a609e224429781f53 \
- --hash=sha256:cb64b0ba5980466a0f3f9990d1c582bcab8db12e29815ecb57f1408d99b4bff7 \
- --hash=sha256:cf7d84f497f78b682edd407f14a7b6e1a2212b433eedb054e2081380b7395aa3 \
- --hash=sha256:e2c1101ab41d01303103ab6ef82cbbfedb81c1a060c868fa7cc013d573d37ab5 \
- --hash=sha256:f188dcf16483b3e59f9278c4ed939ec0254aa8a60e8fc100648d9ab5ee95a431 \
- --hash=sha256:f2e36bed3c6d9b5f35d28b63ca4b727cb0228e480826ffc8953d1892ddc8999d \
- --hash=sha256:f3e19e3b897562276bb331074d64c076dbdd3e79213f36eed4e592272dabd760 \
- --hash=sha256:f6b874ca77f733222641e5c46e4711648c4037ea13646fd0cdc814c2eaec2528 \
- --hash=sha256:f75e60aca3723a23511948539b0d7ed514dda194bc3755eae0bfc7a6b4887aa7 \
- --hash=sha256:fc51a5b864f73a3a182584b1ac75c404396a17eced54341629d8bdcb644a5bba \
- --hash=sha256:fd4a985b2e32f23bead72e2fb4bbe5d6aceee176be471243bd831d5b2644672d
+mypy==1.19.1 \
+ --hash=sha256:016f2246209095e8eda7538944daa1d60e1e8134d98983b9fc1e92c1fc0cb8dd \
+ --hash=sha256:022ea7279374af1a5d78dfcab853fe6a536eebfda4b59deab53cd21f6cd9f00b \
+ --hash=sha256:06e6170bd5836770e8104c8fdd58e5e725cfeb309f0a6c681a811f557e97eac1 \
+ --hash=sha256:19d88bb05303fe63f71dd2c6270daca27cb9401c4ca8255fe50d1d920e0eb9ba \
+ --hash=sha256:21761006a7f497cb0d4de3d8ef4ca70532256688b0523eee02baf9eec895e27b \
+ --hash=sha256:28902ee51f12e0f19e1e16fbe2f8f06b6637f482c459dd393efddd0ec7f82045 \
+ --hash=sha256:2899753e2f61e571b3971747e302d5f420c3fd09650e1951e99f823bc3089dac \
+ --hash=sha256:2abb24cf3f17864770d18d673c85235ba52456b36a06b6afc1e07c1fdcd3d0e6 \
+ --hash=sha256:34c81968774648ab5ac09c29a375fdede03ba253f8f8287847bd480782f73a6a \
+ --hash=sha256:409088884802d511ee52ca067707b90c883426bd95514e8cfda8281dc2effe24 \
+ --hash=sha256:481daf36a4c443332e2ae9c137dfee878fcea781a2e3f895d54bd3002a900957 \
+ --hash=sha256:4b84a7a18f41e167f7995200a1d07a4a6810e89d29859df936f1c3923d263042 \
+ --hash=sha256:4f28f99c824ecebcdaa2e55d82953e38ff60ee5ec938476796636b86afa3956e \
+ --hash=sha256:5f05aa3d375b385734388e844bc01733bd33c644ab48e9684faa54e5389775ec \
+ --hash=sha256:7bcfc336a03a1aaa26dfce9fff3e287a3ba99872a157561cbfcebe67c13308e3 \
+ --hash=sha256:804bd67b8054a85447c8954215a906d6eff9cabeabe493fb6334b24f4bfff718 \
+ --hash=sha256:8bb5c6f6d043655e055be9b542aa5f3bdd30e4f3589163e85f93f3640060509f \
+ --hash=sha256:a009ffa5a621762d0c926a078c2d639104becab69e79538a494bcccb62cc0331 \
+ --hash=sha256:a8174a03289288c1f6c46d55cef02379b478bfbc8e358e02047487cad44c6ca1 \
+ --hash=sha256:ab43590f9cd5108f41aacf9fca31841142c786827a74ab7cc8a2eacb634e09a1 \
+ --hash=sha256:b10e7c2cd7870ba4ad9b2d8a6102eb5ffc1f16ca35e3de6bfa390c1113029d13 \
+ --hash=sha256:b13cfdd6c87fc3efb69ea4ec18ef79c74c3f98b4e5498ca9b85ab3b2c2329a67 \
+ --hash=sha256:b64d987153888790bcdb03a6473d321820597ab8dd9243b27a92153c4fa50fd2 \
+ --hash=sha256:b7951a701c07ea584c4fe327834b92a30825514c868b1f69c30445093fdd9d5a \
+ --hash=sha256:bdb12f69bcc02700c2b47e070238f42cb87f18c0bc1fc4cdb4fb2bc5fd7a3b8b \
+ --hash=sha256:c35d298c2c4bba75feb2195655dfea8124d855dfd7343bf8b8c055421eaf0cf8 \
+ --hash=sha256:c608937067d2fc5a4dd1a5ce92fd9e1398691b8c5d012d66e1ddd430e9244376 \
+ --hash=sha256:c9a6538e0415310aad77cb94004ca6482330fece18036b5f360b62c45814c4ef \
+ --hash=sha256:d8dfc6ab58ca7dda47d9237349157500468e404b17213d44fc1cb77bce532288 \
+ --hash=sha256:da4869fc5e7f62a88f3fe0b5c919d1d9f7ea3cef92d3689de2823fd27e40aa75 \
+ --hash=sha256:de759aafbae8763283b2ee5869c7255391fbc4de3ff171f8f030b5ec48381b74 \
+ --hash=sha256:e3157c7594ff2ef1634ee058aafc56a82db665c9438fd41b390f3bde1ab12250 \
+ --hash=sha256:e3f276d8493c3c97930e354b2595a44a21348b320d859fb4a2b9f66da9ed27ab \
+ --hash=sha256:ee4c11e460685c3e0c64a4c5de82ae143622410950d6be863303a1c4ba0e36d6 \
+ --hash=sha256:f1235f5ea01b7db5468d53ece6aaddf1ad0b88d9e7462b86ef96fe04995d7247 \
+ --hash=sha256:f7cee03c9a2e2ee26ec07479f38ea9c884e301d42c6d43a19d20fb014e3ba925 \
+ --hash=sha256:f859fb09d9583a985be9a493d5cfc5515b56b08f7447759a0c5deaf68d80506e \
+ --hash=sha256:ffcebe56eb09ff0c0885e750036a095e23793ba6c2e894e7e63f6d89ad51f22e
# via sqlalchemy
mypy-extensions==1.1.0 \
--hash=sha256:1be4cccdb0f2482337c4743e60421de3a356cd97508abadd57d47403e94f5505 \
--hash=sha256:52e68efc3284861e772bbcd66823fde5ae21fd2fdb51c62a211403730b916558
# via mypy
-numpy==2.3.5 \
- --hash=sha256:00dc4e846108a382c5869e77c6ed514394bdeb3403461d25a829711041217d5b \
- --hash=sha256:0472f11f6ec23a74a906a00b48a4dcf3849209696dff7c189714511268d103ae \
- --hash=sha256:04822c00b5fd0323c8166d66c701dc31b7fbd252c100acd708c48f763968d6a3 \
- --hash=sha256:052e8c42e0c49d2575621c158934920524f6c5da05a1d3b9bab5d8e259e045f0 \
- --hash=sha256:09a1bea522b25109bf8e6f3027bd810f7c1085c64a0c7ce050c1676ad0ba010b \
- --hash=sha256:0cd00b7b36e35398fa2d16af7b907b65304ef8bb4817a550e06e5012929830fa \
- --hash=sha256:0d8163f43acde9a73c2a33605353a4f1bc4798745a8b1d73183b28e5b435ae28 \
- --hash=sha256:1062fde1dcf469571705945b0f221b73928f34a20c904ffb45db101907c3454e \
- --hash=sha256:11e06aa0af8c0f05104d56450d6093ee639e15f24ecf62d417329d06e522e017 \
- --hash=sha256:17531366a2e3a9e30762c000f2c43a9aaa05728712e25c11ce1dbe700c53ad41 \
- --hash=sha256:1978155dd49972084bd6ef388d66ab70f0c323ddee6f693d539376498720fb7e \
- --hash=sha256:1ed1ec893cff7040a02c8aa1c8611b94d395590d553f6b53629a4461dc7f7b63 \
- --hash=sha256:2dcd0808a421a482a080f89859a18beb0b3d1e905b81e617a188bd80422d62e9 \
- --hash=sha256:2e2eb32ddb9ccb817d620ac1d8dae7c3f641c1e5f55f531a33e8ab97960a75b8 \
- --hash=sha256:2feae0d2c91d46e59fcd62784a3a83b3fb677fead592ce51b5a6fbb4f95965ff \
- --hash=sha256:3095bdb8dd297e5920b010e96134ed91d852d81d490e787beca7e35ae1d89cf7 \
- --hash=sha256:30bc11310e8153ca664b14c5f1b73e94bd0503681fcf136a163de856f3a50139 \
- --hash=sha256:3101e5177d114a593d79dd79658650fe28b5a0d8abeb8ce6f437c0e6df5be1a4 \
- --hash=sha256:396084a36abdb603546b119d96528c2f6263921c50df3c8fd7cb28873a237748 \
- --hash=sha256:3997b5b3c9a771e157f9aae01dd579ee35ad7109be18db0e85dbdbe1de06e952 \
- --hash=sha256:414802f3b97f3c1eef41e530aaba3b3c1620649871d8cb38c6eaff034c2e16bd \
- --hash=sha256:51c1e14eb1e154ebd80e860722f9e6ed6ec89714ad2db2d3aa33c31d7c12179b \
- --hash=sha256:51c55fe3451421f3a6ef9a9c1439e82101c57a2c9eab9feb196a62b1a10b58ce \
- --hash=sha256:5ee6609ac3604fa7780e30a03e5e241a7956f8e2fcfe547d51e3afa5247ac47f \
- --hash=sha256:612a95a17655e213502f60cfb9bf9408efdc9eb1d5f50535cc6eb365d11b42b5 \
- --hash=sha256:6203fdf9f3dc5bdaed7319ad8698e685c7a3be10819f41d32a0723e611733b42 \
- --hash=sha256:63c0e9e7eea69588479ebf4a8a270d5ac22763cc5854e9a7eae952a3908103f7 \
- --hash=sha256:66f85ce62c70b843bab1fb14a05d5737741e74e28c7b8b5a064de10142fad248 \
- --hash=sha256:6cf9b429b21df6b99f4dee7a1218b8b7ffbbe7df8764dc0bd60ce8a0708fed1e \
- --hash=sha256:70b37199913c1bd300ff6e2693316c6f869c7ee16378faf10e4f5e3275b299c3 \
- --hash=sha256:727fd05b57df37dc0bcf1a27767a3d9a78cbbc92822445f32cc3436ba797337b \
- --hash=sha256:74ae7b798248fe62021dbf3c914245ad45d1a6b0cb4a29ecb4b31d0bfbc4cc3e \
- --hash=sha256:784db1dcdab56bf0517743e746dfb0f885fc68d948aba86eeec2cba234bdf1c0 \
- --hash=sha256:86945f2ee6d10cdfd67bcb4069c1662dd711f7e2a4343db5cecec06b87cf31aa \
- --hash=sha256:86d835afea1eaa143012a2d7a3f45a3adce2d7adc8b4961f0b362214d800846a \
- --hash=sha256:872a5cf366aec6bb1147336480fef14c9164b154aeb6542327de4970282cd2f5 \
- --hash=sha256:8b973c57ff8e184109db042c842423ff4f60446239bd585a5131cc47f06f789d \
- --hash=sha256:8cba086a43d54ca804ce711b2a940b16e452807acebe7852ff327f1ecd49b0d4 \
- --hash=sha256:8f7f0e05112916223d3f438f293abf0727e1181b5983f413dfa2fefc4098245c \
- --hash=sha256:900218e456384ea676e24ea6a0417f030a3b07306d29d7ad843957b40a9d8d52 \
- --hash=sha256:93eebbcf1aafdf7e2ddd44c2923e2672e1010bddc014138b229e49725b4d6be5 \
- --hash=sha256:9c75442b2209b8470d6d5d8b1c25714270686f14c749028d2199c54e29f20b4d \
- --hash=sha256:9ee2197ef8c4f0dfe405d835f3b6a14f5fee7782b5de51ba06fb65fc9b36e9f1 \
- --hash=sha256:a414504bef8945eae5f2d7cb7be2d4af77c5d1cb5e20b296c2c25b61dff2900c \
- --hash=sha256:a4b9159734b326535f4dd01d947f919c6eefd2d9827466a696c44ced82dfbc18 \
- --hash=sha256:a80afd79f45f3c4a7d341f13acbe058d1ca8ac017c165d3fa0d3de6bc1a079d7 \
- --hash=sha256:aa5bc7c5d59d831d9773d1170acac7893ce3a5e130540605770ade83280e7188 \
- --hash=sha256:acfd89508504a19ed06ef963ad544ec6664518c863436306153e13e94605c218 \
- --hash=sha256:aeffcab3d4b43712bb7a60b65f6044d444e75e563ff6180af8f98dd4b905dfd2 \
- --hash=sha256:afaffc4393205524af9dfa400fa250143a6c3bc646c08c9f5e25a9f4b4d6a903 \
- --hash=sha256:b0c7088a73aef3d687c4deef8452a3ac7c1be4e29ed8bf3b366c8111128ac60c \
- --hash=sha256:b46b4ec24f7293f23adcd2d146960559aaf8020213de8ad1909dba6c013bf89c \
- --hash=sha256:b501b5fa195cc9e24fe102f21ec0a44dffc231d2af79950b451e0d99cea02234 \
- --hash=sha256:bf06bc2af43fa8d32d30fae16ad965663e966b1a3202ed407b84c989c3221e82 \
- --hash=sha256:c804e3a5aba5460c73955c955bdbd5c08c354954e9270a2c1565f62e866bdc39 \
- --hash=sha256:c8a9958e88b65c3b27e22ca2a076311636850b612d6bbfb76e8d156aacde2aaf \
- --hash=sha256:cc0a57f895b96ec78969c34f682c602bf8da1a0270b09bc65673df2e7638ec20 \
- --hash=sha256:cc8920d2ec5fa99875b670bb86ddeb21e295cb07aa331810d9e486e0b969d946 \
- --hash=sha256:ccc933afd4d20aad3c00bcef049cb40049f7f196e0397f1109dba6fed63267b0 \
- --hash=sha256:ce581db493ea1a96c0556360ede6607496e8bf9b3a8efa66e06477267bc831e9 \
- --hash=sha256:d0f23b44f57077c1ede8c5f26b30f706498b4862d3ff0a7298b8411dd2f043ff \
- --hash=sha256:d21644de1b609825ede2f48be98dfde4656aefc713654eeee280e37cadc4e0ad \
- --hash=sha256:d6889ec4ec662a1a37eb4b4fb26b6100841804dac55bd9df579e326cdc146227 \
- --hash=sha256:de5672f4a7b200c15a4127042170a694d4df43c992948f5e1af57f0174beed10 \
- --hash=sha256:e6a0bc88393d65807d751a614207b7129a310ca4fe76a74e5c7da5fa5671417e \
- --hash=sha256:ed89927b86296067b4f81f108a2271d8926467a8868e554eaf370fc27fa3ccaf \
- --hash=sha256:ee3888d9ff7c14604052b2ca5535a30216aa0a58e948cdd3eeb8d3415f638769 \
- --hash=sha256:f0963b55cdd70fad460fa4c1341f12f976bb26cb66021a5580329bd498988310 \
- --hash=sha256:f16417ec91f12f814b10bafe79ef77e70113a2f5f7018640e7425ff979253425 \
- --hash=sha256:f28620fe26bee16243be2b7b874da327312240a7cdc38b769a697578d2100013 \
- --hash=sha256:f4255143f5160d0de972d28c8f9665d882b5f61309d8362fdd3e103cf7bf010c \
- --hash=sha256:ffac52f28a7849ad7576293c0cb7b9f08304e8f7d738a8cb8a90ec4c55a998eb \
- --hash=sha256:ffe22d2b05504f786c867c8395de703937f934272eb67586817b46188b4ded6d \
- --hash=sha256:fffe29a1ef00883599d1dc2c51aa2e5d80afe49523c261a74933df395c15c520
+numpy==2.4.0 \
+ --hash=sha256:009bd0ea12d3c784b6639a8457537016ce5172109e585338e11334f6a7bb88ee \
+ --hash=sha256:02a2038eb27f9443a8b266a66911e926566b5a6ffd1a689b588f7f35b81e7dc3 \
+ --hash=sha256:0804a8e4ab070d1d35496e65ffd3cf8114c136a2b81f61dfab0de4b218aacfd5 \
+ --hash=sha256:0feafc9e03128074689183031181fac0897ff169692d8492066e949041096548 \
+ --hash=sha256:1889b3a3f47a7b5bee16bc25a2145bd7cb91897f815ce3499db64c7458b6d91d \
+ --hash=sha256:1d8f9fde5f6dc1b6fc34df8162f3b3079365468703fee7f31d4e0cc8c63baed9 \
+ --hash=sha256:1ee32359fb7543b7b7bd0b2f46294db27e29e7bbdf70541e81b190836cd83ded \
+ --hash=sha256:20c115517513831860c573996e395707aa9fb691eb179200125c250e895fcd93 \
+ --hash=sha256:21555da4ec4a0c942520ead42c3b0dc9477441e085c42b0fbdd6a084869a6f6b \
+ --hash=sha256:23a3e9d1a6f360267e8fbb38ba5db355a6a7e9be71d7fce7ab3125e88bb646c8 \
+ --hash=sha256:2a8b6bb8369abefb8bd1801b054ad50e02b3275c8614dc6e5b0373c305291037 \
+ --hash=sha256:2e284ca13d5a8367e43734148622caf0b261b275673823593e3e3634a6490f83 \
+ --hash=sha256:2f585f52b2baf07ff3356158d9268ea095e221371f1074fadea2f42544d58b4d \
+ --hash=sha256:316b2f2584682318539f0bcaca5a496ce9ca78c88066579ebd11fd06f8e4741e \
+ --hash=sha256:32ed06d0fe9cae27d8fb5f400c63ccee72370599c75e683a6358dd3a4fb50aaf \
+ --hash=sha256:355354388cba60f2132df297e2d53053d4063f79077b67b481d21276d61fc4df \
+ --hash=sha256:35ddc8f4914466e6fc954c76527aa91aa763682a4f6d73249ef20b418fe6effb \
+ --hash=sha256:36667db4d6c1cea79c8930ab72fadfb4060feb4bfe724141cd4bd064d2e5f8ce \
+ --hash=sha256:36cbfb13c152b1c7c184ddac43765db8ad672567e7bafff2cc755a09917ed2e6 \
+ --hash=sha256:39699233bc72dd482da1415dcb06076e32f60eddc796a796c5fb6c5efce94667 \
+ --hash=sha256:39b19251dec4de8ff8496cd0806cbe27bf0684f765abb1f4809554de93785f2d \
+ --hash=sha256:3d857f55e7fdf7c38ab96c4558c95b97d1c685be6b05c249f5fdafcbd6f9899e \
+ --hash=sha256:3de19cfecd1465d0dcf8a5b5ea8b3155b42ed0b639dba4b71e323d74f2a3be5e \
+ --hash=sha256:3f3096405acc48887458bbf9f6814d43785ac7ba2a57ea6442b581dedbc60ce6 \
+ --hash=sha256:40483b2f2d3ba7aad426443767ff5632ec3156ef09742b96913787d13c336471 \
+ --hash=sha256:413aa561266a4be2d06cd2b9665e89d9f54c543f418773076a76adcf2af08bc7 \
+ --hash=sha256:44aba2f0cafd287871a495fb3163408b0bd25bbce135c6f621534a07f4f7875c \
+ --hash=sha256:49ff32b09f5aa0cd30a20c2b39db3e669c845589f2b7fc910365210887e39344 \
+ --hash=sha256:4d1cfce39e511069b11e67cd0bd78ceff31443b7c9e5c04db73c7a19f572967c \
+ --hash=sha256:57c540ed8fb1f05cb997c6761cd56db72395b0d6985e90571ff660452ade4f98 \
+ --hash=sha256:5f48cb3e88fbc294dc90e215d86fbaf1c852c63dbdb6c3a3e63f45c4b57f7344 \
+ --hash=sha256:5fe44e277225fd3dff6882d86d3d447205d43532c3627313d17e754fb3905a0e \
+ --hash=sha256:60e8c196cd82cbbd4f130b5290007e13e6de3eca79f0d4d38014769d96a7c475 \
+ --hash=sha256:65167da969cd1ec3a1df31cb221ca3a19a8aaa25370ecb17d428415e93c1935e \
+ --hash=sha256:680060061adb2d74ce352628cb798cfdec399068aa7f07ba9fb818b2b3305f98 \
+ --hash=sha256:6bbaebf0d11567fa8926215ae731e1d58e6ec28a8a25235b8a47405d301332db \
+ --hash=sha256:6c05483c3136ac4c91b4e81903cb53a8707d316f488124d0398499a4f8e8ef51 \
+ --hash=sha256:6dc8b7e2f4eb184b37655195f421836cfae6f58197b67e3ffc501f1333d993fa \
+ --hash=sha256:6e504f7b16118198f138ef31ba24d985b124c2c469fe8467007cf30fd992f934 \
+ --hash=sha256:74623f2ab5cc3f7c886add4f735d1031a1d2be4a4ae63c0546cfd74e7a31ddf6 \
+ --hash=sha256:77f0d13fa87036d7553bf81f0e1fe3ce68d14c9976c9851744e4d3e91127e95f \
+ --hash=sha256:85eef4cb5625c47ee6425c58a3502555e10f45ee973da878ac8248ad58c136f3 \
+ --hash=sha256:882567b7ae57c1b1a0250208cc21a7976d8cbcc49d5a322e607e6f09c9e0bd53 \
+ --hash=sha256:8b986403023c8f3bf8f487c2e6186afda156174d31c175f747d8934dfddf3479 \
+ --hash=sha256:8cfa5f29a695cb7438965e6c3e8d06e0416060cf0d709c1b1c1653a939bf5c2a \
+ --hash=sha256:8eafe7c36c8430b7794edeab3087dec7bf31d634d92f2af9949434b9d1964cba \
+ --hash=sha256:9198f447e1dc5647d07c9a6bbe2063cc0132728cc7175b39dbc796da5b54920d \
+ --hash=sha256:92190db305a6f48734d3982f2c60fa30d6b5ee9bff10f2887b930d7b40119f4c \
+ --hash=sha256:927ccf5cd17c48f801f4ed43a7e5673a2724bd2171460be3e3894e6e332ef83a \
+ --hash=sha256:98e81648e0b36e325ab67e46b5400a7a6d4a22b8a7c8e8bbfe20e7db7906bf95 \
+ --hash=sha256:9a818668b674047fd88c4cddada7ab8f1c298812783e8328e956b78dc4807f9f \
+ --hash=sha256:a152d86a3ae00ba5f47b3acf3b827509fd0b6cb7d3259665e63dafbad22a75ea \
+ --hash=sha256:a2718c1de8504121714234b6f8241d0019450353276c88b9453c9c3d92e101db \
+ --hash=sha256:a39fb973a726e63223287adc6dafe444ce75af952d711e400f3bf2b36ef55a7b \
+ --hash=sha256:a899699294f28f7be8992853c0c60741f16ff199205e2e6cdca155762cbaa59d \
+ --hash=sha256:a8fdfed3deaf1928fb7667d96e0567cdf58c2b370ea2ee7e586aa383ec2cb346 \
+ --hash=sha256:aabb081ca0ec5d39591fc33018cd4b3f96e1a2dd6756282029986d00a785fba4 \
+ --hash=sha256:b1f5b45829ac1848893f0ddf5cb326110604d6df96cdc255b0bf9edd154104d4 \
+ --hash=sha256:b48e35f4ab6f6a7597c46e301126ceba4c44cd3280e3750f85db48b082624fa4 \
+ --hash=sha256:b54c83f1c0c0f1d748dca0af516062b8829d53d1f0c402be24b4257a9c48ada6 \
+ --hash=sha256:ba0cb30acd3ef11c94dc27fbfba68940652492bc107075e7ffe23057f9425681 \
+ --hash=sha256:bb50ce5fb202a26fd5404620e7ef820ad1ab3558b444cb0b55beb7ef66cd2d63 \
+ --hash=sha256:c95eb6db2884917d86cde0b4d4cf31adf485c8ec36bf8696dd66fa70de96f36b \
+ --hash=sha256:d0ffd9e2e4441c96a9c91ec1783285d80bf835b677853fc2770a89d50c1e48ac \
+ --hash=sha256:d57b5046c120561ba8fa8e4030fbb8b822f3063910fa901ffadf16e2b7128ad6 \
+ --hash=sha256:d9e6a7664ddd9746e20b7325351fe1a8408d0a2bf9c63b5e898290ddc8f09544 \
+ --hash=sha256:dc578891de1db95b2a35001b695451767b580bb45753717498213c5ff3c41d63 \
+ --hash=sha256:e0434aa22c821f44eeb4c650b81c7fbdd8c0122c6c4b5a576a76d5a35625ecd9 \
+ --hash=sha256:e06a922a469cae9a57100864caf4f8a97a1026513793969f8ba5b63137a35d25 \
+ --hash=sha256:e493962256a38f58283de033d8af176c5c91c084ea30f15834f7545451c42059 \
+ --hash=sha256:ecb0019d44f4cdb50b676c5d0cb4b1eae8e15d1ed3d3e6639f986fc92b2ec52c \
+ --hash=sha256:f935c4493eda9069851058fa0d9e39dbf6286be690066509305e52912714dbb2
# via
# feast (setup.py)
# dask
@@ -759,26 +757,28 @@ protobuf==6.33.2 \
--hash=sha256:d9b19771ca75935b3a4422957bc518b0cecb978b31d1dd12037b088f6bcc0e43 \
--hash=sha256:fc2a0e8b05b180e5fc0dd1559fe8ebdae21a27e81ac77728fb6c42b12c7419b4
# via feast (setup.py)
-psutil==7.1.3 \
- --hash=sha256:0005da714eee687b4b8decd3d6cc7c6db36215c9e74e5ad2264b90c3df7d92dc \
- --hash=sha256:1068c303be3a72f8e18e412c5b2a8f6d31750fb152f9cb106b54090296c9d251 \
- --hash=sha256:18349c5c24b06ac5612c0428ec2a0331c26443d259e2a0144a9b24b4395b58fa \
- --hash=sha256:19644c85dcb987e35eeeaefdc3915d059dac7bd1167cdcdbf27e0ce2df0c08c0 \
- --hash=sha256:2bdbcd0e58ca14996a42adf3621a6244f1bb2e2e528886959c72cf1e326677ab \
- --hash=sha256:31d77fcedb7529f27bb3a0472bea9334349f9a04160e8e6e5020f22c59893264 \
- --hash=sha256:3792983e23b69843aea49c8f5b8f115572c5ab64c153bada5270086a2123c7e7 \
- --hash=sha256:3bb428f9f05c1225a558f53e30ccbad9930b11c3fc206836242de1091d3e7dd3 \
- --hash=sha256:56d974e02ca2c8eb4812c3f76c30e28836fffc311d55d979f1465c1feeb2b68b \
- --hash=sha256:6c86281738d77335af7aec228328e944b30930899ea760ecf33a4dba66be5e74 \
- --hash=sha256:8f33a3702e167783a9213db10ad29650ebf383946e91bc77f28a5eb083496bc9 \
- --hash=sha256:95ef04cf2e5ba0ab9eaafc4a11eaae91b44f4ef5541acd2ee91d9108d00d59a7 \
- --hash=sha256:ad81425efc5e75da3f39b3e636293360ad8d0b49bed7df824c79764fb4ba9b8b \
- --hash=sha256:b403da1df4d6d43973dc004d19cee3b848e998ae3154cc8097d139b77156c353 \
- --hash=sha256:bc31fa00f1fbc3c3802141eede66f3a2d51d89716a194bf2cd6fc68310a19880 \
- --hash=sha256:bd0d69cee829226a761e92f28140bec9a5ee9d5b4fb4b0cc589068dbfff559b1 \
- --hash=sha256:c525ffa774fe4496282fb0b1187725793de3e7c6b29e41562733cae9ada151ee \
- --hash=sha256:f39c2c19fe824b47484b96f9692932248a54c43799a84282cfe58d05a6449efd \
- --hash=sha256:fac9cd332c67f4422504297889da5ab7e05fd11e3c4392140f7370f4208ded1f
+psutil==7.2.1 \
+ --hash=sha256:05cc68dbb8c174828624062e73078e7e35406f4ca2d0866c272c2410d8ef06d1 \
+ --hash=sha256:08a2f175e48a898c8eb8eace45ce01777f4785bc744c90aa2cc7f2fa5462a266 \
+ --hash=sha256:0d67c1822c355aa6f7314d92018fb4268a76668a536f133599b91edd48759442 \
+ --hash=sha256:2ceae842a78d1603753561132d5ad1b2f8a7979cb0c283f5b52fb4e6e14b1a79 \
+ --hash=sha256:35630d5af80d5d0d49cfc4d64c1c13838baf6717a13effb35869a5919b854cdf \
+ --hash=sha256:3fce5f92c22b00cdefd1645aa58ab4877a01679e901555067b1bd77039aa589f \
+ --hash=sha256:494c513ccc53225ae23eec7fe6e1482f1b8a44674241b54561f755a898650679 \
+ --hash=sha256:5e38404ca2bb30ed7267a46c02f06ff842e92da3bb8c5bfdadbd35a5722314d8 \
+ --hash=sha256:81442dac7abfc2f4f4385ea9e12ddf5a796721c0f6133260687fec5c3780fa49 \
+ --hash=sha256:923f8653416604e356073e6e0bccbe7c09990acef442def2f5640dd0faa9689f \
+ --hash=sha256:93f3f7b0bb07711b49626e7940d6fe52aa9940ad86e8f7e74842e73189712129 \
+ --hash=sha256:99a4cd17a5fdd1f3d014396502daa70b5ec21bf4ffe38393e152f8e449757d67 \
+ --hash=sha256:ab2b98c9fc19f13f59628d94df5cc4cc4844bc572467d113a8b517d634e362c6 \
+ --hash=sha256:b1b0671619343aa71c20ff9767eced0483e4fc9e1f489d50923738caf6a03c17 \
+ --hash=sha256:b2e953fcfaedcfbc952b44744f22d16575d3aa78eb4f51ae74165b4e96e55f42 \
+ --hash=sha256:ba9f33bb525b14c3ea563b2fd521a84d2fa214ec59e3e6a2858f78d0844dd60d \
+ --hash=sha256:cfbe6b40ca48019a51827f20d830887b3107a74a79b01ceb8cc8de4ccb17b672 \
+ --hash=sha256:d34d2ca888208eea2b5c68186841336a7f5e0b990edec929be909353a202768a \
+ --hash=sha256:ea46c0d060491051d39f0d2cff4f98d5c72b288289f57a21556cc7d504db37fc \
+ --hash=sha256:f7583aec590485b43ca601dd9cea0dcd65bd7bb21d30ef4ddbf4ea6b5ed1bdd3 \
+ --hash=sha256:f78baafb38436d5a128f837fab2d92c276dfb48af01a240b861ae02b2413ada8
# via feast (setup.py)
pyarrow==21.0.0 \
--hash=sha256:067c66ca29aaedae08218569a114e413b26e742171f526e828e1064fcdec13f4 \
@@ -1199,12 +1199,14 @@ sqlalchemy[mypy]==2.0.45 \
--hash=sha256:1d8b4a7a8c9b537509d56d5cd10ecdcfbb95912d72480c8861524efecc6a3fff \
--hash=sha256:215f0528b914e5c75ef2559f69dca86878a3beeb0c1be7279d77f18e8d180ed4 \
--hash=sha256:2c0b74aa79e2deade948fe8593654c8ef4228c44ba862bb7c9585c8e0db90f33 \
+ --hash=sha256:2e90a344c644a4fa871eb01809c32096487928bd2038bf10f3e4515cb688cc56 \
--hash=sha256:3c5f76216e7b85770d5bb5130ddd11ee89f4d52b11783674a662c7dd57018177 \
--hash=sha256:470daea2c1ce73910f08caf10575676a37159a6d16c4da33d0033546bddebc9b \
--hash=sha256:4748601c8ea959e37e03d13dcda4a44837afcd1b21338e637f7c935b8da06177 \
--hash=sha256:4b6bec67ca45bc166c8729910bd2a87f1c0407ee955df110d78948f5b5827e8a \
--hash=sha256:5225a288e4c8cc2308dbdd874edad6e7d0fd38eac1e9e5f23503425c8eee20d0 \
--hash=sha256:56ead1f8dfb91a54a28cd1d072c74b3d635bcffbd25e50786533b822d4f2cde2 \
+ --hash=sha256:5964f832431b7cdfaaa22a660b4c7eb1dfcd6ed41375f67fd3e3440fd95cb3cc \
--hash=sha256:59a8b8bd9c6bedf81ad07c8bd5543eedca55fe9b8780b2b628d495ba55f8db1e \
--hash=sha256:672c45cae53ba88e0dad74b9027dddd09ef6f441e927786b05bec75d949fbb2e \
--hash=sha256:6d0beadc2535157070c9c17ecf25ecec31e13c229a8f69196d7590bde8082bf1 \
@@ -1223,7 +1225,9 @@ sqlalchemy[mypy]==2.0.45 \
--hash=sha256:b8c8b41b97fba5f62349aa285654230296829672fc9939cd7f35aab246d1c08b \
--hash=sha256:ba547ac0b361ab4f1608afbc8432db669bd0819b3e12e29fb5fa9529a8bba81d \
--hash=sha256:c1c2091b1489435ff85728fafeb990f073e64f6f5e81d5cd53059773e8521eb6 \
+ --hash=sha256:c64772786d9eee72d4d3784c28f0a636af5b0a29f3fe26ff11f55efe90c0bd85 \
--hash=sha256:cd337d3526ec5298f67d6a30bbbe4ed7e5e68862f0bf6dd21d289f8d37b7d60b \
+ --hash=sha256:d29b2b99d527dbc66dd87c3c3248a5dd789d974a507f4653c969999fc7c1191b \
--hash=sha256:d2c3684fca8a05f0ac1d9a21c1f4a266983a7ea9180efb80ffeb03861ecd01a0 \
--hash=sha256:d62e47f5d8a50099b17e2bfc1b0c7d7ecd8ba6b46b1507b58cc4f05eefc3bb1c \
--hash=sha256:d8a2ca754e5415cde2b656c27900b19d50ba076aa05ce66e2207623d3fe41f5a \
@@ -1285,13 +1289,13 @@ typing-inspection==0.4.2 \
--hash=sha256:4ed1cacbdc298c220f1bd249ed5287caa16f34d44ef4e9c3d0cbad5b521545e7 \
--hash=sha256:ba561c48a67c5958007083d386c3295464928b01faa735ab8547c5692e87f464
# via pydantic
-tzdata==2025.2 \
- --hash=sha256:1a403fada01ff9221ca8044d701868fa132215d84beb92242d9acd2147f667a8 \
- --hash=sha256:b60a638fcc0daffadf82fe0f57e53d06bdec2f36c4df66280ae79bce6bd6f2b9
+tzdata==2025.3 \
+ --hash=sha256:06a47e5700f3081aab02b2e513160914ff0694bce9947d6b76ebd6bf57cfc5d1 \
+ --hash=sha256:de39c2ca5dc7b0344f2eba86f49d614019d29f060fc4ebc8a417896a620b56a7
# via pandas
-urllib3==2.6.1 \
- --hash=sha256:5379eb6e1aba4088bae84f8242960017ec8d8e3decf30480b3a1abdaa9671a3f \
- --hash=sha256:e67d06fe947c36a7ca39f4994b08d73922d40e6cca949907be05efa6fd75110b
+urllib3==2.6.2 \
+ --hash=sha256:016f9c98bb7e98085cb2b4b17b87d2c702975664e4f060c6532e64d1c1a5e797 \
+ --hash=sha256:ec21cddfe7724fc7cb4ba4bea7aa8e2ef36f607a4bab81aa6ce42a13dc3f03dd
# via requests
uvicorn[standard]==0.34.0 \
--hash=sha256:023dc038422502fa28a09c7a30bf2b6991512da7dcdb8fd35fe57cfc154126f4 \
diff --git a/sdk/python/requirements/py3.12-ci-requirements.txt b/sdk/python/requirements/py3.12-ci-requirements.txt
index ee0d183d79f..50efe8231a9 100644
--- a/sdk/python/requirements/py3.12-ci-requirements.txt
+++ b/sdk/python/requirements/py3.12-ci-requirements.txt
@@ -250,9 +250,9 @@ attrs==25.4.0 \
# jsonlines
# jsonschema
# referencing
-azure-core==1.36.0 \
- --hash=sha256:22e5605e6d0bf1d229726af56d9e92bc37b6e726b141a18be0b4d424131741b7 \
- --hash=sha256:fee9923a3a753e94a259563429f3644aaf05c486d45b1215d098115102d91d3b
+azure-core==1.37.0 \
+ --hash=sha256:7064f2c11e4b97f340e8e8c6d923b822978be3016e46b7bc4aa4b337cfb48aee \
+ --hash=sha256:b3abe2c59e7d6bb18b38c275a5029ff80f98990e7c90a5e646249a56630fcc19
# via
# azure-identity
# azure-storage-blob
@@ -341,9 +341,9 @@ beautifulsoup4==4.14.3 \
# via
# docling
# nbconvert
-bigtree==1.0.3 \
- --hash=sha256:18402a143130868b17ca84a74ca263e6f32f046d6978c30d244f8b94c4a01227 \
- --hash=sha256:99a18b6937a9b4ab8e560fec5c0720e10ebf37f84e44f9b5f47702c2e84c9aaa
+bigtree==1.0.4 \
+ --hash=sha256:e4af0c5bc0d2cd72e18442965e4509f642b16a0de65db6d0ec116e30f959010c \
+ --hash=sha256:f58a3238bb9b1142d893c9de4921bfd18d435427c75e0c168dd580eabf6dc7fd
# via feast (setup.py)
bleach[css]==6.3.0 \
--hash=sha256:6f3b91b1c0a02bb9a78b5a454c92506aa0fdf197e1d5e114d2e00c6f64306d22 \
@@ -373,9 +373,9 @@ build==1.3.0 \
# feast (setup.py)
# pip-tools
# singlestoredb
-cachetools==6.2.2 \
- --hash=sha256:6c09c98183bf58560c97b2abfcedcbaf6a896a490f534b031b661d3723b45ace \
- --hash=sha256:8e6d266b25e539df852251cfd6f990b4bc3a141db73b939058d809ebd2590fc6
+cachetools==6.2.4 \
+ --hash=sha256:69a7a52634fed8b8bf6e24a050fb60bff1c9bd8f6d24572b99c32d4e71e62a51 \
+ --hash=sha256:82c5c05585e70b6ba2d3ae09ea60b79548872185d2f24ae1f2709d37299fd607
# via google-auth
cassandra-driver==3.29.3 \
--hash=sha256:064bf45d3ca87239e11168c0110676fc64f7fdbddb4bcba9be787b8ad5f6d734 \
@@ -782,99 +782,99 @@ couchbase-columnar==1.0.0 \
--hash=sha256:fc0fad2d386c5b5df7aaaccd8751e01caa886cc640cc8c92523dd07c4e7be519 \
--hash=sha256:fc4efa3e15190c3731478006de494b046bc57785e9c8ae99ac8b375a91683e38
# via feast (setup.py)
-coverage[toml]==7.13.0 \
- --hash=sha256:0018f73dfb4301a89292c73be6ba5f58722ff79f51593352759c1790ded1cabe \
- --hash=sha256:00c3d22cf6fb1cf3bf662aaaa4e563be8243a5ed2630339069799835a9cc7f9b \
- --hash=sha256:02d9fb9eccd48f6843c98a37bd6817462f130b86da8660461e8f5e54d4c06070 \
- --hash=sha256:0602f701057c6823e5db1b74530ce85f17c3c5be5c85fc042ac939cbd909426e \
- --hash=sha256:06cac81bf10f74034e055e903f5f946e3e26fc51c09fc9f584e4a1605d977053 \
- --hash=sha256:086cede306d96202e15a4b77ace8472e39d9f4e5f9fd92dd4fecdfb2313b2080 \
- --hash=sha256:0900872f2fdb3ee5646b557918d02279dc3af3dfb39029ac4e945458b13f73bc \
- --hash=sha256:0a3a30f0e257df382f5f9534d4ce3d4cf06eafaf5192beb1a7bd066cb10e78fb \
- --hash=sha256:0b3d67d31383c4c68e19a88e28fc4c2e29517580f1b0ebec4a069d502ce1e0bf \
- --hash=sha256:0dfa3855031070058add1a59fdfda0192fd3e8f97e7c81de0596c145dea51820 \
- --hash=sha256:0f4872f5d6c54419c94c25dd6ae1d015deeb337d06e448cd890a1e89a8ee7f3b \
- --hash=sha256:11c21557d0e0a5a38632cbbaca5f008723b26a89d70db6315523df6df77d6232 \
- --hash=sha256:166ad2a22ee770f5656e1257703139d3533b4a0b6909af67c6b4a3adc1c98657 \
- --hash=sha256:193c3887285eec1dbdb3f2bd7fbc351d570ca9c02ca756c3afbc71b3c98af6ef \
- --hash=sha256:1d84e91521c5e4cb6602fe11ece3e1de03b2760e14ae4fcf1a4b56fa3c801fcd \
- --hash=sha256:1ed5630d946859de835a85e9a43b721123a8a44ec26e2830b296d478c7fd4259 \
- --hash=sha256:22486cdafba4f9e471c816a2a5745337742a617fef68e890d8baf9f3036d7833 \
- --hash=sha256:22ccfe8d9bb0d6134892cbe1262493a8c70d736b9df930f3f3afae0fe3ac924d \
- --hash=sha256:24e4e56304fdb56f96f80eabf840eab043b3afea9348b88be680ec5986780a0f \
- --hash=sha256:25dc33618d45456ccb1d37bce44bc78cf269909aa14c4db2e03d63146a8a1493 \
- --hash=sha256:263c3dbccc78e2e331e59e90115941b5f53e85cfcc6b3b2fbff1fd4e3d2c6ea8 \
- --hash=sha256:28ee1c96109974af104028a8ef57cec21447d42d0e937c0275329272e370ebcf \
- --hash=sha256:30a3a201a127ea57f7e14ba43c93c9c4be8b7d17a26e03bb49e6966d019eede9 \
- --hash=sha256:3188936845cd0cb114fa6a51842a304cdbac2958145d03be2377ec41eb285d19 \
- --hash=sha256:367449cf07d33dc216c083f2036bb7d976c6e4903ab31be400ad74ad9f85ce98 \
- --hash=sha256:37eee4e552a65866f15dedd917d5e5f3d59805994260720821e2c1b51ac3248f \
- --hash=sha256:3a10260e6a152e5f03f26db4a407c4c62d3830b9af9b7c0450b183615f05d43b \
- --hash=sha256:3a7b1cd820e1b6116f92c6128f1188e7afe421c7e1b35fa9836b11444e53ebd9 \
- --hash=sha256:3ab483ea0e251b5790c2aac03acde31bff0c736bf8a86829b89382b407cd1c3b \
- --hash=sha256:3ad968d1e3aa6ce5be295ab5fe3ae1bf5bb4769d0f98a80a0252d543a2ef2e9e \
- --hash=sha256:445badb539005283825959ac9fa4a28f712c214b65af3a2c464f1adc90f5fcbc \
- --hash=sha256:453b7ec753cf5e4356e14fe858064e5520c460d3bbbcb9c35e55c0d21155c256 \
- --hash=sha256:494f5459ffa1bd45e18558cd98710c36c0b8fbfa82a5eabcbe671d80ecffbfe8 \
- --hash=sha256:4b5de7d4583e60d5fd246dd57fcd3a8aa23c6e118a8c72b38adf666ba8e7e927 \
- --hash=sha256:4f3e223b2b2db5e0db0c2b97286aba0036ca000f06aca9b12112eaa9af3d92ae \
- --hash=sha256:4fdb6f54f38e334db97f72fa0c701e66d8479af0bc3f9bfb5b90f1c30f54500f \
- --hash=sha256:51a202e0f80f241ccb68e3e26e19ab5b3bf0f813314f2c967642f13ebcf1ddfe \
- --hash=sha256:581f086833d24a22c89ae0fe2142cfaa1c92c930adf637ddf122d55083fb5a0f \
- --hash=sha256:583221913fbc8f53b88c42e8dbb8fca1d0f2e597cb190ce45916662b8b9d9621 \
- --hash=sha256:58632b187be6f0be500f553be41e277712baa278147ecb7559983c6d9faf7ae1 \
- --hash=sha256:5c67dace46f361125e6b9cace8fe0b729ed8479f47e70c89b838d319375c8137 \
- --hash=sha256:5e70f92ef89bac1ac8a99b3324923b4749f008fdbd7aa9cb35e01d7a284a04f9 \
- --hash=sha256:5f5d9bd30756fff3e7216491a0d6d520c448d5124d3d8e8f56446d6412499e74 \
- --hash=sha256:5f8a0297355e652001015e93be345ee54393e45dc3050af4a0475c5a2b767d46 \
- --hash=sha256:62d7c4f13102148c78d7353c6052af6d899a7f6df66a32bddcc0c0eb7c5326f8 \
- --hash=sha256:69ac2c492918c2461bc6ace42d0479638e60719f2a4ef3f0815fa2df88e9f940 \
- --hash=sha256:6abb3a4c52f05e08460bd9acf04fec027f8718ecaa0d09c40ffbc3fbd70ecc39 \
- --hash=sha256:6e63ccc6e0ad8986386461c3c4b737540f20426e7ec932f42e030320896c311a \
- --hash=sha256:6e9e451dee940a86789134b6b0ffbe31c454ade3b849bb8a9d2cca2541a8e91d \
- --hash=sha256:6fb2d5d272341565f08e962cce14cdf843a08ac43bd621783527adb06b089c4b \
- --hash=sha256:71936a8b3b977ddd0b694c28c6a34f4fff2e9dd201969a4ff5d5fc7742d614b0 \
- --hash=sha256:73419b89f812f498aca53f757dd834919b48ce4799f9d5cad33ca0ae442bdb1a \
- --hash=sha256:739c6c051a7540608d097b8e13c76cfa85263ced467168dc6b477bae3df7d0e2 \
- --hash=sha256:7464663eaca6adba4175f6c19354feea61ebbdd735563a03d1e472c7072d27bb \
- --hash=sha256:74c136e4093627cf04b26a35dab8cbfc9b37c647f0502fc313376e11726ba303 \
- --hash=sha256:76541dc8d53715fb4f7a3a06b34b0dc6846e3c69bc6204c55653a85dd6220971 \
- --hash=sha256:7a485ff48fbd231efa32d58f479befce52dcb6bfb2a88bb7bf9a0b89b1bc8030 \
- --hash=sha256:7e442c013447d1d8d195be62852270b78b6e255b79b8675bad8479641e21fd96 \
- --hash=sha256:7f15a931a668e58087bc39d05d2b4bf4b14ff2875b49c994bbdb1c2217a8daeb \
- --hash=sha256:7f88ae3e69df2ab62fb0bc5219a597cb890ba5c438190ffa87490b315190bb33 \
- --hash=sha256:8069e831f205d2ff1f3d355e82f511eb7c5522d7d413f5db5756b772ec8697f8 \
- --hash=sha256:850d2998f380b1e266459ca5b47bc9e7daf9af1d070f66317972f382d46f1904 \
- --hash=sha256:898cce66d0836973f48dda4e3514d863d70142bdf6dfab932b9b6a90ea5b222d \
- --hash=sha256:9097818b6cc1cfb5f174e3263eba4a62a17683bcfe5c4b5d07f4c97fa51fbf28 \
- --hash=sha256:936bc20503ce24770c71938d1369461f0c5320830800933bc3956e2a4ded930e \
- --hash=sha256:9372dff5ea15930fea0445eaf37bbbafbc771a49e70c0aeed8b4e2c2614cc00e \
- --hash=sha256:9987a9e4f8197a1000280f7cc089e3ea2c8b3c0a64d750537809879a7b4ceaf9 \
- --hash=sha256:99acd4dfdfeb58e1937629eb1ab6ab0899b131f183ee5f23e0b5da5cba2fec74 \
- --hash=sha256:9b01c22bc74a7fb44066aaf765224c0d933ddf1f5047d6cdfe4795504a4493f8 \
- --hash=sha256:a00d3a393207ae12f7c49bb1c113190883b500f48979abb118d8b72b8c95c032 \
- --hash=sha256:a23e5a1f8b982d56fa64f8e442e037f6ce29322f1f9e6c2344cd9e9f4407ee57 \
- --hash=sha256:a2bdb3babb74079f021696cb46b8bb5f5661165c385d3a238712b031a12355be \
- --hash=sha256:a394aa27f2d7ff9bc04cf703817773a59ad6dfbd577032e690f961d2460ee936 \
- --hash=sha256:a6c6e16b663be828a8f0b6c5027d36471d4a9f90d28444aa4ced4d48d7d6ae8f \
- --hash=sha256:af0a583efaacc52ae2521f8d7910aff65cdb093091d76291ac5820d5e947fc1c \
- --hash=sha256:af827b7cbb303e1befa6c4f94fd2bf72f108089cfa0f8abab8f4ca553cf5ca5a \
- --hash=sha256:c4be718e51e86f553bcf515305a158a1cd180d23b72f07ae76d6017c3cc5d791 \
- --hash=sha256:cdb3c9f8fef0a954c632f64328a3935988d33a6604ce4bf67ec3e39670f12ae5 \
- --hash=sha256:d10fd186aac2316f9bbb46ef91977f9d394ded67050ad6d84d94ed6ea2e8e54e \
- --hash=sha256:d1e97353dcc5587b85986cda4ff3ec98081d7e84dd95e8b2a6d59820f0545f8a \
- --hash=sha256:d2a9d7f1c11487b1c69367ab3ac2d81b9b3721f097aa409a3191c3e90f8f3dd7 \
- --hash=sha256:de7f6748b890708578fc4b7bb967d810aeb6fcc9bff4bb77dbca77dab2f9df6a \
- --hash=sha256:e5330fa0cc1f5c3c4c3bb8e101b742025933e7848989370a1d4c8c5e401ea753 \
- --hash=sha256:e999e2dcc094002d6e2c7bbc1fb85b58ba4f465a760a8014d97619330cdbbbf3 \
- --hash=sha256:eb76670874fdd6091eedcc856128ee48c41a9bbbb9c3f1c7c3cf169290e3ffd6 \
- --hash=sha256:f1c23e24a7000da892a312fb17e33c5f94f8b001de44b7cf8ba2e36fbd15859e \
- --hash=sha256:f2ffc92b46ed6e6760f1d47a71e56b5664781bc68986dbd1836b2b70c0ce2071 \
- --hash=sha256:f4f72a85316d8e13234cafe0a9f81b40418ad7a082792fa4165bd7d45d96066b \
- --hash=sha256:f59883c643cb19630500f57016f76cfdcd6845ca8c5b5ea1f6e17f74c8e5f511 \
- --hash=sha256:f6aaef16d65d1787280943f1c8718dc32e9cf141014e4634d64446702d26e0ff \
- --hash=sha256:fe81055d8c6c9de76d60c94ddea73c290b416e061d40d542b24a5871bad498b7 \
- --hash=sha256:ff45e0cd8451e293b63ced93161e189780baf444119391b3e7d25315060368a6
+coverage[toml]==7.13.1 \
+ --hash=sha256:0403f647055de2609be776965108447deb8e384fe4a553c119e3ff6bfbab4784 \
+ --hash=sha256:0642eae483cc8c2902e4af7298bf886d605e80f26382124cddc3967c2a3df09e \
+ --hash=sha256:0b609fc9cdbd1f02e51f67f51e5aee60a841ef58a68d00d5ee2c0faf357481a3 \
+ --hash=sha256:0d2c11f3ea4db66b5cbded23b20185c35066892c67d80ec4be4bab257b9ad1e0 \
+ --hash=sha256:0e42e0ec0cd3e0d851cb3c91f770c9301f48647cb2877cb78f74bdaa07639a79 \
+ --hash=sha256:132718176cc723026d201e347f800cd1a9e4b62ccd3f82476950834dad501c75 \
+ --hash=sha256:16cc1da46c04fb0fb128b4dc430b78fa2aba8a6c0c9f8eb391fd5103409a6ac6 \
+ --hash=sha256:18be793c4c87de2965e1c0f060f03d9e5aff66cfeae8e1dbe6e5b88056ec153f \
+ --hash=sha256:1a55d509a1dc5a5b708b5dad3b5334e07a16ad4c2185e27b40e4dba796ab7f88 \
+ --hash=sha256:1dcb645d7e34dcbcc96cd7c132b1fc55c39263ca62eb961c064eb3928997363b \
+ --hash=sha256:2016745cb3ba554469d02819d78958b571792bb68e31302610e898f80dd3a573 \
+ --hash=sha256:228b90f613b25ba0019361e4ab81520b343b622fc657daf7e501c4ed6a2366c0 \
+ --hash=sha256:309ef5706e95e62578cda256b97f5e097916a2c26247c287bbe74794e7150df2 \
+ --hash=sha256:339dc63b3eba969067b00f41f15ad161bf2946613156fb131266d8debc8e44d0 \
+ --hash=sha256:3820778ea1387c2b6a818caec01c63adc5b3750211af6447e8dcfb9b6f08dbba \
+ --hash=sha256:3d42df8201e00384736f0df9be2ced39324c3907607d17d50d50116c989d84cd \
+ --hash=sha256:3e7b8bd70c48ffb28461ebe092c2345536fb18bbbf19d287c8913699735f505c \
+ --hash=sha256:3f2f725aa3e909b3c5fdb8192490bdd8e1495e85906af74fe6e34a2a77ba0673 \
+ --hash=sha256:3fc6a169517ca0d7ca6846c3c5392ef2b9e38896f61d615cb75b9e7134d4ee1e \
+ --hash=sha256:45980ea19277dc0a579e432aef6a504fe098ef3a9032ead15e446eb0f1191aee \
+ --hash=sha256:4d010d080c4888371033baab27e47c9df7d6fb28d0b7b7adf85a4a49be9298b3 \
+ --hash=sha256:4de84e71173d4dada2897e5a0e1b7877e5eefbfe0d6a44edee6ce31d9b8ec09e \
+ --hash=sha256:549d195116a1ba1e1ae2f5ca143f9777800f6636eab917d4f02b5310d6d73461 \
+ --hash=sha256:562ec27dfa3f311e0db1ba243ec6e5f6ab96b1edfcfc6cf86f28038bc4961ce6 \
+ --hash=sha256:57dfc8048c72ba48a8c45e188d811e5efd7e49b387effc8fb17e97936dde5bf6 \
+ --hash=sha256:5899d28b5276f536fcf840b18b61a9fce23cc3aec1d114c44c07fe94ebeaa500 \
+ --hash=sha256:60cfb538fe9ef86e5b2ab0ca8fc8d62524777f6c611dcaf76dc16fbe9b8e698a \
+ --hash=sha256:623dcc6d7a7ba450bbdbeedbaa0c42b329bdae16491af2282f12a7e809be7eb9 \
+ --hash=sha256:67170979de0dacac3f3097d02b0ad188d8edcea44ccc44aaa0550af49150c7dc \
+ --hash=sha256:6e73ebb44dca5f708dc871fe0b90cf4cff1a13f9956f747cc87b535a840386f5 \
+ --hash=sha256:6f34591000f06e62085b1865c9bc5f7858df748834662a51edadfd2c3bfe0dd3 \
+ --hash=sha256:724b1b270cb13ea2e6503476e34541a0b1f62280bc997eab443f87790202033d \
+ --hash=sha256:75a6f4aa904301dab8022397a22c0039edc1f51e90b83dbd4464b8a38dc87842 \
+ --hash=sha256:77545b5dcda13b70f872c3b5974ac64c21d05e65b1590b441c8560115dc3a0d1 \
+ --hash=sha256:776483fd35b58d8afe3acbd9988d5de592ab6da2d2a865edfdbc9fdb43e7c486 \
+ --hash=sha256:77cc258aeb29a3417062758975521eae60af6f79e930d6993555eeac6a8eac29 \
+ --hash=sha256:794f7c05af0763b1bbd1b9e6eff0e52ad068be3b12cd96c87de037b01390c968 \
+ --hash=sha256:868a2fae76dfb06e87291bcbd4dcbcc778a8500510b618d50496e520bd94d9b9 \
+ --hash=sha256:8842af7f175078456b8b17f1b73a0d16a65dcbdc653ecefeb00a56b3c8c298c4 \
+ --hash=sha256:8d9bc218650022a768f3775dd7fdac1886437325d8d295d923ebcfef4892ad5c \
+ --hash=sha256:8f572d989142e0908e6acf57ad1b9b86989ff057c006d13b76c146ec6a20216a \
+ --hash=sha256:90480b2134999301eea795b3a9dbf606c6fbab1b489150c501da84a959442465 \
+ --hash=sha256:916abf1ac5cf7eb16bc540a5bf75c71c43a676f5c52fcb9fe75a2bd75fb944e8 \
+ --hash=sha256:92f980729e79b5d16d221038dbf2e8f9a9136afa072f9d5d6ed4cb984b126a09 \
+ --hash=sha256:933082f161bbb3e9f90d00990dc956120f608cdbcaeea15c4d897f56ef4fe416 \
+ --hash=sha256:97ab3647280d458a1f9adb85244e81587505a43c0c7cff851f5116cd2814b894 \
+ --hash=sha256:985b7836931d033570b94c94713c6dba5f9d3ff26045f72c3e5dbc5fe3361e5a \
+ --hash=sha256:9e549d642426e3579b3f4b92d0431543b012dcb6e825c91619d4e93b7363c3f9 \
+ --hash=sha256:9edd0e01a343766add6817bc448408858ba6b489039eaaa2018474e4001651a4 \
+ --hash=sha256:9ee68b21909686eeb21dfcba2c3b81fee70dcf38b140dcd5aa70680995fa3aa5 \
+ --hash=sha256:9f5e772ed5fef25b3de9f2008fe67b92d46831bd2bc5bdc5dd6bfd06b83b316f \
+ --hash=sha256:a03a4f3a19a189919c7055098790285cc5c5b0b3976f8d227aea39dbf9f8bfdb \
+ --hash=sha256:a4d240d260a1aed814790bbe1f10a5ff31ce6c21bc78f0da4a1e8268d6c80dbd \
+ --hash=sha256:a5a68357f686f8c4d527a2dc04f52e669c2fc1cbde38f6f7eb6a0e58cbd17cae \
+ --hash=sha256:a998cc0aeeea4c6d5622a3754da5a493055d2d95186bad877b0a34ea6e6dbe0a \
+ --hash=sha256:b67e47c5595b9224599016e333f5ec25392597a89d5744658f837d204e16c63e \
+ --hash=sha256:b6f3b96617e9852703f5b633ea01315ca45c77e879584f283c44127f0f1ec564 \
+ --hash=sha256:b7593fe7eb5feaa3fbb461ac79aac9f9fc0387a5ca8080b0c6fe2ca27b091afd \
+ --hash=sha256:bb3f6562e89bad0110afbe64e485aac2462efdce6232cdec7862a095dc3412f6 \
+ --hash=sha256:bb4f8c3c9a9f34423dba193f241f617b08ffc63e27f67159f60ae6baf2dcfe0f \
+ --hash=sha256:bd63e7b74661fed317212fab774e2a648bc4bb09b35f25474f8e3325d2945cd7 \
+ --hash=sha256:be753b225d159feb397bd0bf91ae86f689bad0da09d3b301478cd39b878ab31a \
+ --hash=sha256:bf100a3288f9bb7f919b87eb84f87101e197535b9bd0e2c2b5b3179633324fee \
+ --hash=sha256:c223d078112e90dc0e5c4e35b98b9584164bea9fbbd221c0b21c5241f6d51b62 \
+ --hash=sha256:c3d8c679607220979434f494b139dfb00131ebf70bb406553d69c1ff01a5c33d \
+ --hash=sha256:c43257717611ff5e9a1d79dce8e47566235ebda63328718d9b65dd640bc832ef \
+ --hash=sha256:c832ec92c4499ac463186af72f9ed4d8daec15499b16f0a879b0d1c8e5cf4a3b \
+ --hash=sha256:c8e2706ceb622bc63bac98ebb10ef5da80ed70fbd8a7999a5076de3afaef0fb1 \
+ --hash=sha256:cb237bfd0ef4d5eb6a19e29f9e528ac67ac3be932ea6b44fb6cc09b9f3ecff78 \
+ --hash=sha256:ccd7a6fca48ca9c131d9b0a2972a581e28b13416fc313fb98b6d24a03ce9a398 \
+ --hash=sha256:d10a2ed46386e850bb3de503a54f9fe8192e5917fcbb143bfef653a9355e9a53 \
+ --hash=sha256:d1443ba9acbb593fa7c1c29e011d7c9761545fe35e7652e85ce7f51a16f7e08d \
+ --hash=sha256:d2287ac9360dec3837bfdad969963a5d073a09a85d898bd86bea82aa8876ef3c \
+ --hash=sha256:d3c9f051b028810f5a87c88e5d6e9af3c0ff32ef62763bf15d29f740453ca909 \
+ --hash=sha256:d72140ccf8a147e94274024ff6fd8fb7811354cf7ef88b1f0a988ebaa5bc774f \
+ --hash=sha256:d938b4a840fb1523b9dfbbb454f652967f18e197569c32266d4d13f37244c3d9 \
+ --hash=sha256:db622b999ffe49cb891f2fff3b340cdc2f9797d01a0a202a0973ba2562501d90 \
+ --hash=sha256:e09fbecc007f7b6afdfb3b07ce5bd9f8494b6856dd4f577d26c66c391b829851 \
+ --hash=sha256:e1fa280b3ad78eea5be86f94f461c04943d942697e0dac889fa18fff8f5f9147 \
+ --hash=sha256:e4f18eca6028ffa62adbd185a8f1e1dd242f2e68164dba5c2b74a5204850b4cf \
+ --hash=sha256:e825dbb7f84dfa24663dd75835e7257f8882629fc11f03ecf77d84a75134b864 \
+ --hash=sha256:eaecf47ef10c72ece9a2a92118257da87e460e113b83cc0d2905cbbe931792b4 \
+ --hash=sha256:ef6688db9bf91ba111ae734ba6ef1a063304a881749726e0d3575f5c10a9facf \
+ --hash=sha256:f398ba4df52d30b1763f62eed9de5620dcde96e6f491f4c62686736b155aa6e4 \
+ --hash=sha256:f80e2bb21bfab56ed7405c2d79d34b5dc0bc96c2c1d2a067b643a09fb756c43a \
+ --hash=sha256:f83351e0f7dcdb14d7326c3d8d8c4e915fa685cbfdc6281f9470d97a04e9dfe4 \
+ --hash=sha256:f8dca5590fec7a89ed6826fce625595279e586ead52e9e958d3237821fbc750c \
+ --hash=sha256:fa3edde1aa8807de1d05934982416cb3ec46d1d4d91e280bcce7cca01c507992 \
+ --hash=sha256:fea07c1a39a22614acb762e3fbbb4011f65eedafcb2948feeef641ac78b4ee5c \
+ --hash=sha256:ff10896fa55167371960c5908150b434b71c876dfab97b69478f22c8b445ea19 \
+ --hash=sha256:ff86d4e85188bba72cfb876df3e11fa243439882c55957184af44a35bd5880b7 \
+ --hash=sha256:ffed1e4980889765c84a5d1a566159e363b71d6b6fbaf0bebc9d3c30bc016766
# via pytest-cov
cryptography==43.0.3 \
--hash=sha256:0c580952eef9bf68c4747774cde7ec1d85a6e61de97281f2dba83c7d2c806362 \
@@ -919,51 +919,51 @@ cryptography==43.0.3 \
# snowflake-connector-python
# types-pyopenssl
# types-redis
-dask[dataframe]==2025.11.0 \
- --hash=sha256:08c35a8146c05c93b34f83cf651009129c42ee71762da7ca452fb7308641c2b8 \
- --hash=sha256:23d59e624b80ee05b7cc8df858682cca58262c4c3b197ccf61da0f6543c8f7c3
+dask[dataframe]==2025.12.0 \
+ --hash=sha256:4213ce9c5d51d6d89337cff69de35d902aa0bf6abdb8a25c942a4d0281f3a598 \
+ --hash=sha256:8d478f2aabd025e2453cf733ad64559de90cf328c20209e4574e9543707c3e1b
# via feast (setup.py)
datasets==4.0.0 \
--hash=sha256:7ef95e62025fd122882dbce6cb904c8cd3fbc829de6669a5eb939c77d50e203d \
--hash=sha256:9657e7140a9050db13443ba21cb5de185af8af944479b00e7ff1e00a61c8dbf1
# via feast (setup.py)
-db-dtypes==1.4.4 \
- --hash=sha256:26f53db5df1acd746b88c5647913a1b20f731c0af1b11abcb6bec5365f31098a \
- --hash=sha256:32c13039982656a8598a0835f25f0e07e34c9a423e471ee60c2553240b7fcf1e
+db-dtypes==1.5.0 \
+ --hash=sha256:abdbb2e4eb965800ed6f98af0c5c1cafff9063ace09114be2d26a7f046be2c8a \
+ --hash=sha256:ad9e94243f53e104bc77dbf9ae44b580d83a770d3694483aba59c9767966daa5
# via
# google-cloud-bigquery
# pandas-gbq
-debugpy==1.8.17 \
- --hash=sha256:045290c010bcd2d82bc97aa2daf6837443cd52f6328592698809b4549babcee1 \
- --hash=sha256:1440fd514e1b815edd5861ca394786f90eb24960eb26d6f7200994333b1d79e3 \
- --hash=sha256:17e456da14848d618662354e1dccfd5e5fb75deec3d1d48dc0aa0baacda55860 \
- --hash=sha256:24693179ef9dfa20dca8605905a42b392be56d410c333af82f1c5dff807a64cc \
- --hash=sha256:3a32c0af575749083d7492dc79f6ab69f21b2d2ad4cd977a958a07d5865316e4 \
- --hash=sha256:3bea3b0b12f3946e098cce9b43c3c46e317b567f79570c3f43f0b96d00788088 \
- --hash=sha256:5c59b74aa5630f3a5194467100c3b3d1c77898f9ab27e3f7dc5d40fc2f122670 \
- --hash=sha256:60c7dca6571efe660ccb7a9508d73ca14b8796c4ed484c2002abba714226cfef \
- --hash=sha256:6a4e9dacf2cbb60d2514ff7b04b4534b0139facbf2abdffe0639ddb6088e59cf \
- --hash=sha256:6c5cd6f009ad4fca8e33e5238210dc1e5f42db07d4b6ab21ac7ffa904a196420 \
- --hash=sha256:857c1dd5d70042502aef1c6d1c2801211f3ea7e56f75e9c335f434afb403e464 \
- --hash=sha256:893cba7bb0f55161de4365584b025f7064e1f88913551bcd23be3260b231429c \
- --hash=sha256:8deb4e31cd575c9f9370042876e078ca118117c1b5e1f22c32befcfbb6955f0c \
- --hash=sha256:a3aad0537cf4d9c1996434be68c6c9a6d233ac6f76c2a482c7803295b4e4f99a \
- --hash=sha256:b13eea5587e44f27f6c48588b5ad56dcb74a4f3a5f89250443c94587f3eb2ea1 \
- --hash=sha256:b532282ad4eca958b1b2d7dbcb2b7218e02cb934165859b918e3b6ba7772d3f4 \
- --hash=sha256:b69b6bd9dba6a03632534cdf67c760625760a215ae289f7489a452af1031fe1f \
- --hash=sha256:b75868b675949a96ab51abc114c7163f40ff0d8f7d6d5fd63f8932fd38e9c6d7 \
- --hash=sha256:bb1bbf92317e1f35afcf3ef0450219efb3afe00be79d8664b250ac0933b9015f \
- --hash=sha256:c41d2ce8bbaddcc0009cc73f65318eedfa3dbc88a8298081deb05389f1ab5542 \
- --hash=sha256:c6bdf134457ae0cac6fb68205776be635d31174eeac9541e1d0c062165c6461f \
- --hash=sha256:d3fce3f0e3de262a3b67e69916d001f3e767661c6e1ee42553009d445d1cd840 \
- --hash=sha256:e34ee844c2f17b18556b5bbe59e1e2ff4e86a00282d2a46edab73fd7f18f4a83 \
- --hash=sha256:e79a195f9e059edfe5d8bf6f3749b2599452d3e9380484cd261f6b7cd2c7c4da \
- --hash=sha256:e851beb536a427b5df8aa7d0c7835b29a13812f41e46292ff80b2ef77327355a \
- --hash=sha256:e8f8f61c518952fb15f74a302e068b48d9c4691768ade433e4adeea961993464 \
- --hash=sha256:eaa85bce251feca8e4c87ce3b954aba84b8c645b90f0e6a515c00394a9f5c0e7 \
- --hash=sha256:f14467edef672195c6f6b8e27ce5005313cb5d03c9239059bc7182b60c176e2d \
- --hash=sha256:f2ac8055a0c4a09b30b931100996ba49ef334c6947e7ae365cdd870416d7513e \
- --hash=sha256:fd723b47a8c08892b1a16b2c6239a8b96637c62a59b94bb5dab4bac592a58a8e
+debugpy==1.8.19 \
+ --hash=sha256:0601708223fe1cd0e27c6cce67a899d92c7d68e73690211e6788a4b0e1903f5b \
+ --hash=sha256:14035cbdbb1fe4b642babcdcb5935c2da3b1067ac211c5c5a8fdc0bb31adbcaa \
+ --hash=sha256:1e8c4d1bd230067bf1bbcdbd6032e5a57068638eb28b9153d008ecde288152af \
+ --hash=sha256:327cb28c3ad9e17bc925efc7f7018195fd4787c2fe4b7af1eec11f1d19bdec62 \
+ --hash=sha256:360ffd231a780abbc414ba0f005dad409e71c78637efe8f2bd75837132a41d38 \
+ --hash=sha256:4468de0c30012d367944f0eab4ecb8371736e8ef9522a465f61214f344c11183 \
+ --hash=sha256:6599cab8a783d1496ae9984c52cb13b7c4a3bd06a8e6c33446832a5d97ce0bee \
+ --hash=sha256:66e3d2fd8f2035a8f111eb127fa508469dfa40928a89b460b41fd988684dc83d \
+ --hash=sha256:76f566baaf7f3e06adbe67ffedccd2ee911d1e486f55931939ce3f0fe1090774 \
+ --hash=sha256:783a519e6dfb1f3cd773a9bda592f4887a65040cb0c7bd38dde410f4e53c40d4 \
+ --hash=sha256:7b62c0f015120ede25e5124a5f9d8a424e1208e3d96a36c89958f046ee21fff6 \
+ --hash=sha256:806d6800246244004625d5222d7765874ab2d22f3ba5f615416cf1342d61c488 \
+ --hash=sha256:85016a73ab84dea1c1f1dcd88ec692993bcbe4532d1b49ecb5f3c688ae50c606 \
+ --hash=sha256:8e19a725f5d486f20e53a1dde2ab8bb2c9607c40c00a42ab646def962b41125f \
+ --hash=sha256:91e35db2672a0abaf325f4868fcac9c1674a0d9ad9bb8a8c849c03a5ebba3e6d \
+ --hash=sha256:a21bfdea088f713df05fa246ba0520f6ba44dd7eaec224742f51987a6979a648 \
+ --hash=sha256:b1cb98e5325da3059ca24445fca48314bfddfdf65ce1b59ff07055e723f06bd2 \
+ --hash=sha256:b605f17e89ba0ecee994391194285fada89cee111cfcd29d6f2ee11cbdc40976 \
+ --hash=sha256:b7dd275cf2c99e53adb9654f5ae015f70415bbe2bacbe24cfee30d54b6aa03c5 \
+ --hash=sha256:bccb1540a49cde77edc7ce7d9d075c1dbeb2414751bc0048c7a11e1b597a4c2e \
+ --hash=sha256:c047177ab2d286451f242b855b650d313198c4a987140d4b35218b2855a64a4a \
+ --hash=sha256:c30639998a9f9cd9699b4b621942c0179a6527f083c72351f95c6ab1728d5b73 \
+ --hash=sha256:c5dcfa21de1f735a4f7ced4556339a109aa0f618d366ede9da0a3600f2516d8b \
+ --hash=sha256:c9b9bf440141a36836bdbe4320a2b126bb38aafa85e1aed05d7bfbb0e2a278bf \
+ --hash=sha256:d40c016c1f538dbf1762936e3aeb43a89b965069d9f60f9e39d35d9d25e6b809 \
+ --hash=sha256:d9b6f633fd2865af2afba2beb0c1819b6ecd4aed1c8f90f5d1bbca3272306b10 \
+ --hash=sha256:e24b1652a1df1ab04d81e7ead446a91c226de704ff5dde6bd0a0dbaab07aa3f2 \
+ --hash=sha256:e9c68d9a382ec754dc05ed1d1b4ed5bd824b9f7c1a8cd1083adb84b3c93501de \
+ --hash=sha256:eea7e5987445ab0b5ed258093722d5ecb8bb72217c5c9b1e21f64efe23ddebdb \
+ --hash=sha256:fce6da15d73be5935b4438435c53adb512326a3e11e4f90793ea87cd9f018254
# via ipykernel
decorator==5.2.1 \
--hash=sha256:65f266143752f734b0a7cc83c46f4618af75b8c5911b00ccb61d0ac9b6da0360 \
@@ -1005,9 +1005,9 @@ docling==2.27.0 \
--hash=sha256:1288ed75b27e33bf94daff34faffc6d11b7d7ccc13e3df84fb24adad3991f72d \
--hash=sha256:faba35662612a2c687a3a463e501d95f645316436084af92a0442ce162429a3d
# via feast (setup.py)
-docling-core[chunking]==2.54.1 \
- --hash=sha256:2d22ee1cd8508fa7ffdd2e01ef30d7521390ff55ef240610f16be0cf54ffe73e \
- --hash=sha256:c6595e8b84f5e9de7a0a6298206d749f4be5730824604e684f204078a3689985
+docling-core[chunking]==2.57.0 \
+ --hash=sha256:24b71172e8bc4fbe2b4213b29f51878114f4c13f25fc0bc9920168505c76c1a3 \
+ --hash=sha256:398768b4d275ad2e11703ad9446fd0315a9a5fc8d09bc45ed207302d844d6ed5
# via
# docling
# docling-ibm-models
@@ -1120,13 +1120,13 @@ durationpy==0.10 \
easyocr==1.7.2 \
--hash=sha256:5be12f9b0e595d443c9c3d10b0542074b50f0ec2d98b141a109cd961fd1c177c
# via docling
-elastic-transport==9.2.0 \
- --hash=sha256:0331466ca8febdb7d168c0fbf159294b0066492733b51da94f4dd28a0ee596cd \
- --hash=sha256:f52b961e58e6b76d488993286907f61a6ddccbdae8e0135ce8d369227b6282d8
+elastic-transport==9.2.1 \
+ --hash=sha256:39e1a25e486af34ce7aa1bc9005d1c736f1b6fb04c9b64ea0604ded5a61fc1d4 \
+ --hash=sha256:97d9abd638ba8aa90faa4ca1bf1a18bde0fe2088fbc8757f2eb7b299f205773d
# via elasticsearch
-elasticsearch==9.2.0 \
- --hash=sha256:87090fe98c515ec0fce82f633fe11d7e90e04d93581b6b3e05de29efe4cc8b74 \
- --hash=sha256:99656baa34b10130402b6c38429feddf7aee1c3247566e8f95f0d0267fe9f9ab
+elasticsearch==9.2.1 \
+ --hash=sha256:8665f5a0b4d29a7c2772851c05ea8a09279abb7928b7d727524613bd61d75958 \
+ --hash=sha256:97f473418e8976611349757287ac982acf12f4e305182863d985d5a031c36830
# via feast (setup.py)
entrypoints==0.4 \
--hash=sha256:b706eddaa9218a19ebcd67b56818f05bb27589b1ca9e8d797b74affad4ccacd4 \
@@ -1173,9 +1173,9 @@ faiss-cpu==1.10.0 \
--hash=sha256:e71f7e24d5b02d3a51df47b77bd10f394a1b48a8331d5c817e71e9e27a8a75ac \
--hash=sha256:f71c5860c860df2320299f9e4f2ca1725beb559c04acb1cf961ed24e6218277a
# via feast (setup.py)
-fastapi==0.124.0 \
- --hash=sha256:260cd178ad75e6d259991f2fd9b0fee924b224850079df576a3ba604ce58f4e6 \
- --hash=sha256:91596bdc6dde303c318f06e8d2bc75eafb341fc793a0c9c92c0bc1db1ac52480
+fastapi==0.128.0 \
+ --hash=sha256:1cc179e1cef10a6be60ffe429f79b829dce99d8de32d7acb7e6c8dfdf7f2645a \
+ --hash=sha256:aebd93f9716ee3b4f4fcfe13ffb7cf308d99c9f3ab5622d8877441072561582d
# via
# feast (setup.py)
# fastapi-mcp
@@ -1187,9 +1187,9 @@ fastjsonschema==2.21.2 \
--hash=sha256:1c797122d0a86c5cace2e54bf4e819c36223b552017172f32c5c024a6b77e463 \
--hash=sha256:b1eb43748041c880796cd077f1a07c3d94e93ae84bba5ed36800a33554ae05de
# via nbformat
-filelock==3.20.0 \
- --hash=sha256:339b4732ffda5cd79b13f4e2711a31b0365ce445d95d243bb996273d072546a2 \
- --hash=sha256:711e943b4ec6be42e1d4e6690b48dc175c822967466bb31c0c293f34334c13f4
+filelock==3.20.1 \
+ --hash=sha256:15d9e9a67306188a44baa72f569d2bfd803076269365fdea0934385da4dc361a \
+ --hash=sha256:b8360948b351b80f420878d8516519a2204b07aefcdcfd24912a5d33127f188c
# via
# datasets
# huggingface-hub
@@ -1367,9 +1367,9 @@ google-api-core[grpc]==2.28.1 \
# google-cloud-storage
# opencensus
# pandas-gbq
-google-auth==2.43.0 \
- --hash=sha256:88228eee5fc21b62a1b5fe773ca15e67778cb07dc8363adcb4a8827b52d81483 \
- --hash=sha256:af628ba6fa493f75c7e9dbe9373d148ca9f4399b5ea29976519e0a3848eddd16
+google-auth==2.45.0 \
+ --hash=sha256:82344e86dc00410ef5382d99be677c6043d72e502b625aa4f4afa0bdacca0f36 \
+ --hash=sha256:90d3f41b6b72ea72dd9811e765699ee491ab24139f34ebf1ca2b9cc0c38708f3
# via
# google-api-core
# google-auth-oauthlib
@@ -1388,19 +1388,19 @@ google-auth-oauthlib==1.2.2 \
# via
# pandas-gbq
# pydata-google-auth
-google-cloud-bigquery[pandas]==3.38.0 \
- --hash=sha256:8afcb7116f5eac849097a344eb8bfda78b7cfaae128e60e019193dd483873520 \
- --hash=sha256:e06e93ff7b245b239945ef59cb59616057598d369edac457ebf292bd61984da6
+google-cloud-bigquery[pandas]==3.39.0 \
+ --hash=sha256:cb375e1d63dea9bd5bf735e66024338f294159d43afdf63e1d023f5fcbbf55ea \
+ --hash=sha256:dc7a64921465859105461b43c42562e38e797d7a73feb72b3cfc4865b7b1c5ef
# via
# feast (setup.py)
# pandas-gbq
-google-cloud-bigquery-storage==2.35.0 \
- --hash=sha256:c9bab6b8e41d6cb9806e589e65f320c89ada84f466e61566b7208d87924c1430 \
- --hash=sha256:f2e3a08882155de1e9ec53c71c5784eb1f25dc6514c535f5796c3c9eeac17d17
+google-cloud-bigquery-storage==2.36.0 \
+ --hash=sha256:1769e568070db672302771d2aec18341de10712aa9c4a8c549f417503e0149f0 \
+ --hash=sha256:d3c1ce9d2d3a4d7116259889dcbe3c7c70506f71f6ce6bbe54aa0a68bbba8f8f
# via feast (setup.py)
-google-cloud-bigtable==2.34.0 \
- --hash=sha256:773258b00cd3f9a3a35639cc38bd711f4f1418aaa0c8d70cb028978ed98dc2c2 \
- --hash=sha256:a4a8db4903840cd3f89fb19c060eea2e7c09c1265cb0538cfc11288dbc6000e4
+google-cloud-bigtable==2.35.0 \
+ --hash=sha256:f355bfce1f239453ec2bb3839b0f4f9937cf34ef06ef29e1ca63d58fd38d0c50 \
+ --hash=sha256:f5699012c5fea4bd4bdf7e80e5e3a812a847eb8f41bf8dc2f43095d6d876b83b
# via feast (setup.py)
google-cloud-core==2.5.0 \
--hash=sha256:67d977b41ae6c7211ee830c7912e41003ea8194bff15ae7d72fd6f51e57acabc \
@@ -1410,49 +1410,48 @@ google-cloud-core==2.5.0 \
# google-cloud-bigtable
# google-cloud-datastore
# google-cloud-storage
-google-cloud-datastore==2.21.0 \
- --hash=sha256:eee454dd4a55f5b327f9f344928ff1a09a6f77c23d5e3d908ad31a13cc2f4073 \
- --hash=sha256:f303f27cd1983383f20bd227019cd8a7897419e0ec6b878367c58c66245f9d9b
+google-cloud-datastore==2.23.0 \
+ --hash=sha256:24a1b1d29b902148fe41b109699f76fd3aa60591e9d547c0f8b87d7bf9ff213f \
+ --hash=sha256:80049883a4ae928fdcc661ba6803ec267665dc0e6f3ce2da91441079a6bb6387
# via feast (setup.py)
google-cloud-storage==2.19.0 \
--hash=sha256:aeb971b5c29cf8ab98445082cbfe7b161a1f48ed275822f59ed3f1524ea54fba \
--hash=sha256:cd05e9e7191ba6cb68934d8eb76054d9be4562aa89dbc4236feee4d7d51342b2
# via feast (setup.py)
-google-crc32c==1.7.1 \
- --hash=sha256:0f99eaa09a9a7e642a61e06742856eec8b19fc0037832e03f941fe7cf0c8e4db \
- --hash=sha256:19eafa0e4af11b0a4eb3974483d55d2d77ad1911e6cf6f832e1574f6781fd337 \
- --hash=sha256:1c67ca0a1f5b56162951a9dae987988679a7db682d6f97ce0f6381ebf0fbea4c \
- --hash=sha256:1f2b3522222746fff0e04a9bd0a23ea003ba3cccc8cf21385c564deb1f223242 \
- --hash=sha256:22beacf83baaf59f9d3ab2bbb4db0fb018da8e5aebdce07ef9f09fce8220285e \
- --hash=sha256:2bff2305f98846f3e825dbeec9ee406f89da7962accdb29356e4eadc251bd472 \
- --hash=sha256:2d73a68a653c57281401871dd4aeebbb6af3191dcac751a76ce430df4d403194 \
- --hash=sha256:32d1da0d74ec5634a05f53ef7df18fc646666a25efaaca9fc7dcfd4caf1d98c3 \
- --hash=sha256:3bda0fcb632d390e3ea8b6b07bf6b4f4a66c9d02dcd6fbf7ba00a197c143f582 \
- --hash=sha256:6335de12921f06e1f774d0dd1fbea6bf610abe0887a1638f64d694013138be5d \
- --hash=sha256:6b211ddaf20f7ebeec5c333448582c224a7c90a9d98826fbab82c0ddc11348e6 \
- --hash=sha256:6efb97eb4369d52593ad6f75e7e10d053cf00c48983f7a973105bc70b0ac4d82 \
- --hash=sha256:6fbab4b935989e2c3610371963ba1b86afb09537fd0c633049be82afe153ac06 \
- --hash=sha256:713121af19f1a617054c41f952294764e0c5443d5a5d9034b2cd60f5dd7e0349 \
- --hash=sha256:754561c6c66e89d55754106739e22fdaa93fafa8da7221b29c8b8e8270c6ec8a \
- --hash=sha256:7cc81b3a2fbd932a4313eb53cc7d9dde424088ca3a0337160f35d91826880c1d \
- --hash=sha256:85fef7fae11494e747c9fd1359a527e5970fc9603c90764843caabd3a16a0a48 \
- --hash=sha256:905a385140bf492ac300026717af339790921f411c0dfd9aa5a9e69a08ed32eb \
- --hash=sha256:9fc196f0b8d8bd2789352c6a522db03f89e83a0ed6b64315923c396d7a932315 \
- --hash=sha256:a8e9afc74168b0b2232fb32dd202c93e46b7d5e4bf03e66ba5dc273bb3559589 \
- --hash=sha256:b07d48faf8292b4db7c3d64ab86f950c2e94e93a11fd47271c28ba458e4a0d76 \
- --hash=sha256:b6d86616faaea68101195c6bdc40c494e4d76f41e07a37ffdef270879c15fb65 \
- --hash=sha256:b7491bdc0c7564fcf48c0179d2048ab2f7c7ba36b84ccd3a3e1c3f7a72d3bba6 \
- --hash=sha256:bb5e35dcd8552f76eed9461a23de1030920a3c953c1982f324be8f97946e7127 \
- --hash=sha256:d68e17bad8f7dd9a49181a1f5a8f4b251c6dbc8cc96fb79f1d321dfd57d66f53 \
- --hash=sha256:dcdf5a64adb747610140572ed18d011896e3b9ae5195f2514b7ff678c80f1603 \
- --hash=sha256:df8b38bdaf1629d62d51be8bdd04888f37c451564c2042d36e5812da9eff3c35 \
- --hash=sha256:e10554d4abc5238823112c2ad7e4560f96c7bf3820b202660373d769d9e6e4c9 \
- --hash=sha256:e42e20a83a29aa2709a0cf271c7f8aefaa23b7ab52e53b322585297bb94d4638 \
- --hash=sha256:ed66cbe1ed9cbaaad9392b5259b3eba4a9e565420d734e6238813c428c3336c9 \
- --hash=sha256:ee6547b657621b6cbed3562ea7826c3e11cab01cd33b74e1f677690652883e77 \
- --hash=sha256:f2226b6a8da04f1d9e61d3e357f2460b9551c5e6950071437e122c958a18ae14 \
- --hash=sha256:fa8136cc14dd27f34a3221c0f16fd42d8a40e4778273e61a3c19aedaa44daf6b \
- --hash=sha256:fc5319db92daa516b653600794d5b9f9439a9a121f3e162f94b0e1891c7933cb
+google-crc32c==1.8.0 \
+ --hash=sha256:014a7e68d623e9a4222d663931febc3033c5c7c9730785727de2a81f87d5bab8 \
+ --hash=sha256:01f126a5cfddc378290de52095e2c7052be2ba7656a9f0caf4bcd1bfb1833f8a \
+ --hash=sha256:0470b8c3d73b5f4e3300165498e4cf25221c7eb37f1159e221d1825b6df8a7ff \
+ --hash=sha256:119fcd90c57c89f30040b47c211acee231b25a45d225e3225294386f5d258288 \
+ --hash=sha256:14f87e04d613dfa218d6135e81b78272c3b904e2a7053b841481b38a7d901411 \
+ --hash=sha256:17446feb05abddc187e5441a45971b8394ea4c1b6efd88ab0af393fd9e0a156a \
+ --hash=sha256:19b40d637a54cb71e0829179f6cb41835f0fbd9e8eb60552152a8b52c36cbe15 \
+ --hash=sha256:2a3dc3318507de089c5384cc74d54318401410f82aa65b2d9cdde9d297aca7cb \
+ --hash=sha256:3b9776774b24ba76831609ffbabce8cdf6fa2bd5e9df37b594221c7e333a81fa \
+ --hash=sha256:3cc0c8912038065eafa603b238abf252e204accab2a704c63b9e14837a854962 \
+ --hash=sha256:3d488e98b18809f5e322978d4506373599c0c13e6c5ad13e53bb44758e18d215 \
+ --hash=sha256:3ebb04528e83b2634857f43f9bb8ef5b2bbe7f10f140daeb01b58f972d04736b \
+ --hash=sha256:450dc98429d3e33ed2926fc99ee81001928d63460f8538f21a5d6060912a8e27 \
+ --hash=sha256:4b8286b659c1335172e39563ab0a768b8015e88e08329fa5321f774275fc3113 \
+ --hash=sha256:57a50a9035b75643996fbf224d6661e386c7162d1dfdab9bc4ca790947d1007f \
+ --hash=sha256:61f58b28e0b21fcb249a8247ad0db2e64114e201e2e9b4200af020f3b6242c9f \
+ --hash=sha256:6f35aaffc8ccd81ba3162443fabb920e65b1f20ab1952a31b13173a67811467d \
+ --hash=sha256:71734788a88f551fbd6a97be9668a0020698e07b2bf5b3aa26a36c10cdfb27b2 \
+ --hash=sha256:864abafe7d6e2c4c66395c1eb0fe12dc891879769b52a3d56499612ca93b6092 \
+ --hash=sha256:86cfc00fe45a0ac7359e5214a1704e51a99e757d0272554874f419f79838c5f7 \
+ --hash=sha256:87b0072c4ecc9505cfa16ee734b00cd7721d20a0f595be4d40d3d21b41f65ae2 \
+ --hash=sha256:87fa445064e7db928226b2e6f0d5304ab4cd0339e664a4e9a25029f384d9bb93 \
+ --hash=sha256:89c17d53d75562edfff86679244830599ee0a48efc216200691de8b02ab6b2b8 \
+ --hash=sha256:8b3f68782f3cbd1bce027e48768293072813469af6a61a86f6bb4977a4380f21 \
+ --hash=sha256:a428e25fb7691024de47fecfbff7ff957214da51eddded0da0ae0e0f03a2cf79 \
+ --hash=sha256:b0d1a7afc6e8e4635564ba8aa5c0548e3173e41b6384d7711a9123165f582de2 \
+ --hash=sha256:ba6aba18daf4d36ad4412feede6221414692f44d17e5428bdd81ad3fc1eee5dc \
+ --hash=sha256:cb5c869c2923d56cb0c8e6bcdd73c009c36ae39b652dbe46a05eb4ef0ad01454 \
+ --hash=sha256:d511b3153e7011a27ab6ee6bb3a5404a55b994dc1a7322c0b87b29606d9790e2 \
+ --hash=sha256:db3fe8eaf0612fc8b20fa21a5f25bd785bc3cd5be69f8f3412b0ac2ffd49e733 \
+ --hash=sha256:e6584b12cb06796d285d09e33f63309a09368b9d806a551d8036a4207ea43697 \
+ --hash=sha256:f4b51844ef67d6cf2e9425983274da75f18b1597bb2c998e1c0a0e8d46f8f651 \
+ --hash=sha256:f639065ea2042d5c034bf258a9f085eaa7af0cd250667c0635a3118e8f92c69c
# via
# google-cloud-bigtable
# google-cloud-storage
@@ -1539,6 +1538,7 @@ grpcio==1.62.3 \
# google-api-core
# google-cloud-bigquery
# google-cloud-bigquery-storage
+ # google-cloud-datastore
# googleapis-common-protos
# grpc-google-iam-v1
# grpcio-health-checking
@@ -1880,9 +1880,9 @@ imagesize==1.4.1 \
--hash=sha256:0d8d18d08f840c19d0ee7ca1fd82490fdc3729b7ac93f49870406ddde8ef8d8b \
--hash=sha256:69150444affb9cb0d5cc5a92b3676f0b2fb7cd9ae39e947a5e11a36b4497cd4a
# via sphinx
-importlib-metadata==8.7.0 \
- --hash=sha256:d13b81ad223b890aa16c5471f2ac3056cf76c5f10f82d6f9292f0b415f389000 \
- --hash=sha256:e5dd1551894c77868a30651cef00984d50e1002d06942a7101d34870c5f02afd
+importlib-metadata==8.7.1 \
+ --hash=sha256:49fef1ae6440c182052f407c8d34a68f72efc36db9ca90dc0113398f2fdde8bb \
+ --hash=sha256:5a1f80bf1daa489495071efbb095d75a634cf28a8bc299581244063b53176151
# via opentelemetry-api
importlib-resources==6.5.2 \
--hash=sha256:185f87adef5bcc288449d98fb4fba07cea78bc036455dd44c5fc4a2fe78fed2c \
@@ -1951,9 +1951,9 @@ jmespath==1.0.1 \
# aiobotocore
# boto3
# botocore
-joblib==1.5.2 \
- --hash=sha256:3faa5c39054b2f03ca547da9b2f52fde67c06240c31853f306aea97f13647b55 \
- --hash=sha256:4e1f0bdbb987e6d843c70cf43714cb276623def372df3c22fe5266b2670bc241
+joblib==1.5.3 \
+ --hash=sha256:5fc3c5039fc5ca8c0276333a188bbd59d6b7ab37fe6632daa76bc7f9ec18e713 \
+ --hash=sha256:8561a3269e6801106863fd0d6d84bb737be9e7631e33aaed3fb9ce5953688da3
# via scikit-learn
json5==0.12.1 \
--hash=sha256:b2743e77b3242f8d03c143dd975a6ec7c52e2f2afe76ed934e53503dd4ad4990 \
@@ -2033,9 +2033,9 @@ jupyter-server-terminals==0.5.3 \
--hash=sha256:41ee0d7dc0ebf2809c668e0fc726dfaf258fcd3e769568996ca731b6194ae9aa \
--hash=sha256:5ae0295167220e9ace0edcfdb212afd2b01ee8d179fe6f23c899590e9b8a5269
# via jupyter-server
-jupyterlab==4.5.0 \
- --hash=sha256:88e157c75c1afff64c7dc4b801ec471450b922a4eae4305211ddd40da8201c8a \
- --hash=sha256:aec33d6d8f1225b495ee2cf20f0514f45e6df8e360bdd7ac9bace0b7ac5177ea
+jupyterlab==4.5.1 \
+ --hash=sha256:09da1ddfbd9eec18b5101dbb8515612aa1e47443321fb99503725a88e93d20d9 \
+ --hash=sha256:31b059de96de0754ff1f2ce6279774b6aab8c34d7082e9752db58207c99bd514
# via notebook
jupyterlab-pygments==0.3.0 \
--hash=sha256:721aca4d9029252b11cfa9d185e5b5af4d54772bb8072f9b7036f4170054d35d \
@@ -2381,9 +2381,9 @@ markupsafe==3.0.3 \
# jinja2
# nbconvert
# werkzeug
-marshmallow==3.26.1 \
- --hash=sha256:3350409f20a70a7e4e11a27661187b77cdcaeb20abca41c1454fe33636bea09c \
- --hash=sha256:e6d8affb6cb61d39d26402096dc0aee12d5a26d490a121f118d2e81dc0719dc6
+marshmallow==3.26.2 \
+ --hash=sha256:013fa8a3c4c276c24d26d84ce934dc964e2aa794345a0f8c7e5a7191482c8a73 \
+ --hash=sha256:bbe2adb5a03e6e3571b573f42527c6fe926e17467833660bebd11593ab8dfd57
# via great-expectations
matplotlib-inline==0.2.1 \
--hash=sha256:d56ce5156ba6085e00a9d54fead6ed29a9c47e215cd1bba2e976ef39f5710a76 \
@@ -2391,9 +2391,9 @@ matplotlib-inline==0.2.1 \
# via
# ipykernel
# ipython
-mcp==1.23.3 \
- --hash=sha256:32768af4b46a1b4f7df34e2bfdf5c6011e7b63d7f1b0e321d0fdef4cd6082031 \
- --hash=sha256:b3b0da2cc949950ce1259c7bfc1b081905a51916fcd7c8182125b85e70825201
+mcp==1.25.0 \
+ --hash=sha256:56310361ebf0364e2d438e5b45f7668cbb124e158bb358333cd06e49e83a6802 \
+ --hash=sha256:b37c38144a666add0862614cc79ec276e97d72aa8ca26d622818d4e278b9721a
# via fastapi-mcp
mdurl==0.1.2 \
--hash=sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8 \
@@ -2411,9 +2411,9 @@ minio==7.2.11 \
--hash=sha256:153582ed52ff3b5005ba558e1f25bfe1e9e834f7f0745e594777f28e3e81e1a0 \
--hash=sha256:4db95a21fe1e2022ec975292d8a1f83bd5b18f830d23d42a4518ac7a5281d7c5
# via feast (setup.py)
-mistune==3.1.4 \
- --hash=sha256:93691da911e5d9d2e23bc54472892aff676df27a75274962ff9edc210364266d \
- --hash=sha256:b5a7f801d389f724ec702840c11d8fc48f2b33519102fc7ee739e8177b672164
+mistune==3.2.0 \
+ --hash=sha256:708487c8a8cdd99c9d90eb3ed4c3ed961246ff78ac82f03418f5183ab70e398a \
+ --hash=sha256:febdc629a3c78616b94393c6580551e0e34cc289987ec6c35ed3f4be42d0eee1
# via
# great-expectations
# nbconvert
@@ -2836,9 +2836,9 @@ mypy-protobuf==3.3.0 \
--hash=sha256:15604f6943b16c05db646903261e3b3e775cf7f7990b7c37b03d043a907b650d \
--hash=sha256:24f3b0aecb06656e983f58e07c732a90577b9d7af3e1066fc2b663bbf0370248
# via feast (setup.py)
-nbclient==0.10.2 \
- --hash=sha256:4ffee11e788b4a27fabeb7955547e4318a5298f34342a4bfd01f2e1faaeadc3d \
- --hash=sha256:90b7fc6b810630db87a6d0c2250b1f0ab4cf4d3c27a299b0cde78a4ed3fd9193
+nbclient==0.10.4 \
+ --hash=sha256:1e54091b16e6da39e297b0ece3e10f6f29f4ac4e8ee515d29f8a7099bd6553c9 \
+ --hash=sha256:9162df5a7373d70d606527300a95a975a47c137776cd942e52d9c7e29ff83440
# via nbconvert
nbconvert==7.16.6 \
--hash=sha256:1375a7b67e0c2883678c48e506dc320febb57685e5ee67faa51b18a90f3a712b \
@@ -2883,13 +2883,13 @@ ninja==1.13.0 \
--hash=sha256:fb46acf6b93b8dd0322adc3a4945452a4e774b75b91293bafcc7b7f8e6517dfa \
--hash=sha256:fb8ee8719f8af47fed145cced4a85f0755dd55d45b2bddaf7431fa89803c5f3e
# via easyocr
-nodeenv==1.9.1 \
- --hash=sha256:6ec12890a2dab7946721edbfbcd91f3319c6ccc9aec47be7c7e6b7011ee6645f \
- --hash=sha256:ba11c9782d29c27c70ffbdda2d7415098754709be8a7056d79a737cd901155c9
+nodeenv==1.10.0 \
+ --hash=sha256:5bb13e3eed2923615535339b3c620e76779af4cb4c6a90deccc9e36b274d3827 \
+ --hash=sha256:996c191ad80897d076bdfba80a41994c2b47c68e224c542b48feba42ba00f8bb
# via pre-commit
-notebook==7.5.0 \
- --hash=sha256:3300262d52905ca271bd50b22617681d95f08a8360d099e097726e6d2efb5811 \
- --hash=sha256:3b27eaf9913033c28dde92d02139414c608992e1df4b969c843219acf2ff95e4
+notebook==7.5.1 \
+ --hash=sha256:b2fb4cef4d47d08c33aecce1c6c6e84be05436fbd791f88fce8df9fbca088b75 \
+ --hash=sha256:f4e2451c19910c33b88709b84537e11f6368c1cdff1aa0c43db701aea535dd44
# via great-expectations
notebook-shim==0.2.4 \
--hash=sha256:411a5be4e9dc882a074ccbcae671eda64cceb068767e9a3419096986560e1cef \
@@ -2897,81 +2897,79 @@ notebook-shim==0.2.4 \
# via
# jupyterlab
# notebook
-numpy==2.3.5 \
- --hash=sha256:00dc4e846108a382c5869e77c6ed514394bdeb3403461d25a829711041217d5b \
- --hash=sha256:0472f11f6ec23a74a906a00b48a4dcf3849209696dff7c189714511268d103ae \
- --hash=sha256:04822c00b5fd0323c8166d66c701dc31b7fbd252c100acd708c48f763968d6a3 \
- --hash=sha256:052e8c42e0c49d2575621c158934920524f6c5da05a1d3b9bab5d8e259e045f0 \
- --hash=sha256:09a1bea522b25109bf8e6f3027bd810f7c1085c64a0c7ce050c1676ad0ba010b \
- --hash=sha256:0cd00b7b36e35398fa2d16af7b907b65304ef8bb4817a550e06e5012929830fa \
- --hash=sha256:0d8163f43acde9a73c2a33605353a4f1bc4798745a8b1d73183b28e5b435ae28 \
- --hash=sha256:1062fde1dcf469571705945b0f221b73928f34a20c904ffb45db101907c3454e \
- --hash=sha256:11e06aa0af8c0f05104d56450d6093ee639e15f24ecf62d417329d06e522e017 \
- --hash=sha256:17531366a2e3a9e30762c000f2c43a9aaa05728712e25c11ce1dbe700c53ad41 \
- --hash=sha256:1978155dd49972084bd6ef388d66ab70f0c323ddee6f693d539376498720fb7e \
- --hash=sha256:1ed1ec893cff7040a02c8aa1c8611b94d395590d553f6b53629a4461dc7f7b63 \
- --hash=sha256:2dcd0808a421a482a080f89859a18beb0b3d1e905b81e617a188bd80422d62e9 \
- --hash=sha256:2e2eb32ddb9ccb817d620ac1d8dae7c3f641c1e5f55f531a33e8ab97960a75b8 \
- --hash=sha256:2feae0d2c91d46e59fcd62784a3a83b3fb677fead592ce51b5a6fbb4f95965ff \
- --hash=sha256:3095bdb8dd297e5920b010e96134ed91d852d81d490e787beca7e35ae1d89cf7 \
- --hash=sha256:30bc11310e8153ca664b14c5f1b73e94bd0503681fcf136a163de856f3a50139 \
- --hash=sha256:3101e5177d114a593d79dd79658650fe28b5a0d8abeb8ce6f437c0e6df5be1a4 \
- --hash=sha256:396084a36abdb603546b119d96528c2f6263921c50df3c8fd7cb28873a237748 \
- --hash=sha256:3997b5b3c9a771e157f9aae01dd579ee35ad7109be18db0e85dbdbe1de06e952 \
- --hash=sha256:414802f3b97f3c1eef41e530aaba3b3c1620649871d8cb38c6eaff034c2e16bd \
- --hash=sha256:51c1e14eb1e154ebd80e860722f9e6ed6ec89714ad2db2d3aa33c31d7c12179b \
- --hash=sha256:51c55fe3451421f3a6ef9a9c1439e82101c57a2c9eab9feb196a62b1a10b58ce \
- --hash=sha256:5ee6609ac3604fa7780e30a03e5e241a7956f8e2fcfe547d51e3afa5247ac47f \
- --hash=sha256:612a95a17655e213502f60cfb9bf9408efdc9eb1d5f50535cc6eb365d11b42b5 \
- --hash=sha256:6203fdf9f3dc5bdaed7319ad8698e685c7a3be10819f41d32a0723e611733b42 \
- --hash=sha256:63c0e9e7eea69588479ebf4a8a270d5ac22763cc5854e9a7eae952a3908103f7 \
- --hash=sha256:66f85ce62c70b843bab1fb14a05d5737741e74e28c7b8b5a064de10142fad248 \
- --hash=sha256:6cf9b429b21df6b99f4dee7a1218b8b7ffbbe7df8764dc0bd60ce8a0708fed1e \
- --hash=sha256:70b37199913c1bd300ff6e2693316c6f869c7ee16378faf10e4f5e3275b299c3 \
- --hash=sha256:727fd05b57df37dc0bcf1a27767a3d9a78cbbc92822445f32cc3436ba797337b \
- --hash=sha256:74ae7b798248fe62021dbf3c914245ad45d1a6b0cb4a29ecb4b31d0bfbc4cc3e \
- --hash=sha256:784db1dcdab56bf0517743e746dfb0f885fc68d948aba86eeec2cba234bdf1c0 \
- --hash=sha256:86945f2ee6d10cdfd67bcb4069c1662dd711f7e2a4343db5cecec06b87cf31aa \
- --hash=sha256:86d835afea1eaa143012a2d7a3f45a3adce2d7adc8b4961f0b362214d800846a \
- --hash=sha256:872a5cf366aec6bb1147336480fef14c9164b154aeb6542327de4970282cd2f5 \
- --hash=sha256:8b973c57ff8e184109db042c842423ff4f60446239bd585a5131cc47f06f789d \
- --hash=sha256:8cba086a43d54ca804ce711b2a940b16e452807acebe7852ff327f1ecd49b0d4 \
- --hash=sha256:8f7f0e05112916223d3f438f293abf0727e1181b5983f413dfa2fefc4098245c \
- --hash=sha256:900218e456384ea676e24ea6a0417f030a3b07306d29d7ad843957b40a9d8d52 \
- --hash=sha256:93eebbcf1aafdf7e2ddd44c2923e2672e1010bddc014138b229e49725b4d6be5 \
- --hash=sha256:9c75442b2209b8470d6d5d8b1c25714270686f14c749028d2199c54e29f20b4d \
- --hash=sha256:9ee2197ef8c4f0dfe405d835f3b6a14f5fee7782b5de51ba06fb65fc9b36e9f1 \
- --hash=sha256:a414504bef8945eae5f2d7cb7be2d4af77c5d1cb5e20b296c2c25b61dff2900c \
- --hash=sha256:a4b9159734b326535f4dd01d947f919c6eefd2d9827466a696c44ced82dfbc18 \
- --hash=sha256:a80afd79f45f3c4a7d341f13acbe058d1ca8ac017c165d3fa0d3de6bc1a079d7 \
- --hash=sha256:aa5bc7c5d59d831d9773d1170acac7893ce3a5e130540605770ade83280e7188 \
- --hash=sha256:acfd89508504a19ed06ef963ad544ec6664518c863436306153e13e94605c218 \
- --hash=sha256:aeffcab3d4b43712bb7a60b65f6044d444e75e563ff6180af8f98dd4b905dfd2 \
- --hash=sha256:afaffc4393205524af9dfa400fa250143a6c3bc646c08c9f5e25a9f4b4d6a903 \
- --hash=sha256:b0c7088a73aef3d687c4deef8452a3ac7c1be4e29ed8bf3b366c8111128ac60c \
- --hash=sha256:b46b4ec24f7293f23adcd2d146960559aaf8020213de8ad1909dba6c013bf89c \
- --hash=sha256:b501b5fa195cc9e24fe102f21ec0a44dffc231d2af79950b451e0d99cea02234 \
- --hash=sha256:bf06bc2af43fa8d32d30fae16ad965663e966b1a3202ed407b84c989c3221e82 \
- --hash=sha256:c804e3a5aba5460c73955c955bdbd5c08c354954e9270a2c1565f62e866bdc39 \
- --hash=sha256:c8a9958e88b65c3b27e22ca2a076311636850b612d6bbfb76e8d156aacde2aaf \
- --hash=sha256:cc0a57f895b96ec78969c34f682c602bf8da1a0270b09bc65673df2e7638ec20 \
- --hash=sha256:cc8920d2ec5fa99875b670bb86ddeb21e295cb07aa331810d9e486e0b969d946 \
- --hash=sha256:ccc933afd4d20aad3c00bcef049cb40049f7f196e0397f1109dba6fed63267b0 \
- --hash=sha256:ce581db493ea1a96c0556360ede6607496e8bf9b3a8efa66e06477267bc831e9 \
- --hash=sha256:d0f23b44f57077c1ede8c5f26b30f706498b4862d3ff0a7298b8411dd2f043ff \
- --hash=sha256:d21644de1b609825ede2f48be98dfde4656aefc713654eeee280e37cadc4e0ad \
- --hash=sha256:d6889ec4ec662a1a37eb4b4fb26b6100841804dac55bd9df579e326cdc146227 \
- --hash=sha256:de5672f4a7b200c15a4127042170a694d4df43c992948f5e1af57f0174beed10 \
- --hash=sha256:e6a0bc88393d65807d751a614207b7129a310ca4fe76a74e5c7da5fa5671417e \
- --hash=sha256:ed89927b86296067b4f81f108a2271d8926467a8868e554eaf370fc27fa3ccaf \
- --hash=sha256:ee3888d9ff7c14604052b2ca5535a30216aa0a58e948cdd3eeb8d3415f638769 \
- --hash=sha256:f0963b55cdd70fad460fa4c1341f12f976bb26cb66021a5580329bd498988310 \
- --hash=sha256:f16417ec91f12f814b10bafe79ef77e70113a2f5f7018640e7425ff979253425 \
- --hash=sha256:f28620fe26bee16243be2b7b874da327312240a7cdc38b769a697578d2100013 \
- --hash=sha256:f4255143f5160d0de972d28c8f9665d882b5f61309d8362fdd3e103cf7bf010c \
- --hash=sha256:ffac52f28a7849ad7576293c0cb7b9f08304e8f7d738a8cb8a90ec4c55a998eb \
- --hash=sha256:ffe22d2b05504f786c867c8395de703937f934272eb67586817b46188b4ded6d \
- --hash=sha256:fffe29a1ef00883599d1dc2c51aa2e5d80afe49523c261a74933df395c15c520
+numpy==2.4.0 \
+ --hash=sha256:009bd0ea12d3c784b6639a8457537016ce5172109e585338e11334f6a7bb88ee \
+ --hash=sha256:02a2038eb27f9443a8b266a66911e926566b5a6ffd1a689b588f7f35b81e7dc3 \
+ --hash=sha256:0804a8e4ab070d1d35496e65ffd3cf8114c136a2b81f61dfab0de4b218aacfd5 \
+ --hash=sha256:0feafc9e03128074689183031181fac0897ff169692d8492066e949041096548 \
+ --hash=sha256:1889b3a3f47a7b5bee16bc25a2145bd7cb91897f815ce3499db64c7458b6d91d \
+ --hash=sha256:1d8f9fde5f6dc1b6fc34df8162f3b3079365468703fee7f31d4e0cc8c63baed9 \
+ --hash=sha256:1ee32359fb7543b7b7bd0b2f46294db27e29e7bbdf70541e81b190836cd83ded \
+ --hash=sha256:20c115517513831860c573996e395707aa9fb691eb179200125c250e895fcd93 \
+ --hash=sha256:21555da4ec4a0c942520ead42c3b0dc9477441e085c42b0fbdd6a084869a6f6b \
+ --hash=sha256:23a3e9d1a6f360267e8fbb38ba5db355a6a7e9be71d7fce7ab3125e88bb646c8 \
+ --hash=sha256:2a8b6bb8369abefb8bd1801b054ad50e02b3275c8614dc6e5b0373c305291037 \
+ --hash=sha256:2e284ca13d5a8367e43734148622caf0b261b275673823593e3e3634a6490f83 \
+ --hash=sha256:2f585f52b2baf07ff3356158d9268ea095e221371f1074fadea2f42544d58b4d \
+ --hash=sha256:316b2f2584682318539f0bcaca5a496ce9ca78c88066579ebd11fd06f8e4741e \
+ --hash=sha256:32ed06d0fe9cae27d8fb5f400c63ccee72370599c75e683a6358dd3a4fb50aaf \
+ --hash=sha256:355354388cba60f2132df297e2d53053d4063f79077b67b481d21276d61fc4df \
+ --hash=sha256:35ddc8f4914466e6fc954c76527aa91aa763682a4f6d73249ef20b418fe6effb \
+ --hash=sha256:36667db4d6c1cea79c8930ab72fadfb4060feb4bfe724141cd4bd064d2e5f8ce \
+ --hash=sha256:36cbfb13c152b1c7c184ddac43765db8ad672567e7bafff2cc755a09917ed2e6 \
+ --hash=sha256:39699233bc72dd482da1415dcb06076e32f60eddc796a796c5fb6c5efce94667 \
+ --hash=sha256:39b19251dec4de8ff8496cd0806cbe27bf0684f765abb1f4809554de93785f2d \
+ --hash=sha256:3d857f55e7fdf7c38ab96c4558c95b97d1c685be6b05c249f5fdafcbd6f9899e \
+ --hash=sha256:3de19cfecd1465d0dcf8a5b5ea8b3155b42ed0b639dba4b71e323d74f2a3be5e \
+ --hash=sha256:3f3096405acc48887458bbf9f6814d43785ac7ba2a57ea6442b581dedbc60ce6 \
+ --hash=sha256:40483b2f2d3ba7aad426443767ff5632ec3156ef09742b96913787d13c336471 \
+ --hash=sha256:413aa561266a4be2d06cd2b9665e89d9f54c543f418773076a76adcf2af08bc7 \
+ --hash=sha256:44aba2f0cafd287871a495fb3163408b0bd25bbce135c6f621534a07f4f7875c \
+ --hash=sha256:49ff32b09f5aa0cd30a20c2b39db3e669c845589f2b7fc910365210887e39344 \
+ --hash=sha256:4d1cfce39e511069b11e67cd0bd78ceff31443b7c9e5c04db73c7a19f572967c \
+ --hash=sha256:57c540ed8fb1f05cb997c6761cd56db72395b0d6985e90571ff660452ade4f98 \
+ --hash=sha256:5f48cb3e88fbc294dc90e215d86fbaf1c852c63dbdb6c3a3e63f45c4b57f7344 \
+ --hash=sha256:5fe44e277225fd3dff6882d86d3d447205d43532c3627313d17e754fb3905a0e \
+ --hash=sha256:60e8c196cd82cbbd4f130b5290007e13e6de3eca79f0d4d38014769d96a7c475 \
+ --hash=sha256:65167da969cd1ec3a1df31cb221ca3a19a8aaa25370ecb17d428415e93c1935e \
+ --hash=sha256:680060061adb2d74ce352628cb798cfdec399068aa7f07ba9fb818b2b3305f98 \
+ --hash=sha256:6bbaebf0d11567fa8926215ae731e1d58e6ec28a8a25235b8a47405d301332db \
+ --hash=sha256:6c05483c3136ac4c91b4e81903cb53a8707d316f488124d0398499a4f8e8ef51 \
+ --hash=sha256:6dc8b7e2f4eb184b37655195f421836cfae6f58197b67e3ffc501f1333d993fa \
+ --hash=sha256:6e504f7b16118198f138ef31ba24d985b124c2c469fe8467007cf30fd992f934 \
+ --hash=sha256:74623f2ab5cc3f7c886add4f735d1031a1d2be4a4ae63c0546cfd74e7a31ddf6 \
+ --hash=sha256:77f0d13fa87036d7553bf81f0e1fe3ce68d14c9976c9851744e4d3e91127e95f \
+ --hash=sha256:85eef4cb5625c47ee6425c58a3502555e10f45ee973da878ac8248ad58c136f3 \
+ --hash=sha256:882567b7ae57c1b1a0250208cc21a7976d8cbcc49d5a322e607e6f09c9e0bd53 \
+ --hash=sha256:8b986403023c8f3bf8f487c2e6186afda156174d31c175f747d8934dfddf3479 \
+ --hash=sha256:8cfa5f29a695cb7438965e6c3e8d06e0416060cf0d709c1b1c1653a939bf5c2a \
+ --hash=sha256:8eafe7c36c8430b7794edeab3087dec7bf31d634d92f2af9949434b9d1964cba \
+ --hash=sha256:9198f447e1dc5647d07c9a6bbe2063cc0132728cc7175b39dbc796da5b54920d \
+ --hash=sha256:92190db305a6f48734d3982f2c60fa30d6b5ee9bff10f2887b930d7b40119f4c \
+ --hash=sha256:927ccf5cd17c48f801f4ed43a7e5673a2724bd2171460be3e3894e6e332ef83a \
+ --hash=sha256:98e81648e0b36e325ab67e46b5400a7a6d4a22b8a7c8e8bbfe20e7db7906bf95 \
+ --hash=sha256:9a818668b674047fd88c4cddada7ab8f1c298812783e8328e956b78dc4807f9f \
+ --hash=sha256:a152d86a3ae00ba5f47b3acf3b827509fd0b6cb7d3259665e63dafbad22a75ea \
+ --hash=sha256:a2718c1de8504121714234b6f8241d0019450353276c88b9453c9c3d92e101db \
+ --hash=sha256:a39fb973a726e63223287adc6dafe444ce75af952d711e400f3bf2b36ef55a7b \
+ --hash=sha256:a899699294f28f7be8992853c0c60741f16ff199205e2e6cdca155762cbaa59d \
+ --hash=sha256:a8fdfed3deaf1928fb7667d96e0567cdf58c2b370ea2ee7e586aa383ec2cb346 \
+ --hash=sha256:aabb081ca0ec5d39591fc33018cd4b3f96e1a2dd6756282029986d00a785fba4 \
+ --hash=sha256:b1f5b45829ac1848893f0ddf5cb326110604d6df96cdc255b0bf9edd154104d4 \
+ --hash=sha256:b48e35f4ab6f6a7597c46e301126ceba4c44cd3280e3750f85db48b082624fa4 \
+ --hash=sha256:b54c83f1c0c0f1d748dca0af516062b8829d53d1f0c402be24b4257a9c48ada6 \
+ --hash=sha256:ba0cb30acd3ef11c94dc27fbfba68940652492bc107075e7ffe23057f9425681 \
+ --hash=sha256:bb50ce5fb202a26fd5404620e7ef820ad1ab3558b444cb0b55beb7ef66cd2d63 \
+ --hash=sha256:c95eb6db2884917d86cde0b4d4cf31adf485c8ec36bf8696dd66fa70de96f36b \
+ --hash=sha256:d0ffd9e2e4441c96a9c91ec1783285d80bf835b677853fc2770a89d50c1e48ac \
+ --hash=sha256:d57b5046c120561ba8fa8e4030fbb8b822f3063910fa901ffadf16e2b7128ad6 \
+ --hash=sha256:d9e6a7664ddd9746e20b7325351fe1a8408d0a2bf9c63b5e898290ddc8f09544 \
+ --hash=sha256:dc578891de1db95b2a35001b695451767b580bb45753717498213c5ff3c41d63 \
+ --hash=sha256:e0434aa22c821f44eeb4c650b81c7fbdd8c0122c6c4b5a576a76d5a35625ecd9 \
+ --hash=sha256:e06a922a469cae9a57100864caf4f8a97a1026513793969f8ba5b63137a35d25 \
+ --hash=sha256:e493962256a38f58283de033d8af176c5c91c084ea30f15834f7545451c42059 \
+ --hash=sha256:ecb0019d44f4cdb50b676c5d0cb4b1eae8e15d1ed3d3e6639f986fc92b2ec52c \
+ --hash=sha256:f935c4493eda9069851058fa0d9e39dbf6286be690066509305e52912714dbb2
# via
# feast (setup.py)
# accelerate
@@ -3030,30 +3028,30 @@ openshift-client==1.0.18 \
--hash=sha256:be3979440cfd96788146a3a1650dabe939d4d516eea0b39f87e66d2ab39495b1 \
--hash=sha256:d8a84080307ccd9556f6c62a3707a3e6507baedee36fa425754f67db9ded528b
# via codeflare-sdk
-opentelemetry-api==1.39.0 \
- --hash=sha256:3c3b3ca5c5687b1b5b37e5c5027ff68eacea8675241b29f13110a8ffbb8f0459 \
- --hash=sha256:6130644268c5ac6bdffaf660ce878f10906b3e789f7e2daa5e169b047a2933b9
+opentelemetry-api==1.39.1 \
+ --hash=sha256:2edd8463432a7f8443edce90972169b195e7d6a05500cd29e6d13898187c9950 \
+ --hash=sha256:fbde8c80e1b937a2c61f20347e91c0c18a1940cecf012d62e65a7caf08967c9c
# via
# opentelemetry-exporter-prometheus
# opentelemetry-sdk
# opentelemetry-semantic-conventions
-opentelemetry-exporter-prometheus==0.60b0 \
- --hash=sha256:4f616397040257fae4c5e5272b57b47c13372e3b7f0f2db2427fd4dbe69c60b5 \
- --hash=sha256:c6ae33e52cdd1dbfed1f7436935df94eb03c725b57322026d04e6fbc37108e6e
+opentelemetry-exporter-prometheus==0.60b1 \
+ --hash=sha256:49f59178de4f4590e3cef0b8b95cf6e071aae70e1f060566df5546fad773b8fd \
+ --hash=sha256:a4011b46906323f71724649d301b4dc188aaa068852e814f4df38cc76eac616b
# via ray
opentelemetry-proto==1.27.0 \
--hash=sha256:33c9345d91dafd8a74fc3d7576c5a38f18b7fdf8d02983ac67485386132aedd6 \
--hash=sha256:b133873de5581a50063e1e4b29cdcf0c5e253a8c2d8dc1229add20a4c3830ace
# via ray
-opentelemetry-sdk==1.39.0 \
- --hash=sha256:90cfb07600dfc0d2de26120cebc0c8f27e69bf77cd80ef96645232372709a514 \
- --hash=sha256:c22204f12a0529e07aa4d985f1bca9d6b0e7b29fe7f03e923548ae52e0e15dde
+opentelemetry-sdk==1.39.1 \
+ --hash=sha256:4d5482c478513ecb0a5d938dcc61394e647066e0cc2676bee9f3af3f3f45f01c \
+ --hash=sha256:cf4d4563caf7bff906c9f7967e2be22d0d6b349b908be0d90fb21c8e9c995cc6
# via
# opentelemetry-exporter-prometheus
# ray
-opentelemetry-semantic-conventions==0.60b0 \
- --hash=sha256:069530852691136018087b52688857d97bba61cd641d0f8628d2d92788c4f78a \
- --hash=sha256:227d7aa73cbb8a2e418029d6b6465553aa01cf7e78ec9d0bc3255c7b3ac5bf8f
+opentelemetry-semantic-conventions==0.60b1 \
+ --hash=sha256:87c228b5a0669b748c76d76df6c364c369c28f1c465e50f661e39737e84bc953 \
+ --hash=sha256:9fa8c8b0c110da289809292b0591220d3a7b53c1526a23021e977d68597893fb
# via opentelemetry-sdk
orjson==3.11.5 \
--hash=sha256:0522003e9f7fba91982e83a97fec0708f5a714c96c4209db7104e6b9d132f111 \
@@ -3583,9 +3581,9 @@ propcache==0.4.1 \
# via
# aiohttp
# yarl
-proto-plus==1.26.1 \
- --hash=sha256:13285478c2dcf2abb829db158e1047e2f1e8d63a077d94263c2b88b043c75a66 \
- --hash=sha256:21a515a4c4c0088a773899e23c7bbade3d18f9c66c73edd4c7ee3816bc96a012
+proto-plus==1.27.0 \
+ --hash=sha256:1baa7f81cf0f8acb8bc1f6d085008ba4171eaf669629d1b6d1673b21ed1c0a82 \
+ --hash=sha256:873af56dd0d7e91836aee871e5799e1c6f1bda86ac9a983e0bb9f0c266a568c4
# via
# google-api-core
# google-cloud-bigquery-storage
@@ -4262,9 +4260,9 @@ pyopenssl==25.1.0 \
--hash=sha256:2b11f239acc47ac2e5aca04fd7fa829800aeee22a2eb30d744572a157bd8a1ab \
--hash=sha256:8d031884482e0c67ee92bf9a4d8cceb08d92aba7136432ffb0703c5280fc205b
# via snowflake-connector-python
-pyparsing==3.2.5 \
- --hash=sha256:2df8d5b7b2802ef88e8d016a2eb9c7aeaa923529cd251ed0fe4608275d4105b6 \
- --hash=sha256:e38a4f02064cf41fe6593d328d0512495ad1f3d8a91c4f73fc401b3079a59a5e
+pyparsing==3.3.1 \
+ --hash=sha256:023b5e7e5520ad96642e2c6db4cb683d3970bd640cdf7115049a6e9c3682df82 \
+ --hash=sha256:47fad0f17ac1e2cad3de3b458570fbc9b03560aa029ed5e16ee5554da9a2251c
# via great-expectations
pypdfium2==4.30.0 \
--hash=sha256:0dfa61421b5eb68e1188b0b2231e7ba35735aef2d867d86e48ee6cab6975195e \
@@ -4287,8 +4285,8 @@ pyproject-hooks==1.2.0 \
# via
# build
# pip-tools
-pyspark==4.0.1 \
- --hash=sha256:9d1f22d994f60369228397e3479003ffe2dd736ba79165003246ff7bd48e2c73
+pyspark==4.1.0 \
+ --hash=sha256:09c714ada88dfac3e1213c066617c6f473c1e22fbe279855028f77e12434147d
# via feast (setup.py)
pytest==7.4.4 \
--hash=sha256:2cf0005922c6ace4a3e2ec8b4080eb0d9753fdc93107415332f50ce9e7994280 \
@@ -4485,9 +4483,9 @@ python-keycloak==4.2.2 \
--hash=sha256:1d43a1accd4a038ed39317fcb3eb78211df6c75bbcbc4c482c99ee76327136f2 \
--hash=sha256:5137fd87c69031a372a578df96bae96b9aead2c9dad976613bc978e9e0246a1e
# via feast (setup.py)
-python-multipart==0.0.20 \
- --hash=sha256:8a62d3a8335e06589fe01f2a3e178cdcc632f3fbe0d492ad9ee0ec35aab1f104 \
- --hash=sha256:8dd0cab45b8e23064ae09147625994d090fa46f5b0d1e13af944c331a7fa9d13
+python-multipart==0.0.21 \
+ --hash=sha256:7137ebd4d3bbf70ea1622998f902b97a29434a9e8dc40eb203bbcf7c2a2cba92 \
+ --hash=sha256:cf7a6713e01c87aa35387f4774e812c4361150938d20d232800f75ffcf266090
# via mcp
python-pptx==1.0.2 \
--hash=sha256:160838e0b8565a8b1f67947675886e9fea18aa5e795db7ae531606d68e785cba \
@@ -4692,9 +4690,9 @@ pyzmq==27.1.0 \
# ipykernel
# jupyter-client
# jupyter-server
-qdrant-client==1.16.1 \
- --hash=sha256:1eefe89f66e8a468ba0de1680e28b441e69825cfb62e8fb2e457c15e24ce5e3b \
- --hash=sha256:676c7c10fd4d4cb2981b8fcb32fd764f5f661b04b7334d024034d07212f971fd
+qdrant-client==1.16.2 \
+ --hash=sha256:442c7ef32ae0f005e88b5d3c0783c63d4912b97ae756eb5e052523be682f17d3 \
+ --hash=sha256:ca4ef5f9be7b5eadeec89a085d96d5c723585a391eb8b2be8192919ab63185f0
# via feast (setup.py)
ray[data, default]==2.52.1 \
--hash=sha256:08eb8f5fd55292ba6bee363a32491136a5e54af54e007f81e0603986fbea41a4 \
@@ -5051,26 +5049,26 @@ ruamel-yaml==0.17.17 \
--hash=sha256:9751de4cbb57d4bfbf8fc394e125ed4a2f170fbff3dc3d78abf50be85924f8be \
--hash=sha256:9af3ec5d7f8065582f3aa841305465025d0afd26c5fb54e15b964e11838fc74f
# via great-expectations
-ruff==0.14.8 \
- --hash=sha256:15f04cb45c051159baebb0f0037f404f1dc2f15a927418f29730f411a79bc4e7 \
- --hash=sha256:1af35c2d62633d4da0521178e8a2641c636d2a7153da0bac1b30cfd4ccd91344 \
- --hash=sha256:1d62cb310c4fbcb9ee4ac023fe17f984ae1e12b8a4a02e3d21489f9a2a5f730c \
- --hash=sha256:21d48fa744c9d1cb8d71eb0a740c4dd02751a5de9db9a730a8ef75ca34cf138e \
- --hash=sha256:25add4575ffecc53d60eed3f24b1e934493631b48ebbc6ebaf9d8517924aca4b \
- --hash=sha256:2c87e09b3cd9d126fc67a9ecd3b5b1d3ded2b9c7fce3f16e315346b9d05cfb52 \
- --hash=sha256:2e2fcbefe91f9fad0916850edf0854530c15bd1926b6b779de47e9ab619ea38f \
- --hash=sha256:4c943d847b7f02f7db4201a0600ea7d244d8a404fbb639b439e987edcf2baf9a \
- --hash=sha256:774ed0dd87d6ce925e3b8496feb3a00ac564bea52b9feb551ecd17e0a23d1eed \
- --hash=sha256:7aaf2974f378e6b01d1e257c6948207aec6a9b5ba53fab23d0182efb887a0e4a \
- --hash=sha256:8cdb162a7159f4ca36ce980a18c43d8f036966e7f73f866ac8f493b75e0c27e9 \
- --hash=sha256:965a582c93c63fe715fd3e3f8aa37c4b776777203d8e1d8aa3cc0c14424a4b99 \
- --hash=sha256:9eeb0b24242b5bbff3011409a739929f497f3fb5fe3b5698aba5e77e8c833097 \
- --hash=sha256:a9d70721066a296f45786ec31916dc287b44040f553da21564de0ab4d45a869b \
- --hash=sha256:cb6e8bf7b4f627548daa1b69283dac5a296bfe9ce856703b03130732e20ddfe2 \
- --hash=sha256:e5758ca513c43ad8a4ef13f0f081f80f08008f410790f3611a21a92421ab045b \
- --hash=sha256:ec071e9c82eca417f6111fd39f7043acb53cd3fde9b1f95bbed745962e345afb \
- --hash=sha256:eed28f6fafcc9591994c42254f5a5c5ca40e69a30721d2ab18bb0bb3baac3ab6 \
- --hash=sha256:f74f7ba163b6e85a8d81a590363bf71618847e5078d90827749bfda1d88c9cdf
+ruff==0.14.10 \
+ --hash=sha256:104c49fc7ab73f3f3a758039adea978869a918f31b73280db175b43a2d9b51d6 \
+ --hash=sha256:1484983559f026788e3a5c07c81ef7d1e97c1c78ed03041a18f75df104c45405 \
+ --hash=sha256:16a01dfb7b9e4eee556fbfd5392806b1b8550c9b4a9f6acd3dbe6812b193c70a \
+ --hash=sha256:213db2b2e44be8625002dbea33bb9c60c66ea2c07c084a00d55732689d697a7f \
+ --hash=sha256:466297bd73638c6bdf06485683e812db1c00c7ac96d4ddd0294a338c62fdc154 \
+ --hash=sha256:4bb98fcbbc61725968893682fd4df8966a34611239c9fd07a1f6a07e7103d08e \
+ --hash=sha256:59aabd2e2c4fd614d2862e7939c34a532c04f1084476d6833dddef4afab87e9f \
+ --hash=sha256:5bcf45b681e9f1ee6445d317ce1fa9d6cba9a6049542d1c3d5b5958986be8830 \
+ --hash=sha256:674f9be9372907f7257c51f1d4fc902cb7cf014b9980152b802794317941f08f \
+ --hash=sha256:6987ebe0501ae4f4308d7d24e2d0fe3d7a98430f5adfd0f1fead050a740a3a77 \
+ --hash=sha256:7165d31a925b7a294465fa81be8c12a0e9b60fb02bf177e79067c867e71f8b1f \
+ --hash=sha256:7a3ce585f2ade3e1f29ec1b92df13e3da262178df8c8bdf876f48fa0e8316c49 \
+ --hash=sha256:9a2e830f075d1a42cd28420d7809ace390832a490ed0966fe373ba288e77aaf4 \
+ --hash=sha256:b914c40ab64865a17a9a5b67911d14df72346a634527240039eb3bd650e5979d \
+ --hash=sha256:c561695675b972effb0c0a45db233f2c816ff3da8dcfbe7dfc7eed625f218935 \
+ --hash=sha256:c70427132db492d25f982fffc8d6c7535cc2fd2c83fc8888f05caaa248521e60 \
+ --hash=sha256:d85713d522348837ef9df8efca33ccb8bd6fcfc86a2cde3ccb4bc9d28a18003d \
+ --hash=sha256:e51d046cf6dda98a4633b8a8a771451107413b0f07183b2bef03f075599e44e6 \
+ --hash=sha256:f24b47993a9d8cb858429e97bdf8544c78029f09b520af615c1d261bf827001d
# via feast (setup.py)
s3transfer==0.13.1 \
--hash=sha256:a981aa7429be23fe6dfc13e80e4020057cbab622b08c0315288758d67cabc724 \
@@ -5105,29 +5103,56 @@ safetensors[torch]==0.7.0 \
# docling-ibm-models
# timm
# transformers
-scikit-image==0.25.2 \
- --hash=sha256:24cc986e1f4187a12aa319f777b36008764e856e5013666a4a83f8df083c2641 \
- --hash=sha256:28182a9d3e2ce3c2e251383bdda68f8d88d9fff1a3ebe1eb61206595c9773341 \
- --hash=sha256:330d061bd107d12f8d68f1d611ae27b3b813b8cdb0300a71d07b1379178dd4cd \
- --hash=sha256:483bd8cc10c3d8a7a37fae36dfa5b21e239bd4ee121d91cad1f81bba10cfb0ed \
- --hash=sha256:5c311069899ce757d7dbf1d03e32acb38bb06153236ae77fcd820fd62044c063 \
- --hash=sha256:60516257c5a2d2f74387c502aa2f15a0ef3498fbeaa749f730ab18f0a40fd054 \
- --hash=sha256:64785a8acefee460ec49a354706db0b09d1f325674107d7fa3eadb663fb56d6f \
- --hash=sha256:7efa888130f6c548ec0439b1a7ed7295bc10105458a421e9bf739b457730b6da \
- --hash=sha256:8db8dd03663112783221bf01ccfc9512d1cc50ac9b5b0fe8f4023967564719fb \
- --hash=sha256:9d1e80107bcf2bf1291acfc0bf0425dceb8890abe9f38d8e94e23497cbf7ee0d \
- --hash=sha256:a17e17eb8562660cc0d31bb55643a4da996a81944b82c54805c91b3fe66f4824 \
- --hash=sha256:a4c464b90e978d137330be433df4e76d92ad3c5f46a22f159520ce0fdbea8a09 \
- --hash=sha256:b2cfc96b27afe9a05bc92f8c6235321d3a66499995675b27415e0d0c76625173 \
- --hash=sha256:b4f6b61fc2db6340696afe3db6b26e0356911529f5f6aee8c322aa5157490c9b \
- --hash=sha256:b8abd3c805ce6944b941cfed0406d88faeb19bab3ed3d4b50187af55cf24d147 \
- --hash=sha256:bdd2b8c1de0849964dbc54037f36b4e9420157e67e45a8709a80d727f52c7da2 \
- --hash=sha256:be455aa7039a6afa54e84f9e38293733a2622b8c2fb3362b822d459cc5605e99 \
- --hash=sha256:d3278f586793176599df6a4cf48cb6beadae35c31e58dc01a98023af3dc31c78 \
- --hash=sha256:d989d64ff92e0c6c0f2018c7495a5b20e2451839299a018e0e5108b2680f71e0 \
- --hash=sha256:dd8011efe69c3641920614d550f5505f83658fe33581e49bed86feab43a180fc \
- --hash=sha256:e5a37e6cd4d0c018a7a55b9d601357e3382826d3888c10d0213fc63bff977dde \
- --hash=sha256:f4bac9196fb80d37567316581c6060763b0f4893d3aca34a9ede3825bc035b17
+scikit-image==0.26.0 \
+ --hash=sha256:0608aa4a9ec39e0843de10d60edb2785a30c1c47819b67866dd223ebd149acaf \
+ --hash=sha256:0660b83968c15293fd9135e8d860053ee19500d52bf55ca4fb09de595a1af650 \
+ --hash=sha256:09bad6a5d5949c7896c8347424c4cca899f1d11668030e5548813ab9c2865dcb \
+ --hash=sha256:0baa0108d2d027f34d748e84e592b78acc23e965a5de0e4bb03cf371de5c0581 \
+ --hash=sha256:163e9afb5b879562b9aeda0dd45208a35316f26cc7a3aed54fd601604e5cf46f \
+ --hash=sha256:20ef4a155e2e78b8ab973998e04d8a361d49d719e65412405f4dadd9155a61d9 \
+ --hash=sha256:21a818ee6ca2f2131b9e04d8eb7637b5c18773ebe7b399ad23dcc5afaa226d2d \
+ --hash=sha256:27d58bc8b2acd351f972c6508c1b557cfed80299826080a4d803dd29c51b707e \
+ --hash=sha256:2c1e7bd342f43e7a97e571b3f03ba4c1293ea1a35c3f13f41efdc8a81c1dc8f2 \
+ --hash=sha256:3268f13310e6857508bd87202620df996199a016a1d281b309441d227c822394 \
+ --hash=sha256:3409e89d66eff5734cd2b672d1c48d2759360057e714e1d92a11df82c87cba37 \
+ --hash=sha256:3f5bf622d7c0435884e1e141ebbe4b2804e16b2dd23ae4c6183e2ea99233be70 \
+ --hash=sha256:4c717490cec9e276afb0438dd165b7c3072d6c416709cc0f9f5a4c1070d23a44 \
+ --hash=sha256:4d57e39ef67a95d26860c8caf9b14b8fb130f83b34c6656a77f191fa6d1d04d8 \
+ --hash=sha256:52c496f75a7e45844d951557f13c08c81487c6a1da2e3c9c8a39fcde958e02cc \
+ --hash=sha256:6381edf972b32e4f54085449afde64365a57316637496c1325a736987083e2ab \
+ --hash=sha256:63af3d3a26125f796f01052052f86806da5b5e54c6abef152edb752683075a9c \
+ --hash=sha256:6caec76e16c970c528d15d1c757363334d5cb3069f9cea93d2bead31820511f3 \
+ --hash=sha256:724f79fd9b6cb6f4a37864fe09f81f9f5d5b9646b6868109e1b100d1a7019e59 \
+ --hash=sha256:74aa5518ccea28121f57a95374581d3b979839adc25bb03f289b1bc9b99c58af \
+ --hash=sha256:7af7aa331c6846bd03fa28b164c18d0c3fd419dbb888fb05e958ac4257a78fdd \
+ --hash=sha256:7df650e79031634ac90b11e64a9eedaf5a5e06fcd09bcd03a34be01745744466 \
+ --hash=sha256:915bb3ba66455cf8adac00dc8fdf18a4cd29656aec7ddd38cb4dda90289a6f21 \
+ --hash=sha256:92242351bccf391fc5df2d1529d15470019496d2498d615beb68da85fe7fdf37 \
+ --hash=sha256:9490360c8d3f9a7e85c8de87daf7c0c66507960cf4947bb9610d1751928721c7 \
+ --hash=sha256:98329aab3bc87db352b9887f64ce8cdb8e75f7c2daa19927f2e121b797b678d5 \
+ --hash=sha256:9ea6207d9e9d21c3f464efe733121c0504e494dbdc7728649ff3e23c3c5a4953 \
+ --hash=sha256:9eefb4adad066da408a7601c4c24b07af3b472d90e08c3e7483d4e9e829d8c49 \
+ --hash=sha256:a07200fe09b9d99fcdab959859fe0f7db8df6333d6204344425d476850ce3604 \
+ --hash=sha256:a2d211bc355f59725efdcae699b93b30348a19416cc9e017f7b2fb599faf7219 \
+ --hash=sha256:a2e852eccf41d2d322b8e60144e124802873a92b8d43a6f96331aa42888491c7 \
+ --hash=sha256:abed017474593cd3056ae0fe948d07d0747b27a085e92df5474f4955dd65aec0 \
+ --hash=sha256:ac529eb9dbd5954f9aaa2e3fe9a3fd9661bfe24e134c688587d811a0233127f1 \
+ --hash=sha256:aeb14db1ed09ad4bee4ceb9e635547a8d5f3549be67fc6c768c7f923e027e6cd \
+ --hash=sha256:b1ede33a0fb3731457eaf53af6361e73dd510f449dac437ab54573b26788baf0 \
+ --hash=sha256:b36ab5e778bf50af5ff386c3ac508027dc3aaeccf2161bdf96bde6848f44d21b \
+ --hash=sha256:b702c3bb115e1dcf4abf5297429b5c90f2189655888cbed14921f3d26f81d3a4 \
+ --hash=sha256:b8d14d3181c21c11170477a42542c1addc7072a90b986675a71266ad17abc37f \
+ --hash=sha256:c6624a76c6085218248154cc7e1500e6b488edcd9499004dd0d35040607d7505 \
+ --hash=sha256:c9087cf7d0e7f33ab5c46d2068d86d785e70b05400a891f73a13400f1e1faf6a \
+ --hash=sha256:cde0bbd57e6795eba83cb10f71a677f7239271121dc950bc060482834a668ad1 \
+ --hash=sha256:ce00600cd70d4562ed59f80523e18cdcc1fae0e10676498a01f73c255774aefd \
+ --hash=sha256:cefd85033e66d4ea35b525bb0937d7f42d4cdcfed2d1888e1570d5ce450d3932 \
+ --hash=sha256:d454b93a6fa770ac5ae2d33570f8e7a321bb80d29511ce4b6b78058ebe176e8c \
+ --hash=sha256:d5c244656de905e195a904e36dbc18585e06ecf67d90f0482cbde63d7f9ad59d \
+ --hash=sha256:ede4d6d255cc5da9faeb2f9ba7fedbc990abbc652db429f40a16b22e770bb578 \
+ --hash=sha256:f5f970ab04efad85c24714321fcc91613fcb64ef2a892a13167df2f3e59199fa \
+ --hash=sha256:f775f0e420faac9c2aa6757135f4eb468fb7b70e0b67fa77a5e79be3c30ee331 \
+ --hash=sha256:fac96a1f9b06cd771cbbb3cd96c5332f36d4efd839b1d8b053f79e5887acde62
# via easyocr
scikit-learn==1.8.0 \
--hash=sha256:00d6f1d66fbcf4eba6e356e1420d33cc06c70a45bb1363cd6f6a8e4ebbbdece2 \
@@ -5389,9 +5414,9 @@ sortedcontainers==2.4.0 \
--hash=sha256:25caa5a06cc30b6b83d11423433f65d1f9d76c4c6a0c90e3379eaa43b9bfdb88 \
--hash=sha256:a163dcaede0f1c021485e957a39245190e74249897e2ae4b2aa38595db237ee0
# via snowflake-connector-python
-soupsieve==2.8 \
- --hash=sha256:0cc76456a30e20f5d7f2e14a98a4ae2ee4e5abdc7c5ea0aafe795f344bc7984c \
- --hash=sha256:e2dd4a40a628cb5f28f6d4b0db8800b8f581b65bb380b97de22ba5ca8d72572f
+soupsieve==2.8.1 \
+ --hash=sha256:4cf733bc50fa805f5df4b8ef4740fc0e0fa6218cf3006269afd3f9d6d80fd350 \
+ --hash=sha256:a11fe2a6f3d76ab3cf2de04eb339c1be5b506a8a47f2ceb6d139803177f85434
# via beautifulsoup4
sphinx==6.2.1 \
--hash=sha256:6d56a34697bb749ffa0152feafc4b19836c755d90a7c59b72bc7dfd371b9cc6b \
@@ -5433,12 +5458,14 @@ sqlalchemy[mypy]==2.0.45 \
--hash=sha256:1d8b4a7a8c9b537509d56d5cd10ecdcfbb95912d72480c8861524efecc6a3fff \
--hash=sha256:215f0528b914e5c75ef2559f69dca86878a3beeb0c1be7279d77f18e8d180ed4 \
--hash=sha256:2c0b74aa79e2deade948fe8593654c8ef4228c44ba862bb7c9585c8e0db90f33 \
+ --hash=sha256:2e90a344c644a4fa871eb01809c32096487928bd2038bf10f3e4515cb688cc56 \
--hash=sha256:3c5f76216e7b85770d5bb5130ddd11ee89f4d52b11783674a662c7dd57018177 \
--hash=sha256:470daea2c1ce73910f08caf10575676a37159a6d16c4da33d0033546bddebc9b \
--hash=sha256:4748601c8ea959e37e03d13dcda4a44837afcd1b21338e637f7c935b8da06177 \
--hash=sha256:4b6bec67ca45bc166c8729910bd2a87f1c0407ee955df110d78948f5b5827e8a \
--hash=sha256:5225a288e4c8cc2308dbdd874edad6e7d0fd38eac1e9e5f23503425c8eee20d0 \
--hash=sha256:56ead1f8dfb91a54a28cd1d072c74b3d635bcffbd25e50786533b822d4f2cde2 \
+ --hash=sha256:5964f832431b7cdfaaa22a660b4c7eb1dfcd6ed41375f67fd3e3440fd95cb3cc \
--hash=sha256:59a8b8bd9c6bedf81ad07c8bd5543eedca55fe9b8780b2b628d495ba55f8db1e \
--hash=sha256:672c45cae53ba88e0dad74b9027dddd09ef6f441e927786b05bec75d949fbb2e \
--hash=sha256:6d0beadc2535157070c9c17ecf25ecec31e13c229a8f69196d7590bde8082bf1 \
@@ -5457,7 +5484,9 @@ sqlalchemy[mypy]==2.0.45 \
--hash=sha256:b8c8b41b97fba5f62349aa285654230296829672fc9939cd7f35aab246d1c08b \
--hash=sha256:ba547ac0b361ab4f1608afbc8432db669bd0819b3e12e29fb5fa9529a8bba81d \
--hash=sha256:c1c2091b1489435ff85728fafeb990f073e64f6f5e81d5cd53059773e8521eb6 \
+ --hash=sha256:c64772786d9eee72d4d3784c28f0a636af5b0a29f3fe26ff11f55efe90c0bd85 \
--hash=sha256:cd337d3526ec5298f67d6a30bbbe4ed7e5e68862f0bf6dd21d289f8d37b7d60b \
+ --hash=sha256:d29b2b99d527dbc66dd87c3c3248a5dd789d974a507f4653c969999fc7c1191b \
--hash=sha256:d2c3684fca8a05f0ac1d9a21c1f4a266983a7ea9180efb80ffeb03861ecd01a0 \
--hash=sha256:d62e47f5d8a50099b17e2bfc1b0c7d7ecd8ba6b46b1507b58cc4f05eefc3bb1c \
--hash=sha256:d8a2ca754e5415cde2b656c27900b19d50ba076aa05ce66e2207623d3fe41f5a \
@@ -5551,9 +5580,9 @@ sqlparams==6.2.0 \
--hash=sha256:3744a2ad16f71293db6505b21fd5229b4757489a9b09f3553656a1ae97ba7ca5 \
--hash=sha256:63b32ed9051bdc52e7e8b38bc4f78aed51796cdd9135e730f4c6a7db1048dedf
# via singlestoredb
-sse-starlette==3.0.3 \
- --hash=sha256:88cfb08747e16200ea990c8ca876b03910a23b547ab3bd764c0d8eb81019b971 \
- --hash=sha256:af5bf5a6f3933df1d9c7f8539633dc8444ca6a97ab2e2a7cd3b6e431ac03a431
+sse-starlette==3.1.1 \
+ --hash=sha256:bb38f71ae74cfd86b529907a9fda5632195dfa6ae120f214ea4c890c7ee9d436 \
+ --hash=sha256:bffa531420c1793ab224f63648c059bcadc412bf9fdb1301ac8de1cf9a67b7fb
# via mcp
stack-data==0.6.3 \
--hash=sha256:836a778de4fec4dcd1dcd89ed8abff8a221f58308462e1c4aa2a3cf30148f0b9 \
@@ -5565,6 +5594,7 @@ starlette==0.50.0 \
# via
# fastapi
# mcp
+ # sse-starlette
substrait==0.24.2 \
--hash=sha256:743cc352e96b0927b2cd37cd5a8fdac0a96a68df9600bd104fc36aebd222a836 \
--hash=sha256:d1d475833566fa9d67eed3273456883c0568486ccced92b524b31709d2817e19
@@ -5663,9 +5693,9 @@ thriftpy2==0.5.3 \
--hash=sha256:fd4c6131ca6e919f03263cc83b713f1797bc20126a858da8518ed49b3e32c334 \
--hash=sha256:fdc5676b52fa6a3009d205360eb9ba257b8b4813883ed52797a20838bcc45dde
# via happybase
-tifffile==2025.10.16 \
- --hash=sha256:41463d979c1c262b0a5cdef2a7f95f0388a072ad82d899458b154a48609d759c \
- --hash=sha256:425179ec7837ac0e07bc95d2ea5bea9b179ce854967c12ba07fc3f093e58efc1
+tifffile==2025.12.20 \
+ --hash=sha256:bc0345a20675149353cfcb3f1c48d0a3654231ee26bd46beebaab4d2168feeb6 \
+ --hash=sha256:cb8a4fee327d15b3e3eeac80bbdd8a53b323c80473330bcfb99418ee4c1c827f
# via scikit-image
timm==1.0.22 \
--hash=sha256:14fd74bcc17db3856b1a47d26fb305576c98579ab9d02b36714a5e6b25cde422 \
@@ -5825,19 +5855,19 @@ torchvision==0.24.1 \
# docling-ibm-models
# easyocr
# timm
-tornado==6.5.2 \
- --hash=sha256:06ceb1300fd70cb20e43b1ad8aaee0266e69e7ced38fa910ad2e03285009ce7c \
- --hash=sha256:2436822940d37cde62771cff8774f4f00b3c8024fe482e16ca8387b8a2724db6 \
- --hash=sha256:583a52c7aa94ee046854ba81d9ebb6c81ec0fd30386d96f7640c96dad45a03ef \
- --hash=sha256:74db443e0f5251be86cbf37929f84d8c20c27a355dd452a5cfa2aada0d001ec4 \
- --hash=sha256:ab53c8f9a0fa351e2c0741284e06c7a45da86afb544133201c5cc8578eb076a0 \
- --hash=sha256:b0fe179f28d597deab2842b86ed4060deec7388f1fd9c1b4a41adf8af058907e \
- --hash=sha256:b186e85d1e3536d69583d2298423744740986018e393d0321df7340e71898882 \
- --hash=sha256:b5e735ab2889d7ed33b32a459cac490eda71a1ba6857b0118de476ab6c366c04 \
- --hash=sha256:c6f29e94d9b37a95013bb669616352ddb82e3bfe8326fccee50583caebc8a5f0 \
- --hash=sha256:d6c33dc3672e3a1f3618eb63b7ef4683a7688e7b9e6e8f0d9aa5726360a004af \
- --hash=sha256:e56a5af51cc30dd2cae649429af65ca2f6571da29504a07995175df14c18f35f \
- --hash=sha256:e792706668c87709709c18b353da1f7662317b563ff69f00bab83595940c7108
+tornado==6.5.4 \
+ --hash=sha256:053e6e16701eb6cbe641f308f4c1a9541f91b6261991160391bfc342e8a551a1 \
+ --hash=sha256:1768110f2411d5cd281bac0a090f707223ce77fd110424361092859e089b38d1 \
+ --hash=sha256:2d50f63dda1d2cac3ae1fa23d254e16b5e38153758470e9956cbc3d813d40843 \
+ --hash=sha256:50ff0a58b0dc97939d29da29cd624da010e7f804746621c78d14b80238669335 \
+ --hash=sha256:6076d5dda368c9328ff41ab5d9dd3608e695e8225d1cd0fd1e006f05da3635a8 \
+ --hash=sha256:6eb82872335a53dd063a4f10917b3efd28270b56a33db69009606a0312660a6f \
+ --hash=sha256:9c86b1643b33a4cd415f8d0fe53045f913bf07b4a3ef646b735a6a86047dda84 \
+ --hash=sha256:a22fa9047405d03260b483980635f0b041989d8bcc9a313f8fe18b411d84b1d7 \
+ --hash=sha256:d1cf66105dc6acb5af613c054955b8137e34a03698aa53272dbda4afe252be17 \
+ --hash=sha256:d6241c1a16b1c9e4cc28148b1cda97dd1c6cb4fb7068ac1bedc610768dff0ba9 \
+ --hash=sha256:e5fb5e04efa54cf0baabdd10061eb4148e0be137166146fff835745f59ab9f7f \
+ --hash=sha256:fa07d31e0cd85c60713f2b995da613588aa03e1303d75705dca6af8babc18ddc
# via
# ipykernel
# jupyter-client
@@ -5997,9 +6027,9 @@ types-protobuf==3.19.22 \
# via
# feast (setup.py)
# mypy-protobuf
-types-pymysql==1.1.0.20250916 \
- --hash=sha256:873eb9836bb5e3de4368cc7010ca72775f86e9692a5c7810f8c7f48da082e55b \
- --hash=sha256:98d75731795fcc06723a192786662bdfa760e1e00f22809c104fbb47bac5e29b
+types-pymysql==1.1.0.20251220 \
+ --hash=sha256:ae1c3df32a777489431e2e9963880a0df48f6591e0aa2fd3a6fabd9dee6eca54 \
+ --hash=sha256:fa1082af7dea6c53b6caa5784241924b1296ea3a8d3bd060417352c5e10c0618
# via feast (setup.py)
types-pyopenssl==24.1.0.20240722 \
--hash=sha256:47913b4678a01d879f503a12044468221ed8576263c1540dcb0484ca21b08c39 \
@@ -6025,9 +6055,9 @@ types-requests==2.30.0.0 \
--hash=sha256:c6cf08e120ca9f0dc4fa4e32c3f953c3fba222bcc1db6b97695bce8da1ba9864 \
--hash=sha256:dec781054324a70ba64430ae9e62e7e9c8e4618c185a5cb3f87a6738251b5a31
# via feast (setup.py)
-types-setuptools==80.9.0.20250822 \
- --hash=sha256:070ea7716968ec67a84c7f7768d9952ff24d28b65b6594797a464f1b3066f965 \
- --hash=sha256:53bf881cb9d7e46ed12c76ef76c0aaf28cfe6211d3fab12e0b83620b1a8642c3
+types-setuptools==80.9.0.20251223 \
+ --hash=sha256:1b36db79d724c2287d83dc052cf887b47c0da6a2fff044378be0b019545f56e6 \
+ --hash=sha256:d3411059ae2f5f03985217d86ac6084efea2c9e9cacd5f0869ef950f308169b2
# via
# feast (setup.py)
# types-cffi
@@ -6085,9 +6115,9 @@ typing-inspection==0.4.2 \
# mcp
# pydantic
# pydantic-settings
-tzdata==2025.2 \
- --hash=sha256:1a403fada01ff9221ca8044d701868fa132215d84beb92242d9acd2147f667a8 \
- --hash=sha256:b60a638fcc0daffadf82fe0f57e53d06bdec2f36c4df66280ae79bce6bd6f2b9
+tzdata==2025.3 \
+ --hash=sha256:06a47e5700f3081aab02b2e513160914ff0694bce9947d6b76ebd6bf57cfc5d1 \
+ --hash=sha256:de39c2ca5dc7b0344f2eba86f49d614019d29f060fc4ebc8a417896a620b56a7
# via
# arrow
# pandas
@@ -6187,9 +6217,9 @@ uri-template==1.3.0 \
--hash=sha256:0e00f8eb65e18c7de20d595a14336e9f337ead580c70934141624b6d1ffdacc7 \
--hash=sha256:a44a133ea12d44a0c0f06d7d42a52d71282e77e2f937d8abd5655b8d56fc1363
# via jsonschema
-urllib3==2.6.1 \
- --hash=sha256:5379eb6e1aba4088bae84f8242960017ec8d8e3decf30480b3a1abdaa9671a3f \
- --hash=sha256:e67d06fe947c36a7ca39f4994b08d73922d40e6cca949907be05efa6fd75110b
+urllib3==2.6.2 \
+ --hash=sha256:016f9c98bb7e98085cb2b4b17b87d2c702975664e4f060c6532e64d1c1a5e797 \
+ --hash=sha256:ec21cddfe7724fc7cb4ba4bea7aa8e2ef36f607a4bab81aa6ce42a13dc3f03dd
# via
# feast (setup.py)
# botocore
diff --git a/sdk/python/requirements/py3.12-minimal-requirements.txt b/sdk/python/requirements/py3.12-minimal-requirements.txt
index b0f2f48c9b0..d2064d4ed78 100644
--- a/sdk/python/requirements/py3.12-minimal-requirements.txt
+++ b/sdk/python/requirements/py3.12-minimal-requirements.txt
@@ -170,9 +170,9 @@ attrs==25.4.0 \
# aiohttp
# jsonschema
# referencing
-bigtree==1.0.3 \
- --hash=sha256:18402a143130868b17ca84a74ca263e6f32f046d6978c30d244f8b94c4a01227 \
- --hash=sha256:99a18b6937a9b4ab8e560fec5c0720e10ebf37f84e44f9b5f47702c2e84c9aaa
+bigtree==1.0.4 \
+ --hash=sha256:e4af0c5bc0d2cd72e18442965e4509f642b16a0de65db6d0ec116e30f959010c \
+ --hash=sha256:f58a3238bb9b1142d893c9de4921bfd18d435427c75e0c168dd580eabf6dc7fd
# via feast (setup.py)
boto3==1.38.27 \
--hash=sha256:94bd7fdd92d5701b362d4df100d21e28f8307a67ff56b6a8b0398119cf22f859 \
@@ -188,9 +188,9 @@ botocore==1.38.46 \
# boto3
# s3transfer
# snowflake-connector-python
-cachetools==6.2.2 \
- --hash=sha256:6c09c98183bf58560c97b2abfcedcbaf6a896a490f534b031b661d3723b45ace \
- --hash=sha256:8e6d266b25e539df852251cfd6f990b4bc3a141db73b939058d809ebd2590fc6
+cachetools==6.2.4 \
+ --hash=sha256:69a7a52634fed8b8bf6e24a050fb60bff1c9bd8f6d24572b99c32d4e71e62a51 \
+ --hash=sha256:82c5c05585e70b6ba2d3ae09ea60b79548872185d2f24ae1f2709d37299fd607
# via google-auth
certifi==2025.11.12 \
--hash=sha256:97de8790030bbd5c2d96b7ec782fc2f7820ef8dba6db909ccf95449f2d062d4b \
@@ -465,13 +465,13 @@ cryptography==46.0.0 \
# pyjwt
# pyopenssl
# snowflake-connector-python
-dask[dataframe]==2025.11.0 \
- --hash=sha256:08c35a8146c05c93b34f83cf651009129c42ee71762da7ca452fb7308641c2b8 \
- --hash=sha256:23d59e624b80ee05b7cc8df858682cca58262c4c3b197ccf61da0f6543c8f7c3
+dask[dataframe]==2025.12.0 \
+ --hash=sha256:4213ce9c5d51d6d89337cff69de35d902aa0bf6abdb8a25c942a4d0281f3a598 \
+ --hash=sha256:8d478f2aabd025e2453cf733ad64559de90cf328c20209e4574e9543707c3e1b
# via feast (setup.py)
-db-dtypes==1.4.4 \
- --hash=sha256:26f53db5df1acd746b88c5647913a1b20f731c0af1b11abcb6bec5365f31098a \
- --hash=sha256:32c13039982656a8598a0835f25f0e07e34c9a423e471ee60c2553240b7fcf1e
+db-dtypes==1.5.0 \
+ --hash=sha256:abdbb2e4eb965800ed6f98af0c5c1cafff9063ace09114be2d26a7f046be2c8a \
+ --hash=sha256:ad9e94243f53e104bc77dbf9ae44b580d83a770d3694483aba59c9767966daa5
# via
# google-cloud-bigquery
# pandas-gbq
@@ -537,9 +537,9 @@ durationpy==0.10 \
--hash=sha256:1fa6893409a6e739c9c72334fc65cca1f355dbdd93405d30f726deb5bde42fba \
--hash=sha256:3b41e1b601234296b4fb368338fdcd3e13e0b4fb5b67345948f4f2bf9868b286
# via kubernetes
-fastapi==0.124.0 \
- --hash=sha256:260cd178ad75e6d259991f2fd9b0fee924b224850079df576a3ba604ce58f4e6 \
- --hash=sha256:91596bdc6dde303c318f06e8d2bc75eafb341fc793a0c9c92c0bc1db1ac52480
+fastapi==0.128.0 \
+ --hash=sha256:1cc179e1cef10a6be60ffe429f79b829dce99d8de32d7acb7e6c8dfdf7f2645a \
+ --hash=sha256:aebd93f9716ee3b4f4fcfe13ffb7cf308d99c9f3ab5622d8877441072561582d
# via
# feast (setup.py)
# fastapi-mcp
@@ -547,9 +547,9 @@ fastapi-mcp==0.4.0 \
--hash=sha256:d4a3fe7966af24d44e4b412720561c95eb12bed999a4443a88221834b3b15aec \
--hash=sha256:d4ca9410996f4c7b8ea0d7b20fdf79878dc359ebf89cbf3b222e0b675a55097d
# via feast (setup.py)
-filelock==3.20.0 \
- --hash=sha256:339b4732ffda5cd79b13f4e2711a31b0365ce445d95d243bb996273d072546a2 \
- --hash=sha256:711e943b4ec6be42e1d4e6690b48dc175c822967466bb31c0c293f34334c13f4
+filelock==3.20.1 \
+ --hash=sha256:15d9e9a67306188a44baa72f569d2bfd803076269365fdea0934385da4dc361a \
+ --hash=sha256:b8360948b351b80f420878d8516519a2204b07aefcdcfd24912a5d33127f188c
# via snowflake-connector-python
frozenlist==1.8.0 \
--hash=sha256:0325024fe97f94c41c08872db482cf8ac4800d80e79222c6b0b7b162d5b13686 \
@@ -703,9 +703,9 @@ google-api-core[grpc]==2.28.1 \
# google-cloud-datastore
# google-cloud-storage
# pandas-gbq
-google-auth==2.43.0 \
- --hash=sha256:88228eee5fc21b62a1b5fe773ca15e67778cb07dc8363adcb4a8827b52d81483 \
- --hash=sha256:af628ba6fa493f75c7e9dbe9373d148ca9f4399b5ea29976519e0a3848eddd16
+google-auth==2.45.0 \
+ --hash=sha256:82344e86dc00410ef5382d99be677c6043d72e502b625aa4f4afa0bdacca0f36 \
+ --hash=sha256:90d3f41b6b72ea72dd9811e765699ee491ab24139f34ebf1ca2b9cc0c38708f3
# via
# google-api-core
# google-auth-oauthlib
@@ -724,19 +724,19 @@ google-auth-oauthlib==1.2.2 \
# via
# pandas-gbq
# pydata-google-auth
-google-cloud-bigquery[pandas]==3.38.0 \
- --hash=sha256:8afcb7116f5eac849097a344eb8bfda78b7cfaae128e60e019193dd483873520 \
- --hash=sha256:e06e93ff7b245b239945ef59cb59616057598d369edac457ebf292bd61984da6
+google-cloud-bigquery[pandas]==3.39.0 \
+ --hash=sha256:cb375e1d63dea9bd5bf735e66024338f294159d43afdf63e1d023f5fcbbf55ea \
+ --hash=sha256:dc7a64921465859105461b43c42562e38e797d7a73feb72b3cfc4865b7b1c5ef
# via
# feast (setup.py)
# pandas-gbq
-google-cloud-bigquery-storage==2.35.0 \
- --hash=sha256:c9bab6b8e41d6cb9806e589e65f320c89ada84f466e61566b7208d87924c1430 \
- --hash=sha256:f2e3a08882155de1e9ec53c71c5784eb1f25dc6514c535f5796c3c9eeac17d17
+google-cloud-bigquery-storage==2.36.0 \
+ --hash=sha256:1769e568070db672302771d2aec18341de10712aa9c4a8c549f417503e0149f0 \
+ --hash=sha256:d3c1ce9d2d3a4d7116259889dcbe3c7c70506f71f6ce6bbe54aa0a68bbba8f8f
# via feast (setup.py)
-google-cloud-bigtable==2.34.0 \
- --hash=sha256:773258b00cd3f9a3a35639cc38bd711f4f1418aaa0c8d70cb028978ed98dc2c2 \
- --hash=sha256:a4a8db4903840cd3f89fb19c060eea2e7c09c1265cb0538cfc11288dbc6000e4
+google-cloud-bigtable==2.35.0 \
+ --hash=sha256:f355bfce1f239453ec2bb3839b0f4f9937cf34ef06ef29e1ca63d58fd38d0c50 \
+ --hash=sha256:f5699012c5fea4bd4bdf7e80e5e3a812a847eb8f41bf8dc2f43095d6d876b83b
# via feast (setup.py)
google-cloud-core==2.5.0 \
--hash=sha256:67d977b41ae6c7211ee830c7912e41003ea8194bff15ae7d72fd6f51e57acabc \
@@ -746,49 +746,48 @@ google-cloud-core==2.5.0 \
# google-cloud-bigtable
# google-cloud-datastore
# google-cloud-storage
-google-cloud-datastore==2.21.0 \
- --hash=sha256:eee454dd4a55f5b327f9f344928ff1a09a6f77c23d5e3d908ad31a13cc2f4073 \
- --hash=sha256:f303f27cd1983383f20bd227019cd8a7897419e0ec6b878367c58c66245f9d9b
+google-cloud-datastore==2.23.0 \
+ --hash=sha256:24a1b1d29b902148fe41b109699f76fd3aa60591e9d547c0f8b87d7bf9ff213f \
+ --hash=sha256:80049883a4ae928fdcc661ba6803ec267665dc0e6f3ce2da91441079a6bb6387
# via feast (setup.py)
google-cloud-storage==2.19.0 \
--hash=sha256:aeb971b5c29cf8ab98445082cbfe7b161a1f48ed275822f59ed3f1524ea54fba \
--hash=sha256:cd05e9e7191ba6cb68934d8eb76054d9be4562aa89dbc4236feee4d7d51342b2
# via feast (setup.py)
-google-crc32c==1.7.1 \
- --hash=sha256:0f99eaa09a9a7e642a61e06742856eec8b19fc0037832e03f941fe7cf0c8e4db \
- --hash=sha256:19eafa0e4af11b0a4eb3974483d55d2d77ad1911e6cf6f832e1574f6781fd337 \
- --hash=sha256:1c67ca0a1f5b56162951a9dae987988679a7db682d6f97ce0f6381ebf0fbea4c \
- --hash=sha256:1f2b3522222746fff0e04a9bd0a23ea003ba3cccc8cf21385c564deb1f223242 \
- --hash=sha256:22beacf83baaf59f9d3ab2bbb4db0fb018da8e5aebdce07ef9f09fce8220285e \
- --hash=sha256:2bff2305f98846f3e825dbeec9ee406f89da7962accdb29356e4eadc251bd472 \
- --hash=sha256:2d73a68a653c57281401871dd4aeebbb6af3191dcac751a76ce430df4d403194 \
- --hash=sha256:32d1da0d74ec5634a05f53ef7df18fc646666a25efaaca9fc7dcfd4caf1d98c3 \
- --hash=sha256:3bda0fcb632d390e3ea8b6b07bf6b4f4a66c9d02dcd6fbf7ba00a197c143f582 \
- --hash=sha256:6335de12921f06e1f774d0dd1fbea6bf610abe0887a1638f64d694013138be5d \
- --hash=sha256:6b211ddaf20f7ebeec5c333448582c224a7c90a9d98826fbab82c0ddc11348e6 \
- --hash=sha256:6efb97eb4369d52593ad6f75e7e10d053cf00c48983f7a973105bc70b0ac4d82 \
- --hash=sha256:6fbab4b935989e2c3610371963ba1b86afb09537fd0c633049be82afe153ac06 \
- --hash=sha256:713121af19f1a617054c41f952294764e0c5443d5a5d9034b2cd60f5dd7e0349 \
- --hash=sha256:754561c6c66e89d55754106739e22fdaa93fafa8da7221b29c8b8e8270c6ec8a \
- --hash=sha256:7cc81b3a2fbd932a4313eb53cc7d9dde424088ca3a0337160f35d91826880c1d \
- --hash=sha256:85fef7fae11494e747c9fd1359a527e5970fc9603c90764843caabd3a16a0a48 \
- --hash=sha256:905a385140bf492ac300026717af339790921f411c0dfd9aa5a9e69a08ed32eb \
- --hash=sha256:9fc196f0b8d8bd2789352c6a522db03f89e83a0ed6b64315923c396d7a932315 \
- --hash=sha256:a8e9afc74168b0b2232fb32dd202c93e46b7d5e4bf03e66ba5dc273bb3559589 \
- --hash=sha256:b07d48faf8292b4db7c3d64ab86f950c2e94e93a11fd47271c28ba458e4a0d76 \
- --hash=sha256:b6d86616faaea68101195c6bdc40c494e4d76f41e07a37ffdef270879c15fb65 \
- --hash=sha256:b7491bdc0c7564fcf48c0179d2048ab2f7c7ba36b84ccd3a3e1c3f7a72d3bba6 \
- --hash=sha256:bb5e35dcd8552f76eed9461a23de1030920a3c953c1982f324be8f97946e7127 \
- --hash=sha256:d68e17bad8f7dd9a49181a1f5a8f4b251c6dbc8cc96fb79f1d321dfd57d66f53 \
- --hash=sha256:dcdf5a64adb747610140572ed18d011896e3b9ae5195f2514b7ff678c80f1603 \
- --hash=sha256:df8b38bdaf1629d62d51be8bdd04888f37c451564c2042d36e5812da9eff3c35 \
- --hash=sha256:e10554d4abc5238823112c2ad7e4560f96c7bf3820b202660373d769d9e6e4c9 \
- --hash=sha256:e42e20a83a29aa2709a0cf271c7f8aefaa23b7ab52e53b322585297bb94d4638 \
- --hash=sha256:ed66cbe1ed9cbaaad9392b5259b3eba4a9e565420d734e6238813c428c3336c9 \
- --hash=sha256:ee6547b657621b6cbed3562ea7826c3e11cab01cd33b74e1f677690652883e77 \
- --hash=sha256:f2226b6a8da04f1d9e61d3e357f2460b9551c5e6950071437e122c958a18ae14 \
- --hash=sha256:fa8136cc14dd27f34a3221c0f16fd42d8a40e4778273e61a3c19aedaa44daf6b \
- --hash=sha256:fc5319db92daa516b653600794d5b9f9439a9a121f3e162f94b0e1891c7933cb
+google-crc32c==1.8.0 \
+ --hash=sha256:014a7e68d623e9a4222d663931febc3033c5c7c9730785727de2a81f87d5bab8 \
+ --hash=sha256:01f126a5cfddc378290de52095e2c7052be2ba7656a9f0caf4bcd1bfb1833f8a \
+ --hash=sha256:0470b8c3d73b5f4e3300165498e4cf25221c7eb37f1159e221d1825b6df8a7ff \
+ --hash=sha256:119fcd90c57c89f30040b47c211acee231b25a45d225e3225294386f5d258288 \
+ --hash=sha256:14f87e04d613dfa218d6135e81b78272c3b904e2a7053b841481b38a7d901411 \
+ --hash=sha256:17446feb05abddc187e5441a45971b8394ea4c1b6efd88ab0af393fd9e0a156a \
+ --hash=sha256:19b40d637a54cb71e0829179f6cb41835f0fbd9e8eb60552152a8b52c36cbe15 \
+ --hash=sha256:2a3dc3318507de089c5384cc74d54318401410f82aa65b2d9cdde9d297aca7cb \
+ --hash=sha256:3b9776774b24ba76831609ffbabce8cdf6fa2bd5e9df37b594221c7e333a81fa \
+ --hash=sha256:3cc0c8912038065eafa603b238abf252e204accab2a704c63b9e14837a854962 \
+ --hash=sha256:3d488e98b18809f5e322978d4506373599c0c13e6c5ad13e53bb44758e18d215 \
+ --hash=sha256:3ebb04528e83b2634857f43f9bb8ef5b2bbe7f10f140daeb01b58f972d04736b \
+ --hash=sha256:450dc98429d3e33ed2926fc99ee81001928d63460f8538f21a5d6060912a8e27 \
+ --hash=sha256:4b8286b659c1335172e39563ab0a768b8015e88e08329fa5321f774275fc3113 \
+ --hash=sha256:57a50a9035b75643996fbf224d6661e386c7162d1dfdab9bc4ca790947d1007f \
+ --hash=sha256:61f58b28e0b21fcb249a8247ad0db2e64114e201e2e9b4200af020f3b6242c9f \
+ --hash=sha256:6f35aaffc8ccd81ba3162443fabb920e65b1f20ab1952a31b13173a67811467d \
+ --hash=sha256:71734788a88f551fbd6a97be9668a0020698e07b2bf5b3aa26a36c10cdfb27b2 \
+ --hash=sha256:864abafe7d6e2c4c66395c1eb0fe12dc891879769b52a3d56499612ca93b6092 \
+ --hash=sha256:86cfc00fe45a0ac7359e5214a1704e51a99e757d0272554874f419f79838c5f7 \
+ --hash=sha256:87b0072c4ecc9505cfa16ee734b00cd7721d20a0f595be4d40d3d21b41f65ae2 \
+ --hash=sha256:87fa445064e7db928226b2e6f0d5304ab4cd0339e664a4e9a25029f384d9bb93 \
+ --hash=sha256:89c17d53d75562edfff86679244830599ee0a48efc216200691de8b02ab6b2b8 \
+ --hash=sha256:8b3f68782f3cbd1bce027e48768293072813469af6a61a86f6bb4977a4380f21 \
+ --hash=sha256:a428e25fb7691024de47fecfbff7ff957214da51eddded0da0ae0e0f03a2cf79 \
+ --hash=sha256:b0d1a7afc6e8e4635564ba8aa5c0548e3173e41b6384d7711a9123165f582de2 \
+ --hash=sha256:ba6aba18daf4d36ad4412feede6221414692f44d17e5428bdd81ad3fc1eee5dc \
+ --hash=sha256:cb5c869c2923d56cb0c8e6bcdd73c009c36ae39b652dbe46a05eb4ef0ad01454 \
+ --hash=sha256:d511b3153e7011a27ab6ee6bb3a5404a55b994dc1a7322c0b87b29606d9790e2 \
+ --hash=sha256:db3fe8eaf0612fc8b20fa21a5f25bd785bc3cd5be69f8f3412b0ac2ffd49e733 \
+ --hash=sha256:e6584b12cb06796d285d09e33f63309a09368b9d806a551d8036a4207ea43697 \
+ --hash=sha256:f4b51844ef67d6cf2e9425983274da75f18b1597bb2c998e1c0a0e8d46f8f651 \
+ --hash=sha256:f639065ea2042d5c034bf258a9f085eaa7af0cd250667c0635a3118e8f92c69c
# via
# google-cloud-bigtable
# google-cloud-storage
@@ -871,6 +870,7 @@ grpcio==1.62.3 \
# google-api-core
# google-cloud-bigquery
# google-cloud-bigquery-storage
+ # google-cloud-datastore
# googleapis-common-protos
# grpc-google-iam-v1
# grpcio-health-checking
@@ -1094,83 +1094,83 @@ kubernetes==33.1.0 \
--hash=sha256:544de42b24b64287f7e0aa9513c93cb503f7f40eea39b20f66810011a86eabc5 \
--hash=sha256:f64d829843a54c251061a8e7a14523b521f2dc5c896cf6d65ccf348648a88993
# via feast (setup.py)
-librt==0.7.3 \
- --hash=sha256:020c6db391268bcc8ce75105cb572df8cb659a43fd347366aaa407c366e5117a \
- --hash=sha256:0fa9ac2e49a6bee56e47573a6786cb635e128a7b12a0dc7851090037c0d397a3 \
- --hash=sha256:11ad45122bbed42cfc8b0597450660126ef28fd2d9ae1a219bc5af8406f95678 \
- --hash=sha256:120dd21d46ff875e849f1aae19346223cf15656be489242fe884036b23d39e93 \
- --hash=sha256:14569ac5dd38cfccf0a14597a88038fb16811a6fede25c67b79c6d50fc2c8fdc \
- --hash=sha256:1617bea5ab31266e152871208502ee943cb349c224846928a1173c864261375e \
- --hash=sha256:170cdb8436188347af17bf9cccf3249ba581c933ed56d926497119d4cf730cec \
- --hash=sha256:1975eda520957c6e0eb52d12968dd3609ffb7eef05d4223d097893d6daf1d8a7 \
- --hash=sha256:1fe603877e1865b5fd047a5e40379509a4a60204aa7aa0f72b16f7a41c3f0712 \
- --hash=sha256:24d70810f6e2ea853ff79338001533716b373cc0f63e2a0be5bc96129edb5fb5 \
- --hash=sha256:256793988bff98040de23c57cf36e1f4c2f2dc3dcd17537cdac031d3b681db71 \
- --hash=sha256:25711f364c64cab2c910a0247e90b51421e45dbc8910ceeb4eac97a9e132fc6f \
- --hash=sha256:2682162855a708e3270eba4b92026b93f8257c3e65278b456c77631faf0f4f7a \
- --hash=sha256:2cf9d73499486ce39eebbff5f42452518cc1f88d8b7ea4a711ab32962b176ee2 \
- --hash=sha256:2e40520c37926166c24d0c2e0f3bc3a5f46646c34bdf7b4ea9747c297d6ee809 \
- --hash=sha256:2e980cf1ed1a2420a6424e2ed884629cdead291686f1048810a817de07b5eb18 \
- --hash=sha256:2f03484b54bf4ae80ab2e504a8d99d20d551bfe64a7ec91e218010b467d77093 \
- --hash=sha256:35f1609e3484a649bb80431310ddbec81114cd86648f1d9482bc72a3b86ded2e \
- --hash=sha256:399938edbd3d78339f797d685142dd8a623dfaded023cf451033c85955e4838a \
- --hash=sha256:399bbd7bcc1633c3e356ae274a1deb8781c7bf84d9c7962cc1ae0c6e87837292 \
- --hash=sha256:3ec50cf65235ff5c02c5b747748d9222e564ad48597122a361269dd3aa808798 \
- --hash=sha256:3edbf257c40d21a42615e9e332a6b10a8bacaaf58250aed8552a14a70efd0d65 \
- --hash=sha256:440c788f707c061d237c1e83edf6164ff19f5c0f823a3bf054e88804ebf971ec \
- --hash=sha256:44b3689b040df57f492e02cd4f0bacd1b42c5400e4b8048160c9d5e866de8abe \
- --hash=sha256:4887c29cadbdc50640179e3861c276325ff2986791e6044f73136e6e798ff806 \
- --hash=sha256:5460d99ed30f043595bbdc888f542bad2caeb6226b01c33cda3ae444e8f82d42 \
- --hash=sha256:550fdbfbf5bba6a2960b27376ca76d6aaa2bd4b1a06c4255edd8520c306fcfc0 \
- --hash=sha256:56f2a47beda8409061bc1c865bef2d4bd9ff9255219402c0817e68ab5ad89aed \
- --hash=sha256:572a24fc5958c61431da456a0ef1eeea6b4989d81eeb18b8e5f1f3077592200b \
- --hash=sha256:59cb0470612d21fa1efddfa0dd710756b50d9c7fb6c1236bbf8ef8529331dc70 \
- --hash=sha256:6038ccbd5968325a5d6fd393cf6e00b622a8de545f0994b89dd0f748dcf3e19e \
- --hash=sha256:6488e69d408b492e08bfb68f20c4a899a354b4386a446ecd490baff8d0862720 \
- --hash=sha256:687403cced6a29590e6be6964463835315905221d797bc5c934a98750fe1a9af \
- --hash=sha256:6b407c23f16ccc36614c136251d6b32bf30de7a57f8e782378f1107be008ddb0 \
- --hash=sha256:6b4e7bff1d76dd2b46443078519dc75df1b5e01562345f0bb740cea5266d8218 \
- --hash=sha256:6bdd9adfca615903578d2060ee8a6eb1c24eaf54919ff0ddc820118e5718931b \
- --hash=sha256:6eb9295c730e26b849ed1f4022735f36863eb46b14b6e10604c1c39b8b5efaea \
- --hash=sha256:703456146dc2bf430f7832fd1341adac5c893ec3c1430194fdcefba00012555c \
- --hash=sha256:754a0d09997095ad764ccef050dd5bf26cbf457aab9effcba5890dad081d879e \
- --hash=sha256:7af7785f5edd1f418da09a8cdb9ec84b0213e23d597413e06525340bcce1ea4f \
- --hash=sha256:7b29e97273bd6999e2bfe9fe3531b1f4f64effd28327bced048a33e49b99674a \
- --hash=sha256:7b4f57f7a0c65821c5441d98c47ff7c01d359b1e12328219709bdd97fdd37f90 \
- --hash=sha256:8837d5a52a2d7aa9f4c3220a8484013aed1d8ad75240d9a75ede63709ef89055 \
- --hash=sha256:8ccadf260bb46a61b9c7e89e2218f6efea9f3eeaaab4e3d1f58571890e54858e \
- --hash=sha256:8d8cf653e798ee4c4e654062b633db36984a1572f68c3aa25e364a0ddfbbb910 \
- --hash=sha256:93b2a1f325fefa1482516ced160c8c7b4b8d53226763fa6c93d151fa25164207 \
- --hash=sha256:9f0e0927efe87cd42ad600628e595a1a0aa1c64f6d0b55f7e6059079a428641a \
- --hash=sha256:a59a69deeb458c858b8fea6acf9e2acd5d755d76cd81a655256bc65c20dfff5b \
- --hash=sha256:a9f9b661f82693eb56beb0605156c7fca57f535704ab91837405913417d6990b \
- --hash=sha256:abfc57cab3c53c4546aee31859ef06753bfc136c9d208129bad23e2eca39155a \
- --hash=sha256:aca73d70c3f553552ba9133d4a09e767dcfeee352d8d8d3eb3f77e38a3beb3ed \
- --hash=sha256:adeaa886d607fb02563c1f625cf2ee58778a2567c0c109378da8f17ec3076ad7 \
- --hash=sha256:b278a9248a4e3260fee3db7613772ca9ab6763a129d6d6f29555e2f9b168216d \
- --hash=sha256:b7c1239b64b70be7759554ad1a86288220bbb04d68518b527783c4ad3fb4f80b \
- --hash=sha256:bf8c7735fbfc0754111f00edda35cf9e98a8d478de6c47b04eaa9cef4300eaa7 \
- --hash=sha256:c634a0a6db395fdaba0361aa78395597ee72c3aad651b9a307a3a7eaf5efd67e \
- --hash=sha256:cad9971881e4fec00d96af7eaf4b63aa7a595696fc221808b0d3ce7ca9743258 \
- --hash=sha256:cbdb3f337c88b43c3b49ca377731912c101178be91cb5071aac48faa898e6f8e \
- --hash=sha256:cd8551aa21df6c60baa2624fd086ae7486bdde00c44097b32e1d1b1966e365e0 \
- --hash=sha256:d09f677693328503c9e492e33e9601464297c01f9ebd966ea8fc5308f3069bfd \
- --hash=sha256:d376a35c6561e81d2590506804b428fc1075fcc6298fc5bb49b771534c0ba010 \
- --hash=sha256:d39079379a9a28e74f4d57dc6357fa310a1977b51ff12239d7271ec7e71d67f5 \
- --hash=sha256:d86f94743a11873317094326456b23f8a5788bad9161fd2f0e52088c33564620 \
- --hash=sha256:d91e60ac44bbe3a77a67af4a4c13114cbe9f6d540337ce22f2c9eaf7454ca71f \
- --hash=sha256:d9883b2d819ce83f87ba82a746c81d14ada78784db431e57cc9719179847376e \
- --hash=sha256:e094e445c37c57e9ec612847812c301840239d34ccc5d153a982fa9814478c60 \
- --hash=sha256:e19acfde38cb532a560b98f473adc741c941b7a9bc90f7294bc273d08becb58b \
- --hash=sha256:e32d43610dff472eab939f4d7fbdd240d1667794192690433672ae22d7af8445 \
- --hash=sha256:ed028fc3d41adda916320712838aec289956c89b4f0a361ceadf83a53b4c047a \
- --hash=sha256:ef59c938f72bdbc6ab52dc50f81d0637fde0f194b02d636987cea2ab30f8f55a \
- --hash=sha256:f3d4801db8354436fd3936531e7f0e4feb411f62433a6b6cb32bb416e20b529f \
- --hash=sha256:f57aca20e637750a2c18d979f7096e2c2033cc40cf7ed201494318de1182f135 \
- --hash=sha256:f9da128d0edf990cf0d2ca011b02cd6f639e79286774bd5b0351245cbb5a6e51 \
- --hash=sha256:fbd7351d43b80d9c64c3cfcb50008f786cc82cba0450e8599fdd64f264320bd3 \
- --hash=sha256:fcb72249ac4ea81a7baefcbff74df7029c3cb1cf01a711113fa052d563639c9c \
- --hash=sha256:ff21c554304e8226bf80c3a7754be27c6c3549a9fec563a03c06ee8f494da8fc
+librt==0.7.5 \
+ --hash=sha256:060bde69c3604f694bd8ae21a780fe8be46bb3dbb863642e8dfc75c931ca8eee \
+ --hash=sha256:08153ea537609d11f774d2bfe84af39d50d5c9ca3a4d061d946e0c9d8bce04a1 \
+ --hash=sha256:0b4791202296ad51ac09a3ff58eb49d9da8e3a4009167a6d76ac418a974e5fd4 \
+ --hash=sha256:0b7f080ba30601dfa3e3deed3160352273e1b9bc92e652f51103c3e9298f7899 \
+ --hash=sha256:0e2bf8f91093fac43e3eaebacf777f12fd539dce9ec5af3efc6d8424e96ccd49 \
+ --hash=sha256:118716de5ad6726332db1801bc90fa6d94194cd2e07c1a7822cebf12c496714d \
+ --hash=sha256:168e04663e126416ba712114050f413ac306759a1791d87b7c11d4428ba75760 \
+ --hash=sha256:191cbd42660446d67cf7a95ac7bfa60f49b8b3b0417c64f216284a1d86fc9335 \
+ --hash=sha256:263f4fae9eba277513357c871275b18d14de93fd49bf5e43dc60a97b81ad5eb8 \
+ --hash=sha256:265729b551a2dd329cc47b323a182fb7961af42abf21e913c9dd7d3331b2f3c2 \
+ --hash=sha256:26b46620e1e0e45af510d9848ea0915e7040605dd2ae94ebefb6c962cbb6f7ec \
+ --hash=sha256:29c8d2fae11d4379ea207ba7fc69d43237e42cf8a9f90ec6e05993687e6d648b \
+ --hash=sha256:2fcbf2e135c11f721193aa5f42ba112bb1046afafbffd407cbc81d8d735c74d0 \
+ --hash=sha256:39183abee670bc37b85f11e86c44a9cad1ed6efa48b580083e89ecee13dd9717 \
+ --hash=sha256:3919c9407faeeee35430ae135e3a78acd4ecaaaa73767529e2c15ca1d73ba325 \
+ --hash=sha256:3c98a8d0ac9e2a7cb8ff8c53e5d6e8d82bfb2839abf144fdeaaa832f2a12aa45 \
+ --hash=sha256:3dd58f7ce20360c6ce0c04f7bd9081c7f9c19fc6129a3c705d0c5a35439f201d \
+ --hash=sha256:46aa91813c267c3f60db75d56419b42c0c0b9748ec2c568a0e3588e543fb4233 \
+ --hash=sha256:49c596cd18e90e58b7caa4d7ca7606049c1802125fcff96b8af73fa5c3870e4d \
+ --hash=sha256:532ddc6a8a6ca341b1cd7f4d999043e4c71a212b26fe9fd2e7f1e8bb4e873544 \
+ --hash=sha256:54d2aef0b0f5056f130981ad45081b278602ff3657fe16c88529f5058038e802 \
+ --hash=sha256:553dc58987d1d853adda8aeadf4db8e29749f0b11877afcc429a9ad892818ae2 \
+ --hash=sha256:584cb3e605ec45ba350962cec853e17be0a25a772f21f09f1e422f7044ae2a7d \
+ --hash=sha256:5cd3afd71e9bc146203b6c8141921e738364158d4aa7cdb9a874e2505163770f \
+ --hash=sha256:63055d3dda433ebb314c9f1819942f16a19203c454508fdb2d167613f7017169 \
+ --hash=sha256:654fdc971c76348a73af5240d8e2529265b9a7ba6321e38dd5bae7b0d4ab3abe \
+ --hash=sha256:6b7b58913d475911f6f33e8082f19dd9b120c4f4a5c911d07e395d67b81c6982 \
+ --hash=sha256:6e860909fea75baef941ee6436e0453612505883b9d0d87924d4fda27865b9a2 \
+ --hash=sha256:730be847daad773a3c898943cf67fb9845a3961d06fb79672ceb0a8cd8624cfa \
+ --hash=sha256:732e0aa0385b59a1b2545159e781c792cc58ce9c134249233a7c7250a44684c4 \
+ --hash=sha256:75965c1f4efb7234ff52a58b729d245a21e87e4b6a26a0ec08052f02b16274e4 \
+ --hash=sha256:7a488908a470451338607650f1c064175094aedebf4a4fa37890682e30ce0b57 \
+ --hash=sha256:81056e01bba1394f1d92904ec61a4078f66df785316275edbaf51d90da8c6e26 \
+ --hash=sha256:82f3f088482e2229387eadf8215c03f7726d56f69cce8c0c40f0795aebc9b361 \
+ --hash=sha256:84d4a6b9efd6124f728558a18e79e7cc5c5d4efc09b2b846c910de7e564f5bad \
+ --hash=sha256:85f485b7471571e99fab4f44eeb327dc0e1f814ada575f3fa85e698417d8a54e \
+ --hash=sha256:8a3cfb15961e7333ea6ef033dc574af75153b5c230d5ad25fbcd55198f21e0cf \
+ --hash=sha256:8bb7883c1e94ceb87c2bf81385266f032da09cd040e804cc002f2c9d6b842e2f \
+ --hash=sha256:8dcae24de1bc9da93aa689cb6313c70e776d7cea2fcf26b9b6160fedfe6bd9af \
+ --hash=sha256:9937574e6d842f359b8585903d04f5b4ab62277a091a93e02058158074dc52f2 \
+ --hash=sha256:9bbb8facc5375476d392990dd6a71f97e4cb42e2ac66f32e860f6e47299d5e89 \
+ --hash=sha256:9c08527055fbb03c641c15bbc5b79dd2942fb6a3bd8dabf141dd7e97eeea4904 \
+ --hash=sha256:9cffa3ef0af29687455161cb446eff059bf27607f95163d6a37e27bcb37180f6 \
+ --hash=sha256:9f85f9b5db87b0f52e53c68ad2a0c5a53e00afa439bd54a1723742a2b1021276 \
+ --hash=sha256:a82d5a0ee43aeae2116d7292c77cc8038f4841830ade8aa922e098933b468b9e \
+ --hash=sha256:a9eacbf983319b26b5f340a2e0cd47ac1ee4725a7f3a72fd0f15063c934b69d6 \
+ --hash=sha256:ab4b0d3bee6f6ff7017e18e576ac7e41a06697d8dea4b8f3ab9e0c8e1300c409 \
+ --hash=sha256:af69d9e159575e877c7546d1ee817b4ae089aa221dd1117e20c24ad8dc8659c7 \
+ --hash=sha256:b1795c4b2789b458fa290059062c2f5a297ddb28c31e704d27e161386469691a \
+ --hash=sha256:b591c094afd0ffda820e931148c9e48dc31a556dc5b2b9b3cc552fa710d858e4 \
+ --hash=sha256:b8e0fd344bad57026a8f4ccfaf406486c2fc991838050c2fef156170edc3b775 \
+ --hash=sha256:ba1077c562a046208a2dc6366227b3eeae8f2c2ab4b41eaf4fd2fa28cece4203 \
+ --hash=sha256:bb41f04046b4f22b1e7ba5ef513402cd2e3477ec610e5f92d38fe2bba383d419 \
+ --hash=sha256:c039bbf79a9a2498404d1ae7e29a6c175e63678d7a54013a97397c40aee026c5 \
+ --hash=sha256:c566a4672564c5d54d8ab65cdaae5a87ee14c1564c1a2ddc7a9f5811c750f023 \
+ --hash=sha256:cda8b025875946ffff5a9a7590bf9acde3eb02cb6200f06a2d3e691ef3d9955b \
+ --hash=sha256:cdb001a1a0e4f41e613bca2c0fc147fc8a7396f53fc94201cbfd8ec7cd69ca4b \
+ --hash=sha256:cdde31759bd8888f3ef0eebda80394a48961328a17c264dce8cc35f4b9cde35d \
+ --hash=sha256:d2cc7d187e8c6e9b7bdbefa9697ce897a704ea7a7ce844f2b4e0e2aa07ae51d3 \
+ --hash=sha256:d7aa33153a5bb0bac783d2c57885889b1162823384e8313d47800a0e10d0070e \
+ --hash=sha256:d7c72c8756eeb3aefb1b9e3dac7c37a4a25db63640cac0ab6fc18e91a0edf05a \
+ --hash=sha256:dd810f2d39c526c42ea205e0addad5dc08ef853c625387806a29d07f9d150d9b \
+ --hash=sha256:ddc0ab9dbc5f9ceaf2bf7a367bf01f2697660e908f6534800e88f43590b271db \
+ --hash=sha256:ddc4a16207f88f9597b397fc1f60781266d13b13de922ff61c206547a29e4bbd \
+ --hash=sha256:de4221a1181fa9c8c4b5f35506ed6f298948f44003d84d2a8b9885d7e01e6cfa \
+ --hash=sha256:df2e210400b28e50994477ebf82f055698c79797b6ee47a1669d383ca33263e1 \
+ --hash=sha256:df3146d52465b3b6397d25d513f428cb421c18df65b7378667bb5f1e3cc45805 \
+ --hash=sha256:e47fc52602ffc374e69bf1b76536dc99f7f6dd876bd786c8213eaa3598be030a \
+ --hash=sha256:e9e9c988b5ffde7be02180f864cbd17c0b0c1231c235748912ab2afa05789c25 \
+ --hash=sha256:ea1b60b86595a5dc1f57b44a801a1c4d8209c0a69518391d349973a4491408e6 \
+ --hash=sha256:edf6b465306215b19dbe6c3fb63cf374a8f3e1ad77f3b4c16544b83033bbb67b \
+ --hash=sha256:f02c4337bf271c4f06637f5ff254fad2238c0b8e32a3a480ebb2fc5e26f754a5 \
+ --hash=sha256:f7f51ffe59f4556243d3cc82d827bde74765f594fa3ceb80ec4de0c13ccd3416 \
+ --hash=sha256:f952e1a78c480edee8fb43aa2bf2e84dcd46c917d44f8065b883079d3893e8fc \
+ --hash=sha256:fb565b4219abc8ea2402e61c7ba648a62903831059ed3564fa1245cc245d58d7 \
+ --hash=sha256:fee15c2a190ef389f14928135c6fb2d25cd3fdb7887bfd9a7b444bbdc8c06b96
# via mypy
locket==1.0.0 \
--hash=sha256:5c0d4c052a8bbbf750e056a8e65ccd309086f4f0f18a2eac306a8dfa4112a632 \
@@ -1271,9 +1271,9 @@ markupsafe==3.0.3 \
--hash=sha256:f9e130248f4462aaa8e2552d547f36ddadbeaa573879158d721bbd33dfe4743a \
--hash=sha256:fed51ac40f757d41b7c48425901843666a6677e3e8eb0abcff09e4ba6e664f50
# via jinja2
-mcp==1.23.3 \
- --hash=sha256:32768af4b46a1b4f7df34e2bfdf5c6011e7b63d7f1b0e321d0fdef4cd6082031 \
- --hash=sha256:b3b0da2cc949950ce1259c7bfc1b081905a51916fcd7c8182125b85e70825201
+mcp==1.25.0 \
+ --hash=sha256:56310361ebf0364e2d438e5b45f7668cbb124e158bb358333cd06e49e83a6802 \
+ --hash=sha256:b37c38144a666add0862614cc79ec276e97d72aa8ca26d622818d4e278b9721a
# via fastapi-mcp
mdurl==0.1.2 \
--hash=sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8 \
@@ -1561,125 +1561,123 @@ multidict==6.7.0 \
# aiobotocore
# aiohttp
# yarl
-mypy==1.19.0 \
- --hash=sha256:0c01c99d626380752e527d5ce8e69ffbba2046eb8a060db0329690849cf9b6f9 \
- --hash=sha256:0dde5cb375cb94deff0d4b548b993bec52859d1651e073d63a1386d392a95495 \
- --hash=sha256:0e3c3d1e1d62e678c339e7ade72746a9e0325de42cd2cccc51616c7b2ed1a018 \
- --hash=sha256:0ea4fd21bb48f0da49e6d3b37ef6bd7e8228b9fe41bbf4d80d9364d11adbd43c \
- --hash=sha256:0fb3115cb8fa7c5f887c8a8d81ccdcb94cff334684980d847e5a62e926910e1d \
- --hash=sha256:11f7254c15ab3f8ed68f8e8f5cbe88757848df793e31c36aaa4d4f9783fd08ab \
- --hash=sha256:120cffe120cca5c23c03c77f84abc0c14c5d2e03736f6c312480020082f1994b \
- --hash=sha256:16f76ff3f3fd8137aadf593cb4607d82634fca675e8211ad75c43d86033ee6c6 \
- --hash=sha256:1cf9c59398db1c68a134b0b5354a09a1e124523f00bacd68e553b8bd16ff3299 \
- --hash=sha256:318ba74f75899b0e78b847d8c50821e4c9637c79d9a59680fc1259f29338cb3e \
- --hash=sha256:3210d87b30e6af9c8faed61be2642fcbe60ef77cec64fa1ef810a630a4cf671c \
- --hash=sha256:34ec1ac66d31644f194b7c163d7f8b8434f1b49719d403a5d26c87fff7e913f7 \
- --hash=sha256:37af5166f9475872034b56c5efdcf65ee25394e9e1d172907b84577120714364 \
- --hash=sha256:3ad925b14a0bb99821ff6f734553294aa6a3440a8cb082fe1f5b84dfb662afb1 \
- --hash=sha256:510c014b722308c9bd377993bcbf9a07d7e0692e5fa8fc70e639c1eb19fc6bee \
- --hash=sha256:6016c52ab209919b46169651b362068f632efcd5eb8ef9d1735f6f86da7853b2 \
- --hash=sha256:6148ede033982a8c5ca1143de34c71836a09f105068aaa8b7d5edab2b053e6c8 \
- --hash=sha256:63ea6a00e4bd6822adbfc75b02ab3653a17c02c4347f5bb0cf1d5b9df3a05835 \
- --hash=sha256:7686ed65dbabd24d20066f3115018d2dce030d8fa9db01aa9f0a59b6813e9f9e \
- --hash=sha256:7a500ab5c444268a70565e374fc803972bfd1f09545b13418a5174e29883dab7 \
- --hash=sha256:8f44f2ae3c58421ee05fe609160343c25f70e3967f6e32792b5a78006a9d850f \
- --hash=sha256:a18d8abdda14035c5718acb748faec09571432811af129bf0d9e7b2d6699bf18 \
- --hash=sha256:a31e4c28e8ddb042c84c5e977e28a21195d086aaffaf08b016b78e19c9ef8106 \
- --hash=sha256:a9ac09e52bb0f7fb912f5d2a783345c72441a08ef56ce3e17c1752af36340a39 \
- --hash=sha256:b9d491295825182fba01b6ffe2c6fe4e5a49dbf4e2bb4d1217b6ced3b4797bc6 \
- --hash=sha256:c14a98bc63fd867530e8ec82f217dae29d0550c86e70debc9667fff1ec83284e \
- --hash=sha256:c3385246593ac2b97f155a0e9639be906e73534630f663747c71908dfbf26134 \
- --hash=sha256:cabbee74f29aa9cd3b444ec2f1e4fa5a9d0d746ce7567a6a609e224429781f53 \
- --hash=sha256:cb64b0ba5980466a0f3f9990d1c582bcab8db12e29815ecb57f1408d99b4bff7 \
- --hash=sha256:cf7d84f497f78b682edd407f14a7b6e1a2212b433eedb054e2081380b7395aa3 \
- --hash=sha256:e2c1101ab41d01303103ab6ef82cbbfedb81c1a060c868fa7cc013d573d37ab5 \
- --hash=sha256:f188dcf16483b3e59f9278c4ed939ec0254aa8a60e8fc100648d9ab5ee95a431 \
- --hash=sha256:f2e36bed3c6d9b5f35d28b63ca4b727cb0228e480826ffc8953d1892ddc8999d \
- --hash=sha256:f3e19e3b897562276bb331074d64c076dbdd3e79213f36eed4e592272dabd760 \
- --hash=sha256:f6b874ca77f733222641e5c46e4711648c4037ea13646fd0cdc814c2eaec2528 \
- --hash=sha256:f75e60aca3723a23511948539b0d7ed514dda194bc3755eae0bfc7a6b4887aa7 \
- --hash=sha256:fc51a5b864f73a3a182584b1ac75c404396a17eced54341629d8bdcb644a5bba \
- --hash=sha256:fd4a985b2e32f23bead72e2fb4bbe5d6aceee176be471243bd831d5b2644672d
+mypy==1.19.1 \
+ --hash=sha256:016f2246209095e8eda7538944daa1d60e1e8134d98983b9fc1e92c1fc0cb8dd \
+ --hash=sha256:022ea7279374af1a5d78dfcab853fe6a536eebfda4b59deab53cd21f6cd9f00b \
+ --hash=sha256:06e6170bd5836770e8104c8fdd58e5e725cfeb309f0a6c681a811f557e97eac1 \
+ --hash=sha256:19d88bb05303fe63f71dd2c6270daca27cb9401c4ca8255fe50d1d920e0eb9ba \
+ --hash=sha256:21761006a7f497cb0d4de3d8ef4ca70532256688b0523eee02baf9eec895e27b \
+ --hash=sha256:28902ee51f12e0f19e1e16fbe2f8f06b6637f482c459dd393efddd0ec7f82045 \
+ --hash=sha256:2899753e2f61e571b3971747e302d5f420c3fd09650e1951e99f823bc3089dac \
+ --hash=sha256:2abb24cf3f17864770d18d673c85235ba52456b36a06b6afc1e07c1fdcd3d0e6 \
+ --hash=sha256:34c81968774648ab5ac09c29a375fdede03ba253f8f8287847bd480782f73a6a \
+ --hash=sha256:409088884802d511ee52ca067707b90c883426bd95514e8cfda8281dc2effe24 \
+ --hash=sha256:481daf36a4c443332e2ae9c137dfee878fcea781a2e3f895d54bd3002a900957 \
+ --hash=sha256:4b84a7a18f41e167f7995200a1d07a4a6810e89d29859df936f1c3923d263042 \
+ --hash=sha256:4f28f99c824ecebcdaa2e55d82953e38ff60ee5ec938476796636b86afa3956e \
+ --hash=sha256:5f05aa3d375b385734388e844bc01733bd33c644ab48e9684faa54e5389775ec \
+ --hash=sha256:7bcfc336a03a1aaa26dfce9fff3e287a3ba99872a157561cbfcebe67c13308e3 \
+ --hash=sha256:804bd67b8054a85447c8954215a906d6eff9cabeabe493fb6334b24f4bfff718 \
+ --hash=sha256:8bb5c6f6d043655e055be9b542aa5f3bdd30e4f3589163e85f93f3640060509f \
+ --hash=sha256:a009ffa5a621762d0c926a078c2d639104becab69e79538a494bcccb62cc0331 \
+ --hash=sha256:a8174a03289288c1f6c46d55cef02379b478bfbc8e358e02047487cad44c6ca1 \
+ --hash=sha256:ab43590f9cd5108f41aacf9fca31841142c786827a74ab7cc8a2eacb634e09a1 \
+ --hash=sha256:b10e7c2cd7870ba4ad9b2d8a6102eb5ffc1f16ca35e3de6bfa390c1113029d13 \
+ --hash=sha256:b13cfdd6c87fc3efb69ea4ec18ef79c74c3f98b4e5498ca9b85ab3b2c2329a67 \
+ --hash=sha256:b64d987153888790bcdb03a6473d321820597ab8dd9243b27a92153c4fa50fd2 \
+ --hash=sha256:b7951a701c07ea584c4fe327834b92a30825514c868b1f69c30445093fdd9d5a \
+ --hash=sha256:bdb12f69bcc02700c2b47e070238f42cb87f18c0bc1fc4cdb4fb2bc5fd7a3b8b \
+ --hash=sha256:c35d298c2c4bba75feb2195655dfea8124d855dfd7343bf8b8c055421eaf0cf8 \
+ --hash=sha256:c608937067d2fc5a4dd1a5ce92fd9e1398691b8c5d012d66e1ddd430e9244376 \
+ --hash=sha256:c9a6538e0415310aad77cb94004ca6482330fece18036b5f360b62c45814c4ef \
+ --hash=sha256:d8dfc6ab58ca7dda47d9237349157500468e404b17213d44fc1cb77bce532288 \
+ --hash=sha256:da4869fc5e7f62a88f3fe0b5c919d1d9f7ea3cef92d3689de2823fd27e40aa75 \
+ --hash=sha256:de759aafbae8763283b2ee5869c7255391fbc4de3ff171f8f030b5ec48381b74 \
+ --hash=sha256:e3157c7594ff2ef1634ee058aafc56a82db665c9438fd41b390f3bde1ab12250 \
+ --hash=sha256:e3f276d8493c3c97930e354b2595a44a21348b320d859fb4a2b9f66da9ed27ab \
+ --hash=sha256:ee4c11e460685c3e0c64a4c5de82ae143622410950d6be863303a1c4ba0e36d6 \
+ --hash=sha256:f1235f5ea01b7db5468d53ece6aaddf1ad0b88d9e7462b86ef96fe04995d7247 \
+ --hash=sha256:f7cee03c9a2e2ee26ec07479f38ea9c884e301d42c6d43a19d20fb014e3ba925 \
+ --hash=sha256:f859fb09d9583a985be9a493d5cfc5515b56b08f7447759a0c5deaf68d80506e \
+ --hash=sha256:ffcebe56eb09ff0c0885e750036a095e23793ba6c2e894e7e63f6d89ad51f22e
# via sqlalchemy
mypy-extensions==1.1.0 \
--hash=sha256:1be4cccdb0f2482337c4743e60421de3a356cd97508abadd57d47403e94f5505 \
--hash=sha256:52e68efc3284861e772bbcd66823fde5ae21fd2fdb51c62a211403730b916558
# via mypy
-numpy==2.3.5 \
- --hash=sha256:00dc4e846108a382c5869e77c6ed514394bdeb3403461d25a829711041217d5b \
- --hash=sha256:0472f11f6ec23a74a906a00b48a4dcf3849209696dff7c189714511268d103ae \
- --hash=sha256:04822c00b5fd0323c8166d66c701dc31b7fbd252c100acd708c48f763968d6a3 \
- --hash=sha256:052e8c42e0c49d2575621c158934920524f6c5da05a1d3b9bab5d8e259e045f0 \
- --hash=sha256:09a1bea522b25109bf8e6f3027bd810f7c1085c64a0c7ce050c1676ad0ba010b \
- --hash=sha256:0cd00b7b36e35398fa2d16af7b907b65304ef8bb4817a550e06e5012929830fa \
- --hash=sha256:0d8163f43acde9a73c2a33605353a4f1bc4798745a8b1d73183b28e5b435ae28 \
- --hash=sha256:1062fde1dcf469571705945b0f221b73928f34a20c904ffb45db101907c3454e \
- --hash=sha256:11e06aa0af8c0f05104d56450d6093ee639e15f24ecf62d417329d06e522e017 \
- --hash=sha256:17531366a2e3a9e30762c000f2c43a9aaa05728712e25c11ce1dbe700c53ad41 \
- --hash=sha256:1978155dd49972084bd6ef388d66ab70f0c323ddee6f693d539376498720fb7e \
- --hash=sha256:1ed1ec893cff7040a02c8aa1c8611b94d395590d553f6b53629a4461dc7f7b63 \
- --hash=sha256:2dcd0808a421a482a080f89859a18beb0b3d1e905b81e617a188bd80422d62e9 \
- --hash=sha256:2e2eb32ddb9ccb817d620ac1d8dae7c3f641c1e5f55f531a33e8ab97960a75b8 \
- --hash=sha256:2feae0d2c91d46e59fcd62784a3a83b3fb677fead592ce51b5a6fbb4f95965ff \
- --hash=sha256:3095bdb8dd297e5920b010e96134ed91d852d81d490e787beca7e35ae1d89cf7 \
- --hash=sha256:30bc11310e8153ca664b14c5f1b73e94bd0503681fcf136a163de856f3a50139 \
- --hash=sha256:3101e5177d114a593d79dd79658650fe28b5a0d8abeb8ce6f437c0e6df5be1a4 \
- --hash=sha256:396084a36abdb603546b119d96528c2f6263921c50df3c8fd7cb28873a237748 \
- --hash=sha256:3997b5b3c9a771e157f9aae01dd579ee35ad7109be18db0e85dbdbe1de06e952 \
- --hash=sha256:414802f3b97f3c1eef41e530aaba3b3c1620649871d8cb38c6eaff034c2e16bd \
- --hash=sha256:51c1e14eb1e154ebd80e860722f9e6ed6ec89714ad2db2d3aa33c31d7c12179b \
- --hash=sha256:51c55fe3451421f3a6ef9a9c1439e82101c57a2c9eab9feb196a62b1a10b58ce \
- --hash=sha256:5ee6609ac3604fa7780e30a03e5e241a7956f8e2fcfe547d51e3afa5247ac47f \
- --hash=sha256:612a95a17655e213502f60cfb9bf9408efdc9eb1d5f50535cc6eb365d11b42b5 \
- --hash=sha256:6203fdf9f3dc5bdaed7319ad8698e685c7a3be10819f41d32a0723e611733b42 \
- --hash=sha256:63c0e9e7eea69588479ebf4a8a270d5ac22763cc5854e9a7eae952a3908103f7 \
- --hash=sha256:66f85ce62c70b843bab1fb14a05d5737741e74e28c7b8b5a064de10142fad248 \
- --hash=sha256:6cf9b429b21df6b99f4dee7a1218b8b7ffbbe7df8764dc0bd60ce8a0708fed1e \
- --hash=sha256:70b37199913c1bd300ff6e2693316c6f869c7ee16378faf10e4f5e3275b299c3 \
- --hash=sha256:727fd05b57df37dc0bcf1a27767a3d9a78cbbc92822445f32cc3436ba797337b \
- --hash=sha256:74ae7b798248fe62021dbf3c914245ad45d1a6b0cb4a29ecb4b31d0bfbc4cc3e \
- --hash=sha256:784db1dcdab56bf0517743e746dfb0f885fc68d948aba86eeec2cba234bdf1c0 \
- --hash=sha256:86945f2ee6d10cdfd67bcb4069c1662dd711f7e2a4343db5cecec06b87cf31aa \
- --hash=sha256:86d835afea1eaa143012a2d7a3f45a3adce2d7adc8b4961f0b362214d800846a \
- --hash=sha256:872a5cf366aec6bb1147336480fef14c9164b154aeb6542327de4970282cd2f5 \
- --hash=sha256:8b973c57ff8e184109db042c842423ff4f60446239bd585a5131cc47f06f789d \
- --hash=sha256:8cba086a43d54ca804ce711b2a940b16e452807acebe7852ff327f1ecd49b0d4 \
- --hash=sha256:8f7f0e05112916223d3f438f293abf0727e1181b5983f413dfa2fefc4098245c \
- --hash=sha256:900218e456384ea676e24ea6a0417f030a3b07306d29d7ad843957b40a9d8d52 \
- --hash=sha256:93eebbcf1aafdf7e2ddd44c2923e2672e1010bddc014138b229e49725b4d6be5 \
- --hash=sha256:9c75442b2209b8470d6d5d8b1c25714270686f14c749028d2199c54e29f20b4d \
- --hash=sha256:9ee2197ef8c4f0dfe405d835f3b6a14f5fee7782b5de51ba06fb65fc9b36e9f1 \
- --hash=sha256:a414504bef8945eae5f2d7cb7be2d4af77c5d1cb5e20b296c2c25b61dff2900c \
- --hash=sha256:a4b9159734b326535f4dd01d947f919c6eefd2d9827466a696c44ced82dfbc18 \
- --hash=sha256:a80afd79f45f3c4a7d341f13acbe058d1ca8ac017c165d3fa0d3de6bc1a079d7 \
- --hash=sha256:aa5bc7c5d59d831d9773d1170acac7893ce3a5e130540605770ade83280e7188 \
- --hash=sha256:acfd89508504a19ed06ef963ad544ec6664518c863436306153e13e94605c218 \
- --hash=sha256:aeffcab3d4b43712bb7a60b65f6044d444e75e563ff6180af8f98dd4b905dfd2 \
- --hash=sha256:afaffc4393205524af9dfa400fa250143a6c3bc646c08c9f5e25a9f4b4d6a903 \
- --hash=sha256:b0c7088a73aef3d687c4deef8452a3ac7c1be4e29ed8bf3b366c8111128ac60c \
- --hash=sha256:b46b4ec24f7293f23adcd2d146960559aaf8020213de8ad1909dba6c013bf89c \
- --hash=sha256:b501b5fa195cc9e24fe102f21ec0a44dffc231d2af79950b451e0d99cea02234 \
- --hash=sha256:bf06bc2af43fa8d32d30fae16ad965663e966b1a3202ed407b84c989c3221e82 \
- --hash=sha256:c804e3a5aba5460c73955c955bdbd5c08c354954e9270a2c1565f62e866bdc39 \
- --hash=sha256:c8a9958e88b65c3b27e22ca2a076311636850b612d6bbfb76e8d156aacde2aaf \
- --hash=sha256:cc0a57f895b96ec78969c34f682c602bf8da1a0270b09bc65673df2e7638ec20 \
- --hash=sha256:cc8920d2ec5fa99875b670bb86ddeb21e295cb07aa331810d9e486e0b969d946 \
- --hash=sha256:ccc933afd4d20aad3c00bcef049cb40049f7f196e0397f1109dba6fed63267b0 \
- --hash=sha256:ce581db493ea1a96c0556360ede6607496e8bf9b3a8efa66e06477267bc831e9 \
- --hash=sha256:d0f23b44f57077c1ede8c5f26b30f706498b4862d3ff0a7298b8411dd2f043ff \
- --hash=sha256:d21644de1b609825ede2f48be98dfde4656aefc713654eeee280e37cadc4e0ad \
- --hash=sha256:d6889ec4ec662a1a37eb4b4fb26b6100841804dac55bd9df579e326cdc146227 \
- --hash=sha256:de5672f4a7b200c15a4127042170a694d4df43c992948f5e1af57f0174beed10 \
- --hash=sha256:e6a0bc88393d65807d751a614207b7129a310ca4fe76a74e5c7da5fa5671417e \
- --hash=sha256:ed89927b86296067b4f81f108a2271d8926467a8868e554eaf370fc27fa3ccaf \
- --hash=sha256:ee3888d9ff7c14604052b2ca5535a30216aa0a58e948cdd3eeb8d3415f638769 \
- --hash=sha256:f0963b55cdd70fad460fa4c1341f12f976bb26cb66021a5580329bd498988310 \
- --hash=sha256:f16417ec91f12f814b10bafe79ef77e70113a2f5f7018640e7425ff979253425 \
- --hash=sha256:f28620fe26bee16243be2b7b874da327312240a7cdc38b769a697578d2100013 \
- --hash=sha256:f4255143f5160d0de972d28c8f9665d882b5f61309d8362fdd3e103cf7bf010c \
- --hash=sha256:ffac52f28a7849ad7576293c0cb7b9f08304e8f7d738a8cb8a90ec4c55a998eb \
- --hash=sha256:ffe22d2b05504f786c867c8395de703937f934272eb67586817b46188b4ded6d \
- --hash=sha256:fffe29a1ef00883599d1dc2c51aa2e5d80afe49523c261a74933df395c15c520
+numpy==2.4.0 \
+ --hash=sha256:009bd0ea12d3c784b6639a8457537016ce5172109e585338e11334f6a7bb88ee \
+ --hash=sha256:02a2038eb27f9443a8b266a66911e926566b5a6ffd1a689b588f7f35b81e7dc3 \
+ --hash=sha256:0804a8e4ab070d1d35496e65ffd3cf8114c136a2b81f61dfab0de4b218aacfd5 \
+ --hash=sha256:0feafc9e03128074689183031181fac0897ff169692d8492066e949041096548 \
+ --hash=sha256:1889b3a3f47a7b5bee16bc25a2145bd7cb91897f815ce3499db64c7458b6d91d \
+ --hash=sha256:1d8f9fde5f6dc1b6fc34df8162f3b3079365468703fee7f31d4e0cc8c63baed9 \
+ --hash=sha256:1ee32359fb7543b7b7bd0b2f46294db27e29e7bbdf70541e81b190836cd83ded \
+ --hash=sha256:20c115517513831860c573996e395707aa9fb691eb179200125c250e895fcd93 \
+ --hash=sha256:21555da4ec4a0c942520ead42c3b0dc9477441e085c42b0fbdd6a084869a6f6b \
+ --hash=sha256:23a3e9d1a6f360267e8fbb38ba5db355a6a7e9be71d7fce7ab3125e88bb646c8 \
+ --hash=sha256:2a8b6bb8369abefb8bd1801b054ad50e02b3275c8614dc6e5b0373c305291037 \
+ --hash=sha256:2e284ca13d5a8367e43734148622caf0b261b275673823593e3e3634a6490f83 \
+ --hash=sha256:2f585f52b2baf07ff3356158d9268ea095e221371f1074fadea2f42544d58b4d \
+ --hash=sha256:316b2f2584682318539f0bcaca5a496ce9ca78c88066579ebd11fd06f8e4741e \
+ --hash=sha256:32ed06d0fe9cae27d8fb5f400c63ccee72370599c75e683a6358dd3a4fb50aaf \
+ --hash=sha256:355354388cba60f2132df297e2d53053d4063f79077b67b481d21276d61fc4df \
+ --hash=sha256:35ddc8f4914466e6fc954c76527aa91aa763682a4f6d73249ef20b418fe6effb \
+ --hash=sha256:36667db4d6c1cea79c8930ab72fadfb4060feb4bfe724141cd4bd064d2e5f8ce \
+ --hash=sha256:36cbfb13c152b1c7c184ddac43765db8ad672567e7bafff2cc755a09917ed2e6 \
+ --hash=sha256:39699233bc72dd482da1415dcb06076e32f60eddc796a796c5fb6c5efce94667 \
+ --hash=sha256:39b19251dec4de8ff8496cd0806cbe27bf0684f765abb1f4809554de93785f2d \
+ --hash=sha256:3d857f55e7fdf7c38ab96c4558c95b97d1c685be6b05c249f5fdafcbd6f9899e \
+ --hash=sha256:3de19cfecd1465d0dcf8a5b5ea8b3155b42ed0b639dba4b71e323d74f2a3be5e \
+ --hash=sha256:3f3096405acc48887458bbf9f6814d43785ac7ba2a57ea6442b581dedbc60ce6 \
+ --hash=sha256:40483b2f2d3ba7aad426443767ff5632ec3156ef09742b96913787d13c336471 \
+ --hash=sha256:413aa561266a4be2d06cd2b9665e89d9f54c543f418773076a76adcf2af08bc7 \
+ --hash=sha256:44aba2f0cafd287871a495fb3163408b0bd25bbce135c6f621534a07f4f7875c \
+ --hash=sha256:49ff32b09f5aa0cd30a20c2b39db3e669c845589f2b7fc910365210887e39344 \
+ --hash=sha256:4d1cfce39e511069b11e67cd0bd78ceff31443b7c9e5c04db73c7a19f572967c \
+ --hash=sha256:57c540ed8fb1f05cb997c6761cd56db72395b0d6985e90571ff660452ade4f98 \
+ --hash=sha256:5f48cb3e88fbc294dc90e215d86fbaf1c852c63dbdb6c3a3e63f45c4b57f7344 \
+ --hash=sha256:5fe44e277225fd3dff6882d86d3d447205d43532c3627313d17e754fb3905a0e \
+ --hash=sha256:60e8c196cd82cbbd4f130b5290007e13e6de3eca79f0d4d38014769d96a7c475 \
+ --hash=sha256:65167da969cd1ec3a1df31cb221ca3a19a8aaa25370ecb17d428415e93c1935e \
+ --hash=sha256:680060061adb2d74ce352628cb798cfdec399068aa7f07ba9fb818b2b3305f98 \
+ --hash=sha256:6bbaebf0d11567fa8926215ae731e1d58e6ec28a8a25235b8a47405d301332db \
+ --hash=sha256:6c05483c3136ac4c91b4e81903cb53a8707d316f488124d0398499a4f8e8ef51 \
+ --hash=sha256:6dc8b7e2f4eb184b37655195f421836cfae6f58197b67e3ffc501f1333d993fa \
+ --hash=sha256:6e504f7b16118198f138ef31ba24d985b124c2c469fe8467007cf30fd992f934 \
+ --hash=sha256:74623f2ab5cc3f7c886add4f735d1031a1d2be4a4ae63c0546cfd74e7a31ddf6 \
+ --hash=sha256:77f0d13fa87036d7553bf81f0e1fe3ce68d14c9976c9851744e4d3e91127e95f \
+ --hash=sha256:85eef4cb5625c47ee6425c58a3502555e10f45ee973da878ac8248ad58c136f3 \
+ --hash=sha256:882567b7ae57c1b1a0250208cc21a7976d8cbcc49d5a322e607e6f09c9e0bd53 \
+ --hash=sha256:8b986403023c8f3bf8f487c2e6186afda156174d31c175f747d8934dfddf3479 \
+ --hash=sha256:8cfa5f29a695cb7438965e6c3e8d06e0416060cf0d709c1b1c1653a939bf5c2a \
+ --hash=sha256:8eafe7c36c8430b7794edeab3087dec7bf31d634d92f2af9949434b9d1964cba \
+ --hash=sha256:9198f447e1dc5647d07c9a6bbe2063cc0132728cc7175b39dbc796da5b54920d \
+ --hash=sha256:92190db305a6f48734d3982f2c60fa30d6b5ee9bff10f2887b930d7b40119f4c \
+ --hash=sha256:927ccf5cd17c48f801f4ed43a7e5673a2724bd2171460be3e3894e6e332ef83a \
+ --hash=sha256:98e81648e0b36e325ab67e46b5400a7a6d4a22b8a7c8e8bbfe20e7db7906bf95 \
+ --hash=sha256:9a818668b674047fd88c4cddada7ab8f1c298812783e8328e956b78dc4807f9f \
+ --hash=sha256:a152d86a3ae00ba5f47b3acf3b827509fd0b6cb7d3259665e63dafbad22a75ea \
+ --hash=sha256:a2718c1de8504121714234b6f8241d0019450353276c88b9453c9c3d92e101db \
+ --hash=sha256:a39fb973a726e63223287adc6dafe444ce75af952d711e400f3bf2b36ef55a7b \
+ --hash=sha256:a899699294f28f7be8992853c0c60741f16ff199205e2e6cdca155762cbaa59d \
+ --hash=sha256:a8fdfed3deaf1928fb7667d96e0567cdf58c2b370ea2ee7e586aa383ec2cb346 \
+ --hash=sha256:aabb081ca0ec5d39591fc33018cd4b3f96e1a2dd6756282029986d00a785fba4 \
+ --hash=sha256:b1f5b45829ac1848893f0ddf5cb326110604d6df96cdc255b0bf9edd154104d4 \
+ --hash=sha256:b48e35f4ab6f6a7597c46e301126ceba4c44cd3280e3750f85db48b082624fa4 \
+ --hash=sha256:b54c83f1c0c0f1d748dca0af516062b8829d53d1f0c402be24b4257a9c48ada6 \
+ --hash=sha256:ba0cb30acd3ef11c94dc27fbfba68940652492bc107075e7ffe23057f9425681 \
+ --hash=sha256:bb50ce5fb202a26fd5404620e7ef820ad1ab3558b444cb0b55beb7ef66cd2d63 \
+ --hash=sha256:c95eb6db2884917d86cde0b4d4cf31adf485c8ec36bf8696dd66fa70de96f36b \
+ --hash=sha256:d0ffd9e2e4441c96a9c91ec1783285d80bf835b677853fc2770a89d50c1e48ac \
+ --hash=sha256:d57b5046c120561ba8fa8e4030fbb8b822f3063910fa901ffadf16e2b7128ad6 \
+ --hash=sha256:d9e6a7664ddd9746e20b7325351fe1a8408d0a2bf9c63b5e898290ddc8f09544 \
+ --hash=sha256:dc578891de1db95b2a35001b695451767b580bb45753717498213c5ff3c41d63 \
+ --hash=sha256:e0434aa22c821f44eeb4c650b81c7fbdd8c0122c6c4b5a576a76d5a35625ecd9 \
+ --hash=sha256:e06a922a469cae9a57100864caf4f8a97a1026513793969f8ba5b63137a35d25 \
+ --hash=sha256:e493962256a38f58283de033d8af176c5c91c084ea30f15834f7545451c42059 \
+ --hash=sha256:ecb0019d44f4cdb50b676c5d0cb4b1eae8e15d1ed3d3e6639f986fc92b2ec52c \
+ --hash=sha256:f935c4493eda9069851058fa0d9e39dbf6286be690066509305e52912714dbb2
# via
# feast (setup.py)
# dask
@@ -1770,9 +1768,9 @@ pandas==2.3.3 \
# pandas-gbq
# pymilvus
# snowflake-connector-python
-pandas-gbq==0.31.1 \
- --hash=sha256:a5d6e897917302c50feaca2ed1ce6a284abd8b9139383bf063307aab8d0556d9 \
- --hash=sha256:c59878504adee211cf1c34b22cf94393c59cc953626c61ce76e06c8d25fd146d
+pandas-gbq==0.32.0 \
+ --hash=sha256:249623d574c65e98cf19b7b7ecda97729f4f0a843eae3a0a82d9ef50adcdf4ef \
+ --hash=sha256:28018ff09f2e49ab2b01a11329bd4e562fd65da406030b4a8001a3a4e80a1e34
# via google-cloud-bigquery
parsy==2.2 \
--hash=sha256:5e981613d9d2d8b68012d1dd0afe928967bea2e4eefdb76c2f545af0dd02a9e7 \
@@ -1920,9 +1918,9 @@ propcache==0.4.1 \
# via
# aiohttp
# yarl
-proto-plus==1.26.1 \
- --hash=sha256:13285478c2dcf2abb829db158e1047e2f1e8d63a077d94263c2b88b043c75a66 \
- --hash=sha256:21a515a4c4c0088a773899e23c7bbade3d18f9c66c73edd4c7ee3816bc96a012
+proto-plus==1.27.0 \
+ --hash=sha256:1baa7f81cf0f8acb8bc1f6d085008ba4171eaf669629d1b6d1673b21ed1c0a82 \
+ --hash=sha256:873af56dd0d7e91836aee871e5799e1c6f1bda86ac9a983e0bb9f0c266a568c4
# via
# google-api-core
# google-cloud-bigquery-storage
@@ -1952,26 +1950,28 @@ protobuf==6.33.2 \
# grpcio-status
# proto-plus
# pymilvus
-psutil==7.1.3 \
- --hash=sha256:0005da714eee687b4b8decd3d6cc7c6db36215c9e74e5ad2264b90c3df7d92dc \
- --hash=sha256:1068c303be3a72f8e18e412c5b2a8f6d31750fb152f9cb106b54090296c9d251 \
- --hash=sha256:18349c5c24b06ac5612c0428ec2a0331c26443d259e2a0144a9b24b4395b58fa \
- --hash=sha256:19644c85dcb987e35eeeaefdc3915d059dac7bd1167cdcdbf27e0ce2df0c08c0 \
- --hash=sha256:2bdbcd0e58ca14996a42adf3621a6244f1bb2e2e528886959c72cf1e326677ab \
- --hash=sha256:31d77fcedb7529f27bb3a0472bea9334349f9a04160e8e6e5020f22c59893264 \
- --hash=sha256:3792983e23b69843aea49c8f5b8f115572c5ab64c153bada5270086a2123c7e7 \
- --hash=sha256:3bb428f9f05c1225a558f53e30ccbad9930b11c3fc206836242de1091d3e7dd3 \
- --hash=sha256:56d974e02ca2c8eb4812c3f76c30e28836fffc311d55d979f1465c1feeb2b68b \
- --hash=sha256:6c86281738d77335af7aec228328e944b30930899ea760ecf33a4dba66be5e74 \
- --hash=sha256:8f33a3702e167783a9213db10ad29650ebf383946e91bc77f28a5eb083496bc9 \
- --hash=sha256:95ef04cf2e5ba0ab9eaafc4a11eaae91b44f4ef5541acd2ee91d9108d00d59a7 \
- --hash=sha256:ad81425efc5e75da3f39b3e636293360ad8d0b49bed7df824c79764fb4ba9b8b \
- --hash=sha256:b403da1df4d6d43973dc004d19cee3b848e998ae3154cc8097d139b77156c353 \
- --hash=sha256:bc31fa00f1fbc3c3802141eede66f3a2d51d89716a194bf2cd6fc68310a19880 \
- --hash=sha256:bd0d69cee829226a761e92f28140bec9a5ee9d5b4fb4b0cc589068dbfff559b1 \
- --hash=sha256:c525ffa774fe4496282fb0b1187725793de3e7c6b29e41562733cae9ada151ee \
- --hash=sha256:f39c2c19fe824b47484b96f9692932248a54c43799a84282cfe58d05a6449efd \
- --hash=sha256:fac9cd332c67f4422504297889da5ab7e05fd11e3c4392140f7370f4208ded1f
+psutil==7.2.1 \
+ --hash=sha256:05cc68dbb8c174828624062e73078e7e35406f4ca2d0866c272c2410d8ef06d1 \
+ --hash=sha256:08a2f175e48a898c8eb8eace45ce01777f4785bc744c90aa2cc7f2fa5462a266 \
+ --hash=sha256:0d67c1822c355aa6f7314d92018fb4268a76668a536f133599b91edd48759442 \
+ --hash=sha256:2ceae842a78d1603753561132d5ad1b2f8a7979cb0c283f5b52fb4e6e14b1a79 \
+ --hash=sha256:35630d5af80d5d0d49cfc4d64c1c13838baf6717a13effb35869a5919b854cdf \
+ --hash=sha256:3fce5f92c22b00cdefd1645aa58ab4877a01679e901555067b1bd77039aa589f \
+ --hash=sha256:494c513ccc53225ae23eec7fe6e1482f1b8a44674241b54561f755a898650679 \
+ --hash=sha256:5e38404ca2bb30ed7267a46c02f06ff842e92da3bb8c5bfdadbd35a5722314d8 \
+ --hash=sha256:81442dac7abfc2f4f4385ea9e12ddf5a796721c0f6133260687fec5c3780fa49 \
+ --hash=sha256:923f8653416604e356073e6e0bccbe7c09990acef442def2f5640dd0faa9689f \
+ --hash=sha256:93f3f7b0bb07711b49626e7940d6fe52aa9940ad86e8f7e74842e73189712129 \
+ --hash=sha256:99a4cd17a5fdd1f3d014396502daa70b5ec21bf4ffe38393e152f8e449757d67 \
+ --hash=sha256:ab2b98c9fc19f13f59628d94df5cc4cc4844bc572467d113a8b517d634e362c6 \
+ --hash=sha256:b1b0671619343aa71c20ff9767eced0483e4fc9e1f489d50923738caf6a03c17 \
+ --hash=sha256:b2e953fcfaedcfbc952b44744f22d16575d3aa78eb4f51ae74165b4e96e55f42 \
+ --hash=sha256:ba9f33bb525b14c3ea563b2fd521a84d2fa214ec59e3e6a2858f78d0844dd60d \
+ --hash=sha256:cfbe6b40ca48019a51827f20d830887b3107a74a79b01ceb8cc8de4ccb17b672 \
+ --hash=sha256:d34d2ca888208eea2b5c68186841336a7f5e0b990edec929be909353a202768a \
+ --hash=sha256:ea46c0d060491051d39f0d2cff4f98d5c72b288289f57a21556cc7d504db37fc \
+ --hash=sha256:f7583aec590485b43ca601dd9cea0dcd65bd7bb21d30ef4ddbf4ea6b5ed1bdd3 \
+ --hash=sha256:f78baafb38436d5a128f837fab2d92c276dfb48af01a240b861ae02b2413ada8
# via
# feast (setup.py)
# pandas-gbq
@@ -2233,9 +2233,9 @@ python-dotenv==1.2.1 \
# pydantic-settings
# pymilvus
# uvicorn
-python-multipart==0.0.20 \
- --hash=sha256:8a62d3a8335e06589fe01f2a3e178cdcc632f3fbe0d492ad9ee0ec35aab1f104 \
- --hash=sha256:8dd0cab45b8e23064ae09147625994d090fa46f5b0d1e13af944c331a7fa9d13
+python-multipart==0.0.21 \
+ --hash=sha256:7137ebd4d3bbf70ea1622998f902b97a29434a9e8dc40eb203bbcf7c2a2cba92 \
+ --hash=sha256:cf7a6713e01c87aa35387f4774e812c4361150938d20d232800f75ffcf266090
# via mcp
pytz==2025.2 \
--hash=sha256:360b9e3dbb49a209c21ad61809c7fb453643e048b38924c765813546746e81c3 \
@@ -2547,12 +2547,14 @@ sqlalchemy[mypy]==2.0.45 \
--hash=sha256:1d8b4a7a8c9b537509d56d5cd10ecdcfbb95912d72480c8861524efecc6a3fff \
--hash=sha256:215f0528b914e5c75ef2559f69dca86878a3beeb0c1be7279d77f18e8d180ed4 \
--hash=sha256:2c0b74aa79e2deade948fe8593654c8ef4228c44ba862bb7c9585c8e0db90f33 \
+ --hash=sha256:2e90a344c644a4fa871eb01809c32096487928bd2038bf10f3e4515cb688cc56 \
--hash=sha256:3c5f76216e7b85770d5bb5130ddd11ee89f4d52b11783674a662c7dd57018177 \
--hash=sha256:470daea2c1ce73910f08caf10575676a37159a6d16c4da33d0033546bddebc9b \
--hash=sha256:4748601c8ea959e37e03d13dcda4a44837afcd1b21338e637f7c935b8da06177 \
--hash=sha256:4b6bec67ca45bc166c8729910bd2a87f1c0407ee955df110d78948f5b5827e8a \
--hash=sha256:5225a288e4c8cc2308dbdd874edad6e7d0fd38eac1e9e5f23503425c8eee20d0 \
--hash=sha256:56ead1f8dfb91a54a28cd1d072c74b3d635bcffbd25e50786533b822d4f2cde2 \
+ --hash=sha256:5964f832431b7cdfaaa22a660b4c7eb1dfcd6ed41375f67fd3e3440fd95cb3cc \
--hash=sha256:59a8b8bd9c6bedf81ad07c8bd5543eedca55fe9b8780b2b628d495ba55f8db1e \
--hash=sha256:672c45cae53ba88e0dad74b9027dddd09ef6f441e927786b05bec75d949fbb2e \
--hash=sha256:6d0beadc2535157070c9c17ecf25ecec31e13c229a8f69196d7590bde8082bf1 \
@@ -2571,7 +2573,9 @@ sqlalchemy[mypy]==2.0.45 \
--hash=sha256:b8c8b41b97fba5f62349aa285654230296829672fc9939cd7f35aab246d1c08b \
--hash=sha256:ba547ac0b361ab4f1608afbc8432db669bd0819b3e12e29fb5fa9529a8bba81d \
--hash=sha256:c1c2091b1489435ff85728fafeb990f073e64f6f5e81d5cd53059773e8521eb6 \
+ --hash=sha256:c64772786d9eee72d4d3784c28f0a636af5b0a29f3fe26ff11f55efe90c0bd85 \
--hash=sha256:cd337d3526ec5298f67d6a30bbbe4ed7e5e68862f0bf6dd21d289f8d37b7d60b \
+ --hash=sha256:d29b2b99d527dbc66dd87c3c3248a5dd789d974a507f4653c969999fc7c1191b \
--hash=sha256:d2c3684fca8a05f0ac1d9a21c1f4a266983a7ea9180efb80ffeb03861ecd01a0 \
--hash=sha256:d62e47f5d8a50099b17e2bfc1b0c7d7ecd8ba6b46b1507b58cc4f05eefc3bb1c \
--hash=sha256:d8a2ca754e5415cde2b656c27900b19d50ba076aa05ce66e2207623d3fe41f5a \
@@ -2589,9 +2593,9 @@ sqlglot==25.20.2 \
--hash=sha256:169fe8308dd70d7bd40117b2221b62bdc7c4e2ea8eb07394b2a6146cdedf05ab \
--hash=sha256:cdbfd7ce3f2f39f32bd7b4c23fd9e0fd261636a6b14285b914e8def25fd0a567
# via ibis-framework
-sse-starlette==3.0.3 \
- --hash=sha256:88cfb08747e16200ea990c8ca876b03910a23b547ab3bd764c0d8eb81019b971 \
- --hash=sha256:af5bf5a6f3933df1d9c7f8539633dc8444ca6a97ab2e2a7cd3b6e431ac03a431
+sse-starlette==3.1.1 \
+ --hash=sha256:bb38f71ae74cfd86b529907a9fda5632195dfa6ae120f214ea4c890c7ee9d436 \
+ --hash=sha256:bffa531420c1793ab224f63648c059bcadc412bf9fdb1301ac8de1cf9a67b7fb
# via mcp
starlette==0.50.0 \
--hash=sha256:9e5391843ec9b6e472eed1365a78c8098cfceb7a74bfd4d6b1c0c0095efb3bca \
@@ -2599,6 +2603,7 @@ starlette==0.50.0 \
# via
# fastapi
# mcp
+ # sse-starlette
tabulate==0.9.0 \
--hash=sha256:0095b12bf5966de529c0feb1fa08671671b3368eec77d7ef7ab114be2c068b3c \
--hash=sha256:024ca478df22e9340661486f85298cff5f6dcdba14f3813e8830015b9ed1948f
@@ -2676,13 +2681,13 @@ typeguard==4.4.4 \
--hash=sha256:3a7fd2dffb705d4d0efaed4306a704c89b9dee850b688f060a8b1615a79e5f74 \
--hash=sha256:b5f562281b6bfa1f5492470464730ef001646128b180769880468bd84b68b09e
# via feast (setup.py)
-typer==0.20.0 \
- --hash=sha256:1aaf6494031793e4876fb0bacfa6a912b551cf43c1e63c800df8b1a866720c37 \
- --hash=sha256:5b463df6793ec1dca6213a3cf4c0f03bc6e322ac5e16e13ddd622a889489784a
+typer==0.21.0 \
+ --hash=sha256:c79c01ca6b30af9fd48284058a7056ba0d3bf5cf10d0ff3d0c5b11b68c258ac6 \
+ --hash=sha256:c87c0d2b6eee3b49c5c64649ec92425492c14488096dfbc8a0c2799b2f6f9c53
# via fastapi-mcp
-types-pymysql==1.1.0.20250916 \
- --hash=sha256:873eb9836bb5e3de4368cc7010ca72775f86e9692a5c7810f8c7f48da082e55b \
- --hash=sha256:98d75731795fcc06723a192786662bdfa760e1e00f22809c104fbb47bac5e29b
+types-pymysql==1.1.0.20251220 \
+ --hash=sha256:ae1c3df32a777489431e2e9963880a0df48f6591e0aa2fd3a6fabd9dee6eca54 \
+ --hash=sha256:fa1082af7dea6c53b6caa5784241924b1296ea3a8d3bd060417352c5e10c0618
# via feast (setup.py)
typing-extensions==4.15.0 \
--hash=sha256:0cea48d173cc12fa28ecabc3b837ea3cf6f38c6d1136f85cbaaf598984861466 \
@@ -2713,9 +2718,9 @@ typing-inspection==0.4.2 \
# mcp
# pydantic
# pydantic-settings
-tzdata==2025.2 \
- --hash=sha256:1a403fada01ff9221ca8044d701868fa132215d84beb92242d9acd2147f667a8 \
- --hash=sha256:b60a638fcc0daffadf82fe0f57e53d06bdec2f36c4df66280ae79bce6bd6f2b9
+tzdata==2025.3 \
+ --hash=sha256:06a47e5700f3081aab02b2e513160914ff0694bce9947d6b76ebd6bf57cfc5d1 \
+ --hash=sha256:de39c2ca5dc7b0344f2eba86f49d614019d29f060fc4ebc8a417896a620b56a7
# via pandas
ujson==5.11.0 \
--hash=sha256:0180a480a7d099082501cad1fe85252e4d4bf926b40960fb3d9e87a3a6fbbc80 \
@@ -2803,9 +2808,9 @@ ujson==5.11.0 \
--hash=sha256:fa79fdb47701942c2132a9dd2297a1a85941d966d8c87bfd9e29b0cf423f26cc \
--hash=sha256:fac6c0649d6b7c3682a0a6e18d3de6857977378dce8d419f57a0b20e3d775b39
# via pymilvus
-urllib3==2.6.1 \
- --hash=sha256:5379eb6e1aba4088bae84f8242960017ec8d8e3decf30480b3a1abdaa9671a3f \
- --hash=sha256:e67d06fe947c36a7ca39f4994b08d73922d40e6cca949907be05efa6fd75110b
+urllib3==2.6.2 \
+ --hash=sha256:016f9c98bb7e98085cb2b4b17b87d2c702975664e4f060c6532e64d1c1a5e797 \
+ --hash=sha256:ec21cddfe7724fc7cb4ba4bea7aa8e2ef36f607a4bab81aa6ce42a13dc3f03dd
# via
# botocore
# kubernetes
diff --git a/sdk/python/requirements/py3.12-minimal-sdist-requirements-build.txt b/sdk/python/requirements/py3.12-minimal-sdist-requirements-build.txt
index 329c5840ede..20d5e108fcc 100644
--- a/sdk/python/requirements/py3.12-minimal-sdist-requirements-build.txt
+++ b/sdk/python/requirements/py3.12-minimal-sdist-requirements-build.txt
@@ -166,46 +166,46 @@ cython==3.0.12 \
# pyyaml
# snowflake-connector-python
# sqlalchemy
-cython==3.2.2 \
- --hash=sha256:034ab96cb8bc8e7432bc27491f8d66f51e435b1eb21ddc03aa844be8f21ad847 \
- --hash=sha256:098590c1dc309f8a0406ade031963a95a87714296b425539f9920aebf924560d \
- --hash=sha256:0e35ff0f1bb3a7a5c40afb8fb540e4178b6551909f10748bf39d323f8140ccf3 \
- --hash=sha256:13b99ecb9482aff6a6c12d1ca6feef6940c507af909914b49f568de74fa965fb \
- --hash=sha256:14432d7f207245a3c35556155873f494784169297b28978a6204f1c60d31553e \
- --hash=sha256:177faf4d61e9f2d4d2db61194ac9ec16d3fe3041c1b6830f871a01935319eeb3 \
- --hash=sha256:2b910b89a2a71004064c5e890b9512a251eda63fae252caa0feb9835057035f9 \
- --hash=sha256:3de43a5786033a27fae1c882feb5ff0d023c38b83356e6800c1be0bcd6cf9f11 \
- --hash=sha256:436eb562d0affbc0b959f62f3f9c1ed251b9499e4f29c1d19514ae859894b6bf \
- --hash=sha256:50bbaabee733fd2780985e459fc20f655e02def83e8eff10220ad88455a34622 \
- --hash=sha256:5f818d40bbcf17e2089e2de7840f0de1c0ca527acf9b044aba79d5f5d8a5bdba \
- --hash=sha256:60f4aa425e1ff98abf8d965ae7020f06dd2cbc01dbd945137d2f9cca4ff0524a \
- --hash=sha256:692a41c8fe06fb2dc55ca2c8d71c80c469fd16fe69486ed99f3b3cbb2d3af83f \
- --hash=sha256:820c4a99dbf6b3e6c0300be42b4040b501eff0e1feeb80cfa52c48a346fb0df2 \
- --hash=sha256:826cad0ad43ab05a26e873b5d625f64d458dc739ec6fdeecab848b60a91c4252 \
- --hash=sha256:86b1d39a1ea974dd16fe3bcef0df7b64dadd0bd38d05a339f287b48d37cb109f \
- --hash=sha256:8c9265b3e84ae2d999b7c3165c683e366bbbbbe4346468055ca2366fe013f2df \
- --hash=sha256:8db28aef793c81dc69383b619ca508668998aaf099cd839d3cbae85184cce744 \
- --hash=sha256:8e72ee88a9a5381d30a6da116a3c8352730b9b038a49ed9bc5c3d0ed6d69b06c \
- --hash=sha256:9cd2ede6af225499ad22888dbfb13b92d71fc1016f401ee637559a5831b177c2 \
- --hash=sha256:a3898c076e9c458bcb3e4936187919fda5f5365fe4c567d35d2b003444b6f3fe \
- --hash=sha256:a473df474ba89e9fee81ee82b31062a267f9e598096b222783477e56d02ad12c \
- --hash=sha256:a6387e3ad31342443916db9a419509935fddd8d4cbac34aab9c895ae55326a56 \
- --hash=sha256:a9509f1e9c41c86b790cff745bb31927bbc861662a3b462596d71d3d2a578abb \
- --hash=sha256:aa24cd0bdab27ca099b2467806c684404add597c1108e07ddf7b6471653c85d7 \
- --hash=sha256:aff11412ed5fc78bd8b148621f4d1034fcad6cfcba468c20cd9f327b4f61ec3e \
- --hash=sha256:b223c1f84c3420c24f6a4858e979524bd35a79437a5839e29d41201c87ed119d \
- --hash=sha256:b4df52101209817fde7284cf779156f79142fb639b1d7840f11680ff4bb30604 \
- --hash=sha256:b4fe499eed7cd70b2aa4e096b9ce2588f5e6fdf049b46d40a5e55efcde6e4904 \
- --hash=sha256:b5afac4e77e71a9010dc7fd3191ced00f9b12b494dd7525c140781054ce63a73 \
- --hash=sha256:c3add3d483acc73129a61d105389344d792c17e7c1cee24863f16416bd071634 \
- --hash=sha256:ca18d9d53c0e2f0c9347478b37532b46e0dc34c704e052ab1b0d8b21a290fc0f \
- --hash=sha256:d140c2701cbb8cf960300cf1b67f3b4fa9d294d32e51b85f329bff56936a82fd \
- --hash=sha256:d7b3447b2005dffc5f276d420a480d2b57d15091242652d410b6a46fb00ed251 \
- --hash=sha256:d8c93fe128b58942832b1fcac96e48f93c2c69b569eff0d38d30fb5995fecfa0 \
- --hash=sha256:e7200309b81f4066cf36a96efeec646716ca74afd73d159045169263db891133 \
- --hash=sha256:f560ff3aea5b5df93853ec7bf1a1e9623d6d511f4192f197559aca18fca43392 \
- --hash=sha256:fed44d0ab2d36f1b0301c770b0dafec23bcb9700d58e7769cd6d9136b3304c11 \
- --hash=sha256:ff07e784ea748225bbdea07fec0ac451379e9e41a0a84cb57b36db19dd01ae71
+cython==3.2.3 \
+ --hash=sha256:0145e64485f0a9741c9314ae176282dffeb48d2ef30ae315d7224698867c317f \
+ --hash=sha256:06a1317097f540d3bb6c7b81ed58a0d8b9dbfa97abf39dfd4c22ee87a6c7241e \
+ --hash=sha256:0a75a04688875b275a6c875565e672325bae04327dd6ec2fc25aeb5c6cf82fce \
+ --hash=sha256:1309bdce06f767e8514377f44b3a5b9e5b91e58af1348010cca10b572e1852ad \
+ --hash=sha256:18b5e738c9dbb1cb488b51e35c3a1b9aa7363166cce40158fe6ccb454f6498ac \
+ --hash=sha256:18edc858e6a52de47fe03ffa97ea14dadf450e20069de0a8aef531006c4bbd93 \
+ --hash=sha256:1d097ad4686b58b8c03d760d08eca28f79878d404ef7452c49636170571654e0 \
+ --hash=sha256:228f11be8406015d1ce84a25bf4f96167ff6fc18b834deca5716d95ae15a818c \
+ --hash=sha256:22a624290c2883387b2c2cfb5224c15bff21432c6a2cf0c23ac8df3dcbd45e96 \
+ --hash=sha256:25732f3981a93407826297f4423206e5e22c3cfccfc74e37bf444453bbdc076f \
+ --hash=sha256:26404441f733fd1cfb0dd9c45477f501437e7d51fad05bb402bd2feb4e127aa3 \
+ --hash=sha256:283262b8f902323ceb6ed3b643f275a2a963e7ab059f0714a467933383cbc56d \
+ --hash=sha256:2a18f2e3bcd018416157d0a83446e29b4a31437ab79061fe5504c077e70389d0 \
+ --hash=sha256:3141734fb15f8b5e9402b9240f8da8336edecae91742b41c85678c31ab68f66d \
+ --hash=sha256:3829f99d611412288f44ff543e9d2b5c0c83274998b2a6680bbe5cca3539c1fd \
+ --hash=sha256:4f40efa83c93060a271046930d2322ec045abb9722d25a377702cb57aa823c2b \
+ --hash=sha256:51fd1a56d0fc682c05ecc44f11927dbe28dd2867c30148557b62d7d1017a13d8 \
+ --hash=sha256:55c0157a5940fbf0b054508207fe0fc5cc796d0532af492c0fa35b5b41a883f7 \
+ --hash=sha256:60d19376252722241a3d3ec8a695c5cae4deb053486d2e5f9a40cb569a0cf984 \
+ --hash=sha256:6b01b36c9eb1b68c25bddbeef7379f7bfc37f7c9afc044e71840ffab761a2dd0 \
+ --hash=sha256:6b6dd6b7aca8447b2a6779b314cc402f1e4990754507a88477e535b3c8b41ad1 \
+ --hash=sha256:73afc824896ffaf22bf8122d0a7107f0120e3188a353bdcfa92317fc0d9a87ce \
+ --hash=sha256:74f482da8b605c61b4df6ff716d013f20131949cb2fa59b03e63abd36ef5bac0 \
+ --hash=sha256:80f20369d7aaf4e76cfef902025256918a5cc6eb0aed6d8783e4b1c563e4f6c4 \
+ --hash=sha256:84330e7c8bf220a82b633678b9f99e10227c8f4c406d67c5552449ab2afedef8 \
+ --hash=sha256:9a24cc653fad3adbd9cbaa638d80df3aa08a1fe27f62eb35850971c70be680df \
+ --hash=sha256:9aa1a8abf3d8bb53cc19cfaa21c004afad8d4ccb17513f8aa11a788d1f525abd \
+ --hash=sha256:9c5ac7201d8382c0da69e4a119c14be6acd7c286615a0383ffbd1dbfdbaa3df7 \
+ --hash=sha256:b39dff92db70cbd95528f3b81d70e06bd6d3fc9c1dd91321e4d3b999ece3bceb \
+ --hash=sha256:c041f7e338cca2422e0924716b04fabeda57636214324fc1941396acce99e7c7 \
+ --hash=sha256:c102388cf7604ff5647164d5041fd5de2393198a87883fdb50f6c078fc2f4f8e \
+ --hash=sha256:c2365a0c79ab9c0fa86d30a4a6ba7e37fc1be9537c48b79b9d63ee7e08bf2fef \
+ --hash=sha256:cf210228c15b5c625824d8e31d43b6fea25f9e13c81dac632f2f7d838e0229a5 \
+ --hash=sha256:d1f8700ba89c977438744f083890d87187f15709507a5489e0f6d682053b7fa0 \
+ --hash=sha256:e31f52ea7e35463b21410f150006eb07b663a0b3ceea8ee8f35e0b8e02b75f50 \
+ --hash=sha256:e4293f1861480b397809a6f021a6c12e15e918feae1c7add80c99d07af206578 \
+ --hash=sha256:f13832412d633376ffc08d751cc18ed0d7d00a398a4065e2871db505258748a6 \
+ --hash=sha256:f5bf0cebeb4147e172a114437d3fce5a507595d8fdd821be792b1bb25c691514 \
+ --hash=sha256:fabe2f37acb63a5521d16193effb15acd082e35458f30f1c1f3e506271fee8a7
# via uvloop
dunamai==1.25.0 \
--hash=sha256:7f9dc687dd3256e613b6cc978d9daabfd2bb5deb8adc541fc135ee423ffa98ab \
@@ -321,83 +321,83 @@ jinja2==3.1.6 \
# via
# poetry-dynamic-versioning
# uv-dynamic-versioning
-librt==0.7.3 \
- --hash=sha256:020c6db391268bcc8ce75105cb572df8cb659a43fd347366aaa407c366e5117a \
- --hash=sha256:0fa9ac2e49a6bee56e47573a6786cb635e128a7b12a0dc7851090037c0d397a3 \
- --hash=sha256:11ad45122bbed42cfc8b0597450660126ef28fd2d9ae1a219bc5af8406f95678 \
- --hash=sha256:120dd21d46ff875e849f1aae19346223cf15656be489242fe884036b23d39e93 \
- --hash=sha256:14569ac5dd38cfccf0a14597a88038fb16811a6fede25c67b79c6d50fc2c8fdc \
- --hash=sha256:1617bea5ab31266e152871208502ee943cb349c224846928a1173c864261375e \
- --hash=sha256:170cdb8436188347af17bf9cccf3249ba581c933ed56d926497119d4cf730cec \
- --hash=sha256:1975eda520957c6e0eb52d12968dd3609ffb7eef05d4223d097893d6daf1d8a7 \
- --hash=sha256:1fe603877e1865b5fd047a5e40379509a4a60204aa7aa0f72b16f7a41c3f0712 \
- --hash=sha256:24d70810f6e2ea853ff79338001533716b373cc0f63e2a0be5bc96129edb5fb5 \
- --hash=sha256:256793988bff98040de23c57cf36e1f4c2f2dc3dcd17537cdac031d3b681db71 \
- --hash=sha256:25711f364c64cab2c910a0247e90b51421e45dbc8910ceeb4eac97a9e132fc6f \
- --hash=sha256:2682162855a708e3270eba4b92026b93f8257c3e65278b456c77631faf0f4f7a \
- --hash=sha256:2cf9d73499486ce39eebbff5f42452518cc1f88d8b7ea4a711ab32962b176ee2 \
- --hash=sha256:2e40520c37926166c24d0c2e0f3bc3a5f46646c34bdf7b4ea9747c297d6ee809 \
- --hash=sha256:2e980cf1ed1a2420a6424e2ed884629cdead291686f1048810a817de07b5eb18 \
- --hash=sha256:2f03484b54bf4ae80ab2e504a8d99d20d551bfe64a7ec91e218010b467d77093 \
- --hash=sha256:35f1609e3484a649bb80431310ddbec81114cd86648f1d9482bc72a3b86ded2e \
- --hash=sha256:399938edbd3d78339f797d685142dd8a623dfaded023cf451033c85955e4838a \
- --hash=sha256:399bbd7bcc1633c3e356ae274a1deb8781c7bf84d9c7962cc1ae0c6e87837292 \
- --hash=sha256:3ec50cf65235ff5c02c5b747748d9222e564ad48597122a361269dd3aa808798 \
- --hash=sha256:3edbf257c40d21a42615e9e332a6b10a8bacaaf58250aed8552a14a70efd0d65 \
- --hash=sha256:440c788f707c061d237c1e83edf6164ff19f5c0f823a3bf054e88804ebf971ec \
- --hash=sha256:44b3689b040df57f492e02cd4f0bacd1b42c5400e4b8048160c9d5e866de8abe \
- --hash=sha256:4887c29cadbdc50640179e3861c276325ff2986791e6044f73136e6e798ff806 \
- --hash=sha256:5460d99ed30f043595bbdc888f542bad2caeb6226b01c33cda3ae444e8f82d42 \
- --hash=sha256:550fdbfbf5bba6a2960b27376ca76d6aaa2bd4b1a06c4255edd8520c306fcfc0 \
- --hash=sha256:56f2a47beda8409061bc1c865bef2d4bd9ff9255219402c0817e68ab5ad89aed \
- --hash=sha256:572a24fc5958c61431da456a0ef1eeea6b4989d81eeb18b8e5f1f3077592200b \
- --hash=sha256:59cb0470612d21fa1efddfa0dd710756b50d9c7fb6c1236bbf8ef8529331dc70 \
- --hash=sha256:6038ccbd5968325a5d6fd393cf6e00b622a8de545f0994b89dd0f748dcf3e19e \
- --hash=sha256:6488e69d408b492e08bfb68f20c4a899a354b4386a446ecd490baff8d0862720 \
- --hash=sha256:687403cced6a29590e6be6964463835315905221d797bc5c934a98750fe1a9af \
- --hash=sha256:6b407c23f16ccc36614c136251d6b32bf30de7a57f8e782378f1107be008ddb0 \
- --hash=sha256:6b4e7bff1d76dd2b46443078519dc75df1b5e01562345f0bb740cea5266d8218 \
- --hash=sha256:6bdd9adfca615903578d2060ee8a6eb1c24eaf54919ff0ddc820118e5718931b \
- --hash=sha256:6eb9295c730e26b849ed1f4022735f36863eb46b14b6e10604c1c39b8b5efaea \
- --hash=sha256:703456146dc2bf430f7832fd1341adac5c893ec3c1430194fdcefba00012555c \
- --hash=sha256:754a0d09997095ad764ccef050dd5bf26cbf457aab9effcba5890dad081d879e \
- --hash=sha256:7af7785f5edd1f418da09a8cdb9ec84b0213e23d597413e06525340bcce1ea4f \
- --hash=sha256:7b29e97273bd6999e2bfe9fe3531b1f4f64effd28327bced048a33e49b99674a \
- --hash=sha256:7b4f57f7a0c65821c5441d98c47ff7c01d359b1e12328219709bdd97fdd37f90 \
- --hash=sha256:8837d5a52a2d7aa9f4c3220a8484013aed1d8ad75240d9a75ede63709ef89055 \
- --hash=sha256:8ccadf260bb46a61b9c7e89e2218f6efea9f3eeaaab4e3d1f58571890e54858e \
- --hash=sha256:8d8cf653e798ee4c4e654062b633db36984a1572f68c3aa25e364a0ddfbbb910 \
- --hash=sha256:93b2a1f325fefa1482516ced160c8c7b4b8d53226763fa6c93d151fa25164207 \
- --hash=sha256:9f0e0927efe87cd42ad600628e595a1a0aa1c64f6d0b55f7e6059079a428641a \
- --hash=sha256:a59a69deeb458c858b8fea6acf9e2acd5d755d76cd81a655256bc65c20dfff5b \
- --hash=sha256:a9f9b661f82693eb56beb0605156c7fca57f535704ab91837405913417d6990b \
- --hash=sha256:abfc57cab3c53c4546aee31859ef06753bfc136c9d208129bad23e2eca39155a \
- --hash=sha256:aca73d70c3f553552ba9133d4a09e767dcfeee352d8d8d3eb3f77e38a3beb3ed \
- --hash=sha256:adeaa886d607fb02563c1f625cf2ee58778a2567c0c109378da8f17ec3076ad7 \
- --hash=sha256:b278a9248a4e3260fee3db7613772ca9ab6763a129d6d6f29555e2f9b168216d \
- --hash=sha256:b7c1239b64b70be7759554ad1a86288220bbb04d68518b527783c4ad3fb4f80b \
- --hash=sha256:bf8c7735fbfc0754111f00edda35cf9e98a8d478de6c47b04eaa9cef4300eaa7 \
- --hash=sha256:c634a0a6db395fdaba0361aa78395597ee72c3aad651b9a307a3a7eaf5efd67e \
- --hash=sha256:cad9971881e4fec00d96af7eaf4b63aa7a595696fc221808b0d3ce7ca9743258 \
- --hash=sha256:cbdb3f337c88b43c3b49ca377731912c101178be91cb5071aac48faa898e6f8e \
- --hash=sha256:cd8551aa21df6c60baa2624fd086ae7486bdde00c44097b32e1d1b1966e365e0 \
- --hash=sha256:d09f677693328503c9e492e33e9601464297c01f9ebd966ea8fc5308f3069bfd \
- --hash=sha256:d376a35c6561e81d2590506804b428fc1075fcc6298fc5bb49b771534c0ba010 \
- --hash=sha256:d39079379a9a28e74f4d57dc6357fa310a1977b51ff12239d7271ec7e71d67f5 \
- --hash=sha256:d86f94743a11873317094326456b23f8a5788bad9161fd2f0e52088c33564620 \
- --hash=sha256:d91e60ac44bbe3a77a67af4a4c13114cbe9f6d540337ce22f2c9eaf7454ca71f \
- --hash=sha256:d9883b2d819ce83f87ba82a746c81d14ada78784db431e57cc9719179847376e \
- --hash=sha256:e094e445c37c57e9ec612847812c301840239d34ccc5d153a982fa9814478c60 \
- --hash=sha256:e19acfde38cb532a560b98f473adc741c941b7a9bc90f7294bc273d08becb58b \
- --hash=sha256:e32d43610dff472eab939f4d7fbdd240d1667794192690433672ae22d7af8445 \
- --hash=sha256:ed028fc3d41adda916320712838aec289956c89b4f0a361ceadf83a53b4c047a \
- --hash=sha256:ef59c938f72bdbc6ab52dc50f81d0637fde0f194b02d636987cea2ab30f8f55a \
- --hash=sha256:f3d4801db8354436fd3936531e7f0e4feb411f62433a6b6cb32bb416e20b529f \
- --hash=sha256:f57aca20e637750a2c18d979f7096e2c2033cc40cf7ed201494318de1182f135 \
- --hash=sha256:f9da128d0edf990cf0d2ca011b02cd6f639e79286774bd5b0351245cbb5a6e51 \
- --hash=sha256:fbd7351d43b80d9c64c3cfcb50008f786cc82cba0450e8599fdd64f264320bd3 \
- --hash=sha256:fcb72249ac4ea81a7baefcbff74df7029c3cb1cf01a711113fa052d563639c9c \
- --hash=sha256:ff21c554304e8226bf80c3a7754be27c6c3549a9fec563a03c06ee8f494da8fc
+librt==0.7.5 \
+ --hash=sha256:060bde69c3604f694bd8ae21a780fe8be46bb3dbb863642e8dfc75c931ca8eee \
+ --hash=sha256:08153ea537609d11f774d2bfe84af39d50d5c9ca3a4d061d946e0c9d8bce04a1 \
+ --hash=sha256:0b4791202296ad51ac09a3ff58eb49d9da8e3a4009167a6d76ac418a974e5fd4 \
+ --hash=sha256:0b7f080ba30601dfa3e3deed3160352273e1b9bc92e652f51103c3e9298f7899 \
+ --hash=sha256:0e2bf8f91093fac43e3eaebacf777f12fd539dce9ec5af3efc6d8424e96ccd49 \
+ --hash=sha256:118716de5ad6726332db1801bc90fa6d94194cd2e07c1a7822cebf12c496714d \
+ --hash=sha256:168e04663e126416ba712114050f413ac306759a1791d87b7c11d4428ba75760 \
+ --hash=sha256:191cbd42660446d67cf7a95ac7bfa60f49b8b3b0417c64f216284a1d86fc9335 \
+ --hash=sha256:263f4fae9eba277513357c871275b18d14de93fd49bf5e43dc60a97b81ad5eb8 \
+ --hash=sha256:265729b551a2dd329cc47b323a182fb7961af42abf21e913c9dd7d3331b2f3c2 \
+ --hash=sha256:26b46620e1e0e45af510d9848ea0915e7040605dd2ae94ebefb6c962cbb6f7ec \
+ --hash=sha256:29c8d2fae11d4379ea207ba7fc69d43237e42cf8a9f90ec6e05993687e6d648b \
+ --hash=sha256:2fcbf2e135c11f721193aa5f42ba112bb1046afafbffd407cbc81d8d735c74d0 \
+ --hash=sha256:39183abee670bc37b85f11e86c44a9cad1ed6efa48b580083e89ecee13dd9717 \
+ --hash=sha256:3919c9407faeeee35430ae135e3a78acd4ecaaaa73767529e2c15ca1d73ba325 \
+ --hash=sha256:3c98a8d0ac9e2a7cb8ff8c53e5d6e8d82bfb2839abf144fdeaaa832f2a12aa45 \
+ --hash=sha256:3dd58f7ce20360c6ce0c04f7bd9081c7f9c19fc6129a3c705d0c5a35439f201d \
+ --hash=sha256:46aa91813c267c3f60db75d56419b42c0c0b9748ec2c568a0e3588e543fb4233 \
+ --hash=sha256:49c596cd18e90e58b7caa4d7ca7606049c1802125fcff96b8af73fa5c3870e4d \
+ --hash=sha256:532ddc6a8a6ca341b1cd7f4d999043e4c71a212b26fe9fd2e7f1e8bb4e873544 \
+ --hash=sha256:54d2aef0b0f5056f130981ad45081b278602ff3657fe16c88529f5058038e802 \
+ --hash=sha256:553dc58987d1d853adda8aeadf4db8e29749f0b11877afcc429a9ad892818ae2 \
+ --hash=sha256:584cb3e605ec45ba350962cec853e17be0a25a772f21f09f1e422f7044ae2a7d \
+ --hash=sha256:5cd3afd71e9bc146203b6c8141921e738364158d4aa7cdb9a874e2505163770f \
+ --hash=sha256:63055d3dda433ebb314c9f1819942f16a19203c454508fdb2d167613f7017169 \
+ --hash=sha256:654fdc971c76348a73af5240d8e2529265b9a7ba6321e38dd5bae7b0d4ab3abe \
+ --hash=sha256:6b7b58913d475911f6f33e8082f19dd9b120c4f4a5c911d07e395d67b81c6982 \
+ --hash=sha256:6e860909fea75baef941ee6436e0453612505883b9d0d87924d4fda27865b9a2 \
+ --hash=sha256:730be847daad773a3c898943cf67fb9845a3961d06fb79672ceb0a8cd8624cfa \
+ --hash=sha256:732e0aa0385b59a1b2545159e781c792cc58ce9c134249233a7c7250a44684c4 \
+ --hash=sha256:75965c1f4efb7234ff52a58b729d245a21e87e4b6a26a0ec08052f02b16274e4 \
+ --hash=sha256:7a488908a470451338607650f1c064175094aedebf4a4fa37890682e30ce0b57 \
+ --hash=sha256:81056e01bba1394f1d92904ec61a4078f66df785316275edbaf51d90da8c6e26 \
+ --hash=sha256:82f3f088482e2229387eadf8215c03f7726d56f69cce8c0c40f0795aebc9b361 \
+ --hash=sha256:84d4a6b9efd6124f728558a18e79e7cc5c5d4efc09b2b846c910de7e564f5bad \
+ --hash=sha256:85f485b7471571e99fab4f44eeb327dc0e1f814ada575f3fa85e698417d8a54e \
+ --hash=sha256:8a3cfb15961e7333ea6ef033dc574af75153b5c230d5ad25fbcd55198f21e0cf \
+ --hash=sha256:8bb7883c1e94ceb87c2bf81385266f032da09cd040e804cc002f2c9d6b842e2f \
+ --hash=sha256:8dcae24de1bc9da93aa689cb6313c70e776d7cea2fcf26b9b6160fedfe6bd9af \
+ --hash=sha256:9937574e6d842f359b8585903d04f5b4ab62277a091a93e02058158074dc52f2 \
+ --hash=sha256:9bbb8facc5375476d392990dd6a71f97e4cb42e2ac66f32e860f6e47299d5e89 \
+ --hash=sha256:9c08527055fbb03c641c15bbc5b79dd2942fb6a3bd8dabf141dd7e97eeea4904 \
+ --hash=sha256:9cffa3ef0af29687455161cb446eff059bf27607f95163d6a37e27bcb37180f6 \
+ --hash=sha256:9f85f9b5db87b0f52e53c68ad2a0c5a53e00afa439bd54a1723742a2b1021276 \
+ --hash=sha256:a82d5a0ee43aeae2116d7292c77cc8038f4841830ade8aa922e098933b468b9e \
+ --hash=sha256:a9eacbf983319b26b5f340a2e0cd47ac1ee4725a7f3a72fd0f15063c934b69d6 \
+ --hash=sha256:ab4b0d3bee6f6ff7017e18e576ac7e41a06697d8dea4b8f3ab9e0c8e1300c409 \
+ --hash=sha256:af69d9e159575e877c7546d1ee817b4ae089aa221dd1117e20c24ad8dc8659c7 \
+ --hash=sha256:b1795c4b2789b458fa290059062c2f5a297ddb28c31e704d27e161386469691a \
+ --hash=sha256:b591c094afd0ffda820e931148c9e48dc31a556dc5b2b9b3cc552fa710d858e4 \
+ --hash=sha256:b8e0fd344bad57026a8f4ccfaf406486c2fc991838050c2fef156170edc3b775 \
+ --hash=sha256:ba1077c562a046208a2dc6366227b3eeae8f2c2ab4b41eaf4fd2fa28cece4203 \
+ --hash=sha256:bb41f04046b4f22b1e7ba5ef513402cd2e3477ec610e5f92d38fe2bba383d419 \
+ --hash=sha256:c039bbf79a9a2498404d1ae7e29a6c175e63678d7a54013a97397c40aee026c5 \
+ --hash=sha256:c566a4672564c5d54d8ab65cdaae5a87ee14c1564c1a2ddc7a9f5811c750f023 \
+ --hash=sha256:cda8b025875946ffff5a9a7590bf9acde3eb02cb6200f06a2d3e691ef3d9955b \
+ --hash=sha256:cdb001a1a0e4f41e613bca2c0fc147fc8a7396f53fc94201cbfd8ec7cd69ca4b \
+ --hash=sha256:cdde31759bd8888f3ef0eebda80394a48961328a17c264dce8cc35f4b9cde35d \
+ --hash=sha256:d2cc7d187e8c6e9b7bdbefa9697ce897a704ea7a7ce844f2b4e0e2aa07ae51d3 \
+ --hash=sha256:d7aa33153a5bb0bac783d2c57885889b1162823384e8313d47800a0e10d0070e \
+ --hash=sha256:d7c72c8756eeb3aefb1b9e3dac7c37a4a25db63640cac0ab6fc18e91a0edf05a \
+ --hash=sha256:dd810f2d39c526c42ea205e0addad5dc08ef853c625387806a29d07f9d150d9b \
+ --hash=sha256:ddc0ab9dbc5f9ceaf2bf7a367bf01f2697660e908f6534800e88f43590b271db \
+ --hash=sha256:ddc4a16207f88f9597b397fc1f60781266d13b13de922ff61c206547a29e4bbd \
+ --hash=sha256:de4221a1181fa9c8c4b5f35506ed6f298948f44003d84d2a8b9885d7e01e6cfa \
+ --hash=sha256:df2e210400b28e50994477ebf82f055698c79797b6ee47a1669d383ca33263e1 \
+ --hash=sha256:df3146d52465b3b6397d25d513f428cb421c18df65b7378667bb5f1e3cc45805 \
+ --hash=sha256:e47fc52602ffc374e69bf1b76536dc99f7f6dd876bd786c8213eaa3598be030a \
+ --hash=sha256:e9e9c988b5ffde7be02180f864cbd17c0b0c1231c235748912ab2afa05789c25 \
+ --hash=sha256:ea1b60b86595a5dc1f57b44a801a1c4d8209c0a69518391d349973a4491408e6 \
+ --hash=sha256:edf6b465306215b19dbe6c3fb63cf374a8f3e1ad77f3b4c16544b83033bbb67b \
+ --hash=sha256:f02c4337bf271c4f06637f5ff254fad2238c0b8e32a3a480ebb2fc5e26f754a5 \
+ --hash=sha256:f7f51ffe59f4556243d3cc82d827bde74765f594fa3ceb80ec4de0c13ccd3416 \
+ --hash=sha256:f952e1a78c480edee8fb43aa2bf2e84dcd46c917d44f8065b883079d3893e8fc \
+ --hash=sha256:fb565b4219abc8ea2402e61c7ba648a62903831059ed3564fa1245cc245d58d7 \
+ --hash=sha256:fee15c2a190ef389f14928135c6fb2d25cd3fdb7887bfd9a7b444bbdc8c06b96
# via mypy
markupsafe==3.0.3 \
--hash=sha256:0303439a41979d9e74d18ff5e2dd8c43ed6c6001fd40e5bf2e43f7bd9bbc523f \
@@ -490,21 +490,21 @@ markupsafe==3.0.3 \
--hash=sha256:f9e130248f4462aaa8e2552d547f36ddadbeaa573879158d721bbd33dfe4743a \
--hash=sha256:fed51ac40f757d41b7c48425901843666a6677e3e8eb0abcff09e4ba6e664f50
# via jinja2
-maturin==1.10.2 \
- --hash=sha256:04df81ee295dcda37828bd025a4ac688ea856e3946e4cb300a8f44a448de0069 \
- --hash=sha256:07a82864352feeaf2167247c8206937ef6c6ae9533025d416b7004ade0ea601d \
- --hash=sha256:11c73815f21a755d2129c410e6cb19dbfacbc0155bfc46c706b69930c2eb794b \
- --hash=sha256:259292563da89850bf8f7d37aa4ddba22905214c1e180b1c8f55505dfd8c0e81 \
- --hash=sha256:7fbd997c5347649ee7987bd05a92bd5b8b07efa4ac3f8bcbf6196e07eb573d89 \
- --hash=sha256:96e1d391e4c1fa87edf2a37e4d53d5f2e5f39dd880b9d8306ac9f8eb212d23f8 \
- --hash=sha256:a217aa7c42aa332fb8e8377eb07314e1f02cf0fe036f614aca4575121952addd \
- --hash=sha256:a41ec70d99e27c05377be90f8e3c3def2a7bae4d0d9d5ea874aaf2d1da625d5c \
- --hash=sha256:a4c29a770ea2c76082e0afc6d4efd8ee94405588bfae00d10828f72e206c739b \
- --hash=sha256:da031771d9fb6ddb1d373638ec2556feee29e4507365cd5749a2d354bcadd818 \
- --hash=sha256:da777766fd584440dc9fecd30059a94f85e4983f58b09e438ae38ee4b494024c \
- --hash=sha256:e3ce9b2ad4fb9c341f450a6d32dc3edb409a2d582a81bc46ba55f6e3b6196b22 \
- --hash=sha256:efcd496a3202ffe0d0489df1f83d08b91399782fb2dd545d5a1e7bf6fd81af39 \
- --hash=sha256:f0d1b7b5f73c8d30a7e71cd2a2189a7f0126a3a3cd8b3d6843e7e1d4db50f759
+maturin==1.11.0 \
+ --hash=sha256:0fbe565ede0901de7743cd028ad6c13be623b1c7158641f8a50d7a4353f4a97c \
+ --hash=sha256:16cb48f1f2b6b3d8c2732f77d98d8f7f0ab84765abf0c1c82df2c8ea7d8ef2ec \
+ --hash=sha256:276a900d4096c246cc236aa00460adb3ab195c37172a9f1087bbde6a127f0780 \
+ --hash=sha256:51cadd0373950cfae6aac6823a3d2bf56e34e4efed0abae8c7d15e337d9bb5e6 \
+ --hash=sha256:83b73299f36301d943550c609e0a0dff08d21e3674c1369c10df77ce470fd97b \
+ --hash=sha256:8695b79462e1f46013993d715485db289cf5a7702aa2d9941ac333564ca20d79 \
+ --hash=sha256:8bf16fc56f4abcf3af7d5fb6dab3888f73e3648287c8efe77e14fa1b006a3ef4 \
+ --hash=sha256:95c5d778c96ab237837cd6d38e01f0bdca52c64e0d00647a69133a8e7ae4eed4 \
+ --hash=sha256:9aaaec73e120ac7add99f53d606aa6d432c8e0337af742b2ca26fb8d17181500 \
+ --hash=sha256:aa2d9db1c03e9eb0640a578caf00a6fa2d9399abb7375a970b0f6d6e934b5441 \
+ --hash=sha256:d13d3721931d407491d9b3fe161146aa78ab08a8fc9735302abee1d368aedb03 \
+ --hash=sha256:d53bde4f939dac9340aa253c2765073de6b8595a29a294503042fcbfec8bd842 \
+ --hash=sha256:dba7daeb54615532c11f8fe39bc9514b81215f6f4e91909ec227e06227c286cf \
+ --hash=sha256:debf472d3ecd76a3a750b056b99dcb64c119467dc44f0e2d6e6363acb128b96a
# via
# cryptography
# pydantic-core
@@ -513,9 +513,11 @@ maturin==1.10.2 \
meson-python==0.15.0 \
--hash=sha256:3ae38253ff02b2e947a05e362a2eaf5a9a09d133c5666b4123399ee5fbf2e591 \
--hash=sha256:fddb73eecd49e89c1c41c87937cd89c2d0b65a1c63ba28238681d4bd9484d26f
- # via
- # numpy
- # pandas
+ # via pandas
+meson-python==0.18.0 \
+ --hash=sha256:3b0fe051551cc238f5febb873247c0949cd60ded556efa130aa57021804868e2 \
+ --hash=sha256:c56a99ec9df669a40662fe46960321af6e4b14106c14db228709c1628e23848d
+ # via numpy
meson==1.7.1 \
--hash=sha256:155780a5be87f6dd7f427ad8bcbf0f2b2c5f62ee5fdacca7caa9de8439a24b89 \
--hash=sha256:6d9cbc9ce87a70243c75e4cc668ee3f206ab50b184beb0a08ece948112f19bd7
@@ -526,81 +528,79 @@ mypy-extensions==1.1.0 \
--hash=sha256:1be4cccdb0f2482337c4743e60421de3a356cd97508abadd57d47403e94f5505 \
--hash=sha256:52e68efc3284861e772bbcd66823fde5ae21fd2fdb51c62a211403730b916558
# via mypy
-numpy==2.3.5 \
- --hash=sha256:00dc4e846108a382c5869e77c6ed514394bdeb3403461d25a829711041217d5b \
- --hash=sha256:0472f11f6ec23a74a906a00b48a4dcf3849209696dff7c189714511268d103ae \
- --hash=sha256:04822c00b5fd0323c8166d66c701dc31b7fbd252c100acd708c48f763968d6a3 \
- --hash=sha256:052e8c42e0c49d2575621c158934920524f6c5da05a1d3b9bab5d8e259e045f0 \
- --hash=sha256:09a1bea522b25109bf8e6f3027bd810f7c1085c64a0c7ce050c1676ad0ba010b \
- --hash=sha256:0cd00b7b36e35398fa2d16af7b907b65304ef8bb4817a550e06e5012929830fa \
- --hash=sha256:0d8163f43acde9a73c2a33605353a4f1bc4798745a8b1d73183b28e5b435ae28 \
- --hash=sha256:1062fde1dcf469571705945b0f221b73928f34a20c904ffb45db101907c3454e \
- --hash=sha256:11e06aa0af8c0f05104d56450d6093ee639e15f24ecf62d417329d06e522e017 \
- --hash=sha256:17531366a2e3a9e30762c000f2c43a9aaa05728712e25c11ce1dbe700c53ad41 \
- --hash=sha256:1978155dd49972084bd6ef388d66ab70f0c323ddee6f693d539376498720fb7e \
- --hash=sha256:1ed1ec893cff7040a02c8aa1c8611b94d395590d553f6b53629a4461dc7f7b63 \
- --hash=sha256:2dcd0808a421a482a080f89859a18beb0b3d1e905b81e617a188bd80422d62e9 \
- --hash=sha256:2e2eb32ddb9ccb817d620ac1d8dae7c3f641c1e5f55f531a33e8ab97960a75b8 \
- --hash=sha256:2feae0d2c91d46e59fcd62784a3a83b3fb677fead592ce51b5a6fbb4f95965ff \
- --hash=sha256:3095bdb8dd297e5920b010e96134ed91d852d81d490e787beca7e35ae1d89cf7 \
- --hash=sha256:30bc11310e8153ca664b14c5f1b73e94bd0503681fcf136a163de856f3a50139 \
- --hash=sha256:3101e5177d114a593d79dd79658650fe28b5a0d8abeb8ce6f437c0e6df5be1a4 \
- --hash=sha256:396084a36abdb603546b119d96528c2f6263921c50df3c8fd7cb28873a237748 \
- --hash=sha256:3997b5b3c9a771e157f9aae01dd579ee35ad7109be18db0e85dbdbe1de06e952 \
- --hash=sha256:414802f3b97f3c1eef41e530aaba3b3c1620649871d8cb38c6eaff034c2e16bd \
- --hash=sha256:51c1e14eb1e154ebd80e860722f9e6ed6ec89714ad2db2d3aa33c31d7c12179b \
- --hash=sha256:51c55fe3451421f3a6ef9a9c1439e82101c57a2c9eab9feb196a62b1a10b58ce \
- --hash=sha256:5ee6609ac3604fa7780e30a03e5e241a7956f8e2fcfe547d51e3afa5247ac47f \
- --hash=sha256:612a95a17655e213502f60cfb9bf9408efdc9eb1d5f50535cc6eb365d11b42b5 \
- --hash=sha256:6203fdf9f3dc5bdaed7319ad8698e685c7a3be10819f41d32a0723e611733b42 \
- --hash=sha256:63c0e9e7eea69588479ebf4a8a270d5ac22763cc5854e9a7eae952a3908103f7 \
- --hash=sha256:66f85ce62c70b843bab1fb14a05d5737741e74e28c7b8b5a064de10142fad248 \
- --hash=sha256:6cf9b429b21df6b99f4dee7a1218b8b7ffbbe7df8764dc0bd60ce8a0708fed1e \
- --hash=sha256:70b37199913c1bd300ff6e2693316c6f869c7ee16378faf10e4f5e3275b299c3 \
- --hash=sha256:727fd05b57df37dc0bcf1a27767a3d9a78cbbc92822445f32cc3436ba797337b \
- --hash=sha256:74ae7b798248fe62021dbf3c914245ad45d1a6b0cb4a29ecb4b31d0bfbc4cc3e \
- --hash=sha256:784db1dcdab56bf0517743e746dfb0f885fc68d948aba86eeec2cba234bdf1c0 \
- --hash=sha256:86945f2ee6d10cdfd67bcb4069c1662dd711f7e2a4343db5cecec06b87cf31aa \
- --hash=sha256:86d835afea1eaa143012a2d7a3f45a3adce2d7adc8b4961f0b362214d800846a \
- --hash=sha256:872a5cf366aec6bb1147336480fef14c9164b154aeb6542327de4970282cd2f5 \
- --hash=sha256:8b973c57ff8e184109db042c842423ff4f60446239bd585a5131cc47f06f789d \
- --hash=sha256:8cba086a43d54ca804ce711b2a940b16e452807acebe7852ff327f1ecd49b0d4 \
- --hash=sha256:8f7f0e05112916223d3f438f293abf0727e1181b5983f413dfa2fefc4098245c \
- --hash=sha256:900218e456384ea676e24ea6a0417f030a3b07306d29d7ad843957b40a9d8d52 \
- --hash=sha256:93eebbcf1aafdf7e2ddd44c2923e2672e1010bddc014138b229e49725b4d6be5 \
- --hash=sha256:9c75442b2209b8470d6d5d8b1c25714270686f14c749028d2199c54e29f20b4d \
- --hash=sha256:9ee2197ef8c4f0dfe405d835f3b6a14f5fee7782b5de51ba06fb65fc9b36e9f1 \
- --hash=sha256:a414504bef8945eae5f2d7cb7be2d4af77c5d1cb5e20b296c2c25b61dff2900c \
- --hash=sha256:a4b9159734b326535f4dd01d947f919c6eefd2d9827466a696c44ced82dfbc18 \
- --hash=sha256:a80afd79f45f3c4a7d341f13acbe058d1ca8ac017c165d3fa0d3de6bc1a079d7 \
- --hash=sha256:aa5bc7c5d59d831d9773d1170acac7893ce3a5e130540605770ade83280e7188 \
- --hash=sha256:acfd89508504a19ed06ef963ad544ec6664518c863436306153e13e94605c218 \
- --hash=sha256:aeffcab3d4b43712bb7a60b65f6044d444e75e563ff6180af8f98dd4b905dfd2 \
- --hash=sha256:afaffc4393205524af9dfa400fa250143a6c3bc646c08c9f5e25a9f4b4d6a903 \
- --hash=sha256:b0c7088a73aef3d687c4deef8452a3ac7c1be4e29ed8bf3b366c8111128ac60c \
- --hash=sha256:b46b4ec24f7293f23adcd2d146960559aaf8020213de8ad1909dba6c013bf89c \
- --hash=sha256:b501b5fa195cc9e24fe102f21ec0a44dffc231d2af79950b451e0d99cea02234 \
- --hash=sha256:bf06bc2af43fa8d32d30fae16ad965663e966b1a3202ed407b84c989c3221e82 \
- --hash=sha256:c804e3a5aba5460c73955c955bdbd5c08c354954e9270a2c1565f62e866bdc39 \
- --hash=sha256:c8a9958e88b65c3b27e22ca2a076311636850b612d6bbfb76e8d156aacde2aaf \
- --hash=sha256:cc0a57f895b96ec78969c34f682c602bf8da1a0270b09bc65673df2e7638ec20 \
- --hash=sha256:cc8920d2ec5fa99875b670bb86ddeb21e295cb07aa331810d9e486e0b969d946 \
- --hash=sha256:ccc933afd4d20aad3c00bcef049cb40049f7f196e0397f1109dba6fed63267b0 \
- --hash=sha256:ce581db493ea1a96c0556360ede6607496e8bf9b3a8efa66e06477267bc831e9 \
- --hash=sha256:d0f23b44f57077c1ede8c5f26b30f706498b4862d3ff0a7298b8411dd2f043ff \
- --hash=sha256:d21644de1b609825ede2f48be98dfde4656aefc713654eeee280e37cadc4e0ad \
- --hash=sha256:d6889ec4ec662a1a37eb4b4fb26b6100841804dac55bd9df579e326cdc146227 \
- --hash=sha256:de5672f4a7b200c15a4127042170a694d4df43c992948f5e1af57f0174beed10 \
- --hash=sha256:e6a0bc88393d65807d751a614207b7129a310ca4fe76a74e5c7da5fa5671417e \
- --hash=sha256:ed89927b86296067b4f81f108a2271d8926467a8868e554eaf370fc27fa3ccaf \
- --hash=sha256:ee3888d9ff7c14604052b2ca5535a30216aa0a58e948cdd3eeb8d3415f638769 \
- --hash=sha256:f0963b55cdd70fad460fa4c1341f12f976bb26cb66021a5580329bd498988310 \
- --hash=sha256:f16417ec91f12f814b10bafe79ef77e70113a2f5f7018640e7425ff979253425 \
- --hash=sha256:f28620fe26bee16243be2b7b874da327312240a7cdc38b769a697578d2100013 \
- --hash=sha256:f4255143f5160d0de972d28c8f9665d882b5f61309d8362fdd3e103cf7bf010c \
- --hash=sha256:ffac52f28a7849ad7576293c0cb7b9f08304e8f7d738a8cb8a90ec4c55a998eb \
- --hash=sha256:ffe22d2b05504f786c867c8395de703937f934272eb67586817b46188b4ded6d \
- --hash=sha256:fffe29a1ef00883599d1dc2c51aa2e5d80afe49523c261a74933df395c15c520
+numpy==2.4.0 \
+ --hash=sha256:009bd0ea12d3c784b6639a8457537016ce5172109e585338e11334f6a7bb88ee \
+ --hash=sha256:02a2038eb27f9443a8b266a66911e926566b5a6ffd1a689b588f7f35b81e7dc3 \
+ --hash=sha256:0804a8e4ab070d1d35496e65ffd3cf8114c136a2b81f61dfab0de4b218aacfd5 \
+ --hash=sha256:0feafc9e03128074689183031181fac0897ff169692d8492066e949041096548 \
+ --hash=sha256:1889b3a3f47a7b5bee16bc25a2145bd7cb91897f815ce3499db64c7458b6d91d \
+ --hash=sha256:1d8f9fde5f6dc1b6fc34df8162f3b3079365468703fee7f31d4e0cc8c63baed9 \
+ --hash=sha256:1ee32359fb7543b7b7bd0b2f46294db27e29e7bbdf70541e81b190836cd83ded \
+ --hash=sha256:20c115517513831860c573996e395707aa9fb691eb179200125c250e895fcd93 \
+ --hash=sha256:21555da4ec4a0c942520ead42c3b0dc9477441e085c42b0fbdd6a084869a6f6b \
+ --hash=sha256:23a3e9d1a6f360267e8fbb38ba5db355a6a7e9be71d7fce7ab3125e88bb646c8 \
+ --hash=sha256:2a8b6bb8369abefb8bd1801b054ad50e02b3275c8614dc6e5b0373c305291037 \
+ --hash=sha256:2e284ca13d5a8367e43734148622caf0b261b275673823593e3e3634a6490f83 \
+ --hash=sha256:2f585f52b2baf07ff3356158d9268ea095e221371f1074fadea2f42544d58b4d \
+ --hash=sha256:316b2f2584682318539f0bcaca5a496ce9ca78c88066579ebd11fd06f8e4741e \
+ --hash=sha256:32ed06d0fe9cae27d8fb5f400c63ccee72370599c75e683a6358dd3a4fb50aaf \
+ --hash=sha256:355354388cba60f2132df297e2d53053d4063f79077b67b481d21276d61fc4df \
+ --hash=sha256:35ddc8f4914466e6fc954c76527aa91aa763682a4f6d73249ef20b418fe6effb \
+ --hash=sha256:36667db4d6c1cea79c8930ab72fadfb4060feb4bfe724141cd4bd064d2e5f8ce \
+ --hash=sha256:36cbfb13c152b1c7c184ddac43765db8ad672567e7bafff2cc755a09917ed2e6 \
+ --hash=sha256:39699233bc72dd482da1415dcb06076e32f60eddc796a796c5fb6c5efce94667 \
+ --hash=sha256:39b19251dec4de8ff8496cd0806cbe27bf0684f765abb1f4809554de93785f2d \
+ --hash=sha256:3d857f55e7fdf7c38ab96c4558c95b97d1c685be6b05c249f5fdafcbd6f9899e \
+ --hash=sha256:3de19cfecd1465d0dcf8a5b5ea8b3155b42ed0b639dba4b71e323d74f2a3be5e \
+ --hash=sha256:3f3096405acc48887458bbf9f6814d43785ac7ba2a57ea6442b581dedbc60ce6 \
+ --hash=sha256:40483b2f2d3ba7aad426443767ff5632ec3156ef09742b96913787d13c336471 \
+ --hash=sha256:413aa561266a4be2d06cd2b9665e89d9f54c543f418773076a76adcf2af08bc7 \
+ --hash=sha256:44aba2f0cafd287871a495fb3163408b0bd25bbce135c6f621534a07f4f7875c \
+ --hash=sha256:49ff32b09f5aa0cd30a20c2b39db3e669c845589f2b7fc910365210887e39344 \
+ --hash=sha256:4d1cfce39e511069b11e67cd0bd78ceff31443b7c9e5c04db73c7a19f572967c \
+ --hash=sha256:57c540ed8fb1f05cb997c6761cd56db72395b0d6985e90571ff660452ade4f98 \
+ --hash=sha256:5f48cb3e88fbc294dc90e215d86fbaf1c852c63dbdb6c3a3e63f45c4b57f7344 \
+ --hash=sha256:5fe44e277225fd3dff6882d86d3d447205d43532c3627313d17e754fb3905a0e \
+ --hash=sha256:60e8c196cd82cbbd4f130b5290007e13e6de3eca79f0d4d38014769d96a7c475 \
+ --hash=sha256:65167da969cd1ec3a1df31cb221ca3a19a8aaa25370ecb17d428415e93c1935e \
+ --hash=sha256:680060061adb2d74ce352628cb798cfdec399068aa7f07ba9fb818b2b3305f98 \
+ --hash=sha256:6bbaebf0d11567fa8926215ae731e1d58e6ec28a8a25235b8a47405d301332db \
+ --hash=sha256:6c05483c3136ac4c91b4e81903cb53a8707d316f488124d0398499a4f8e8ef51 \
+ --hash=sha256:6dc8b7e2f4eb184b37655195f421836cfae6f58197b67e3ffc501f1333d993fa \
+ --hash=sha256:6e504f7b16118198f138ef31ba24d985b124c2c469fe8467007cf30fd992f934 \
+ --hash=sha256:74623f2ab5cc3f7c886add4f735d1031a1d2be4a4ae63c0546cfd74e7a31ddf6 \
+ --hash=sha256:77f0d13fa87036d7553bf81f0e1fe3ce68d14c9976c9851744e4d3e91127e95f \
+ --hash=sha256:85eef4cb5625c47ee6425c58a3502555e10f45ee973da878ac8248ad58c136f3 \
+ --hash=sha256:882567b7ae57c1b1a0250208cc21a7976d8cbcc49d5a322e607e6f09c9e0bd53 \
+ --hash=sha256:8b986403023c8f3bf8f487c2e6186afda156174d31c175f747d8934dfddf3479 \
+ --hash=sha256:8cfa5f29a695cb7438965e6c3e8d06e0416060cf0d709c1b1c1653a939bf5c2a \
+ --hash=sha256:8eafe7c36c8430b7794edeab3087dec7bf31d634d92f2af9949434b9d1964cba \
+ --hash=sha256:9198f447e1dc5647d07c9a6bbe2063cc0132728cc7175b39dbc796da5b54920d \
+ --hash=sha256:92190db305a6f48734d3982f2c60fa30d6b5ee9bff10f2887b930d7b40119f4c \
+ --hash=sha256:927ccf5cd17c48f801f4ed43a7e5673a2724bd2171460be3e3894e6e332ef83a \
+ --hash=sha256:98e81648e0b36e325ab67e46b5400a7a6d4a22b8a7c8e8bbfe20e7db7906bf95 \
+ --hash=sha256:9a818668b674047fd88c4cddada7ab8f1c298812783e8328e956b78dc4807f9f \
+ --hash=sha256:a152d86a3ae00ba5f47b3acf3b827509fd0b6cb7d3259665e63dafbad22a75ea \
+ --hash=sha256:a2718c1de8504121714234b6f8241d0019450353276c88b9453c9c3d92e101db \
+ --hash=sha256:a39fb973a726e63223287adc6dafe444ce75af952d711e400f3bf2b36ef55a7b \
+ --hash=sha256:a899699294f28f7be8992853c0c60741f16ff199205e2e6cdca155762cbaa59d \
+ --hash=sha256:a8fdfed3deaf1928fb7667d96e0567cdf58c2b370ea2ee7e586aa383ec2cb346 \
+ --hash=sha256:aabb081ca0ec5d39591fc33018cd4b3f96e1a2dd6756282029986d00a785fba4 \
+ --hash=sha256:b1f5b45829ac1848893f0ddf5cb326110604d6df96cdc255b0bf9edd154104d4 \
+ --hash=sha256:b48e35f4ab6f6a7597c46e301126ceba4c44cd3280e3750f85db48b082624fa4 \
+ --hash=sha256:b54c83f1c0c0f1d748dca0af516062b8829d53d1f0c402be24b4257a9c48ada6 \
+ --hash=sha256:ba0cb30acd3ef11c94dc27fbfba68940652492bc107075e7ffe23057f9425681 \
+ --hash=sha256:bb50ce5fb202a26fd5404620e7ef820ad1ab3558b444cb0b55beb7ef66cd2d63 \
+ --hash=sha256:c95eb6db2884917d86cde0b4d4cf31adf485c8ec36bf8696dd66fa70de96f36b \
+ --hash=sha256:d0ffd9e2e4441c96a9c91ec1783285d80bf835b677853fc2770a89d50c1e48ac \
+ --hash=sha256:d57b5046c120561ba8fa8e4030fbb8b822f3063910fa901ffadf16e2b7128ad6 \
+ --hash=sha256:d9e6a7664ddd9746e20b7325351fe1a8408d0a2bf9c63b5e898290ddc8f09544 \
+ --hash=sha256:dc578891de1db95b2a35001b695451767b580bb45753717498213c5ff3c41d63 \
+ --hash=sha256:e0434aa22c821f44eeb4c650b81c7fbdd8c0122c6c4b5a576a76d5a35625ecd9 \
+ --hash=sha256:e06a922a469cae9a57100864caf4f8a97a1026513793969f8ba5b63137a35d25 \
+ --hash=sha256:e493962256a38f58283de033d8af176c5c91c084ea30f15834f7545451c42059 \
+ --hash=sha256:ecb0019d44f4cdb50b676c5d0cb4b1eae8e15d1ed3d3e6639f986fc92b2ec52c \
+ --hash=sha256:f935c4493eda9069851058fa0d9e39dbf6286be690066509305e52912714dbb2
# via
# pandas
# pyarrow
@@ -610,6 +610,7 @@ packaging==24.2 \
# via
# dunamai
# hatchling
+ # meson-python
# pyproject-metadata
# scikit-build-core
# setuptools-scm
@@ -769,9 +770,9 @@ types-psutil==7.0.0.20250218 \
--hash=sha256:1447a30c282aafefcf8941ece854e1100eee7b0296a9d9be9977292f0269b121 \
--hash=sha256:1e642cdafe837b240295b23b1cbd4691d80b08a07d29932143cbbae30eb0db9c
# via mypy
-types-setuptools==80.9.0.20250822 \
- --hash=sha256:070ea7716968ec67a84c7f7768d9952ff24d28b65b6594797a464f1b3066f965 \
- --hash=sha256:53bf881cb9d7e46ed12c76ef76c0aaf28cfe6211d3fab12e0b83620b1a8642c3
+types-setuptools==80.9.0.20251223 \
+ --hash=sha256:1b36db79d724c2287d83dc052cf887b47c0da6a2fff044378be0b019545f56e6 \
+ --hash=sha256:d3411059ae2f5f03985217d86ac6084efea2c9e9cacd5f0869ef950f308169b2
# via mypy
typing-extensions==4.15.0 \
--hash=sha256:0cea48d173cc12fa28ecabc3b837ea3cf6f38c6d1136f85cbaaf598984861466 \
@@ -779,9 +780,9 @@ typing-extensions==4.15.0 \
# via
# mypy
# setuptools-scm
-uv-dynamic-versioning==0.11.2 \
- --hash=sha256:4c785ea02e00b93896d015fd3613c451735af1715a7f5f52e8e4e1d76e6ec3c5 \
- --hash=sha256:563ab4b7a93904eb8fb8fd9f2959dad853d62baa71f3cdb0233acf8a749d512f
+uv-dynamic-versioning==0.12.0 \
+ --hash=sha256:2d2f1fb806c2e351d0d0a3840aaf7b3c6ce73757080b1ada4ac5dc44f7dd4c9e \
+ --hash=sha256:e853e0c5b2425a68005580325d4975a8c37b66015589ca45ef96e660fe0f8f16
# via mcp
versioneer==0.29 \
--hash=sha256:0f1a137bb5d6811e96a79bb0486798aeae9b9c6efc24b389659cebb0ee396cb9 \
diff --git a/sdk/python/requirements/py3.12-minimal-sdist-requirements.txt b/sdk/python/requirements/py3.12-minimal-sdist-requirements.txt
index 9f25dc790ef..ac6f755be87 100644
--- a/sdk/python/requirements/py3.12-minimal-sdist-requirements.txt
+++ b/sdk/python/requirements/py3.12-minimal-sdist-requirements.txt
@@ -178,9 +178,9 @@ babel==2.17.0 \
--hash=sha256:0c54cffb19f690cdcc52a3b50bcbf71e07a808d1c80d549f2459b9d2cf0afb9d \
--hash=sha256:4d0b53093fdfb4b21c92b5213dba5a1b23885afa8383709427046b21c366e5f2
# via sphinx
-bigtree==1.0.3 \
- --hash=sha256:18402a143130868b17ca84a74ca263e6f32f046d6978c30d244f8b94c4a01227 \
- --hash=sha256:99a18b6937a9b4ab8e560fec5c0720e10ebf37f84e44f9b5f47702c2e84c9aaa
+bigtree==1.0.4 \
+ --hash=sha256:e4af0c5bc0d2cd72e18442965e4509f642b16a0de65db6d0ec116e30f959010c \
+ --hash=sha256:f58a3238bb9b1142d893c9de4921bfd18d435427c75e0c168dd580eabf6dc7fd
# via feast (setup.py)
boto3==1.38.27 \
--hash=sha256:94bd7fdd92d5701b362d4df100d21e28f8307a67ff56b6a8b0398119cf22f859 \
@@ -196,9 +196,9 @@ botocore==1.38.46 \
# boto3
# s3transfer
# snowflake-connector-python
-cachetools==6.2.2 \
- --hash=sha256:6c09c98183bf58560c97b2abfcedcbaf6a896a490f534b031b661d3723b45ace \
- --hash=sha256:8e6d266b25e539df852251cfd6f990b4bc3a141db73b939058d809ebd2590fc6
+cachetools==6.2.4 \
+ --hash=sha256:69a7a52634fed8b8bf6e24a050fb60bff1c9bd8f6d24572b99c32d4e71e62a51 \
+ --hash=sha256:82c5c05585e70b6ba2d3ae09ea60b79548872185d2f24ae1f2709d37299fd607
# via google-auth
calver==2025.3.31 \
--hash=sha256:07511edf5e7fa75ae97445c8c5921240e0fe62937289a3ebe6963eddd3c691b6 \
@@ -543,13 +543,13 @@ cython==3.0.12 \
--hash=sha256:feb86122a823937cc06e4c029d80ff69f082ebb0b959ab52a5af6cdd271c5dc3 \
--hash=sha256:ff5c0b6a65b08117d0534941d404833d516dac422eee88c6b4fd55feb409a5ed
# via feast (setup.py)
-dask[dataframe]==2025.11.0 \
- --hash=sha256:08c35a8146c05c93b34f83cf651009129c42ee71762da7ca452fb7308641c2b8 \
- --hash=sha256:23d59e624b80ee05b7cc8df858682cca58262c4c3b197ccf61da0f6543c8f7c3
+dask[dataframe]==2025.12.0 \
+ --hash=sha256:4213ce9c5d51d6d89337cff69de35d902aa0bf6abdb8a25c942a4d0281f3a598 \
+ --hash=sha256:8d478f2aabd025e2453cf733ad64559de90cf328c20209e4574e9543707c3e1b
# via feast (setup.py)
-db-dtypes==1.4.4 \
- --hash=sha256:26f53db5df1acd746b88c5647913a1b20f731c0af1b11abcb6bec5365f31098a \
- --hash=sha256:32c13039982656a8598a0835f25f0e07e34c9a423e471ee60c2553240b7fcf1e
+db-dtypes==1.5.0 \
+ --hash=sha256:abdbb2e4eb965800ed6f98af0c5c1cafff9063ace09114be2d26a7f046be2c8a \
+ --hash=sha256:ad9e94243f53e104bc77dbf9ae44b580d83a770d3694483aba59c9767966daa5
# via
# google-cloud-bigquery
# pandas-gbq
@@ -557,9 +557,9 @@ dill==0.3.9 \
--hash=sha256:468dff3b89520b474c0397703366b7b95eebe6303f108adf9b19da1f702be87a \
--hash=sha256:81aa267dddf68cbfe8029c42ca9ec6a4ab3b22371d1c450abc54422577b4512c
# via feast (setup.py)
-docutils==0.22.3 \
- --hash=sha256:21486ae730e4ca9f622677b1412b879af1791efcfba517e4c6f60be543fc8cdd \
- --hash=sha256:bd772e4aca73aff037958d44f2be5229ded4c09927fcf8690c577b66234d6ceb
+docutils==0.22.4 \
+ --hash=sha256:4db53b1fde9abecbb74d91230d32ab626d94f6badfc575d6db9194a49df29968 \
+ --hash=sha256:d0013f540772d1420576855455d050a2180186c91c15779301ac2ccb3eeb68de
# via sphinx
duckdb==1.1.3 \
--hash=sha256:00cca22df96aa3473fe4584f84888e2cf1c516e8c2dd837210daec44eadba586 \
@@ -623,9 +623,9 @@ durationpy==0.10 \
--hash=sha256:1fa6893409a6e739c9c72334fc65cca1f355dbdd93405d30f726deb5bde42fba \
--hash=sha256:3b41e1b601234296b4fb368338fdcd3e13e0b4fb5b67345948f4f2bf9868b286
# via kubernetes
-fastapi==0.124.0 \
- --hash=sha256:260cd178ad75e6d259991f2fd9b0fee924b224850079df576a3ba604ce58f4e6 \
- --hash=sha256:91596bdc6dde303c318f06e8d2bc75eafb341fc793a0c9c92c0bc1db1ac52480
+fastapi==0.128.0 \
+ --hash=sha256:1cc179e1cef10a6be60ffe429f79b829dce99d8de32d7acb7e6c8dfdf7f2645a \
+ --hash=sha256:aebd93f9716ee3b4f4fcfe13ffb7cf308d99c9f3ab5622d8877441072561582d
# via
# feast (setup.py)
# fastapi-mcp
@@ -633,9 +633,9 @@ fastapi-mcp==0.4.0 \
--hash=sha256:d4a3fe7966af24d44e4b412720561c95eb12bed999a4443a88221834b3b15aec \
--hash=sha256:d4ca9410996f4c7b8ea0d7b20fdf79878dc359ebf89cbf3b222e0b675a55097d
# via feast (setup.py)
-filelock==3.20.0 \
- --hash=sha256:339b4732ffda5cd79b13f4e2711a31b0365ce445d95d243bb996273d072546a2 \
- --hash=sha256:711e943b4ec6be42e1d4e6690b48dc175c822967466bb31c0c293f34334c13f4
+filelock==3.20.1 \
+ --hash=sha256:15d9e9a67306188a44baa72f569d2bfd803076269365fdea0934385da4dc361a \
+ --hash=sha256:b8360948b351b80f420878d8516519a2204b07aefcdcfd24912a5d33127f188c
# via snowflake-connector-python
flit-core==3.12.0 \
--hash=sha256:18f63100d6f94385c6ed57a72073443e1a71a4acb4339491615d0f16d6ff01b2 \
@@ -793,9 +793,9 @@ google-api-core[grpc]==2.28.1 \
# google-cloud-datastore
# google-cloud-storage
# pandas-gbq
-google-auth==2.43.0 \
- --hash=sha256:88228eee5fc21b62a1b5fe773ca15e67778cb07dc8363adcb4a8827b52d81483 \
- --hash=sha256:af628ba6fa493f75c7e9dbe9373d148ca9f4399b5ea29976519e0a3848eddd16
+google-auth==2.45.0 \
+ --hash=sha256:82344e86dc00410ef5382d99be677c6043d72e502b625aa4f4afa0bdacca0f36 \
+ --hash=sha256:90d3f41b6b72ea72dd9811e765699ee491ab24139f34ebf1ca2b9cc0c38708f3
# via
# google-api-core
# google-auth-oauthlib
@@ -814,19 +814,19 @@ google-auth-oauthlib==1.2.2 \
# via
# pandas-gbq
# pydata-google-auth
-google-cloud-bigquery[pandas]==3.38.0 \
- --hash=sha256:8afcb7116f5eac849097a344eb8bfda78b7cfaae128e60e019193dd483873520 \
- --hash=sha256:e06e93ff7b245b239945ef59cb59616057598d369edac457ebf292bd61984da6
+google-cloud-bigquery[pandas]==3.39.0 \
+ --hash=sha256:cb375e1d63dea9bd5bf735e66024338f294159d43afdf63e1d023f5fcbbf55ea \
+ --hash=sha256:dc7a64921465859105461b43c42562e38e797d7a73feb72b3cfc4865b7b1c5ef
# via
# feast (setup.py)
# pandas-gbq
-google-cloud-bigquery-storage==2.35.0 \
- --hash=sha256:c9bab6b8e41d6cb9806e589e65f320c89ada84f466e61566b7208d87924c1430 \
- --hash=sha256:f2e3a08882155de1e9ec53c71c5784eb1f25dc6514c535f5796c3c9eeac17d17
+google-cloud-bigquery-storage==2.36.0 \
+ --hash=sha256:1769e568070db672302771d2aec18341de10712aa9c4a8c549f417503e0149f0 \
+ --hash=sha256:d3c1ce9d2d3a4d7116259889dcbe3c7c70506f71f6ce6bbe54aa0a68bbba8f8f
# via feast (setup.py)
-google-cloud-bigtable==2.34.0 \
- --hash=sha256:773258b00cd3f9a3a35639cc38bd711f4f1418aaa0c8d70cb028978ed98dc2c2 \
- --hash=sha256:a4a8db4903840cd3f89fb19c060eea2e7c09c1265cb0538cfc11288dbc6000e4
+google-cloud-bigtable==2.35.0 \
+ --hash=sha256:f355bfce1f239453ec2bb3839b0f4f9937cf34ef06ef29e1ca63d58fd38d0c50 \
+ --hash=sha256:f5699012c5fea4bd4bdf7e80e5e3a812a847eb8f41bf8dc2f43095d6d876b83b
# via feast (setup.py)
google-cloud-core==2.5.0 \
--hash=sha256:67d977b41ae6c7211ee830c7912e41003ea8194bff15ae7d72fd6f51e57acabc \
@@ -836,49 +836,48 @@ google-cloud-core==2.5.0 \
# google-cloud-bigtable
# google-cloud-datastore
# google-cloud-storage
-google-cloud-datastore==2.21.0 \
- --hash=sha256:eee454dd4a55f5b327f9f344928ff1a09a6f77c23d5e3d908ad31a13cc2f4073 \
- --hash=sha256:f303f27cd1983383f20bd227019cd8a7897419e0ec6b878367c58c66245f9d9b
+google-cloud-datastore==2.23.0 \
+ --hash=sha256:24a1b1d29b902148fe41b109699f76fd3aa60591e9d547c0f8b87d7bf9ff213f \
+ --hash=sha256:80049883a4ae928fdcc661ba6803ec267665dc0e6f3ce2da91441079a6bb6387
# via feast (setup.py)
google-cloud-storage==2.19.0 \
--hash=sha256:aeb971b5c29cf8ab98445082cbfe7b161a1f48ed275822f59ed3f1524ea54fba \
--hash=sha256:cd05e9e7191ba6cb68934d8eb76054d9be4562aa89dbc4236feee4d7d51342b2
# via feast (setup.py)
-google-crc32c==1.7.1 \
- --hash=sha256:0f99eaa09a9a7e642a61e06742856eec8b19fc0037832e03f941fe7cf0c8e4db \
- --hash=sha256:19eafa0e4af11b0a4eb3974483d55d2d77ad1911e6cf6f832e1574f6781fd337 \
- --hash=sha256:1c67ca0a1f5b56162951a9dae987988679a7db682d6f97ce0f6381ebf0fbea4c \
- --hash=sha256:1f2b3522222746fff0e04a9bd0a23ea003ba3cccc8cf21385c564deb1f223242 \
- --hash=sha256:22beacf83baaf59f9d3ab2bbb4db0fb018da8e5aebdce07ef9f09fce8220285e \
- --hash=sha256:2bff2305f98846f3e825dbeec9ee406f89da7962accdb29356e4eadc251bd472 \
- --hash=sha256:2d73a68a653c57281401871dd4aeebbb6af3191dcac751a76ce430df4d403194 \
- --hash=sha256:32d1da0d74ec5634a05f53ef7df18fc646666a25efaaca9fc7dcfd4caf1d98c3 \
- --hash=sha256:3bda0fcb632d390e3ea8b6b07bf6b4f4a66c9d02dcd6fbf7ba00a197c143f582 \
- --hash=sha256:6335de12921f06e1f774d0dd1fbea6bf610abe0887a1638f64d694013138be5d \
- --hash=sha256:6b211ddaf20f7ebeec5c333448582c224a7c90a9d98826fbab82c0ddc11348e6 \
- --hash=sha256:6efb97eb4369d52593ad6f75e7e10d053cf00c48983f7a973105bc70b0ac4d82 \
- --hash=sha256:6fbab4b935989e2c3610371963ba1b86afb09537fd0c633049be82afe153ac06 \
- --hash=sha256:713121af19f1a617054c41f952294764e0c5443d5a5d9034b2cd60f5dd7e0349 \
- --hash=sha256:754561c6c66e89d55754106739e22fdaa93fafa8da7221b29c8b8e8270c6ec8a \
- --hash=sha256:7cc81b3a2fbd932a4313eb53cc7d9dde424088ca3a0337160f35d91826880c1d \
- --hash=sha256:85fef7fae11494e747c9fd1359a527e5970fc9603c90764843caabd3a16a0a48 \
- --hash=sha256:905a385140bf492ac300026717af339790921f411c0dfd9aa5a9e69a08ed32eb \
- --hash=sha256:9fc196f0b8d8bd2789352c6a522db03f89e83a0ed6b64315923c396d7a932315 \
- --hash=sha256:a8e9afc74168b0b2232fb32dd202c93e46b7d5e4bf03e66ba5dc273bb3559589 \
- --hash=sha256:b07d48faf8292b4db7c3d64ab86f950c2e94e93a11fd47271c28ba458e4a0d76 \
- --hash=sha256:b6d86616faaea68101195c6bdc40c494e4d76f41e07a37ffdef270879c15fb65 \
- --hash=sha256:b7491bdc0c7564fcf48c0179d2048ab2f7c7ba36b84ccd3a3e1c3f7a72d3bba6 \
- --hash=sha256:bb5e35dcd8552f76eed9461a23de1030920a3c953c1982f324be8f97946e7127 \
- --hash=sha256:d68e17bad8f7dd9a49181a1f5a8f4b251c6dbc8cc96fb79f1d321dfd57d66f53 \
- --hash=sha256:dcdf5a64adb747610140572ed18d011896e3b9ae5195f2514b7ff678c80f1603 \
- --hash=sha256:df8b38bdaf1629d62d51be8bdd04888f37c451564c2042d36e5812da9eff3c35 \
- --hash=sha256:e10554d4abc5238823112c2ad7e4560f96c7bf3820b202660373d769d9e6e4c9 \
- --hash=sha256:e42e20a83a29aa2709a0cf271c7f8aefaa23b7ab52e53b322585297bb94d4638 \
- --hash=sha256:ed66cbe1ed9cbaaad9392b5259b3eba4a9e565420d734e6238813c428c3336c9 \
- --hash=sha256:ee6547b657621b6cbed3562ea7826c3e11cab01cd33b74e1f677690652883e77 \
- --hash=sha256:f2226b6a8da04f1d9e61d3e357f2460b9551c5e6950071437e122c958a18ae14 \
- --hash=sha256:fa8136cc14dd27f34a3221c0f16fd42d8a40e4778273e61a3c19aedaa44daf6b \
- --hash=sha256:fc5319db92daa516b653600794d5b9f9439a9a121f3e162f94b0e1891c7933cb
+google-crc32c==1.8.0 \
+ --hash=sha256:014a7e68d623e9a4222d663931febc3033c5c7c9730785727de2a81f87d5bab8 \
+ --hash=sha256:01f126a5cfddc378290de52095e2c7052be2ba7656a9f0caf4bcd1bfb1833f8a \
+ --hash=sha256:0470b8c3d73b5f4e3300165498e4cf25221c7eb37f1159e221d1825b6df8a7ff \
+ --hash=sha256:119fcd90c57c89f30040b47c211acee231b25a45d225e3225294386f5d258288 \
+ --hash=sha256:14f87e04d613dfa218d6135e81b78272c3b904e2a7053b841481b38a7d901411 \
+ --hash=sha256:17446feb05abddc187e5441a45971b8394ea4c1b6efd88ab0af393fd9e0a156a \
+ --hash=sha256:19b40d637a54cb71e0829179f6cb41835f0fbd9e8eb60552152a8b52c36cbe15 \
+ --hash=sha256:2a3dc3318507de089c5384cc74d54318401410f82aa65b2d9cdde9d297aca7cb \
+ --hash=sha256:3b9776774b24ba76831609ffbabce8cdf6fa2bd5e9df37b594221c7e333a81fa \
+ --hash=sha256:3cc0c8912038065eafa603b238abf252e204accab2a704c63b9e14837a854962 \
+ --hash=sha256:3d488e98b18809f5e322978d4506373599c0c13e6c5ad13e53bb44758e18d215 \
+ --hash=sha256:3ebb04528e83b2634857f43f9bb8ef5b2bbe7f10f140daeb01b58f972d04736b \
+ --hash=sha256:450dc98429d3e33ed2926fc99ee81001928d63460f8538f21a5d6060912a8e27 \
+ --hash=sha256:4b8286b659c1335172e39563ab0a768b8015e88e08329fa5321f774275fc3113 \
+ --hash=sha256:57a50a9035b75643996fbf224d6661e386c7162d1dfdab9bc4ca790947d1007f \
+ --hash=sha256:61f58b28e0b21fcb249a8247ad0db2e64114e201e2e9b4200af020f3b6242c9f \
+ --hash=sha256:6f35aaffc8ccd81ba3162443fabb920e65b1f20ab1952a31b13173a67811467d \
+ --hash=sha256:71734788a88f551fbd6a97be9668a0020698e07b2bf5b3aa26a36c10cdfb27b2 \
+ --hash=sha256:864abafe7d6e2c4c66395c1eb0fe12dc891879769b52a3d56499612ca93b6092 \
+ --hash=sha256:86cfc00fe45a0ac7359e5214a1704e51a99e757d0272554874f419f79838c5f7 \
+ --hash=sha256:87b0072c4ecc9505cfa16ee734b00cd7721d20a0f595be4d40d3d21b41f65ae2 \
+ --hash=sha256:87fa445064e7db928226b2e6f0d5304ab4cd0339e664a4e9a25029f384d9bb93 \
+ --hash=sha256:89c17d53d75562edfff86679244830599ee0a48efc216200691de8b02ab6b2b8 \
+ --hash=sha256:8b3f68782f3cbd1bce027e48768293072813469af6a61a86f6bb4977a4380f21 \
+ --hash=sha256:a428e25fb7691024de47fecfbff7ff957214da51eddded0da0ae0e0f03a2cf79 \
+ --hash=sha256:b0d1a7afc6e8e4635564ba8aa5c0548e3173e41b6384d7711a9123165f582de2 \
+ --hash=sha256:ba6aba18daf4d36ad4412feede6221414692f44d17e5428bdd81ad3fc1eee5dc \
+ --hash=sha256:cb5c869c2923d56cb0c8e6bcdd73c009c36ae39b652dbe46a05eb4ef0ad01454 \
+ --hash=sha256:d511b3153e7011a27ab6ee6bb3a5404a55b994dc1a7322c0b87b29606d9790e2 \
+ --hash=sha256:db3fe8eaf0612fc8b20fa21a5f25bd785bc3cd5be69f8f3412b0ac2ffd49e733 \
+ --hash=sha256:e6584b12cb06796d285d09e33f63309a09368b9d806a551d8036a4207ea43697 \
+ --hash=sha256:f4b51844ef67d6cf2e9425983274da75f18b1597bb2c998e1c0a0e8d46f8f651 \
+ --hash=sha256:f639065ea2042d5c034bf258a9f085eaa7af0cd250667c0635a3118e8f92c69c
# via
# google-cloud-bigtable
# google-cloud-storage
@@ -1011,6 +1010,7 @@ grpcio==1.62.3 \
# google-api-core
# google-cloud-bigquery
# google-cloud-bigquery-storage
+ # google-cloud-datastore
# googleapis-common-protos
# grpc-google-iam-v1
# grpcio-health-checking
@@ -1262,83 +1262,83 @@ kubernetes==33.1.0 \
--hash=sha256:544de42b24b64287f7e0aa9513c93cb503f7f40eea39b20f66810011a86eabc5 \
--hash=sha256:f64d829843a54c251061a8e7a14523b521f2dc5c896cf6d65ccf348648a88993
# via feast (setup.py)
-librt==0.7.3 \
- --hash=sha256:020c6db391268bcc8ce75105cb572df8cb659a43fd347366aaa407c366e5117a \
- --hash=sha256:0fa9ac2e49a6bee56e47573a6786cb635e128a7b12a0dc7851090037c0d397a3 \
- --hash=sha256:11ad45122bbed42cfc8b0597450660126ef28fd2d9ae1a219bc5af8406f95678 \
- --hash=sha256:120dd21d46ff875e849f1aae19346223cf15656be489242fe884036b23d39e93 \
- --hash=sha256:14569ac5dd38cfccf0a14597a88038fb16811a6fede25c67b79c6d50fc2c8fdc \
- --hash=sha256:1617bea5ab31266e152871208502ee943cb349c224846928a1173c864261375e \
- --hash=sha256:170cdb8436188347af17bf9cccf3249ba581c933ed56d926497119d4cf730cec \
- --hash=sha256:1975eda520957c6e0eb52d12968dd3609ffb7eef05d4223d097893d6daf1d8a7 \
- --hash=sha256:1fe603877e1865b5fd047a5e40379509a4a60204aa7aa0f72b16f7a41c3f0712 \
- --hash=sha256:24d70810f6e2ea853ff79338001533716b373cc0f63e2a0be5bc96129edb5fb5 \
- --hash=sha256:256793988bff98040de23c57cf36e1f4c2f2dc3dcd17537cdac031d3b681db71 \
- --hash=sha256:25711f364c64cab2c910a0247e90b51421e45dbc8910ceeb4eac97a9e132fc6f \
- --hash=sha256:2682162855a708e3270eba4b92026b93f8257c3e65278b456c77631faf0f4f7a \
- --hash=sha256:2cf9d73499486ce39eebbff5f42452518cc1f88d8b7ea4a711ab32962b176ee2 \
- --hash=sha256:2e40520c37926166c24d0c2e0f3bc3a5f46646c34bdf7b4ea9747c297d6ee809 \
- --hash=sha256:2e980cf1ed1a2420a6424e2ed884629cdead291686f1048810a817de07b5eb18 \
- --hash=sha256:2f03484b54bf4ae80ab2e504a8d99d20d551bfe64a7ec91e218010b467d77093 \
- --hash=sha256:35f1609e3484a649bb80431310ddbec81114cd86648f1d9482bc72a3b86ded2e \
- --hash=sha256:399938edbd3d78339f797d685142dd8a623dfaded023cf451033c85955e4838a \
- --hash=sha256:399bbd7bcc1633c3e356ae274a1deb8781c7bf84d9c7962cc1ae0c6e87837292 \
- --hash=sha256:3ec50cf65235ff5c02c5b747748d9222e564ad48597122a361269dd3aa808798 \
- --hash=sha256:3edbf257c40d21a42615e9e332a6b10a8bacaaf58250aed8552a14a70efd0d65 \
- --hash=sha256:440c788f707c061d237c1e83edf6164ff19f5c0f823a3bf054e88804ebf971ec \
- --hash=sha256:44b3689b040df57f492e02cd4f0bacd1b42c5400e4b8048160c9d5e866de8abe \
- --hash=sha256:4887c29cadbdc50640179e3861c276325ff2986791e6044f73136e6e798ff806 \
- --hash=sha256:5460d99ed30f043595bbdc888f542bad2caeb6226b01c33cda3ae444e8f82d42 \
- --hash=sha256:550fdbfbf5bba6a2960b27376ca76d6aaa2bd4b1a06c4255edd8520c306fcfc0 \
- --hash=sha256:56f2a47beda8409061bc1c865bef2d4bd9ff9255219402c0817e68ab5ad89aed \
- --hash=sha256:572a24fc5958c61431da456a0ef1eeea6b4989d81eeb18b8e5f1f3077592200b \
- --hash=sha256:59cb0470612d21fa1efddfa0dd710756b50d9c7fb6c1236bbf8ef8529331dc70 \
- --hash=sha256:6038ccbd5968325a5d6fd393cf6e00b622a8de545f0994b89dd0f748dcf3e19e \
- --hash=sha256:6488e69d408b492e08bfb68f20c4a899a354b4386a446ecd490baff8d0862720 \
- --hash=sha256:687403cced6a29590e6be6964463835315905221d797bc5c934a98750fe1a9af \
- --hash=sha256:6b407c23f16ccc36614c136251d6b32bf30de7a57f8e782378f1107be008ddb0 \
- --hash=sha256:6b4e7bff1d76dd2b46443078519dc75df1b5e01562345f0bb740cea5266d8218 \
- --hash=sha256:6bdd9adfca615903578d2060ee8a6eb1c24eaf54919ff0ddc820118e5718931b \
- --hash=sha256:6eb9295c730e26b849ed1f4022735f36863eb46b14b6e10604c1c39b8b5efaea \
- --hash=sha256:703456146dc2bf430f7832fd1341adac5c893ec3c1430194fdcefba00012555c \
- --hash=sha256:754a0d09997095ad764ccef050dd5bf26cbf457aab9effcba5890dad081d879e \
- --hash=sha256:7af7785f5edd1f418da09a8cdb9ec84b0213e23d597413e06525340bcce1ea4f \
- --hash=sha256:7b29e97273bd6999e2bfe9fe3531b1f4f64effd28327bced048a33e49b99674a \
- --hash=sha256:7b4f57f7a0c65821c5441d98c47ff7c01d359b1e12328219709bdd97fdd37f90 \
- --hash=sha256:8837d5a52a2d7aa9f4c3220a8484013aed1d8ad75240d9a75ede63709ef89055 \
- --hash=sha256:8ccadf260bb46a61b9c7e89e2218f6efea9f3eeaaab4e3d1f58571890e54858e \
- --hash=sha256:8d8cf653e798ee4c4e654062b633db36984a1572f68c3aa25e364a0ddfbbb910 \
- --hash=sha256:93b2a1f325fefa1482516ced160c8c7b4b8d53226763fa6c93d151fa25164207 \
- --hash=sha256:9f0e0927efe87cd42ad600628e595a1a0aa1c64f6d0b55f7e6059079a428641a \
- --hash=sha256:a59a69deeb458c858b8fea6acf9e2acd5d755d76cd81a655256bc65c20dfff5b \
- --hash=sha256:a9f9b661f82693eb56beb0605156c7fca57f535704ab91837405913417d6990b \
- --hash=sha256:abfc57cab3c53c4546aee31859ef06753bfc136c9d208129bad23e2eca39155a \
- --hash=sha256:aca73d70c3f553552ba9133d4a09e767dcfeee352d8d8d3eb3f77e38a3beb3ed \
- --hash=sha256:adeaa886d607fb02563c1f625cf2ee58778a2567c0c109378da8f17ec3076ad7 \
- --hash=sha256:b278a9248a4e3260fee3db7613772ca9ab6763a129d6d6f29555e2f9b168216d \
- --hash=sha256:b7c1239b64b70be7759554ad1a86288220bbb04d68518b527783c4ad3fb4f80b \
- --hash=sha256:bf8c7735fbfc0754111f00edda35cf9e98a8d478de6c47b04eaa9cef4300eaa7 \
- --hash=sha256:c634a0a6db395fdaba0361aa78395597ee72c3aad651b9a307a3a7eaf5efd67e \
- --hash=sha256:cad9971881e4fec00d96af7eaf4b63aa7a595696fc221808b0d3ce7ca9743258 \
- --hash=sha256:cbdb3f337c88b43c3b49ca377731912c101178be91cb5071aac48faa898e6f8e \
- --hash=sha256:cd8551aa21df6c60baa2624fd086ae7486bdde00c44097b32e1d1b1966e365e0 \
- --hash=sha256:d09f677693328503c9e492e33e9601464297c01f9ebd966ea8fc5308f3069bfd \
- --hash=sha256:d376a35c6561e81d2590506804b428fc1075fcc6298fc5bb49b771534c0ba010 \
- --hash=sha256:d39079379a9a28e74f4d57dc6357fa310a1977b51ff12239d7271ec7e71d67f5 \
- --hash=sha256:d86f94743a11873317094326456b23f8a5788bad9161fd2f0e52088c33564620 \
- --hash=sha256:d91e60ac44bbe3a77a67af4a4c13114cbe9f6d540337ce22f2c9eaf7454ca71f \
- --hash=sha256:d9883b2d819ce83f87ba82a746c81d14ada78784db431e57cc9719179847376e \
- --hash=sha256:e094e445c37c57e9ec612847812c301840239d34ccc5d153a982fa9814478c60 \
- --hash=sha256:e19acfde38cb532a560b98f473adc741c941b7a9bc90f7294bc273d08becb58b \
- --hash=sha256:e32d43610dff472eab939f4d7fbdd240d1667794192690433672ae22d7af8445 \
- --hash=sha256:ed028fc3d41adda916320712838aec289956c89b4f0a361ceadf83a53b4c047a \
- --hash=sha256:ef59c938f72bdbc6ab52dc50f81d0637fde0f194b02d636987cea2ab30f8f55a \
- --hash=sha256:f3d4801db8354436fd3936531e7f0e4feb411f62433a6b6cb32bb416e20b529f \
- --hash=sha256:f57aca20e637750a2c18d979f7096e2c2033cc40cf7ed201494318de1182f135 \
- --hash=sha256:f9da128d0edf990cf0d2ca011b02cd6f639e79286774bd5b0351245cbb5a6e51 \
- --hash=sha256:fbd7351d43b80d9c64c3cfcb50008f786cc82cba0450e8599fdd64f264320bd3 \
- --hash=sha256:fcb72249ac4ea81a7baefcbff74df7029c3cb1cf01a711113fa052d563639c9c \
- --hash=sha256:ff21c554304e8226bf80c3a7754be27c6c3549a9fec563a03c06ee8f494da8fc
+librt==0.7.5 \
+ --hash=sha256:060bde69c3604f694bd8ae21a780fe8be46bb3dbb863642e8dfc75c931ca8eee \
+ --hash=sha256:08153ea537609d11f774d2bfe84af39d50d5c9ca3a4d061d946e0c9d8bce04a1 \
+ --hash=sha256:0b4791202296ad51ac09a3ff58eb49d9da8e3a4009167a6d76ac418a974e5fd4 \
+ --hash=sha256:0b7f080ba30601dfa3e3deed3160352273e1b9bc92e652f51103c3e9298f7899 \
+ --hash=sha256:0e2bf8f91093fac43e3eaebacf777f12fd539dce9ec5af3efc6d8424e96ccd49 \
+ --hash=sha256:118716de5ad6726332db1801bc90fa6d94194cd2e07c1a7822cebf12c496714d \
+ --hash=sha256:168e04663e126416ba712114050f413ac306759a1791d87b7c11d4428ba75760 \
+ --hash=sha256:191cbd42660446d67cf7a95ac7bfa60f49b8b3b0417c64f216284a1d86fc9335 \
+ --hash=sha256:263f4fae9eba277513357c871275b18d14de93fd49bf5e43dc60a97b81ad5eb8 \
+ --hash=sha256:265729b551a2dd329cc47b323a182fb7961af42abf21e913c9dd7d3331b2f3c2 \
+ --hash=sha256:26b46620e1e0e45af510d9848ea0915e7040605dd2ae94ebefb6c962cbb6f7ec \
+ --hash=sha256:29c8d2fae11d4379ea207ba7fc69d43237e42cf8a9f90ec6e05993687e6d648b \
+ --hash=sha256:2fcbf2e135c11f721193aa5f42ba112bb1046afafbffd407cbc81d8d735c74d0 \
+ --hash=sha256:39183abee670bc37b85f11e86c44a9cad1ed6efa48b580083e89ecee13dd9717 \
+ --hash=sha256:3919c9407faeeee35430ae135e3a78acd4ecaaaa73767529e2c15ca1d73ba325 \
+ --hash=sha256:3c98a8d0ac9e2a7cb8ff8c53e5d6e8d82bfb2839abf144fdeaaa832f2a12aa45 \
+ --hash=sha256:3dd58f7ce20360c6ce0c04f7bd9081c7f9c19fc6129a3c705d0c5a35439f201d \
+ --hash=sha256:46aa91813c267c3f60db75d56419b42c0c0b9748ec2c568a0e3588e543fb4233 \
+ --hash=sha256:49c596cd18e90e58b7caa4d7ca7606049c1802125fcff96b8af73fa5c3870e4d \
+ --hash=sha256:532ddc6a8a6ca341b1cd7f4d999043e4c71a212b26fe9fd2e7f1e8bb4e873544 \
+ --hash=sha256:54d2aef0b0f5056f130981ad45081b278602ff3657fe16c88529f5058038e802 \
+ --hash=sha256:553dc58987d1d853adda8aeadf4db8e29749f0b11877afcc429a9ad892818ae2 \
+ --hash=sha256:584cb3e605ec45ba350962cec853e17be0a25a772f21f09f1e422f7044ae2a7d \
+ --hash=sha256:5cd3afd71e9bc146203b6c8141921e738364158d4aa7cdb9a874e2505163770f \
+ --hash=sha256:63055d3dda433ebb314c9f1819942f16a19203c454508fdb2d167613f7017169 \
+ --hash=sha256:654fdc971c76348a73af5240d8e2529265b9a7ba6321e38dd5bae7b0d4ab3abe \
+ --hash=sha256:6b7b58913d475911f6f33e8082f19dd9b120c4f4a5c911d07e395d67b81c6982 \
+ --hash=sha256:6e860909fea75baef941ee6436e0453612505883b9d0d87924d4fda27865b9a2 \
+ --hash=sha256:730be847daad773a3c898943cf67fb9845a3961d06fb79672ceb0a8cd8624cfa \
+ --hash=sha256:732e0aa0385b59a1b2545159e781c792cc58ce9c134249233a7c7250a44684c4 \
+ --hash=sha256:75965c1f4efb7234ff52a58b729d245a21e87e4b6a26a0ec08052f02b16274e4 \
+ --hash=sha256:7a488908a470451338607650f1c064175094aedebf4a4fa37890682e30ce0b57 \
+ --hash=sha256:81056e01bba1394f1d92904ec61a4078f66df785316275edbaf51d90da8c6e26 \
+ --hash=sha256:82f3f088482e2229387eadf8215c03f7726d56f69cce8c0c40f0795aebc9b361 \
+ --hash=sha256:84d4a6b9efd6124f728558a18e79e7cc5c5d4efc09b2b846c910de7e564f5bad \
+ --hash=sha256:85f485b7471571e99fab4f44eeb327dc0e1f814ada575f3fa85e698417d8a54e \
+ --hash=sha256:8a3cfb15961e7333ea6ef033dc574af75153b5c230d5ad25fbcd55198f21e0cf \
+ --hash=sha256:8bb7883c1e94ceb87c2bf81385266f032da09cd040e804cc002f2c9d6b842e2f \
+ --hash=sha256:8dcae24de1bc9da93aa689cb6313c70e776d7cea2fcf26b9b6160fedfe6bd9af \
+ --hash=sha256:9937574e6d842f359b8585903d04f5b4ab62277a091a93e02058158074dc52f2 \
+ --hash=sha256:9bbb8facc5375476d392990dd6a71f97e4cb42e2ac66f32e860f6e47299d5e89 \
+ --hash=sha256:9c08527055fbb03c641c15bbc5b79dd2942fb6a3bd8dabf141dd7e97eeea4904 \
+ --hash=sha256:9cffa3ef0af29687455161cb446eff059bf27607f95163d6a37e27bcb37180f6 \
+ --hash=sha256:9f85f9b5db87b0f52e53c68ad2a0c5a53e00afa439bd54a1723742a2b1021276 \
+ --hash=sha256:a82d5a0ee43aeae2116d7292c77cc8038f4841830ade8aa922e098933b468b9e \
+ --hash=sha256:a9eacbf983319b26b5f340a2e0cd47ac1ee4725a7f3a72fd0f15063c934b69d6 \
+ --hash=sha256:ab4b0d3bee6f6ff7017e18e576ac7e41a06697d8dea4b8f3ab9e0c8e1300c409 \
+ --hash=sha256:af69d9e159575e877c7546d1ee817b4ae089aa221dd1117e20c24ad8dc8659c7 \
+ --hash=sha256:b1795c4b2789b458fa290059062c2f5a297ddb28c31e704d27e161386469691a \
+ --hash=sha256:b591c094afd0ffda820e931148c9e48dc31a556dc5b2b9b3cc552fa710d858e4 \
+ --hash=sha256:b8e0fd344bad57026a8f4ccfaf406486c2fc991838050c2fef156170edc3b775 \
+ --hash=sha256:ba1077c562a046208a2dc6366227b3eeae8f2c2ab4b41eaf4fd2fa28cece4203 \
+ --hash=sha256:bb41f04046b4f22b1e7ba5ef513402cd2e3477ec610e5f92d38fe2bba383d419 \
+ --hash=sha256:c039bbf79a9a2498404d1ae7e29a6c175e63678d7a54013a97397c40aee026c5 \
+ --hash=sha256:c566a4672564c5d54d8ab65cdaae5a87ee14c1564c1a2ddc7a9f5811c750f023 \
+ --hash=sha256:cda8b025875946ffff5a9a7590bf9acde3eb02cb6200f06a2d3e691ef3d9955b \
+ --hash=sha256:cdb001a1a0e4f41e613bca2c0fc147fc8a7396f53fc94201cbfd8ec7cd69ca4b \
+ --hash=sha256:cdde31759bd8888f3ef0eebda80394a48961328a17c264dce8cc35f4b9cde35d \
+ --hash=sha256:d2cc7d187e8c6e9b7bdbefa9697ce897a704ea7a7ce844f2b4e0e2aa07ae51d3 \
+ --hash=sha256:d7aa33153a5bb0bac783d2c57885889b1162823384e8313d47800a0e10d0070e \
+ --hash=sha256:d7c72c8756eeb3aefb1b9e3dac7c37a4a25db63640cac0ab6fc18e91a0edf05a \
+ --hash=sha256:dd810f2d39c526c42ea205e0addad5dc08ef853c625387806a29d07f9d150d9b \
+ --hash=sha256:ddc0ab9dbc5f9ceaf2bf7a367bf01f2697660e908f6534800e88f43590b271db \
+ --hash=sha256:ddc4a16207f88f9597b397fc1f60781266d13b13de922ff61c206547a29e4bbd \
+ --hash=sha256:de4221a1181fa9c8c4b5f35506ed6f298948f44003d84d2a8b9885d7e01e6cfa \
+ --hash=sha256:df2e210400b28e50994477ebf82f055698c79797b6ee47a1669d383ca33263e1 \
+ --hash=sha256:df3146d52465b3b6397d25d513f428cb421c18df65b7378667bb5f1e3cc45805 \
+ --hash=sha256:e47fc52602ffc374e69bf1b76536dc99f7f6dd876bd786c8213eaa3598be030a \
+ --hash=sha256:e9e9c988b5ffde7be02180f864cbd17c0b0c1231c235748912ab2afa05789c25 \
+ --hash=sha256:ea1b60b86595a5dc1f57b44a801a1c4d8209c0a69518391d349973a4491408e6 \
+ --hash=sha256:edf6b465306215b19dbe6c3fb63cf374a8f3e1ad77f3b4c16544b83033bbb67b \
+ --hash=sha256:f02c4337bf271c4f06637f5ff254fad2238c0b8e32a3a480ebb2fc5e26f754a5 \
+ --hash=sha256:f7f51ffe59f4556243d3cc82d827bde74765f594fa3ceb80ec4de0c13ccd3416 \
+ --hash=sha256:f952e1a78c480edee8fb43aa2bf2e84dcd46c917d44f8065b883079d3893e8fc \
+ --hash=sha256:fb565b4219abc8ea2402e61c7ba648a62903831059ed3564fa1245cc245d58d7 \
+ --hash=sha256:fee15c2a190ef389f14928135c6fb2d25cd3fdb7887bfd9a7b444bbdc8c06b96
# via mypy
locket==1.0.0 \
--hash=sha256:5c0d4c052a8bbbf750e056a8e65ccd309086f4f0f18a2eac306a8dfa4112a632 \
@@ -1439,9 +1439,9 @@ markupsafe==3.0.3 \
--hash=sha256:f9e130248f4462aaa8e2552d547f36ddadbeaa573879158d721bbd33dfe4743a \
--hash=sha256:fed51ac40f757d41b7c48425901843666a6677e3e8eb0abcff09e4ba6e664f50
# via jinja2
-mcp==1.23.3 \
- --hash=sha256:32768af4b46a1b4f7df34e2bfdf5c6011e7b63d7f1b0e321d0fdef4cd6082031 \
- --hash=sha256:b3b0da2cc949950ce1259c7bfc1b081905a51916fcd7c8182125b85e70825201
+mcp==1.25.0 \
+ --hash=sha256:56310361ebf0364e2d438e5b45f7668cbb124e158bb358333cd06e49e83a6802 \
+ --hash=sha256:b37c38144a666add0862614cc79ec276e97d72aa8ca26d622818d4e278b9721a
# via fastapi-mcp
mdurl==0.1.2 \
--hash=sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8 \
@@ -1731,125 +1731,123 @@ multidict==6.7.0 \
# aiobotocore
# aiohttp
# yarl
-mypy==1.19.0 \
- --hash=sha256:0c01c99d626380752e527d5ce8e69ffbba2046eb8a060db0329690849cf9b6f9 \
- --hash=sha256:0dde5cb375cb94deff0d4b548b993bec52859d1651e073d63a1386d392a95495 \
- --hash=sha256:0e3c3d1e1d62e678c339e7ade72746a9e0325de42cd2cccc51616c7b2ed1a018 \
- --hash=sha256:0ea4fd21bb48f0da49e6d3b37ef6bd7e8228b9fe41bbf4d80d9364d11adbd43c \
- --hash=sha256:0fb3115cb8fa7c5f887c8a8d81ccdcb94cff334684980d847e5a62e926910e1d \
- --hash=sha256:11f7254c15ab3f8ed68f8e8f5cbe88757848df793e31c36aaa4d4f9783fd08ab \
- --hash=sha256:120cffe120cca5c23c03c77f84abc0c14c5d2e03736f6c312480020082f1994b \
- --hash=sha256:16f76ff3f3fd8137aadf593cb4607d82634fca675e8211ad75c43d86033ee6c6 \
- --hash=sha256:1cf9c59398db1c68a134b0b5354a09a1e124523f00bacd68e553b8bd16ff3299 \
- --hash=sha256:318ba74f75899b0e78b847d8c50821e4c9637c79d9a59680fc1259f29338cb3e \
- --hash=sha256:3210d87b30e6af9c8faed61be2642fcbe60ef77cec64fa1ef810a630a4cf671c \
- --hash=sha256:34ec1ac66d31644f194b7c163d7f8b8434f1b49719d403a5d26c87fff7e913f7 \
- --hash=sha256:37af5166f9475872034b56c5efdcf65ee25394e9e1d172907b84577120714364 \
- --hash=sha256:3ad925b14a0bb99821ff6f734553294aa6a3440a8cb082fe1f5b84dfb662afb1 \
- --hash=sha256:510c014b722308c9bd377993bcbf9a07d7e0692e5fa8fc70e639c1eb19fc6bee \
- --hash=sha256:6016c52ab209919b46169651b362068f632efcd5eb8ef9d1735f6f86da7853b2 \
- --hash=sha256:6148ede033982a8c5ca1143de34c71836a09f105068aaa8b7d5edab2b053e6c8 \
- --hash=sha256:63ea6a00e4bd6822adbfc75b02ab3653a17c02c4347f5bb0cf1d5b9df3a05835 \
- --hash=sha256:7686ed65dbabd24d20066f3115018d2dce030d8fa9db01aa9f0a59b6813e9f9e \
- --hash=sha256:7a500ab5c444268a70565e374fc803972bfd1f09545b13418a5174e29883dab7 \
- --hash=sha256:8f44f2ae3c58421ee05fe609160343c25f70e3967f6e32792b5a78006a9d850f \
- --hash=sha256:a18d8abdda14035c5718acb748faec09571432811af129bf0d9e7b2d6699bf18 \
- --hash=sha256:a31e4c28e8ddb042c84c5e977e28a21195d086aaffaf08b016b78e19c9ef8106 \
- --hash=sha256:a9ac09e52bb0f7fb912f5d2a783345c72441a08ef56ce3e17c1752af36340a39 \
- --hash=sha256:b9d491295825182fba01b6ffe2c6fe4e5a49dbf4e2bb4d1217b6ced3b4797bc6 \
- --hash=sha256:c14a98bc63fd867530e8ec82f217dae29d0550c86e70debc9667fff1ec83284e \
- --hash=sha256:c3385246593ac2b97f155a0e9639be906e73534630f663747c71908dfbf26134 \
- --hash=sha256:cabbee74f29aa9cd3b444ec2f1e4fa5a9d0d746ce7567a6a609e224429781f53 \
- --hash=sha256:cb64b0ba5980466a0f3f9990d1c582bcab8db12e29815ecb57f1408d99b4bff7 \
- --hash=sha256:cf7d84f497f78b682edd407f14a7b6e1a2212b433eedb054e2081380b7395aa3 \
- --hash=sha256:e2c1101ab41d01303103ab6ef82cbbfedb81c1a060c868fa7cc013d573d37ab5 \
- --hash=sha256:f188dcf16483b3e59f9278c4ed939ec0254aa8a60e8fc100648d9ab5ee95a431 \
- --hash=sha256:f2e36bed3c6d9b5f35d28b63ca4b727cb0228e480826ffc8953d1892ddc8999d \
- --hash=sha256:f3e19e3b897562276bb331074d64c076dbdd3e79213f36eed4e592272dabd760 \
- --hash=sha256:f6b874ca77f733222641e5c46e4711648c4037ea13646fd0cdc814c2eaec2528 \
- --hash=sha256:f75e60aca3723a23511948539b0d7ed514dda194bc3755eae0bfc7a6b4887aa7 \
- --hash=sha256:fc51a5b864f73a3a182584b1ac75c404396a17eced54341629d8bdcb644a5bba \
- --hash=sha256:fd4a985b2e32f23bead72e2fb4bbe5d6aceee176be471243bd831d5b2644672d
+mypy==1.19.1 \
+ --hash=sha256:016f2246209095e8eda7538944daa1d60e1e8134d98983b9fc1e92c1fc0cb8dd \
+ --hash=sha256:022ea7279374af1a5d78dfcab853fe6a536eebfda4b59deab53cd21f6cd9f00b \
+ --hash=sha256:06e6170bd5836770e8104c8fdd58e5e725cfeb309f0a6c681a811f557e97eac1 \
+ --hash=sha256:19d88bb05303fe63f71dd2c6270daca27cb9401c4ca8255fe50d1d920e0eb9ba \
+ --hash=sha256:21761006a7f497cb0d4de3d8ef4ca70532256688b0523eee02baf9eec895e27b \
+ --hash=sha256:28902ee51f12e0f19e1e16fbe2f8f06b6637f482c459dd393efddd0ec7f82045 \
+ --hash=sha256:2899753e2f61e571b3971747e302d5f420c3fd09650e1951e99f823bc3089dac \
+ --hash=sha256:2abb24cf3f17864770d18d673c85235ba52456b36a06b6afc1e07c1fdcd3d0e6 \
+ --hash=sha256:34c81968774648ab5ac09c29a375fdede03ba253f8f8287847bd480782f73a6a \
+ --hash=sha256:409088884802d511ee52ca067707b90c883426bd95514e8cfda8281dc2effe24 \
+ --hash=sha256:481daf36a4c443332e2ae9c137dfee878fcea781a2e3f895d54bd3002a900957 \
+ --hash=sha256:4b84a7a18f41e167f7995200a1d07a4a6810e89d29859df936f1c3923d263042 \
+ --hash=sha256:4f28f99c824ecebcdaa2e55d82953e38ff60ee5ec938476796636b86afa3956e \
+ --hash=sha256:5f05aa3d375b385734388e844bc01733bd33c644ab48e9684faa54e5389775ec \
+ --hash=sha256:7bcfc336a03a1aaa26dfce9fff3e287a3ba99872a157561cbfcebe67c13308e3 \
+ --hash=sha256:804bd67b8054a85447c8954215a906d6eff9cabeabe493fb6334b24f4bfff718 \
+ --hash=sha256:8bb5c6f6d043655e055be9b542aa5f3bdd30e4f3589163e85f93f3640060509f \
+ --hash=sha256:a009ffa5a621762d0c926a078c2d639104becab69e79538a494bcccb62cc0331 \
+ --hash=sha256:a8174a03289288c1f6c46d55cef02379b478bfbc8e358e02047487cad44c6ca1 \
+ --hash=sha256:ab43590f9cd5108f41aacf9fca31841142c786827a74ab7cc8a2eacb634e09a1 \
+ --hash=sha256:b10e7c2cd7870ba4ad9b2d8a6102eb5ffc1f16ca35e3de6bfa390c1113029d13 \
+ --hash=sha256:b13cfdd6c87fc3efb69ea4ec18ef79c74c3f98b4e5498ca9b85ab3b2c2329a67 \
+ --hash=sha256:b64d987153888790bcdb03a6473d321820597ab8dd9243b27a92153c4fa50fd2 \
+ --hash=sha256:b7951a701c07ea584c4fe327834b92a30825514c868b1f69c30445093fdd9d5a \
+ --hash=sha256:bdb12f69bcc02700c2b47e070238f42cb87f18c0bc1fc4cdb4fb2bc5fd7a3b8b \
+ --hash=sha256:c35d298c2c4bba75feb2195655dfea8124d855dfd7343bf8b8c055421eaf0cf8 \
+ --hash=sha256:c608937067d2fc5a4dd1a5ce92fd9e1398691b8c5d012d66e1ddd430e9244376 \
+ --hash=sha256:c9a6538e0415310aad77cb94004ca6482330fece18036b5f360b62c45814c4ef \
+ --hash=sha256:d8dfc6ab58ca7dda47d9237349157500468e404b17213d44fc1cb77bce532288 \
+ --hash=sha256:da4869fc5e7f62a88f3fe0b5c919d1d9f7ea3cef92d3689de2823fd27e40aa75 \
+ --hash=sha256:de759aafbae8763283b2ee5869c7255391fbc4de3ff171f8f030b5ec48381b74 \
+ --hash=sha256:e3157c7594ff2ef1634ee058aafc56a82db665c9438fd41b390f3bde1ab12250 \
+ --hash=sha256:e3f276d8493c3c97930e354b2595a44a21348b320d859fb4a2b9f66da9ed27ab \
+ --hash=sha256:ee4c11e460685c3e0c64a4c5de82ae143622410950d6be863303a1c4ba0e36d6 \
+ --hash=sha256:f1235f5ea01b7db5468d53ece6aaddf1ad0b88d9e7462b86ef96fe04995d7247 \
+ --hash=sha256:f7cee03c9a2e2ee26ec07479f38ea9c884e301d42c6d43a19d20fb014e3ba925 \
+ --hash=sha256:f859fb09d9583a985be9a493d5cfc5515b56b08f7447759a0c5deaf68d80506e \
+ --hash=sha256:ffcebe56eb09ff0c0885e750036a095e23793ba6c2e894e7e63f6d89ad51f22e
# via sqlalchemy
mypy-extensions==1.1.0 \
--hash=sha256:1be4cccdb0f2482337c4743e60421de3a356cd97508abadd57d47403e94f5505 \
--hash=sha256:52e68efc3284861e772bbcd66823fde5ae21fd2fdb51c62a211403730b916558
# via mypy
-numpy==2.3.5 \
- --hash=sha256:00dc4e846108a382c5869e77c6ed514394bdeb3403461d25a829711041217d5b \
- --hash=sha256:0472f11f6ec23a74a906a00b48a4dcf3849209696dff7c189714511268d103ae \
- --hash=sha256:04822c00b5fd0323c8166d66c701dc31b7fbd252c100acd708c48f763968d6a3 \
- --hash=sha256:052e8c42e0c49d2575621c158934920524f6c5da05a1d3b9bab5d8e259e045f0 \
- --hash=sha256:09a1bea522b25109bf8e6f3027bd810f7c1085c64a0c7ce050c1676ad0ba010b \
- --hash=sha256:0cd00b7b36e35398fa2d16af7b907b65304ef8bb4817a550e06e5012929830fa \
- --hash=sha256:0d8163f43acde9a73c2a33605353a4f1bc4798745a8b1d73183b28e5b435ae28 \
- --hash=sha256:1062fde1dcf469571705945b0f221b73928f34a20c904ffb45db101907c3454e \
- --hash=sha256:11e06aa0af8c0f05104d56450d6093ee639e15f24ecf62d417329d06e522e017 \
- --hash=sha256:17531366a2e3a9e30762c000f2c43a9aaa05728712e25c11ce1dbe700c53ad41 \
- --hash=sha256:1978155dd49972084bd6ef388d66ab70f0c323ddee6f693d539376498720fb7e \
- --hash=sha256:1ed1ec893cff7040a02c8aa1c8611b94d395590d553f6b53629a4461dc7f7b63 \
- --hash=sha256:2dcd0808a421a482a080f89859a18beb0b3d1e905b81e617a188bd80422d62e9 \
- --hash=sha256:2e2eb32ddb9ccb817d620ac1d8dae7c3f641c1e5f55f531a33e8ab97960a75b8 \
- --hash=sha256:2feae0d2c91d46e59fcd62784a3a83b3fb677fead592ce51b5a6fbb4f95965ff \
- --hash=sha256:3095bdb8dd297e5920b010e96134ed91d852d81d490e787beca7e35ae1d89cf7 \
- --hash=sha256:30bc11310e8153ca664b14c5f1b73e94bd0503681fcf136a163de856f3a50139 \
- --hash=sha256:3101e5177d114a593d79dd79658650fe28b5a0d8abeb8ce6f437c0e6df5be1a4 \
- --hash=sha256:396084a36abdb603546b119d96528c2f6263921c50df3c8fd7cb28873a237748 \
- --hash=sha256:3997b5b3c9a771e157f9aae01dd579ee35ad7109be18db0e85dbdbe1de06e952 \
- --hash=sha256:414802f3b97f3c1eef41e530aaba3b3c1620649871d8cb38c6eaff034c2e16bd \
- --hash=sha256:51c1e14eb1e154ebd80e860722f9e6ed6ec89714ad2db2d3aa33c31d7c12179b \
- --hash=sha256:51c55fe3451421f3a6ef9a9c1439e82101c57a2c9eab9feb196a62b1a10b58ce \
- --hash=sha256:5ee6609ac3604fa7780e30a03e5e241a7956f8e2fcfe547d51e3afa5247ac47f \
- --hash=sha256:612a95a17655e213502f60cfb9bf9408efdc9eb1d5f50535cc6eb365d11b42b5 \
- --hash=sha256:6203fdf9f3dc5bdaed7319ad8698e685c7a3be10819f41d32a0723e611733b42 \
- --hash=sha256:63c0e9e7eea69588479ebf4a8a270d5ac22763cc5854e9a7eae952a3908103f7 \
- --hash=sha256:66f85ce62c70b843bab1fb14a05d5737741e74e28c7b8b5a064de10142fad248 \
- --hash=sha256:6cf9b429b21df6b99f4dee7a1218b8b7ffbbe7df8764dc0bd60ce8a0708fed1e \
- --hash=sha256:70b37199913c1bd300ff6e2693316c6f869c7ee16378faf10e4f5e3275b299c3 \
- --hash=sha256:727fd05b57df37dc0bcf1a27767a3d9a78cbbc92822445f32cc3436ba797337b \
- --hash=sha256:74ae7b798248fe62021dbf3c914245ad45d1a6b0cb4a29ecb4b31d0bfbc4cc3e \
- --hash=sha256:784db1dcdab56bf0517743e746dfb0f885fc68d948aba86eeec2cba234bdf1c0 \
- --hash=sha256:86945f2ee6d10cdfd67bcb4069c1662dd711f7e2a4343db5cecec06b87cf31aa \
- --hash=sha256:86d835afea1eaa143012a2d7a3f45a3adce2d7adc8b4961f0b362214d800846a \
- --hash=sha256:872a5cf366aec6bb1147336480fef14c9164b154aeb6542327de4970282cd2f5 \
- --hash=sha256:8b973c57ff8e184109db042c842423ff4f60446239bd585a5131cc47f06f789d \
- --hash=sha256:8cba086a43d54ca804ce711b2a940b16e452807acebe7852ff327f1ecd49b0d4 \
- --hash=sha256:8f7f0e05112916223d3f438f293abf0727e1181b5983f413dfa2fefc4098245c \
- --hash=sha256:900218e456384ea676e24ea6a0417f030a3b07306d29d7ad843957b40a9d8d52 \
- --hash=sha256:93eebbcf1aafdf7e2ddd44c2923e2672e1010bddc014138b229e49725b4d6be5 \
- --hash=sha256:9c75442b2209b8470d6d5d8b1c25714270686f14c749028d2199c54e29f20b4d \
- --hash=sha256:9ee2197ef8c4f0dfe405d835f3b6a14f5fee7782b5de51ba06fb65fc9b36e9f1 \
- --hash=sha256:a414504bef8945eae5f2d7cb7be2d4af77c5d1cb5e20b296c2c25b61dff2900c \
- --hash=sha256:a4b9159734b326535f4dd01d947f919c6eefd2d9827466a696c44ced82dfbc18 \
- --hash=sha256:a80afd79f45f3c4a7d341f13acbe058d1ca8ac017c165d3fa0d3de6bc1a079d7 \
- --hash=sha256:aa5bc7c5d59d831d9773d1170acac7893ce3a5e130540605770ade83280e7188 \
- --hash=sha256:acfd89508504a19ed06ef963ad544ec6664518c863436306153e13e94605c218 \
- --hash=sha256:aeffcab3d4b43712bb7a60b65f6044d444e75e563ff6180af8f98dd4b905dfd2 \
- --hash=sha256:afaffc4393205524af9dfa400fa250143a6c3bc646c08c9f5e25a9f4b4d6a903 \
- --hash=sha256:b0c7088a73aef3d687c4deef8452a3ac7c1be4e29ed8bf3b366c8111128ac60c \
- --hash=sha256:b46b4ec24f7293f23adcd2d146960559aaf8020213de8ad1909dba6c013bf89c \
- --hash=sha256:b501b5fa195cc9e24fe102f21ec0a44dffc231d2af79950b451e0d99cea02234 \
- --hash=sha256:bf06bc2af43fa8d32d30fae16ad965663e966b1a3202ed407b84c989c3221e82 \
- --hash=sha256:c804e3a5aba5460c73955c955bdbd5c08c354954e9270a2c1565f62e866bdc39 \
- --hash=sha256:c8a9958e88b65c3b27e22ca2a076311636850b612d6bbfb76e8d156aacde2aaf \
- --hash=sha256:cc0a57f895b96ec78969c34f682c602bf8da1a0270b09bc65673df2e7638ec20 \
- --hash=sha256:cc8920d2ec5fa99875b670bb86ddeb21e295cb07aa331810d9e486e0b969d946 \
- --hash=sha256:ccc933afd4d20aad3c00bcef049cb40049f7f196e0397f1109dba6fed63267b0 \
- --hash=sha256:ce581db493ea1a96c0556360ede6607496e8bf9b3a8efa66e06477267bc831e9 \
- --hash=sha256:d0f23b44f57077c1ede8c5f26b30f706498b4862d3ff0a7298b8411dd2f043ff \
- --hash=sha256:d21644de1b609825ede2f48be98dfde4656aefc713654eeee280e37cadc4e0ad \
- --hash=sha256:d6889ec4ec662a1a37eb4b4fb26b6100841804dac55bd9df579e326cdc146227 \
- --hash=sha256:de5672f4a7b200c15a4127042170a694d4df43c992948f5e1af57f0174beed10 \
- --hash=sha256:e6a0bc88393d65807d751a614207b7129a310ca4fe76a74e5c7da5fa5671417e \
- --hash=sha256:ed89927b86296067b4f81f108a2271d8926467a8868e554eaf370fc27fa3ccaf \
- --hash=sha256:ee3888d9ff7c14604052b2ca5535a30216aa0a58e948cdd3eeb8d3415f638769 \
- --hash=sha256:f0963b55cdd70fad460fa4c1341f12f976bb26cb66021a5580329bd498988310 \
- --hash=sha256:f16417ec91f12f814b10bafe79ef77e70113a2f5f7018640e7425ff979253425 \
- --hash=sha256:f28620fe26bee16243be2b7b874da327312240a7cdc38b769a697578d2100013 \
- --hash=sha256:f4255143f5160d0de972d28c8f9665d882b5f61309d8362fdd3e103cf7bf010c \
- --hash=sha256:ffac52f28a7849ad7576293c0cb7b9f08304e8f7d738a8cb8a90ec4c55a998eb \
- --hash=sha256:ffe22d2b05504f786c867c8395de703937f934272eb67586817b46188b4ded6d \
- --hash=sha256:fffe29a1ef00883599d1dc2c51aa2e5d80afe49523c261a74933df395c15c520
+numpy==2.4.0 \
+ --hash=sha256:009bd0ea12d3c784b6639a8457537016ce5172109e585338e11334f6a7bb88ee \
+ --hash=sha256:02a2038eb27f9443a8b266a66911e926566b5a6ffd1a689b588f7f35b81e7dc3 \
+ --hash=sha256:0804a8e4ab070d1d35496e65ffd3cf8114c136a2b81f61dfab0de4b218aacfd5 \
+ --hash=sha256:0feafc9e03128074689183031181fac0897ff169692d8492066e949041096548 \
+ --hash=sha256:1889b3a3f47a7b5bee16bc25a2145bd7cb91897f815ce3499db64c7458b6d91d \
+ --hash=sha256:1d8f9fde5f6dc1b6fc34df8162f3b3079365468703fee7f31d4e0cc8c63baed9 \
+ --hash=sha256:1ee32359fb7543b7b7bd0b2f46294db27e29e7bbdf70541e81b190836cd83ded \
+ --hash=sha256:20c115517513831860c573996e395707aa9fb691eb179200125c250e895fcd93 \
+ --hash=sha256:21555da4ec4a0c942520ead42c3b0dc9477441e085c42b0fbdd6a084869a6f6b \
+ --hash=sha256:23a3e9d1a6f360267e8fbb38ba5db355a6a7e9be71d7fce7ab3125e88bb646c8 \
+ --hash=sha256:2a8b6bb8369abefb8bd1801b054ad50e02b3275c8614dc6e5b0373c305291037 \
+ --hash=sha256:2e284ca13d5a8367e43734148622caf0b261b275673823593e3e3634a6490f83 \
+ --hash=sha256:2f585f52b2baf07ff3356158d9268ea095e221371f1074fadea2f42544d58b4d \
+ --hash=sha256:316b2f2584682318539f0bcaca5a496ce9ca78c88066579ebd11fd06f8e4741e \
+ --hash=sha256:32ed06d0fe9cae27d8fb5f400c63ccee72370599c75e683a6358dd3a4fb50aaf \
+ --hash=sha256:355354388cba60f2132df297e2d53053d4063f79077b67b481d21276d61fc4df \
+ --hash=sha256:35ddc8f4914466e6fc954c76527aa91aa763682a4f6d73249ef20b418fe6effb \
+ --hash=sha256:36667db4d6c1cea79c8930ab72fadfb4060feb4bfe724141cd4bd064d2e5f8ce \
+ --hash=sha256:36cbfb13c152b1c7c184ddac43765db8ad672567e7bafff2cc755a09917ed2e6 \
+ --hash=sha256:39699233bc72dd482da1415dcb06076e32f60eddc796a796c5fb6c5efce94667 \
+ --hash=sha256:39b19251dec4de8ff8496cd0806cbe27bf0684f765abb1f4809554de93785f2d \
+ --hash=sha256:3d857f55e7fdf7c38ab96c4558c95b97d1c685be6b05c249f5fdafcbd6f9899e \
+ --hash=sha256:3de19cfecd1465d0dcf8a5b5ea8b3155b42ed0b639dba4b71e323d74f2a3be5e \
+ --hash=sha256:3f3096405acc48887458bbf9f6814d43785ac7ba2a57ea6442b581dedbc60ce6 \
+ --hash=sha256:40483b2f2d3ba7aad426443767ff5632ec3156ef09742b96913787d13c336471 \
+ --hash=sha256:413aa561266a4be2d06cd2b9665e89d9f54c543f418773076a76adcf2af08bc7 \
+ --hash=sha256:44aba2f0cafd287871a495fb3163408b0bd25bbce135c6f621534a07f4f7875c \
+ --hash=sha256:49ff32b09f5aa0cd30a20c2b39db3e669c845589f2b7fc910365210887e39344 \
+ --hash=sha256:4d1cfce39e511069b11e67cd0bd78ceff31443b7c9e5c04db73c7a19f572967c \
+ --hash=sha256:57c540ed8fb1f05cb997c6761cd56db72395b0d6985e90571ff660452ade4f98 \
+ --hash=sha256:5f48cb3e88fbc294dc90e215d86fbaf1c852c63dbdb6c3a3e63f45c4b57f7344 \
+ --hash=sha256:5fe44e277225fd3dff6882d86d3d447205d43532c3627313d17e754fb3905a0e \
+ --hash=sha256:60e8c196cd82cbbd4f130b5290007e13e6de3eca79f0d4d38014769d96a7c475 \
+ --hash=sha256:65167da969cd1ec3a1df31cb221ca3a19a8aaa25370ecb17d428415e93c1935e \
+ --hash=sha256:680060061adb2d74ce352628cb798cfdec399068aa7f07ba9fb818b2b3305f98 \
+ --hash=sha256:6bbaebf0d11567fa8926215ae731e1d58e6ec28a8a25235b8a47405d301332db \
+ --hash=sha256:6c05483c3136ac4c91b4e81903cb53a8707d316f488124d0398499a4f8e8ef51 \
+ --hash=sha256:6dc8b7e2f4eb184b37655195f421836cfae6f58197b67e3ffc501f1333d993fa \
+ --hash=sha256:6e504f7b16118198f138ef31ba24d985b124c2c469fe8467007cf30fd992f934 \
+ --hash=sha256:74623f2ab5cc3f7c886add4f735d1031a1d2be4a4ae63c0546cfd74e7a31ddf6 \
+ --hash=sha256:77f0d13fa87036d7553bf81f0e1fe3ce68d14c9976c9851744e4d3e91127e95f \
+ --hash=sha256:85eef4cb5625c47ee6425c58a3502555e10f45ee973da878ac8248ad58c136f3 \
+ --hash=sha256:882567b7ae57c1b1a0250208cc21a7976d8cbcc49d5a322e607e6f09c9e0bd53 \
+ --hash=sha256:8b986403023c8f3bf8f487c2e6186afda156174d31c175f747d8934dfddf3479 \
+ --hash=sha256:8cfa5f29a695cb7438965e6c3e8d06e0416060cf0d709c1b1c1653a939bf5c2a \
+ --hash=sha256:8eafe7c36c8430b7794edeab3087dec7bf31d634d92f2af9949434b9d1964cba \
+ --hash=sha256:9198f447e1dc5647d07c9a6bbe2063cc0132728cc7175b39dbc796da5b54920d \
+ --hash=sha256:92190db305a6f48734d3982f2c60fa30d6b5ee9bff10f2887b930d7b40119f4c \
+ --hash=sha256:927ccf5cd17c48f801f4ed43a7e5673a2724bd2171460be3e3894e6e332ef83a \
+ --hash=sha256:98e81648e0b36e325ab67e46b5400a7a6d4a22b8a7c8e8bbfe20e7db7906bf95 \
+ --hash=sha256:9a818668b674047fd88c4cddada7ab8f1c298812783e8328e956b78dc4807f9f \
+ --hash=sha256:a152d86a3ae00ba5f47b3acf3b827509fd0b6cb7d3259665e63dafbad22a75ea \
+ --hash=sha256:a2718c1de8504121714234b6f8241d0019450353276c88b9453c9c3d92e101db \
+ --hash=sha256:a39fb973a726e63223287adc6dafe444ce75af952d711e400f3bf2b36ef55a7b \
+ --hash=sha256:a899699294f28f7be8992853c0c60741f16ff199205e2e6cdca155762cbaa59d \
+ --hash=sha256:a8fdfed3deaf1928fb7667d96e0567cdf58c2b370ea2ee7e586aa383ec2cb346 \
+ --hash=sha256:aabb081ca0ec5d39591fc33018cd4b3f96e1a2dd6756282029986d00a785fba4 \
+ --hash=sha256:b1f5b45829ac1848893f0ddf5cb326110604d6df96cdc255b0bf9edd154104d4 \
+ --hash=sha256:b48e35f4ab6f6a7597c46e301126ceba4c44cd3280e3750f85db48b082624fa4 \
+ --hash=sha256:b54c83f1c0c0f1d748dca0af516062b8829d53d1f0c402be24b4257a9c48ada6 \
+ --hash=sha256:ba0cb30acd3ef11c94dc27fbfba68940652492bc107075e7ffe23057f9425681 \
+ --hash=sha256:bb50ce5fb202a26fd5404620e7ef820ad1ab3558b444cb0b55beb7ef66cd2d63 \
+ --hash=sha256:c95eb6db2884917d86cde0b4d4cf31adf485c8ec36bf8696dd66fa70de96f36b \
+ --hash=sha256:d0ffd9e2e4441c96a9c91ec1783285d80bf835b677853fc2770a89d50c1e48ac \
+ --hash=sha256:d57b5046c120561ba8fa8e4030fbb8b822f3063910fa901ffadf16e2b7128ad6 \
+ --hash=sha256:d9e6a7664ddd9746e20b7325351fe1a8408d0a2bf9c63b5e898290ddc8f09544 \
+ --hash=sha256:dc578891de1db95b2a35001b695451767b580bb45753717498213c5ff3c41d63 \
+ --hash=sha256:e0434aa22c821f44eeb4c650b81c7fbdd8c0122c6c4b5a576a76d5a35625ecd9 \
+ --hash=sha256:e06a922a469cae9a57100864caf4f8a97a1026513793969f8ba5b63137a35d25 \
+ --hash=sha256:e493962256a38f58283de033d8af176c5c91c084ea30f15834f7545451c42059 \
+ --hash=sha256:ecb0019d44f4cdb50b676c5d0cb4b1eae8e15d1ed3d3e6639f986fc92b2ec52c \
+ --hash=sha256:f935c4493eda9069851058fa0d9e39dbf6286be690066509305e52912714dbb2
# via
# feast (setup.py)
# dask
@@ -1947,9 +1945,9 @@ pandas==2.3.3 \
# pandas-gbq
# pymilvus
# snowflake-connector-python
-pandas-gbq==0.31.1 \
- --hash=sha256:a5d6e897917302c50feaca2ed1ce6a284abd8b9139383bf063307aab8d0556d9 \
- --hash=sha256:c59878504adee211cf1c34b22cf94393c59cc953626c61ce76e06c8d25fd146d
+pandas-gbq==0.32.0 \
+ --hash=sha256:249623d574c65e98cf19b7b7ecda97729f4f0a843eae3a0a82d9ef50adcdf4ef \
+ --hash=sha256:28018ff09f2e49ab2b01a11329bd4e562fd65da406030b4a8001a3a4e80a1e34
# via google-cloud-bigquery
parsy==2.2 \
--hash=sha256:5e981613d9d2d8b68012d1dd0afe928967bea2e4eefdb76c2f545af0dd02a9e7 \
@@ -2123,9 +2121,9 @@ propcache==0.4.1 \
# via
# aiohttp
# yarl
-proto-plus==1.26.1 \
- --hash=sha256:13285478c2dcf2abb829db158e1047e2f1e8d63a077d94263c2b88b043c75a66 \
- --hash=sha256:21a515a4c4c0088a773899e23c7bbade3d18f9c66c73edd4c7ee3816bc96a012
+proto-plus==1.27.0 \
+ --hash=sha256:1baa7f81cf0f8acb8bc1f6d085008ba4171eaf669629d1b6d1673b21ed1c0a82 \
+ --hash=sha256:873af56dd0d7e91836aee871e5799e1c6f1bda86ac9a983e0bb9f0c266a568c4
# via
# google-api-core
# google-cloud-bigquery-storage
@@ -2156,26 +2154,28 @@ protobuf==6.33.2 \
# proto-plus
# pymilvus
# substrait
-psutil==7.1.3 \
- --hash=sha256:0005da714eee687b4b8decd3d6cc7c6db36215c9e74e5ad2264b90c3df7d92dc \
- --hash=sha256:1068c303be3a72f8e18e412c5b2a8f6d31750fb152f9cb106b54090296c9d251 \
- --hash=sha256:18349c5c24b06ac5612c0428ec2a0331c26443d259e2a0144a9b24b4395b58fa \
- --hash=sha256:19644c85dcb987e35eeeaefdc3915d059dac7bd1167cdcdbf27e0ce2df0c08c0 \
- --hash=sha256:2bdbcd0e58ca14996a42adf3621a6244f1bb2e2e528886959c72cf1e326677ab \
- --hash=sha256:31d77fcedb7529f27bb3a0472bea9334349f9a04160e8e6e5020f22c59893264 \
- --hash=sha256:3792983e23b69843aea49c8f5b8f115572c5ab64c153bada5270086a2123c7e7 \
- --hash=sha256:3bb428f9f05c1225a558f53e30ccbad9930b11c3fc206836242de1091d3e7dd3 \
- --hash=sha256:56d974e02ca2c8eb4812c3f76c30e28836fffc311d55d979f1465c1feeb2b68b \
- --hash=sha256:6c86281738d77335af7aec228328e944b30930899ea760ecf33a4dba66be5e74 \
- --hash=sha256:8f33a3702e167783a9213db10ad29650ebf383946e91bc77f28a5eb083496bc9 \
- --hash=sha256:95ef04cf2e5ba0ab9eaafc4a11eaae91b44f4ef5541acd2ee91d9108d00d59a7 \
- --hash=sha256:ad81425efc5e75da3f39b3e636293360ad8d0b49bed7df824c79764fb4ba9b8b \
- --hash=sha256:b403da1df4d6d43973dc004d19cee3b848e998ae3154cc8097d139b77156c353 \
- --hash=sha256:bc31fa00f1fbc3c3802141eede66f3a2d51d89716a194bf2cd6fc68310a19880 \
- --hash=sha256:bd0d69cee829226a761e92f28140bec9a5ee9d5b4fb4b0cc589068dbfff559b1 \
- --hash=sha256:c525ffa774fe4496282fb0b1187725793de3e7c6b29e41562733cae9ada151ee \
- --hash=sha256:f39c2c19fe824b47484b96f9692932248a54c43799a84282cfe58d05a6449efd \
- --hash=sha256:fac9cd332c67f4422504297889da5ab7e05fd11e3c4392140f7370f4208ded1f
+psutil==7.2.1 \
+ --hash=sha256:05cc68dbb8c174828624062e73078e7e35406f4ca2d0866c272c2410d8ef06d1 \
+ --hash=sha256:08a2f175e48a898c8eb8eace45ce01777f4785bc744c90aa2cc7f2fa5462a266 \
+ --hash=sha256:0d67c1822c355aa6f7314d92018fb4268a76668a536f133599b91edd48759442 \
+ --hash=sha256:2ceae842a78d1603753561132d5ad1b2f8a7979cb0c283f5b52fb4e6e14b1a79 \
+ --hash=sha256:35630d5af80d5d0d49cfc4d64c1c13838baf6717a13effb35869a5919b854cdf \
+ --hash=sha256:3fce5f92c22b00cdefd1645aa58ab4877a01679e901555067b1bd77039aa589f \
+ --hash=sha256:494c513ccc53225ae23eec7fe6e1482f1b8a44674241b54561f755a898650679 \
+ --hash=sha256:5e38404ca2bb30ed7267a46c02f06ff842e92da3bb8c5bfdadbd35a5722314d8 \
+ --hash=sha256:81442dac7abfc2f4f4385ea9e12ddf5a796721c0f6133260687fec5c3780fa49 \
+ --hash=sha256:923f8653416604e356073e6e0bccbe7c09990acef442def2f5640dd0faa9689f \
+ --hash=sha256:93f3f7b0bb07711b49626e7940d6fe52aa9940ad86e8f7e74842e73189712129 \
+ --hash=sha256:99a4cd17a5fdd1f3d014396502daa70b5ec21bf4ffe38393e152f8e449757d67 \
+ --hash=sha256:ab2b98c9fc19f13f59628d94df5cc4cc4844bc572467d113a8b517d634e362c6 \
+ --hash=sha256:b1b0671619343aa71c20ff9767eced0483e4fc9e1f489d50923738caf6a03c17 \
+ --hash=sha256:b2e953fcfaedcfbc952b44744f22d16575d3aa78eb4f51ae74165b4e96e55f42 \
+ --hash=sha256:ba9f33bb525b14c3ea563b2fd521a84d2fa214ec59e3e6a2858f78d0844dd60d \
+ --hash=sha256:cfbe6b40ca48019a51827f20d830887b3107a74a79b01ceb8cc8de4ccb17b672 \
+ --hash=sha256:d34d2ca888208eea2b5c68186841336a7f5e0b990edec929be909353a202768a \
+ --hash=sha256:ea46c0d060491051d39f0d2cff4f98d5c72b288289f57a21556cc7d504db37fc \
+ --hash=sha256:f7583aec590485b43ca601dd9cea0dcd65bd7bb21d30ef4ddbf4ea6b5ed1bdd3 \
+ --hash=sha256:f78baafb38436d5a128f837fab2d92c276dfb48af01a240b861ae02b2413ada8
# via
# feast (setup.py)
# pandas-gbq
@@ -2446,9 +2446,9 @@ python-dotenv==1.2.1 \
# pydantic-settings
# pymilvus
# uvicorn
-python-multipart==0.0.20 \
- --hash=sha256:8a62d3a8335e06589fe01f2a3e178cdcc632f3fbe0d492ad9ee0ec35aab1f104 \
- --hash=sha256:8dd0cab45b8e23064ae09147625994d090fa46f5b0d1e13af944c331a7fa9d13
+python-multipart==0.0.21 \
+ --hash=sha256:7137ebd4d3bbf70ea1622998f902b97a29434a9e8dc40eb203bbcf7c2a2cba92 \
+ --hash=sha256:cf7a6713e01c87aa35387f4774e812c4361150938d20d232800f75ffcf266090
# via mcp
pytz==2025.2 \
--hash=sha256:360b9e3dbb49a209c21ad61809c7fb453643e048b38924c765813546746e81c3 \
@@ -2573,9 +2573,9 @@ rich==13.9.4 \
# fastapi-mcp
# ibis-framework
# typer
-roman-numerals==3.1.0 \
- --hash=sha256:384e36fc1e8d4bd361bdb3672841faae7a345b3f708aae9895d074c878332551 \
- --hash=sha256:842ae5fd12912d62720c9aad8cab706e8c692556d01a38443e051ee6cc158d90
+roman-numerals==4.1.0 \
+ --hash=sha256:1af8b147eb1405d5839e78aeb93131690495fe9da5c91856cb33ad55a7f1e5b2 \
+ --hash=sha256:647ba99caddc2cc1e55a51e4360689115551bf4476d90e8162cf8c345fe233c7
# via sphinx
rpds-py==0.30.0 \
--hash=sha256:07ae8a593e1c3c6b82ca3292efbe73c30b61332fd612e05abee07c79359f292f \
@@ -2807,12 +2807,14 @@ sqlalchemy[mypy]==2.0.45 \
--hash=sha256:1d8b4a7a8c9b537509d56d5cd10ecdcfbb95912d72480c8861524efecc6a3fff \
--hash=sha256:215f0528b914e5c75ef2559f69dca86878a3beeb0c1be7279d77f18e8d180ed4 \
--hash=sha256:2c0b74aa79e2deade948fe8593654c8ef4228c44ba862bb7c9585c8e0db90f33 \
+ --hash=sha256:2e90a344c644a4fa871eb01809c32096487928bd2038bf10f3e4515cb688cc56 \
--hash=sha256:3c5f76216e7b85770d5bb5130ddd11ee89f4d52b11783674a662c7dd57018177 \
--hash=sha256:470daea2c1ce73910f08caf10575676a37159a6d16c4da33d0033546bddebc9b \
--hash=sha256:4748601c8ea959e37e03d13dcda4a44837afcd1b21338e637f7c935b8da06177 \
--hash=sha256:4b6bec67ca45bc166c8729910bd2a87f1c0407ee955df110d78948f5b5827e8a \
--hash=sha256:5225a288e4c8cc2308dbdd874edad6e7d0fd38eac1e9e5f23503425c8eee20d0 \
--hash=sha256:56ead1f8dfb91a54a28cd1d072c74b3d635bcffbd25e50786533b822d4f2cde2 \
+ --hash=sha256:5964f832431b7cdfaaa22a660b4c7eb1dfcd6ed41375f67fd3e3440fd95cb3cc \
--hash=sha256:59a8b8bd9c6bedf81ad07c8bd5543eedca55fe9b8780b2b628d495ba55f8db1e \
--hash=sha256:672c45cae53ba88e0dad74b9027dddd09ef6f441e927786b05bec75d949fbb2e \
--hash=sha256:6d0beadc2535157070c9c17ecf25ecec31e13c229a8f69196d7590bde8082bf1 \
@@ -2831,7 +2833,9 @@ sqlalchemy[mypy]==2.0.45 \
--hash=sha256:b8c8b41b97fba5f62349aa285654230296829672fc9939cd7f35aab246d1c08b \
--hash=sha256:ba547ac0b361ab4f1608afbc8432db669bd0819b3e12e29fb5fa9529a8bba81d \
--hash=sha256:c1c2091b1489435ff85728fafeb990f073e64f6f5e81d5cd53059773e8521eb6 \
+ --hash=sha256:c64772786d9eee72d4d3784c28f0a636af5b0a29f3fe26ff11f55efe90c0bd85 \
--hash=sha256:cd337d3526ec5298f67d6a30bbbe4ed7e5e68862f0bf6dd21d289f8d37b7d60b \
+ --hash=sha256:d29b2b99d527dbc66dd87c3c3248a5dd789d974a507f4653c969999fc7c1191b \
--hash=sha256:d2c3684fca8a05f0ac1d9a21c1f4a266983a7ea9180efb80ffeb03861ecd01a0 \
--hash=sha256:d62e47f5d8a50099b17e2bfc1b0c7d7ecd8ba6b46b1507b58cc4f05eefc3bb1c \
--hash=sha256:d8a2ca754e5415cde2b656c27900b19d50ba076aa05ce66e2207623d3fe41f5a \
@@ -2849,9 +2853,9 @@ sqlglot==25.20.2 \
--hash=sha256:169fe8308dd70d7bd40117b2221b62bdc7c4e2ea8eb07394b2a6146cdedf05ab \
--hash=sha256:cdbfd7ce3f2f39f32bd7b4c23fd9e0fd261636a6b14285b914e8def25fd0a567
# via ibis-framework
-sse-starlette==3.0.3 \
- --hash=sha256:88cfb08747e16200ea990c8ca876b03910a23b547ab3bd764c0d8eb81019b971 \
- --hash=sha256:af5bf5a6f3933df1d9c7f8539633dc8444ca6a97ab2e2a7cd3b6e431ac03a431
+sse-starlette==3.1.1 \
+ --hash=sha256:bb38f71ae74cfd86b529907a9fda5632195dfa6ae120f214ea4c890c7ee9d436 \
+ --hash=sha256:bffa531420c1793ab224f63648c059bcadc412bf9fdb1301ac8de1cf9a67b7fb
# via mcp
starlette==0.50.0 \
--hash=sha256:9e5391843ec9b6e472eed1365a78c8098cfceb7a74bfd4d6b1c0c0095efb3bca \
@@ -2859,6 +2863,7 @@ starlette==0.50.0 \
# via
# fastapi
# mcp
+ # sse-starlette
substrait==0.24.2 \
--hash=sha256:743cc352e96b0927b2cd37cd5a8fdac0a96a68df9600bd104fc36aebd222a836 \
--hash=sha256:d1d475833566fa9d67eed3273456883c0568486ccced92b524b31709d2817e19
@@ -2948,17 +2953,17 @@ typeguard==4.4.4 \
--hash=sha256:3a7fd2dffb705d4d0efaed4306a704c89b9dee850b688f060a8b1615a79e5f74 \
--hash=sha256:b5f562281b6bfa1f5492470464730ef001646128b180769880468bd84b68b09e
# via feast (setup.py)
-typer==0.20.0 \
- --hash=sha256:1aaf6494031793e4876fb0bacfa6a912b551cf43c1e63c800df8b1a866720c37 \
- --hash=sha256:5b463df6793ec1dca6213a3cf4c0f03bc6e322ac5e16e13ddd622a889489784a
+typer==0.21.0 \
+ --hash=sha256:c79c01ca6b30af9fd48284058a7056ba0d3bf5cf10d0ff3d0c5b11b68c258ac6 \
+ --hash=sha256:c87c0d2b6eee3b49c5c64649ec92425492c14488096dfbc8a0c2799b2f6f9c53
# via fastapi-mcp
types-psutil==7.0.0.20250218 \
--hash=sha256:1447a30c282aafefcf8941ece854e1100eee7b0296a9d9be9977292f0269b121 \
--hash=sha256:1e642cdafe837b240295b23b1cbd4691d80b08a07d29932143cbbae30eb0db9c
# via feast (setup.py)
-types-pymysql==1.1.0.20250916 \
- --hash=sha256:873eb9836bb5e3de4368cc7010ca72775f86e9692a5c7810f8c7f48da082e55b \
- --hash=sha256:98d75731795fcc06723a192786662bdfa760e1e00f22809c104fbb47bac5e29b
+types-pymysql==1.1.0.20251220 \
+ --hash=sha256:ae1c3df32a777489431e2e9963880a0df48f6591e0aa2fd3a6fabd9dee6eca54 \
+ --hash=sha256:fa1082af7dea6c53b6caa5784241924b1296ea3a8d3bd060417352c5e10c0618
# via feast (setup.py)
typing-extensions==4.15.0 \
--hash=sha256:0cea48d173cc12fa28ecabc3b837ea3cf6f38c6d1136f85cbaaf598984861466 \
@@ -2989,9 +2994,9 @@ typing-inspection==0.4.2 \
# mcp
# pydantic
# pydantic-settings
-tzdata==2025.2 \
- --hash=sha256:1a403fada01ff9221ca8044d701868fa132215d84beb92242d9acd2147f667a8 \
- --hash=sha256:b60a638fcc0daffadf82fe0f57e53d06bdec2f36c4df66280ae79bce6bd6f2b9
+tzdata==2025.3 \
+ --hash=sha256:06a47e5700f3081aab02b2e513160914ff0694bce9947d6b76ebd6bf57cfc5d1 \
+ --hash=sha256:de39c2ca5dc7b0344f2eba86f49d614019d29f060fc4ebc8a417896a620b56a7
# via pandas
ujson==5.11.0 \
--hash=sha256:0180a480a7d099082501cad1fe85252e4d4bf926b40960fb3d9e87a3a6fbbc80 \
@@ -3079,9 +3084,9 @@ ujson==5.11.0 \
--hash=sha256:fa79fdb47701942c2132a9dd2297a1a85941d966d8c87bfd9e29b0cf423f26cc \
--hash=sha256:fac6c0649d6b7c3682a0a6e18d3de6857977378dce8d419f57a0b20e3d775b39
# via pymilvus
-urllib3==2.6.1 \
- --hash=sha256:5379eb6e1aba4088bae84f8242960017ec8d8e3decf30480b3a1abdaa9671a3f \
- --hash=sha256:e67d06fe947c36a7ca39f4994b08d73922d40e6cca949907be05efa6fd75110b
+urllib3==2.6.2 \
+ --hash=sha256:016f9c98bb7e98085cb2b4b17b87d2c702975664e4f060c6532e64d1c1a5e797 \
+ --hash=sha256:ec21cddfe7724fc7cb4ba4bea7aa8e2ef36f607a4bab81aa6ce42a13dc3f03dd
# via
# botocore
# kubernetes
diff --git a/sdk/python/requirements/py3.12-requirements.txt b/sdk/python/requirements/py3.12-requirements.txt
index 6e6f3194c68..697d4f25b0c 100644
--- a/sdk/python/requirements/py3.12-requirements.txt
+++ b/sdk/python/requirements/py3.12-requirements.txt
@@ -20,9 +20,9 @@ attrs==25.4.0 \
# via
# jsonschema
# referencing
-bigtree==1.0.3 \
- --hash=sha256:18402a143130868b17ca84a74ca263e6f32f046d6978c30d244f8b94c4a01227 \
- --hash=sha256:99a18b6937a9b4ab8e560fec5c0720e10ebf37f84e44f9b5f47702c2e84c9aaa
+bigtree==1.0.4 \
+ --hash=sha256:e4af0c5bc0d2cd72e18442965e4509f642b16a0de65db6d0ec116e30f959010c \
+ --hash=sha256:f58a3238bb9b1142d893c9de4921bfd18d435427c75e0c168dd580eabf6dc7fd
# via feast (setup.py)
certifi==2025.11.12 \
--hash=sha256:97de8790030bbd5c2d96b7ec782fc2f7820ef8dba6db909ccf95449f2d062d4b \
@@ -158,17 +158,17 @@ colorama==0.4.6 \
--hash=sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44 \
--hash=sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6
# via feast (setup.py)
-dask[dataframe]==2025.11.0 \
- --hash=sha256:08c35a8146c05c93b34f83cf651009129c42ee71762da7ca452fb7308641c2b8 \
- --hash=sha256:23d59e624b80ee05b7cc8df858682cca58262c4c3b197ccf61da0f6543c8f7c3
+dask[dataframe]==2025.12.0 \
+ --hash=sha256:4213ce9c5d51d6d89337cff69de35d902aa0bf6abdb8a25c942a4d0281f3a598 \
+ --hash=sha256:8d478f2aabd025e2453cf733ad64559de90cf328c20209e4574e9543707c3e1b
# via feast (setup.py)
dill==0.3.9 \
--hash=sha256:468dff3b89520b474c0397703366b7b95eebe6303f108adf9b19da1f702be87a \
--hash=sha256:81aa267dddf68cbfe8029c42ca9ec6a4ab3b22371d1c450abc54422577b4512c
# via feast (setup.py)
-fastapi==0.124.0 \
- --hash=sha256:260cd178ad75e6d259991f2fd9b0fee924b224850079df576a3ba604ce58f4e6 \
- --hash=sha256:91596bdc6dde303c318f06e8d2bc75eafb341fc793a0c9c92c0bc1db1ac52480
+fastapi==0.128.0 \
+ --hash=sha256:1cc179e1cef10a6be60ffe429f79b829dce99d8de32d7acb7e6c8dfdf7f2645a \
+ --hash=sha256:aebd93f9716ee3b4f4fcfe13ffb7cf308d99c9f3ab5622d8877441072561582d
# via feast (setup.py)
fsspec==2025.12.0 \
--hash=sha256:8bf1fe301b7d8acfa6e8571e3b1c3d158f909666642431cc78a1b7b4dbc5ec5b \
@@ -247,83 +247,83 @@ jsonschema-specifications==2025.9.1 \
--hash=sha256:98802fee3a11ee76ecaca44429fda8a41bff98b00a0f2838151b113f210cc6fe \
--hash=sha256:b540987f239e745613c7a9176f3edb72b832a4ac465cf02712288397832b5e8d
# via jsonschema
-librt==0.7.3 \
- --hash=sha256:020c6db391268bcc8ce75105cb572df8cb659a43fd347366aaa407c366e5117a \
- --hash=sha256:0fa9ac2e49a6bee56e47573a6786cb635e128a7b12a0dc7851090037c0d397a3 \
- --hash=sha256:11ad45122bbed42cfc8b0597450660126ef28fd2d9ae1a219bc5af8406f95678 \
- --hash=sha256:120dd21d46ff875e849f1aae19346223cf15656be489242fe884036b23d39e93 \
- --hash=sha256:14569ac5dd38cfccf0a14597a88038fb16811a6fede25c67b79c6d50fc2c8fdc \
- --hash=sha256:1617bea5ab31266e152871208502ee943cb349c224846928a1173c864261375e \
- --hash=sha256:170cdb8436188347af17bf9cccf3249ba581c933ed56d926497119d4cf730cec \
- --hash=sha256:1975eda520957c6e0eb52d12968dd3609ffb7eef05d4223d097893d6daf1d8a7 \
- --hash=sha256:1fe603877e1865b5fd047a5e40379509a4a60204aa7aa0f72b16f7a41c3f0712 \
- --hash=sha256:24d70810f6e2ea853ff79338001533716b373cc0f63e2a0be5bc96129edb5fb5 \
- --hash=sha256:256793988bff98040de23c57cf36e1f4c2f2dc3dcd17537cdac031d3b681db71 \
- --hash=sha256:25711f364c64cab2c910a0247e90b51421e45dbc8910ceeb4eac97a9e132fc6f \
- --hash=sha256:2682162855a708e3270eba4b92026b93f8257c3e65278b456c77631faf0f4f7a \
- --hash=sha256:2cf9d73499486ce39eebbff5f42452518cc1f88d8b7ea4a711ab32962b176ee2 \
- --hash=sha256:2e40520c37926166c24d0c2e0f3bc3a5f46646c34bdf7b4ea9747c297d6ee809 \
- --hash=sha256:2e980cf1ed1a2420a6424e2ed884629cdead291686f1048810a817de07b5eb18 \
- --hash=sha256:2f03484b54bf4ae80ab2e504a8d99d20d551bfe64a7ec91e218010b467d77093 \
- --hash=sha256:35f1609e3484a649bb80431310ddbec81114cd86648f1d9482bc72a3b86ded2e \
- --hash=sha256:399938edbd3d78339f797d685142dd8a623dfaded023cf451033c85955e4838a \
- --hash=sha256:399bbd7bcc1633c3e356ae274a1deb8781c7bf84d9c7962cc1ae0c6e87837292 \
- --hash=sha256:3ec50cf65235ff5c02c5b747748d9222e564ad48597122a361269dd3aa808798 \
- --hash=sha256:3edbf257c40d21a42615e9e332a6b10a8bacaaf58250aed8552a14a70efd0d65 \
- --hash=sha256:440c788f707c061d237c1e83edf6164ff19f5c0f823a3bf054e88804ebf971ec \
- --hash=sha256:44b3689b040df57f492e02cd4f0bacd1b42c5400e4b8048160c9d5e866de8abe \
- --hash=sha256:4887c29cadbdc50640179e3861c276325ff2986791e6044f73136e6e798ff806 \
- --hash=sha256:5460d99ed30f043595bbdc888f542bad2caeb6226b01c33cda3ae444e8f82d42 \
- --hash=sha256:550fdbfbf5bba6a2960b27376ca76d6aaa2bd4b1a06c4255edd8520c306fcfc0 \
- --hash=sha256:56f2a47beda8409061bc1c865bef2d4bd9ff9255219402c0817e68ab5ad89aed \
- --hash=sha256:572a24fc5958c61431da456a0ef1eeea6b4989d81eeb18b8e5f1f3077592200b \
- --hash=sha256:59cb0470612d21fa1efddfa0dd710756b50d9c7fb6c1236bbf8ef8529331dc70 \
- --hash=sha256:6038ccbd5968325a5d6fd393cf6e00b622a8de545f0994b89dd0f748dcf3e19e \
- --hash=sha256:6488e69d408b492e08bfb68f20c4a899a354b4386a446ecd490baff8d0862720 \
- --hash=sha256:687403cced6a29590e6be6964463835315905221d797bc5c934a98750fe1a9af \
- --hash=sha256:6b407c23f16ccc36614c136251d6b32bf30de7a57f8e782378f1107be008ddb0 \
- --hash=sha256:6b4e7bff1d76dd2b46443078519dc75df1b5e01562345f0bb740cea5266d8218 \
- --hash=sha256:6bdd9adfca615903578d2060ee8a6eb1c24eaf54919ff0ddc820118e5718931b \
- --hash=sha256:6eb9295c730e26b849ed1f4022735f36863eb46b14b6e10604c1c39b8b5efaea \
- --hash=sha256:703456146dc2bf430f7832fd1341adac5c893ec3c1430194fdcefba00012555c \
- --hash=sha256:754a0d09997095ad764ccef050dd5bf26cbf457aab9effcba5890dad081d879e \
- --hash=sha256:7af7785f5edd1f418da09a8cdb9ec84b0213e23d597413e06525340bcce1ea4f \
- --hash=sha256:7b29e97273bd6999e2bfe9fe3531b1f4f64effd28327bced048a33e49b99674a \
- --hash=sha256:7b4f57f7a0c65821c5441d98c47ff7c01d359b1e12328219709bdd97fdd37f90 \
- --hash=sha256:8837d5a52a2d7aa9f4c3220a8484013aed1d8ad75240d9a75ede63709ef89055 \
- --hash=sha256:8ccadf260bb46a61b9c7e89e2218f6efea9f3eeaaab4e3d1f58571890e54858e \
- --hash=sha256:8d8cf653e798ee4c4e654062b633db36984a1572f68c3aa25e364a0ddfbbb910 \
- --hash=sha256:93b2a1f325fefa1482516ced160c8c7b4b8d53226763fa6c93d151fa25164207 \
- --hash=sha256:9f0e0927efe87cd42ad600628e595a1a0aa1c64f6d0b55f7e6059079a428641a \
- --hash=sha256:a59a69deeb458c858b8fea6acf9e2acd5d755d76cd81a655256bc65c20dfff5b \
- --hash=sha256:a9f9b661f82693eb56beb0605156c7fca57f535704ab91837405913417d6990b \
- --hash=sha256:abfc57cab3c53c4546aee31859ef06753bfc136c9d208129bad23e2eca39155a \
- --hash=sha256:aca73d70c3f553552ba9133d4a09e767dcfeee352d8d8d3eb3f77e38a3beb3ed \
- --hash=sha256:adeaa886d607fb02563c1f625cf2ee58778a2567c0c109378da8f17ec3076ad7 \
- --hash=sha256:b278a9248a4e3260fee3db7613772ca9ab6763a129d6d6f29555e2f9b168216d \
- --hash=sha256:b7c1239b64b70be7759554ad1a86288220bbb04d68518b527783c4ad3fb4f80b \
- --hash=sha256:bf8c7735fbfc0754111f00edda35cf9e98a8d478de6c47b04eaa9cef4300eaa7 \
- --hash=sha256:c634a0a6db395fdaba0361aa78395597ee72c3aad651b9a307a3a7eaf5efd67e \
- --hash=sha256:cad9971881e4fec00d96af7eaf4b63aa7a595696fc221808b0d3ce7ca9743258 \
- --hash=sha256:cbdb3f337c88b43c3b49ca377731912c101178be91cb5071aac48faa898e6f8e \
- --hash=sha256:cd8551aa21df6c60baa2624fd086ae7486bdde00c44097b32e1d1b1966e365e0 \
- --hash=sha256:d09f677693328503c9e492e33e9601464297c01f9ebd966ea8fc5308f3069bfd \
- --hash=sha256:d376a35c6561e81d2590506804b428fc1075fcc6298fc5bb49b771534c0ba010 \
- --hash=sha256:d39079379a9a28e74f4d57dc6357fa310a1977b51ff12239d7271ec7e71d67f5 \
- --hash=sha256:d86f94743a11873317094326456b23f8a5788bad9161fd2f0e52088c33564620 \
- --hash=sha256:d91e60ac44bbe3a77a67af4a4c13114cbe9f6d540337ce22f2c9eaf7454ca71f \
- --hash=sha256:d9883b2d819ce83f87ba82a746c81d14ada78784db431e57cc9719179847376e \
- --hash=sha256:e094e445c37c57e9ec612847812c301840239d34ccc5d153a982fa9814478c60 \
- --hash=sha256:e19acfde38cb532a560b98f473adc741c941b7a9bc90f7294bc273d08becb58b \
- --hash=sha256:e32d43610dff472eab939f4d7fbdd240d1667794192690433672ae22d7af8445 \
- --hash=sha256:ed028fc3d41adda916320712838aec289956c89b4f0a361ceadf83a53b4c047a \
- --hash=sha256:ef59c938f72bdbc6ab52dc50f81d0637fde0f194b02d636987cea2ab30f8f55a \
- --hash=sha256:f3d4801db8354436fd3936531e7f0e4feb411f62433a6b6cb32bb416e20b529f \
- --hash=sha256:f57aca20e637750a2c18d979f7096e2c2033cc40cf7ed201494318de1182f135 \
- --hash=sha256:f9da128d0edf990cf0d2ca011b02cd6f639e79286774bd5b0351245cbb5a6e51 \
- --hash=sha256:fbd7351d43b80d9c64c3cfcb50008f786cc82cba0450e8599fdd64f264320bd3 \
- --hash=sha256:fcb72249ac4ea81a7baefcbff74df7029c3cb1cf01a711113fa052d563639c9c \
- --hash=sha256:ff21c554304e8226bf80c3a7754be27c6c3549a9fec563a03c06ee8f494da8fc
+librt==0.7.5 \
+ --hash=sha256:060bde69c3604f694bd8ae21a780fe8be46bb3dbb863642e8dfc75c931ca8eee \
+ --hash=sha256:08153ea537609d11f774d2bfe84af39d50d5c9ca3a4d061d946e0c9d8bce04a1 \
+ --hash=sha256:0b4791202296ad51ac09a3ff58eb49d9da8e3a4009167a6d76ac418a974e5fd4 \
+ --hash=sha256:0b7f080ba30601dfa3e3deed3160352273e1b9bc92e652f51103c3e9298f7899 \
+ --hash=sha256:0e2bf8f91093fac43e3eaebacf777f12fd539dce9ec5af3efc6d8424e96ccd49 \
+ --hash=sha256:118716de5ad6726332db1801bc90fa6d94194cd2e07c1a7822cebf12c496714d \
+ --hash=sha256:168e04663e126416ba712114050f413ac306759a1791d87b7c11d4428ba75760 \
+ --hash=sha256:191cbd42660446d67cf7a95ac7bfa60f49b8b3b0417c64f216284a1d86fc9335 \
+ --hash=sha256:263f4fae9eba277513357c871275b18d14de93fd49bf5e43dc60a97b81ad5eb8 \
+ --hash=sha256:265729b551a2dd329cc47b323a182fb7961af42abf21e913c9dd7d3331b2f3c2 \
+ --hash=sha256:26b46620e1e0e45af510d9848ea0915e7040605dd2ae94ebefb6c962cbb6f7ec \
+ --hash=sha256:29c8d2fae11d4379ea207ba7fc69d43237e42cf8a9f90ec6e05993687e6d648b \
+ --hash=sha256:2fcbf2e135c11f721193aa5f42ba112bb1046afafbffd407cbc81d8d735c74d0 \
+ --hash=sha256:39183abee670bc37b85f11e86c44a9cad1ed6efa48b580083e89ecee13dd9717 \
+ --hash=sha256:3919c9407faeeee35430ae135e3a78acd4ecaaaa73767529e2c15ca1d73ba325 \
+ --hash=sha256:3c98a8d0ac9e2a7cb8ff8c53e5d6e8d82bfb2839abf144fdeaaa832f2a12aa45 \
+ --hash=sha256:3dd58f7ce20360c6ce0c04f7bd9081c7f9c19fc6129a3c705d0c5a35439f201d \
+ --hash=sha256:46aa91813c267c3f60db75d56419b42c0c0b9748ec2c568a0e3588e543fb4233 \
+ --hash=sha256:49c596cd18e90e58b7caa4d7ca7606049c1802125fcff96b8af73fa5c3870e4d \
+ --hash=sha256:532ddc6a8a6ca341b1cd7f4d999043e4c71a212b26fe9fd2e7f1e8bb4e873544 \
+ --hash=sha256:54d2aef0b0f5056f130981ad45081b278602ff3657fe16c88529f5058038e802 \
+ --hash=sha256:553dc58987d1d853adda8aeadf4db8e29749f0b11877afcc429a9ad892818ae2 \
+ --hash=sha256:584cb3e605ec45ba350962cec853e17be0a25a772f21f09f1e422f7044ae2a7d \
+ --hash=sha256:5cd3afd71e9bc146203b6c8141921e738364158d4aa7cdb9a874e2505163770f \
+ --hash=sha256:63055d3dda433ebb314c9f1819942f16a19203c454508fdb2d167613f7017169 \
+ --hash=sha256:654fdc971c76348a73af5240d8e2529265b9a7ba6321e38dd5bae7b0d4ab3abe \
+ --hash=sha256:6b7b58913d475911f6f33e8082f19dd9b120c4f4a5c911d07e395d67b81c6982 \
+ --hash=sha256:6e860909fea75baef941ee6436e0453612505883b9d0d87924d4fda27865b9a2 \
+ --hash=sha256:730be847daad773a3c898943cf67fb9845a3961d06fb79672ceb0a8cd8624cfa \
+ --hash=sha256:732e0aa0385b59a1b2545159e781c792cc58ce9c134249233a7c7250a44684c4 \
+ --hash=sha256:75965c1f4efb7234ff52a58b729d245a21e87e4b6a26a0ec08052f02b16274e4 \
+ --hash=sha256:7a488908a470451338607650f1c064175094aedebf4a4fa37890682e30ce0b57 \
+ --hash=sha256:81056e01bba1394f1d92904ec61a4078f66df785316275edbaf51d90da8c6e26 \
+ --hash=sha256:82f3f088482e2229387eadf8215c03f7726d56f69cce8c0c40f0795aebc9b361 \
+ --hash=sha256:84d4a6b9efd6124f728558a18e79e7cc5c5d4efc09b2b846c910de7e564f5bad \
+ --hash=sha256:85f485b7471571e99fab4f44eeb327dc0e1f814ada575f3fa85e698417d8a54e \
+ --hash=sha256:8a3cfb15961e7333ea6ef033dc574af75153b5c230d5ad25fbcd55198f21e0cf \
+ --hash=sha256:8bb7883c1e94ceb87c2bf81385266f032da09cd040e804cc002f2c9d6b842e2f \
+ --hash=sha256:8dcae24de1bc9da93aa689cb6313c70e776d7cea2fcf26b9b6160fedfe6bd9af \
+ --hash=sha256:9937574e6d842f359b8585903d04f5b4ab62277a091a93e02058158074dc52f2 \
+ --hash=sha256:9bbb8facc5375476d392990dd6a71f97e4cb42e2ac66f32e860f6e47299d5e89 \
+ --hash=sha256:9c08527055fbb03c641c15bbc5b79dd2942fb6a3bd8dabf141dd7e97eeea4904 \
+ --hash=sha256:9cffa3ef0af29687455161cb446eff059bf27607f95163d6a37e27bcb37180f6 \
+ --hash=sha256:9f85f9b5db87b0f52e53c68ad2a0c5a53e00afa439bd54a1723742a2b1021276 \
+ --hash=sha256:a82d5a0ee43aeae2116d7292c77cc8038f4841830ade8aa922e098933b468b9e \
+ --hash=sha256:a9eacbf983319b26b5f340a2e0cd47ac1ee4725a7f3a72fd0f15063c934b69d6 \
+ --hash=sha256:ab4b0d3bee6f6ff7017e18e576ac7e41a06697d8dea4b8f3ab9e0c8e1300c409 \
+ --hash=sha256:af69d9e159575e877c7546d1ee817b4ae089aa221dd1117e20c24ad8dc8659c7 \
+ --hash=sha256:b1795c4b2789b458fa290059062c2f5a297ddb28c31e704d27e161386469691a \
+ --hash=sha256:b591c094afd0ffda820e931148c9e48dc31a556dc5b2b9b3cc552fa710d858e4 \
+ --hash=sha256:b8e0fd344bad57026a8f4ccfaf406486c2fc991838050c2fef156170edc3b775 \
+ --hash=sha256:ba1077c562a046208a2dc6366227b3eeae8f2c2ab4b41eaf4fd2fa28cece4203 \
+ --hash=sha256:bb41f04046b4f22b1e7ba5ef513402cd2e3477ec610e5f92d38fe2bba383d419 \
+ --hash=sha256:c039bbf79a9a2498404d1ae7e29a6c175e63678d7a54013a97397c40aee026c5 \
+ --hash=sha256:c566a4672564c5d54d8ab65cdaae5a87ee14c1564c1a2ddc7a9f5811c750f023 \
+ --hash=sha256:cda8b025875946ffff5a9a7590bf9acde3eb02cb6200f06a2d3e691ef3d9955b \
+ --hash=sha256:cdb001a1a0e4f41e613bca2c0fc147fc8a7396f53fc94201cbfd8ec7cd69ca4b \
+ --hash=sha256:cdde31759bd8888f3ef0eebda80394a48961328a17c264dce8cc35f4b9cde35d \
+ --hash=sha256:d2cc7d187e8c6e9b7bdbefa9697ce897a704ea7a7ce844f2b4e0e2aa07ae51d3 \
+ --hash=sha256:d7aa33153a5bb0bac783d2c57885889b1162823384e8313d47800a0e10d0070e \
+ --hash=sha256:d7c72c8756eeb3aefb1b9e3dac7c37a4a25db63640cac0ab6fc18e91a0edf05a \
+ --hash=sha256:dd810f2d39c526c42ea205e0addad5dc08ef853c625387806a29d07f9d150d9b \
+ --hash=sha256:ddc0ab9dbc5f9ceaf2bf7a367bf01f2697660e908f6534800e88f43590b271db \
+ --hash=sha256:ddc4a16207f88f9597b397fc1f60781266d13b13de922ff61c206547a29e4bbd \
+ --hash=sha256:de4221a1181fa9c8c4b5f35506ed6f298948f44003d84d2a8b9885d7e01e6cfa \
+ --hash=sha256:df2e210400b28e50994477ebf82f055698c79797b6ee47a1669d383ca33263e1 \
+ --hash=sha256:df3146d52465b3b6397d25d513f428cb421c18df65b7378667bb5f1e3cc45805 \
+ --hash=sha256:e47fc52602ffc374e69bf1b76536dc99f7f6dd876bd786c8213eaa3598be030a \
+ --hash=sha256:e9e9c988b5ffde7be02180f864cbd17c0b0c1231c235748912ab2afa05789c25 \
+ --hash=sha256:ea1b60b86595a5dc1f57b44a801a1c4d8209c0a69518391d349973a4491408e6 \
+ --hash=sha256:edf6b465306215b19dbe6c3fb63cf374a8f3e1ad77f3b4c16544b83033bbb67b \
+ --hash=sha256:f02c4337bf271c4f06637f5ff254fad2238c0b8e32a3a480ebb2fc5e26f754a5 \
+ --hash=sha256:f7f51ffe59f4556243d3cc82d827bde74765f594fa3ceb80ec4de0c13ccd3416 \
+ --hash=sha256:f952e1a78c480edee8fb43aa2bf2e84dcd46c917d44f8065b883079d3893e8fc \
+ --hash=sha256:fb565b4219abc8ea2402e61c7ba648a62903831059ed3564fa1245cc245d58d7 \
+ --hash=sha256:fee15c2a190ef389f14928135c6fb2d25cd3fdb7887bfd9a7b444bbdc8c06b96
# via mypy
locket==1.0.0 \
--hash=sha256:5c0d4c052a8bbbf750e056a8e65ccd309086f4f0f18a2eac306a8dfa4112a632 \
@@ -543,125 +543,123 @@ mmh3==5.2.0 \
--hash=sha256:fdfd3fb739f4e22746e13ad7ba0c6eedf5f454b18d11249724a388868e308ee4 \
--hash=sha256:ff3d50dc3fe8a98059f99b445dfb62792b5d006c5e0b8f03c6de2813b8376110
# via feast (setup.py)
-mypy==1.19.0 \
- --hash=sha256:0c01c99d626380752e527d5ce8e69ffbba2046eb8a060db0329690849cf9b6f9 \
- --hash=sha256:0dde5cb375cb94deff0d4b548b993bec52859d1651e073d63a1386d392a95495 \
- --hash=sha256:0e3c3d1e1d62e678c339e7ade72746a9e0325de42cd2cccc51616c7b2ed1a018 \
- --hash=sha256:0ea4fd21bb48f0da49e6d3b37ef6bd7e8228b9fe41bbf4d80d9364d11adbd43c \
- --hash=sha256:0fb3115cb8fa7c5f887c8a8d81ccdcb94cff334684980d847e5a62e926910e1d \
- --hash=sha256:11f7254c15ab3f8ed68f8e8f5cbe88757848df793e31c36aaa4d4f9783fd08ab \
- --hash=sha256:120cffe120cca5c23c03c77f84abc0c14c5d2e03736f6c312480020082f1994b \
- --hash=sha256:16f76ff3f3fd8137aadf593cb4607d82634fca675e8211ad75c43d86033ee6c6 \
- --hash=sha256:1cf9c59398db1c68a134b0b5354a09a1e124523f00bacd68e553b8bd16ff3299 \
- --hash=sha256:318ba74f75899b0e78b847d8c50821e4c9637c79d9a59680fc1259f29338cb3e \
- --hash=sha256:3210d87b30e6af9c8faed61be2642fcbe60ef77cec64fa1ef810a630a4cf671c \
- --hash=sha256:34ec1ac66d31644f194b7c163d7f8b8434f1b49719d403a5d26c87fff7e913f7 \
- --hash=sha256:37af5166f9475872034b56c5efdcf65ee25394e9e1d172907b84577120714364 \
- --hash=sha256:3ad925b14a0bb99821ff6f734553294aa6a3440a8cb082fe1f5b84dfb662afb1 \
- --hash=sha256:510c014b722308c9bd377993bcbf9a07d7e0692e5fa8fc70e639c1eb19fc6bee \
- --hash=sha256:6016c52ab209919b46169651b362068f632efcd5eb8ef9d1735f6f86da7853b2 \
- --hash=sha256:6148ede033982a8c5ca1143de34c71836a09f105068aaa8b7d5edab2b053e6c8 \
- --hash=sha256:63ea6a00e4bd6822adbfc75b02ab3653a17c02c4347f5bb0cf1d5b9df3a05835 \
- --hash=sha256:7686ed65dbabd24d20066f3115018d2dce030d8fa9db01aa9f0a59b6813e9f9e \
- --hash=sha256:7a500ab5c444268a70565e374fc803972bfd1f09545b13418a5174e29883dab7 \
- --hash=sha256:8f44f2ae3c58421ee05fe609160343c25f70e3967f6e32792b5a78006a9d850f \
- --hash=sha256:a18d8abdda14035c5718acb748faec09571432811af129bf0d9e7b2d6699bf18 \
- --hash=sha256:a31e4c28e8ddb042c84c5e977e28a21195d086aaffaf08b016b78e19c9ef8106 \
- --hash=sha256:a9ac09e52bb0f7fb912f5d2a783345c72441a08ef56ce3e17c1752af36340a39 \
- --hash=sha256:b9d491295825182fba01b6ffe2c6fe4e5a49dbf4e2bb4d1217b6ced3b4797bc6 \
- --hash=sha256:c14a98bc63fd867530e8ec82f217dae29d0550c86e70debc9667fff1ec83284e \
- --hash=sha256:c3385246593ac2b97f155a0e9639be906e73534630f663747c71908dfbf26134 \
- --hash=sha256:cabbee74f29aa9cd3b444ec2f1e4fa5a9d0d746ce7567a6a609e224429781f53 \
- --hash=sha256:cb64b0ba5980466a0f3f9990d1c582bcab8db12e29815ecb57f1408d99b4bff7 \
- --hash=sha256:cf7d84f497f78b682edd407f14a7b6e1a2212b433eedb054e2081380b7395aa3 \
- --hash=sha256:e2c1101ab41d01303103ab6ef82cbbfedb81c1a060c868fa7cc013d573d37ab5 \
- --hash=sha256:f188dcf16483b3e59f9278c4ed939ec0254aa8a60e8fc100648d9ab5ee95a431 \
- --hash=sha256:f2e36bed3c6d9b5f35d28b63ca4b727cb0228e480826ffc8953d1892ddc8999d \
- --hash=sha256:f3e19e3b897562276bb331074d64c076dbdd3e79213f36eed4e592272dabd760 \
- --hash=sha256:f6b874ca77f733222641e5c46e4711648c4037ea13646fd0cdc814c2eaec2528 \
- --hash=sha256:f75e60aca3723a23511948539b0d7ed514dda194bc3755eae0bfc7a6b4887aa7 \
- --hash=sha256:fc51a5b864f73a3a182584b1ac75c404396a17eced54341629d8bdcb644a5bba \
- --hash=sha256:fd4a985b2e32f23bead72e2fb4bbe5d6aceee176be471243bd831d5b2644672d
+mypy==1.19.1 \
+ --hash=sha256:016f2246209095e8eda7538944daa1d60e1e8134d98983b9fc1e92c1fc0cb8dd \
+ --hash=sha256:022ea7279374af1a5d78dfcab853fe6a536eebfda4b59deab53cd21f6cd9f00b \
+ --hash=sha256:06e6170bd5836770e8104c8fdd58e5e725cfeb309f0a6c681a811f557e97eac1 \
+ --hash=sha256:19d88bb05303fe63f71dd2c6270daca27cb9401c4ca8255fe50d1d920e0eb9ba \
+ --hash=sha256:21761006a7f497cb0d4de3d8ef4ca70532256688b0523eee02baf9eec895e27b \
+ --hash=sha256:28902ee51f12e0f19e1e16fbe2f8f06b6637f482c459dd393efddd0ec7f82045 \
+ --hash=sha256:2899753e2f61e571b3971747e302d5f420c3fd09650e1951e99f823bc3089dac \
+ --hash=sha256:2abb24cf3f17864770d18d673c85235ba52456b36a06b6afc1e07c1fdcd3d0e6 \
+ --hash=sha256:34c81968774648ab5ac09c29a375fdede03ba253f8f8287847bd480782f73a6a \
+ --hash=sha256:409088884802d511ee52ca067707b90c883426bd95514e8cfda8281dc2effe24 \
+ --hash=sha256:481daf36a4c443332e2ae9c137dfee878fcea781a2e3f895d54bd3002a900957 \
+ --hash=sha256:4b84a7a18f41e167f7995200a1d07a4a6810e89d29859df936f1c3923d263042 \
+ --hash=sha256:4f28f99c824ecebcdaa2e55d82953e38ff60ee5ec938476796636b86afa3956e \
+ --hash=sha256:5f05aa3d375b385734388e844bc01733bd33c644ab48e9684faa54e5389775ec \
+ --hash=sha256:7bcfc336a03a1aaa26dfce9fff3e287a3ba99872a157561cbfcebe67c13308e3 \
+ --hash=sha256:804bd67b8054a85447c8954215a906d6eff9cabeabe493fb6334b24f4bfff718 \
+ --hash=sha256:8bb5c6f6d043655e055be9b542aa5f3bdd30e4f3589163e85f93f3640060509f \
+ --hash=sha256:a009ffa5a621762d0c926a078c2d639104becab69e79538a494bcccb62cc0331 \
+ --hash=sha256:a8174a03289288c1f6c46d55cef02379b478bfbc8e358e02047487cad44c6ca1 \
+ --hash=sha256:ab43590f9cd5108f41aacf9fca31841142c786827a74ab7cc8a2eacb634e09a1 \
+ --hash=sha256:b10e7c2cd7870ba4ad9b2d8a6102eb5ffc1f16ca35e3de6bfa390c1113029d13 \
+ --hash=sha256:b13cfdd6c87fc3efb69ea4ec18ef79c74c3f98b4e5498ca9b85ab3b2c2329a67 \
+ --hash=sha256:b64d987153888790bcdb03a6473d321820597ab8dd9243b27a92153c4fa50fd2 \
+ --hash=sha256:b7951a701c07ea584c4fe327834b92a30825514c868b1f69c30445093fdd9d5a \
+ --hash=sha256:bdb12f69bcc02700c2b47e070238f42cb87f18c0bc1fc4cdb4fb2bc5fd7a3b8b \
+ --hash=sha256:c35d298c2c4bba75feb2195655dfea8124d855dfd7343bf8b8c055421eaf0cf8 \
+ --hash=sha256:c608937067d2fc5a4dd1a5ce92fd9e1398691b8c5d012d66e1ddd430e9244376 \
+ --hash=sha256:c9a6538e0415310aad77cb94004ca6482330fece18036b5f360b62c45814c4ef \
+ --hash=sha256:d8dfc6ab58ca7dda47d9237349157500468e404b17213d44fc1cb77bce532288 \
+ --hash=sha256:da4869fc5e7f62a88f3fe0b5c919d1d9f7ea3cef92d3689de2823fd27e40aa75 \
+ --hash=sha256:de759aafbae8763283b2ee5869c7255391fbc4de3ff171f8f030b5ec48381b74 \
+ --hash=sha256:e3157c7594ff2ef1634ee058aafc56a82db665c9438fd41b390f3bde1ab12250 \
+ --hash=sha256:e3f276d8493c3c97930e354b2595a44a21348b320d859fb4a2b9f66da9ed27ab \
+ --hash=sha256:ee4c11e460685c3e0c64a4c5de82ae143622410950d6be863303a1c4ba0e36d6 \
+ --hash=sha256:f1235f5ea01b7db5468d53ece6aaddf1ad0b88d9e7462b86ef96fe04995d7247 \
+ --hash=sha256:f7cee03c9a2e2ee26ec07479f38ea9c884e301d42c6d43a19d20fb014e3ba925 \
+ --hash=sha256:f859fb09d9583a985be9a493d5cfc5515b56b08f7447759a0c5deaf68d80506e \
+ --hash=sha256:ffcebe56eb09ff0c0885e750036a095e23793ba6c2e894e7e63f6d89ad51f22e
# via sqlalchemy
mypy-extensions==1.1.0 \
--hash=sha256:1be4cccdb0f2482337c4743e60421de3a356cd97508abadd57d47403e94f5505 \
--hash=sha256:52e68efc3284861e772bbcd66823fde5ae21fd2fdb51c62a211403730b916558
# via mypy
-numpy==2.3.5 \
- --hash=sha256:00dc4e846108a382c5869e77c6ed514394bdeb3403461d25a829711041217d5b \
- --hash=sha256:0472f11f6ec23a74a906a00b48a4dcf3849209696dff7c189714511268d103ae \
- --hash=sha256:04822c00b5fd0323c8166d66c701dc31b7fbd252c100acd708c48f763968d6a3 \
- --hash=sha256:052e8c42e0c49d2575621c158934920524f6c5da05a1d3b9bab5d8e259e045f0 \
- --hash=sha256:09a1bea522b25109bf8e6f3027bd810f7c1085c64a0c7ce050c1676ad0ba010b \
- --hash=sha256:0cd00b7b36e35398fa2d16af7b907b65304ef8bb4817a550e06e5012929830fa \
- --hash=sha256:0d8163f43acde9a73c2a33605353a4f1bc4798745a8b1d73183b28e5b435ae28 \
- --hash=sha256:1062fde1dcf469571705945b0f221b73928f34a20c904ffb45db101907c3454e \
- --hash=sha256:11e06aa0af8c0f05104d56450d6093ee639e15f24ecf62d417329d06e522e017 \
- --hash=sha256:17531366a2e3a9e30762c000f2c43a9aaa05728712e25c11ce1dbe700c53ad41 \
- --hash=sha256:1978155dd49972084bd6ef388d66ab70f0c323ddee6f693d539376498720fb7e \
- --hash=sha256:1ed1ec893cff7040a02c8aa1c8611b94d395590d553f6b53629a4461dc7f7b63 \
- --hash=sha256:2dcd0808a421a482a080f89859a18beb0b3d1e905b81e617a188bd80422d62e9 \
- --hash=sha256:2e2eb32ddb9ccb817d620ac1d8dae7c3f641c1e5f55f531a33e8ab97960a75b8 \
- --hash=sha256:2feae0d2c91d46e59fcd62784a3a83b3fb677fead592ce51b5a6fbb4f95965ff \
- --hash=sha256:3095bdb8dd297e5920b010e96134ed91d852d81d490e787beca7e35ae1d89cf7 \
- --hash=sha256:30bc11310e8153ca664b14c5f1b73e94bd0503681fcf136a163de856f3a50139 \
- --hash=sha256:3101e5177d114a593d79dd79658650fe28b5a0d8abeb8ce6f437c0e6df5be1a4 \
- --hash=sha256:396084a36abdb603546b119d96528c2f6263921c50df3c8fd7cb28873a237748 \
- --hash=sha256:3997b5b3c9a771e157f9aae01dd579ee35ad7109be18db0e85dbdbe1de06e952 \
- --hash=sha256:414802f3b97f3c1eef41e530aaba3b3c1620649871d8cb38c6eaff034c2e16bd \
- --hash=sha256:51c1e14eb1e154ebd80e860722f9e6ed6ec89714ad2db2d3aa33c31d7c12179b \
- --hash=sha256:51c55fe3451421f3a6ef9a9c1439e82101c57a2c9eab9feb196a62b1a10b58ce \
- --hash=sha256:5ee6609ac3604fa7780e30a03e5e241a7956f8e2fcfe547d51e3afa5247ac47f \
- --hash=sha256:612a95a17655e213502f60cfb9bf9408efdc9eb1d5f50535cc6eb365d11b42b5 \
- --hash=sha256:6203fdf9f3dc5bdaed7319ad8698e685c7a3be10819f41d32a0723e611733b42 \
- --hash=sha256:63c0e9e7eea69588479ebf4a8a270d5ac22763cc5854e9a7eae952a3908103f7 \
- --hash=sha256:66f85ce62c70b843bab1fb14a05d5737741e74e28c7b8b5a064de10142fad248 \
- --hash=sha256:6cf9b429b21df6b99f4dee7a1218b8b7ffbbe7df8764dc0bd60ce8a0708fed1e \
- --hash=sha256:70b37199913c1bd300ff6e2693316c6f869c7ee16378faf10e4f5e3275b299c3 \
- --hash=sha256:727fd05b57df37dc0bcf1a27767a3d9a78cbbc92822445f32cc3436ba797337b \
- --hash=sha256:74ae7b798248fe62021dbf3c914245ad45d1a6b0cb4a29ecb4b31d0bfbc4cc3e \
- --hash=sha256:784db1dcdab56bf0517743e746dfb0f885fc68d948aba86eeec2cba234bdf1c0 \
- --hash=sha256:86945f2ee6d10cdfd67bcb4069c1662dd711f7e2a4343db5cecec06b87cf31aa \
- --hash=sha256:86d835afea1eaa143012a2d7a3f45a3adce2d7adc8b4961f0b362214d800846a \
- --hash=sha256:872a5cf366aec6bb1147336480fef14c9164b154aeb6542327de4970282cd2f5 \
- --hash=sha256:8b973c57ff8e184109db042c842423ff4f60446239bd585a5131cc47f06f789d \
- --hash=sha256:8cba086a43d54ca804ce711b2a940b16e452807acebe7852ff327f1ecd49b0d4 \
- --hash=sha256:8f7f0e05112916223d3f438f293abf0727e1181b5983f413dfa2fefc4098245c \
- --hash=sha256:900218e456384ea676e24ea6a0417f030a3b07306d29d7ad843957b40a9d8d52 \
- --hash=sha256:93eebbcf1aafdf7e2ddd44c2923e2672e1010bddc014138b229e49725b4d6be5 \
- --hash=sha256:9c75442b2209b8470d6d5d8b1c25714270686f14c749028d2199c54e29f20b4d \
- --hash=sha256:9ee2197ef8c4f0dfe405d835f3b6a14f5fee7782b5de51ba06fb65fc9b36e9f1 \
- --hash=sha256:a414504bef8945eae5f2d7cb7be2d4af77c5d1cb5e20b296c2c25b61dff2900c \
- --hash=sha256:a4b9159734b326535f4dd01d947f919c6eefd2d9827466a696c44ced82dfbc18 \
- --hash=sha256:a80afd79f45f3c4a7d341f13acbe058d1ca8ac017c165d3fa0d3de6bc1a079d7 \
- --hash=sha256:aa5bc7c5d59d831d9773d1170acac7893ce3a5e130540605770ade83280e7188 \
- --hash=sha256:acfd89508504a19ed06ef963ad544ec6664518c863436306153e13e94605c218 \
- --hash=sha256:aeffcab3d4b43712bb7a60b65f6044d444e75e563ff6180af8f98dd4b905dfd2 \
- --hash=sha256:afaffc4393205524af9dfa400fa250143a6c3bc646c08c9f5e25a9f4b4d6a903 \
- --hash=sha256:b0c7088a73aef3d687c4deef8452a3ac7c1be4e29ed8bf3b366c8111128ac60c \
- --hash=sha256:b46b4ec24f7293f23adcd2d146960559aaf8020213de8ad1909dba6c013bf89c \
- --hash=sha256:b501b5fa195cc9e24fe102f21ec0a44dffc231d2af79950b451e0d99cea02234 \
- --hash=sha256:bf06bc2af43fa8d32d30fae16ad965663e966b1a3202ed407b84c989c3221e82 \
- --hash=sha256:c804e3a5aba5460c73955c955bdbd5c08c354954e9270a2c1565f62e866bdc39 \
- --hash=sha256:c8a9958e88b65c3b27e22ca2a076311636850b612d6bbfb76e8d156aacde2aaf \
- --hash=sha256:cc0a57f895b96ec78969c34f682c602bf8da1a0270b09bc65673df2e7638ec20 \
- --hash=sha256:cc8920d2ec5fa99875b670bb86ddeb21e295cb07aa331810d9e486e0b969d946 \
- --hash=sha256:ccc933afd4d20aad3c00bcef049cb40049f7f196e0397f1109dba6fed63267b0 \
- --hash=sha256:ce581db493ea1a96c0556360ede6607496e8bf9b3a8efa66e06477267bc831e9 \
- --hash=sha256:d0f23b44f57077c1ede8c5f26b30f706498b4862d3ff0a7298b8411dd2f043ff \
- --hash=sha256:d21644de1b609825ede2f48be98dfde4656aefc713654eeee280e37cadc4e0ad \
- --hash=sha256:d6889ec4ec662a1a37eb4b4fb26b6100841804dac55bd9df579e326cdc146227 \
- --hash=sha256:de5672f4a7b200c15a4127042170a694d4df43c992948f5e1af57f0174beed10 \
- --hash=sha256:e6a0bc88393d65807d751a614207b7129a310ca4fe76a74e5c7da5fa5671417e \
- --hash=sha256:ed89927b86296067b4f81f108a2271d8926467a8868e554eaf370fc27fa3ccaf \
- --hash=sha256:ee3888d9ff7c14604052b2ca5535a30216aa0a58e948cdd3eeb8d3415f638769 \
- --hash=sha256:f0963b55cdd70fad460fa4c1341f12f976bb26cb66021a5580329bd498988310 \
- --hash=sha256:f16417ec91f12f814b10bafe79ef77e70113a2f5f7018640e7425ff979253425 \
- --hash=sha256:f28620fe26bee16243be2b7b874da327312240a7cdc38b769a697578d2100013 \
- --hash=sha256:f4255143f5160d0de972d28c8f9665d882b5f61309d8362fdd3e103cf7bf010c \
- --hash=sha256:ffac52f28a7849ad7576293c0cb7b9f08304e8f7d738a8cb8a90ec4c55a998eb \
- --hash=sha256:ffe22d2b05504f786c867c8395de703937f934272eb67586817b46188b4ded6d \
- --hash=sha256:fffe29a1ef00883599d1dc2c51aa2e5d80afe49523c261a74933df395c15c520
+numpy==2.4.0 \
+ --hash=sha256:009bd0ea12d3c784b6639a8457537016ce5172109e585338e11334f6a7bb88ee \
+ --hash=sha256:02a2038eb27f9443a8b266a66911e926566b5a6ffd1a689b588f7f35b81e7dc3 \
+ --hash=sha256:0804a8e4ab070d1d35496e65ffd3cf8114c136a2b81f61dfab0de4b218aacfd5 \
+ --hash=sha256:0feafc9e03128074689183031181fac0897ff169692d8492066e949041096548 \
+ --hash=sha256:1889b3a3f47a7b5bee16bc25a2145bd7cb91897f815ce3499db64c7458b6d91d \
+ --hash=sha256:1d8f9fde5f6dc1b6fc34df8162f3b3079365468703fee7f31d4e0cc8c63baed9 \
+ --hash=sha256:1ee32359fb7543b7b7bd0b2f46294db27e29e7bbdf70541e81b190836cd83ded \
+ --hash=sha256:20c115517513831860c573996e395707aa9fb691eb179200125c250e895fcd93 \
+ --hash=sha256:21555da4ec4a0c942520ead42c3b0dc9477441e085c42b0fbdd6a084869a6f6b \
+ --hash=sha256:23a3e9d1a6f360267e8fbb38ba5db355a6a7e9be71d7fce7ab3125e88bb646c8 \
+ --hash=sha256:2a8b6bb8369abefb8bd1801b054ad50e02b3275c8614dc6e5b0373c305291037 \
+ --hash=sha256:2e284ca13d5a8367e43734148622caf0b261b275673823593e3e3634a6490f83 \
+ --hash=sha256:2f585f52b2baf07ff3356158d9268ea095e221371f1074fadea2f42544d58b4d \
+ --hash=sha256:316b2f2584682318539f0bcaca5a496ce9ca78c88066579ebd11fd06f8e4741e \
+ --hash=sha256:32ed06d0fe9cae27d8fb5f400c63ccee72370599c75e683a6358dd3a4fb50aaf \
+ --hash=sha256:355354388cba60f2132df297e2d53053d4063f79077b67b481d21276d61fc4df \
+ --hash=sha256:35ddc8f4914466e6fc954c76527aa91aa763682a4f6d73249ef20b418fe6effb \
+ --hash=sha256:36667db4d6c1cea79c8930ab72fadfb4060feb4bfe724141cd4bd064d2e5f8ce \
+ --hash=sha256:36cbfb13c152b1c7c184ddac43765db8ad672567e7bafff2cc755a09917ed2e6 \
+ --hash=sha256:39699233bc72dd482da1415dcb06076e32f60eddc796a796c5fb6c5efce94667 \
+ --hash=sha256:39b19251dec4de8ff8496cd0806cbe27bf0684f765abb1f4809554de93785f2d \
+ --hash=sha256:3d857f55e7fdf7c38ab96c4558c95b97d1c685be6b05c249f5fdafcbd6f9899e \
+ --hash=sha256:3de19cfecd1465d0dcf8a5b5ea8b3155b42ed0b639dba4b71e323d74f2a3be5e \
+ --hash=sha256:3f3096405acc48887458bbf9f6814d43785ac7ba2a57ea6442b581dedbc60ce6 \
+ --hash=sha256:40483b2f2d3ba7aad426443767ff5632ec3156ef09742b96913787d13c336471 \
+ --hash=sha256:413aa561266a4be2d06cd2b9665e89d9f54c543f418773076a76adcf2af08bc7 \
+ --hash=sha256:44aba2f0cafd287871a495fb3163408b0bd25bbce135c6f621534a07f4f7875c \
+ --hash=sha256:49ff32b09f5aa0cd30a20c2b39db3e669c845589f2b7fc910365210887e39344 \
+ --hash=sha256:4d1cfce39e511069b11e67cd0bd78ceff31443b7c9e5c04db73c7a19f572967c \
+ --hash=sha256:57c540ed8fb1f05cb997c6761cd56db72395b0d6985e90571ff660452ade4f98 \
+ --hash=sha256:5f48cb3e88fbc294dc90e215d86fbaf1c852c63dbdb6c3a3e63f45c4b57f7344 \
+ --hash=sha256:5fe44e277225fd3dff6882d86d3d447205d43532c3627313d17e754fb3905a0e \
+ --hash=sha256:60e8c196cd82cbbd4f130b5290007e13e6de3eca79f0d4d38014769d96a7c475 \
+ --hash=sha256:65167da969cd1ec3a1df31cb221ca3a19a8aaa25370ecb17d428415e93c1935e \
+ --hash=sha256:680060061adb2d74ce352628cb798cfdec399068aa7f07ba9fb818b2b3305f98 \
+ --hash=sha256:6bbaebf0d11567fa8926215ae731e1d58e6ec28a8a25235b8a47405d301332db \
+ --hash=sha256:6c05483c3136ac4c91b4e81903cb53a8707d316f488124d0398499a4f8e8ef51 \
+ --hash=sha256:6dc8b7e2f4eb184b37655195f421836cfae6f58197b67e3ffc501f1333d993fa \
+ --hash=sha256:6e504f7b16118198f138ef31ba24d985b124c2c469fe8467007cf30fd992f934 \
+ --hash=sha256:74623f2ab5cc3f7c886add4f735d1031a1d2be4a4ae63c0546cfd74e7a31ddf6 \
+ --hash=sha256:77f0d13fa87036d7553bf81f0e1fe3ce68d14c9976c9851744e4d3e91127e95f \
+ --hash=sha256:85eef4cb5625c47ee6425c58a3502555e10f45ee973da878ac8248ad58c136f3 \
+ --hash=sha256:882567b7ae57c1b1a0250208cc21a7976d8cbcc49d5a322e607e6f09c9e0bd53 \
+ --hash=sha256:8b986403023c8f3bf8f487c2e6186afda156174d31c175f747d8934dfddf3479 \
+ --hash=sha256:8cfa5f29a695cb7438965e6c3e8d06e0416060cf0d709c1b1c1653a939bf5c2a \
+ --hash=sha256:8eafe7c36c8430b7794edeab3087dec7bf31d634d92f2af9949434b9d1964cba \
+ --hash=sha256:9198f447e1dc5647d07c9a6bbe2063cc0132728cc7175b39dbc796da5b54920d \
+ --hash=sha256:92190db305a6f48734d3982f2c60fa30d6b5ee9bff10f2887b930d7b40119f4c \
+ --hash=sha256:927ccf5cd17c48f801f4ed43a7e5673a2724bd2171460be3e3894e6e332ef83a \
+ --hash=sha256:98e81648e0b36e325ab67e46b5400a7a6d4a22b8a7c8e8bbfe20e7db7906bf95 \
+ --hash=sha256:9a818668b674047fd88c4cddada7ab8f1c298812783e8328e956b78dc4807f9f \
+ --hash=sha256:a152d86a3ae00ba5f47b3acf3b827509fd0b6cb7d3259665e63dafbad22a75ea \
+ --hash=sha256:a2718c1de8504121714234b6f8241d0019450353276c88b9453c9c3d92e101db \
+ --hash=sha256:a39fb973a726e63223287adc6dafe444ce75af952d711e400f3bf2b36ef55a7b \
+ --hash=sha256:a899699294f28f7be8992853c0c60741f16ff199205e2e6cdca155762cbaa59d \
+ --hash=sha256:a8fdfed3deaf1928fb7667d96e0567cdf58c2b370ea2ee7e586aa383ec2cb346 \
+ --hash=sha256:aabb081ca0ec5d39591fc33018cd4b3f96e1a2dd6756282029986d00a785fba4 \
+ --hash=sha256:b1f5b45829ac1848893f0ddf5cb326110604d6df96cdc255b0bf9edd154104d4 \
+ --hash=sha256:b48e35f4ab6f6a7597c46e301126ceba4c44cd3280e3750f85db48b082624fa4 \
+ --hash=sha256:b54c83f1c0c0f1d748dca0af516062b8829d53d1f0c402be24b4257a9c48ada6 \
+ --hash=sha256:ba0cb30acd3ef11c94dc27fbfba68940652492bc107075e7ffe23057f9425681 \
+ --hash=sha256:bb50ce5fb202a26fd5404620e7ef820ad1ab3558b444cb0b55beb7ef66cd2d63 \
+ --hash=sha256:c95eb6db2884917d86cde0b4d4cf31adf485c8ec36bf8696dd66fa70de96f36b \
+ --hash=sha256:d0ffd9e2e4441c96a9c91ec1783285d80bf835b677853fc2770a89d50c1e48ac \
+ --hash=sha256:d57b5046c120561ba8fa8e4030fbb8b822f3063910fa901ffadf16e2b7128ad6 \
+ --hash=sha256:d9e6a7664ddd9746e20b7325351fe1a8408d0a2bf9c63b5e898290ddc8f09544 \
+ --hash=sha256:dc578891de1db95b2a35001b695451767b580bb45753717498213c5ff3c41d63 \
+ --hash=sha256:e0434aa22c821f44eeb4c650b81c7fbdd8c0122c6c4b5a576a76d5a35625ecd9 \
+ --hash=sha256:e06a922a469cae9a57100864caf4f8a97a1026513793969f8ba5b63137a35d25 \
+ --hash=sha256:e493962256a38f58283de033d8af176c5c91c084ea30f15834f7545451c42059 \
+ --hash=sha256:ecb0019d44f4cdb50b676c5d0cb4b1eae8e15d1ed3d3e6639f986fc92b2ec52c \
+ --hash=sha256:f935c4493eda9069851058fa0d9e39dbf6286be690066509305e52912714dbb2
# via
# feast (setup.py)
# dask
@@ -755,26 +753,28 @@ protobuf==6.33.2 \
--hash=sha256:d9b19771ca75935b3a4422957bc518b0cecb978b31d1dd12037b088f6bcc0e43 \
--hash=sha256:fc2a0e8b05b180e5fc0dd1559fe8ebdae21a27e81ac77728fb6c42b12c7419b4
# via feast (setup.py)
-psutil==7.1.3 \
- --hash=sha256:0005da714eee687b4b8decd3d6cc7c6db36215c9e74e5ad2264b90c3df7d92dc \
- --hash=sha256:1068c303be3a72f8e18e412c5b2a8f6d31750fb152f9cb106b54090296c9d251 \
- --hash=sha256:18349c5c24b06ac5612c0428ec2a0331c26443d259e2a0144a9b24b4395b58fa \
- --hash=sha256:19644c85dcb987e35eeeaefdc3915d059dac7bd1167cdcdbf27e0ce2df0c08c0 \
- --hash=sha256:2bdbcd0e58ca14996a42adf3621a6244f1bb2e2e528886959c72cf1e326677ab \
- --hash=sha256:31d77fcedb7529f27bb3a0472bea9334349f9a04160e8e6e5020f22c59893264 \
- --hash=sha256:3792983e23b69843aea49c8f5b8f115572c5ab64c153bada5270086a2123c7e7 \
- --hash=sha256:3bb428f9f05c1225a558f53e30ccbad9930b11c3fc206836242de1091d3e7dd3 \
- --hash=sha256:56d974e02ca2c8eb4812c3f76c30e28836fffc311d55d979f1465c1feeb2b68b \
- --hash=sha256:6c86281738d77335af7aec228328e944b30930899ea760ecf33a4dba66be5e74 \
- --hash=sha256:8f33a3702e167783a9213db10ad29650ebf383946e91bc77f28a5eb083496bc9 \
- --hash=sha256:95ef04cf2e5ba0ab9eaafc4a11eaae91b44f4ef5541acd2ee91d9108d00d59a7 \
- --hash=sha256:ad81425efc5e75da3f39b3e636293360ad8d0b49bed7df824c79764fb4ba9b8b \
- --hash=sha256:b403da1df4d6d43973dc004d19cee3b848e998ae3154cc8097d139b77156c353 \
- --hash=sha256:bc31fa00f1fbc3c3802141eede66f3a2d51d89716a194bf2cd6fc68310a19880 \
- --hash=sha256:bd0d69cee829226a761e92f28140bec9a5ee9d5b4fb4b0cc589068dbfff559b1 \
- --hash=sha256:c525ffa774fe4496282fb0b1187725793de3e7c6b29e41562733cae9ada151ee \
- --hash=sha256:f39c2c19fe824b47484b96f9692932248a54c43799a84282cfe58d05a6449efd \
- --hash=sha256:fac9cd332c67f4422504297889da5ab7e05fd11e3c4392140f7370f4208ded1f
+psutil==7.2.1 \
+ --hash=sha256:05cc68dbb8c174828624062e73078e7e35406f4ca2d0866c272c2410d8ef06d1 \
+ --hash=sha256:08a2f175e48a898c8eb8eace45ce01777f4785bc744c90aa2cc7f2fa5462a266 \
+ --hash=sha256:0d67c1822c355aa6f7314d92018fb4268a76668a536f133599b91edd48759442 \
+ --hash=sha256:2ceae842a78d1603753561132d5ad1b2f8a7979cb0c283f5b52fb4e6e14b1a79 \
+ --hash=sha256:35630d5af80d5d0d49cfc4d64c1c13838baf6717a13effb35869a5919b854cdf \
+ --hash=sha256:3fce5f92c22b00cdefd1645aa58ab4877a01679e901555067b1bd77039aa589f \
+ --hash=sha256:494c513ccc53225ae23eec7fe6e1482f1b8a44674241b54561f755a898650679 \
+ --hash=sha256:5e38404ca2bb30ed7267a46c02f06ff842e92da3bb8c5bfdadbd35a5722314d8 \
+ --hash=sha256:81442dac7abfc2f4f4385ea9e12ddf5a796721c0f6133260687fec5c3780fa49 \
+ --hash=sha256:923f8653416604e356073e6e0bccbe7c09990acef442def2f5640dd0faa9689f \
+ --hash=sha256:93f3f7b0bb07711b49626e7940d6fe52aa9940ad86e8f7e74842e73189712129 \
+ --hash=sha256:99a4cd17a5fdd1f3d014396502daa70b5ec21bf4ffe38393e152f8e449757d67 \
+ --hash=sha256:ab2b98c9fc19f13f59628d94df5cc4cc4844bc572467d113a8b517d634e362c6 \
+ --hash=sha256:b1b0671619343aa71c20ff9767eced0483e4fc9e1f489d50923738caf6a03c17 \
+ --hash=sha256:b2e953fcfaedcfbc952b44744f22d16575d3aa78eb4f51ae74165b4e96e55f42 \
+ --hash=sha256:ba9f33bb525b14c3ea563b2fd521a84d2fa214ec59e3e6a2858f78d0844dd60d \
+ --hash=sha256:cfbe6b40ca48019a51827f20d830887b3107a74a79b01ceb8cc8de4ccb17b672 \
+ --hash=sha256:d34d2ca888208eea2b5c68186841336a7f5e0b990edec929be909353a202768a \
+ --hash=sha256:ea46c0d060491051d39f0d2cff4f98d5c72b288289f57a21556cc7d504db37fc \
+ --hash=sha256:f7583aec590485b43ca601dd9cea0dcd65bd7bb21d30ef4ddbf4ea6b5ed1bdd3 \
+ --hash=sha256:f78baafb38436d5a128f837fab2d92c276dfb48af01a240b861ae02b2413ada8
# via feast (setup.py)
pyarrow==21.0.0 \
--hash=sha256:067c66ca29aaedae08218569a114e413b26e742171f526e828e1064fcdec13f4 \
@@ -1195,12 +1195,14 @@ sqlalchemy[mypy]==2.0.45 \
--hash=sha256:1d8b4a7a8c9b537509d56d5cd10ecdcfbb95912d72480c8861524efecc6a3fff \
--hash=sha256:215f0528b914e5c75ef2559f69dca86878a3beeb0c1be7279d77f18e8d180ed4 \
--hash=sha256:2c0b74aa79e2deade948fe8593654c8ef4228c44ba862bb7c9585c8e0db90f33 \
+ --hash=sha256:2e90a344c644a4fa871eb01809c32096487928bd2038bf10f3e4515cb688cc56 \
--hash=sha256:3c5f76216e7b85770d5bb5130ddd11ee89f4d52b11783674a662c7dd57018177 \
--hash=sha256:470daea2c1ce73910f08caf10575676a37159a6d16c4da33d0033546bddebc9b \
--hash=sha256:4748601c8ea959e37e03d13dcda4a44837afcd1b21338e637f7c935b8da06177 \
--hash=sha256:4b6bec67ca45bc166c8729910bd2a87f1c0407ee955df110d78948f5b5827e8a \
--hash=sha256:5225a288e4c8cc2308dbdd874edad6e7d0fd38eac1e9e5f23503425c8eee20d0 \
--hash=sha256:56ead1f8dfb91a54a28cd1d072c74b3d635bcffbd25e50786533b822d4f2cde2 \
+ --hash=sha256:5964f832431b7cdfaaa22a660b4c7eb1dfcd6ed41375f67fd3e3440fd95cb3cc \
--hash=sha256:59a8b8bd9c6bedf81ad07c8bd5543eedca55fe9b8780b2b628d495ba55f8db1e \
--hash=sha256:672c45cae53ba88e0dad74b9027dddd09ef6f441e927786b05bec75d949fbb2e \
--hash=sha256:6d0beadc2535157070c9c17ecf25ecec31e13c229a8f69196d7590bde8082bf1 \
@@ -1219,7 +1221,9 @@ sqlalchemy[mypy]==2.0.45 \
--hash=sha256:b8c8b41b97fba5f62349aa285654230296829672fc9939cd7f35aab246d1c08b \
--hash=sha256:ba547ac0b361ab4f1608afbc8432db669bd0819b3e12e29fb5fa9529a8bba81d \
--hash=sha256:c1c2091b1489435ff85728fafeb990f073e64f6f5e81d5cd53059773e8521eb6 \
+ --hash=sha256:c64772786d9eee72d4d3784c28f0a636af5b0a29f3fe26ff11f55efe90c0bd85 \
--hash=sha256:cd337d3526ec5298f67d6a30bbbe4ed7e5e68862f0bf6dd21d289f8d37b7d60b \
+ --hash=sha256:d29b2b99d527dbc66dd87c3c3248a5dd789d974a507f4653c969999fc7c1191b \
--hash=sha256:d2c3684fca8a05f0ac1d9a21c1f4a266983a7ea9180efb80ffeb03861ecd01a0 \
--hash=sha256:d62e47f5d8a50099b17e2bfc1b0c7d7ecd8ba6b46b1507b58cc4f05eefc3bb1c \
--hash=sha256:d8a2ca754e5415cde2b656c27900b19d50ba076aa05ce66e2207623d3fe41f5a \
@@ -1281,13 +1285,13 @@ typing-inspection==0.4.2 \
--hash=sha256:4ed1cacbdc298c220f1bd249ed5287caa16f34d44ef4e9c3d0cbad5b521545e7 \
--hash=sha256:ba561c48a67c5958007083d386c3295464928b01faa735ab8547c5692e87f464
# via pydantic
-tzdata==2025.2 \
- --hash=sha256:1a403fada01ff9221ca8044d701868fa132215d84beb92242d9acd2147f667a8 \
- --hash=sha256:b60a638fcc0daffadf82fe0f57e53d06bdec2f36c4df66280ae79bce6bd6f2b9
+tzdata==2025.3 \
+ --hash=sha256:06a47e5700f3081aab02b2e513160914ff0694bce9947d6b76ebd6bf57cfc5d1 \
+ --hash=sha256:de39c2ca5dc7b0344f2eba86f49d614019d29f060fc4ebc8a417896a620b56a7
# via pandas
-urllib3==2.6.1 \
- --hash=sha256:5379eb6e1aba4088bae84f8242960017ec8d8e3decf30480b3a1abdaa9671a3f \
- --hash=sha256:e67d06fe947c36a7ca39f4994b08d73922d40e6cca949907be05efa6fd75110b
+urllib3==2.6.2 \
+ --hash=sha256:016f9c98bb7e98085cb2b4b17b87d2c702975664e4f060c6532e64d1c1a5e797 \
+ --hash=sha256:ec21cddfe7724fc7cb4ba4bea7aa8e2ef36f607a4bab81aa6ce42a13dc3f03dd
# via requests
uvicorn[standard]==0.34.0 \
--hash=sha256:023dc038422502fa28a09c7a30bf2b6991512da7dcdb8fd35fe57cfc154126f4 \
diff --git a/setup.py b/setup.py
index 44344f5666d..d4ecc5ee0af 100644
--- a/setup.py
+++ b/setup.py
@@ -207,7 +207,7 @@
"mock==2.0.0",
"moto==4.2.14",
"mypy>=1.4.1,<1.11.3",
- "urllib3>=1.25.4,<3",
+ "urllib3>=2.6.0,<3",
"psutil==5.9.0",
"py>=1.11.0", # https://github.com/pytest-dev/pytest/issues/10420
"pytest>=6.0.0,<8",
From e484c12a65d4c23ebc0163d4b27843797e092204 Mon Sep 17 00:00:00 2001
From: Aniket Paluskar <64416568+aniketpalu@users.noreply.github.com>
Date: Tue, 30 Dec 2025 20:36:08 +0530
Subject: [PATCH 07/26] feat: Offline Store historical features retrieval based
on datetime range in Ray (#5738)
* feat: Offline Store historical features retrieval based on datetime range in Ray
Signed-off-by: Aniket Paluskar
* Reforamatted code to fix lint issues
Signed-off-by: Aniket Paluskar
* preserve event_timestamp in non-entity mode for correct point-in-time joins
Signed-off-by: Aniket Paluskar
* Minor lint changes
Signed-off-by: Aniket Paluskar
* Added test cases for datetime range based feature retrieval in Ray
Signed-off-by: Aniket Paluskar
---------
Signed-off-by: Aniket Paluskar
---
.../contrib/ray_offline_store/ray.py | 197 +++++++++++++++++-
.../tests/test_ray_integration.py | 125 +++++++++++
2 files changed, 318 insertions(+), 4 deletions(-)
diff --git a/sdk/python/feast/infra/offline_stores/contrib/ray_offline_store/ray.py b/sdk/python/feast/infra/offline_stores/contrib/ray_offline_store/ray.py
index 98247c6c0e0..b7b3619c15a 100644
--- a/sdk/python/feast/infra/offline_stores/contrib/ray_offline_store/ray.py
+++ b/sdk/python/feast/infra/offline_stores/contrib/ray_offline_store/ray.py
@@ -1,7 +1,7 @@
import logging
import os
import uuid
-from datetime import datetime
+from datetime import datetime, timedelta
from pathlib import Path
from typing import Any, Callable, Dict, List, Literal, Optional, Tuple, Union
@@ -1197,6 +1197,171 @@ def schema(self) -> pa.Schema:
return pa.Table.from_pandas(df).schema
+def _compute_non_entity_dates_ray(
+ feature_views: List[FeatureView],
+ start_date_opt: Optional[datetime],
+ end_date_opt: Optional[datetime],
+) -> Tuple[datetime, datetime]:
+ # Why: derive bounded time window when no entity_df is provided using explicit dates or max TTL fallback
+ end_date = (
+ make_tzaware(end_date_opt) if end_date_opt else make_tzaware(datetime.utcnow())
+ )
+ if start_date_opt is None:
+ max_ttl_seconds = 0
+ for fv in feature_views:
+ if getattr(fv, "ttl", None):
+ try:
+ ttl_val = fv.ttl
+ if isinstance(ttl_val, timedelta):
+ max_ttl_seconds = max(
+ max_ttl_seconds, int(ttl_val.total_seconds())
+ )
+ except Exception:
+ pass
+ start_date = (
+ end_date - timedelta(seconds=max_ttl_seconds)
+ if max_ttl_seconds > 0
+ else end_date - timedelta(days=30)
+ )
+ else:
+ start_date = make_tzaware(start_date_opt)
+ return start_date, end_date
+
+
+def _make_filter_range(timestamp_field: str, start_date: datetime, end_date: datetime):
+ # Why: factory function for time-range filtering in Ray map_batches
+ def _filter_range(batch: pd.DataFrame) -> pd.Series:
+ ts = pd.to_datetime(batch[timestamp_field], utc=True)
+ return (ts >= start_date) & (ts <= end_date)
+
+ return _filter_range
+
+
+def _make_select_distinct_entity_timestamps(join_keys: List[str], timestamp_field: str):
+ # Why: factory function for distinct (entity_keys, event_timestamp) projection in Ray map_batches
+ # This preserves multiple transactions per entity ID with different timestamps for proper PIT joins
+ def _select_distinct_entity_timestamps(batch: pd.DataFrame) -> pd.DataFrame:
+ cols = [c for c in join_keys if c in batch.columns]
+ if timestamp_field in batch.columns:
+ # Rename timestamp to standardized event_timestamp
+ batch = batch.copy()
+ if timestamp_field != "event_timestamp":
+ batch["event_timestamp"] = batch[timestamp_field]
+ cols = cols + ["event_timestamp"]
+ if not cols:
+ return pd.DataFrame(columns=join_keys + ["event_timestamp"])
+ return batch[cols].drop_duplicates().reset_index(drop=True)
+
+ return _select_distinct_entity_timestamps
+
+
+def _distinct_entities_for_feature_view_ray(
+ store: "RayOfflineStore",
+ config: RepoConfig,
+ fv: FeatureView,
+ registry: BaseRegistry,
+ project: str,
+ start_date: datetime,
+ end_date: datetime,
+) -> Tuple[Dataset, List[str]]:
+ # Why: read minimal columns, filter by time, and project distinct (join_keys, event_timestamp) per FeatureView
+ # This preserves multiple transactions per entity ID for proper point-in-time joins
+ ray_wrapper = get_ray_wrapper()
+ entities = fv.entities or []
+ entity_objs = [registry.get_entity(e, project) for e in entities]
+ original_join_keys, _rev_feats, timestamp_field, _created_col = _get_column_names(
+ fv, entity_objs
+ )
+
+ source_info = resolve_feature_view_source_with_fallback(
+ fv, config, is_materialization=False
+ )
+ source_path = store._get_source_path(source_info.data_source, config)
+ required_columns = list(set(original_join_keys + [timestamp_field]))
+ ds = ray_wrapper.read_parquet(source_path, columns=required_columns)
+
+ field_mapping = getattr(fv.batch_source, "field_mapping", None)
+ if field_mapping:
+ ds = apply_field_mapping(ds, field_mapping)
+ original_join_keys = [field_mapping.get(k, k) for k in original_join_keys]
+ timestamp_field = field_mapping.get(timestamp_field, timestamp_field)
+
+ if fv.projection.join_key_map:
+ join_keys = [
+ fv.projection.join_key_map.get(key, key) for key in original_join_keys
+ ]
+ else:
+ join_keys = original_join_keys
+
+ ds = ensure_timestamp_compatibility(ds, [timestamp_field])
+ ds = ds.filter(_make_filter_range(timestamp_field, start_date, end_date))
+ # Extract distinct (entity_keys, event_timestamp) combinations - not just entity_keys
+ ds = ds.map_batches(
+ _make_select_distinct_entity_timestamps(join_keys, timestamp_field),
+ batch_format="pandas",
+ )
+ return ds, join_keys
+
+
+def _make_align_columns(all_join_keys: List[str], include_timestamp: bool = False):
+ # Why: factory function for schema alignment in Ray map_batches
+ # When include_timestamp=True, also aligns event_timestamp column for proper PIT joins
+ def _align_columns(batch: pd.DataFrame) -> pd.DataFrame:
+ batch = batch.copy()
+ output_cols = list(all_join_keys)
+ if include_timestamp:
+ output_cols = output_cols + ["event_timestamp"]
+ for k in output_cols:
+ if k not in batch.columns:
+ batch[k] = pd.NA
+ return batch[output_cols]
+
+ return _align_columns
+
+
+def _make_distinct_by_keys(keys: List[str], include_timestamp: bool = False):
+ # Why: factory function for deduplication in Ray map_batches
+ # When include_timestamp=True, deduplicates on (keys + event_timestamp) for proper PIT joins
+ def _distinct(batch: pd.DataFrame) -> pd.DataFrame:
+ subset = list(keys)
+ if include_timestamp and "event_timestamp" in batch.columns:
+ subset = subset + ["event_timestamp"]
+ return batch.drop_duplicates(subset=subset).reset_index(drop=True)
+
+ return _distinct
+
+
+def _align_and_union_entities_ray(
+ datasets: List[Dataset],
+ all_join_keys: List[str],
+ include_timestamp: bool = False,
+) -> Dataset:
+ # Why: align schemas across FeatureViews and union to a unified entity set
+ # When include_timestamp=True, preserves distinct (entity_keys, event_timestamp) combinations
+ # for proper point-in-time joins with multiple transactions per entity
+ ray_wrapper = get_ray_wrapper()
+ output_cols = list(all_join_keys)
+ if include_timestamp:
+ output_cols = output_cols + ["event_timestamp"]
+ if not datasets:
+ return ray_wrapper.from_pandas(pd.DataFrame(columns=output_cols))
+
+ aligned = [
+ ds.map_batches(
+ _make_align_columns(all_join_keys, include_timestamp=include_timestamp),
+ batch_format="pandas",
+ )
+ for ds in datasets
+ ]
+ entity_ds = aligned[0]
+ for ds in aligned[1:]:
+ entity_ds = entity_ds.union(ds)
+ return entity_ds.map_batches(
+ _make_distinct_by_keys(all_join_keys, include_timestamp=include_timestamp),
+ batch_format="pandas",
+ )
+
+
class RayOfflineStore(OfflineStore):
def __init__(self) -> None:
self._staging_location: Optional[str] = None
@@ -1874,17 +2039,41 @@ def get_historical_features(
config: RepoConfig,
feature_views: List[FeatureView],
feature_refs: List[str],
- entity_df: Union[pd.DataFrame, str],
+ entity_df: Optional[Union[pd.DataFrame, str]],
registry: BaseRegistry,
project: str,
full_feature_names: bool = False,
+ **kwargs: Any,
) -> RetrievalJob:
store = RayOfflineStore()
store._init_ray(config)
- # Load entity_df as Ray dataset for distributed processing
+ # Load or derive entity dataset for distributed processing
ray_wrapper = get_ray_wrapper()
- if isinstance(entity_df, str):
+ if entity_df is None:
+ # Non-entity mode: derive entity set from feature sources within a bounded time window
+ # Preserves distinct (entity_keys, event_timestamp) combinations for proper PIT joins
+ # This handles cases where multiple transactions per entity ID exist
+ start_date, end_date = _compute_non_entity_dates_ray(
+ feature_views, kwargs.get("start_date"), kwargs.get("end_date")
+ )
+ per_view_entity_ds: List[Dataset] = []
+ all_join_keys: List[str] = []
+ for fv in feature_views:
+ ds, join_keys = _distinct_entities_for_feature_view_ray(
+ store, config, fv, registry, project, start_date, end_date
+ )
+ per_view_entity_ds.append(ds)
+ for k in join_keys:
+ if k not in all_join_keys:
+ all_join_keys.append(k)
+ # Use include_timestamp=True to preserve actual event_timestamp from data
+ # instead of assigning a fixed end_date to all entities
+ entity_ds = _align_and_union_entities_ray(
+ per_view_entity_ds, all_join_keys, include_timestamp=True
+ )
+ entity_df_sample = entity_ds.limit(1000).to_pandas()
+ elif isinstance(entity_df, str):
entity_ds = ray_wrapper.read_csv(entity_df)
entity_df_sample = entity_ds.limit(1000).to_pandas()
else:
diff --git a/sdk/python/feast/infra/offline_stores/contrib/ray_offline_store/tests/test_ray_integration.py b/sdk/python/feast/infra/offline_stores/contrib/ray_offline_store/tests/test_ray_integration.py
index 5ab82f8ef47..0420054b8fb 100644
--- a/sdk/python/feast/infra/offline_stores/contrib/ray_offline_store/tests/test_ray_integration.py
+++ b/sdk/python/feast/infra/offline_stores/contrib/ray_offline_store/tests/test_ray_integration.py
@@ -1,3 +1,5 @@
+from datetime import timedelta
+
import pandas as pd
import pytest
@@ -144,3 +146,126 @@ def test_ray_offline_store_persist(environment, universal_data_sources):
import os
assert os.path.exists(saved_path)
+
+
+@pytest.mark.integration
+@pytest.mark.universal_offline_stores
+def test_ray_offline_store_non_entity_mode_basic(environment, universal_data_sources):
+ """Test historical features retrieval without entity_df (non-entity mode).
+
+ This tests the basic functionality where entity_df=None and start_date/end_date
+ are provided to retrieve all features within the time range.
+ """
+ store = environment.feature_store
+
+ (entities, datasets, data_sources) = universal_data_sources
+ feature_views = construct_universal_feature_views(data_sources)
+
+ store.apply(
+ [
+ driver(),
+ feature_views.driver,
+ ]
+ )
+
+ # Use the environment's start and end dates for the query
+ start_date = environment.start_date
+ end_date = environment.end_date
+
+ # Non-entity mode: entity_df=None with start_date and end_date
+ result_df = store.get_historical_features(
+ entity_df=None,
+ features=[
+ "driver_stats:conv_rate",
+ "driver_stats:acc_rate",
+ "driver_stats:avg_daily_trips",
+ ],
+ full_feature_names=False,
+ start_date=start_date,
+ end_date=end_date,
+ ).to_df()
+
+ # Verify data was retrieved
+ assert len(result_df) > 0, "Non-entity mode should return data"
+ assert "conv_rate" in result_df.columns
+ assert "acc_rate" in result_df.columns
+ assert "avg_daily_trips" in result_df.columns
+ assert "event_timestamp" in result_df.columns
+ assert "driver_id" in result_df.columns
+
+ # Verify timestamps are within the requested range
+ result_df["event_timestamp"] = pd.to_datetime(
+ result_df["event_timestamp"], utc=True
+ )
+ assert (result_df["event_timestamp"] >= start_date).all()
+ assert (result_df["event_timestamp"] <= end_date).all()
+
+
+@pytest.mark.integration
+@pytest.mark.universal_offline_stores
+def test_ray_offline_store_non_entity_mode_preserves_multiple_timestamps(
+ environment, universal_data_sources
+):
+ """Test that non-entity mode preserves multiple transactions per entity ID.
+
+ This is a regression test for the fix that ensures distinct (entity_key, event_timestamp)
+ combinations are preserved, not just distinct entity keys. This is critical for
+ proper point-in-time joins when an entity has multiple transactions.
+ """
+ store = environment.feature_store
+
+ (entities, datasets, data_sources) = universal_data_sources
+ feature_views = construct_universal_feature_views(data_sources)
+
+ store.apply(
+ [
+ driver(),
+ feature_views.driver,
+ ]
+ )
+
+ now = _utc_now()
+ ts1 = pd.Timestamp(now - timedelta(hours=2)).round("ms")
+ ts2 = pd.Timestamp(now - timedelta(hours=1)).round("ms")
+ ts3 = pd.Timestamp(now).round("ms")
+
+ # Write data with multiple timestamps for the same entity (driver_id=9001)
+ df_to_write = pd.DataFrame.from_dict(
+ {
+ "event_timestamp": [ts1, ts2, ts3],
+ "driver_id": [9001, 9001, 9001], # Same entity, different timestamps
+ "conv_rate": [0.1, 0.2, 0.3],
+ "acc_rate": [0.9, 0.8, 0.7],
+ "avg_daily_trips": [10, 20, 30],
+ "created": [ts1, ts2, ts3],
+ },
+ )
+
+ store.write_to_offline_store(
+ feature_views.driver.name, df_to_write, allow_registry_cache=False
+ )
+
+ # Query without entity_df - should get all 3 rows for driver_id=9001
+ result_df = store.get_historical_features(
+ entity_df=None,
+ features=[
+ "driver_stats:conv_rate",
+ "driver_stats:acc_rate",
+ ],
+ full_feature_names=False,
+ start_date=ts1 - timedelta(minutes=1),
+ end_date=ts3 + timedelta(minutes=1),
+ ).to_df()
+
+ # Filter to just our test entity
+ result_df = result_df[result_df["driver_id"] == 9001]
+
+ # Verify we got all 3 rows with different timestamps (not just 1 row)
+ assert len(result_df) == 3, (
+ f"Expected 3 rows for driver_id=9001 (one per timestamp), got {len(result_df)}"
+ )
+
+ # Verify the feature values are correct for each timestamp
+ result_df = result_df.sort_values("event_timestamp").reset_index(drop=True)
+ assert list(result_df["conv_rate"]) == [0.1, 0.2, 0.3]
+ assert list(result_df["acc_rate"]) == [0.9, 0.8, 0.7]
From 103c5e9477a81671a6f405fde5145611afa67995 Mon Sep 17 00:00:00 2001
From: Tony
Date: Wed, 31 Dec 2025 06:42:04 +0200
Subject: [PATCH 08/26] fix: Support arro3 table schema with newer deltalake
packages (#5799)
* fix: Support arro3 table schema with newer deltalake packages
Signed-off-by: Anton Shtarev
* Fix lint
Signed-off-by: Anton Shtarev
---------
Signed-off-by: Anton Shtarev
---
.../feast/infra/offline_stores/file_source.py | 17 ++++++++++++-----
1 file changed, 12 insertions(+), 5 deletions(-)
diff --git a/sdk/python/feast/infra/offline_stores/file_source.py b/sdk/python/feast/infra/offline_stores/file_source.py
index 12524ab4fc2..02d40ad770b 100644
--- a/sdk/python/feast/infra/offline_stores/file_source.py
+++ b/sdk/python/feast/infra/offline_stores/file_source.py
@@ -202,11 +202,18 @@ def get_table_column_names_and_types(
"AWS_ENDPOINT_URL": str(self.s3_endpoint_override),
}
- schema = (
- DeltaTable(self.path, storage_options=storage_options)
- .schema()
- .to_pyarrow()
- )
+ delta_schema = DeltaTable(
+ self.path, storage_options=storage_options
+ ).schema()
+ if hasattr(delta_schema, "to_arrow"):
+ # deltalake >= 0.10.0
+ arro3_schema = delta_schema.to_arrow()
+ schema = pyarrow.schema(arro3_schema)
+ elif hasattr(delta_schema, "to_pyarrow"):
+ # deltalake < 0.10.0
+ schema = delta_schema.to_pyarrow()
+ else:
+ raise Exception("Unknown DeltaTable package version")
else:
raise Exception(f"Unknown FileFormat -> {self.file_format}")
From 58d0325477626cb5637edd824505bf57a95a422a Mon Sep 17 00:00:00 2001
From: Jacob Weinhold <29459386+jfw-ppi@users.noreply.github.com>
Date: Fri, 2 Jan 2026 08:58:16 +0100
Subject: [PATCH 09/26] fix: Spark Materialization Engine Cannot Infer Schema
(#5806)
* fix: build Spark DataFrame from Arrow with schema and empty handling(#5594)
Signed-off-by: Jacob Weinhold <29459386+jfw-ppi@users.noreply.github.com>
* fix: build Spark DataFrame from Arrow with schema and empty handling(#5594)
Signed-off-by: Jacob Weinhold <29459386+jfw-ppi@users.noreply.github.com>
---------
Signed-off-by: Jacob Weinhold <29459386+jfw-ppi@users.noreply.github.com>
---
sdk/python/feast/infra/compute_engines/spark/nodes.py | 10 +++++++++-
1 file changed, 9 insertions(+), 1 deletion(-)
diff --git a/sdk/python/feast/infra/compute_engines/spark/nodes.py b/sdk/python/feast/infra/compute_engines/spark/nodes.py
index fa5a7bd6208..124ce65ff90 100644
--- a/sdk/python/feast/infra/compute_engines/spark/nodes.py
+++ b/sdk/python/feast/infra/compute_engines/spark/nodes.py
@@ -4,6 +4,7 @@
import pandas as pd
from pyspark.sql import DataFrame, SparkSession, Window
from pyspark.sql import functions as F
+from pyspark.sql.pandas.types import from_arrow_schema
from feast import BatchFeatureView, StreamFeatureView
from feast.aggregation import Aggregation
@@ -80,7 +81,14 @@ def execute(self, context: ExecutionContext) -> DAGValue:
if isinstance(retrieval_job, SparkRetrievalJob):
spark_df = cast(SparkRetrievalJob, retrieval_job).to_spark_df()
else:
- spark_df = self.spark_session.createDataFrame(retrieval_job.to_arrow())
+ arrow_table = retrieval_job.to_arrow()
+ if arrow_table.num_rows == 0:
+ spark_schema = from_arrow_schema(arrow_table.schema)
+ spark_df = self.spark_session.createDataFrame(
+ self.spark_session.sparkContext.emptyRDD(), schema=spark_schema
+ )
+ else:
+ spark_df = self.spark_session.createDataFrame(arrow_table.to_pandas())
return DAGValue(
data=spark_df,
From 5b787afce9263a5cc37bf69119d505d3ffd5f13c Mon Sep 17 00:00:00 2001
From: Jacob Weinhold <29459386+jfw-ppi@users.noreply.github.com>
Date: Fri, 2 Jan 2026 09:00:49 +0100
Subject: [PATCH 10/26] feat: Support staging for spark materialization (#5671)
(#5797)
* feat: support staging for spark materialization (#5671)
Signed-off-by: Jacob Weinhold <29459386+jfw-ppi@users.noreply.github.com>
* feat: support staging for spark materialization ([#5671](https://github.com/feast-dev/feast/issues/5671))
Signed-off-by: Jacob Weinhold <29459386+jfw-ppi@users.noreply.github.com>
---------
Signed-off-by: Jacob Weinhold <29459386+jfw-ppi@users.noreply.github.com>
---
docs/reference/offline-stores/spark.md | 6 +-
.../contrib/spark_offline_store/spark.py | 208 ++++++++++++++----
.../contrib/spark_offline_store/test_spark.py | 208 ++++++++++++++++++
3 files changed, 374 insertions(+), 48 deletions(-)
diff --git a/docs/reference/offline-stores/spark.md b/docs/reference/offline-stores/spark.md
index 2e2facba64a..7f2d4094785 100644
--- a/docs/reference/offline-stores/spark.md
+++ b/docs/reference/offline-stores/spark.md
@@ -32,9 +32,13 @@ offline_store:
spark.sql.session.timeZone: "UTC"
spark.sql.execution.arrow.fallback.enabled: "true"
spark.sql.execution.arrow.pyspark.enabled: "true"
+ # Optional: spill large materializations to the staging location instead of collecting in the driver
+ staging_location: "s3://my-bucket/tmp/feast"
online_store:
path: data/online_store.db
```
+
+> The `staging_location` can point to object storage (like S3, GCS, or Azure blobs) or a local filesystem directory (e.g., `/tmp/feast/staging`) to spill large materialization outputs before reading them back into Feast.
{% endcode %}
The full set of configuration options is available in [SparkOfflineStoreConfig](https://rtd.feast.dev/en/master/#feast.infra.offline_stores.contrib.spark_offline_store.spark.SparkOfflineStoreConfig).
@@ -60,7 +64,7 @@ Below is a matrix indicating which functionality is supported by `SparkRetrieval
| export to arrow table | yes |
| export to arrow batches | no |
| export to SQL | no |
-| export to data lake (S3, GCS, etc.) | no |
+| export to data lake (S3, GCS, etc.) | yes |
| export to data warehouse | no |
| export as Spark dataframe | yes |
| local execution of Python-based on-demand transforms | no |
diff --git a/sdk/python/feast/infra/offline_stores/contrib/spark_offline_store/spark.py b/sdk/python/feast/infra/offline_stores/contrib/spark_offline_store/spark.py
index 47e76a014f0..af83d303504 100644
--- a/sdk/python/feast/infra/offline_stores/contrib/spark_offline_store/spark.py
+++ b/sdk/python/feast/infra/offline_stores/contrib/spark_offline_store/spark.py
@@ -16,6 +16,7 @@
Union,
cast,
)
+from urllib.parse import urlparse
if TYPE_CHECKING:
from feast.saved_dataset import ValidationReference
@@ -24,6 +25,7 @@
import pandas
import pandas as pd
import pyarrow
+import pyarrow.dataset as ds
import pyarrow.parquet as pq
import pyspark
from pydantic import StrictStr
@@ -445,8 +447,43 @@ def _to_df_internal(self, timeout: Optional[int] = None) -> pd.DataFrame:
def _to_arrow_internal(self, timeout: Optional[int] = None) -> pyarrow.Table:
"""Return dataset as pyarrow Table synchronously"""
+ if self._should_use_staging_for_arrow():
+ return self._to_arrow_via_staging()
+
return pyarrow.Table.from_pandas(self._to_df_internal(timeout=timeout))
+ def _should_use_staging_for_arrow(self) -> bool:
+ offline_store = getattr(self._config, "offline_store", None)
+ return bool(
+ isinstance(offline_store, SparkOfflineStoreConfig)
+ and getattr(offline_store, "staging_location", None)
+ )
+
+ def _to_arrow_via_staging(self) -> pyarrow.Table:
+ paths = self.to_remote_storage()
+ if not paths:
+ return pyarrow.table({})
+
+ parquet_paths = _filter_parquet_files(paths)
+ if not parquet_paths:
+ return pyarrow.table({})
+
+ normalized_paths = self._normalize_staging_paths(parquet_paths)
+ dataset = ds.dataset(normalized_paths, format="parquet")
+ return dataset.to_table()
+
+ def _normalize_staging_paths(self, paths: List[str]) -> List[str]:
+ """Normalize staging paths for PyArrow datasets."""
+ normalized = []
+ for path in paths:
+ if path.startswith("file://"):
+ normalized.append(path[len("file://") :])
+ elif "://" in path:
+ normalized.append(path)
+ else:
+ normalized.append(path)
+ return normalized
+
def to_feast_df(
self,
validation_reference: Optional["ValidationReference"] = None,
@@ -508,55 +545,53 @@ def supports_remote_storage_export(self) -> bool:
def to_remote_storage(self) -> List[str]:
"""Currently only works for local and s3-based staging locations"""
- if self.supports_remote_storage_export():
- sdf: pyspark.sql.DataFrame = self.to_spark_df()
-
- if self._config.offline_store.staging_location.startswith("/"):
- local_file_staging_location = os.path.abspath(
- self._config.offline_store.staging_location
- )
-
- # write to staging location
- output_uri = os.path.join(
- str(local_file_staging_location), str(uuid.uuid4())
- )
- sdf.write.parquet(output_uri)
-
- return _list_files_in_folder(output_uri)
- elif self._config.offline_store.staging_location.startswith("s3://"):
- from feast.infra.utils import aws_utils
-
- spark_compatible_s3_staging_location = (
- self._config.offline_store.staging_location.replace(
- "s3://", "s3a://"
- )
- )
-
- # write to staging location
- output_uri = os.path.join(
- str(spark_compatible_s3_staging_location), str(uuid.uuid4())
- )
- sdf.write.parquet(output_uri)
-
- return aws_utils.list_s3_files(
- self._config.offline_store.region, output_uri
- )
- elif self._config.offline_store.staging_location.startswith("hdfs://"):
- output_uri = os.path.join(
- self._config.offline_store.staging_location, str(uuid.uuid4())
- )
- sdf.write.parquet(output_uri)
- spark_session = get_spark_session_or_start_new_with_repoconfig(
- store_config=self._config.offline_store
- )
- return _list_hdfs_files(spark_session, output_uri)
- else:
- raise NotImplementedError(
- "to_remote_storage is only implemented for file://, s3:// and hdfs:// uri schemes"
- )
+ if not self.supports_remote_storage_export():
+ raise NotImplementedError()
+
+ sdf: pyspark.sql.DataFrame = self.to_spark_df()
+ staging_location = self._config.offline_store.staging_location
+
+ if staging_location.startswith("/"):
+ local_file_staging_location = os.path.abspath(staging_location)
+ output_uri = os.path.join(local_file_staging_location, str(uuid.uuid4()))
+ sdf.write.parquet(output_uri)
+ return _list_files_in_folder(output_uri)
+ elif staging_location.startswith("s3://"):
+ from feast.infra.utils import aws_utils
+ spark_compatible_s3_staging_location = staging_location.replace(
+ "s3://", "s3a://"
+ )
+ output_uri = os.path.join(
+ spark_compatible_s3_staging_location, str(uuid.uuid4())
+ )
+ sdf.write.parquet(output_uri)
+ s3_uri_for_listing = output_uri.replace("s3a://", "s3://", 1)
+ return aws_utils.list_s3_files(
+ self._config.offline_store.region, s3_uri_for_listing
+ )
+ elif staging_location.startswith("gs://"):
+ output_uri = os.path.join(staging_location, str(uuid.uuid4()))
+ sdf.write.parquet(output_uri)
+ return _list_gcs_files(output_uri)
+ elif staging_location.startswith(("wasbs://", "abfs://", "abfss://")) or (
+ staging_location.startswith("https://")
+ and ".blob.core.windows.net" in staging_location
+ ):
+ output_uri = os.path.join(staging_location, str(uuid.uuid4()))
+ sdf.write.parquet(output_uri)
+ return _list_azure_files(output_uri)
+ elif staging_location.startswith("hdfs://"):
+ output_uri = os.path.join(staging_location, str(uuid.uuid4()))
+ sdf.write.parquet(output_uri)
+ spark_session = get_spark_session_or_start_new_with_repoconfig(
+ store_config=self._config.offline_store
+ )
+ return _list_hdfs_files(spark_session, output_uri)
else:
- raise NotImplementedError()
+ raise NotImplementedError(
+ "to_remote_storage is only implemented for file://, s3://, gs://, azure, and hdfs uri schemes"
+ )
@property
def metadata(self) -> Optional[RetrievalMetadata]:
@@ -789,6 +824,10 @@ def _list_files_in_folder(folder):
return files
+def _filter_parquet_files(paths: List[str]) -> List[str]:
+ return [path for path in paths if path.endswith(".parquet")]
+
+
def _list_hdfs_files(spark_session: SparkSession, uri: str) -> List[str]:
jvm = spark_session._jvm
jsc = spark_session._jsc
@@ -805,6 +844,81 @@ def _list_hdfs_files(spark_session: SparkSession, uri: str) -> List[str]:
return files
+def _list_gcs_files(path: str) -> List[str]:
+ try:
+ from google.cloud import storage
+ except ImportError as e:
+ from feast.errors import FeastExtrasDependencyImportError
+
+ raise FeastExtrasDependencyImportError("gcp", str(e))
+
+ assert path.startswith("gs://"), "GCS path must start with gs://"
+ bucket_path = path[len("gs://") :]
+ if "/" in bucket_path:
+ bucket, prefix = bucket_path.split("/", 1)
+ else:
+ bucket, prefix = bucket_path, ""
+
+ client = storage.Client()
+ bucket_obj = client.bucket(bucket)
+ blobs = bucket_obj.list_blobs(prefix=prefix)
+
+ files = []
+ for blob in blobs:
+ if not blob.name.endswith("/"):
+ files.append(f"gs://{bucket}/{blob.name}")
+ return files
+
+
+def _list_azure_files(path: str) -> List[str]:
+ try:
+ from azure.identity import DefaultAzureCredential
+ from azure.storage.blob import BlobServiceClient
+ except ImportError as e:
+ from feast.errors import FeastExtrasDependencyImportError
+
+ raise FeastExtrasDependencyImportError("azure", str(e))
+
+ parsed = urlparse(path)
+ scheme = parsed.scheme
+
+ if scheme in ("wasbs", "abfs", "abfss"):
+ if "@" not in parsed.netloc:
+ raise ValueError("Azure staging URI must include container@account host")
+ container, account_host = parsed.netloc.split("@", 1)
+ account_url = f"https://{account_host}"
+ base = f"{scheme}://{container}@{account_host}"
+ prefix = parsed.path.lstrip("/")
+ else:
+ account_url = f"{parsed.scheme}://{parsed.netloc}"
+ container_and_prefix = parsed.path.lstrip("/").split("/", 1)
+ container = container_and_prefix[0]
+ base = f"{account_url}/{container}"
+ prefix = container_and_prefix[1] if len(container_and_prefix) > 1 else ""
+
+ credential = os.environ.get("AZURE_STORAGE_KEY") or os.environ.get(
+ "AZURE_STORAGE_ACCOUNT_KEY"
+ )
+ if credential:
+ client = BlobServiceClient(account_url=account_url, credential=credential)
+ else:
+ default_credential = DefaultAzureCredential(
+ exclude_shared_token_cache_credential=True
+ )
+ client = BlobServiceClient(
+ account_url=account_url, credential=default_credential
+ )
+
+ container_client = client.get_container_client(container)
+ blobs = container_client.list_blobs(name_starts_with=prefix if prefix else None)
+
+ files = []
+ for blob in blobs:
+ if not blob.name.endswith("/"):
+ files.append(f"{base}/{blob.name}")
+ return files
+
+
def _cast_data_frame(
df_new: pyspark.sql.DataFrame, df_existing: pyspark.sql.DataFrame
) -> pyspark.sql.DataFrame:
diff --git a/sdk/python/tests/unit/infra/offline_stores/contrib/spark_offline_store/test_spark.py b/sdk/python/tests/unit/infra/offline_stores/contrib/spark_offline_store/test_spark.py
index 22c75ebf387..fbbba055e56 100644
--- a/sdk/python/tests/unit/infra/offline_stores/contrib/spark_offline_store/test_spark.py
+++ b/sdk/python/tests/unit/infra/offline_stores/contrib/spark_offline_store/test_spark.py
@@ -1,13 +1,17 @@
+import os
from datetime import datetime
from unittest.mock import MagicMock, patch
import pandas as pd
+import pyarrow as pa
from feast.entity import Entity
from feast.feature_view import FeatureView, Field
+from feast.infra.offline_stores.contrib.spark_offline_store import spark as spark_module
from feast.infra.offline_stores.contrib.spark_offline_store.spark import (
SparkOfflineStore,
SparkOfflineStoreConfig,
+ SparkRetrievalJob,
)
from feast.infra.offline_stores.contrib.spark_offline_store.spark_source import (
SparkSource,
@@ -504,3 +508,207 @@ def test_get_historical_features_non_entity_with_only_end_date(mock_get_spark_se
# Verify data: mocked DataFrame flows to Pandas
pdf = retrieval_job._to_df_internal()
assert pdf.equals(expected_pdf)
+
+
+def test_to_arrow_uses_staging_when_enabled(monkeypatch, tmp_path):
+ repo_config = RepoConfig(
+ project="test_project",
+ registry="test_registry",
+ provider="local",
+ offline_store=SparkOfflineStoreConfig(
+ type="spark",
+ staging_location=str(tmp_path),
+ ),
+ )
+
+ job = SparkRetrievalJob(
+ spark_session=MagicMock(),
+ query="select 1",
+ full_feature_names=False,
+ config=repo_config,
+ )
+
+ expected_table = pa.table({"a": [1]})
+ dataset_mock = MagicMock()
+
+ monkeypatch.setattr(
+ job, "to_remote_storage", MagicMock(return_value=["file:///test.parquet"])
+ )
+ monkeypatch.setattr(
+ spark_module.ds, "dataset", MagicMock(return_value=dataset_mock)
+ )
+ dataset_mock.to_table.return_value = expected_table
+
+ result = job._to_arrow_internal()
+
+ job.to_remote_storage.assert_called_once()
+ spark_module.ds.dataset.assert_called_once_with(["/test.parquet"], format="parquet")
+ assert result.equals(expected_table)
+
+
+def test_to_arrow_normalizes_local_staging_paths(monkeypatch, tmp_path):
+ repo_config = RepoConfig(
+ project="test_project",
+ registry="test_registry",
+ provider="local",
+ offline_store=SparkOfflineStoreConfig(
+ type="spark",
+ staging_location=str(tmp_path / "local"),
+ ),
+ )
+
+ job = SparkRetrievalJob(
+ spark_session=MagicMock(),
+ query="select 1",
+ full_feature_names=False,
+ config=repo_config,
+ )
+
+ expected_table = pa.table({"a": [1]})
+ dataset_mock = MagicMock()
+
+ raw_path = os.path.join(str(tmp_path), "staged.parquet")
+ monkeypatch.setattr(job, "to_remote_storage", MagicMock(return_value=[raw_path]))
+ monkeypatch.setattr(
+ spark_module.ds, "dataset", MagicMock(return_value=dataset_mock)
+ )
+ dataset_mock.to_table.return_value = expected_table
+
+ result = job._to_arrow_internal()
+
+ job.to_remote_storage.assert_called_once()
+ spark_module.ds.dataset.assert_called_once_with([raw_path], format="parquet")
+ assert result.equals(expected_table)
+
+
+def test_to_arrow_falls_back_to_pandas_when_staging_disabled(monkeypatch):
+ repo_config = RepoConfig(
+ project="test_project",
+ registry="test_registry",
+ provider="local",
+ offline_store=SparkOfflineStoreConfig(
+ type="spark",
+ staging_location=None,
+ ),
+ )
+
+ job = SparkRetrievalJob(
+ spark_session=MagicMock(),
+ query="select 1",
+ full_feature_names=False,
+ config=repo_config,
+ )
+
+ pdf = pd.DataFrame({"a": [1]})
+ monkeypatch.setattr(job, "_to_df_internal", MagicMock(return_value=pdf))
+ monkeypatch.setattr(
+ job, "to_remote_storage", MagicMock(side_effect=AssertionError("not called"))
+ )
+
+ result = job._to_arrow_internal()
+
+ assert result.equals(pa.Table.from_pandas(pdf))
+
+
+@patch("feast.infra.utils.aws_utils.list_s3_files")
+def test_to_remote_storage_lists_with_s3_scheme(mock_list_s3_files):
+ spark_df = MagicMock()
+ spark_df.write.parquet = MagicMock()
+ spark_session = MagicMock()
+ spark_session.sql.return_value = spark_df
+
+ mock_list_s3_files.return_value = ["s3://bucket/prefix/file.parquet"]
+
+ repo_config = RepoConfig(
+ project="test_project",
+ registry="test_registry",
+ provider="local",
+ offline_store=SparkOfflineStoreConfig(
+ type="spark",
+ staging_location="s3://bucket/prefix",
+ region="us-west-2",
+ ),
+ )
+
+ job = SparkRetrievalJob(
+ spark_session=spark_session,
+ query="select 1",
+ full_feature_names=False,
+ config=repo_config,
+ )
+
+ result = job.to_remote_storage()
+
+ assert spark_df.write.parquet.call_args[0][0].startswith("s3a://bucket/prefix")
+ assert mock_list_s3_files.call_args[0][1].startswith("s3://bucket/prefix")
+ assert result == mock_list_s3_files.return_value
+
+
+@patch("feast.infra.offline_stores.contrib.spark_offline_store.spark._list_gcs_files")
+def test_to_remote_storage_lists_with_gcs_scheme(mock_list_gcs_files):
+ spark_df = MagicMock()
+ spark_df.write.parquet = MagicMock()
+ spark_session = MagicMock()
+ spark_session.sql.return_value = spark_df
+
+ mock_list_gcs_files.return_value = ["gs://bucket/prefix/file.parquet"]
+
+ repo_config = RepoConfig(
+ project="test_project",
+ registry="test_registry",
+ provider="local",
+ offline_store=SparkOfflineStoreConfig(
+ type="spark",
+ staging_location="gs://bucket/prefix",
+ ),
+ )
+
+ job = SparkRetrievalJob(
+ spark_session=spark_session,
+ query="select 1",
+ full_feature_names=False,
+ config=repo_config,
+ )
+
+ result = job.to_remote_storage()
+
+ assert spark_df.write.parquet.call_args[0][0].startswith("gs://bucket/prefix")
+ mock_list_gcs_files.assert_called_once()
+ assert result == mock_list_gcs_files.return_value
+
+
+@patch("feast.infra.offline_stores.contrib.spark_offline_store.spark._list_azure_files")
+def test_to_remote_storage_lists_with_azure_scheme(mock_list_azure_files):
+ spark_df = MagicMock()
+ spark_df.write.parquet = MagicMock()
+ spark_session = MagicMock()
+ spark_session.sql.return_value = spark_df
+
+ mock_list_azure_files.return_value = [
+ "wasbs://container@account.blob.core.windows.net/path/file.parquet"
+ ]
+
+ repo_config = RepoConfig(
+ project="test_project",
+ registry="test_registry",
+ provider="local",
+ offline_store=SparkOfflineStoreConfig(
+ type="spark",
+ staging_location="wasbs://container@account.blob.core.windows.net/path",
+ ),
+ )
+
+ job = SparkRetrievalJob(
+ spark_session=spark_session,
+ query="select 1",
+ full_feature_names=False,
+ config=repo_config,
+ )
+
+ result = job.to_remote_storage()
+
+ assert spark_df.write.parquet.call_args[0][0].startswith(
+ "wasbs://container@account.blob.core.windows.net/path"
+ )
+ mock_list_azure_files.assert_called_once()
+ assert result == mock_list_azure_files.return_value
From b16fa09dace4665de1013acdc8057493aa651ac4 Mon Sep 17 00:00:00 2001
From: Srihari Venkataramaiah
Date: Fri, 2 Jan 2026 13:32:58 +0530
Subject: [PATCH 11/26] test: Update Feast Connection workbench tests (#5794)
test: Update Workbench Connection Tests
Signed-off-by: Srihari
---
.../feast_wb_connection_integration_test.go | 66 +++++-
.../test/e2e_rhoai/feast_wb_milvus_test.go | 11 +-
.../feast_wb_ray_offline_store_test.go | 7 +-
.../test/e2e_rhoai/resources/custom-nb.yaml | 2 +
.../feast-wb-connection-credit-scoring.ipynb | 221 ++++--------------
...-test.ipynb => feast-wb-milvus-test.ipynb} | 0
.../test/utils/notebook_util.go | 25 +-
infra/feast-operator/test/utils/test_util.go | 98 ++++++++
8 files changed, 239 insertions(+), 191 deletions(-)
rename infra/feast-operator/test/e2e_rhoai/resources/{feast-test.ipynb => feast-wb-milvus-test.ipynb} (100%)
diff --git a/infra/feast-operator/test/e2e_rhoai/feast_wb_connection_integration_test.go b/infra/feast-operator/test/e2e_rhoai/feast_wb_connection_integration_test.go
index 5b42bfe1276..43bfff17c2f 100644
--- a/infra/feast-operator/test/e2e_rhoai/feast_wb_connection_integration_test.go
+++ b/infra/feast-operator/test/e2e_rhoai/feast_wb_connection_integration_test.go
@@ -22,6 +22,7 @@ package e2erhoai
import (
"fmt"
+ "time"
utils "github.com/feast-dev/feast/infra/feast-operator/test/utils"
. "github.com/onsi/ginkgo/v2"
@@ -43,6 +44,60 @@ var _ = Describe("Feast Workbench Integration Connection Testing", Ordered, func
feastCRName = "credit-scoring"
)
+ // Verify feast ConfigMap
+ verifyFeastConfigMap := func(authEnabled bool) {
+ feastConfigMapName := "jupyter-nb-kube-3aadmin-feast-config"
+ configMapKey := "credit_scoring_local"
+ By(fmt.Sprintf("Listing ConfigMaps and verifying %s exists with correct content", feastConfigMapName))
+
+ // Build expected content based on auth type
+ expectedContent := []string{
+ "project: credit_scoring_local",
+ }
+ if authEnabled {
+ expectedContent = append(expectedContent, "type: kubernetes")
+ } else {
+ expectedContent = append(expectedContent, "type: no_auth")
+ }
+
+ // First, list ConfigMaps and check if target ConfigMap exists
+ // Retry with polling since the ConfigMap may be created asynchronously
+ const maxRetries = 5
+ const retryInterval = 5 * time.Second
+ var configMapExists bool
+ var err error
+
+ for i := 0; i < maxRetries; i++ {
+ exists, listErr := utils.VerifyConfigMapExistsInList(namespace, feastConfigMapName)
+ if listErr != nil {
+ err = listErr
+ if i < maxRetries-1 {
+ fmt.Printf("Failed to list ConfigMaps, retrying in %v... (attempt %d/%d)\n", retryInterval, i+1, maxRetries)
+ time.Sleep(retryInterval)
+ continue
+ }
+ } else if exists {
+ configMapExists = true
+ fmt.Printf("ConfigMap %s found in ConfigMap list\n", feastConfigMapName)
+ break
+ }
+
+ if i < maxRetries-1 {
+ fmt.Printf("ConfigMap %s not found in list yet, retrying in %v... (attempt %d/%d)\n", feastConfigMapName, retryInterval, i+1, maxRetries)
+ time.Sleep(retryInterval)
+ }
+ }
+
+ if !configMapExists {
+ Expect(err).ToNot(HaveOccurred(), fmt.Sprintf("Failed to find ConfigMap %s in ConfigMap list after %d attempts: %v", feastConfigMapName, maxRetries, err))
+ }
+
+ // Once ConfigMap exists in list, verify content (project name and auth type)
+ err = utils.VerifyFeastConfigMapContent(namespace, feastConfigMapName, configMapKey, expectedContent)
+ Expect(err).ToNot(HaveOccurred(), fmt.Sprintf("Failed to verify Feast ConfigMap %s content: %v", feastConfigMapName, err))
+ fmt.Printf("Feast ConfigMap %s verified successfully with project and auth type\n", feastConfigMapName)
+ }
+
// Parameterized test function that handles both auth and non-auth scenarios
runFeastWorkbenchIntegration := func(authEnabled bool) {
// Apply permissions only if auth is enabled
@@ -51,8 +106,15 @@ var _ = Describe("Feast Workbench Integration Connection Testing", Ordered, func
utils.ApplyFeastPermissions(permissionFile, "/feast-data/credit_scoring_local/feature_repo/permissions.py", namespace, feastDeploymentName)
}
- // Use the shared RunNotebookTest function for common setup and execution
- utils.RunNotebookTest(namespace, configMapName, notebookFile, "test/e2e_rhoai/resources/feature_repo", pvcFile, rolebindingName, notebookPVC, notebookName, testDir)
+ // Create notebook with all setup steps
+ // Pass feastProject parameter to set the opendatahub.io/feast-config annotation
+ utils.CreateNotebookTest(namespace, configMapName, notebookFile, "test/e2e_rhoai/resources/feature_repo", pvcFile, rolebindingName, notebookPVC, notebookName, testDir, "credit_scoring_local")
+
+ // Verify Feast ConfigMap was created with correct auth type
+ verifyFeastConfigMap(authEnabled)
+
+ // Monitor notebook execution
+ utils.MonitorNotebookTest(namespace, notebookName)
}
BeforeAll(func() {
diff --git a/infra/feast-operator/test/e2e_rhoai/feast_wb_milvus_test.go b/infra/feast-operator/test/e2e_rhoai/feast_wb_milvus_test.go
index 4849670399d..b4e1d37b827 100644
--- a/infra/feast-operator/test/e2e_rhoai/feast_wb_milvus_test.go
+++ b/infra/feast-operator/test/e2e_rhoai/feast_wb_milvus_test.go
@@ -32,11 +32,11 @@ var _ = Describe("Feast Jupyter Notebook Testing", Ordered, func() {
namespace = "test-ns-feast-wb"
configMapName = "feast-wb-cm"
rolebindingName = "rb-feast-test"
- notebookFile = "test/e2e_rhoai/resources/feast-test.ipynb"
+ notebookFile = "test/e2e_rhoai/resources/feast-wb-milvus-test.ipynb"
pvcFile = "test/e2e_rhoai/resources/pvc.yaml"
notebookPVC = "jupyterhub-nb-kube-3aadmin-pvc"
testDir = "/test/e2e_rhoai"
- notebookName = "feast-test.ipynb"
+ notebookName = "feast-wb-milvus-test.ipynb"
feastMilvusTest = "TestFeastMilvusNotebook"
)
@@ -54,7 +54,12 @@ var _ = Describe("Feast Jupyter Notebook Testing", Ordered, func() {
Context("Feast Jupyter Notebook Test", func() {
It("Should create and run a "+feastMilvusTest+" successfully", func() {
- utils.RunNotebookTest(namespace, configMapName, notebookFile, "test/e2e_rhoai/resources/feature_repo", pvcFile, rolebindingName, notebookPVC, notebookName, testDir)
+ // Create notebook with all setup steps
+ // Pass empty string for feastProject to keep annotation empty
+ utils.CreateNotebookTest(namespace, configMapName, notebookFile, "test/e2e_rhoai/resources/feature_repo", pvcFile, rolebindingName, notebookPVC, notebookName, testDir, "")
+
+ // Monitor notebook execution
+ utils.MonitorNotebookTest(namespace, notebookName)
})
})
})
diff --git a/infra/feast-operator/test/e2e_rhoai/feast_wb_ray_offline_store_test.go b/infra/feast-operator/test/e2e_rhoai/feast_wb_ray_offline_store_test.go
index a7e482063f0..eb467ad07ff 100644
--- a/infra/feast-operator/test/e2e_rhoai/feast_wb_ray_offline_store_test.go
+++ b/infra/feast-operator/test/e2e_rhoai/feast_wb_ray_offline_store_test.go
@@ -71,7 +71,12 @@ var _ = Describe("Feast Jupyter Notebook Testing with Ray Offline Store", Ordere
Context("Feast Jupyter Notebook Test with Ray Offline store", func() {
It("Should create and run a "+feastRayTest+" successfully", func() {
- utils.RunNotebookTest(namespace, configMapName, notebookFile, "test/e2e_rhoai/resources/feature_repo", pvcFile, rolebindingName, notebookPVC, notebookName, testDir)
+ // Create notebook with all setup steps
+ // Pass empty string for feastProject to keep annotation empty
+ utils.CreateNotebookTest(namespace, configMapName, notebookFile, "test/e2e_rhoai/resources/feature_repo", pvcFile, rolebindingName, notebookPVC, notebookName, testDir, "")
+
+ // Monitor notebook execution
+ utils.MonitorNotebookTest(namespace, notebookName)
})
})
})
diff --git a/infra/feast-operator/test/e2e_rhoai/resources/custom-nb.yaml b/infra/feast-operator/test/e2e_rhoai/resources/custom-nb.yaml
index 6acf8bdf0cb..6dd9304e4b9 100644
--- a/infra/feast-operator/test/e2e_rhoai/resources/custom-nb.yaml
+++ b/infra/feast-operator/test/e2e_rhoai/resources/custom-nb.yaml
@@ -13,12 +13,14 @@ metadata:
notebooks.opendatahub.io/last-size-selection: Small
opendatahub.io/link: https://jupyter-nb-kube-3aadmin-{{.Namespace}}.{{.IngressDomain}}/notebook/{{.Namespace}}/jupyter-nb-kube-3aadmin
opendatahub.io/username: {{.Username}}
+ opendatahub.io/feast-config: {{.FeastProject}}
generation: 1
labels:
app: jupyter-nb-kube-3aadmin
opendatahub.io/dashboard: "true"
opendatahub.io/odh-managed: "true"
opendatahub.io/user: {{.Username}}
+ opendatahub.io/feast-integration: 'true'
name: jupyter-nb-kube-3aadmin
namespace: {{.Namespace}}
spec:
diff --git a/infra/feast-operator/test/e2e_rhoai/resources/feast-wb-connection-credit-scoring.ipynb b/infra/feast-operator/test/e2e_rhoai/resources/feast-wb-connection-credit-scoring.ipynb
index 6a775b772a5..39e1f9c6e37 100755
--- a/infra/feast-operator/test/e2e_rhoai/resources/feast-wb-connection-credit-scoring.ipynb
+++ b/infra/feast-operator/test/e2e_rhoai/resources/feast-wb-connection-credit-scoring.ipynb
@@ -16,6 +16,45 @@
"print(f\"✅ Found Expected Feast version: {actual_version} in workbench\")"
]
},
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# --- Configuration Variables ---\n",
+ "import os \n",
+ "\n",
+ "# Fetch token and server directly from oc CLI\n",
+ "import subprocess\n",
+ "\n",
+ "def oc(cmd):\n",
+ " return subprocess.check_output(cmd, shell=True).decode(\"utf-8\").strip()\n",
+ "\n",
+ "token = oc(\"oc whoami -t\")\n",
+ "server = oc(\"oc whoami --show-server\")\n",
+ "namespace = os.environ.get(\"NAMESPACE\")\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "!oc login --token=$token --server=$server"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# Add user permission to namespace\n",
+ "!oc adm policy add-role-to-user admin $(oc whoami) -n $namespace"
+ ]
+ },
{
"cell_type": "code",
"execution_count": null,
@@ -34,7 +73,7 @@
").read()\n",
"\n",
"# Save the configmap data into an environment variable (if needed)\n",
- "os.environ[\"CONFIGMAP_DATA\"] = yaml_content\n"
+ "os.environ[\"CONFIGMAP_DATA\"] = yaml_content"
]
},
{
@@ -43,186 +82,8 @@
"metadata": {},
"outputs": [],
"source": [
- "#!/usr/bin/env python3\n",
- "import os\n",
- "import json\n",
- "import yaml\n",
- "from pathlib import Path\n",
- "from typing import Dict, List, Any, Optional\n",
"from feast import FeatureStore\n",
- "from feast.repo_config import RepoConfig\n",
- "\n",
- "def create_feature_store_yaml(config_content: str, config_name: str) -> str:\n",
- " \"\"\"\n",
- " Create a feature_store.yaml file from config content.\n",
- " \n",
- " Args:\n",
- " config_content: YAML content as string\n",
- " config_name: Name identifier for the config (used for filename)\n",
- " \n",
- " Returns:\n",
- " Path to the created YAML file\n",
- " \"\"\"\n",
- " # Parse the YAML content to validate it\n",
- " try:\n",
- " config_dict = yaml.safe_load(config_content)\n",
- " except yaml.YAMLError as e:\n",
- " raise ValueError(f\"Failed to parse YAML content for {config_name}: {e}\")\n",
- " \n",
- " # Ensure required fields are present\n",
- " required_fields = ['project', 'registry', 'provider']\n",
- " for field in required_fields:\n",
- " if field not in config_dict:\n",
- " raise ValueError(f\"Failed to create config {config_name}: missing required field '{field}'\")\n",
- " \n",
- " # Create filename\n",
- " filename = f\"feature_store_{config_name}.yaml\"\n",
- " filepath = Path(filename)\n",
- " \n",
- " # Write the YAML file\n",
- " with open(filepath, 'w') as f:\n",
- " yaml.dump(config_dict, f, default_flow_style=False, sort_keys=False)\n",
- " \n",
- " return str(filepath)\n",
- "\n",
- "\n",
- "def create_feature_store_object(yaml_file_path: str) -> FeatureStore:\n",
- " \"\"\"\n",
- " Create a FeatureStore object from a YAML file.\n",
- " \n",
- " Args:\n",
- " yaml_file_path: Path to the feature_store.yaml file\n",
- " \n",
- " Returns:\n",
- " FeatureStore object\n",
- " \"\"\"\n",
- " try:\n",
- " # Create FeatureStore from the YAML file\n",
- " fs = FeatureStore(fs_yaml_file=Path(yaml_file_path))\n",
- " return fs\n",
- " except Exception as e:\n",
- " raise RuntimeError(f\"Failed to create FeatureStore object from {yaml_file_path}: {e}\")\n",
- "\n",
- "\n",
- "def process_client_configs(client_configs: Dict[str, str]) -> Dict[str, Dict[str, Any]]:\n",
- " \"\"\"\n",
- " Process multiple client config YAML contents and create feature stores.\n",
- " \n",
- " Args:\n",
- " client_configs: Dictionary mapping config names to YAML content strings\n",
- " \n",
- " Returns:\n",
- " Dictionary with results for each config\n",
- " \"\"\"\n",
- " results = {}\n",
- " created_yamls = []\n",
- " feature_stores = {}\n",
- " \n",
- " print(\"Creating feature store YAMLs and objects...\")\n",
- " print(\"=\" * 50)\n",
- " \n",
- " for config_name, config_content in client_configs.items():\n",
- " try:\n",
- " print(f\"\\nProcessing config: {config_name}\")\n",
- "\n",
- " # Create YAML file\n",
- " yaml_path = create_feature_store_yaml(config_content, config_name)\n",
- " created_yamls.append(yaml_path)\n",
- " print(f\"✓ Created YAML file: {yaml_path}\")\n",
- " \n",
- " # Create FeatureStore object\n",
- " fs = create_feature_store_object(yaml_path)\n",
- " fs_var_name = f\"fs_{fs.project}\"\n",
- " globals()[fs_var_name] = fs\n",
- " feature_stores[config_name] = fs_var_name\n",
- " print(f\"✓ Created FeatureStore object: {fs_var_name}\")\n",
- "\n",
- " results[config_name] = {\n",
- " 'yaml_path': yaml_path,\n",
- " 'feature_store': fs_var_name,\n",
- " 'project_name': fs.project,\n",
- " 'success': True,\n",
- " 'error': None\n",
- " }\n",
- " \n",
- " except Exception as e:\n",
- " print(f\"✗ Failed to process config {config_name}: {e}\")\n",
- " results[config_name] = {\n",
- " 'yaml_path': None,\n",
- " 'feature_store': None,\n",
- " 'project_name': None,\n",
- " 'success': False,\n",
- " 'error': str(e)\n",
- " }\n",
- " \n",
- " return results\n",
- "\n",
- "\n",
- "def print_summary(results: Dict[str, Dict[str, Any]]) -> None:\n",
- " \"\"\"\n",
- " Print summary of all operations.\n",
- " \n",
- " Args:\n",
- " results: Results dictionary from process_client_configs\n",
- " \"\"\"\n",
- " print(\"\\n\" + \"=\" * 50)\n",
- " print(\"SUMMARY\")\n",
- " print(\"=\" * 50)\n",
- "\n",
- " successful_configs = [name for name, result in results.items() if result['success']]\n",
- " failed_configs = [name for name, result in results.items() if not result['success']]\n",
- " print(f\"\\n\\n✓✓Feature Store YAML files have been created in: {os.getcwd()}\")\n",
- " print(f\"\\n✓ Successfully processed {len(successful_configs)} config(s):\")\n",
- " for config_name in successful_configs:\n",
- " result = results[config_name]\n",
- " print(f\" - {config_name}: {result['yaml_path']} (Project: {result['project_name']})\")\n",
- "\n",
- " if failed_configs:\n",
- " print(f\"\\n✗ Failed to process {len(failed_configs)} config(s):\")\n",
- " for config_name in failed_configs:\n",
- " result = results[config_name]\n",
- " print(f\" - {config_name}: {result['error']}\")\n",
- "\n",
- " print(f\"\\n\\n✓✓ Feature Store Object(s) details:\")\n",
- " for config_name in successful_configs:\n",
- " result = results[config_name]\n",
- " print(f\"> Object Name - {result['feature_store']} ; project name - {result['project_name']} ; yaml path - {result['yaml_path']}\")\n",
- "\n",
- " print(\"\\n\")\n",
- " print(\"=\" * 25, \"Usage:\", \"=\" * 25)\n",
- " print(\"You can now use feature store object(s) to access the feature store resources and functions!\")\n",
- " print(\"\\n// Note: Replace object_name with the actual object name from the list above.\")\n",
- " print(\"object_name.list_features()\\nobject_name.get_historical_features()\")\n",
- " print(\"=\" * 58)\n",
- "\n",
- "\n",
- "def main():\n",
- " \"\"\"\n",
- " Main function to demonstrate usage with example configs.\n",
- " \"\"\"\n",
- " yaml_content = os.getenv(\"CONFIGMAP_DATA\")\n",
- "\n",
- " if not yaml_content:\n",
- " raise ValueError(\"CONFIGMAP_DATA environment variable is not set.\")\n",
- "\n",
- " # Use environment YAML as config\n",
- " client_configs = {\n",
- " \"feast_credit_scoring_client\": yaml_content\n",
- " }\n",
- "\n",
- " print(\"=\" * 50)\n",
- " print(\"This script will create feature store YAMLs and objects from client configs.\")\n",
- " print(f\"Processing {len(client_configs)} selected configurations...\")\n",
- " \n",
- " # Process the configs\n",
- " results = process_client_configs(client_configs)\n",
- " \n",
- " # Print summary\n",
- " print_summary(results)\n",
- "\n",
- "\n",
- "if __name__ == \"__main__\":\n",
- " main()"
+ "fs_credit_scoring_local = FeatureStore(fs_yaml_file='/opt/app-root/src/feast-config/credit_scoring_local')"
]
},
{
diff --git a/infra/feast-operator/test/e2e_rhoai/resources/feast-test.ipynb b/infra/feast-operator/test/e2e_rhoai/resources/feast-wb-milvus-test.ipynb
similarity index 100%
rename from infra/feast-operator/test/e2e_rhoai/resources/feast-test.ipynb
rename to infra/feast-operator/test/e2e_rhoai/resources/feast-wb-milvus-test.ipynb
diff --git a/infra/feast-operator/test/utils/notebook_util.go b/infra/feast-operator/test/utils/notebook_util.go
index cad4a734a01..8652b481889 100644
--- a/infra/feast-operator/test/utils/notebook_util.go
+++ b/infra/feast-operator/test/utils/notebook_util.go
@@ -29,6 +29,7 @@ type NotebookTemplateParams struct {
PipTrustedHost string
FeastVerison string
OpenAIAPIKey string
+ FeastProject string
}
// CreateNotebook renders a notebook manifest from a template and applies it using kubectl.
@@ -288,7 +289,8 @@ func BuildNotebookCommand(notebookName, testDir string) []string {
}
// GetNotebookParams builds and returns NotebookTemplateParams from environment variables and configuration
-func GetNotebookParams(namespace, configMapName, notebookPVC, notebookName, testDir string) NotebookTemplateParams {
+// feastProject is optional - if provided, it will be set in the notebook annotation, otherwise it will be empty
+func GetNotebookParams(namespace, configMapName, notebookPVC, notebookName, testDir string, feastProject string) NotebookTemplateParams {
username := GetOCUser(testDir)
command := BuildNotebookCommand(notebookName, testDir)
@@ -313,6 +315,7 @@ func GetNotebookParams(namespace, configMapName, notebookPVC, notebookName, test
PipTrustedHost: getEnv("PIP_TRUSTED_HOST"),
FeastVerison: getEnv("FEAST_VERSION"),
OpenAIAPIKey: getEnv("OPENAI_API_KEY"),
+ FeastProject: feastProject,
}
}
@@ -342,9 +345,10 @@ func SetupNotebookEnvironment(namespace, configMapName, notebookFile, featureRep
return nil
}
-// RunNotebookTest performs all the setup steps, creates a notebook, and monitors its execution.
-// This function encapsulates the common notebook test workflow used across multiple test files.
-func RunNotebookTest(namespace, configMapName, notebookFile, featureRepoPath, pvcFile, rolebindingName, notebookPVC, notebookName, testDir string) {
+// CreateNotebookTest performs all the setup steps and creates a notebook.
+// This function handles namespace context, ConfigMap, PVC, rolebinding, and notebook creation.
+// feastProject is optional - if provided, it will be set in the notebook annotation, otherwise it will be empty
+func CreateNotebookTest(namespace, configMapName, notebookFile, featureRepoPath, pvcFile, rolebindingName, notebookPVC, notebookName, testDir string, feastProject string) {
// Execute common setup steps
By(fmt.Sprintf("Setting namespace context to : %s", namespace))
Expect(SetNamespaceContext(namespace, testDir)).To(Succeed())
@@ -363,10 +367,21 @@ func RunNotebookTest(namespace, configMapName, notebookFile, featureRepoPath, pv
fmt.Printf("Created rolebinding %s successfully\n", rolebindingName)
// Build notebook parameters and create notebook
- nbParams := GetNotebookParams(namespace, configMapName, notebookPVC, notebookName, testDir)
+ nbParams := GetNotebookParams(namespace, configMapName, notebookPVC, notebookName, testDir, feastProject)
By("Creating Jupyter Notebook")
Expect(CreateNotebook(nbParams)).To(Succeed(), "Failed to create notebook")
+}
+// MonitorNotebookTest monitors the notebook execution and verifies completion.
+func MonitorNotebookTest(namespace, notebookName string) {
By("Monitoring notebook logs")
Expect(MonitorNotebookPod(namespace, "jupyter-nb-", notebookName)).To(Succeed(), "Notebook execution failed")
}
+
+// RunNotebookTest performs all the setup steps, creates a notebook, and monitors its execution.
+// This function is kept for backward compatibility. For new tests, use CreateNotebookTest and MonitorNotebookTest separately.
+// feastProject is optional - if provided, it will be set in the notebook annotation, otherwise it will be empty
+func RunNotebookTest(namespace, configMapName, notebookFile, featureRepoPath, pvcFile, rolebindingName, notebookPVC, notebookName, testDir string, feastProject string) {
+ CreateNotebookTest(namespace, configMapName, notebookFile, featureRepoPath, pvcFile, rolebindingName, notebookPVC, notebookName, testDir, feastProject)
+ MonitorNotebookTest(namespace, notebookName)
+}
diff --git a/infra/feast-operator/test/utils/test_util.go b/infra/feast-operator/test/utils/test_util.go
index 1f476708d4c..a883efc020d 100644
--- a/infra/feast-operator/test/utils/test_util.go
+++ b/infra/feast-operator/test/utils/test_util.go
@@ -152,6 +152,104 @@ func checkIfConfigMapExists(namespace, configMapName string) error {
return nil
}
+// ListConfigMaps lists all ConfigMaps in the given namespace
+func ListConfigMaps(namespace string) ([]string, error) {
+ cmd := exec.Command("kubectl", "get", "cm", "-n", namespace, "-o", "jsonpath={range .items[*]}{.metadata.name}{\"\\n\"}{end}")
+ var out bytes.Buffer
+ var stderr bytes.Buffer
+ cmd.Stdout = &out
+ cmd.Stderr = &stderr
+
+ if err := cmd.Run(); err != nil {
+ return nil, fmt.Errorf("failed to list config maps in namespace %s. Error: %v. Stderr: %s",
+ namespace, err, stderr.String())
+ }
+
+ configMaps := strings.Split(strings.TrimSpace(out.String()), "\n")
+ // Filter out empty strings
+ var result []string
+ for _, cm := range configMaps {
+ if cm != "" {
+ result = append(result, cm)
+ }
+ }
+ return result, nil
+}
+
+// VerifyConfigMapExistsInList checks if a ConfigMap exists in the list of ConfigMaps
+func VerifyConfigMapExistsInList(namespace, configMapName string) (bool, error) {
+ configMaps, err := ListConfigMaps(namespace)
+ if err != nil {
+ return false, err
+ }
+
+ for _, cm := range configMaps {
+ if cm == configMapName {
+ return true, nil
+ }
+ }
+
+ return false, nil
+}
+
+// VerifyFeastConfigMapExists verifies that a ConfigMap exists and contains the specified key/file
+func VerifyFeastConfigMapExists(namespace, configMapName, expectedKey string) error {
+ // First verify the ConfigMap exists
+ if err := checkIfConfigMapExists(namespace, configMapName); err != nil {
+ return fmt.Errorf("config map %s does not exist: %w", configMapName, err)
+ }
+
+ // Get the ConfigMap data to verify the key exists
+ cmd := exec.Command("kubectl", "get", "cm", configMapName, "-n", namespace, "-o", "jsonpath={.data."+expectedKey+"}")
+ var out bytes.Buffer
+ var stderr bytes.Buffer
+ cmd.Stdout = &out
+ cmd.Stderr = &stderr
+
+ if err := cmd.Run(); err != nil {
+ return fmt.Errorf("failed to get config map data for %s in namespace %s. Error: %v. Stderr: %s",
+ configMapName, namespace, err, stderr.String())
+ }
+
+ configContent := out.String()
+ if configContent == "" {
+ return fmt.Errorf("config map %s does not contain key %s", configMapName, expectedKey)
+ }
+
+ return nil
+}
+
+// VerifyFeastConfigMapContent verifies that a ConfigMap contains the expected feast configuration content
+// This assumes the ConfigMap and key already exist (use VerifyFeastConfigMapExists first)
+func VerifyFeastConfigMapContent(namespace, configMapName, expectedKey string, expectedContent []string) error {
+ // Get the ConfigMap data
+ cmd := exec.Command("kubectl", "get", "cm", configMapName, "-n", namespace, "-o", "jsonpath={.data."+expectedKey+"}")
+ var out bytes.Buffer
+ var stderr bytes.Buffer
+ cmd.Stdout = &out
+ cmd.Stderr = &stderr
+
+ if err := cmd.Run(); err != nil {
+ return fmt.Errorf("failed to get config map data for %s in namespace %s. Error: %v. Stderr: %s",
+ configMapName, namespace, err, stderr.String())
+ }
+
+ configContent := out.String()
+ if configContent == "" {
+ return fmt.Errorf("config map %s does not contain key %s", configMapName, expectedKey)
+ }
+
+ // Verify all expected content strings are present
+ for _, expected := range expectedContent {
+ if !strings.Contains(configContent, expected) {
+ return fmt.Errorf("config map %s content does not contain expected string: %s. Content:\n%s",
+ configMapName, expected, configContent)
+ }
+ }
+
+ return nil
+}
+
// validates if a kubernetes service exists using the kubectl CLI.
func checkIfKubernetesServiceExists(namespace, serviceName string) error {
cmd := exec.Command("kubectl", "get", "service", serviceName, "-n", namespace)
From ce35ce6751a32373492b64de338771218a6dc4b1 Mon Sep 17 00:00:00 2001
From: Jacob Weinhold <29459386+jfw-ppi@users.noreply.github.com>
Date: Sat, 3 Jan 2026 06:18:09 +0100
Subject: [PATCH 12/26] feat: Added batching to feature server /push to offline
store (#5683) (#5729)
* feat: added batching to feature server /push to offline store (#5683)
Signed-off-by: Jacob Weinhold <29459386+jfw-ppi@users.noreply.github.com>
fix: formatting,l int errors (#5683)
Signed-off-by: Jacob Weinhold <29459386+jfw-ppi@users.noreply.github.com>
* Merge branch 'master' into 5683-configurable-batching-feature-server-push
Signed-off-by: Jacob Weinhold <29459386+jfw-ppi@users.noreply.github.com>
* feat: added batching to feature server /push to offline store ([#5683](https://github.com/feast-dev/feast/issues/5683))
Signed-off-by: Jacob Weinhold <29459386+jfw-ppi@users.noreply.github.com>
---------
Signed-off-by: Jacob Weinhold <29459386+jfw-ppi@users.noreply.github.com>
---
.../feature-servers/python-feature-server.md | 20 +
docs/reference/feature-store-yaml.md | 16 +
sdk/python/feast/feature_server.py | 341 +++++++++++++++++-
.../infra/feature_servers/base_config.py | 22 ++
sdk/python/tests/unit/test_feature_server.py | 256 +++++++++++++
5 files changed, 636 insertions(+), 19 deletions(-)
diff --git a/docs/reference/feature-servers/python-feature-server.md b/docs/reference/feature-servers/python-feature-server.md
index df0b0b1f78d..2668ffd8839 100644
--- a/docs/reference/feature-servers/python-feature-server.md
+++ b/docs/reference/feature-servers/python-feature-server.md
@@ -199,6 +199,26 @@ requests.post(
"http://localhost:6566/push",
data=json.dumps(push_data))
```
+#### Offline write batching for `/push`
+
+The Python feature server supports configurable batching for the **offline**
+portion of writes executed via the `/push` endpoint.
+
+Only the offline part of a push is affected:
+
+- `to: "offline"` → **fully batched**
+- `to: "online_and_offline"` → **online written immediately**, **offline batched**
+- `to: "online"` → unaffected, always immediate
+
+Enable batching in your `feature_store.yaml`:
+
+```yaml
+feature_server:
+ type: local
+ offline_push_batching_enabled: true
+ offline_push_batching_batch_size: 1000
+ offline_push_batching_batch_interval_seconds: 10
+```
### Materializing features
diff --git a/docs/reference/feature-store-yaml.md b/docs/reference/feature-store-yaml.md
index 01f586c047b..820731064fc 100644
--- a/docs/reference/feature-store-yaml.md
+++ b/docs/reference/feature-store-yaml.md
@@ -25,6 +25,22 @@ online_store:
* **project\_id** — Optional parameter for the datastore online store. Sets the GCP project id used by Feast, if not set Feast will use the default GCP project id in the local environment.
* **project** — Defines a namespace for the entire feature store. Can be used to isolate multiple deployments in a single installation of Feast.
+### feature_server
+
+The `feature_server` block configures the Python Feature Server when it is used
+to serve online features and handle `/push` requests. This section is optional
+and only applies when running the Python feature server.
+
+An example configuration:
+
+```yaml
+feature_server:
+ type: local
+ offline_push_batching_enabled: true # Enables batching of offline writes processed by /push. Online writes are unaffected.
+ offline_push_batching_batch_size: 100 # Maximum number of buffered rows before writing to the offline store.
+ offline_push_batching_batch_interval_seconds: 5 # Maximum time rows may remain buffered before a forced flush.
+```
+
## Providers
The `provider` field defines the environment in which Feast will execute data flows. As a result, it also determines the default values for other fields.
diff --git a/sdk/python/feast/feature_server.py b/sdk/python/feast/feature_server.py
index fbbb38821af..ecad3404eaf 100644
--- a/sdk/python/feast/feature_server.py
+++ b/sdk/python/feast/feature_server.py
@@ -1,13 +1,29 @@
+# Copyright 2025 The Feast Authors
+#
+# Licensed 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
+#
+# https://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.
+
import asyncio
import os
import sys
import threading
import time
import traceback
+from collections import defaultdict
from contextlib import asynccontextmanager
from datetime import datetime
from importlib import resources as importlib_resources
-from typing import Any, Dict, List, Optional, Union
+from types import SimpleNamespace
+from typing import Any, DefaultDict, Dict, List, NamedTuple, Optional, Set, Union
import pandas as pd
import psutil
@@ -241,6 +257,41 @@ def get_app(
registry_proto = None
shutting_down = False
active_timer: Optional[threading.Timer] = None
+ # --- Offline write batching config and batcher ---
+ fs_cfg = getattr(store.config, "feature_server", None)
+ batching_cfg = None
+ if fs_cfg is not None:
+ enabled = getattr(fs_cfg, "offline_push_batching_enabled", False)
+ batch_size = getattr(fs_cfg, "offline_push_batching_batch_size", None)
+ batch_interval_seconds = getattr(
+ fs_cfg, "offline_push_batching_batch_interval_seconds", None
+ )
+
+ if enabled is True:
+ size_ok = isinstance(batch_size, int) and not isinstance(batch_size, bool)
+ interval_ok = isinstance(batch_interval_seconds, int) and not isinstance(
+ batch_interval_seconds, bool
+ )
+ if size_ok and interval_ok:
+ batching_cfg = SimpleNamespace(
+ enabled=True,
+ batch_size=batch_size,
+ batch_interval_seconds=batch_interval_seconds,
+ )
+ else:
+ logger.warning(
+ "Offline write batching enabled but missing or invalid numeric values; "
+ "disabling batching (batch_size=%r, batch_interval_seconds=%r)",
+ batch_size,
+ batch_interval_seconds,
+ )
+
+ offline_batcher: Optional[OfflineWriteBatcher] = None
+ if batching_cfg is not None and batching_cfg.enabled is True:
+ offline_batcher = OfflineWriteBatcher(store=store, cfg=batching_cfg)
+ logger.debug("Offline write batching is ENABLED")
+ else:
+ logger.debug("Offline write batching is DISABLED")
def stop_refresh():
nonlocal shutting_down
@@ -268,9 +319,13 @@ async def lifespan(app: FastAPI):
await store.initialize()
async_refresh()
- yield
- stop_refresh()
- await store.close()
+ try:
+ yield
+ finally:
+ stop_refresh()
+ if offline_batcher is not None:
+ offline_batcher.shutdown()
+ await store.close()
app = FastAPI(lifespan=lifespan)
@@ -340,7 +395,7 @@ async def retrieve_online_documents(
return response_dict
@app.post("/push", dependencies=[Depends(inject_user_details)])
- async def push(request: PushFeaturesRequest) -> None:
+ async def push(request: PushFeaturesRequest) -> Response:
df = pd.DataFrame(request.df)
actions = []
if request.to == "offline":
@@ -375,22 +430,63 @@ async def push(request: PushFeaturesRequest) -> None:
for feature_view in fvs_with_push_sources:
assert_permissions(resource=feature_view, actions=actions)
- push_params = dict(
- push_source_name=request.push_source_name,
- df=df,
- allow_registry_cache=request.allow_registry_cache,
- to=to,
- transform_on_write=request.transform_on_write,
- )
+ async def _push_with_to(push_to: PushMode) -> None:
+ """
+ Helper for performing a single push operation.
+
+ NOTE:
+ - Feast providers **do not currently support async offline writes**.
+ - Therefore:
+ * ONLINE and ONLINE_AND_OFFLINE → may be async, depending on provider.async_supported.online.write
+ * OFFLINE → always synchronous, but executed via run_in_threadpool when called from HTTP handlers.
+ - The OfflineWriteBatcher handles offline writes directly in its own background thread, but the offline store writes are currently synchronous only.
+ """
+ push_source_name = request.push_source_name
+ allow_registry_cache = request.allow_registry_cache
+ transform_on_write = request.transform_on_write
+
+ # Async currently only applies to online store writes (ONLINE / ONLINE_AND_OFFLINE paths) as theres no async for offline store
+ if push_to in (PushMode.ONLINE, PushMode.ONLINE_AND_OFFLINE) and (
+ store._get_provider().async_supported.online.write
+ ):
+ await store.push_async(
+ push_source_name=push_source_name,
+ df=df,
+ allow_registry_cache=allow_registry_cache,
+ to=push_to,
+ transform_on_write=transform_on_write,
+ )
+ else:
+ await run_in_threadpool(
+ lambda: store.push(
+ push_source_name=push_source_name,
+ df=df,
+ allow_registry_cache=allow_registry_cache,
+ to=push_to,
+ transform_on_write=transform_on_write,
+ )
+ )
- should_push_async = (
- store._get_provider().async_supported.online.write
- and to in [PushMode.ONLINE, PushMode.ONLINE_AND_OFFLINE]
- )
- if should_push_async:
- await store.push_async(**push_params)
+ needs_online = to in (PushMode.ONLINE, PushMode.ONLINE_AND_OFFLINE)
+ needs_offline = to in (PushMode.OFFLINE, PushMode.ONLINE_AND_OFFLINE)
+
+ status_code = status.HTTP_200_OK
+
+ if offline_batcher is None or not needs_offline:
+ await _push_with_to(to)
else:
- store.push(**push_params)
+ if needs_online:
+ await _push_with_to(PushMode.ONLINE)
+
+ offline_batcher.enqueue(
+ push_source_name=request.push_source_name,
+ df=df,
+ allow_registry_cache=request.allow_registry_cache,
+ transform_on_write=request.transform_on_write,
+ )
+ status_code = status.HTTP_202_ACCEPTED
+
+ return Response(status_code=status_code)
async def _get_feast_object(
feature_view_name: str, allow_registry_cache: bool
@@ -732,3 +828,210 @@ def start_server(
)
else:
uvicorn.run(app, host=host, port=port, access_log=(not no_access_log))
+
+
+class _OfflineBatchKey(NamedTuple):
+ push_source_name: str
+ allow_registry_cache: bool
+ transform_on_write: bool
+
+
+class OfflineWriteBatcher:
+ """
+ In-process offline write batcher for /push requests.
+
+ - Buffers DataFrames per (push_source_name, allow_registry_cache, transform_on_write)
+ - Flushes when either:
+ * total rows in a buffer >= batch_size, or
+ * time since last flush >= batch_interval_seconds
+ - Flush runs in a dedicated background thread so the HTTP event loop stays unblocked.
+ """
+
+ def __init__(self, store: "feast.FeatureStore", cfg: Any):
+ self._store = store
+ self._cfg = cfg
+
+ # Buffers and timestamps keyed by batch key
+ self._buffers: DefaultDict[_OfflineBatchKey, List[pd.DataFrame]] = defaultdict(
+ list
+ )
+ self._last_flush: DefaultDict[_OfflineBatchKey, float] = defaultdict(time.time)
+ self._inflight: Set[_OfflineBatchKey] = set()
+
+ self._lock = threading.Lock()
+ self._stop_event = threading.Event()
+
+ # Start background flusher thread
+ self._thread = threading.Thread(
+ target=self._run, name="offline_write_batcher", daemon=True
+ )
+ self._thread.start()
+
+ logger.debug(
+ "OfflineWriteBatcher initialized: batch_size=%s, batch_interval_seconds=%s",
+ getattr(cfg, "batch_size", None),
+ getattr(cfg, "batch_interval_seconds", None),
+ )
+
+ # ---------- Public API ----------
+
+ def enqueue(
+ self,
+ push_source_name: str,
+ df: pd.DataFrame,
+ allow_registry_cache: bool,
+ transform_on_write: bool,
+ ) -> None:
+ """
+ Enqueue a dataframe for offline write, grouped by push source + flags.
+ Cheap and non-blocking; heavy I/O happens in background thread.
+ """
+ key = _OfflineBatchKey(
+ push_source_name=push_source_name,
+ allow_registry_cache=allow_registry_cache,
+ transform_on_write=transform_on_write,
+ )
+
+ with self._lock:
+ self._buffers[key].append(df)
+ total_rows = sum(len(d) for d in self._buffers[key])
+ should_flush = total_rows >= self._cfg.batch_size
+
+ if should_flush:
+ # Size-based flush
+ logger.debug(
+ "OfflineWriteBatcher size threshold reached for %s: %s rows",
+ key,
+ total_rows,
+ )
+ self._flush(key)
+
+ def flush_all(self) -> None:
+ """
+ Flush all buffers synchronously. Intended for graceful shutdown.
+ """
+ with self._lock:
+ keys = list(self._buffers.keys())
+ for key in keys:
+ self._flush(key)
+
+ def shutdown(self, timeout: float = 5.0) -> None:
+ """
+ Stop the background thread and perform a best-effort flush.
+ """
+ logger.debug("Shutting down OfflineWriteBatcher")
+ self._stop_event.set()
+ try:
+ self._thread.join(timeout=timeout)
+ except Exception:
+ logger.exception("Error joining OfflineWriteBatcher thread")
+
+ # Best-effort final flush
+ try:
+ self.flush_all()
+ except Exception:
+ logger.exception("Error during final OfflineWriteBatcher flush")
+
+ # ---------- Internal helpers ----------
+
+ def _run(self) -> None:
+ """
+ Background loop: periodically checks for buffers that should be flushed
+ based on time since last flush.
+ """
+ interval = max(1, int(getattr(self._cfg, "batch_interval_seconds", 30)))
+ logger.debug(
+ "OfflineWriteBatcher background loop started with check interval=%s",
+ interval,
+ )
+
+ while not self._stop_event.wait(timeout=interval):
+ now = time.time()
+ try:
+ with self._lock:
+ keys_to_flush: List[_OfflineBatchKey] = []
+ for key, dfs in list(self._buffers.items()):
+ if not dfs:
+ continue
+ last = self._last_flush[
+ key
+ ] # this will also init the default timestamp
+ age = now - last
+ if age >= self._cfg.batch_interval_seconds:
+ logger.debug(
+ "OfflineWriteBatcher time threshold reached for %s: age=%s",
+ key,
+ age,
+ )
+ keys_to_flush.append(key)
+ for key in keys_to_flush:
+ self._flush(key)
+ except Exception:
+ logger.exception("Error in OfflineWriteBatcher background loop")
+
+ logger.debug("OfflineWriteBatcher background loop exiting")
+
+ def _drain_locked(self, key: _OfflineBatchKey) -> Optional[List[pd.DataFrame]]:
+ """
+ Drain a single buffer; caller must hold self._lock.
+ """
+ if key in self._inflight:
+ return None
+
+ dfs = self._buffers.get(key)
+ if not dfs:
+ return None
+
+ self._buffers[key] = []
+ self._inflight.add(key)
+ return dfs
+
+ def _flush(self, key: _OfflineBatchKey) -> None:
+ """
+ Flush a single buffer. Extracts data under lock, then does I/O without lock.
+ """
+ while True:
+ with self._lock:
+ dfs = self._drain_locked(key)
+
+ if not dfs:
+ return
+
+ batch_df = pd.concat(dfs, ignore_index=True)
+
+ # NOTE: offline writes are currently synchronous only, so we call directly
+ try:
+ self._store.push(
+ push_source_name=key.push_source_name,
+ df=batch_df,
+ allow_registry_cache=key.allow_registry_cache,
+ to=PushMode.OFFLINE,
+ transform_on_write=key.transform_on_write,
+ )
+ except Exception:
+ logger.exception("Error flushing offline batch for %s", key)
+ with self._lock:
+ self._buffers[key] = dfs + self._buffers[key]
+ self._inflight.discard(key)
+ return
+
+ logger.debug(
+ "Flushing offline batch for push_source=%s with %s rows",
+ key.push_source_name,
+ len(batch_df),
+ )
+
+ with self._lock:
+ self._last_flush[key] = time.time()
+ self._inflight.discard(key)
+ pending_rows = sum(len(d) for d in self._buffers.get(key, []))
+ should_flush = pending_rows >= self._cfg.batch_size
+
+ if not should_flush:
+ return
+
+ logger.debug(
+ "OfflineWriteBatcher size threshold reached for %s: %s rows",
+ key,
+ pending_rows,
+ )
diff --git a/sdk/python/feast/infra/feature_servers/base_config.py b/sdk/python/feast/infra/feature_servers/base_config.py
index 1a348032e17..b13e23d035e 100644
--- a/sdk/python/feast/infra/feature_servers/base_config.py
+++ b/sdk/python/feast/infra/feature_servers/base_config.py
@@ -1,3 +1,16 @@
+# Copyright 2025 The Feast Authors
+#
+# Licensed 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
+#
+# https://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.
from typing import Optional
from pydantic import StrictBool, StrictInt
@@ -32,3 +45,12 @@ class BaseFeatureServerConfig(FeastConfigBaseModel):
feature_logging: Optional[FeatureLoggingConfig] = None
""" Feature logging configuration """
+
+ offline_push_batching_enabled: Optional[StrictBool] = None
+ """Whether to batch writes to the offline store via the `/push` endpoint."""
+
+ offline_push_batching_batch_size: Optional[StrictInt] = None
+ """The maximum batch size for offline writes via `/push`."""
+
+ offline_push_batching_batch_interval_seconds: Optional[StrictInt] = None
+ """The batch interval between offline writes via `/push`."""
diff --git a/sdk/python/tests/unit/test_feature_server.py b/sdk/python/tests/unit/test_feature_server.py
index e3fd0387fb9..c271fad7fad 100644
--- a/sdk/python/tests/unit/test_feature_server.py
+++ b/sdk/python/tests/unit/test_feature_server.py
@@ -1,4 +1,20 @@
+# Copyright 2025 The Feast Authors
+#
+# Licensed 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
+#
+# https://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.
import json
+import time
+from collections import Counter
+from types import SimpleNamespace
from unittest.mock import AsyncMock, MagicMock
import pytest
@@ -209,6 +225,246 @@ def test_materialize_request_model():
assert req2.end_ts == "2021-01-02T00:00:00"
+def _enable_offline_batching_config(
+ fs, enabled: bool = True, batch_size: int = 1, batch_interval_seconds: int = 60
+):
+ """
+ Attach a minimal feature_server.offline_push_batching config
+ to a mocked FeatureStore.
+ """
+ if not hasattr(fs, "config") or fs.config is None:
+ fs.config = SimpleNamespace()
+
+ if not hasattr(fs.config, "feature_server") or fs.config.feature_server is None:
+ fs.config.feature_server = SimpleNamespace()
+
+ fs.config.feature_server.offline_push_batching_enabled = enabled
+ fs.config.feature_server.offline_push_batching_batch_size = batch_size
+ fs.config.feature_server.offline_push_batching_batch_interval_seconds = (
+ batch_interval_seconds
+ )
+
+
+def push_body_many(push_mode=PushMode.ONLINE, count: int = 2, id_start: int = 100):
+ """Build a push body with multiple entities."""
+ driver_ids = list(range(id_start, id_start + count))
+ lats = [float(i) for i in driver_ids]
+ longs = [str(lat) for lat in lats]
+ event_ts = [str(_utc_now()) for _ in range(count)]
+ created_ts = [str(_utc_now()) for _ in range(count)]
+
+ return {
+ "push_source_name": "driver_locations_push",
+ "df": {
+ "driver_lat": lats,
+ "driver_long": longs,
+ "driver_id": driver_ids,
+ "event_timestamp": event_ts,
+ "created_timestamp": created_ts,
+ },
+ "to": push_mode.name.lower(),
+ }
+
+
+@pytest.mark.parametrize("online_write", [True, False])
+@pytest.mark.parametrize("batching_enabled", [True, False])
+@pytest.mark.parametrize(
+ "push_mode",
+ [PushMode.ONLINE, PushMode.OFFLINE, PushMode.ONLINE_AND_OFFLINE],
+)
+def test_push_batched_matrix(
+ online_write, batching_enabled, push_mode, mock_fs_factory
+):
+ """
+ Matrix over:
+ - online_write ∈ {True, False}
+ - batching_enabled ∈ {True, False}
+ - push_mode ∈ {ONLINE, OFFLINE, ONLINE_AND_OFFLINE}
+
+ Asserts:
+ - which of fs.push / fs.push_async are called
+ - how many times
+ - with which `to` values
+
+ For batching_enabled=True, batch_size=1 ensures immediate flush of offline part.
+ """
+ fs = mock_fs_factory(online_write=online_write)
+
+ _enable_offline_batching_config(
+ fs,
+ enabled=batching_enabled,
+ batch_size=1, # flush immediately on a single offline request
+ batch_interval_seconds=60,
+ )
+
+ client = TestClient(get_app(fs))
+
+ # use a multi-row payload to ensure we test non-trivial dfs
+ resp = client.post("/push", json=push_body_many(push_mode, count=2, id_start=100))
+ needs_offline = push_mode in (PushMode.OFFLINE, PushMode.ONLINE_AND_OFFLINE)
+ expected_status = 202 if batching_enabled and needs_offline else 200
+ assert resp.status_code == expected_status
+
+ # Collect calls
+ sync_calls = fs.push.call_args_list
+ async_calls = fs.push_async.await_args_list
+ sync_tos = [c.kwargs.get("to") for c in sync_calls]
+ async_tos = [c.kwargs.get("to") for c in async_calls]
+
+ # -------------------------------
+ # Build expectations
+ # -------------------------------
+ expected_sync_calls = 0
+ expected_async_calls = 0
+ expected_sync_tos = []
+ expected_async_tos = []
+
+ if push_mode == PushMode.ONLINE:
+ # Only online path, batching irrelevant
+ if online_write:
+ expected_async_calls = 1
+ expected_async_tos = [PushMode.ONLINE]
+ else:
+ expected_sync_calls = 1
+ expected_sync_tos = [PushMode.ONLINE]
+
+ elif push_mode == PushMode.OFFLINE:
+ # Only offline path, never async
+ if batching_enabled:
+ # via batcher, but externally still one push(to=OFFLINE)
+ expected_sync_calls = 1
+ expected_sync_tos = [PushMode.OFFLINE]
+ else:
+ # direct push(to=OFFLINE)
+ expected_sync_calls = 1
+ expected_sync_tos = [PushMode.OFFLINE]
+
+ elif push_mode == PushMode.ONLINE_AND_OFFLINE:
+ if not batching_enabled:
+ # Old behaviour: single call with to=ONLINE_AND_OFFLINE
+ if online_write:
+ expected_async_calls = 1
+ expected_async_tos = [PushMode.ONLINE_AND_OFFLINE]
+ else:
+ expected_sync_calls = 1
+ expected_sync_tos = [PushMode.ONLINE_AND_OFFLINE]
+ else:
+ # Batching enabled: ONLINE part and OFFLINE part are split
+ if online_write:
+ # async ONLINE + sync OFFLINE (via batcher)
+ expected_async_calls = 1
+ expected_async_tos = [PushMode.ONLINE]
+ expected_sync_calls = 1
+ expected_sync_tos = [PushMode.OFFLINE]
+ else:
+ # both ONLINE and OFFLINE via sync push
+ expected_sync_calls = 2
+ expected_sync_tos = [PushMode.ONLINE, PushMode.OFFLINE]
+
+ # -------------------------------
+ # Assert counts
+ # -------------------------------
+ assert fs.push.call_count == expected_sync_calls
+ assert fs.push_async.await_count == expected_async_calls
+
+ # Allow ordering differences by comparing as multisets
+ assert Counter(sync_tos) == Counter(expected_sync_tos)
+ assert Counter(async_tos) == Counter(expected_async_tos)
+
+
+def test_offline_batches_are_separated_by_flags(mock_fs_factory):
+ """
+ Offline batches must be separated by (allow_registry_cache, transform_on_write).
+
+ If we send three offline pushes with the same push_source_name but different
+ combinations of allow_registry_cache / transform_on_write, they must result
+ in three separate fs.push(...) calls, not one merged batch.
+ """
+ fs = mock_fs_factory(online_write=True)
+ # Large batch_size so we rely on interval-based flush, not size-based.
+ _enable_offline_batching_config(
+ fs, enabled=True, batch_size=100, batch_interval_seconds=1
+ )
+
+ client = TestClient(get_app(fs))
+
+ # Base body: allow_registry_cache=True, transform_on_write=True (default)
+ body_base = push_body_many(PushMode.OFFLINE, count=2, id_start=100)
+
+ # 1) Default flags: allow_registry_cache=True, transform_on_write=True
+ resp1 = client.post("/push", json=body_base)
+ assert resp1.status_code == 202
+
+ # 2) Different allow_registry_cache
+ body_allow_false = dict(body_base)
+ body_allow_false["allow_registry_cache"] = False
+ resp2 = client.post("/push", json=body_allow_false)
+ assert resp2.status_code == 202
+
+ # 3) Different transform_on_write
+ body_transform_false = dict(body_base)
+ body_transform_false["transform_on_write"] = False
+ resp3 = client.post("/push", json=body_transform_false)
+ assert resp3.status_code == 202
+
+ # Immediately after: no flush expected yet (interval-based)
+ assert fs.push.call_count == 0
+
+ # Wait up to ~3 seconds for interval-based flush
+ deadline = time.time() + 3.0
+ while time.time() < deadline and fs.push.call_count < 3:
+ time.sleep(0.1)
+
+ # We expect exactly 3 separate pushes, each with 2 rows and to=OFFLINE
+ assert fs.push.call_count == 3
+
+ lengths = [c.kwargs["df"].shape[0] for c in fs.push.call_args_list]
+ tos = [c.kwargs["to"] for c in fs.push.call_args_list]
+ allow_flags = [c.kwargs["allow_registry_cache"] for c in fs.push.call_args_list]
+ transform_flags = [c.kwargs["transform_on_write"] for c in fs.push.call_args_list]
+
+ assert all(t == PushMode.OFFLINE for t in tos)
+ assert lengths == [2, 2, 2]
+
+ # Ensure we really saw 3 distinct (allow_registry_cache, transform_on_write) combos
+ assert len({(a, t) for a, t in zip(allow_flags, transform_flags)}) == 3
+
+
+def test_offline_batcher_interval_flush(mock_fs_factory):
+ """
+ With batching enabled and a large batch_size, ensure that the time-based
+ flush still triggers even when the size threshold is never reached.
+ """
+ fs = mock_fs_factory(online_write=True)
+ _enable_offline_batching_config(
+ fs,
+ enabled=True,
+ batch_size=100, # won't be hit by this test
+ batch_interval_seconds=1, # small interval
+ )
+
+ client = TestClient(get_app(fs))
+
+ # Send a single OFFLINE push (2 rows), below size threshold
+ resp = client.post(
+ "/push", json=push_body_many(PushMode.OFFLINE, count=2, id_start=500)
+ )
+ assert resp.status_code == 202
+
+ # Immediately after: no sync push yet (buffer only)
+ assert fs.push.call_count == 0
+
+ # Wait up to ~3 seconds for interval-based flush
+ deadline = time.time() + 3.0
+ while time.time() < deadline and fs.push.call_count < 1:
+ time.sleep(0.1)
+
+ assert fs.push.call_count == 1
+ kwargs = fs.push.call_args.kwargs
+ assert kwargs["to"] == PushMode.OFFLINE
+ assert len(kwargs["df"]) == 2
+
+
# Static Artifacts Tests
@pytest.fixture
def mock_store_with_static_artifacts(tmp_path):
From 678589b65e0ed24a8369c9f34e94ee4acd7fb14e Mon Sep 17 00:00:00 2001
From: Yassin Nouh <70436855+YassinNouh21@users.noreply.github.com>
Date: Mon, 5 Jan 2026 05:48:56 +0200
Subject: [PATCH 13/26] fix: Add hybrid online store to
ONLINE_STORE_CLASS_FOR_TYPE mapping (#5810)
* fix: Add hybrid online store to ONLINE_STORE_CLASS_FOR_TYPE mapping
This fixes the import error when using HybridOnlineStore with the
shorthand type configuration in feature_store.yaml.
Changes:
- Add missing __init__.py to hybrid_online_store package
- Add "hybrid" entry to ONLINE_STORE_CLASS_FOR_TYPE in repo_config.py
- Update HybridOnlineStoreConfig type Literal to use standard "hybrid" shorthand
- Update documentation to use type: hybrid
Signed-off-by: yassinnouh21
* fix: Add hybrid to Go operator ValidOnlineStoreDBStorePersistenceTypes
The data source types test validates that Python ONLINE_STORE_CLASS_FOR_TYPE
matches the Go operator's ValidOnlineStoreDBStorePersistenceTypes. This adds
the hybrid type to both v1 and v1alpha1 API versions.
Signed-off-by: yassinnouh21
---------
Signed-off-by: yassinnouh21
---
docs/reference/online-stores/hybrid.md | 2 +-
infra/feast-operator/api/v1/featurestore_types.go | 3 ++-
infra/feast-operator/api/v1alpha1/featurestore_types.go | 3 ++-
.../config/crd/bases/feast.dev_featurestores.yaml | 4 ++++
infra/feast-operator/dist/install.yaml | 4 ++++
.../infra/online_stores/hybrid_online_store/__init__.py | 0
.../hybrid_online_store/hybrid_online_store.py | 6 ++----
sdk/python/feast/repo_config.py | 1 +
8 files changed, 16 insertions(+), 7 deletions(-)
create mode 100644 sdk/python/feast/infra/online_stores/hybrid_online_store/__init__.py
diff --git a/docs/reference/online-stores/hybrid.md b/docs/reference/online-stores/hybrid.md
index 38527d9a66e..a03cc4ae853 100644
--- a/docs/reference/online-stores/hybrid.md
+++ b/docs/reference/online-stores/hybrid.md
@@ -20,7 +20,7 @@ project: my_feature_repo
registry: data/registry.db
provider: local
online_store:
- type: hybrid_online_store.HybridOnlineStore
+ type: hybrid
routing_tag: team # or any tag name you want to use in FeatureView's for routing
online_stores:
- type: bigtable
diff --git a/infra/feast-operator/api/v1/featurestore_types.go b/infra/feast-operator/api/v1/featurestore_types.go
index 462447d23c6..cb79578a1ff 100644
--- a/infra/feast-operator/api/v1/featurestore_types.go
+++ b/infra/feast-operator/api/v1/featurestore_types.go
@@ -371,7 +371,7 @@ type OnlineStoreFilePersistence struct {
// OnlineStoreDBStorePersistence configures the DB store persistence for the online store service
type OnlineStoreDBStorePersistence struct {
// Type of the persistence type you want to use.
- // +kubebuilder:validation:Enum=snowflake.online;redis;ikv;datastore;dynamodb;bigtable;postgres;cassandra;mysql;hazelcast;singlestore;hbase;elasticsearch;qdrant;couchbase.online;milvus
+ // +kubebuilder:validation:Enum=snowflake.online;redis;ikv;datastore;dynamodb;bigtable;postgres;cassandra;mysql;hazelcast;singlestore;hbase;elasticsearch;qdrant;couchbase.online;milvus;hybrid
Type string `json:"type"`
// Data store parameters should be placed as-is from the "feature_store.yaml" under the secret key. "registry_type" & "type" fields should be removed.
SecretRef corev1.LocalObjectReference `json:"secretRef"`
@@ -396,6 +396,7 @@ var ValidOnlineStoreDBStorePersistenceTypes = []string{
"qdrant",
"couchbase.online",
"milvus",
+ "hybrid",
}
// LocalRegistryConfig configures the registry service
diff --git a/infra/feast-operator/api/v1alpha1/featurestore_types.go b/infra/feast-operator/api/v1alpha1/featurestore_types.go
index 45dff27f816..c246877ea7c 100644
--- a/infra/feast-operator/api/v1alpha1/featurestore_types.go
+++ b/infra/feast-operator/api/v1alpha1/featurestore_types.go
@@ -371,7 +371,7 @@ type OnlineStoreFilePersistence struct {
// OnlineStoreDBStorePersistence configures the DB store persistence for the online store service
type OnlineStoreDBStorePersistence struct {
// Type of the persistence type you want to use.
- // +kubebuilder:validation:Enum=snowflake.online;redis;ikv;datastore;dynamodb;bigtable;postgres;cassandra;mysql;hazelcast;singlestore;hbase;elasticsearch;qdrant;couchbase.online;milvus
+ // +kubebuilder:validation:Enum=snowflake.online;redis;ikv;datastore;dynamodb;bigtable;postgres;cassandra;mysql;hazelcast;singlestore;hbase;elasticsearch;qdrant;couchbase.online;milvus;hybrid
Type string `json:"type"`
// Data store parameters should be placed as-is from the "feature_store.yaml" under the secret key. "registry_type" & "type" fields should be removed.
SecretRef corev1.LocalObjectReference `json:"secretRef"`
@@ -396,6 +396,7 @@ var ValidOnlineStoreDBStorePersistenceTypes = []string{
"qdrant",
"couchbase.online",
"milvus",
+ "hybrid",
}
// LocalRegistryConfig configures the registry service
diff --git a/infra/feast-operator/config/crd/bases/feast.dev_featurestores.yaml b/infra/feast-operator/config/crd/bases/feast.dev_featurestores.yaml
index d47acf74135..04456c5a929 100644
--- a/infra/feast-operator/config/crd/bases/feast.dev_featurestores.yaml
+++ b/infra/feast-operator/config/crd/bases/feast.dev_featurestores.yaml
@@ -1322,6 +1322,7 @@ spec:
- qdrant
- couchbase.online
- milvus
+ - hybrid
type: string
required:
- secretRef
@@ -5358,6 +5359,7 @@ spec:
- qdrant
- couchbase.online
- milvus
+ - hybrid
type: string
required:
- secretRef
@@ -9521,6 +9523,7 @@ spec:
- qdrant
- couchbase.online
- milvus
+ - hybrid
type: string
required:
- secretRef
@@ -13557,6 +13560,7 @@ spec:
- qdrant
- couchbase.online
- milvus
+ - hybrid
type: string
required:
- secretRef
diff --git a/infra/feast-operator/dist/install.yaml b/infra/feast-operator/dist/install.yaml
index 57e32090b19..0bfc0da14d8 100644
--- a/infra/feast-operator/dist/install.yaml
+++ b/infra/feast-operator/dist/install.yaml
@@ -1330,6 +1330,7 @@ spec:
- qdrant
- couchbase.online
- milvus
+ - hybrid
type: string
required:
- secretRef
@@ -5366,6 +5367,7 @@ spec:
- qdrant
- couchbase.online
- milvus
+ - hybrid
type: string
required:
- secretRef
@@ -9529,6 +9531,7 @@ spec:
- qdrant
- couchbase.online
- milvus
+ - hybrid
type: string
required:
- secretRef
@@ -13565,6 +13568,7 @@ spec:
- qdrant
- couchbase.online
- milvus
+ - hybrid
type: string
required:
- secretRef
diff --git a/sdk/python/feast/infra/online_stores/hybrid_online_store/__init__.py b/sdk/python/feast/infra/online_stores/hybrid_online_store/__init__.py
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/sdk/python/feast/infra/online_stores/hybrid_online_store/hybrid_online_store.py b/sdk/python/feast/infra/online_stores/hybrid_online_store/hybrid_online_store.py
index e929e039411..8faefdbd344 100644
--- a/sdk/python/feast/infra/online_stores/hybrid_online_store/hybrid_online_store.py
+++ b/sdk/python/feast/infra/online_stores/hybrid_online_store/hybrid_online_store.py
@@ -21,7 +21,7 @@
Example configuration (feature_store.yaml):
online_store:
- type: hybrid_online_store.HybridOnlineStore
+ type: hybrid
routing_tag: team # or any tag name you want to use for routing
online_stores:
- type: feast.infra.online_stores.bigtable.BigtableOnlineStore
@@ -64,9 +64,7 @@ class HybridOnlineStoreConfig(FeastConfigBaseModel):
online_stores: A list of OnlineStoresWithConfig, each specifying the type and config for an online store backend.
"""
- type: Literal["HybridOnlineStore", "hybrid_online_store.HybridOnlineStore"] = (
- "hybrid_online_store.HybridOnlineStore"
- )
+ type: Literal["hybrid"] = "hybrid"
class OnlineStoresWithConfig(FeastConfigBaseModel):
"""
diff --git a/sdk/python/feast/repo_config.py b/sdk/python/feast/repo_config.py
index 2cd148edb66..318ca324cd6 100644
--- a/sdk/python/feast/repo_config.py
+++ b/sdk/python/feast/repo_config.py
@@ -84,6 +84,7 @@
"qdrant": "feast.infra.online_stores.qdrant_online_store.qdrant.QdrantOnlineStore",
"couchbase.online": "feast.infra.online_stores.couchbase_online_store.couchbase.CouchbaseOnlineStore",
"milvus": "feast.infra.online_stores.milvus_online_store.milvus.MilvusOnlineStore",
+ "hybrid": "feast.infra.online_stores.hybrid_online_store.hybrid_online_store.HybridOnlineStore",
**LEGACY_ONLINE_STORE_CLASS_FOR_TYPE,
}
From 9e3f213c7130f75fb732045f9b8c20e863fb753b Mon Sep 17 00:00:00 2001
From: Jatin Kumar
Date: Tue, 6 Jan 2026 01:45:24 -0300
Subject: [PATCH 14/26] fix(redis): Preserve millisecond timestamp precision
for Redis online store (#5807)
* Update redis.py
Add millisecond-precision timestamp support to Redis online store
Signed-off-by: Jatin Kumar
* Update redis.py
sub-second precision when returning timestamps to client
Signed-off-by: Jatin Kumar
* Update redis.py
fix(redis): preserve millisecond timestamp precision
Signed-off-by: Jatin Kumar
* Update redis.py
fix: Remove whitespace on blank lines (W293)
Signed-off-by: Jatin Kumar
---------
Signed-off-by: Jatin Kumar
---
sdk/python/feast/infra/online_stores/redis.py | 27 +++++++++++--------
1 file changed, 16 insertions(+), 11 deletions(-)
diff --git a/sdk/python/feast/infra/online_stores/redis.py b/sdk/python/feast/infra/online_stores/redis.py
index 59892fcbe0f..9a4e908810d 100644
--- a/sdk/python/feast/infra/online_stores/redis.py
+++ b/sdk/python/feast/infra/online_stores/redis.py
@@ -304,22 +304,25 @@ def online_write_batch(
for redis_key_bin, prev_event_time, (_, values, timestamp, _) in zip(
keys, prev_event_timestamps, data
):
- event_time_seconds = int(utils.make_tzaware(timestamp).timestamp())
-
- # ignore if event_timestamp is before the event features that are currently in the feature store
+ # Convert incoming timestamp to millisecond-aware datetime
+ aware_ts = utils.make_tzaware(timestamp)
+ # Build protobuf timestamp with nanos
+ ts = Timestamp()
+ ts.FromDatetime(aware_ts)
+ # New timestamp in nanoseconds
+ new_total_nanos = ts.seconds * 1_000_000_000 + ts.nanos
+ # Compare against existing timestamp (nanosecond precision)
if prev_event_time:
prev_ts = Timestamp()
prev_ts.ParseFromString(prev_event_time)
- if prev_ts.seconds and event_time_seconds <= prev_ts.seconds:
- # TODO: somehow signal that it's not overwriting the current record?
+ prev_total_nanos = prev_ts.seconds * 1_000_000_000 + prev_ts.nanos
+ # Skip only if older OR exact same instant
+ if prev_total_nanos and new_total_nanos <= prev_total_nanos:
if progress:
progress(1)
continue
-
- ts = Timestamp()
- ts.seconds = event_time_seconds
- entity_hset = dict()
- entity_hset[ts_key] = ts.SerializeToString()
+ # Store full timestamp (seconds + nanos)
+ entity_hset = {ts_key: ts.SerializeToString()}
for feature_name, val in values.items():
f_key = _mmh3(f"{feature_view}:{feature_name}")
@@ -456,5 +459,7 @@ def _get_features_for_entity(
if not res:
return None, None
else:
- timestamp = datetime.fromtimestamp(res_ts.seconds, tz=timezone.utc)
+ # reconstruct full timestamp including nanos
+ total_seconds = res_ts.seconds + res_ts.nanos / 1_000_000_000.0
+ timestamp = datetime.fromtimestamp(total_seconds, tz=timezone.utc)
return timestamp, res
From 1dc2be5177ee333220cfcd9e9a9f20bdfa2b3eca Mon Sep 17 00:00:00 2001
From: Myeongwon Kim <65876994+samuelkim7@users.noreply.github.com>
Date: Tue, 6 Jan 2026 15:33:14 +0100
Subject: [PATCH 15/26] feat: Add GCS registry store in Go feature server
(#5818)
Signed-off-by: samuelkim7
---
go.mod | 53 +++++++--
go.sum | 84 +++++++++++++++
go/internal/feast/registry/gcs.go | 114 ++++++++++++++++++++
go/internal/feast/registry/registry.go | 6 +-
go/internal/feast/registry/registry_test.go | 102 +++++++++++++-----
5 files changed, 318 insertions(+), 41 deletions(-)
create mode 100644 go/internal/feast/registry/gcs.go
diff --git a/go.mod b/go.mod
index a097aa67719..7f918de268e 100644
--- a/go.mod
+++ b/go.mod
@@ -25,13 +25,24 @@ require (
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.38.0
go.opentelemetry.io/otel/sdk v1.38.0
go.opentelemetry.io/otel/trace v1.38.0
- golang.org/x/sync v0.17.0
- google.golang.org/genproto/googleapis/rpc v0.0.0-20250825161204-c5933d9347a5
- google.golang.org/grpc v1.75.0
- google.golang.org/protobuf v1.36.8
+ golang.org/x/sync v0.18.0
+ google.golang.org/genproto/googleapis/rpc v0.0.0-20251111163417-95abcf5c77ba
+ google.golang.org/grpc v1.76.0
+ google.golang.org/protobuf v1.36.10
)
require (
+ cel.dev/expr v0.24.0 // indirect
+ cloud.google.com/go v0.123.0 // indirect
+ cloud.google.com/go/auth v0.17.0 // indirect
+ cloud.google.com/go/auth/oauth2adapt v0.2.8 // indirect
+ cloud.google.com/go/compute/metadata v0.9.0 // indirect
+ cloud.google.com/go/iam v1.5.3 // indirect
+ cloud.google.com/go/monitoring v1.24.2 // indirect
+ cloud.google.com/go/storage v1.58.0 // indirect
+ github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.29.0 // indirect
+ github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/metric v0.54.0 // indirect
+ github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/resourcemapping v0.54.0 // indirect
github.com/JohnCGriffin/overflow v0.0.0-20211019200055-46fa312c352c // indirect
github.com/andybalholm/brotli v1.1.0 // indirect
github.com/apache/thrift v0.21.0 // indirect
@@ -53,13 +64,21 @@ require (
github.com/aws/smithy-go v1.22.2 // indirect
github.com/cenkalti/backoff/v5 v5.0.3 // indirect
github.com/cespare/xxhash/v2 v2.3.0 // indirect
+ github.com/cncf/xds/go v0.0.0-20250501225837-2ac532fd4443 // indirect
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect
github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f // indirect
+ github.com/envoyproxy/go-control-plane/envoy v1.32.4 // indirect
+ github.com/envoyproxy/protoc-gen-validate v1.2.1 // indirect
+ github.com/felixge/httpsnoop v1.0.4 // indirect
+ github.com/go-jose/go-jose/v4 v4.1.2 // indirect
github.com/go-logr/logr v1.4.3 // indirect
github.com/go-logr/stdr v1.2.2 // indirect
github.com/goccy/go-json v0.10.3 // indirect
github.com/golang/snappy v0.0.4 // indirect
github.com/google/flatbuffers v24.3.25+incompatible // indirect
+ github.com/google/s2a-go v0.1.9 // indirect
+ github.com/googleapis/enterprise-certificate-proxy v0.3.7 // indirect
+ github.com/googleapis/gax-go/v2 v2.15.0 // indirect
github.com/grpc-ecosystem/grpc-gateway/v2 v2.27.2 // indirect
github.com/klauspost/asmfmt v1.3.2 // indirect
github.com/klauspost/compress v1.17.9 // indirect
@@ -69,20 +88,32 @@ require (
github.com/minio/asm2plan9s v0.0.0-20200509001527-cdd76441f9d8 // indirect
github.com/minio/c2goasm v0.0.0-20190812172519-36a3d3bbc4f3 // indirect
github.com/pierrec/lz4/v4 v4.1.21 // indirect
+ github.com/planetscale/vtprotobuf v0.6.1-0.20240319094008-0393e58bdf10 // indirect
github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect
+ github.com/spiffe/go-spiffe/v2 v2.5.0 // indirect
github.com/stretchr/objx v0.5.2 // indirect
+ github.com/zeebo/errs v1.4.0 // indirect
github.com/zeebo/xxh3 v1.0.2 // indirect
- go.opentelemetry.io/auto/sdk v1.1.0 // indirect
+ go.opentelemetry.io/auto/sdk v1.2.1 // indirect
+ go.opentelemetry.io/contrib/detectors/gcp v1.36.0 // indirect
+ go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.63.0 // indirect
+ go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.61.0 // indirect
go.opentelemetry.io/otel/metric v1.38.0 // indirect
+ go.opentelemetry.io/otel/sdk/metric v1.38.0 // indirect
go.opentelemetry.io/proto/otlp v1.7.1 // indirect
+ golang.org/x/crypto v0.43.0 // indirect
golang.org/x/exp v0.0.0-20240909161429-701f63a606c0 // indirect
- golang.org/x/mod v0.26.0 // indirect
- golang.org/x/net v0.43.0 // indirect
- golang.org/x/sys v0.35.0 // indirect
- golang.org/x/text v0.28.0 // indirect
- golang.org/x/tools v0.35.0 // indirect
+ golang.org/x/mod v0.28.0 // indirect
+ golang.org/x/net v0.46.0 // indirect
+ golang.org/x/oauth2 v0.33.0 // indirect
+ golang.org/x/sys v0.37.0 // indirect
+ golang.org/x/text v0.30.0 // indirect
+ golang.org/x/time v0.14.0 // indirect
+ golang.org/x/tools v0.37.0 // indirect
golang.org/x/xerrors v0.0.0-20240903120638-7835f813f4da // indirect
- google.golang.org/genproto/googleapis/api v0.0.0-20250825161204-c5933d9347a5 // indirect
+ google.golang.org/api v0.256.0 // indirect
+ google.golang.org/genproto v0.0.0-20250922171735-9219d122eba9 // indirect
+ google.golang.org/genproto/googleapis/api v0.0.0-20251111163417-95abcf5c77ba // indirect
gopkg.in/yaml.v2 v2.4.0 // indirect
gopkg.in/yaml.v3 v3.0.1 // indirect
)
diff --git a/go.sum b/go.sum
index f2530758915..7d306beabb6 100644
--- a/go.sum
+++ b/go.sum
@@ -1,3 +1,25 @@
+cel.dev/expr v0.24.0 h1:56OvJKSH3hDGL0ml5uSxZmz3/3Pq4tJ+fb1unVLAFcY=
+cel.dev/expr v0.24.0/go.mod h1:hLPLo1W4QUmuYdA72RBX06QTs6MXw941piREPl3Yfiw=
+cloud.google.com/go v0.123.0 h1:2NAUJwPR47q+E35uaJeYoNhuNEM9kM8SjgRgdeOJUSE=
+cloud.google.com/go v0.123.0/go.mod h1:xBoMV08QcqUGuPW65Qfm1o9Y4zKZBpGS+7bImXLTAZU=
+cloud.google.com/go/auth v0.17.0 h1:74yCm7hCj2rUyyAocqnFzsAYXgJhrG26XCFimrc/Kz4=
+cloud.google.com/go/auth v0.17.0/go.mod h1:6wv/t5/6rOPAX4fJiRjKkJCvswLwdet7G8+UGXt7nCQ=
+cloud.google.com/go/auth/oauth2adapt v0.2.8 h1:keo8NaayQZ6wimpNSmW5OPc283g65QNIiLpZnkHRbnc=
+cloud.google.com/go/auth/oauth2adapt v0.2.8/go.mod h1:XQ9y31RkqZCcwJWNSx2Xvric3RrU88hAYYbjDWYDL+c=
+cloud.google.com/go/compute/metadata v0.9.0 h1:pDUj4QMoPejqq20dK0Pg2N4yG9zIkYGdBtwLoEkH9Zs=
+cloud.google.com/go/compute/metadata v0.9.0/go.mod h1:E0bWwX5wTnLPedCKqk3pJmVgCBSM6qQI1yTBdEb3C10=
+cloud.google.com/go/iam v1.5.3 h1:+vMINPiDF2ognBJ97ABAYYwRgsaqxPbQDlMnbHMjolc=
+cloud.google.com/go/iam v1.5.3/go.mod h1:MR3v9oLkZCTlaqljW6Eb2d3HGDGK5/bDv93jhfISFvU=
+cloud.google.com/go/monitoring v1.24.2 h1:5OTsoJ1dXYIiMiuL+sYscLc9BumrL3CarVLL7dd7lHM=
+cloud.google.com/go/monitoring v1.24.2/go.mod h1:x7yzPWcgDRnPEv3sI+jJGBkwl5qINf+6qY4eq0I9B4U=
+cloud.google.com/go/storage v1.58.0 h1:PflFXlmFJjG/nBeR9B7pKddLQWaFaRWx4uUi/LyNxxo=
+cloud.google.com/go/storage v1.58.0/go.mod h1:cMWbtM+anpC74gn6qjLh+exqYcfmB9Hqe5z6adx+CLI=
+github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.29.0 h1:UQUsRi8WTzhZntp5313l+CHIAT95ojUI2lpP/ExlZa4=
+github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.29.0/go.mod h1:Cz6ft6Dkn3Et6l2v2a9/RpN7epQ1GtDlO6lj8bEcOvw=
+github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/metric v0.54.0 h1:lhhYARPUu3LmHysQ/igznQphfzynnqI3D75oUyw1HXk=
+github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/metric v0.54.0/go.mod h1:l9rva3ApbBpEJxSNYnwT9N4CDLrWgtq3u8736C5hyJw=
+github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/resourcemapping v0.54.0 h1:s0WlVbf9qpvkh1c/uDAPElam0WrL7fHRIidgZJ7UqZI=
+github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/resourcemapping v0.54.0/go.mod h1:Mf6O40IAyB9zR/1J8nGDDPirZQQPbYJni8Yisy7NTMc=
github.com/JohnCGriffin/overflow v0.0.0-20211019200055-46fa312c352c h1:RGWPOewvKIROun94nF7v2cua9qP+thov/7M50KEoeSU=
github.com/JohnCGriffin/overflow v0.0.0-20211019200055-46fa312c352c/go.mod h1:X0CRv0ky0k6m906ixxpzmDRLvX58TFUKS2eePweuyxk=
github.com/andybalholm/brotli v1.1.0 h1:eLKJA0d02Lf0mVpIDgYnqXcUn0GqVmEFny3VuID1U3M=
@@ -54,13 +76,24 @@ github.com/cenkalti/backoff/v5 v5.0.3 h1:ZN+IMa753KfX5hd8vVaMixjnqRZ3y8CuJKRKj1x
github.com/cenkalti/backoff/v5 v5.0.3/go.mod h1:rkhZdG3JZukswDf7f0cwqPNk4K0sa+F97BxZthm/crw=
github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs=
github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
+github.com/cncf/xds/go v0.0.0-20250501225837-2ac532fd4443 h1:aQ3y1lwWyqYPiWZThqv1aFbZMiM9vblcSArJRf2Irls=
+github.com/cncf/xds/go v0.0.0-20250501225837-2ac532fd4443/go.mod h1:W+zGtBO5Y1IgJhy4+A9GOqVhqLpfZi+vwmdNXUehLA8=
github.com/coreos/go-systemd/v22 v22.5.0/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc=
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM=
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f h1:lO4WD4F/rVNCu3HqELle0jiPLLBs70cWOduZpkS1E78=
github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f/go.mod h1:cuUVRXasLTGF7a8hSLbxyZXjz+1KgoB3wDUb6vlszIc=
+github.com/envoyproxy/go-control-plane v0.13.4 h1:zEqyPVyku6IvWCFwux4x9RxkLOMUL+1vC9xUFv5l2/M=
+github.com/envoyproxy/go-control-plane/envoy v1.32.4 h1:jb83lalDRZSpPWW2Z7Mck/8kXZ5CQAFYVjQcdVIr83A=
+github.com/envoyproxy/go-control-plane/envoy v1.32.4/go.mod h1:Gzjc5k8JcJswLjAx1Zm+wSYE20UrLtt7JZMWiWQXQEw=
+github.com/envoyproxy/protoc-gen-validate v1.2.1 h1:DEo3O99U8j4hBFwbJfrz9VtgcDfUKS7KJ7spH3d86P8=
+github.com/envoyproxy/protoc-gen-validate v1.2.1/go.mod h1:d/C80l/jxXLdfEIhX1W2TmLfsJ31lvEjwamM4DxlWXU=
+github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2Wg=
+github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U=
github.com/ghodss/yaml v1.0.0 h1:wQHKEahhL6wmXdzwWG11gIVCkOv05bNOh+Rxn0yngAk=
github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04=
+github.com/go-jose/go-jose/v4 v4.1.2 h1:TK/7NqRQZfgAh+Td8AlsrvtPoUyiHh0LqVvokh+1vHI=
+github.com/go-jose/go-jose/v4 v4.1.2/go.mod h1:22cg9HWM1pOlnRiY+9cQYJ9XHmya1bYW8OeDM6Ku6Oo=
github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
github.com/go-logr/logr v1.4.3 h1:CjnDlHq8ikf6E492q6eKboGOC0T8CDaOvkHCIg8idEI=
github.com/go-logr/logr v1.4.3/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=
@@ -77,8 +110,14 @@ github.com/google/flatbuffers v24.3.25+incompatible h1:CX395cjN9Kke9mmalRoL3d81A
github.com/google/flatbuffers v24.3.25+incompatible/go.mod h1:1AeVuKshWv4vARoZatz6mlQ0JxURH0Kv5+zNeJKJCa8=
github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8=
github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU=
+github.com/google/s2a-go v0.1.9 h1:LGD7gtMgezd8a/Xak7mEWL0PjoTQFvpRudN895yqKW0=
+github.com/google/s2a-go v0.1.9/go.mod h1:YA0Ei2ZQL3acow2O62kdp9UlnvMmU7kA6Eutn0dXayM=
github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
+github.com/googleapis/enterprise-certificate-proxy v0.3.7 h1:zrn2Ee/nWmHulBx5sAVrGgAa0f2/R35S4DJwfFaUPFQ=
+github.com/googleapis/enterprise-certificate-proxy v0.3.7/go.mod h1:MkHOF77EYAE7qfSuSS9PU6g4Nt4e11cnsDUowfwewLA=
+github.com/googleapis/gax-go/v2 v2.15.0 h1:SyjDc1mGgZU5LncH8gimWo9lW1DtIfPibOG81vgd/bo=
+github.com/googleapis/gax-go/v2 v2.15.0/go.mod h1:zVVkkxAQHa1RQpg9z2AUCMnKhi0Qld9rcmyfL1OZhoc=
github.com/grpc-ecosystem/grpc-gateway/v2 v2.27.2 h1:8Tjv8EJ+pM1xP8mK6egEbD1OgnVTyacbefKhmbLhIhU=
github.com/grpc-ecosystem/grpc-gateway/v2 v2.27.2/go.mod h1:pkJQ2tZHJ0aFOVEEot6oZmaVEZcRme73eIFmhiVuRWs=
github.com/klauspost/asmfmt v1.3.2 h1:4Ri7ox3EwapiOjCki+hw14RyKk201CN4rzyCJRFLpK4=
@@ -107,6 +146,8 @@ github.com/pierrec/lz4/v4 v4.1.21 h1:yOVMLb6qSIDP67pl/5F7RepeKYu/VmTyEXvuMI5d9mQ
github.com/pierrec/lz4/v4 v4.1.21/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4=
github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
+github.com/planetscale/vtprotobuf v0.6.1-0.20240319094008-0393e58bdf10 h1:GFCKgmp0tecUJ0sJuv4pzYCqS9+RGSn52M3FUwPs+uo=
+github.com/planetscale/vtprotobuf v0.6.1-0.20240319094008-0393e58bdf10/go.mod h1:t/avpk3KcrXxUnYOhZhMXJlSEyie6gQbtLq5NM3loB8=
github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U=
github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/redis/go-redis/v9 v9.6.1 h1:HHDteefn6ZkTtY5fGUE8tj8uy85AHk6zP7CpzIAM0y4=
@@ -115,21 +156,34 @@ github.com/roberson-io/mmh3 v0.0.0-20190729202758-fdfce3ba6225 h1:ZMsPCp7oYgjoIF
github.com/roberson-io/mmh3 v0.0.0-20190729202758-fdfce3ba6225/go.mod h1:XEESr+X1SY8ZSuc3jqsTlb3clCkqQJ4DcF3Qxv1N3PM=
github.com/rogpeppe/go-internal v1.13.1 h1:KvO1DLK/DRN07sQ1LQKScxyZJuNnedQ5/wKSR38lUII=
github.com/rogpeppe/go-internal v1.13.1/go.mod h1:uMEvuHeurkdAXX61udpOXGD/AzZDWNMNyH2VO9fmH0o=
+github.com/rogpeppe/go-internal v1.14.1 h1:UQB4HGPB6osV0SQTLymcB4TgvyWu6ZyliaW0tI/otEQ=
github.com/rs/xid v1.5.0/go.mod h1:trrq9SKmegXys3aeAKXMUTdJsYXVwGY3RLcfgqegfbg=
github.com/rs/zerolog v1.33.0 h1:1cU2KZkvPxNyfgEmhHAz/1A9Bz+llsdYzklWFzgp0r8=
github.com/rs/zerolog v1.33.0/go.mod h1:/7mN4D5sKwJLZQ2b/znpjC3/GQWY/xaDXUM0kKWRHss=
github.com/spaolacci/murmur3 v1.1.0 h1:7c1g84S4BPRrfL5Xrdp6fOJ206sU9y293DDHaoy0bLI=
github.com/spaolacci/murmur3 v1.1.0/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA=
+github.com/spiffe/go-spiffe/v2 v2.5.0 h1:N2I01KCUkv1FAjZXJMwh95KK1ZIQLYbPfhaxw8WS0hE=
+github.com/spiffe/go-spiffe/v2 v2.5.0/go.mod h1:P+NxobPc6wXhVtINNtFjNWGBTreew1GBUCwT2wPmb7g=
github.com/stretchr/objx v0.5.2 h1:xuMeJ0Sdp5ZMRXx/aWO6RZxdr3beISkG5/G/aIRr3pY=
github.com/stretchr/objx v0.5.2/go.mod h1:FRsXN1f5AsAjCGJKqEizvkpNtU+EGNCLh3NxZ/8L+MA=
github.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu7U=
github.com/stretchr/testify v1.11.1/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD981Nm4B6U=
github.com/zeebo/assert v1.3.0 h1:g7C04CbJuIDKNPFHmsk4hwZDO5O+kntRxzaUoNXj+IQ=
github.com/zeebo/assert v1.3.0/go.mod h1:Pq9JiuJQpG8JLJdtkwrJESF0Foym2/D9XMU5ciN/wJ0=
+github.com/zeebo/errs v1.4.0 h1:XNdoD/RRMKP7HD0UhJnIzUy74ISdGGxURlYG8HSWSfM=
+github.com/zeebo/errs v1.4.0/go.mod h1:sgbWHsvVuTPHcqJJGQ1WhI5KbWlHYz+2+2C/LSEtCw4=
github.com/zeebo/xxh3 v1.0.2 h1:xZmwmqxHZA8AI603jOQ0tMqmBr9lPeFwGg6d+xy9DC0=
github.com/zeebo/xxh3 v1.0.2/go.mod h1:5NWz9Sef7zIDm2JHfFlcQvNekmcEl9ekUZQQKCYaDcA=
go.opentelemetry.io/auto/sdk v1.1.0 h1:cH53jehLUN6UFLY71z+NDOiNJqDdPRaXzTel0sJySYA=
go.opentelemetry.io/auto/sdk v1.1.0/go.mod h1:3wSPjt5PWp2RhlCcmmOial7AvC4DQqZb7a7wCow3W8A=
+go.opentelemetry.io/auto/sdk v1.2.1 h1:jXsnJ4Lmnqd11kwkBV2LgLoFMZKizbCi5fNZ/ipaZ64=
+go.opentelemetry.io/auto/sdk v1.2.1/go.mod h1:KRTj+aOaElaLi+wW1kO/DZRXwkF4C5xPbEe3ZiIhN7Y=
+go.opentelemetry.io/contrib/detectors/gcp v1.36.0 h1:F7q2tNlCaHY9nMKHR6XH9/qkp8FktLnIcy6jJNyOCQw=
+go.opentelemetry.io/contrib/detectors/gcp v1.36.0/go.mod h1:IbBN8uAIIx734PTonTPxAxnjc2pQTxWNkwfstZ+6H2k=
+go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.63.0 h1:YH4g8lQroajqUwWbq/tr2QX1JFmEXaDLgG+ew9bLMWo=
+go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.63.0/go.mod h1:fvPi2qXDqFs8M4B4fmJhE92TyQs9Ydjlg3RvfUp+NbQ=
+go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.61.0 h1:F7Jx+6hwnZ41NSFTO5q4LYDtJRXBf2PD0rNBkeB/lus=
+go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.61.0/go.mod h1:UHB22Z8QsdRDrnAtX4PntOl36ajSxcdUMt1sF7Y6E7Q=
go.opentelemetry.io/otel v1.38.0 h1:RkfdswUDRimDg0m2Az18RKOsnI8UDzppJAtj01/Ymk8=
go.opentelemetry.io/otel v1.38.0/go.mod h1:zcmtmQ1+YmQM9wrNsTGV/q/uyusom3P8RxwExxkZhjM=
go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.38.0 h1:GqRJVj7UmLjCVyVJ3ZFLdPRmhDUp2zFmQe3RHIOsw24=
@@ -148,36 +202,66 @@ go.opentelemetry.io/proto/otlp v1.7.1 h1:gTOMpGDb0WTBOP8JaO72iL3auEZhVmAQg4ipjOV
go.opentelemetry.io/proto/otlp v1.7.1/go.mod h1:b2rVh6rfI/s2pHWNlB7ILJcRALpcNDzKhACevjI+ZnE=
go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto=
go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE=
+golang.org/x/crypto v0.43.0 h1:dduJYIi3A3KOfdGOHX8AVZ/jGiyPa3IbBozJ5kNuE04=
+golang.org/x/crypto v0.43.0/go.mod h1:BFbav4mRNlXJL4wNeejLpWxB7wMbc79PdRGhWKncxR0=
golang.org/x/exp v0.0.0-20240909161429-701f63a606c0 h1:e66Fs6Z+fZTbFBAxKfP3PALWBtpfqks2bwGcexMxgtk=
golang.org/x/exp v0.0.0-20240909161429-701f63a606c0/go.mod h1:2TbTHSBQa924w8M6Xs1QcRcFwyucIwBGpK1p2f1YFFY=
golang.org/x/mod v0.26.0 h1:EGMPT//Ezu+ylkCijjPc+f4Aih7sZvaAr+O3EHBxvZg=
golang.org/x/mod v0.26.0/go.mod h1:/j6NAhSk8iQ723BGAUyoAcn7SlD7s15Dp9Nd/SfeaFQ=
+golang.org/x/mod v0.28.0 h1:gQBtGhjxykdjY9YhZpSlZIsbnaE2+PgjfLWUQTnoZ1U=
+golang.org/x/mod v0.28.0/go.mod h1:yfB/L0NOf/kmEbXjzCPOx1iK1fRutOydrCMsqRhEBxI=
golang.org/x/net v0.43.0 h1:lat02VYK2j4aLzMzecihNvTlJNQUq316m2Mr9rnM6YE=
golang.org/x/net v0.43.0/go.mod h1:vhO1fvI4dGsIjh73sWfUVjj3N7CA9WkKJNQm2svM6Jg=
+golang.org/x/net v0.46.0 h1:giFlY12I07fugqwPuWJi68oOnpfqFnJIJzaIIm2JVV4=
+golang.org/x/net v0.46.0/go.mod h1:Q9BGdFy1y4nkUwiLvT5qtyhAnEHgnQ/zd8PfU6nc210=
+golang.org/x/oauth2 v0.33.0 h1:4Q+qn+E5z8gPRJfmRy7C2gGG3T4jIprK6aSYgTXGRpo=
+golang.org/x/oauth2 v0.33.0/go.mod h1:lzm5WQJQwKZ3nwavOZ3IS5Aulzxi68dUSgRHujetwEA=
golang.org/x/sync v0.17.0 h1:l60nONMj9l5drqw6jlhIELNv9I0A4OFgRsG9k2oT9Ug=
golang.org/x/sync v0.17.0/go.mod h1:9KTHXmSnoGruLpwFjVSX0lNNA75CykiMECbovNTZqGI=
+golang.org/x/sync v0.18.0 h1:kr88TuHDroi+UVf+0hZnirlk8o8T+4MrK6mr60WkH/I=
+golang.org/x/sync v0.18.0/go.mod h1:9KTHXmSnoGruLpwFjVSX0lNNA75CykiMECbovNTZqGI=
golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.35.0 h1:vz1N37gP5bs89s7He8XuIYXpyY0+QlsKmzipCbUtyxI=
golang.org/x/sys v0.35.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k=
+golang.org/x/sys v0.37.0 h1:fdNQudmxPjkdUTPnLn5mdQv7Zwvbvpaxqs831goi9kQ=
+golang.org/x/sys v0.37.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks=
golang.org/x/text v0.28.0 h1:rhazDwis8INMIwQ4tpjLDzUhx6RlXqZNPEM0huQojng=
golang.org/x/text v0.28.0/go.mod h1:U8nCwOR8jO/marOQ0QbDiOngZVEBB7MAiitBuMjXiNU=
+golang.org/x/text v0.30.0 h1:yznKA/E9zq54KzlzBEAWn1NXSQ8DIp/NYMy88xJjl4k=
+golang.org/x/text v0.30.0/go.mod h1:yDdHFIX9t+tORqspjENWgzaCVXgk0yYnYuSZ8UzzBVM=
+golang.org/x/time v0.14.0 h1:MRx4UaLrDotUKUdCIqzPC48t1Y9hANFKIRpNx+Te8PI=
+golang.org/x/time v0.14.0/go.mod h1:eL/Oa2bBBK0TkX57Fyni+NgnyQQN4LitPmob2Hjnqw4=
golang.org/x/tools v0.35.0 h1:mBffYraMEf7aa0sB+NuKnuCy8qI/9Bughn8dC2Gu5r0=
golang.org/x/tools v0.35.0/go.mod h1:NKdj5HkL/73byiZSJjqJgKn3ep7KjFkBOkR/Hps3VPw=
+golang.org/x/tools v0.37.0 h1:DVSRzp7FwePZW356yEAChSdNcQo6Nsp+fex1SUW09lE=
+golang.org/x/tools v0.37.0/go.mod h1:MBN5QPQtLMHVdvsbtarmTNukZDdgwdwlO5qGacAzF0w=
golang.org/x/xerrors v0.0.0-20240903120638-7835f813f4da h1:noIWHXmPHxILtqtCOPIhSt0ABwskkZKjD3bXGnZGpNY=
golang.org/x/xerrors v0.0.0-20240903120638-7835f813f4da/go.mod h1:NDW/Ps6MPRej6fsCIbMTohpP40sJ/P/vI1MoTEGwX90=
gonum.org/v1/gonum v0.16.0 h1:5+ul4Swaf3ESvrOnidPp4GZbzf0mxVQpDCYUQE7OJfk=
gonum.org/v1/gonum v0.16.0/go.mod h1:fef3am4MQ93R2HHpKnLk4/Tbh/s0+wqD5nfa6Pnwy4E=
+google.golang.org/api v0.256.0 h1:u6Khm8+F9sxbCTYNoBHg6/Hwv0N/i+V94MvkOSor6oI=
+google.golang.org/api v0.256.0/go.mod h1:KIgPhksXADEKJlnEoRa9qAII4rXcy40vfI8HRqcU964=
+google.golang.org/genproto v0.0.0-20250922171735-9219d122eba9 h1:LvZVVaPE0JSqL+ZWb6ErZfnEOKIqqFWUJE2D0fObSmc=
+google.golang.org/genproto v0.0.0-20250922171735-9219d122eba9/go.mod h1:QFOrLhdAe2PsTp3vQY4quuLKTi9j3XG3r6JPPaw7MSc=
google.golang.org/genproto/googleapis/api v0.0.0-20250825161204-c5933d9347a5 h1:BIRfGDEjiHRrk0QKZe3Xv2ieMhtgRGeLcZQ0mIVn4EY=
google.golang.org/genproto/googleapis/api v0.0.0-20250825161204-c5933d9347a5/go.mod h1:j3QtIyytwqGr1JUDtYXwtMXWPKsEa5LtzIFN1Wn5WvE=
+google.golang.org/genproto/googleapis/api v0.0.0-20251111163417-95abcf5c77ba h1:B14OtaXuMaCQsl2deSvNkyPKIzq3BjfxQp8d00QyWx4=
+google.golang.org/genproto/googleapis/api v0.0.0-20251111163417-95abcf5c77ba/go.mod h1:G5IanEx8/PgI9w6CFcYQf7jMtHQhZruvfM1i3qOqk5U=
google.golang.org/genproto/googleapis/rpc v0.0.0-20250825161204-c5933d9347a5 h1:eaY8u2EuxbRv7c3NiGK0/NedzVsCcV6hDuU5qPX5EGE=
google.golang.org/genproto/googleapis/rpc v0.0.0-20250825161204-c5933d9347a5/go.mod h1:M4/wBTSeyLxupu3W3tJtOgB14jILAS/XWPSSa3TAlJc=
+google.golang.org/genproto/googleapis/rpc v0.0.0-20251111163417-95abcf5c77ba h1:UKgtfRM7Yh93Sya0Fo8ZzhDP4qBckrrxEr2oF5UIVb8=
+google.golang.org/genproto/googleapis/rpc v0.0.0-20251111163417-95abcf5c77ba/go.mod h1:7i2o+ce6H/6BluujYR+kqX3GKH+dChPTQU19wjRPiGk=
google.golang.org/grpc v1.75.0 h1:+TW+dqTd2Biwe6KKfhE5JpiYIBWq865PhKGSXiivqt4=
google.golang.org/grpc v1.75.0/go.mod h1:JtPAzKiq4v1xcAB2hydNlWI2RnF85XXcV0mhKXr2ecQ=
+google.golang.org/grpc v1.76.0 h1:UnVkv1+uMLYXoIz6o7chp59WfQUYA2ex/BXQ9rHZu7A=
+google.golang.org/grpc v1.76.0/go.mod h1:Ju12QI8M6iQJtbcsV+awF5a4hfJMLi4X0JLo94ULZ6c=
google.golang.org/protobuf v1.36.8 h1:xHScyCOEuuwZEc6UtSOvPbAT4zRh0xcNRYekJwfqyMc=
google.golang.org/protobuf v1.36.8/go.mod h1:fuxRtAxBytpl4zzqUh6/eyUujkJdNiuEkXntxiD/uRU=
+google.golang.org/protobuf v1.36.10 h1:AYd7cD/uASjIL6Q9LiTjz8JLcrh/88q5UObnmY3aOOE=
+google.golang.org/protobuf v1.36.10/go.mod h1:HTf+CrKn2C3g5S8VImy6tdcUvCska2kB7j23XfzDpco=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=
diff --git a/go/internal/feast/registry/gcs.go b/go/internal/feast/registry/gcs.go
new file mode 100644
index 00000000000..00968a55ae3
--- /dev/null
+++ b/go/internal/feast/registry/gcs.go
@@ -0,0 +1,114 @@
+package registry
+
+import (
+ "context"
+ "errors"
+ "io"
+ "net/url"
+ "strings"
+ "time"
+
+ "cloud.google.com/go/storage"
+ "google.golang.org/protobuf/proto"
+
+ "github.com/feast-dev/feast/go/protos/feast/core"
+)
+
+// GCSObjectReader defines the interface for reading GCS objects to allow mocking in tests.
+type GCSObjectReader interface {
+ GetObject(ctx context.Context, bucket string, object string) (io.ReadCloser, error)
+ DeleteObject(ctx context.Context, bucket string, object string) error
+}
+
+// GCSClient implements GCSObjectReader using the real GCS SDK.
+type GCSClient struct {
+ client *storage.Client
+}
+
+func (g *GCSClient) GetObject(ctx context.Context, bucket string, object string) (io.ReadCloser, error) {
+ return g.client.Bucket(bucket).Object(object).NewReader(ctx)
+}
+
+func (g *GCSClient) DeleteObject(ctx context.Context, bucket string, object string) error {
+ return g.client.Bucket(bucket).Object(object).Delete(ctx)
+}
+
+// GCSRegistryStore is a GCS bucket-based implementation of the RegistryStore interface.
+type GCSRegistryStore struct {
+ registryPath string
+ client GCSObjectReader
+}
+
+// NewGCSRegistryStore creates a GCSRegistryStore with the given configuration.
+func NewGCSRegistryStore(config *RegistryConfig, repoPath string) *GCSRegistryStore {
+ var rs GCSRegistryStore
+ ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
+ defer cancel()
+
+ client, err := storage.NewClient(ctx)
+ if err != nil {
+ rs = GCSRegistryStore{
+ registryPath: config.Path,
+ }
+ } else {
+ rs = GCSRegistryStore{
+ registryPath: config.Path,
+ client: &GCSClient{client: client},
+ }
+ }
+ return &rs
+}
+
+// GetRegistryProto reads and parses the registry proto from the GCS bucket object.
+func (g *GCSRegistryStore) GetRegistryProto() (*core.Registry, error) {
+ bucket, object, err := g.parseGCSPath()
+ if err != nil {
+ return nil, err
+ }
+
+ ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
+ defer cancel()
+
+ reader, err := g.client.GetObject(ctx, bucket, object)
+ if err != nil {
+ return nil, err
+ }
+ defer reader.Close()
+
+ data, err := io.ReadAll(reader)
+ if err != nil {
+ return nil, err
+ }
+
+ registry := &core.Registry{}
+ if err := proto.Unmarshal(data, registry); err != nil {
+ return nil, err
+ }
+ return registry, nil
+}
+
+func (g *GCSRegistryStore) UpdateRegistryProto(rp *core.Registry) error {
+ return errors.New("not implemented in GCSRegistryStore")
+}
+
+func (g *GCSRegistryStore) Teardown() error {
+ bucket, object, err := g.parseGCSPath()
+ if err != nil {
+ return err
+ }
+
+ ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
+ defer cancel()
+
+ return g.client.DeleteObject(ctx, bucket, object)
+}
+
+func (g *GCSRegistryStore) parseGCSPath() (string, string, error) {
+ uri, err := url.Parse(g.registryPath)
+ if err != nil {
+ return "", "", errors.New("invalid GCS registry path format")
+ }
+ bucket := uri.Host
+ object := strings.TrimPrefix(uri.Path, "/")
+ return bucket, object, nil
+}
diff --git a/go/internal/feast/registry/registry.go b/go/internal/feast/registry/registry.go
index 160dda94fd6..9cd0febe5d3 100644
--- a/go/internal/feast/registry/registry.go
+++ b/go/internal/feast/registry/registry.go
@@ -357,7 +357,7 @@ func getRegistryStoreFromScheme(registryPath string, registryConfig *RegistryCon
if registryStoreType, ok := REGISTRY_STORE_CLASS_FOR_SCHEME[uri.Scheme]; ok {
return getRegistryStoreFromType(registryStoreType, registryConfig, repoPath, project)
}
- return nil, fmt.Errorf("registry path %s has unsupported scheme %s. Supported schemes are file, s3 and gs", registryPath, uri.Scheme)
+ return nil, fmt.Errorf("registry path %s has unsupported scheme %s. Supported schemes are file, s3 and gcs", registryPath, uri.Scheme)
}
func getRegistryStoreFromType(registryStoreType string, registryConfig *RegistryConfig, repoPath string, project string) (RegistryStore, error) {
@@ -366,6 +366,8 @@ func getRegistryStoreFromType(registryStoreType string, registryConfig *Registry
return NewFileRegistryStore(registryConfig, repoPath), nil
case "S3RegistryStore":
return NewS3RegistryStore(registryConfig, repoPath), nil
+ case "GCSRegistryStore":
+ return NewGCSRegistryStore(registryConfig, repoPath), nil
}
- return nil, errors.New("only FileRegistryStore as a RegistryStore is supported at this moment")
+ return nil, errors.New("only FileRegistryStore, S3RegistryStore, and GCSRegistryStore are supported at this moment")
}
diff --git a/go/internal/feast/registry/registry_test.go b/go/internal/feast/registry/registry_test.go
index 3e544d486e5..6f75dbbbeb2 100644
--- a/go/internal/feast/registry/registry_test.go
+++ b/go/internal/feast/registry/registry_test.go
@@ -12,7 +12,7 @@ import (
"github.com/aws/aws-sdk-go-v2/service/s3"
)
-func TestGetOnlineFeaturesS3Registry(t *testing.T) {
+func TestCloudRegistryStores(t *testing.T) {
mockS3Client := &MockS3Client{
GetObjectFn: func(ctx context.Context, params *s3.GetObjectInput, optFns ...func(*s3.Options)) (*s3.GetObjectOutput, error) {
return &s3.GetObjectOutput{
@@ -24,56 +24,82 @@ func TestGetOnlineFeaturesS3Registry(t *testing.T) {
},
}
+ mockGCSClient := &MockGCSClient{
+ GetObjectFn: func(ctx context.Context, bucket string, object string) (io.ReadCloser, error) {
+ return io.NopCloser(strings.NewReader("mock data")), nil
+ },
+ DeleteObjectFn: func(ctx context.Context, bucket string, object string) error {
+ return nil
+ },
+ }
+
tests := []struct {
name string
config *RepoConfig
}{
{
- name: "redis with simple features",
+ name: "s3 registry store",
config: &RepoConfig{
Project: "feature_repo",
- Registry: map[string]interface{}{
+ Registry: map[string]any{
"path": "s3://test-bucket/path/to/registry.db",
},
Provider: "aws",
},
},
+ {
+ name: "gcs registry store",
+ config: &RepoConfig{
+ Project: "feature_repo",
+ Registry: map[string]any{
+ "path": "gs://test-bucket/path/to/registry.db",
+ },
+ Provider: "gcp",
+ },
+ },
}
+
for _, test := range tests {
- registryConfig, err := test.config.GetRegistryConfig()
- if err != nil {
- t.Errorf("Error getting registry config. msg: %s", err.Error())
- }
- r := &Registry{
- project: test.config.Project,
- cachedRegistryProtoTtl: time.Duration(registryConfig.CacheTtlSeconds) * time.Second,
- }
- _ = registryConfig.RegistryStoreType
- registryPath := registryConfig.Path
- uri, err := url.Parse(registryPath)
- if err != nil {
- t.Errorf("Error parsing registry path. msg: %s", err.Error())
- }
- if registryStoreType, ok := REGISTRY_STORE_CLASS_FOR_SCHEME[uri.Scheme]; ok {
- switch registryStoreType {
- case "S3RegistryStore":
- registryStore := &S3RegistryStore{
- filePath: registryConfig.Path,
- s3Client: mockS3Client,
+ t.Run(test.name, func(t *testing.T) {
+ registryConfig, err := test.config.GetRegistryConfig()
+ if err != nil {
+ t.Errorf("Error getting registry config. msg: %s", err.Error())
+ }
+ r := &Registry{
+ project: test.config.Project,
+ cachedRegistryProtoTtl: time.Duration(registryConfig.CacheTtlSeconds) * time.Second,
+ }
+ registryPath := registryConfig.Path
+ uri, err := url.Parse(registryPath)
+ if err != nil {
+ t.Errorf("Error parsing registry path. msg: %s", err.Error())
+ }
+ if registryStoreType, ok := REGISTRY_STORE_CLASS_FOR_SCHEME[uri.Scheme]; ok {
+ switch registryStoreType {
+ case "S3RegistryStore":
+ r.registryStore = &S3RegistryStore{
+ filePath: registryConfig.Path,
+ s3Client: mockS3Client,
+ }
+ case "GCSRegistryStore":
+ r.registryStore = &GCSRegistryStore{
+ registryPath: registryConfig.Path,
+ client: mockGCSClient,
+ }
+ default:
+ t.Errorf("Unsupported registry store type: %s", registryStoreType)
+ return
}
- r.registryStore = registryStore
err := r.InitializeRegistry()
if err != nil {
t.Errorf("Error initializing registry. msg: %s. registry path=%q", err.Error(), registryPath)
}
- default:
- t.Errorf("Only S3RegistryStore is supported on this testing. got=%s", registryStoreType)
}
- }
+ })
}
}
-// MockS3Client is mock client for testing s3 registry store
+// MockS3Client is mock client for testing S3 registry store
type MockS3Client struct {
GetObjectFn func(ctx context.Context, params *s3.GetObjectInput, optFns ...func(*s3.Options)) (*s3.GetObjectOutput, error)
DeleteObjectFn func(ctx context.Context, params *s3.DeleteObjectInput, optFns ...func(*s3.Options)) (*s3.DeleteObjectOutput, error)
@@ -92,3 +118,23 @@ func (m *MockS3Client) DeleteObject(ctx context.Context, params *s3.DeleteObject
}
return nil, errors.New("not implemented")
}
+
+// MockGCSClient is mock client for testing GCS registry store
+type MockGCSClient struct {
+ GetObjectFn func(ctx context.Context, bucket string, object string) (io.ReadCloser, error)
+ DeleteObjectFn func(ctx context.Context, bucket string, object string) error
+}
+
+func (m *MockGCSClient) GetObject(ctx context.Context, bucket string, object string) (io.ReadCloser, error) {
+ if m.GetObjectFn != nil {
+ return m.GetObjectFn(ctx, bucket, object)
+ }
+ return nil, errors.New("not implemented")
+}
+
+func (m *MockGCSClient) DeleteObject(ctx context.Context, bucket string, object string) error {
+ if m.DeleteObjectFn != nil {
+ return m.DeleteObjectFn(ctx, bucket, object)
+ }
+ return errors.New("not implemented")
+}
From bbba34cfa6c4f5824d336a81d53024bb6a28ca52 Mon Sep 17 00:00:00 2001
From: Francisco Javier Arceo
Date: Tue, 6 Jan 2026 12:41:59 -0500
Subject: [PATCH 16/26] chore: Refactor some unit tests into integration tests
(#5820)
* chore: Refactor some unit tests into integration tests
Signed-off-by: Francisco Javier Arceo
* chore: Refactor some unit tests into integration tests
Signed-off-by: Francisco Javier Arceo
* rename TestConfig
Signed-off-by: Francisco Javier Arceo
* rename TestConfig
Signed-off-by: Francisco Javier Arceo
* add integration flag
Signed-off-by: Francisco Javier Arceo
* update paths
Signed-off-by: Francisco Javier Arceo
* update paths
Signed-off-by: Francisco Javier Arceo
---------
Signed-off-by: Francisco Javier Arceo
---
.github/workflows/registry-rest-api-tests.yml | 4 +-
.../registration/rest_api}/conftest.py | 34 +++++--
.../resource/feast-registry-nginx.yaml | 0
.../resource/feast_config_credit_scoring.yaml | 0
.../resource/feast_config_driver_ranking.yaml | 0
.../resource/feast_config_rhoai.yaml | 0
.../rest_api}/resource/postgres.yaml | 0
.../rest_api}/resource/redis.yaml | 0
.../registration/rest_api}/support.py | 0
.../rest_api/test_registry_rest_api.py} | 94 ++++++++++---------
10 files changed, 81 insertions(+), 51 deletions(-)
rename sdk/python/tests/{registry_rest_api_tests => integration/registration/rest_api}/conftest.py (78%)
rename sdk/python/tests/{registry_rest_api_tests => integration/registration/rest_api}/resource/feast-registry-nginx.yaml (100%)
rename sdk/python/tests/{registry_rest_api_tests => integration/registration/rest_api}/resource/feast_config_credit_scoring.yaml (100%)
rename sdk/python/tests/{registry_rest_api_tests => integration/registration/rest_api}/resource/feast_config_driver_ranking.yaml (100%)
rename sdk/python/tests/{registry_rest_api_tests => integration/registration/rest_api}/resource/feast_config_rhoai.yaml (100%)
rename sdk/python/tests/{registry_rest_api_tests => integration/registration/rest_api}/resource/postgres.yaml (100%)
rename sdk/python/tests/{registry_rest_api_tests => integration/registration/rest_api}/resource/redis.yaml (100%)
rename sdk/python/tests/{registry_rest_api_tests => integration/registration/rest_api}/support.py (100%)
rename sdk/python/tests/{registry_rest_api_tests/test_feast_registry.py => integration/registration/rest_api/test_registry_rest_api.py} (84%)
diff --git a/.github/workflows/registry-rest-api-tests.yml b/.github/workflows/registry-rest-api-tests.yml
index 5eddd68a539..cd679c7044b 100644
--- a/.github/workflows/registry-rest-api-tests.yml
+++ b/.github/workflows/registry-rest-api-tests.yml
@@ -145,8 +145,8 @@ jobs:
- name: Setup and Run Registry Rest API tests
run: |
echo "Running Registry REST API tests..."
- cd sdk/python/tests/registry_rest_api_tests/
- pytest test_feast_registry.py -s
+ cd sdk/python
+ pytest tests/integration/registration/rest_api/test_registry_rest_api.py --integration -s
- name: Clean up docker images
if: always()
diff --git a/sdk/python/tests/registry_rest_api_tests/conftest.py b/sdk/python/tests/integration/registration/rest_api/conftest.py
similarity index 78%
rename from sdk/python/tests/registry_rest_api_tests/conftest.py
rename to sdk/python/tests/integration/registration/rest_api/conftest.py
index 2a128785fd8..36c358a9aa6 100644
--- a/sdk/python/tests/registry_rest_api_tests/conftest.py
+++ b/sdk/python/tests/integration/registration/rest_api/conftest.py
@@ -1,9 +1,11 @@
import os
+from pathlib import Path
import pytest
import requests
from kubernetes import client, config
-from support import (
+
+from tests.integration.registration.rest_api.support import (
applyFeastProject,
create_feast_project,
create_namespace,
@@ -41,6 +43,10 @@ def feast_rest_client():
config.load_kube_config()
api_instance = client.CoreV1Api()
+ # Get the directory containing this conftest.py file
+ test_dir = Path(__file__).parent
+ resource_dir = test_dir / "resource"
+
# Constants and environment values
namespace = "test-ns-feast-rest"
credit_scoring = "credit-scoring"
@@ -54,23 +60,37 @@ def feast_rest_client():
try:
if not run_on_openshift:
# Deploy dependencies
- deploy_and_validate_pod(namespace, "resource/redis.yaml", "app=redis")
- deploy_and_validate_pod(namespace, "resource/postgres.yaml", "app=postgres")
+ deploy_and_validate_pod(
+ namespace, str(resource_dir / "redis.yaml"), "app=redis"
+ )
+ deploy_and_validate_pod(
+ namespace, str(resource_dir / "postgres.yaml"), "app=postgres"
+ )
# Create and validate FeatureStore CRs
create_feast_project(
- "resource/feast_config_credit_scoring.yaml", namespace, credit_scoring
+ str(resource_dir / "feast_config_credit_scoring.yaml"),
+ namespace,
+ credit_scoring,
)
validate_feature_store_cr_status(namespace, credit_scoring)
create_feast_project(
- "resource/feast_config_driver_ranking.yaml", namespace, driver_ranking
+ str(resource_dir / "feast_config_driver_ranking.yaml"),
+ namespace,
+ driver_ranking,
)
validate_feature_store_cr_status(namespace, driver_ranking)
# Deploy ingress and get route URL
run_kubectl_command(
- ["apply", "-f", "resource/feast-registry-nginx.yaml", "-n", namespace]
+ [
+ "apply",
+ "-f",
+ str(resource_dir / "feast-registry-nginx.yaml"),
+ "-n",
+ namespace,
+ ]
)
ingress_host = run_kubectl_command(
[
@@ -114,7 +134,7 @@ def feast_rest_client():
aws_secret_key,
aws_bucket,
registry_path,
- "resource/feast_config_rhoai.yaml",
+ str(resource_dir / "feast_config_rhoai.yaml"),
namespace,
)
validate_feature_store_cr_status(namespace, "test-s3")
diff --git a/sdk/python/tests/registry_rest_api_tests/resource/feast-registry-nginx.yaml b/sdk/python/tests/integration/registration/rest_api/resource/feast-registry-nginx.yaml
similarity index 100%
rename from sdk/python/tests/registry_rest_api_tests/resource/feast-registry-nginx.yaml
rename to sdk/python/tests/integration/registration/rest_api/resource/feast-registry-nginx.yaml
diff --git a/sdk/python/tests/registry_rest_api_tests/resource/feast_config_credit_scoring.yaml b/sdk/python/tests/integration/registration/rest_api/resource/feast_config_credit_scoring.yaml
similarity index 100%
rename from sdk/python/tests/registry_rest_api_tests/resource/feast_config_credit_scoring.yaml
rename to sdk/python/tests/integration/registration/rest_api/resource/feast_config_credit_scoring.yaml
diff --git a/sdk/python/tests/registry_rest_api_tests/resource/feast_config_driver_ranking.yaml b/sdk/python/tests/integration/registration/rest_api/resource/feast_config_driver_ranking.yaml
similarity index 100%
rename from sdk/python/tests/registry_rest_api_tests/resource/feast_config_driver_ranking.yaml
rename to sdk/python/tests/integration/registration/rest_api/resource/feast_config_driver_ranking.yaml
diff --git a/sdk/python/tests/registry_rest_api_tests/resource/feast_config_rhoai.yaml b/sdk/python/tests/integration/registration/rest_api/resource/feast_config_rhoai.yaml
similarity index 100%
rename from sdk/python/tests/registry_rest_api_tests/resource/feast_config_rhoai.yaml
rename to sdk/python/tests/integration/registration/rest_api/resource/feast_config_rhoai.yaml
diff --git a/sdk/python/tests/registry_rest_api_tests/resource/postgres.yaml b/sdk/python/tests/integration/registration/rest_api/resource/postgres.yaml
similarity index 100%
rename from sdk/python/tests/registry_rest_api_tests/resource/postgres.yaml
rename to sdk/python/tests/integration/registration/rest_api/resource/postgres.yaml
diff --git a/sdk/python/tests/registry_rest_api_tests/resource/redis.yaml b/sdk/python/tests/integration/registration/rest_api/resource/redis.yaml
similarity index 100%
rename from sdk/python/tests/registry_rest_api_tests/resource/redis.yaml
rename to sdk/python/tests/integration/registration/rest_api/resource/redis.yaml
diff --git a/sdk/python/tests/registry_rest_api_tests/support.py b/sdk/python/tests/integration/registration/rest_api/support.py
similarity index 100%
rename from sdk/python/tests/registry_rest_api_tests/support.py
rename to sdk/python/tests/integration/registration/rest_api/support.py
diff --git a/sdk/python/tests/registry_rest_api_tests/test_feast_registry.py b/sdk/python/tests/integration/registration/rest_api/test_registry_rest_api.py
similarity index 84%
rename from sdk/python/tests/registry_rest_api_tests/test_feast_registry.py
rename to sdk/python/tests/integration/registration/rest_api/test_registry_rest_api.py
index 04e86618cf7..5d37d700a64 100644
--- a/sdk/python/tests/registry_rest_api_tests/test_feast_registry.py
+++ b/sdk/python/tests/integration/registration/rest_api/test_registry_rest_api.py
@@ -13,7 +13,7 @@
# Test Configuration Constants
@dataclass(frozen=True)
-class TestConfig:
+class RegistryTestConfig:
"""Configuration constants for registry REST API tests."""
CREDIT_SCORING_PROJECT = "credit_scoring_local"
@@ -103,7 +103,7 @@ def validate_entity_structure(entity: Dict[str, Any]) -> None:
assert "lastUpdatedTimestamp" in meta
assert isinstance(entity["project"], str)
- assert entity["project"] in TestConfig.PROJECT_NAMES
+ assert entity["project"] in RegistryTestConfig.PROJECT_NAMES
@staticmethod
def validate_feature_structure(feature: Dict[str, Any]) -> None:
@@ -132,6 +132,7 @@ def validate_batch_source(batch_source: Dict[str, Any]) -> None:
assert batch_source.get("type") == "BATCH_FILE"
+@pytest.mark.integration
@pytest.mark.skipif(
not os.path.exists(os.path.expanduser("~/.kube/config")),
reason="Kube config not available in this environment",
@@ -143,7 +144,7 @@ class TestRegistryServerRest:
def test_list_entities(self, feast_rest_client):
"""Test listing entities for a specific project."""
response = feast_rest_client.get(
- f"/entities/?project={TestConfig.CREDIT_SCORING_PROJECT}"
+ f"/entities/?project={RegistryTestConfig.CREDIT_SCORING_PROJECT}"
)
data = APITestHelpers.validate_response_success(response)
@@ -151,21 +152,21 @@ def test_list_entities(self, feast_rest_client):
assert "entities" in data
entities = data["entities"]
assert isinstance(entities, list)
- assert len(entities) == TestConfig.CREDIT_SCORING_ENTITIES_COUNT
+ assert len(entities) == RegistryTestConfig.CREDIT_SCORING_ENTITIES_COUNT
# Validate entity names
actual_entity_names = {entity["spec"]["name"] for entity in entities}
- assert actual_entity_names == TestConfig.ENTITY_NAMES
+ assert actual_entity_names == RegistryTestConfig.ENTITY_NAMES
# Validate pagination
APITestHelpers.validate_pagination(
- data, TestConfig.CREDIT_SCORING_ENTITIES_COUNT
+ data, RegistryTestConfig.CREDIT_SCORING_ENTITIES_COUNT
)
def test_get_entity(self, feast_rest_client):
"""Test getting a specific entity with detailed validation."""
response = feast_rest_client.get(
- f"/entities/zipcode/?project={TestConfig.CREDIT_SCORING_PROJECT}"
+ f"/entities/zipcode/?project={RegistryTestConfig.CREDIT_SCORING_PROJECT}"
)
data = APITestHelpers.validate_response_success(response)
@@ -178,7 +179,7 @@ def test_get_entity(self, feast_rest_client):
spec["description"]
== "ZIP code identifier for geographic location-based features"
)
- assert spec["tags"] == TestConfig.ZIPCODE_SPEC_TAGS
+ assert spec["tags"] == RegistryTestConfig.ZIPCODE_SPEC_TAGS
# Validate meta
meta = data["meta"]
@@ -215,22 +216,22 @@ def test_entities_all(self, feast_rest_client):
def test_list_data_sources(self, feast_rest_client):
"""Test listing data sources for a specific project."""
response = feast_rest_client.get(
- f"/data_sources/?project={TestConfig.CREDIT_SCORING_PROJECT}"
+ f"/data_sources/?project={RegistryTestConfig.CREDIT_SCORING_PROJECT}"
)
data = APITestHelpers.validate_response_success(response)
assert "dataSources" in data
data_sources = data["dataSources"]
- assert len(data_sources) == TestConfig.CREDIT_SCORING_DATA_SOURCES_COUNT
+ assert len(data_sources) == RegistryTestConfig.CREDIT_SCORING_DATA_SOURCES_COUNT
APITestHelpers.validate_pagination(
- data, TestConfig.CREDIT_SCORING_DATA_SOURCES_COUNT
+ data, RegistryTestConfig.CREDIT_SCORING_DATA_SOURCES_COUNT
)
def test_get_data_sources(self, feast_rest_client):
"""Test getting a specific data source."""
response = feast_rest_client.get(
- f"/data_sources/Zipcode source/?project={TestConfig.CREDIT_SCORING_PROJECT}"
+ f"/data_sources/Zipcode source/?project={RegistryTestConfig.CREDIT_SCORING_PROJECT}"
)
data = APITestHelpers.validate_response_success(response)
@@ -254,7 +255,7 @@ def test_data_sources_all(self, feast_rest_client):
# Validate project associations for relevant data source types
for ds in data_sources:
if ds["type"] in ("BATCH_FILE", "REQUEST_SOURCE"):
- assert ds["project"] in TestConfig.PROJECT_NAMES
+ assert ds["project"] in RegistryTestConfig.PROJECT_NAMES
pagination = data.get("pagination", {})
assert pagination.get("page") == 1
@@ -266,12 +267,15 @@ def test_data_sources_all(self, feast_rest_client):
def test_list_feature_services(self, feast_rest_client):
"""Test listing feature services for a specific project."""
response = feast_rest_client.get(
- f"/feature_services/?project={TestConfig.DRIVER_RANKING_PROJECT}"
+ f"/feature_services/?project={RegistryTestConfig.DRIVER_RANKING_PROJECT}"
)
data = APITestHelpers.validate_response_success(response)
feature_services = data.get("featureServices", [])
- assert len(feature_services) == TestConfig.DRIVER_RANKING_FEATURE_SERVICES_COUNT
+ assert (
+ len(feature_services)
+ == RegistryTestConfig.DRIVER_RANKING_FEATURE_SERVICES_COUNT
+ )
# Validate batch sources in features
for fs in feature_services:
@@ -288,7 +292,7 @@ def test_feature_services_all(self, feast_rest_client):
assert len(feature_services) >= 1
for fs in feature_services:
- assert fs.get("project") in TestConfig.PROJECT_NAMES
+ assert fs.get("project") in RegistryTestConfig.PROJECT_NAMES
# Validate features structure
spec = fs.get("spec", {})
@@ -299,7 +303,7 @@ def test_feature_services_all(self, feast_rest_client):
def test_get_feature_services(self, feast_rest_client):
"""Test getting a specific feature service."""
response = feast_rest_client.get(
- f"/feature_services/driver_activity_v2/?project={TestConfig.DRIVER_RANKING_PROJECT}"
+ f"/feature_services/driver_activity_v2/?project={RegistryTestConfig.DRIVER_RANKING_PROJECT}"
)
data = APITestHelpers.validate_response_success(response)
@@ -313,21 +317,22 @@ def test_get_feature_services(self, feast_rest_client):
def test_list_feature_views(self, feast_rest_client):
"""Test listing feature views for a specific project."""
response = feast_rest_client.get(
- f"/feature_views/?project={TestConfig.CREDIT_SCORING_PROJECT}"
+ f"/feature_views/?project={RegistryTestConfig.CREDIT_SCORING_PROJECT}"
)
data = APITestHelpers.validate_response_success(response)
assert (
- len(data["featureViews"]) == TestConfig.CREDIT_SCORING_FEATURE_VIEWS_COUNT
+ len(data["featureViews"])
+ == RegistryTestConfig.CREDIT_SCORING_FEATURE_VIEWS_COUNT
)
APITestHelpers.validate_pagination(
- data, TestConfig.CREDIT_SCORING_FEATURE_VIEWS_COUNT
+ data, RegistryTestConfig.CREDIT_SCORING_FEATURE_VIEWS_COUNT
)
def test_get_feature_view(self, feast_rest_client):
"""Test getting a specific feature view."""
response = feast_rest_client.get(
- f"/feature_views/credit_history/?project={TestConfig.CREDIT_SCORING_PROJECT}"
+ f"/feature_views/credit_history/?project={RegistryTestConfig.CREDIT_SCORING_PROJECT}"
)
data = APITestHelpers.validate_response_success(response)
@@ -351,26 +356,26 @@ def test_feature_views_all(self, feast_rest_client):
def test_list_features(self, feast_rest_client):
"""Test listing features for a specific project."""
response = feast_rest_client.get(
- f"/features/?project={TestConfig.CREDIT_SCORING_PROJECT}&include_relationships=true"
+ f"/features/?project={RegistryTestConfig.CREDIT_SCORING_PROJECT}&include_relationships=true"
)
data = APITestHelpers.validate_response_success(response)
features = data.get("features")
assert isinstance(features, list)
- assert len(features) == TestConfig.CREDIT_SCORING_FEATURES_COUNT
+ assert len(features) == RegistryTestConfig.CREDIT_SCORING_FEATURES_COUNT
# Validate each feature structure
for feature in features:
APITestHelpers.validate_feature_structure(feature)
APITestHelpers.validate_pagination(
- data, TestConfig.CREDIT_SCORING_FEATURES_COUNT
+ data, RegistryTestConfig.CREDIT_SCORING_FEATURES_COUNT
)
def test_get_feature(self, feast_rest_client):
"""Test getting a specific feature."""
response = feast_rest_client.get(
- f"/features/zipcode_features/city/?project={TestConfig.CREDIT_SCORING_PROJECT}&include_relationships=false"
+ f"/features/zipcode_features/city/?project={RegistryTestConfig.CREDIT_SCORING_PROJECT}&include_relationships=false"
)
data = APITestHelpers.validate_response_success(response)
@@ -396,14 +401,17 @@ def test_features_all(self, feast_rest_client):
# Validate expected projects are present
actual_projects = set(f["project"] for f in features)
- assert TestConfig.PROJECT_NAMES.issubset(actual_projects)
+ assert RegistryTestConfig.PROJECT_NAMES.issubset(actual_projects)
APITestHelpers.validate_pagination_all_endpoint(data, "features")
# Project Tests
@pytest.mark.parametrize(
"project_name",
- [TestConfig.CREDIT_SCORING_PROJECT, TestConfig.DRIVER_RANKING_PROJECT],
+ [
+ RegistryTestConfig.CREDIT_SCORING_PROJECT,
+ RegistryTestConfig.DRIVER_RANKING_PROJECT,
+ ],
)
def test_get_project_by_name(self, feast_rest_client, project_name):
"""Test getting a project by name."""
@@ -420,13 +428,13 @@ def test_get_projects_list(self, feast_rest_client):
assert len(projects) == 2
actual_project_names = [project["spec"]["name"] for project in projects]
- assert set(actual_project_names) == TestConfig.PROJECT_NAMES
+ assert set(actual_project_names) == RegistryTestConfig.PROJECT_NAMES
# Lineage Tests
def test_get_registry_lineage(self, feast_rest_client):
"""Test getting registry lineage for a specific project."""
response = feast_rest_client.get(
- f"/lineage/registry?project={TestConfig.CREDIT_SCORING_PROJECT}"
+ f"/lineage/registry?project={RegistryTestConfig.CREDIT_SCORING_PROJECT}"
)
data = APITestHelpers.validate_response_success(response)
@@ -448,11 +456,11 @@ def test_get_registry_lineage(self, feast_rest_client):
def test_get_lineage_complete(self, feast_rest_client):
"""Test getting complete lineage for a specific project."""
response = feast_rest_client.get(
- f"/lineage/complete?project={TestConfig.CREDIT_SCORING_PROJECT}"
+ f"/lineage/complete?project={RegistryTestConfig.CREDIT_SCORING_PROJECT}"
)
data = APITestHelpers.validate_response_success(response)
- assert data.get("project") == TestConfig.CREDIT_SCORING_PROJECT
+ assert data.get("project") == RegistryTestConfig.CREDIT_SCORING_PROJECT
assert "objects" in data
objects = data["objects"]
@@ -511,12 +519,12 @@ def test_get_registry_complete_all(self, feast_rest_client):
assert len(data["projects"]) > 0
project_names = [project["project"] for project in data.get("projects", [])]
- assert TestConfig.CREDIT_SCORING_PROJECT in project_names
+ assert RegistryTestConfig.CREDIT_SCORING_PROJECT in project_names
def test_get_lineage_object_path(self, feast_rest_client):
"""Test getting lineage for a specific object."""
response = feast_rest_client.get(
- f"/lineage/objects/entity/dob_ssn?project={TestConfig.CREDIT_SCORING_PROJECT}"
+ f"/lineage/objects/entity/dob_ssn?project={RegistryTestConfig.CREDIT_SCORING_PROJECT}"
)
data = APITestHelpers.validate_response_success(response)
@@ -541,7 +549,7 @@ def test_get_lineage_object_path(self, feast_rest_client):
def test_saved_datasets_endpoints(self, feast_rest_client, endpoint, key):
"""Test saved datasets endpoints with parameterization."""
if endpoint == "/saved_datasets":
- url = f"{endpoint}?project={TestConfig.CREDIT_SCORING_PROJECT}&include_relationships=false"
+ url = f"{endpoint}?project={RegistryTestConfig.CREDIT_SCORING_PROJECT}&include_relationships=false"
else:
url = f"{endpoint}?allow_cache=true&page=1&limit=50&sort_order=asc&include_relationships=false"
@@ -555,11 +563,13 @@ def test_saved_datasets_endpoints(self, feast_rest_client, endpoint, key):
# Extract and validate names
actual_names = [ds["spec"]["name"] for ds in saved_datasets]
APITestHelpers.validate_names_match(
- actual_names, TestConfig.SAVED_DATASET_NAMES
+ actual_names, RegistryTestConfig.SAVED_DATASET_NAMES
)
# Validate pagination
- APITestHelpers.validate_pagination(data, TestConfig.SAVED_DATASETS_COUNT)
+ APITestHelpers.validate_pagination(
+ data, RegistryTestConfig.SAVED_DATASETS_COUNT
+ )
if endpoint == "/saved_datasets/all":
assert data["pagination"]["page"] == 1
assert data["pagination"]["limit"] == 50
@@ -568,7 +578,7 @@ def test_get_saved_datasets_by_name(self, feast_rest_client):
"""Test getting a specific saved dataset by name."""
dataset_name = "comprehensive_credit_dataset_v1"
response = feast_rest_client.get(
- f"/saved_datasets/{dataset_name}?project={TestConfig.CREDIT_SCORING_PROJECT}&include_relationships=false"
+ f"/saved_datasets/{dataset_name}?project={RegistryTestConfig.CREDIT_SCORING_PROJECT}&include_relationships=false"
)
data = APITestHelpers.validate_response_success(response)
@@ -580,14 +590,14 @@ def test_get_saved_datasets_by_name(self, feast_rest_client):
def test_get_permission_by_name(self, feast_rest_client):
"""Test getting a specific permission by name."""
response = feast_rest_client.get(
- f"/permissions/feast_admin_permission?project={TestConfig.CREDIT_SCORING_PROJECT}&include_relationships=false"
+ f"/permissions/feast_admin_permission?project={RegistryTestConfig.CREDIT_SCORING_PROJECT}&include_relationships=false"
)
APITestHelpers.validate_response_success(response)
def test_list_permissions(self, feast_rest_client):
"""Test listing permissions for a specific project."""
response = feast_rest_client.get(
- f"/permissions?project={TestConfig.CREDIT_SCORING_PROJECT}&include_relationships=false"
+ f"/permissions?project={RegistryTestConfig.CREDIT_SCORING_PROJECT}&include_relationships=false"
)
data = APITestHelpers.validate_response_success(response)
@@ -595,9 +605,9 @@ def test_list_permissions(self, feast_rest_client):
# Extract and validate names
actual_names = [ds["spec"]["name"] for ds in data["permissions"]]
- assert len(actual_names) == len(TestConfig.PERMISSION_NAMES)
+ assert len(actual_names) == len(RegistryTestConfig.PERMISSION_NAMES)
- for name in TestConfig.PERMISSION_NAMES:
+ for name in RegistryTestConfig.PERMISSION_NAMES:
assert name in actual_names
- APITestHelpers.validate_pagination(data, TestConfig.PERMISSIONS_COUNT)
+ APITestHelpers.validate_pagination(data, RegistryTestConfig.PERMISSIONS_COUNT)
From b8d75625ee0ff56cb80c3f06a879bcccbb6d64a8 Mon Sep 17 00:00:00 2001
From: Srihari
Date: Mon, 5 Jan 2026 19:26:26 +0530
Subject: [PATCH 17/26] test: Remove e2e_rhoai package tests
Signed-off-by: Srihari
---
.../test/e2e_rhoai/e2e_suite_test.go | 32 --
.../test/e2e_rhoai/feast_postupgrade_test.go | 56 --
.../test/e2e_rhoai/feast_preupgrade_test.go | 74 ---
.../feast_wb_connection_integration_test.go | 168 ------
.../test/e2e_rhoai/feast_wb_milvus_test.go | 65 ---
.../feast_wb_ray_offline_store_test.go | 82 ---
.../test/e2e_rhoai/resources/custom-nb.yaml | 92 ----
.../feast-wb-connection-credit-scoring.ipynb | 416 --------------
.../resources/feast-wb-milvus-test.ipynb | 481 ----------------
.../resources/feast-wb-ray-test.ipynb | 516 ------------------
.../e2e_rhoai/resources/feast_kube_auth.yaml | 74 ---
.../resources/feature_repo/__init__.py | 0
.../resources/feature_repo/example_repo.py | 42 --
.../resources/feature_repo/feature_store.yaml | 16 -
.../resources/kueue_resources_setup.yaml | 31 --
.../test/e2e_rhoai/resources/permissions.py | 19 -
.../test/e2e_rhoai/resources/pvc.yaml | 10 -
.../test/utils/notebook_util.go | 387 -------------
infra/feast-operator/test/utils/test_util.go | 172 ------
19 files changed, 2733 deletions(-)
delete mode 100644 infra/feast-operator/test/e2e_rhoai/e2e_suite_test.go
delete mode 100644 infra/feast-operator/test/e2e_rhoai/feast_postupgrade_test.go
delete mode 100644 infra/feast-operator/test/e2e_rhoai/feast_preupgrade_test.go
delete mode 100644 infra/feast-operator/test/e2e_rhoai/feast_wb_connection_integration_test.go
delete mode 100644 infra/feast-operator/test/e2e_rhoai/feast_wb_milvus_test.go
delete mode 100644 infra/feast-operator/test/e2e_rhoai/feast_wb_ray_offline_store_test.go
delete mode 100644 infra/feast-operator/test/e2e_rhoai/resources/custom-nb.yaml
delete mode 100755 infra/feast-operator/test/e2e_rhoai/resources/feast-wb-connection-credit-scoring.ipynb
delete mode 100755 infra/feast-operator/test/e2e_rhoai/resources/feast-wb-milvus-test.ipynb
delete mode 100644 infra/feast-operator/test/e2e_rhoai/resources/feast-wb-ray-test.ipynb
delete mode 100644 infra/feast-operator/test/e2e_rhoai/resources/feast_kube_auth.yaml
delete mode 100644 infra/feast-operator/test/e2e_rhoai/resources/feature_repo/__init__.py
delete mode 100755 infra/feast-operator/test/e2e_rhoai/resources/feature_repo/example_repo.py
delete mode 100755 infra/feast-operator/test/e2e_rhoai/resources/feature_repo/feature_store.yaml
delete mode 100644 infra/feast-operator/test/e2e_rhoai/resources/kueue_resources_setup.yaml
delete mode 100644 infra/feast-operator/test/e2e_rhoai/resources/permissions.py
delete mode 100644 infra/feast-operator/test/e2e_rhoai/resources/pvc.yaml
delete mode 100644 infra/feast-operator/test/utils/notebook_util.go
diff --git a/infra/feast-operator/test/e2e_rhoai/e2e_suite_test.go b/infra/feast-operator/test/e2e_rhoai/e2e_suite_test.go
deleted file mode 100644
index 86750f36e4f..00000000000
--- a/infra/feast-operator/test/e2e_rhoai/e2e_suite_test.go
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
-Copyright 2025 Feast Community.
-
-Licensed 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.
-*/
-
-package e2erhoai
-
-import (
- "fmt"
- "testing"
-
- . "github.com/onsi/ginkgo/v2"
- . "github.com/onsi/gomega"
-)
-
-// Run e2e feast Notebook tests using the Ginkgo runner.
-func TestNotebookRunE2E(t *testing.T) {
- RegisterFailHandler(Fail)
- _, _ = fmt.Fprintf(GinkgoWriter, "Feast Jupyter Notebook Test suite\n")
- RunSpecs(t, "e2erhoai Feast Notebook test suite")
-}
diff --git a/infra/feast-operator/test/e2e_rhoai/feast_postupgrade_test.go b/infra/feast-operator/test/e2e_rhoai/feast_postupgrade_test.go
deleted file mode 100644
index d8d091a44b8..00000000000
--- a/infra/feast-operator/test/e2e_rhoai/feast_postupgrade_test.go
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
-Copyright 2025 Feast Community.
-
-Licensed 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.
-*/
-
-package e2erhoai
-
-import (
- "fmt"
-
- . "github.com/feast-dev/feast/infra/feast-operator/test/utils"
- . "github.com/onsi/ginkgo/v2"
- . "github.com/onsi/gomega"
-)
-
-var _ = Describe("Feast PostUpgrade scenario Testing", Ordered, func() {
- const (
- namespace = "test-ns-feast-upgrade"
- testDir = "/test/e2e_rhoai"
- feastDeploymentName = FeastPrefix + "credit-scoring"
- feastCRName = "credit-scoring"
- )
-
- AfterAll(func() {
- By(fmt.Sprintf("Deleting test namespace: %s", namespace))
- Expect(DeleteNamespace(namespace, testDir)).To(Succeed())
- fmt.Printf("Namespace %s deleted successfully\n", namespace)
- })
- runPostUpgradeTest := func() {
- By("Verify Feature Store CR is in Ready state")
- ValidateFeatureStoreCRStatus(namespace, feastCRName)
-
- By("Running `feast apply` and `feast materialize-incremental` to validate registry definitions")
- VerifyApplyFeatureStoreDefinitions(namespace, feastCRName, feastDeploymentName)
-
- By("Validating Feast entity, feature, and feature view presence")
- VerifyFeastMethods(namespace, feastDeploymentName, testDir)
- }
-
- // This context verifies that a pre-created Feast FeatureStore CR continues to function as expected
- // after an upgrade. It validates `feast apply`, registry sync, feature retrieval, and model execution.
- Context("Feast post Upgrade Test", func() {
- It("Should create and run a feastPostUpgrade test scenario feast apply and materialize functionality successfully", runPostUpgradeTest)
- })
-})
diff --git a/infra/feast-operator/test/e2e_rhoai/feast_preupgrade_test.go b/infra/feast-operator/test/e2e_rhoai/feast_preupgrade_test.go
deleted file mode 100644
index 680d79812fe..00000000000
--- a/infra/feast-operator/test/e2e_rhoai/feast_preupgrade_test.go
+++ /dev/null
@@ -1,74 +0,0 @@
-/*
-Copyright 2025 Feast Community.
-
-Licensed 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.
-*/
-
-package e2erhoai
-
-import (
- "fmt"
-
- . "github.com/feast-dev/feast/infra/feast-operator/test/utils"
- . "github.com/onsi/ginkgo/v2"
- . "github.com/onsi/gomega"
-)
-
-var _ = Describe("Feast PreUpgrade scenario Testing", Ordered, func() {
- const (
- namespace = "test-ns-feast-upgrade"
- replaceNamespace = "test-ns-feast"
- testDir = "/test/e2e_rhoai"
- feastDeploymentName = FeastPrefix + "credit-scoring"
- feastCRName = "credit-scoring"
- )
-
- filesToUpdateNamespace := []string{
- "test/testdata/feast_integration_test_crs/postgres.yaml",
- "test/testdata/feast_integration_test_crs/redis.yaml",
- "test/testdata/feast_integration_test_crs/feast.yaml",
- }
-
- BeforeAll(func() {
- By(fmt.Sprintf("Creating test namespace: %s", namespace))
- Expect(CreateNamespace(namespace, testDir)).To(Succeed())
- fmt.Printf("Namespace %s created successfully\n", namespace)
-
- By("Replacing placeholder namespace in CR YAMLs for test setup")
- Expect(ReplaceNamespaceInYamlFilesInPlace(filesToUpdateNamespace, replaceNamespace, namespace)).To(Succeed())
- })
-
- AfterAll(func() {
- By("Restoring original namespace in CR YAMLs")
- Expect(ReplaceNamespaceInYamlFilesInPlace(filesToUpdateNamespace, namespace, replaceNamespace)).To(Succeed())
-
- if CurrentSpecReport().Failed() {
- By(fmt.Sprintf("Deleting test namespace: %s", namespace))
- Expect(DeleteNamespace(namespace, testDir)).To(Succeed())
- fmt.Printf("Namespace %s deleted successfully\n", namespace)
- }
- })
-
- runPreUpgradeTest := func() {
- By("Applying Feast infra manifests and verifying setup")
- ApplyFeastInfraManifestsAndVerify(namespace, testDir)
-
- By("Applying and validating the credit-scoring FeatureStore CR")
- ApplyFeastYamlAndVerify(namespace, testDir, feastDeploymentName, feastCRName, "test/testdata/feast_integration_test_crs/feast.yaml")
- }
-
- // This context ensures the Feast CR setup is functional prior to any upgrade
- Context("Feast Pre Upgrade Test", func() {
- It("Should create and run a feastPreUpgrade test scenario feast credit-scoring CR setup successfully", runPreUpgradeTest)
- })
-})
diff --git a/infra/feast-operator/test/e2e_rhoai/feast_wb_connection_integration_test.go b/infra/feast-operator/test/e2e_rhoai/feast_wb_connection_integration_test.go
deleted file mode 100644
index 43bfff17c2f..00000000000
--- a/infra/feast-operator/test/e2e_rhoai/feast_wb_connection_integration_test.go
+++ /dev/null
@@ -1,168 +0,0 @@
-/*
-Copyright 2025 Feast Community.
-
-Licensed 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.
-*/
-
-// Package e2erhoai provides end-to-end (E2E) test coverage for Feast integration with
-// Red Hat OpenShift AI (RHOAI) environments.
-// This specific test validates the functionality
-// of executing a Feast workbench integration connection with kubernetes auth and without auth successfully
-package e2erhoai
-
-import (
- "fmt"
- "time"
-
- utils "github.com/feast-dev/feast/infra/feast-operator/test/utils"
- . "github.com/onsi/ginkgo/v2"
- . "github.com/onsi/gomega"
-)
-
-var _ = Describe("Feast Workbench Integration Connection Testing", Ordered, func() {
- const (
- namespace = "test-ns-feast"
- configMapName = "feast-wb-cm"
- rolebindingName = "rb-feast-test"
- notebookFile = "test/e2e_rhoai/resources/feast-wb-connection-credit-scoring.ipynb"
- pvcFile = "test/e2e_rhoai/resources/pvc.yaml"
- permissionFile = "test/e2e_rhoai/resources/permissions.py"
- notebookPVC = "jupyterhub-nb-kube-3aadmin-pvc"
- testDir = "/test/e2e_rhoai"
- notebookName = "feast-wb-connection-credit-scoring.ipynb"
- feastDeploymentName = utils.FeastPrefix + "credit-scoring"
- feastCRName = "credit-scoring"
- )
-
- // Verify feast ConfigMap
- verifyFeastConfigMap := func(authEnabled bool) {
- feastConfigMapName := "jupyter-nb-kube-3aadmin-feast-config"
- configMapKey := "credit_scoring_local"
- By(fmt.Sprintf("Listing ConfigMaps and verifying %s exists with correct content", feastConfigMapName))
-
- // Build expected content based on auth type
- expectedContent := []string{
- "project: credit_scoring_local",
- }
- if authEnabled {
- expectedContent = append(expectedContent, "type: kubernetes")
- } else {
- expectedContent = append(expectedContent, "type: no_auth")
- }
-
- // First, list ConfigMaps and check if target ConfigMap exists
- // Retry with polling since the ConfigMap may be created asynchronously
- const maxRetries = 5
- const retryInterval = 5 * time.Second
- var configMapExists bool
- var err error
-
- for i := 0; i < maxRetries; i++ {
- exists, listErr := utils.VerifyConfigMapExistsInList(namespace, feastConfigMapName)
- if listErr != nil {
- err = listErr
- if i < maxRetries-1 {
- fmt.Printf("Failed to list ConfigMaps, retrying in %v... (attempt %d/%d)\n", retryInterval, i+1, maxRetries)
- time.Sleep(retryInterval)
- continue
- }
- } else if exists {
- configMapExists = true
- fmt.Printf("ConfigMap %s found in ConfigMap list\n", feastConfigMapName)
- break
- }
-
- if i < maxRetries-1 {
- fmt.Printf("ConfigMap %s not found in list yet, retrying in %v... (attempt %d/%d)\n", feastConfigMapName, retryInterval, i+1, maxRetries)
- time.Sleep(retryInterval)
- }
- }
-
- if !configMapExists {
- Expect(err).ToNot(HaveOccurred(), fmt.Sprintf("Failed to find ConfigMap %s in ConfigMap list after %d attempts: %v", feastConfigMapName, maxRetries, err))
- }
-
- // Once ConfigMap exists in list, verify content (project name and auth type)
- err = utils.VerifyFeastConfigMapContent(namespace, feastConfigMapName, configMapKey, expectedContent)
- Expect(err).ToNot(HaveOccurred(), fmt.Sprintf("Failed to verify Feast ConfigMap %s content: %v", feastConfigMapName, err))
- fmt.Printf("Feast ConfigMap %s verified successfully with project and auth type\n", feastConfigMapName)
- }
-
- // Parameterized test function that handles both auth and non-auth scenarios
- runFeastWorkbenchIntegration := func(authEnabled bool) {
- // Apply permissions only if auth is enabled
- if authEnabled {
- By("Applying Feast permissions for kubernetes authenticated scenario")
- utils.ApplyFeastPermissions(permissionFile, "/feast-data/credit_scoring_local/feature_repo/permissions.py", namespace, feastDeploymentName)
- }
-
- // Create notebook with all setup steps
- // Pass feastProject parameter to set the opendatahub.io/feast-config annotation
- utils.CreateNotebookTest(namespace, configMapName, notebookFile, "test/e2e_rhoai/resources/feature_repo", pvcFile, rolebindingName, notebookPVC, notebookName, testDir, "credit_scoring_local")
-
- // Verify Feast ConfigMap was created with correct auth type
- verifyFeastConfigMap(authEnabled)
-
- // Monitor notebook execution
- utils.MonitorNotebookTest(namespace, notebookName)
- }
-
- BeforeAll(func() {
- By(fmt.Sprintf("Creating test namespace: %s", namespace))
- Expect(utils.CreateNamespace(namespace, testDir)).To(Succeed())
- fmt.Printf("Namespace %s created successfully\n", namespace)
-
- By("Applying Feast infra manifests and verifying setup")
- utils.ApplyFeastInfraManifestsAndVerify(namespace, testDir)
- })
-
- AfterAll(func() {
- By(fmt.Sprintf("Deleting test namespace: %s", namespace))
- Expect(utils.DeleteNamespace(namespace, testDir)).To(Succeed())
- fmt.Printf("Namespace %s deleted successfully\n", namespace)
- })
-
- Context("Feast Workbench Integration Tests - Without Auth", func() {
- BeforeEach(func() {
- By("Applying and validating the credit-scoring FeatureStore CR without auth")
- utils.ApplyFeastYamlAndVerify(namespace, testDir, feastDeploymentName, feastCRName, "test/testdata/feast_integration_test_crs/feast.yaml")
-
- By("Verify Feature Store CR is in Ready state")
- utils.ValidateFeatureStoreCRStatus(namespace, feastCRName)
-
- By("Running `feast apply` and `feast materialize-incremental` to validate registry definitions")
- utils.VerifyApplyFeatureStoreDefinitions(namespace, feastCRName, feastDeploymentName)
- })
-
- It("Should create and run a FeastWorkbenchIntegrationWithoutAuth scenario successfully", func() {
- runFeastWorkbenchIntegration(false)
- })
- })
-
- Context("Feast Workbench Integration Tests - With Auth", func() {
- BeforeEach(func() {
- By("Applying and validating the credit-scoring FeatureStore CR (with auth)")
- utils.ApplyFeastYamlAndVerify(namespace, testDir, feastDeploymentName, feastCRName, "test/e2e_rhoai/resources/feast_kube_auth.yaml")
-
- By("Verify Feature Store CR is in Ready state")
- utils.ValidateFeatureStoreCRStatus(namespace, feastCRName)
-
- By("Running `feast apply` and `feast materialize-incremental` to validate registry definitions")
- utils.VerifyApplyFeatureStoreDefinitions(namespace, feastCRName, feastDeploymentName)
- })
-
- It("Should create and run a FeastWorkbenchIntegrationWithAuth scenario successfully", func() {
- runFeastWorkbenchIntegration(true)
- })
- })
-})
diff --git a/infra/feast-operator/test/e2e_rhoai/feast_wb_milvus_test.go b/infra/feast-operator/test/e2e_rhoai/feast_wb_milvus_test.go
deleted file mode 100644
index b4e1d37b827..00000000000
--- a/infra/feast-operator/test/e2e_rhoai/feast_wb_milvus_test.go
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
-Copyright 2025 Feast Community.
-
-Licensed 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.
-*/
-
-// Package e2erhoai provides end-to-end (E2E) test coverage for Feast integration with
-// Red Hat OpenShift AI (RHOAI) environments. This specific test validates the functionality
-// of executing a Feast Jupyter notebook within a fully configured OpenShift namespace
-package e2erhoai
-
-import (
- "fmt"
-
- utils "github.com/feast-dev/feast/infra/feast-operator/test/utils"
- . "github.com/onsi/ginkgo/v2"
- . "github.com/onsi/gomega"
-)
-
-var _ = Describe("Feast Jupyter Notebook Testing", Ordered, func() {
- const (
- namespace = "test-ns-feast-wb"
- configMapName = "feast-wb-cm"
- rolebindingName = "rb-feast-test"
- notebookFile = "test/e2e_rhoai/resources/feast-wb-milvus-test.ipynb"
- pvcFile = "test/e2e_rhoai/resources/pvc.yaml"
- notebookPVC = "jupyterhub-nb-kube-3aadmin-pvc"
- testDir = "/test/e2e_rhoai"
- notebookName = "feast-wb-milvus-test.ipynb"
- feastMilvusTest = "TestFeastMilvusNotebook"
- )
-
- BeforeAll(func() {
- By(fmt.Sprintf("Creating test namespace: %s", namespace))
- Expect(utils.CreateNamespace(namespace, testDir)).To(Succeed())
- fmt.Printf("Namespace %s created successfully\n", namespace)
- })
-
- AfterAll(func() {
- By(fmt.Sprintf("Deleting test namespace: %s", namespace))
- Expect(utils.DeleteNamespace(namespace, testDir)).To(Succeed())
- fmt.Printf("Namespace %s deleted successfully\n", namespace)
- })
-
- Context("Feast Jupyter Notebook Test", func() {
- It("Should create and run a "+feastMilvusTest+" successfully", func() {
- // Create notebook with all setup steps
- // Pass empty string for feastProject to keep annotation empty
- utils.CreateNotebookTest(namespace, configMapName, notebookFile, "test/e2e_rhoai/resources/feature_repo", pvcFile, rolebindingName, notebookPVC, notebookName, testDir, "")
-
- // Monitor notebook execution
- utils.MonitorNotebookTest(namespace, notebookName)
- })
- })
-})
diff --git a/infra/feast-operator/test/e2e_rhoai/feast_wb_ray_offline_store_test.go b/infra/feast-operator/test/e2e_rhoai/feast_wb_ray_offline_store_test.go
deleted file mode 100644
index eb467ad07ff..00000000000
--- a/infra/feast-operator/test/e2e_rhoai/feast_wb_ray_offline_store_test.go
+++ /dev/null
@@ -1,82 +0,0 @@
-/*
-Copyright 2025 Feast Community.
-
-Licensed 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.
-*/
-
-// Package e2erhoai provides end-to-end (E2E) test coverage for Feast integration with
-// Red Hat OpenShift AI (RHOAI) environments. This specific test validates the functionality
-// of executing a Feast Jupyter notebook with Ray offline store within a fully configured OpenShift namespace
-package e2erhoai
-
-import (
- "fmt"
- "os/exec"
-
- utils "github.com/feast-dev/feast/infra/feast-operator/test/utils"
- . "github.com/onsi/ginkgo/v2"
- . "github.com/onsi/gomega"
-)
-
-var _ = Describe("Feast Jupyter Notebook Testing with Ray Offline Store", Ordered, func() {
- const (
- namespace = "test-ns-feast-wb-ray"
- configMapName = "feast-wb-ray-cm"
- rolebindingName = "rb-feast-ray-test"
- notebookFile = "test/e2e_rhoai/resources/feast-wb-ray-test.ipynb"
- pvcFile = "test/e2e_rhoai/resources/pvc.yaml"
- kueueResourcesFile = "test/e2e_rhoai/resources/kueue_resources_setup.yaml"
- notebookPVC = "jupyterhub-nb-kube-3aadmin-pvc"
- testDir = "/test/e2e_rhoai"
- notebookName = "feast-wb-ray-test.ipynb"
- feastRayTest = "TestFeastRayOfflineStoreNotebook"
- )
-
- BeforeAll(func() {
- By(fmt.Sprintf("Creating test namespace: %s", namespace))
- Expect(utils.CreateNamespace(namespace, testDir)).To(Succeed())
- fmt.Printf("Namespace %s created successfully\n", namespace)
-
- By("Applying Kueue resources setup")
- // Apply with namespace flag - cluster-scoped resources (ResourceFlavor, ClusterQueue) will be applied at cluster level,
- // and namespace-scoped resources (LocalQueue) will be applied in the specified namespace
- cmd := exec.Command("kubectl", "apply", "-f", kueueResourcesFile, "-n", namespace)
- output, err := utils.Run(cmd, testDir)
- Expect(err).ToNot(HaveOccurred(), fmt.Sprintf("Failed to apply Kueue resources: %v\nOutput: %s", err, output))
- fmt.Printf("Kueue resources applied successfully\n")
- })
-
- AfterAll(func() {
- By("Deleting Kueue resources")
- // Delete with namespace flag - will delete namespace-scoped resources from the namespace
- // and cluster-scoped resources from the cluster
- cmd := exec.Command("kubectl", "delete", "-f", kueueResourcesFile, "-n", namespace, "--ignore-not-found=true")
- _, _ = utils.Run(cmd, testDir)
- fmt.Printf("Kueue resources cleanup completed\n")
-
- By(fmt.Sprintf("Deleting test namespace: %s", namespace))
- Expect(utils.DeleteNamespace(namespace, testDir)).To(Succeed())
- fmt.Printf("Namespace %s deleted successfully\n", namespace)
- })
-
- Context("Feast Jupyter Notebook Test with Ray Offline store", func() {
- It("Should create and run a "+feastRayTest+" successfully", func() {
- // Create notebook with all setup steps
- // Pass empty string for feastProject to keep annotation empty
- utils.CreateNotebookTest(namespace, configMapName, notebookFile, "test/e2e_rhoai/resources/feature_repo", pvcFile, rolebindingName, notebookPVC, notebookName, testDir, "")
-
- // Monitor notebook execution
- utils.MonitorNotebookTest(namespace, notebookName)
- })
- })
-})
diff --git a/infra/feast-operator/test/e2e_rhoai/resources/custom-nb.yaml b/infra/feast-operator/test/e2e_rhoai/resources/custom-nb.yaml
deleted file mode 100644
index 6dd9304e4b9..00000000000
--- a/infra/feast-operator/test/e2e_rhoai/resources/custom-nb.yaml
+++ /dev/null
@@ -1,92 +0,0 @@
-# This template maybe used to spin up a custom notebook image
-# i.e.: sed s/{{.IngressDomain}}/$(oc get ingresses.config/cluster -o jsonpath={.spec.domain})/g tests/resources/custom-nb.template | oc apply -f -
-# resources generated:
-# pod/jupyter-nb-kube-3aadmin-0
-# service/jupyter-nb-kube-3aadmin
-# route.route.openshift.io/jupyter-nb-kube-3aadmin (jupyter-nb-kube-3aadmin-opendatahub.apps.tedbig412.cp.fyre.ibm.com)
-# service/jupyter-nb-kube-3aadmin-tls
-apiVersion: kubeflow.org/v1
-kind: Notebook
-metadata:
- annotations:
- notebooks.opendatahub.io/inject-auth: "true"
- notebooks.opendatahub.io/last-size-selection: Small
- opendatahub.io/link: https://jupyter-nb-kube-3aadmin-{{.Namespace}}.{{.IngressDomain}}/notebook/{{.Namespace}}/jupyter-nb-kube-3aadmin
- opendatahub.io/username: {{.Username}}
- opendatahub.io/feast-config: {{.FeastProject}}
- generation: 1
- labels:
- app: jupyter-nb-kube-3aadmin
- opendatahub.io/dashboard: "true"
- opendatahub.io/odh-managed: "true"
- opendatahub.io/user: {{.Username}}
- opendatahub.io/feast-integration: 'true'
- name: jupyter-nb-kube-3aadmin
- namespace: {{.Namespace}}
-spec:
- template:
- spec:
- affinity:
- nodeAffinity:
- preferredDuringSchedulingIgnoredDuringExecution:
- - preference:
- matchExpressions:
- - key: nvidia.com/gpu.present
- operator: NotIn
- values:
- - "true"
- weight: 1
- containers:
- - env:
- - name: NOTEBOOK_ARGS
- value: |-
- --ServerApp.port=8888
- --ServerApp.token=''
- --ServerApp.password=''
- --ServerApp.base_url=/notebook/test-feast-wb/jupyter-nb-kube-3aadmin
- --ServerApp.quit_button=False
- --ServerApp.tornado_settings={"user":"{{.Username}}","hub_host":"https://odh-dashboard-{{.OpenDataHubNamespace}}.{{.IngressDomain}}","hub_prefix":"/notebookController/{{.Username}}"}
- - name: JUPYTER_IMAGE
- value: {{.NotebookImage}}
- - name: JUPYTER_NOTEBOOK_PORT
- value: "8888"
- - name: PIP_INDEX_URL
- value: {{.PipIndexUrl}}
- - name: PIP_TRUSTED_HOST
- value: {{.PipTrustedHost}}
- - name: FEAST_VERSION
- value: {{.FeastVerison}}
- - name: OPENAI_API_KEY
- value: {{.OpenAIAPIKey}}
- - name: NAMESPACE
- value: {{.Namespace}}
- image: {{.NotebookImage}}
- command: {{.Command}}
- imagePullPolicy: Always
- name: jupyter-nb-kube-3aadmin
- ports:
- - containerPort: 8888
- name: notebook-port
- protocol: TCP
- resources:
- limits:
- cpu: "2"
- memory: 3Gi
- requests:
- cpu: "1"
- memory: 3Gi
- volumeMounts:
- - mountPath: /opt/app-root/src
- name: jupyterhub-nb-kube-3aadmin-pvc
- - mountPath: /opt/app-root/notebooks
- name: {{.NotebookConfigMapName}}
- workingDir: /opt/app-root/src
- enableServiceLinks: false
- serviceAccountName: default
- volumes:
- - name: jupyterhub-nb-kube-3aadmin-pvc
- persistentVolumeClaim:
- claimName: {{.NotebookPVC}}
- - name: {{.NotebookConfigMapName}}
- configMap:
- name: {{.NotebookConfigMapName}}
diff --git a/infra/feast-operator/test/e2e_rhoai/resources/feast-wb-connection-credit-scoring.ipynb b/infra/feast-operator/test/e2e_rhoai/resources/feast-wb-connection-credit-scoring.ipynb
deleted file mode 100755
index 39e1f9c6e37..00000000000
--- a/infra/feast-operator/test/e2e_rhoai/resources/feast-wb-connection-credit-scoring.ipynb
+++ /dev/null
@@ -1,416 +0,0 @@
-{
- "cells": [
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "import os\n",
- "import feast\n",
- "\n",
- "actual_version = feast.__version__\n",
- "assert actual_version == os.environ.get(\"FEAST_VERSION\"), (\n",
- " f\"❌ Feast version mismatch. Expected: {os.environ.get('FEAST_VERSION')}, Found: {actual_version}\"\n",
- ")\n",
- "print(f\"✅ Found Expected Feast version: {actual_version} in workbench\")"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "# --- Configuration Variables ---\n",
- "import os \n",
- "\n",
- "# Fetch token and server directly from oc CLI\n",
- "import subprocess\n",
- "\n",
- "def oc(cmd):\n",
- " return subprocess.check_output(cmd, shell=True).decode(\"utf-8\").strip()\n",
- "\n",
- "token = oc(\"oc whoami -t\")\n",
- "server = oc(\"oc whoami --show-server\")\n",
- "namespace = os.environ.get(\"NAMESPACE\")\n"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "!oc login --token=$token --server=$server"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "# Add user permission to namespace\n",
- "!oc adm policy add-role-to-user admin $(oc whoami) -n $namespace"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "import os\n",
- "\n",
- "namespace = os.environ.get(\"NAMESPACE\") # read namespace from env\n",
- "if not namespace:\n",
- " raise ValueError(\"NAMESPACE environment variable is not set\")\n",
- "\n",
- "yaml_content = os.popen(\n",
- " f\"oc get configmap feast-credit-scoring-client -n {namespace} \"\n",
- " \"-o jsonpath='{.data.feature_store\\\\.yaml}' | sed 's/\\\\\\\\n/\\\\n/g'\"\n",
- ").read()\n",
- "\n",
- "# Save the configmap data into an environment variable (if needed)\n",
- "os.environ[\"CONFIGMAP_DATA\"] = yaml_content"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "from feast import FeatureStore\n",
- "fs_credit_scoring_local = FeatureStore(fs_yaml_file='/opt/app-root/src/feast-config/credit_scoring_local')"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "project_name = \"credit_scoring_local\"\n",
- "project = fs_credit_scoring_local.get_project(project_name)\n",
- "\n",
- "# 1. Assert object returned\n",
- "assert project is not None, f\"❌ get_project('{project_name}') returned None\"\n",
- "\n",
- "# 2. Extract project name (works for dict or Feast object)\n",
- "if isinstance(project, dict):\n",
- " returned_name = project.get(\"spec\", {}).get(\"name\")\n",
- "else:\n",
- " # Feast Project object\n",
- " returned_name = getattr(project, \"name\", None)\n",
- " if not returned_name and hasattr(project, \"spec\") and hasattr(project.spec, \"name\"):\n",
- " returned_name = project.spec.name\n",
- "\n",
- "# 3. Assert that name exists\n",
- "assert returned_name, f\"❌ Returned project does not contain a valid name: {project}\"\n",
- "\n",
- "print(\"• Project Name Returned:\", returned_name)\n",
- "\n",
- "# 4. Assert the name matches expected\n",
- "assert returned_name == project_name, (\n",
- " f\"❌ Expected project '{project_name}', but got '{returned_name}'\"\n",
- ")\n",
- "\n",
- "print(f\"\\n✓ get_project('{project_name}') validation passed!\")\n"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "feast_list_functions = [\n",
- " \"list_projects\",\n",
- " \"list_entities\",\n",
- " \"list_feature_views\",\n",
- " \"list_all_feature_views\",\n",
- " \"list_batch_feature_views\",\n",
- " \"list_on_demand_feature_views\",\n",
- "]\n",
- "\n",
- "# validates feast list methods returns data and method type\n",
- "def validate_list_method(fs_obj, method_name):\n",
- " assert hasattr(fs_obj, method_name), f\"Method not found: {method_name}\"\n",
- "\n",
- " method = getattr(fs_obj, method_name)\n",
- " result = method()\n",
- "\n",
- " assert isinstance(result, list), (\n",
- " f\"{method_name}() must return a list, got {type(result)}\"\n",
- " )\n",
- " assert len(result) > 0, (\n",
- " f\"{method_name}() returned an empty list — expected data\"\n",
- " )\n",
- "\n",
- " print(f\"✓ {method_name}() returned {len(result)} items\")\n",
- "\n",
- "for m in feast_list_functions:\n",
- " validate_list_method(fs_credit_scoring_local, m)\n"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "feast_list_functions = [\n",
- " \"list_feature_services\",\n",
- " # \"list_permissions\",\n",
- " \"list_saved_datasets\",\n",
- "]\n",
- "\n",
- "# validates feast methods exists and type is valid\n",
- "def validate_list_func(fs_obj, method_name):\n",
- " assert hasattr(fs_obj, method_name), f\"Method not found: {method_name}\"\n",
- "\n",
- " method = getattr(fs_obj, method_name)\n",
- "\n",
- " result = method()\n",
- "\n",
- " assert isinstance(result, list), (\n",
- " f\"{method_name}() must return a list, got {type(result)}\"\n",
- " )\n",
- "\n",
- "for m in feast_list_functions:\n",
- " validate_list_func(fs_credit_scoring_local, m)"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "# validate_list_data_sources for with and without permissions \n",
- "\n",
- "import os\n",
- "from feast.errors import FeastPermissionError\n",
- "\n",
- "def validate_list_data_sources(fs_obj):\n",
- " \"\"\"\n",
- " Validates list_data_sources() with special handling for Kubernetes auth mode.\n",
- " If CONFIGMAP_DATA indicates auth=kubernetes, expect FeastPermissionError.\n",
- " Otherwise validate output type normally.\n",
- " \"\"\"\n",
- " auth_mode = os.getenv(\"CONFIGMAP_DATA\")\n",
- "\n",
- " # Case 1: Kubernetes auth → expect permission error\n",
- " if \"kubernetes\" in auth_mode.lower():\n",
- " try:\n",
- " fs_obj.list_data_sources()\n",
- " raise AssertionError(\n",
- " \"Expected FeastPermissionError due to Kubernetes auth, but the call succeeded.\"\n",
- " )\n",
- " except FeastPermissionError as e:\n",
- " # Correct, this is expected\n",
- " return\n",
- " except Exception as e:\n",
- " raise AssertionError(\n",
- " f\"Expected FeastPermissionError, but got different exception: {type(e)} - {e}\"\n",
- " )\n",
- "\n",
- " # Case 2: Non-Kubernetes auth → normal path\n",
- " assert hasattr(fs_obj, \"list_data_sources\"), \"Method not found: list_data_sources\"\n",
- " result = fs_obj.list_data_sources()\n",
- " assert isinstance(result, list), (\n",
- " f\"list_data_sources() must return a list, got {type(result)}\"\n",
- " )\n"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "\n",
- "entity = fs_credit_scoring_local.get_entity(\"dob_ssn\")\n",
- "\n",
- "assert entity is not None, \"❌ Entity 'dob_ssn' not found!\"\n",
- "assert entity.name == \"dob_ssn\", f\"❌ Entity name mismatch: {entity.name}\"\n",
- "\n",
- "print(\"✓ Entity validation successful!\\n\", entity.name)"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "\n",
- "fv = fs_credit_scoring_local.get_feature_view(\"credit_history\")\n",
- "\n",
- "assert fv is not None, \"❌ FeatureView 'credit_history' not found!\"\n",
- "assert fv.name == \"credit_history\", f\"❌ Name mismatch: {fv.name}\"\n",
- "\n",
- "print(\"• FeatureView : validation successful!\", fv.name)"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "import os\n",
- "from feast.errors import FeastPermissionError\n",
- "\n",
- "def validate_get_data_source(fs_obj, name: str):\n",
- " auth_mode = os.getenv(\"CONFIGMAP_DATA\", \"\")\n",
- "\n",
- " print(\"📌 CONFIGMAP_DATA:\", auth_mode)\n",
- "\n",
- " # If Kubernetes auth is enabled → expect permission error\n",
- " if \"auth\" in \"kubernetes\" in auth_mode.lower():\n",
- " print(f\"🔒 Kubernetes auth detected, expecting permission error for get_data_source('{name}')\")\n",
- "\n",
- " try:\n",
- " fs_obj.get_data_source(name)\n",
- " raise AssertionError(\n",
- " f\"❌ Expected FeastPermissionError when accessing data source '{name}', but call succeeded\"\n",
- " )\n",
- "\n",
- " except FeastPermissionError as e:\n",
- " print(f\"✅ Correctly blocked with FeastPermissionError: {e}\")\n",
- " return\n",
- "\n",
- " except Exception as e:\n",
- " raise AssertionError(\n",
- " f\"❌ Expected FeastPermissionError but got {type(e)}: {e}\"\n",
- " )\n",
- "\n",
- " # Otherwise → normal validation\n",
- " print(f\"🔍 Fetching data source '{name}'...\")\n",
- "\n",
- " ds = fs_obj.get_data_source(name)\n",
- "\n",
- " print(\"\\n📌 Data Source Object:\")\n",
- " print(ds)\n",
- "\n",
- " assert ds.name == name, (\n",
- " f\"❌ Expected name '{name}', got '{ds.name}'\"\n",
- " )\n",
- "\n",
- " print(f\"✅ Data source '{name}' exists and is correctly configured.\")\n"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "feast_features = [\n",
- " \"zipcode_features:city\",\n",
- " \"zipcode_features:state\",\n",
- "]\n",
- "\n",
- "entity_rows = [{\n",
- " \"zipcode\": 1463,\n",
- " \"dob_ssn\": \"19530219_5179\"\n",
- "}]\n",
- "\n",
- "response = fs_credit_scoring_local.get_online_features(\n",
- " features=feast_features,\n",
- " entity_rows=entity_rows,\n",
- ").to_dict()\n",
- "\n",
- "print(\"Actual response:\", response)\n",
- "\n",
- "expected = {\n",
- " 'zipcode': [1463],\n",
- " 'dob_ssn': ['19530219_5179'],\n",
- " 'city': ['PEPPERELL'],\n",
- " 'state': ['MA'],\n",
- "}\n",
- "\n",
- "assert response == expected"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "import pandas as pd\n",
- "\n",
- "# Input entity dataframe\n",
- "entity_df = pd.DataFrame({\n",
- " \"dob_ssn\": [\"19530219_5179\"],\n",
- " \"zipcode\": [1463],\n",
- " \"event_timestamp\": [pd.Timestamp(\"2020-04-26 18:01:04\")]\n",
- "})\n",
- "\n",
- "feast_features = [\n",
- " \"zipcode_features:city\",\n",
- " \"zipcode_features:state\",\n",
- " \"credit_history:credit_card_due\",\n",
- " \"credit_history:mortgage_due\",\n",
- "]\n",
- "\n",
- "# Retrieve historical features\n",
- "historical_df = fs_credit_scoring_local.get_historical_features(\n",
- " entity_df=entity_df,\n",
- " features=feast_features,\n",
- ").to_df()\n",
- "\n",
- "print(\"Historical DF:\\n\", historical_df)\n",
- "\n",
- "# Validate dataframe is not empty\n",
- "assert not historical_df.empty, \" Historical features dataframe is empty!\"\n",
- "\n",
- "# 2. Validate required columns exist\n",
- "expected_cols = {\n",
- " \"dob_ssn\", \"zipcode\", \"event_timestamp\",\n",
- " \"city\", \"state\",\n",
- " \"credit_card_due\", \"mortgage_due\"\n",
- "}\n",
- "\n",
- "missing_cols = expected_cols - set(historical_df.columns)\n",
- "assert not missing_cols, f\" Missing columns in result: {missing_cols}\"\n",
- "\n",
- "# 3. Validate city/state are non-null (critical features)\n",
- "assert pd.notna(historical_df.loc[0, \"city\"]), \" 'city' value is null!\"\n",
- "assert pd.notna(historical_df.loc[0, \"state\"]), \" 'state' value is null!\"\n",
- "\n",
- "# 4. Validate entity matches input\n",
- "assert historical_df.loc[0, \"zipcode\"] == 1463, \" zipcode mismatch!\"\n",
- "assert historical_df.loc[0, \"dob_ssn\"] == \"19530219_5179\", \"❌ dob_ssn mismatch!\"\n",
- "\n",
- "print(\"✅ All validations passed successfully!\")\n"
- ]
- }
- ],
- "metadata": {
- "kernelspec": {
- "display_name": "Python 3",
- "language": "python",
- "name": "python3"
- },
- "language_info": {
- "codemirror_mode": {
- "name": "ipython",
- "version": 3
- },
- "file_extension": ".py",
- "mimetype": "text/x-python",
- "name": "python",
- "nbconvert_exporter": "python",
- "pygments_lexer": "ipython3",
- "version": "3.11.5"
- },
- "orig_nbformat": 4
- },
- "nbformat": 4,
- "nbformat_minor": 2
-}
diff --git a/infra/feast-operator/test/e2e_rhoai/resources/feast-wb-milvus-test.ipynb b/infra/feast-operator/test/e2e_rhoai/resources/feast-wb-milvus-test.ipynb
deleted file mode 100755
index e2838a4f33e..00000000000
--- a/infra/feast-operator/test/e2e_rhoai/resources/feast-wb-milvus-test.ipynb
+++ /dev/null
@@ -1,481 +0,0 @@
-{
- "cells": [
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "import os\n",
- "import feast\n",
- "\n",
- "actual_version = feast.__version__\n",
- "assert actual_version == os.environ.get(\"FEAST_VERSION\"), (\n",
- " f\"❌ Feast version mismatch. Expected: {os.environ.get('FEAST_VERSION')}, Found: {actual_version}\"\n",
- ")\n",
- "print(f\"✅ Successfully installed Feast version: {actual_version}\")"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "%cd /opt/app-root/src/feature_repo\n",
- "!ls -l"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "!cat /opt/app-root/src/feature_repo/feature_store.yaml"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "!mkdir -p data\n",
- "!wget -O data/city_wikipedia_summaries_with_embeddings.parquet https://raw.githubusercontent.com/opendatahub-io/feast/master/examples/rag/feature_repo/data/city_wikipedia_summaries_with_embeddings.parquet"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "import pandas as pd \n",
- "\n",
- "df = pd.read_parquet(\"./data/city_wikipedia_summaries_with_embeddings.parquet\")\n",
- "df['vector'] = df['vector'].apply(lambda x: x.tolist())\n",
- "embedding_length = len(df['vector'][0])\n",
- "assert embedding_length == 384, f\"❌ Expected vector length 384, but got {embedding_length}\"\n",
- "print(f'embedding length = {embedding_length}')"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "from IPython.display import display\n",
- "\n",
- "display(df.head())"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "!pip install -q pymilvus[milvus_lite] transformers torch"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "import subprocess\n",
- "\n",
- "# Run `feast apply` and capture output\n",
- "result = subprocess.run([\"feast\", \"apply\"], capture_output=True, text=True)\n",
- "\n",
- "# Combine stdout and stderr in case important info is in either\n",
- "output = result.stdout + result.stderr\n",
- "\n",
- "# Print full output for debugging (optional)\n",
- "print(output)\n",
- "\n",
- "# Expected substrings to validate\n",
- "expected_messages = [\n",
- " \"Applying changes for project rag\",\n",
- " \"Connecting to Milvus in local mode\",\n",
- " \"Deploying infrastructure for city_embeddings\"\n",
- "]\n",
- "\n",
- "# Validate all expected messages are in output\n",
- "for msg in expected_messages:\n",
- " assert msg in output, f\"❌ Expected message not found: '{msg}'\"\n",
- "\n",
- "print(\"✅ All expected messages were found in the output.\")\n"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "from datetime import datetime\n",
- "from feast import FeatureStore\n",
- "\n",
- "store = FeatureStore(repo_path=\".\")"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "import io\n",
- "import sys\n",
- "\n",
- "# Capture stdout\n",
- "captured_output = io.StringIO()\n",
- "sys_stdout_backup = sys.stdout\n",
- "sys.stdout = captured_output\n",
- "\n",
- "# Call the function\n",
- "store.write_to_online_store(feature_view_name='city_embeddings', df=df)\n",
- "\n",
- "# Restore stdout\n",
- "sys.stdout = sys_stdout_backup\n",
- "\n",
- "# Get the output\n",
- "output_str = captured_output.getvalue()\n",
- "\n",
- "# Expected message\n",
- "expected_msg = \"Connecting to Milvus in local mode using data/online_store.db\"\n",
- "\n",
- "# Validate\n",
- "assert expected_msg in output_str, f\"❌ Expected message not found.\\nExpected: {expected_msg}\\nActual Output:\\n{output_str}\"\n",
- "\n",
- "print(\"✅ Output message validated successfully.\")\n"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "# List batch feature views\n",
- "batch_fvs = store.list_batch_feature_views()\n",
- "\n",
- "# Print the number of batch feature views\n",
- "print(\"Number of batch feature views:\", len(batch_fvs))\n",
- "\n",
- "# Assert that the result is an integer and non-negative\n",
- "assert isinstance(len(batch_fvs), int), \"Result is not an integer\"\n",
- "assert len(batch_fvs) >= 0, \"Feature view count is negative\"\n",
- "\n",
- "print(\"Feature views listed correctly ✅\")"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "from feast import FeatureStore\n",
- "\n",
- "# Initialize store (if not already)\n",
- "store = FeatureStore(repo_path=\".\") # Adjust path if necessary\n",
- "\n",
- "# Retrieve the feature view\n",
- "fv = store.get_feature_view(\"city_embeddings\")\n",
- "\n",
- "# Assert name\n",
- "assert fv.name == \"city_embeddings\", \"Feature view name mismatch\"\n",
- "\n",
- "# Assert entities\n",
- "assert fv.entities == [\"item_id\"], f\"Expected entities ['item_id'], got {fv.entities}\"\n",
- "\n",
- "# Assert feature names and vector index settings\n",
- "feature_names = [f.name for f in fv.features]\n",
- "assert \"vector\" in feature_names, \"Missing 'vector' feature\"\n",
- "assert \"state\" in feature_names, \"Missing 'state' feature\"\n",
- "assert \"sentence_chunks\" in feature_names, \"Missing 'sentence_chunks' feature\"\n",
- "assert \"wiki_summary\" in feature_names, \"Missing 'wiki_summary' feature\"\n",
- "\n",
- "# Assert 'vector' feature is a vector index with COSINE metric\n",
- "vector_feature = next(f for f in fv.features if f.name == \"vector\")\n",
- "assert vector_feature.vector_index, \"'vector' feature is not indexed\"\n",
- "assert vector_feature.vector_search_metric == \"COSINE\", \"Expected COSINE search metric for 'vector'\"\n",
- "\n",
- "print(\"All assertions passed ✅\")"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "from feast.entity import Entity\n",
- "from feast.types import ValueType\n",
- "entity = Entity(\n",
- " name=\"item_id1\",\n",
- " value_type=ValueType.INT64,\n",
- " description=\"test id\",\n",
- " tags={\"team\": \"feast\"},\n",
- ")\n",
- "store.apply(entity)\n",
- "assert any(e.name == \"item_id1\" for e in store.list_entities())\n",
- "print(\"Entity added ✅\")"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "entity_to_delete = store.get_entity(\"item_id1\")\n",
- "\n",
- "store.apply(\n",
- " objects=[],\n",
- " objects_to_delete=[entity_to_delete],\n",
- " partial=False\n",
- ")\n",
- "\n",
- "# Validation after deletion\n",
- "assert not any(e.name == \"item_id1\" for e in store.list_entities())\n",
- "print(\"Entity deleted ✅\")"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "# List batch feature views\n",
- "batch_fvs = store.list_batch_feature_views()\n",
- "assert len(batch_fvs) == 1\n",
- "\n",
- "# Print count\n",
- "print(f\"Found {len(batch_fvs)} batch feature view(s) ✅\")\n"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "pymilvus_client = store._provider._online_store._connect(store.config)\n",
- "COLLECTION_NAME = pymilvus_client.list_collections()[0]\n",
- "\n",
- "milvus_query_result = pymilvus_client.query(\n",
- " collection_name=COLLECTION_NAME,\n",
- " filter=\"item_id == '0'\",\n",
- ")\n",
- "pd.DataFrame(milvus_query_result[0]).head()"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "import torch\n",
- "import torch.nn.functional as F\n",
- "from feast import FeatureStore\n",
- "from pymilvus import MilvusClient, DataType, FieldSchema\n",
- "from transformers import AutoTokenizer, AutoModel\n",
- "from example_repo import city_embeddings_feature_view, item\n",
- "\n",
- "TOKENIZER = \"sentence-transformers/all-MiniLM-L6-v2\"\n",
- "MODEL = \"sentence-transformers/all-MiniLM-L6-v2\"\n",
- "\n",
- "def mean_pooling(model_output, attention_mask):\n",
- " token_embeddings = model_output[\n",
- " 0\n",
- " ] # First element of model_output contains all token embeddings\n",
- " input_mask_expanded = (\n",
- " attention_mask.unsqueeze(-1).expand(token_embeddings.size()).float()\n",
- " )\n",
- " return torch.sum(token_embeddings * input_mask_expanded, 1) / torch.clamp(\n",
- " input_mask_expanded.sum(1), min=1e-9\n",
- " )\n",
- "\n",
- "def run_model(sentences, tokenizer, model):\n",
- " encoded_input = tokenizer(\n",
- " sentences, padding=True, truncation=True, return_tensors=\"pt\"\n",
- " )\n",
- " # Compute token embeddings\n",
- " with torch.no_grad():\n",
- " model_output = model(**encoded_input)\n",
- "\n",
- " sentence_embeddings = mean_pooling(model_output, encoded_input[\"attention_mask\"])\n",
- " sentence_embeddings = F.normalize(sentence_embeddings, p=2, dim=1)\n",
- " return sentence_embeddings"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "question = \"Which city has the largest population in New York?\"\n",
- "\n",
- "tokenizer = AutoTokenizer.from_pretrained(TOKENIZER)\n",
- "model = AutoModel.from_pretrained(MODEL)\n",
- "query_embedding = run_model(question, tokenizer, model)\n",
- "query = query_embedding.detach().cpu().numpy().tolist()[0]"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "from IPython.display import display\n",
- "\n",
- "# Retrieve top k documents\n",
- "context_data = store.retrieve_online_documents_v2(\n",
- " features=[\n",
- " \"city_embeddings:vector\",\n",
- " \"city_embeddings:item_id\",\n",
- " \"city_embeddings:state\",\n",
- " \"city_embeddings:sentence_chunks\",\n",
- " \"city_embeddings:wiki_summary\",\n",
- " ],\n",
- " query=query,\n",
- " top_k=3,\n",
- " distance_metric='COSINE',\n",
- ").to_df()\n",
- "display(context_data)"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "def format_documents(context_df):\n",
- " output_context = \"\"\n",
- " unique_documents = context_df.drop_duplicates().apply(\n",
- " lambda x: \"City & State = {\" + x['state'] +\"}\\nSummary = {\" + x['wiki_summary'].strip()+\"}\",\n",
- " axis=1,\n",
- " )\n",
- " for i, document_text in enumerate(unique_documents):\n",
- " output_context+= f\"****START DOCUMENT {i}****\\n{document_text.strip()}\\n****END DOCUMENT {i}****\"\n",
- " return output_context"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "RAG_CONTEXT = format_documents(context_data[['state', 'wiki_summary']])\n",
- "print(RAG_CONTEXT)"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "FULL_PROMPT = f\"\"\"\n",
- "You are an assistant for answering questions about states. You will be provided documentation from Wikipedia. Provide a conversational answer.\n",
- "If you don't know the answer, just say \"I do not know.\" Don't make up an answer.\n",
- "\n",
- "Here are document(s) you should use when answer the users question:\n",
- "{RAG_CONTEXT}\n",
- "\"\"\""
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "!pip install openai"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "import os\n",
- "from openai import OpenAI\n",
- "\n",
- "client = OpenAI(\n",
- " api_key=os.environ.get(\"OPENAI_API_KEY\"),\n",
- ")"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "response = client.chat.completions.create(\n",
- " model=\"gpt-4o-mini\",\n",
- " messages=[\n",
- " {\"role\": \"system\", \"content\": FULL_PROMPT},\n",
- " {\"role\": \"user\", \"content\": question}\n",
- " ],\n",
- ")"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "# The expected output\n",
- "expected_output = (\n",
- " \"New York City\"\n",
- ")\n",
- "\n",
- "# Actual output from response\n",
- "actual_output = '\\n'.join([c.message.content.strip() for c in response.choices])\n",
- "\n",
- "# Validate\n",
- "assert expected_output in actual_output, f\"❌ Output mismatch:\\nExpected: {expected_output}\\nActual: {actual_output}\"\n",
- "\n",
- "print(\"✅ Output matches expected response.\")"
- ]
- }
- ],
- "metadata": {
- "kernelspec": {
- "display_name": "Python 3",
- "language": "python",
- "name": "python3"
- },
- "language_info": {
- "codemirror_mode": {
- "name": "ipython",
- "version": 3
- },
- "file_extension": ".py",
- "mimetype": "text/x-python",
- "name": "python",
- "nbconvert_exporter": "python",
- "pygments_lexer": "ipython3",
- "version": "3.11.5"
- },
- "orig_nbformat": 4
- },
- "nbformat": 4,
- "nbformat_minor": 2
-}
diff --git a/infra/feast-operator/test/e2e_rhoai/resources/feast-wb-ray-test.ipynb b/infra/feast-operator/test/e2e_rhoai/resources/feast-wb-ray-test.ipynb
deleted file mode 100644
index 3b91bcccd8e..00000000000
--- a/infra/feast-operator/test/e2e_rhoai/resources/feast-wb-ray-test.ipynb
+++ /dev/null
@@ -1,516 +0,0 @@
-{
- "cells": [
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "# --- Configuration Variables ---\n",
- "import os \n",
- "\n",
- "# Namespace where your resources exist\n",
- "namespace = os.environ.get(\"NAMESPACE\")\n",
- "\n",
- "fsconfigmap = \"cm-fs-data\"\n",
- "\n",
- "# Fetch token and server directly from oc CLI\n",
- "import subprocess\n",
- "\n",
- "def oc(cmd):\n",
- " return subprocess.check_output(cmd, shell=True).decode(\"utf-8\").strip()\n",
- "\n",
- "token = oc(\"oc whoami -t\")\n",
- "server = oc(\"oc whoami --show-server\")\n",
- "\n",
- "os.environ[\"CLUSTER_TOKEN\"] = token\n",
- "os.environ[\"CLUSTER_SERVER\"] = server\n",
- "\n",
- "\n",
- "# RayCluster name\n",
- "raycluster = \"feastraytest\"\n",
- "os.environ[\"RAY_CLUSTER\"] = raycluster\n",
- "\n",
- "# Show configured values\n",
- "print(\"Configuration Variables:\")\n",
- "print(f\" Namespace: {namespace}\")\n",
- "print(f\" Server: {server}\")\n",
- "print(f\" Token: {'*' * 20}\") # hide actual token\n",
- "print(f\" Ray Cluster: {raycluster}\")"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "! git clone https://github.com/Srihari1192/feast-rag-ray.git"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "%cd feast-rag-ray/feature_repo"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "!oc login --token=$token --server=$server"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "!oc create configmap $fsconfigmap --from-file=data/customer_daily_profile.parquet --from-file=data/driver_stats.parquet -n $namespace"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "# Import pieces from codeflare-sdk\n",
- "from codeflare_sdk import Cluster, ClusterConfiguration, TokenAuthentication\n",
- "\n",
- "# Create authentication with token and server from oc\n",
- "auth = TokenAuthentication(\n",
- " token=token,\n",
- " server=server,\n",
- " skip_tls=True\n",
- ")\n",
- "auth.login()\n",
- "print(\"✓ Authentication successful\")\n"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "from kubernetes.client import (\n",
- " V1Volume,\n",
- " V1ConfigMapVolumeSource,\n",
- " V1VolumeMount,\n",
- ") \n",
- "\n",
- "data_volume = V1Volume(\n",
- " name=\"data\",\n",
- " config_map=V1ConfigMapVolumeSource(name=fsconfigmap)\n",
- ")\n",
- "\n",
- "data_mount = V1VolumeMount(\n",
- " name=\"data\",\n",
- " mount_path=\"/opt/app-root/src/feast-rag-ray/feature_repo/data\",\n",
- " read_only=True\n",
- ")\n",
- "\n",
- "cluster = Cluster(ClusterConfiguration(\n",
- " name=raycluster,\n",
- " head_cpu_requests=1,\n",
- " head_cpu_limits=1,\n",
- " head_memory_requests=4,\n",
- " head_memory_limits=4,\n",
- " head_extended_resource_requests={'nvidia.com/gpu':0}, # For GPU enabled workloads set the head_extended_resource_requests and worker_extended_resource_requests\n",
- " worker_extended_resource_requests={'nvidia.com/gpu':0},\n",
- " num_workers=2,\n",
- " worker_cpu_requests='250m',\n",
- " worker_cpu_limits=1,\n",
- " worker_memory_requests=4,\n",
- " worker_memory_limits=4,\n",
- " # image=\"\", # Optional Field \n",
- " write_to_file=False, # When enabled Ray Cluster yaml files are written to /HOME/.codeflare/resources\n",
- " local_queue=\"fs-user-queue\", # Specify the local queue manually\n",
- " # ⭐ Best method: Use secretKeyRef to expose AWS credentials safely\n",
- " volumes=[data_volume],\n",
- " volume_mounts=[data_mount],\n",
- " \n",
- "))"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "cluster.apply()\n",
- "# cluster.wait_ready()"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "import time\n",
- "\n",
- "MAX_WAIT = 180 # 3 minutes\n",
- "INTERVAL = 5 # check every 5 seconds\n",
- "elapsed = 0\n",
- "\n",
- "print(\"⏳ Waiting up to 3 minutes for RayCluster to be READY...\\n\")\n",
- "\n",
- "while elapsed < MAX_WAIT:\n",
- " details = cluster.details()\n",
- " status = details.status.value\n",
- "\n",
- " print(details)\n",
- " print(\"Cluster Status:\", status)\n",
- "\n",
- " if status == \"ready\":\n",
- " print(\"✅ RayCluster is READY!\")\n",
- " break\n",
- " \n",
- " print(f\"⏳ RayCluster is NOT ready yet: {status} ... checking again in {INTERVAL}s\\n\")\n",
- " time.sleep(INTERVAL)\n",
- " elapsed += INTERVAL\n",
- "\n",
- "else:\n",
- " print(\"❌ Timeout: RayCluster did NOT become READY within 3 minutes.\")\n"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "! feast apply"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "import sys\n",
- "from pathlib import Path\n",
- "from feast import FeatureStore\n",
- "\n",
- "# Add feature repo to PYTHONPATH\n",
- "repo_path = Path(\".\")\n",
- "sys.path.append(str(repo_path))\n",
- "\n",
- "# Initialize Feature Store\n",
- "print(\"Initializing Feast with Ray configuration...\")\n",
- "store = FeatureStore(repo_path=\".\")\n",
- "\n",
- "# Assertions: Verify store is initialized correctly\n",
- "assert store is not None, \"FeatureStore should be initialized\"\n",
- "assert store.config is not None, \"Store config should be available\"\n",
- "assert store.config.offline_store is not None, \"Offline store should be configured\"\n",
- "\n",
- "print(f\"✓ Offline store: {store.config.offline_store.type}\")\n",
- "if hasattr(store.config, \"batch_engine\") and store.config.batch_engine:\n",
- " print(f\"✓ Compute engine: {store.config.batch_engine.type}\")\n",
- " # Assertion: Verify batch engine is configured if present\n",
- " assert store.config.batch_engine.type is not None, \"Batch engine type should be set\"\n",
- "else:\n",
- " print(\"⚠ No compute engine configured\")\n"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "## 2. Create Entity DataFrame\n",
- "\n",
- "Create an entity DataFrame for historical feature retrieval with point-in-time timestamps.\n"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "from datetime import datetime, timedelta\n",
- "import pandas as pd\n",
- "\n",
- "# --- Create time window ---\n",
- "end_date = datetime.now().replace(microsecond=0, second=0, minute=0)\n",
- "start_date = end_date - timedelta(days=2)\n",
- "\n",
- "\n",
- "entity_df = pd.DataFrame(\n",
- " {\n",
- " \"driver_id\": [1001, 1002, 1003],\n",
- " \"customer_id\": [2001, 2002, 2003],\n",
- " \"event_timestamp\": [\n",
- " pd.Timestamp(end_date - timedelta(hours=24), tz=\"UTC\"),\n",
- " pd.Timestamp(end_date - timedelta(hours=12), tz=\"UTC\"),\n",
- " pd.Timestamp(end_date - timedelta(hours=6), tz=\"UTC\"),\n",
- " ],\n",
- " }\n",
- ")\n",
- "\n",
- "# Assertions: Verify entity DataFrame is created correctly\n",
- "assert len(entity_df) == 3, f\"Expected 3 rows, got {len(entity_df)}\"\n",
- "assert \"driver_id\" in entity_df.columns, \"driver_id column should be present\"\n",
- "assert \"customer_id\" in entity_df.columns, \"customer_id column should be present\"\n",
- "assert \"event_timestamp\" in entity_df.columns, \"event_timestamp column should be present\"\n",
- "assert all(entity_df[\"driver_id\"].isin([1001, 1002, 1003])), \"driver_id values should match expected\"\n",
- "assert all(entity_df[\"customer_id\"].isin([2001, 2002, 2003])), \"customer_id values should match expected\"\n",
- "assert entity_df[\"event_timestamp\"].notna().all(), \"All event_timestamp values should be non-null\"\n",
- "\n",
- "print(f\"✓ Created entity DataFrame with {len(entity_df)} rows\")\n",
- "print(f\"✓ Time range: {start_date} to {end_date}\")\n",
- "print(\"\\nEntity DataFrame:\")\n",
- "print(entity_df)\n"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "## 3. Retrieve Historical Features\n",
- "\n",
- "Retrieve historical features using Ray compute engine for distributed point-in-time joins.\n"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "# Cell 4: Retrieve Historical Features\n",
- "print(\"Retrieving historical features with Ray compute engine...\")\n",
- "print(\"(This demonstrates distributed point-in-time joins)\")\n",
- "\n",
- "try:\n",
- " # Get historical features - this uses Ray compute engine for distributed processing\n",
- " historical_features = store.get_historical_features(\n",
- " entity_df=entity_df,\n",
- " features=[\n",
- " \"driver_hourly_stats:conv_rate\",\n",
- " \"driver_hourly_stats:acc_rate\",\n",
- " \"driver_hourly_stats:avg_daily_trips\",\n",
- " \"customer_daily_profile:current_balance\",\n",
- " \"customer_daily_profile:avg_passenger_count\",\n",
- " \"customer_daily_profile:lifetime_trip_count\",\n",
- " ],\n",
- " )\n",
- "\n",
- " # Convert to DataFrame - Ray processes this efficiently\n",
- " historical_df = historical_features.to_df()\n",
- " \n",
- " # Assertions: Verify historical features are retrieved correctly\n",
- " assert historical_df is not None, \"Historical features DataFrame should not be None\"\n",
- " assert len(historical_df) > 0, \"Should retrieve at least one row of historical features\"\n",
- " assert \"driver_id\" in historical_df.columns, \"driver_id should be in the result\"\n",
- " assert \"customer_id\" in historical_df.columns, \"customer_id should be in the result\"\n",
- " \n",
- " # Verify expected feature columns are present (some may be None if data doesn't exist)\n",
- " expected_features = [\n",
- " \"conv_rate\", \"acc_rate\", \"avg_daily_trips\",\n",
- " \"current_balance\", \"avg_passenger_count\", \"lifetime_trip_count\"\n",
- " ]\n",
- " feature_columns = [col for col in historical_df.columns if col in expected_features]\n",
- " assert len(feature_columns) > 0, f\"Should have at least one feature column, got: {historical_df.columns.tolist()}\"\n",
- " \n",
- " print(f\"✓ Retrieved {len(historical_df)} historical feature rows\")\n",
- " print(f\"✓ Features: {list(historical_df.columns)}\")\n",
- " \n",
- " # Display the results\n",
- " print(\"\\nHistorical Features DataFrame:\")\n",
- " display(historical_df.head(10))\n",
- "\n",
- "except Exception as e:\n",
- " print(f\"⚠ Historical features retrieval failed: {e}\")\n",
- " print(\"This might be due to missing Ray dependencies or data\")\n",
- " raise\n"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "## 4. Test On-Demand Feature Transformations\n",
- "\n",
- "Demonstrate on-demand feature transformations that are computed at request time.\n"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "# Cell 5: Test On-Demand Features\n",
- "print(\"Testing on-demand feature transformations...\")\n",
- "\n",
- "try:\n",
- " # Get features including on-demand transformations\n",
- " features_with_odfv = store.get_historical_features(\n",
- " entity_df=entity_df.head(1),\n",
- " features=[\n",
- " \"driver_hourly_stats:conv_rate\",\n",
- " \"driver_hourly_stats:acc_rate\",\n",
- " \"driver_hourly_stats:avg_daily_trips\",\n",
- " \"driver_activity_v2:conv_rate_plus_acc_rate\",\n",
- " \"driver_activity_v2:trips_per_day_normalized\",\n",
- " ],\n",
- " )\n",
- "\n",
- " odfv_df = features_with_odfv.to_df()\n",
- " \n",
- " # Assertions: Verify on-demand features are computed correctly\n",
- " assert odfv_df is not None, \"On-demand features DataFrame should not be None\"\n",
- " assert len(odfv_df) > 0, \"Should retrieve at least one row with on-demand features\"\n",
- " assert \"driver_id\" in odfv_df.columns, \"driver_id should be in the result\"\n",
- " \n",
- " # Verify on-demand feature columns if they exist\n",
- " if \"conv_rate_plus_acc_rate\" in odfv_df.columns:\n",
- " # Assertion: Verify the on-demand feature is computed\n",
- " assert odfv_df[\"conv_rate_plus_acc_rate\"].notna().any(), \"conv_rate_plus_acc_rate should have non-null values\"\n",
- " print(\"✓ On-demand feature 'conv_rate_plus_acc_rate' is computed\")\n",
- " \n",
- " if \"trips_per_day_normalized\" in odfv_df.columns:\n",
- " assert odfv_df[\"trips_per_day_normalized\"].notna().any(), \"trips_per_day_normalized should have non-null values\"\n",
- " print(\"✓ On-demand feature 'trips_per_day_normalized' is computed\")\n",
- " \n",
- " print(f\"✓ Retrieved {len(odfv_df)} rows with on-demand transformations\")\n",
- " \n",
- " # Display results\n",
- " print(\"\\nFeatures with On-Demand Transformations:\")\n",
- " display(odfv_df)\n",
- " \n",
- " # Show specific transformed features\n",
- " if \"conv_rate_plus_acc_rate\" in odfv_df.columns:\n",
- " print(\"\\nSample with on-demand features:\")\n",
- " display(\n",
- " odfv_df[[\"driver_id\", \"conv_rate\", \"acc_rate\", \"conv_rate_plus_acc_rate\"]]\n",
- " )\n",
- "\n",
- "except Exception as e:\n",
- " print(f\"⚠ On-demand features failed: {e}\")\n",
- " raise\n"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "## 5. Materialize Features to Online Store\n",
- "\n",
- "Materialize features to the online store using Ray compute engine for efficient batch processing.\n"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "from datetime import timezone\n",
- "print(\"Materializing features to online store...\")\n",
- "store.materialize(\n",
- "\tstart_date=datetime(2025, 1, 1, tzinfo=timezone.utc),\n",
- "\tend_date=end_date,\n",
- ")\n",
- "\n",
- "# Minimal output assertion: materialization succeeded if no exception\n",
- "assert True, \"Materialization completed successfully\"\n",
- "print(\"✓ Initial materialization successful\")"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "## 6. Test Online Feature Serving\n",
- "\n",
- "Retrieve features from the online store for low-latency serving.\n"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "# Cell 7: Test Online Feature Serving\n",
- "print(\"Testing online feature serving...\")\n",
- "\n",
- "try:\n",
- " entity_rows = [\n",
- " {\"driver_id\": 1001, \"customer_id\": 2001},\n",
- " {\"driver_id\": 1002, \"customer_id\": 2002},\n",
- " ]\n",
- " \n",
- " # Assertion: Verify entity rows are valid\n",
- " assert len(entity_rows) == 2, \"Should have 2 entity rows\"\n",
- " assert all(\"driver_id\" in row for row in entity_rows), \"All entity rows should have driver_id\"\n",
- " assert all(\"customer_id\" in row for row in entity_rows), \"All entity rows should have customer_id\"\n",
- " \n",
- " online_features = store.get_online_features(\n",
- " features=[\n",
- " \"driver_hourly_stats:conv_rate\",\n",
- " \"driver_hourly_stats:acc_rate\",\n",
- " \"customer_daily_profile:current_balance\",\n",
- " ],\n",
- " entity_rows=entity_rows,\n",
- " )\n",
- "\n",
- " online_df = online_features.to_df()\n",
- " \n",
- " # Assertions: Verify online features are retrieved correctly\n",
- " assert online_df is not None, \"Online features DataFrame should not be None\"\n",
- " assert len(online_df) == len(entity_rows), f\"Should retrieve {len(entity_rows)} rows, got {len(online_df)}\"\n",
- " assert \"driver_id\" in online_df.columns, \"driver_id should be in the result\"\n",
- " assert \"customer_id\" in online_df.columns, \"customer_id should be in the result\"\n",
- " \n",
- " # Verify expected feature columns are present\n",
- " expected_features = [\"conv_rate\", \"acc_rate\", \"current_balance\"]\n",
- " feature_columns = [col for col in online_df.columns if col in expected_features]\n",
- " assert len(feature_columns) > 0, f\"Should have at least one feature column, got: {online_df.columns.tolist()}\"\n",
- " \n",
- " # Verify entity IDs match\n",
- " assert all(online_df[\"driver_id\"].isin([1001, 1002])), \"driver_id values should match entity rows\"\n",
- " assert all(online_df[\"customer_id\"].isin([2001, 2002])), \"customer_id values should match entity rows\"\n",
- " \n",
- " print(f\"✓ Retrieved {len(online_df)} online feature rows\")\n",
- " print(f\"✓ Features retrieved: {feature_columns}\")\n",
- " \n",
- " print(\"\\nOnline Features DataFrame:\")\n",
- " display(online_df)\n",
- "\n",
- "except Exception as e:\n",
- " print(f\"⚠ Online serving failed: {e}\")\n",
- " raise\n"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "cluster.down()"
- ]
- }
- ],
- "metadata": {
- "language_info": {
- "name": "python"
- }
- },
- "nbformat": 4,
- "nbformat_minor": 2
-}
diff --git a/infra/feast-operator/test/e2e_rhoai/resources/feast_kube_auth.yaml b/infra/feast-operator/test/e2e_rhoai/resources/feast_kube_auth.yaml
deleted file mode 100644
index fae126b528a..00000000000
--- a/infra/feast-operator/test/e2e_rhoai/resources/feast_kube_auth.yaml
+++ /dev/null
@@ -1,74 +0,0 @@
-apiVersion: v1
-kind: Secret
-metadata:
- name: feast-data-stores
- namespace: test-ns-feast
-stringData:
- redis: |
- connection_string: redis.test-ns-feast.svc.cluster.local:6379
- sql: |
- path: postgresql+psycopg://${POSTGRESQL_USER}:${POSTGRESQL_PASSWORD}@postgres.test-ns-feast.svc.cluster.local:5432/${POSTGRESQL_DATABASE}
- cache_ttl_seconds: 60
- sqlalchemy_config_kwargs:
- echo: false
- pool_pre_ping: true
----
-apiVersion: feast.dev/v1
-kind: FeatureStore
-metadata:
- name: credit-scoring
- namespace: test-ns-feast
-spec:
- authz:
- kubernetes:
- roles: []
- feastProject: credit_scoring_local
- feastProjectDir:
- git:
- url: https://github.com/feast-dev/feast-credit-score-local-tutorial
- ref: 598a270
- services:
- offlineStore:
- persistence:
- file:
- type: duckdb
- server:
- envFrom:
- - secretRef:
- name: postgres-secret
- env:
- - name: MPLCONFIGDIR
- value: /tmp
- resources:
- requests:
- cpu: 150m
- memory: 128Mi
- onlineStore:
- persistence:
- store:
- type: redis
- secretRef:
- name: feast-data-stores
- server:
- envFrom:
- - secretRef:
- name: postgres-secret
- env:
- - name: MPLCONFIGDIR
- value: /tmp
- resources:
- requests:
- cpu: 150m
- memory: 128Mi
- registry:
- local:
- persistence:
- store:
- type: sql
- secretRef:
- name: feast-data-stores
- server:
- envFrom:
- - secretRef:
- name: postgres-secret
- restAPI: true
diff --git a/infra/feast-operator/test/e2e_rhoai/resources/feature_repo/__init__.py b/infra/feast-operator/test/e2e_rhoai/resources/feature_repo/__init__.py
deleted file mode 100644
index e69de29bb2d..00000000000
diff --git a/infra/feast-operator/test/e2e_rhoai/resources/feature_repo/example_repo.py b/infra/feast-operator/test/e2e_rhoai/resources/feature_repo/example_repo.py
deleted file mode 100755
index 7a37d99d495..00000000000
--- a/infra/feast-operator/test/e2e_rhoai/resources/feature_repo/example_repo.py
+++ /dev/null
@@ -1,42 +0,0 @@
-from datetime import timedelta
-
-from feast import (
- FeatureView,
- Field,
- FileSource,
-)
-from feast.data_format import ParquetFormat
-from feast.types import Float32, Array, String, ValueType
-from feast import Entity
-
-item = Entity(
- name="item_id",
- description="Item ID",
- value_type=ValueType.INT64,
-)
-
-parquet_file_path = "./data/city_wikipedia_summaries_with_embeddings.parquet"
-
-source = FileSource(
- file_format=ParquetFormat(),
- path=parquet_file_path,
- timestamp_field="event_timestamp",
-)
-
-city_embeddings_feature_view = FeatureView(
- name="city_embeddings",
- entities=[item],
- schema=[
- Field(
- name="vector",
- dtype=Array(Float32),
- vector_index=True,
- vector_search_metric="COSINE",
- ),
- Field(name="state", dtype=String),
- Field(name="sentence_chunks", dtype=String),
- Field(name="wiki_summary", dtype=String),
- ],
- source=source,
- ttl=timedelta(hours=2),
-)
diff --git a/infra/feast-operator/test/e2e_rhoai/resources/feature_repo/feature_store.yaml b/infra/feast-operator/test/e2e_rhoai/resources/feature_repo/feature_store.yaml
deleted file mode 100755
index f8f9cc293dc..00000000000
--- a/infra/feast-operator/test/e2e_rhoai/resources/feature_repo/feature_store.yaml
+++ /dev/null
@@ -1,16 +0,0 @@
-project: rag
-provider: local
-registry: data/registry.db
-online_store:
- type: milvus
- path: data/online_store.db
- vector_enabled: true
- embedding_dim: 384
- index_type: "FLAT"
- metric_type: "COSINE"
-offline_store:
- type: file
-entity_key_serialization_version: 3
-auth:
- type: no_auth
-
diff --git a/infra/feast-operator/test/e2e_rhoai/resources/kueue_resources_setup.yaml b/infra/feast-operator/test/e2e_rhoai/resources/kueue_resources_setup.yaml
deleted file mode 100644
index ebcac54f4a0..00000000000
--- a/infra/feast-operator/test/e2e_rhoai/resources/kueue_resources_setup.yaml
+++ /dev/null
@@ -1,31 +0,0 @@
-apiVersion: kueue.x-k8s.io/v1beta1
-kind: ResourceFlavor
-metadata:
- name: "fs-resource-flavor"
----
-apiVersion: kueue.x-k8s.io/v1beta1
-kind: ClusterQueue
-metadata:
- name: "fs-cluster-queue"
-spec:
- namespaceSelector: {} # match all.
- resourceGroups:
- - coveredResources: ["cpu", "memory","nvidia.com/gpu"]
- flavors:
- - name: "fs-resource-flavor"
- resources:
- - name: "cpu"
- nominalQuota: 9
- - name: "memory"
- nominalQuota: 36Gi
- - name: "nvidia.com/gpu"
- nominalQuota: 0
----
-apiVersion: kueue.x-k8s.io/v1beta1
-kind: LocalQueue
-metadata:
- name: "fs-user-queue"
- annotations:
- "kueue.x-k8s.io/default-queue": "true"
-spec:
- clusterQueue: "fs-cluster-queue"
diff --git a/infra/feast-operator/test/e2e_rhoai/resources/permissions.py b/infra/feast-operator/test/e2e_rhoai/resources/permissions.py
deleted file mode 100644
index 7b48a7b4c56..00000000000
--- a/infra/feast-operator/test/e2e_rhoai/resources/permissions.py
+++ /dev/null
@@ -1,19 +0,0 @@
-from feast.feast_object import ALL_FEATURE_VIEW_TYPES
-from feast.permissions.permission import Permission
-from feast.permissions.action import READ, AuthzedAction
-from feast.permissions.policy import NamespaceBasedPolicy
-from feast.project import Project
-from feast.entity import Entity
-from feast.feature_service import FeatureService
-from feast.saved_dataset import SavedDataset
-
-perm_namespace = ["test-ns-feast"]
-
-WITHOUT_DATA_SOURCE = [Project, Entity, FeatureService, SavedDataset] + ALL_FEATURE_VIEW_TYPES
-
-test_perm = Permission(
- name="feast-auth",
- types=WITHOUT_DATA_SOURCE,
- policy=NamespaceBasedPolicy(namespaces=perm_namespace),
- actions=[AuthzedAction.DESCRIBE] + READ
-)
diff --git a/infra/feast-operator/test/e2e_rhoai/resources/pvc.yaml b/infra/feast-operator/test/e2e_rhoai/resources/pvc.yaml
deleted file mode 100644
index a9e8c1be299..00000000000
--- a/infra/feast-operator/test/e2e_rhoai/resources/pvc.yaml
+++ /dev/null
@@ -1,10 +0,0 @@
-apiVersion: v1
-kind: PersistentVolumeClaim
-metadata:
- name: jupyterhub-nb-kube-3aadmin-pvc
-spec:
- accessModes:
- - ReadWriteOnce
- resources:
- requests:
- storage: 10Gi
diff --git a/infra/feast-operator/test/utils/notebook_util.go b/infra/feast-operator/test/utils/notebook_util.go
deleted file mode 100644
index 8652b481889..00000000000
--- a/infra/feast-operator/test/utils/notebook_util.go
+++ /dev/null
@@ -1,387 +0,0 @@
-package utils
-
-import (
- "bytes"
- "fmt"
- "os"
- "os/exec"
- "strings"
- "text/template"
- "time"
-
- . "github.com/onsi/ginkgo/v2"
- . "github.com/onsi/gomega"
-)
-
-type NotebookTemplateParams struct {
- Namespace string
- IngressDomain string
- OpenDataHubNamespace string
- NotebookImage string
- NotebookConfigMapName string
- NotebookPVC string
- Username string
- OC_TOKEN string
- OC_SERVER string
- NotebookFile string
- Command string
- PipIndexUrl string
- PipTrustedHost string
- FeastVerison string
- OpenAIAPIKey string
- FeastProject string
-}
-
-// CreateNotebook renders a notebook manifest from a template and applies it using kubectl.
-func CreateNotebook(params NotebookTemplateParams) error {
- content, err := os.ReadFile("test/e2e_rhoai/resources/custom-nb.yaml")
- if err != nil {
- return fmt.Errorf("failed to read template file: %w", err)
- }
-
- tmpl, err := template.New("notebook").Parse(string(content))
- if err != nil {
- return fmt.Errorf("failed to parse template: %w", err)
- }
-
- var rendered bytes.Buffer
- if err := tmpl.Execute(&rendered, params); err != nil {
- return fmt.Errorf("failed to substitute template: %w", err)
- }
-
- tmpFile, err := os.CreateTemp("", "notebook-*.yaml")
- if err != nil {
- return fmt.Errorf("failed to create temp file: %w", err)
- }
-
- // Defer cleanup of temp file
- defer func() {
- if err := os.Remove(tmpFile.Name()); err != nil {
- fmt.Printf("warning: failed to remove temp file %s: %v", tmpFile.Name(), err)
- }
- }()
-
- if _, err := tmpFile.Write(rendered.Bytes()); err != nil {
- return fmt.Errorf("failed to write to temp file: %w", err)
- }
-
- if err := tmpFile.Close(); err != nil {
- return fmt.Errorf("failed to close temp file: %w", err)
- }
-
- // fmt.Println("Notebook manifest applied successfully")
- cmd := exec.Command("kubectl", "apply", "-f", tmpFile.Name(), "-n", params.Namespace)
- output, err := Run(cmd, "/test/e2e_rhoai")
- Expect(err).ToNot(HaveOccurred(), fmt.Sprintf(
- "Failed to create Notebook %s.\nError: %v\nOutput: %s\n",
- tmpFile.Name(), err, output,
- ))
- fmt.Printf("Notebook %s created successfully\n", tmpFile.Name())
- return nil
-}
-
-// MonitorNotebookPod waits for a notebook pod to reach Running state and verifies execution logs.
-func MonitorNotebookPod(namespace, podPrefix string, notebookName string) error {
- const successMarker = "Notebook executed successfully"
- const failureMarker = "Notebook execution failed"
- const pollInterval = 5 * time.Second
- var pod *PodInfo
-
- fmt.Println("🔄 Waiting for notebook pod to reach Running & Ready state...")
-
- foundRunningReady := false
- for i := 0; i < 36; i++ {
- var err error
- pod, err = getPodByPrefix(namespace, podPrefix)
- if err != nil {
- fmt.Printf("⏳ Pod not created yet: %v\n", err)
- time.Sleep(pollInterval)
- continue
- }
- if pod.Status == "Running" {
- fmt.Printf("✅ Pod %s is Running and Ready.\n", pod.Name)
- foundRunningReady = true
- break
- }
- fmt.Printf("⏳ Pod %s not ready yet. Phase: %s\n", pod.Name, pod.Status)
- time.Sleep(pollInterval)
- }
-
- if !foundRunningReady {
- return fmt.Errorf("❌ Pod %s did not reach Running & Ready state within 3 minutes", podPrefix)
- }
-
- // Start monitoring notebook logs
- fmt.Printf("⏳ Monitoring Notebook pod %s Logs for Jupyter Notebook %s execution status\n", pod.Name, notebookName)
-
- for i := 0; i < 60; i++ {
- logs, err := getPodLogs(namespace, pod.Name)
- if err != nil {
- fmt.Printf("⏳ Failed to get logs for pod %s: %v\n", pod.Name, err)
- time.Sleep(pollInterval)
- continue
- }
-
- if strings.Contains(logs, successMarker) {
- Expect(logs).To(ContainSubstring(successMarker))
- fmt.Printf("✅ Jupyter Notebook pod %s executed successfully.\n", pod.Name)
- return nil
- }
-
- if strings.Contains(logs, failureMarker) {
- fmt.Printf("❌ Notebook pod %s failed: failure marker found.\n", pod.Name)
- return fmt.Errorf("Notebook failed in execution. Logs:\n%s", logs)
- }
-
- time.Sleep(pollInterval)
- }
-
- return fmt.Errorf("❌ Timed out waiting for notebook pod %s to complete", podPrefix)
-}
-
-type PodInfo struct {
- Name string
- Status string
-}
-
-// returns the first pod matching a name prefix in the given namespace.
-func getPodByPrefix(namespace, prefix string) (*PodInfo, error) {
- cmd := exec.Command(
- "kubectl", "get", "pods", "-n", namespace,
- "-o", "jsonpath={range .items[*]}{.metadata.name} {.status.phase}{\"\\n\"}{end}",
- )
- output, err := Run(cmd, "/test/e2e_rhoai")
- if err != nil {
- return nil, fmt.Errorf("failed to get pods: %w", err)
- }
-
- lines := strings.Split(strings.TrimSpace(string(output)), "\n")
- for _, line := range lines {
- parts := strings.Fields(line)
- if len(parts) < 2 {
- continue
- }
- name := parts[0]
- status := parts[1]
-
- if strings.HasPrefix(name, prefix) {
- return &PodInfo{
- Name: name,
- Status: status,
- }, nil
- }
- }
-
- return nil, fmt.Errorf("no pod found with prefix %q in namespace %q", prefix, namespace)
-}
-
-// retrieves the logs of a specified pod in the given namespace.
-func getPodLogs(namespace, podName string) (string, error) {
- cmd := exec.Command("kubectl", "logs", "-n", namespace, podName)
- var out bytes.Buffer
- var stderr bytes.Buffer
- cmd.Stdout = &out
- cmd.Stderr = &stderr
-
- err := cmd.Run()
- if err != nil {
- return "", fmt.Errorf("error getting pod logs: %v - %s", err, stderr.String())
- }
-
- return out.String(), nil
-}
-
-// returns the OpenShift cluster ingress domain.
-func GetIngressDomain(testDir string) string {
- cmd := exec.Command("oc", "get", "ingresses.config.openshift.io", "cluster", "-o", "jsonpath={.spec.domain}")
- output, _ := Run(cmd, testDir)
- return string(output)
-}
-
-// returns the current OpenShift user authentication token.
-func GetOCToken(testDir string) string {
- cmd := exec.Command("oc", "whoami", "--show-token")
- output, _ := Run(cmd, testDir)
- return string(output)
-}
-
-// returns the OpenShift API server URL for the current user.
-func GetOCServer(testDir string) string {
- cmd := exec.Command("oc", "whoami", "--show-server")
- output, _ := Run(cmd, testDir)
- return string(output)
-}
-
-// returns the OpenShift cluster logged in Username
-func GetOCUser(testDir string) string {
- cmd := exec.Command("oc", "whoami")
- output, _ := Run(cmd, testDir)
- return strings.TrimSpace(string(output))
-}
-
-// SetNamespaceContext sets the kubectl namespace context to the specified namespace
-func SetNamespaceContext(namespace, testDir string) error {
- cmd := exec.Command("kubectl", "config", "set-context", "--current", "--namespace", namespace)
- output, err := Run(cmd, testDir)
- if err != nil {
- return fmt.Errorf("failed to set namespace context to %s: %w\nOutput: %s", namespace, err, output)
- }
- return nil
-}
-
-// CreateNotebookConfigMap creates a ConfigMap containing the notebook file and feature repo
-func CreateNotebookConfigMap(namespace, configMapName, notebookFile, featureRepoPath, testDir string) error {
- cmd := exec.Command("kubectl", "create", "configmap", configMapName,
- "--from-file="+notebookFile,
- "--from-file="+featureRepoPath)
- output, err := Run(cmd, testDir)
- if err != nil {
- return fmt.Errorf("failed to create ConfigMap %s: %w\nOutput: %s", configMapName, err, output)
- }
- return nil
-}
-
-// CreateNotebookPVC creates a PersistentVolumeClaim for the notebook
-func CreateNotebookPVC(pvcFile, testDir string) error {
- cmd := exec.Command("kubectl", "apply", "-f", pvcFile)
- _, err := Run(cmd, testDir)
- if err != nil {
- return fmt.Errorf("failed to create PVC from %s: %w", pvcFile, err)
- }
- return nil
-}
-
-// CreateNotebookRoleBinding creates a rolebinding for the user in the specified namespace
-func CreateNotebookRoleBinding(namespace, rolebindingName, username, testDir string) error {
- cmd := exec.Command("kubectl", "create", "rolebinding", rolebindingName,
- "-n", namespace,
- "--role=admin",
- "--user="+username)
- _, err := Run(cmd, testDir)
- if err != nil {
- return fmt.Errorf("failed to create rolebinding %s: %w", rolebindingName, err)
- }
- return nil
-}
-
-// BuildNotebookCommand builds the command array for executing a notebook with papermill
-func BuildNotebookCommand(notebookName, testDir string) []string {
- return []string{
- "/bin/sh",
- "-c",
- fmt.Sprintf(
- "pip install papermill && "+
- "mkdir -p /opt/app-root/src/feature_repo && "+
- "cp -rL /opt/app-root/notebooks/* /opt/app-root/src/feature_repo/ && "+
- "oc login --token=%s --server=%s --insecure-skip-tls-verify=true && "+
- "(papermill /opt/app-root/notebooks/%s /opt/app-root/src/output.ipynb --kernel python3 && "+
- "echo '✅ Notebook executed successfully' || "+
- "(echo '❌ Notebook execution failed' && "+
- "cp /opt/app-root/src/output.ipynb /opt/app-root/src/failed_output.ipynb && "+
- "echo '📄 Copied failed notebook to failed_output.ipynb')) && "+
- "jupyter nbconvert --to notebook --stdout /opt/app-root/src/output.ipynb || echo '⚠️ nbconvert failed' && "+
- "sleep 100; exit 0",
- GetOCToken(testDir),
- GetOCServer(testDir),
- notebookName,
- ),
- }
-}
-
-// GetNotebookParams builds and returns NotebookTemplateParams from environment variables and configuration
-// feastProject is optional - if provided, it will be set in the notebook annotation, otherwise it will be empty
-func GetNotebookParams(namespace, configMapName, notebookPVC, notebookName, testDir string, feastProject string) NotebookTemplateParams {
- username := GetOCUser(testDir)
- command := BuildNotebookCommand(notebookName, testDir)
-
- getEnv := func(key string) string {
- val, _ := os.LookupEnv(key)
- return val
- }
-
- return NotebookTemplateParams{
- Namespace: namespace,
- IngressDomain: GetIngressDomain(testDir),
- OpenDataHubNamespace: getEnv("APPLICATIONS_NAMESPACE"),
- NotebookImage: getEnv("NOTEBOOK_IMAGE"),
- NotebookConfigMapName: configMapName,
- NotebookPVC: notebookPVC,
- Username: username,
- OC_TOKEN: GetOCToken(testDir),
- OC_SERVER: GetOCServer(testDir),
- NotebookFile: notebookName,
- Command: "[\"" + strings.Join(command, "\",\"") + "\"]",
- PipIndexUrl: getEnv("PIP_INDEX_URL"),
- PipTrustedHost: getEnv("PIP_TRUSTED_HOST"),
- FeastVerison: getEnv("FEAST_VERSION"),
- OpenAIAPIKey: getEnv("OPENAI_API_KEY"),
- FeastProject: feastProject,
- }
-}
-
-// SetupNotebookEnvironment performs all the setup steps required for notebook testing
-func SetupNotebookEnvironment(namespace, configMapName, notebookFile, featureRepoPath, pvcFile, rolebindingName, testDir string) error {
- // Set namespace context
- if err := SetNamespaceContext(namespace, testDir); err != nil {
- return fmt.Errorf("failed to set namespace context: %w", err)
- }
-
- // Create config map
- if err := CreateNotebookConfigMap(namespace, configMapName, notebookFile, featureRepoPath, testDir); err != nil {
- return fmt.Errorf("failed to create config map: %w", err)
- }
-
- // Create PVC
- if err := CreateNotebookPVC(pvcFile, testDir); err != nil {
- return fmt.Errorf("failed to create PVC: %w", err)
- }
-
- // Create rolebinding
- username := GetOCUser(testDir)
- if err := CreateNotebookRoleBinding(namespace, rolebindingName, username, testDir); err != nil {
- return fmt.Errorf("failed to create rolebinding: %w", err)
- }
-
- return nil
-}
-
-// CreateNotebookTest performs all the setup steps and creates a notebook.
-// This function handles namespace context, ConfigMap, PVC, rolebinding, and notebook creation.
-// feastProject is optional - if provided, it will be set in the notebook annotation, otherwise it will be empty
-func CreateNotebookTest(namespace, configMapName, notebookFile, featureRepoPath, pvcFile, rolebindingName, notebookPVC, notebookName, testDir string, feastProject string) {
- // Execute common setup steps
- By(fmt.Sprintf("Setting namespace context to : %s", namespace))
- Expect(SetNamespaceContext(namespace, testDir)).To(Succeed())
- fmt.Printf("Successfully set namespace context to: %s\n", namespace)
-
- By(fmt.Sprintf("Creating Config map: %s", configMapName))
- Expect(CreateNotebookConfigMap(namespace, configMapName, notebookFile, featureRepoPath, testDir)).To(Succeed())
- fmt.Printf("ConfigMap %s created successfully\n", configMapName)
-
- By(fmt.Sprintf("Creating Persistent volume claim: %s", notebookPVC))
- Expect(CreateNotebookPVC(pvcFile, testDir)).To(Succeed())
- fmt.Printf("Persistent Volume Claim %s created successfully\n", notebookPVC)
-
- By(fmt.Sprintf("Creating rolebinding %s for the user", rolebindingName))
- Expect(CreateNotebookRoleBinding(namespace, rolebindingName, GetOCUser(testDir), testDir)).To(Succeed())
- fmt.Printf("Created rolebinding %s successfully\n", rolebindingName)
-
- // Build notebook parameters and create notebook
- nbParams := GetNotebookParams(namespace, configMapName, notebookPVC, notebookName, testDir, feastProject)
- By("Creating Jupyter Notebook")
- Expect(CreateNotebook(nbParams)).To(Succeed(), "Failed to create notebook")
-}
-
-// MonitorNotebookTest monitors the notebook execution and verifies completion.
-func MonitorNotebookTest(namespace, notebookName string) {
- By("Monitoring notebook logs")
- Expect(MonitorNotebookPod(namespace, "jupyter-nb-", notebookName)).To(Succeed(), "Notebook execution failed")
-}
-
-// RunNotebookTest performs all the setup steps, creates a notebook, and monitors its execution.
-// This function is kept for backward compatibility. For new tests, use CreateNotebookTest and MonitorNotebookTest separately.
-// feastProject is optional - if provided, it will be set in the notebook annotation, otherwise it will be empty
-func RunNotebookTest(namespace, configMapName, notebookFile, featureRepoPath, pvcFile, rolebindingName, notebookPVC, notebookName, testDir string, feastProject string) {
- CreateNotebookTest(namespace, configMapName, notebookFile, featureRepoPath, pvcFile, rolebindingName, notebookPVC, notebookName, testDir, feastProject)
- MonitorNotebookTest(namespace, notebookName)
-}
diff --git a/infra/feast-operator/test/utils/test_util.go b/infra/feast-operator/test/utils/test_util.go
index a883efc020d..7b5f0f8d6a0 100644
--- a/infra/feast-operator/test/utils/test_util.go
+++ b/infra/feast-operator/test/utils/test_util.go
@@ -152,104 +152,6 @@ func checkIfConfigMapExists(namespace, configMapName string) error {
return nil
}
-// ListConfigMaps lists all ConfigMaps in the given namespace
-func ListConfigMaps(namespace string) ([]string, error) {
- cmd := exec.Command("kubectl", "get", "cm", "-n", namespace, "-o", "jsonpath={range .items[*]}{.metadata.name}{\"\\n\"}{end}")
- var out bytes.Buffer
- var stderr bytes.Buffer
- cmd.Stdout = &out
- cmd.Stderr = &stderr
-
- if err := cmd.Run(); err != nil {
- return nil, fmt.Errorf("failed to list config maps in namespace %s. Error: %v. Stderr: %s",
- namespace, err, stderr.String())
- }
-
- configMaps := strings.Split(strings.TrimSpace(out.String()), "\n")
- // Filter out empty strings
- var result []string
- for _, cm := range configMaps {
- if cm != "" {
- result = append(result, cm)
- }
- }
- return result, nil
-}
-
-// VerifyConfigMapExistsInList checks if a ConfigMap exists in the list of ConfigMaps
-func VerifyConfigMapExistsInList(namespace, configMapName string) (bool, error) {
- configMaps, err := ListConfigMaps(namespace)
- if err != nil {
- return false, err
- }
-
- for _, cm := range configMaps {
- if cm == configMapName {
- return true, nil
- }
- }
-
- return false, nil
-}
-
-// VerifyFeastConfigMapExists verifies that a ConfigMap exists and contains the specified key/file
-func VerifyFeastConfigMapExists(namespace, configMapName, expectedKey string) error {
- // First verify the ConfigMap exists
- if err := checkIfConfigMapExists(namespace, configMapName); err != nil {
- return fmt.Errorf("config map %s does not exist: %w", configMapName, err)
- }
-
- // Get the ConfigMap data to verify the key exists
- cmd := exec.Command("kubectl", "get", "cm", configMapName, "-n", namespace, "-o", "jsonpath={.data."+expectedKey+"}")
- var out bytes.Buffer
- var stderr bytes.Buffer
- cmd.Stdout = &out
- cmd.Stderr = &stderr
-
- if err := cmd.Run(); err != nil {
- return fmt.Errorf("failed to get config map data for %s in namespace %s. Error: %v. Stderr: %s",
- configMapName, namespace, err, stderr.String())
- }
-
- configContent := out.String()
- if configContent == "" {
- return fmt.Errorf("config map %s does not contain key %s", configMapName, expectedKey)
- }
-
- return nil
-}
-
-// VerifyFeastConfigMapContent verifies that a ConfigMap contains the expected feast configuration content
-// This assumes the ConfigMap and key already exist (use VerifyFeastConfigMapExists first)
-func VerifyFeastConfigMapContent(namespace, configMapName, expectedKey string, expectedContent []string) error {
- // Get the ConfigMap data
- cmd := exec.Command("kubectl", "get", "cm", configMapName, "-n", namespace, "-o", "jsonpath={.data."+expectedKey+"}")
- var out bytes.Buffer
- var stderr bytes.Buffer
- cmd.Stdout = &out
- cmd.Stderr = &stderr
-
- if err := cmd.Run(); err != nil {
- return fmt.Errorf("failed to get config map data for %s in namespace %s. Error: %v. Stderr: %s",
- configMapName, namespace, err, stderr.String())
- }
-
- configContent := out.String()
- if configContent == "" {
- return fmt.Errorf("config map %s does not contain key %s", configMapName, expectedKey)
- }
-
- // Verify all expected content strings are present
- for _, expected := range expectedContent {
- if !strings.Contains(configContent, expected) {
- return fmt.Errorf("config map %s content does not contain expected string: %s. Content:\n%s",
- configMapName, expected, configContent)
- }
- }
-
- return nil
-}
-
// validates if a kubernetes service exists using the kubectl CLI.
func checkIfKubernetesServiceExists(namespace, serviceName string) error {
cmd := exec.Command("kubectl", "get", "service", serviceName, "-n", namespace)
@@ -794,77 +696,3 @@ func ApplyFeastYamlAndVerify(namespace string, testDir string, feastDeploymentNa
By("Verifying client feature_store.yaml for expected store types")
validateFeatureStoreYaml(namespace, feastDeploymentName)
}
-
-// ReplaceNamespaceInYaml reads a YAML file, replaces all existingNamespace with the actual namespace
-func ReplaceNamespaceInYamlFilesInPlace(filePaths []string, existingNamespace string, actualNamespace string) error {
- for _, filePath := range filePaths {
- data, err := os.ReadFile(filePath)
- if err != nil {
- return fmt.Errorf("failed to read YAML file %s: %w", filePath, err)
- }
- updated := strings.ReplaceAll(string(data), existingNamespace, actualNamespace)
-
- err = os.WriteFile(filePath, []byte(updated), 0644)
- if err != nil {
- return fmt.Errorf("failed to write updated YAML file %s: %w", filePath, err)
- }
- }
- return nil
-}
-
-func ApplyFeastPermissions(fileName string, registryFilePath string, namespace string, podNamePrefix string) {
- By("Applying Feast permissions to the Feast registry pod")
-
- // 1. Get the pod by prefix
- By(fmt.Sprintf("Finding pod with prefix %q in namespace %q", podNamePrefix, namespace))
- pod, err := getPodByPrefix(namespace, podNamePrefix)
- ExpectWithOffset(1, err).NotTo(HaveOccurred())
- ExpectWithOffset(1, pod).NotTo(BeNil())
-
- podName := pod.Name
- fmt.Printf("Found pod: %s\n", podName)
-
- cmd := exec.Command(
- "oc", "cp",
- fileName, // local source file
- fmt.Sprintf("%s/%s:%s", namespace, podName, registryFilePath), // remote destination
- "-c", "registry",
- )
-
- _, err = Run(cmd, "/test/e2e_rhoai")
- ExpectWithOffset(1, err).NotTo(HaveOccurred())
-
- fmt.Printf("Successfully copied file to pod: %s\n", podName)
-
- // Run `feast apply` inside the pod to apply updated permissions
- By("Running feast apply inside the Feast registry pod")
- cmd = exec.Command(
- "oc", "exec", podName,
- "-n", namespace,
- "-c", "registry",
- "--",
- "bash", "-c",
- "cd /feast-data/credit_scoring_local/feature_repo && feast apply",
- )
- _, err = Run(cmd, "/test/e2e_rhoai")
- ExpectWithOffset(1, err).NotTo(HaveOccurred())
- fmt.Println("Feast permissions apply executed successfully")
-
- By("Validating that Feast permission has been applied")
-
- cmd = exec.Command(
- "oc", "exec", podName,
- "-n", namespace,
- "-c", "registry",
- "--",
- "feast", "permissions", "list",
- )
-
- output, err := Run(cmd, "/test/e2e_rhoai")
- ExpectWithOffset(1, err).NotTo(HaveOccurred())
-
- // Change "feast-auth" if your permission name is different
- ExpectWithOffset(1, output).To(ContainSubstring("feast-auth"), "Expected permission 'feast-auth' to exist")
-
- fmt.Println("Verified: Feast permission 'feast-auth' exists")
-}
From 11122cef17be1180a9c390234d06efdf8b51c938 Mon Sep 17 00:00:00 2001
From: Yassin Nouh <70436855+YassinNouh21@users.noreply.github.com>
Date: Sat, 10 Jan 2026 03:21:15 +0200
Subject: [PATCH 18/26] fix: Add get_table_query_string_with_alias() for
PostgreSQL subquery aliasing (#5811)
---
.../postgres_offline_store/postgres_source.py | 34 +++++
.../postgres_offline_store/test_postgres.py | 135 ++++++++++++++++++
2 files changed, 169 insertions(+)
diff --git a/sdk/python/feast/infra/offline_stores/contrib/postgres_offline_store/postgres_source.py b/sdk/python/feast/infra/offline_stores/contrib/postgres_offline_store/postgres_source.py
index 0d3045e4aa7..272b8ad0474 100644
--- a/sdk/python/feast/infra/offline_stores/contrib/postgres_offline_store/postgres_source.py
+++ b/sdk/python/feast/infra/offline_stores/contrib/postgres_offline_store/postgres_source.py
@@ -145,11 +145,45 @@ def get_table_column_names_and_types(
)
def get_table_query_string(self) -> str:
+ """Returns a string that can be used to reference this table in SQL.
+
+ For query-based sources, returns the query wrapped in parentheses.
+
+ Note:
+ When using the returned string directly in a FROM clause with PostgreSQL,
+ you may need to add an alias if this is a query-based source. PostgreSQL
+ requires all subqueries in FROM clauses to have aliases. Consider using
+ get_table_query_string_with_alias() for automatic aliasing.
+ """
if self._postgres_options._table:
return f"{self._postgres_options._table}"
else:
return f"({self._postgres_options._query})"
+ def get_table_query_string_with_alias(self, alias: str = "subquery") -> str:
+ """Returns a string for use in FROM clause with alias for PostgreSQL compatibility.
+
+ PostgreSQL requires all subqueries in FROM clauses to have aliases. This method
+ automatically adds an alias when the source is query-based.
+
+ Args:
+ alias: The alias to use for query-based sources. Defaults to "subquery".
+
+ Returns:
+ For table-based sources: the table name (no alias needed).
+ For query-based sources: "(query) AS alias".
+
+ Example::
+
+ source = PostgreSQLSource(query="SELECT * FROM my_table", ...)
+ entity_sql = f"SELECT id, ts FROM {source.get_table_query_string_with_alias()}"
+ # Results in: "SELECT id, ts FROM (SELECT * FROM my_table) AS subquery"
+ """
+ if self._postgres_options._table:
+ return f"{self._postgres_options._table}"
+ else:
+ return f"({self._postgres_options._query}) AS {alias}"
+
class PostgreSQLOptions:
def __init__(
diff --git a/sdk/python/tests/unit/infra/offline_stores/contrib/postgres_offline_store/test_postgres.py b/sdk/python/tests/unit/infra/offline_stores/contrib/postgres_offline_store/test_postgres.py
index ce98315eef4..fad837e4c16 100644
--- a/sdk/python/tests/unit/infra/offline_stores/contrib/postgres_offline_store/test_postgres.py
+++ b/sdk/python/tests/unit/infra/offline_stores/contrib/postgres_offline_store/test_postgres.py
@@ -950,3 +950,138 @@ def test_cli_date_combinations(self):
# Should not fail on parameter validation
stderr_output = result.stderr.decode()
assert "must be provided" not in stderr_output
+
+
+class TestPostgreSQLSourceQueryStringAlias:
+ """Test suite for get_table_query_string_with_alias() method.
+
+ This addresses GitHub issue #5605: PostgreSQL requires all subqueries
+ in FROM clauses to have aliases.
+ """
+
+ def test_table_source_get_table_query_string(self):
+ """Test get_table_query_string() with table-based source"""
+ source = PostgreSQLSource(
+ name="test_source",
+ table="my_schema.my_table",
+ timestamp_field="event_timestamp",
+ )
+ result = source.get_table_query_string()
+ assert result == "my_schema.my_table"
+
+ def test_query_source_get_table_query_string(self):
+ """Test get_table_query_string() with query-based source"""
+ source = PostgreSQLSource(
+ name="test_source",
+ query="SELECT * FROM my_table WHERE active = true",
+ timestamp_field="event_timestamp",
+ )
+ result = source.get_table_query_string()
+ assert result == "(SELECT * FROM my_table WHERE active = true)"
+
+ def test_table_source_with_alias(self):
+ """Test get_table_query_string_with_alias() with table-based source returns table without alias"""
+ source = PostgreSQLSource(
+ name="test_source",
+ table="my_schema.my_table",
+ timestamp_field="event_timestamp",
+ )
+ result = source.get_table_query_string_with_alias()
+ # Table sources don't need aliases
+ assert result == "my_schema.my_table"
+
+ def test_query_source_with_default_alias(self):
+ """Test get_table_query_string_with_alias() with query-based source uses default alias"""
+ source = PostgreSQLSource(
+ name="test_source",
+ query="SELECT * FROM my_table WHERE active = true",
+ timestamp_field="event_timestamp",
+ )
+ result = source.get_table_query_string_with_alias()
+ assert result == "(SELECT * FROM my_table WHERE active = true) AS subquery"
+
+ def test_query_source_with_custom_alias(self):
+ """Test get_table_query_string_with_alias() with custom alias"""
+ source = PostgreSQLSource(
+ name="test_source",
+ query="SELECT id, name FROM users",
+ timestamp_field="event_timestamp",
+ )
+ result = source.get_table_query_string_with_alias(alias="user_data")
+ assert result == "(SELECT id, name FROM users) AS user_data"
+
+ def test_table_source_with_custom_alias_ignored(self):
+ """Test get_table_query_string_with_alias() ignores alias for table-based sources"""
+ source = PostgreSQLSource(
+ name="test_source",
+ table="events",
+ timestamp_field="event_timestamp",
+ )
+ result = source.get_table_query_string_with_alias(alias="ignored_alias")
+ # Alias should be ignored for table sources
+ assert result == "events"
+
+ def test_sql_query_with_alias_is_valid(self):
+ """Test that SQL using get_table_query_string_with_alias() is syntactically valid"""
+ source = PostgreSQLSource(
+ name="test_source",
+ query="SELECT id, ts FROM raw_data",
+ timestamp_field="ts",
+ )
+
+ # Construct a SQL query using the new method
+ entity_sql = f"SELECT id, ts FROM {source.get_table_query_string_with_alias()}"
+
+ # Verify SQL is valid using sqlglot
+ parsed = sqlglot.parse(entity_sql, dialect="postgres")
+ assert len(parsed) == 1
+ assert parsed[0] is not None
+
+ def test_sql_query_without_alias_fails_in_postgres(self):
+ """Test that SQL using get_table_query_string() for query source produces invalid PostgreSQL
+
+ This demonstrates the issue that get_table_query_string_with_alias() fixes:
+ PostgreSQL requires all subqueries in FROM clauses to have aliases.
+ """
+ source = PostgreSQLSource(
+ name="test_source",
+ query="SELECT id, ts FROM raw_data",
+ timestamp_field="ts",
+ )
+
+ # Using the old method (without alias) for query-based source
+ entity_sql_without_alias = (
+ f"SELECT id, ts FROM {source.get_table_query_string()}"
+ )
+
+ # This produces: SELECT id, ts FROM (SELECT id, ts FROM raw_data)
+ # which is invalid in PostgreSQL (subquery needs alias)
+ # sqlglot is lenient and may parse it, but PostgreSQL would reject it
+ assert "AS" not in entity_sql_without_alias, (
+ "get_table_query_string() should not add alias"
+ )
+
+ # Using the new method (with alias) produces valid SQL
+ entity_sql_with_alias = (
+ f"SELECT id, ts FROM {source.get_table_query_string_with_alias()}"
+ )
+ assert "AS subquery" in entity_sql_with_alias
+
+ def test_complex_query_with_alias(self):
+ """Test get_table_query_string_with_alias() with complex nested query"""
+ complex_query = """
+ SELECT u.id, u.name, o.total
+ FROM users u
+ JOIN orders o ON u.id = o.user_id
+ WHERE o.created_at > '2023-01-01'
+ """
+ source = PostgreSQLSource(
+ name="test_source",
+ query=complex_query,
+ timestamp_field="created_at",
+ )
+
+ result = source.get_table_query_string_with_alias(alias="user_orders")
+ assert result.startswith("(")
+ assert result.endswith(") AS user_orders")
+ assert "SELECT u.id" in result
From 6e401d9471ca7747da38fea5c0027d5718c9096f Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Mon, 12 Jan 2026 13:31:52 +0000
Subject: [PATCH 19/26] chore(deps): Bump urllib3 from 2.6.2 to 2.6.3 in
/sdk/python/requirements (#5822)
chore(deps): Bump urllib3 in /sdk/python/requirements
Bumps [urllib3](https://github.com/urllib3/urllib3) from 2.6.2 to 2.6.3.
- [Release notes](https://github.com/urllib3/urllib3/releases)
- [Changelog](https://github.com/urllib3/urllib3/blob/main/CHANGES.rst)
- [Commits](https://github.com/urllib3/urllib3/compare/2.6.2...2.6.3)
---
updated-dependencies:
- dependency-name: urllib3
dependency-version: 2.6.3
dependency-type: direct:production
...
Signed-off-by: dependabot[bot]
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
---
sdk/python/requirements/py3.10-ci-requirements.txt | 6 +++---
sdk/python/requirements/py3.10-minimal-requirements.txt | 6 +++---
.../requirements/py3.10-minimal-sdist-requirements.txt | 6 +++---
sdk/python/requirements/py3.10-requirements.txt | 6 +++---
sdk/python/requirements/py3.11-ci-requirements.txt | 6 +++---
sdk/python/requirements/py3.11-minimal-requirements.txt | 6 +++---
.../requirements/py3.11-minimal-sdist-requirements.txt | 6 +++---
sdk/python/requirements/py3.11-requirements.txt | 6 +++---
sdk/python/requirements/py3.12-ci-requirements.txt | 6 +++---
sdk/python/requirements/py3.12-minimal-requirements.txt | 6 +++---
.../requirements/py3.12-minimal-sdist-requirements.txt | 6 +++---
sdk/python/requirements/py3.12-requirements.txt | 6 +++---
12 files changed, 36 insertions(+), 36 deletions(-)
diff --git a/sdk/python/requirements/py3.10-ci-requirements.txt b/sdk/python/requirements/py3.10-ci-requirements.txt
index 2c448173938..554c9eba60f 100644
--- a/sdk/python/requirements/py3.10-ci-requirements.txt
+++ b/sdk/python/requirements/py3.10-ci-requirements.txt
@@ -5988,9 +5988,9 @@ uri-template==1.3.0 \
--hash=sha256:0e00f8eb65e18c7de20d595a14336e9f337ead580c70934141624b6d1ffdacc7 \
--hash=sha256:a44a133ea12d44a0c0f06d7d42a52d71282e77e2f937d8abd5655b8d56fc1363
# via jsonschema
-urllib3==2.6.2 \
- --hash=sha256:016f9c98bb7e98085cb2b4b17b87d2c702975664e4f060c6532e64d1c1a5e797 \
- --hash=sha256:ec21cddfe7724fc7cb4ba4bea7aa8e2ef36f607a4bab81aa6ce42a13dc3f03dd
+urllib3==2.6.3 \
+ --hash=sha256:1b62b6884944a57dbe321509ab94fd4d3b307075e0c2eae991ac71ee15ad38ed \
+ --hash=sha256:bf272323e553dfb2e87d9bfd225ca7b0f467b919d7bbd355436d3fd37cb0acd4
# via
# feast (setup.py)
# botocore
diff --git a/sdk/python/requirements/py3.10-minimal-requirements.txt b/sdk/python/requirements/py3.10-minimal-requirements.txt
index 66d34c10570..49c47aba783 100644
--- a/sdk/python/requirements/py3.10-minimal-requirements.txt
+++ b/sdk/python/requirements/py3.10-minimal-requirements.txt
@@ -2812,9 +2812,9 @@ ujson==5.11.0 \
--hash=sha256:fa79fdb47701942c2132a9dd2297a1a85941d966d8c87bfd9e29b0cf423f26cc \
--hash=sha256:fac6c0649d6b7c3682a0a6e18d3de6857977378dce8d419f57a0b20e3d775b39
# via pymilvus
-urllib3==2.6.2 \
- --hash=sha256:016f9c98bb7e98085cb2b4b17b87d2c702975664e4f060c6532e64d1c1a5e797 \
- --hash=sha256:ec21cddfe7724fc7cb4ba4bea7aa8e2ef36f607a4bab81aa6ce42a13dc3f03dd
+urllib3==2.6.3 \
+ --hash=sha256:1b62b6884944a57dbe321509ab94fd4d3b307075e0c2eae991ac71ee15ad38ed \
+ --hash=sha256:bf272323e553dfb2e87d9bfd225ca7b0f467b919d7bbd355436d3fd37cb0acd4
# via
# botocore
# kubernetes
diff --git a/sdk/python/requirements/py3.10-minimal-sdist-requirements.txt b/sdk/python/requirements/py3.10-minimal-sdist-requirements.txt
index 1c92409c888..159a6a266ae 100644
--- a/sdk/python/requirements/py3.10-minimal-sdist-requirements.txt
+++ b/sdk/python/requirements/py3.10-minimal-sdist-requirements.txt
@@ -3092,9 +3092,9 @@ ujson==5.11.0 \
--hash=sha256:fa79fdb47701942c2132a9dd2297a1a85941d966d8c87bfd9e29b0cf423f26cc \
--hash=sha256:fac6c0649d6b7c3682a0a6e18d3de6857977378dce8d419f57a0b20e3d775b39
# via pymilvus
-urllib3==2.6.2 \
- --hash=sha256:016f9c98bb7e98085cb2b4b17b87d2c702975664e4f060c6532e64d1c1a5e797 \
- --hash=sha256:ec21cddfe7724fc7cb4ba4bea7aa8e2ef36f607a4bab81aa6ce42a13dc3f03dd
+urllib3==2.6.3 \
+ --hash=sha256:1b62b6884944a57dbe321509ab94fd4d3b307075e0c2eae991ac71ee15ad38ed \
+ --hash=sha256:bf272323e553dfb2e87d9bfd225ca7b0f467b919d7bbd355436d3fd37cb0acd4
# via
# botocore
# kubernetes
diff --git a/sdk/python/requirements/py3.10-requirements.txt b/sdk/python/requirements/py3.10-requirements.txt
index 6f38b0c16c6..bf89b08b92a 100644
--- a/sdk/python/requirements/py3.10-requirements.txt
+++ b/sdk/python/requirements/py3.10-requirements.txt
@@ -1326,9 +1326,9 @@ tzdata==2025.3 \
--hash=sha256:06a47e5700f3081aab02b2e513160914ff0694bce9947d6b76ebd6bf57cfc5d1 \
--hash=sha256:de39c2ca5dc7b0344f2eba86f49d614019d29f060fc4ebc8a417896a620b56a7
# via pandas
-urllib3==2.6.2 \
- --hash=sha256:016f9c98bb7e98085cb2b4b17b87d2c702975664e4f060c6532e64d1c1a5e797 \
- --hash=sha256:ec21cddfe7724fc7cb4ba4bea7aa8e2ef36f607a4bab81aa6ce42a13dc3f03dd
+urllib3==2.6.3 \
+ --hash=sha256:1b62b6884944a57dbe321509ab94fd4d3b307075e0c2eae991ac71ee15ad38ed \
+ --hash=sha256:bf272323e553dfb2e87d9bfd225ca7b0f467b919d7bbd355436d3fd37cb0acd4
# via requests
uvicorn[standard]==0.34.0 \
--hash=sha256:023dc038422502fa28a09c7a30bf2b6991512da7dcdb8fd35fe57cfc154126f4 \
diff --git a/sdk/python/requirements/py3.11-ci-requirements.txt b/sdk/python/requirements/py3.11-ci-requirements.txt
index 091236521ff..b3bbdb5ad4d 100644
--- a/sdk/python/requirements/py3.11-ci-requirements.txt
+++ b/sdk/python/requirements/py3.11-ci-requirements.txt
@@ -6229,9 +6229,9 @@ uri-template==1.3.0 \
--hash=sha256:0e00f8eb65e18c7de20d595a14336e9f337ead580c70934141624b6d1ffdacc7 \
--hash=sha256:a44a133ea12d44a0c0f06d7d42a52d71282e77e2f937d8abd5655b8d56fc1363
# via jsonschema
-urllib3==2.6.2 \
- --hash=sha256:016f9c98bb7e98085cb2b4b17b87d2c702975664e4f060c6532e64d1c1a5e797 \
- --hash=sha256:ec21cddfe7724fc7cb4ba4bea7aa8e2ef36f607a4bab81aa6ce42a13dc3f03dd
+urllib3==2.6.3 \
+ --hash=sha256:1b62b6884944a57dbe321509ab94fd4d3b307075e0c2eae991ac71ee15ad38ed \
+ --hash=sha256:bf272323e553dfb2e87d9bfd225ca7b0f467b919d7bbd355436d3fd37cb0acd4
# via
# feast (setup.py)
# botocore
diff --git a/sdk/python/requirements/py3.11-minimal-requirements.txt b/sdk/python/requirements/py3.11-minimal-requirements.txt
index 93613cb6e50..04ac9943f7b 100644
--- a/sdk/python/requirements/py3.11-minimal-requirements.txt
+++ b/sdk/python/requirements/py3.11-minimal-requirements.txt
@@ -2816,9 +2816,9 @@ ujson==5.11.0 \
--hash=sha256:fa79fdb47701942c2132a9dd2297a1a85941d966d8c87bfd9e29b0cf423f26cc \
--hash=sha256:fac6c0649d6b7c3682a0a6e18d3de6857977378dce8d419f57a0b20e3d775b39
# via pymilvus
-urllib3==2.6.2 \
- --hash=sha256:016f9c98bb7e98085cb2b4b17b87d2c702975664e4f060c6532e64d1c1a5e797 \
- --hash=sha256:ec21cddfe7724fc7cb4ba4bea7aa8e2ef36f607a4bab81aa6ce42a13dc3f03dd
+urllib3==2.6.3 \
+ --hash=sha256:1b62b6884944a57dbe321509ab94fd4d3b307075e0c2eae991ac71ee15ad38ed \
+ --hash=sha256:bf272323e553dfb2e87d9bfd225ca7b0f467b919d7bbd355436d3fd37cb0acd4
# via
# botocore
# kubernetes
diff --git a/sdk/python/requirements/py3.11-minimal-sdist-requirements.txt b/sdk/python/requirements/py3.11-minimal-sdist-requirements.txt
index 3fb8dbf6562..56fa579fe39 100644
--- a/sdk/python/requirements/py3.11-minimal-sdist-requirements.txt
+++ b/sdk/python/requirements/py3.11-minimal-sdist-requirements.txt
@@ -3092,9 +3092,9 @@ ujson==5.11.0 \
--hash=sha256:fa79fdb47701942c2132a9dd2297a1a85941d966d8c87bfd9e29b0cf423f26cc \
--hash=sha256:fac6c0649d6b7c3682a0a6e18d3de6857977378dce8d419f57a0b20e3d775b39
# via pymilvus
-urllib3==2.6.2 \
- --hash=sha256:016f9c98bb7e98085cb2b4b17b87d2c702975664e4f060c6532e64d1c1a5e797 \
- --hash=sha256:ec21cddfe7724fc7cb4ba4bea7aa8e2ef36f607a4bab81aa6ce42a13dc3f03dd
+urllib3==2.6.3 \
+ --hash=sha256:1b62b6884944a57dbe321509ab94fd4d3b307075e0c2eae991ac71ee15ad38ed \
+ --hash=sha256:bf272323e553dfb2e87d9bfd225ca7b0f467b919d7bbd355436d3fd37cb0acd4
# via
# botocore
# kubernetes
diff --git a/sdk/python/requirements/py3.11-requirements.txt b/sdk/python/requirements/py3.11-requirements.txt
index 8253a7a0800..fcae25c341f 100644
--- a/sdk/python/requirements/py3.11-requirements.txt
+++ b/sdk/python/requirements/py3.11-requirements.txt
@@ -1293,9 +1293,9 @@ tzdata==2025.3 \
--hash=sha256:06a47e5700f3081aab02b2e513160914ff0694bce9947d6b76ebd6bf57cfc5d1 \
--hash=sha256:de39c2ca5dc7b0344f2eba86f49d614019d29f060fc4ebc8a417896a620b56a7
# via pandas
-urllib3==2.6.2 \
- --hash=sha256:016f9c98bb7e98085cb2b4b17b87d2c702975664e4f060c6532e64d1c1a5e797 \
- --hash=sha256:ec21cddfe7724fc7cb4ba4bea7aa8e2ef36f607a4bab81aa6ce42a13dc3f03dd
+urllib3==2.6.3 \
+ --hash=sha256:1b62b6884944a57dbe321509ab94fd4d3b307075e0c2eae991ac71ee15ad38ed \
+ --hash=sha256:bf272323e553dfb2e87d9bfd225ca7b0f467b919d7bbd355436d3fd37cb0acd4
# via requests
uvicorn[standard]==0.34.0 \
--hash=sha256:023dc038422502fa28a09c7a30bf2b6991512da7dcdb8fd35fe57cfc154126f4 \
diff --git a/sdk/python/requirements/py3.12-ci-requirements.txt b/sdk/python/requirements/py3.12-ci-requirements.txt
index 50efe8231a9..48c1fc21371 100644
--- a/sdk/python/requirements/py3.12-ci-requirements.txt
+++ b/sdk/python/requirements/py3.12-ci-requirements.txt
@@ -6217,9 +6217,9 @@ uri-template==1.3.0 \
--hash=sha256:0e00f8eb65e18c7de20d595a14336e9f337ead580c70934141624b6d1ffdacc7 \
--hash=sha256:a44a133ea12d44a0c0f06d7d42a52d71282e77e2f937d8abd5655b8d56fc1363
# via jsonschema
-urllib3==2.6.2 \
- --hash=sha256:016f9c98bb7e98085cb2b4b17b87d2c702975664e4f060c6532e64d1c1a5e797 \
- --hash=sha256:ec21cddfe7724fc7cb4ba4bea7aa8e2ef36f607a4bab81aa6ce42a13dc3f03dd
+urllib3==2.6.3 \
+ --hash=sha256:1b62b6884944a57dbe321509ab94fd4d3b307075e0c2eae991ac71ee15ad38ed \
+ --hash=sha256:bf272323e553dfb2e87d9bfd225ca7b0f467b919d7bbd355436d3fd37cb0acd4
# via
# feast (setup.py)
# botocore
diff --git a/sdk/python/requirements/py3.12-minimal-requirements.txt b/sdk/python/requirements/py3.12-minimal-requirements.txt
index d2064d4ed78..707d8cdddad 100644
--- a/sdk/python/requirements/py3.12-minimal-requirements.txt
+++ b/sdk/python/requirements/py3.12-minimal-requirements.txt
@@ -2808,9 +2808,9 @@ ujson==5.11.0 \
--hash=sha256:fa79fdb47701942c2132a9dd2297a1a85941d966d8c87bfd9e29b0cf423f26cc \
--hash=sha256:fac6c0649d6b7c3682a0a6e18d3de6857977378dce8d419f57a0b20e3d775b39
# via pymilvus
-urllib3==2.6.2 \
- --hash=sha256:016f9c98bb7e98085cb2b4b17b87d2c702975664e4f060c6532e64d1c1a5e797 \
- --hash=sha256:ec21cddfe7724fc7cb4ba4bea7aa8e2ef36f607a4bab81aa6ce42a13dc3f03dd
+urllib3==2.6.3 \
+ --hash=sha256:1b62b6884944a57dbe321509ab94fd4d3b307075e0c2eae991ac71ee15ad38ed \
+ --hash=sha256:bf272323e553dfb2e87d9bfd225ca7b0f467b919d7bbd355436d3fd37cb0acd4
# via
# botocore
# kubernetes
diff --git a/sdk/python/requirements/py3.12-minimal-sdist-requirements.txt b/sdk/python/requirements/py3.12-minimal-sdist-requirements.txt
index ac6f755be87..b787047fe86 100644
--- a/sdk/python/requirements/py3.12-minimal-sdist-requirements.txt
+++ b/sdk/python/requirements/py3.12-minimal-sdist-requirements.txt
@@ -3084,9 +3084,9 @@ ujson==5.11.0 \
--hash=sha256:fa79fdb47701942c2132a9dd2297a1a85941d966d8c87bfd9e29b0cf423f26cc \
--hash=sha256:fac6c0649d6b7c3682a0a6e18d3de6857977378dce8d419f57a0b20e3d775b39
# via pymilvus
-urllib3==2.6.2 \
- --hash=sha256:016f9c98bb7e98085cb2b4b17b87d2c702975664e4f060c6532e64d1c1a5e797 \
- --hash=sha256:ec21cddfe7724fc7cb4ba4bea7aa8e2ef36f607a4bab81aa6ce42a13dc3f03dd
+urllib3==2.6.3 \
+ --hash=sha256:1b62b6884944a57dbe321509ab94fd4d3b307075e0c2eae991ac71ee15ad38ed \
+ --hash=sha256:bf272323e553dfb2e87d9bfd225ca7b0f467b919d7bbd355436d3fd37cb0acd4
# via
# botocore
# kubernetes
diff --git a/sdk/python/requirements/py3.12-requirements.txt b/sdk/python/requirements/py3.12-requirements.txt
index 697d4f25b0c..cefe5dbf8c7 100644
--- a/sdk/python/requirements/py3.12-requirements.txt
+++ b/sdk/python/requirements/py3.12-requirements.txt
@@ -1289,9 +1289,9 @@ tzdata==2025.3 \
--hash=sha256:06a47e5700f3081aab02b2e513160914ff0694bce9947d6b76ebd6bf57cfc5d1 \
--hash=sha256:de39c2ca5dc7b0344f2eba86f49d614019d29f060fc4ebc8a417896a620b56a7
# via pandas
-urllib3==2.6.2 \
- --hash=sha256:016f9c98bb7e98085cb2b4b17b87d2c702975664e4f060c6532e64d1c1a5e797 \
- --hash=sha256:ec21cddfe7724fc7cb4ba4bea7aa8e2ef36f607a4bab81aa6ce42a13dc3f03dd
+urllib3==2.6.3 \
+ --hash=sha256:1b62b6884944a57dbe321509ab94fd4d3b307075e0c2eae991ac71ee15ad38ed \
+ --hash=sha256:bf272323e553dfb2e87d9bfd225ca7b0f467b919d7bbd355436d3fd37cb0acd4
# via requests
uvicorn[standard]==0.34.0 \
--hash=sha256:023dc038422502fa28a09c7a30bf2b6991512da7dcdb8fd35fe57cfc154126f4 \
From ef3dc050e1072f3d50299e33a85fcf612ab8ce3f Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Mon, 12 Jan 2026 13:32:04 +0000
Subject: [PATCH 20/26] chore(deps): Bump golang.org/x/crypto from 0.43.0 to
0.45.0 (#5819)
Bumps [golang.org/x/crypto](https://github.com/golang/crypto) from 0.43.0 to 0.45.0.
- [Commits](https://github.com/golang/crypto/compare/v0.43.0...v0.45.0)
---
updated-dependencies:
- dependency-name: golang.org/x/crypto
dependency-version: 0.45.0
dependency-type: indirect
...
Signed-off-by: dependabot[bot]
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
---
go.mod | 15 ++++++-------
go.sum | 66 ++++++++++++++++++++++++++--------------------------------
2 files changed, 38 insertions(+), 43 deletions(-)
diff --git a/go.mod b/go.mod
index 7f918de268e..5b2592536df 100644
--- a/go.mod
+++ b/go.mod
@@ -5,6 +5,7 @@ go 1.24.0
toolchain go1.24.4
require (
+ cloud.google.com/go/storage v1.58.0
github.com/apache/arrow/go/v17 v17.0.0
github.com/aws/aws-sdk-go-v2 v1.36.4
github.com/aws/aws-sdk-go-v2/config v1.29.14
@@ -39,7 +40,6 @@ require (
cloud.google.com/go/compute/metadata v0.9.0 // indirect
cloud.google.com/go/iam v1.5.3 // indirect
cloud.google.com/go/monitoring v1.24.2 // indirect
- cloud.google.com/go/storage v1.58.0 // indirect
github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.29.0 // indirect
github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/metric v0.54.0 // indirect
github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/resourcemapping v0.54.0 // indirect
@@ -101,15 +101,16 @@ require (
go.opentelemetry.io/otel/metric v1.38.0 // indirect
go.opentelemetry.io/otel/sdk/metric v1.38.0 // indirect
go.opentelemetry.io/proto/otlp v1.7.1 // indirect
- golang.org/x/crypto v0.43.0 // indirect
+ golang.org/x/crypto v0.45.0 // indirect
golang.org/x/exp v0.0.0-20240909161429-701f63a606c0 // indirect
- golang.org/x/mod v0.28.0 // indirect
- golang.org/x/net v0.46.0 // indirect
+ golang.org/x/mod v0.29.0 // indirect
+ golang.org/x/net v0.47.0 // indirect
golang.org/x/oauth2 v0.33.0 // indirect
- golang.org/x/sys v0.37.0 // indirect
- golang.org/x/text v0.30.0 // indirect
+ golang.org/x/sys v0.38.0 // indirect
+ golang.org/x/telemetry v0.0.0-20251008203120-078029d740a8 // indirect
+ golang.org/x/text v0.31.0 // indirect
golang.org/x/time v0.14.0 // indirect
- golang.org/x/tools v0.37.0 // indirect
+ golang.org/x/tools v0.38.0 // indirect
golang.org/x/xerrors v0.0.0-20240903120638-7835f813f4da // indirect
google.golang.org/api v0.256.0 // indirect
google.golang.org/genproto v0.0.0-20250922171735-9219d122eba9 // indirect
diff --git a/go.sum b/go.sum
index 7d306beabb6..aff636cad1b 100644
--- a/go.sum
+++ b/go.sum
@@ -10,14 +10,22 @@ cloud.google.com/go/compute/metadata v0.9.0 h1:pDUj4QMoPejqq20dK0Pg2N4yG9zIkYGdB
cloud.google.com/go/compute/metadata v0.9.0/go.mod h1:E0bWwX5wTnLPedCKqk3pJmVgCBSM6qQI1yTBdEb3C10=
cloud.google.com/go/iam v1.5.3 h1:+vMINPiDF2ognBJ97ABAYYwRgsaqxPbQDlMnbHMjolc=
cloud.google.com/go/iam v1.5.3/go.mod h1:MR3v9oLkZCTlaqljW6Eb2d3HGDGK5/bDv93jhfISFvU=
+cloud.google.com/go/logging v1.13.0 h1:7j0HgAp0B94o1YRDqiqm26w4q1rDMH7XNRU34lJXHYc=
+cloud.google.com/go/logging v1.13.0/go.mod h1:36CoKh6KA/M0PbhPKMq6/qety2DCAErbhXT62TuXALA=
+cloud.google.com/go/longrunning v0.7.0 h1:FV0+SYF1RIj59gyoWDRi45GiYUMM3K1qO51qoboQT1E=
+cloud.google.com/go/longrunning v0.7.0/go.mod h1:ySn2yXmjbK9Ba0zsQqunhDkYi0+9rlXIwnoAf+h+TPY=
cloud.google.com/go/monitoring v1.24.2 h1:5OTsoJ1dXYIiMiuL+sYscLc9BumrL3CarVLL7dd7lHM=
cloud.google.com/go/monitoring v1.24.2/go.mod h1:x7yzPWcgDRnPEv3sI+jJGBkwl5qINf+6qY4eq0I9B4U=
cloud.google.com/go/storage v1.58.0 h1:PflFXlmFJjG/nBeR9B7pKddLQWaFaRWx4uUi/LyNxxo=
cloud.google.com/go/storage v1.58.0/go.mod h1:cMWbtM+anpC74gn6qjLh+exqYcfmB9Hqe5z6adx+CLI=
+cloud.google.com/go/trace v1.11.6 h1:2O2zjPzqPYAHrn3OKl029qlqG6W8ZdYaOWRyr8NgMT4=
+cloud.google.com/go/trace v1.11.6/go.mod h1:GA855OeDEBiBMzcckLPE2kDunIpC72N+Pq8WFieFjnI=
github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.29.0 h1:UQUsRi8WTzhZntp5313l+CHIAT95ojUI2lpP/ExlZa4=
github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.29.0/go.mod h1:Cz6ft6Dkn3Et6l2v2a9/RpN7epQ1GtDlO6lj8bEcOvw=
github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/metric v0.54.0 h1:lhhYARPUu3LmHysQ/igznQphfzynnqI3D75oUyw1HXk=
github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/metric v0.54.0/go.mod h1:l9rva3ApbBpEJxSNYnwT9N4CDLrWgtq3u8736C5hyJw=
+github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/cloudmock v0.54.0 h1:xfK3bbi6F2RDtaZFtUdKO3osOBIhNb+xTs8lFW6yx9o=
+github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/cloudmock v0.54.0/go.mod h1:vB2GH9GAYYJTO3mEn8oYwzEdhlayZIdQz6zdzgUIRvA=
github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/resourcemapping v0.54.0 h1:s0WlVbf9qpvkh1c/uDAPElam0WrL7fHRIidgZJ7UqZI=
github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/resourcemapping v0.54.0/go.mod h1:Mf6O40IAyB9zR/1J8nGDDPirZQQPbYJni8Yisy7NTMc=
github.com/JohnCGriffin/overflow v0.0.0-20211019200055-46fa312c352c h1:RGWPOewvKIROun94nF7v2cua9qP+thov/7M50KEoeSU=
@@ -84,8 +92,11 @@ github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8Yc
github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f h1:lO4WD4F/rVNCu3HqELle0jiPLLBs70cWOduZpkS1E78=
github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f/go.mod h1:cuUVRXasLTGF7a8hSLbxyZXjz+1KgoB3wDUb6vlszIc=
github.com/envoyproxy/go-control-plane v0.13.4 h1:zEqyPVyku6IvWCFwux4x9RxkLOMUL+1vC9xUFv5l2/M=
+github.com/envoyproxy/go-control-plane v0.13.4/go.mod h1:kDfuBlDVsSj2MjrLEtRWtHlsWIFcGyB2RMO44Dc5GZA=
github.com/envoyproxy/go-control-plane/envoy v1.32.4 h1:jb83lalDRZSpPWW2Z7Mck/8kXZ5CQAFYVjQcdVIr83A=
github.com/envoyproxy/go-control-plane/envoy v1.32.4/go.mod h1:Gzjc5k8JcJswLjAx1Zm+wSYE20UrLtt7JZMWiWQXQEw=
+github.com/envoyproxy/go-control-plane/ratelimit v0.1.0 h1:/G9QYbddjL25KvtKTv3an9lx6VBE2cnb8wp1vEGNYGI=
+github.com/envoyproxy/go-control-plane/ratelimit v0.1.0/go.mod h1:Wk+tMFAFbCXaJPzVVHnPgRKdUdwW/KdbRt94AzgRee4=
github.com/envoyproxy/protoc-gen-validate v1.2.1 h1:DEo3O99U8j4hBFwbJfrz9VtgcDfUKS7KJ7spH3d86P8=
github.com/envoyproxy/protoc-gen-validate v1.2.1/go.mod h1:d/C80l/jxXLdfEIhX1W2TmLfsJ31lvEjwamM4DxlWXU=
github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2Wg=
@@ -110,6 +121,8 @@ github.com/google/flatbuffers v24.3.25+incompatible h1:CX395cjN9Kke9mmalRoL3d81A
github.com/google/flatbuffers v24.3.25+incompatible/go.mod h1:1AeVuKshWv4vARoZatz6mlQ0JxURH0Kv5+zNeJKJCa8=
github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8=
github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU=
+github.com/google/martian/v3 v3.3.3 h1:DIhPTQrbPkgs2yJYdXU/eNACCG5DVQjySNRNlflZ9Fc=
+github.com/google/martian/v3 v3.3.3/go.mod h1:iEPrYcgCF7jA9OtScMFQyAlZZ4YXTKEtJ1E6RWzmBA0=
github.com/google/s2a-go v0.1.9 h1:LGD7gtMgezd8a/Xak7mEWL0PjoTQFvpRudN895yqKW0=
github.com/google/s2a-go v0.1.9/go.mod h1:YA0Ei2ZQL3acow2O62kdp9UlnvMmU7kA6Eutn0dXayM=
github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
@@ -154,9 +167,8 @@ github.com/redis/go-redis/v9 v9.6.1 h1:HHDteefn6ZkTtY5fGUE8tj8uy85AHk6zP7CpzIAM0
github.com/redis/go-redis/v9 v9.6.1/go.mod h1:0C0c6ycQsdpVNQpxb1njEQIqkx5UcsM8FJCQLgE9+RA=
github.com/roberson-io/mmh3 v0.0.0-20190729202758-fdfce3ba6225 h1:ZMsPCp7oYgjoIFt1c+sM2qojxZXotSYcMF8Ur9/LJlM=
github.com/roberson-io/mmh3 v0.0.0-20190729202758-fdfce3ba6225/go.mod h1:XEESr+X1SY8ZSuc3jqsTlb3clCkqQJ4DcF3Qxv1N3PM=
-github.com/rogpeppe/go-internal v1.13.1 h1:KvO1DLK/DRN07sQ1LQKScxyZJuNnedQ5/wKSR38lUII=
-github.com/rogpeppe/go-internal v1.13.1/go.mod h1:uMEvuHeurkdAXX61udpOXGD/AzZDWNMNyH2VO9fmH0o=
github.com/rogpeppe/go-internal v1.14.1 h1:UQB4HGPB6osV0SQTLymcB4TgvyWu6ZyliaW0tI/otEQ=
+github.com/rogpeppe/go-internal v1.14.1/go.mod h1:MaRKkUm5W0goXpeCfT7UZI6fk/L7L7so1lCWt35ZSgc=
github.com/rs/xid v1.5.0/go.mod h1:trrq9SKmegXys3aeAKXMUTdJsYXVwGY3RLcfgqegfbg=
github.com/rs/zerolog v1.33.0 h1:1cU2KZkvPxNyfgEmhHAz/1A9Bz+llsdYzklWFzgp0r8=
github.com/rs/zerolog v1.33.0/go.mod h1:/7mN4D5sKwJLZQ2b/znpjC3/GQWY/xaDXUM0kKWRHss=
@@ -174,8 +186,6 @@ github.com/zeebo/errs v1.4.0 h1:XNdoD/RRMKP7HD0UhJnIzUy74ISdGGxURlYG8HSWSfM=
github.com/zeebo/errs v1.4.0/go.mod h1:sgbWHsvVuTPHcqJJGQ1WhI5KbWlHYz+2+2C/LSEtCw4=
github.com/zeebo/xxh3 v1.0.2 h1:xZmwmqxHZA8AI603jOQ0tMqmBr9lPeFwGg6d+xy9DC0=
github.com/zeebo/xxh3 v1.0.2/go.mod h1:5NWz9Sef7zIDm2JHfFlcQvNekmcEl9ekUZQQKCYaDcA=
-go.opentelemetry.io/auto/sdk v1.1.0 h1:cH53jehLUN6UFLY71z+NDOiNJqDdPRaXzTel0sJySYA=
-go.opentelemetry.io/auto/sdk v1.1.0/go.mod h1:3wSPjt5PWp2RhlCcmmOial7AvC4DQqZb7a7wCow3W8A=
go.opentelemetry.io/auto/sdk v1.2.1 h1:jXsnJ4Lmnqd11kwkBV2LgLoFMZKizbCi5fNZ/ipaZ64=
go.opentelemetry.io/auto/sdk v1.2.1/go.mod h1:KRTj+aOaElaLi+wW1kO/DZRXwkF4C5xPbEe3ZiIhN7Y=
go.opentelemetry.io/contrib/detectors/gcp v1.36.0 h1:F7q2tNlCaHY9nMKHR6XH9/qkp8FktLnIcy6jJNyOCQw=
@@ -190,6 +200,8 @@ go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.38.0 h1:GqRJVj7UmLjCVyVJ3ZF
go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.38.0/go.mod h1:ri3aaHSmCTVYu2AWv44YMauwAQc0aqI9gHKIcSbI1pU=
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.38.0 h1:aTL7F04bJHUlztTsNGJ2l+6he8c+y/b//eR0jjjemT4=
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.38.0/go.mod h1:kldtb7jDTeol0l3ewcmd8SDvx3EmIE7lyvqbasU3QC4=
+go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.38.0 h1:wm/Q0GAAykXv83wzcKzGGqAnnfLFyFe7RslekZuv+VI=
+go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.38.0/go.mod h1:ra3Pa40+oKjvYh+ZD3EdxFZZB0xdMfuileHAm4nNN7w=
go.opentelemetry.io/otel/metric v1.38.0 h1:Kl6lzIYGAh5M159u9NgiRkmoMKjvbsKtYRwgfrA6WpA=
go.opentelemetry.io/otel/metric v1.38.0/go.mod h1:kB5n/QoRM8YwmUahxvI3bO34eVtQf2i4utNVLr9gEmI=
go.opentelemetry.io/otel/sdk v1.38.0 h1:l48sr5YbNf2hpCUj/FoGhW9yDkl+Ma+LrVl8qaM5b+E=
@@ -202,42 +214,32 @@ go.opentelemetry.io/proto/otlp v1.7.1 h1:gTOMpGDb0WTBOP8JaO72iL3auEZhVmAQg4ipjOV
go.opentelemetry.io/proto/otlp v1.7.1/go.mod h1:b2rVh6rfI/s2pHWNlB7ILJcRALpcNDzKhACevjI+ZnE=
go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto=
go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE=
-golang.org/x/crypto v0.43.0 h1:dduJYIi3A3KOfdGOHX8AVZ/jGiyPa3IbBozJ5kNuE04=
-golang.org/x/crypto v0.43.0/go.mod h1:BFbav4mRNlXJL4wNeejLpWxB7wMbc79PdRGhWKncxR0=
+golang.org/x/crypto v0.45.0 h1:jMBrvKuj23MTlT0bQEOBcAE0mjg8mK9RXFhRH6nyF3Q=
+golang.org/x/crypto v0.45.0/go.mod h1:XTGrrkGJve7CYK7J8PEww4aY7gM3qMCElcJQ8n8JdX4=
golang.org/x/exp v0.0.0-20240909161429-701f63a606c0 h1:e66Fs6Z+fZTbFBAxKfP3PALWBtpfqks2bwGcexMxgtk=
golang.org/x/exp v0.0.0-20240909161429-701f63a606c0/go.mod h1:2TbTHSBQa924w8M6Xs1QcRcFwyucIwBGpK1p2f1YFFY=
-golang.org/x/mod v0.26.0 h1:EGMPT//Ezu+ylkCijjPc+f4Aih7sZvaAr+O3EHBxvZg=
-golang.org/x/mod v0.26.0/go.mod h1:/j6NAhSk8iQ723BGAUyoAcn7SlD7s15Dp9Nd/SfeaFQ=
-golang.org/x/mod v0.28.0 h1:gQBtGhjxykdjY9YhZpSlZIsbnaE2+PgjfLWUQTnoZ1U=
-golang.org/x/mod v0.28.0/go.mod h1:yfB/L0NOf/kmEbXjzCPOx1iK1fRutOydrCMsqRhEBxI=
-golang.org/x/net v0.43.0 h1:lat02VYK2j4aLzMzecihNvTlJNQUq316m2Mr9rnM6YE=
-golang.org/x/net v0.43.0/go.mod h1:vhO1fvI4dGsIjh73sWfUVjj3N7CA9WkKJNQm2svM6Jg=
-golang.org/x/net v0.46.0 h1:giFlY12I07fugqwPuWJi68oOnpfqFnJIJzaIIm2JVV4=
-golang.org/x/net v0.46.0/go.mod h1:Q9BGdFy1y4nkUwiLvT5qtyhAnEHgnQ/zd8PfU6nc210=
+golang.org/x/mod v0.29.0 h1:HV8lRxZC4l2cr3Zq1LvtOsi/ThTgWnUk/y64QSs8GwA=
+golang.org/x/mod v0.29.0/go.mod h1:NyhrlYXJ2H4eJiRy/WDBO6HMqZQ6q9nk4JzS3NuCK+w=
+golang.org/x/net v0.47.0 h1:Mx+4dIFzqraBXUugkia1OOvlD6LemFo1ALMHjrXDOhY=
+golang.org/x/net v0.47.0/go.mod h1:/jNxtkgq5yWUGYkaZGqo27cfGZ1c5Nen03aYrrKpVRU=
golang.org/x/oauth2 v0.33.0 h1:4Q+qn+E5z8gPRJfmRy7C2gGG3T4jIprK6aSYgTXGRpo=
golang.org/x/oauth2 v0.33.0/go.mod h1:lzm5WQJQwKZ3nwavOZ3IS5Aulzxi68dUSgRHujetwEA=
-golang.org/x/sync v0.17.0 h1:l60nONMj9l5drqw6jlhIELNv9I0A4OFgRsG9k2oT9Ug=
-golang.org/x/sync v0.17.0/go.mod h1:9KTHXmSnoGruLpwFjVSX0lNNA75CykiMECbovNTZqGI=
golang.org/x/sync v0.18.0 h1:kr88TuHDroi+UVf+0hZnirlk8o8T+4MrK6mr60WkH/I=
golang.org/x/sync v0.18.0/go.mod h1:9KTHXmSnoGruLpwFjVSX0lNNA75CykiMECbovNTZqGI=
golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.35.0 h1:vz1N37gP5bs89s7He8XuIYXpyY0+QlsKmzipCbUtyxI=
-golang.org/x/sys v0.35.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k=
-golang.org/x/sys v0.37.0 h1:fdNQudmxPjkdUTPnLn5mdQv7Zwvbvpaxqs831goi9kQ=
-golang.org/x/sys v0.37.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks=
-golang.org/x/text v0.28.0 h1:rhazDwis8INMIwQ4tpjLDzUhx6RlXqZNPEM0huQojng=
-golang.org/x/text v0.28.0/go.mod h1:U8nCwOR8jO/marOQ0QbDiOngZVEBB7MAiitBuMjXiNU=
-golang.org/x/text v0.30.0 h1:yznKA/E9zq54KzlzBEAWn1NXSQ8DIp/NYMy88xJjl4k=
-golang.org/x/text v0.30.0/go.mod h1:yDdHFIX9t+tORqspjENWgzaCVXgk0yYnYuSZ8UzzBVM=
+golang.org/x/sys v0.38.0 h1:3yZWxaJjBmCWXqhN1qh02AkOnCQ1poK6oF+a7xWL6Gc=
+golang.org/x/sys v0.38.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks=
+golang.org/x/telemetry v0.0.0-20251008203120-078029d740a8 h1:LvzTn0GQhWuvKH/kVRS3R3bVAsdQWI7hvfLHGgh9+lU=
+golang.org/x/telemetry v0.0.0-20251008203120-078029d740a8/go.mod h1:Pi4ztBfryZoJEkyFTI5/Ocsu2jXyDr6iSdgJiYE/uwE=
+golang.org/x/text v0.31.0 h1:aC8ghyu4JhP8VojJ2lEHBnochRno1sgL6nEi9WGFGMM=
+golang.org/x/text v0.31.0/go.mod h1:tKRAlv61yKIjGGHX/4tP1LTbc13YSec1pxVEWXzfoeM=
golang.org/x/time v0.14.0 h1:MRx4UaLrDotUKUdCIqzPC48t1Y9hANFKIRpNx+Te8PI=
golang.org/x/time v0.14.0/go.mod h1:eL/Oa2bBBK0TkX57Fyni+NgnyQQN4LitPmob2Hjnqw4=
-golang.org/x/tools v0.35.0 h1:mBffYraMEf7aa0sB+NuKnuCy8qI/9Bughn8dC2Gu5r0=
-golang.org/x/tools v0.35.0/go.mod h1:NKdj5HkL/73byiZSJjqJgKn3ep7KjFkBOkR/Hps3VPw=
-golang.org/x/tools v0.37.0 h1:DVSRzp7FwePZW356yEAChSdNcQo6Nsp+fex1SUW09lE=
-golang.org/x/tools v0.37.0/go.mod h1:MBN5QPQtLMHVdvsbtarmTNukZDdgwdwlO5qGacAzF0w=
+golang.org/x/tools v0.38.0 h1:Hx2Xv8hISq8Lm16jvBZ2VQf+RLmbd7wVUsALibYI/IQ=
+golang.org/x/tools v0.38.0/go.mod h1:yEsQ/d/YK8cjh0L6rZlY8tgtlKiBNTL14pGDJPJpYQs=
golang.org/x/xerrors v0.0.0-20240903120638-7835f813f4da h1:noIWHXmPHxILtqtCOPIhSt0ABwskkZKjD3bXGnZGpNY=
golang.org/x/xerrors v0.0.0-20240903120638-7835f813f4da/go.mod h1:NDW/Ps6MPRej6fsCIbMTohpP40sJ/P/vI1MoTEGwX90=
gonum.org/v1/gonum v0.16.0 h1:5+ul4Swaf3ESvrOnidPp4GZbzf0mxVQpDCYUQE7OJfk=
@@ -246,20 +248,12 @@ google.golang.org/api v0.256.0 h1:u6Khm8+F9sxbCTYNoBHg6/Hwv0N/i+V94MvkOSor6oI=
google.golang.org/api v0.256.0/go.mod h1:KIgPhksXADEKJlnEoRa9qAII4rXcy40vfI8HRqcU964=
google.golang.org/genproto v0.0.0-20250922171735-9219d122eba9 h1:LvZVVaPE0JSqL+ZWb6ErZfnEOKIqqFWUJE2D0fObSmc=
google.golang.org/genproto v0.0.0-20250922171735-9219d122eba9/go.mod h1:QFOrLhdAe2PsTp3vQY4quuLKTi9j3XG3r6JPPaw7MSc=
-google.golang.org/genproto/googleapis/api v0.0.0-20250825161204-c5933d9347a5 h1:BIRfGDEjiHRrk0QKZe3Xv2ieMhtgRGeLcZQ0mIVn4EY=
-google.golang.org/genproto/googleapis/api v0.0.0-20250825161204-c5933d9347a5/go.mod h1:j3QtIyytwqGr1JUDtYXwtMXWPKsEa5LtzIFN1Wn5WvE=
google.golang.org/genproto/googleapis/api v0.0.0-20251111163417-95abcf5c77ba h1:B14OtaXuMaCQsl2deSvNkyPKIzq3BjfxQp8d00QyWx4=
google.golang.org/genproto/googleapis/api v0.0.0-20251111163417-95abcf5c77ba/go.mod h1:G5IanEx8/PgI9w6CFcYQf7jMtHQhZruvfM1i3qOqk5U=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20250825161204-c5933d9347a5 h1:eaY8u2EuxbRv7c3NiGK0/NedzVsCcV6hDuU5qPX5EGE=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20250825161204-c5933d9347a5/go.mod h1:M4/wBTSeyLxupu3W3tJtOgB14jILAS/XWPSSa3TAlJc=
google.golang.org/genproto/googleapis/rpc v0.0.0-20251111163417-95abcf5c77ba h1:UKgtfRM7Yh93Sya0Fo8ZzhDP4qBckrrxEr2oF5UIVb8=
google.golang.org/genproto/googleapis/rpc v0.0.0-20251111163417-95abcf5c77ba/go.mod h1:7i2o+ce6H/6BluujYR+kqX3GKH+dChPTQU19wjRPiGk=
-google.golang.org/grpc v1.75.0 h1:+TW+dqTd2Biwe6KKfhE5JpiYIBWq865PhKGSXiivqt4=
-google.golang.org/grpc v1.75.0/go.mod h1:JtPAzKiq4v1xcAB2hydNlWI2RnF85XXcV0mhKXr2ecQ=
google.golang.org/grpc v1.76.0 h1:UnVkv1+uMLYXoIz6o7chp59WfQUYA2ex/BXQ9rHZu7A=
google.golang.org/grpc v1.76.0/go.mod h1:Ju12QI8M6iQJtbcsV+awF5a4hfJMLi4X0JLo94ULZ6c=
-google.golang.org/protobuf v1.36.8 h1:xHScyCOEuuwZEc6UtSOvPbAT4zRh0xcNRYekJwfqyMc=
-google.golang.org/protobuf v1.36.8/go.mod h1:fuxRtAxBytpl4zzqUh6/eyUujkJdNiuEkXntxiD/uRU=
google.golang.org/protobuf v1.36.10 h1:AYd7cD/uASjIL6Q9LiTjz8JLcrh/88q5UObnmY3aOOE=
google.golang.org/protobuf v1.36.10/go.mod h1:HTf+CrKn2C3g5S8VImy6tdcUvCska2kB7j23XfzDpco=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
From 3c10b6eb693ba3e930020346f3edf6a70d30f5a1 Mon Sep 17 00:00:00 2001
From: Calvin Devereaux <43762553+WhiteLotusLA@users.noreply.github.com>
Date: Mon, 12 Jan 2026 22:51:32 -0800
Subject: [PATCH 21/26] fix: Update model_validator to use instance method
signature (Pydantic v2.12 deprecation) (#5825)
fix: update model_validator to use instance method signature
Pydantic v2.12 deprecated using @model_validator(mode='after') with a
classmethod-style signature (cls, values). This change updates the
_validate_credentials method to use the correct instance method signature
(self), which:
- Eliminates the deprecation warning
- Uses direct attribute access (self.username) instead of dict access
- Returns self instead of values
This is a non-breaking change that maintains the same validation logic
while conforming to Pydantic v2.12+ best practices.
Fixes deprecation warning:
'Using @model_validator with mode="after" on a classmethod is deprecated'
Signed-off-by: WhiteLotusLA
---
sdk/python/feast/permissions/auth_model.py | 16 +++++++---------
1 file changed, 7 insertions(+), 9 deletions(-)
diff --git a/sdk/python/feast/permissions/auth_model.py b/sdk/python/feast/permissions/auth_model.py
index 179a8bc0c0e..3690d62b728 100644
--- a/sdk/python/feast/permissions/auth_model.py
+++ b/sdk/python/feast/permissions/auth_model.py
@@ -33,25 +33,23 @@ class OidcClientAuthConfig(OidcAuthConfig):
token: Optional[str] = None # pre-issued `token`
@model_validator(mode="after")
- def _validate_credentials(cls, values):
+ def _validate_credentials(self):
"""Enforce exactly one valid credential set."""
- d = values.__dict__ if hasattr(values, "__dict__") else values
-
- has_user_pass = bool(d.get("username")) and bool(d.get("password"))
- has_secret = bool(d.get("client_secret"))
- has_token = bool(d.get("token"))
+ has_user_pass = bool(self.username) and bool(self.password)
+ has_secret = bool(self.client_secret)
+ has_token = bool(self.token)
# 1 static token
if has_token and not (has_user_pass or has_secret):
- return values
+ return self
# 2 client_credentials
if has_secret and not has_user_pass and not has_token:
- return values
+ return self
# 3 ROPG
if has_user_pass and has_secret and not has_token:
- return values
+ return self
raise ValueError(
"Invalid OIDC client auth combination: "
From de37f6677ad3b6ca7862734e50593eaad7aaef57 Mon Sep 17 00:00:00 2001
From: Aniket Paluskar <64416568+aniketpalu@users.noreply.github.com>
Date: Tue, 13 Jan 2026 18:36:57 +0530
Subject: [PATCH 22/26] fix: Search API to return all matching tags in
matched_tags field (#5843)
* fix: Search API to return all matching tags in matched_tags field
Signed-off-by: Aniket Paluskar
* Added unit tests to check if multiple tags are returned if they are matching the query
Signed-off-by: Aniket Paluskar
---------
Signed-off-by: Aniket Paluskar
---
.../feature-servers/registry-server.md | 13 ++-
.../feast/api/registry/rest/rest_utils.py | 66 +++++++------
sdk/python/tests/unit/api/test_search_api.py | 98 +++++++++++++------
3 files changed, 112 insertions(+), 65 deletions(-)
diff --git a/docs/reference/feature-servers/registry-server.md b/docs/reference/feature-servers/registry-server.md
index dbcf661fc86..496eaa8badc 100644
--- a/docs/reference/feature-servers/registry-server.md
+++ b/docs/reference/feature-servers/registry-server.md
@@ -1207,28 +1207,33 @@ Please refer the [page](./../../../docs/getting-started/concepts/permission.md)
"name": "user_id",
"description": "Primary identifier for users",
"project": "project1",
- "match_score": 100
+ "match_score": 100,
+ "matched_tags": {}
},
{
"type": "featureView",
"name": "user_features",
"description": "User demographic and behavioral features",
"project": "project1",
- "match_score": 100
+ "match_score": 100,
+ "matched_tags": {"team": "user_analytics"}
},
{
"type": "feature",
"name": "user_age",
"description": "Age of the user in years",
"project": "project1",
- "match_score": 80
+ "featureView": "user_features",
+ "match_score": 80,
+ "matched_tags": {}
},
{
"type": "dataSource",
"name": "user_analytics",
"description": "Analytics data for user behavior tracking",
"project": "project2",
- "match_score": 80
+ "match_score": 80,
+ "matched_tags": {"source": "user_data"}
}
],
"pagination": {
diff --git a/sdk/python/feast/api/registry/rest/rest_utils.py b/sdk/python/feast/api/registry/rest/rest_utils.py
index dac6b7ccf7b..4c517b0abdf 100644
--- a/sdk/python/feast/api/registry/rest/rest_utils.py
+++ b/sdk/python/feast/api/registry/rest/rest_utils.py
@@ -18,7 +18,6 @@
MATCH_SCORE_NAME = 100
MATCH_SCORE_DESCRIPTION = 80
MATCH_SCORE_TAGS = 60
-MATCH_SCORE_PARTIAL = 40
def grpc_call(handler_fn, request):
@@ -537,12 +536,42 @@ def filter_search_results_and_match_score(
) -> List[Dict]:
"""Filter search results based on query string"""
if not query:
+ # Add all tags as matched_tags when no query (all tags match)
+ for result in results:
+ result["matched_tags"] = result.get("tags", {})
return results
query_lower = query.lower()
filtered_results = []
for result in results:
+ matched_tags = {}
+ best_fuzzy_tag_score = 0.0
+
+ # Collect all matching tags (exact and fuzzy) upfront
+ tags = result.get("tags", {})
+ has_exact_tag_match = False
+
+ for key, value in tags.items():
+ key_lower = str(key).lower()
+ value_str = str(value).lower()
+ tag_combined = f"{key_lower}={value_str}"
+
+ # Exact match in key or value
+ if query_lower in tag_combined:
+ has_exact_tag_match = True
+ matched_tags[key] = value
+ else:
+ # Fuzzy match for tags (on combined "key:value" string)
+ tag_fuzzy_score = fuzzy_match(query_lower, tag_combined)
+
+ if tag_fuzzy_score >= MATCH_SCORE_DEFAULT_THRESHOLD:
+ matched_tags[key] = value
+ if tag_fuzzy_score > best_fuzzy_tag_score:
+ best_fuzzy_tag_score = tag_fuzzy_score
+
+ result["matched_tags"] = matched_tags
+
# Search in name
if query_lower in result.get("name", "").lower():
result["match_score"] = MATCH_SCORE_NAME
@@ -555,42 +584,15 @@ def filter_search_results_and_match_score(
filtered_results.append(result)
continue
- # Search in tags
- tags = result.get("tags", {})
- tag_match = False
- matched_tag = None
- best_fuzzy_score = 0.0
- best_fuzzy_tag = None
-
- for key, value in tags.items():
- key_lower = key.lower()
- value_str = str(value).lower()
-
- # Exact match in key or value
- if query_lower in key_lower or query_lower in value_str:
- tag_match = True
- # Store the matched tag as a dictionary
- matched_tag = {key: value}
- break
-
- # Fuzzy match for tags (on combined "key:value" string)
- tag_combined = f"{key_lower}={value_str}"
- tag_fuzzy_score = fuzzy_match(query_lower, tag_combined)
-
- if tag_fuzzy_score > best_fuzzy_score:
- best_fuzzy_score = tag_fuzzy_score
- best_fuzzy_tag = {key: value}
-
- if tag_match:
+ # Exact tag match
+ if has_exact_tag_match:
result["match_score"] = MATCH_SCORE_TAGS
- result["matched_tag"] = matched_tag
filtered_results.append(result)
continue
# Fuzzy tag match
- if best_fuzzy_score >= MATCH_SCORE_DEFAULT_THRESHOLD:
- result["match_score"] = best_fuzzy_score * 100
- result["matched_tag"] = best_fuzzy_tag
+ if best_fuzzy_tag_score >= MATCH_SCORE_DEFAULT_THRESHOLD:
+ result["match_score"] = best_fuzzy_tag_score * 100
filtered_results.append(result)
continue
diff --git a/sdk/python/tests/unit/api/test_search_api.py b/sdk/python/tests/unit/api/test_search_api.py
index 9116db1c59b..f0d7c3942e8 100644
--- a/sdk/python/tests/unit/api/test_search_api.py
+++ b/sdk/python/tests/unit/api/test_search_api.py
@@ -734,8 +734,8 @@ def test_search_by_tags(self, shared_search_responses):
f"Expected to find some of {expected_resources} but found none in {found_resources}"
)
- def test_search_matched_tag_exact_match(self, search_test_app):
- """Test that matched_tag field is present when a tag matches exactly"""
+ def test_search_matched_tags_exact_match(self, search_test_app):
+ """Test that matched_tags field is present when a tag matches exactly"""
# Search for "data" which should match tag key "team" with value "data"
response = search_test_app.get("/search?query=data")
assert response.status_code == 200
@@ -745,34 +745,75 @@ def test_search_matched_tag_exact_match(self, search_test_app):
# Find results that matched via tags (match_score = 60)
tag_matched_results = [
- r for r in results if r.get("match_score") == 60 and "matched_tag" in r
+ r for r in results if r.get("match_score") == 60 and "matched_tags" in r
]
assert len(tag_matched_results) > 0, (
- "Expected to find at least one result with matched_tag from tag matching"
+ "Expected to find at least one result with matched_tags from tag matching"
)
- # Verify matched_tag is present and has a valid dictionary value
+ # Verify matched_tags is present and has a valid dictionary value
for result in tag_matched_results:
- matched_tag = result.get("matched_tag")
- assert matched_tag is not None, (
- f"matched_tag should not be None for result {result['name']}"
+ matched_tags = result.get("matched_tags")
+ assert matched_tags is not None, (
+ f"matched_tags should not be None for result {result['name']}"
)
- assert isinstance(matched_tag, dict), (
- f"matched_tag should be a dictionary, got {type(matched_tag)}"
+ assert isinstance(matched_tags, dict), (
+ f"matched_tags should be a dictionary, got {type(matched_tags)}"
)
- # matched_tag should be a dictionary with key:value format
- assert len(matched_tag) > 0, "matched_tag should not be empty"
- assert len(matched_tag) == 1, (
- f"matched_tag should contain exactly one key-value pair, got {len(matched_tag)}"
+ # matched_tags should be a non-empty dict for tag-matched results
+ assert len(matched_tags) > 0, (
+ "matched_tags should not be empty for tag matches"
)
logger.debug(
- f"Found {len(tag_matched_results)} results with matched_tag: {[r['name'] + ' -> ' + str(r.get('matched_tag', 'N/A')) for r in tag_matched_results]}"
+ f"Found {len(tag_matched_results)} results with matched_tags: {[r['name'] + ' -> ' + str(r.get('matched_tags', 'N/A')) for r in tag_matched_results]}"
)
- def test_search_matched_tag_fuzzy_match(self, search_test_app):
- """Test that matched_tag field is present when a tag matches via fuzzy matching"""
+ def test_search_matched_tags_multiple_tags(self, search_test_app):
+ """Test that multiple matching tags are returned in matched_tags"""
+ # Search for "a" which should match:
+ # - Names containing "a" (e.g., user_training_dataset, data sources)
+ # - Tags where key/value contains "a": "team" (key), "data" (value), "training" (value)
+ response = search_test_app.get("/search?query=a")
+ logger.info(response.json())
+ assert response.status_code == 200
+
+ data = response.json()
+ results = data["results"]
+
+ # Find user_training_dataset which has tags: {"environment": "test", "purpose": "training", "team": "data"}
+ # "team" contains "a", "data" contains "a", "training" contains "a"
+ # So matched_tags should have at least 2 entries: "purpose" and "team"
+ dataset_results = [
+ r for r in results if r.get("name") == "user_training_dataset"
+ ]
+
+ assert len(dataset_results) > 0, (
+ "Expected to find user_training_dataset in results"
+ )
+
+ dataset_result = dataset_results[0]
+ matched_tags = dataset_result.get("matched_tags", {})
+
+ assert isinstance(matched_tags, dict), (
+ f"matched_tags should be a dictionary, got {type(matched_tags)}"
+ )
+
+ # Should have multiple matching tags: "purpose" and "team"
+ assert len(matched_tags) >= 2, (
+ f"Expected at least 2 matching tags for 'a' query, got {len(matched_tags)}: {matched_tags}"
+ )
+
+ # Verify the expected tags are present
+ assert "team" in matched_tags and "purpose" in matched_tags, (
+ f"Expected 'team' and 'purpose' in matched_tags, got: {matched_tags}"
+ )
+
+ logger.debug(f"user_training_dataset matched_tags: {matched_tags}")
+
+ def test_search_matched_tags_fuzzy_match(self, search_test_app):
+ """Test that matched_tags field is present when a tag matches via fuzzy matching"""
# Search for "te" which should fuzzy match tag key "team"
# "te" vs "team": overlap={'t','e'}/union={'t','e','a','m'} = 2/4 = 50% (below threshold)
# Try "tea" which should fuzzy match "team" better
@@ -789,7 +830,7 @@ def test_search_matched_tag_fuzzy_match(self, search_test_app):
for r in results
if r.get("match_score", 0) >= 40
and r.get("match_score", 0) < 60
- and "matched_tag" in r
+ and "matched_tags" in r
]
# If we don't find fuzzy matches, try a different query that's more likely to match
@@ -805,22 +846,21 @@ def test_search_matched_tag_fuzzy_match(self, search_test_app):
for r in results
if r.get("match_score", 0) >= 40
and r.get("match_score", 0) < 60
- and "matched_tag" in r
+ and "matched_tags" in r
]
if len(fuzzy_tag_matched_results) > 0:
- # Verify matched_tag is present for fuzzy matches
+ # Verify matched_tags is present for fuzzy matches
for result in fuzzy_tag_matched_results:
- matched_tag = result.get("matched_tag")
- assert matched_tag is not None, (
- f"matched_tag should not be None for fuzzy-matched result {result['name']}"
+ matched_tags = result.get("matched_tags")
+ assert matched_tags is not None, (
+ f"matched_tags should not be None for fuzzy-matched result {result['name']}"
)
- assert isinstance(matched_tag, dict), (
- f"matched_tag should be a dictionary, got {type(matched_tag)}"
+ assert isinstance(matched_tags, dict), (
+ f"matched_tags should be a dictionary, got {type(matched_tags)}"
)
- assert len(matched_tag) > 0, "matched_tag should not be empty"
- assert len(matched_tag) == 1, (
- f"matched_tag should contain exactly one key-value pair, got {len(matched_tag)}"
+ assert len(matched_tags) > 0, (
+ "matched_tags should not be empty for fuzzy tag matches"
)
# Verify the match_score is in the fuzzy range
assert 40 <= result.get("match_score", 0) < 60, (
@@ -828,7 +868,7 @@ def test_search_matched_tag_fuzzy_match(self, search_test_app):
)
logger.debug(
- f"Found {len(fuzzy_tag_matched_results)} results with fuzzy matched_tag: {[r['name'] + ' -> ' + str(r.get('matched_tag', 'N/A')) + ' (score: ' + str(r.get('match_score', 'N/A')) + ')' for r in fuzzy_tag_matched_results]}"
+ f"Found {len(fuzzy_tag_matched_results)} results with fuzzy matched_tags: {[r['name'] + ' -> ' + str(r.get('matched_tags', 'N/A')) + ' (score: ' + str(r.get('match_score', 'N/A')) + ')' for r in fuzzy_tag_matched_results]}"
)
def test_search_sorting_functionality(self, shared_search_responses):
From 1524f1ca14bed2f274617035b5eb34f427617b0b Mon Sep 17 00:00:00 2001
From: Jitendra Yejare
Date: Tue, 13 Jan 2026 20:22:37 +0530
Subject: [PATCH 23/26] fix: Denial by default to all resources when no
permissions set (#5663)
* Denial by default to all resources when no permissions set
Signed-off-by: jyejare
filter only for named patterns
No matching permissions are handled
* Tests are updated to match the new behavior
Signed-off-by: jyejare
---------
Signed-off-by: jyejare
---
sdk/python/feast/permissions/enforcer.py | 49 ++++++++++++++-----
.../auth/server/test_auth_registry_server.py | 30 ++++++++++++
.../unit/permissions/test_security_manager.py | 12 ++---
3 files changed, 73 insertions(+), 18 deletions(-)
diff --git a/sdk/python/feast/permissions/enforcer.py b/sdk/python/feast/permissions/enforcer.py
index 2cb6608a2d8..4db0241ef5a 100644
--- a/sdk/python/feast/permissions/enforcer.py
+++ b/sdk/python/feast/permissions/enforcer.py
@@ -43,9 +43,9 @@ def enforce_policy(
# If no permissions are defined, deny access to all resources
# This is a security measure to prevent unauthorized access
logger.warning("No permissions defined - denying access to all resources")
- if not filter_only:
- raise FeastPermissionError("No permissions defined - access denied")
- return []
+ raise FeastPermissionError(
+ "Permissions are not defined - access denied for all resources"
+ )
_permitted_resources: list[FeastObject] = []
for resource in resources:
@@ -71,17 +71,42 @@ def enforce_policy(
if evaluator.is_decided():
grant, explanations = evaluator.grant()
- if not grant and not filter_only:
+ if not grant:
+ if filter_only and p.name_patterns:
+ continue
logger.error(f"Permission denied: {','.join(explanations)}")
raise FeastPermissionError(",".join(explanations))
- if grant:
- logger.debug(
- f"Permission granted for {type(resource).__name__}:{resource.name}"
- )
- _permitted_resources.append(resource)
+ logger.debug(
+ f"Permission granted for {type(resource).__name__}:{resource.name}"
+ )
+ _permitted_resources.append(resource)
break
else:
- message = f"No permissions defined to manage {actions} on {type(resource)}/{resource.name}."
- logger.exception(f"**PERMISSION NOT GRANTED**: {message}")
- raise FeastPermissionError(message)
+ if not filter_only:
+ message = f"No permissions defined to manage {actions} on {type(resource)}/{resource.name}."
+ logger.exception(f"**PERMISSION NOT GRANTED**: {message}")
+ raise FeastPermissionError(message)
+ else:
+ # filter_only=True: Check if there are permissions for this resource type
+ resource_type_permissions = [
+ p
+ for p in permissions
+ if any(isinstance(resource, t) for t in p.types) # type: ignore
+ ]
+ if not resource_type_permissions:
+ # No permissions exist for this resource type - should raise error
+ message = f"No permissions defined to manage {actions} on {type(resource)}/{resource.name}."
+ logger.exception(f"**PERMISSION NOT GRANTED**: {message}")
+ raise FeastPermissionError(message)
+ elif not any(p.name_patterns for p in resource_type_permissions):
+ # Permissions exist for this resource type but no name_patterns - should raise error
+ message = f"No permissions defined to manage {actions} on {type(resource)}/{resource.name}."
+ logger.exception(f"**PERMISSION NOT GRANTED**: {message}")
+ raise FeastPermissionError(message)
+ else:
+ # Permissions exist for this resource type with name_patterns - filter out this resource
+ logger.debug(
+ f"Filtering out {type(resource).__name__}:{resource.name} - no matching permissions"
+ )
+ continue
return _permitted_resources
diff --git a/sdk/python/tests/unit/permissions/auth/server/test_auth_registry_server.py b/sdk/python/tests/unit/permissions/auth/server/test_auth_registry_server.py
index 71a883e1933..e0f75d1d3d8 100644
--- a/sdk/python/tests/unit/permissions/auth/server/test_auth_registry_server.py
+++ b/sdk/python/tests/unit/permissions/auth/server/test_auth_registry_server.py
@@ -142,6 +142,11 @@ def _test_get_historical_features(client_fs: FeatureStore):
def _test_get_entity(client_fs: FeatureStore, permissions: list[Permission]):
+ if _is_auth_enabled(client_fs) and len(permissions) == 0:
+ with pytest.raises(FeastPermissionError):
+ client_fs.get_entity("driver")
+ return
+
if not _is_auth_enabled(client_fs) or _is_permission_enabled(
client_fs, permissions, read_entities_perm
):
@@ -156,6 +161,18 @@ def _test_get_entity(client_fs: FeatureStore, permissions: list[Permission]):
def _test_list_entities(client_fs: FeatureStore, permissions: list[Permission]):
+ if _is_auth_enabled(client_fs) and len(permissions) == 0:
+ with pytest.raises(FeastPermissionError):
+ client_fs.list_entities()
+ return
+
+ if _is_auth_enabled(client_fs) and _permissions_exist_in_permission_list(
+ [invalid_list_entities_perm], permissions
+ ):
+ with pytest.raises(FeastPermissionError):
+ client_fs.list_entities()
+ return
+
entities = client_fs.list_entities()
if not _is_auth_enabled(client_fs) or _is_permission_enabled(
@@ -183,6 +200,10 @@ def _test_list_permissions(
with pytest.raises(Exception):
client_fs.list_permissions()
return []
+ elif _is_auth_enabled(client_fs) and len(applied_permissions) == 0:
+ with pytest.raises(FeastPermissionError):
+ client_fs.list_permissions()
+ return []
else:
permissions = client_fs.list_permissions()
@@ -229,6 +250,11 @@ def _is_auth_enabled(client_fs: FeatureStore) -> bool:
def _test_get_fv(client_fs: FeatureStore, permissions: list[Permission]):
+ if _is_auth_enabled(client_fs) and len(permissions) == 0:
+ with pytest.raises(FeastPermissionError):
+ client_fs.get_feature_view("driver_hourly_stats")
+ return
+
if not _is_auth_enabled(client_fs) or _is_permission_enabled(
client_fs, permissions, read_fv_perm
):
@@ -249,6 +275,10 @@ def _test_list_fvs(client_fs: FeatureStore, permissions: list[Permission]):
with pytest.raises(Exception):
client_fs.list_feature_views()
return []
+ elif _is_auth_enabled(client_fs) and len(permissions) == 0:
+ with pytest.raises(FeastPermissionError):
+ client_fs.list_feature_views()
+ return []
else:
fvs = client_fs.list_feature_views()
for fv in fvs:
diff --git a/sdk/python/tests/unit/permissions/test_security_manager.py b/sdk/python/tests/unit/permissions/test_security_manager.py
index ee0ec9e079a..34d8e4962e9 100644
--- a/sdk/python/tests/unit/permissions/test_security_manager.py
+++ b/sdk/python/tests/unit/permissions/test_security_manager.py
@@ -15,7 +15,7 @@
@pytest.mark.parametrize(
"username, requested_actions, allowed, allowed_single, raise_error_in_assert, raise_error_in_permit, intra_communication_flag",
[
- (None, [], False, [False, False], [True, True], False, False),
+ (None, [], False, [False, False], [True, True], True, False),
(None, [], True, [True, True], [False, False], False, True),
(
"r",
@@ -42,7 +42,7 @@
False,
[False, False],
[True, True],
- False,
+ True,
False,
),
("r", [AuthzedAction.UPDATE], True, [True, True], [False, False], False, True),
@@ -52,7 +52,7 @@
False,
[False, False],
[True, True],
- False,
+ True,
False,
),
(
@@ -116,7 +116,7 @@
False,
[False, False],
[True, True],
- True,
+ False,
False,
),
(
@@ -134,7 +134,7 @@
False,
[False, True],
[True, False],
- True,
+ False,
False,
),
(
@@ -152,7 +152,7 @@
False,
[False, False],
[True, True],
- True,
+ False,
False,
),
(
From 7d9c06f8fd96e4bd6f8f53f2e9ab5f6f0324f5c9 Mon Sep 17 00:00:00 2001
From: Copilot <198982749+Copilot@users.noreply.github.com>
Date: Wed, 14 Jan 2026 08:06:33 -0500
Subject: [PATCH 24/26] docs: Add feature transformation latency blog post
(#5852)
* Initial plan
* Add feature transformation latency blog post and update gitignore
Co-authored-by: franciscojavierarceo <4163062+franciscojavierarceo@users.noreply.github.com>
* Add files via upload
* Apply suggestion from @franciscojavierarceo
* Delete IMAGE_REQUIRED.md
---------
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: franciscojavierarceo <4163062+franciscojavierarceo@users.noreply.github.com>
Co-authored-by: Francisco Javier Arceo
Co-authored-by: Francisco Javier Arceo
---
.gitignore | 1 +
.../blog/feature-transformation-latency.md | 79 ++++++++++++++++++
infra/website/public/images/blog/latency.png | Bin 0 -> 177998 bytes
3 files changed, 80 insertions(+)
create mode 100644 infra/website/docs/blog/feature-transformation-latency.md
create mode 100644 infra/website/public/images/blog/latency.png
diff --git a/.gitignore b/.gitignore
index df688d95c7e..64f5056279f 100644
--- a/.gitignore
+++ b/.gitignore
@@ -235,6 +235,7 @@ infra/feast-operator/bin
# ignore the website build directory
infra/website/node_modules/
infra/website/.astro/
+infra/website/dist/
# offline builds
offline_build/
diff --git a/infra/website/docs/blog/feature-transformation-latency.md b/infra/website/docs/blog/feature-transformation-latency.md
new file mode 100644
index 00000000000..5fdce45f72a
--- /dev/null
+++ b/infra/website/docs/blog/feature-transformation-latency.md
@@ -0,0 +1,79 @@
+---
+title: "Faster On Demand Transformations in Feast 🏎️💨"
+description: "Discover how Feast's new Native Python Mode and transformations on writes reduce feature transformation latency by up to 10x, enabling faster and more efficient feature engineering workflows."
+date: 2025-01-14
+authors: ["Francisco Javier Arceo", "Shuchu Han"]
+---
+
+
+

+
+
+# Faster On Demand Transformations in Feast 🏎️💨
+
+*Thank you to Shuchu Han and Francisco Javier Arceo for their contributions [evaluating the latency](https://github.com/feast-dev/feast/issues/4207) of transformation for On Demand Feature Views and adding [transformations on writes to On Demand Feature Views](https://github.com/feast-dev/feast/issues/4376). Thank you also to Maks Stachowiak, Ross Briden, Ankit Nadig, and the folks at Affirm for inspiring this work and creating an initial proof of concept.*
+
+Feature engineering is at the core of building high-performance machine learning models. The Feast team has introduced two major enhancements to [On Demand Feature Views](https://docs.feast.dev/reference/beta-on-demand-feature-view) (ODFVs), pushing the boundaries of efficiency and flexibility for data scientists and engineers. Here's a closer look at these exciting updates:
+
+## 1. Turbocharging Transformations with Native Python Mode
+
+Traditionally, transformations in ODFVs were limited to Pandas-based operations. While powerful, Pandas transformations can be computationally expensive for certain use cases. Feast now introduces **Native Python Mode**, a feature that allows users to write transformations using pure Python.
+
+Key benefits of Native Python Mode include:
+
+* **Blazing Speed:** Transformations using Native Python are nearly **10x faster** compared to Pandas for many operations.
+* **Intuitive Design:** This mode supports list-based and singleton (row-level) transformations, making it easier for data scientists to think in terms of individual rows rather than entire datasets.
+* **Versatility:** Users can now switch between batch and singleton transformations effortlessly, catering to both historical and online retrieval scenarios.
+
+Here's an example of using Native Python Mode for singleton transformations:
+
+```python
+@on_demand_feature_view(
+ sources=[driver_hourly_stats_view, input_request],
+ schema=[Field(name="conv_rate_plus_acc_singleton", dtype=Float64)],
+ mode="python",
+ singleton=True,
+)
+def transformed_conv_rate_singleton(inputs: Dict[str, Any]) -> Dict[str, Any]:
+ return {"conv_rate_plus_acc_singleton": inputs["conv_rate"] + inputs["acc_rate"]}
+```
+
+This approach aligns with how many data scientists naturally process data, simplifying the implementation of feature engineering workflows.
+
+## 2. Transformations on Writes: A New Dimension of Latency Optimization
+
+Until now, ODFVs operated solely as **transformations on reads**, applying logic during online feature retrieval. While this ensured flexibility, it sometimes came at the cost of increased latency during retrieval. Feast now supports **transformations on writes**, enabling users to apply transformations during data ingestion and store the transformed features in the online store.
+
+Why does this matter?
+
+* **Reduced Online Latency:** With transformations pre-applied at ingestion, online retrieval becomes a straightforward lookup, significantly improving performance for latency-sensitive applications.
+* **Operational Flexibility:** By toggling the `write_to_online_store` parameter, users can choose whether transformations should occur at write time (to optimize reads) or at read time (to preserve data freshness).
+
+Here's an example of applying transformations during ingestion:
+
+```python
+@on_demand_feature_view(
+ sources=[driver_hourly_stats_view],
+ schema=[Field(name="conv_rate_adjusted", dtype=Float64)],
+ mode="pandas",
+ write_to_online_store=True, # Apply transformation during write time
+)
+def transformed_conv_rate(features_df: pd.DataFrame) -> pd.DataFrame:
+ df = pd.DataFrame()
+ df["conv_rate_adjusted"] = features_df["conv_rate"] * 1.1
+ return df
+```
+
+With this new capability, data engineers can optimize online retrieval performance without sacrificing the flexibility of on-demand transformations.
+
+## The Future of ODFVs and Feature Transformations
+
+These enhancements bring ODFVs closer to the goal of seamless feature engineering at scale. By combining high-speed Python-based transformations with the ability to optimize retrieval latency, Feast empowers teams to build more efficient, responsive, and production-ready feature pipelines.
+
+For more detailed examples and use cases, check out the [documentation for On Demand Feature Views](https://docs.feast.dev/reference/beta-on-demand-feature-view). Whether you're a data scientist prototyping features or an engineer optimizing a production system, the new ODFV capabilities offer the tools you need to succeed.
+
+The future of Feature Transformations in Feast will be to unify feature transformations and feature views to allow for a simpler API. If you have thoughts or interest in giving feedback to the maintainers, feel free to comment directly on [the GitHub Issue](https://github.com/feast-dev/feast/issues/4584) or in [the RFC](https://docs.google.com/document/d/1KXCXcsXq1bUvbSpfhnUjDSsu4HpuUZ5XiZoQyltCkvo/edit?tab=t.0#heading=h.g6j9jyjkf5sm).
+
+Our goal is to make Feast blazing fast for feature transformation and serving.
+
+**Are you ready to unlock the full potential of On Demand Feature Views? Update your Feast repository and start building today!**
diff --git a/infra/website/public/images/blog/latency.png b/infra/website/public/images/blog/latency.png
new file mode 100644
index 0000000000000000000000000000000000000000..c0271a3f4fec2a5ade3cb20eb5244f2742d5585f
GIT binary patch
literal 177998
zcmb@tRa6~K)GgY$OOW6if@^U1U;%MM_dk5ddI?005E`9`fVN4_F`-0FcGaL`8p^
z85#nBWN3mKoVwD`=S(d{GH7@)A?ZU|^jHibX?O;oTk;TTNyq>ULy?~~dEtnaI%3ti
zWu%NPEs(W~)pX$oE)3x?feB7_I;X>F6h4eE!w>r}`{Um4+&2^42jlGyaDY3N9_^Uu
zUx>jZtif#&D2;eUMU8yxY=~kX)E~a6dZbDA1_tC1^rB}QBPVHqLc>D(AINq4o$bfVleHi8m{T&`yCyyCM1W2XHY`E)$N_$Vp=HrFo$SM`K>DjFnwvpL8a%-hR
zc0|C?KrLk!(+H$c8QOKZi16pxoE}r(a53scAwr-=5A^0p){8{e;Ll+z*P@t}ag`u9
zzrn^D#Qp>>*DsF}R~ZyGXl9ERe0l#d@Xq+;7M8vQpW+XaFA5)rAJ3q1HP7?De(HHBRRk(qszw}^xeQdaghm9LmC){uzqz@i1p{_
zOW8&*Kp7>`BxBtCDr5=RMM@GA3Yt2IaPV83uBWAZV>F4m*dI|ApuQ8Nv&ZB%_xi!9
z)k`otkRD!(8AnzqLa0nF7v`sqv`y`1?b(|xtEs@jX+HS9Fhr@}0H)>#1pd!gU)apdM
za-XFzcINo3Ng3cHl%o5H^4(bc?_IO0nUsgLgwjcwB1rJH)B&6#O%kTq&%G4Iuf22*
zk6SF}-j`6M7`DRbzaU`B@qY0PLTul!_v^YAog+Yal0s<+L8rr}{dZ$L(moB>Yt=kib0)jR5#^Fc%^+gsQVVt==TjKh_l;*p%b
zSEew@tENab%Vfwzk4QM_`I@TwUjN>eOBzoMt*b>+Cu}kdQRfToazh@O>zhLX_TKW|
z+Sc3L)6)AR+`;ww2NwHe{~vXsJ-N$rwmiJO3ZqA@i#{IQ_VLNW!|
zld99^W<{oGrZ#_ZHODpi7;@$zD`+cVE6OyP4zXI;GeonbnR1h6(59GXJpR%wb1Z9H
zb=-TN(Vl%-ZmfTC!sXd<%yqhUQawDKYtEjjkeU8Fg))zQ%s91H;vxOO0%fTFtqB>z
zki`&Z2RTnBy4a*_U}j{BZstX|N~cO*Pi;e1P|77rHs@r)g_a&n-tswH1A+i<@B(zl2;Rj{nt*zWi`
z7iX1X*1TRjS35C0YMwi%UB*+US57l;d184IIe$>TvADQQu|ogXtp2Ehy?Sry^V0m%
zdR^Yq)5=(NSwpL}e7(ua!Lm(F=e7?|6R#1kGPky~7!f~VUz8RhZ$Em!Yh-Lh39-Y7
z)J*7(@}csLJ*md~R{J#-cxy;AN?A?d!zvq>(kdmYwba>}U((hoUn7
zvaY|wch9cNk1c{}m
zcRF^Sfim9q-#p*V-z6XtA-a9mASSr((+S4~#>0h@gfup{x;V9M&iT$mN$IKCirI?!
z)j7FXn!Y^>hloq6O6o}J6?+_}Ph#o^REJcv>o>Ym@+_fMIfsOYEaG{oA~V=*rVFt0u!eMh!i~g$wS7^?Pc>U0b=V+-N^bkvY0+a
zwTZ}qn27`xa1zK*t~aGQRrh0K^l!?VMu)~pt$Xcj-AJ8BpSE4W<8L|j@rHEH=BZ{6
zd${YkoBMK8qJzp9?BsxG}e8_iD%Ha;4S8#PZmWA=DDH4!Hh-x&LM0KZ>9&Ysn3dfwxf?#8?S
z<%V^?k+E94+DLezdoqwcyg1w*=T-Yuv8~~;s&6PfEh(8^qiOewGiPHq!8Bn|+M3}`
zqs0oZ<40S$*VE%(TB0{2cA_r50}UP1OOr_T_IBe=N5!M_uiyK__bS9?4V9FYiRB&5
z{ob-;ni+q^El8@;nkx1AExeANJ2`%=*ygNOc&>au{@&L=9yS9N
z+ZySdboN#+QCn0;S-J06VPbWryVG8FJjo-jGtp7+rPhJ=+)=V#0vZ7Aztuu*`fPXE
z2^ynW?zHrME`GtUGNXOG
z6?F7{HZm$Ll+$KIx^>P?%eD1IZapKZ6YK4I>%7||z@y;d??sXzGwA1Q*=yAcFF#MT
z0J8hyJ@wnv+JN7{MAl%I=c(rPpZj`n%2M63^}=~#W=tksr|etBN%QSf@Os>a6KDh6
zecl)C4Go@}=Pao@DLCEh%A(W7>sY=?TG6X`WqC!@J?MP9EWEAQT1j;|bvan4>h!+X
z-}&$T~e
z{N|6#5)wSUE^sC=zt=Kx=Gs^f-c6mIdxFU}2!SB`DgQ@fN%BTByJqr~fOyzW-$2>m
zjlK&`Vjxn8E5dxdor<`~h{*P!uRxyPo^kw#h)Ad;{6w=?OKsyYv>~!(LXs>Nwp3c!lQr{fV
zwt1(q#Z9fSmsgY%#Y?Xp&<+-Wqn1xU@sVMBn9!%$Xf|<{mt)?t*8X}ccrV5lmJk-z
z(ksr9*f+MIcAVD=g{-P}6znBAd;&4Iyk&v#K-`WR`)O(7oqBtqO{SiA`h1JdZl>lf
zZw$~y`@`F+;m7hyYI}Lz>_k)CU-V?irPlzm{54kMTC%dP&-w}RJs7|#f}&veEdq9OXw
z5TxMd;Cnr((1GS0olN0SooHHDl3E3mJ)tLkQ#Q5&DaA}9aLx?N;5f{aiL-a{!
z0#>LkJA2boMA{F*2X*A2i;@5KNhKz?7mesv&mm(JCQoKv?o^PJ3Il!sBI=7upDmaw
zd?JQ^z~#)y#k!|$DX{}P(YjA?%uXp)*R|4Y75V`Dls|Hp;nK~?&H>&+ZK#YoQWf!v
zeg#{`R7%E;4k^x^AD+nfJD;jzp){_L$^C-9nmJ&54?nCer~4MPl@agt@9yOIdj!Qm
zRL$;zs2|se7RAsY+JE~mFT5cCVn{cT+aahei*;wzl9Xa^KW@kADJy%kkri5@@tcV4
zk0Y1dJBvsvDc}RDU8Di+hP+obj#ybux#)&m2#|`C^8`T<3UcE;Wd!B)=c>TyG?nV$
z-Bj`16t&R9ZMfo%oEuzl`q;O2KHz!Uz|RSSgI=uwSEP
z2^Jn7zf7&Q=Ks1ZIx4L!E4964{zZu1oz>(iWw>;CGGPXwtByP@f9hopRx&G3f_x(}
zH5H^$GFH8Z!7mrHtFYrD2azNU*M=HO?3&i!gtwF*3iuQ?
z57pN@Y+yse8`4ilO|U=FkMTSue%_!W5pT4aDaa}wXdc?BNf(5hrlfCdonFUvzlvSn
z5{;H6)ONYZ>egz6KeO7EpoI+?%kyO05G$a5+BZ?&>w
zs0Zm0$mn)FOphoOW7qLAU>5OKwXV1?Sh+4t_Z}BGeUX@5ce5~BQB5%PKGi4HNzzOu
z6Bdc3*f-f&=qo<>6`$O1^@<<7;Fk+rKPpysXyK}GiX4{`70TAZ}pXp
zYg@R2cvt0a-SjtK)oxx~=1~Zi!P_@OI|GsIdj~y4y|FmrFgFv@1IjvNrpo$
zI#j;+j=C%syD%4CcPKgFQzkHVJ)3vd$Yklct?>0e>(w3)SulKt1d0V0ghDD-<6LN<
zaPB9*5B997NZ@z>V^NHgmeyDLI>yPQeD1Nz3nJIAdkrxZl0*sy0wyi{E9NgcFcqNT
zwBX$MGQwuk4C%TAAS!T!c<(S?Jk141x#(EFhFmwZ?DFXZ<%>W@MJE
z2V(-v|IN{Le-w#1Z^-YX{DR?QDsLpvcJ`VTwaN$)6^WSup(Ki&27J1Sf^^1^EG5e<
z_j9dK@mOl|I!*-*n!ojf9UK%=fI($!Ud7k1`*DgL@1~(8mV^SUnZFQ59_UU4B)Fos
zg_WW~OAbtpiGK$Fk$Rj`tLah6SzwpmH;!g8^1prWpEavrd9APuVGK*9AKGHJotZoi
zIbD=P9LPK
zf&>?*q9RQ}-uU-8EMltOVi#9N_@B1|e6SXMNNzp9M4c{(z+CfG=yaC-gWi84Q`in<>nC@g{`rndtr>sN$%hYREzgp=9R5
z!-@&~8Xjl)ec%fG{IYdlKoX4OaMn21^Hwv)2YmukXQ2GP?jGe8wuQcI
zD4$YFnvarg_9S<=xS081Kf~}Lc(D*=(50K*Y}f^#Yf_BGu9~*SB6xK=x1Jr!hrCLV
zpt8)D7%p>x=$mTy&R?w0&QZ8Ag=T!gj$-QcCe9MiXsBZ~ExEt2yfnY4=wLwvn1IwJ
zXU4Bm^EpI?8Xu0WE@n8Vs>oOKObpgi3+ejlCg|_wk|otA;>KoObuqhLE8$BB
zlfsB?ZyrkT-_i1oLp#}@#SSeRg(X7=RD>s?g)OaOz0US?t)nvemDCm$e2_oZ
znW)vQQ7n(PJTbdEiZ%
zF+o=?qeMhEz!lGE@Xjv*d?ynbz%_Z&GMI^4s8Y)hn`^}dFzy+yAT;tX1Yc||q-X&2
zMol(dpfh4R|4`yWv}}gkpx4Etb=dA|`1SOy-9WS*!&J28v*)qE>?|~Eo2xYoTZ(L;
z&gjxoMk^7S${ZIegwV3(2EW6V(-yi&3k3u+Z+j<(2$18zw>pH5N_ODm8wCMn==B`n
zaVuS^q3iu`b9F(@y+5Mwux_`SEozPek29^4gKx$u;UK1PtNy5H#E*;!c=RGC&p$Ee
zs|?E>t}$?^!$)N;ShFf9D50}tI`P%<(s6Y0{z_a#D3??4wZ$-P_2-1@Ih1kP&*n6(
zE1nPWL-Q2hx4gy=9<4uC4l1}IiSw*;dm?C1kzJZrbbBm!pC(}^v
ze&9eS{EjU=4$Cb|r9@1glXjgha1URd&cE`MkQ2j%j@&^P!4*bFl{mPMX`wi(O%EG#
zRKW6wkWG}eo=7PJoBCxV@b%hFoBQKNL8E?THj`xgTKN@49PtFh*eK?>UWUZ+lTzv-
zqivzzmLrs)6JxUx6G=!($m6ss6CLIk?Pa%Nh)!29^Y^qfC|IwPeyS=o09PF2vjyz~
z#q%qJcbkqm7v!0)X^kjh-U|x5PD{uS2PJFHGiR-q1jmjUx=?5}tr6nVY4NG)*66RD
zKKJgt)9UyG5Xe2Ult50Zq+|`XqOybBxYov9VYPQ?VTAQpWcESNC6t@q;;K8S#0aPP
zNIjvc6tNt#AM9*>oEbP~o$S0G`(aLrmt_4AoC6p-vEQkZ=?IuqkZrh=6q
zmd?zIE4zgy>&BPi-5HZx%$LRUNheXfQ(jGF`210vZRS7JsE3;kk+3KtNt?~7>{E9ASz$`N6_gH8{DeM*dzwBr4o*8;q__v=$!-+_L;d8_utBSbs
z)vw6%=*$!El@K&~jH*8**OchgNJP!PZHTlROH}n-%|K#Q*5ur!P%-!i?TCnUtFfIToaScvb8bH|l>DtRDXH61iLlhJt%8(z4Jl_=A6hA)8
zd)eFvf8b*wR%3gLx^o16$Z`1KPCE@~!9KTVy3!UW>_PDGSH*qD%QuJP@}e!?A%$
z?&FuZ%5aEI$`NTkIrVZ}@ef>=kvPwNmQ1_*BO`<|Op!GE1pmx2<3*$xw#VfcMKy9K
zM=I%{lT$J$Q?p(B@-m{WcBI&DKhM*nzLU#WTc}*ikk{#x^q%kNsBnN#XkYIyA6`2@
zL05o=cFVaalE8+6=B&wk;QkC7|9FN1jcG;i<{fP;`5e
ztfm3KQImn+W9Ks+B;eqd+%2+5!O1QUIl9oG62}PF(
zm+6U4mT^3_02*i))5PzB*V+hkNGC$9(hG*3e_MHf*`Lc+NyJ{(d|KAD-XP95Qqv}rs-IhF8G5MdTBn&;I@f}vk+<^cqA!M*B#LeKY+RVA>^)*
z0Li*@#M2xh|08-fg&$dLc;vf!f5~sJZ;qd>+$wXCSEt}!lhx#
zFhDjP;`E)et6$34N1YEufBs$adY+c-lDItVp58`hq1k5dJ(7opNa8Ibi%$Z2mRp3h
zPhuEL7PuL~j1CYb;C!-9t@r}i0#ape(_dj4H+~;2qX5|mkXl~kZSL5u#?AF0x?X_)
zHy^9xABS69i471D8Iqz(0Q&bhNtHcGF>L7gg>cr0%0Ww6_Q_B2dP3?IM4wc)7Zo3{nwE6^MWsQpw;M&ohzL^Vy|*$6Y{W
zk^LmDIZD8*E2V5Pggn1k&ez7zsu+#o$!Fy;rOk~K+9y+BX|=J_qaP;f+Wu6TI)%%f
ztHvhF<=V~B*x2X*b;A%%I+&yN!j<0ppNgQaZ~lKxK@!F*$nH+lp!XLAyfnp!@1un=
zxM%u6k2$`GHBg7AL0Kcw#%k;2B%l5f<&($a
z_CMuky0)UO;?w=%(pc*hul%v##Tso`5B7MUZ$B-sth~QEpOQRG`A=M2U&bF?Z|d4U
z*_TT+c=aBR+wG+M5fd@B+A1r1DwT!?GW0fa`Fd49njDI9)tkdmv1~N9DQVFR;&9i(
ziQ6cm=!^A0j+Qa<^9fBt4hms`zyzky0?^amcu~Wgww@HOk4_50Mqlpf5QmmNX#55chl8WCg
z>EQh@vf<~;bDk@A*O|2D(~p;5T+nrf9p3NjO;!V#_2jqVTMc78-SzOGuercJ
z(o;gG>KUazh$EJ;1}rQ`)V>|KvgP+T!iRYRNyvST174=KURLXL8oJgUwx|95%~I?k
zcDi2q1tDPY(`(A7ozpMhTY^yK$7YXf3D?@oo+{JW$)r9fXyAY|B`18aexK=n=i#Zq
zj*6))Em7g6v1xfaehQ${L3!N643_O%bJ*9>XE+1xt10Zbty-SD>Vys~wzO<^u5UJ4
z|8yn_0+NjJH(v6j$GYZ94}emv~3IN&YQQ>B^*2p
ze0&h!cgT@Ti#(|~Z3jZ(!HebY3QwXs>j(YFktd&6TU^4(vOW_hc@^
ztPesHr$4Xq5D|X_L(9CbE-J8TZf;
zKfz{EI`sRi#R9Z-hQDMSu^UAFa&vp@BGgN0n$2Iwv+o{!OGy(+o&xZ~rgvexsn|yD
z{TlvqUx^^r6>$m8ho#{YbRnHQl`XHVU@7~9}0xSj6!v?A6d-8rp3|Enp*E~mJ7io
zU(P;y3h<_Hzu-ne;A`bTmhJ877;(lYuYnQ8)U%1WxSe=S>
zpXm$geK}vmeax>Psc5wDLtm~Qf4?=9_TX2T?Xi33Z|W(j|4TVv@dMPM*z^p0kxx@U
z00nHO;`b%0N@NL0^PPKKY=9F{G&$WaNSWMQ5J9-D<|r?QxRR(eK2{wM{%Xa&CMnLIKO+@fzo|V`?U<_Y326
zj+%k!CoO!tr0`)$K~|4~D^H^XIVI!5zfHIp0gPd933QMXf;kQd!C9(On+G37c}rZ+QNs7
z_2%*)<)|HfcN)Ydd(f;5lSm6c)ZTh^txd~MRF@78)`CsO9*#BLB}2(_quD28_r}iX*KWzUOlcCHV_MCCy*PzXa-U%WShaRgx%V7OdfPJ&>8r_Q8HLb!vbRz!HyFLRCkhtz%_7R=SwR
zlp-NF+UD7jCr<(Z(`*gTVk;+A_E~L#dycFV>S9hb)7+}X%Nx!;mT&!VGbTE}XpX}a
zu=MnB+%K$XnMf3kOwUpu;~IZCH#gZhIF3*%_4jQ|n+q-Ek$?$)8c+Nw(Q8E!Q6$~e
z`}@uD0djLZ2R6dbIB2aQrK;i|j?UQb9&2+mw;KJ=9Tpud$dM$36%M5o4U;k5p;+6M
zR-1u!_aQ$0Lc>Q%$+#_ffiS`AWM&i8BinrQF8_;;uZ$XrpAmxu-svB2p?o-cVxdxP
z+9|CLa^kbp_}1^&JN+9s#G>%62v}n!WegW8up27Tuv{+eZ!R3A5|2+l60|IL^QAJ6
zC?YIotINO4C!@Y<2e)dVgm#h*fQX|Am`rlRfv+xpEa-k+y=mB<7Teoh?9{z(f6|nIltF}DS$E^T?jqV9q`Ci;$HLlU{TQM1q~GKb
zy*jc_Gh}pG$Nmo|OW{@4NF(qjM+4U|HVuDgL_pG7Jq>gwd(L7=Q-le`lndm1Hyj7O
z1|%llyR66EUyQ$;eur6<61PSDNIRE8$&6;&ZcKE&c?#P*vQUU7^KDQd$ySTZr8GSta`a`ag
zFfu5ytx5{=T)GjJFxBm!rGq{h-xqlbSnz3$;g1FDAJ*2(UB1RuN!7f$yp6%B1R-pk
z37K}r_tJY!m-}Oh+Xfa3m4Jv2`f`#dI(TKRD@D$Dzm>QXa{7<97Us)=L+Bof@%x^Q
znP?EYb8zKg>|EKlg&+((OTn7fMH}%HGWlWeeZ~E{*J)8{*N0k@{=aCOxcpgSQg`HU
zcgLc8I2g`wd$uvCaAqzsa#Uwmj=TP|V%-m0ag*WEGf>}o`XdZmuoO@wMzm~d!}XBw
zDwrA6L(=d7z_@19e|X7I0yC>(J}}_55vg~$U9*JK?Uy&LZvkce7~1L=RgzqZF=yFM
zpm9k#F_J;A6i(AlR%Y%E0F?C
zkEL4C&_kn#m+RtrytC^i<>nID_(JQC53wBV4#vW7Nze3Hwbipkcfc3Z-PXPyA
zVt};vcb)gt++%j;dEi2ke5S$hIKuuebfV`k+7k#xrOq)~SN8^PPEMzv`DWU8p@)Kc
ze$HsDuF35tRW_ZB@MJ(Xk?Bx=WoZU4qfp#+1kr?w3Z<^6`12Z3{#s6rNY#k%YK5PP(wa7`s*kH`GRIBjis%Gkt075z$Z=;TF+B1
zG_bg%XSI&;2f?=hM=r4}CKe-g%ai>sug)29mJ?2#I60H;N0yCpGnkV`>Kb)}z5&hN
z0itrhme13?^
zT$->yk}+3YXUHi3%_p=Fr|H~
zMSS;UGHVRCvf7Fk5GoZh+B4Dih_|>z?>5KQO5G6+3dZSN;j>A+ovedd*nlVPrB^*1
z-Yt`_et9@@PHHxR@%dRc$3i-3%clW#O&*n>6hsvmD=Pp%JJ7FMMe2c8
zlkOg+B})lerUrAKEF;_8&Eo7=Pz*nCbr^N_Zv}*NwltESBDF~LLl}aZdQu$1g&P7e
zCkM?RWP(4y{M!++j1I$8!Jz7T{1GSVl;Q*t54>@Dsn`5nVv=6K?=^ZuN;fK5Ncg8D
z&?u-QfS8TNtDk;hQeWH3YFCF~(kb8TCDo30f{sBpdCcsXGv-|L2M=NXn%vTv7;OMA
zJ7;1pMZCLALcxL;5d!^vZ|I^)8G2eaoU989(fpJXv5S#uX>PjHlL)+`hM*2c({k#5
zr{DnSl75tWYn}Rluz}Ob3jtz|+m)mg+LBOv$9T(`@AARBrR$TNJ)`
zKMzi`sl&q7rwHXv*CgM1Ul0t;gBv>clC%kOJwi1wS7
zZQk+#k^B#+6=J!H-gZQ3KdnB29o}X*pk!wDc6vHkitPx3006Vp)#V?%pHrvh8N(v6
zzPjB?Zu>Vfm(6gPm;beBv}qzOA_dSLAsAwzQ(<|$AV|fFCX)NkHZZ;KVV=$fr!|%|
z$)_9#WJx<4n_b?)+(}!;tdsTB1gGi-ib;Ey&rVyNtHSabM=7imtoCfy951YO+i4sz
zcqsrtgA3pJR+}0!DN5yPti6fP9P!Jl4u7SQ^ZJD@
z1RD-R1#S_=qW&kHmP$!Y=)L!=l2v(-cssd_pd%`-5IO~r{hHC}#Hf$&rhDIA249vy
z#42zZ=D*U?a7E)WBpMBge8YcVjb%Pi+miq4oawU4^#Sa#5UGNYBQKWl+@9>d;?p!;
zefHC*e}zMYd-&ozXC(EbH`K__z93^>n%?fw_T~|R+d?&s^_ygH{OJr1(6z8294;IA
zeZ0l-i=NWj{i5Dk&w%=QGYLk(R
zbX*!xc5aR;#-hgR@ET@;emGyG*)3t8=k$^XRpCo@|DzK>4_^L9b%nr9{L(u!(
zH$|13>MOS!9M~i`Fr14mT$y5>(bZb(lgfp{mx+mvH{*xFSOEC?*|5>_Col^sP?_@&
z1rQ3cF}-}hle1s_isw*u8AS|bCVl(#=dVR|oPqwkfc~NF^pU~!HLHo9*zez88*GpS
z9rO&$QY^;#JUZWg=)N`c$rEeV5Q_VoIeZ3LZ83@r_%H_Hp8Coggf00&^&G>X?^!R_Fz1JHvc~T(
zL2`P}581!jcXr;Kff3b8ovD$H+_z7=^3YdWCq{%xFd9t7_rSMwmDm+Nf&K+{xnFiX
z#Y@5be1zBTKa<6Wu-|jZ#+ewgG!QY7%E9lXm}t!*(`fxcJKf}z?j}awgI+UUpM{Yn
z+!_`W$IQtq=`b9dzUmRUT>4ZSV$RidW`=~fHkg+D6kP~RG_Ej?J{a%h3P$$DHD)-I
zOCB5Zwvg|*w737K67>dU+eiQ@x8SV~;(&H6?@O3WBc53qv_d
zP5iO_8HqwNf|Mm#sZ=1ykqGdaVlyhI-hWtiG}*t!D>-BMT96p0IBjgT+{*HJDcgKg
z*=xn|A;YH*gKCHmOWnFcPM?tWeik34YUJAVH-c(EEEkuZ&{wjN-4b-8NR0BGj=DPu
zn0pOmr(2>1T=Z?Ny`YIKOa5U9KxknpHFdMcJD+lFB;6y>;}KpmRzxNoBl1_f%;Q>X
zz&}w-J-LW~vkn_A6wVaYvtp2OMx}6{$JMJDjcb|%hnRf0GC7R3?MK|5M_}{cS?>BT
z?<=k(vhoWfhO}(4NhND47;Ya)sw2p=OAM$Fwc2TG?EF1Ft6p=(P0VT?U}Z59mh(mf
zZdjQ*de_SyIGK<>xQq2dOlJ>s3jC3V&R2PUe37mF)8MS5He+%Mvuv{#YR9%*%6Rl1
z+i(~lWQvkvWOXWUimBl;O;zh){kscInD=c*wTX#m7wJVnD0)x!5Hi4wMjY$*FEBBe
z902qiXHqm0{klJ^M7}=hTF+a`Br&$oe-TfVBZO^0&l%^grQ)M@J*VH!cPtF;=7_5F@h^o7~X*vO>f-&2E{>pY`Z
z{hK70b9oW>nXsI#vAZiyYw|vHPv1&7UH3#>?m-Ta^tcV~3;wduFrE}{?lkCW~5=A6eu61&_vY@FAX$QGfOHLqwb8H@4sXvZf
z^Y?3mU50jZ{5iYOUE_^jIWL}|1-_ow51WeN#}mw`unzz(BSjO0Dch-){P-w)9|kjD
zOWZU7^~$g>@Orba9mevpy6FSSH`kU01%Ex9!{O+5Je&*UGZI;>V6E$@?$3<{b-F9T
zi*8qZ2ZK`|VCc-*Unx?FC9W6NQ4P{J3O0{Q|ASVDn&bE|V}^>Ao-ut_Y~mESEc4
zI6{vNrSvgVoCv|ZUD-PdFo~&9(~J;mVE!z(pgiyxnmJ`iDti=%RmIa)`3V0_^=MP~
z-$rKYwE-fcJ!2c!!?8uX%R9;h9WvNVct@x6#_L)E{40SnY{T>U^dD5qdz0Z{b=3-B
zrfJk?Zz<+|kbk4NL??@t=i%%?w-JC80C
z@u`qf|H68vTB~Y8z-1jXbLCxOJ3Fy&q9Y-`Pp}&1%ZkRA@PRhdZpZ0|sXg?wz}bbv
z)Ggf^K{{dmjs0Oi_Dz4_^J;7mOT(@S-6Mm=*v|Mw)2VceiQeyr*xA(*EaXEzINY+z
zQldJO4+8;;S&7tuv!%XM<{#DEom_@t$hcM2=k$d5A^t5GYJ7a%^svFqgG~)@QPBPHV@XlQ
z2cwdOa8qR*5DO40<}-%X411lX{+_hNez?Gbg0L+u#>If{lKL>oWBWJ)KB3*N+Q
z%{uWE9~reyAFmHQ^`#_aaJ`7BU%hXRU~y*v06w~jkuy$%-%Cf~l_p^_fJms92l{W8
zyHgX|3rx?a3#$bkQo_}PrrVZVjn165qYd|{mQr(-fkQvW{Wh?T&MdA0y1NfXBmnpn
zKB-mh-k%DQ+oXV3l4<+9wM}GSC1e8Q@&_6Ssd}+S|3ufpysN!epci1
z_FTWwVbyzLHOx>O0iyd2CP?@Ue^~D|*i`E83zd|Vk{DX|CB;v?HFS
zI0XIVal4X98Ps4=f(3`Nq)o;uuUTA+MhBWs$QV-iGHi$a+7%9qjM5=Cj-d~!i|I)S
z>4^-|(H#~bZQJF~r>P9&G$-6}Ul{AyVCr>1oUVM*>93DB6VCr)H%3W6X2`&JUcCRM
zTvcl#vv)`vO(afifA?d>^vsr`^qczpG^{lF3bPR9(4__h--HC3NE(}&!x=g(Lz_J6
zejf+o-BeN_wbFV-6*gdboe8Nx>>X;O9At2PD#9C08B$e&030=fD6G!bpslg(lM=Gz68U&e=q
zKJ5n~6oXDRitW$J^jwjr7g*qdR~kiKQ~aqL??WS5CHx}aHGwQ;1jw6&*Expmg8;p>Q5X&&p}0Pa`t({b9#7|
zNW;Bk!m4uQjt5j-Ws&8x?fwLC=#G6>#~)4|SxSh2`^@%ooz}1JcXAQ939Gd%w(ny#
zAj5B!9sl_4XBQH(M{=?mFDDaeV8DvZLh9wDe+5G5k8+`zN7K`gNU@>`d+9k=4HOJm
zWYG=aXrU$q#qZN3lm1+tsM-EyZ=o)vY$6rjRHX}p(hG_7oJE2=DY
zC-29?_9&VFxENupd~o}Bchy_G@Gz-slE;yRl!pAQxo>a^h@t8eor5{3TAeVPUgZE_
zsZ*J%L~KvDP@ZJ@jFMgzAX8MyFO4B3l}#D(=o0{aSUk;W=;Vn7Kf7N;(6|1fJ-5DC
zd(m2!ax@rX%7%-M?NDccfeZ*$)sVv$?`Yt8dolq>Mf%7WzP^h*Ut3YNe2fFu2@*Q
zd0#04G$A>=#EfkvlazQ*8rS}lfhXNlDNk{Ke5!%AyAS7w9
z2&tf6WFPv3;d<_78Pg_eaC`aauIvKECkSX;5ySY8)NB9*g`ZXMOk^SZIA++GMX3>O
zs&)KMbq)2J+??e~Fr7_LGZ`PNdpIY$5M*w4QS%(?#3&P#N^?=^zfCC|{SiT7XA`9D
z^&@J4r?A>Cth++BZ^7Q4M{Pm$L;y|K+yAT!f|4_-eubGe@5Og^*tp3MnMJw^!2OYzSkcrTwrUEHH2nbXtgW@mIe)X9{
zb*X@q;**i-L5W3T|2rU+#iaU6Sk!#;TLZw3e|6?fGxV>$f?V+!N<@|0_&>b=9y2%G
z-jF}886!b4l=h~{+$eyW$FU_r8q<^z$~aK|-5{TmNcz^Hr3?
z(qEiZ=|9RVhdh_&`c8alr-O_|Wq4BN=6yj^vCk*7U14)9S^GDO3cHEG>Zviu`ur=Z
zrFeOzl+UfKhq{SsRw^b!=!A!lKv@Tm(pehoE267j2F{!Gsw$wbga&}#Ek0(hL$2`5
zS%6Pcp(Jl#niEUBESIP^m(NIHAT3%TEd|kN`7b18#rO|>@=RDRdihm_=Ff2vWxRS{
z0*hP|)qcV&nQ_2IVp`kE}C
zZqQWpBEC)Fo-0IJ|CU_;cXXru*!`K)Zb%5`~KN-l=t-D_L^Zm!iVLk9`wq
zE-*AUV(_5tN1E?q#h-BsroI4sppJ`q#M;Mg=Pq;WLbW{d_(_-+IlS`K^XA>*QuH&-zex2M5VD@LmcV
z;HYNJ{eYegDO3X4iXO+hEDs`fK1v8*S!4)%*$tZ5kdW*vginLMBs6=9FMA8OonenW
z*p1UFy1LJ1iA_w@
zc2bjMw35y-}+S6e(xW8iD}yxf)@kL#iT;%4T%^A>{UMOb#@!i
z*(p}?W{tVv-8JZhlybbHp+70hpnZeyw7YU+j50O=7Xcxf%DDu0?(4$B-|5L0Xf#j^
zYxHFGrDN0#bV`}Qqm6e58n9TmID*}sGkRy^T_(K@G|LnC!CfZ>@dY(0GUl&S-Xmx7$cR!sB1-ATTtj}>&&9K`
zIvfgSka?-tQ^mBjH>N=R!M91GZ6?#}vUW-_Y!pc}wg)AYf*9l2zv4A%E8~-j_DuBv
zw+};lJQBqOk|@461EYY$iShjm>LJfy+$JuTr$BNRI;VoYLrj?tJ(GWrZ_nY94F|ub
z%`52FbY`2xVKp()rzj5s8J}%^OIFq}Dw#PF?FzBnyAVUe@`#VB=7aH&>b?{^7I(vY
zkX;W#ajitT5Jn!ld|Wod*P1>xQ&yoq8L|5n6QG77{A(x8dQOEx%LOKvxhpLBEs6gf
zB0_=jPyf^VSc)#@??@?m<-m`h#IyEuQ2ge=#|mMonZwy?Rv6tIufo1bDUZzoR8Hx!
zQBw`DUH29D+^V^qUC6prpXg@6&})Q_L9_ye(bq}Z#KnYJ*`oM(^s_>KBO-;xgq!X=
zO)RxF;!C$hzkQ1@`}fbwn_hno#~jz)LqMD|$p>QQId?Q>TTkB_yO0~^2q}XsfHG2g
zFgZ#NGYzeQ`R)`tCCYSn-&o+|OB28!b&Jcct0FBPat>urPLVWfp>2XHM~HK>q~Dw@
zr_pk(&k_BA-0znp5(#@@d;rTDzd#_5HAA9Vy-}&OQW~_6JzmV8B&pQ*MwL_p45MQh
zjU@V=Kxn+nDfPk>dS8rPh=22hb$I_F*y|Ae2Y-4rxxV9KU~mOrd0!RiCOp=QLPNt;
z1wj!{ASan6Lif{)g@!e|Y40OF*6>!Rc5fB>W?z{Ss>tSgtXqTk5{VKo9fUwxQxLE-
z2tm;~>>c#90S5y~%TE^Vuq)~M6#{w42ITcu%=qNvEPt0hcKK*XdR}?=Pgg+ctZi#9
z>3A%*vA%@?24~!nd!F&`3$d12Wp{ZNP_?tFhbs((*;fgt%Co1X~Hqg1MBNb7YQmiNVV<-0Er*;#cm+y2zV{liyiWV-|$EKeg+>x?3+bq-TvFPMrx
zJ3uXbuPbrz0?xxqLQ{B%PLK4Xjof^SKO)V-`73Pfm#xaASoWN5ngD(O4FCl
zi>Mi{&*yneXlTyQkfzp5zplH3i5L~OW67#<@$G^U)N#EEY)+-uEwJ_5K{IppIm&wZ
zp?d6do$kjN2+oRGDc+Zp1wC7g^jx?eNGSC2(g){U2N_CfG$S(4hlRy)8rC+b{%upj
z#y<*wkLv2$GShD{+)3TP3on1*yjjRM2Md^un@4k-U=)o{<$3wq;&P;ucS&FNcGq#E
znF1wy8?e{D)=uNLNX4V61;&KRWRO1~RgdedJQ?I4d?I|Uj!_X8+P-tb;mV;akxRw{}fiz?hEMSq|Xao_wrhhY8
zNjoj^c?b!Qzzkp
zY4!c84Psv2#*?EB5NpU3>udg>Qi@8=*0ENDyg&CJZaKcxFVN_J8c~_ca&kBwN+)VQ
zs2{ee9yDksOAA{X9GDqr*HaCy!3Er%)Nv=Qq2qg$8~)H)KkTF}-4O%Wtp{eqj*9>N9Y0tkeRxa+Z4Ma@>xy(1K(9m6VQ&`V3yK;0XpE%zJ@^h5mUHs-Y?7^wM*p*35`xVe_coH&X7~7S~y4b+9tT5TGGr&26P(C$UVEW!cd4
zs;T2WUICr-bgekfXM+3t9P(G*(-i75@Ahx22YU)rI>qLntARu%SHsCa9mlOs8HQe-
zRviO;Kui1;U^$Y1^zOlnX*9)Pr2YKT^%tXm%Ve8BHh}-9&
z3d27F#PZYV5-PngSE0qa@$vEdqj$>z$euIsW+UY|(#)ssB1NGJ@-=XZ@9`r-y{(4v
zCE;zgQNQr{&0nQJ(b7UfQuFq6);CX=v`_n*zI#fSFDQt6eX)+>7LRNkHED}BG92qC
zCthjl+ZB!r4h{9CB-;kEPI_2^2iZbCi>{R4uZ;-f-ov)@)=?;^7Tv$>hy++TSRb}u
zH3e4$u(sY-{%t+(LNOuAdxJGyarW3XEyO(Vw!9IKB7^|0R=hj%;BXd-yEK2~%G@4V
zKg%|9Zb-K6TD+Sk$PcAm3+|=VRA*p4qU}r{K^Z&Vj*9%15aHm%;C7>Y^_RlqIzN~7
zVRUZs0|gZlB2!GrXUzA(D5%RG*CDx9^+G}|mgp`Y!4d=%_sC>)cdM+Aa=OHmTqqRL
z$|t!aMc0R@?b}Cwx+&7!%X38Vi~xv&y#538YlN>}7#8+Pij;$ITc*P>U8g6%KW&{?
zEInWqH5o*!Hw{uw;E#kT^C7uT>C-v>5zRUO275MCsZC70;=*6WgitaH}E!E
zs9o*k{)L2X9+h7lw^t_iirAl2Xp7`+8-uIVS1ax
zR|{q$sX2G(b#CK(ptnbD6(^y!wjYoDj=wdAwPzT#!us8vJ)1F463449uF7B=1;SkE
z^LHWZ{yFYkoTk}cT%5D1Oma_mQtRzE#o6+6va;_bAyC`X2L90s1$lM39&6KTH+q0{q3l?o4kK+YBy$
zR7XI^_0y9Aj3t5!3b&yY5`m8q@nOO^_gf+;L5SB?c#28CAcTB6Bt$B&k+VE5CF1B=7ovx
z_E>`%wKmn9Le_QWe;upk0D|}go4BlR!ectCXR3EiYAewy$kr>pxMGtn&gFn(e#`Cn
z_HO9mZhLGb(2^zwc;NGn7*CrS4++8Vrk^E@$UD`L4kL%
z*FZzRLb>;1gPfDz_Ge}}(hF6?_eTN-Z}D9c%pZ}1-1sNc-}|_WD;0Gcf2Lz$N4`f1
z+*%ejrRzot9vp?_c*{FC!a<&UVL1$UaYozoKV~B%-PoyKy~PwuTbC6+-Hmwm=w}ra
z@E)qoL{6s$y$yU9hUvnasCr+&VAFEk?XsgyLv
z5Lm%08eO-AV+bwiYz9i1yrlDYnNFABj&Te85fgU!-;0X^knf;7*sa+?LSkv_R^6A!qWj9>Y0FYdfq8ObmqcLWDS(oD==Nb4*0|Jo
zUf@hXVa_0X@jYvT^G&(Y(5!vqYOc9nM!JlPXINQ7w}BSz&CBrdgTKya8!}Q7g+;j(
zLZc#&Gx_P;+2dYEo3`Jmv|;Msw-V$PWZyddy4kMq25%evVh@Rz?v5pcTSA7sgH>dy
zB4!-I*KJtrXcE;m
zxUwFo1|T1%n7RhX;-W2+tu;d)npreoZ2kOUp+#)JtR+~MDq;5+4!2<#NTbXgaA0I|
z*O)%3CbZp>3{@*DD~HhlL23pk@TDX#k4
z%h_BC=-z%;Qdo?XqkdSku`S|!Dc4Q*tVO-wD!D(ZjHC!!PNjNeHf(9f#mrraIZJJi#S1Z
z=}@Ox*d0D}jTCc>%Ya${Hf0U0x
zR!ebv^gl{H(lj&w1Z2AsCnq0;O1=Vuu(|SDR$69>`_+N-CppVCq+^K@>UJe7=b){j
z41X&4<-w>jG=Fi>k~gf&P<0Plg54r4ZewXoKDo42TI?}Bsbe?f`t6(9^L^9=SpbZN
z^5LN*i)RU|#iY!sPu0#a4B9{OmKBAY{`cCP-+@U1JaImoM@>e{;LD2pri3Aol^?PE
zNK?OyJfmf5r!yoEttI7-y*wKrd?dRw?_0c%ENW)TVw_wOuHK}-UZZ|W*|a)ra0Ti+
zvW^Zoac4D^+3w)a!w+X5w>r{OW?gqpq!fPPrN`X+$+mSmy!DI<*F|?b=R@B>xwm5B
zguZJ%l#TJZ9aSl*rEcb&i}M1H-RnUbCH``$6n25xM=aE&JZ?JX1l^XY!J<|kwak7r
zKa3&t@7_iI>Cm~C>ct>62k$xQ1jKu|`7+@Nxz2?5#)xB4NKz41&STPWrg9~qew6L0
zU#1Tg+r6rDH)0*K^vPK^)L$zvS=VQQ7S9F+xhuuF4HF;luARDjUC+clGv06KuyfIJ
zR(O`{km&}x1sobSRlA+V1xi2eJ}dj`>NXLcwk%B-9}B^fDSH=liXS`MQ4A{t1w(xP
zXsUh!WzH^Tn`>#UUY3+DAZsMaE7cRmeDD<}Uh`=lQqi=m_$3~0GiD9V|0a!oFETy4ajPkU#VziAwPA;lB=vpDS{Z9O5O7FdxC3nW|p~gD98XVJ%z-;h5
zxNG&-ubSi}HiJ|tDUL7SeEElPdTcu_-i8@Wa#e$(At2DF#l@xXQN)FX5T=s#b=8J&
zH{Nr~2vR}vnZq^<=E_A@wCDR&hn_-oktd(Eov6l2c8FbOFQbnjpai!@j1Ip1le4*n
zaL!Z-6c@!*9JD5Ai4{*=A}tNg(}nciY|#X>QX*n^GB*cIn_sauTDh9;VRSjnQTv;Z
z@YoboNdX`oLg&qrHX9>x3XjwEF~f^#U3Fa7ps6y}rd`WZ_l^`>2Zg$9x`65C^LDS@
zI!zy2S*4kgMiPLOE$vk@1P?
z<@0BZ)0m$)J`C@++_)8hQ;3M=YwK0M)PIl4!cDGANSNK_pvID^tKIT#s)>JZPN2_b
zT~hx3%lF|(St$$Zw$H^6CEeNw9Zydh(>HBr$CG5wRM)P#%JPAMuLJ5
ztxl)JTGy>)XDmERzb}OSUl6@bwU9Z78%3_dCfZt|rgmTMQkQX!S_9X5QxYk6~GiE-M`;
zJWpBFdFM|T7d{+Dr(ci(;76eV=``k-9!x0qS{*TN7X=Rs{<6_^5A|vqhTd3)4$I4m
zpW;eHr2e&a4Z-XT{w)5-Hp!;{lc_ude^y2AM3Tkus&_i3qROX7|J_)OkVFFJ;;8KostsCVo+Qg;Ft=pR)%oxqURM7bXKQqBU)*VUKAhhw75L`4~R
zc-*?r7vI}5@NGk)RUvjLiEg!;bhbMg7u+1=Gqo
z;DX0Z5+RuR5WE<|J{+^8>e)i$A1(U&XL~yl-77q8DT~e3Cx60Zm)xd_T%u;9)pg?}
z6g2*{kb4WR@%i-esO`;+840wx`%{
z4hh`v?4G;x?JYw34_OwF+@ZmpT~5>JdV%iX;I~Miig-cN4^LCm$x~)Mf!9jk?WSAb
z*QY5cQC)aP+Y;i5|Jfe$@@r;VyT3+%oEMSHbzWBrbU7`gNF5%uto6=h_|zFvJ^!lW
zIKkB|I=yjW03!UNp;Po76GFK(!CS+MmCLq=cqc(76nuK}&X7d0@8i_=agSg&h`a)X
z?7r4v@o-9#)`@dzeM_i93A$6ezCdc~mG)9-=Q6`}<-l{;@b0WP3u!$yix&w2;biKp
zN$am^wn$0;ZcHK(@sDPHWhW!&A%53Y({vs>F1PQ^Hv&<7h750ViVuCw*kqIcdV8LC
z4L1vKK#Tovu?;!?Y-0m$C08X=#ZGQ3>C)ke6=rkcZv2N8zrcgRr;H_{FIOTjd^N)m
z5ju#vlQz4vh2#?*xZFx%+Q)RNY|;yktq!075qsbX0Kr+)W-p>I{;|!ZzmrqMZ2EAe
zm1q)?uh`YRCV1u;mkMgOlD{x8b#pgQH4WJoAs~3ikOv_lc)uORikRtY$HOz+cC`14
z8A4f#^v;RnC3Yt)oS#cG(LY-KH@emxZIs6#K^x&M8Kle_xlEf@DP?T{#~G9oV`m~QmV$v6D4`FyeTwQWc3heiU6x+
zih8_N!L~g4H$33`?#6lweToc~A4w=Y?zk;uB-7BaFc${}q^d6it$$h;x*7$EFVPE%
zeYWC7T4H0!5xjeYU*RFF$cCX(cp^)LH?*p{oNkg1Z?5Wj;?gr{Tpbxhd>VWI_2k!o
z&)b{@eIrt@@BJP0>KhO87O!c&TF8yDGK1f@`$EHFL^~&O6h@Gj;ZYF6i6=rcCL+QT
z;)S}cWv?g5qR?qIZ$Kzz;2YHTqC@zj>{H=@aq>SF_!Y1n>FKQ?@6>_iDq>;c3i-VY
z_k#}M=}dkvGx#Ryz@{j!#oc$3U{*}+wg=ZZq_6dYz_LYHdP9&O8H}`=)$;i(lws@E
z%NS_CkAScuHmDyPz9zsY*wD!?n+`D%^`=E;Q;)BtGeL~XLGUj7C(ZwNlw1FJ{rdm?
zg`maxZ{+`bd}W+V-&~8XJoY~ZVT7%Jiv7=-_@P|D4^T3$Y0}
zFe9sO6NbNxVwXhuLojb&H^9UF@4uO0Oao+(J5mxVEekIjRgL{NuTHxO-eF(}KivS~
zr?4)Uo>*+)JZ~wJ=!m=>*G87>&mGi%2;yR5Ca0&pJUn#bGFwfg*a$*a2!PWX#{X97
ztEi04&x15c@XQ9m!M-umJZRrk`_BboX{wRH)os8qm(0tRLZdKD(-
z6tk-QGyPDYLo3PxA4r!ShSs&h8;fZQhS-2BDqlxtc^<>&iNS7KD~cverHu^X_
zE34o%FSfaE_WR#oSya!?iq1$Vj)*u4t-14m$^DT>*VWaPM~8=t3xtB>!yz_N_^gm5
zPfyQmkfXokVzmr55|U6Ipg&KuiB&@Ork#MluK4C!HM1DjRzB=OSw2Ys{#z&--5
z#3`5N`GzZBT(23JrjS!))3Sd4gIQ!=OWp@AJF&4h60bx@Jsu||a5NXJ2||Y~t5v;|
zRGSwSQP|P)3kuBr{2oe!HmxM-3qwtKvxfand?E18_@bj$FM<1NsA6M8{2O?D>V4FF+!hoR1c5;QJsZdR
z91tQbZJn2~*}TwLT&3nCmI{uB2A6`{Se`^-VIeSWFhnPU0L}^DttsCZ961-v8L})p
z8DQ}5m%@TVoAg-};BVykxs{Yt4|+9
zG3DVk<1$mzC=@aY{R0DCtG~Net*xzpSnv^`y$Sva-BVK%($LgQku7v>%%qDIG&bob&IR91K1ZH1YP0?m^H-iE
z+4uQo)>B0d8c!VT>|+xXR4AQJ0p}UjSlUz3Q98US;5J=s>Kd(2cl*G9eSB_#
z5n@RMEDc1`<%Lf=UP5d%H8dWt>e~(41N@orGDHHO$_<*|{O5=z6#^?3Js&PV9h#Bd
z&qxWM#RG`aW6Ex4tf8Sn_OOCn?=Y`vXxJ9`{4`mjC33rwxIbO7Tw?>DtF>cfWNd$a
zJO(gb@?*TkKnh=$qJ&C+e?JPv%a<=DBqYEPU?4cBQ~RT55xkE;zGkm7q9`aTvRa45=+!#{6Ai&sfD;lCIW-^F9UUEMGfj<+sp#u3%*^n9
z`V@?*TW3EzF)?wp*bE3mPgl1z1DITLQW6e6J{iCJuev(T>C4qs6N72MEd{zVdU#yU
z%xDY$6g|6)SkX;HFrFO(9N?{tEGWIWUlo
z!0&FiNCCd^+vFRSOuY0)tiaJsgG+w-euQ{lVIehPOiFTc38
zmVpn+d^X;P{8&DIE(*LWT3uZwd%o#?i^tS(+;-0!D*${Q*t_CzT556UHvpb`z~h}&
zw$E16e)<019ymLDi&qg|10ZRw-Lz?R95LS~E-pX@RkQXgDk?rcKK}mxoP>+jR!Zam
zYw`1OaXFnT(@SO2sRAZnS67!W6<2Q9+60B}bp*Y(4|1gs`mctFnLmdwhMo)H-jQfQ$B;$7xAlUtgY{goGs7qOqbPj-6XrcxilG
zRa29jmv`sXn>V(4PThrg8qi`btyIM#T3T8;IXRAWd4^haBj_u
zfL><-i*9G<*PRQl`Ydi|cDvgQl9iJX2R!S4&IF%e_hBUIlr1c_pQh
z!9n1+;Kk^d%gf73Z6>1tC3+A3EMOMEX#OLhB@RKs7W>&xa86(yFIG2IskaU
zz%W;77B;<){#}fkni}|WbY*aGuslt*@gKzIMPXiE>*`swuHS~`Zp&PfTuVo&JmpoO
zx3i_=eE(3YWtTu=hIvE&kU%(VpG^V2>57YoM;ID}2{3}&yCXkD35`i86dDnMssL{>
ztQgp2U|`tW*|D~>Yu-%Jiv=_y@aX~2#+S$#Ou9AJ=UYRGiHQ)K*y!jJ!4a2*o0|rW
z7#5jvs7A@h_`d+;wF7A5$Mdp&-l2LnmP{mI(PP?SxlIUYw-OIYJeE`*z9A|z9v3ml$3&6gt
zLI$@<^rEBJmoHsh)B4p8^V}tVgPaN_0vaGt^Ys3vPg_lmyS@G3{$*Wl?QWAW7uO`f
z(ts~6FIVi}B~Z%&03Lx&3*e8NTlHm9S-^Whkx1jV7a}^`vb<0!Ov6p~8UKk}|Hbg5
z^p;NmFqW+D<@GhFb?N@NT_j`Z>A*_l{Qj|M*i=5DpwVsHvU>KI`k-=qoc}d
zYVc5WqJYa1BbfvMdes3IzO>Zlc{m3EL3w%kXYv)#W)h4rjatV^AAp3o196APfSeI4
zi)P?TZ{NJhR4meHb7b}&H2(xhX=rHZpV4q@%*2h>MFwEIzNV(zv=R`WJO80;qdhlK
zugj^oAkZFJQ&Uka2~^)7dE&
z*9!+6hoJHgXl8?`SgdpO-;U4#8Fy@o6VSB$so_uqwn;TKP$>W#oi4w1&eYo4I%Ylb
zhKRsSa73^5Eeb_2`G#vFfQhlOv7qBtfO*waR;u9i0OkaiHrZxuYs-Kar9&c7_M=ZX
zD4acDErJ%9;CUHGndZBs@yg1|+w*NT*~C6`{w$2w-+-wCi#6!8vA1_aV`F1o9d}|M
zF<_wpi4_!3VMVaP+zskuWeQb;KCjH#RV>y!Eq8Q$#T~Z>Z=K&>9WCyA{!VR9cP{~Y1wgXJoehAFv*}S;xezepIT5R$lSWi#?paAFR=Lep2-q;Sn
zz3%Vtt$56TL+1c=va_}Q7%vU5D}et8y+j`0bqAP0W@fZxeiajdHQ{+X?)>bqcxfsE
zG}#36*3jhSWa8e&MaM3-VFNbr@^k9nOlWU@1LFM3IGWxD%xpdI={(0L8=wM-i;m0f
zf$in{)!bpi8e+IHl7NM5Zf*t^kRa*xtsgcvcE}H4Eow7yv$6eX}MmTPO;_ydL`g;@`P7C^~x<9h$0vATKU?OxyK1U~sN
zjsPp57WkyRoTY^HDS|fJnLi6+v*pUCp;2!?8;l9$%ZL0J9#+g5nVy`)jS#1j0cfcl
zO(GP^5b1id@~5imQ^@GejW+-rg{mkNVt)bB^afxQdV0vn$YzykBilrzq(}SvY8tiG
z)o@ukhxxig07(9MMPOEIY#9Ku`u0Z$G3mg-Ks~+rZQ<+22YqAijASYqm88?tQvgtwAGUZPHh`Vheq2HC
zqGMue0q9OxXeb6T@95~Lv4n--2oEQxzW?Q<=GuttQXzadAt8awZYmmBw6U=%si}Ic
z=VgWA1_lO|+6NZ*3pulay|xV+>e?%ec8+bE@DP+A9slAw<(T|y<#iNfpTvun}
zqJ3Y0p&!;SKgBrtbunPh|2FAbj}uv1T+BK~lcnF}9iD4}fs?9_91p*l)#}#IjqC9M
zK96on8W|czw=J&I5VkGYbAY*i#-7`b08mGOX9HpuV@d4-f-l@9sI8a$+M@9q22Phn
z_1RhF`VfkKvO3
z+4K1dALCTei{Yo~U(0GfVowQ;>h#jC)fFFM+HLu+8r6@d+7HLiPj2zj<^W|%m)D$B
zFY3y*1)C5cvNkNRbSpC?*XS}9sM0eE{+_xngxkm#lcTVtGLps#WGUMDukB5i0C-fI
zf&y@v!{cLo37~9IS=L`T#|Er9?``)!5BEV^4;cctkx39&QO79+xFZB&X=<9++G>E)
z^ADR%P1kO>b4Dzy9qWnAGLO?@*%hg;HGtRg=ylc~5VC>u*&l6iSYwDd(-B0RXgHqdrYydaIQ?e^wj7fU^D0Wa{Tz
z0m$AL{clvw>BZ|cydPanxjEZiw_*}-G>T}{UKO}_be2Eb7ZgfcFvLXvj;&Pe+Rxr(
zXxQLxx4Oct$8ZX%O!iDpqp|wK3QMhf}Kmh?=05zxVGc`7ojBLC$#R0ExyD^+A%JT4r2_<;`u#TI$McMDu{m1GGzoVYA
zgHfGc?ZhacEH8n|&R1#LLlhG$;uUOW)frGm#=z^UT(HOIr;&5gF5s$uQ#2B{ucp4I
z0s&DV1Qz*+vO0=IY$JJyg?;}SpFheuqBwiW3MfG8Obt+wH5%tzOGewKE(Ozv{HR49
zl}K4>HMEQqB%^72&(leucd7F`mjf8bd6PVxIz1lUe#-!xPPzSVqT^G7bq>~e7y$$`|N8NPtl_+Rg@rGgYU-L9!Kgefg_P_Fo=Z8
z^lwfiZzx0A*I!-GsEhn3eyWdZc&(s8_a&OWpCAZbZ^^i#?F?v0_P=8#3vJ{MyCwH0
z;@hu`K#Q9+X9BlqaI{LlyyWgcPACw)0&)$NK5TlcXtCDfpB20DWmC4;>?Ea!tn+)$4p$jGo!~4kZqJ*~@UMPY}MR~l{Ko#`AC+23~dSo(h9<6O0#_k65Z_?
zI5PjNH{(P|aY>+q(T
z(UT@Duo4?LlG?p7C>9RpE!Nj}cN!K+fHN<{><|kttyl!?LUtxdt#1xqjF6&}bAd%q{O|wk_TeOqy4egP6nA`K-dX28v1i*COnE&Q<=?WM~E-
z1lyR2a+1{8xl-eaNuyCKCFM|H-O9=OrmmI+1~rYuZ660ur_?}w)zrjWynepk1a1T-
z(WqhsZp4x(W*8=eE`l)WA)57dgS2(_j|A_|Jf_a++Ph7*J9plDmDMhV!c`Gq
z?AxHANP8`ER@?mSbAEBsci4UthTK-?=G$O45a=IGPQ~B7zx+Hj7VCdL{m@gs>~FIK
zM$Wz;E1L4ZXpZ6uU{KbduiSr6P4YHn1YKh=i_~_ArU(oBvCa9=`*`e7i0d?Jef@|Gvy
zwcEp(NFcV$PSgD}rSjD1{aQ+4y&ukp)TWX?X`z@tM@nrb!t_m!zy+Lxgd(uAGxzqbv)D|qa{FokJw+PLw1O)@B
zsD0M=0kO_Rqz@{`xkX`02L#7_?#u1MLQ5b{E)HF7zIM~6y_3xE@!4M%L8J!vs}**#
zcqZ!g4|OHW=g(IncM6?v^GTZJh_rb9s3nr$9^Z~zhPtq@S3d>{YqUO;D{GuDEeG0I
zo_PN@73MgVCreC&gw|{aD?haEE)V}nI
zud%k(Rhvyi^i8X5`+S?5jT`*6Ty3R)^L;^|o?vP0BP!=|*BFM-7g|-Q{wGolNc3bF
zLCzJyJCPl(j?T4zf~PCDN5}PnOQGxMVD~FE-zFCUNdoL<+8vA#IU?Oxec8)%h}f}U
z8Z&vdPc3vV!Pa1PEsJgfi;2;VGoO-Jhuffpm=Gu)0az9j_DTi*mxdN;?C1n1YvC>`
z4{E8PxC;iyC=dsn2@EXX_k@->PP(RpH@)jWU|S>
z9H@Kwz|ahsOS4DVj^^)aJ6(9&``?*GzweUPGKZbGKUY>>wdVFWw&lHvj)&uOqoccR
zsOK>C|4K0nx4-`*C7w}jK8z(V?LC|T!>y02X=C$qMWzYa_K9W#dSd?fSjj?V02Hd)
zI0SXNX|vtxbu8W_b46z0w*c~ye~{x^y}Sy3#vW#
zpI;AT@G5o?n28gJ_0&e0t+z^L-&Ay)AET2!)g{OrJ$7j&z$q`amMOw9qANGtPlKB+
zcNO~jR)yXLx=g-&9&3FbN!J#4Mb3K4`@a8twv&>R%vrNBUg@9FHurl?kq=ks>EQV$
zY8z*YDcb#rl=nef=X`EYf=3>`2CEYkWgF{sTRgOz<#u^kNW9#*Zvr0;-gNW%qsY6o
zipnSS{c?JF02NCt+}M=)-Nq}uk*8kJwa6Z;jXS=kB6=-4>0%^%4*0|RDrXUP8EFTBr}SYJ-D=7ZD%!=TkMeB6xFP=&;7M$V
zl0!r&rdc$m>i@^fQEW*NydT*ltt9zBabTa9w@XdCMyqt9LNm9JBG!>$bX*={-Y^0R
z;?D5&B-O-|k2EOk+~aLtHU96oJZuSjE}19aPQQ=sN}H}_8i@+W6#c#1B+JH*HZ*~o
z0e1p3aG_^(k?jf*6CHx<@BAU<4Cyl$%66`n_DB8Ks_@@@eoZt{p7^kCPA-LEOnFR6
z6l{a|_4QU+e$7T_=EB#O(W;5;{Vs^B-rWRT9{p)H)-BduX@84%Rw53^;xXh=Sm!3}
z{f?m5NOF7cB}2<260ote*`XzTqONp}4MRs%z=m^TP2DA-U|5?5ilSXo@cbScX(-
zYHoc?T}oOk+RQTsI~Rd~npM0NYnaiVj#w6=y6I=R)?Uh%XEspw^0ycu!3a!KId^@B
z{7;k>JfTS!>i2FUYI&_`i7eOFOOBt?<$-7o5D+MH$^~c!4=SvCm%bZiU^Z=%?#=Ee
z*bJw-npP>Ld;w($X4N<+kQ57sUV6AJjwjrus7;$raB{(oQ7A)xmotX58}x0Z5`2tK
z)?a86N-voDKblBu9T5u(l)^P^VyU5+f4Ni@3)awK&a
zP_BX$U_Yl}evi>L!&zpVXk5%9Jf(&H6HU7@xqz$;e@7>XYlbNf-F
zBcKJCoseQmNe^bw9sRbN`V6Og$PW{1BwPjV)Md_^>Ep%!X%NDRCL%z=mIM_8;~ACZ
zi(T%5;2N=3^`4#E0Sf5;Q)V{@)x&V&HH9OhmmTmVsZKy4skEIY9|G9lXcbS0<=z5qayvQSwv?4)
zx7^id8KM6o!HFz8j7<#13`Pg5D7|Gh15#WGBq|QX2MM}v`6L(@d}nF0qbcMGxY&Kx
z`EfX2?E`ztPA;R}Bwu;nnYn9T?csLb3_i0QdVf)qoV$|0AQeT^nPs#kRQuM8taQYd
zL~O>y$0z7_hD1$bmIR~pe`FQT0Fz2aZzaILlnE4t&7&(QD5Ag1o*~^8PLfkxPi?&{
z6;-vZnzra6Gpl%#_(uUd=81%@LJ!n`hX7%7MT}pKI4~-rjE?Q$=PduMhq&LleY)Ja
zjI;Kp;4!zg^tU}`1Zry2n>D%p;q1|AG*%P(U=?h$k45XcEHRi})yLo2&6rXnRpH@E
z7kVE1R@nn`6#+*I#Wu=cc#?>@+yz19r-SiDZ7Fb6gJcsCVuTJo!hfb0w1%|1lD`}t
z>v=`GASkpDiW)``73)a~+S-ngHku!PhHng>i#!!1MARSo@nT022RzI}Gxzu!e0+b^
zf|he=?&B0LNYV*;g@xQrS9+L>iz(E!%CsZFp}F*-kk2Cc|FlA%WrFjUO&U0uz%1#L
zEjScL$DxtFM@XYT@~1aW=yE+bQ2=E%`{|F=dmwKp1MGJMK-h$`1$>kZ7R_!jB++{}
z=k@H8cm3CSo)oUkE*7l{ga9Zci;GJj5H`tT8#dVwW&q!|!R(9y-lW^KS=1bG|J~lz
z*SF!Zd&o|p&W
z76_A2_y%q&rjKT~%?8gTCXS6=2?4BO-Ct^)!wiy32_wjdK+>8bOHFp6x%4Qx>8o`Y
zgLJ`;c>o{&^p6kEzc*{yA=sY_JWj1IFf+?&KVQ9ny3|P=TTN_sycwuCOE9}<72)9+
zZ!_+a+S0!){}y<6wb2og(8$P$UwX7~{wqOdruDl=j200%nk_X#DTUhr8wx%~!{LBo
zn#CV=AwQisZNAmyDQlTl(|%#|&)q?2=|fqiy^keq;+_pGJ%Z{f7>sG?C=PjxCHu1q
zZ#p9pX)SS$Ux|4u%Ka?Jb`})-Yrf?@l3V;|YL1%cHj?2io!An58u66Q7uboI{i<1I;KO!9isV!L+x;%W)H&@du7tuS8UT6LEKAe3!M$I_M+^!S0t09
z6P|(x-hAkcLRn8AEAI)*q$v0t_#=P=PZ@mJm6pHH_Kx%!6bc_GOWiY1>*&Ut-+
z#A1T?1m+q+YU`8rPWQ9lpqazhFD57Lub+CiD}36?XWxn3wr0On!qH^;L2TG8fC;tr
zM3Nh?{OkRH7<EbLQ;5*Is*F*ShxF2g{0P30$F^$})7r;x<1j{986ht#6EZ
zQqx{+Ypz#}>queO*xr``NQ1aR2%o-N0VTpG<3oh?OX7l%n7p#=q^BI|B%oTcT&r_71lgGxm3*GkICp5{z
z-^pVu4V5-d^cZVDszKfX%V7gul$Ws-`Z~VG%%#*xI?k57^3bawi|B|_Bmn}CCj+h0
zT1WjzMu|KELy{0&5u%3>rWUPf!$TzBCW!-7;DKc7CYwoHJ%;_cB{;<82_U$=)}JK#%F7Vrb@jFLZHXm#B|ucy{6(1KsXQXto}6xtt%AM6(0WVHxb`FnV%CAZH}Y_y
z`EXPgVs|Vw%^7UJZ~D`{YJtf035##YBt!kJljYC4if!P0n%?e>=Y*Pn+^!;Pj^skW
z@o8GtG?#v`cJ3u$JR;V{jpEv<@RHwJdk*qM1icOhwTQe3opPRAI;ZgJorvzW`=p@w
zyr?L&oVXG(eZr91@ZId**0JPGCl#fQPpyei8;vj8ICrS?4Fa~SAb)($y?g*)<0ds;4~!0*-#UuXQ4Zl1KqFsGG$9y~hQ
zpXF?8xqo(1TqN@})-h4zt-D9uA+4he2CvLaixyP8s+6hJ9+|-3vR0$Iad%%_?(Vp1
zU-Fw1Z!v>_fE2$d%w>B2xO}F7Pt%z9LQsI95B;jME_dh2+b)OYCJSg#b@zm60piy@
z;-Iwgyfr`TX2pErxe4B~^mDcTW%rPm6!)~LV)oV;oyGN0+BHXuk{J|>ok7*~9`EEz
z+y%N?SX2|fk!!lxG_#oQp;55ft$BW~H5X$DhnhxgIT>tXx~D=d1v-y{_Kw>e0au|f
z{%HOT94QkGQei@w_f7zQTe(h=y`T}GfVA)MhB5FjHd4_|IGs7<
z@A;IIR9*x#r|T@tf!Ag_%bw(Qu?Y%?r-v4?>s}x!@=NL{N8_4H>hQli4za_PTozE6
zurKr7cLTb1?T}E5W8ii1KU3{@SI5;p5~sh`dq`a_F}ipny~f^`GEMJBaRqx|Yz6
zATU!@?%Sxf$4cQ*wN=KcS06tN9^hOCc&*?#Y&w-6Ni-k#oHb@^k