From 98725c5dbe84a2add5d6a4055b355f05e4253d53 Mon Sep 17 00:00:00 2001 From: Jeff Hykin Date: Tue, 10 Feb 2026 09:28:49 -0800 Subject: [PATCH 01/45] add arm support --- pyproject.toml | 2 +- uv.lock | 34 +++++++++++++++++++++++++++------- 2 files changed, 28 insertions(+), 8 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index d5109082c3..002cf222f4 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -51,7 +51,7 @@ dependencies = [ "colorlog==6.9.0", # Core Msgs "opencv-python", - "open3d", + "open3d-unofficial-arm", # works for non-arm too, will replace once open3d offical supports arm # CLI "pydantic-settings>=2.11.0,<3", "textual==3.7.1", diff --git a/uv.lock b/uv.lock index 2c4fc00361..cc3d87c841 100644 --- a/uv.lock +++ b/uv.lock @@ -396,10 +396,10 @@ name = "bitsandbytes" version = "0.49.1" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11' and sys_platform != 'darwin' and sys_platform != 'win32'" }, - { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11' and sys_platform != 'darwin' and sys_platform != 'win32'" }, - { name = "packaging", marker = "sys_platform != 'darwin' and sys_platform != 'win32'" }, - { name = "torch", marker = "sys_platform != 'darwin' and sys_platform != 'win32'" }, + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, + { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, + { name = "packaging" }, + { name = "torch" }, ] wheels = [ { url = "https://files.pythonhosted.org/packages/11/dd/5820e09213a3f7c0ee5aff20fce8b362ce935f9dd9958827274de4eaeec6/bitsandbytes-0.49.1-py3-none-manylinux_2_24_aarch64.whl", hash = "sha256:acd4730a0db3762d286707f4a3bc1d013d21dd5f0e441900da57ec4198578d4e", size = 31065659, upload-time = "2026-01-08T14:31:28.676Z" }, @@ -1739,7 +1739,7 @@ dependencies = [ { name = "numba" }, { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, - { name = "open3d" }, + { name = "open3d-unofficial-arm" }, { name = "opencv-python" }, { name = "pin" }, { name = "plotext" }, @@ -2050,8 +2050,8 @@ requires-dist = [ { name = "onnxruntime", marker = "extra == 'cpu'" }, { name = "onnxruntime-gpu", marker = "extra == 'cuda'", specifier = ">=1.17.1" }, { name = "open-clip-torch", marker = "extra == 'misc'", specifier = "==3.2.0" }, - { name = "open3d" }, { name = "open3d", marker = "extra == 'docker'" }, + { name = "open3d-unofficial-arm" }, { name = "openai", marker = "extra == 'agents'" }, { name = "openai-whisper", marker = "extra == 'agents'" }, { name = "opencv-contrib-python", marker = "extra == 'misc'", specifier = "==4.10.0.84" }, @@ -2386,7 +2386,7 @@ name = "exceptiongroup" version = "1.3.1" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "typing-extensions", marker = "python_full_version < '3.11'" }, + { name = "typing-extensions", marker = "python_full_version < '3.13'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/50/79/66800aadf48771f6b62f7eb014e352e5d06856655206165d775e675a02c9/exceptiongroup-1.3.1.tar.gz", hash = "sha256:8b412432c6055b0b7d14c310000ae93352ed6754f70fa8f7c34141f91c4e3219", size = 30371, upload-time = "2025-11-21T23:01:54.787Z" } wheels = [ @@ -6032,6 +6032,26 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/9f/c4/35a6e0a35aa72420e75dc28d54b24beaff79bcad150423e47c67d2ad8773/open3d-0.19.0-cp312-cp312-win_amd64.whl", hash = "sha256:665839837e1d3a62524804c31031462c3b548a2b6ed55214e6deb91522844f97", size = 69169961, upload-time = "2025-01-08T07:27:35.392Z" }, ] +[[package]] +name = "open3d-unofficial-arm" +version = "0.19.0.post5" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "configargparse" }, + { name = "dash" }, + { name = "flask" }, + { name = "nbformat" }, + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, + { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, + { name = "werkzeug" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/02/87/95d3cf9017a0e89a708e611d003abeb66c88d7947fa7238962971cc8b0cb/open3d_unofficial_arm-0.19.0.post5-cp310-cp310-manylinux_2_35_aarch64.whl", hash = "sha256:26bc160f3326a74b232f026d741a576bf0d1fa7b1d5128c5e979d7b4d2d1b983", size = 48230542, upload-time = "2026-02-10T08:37:33.928Z" }, + { url = "https://files.pythonhosted.org/packages/b7/98/e5f803c0ccc23ff68eee12d4b43aa48514dca604e3805f243f399050bd64/open3d_unofficial_arm-0.19.0.post5-cp311-cp311-manylinux_2_35_aarch64.whl", hash = "sha256:003db3e400cd8053e9428c6082af72e73082a28b3e69e9c49f69f83cf5205bb4", size = 48233477, upload-time = "2026-02-10T08:37:47.281Z" }, + { url = "https://files.pythonhosted.org/packages/36/36/df78b304227d7249f3cdeaf2444da17d5826a2c7a679e71084b3aa0d1b9a/open3d_unofficial_arm-0.19.0.post5-cp312-cp312-manylinux_2_35_aarch64.whl", hash = "sha256:984d7f5757e9cb2f849ce43f43046a30a82c221be0778149642cdfe450bd3664", size = 48221813, upload-time = "2026-02-10T08:37:20.834Z" }, + { url = "https://files.pythonhosted.org/packages/fa/93/25b667f4dea742d870cce76b404aab46ebd47bd66a3efc162bc86e4c81fc/open3d_unofficial_arm-0.19.0.post5-cp313-cp313-manylinux_2_35_aarch64.whl", hash = "sha256:ced1653305fa052015fea3c9d1d7672ce2ebb8f2251dfe0258ee7073e5932da7", size = 48223510, upload-time = "2026-02-10T08:38:00.654Z" }, +] + [[package]] name = "openai" version = "2.14.0" From 8696799a2dac7e1bf0a89b1096a5ebd5d2d24556 Mon Sep 17 00:00:00 2001 From: Jeff Hykin Date: Tue, 10 Feb 2026 13:52:06 -0800 Subject: [PATCH 02/45] - --- pyproject.toml | 3 ++- uv.lock | 30 ++++++++++++++++-------------- 2 files changed, 18 insertions(+), 15 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 002cf222f4..782bfd423d 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -51,7 +51,8 @@ dependencies = [ "colorlog==6.9.0", # Core Msgs "opencv-python", - "open3d-unofficial-arm", # works for non-arm too, will replace once open3d offical supports arm + "open3d-unofficial-arm; platform_machine == 'aarch64' and platform_system == 'Linux' ", + "open3d>=0.18.0; platform_machine != 'aarch64' or platform_system != 'Linux'", # CLI "pydantic-settings>=2.11.0,<3", "textual==3.7.1", diff --git a/uv.lock b/uv.lock index cc3d87c841..f4918a2d62 100644 --- a/uv.lock +++ b/uv.lock @@ -396,10 +396,10 @@ name = "bitsandbytes" version = "0.49.1" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, - { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, - { name = "packaging" }, - { name = "torch" }, + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11' and sys_platform != 'darwin' and sys_platform != 'win32'" }, + { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11' and sys_platform != 'darwin' and sys_platform != 'win32'" }, + { name = "packaging", marker = "sys_platform != 'darwin' and sys_platform != 'win32'" }, + { name = "torch", marker = "sys_platform != 'darwin' and sys_platform != 'win32'" }, ] wheels = [ { url = "https://files.pythonhosted.org/packages/11/dd/5820e09213a3f7c0ee5aff20fce8b362ce935f9dd9958827274de4eaeec6/bitsandbytes-0.49.1-py3-none-manylinux_2_24_aarch64.whl", hash = "sha256:acd4730a0db3762d286707f4a3bc1d013d21dd5f0e441900da57ec4198578d4e", size = 31065659, upload-time = "2026-01-08T14:31:28.676Z" }, @@ -1739,7 +1739,8 @@ dependencies = [ { name = "numba" }, { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, - { name = "open3d-unofficial-arm" }, + { name = "open3d", marker = "platform_machine != 'aarch64' or sys_platform != 'linux'" }, + { name = "open3d-unofficial-arm", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, { name = "opencv-python" }, { name = "pin" }, { name = "plotext" }, @@ -2050,8 +2051,9 @@ requires-dist = [ { name = "onnxruntime", marker = "extra == 'cpu'" }, { name = "onnxruntime-gpu", marker = "extra == 'cuda'", specifier = ">=1.17.1" }, { name = "open-clip-torch", marker = "extra == 'misc'", specifier = "==3.2.0" }, + { name = "open3d", marker = "platform_machine != 'aarch64' or sys_platform != 'linux'", specifier = ">=0.18.0" }, { name = "open3d", marker = "extra == 'docker'" }, - { name = "open3d-unofficial-arm" }, + { name = "open3d-unofficial-arm", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, { name = "openai", marker = "extra == 'agents'" }, { name = "openai-whisper", marker = "extra == 'agents'" }, { name = "opencv-contrib-python", marker = "extra == 'misc'", specifier = "==4.10.0.84" }, @@ -2386,7 +2388,7 @@ name = "exceptiongroup" version = "1.3.1" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "typing-extensions", marker = "python_full_version < '3.13'" }, + { name = "typing-extensions", marker = "python_full_version < '3.11'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/50/79/66800aadf48771f6b62f7eb014e352e5d06856655206165d775e675a02c9/exceptiongroup-1.3.1.tar.gz", hash = "sha256:8b412432c6055b0b7d14c310000ae93352ed6754f70fa8f7c34141f91c4e3219", size = 30371, upload-time = "2025-11-21T23:01:54.787Z" } wheels = [ @@ -6037,13 +6039,13 @@ name = "open3d-unofficial-arm" version = "0.19.0.post5" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "configargparse" }, - { name = "dash" }, - { name = "flask" }, - { name = "nbformat" }, - { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, - { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, - { name = "werkzeug" }, + { name = "configargparse", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, + { name = "dash", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, + { name = "flask", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, + { name = "nbformat", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11' and platform_machine == 'aarch64' and sys_platform == 'linux'" }, + { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11' and platform_machine == 'aarch64' and sys_platform == 'linux'" }, + { name = "werkzeug", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, ] wheels = [ { url = "https://files.pythonhosted.org/packages/02/87/95d3cf9017a0e89a708e611d003abeb66c88d7947fa7238962971cc8b0cb/open3d_unofficial_arm-0.19.0.post5-cp310-cp310-manylinux_2_35_aarch64.whl", hash = "sha256:26bc160f3326a74b232f026d741a576bf0d1fa7b1d5128c5e979d7b4d2d1b983", size = 48230542, upload-time = "2026-02-10T08:37:33.928Z" }, From 5913387fb0888396538f768c84d97d8a96be5e8f Mon Sep 17 00:00:00 2001 From: Miguel Villa Floran Date: Tue, 10 Feb 2026 14:30:45 -0800 Subject: [PATCH 03/45] Update dependency specifications for open3d to support ARM and non ARM machines --- pyproject.toml | 5 +++-- uv.lock | 38 ++++++++++++++++++++------------------ 2 files changed, 23 insertions(+), 20 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 782bfd423d..08fc041aa9 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -51,7 +51,7 @@ dependencies = [ "colorlog==6.9.0", # Core Msgs "opencv-python", - "open3d-unofficial-arm; platform_machine == 'aarch64' and platform_system == 'Linux' ", + "open3d-unofficial-arm; platform_machine == 'aarch64' and platform_system == 'Linux'", "open3d>=0.18.0; platform_machine != 'aarch64' or platform_system != 'Linux'", # CLI "pydantic-settings>=2.11.0,<3", @@ -297,7 +297,8 @@ docker = [ "sortedcontainers", "PyTurboJPEG", "rerun-sdk", - "open3d" + "open3d-unofficial-arm; platform_machine == 'aarch64' and platform_system == 'Linux'", + "open3d>=0.18.0; platform_machine != 'aarch64' or platform_system != 'Linux'", ] base = [ diff --git a/uv.lock b/uv.lock index f4918a2d62..a716873c07 100644 --- a/uv.lock +++ b/uv.lock @@ -1866,7 +1866,8 @@ docker = [ { name = "lcm" }, { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, - { name = "open3d" }, + { name = "open3d", marker = "platform_machine != 'aarch64' or sys_platform != 'linux'" }, + { name = "open3d-unofficial-arm", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, { name = "opencv-python-headless" }, { name = "plum-dispatch" }, { name = "pydantic" }, @@ -2052,8 +2053,9 @@ requires-dist = [ { name = "onnxruntime-gpu", marker = "extra == 'cuda'", specifier = ">=1.17.1" }, { name = "open-clip-torch", marker = "extra == 'misc'", specifier = "==3.2.0" }, { name = "open3d", marker = "platform_machine != 'aarch64' or sys_platform != 'linux'", specifier = ">=0.18.0" }, - { name = "open3d", marker = "extra == 'docker'" }, + { name = "open3d", marker = "(platform_machine != 'aarch64' and extra == 'docker') or (sys_platform != 'linux' and extra == 'docker')", specifier = ">=0.18.0" }, { name = "open3d-unofficial-arm", marker = "platform_machine == 'aarch64' and sys_platform == 'linux'" }, + { name = "open3d-unofficial-arm", marker = "platform_machine == 'aarch64' and sys_platform == 'linux' and extra == 'docker'" }, { name = "openai", marker = "extra == 'agents'" }, { name = "openai-whisper", marker = "extra == 'agents'" }, { name = "opencv-contrib-python", marker = "extra == 'misc'", specifier = "==4.10.0.84" }, @@ -6005,22 +6007,22 @@ name = "open3d" version = "0.19.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "addict" }, - { name = "configargparse" }, - { name = "dash" }, - { name = "flask" }, - { name = "matplotlib" }, - { name = "nbformat" }, - { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, - { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, - { name = "pandas" }, - { name = "pillow" }, - { name = "pyquaternion" }, - { name = "pyyaml" }, - { name = "scikit-learn", version = "1.7.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, - { name = "scikit-learn", version = "1.8.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, - { name = "tqdm" }, - { name = "werkzeug" }, + { name = "addict", marker = "platform_machine != 'aarch64' or sys_platform != 'linux'" }, + { name = "configargparse", marker = "platform_machine != 'aarch64' or sys_platform != 'linux'" }, + { name = "dash", marker = "platform_machine != 'aarch64' or sys_platform != 'linux'" }, + { name = "flask", marker = "platform_machine != 'aarch64' or sys_platform != 'linux'" }, + { name = "matplotlib", marker = "platform_machine != 'aarch64' or sys_platform != 'linux'" }, + { name = "nbformat", marker = "platform_machine != 'aarch64' or sys_platform != 'linux'" }, + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.11' and platform_machine != 'aarch64') or (python_full_version < '3.11' and sys_platform != 'linux')" }, + { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.11' and platform_machine != 'aarch64') or (python_full_version >= '3.11' and sys_platform != 'linux')" }, + { name = "pandas", marker = "platform_machine != 'aarch64' or sys_platform != 'linux'" }, + { name = "pillow", marker = "platform_machine != 'aarch64' or sys_platform != 'linux'" }, + { name = "pyquaternion", marker = "platform_machine != 'aarch64' or sys_platform != 'linux'" }, + { name = "pyyaml", marker = "platform_machine != 'aarch64' or sys_platform != 'linux'" }, + { name = "scikit-learn", version = "1.7.2", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.11' and platform_machine != 'aarch64') or (python_full_version < '3.11' and sys_platform != 'linux')" }, + { name = "scikit-learn", version = "1.8.0", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.11' and platform_machine != 'aarch64') or (python_full_version >= '3.11' and sys_platform != 'linux')" }, + { name = "tqdm", marker = "platform_machine != 'aarch64' or sys_platform != 'linux'" }, + { name = "werkzeug", marker = "platform_machine != 'aarch64' or sys_platform != 'linux'" }, ] wheels = [ { url = "https://files.pythonhosted.org/packages/5c/4b/91e8a4100adf0ccd2f7ad21dd24c2e3d8f12925396528d0462cfb1735e5a/open3d-0.19.0-cp310-cp310-macosx_10_15_universal2.whl", hash = "sha256:f7128ded206e07987cc29d0917195fb64033dea31e0d60dead3629b33d3c175f", size = 103086005, upload-time = "2025-01-08T07:25:56.755Z" }, From cf097a2da617787003f9a8f72494b4a3f9f94a6a Mon Sep 17 00:00:00 2001 From: Jeff Hykin Date: Wed, 11 Feb 2026 13:49:53 -0800 Subject: [PATCH 04/45] patch for CI --- dimos/agents/spec.py | 28 +++++++++++++++++++++++++--- 1 file changed, 25 insertions(+), 3 deletions(-) diff --git a/dimos/agents/spec.py b/dimos/agents/spec.py index b0a0324e89..02eef359de 100644 --- a/dimos/agents/spec.py +++ b/dimos/agents/spec.py @@ -22,7 +22,6 @@ if TYPE_CHECKING: from dimos.protocol.skill.skill import SkillContainer -from langchain.chat_models.base import _SUPPORTED_PROVIDERS from langchain_core.language_models.chat_models import BaseChatModel from langchain_core.messages import ( AIMessage, @@ -45,8 +44,31 @@ logger = setup_logger() -# Dynamically create ModelProvider enum from LangChain's supported providers -_providers = {provider.upper(): provider for provider in _SUPPORTED_PROVIDERS} +# FIXME: I dont see a stable (and dynamic) way to get these, this is only for type-hints and Paul's PR should replace this in a couple of days (this is a stop-gap change to get CI passing) +_providers = [ + "ANTHROPIC", + "AZURE_AI", + "AZURE_OPENAI", + "BEDROCK", + "BEDROCK_CONVERSE", + "COHERE", + "DEEPSEEK", + "FIREWORKS", + "GOOGLE_ANTHROPIC_VERTEX", + "GOOGLE_GENAI", + "GOOGLE_VERTEXAI", + "GROQ", + "HUGGINGFACE", + "IBM", + "MISTRALAI", + "NVIDIA", + "OLLAMA", + "OPENAI", + "PERPLEXITY", + "TOGETHER", + "UPSTAGE", + "XAI", +] Provider = Enum("Provider", _providers, type=str) # type: ignore[misc] From 17fabf875a1d99323db7771ec7cd7a6ad0634446 Mon Sep 17 00:00:00 2001 From: Jeff Hykin Date: Wed, 11 Feb 2026 20:17:51 -0800 Subject: [PATCH 05/45] fix mypy errors --- dimos/manipulation/manipulation_module.py | 4 ++-- dimos/navigation/rosnav.py | 6 +++--- dimos/perception/object_tracker.py | 2 ++ dimos/perception/object_tracker_2d.py | 2 ++ dimos/robot/drone/drone_tracking_module.py | 2 ++ 5 files changed, 11 insertions(+), 5 deletions(-) diff --git a/dimos/manipulation/manipulation_module.py b/dimos/manipulation/manipulation_module.py index a0b7b6889c..a4a30b5de7 100644 --- a/dimos/manipulation/manipulation_module.py +++ b/dimos/manipulation/manipulation_module.py @@ -19,7 +19,7 @@ from dataclasses import dataclass, field from enum import Enum import threading -from typing import TYPE_CHECKING, TypeAlias +from typing import TYPE_CHECKING, TypeAlias, cast from dimos.core import In, Module, rpc from dimos.core.module import ModuleConfig @@ -453,7 +453,7 @@ def get_visualization_url(self) -> str | None: """ if self._world_monitor is None: return None - return self._world_monitor.get_visualization_url() + return cast("str | None", self._world_monitor.get_visualization_url()) @rpc def clear_planned_path(self) -> bool: diff --git a/dimos/navigation/rosnav.py b/dimos/navigation/rosnav.py index f3e8907bd9..df1ac330c2 100644 --- a/dimos/navigation/rosnav.py +++ b/dimos/navigation/rosnav.py @@ -219,8 +219,8 @@ def current_position(self): # type: ignore[no-untyped-def] continue yield f"current position {tf.translation.x}, {tf.translation.y}" - @skill(stream=Stream.call_agent, reducer=Reducer.string) # type: ignore[arg-type] - def goto(self, x: float, y: float): # type: ignore[no-untyped-def] + @skill(stream=Stream.call_agent, reducer=Reducer.string) # type: ignore[arg-type,untyped-decorator] + def goto(self, x: float, y: float) -> Generator[str, None, None]: """ move the robot in relative coordinates x is forward, y is left @@ -238,7 +238,7 @@ def goto(self, x: float, y: float): # type: ignore[no-untyped-def] self.navigate_to(pose_to) yield "arrived" - @skill(stream=Stream.call_agent, reducer=Reducer.string) # type: ignore[arg-type] + @skill(stream=Stream.call_agent, reducer=Reducer.string) # type: ignore[arg-type,untyped-decorator] def goto_global(self, x: float, y: float) -> Generator[str, None, None]: """ go to coordinates x,y in the map frame diff --git a/dimos/perception/object_tracker.py b/dimos/perception/object_tracker.py index 54a5873435..4b2b04f99b 100644 --- a/dimos/perception/object_tracker.py +++ b/dimos/perception/object_tracker.py @@ -12,6 +12,8 @@ # See the License for the specific language governing permissions and # limitations under the License. +# mypy: disable-error-code=redundant-cast + from dataclasses import dataclass import threading import time diff --git a/dimos/perception/object_tracker_2d.py b/dimos/perception/object_tracker_2d.py index f5d39745c3..fa89fb7e66 100644 --- a/dimos/perception/object_tracker_2d.py +++ b/dimos/perception/object_tracker_2d.py @@ -12,6 +12,8 @@ # See the License for the specific language governing permissions and # limitations under the License. +# mypy: disable-error-code=redundant-cast + from dataclasses import dataclass import logging import threading diff --git a/dimos/robot/drone/drone_tracking_module.py b/dimos/robot/drone/drone_tracking_module.py index e6560142d1..49a19d1144 100644 --- a/dimos/robot/drone/drone_tracking_module.py +++ b/dimos/robot/drone/drone_tracking_module.py @@ -13,6 +13,8 @@ # See the License for the specific language governing permissions and # limitations under the License. +# mypy: disable-error-code=redundant-cast + """Drone tracking module with visual servoing for object following.""" import json From 87702f4ac7e0a7bd58fbf7751668c91826779bdc Mon Sep 17 00:00:00 2001 From: Miguel Villa Floran Date: Thu, 12 Feb 2026 01:41:42 -0800 Subject: [PATCH 06/45] Fix: conditionally include xcbuild for Darwin platforms only --- flake.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/flake.nix b/flake.nix index 50738effc0..c5aead5aa0 100644 --- a/flake.nix +++ b/flake.nix @@ -31,7 +31,7 @@ { vals.pkg=pkgs.cctools; flags={}; onlyIf=pkgs.stdenv.isDarwin; } # for pip install opencv-python { vals.pkg=pkgs.pcre2; flags={ ldLibraryGroup=pkgs.stdenv.isDarwin; packageConfGroup=pkgs.stdenv.isDarwin; }; } { vals.pkg=pkgs.libsysprof-capture; flags.packageConfGroup=true; onlyIf=pkgs.stdenv.isDarwin; } - { vals.pkg=pkgs.xcbuild; flags={}; } + { vals.pkg=pkgs.xcbuild; flags={}; onlyIf=pkgs.stdenv.isDarwin; } { vals.pkg=pkgs.git-lfs; flags={}; } { vals.pkg=pkgs.gnugrep; flags={}; } { vals.pkg=pkgs.gnused; flags={}; } From f6e67940acf102fa9e454273c5c1f3a563209e9a Mon Sep 17 00:00:00 2001 From: Miguel Villa Floran Date: Thu, 12 Feb 2026 01:57:52 -0800 Subject: [PATCH 07/45] Fix: conditionally exclude packages without ARM wheels --- pyproject.toml | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 4d9f1688f8..4e2fa57bd5 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -172,13 +172,13 @@ unitree = [ manipulation = [ # Planning (Drake) - "drake>=1.40.0", + "drake>=1.40.0; platform_machine != 'aarch64'", # Contact Graspnet Dependencies "h5py>=3.7.0", "pyrender>=0.1.45", "trimesh>=3.22.0", - "python-fcl>=0.7.0.4", + "python-fcl>=0.7.0.4; platform_machine != 'aarch64'", "pyquaternion>=0.9.9", "matplotlib>=3.7.1", "rtree", @@ -205,13 +205,19 @@ cpu = [ ] cuda = [ - "cupy-cuda12x==13.6.0", - "nvidia-nvimgcodec-cu12[all]", - "onnxruntime-gpu>=1.17.1", # Only versions supporting both cuda11 and cuda12 + "cupy-cuda12x==13.6.0; platform_machine == 'x86_64'", + "nvidia-nvimgcodec-cu12[all]; platform_machine == 'x86_64'", + "onnxruntime-gpu>=1.17.1; platform_machine == 'x86_64'", # Only versions supporting both cuda11 and cuda12 "ctransformers[cuda]==0.2.27", "mmengine>=0.10.3", "mmcv>=2.1.0", - "xformers>=0.0.20", + "xformers>=0.0.20; platform_machine == 'x86_64'", +] + +jetson = [ + "mmengine>=0.10.3", + "mmcv>=2.1.0", + "ctransformers[cuda]==0.2.27", ] dev = [ From 3318e911aafd326cf5339cda83d3c473ecdc669c Mon Sep 17 00:00:00 2001 From: Jeff Hykin Date: Thu, 12 Feb 2026 09:28:52 -0800 Subject: [PATCH 08/45] format --- pyproject.toml | 8 ++-- uv.lock | 111 ++++++++++++++++++++++--------------------------- 2 files changed, 54 insertions(+), 65 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 4e2fa57bd5..bba7c535d7 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -51,8 +51,8 @@ dependencies = [ "colorlog==6.9.0", # Core Msgs "opencv-python", - "open3d-unofficial-arm; platform_machine == 'aarch64' and platform_system == 'Linux'", - "open3d>=0.18.0; platform_machine != 'aarch64' or platform_system != 'Linux'", + "open3d-unofficial-arm; platform_system == 'Linux' and platform_machine == 'aarch64'", + "open3d>=0.18.0; platform_system != 'Linux' or platform_machine != 'aarch64'", # CLI "pydantic-settings>=2.11.0,<3", "textual==3.7.1", @@ -303,8 +303,8 @@ docker = [ "sortedcontainers", "PyTurboJPEG", "rerun-sdk", - "open3d-unofficial-arm; platform_machine == 'aarch64' and platform_system == 'Linux'", - "open3d>=0.18.0; platform_machine != 'aarch64' or platform_system != 'Linux'", + "open3d-unofficial-arm; platform_system == 'Linux' and platform_machine == 'aarch64'", + "open3d>=0.18.0; platform_system != 'Linux' or platform_machine != 'aarch64'", ] base = [ diff --git a/uv.lock b/uv.lock index 9f551696d8..b5f096a112 100644 --- a/uv.lock +++ b/uv.lock @@ -1558,21 +1558,17 @@ name = "cupy-cuda12x" version = "13.6.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "fastrlock" }, - { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, - { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, + { name = "fastrlock", marker = "platform_machine != 'aarch64' or sys_platform != 'linux'" }, + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.11' and platform_machine != 'aarch64') or (python_full_version < '3.11' and sys_platform != 'linux')" }, + { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.11' and platform_machine != 'aarch64') or (python_full_version >= '3.11' and sys_platform != 'linux')" }, ] wheels = [ - { url = "https://files.pythonhosted.org/packages/f7/2e/db22c5148884e4e384f6ebbc7971fa3710f3ba67ca492798890a0fdebc45/cupy_cuda12x-13.6.0-cp310-cp310-manylinux2014_aarch64.whl", hash = "sha256:9e37f60f27ff9625dfdccc4688a09852707ec613e32ea9404f425dd22a386d14", size = 126341714, upload-time = "2025-08-18T08:24:08.335Z" }, { url = "https://files.pythonhosted.org/packages/53/2b/8064d94a6ab6b5c4e643d8535ab6af6cabe5455765540931f0ef60a0bc3b/cupy_cuda12x-13.6.0-cp310-cp310-manylinux2014_x86_64.whl", hash = "sha256:e78409ea72f5ac7d6b6f3d33d99426a94005254fa57e10617f430f9fd7c3a0a1", size = 112238589, upload-time = "2025-08-18T08:24:15.541Z" }, { url = "https://files.pythonhosted.org/packages/de/7b/bac3ca73e164d2b51c6298620261637c7286e06d373f597b036fc45f5563/cupy_cuda12x-13.6.0-cp310-cp310-win_amd64.whl", hash = "sha256:f33c9c975782ef7a42c79b6b4fb3d5b043498f9b947126d792592372b432d393", size = 89874119, upload-time = "2025-08-18T08:24:20.628Z" }, - { url = "https://files.pythonhosted.org/packages/54/64/71c6e08f76c06639e5112f69ee3bc1129be00054ad5f906d7fd3138af579/cupy_cuda12x-13.6.0-cp311-cp311-manylinux2014_aarch64.whl", hash = "sha256:c790d012fd4d86872b9c89af9f5f15d91c30b8e3a4aa4dd04c2610f45f06ac44", size = 128016458, upload-time = "2025-08-18T08:24:26.394Z" }, { url = "https://files.pythonhosted.org/packages/fc/d9/5c5077243cd92368c3eccecdbf91d76db15db338169042ffd1647533c6b1/cupy_cuda12x-13.6.0-cp311-cp311-manylinux2014_x86_64.whl", hash = "sha256:77ba6745a130d880c962e687e4e146ebbb9014f290b0a80dbc4e4634eb5c3b48", size = 113039337, upload-time = "2025-08-18T08:24:31.814Z" }, { url = "https://files.pythonhosted.org/packages/88/f5/02bea5cdf108e2a66f98e7d107b4c9a6709e5dbfedf663340e5c11719d83/cupy_cuda12x-13.6.0-cp311-cp311-win_amd64.whl", hash = "sha256:a20b7acdc583643a623c8d8e3efbe0db616fbcf5916e9c99eedf73859b6133af", size = 89885526, upload-time = "2025-08-18T08:24:37.258Z" }, - { url = "https://files.pythonhosted.org/packages/12/c5/7e7fc4816d0de0154e5d9053242c3a08a0ca8b43ee656a6f7b3b95055a7b/cupy_cuda12x-13.6.0-cp312-cp312-manylinux2014_aarch64.whl", hash = "sha256:a6970ceefe40f9acbede41d7fe17416bd277b1bd2093adcde457b23b578c5a59", size = 127334633, upload-time = "2025-08-18T08:24:43.065Z" }, { url = "https://files.pythonhosted.org/packages/e0/95/d7e1295141e7d530674a3cc567e13ed0eb6b81524cb122d797ed996b5bea/cupy_cuda12x-13.6.0-cp312-cp312-manylinux2014_x86_64.whl", hash = "sha256:79b0cacb5e8b190ef409f9e03f06ac8de1b021b0c0dda47674d446f5557e0eb1", size = 112886268, upload-time = "2025-08-18T08:24:49.294Z" }, { url = "https://files.pythonhosted.org/packages/ae/8c/14555b63fd78cfac7b88af0094cea0a3cb845d243661ec7da69f7b3ea0de/cupy_cuda12x-13.6.0-cp312-cp312-win_amd64.whl", hash = "sha256:ca06fede7b8b83ca9ad80062544ef2e5bb8d4762d1c4fc3ac8349376de9c8a5e", size = 89785108, upload-time = "2025-08-18T08:24:54.527Z" }, - { url = "https://files.pythonhosted.org/packages/19/ec/f62cb991f11fb41291c4c15b6936d7b67ffa71ddb344ad6e8894e06ce58d/cupy_cuda12x-13.6.0-cp313-cp313-manylinux2014_aarch64.whl", hash = "sha256:e5426ae3b1b9cf59927481e457a89e3f0b50a35b114a8034ec9110e7a833434c", size = 126904601, upload-time = "2025-08-18T08:24:59.951Z" }, { url = "https://files.pythonhosted.org/packages/f8/b8/30127bcdac53a25f94ee201bf4802fcd8d012145567d77c54174d6d01c01/cupy_cuda12x-13.6.0-cp313-cp313-manylinux2014_x86_64.whl", hash = "sha256:52d9e7f83d920da7d81ec2e791c2c2c747fdaa1d7b811971b34865ce6371e98a", size = 112654824, upload-time = "2025-08-18T08:25:05.944Z" }, { url = "https://files.pythonhosted.org/packages/72/36/c9e24acb19f039f814faea880b3704a3661edaa6739456b73b27540663e3/cupy_cuda12x-13.6.0-cp313-cp313-win_amd64.whl", hash = "sha256:297b4268f839de67ef7865c2202d3f5a0fb8d20bd43360bc51b6e60cb4406447", size = 89750580, upload-time = "2025-08-18T08:25:10.972Z" }, ] @@ -1817,12 +1813,12 @@ cpu = [ ] cuda = [ { name = "ctransformers", extra = ["cuda"] }, - { name = "cupy-cuda12x" }, + { name = "cupy-cuda12x", marker = "platform_machine == 'x86_64'" }, { name = "mmcv" }, { name = "mmengine" }, - { name = "nvidia-nvimgcodec-cu12", extra = ["all"] }, - { name = "onnxruntime-gpu" }, - { name = "xformers" }, + { name = "nvidia-nvimgcodec-cu12", extra = ["all"], marker = "platform_machine == 'x86_64'" }, + { name = "onnxruntime-gpu", marker = "platform_machine == 'x86_64'" }, + { name = "xformers", marker = "platform_machine == 'x86_64'" }, ] dev = [ { name = "coverage" }, @@ -1884,9 +1880,14 @@ docker = [ drone = [ { name = "pymavlink" }, ] +jetson = [ + { name = "ctransformers", extra = ["cuda"] }, + { name = "mmcv" }, + { name = "mmengine" }, +] manipulation = [ { name = "contact-graspnet-pytorch" }, - { name = "drake" }, + { name = "drake", marker = "platform_machine != 'aarch64'" }, { name = "h5py" }, { name = "kaleido" }, { name = "matplotlib" }, @@ -1895,7 +1896,7 @@ manipulation = [ { name = "plotly" }, { name = "pyquaternion" }, { name = "pyrender" }, - { name = "python-fcl" }, + { name = "python-fcl", marker = "platform_machine != 'aarch64'" }, { name = "pyyaml" }, { name = "rtree" }, { name = "tqdm" }, @@ -2002,14 +2003,15 @@ requires-dist = [ { name = "coverage", marker = "extra == 'dev'", specifier = ">=7.0" }, { name = "ctransformers", marker = "extra == 'cpu'", specifier = "==0.2.27" }, { name = "ctransformers", extras = ["cuda"], marker = "extra == 'cuda'", specifier = "==0.2.27" }, - { name = "cupy-cuda12x", marker = "extra == 'cuda'", specifier = "==13.6.0" }, + { name = "ctransformers", extras = ["cuda"], marker = "extra == 'jetson'", specifier = "==0.2.27" }, + { name = "cupy-cuda12x", marker = "platform_machine == 'x86_64' and extra == 'cuda'", specifier = "==13.6.0" }, { name = "dask", extras = ["complete"], specifier = "==2025.5.1" }, { name = "dask", extras = ["distributed"], marker = "extra == 'docker'", specifier = "==2025.5.1" }, { name = "dimos", extras = ["agents", "web", "perception", "visualization", "sim"], marker = "extra == 'base'" }, { name = "dimos", extras = ["base"], marker = "extra == 'unitree'" }, { name = "dimos-lcm" }, { name = "dimos-lcm", marker = "extra == 'docker'" }, - { name = "drake", marker = "extra == 'manipulation'", specifier = ">=1.40.0" }, + { name = "drake", marker = "platform_machine != 'aarch64' and extra == 'manipulation'", specifier = ">=1.40.0" }, { name = "edgetam-dimos", marker = "extra == 'misc'" }, { name = "einops", marker = "extra == 'misc'", specifier = "==0.8.1" }, { name = "empy", marker = "extra == 'misc'", specifier = "==3.3.4" }, @@ -2038,19 +2040,21 @@ requires-dist = [ { name = "mcp", marker = "extra == 'agents'", specifier = ">=1.0.0" }, { name = "md-babel-py", marker = "extra == 'dev'", specifier = "==1.1.1" }, { name = "mmcv", marker = "extra == 'cuda'", specifier = ">=2.1.0" }, + { name = "mmcv", marker = "extra == 'jetson'", specifier = ">=2.1.0" }, { name = "mmengine", marker = "extra == 'cuda'", specifier = ">=0.10.3" }, + { name = "mmengine", marker = "extra == 'jetson'", specifier = ">=0.10.3" }, { name = "moondream", marker = "extra == 'perception'" }, { name = "mujoco", marker = "extra == 'sim'", specifier = ">=3.3.4" }, { name = "mypy", marker = "extra == 'dev'", specifier = "==1.19.0" }, { name = "numba", specifier = ">=0.60.0" }, { name = "numpy", specifier = ">=1.26.4" }, { name = "numpy", marker = "extra == 'docker'", specifier = ">=1.26.4" }, - { name = "nvidia-nvimgcodec-cu12", extras = ["all"], marker = "extra == 'cuda'" }, + { name = "nvidia-nvimgcodec-cu12", extras = ["all"], marker = "platform_machine == 'x86_64' and extra == 'cuda'" }, { name = "ollama", marker = "extra == 'agents'", specifier = ">=0.6.0" }, { name = "omegaconf", marker = "extra == 'perception'", specifier = ">=2.3.0" }, { name = "onnx", marker = "extra == 'misc'" }, { name = "onnxruntime", marker = "extra == 'cpu'" }, - { name = "onnxruntime-gpu", marker = "extra == 'cuda'", specifier = ">=1.17.1" }, + { name = "onnxruntime-gpu", marker = "platform_machine == 'x86_64' and extra == 'cuda'", specifier = ">=1.17.1" }, { name = "open-clip-torch", marker = "extra == 'misc'", specifier = "==3.2.0" }, { name = "open3d", marker = "platform_machine != 'aarch64' or sys_platform != 'linux'", specifier = ">=0.18.0" }, { name = "open3d", marker = "(platform_machine != 'aarch64' and extra == 'docker') or (sys_platform != 'linux' and extra == 'docker')", specifier = ">=0.18.0" }, @@ -2087,7 +2091,7 @@ requires-dist = [ { name = "pytest-mock", marker = "extra == 'dev'", specifier = "==3.15.0" }, { name = "pytest-timeout", marker = "extra == 'dev'", specifier = "==2.4.0" }, { name = "python-dotenv" }, - { name = "python-fcl", marker = "extra == 'manipulation'", specifier = ">=0.7.0.4" }, + { name = "python-fcl", marker = "platform_machine != 'aarch64' and extra == 'manipulation'", specifier = ">=0.7.0.4" }, { name = "python-lsp-ruff", marker = "extra == 'dev'", specifier = "==2.3.0" }, { name = "python-lsp-server", extras = ["all"], marker = "extra == 'dev'", specifier = "==1.14.0" }, { name = "python-multipart", marker = "extra == 'misc'", specifier = "==0.0.20" }, @@ -2151,10 +2155,10 @@ requires-dist = [ { name = "xacro", marker = "extra == 'manipulation'" }, { name = "xarm-python-sdk", marker = "extra == 'manipulation'", specifier = ">=1.17.0" }, { name = "xarm-python-sdk", marker = "extra == 'misc'", specifier = ">=1.17.0" }, - { name = "xformers", marker = "extra == 'cuda'", specifier = ">=0.0.20" }, + { name = "xformers", marker = "platform_machine == 'x86_64' and extra == 'cuda'", specifier = ">=0.0.20" }, { name = "yapf", marker = "extra == 'misc'", specifier = "==0.40.2" }, ] -provides-extras = ["misc", "visualization", "agents", "web", "perception", "unitree", "manipulation", "cpu", "cuda", "dev", "sim", "drone", "docker", "base"] +provides-extras = ["misc", "visualization", "agents", "web", "perception", "unitree", "manipulation", "cpu", "cuda", "jetson", "dev", "sim", "drone", "docker", "base"] [[package]] name = "dimos-lcm" @@ -2260,12 +2264,12 @@ name = "drake" version = "1.49.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "matplotlib" }, - { name = "mosek", marker = "python_full_version < '3.15'" }, - { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, - { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, - { name = "pydot" }, - { name = "pyyaml" }, + { name = "matplotlib", marker = "platform_machine != 'aarch64' or sys_platform != 'linux'" }, + { name = "mosek", marker = "(python_full_version < '3.15' and platform_machine != 'aarch64') or (python_full_version < '3.15' and sys_platform != 'linux')" }, + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.11' and platform_machine != 'aarch64') or (python_full_version < '3.11' and sys_platform != 'linux')" }, + { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.11' and platform_machine != 'aarch64') or (python_full_version >= '3.11' and sys_platform != 'linux')" }, + { name = "pydot", marker = "platform_machine != 'aarch64' or sys_platform != 'linux'" }, + { name = "pyyaml", marker = "platform_machine != 'aarch64' or sys_platform != 'linux'" }, ] wheels = [ { url = "https://files.pythonhosted.org/packages/fb/26/2ce3a9caf431f24e39f8b1fc7b3ebba4faafef1d61c849db3194e8d2e21d/drake-1.49.0-cp310-cp310-manylinux_2_34_x86_64.whl", hash = "sha256:6c73dbd061fcb442e82b7b5a94dadcfbf4c44949035d03394df29412114647b2", size = 41482505, upload-time = "2026-01-15T19:44:08.313Z" }, @@ -2552,31 +2556,21 @@ source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/73/b1/1c3d635d955f2b4bf34d45abf8f35492e04dbd7804e94ce65d9f928ef3ec/fastrlock-0.8.3.tar.gz", hash = "sha256:4af6734d92eaa3ab4373e6c9a1dd0d5ad1304e172b1521733c6c3b3d73c8fa5d", size = 79327, upload-time = "2024-12-17T11:03:39.638Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/e7/02/3f771177380d8690812d5b2b7736dc6b6c8cd1c317e4572e65f823eede08/fastrlock-0.8.3-cp310-cp310-macosx_11_0_universal2.whl", hash = "sha256:cc5fa9166e05409f64a804d5b6d01af670979cdb12cd2594f555cb33cdc155bd", size = 55094, upload-time = "2024-12-17T11:01:49.721Z" }, - { url = "https://files.pythonhosted.org/packages/be/b4/aae7ed94b8122c325d89eb91336084596cebc505dc629b795fcc9629606d/fastrlock-0.8.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:7a77ebb0a24535ef4f167da2c5ee35d9be1e96ae192137e9dc3ff75b8dfc08a5", size = 48220, upload-time = "2024-12-17T11:01:51.071Z" }, - { url = "https://files.pythonhosted.org/packages/96/87/9807af47617fdd65c68b0fcd1e714542c1d4d3a1f1381f591f1aa7383a53/fastrlock-0.8.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_24_i686.whl", hash = "sha256:d51f7fb0db8dab341b7f03a39a3031678cf4a98b18533b176c533c122bfce47d", size = 49551, upload-time = "2024-12-17T11:01:52.316Z" }, { url = "https://files.pythonhosted.org/packages/9d/12/e201634810ac9aee59f93e3953cb39f98157d17c3fc9d44900f1209054e9/fastrlock-0.8.3-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:767ec79b7f6ed9b9a00eb9ff62f2a51f56fdb221c5092ab2dadec34a9ccbfc6e", size = 49398, upload-time = "2024-12-17T11:01:53.514Z" }, { url = "https://files.pythonhosted.org/packages/15/a1/439962ed439ff6f00b7dce14927e7830e02618f26f4653424220a646cd1c/fastrlock-0.8.3-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0d6a77b3f396f7d41094ef09606f65ae57feeb713f4285e8e417f4021617ca62", size = 53334, upload-time = "2024-12-17T11:01:55.518Z" }, - { url = "https://files.pythonhosted.org/packages/b5/9e/1ae90829dd40559ab104e97ebe74217d9da794c4bb43016da8367ca7a596/fastrlock-0.8.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:92577ff82ef4a94c5667d6d2841f017820932bc59f31ffd83e4a2c56c1738f90", size = 52495, upload-time = "2024-12-17T11:01:57.76Z" }, { url = "https://files.pythonhosted.org/packages/e5/8c/5e746ee6f3d7afbfbb0d794c16c71bfd5259a4e3fb1dda48baf31e46956c/fastrlock-0.8.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:3df8514086e16bb7c66169156a8066dc152f3be892c7817e85bf09a27fa2ada2", size = 51972, upload-time = "2024-12-17T11:02:01.384Z" }, { url = "https://files.pythonhosted.org/packages/76/a7/8b91068f00400931da950f143fa0f9018bd447f8ed4e34bed3fe65ed55d2/fastrlock-0.8.3-cp310-cp310-win_amd64.whl", hash = "sha256:001fd86bcac78c79658bac496e8a17472d64d558cd2227fdc768aa77f877fe40", size = 30946, upload-time = "2024-12-17T11:02:03.491Z" }, { url = "https://files.pythonhosted.org/packages/90/9e/647951c579ef74b6541493d5ca786d21a0b2d330c9514ba2c39f0b0b0046/fastrlock-0.8.3-cp311-cp311-macosx_11_0_universal2.whl", hash = "sha256:f68c551cf8a34b6460a3a0eba44bd7897ebfc820854e19970c52a76bf064a59f", size = 55233, upload-time = "2024-12-17T11:02:04.795Z" }, - { url = "https://files.pythonhosted.org/packages/be/91/5f3afba7d14b8b7d60ac651375f50fff9220d6ccc3bef233d2bd74b73ec7/fastrlock-0.8.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:55d42f6286b9d867370af4c27bc70d04ce2d342fe450c4a4fcce14440514e695", size = 48911, upload-time = "2024-12-17T11:02:06.173Z" }, - { url = "https://files.pythonhosted.org/packages/d5/7a/e37bd72d7d70a8a551b3b4610d028bd73ff5d6253201d5d3cf6296468bee/fastrlock-0.8.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_24_i686.whl", hash = "sha256:bbc3bf96dcbd68392366c477f78c9d5c47e5d9290cb115feea19f20a43ef6d05", size = 50357, upload-time = "2024-12-17T11:02:07.418Z" }, { url = "https://files.pythonhosted.org/packages/0d/ef/a13b8bab8266840bf38831d7bf5970518c02603d00a548a678763322d5bf/fastrlock-0.8.3-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:77ab8a98417a1f467dafcd2226718f7ca0cf18d4b64732f838b8c2b3e4b55cb5", size = 50222, upload-time = "2024-12-17T11:02:08.745Z" }, { url = "https://files.pythonhosted.org/packages/01/e2/5e5515562b2e9a56d84659377176aef7345da2c3c22909a1897fe27e14dd/fastrlock-0.8.3-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:04bb5eef8f460d13b8c0084ea5a9d3aab2c0573991c880c0a34a56bb14951d30", size = 54553, upload-time = "2024-12-17T11:02:10.925Z" }, - { url = "https://files.pythonhosted.org/packages/c0/8f/65907405a8cdb2fc8beaf7d09a9a07bb58deff478ff391ca95be4f130b70/fastrlock-0.8.3-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:8c9d459ce344c21ff03268212a1845aa37feab634d242131bc16c2a2355d5f65", size = 53362, upload-time = "2024-12-17T11:02:12.476Z" }, { url = "https://files.pythonhosted.org/packages/ec/b9/ae6511e52738ba4e3a6adb7c6a20158573fbc98aab448992ece25abb0b07/fastrlock-0.8.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:33e6fa4af4f3af3e9c747ec72d1eadc0b7ba2035456c2afb51c24d9e8a56f8fd", size = 52836, upload-time = "2024-12-17T11:02:13.74Z" }, { url = "https://files.pythonhosted.org/packages/88/3e/c26f8192c93e8e43b426787cec04bb46ac36e72b1033b7fe5a9267155fdf/fastrlock-0.8.3-cp311-cp311-win_amd64.whl", hash = "sha256:5e5f1665d8e70f4c5b4a67f2db202f354abc80a321ce5a26ac1493f055e3ae2c", size = 31046, upload-time = "2024-12-17T11:02:15.033Z" }, { url = "https://files.pythonhosted.org/packages/00/df/56270f2e10c1428855c990e7a7e5baafa9e1262b8e789200bd1d047eb501/fastrlock-0.8.3-cp312-cp312-macosx_11_0_universal2.whl", hash = "sha256:8cb2cf04352ea8575d496f31b3b88c42c7976e8e58cdd7d1550dfba80ca039da", size = 55727, upload-time = "2024-12-17T11:02:17.26Z" }, - { url = "https://files.pythonhosted.org/packages/57/21/ea1511b0ef0d5457efca3bf1823effb9c5cad4fc9dca86ce08e4d65330ce/fastrlock-0.8.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:85a49a1f1e020097d087e1963e42cea6f307897d5ebe2cb6daf4af47ffdd3eed", size = 52201, upload-time = "2024-12-17T11:02:19.512Z" }, { url = "https://files.pythonhosted.org/packages/80/07/cdecb7aa976f34328372f1c4efd6c9dc1b039b3cc8d3f38787d640009a25/fastrlock-0.8.3-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5f13ec08f1adb1aa916c384b05ecb7dbebb8df9ea81abd045f60941c6283a670", size = 53924, upload-time = "2024-12-17T11:02:20.85Z" }, - { url = "https://files.pythonhosted.org/packages/88/6d/59c497f8db9a125066dd3a7442fab6aecbe90d6fec344c54645eaf311666/fastrlock-0.8.3-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:0ea4e53a04980d646def0f5e4b5e8bd8c7884288464acab0b37ca0c65c482bfe", size = 52140, upload-time = "2024-12-17T11:02:22.263Z" }, { url = "https://files.pythonhosted.org/packages/62/04/9138943c2ee803d62a48a3c17b69de2f6fa27677a6896c300369e839a550/fastrlock-0.8.3-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:38340f6635bd4ee2a4fb02a3a725759fe921f2ca846cb9ca44531ba739cc17b4", size = 53261, upload-time = "2024-12-17T11:02:24.418Z" }, { url = "https://files.pythonhosted.org/packages/e2/4b/db35a52589764c7745a613b6943bbd018f128d42177ab92ee7dde88444f6/fastrlock-0.8.3-cp312-cp312-win_amd64.whl", hash = "sha256:da06d43e1625e2ffddd303edcd6d2cd068e1c486f5fd0102b3f079c44eb13e2c", size = 31235, upload-time = "2024-12-17T11:02:25.708Z" }, { url = "https://files.pythonhosted.org/packages/92/74/7b13d836c3f221cff69d6f418f46c2a30c4b1fe09a8ce7db02eecb593185/fastrlock-0.8.3-cp313-cp313-macosx_11_0_universal2.whl", hash = "sha256:5264088185ca8e6bc83181dff521eee94d078c269c7d557cc8d9ed5952b7be45", size = 54157, upload-time = "2024-12-17T11:02:29.196Z" }, - { url = "https://files.pythonhosted.org/packages/06/77/f06a907f9a07d26d0cca24a4385944cfe70d549a2c9f1c3e3217332f4f12/fastrlock-0.8.3-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4a98ba46b3e14927550c4baa36b752d0d2f7387b8534864a8767f83cce75c160", size = 50954, upload-time = "2024-12-17T11:02:32.12Z" }, { url = "https://files.pythonhosted.org/packages/f9/4e/94480fb3fd93991dd6f4e658b77698edc343f57caa2870d77b38c89c2e3b/fastrlock-0.8.3-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:dbdea6deeccea1917c6017d353987231c4e46c93d5338ca3e66d6cd88fbce259", size = 52535, upload-time = "2024-12-17T11:02:33.402Z" }, - { url = "https://files.pythonhosted.org/packages/7d/a7/ee82bb55b6c0ca30286dac1e19ee9417a17d2d1de3b13bb0f20cefb86086/fastrlock-0.8.3-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:c6e5bfecbc0d72ff07e43fed81671747914d6794e0926700677ed26d894d4f4f", size = 50942, upload-time = "2024-12-17T11:02:34.688Z" }, { url = "https://files.pythonhosted.org/packages/63/1d/d4b7782ef59e57dd9dde69468cc245adafc3674281905e42fa98aac30a79/fastrlock-0.8.3-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:2a83d558470c520ed21462d304e77a12639859b205759221c8144dd2896b958a", size = 52044, upload-time = "2024-12-17T11:02:36.613Z" }, { url = "https://files.pythonhosted.org/packages/28/a3/2ad0a0a69662fd4cf556ab8074f0de978ee9b56bff6ddb4e656df4aa9e8e/fastrlock-0.8.3-cp313-cp313-win_amd64.whl", hash = "sha256:8d1d6a28291b4ace2a66bd7b49a9ed9c762467617febdd9ab356b867ed901af8", size = 30472, upload-time = "2024-12-17T11:02:37.983Z" }, ] @@ -5128,8 +5122,8 @@ name = "mosek" version = "11.1.2" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, - { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.11' and platform_machine != 'aarch64') or (python_full_version < '3.11' and sys_platform != 'linux')" }, + { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.11' and platform_machine != 'aarch64') or (python_full_version >= '3.11' and sys_platform != 'linux')" }, ] wheels = [ { url = "https://files.pythonhosted.org/packages/04/76/895d637c7e0561fd0c630049680fe616cb279e0050597d8731b7c3da426f/mosek-11.1.2-cp39-abi3-macosx_11_0_arm64.whl", hash = "sha256:c56a776188951b9028b47f9e814eb21ac0c8b44b564baf8c584277c9f61a4277", size = 8791845, upload-time = "2026-01-07T08:21:55.876Z" }, @@ -5763,7 +5757,6 @@ name = "nvidia-libnvcomp-cu12" version = "5.1.0.21" source = { registry = "https://pypi.org/simple" } wheels = [ - { url = "https://files.pythonhosted.org/packages/f8/23/b20f2381c7e92c704386428fe79736a13c50f452376453fdc60fcc0ec1b0/nvidia_libnvcomp_cu12-5.1.0.21-py3-none-manylinux_2_28_aarch64.whl", hash = "sha256:77dfb3cb8c8995dfa0279ba99b0501e03cbe77e876aab44f4693abdcfac549ce", size = 28802614, upload-time = "2025-12-02T19:05:08.101Z" }, { url = "https://files.pythonhosted.org/packages/08/ab/844fcbaa46cc1242632b4b94b4ffc210ec3d8d8f30ad8f7f1c27767389a9/nvidia_libnvcomp_cu12-5.1.0.21-py3-none-manylinux_2_28_x86_64.whl", hash = "sha256:68de61183edb9a870c9a608273a2b5da97dea18e3552096c61fafd9bb2689db0", size = 28958714, upload-time = "2025-12-02T19:01:40.466Z" }, { url = "https://files.pythonhosted.org/packages/c4/cc/c6e92d9587b9ad63c08b1b94c5ae2216319491d0bd4f40f2a9a431d4841f/nvidia_libnvcomp_cu12-5.1.0.21-py3-none-win_amd64.whl", hash = "sha256:1352c7c4264ee5357f8f20e4a8da7f2f91debe21d8968f44576a7f4b51f91533", size = 28490640, upload-time = "2025-12-02T19:07:28.096Z" }, ] @@ -5781,17 +5774,16 @@ name = "nvidia-nvimgcodec-cu12" version = "0.7.0.11" source = { registry = "https://pypi.org/simple" } wheels = [ - { url = "https://files.pythonhosted.org/packages/63/48/74d33dd126f84a4212480e2cf07504f457b5bae5acd33c0f6bf839ea17d4/nvidia_nvimgcodec_cu12-0.7.0.11-py3-none-manylinux_2_28_aarch64.whl", hash = "sha256:52d834be8122bb5b8fc3151cc3bedb95368b3e7ac76af0c4561772ab2a847b2b", size = 27409358, upload-time = "2025-12-02T09:28:16.358Z" }, { url = "https://files.pythonhosted.org/packages/73/b4/f06528ebcb82da84f4a96efe7a210c277767cb86ad2f61f8b1a17d17f251/nvidia_nvimgcodec_cu12-0.7.0.11-py3-none-manylinux_2_28_x86_64.whl", hash = "sha256:32d3457859c5784e4c0f6a2f56b6a9afec8fe646cec1cbe4bb5c320948d92dfe", size = 33735220, upload-time = "2025-12-02T09:30:02.546Z" }, { url = "https://files.pythonhosted.org/packages/be/79/95b36049a9504d59d79929e9f3bec001b270f29aec8486e5fb9783a9502c/nvidia_nvimgcodec_cu12-0.7.0.11-py3-none-win_amd64.whl", hash = "sha256:495e07e071fcb2115f7f1948a04f6c51f96d61b83c614af753f7cc1bf369a46c", size = 18448810, upload-time = "2025-12-02T09:20:33.838Z" }, ] [package.optional-dependencies] all = [ - { name = "nvidia-libnvcomp-cu12" }, - { name = "nvidia-nvjpeg-cu12" }, - { name = "nvidia-nvjpeg2k-cu12" }, - { name = "nvidia-nvtiff-cu12" }, + { name = "nvidia-libnvcomp-cu12", marker = "platform_machine != 'aarch64' or sys_platform != 'linux'" }, + { name = "nvidia-nvjpeg-cu12", marker = "platform_machine != 'aarch64' or sys_platform != 'linux'" }, + { name = "nvidia-nvjpeg2k-cu12", marker = "platform_machine != 'aarch64' or sys_platform != 'linux'" }, + { name = "nvidia-nvtiff-cu12", marker = "platform_machine != 'aarch64' or sys_platform != 'linux'" }, ] [[package]] @@ -5807,7 +5799,6 @@ name = "nvidia-nvjpeg-cu12" version = "12.4.0.76" source = { registry = "https://pypi.org/simple" } wheels = [ - { url = "https://files.pythonhosted.org/packages/1d/48/5c12a3e6afe070ff563375cc72b42e9c7400bd0b44c734591049410be7fd/nvidia_nvjpeg_cu12-12.4.0.76-py3-none-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:f52c5ef7cf56e8bffac8903a59f14494017a52e4fe89d5a1d16c1e88d7bbf194", size = 5273693, upload-time = "2025-06-05T20:10:35.162Z" }, { url = "https://files.pythonhosted.org/packages/57/68/d3526394584134a23f2500833c62d3352e1feda7547041f4612b1a183aa3/nvidia_nvjpeg_cu12-12.4.0.76-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:3888f10b32fbd58e80166c48e01073732d752fa5f167b7cb5b9615f1c6375a20", size = 5313609, upload-time = "2025-06-05T20:10:43.92Z" }, { url = "https://files.pythonhosted.org/packages/bc/28/e05bb8e6cdb98e79c6822f8bbd7154a26d8102412b3a0bfd5e4c7c52db8c/nvidia_nvjpeg_cu12-12.4.0.76-py3-none-win_amd64.whl", hash = "sha256:21923726db667bd53050d0de88320983ff423322b7f376057dd943e487c40abc", size = 4741398, upload-time = "2025-06-05T20:16:19.152Z" }, ] @@ -5817,7 +5808,6 @@ name = "nvidia-nvjpeg2k-cu12" version = "0.9.1.47" source = { registry = "https://pypi.org/simple" } wheels = [ - { url = "https://files.pythonhosted.org/packages/84/0b/421625f754862b893c2f487090b4b6b86337801451f0623cda9d21d111b4/nvidia_nvjpeg2k_cu12-0.9.1.47-py3-none-manylinux2014_aarch64.whl", hash = "sha256:f6787aed8f9d0c839ea4e0ae190af90bcc71a9a6b4e3965d5b67c22a00f58714", size = 7344958, upload-time = "2025-11-13T18:17:15.127Z" }, { url = "https://files.pythonhosted.org/packages/85/91/41abf44089ceb8b29479cdef2ca952277cc6667d40affedd39c3f1744d7e/nvidia_nvjpeg2k_cu12-0.9.1.47-py3-none-manylinux2014_x86_64.whl", hash = "sha256:6672c85e47ab61ffe3d19da8a41fd597155852e6e219ddc90a133623b54f7818", size = 7402941, upload-time = "2025-11-13T18:13:28.977Z" }, { url = "https://files.pythonhosted.org/packages/01/b2/ab62e6c008f3080743477de31da22eb83b374c37fe5d387e7435e507914f/nvidia_nvjpeg2k_cu12-0.9.1.47-py3-none-win_amd64.whl", hash = "sha256:ebb5d34d68beb70c2718c769996d9d8e49a2d9acacc79f6235c07649a4045e97", size = 6973975, upload-time = "2025-11-13T18:25:26.611Z" }, ] @@ -5835,7 +5825,6 @@ name = "nvidia-nvtiff-cu12" version = "0.6.0.78" source = { registry = "https://pypi.org/simple" } wheels = [ - { url = "https://files.pythonhosted.org/packages/41/19/9529fbda1e7a24b45649c9bc86cf6490d5b53f63e6b17d851f1528ff8380/nvidia_nvtiff_cu12-0.6.0.78-py3-none-manylinux2014_aarch64.whl", hash = "sha256:9193a46eaef2d52a92178c34e2404f621b581d651d2c7ab2d83c24fee6fcc136", size = 2478534, upload-time = "2025-11-13T18:26:02.492Z" }, { url = "https://files.pythonhosted.org/packages/62/4b/24805e9c56936dd57a1830b65b53234853f429cea5edbcbfdf853ceebdcf/nvidia_nvtiff_cu12-0.6.0.78-py3-none-manylinux2014_x86_64.whl", hash = "sha256:b48517578de6f1a6e806e00ef0da6d673036957560efbe9fa2934707d5d18c00", size = 2518414, upload-time = "2025-11-13T18:16:55.401Z" }, { url = "https://files.pythonhosted.org/packages/45/48/1d818455e6c6182354fb5b17a6c9d7dcfb002e64e258554fe3410ea44510/nvidia_nvtiff_cu12-0.6.0.78-py3-none-win_amd64.whl", hash = "sha256:daf9035b5efc315ef904b449564d1d9d9a502f38e115cf5757d98f9c52a284d0", size = 2055719, upload-time = "2025-11-13T18:29:01.023Z" }, ] @@ -5963,13 +5952,13 @@ name = "onnxruntime-gpu" version = "1.23.2" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "coloredlogs" }, - { name = "flatbuffers" }, - { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, - { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, - { name = "packaging" }, - { name = "protobuf" }, - { name = "sympy" }, + { name = "coloredlogs", marker = "platform_machine != 'aarch64' or sys_platform != 'linux'" }, + { name = "flatbuffers", marker = "platform_machine != 'aarch64' or sys_platform != 'linux'" }, + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.11' and platform_machine != 'aarch64') or (python_full_version < '3.11' and sys_platform != 'linux')" }, + { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.11' and platform_machine != 'aarch64') or (python_full_version >= '3.11' and sys_platform != 'linux')" }, + { name = "packaging", marker = "platform_machine != 'aarch64' or sys_platform != 'linux'" }, + { name = "protobuf", marker = "platform_machine != 'aarch64' or sys_platform != 'linux'" }, + { name = "sympy", marker = "platform_machine != 'aarch64' or sys_platform != 'linux'" }, ] wheels = [ { url = "https://files.pythonhosted.org/packages/cb/ae/39283748c68a96be4f5f8a9561e0e3ca92af1eae6c2b1c07fb1da5f65cd1/onnxruntime_gpu-1.23.2-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:18de50c6c8eea50acc405ea13d299aec593e46478d7a22cd32cdbbdf7c42899d", size = 300525411, upload-time = "2025-10-22T16:56:08.415Z" }, @@ -7395,7 +7384,7 @@ name = "pydot" version = "4.0.1" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "pyparsing" }, + { name = "pyparsing", marker = "platform_machine != 'aarch64' or sys_platform != 'linux'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/50/35/b17cb89ff865484c6a20ef46bf9d95a5f07328292578de0b295f4a6beec2/pydot-4.0.1.tar.gz", hash = "sha256:c2148f681c4a33e08bf0e26a9e5f8e4099a82e0e2a068098f32ce86577364ad5", size = 162594, upload-time = "2025-06-17T20:09:56.454Z" } wheels = [ @@ -7817,9 +7806,9 @@ name = "python-fcl" version = "0.7.0.10" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "cython" }, - { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, - { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, + { name = "cython", marker = "platform_machine != 'aarch64' or sys_platform != 'linux'" }, + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.11' and platform_machine != 'aarch64') or (python_full_version < '3.11' and sys_platform != 'linux')" }, + { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.11' and platform_machine != 'aarch64') or (python_full_version >= '3.11' and sys_platform != 'linux')" }, ] wheels = [ { url = "https://files.pythonhosted.org/packages/ec/ff/5f095a3f8a4ba918b14f61d6566fd50dcad0beb0f8f8e7f9569f4fc70469/python_fcl-0.7.0.10-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:9a2428768f6d1d3dab1e3f7ccbae3cd5e36287e74e1006773fdc5c1fc908b375", size = 2004230, upload-time = "2025-10-22T06:28:08.625Z" }, @@ -10605,9 +10594,9 @@ name = "xformers" version = "0.0.33.post2" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, - { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, - { name = "torch" }, + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.11' and platform_machine != 'aarch64') or (python_full_version < '3.11' and sys_platform != 'linux')" }, + { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.11' and platform_machine != 'aarch64') or (python_full_version >= '3.11' and sys_platform != 'linux')" }, + { name = "torch", marker = "platform_machine != 'aarch64' or sys_platform != 'linux'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/0b/69/403e963d35f1b0c52a1b3127e0bc4e94e7e50ecee8c6684a8abe40e6638e/xformers-0.0.33.post2.tar.gz", hash = "sha256:647ddf26578d2b8643230467ef1f0fbfef0bbe556a546bd27a70d4855d3433e1", size = 14783914, upload-time = "2025-12-04T18:52:42.572Z" } wheels = [ From 9c4ef0fceb1f1c7c6c69392d09f2a3cda2f290b6 Mon Sep 17 00:00:00 2001 From: Jeff Hykin Date: Thu, 12 Feb 2026 09:35:11 -0800 Subject: [PATCH 09/45] try to make mypy CI happy --- dimos/manipulation/manipulation_module.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/dimos/manipulation/manipulation_module.py b/dimos/manipulation/manipulation_module.py index a4a30b5de7..a0b7b6889c 100644 --- a/dimos/manipulation/manipulation_module.py +++ b/dimos/manipulation/manipulation_module.py @@ -19,7 +19,7 @@ from dataclasses import dataclass, field from enum import Enum import threading -from typing import TYPE_CHECKING, TypeAlias, cast +from typing import TYPE_CHECKING, TypeAlias from dimos.core import In, Module, rpc from dimos.core.module import ModuleConfig @@ -453,7 +453,7 @@ def get_visualization_url(self) -> str | None: """ if self._world_monitor is None: return None - return cast("str | None", self._world_monitor.get_visualization_url()) + return self._world_monitor.get_visualization_url() @rpc def clear_planned_path(self) -> bool: From 37f05dcbcc07b6c3189105da42f9178689db9ca6 Mon Sep 17 00:00:00 2001 From: Jeff Hykin Date: Thu, 12 Feb 2026 09:54:43 -0800 Subject: [PATCH 10/45] remove unused --- pyproject.toml | 6 ------ uv.lock | 10 +--------- 2 files changed, 1 insertion(+), 15 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index bba7c535d7..f23b292298 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -214,12 +214,6 @@ cuda = [ "xformers>=0.0.20; platform_machine == 'x86_64'", ] -jetson = [ - "mmengine>=0.10.3", - "mmcv>=2.1.0", - "ctransformers[cuda]==0.2.27", -] - dev = [ "ruff==0.14.3", "mypy==1.19.0", diff --git a/uv.lock b/uv.lock index b5f096a112..6edc266faf 100644 --- a/uv.lock +++ b/uv.lock @@ -1880,11 +1880,6 @@ docker = [ drone = [ { name = "pymavlink" }, ] -jetson = [ - { name = "ctransformers", extra = ["cuda"] }, - { name = "mmcv" }, - { name = "mmengine" }, -] manipulation = [ { name = "contact-graspnet-pytorch" }, { name = "drake", marker = "platform_machine != 'aarch64'" }, @@ -2003,7 +1998,6 @@ requires-dist = [ { name = "coverage", marker = "extra == 'dev'", specifier = ">=7.0" }, { name = "ctransformers", marker = "extra == 'cpu'", specifier = "==0.2.27" }, { name = "ctransformers", extras = ["cuda"], marker = "extra == 'cuda'", specifier = "==0.2.27" }, - { name = "ctransformers", extras = ["cuda"], marker = "extra == 'jetson'", specifier = "==0.2.27" }, { name = "cupy-cuda12x", marker = "platform_machine == 'x86_64' and extra == 'cuda'", specifier = "==13.6.0" }, { name = "dask", extras = ["complete"], specifier = "==2025.5.1" }, { name = "dask", extras = ["distributed"], marker = "extra == 'docker'", specifier = "==2025.5.1" }, @@ -2040,9 +2034,7 @@ requires-dist = [ { name = "mcp", marker = "extra == 'agents'", specifier = ">=1.0.0" }, { name = "md-babel-py", marker = "extra == 'dev'", specifier = "==1.1.1" }, { name = "mmcv", marker = "extra == 'cuda'", specifier = ">=2.1.0" }, - { name = "mmcv", marker = "extra == 'jetson'", specifier = ">=2.1.0" }, { name = "mmengine", marker = "extra == 'cuda'", specifier = ">=0.10.3" }, - { name = "mmengine", marker = "extra == 'jetson'", specifier = ">=0.10.3" }, { name = "moondream", marker = "extra == 'perception'" }, { name = "mujoco", marker = "extra == 'sim'", specifier = ">=3.3.4" }, { name = "mypy", marker = "extra == 'dev'", specifier = "==1.19.0" }, @@ -2158,7 +2150,7 @@ requires-dist = [ { name = "xformers", marker = "platform_machine == 'x86_64' and extra == 'cuda'", specifier = ">=0.0.20" }, { name = "yapf", marker = "extra == 'misc'", specifier = "==0.40.2" }, ] -provides-extras = ["misc", "visualization", "agents", "web", "perception", "unitree", "manipulation", "cpu", "cuda", "jetson", "dev", "sim", "drone", "docker", "base"] +provides-extras = ["misc", "visualization", "agents", "web", "perception", "unitree", "manipulation", "cpu", "cuda", "dev", "sim", "drone", "docker", "base"] [[package]] name = "dimos-lcm" From bd3b49d94b84b44cfc25a14084d43e8a5e0a9796 Mon Sep 17 00:00:00 2001 From: Jeff Hykin Date: Mon, 16 Feb 2026 10:00:36 -0800 Subject: [PATCH 11/45] basic CI test --- .github/workflows/quickstart-ci.yml | 49 +++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100644 .github/workflows/quickstart-ci.yml diff --git a/.github/workflows/quickstart-ci.yml b/.github/workflows/quickstart-ci.yml new file mode 100644 index 0000000000..f67d0ef347 --- /dev/null +++ b/.github/workflows/quickstart-ci.yml @@ -0,0 +1,49 @@ +name: quickstart-ci + +on: + push: + branches: + - main + - dev + pull_request: + +permissions: + contents: read + +jobs: + quickstart-test: + runs-on: ubuntu-24.04 + steps: + - uses: actions/checkout@v4 + + - name: Setup Python + uses: actions/setup-python@v5 + with: + python-version: "3.12" + + - name: Install Ubuntu system dependencies + run: | + sudo apt-get update + sudo apt-get install -y \ + curl \ + g++ \ + portaudio19-dev \ + git-lfs \ + libturbojpeg \ + python3-dev \ + pre-commit + + - name: Quickstart install and test + run: | + curl -LsSf https://astral.sh/uv/install.sh | sh + export PATH="$HOME/.local/bin:$PATH" + + export GIT_LFS_SKIP_SMUDGE=1 + git lfs install + + uv venv + . .venv/bin/activate + + uv pip install -e '.[base,dev,manipulation,misc,unitree,drone]' + pre-commit install + uv run pytest dimos From dd90ef4bf327811e77aeb00d5dfb9ac1574b1952 Mon Sep 17 00:00:00 2001 From: Jeff Hykin Date: Mon, 16 Feb 2026 17:12:02 -0800 Subject: [PATCH 12/45] only run on python changes --- .github/workflows/code-cleanup.yml | 4 ++++ .github/workflows/quickstart-ci.yml | 4 ++++ 2 files changed, 8 insertions(+) diff --git a/.github/workflows/code-cleanup.yml b/.github/workflows/code-cleanup.yml index 7177b3f9d1..f11a675d91 100644 --- a/.github/workflows/code-cleanup.yml +++ b/.github/workflows/code-cleanup.yml @@ -1,7 +1,11 @@ name: code-cleanup on: push: + paths: + - "**/*.py" pull_request: + paths: + - "**/*.py" permissions: contents: write diff --git a/.github/workflows/quickstart-ci.yml b/.github/workflows/quickstart-ci.yml index f67d0ef347..32ec9986a5 100644 --- a/.github/workflows/quickstart-ci.yml +++ b/.github/workflows/quickstart-ci.yml @@ -5,7 +5,11 @@ on: branches: - main - dev + paths: + - "**/*.py" pull_request: + paths: + - "**/*.py" permissions: contents: read From bda780012664b50f403ce1079507a13531eb5281 Mon Sep 17 00:00:00 2001 From: Jeff Hykin Date: Mon, 16 Feb 2026 17:37:38 -0800 Subject: [PATCH 13/45] Revert "only run on python changes" This reverts commit dd90ef4bf327811e77aeb00d5dfb9ac1574b1952. --- .github/workflows/code-cleanup.yml | 4 ---- .github/workflows/quickstart-ci.yml | 4 ---- 2 files changed, 8 deletions(-) diff --git a/.github/workflows/code-cleanup.yml b/.github/workflows/code-cleanup.yml index f11a675d91..7177b3f9d1 100644 --- a/.github/workflows/code-cleanup.yml +++ b/.github/workflows/code-cleanup.yml @@ -1,11 +1,7 @@ name: code-cleanup on: push: - paths: - - "**/*.py" pull_request: - paths: - - "**/*.py" permissions: contents: write diff --git a/.github/workflows/quickstart-ci.yml b/.github/workflows/quickstart-ci.yml index 32ec9986a5..f67d0ef347 100644 --- a/.github/workflows/quickstart-ci.yml +++ b/.github/workflows/quickstart-ci.yml @@ -5,11 +5,7 @@ on: branches: - main - dev - paths: - - "**/*.py" pull_request: - paths: - - "**/*.py" permissions: contents: read From 7b2309d9881ef14036f13bbe8b27fa9e830dcc31 Mon Sep 17 00:00:00 2001 From: Jeff Hykin Date: Tue, 17 Feb 2026 07:29:46 -0800 Subject: [PATCH 14/45] clean up --- .github/workflows/readme.md | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/.github/workflows/readme.md b/.github/workflows/readme.md index f82ba479bb..5755ca7575 100644 --- a/.github/workflows/readme.md +++ b/.github/workflows/readme.md @@ -1,7 +1,7 @@ # general structure of workflows -Docker.yml checks for releavant file changes and re-builds required images -Currently images have a dependancy chain of ros -> python -> dev (in the future this might be a tree and can fork) +Docker.yml checks for relevant file changes and re-builds required images +Currently images have a dependency chain of ros -> python -> dev (in the future this might be a tree and can fork) On top of the dev image then tests are run. Dev image is also what developers use in their own IDE via devcontainers @@ -24,19 +24,19 @@ more info @ https://docs.github.com/en/packages/working-with-a-github-packages-r login to docker via -`sh +```sh echo TOKEN | docker login ghcr.io -u GITHUB_USER --password-stdin -` +``` pull dev image (dev branch) -`sh +```sh docker pull ghcr.io/dimensionalos/dev:dev -` +``` pull dev image (master) -`sh +```sh docker pull ghcr.io/dimensionalos/dev:latest -` +``` # todo From 5d70facdc337dc9f8418065050c926775eb07023 Mon Sep 17 00:00:00 2001 From: Jeff Hykin Date: Tue, 17 Feb 2026 07:30:32 -0800 Subject: [PATCH 15/45] test --- .github/workflows/pre-merge.yml | 62 +++++++++++++++++++++++++++++++++ 1 file changed, 62 insertions(+) create mode 100644 .github/workflows/pre-merge.yml diff --git a/.github/workflows/pre-merge.yml b/.github/workflows/pre-merge.yml new file mode 100644 index 0000000000..f6ce02db3f --- /dev/null +++ b/.github/workflows/pre-merge.yml @@ -0,0 +1,62 @@ +name: pre_merge + +on: + pull_request: + branches: + - dev + workflow_dispatch: + +permissions: + contents: read + +jobs: + pytest_fast: + runs-on: ubuntu-24.04 + steps: + - uses: actions/checkout@v4 + + - name: Setup uv + uses: astral-sh/setup-uv@v4 + with: + enable-cache: true + python-version: "3.12" + + - name: Install Ubuntu system dependencies + run: | + sudo apt-get update + sudo apt-get install -y \ + curl \ + g++ \ + portaudio19-dev \ + git-lfs \ + libturbojpeg \ + python3-dev \ + pre-commit + + - name: Follow Development Install and Test + run: | + + SECONDS=0 + + uv sync --extra base --extra dev --extra manipulation --extra misc --extra unitree --extra drone + + uv run pytest dimos/robot/test_all_blueprints_generation.py::test_all_blueprints_is_current + + # Run mypy check for multiple Python versions + uv run mypy --python-version 3.10 dimos + uv run mypy --python-version 3.12 dimos + + echo "# " + echo "# " + echo "# pytest fast" + echo "# " + echo "# " + uv run bin/pytest-fast + TEST_EXIT_CODE=$? + + echo "" + echo "===================================" + echo "Total test time: ${SECONDS}s" + echo "===================================" + + exit $TEST_EXIT_CODE From 366599e0a1eb102e14a8520e2643485aafa6a5cf Mon Sep 17 00:00:00 2001 From: Jeff Hykin Date: Tue, 17 Feb 2026 07:30:43 -0800 Subject: [PATCH 16/45] - --- .github/workflows/quickstart-ci.yml | 49 ----------------------------- 1 file changed, 49 deletions(-) delete mode 100644 .github/workflows/quickstart-ci.yml diff --git a/.github/workflows/quickstart-ci.yml b/.github/workflows/quickstart-ci.yml deleted file mode 100644 index f67d0ef347..0000000000 --- a/.github/workflows/quickstart-ci.yml +++ /dev/null @@ -1,49 +0,0 @@ -name: quickstart-ci - -on: - push: - branches: - - main - - dev - pull_request: - -permissions: - contents: read - -jobs: - quickstart-test: - runs-on: ubuntu-24.04 - steps: - - uses: actions/checkout@v4 - - - name: Setup Python - uses: actions/setup-python@v5 - with: - python-version: "3.12" - - - name: Install Ubuntu system dependencies - run: | - sudo apt-get update - sudo apt-get install -y \ - curl \ - g++ \ - portaudio19-dev \ - git-lfs \ - libturbojpeg \ - python3-dev \ - pre-commit - - - name: Quickstart install and test - run: | - curl -LsSf https://astral.sh/uv/install.sh | sh - export PATH="$HOME/.local/bin:$PATH" - - export GIT_LFS_SKIP_SMUDGE=1 - git lfs install - - uv venv - . .venv/bin/activate - - uv pip install -e '.[base,dev,manipulation,misc,unitree,drone]' - pre-commit install - uv run pytest dimos From ce0110e23abaa089cb497115d1861fc4a525471e Mon Sep 17 00:00:00 2001 From: Jeff Hykin Date: Wed, 18 Feb 2026 09:59:38 -0800 Subject: [PATCH 17/45] add a fast docs checker --- .github/workflows/fast-docs.yml | 35 +++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 .github/workflows/fast-docs.yml diff --git a/.github/workflows/fast-docs.yml b/.github/workflows/fast-docs.yml new file mode 100644 index 0000000000..f7680c7f37 --- /dev/null +++ b/.github/workflows/fast-docs.yml @@ -0,0 +1,35 @@ +name: docs + +on: + pull_request: + branches: + - master + - dev + paths: + - 'docs/**' + workflow_dispatch: + +permissions: + contents: read + +jobs: + check_links: + runs-on: ubuntu-24.04 + steps: + - uses: actions/checkout@v4 + + - name: Setup Python + uses: actions/setup-python@v5 + with: + python-version: '3.12' + + - name: Run doclinks # Note: doesn't need uv python, just needs some python to run the script + run: | + python -m dimos.utils.docs.doclinks docs/ + + - uses: leshy/md-babel-py@main + with: + files: 'docs/**/*.md' + fail-on-change: true + # maybe later we can enforce python, for now just do diagram langs + args: --lang asymptote,pikchr,openscad,diagon From a5cff27efe2cdad7800759fdf8b673db3fdaccd7 Mon Sep 17 00:00:00 2001 From: Jeff Hykin Date: Wed, 18 Feb 2026 10:03:40 -0800 Subject: [PATCH 18/45] add missing command --- bin/gen-diagrams | 33 ++++++++++++++++++++++++++++++++ docs/development/writing_docs.md | 2 +- 2 files changed, 34 insertions(+), 1 deletion(-) create mode 100755 bin/gen-diagrams diff --git a/bin/gen-diagrams b/bin/gen-diagrams new file mode 100755 index 0000000000..8dab510309 --- /dev/null +++ b/bin/gen-diagrams @@ -0,0 +1,33 @@ +#!/usr/bin/env bash +set -euo pipefail + +REPO_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" +cd "$REPO_ROOT" + +# if md-babel-py doesnt exist +if [ -z "$(command -v "md-babel-py")" ]; then + # if ni doesnt exist + if [ -z "$(command -v "ni")" ] + then + echo "Error: md-babel-py required for running gen-diagrams." >&2 + echo " Either isntall nix or install md-babel-py" >&2 + echo " https://github.com/jeff-hykin/md-babel-py" >&2 + exit 1 + # use nix if local command doesn't exist + else + md-babel-py() { + nix run github:leshy/md-babel-py -- "$@" + } + fi +fi + +diagram_langs="asymptote,pikchr,openscad,diagon" +if [[ "$#" -gt 0 ]]; then + for arg in "$@"; do + md-babel-py run "$arg" --lang "$diagram_langs" + done +else + while IFS= read -r file; do + md-babel-py run "$file" --lang "$diagram_langs" + done < <(find ./docs -type f -name '*.md' | sort) +fi diff --git a/docs/development/writing_docs.md b/docs/development/writing_docs.md index 58466d6592..8b24dc620b 100644 --- a/docs/development/writing_docs.md +++ b/docs/development/writing_docs.md @@ -3,5 +3,5 @@ 1. Where to put your docs: - If it only matters to people who contribute to dimos (like this doc), put them in `docs/development` - Otherwise put them in `docs/usage` -2. Run `bin/gen_diagrams` to generate the svg's for your diagrams. We use [pikchr](https://pikchr.org/home/doc/trunk/doc/userman.md) as a diagram language. +2. Run `bin/gen-diagrams` to generate the svg's for your diagrams. We use [mermaid](https://mermaid.js.org/intro/) (no generation needed) and [pikchr](https://pikchr.org/home/doc/trunk/doc/userman.md) as diagrams languages. 3. Use [md-babel-py](https://github.com/leshy/md-babel-py/) (`md-babel-py run thing.md`) to make sure your code examples work. From f254a3ca2fe8e0243229c80c55414a8485b0c24e Mon Sep 17 00:00:00 2001 From: Jeff Hykin Date: Wed, 18 Feb 2026 12:14:32 -0600 Subject: [PATCH 19/45] Apply suggestion from @greptile-apps[bot] Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com> --- bin/gen-diagrams | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/bin/gen-diagrams b/bin/gen-diagrams index 8dab510309..22edfcd055 100755 --- a/bin/gen-diagrams +++ b/bin/gen-diagrams @@ -6,8 +6,8 @@ cd "$REPO_ROOT" # if md-babel-py doesnt exist if [ -z "$(command -v "md-babel-py")" ]; then - # if ni doesnt exist - if [ -z "$(command -v "ni")" ] + # if nix doesnt exist + if [ -z "$(command -v "nix")" ] then echo "Error: md-babel-py required for running gen-diagrams." >&2 echo " Either isntall nix or install md-babel-py" >&2 From aaa4e988d58520254c3a6b6cc50018d682d941bc Mon Sep 17 00:00:00 2001 From: Jeff Hykin Date: Wed, 18 Feb 2026 10:16:07 -0800 Subject: [PATCH 20/45] fix --- bin/gen-diagrams | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/bin/gen-diagrams b/bin/gen-diagrams index 8dab510309..7efa3e0f7d 100755 --- a/bin/gen-diagrams +++ b/bin/gen-diagrams @@ -6,12 +6,11 @@ cd "$REPO_ROOT" # if md-babel-py doesnt exist if [ -z "$(command -v "md-babel-py")" ]; then - # if ni doesnt exist - if [ -z "$(command -v "ni")" ] - then + # if nix doesnt exist + if [ -z "$(command -v "nix")" ]; then echo "Error: md-babel-py required for running gen-diagrams." >&2 echo " Either isntall nix or install md-babel-py" >&2 - echo " https://github.com/jeff-hykin/md-babel-py" >&2 + echo " https://github.com/leshy/md-babel-py" >&2 exit 1 # use nix if local command doesn't exist else From 1056faae14ba787b5134fa1c9dae9441d1d8f775 Mon Sep 17 00:00:00 2001 From: Jeff Hykin Date: Wed, 18 Feb 2026 12:17:06 -0600 Subject: [PATCH 21/45] Update bin/gen-diagrams Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com> --- bin/gen-diagrams | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bin/gen-diagrams b/bin/gen-diagrams index 7efa3e0f7d..7bdf29933b 100755 --- a/bin/gen-diagrams +++ b/bin/gen-diagrams @@ -9,7 +9,7 @@ if [ -z "$(command -v "md-babel-py")" ]; then # if nix doesnt exist if [ -z "$(command -v "nix")" ]; then echo "Error: md-babel-py required for running gen-diagrams." >&2 - echo " Either isntall nix or install md-babel-py" >&2 + echo " Either install nix or install md-babel-py" >&2 echo " https://github.com/leshy/md-babel-py" >&2 exit 1 # use nix if local command doesn't exist From 7c29734bae23605468a4bcbdc31ca34d1428a17e Mon Sep 17 00:00:00 2001 From: Jeff Hykin Date: Wed, 18 Feb 2026 10:21:35 -0800 Subject: [PATCH 22/45] - --- .github/workflows/pre-merge.yml | 62 --------------------------------- 1 file changed, 62 deletions(-) delete mode 100644 .github/workflows/pre-merge.yml diff --git a/.github/workflows/pre-merge.yml b/.github/workflows/pre-merge.yml deleted file mode 100644 index f6ce02db3f..0000000000 --- a/.github/workflows/pre-merge.yml +++ /dev/null @@ -1,62 +0,0 @@ -name: pre_merge - -on: - pull_request: - branches: - - dev - workflow_dispatch: - -permissions: - contents: read - -jobs: - pytest_fast: - runs-on: ubuntu-24.04 - steps: - - uses: actions/checkout@v4 - - - name: Setup uv - uses: astral-sh/setup-uv@v4 - with: - enable-cache: true - python-version: "3.12" - - - name: Install Ubuntu system dependencies - run: | - sudo apt-get update - sudo apt-get install -y \ - curl \ - g++ \ - portaudio19-dev \ - git-lfs \ - libturbojpeg \ - python3-dev \ - pre-commit - - - name: Follow Development Install and Test - run: | - - SECONDS=0 - - uv sync --extra base --extra dev --extra manipulation --extra misc --extra unitree --extra drone - - uv run pytest dimos/robot/test_all_blueprints_generation.py::test_all_blueprints_is_current - - # Run mypy check for multiple Python versions - uv run mypy --python-version 3.10 dimos - uv run mypy --python-version 3.12 dimos - - echo "# " - echo "# " - echo "# pytest fast" - echo "# " - echo "# " - uv run bin/pytest-fast - TEST_EXIT_CODE=$? - - echo "" - echo "===================================" - echo "Total test time: ${SECONDS}s" - echo "===================================" - - exit $TEST_EXIT_CODE From 45dfc789180b85015328976626c8aa8a76aa83b0 Mon Sep 17 00:00:00 2001 From: Jeff Hykin Date: Wed, 18 Feb 2026 10:27:57 -0800 Subject: [PATCH 23/45] revert mypy stuff --- dimos/perception/object_tracker.py | 2 -- dimos/perception/object_tracker_2d.py | 2 -- dimos/robot/drone/drone_tracking_module.py | 2 -- 3 files changed, 6 deletions(-) diff --git a/dimos/perception/object_tracker.py b/dimos/perception/object_tracker.py index 373818f863..da415ac32a 100644 --- a/dimos/perception/object_tracker.py +++ b/dimos/perception/object_tracker.py @@ -12,8 +12,6 @@ # See the License for the specific language governing permissions and # limitations under the License. -# mypy: disable-error-code=redundant-cast - from dataclasses import dataclass import threading import time diff --git a/dimos/perception/object_tracker_2d.py b/dimos/perception/object_tracker_2d.py index e5691b97da..1264b0e92b 100644 --- a/dimos/perception/object_tracker_2d.py +++ b/dimos/perception/object_tracker_2d.py @@ -12,8 +12,6 @@ # See the License for the specific language governing permissions and # limitations under the License. -# mypy: disable-error-code=redundant-cast - from dataclasses import dataclass import logging import threading diff --git a/dimos/robot/drone/drone_tracking_module.py b/dimos/robot/drone/drone_tracking_module.py index 2331170710..e1b633a05b 100644 --- a/dimos/robot/drone/drone_tracking_module.py +++ b/dimos/robot/drone/drone_tracking_module.py @@ -13,8 +13,6 @@ # See the License for the specific language governing permissions and # limitations under the License. -# mypy: disable-error-code=redundant-cast - """Drone tracking module with visual servoing for object following.""" import json From a0625d34b73bc6a85e1aefece651a019c12e7fac Mon Sep 17 00:00:00 2001 From: Jeff Hykin Date: Wed, 18 Feb 2026 11:35:12 -0800 Subject: [PATCH 24/45] fix mypy CI divergence --- bin/ci-fast | 17 +++++++++++++++++ docker/dev/Dockerfile | 4 ++-- docker/python/Dockerfile | 7 ++++++- 3 files changed, 25 insertions(+), 3 deletions(-) create mode 100755 bin/ci-fast diff --git a/bin/ci-fast b/bin/ci-fast new file mode 100755 index 0000000000..1e9ee659c6 --- /dev/null +++ b/bin/ci-fast @@ -0,0 +1,17 @@ +#!/usr/bin/env bash + +echo "Ensuring pip versions are correct" +time uv sync --frozen --extra base --extra dev --extra manipulation --extra misc --extra unitree --extra drone + +echo "Running pre-commit checks" +time pre-commit run --all-files + +echo "Running mypy checks" +time uv run mypy --python-version 3.10 --python-version 3.12 dimos + +echo "# " +echo "# " +echo "# pytest fast" +echo "# " +echo "# " +time uv run bin/pytest-fast diff --git a/docker/dev/Dockerfile b/docker/dev/Dockerfile index ef80b70e1d..f8381609e4 100644 --- a/docker/dev/Dockerfile +++ b/docker/dev/Dockerfile @@ -29,8 +29,8 @@ ENV UV_SYSTEM_PYTHON=1 RUN curl -LsSf https://astral.sh/uv/install.sh | sh ENV PATH="/root/.local/bin:$PATH" -# Install dependencies with UV -RUN uv pip install .[dev] +# --frozen installs from lock file, which is important for mypy to not diverge +RUN uv sync --frozen --extra dev # Copy files and add version to motd COPY /assets/dimensionalascii.txt /etc/motd diff --git a/docker/python/Dockerfile b/docker/python/Dockerfile index 1572bbc3ba..d4540403c7 100644 --- a/docker/python/Dockerfile +++ b/docker/python/Dockerfile @@ -48,4 +48,9 @@ COPY . /app/ # Install dependencies with UV (10-100x faster than pip) RUN uv pip install --upgrade 'pip>=24' 'setuptools>=70' 'wheel' 'packaging>=24' && \ - uv pip install '.[misc,cpu,sim,drone,unitree,web,perception,visualization]' + uv sync --frozen --extra misc --extra visualization --extra agents --extra web --extra perception --extra unitree --extra manipulation --extra cpu --extra dev --extra sim --extra drone --extra base + # features excluded from docker (at time of writing): + # --extra docker \ + # --extra psql \ + # --extra dds \ + # --extra cuda \ From bfa7ac7a420511ffa6dd9b45e20d3c9cb62036d6 Mon Sep 17 00:00:00 2001 From: Jeff Hykin Date: Wed, 18 Feb 2026 11:44:13 -0800 Subject: [PATCH 25/45] fix drake issue on MacOS so that mypy can run locally --- bin/ci-fast | 2 +- bin/pr-check | 22 ++++++++++++ bin/pr-name-check | 56 +++++++++++++++++++++++++++++ pyproject.toml | 4 +-- uv.lock | 92 ++++++++++++++++++++++++++++++++--------------- 5 files changed, 145 insertions(+), 31 deletions(-) create mode 100755 bin/pr-check create mode 100755 bin/pr-name-check diff --git a/bin/ci-fast b/bin/ci-fast index 1e9ee659c6..92f58c07ab 100755 --- a/bin/ci-fast +++ b/bin/ci-fast @@ -1,7 +1,7 @@ #!/usr/bin/env bash echo "Ensuring pip versions are correct" -time uv sync --frozen --extra base --extra dev --extra manipulation --extra misc --extra unitree --extra drone +time uv sync --frozen --extra misc --extra visualization --extra agents --extra web --extra perception --extra unitree --extra manipulation --extra cpu --extra dev --extra sim --extra drone --extra base echo "Running pre-commit checks" time pre-commit run --all-files diff --git a/bin/pr-check b/bin/pr-check new file mode 100755 index 0000000000..bd40b40ed6 --- /dev/null +++ b/bin/pr-check @@ -0,0 +1,22 @@ +#!/usr/bin/env bash + +REPO_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" +cd "$REPO_ROOT" + +bin/pr-name-check + +echo "Ensuring pip versions are correct" +time uv sync --frozen --extra misc --extra visualization --extra agents --extra web --extra perception --extra unitree --extra manipulation --extra cpu --extra dev --extra sim --extra drone --extra base + +echo "Running pre-commit checks" +time pre-commit run --all-files + +echo "Running mypy checks" +time uv run mypy --python-version 3.10 --python-version 3.12 dimos + +echo "# " +echo "# " +echo "# pytest fast" +echo "# " +echo "# " +time uv run bin/pytest-fast diff --git a/bin/pr-name-check b/bin/pr-name-check new file mode 100755 index 0000000000..728e7292c3 --- /dev/null +++ b/bin/pr-name-check @@ -0,0 +1,56 @@ +#!/usr/bin/env bash +# names: stash,yashas,alexl,matt,ivan,pauln,mustafa,jeff,yash,ruthwik,jalaj,jing,miguel,christie,juan,unknown +# types: feat,fix,chore,refactor,docs + +set -euo pipefail + +branch="$(git rev-parse --abbrev-ref HEAD)" + +allowed_names="stash yashas alexl matt ivan pauln mustafa jeff yash ruthwik jalaj jing miguel christie juan unknown" +allowed_types="feat fix chore refactor docs" + +if [[ "$branch" != */*/* ]]; then + echo "Invalid branch name: '$branch'" + echo "Expected format: //" + echo "Allowed names: $allowed_names" + echo "Allowed types: $allowed_types" + exit 1 +fi + +branch_name="${branch%%/*}" +rest="${branch#*/}" +branch_type="${rest%%/*}" +branch_description="${branch#*/*/}" + +if [[ -z "$branch_description" || "$branch_description" == "$branch" ]]; then + echo "Invalid branch name: '$branch'" + echo "Expected format: //" + exit 1 +fi + +name_ok=0 +for n in $allowed_names; do + if [[ "$branch_name" == "$n" ]]; then + name_ok=1 + break + fi +done + +type_ok=0 +for t in $allowed_types; do + if [[ "$branch_type" == "$t" ]]; then + type_ok=1 + break + fi +done + +if [[ "$name_ok" -ne 1 || "$type_ok" -ne 1 ]]; then + echo "Invalid branch name: '$branch'" + echo "Expected format: //" + echo "Parsed name/type: '$branch_name'/'$branch_type'" + echo "Allowed names: $allowed_names" + echo "Allowed types: $allowed_types" + exit 1 +fi + +echo "Branch naming check passed: $branch" diff --git a/pyproject.toml b/pyproject.toml index 74cd4b25e3..b4756dfb49 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -43,7 +43,6 @@ dependencies = [ "python-dotenv", "annotation-protocol>=1.4.0", "lazy_loader", - # Multiprocess "dask[complete]==2025.5.1", "plum-dispatch==2.5.7", @@ -171,7 +170,8 @@ unitree = [ manipulation = [ # Planning (Drake) - "drake>=1.40.0", + "drake==1.45.0; sys_platform == 'darwin'", + "drake==1.40.0; sys_platform != 'darwin'", # Hardware SDKs "piper-sdk", diff --git a/uv.lock b/uv.lock index 0ebb790f87..d666e5b7d1 100644 --- a/uv.lock +++ b/uv.lock @@ -400,10 +400,10 @@ name = "bitsandbytes" version = "0.49.1" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, - { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, - { name = "packaging" }, - { name = "torch" }, + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11' and sys_platform != 'darwin' and sys_platform != 'win32'" }, + { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11' and sys_platform != 'darwin' and sys_platform != 'win32'" }, + { name = "packaging", marker = "sys_platform != 'darwin' and sys_platform != 'win32'" }, + { name = "torch", marker = "sys_platform != 'darwin' and sys_platform != 'win32'" }, ] wheels = [ { url = "https://files.pythonhosted.org/packages/11/dd/5820e09213a3f7c0ee5aff20fce8b362ce935f9dd9958827274de4eaeec6/bitsandbytes-0.49.1-py3-none-manylinux_2_24_aarch64.whl", hash = "sha256:acd4730a0db3762d286707f4a3bc1d013d21dd5f0e441900da57ec4198578d4e", size = 31065659, upload-time = "2026-01-08T14:31:28.676Z" }, @@ -1945,7 +1945,8 @@ drone = [ { name = "pymavlink" }, ] manipulation = [ - { name = "drake" }, + { name = "drake", version = "1.40.0", source = { registry = "https://pypi.org/simple" }, marker = "sys_platform != 'darwin'" }, + { name = "drake", version = "1.45.0", source = { registry = "https://pypi.org/simple" }, marker = "sys_platform == 'darwin'" }, { name = "kaleido" }, { name = "matplotlib" }, { name = "piper-sdk" }, @@ -2064,7 +2065,8 @@ requires-dist = [ { name = "dimos", extras = ["dev"], marker = "extra == 'dds'" }, { name = "dimos-lcm" }, { name = "dimos-lcm", marker = "extra == 'docker'" }, - { name = "drake", marker = "extra == 'manipulation'", specifier = ">=1.40.0" }, + { name = "drake", marker = "sys_platform == 'darwin' and extra == 'manipulation'", specifier = "==1.45.0" }, + { name = "drake", marker = "sys_platform != 'darwin' and extra == 'manipulation'", specifier = "==1.40.0" }, { name = "edgetam-dimos", marker = "extra == 'misc'" }, { name = "einops", marker = "extra == 'misc'", specifier = "==0.8.1" }, { name = "empy", marker = "extra == 'misc'", specifier = "==3.3.4" }, @@ -2305,24 +2307,61 @@ wheels = [ [[package]] name = "drake" -version = "1.49.0" +version = "1.40.0" source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.14' and platform_machine == 'aarch64' and sys_platform == 'linux'", + "python_full_version == '3.13.*' and platform_machine == 'aarch64' and sys_platform == 'linux'", + "python_full_version == '3.12.*' and platform_machine == 'aarch64' and sys_platform == 'linux'", + "python_full_version >= '3.14' and sys_platform == 'win32'", + "python_full_version == '3.13.*' and sys_platform == 'win32'", + "(python_full_version >= '3.14' and platform_machine != 'aarch64' and sys_platform == 'linux') or (python_full_version >= '3.14' and sys_platform != 'darwin' and sys_platform != 'linux' and sys_platform != 'win32')", + "(python_full_version == '3.13.*' and platform_machine != 'aarch64' and sys_platform == 'linux') or (python_full_version == '3.13.*' and sys_platform != 'darwin' and sys_platform != 'linux' and sys_platform != 'win32')", + "python_full_version == '3.12.*' and sys_platform == 'win32'", + "(python_full_version == '3.12.*' and platform_machine != 'aarch64' and sys_platform == 'linux') or (python_full_version == '3.12.*' and sys_platform != 'darwin' and sys_platform != 'linux' and sys_platform != 'win32')", + "python_full_version == '3.11.*' and platform_machine == 'aarch64' and sys_platform == 'linux'", + "python_full_version == '3.11.*' and sys_platform == 'win32'", + "(python_full_version == '3.11.*' and platform_machine != 'aarch64' and sys_platform == 'linux') or (python_full_version == '3.11.*' and sys_platform != 'darwin' and sys_platform != 'linux' and sys_platform != 'win32')", + "python_full_version < '3.11' and platform_machine == 'aarch64' and sys_platform == 'linux'", + "python_full_version < '3.11' and sys_platform == 'win32'", + "(python_full_version < '3.11' and platform_machine != 'aarch64' and sys_platform == 'linux') or (python_full_version < '3.11' and sys_platform != 'darwin' and sys_platform != 'linux' and sys_platform != 'win32')", +] dependencies = [ - { name = "matplotlib" }, - { name = "mosek", marker = "python_full_version < '3.15'" }, - { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, - { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, - { name = "pydot" }, - { name = "pyyaml" }, + { name = "matplotlib", marker = "sys_platform != 'darwin'" }, + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11' and sys_platform != 'darwin'" }, + { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11' and sys_platform != 'darwin'" }, + { name = "pydot", marker = "sys_platform != 'darwin'" }, + { name = "pyyaml", marker = "sys_platform != 'darwin'" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/8d/2f/5e1acd5d3948dec8c48c887eced9edb0470b64894243c790f6fb3faaa7a9/drake-1.40.0-cp310-cp310-manylinux_2_34_x86_64.whl", hash = "sha256:5337eff173c35c49f30bd1e1803ccee62d3cb1e3d45b28092afdffc409197312", size = 74564478, upload-time = "2025-04-12T18:33:40.793Z" }, + { url = "https://files.pythonhosted.org/packages/ce/e2/ea09be5770e33c06becc2525ed6755410cef6a477f03bbce94019b598e93/drake-1.40.0-cp311-cp311-manylinux_2_34_x86_64.whl", hash = "sha256:34364c214704cb24891db4a4c6549c0c98e70c436ea7a56dce22cad0d997d364", size = 74600829, upload-time = "2025-04-12T18:34:09.46Z" }, + { url = "https://files.pythonhosted.org/packages/ac/9b/12e804c635c0c22b0228e75420c28d87a01dc2d8ec05c8be514f073124e7/drake-1.40.0-cp312-cp312-manylinux_2_34_x86_64.whl", hash = "sha256:f1cd01353128bded5916ae0996ba4c058d20dc58b207d5195c281059532d8d41", size = 74570230, upload-time = "2025-04-12T18:34:40.501Z" }, + { url = "https://files.pythonhosted.org/packages/fc/c7/739ab1518c5e003f6640e5871a43f098a0fca0cc69749e23422b3f254085/drake-1.40.0-cp313-cp313-manylinux_2_34_x86_64.whl", hash = "sha256:e19dcbad674b24ab5ca823c15961bf7dcd82405c2751e2de5f07ca6c817f8532", size = 74573061, upload-time = "2025-04-12T18:35:12.172Z" }, +] + +[[package]] +name = "drake" +version = "1.45.0" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.14' and sys_platform == 'darwin'", + "python_full_version == '3.13.*' and sys_platform == 'darwin'", + "python_full_version == '3.12.*' and sys_platform == 'darwin'", + "python_full_version == '3.11.*' and sys_platform == 'darwin'", + "python_full_version < '3.11' and sys_platform == 'darwin'", +] +dependencies = [ + { name = "matplotlib", marker = "sys_platform == 'darwin'" }, + { name = "mosek", marker = "sys_platform == 'darwin'" }, + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11' and sys_platform == 'darwin'" }, + { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11' and sys_platform == 'darwin'" }, + { name = "pydot", marker = "sys_platform == 'darwin'" }, + { name = "pyyaml", marker = "sys_platform == 'darwin'" }, ] wheels = [ - { url = "https://files.pythonhosted.org/packages/fb/26/2ce3a9caf431f24e39f8b1fc7b3ebba4faafef1d61c849db3194e8d2e21d/drake-1.49.0-cp310-cp310-manylinux_2_34_x86_64.whl", hash = "sha256:6c73dbd061fcb442e82b7b5a94dadcfbf4c44949035d03394df29412114647b2", size = 41482505, upload-time = "2026-01-15T19:44:08.313Z" }, - { url = "https://files.pythonhosted.org/packages/a3/2c/b147eaeee97986d970c0618144b28049cf078c20ba73209f4db14cf9a531/drake-1.49.0-cp311-cp311-manylinux_2_34_x86_64.whl", hash = "sha256:b897f5f1516d13627ef18a8395b15f56413016d3c91c902cada76860b5cbb12c", size = 41516482, upload-time = "2026-01-15T19:44:11.342Z" }, - { url = "https://files.pythonhosted.org/packages/84/dc/c55dc5678a61e5befd3694b28e0dc5737a8422334b774a4174b517c67c22/drake-1.49.0-cp312-cp312-manylinux_2_34_x86_64.whl", hash = "sha256:b9a5b528d430764ce1670918b8679cabbb209c8daa2440824ac3a9832c686591", size = 41432263, upload-time = "2026-01-15T19:44:14.486Z" }, - { url = "https://files.pythonhosted.org/packages/54/71/4c983e130ae86479a44e8afd737fd70c12ea5cf2c71bd96491339ce74ec9/drake-1.49.0-cp313-cp313-macosx_15_0_arm64.whl", hash = "sha256:ee647a022dcce17869c7a2d3d37e1d69f1f12bca8d7e3d7e84a743cfd1230be6", size = 33962409, upload-time = "2026-01-15T19:44:17.588Z" }, - { url = "https://files.pythonhosted.org/packages/3f/a8/1a46831f5f802088df9cd92c204b888aef4e3659d9702128533aa4e5ebaa/drake-1.49.0-cp313-cp313-manylinux_2_34_x86_64.whl", hash = "sha256:0a51abf867d534cef1343381ce79883acc606d52fc56debf2dd9e306982e8910", size = 41438880, upload-time = "2026-01-15T19:44:20.265Z" }, - { url = "https://files.pythonhosted.org/packages/37/b8/053e86e0dd3209cd1ba239dd49dd3313608a63958e89914ff371113be54b/drake-1.49.0-cp314-cp314-macosx_15_0_arm64.whl", hash = "sha256:16485819958e5bdd5d7815e89c7d87ab77cf3822e19ae5f7e53dbff510a56013", size = 33998519, upload-time = "2026-01-15T19:44:22.805Z" }, - { url = "https://files.pythonhosted.org/packages/d8/60/cdbc3101bb2bd57706a6b6c5a7fc68a03270f002af1d448da875f3eff5df/drake-1.49.0-cp314-cp314-manylinux_2_34_x86_64.whl", hash = "sha256:775740e9500ab8cb2e0af0e69ab162018ac03f7553b6fe03fc6b4f03c4b01092", size = 41509337, upload-time = "2026-01-15T19:44:25.879Z" }, + { url = "https://files.pythonhosted.org/packages/a0/31/aa4f1f5523381539e1028354cc535d5a3307d28fd33872f2b403454d8391/drake-1.45.0-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:b0d9bd6196dc6d3b0e660fc6351fcf236727a45ef6a7123f8dc96f85b8662ac3", size = 57314509, upload-time = "2025-09-16T19:02:10.195Z" }, + { url = "https://files.pythonhosted.org/packages/97/cc/a4e1909d8f69f6aaa2d572b6695a942395205f140c16cc2352b880670325/drake-1.45.0-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:a1d429e95c43b3fe1af156489381d3129c8ef4dd95b80d8c2a2a51a74a2adb24", size = 57315511, upload-time = "2025-09-16T19:02:16.937Z" }, ] [[package]] @@ -2438,7 +2477,7 @@ name = "exceptiongroup" version = "1.3.1" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "typing-extensions", marker = "python_full_version < '3.13'" }, + { name = "typing-extensions", marker = "python_full_version < '3.11'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/50/79/66800aadf48771f6b62f7eb014e352e5d06856655206165d775e675a02c9/exceptiongroup-1.3.1.tar.gz", hash = "sha256:8b412432c6055b0b7d14c310000ae93352ed6754f70fa8f7c34141f91c4e3219", size = 30371, upload-time = "2025-11-21T23:01:54.787Z" } wheels = [ @@ -5170,17 +5209,14 @@ wheels = [ [[package]] name = "mosek" -version = "11.1.2" +version = "11.0.24" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, - { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11' and sys_platform == 'darwin'" }, + { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11' and sys_platform == 'darwin'" }, ] wheels = [ - { url = "https://files.pythonhosted.org/packages/04/76/895d637c7e0561fd0c630049680fe616cb279e0050597d8731b7c3da426f/mosek-11.1.2-cp39-abi3-macosx_11_0_arm64.whl", hash = "sha256:c56a776188951b9028b47f9e814eb21ac0c8b44b564baf8c584277c9f61a4277", size = 8791845, upload-time = "2026-01-07T08:21:55.876Z" }, - { url = "https://files.pythonhosted.org/packages/c3/e9/253e759e6e00b9cfbb4e95e7fe079b0e971b3c81c75f059bf2c2be3216e9/mosek-11.1.2-cp39-abi3-manylinux2014_x86_64.whl", hash = "sha256:5c3566d2a603d94a1773bcd27097c8390dba1d9a1543534f3527deb56f1d0a55", size = 15359313, upload-time = "2026-01-07T08:22:00.805Z" }, - { url = "https://files.pythonhosted.org/packages/41/ea/17bb932e0d307c31de685ba817a3cba822e2757a9810e7cc516778c2baa3/mosek-11.1.2-cp39-abi3-manylinux_2_27_aarch64.whl", hash = "sha256:67c13d56a9b7adf2670e4ed6fb62aa92560ae2ff1050f6e756d0d3f82c42c19f", size = 11073007, upload-time = "2026-01-07T08:22:03.118Z" }, - { url = "https://files.pythonhosted.org/packages/f2/67/6f2b6e544cf5e284c7f0baebffbc82b55e7db5b7ed5d711b621fa965d4df/mosek-11.1.2-cp39-abi3-win_amd64.whl", hash = "sha256:ad81cfd53af508db89241c7869ddce7ceaae13ef057f7b98007d57dccbb63c92", size = 11191977, upload-time = "2026-01-07T08:22:05.845Z" }, + { url = "https://files.pythonhosted.org/packages/37/e7/d04ea5c587fd8b491fbe9377fafa5feb063bb28a3a6949fb393a62230d9d/mosek-11.0.24-cp39-abi3-macosx_11_0_arm64.whl", hash = "sha256:7f2ab70ad3357f9187c96237d0c49187f82f5885250a5e211b6aa20cb0a7207f", size = 8345311, upload-time = "2025-06-25T10:51:51.777Z" }, ] [[package]] From 5eccc35b55002cbe74b70bcbf7be0fecff93de80 Mon Sep 17 00:00:00 2001 From: Jeff Hykin Date: Wed, 18 Feb 2026 11:45:02 -0800 Subject: [PATCH 26/45] simplify --- bin/pr-check | 16 +--------------- 1 file changed, 1 insertion(+), 15 deletions(-) diff --git a/bin/pr-check b/bin/pr-check index bd40b40ed6..277717c735 100755 --- a/bin/pr-check +++ b/bin/pr-check @@ -5,18 +5,4 @@ cd "$REPO_ROOT" bin/pr-name-check -echo "Ensuring pip versions are correct" -time uv sync --frozen --extra misc --extra visualization --extra agents --extra web --extra perception --extra unitree --extra manipulation --extra cpu --extra dev --extra sim --extra drone --extra base - -echo "Running pre-commit checks" -time pre-commit run --all-files - -echo "Running mypy checks" -time uv run mypy --python-version 3.10 --python-version 3.12 dimos - -echo "# " -echo "# " -echo "# pytest fast" -echo "# " -echo "# " -time uv run bin/pytest-fast +bin/ci-fast From ab3fed41d9f8c2772d5c38a338c3e7e29fb1a25f Mon Sep 17 00:00:00 2001 From: Jeff Hykin Date: Wed, 18 Feb 2026 11:59:40 -0800 Subject: [PATCH 27/45] add fast-test to prevent pytoml edits that break mypy on macos --- .github/workflows/fast-test.yml | 53 +++++++++++++++++++++++++++++++++ setup.py | 53 +++++++++++++++++++++++++++++---- 2 files changed, 101 insertions(+), 5 deletions(-) create mode 100644 .github/workflows/fast-test.yml diff --git a/.github/workflows/fast-test.yml b/.github/workflows/fast-test.yml new file mode 100644 index 0000000000..8eae743a17 --- /dev/null +++ b/.github/workflows/fast-test.yml @@ -0,0 +1,53 @@ +name: test-fast + +on: + push: + branches: + - main + - dev + paths: + - 'pyproject.toml' + - 'setup.py' + - 'uv.lock' + - 'dimos/**' + paths-ignore: + - 'dimos/**/*.md' + workflow_dispatch: + +permissions: + contents: read + +jobs: + pytest_fast: + strategy: + matrix: + os: [ubuntu-24.04, macos-15] + + runs-on: ${{ matrix.os }} + steps: + - uses: actions/checkout@v4 + + - name: Setup uv + uses: astral-sh/setup-uv@v4 + with: + enable-cache: true + python-version: "3.12" + cache-suffix: ${{ runner.os }}-${{ runner.arch }}-py3.12 + + - name: Install System dependencies + run: | + # these lines should stay exactly in sync with docs/development/README.md + if [ "$OSTYPE" = "linux-gnu" ]; then + sudo apt-get update + sudo apt-get install -y curl g++ portaudio19-dev git-lfs libturbojpeg python3-dev pre-commit + # On macOS (12.6 or newer) + elif [ "$(uname)" = "Darwin" ]; then + # install homebrew + /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" + # install dependencies + brew install gnu-sed gcc portaudio git-lfs libjpeg-turbo python pre-commit + fi + + - name: Install and run tests + run: | + bin/ci-fast diff --git a/setup.py b/setup.py index 013ff731a8..50ac0a37ab 100644 --- a/setup.py +++ b/setup.py @@ -13,20 +13,63 @@ # limitations under the License. import os +from pathlib import Path +import struct +import sys from pybind11.setup_helpers import Pybind11Extension, build_ext from setuptools import find_packages, setup + +def python_is_macos_universal_binary(executable: str | None = None) -> bool: + """ + Returns True if the given executable is a macOS universal (fat) binary. + """ + FAT_MAGIC = 0xCAFEBABE # big-endian fat + FAT_CIGAM = 0xBEBAFECA # little-endian fat + FAT_MAGIC_64 = 0xCAFEBABF # big-endian fat 64 + FAT_CIGAM_64 = 0xBFBAFECA # little-endian fat 64 + + if executable is None: + executable = sys.executable + + path = Path(executable) + if not path.exists(): + return False + + try: + with path.open("rb") as f: + header = f.read(4) + if len(header) < 4: + return False + + magic = struct.unpack(">I", header)[0] + return magic in { + FAT_MAGIC, + FAT_CIGAM, + FAT_MAGIC_64, + FAT_CIGAM_64, + } + except OSError: + return False + + +extra_compile_args = [ + "-O3", # Maximum optimization + "-ffast-math", # Fast floating point +] +# when the python exe is a universal binary, this option fails because the compiler +# call tries to build a matching (e.g. universal) binary, clang doesn't support this option for universal binaries +# if the user is using an arm64 specific binary (ex: nix build) then the optimization exists and is useful +if not python_is_macos_universal_binary(): + extra_compile_args.append("-march=native") + # C++ extensions ext_modules = [ Pybind11Extension( "dimos.navigation.replanning_a_star.min_cost_astar_ext", [os.path.join("dimos", "navigation", "replanning_a_star", "min_cost_astar_cpp.cpp")], - extra_compile_args=[ - "-O3", # Maximum optimization - "-march=native", # Optimize for current CPU - "-ffast-math", # Fast floating point - ], + extra_compile_args=extra_compile_args, define_macros=[ ("NDEBUG", "1"), ], From 195ecbd378bee854fcc36661fa76366ee7453b29 Mon Sep 17 00:00:00 2001 From: Jeff Hykin Date: Wed, 18 Feb 2026 12:04:03 -0800 Subject: [PATCH 28/45] link --- bin/pr-name-check | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/bin/pr-name-check b/bin/pr-name-check index 728e7292c3..6710581967 100755 --- a/bin/pr-name-check +++ b/bin/pr-name-check @@ -1,13 +1,12 @@ #!/usr/bin/env bash -# names: stash,yashas,alexl,matt,ivan,pauln,mustafa,jeff,yash,ruthwik,jalaj,jing,miguel,christie,juan,unknown -# types: feat,fix,chore,refactor,docs set -euo pipefail branch="$(git rev-parse --abbrev-ref HEAD)" -allowed_names="stash yashas alexl matt ivan pauln mustafa jeff yash ruthwik jalaj jing miguel christie juan unknown" +# based on: https://github.com/dimensionalOS/wiki/wiki allowed_types="feat fix chore refactor docs" +allowed_names="stash ivan pauln alexl mustafa miguel christie ruthwik jalaj yashas yash matt jing juan jeff unknown" if [[ "$branch" != */*/* ]]; then echo "Invalid branch name: '$branch'" From 9fd66a0fa37cd6aa91ce6591f7132e31912165e0 Mon Sep 17 00:00:00 2001 From: Jeff Hykin Date: Wed, 18 Feb 2026 12:09:41 -0800 Subject: [PATCH 29/45] report errors --- bin/ci-fast | 2 ++ 1 file changed, 2 insertions(+) diff --git a/bin/ci-fast b/bin/ci-fast index 92f58c07ab..4d21207018 100755 --- a/bin/ci-fast +++ b/bin/ci-fast @@ -1,5 +1,7 @@ #!/usr/bin/env bash +set -euo pipefail + echo "Ensuring pip versions are correct" time uv sync --frozen --extra misc --extra visualization --extra agents --extra web --extra perception --extra unitree --extra manipulation --extra cpu --extra dev --extra sim --extra drone --extra base From 37e656e609748172918ffff3ded9b6c050edfa44 Mon Sep 17 00:00:00 2001 From: Jeff Hykin Date: Wed, 18 Feb 2026 15:01:08 -0600 Subject: [PATCH 30/45] add time based punishment for branch name --- bin/pr-name-check | 26 +++++++++++++++++++------- 1 file changed, 19 insertions(+), 7 deletions(-) diff --git a/bin/pr-name-check b/bin/pr-name-check index 6710581967..2590c57109 100755 --- a/bin/pr-name-check +++ b/bin/pr-name-check @@ -44,12 +44,24 @@ for t in $allowed_types; do done if [[ "$name_ok" -ne 1 || "$type_ok" -ne 1 ]]; then + echo + echo + echo + echo + echo echo "Invalid branch name: '$branch'" - echo "Expected format: //" - echo "Parsed name/type: '$branch_name'/'$branch_type'" - echo "Allowed names: $allowed_names" - echo "Allowed types: $allowed_types" - exit 1 + echo + echo " Expected format: //" + echo " Parsed name: $branch_name" + echo " Allowed names: $allowed_names" + echo " Parsed type: $branch_type" + echo " Allowed types: $allowed_types" + echo + echo "Wait 4 seconds if you want to ignore this error" + sleep 1; echo 4 + sleep 1; echo 3 + sleep 1; echo 2 + sleep 1; echo 1 +else + echo "Branch naming check passed: $branch" fi - -echo "Branch naming check passed: $branch" From 68fff75e29cfc74eda92799b761b2ab9e27ce692 Mon Sep 17 00:00:00 2001 From: Jeff Hykin Date: Wed, 18 Feb 2026 15:05:50 -0600 Subject: [PATCH 31/45] add ci-slow --- bin/ci-fast | 6 ++++++ bin/ci-slow | 41 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 47 insertions(+) create mode 100755 bin/ci-slow diff --git a/bin/ci-fast b/bin/ci-fast index 4d21207018..809718cec5 100755 --- a/bin/ci-fast +++ b/bin/ci-fast @@ -1,5 +1,11 @@ #!/usr/bin/env bash +# +# note this command is used by CI directly, and also is used by bin/pr-check +# this is intentional: to keep them in sync +# if something should only be done locally, change bin/pr-check +# if something should only be done on CI, change .github/workflows/fast-test.yml +# set -euo pipefail echo "Ensuring pip versions are correct" diff --git a/bin/ci-slow b/bin/ci-slow new file mode 100755 index 0000000000..795ff7bb4b --- /dev/null +++ b/bin/ci-slow @@ -0,0 +1,41 @@ +#!/usr/bin/env bash + +# +# this file is supposed to mimic CI as closesly as possible, the main difference is it doesn't detect changes it just runs everything +# +set -euo pipefail + +echo "If you get permission errors try: echo YOUR_GITHUB_AUTH_TOKEN | docker login ghcr.io -u GITHUB_USER --password-stdin" + +run_in_image() { + local image="$1" + local cmd="$2" + + if [ "$(uname)" = "Darwin" ]; then + docker run --rm -it -v "$PWD:/workspace" -w /workspace --platform linux/amd64 -e CI=1 "ghcr.io/dimensionalos/${image}:dev" /entrypoint.sh bash -lc "$cmd" + else + docker run --rm -it -v "$PWD:/workspace" -w /workspace -e CI=1 "ghcr.io/dimensionalos/${image}:dev" /entrypoint.sh bash -lc "$cmd" + fi +} + +echo "Running checks equivalent to .github/workflows/docker.yml test jobs..." + +echo +echo "== ros-dev: pytest && pytest -m ros ==" +run_in_image "ros-dev" "pytest && pytest -m ros" + +echo +echo "== dev: pytest ==" +run_in_image "dev" "pytest" + +echo +echo "== dev: pytest -m heavy ==" +run_in_image "dev" "pytest -m heavy" + +echo +echo "== dev: pytest -m lcm ==" +run_in_image "dev" "pytest -m lcm" + +echo +echo "== dev: pytest -m integration ==" +run_in_image "dev" "pytest -m integration" From cc1b20b55a403d35e8dc83edb2a8d1460405eb56 Mon Sep 17 00:00:00 2001 From: Jeff Hykin Date: Wed, 18 Feb 2026 15:47:23 -0600 Subject: [PATCH 32/45] Update .github/workflows/fast-test.yml Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com> --- .github/workflows/fast-test.yml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/.github/workflows/fast-test.yml b/.github/workflows/fast-test.yml index 8eae743a17..ec0e77f469 100644 --- a/.github/workflows/fast-test.yml +++ b/.github/workflows/fast-test.yml @@ -10,8 +10,7 @@ on: - 'setup.py' - 'uv.lock' - 'dimos/**' - paths-ignore: - - 'dimos/**/*.md' + - '!dimos/**/*.md' workflow_dispatch: permissions: From 08bf02c84c7c4232964fa40199e33b35882148ef Mon Sep 17 00:00:00 2001 From: Jeff Hykin Date: Wed, 18 Feb 2026 15:48:27 -0600 Subject: [PATCH 33/45] Update bin/ci-fast Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com> --- bin/ci-fast | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/bin/ci-fast b/bin/ci-fast index 809718cec5..0db904163f 100755 --- a/bin/ci-fast +++ b/bin/ci-fast @@ -15,7 +15,8 @@ echo "Running pre-commit checks" time pre-commit run --all-files echo "Running mypy checks" -time uv run mypy --python-version 3.10 --python-version 3.12 dimos +time uv run mypy --python-version 3.10 dimos +time uv run mypy --python-version 3.12 dimos echo "# " echo "# " From f25e558f6cb2238ef9e7d55e811f38b1ccd49847 Mon Sep 17 00:00:00 2001 From: Jeff Hykin Date: Wed, 18 Feb 2026 15:48:36 -0600 Subject: [PATCH 34/45] Update .github/workflows/fast-docs.yml Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com> --- .github/workflows/fast-docs.yml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/.github/workflows/fast-docs.yml b/.github/workflows/fast-docs.yml index f7680c7f37..cdfb51ba48 100644 --- a/.github/workflows/fast-docs.yml +++ b/.github/workflows/fast-docs.yml @@ -2,8 +2,7 @@ name: docs on: pull_request: - branches: - - master + - main - dev paths: - 'docs/**' From f16bbbb25792dc7e3a463a519f664d0b2a525b4c Mon Sep 17 00:00:00 2001 From: Jeff Hykin Date: Wed, 18 Feb 2026 15:49:04 -0600 Subject: [PATCH 35/45] add arm --- .github/workflows/fast-test.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/fast-test.yml b/.github/workflows/fast-test.yml index 8eae743a17..f330e62b9a 100644 --- a/.github/workflows/fast-test.yml +++ b/.github/workflows/fast-test.yml @@ -21,7 +21,7 @@ jobs: pytest_fast: strategy: matrix: - os: [ubuntu-24.04, macos-15] + os: [ubuntu-24.04, macos-15, ubuntu-24.04-arm] runs-on: ${{ matrix.os }} steps: From b7d8c53ed3caa7e45a08f1e9a9d4a313d69b9c07 Mon Sep 17 00:00:00 2001 From: Jeff Hykin Date: Wed, 18 Feb 2026 15:49:14 -0600 Subject: [PATCH 36/45] add exit --- bin/pr-name-check | 1 + 1 file changed, 1 insertion(+) diff --git a/bin/pr-name-check b/bin/pr-name-check index 2590c57109..d7b87f8be8 100755 --- a/bin/pr-name-check +++ b/bin/pr-name-check @@ -62,6 +62,7 @@ if [[ "$name_ok" -ne 1 || "$type_ok" -ne 1 ]]; then sleep 1; echo 3 sleep 1; echo 2 sleep 1; echo 1 + exit 1 else echo "Branch naming check passed: $branch" fi From df31c5da928849bddf602b0c0ec2f8487bf7f230 Mon Sep 17 00:00:00 2001 From: Jeff Hykin Date: Wed, 18 Feb 2026 16:00:01 -0600 Subject: [PATCH 37/45] 1 --- bin/pr-check | 44 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) diff --git a/bin/pr-check b/bin/pr-check index 277717c735..bf22ac4f2f 100755 --- a/bin/pr-check +++ b/bin/pr-check @@ -1,8 +1,52 @@ #!/usr/bin/env bash +set -euo pipefail + REPO_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" cd "$REPO_ROOT" bin/pr-name-check +if git show-ref --verify --quiet refs/heads/dev; then + base_ref="dev" +elif git show-ref --verify --quiet refs/remotes/origin/dev; then + base_ref="origin/dev" +else + echo "Could not find 'dev' or 'origin/dev' to compare changes against." + exit 1 +fi + +declare -A changed_files_map=() + +while IFS= read -r file; do + [[ -n "$file" ]] && changed_files_map["$file"]=1 +done < <(git diff --name-only "$base_ref...HEAD") + +while IFS= read -r file; do + [[ -n "$file" ]] && changed_files_map["$file"]=1 +done < <(git diff --name-only) + +while IFS= read -r file; do + [[ -n "$file" ]] && changed_files_map["$file"]=1 +done < <(git diff --name-only --cached) + +while IFS= read -r file; do + [[ -n "$file" ]] && changed_files_map["$file"]=1 +done < <(git ls-files --others --exclude-standard) + +if [[ "${#changed_files_map[@]}" -gt 0 ]]; then + all_md=1 + for file in "${!changed_files_map[@]}"; do + if [[ "$file" != *.md ]]; then + all_md=0 + break + fi + done + + if [[ "$all_md" -eq 1 ]]; then + echo "All detected changes are Markdown files; skipping bin/ci-fast." + exit 0 + fi +fi + bin/ci-fast From f53370820fd83455a7bd98f7a80dd23fd645ec69 Mon Sep 17 00:00:00 2001 From: Jeff Hykin Date: Wed, 18 Feb 2026 16:05:29 -0600 Subject: [PATCH 38/45] convert to python for docs-only check --- bin/pr-check | 151 +++++++++++++++++++++++++++++++++------------------ 1 file changed, 99 insertions(+), 52 deletions(-) diff --git a/bin/pr-check b/bin/pr-check index bf22ac4f2f..08eded0ba8 100755 --- a/bin/pr-check +++ b/bin/pr-check @@ -1,52 +1,99 @@ -#!/usr/bin/env bash - -set -euo pipefail - -REPO_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" -cd "$REPO_ROOT" - -bin/pr-name-check - -if git show-ref --verify --quiet refs/heads/dev; then - base_ref="dev" -elif git show-ref --verify --quiet refs/remotes/origin/dev; then - base_ref="origin/dev" -else - echo "Could not find 'dev' or 'origin/dev' to compare changes against." - exit 1 -fi - -declare -A changed_files_map=() - -while IFS= read -r file; do - [[ -n "$file" ]] && changed_files_map["$file"]=1 -done < <(git diff --name-only "$base_ref...HEAD") - -while IFS= read -r file; do - [[ -n "$file" ]] && changed_files_map["$file"]=1 -done < <(git diff --name-only) - -while IFS= read -r file; do - [[ -n "$file" ]] && changed_files_map["$file"]=1 -done < <(git diff --name-only --cached) - -while IFS= read -r file; do - [[ -n "$file" ]] && changed_files_map["$file"]=1 -done < <(git ls-files --others --exclude-standard) - -if [[ "${#changed_files_map[@]}" -gt 0 ]]; then - all_md=1 - for file in "${!changed_files_map[@]}"; do - if [[ "$file" != *.md ]]; then - all_md=0 - break - fi - done - - if [[ "$all_md" -eq 1 ]]; then - echo "All detected changes are Markdown files; skipping bin/ci-fast." - exit 0 - fi -fi - -bin/ci-fast +#!/usr/bin/env python3 + +from __future__ import annotations + +import os +from pathlib import Path +import subprocess + +repo_root = Path(__file__).resolve().parent.parent +os.chdir(repo_root) + + +def main() -> int: + # 1. name check + subprocess.run(["bin/pr-name-check"], check=True, text=True) + + # 2. check if only markdown changes + changed_files = get_changed_files() + for each in changed_files: + print(f"Changed file: {each}") + if all(changed_file.endswith(".md") for changed_file in changed_files): + print("All detected changes are Markdown files; just running doc tests.") + subprocess.run( + ["python", "-m", "dimos.utils.docs.doclinks", "docs/"], check=True, text=True + ) + return 0 + + # 3. run ci checks (uv install, mypy, ruff, pytest) + return subprocess.run(["bin/ci-fast"], text=True).returncode + + +def get_changed_files() -> set[str]: + def has_ref(ref: str) -> bool: + result = subprocess.run( + ["git", "show-ref", "--verify", "--quiet", ref], + text=True, + capture_output=True, + ) + return result.returncode == 0 + + if has_ref("refs/heads/dev"): + base_ref = "dev" + elif has_ref("refs/remotes/origin/dev"): + base_ref = "origin/dev" + else: + print("Could not find 'dev' or 'origin/dev' to compare changes against.") + raise SystemExit(1) + + changed_files: set[str] = set() + changed_files.update( + [ + line + for line in subprocess.run( + ["git", "diff", "--name-only", f"{base_ref}...HEAD"], + check=True, + text=True, + capture_output=True, + ).stdout.splitlines() + if line.strip() + ] + ) + changed_files.update( + [ + line + for line in subprocess.run( + ["git", "diff", "--name-only"], check=True, text=True, capture_output=True + ).stdout.splitlines() + if line.strip() + ] + ) + changed_files.update( + [ + line + for line in subprocess.run( + ["git", "diff", "--name-only", "--cached"], + check=True, + text=True, + capture_output=True, + ).stdout.splitlines() + if line.strip() + ] + ) + changed_files.update( + [ + line + for line in subprocess.run( + ["git", "ls-files", "--others", "--exclude-standard"], + check=True, + text=True, + capture_output=True, + ).stdout.splitlines() + if line.strip() + ] + ) + return changed_files + + +if __name__ == "__main__": + raise SystemExit(main()) From 26e7f54aed9ef5207bb1f9bf48898e4e9b21d266 Mon Sep 17 00:00:00 2001 From: Jeff Hykin Date: Wed, 18 Feb 2026 16:16:18 -0600 Subject: [PATCH 39/45] fix greptile change --- .github/workflows/fast-docs.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/fast-docs.yml b/.github/workflows/fast-docs.yml index cdfb51ba48..eb4d61a4d7 100644 --- a/.github/workflows/fast-docs.yml +++ b/.github/workflows/fast-docs.yml @@ -4,7 +4,7 @@ on: pull_request: - main - dev - paths: + paths: - 'docs/**' workflow_dispatch: From 85fa19c7c8c3835b40b19e6e0729bc7943cfce40 Mon Sep 17 00:00:00 2001 From: Jeff Hykin Date: Wed, 18 Feb 2026 16:21:07 -0600 Subject: [PATCH 40/45] fix good catch by CI for python 3.10 issue with lock file --- pyproject.toml | 3 +- uv.lock | 112 +++++++++++++++++++++++++++++++++++++++++++++---- 2 files changed, 106 insertions(+), 9 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index dca8b588f9..6a3c6a6d83 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -191,7 +191,8 @@ manipulation = [ cpu = [ # CPU inference backends - "onnxruntime", + "onnxruntime<1.24; python_version < '3.11'", + "onnxruntime; python_version >= '3.11'", "ctransformers==0.2.27", ] diff --git a/uv.lock b/uv.lock index bb2f4fad81..2baca397f1 100644 --- a/uv.lock +++ b/uv.lock @@ -861,7 +861,8 @@ dependencies = [ { name = "mmh3" }, { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, - { name = "onnxruntime" }, + { name = "onnxruntime", version = "1.23.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, + { name = "onnxruntime", version = "1.24.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, { name = "opentelemetry-api" }, { name = "opentelemetry-exporter-otlp-proto-grpc" }, { name = "opentelemetry-sdk" }, @@ -1161,6 +1162,18 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6", size = 25335, upload-time = "2022-10-25T02:36:20.889Z" }, ] +[[package]] +name = "coloredlogs" +version = "15.0.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "humanfriendly", marker = "python_full_version < '3.11'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/cc/c7/eed8f27100517e8c0e6b923d5f0845d0cb99763da6fdee00478f91db7325/coloredlogs-15.0.1.tar.gz", hash = "sha256:7c991aa71a4577af2f82600d8f8f3a89f936baeaf9b50a9c197da014e5bf16b0", size = 278520, upload-time = "2021-06-11T10:22:45.202Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a7/06/3d6badcf13db419e25b07041d9c7b4a2c331d3f4e7134445ec5df57714cd/coloredlogs-15.0.1-py2.py3-none-any.whl", hash = "sha256:612ee75c546f53e92e70049c9dbfcc18c935a2b9a53b66085ce9ef6a6e5c0934", size = 46018, upload-time = "2021-06-11T10:22:42.561Z" }, +] + [[package]] name = "colorlog" version = "6.9.0" @@ -1832,7 +1845,8 @@ base = [ ] cpu = [ { name = "ctransformers" }, - { name = "onnxruntime" }, + { name = "onnxruntime", version = "1.23.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, + { name = "onnxruntime", version = "1.24.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, ] cuda = [ { name = "ctransformers", extra = ["cuda"] }, @@ -2104,7 +2118,8 @@ requires-dist = [ { name = "ollama", marker = "extra == 'agents'", specifier = ">=0.6.0" }, { name = "omegaconf", marker = "extra == 'perception'", specifier = ">=2.3.0" }, { name = "onnx", marker = "extra == 'misc'" }, - { name = "onnxruntime", marker = "extra == 'cpu'" }, + { name = "onnxruntime", marker = "python_full_version >= '3.11' and extra == 'cpu'" }, + { name = "onnxruntime", marker = "python_full_version < '3.11' and extra == 'cpu'", specifier = "<1.24" }, { name = "onnxruntime-gpu", marker = "platform_machine == 'x86_64' and extra == 'cuda'", specifier = ">=1.17.1" }, { name = "open-clip-torch", marker = "extra == 'misc'", specifier = "==3.2.0" }, { name = "open3d", marker = "platform_machine != 'aarch64' or sys_platform != 'linux'", specifier = ">=0.18.0" }, @@ -3238,6 +3253,18 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/a8/af/48ac8483240de756d2438c380746e7130d1c6f75802ef22f3c6d49982787/huggingface_hub-0.36.2-py3-none-any.whl", hash = "sha256:48f0c8eac16145dfce371e9d2d7772854a4f591bcb56c9cf548accf531d54270", size = 566395, upload-time = "2026-02-06T09:24:11.133Z" }, ] +[[package]] +name = "humanfriendly" +version = "10.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "pyreadline3", marker = "python_full_version < '3.11' and sys_platform == 'win32'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/cc/3f/2c29224acb2e2df4d2046e4c73ee2662023c58ff5b113c4c1adac0886c43/humanfriendly-10.0.tar.gz", hash = "sha256:6b0b831ce8f15f7300721aa49829fc4e83921a9a301cc7f606be6686a2288ddc", size = 360702, upload-time = "2021-09-17T21:40:43.31Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f0/0f/310fb31e39e2d734ccaa2c0fb981ee41f7bd5056ce9bc29b2248bd569169/humanfriendly-10.0-py2.py3-none-any.whl", hash = "sha256:1697e1a8a8f550fd43c2865cd84542fc175a61dcb779b6fee18cf6b6ccba1477", size = 86794, upload-time = "2021-09-17T21:40:39.897Z" }, +] + [[package]] name = "humanize" version = "4.15.0" @@ -5999,15 +6026,75 @@ wheels = [ [[package]] name = "onnxruntime" -version = "1.24.1" +version = "1.23.2" source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version < '3.11' and sys_platform == 'darwin'", + "python_full_version < '3.11' and platform_machine == 'aarch64' and sys_platform == 'linux'", + "python_full_version < '3.11' and sys_platform == 'win32'", + "(python_full_version < '3.11' and platform_machine != 'aarch64' and sys_platform == 'linux') or (python_full_version < '3.11' and sys_platform != 'darwin' and sys_platform != 'linux' and sys_platform != 'win32')", +] dependencies = [ - { name = "flatbuffers" }, + { name = "coloredlogs", marker = "python_full_version < '3.11'" }, + { name = "flatbuffers", marker = "python_full_version < '3.11'" }, { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, + { name = "packaging", marker = "python_full_version < '3.11'" }, + { name = "protobuf", marker = "python_full_version < '3.11'" }, + { name = "sympy", marker = "python_full_version < '3.11'" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/35/d6/311b1afea060015b56c742f3531168c1644650767f27ef40062569960587/onnxruntime-1.23.2-cp310-cp310-macosx_13_0_arm64.whl", hash = "sha256:a7730122afe186a784660f6ec5807138bf9d792fa1df76556b27307ea9ebcbe3", size = 17195934, upload-time = "2025-10-27T23:06:14.143Z" }, + { url = "https://files.pythonhosted.org/packages/db/db/81bf3d7cecfbfed9092b6b4052e857a769d62ed90561b410014e0aae18db/onnxruntime-1.23.2-cp310-cp310-macosx_13_0_x86_64.whl", hash = "sha256:b28740f4ecef1738ea8f807461dd541b8287d5650b5be33bca7b474e3cbd1f36", size = 19153079, upload-time = "2025-10-27T23:05:57.686Z" }, + { url = "https://files.pythonhosted.org/packages/2e/4d/a382452b17cf70a2313153c520ea4c96ab670c996cb3a95cc5d5ac7bfdac/onnxruntime-1.23.2-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8f7d1fe034090a1e371b7f3ca9d3ccae2fabae8c1d8844fb7371d1ea38e8e8d2", size = 15219883, upload-time = "2025-10-22T03:46:21.66Z" }, + { url = "https://files.pythonhosted.org/packages/fb/56/179bf90679984c85b417664c26aae4f427cba7514bd2d65c43b181b7b08b/onnxruntime-1.23.2-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4ca88747e708e5c67337b0f65eed4b7d0dd70d22ac332038c9fc4635760018f7", size = 17370357, upload-time = "2025-10-22T03:46:57.968Z" }, + { url = "https://files.pythonhosted.org/packages/cd/6d/738e50c47c2fd285b1e6c8083f15dac1a5f6199213378a5f14092497296d/onnxruntime-1.23.2-cp310-cp310-win_amd64.whl", hash = "sha256:0be6a37a45e6719db5120e9986fcd30ea205ac8103fd1fb74b6c33348327a0cc", size = 13467651, upload-time = "2025-10-27T23:06:11.904Z" }, + { url = "https://files.pythonhosted.org/packages/44/be/467b00f09061572f022ffd17e49e49e5a7a789056bad95b54dfd3bee73ff/onnxruntime-1.23.2-cp311-cp311-macosx_13_0_arm64.whl", hash = "sha256:6f91d2c9b0965e86827a5ba01531d5b669770b01775b23199565d6c1f136616c", size = 17196113, upload-time = "2025-10-22T03:47:33.526Z" }, + { url = "https://files.pythonhosted.org/packages/9f/a8/3c23a8f75f93122d2b3410bfb74d06d0f8da4ac663185f91866b03f7da1b/onnxruntime-1.23.2-cp311-cp311-macosx_13_0_x86_64.whl", hash = "sha256:87d8b6eaf0fbeb6835a60a4265fde7a3b60157cf1b2764773ac47237b4d48612", size = 19153857, upload-time = "2025-10-22T03:46:37.578Z" }, + { url = "https://files.pythonhosted.org/packages/3f/d8/506eed9af03d86f8db4880a4c47cd0dffee973ef7e4f4cff9f1d4bcf7d22/onnxruntime-1.23.2-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:bbfd2fca76c855317568c1b36a885ddea2272c13cb0e395002c402f2360429a6", size = 15220095, upload-time = "2025-10-22T03:46:24.769Z" }, + { url = "https://files.pythonhosted.org/packages/e9/80/113381ba832d5e777accedc6cb41d10f9eca82321ae31ebb6bcede530cea/onnxruntime-1.23.2-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:da44b99206e77734c5819aa2142c69e64f3b46edc3bd314f6a45a932defc0b3e", size = 17372080, upload-time = "2025-10-22T03:47:00.265Z" }, + { url = "https://files.pythonhosted.org/packages/3a/db/1b4a62e23183a0c3fe441782462c0ede9a2a65c6bbffb9582fab7c7a0d38/onnxruntime-1.23.2-cp311-cp311-win_amd64.whl", hash = "sha256:902c756d8b633ce0dedd889b7c08459433fbcf35e9c38d1c03ddc020f0648c6e", size = 13468349, upload-time = "2025-10-22T03:47:25.783Z" }, + { url = "https://files.pythonhosted.org/packages/1b/9e/f748cd64161213adeef83d0cb16cb8ace1e62fa501033acdd9f9341fff57/onnxruntime-1.23.2-cp312-cp312-macosx_13_0_arm64.whl", hash = "sha256:b8f029a6b98d3cf5be564d52802bb50a8489ab73409fa9db0bf583eabb7c2321", size = 17195929, upload-time = "2025-10-22T03:47:36.24Z" }, + { url = "https://files.pythonhosted.org/packages/91/9d/a81aafd899b900101988ead7fb14974c8a58695338ab6a0f3d6b0100f30b/onnxruntime-1.23.2-cp312-cp312-macosx_13_0_x86_64.whl", hash = "sha256:218295a8acae83905f6f1aed8cacb8e3eb3bd7513a13fe4ba3b2664a19fc4a6b", size = 19157705, upload-time = "2025-10-22T03:46:40.415Z" }, + { url = "https://files.pythonhosted.org/packages/3c/35/4e40f2fba272a6698d62be2cd21ddc3675edfc1a4b9ddefcc4648f115315/onnxruntime-1.23.2-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:76ff670550dc23e58ea9bc53b5149b99a44e63b34b524f7b8547469aaa0dcb8c", size = 15226915, upload-time = "2025-10-22T03:46:27.773Z" }, + { url = "https://files.pythonhosted.org/packages/ef/88/9cc25d2bafe6bc0d4d3c1db3ade98196d5b355c0b273e6a5dc09c5d5d0d5/onnxruntime-1.23.2-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0f9b4ae77f8e3c9bee50c27bc1beede83f786fe1d52e99ac85aa8d65a01e9b77", size = 17382649, upload-time = "2025-10-22T03:47:02.782Z" }, + { url = "https://files.pythonhosted.org/packages/c0/b4/569d298f9fc4d286c11c45e85d9ffa9e877af12ace98af8cab52396e8f46/onnxruntime-1.23.2-cp312-cp312-win_amd64.whl", hash = "sha256:25de5214923ce941a3523739d34a520aac30f21e631de53bba9174dc9c004435", size = 13470528, upload-time = "2025-10-22T03:47:28.106Z" }, + { url = "https://files.pythonhosted.org/packages/3d/41/fba0cabccecefe4a1b5fc8020c44febb334637f133acefc7ec492029dd2c/onnxruntime-1.23.2-cp313-cp313-macosx_13_0_arm64.whl", hash = "sha256:2ff531ad8496281b4297f32b83b01cdd719617e2351ffe0dba5684fb283afa1f", size = 17196337, upload-time = "2025-10-22T03:46:35.168Z" }, + { url = "https://files.pythonhosted.org/packages/fe/f9/2d49ca491c6a986acce9f1d1d5fc2099108958cc1710c28e89a032c9cfe9/onnxruntime-1.23.2-cp313-cp313-macosx_13_0_x86_64.whl", hash = "sha256:162f4ca894ec3de1a6fd53589e511e06ecdc3ff646849b62a9da7489dee9ce95", size = 19157691, upload-time = "2025-10-22T03:46:43.518Z" }, + { url = "https://files.pythonhosted.org/packages/1c/a1/428ee29c6eaf09a6f6be56f836213f104618fb35ac6cc586ff0f477263eb/onnxruntime-1.23.2-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:45d127d6e1e9b99d1ebeae9bcd8f98617a812f53f46699eafeb976275744826b", size = 15226898, upload-time = "2025-10-22T03:46:30.039Z" }, + { url = "https://files.pythonhosted.org/packages/f2/2b/b57c8a2466a3126dbe0a792f56ad7290949b02f47b86216cd47d857e4b77/onnxruntime-1.23.2-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8bace4e0d46480fbeeb7bbe1ffe1f080e6663a42d1086ff95c1551f2d39e7872", size = 17382518, upload-time = "2025-10-22T03:47:05.407Z" }, + { url = "https://files.pythonhosted.org/packages/4a/93/aba75358133b3a941d736816dd392f687e7eab77215a6e429879080b76b6/onnxruntime-1.23.2-cp313-cp313-win_amd64.whl", hash = "sha256:1f9cc0a55349c584f083c1c076e611a7c35d5b867d5d6e6d6c823bf821978088", size = 13470276, upload-time = "2025-10-22T03:47:31.193Z" }, + { url = "https://files.pythonhosted.org/packages/7c/3d/6830fa61c69ca8e905f237001dbfc01689a4e4ab06147020a4518318881f/onnxruntime-1.23.2-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9d2385e774f46ac38f02b3a91a91e30263d41b2f1f4f26ae34805b2a9ddef466", size = 15229610, upload-time = "2025-10-22T03:46:32.239Z" }, + { url = "https://files.pythonhosted.org/packages/b6/ca/862b1e7a639460f0ca25fd5b6135fb42cf9deea86d398a92e44dfda2279d/onnxruntime-1.23.2-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e2b9233c4947907fd1818d0e581c049c41ccc39b2856cc942ff6d26317cee145", size = 17394184, upload-time = "2025-10-22T03:47:08.127Z" }, +] + +[[package]] +name = "onnxruntime" +version = "1.24.1" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.14' and sys_platform == 'darwin'", + "python_full_version == '3.13.*' and sys_platform == 'darwin'", + "python_full_version == '3.12.*' and sys_platform == 'darwin'", + "python_full_version >= '3.14' and platform_machine == 'aarch64' and sys_platform == 'linux'", + "python_full_version == '3.13.*' and platform_machine == 'aarch64' and sys_platform == 'linux'", + "python_full_version == '3.12.*' and platform_machine == 'aarch64' and sys_platform == 'linux'", + "python_full_version >= '3.14' and sys_platform == 'win32'", + "python_full_version == '3.13.*' and sys_platform == 'win32'", + "(python_full_version >= '3.14' and platform_machine != 'aarch64' and sys_platform == 'linux') or (python_full_version >= '3.14' and sys_platform != 'darwin' and sys_platform != 'linux' and sys_platform != 'win32')", + "(python_full_version == '3.13.*' and platform_machine != 'aarch64' and sys_platform == 'linux') or (python_full_version == '3.13.*' and sys_platform != 'darwin' and sys_platform != 'linux' and sys_platform != 'win32')", + "python_full_version == '3.12.*' and sys_platform == 'win32'", + "(python_full_version == '3.12.*' and platform_machine != 'aarch64' and sys_platform == 'linux') or (python_full_version == '3.12.*' and sys_platform != 'darwin' and sys_platform != 'linux' and sys_platform != 'win32')", + "python_full_version == '3.11.*' and sys_platform == 'darwin'", + "python_full_version == '3.11.*' and platform_machine == 'aarch64' and sys_platform == 'linux'", + "python_full_version == '3.11.*' and sys_platform == 'win32'", + "(python_full_version == '3.11.*' and platform_machine != 'aarch64' and sys_platform == 'linux') or (python_full_version == '3.11.*' and sys_platform != 'darwin' and sys_platform != 'linux' and sys_platform != 'win32')", +] +dependencies = [ + { name = "flatbuffers", marker = "python_full_version >= '3.11'" }, { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, - { name = "packaging" }, - { name = "protobuf" }, - { name = "sympy" }, + { name = "packaging", marker = "python_full_version >= '3.11'" }, + { name = "protobuf", marker = "python_full_version >= '3.11'" }, + { name = "sympy", marker = "python_full_version >= '3.11'" }, ] wheels = [ { url = "https://files.pythonhosted.org/packages/d2/88/d9757c62a0f96b5193f8d447a141eefd14498c404cc5caf1a6f3233cf102/onnxruntime-1.24.1-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:79b3119ab9f4f3817062e6dbe7f4a44937de93905e3a31ba34313d18cb49e7be", size = 17212018, upload-time = "2026-02-05T17:32:13.986Z" }, @@ -7881,6 +7968,15 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/49/b3/d8482e8cacc8ea15a356efea13d22ce1c5914a9ee36622ba250523240bf2/pyquaternion-0.9.9-py3-none-any.whl", hash = "sha256:e65f6e3f7b1fdf1a9e23f82434334a1ae84f14223eee835190cd2e841f8172ec", size = 14361, upload-time = "2020-10-05T01:31:37.575Z" }, ] +[[package]] +name = "pyreadline3" +version = "3.5.4" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/0f/49/4cea918a08f02817aabae639e3d0ac046fef9f9180518a3ad394e22da148/pyreadline3-3.5.4.tar.gz", hash = "sha256:8d57d53039a1c75adba8e50dd3d992b28143480816187ea5efbd5c78e6c885b7", size = 99839, upload-time = "2024-09-19T02:40:10.062Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/5a/dc/491b7661614ab97483abf2056be1deee4dc2490ecbf7bff9ab5cdbac86e1/pyreadline3-3.5.4-py3-none-any.whl", hash = "sha256:eaf8e6cc3c49bcccf145fc6067ba8643d1df34d604a1ec0eccbf7a18e6d3fae6", size = 83178, upload-time = "2024-09-19T02:40:08.598Z" }, +] + [[package]] name = "pysocks" version = "1.7.1" From e0849db196813e43815d156229f90f0d6d0ecb7b Mon Sep 17 00:00:00 2001 From: Jeff Hykin Date: Wed, 18 Feb 2026 17:08:30 -0600 Subject: [PATCH 41/45] fixup minor aspects --- .github/workflows/docker.yml | 45 +++------------------------ .github/workflows/fast-docs.yml | 2 +- .github/workflows/fast-test.yml | 4 +-- bin/pr-check | 54 +++++++-------------------------- 4 files changed, 19 insertions(+), 86 deletions(-) diff --git a/.github/workflows/docker.yml b/.github/workflows/docker.yml index 03de5c3d15..cacfba5d14 100644 --- a/.github/workflows/docker.yml +++ b/.github/workflows/docker.yml @@ -212,7 +212,7 @@ jobs: uses: ./.github/workflows/tests.yml secrets: inherit with: - cmd: "pytest && pytest -m ros" # run tests that depend on ros as well + cmd: "uv run pytest && uv run pytest -m ros" # run tests that depend on ros as well dev-image: ros-dev:${{ (needs.check-changes.outputs.python == 'true' || needs.check-changes.outputs.dev == 'true' || needs.check-changes.outputs.ros == 'true') && needs.ros-dev.result == 'success' && needs.check-changes.outputs.branch-tag || 'dev' }} run-tests: @@ -227,7 +227,7 @@ jobs: uses: ./.github/workflows/tests.yml secrets: inherit with: - cmd: "pytest" + cmd: "uv run pytest" dev-image: dev:${{ (needs.check-changes.outputs.python == 'true' || needs.check-changes.outputs.dev == 'true') && needs.dev.result == 'success' && needs.check-changes.outputs.branch-tag || 'dev' }} # we run in parallel with normal tests for speed @@ -243,7 +243,7 @@ jobs: uses: ./.github/workflows/tests.yml secrets: inherit with: - cmd: "pytest -m heavy" + cmd: "uv run pytest -m heavy" dev-image: dev:${{ (needs.check-changes.outputs.python == 'true' || needs.check-changes.outputs.dev == 'true') && needs.dev.result == 'success' && needs.check-changes.outputs.branch-tag || 'dev' }} run-lcm-tests: @@ -258,7 +258,7 @@ jobs: uses: ./.github/workflows/tests.yml secrets: inherit with: - cmd: "pytest -m lcm" + cmd: "uv run pytest -m lcm" dev-image: dev:${{ (needs.check-changes.outputs.python == 'true' || needs.check-changes.outputs.dev == 'true') && needs.dev.result == 'success' && needs.check-changes.outputs.branch-tag || 'dev' }} run-integration-tests: @@ -273,7 +273,7 @@ jobs: uses: ./.github/workflows/tests.yml secrets: inherit with: - cmd: "pytest -m integration" + cmd: "uv run pytest -m integration" dev-image: dev:${{ (needs.check-changes.outputs.python == 'true' || needs.check-changes.outputs.dev == 'true') && needs.dev.result == 'success' && needs.check-changes.outputs.branch-tag || 'dev' }} run-mypy: @@ -292,41 +292,6 @@ jobs: cmd: "MYPYPATH=/opt/ros/humble/lib/python3.10/site-packages mypy dimos" dev-image: ros-dev:${{ (needs.check-changes.outputs.python == 'true' || needs.check-changes.outputs.dev == 'true' || needs.check-changes.outputs.ros == 'true') && needs.ros-dev.result == 'success' && needs.check-changes.outputs.branch-tag || 'dev' }} - # Run module tests directly to avoid pytest forking issues - # run-module-tests: - # needs: [check-changes, dev] - # if: ${{ - # always() && - # needs.check-changes.result == 'success' && - # ((needs.dev.result == 'success') || - # (needs.dev.result == 'skipped' && - # needs.check-changes.outputs.tests == 'true')) - # }} - # runs-on: [self-hosted, x64, 16gb] - # container: - # image: ghcr.io/dimensionalos/dev:${{ needs.check-changes.outputs.dev == 'true' && needs.dev.result == 'success' && needs.check-changes.outputs.branch-tag || 'dev' }} - # steps: - # - name: Fix permissions - # run: | - # sudo chown -R $USER:$USER ${{ github.workspace }} || true - # - # - uses: actions/checkout@v4 - # with: - # lfs: true - # - # - name: Configure Git LFS - # run: | - # git config --global --add safe.directory '*' - # git lfs install - # git lfs fetch - # git lfs checkout - # - # - name: Run module tests - # env: - # CI: "true" - # run: | - # /entrypoint.sh bash -c "pytest -m module" - ci-complete: needs: [check-changes, ros, python, ros-python, dev, ros-dev, run-tests, run-heavy-tests, run-lcm-tests, run-integration-tests, run-ros-tests, run-mypy] runs-on: [self-hosted, Linux] diff --git a/.github/workflows/fast-docs.yml b/.github/workflows/fast-docs.yml index eb4d61a4d7..36a3c11d1c 100644 --- a/.github/workflows/fast-docs.yml +++ b/.github/workflows/fast-docs.yml @@ -13,7 +13,7 @@ permissions: jobs: check_links: - runs-on: ubuntu-24.04 + runs-on: [self-hosted, Linux] steps: - uses: actions/checkout@v4 diff --git a/.github/workflows/fast-test.yml b/.github/workflows/fast-test.yml index 8134e1b310..82c7b96430 100644 --- a/.github/workflows/fast-test.yml +++ b/.github/workflows/fast-test.yml @@ -30,8 +30,8 @@ jobs: uses: astral-sh/setup-uv@v4 with: enable-cache: true - python-version: "3.12" - cache-suffix: ${{ runner.os }}-${{ runner.arch }}-py3.12 + python-version: "3.10" + cache-suffix: ${{ runner.os }}-${{ runner.arch }}-py3.10 - name: Install System dependencies run: | diff --git a/bin/pr-check b/bin/pr-check index 08eded0ba8..19bcf2a48a 100755 --- a/bin/pr-check +++ b/bin/pr-check @@ -11,8 +11,8 @@ os.chdir(repo_root) def main() -> int: - # 1. name check - subprocess.run(["bin/pr-name-check"], check=True, text=True) + # 1. name check (Note: doesn't throw even on fail) + subprocess.run(["bin/pr-name-check"], check=False, text=True) # 2. check if only markdown changes changed_files = get_changed_files() @@ -46,52 +46,20 @@ def get_changed_files() -> set[str]: print("Could not find 'dev' or 'origin/dev' to compare changes against.") raise SystemExit(1) - changed_files: set[str] = set() - changed_files.update( - [ - line - for line in subprocess.run( - ["git", "diff", "--name-only", f"{base_ref}...HEAD"], - check=True, - text=True, - capture_output=True, - ).stdout.splitlines() - if line.strip() - ] - ) - changed_files.update( - [ - line - for line in subprocess.run( - ["git", "diff", "--name-only"], check=True, text=True, capture_output=True - ).stdout.splitlines() - if line.strip() - ] - ) - changed_files.update( - [ + def run_lines(cmd: list[str]) -> list[str]: + return [ line for line in subprocess.run( - ["git", "diff", "--name-only", "--cached"], - check=True, - text=True, - capture_output=True, + cmd, check=True, text=True, capture_output=True ).stdout.splitlines() if line.strip() ] - ) - changed_files.update( - [ - line - for line in subprocess.run( - ["git", "ls-files", "--others", "--exclude-standard"], - check=True, - text=True, - capture_output=True, - ).stdout.splitlines() - if line.strip() - ] - ) + + changed_files: set[str] = set() + changed_files.update(run_lines(["git", "diff", "--name-only", f"{base_ref}...HEAD"])) + changed_files.update(run_lines(["git", "diff", "--name-only"])) + changed_files.update(run_lines(["git", "diff", "--name-only", "--cached"])) + changed_files.update(run_lines(["git", "ls-files", "--others", "--exclude-standard"])) return changed_files From 1be6ecfa4a732b7acc735dfca48f074520486061 Mon Sep 17 00:00:00 2001 From: Jeff Hykin Date: Wed, 18 Feb 2026 17:38:41 -0600 Subject: [PATCH 42/45] only install brew if needed --- .github/workflows/fast-docs.yml | 9 +++++---- .github/workflows/fast-test.yml | 12 ++++++------ docs/development/README.md | 4 ++-- 3 files changed, 13 insertions(+), 12 deletions(-) diff --git a/.github/workflows/fast-docs.yml b/.github/workflows/fast-docs.yml index 36a3c11d1c..0bb7802020 100644 --- a/.github/workflows/fast-docs.yml +++ b/.github/workflows/fast-docs.yml @@ -2,10 +2,11 @@ name: docs on: pull_request: - - main - - dev - paths: - - 'docs/**' + branches: + - main + - dev + paths: + - 'docs/**' workflow_dispatch: permissions: diff --git a/.github/workflows/fast-test.yml b/.github/workflows/fast-test.yml index 82c7b96430..09cc8c611f 100644 --- a/.github/workflows/fast-test.yml +++ b/.github/workflows/fast-test.yml @@ -37,14 +37,14 @@ jobs: run: | # these lines should stay exactly in sync with docs/development/README.md if [ "$OSTYPE" = "linux-gnu" ]; then - sudo apt-get update - sudo apt-get install -y curl g++ portaudio19-dev git-lfs libturbojpeg python3-dev pre-commit + sudo apt-get update + sudo apt-get install -y curl g++ portaudio19-dev git-lfs libturbojpeg python3-dev pre-commit # On macOS (12.6 or newer) elif [ "$(uname)" = "Darwin" ]; then - # install homebrew - /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" - # install dependencies - brew install gnu-sed gcc portaudio git-lfs libjpeg-turbo python pre-commit + # install homebrew if not installed + ! command -v brew && /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" + # install dependencies + brew install gnu-sed gcc portaudio git-lfs libjpeg-turbo python pre-commit fi - name: Install and run tests diff --git a/docs/development/README.md b/docs/development/README.md index c7d903e690..61e8ae5a65 100644 --- a/docs/development/README.md +++ b/docs/development/README.md @@ -32,8 +32,8 @@ if [ "$OSTYPE" = "linux-gnu" ]; then sudo apt-get install -y curl g++ portaudio19-dev git-lfs libturbojpeg python3-dev pre-commit # On macOS (12.6 or newer) elif [ "$(uname)" = "Darwin" ]; then - # install homebrew - /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" + # install homebrew if not installed + ! command -v brew && /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" # install dependencies brew install gnu-sed gcc portaudio git-lfs libjpeg-turbo python pre-commit fi From 214e7485a1d2504eccf6fa894c61c1909a50e33a Mon Sep 17 00:00:00 2001 From: Jeff Hykin Date: Wed, 18 Feb 2026 21:33:38 -0600 Subject: [PATCH 43/45] Update bin/pr-name-check Co-authored-by: Paul Nechifor --- bin/pr-name-check | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bin/pr-name-check b/bin/pr-name-check index d7b87f8be8..b82ce53e0a 100755 --- a/bin/pr-name-check +++ b/bin/pr-name-check @@ -6,7 +6,7 @@ branch="$(git rev-parse --abbrev-ref HEAD)" # based on: https://github.com/dimensionalOS/wiki/wiki allowed_types="feat fix chore refactor docs" -allowed_names="stash ivan pauln alexl mustafa miguel christie ruthwik jalaj yashas yash matt jing juan jeff unknown" +allowed_names="stash ivan paul alexl mustafa miguel christie ruthwik jalaj yashas yash matt jing juan jeff unknown" if [[ "$branch" != */*/* ]]; then echo "Invalid branch name: '$branch'" From 25aedba4da06071b344d3aafccef1048a995471a Mon Sep 17 00:00:00 2001 From: Jeff Hykin Date: Wed, 18 Feb 2026 21:34:29 -0600 Subject: [PATCH 44/45] Update bin/pr-name-check Co-authored-by: Paul Nechifor --- bin/pr-name-check | 1 + 1 file changed, 1 insertion(+) diff --git a/bin/pr-name-check b/bin/pr-name-check index b82ce53e0a..0f67e6172a 100755 --- a/bin/pr-name-check +++ b/bin/pr-name-check @@ -52,6 +52,7 @@ if [[ "$name_ok" -ne 1 || "$type_ok" -ne 1 ]]; then echo "Invalid branch name: '$branch'" echo echo " Expected format: //" + echo " Example: jeff/fix/ci-divergence" echo " Parsed name: $branch_name" echo " Allowed names: $allowed_names" echo " Parsed type: $branch_type" From 91b9a009ce36e2981d7461b665a6a3f57023f5c5 Mon Sep 17 00:00:00 2001 From: Jeff Hykin Date: Fri, 20 Feb 2026 11:38:25 -0600 Subject: [PATCH 45/45] - --- .github/workflows/docker.yml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/workflows/docker.yml b/.github/workflows/docker.yml index cacfba5d14..f21ca1d5ff 100644 --- a/.github/workflows/docker.yml +++ b/.github/workflows/docker.yml @@ -212,7 +212,7 @@ jobs: uses: ./.github/workflows/tests.yml secrets: inherit with: - cmd: "uv run pytest && uv run pytest -m ros" # run tests that depend on ros as well + cmd: ".venv/bin/pytest && .venv/bin/pytest -m ros" # run tests that depend on ros as well dev-image: ros-dev:${{ (needs.check-changes.outputs.python == 'true' || needs.check-changes.outputs.dev == 'true' || needs.check-changes.outputs.ros == 'true') && needs.ros-dev.result == 'success' && needs.check-changes.outputs.branch-tag || 'dev' }} run-tests: @@ -227,7 +227,7 @@ jobs: uses: ./.github/workflows/tests.yml secrets: inherit with: - cmd: "uv run pytest" + cmd: ".venv/bin/pytest" dev-image: dev:${{ (needs.check-changes.outputs.python == 'true' || needs.check-changes.outputs.dev == 'true') && needs.dev.result == 'success' && needs.check-changes.outputs.branch-tag || 'dev' }} # we run in parallel with normal tests for speed @@ -243,7 +243,7 @@ jobs: uses: ./.github/workflows/tests.yml secrets: inherit with: - cmd: "uv run pytest -m heavy" + cmd: ".venv/bin/pytest -m heavy" dev-image: dev:${{ (needs.check-changes.outputs.python == 'true' || needs.check-changes.outputs.dev == 'true') && needs.dev.result == 'success' && needs.check-changes.outputs.branch-tag || 'dev' }} run-lcm-tests: @@ -258,7 +258,7 @@ jobs: uses: ./.github/workflows/tests.yml secrets: inherit with: - cmd: "uv run pytest -m lcm" + cmd: ".venv/bin/pytest -m lcm" dev-image: dev:${{ (needs.check-changes.outputs.python == 'true' || needs.check-changes.outputs.dev == 'true') && needs.dev.result == 'success' && needs.check-changes.outputs.branch-tag || 'dev' }} run-integration-tests: @@ -273,7 +273,7 @@ jobs: uses: ./.github/workflows/tests.yml secrets: inherit with: - cmd: "uv run pytest -m integration" + cmd: ".venv/bin/pytest -m integration" dev-image: dev:${{ (needs.check-changes.outputs.python == 'true' || needs.check-changes.outputs.dev == 'true') && needs.dev.result == 'success' && needs.check-changes.outputs.branch-tag || 'dev' }} run-mypy: