From 96ec74e9a0549791b632155b5c7fd225f0b4ae51 Mon Sep 17 00:00:00 2001 From: TATP-233 Date: Fri, 23 Oct 2026 20:02:08 +0800 Subject: [PATCH 1/2] release: unilab 1.5.1 - Bump version 1.5.0 -> 1.5.1 in both package profiles and root lock entries - Add the bilingual 1.5.1 changelog section for DP FlashSAC/MPS, interruption, timing, and root-reset fixes - Validate locks, docs, Sphinx, make test-all, and distribution metadata --- docs/sphinx/source/changelog.md | 84 +++++++++++++++++++++++++++++++++ pyproject.rocm.toml | 2 +- pyproject.toml | 2 +- uv.lock | 2 +- uv.rocm.lock | 2 +- 5 files changed, 88 insertions(+), 4 deletions(-) diff --git a/docs/sphinx/source/changelog.md b/docs/sphinx/source/changelog.md index 2ff20d87d..9e3c2bdfe 100644 --- a/docs/sphinx/source/changelog.md +++ b/docs/sphinx/source/changelog.md @@ -13,6 +13,90 @@ UniLab 遵循[语义化版本](https://semver.org/)。本共享页面以中英 PyPI 版本变更与未发布变更;发布日期采用 PyPI 上传日期。完整提交历史请参阅 [UniLab 仓库](https://github.com/unilabsim/UniLab)。 +## 1.5.1 (2026-10-23) + +### Added / 新增 + +- FlashSAC data-parallel learners now capture and replay the whole update + cycle, including NCCL reductions, by default on supported compiled CUDA + execution. Runner synchronizer hooks coordinate capture and replay, a + packed loss-validity sentinel keeps optimizer and target updates rank + consistent, and DP capture failure fails closed instead of allowing one rank + to fall back to eager collectives. Set + `algo.algo_params.dp_whole_cycle_cuda_graph=false` to disable DP capture, or + `algo.algo_params.use_whole_cycle_cuda_graph=false` to disable capture on all + ranks. `training.dp_gradient_wire_dtype=bfloat16` additionally opts into + lossy BF16 communication for sufficiently large FP32 gradient groups; FP32 + remains the default and long-run convergence equivalence has not been + established + ([#2499](https://github.com/Motphys/UniLab/pull/2499)). + FlashSAC 数据并行 learner 在受支持的编译 CUDA 执行路径上,现在默认捕获并回放 + 包含 NCCL reduction 的完整 update cycle。Runner synchronizer hook 协调捕获与 + 回放;打包的 loss-validity sentinel 保证 optimizer 与 target update 在各 rank + 一致;DP 捕获失败会 fail closed,而不是允许单个 rank 回退到 eager collectives。 + 设置 `algo.algo_params.dp_whole_cycle_cuda_graph=false` 可关闭 DP 捕获; + `algo.algo_params.use_whole_cycle_cuda_graph=false` 可在所有 rank 关闭捕获。 + `training.dp_gradient_wire_dtype=bfloat16` 可额外为足够大的 FP32 gradient + group 选择有损 BF16 通信;FP32 仍为默认,且尚未证明长时间训练收敛等价 + ([#2499](https://github.com/Motphys/UniLab/pull/2499))。 + +### Changed / 变更 + +- Multi-GPU topology remains explicit and simple: omit + `CUDA_VISIBLE_DEVICES` for one rank, or provide one entry per selected GPU. + README now shows minimal two-GPU FlashSAC training and the manually managed + CUDA MPS flow. An explicit `training.cuda_process_sharing=mps` request + normalizes numeric GPU entries to host UUIDs before rank derivation and CUDA + initialization, so the documented per-GPU MPS launch no longer fails on the + second rank; `uni-cumps env` is reserved for external launchers + ([#2499](https://github.com/Motphys/UniLab/pull/2499), + [#2505](https://github.com/Motphys/UniLab/pull/2505)). + 多 GPU 拓扑保持显式且简单:省略 `CUDA_VISIBLE_DEVICES` 使用一个 rank;为每张 + 选择的 GPU 提供一个条目则启用对应 rank。README 现在展示最小双卡 FlashSAC + 训练和手动管理的 CUDA MPS 流程。显式 `training.cuda_process_sharing=mps` + 请求会在 rank 派生和 CUDA 初始化前把数字 GPU 条目规范化为主机 UUID,因此 + 文档中的 per-GPU MPS 启动不再在第二个 rank 失败;`uni-cumps env` 仅保留给 + 外部启动器使用([#2499](https://github.com/Motphys/UniLab/pull/2499)、 + [#2505](https://github.com/Motphys/UniLab/pull/2505))。 + +### Fixed / 修复 + +- PPO, APPO, SAC, and FlashSAC entrypoints now handle `Ctrl+C` cooperatively: + runner and collector cleanup finishes, the first interrupt returns shell + status `130` without a traceback, and a second interrupt forces termination. + Actual worker and rank failures remain loud + ([#2503](https://github.com/Motphys/UniLab/pull/2503)). + PPO、APPO、SAC 与 FlashSAC 入口现在协作处理 `Ctrl+C`:runner 与 collector + 清理完成后,第一次中断以 shell status `130` 退出且不输出 traceback;第二次 + 中断强制终止。真实的 worker/rank 失败仍会完整暴露 + ([#2503](https://github.com/Motphys/UniLab/pull/2503))。 +- The off-policy live terminal display now starts at the collector-ready + handshake, preventing learner compilation, CUDA graph capture, and collector + startup messages from interleaving with live redraws + ([#2507](https://github.com/Motphys/UniLab/pull/2507)). + off-policy live 终端显示现在延迟到 collector-ready handshake,避免 learner + 编译、CUDA graph 捕获和 collector 启动消息与 live 刷新交错 + ([#2507](https://github.com/Motphys/UniLab/pull/2507))。 +- Off-policy runners initialize the learner inference timer on every supported + device and record the effective `cuda_events` or synchronized wall-clock + implementation in the runtime manifest. This fixes macOS MPS SAC/FlashSAC + training failing at the first inference request + ([#2509](https://github.com/Motphys/UniLab/pull/2509)). + off-policy runner 会在每个受支持的 learner 设备上初始化推理计时器,并把实际 + 使用的 `cuda_events` 或同步 wall-clock 实现记录到 runtime manifest。该修复解决 + macOS MPS SAC/FlashSAC 训练在第一次推理请求时失败的问题 + ([#2509](https://github.com/Motphys/UniLab/pull/2509))。 +- Fused community 13-D root-state and motion-state resets now rotate world-frame + angular velocity into the generalized free-root/body frame before tensor + submission, while linear velocity remains world-frame. Rotated roots with + nonzero angular velocity therefore initialize the intended physical state + without reintroducing host-boundary work + ([#2513](https://github.com/Motphys/UniLab/pull/2513)). + 融合 community 13-D root-state 与 motion-state reset 现在会在 tensor 提交前把 + world-frame 角速度旋转到 generalized free-root/body frame,线速度仍保持 + world-frame。带非零角速度的旋转 root 因此能初始化为预期物理状态,且没有重新 + 引入 host-boundary 开销([#2513](https://github.com/Motphys/UniLab/pull/2513))。 + ## 1.5.0 (2026-10-22) ### Breaking changes / 破坏性变更 diff --git a/pyproject.rocm.toml b/pyproject.rocm.toml index 609eb043a..7433901ec 100644 --- a/pyproject.rocm.toml +++ b/pyproject.rocm.toml @@ -4,7 +4,7 @@ build-backend = "uv_build" [project] name = "unilab" -version = "1.5.0" +version = "1.5.1" description = "Universal Lab for Robot Learning" readme = "README.md" license = "Apache-2.0" diff --git a/pyproject.toml b/pyproject.toml index 2fd4d2ad0..21e0484a8 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -14,7 +14,7 @@ source-exclude = [ [project] name = "unilab" -version = "1.5.0" +version = "1.5.1" description = "Configurable, contract-driven robot learning across physics backends" readme = "README.md" license = "Apache-2.0" diff --git a/uv.lock b/uv.lock index 7c71d1ad3..b68ecadde 100644 --- a/uv.lock +++ b/uv.lock @@ -5155,7 +5155,7 @@ wheels = [ [[package]] name = "unilab" -version = "1.5.0" +version = "1.5.1" source = { editable = "." } dependencies = [ { name = "etils", version = "1.13.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, diff --git a/uv.rocm.lock b/uv.rocm.lock index 3eaaf43b9..cd0809b83 100644 --- a/uv.rocm.lock +++ b/uv.rocm.lock @@ -3709,7 +3709,7 @@ wheels = [ [[package]] name = "unilab" -version = "1.5.0" +version = "1.5.1" source = { editable = "." } dependencies = [ { name = "etils", version = "1.13.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, From d8b5b0d7f678e9eb164a32b4304c9bef052512ae Mon Sep 17 00:00:00 2001 From: tatp-yf Date: Sat, 24 Oct 2026 14:13:37 +0800 Subject: [PATCH 2/2] build(deps): bump unisim-core to 2.1.1 --- pyproject.rocm.toml | 4 +-- pyproject.toml | 6 ++--- uv.lock | 13 ++++++---- uv.rocm.lock | 59 ++++++++++++++++++++++++--------------------- 4 files changed, 44 insertions(+), 38 deletions(-) diff --git a/pyproject.rocm.toml b/pyproject.rocm.toml index 7433901ec..6ff905e47 100644 --- a/pyproject.rocm.toml +++ b/pyproject.rocm.toml @@ -23,7 +23,7 @@ classifiers = [ requires-python = ">=3.10,<3.14" dependencies = [ "numpy", - "unisim-core==2.1.0", + "unisim-core==2.1.1", "prettytable>=3.10", "torch==2.14.0", "triton-rocm==3.8.0 ; sys_platform == 'linux' and platform_machine == 'x86_64'", @@ -72,7 +72,7 @@ mujoco = [ "mujoco~=3.11.0", "mjbatch-uni~=0.2.5", ] -motrix = ["unisim-core[motrix]==2.1.0"] +motrix = ["unisim-core[motrix]==2.1.1"] [dependency-groups] # The RL stack (APPO/off-policy/multi-GPU) is merged into unilab itself diff --git a/pyproject.toml b/pyproject.toml index 21e0484a8..c2e991376 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -33,7 +33,7 @@ classifiers = [ requires-python = ">=3.10,<3.14" dependencies = [ "numpy", - "unisim-core==2.1.0", + "unisim-core==2.1.1", "prettytable>=3.10", # A range (not an exact pin) lets ROCm users substitute a ROCm torch # build; uv.lock pins the tested CUDA builds via tool.uv.sources. @@ -106,12 +106,12 @@ newton = [ "pyglet>=2.1.6,<3", "imgui-bundle>=1.92.0", ] -motrix = ["unisim-core[motrix]==2.1.0"] +motrix = ["unisim-core[motrix]==2.1.1"] genesis = ["genesis-world==1.3.3"] # Wheels are CPython 3.12/3.13 Linux x86_64 only; the marker keeps uv lock # resolvable for the other required-environments. superdex = [ - "unisim-core[superdex]==2.1.0 ; python_version >= '3.12' and sys_platform == 'linux' and platform_machine == 'x86_64'", + "unisim-core[superdex]==2.1.1 ; python_version >= '3.12' and sys_platform == 'linux' and platform_machine == 'x86_64'", ] [dependency-groups] diff --git a/uv.lock b/uv.lock index b68ecadde..3402bb6c2 100644 --- a/uv.lock +++ b/uv.lock @@ -5268,9 +5268,9 @@ requires-dist = [ { name = "tqdm" }, { name = "trimesh", specifier = ">=3.21.7" }, { name = "typing-extensions" }, - { name = "unisim-core", specifier = "==2.1.0" }, - { name = "unisim-core", extras = ["motrix"], marker = "extra == 'motrix'", specifier = "==2.1.0" }, - { name = "unisim-core", extras = ["superdex"], marker = "python_full_version >= '3.12' and platform_machine == 'x86_64' and sys_platform == 'linux' and extra == 'superdex'", specifier = "==2.1.0" }, + { name = "unisim-core", specifier = "==2.1.1" }, + { name = "unisim-core", extras = ["motrix"], marker = "extra == 'motrix'", specifier = "==2.1.1" }, + { name = "unisim-core", extras = ["superdex"], marker = "python_full_version >= '3.12' and platform_machine == 'x86_64' and sys_platform == 'linux' and extra == 'superdex'", specifier = "==2.1.1" }, { name = "viser", specifier = ">=1.0.26" }, { name = "wandb", specifier = ">=0.22.3" }, { name = "warp-lang", marker = "extra == 'mjwarp'", specifier = "==1.16.0" }, @@ -5289,13 +5289,16 @@ dev = [ [[package]] name = "unisim-core" -version = "2.1.0" +version = "2.1.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.4.4", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/8e/54/8bbfa4f671b4c26002983afeb88f24e548816de3ccb29112ac4b8ca9ae66/unisim_core-2.1.0.tar.gz", hash = "sha256:4353d0e01214954181a30b6e00442cf3f5e3bb45fba551cee2e6f35440db1d2d", size = 699562, upload-time = "2026-10-21T14:47:45.451Z" } +sdist = { url = "https://files.pythonhosted.org/packages/ae/dc/5c8b56a04996cc3f47767ac4c3c665c0eae131a188f1554525ff7514a9ed/unisim_core-2.1.1.tar.gz", hash = "sha256:f3c9bc2497b3ef85ec984cf38f8a8ce5cfd24b900db2734685575c5bb8cef2ed", size = 699580, upload-time = "2026-10-22T10:26:44.017Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/31/99/b532c452a8544eb508ff3b6009146aa24f44e09c5c43e63aaf46153b8490/unisim_core-2.1.1-py3-none-any.whl", hash = "sha256:fee2dcecb8ceb60ee2532a9e7d15f66daf1c1213d990fe4a607aef92130f6bf2", size = 746595, upload-time = "2026-10-22T10:26:42.255Z" }, +] [package.optional-dependencies] motrix = [ diff --git a/uv.rocm.lock b/uv.rocm.lock index cd0809b83..fcde2bf27 100644 --- a/uv.rocm.lock +++ b/uv.rocm.lock @@ -3,12 +3,12 @@ revision = 3 requires-python = ">=3.10, <3.14" resolution-markers = [ "python_full_version >= '3.13' and platform_machine == 'x86_64' and sys_platform == 'linux'", - "python_full_version == '3.12.*' and platform_machine == 'x86_64' and sys_platform == 'linux'", - "python_full_version == '3.11.*' and platform_machine == 'x86_64' and sys_platform == 'linux'", "(python_full_version >= '3.13' and platform_machine != 's390x' and platform_machine != 'x86_64') or (python_full_version >= '3.13' and platform_machine != 's390x' and sys_platform != 'linux')", - "(python_full_version == '3.12.*' and platform_machine != 's390x' and platform_machine != 'x86_64') or (python_full_version == '3.12.*' and platform_machine != 's390x' and sys_platform != 'linux')", "python_full_version >= '3.13' and platform_machine == 's390x'", + "python_full_version == '3.12.*' and platform_machine == 'x86_64' and sys_platform == 'linux'", + "(python_full_version == '3.12.*' and platform_machine != 's390x' and platform_machine != 'x86_64') or (python_full_version == '3.12.*' and platform_machine != 's390x' and sys_platform != 'linux')", "python_full_version == '3.12.*' and platform_machine == 's390x'", + "python_full_version == '3.11.*' and platform_machine == 'x86_64' and sys_platform == 'linux'", "(python_full_version == '3.11.*' and platform_machine != 's390x' and platform_machine != 'x86_64') or (python_full_version == '3.11.*' and platform_machine != 's390x' and sys_platform != 'linux')", "python_full_version == '3.11.*' and platform_machine == 's390x'", "python_full_version < '3.11' and platform_machine == 'x86_64' and sys_platform == 'linux'", @@ -307,12 +307,12 @@ version = "1.3.3" source = { registry = "https://pypi.org/simple" } resolution-markers = [ "python_full_version >= '3.13' and platform_machine == 'x86_64' and sys_platform == 'linux'", - "python_full_version == '3.12.*' and platform_machine == 'x86_64' and sys_platform == 'linux'", - "python_full_version == '3.11.*' and platform_machine == 'x86_64' and sys_platform == 'linux'", "(python_full_version >= '3.13' and platform_machine != 's390x' and platform_machine != 'x86_64') or (python_full_version >= '3.13' and platform_machine != 's390x' and sys_platform != 'linux')", - "(python_full_version == '3.12.*' and platform_machine != 's390x' and platform_machine != 'x86_64') or (python_full_version == '3.12.*' and platform_machine != 's390x' and sys_platform != 'linux')", "python_full_version >= '3.13' and platform_machine == 's390x'", + "python_full_version == '3.12.*' and platform_machine == 'x86_64' and sys_platform == 'linux'", + "(python_full_version == '3.12.*' and platform_machine != 's390x' and platform_machine != 'x86_64') or (python_full_version == '3.12.*' and platform_machine != 's390x' and sys_platform != 'linux')", "python_full_version == '3.12.*' and platform_machine == 's390x'", + "python_full_version == '3.11.*' and platform_machine == 'x86_64' and sys_platform == 'linux'", "(python_full_version == '3.11.*' and platform_machine != 's390x' and platform_machine != 'x86_64') or (python_full_version == '3.11.*' and platform_machine != 's390x' and sys_platform != 'linux')", "python_full_version == '3.11.*' and platform_machine == 's390x'", ] @@ -617,12 +617,12 @@ version = "1.14.0" source = { registry = "https://pypi.org/simple" } resolution-markers = [ "python_full_version >= '3.13' and platform_machine == 'x86_64' and sys_platform == 'linux'", - "python_full_version == '3.12.*' and platform_machine == 'x86_64' and sys_platform == 'linux'", - "python_full_version == '3.11.*' and platform_machine == 'x86_64' and sys_platform == 'linux'", "(python_full_version >= '3.13' and platform_machine != 's390x' and platform_machine != 'x86_64') or (python_full_version >= '3.13' and platform_machine != 's390x' and sys_platform != 'linux')", - "(python_full_version == '3.12.*' and platform_machine != 's390x' and platform_machine != 'x86_64') or (python_full_version == '3.12.*' and platform_machine != 's390x' and sys_platform != 'linux')", "python_full_version >= '3.13' and platform_machine == 's390x'", + "python_full_version == '3.12.*' and platform_machine == 'x86_64' and sys_platform == 'linux'", + "(python_full_version == '3.12.*' and platform_machine != 's390x' and platform_machine != 'x86_64') or (python_full_version == '3.12.*' and platform_machine != 's390x' and sys_platform != 'linux')", "python_full_version == '3.12.*' and platform_machine == 's390x'", + "python_full_version == '3.11.*' and platform_machine == 'x86_64' and sys_platform == 'linux'", "(python_full_version == '3.11.*' and platform_machine != 's390x' and platform_machine != 'x86_64') or (python_full_version == '3.11.*' and platform_machine != 's390x' and sys_platform != 'linux')", "python_full_version == '3.11.*' and platform_machine == 's390x'", ] @@ -1093,10 +1093,10 @@ version = "9.12.0" source = { registry = "https://pypi.org/simple" } resolution-markers = [ "python_full_version >= '3.13' and platform_machine == 'x86_64' and sys_platform == 'linux'", - "python_full_version == '3.12.*' and platform_machine == 'x86_64' and sys_platform == 'linux'", "(python_full_version >= '3.13' and platform_machine != 's390x' and platform_machine != 'x86_64') or (python_full_version >= '3.13' and platform_machine != 's390x' and sys_platform != 'linux')", - "(python_full_version == '3.12.*' and platform_machine != 's390x' and platform_machine != 'x86_64') or (python_full_version == '3.12.*' and platform_machine != 's390x' and sys_platform != 'linux')", "python_full_version >= '3.13' and platform_machine == 's390x'", + "python_full_version == '3.12.*' and platform_machine == 'x86_64' and sys_platform == 'linux'", + "(python_full_version == '3.12.*' and platform_machine != 's390x' and platform_machine != 'x86_64') or (python_full_version == '3.12.*' and platform_machine != 's390x' and sys_platform != 'linux')", "python_full_version == '3.12.*' and platform_machine == 's390x'", ] dependencies = [ @@ -1938,12 +1938,12 @@ version = "3.6.1" source = { registry = "https://pypi.org/simple" } resolution-markers = [ "python_full_version >= '3.13' and platform_machine == 'x86_64' and sys_platform == 'linux'", - "python_full_version == '3.12.*' and platform_machine == 'x86_64' and sys_platform == 'linux'", - "python_full_version == '3.11.*' and platform_machine == 'x86_64' and sys_platform == 'linux'", "(python_full_version >= '3.13' and platform_machine != 's390x' and platform_machine != 'x86_64') or (python_full_version >= '3.13' and platform_machine != 's390x' and sys_platform != 'linux')", - "(python_full_version == '3.12.*' and platform_machine != 's390x' and platform_machine != 'x86_64') or (python_full_version == '3.12.*' and platform_machine != 's390x' and sys_platform != 'linux')", "python_full_version >= '3.13' and platform_machine == 's390x'", + "python_full_version == '3.12.*' and platform_machine == 'x86_64' and sys_platform == 'linux'", + "(python_full_version == '3.12.*' and platform_machine != 's390x' and platform_machine != 'x86_64') or (python_full_version == '3.12.*' and platform_machine != 's390x' and sys_platform != 'linux')", "python_full_version == '3.12.*' and platform_machine == 's390x'", + "python_full_version == '3.11.*' and platform_machine == 'x86_64' and sys_platform == 'linux'", "(python_full_version == '3.11.*' and platform_machine != 's390x' and platform_machine != 'x86_64') or (python_full_version == '3.11.*' and platform_machine != 's390x' and sys_platform != 'linux')", "python_full_version == '3.11.*' and platform_machine == 's390x'", ] @@ -2056,12 +2056,12 @@ version = "2.4.4" source = { registry = "https://pypi.org/simple" } resolution-markers = [ "python_full_version >= '3.13' and platform_machine == 'x86_64' and sys_platform == 'linux'", - "python_full_version == '3.12.*' and platform_machine == 'x86_64' and sys_platform == 'linux'", - "python_full_version == '3.11.*' and platform_machine == 'x86_64' and sys_platform == 'linux'", "(python_full_version >= '3.13' and platform_machine != 's390x' and platform_machine != 'x86_64') or (python_full_version >= '3.13' and platform_machine != 's390x' and sys_platform != 'linux')", - "(python_full_version == '3.12.*' and platform_machine != 's390x' and platform_machine != 'x86_64') or (python_full_version == '3.12.*' and platform_machine != 's390x' and sys_platform != 'linux')", "python_full_version >= '3.13' and platform_machine == 's390x'", + "python_full_version == '3.12.*' and platform_machine == 'x86_64' and sys_platform == 'linux'", + "(python_full_version == '3.12.*' and platform_machine != 's390x' and platform_machine != 'x86_64') or (python_full_version == '3.12.*' and platform_machine != 's390x' and sys_platform != 'linux')", "python_full_version == '3.12.*' and platform_machine == 's390x'", + "python_full_version == '3.11.*' and platform_machine == 'x86_64' and sys_platform == 'linux'", "(python_full_version == '3.11.*' and platform_machine != 's390x' and platform_machine != 'x86_64') or (python_full_version == '3.11.*' and platform_machine != 's390x' and sys_platform != 'linux')", "python_full_version == '3.11.*' and platform_machine == 's390x'", ] @@ -2370,12 +2370,12 @@ version = "1.24.4" source = { registry = "https://pypi.org/simple" } resolution-markers = [ "python_full_version >= '3.13' and platform_machine == 'x86_64' and sys_platform == 'linux'", - "python_full_version == '3.12.*' and platform_machine == 'x86_64' and sys_platform == 'linux'", - "python_full_version == '3.11.*' and platform_machine == 'x86_64' and sys_platform == 'linux'", "(python_full_version >= '3.13' and platform_machine != 's390x' and platform_machine != 'x86_64') or (python_full_version >= '3.13' and platform_machine != 's390x' and sys_platform != 'linux')", - "(python_full_version == '3.12.*' and platform_machine != 's390x' and platform_machine != 'x86_64') or (python_full_version == '3.12.*' and platform_machine != 's390x' and sys_platform != 'linux')", "python_full_version >= '3.13' and platform_machine == 's390x'", + "python_full_version == '3.12.*' and platform_machine == 'x86_64' and sys_platform == 'linux'", + "(python_full_version == '3.12.*' and platform_machine != 's390x' and platform_machine != 'x86_64') or (python_full_version == '3.12.*' and platform_machine != 's390x' and sys_platform != 'linux')", "python_full_version == '3.12.*' and platform_machine == 's390x'", + "python_full_version == '3.11.*' and platform_machine == 'x86_64' and sys_platform == 'linux'", "(python_full_version == '3.11.*' and platform_machine != 's390x' and platform_machine != 'x86_64') or (python_full_version == '3.11.*' and platform_machine != 's390x' and sys_platform != 'linux')", "python_full_version == '3.11.*' and platform_machine == 's390x'", ] @@ -3213,12 +3213,12 @@ version = "1.17.1" source = { registry = "https://pypi.org/simple" } resolution-markers = [ "python_full_version >= '3.13' and platform_machine == 'x86_64' and sys_platform == 'linux'", - "python_full_version == '3.12.*' and platform_machine == 'x86_64' and sys_platform == 'linux'", - "python_full_version == '3.11.*' and platform_machine == 'x86_64' and sys_platform == 'linux'", "(python_full_version >= '3.13' and platform_machine != 's390x' and platform_machine != 'x86_64') or (python_full_version >= '3.13' and platform_machine != 's390x' and sys_platform != 'linux')", - "(python_full_version == '3.12.*' and platform_machine != 's390x' and platform_machine != 'x86_64') or (python_full_version == '3.12.*' and platform_machine != 's390x' and sys_platform != 'linux')", "python_full_version >= '3.13' and platform_machine == 's390x'", + "python_full_version == '3.12.*' and platform_machine == 'x86_64' and sys_platform == 'linux'", + "(python_full_version == '3.12.*' and platform_machine != 's390x' and platform_machine != 'x86_64') or (python_full_version == '3.12.*' and platform_machine != 's390x' and sys_platform != 'linux')", "python_full_version == '3.12.*' and platform_machine == 's390x'", + "python_full_version == '3.11.*' and platform_machine == 'x86_64' and sys_platform == 'linux'", "(python_full_version == '3.11.*' and platform_machine != 's390x' and platform_machine != 'x86_64') or (python_full_version == '3.11.*' and platform_machine != 's390x' and sys_platform != 'linux')", "python_full_version == '3.11.*' and platform_machine == 's390x'", ] @@ -3516,8 +3516,8 @@ version = "2.14.0" source = { registry = "https://pypi.org/simple" } resolution-markers = [ "(python_full_version >= '3.13' and platform_machine != 's390x' and platform_machine != 'x86_64') or (python_full_version >= '3.13' and platform_machine != 's390x' and sys_platform != 'linux')", - "(python_full_version == '3.12.*' and platform_machine != 's390x' and platform_machine != 'x86_64') or (python_full_version == '3.12.*' and platform_machine != 's390x' and sys_platform != 'linux')", "python_full_version >= '3.13' and platform_machine == 's390x'", + "(python_full_version == '3.12.*' and platform_machine != 's390x' and platform_machine != 'x86_64') or (python_full_version == '3.12.*' and platform_machine != 's390x' and sys_platform != 'linux')", "python_full_version == '3.12.*' and platform_machine == 's390x'", "(python_full_version == '3.11.*' and platform_machine != 's390x' and platform_machine != 'x86_64') or (python_full_version == '3.11.*' and platform_machine != 's390x' and sys_platform != 'linux')", "python_full_version == '3.11.*' and platform_machine == 's390x'", @@ -3797,8 +3797,8 @@ requires-dist = [ { name = "trimesh", specifier = ">=3.21.7" }, { name = "triton-rocm", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'", specifier = "==3.8.0", index = "https://download.pytorch.org/whl/rocm7.2" }, { name = "typing-extensions" }, - { name = "unisim-core", specifier = "==2.1.0" }, - { name = "unisim-core", extras = ["motrix"], marker = "extra == 'motrix'", specifier = "==2.1.0" }, + { name = "unisim-core", specifier = "==2.1.1" }, + { name = "unisim-core", extras = ["motrix"], marker = "extra == 'motrix'", specifier = "==2.1.1" }, { name = "viser", specifier = ">=1.0.26" }, { name = "wandb", specifier = ">=0.22.3" }, ] @@ -3815,13 +3815,16 @@ dev = [ [[package]] name = "unisim-core" -version = "2.1.0" +version = "2.1.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.4.4", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/8e/54/8bbfa4f671b4c26002983afeb88f24e548816de3ccb29112ac4b8ca9ae66/unisim_core-2.1.0.tar.gz", hash = "sha256:4353d0e01214954181a30b6e00442cf3f5e3bb45fba551cee2e6f35440db1d2d", size = 699562, upload-time = "2026-10-21T14:47:45.451Z" } +sdist = { url = "https://files.pythonhosted.org/packages/ae/dc/5c8b56a04996cc3f47767ac4c3c665c0eae131a188f1554525ff7514a9ed/unisim_core-2.1.1.tar.gz", hash = "sha256:f3c9bc2497b3ef85ec984cf38f8a8ce5cfd24b900db2734685575c5bb8cef2ed", size = 699580, upload-time = "2026-10-22T10:26:44.017Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/31/99/b532c452a8544eb508ff3b6009146aa24f44e09c5c43e63aaf46153b8490/unisim_core-2.1.1-py3-none-any.whl", hash = "sha256:fee2dcecb8ceb60ee2532a9e7d15f66daf1c1213d990fe4a607aef92130f6bf2", size = 746595, upload-time = "2026-10-22T10:26:42.255Z" }, +] [package.optional-dependencies] motrix = [