From 8ed69abd55d4ac034ce497a9c54deb335dae28ae Mon Sep 17 00:00:00 2001 From: Duy Ta <146031108+dta-bdai@users.noreply.github.com> Date: Fri, 20 Feb 2026 18:03:26 -0500 Subject: [PATCH 01/12] run_mpc with mjwarp --- .github/workflows/pypi_publish.yml | 8 +- .gitignore | 3 + docs/architecture_diagram.py | 255 + docs/run_mpc_architecture.svg | 6546 +++++++++++++++++ judo/controller/__init__.py | 9 +- judo/controller/batched_spot_locomotion.py | 291 + judo/controller/controller.py | 426 +- judo/models/policies/spot_locomotion.pt | Bin 0 -> 841139 bytes judo/models/xml/spot_primitive/robot.xml | 2 +- judo/models/xml/spot_tire/robot.xml | 2 +- judo/simulation/policy_mj_simulation.py | 1 + judo/tasks/base.py | 4 + judo/tasks/spot/spot_base.py | 11 + judo/tasks/spot/spot_box_push.py | 8 + judo/tasks/spot/spot_constants.py | 20 + judo/tasks/spot/spot_navigate.py | 8 + judo/tasks/spot/spot_tire_roll.py | 9 + judo/tasks/spot/spot_tire_upright.py | 9 +- judo/utils/mjwarp_rollout_backend.py | 270 + judo/utils/policy_mj_rollout_backend.py | 2 +- judo/utils/rollout_backend.py | 5 +- judo/utils/timer.py | 177 + mujoco_extensions/__init__.py | 6 - .../onnx_interface/onnx_interface.cpp | 4 +- mujoco_extensions/system/system_class.cpp | 27 +- pixi.lock | 4205 ++++------- pyproject.toml | 14 +- run_mpc/configs/spot_tire_upright.json | 39 + run_mpc/main.py | 105 + run_mpc/mpc_batch.py | 208 + run_mpc/mpc_config.py | 161 + run_mpc/mpc_setup.py | 199 + run_mpc/visualize_trajectories.py | 128 + 33 files changed, 10085 insertions(+), 3077 deletions(-) create mode 100644 docs/architecture_diagram.py create mode 100644 docs/run_mpc_architecture.svg create mode 100644 judo/controller/batched_spot_locomotion.py create mode 100644 judo/models/policies/spot_locomotion.pt create mode 100644 judo/utils/mjwarp_rollout_backend.py create mode 100644 judo/utils/timer.py create mode 100644 run_mpc/configs/spot_tire_upright.json create mode 100644 run_mpc/main.py create mode 100644 run_mpc/mpc_batch.py create mode 100644 run_mpc/mpc_config.py create mode 100644 run_mpc/mpc_setup.py create mode 100644 run_mpc/visualize_trajectories.py diff --git a/.github/workflows/pypi_publish.yml b/.github/workflows/pypi_publish.yml index 9b6d7927..d1fec932 100644 --- a/.github/workflows/pypi_publish.yml +++ b/.github/workflows/pypi_publish.yml @@ -205,7 +205,7 @@ jobs: path: dist merge-multiple: true - - name: Publish to PyPI - uses: pypa/gh-action-pypi-publish@release/v1 - with: - skip-existing: true + # - name: Publish to PyPI + # uses: pypa/gh-action-pypi-publish@release/v1 + # with: + # skip-existing: true diff --git a/.gitignore b/.gitignore index 29f239dc..9de1e035 100644 --- a/.gitignore +++ b/.gitignore @@ -199,3 +199,6 @@ wheelhouse/ # byproduct meshes.zip + +# generated dataset +*.h5 diff --git a/docs/architecture_diagram.py b/docs/architecture_diagram.py new file mode 100644 index 00000000..3df4eb3b --- /dev/null +++ b/docs/architecture_diagram.py @@ -0,0 +1,255 @@ +"""Generate architecture diagram comparing old CPU vs new GPU MPC pipeline.""" + +import matplotlib.pyplot as plt +from matplotlib.patches import FancyBboxPatch, FancyArrowPatch +import numpy as np + +# Colors — light theme for white-background slides +C_BG = "#FFFFFF" +C_ACCENT_OLD = "#C0392B" +C_ACCENT_NEW = "#2471A3" +C_GPU = "#1E8449" +C_GPU_BG = "#EBF5FB" +C_CPU = "#922B21" +C_CPU_BG = "#FDEDEC" +C_SIM = "#D35400" +C_CTRL = "#7D3C98" +C_TEXT = "#1C2833" +C_SUBTEXT = "#5D6D7E" +C_ARROW = "#2E86C1" +C_ARROW_OLD = "#C0392B" +C_BOX_STROKE = "#ABB2B9" + +# Use non-equal aspect so we get full use of the figure area +fig = plt.figure(figsize=(30, 16), facecolor=C_BG) +ax_old = fig.add_axes([0.01, 0.05, 0.25, 0.90], facecolor=C_BG) +ax_new = fig.add_axes([0.28, 0.05, 0.71, 0.90], facecolor=C_BG) + + +def draw_box(ax, xy, w, h, color, alpha=0.9, lw=1.5, ec=C_BOX_STROKE, zorder=1, radius=0.008): + box = FancyBboxPatch(xy, w, h, boxstyle=f"round,pad={radius}", + facecolor=color, edgecolor=ec, linewidth=lw, alpha=alpha, zorder=zorder) + ax.add_patch(box) + return box + + +def draw_arrow(ax, start, end, color=C_ARROW, lw=3, style="-|>", zorder=5): + arrow = FancyArrowPatch(start, end, arrowstyle=style, color=color, + linewidth=lw, mutation_scale=20, zorder=zorder, + connectionstyle="arc3,rad=0.0") + ax.add_patch(arrow) + + +# ============================================ +# LEFT PANEL: Old Architecture (CPU) — compact +# ============================================ +ax_old.set_xlim(0, 1) +ax_old.set_ylim(0, 1) +ax_old.axis('off') + +# Title +ax_old.text(0.5, 0.97, "CPU Threaded Rollout", ha='center', va='top', + fontsize=24, fontweight='bold', color=C_ACCENT_OLD, zorder=10) +ax_old.text(0.5, 0.92, "mujoco_extensions + ONNX Runtime", ha='center', va='top', + fontsize=15, color=C_SUBTEXT, zorder=10) + +# CPU badge +draw_box(ax_old, (0.05, 0.83), 0.90, 0.05, C_CPU_BG, ec=C_CPU, lw=2) +ax_old.text(0.5, 0.855, "CPU (x86_64)", ha='center', va='center', + fontsize=17, fontweight='bold', color=C_CPU, zorder=10) + +# MJSimulation +draw_box(ax_old, (0.08, 0.72), 0.84, 0.08, "#FFF3E0", ec=C_SIM, lw=2) +ax_old.text(0.5, 0.76, "MJSimulation", ha='center', va='center', + fontsize=19, fontweight='bold', color=C_SIM, zorder=10) + +draw_arrow(ax_old, (0.5, 0.72), (0.5, 0.67), color=C_ARROW_OLD) + +# Controller +draw_box(ax_old, (0.08, 0.57), 0.84, 0.10, "#F4ECF7", ec=C_CTRL, lw=2) +ax_old.text(0.5, 0.635, "Controller", ha='center', va='center', + fontsize=19, fontweight='bold', color=C_CTRL, zorder=10) +ax_old.text(0.5, 0.59, "CEM + Spline", ha='center', va='center', + fontsize=14, color=C_SUBTEXT, zorder=10) + +draw_arrow(ax_old, (0.5, 0.57), (0.5, 0.52), color=C_ARROW_OLD) + +# RolloutBackend +draw_box(ax_old, (0.05, 0.17), 0.90, 0.35, "#FDEDEC", ec=C_ACCENT_OLD, lw=2) +ax_old.text(0.5, 0.49, "RolloutBackend", ha='center', va='center', + fontsize=18, fontweight='bold', color=C_ACCENT_OLD, zorder=10) +ax_old.text(0.5, 0.45, "C++ threaded_rollout", ha='center', va='center', + fontsize=14, color=C_SUBTEXT, zorder=10) + +# Thread grid: 32 threads in 4x8 +n_threads = 32 +cols, rows = 8, 4 +bw, bh = 0.088, 0.045 +gap_x, gap_y = 0.015, 0.012 +total_w = cols * bw + (cols - 1) * gap_x +x_start = (1 - total_w) / 2 +y_top = 0.40 + +for i in range(n_threads): + r, c = divmod(i, cols) + bx = x_start + c * (bw + gap_x) + by = y_top - r * (bh + gap_y) + draw_box(ax_old, (bx, by), bw, bh, "#F9EBEA", ec=C_ACCENT_OLD, lw=1, alpha=0.8, radius=0.004) + ax_old.text(bx + bw / 2, by + bh / 2, f"T{i}", ha='center', va='center', + fontsize=9, color=C_ACCENT_OLD, zorder=10, fontweight='bold') + +ax_old.text(0.5, 0.19, "32 CPU threads | ONNX + mj_step", ha='center', va='center', + fontsize=13, color=C_SUBTEXT, zorder=10) + +# Bottom label +draw_box(ax_old, (0.10, 0.04), 0.80, 0.08, "#FFF3E0", ec=C_SIM, lw=2) +ax_old.text(0.5, 0.08, "32 Sequential Rollouts", ha='center', va='center', + fontsize=18, fontweight='bold', color=C_SIM, zorder=10) + + +# ============================================ +# RIGHT PANEL: New Architecture (GPU) — large +# ============================================ +ax_new.set_xlim(0, 1) +ax_new.set_ylim(0, 1) +ax_new.axis('off') + +n_ctrl = 10 + +# Title +ax_new.text(0.5, 0.97, "GPU Batched MPC Pipeline", ha='center', va='top', + fontsize=30, fontweight='bold', color=C_ACCENT_NEW, zorder=10) +ax_new.text(0.5, 0.925, "mujoco_warp + PyTorch + BatchedControllers", ha='center', va='top', + fontsize=17, color=C_SUBTEXT, zorder=10) + +# CPU section (sims) +draw_box(ax_new, (0.02, 0.82), 0.96, 0.07, C_CPU_BG, ec=C_CPU, lw=1.5, alpha=0.5) +ax_new.text(0.04, 0.885, "CPU", ha='left', va='center', + fontsize=16, fontweight='bold', color=C_CPU, zorder=10) + +# Simulations +sim_w = 0.07 +sim_gap = 0.015 +total_sims_w = n_ctrl * sim_w + (n_ctrl - 1) * sim_gap +sim_x_start = (1 - total_sims_w) / 2 + +for i in range(n_ctrl): + sx = sim_x_start + i * (sim_w + sim_gap) + draw_box(ax_new, (sx, 0.83), sim_w, 0.05, "#FFF3E0", ec=C_SIM, lw=1.5, radius=0.004) + ax_new.text(sx + sim_w / 2, 0.855, f"Sim {i}", ha='center', va='center', + fontsize=12, fontweight='bold', color=C_SIM, zorder=10) + +ax_new.text(sim_x_start + n_ctrl * (sim_w + sim_gap) + 0.01, 0.855, "\u2026", + ha='left', va='center', fontsize=20, fontweight='bold', color=C_SIM, zorder=10) + +draw_arrow(ax_new, (0.5, 0.82), (0.5, 0.78), color=C_ARROW) + +# GPU section +draw_box(ax_new, (0.02, 0.02), 0.96, 0.80, C_GPU_BG, ec=C_GPU, lw=2.5, alpha=0.4) +ax_new.text(0.04, 0.81, "GPU (NVIDIA)", ha='left', va='center', + fontsize=16, fontweight='bold', color=C_GPU, zorder=10) + +# BatchedControllers +draw_box(ax_new, (0.03, 0.66), 0.94, 0.11, "#F4ECF7", ec=C_CTRL, lw=2, alpha=0.85) +ax_new.text(0.5, 0.755, "BatchedControllers", ha='center', va='center', + fontsize=22, fontweight='bold', color=C_CTRL, zorder=10) + +ctrl_x_start = sim_x_start +for i in range(n_ctrl): + cx = ctrl_x_start + i * (sim_w + sim_gap) + draw_box(ax_new, (cx, 0.675), sim_w, 0.045, "#E8DAEF", ec=C_CTRL, lw=1.2, radius=0.003) + ax_new.text(cx + sim_w / 2, 0.697, f"Ctrl {i}", ha='center', va='center', + fontsize=11, fontweight='bold', color=C_CTRL, zorder=10) + +ax_new.text(ctrl_x_start + n_ctrl * (sim_w + sim_gap) + 0.01, 0.697, "\u2026", + ha='left', va='center', fontsize=20, fontweight='bold', color=C_CTRL, zorder=10) + +draw_arrow(ax_new, (0.5, 0.66), (0.5, 0.62), color=C_ARROW) + +# RolloutBackend (mujoco_warp) +draw_box(ax_new, (0.03, 0.03), 0.94, 0.59, "#E8F6F3", ec=C_ACCENT_NEW, lw=2.5, alpha=0.8) +ax_new.text(0.5, 0.605, "RolloutBackend (mujoco_warp)", ha='center', va='center', + fontsize=22, fontweight='bold', color=C_ACCENT_NEW, zorder=10) + +# CUDA Graph box with 2D grid +draw_box(ax_new, (0.05, 0.04), 0.90, 0.54, "#D6EAF8", ec=C_ACCENT_NEW, lw=2, alpha=0.7) +ax_new.text(0.5, 0.565, "mujoco_warp.step() \u2014 CUDA Graph", ha='center', va='center', + fontsize=20, fontweight='bold', color=C_ACCENT_NEW, zorder=10) + +# 2D grid: 10 columns (controllers shown) x rows (representing 64 rollouts) +grid_cols = n_ctrl +grid_rows_shown = 18 # rows drawn (representing 64 with ellipsis) +cell_w = 0.07 +cell_h = 0.022 +cell_gap_x = 0.015 +cell_gap_y = 0.003 +total_grid_w = grid_cols * cell_w + (grid_cols - 1) * cell_gap_x +total_grid_h = grid_rows_shown * cell_h + (grid_rows_shown - 1) * cell_gap_y +grid_x0 = (1 - total_grid_w) / 2 +grid_y_top = 0.52 + +# Pastel colors per column +col_colors = [ + "#AED6F1", "#A9DFBF", "#D7BDE2", "#F9E79F", "#A3E4D7", + "#F5CBA7", "#AED6F1", "#D5F5E3", "#FADBD8", "#D6DBDF", +] + +np.random.seed(42) +mid_row = grid_rows_shown // 2 # row where ellipsis goes + +for c in range(grid_cols): + base = col_colors[c] + br, bg_, bb = int(base[1:3], 16), int(base[3:5], 16), int(base[5:7], 16) + for r in range(grid_rows_shown): + if r == mid_row: + continue # leave gap for ellipsis + cx = grid_x0 + c * (cell_w + cell_gap_x) + cy = grid_y_top - r * (cell_h + cell_gap_y) + v = np.random.randint(-10, 10) + fc = f"#{max(0,min(255,br+v)):02x}{max(0,min(255,bg_+v)):02x}{max(0,min(255,bb+v)):02x}" + rect = plt.Rectangle((cx, cy), cell_w, cell_h, facecolor=fc, + edgecolor="#B0BEC5", linewidth=0.5, alpha=0.9, zorder=6) + ax_new.add_patch(rect) + +# Column headers +for c in range(grid_cols): + cx = grid_x0 + c * (cell_w + cell_gap_x) + cell_w / 2 + ax_new.text(cx, grid_y_top + cell_h + 0.006, f"C{c}", ha='center', va='center', + fontsize=11, fontweight='bold', color=C_SUBTEXT, zorder=10) + +ax_new.text(grid_x0 + grid_cols * (cell_w + cell_gap_x) + 0.005, + grid_y_top + cell_h + 0.006, "\u2026", ha='left', va='center', + fontsize=16, fontweight='bold', color=C_SUBTEXT, zorder=10) + +# Vertical ellipsis in each column +for c in range(grid_cols): + cx = grid_x0 + c * (cell_w + cell_gap_x) + cell_w / 2 + cy = grid_y_top - mid_row * (cell_h + cell_gap_y) + cell_h / 2 + ax_new.text(cx, cy, "\u22ee", ha='center', va='center', + fontsize=14, fontweight='bold', color="#5D6D7E", zorder=11) + +# Row label on left +row_center_y = grid_y_top - total_grid_h / 2 + cell_h / 2 +ax_new.text(grid_x0 - 0.035, row_center_y, "64\nrollouts\neach", ha='center', va='center', + fontsize=13, color=C_SUBTEXT, zorder=10, linespacing=1.3, fontstyle='italic') + +# Summary label at bottom +ax_new.text(0.5, 0.06, "100 controllers \u00d7 64 rollouts = 6,400 parallel GPU worlds", + ha='center', va='center', fontsize=20, fontweight='bold', color=C_ACCENT_NEW, zorder=10, + bbox=dict(boxstyle='round,pad=0.3', facecolor='white', edgecolor=C_ACCENT_NEW, alpha=0.95, lw=2)) + +# Bottom banners +fig.text(0.135, 0.02, "32 CPU threads \u2022 Sequential \u2022 ONNX", + ha='center', va='center', fontsize=16, color=C_ACCENT_OLD, + fontweight='bold', fontstyle='italic') +fig.text(0.635, 0.02, "6,400 GPU worlds \u2022 100 parallel trajectories \u2022 PyTorch JIT + CUDA Graphs", + ha='center', va='center', fontsize=16, color=C_ACCENT_NEW, + fontweight='bold', fontstyle='italic') + +plt.savefig("/home/dta/judo/docs/run_mpc_architecture.png", dpi=200, facecolor=C_BG, + bbox_inches='tight', pad_inches=0.3) +plt.savefig("/home/dta/judo/docs/run_mpc_architecture.svg", facecolor=C_BG, + bbox_inches='tight', pad_inches=0.3) +plt.savefig("/home/dta/judo/docs/run_mpc_architecture_transparent.png", dpi=200, facecolor='none', + bbox_inches='tight', pad_inches=0.3, transparent=True) +print("Saved to docs/run_mpc_architecture.png, .svg, and _transparent.png") diff --git a/docs/run_mpc_architecture.svg b/docs/run_mpc_architecture.svg new file mode 100644 index 00000000..90b6abd6 --- /dev/null +++ b/docs/run_mpc_architecture.svg @@ -0,0 +1,6546 @@ + + + + + + + + 2026-02-11T17:53:16.043734 + image/svg+xml + + + Matplotlib v3.5.1, https://matplotlib.org/ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/judo/controller/__init__.py b/judo/controller/__init__.py index a723d3fb..eb00f756 100644 --- a/judo/controller/__init__.py +++ b/judo/controller/__init__.py @@ -1,6 +1,12 @@ # Copyright (c) 2025 Robotics and AI Institute LLC. All rights reserved. -from judo.controller.controller import Controller, ControllerConfig, make_controller +from judo import MODEL_PATH +from judo.controller.controller import ( + BatchedControllers, + Controller, + ControllerConfig, + make_controller, +) from judo.controller.overrides import ( set_default_caltech_leap_cube_overrides, set_default_cartpole_overrides, @@ -20,6 +26,7 @@ set_default_spot_overrides() __all__ = [ + "BatchedControllers", "Controller", "ControllerConfig", "make_controller", diff --git a/judo/controller/batched_spot_locomotion.py b/judo/controller/batched_spot_locomotion.py new file mode 100644 index 00000000..81aeaac3 --- /dev/null +++ b/judo/controller/batched_spot_locomotion.py @@ -0,0 +1,291 @@ +# Copyright (c) 2025 Robotics and AI Institute LLC. All rights reserved. + +"""GPU-batched locomotion controller for Spot hierarchical control.""" + +from pathlib import Path + +import numpy as np +import onnx +import onnxruntime as ort +import warp as wp + +from judo.tasks.spot.spot_constants import ( + ISAAC_TO_MUJOCO_INDICES_12, + LOCOMOTION_DEFAULT_JOINTS_OFFSET, + LOCOMOTION_DEFAULT_LEGS_OFFSET, + MUJOCO_TO_ISAAC_INDICES_19, + POLICY_OUTPUT_DIM, +) + + +@wp.kernel +def build_observation_kernel( + qpos: wp.array2d(dtype=wp.float32), + qvel: wp.array2d(dtype=wp.float32), + cmd: wp.array2d(dtype=wp.float32), + prev_actions: wp.array2d(dtype=wp.float32), + joints_offset: wp.array(dtype=wp.float32), + mj_to_isaac: wp.array(dtype=wp.int32), + obs: wp.array2d(dtype=wp.float32), +): + """Build 84-dim observation from state, command, and previous actions. + + Per-thread (one thread per batch element): + obs[ 0: 3] = quat_rotate_inverse(quat, lin_vel) + obs[ 3: 6] = angular velocity + obs[ 6: 9] = quat_rotate_inverse(quat, [0, 0, -1]) + obs[ 9:34] = cmd (25 dims) + obs[34:53] = mujoco->isaac reordered joints - offset (19 dims) + obs[53:72] = mujoco->isaac reordered joint velocities (19 dims) + obs[72:84] = previous actions (12 dims) + """ + i = wp.tid() + + # Quaternion (scalar-first: w, x, y, z) + qw = qpos[i, 3] + qx = qpos[i, 4] + qy = qpos[i, 5] + qz = qpos[i, 6] + + ww = qw * qw + xx = qx * qx + yy = qy * qy + zz = qz * qz + wx = qw * qx + wy = qw * qy + wz = qw * qz + xy = qx * qy + xz = qx * qz + yz = qy * qz + + # quat_rotate_inverse(quat, lin_vel) -> obs[0:3] + vx = qvel[i, 0] + vy = qvel[i, 1] + vz = qvel[i, 2] + obs[i, 0] = (ww + xx - yy - zz) * vx + 2.0 * (xy + wz) * vy + 2.0 * (xz - wy) * vz + obs[i, 1] = 2.0 * (xy - wz) * vx + (ww - xx + yy - zz) * vy + 2.0 * (yz + wx) * vz + obs[i, 2] = 2.0 * (xz + wy) * vx + 2.0 * (yz - wx) * vy + (ww - xx - yy + zz) * vz + + # Angular velocity -> obs[3:6] + obs[i, 3] = qvel[i, 3] + obs[i, 4] = qvel[i, 4] + obs[i, 5] = qvel[i, 5] + + # quat_rotate_inverse(quat, [0, 0, -1]) -> obs[6:9] + obs[i, 6] = -2.0 * (xz - wy) + obs[i, 7] = -2.0 * (yz + wx) + obs[i, 8] = -(ww - xx - yy + zz) + + # Command (25 dims) -> obs[9:34] + for j in range(25): + obs[i, 9 + j] = cmd[i, j] + + # Mujoco->Isaac reorder + offset subtraction for joints -> obs[34:53] + for j in range(19): + idx = mj_to_isaac[j] + obs[i, 34 + j] = qpos[i, 7 + idx] - joints_offset[j] + + # Mujoco->Isaac reorder for joint velocities -> obs[53:72] + for j in range(19): + idx = mj_to_isaac[j] + obs[i, 53 + j] = qvel[i, 6 + idx] + + # Previous actions -> obs[72:84] + for j in range(12): + obs[i, 72 + j] = prev_actions[i, j] + + +@wp.kernel +def compute_targets_kernel( + actions: wp.array2d(dtype=wp.float32), + cmd: wp.array2d(dtype=wp.float32), + legs_offset: wp.array(dtype=wp.float32), + isaac_to_mj: wp.array(dtype=wp.int32), + action_scale: float, + target_q: wp.array2d(dtype=wp.float32), +): + """Post-process policy actions into 19-dim target_q. + + Per-thread: + 1. Scale actions and apply offset, then isaac->mujoco reorder for legs + 2. Per-leg override: if any of 3 cmd joints != 0, use cmd instead + 3. Arm passthrough: target_q[12:19] = cmd[3:10] + """ + i = wp.tid() + + # Scale + offset + isaac->mujoco reorder for legs + # _isaac_to_mujoco_batch: output[k] = input[ISAAC_TO_MUJOCO_INDICES_12[k]] + for k in range(12): + j = isaac_to_mj[k] + target_q[i, k] = actions[i, j] * action_scale + legs_offset[j] + + # Per-leg override: if any of 3 cmd joints are nonzero, use cmd + # leg_joint_command = cmd[:, 10:22] + for leg in range(4): + any_nonzero = int(0) + for dof in range(3): + if cmd[i, 10 + leg * 3 + dof] != 0.0: + any_nonzero = 1 + if any_nonzero == 1: + for dof in range(3): + target_q[i, leg * 3 + dof] = cmd[i, 10 + leg * 3 + dof] + + # Arm passthrough: target_q[12:19] = cmd[3:10] + for j in range(7): + target_q[i, 12 + j] = cmd[i, 3 + j] + + +class BatchedSpotLocomotion: + """Batched GPU-accelerated locomotion controller for Spot. + + This controller implements the learned locomotion policy that converts + high-level commands to target joint positions. + + The controller: + - Takes high-level commands (base velocity, arm/leg positions) from MPC + - Runs learned locomotion policy at ~56Hz + - Produces target joint positions for PD control + """ + + def __init__( + self, + model_path: str | Path, + device: str = "cuda:0", + action_scale: float = 0.2, + ) -> None: + """Initialize the batched locomotion controller. + + Args: + model_path: Path to the pre-trained locomotion policy (.onnx file). + device: The warp device string (e.g. "cuda:0"). + action_scale: Scaling factor for the action. Defaults to 0.2. + """ + self._device = device + self.action_scale = action_scale + + # Parse device string to get CUDA device id + if ":" in device: + self._device_id = int(device.split(":")[1]) + else: + self._device_id = 0 + + # Load ONNX model and make batch dimension dynamic (on-disk file + # keeps batch=1 for the C++ rollout code; Python needs dynamic batch). + onnx_model = onnx.load(str(model_path)) + for tensor in list(onnx_model.graph.input) + list(onnx_model.graph.output): + tensor.type.tensor_type.shape.dim[0].ClearField("dim_value") + tensor.type.tensor_type.shape.dim[0].dim_param = "batch" + + self._ort_session = ort.InferenceSession( + onnx_model.SerializeToString(), + providers=[("CUDAExecutionProvider", {"device_id": self._device_id})], + ) + self._ort_input_name = self._ort_session.get_inputs()[0].name + self._ort_output_name = self._ort_session.get_outputs()[0].name + + # Constant arrays on GPU + self._joints_offset = wp.array( + np.array(LOCOMOTION_DEFAULT_JOINTS_OFFSET, dtype=np.float32), + dtype=wp.float32, + device=device, + ) + self._legs_offset = wp.array( + np.array(LOCOMOTION_DEFAULT_LEGS_OFFSET, dtype=np.float32), + dtype=wp.float32, + device=device, + ) + self._mj_to_isaac = wp.array( + np.array(MUJOCO_TO_ISAAC_INDICES_19, dtype=np.int32), + dtype=wp.int32, + device=device, + ) + self._isaac_to_mj = wp.array( + np.array(ISAAC_TO_MUJOCO_INDICES_12, dtype=np.int32), + dtype=wp.int32, + device=device, + ) + + def _run_policy(self, obs: wp.array, actions: wp.array) -> None: + """Run the locomotion policy via ONNX Runtime with GPU I/O binding. + + Writes ORT output directly into the pre-allocated ``actions`` warp array. + + Args: + obs: Observation array on GPU (batch_size, 84). + actions: Pre-allocated output array on GPU (batch_size, POLICY_OUTPUT_DIM). + """ + io_binding = self._ort_session.io_binding() + io_binding.bind_input( + name=self._ort_input_name, + device_type="cuda", + device_id=self._device_id, + element_type=np.float32, + shape=tuple(obs.shape), + buffer_ptr=obs.ptr, + ) + io_binding.bind_output( + name=self._ort_output_name, + device_type="cuda", + device_id=self._device_id, + element_type=np.float32, + shape=tuple(actions.shape), + buffer_ptr=actions.ptr, + ) + self._ort_session.run_with_iobinding(io_binding) + + def compute_batch( + self, + cmd: wp.array, + qpos: wp.array, + qvel: wp.array, + previous_actions: wp.array | None, + ) -> tuple[wp.array, wp.array]: + """Get target joint positions from high-level command (batched interface). + + Args: + cmd: High-level command (batch_size, 25). + qpos: Joint positions (batch_size, nq). + qvel: Joint velocities (batch_size, nv). + previous_actions: Previous actions (batch_size, POLICY_OUTPUT_DIM) or None. + + Returns: + Tuple of (target_q, new_previous_actions) as warp arrays. + """ + batch_size = cmd.shape[0] + + if previous_actions is None: + previous_actions = wp.zeros((batch_size, POLICY_OUTPUT_DIM), dtype=wp.float32, device=self._device) + + obs = wp.zeros((batch_size, 84), dtype=wp.float32, device=self._device) + wp.launch( + build_observation_kernel, + dim=batch_size, + inputs=[qpos, qvel, cmd, previous_actions, self._joints_offset, self._mj_to_isaac], + outputs=[obs], + device=self._device, + ) + + # Ensure observation kernel completes before ORT reads the buffer + wp.synchronize() + + actions = wp.zeros((batch_size, POLICY_OUTPUT_DIM), dtype=wp.float32, device=self._device) + self._run_policy(obs, actions) + + target_q = wp.zeros((batch_size, 19), dtype=wp.float32, device=self._device) + wp.launch( + compute_targets_kernel, + dim=batch_size, + inputs=[actions, cmd, self._legs_offset, self._isaac_to_mj, self.action_scale], + outputs=[target_q], + device=self._device, + ) + + return target_q, actions + + def reset(self) -> None: + """Reset internal state (no-op since previous_actions is now external).""" + + @property + def target_frequency(self) -> float: + """Returns the target frequency of the low-level controller.""" + return 50.0 # Hz diff --git a/judo/controller/controller.py b/judo/controller/controller.py index 2c07b1e8..137cebf3 100644 --- a/judo/controller/controller.py +++ b/judo/controller/controller.py @@ -1,10 +1,14 @@ # Copyright (c) 2025 Robotics and AI Institute LLC. All rights reserved. +from __future__ import annotations + +import copy import warnings from dataclasses import dataclass -from typing import Literal +from typing import TYPE_CHECKING, Literal import numpy as np +from mujoco import MjData from omegaconf import DictConfig from scipy.interpolate import interp1d @@ -24,7 +28,11 @@ normalizer_registry, ) from judo.utils.policy_mj_rollout_backend import PolicyMJRolloutBackend + +if TYPE_CHECKING: + from judo.utils.mjwarp_rollout_backend import MJWarpRolloutBackend from judo.utils.rollout_backend import RolloutBackend +from judo.utils.timer import Timer from judo.visualizers.utils import get_trace_sensors @@ -50,7 +58,7 @@ def __init__( controller_config: ControllerConfig, task: Task, optimizer: Optimizer, - rollout_backend: Literal["mujoco"] = "mujoco", + rollout_backend: Literal["mujoco"] | MJWarpRolloutBackend = "mujoco", ) -> None: """Initialize the controller. @@ -58,7 +66,8 @@ def __init__( controller_config: The controller configuration. task: The task to use. optimizer: The optimizer to use. - rollout_backend: The backend to use for rollouts. Currently only "mujoco" is supported. + rollout_backend: The backend to use for rollouts. Either "mujoco" to create + a new CPU backend, or an existing RolloutBackend instance (e.g. GPU warp). """ self._controller_cfg = controller_config self.task = task @@ -70,22 +79,25 @@ def __init__( self.model = self.task.model # Initialize rollout backend (auto-select policy backend if task requires it) - if self.task.uses_locomotion_policy: - assert self.task.locomotion_policy_path is not None - self.rollout_backend: RolloutBackend = PolicyMJRolloutBackend( - model=self.model, - num_threads=self.optimizer_cfg.num_rollouts, - policy_path=self.task.locomotion_policy_path, - physics_substeps=self.task.physics_substeps, - ) + if not isinstance(rollout_backend, str): + # MJWarpRolloutBackend instance (avoid isinstance check to skip mujoco_warp import) + self.rollout_backend = rollout_backend else: - self.rollout_backend = MJRolloutBackend( - model=self.model, - num_threads=self.optimizer_cfg.num_rollouts, - ) - self._last_policy_output = ( - np.zeros((self.optimizer_cfg.num_rollouts, POLICY_OUTPUT_DIM)) if self.task.uses_locomotion_policy else None - ) + if self.task.uses_locomotion_policy: + assert self.task.locomotion_policy_path is not None + self.rollout_backend: RolloutBackend = PolicyMJRolloutBackend( + model=self.model, + num_threads=self.optimizer_cfg.num_rollouts, + policy_path=self.task.locomotion_policy_path, + physics_substeps=self.task.physics_substeps, + ) + else: + self.rollout_backend = MJRolloutBackend( + model=self.model, + num_threads=self.optimizer_cfg.num_rollouts, + ) + + self._last_policy_output = None self.action_normalizer = self._init_action_normalizer() # a container for any metadata from the system that we want to pass to the task @@ -208,7 +220,39 @@ def controller_cfg(self, controller_cfg: ControllerConfig) -> None: self.action_normalizer = self._init_action_normalizer() def update_action(self) -> None: - """Abstract method for updating controller actions from current state/time.""" + """Update controller actions from current state/time. + + This method runs the full optimization loop for a single controller. + For batched multi-controller optimization, use BatchedControllers instead. + """ + self._pre_optimization() + + # run optimization loop + i = 0 + while i < self.max_opt_iters and not self.optimizer.stop_cond(): + self.rollout_controls = self._sample_controls() + self._pre_rollout() + + # Convert task-space controls to sim-space for rollout backend + sim_controls = self.task.task_to_sim_ctrl(self.rollout_controls) + + # Roll out dynamics + self.states, self.sensors, policy_output = self.rollout_backend.rollout( + self.current_state, + sim_controls, + self._last_policy_output, + ) + if policy_output is not None: + self._last_policy_output = policy_output + + self._post_rollout() + self._update_iteration() + i += 1 + + self._post_optimization() + + def _pre_optimization(self) -> None: + """Setup phase before optimization loop. Called once per update_action.""" assert self.current_state.shape == (self.model.nq + self.model.nv,), "Current state must be of shape (nq + nv,)" assert self.optimizer_cfg.num_rollouts > 0, "Need at least one rollout!" @@ -217,15 +261,20 @@ def update_action(self) -> None: self.optimizer_cfg.num_nodes = 4 # Adjust time + move policy forward. - new_times = self.time + self.spline_timesteps - nominal_knots = self.spline(new_times) - nominal_knots_normalized = self.action_normalizer.normalize(nominal_knots) + self._new_times = self.time + self.spline_timesteps + nominal_knots = self.spline(self._new_times) + self._nominal_knots_normalized = self.action_normalizer.normalize(nominal_knots) - # resizing any variables due to changes in the GUI + # Resizing rollout backend due to changes in num_rollouts (e.g., from GUI) if self.rollout_backend.num_threads != self.optimizer_cfg.num_rollouts: - self.rollout_backend.update(self.optimizer_cfg.num_rollouts) + # Preserve num_problems when updating shared backend (warp), or just num_threads (CPU) + num_problems = getattr(self.rollout_backend, "num_problems", None) + if num_problems is not None: + self.rollout_backend.update(self.optimizer_cfg.num_rollouts, num_problems) # type: ignore[call-arg] + else: + self.rollout_backend.update(self.optimizer_cfg.num_rollouts) if self._last_policy_output is not None: - self._last_policy_output = np.zeros((self.optimizer_cfg.num_rollouts, POLICY_OUTPUT_DIM)) + self._last_policy_output = None normalizer_cls = normalizer_registry.get(self.action_normalizer_type) if normalizer_cls is None: @@ -243,58 +292,57 @@ def update_action(self) -> None: self.action_normalizer = self._init_action_normalizer() # call entrypoint prior to optimization - self.optimizer.pre_optimization(self.times, new_times) - - # run optimization loop - i = 0 - while i < self.max_opt_iters and not self.optimizer.stop_cond(): - # sample controls and clamp to action bounds - candidate_knots_normalized = self.optimizer.sample_control_knots(nominal_knots_normalized) - candidate_knots_normalized = np.clip( - candidate_knots_normalized, - self.action_normalizer.normalize(self.task.actuator_ctrlrange[:, 0]), - self.action_normalizer.normalize(self.task.actuator_ctrlrange[:, 1]), - ) - self.candidate_knots = self.action_normalizer.denormalize(candidate_knots_normalized) - - # Evaluate rollout controls at sim timesteps. - candidate_splines = make_spline(new_times, self.candidate_knots, self.spline_order) - self.rollout_controls = candidate_splines(self.time + self.rollout_times) - - # Roll out dynamics with action sequences. - self.task.pre_rollout(self.current_state) - sim_controls = self.task.task_to_sim_ctrl(self.rollout_controls) - self.states, self.sensors, policy_output = self.rollout_backend.rollout( - self.current_state, - sim_controls, - self._last_policy_output, - ) - if policy_output is not None: - self._last_policy_output = policy_output - self.task.post_rollout( - self.states, - self.sensors, - self.rollout_controls, - self.system_metadata, - ) - self.rewards = self.task.reward( - self.states, - self.sensors, - self.rollout_controls, - self.system_metadata, - ) - - # Update nominal knots for next optimization iteration - nominal_knots_normalized = self.optimizer.update_nominal_knots(candidate_knots_normalized, self.rewards) - - # Update action normalizer - self.action_normalizer.update(self.candidate_knots) + self.optimizer.pre_optimization(self.times, self._new_times) + + def _sample_controls(self) -> np.ndarray: + """Sample control knots and prepare rollout controls for this iteration.""" + # sample controls and clamp to action bounds + self._candidate_knots_normalized = self.optimizer.sample_control_knots(self._nominal_knots_normalized) + self._candidate_knots_normalized = np.clip( + self._candidate_knots_normalized, + self.action_normalizer.normalize(self.task.actuator_ctrlrange[:, 0]), + self.action_normalizer.normalize(self.task.actuator_ctrlrange[:, 1]), + ) + self.candidate_knots = self.action_normalizer.denormalize(self._candidate_knots_normalized) + + # Evaluate rollout controls at sim timesteps. + candidate_splines = make_spline(self._new_times, self.candidate_knots, self.spline_order) + rollout_controls = candidate_splines(self.time + self.rollout_times) + return rollout_controls + + def _pre_rollout(self) -> None: + """Pre-rollout phase: prepare task for rollout.""" + self.task.pre_rollout(self.current_state) + + def _post_rollout(self) -> None: + """Post-rollout phase: process rollout results and compute rewards.""" + self.task.post_rollout( + self.states, + self.sensors, + self.rollout_controls, + self.system_metadata, + ) + self.rewards = self.task.reward( + self.states, + self.sensors, + self.rollout_controls, + self.system_metadata, + ) - i += 1 + def _update_iteration(self) -> None: + """Update phase: update nominal knots and normalizer for next iteration.""" + # Update nominal knots for next optimization iteration + self._nominal_knots_normalized = self.optimizer.update_nominal_knots( + self._candidate_knots_normalized, self.rewards + ) + # Update action normalizer + self.action_normalizer.update(self.candidate_knots) + def _post_optimization(self) -> None: + """Finalization phase after optimization loop. Called once per update_action.""" # Update nominal controls and spline. - self.nominal_knots = self.action_normalizer.denormalize(nominal_knots_normalized) - self.times = new_times + self.nominal_knots = self.action_normalizer.denormalize(self._nominal_knots_normalized) + self.times = self._new_times self.update_spline(self.times, self.nominal_knots) self.update_traces() @@ -302,6 +350,17 @@ def action(self, time: float) -> np.ndarray: """Current best action of policy.""" return self.spline(time) + def compute(self, data: MjData) -> np.ndarray: + """Compute control action for given MjData state. + + Args: + data: MuJoCo data object with current state. + + Returns: + Control action at the current time. + """ + return self.action(data.time) + def update_spline(self, times: np.ndarray, controls: np.ndarray) -> None: """Update the spline with new timesteps / controls.""" self.spline = make_spline(times, controls, self.spline_order) @@ -318,7 +377,7 @@ def reset(self) -> None: self.update_spline(self.times, self.nominal_knots) # Reset policy output state for locomotion policy tasks if self.task.uses_locomotion_policy: - self._last_policy_output = np.zeros((self.optimizer_cfg.num_rollouts, POLICY_OUTPUT_DIM)) + self._last_policy_output = None def update_traces(self) -> None: """Update traces by extracting data from sensors readings. @@ -379,6 +438,207 @@ def _init_action_normalizer(self) -> Normalizer: return make_normalizer(self.action_normalizer_type, self.model.nu, **action_normalizer_kwargs) +class BatchedControllers: + """Coordinates multiple controllers sharing a single RolloutBackend. + + This class manages batched rollouts across multiple controllers, executing + a single GPU rollout for all controllers at each optimization iteration. + + Usage: + # Create shared backend with num_threads per problem and num_problems + num_rollouts = 64 # rollouts per controller + num_problems = 3 # number of controllers + backend = RolloutBackend(model, num_threads=num_rollouts, num_problems=num_problems) + + # Create batched controller coordinator + batched = BatchedControllers(config, task, optimizer, backend) + + # Update all controllers with batched rollouts + batched.update_action() + """ + + def __init__( + self, + controller_config: ControllerConfig, + task: Task, + optimizer: Optimizer, + rollout_backend: MJWarpRolloutBackend, + ) -> None: + """Initialize the batched controllers. + + Args: + controller_config: Configuration for all controllers. + task: Template task instance (new instances created from its class and model_path). + optimizer: Template optimizer instance (deep copied for each controller). + rollout_backend: The shared WarpRolloutBackend instance. Should be initialized with + num_problems equal to len(controllers). + """ + self.num_problems = rollout_backend.num_problems + self.controllers = [] + for _ in range(self.num_problems): + new_task = task.__class__(model_path=task.model_path) + new_task.config = copy.deepcopy(task.config) + controller = Controller( + controller_config=controller_config, + task=new_task, + optimizer=copy.deepcopy(optimizer), + rollout_backend=rollout_backend, + ) + self.controllers.append(controller) + self.rollout_backend = rollout_backend + + # Validate that all controllers use the shared backend + for i, ctrl in enumerate(self.controllers): + if ctrl.rollout_backend is not rollout_backend: + raise ValueError( + f"Controller {i} does not use the shared rollout_backend. " + "All controllers must share the same RolloutBackend instance." + ) + + # Validate num_problems matches number of controllers + if rollout_backend.num_problems != len(self.controllers): + raise ValueError( + f"RolloutBackend num_problems ({rollout_backend.num_problems}) does not match " + f"number of controllers ({len(self.controllers)}). " + f"Initialize backend with num_problems={len(self.controllers)}." + ) + + # Initialize timers for update_action() breakdown + self.timer_sample_controls = Timer("Sample Controls", unit="ms") + self.timer_rollout = Timer("Batched Rollout", unit="ms") + self.timer_rewards = Timer("Rewards ", unit="ms") + self.timer_update_iter = Timer("Update Iter ", unit="ms") + self.timer_post_opt = Timer("Post Opt ", unit="ms") + + # Policy output state for hierarchical control (warp array, kept on GPU between rollouts) + self._last_policy_output = None + + def update_action(self) -> None: + """Update all controllers with coordinated batched rollouts. + + This method runs the optimization loop across all controllers, + batching their rollouts into a single GPU execution per iteration. + """ + # Pre-optimization for all controllers + for ctrl in self.controllers: + ctrl._pre_optimization() + + # Run optimization loop - all controllers iterate together + max_iters = min(ctrl.max_opt_iters for ctrl in self.controllers) + for _ in range(max_iters): + # Sample controls for all controllers + self.timer_sample_controls.tic() + for ctrl in self.controllers: + ctrl.rollout_controls = ctrl._sample_controls() + self.timer_sample_controls.toc() + + # Pre-rollout for all controllers + for ctrl in self.controllers: + ctrl._pre_rollout() + + # Execute batched rollout for all controllers + self.timer_rollout.tic() + self._execute_batched_rollout() + self.timer_rollout.toc() + + # Post-rollout (compute rewards) for all controllers + self.timer_rewards.tic() + for ctrl in self.controllers: + ctrl._post_rollout() + self.timer_rewards.toc() + + # Update iteration for all controllers + self.timer_update_iter.tic() + for ctrl in self.controllers: + ctrl._update_iteration() + self.timer_update_iter.toc() + + # Post-optimization for all controllers + self.timer_post_opt.tic() + for ctrl in self.controllers: + ctrl._post_optimization() + self.timer_post_opt.toc() + + def _execute_batched_rollout(self) -> None: + """Execute a single batched rollout for all controllers.""" + # Collect x0 from all controllers: shape (num_problems, x0_dim) + x0_stacked = np.stack([ctrl.current_state for ctrl in self.controllers], axis=0) + + # Convert task-space controls to sim-space, then batch: shape (num_problems * num_threads, horizon, model.nu) + controls_batched = np.concatenate( + [ctrl.task.task_to_sim_ctrl(ctrl.rollout_controls) for ctrl in self.controllers], axis=0 + ) + + # Execute the batched rollout (policy output tensor is passed through directly) + all_states, all_sensors, self._last_policy_output = self.rollout_backend.rollout( + x0_stacked, + controls_batched, + self._last_policy_output, + ) + + # Distribute states/sensors back to each controller + num_threads = self.rollout_backend.num_threads + for i, ctrl in enumerate(self.controllers): + start_idx = i * num_threads + end_idx = (i + 1) * num_threads + ctrl.states = all_states[start_idx:end_idx] + ctrl.sensors = all_sensors[start_idx:end_idx] + + def reset(self) -> None: + """Reset all controllers.""" + for ctrl in self.controllers: + ctrl.reset() + self._last_policy_output = None + + def print_timer_stats(self) -> None: + """Print timing statistics for update_action() breakdown.""" + self.timer_sample_controls.print_stats() + self.timer_rollout.print_stats() + self.timer_rewards.print_stats() + self.timer_update_iter.print_stats() + self.timer_post_opt.print_stats() + if hasattr(self.rollout_backend, "print_timer_stats"): + self.rollout_backend.print_timer_stats() + + def reset_timers(self) -> None: + """Reset all timers.""" + self.timer_sample_controls.reset() + self.timer_rollout.reset() + self.timer_rewards.reset() + self.timer_update_iter.reset() + self.timer_post_opt.reset() + if hasattr(self.rollout_backend, "reset_timers"): + self.rollout_backend.reset_timers() + + def update_states(self, state_msgs: list) -> None: + """Update states for all controllers. + + Args: + state_msgs: List of MujocoState messages, one per controller. + """ + if len(state_msgs) != len(self.controllers): + raise ValueError(f"Expected {len(self.controllers)} state messages, got {len(state_msgs)}") + for ctrl, state_msg in zip(self.controllers, state_msgs, strict=False): + ctrl.update_states(state_msg) + + def set_init_previous_actions(self, previous_actions_list: list[np.ndarray | None]) -> None: + """Sync previous_actions from sims to the batched policy output state. + + Broadcasts per-problem actions to all threads. + + Args: + previous_actions_list: List of previous actions arrays, one per controller/problem. + """ + if all(pa is None for pa in previous_actions_list): + self._last_policy_output = None + else: + pa_np = np.stack([pa for pa in previous_actions_list if pa is not None], axis=0) + pa_broadcast = np.repeat(pa_np, self.rollout_backend.num_threads, axis=0) + import warp as wp # noqa: PLC0415 + + self._last_policy_output = wp.array(pa_broadcast, dtype=wp.float32, device=self.rollout_backend.device) + + def make_spline(times: np.ndarray, controls: np.ndarray, spline_order: str) -> interp1d: """Helper function for creating spline objects. @@ -406,9 +666,21 @@ def make_controller( init_optimizer: str, task_registration_cfg: DictConfig | None = None, optimizer_registration_cfg: DictConfig | None = None, - rollout_backend: Literal["mujoco"] = "mujoco", + rollout_backend: Literal["mujoco"] | MJWarpRolloutBackend = "mujoco", ) -> Controller: - """Make a controller.""" + """Make a controller. + + Args: + init_task: The task name to use. + init_optimizer: The optimizer name to use. + task_registration_cfg: Optional task registration config. + optimizer_registration_cfg: Optional optimizer registration config. + rollout_backend: Either a backend type string ("mujoco") to create a new backend, + or an existing WarpRolloutBackend instance to share with other controllers. + + Returns: + The created Controller instance. + """ available_optimizers = get_registered_optimizers() available_tasks = get_registered_tasks() if task_registration_cfg is not None: diff --git a/judo/models/policies/spot_locomotion.pt b/judo/models/policies/spot_locomotion.pt new file mode 100644 index 0000000000000000000000000000000000000000..8671e7364e8ba24f005928d07c2b2085fbf860e2 GIT binary patch literal 841139 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 z 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

jks24x<}5c1QHN0$u7 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

K!^0jyo3xTcW{S?!K=8=bv%^t_%U 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

lI=iDp;B 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

IR}mI2 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

_2yq+_Xwu`IsA0} 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 EI;)mH7!r-HF;P~GFX6Y^qPMy=~^xBt@61$5= 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

A&Foia+yv|94oPR!C~}w!!t}du= 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ž`X&@I_^OC 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 K{CxdCUi&|u7{fCF literal 0 HcmV?d00001 diff --git a/judo/models/xml/spot_primitive/robot.xml b/judo/models/xml/spot_primitive/robot.xml index e8c190e4..ef8ff873 100644 --- a/judo/models/xml/spot_primitive/robot.xml +++ b/judo/models/xml/spot_primitive/robot.xml @@ -7,7 +7,7 @@ - + diff --git a/judo/models/xml/spot_tire/robot.xml b/judo/models/xml/spot_tire/robot.xml index 9555b724..03734021 100644 --- a/judo/models/xml/spot_tire/robot.xml +++ b/judo/models/xml/spot_tire/robot.xml @@ -73,7 +73,7 @@ - + diff --git a/judo/simulation/policy_mj_simulation.py b/judo/simulation/policy_mj_simulation.py index ad60b39f..aed5ef03 100644 --- a/judo/simulation/policy_mj_simulation.py +++ b/judo/simulation/policy_mj_simulation.py @@ -3,6 +3,7 @@ """MuJoCo Simulation with locomotion policy support.""" from pathlib import Path +from typing import NoReturn import numpy as np from mujoco import mj_forward diff --git a/judo/tasks/base.py b/judo/tasks/base.py index 02d4ff4d..f1feeb30 100644 --- a/judo/tasks/base.py +++ b/judo/tasks/base.py @@ -108,6 +108,10 @@ def reset(self) -> None: self.data.qvel = np.zeros_like(self.data.qvel) mujoco.mj_forward(self.model, self.data) + def success(self, model: MjModel, data: MjData, metadata: dict[str, Any] | None = None) -> bool: + """Check if the task was completed successfully. Override in subclasses.""" + return True + @property def physics_substeps(self) -> int: """Number of physics steps per control step.""" diff --git a/judo/tasks/spot/spot_base.py b/judo/tasks/spot/spot_base.py index 87e55630..1a4e83c3 100644 --- a/judo/tasks/spot/spot_base.py +++ b/judo/tasks/spot/spot_base.py @@ -12,6 +12,7 @@ import mujoco import numpy as np +from mujoco import MjData, MjModel from judo import MODEL_PATH from judo.tasks.base import Task, TaskConfig @@ -160,6 +161,7 @@ def __init__( [0, 0, 0] + list(ARM_STOWED_POS) + [0] * 12 + [0, 0, STANDING_HEIGHT_CMD] ) + self.body_pose_idx = self.get_joint_position_start_index("base") self.reset() @property @@ -434,6 +436,15 @@ def reset_pose(self) -> np.ndarray: ] ) + def optimizer_warm_start(self) -> np.ndarray: + """Warm start from default command (arm unstowed, legs standing).""" + return self.default_command.copy() + + def success(self, model: MjModel, data: MjData, metadata: dict[str, Any] | None = None) -> bool: + """Check that Spot is still standing. Subclasses should AND with super().success().""" + body_height = data.qpos[self.body_pose_idx + 2] + return bool(body_height > self.config.spot_fallen_threshold) + def reset(self) -> None: """Reset the simulation to the default pose.""" self.data.qpos[:] = self.reset_pose diff --git a/judo/tasks/spot/spot_box_push.py b/judo/tasks/spot/spot_box_push.py index 12f38085..d96fe5af 100644 --- a/judo/tasks/spot/spot_box_push.py +++ b/judo/tasks/spot/spot_box_push.py @@ -9,6 +9,7 @@ from typing import Any import numpy as np +from mujoco import MjData, MjModel from judo import MODEL_PATH from judo.tasks.spot.spot_base import SpotBase, SpotBaseConfig @@ -32,6 +33,7 @@ class SpotBoxPushConfig(SpotBaseConfig): orientation_threshold: float = 0.5 fall_penalty: float = 2500.0 w_controls: float = 0.0 + goal_distance_threshold: float = 0.5 goal_position: np.ndarray = np_1d_field( np.array([0.0, 0.0, BOX_HALF_LENGTH]), names=["x", "y", "z"], @@ -105,6 +107,12 @@ def reward( + controls_reward ) + def success(self, model: MjModel, data: MjData, metadata: dict[str, Any] | None = None) -> bool: + """Check if the box reached the goal and Spot is still standing.""" + object_pos = data.qpos[self.object_pose_idx : self.object_pose_idx + 3] + at_goal = np.linalg.norm(object_pos - self.config.goal_position) <= self.config.goal_distance_threshold + return bool(at_goal and super().success(model, data, metadata)) + @property def reset_pose(self) -> np.ndarray: """Reset pose for the box push task.""" diff --git a/judo/tasks/spot/spot_constants.py b/judo/tasks/spot/spot_constants.py index 88f2bac6..48d8d986 100644 --- a/judo/tasks/spot/spot_constants.py +++ b/judo/tasks/spot/spot_constants.py @@ -101,6 +101,26 @@ ARM_SOFT_LOWER_JOINT_LIMITS = ARM_UNSTOWED_POS - np.array([1.0, 1.0, 0.8, np.pi / 2, 0.7, np.pi / 4, 0]) ARM_SOFT_UPPER_JOINT_LIMITS = ARM_UNSTOWED_POS + np.array([1.0, 0.8, 0.6, np.pi / 2, 0.9, np.pi / 4, 0]) +### Locomotion Policy Constants +RL_LOCOMOTION_COMMAND_LENGTH = 25 + +# Isaac<->MuJoCo joint index mappings +ISAAC_TO_MUJOCO_INDICES_12 = [0, 4, 8, 1, 5, 9, 2, 6, 10, 3, 7, 11] +ISAAC_TO_MUJOCO_INDICES_19 = [1, 6, 11, 2, 7, 12, 3, 8, 13, 4, 9, 14, 0, 5, 10, 15, 16, 17, 18] +MUJOCO_TO_ISAAC_INDICES_12 = [0, 3, 6, 9, 1, 4, 7, 10, 2, 5, 8, 11] +MUJOCO_TO_ISAAC_INDICES_19 = [12, 0, 3, 6, 9, 13, 1, 4, 7, 10, 14, 2, 5, 8, 11, 15, 16, 17, 18] + +# Default joint offsets for locomotion policy (Isaac order, 19 joints) +LOCOMOTION_DEFAULT_JOINTS_OFFSET = ( + 0.0, 0.12, -0.12, 0.12, -0.12, + -0.9, 0.5, 0.5, 0.5, 0.5, + 1.8, -1.0, -1.0, -1.0, -1.0, + 0.0, -0.9, 0.0, -1.54, +) + +# Default leg offsets for locomotion policy (Isaac order, 12 legs) +LOCOMOTION_DEFAULT_LEGS_OFFSET = (0.12, -0.12, 0.12, -0.12, 0.5, 0.5, 0.5, 0.5, -1.0, -1.0, -1.0, -1.0) + ### Command Indices # Command structure: [base_vel(3), arm(7), legs(12), torso(3)] = 25 dimensions BASE_VEL_CMD_INDS = [0, 1, 2] diff --git a/judo/tasks/spot/spot_navigate.py b/judo/tasks/spot/spot_navigate.py index eb88b886..0cf15669 100644 --- a/judo/tasks/spot/spot_navigate.py +++ b/judo/tasks/spot/spot_navigate.py @@ -9,6 +9,7 @@ from typing import Any import numpy as np +from mujoco import MjData, MjModel from judo.tasks.spot.spot_base import SpotBase, SpotBaseConfig from judo.tasks.spot.spot_constants import LEGS_STANDING_POS, STANDING_HEIGHT @@ -22,6 +23,7 @@ class SpotNavigateConfig(SpotBaseConfig): w_goal: float = 60.0 fall_penalty: float = 2500.0 w_controls: float = 0.0 + goal_distance_threshold: float = 0.5 goal_position: np.ndarray = np_1d_field( np.array([0.0, 0.0, STANDING_HEIGHT]), names=["x", "y", "z"], @@ -75,6 +77,12 @@ def reward( return spot_fallen_reward + goal_reward + controls_reward + def success(self, model: MjModel, data: MjData, metadata: dict[str, Any] | None = None) -> bool: + """Check if Spot reached the goal and is still standing.""" + body_pos = data.qpos[self.body_pose_idx : self.body_pose_idx + 3] + at_goal = np.linalg.norm(body_pos - self.config.goal_position) <= self.config.goal_distance_threshold + return bool(at_goal and super().success(model, data, metadata)) + @property def reset_pose(self) -> np.ndarray: """Reset pose for the navigate task.""" diff --git a/judo/tasks/spot/spot_tire_roll.py b/judo/tasks/spot/spot_tire_roll.py index 20766957..2cb07897 100644 --- a/judo/tasks/spot/spot_tire_roll.py +++ b/judo/tasks/spot/spot_tire_roll.py @@ -10,6 +10,7 @@ from typing import Any import numpy as np +from mujoco import MjData, MjModel from judo import MODEL_PATH from judo.tasks.spot.spot_base import SpotBase, SpotBaseConfig @@ -136,6 +137,14 @@ def reward( + tire_angular_velocity_reward ) + def success(self, model: MjModel, data: MjData, metadata: dict[str, Any] | None = None) -> bool: + """Check if the tire is at goal, upright, and Spot is still standing.""" + object_pos = data.qpos[self.object_pose_idx : self.object_pose_idx + 3] + tire_y_axis = data.sensordata[self.object_y_axis_idx : self.object_y_axis_idx + 3] + at_goal = np.linalg.norm(object_pos - self.config.goal_position) <= self.config.goal_distance_threshold + upright = np.abs(tire_y_axis[2]) <= 0.1 + return bool(at_goal and upright and super().success(model, data, metadata)) + @property def reset_pose(self) -> np.ndarray: """Reset pose for the tire roll task.""" diff --git a/judo/tasks/spot/spot_tire_upright.py b/judo/tasks/spot/spot_tire_upright.py index e0b078cb..09026bf4 100644 --- a/judo/tasks/spot/spot_tire_upright.py +++ b/judo/tasks/spot/spot_tire_upright.py @@ -86,9 +86,6 @@ def __init__( def _setup_sensor_indices(self) -> None: """Setup sensor indices for reward computation.""" - # Body pose index (base joint is first) - self.body_pose_idx = self.get_joint_position_start_index("base") - # Object pose index (tire joint) self.object_pose_idx = self.get_joint_position_start_index("tire_joint") @@ -331,6 +328,6 @@ def success( # Get tire y-axis sensor data tire_y_axis = data.sensordata[self.tire_y_axis_idx : self.tire_y_axis_idx + 3] - # Check if y-axis is horizontal (z-component close to 0) - orientation_error = np.abs(tire_y_axis[2]) - return bool(orientation_error <= 0.1) + # Check if y-axis is horizontal (z-component close to 0) and Spot is still standing + upright = np.abs(tire_y_axis[2]) <= 0.1 + return bool(upright and super().success(model, data, metadata)) diff --git a/judo/utils/mjwarp_rollout_backend.py b/judo/utils/mjwarp_rollout_backend.py new file mode 100644 index 00000000..3315440c --- /dev/null +++ b/judo/utils/mjwarp_rollout_backend.py @@ -0,0 +1,270 @@ +# Copyright (c) 2025 Robotics and AI Institute LLC. All rights reserved. + +"""GPU-accelerated rollout backend using mujoco_warp (NVIDIA Warp).""" + +import mujoco_warp as mjw +import numpy as np +import warp as wp +from mujoco import MjData, MjModel + +from judo.controller.batched_spot_locomotion import BatchedSpotLocomotion +from judo.utils.rollout_backend import RolloutBackend +from judo.utils.timer import Timer + +NCONMAX = 256 +NJMAX = 900 +DEVICE = "cuda:0" + + +@wp.kernel +def _copy_target_to_ctrl( + target_q: wp.array2d(dtype=wp.float32), + ctrl: wp.array2d(dtype=wp.float32), + n_controlled: int, +): + """Copy target_q into the first n_controlled columns of ctrl.""" + i = wp.tid() + for j in range(n_controlled): + ctrl[i, j] = target_q[i, j] + + +class PassThroughController: + """Passes commands through as target joint positions (no locomotion policy).""" + + def compute_batch(self, cmd, qpos, qvel, previous_actions): + return cmd, None + + def reset(self): + pass + + @property + def target_frequency(self): + return float("inf") + + +class MJWarpRolloutBackend(RolloutBackend): + """GPU-accelerated rollout backend using mujoco_warp. + + Supports two modes: + - Direct control: controls directly set actuator commands (default) + - Hierarchical control: controls are processed through locomotion policy + PD controller + """ + + def __init__( + self, + model: MjModel, + num_threads: int, + num_problems: int = 1, + locomotion_controller: BatchedSpotLocomotion | None = None, + device: str = DEVICE, + ) -> None: + """Initialize the backend with optional hierarchical control. + + Args: + model: MuJoCo model. + num_threads: Number of parallel rollouts per problem. + num_problems: Number of independent problems. + locomotion_controller: Locomotion policy (e.g. BatchedSpotLocomotion) or None. + device: Device for GPU operations. + """ + assert device != "cpu", "RolloutBackend requires a GPU device." + + self.device = device + self.model = model + self.data = MjData(self.model) + self.num_threads = num_threads + self.num_problems = num_problems + self.num_worlds = num_threads * num_problems + + with wp.ScopedDevice(device): + self.mjw_model = mjw.put_model(self.model) + self.mjw_model.opt.ccd_iterations = 60 + self.mjw_data = mjw.put_data( + self.model, + self.data, + nworld=self.num_worlds, + nconmax=NCONMAX, + njmax=NJMAX, + ) + + # Warm up kernels before CUDA graph capture (compilation not allowed during capture) + mjw.step(self.mjw_model, self.mjw_data) + wp.synchronize() + + # Capture CUDA graph for step function + with wp.ScopedCapture() as capture: + mjw.step(self.mjw_model, self.mjw_data) + self.mjw_step_graph = capture.graph + + # Initialize hierarchical control (optional) + self.locomotion_controller = locomotion_controller if locomotion_controller else PassThroughController() + + # Calculate policy decimation + physics_dt = model.opt.timestep + self.policy_decimation = max( + 1, int(1.0 / (self.locomotion_controller.target_frequency * physics_dt)) + ) + self.global_step_counter = 0 + + # Initialize timers for performance measurement + self.timer_cpu_to_gpu = Timer("CPU->GPU", unit="ms") + self.timer_rollout = Timer("Rollout ", unit="ms") + self.timer_gpu_to_cpu = Timer("GPU->CPU", unit="ms") + + def rollout( + self, + x0: np.ndarray, + controls: np.ndarray, + last_policy_output: wp.array | None = None, + ) -> tuple[np.ndarray, np.ndarray, wp.array | None]: + """Conduct a GPU-accelerated rollout using mujoco_warp. + + Supports both single-problem and multi-problem modes: + - Single problem: x0 shape (nq + nv,), controls shape (num_threads, horizon, nu) + - Multi-problem: x0 shape (num_problems, nq + nv), controls shape (num_problems*num_threads, horizon, nu) + + Args: + x0: Initial state(s) as [qpos, qvel] (no time). + controls: Control inputs. + last_policy_output: Previous policy outputs as warp array on GPU, + shape (num_worlds, policy_dim), or None. + + Returns: + Tuple of (states, sensors, policy_output): + - states: shape (num_worlds, horizon, nq + nv) + - sensors: shape (num_worlds, horizon, nsensordata) + - policy_output: Final policy outputs as warp array on GPU, or None. + """ + nq = self.model.nq + nv = self.model.nv + nu = self.model.nu + nsensordata = self.model.nsensordata + horizon = controls.shape[1] + + if x0.ndim == 1: + x0_batched = np.tile(x0, (self.num_threads, 1)) + else: + x0_batched = np.repeat(x0, self.num_threads, axis=0) + + num_worlds = x0_batched.shape[0] + + full_states = np.concatenate([np.zeros((num_worlds, 1)), x0_batched], axis=-1) + + assert full_states.shape[-1] == nq + nv + 1 + assert full_states.ndim == 2 + assert controls.ndim == 3 + assert controls.shape[0] == num_worlds + + # CPU -> GPU copy + self.timer_cpu_to_gpu.tic() + full_states_wp = wp.array(full_states, dtype=wp.float32) + controls_wp = wp.array(controls, dtype=wp.float32) + + out_qpos_wp = wp.zeros((num_worlds, horizon, nq), dtype=wp.float32) + out_qvel_wp = wp.zeros((num_worlds, horizon, nv), dtype=wp.float32) + out_sensors_wp = wp.zeros((num_worlds, horizon, nsensordata), dtype=wp.float32) + + wp.copy(self.mjw_data.time, full_states_wp[:, 0]) + wp.copy(self.mjw_data.qpos, full_states_wp[:, 1 : nq + 1]) + wp.copy(self.mjw_data.qvel, full_states_wp[:, 1 + nq : nq + nv + 1]) + wp.synchronize() + self.timer_cpu_to_gpu.toc() + + # GPU rollout loop + self.timer_rollout.tic() + + qpos_wp = wp.zeros((num_worlds, nq), dtype=wp.float32) + qvel_wp = wp.zeros((num_worlds, nv), dtype=wp.float32) + ctrl_wp = wp.zeros((num_worlds, nu), dtype=wp.float32) + target_q_wp = None + + previous_actions_wp = last_policy_output + + for t in range(horizon): + wp.synchronize() + + cmd_wp = controls_wp[:, t, :] + + # Update locomotion policy + if ( + target_q_wp is None + or self.global_step_counter % self.policy_decimation == 0 + ): + target_q_wp, previous_actions_wp = self.locomotion_controller.compute_batch( + cmd_wp, qpos_wp, qvel_wp, previous_actions_wp + ) + + # Copy target_q into ctrl (pad remaining actuators with zeros) + n_controlled = target_q_wp.shape[1] + wp.launch( + _copy_target_to_ctrl, + dim=num_worlds, + inputs=[target_q_wp, ctrl_wp, n_controlled], + device=self.device, + ) + wp.copy(self.mjw_data.ctrl, ctrl_wp) + + wp.capture_launch(self.mjw_step_graph) + + self.global_step_counter += 1 + + wp.copy(qpos_wp, self.mjw_data.qpos) + wp.copy(qvel_wp, self.mjw_data.qvel) + wp.copy(out_qpos_wp[:, t, :], self.mjw_data.qpos) + wp.copy(out_qvel_wp[:, t, :], self.mjw_data.qvel) + wp.copy(out_sensors_wp[:, t, :], self.mjw_data.sensordata) + + wp.synchronize() + self.timer_rollout.toc() + + # GPU -> CPU copy + self.timer_gpu_to_cpu.tic() + out_states = np.zeros((num_worlds, horizon, nq + nv), dtype=np.float32) + out_states[:, :, :nq] = out_qpos_wp.numpy() + out_states[:, :, nq : nq + nv] = out_qvel_wp.numpy() + out_sensors = out_sensors_wp.numpy() + self.timer_gpu_to_cpu.toc() + + return out_states, out_sensors, previous_actions_wp + + def update(self, num_threads: int, num_problems: int = 1) -> None: + """Update the backend with a new number of threads.""" + self.num_threads = num_threads + self.num_problems = num_problems + self.num_worlds = num_threads * num_problems + + with wp.ScopedDevice(DEVICE): + self.mjw_model = mjw.put_model(self.model) + self.mjw_model.opt.ccd_iterations = 60 + self.mjw_data = mjw.put_data( + self.model, + self.data, + nworld=self.num_worlds, + nconmax=NCONMAX, + njmax=NJMAX, + ) + + # Warm up kernels before CUDA graph capture + mjw.step(self.mjw_model, self.mjw_data) + wp.synchronize() + + with wp.ScopedCapture() as capture: + mjw.step(self.mjw_model, self.mjw_data) + self.mjw_step_graph = capture.graph + + def print_timer_stats(self) -> None: + """Print timing statistics for all rollout operations.""" + self.timer_cpu_to_gpu.print_stats() + self.timer_rollout.print_stats() + self.timer_gpu_to_cpu.print_stats() + + def reset_timers(self) -> None: + """Reset all timing statistics.""" + self.timer_cpu_to_gpu.reset() + + def reset(self) -> None: + """Reset internal state (controllers and step counter).""" + self.locomotion_controller.reset() + self.global_step_counter = 0 + self.timer_rollout.reset() + self.timer_gpu_to_cpu.reset() diff --git a/judo/utils/policy_mj_rollout_backend.py b/judo/utils/policy_mj_rollout_backend.py index ca19f1a7..a0939743 100644 --- a/judo/utils/policy_mj_rollout_backend.py +++ b/judo/utils/policy_mj_rollout_backend.py @@ -78,7 +78,7 @@ def rollout( x0 = np.tile(x0, (self.num_threads, 1)) if last_policy_output is None: - raise ValueError("last_policy_output is required for PolicyMJRolloutBackend") + last_policy_output = np.zeros((x0.shape[0], 12)) x0 = np.asarray(x0, dtype=np.float64) controls = np.asarray(controls, dtype=np.float64) diff --git a/judo/utils/rollout_backend.py b/judo/utils/rollout_backend.py index 399f283c..a3a1f144 100644 --- a/judo/utils/rollout_backend.py +++ b/judo/utils/rollout_backend.py @@ -3,6 +3,7 @@ """Base class for rollout backends.""" from abc import ABC, abstractmethod +from typing import Any import numpy as np @@ -21,8 +22,8 @@ def rollout( self, x0: np.ndarray, controls: np.ndarray, - last_policy_output: np.ndarray | None = None, - ) -> tuple[np.ndarray, np.ndarray, np.ndarray | None]: + last_policy_output: Any = None, + ) -> tuple[np.ndarray, np.ndarray, Any]: """Conduct parallel rollouts. Args: diff --git a/judo/utils/timer.py b/judo/utils/timer.py new file mode 100644 index 00000000..5f92cdaf --- /dev/null +++ b/judo/utils/timer.py @@ -0,0 +1,177 @@ +# Copyright (c) 2025 Robotics and AI Institute LLC. All rights reserved. + +"""Timer utility for measuring and analyzing code execution time.""" + +import time +from typing import Callable + +import numpy as np + + +class Timer: + """Timer for measuring code execution time with statistics. + + Uses MATLAB-style tic/toc naming. + + Example: + >>> timer = Timer("inference") + >>> for _ in range(100): + ... timer.tic() + ... model.forward(x) + ... timer.toc() + >>> timer.print_stats() + [inference:] mean=1.234ms, std=0.123ms, ..., total=123.400ms (n=100) + + # Or use as context manager: + >>> with timer: + ... model.forward(x) + """ + + def __init__(self, name: str = "Timer", unit: str = "ms") -> None: + """Initialize the timer. + + Args: + name: Name of the timer for display purposes. + unit: Time unit for display ("s", "ms", "us", "ns"). Default is "ms". + """ + self.name = name + self.unit = unit + self._tik: float | None = None + self._times: list[float] = [] + + def tic(self) -> None: + """Start the timer (MATLAB-style).""" + self._tik = time.perf_counter() + + def toc(self) -> float: + """Stop the timer and record the elapsed time (MATLAB-style). + + Returns: + The elapsed time in seconds. + + Raises: + RuntimeError: If the timer was not started. + """ + if self._tik is None: + raise RuntimeError("Timer was not started. Call tic() first.") + elapsed = time.perf_counter() - self._tik + self._times.append(elapsed) + self._tik = None + return elapsed + + # Aliases for backwards compatibility + start = tic + stop = toc + + def __enter__(self) -> "Timer": + """Context manager entry - starts the timer.""" + self.tic() + return self + + def __exit__(self, *args: object) -> None: + """Context manager exit - stops the timer.""" + self.toc() + + def reset(self) -> None: + """Reset all recorded times.""" + self._times = [] + self._tik = None + + @property + def times(self) -> list[float]: + """Get all recorded times in seconds.""" + return self._times + + @property + def count(self) -> int: + """Get the number of recorded times.""" + return len(self._times) + + def _convert_time(self, seconds: float) -> float: + """Convert time from seconds to the configured unit.""" + multipliers = {"s": 1.0, "ms": 1e3, "us": 1e6, "ns": 1e9} + return seconds * multipliers.get(self.unit, 1e3) + + @property + def mean(self) -> float: + """Get the mean time in seconds.""" + if not self._times: + return 0.0 + return float(np.mean(self._times)) + + @property + def std(self) -> float: + """Get the standard deviation of times in seconds.""" + if len(self._times) < 2: + return 0.0 + return float(np.std(self._times)) + + @property + def median(self) -> float: + """Get the median time in seconds.""" + if not self._times: + return 0.0 + return float(np.median(self._times)) + + @property + def min(self) -> float: + """Get the minimum time in seconds.""" + if not self._times: + return 0.0 + return float(np.min(self._times)) + + @property + def max(self) -> float: + """Get the maximum time in seconds.""" + if not self._times: + return 0.0 + return float(np.max(self._times)) + + @property + def total(self) -> float: + """Get the total accumulated time in seconds.""" + return sum(self._times) + + def get_stats(self) -> dict[str, float]: + """Get all statistics as a dictionary. + + Returns: + Dictionary with keys: mean, std, median, min, max, total, count. + All time values are in seconds. + """ + return { + "mean": self.mean, + "std": self.std, + "median": self.median, + "min": self.min, + "max": self.max, + "total": self.total, + "count": self.count, + } + + def print_stats(self, print_fn: Callable[[str], None] = print) -> None: + """Print timing statistics. + + Args: + print_fn: Function to use for printing (default: print). + Can be logging.info or any callable that takes a string. + """ + if not self._times: + print_fn(f"{self.name}: no measurements recorded") + return + + stats = ( + f"[{self.name}:] " + f"mean={self._convert_time(self.mean):.3f}{self.unit}, " + f"std={self._convert_time(self.std):.3f}{self.unit}, " + f"median={self._convert_time(self.median):.3f}{self.unit}, " + f"min={self._convert_time(self.min):.3f}{self.unit}, " + f"max={self._convert_time(self.max):.3f}{self.unit}, " + f"total={self._convert_time(self.total):.3f}{self.unit} " + f"(n={self.count})" + ) + print_fn(stats) + + def __repr__(self) -> str: + """Return a string representation of the timer.""" + return f"Timer(name={self.name!r}, count={self.count}, mean={self.mean:.6f}s)" diff --git a/mujoco_extensions/__init__.py b/mujoco_extensions/__init__.py index 707344a6..8c3458ba 100644 --- a/mujoco_extensions/__init__.py +++ b/mujoco_extensions/__init__.py @@ -1,11 +1,5 @@ # Copyright (c) 2025 Robotics and AI Institute LLC. All rights reserved. -import ctypes -import os - -import mujoco - - from mujoco_extensions import policy_rollout __all__ = [ diff --git a/mujoco_extensions/onnx_interface/onnx_interface.cpp b/mujoco_extensions/onnx_interface/onnx_interface.cpp index bd679945..59a7b108 100644 --- a/mujoco_extensions/onnx_interface/onnx_interface.cpp +++ b/mujoco_extensions/onnx_interface/onnx_interface.cpp @@ -102,7 +102,9 @@ VectorT Policy::policyInference(VectorT* input_vector) { } std::shared_ptr allocateOrtSession(const std::string& policy_filepath) { - static Ort::Env env{ORT_LOGGING_LEVEL_WARNING, "mujoco_extensions"}; + // Ort::Env must outlive all sessions that use it. A single static instance + // is shared across the process (Ort::Env is thread-safe). + static Ort::Env env(ORT_LOGGING_LEVEL_WARNING, "mujoco_extensions"); Ort::SessionOptions session_options; session_options.SetIntraOpNumThreads(1); return std::make_shared(env, policy_filepath.c_str(), session_options); diff --git a/mujoco_extensions/system/system_class.cpp b/mujoco_extensions/system/system_class.cpp index b21179ea..8406385f 100644 --- a/mujoco_extensions/system/system_class.cpp +++ b/mujoco_extensions/system/system_class.cpp @@ -372,25 +372,20 @@ std::vector> create_systems_vector(const mj // Vector to store the systems std::vector> systems(num_systems); - std::shared_ptr reference_session = - std::shared_ptr(OnnxInterface::allocateOrtSession(policy_filepath)); - // Function to create a system in a separate thread - auto create_system = [&](int i) { - systems[i] = std::make_shared(policy_filepath, reference_model, reference_session); - }; - - // Vector to hold the threads - std::vector threads; - threads.reserve(num_systems); + if (!reference_model) { + throw std::runtime_error("create_systems_vector: reference_model is null"); + } - // Launch threads to create System instances in parallel - for (int i = 0; i < num_systems; i++) { - threads.emplace_back(create_system, i); + std::shared_ptr reference_session; + try { + reference_session = OnnxInterface::allocateOrtSession(policy_filepath); + } catch (const std::exception& e) { + throw std::runtime_error(std::string("create_systems_vector: failed to create ONNX session: ") + e.what()); } - // Wait for all threads to finish - for (auto& thread : threads) { - thread.join(); + // Create systems sequentially — mj_copyModel is not thread-safe + for (int i = 0; i < num_systems; i++) { + systems[i] = std::make_shared(policy_filepath, reference_model, reference_session); } return systems; diff --git a/pixi.lock b/pixi.lock index 6d2aa972..1b2876d3 100644 --- a/pixi.lock +++ b/pixi.lock @@ -15,11 +15,11 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-hda65f42_9.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/c-ares-1.34.6-hb03c661_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.1.4-hbd8a1cb_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/cmake-4.2.3-hc85cc9f_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/cmake-4.2.3-hc85cc9f_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/eigen-3.4.0-h171cf75_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/gcc_impl_linux-64-13.4.0-hf2caf72_17.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/gcc_impl_linux-64-13.4.0-he2fa53e_18.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/gcc_linux-64-13.4.0-h0a5b801_21.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/gxx_impl_linux-64-13.4.0-h6a38259_17.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/gxx_impl_linux-64-13.4.0-h6a38259_18.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/gxx_linux-64-13.4.0-h587059e_21.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/icu-78.2-h33c6efd_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/kernel-headers_linux-64-4.18.0-he073ed8_9.conda @@ -31,19 +31,19 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/libev-4.33-hd590300_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.7.4-hecca717_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libffi-3.5.2-h3435931_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-15.2.0-he0feb66_17.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/libgcc-devel_linux-64-13.4.0-hd1d28cc_117.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-15.2.0-h69a702a_17.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-15.2.0-he0feb66_17.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-15.2.0-he0feb66_18.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/libgcc-devel_linux-64-13.4.0-hd1d28cc_118.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-15.2.0-h69a702a_18.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-15.2.0-he0feb66_18.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/liblzma-5.8.2-hb03c661_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libmpdec-4.0.0-hb03c661_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libnghttp2-1.67.0-had1ee68_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libsanitizer-13.4.0-h2a15e64_17.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libsanitizer-13.4.0-h2a15e64_18.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.51.2-hf4e2dac_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libssh2-1.11.1-hcf80075_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-15.2.0-h934c35e_17.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/libstdcxx-devel_linux-64-13.4.0-h6963c3b_117.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-15.2.0-hdf11a46_17.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-15.2.0-h934c35e_18.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/libstdcxx-devel_linux-64-13.4.0-h6963c3b_118.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-15.2.0-hdf11a46_18.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.41.3-h5347b49_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libuv-1.51.0-hb03c661_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.1-hb9d3cd8_2.conda @@ -51,8 +51,8 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/onnxruntime-cpp-1.19.2-h641f3bf_0_cpu.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.6.1-h35e630c_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/patchelf-0.17.2-h58526e2_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pybind11-3.0.1-pyh7a1b43c_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pybind11-global-3.0.1-pyhc7ab6ef_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pybind11-3.0.2-pyh7a1b43c_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pybind11-global-3.0.2-pyhc7ab6ef_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.13.12-hc97d973_100_cp313.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.13-8_cp313.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/readline-8.3-h853b02a_0.conda @@ -69,6 +69,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/f5/83/6ab5883f57c9c801ce5e5677242328aa45592be8a00644310a008d04f922/charset_normalizer-3.4.4-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/6d/c1/e419ef3723a074172b68aaa89c9f3de486ed4c2399e2dbd8113a4fdcaf9e/colorlog-6.10.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/94/35/386550fd60316d1e37eccdda609b074113298f23cef5bddb2049823fe666/dacite-1.9.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/55/e2/2537ebcff11c1ee1ff17d8d0b6f4db75873e3b0fb32c2d4a2ee31ecb310a/docstring_parser-0.17.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/94/53/7dc142faa1719333d57c78cfcf419f2b176770b49ebef54e0bbfa34212ac/dora_rs-0.4.1-cp37-abi3-manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/3c/3e/f3d1e28df9457089055dacf3ca7ca3751ed274d312d9a8515255d80011ec/dora_rs_cli-0.4.1-cp37-abi3-manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/78/62/0ffc083b1d5f7c95eb03b260d2622dfacb70d1153011d216260b71c8e7d9/dora_utils-0.1.1-py3-none-any.whl @@ -79,6 +80,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/6a/09/e21df6aef1e1ffc0c816f0522ddc3f6dcded766c3261813131c78a704470/gitpython-3.1.46-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/5a/3f/efeb7c6801c46e11bd666a5180f0d615f74f72264212f74f39586c6fda9d/glfw-2.10.0-py2.py27.py3.py30.py31.py32.py33.py34.py35.py36.py37.py38.py39.py310.py311.py312.py313.py314-none-manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/04/4b/29cac41a4d98d144bf5f6d33995617b185d14b22401f75ca86f384e87ff1/h11-0.16.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d9/69/4402ea66272dacc10b298cca18ed73e1c0791ff2ae9ed218d3859f9698ac/h5py-3.15.1-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/7e/f5/f66802a942d491edb555dd61e3a9961140fd64c90bce1eafd741609d334d/httpcore-1.0.9-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/2a/39/e50c7c3a983047577ee07d2a9e53faf5a69493943ec3f6a384bdc792deb2/httpx-0.28.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c6/50/e0edd38dcd63fb26a8547f13d28f7a008bc4a3fd4eb4ff030673f22ad41a/hydra_core-1.3.2-py3-none-any.whl @@ -93,7 +95,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/94/54/e7d793b573f298e1c9013b8c4dade17d481164aa517d1d7148619c2cedbf/markdown_it_py-4.0.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/28/83/36557b04cfdc317ed8a525c4993b23e43a8fbcddaddd78619112ca07138c/msgspec-0.20.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/16/47/93c7ac3a9630b49c55d76b0d02aa565543e2f62cecd885f8f574f5c745e7/mujoco-3.5.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/df/72/0c47350ec39611ff8defe9e8af10c23c9ad0235974f1999a523fcd1c3e68/mujoco-3.4.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/9e/c9/b2622292ea83fbb4ec318f5b9ab867d0a28ab43c5717bb85b0a5f6b3b0a4/networkx-3.6.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/88/b2/d0896bdcdc8d28a7fc5717c305f1a861c26e18c05047949fb371034d98bd/nodeenv-1.10.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/04/dc/46066ce18d01645541f0186877377b9371b8fa8017fa8262002b4ef22612/numpy-2.4.2-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl @@ -120,9 +122,11 @@ environments: - pypi: https://files.pythonhosted.org/packages/3a/83/4f5b250220e1a5acd31345a5ec1c95a7769725d0d8135276f399f44062f8/svg_path-7.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/16/e1/3079a9ff9b8e11b846c6ac5c8b5bfb7ff225eee721825310c91b3b50304f/tqdm-4.67.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/3c/b9/da09903ea53b677a58ba770112de6fe8b2acb8b4cd9bffae4ff6cfe7c072/trimesh-4.11.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d4/35/7541d1f046491fac8ce05d543d3f0de0af02086ad864dd3a23535ec703b9/typeguard-4.5.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/18/67/36e9267722cc04a6b9f15c7f3441c2363321a3ea07da7ae0c0707beb2a9c/typing_extensions-4.15.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/a7/f9/56b0cb8c5c287c7eec02735cce74a4c25cc56d6817bab7edde6f32b024a3/tyro-1.0.6-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/39/08/aaaad47bc4e9dc8c725e68f9d04865dbcb2052843ff09c97b08904852d84/urllib3-2.6.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/ce/de/0638d8aa83c2038c5f820151006b3bf372d109afbfdb2a8fc59187cc3690/uv-0.10.3-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/f2/b3/4b9580d62e1245df52e8516cf3e404ff39cc72634d2d749d47b1dada4161/uv-0.10.4-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - pypi: https://files.pythonhosted.org/packages/b8/b4/07ab1c828bae0eb5c72cd9a4cbe8b0376d374509be3c7055e1a399bf85c3/vhacdx-0.0.10-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/b9/c4/819f000b3d64f654a054a8b24bf8d0c5e799636393135784d0886d8c808e/viser-1.0.21-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ff/b2/83a6ddf56cdcbad4e3d841fcc55d6ba7d19aeb89c50f24dd7e859ec0805f/websockets-15.0.1-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl @@ -131,113 +135,11 @@ environments: - pypi: https://files.pythonhosted.org/packages/2e/54/647ade08bf0db230bfea292f893923872fd20be6ac6f53b2b936ba839d75/zipp-3.23.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/63/4b/e3678b4e776db00f9f7b2fe58e547e8928ef32727d7a1ff01dea010f3f13/zstandard-0.25.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl - pypi: ./ - osx-64: - - conda: https://conda.anaconda.org/conda-forge/osx-64/bzip2-1.0.8-h500dc9f_9.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/c-ares-1.34.6-hb5e19a0_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.1.4-hbd8a1cb_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/cmake-4.2.3-h965d0ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/eigen-3.4.0-hfc0b2d5_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/krb5-1.22.2-h207b36a_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/libcurl-8.18.0-h9a2545f_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/libcxx-21.1.8-h4fb565c_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/libedit-3.1.20250104-pl5321ha958ccf_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/libev-4.33-h10d778d_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/libexpat-2.7.4-h991f03e_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/libffi-3.5.2-hd1f9c09_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/liblzma-5.8.2-h11316ed_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/libmpdec-4.0.0-hf3981d6_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/libnghttp2-1.67.0-h3338091_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/libsqlite-3.51.2-hb99441e_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/libssh2-1.11.1-hed3591d_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/libuv-1.51.0-h58003a5_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/libzlib-1.3.1-hd23fc13_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/ncurses-6.5-h0622a9a_3.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/onnxruntime-cpp-1.19.2-h417c6ca_0_cpu.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/openssl-3.6.1-hb6871ef_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pybind11-3.0.1-pyh7a1b43c_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pybind11-global-3.0.1-pyhc7ab6ef_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/python-3.13.12-h894a449_100_cp313.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.13-8_cp313.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/readline-8.3-h68b038d_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/rhash-1.4.6-h6e16a3a_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/tk-8.6.13-h7142dee_3.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/zstd-1.5.7-h3eecb57_6.conda - - pypi: https://files.pythonhosted.org/packages/18/a6/907a406bb7d359e6a63f99c313846d9eec4f7e6f7437809e03aa00fa3074/absl_py-2.4.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/3e/38/7859ff46355f76f8d19459005ca000b6e7012f2f1ca597746cbcd1fbfe5e/antlr4-python3-runtime-4.9.3.tar.gz - - pypi: https://files.pythonhosted.org/packages/38/0e/27be9fdef66e72d64c0cdc3cc2823101b80585f8119b5c112c2e8f5f7dab/anyio-4.12.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/3a/2a/7cc015f5b9f5db42b7d48157e23356022889fc354a2813c15934b7cb5c0e/attrs-25.4.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/e6/ad/3cc14f097111b4de0040c83a525973216457bbeeb63739ef1ed275c1c021/certifi-2026.1.4-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/97/45/4b3a1239bbacd321068ea6e7ac28875b03ab8bc0aa0966452db17cd36714/charset_normalizer-3.4.4-cp313-cp313-macosx_10_13_universal2.whl - - pypi: https://files.pythonhosted.org/packages/6d/c1/e419ef3723a074172b68aaa89c9f3de486ed4c2399e2dbd8113a4fdcaf9e/colorlog-6.10.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/94/35/386550fd60316d1e37eccdda609b074113298f23cef5bddb2049823fe666/dacite-1.9.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/a1/ff/894f11890a526f107d3d06b0e71209b45e5a7bb3666aed23725308bbf78a/dora_rs-0.4.1.tar.gz - - pypi: https://files.pythonhosted.org/packages/f0/45/77300cbdb4137a66eedf8e2488decffbe33e1d33ec912e54fdd02f2f3084/dora_rs_cli-0.4.1.tar.gz - - pypi: https://files.pythonhosted.org/packages/78/62/0ffc083b1d5f7c95eb03b260d2622dfacb70d1153011d216260b71c8e7d9/dora_utils-0.1.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/99/1a/e6d80ab0104ba947e1e5a0c5251021a4bf374cfe3b0d88e2be62b150170d/embreex-2.17.7.post7-cp313-cp313-macosx_10_13_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/e7/98/87b5946356095738cb90a6df7b35ff69ac5750f6e783d5fbcc5cb3b6cbd7/etils-1.13.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/e6/ab/fb21f4c939bb440104cc2b396d3be1d9b7a9fd3c6c2a53d98c45b3d7c954/fsspec-2026.2.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/a0/61/5c78b91c3143ed5c14207f463aecfc8f9dbb5092fb2869baf37c273b2705/gitdb-4.0.12-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/6a/09/e21df6aef1e1ffc0c816f0522ddc3f6dcded766c3261813131c78a704470/gitpython-3.1.46-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/b3/87/de0b33f6f00687499ca1371f22aa73396341b85bf88f1a284f9da8842493/glfw-2.10.0-py2.py27.py3.py30.py31.py32.py33.py34.py35.py36.py37.py38.py39.py310.py311.py312.py313.py314-none-macosx_10_6_intel.whl - - pypi: https://files.pythonhosted.org/packages/04/4b/29cac41a4d98d144bf5f6d33995617b185d14b22401f75ca86f384e87ff1/h11-0.16.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/7e/f5/f66802a942d491edb555dd61e3a9961140fd64c90bce1eafd741609d334d/httpcore-1.0.9-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/2a/39/e50c7c3a983047577ee07d2a9e53faf5a69493943ec3f6a384bdc792deb2/httpx-0.28.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/c6/50/e0edd38dcd63fb26a8547f13d28f7a008bc4a3fd4eb4ff030673f22ad41a/hydra_core-1.3.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/0e/61/66938bbb5fc52dbdf84594873d5b51fb1f7c7794e9c0f5bd885f30bc507b/idna-3.11-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/fb/fe/301e0936b79bcab4cacc7548bf2853fc28dced0a578bab1f7ef53c9aa75b/imageio-2.37.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/a4/ed/1f1afb2e9e7f38a545d628f864d562a5ae64fe6f7a10e28ffb9b185b4e89/importlib_resources-6.5.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/69/90/f63fb5873511e014207a475e2bb4e8b2e570d655b00ac19a9a0ca0a385ee/jsonschema-4.26.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/41/45/1a4ed80516f02155c51f51e8cedb3c1902296743db0bbc66608a0db2814f/jsonschema_specifications-2025.9.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/5d/f4/2a94a3d3dfd6c6b433501b8d470a1960a20ecce93245cf2db1706adf6c19/lxml-6.0.2-cp313-cp313-macosx_10_13_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/a7/f5/9ae489a466543ca8f35f2eeeed7f043f714223e0905eaf62b2fce4684a07/manifold3d-3.3.2-cp313-cp313-macosx_10_14_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/8b/7c/c5dd5b255b9828ba5df729e62fdd470a322c938f07ef392ca03c0592bb3a/mapbox_earcut-2.0.0-cp313-cp313-macosx_10_13_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/94/54/e7d793b573f298e1c9013b8c4dade17d481164aa517d1d7148619c2cedbf/markdown_it_py-4.0.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/8a/d1/b902d38b6e5ba3bdddbec469bba388d647f960aeed7b5b3623a8debe8a76/msgspec-0.20.0-cp313-cp313-macosx_10_13_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/87/2a/371033684e4ddcda47c97661fb6e9617c0e5e3749af082a9b4d5d1bf9f27/mujoco-3.5.0-cp313-cp313-macosx_10_16_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/9e/c9/b2622292ea83fbb4ec318f5b9ab867d0a28ab43c5717bb85b0a5f6b3b0a4/networkx-3.6.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/88/b2/d0896bdcdc8d28a7fc5717c305f1a861c26e18c05047949fb371034d98bd/nodeenv-1.10.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/a1/22/815b9fe25d1d7ae7d492152adbc7226d3eff731dffc38fe970589fcaaa38/numpy-2.4.2-cp313-cp313-macosx_10_13_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/e3/94/1843518e420fa3ed6919835845df698c7e27e183cb997394e4a670973a65/omegaconf-2.3.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/b7/b9/c538f279a4e237a006a2c98387d081e9eb060d203d8ed34467cc0f0b9b53/packaging-26.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/14/a1/16c4b823838ba4c9c52c0e6bbda903a3fe5a1bdbf1b8eb4fff7156f3e318/pillow-12.1.1-cp313-cp313-macosx_10_13_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/cb/4f/679fa7e84dadbaca7a65f7cdba8d6c83febbd93ca12fa4adf40ba3b6362b/pyarrow-23.0.1-cp313-cp313-macosx_12_0_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/07/86/f1f61b7a0701f9d1299e5293d083318019f91021a4d449f94d59dbe024e4/pycollada-0.9.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/0c/c3/44f3fbbfa403ea2a7c779186dc20772604442dde72947e7d01069cbe98e3/pycparser-3.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/c7/21/705964c7812476f378728bdf590ca4b771ec72385c533964653c68e86bdc/pygments-2.19.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/de/e4/1ba6f44e491c4eece978685230dde56b14d51a0365bc1b774ddaa94d14cd/pyopengl-3.1.10-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/ec/57/56b9bcc3c9c6a792fcbaf139543cee77261f3651ca9da0c93f5c1221264b/python_dateutil-2.9.0.post0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/d1/11/0fd08f8192109f7169db964b5707a2f1e8b745d4e239b784a5a1dd80d1db/pyyaml-6.0.3-cp313-cp313-macosx_10_13_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/2c/58/ca301544e1fa93ed4f80d724bf5b194f6e4b945841c5bfd555878eea9fcb/referencing-0.37.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/1e/db/4254e3eabe8020b458f1a747140d32277ec7a271daf1d235b70dc0b4e6e3/requests-2.32.5-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/ef/45/615f5babd880b4bd7d405cc0dc348234c5ffb6ed1ea33e152ede08b2072d/rich-14.3.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/16/80/579e75e0be0439d11e479732e4c194a9c6e6d152670dae561b9525015425/robot_descriptions-1.22.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/ed/dc/d61221eb88ff410de3c49143407f6f3147acf2538c86f2ab7ce65ae7d5f9/rpds_py-0.30.0-cp313-cp313-macosx_10_12_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/04/d9/108cd989a4c0954e60b3cdc86fd2826407702b5375f6dfdab2802e5fed98/rtree-1.4.1-py3-none-macosx_10_9_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/0c/51/3468fdfd49387ddefee1636f5cf6d03ce603b75205bf439bbf0e62069bfd/scipy-1.17.0-cp313-cp313-macosx_10_14_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/c3/90/98ef257c23c46425dc4d1d31005ad7c8d649fe423a38b917db02c30f1f5a/shapely-2.1.2-cp313-cp313-macosx_10_13_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/b7/ce/149a00dd41f10bc29e5921b496af8b574d8413afcd5e30dfa0ed46c2cc5e/six-1.17.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/04/be/d09147ad1ec7934636ad912901c5fd7667e1c858e19d355237db0d0cd5e4/smmap-5.0.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/3a/83/4f5b250220e1a5acd31345a5ec1c95a7769725d0d8135276f399f44062f8/svg_path-7.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/16/e1/3079a9ff9b8e11b846c6ac5c8b5bfb7ff225eee721825310c91b3b50304f/tqdm-4.67.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/3c/b9/da09903ea53b677a58ba770112de6fe8b2acb8b4cd9bffae4ff6cfe7c072/trimesh-4.11.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/18/67/36e9267722cc04a6b9f15c7f3441c2363321a3ea07da7ae0c0707beb2a9c/typing_extensions-4.15.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/39/08/aaaad47bc4e9dc8c725e68f9d04865dbcb2052843ff09c97b08904852d84/urllib3-2.6.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/40/db/c5729ec39ed557ac673ca993abd71e5b18d71a92f95f1845152e639000ff/uv-0.10.3-py3-none-macosx_10_12_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/0e/54/c2fc08d9324bbd92735caf9207cbabada3a8dd9d270d6e46ca69eb7f883d/vhacdx-0.0.10-cp313-cp313-macosx_10_13_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/b9/c4/819f000b3d64f654a054a8b24bf8d0c5e799636393135784d0886d8c808e/viser-1.0.21-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/8a/05/aa116ec9943c718905997412c5989f7ed671bc0188ee2ba89520e8765d7b/websockets-15.0.1-cp313-cp313-macosx_10_13_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/33/76/35d05267ac82f53ae9b0e554da7c5e281ee61f3cad44c743f0fcd354f211/xxhash-3.6.0-cp313-cp313-macosx_10_13_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/c8/60/4ea0d6df0b497d51bf2ef87eaab0eb26f8bc3b3313c012da5df3383cced9/yourdfpy-0.0.60-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/2e/54/647ade08bf0db230bfea292f893923872fd20be6ac6f53b2b936ba839d75/zipp-3.23.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/35/0b/8df9c4ad06af91d39e94fa96cc010a24ac4ef1378d3efab9223cc8593d40/zstandard-0.25.0-cp313-cp313-macosx_10_13_x86_64.whl - - pypi: ./ osx-arm64: - conda: https://conda.anaconda.org/conda-forge/osx-arm64/bzip2-1.0.8-hd037594_9.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/c-ares-1.34.6-hc919400_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.1.4-hbd8a1cb_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/cmake-4.2.3-h8cb302d_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/cmake-4.2.3-h8cb302d_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/eigen-3.4.0-h49c215f_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/icu-78.2-h38cb7af_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/krb5-1.22.2-h385eeb1_0.conda @@ -257,8 +159,8 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ncurses-6.5-h5e97a16_3.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/onnxruntime-cpp-1.19.2-hda9e549_0_cpu.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/openssl-3.6.1-hd24854e_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pybind11-3.0.1-pyh7a1b43c_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pybind11-global-3.0.1-pyhc7ab6ef_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pybind11-3.0.2-pyh7a1b43c_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pybind11-global-3.0.2-pyhc7ab6ef_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-3.13.12-h20e6be0_100_cp313.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.13-8_cp313.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/readline-8.3-h46df422_0.conda @@ -274,6 +176,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/97/45/4b3a1239bbacd321068ea6e7ac28875b03ab8bc0aa0966452db17cd36714/charset_normalizer-3.4.4-cp313-cp313-macosx_10_13_universal2.whl - pypi: https://files.pythonhosted.org/packages/6d/c1/e419ef3723a074172b68aaa89c9f3de486ed4c2399e2dbd8113a4fdcaf9e/colorlog-6.10.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/94/35/386550fd60316d1e37eccdda609b074113298f23cef5bddb2049823fe666/dacite-1.9.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/55/e2/2537ebcff11c1ee1ff17d8d0b6f4db75873e3b0fb32c2d4a2ee31ecb310a/docstring_parser-0.17.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e6/86/9ce12fbbfc365b7037666ffbc79ac93ba05690b22cac8fad8d2104577dfe/dora_rs-0.4.1-cp37-abi3-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/38/82/78d57efaf364d4ae45c5e87c5c370b0999da92ecc72f9ba96949a93faa4f/dora_rs_cli-0.4.1-cp37-abi3-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/78/62/0ffc083b1d5f7c95eb03b260d2622dfacb70d1153011d216260b71c8e7d9/dora_utils-0.1.1-py3-none-any.whl @@ -283,6 +186,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/6a/09/e21df6aef1e1ffc0c816f0522ddc3f6dcded766c3261813131c78a704470/gitpython-3.1.46-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/b6/a6/6ea2f73ad4474896d9e38b3ffbe6ffd5a802c738392269e99e8c6621a461/glfw-2.10.0-py2.py27.py3.py30.py31.py32.py33.py34.py35.py36.py37.py38.py39.py310.py311.py312.py313.py314-none-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/04/4b/29cac41a4d98d144bf5f6d33995617b185d14b22401f75ca86f384e87ff1/h11-0.16.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/31/96/ba99a003c763998035b0de4c299598125df5fc6c9ccf834f152ddd60e0fb/h5py-3.15.1-cp313-cp313-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/7e/f5/f66802a942d491edb555dd61e3a9961140fd64c90bce1eafd741609d334d/httpcore-1.0.9-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/2a/39/e50c7c3a983047577ee07d2a9e53faf5a69493943ec3f6a384bdc792deb2/httpx-0.28.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c6/50/e0edd38dcd63fb26a8547f13d28f7a008bc4a3fd4eb4ff030673f22ad41a/hydra_core-1.3.2-py3-none-any.whl @@ -297,7 +201,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/94/54/e7d793b573f298e1c9013b8c4dade17d481164aa517d1d7148619c2cedbf/markdown_it_py-4.0.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/57/b6/eff0305961a1d9447ec2b02f8c73c8946f22564d302a504185b730c9a761/msgspec-0.20.0-cp313-cp313-macosx_11_0_arm64.whl - - pypi: https://files.pythonhosted.org/packages/6f/c9/26bd4979d503d03f7a6ded851c3094a5708cb534cf0dc80b4db6672da2b0/mujoco-3.5.0-cp313-cp313-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/e8/51/c3e5c3b199b1b74c85f0cb02dc0ef80363bf91ea245ee8a932804768d5e8/mujoco-3.4.0-cp313-cp313-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/9e/c9/b2622292ea83fbb4ec318f5b9ab867d0a28ab43c5717bb85b0a5f6b3b0a4/networkx-3.6.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/88/b2/d0896bdcdc8d28a7fc5717c305f1a861c26e18c05047949fb371034d98bd/nodeenv-1.10.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/09/f0/817d03a03f93ba9c6c8993de509277d84e69f9453601915e4a69554102a1/numpy-2.4.2-cp313-cp313-macosx_11_0_arm64.whl @@ -324,9 +228,11 @@ environments: - pypi: https://files.pythonhosted.org/packages/3a/83/4f5b250220e1a5acd31345a5ec1c95a7769725d0d8135276f399f44062f8/svg_path-7.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/16/e1/3079a9ff9b8e11b846c6ac5c8b5bfb7ff225eee721825310c91b3b50304f/tqdm-4.67.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/3c/b9/da09903ea53b677a58ba770112de6fe8b2acb8b4cd9bffae4ff6cfe7c072/trimesh-4.11.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d4/35/7541d1f046491fac8ce05d543d3f0de0af02086ad864dd3a23535ec703b9/typeguard-4.5.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/18/67/36e9267722cc04a6b9f15c7f3441c2363321a3ea07da7ae0c0707beb2a9c/typing_extensions-4.15.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/a7/f9/56b0cb8c5c287c7eec02735cce74a4c25cc56d6817bab7edde6f32b024a3/tyro-1.0.6-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/39/08/aaaad47bc4e9dc8c725e68f9d04865dbcb2052843ff09c97b08904852d84/urllib3-2.6.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/0b/8c/cce26f6da9f69a9f0df032d642a4cb5603249f145c368e41b0154c463ca9/uv-0.10.3-py3-none-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/63/91/c4ddf7e55e05394967615050cc364a999157a44c008d0e1e9db2ed49a11c/uv-0.10.4-py3-none-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/3b/9e/42adb642a12915acc9cb2bfab21710a6aabf045c26967ba0ff0e08a872d0/vhacdx-0.0.10-cp313-cp313-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/b9/c4/819f000b3d64f654a054a8b24bf8d0c5e799636393135784d0886d8c808e/viser-1.0.21-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ff/0b/33cef55ff24f2d92924923c99926dcce78e7bd922d649467f0eda8368923/websockets-15.0.1-cp313-cp313-macosx_11_0_arm64.whl @@ -338,7 +244,7 @@ environments: win-64: - conda: https://conda.anaconda.org/conda-forge/win-64/bzip2-1.0.8-h0ad9c76_9.conda - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.1.4-h4c7d964_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/cmake-4.2.3-hdcbee5b_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/cmake-4.2.3-hdcbee5b_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/eigen-3.4.0-h477610d_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/krb5-1.22.2-h0ea6238_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libcurl-8.18.0-h8206538_1.conda @@ -352,8 +258,8 @@ environments: - conda: https://conda.anaconda.org/conda-forge/win-64/libzlib-1.3.1-h2466b09_2.conda - conda: https://conda.anaconda.org/conda-forge/win-64/onnxruntime-cpp-1.19.2-h50ebc8d_0_cpu.conda - conda: https://conda.anaconda.org/conda-forge/win-64/openssl-3.6.1-hf411b9b_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pybind11-3.0.1-pyh7a1b43c_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pybind11-global-3.0.1-pyh5e4992e_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pybind11-3.0.2-pyh7a1b43c_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pybind11-global-3.0.2-pyh5e4992e_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/python-3.13.12-h09917c8_100_cp313.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.13-8_cp313.conda - conda: https://conda.anaconda.org/conda-forge/win-64/tk-8.6.13-h6ed50ae_3.conda @@ -372,6 +278,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/6d/c1/e419ef3723a074172b68aaa89c9f3de486ed4c2399e2dbd8113a4fdcaf9e/colorlog-6.10.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/94/35/386550fd60316d1e37eccdda609b074113298f23cef5bddb2049823fe666/dacite-1.9.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/55/e2/2537ebcff11c1ee1ff17d8d0b6f4db75873e3b0fb32c2d4a2ee31ecb310a/docstring_parser-0.17.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/1c/d4/e8134ce7d977fd87f507b6951b53df3aa7ab91122e7d487707352336703b/dora_rs-0.4.1-cp37-abi3-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/93/a7/c53764b09b7a6e6a21d46df656513391d8429b729fdde26372d961938297/dora_rs_cli-0.4.1-cp37-abi3-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/78/62/0ffc083b1d5f7c95eb03b260d2622dfacb70d1153011d216260b71c8e7d9/dora_utils-0.1.1-py3-none-any.whl @@ -381,6 +288,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/6a/09/e21df6aef1e1ffc0c816f0522ddc3f6dcded766c3261813131c78a704470/gitpython-3.1.46-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/bd/e1/6d6816b296a529ac9b897ad228b1e084eb1f92319e96371880eebdc874a6/glfw-2.10.0-py2.py27.py3.py30.py31.py32.py33.py34.py35.py36.py37.py38.py39.py310.py311.py312.py313.py314-none-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/04/4b/29cac41a4d98d144bf5f6d33995617b185d14b22401f75ca86f384e87ff1/h11-0.16.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e5/ea/fbb258a98863f99befb10ed727152b4ae659f322e1d9c0576f8a62754e81/h5py-3.15.1-cp313-cp313-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/7e/f5/f66802a942d491edb555dd61e3a9961140fd64c90bce1eafd741609d334d/httpcore-1.0.9-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/2a/39/e50c7c3a983047577ee07d2a9e53faf5a69493943ec3f6a384bdc792deb2/httpx-0.28.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c6/50/e0edd38dcd63fb26a8547f13d28f7a008bc4a3fd4eb4ff030673f22ad41a/hydra_core-1.3.2-py3-none-any.whl @@ -395,7 +303,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/94/54/e7d793b573f298e1c9013b8c4dade17d481164aa517d1d7148619c2cedbf/markdown_it_py-4.0.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/f1/25/5e8080fe0117f799b1b68008dc29a65862077296b92550632de015128579/msgspec-0.20.0-cp313-cp313-win_amd64.whl - - pypi: https://files.pythonhosted.org/packages/ab/53/54a0815d43c83e1074cfc7da98a3dea88d7dda48c03edfd225a387a3767b/mujoco-3.5.0-cp313-cp313-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/dc/25/bbf8c01758d619c86bcbe58db6a7d61ca423e7c76791f323b8ea2e92c2bd/mujoco-3.4.0-cp313-cp313-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/9e/c9/b2622292ea83fbb4ec318f5b9ab867d0a28ab43c5717bb85b0a5f6b3b0a4/networkx-3.6.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/88/b2/d0896bdcdc8d28a7fc5717c305f1a861c26e18c05047949fb371034d98bd/nodeenv-1.10.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/43/bc/6352f343522fcb2c04dbaf94cb30cca6fd32c1a750c06ad6231b4293708c/numpy-2.4.2-cp313-cp313-win_amd64.whl @@ -422,9 +330,11 @@ environments: - pypi: https://files.pythonhosted.org/packages/3a/83/4f5b250220e1a5acd31345a5ec1c95a7769725d0d8135276f399f44062f8/svg_path-7.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/16/e1/3079a9ff9b8e11b846c6ac5c8b5bfb7ff225eee721825310c91b3b50304f/tqdm-4.67.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/3c/b9/da09903ea53b677a58ba770112de6fe8b2acb8b4cd9bffae4ff6cfe7c072/trimesh-4.11.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d4/35/7541d1f046491fac8ce05d543d3f0de0af02086ad864dd3a23535ec703b9/typeguard-4.5.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/18/67/36e9267722cc04a6b9f15c7f3441c2363321a3ea07da7ae0c0707beb2a9c/typing_extensions-4.15.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/a7/f9/56b0cb8c5c287c7eec02735cce74a4c25cc56d6817bab7edde6f32b024a3/tyro-1.0.6-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/39/08/aaaad47bc4e9dc8c725e68f9d04865dbcb2052843ff09c97b08904852d84/urllib3-2.6.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/d5/95/89b9caeb4007d950dfa5fa5923c2ea67de541de0e3582598b7b9c7eeac53/uv-0.10.3-py3-none-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/31/dd/1900452678d46f6a649ab8167bededb02500b0561fc9f69e1f52607895c7/uv-0.10.4-py3-none-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/32/25/f0e6806824f88d47ab8bc1c9bf6f11634fd7b382d635d0696825f3b5672f/vhacdx-0.0.10-cp313-cp313-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/b9/c4/819f000b3d64f654a054a8b24bf8d0c5e799636393135784d0886d8c808e/viser-1.0.21-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/1b/6c/c65773d6cab416a64d191d6ee8a8b1c68a09970ea6909d16965d26bfed1e/websockets-15.0.1-cp313-cp313-win_amd64.whl @@ -448,11 +358,11 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-hda65f42_9.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/c-ares-1.34.6-hb03c661_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.1.4-hbd8a1cb_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/cmake-4.2.3-hc85cc9f_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/cmake-4.2.3-hc85cc9f_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/eigen-3.4.0-h171cf75_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/gcc_impl_linux-64-13.4.0-hf2caf72_17.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/gcc_impl_linux-64-13.4.0-he2fa53e_18.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/gcc_linux-64-13.4.0-h0a5b801_21.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/gxx_impl_linux-64-13.4.0-h6a38259_17.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/gxx_impl_linux-64-13.4.0-h6a38259_18.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/gxx_linux-64-13.4.0-h587059e_21.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/icu-78.2-h33c6efd_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/kernel-headers_linux-64-4.18.0-he073ed8_9.conda @@ -464,19 +374,19 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/libev-4.33-hd590300_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.7.4-hecca717_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libffi-3.5.2-h3435931_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-15.2.0-he0feb66_17.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/libgcc-devel_linux-64-13.4.0-hd1d28cc_117.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-15.2.0-h69a702a_17.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-15.2.0-he0feb66_17.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-15.2.0-he0feb66_18.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/libgcc-devel_linux-64-13.4.0-hd1d28cc_118.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-15.2.0-h69a702a_18.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-15.2.0-he0feb66_18.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/liblzma-5.8.2-hb03c661_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libmpdec-4.0.0-hb03c661_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libnghttp2-1.67.0-had1ee68_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libsanitizer-13.4.0-h2a15e64_17.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libsanitizer-13.4.0-h2a15e64_18.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.51.2-hf4e2dac_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libssh2-1.11.1-hcf80075_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-15.2.0-h934c35e_17.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/libstdcxx-devel_linux-64-13.4.0-h6963c3b_117.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-15.2.0-hdf11a46_17.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-15.2.0-h934c35e_18.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/libstdcxx-devel_linux-64-13.4.0-h6963c3b_118.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-15.2.0-hdf11a46_18.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.41.3-h5347b49_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libuv-1.51.0-hb03c661_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.1-hb9d3cd8_2.conda @@ -484,8 +394,8 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/onnxruntime-cpp-1.19.2-h641f3bf_0_cpu.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.6.1-h35e630c_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/patchelf-0.17.2-h58526e2_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pybind11-3.0.1-pyh7a1b43c_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pybind11-global-3.0.1-pyhc7ab6ef_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pybind11-3.0.2-pyh7a1b43c_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pybind11-global-3.0.2-pyhc7ab6ef_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.13.12-hc97d973_100_cp313.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.13-8_cp313.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/readline-8.3-h853b02a_0.conda @@ -514,6 +424,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/6b/e7/237155ae19a9023de7e30ec64e5d99a9431a567407ac21170a046d22a5a3/cryptography-46.0.5-cp311-abi3-manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/94/35/386550fd60316d1e37eccdda609b074113298f23cef5bddb2049823fe666/dacite-1.9.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/33/6b/e0547afaf41bf2c42e52430072fa5658766e3d65bd4b03a563d1b6336f57/distlib-0.4.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/55/e2/2537ebcff11c1ee1ff17d8d0b6f4db75873e3b0fb32c2d4a2ee31ecb310a/docstring_parser-0.17.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/02/10/5da547df7a391dcde17f59520a231527b8571e6f46fc8efb02ccb370ab12/docutils-0.22.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/94/53/7dc142faa1719333d57c78cfcf419f2b176770b49ebef54e0bbfa34212ac/dora_rs-0.4.1-cp37-abi3-manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/3c/3e/f3d1e28df9457089055dacf3ca7ca3751ed274d312d9a8515255d80011ec/dora_rs_cli-0.4.1-cp37-abi3-manylinux_2_28_x86_64.whl @@ -528,6 +439,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/6a/09/e21df6aef1e1ffc0c816f0522ddc3f6dcded766c3261813131c78a704470/gitpython-3.1.46-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/5a/3f/efeb7c6801c46e11bd666a5180f0d615f74f72264212f74f39586c6fda9d/glfw-2.10.0-py2.py27.py3.py30.py31.py32.py33.py34.py35.py36.py37.py38.py39.py310.py311.py312.py313.py314-none-manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/04/4b/29cac41a4d98d144bf5f6d33995617b185d14b22401f75ca86f384e87ff1/h11-0.16.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d9/69/4402ea66272dacc10b298cca18ed73e1c0791ff2ae9ed218d3859f9698ac/h5py-3.15.1-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/7e/f5/f66802a942d491edb555dd61e3a9961140fd64c90bce1eafd741609d334d/httpcore-1.0.9-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/2a/39/e50c7c3a983047577ee07d2a9e53faf5a69493943ec3f6a384bdc792deb2/httpx-0.28.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c6/50/e0edd38dcd63fb26a8547f13d28f7a008bc4a3fd4eb4ff030673f22ad41a/hydra_core-1.3.2-py3-none-any.whl @@ -556,7 +468,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/09/ec/4b43dae793655b7d8a25f76119624350b4d65eb663459eb9603d7f1f0345/mistune-0.8.4-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a4/8e/469e5a4a2f5855992e425f3cb33804cc07bf18d48f2db061aec61ce50270/more_itertools-10.8.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/28/83/36557b04cfdc317ed8a525c4993b23e43a8fbcddaddd78619112ca07138c/msgspec-0.20.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/16/47/93c7ac3a9630b49c55d76b0d02aa565543e2f62cecd885f8f574f5c745e7/mujoco-3.5.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/df/72/0c47350ec39611ff8defe9e8af10c23c9ad0235974f1999a523fcd1c3e68/mujoco-3.4.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/9e/c9/b2622292ea83fbb4ec318f5b9ab867d0a28ab43c5717bb85b0a5f6b3b0a4/networkx-3.6.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/6f/84/c0dc75c7fb596135f999e59a410d9f45bdabb989f1cb911f0016d22b747b/nh3-0.3.3-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - pypi: https://files.pythonhosted.org/packages/88/b2/d0896bdcdc8d28a7fc5717c305f1a861c26e18c05047949fb371034d98bd/nodeenv-1.10.0-py2.py3-none-any.whl @@ -614,11 +526,13 @@ environments: - pypi: https://files.pythonhosted.org/packages/16/e1/3079a9ff9b8e11b846c6ac5c8b5bfb7ff225eee721825310c91b3b50304f/tqdm-4.67.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/3c/b9/da09903ea53b677a58ba770112de6fe8b2acb8b4cd9bffae4ff6cfe7c072/trimesh-4.11.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/3a/7a/882d99539b19b1490cac5d77c67338d126e4122c8276bf640e411650c830/twine-6.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d4/35/7541d1f046491fac8ce05d543d3f0de0af02086ad864dd3a23535ec703b9/typeguard-4.5.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/18/67/36e9267722cc04a6b9f15c7f3441c2363321a3ea07da7ae0c0707beb2a9c/typing_extensions-4.15.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/a7/f9/56b0cb8c5c287c7eec02735cce74a4c25cc56d6817bab7edde6f32b024a3/tyro-1.0.6-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/39/08/aaaad47bc4e9dc8c725e68f9d04865dbcb2052843ff09c97b08904852d84/urllib3-2.6.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/ce/de/0638d8aa83c2038c5f820151006b3bf372d109afbfdb2a8fc59187cc3690/uv-0.10.3-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/f2/b3/4b9580d62e1245df52e8516cf3e404ff39cc72634d2d749d47b1dada4161/uv-0.10.4-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - pypi: https://files.pythonhosted.org/packages/b8/b4/07ab1c828bae0eb5c72cd9a4cbe8b0376d374509be3c7055e1a399bf85c3/vhacdx-0.0.10-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/42/4b/6cf85b485be7ec29db837ec2a1d8cd68bc1147b1abf23d8636c5bd65b3cc/virtualenv-20.37.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/6a/2a/dc2228b2888f51192c7dc766106cd475f1b768c10caaf9727659726f7391/virtualenv-20.36.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/b9/c4/819f000b3d64f654a054a8b24bf8d0c5e799636393135784d0886d8c808e/viser-1.0.21-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ff/b2/83a6ddf56cdcbad4e3d841fcc55d6ba7d19aeb89c50f24dd7e859ec0805f/websockets-15.0.1-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl - pypi: https://files.pythonhosted.org/packages/87/22/b76d483683216dde3d67cba61fb2444be8d5be289bf628c13fc0fd90e5f9/wheel-0.46.3-py3-none-any.whl @@ -627,172 +541,11 @@ environments: - pypi: https://files.pythonhosted.org/packages/2e/54/647ade08bf0db230bfea292f893923872fd20be6ac6f53b2b936ba839d75/zipp-3.23.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/63/4b/e3678b4e776db00f9f7b2fe58e547e8928ef32727d7a1ff01dea010f3f13/zstandard-0.25.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl - pypi: ./ - osx-64: - - conda: https://conda.anaconda.org/conda-forge/osx-64/bzip2-1.0.8-h500dc9f_9.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/c-ares-1.34.6-hb5e19a0_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.1.4-hbd8a1cb_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/cmake-4.2.3-h965d0ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/eigen-3.4.0-hfc0b2d5_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/krb5-1.22.2-h207b36a_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/libcurl-8.18.0-h9a2545f_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/libcxx-21.1.8-h4fb565c_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/libedit-3.1.20250104-pl5321ha958ccf_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/libev-4.33-h10d778d_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/libexpat-2.7.4-h991f03e_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/libffi-3.5.2-hd1f9c09_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/liblzma-5.8.2-h11316ed_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/libmpdec-4.0.0-hf3981d6_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/libnghttp2-1.67.0-h3338091_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/libsqlite-3.51.2-hb99441e_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/libssh2-1.11.1-hed3591d_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/libuv-1.51.0-h58003a5_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/libzlib-1.3.1-hd23fc13_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/ncurses-6.5-h0622a9a_3.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/onnxruntime-cpp-1.19.2-h417c6ca_0_cpu.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/openssl-3.6.1-hb6871ef_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pybind11-3.0.1-pyh7a1b43c_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pybind11-global-3.0.1-pyhc7ab6ef_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/python-3.13.12-h894a449_100_cp313.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.13-8_cp313.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/readline-8.3-h68b038d_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/rhash-1.4.6-h6e16a3a_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/tk-8.6.13-h7142dee_3.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/zstd-1.5.7-h3eecb57_6.conda - - pypi: https://files.pythonhosted.org/packages/18/a6/907a406bb7d359e6a63f99c313846d9eec4f7e6f7437809e03aa00fa3074/absl_py-2.4.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/8d/3f/95338030883d8c8b91223b4e21744b04d11b161a3ef117295d8241f50ab4/accessible_pygments-0.0.5-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/7e/b3/6b4067be973ae96ba0d615946e314c5ae35f9f993eca561b356540bb0c2b/alabaster-1.0.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/3e/38/7859ff46355f76f8d19459005ca000b6e7012f2f1ca597746cbcd1fbfe5e/antlr4-python3-runtime-4.9.3.tar.gz - - pypi: https://files.pythonhosted.org/packages/38/0e/27be9fdef66e72d64c0cdc3cc2823101b80585f8119b5c112c2e8f5f7dab/anyio-4.12.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/3f/38/b2becedff0bef4af9ff474b82e2dcaefca608b6d24753d0b460c94003d91/astroid-4.1.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/3a/2a/7cc015f5b9f5db42b7d48157e23356022889fc354a2813c15934b7cb5c0e/attrs-25.4.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/b0/c2/bb8ba1cec816fa356e19da83c59bfd4ac34dba1ae41eb7622c18f4b1d48d/auditwheel-6.6.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/77/f5/21d2de20e8b8b0408f0681956ca2c69f1320a3848ac50e6e7f39c6159675/babel-2.18.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/1a/39/47f9197bdd44df24d67ac8893641e16f386c984a0619ef2ee4c51fbbc019/beautifulsoup4-4.14.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/c5/0d/84a4380f930db0010168e0aa7b7a8fed9ba1835a8fbb1472bc6d0201d529/build-1.4.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/e6/ad/3cc14f097111b4de0040c83a525973216457bbeeb63739ef1ed275c1c021/certifi-2026.1.4-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/db/3c/33bac158f8ab7f89b2e59426d5fe2e4f63f7ed25df84c036890172b412b5/cfgv-3.5.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/97/45/4b3a1239bbacd321068ea6e7ac28875b03ab8bc0aa0966452db17cd36714/charset_normalizer-3.4.4-cp313-cp313-macosx_10_13_universal2.whl - - pypi: https://files.pythonhosted.org/packages/6d/c1/e419ef3723a074172b68aaa89c9f3de486ed4c2399e2dbd8113a4fdcaf9e/colorlog-6.10.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/db/23/aad45061a31677d68e47499197a131eea55da4875d16c1f42021ab963503/coverage-7.13.4-cp313-cp313-macosx_10_13_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/94/35/386550fd60316d1e37eccdda609b074113298f23cef5bddb2049823fe666/dacite-1.9.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/33/6b/e0547afaf41bf2c42e52430072fa5658766e3d65bd4b03a563d1b6336f57/distlib-0.4.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/02/10/5da547df7a391dcde17f59520a231527b8571e6f46fc8efb02ccb370ab12/docutils-0.22.4-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/a1/ff/894f11890a526f107d3d06b0e71209b45e5a7bb3666aed23725308bbf78a/dora_rs-0.4.1.tar.gz - - pypi: https://files.pythonhosted.org/packages/f0/45/77300cbdb4137a66eedf8e2488decffbe33e1d33ec912e54fdd02f2f3084/dora_rs_cli-0.4.1.tar.gz - - pypi: https://files.pythonhosted.org/packages/78/62/0ffc083b1d5f7c95eb03b260d2622dfacb70d1153011d216260b71c8e7d9/dora_utils-0.1.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/99/1a/e6d80ab0104ba947e1e5a0c5251021a4bf374cfe3b0d88e2be62b150170d/embreex-2.17.7.post7-cp313-cp313-macosx_10_13_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/e7/98/87b5946356095738cb90a6df7b35ff69ac5750f6e783d5fbcc5cb3b6cbd7/etils-1.13.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/ab/84/02fc1827e8cdded4aa65baef11296a9bbe595c474f0d6d758af082d849fd/execnet-2.1.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/e7/04/a94ebfb4eaaa08db56725a40de2887e95de4e8641b9e902c311bfa00aa39/filelock-3.24.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/e6/ab/fb21f4c939bb440104cc2b396d3be1d9b7a9fd3c6c2a53d98c45b3d7c954/fsspec-2026.2.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/f4/b2/50e9b292b5cac13e9e81272c7171301abc753a60460d21505b606e15cf21/furo-2025.12.19-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/a0/61/5c78b91c3143ed5c14207f463aecfc8f9dbb5092fb2869baf37c273b2705/gitdb-4.0.12-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/6a/09/e21df6aef1e1ffc0c816f0522ddc3f6dcded766c3261813131c78a704470/gitpython-3.1.46-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/b3/87/de0b33f6f00687499ca1371f22aa73396341b85bf88f1a284f9da8842493/glfw-2.10.0-py2.py27.py3.py30.py31.py32.py33.py34.py35.py36.py37.py38.py39.py310.py311.py312.py313.py314-none-macosx_10_6_intel.whl - - pypi: https://files.pythonhosted.org/packages/04/4b/29cac41a4d98d144bf5f6d33995617b185d14b22401f75ca86f384e87ff1/h11-0.16.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/7e/f5/f66802a942d491edb555dd61e3a9961140fd64c90bce1eafd741609d334d/httpcore-1.0.9-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/2a/39/e50c7c3a983047577ee07d2a9e53faf5a69493943ec3f6a384bdc792deb2/httpx-0.28.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/c6/50/e0edd38dcd63fb26a8547f13d28f7a008bc4a3fd4eb4ff030673f22ad41a/hydra_core-1.3.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/42/77/de194443bf38daed9452139e960c632b0ef9f9a5dd9ce605fdf18ca9f1b1/id-1.6.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/b8/58/40fbbcefeda82364720eba5cf2270f98496bdfa19ea75b4cccae79c698e6/identify-2.6.16-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/0e/61/66938bbb5fc52dbdf84594873d5b51fb1f7c7794e9c0f5bd885f30bc507b/idna-3.11-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/fb/fe/301e0936b79bcab4cacc7548bf2853fc28dced0a578bab1f7ef53c9aa75b/imageio-2.37.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/ff/62/85c4c919272577931d407be5ba5d71c20f0b616d31a0befe0ae45bb79abd/imagesize-1.4.1-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/a4/ed/1f1afb2e9e7f38a545d628f864d562a5ae64fe6f7a10e28ffb9b185b4e89/importlib_resources-6.5.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/cb/b1/3846dd7f199d53cb17f49cba7e651e9ce294d8497c8c150530ed11865bb8/iniconfig-2.3.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/7f/66/b15ce62552d84bbfcec9a4873ab79d993a1dd4edb922cbfccae192bd5b5f/jaraco.classes-3.4.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/8d/48/aa685dbf1024c7bd82bede569e3a85f82c32fd3d79ba5fea578f0159571a/jaraco_context-6.1.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/fd/c4/813bb09f0985cb21e959f21f2464169eca882656849adf727ac7bb7e1767/jaraco_functools-4.4.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/62/a1/3d680cbfd5f4b8f15abc1d571870c5fc3e594bb582bc3b64ea099db13e56/jinja2-3.1.6-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/69/90/f63fb5873511e014207a475e2bb4e8b2e570d655b00ac19a9a0ca0a385ee/jsonschema-4.26.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/41/45/1a4ed80516f02155c51f51e8cedb3c1902296743db0bbc66608a0db2814f/jsonschema_specifications-2025.9.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/81/db/e655086b7f3a705df045bf0933bdd9c2f79bb3c97bfef1384598bb79a217/keyring-25.7.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/5d/f4/2a94a3d3dfd6c6b433501b8d470a1960a20ecce93245cf2db1706adf6c19/lxml-6.0.2-cp313-cp313-macosx_10_13_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/a9/50/5b1d70de548fb1e11e15ea9ebec0480365462d202f98b66ad7e154284327/m2r2-0.3.4-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/a7/f5/9ae489a466543ca8f35f2eeeed7f043f714223e0905eaf62b2fce4684a07/manifold3d-3.3.2-cp313-cp313-macosx_10_14_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/8b/7c/c5dd5b255b9828ba5df729e62fdd470a322c938f07ef392ca03c0592bb3a/mapbox_earcut-2.0.0-cp313-cp313-macosx_10_13_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/94/54/e7d793b573f298e1c9013b8c4dade17d481164aa517d1d7148619c2cedbf/markdown_it_py-4.0.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/38/2f/907b9c7bbba283e68f20259574b13d005c121a0fa4c175f9bed27c4597ff/markupsafe-3.0.3-cp313-cp313-macosx_10_13_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/09/ec/4b43dae793655b7d8a25f76119624350b4d65eb663459eb9603d7f1f0345/mistune-0.8.4-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/a4/8e/469e5a4a2f5855992e425f3cb33804cc07bf18d48f2db061aec61ce50270/more_itertools-10.8.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/8a/d1/b902d38b6e5ba3bdddbec469bba388d647f960aeed7b5b3623a8debe8a76/msgspec-0.20.0-cp313-cp313-macosx_10_13_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/87/2a/371033684e4ddcda47c97661fb6e9617c0e5e3749af082a9b4d5d1bf9f27/mujoco-3.5.0-cp313-cp313-macosx_10_16_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/9e/c9/b2622292ea83fbb4ec318f5b9ab867d0a28ab43c5717bb85b0a5f6b3b0a4/networkx-3.6.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/13/3e/aef8cf8e0419b530c95e96ae93a5078e9b36c1e6613eeb1df03a80d5194e/nh3-0.3.3-cp38-abi3-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl - - pypi: https://files.pythonhosted.org/packages/88/b2/d0896bdcdc8d28a7fc5717c305f1a861c26e18c05047949fb371034d98bd/nodeenv-1.10.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/a1/22/815b9fe25d1d7ae7d492152adbc7226d3eff731dffc38fe970589fcaaa38/numpy-2.4.2-cp313-cp313-macosx_10_13_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/e3/94/1843518e420fa3ed6919835845df698c7e27e183cb997394e4a670973a65/omegaconf-2.3.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/b7/b9/c538f279a4e237a006a2c98387d081e9eb060d203d8ed34467cc0f0b9b53/packaging-26.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/14/a1/16c4b823838ba4c9c52c0e6bbda903a3fe5a1bdbf1b8eb4fff7156f3e318/pillow-12.1.1-cp313-cp313-macosx_10_13_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/48/31/05e764397056194206169869b50cf2fee4dbbbc71b344705b9c0d878d4d8/platformdirs-4.9.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/54/20/4d324d65cc6d9205fabedc306948156824eb9f0ee1633355a8f7ec5c66bf/pluggy-1.6.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/5d/19/fd3ef348460c80af7bb4669ea7926651d1f95c23ff2df18b9d24bab4f3fa/pre_commit-4.5.1-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/cb/4f/679fa7e84dadbaca7a65f7cdba8d6c83febbd93ca12fa4adf40ba3b6362b/pyarrow-23.0.1-cp313-cp313-macosx_12_0_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/4f/e4/4f2d41881fae547f06ffa4c9748fa8ed13c4db5c830ff268b84175546b3c/pybind11_stubgen-2.5.5-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/07/86/f1f61b7a0701f9d1299e5293d083318019f91021a4d449f94d59dbe024e4/pycollada-0.9.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/0c/c3/44f3fbbfa403ea2a7c779186dc20772604442dde72947e7d01069cbe98e3/pycparser-3.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/af/43/700932c4f0638c3421177144a2e86448c0d75dbaee2c7936bda3f9fd0878/pyelftools-0.32-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/c7/21/705964c7812476f378728bdf590ca4b771ec72385c533964653c68e86bdc/pygments-2.19.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/de/e4/1ba6f44e491c4eece978685230dde56b14d51a0365bc1b774ddaa94d14cd/pyopengl-3.1.10-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/bd/24/12818598c362d7f300f18e74db45963dbcb85150324092410c8b49405e42/pyproject_hooks-1.2.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/0c/82/a2c93e32800940d9573fb28c346772a14778b84ba7524e691b324620ab89/pyright-1.1.408-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/3b/ab/b3226f0bd7cdcf710fbede2b3548584366da3b19b5021e74f5bde2a8fa3f/pytest-9.0.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/ee/49/1377b49de7d0c1ce41292161ea0f721913fa8722c19fb9c1e3aa0367eecb/pytest_cov-7.0.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/ca/31/d4e37e9e550c2b92a9cbc2e4d0b7420a27224968580b5a447f420847c975/pytest_xdist-3.8.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/ec/57/56b9bcc3c9c6a792fcbaf139543cee77261f3651ca9da0c93f5c1221264b/python_dateutil-2.9.0.post0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/d1/11/0fd08f8192109f7169db964b5707a2f1e8b745d4e239b784a5a1dd80d1db/pyyaml-6.0.3-cp313-cp313-macosx_10_13_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/e1/67/921ec3024056483db83953ae8e48079ad62b92db7880013ca77632921dd0/readme_renderer-44.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/2c/58/ca301544e1fa93ed4f80d724bf5b194f6e4b945841c5bfd555878eea9fcb/referencing-0.37.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/1e/db/4254e3eabe8020b458f1a747140d32277ec7a271daf1d235b70dc0b4e6e3/requests-2.32.5-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/3f/51/d4db610ef29373b879047326cbf6fa98b6c1969d6f6dc423279de2b1be2c/requests_toolbelt-1.0.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/ff/9a/9afaade874b2fa6c752c36f1548f718b5b83af81ed9b76628329dab81c1b/rfc3986-2.0.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/ef/45/615f5babd880b4bd7d405cc0dc348234c5ffb6ed1ea33e152ede08b2072d/rich-14.3.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/16/80/579e75e0be0439d11e479732e4c194a9c6e6d152670dae561b9525015425/robot_descriptions-1.22.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/04/54/6f679c435d28e0a568d8e8a7c0a93a09010818634c3c3907fc98d8983770/roman_numerals-4.1.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/ed/dc/d61221eb88ff410de3c49143407f6f3147acf2538c86f2ab7ce65ae7d5f9/rpds_py-0.30.0-cp313-cp313-macosx_10_12_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/04/d9/108cd989a4c0954e60b3cdc86fd2826407702b5375f6dfdab2802e5fed98/rtree-1.4.1-py3-none-macosx_10_9_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/b3/ea/c8f89d32e7912269d38c58f3649e453ac32c528f93bb7f4219258be2e7ed/ruff-0.15.1-py3-none-macosx_10_12_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/0c/51/3468fdfd49387ddefee1636f5cf6d03ce603b75205bf439bbf0e62069bfd/scipy-1.17.0-cp313-cp313-macosx_10_14_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/c3/90/98ef257c23c46425dc4d1d31005ad7c8d649fe423a38b917db02c30f1f5a/shapely-2.1.2-cp313-cp313-macosx_10_13_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/b7/ce/149a00dd41f10bc29e5921b496af8b574d8413afcd5e30dfa0ed46c2cc5e/six-1.17.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/04/be/d09147ad1ec7934636ad912901c5fd7667e1c858e19d355237db0d0cd5e4/smmap-5.0.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/c8/78/3565d011c61f5a43488987ee32b6f3f656e7f107ac2782dd57bdd7d91d9a/snowballstemmer-3.0.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/46/2c/1462b1d0a634697ae9e55b3cecdcb64788e8b7d63f54d923fcd0bb140aed/soupsieve-2.8.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/73/f7/b1884cb3188ab181fc81fa00c266699dab600f927a964df02ec3d5d1916a/sphinx-9.1.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/d8/11/9825443890d3ef6b6a0db938054e7c806e9911509e0315fe984d00a090c1/sphinx_autoapi-3.7.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/3c/dd/018ce05c532a22007ac58d4f45232514cd9d6dd0ee1dc374e309db830983/sphinx_basic_ng-1.0.0b2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/38/5e/49c1330add8c48ef52e50c82d7d847e32b7f786d5ddc1cafcd36ac63f1e3/sphinxcontrib_ansi_rai-0.7.0.dev20250623-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/5d/85/9ebeae2f76e9e77b952f4b274c27238156eae7979c5421fba91a28f4970d/sphinxcontrib_applehelp-2.0.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/35/7a/987e583882f985fe4d7323774889ec58049171828b58c2217e7f79cdf44e/sphinxcontrib_devhelp-2.0.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/0a/7b/18a8c0bcec9182c05a0b3ec2a776bba4ead82750a55ff798e8d406dae604/sphinxcontrib_htmlhelp-2.1.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/c2/42/4c8646762ee83602e3fb3fbe774c2fac12f317deb0b5dbeeedd2d3ba4b77/sphinxcontrib_jsmath-1.0.1-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/84/04/53406477f01fa5bdcb1344fac421c46b6dce112d980c58237825ddb262a2/sphinxcontrib_programoutput_rai-0.18.dev0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/27/83/859ecdd180cacc13b1f7e857abf8582a64552ea7a061057a6c716e790fce/sphinxcontrib_qthelp-2.0.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/52/a7/d2782e4e3f77c8450f727ba74a8f12756d5ba823d81b941f1b04da9d033a/sphinxcontrib_serializinghtml-2.0.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/3a/83/4f5b250220e1a5acd31345a5ec1c95a7769725d0d8135276f399f44062f8/svg_path-7.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/16/e1/3079a9ff9b8e11b846c6ac5c8b5bfb7ff225eee721825310c91b3b50304f/tqdm-4.67.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/3c/b9/da09903ea53b677a58ba770112de6fe8b2acb8b4cd9bffae4ff6cfe7c072/trimesh-4.11.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/3a/7a/882d99539b19b1490cac5d77c67338d126e4122c8276bf640e411650c830/twine-6.2.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/18/67/36e9267722cc04a6b9f15c7f3441c2363321a3ea07da7ae0c0707beb2a9c/typing_extensions-4.15.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/39/08/aaaad47bc4e9dc8c725e68f9d04865dbcb2052843ff09c97b08904852d84/urllib3-2.6.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/40/db/c5729ec39ed557ac673ca993abd71e5b18d71a92f95f1845152e639000ff/uv-0.10.3-py3-none-macosx_10_12_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/0e/54/c2fc08d9324bbd92735caf9207cbabada3a8dd9d270d6e46ca69eb7f883d/vhacdx-0.0.10-cp313-cp313-macosx_10_13_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/42/4b/6cf85b485be7ec29db837ec2a1d8cd68bc1147b1abf23d8636c5bd65b3cc/virtualenv-20.37.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/b9/c4/819f000b3d64f654a054a8b24bf8d0c5e799636393135784d0886d8c808e/viser-1.0.21-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/8a/05/aa116ec9943c718905997412c5989f7ed671bc0188ee2ba89520e8765d7b/websockets-15.0.1-cp313-cp313-macosx_10_13_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/87/22/b76d483683216dde3d67cba61fb2444be8d5be289bf628c13fc0fd90e5f9/wheel-0.46.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/33/76/35d05267ac82f53ae9b0e554da7c5e281ee61f3cad44c743f0fcd354f211/xxhash-3.6.0-cp313-cp313-macosx_10_13_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/c8/60/4ea0d6df0b497d51bf2ef87eaab0eb26f8bc3b3313c012da5df3383cced9/yourdfpy-0.0.60-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/2e/54/647ade08bf0db230bfea292f893923872fd20be6ac6f53b2b936ba839d75/zipp-3.23.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/35/0b/8df9c4ad06af91d39e94fa96cc010a24ac4ef1378d3efab9223cc8593d40/zstandard-0.25.0-cp313-cp313-macosx_10_13_x86_64.whl - - pypi: ./ osx-arm64: - conda: https://conda.anaconda.org/conda-forge/osx-arm64/bzip2-1.0.8-hd037594_9.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/c-ares-1.34.6-hc919400_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.1.4-hbd8a1cb_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/cmake-4.2.3-h8cb302d_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/cmake-4.2.3-h8cb302d_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/eigen-3.4.0-h49c215f_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/icu-78.2-h38cb7af_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/krb5-1.22.2-h385eeb1_0.conda @@ -812,8 +565,8 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ncurses-6.5-h5e97a16_3.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/onnxruntime-cpp-1.19.2-hda9e549_0_cpu.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/openssl-3.6.1-hd24854e_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pybind11-3.0.1-pyh7a1b43c_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pybind11-global-3.0.1-pyhc7ab6ef_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pybind11-3.0.2-pyh7a1b43c_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pybind11-global-3.0.2-pyhc7ab6ef_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-3.13.12-h20e6be0_100_cp313.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.13-8_cp313.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/readline-8.3-h46df422_0.conda @@ -839,6 +592,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/a5/70/9b8b67a0945f3dfec1fd896c5cefb7c19d5a3a6d74630b99a895170999ae/coverage-7.13.4-cp313-cp313-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/94/35/386550fd60316d1e37eccdda609b074113298f23cef5bddb2049823fe666/dacite-1.9.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/33/6b/e0547afaf41bf2c42e52430072fa5658766e3d65bd4b03a563d1b6336f57/distlib-0.4.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/55/e2/2537ebcff11c1ee1ff17d8d0b6f4db75873e3b0fb32c2d4a2ee31ecb310a/docstring_parser-0.17.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/02/10/5da547df7a391dcde17f59520a231527b8571e6f46fc8efb02ccb370ab12/docutils-0.22.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e6/86/9ce12fbbfc365b7037666ffbc79ac93ba05690b22cac8fad8d2104577dfe/dora_rs-0.4.1-cp37-abi3-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/38/82/78d57efaf364d4ae45c5e87c5c370b0999da92ecc72f9ba96949a93faa4f/dora_rs_cli-0.4.1-cp37-abi3-macosx_11_0_arm64.whl @@ -852,6 +606,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/6a/09/e21df6aef1e1ffc0c816f0522ddc3f6dcded766c3261813131c78a704470/gitpython-3.1.46-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/b6/a6/6ea2f73ad4474896d9e38b3ffbe6ffd5a802c738392269e99e8c6621a461/glfw-2.10.0-py2.py27.py3.py30.py31.py32.py33.py34.py35.py36.py37.py38.py39.py310.py311.py312.py313.py314-none-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/04/4b/29cac41a4d98d144bf5f6d33995617b185d14b22401f75ca86f384e87ff1/h11-0.16.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/31/96/ba99a003c763998035b0de4c299598125df5fc6c9ccf834f152ddd60e0fb/h5py-3.15.1-cp313-cp313-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/7e/f5/f66802a942d491edb555dd61e3a9961140fd64c90bce1eafd741609d334d/httpcore-1.0.9-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/2a/39/e50c7c3a983047577ee07d2a9e53faf5a69493943ec3f6a384bdc792deb2/httpx-0.28.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c6/50/e0edd38dcd63fb26a8547f13d28f7a008bc4a3fd4eb4ff030673f22ad41a/hydra_core-1.3.2-py3-none-any.whl @@ -879,7 +634,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/09/ec/4b43dae793655b7d8a25f76119624350b4d65eb663459eb9603d7f1f0345/mistune-0.8.4-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a4/8e/469e5a4a2f5855992e425f3cb33804cc07bf18d48f2db061aec61ce50270/more_itertools-10.8.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/57/b6/eff0305961a1d9447ec2b02f8c73c8946f22564d302a504185b730c9a761/msgspec-0.20.0-cp313-cp313-macosx_11_0_arm64.whl - - pypi: https://files.pythonhosted.org/packages/6f/c9/26bd4979d503d03f7a6ded851c3094a5708cb534cf0dc80b4db6672da2b0/mujoco-3.5.0-cp313-cp313-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/e8/51/c3e5c3b199b1b74c85f0cb02dc0ef80363bf91ea245ee8a932804768d5e8/mujoco-3.4.0-cp313-cp313-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/9e/c9/b2622292ea83fbb4ec318f5b9ab867d0a28ab43c5717bb85b0a5f6b3b0a4/networkx-3.6.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/13/3e/aef8cf8e0419b530c95e96ae93a5078e9b36c1e6613eeb1df03a80d5194e/nh3-0.3.3-cp38-abi3-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl - pypi: https://files.pythonhosted.org/packages/88/b2/d0896bdcdc8d28a7fc5717c305f1a861c26e18c05047949fb371034d98bd/nodeenv-1.10.0-py2.py3-none-any.whl @@ -936,11 +691,13 @@ environments: - pypi: https://files.pythonhosted.org/packages/16/e1/3079a9ff9b8e11b846c6ac5c8b5bfb7ff225eee721825310c91b3b50304f/tqdm-4.67.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/3c/b9/da09903ea53b677a58ba770112de6fe8b2acb8b4cd9bffae4ff6cfe7c072/trimesh-4.11.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/3a/7a/882d99539b19b1490cac5d77c67338d126e4122c8276bf640e411650c830/twine-6.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d4/35/7541d1f046491fac8ce05d543d3f0de0af02086ad864dd3a23535ec703b9/typeguard-4.5.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/18/67/36e9267722cc04a6b9f15c7f3441c2363321a3ea07da7ae0c0707beb2a9c/typing_extensions-4.15.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/a7/f9/56b0cb8c5c287c7eec02735cce74a4c25cc56d6817bab7edde6f32b024a3/tyro-1.0.6-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/39/08/aaaad47bc4e9dc8c725e68f9d04865dbcb2052843ff09c97b08904852d84/urllib3-2.6.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/0b/8c/cce26f6da9f69a9f0df032d642a4cb5603249f145c368e41b0154c463ca9/uv-0.10.3-py3-none-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/63/91/c4ddf7e55e05394967615050cc364a999157a44c008d0e1e9db2ed49a11c/uv-0.10.4-py3-none-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/3b/9e/42adb642a12915acc9cb2bfab21710a6aabf045c26967ba0ff0e08a872d0/vhacdx-0.0.10-cp313-cp313-macosx_11_0_arm64.whl - - pypi: https://files.pythonhosted.org/packages/42/4b/6cf85b485be7ec29db837ec2a1d8cd68bc1147b1abf23d8636c5bd65b3cc/virtualenv-20.37.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/6a/2a/dc2228b2888f51192c7dc766106cd475f1b768c10caaf9727659726f7391/virtualenv-20.36.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/b9/c4/819f000b3d64f654a054a8b24bf8d0c5e799636393135784d0886d8c808e/viser-1.0.21-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ff/0b/33cef55ff24f2d92924923c99926dcce78e7bd922d649467f0eda8368923/websockets-15.0.1-cp313-cp313-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/87/22/b76d483683216dde3d67cba61fb2444be8d5be289bf628c13fc0fd90e5f9/wheel-0.46.3-py3-none-any.whl @@ -952,7 +709,7 @@ environments: win-64: - conda: https://conda.anaconda.org/conda-forge/win-64/bzip2-1.0.8-h0ad9c76_9.conda - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.1.4-h4c7d964_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/cmake-4.2.3-hdcbee5b_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/cmake-4.2.3-hdcbee5b_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/eigen-3.4.0-h477610d_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/krb5-1.22.2-h0ea6238_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libcurl-8.18.0-h8206538_1.conda @@ -966,8 +723,8 @@ environments: - conda: https://conda.anaconda.org/conda-forge/win-64/libzlib-1.3.1-h2466b09_2.conda - conda: https://conda.anaconda.org/conda-forge/win-64/onnxruntime-cpp-1.19.2-h50ebc8d_0_cpu.conda - conda: https://conda.anaconda.org/conda-forge/win-64/openssl-3.6.1-hf411b9b_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pybind11-3.0.1-pyh7a1b43c_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pybind11-global-3.0.1-pyh5e4992e_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pybind11-3.0.2-pyh7a1b43c_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pybind11-global-3.0.2-pyh5e4992e_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/python-3.13.12-h09917c8_100_cp313.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.13-8_cp313.conda - conda: https://conda.anaconda.org/conda-forge/win-64/tk-8.6.13-h6ed50ae_3.conda @@ -996,6 +753,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/e2/0c/dbfafbe90a185943dcfbc766fe0e1909f658811492d79b741523a414a6cc/coverage-7.13.4-cp313-cp313-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/94/35/386550fd60316d1e37eccdda609b074113298f23cef5bddb2049823fe666/dacite-1.9.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/33/6b/e0547afaf41bf2c42e52430072fa5658766e3d65bd4b03a563d1b6336f57/distlib-0.4.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/55/e2/2537ebcff11c1ee1ff17d8d0b6f4db75873e3b0fb32c2d4a2ee31ecb310a/docstring_parser-0.17.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/02/10/5da547df7a391dcde17f59520a231527b8571e6f46fc8efb02ccb370ab12/docutils-0.22.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/1c/d4/e8134ce7d977fd87f507b6951b53df3aa7ab91122e7d487707352336703b/dora_rs-0.4.1-cp37-abi3-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/93/a7/c53764b09b7a6e6a21d46df656513391d8429b729fdde26372d961938297/dora_rs_cli-0.4.1-cp37-abi3-win_amd64.whl @@ -1009,6 +767,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/6a/09/e21df6aef1e1ffc0c816f0522ddc3f6dcded766c3261813131c78a704470/gitpython-3.1.46-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/bd/e1/6d6816b296a529ac9b897ad228b1e084eb1f92319e96371880eebdc874a6/glfw-2.10.0-py2.py27.py3.py30.py31.py32.py33.py34.py35.py36.py37.py38.py39.py310.py311.py312.py313.py314-none-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/04/4b/29cac41a4d98d144bf5f6d33995617b185d14b22401f75ca86f384e87ff1/h11-0.16.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e5/ea/fbb258a98863f99befb10ed727152b4ae659f322e1d9c0576f8a62754e81/h5py-3.15.1-cp313-cp313-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/7e/f5/f66802a942d491edb555dd61e3a9961140fd64c90bce1eafd741609d334d/httpcore-1.0.9-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/2a/39/e50c7c3a983047577ee07d2a9e53faf5a69493943ec3f6a384bdc792deb2/httpx-0.28.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c6/50/e0edd38dcd63fb26a8547f13d28f7a008bc4a3fd4eb4ff030673f22ad41a/hydra_core-1.3.2-py3-none-any.whl @@ -1036,7 +795,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/09/ec/4b43dae793655b7d8a25f76119624350b4d65eb663459eb9603d7f1f0345/mistune-0.8.4-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a4/8e/469e5a4a2f5855992e425f3cb33804cc07bf18d48f2db061aec61ce50270/more_itertools-10.8.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/f1/25/5e8080fe0117f799b1b68008dc29a65862077296b92550632de015128579/msgspec-0.20.0-cp313-cp313-win_amd64.whl - - pypi: https://files.pythonhosted.org/packages/ab/53/54a0815d43c83e1074cfc7da98a3dea88d7dda48c03edfd225a387a3767b/mujoco-3.5.0-cp313-cp313-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/dc/25/bbf8c01758d619c86bcbe58db6a7d61ca423e7c76791f323b8ea2e92c2bd/mujoco-3.4.0-cp313-cp313-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/9e/c9/b2622292ea83fbb4ec318f5b9ab867d0a28ab43c5717bb85b0a5f6b3b0a4/networkx-3.6.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/73/88/1ce287ef8649dc51365b5094bd3713b76454838140a32ab4f8349973883c/nh3-0.3.3-cp38-abi3-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/88/b2/d0896bdcdc8d28a7fc5717c305f1a861c26e18c05047949fb371034d98bd/nodeenv-1.10.0-py2.py3-none-any.whl @@ -1094,11 +853,13 @@ environments: - pypi: https://files.pythonhosted.org/packages/16/e1/3079a9ff9b8e11b846c6ac5c8b5bfb7ff225eee721825310c91b3b50304f/tqdm-4.67.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/3c/b9/da09903ea53b677a58ba770112de6fe8b2acb8b4cd9bffae4ff6cfe7c072/trimesh-4.11.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/3a/7a/882d99539b19b1490cac5d77c67338d126e4122c8276bf640e411650c830/twine-6.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d4/35/7541d1f046491fac8ce05d543d3f0de0af02086ad864dd3a23535ec703b9/typeguard-4.5.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/18/67/36e9267722cc04a6b9f15c7f3441c2363321a3ea07da7ae0c0707beb2a9c/typing_extensions-4.15.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/a7/f9/56b0cb8c5c287c7eec02735cce74a4c25cc56d6817bab7edde6f32b024a3/tyro-1.0.6-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/39/08/aaaad47bc4e9dc8c725e68f9d04865dbcb2052843ff09c97b08904852d84/urllib3-2.6.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/d5/95/89b9caeb4007d950dfa5fa5923c2ea67de541de0e3582598b7b9c7eeac53/uv-0.10.3-py3-none-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/31/dd/1900452678d46f6a649ab8167bededb02500b0561fc9f69e1f52607895c7/uv-0.10.4-py3-none-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/32/25/f0e6806824f88d47ab8bc1c9bf6f11634fd7b382d635d0696825f3b5672f/vhacdx-0.0.10-cp313-cp313-win_amd64.whl - - pypi: https://files.pythonhosted.org/packages/42/4b/6cf85b485be7ec29db837ec2a1d8cd68bc1147b1abf23d8636c5bd65b3cc/virtualenv-20.37.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/6a/2a/dc2228b2888f51192c7dc766106cd475f1b768c10caaf9727659726f7391/virtualenv-20.36.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/b9/c4/819f000b3d64f654a054a8b24bf8d0c5e799636393135784d0886d8c808e/viser-1.0.21-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/1b/6c/c65773d6cab416a64d191d6ee8a8b1c68a09970ea6909d16965d26bfed1e/websockets-15.0.1-cp313-cp313-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/87/22/b76d483683216dde3d67cba61fb2444be8d5be289bf628c13fc0fd90e5f9/wheel-0.46.3-py3-none-any.whl @@ -1122,11 +883,11 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-hda65f42_9.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/c-ares-1.34.6-hb03c661_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.1.4-hbd8a1cb_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/cmake-4.2.3-hc85cc9f_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/cmake-4.2.3-hc85cc9f_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/eigen-3.4.0-h171cf75_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/gcc_impl_linux-64-13.4.0-hf2caf72_17.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/gcc_impl_linux-64-13.4.0-he2fa53e_18.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/gcc_linux-64-13.4.0-h0a5b801_21.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/gxx_impl_linux-64-13.4.0-h6a38259_17.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/gxx_impl_linux-64-13.4.0-h6a38259_18.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/gxx_linux-64-13.4.0-h587059e_21.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/icu-78.2-h33c6efd_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/kernel-headers_linux-64-4.18.0-he073ed8_9.conda @@ -1138,19 +899,19 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/libev-4.33-hd590300_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.7.4-hecca717_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libffi-3.5.2-h3435931_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-15.2.0-he0feb66_17.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/libgcc-devel_linux-64-13.4.0-hd1d28cc_117.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-15.2.0-h69a702a_17.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-15.2.0-he0feb66_17.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-15.2.0-he0feb66_18.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/libgcc-devel_linux-64-13.4.0-hd1d28cc_118.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-15.2.0-h69a702a_18.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-15.2.0-he0feb66_18.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/liblzma-5.8.2-hb03c661_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libmpdec-4.0.0-hb03c661_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libnghttp2-1.67.0-had1ee68_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libsanitizer-13.4.0-h2a15e64_17.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libsanitizer-13.4.0-h2a15e64_18.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.51.2-hf4e2dac_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libssh2-1.11.1-hcf80075_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-15.2.0-h934c35e_17.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/libstdcxx-devel_linux-64-13.4.0-h6963c3b_117.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-15.2.0-hdf11a46_17.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-15.2.0-h934c35e_18.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/libstdcxx-devel_linux-64-13.4.0-h6963c3b_118.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-15.2.0-hdf11a46_18.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.41.3-h5347b49_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libuv-1.51.0-hb03c661_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.1-hb9d3cd8_2.conda @@ -1158,8 +919,8 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/onnxruntime-cpp-1.19.2-h641f3bf_0_cpu.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.6.1-h35e630c_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/patchelf-0.17.2-h58526e2_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pybind11-3.0.1-pyh7a1b43c_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pybind11-global-3.0.1-pyhc7ab6ef_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pybind11-3.0.2-pyh7a1b43c_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pybind11-global-3.0.2-pyhc7ab6ef_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.13.12-hc97d973_100_cp313.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.13-8_cp313.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/readline-8.3-h853b02a_0.conda @@ -1181,6 +942,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/f5/83/6ab5883f57c9c801ce5e5677242328aa45592be8a00644310a008d04f922/charset_normalizer-3.4.4-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/6d/c1/e419ef3723a074172b68aaa89c9f3de486ed4c2399e2dbd8113a4fdcaf9e/colorlog-6.10.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/94/35/386550fd60316d1e37eccdda609b074113298f23cef5bddb2049823fe666/dacite-1.9.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/55/e2/2537ebcff11c1ee1ff17d8d0b6f4db75873e3b0fb32c2d4a2ee31ecb310a/docstring_parser-0.17.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/02/10/5da547df7a391dcde17f59520a231527b8571e6f46fc8efb02ccb370ab12/docutils-0.22.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/94/53/7dc142faa1719333d57c78cfcf419f2b176770b49ebef54e0bbfa34212ac/dora_rs-0.4.1-cp37-abi3-manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/3c/3e/f3d1e28df9457089055dacf3ca7ca3751ed274d312d9a8515255d80011ec/dora_rs_cli-0.4.1-cp37-abi3-manylinux_2_28_x86_64.whl @@ -1193,6 +955,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/6a/09/e21df6aef1e1ffc0c816f0522ddc3f6dcded766c3261813131c78a704470/gitpython-3.1.46-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/5a/3f/efeb7c6801c46e11bd666a5180f0d615f74f72264212f74f39586c6fda9d/glfw-2.10.0-py2.py27.py3.py30.py31.py32.py33.py34.py35.py36.py37.py38.py39.py310.py311.py312.py313.py314-none-manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/04/4b/29cac41a4d98d144bf5f6d33995617b185d14b22401f75ca86f384e87ff1/h11-0.16.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d9/69/4402ea66272dacc10b298cca18ed73e1c0791ff2ae9ed218d3859f9698ac/h5py-3.15.1-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/7e/f5/f66802a942d491edb555dd61e3a9961140fd64c90bce1eafd741609d334d/httpcore-1.0.9-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/2a/39/e50c7c3a983047577ee07d2a9e53faf5a69493943ec3f6a384bdc792deb2/httpx-0.28.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c6/50/e0edd38dcd63fb26a8547f13d28f7a008bc4a3fd4eb4ff030673f22ad41a/hydra_core-1.3.2-py3-none-any.whl @@ -1212,7 +975,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/09/ec/4b43dae793655b7d8a25f76119624350b4d65eb663459eb9603d7f1f0345/mistune-0.8.4-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/28/83/36557b04cfdc317ed8a525c4993b23e43a8fbcddaddd78619112ca07138c/msgspec-0.20.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/16/47/93c7ac3a9630b49c55d76b0d02aa565543e2f62cecd885f8f574f5c745e7/mujoco-3.5.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/df/72/0c47350ec39611ff8defe9e8af10c23c9ad0235974f1999a523fcd1c3e68/mujoco-3.4.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/9e/c9/b2622292ea83fbb4ec318f5b9ab867d0a28ab43c5717bb85b0a5f6b3b0a4/networkx-3.6.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/88/b2/d0896bdcdc8d28a7fc5717c305f1a861c26e18c05047949fb371034d98bd/nodeenv-1.10.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/04/dc/46066ce18d01645541f0186877377b9371b8fa8017fa8262002b4ef22612/numpy-2.4.2-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl @@ -1253,9 +1016,11 @@ environments: - pypi: https://files.pythonhosted.org/packages/3a/83/4f5b250220e1a5acd31345a5ec1c95a7769725d0d8135276f399f44062f8/svg_path-7.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/16/e1/3079a9ff9b8e11b846c6ac5c8b5bfb7ff225eee721825310c91b3b50304f/tqdm-4.67.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/3c/b9/da09903ea53b677a58ba770112de6fe8b2acb8b4cd9bffae4ff6cfe7c072/trimesh-4.11.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d4/35/7541d1f046491fac8ce05d543d3f0de0af02086ad864dd3a23535ec703b9/typeguard-4.5.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/18/67/36e9267722cc04a6b9f15c7f3441c2363321a3ea07da7ae0c0707beb2a9c/typing_extensions-4.15.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/a7/f9/56b0cb8c5c287c7eec02735cce74a4c25cc56d6817bab7edde6f32b024a3/tyro-1.0.6-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/39/08/aaaad47bc4e9dc8c725e68f9d04865dbcb2052843ff09c97b08904852d84/urllib3-2.6.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/ce/de/0638d8aa83c2038c5f820151006b3bf372d109afbfdb2a8fc59187cc3690/uv-0.10.3-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/f2/b3/4b9580d62e1245df52e8516cf3e404ff39cc72634d2d749d47b1dada4161/uv-0.10.4-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - pypi: https://files.pythonhosted.org/packages/b8/b4/07ab1c828bae0eb5c72cd9a4cbe8b0376d374509be3c7055e1a399bf85c3/vhacdx-0.0.10-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/b9/c4/819f000b3d64f654a054a8b24bf8d0c5e799636393135784d0886d8c808e/viser-1.0.21-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ff/b2/83a6ddf56cdcbad4e3d841fcc55d6ba7d19aeb89c50f24dd7e859ec0805f/websockets-15.0.1-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl @@ -1264,139 +1029,11 @@ environments: - pypi: https://files.pythonhosted.org/packages/2e/54/647ade08bf0db230bfea292f893923872fd20be6ac6f53b2b936ba839d75/zipp-3.23.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/63/4b/e3678b4e776db00f9f7b2fe58e547e8928ef32727d7a1ff01dea010f3f13/zstandard-0.25.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl - pypi: ./ - osx-64: - - conda: https://conda.anaconda.org/conda-forge/osx-64/bzip2-1.0.8-h500dc9f_9.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/c-ares-1.34.6-hb5e19a0_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.1.4-hbd8a1cb_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/cmake-4.2.3-h965d0ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/eigen-3.4.0-hfc0b2d5_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/krb5-1.22.2-h207b36a_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/libcurl-8.18.0-h9a2545f_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/libcxx-21.1.8-h4fb565c_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/libedit-3.1.20250104-pl5321ha958ccf_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/libev-4.33-h10d778d_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/libexpat-2.7.4-h991f03e_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/libffi-3.5.2-hd1f9c09_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/liblzma-5.8.2-h11316ed_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/libmpdec-4.0.0-hf3981d6_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/libnghttp2-1.67.0-h3338091_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/libsqlite-3.51.2-hb99441e_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/libssh2-1.11.1-hed3591d_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/libuv-1.51.0-h58003a5_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/libzlib-1.3.1-hd23fc13_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/ncurses-6.5-h0622a9a_3.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/onnxruntime-cpp-1.19.2-h417c6ca_0_cpu.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/openssl-3.6.1-hb6871ef_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pybind11-3.0.1-pyh7a1b43c_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pybind11-global-3.0.1-pyhc7ab6ef_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/python-3.13.12-h894a449_100_cp313.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.13-8_cp313.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/readline-8.3-h68b038d_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/rhash-1.4.6-h6e16a3a_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/tk-8.6.13-h7142dee_3.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/zstd-1.5.7-h3eecb57_6.conda - - pypi: https://files.pythonhosted.org/packages/18/a6/907a406bb7d359e6a63f99c313846d9eec4f7e6f7437809e03aa00fa3074/absl_py-2.4.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/8d/3f/95338030883d8c8b91223b4e21744b04d11b161a3ef117295d8241f50ab4/accessible_pygments-0.0.5-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/7e/b3/6b4067be973ae96ba0d615946e314c5ae35f9f993eca561b356540bb0c2b/alabaster-1.0.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/3e/38/7859ff46355f76f8d19459005ca000b6e7012f2f1ca597746cbcd1fbfe5e/antlr4-python3-runtime-4.9.3.tar.gz - - pypi: https://files.pythonhosted.org/packages/38/0e/27be9fdef66e72d64c0cdc3cc2823101b80585f8119b5c112c2e8f5f7dab/anyio-4.12.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/3f/38/b2becedff0bef4af9ff474b82e2dcaefca608b6d24753d0b460c94003d91/astroid-4.1.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/3a/2a/7cc015f5b9f5db42b7d48157e23356022889fc354a2813c15934b7cb5c0e/attrs-25.4.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/77/f5/21d2de20e8b8b0408f0681956ca2c69f1320a3848ac50e6e7f39c6159675/babel-2.18.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/1a/39/47f9197bdd44df24d67ac8893641e16f386c984a0619ef2ee4c51fbbc019/beautifulsoup4-4.14.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/e6/ad/3cc14f097111b4de0040c83a525973216457bbeeb63739ef1ed275c1c021/certifi-2026.1.4-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/97/45/4b3a1239bbacd321068ea6e7ac28875b03ab8bc0aa0966452db17cd36714/charset_normalizer-3.4.4-cp313-cp313-macosx_10_13_universal2.whl - - pypi: https://files.pythonhosted.org/packages/6d/c1/e419ef3723a074172b68aaa89c9f3de486ed4c2399e2dbd8113a4fdcaf9e/colorlog-6.10.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/94/35/386550fd60316d1e37eccdda609b074113298f23cef5bddb2049823fe666/dacite-1.9.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/02/10/5da547df7a391dcde17f59520a231527b8571e6f46fc8efb02ccb370ab12/docutils-0.22.4-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/a1/ff/894f11890a526f107d3d06b0e71209b45e5a7bb3666aed23725308bbf78a/dora_rs-0.4.1.tar.gz - - pypi: https://files.pythonhosted.org/packages/f0/45/77300cbdb4137a66eedf8e2488decffbe33e1d33ec912e54fdd02f2f3084/dora_rs_cli-0.4.1.tar.gz - - pypi: https://files.pythonhosted.org/packages/78/62/0ffc083b1d5f7c95eb03b260d2622dfacb70d1153011d216260b71c8e7d9/dora_utils-0.1.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/99/1a/e6d80ab0104ba947e1e5a0c5251021a4bf374cfe3b0d88e2be62b150170d/embreex-2.17.7.post7-cp313-cp313-macosx_10_13_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/e7/98/87b5946356095738cb90a6df7b35ff69ac5750f6e783d5fbcc5cb3b6cbd7/etils-1.13.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/e6/ab/fb21f4c939bb440104cc2b396d3be1d9b7a9fd3c6c2a53d98c45b3d7c954/fsspec-2026.2.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/f4/b2/50e9b292b5cac13e9e81272c7171301abc753a60460d21505b606e15cf21/furo-2025.12.19-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/a0/61/5c78b91c3143ed5c14207f463aecfc8f9dbb5092fb2869baf37c273b2705/gitdb-4.0.12-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/6a/09/e21df6aef1e1ffc0c816f0522ddc3f6dcded766c3261813131c78a704470/gitpython-3.1.46-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/b3/87/de0b33f6f00687499ca1371f22aa73396341b85bf88f1a284f9da8842493/glfw-2.10.0-py2.py27.py3.py30.py31.py32.py33.py34.py35.py36.py37.py38.py39.py310.py311.py312.py313.py314-none-macosx_10_6_intel.whl - - pypi: https://files.pythonhosted.org/packages/04/4b/29cac41a4d98d144bf5f6d33995617b185d14b22401f75ca86f384e87ff1/h11-0.16.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/7e/f5/f66802a942d491edb555dd61e3a9961140fd64c90bce1eafd741609d334d/httpcore-1.0.9-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/2a/39/e50c7c3a983047577ee07d2a9e53faf5a69493943ec3f6a384bdc792deb2/httpx-0.28.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/c6/50/e0edd38dcd63fb26a8547f13d28f7a008bc4a3fd4eb4ff030673f22ad41a/hydra_core-1.3.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/0e/61/66938bbb5fc52dbdf84594873d5b51fb1f7c7794e9c0f5bd885f30bc507b/idna-3.11-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/fb/fe/301e0936b79bcab4cacc7548bf2853fc28dced0a578bab1f7ef53c9aa75b/imageio-2.37.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/ff/62/85c4c919272577931d407be5ba5d71c20f0b616d31a0befe0ae45bb79abd/imagesize-1.4.1-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/a4/ed/1f1afb2e9e7f38a545d628f864d562a5ae64fe6f7a10e28ffb9b185b4e89/importlib_resources-6.5.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/62/a1/3d680cbfd5f4b8f15abc1d571870c5fc3e594bb582bc3b64ea099db13e56/jinja2-3.1.6-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/69/90/f63fb5873511e014207a475e2bb4e8b2e570d655b00ac19a9a0ca0a385ee/jsonschema-4.26.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/41/45/1a4ed80516f02155c51f51e8cedb3c1902296743db0bbc66608a0db2814f/jsonschema_specifications-2025.9.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/5d/f4/2a94a3d3dfd6c6b433501b8d470a1960a20ecce93245cf2db1706adf6c19/lxml-6.0.2-cp313-cp313-macosx_10_13_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/a9/50/5b1d70de548fb1e11e15ea9ebec0480365462d202f98b66ad7e154284327/m2r2-0.3.4-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/a7/f5/9ae489a466543ca8f35f2eeeed7f043f714223e0905eaf62b2fce4684a07/manifold3d-3.3.2-cp313-cp313-macosx_10_14_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/8b/7c/c5dd5b255b9828ba5df729e62fdd470a322c938f07ef392ca03c0592bb3a/mapbox_earcut-2.0.0-cp313-cp313-macosx_10_13_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/94/54/e7d793b573f298e1c9013b8c4dade17d481164aa517d1d7148619c2cedbf/markdown_it_py-4.0.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/38/2f/907b9c7bbba283e68f20259574b13d005c121a0fa4c175f9bed27c4597ff/markupsafe-3.0.3-cp313-cp313-macosx_10_13_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/09/ec/4b43dae793655b7d8a25f76119624350b4d65eb663459eb9603d7f1f0345/mistune-0.8.4-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/8a/d1/b902d38b6e5ba3bdddbec469bba388d647f960aeed7b5b3623a8debe8a76/msgspec-0.20.0-cp313-cp313-macosx_10_13_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/87/2a/371033684e4ddcda47c97661fb6e9617c0e5e3749af082a9b4d5d1bf9f27/mujoco-3.5.0-cp313-cp313-macosx_10_16_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/9e/c9/b2622292ea83fbb4ec318f5b9ab867d0a28ab43c5717bb85b0a5f6b3b0a4/networkx-3.6.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/88/b2/d0896bdcdc8d28a7fc5717c305f1a861c26e18c05047949fb371034d98bd/nodeenv-1.10.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/a1/22/815b9fe25d1d7ae7d492152adbc7226d3eff731dffc38fe970589fcaaa38/numpy-2.4.2-cp313-cp313-macosx_10_13_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/e3/94/1843518e420fa3ed6919835845df698c7e27e183cb997394e4a670973a65/omegaconf-2.3.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/b7/b9/c538f279a4e237a006a2c98387d081e9eb060d203d8ed34467cc0f0b9b53/packaging-26.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/14/a1/16c4b823838ba4c9c52c0e6bbda903a3fe5a1bdbf1b8eb4fff7156f3e318/pillow-12.1.1-cp313-cp313-macosx_10_13_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/cb/4f/679fa7e84dadbaca7a65f7cdba8d6c83febbd93ca12fa4adf40ba3b6362b/pyarrow-23.0.1-cp313-cp313-macosx_12_0_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/07/86/f1f61b7a0701f9d1299e5293d083318019f91021a4d449f94d59dbe024e4/pycollada-0.9.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/0c/c3/44f3fbbfa403ea2a7c779186dc20772604442dde72947e7d01069cbe98e3/pycparser-3.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/c7/21/705964c7812476f378728bdf590ca4b771ec72385c533964653c68e86bdc/pygments-2.19.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/de/e4/1ba6f44e491c4eece978685230dde56b14d51a0365bc1b774ddaa94d14cd/pyopengl-3.1.10-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/ec/57/56b9bcc3c9c6a792fcbaf139543cee77261f3651ca9da0c93f5c1221264b/python_dateutil-2.9.0.post0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/d1/11/0fd08f8192109f7169db964b5707a2f1e8b745d4e239b784a5a1dd80d1db/pyyaml-6.0.3-cp313-cp313-macosx_10_13_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/2c/58/ca301544e1fa93ed4f80d724bf5b194f6e4b945841c5bfd555878eea9fcb/referencing-0.37.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/1e/db/4254e3eabe8020b458f1a747140d32277ec7a271daf1d235b70dc0b4e6e3/requests-2.32.5-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/ef/45/615f5babd880b4bd7d405cc0dc348234c5ffb6ed1ea33e152ede08b2072d/rich-14.3.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/16/80/579e75e0be0439d11e479732e4c194a9c6e6d152670dae561b9525015425/robot_descriptions-1.22.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/04/54/6f679c435d28e0a568d8e8a7c0a93a09010818634c3c3907fc98d8983770/roman_numerals-4.1.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/ed/dc/d61221eb88ff410de3c49143407f6f3147acf2538c86f2ab7ce65ae7d5f9/rpds_py-0.30.0-cp313-cp313-macosx_10_12_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/04/d9/108cd989a4c0954e60b3cdc86fd2826407702b5375f6dfdab2802e5fed98/rtree-1.4.1-py3-none-macosx_10_9_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/0c/51/3468fdfd49387ddefee1636f5cf6d03ce603b75205bf439bbf0e62069bfd/scipy-1.17.0-cp313-cp313-macosx_10_14_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/c3/90/98ef257c23c46425dc4d1d31005ad7c8d649fe423a38b917db02c30f1f5a/shapely-2.1.2-cp313-cp313-macosx_10_13_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/b7/ce/149a00dd41f10bc29e5921b496af8b574d8413afcd5e30dfa0ed46c2cc5e/six-1.17.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/04/be/d09147ad1ec7934636ad912901c5fd7667e1c858e19d355237db0d0cd5e4/smmap-5.0.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/c8/78/3565d011c61f5a43488987ee32b6f3f656e7f107ac2782dd57bdd7d91d9a/snowballstemmer-3.0.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/46/2c/1462b1d0a634697ae9e55b3cecdcb64788e8b7d63f54d923fcd0bb140aed/soupsieve-2.8.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/73/f7/b1884cb3188ab181fc81fa00c266699dab600f927a964df02ec3d5d1916a/sphinx-9.1.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/d8/11/9825443890d3ef6b6a0db938054e7c806e9911509e0315fe984d00a090c1/sphinx_autoapi-3.7.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/3c/dd/018ce05c532a22007ac58d4f45232514cd9d6dd0ee1dc374e309db830983/sphinx_basic_ng-1.0.0b2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/38/5e/49c1330add8c48ef52e50c82d7d847e32b7f786d5ddc1cafcd36ac63f1e3/sphinxcontrib_ansi_rai-0.7.0.dev20250623-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/5d/85/9ebeae2f76e9e77b952f4b274c27238156eae7979c5421fba91a28f4970d/sphinxcontrib_applehelp-2.0.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/35/7a/987e583882f985fe4d7323774889ec58049171828b58c2217e7f79cdf44e/sphinxcontrib_devhelp-2.0.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/0a/7b/18a8c0bcec9182c05a0b3ec2a776bba4ead82750a55ff798e8d406dae604/sphinxcontrib_htmlhelp-2.1.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/c2/42/4c8646762ee83602e3fb3fbe774c2fac12f317deb0b5dbeeedd2d3ba4b77/sphinxcontrib_jsmath-1.0.1-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/84/04/53406477f01fa5bdcb1344fac421c46b6dce112d980c58237825ddb262a2/sphinxcontrib_programoutput_rai-0.18.dev0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/27/83/859ecdd180cacc13b1f7e857abf8582a64552ea7a061057a6c716e790fce/sphinxcontrib_qthelp-2.0.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/52/a7/d2782e4e3f77c8450f727ba74a8f12756d5ba823d81b941f1b04da9d033a/sphinxcontrib_serializinghtml-2.0.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/3a/83/4f5b250220e1a5acd31345a5ec1c95a7769725d0d8135276f399f44062f8/svg_path-7.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/16/e1/3079a9ff9b8e11b846c6ac5c8b5bfb7ff225eee721825310c91b3b50304f/tqdm-4.67.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/3c/b9/da09903ea53b677a58ba770112de6fe8b2acb8b4cd9bffae4ff6cfe7c072/trimesh-4.11.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/18/67/36e9267722cc04a6b9f15c7f3441c2363321a3ea07da7ae0c0707beb2a9c/typing_extensions-4.15.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/39/08/aaaad47bc4e9dc8c725e68f9d04865dbcb2052843ff09c97b08904852d84/urllib3-2.6.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/40/db/c5729ec39ed557ac673ca993abd71e5b18d71a92f95f1845152e639000ff/uv-0.10.3-py3-none-macosx_10_12_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/0e/54/c2fc08d9324bbd92735caf9207cbabada3a8dd9d270d6e46ca69eb7f883d/vhacdx-0.0.10-cp313-cp313-macosx_10_13_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/b9/c4/819f000b3d64f654a054a8b24bf8d0c5e799636393135784d0886d8c808e/viser-1.0.21-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/8a/05/aa116ec9943c718905997412c5989f7ed671bc0188ee2ba89520e8765d7b/websockets-15.0.1-cp313-cp313-macosx_10_13_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/33/76/35d05267ac82f53ae9b0e554da7c5e281ee61f3cad44c743f0fcd354f211/xxhash-3.6.0-cp313-cp313-macosx_10_13_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/c8/60/4ea0d6df0b497d51bf2ef87eaab0eb26f8bc3b3313c012da5df3383cced9/yourdfpy-0.0.60-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/2e/54/647ade08bf0db230bfea292f893923872fd20be6ac6f53b2b936ba839d75/zipp-3.23.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/35/0b/8df9c4ad06af91d39e94fa96cc010a24ac4ef1378d3efab9223cc8593d40/zstandard-0.25.0-cp313-cp313-macosx_10_13_x86_64.whl - - pypi: ./ osx-arm64: - conda: https://conda.anaconda.org/conda-forge/osx-arm64/bzip2-1.0.8-hd037594_9.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/c-ares-1.34.6-hc919400_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.1.4-hbd8a1cb_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/cmake-4.2.3-h8cb302d_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/cmake-4.2.3-h8cb302d_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/eigen-3.4.0-h49c215f_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/icu-78.2-h38cb7af_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/krb5-1.22.2-h385eeb1_0.conda @@ -1416,8 +1053,8 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ncurses-6.5-h5e97a16_3.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/onnxruntime-cpp-1.19.2-hda9e549_0_cpu.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/openssl-3.6.1-hd24854e_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pybind11-3.0.1-pyh7a1b43c_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pybind11-global-3.0.1-pyhc7ab6ef_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pybind11-3.0.2-pyh7a1b43c_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pybind11-global-3.0.2-pyhc7ab6ef_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-3.13.12-h20e6be0_100_cp313.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.13-8_cp313.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/readline-8.3-h46df422_0.conda @@ -1438,6 +1075,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/97/45/4b3a1239bbacd321068ea6e7ac28875b03ab8bc0aa0966452db17cd36714/charset_normalizer-3.4.4-cp313-cp313-macosx_10_13_universal2.whl - pypi: https://files.pythonhosted.org/packages/6d/c1/e419ef3723a074172b68aaa89c9f3de486ed4c2399e2dbd8113a4fdcaf9e/colorlog-6.10.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/94/35/386550fd60316d1e37eccdda609b074113298f23cef5bddb2049823fe666/dacite-1.9.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/55/e2/2537ebcff11c1ee1ff17d8d0b6f4db75873e3b0fb32c2d4a2ee31ecb310a/docstring_parser-0.17.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/02/10/5da547df7a391dcde17f59520a231527b8571e6f46fc8efb02ccb370ab12/docutils-0.22.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e6/86/9ce12fbbfc365b7037666ffbc79ac93ba05690b22cac8fad8d2104577dfe/dora_rs-0.4.1-cp37-abi3-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/38/82/78d57efaf364d4ae45c5e87c5c370b0999da92ecc72f9ba96949a93faa4f/dora_rs_cli-0.4.1-cp37-abi3-macosx_11_0_arm64.whl @@ -1449,6 +1087,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/6a/09/e21df6aef1e1ffc0c816f0522ddc3f6dcded766c3261813131c78a704470/gitpython-3.1.46-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/b6/a6/6ea2f73ad4474896d9e38b3ffbe6ffd5a802c738392269e99e8c6621a461/glfw-2.10.0-py2.py27.py3.py30.py31.py32.py33.py34.py35.py36.py37.py38.py39.py310.py311.py312.py313.py314-none-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/04/4b/29cac41a4d98d144bf5f6d33995617b185d14b22401f75ca86f384e87ff1/h11-0.16.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/31/96/ba99a003c763998035b0de4c299598125df5fc6c9ccf834f152ddd60e0fb/h5py-3.15.1-cp313-cp313-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/7e/f5/f66802a942d491edb555dd61e3a9961140fd64c90bce1eafd741609d334d/httpcore-1.0.9-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/2a/39/e50c7c3a983047577ee07d2a9e53faf5a69493943ec3f6a384bdc792deb2/httpx-0.28.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c6/50/e0edd38dcd63fb26a8547f13d28f7a008bc4a3fd4eb4ff030673f22ad41a/hydra_core-1.3.2-py3-none-any.whl @@ -1468,7 +1107,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/09/ec/4b43dae793655b7d8a25f76119624350b4d65eb663459eb9603d7f1f0345/mistune-0.8.4-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/57/b6/eff0305961a1d9447ec2b02f8c73c8946f22564d302a504185b730c9a761/msgspec-0.20.0-cp313-cp313-macosx_11_0_arm64.whl - - pypi: https://files.pythonhosted.org/packages/6f/c9/26bd4979d503d03f7a6ded851c3094a5708cb534cf0dc80b4db6672da2b0/mujoco-3.5.0-cp313-cp313-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/e8/51/c3e5c3b199b1b74c85f0cb02dc0ef80363bf91ea245ee8a932804768d5e8/mujoco-3.4.0-cp313-cp313-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/9e/c9/b2622292ea83fbb4ec318f5b9ab867d0a28ab43c5717bb85b0a5f6b3b0a4/networkx-3.6.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/88/b2/d0896bdcdc8d28a7fc5717c305f1a861c26e18c05047949fb371034d98bd/nodeenv-1.10.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/09/f0/817d03a03f93ba9c6c8993de509277d84e69f9453601915e4a69554102a1/numpy-2.4.2-cp313-cp313-macosx_11_0_arm64.whl @@ -1509,9 +1148,11 @@ environments: - pypi: https://files.pythonhosted.org/packages/3a/83/4f5b250220e1a5acd31345a5ec1c95a7769725d0d8135276f399f44062f8/svg_path-7.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/16/e1/3079a9ff9b8e11b846c6ac5c8b5bfb7ff225eee721825310c91b3b50304f/tqdm-4.67.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/3c/b9/da09903ea53b677a58ba770112de6fe8b2acb8b4cd9bffae4ff6cfe7c072/trimesh-4.11.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d4/35/7541d1f046491fac8ce05d543d3f0de0af02086ad864dd3a23535ec703b9/typeguard-4.5.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/18/67/36e9267722cc04a6b9f15c7f3441c2363321a3ea07da7ae0c0707beb2a9c/typing_extensions-4.15.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/a7/f9/56b0cb8c5c287c7eec02735cce74a4c25cc56d6817bab7edde6f32b024a3/tyro-1.0.6-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/39/08/aaaad47bc4e9dc8c725e68f9d04865dbcb2052843ff09c97b08904852d84/urllib3-2.6.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/0b/8c/cce26f6da9f69a9f0df032d642a4cb5603249f145c368e41b0154c463ca9/uv-0.10.3-py3-none-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/63/91/c4ddf7e55e05394967615050cc364a999157a44c008d0e1e9db2ed49a11c/uv-0.10.4-py3-none-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/3b/9e/42adb642a12915acc9cb2bfab21710a6aabf045c26967ba0ff0e08a872d0/vhacdx-0.0.10-cp313-cp313-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/b9/c4/819f000b3d64f654a054a8b24bf8d0c5e799636393135784d0886d8c808e/viser-1.0.21-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ff/0b/33cef55ff24f2d92924923c99926dcce78e7bd922d649467f0eda8368923/websockets-15.0.1-cp313-cp313-macosx_11_0_arm64.whl @@ -1523,7 +1164,7 @@ environments: win-64: - conda: https://conda.anaconda.org/conda-forge/win-64/bzip2-1.0.8-h0ad9c76_9.conda - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.1.4-h4c7d964_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/cmake-4.2.3-hdcbee5b_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/cmake-4.2.3-hdcbee5b_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/eigen-3.4.0-h477610d_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/krb5-1.22.2-h0ea6238_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libcurl-8.18.0-h8206538_1.conda @@ -1537,8 +1178,8 @@ environments: - conda: https://conda.anaconda.org/conda-forge/win-64/libzlib-1.3.1-h2466b09_2.conda - conda: https://conda.anaconda.org/conda-forge/win-64/onnxruntime-cpp-1.19.2-h50ebc8d_0_cpu.conda - conda: https://conda.anaconda.org/conda-forge/win-64/openssl-3.6.1-hf411b9b_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pybind11-3.0.1-pyh7a1b43c_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pybind11-global-3.0.1-pyh5e4992e_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pybind11-3.0.2-pyh7a1b43c_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pybind11-global-3.0.2-pyh5e4992e_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/python-3.13.12-h09917c8_100_cp313.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.13-8_cp313.conda - conda: https://conda.anaconda.org/conda-forge/win-64/tk-8.6.13-h6ed50ae_3.conda @@ -1562,6 +1203,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/6d/c1/e419ef3723a074172b68aaa89c9f3de486ed4c2399e2dbd8113a4fdcaf9e/colorlog-6.10.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/94/35/386550fd60316d1e37eccdda609b074113298f23cef5bddb2049823fe666/dacite-1.9.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/55/e2/2537ebcff11c1ee1ff17d8d0b6f4db75873e3b0fb32c2d4a2ee31ecb310a/docstring_parser-0.17.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/02/10/5da547df7a391dcde17f59520a231527b8571e6f46fc8efb02ccb370ab12/docutils-0.22.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/1c/d4/e8134ce7d977fd87f507b6951b53df3aa7ab91122e7d487707352336703b/dora_rs-0.4.1-cp37-abi3-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/93/a7/c53764b09b7a6e6a21d46df656513391d8429b729fdde26372d961938297/dora_rs_cli-0.4.1-cp37-abi3-win_amd64.whl @@ -1573,6 +1215,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/6a/09/e21df6aef1e1ffc0c816f0522ddc3f6dcded766c3261813131c78a704470/gitpython-3.1.46-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/bd/e1/6d6816b296a529ac9b897ad228b1e084eb1f92319e96371880eebdc874a6/glfw-2.10.0-py2.py27.py3.py30.py31.py32.py33.py34.py35.py36.py37.py38.py39.py310.py311.py312.py313.py314-none-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/04/4b/29cac41a4d98d144bf5f6d33995617b185d14b22401f75ca86f384e87ff1/h11-0.16.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e5/ea/fbb258a98863f99befb10ed727152b4ae659f322e1d9c0576f8a62754e81/h5py-3.15.1-cp313-cp313-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/7e/f5/f66802a942d491edb555dd61e3a9961140fd64c90bce1eafd741609d334d/httpcore-1.0.9-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/2a/39/e50c7c3a983047577ee07d2a9e53faf5a69493943ec3f6a384bdc792deb2/httpx-0.28.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c6/50/e0edd38dcd63fb26a8547f13d28f7a008bc4a3fd4eb4ff030673f22ad41a/hydra_core-1.3.2-py3-none-any.whl @@ -1592,7 +1235,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/09/ec/4b43dae793655b7d8a25f76119624350b4d65eb663459eb9603d7f1f0345/mistune-0.8.4-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/f1/25/5e8080fe0117f799b1b68008dc29a65862077296b92550632de015128579/msgspec-0.20.0-cp313-cp313-win_amd64.whl - - pypi: https://files.pythonhosted.org/packages/ab/53/54a0815d43c83e1074cfc7da98a3dea88d7dda48c03edfd225a387a3767b/mujoco-3.5.0-cp313-cp313-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/dc/25/bbf8c01758d619c86bcbe58db6a7d61ca423e7c76791f323b8ea2e92c2bd/mujoco-3.4.0-cp313-cp313-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/9e/c9/b2622292ea83fbb4ec318f5b9ab867d0a28ab43c5717bb85b0a5f6b3b0a4/networkx-3.6.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/88/b2/d0896bdcdc8d28a7fc5717c305f1a861c26e18c05047949fb371034d98bd/nodeenv-1.10.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/43/bc/6352f343522fcb2c04dbaf94cb30cca6fd32c1a750c06ad6231b4293708c/numpy-2.4.2-cp313-cp313-win_amd64.whl @@ -1633,9 +1276,11 @@ environments: - pypi: https://files.pythonhosted.org/packages/3a/83/4f5b250220e1a5acd31345a5ec1c95a7769725d0d8135276f399f44062f8/svg_path-7.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/16/e1/3079a9ff9b8e11b846c6ac5c8b5bfb7ff225eee721825310c91b3b50304f/tqdm-4.67.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/3c/b9/da09903ea53b677a58ba770112de6fe8b2acb8b4cd9bffae4ff6cfe7c072/trimesh-4.11.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d4/35/7541d1f046491fac8ce05d543d3f0de0af02086ad864dd3a23535ec703b9/typeguard-4.5.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/18/67/36e9267722cc04a6b9f15c7f3441c2363321a3ea07da7ae0c0707beb2a9c/typing_extensions-4.15.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/a7/f9/56b0cb8c5c287c7eec02735cce74a4c25cc56d6817bab7edde6f32b024a3/tyro-1.0.6-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/39/08/aaaad47bc4e9dc8c725e68f9d04865dbcb2052843ff09c97b08904852d84/urllib3-2.6.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/d5/95/89b9caeb4007d950dfa5fa5923c2ea67de541de0e3582598b7b9c7eeac53/uv-0.10.3-py3-none-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/31/dd/1900452678d46f6a649ab8167bededb02500b0561fc9f69e1f52607895c7/uv-0.10.4-py3-none-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/32/25/f0e6806824f88d47ab8bc1c9bf6f11634fd7b382d635d0696825f3b5672f/vhacdx-0.0.10-cp313-cp313-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/b9/c4/819f000b3d64f654a054a8b24bf8d0c5e799636393135784d0886d8c808e/viser-1.0.21-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/1b/6c/c65773d6cab416a64d191d6ee8a8b1c68a09970ea6909d16965d26bfed1e/websockets-15.0.1-cp313-cp313-win_amd64.whl @@ -1644,7 +1289,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/2e/54/647ade08bf0db230bfea292f893923872fd20be6ac6f53b2b936ba839d75/zipp-3.23.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d9/82/b9c06c870f3bd8767c201f1edbdf9e8dc34be5b0fbc5682c4f80fe948475/zstandard-0.25.0-cp313-cp313-win_amd64.whl - pypi: ./ - py310: + mjwarp: channels: - url: https://conda.anaconda.org/conda-forge/ indexes: @@ -1659,11 +1304,11 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-hda65f42_9.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/c-ares-1.34.6-hb03c661_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.1.4-hbd8a1cb_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/cmake-4.2.3-hc85cc9f_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/cmake-4.2.3-hc85cc9f_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/eigen-3.4.0-h171cf75_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/gcc_impl_linux-64-13.4.0-hf2caf72_17.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/gcc_impl_linux-64-13.4.0-he2fa53e_18.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/gcc_linux-64-13.4.0-h0a5b801_21.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/gxx_impl_linux-64-13.4.0-h6a38259_17.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/gxx_impl_linux-64-13.4.0-h6a38259_18.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/gxx_linux-64-13.4.0-h587059e_21.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/icu-78.2-h33c6efd_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/kernel-headers_linux-64-4.18.0-he073ed8_9.conda @@ -1675,30 +1320,30 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/libev-4.33-hd590300_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.7.4-hecca717_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libffi-3.5.2-h3435931_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-15.2.0-he0feb66_17.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/libgcc-devel_linux-64-13.4.0-hd1d28cc_117.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-15.2.0-h69a702a_17.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-15.2.0-he0feb66_17.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-15.2.0-he0feb66_18.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/libgcc-devel_linux-64-13.4.0-hd1d28cc_118.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-15.2.0-h69a702a_18.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-15.2.0-he0feb66_18.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/liblzma-5.8.2-hb03c661_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libmpdec-4.0.0-hb03c661_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libnghttp2-1.67.0-had1ee68_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libnsl-2.0.1-hb9d3cd8_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libsanitizer-13.4.0-h2a15e64_17.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libsanitizer-13.4.0-h2a15e64_18.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.51.2-hf4e2dac_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libssh2-1.11.1-hcf80075_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-15.2.0-h934c35e_17.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/libstdcxx-devel_linux-64-13.4.0-h6963c3b_117.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-15.2.0-hdf11a46_17.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-15.2.0-h934c35e_18.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/libstdcxx-devel_linux-64-13.4.0-h6963c3b_118.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-15.2.0-hdf11a46_18.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.41.3-h5347b49_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libuv-1.51.0-hb03c661_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libxcrypt-4.4.36-hd590300_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.1-hb9d3cd8_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.5-h2d0b736_3.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/onnxruntime-cpp-1.19.2-h641f3bf_0_cpu.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.6.1-h35e630c_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/patchelf-0.17.2-h58526e2_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pybind11-3.0.1-pyh7a1b43c_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pybind11-global-3.0.1-pyhc7ab6ef_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.10.19-h3c07f61_3_cpython.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pybind11-3.0.2-pyh7a1b43c_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pybind11-global-3.0.2-pyhc7ab6ef_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.13.12-hc97d973_100_cp313.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.13-8_cp313.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/readline-8.3-h853b02a_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/rhash-1.4.6-hb9d3cd8_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/sysroot_linux-64-2.28-h4ee821c_9.conda @@ -1706,171 +1351,357 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.7-hb78ec9c_6.conda - pypi: https://files.pythonhosted.org/packages/18/a6/907a406bb7d359e6a63f99c313846d9eec4f7e6f7437809e03aa00fa3074/absl_py-2.4.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/8d/3f/95338030883d8c8b91223b4e21744b04d11b161a3ef117295d8241f50ab4/accessible_pygments-0.0.5-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/7e/b3/6b4067be973ae96ba0d615946e314c5ae35f9f993eca561b356540bb0c2b/alabaster-1.0.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/3e/38/7859ff46355f76f8d19459005ca000b6e7012f2f1ca597746cbcd1fbfe5e/antlr4-python3-runtime-4.9.3.tar.gz - pypi: https://files.pythonhosted.org/packages/38/0e/27be9fdef66e72d64c0cdc3cc2823101b80585f8119b5c112c2e8f5f7dab/anyio-4.12.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/af/0f/3b8fdc946b4d9cc8cc1e8af42c4e409468c84441b933d037e101b3d72d86/astroid-3.3.11-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/3a/2a/7cc015f5b9f5db42b7d48157e23356022889fc354a2813c15934b7cb5c0e/attrs-25.4.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/b0/c2/bb8ba1cec816fa356e19da83c59bfd4ac34dba1ae41eb7622c18f4b1d48d/auditwheel-6.6.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/77/f5/21d2de20e8b8b0408f0681956ca2c69f1320a3848ac50e6e7f39c6159675/babel-2.18.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/b9/fa/123043af240e49752f1c4bd24da5053b6bd00cad78c2be53c0d1e8b975bc/backports.tarfile-1.2.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/1a/39/47f9197bdd44df24d67ac8893641e16f386c984a0619ef2ee4c51fbbc019/beautifulsoup4-4.14.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/c5/0d/84a4380f930db0010168e0aa7b7a8fed9ba1835a8fbb1472bc6d0201d529/build-1.4.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e6/ad/3cc14f097111b4de0040c83a525973216457bbeeb63739ef1ed275c1c021/certifi-2026.1.4-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/98/29/9b366e70e243eb3d14a5cb488dfd3a0b6b2f1fb001a203f653b93ccfac88/cffi-2.0.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/db/3c/33bac158f8ab7f89b2e59426d5fe2e4f63f7ed25df84c036890172b412b5/cfgv-3.5.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/36/3b/60cbd1f8e93aa25d1c669c649b7a655b0b5fb4c571858910ea9332678558/charset_normalizer-3.4.4-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/f5/83/6ab5883f57c9c801ce5e5677242328aa45592be8a00644310a008d04f922/charset_normalizer-3.4.4-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/6d/c1/e419ef3723a074172b68aaa89c9f3de486ed4c2399e2dbd8113a4fdcaf9e/colorlog-6.10.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/f8/02/aa7ec01d1a5023c4b680ab7257f9bfde9defe8fdddfe40be096ac19e8177/coverage-7.13.4-cp310-cp310-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/37/19/e1b8f964a834eddb44fa1b9a9976f4e414cbb7aa62809b6760c8803d22d1/cryptography-46.0.5-cp38-abi3-manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/94/35/386550fd60316d1e37eccdda609b074113298f23cef5bddb2049823fe666/dacite-1.9.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/33/6b/e0547afaf41bf2c42e52430072fa5658766e3d65bd4b03a563d1b6336f57/distlib-0.4.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/8f/d7/9322c609343d929e75e7e5e6255e614fcc67572cfd083959cdef3b7aad79/docutils-0.21.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/55/e2/2537ebcff11c1ee1ff17d8d0b6f4db75873e3b0fb32c2d4a2ee31ecb310a/docstring_parser-0.17.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/94/53/7dc142faa1719333d57c78cfcf419f2b176770b49ebef54e0bbfa34212ac/dora_rs-0.4.1-cp37-abi3-manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/3c/3e/f3d1e28df9457089055dacf3ca7ca3751ed274d312d9a8515255d80011ec/dora_rs_cli-0.4.1-cp37-abi3-manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/78/62/0ffc083b1d5f7c95eb03b260d2622dfacb70d1153011d216260b71c8e7d9/dora_utils-0.1.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/c7/3c/bbebd5da641ff1e40b1f3d6ae77a79d5ff4a7183ef548ff8db145c91bb9b/embreex-2.17.7.post7-cp310-cp310-manylinux2010_x86_64.manylinux_2_12_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/59/c7/410b62268fa98d9f0f2f5ab14b6e718e308a5f30dc4b9c2dcb0223d98ac8/embreex-2.17.7.post7-cp313-cp313-manylinux2010_x86_64.manylinux_2_12_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/e7/98/87b5946356095738cb90a6df7b35ff69ac5750f6e783d5fbcc5cb3b6cbd7/etils-1.13.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/8a/0e/97c33bf5009bdbac74fd2beace167cab3f978feb69cc36f1ef79360d6c4e/exceptiongroup-1.3.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/ab/84/02fc1827e8cdded4aa65baef11296a9bbe595c474f0d6d758af082d849fd/execnet-2.1.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/e7/04/a94ebfb4eaaa08db56725a40de2887e95de4e8641b9e902c311bfa00aa39/filelock-3.24.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e8/2d/d2a548598be01649e2d46231d151a6c56d10b964d94043a335ae56ea2d92/flatbuffers-25.12.19-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e6/ab/fb21f4c939bb440104cc2b396d3be1d9b7a9fd3c6c2a53d98c45b3d7c954/fsspec-2026.2.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/f4/b2/50e9b292b5cac13e9e81272c7171301abc753a60460d21505b606e15cf21/furo-2025.12.19-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a0/61/5c78b91c3143ed5c14207f463aecfc8f9dbb5092fb2869baf37c273b2705/gitdb-4.0.12-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/6a/09/e21df6aef1e1ffc0c816f0522ddc3f6dcded766c3261813131c78a704470/gitpython-3.1.46-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/5a/3f/efeb7c6801c46e11bd666a5180f0d615f74f72264212f74f39586c6fda9d/glfw-2.10.0-py2.py27.py3.py30.py31.py32.py33.py34.py35.py36.py37.py38.py39.py310.py311.py312.py313.py314-none-manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/04/4b/29cac41a4d98d144bf5f6d33995617b185d14b22401f75ca86f384e87ff1/h11-0.16.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d9/69/4402ea66272dacc10b298cca18ed73e1c0791ff2ae9ed218d3859f9698ac/h5py-3.15.1-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/7e/f5/f66802a942d491edb555dd61e3a9961140fd64c90bce1eafd741609d334d/httpcore-1.0.9-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/2a/39/e50c7c3a983047577ee07d2a9e53faf5a69493943ec3f6a384bdc792deb2/httpx-0.28.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c6/50/e0edd38dcd63fb26a8547f13d28f7a008bc4a3fd4eb4ff030673f22ad41a/hydra_core-1.3.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/42/77/de194443bf38daed9452139e960c632b0ef9f9a5dd9ce605fdf18ca9f1b1/id-1.6.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/b8/58/40fbbcefeda82364720eba5cf2270f98496bdfa19ea75b4cccae79c698e6/identify-2.6.16-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/0e/61/66938bbb5fc52dbdf84594873d5b51fb1f7c7794e9c0f5bd885f30bc507b/idna-3.11-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/fb/fe/301e0936b79bcab4cacc7548bf2853fc28dced0a578bab1f7ef53c9aa75b/imageio-2.37.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/ff/62/85c4c919272577931d407be5ba5d71c20f0b616d31a0befe0ae45bb79abd/imagesize-1.4.1-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/fa/5e/f8e9a1d23b9c20a551a8a02ea3637b4642e22c2626e3a13a9a29cdea99eb/importlib_metadata-8.7.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a4/ed/1f1afb2e9e7f38a545d628f864d562a5ae64fe6f7a10e28ffb9b185b4e89/importlib_resources-6.5.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/cb/b1/3846dd7f199d53cb17f49cba7e651e9ce294d8497c8c150530ed11865bb8/iniconfig-2.3.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/7f/66/b15ce62552d84bbfcec9a4873ab79d993a1dd4edb922cbfccae192bd5b5f/jaraco.classes-3.4.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/8d/48/aa685dbf1024c7bd82bede569e3a85f82c32fd3d79ba5fea578f0159571a/jaraco_context-6.1.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/fd/c4/813bb09f0985cb21e959f21f2464169eca882656849adf727ac7bb7e1767/jaraco_functools-4.4.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/b2/a3/e137168c9c44d18eff0376253da9f1e9234d0239e0ee230d2fee6cea8e55/jeepney-0.9.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/62/a1/3d680cbfd5f4b8f15abc1d571870c5fc3e594bb582bc3b64ea099db13e56/jinja2-3.1.6-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/69/90/f63fb5873511e014207a475e2bb4e8b2e570d655b00ac19a9a0ca0a385ee/jsonschema-4.26.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/41/45/1a4ed80516f02155c51f51e8cedb3c1902296743db0bbc66608a0db2814f/jsonschema_specifications-2025.9.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/81/db/e655086b7f3a705df045bf0933bdd9c2f79bb3c97bfef1384598bb79a217/keyring-25.7.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/20/cf/cab09478699b003857ed6ebfe95e9fb9fa3d3c25f1353b905c9b73cfb624/lxml-6.0.2-cp310-cp310-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/a9/50/5b1d70de548fb1e11e15ea9ebec0480365462d202f98b66ad7e154284327/m2r2-0.3.4-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/f0/ad/2550e5150adde1f912c8f09b4f3de4d6330d686b6c2fcf650403d78e87eb/manifold3d-3.3.2-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/3c/e2/11122fddd086b930502eb4a954735da0f75e9d658fdab2d9e5914b9ebd2a/mapbox_earcut-2.0.0-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/d0/34/9e591954939276bb679b73773836c6684c22e56d05980e31d52a9a8deb18/lxml-6.0.2-cp313-cp313-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/1f/14/24ad90c7d9a6532c32b0392f1c3518bbab5e37092c99cc69bed17d30fb0c/manifold3d-3.3.2-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/03/30/e54ececd0403a5495c340b693075abec92a6d17dc44283b6cb059534f7ed/mapbox_earcut-2.0.0-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/94/54/e7d793b573f298e1c9013b8c4dade17d481164aa517d1d7148619c2cedbf/markdown_it_py-4.0.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/af/cd/ce6e848bbf2c32314c9b237839119c5a564a59725b53157c856e90937b7a/markupsafe-3.0.3-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/09/ec/4b43dae793655b7d8a25f76119624350b4d65eb663459eb9603d7f1f0345/mistune-0.8.4-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/a4/8e/469e5a4a2f5855992e425f3cb33804cc07bf18d48f2db061aec61ce50270/more_itertools-10.8.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/15/2a/48e41d9ef0a24b1c6e67cbd94a676799e0561bfbc163be1aaaff5ca853f5/msgspec-0.20.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/ca/d6/a5a7b615b257867b7c97db6b3ce07dec9351d5d9d5a5aca881cbb583d7a3/mujoco-3.5.0-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/b9/54/dd730b32ea14ea797530a4479b2ed46a6fb250f682a9cfb997e968bf0261/networkx-3.4.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/6f/84/c0dc75c7fb596135f999e59a410d9f45bdabb989f1cb911f0016d22b747b/nh3-0.3.3-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/eb/33/40cd74219417e78b97c47802037cf2d87b91973e18bb968a7da48a96ea44/ml_dtypes-0.5.4-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/43/e3/7d92a15f894aa0c9c4b49b8ee9ac9850d6e63b03c9c32c0367a13ae62209/mpmath-1.3.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/28/83/36557b04cfdc317ed8a525c4993b23e43a8fbcddaddd78619112ca07138c/msgspec-0.20.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/df/72/0c47350ec39611ff8defe9e8af10c23c9ad0235974f1999a523fcd1c3e68/mujoco-3.4.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/81/ef/6affa8e9ba6ad336d6132fe7d68c09c0243dd977e3fc0abd739902512d55/mujoco_warp-0.0.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/9e/c9/b2622292ea83fbb4ec318f5b9ab867d0a28ab43c5717bb85b0a5f6b3b0a4/networkx-3.6.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/88/b2/d0896bdcdc8d28a7fc5717c305f1a861c26e18c05047949fb371034d98bd/nodeenv-1.10.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/b4/63/3de6a34ad7ad6646ac7d2f55ebc6ad439dbbf9c4370017c50cf403fb19b5/numpy-2.2.6-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/04/dc/46066ce18d01645541f0186877377b9371b8fa8017fa8262002b4ef22612/numpy-2.4.2-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/e3/94/1843518e420fa3ed6919835845df698c7e27e183cb997394e4a670973a65/omegaconf-2.3.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/fb/71/d3fec0dcf9a7a99e7368112d9c765154e81da70fcba1e3121131a45c245b/onnx-1.20.1-cp312-abi3-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/19/cb/ce8203fee31533f4d74891145512d1b5c09b26cebb4c1574afb233c41e0f/onnxruntime_gpu-1.24.2-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/b7/b9/c538f279a4e237a006a2c98387d081e9eb060d203d8ed34467cc0f0b9b53/packaging-26.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/0c/7b/f9b09a7804ec7336effb96c26d37c29d27225783dc1501b7d62dcef6ae25/pillow-12.1.1-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/48/31/05e764397056194206169869b50cf2fee4dbbbc71b344705b9c0d878d4d8/platformdirs-4.9.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/54/20/4d324d65cc6d9205fabedc306948156824eb9f0ee1633355a8f7ec5c66bf/pluggy-1.6.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/5d/19/fd3ef348460c80af7bb4669ea7926651d1f95c23ff2df18b9d24bab4f3fa/pre_commit-4.5.1-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/f8/82/c40b68001dbec8a3faa4c08cd8c200798ac732d2854537c5449dc859f55a/pyarrow-23.0.1-cp310-cp310-manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/4f/e4/4f2d41881fae547f06ffa4c9748fa8ed13c4db5c830ff268b84175546b3c/pybind11_stubgen-2.5.5-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/71/24/538bff45bde96535d7d998c6fed1a751c75ac7c53c37c90dc2601b243893/pillow-12.1.1-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/9b/53/a9443aa3ca9ba8724fdfa02dd1887c1bcd8e89556b715cfbacca6b63dbec/protobuf-6.33.5-cp39-abi3-manylinux2014_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/b3/93/10a48b5e238de6d562a411af6467e71e7aedbc9b87f8d3a35f1560ae30fb/pyarrow-23.0.1-cp313-cp313-manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/07/86/f1f61b7a0701f9d1299e5293d083318019f91021a4d449f94d59dbe024e4/pycollada-0.9.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/0c/c3/44f3fbbfa403ea2a7c779186dc20772604442dde72947e7d01069cbe98e3/pycparser-3.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/af/43/700932c4f0638c3421177144a2e86448c0d75dbaee2c7936bda3f9fd0878/pyelftools-0.32-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c7/21/705964c7812476f378728bdf590ca4b771ec72385c533964653c68e86bdc/pygments-2.19.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/de/e4/1ba6f44e491c4eece978685230dde56b14d51a0365bc1b774ddaa94d14cd/pyopengl-3.1.10-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/bd/24/12818598c362d7f300f18e74db45963dbcb85150324092410c8b49405e42/pyproject_hooks-1.2.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/0c/82/a2c93e32800940d9573fb28c346772a14778b84ba7524e691b324620ab89/pyright-1.1.408-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/3b/ab/b3226f0bd7cdcf710fbede2b3548584366da3b19b5021e74f5bde2a8fa3f/pytest-9.0.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/ee/49/1377b49de7d0c1ce41292161ea0f721913fa8722c19fb9c1e3aa0367eecb/pytest_cov-7.0.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/ca/31/d4e37e9e550c2b92a9cbc2e4d0b7420a27224968580b5a447f420847c975/pytest_xdist-3.8.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ec/57/56b9bcc3c9c6a792fcbaf139543cee77261f3651ca9da0c93f5c1221264b/python_dateutil-2.9.0.post0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/7a/1e/7acc4f0e74c4b3d9531e24739e0ab832a5edf40e64fbae1a9c01941cabd7/pyyaml-6.0.3-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/e1/67/921ec3024056483db83953ae8e48079ad62b92db7880013ca77632921dd0/readme_renderer-44.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/74/27/e5b8f34d02d9995b80abcef563ea1f8b56d20134d8f4e5e81733b1feceb2/pyyaml-6.0.3-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/2c/58/ca301544e1fa93ed4f80d724bf5b194f6e4b945841c5bfd555878eea9fcb/referencing-0.37.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/1e/db/4254e3eabe8020b458f1a747140d32277ec7a271daf1d235b70dc0b4e6e3/requests-2.32.5-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/3f/51/d4db610ef29373b879047326cbf6fa98b6c1969d6f6dc423279de2b1be2c/requests_toolbelt-1.0.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/ff/9a/9afaade874b2fa6c752c36f1548f718b5b83af81ed9b76628329dab81c1b/rfc3986-2.0.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/ef/45/615f5babd880b4bd7d405cc0dc348234c5ffb6ed1ea33e152ede08b2072d/rich-14.3.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/14/25/b208c5683343959b670dc001595f2f3737e051da617f66c31f7c4fa93abc/rich-14.3.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/16/80/579e75e0be0439d11e479732e4c194a9c6e6d152670dae561b9525015425/robot_descriptions-1.22.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/61/b5/707f6cf0066a6412aacc11d17920ea2e19e5b2f04081c64526eb35b5c6e7/rpds_py-0.30.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/b7/de/f7192e12b21b9e9a68a6d0f249b4af3fdcdff8418be0767a627564afa1f1/rpds_py-0.30.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - pypi: https://files.pythonhosted.org/packages/d1/75/e5d44be90525cd28503e7f836d077ae6663ec0687a13ba7810b4114b3668/rtree-1.4.1-py3-none-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/a3/1d/5f56cae1d6c40b8a318513599b35ea4b075d7dc1cd1d04449578c29d1d75/ruff-0.15.1-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/8e/6d/41991e503e51fc1134502694c5fa7a1671501a17ffa12716a4a9151af3df/scipy-1.15.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/b7/46/f5af3402b579fd5e11573ce652019a67074317e18c1935cc0b4ba9b35552/secretstorage-3.5.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/50/8a/0ab1f7433a2a85d9e9aea5b1fbb333f3b09b309e7817309250b4b7b2cc7a/shapely-2.1.2-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/63/1e/12fbf2a3bb240161651c94bb5cdd0eae5d4e8cc6eaeceb74ab07b12a753d/scipy-1.17.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/f2/a2/83fc37e2a58090e3d2ff79175a95493c664bcd0b653dd75cb9134645a4e5/shapely-2.1.2-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl - pypi: https://files.pythonhosted.org/packages/b7/ce/149a00dd41f10bc29e5921b496af8b574d8413afcd5e30dfa0ed46c2cc5e/six-1.17.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/04/be/d09147ad1ec7934636ad912901c5fd7667e1c858e19d355237db0d0cd5e4/smmap-5.0.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/c8/78/3565d011c61f5a43488987ee32b6f3f656e7f107ac2782dd57bdd7d91d9a/snowballstemmer-3.0.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/46/2c/1462b1d0a634697ae9e55b3cecdcb64788e8b7d63f54d923fcd0bb140aed/soupsieve-2.8.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/26/60/1ddff83a56d33aaf6f10ec8ce84b4c007d9368b21008876fceda7e7381ef/sphinx-8.1.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/d8/11/9825443890d3ef6b6a0db938054e7c806e9911509e0315fe984d00a090c1/sphinx_autoapi-3.7.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/3c/dd/018ce05c532a22007ac58d4f45232514cd9d6dd0ee1dc374e309db830983/sphinx_basic_ng-1.0.0b2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/38/5e/49c1330add8c48ef52e50c82d7d847e32b7f786d5ddc1cafcd36ac63f1e3/sphinxcontrib_ansi_rai-0.7.0.dev20250623-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/5d/85/9ebeae2f76e9e77b952f4b274c27238156eae7979c5421fba91a28f4970d/sphinxcontrib_applehelp-2.0.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/35/7a/987e583882f985fe4d7323774889ec58049171828b58c2217e7f79cdf44e/sphinxcontrib_devhelp-2.0.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/0a/7b/18a8c0bcec9182c05a0b3ec2a776bba4ead82750a55ff798e8d406dae604/sphinxcontrib_htmlhelp-2.1.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/c2/42/4c8646762ee83602e3fb3fbe774c2fac12f317deb0b5dbeeedd2d3ba4b77/sphinxcontrib_jsmath-1.0.1-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/84/04/53406477f01fa5bdcb1344fac421c46b6dce112d980c58237825ddb262a2/sphinxcontrib_programoutput_rai-0.18.dev0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/27/83/859ecdd180cacc13b1f7e857abf8582a64552ea7a061057a6c716e790fce/sphinxcontrib_qthelp-2.0.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/52/a7/d2782e4e3f77c8450f727ba74a8f12756d5ba823d81b941f1b04da9d033a/sphinxcontrib_serializinghtml-2.0.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/3a/83/4f5b250220e1a5acd31345a5ec1c95a7769725d0d8135276f399f44062f8/svg_path-7.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/23/d1/136eb2cb77520a31e1f64cbae9d33ec6df0d78bdf4160398e86eec8a8754/tomli-2.4.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/a2/09/77d55d46fd61b4a135c444fc97158ef34a095e5681d0a6c10b75bf356191/sympy-1.14.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/16/e1/3079a9ff9b8e11b846c6ac5c8b5bfb7ff225eee721825310c91b3b50304f/tqdm-4.67.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/3c/b9/da09903ea53b677a58ba770112de6fe8b2acb8b4cd9bffae4ff6cfe7c072/trimesh-4.11.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/3a/7a/882d99539b19b1490cac5d77c67338d126e4122c8276bf640e411650c830/twine-6.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/91/88/b55b3117287a8540b76dbdd87733808d4d01c8067a3b339408c250bb3600/typeguard-4.5.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/18/67/36e9267722cc04a6b9f15c7f3441c2363321a3ea07da7ae0c0707beb2a9c/typing_extensions-4.15.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/a7/f9/56b0cb8c5c287c7eec02735cce74a4c25cc56d6817bab7edde6f32b024a3/tyro-1.0.6-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/39/08/aaaad47bc4e9dc8c725e68f9d04865dbcb2052843ff09c97b08904852d84/urllib3-2.6.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/ce/de/0638d8aa83c2038c5f820151006b3bf372d109afbfdb2a8fc59187cc3690/uv-0.10.3-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/bf/84/97e2305f6bd4a4de3d40bb234c38282cbcf2fa30653ff5ae4f7df9d8f3ec/vhacdx-0.0.10-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/42/4b/6cf85b485be7ec29db837ec2a1d8cd68bc1147b1abf23d8636c5bd65b3cc/virtualenv-20.37.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/f2/b3/4b9580d62e1245df52e8516cf3e404ff39cc72634d2d749d47b1dada4161/uv-0.10.4-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/b8/b4/07ab1c828bae0eb5c72cd9a4cbe8b0376d374509be3c7055e1a399bf85c3/vhacdx-0.0.10-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/b9/c4/819f000b3d64f654a054a8b24bf8d0c5e799636393135784d0886d8c808e/viser-1.0.21-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/97/3a/5323a6bb94917af13bbb34009fac01e55c51dfde354f63692bf2533ffbc2/websockets-15.0.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/87/22/b76d483683216dde3d67cba61fb2444be8d5be289bf628c13fc0fd90e5f9/wheel-0.46.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/2d/4b/55ab404c56cd70a2cf5ecfe484838865d0fea5627365c6c8ca156bd09c8f/xxhash-3.6.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/c2/bb/21e9396a963d50171f539f4a4c9411435e7bb9c5131f4480f882d5e51dc6/warp_lang-1.11.1-py3-none-manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/ff/b2/83a6ddf56cdcbad4e3d841fcc55d6ba7d19aeb89c50f24dd7e859ec0805f/websockets-15.0.1-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/5e/1e/3c3d3ef071b051cc3abbe3721ffb8365033a172613c04af2da89d5548a87/xxhash-3.6.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/c8/60/4ea0d6df0b497d51bf2ef87eaab0eb26f8bc3b3313c012da5df3383cced9/yourdfpy-0.0.60-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/2e/54/647ade08bf0db230bfea292f893923872fd20be6ac6f53b2b936ba839d75/zipp-3.23.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/fd/e5/6d36f92a197c3c17729a2125e29c169f460538a7d939a27eaaa6dcfcba8e/zstandard-0.25.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/63/4b/e3678b4e776db00f9f7b2fe58e547e8928ef32727d7a1ff01dea010f3f13/zstandard-0.25.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl + - pypi: ./ + osx-arm64: + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/bzip2-1.0.8-hd037594_9.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/c-ares-1.34.6-hc919400_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.1.4-hbd8a1cb_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/cmake-4.2.3-h8cb302d_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/eigen-3.4.0-h49c215f_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/icu-78.2-h38cb7af_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/krb5-1.22.2-h385eeb1_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcurl-8.18.0-hd5a2499_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-21.1.8-h55c6f16_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libedit-3.1.20250104-pl5321hafb1f1b_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libev-4.33-h93a5062_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libexpat-2.7.4-hf6b4638_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libffi-3.5.2-hcf2aa1b_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblzma-5.8.2-h8088a28_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libmpdec-4.0.0-h84a0fba_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libnghttp2-1.67.0-hc438710_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.51.2-h1ae2325_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libssh2-1.11.1-h1590b86_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libuv-1.51.0-h6caf38d_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libzlib-1.3.1-h8359307_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ncurses-6.5-h5e97a16_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/onnxruntime-cpp-1.19.2-hda9e549_0_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/openssl-3.6.1-hd24854e_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pybind11-3.0.2-pyh7a1b43c_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pybind11-global-3.0.2-pyhc7ab6ef_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-3.13.12-h20e6be0_100_cp313.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.13-8_cp313.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/readline-8.3-h46df422_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/rhash-1.4.6-h5505292_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tk-8.6.13-h010d191_3.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zstd-1.5.7-hbf9d68e_6.conda + - pypi: https://files.pythonhosted.org/packages/18/a6/907a406bb7d359e6a63f99c313846d9eec4f7e6f7437809e03aa00fa3074/absl_py-2.4.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/3e/38/7859ff46355f76f8d19459005ca000b6e7012f2f1ca597746cbcd1fbfe5e/antlr4-python3-runtime-4.9.3.tar.gz + - pypi: https://files.pythonhosted.org/packages/38/0e/27be9fdef66e72d64c0cdc3cc2823101b80585f8119b5c112c2e8f5f7dab/anyio-4.12.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/3a/2a/7cc015f5b9f5db42b7d48157e23356022889fc354a2813c15934b7cb5c0e/attrs-25.4.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e6/ad/3cc14f097111b4de0040c83a525973216457bbeeb63739ef1ed275c1c021/certifi-2026.1.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/97/45/4b3a1239bbacd321068ea6e7ac28875b03ab8bc0aa0966452db17cd36714/charset_normalizer-3.4.4-cp313-cp313-macosx_10_13_universal2.whl + - pypi: https://files.pythonhosted.org/packages/6d/c1/e419ef3723a074172b68aaa89c9f3de486ed4c2399e2dbd8113a4fdcaf9e/colorlog-6.10.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/94/35/386550fd60316d1e37eccdda609b074113298f23cef5bddb2049823fe666/dacite-1.9.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/55/e2/2537ebcff11c1ee1ff17d8d0b6f4db75873e3b0fb32c2d4a2ee31ecb310a/docstring_parser-0.17.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e6/86/9ce12fbbfc365b7037666ffbc79ac93ba05690b22cac8fad8d2104577dfe/dora_rs-0.4.1-cp37-abi3-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/38/82/78d57efaf364d4ae45c5e87c5c370b0999da92ecc72f9ba96949a93faa4f/dora_rs_cli-0.4.1-cp37-abi3-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/78/62/0ffc083b1d5f7c95eb03b260d2622dfacb70d1153011d216260b71c8e7d9/dora_utils-0.1.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e7/98/87b5946356095738cb90a6df7b35ff69ac5750f6e783d5fbcc5cb3b6cbd7/etils-1.13.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e6/ab/fb21f4c939bb440104cc2b396d3be1d9b7a9fd3c6c2a53d98c45b3d7c954/fsspec-2026.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/a0/61/5c78b91c3143ed5c14207f463aecfc8f9dbb5092fb2869baf37c273b2705/gitdb-4.0.12-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/6a/09/e21df6aef1e1ffc0c816f0522ddc3f6dcded766c3261813131c78a704470/gitpython-3.1.46-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b6/a6/6ea2f73ad4474896d9e38b3ffbe6ffd5a802c738392269e99e8c6621a461/glfw-2.10.0-py2.py27.py3.py30.py31.py32.py33.py34.py35.py36.py37.py38.py39.py310.py311.py312.py313.py314-none-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/04/4b/29cac41a4d98d144bf5f6d33995617b185d14b22401f75ca86f384e87ff1/h11-0.16.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/31/96/ba99a003c763998035b0de4c299598125df5fc6c9ccf834f152ddd60e0fb/h5py-3.15.1-cp313-cp313-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/7e/f5/f66802a942d491edb555dd61e3a9961140fd64c90bce1eafd741609d334d/httpcore-1.0.9-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/2a/39/e50c7c3a983047577ee07d2a9e53faf5a69493943ec3f6a384bdc792deb2/httpx-0.28.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c6/50/e0edd38dcd63fb26a8547f13d28f7a008bc4a3fd4eb4ff030673f22ad41a/hydra_core-1.3.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/0e/61/66938bbb5fc52dbdf84594873d5b51fb1f7c7794e9c0f5bd885f30bc507b/idna-3.11-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/fb/fe/301e0936b79bcab4cacc7548bf2853fc28dced0a578bab1f7ef53c9aa75b/imageio-2.37.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/a4/ed/1f1afb2e9e7f38a545d628f864d562a5ae64fe6f7a10e28ffb9b185b4e89/importlib_resources-6.5.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/69/90/f63fb5873511e014207a475e2bb4e8b2e570d655b00ac19a9a0ca0a385ee/jsonschema-4.26.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/41/45/1a4ed80516f02155c51f51e8cedb3c1902296743db0bbc66608a0db2814f/jsonschema_specifications-2025.9.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/53/fd/4e8f0540608977aea078bf6d79f128e0e2c2bba8af1acf775c30baa70460/lxml-6.0.2-cp313-cp313-macosx_10_13_universal2.whl + - pypi: https://files.pythonhosted.org/packages/f4/1d/5c2d96b18a603cf8d121efd129c0beb1ab902115f0eda3f9ee5b349b5924/manifold3d-3.3.2-cp313-cp313-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/1a/3f/03f23eac9831e7d0d8da3d6993695a9a3724659c94e9997f6b7aaccc199d/mapbox_earcut-2.0.0-cp313-cp313-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/94/54/e7d793b573f298e1c9013b8c4dade17d481164aa517d1d7148619c2cedbf/markdown_it_py-4.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/57/b6/eff0305961a1d9447ec2b02f8c73c8946f22564d302a504185b730c9a761/msgspec-0.20.0-cp313-cp313-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/e8/51/c3e5c3b199b1b74c85f0cb02dc0ef80363bf91ea245ee8a932804768d5e8/mujoco-3.4.0-cp313-cp313-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/9e/c9/b2622292ea83fbb4ec318f5b9ab867d0a28ab43c5717bb85b0a5f6b3b0a4/networkx-3.6.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/88/b2/d0896bdcdc8d28a7fc5717c305f1a861c26e18c05047949fb371034d98bd/nodeenv-1.10.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/09/f0/817d03a03f93ba9c6c8993de509277d84e69f9453601915e4a69554102a1/numpy-2.4.2-cp313-cp313-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/e3/94/1843518e420fa3ed6919835845df698c7e27e183cb997394e4a670973a65/omegaconf-2.3.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b7/b9/c538f279a4e237a006a2c98387d081e9eb060d203d8ed34467cc0f0b9b53/packaging-26.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/bb/ad/ad9dc98ff24f485008aa5cdedaf1a219876f6f6c42a4626c08bc4e80b120/pillow-12.1.1-cp313-cp313-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/47/10/2cbe4c6f0fb83d2de37249567373d64327a5e4d8db72f486db42875b08f6/pyarrow-23.0.1-cp313-cp313-macosx_12_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/07/86/f1f61b7a0701f9d1299e5293d083318019f91021a4d449f94d59dbe024e4/pycollada-0.9.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/0c/c3/44f3fbbfa403ea2a7c779186dc20772604442dde72947e7d01069cbe98e3/pycparser-3.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c7/21/705964c7812476f378728bdf590ca4b771ec72385c533964653c68e86bdc/pygments-2.19.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/de/e4/1ba6f44e491c4eece978685230dde56b14d51a0365bc1b774ddaa94d14cd/pyopengl-3.1.10-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ec/57/56b9bcc3c9c6a792fcbaf139543cee77261f3651ca9da0c93f5c1221264b/python_dateutil-2.9.0.post0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b1/16/95309993f1d3748cd644e02e38b75d50cbc0d9561d21f390a76242ce073f/pyyaml-6.0.3-cp313-cp313-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/2c/58/ca301544e1fa93ed4f80d724bf5b194f6e4b945841c5bfd555878eea9fcb/referencing-0.37.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/1e/db/4254e3eabe8020b458f1a747140d32277ec7a271daf1d235b70dc0b4e6e3/requests-2.32.5-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/14/25/b208c5683343959b670dc001595f2f3737e051da617f66c31f7c4fa93abc/rich-14.3.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/16/80/579e75e0be0439d11e479732e4c194a9c6e6d152670dae561b9525015425/robot_descriptions-1.22.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/fd/32/55fb50ae104061dbc564ef15cc43c013dc4a9f4527a1f4d99baddf56fe5f/rpds_py-0.30.0-cp313-cp313-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/f3/cf/2710b6fd6b07ea0aef317b29f335790ba6adf06a28ac236078ed9bd8a91d/rtree-1.4.1-py3-none-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/b2/9a/9406aec58268d437636069419e6977af953d1e246df941d42d3720b7277b/scipy-1.17.0-cp313-cp313-macosx_12_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/6d/ab/0bee5a830d209adcd3a01f2d4b70e587cdd9fd7380d5198c064091005af8/shapely-2.1.2-cp313-cp313-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/b7/ce/149a00dd41f10bc29e5921b496af8b574d8413afcd5e30dfa0ed46c2cc5e/six-1.17.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/04/be/d09147ad1ec7934636ad912901c5fd7667e1c858e19d355237db0d0cd5e4/smmap-5.0.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/3a/83/4f5b250220e1a5acd31345a5ec1c95a7769725d0d8135276f399f44062f8/svg_path-7.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/16/e1/3079a9ff9b8e11b846c6ac5c8b5bfb7ff225eee721825310c91b3b50304f/tqdm-4.67.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/3c/b9/da09903ea53b677a58ba770112de6fe8b2acb8b4cd9bffae4ff6cfe7c072/trimesh-4.11.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/91/88/b55b3117287a8540b76dbdd87733808d4d01c8067a3b339408c250bb3600/typeguard-4.5.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/18/67/36e9267722cc04a6b9f15c7f3441c2363321a3ea07da7ae0c0707beb2a9c/typing_extensions-4.15.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/a7/f9/56b0cb8c5c287c7eec02735cce74a4c25cc56d6817bab7edde6f32b024a3/tyro-1.0.6-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/39/08/aaaad47bc4e9dc8c725e68f9d04865dbcb2052843ff09c97b08904852d84/urllib3-2.6.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/63/91/c4ddf7e55e05394967615050cc364a999157a44c008d0e1e9db2ed49a11c/uv-0.10.4-py3-none-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/3b/9e/42adb642a12915acc9cb2bfab21710a6aabf045c26967ba0ff0e08a872d0/vhacdx-0.0.10-cp313-cp313-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/b9/c4/819f000b3d64f654a054a8b24bf8d0c5e799636393135784d0886d8c808e/viser-1.0.21-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ff/0b/33cef55ff24f2d92924923c99926dcce78e7bd922d649467f0eda8368923/websockets-15.0.1-cp313-cp313-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/31/a8/3fbce1cd96534a95e35d5120637bf29b0d7f5d8fa2f6374e31b4156dd419/xxhash-3.6.0-cp313-cp313-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/c8/60/4ea0d6df0b497d51bf2ef87eaab0eb26f8bc3b3313c012da5df3383cced9/yourdfpy-0.0.60-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/2e/54/647ade08bf0db230bfea292f893923872fd20be6ac6f53b2b936ba839d75/zipp-3.23.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/3f/06/9ae96a3e5dcfd119377ba33d4c42a7d89da1efabd5cb3e366b156c45ff4d/zstandard-0.25.0-cp313-cp313-macosx_11_0_arm64.whl + - pypi: ./ + win-64: + - conda: https://conda.anaconda.org/conda-forge/win-64/bzip2-1.0.8-h0ad9c76_9.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.1.4-h4c7d964_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/cmake-4.2.3-hdcbee5b_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/eigen-3.4.0-h477610d_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/krb5-1.22.2-h0ea6238_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libcurl-8.18.0-h8206538_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libexpat-2.7.4-hac47afa_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libffi-3.5.2-h3d046cb_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/liblzma-5.8.2-hfd05255_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libmpdec-4.0.0-hfd05255_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libsqlite-3.51.2-hf5d6505_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libssh2-1.11.1-h9aa295b_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libuv-1.51.0-hfd05255_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libzlib-1.3.1-h2466b09_2.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/onnxruntime-cpp-1.19.2-h50ebc8d_0_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/openssl-3.6.1-hf411b9b_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pybind11-3.0.2-pyh7a1b43c_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pybind11-global-3.0.2-pyh5e4992e_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/python-3.13.12-h09917c8_100_cp313.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.13-8_cp313.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/tk-8.6.13-h6ed50ae_3.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/ucrt-10.0.26100.0-h57928b3_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/vc-14.3-h41ae7f8_34.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/vc14_runtime-14.44.35208-h818238b_34.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/vcomp14-14.44.35208-h818238b_34.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/zstd-1.5.7-h534d264_6.conda + - pypi: https://files.pythonhosted.org/packages/18/a6/907a406bb7d359e6a63f99c313846d9eec4f7e6f7437809e03aa00fa3074/absl_py-2.4.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/3e/38/7859ff46355f76f8d19459005ca000b6e7012f2f1ca597746cbcd1fbfe5e/antlr4-python3-runtime-4.9.3.tar.gz + - pypi: https://files.pythonhosted.org/packages/38/0e/27be9fdef66e72d64c0cdc3cc2823101b80585f8119b5c112c2e8f5f7dab/anyio-4.12.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/3a/2a/7cc015f5b9f5db42b7d48157e23356022889fc354a2813c15934b7cb5c0e/attrs-25.4.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e6/ad/3cc14f097111b4de0040c83a525973216457bbeeb63739ef1ed275c1c021/certifi-2026.1.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c4/26/b9924fa27db384bdcd97ab83b4f0a8058d96ad9626ead570674d5e737d90/charset_normalizer-3.4.4-cp313-cp313-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/6d/c1/e419ef3723a074172b68aaa89c9f3de486ed4c2399e2dbd8113a4fdcaf9e/colorlog-6.10.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/94/35/386550fd60316d1e37eccdda609b074113298f23cef5bddb2049823fe666/dacite-1.9.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/55/e2/2537ebcff11c1ee1ff17d8d0b6f4db75873e3b0fb32c2d4a2ee31ecb310a/docstring_parser-0.17.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/1c/d4/e8134ce7d977fd87f507b6951b53df3aa7ab91122e7d487707352336703b/dora_rs-0.4.1-cp37-abi3-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/93/a7/c53764b09b7a6e6a21d46df656513391d8429b729fdde26372d961938297/dora_rs_cli-0.4.1-cp37-abi3-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/78/62/0ffc083b1d5f7c95eb03b260d2622dfacb70d1153011d216260b71c8e7d9/dora_utils-0.1.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e7/98/87b5946356095738cb90a6df7b35ff69ac5750f6e783d5fbcc5cb3b6cbd7/etils-1.13.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e6/ab/fb21f4c939bb440104cc2b396d3be1d9b7a9fd3c6c2a53d98c45b3d7c954/fsspec-2026.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/a0/61/5c78b91c3143ed5c14207f463aecfc8f9dbb5092fb2869baf37c273b2705/gitdb-4.0.12-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/6a/09/e21df6aef1e1ffc0c816f0522ddc3f6dcded766c3261813131c78a704470/gitpython-3.1.46-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/bd/e1/6d6816b296a529ac9b897ad228b1e084eb1f92319e96371880eebdc874a6/glfw-2.10.0-py2.py27.py3.py30.py31.py32.py33.py34.py35.py36.py37.py38.py39.py310.py311.py312.py313.py314-none-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/04/4b/29cac41a4d98d144bf5f6d33995617b185d14b22401f75ca86f384e87ff1/h11-0.16.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e5/ea/fbb258a98863f99befb10ed727152b4ae659f322e1d9c0576f8a62754e81/h5py-3.15.1-cp313-cp313-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/7e/f5/f66802a942d491edb555dd61e3a9961140fd64c90bce1eafd741609d334d/httpcore-1.0.9-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/2a/39/e50c7c3a983047577ee07d2a9e53faf5a69493943ec3f6a384bdc792deb2/httpx-0.28.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c6/50/e0edd38dcd63fb26a8547f13d28f7a008bc4a3fd4eb4ff030673f22ad41a/hydra_core-1.3.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/0e/61/66938bbb5fc52dbdf84594873d5b51fb1f7c7794e9c0f5bd885f30bc507b/idna-3.11-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/fb/fe/301e0936b79bcab4cacc7548bf2853fc28dced0a578bab1f7ef53c9aa75b/imageio-2.37.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/a4/ed/1f1afb2e9e7f38a545d628f864d562a5ae64fe6f7a10e28ffb9b185b4e89/importlib_resources-6.5.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/69/90/f63fb5873511e014207a475e2bb4e8b2e570d655b00ac19a9a0ca0a385ee/jsonschema-4.26.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/41/45/1a4ed80516f02155c51f51e8cedb3c1902296743db0bbc66608a0db2814f/jsonschema_specifications-2025.9.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/fe/0a/4643ccc6bb8b143e9f9640aa54e38255f9d3b45feb2cbe7ae2ca47e8782e/lxml-6.0.2-cp313-cp313-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/f9/a7/deabeee1aa6bda61f2cc937ec4daca3126beb9327026b49a3dee5d09b4b5/manifold3d-3.3.2-cp313-cp313-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/76/75/a79a6020c46d4f07731e88ec5cc9324f6b43343aba835def1dc0bf59fecf/mapbox_earcut-2.0.0-cp313-cp313-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/94/54/e7d793b573f298e1c9013b8c4dade17d481164aa517d1d7148619c2cedbf/markdown_it_py-4.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/f1/25/5e8080fe0117f799b1b68008dc29a65862077296b92550632de015128579/msgspec-0.20.0-cp313-cp313-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/dc/25/bbf8c01758d619c86bcbe58db6a7d61ca423e7c76791f323b8ea2e92c2bd/mujoco-3.4.0-cp313-cp313-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/9e/c9/b2622292ea83fbb4ec318f5b9ab867d0a28ab43c5717bb85b0a5f6b3b0a4/networkx-3.6.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/88/b2/d0896bdcdc8d28a7fc5717c305f1a861c26e18c05047949fb371034d98bd/nodeenv-1.10.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/43/bc/6352f343522fcb2c04dbaf94cb30cca6fd32c1a750c06ad6231b4293708c/numpy-2.4.2-cp313-cp313-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/e3/94/1843518e420fa3ed6919835845df698c7e27e183cb997394e4a670973a65/omegaconf-2.3.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b7/b9/c538f279a4e237a006a2c98387d081e9eb060d203d8ed34467cc0f0b9b53/packaging-26.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/3f/eb/b0834ad8b583d7d9d42b80becff092082a1c3c156bb582590fcc973f1c7c/pillow-12.1.1-cp313-cp313-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/d5/09/a532297c9591a727d67760e2e756b83905dd89adb365a7f6e9c72578bcc1/pyarrow-23.0.1-cp313-cp313-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/07/86/f1f61b7a0701f9d1299e5293d083318019f91021a4d449f94d59dbe024e4/pycollada-0.9.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/0c/c3/44f3fbbfa403ea2a7c779186dc20772604442dde72947e7d01069cbe98e3/pycparser-3.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c7/21/705964c7812476f378728bdf590ca4b771ec72385c533964653c68e86bdc/pygments-2.19.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/de/e4/1ba6f44e491c4eece978685230dde56b14d51a0365bc1b774ddaa94d14cd/pyopengl-3.1.10-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ec/57/56b9bcc3c9c6a792fcbaf139543cee77261f3651ca9da0c93f5c1221264b/python_dateutil-2.9.0.post0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/97/c9/39d5b874e8b28845e4ec2202b5da735d0199dbe5b8fb85f91398814a9a46/pyyaml-6.0.3-cp313-cp313-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/2c/58/ca301544e1fa93ed4f80d724bf5b194f6e4b945841c5bfd555878eea9fcb/referencing-0.37.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/1e/db/4254e3eabe8020b458f1a747140d32277ec7a271daf1d235b70dc0b4e6e3/requests-2.32.5-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/14/25/b208c5683343959b670dc001595f2f3737e051da617f66c31f7c4fa93abc/rich-14.3.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/16/80/579e75e0be0439d11e479732e4c194a9c6e6d152670dae561b9525015425/robot_descriptions-1.22.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/f2/e1/485132437d20aa4d3e1d8b3fb5a5e65aa8139f1e097080c2a8443201742c/rpds_py-0.30.0-cp313-cp313-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/74/25/5282c8270bfcd620d3e73beb35b40ac4ab00f0a898d98ebeb41ef0989ec8/rtree-1.4.1-py3-none-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/b9/b6/8ac583d6da79e7b9e520579f03007cb006f063642afd6b2eeb16b890bf93/scipy-1.17.0-cp313-cp313-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/41/47/3647fe7ad990af60ad98b889657a976042c9988c2807cf322a9d6685f462/shapely-2.1.2-cp313-cp313-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/b7/ce/149a00dd41f10bc29e5921b496af8b574d8413afcd5e30dfa0ed46c2cc5e/six-1.17.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/04/be/d09147ad1ec7934636ad912901c5fd7667e1c858e19d355237db0d0cd5e4/smmap-5.0.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/3a/83/4f5b250220e1a5acd31345a5ec1c95a7769725d0d8135276f399f44062f8/svg_path-7.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/16/e1/3079a9ff9b8e11b846c6ac5c8b5bfb7ff225eee721825310c91b3b50304f/tqdm-4.67.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/3c/b9/da09903ea53b677a58ba770112de6fe8b2acb8b4cd9bffae4ff6cfe7c072/trimesh-4.11.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/91/88/b55b3117287a8540b76dbdd87733808d4d01c8067a3b339408c250bb3600/typeguard-4.5.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/18/67/36e9267722cc04a6b9f15c7f3441c2363321a3ea07da7ae0c0707beb2a9c/typing_extensions-4.15.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/a7/f9/56b0cb8c5c287c7eec02735cce74a4c25cc56d6817bab7edde6f32b024a3/tyro-1.0.6-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/39/08/aaaad47bc4e9dc8c725e68f9d04865dbcb2052843ff09c97b08904852d84/urllib3-2.6.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/31/dd/1900452678d46f6a649ab8167bededb02500b0561fc9f69e1f52607895c7/uv-0.10.4-py3-none-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/32/25/f0e6806824f88d47ab8bc1c9bf6f11634fd7b382d635d0696825f3b5672f/vhacdx-0.0.10-cp313-cp313-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/b9/c4/819f000b3d64f654a054a8b24bf8d0c5e799636393135784d0886d8c808e/viser-1.0.21-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/1b/6c/c65773d6cab416a64d191d6ee8a8b1c68a09970ea6909d16965d26bfed1e/websockets-15.0.1-cp313-cp313-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/86/15/9bc32671e9a38b413a76d24722a2bf8784a132c043063a8f5152d390b0f9/xxhash-3.6.0-cp313-cp313-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/c8/60/4ea0d6df0b497d51bf2ef87eaab0eb26f8bc3b3313c012da5df3383cced9/yourdfpy-0.0.60-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/2e/54/647ade08bf0db230bfea292f893923872fd20be6ac6f53b2b936ba839d75/zipp-3.23.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d9/82/b9c06c870f3bd8767c201f1edbdf9e8dc34be5b0fbc5682c4f80fe948475/zstandard-0.25.0-cp313-cp313-win_amd64.whl - pypi: ./ - osx-64: - - conda: https://conda.anaconda.org/conda-forge/osx-64/bzip2-1.0.8-h500dc9f_9.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/c-ares-1.34.6-hb5e19a0_0.conda + py310: + channels: + - url: https://conda.anaconda.org/conda-forge/ + indexes: + - https://pypi.org/simple + options: + pypi-prerelease-mode: if-necessary-or-explicit + packages: + linux-64: + - conda: https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-20_gnu.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/binutils_impl_linux-64-2.45.1-default_hfdba357_101.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/binutils_linux-64-2.45.1-default_h4852527_101.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-hda65f42_9.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/c-ares-1.34.6-hb03c661_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.1.4-hbd8a1cb_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/cmake-4.2.3-h965d0ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/eigen-3.4.0-hfc0b2d5_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/krb5-1.22.2-h207b36a_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/libcurl-8.18.0-h9a2545f_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/libcxx-21.1.8-h4fb565c_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/libedit-3.1.20250104-pl5321ha958ccf_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/libev-4.33-h10d778d_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/libexpat-2.7.4-h991f03e_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/libffi-3.5.2-hd1f9c09_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/liblzma-5.8.2-h11316ed_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/libnghttp2-1.67.0-h3338091_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/libsqlite-3.51.2-hb99441e_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/libssh2-1.11.1-hed3591d_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/libuv-1.51.0-h58003a5_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/libzlib-1.3.1-hd23fc13_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/ncurses-6.5-h0622a9a_3.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/onnxruntime-cpp-1.19.2-h417c6ca_0_cpu.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/openssl-3.6.1-hb6871ef_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pybind11-3.0.1-pyh7a1b43c_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pybind11-global-3.0.1-pyhc7ab6ef_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/python-3.10.19-h988dfef_3_cpython.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/readline-8.3-h68b038d_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/rhash-1.4.6-h6e16a3a_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/tk-8.6.13-h7142dee_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/cmake-4.2.3-hc85cc9f_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/eigen-3.4.0-h171cf75_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/gcc_impl_linux-64-13.4.0-he2fa53e_18.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/gcc_linux-64-13.4.0-h0a5b801_21.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/gxx_impl_linux-64-13.4.0-h6a38259_18.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/gxx_linux-64-13.4.0-h587059e_21.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/icu-78.2-h33c6efd_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/kernel-headers_linux-64-4.18.0-he073ed8_9.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/keyutils-1.6.3-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/krb5-1.22.2-ha1258a1_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.45.1-default_hbd61a6d_101.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libcurl-8.18.0-hcf29cc6_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libedit-3.1.20250104-pl5321h7949ede_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libev-4.33-hd590300_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.7.4-hecca717_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libffi-3.5.2-h3435931_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-15.2.0-he0feb66_18.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/libgcc-devel_linux-64-13.4.0-hd1d28cc_118.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-15.2.0-h69a702a_18.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-15.2.0-he0feb66_18.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/liblzma-5.8.2-hb03c661_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libnghttp2-1.67.0-had1ee68_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libnsl-2.0.1-hb9d3cd8_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libsanitizer-13.4.0-h2a15e64_18.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.51.2-hf4e2dac_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libssh2-1.11.1-hcf80075_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-15.2.0-h934c35e_18.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/libstdcxx-devel_linux-64-13.4.0-h6963c3b_118.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-15.2.0-hdf11a46_18.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.41.3-h5347b49_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libuv-1.51.0-hb03c661_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libxcrypt-4.4.36-hd590300_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.1-hb9d3cd8_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.5-h2d0b736_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/onnxruntime-cpp-1.19.2-h641f3bf_0_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.6.1-h35e630c_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/patchelf-0.17.2-h58526e2_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pybind11-3.0.2-pyh7a1b43c_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pybind11-global-3.0.2-pyhc7ab6ef_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.10.19-h3c07f61_3_cpython.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/readline-8.3-h853b02a_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/rhash-1.4.6-hb9d3cd8_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/sysroot_linux-64-2.28-h4ee821c_9.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_h366c992_103.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/zstd-1.5.7-h3eecb57_6.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.7-hb78ec9c_6.conda - pypi: https://files.pythonhosted.org/packages/18/a6/907a406bb7d359e6a63f99c313846d9eec4f7e6f7437809e03aa00fa3074/absl_py-2.4.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/8d/3f/95338030883d8c8b91223b4e21744b04d11b161a3ef117295d8241f50ab4/accessible_pygments-0.0.5-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/7e/b3/6b4067be973ae96ba0d615946e314c5ae35f9f993eca561b356540bb0c2b/alabaster-1.0.0-py3-none-any.whl @@ -1884,17 +1715,20 @@ environments: - pypi: https://files.pythonhosted.org/packages/1a/39/47f9197bdd44df24d67ac8893641e16f386c984a0619ef2ee4c51fbbc019/beautifulsoup4-4.14.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c5/0d/84a4380f930db0010168e0aa7b7a8fed9ba1835a8fbb1472bc6d0201d529/build-1.4.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e6/ad/3cc14f097111b4de0040c83a525973216457bbeeb63739ef1ed275c1c021/certifi-2026.1.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/98/29/9b366e70e243eb3d14a5cb488dfd3a0b6b2f1fb001a203f653b93ccfac88/cffi-2.0.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl - pypi: https://files.pythonhosted.org/packages/db/3c/33bac158f8ab7f89b2e59426d5fe2e4f63f7ed25df84c036890172b412b5/cfgv-3.5.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/1f/b8/6d51fc1d52cbd52cd4ccedd5b5b2f0f6a11bbf6765c782298b0f3e808541/charset_normalizer-3.4.4-cp310-cp310-macosx_10_9_universal2.whl + - pypi: https://files.pythonhosted.org/packages/36/3b/60cbd1f8e93aa25d1c669c649b7a655b0b5fb4c571858910ea9332678558/charset_normalizer-3.4.4-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/6d/c1/e419ef3723a074172b68aaa89c9f3de486ed4c2399e2dbd8113a4fdcaf9e/colorlog-6.10.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/44/d4/7827d9ffa34d5d4d752eec907022aa417120936282fc488306f5da08c292/coverage-7.13.4-cp310-cp310-macosx_10_9_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/f8/02/aa7ec01d1a5023c4b680ab7257f9bfde9defe8fdddfe40be096ac19e8177/coverage-7.13.4-cp310-cp310-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/37/19/e1b8f964a834eddb44fa1b9a9976f4e414cbb7aa62809b6760c8803d22d1/cryptography-46.0.5-cp38-abi3-manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/94/35/386550fd60316d1e37eccdda609b074113298f23cef5bddb2049823fe666/dacite-1.9.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/33/6b/e0547afaf41bf2c42e52430072fa5658766e3d65bd4b03a563d1b6336f57/distlib-0.4.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/55/e2/2537ebcff11c1ee1ff17d8d0b6f4db75873e3b0fb32c2d4a2ee31ecb310a/docstring_parser-0.17.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/8f/d7/9322c609343d929e75e7e5e6255e614fcc67572cfd083959cdef3b7aad79/docutils-0.21.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/a1/ff/894f11890a526f107d3d06b0e71209b45e5a7bb3666aed23725308bbf78a/dora_rs-0.4.1.tar.gz - - pypi: https://files.pythonhosted.org/packages/f0/45/77300cbdb4137a66eedf8e2488decffbe33e1d33ec912e54fdd02f2f3084/dora_rs_cli-0.4.1.tar.gz + - pypi: https://files.pythonhosted.org/packages/94/53/7dc142faa1719333d57c78cfcf419f2b176770b49ebef54e0bbfa34212ac/dora_rs-0.4.1-cp37-abi3-manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/3c/3e/f3d1e28df9457089055dacf3ca7ca3751ed274d312d9a8515255d80011ec/dora_rs_cli-0.4.1-cp37-abi3-manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/78/62/0ffc083b1d5f7c95eb03b260d2622dfacb70d1153011d216260b71c8e7d9/dora_utils-0.1.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/0d/63/4aa2cb2b1051f4b8cdf2ca8c67493f872717c72ecfbb2988c2d88c0b3ba1/embreex-2.17.7.post7-cp310-cp310-macosx_10_9_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/c7/3c/bbebd5da641ff1e40b1f3d6ae77a79d5ff4a7183ef548ff8db145c91bb9b/embreex-2.17.7.post7-cp310-cp310-manylinux2010_x86_64.manylinux_2_12_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/e7/98/87b5946356095738cb90a6df7b35ff69ac5750f6e783d5fbcc5cb3b6cbd7/etils-1.13.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/8a/0e/97c33bf5009bdbac74fd2beace167cab3f978feb69cc36f1ef79360d6c4e/exceptiongroup-1.3.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ab/84/02fc1827e8cdded4aa65baef11296a9bbe595c474f0d6d758af082d849fd/execnet-2.1.2-py3-none-any.whl @@ -1903,8 +1737,9 @@ environments: - pypi: https://files.pythonhosted.org/packages/f4/b2/50e9b292b5cac13e9e81272c7171301abc753a60460d21505b606e15cf21/furo-2025.12.19-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a0/61/5c78b91c3143ed5c14207f463aecfc8f9dbb5092fb2869baf37c273b2705/gitdb-4.0.12-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/6a/09/e21df6aef1e1ffc0c816f0522ddc3f6dcded766c3261813131c78a704470/gitpython-3.1.46-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/b3/87/de0b33f6f00687499ca1371f22aa73396341b85bf88f1a284f9da8842493/glfw-2.10.0-py2.py27.py3.py30.py31.py32.py33.py34.py35.py36.py37.py38.py39.py310.py311.py312.py313.py314-none-macosx_10_6_intel.whl + - pypi: https://files.pythonhosted.org/packages/5a/3f/efeb7c6801c46e11bd666a5180f0d615f74f72264212f74f39586c6fda9d/glfw-2.10.0-py2.py27.py3.py30.py31.py32.py33.py34.py35.py36.py37.py38.py39.py310.py311.py312.py313.py314-none-manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/04/4b/29cac41a4d98d144bf5f6d33995617b185d14b22401f75ca86f384e87ff1/h11-0.16.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/05/8a/63f4b08f3628171ce8da1a04681a65ee7ac338fde3cb3e9e3c9f7818e4da/h5py-3.15.1-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/7e/f5/f66802a942d491edb555dd61e3a9961140fd64c90bce1eafd741609d334d/httpcore-1.0.9-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/2a/39/e50c7c3a983047577ee07d2a9e53faf5a69493943ec3f6a384bdc792deb2/httpx-0.28.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c6/50/e0edd38dcd63fb26a8547f13d28f7a008bc4a3fd4eb4ff030673f22ad41a/hydra_core-1.3.2-py3-none-any.whl @@ -1919,32 +1754,33 @@ environments: - pypi: https://files.pythonhosted.org/packages/7f/66/b15ce62552d84bbfcec9a4873ab79d993a1dd4edb922cbfccae192bd5b5f/jaraco.classes-3.4.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/8d/48/aa685dbf1024c7bd82bede569e3a85f82c32fd3d79ba5fea578f0159571a/jaraco_context-6.1.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/fd/c4/813bb09f0985cb21e959f21f2464169eca882656849adf727ac7bb7e1767/jaraco_functools-4.4.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b2/a3/e137168c9c44d18eff0376253da9f1e9234d0239e0ee230d2fee6cea8e55/jeepney-0.9.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/62/a1/3d680cbfd5f4b8f15abc1d571870c5fc3e594bb582bc3b64ea099db13e56/jinja2-3.1.6-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/69/90/f63fb5873511e014207a475e2bb4e8b2e570d655b00ac19a9a0ca0a385ee/jsonschema-4.26.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/41/45/1a4ed80516f02155c51f51e8cedb3c1902296743db0bbc66608a0db2814f/jsonschema_specifications-2025.9.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/81/db/e655086b7f3a705df045bf0933bdd9c2f79bb3c97bfef1384598bb79a217/keyring-25.7.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/12/64/27bcd07ae17ff5e5536e8d88f4c7d581b48963817a13de11f3ac3329bfa2/lxml-6.0.2-cp310-cp310-macosx_10_9_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/20/cf/cab09478699b003857ed6ebfe95e9fb9fa3d3c25f1353b905c9b73cfb624/lxml-6.0.2-cp310-cp310-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/a9/50/5b1d70de548fb1e11e15ea9ebec0480365462d202f98b66ad7e154284327/m2r2-0.3.4-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/17/1a/8b4d3b0b61d59dda57688e86c9703ef3aad5f040ea2b453ab10f3ba7f2fc/manifold3d-3.3.2-cp310-cp310-macosx_10_14_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/a8/d3/5222339a8fad091bf64f2e3041e48606d69d69f0609a7632ca17a8a05d5a/mapbox_earcut-2.0.0-cp310-cp310-macosx_10_13_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/f0/ad/2550e5150adde1f912c8f09b4f3de4d6330d686b6c2fcf650403d78e87eb/manifold3d-3.3.2-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/3c/e2/11122fddd086b930502eb4a954735da0f75e9d658fdab2d9e5914b9ebd2a/mapbox_earcut-2.0.0-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/94/54/e7d793b573f298e1c9013b8c4dade17d481164aa517d1d7148619c2cedbf/markdown_it_py-4.0.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/e8/4b/3541d44f3937ba468b75da9eebcae497dcf67adb65caa16760b0a6807ebb/markupsafe-3.0.3-cp310-cp310-macosx_10_9_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/af/cd/ce6e848bbf2c32314c9b237839119c5a564a59725b53157c856e90937b7a/markupsafe-3.0.3-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/09/ec/4b43dae793655b7d8a25f76119624350b4d65eb663459eb9603d7f1f0345/mistune-0.8.4-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a4/8e/469e5a4a2f5855992e425f3cb33804cc07bf18d48f2db061aec61ce50270/more_itertools-10.8.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/e3/5e/151883ba2047cca9db8ed2f86186b054ad200bc231352df15b0c1dd75b1f/msgspec-0.20.0-cp310-cp310-macosx_10_9_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/e8/20/9e0595e653543df3e4233bc3ad7e50b371b81dbe48d45ffbc867ed7c379d/mujoco-3.5.0-cp310-cp310-macosx_10_16_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/15/2a/48e41d9ef0a24b1c6e67cbd94a676799e0561bfbc163be1aaaff5ca853f5/msgspec-0.20.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/71/95/ba02262c7a7a786a64b8d77315e7e4d3c77598ff63d8cd605ba2b96ec349/mujoco-3.4.0-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/b9/54/dd730b32ea14ea797530a4479b2ed46a6fb250f682a9cfb997e968bf0261/networkx-3.4.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/13/3e/aef8cf8e0419b530c95e96ae93a5078e9b36c1e6613eeb1df03a80d5194e/nh3-0.3.3-cp38-abi3-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl + - pypi: https://files.pythonhosted.org/packages/6f/84/c0dc75c7fb596135f999e59a410d9f45bdabb989f1cb911f0016d22b747b/nh3-0.3.3-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - pypi: https://files.pythonhosted.org/packages/88/b2/d0896bdcdc8d28a7fc5717c305f1a861c26e18c05047949fb371034d98bd/nodeenv-1.10.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/9a/3e/ed6db5be21ce87955c0cbd3009f2803f59fa08df21b5df06862e2d8e2bdd/numpy-2.2.6-cp310-cp310-macosx_10_9_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/b4/63/3de6a34ad7ad6646ac7d2f55ebc6ad439dbbf9c4370017c50cf403fb19b5/numpy-2.2.6-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - pypi: https://files.pythonhosted.org/packages/e3/94/1843518e420fa3ed6919835845df698c7e27e183cb997394e4a670973a65/omegaconf-2.3.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/b7/b9/c538f279a4e237a006a2c98387d081e9eb060d203d8ed34467cc0f0b9b53/packaging-26.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/1d/30/5bd3d794762481f8c8ae9c80e7b76ecea73b916959eb587521358ef0b2f9/pillow-12.1.1-cp310-cp310-macosx_10_10_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/0c/7b/f9b09a7804ec7336effb96c26d37c29d27225783dc1501b7d62dcef6ae25/pillow-12.1.1-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/48/31/05e764397056194206169869b50cf2fee4dbbbc71b344705b9c0d878d4d8/platformdirs-4.9.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/54/20/4d324d65cc6d9205fabedc306948156824eb9f0ee1633355a8f7ec5c66bf/pluggy-1.6.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/5d/19/fd3ef348460c80af7bb4669ea7926651d1f95c23ff2df18b9d24bab4f3fa/pre_commit-4.5.1-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/bc/8e/4be5617b4aaae0287f621ad31c6036e5f63118cfca0dc57d42121ff49b51/pyarrow-23.0.1-cp310-cp310-macosx_12_0_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/f8/82/c40b68001dbec8a3faa4c08cd8c200798ac732d2854537c5449dc859f55a/pyarrow-23.0.1-cp310-cp310-manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/4f/e4/4f2d41881fae547f06ffa4c9748fa8ed13c4db5c830ff268b84175546b3c/pybind11_stubgen-2.5.5-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/07/86/f1f61b7a0701f9d1299e5293d083318019f91021a4d449f94d59dbe024e4/pycollada-0.9.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/0c/c3/44f3fbbfa403ea2a7c779186dc20772604442dde72947e7d01069cbe98e3/pycparser-3.0-py3-none-any.whl @@ -1957,7 +1793,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/ee/49/1377b49de7d0c1ce41292161ea0f721913fa8722c19fb9c1e3aa0367eecb/pytest_cov-7.0.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ca/31/d4e37e9e550c2b92a9cbc2e4d0b7420a27224968580b5a447f420847c975/pytest_xdist-3.8.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ec/57/56b9bcc3c9c6a792fcbaf139543cee77261f3651ca9da0c93f5c1221264b/python_dateutil-2.9.0.post0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/f4/a0/39350dd17dd6d6c6507025c0e53aef67a9293a6d37d3511f23ea510d5800/pyyaml-6.0.3-cp310-cp310-macosx_10_13_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/7a/1e/7acc4f0e74c4b3d9531e24739e0ab832a5edf40e64fbae1a9c01941cabd7/pyyaml-6.0.3-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/e1/67/921ec3024056483db83953ae8e48079ad62b92db7880013ca77632921dd0/readme_renderer-44.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/2c/58/ca301544e1fa93ed4f80d724bf5b194f6e4b945841c5bfd555878eea9fcb/referencing-0.37.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/1e/db/4254e3eabe8020b458f1a747140d32277ec7a271daf1d235b70dc0b4e6e3/requests-2.32.5-py3-none-any.whl @@ -1965,11 +1801,12 @@ environments: - pypi: https://files.pythonhosted.org/packages/ff/9a/9afaade874b2fa6c752c36f1548f718b5b83af81ed9b76628329dab81c1b/rfc3986-2.0.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ef/45/615f5babd880b4bd7d405cc0dc348234c5ffb6ed1ea33e152ede08b2072d/rich-14.3.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/16/80/579e75e0be0439d11e479732e4c194a9c6e6d152670dae561b9525015425/robot_descriptions-1.22.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/06/0c/0c411a0ec64ccb6d104dcabe0e713e05e153a9a2c3c2bd2b32ce412166fe/rpds_py-0.30.0-cp310-cp310-macosx_10_12_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/04/d9/108cd989a4c0954e60b3cdc86fd2826407702b5375f6dfdab2802e5fed98/rtree-1.4.1-py3-none-macosx_10_9_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/b3/ea/c8f89d32e7912269d38c58f3649e453ac32c528f93bb7f4219258be2e7ed/ruff-0.15.1-py3-none-macosx_10_12_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/78/2f/4966032c5f8cc7e6a60f1b2e0ad686293b9474b65246b0c642e3ef3badd0/scipy-1.15.3-cp310-cp310-macosx_10_13_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/05/89/c3548aa9b9812a5d143986764dededfa48d817714e947398bdda87c77a72/shapely-2.1.2-cp310-cp310-macosx_10_9_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/61/b5/707f6cf0066a6412aacc11d17920ea2e19e5b2f04081c64526eb35b5c6e7/rpds_py-0.30.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/d1/75/e5d44be90525cd28503e7f836d077ae6663ec0687a13ba7810b4114b3668/rtree-1.4.1-py3-none-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/a3/1d/5f56cae1d6c40b8a318513599b35ea4b075d7dc1cd1d04449578c29d1d75/ruff-0.15.1-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/8e/6d/41991e503e51fc1134502694c5fa7a1671501a17ffa12716a4a9151af3df/scipy-1.15.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/b7/46/f5af3402b579fd5e11573ce652019a67074317e18c1935cc0b4ba9b35552/secretstorage-3.5.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/50/8a/0ab1f7433a2a85d9e9aea5b1fbb333f3b09b309e7817309250b4b7b2cc7a/shapely-2.1.2-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl - pypi: https://files.pythonhosted.org/packages/b7/ce/149a00dd41f10bc29e5921b496af8b574d8413afcd5e30dfa0ed46c2cc5e/six-1.17.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/04/be/d09147ad1ec7934636ad912901c5fd7667e1c858e19d355237db0d0cd5e4/smmap-5.0.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c8/78/3565d011c61f5a43488987ee32b6f3f656e7f107ac2782dd57bdd7d91d9a/snowballstemmer-3.0.1-py3-none-any.whl @@ -1990,24 +1827,26 @@ environments: - pypi: https://files.pythonhosted.org/packages/16/e1/3079a9ff9b8e11b846c6ac5c8b5bfb7ff225eee721825310c91b3b50304f/tqdm-4.67.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/3c/b9/da09903ea53b677a58ba770112de6fe8b2acb8b4cd9bffae4ff6cfe7c072/trimesh-4.11.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/3a/7a/882d99539b19b1490cac5d77c67338d126e4122c8276bf640e411650c830/twine-6.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d4/35/7541d1f046491fac8ce05d543d3f0de0af02086ad864dd3a23535ec703b9/typeguard-4.5.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/18/67/36e9267722cc04a6b9f15c7f3441c2363321a3ea07da7ae0c0707beb2a9c/typing_extensions-4.15.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/a7/f9/56b0cb8c5c287c7eec02735cce74a4c25cc56d6817bab7edde6f32b024a3/tyro-1.0.6-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/39/08/aaaad47bc4e9dc8c725e68f9d04865dbcb2052843ff09c97b08904852d84/urllib3-2.6.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/40/db/c5729ec39ed557ac673ca993abd71e5b18d71a92f95f1845152e639000ff/uv-0.10.3-py3-none-macosx_10_12_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/c4/f4/da308d86daaa9c636851357cbd928715d47963beecd525b3749d2d5c9537/vhacdx-0.0.10-cp310-cp310-macosx_10_9_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/42/4b/6cf85b485be7ec29db837ec2a1d8cd68bc1147b1abf23d8636c5bd65b3cc/virtualenv-20.37.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/f2/b3/4b9580d62e1245df52e8516cf3e404ff39cc72634d2d749d47b1dada4161/uv-0.10.4-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/bf/84/97e2305f6bd4a4de3d40bb234c38282cbcf2fa30653ff5ae4f7df9d8f3ec/vhacdx-0.0.10-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/6a/2a/dc2228b2888f51192c7dc766106cd475f1b768c10caaf9727659726f7391/virtualenv-20.36.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/b9/c4/819f000b3d64f654a054a8b24bf8d0c5e799636393135784d0886d8c808e/viser-1.0.21-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/1c/9f/9d11c1a4eb046a9e106483b9ff69bce7ac880443f00e5ce64261b47b07e7/websockets-15.0.1-cp310-cp310-macosx_10_9_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/97/3a/5323a6bb94917af13bbb34009fac01e55c51dfde354f63692bf2533ffbc2/websockets-15.0.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl - pypi: https://files.pythonhosted.org/packages/87/22/b76d483683216dde3d67cba61fb2444be8d5be289bf628c13fc0fd90e5f9/wheel-0.46.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/34/ee/f9f1d656ad168681bb0f6b092372c1e533c4416b8069b1896a175c46e484/xxhash-3.6.0-cp310-cp310-macosx_10_9_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/2d/4b/55ab404c56cd70a2cf5ecfe484838865d0fea5627365c6c8ca156bd09c8f/xxhash-3.6.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/c8/60/4ea0d6df0b497d51bf2ef87eaab0eb26f8bc3b3313c012da5df3383cced9/yourdfpy-0.0.60-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/2e/54/647ade08bf0db230bfea292f893923872fd20be6ac6f53b2b936ba839d75/zipp-3.23.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/56/7a/28efd1d371f1acd037ac64ed1c5e2b41514a6cc937dd6ab6a13ab9f0702f/zstandard-0.25.0-cp310-cp310-macosx_10_9_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/fd/e5/6d36f92a197c3c17729a2125e29c169f460538a7d939a27eaaa6dcfcba8e/zstandard-0.25.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl - pypi: ./ osx-arm64: - conda: https://conda.anaconda.org/conda-forge/osx-arm64/bzip2-1.0.8-hd037594_9.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/c-ares-1.34.6-hc919400_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.1.4-hbd8a1cb_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/cmake-4.2.3-h8cb302d_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/cmake-4.2.3-h8cb302d_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/eigen-3.4.0-h49c215f_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/icu-78.2-h38cb7af_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/krb5-1.22.2-h385eeb1_0.conda @@ -2026,8 +1865,8 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ncurses-6.5-h5e97a16_3.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/onnxruntime-cpp-1.19.2-hda9e549_0_cpu.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/openssl-3.6.1-hd24854e_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pybind11-3.0.1-pyh7a1b43c_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pybind11-global-3.0.1-pyhc7ab6ef_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pybind11-3.0.2-pyh7a1b43c_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pybind11-global-3.0.2-pyhc7ab6ef_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-3.10.19-hcd7f573_3_cpython.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/readline-8.3-h46df422_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/rhash-1.4.6-h5505292_1.conda @@ -2053,6 +1892,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/35/b0/d69df26607c64043292644dbb9dc54b0856fabaa2cbb1eeee3331cc9e280/coverage-7.13.4-cp310-cp310-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/94/35/386550fd60316d1e37eccdda609b074113298f23cef5bddb2049823fe666/dacite-1.9.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/33/6b/e0547afaf41bf2c42e52430072fa5658766e3d65bd4b03a563d1b6336f57/distlib-0.4.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/55/e2/2537ebcff11c1ee1ff17d8d0b6f4db75873e3b0fb32c2d4a2ee31ecb310a/docstring_parser-0.17.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/8f/d7/9322c609343d929e75e7e5e6255e614fcc67572cfd083959cdef3b7aad79/docutils-0.21.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e6/86/9ce12fbbfc365b7037666ffbc79ac93ba05690b22cac8fad8d2104577dfe/dora_rs-0.4.1-cp37-abi3-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/38/82/78d57efaf364d4ae45c5e87c5c370b0999da92ecc72f9ba96949a93faa4f/dora_rs_cli-0.4.1-cp37-abi3-macosx_11_0_arm64.whl @@ -2067,6 +1907,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/6a/09/e21df6aef1e1ffc0c816f0522ddc3f6dcded766c3261813131c78a704470/gitpython-3.1.46-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/b6/a6/6ea2f73ad4474896d9e38b3ffbe6ffd5a802c738392269e99e8c6621a461/glfw-2.10.0-py2.py27.py3.py30.py31.py32.py33.py34.py35.py36.py37.py38.py39.py310.py311.py312.py313.py314-none-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/04/4b/29cac41a4d98d144bf5f6d33995617b185d14b22401f75ca86f384e87ff1/h11-0.16.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/16/16/db2f63302937337c4e9e51d97a5984b769bdb7488e3d37632a6ac297f8ef/h5py-3.15.1-cp310-cp310-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/7e/f5/f66802a942d491edb555dd61e3a9961140fd64c90bce1eafd741609d334d/httpcore-1.0.9-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/2a/39/e50c7c3a983047577ee07d2a9e53faf5a69493943ec3f6a384bdc792deb2/httpx-0.28.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c6/50/e0edd38dcd63fb26a8547f13d28f7a008bc4a3fd4eb4ff030673f22ad41a/hydra_core-1.3.2-py3-none-any.whl @@ -2095,7 +1936,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/09/ec/4b43dae793655b7d8a25f76119624350b4d65eb663459eb9603d7f1f0345/mistune-0.8.4-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a4/8e/469e5a4a2f5855992e425f3cb33804cc07bf18d48f2db061aec61ce50270/more_itertools-10.8.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/50/88/a795647672f547c983eff0823b82aaa35db922c767e1b3693e2dcf96678d/msgspec-0.20.0-cp310-cp310-macosx_11_0_arm64.whl - - pypi: https://files.pythonhosted.org/packages/8d/6b/fdac8ed97086e12ac930fb44e419eda1626e339010df73678cb1f22527d7/mujoco-3.5.0-cp310-cp310-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/03/dd/2875a57cdb423d98bdcb359f34af5eb8a24e48a903f4bb7110d75e478dac/mujoco-3.4.0-cp310-cp310-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/b9/54/dd730b32ea14ea797530a4479b2ed46a6fb250f682a9cfb997e968bf0261/networkx-3.4.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/13/3e/aef8cf8e0419b530c95e96ae93a5078e9b36c1e6613eeb1df03a80d5194e/nh3-0.3.3-cp38-abi3-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl - pypi: https://files.pythonhosted.org/packages/88/b2/d0896bdcdc8d28a7fc5717c305f1a861c26e18c05047949fb371034d98bd/nodeenv-1.10.0-py2.py3-none-any.whl @@ -2152,11 +1993,13 @@ environments: - pypi: https://files.pythonhosted.org/packages/16/e1/3079a9ff9b8e11b846c6ac5c8b5bfb7ff225eee721825310c91b3b50304f/tqdm-4.67.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/3c/b9/da09903ea53b677a58ba770112de6fe8b2acb8b4cd9bffae4ff6cfe7c072/trimesh-4.11.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/3a/7a/882d99539b19b1490cac5d77c67338d126e4122c8276bf640e411650c830/twine-6.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d4/35/7541d1f046491fac8ce05d543d3f0de0af02086ad864dd3a23535ec703b9/typeguard-4.5.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/18/67/36e9267722cc04a6b9f15c7f3441c2363321a3ea07da7ae0c0707beb2a9c/typing_extensions-4.15.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/a7/f9/56b0cb8c5c287c7eec02735cce74a4c25cc56d6817bab7edde6f32b024a3/tyro-1.0.6-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/39/08/aaaad47bc4e9dc8c725e68f9d04865dbcb2052843ff09c97b08904852d84/urllib3-2.6.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/0b/8c/cce26f6da9f69a9f0df032d642a4cb5603249f145c368e41b0154c463ca9/uv-0.10.3-py3-none-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/63/91/c4ddf7e55e05394967615050cc364a999157a44c008d0e1e9db2ed49a11c/uv-0.10.4-py3-none-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/e0/8a/e3462a43ec6712b74d921e4af9d5a2998752378c5554bde9a594dbb0cf0c/vhacdx-0.0.10-cp310-cp310-macosx_11_0_arm64.whl - - pypi: https://files.pythonhosted.org/packages/42/4b/6cf85b485be7ec29db837ec2a1d8cd68bc1147b1abf23d8636c5bd65b3cc/virtualenv-20.37.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/6a/2a/dc2228b2888f51192c7dc766106cd475f1b768c10caaf9727659726f7391/virtualenv-20.36.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/b9/c4/819f000b3d64f654a054a8b24bf8d0c5e799636393135784d0886d8c808e/viser-1.0.21-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d5/4f/b462242432d93ea45f297b6179c7333dd0402b855a912a04e7fc61c0d71f/websockets-15.0.1-cp310-cp310-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/87/22/b76d483683216dde3d67cba61fb2444be8d5be289bf628c13fc0fd90e5f9/wheel-0.46.3-py3-none-any.whl @@ -2168,7 +2011,7 @@ environments: win-64: - conda: https://conda.anaconda.org/conda-forge/win-64/bzip2-1.0.8-h0ad9c76_9.conda - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.1.4-h4c7d964_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/cmake-4.2.3-hdcbee5b_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/cmake-4.2.3-hdcbee5b_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/eigen-3.4.0-h477610d_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/krb5-1.22.2-h0ea6238_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libcurl-8.18.0-h8206538_1.conda @@ -2181,8 +2024,8 @@ environments: - conda: https://conda.anaconda.org/conda-forge/win-64/libzlib-1.3.1-h2466b09_2.conda - conda: https://conda.anaconda.org/conda-forge/win-64/onnxruntime-cpp-1.19.2-h50ebc8d_0_cpu.conda - conda: https://conda.anaconda.org/conda-forge/win-64/openssl-3.6.1-hf411b9b_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pybind11-3.0.1-pyh7a1b43c_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pybind11-global-3.0.1-pyh5e4992e_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pybind11-3.0.2-pyh7a1b43c_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pybind11-global-3.0.2-pyh5e4992e_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/python-3.10.19-hc20f281_3_cpython.conda - conda: https://conda.anaconda.org/conda-forge/win-64/tk-8.6.13-h6ed50ae_3.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda @@ -2211,6 +2054,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/78/13/331f94934cf6c092b8ea59ff868eb587bc8fe0893f02c55bc6c0183a192e/coverage-7.13.4-cp310-cp310-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/94/35/386550fd60316d1e37eccdda609b074113298f23cef5bddb2049823fe666/dacite-1.9.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/33/6b/e0547afaf41bf2c42e52430072fa5658766e3d65bd4b03a563d1b6336f57/distlib-0.4.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/55/e2/2537ebcff11c1ee1ff17d8d0b6f4db75873e3b0fb32c2d4a2ee31ecb310a/docstring_parser-0.17.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/8f/d7/9322c609343d929e75e7e5e6255e614fcc67572cfd083959cdef3b7aad79/docutils-0.21.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/1c/d4/e8134ce7d977fd87f507b6951b53df3aa7ab91122e7d487707352336703b/dora_rs-0.4.1-cp37-abi3-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/93/a7/c53764b09b7a6e6a21d46df656513391d8429b729fdde26372d961938297/dora_rs_cli-0.4.1-cp37-abi3-win_amd64.whl @@ -2225,6 +2069,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/6a/09/e21df6aef1e1ffc0c816f0522ddc3f6dcded766c3261813131c78a704470/gitpython-3.1.46-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/bd/e1/6d6816b296a529ac9b897ad228b1e084eb1f92319e96371880eebdc874a6/glfw-2.10.0-py2.py27.py3.py30.py31.py32.py33.py34.py35.py36.py37.py38.py39.py310.py311.py312.py313.py314-none-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/04/4b/29cac41a4d98d144bf5f6d33995617b185d14b22401f75ca86f384e87ff1/h11-0.16.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c3/28/dc08de359c2f43a67baa529cb70d7f9599848750031975eed92d6ae78e1d/h5py-3.15.1-cp310-cp310-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/7e/f5/f66802a942d491edb555dd61e3a9961140fd64c90bce1eafd741609d334d/httpcore-1.0.9-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/2a/39/e50c7c3a983047577ee07d2a9e53faf5a69493943ec3f6a384bdc792deb2/httpx-0.28.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c6/50/e0edd38dcd63fb26a8547f13d28f7a008bc4a3fd4eb4ff030673f22ad41a/hydra_core-1.3.2-py3-none-any.whl @@ -2253,7 +2098,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/09/ec/4b43dae793655b7d8a25f76119624350b4d65eb663459eb9603d7f1f0345/mistune-0.8.4-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a4/8e/469e5a4a2f5855992e425f3cb33804cc07bf18d48f2db061aec61ce50270/more_itertools-10.8.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/98/bd/5db3c14d675ee12842afb9b70c94c64f2c873f31198c46cbfcd7dffafab0/msgspec-0.20.0-cp310-cp310-win_amd64.whl - - pypi: https://files.pythonhosted.org/packages/7e/91/d82dd3c16892e1b0e27a2f537eec8aad54d91d939cb3cd37db2e8c09ecc2/mujoco-3.5.0-cp310-cp310-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/22/d5/f94edc884c11b63f0d7ba9322ec4ca98bc7cad57c5c034c2e3332287d9ad/mujoco-3.4.0-cp310-cp310-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/b9/54/dd730b32ea14ea797530a4479b2ed46a6fb250f682a9cfb997e968bf0261/networkx-3.4.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/73/88/1ce287ef8649dc51365b5094bd3713b76454838140a32ab4f8349973883c/nh3-0.3.3-cp38-abi3-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/88/b2/d0896bdcdc8d28a7fc5717c305f1a861c26e18c05047949fb371034d98bd/nodeenv-1.10.0-py2.py3-none-any.whl @@ -2311,245 +2156,82 @@ environments: - pypi: https://files.pythonhosted.org/packages/16/e1/3079a9ff9b8e11b846c6ac5c8b5bfb7ff225eee721825310c91b3b50304f/tqdm-4.67.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/3c/b9/da09903ea53b677a58ba770112de6fe8b2acb8b4cd9bffae4ff6cfe7c072/trimesh-4.11.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/3a/7a/882d99539b19b1490cac5d77c67338d126e4122c8276bf640e411650c830/twine-6.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d4/35/7541d1f046491fac8ce05d543d3f0de0af02086ad864dd3a23535ec703b9/typeguard-4.5.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/18/67/36e9267722cc04a6b9f15c7f3441c2363321a3ea07da7ae0c0707beb2a9c/typing_extensions-4.15.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/a7/f9/56b0cb8c5c287c7eec02735cce74a4c25cc56d6817bab7edde6f32b024a3/tyro-1.0.6-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/39/08/aaaad47bc4e9dc8c725e68f9d04865dbcb2052843ff09c97b08904852d84/urllib3-2.6.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/d5/95/89b9caeb4007d950dfa5fa5923c2ea67de541de0e3582598b7b9c7eeac53/uv-0.10.3-py3-none-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/31/dd/1900452678d46f6a649ab8167bededb02500b0561fc9f69e1f52607895c7/uv-0.10.4-py3-none-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/ff/aa/b401565542b927ce3e0a6d5e72acef79343a449ee1a7ad94a5c7266bab26/vhacdx-0.0.10-cp310-cp310-win_amd64.whl - - pypi: https://files.pythonhosted.org/packages/42/4b/6cf85b485be7ec29db837ec2a1d8cd68bc1147b1abf23d8636c5bd65b3cc/virtualenv-20.37.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/6a/2a/dc2228b2888f51192c7dc766106cd475f1b768c10caaf9727659726f7391/virtualenv-20.36.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/b9/c4/819f000b3d64f654a054a8b24bf8d0c5e799636393135784d0886d8c808e/viser-1.0.21-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/1c/46/aca7082012768bb98e5608f01658ff3ac8437e563eca41cf068bd5849a5e/websockets-15.0.1-cp310-cp310-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/87/22/b76d483683216dde3d67cba61fb2444be8d5be289bf628c13fc0fd90e5f9/wheel-0.46.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/bb/cc/53f87e8b5871a6eb2ff7e89c48c66093bda2be52315a8161ddc54ea550c4/xxhash-3.6.0-cp310-cp310-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/c8/60/4ea0d6df0b497d51bf2ef87eaab0eb26f8bc3b3313c012da5df3383cced9/yourdfpy-0.0.60-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/2e/54/647ade08bf0db230bfea292f893923872fd20be6ac6f53b2b936ba839d75/zipp-3.23.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/93/90/96d50ad417a8ace5f841b3228e93d1bb13e6ad356737f42e2dde30d8bd68/zstandard-0.25.0-cp310-cp310-win_amd64.whl - - pypi: ./ - py311: - channels: - - url: https://conda.anaconda.org/conda-forge/ - indexes: - - https://pypi.org/simple - options: - pypi-prerelease-mode: if-necessary-or-explicit - packages: - linux-64: - - conda: https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-20_gnu.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/binutils_impl_linux-64-2.45.1-default_hfdba357_101.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/binutils_linux-64-2.45.1-default_h4852527_101.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-hda65f42_9.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/c-ares-1.34.6-hb03c661_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.1.4-hbd8a1cb_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/cmake-4.2.3-hc85cc9f_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/eigen-3.4.0-h171cf75_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/gcc_impl_linux-64-13.4.0-hf2caf72_17.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/gcc_linux-64-13.4.0-h0a5b801_21.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/gxx_impl_linux-64-13.4.0-h6a38259_17.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/gxx_linux-64-13.4.0-h587059e_21.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/icu-78.2-h33c6efd_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/kernel-headers_linux-64-4.18.0-he073ed8_9.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/keyutils-1.6.3-hb9d3cd8_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/krb5-1.22.2-ha1258a1_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.45.1-default_hbd61a6d_101.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libcurl-8.18.0-hcf29cc6_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libedit-3.1.20250104-pl5321h7949ede_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libev-4.33-hd590300_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.7.4-hecca717_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libffi-3.5.2-h3435931_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-15.2.0-he0feb66_17.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/libgcc-devel_linux-64-13.4.0-hd1d28cc_117.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-15.2.0-h69a702a_17.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-15.2.0-he0feb66_17.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/liblzma-5.8.2-hb03c661_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libnghttp2-1.67.0-had1ee68_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libnsl-2.0.1-hb9d3cd8_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libsanitizer-13.4.0-h2a15e64_17.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.51.2-hf4e2dac_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libssh2-1.11.1-hcf80075_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-15.2.0-h934c35e_17.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/libstdcxx-devel_linux-64-13.4.0-h6963c3b_117.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-15.2.0-hdf11a46_17.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.41.3-h5347b49_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libuv-1.51.0-hb03c661_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libxcrypt-4.4.36-hd590300_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.1-hb9d3cd8_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.5-h2d0b736_3.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/onnxruntime-cpp-1.19.2-h641f3bf_0_cpu.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.6.1-h35e630c_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/patchelf-0.17.2-h58526e2_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pybind11-3.0.1-pyh7a1b43c_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pybind11-global-3.0.1-pyhc7ab6ef_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.11.14-hd63d673_3_cpython.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/readline-8.3-h853b02a_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/rhash-1.4.6-hb9d3cd8_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/sysroot_linux-64-2.28-h4ee821c_9.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_h366c992_103.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.7-hb78ec9c_6.conda - - pypi: https://files.pythonhosted.org/packages/18/a6/907a406bb7d359e6a63f99c313846d9eec4f7e6f7437809e03aa00fa3074/absl_py-2.4.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/8d/3f/95338030883d8c8b91223b4e21744b04d11b161a3ef117295d8241f50ab4/accessible_pygments-0.0.5-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/7e/b3/6b4067be973ae96ba0d615946e314c5ae35f9f993eca561b356540bb0c2b/alabaster-1.0.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/3e/38/7859ff46355f76f8d19459005ca000b6e7012f2f1ca597746cbcd1fbfe5e/antlr4-python3-runtime-4.9.3.tar.gz - - pypi: https://files.pythonhosted.org/packages/38/0e/27be9fdef66e72d64c0cdc3cc2823101b80585f8119b5c112c2e8f5f7dab/anyio-4.12.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/af/0f/3b8fdc946b4d9cc8cc1e8af42c4e409468c84441b933d037e101b3d72d86/astroid-3.3.11-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/3a/2a/7cc015f5b9f5db42b7d48157e23356022889fc354a2813c15934b7cb5c0e/attrs-25.4.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/b0/c2/bb8ba1cec816fa356e19da83c59bfd4ac34dba1ae41eb7622c18f4b1d48d/auditwheel-6.6.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/77/f5/21d2de20e8b8b0408f0681956ca2c69f1320a3848ac50e6e7f39c6159675/babel-2.18.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/b9/fa/123043af240e49752f1c4bd24da5053b6bd00cad78c2be53c0d1e8b975bc/backports.tarfile-1.2.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/1a/39/47f9197bdd44df24d67ac8893641e16f386c984a0619ef2ee4c51fbbc019/beautifulsoup4-4.14.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/c5/0d/84a4380f930db0010168e0aa7b7a8fed9ba1835a8fbb1472bc6d0201d529/build-1.4.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/e6/ad/3cc14f097111b4de0040c83a525973216457bbeeb63739ef1ed275c1c021/certifi-2026.1.4-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/d7/91/500d892b2bf36529a75b77958edfcd5ad8e2ce4064ce2ecfeab2125d72d1/cffi-2.0.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/db/3c/33bac158f8ab7f89b2e59426d5fe2e4f63f7ed25df84c036890172b412b5/cfgv-3.5.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/6d/fc/de9cce525b2c5b94b47c70a4b4fb19f871b24995c728e957ee68ab1671ea/charset_normalizer-3.4.4-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/6d/c1/e419ef3723a074172b68aaa89c9f3de486ed4c2399e2dbd8113a4fdcaf9e/colorlog-6.10.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/76/53/c16972708cbb79f2942922571a687c52bd109a7bd51175aeb7558dff2236/coverage-7.13.4-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/6b/e7/237155ae19a9023de7e30ec64e5d99a9431a567407ac21170a046d22a5a3/cryptography-46.0.5-cp311-abi3-manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/94/35/386550fd60316d1e37eccdda609b074113298f23cef5bddb2049823fe666/dacite-1.9.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/33/6b/e0547afaf41bf2c42e52430072fa5658766e3d65bd4b03a563d1b6336f57/distlib-0.4.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/02/10/5da547df7a391dcde17f59520a231527b8571e6f46fc8efb02ccb370ab12/docutils-0.22.4-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/94/53/7dc142faa1719333d57c78cfcf419f2b176770b49ebef54e0bbfa34212ac/dora_rs-0.4.1-cp37-abi3-manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/3c/3e/f3d1e28df9457089055dacf3ca7ca3751ed274d312d9a8515255d80011ec/dora_rs_cli-0.4.1-cp37-abi3-manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/78/62/0ffc083b1d5f7c95eb03b260d2622dfacb70d1153011d216260b71c8e7d9/dora_utils-0.1.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/60/10/c66c023923ca038d3081bf62e6a92ddefbd780e5ce0b7d5383abf10dc30f/embreex-2.17.7.post7-cp311-cp311-manylinux2010_x86_64.manylinux_2_12_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/e7/98/87b5946356095738cb90a6df7b35ff69ac5750f6e783d5fbcc5cb3b6cbd7/etils-1.13.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/ab/84/02fc1827e8cdded4aa65baef11296a9bbe595c474f0d6d758af082d849fd/execnet-2.1.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/e7/04/a94ebfb4eaaa08db56725a40de2887e95de4e8641b9e902c311bfa00aa39/filelock-3.24.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/e6/ab/fb21f4c939bb440104cc2b396d3be1d9b7a9fd3c6c2a53d98c45b3d7c954/fsspec-2026.2.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/f4/b2/50e9b292b5cac13e9e81272c7171301abc753a60460d21505b606e15cf21/furo-2025.12.19-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/a0/61/5c78b91c3143ed5c14207f463aecfc8f9dbb5092fb2869baf37c273b2705/gitdb-4.0.12-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/6a/09/e21df6aef1e1ffc0c816f0522ddc3f6dcded766c3261813131c78a704470/gitpython-3.1.46-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/5a/3f/efeb7c6801c46e11bd666a5180f0d615f74f72264212f74f39586c6fda9d/glfw-2.10.0-py2.py27.py3.py30.py31.py32.py33.py34.py35.py36.py37.py38.py39.py310.py311.py312.py313.py314-none-manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/04/4b/29cac41a4d98d144bf5f6d33995617b185d14b22401f75ca86f384e87ff1/h11-0.16.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/7e/f5/f66802a942d491edb555dd61e3a9961140fd64c90bce1eafd741609d334d/httpcore-1.0.9-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/2a/39/e50c7c3a983047577ee07d2a9e53faf5a69493943ec3f6a384bdc792deb2/httpx-0.28.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/c6/50/e0edd38dcd63fb26a8547f13d28f7a008bc4a3fd4eb4ff030673f22ad41a/hydra_core-1.3.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/42/77/de194443bf38daed9452139e960c632b0ef9f9a5dd9ce605fdf18ca9f1b1/id-1.6.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/b8/58/40fbbcefeda82364720eba5cf2270f98496bdfa19ea75b4cccae79c698e6/identify-2.6.16-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/0e/61/66938bbb5fc52dbdf84594873d5b51fb1f7c7794e9c0f5bd885f30bc507b/idna-3.11-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/fb/fe/301e0936b79bcab4cacc7548bf2853fc28dced0a578bab1f7ef53c9aa75b/imageio-2.37.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/ff/62/85c4c919272577931d407be5ba5d71c20f0b616d31a0befe0ae45bb79abd/imagesize-1.4.1-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/fa/5e/f8e9a1d23b9c20a551a8a02ea3637b4642e22c2626e3a13a9a29cdea99eb/importlib_metadata-8.7.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/a4/ed/1f1afb2e9e7f38a545d628f864d562a5ae64fe6f7a10e28ffb9b185b4e89/importlib_resources-6.5.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/cb/b1/3846dd7f199d53cb17f49cba7e651e9ce294d8497c8c150530ed11865bb8/iniconfig-2.3.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/7f/66/b15ce62552d84bbfcec9a4873ab79d993a1dd4edb922cbfccae192bd5b5f/jaraco.classes-3.4.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/8d/48/aa685dbf1024c7bd82bede569e3a85f82c32fd3d79ba5fea578f0159571a/jaraco_context-6.1.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/fd/c4/813bb09f0985cb21e959f21f2464169eca882656849adf727ac7bb7e1767/jaraco_functools-4.4.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/b2/a3/e137168c9c44d18eff0376253da9f1e9234d0239e0ee230d2fee6cea8e55/jeepney-0.9.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/62/a1/3d680cbfd5f4b8f15abc1d571870c5fc3e594bb582bc3b64ea099db13e56/jinja2-3.1.6-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/69/90/f63fb5873511e014207a475e2bb4e8b2e570d655b00ac19a9a0ca0a385ee/jsonschema-4.26.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/41/45/1a4ed80516f02155c51f51e8cedb3c1902296743db0bbc66608a0db2814f/jsonschema_specifications-2025.9.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/81/db/e655086b7f3a705df045bf0933bdd9c2f79bb3c97bfef1384598bb79a217/keyring-25.7.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/b8/89/ea8f91594bc5dbb879734d35a6f2b0ad50605d7fb419de2b63d4211765cc/lxml-6.0.2-cp311-cp311-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/a9/50/5b1d70de548fb1e11e15ea9ebec0480365462d202f98b66ad7e154284327/m2r2-0.3.4-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/95/5b/d1831a133f4d14e72d5306355d596c8874fdedf5ad0eda2a0700e4febccd/manifold3d-3.3.2-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/f0/4a/86796859383d7d11fa5d4bcf1983f94c6cbb9eeb60fb3bab527fec4b32fa/mapbox_earcut-2.0.0-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/94/54/e7d793b573f298e1c9013b8c4dade17d481164aa517d1d7148619c2cedbf/markdown_it_py-4.0.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/30/ac/0273f6fcb5f42e314c6d8cd99effae6a5354604d461b8d392b5ec9530a54/markupsafe-3.0.3-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/09/ec/4b43dae793655b7d8a25f76119624350b4d65eb663459eb9603d7f1f0345/mistune-0.8.4-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/a4/8e/469e5a4a2f5855992e425f3cb33804cc07bf18d48f2db061aec61ce50270/more_itertools-10.8.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/6b/96/5c095b940de3aa6b43a71ec76275ac3537b21bd45c7499b5a17a429110fa/msgspec-0.20.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/47/14/d5bf98385354318ec2e6c466a8c7cf7fd76f8b711ed6d11d155e2baa81fb/mujoco-3.5.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/9e/c9/b2622292ea83fbb4ec318f5b9ab867d0a28ab43c5717bb85b0a5f6b3b0a4/networkx-3.6.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/6f/84/c0dc75c7fb596135f999e59a410d9f45bdabb989f1cb911f0016d22b747b/nh3-0.3.3-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/88/b2/d0896bdcdc8d28a7fc5717c305f1a861c26e18c05047949fb371034d98bd/nodeenv-1.10.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/1b/46/6fa4ea94f1ddf969b2ee941290cca6f1bfac92b53c76ae5f44afe17ceb69/numpy-2.4.2-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/e3/94/1843518e420fa3ed6919835845df698c7e27e183cb997394e4a670973a65/omegaconf-2.3.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/b7/b9/c538f279a4e237a006a2c98387d081e9eb060d203d8ed34467cc0f0b9b53/packaging-26.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/a2/c8/46dfeac5825e600579157eea177be43e2f7ff4a99da9d0d0a49533509ac5/pillow-12.1.1-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/48/31/05e764397056194206169869b50cf2fee4dbbbc71b344705b9c0d878d4d8/platformdirs-4.9.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/54/20/4d324d65cc6d9205fabedc306948156824eb9f0ee1633355a8f7ec5c66bf/pluggy-1.6.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/5d/19/fd3ef348460c80af7bb4669ea7926651d1f95c23ff2df18b9d24bab4f3fa/pre_commit-4.5.1-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/0b/62/96459ef5b67957eac38a90f541d1c28833d1b367f014a482cb63f3b7cd2d/pyarrow-23.0.1-cp311-cp311-manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/4f/e4/4f2d41881fae547f06ffa4c9748fa8ed13c4db5c830ff268b84175546b3c/pybind11_stubgen-2.5.5-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/07/86/f1f61b7a0701f9d1299e5293d083318019f91021a4d449f94d59dbe024e4/pycollada-0.9.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/0c/c3/44f3fbbfa403ea2a7c779186dc20772604442dde72947e7d01069cbe98e3/pycparser-3.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/af/43/700932c4f0638c3421177144a2e86448c0d75dbaee2c7936bda3f9fd0878/pyelftools-0.32-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/c7/21/705964c7812476f378728bdf590ca4b771ec72385c533964653c68e86bdc/pygments-2.19.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/de/e4/1ba6f44e491c4eece978685230dde56b14d51a0365bc1b774ddaa94d14cd/pyopengl-3.1.10-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/bd/24/12818598c362d7f300f18e74db45963dbcb85150324092410c8b49405e42/pyproject_hooks-1.2.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/0c/82/a2c93e32800940d9573fb28c346772a14778b84ba7524e691b324620ab89/pyright-1.1.408-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/3b/ab/b3226f0bd7cdcf710fbede2b3548584366da3b19b5021e74f5bde2a8fa3f/pytest-9.0.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/ee/49/1377b49de7d0c1ce41292161ea0f721913fa8722c19fb9c1e3aa0367eecb/pytest_cov-7.0.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/ca/31/d4e37e9e550c2b92a9cbc2e4d0b7420a27224968580b5a447f420847c975/pytest_xdist-3.8.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/ec/57/56b9bcc3c9c6a792fcbaf139543cee77261f3651ca9da0c93f5c1221264b/python_dateutil-2.9.0.post0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/71/60/917329f640924b18ff085ab889a11c763e0b573da888e8404ff486657602/pyyaml-6.0.3-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/e1/67/921ec3024056483db83953ae8e48079ad62b92db7880013ca77632921dd0/readme_renderer-44.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/2c/58/ca301544e1fa93ed4f80d724bf5b194f6e4b945841c5bfd555878eea9fcb/referencing-0.37.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/1e/db/4254e3eabe8020b458f1a747140d32277ec7a271daf1d235b70dc0b4e6e3/requests-2.32.5-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/3f/51/d4db610ef29373b879047326cbf6fa98b6c1969d6f6dc423279de2b1be2c/requests_toolbelt-1.0.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/ff/9a/9afaade874b2fa6c752c36f1548f718b5b83af81ed9b76628329dab81c1b/rfc3986-2.0.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/ef/45/615f5babd880b4bd7d405cc0dc348234c5ffb6ed1ea33e152ede08b2072d/rich-14.3.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/16/80/579e75e0be0439d11e479732e4c194a9c6e6d152670dae561b9525015425/robot_descriptions-1.22.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/04/54/6f679c435d28e0a568d8e8a7c0a93a09010818634c3c3907fc98d8983770/roman_numerals-4.1.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/f8/1e/372195d326549bb51f0ba0f2ecb9874579906b97e08880e7a65c3bef1a99/rpds_py-0.30.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/d1/75/e5d44be90525cd28503e7f836d077ae6663ec0687a13ba7810b4114b3668/rtree-1.4.1-py3-none-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/a3/1d/5f56cae1d6c40b8a318513599b35ea4b075d7dc1cd1d04449578c29d1d75/ruff-0.15.1-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/ef/df/df1457c4df3826e908879fe3d76bc5b6e60aae45f4ee42539512438cfd5d/scipy-1.17.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/b7/46/f5af3402b579fd5e11573ce652019a67074317e18c1935cc0b4ba9b35552/secretstorage-3.5.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/13/02/58b0b8d9c17c93ab6340edd8b7308c0c5a5b81f94ce65705819b7416dba5/shapely-2.1.2-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/b7/ce/149a00dd41f10bc29e5921b496af8b574d8413afcd5e30dfa0ed46c2cc5e/six-1.17.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/04/be/d09147ad1ec7934636ad912901c5fd7667e1c858e19d355237db0d0cd5e4/smmap-5.0.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/c8/78/3565d011c61f5a43488987ee32b6f3f656e7f107ac2782dd57bdd7d91d9a/snowballstemmer-3.0.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/46/2c/1462b1d0a634697ae9e55b3cecdcb64788e8b7d63f54d923fcd0bb140aed/soupsieve-2.8.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/c6/3f/4bbd76424c393caead2e1eb89777f575dee5c8653e2d4b6afd7a564f5974/sphinx-9.0.4-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/d8/11/9825443890d3ef6b6a0db938054e7c806e9911509e0315fe984d00a090c1/sphinx_autoapi-3.7.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/3c/dd/018ce05c532a22007ac58d4f45232514cd9d6dd0ee1dc374e309db830983/sphinx_basic_ng-1.0.0b2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/38/5e/49c1330add8c48ef52e50c82d7d847e32b7f786d5ddc1cafcd36ac63f1e3/sphinxcontrib_ansi_rai-0.7.0.dev20250623-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/5d/85/9ebeae2f76e9e77b952f4b274c27238156eae7979c5421fba91a28f4970d/sphinxcontrib_applehelp-2.0.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/35/7a/987e583882f985fe4d7323774889ec58049171828b58c2217e7f79cdf44e/sphinxcontrib_devhelp-2.0.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/0a/7b/18a8c0bcec9182c05a0b3ec2a776bba4ead82750a55ff798e8d406dae604/sphinxcontrib_htmlhelp-2.1.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/c2/42/4c8646762ee83602e3fb3fbe774c2fac12f317deb0b5dbeeedd2d3ba4b77/sphinxcontrib_jsmath-1.0.1-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/84/04/53406477f01fa5bdcb1344fac421c46b6dce112d980c58237825ddb262a2/sphinxcontrib_programoutput_rai-0.18.dev0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/27/83/859ecdd180cacc13b1f7e857abf8582a64552ea7a061057a6c716e790fce/sphinxcontrib_qthelp-2.0.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/52/a7/d2782e4e3f77c8450f727ba74a8f12756d5ba823d81b941f1b04da9d033a/sphinxcontrib_serializinghtml-2.0.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/3a/83/4f5b250220e1a5acd31345a5ec1c95a7769725d0d8135276f399f44062f8/svg_path-7.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/16/e1/3079a9ff9b8e11b846c6ac5c8b5bfb7ff225eee721825310c91b3b50304f/tqdm-4.67.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/3c/b9/da09903ea53b677a58ba770112de6fe8b2acb8b4cd9bffae4ff6cfe7c072/trimesh-4.11.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/3a/7a/882d99539b19b1490cac5d77c67338d126e4122c8276bf640e411650c830/twine-6.2.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/18/67/36e9267722cc04a6b9f15c7f3441c2363321a3ea07da7ae0c0707beb2a9c/typing_extensions-4.15.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/39/08/aaaad47bc4e9dc8c725e68f9d04865dbcb2052843ff09c97b08904852d84/urllib3-2.6.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/ce/de/0638d8aa83c2038c5f820151006b3bf372d109afbfdb2a8fc59187cc3690/uv-0.10.3-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/a6/f1/464c761dbe24f58d6fc354bf51729342981fb7a621e170e0d3512fadbec8/vhacdx-0.0.10-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/42/4b/6cf85b485be7ec29db837ec2a1d8cd68bc1147b1abf23d8636c5bd65b3cc/virtualenv-20.37.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/b9/c4/819f000b3d64f654a054a8b24bf8d0c5e799636393135784d0886d8c808e/viser-1.0.21-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/93/1f/5d6dbf551766308f6f50f8baf8e9860be6182911e8106da7a7f73785f4c4/websockets-15.0.1-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/87/22/b76d483683216dde3d67cba61fb2444be8d5be289bf628c13fc0fd90e5f9/wheel-0.46.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/a5/86/cf2c0321dc3940a7aa73076f4fd677a0fb3e405cb297ead7d864fd90847e/xxhash-3.6.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/c8/60/4ea0d6df0b497d51bf2ef87eaab0eb26f8bc3b3313c012da5df3383cced9/yourdfpy-0.0.60-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/2e/54/647ade08bf0db230bfea292f893923872fd20be6ac6f53b2b936ba839d75/zipp-3.23.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/bb/1f/e9cfd801a3f9190bf3e759c422bbfd2247db9d7f3d54a56ecde70137791a/zstandard-0.25.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/93/90/96d50ad417a8ace5f841b3228e93d1bb13e6ad356737f42e2dde30d8bd68/zstandard-0.25.0-cp310-cp310-win_amd64.whl - pypi: ./ - osx-64: - - conda: https://conda.anaconda.org/conda-forge/osx-64/bzip2-1.0.8-h500dc9f_9.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/c-ares-1.34.6-hb5e19a0_0.conda + py311: + channels: + - url: https://conda.anaconda.org/conda-forge/ + indexes: + - https://pypi.org/simple + options: + pypi-prerelease-mode: if-necessary-or-explicit + packages: + linux-64: + - conda: https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-20_gnu.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/binutils_impl_linux-64-2.45.1-default_hfdba357_101.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/binutils_linux-64-2.45.1-default_h4852527_101.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-hda65f42_9.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/c-ares-1.34.6-hb03c661_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.1.4-hbd8a1cb_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/cmake-4.2.3-h965d0ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/eigen-3.4.0-hfc0b2d5_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/krb5-1.22.2-h207b36a_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/libcurl-8.18.0-h9a2545f_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/libcxx-21.1.8-h4fb565c_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/libedit-3.1.20250104-pl5321ha958ccf_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/libev-4.33-h10d778d_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/libexpat-2.7.4-h991f03e_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/libffi-3.5.2-hd1f9c09_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/liblzma-5.8.2-h11316ed_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/libnghttp2-1.67.0-h3338091_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/libsqlite-3.51.2-hb99441e_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/libssh2-1.11.1-hed3591d_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/libuv-1.51.0-h58003a5_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/libzlib-1.3.1-hd23fc13_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/ncurses-6.5-h0622a9a_3.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/onnxruntime-cpp-1.19.2-h417c6ca_0_cpu.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/openssl-3.6.1-hb6871ef_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pybind11-3.0.1-pyh7a1b43c_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pybind11-global-3.0.1-pyhc7ab6ef_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/python-3.11.14-h74c2667_3_cpython.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/readline-8.3-h68b038d_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/rhash-1.4.6-h6e16a3a_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/tk-8.6.13-h7142dee_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/cmake-4.2.3-hc85cc9f_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/eigen-3.4.0-h171cf75_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/gcc_impl_linux-64-13.4.0-he2fa53e_18.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/gcc_linux-64-13.4.0-h0a5b801_21.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/gxx_impl_linux-64-13.4.0-h6a38259_18.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/gxx_linux-64-13.4.0-h587059e_21.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/icu-78.2-h33c6efd_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/kernel-headers_linux-64-4.18.0-he073ed8_9.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/keyutils-1.6.3-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/krb5-1.22.2-ha1258a1_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.45.1-default_hbd61a6d_101.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libcurl-8.18.0-hcf29cc6_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libedit-3.1.20250104-pl5321h7949ede_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libev-4.33-hd590300_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.7.4-hecca717_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libffi-3.5.2-h3435931_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-15.2.0-he0feb66_18.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/libgcc-devel_linux-64-13.4.0-hd1d28cc_118.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-15.2.0-h69a702a_18.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-15.2.0-he0feb66_18.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/liblzma-5.8.2-hb03c661_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libnghttp2-1.67.0-had1ee68_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libnsl-2.0.1-hb9d3cd8_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libsanitizer-13.4.0-h2a15e64_18.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.51.2-hf4e2dac_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libssh2-1.11.1-hcf80075_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-15.2.0-h934c35e_18.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/libstdcxx-devel_linux-64-13.4.0-h6963c3b_118.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-15.2.0-hdf11a46_18.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.41.3-h5347b49_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libuv-1.51.0-hb03c661_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libxcrypt-4.4.36-hd590300_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.1-hb9d3cd8_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.5-h2d0b736_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/onnxruntime-cpp-1.19.2-h641f3bf_0_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.6.1-h35e630c_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/patchelf-0.17.2-h58526e2_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pybind11-3.0.2-pyh7a1b43c_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pybind11-global-3.0.2-pyhc7ab6ef_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.11.14-hd63d673_3_cpython.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/readline-8.3-h853b02a_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/rhash-1.4.6-hb9d3cd8_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/sysroot_linux-64-2.28-h4ee821c_9.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_h366c992_103.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/zstd-1.5.7-h3eecb57_6.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.7-hb78ec9c_6.conda - pypi: https://files.pythonhosted.org/packages/18/a6/907a406bb7d359e6a63f99c313846d9eec4f7e6f7437809e03aa00fa3074/absl_py-2.4.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/8d/3f/95338030883d8c8b91223b4e21744b04d11b161a3ef117295d8241f50ab4/accessible_pygments-0.0.5-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/7e/b3/6b4067be973ae96ba0d615946e314c5ae35f9f993eca561b356540bb0c2b/alabaster-1.0.0-py3-none-any.whl @@ -2563,17 +2245,20 @@ environments: - pypi: https://files.pythonhosted.org/packages/1a/39/47f9197bdd44df24d67ac8893641e16f386c984a0619ef2ee4c51fbbc019/beautifulsoup4-4.14.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c5/0d/84a4380f930db0010168e0aa7b7a8fed9ba1835a8fbb1472bc6d0201d529/build-1.4.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e6/ad/3cc14f097111b4de0040c83a525973216457bbeeb63739ef1ed275c1c021/certifi-2026.1.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d7/91/500d892b2bf36529a75b77958edfcd5ad8e2ce4064ce2ecfeab2125d72d1/cffi-2.0.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl - pypi: https://files.pythonhosted.org/packages/db/3c/33bac158f8ab7f89b2e59426d5fe2e4f63f7ed25df84c036890172b412b5/cfgv-3.5.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/ed/27/c6491ff4954e58a10f69ad90aca8a1b6fe9c5d3c6f380907af3c37435b59/charset_normalizer-3.4.4-cp311-cp311-macosx_10_9_universal2.whl + - pypi: https://files.pythonhosted.org/packages/6d/fc/de9cce525b2c5b94b47c70a4b4fb19f871b24995c728e957ee68ab1671ea/charset_normalizer-3.4.4-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/6d/c1/e419ef3723a074172b68aaa89c9f3de486ed4c2399e2dbd8113a4fdcaf9e/colorlog-6.10.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/b4/ad/b59e5b451cf7172b8d1043dc0fa718f23aab379bc1521ee13d4bd9bfa960/coverage-7.13.4-cp311-cp311-macosx_10_9_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/76/53/c16972708cbb79f2942922571a687c52bd109a7bd51175aeb7558dff2236/coverage-7.13.4-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/6b/e7/237155ae19a9023de7e30ec64e5d99a9431a567407ac21170a046d22a5a3/cryptography-46.0.5-cp311-abi3-manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/94/35/386550fd60316d1e37eccdda609b074113298f23cef5bddb2049823fe666/dacite-1.9.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/33/6b/e0547afaf41bf2c42e52430072fa5658766e3d65bd4b03a563d1b6336f57/distlib-0.4.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/55/e2/2537ebcff11c1ee1ff17d8d0b6f4db75873e3b0fb32c2d4a2ee31ecb310a/docstring_parser-0.17.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/02/10/5da547df7a391dcde17f59520a231527b8571e6f46fc8efb02ccb370ab12/docutils-0.22.4-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/a1/ff/894f11890a526f107d3d06b0e71209b45e5a7bb3666aed23725308bbf78a/dora_rs-0.4.1.tar.gz - - pypi: https://files.pythonhosted.org/packages/f0/45/77300cbdb4137a66eedf8e2488decffbe33e1d33ec912e54fdd02f2f3084/dora_rs_cli-0.4.1.tar.gz + - pypi: https://files.pythonhosted.org/packages/94/53/7dc142faa1719333d57c78cfcf419f2b176770b49ebef54e0bbfa34212ac/dora_rs-0.4.1-cp37-abi3-manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/3c/3e/f3d1e28df9457089055dacf3ca7ca3751ed274d312d9a8515255d80011ec/dora_rs_cli-0.4.1-cp37-abi3-manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/78/62/0ffc083b1d5f7c95eb03b260d2622dfacb70d1153011d216260b71c8e7d9/dora_utils-0.1.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/bd/f5/222bae96165a6bd8c855ba434124daeb8aa4f4b021266ee13f2b485cb873/embreex-2.17.7.post7-cp311-cp311-macosx_10_9_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/60/10/c66c023923ca038d3081bf62e6a92ddefbd780e5ce0b7d5383abf10dc30f/embreex-2.17.7.post7-cp311-cp311-manylinux2010_x86_64.manylinux_2_12_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/e7/98/87b5946356095738cb90a6df7b35ff69ac5750f6e783d5fbcc5cb3b6cbd7/etils-1.13.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ab/84/02fc1827e8cdded4aa65baef11296a9bbe595c474f0d6d758af082d849fd/execnet-2.1.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e7/04/a94ebfb4eaaa08db56725a40de2887e95de4e8641b9e902c311bfa00aa39/filelock-3.24.2-py3-none-any.whl @@ -2581,8 +2266,9 @@ environments: - pypi: https://files.pythonhosted.org/packages/f4/b2/50e9b292b5cac13e9e81272c7171301abc753a60460d21505b606e15cf21/furo-2025.12.19-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a0/61/5c78b91c3143ed5c14207f463aecfc8f9dbb5092fb2869baf37c273b2705/gitdb-4.0.12-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/6a/09/e21df6aef1e1ffc0c816f0522ddc3f6dcded766c3261813131c78a704470/gitpython-3.1.46-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/b3/87/de0b33f6f00687499ca1371f22aa73396341b85bf88f1a284f9da8842493/glfw-2.10.0-py2.py27.py3.py30.py31.py32.py33.py34.py35.py36.py37.py38.py39.py310.py311.py312.py313.py314-none-macosx_10_6_intel.whl + - pypi: https://files.pythonhosted.org/packages/5a/3f/efeb7c6801c46e11bd666a5180f0d615f74f72264212f74f39586c6fda9d/glfw-2.10.0-py2.py27.py3.py30.py31.py32.py33.py34.py35.py36.py37.py38.py39.py310.py311.py312.py313.py314-none-manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/04/4b/29cac41a4d98d144bf5f6d33995617b185d14b22401f75ca86f384e87ff1/h11-0.16.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/8b/23/4ab1108e87851ccc69694b03b817d92e142966a6c4abd99e17db77f2c066/h5py-3.15.1-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/7e/f5/f66802a942d491edb555dd61e3a9961140fd64c90bce1eafd741609d334d/httpcore-1.0.9-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/2a/39/e50c7c3a983047577ee07d2a9e53faf5a69493943ec3f6a384bdc792deb2/httpx-0.28.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c6/50/e0edd38dcd63fb26a8547f13d28f7a008bc4a3fd4eb4ff030673f22ad41a/hydra_core-1.3.2-py3-none-any.whl @@ -2597,32 +2283,33 @@ environments: - pypi: https://files.pythonhosted.org/packages/7f/66/b15ce62552d84bbfcec9a4873ab79d993a1dd4edb922cbfccae192bd5b5f/jaraco.classes-3.4.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/8d/48/aa685dbf1024c7bd82bede569e3a85f82c32fd3d79ba5fea578f0159571a/jaraco_context-6.1.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/fd/c4/813bb09f0985cb21e959f21f2464169eca882656849adf727ac7bb7e1767/jaraco_functools-4.4.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b2/a3/e137168c9c44d18eff0376253da9f1e9234d0239e0ee230d2fee6cea8e55/jeepney-0.9.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/62/a1/3d680cbfd5f4b8f15abc1d571870c5fc3e594bb582bc3b64ea099db13e56/jinja2-3.1.6-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/69/90/f63fb5873511e014207a475e2bb4e8b2e570d655b00ac19a9a0ca0a385ee/jsonschema-4.26.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/41/45/1a4ed80516f02155c51f51e8cedb3c1902296743db0bbc66608a0db2814f/jsonschema_specifications-2025.9.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/81/db/e655086b7f3a705df045bf0933bdd9c2f79bb3c97bfef1384598bb79a217/keyring-25.7.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/28/66/1ced58f12e804644426b85d0bb8a4478ca77bc1761455da310505f1a3526/lxml-6.0.2-cp311-cp311-macosx_10_9_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/b8/89/ea8f91594bc5dbb879734d35a6f2b0ad50605d7fb419de2b63d4211765cc/lxml-6.0.2-cp311-cp311-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/a9/50/5b1d70de548fb1e11e15ea9ebec0480365462d202f98b66ad7e154284327/m2r2-0.3.4-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/a4/fc/2b139e784922380e42d005bac6e9ae11d707345bbb2318a8a61c2242f405/manifold3d-3.3.2-cp311-cp311-macosx_10_14_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/07/9f/fbd15d9e348e75e986d6912c4eab99888106b7e5fb0a01e765422f7cd464/mapbox_earcut-2.0.0-cp311-cp311-macosx_10_13_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/95/5b/d1831a133f4d14e72d5306355d596c8874fdedf5ad0eda2a0700e4febccd/manifold3d-3.3.2-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/f0/4a/86796859383d7d11fa5d4bcf1983f94c6cbb9eeb60fb3bab527fec4b32fa/mapbox_earcut-2.0.0-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/94/54/e7d793b573f298e1c9013b8c4dade17d481164aa517d1d7148619c2cedbf/markdown_it_py-4.0.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/08/db/fefacb2136439fc8dd20e797950e749aa1f4997ed584c62cfb8ef7c2be0e/markupsafe-3.0.3-cp311-cp311-macosx_10_9_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/30/ac/0273f6fcb5f42e314c6d8cd99effae6a5354604d461b8d392b5ec9530a54/markupsafe-3.0.3-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/09/ec/4b43dae793655b7d8a25f76119624350b4d65eb663459eb9603d7f1f0345/mistune-0.8.4-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a4/8e/469e5a4a2f5855992e425f3cb33804cc07bf18d48f2db061aec61ce50270/more_itertools-10.8.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/03/59/fdcb3af72f750a8de2bcf39d62ada70b5eb17b06d7f63860e0a679cb656b/msgspec-0.20.0-cp311-cp311-macosx_10_9_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/8b/47/e923589301c197c3ea0776b60cc0d57383b3cc51639ca75e4e4b6c5334d6/mujoco-3.5.0-cp311-cp311-macosx_10_16_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/6b/96/5c095b940de3aa6b43a71ec76275ac3537b21bd45c7499b5a17a429110fa/msgspec-0.20.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/c3/c1/37c07061be2b410de33624093fc06fc49ec13888252f1a6c30fcd40633bd/mujoco-3.4.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/9e/c9/b2622292ea83fbb4ec318f5b9ab867d0a28ab43c5717bb85b0a5f6b3b0a4/networkx-3.6.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/13/3e/aef8cf8e0419b530c95e96ae93a5078e9b36c1e6613eeb1df03a80d5194e/nh3-0.3.3-cp38-abi3-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl + - pypi: https://files.pythonhosted.org/packages/6f/84/c0dc75c7fb596135f999e59a410d9f45bdabb989f1cb911f0016d22b747b/nh3-0.3.3-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - pypi: https://files.pythonhosted.org/packages/88/b2/d0896bdcdc8d28a7fc5717c305f1a861c26e18c05047949fb371034d98bd/nodeenv-1.10.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/d3/44/71852273146957899753e69986246d6a176061ea183407e95418c2aa4d9a/numpy-2.4.2-cp311-cp311-macosx_10_9_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/1b/46/6fa4ea94f1ddf969b2ee941290cca6f1bfac92b53c76ae5f44afe17ceb69/numpy-2.4.2-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/e3/94/1843518e420fa3ed6919835845df698c7e27e183cb997394e4a670973a65/omegaconf-2.3.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/b7/b9/c538f279a4e237a006a2c98387d081e9eb060d203d8ed34467cc0f0b9b53/packaging-26.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/2b/46/5da1ec4a5171ee7bf1a0efa064aba70ba3d6e0788ce3f5acd1375d23c8c0/pillow-12.1.1-cp311-cp311-macosx_10_10_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/a2/c8/46dfeac5825e600579157eea177be43e2f7ff4a99da9d0d0a49533509ac5/pillow-12.1.1-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/48/31/05e764397056194206169869b50cf2fee4dbbbc71b344705b9c0d878d4d8/platformdirs-4.9.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/54/20/4d324d65cc6d9205fabedc306948156824eb9f0ee1633355a8f7ec5c66bf/pluggy-1.6.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/5d/19/fd3ef348460c80af7bb4669ea7926651d1f95c23ff2df18b9d24bab4f3fa/pre_commit-4.5.1-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/bf/4a/1472c00392f521fea03ae93408bf445cc7bfa1ab81683faf9bc188e36629/pyarrow-23.0.1-cp311-cp311-macosx_12_0_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/0b/62/96459ef5b67957eac38a90f541d1c28833d1b367f014a482cb63f3b7cd2d/pyarrow-23.0.1-cp311-cp311-manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/4f/e4/4f2d41881fae547f06ffa4c9748fa8ed13c4db5c830ff268b84175546b3c/pybind11_stubgen-2.5.5-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/07/86/f1f61b7a0701f9d1299e5293d083318019f91021a4d449f94d59dbe024e4/pycollada-0.9.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/0c/c3/44f3fbbfa403ea2a7c779186dc20772604442dde72947e7d01069cbe98e3/pycparser-3.0-py3-none-any.whl @@ -2635,7 +2322,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/ee/49/1377b49de7d0c1ce41292161ea0f721913fa8722c19fb9c1e3aa0367eecb/pytest_cov-7.0.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ca/31/d4e37e9e550c2b92a9cbc2e4d0b7420a27224968580b5a447f420847c975/pytest_xdist-3.8.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ec/57/56b9bcc3c9c6a792fcbaf139543cee77261f3651ca9da0c93f5c1221264b/python_dateutil-2.9.0.post0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/6d/16/a95b6757765b7b031c9374925bb718d55e0a9ba8a1b6a12d25962ea44347/pyyaml-6.0.3-cp311-cp311-macosx_10_13_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/71/60/917329f640924b18ff085ab889a11c763e0b573da888e8404ff486657602/pyyaml-6.0.3-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/e1/67/921ec3024056483db83953ae8e48079ad62b92db7880013ca77632921dd0/readme_renderer-44.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/2c/58/ca301544e1fa93ed4f80d724bf5b194f6e4b945841c5bfd555878eea9fcb/referencing-0.37.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/1e/db/4254e3eabe8020b458f1a747140d32277ec7a271daf1d235b70dc0b4e6e3/requests-2.32.5-py3-none-any.whl @@ -2644,11 +2331,12 @@ environments: - pypi: https://files.pythonhosted.org/packages/ef/45/615f5babd880b4bd7d405cc0dc348234c5ffb6ed1ea33e152ede08b2072d/rich-14.3.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/16/80/579e75e0be0439d11e479732e4c194a9c6e6d152670dae561b9525015425/robot_descriptions-1.22.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/04/54/6f679c435d28e0a568d8e8a7c0a93a09010818634c3c3907fc98d8983770/roman_numerals-4.1.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/4d/6e/f964e88b3d2abee2a82c1ac8366da848fce1c6d834dc2132c3fda3970290/rpds_py-0.30.0-cp311-cp311-macosx_10_12_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/04/d9/108cd989a4c0954e60b3cdc86fd2826407702b5375f6dfdab2802e5fed98/rtree-1.4.1-py3-none-macosx_10_9_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/b3/ea/c8f89d32e7912269d38c58f3649e453ac32c528f93bb7f4219258be2e7ed/ruff-0.15.1-py3-none-macosx_10_12_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/1e/4b/c89c131aa87cad2b77a54eb0fb94d633a842420fa7e919dc2f922037c3d8/scipy-1.17.0-cp311-cp311-macosx_10_14_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/8f/8d/1ff672dea9ec6a7b5d422eb6d095ed886e2e523733329f75fdcb14ee1149/shapely-2.1.2-cp311-cp311-macosx_10_9_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/f8/1e/372195d326549bb51f0ba0f2ecb9874579906b97e08880e7a65c3bef1a99/rpds_py-0.30.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/d1/75/e5d44be90525cd28503e7f836d077ae6663ec0687a13ba7810b4114b3668/rtree-1.4.1-py3-none-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/a3/1d/5f56cae1d6c40b8a318513599b35ea4b075d7dc1cd1d04449578c29d1d75/ruff-0.15.1-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/ef/df/df1457c4df3826e908879fe3d76bc5b6e60aae45f4ee42539512438cfd5d/scipy-1.17.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/b7/46/f5af3402b579fd5e11573ce652019a67074317e18c1935cc0b4ba9b35552/secretstorage-3.5.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/13/02/58b0b8d9c17c93ab6340edd8b7308c0c5a5b81f94ce65705819b7416dba5/shapely-2.1.2-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl - pypi: https://files.pythonhosted.org/packages/b7/ce/149a00dd41f10bc29e5921b496af8b574d8413afcd5e30dfa0ed46c2cc5e/six-1.17.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/04/be/d09147ad1ec7934636ad912901c5fd7667e1c858e19d355237db0d0cd5e4/smmap-5.0.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c8/78/3565d011c61f5a43488987ee32b6f3f656e7f107ac2782dd57bdd7d91d9a/snowballstemmer-3.0.1-py3-none-any.whl @@ -2668,24 +2356,26 @@ environments: - pypi: https://files.pythonhosted.org/packages/16/e1/3079a9ff9b8e11b846c6ac5c8b5bfb7ff225eee721825310c91b3b50304f/tqdm-4.67.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/3c/b9/da09903ea53b677a58ba770112de6fe8b2acb8b4cd9bffae4ff6cfe7c072/trimesh-4.11.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/3a/7a/882d99539b19b1490cac5d77c67338d126e4122c8276bf640e411650c830/twine-6.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d4/35/7541d1f046491fac8ce05d543d3f0de0af02086ad864dd3a23535ec703b9/typeguard-4.5.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/18/67/36e9267722cc04a6b9f15c7f3441c2363321a3ea07da7ae0c0707beb2a9c/typing_extensions-4.15.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/a7/f9/56b0cb8c5c287c7eec02735cce74a4c25cc56d6817bab7edde6f32b024a3/tyro-1.0.6-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/39/08/aaaad47bc4e9dc8c725e68f9d04865dbcb2052843ff09c97b08904852d84/urllib3-2.6.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/40/db/c5729ec39ed557ac673ca993abd71e5b18d71a92f95f1845152e639000ff/uv-0.10.3-py3-none-macosx_10_12_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/b7/2c/d49df6fec3294cef3c8c88c54784162bd8350c427fecd9b16335772b760f/vhacdx-0.0.10-cp311-cp311-macosx_10_9_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/42/4b/6cf85b485be7ec29db837ec2a1d8cd68bc1147b1abf23d8636c5bd65b3cc/virtualenv-20.37.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/f2/b3/4b9580d62e1245df52e8516cf3e404ff39cc72634d2d749d47b1dada4161/uv-0.10.4-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/a6/f1/464c761dbe24f58d6fc354bf51729342981fb7a621e170e0d3512fadbec8/vhacdx-0.0.10-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/6a/2a/dc2228b2888f51192c7dc766106cd475f1b768c10caaf9727659726f7391/virtualenv-20.36.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/b9/c4/819f000b3d64f654a054a8b24bf8d0c5e799636393135784d0886d8c808e/viser-1.0.21-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/76/70/ba1ad96b07869275ef42e2ce21f07a5b0148936688c2baf7e4a1f60d5058/websockets-15.0.1-cp311-cp311-macosx_10_9_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/93/1f/5d6dbf551766308f6f50f8baf8e9860be6182911e8106da7a7f73785f4c4/websockets-15.0.1-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl - pypi: https://files.pythonhosted.org/packages/87/22/b76d483683216dde3d67cba61fb2444be8d5be289bf628c13fc0fd90e5f9/wheel-0.46.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/17/d4/cc2f0400e9154df4b9964249da78ebd72f318e35ccc425e9f403c392f22a/xxhash-3.6.0-cp311-cp311-macosx_10_9_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/a5/86/cf2c0321dc3940a7aa73076f4fd677a0fb3e405cb297ead7d864fd90847e/xxhash-3.6.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/c8/60/4ea0d6df0b497d51bf2ef87eaab0eb26f8bc3b3313c012da5df3383cced9/yourdfpy-0.0.60-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/2e/54/647ade08bf0db230bfea292f893923872fd20be6ac6f53b2b936ba839d75/zipp-3.23.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/2a/83/c3ca27c363d104980f1c9cee1101cc8ba724ac8c28a033ede6aab89585b1/zstandard-0.25.0-cp311-cp311-macosx_10_9_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/bb/1f/e9cfd801a3f9190bf3e759c422bbfd2247db9d7f3d54a56ecde70137791a/zstandard-0.25.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl - pypi: ./ osx-arm64: - conda: https://conda.anaconda.org/conda-forge/osx-arm64/bzip2-1.0.8-hd037594_9.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/c-ares-1.34.6-hc919400_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.1.4-hbd8a1cb_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/cmake-4.2.3-h8cb302d_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/cmake-4.2.3-h8cb302d_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/eigen-3.4.0-h49c215f_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/icu-78.2-h38cb7af_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/krb5-1.22.2-h385eeb1_0.conda @@ -2704,8 +2394,8 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ncurses-6.5-h5e97a16_3.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/onnxruntime-cpp-1.19.2-hda9e549_0_cpu.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/openssl-3.6.1-hd24854e_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pybind11-3.0.1-pyh7a1b43c_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pybind11-global-3.0.1-pyhc7ab6ef_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pybind11-3.0.2-pyh7a1b43c_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pybind11-global-3.0.2-pyhc7ab6ef_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-3.11.14-h18782d2_3_cpython.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/readline-8.3-h46df422_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/rhash-1.4.6-h5505292_1.conda @@ -2731,6 +2421,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/f1/17/0cb7ca3de72e5f4ef2ec2fa0089beafbcaaaead1844e8b8a63d35173d77d/coverage-7.13.4-cp311-cp311-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/94/35/386550fd60316d1e37eccdda609b074113298f23cef5bddb2049823fe666/dacite-1.9.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/33/6b/e0547afaf41bf2c42e52430072fa5658766e3d65bd4b03a563d1b6336f57/distlib-0.4.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/55/e2/2537ebcff11c1ee1ff17d8d0b6f4db75873e3b0fb32c2d4a2ee31ecb310a/docstring_parser-0.17.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/02/10/5da547df7a391dcde17f59520a231527b8571e6f46fc8efb02ccb370ab12/docutils-0.22.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e6/86/9ce12fbbfc365b7037666ffbc79ac93ba05690b22cac8fad8d2104577dfe/dora_rs-0.4.1-cp37-abi3-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/38/82/78d57efaf364d4ae45c5e87c5c370b0999da92ecc72f9ba96949a93faa4f/dora_rs_cli-0.4.1-cp37-abi3-macosx_11_0_arm64.whl @@ -2744,6 +2435,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/6a/09/e21df6aef1e1ffc0c816f0522ddc3f6dcded766c3261813131c78a704470/gitpython-3.1.46-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/b6/a6/6ea2f73ad4474896d9e38b3ffbe6ffd5a802c738392269e99e8c6621a461/glfw-2.10.0-py2.py27.py3.py30.py31.py32.py33.py34.py35.py36.py37.py38.py39.py310.py311.py312.py313.py314-none-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/04/4b/29cac41a4d98d144bf5f6d33995617b185d14b22401f75ca86f384e87ff1/h11-0.16.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c1/b0/1c628e26a0b95858f54aba17e1599e7f6cd241727596cc2580b72cb0a9bf/h5py-3.15.1-cp311-cp311-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/7e/f5/f66802a942d491edb555dd61e3a9961140fd64c90bce1eafd741609d334d/httpcore-1.0.9-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/2a/39/e50c7c3a983047577ee07d2a9e53faf5a69493943ec3f6a384bdc792deb2/httpx-0.28.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c6/50/e0edd38dcd63fb26a8547f13d28f7a008bc4a3fd4eb4ff030673f22ad41a/hydra_core-1.3.2-py3-none-any.whl @@ -2772,7 +2464,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/09/ec/4b43dae793655b7d8a25f76119624350b4d65eb663459eb9603d7f1f0345/mistune-0.8.4-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a4/8e/469e5a4a2f5855992e425f3cb33804cc07bf18d48f2db061aec61ce50270/more_itertools-10.8.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/5a/15/3c225610da9f02505d37d69a77f4a2e7daae2a125f99d638df211ba84e59/msgspec-0.20.0-cp311-cp311-macosx_11_0_arm64.whl - - pypi: https://files.pythonhosted.org/packages/82/02/aa6057ac4c50fb36558208005d6da19518f9a7857ef9b5fd2ed8f9262fe2/mujoco-3.5.0-cp311-cp311-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/09/d4/99acbb782cc2c2ab5e5dacdf48b5d2850b641e34a91715d262d14103b764/mujoco-3.4.0-cp311-cp311-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/9e/c9/b2622292ea83fbb4ec318f5b9ab867d0a28ab43c5717bb85b0a5f6b3b0a4/networkx-3.6.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/13/3e/aef8cf8e0419b530c95e96ae93a5078e9b36c1e6613eeb1df03a80d5194e/nh3-0.3.3-cp38-abi3-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl - pypi: https://files.pythonhosted.org/packages/88/b2/d0896bdcdc8d28a7fc5717c305f1a861c26e18c05047949fb371034d98bd/nodeenv-1.10.0-py2.py3-none-any.whl @@ -2829,11 +2521,13 @@ environments: - pypi: https://files.pythonhosted.org/packages/16/e1/3079a9ff9b8e11b846c6ac5c8b5bfb7ff225eee721825310c91b3b50304f/tqdm-4.67.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/3c/b9/da09903ea53b677a58ba770112de6fe8b2acb8b4cd9bffae4ff6cfe7c072/trimesh-4.11.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/3a/7a/882d99539b19b1490cac5d77c67338d126e4122c8276bf640e411650c830/twine-6.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d4/35/7541d1f046491fac8ce05d543d3f0de0af02086ad864dd3a23535ec703b9/typeguard-4.5.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/18/67/36e9267722cc04a6b9f15c7f3441c2363321a3ea07da7ae0c0707beb2a9c/typing_extensions-4.15.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/a7/f9/56b0cb8c5c287c7eec02735cce74a4c25cc56d6817bab7edde6f32b024a3/tyro-1.0.6-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/39/08/aaaad47bc4e9dc8c725e68f9d04865dbcb2052843ff09c97b08904852d84/urllib3-2.6.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/0b/8c/cce26f6da9f69a9f0df032d642a4cb5603249f145c368e41b0154c463ca9/uv-0.10.3-py3-none-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/63/91/c4ddf7e55e05394967615050cc364a999157a44c008d0e1e9db2ed49a11c/uv-0.10.4-py3-none-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/68/1d/bd2456baa6b16977c106adc2386b6e7a34c3e57ade6aeeab68bb61ceb16f/vhacdx-0.0.10-cp311-cp311-macosx_11_0_arm64.whl - - pypi: https://files.pythonhosted.org/packages/42/4b/6cf85b485be7ec29db837ec2a1d8cd68bc1147b1abf23d8636c5bd65b3cc/virtualenv-20.37.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/6a/2a/dc2228b2888f51192c7dc766106cd475f1b768c10caaf9727659726f7391/virtualenv-20.36.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/b9/c4/819f000b3d64f654a054a8b24bf8d0c5e799636393135784d0886d8c808e/viser-1.0.21-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/86/f2/10b55821dd40eb696ce4704a87d57774696f9451108cff0d2824c97e0f97/websockets-15.0.1-cp311-cp311-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/87/22/b76d483683216dde3d67cba61fb2444be8d5be289bf628c13fc0fd90e5f9/wheel-0.46.3-py3-none-any.whl @@ -2845,7 +2539,7 @@ environments: win-64: - conda: https://conda.anaconda.org/conda-forge/win-64/bzip2-1.0.8-h0ad9c76_9.conda - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.1.4-h4c7d964_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/cmake-4.2.3-hdcbee5b_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/cmake-4.2.3-hdcbee5b_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/eigen-3.4.0-h477610d_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/krb5-1.22.2-h0ea6238_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libcurl-8.18.0-h8206538_1.conda @@ -2858,8 +2552,8 @@ environments: - conda: https://conda.anaconda.org/conda-forge/win-64/libzlib-1.3.1-h2466b09_2.conda - conda: https://conda.anaconda.org/conda-forge/win-64/onnxruntime-cpp-1.19.2-h50ebc8d_0_cpu.conda - conda: https://conda.anaconda.org/conda-forge/win-64/openssl-3.6.1-hf411b9b_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pybind11-3.0.1-pyh7a1b43c_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pybind11-global-3.0.1-pyh5e4992e_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pybind11-3.0.2-pyh7a1b43c_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pybind11-global-3.0.2-pyh5e4992e_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/python-3.11.14-h0159041_3_cpython.conda - conda: https://conda.anaconda.org/conda-forge/win-64/tk-8.6.13-h6ed50ae_3.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda @@ -2888,6 +2582,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/61/08/3d9c8613079d2b11c185b865de9a4c1a68850cfda2b357fae365cf609f29/coverage-7.13.4-cp311-cp311-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/94/35/386550fd60316d1e37eccdda609b074113298f23cef5bddb2049823fe666/dacite-1.9.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/33/6b/e0547afaf41bf2c42e52430072fa5658766e3d65bd4b03a563d1b6336f57/distlib-0.4.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/55/e2/2537ebcff11c1ee1ff17d8d0b6f4db75873e3b0fb32c2d4a2ee31ecb310a/docstring_parser-0.17.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/02/10/5da547df7a391dcde17f59520a231527b8571e6f46fc8efb02ccb370ab12/docutils-0.22.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/1c/d4/e8134ce7d977fd87f507b6951b53df3aa7ab91122e7d487707352336703b/dora_rs-0.4.1-cp37-abi3-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/93/a7/c53764b09b7a6e6a21d46df656513391d8429b729fdde26372d961938297/dora_rs_cli-0.4.1-cp37-abi3-win_amd64.whl @@ -2901,6 +2596,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/6a/09/e21df6aef1e1ffc0c816f0522ddc3f6dcded766c3261813131c78a704470/gitpython-3.1.46-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/bd/e1/6d6816b296a529ac9b897ad228b1e084eb1f92319e96371880eebdc874a6/glfw-2.10.0-py2.py27.py3.py30.py31.py32.py33.py34.py35.py36.py37.py38.py39.py310.py311.py312.py313.py314-none-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/04/4b/29cac41a4d98d144bf5f6d33995617b185d14b22401f75ca86f384e87ff1/h11-0.16.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/23/95/499b4e56452ef8b6c95a271af0dde08dac4ddb70515a75f346d4f400579b/h5py-3.15.1-cp311-cp311-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/7e/f5/f66802a942d491edb555dd61e3a9961140fd64c90bce1eafd741609d334d/httpcore-1.0.9-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/2a/39/e50c7c3a983047577ee07d2a9e53faf5a69493943ec3f6a384bdc792deb2/httpx-0.28.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c6/50/e0edd38dcd63fb26a8547f13d28f7a008bc4a3fd4eb4ff030673f22ad41a/hydra_core-1.3.2-py3-none-any.whl @@ -2929,7 +2625,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/09/ec/4b43dae793655b7d8a25f76119624350b4d65eb663459eb9603d7f1f0345/mistune-0.8.4-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a4/8e/469e5a4a2f5855992e425f3cb33804cc07bf18d48f2db061aec61ce50270/more_itertools-10.8.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/89/5e/406b7d578926b68790e390d83a1165a9bfc2d95612a1a9c1c4d5c72ea815/msgspec-0.20.0-cp311-cp311-win_amd64.whl - - pypi: https://files.pythonhosted.org/packages/b8/98/c1fac334cc764068e6c5d7eb01d6ed2a3392bab51952c816888b2dfe78c2/mujoco-3.5.0-cp311-cp311-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/04/0a/c1055f2329761c87edcdc18a480ab43ba942ed10f156888b4744d69c1deb/mujoco-3.4.0-cp311-cp311-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/9e/c9/b2622292ea83fbb4ec318f5b9ab867d0a28ab43c5717bb85b0a5f6b3b0a4/networkx-3.6.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/73/88/1ce287ef8649dc51365b5094bd3713b76454838140a32ab4f8349973883c/nh3-0.3.3-cp38-abi3-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/88/b2/d0896bdcdc8d28a7fc5717c305f1a861c26e18c05047949fb371034d98bd/nodeenv-1.10.0-py2.py3-none-any.whl @@ -2953,201 +2649,8 @@ environments: - pypi: https://files.pythonhosted.org/packages/ee/49/1377b49de7d0c1ce41292161ea0f721913fa8722c19fb9c1e3aa0367eecb/pytest_cov-7.0.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ca/31/d4e37e9e550c2b92a9cbc2e4d0b7420a27224968580b5a447f420847c975/pytest_xdist-3.8.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ec/57/56b9bcc3c9c6a792fcbaf139543cee77261f3651ca9da0c93f5c1221264b/python_dateutil-2.9.0.post0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/de/3d/8161f7711c017e01ac9f008dfddd9410dff3674334c233bde66e7ba65bbf/pywin32_ctypes-0.2.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/da/e3/ea007450a105ae919a72393cb06f122f288ef60bba2dc64b26e2646fa315/pyyaml-6.0.3-cp311-cp311-win_amd64.whl - - pypi: https://files.pythonhosted.org/packages/e1/67/921ec3024056483db83953ae8e48079ad62b92db7880013ca77632921dd0/readme_renderer-44.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/2c/58/ca301544e1fa93ed4f80d724bf5b194f6e4b945841c5bfd555878eea9fcb/referencing-0.37.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/1e/db/4254e3eabe8020b458f1a747140d32277ec7a271daf1d235b70dc0b4e6e3/requests-2.32.5-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/3f/51/d4db610ef29373b879047326cbf6fa98b6c1969d6f6dc423279de2b1be2c/requests_toolbelt-1.0.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/ff/9a/9afaade874b2fa6c752c36f1548f718b5b83af81ed9b76628329dab81c1b/rfc3986-2.0.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/ef/45/615f5babd880b4bd7d405cc0dc348234c5ffb6ed1ea33e152ede08b2072d/rich-14.3.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/16/80/579e75e0be0439d11e479732e4c194a9c6e6d152670dae561b9525015425/robot_descriptions-1.22.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/04/54/6f679c435d28e0a568d8e8a7c0a93a09010818634c3c3907fc98d8983770/roman_numerals-4.1.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/fa/5b/e7b7aa136f28462b344e652ee010d4de26ee9fd16f1bfd5811f5153ccf89/rpds_py-0.30.0-cp311-cp311-win_amd64.whl - - pypi: https://files.pythonhosted.org/packages/74/25/5282c8270bfcd620d3e73beb35b40ac4ab00f0a898d98ebeb41ef0989ec8/rtree-1.4.1-py3-none-win_amd64.whl - - pypi: https://files.pythonhosted.org/packages/e0/5e/d4ccc8a27ecdb78116feac4935dfc39d1304536f4296168f91ed3ec00cd2/ruff-0.15.1-py3-none-win_amd64.whl - - pypi: https://files.pythonhosted.org/packages/52/c8/08629657ac6c0da198487ce8cd3de78e02cfde42b7f34117d56a3fe249dc/scipy-1.17.0-cp311-cp311-win_amd64.whl - - pypi: https://files.pythonhosted.org/packages/38/1e/3f8ea46353c2a33c1669eb7327f9665103aa3a8dfe7f2e4ef714c210b2c2/shapely-2.1.2-cp311-cp311-win_amd64.whl - - pypi: https://files.pythonhosted.org/packages/b7/ce/149a00dd41f10bc29e5921b496af8b574d8413afcd5e30dfa0ed46c2cc5e/six-1.17.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/04/be/d09147ad1ec7934636ad912901c5fd7667e1c858e19d355237db0d0cd5e4/smmap-5.0.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/c8/78/3565d011c61f5a43488987ee32b6f3f656e7f107ac2782dd57bdd7d91d9a/snowballstemmer-3.0.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/46/2c/1462b1d0a634697ae9e55b3cecdcb64788e8b7d63f54d923fcd0bb140aed/soupsieve-2.8.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/c6/3f/4bbd76424c393caead2e1eb89777f575dee5c8653e2d4b6afd7a564f5974/sphinx-9.0.4-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/d8/11/9825443890d3ef6b6a0db938054e7c806e9911509e0315fe984d00a090c1/sphinx_autoapi-3.7.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/3c/dd/018ce05c532a22007ac58d4f45232514cd9d6dd0ee1dc374e309db830983/sphinx_basic_ng-1.0.0b2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/38/5e/49c1330add8c48ef52e50c82d7d847e32b7f786d5ddc1cafcd36ac63f1e3/sphinxcontrib_ansi_rai-0.7.0.dev20250623-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/5d/85/9ebeae2f76e9e77b952f4b274c27238156eae7979c5421fba91a28f4970d/sphinxcontrib_applehelp-2.0.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/35/7a/987e583882f985fe4d7323774889ec58049171828b58c2217e7f79cdf44e/sphinxcontrib_devhelp-2.0.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/0a/7b/18a8c0bcec9182c05a0b3ec2a776bba4ead82750a55ff798e8d406dae604/sphinxcontrib_htmlhelp-2.1.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/c2/42/4c8646762ee83602e3fb3fbe774c2fac12f317deb0b5dbeeedd2d3ba4b77/sphinxcontrib_jsmath-1.0.1-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/84/04/53406477f01fa5bdcb1344fac421c46b6dce112d980c58237825ddb262a2/sphinxcontrib_programoutput_rai-0.18.dev0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/27/83/859ecdd180cacc13b1f7e857abf8582a64552ea7a061057a6c716e790fce/sphinxcontrib_qthelp-2.0.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/52/a7/d2782e4e3f77c8450f727ba74a8f12756d5ba823d81b941f1b04da9d033a/sphinxcontrib_serializinghtml-2.0.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/3a/83/4f5b250220e1a5acd31345a5ec1c95a7769725d0d8135276f399f44062f8/svg_path-7.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/16/e1/3079a9ff9b8e11b846c6ac5c8b5bfb7ff225eee721825310c91b3b50304f/tqdm-4.67.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/3c/b9/da09903ea53b677a58ba770112de6fe8b2acb8b4cd9bffae4ff6cfe7c072/trimesh-4.11.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/3a/7a/882d99539b19b1490cac5d77c67338d126e4122c8276bf640e411650c830/twine-6.2.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/18/67/36e9267722cc04a6b9f15c7f3441c2363321a3ea07da7ae0c0707beb2a9c/typing_extensions-4.15.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/39/08/aaaad47bc4e9dc8c725e68f9d04865dbcb2052843ff09c97b08904852d84/urllib3-2.6.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/d5/95/89b9caeb4007d950dfa5fa5923c2ea67de541de0e3582598b7b9c7eeac53/uv-0.10.3-py3-none-win_amd64.whl - - pypi: https://files.pythonhosted.org/packages/de/c8/a8260b780e4578d7ef19b70343f9717f74ff48f9950138c96c78f209ec01/vhacdx-0.0.10-cp311-cp311-win_amd64.whl - - pypi: https://files.pythonhosted.org/packages/42/4b/6cf85b485be7ec29db837ec2a1d8cd68bc1147b1abf23d8636c5bd65b3cc/virtualenv-20.37.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/b9/c4/819f000b3d64f654a054a8b24bf8d0c5e799636393135784d0886d8c808e/viser-1.0.21-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/98/93/e36c73f78400a65f5e236cd376713c34182e6663f6889cd45a4a04d8f203/websockets-15.0.1-cp311-cp311-win_amd64.whl - - pypi: https://files.pythonhosted.org/packages/87/22/b76d483683216dde3d67cba61fb2444be8d5be289bf628c13fc0fd90e5f9/wheel-0.46.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/65/79/9d24d7f53819fe301b231044ea362ce64e86c74f6e8c8e51320de248b3e5/xxhash-3.6.0-cp311-cp311-win_amd64.whl - - pypi: https://files.pythonhosted.org/packages/c8/60/4ea0d6df0b497d51bf2ef87eaab0eb26f8bc3b3313c012da5df3383cced9/yourdfpy-0.0.60-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/2e/54/647ade08bf0db230bfea292f893923872fd20be6ac6f53b2b936ba839d75/zipp-3.23.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/43/a3/c6155f5c1cce691cb80dfd38627046e50af3ee9ddc5d0b45b9b063bfb8c9/zstandard-0.25.0-cp311-cp311-win_amd64.whl - - pypi: ./ - py312: - channels: - - url: https://conda.anaconda.org/conda-forge/ - indexes: - - https://pypi.org/simple - options: - pypi-prerelease-mode: if-necessary-or-explicit - packages: - linux-64: - - conda: https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-20_gnu.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/binutils_impl_linux-64-2.45.1-default_hfdba357_101.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/binutils_linux-64-2.45.1-default_h4852527_101.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-hda65f42_9.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/c-ares-1.34.6-hb03c661_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.1.4-hbd8a1cb_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/cmake-4.2.3-hc85cc9f_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/eigen-3.4.0-h171cf75_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/gcc_impl_linux-64-13.4.0-hf2caf72_17.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/gcc_linux-64-13.4.0-h0a5b801_21.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/gxx_impl_linux-64-13.4.0-h6a38259_17.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/gxx_linux-64-13.4.0-h587059e_21.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/icu-78.2-h33c6efd_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/kernel-headers_linux-64-4.18.0-he073ed8_9.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/keyutils-1.6.3-hb9d3cd8_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/krb5-1.22.2-ha1258a1_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.45.1-default_hbd61a6d_101.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libcurl-8.18.0-hcf29cc6_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libedit-3.1.20250104-pl5321h7949ede_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libev-4.33-hd590300_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.7.4-hecca717_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libffi-3.5.2-h3435931_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-15.2.0-he0feb66_17.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/libgcc-devel_linux-64-13.4.0-hd1d28cc_117.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-15.2.0-h69a702a_17.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-15.2.0-he0feb66_17.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/liblzma-5.8.2-hb03c661_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libnghttp2-1.67.0-had1ee68_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libnsl-2.0.1-hb9d3cd8_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libsanitizer-13.4.0-h2a15e64_17.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.51.2-hf4e2dac_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libssh2-1.11.1-hcf80075_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-15.2.0-h934c35e_17.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/libstdcxx-devel_linux-64-13.4.0-h6963c3b_117.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-15.2.0-hdf11a46_17.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.41.3-h5347b49_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libuv-1.51.0-hb03c661_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libxcrypt-4.4.36-hd590300_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.1-hb9d3cd8_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.5-h2d0b736_3.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/onnxruntime-cpp-1.19.2-h641f3bf_0_cpu.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.6.1-h35e630c_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/patchelf-0.17.2-h58526e2_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pybind11-3.0.1-pyh7a1b43c_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pybind11-global-3.0.1-pyhc7ab6ef_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.12.12-hd63d673_2_cpython.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/readline-8.3-h853b02a_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/rhash-1.4.6-hb9d3cd8_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/sysroot_linux-64-2.28-h4ee821c_9.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_h366c992_103.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.7-hb78ec9c_6.conda - - pypi: https://files.pythonhosted.org/packages/18/a6/907a406bb7d359e6a63f99c313846d9eec4f7e6f7437809e03aa00fa3074/absl_py-2.4.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/8d/3f/95338030883d8c8b91223b4e21744b04d11b161a3ef117295d8241f50ab4/accessible_pygments-0.0.5-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/7e/b3/6b4067be973ae96ba0d615946e314c5ae35f9f993eca561b356540bb0c2b/alabaster-1.0.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/3e/38/7859ff46355f76f8d19459005ca000b6e7012f2f1ca597746cbcd1fbfe5e/antlr4-python3-runtime-4.9.3.tar.gz - - pypi: https://files.pythonhosted.org/packages/38/0e/27be9fdef66e72d64c0cdc3cc2823101b80585f8119b5c112c2e8f5f7dab/anyio-4.12.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/3f/38/b2becedff0bef4af9ff474b82e2dcaefca608b6d24753d0b460c94003d91/astroid-4.1.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/3a/2a/7cc015f5b9f5db42b7d48157e23356022889fc354a2813c15934b7cb5c0e/attrs-25.4.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/b0/c2/bb8ba1cec816fa356e19da83c59bfd4ac34dba1ae41eb7622c18f4b1d48d/auditwheel-6.6.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/77/f5/21d2de20e8b8b0408f0681956ca2c69f1320a3848ac50e6e7f39c6159675/babel-2.18.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/1a/39/47f9197bdd44df24d67ac8893641e16f386c984a0619ef2ee4c51fbbc019/beautifulsoup4-4.14.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/c5/0d/84a4380f930db0010168e0aa7b7a8fed9ba1835a8fbb1472bc6d0201d529/build-1.4.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/e6/ad/3cc14f097111b4de0040c83a525973216457bbeeb63739ef1ed275c1c021/certifi-2026.1.4-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/78/2d/7fa73dfa841b5ac06c7b8855cfc18622132e365f5b81d02230333ff26e9e/cffi-2.0.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/db/3c/33bac158f8ab7f89b2e59426d5fe2e4f63f7ed25df84c036890172b412b5/cfgv-3.5.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/c0/10/d20b513afe03acc89ec33948320a5544d31f21b05368436d580dec4e234d/charset_normalizer-3.4.4-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/6d/c1/e419ef3723a074172b68aaa89c9f3de486ed4c2399e2dbd8113a4fdcaf9e/colorlog-6.10.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/5d/a0/2ea570925524ef4e00bb6c82649f5682a77fac5ab910a65c9284de422600/coverage-7.13.4-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/6b/e7/237155ae19a9023de7e30ec64e5d99a9431a567407ac21170a046d22a5a3/cryptography-46.0.5-cp311-abi3-manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/94/35/386550fd60316d1e37eccdda609b074113298f23cef5bddb2049823fe666/dacite-1.9.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/33/6b/e0547afaf41bf2c42e52430072fa5658766e3d65bd4b03a563d1b6336f57/distlib-0.4.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/02/10/5da547df7a391dcde17f59520a231527b8571e6f46fc8efb02ccb370ab12/docutils-0.22.4-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/94/53/7dc142faa1719333d57c78cfcf419f2b176770b49ebef54e0bbfa34212ac/dora_rs-0.4.1-cp37-abi3-manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/3c/3e/f3d1e28df9457089055dacf3ca7ca3751ed274d312d9a8515255d80011ec/dora_rs_cli-0.4.1-cp37-abi3-manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/78/62/0ffc083b1d5f7c95eb03b260d2622dfacb70d1153011d216260b71c8e7d9/dora_utils-0.1.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/75/c9/8f7ee075d31f51c9e2c50a1a380cf4cbb5c1d56c55a3d26dc098cf9bef5a/embreex-2.17.7.post7-cp312-cp312-manylinux2010_x86_64.manylinux_2_12_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/e7/98/87b5946356095738cb90a6df7b35ff69ac5750f6e783d5fbcc5cb3b6cbd7/etils-1.13.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/ab/84/02fc1827e8cdded4aa65baef11296a9bbe595c474f0d6d758af082d849fd/execnet-2.1.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/e7/04/a94ebfb4eaaa08db56725a40de2887e95de4e8641b9e902c311bfa00aa39/filelock-3.24.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/e6/ab/fb21f4c939bb440104cc2b396d3be1d9b7a9fd3c6c2a53d98c45b3d7c954/fsspec-2026.2.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/f4/b2/50e9b292b5cac13e9e81272c7171301abc753a60460d21505b606e15cf21/furo-2025.12.19-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/a0/61/5c78b91c3143ed5c14207f463aecfc8f9dbb5092fb2869baf37c273b2705/gitdb-4.0.12-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/6a/09/e21df6aef1e1ffc0c816f0522ddc3f6dcded766c3261813131c78a704470/gitpython-3.1.46-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/5a/3f/efeb7c6801c46e11bd666a5180f0d615f74f72264212f74f39586c6fda9d/glfw-2.10.0-py2.py27.py3.py30.py31.py32.py33.py34.py35.py36.py37.py38.py39.py310.py311.py312.py313.py314-none-manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/04/4b/29cac41a4d98d144bf5f6d33995617b185d14b22401f75ca86f384e87ff1/h11-0.16.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/7e/f5/f66802a942d491edb555dd61e3a9961140fd64c90bce1eafd741609d334d/httpcore-1.0.9-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/2a/39/e50c7c3a983047577ee07d2a9e53faf5a69493943ec3f6a384bdc792deb2/httpx-0.28.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/c6/50/e0edd38dcd63fb26a8547f13d28f7a008bc4a3fd4eb4ff030673f22ad41a/hydra_core-1.3.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/42/77/de194443bf38daed9452139e960c632b0ef9f9a5dd9ce605fdf18ca9f1b1/id-1.6.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/b8/58/40fbbcefeda82364720eba5cf2270f98496bdfa19ea75b4cccae79c698e6/identify-2.6.16-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/0e/61/66938bbb5fc52dbdf84594873d5b51fb1f7c7794e9c0f5bd885f30bc507b/idna-3.11-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/fb/fe/301e0936b79bcab4cacc7548bf2853fc28dced0a578bab1f7ef53c9aa75b/imageio-2.37.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/ff/62/85c4c919272577931d407be5ba5d71c20f0b616d31a0befe0ae45bb79abd/imagesize-1.4.1-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/a4/ed/1f1afb2e9e7f38a545d628f864d562a5ae64fe6f7a10e28ffb9b185b4e89/importlib_resources-6.5.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/cb/b1/3846dd7f199d53cb17f49cba7e651e9ce294d8497c8c150530ed11865bb8/iniconfig-2.3.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/7f/66/b15ce62552d84bbfcec9a4873ab79d993a1dd4edb922cbfccae192bd5b5f/jaraco.classes-3.4.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/8d/48/aa685dbf1024c7bd82bede569e3a85f82c32fd3d79ba5fea578f0159571a/jaraco_context-6.1.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/fd/c4/813bb09f0985cb21e959f21f2464169eca882656849adf727ac7bb7e1767/jaraco_functools-4.4.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/b2/a3/e137168c9c44d18eff0376253da9f1e9234d0239e0ee230d2fee6cea8e55/jeepney-0.9.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/62/a1/3d680cbfd5f4b8f15abc1d571870c5fc3e594bb582bc3b64ea099db13e56/jinja2-3.1.6-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/69/90/f63fb5873511e014207a475e2bb4e8b2e570d655b00ac19a9a0ca0a385ee/jsonschema-4.26.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/41/45/1a4ed80516f02155c51f51e8cedb3c1902296743db0bbc66608a0db2814f/jsonschema_specifications-2025.9.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/81/db/e655086b7f3a705df045bf0933bdd9c2f79bb3c97bfef1384598bb79a217/keyring-25.7.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/c6/d1/232b3309a02d60f11e71857778bfcd4acbdb86c07db8260caf7d008b08f8/lxml-6.0.2-cp312-cp312-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/a9/50/5b1d70de548fb1e11e15ea9ebec0480365462d202f98b66ad7e154284327/m2r2-0.3.4-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/0a/56/8c6b01ec02306cc9e896920d0fa444e753c1f1584280883b9a15eae331b4/manifold3d-3.3.2-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/1a/f7/5cdd3752526e91d91336c7263af7767b291d21e63c89d7190a60051f0f87/mapbox_earcut-2.0.0-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/94/54/e7d793b573f298e1c9013b8c4dade17d481164aa517d1d7148619c2cedbf/markdown_it_py-4.0.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/3c/2e/8d0c2ab90a8c1d9a24f0399058ab8519a3279d1bd4289511d74e909f060e/markupsafe-3.0.3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/09/ec/4b43dae793655b7d8a25f76119624350b4d65eb663459eb9603d7f1f0345/mistune-0.8.4-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/a4/8e/469e5a4a2f5855992e425f3cb33804cc07bf18d48f2db061aec61ce50270/more_itertools-10.8.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/5c/a2/488517a43ccf5a4b6b6eca6dd4ede0bd82b043d1539dd6bb908a19f8efd3/msgspec-0.20.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/c8/8a/229e4db3692be55532e155e2ca6a1363752243ee79df0e7e22ba00f716cf/mujoco-3.5.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/9e/c9/b2622292ea83fbb4ec318f5b9ab867d0a28ab43c5717bb85b0a5f6b3b0a4/networkx-3.6.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/6f/84/c0dc75c7fb596135f999e59a410d9f45bdabb989f1cb911f0016d22b747b/nh3-0.3.3-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/88/b2/d0896bdcdc8d28a7fc5717c305f1a861c26e18c05047949fb371034d98bd/nodeenv-1.10.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/f5/c6/a18e59f3f0b8071cc85cbc8d80cd02d68aa9710170b2553a117203d46936/numpy-2.4.2-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/e3/94/1843518e420fa3ed6919835845df698c7e27e183cb997394e4a670973a65/omegaconf-2.3.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/b7/b9/c538f279a4e237a006a2c98387d081e9eb060d203d8ed34467cc0f0b9b53/packaging-26.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/ff/79/6df7b2ee763d619cda2fb4fea498e5f79d984dae304d45a8999b80d6cf5c/pillow-12.1.1-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/48/31/05e764397056194206169869b50cf2fee4dbbbc71b344705b9c0d878d4d8/platformdirs-4.9.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/54/20/4d324d65cc6d9205fabedc306948156824eb9f0ee1633355a8f7ec5c66bf/pluggy-1.6.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/5d/19/fd3ef348460c80af7bb4669ea7926651d1f95c23ff2df18b9d24bab4f3fa/pre_commit-4.5.1-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/2c/a5/da83046273d990f256cb79796a190bbf7ec999269705ddc609403f8c6b06/pyarrow-23.0.1-cp312-cp312-manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/4f/e4/4f2d41881fae547f06ffa4c9748fa8ed13c4db5c830ff268b84175546b3c/pybind11_stubgen-2.5.5-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/07/86/f1f61b7a0701f9d1299e5293d083318019f91021a4d449f94d59dbe024e4/pycollada-0.9.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/0c/c3/44f3fbbfa403ea2a7c779186dc20772604442dde72947e7d01069cbe98e3/pycparser-3.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/af/43/700932c4f0638c3421177144a2e86448c0d75dbaee2c7936bda3f9fd0878/pyelftools-0.32-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/c7/21/705964c7812476f378728bdf590ca4b771ec72385c533964653c68e86bdc/pygments-2.19.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/de/e4/1ba6f44e491c4eece978685230dde56b14d51a0365bc1b774ddaa94d14cd/pyopengl-3.1.10-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/bd/24/12818598c362d7f300f18e74db45963dbcb85150324092410c8b49405e42/pyproject_hooks-1.2.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/0c/82/a2c93e32800940d9573fb28c346772a14778b84ba7524e691b324620ab89/pyright-1.1.408-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/3b/ab/b3226f0bd7cdcf710fbede2b3548584366da3b19b5021e74f5bde2a8fa3f/pytest-9.0.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/ee/49/1377b49de7d0c1ce41292161ea0f721913fa8722c19fb9c1e3aa0367eecb/pytest_cov-7.0.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/ca/31/d4e37e9e550c2b92a9cbc2e4d0b7420a27224968580b5a447f420847c975/pytest_xdist-3.8.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/ec/57/56b9bcc3c9c6a792fcbaf139543cee77261f3651ca9da0c93f5c1221264b/python_dateutil-2.9.0.post0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/8b/9d/b3589d3877982d4f2329302ef98a8026e7f4443c765c46cfecc8858c6b4b/pyyaml-6.0.3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/de/3d/8161f7711c017e01ac9f008dfddd9410dff3674334c233bde66e7ba65bbf/pywin32_ctypes-0.2.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/da/e3/ea007450a105ae919a72393cb06f122f288ef60bba2dc64b26e2646fa315/pyyaml-6.0.3-cp311-cp311-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/e1/67/921ec3024056483db83953ae8e48079ad62b92db7880013ca77632921dd0/readme_renderer-44.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/2c/58/ca301544e1fa93ed4f80d724bf5b194f6e4b945841c5bfd555878eea9fcb/referencing-0.37.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/1e/db/4254e3eabe8020b458f1a747140d32277ec7a271daf1d235b70dc0b4e6e3/requests-2.32.5-py3-none-any.whl @@ -3156,17 +2659,16 @@ environments: - pypi: https://files.pythonhosted.org/packages/ef/45/615f5babd880b4bd7d405cc0dc348234c5ffb6ed1ea33e152ede08b2072d/rich-14.3.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/16/80/579e75e0be0439d11e479732e4c194a9c6e6d152670dae561b9525015425/robot_descriptions-1.22.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/04/54/6f679c435d28e0a568d8e8a7c0a93a09010818634c3c3907fc98d8983770/roman_numerals-4.1.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/60/1b/6f8f29f3f995c7ffdde46a626ddccd7c63aefc0efae881dc13b6e5d5bb16/rpds_py-0.30.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/d1/75/e5d44be90525cd28503e7f836d077ae6663ec0687a13ba7810b4114b3668/rtree-1.4.1-py3-none-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/a3/1d/5f56cae1d6c40b8a318513599b35ea4b075d7dc1cd1d04449578c29d1d75/ruff-0.15.1-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/d1/fe/66d73b76d378ba8cc2fe605920c0c75092e3a65ae746e1e767d9d020a75a/scipy-1.17.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/b7/46/f5af3402b579fd5e11573ce652019a67074317e18c1935cc0b4ba9b35552/secretstorage-3.5.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/b9/37/e781683abac55dde9771e086b790e554811a71ed0b2b8a1e789b7430dd44/shapely-2.1.2-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/fa/5b/e7b7aa136f28462b344e652ee010d4de26ee9fd16f1bfd5811f5153ccf89/rpds_py-0.30.0-cp311-cp311-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/74/25/5282c8270bfcd620d3e73beb35b40ac4ab00f0a898d98ebeb41ef0989ec8/rtree-1.4.1-py3-none-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/e0/5e/d4ccc8a27ecdb78116feac4935dfc39d1304536f4296168f91ed3ec00cd2/ruff-0.15.1-py3-none-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/52/c8/08629657ac6c0da198487ce8cd3de78e02cfde42b7f34117d56a3fe249dc/scipy-1.17.0-cp311-cp311-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/38/1e/3f8ea46353c2a33c1669eb7327f9665103aa3a8dfe7f2e4ef714c210b2c2/shapely-2.1.2-cp311-cp311-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/b7/ce/149a00dd41f10bc29e5921b496af8b574d8413afcd5e30dfa0ed46c2cc5e/six-1.17.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/04/be/d09147ad1ec7934636ad912901c5fd7667e1c858e19d355237db0d0cd5e4/smmap-5.0.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c8/78/3565d011c61f5a43488987ee32b6f3f656e7f107ac2782dd57bdd7d91d9a/snowballstemmer-3.0.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/46/2c/1462b1d0a634697ae9e55b3cecdcb64788e8b7d63f54d923fcd0bb140aed/soupsieve-2.8.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/73/f7/b1884cb3188ab181fc81fa00c266699dab600f927a964df02ec3d5d1916a/sphinx-9.1.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c6/3f/4bbd76424c393caead2e1eb89777f575dee5c8653e2d4b6afd7a564f5974/sphinx-9.0.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d8/11/9825443890d3ef6b6a0db938054e7c806e9911509e0315fe984d00a090c1/sphinx_autoapi-3.7.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/3c/dd/018ce05c532a22007ac58d4f45232514cd9d6dd0ee1dc374e309db830983/sphinx_basic_ng-1.0.0b2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/38/5e/49c1330add8c48ef52e50c82d7d847e32b7f786d5ddc1cafcd36ac63f1e3/sphinxcontrib_ansi_rai-0.7.0.dev20250623-py3-none-any.whl @@ -3181,49 +2683,82 @@ environments: - pypi: https://files.pythonhosted.org/packages/16/e1/3079a9ff9b8e11b846c6ac5c8b5bfb7ff225eee721825310c91b3b50304f/tqdm-4.67.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/3c/b9/da09903ea53b677a58ba770112de6fe8b2acb8b4cd9bffae4ff6cfe7c072/trimesh-4.11.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/3a/7a/882d99539b19b1490cac5d77c67338d126e4122c8276bf640e411650c830/twine-6.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d4/35/7541d1f046491fac8ce05d543d3f0de0af02086ad864dd3a23535ec703b9/typeguard-4.5.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/18/67/36e9267722cc04a6b9f15c7f3441c2363321a3ea07da7ae0c0707beb2a9c/typing_extensions-4.15.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/a7/f9/56b0cb8c5c287c7eec02735cce74a4c25cc56d6817bab7edde6f32b024a3/tyro-1.0.6-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/39/08/aaaad47bc4e9dc8c725e68f9d04865dbcb2052843ff09c97b08904852d84/urllib3-2.6.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/ce/de/0638d8aa83c2038c5f820151006b3bf372d109afbfdb2a8fc59187cc3690/uv-0.10.3-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/94/98/d2a6aeb1c6570a1fc1be29ee03db795f643ab03c6df7635522f23796b39d/vhacdx-0.0.10-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/42/4b/6cf85b485be7ec29db837ec2a1d8cd68bc1147b1abf23d8636c5bd65b3cc/virtualenv-20.37.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/31/dd/1900452678d46f6a649ab8167bededb02500b0561fc9f69e1f52607895c7/uv-0.10.4-py3-none-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/de/c8/a8260b780e4578d7ef19b70343f9717f74ff48f9950138c96c78f209ec01/vhacdx-0.0.10-cp311-cp311-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/6a/2a/dc2228b2888f51192c7dc766106cd475f1b768c10caaf9727659726f7391/virtualenv-20.36.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/b9/c4/819f000b3d64f654a054a8b24bf8d0c5e799636393135784d0886d8c808e/viser-1.0.21-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/14/8f/aa61f528fba38578ec553c145857a181384c72b98156f858ca5c8e82d9d3/websockets-15.0.1-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/98/93/e36c73f78400a65f5e236cd376713c34182e6663f6889cd45a4a04d8f203/websockets-15.0.1-cp311-cp311-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/87/22/b76d483683216dde3d67cba61fb2444be8d5be289bf628c13fc0fd90e5f9/wheel-0.46.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/11/4f/426f91b96701ec2f37bb2b8cec664eff4f658a11f3fa9d94f0a887ea6d2b/xxhash-3.6.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/65/79/9d24d7f53819fe301b231044ea362ce64e86c74f6e8c8e51320de248b3e5/xxhash-3.6.0-cp311-cp311-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/c8/60/4ea0d6df0b497d51bf2ef87eaab0eb26f8bc3b3313c012da5df3383cced9/yourdfpy-0.0.60-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/2e/54/647ade08bf0db230bfea292f893923872fd20be6ac6f53b2b936ba839d75/zipp-3.23.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/53/60/7be26e610767316c028a2cbedb9a3beabdbe33e2182c373f71a1c0b88f36/zstandard-0.25.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/43/a3/c6155f5c1cce691cb80dfd38627046e50af3ee9ddc5d0b45b9b063bfb8c9/zstandard-0.25.0-cp311-cp311-win_amd64.whl - pypi: ./ - osx-64: - - conda: https://conda.anaconda.org/conda-forge/osx-64/bzip2-1.0.8-h500dc9f_9.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/c-ares-1.34.6-hb5e19a0_0.conda + py312: + channels: + - url: https://conda.anaconda.org/conda-forge/ + indexes: + - https://pypi.org/simple + options: + pypi-prerelease-mode: if-necessary-or-explicit + packages: + linux-64: + - conda: https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-20_gnu.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/binutils_impl_linux-64-2.45.1-default_hfdba357_101.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/binutils_linux-64-2.45.1-default_h4852527_101.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-hda65f42_9.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/c-ares-1.34.6-hb03c661_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.1.4-hbd8a1cb_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/cmake-4.2.3-h965d0ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/eigen-3.4.0-hfc0b2d5_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/krb5-1.22.2-h207b36a_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/libcurl-8.18.0-h9a2545f_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/libcxx-21.1.8-h4fb565c_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/libedit-3.1.20250104-pl5321ha958ccf_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/libev-4.33-h10d778d_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/libexpat-2.7.4-h991f03e_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/libffi-3.5.2-hd1f9c09_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/liblzma-5.8.2-h11316ed_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/libnghttp2-1.67.0-h3338091_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/libsqlite-3.51.2-hb99441e_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/libssh2-1.11.1-hed3591d_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/libuv-1.51.0-h58003a5_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/libzlib-1.3.1-hd23fc13_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/ncurses-6.5-h0622a9a_3.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/onnxruntime-cpp-1.19.2-h417c6ca_0_cpu.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/openssl-3.6.1-hb6871ef_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pybind11-3.0.1-pyh7a1b43c_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pybind11-global-3.0.1-pyhc7ab6ef_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/python-3.12.12-h74c2667_2_cpython.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/readline-8.3-h68b038d_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/rhash-1.4.6-h6e16a3a_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/tk-8.6.13-h7142dee_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/cmake-4.2.3-hc85cc9f_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/eigen-3.4.0-h171cf75_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/gcc_impl_linux-64-13.4.0-he2fa53e_18.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/gcc_linux-64-13.4.0-h0a5b801_21.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/gxx_impl_linux-64-13.4.0-h6a38259_18.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/gxx_linux-64-13.4.0-h587059e_21.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/icu-78.2-h33c6efd_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/kernel-headers_linux-64-4.18.0-he073ed8_9.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/keyutils-1.6.3-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/krb5-1.22.2-ha1258a1_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.45.1-default_hbd61a6d_101.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libcurl-8.18.0-hcf29cc6_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libedit-3.1.20250104-pl5321h7949ede_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libev-4.33-hd590300_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.7.4-hecca717_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libffi-3.5.2-h3435931_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-15.2.0-he0feb66_18.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/libgcc-devel_linux-64-13.4.0-hd1d28cc_118.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-15.2.0-h69a702a_18.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-15.2.0-he0feb66_18.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/liblzma-5.8.2-hb03c661_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libnghttp2-1.67.0-had1ee68_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libnsl-2.0.1-hb9d3cd8_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libsanitizer-13.4.0-h2a15e64_18.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.51.2-hf4e2dac_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libssh2-1.11.1-hcf80075_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-15.2.0-h934c35e_18.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/libstdcxx-devel_linux-64-13.4.0-h6963c3b_118.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-15.2.0-hdf11a46_18.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.41.3-h5347b49_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libuv-1.51.0-hb03c661_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libxcrypt-4.4.36-hd590300_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.1-hb9d3cd8_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.5-h2d0b736_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/onnxruntime-cpp-1.19.2-h641f3bf_0_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.6.1-h35e630c_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/patchelf-0.17.2-h58526e2_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pybind11-3.0.2-pyh7a1b43c_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pybind11-global-3.0.2-pyhc7ab6ef_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.12.12-hd63d673_2_cpython.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/readline-8.3-h853b02a_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/rhash-1.4.6-hb9d3cd8_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/sysroot_linux-64-2.28-h4ee821c_9.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_h366c992_103.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/zstd-1.5.7-h3eecb57_6.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.7-hb78ec9c_6.conda - pypi: https://files.pythonhosted.org/packages/18/a6/907a406bb7d359e6a63f99c313846d9eec4f7e6f7437809e03aa00fa3074/absl_py-2.4.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/8d/3f/95338030883d8c8b91223b4e21744b04d11b161a3ef117295d8241f50ab4/accessible_pygments-0.0.5-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/7e/b3/6b4067be973ae96ba0d615946e314c5ae35f9f993eca561b356540bb0c2b/alabaster-1.0.0-py3-none-any.whl @@ -3236,17 +2771,20 @@ environments: - pypi: https://files.pythonhosted.org/packages/1a/39/47f9197bdd44df24d67ac8893641e16f386c984a0619ef2ee4c51fbbc019/beautifulsoup4-4.14.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c5/0d/84a4380f930db0010168e0aa7b7a8fed9ba1835a8fbb1472bc6d0201d529/build-1.4.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e6/ad/3cc14f097111b4de0040c83a525973216457bbeeb63739ef1ed275c1c021/certifi-2026.1.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/78/2d/7fa73dfa841b5ac06c7b8855cfc18622132e365f5b81d02230333ff26e9e/cffi-2.0.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl - pypi: https://files.pythonhosted.org/packages/db/3c/33bac158f8ab7f89b2e59426d5fe2e4f63f7ed25df84c036890172b412b5/cfgv-3.5.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/f3/85/1637cd4af66fa687396e757dec650f28025f2a2f5a5531a3208dc0ec43f2/charset_normalizer-3.4.4-cp312-cp312-macosx_10_13_universal2.whl + - pypi: https://files.pythonhosted.org/packages/c0/10/d20b513afe03acc89ec33948320a5544d31f21b05368436d580dec4e234d/charset_normalizer-3.4.4-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/6d/c1/e419ef3723a074172b68aaa89c9f3de486ed4c2399e2dbd8113a4fdcaf9e/colorlog-6.10.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/d1/81/4ce2fdd909c5a0ed1f6dedb88aa57ab79b6d1fbd9b588c1ac7ef45659566/coverage-7.13.4-cp312-cp312-macosx_10_13_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/5d/a0/2ea570925524ef4e00bb6c82649f5682a77fac5ab910a65c9284de422600/coverage-7.13.4-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/6b/e7/237155ae19a9023de7e30ec64e5d99a9431a567407ac21170a046d22a5a3/cryptography-46.0.5-cp311-abi3-manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/94/35/386550fd60316d1e37eccdda609b074113298f23cef5bddb2049823fe666/dacite-1.9.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/33/6b/e0547afaf41bf2c42e52430072fa5658766e3d65bd4b03a563d1b6336f57/distlib-0.4.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/55/e2/2537ebcff11c1ee1ff17d8d0b6f4db75873e3b0fb32c2d4a2ee31ecb310a/docstring_parser-0.17.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/02/10/5da547df7a391dcde17f59520a231527b8571e6f46fc8efb02ccb370ab12/docutils-0.22.4-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/a1/ff/894f11890a526f107d3d06b0e71209b45e5a7bb3666aed23725308bbf78a/dora_rs-0.4.1.tar.gz - - pypi: https://files.pythonhosted.org/packages/f0/45/77300cbdb4137a66eedf8e2488decffbe33e1d33ec912e54fdd02f2f3084/dora_rs_cli-0.4.1.tar.gz + - pypi: https://files.pythonhosted.org/packages/94/53/7dc142faa1719333d57c78cfcf419f2b176770b49ebef54e0bbfa34212ac/dora_rs-0.4.1-cp37-abi3-manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/3c/3e/f3d1e28df9457089055dacf3ca7ca3751ed274d312d9a8515255d80011ec/dora_rs_cli-0.4.1-cp37-abi3-manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/78/62/0ffc083b1d5f7c95eb03b260d2622dfacb70d1153011d216260b71c8e7d9/dora_utils-0.1.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/a7/01/ed299e72f62731be03c383ee4e13191d28afd7e73a8a30012e5b12c61916/embreex-2.17.7.post7-cp312-cp312-macosx_10_13_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/75/c9/8f7ee075d31f51c9e2c50a1a380cf4cbb5c1d56c55a3d26dc098cf9bef5a/embreex-2.17.7.post7-cp312-cp312-manylinux2010_x86_64.manylinux_2_12_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/e7/98/87b5946356095738cb90a6df7b35ff69ac5750f6e783d5fbcc5cb3b6cbd7/etils-1.13.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ab/84/02fc1827e8cdded4aa65baef11296a9bbe595c474f0d6d758af082d849fd/execnet-2.1.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e7/04/a94ebfb4eaaa08db56725a40de2887e95de4e8641b9e902c311bfa00aa39/filelock-3.24.2-py3-none-any.whl @@ -3254,8 +2792,9 @@ environments: - pypi: https://files.pythonhosted.org/packages/f4/b2/50e9b292b5cac13e9e81272c7171301abc753a60460d21505b606e15cf21/furo-2025.12.19-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a0/61/5c78b91c3143ed5c14207f463aecfc8f9dbb5092fb2869baf37c273b2705/gitdb-4.0.12-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/6a/09/e21df6aef1e1ffc0c816f0522ddc3f6dcded766c3261813131c78a704470/gitpython-3.1.46-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/b3/87/de0b33f6f00687499ca1371f22aa73396341b85bf88f1a284f9da8842493/glfw-2.10.0-py2.py27.py3.py30.py31.py32.py33.py34.py35.py36.py37.py38.py39.py310.py311.py312.py313.py314-none-macosx_10_6_intel.whl + - pypi: https://files.pythonhosted.org/packages/5a/3f/efeb7c6801c46e11bd666a5180f0d615f74f72264212f74f39586c6fda9d/glfw-2.10.0-py2.py27.py3.py30.py31.py32.py33.py34.py35.py36.py37.py38.py39.py310.py311.py312.py313.py314-none-manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/04/4b/29cac41a4d98d144bf5f6d33995617b185d14b22401f75ca86f384e87ff1/h11-0.16.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/3a/30/d1c94066343a98bb2cea40120873193a4fed68c4ad7f8935c11caf74c681/h5py-3.15.1-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/7e/f5/f66802a942d491edb555dd61e3a9961140fd64c90bce1eafd741609d334d/httpcore-1.0.9-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/2a/39/e50c7c3a983047577ee07d2a9e53faf5a69493943ec3f6a384bdc792deb2/httpx-0.28.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c6/50/e0edd38dcd63fb26a8547f13d28f7a008bc4a3fd4eb4ff030673f22ad41a/hydra_core-1.3.2-py3-none-any.whl @@ -3269,32 +2808,33 @@ environments: - pypi: https://files.pythonhosted.org/packages/7f/66/b15ce62552d84bbfcec9a4873ab79d993a1dd4edb922cbfccae192bd5b5f/jaraco.classes-3.4.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/8d/48/aa685dbf1024c7bd82bede569e3a85f82c32fd3d79ba5fea578f0159571a/jaraco_context-6.1.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/fd/c4/813bb09f0985cb21e959f21f2464169eca882656849adf727ac7bb7e1767/jaraco_functools-4.4.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b2/a3/e137168c9c44d18eff0376253da9f1e9234d0239e0ee230d2fee6cea8e55/jeepney-0.9.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/62/a1/3d680cbfd5f4b8f15abc1d571870c5fc3e594bb582bc3b64ea099db13e56/jinja2-3.1.6-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/69/90/f63fb5873511e014207a475e2bb4e8b2e570d655b00ac19a9a0ca0a385ee/jsonschema-4.26.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/41/45/1a4ed80516f02155c51f51e8cedb3c1902296743db0bbc66608a0db2814f/jsonschema_specifications-2025.9.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/81/db/e655086b7f3a705df045bf0933bdd9c2f79bb3c97bfef1384598bb79a217/keyring-25.7.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/37/6f/9aae1008083bb501ef63284220ce81638332f9ccbfa53765b2b7502203cf/lxml-6.0.2-cp312-cp312-macosx_10_13_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/c6/d1/232b3309a02d60f11e71857778bfcd4acbdb86c07db8260caf7d008b08f8/lxml-6.0.2-cp312-cp312-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/a9/50/5b1d70de548fb1e11e15ea9ebec0480365462d202f98b66ad7e154284327/m2r2-0.3.4-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/f0/d6/b04443dfb6731c83c7162d760b987b24fb8d5b4eeeeeee2d06c169d367fb/manifold3d-3.3.2-cp312-cp312-macosx_10_14_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/8d/93/846804029d955c3c841d8efff77c2b0e8d9aab057d3a077dc8e3f88b5ea4/mapbox_earcut-2.0.0-cp312-cp312-macosx_10_13_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/0a/56/8c6b01ec02306cc9e896920d0fa444e753c1f1584280883b9a15eae331b4/manifold3d-3.3.2-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/1a/f7/5cdd3752526e91d91336c7263af7767b291d21e63c89d7190a60051f0f87/mapbox_earcut-2.0.0-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/94/54/e7d793b573f298e1c9013b8c4dade17d481164aa517d1d7148619c2cedbf/markdown_it_py-4.0.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/5a/72/147da192e38635ada20e0a2e1a51cf8823d2119ce8883f7053879c2199b5/markupsafe-3.0.3-cp312-cp312-macosx_10_13_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/3c/2e/8d0c2ab90a8c1d9a24f0399058ab8519a3279d1bd4289511d74e909f060e/markupsafe-3.0.3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/09/ec/4b43dae793655b7d8a25f76119624350b4d65eb663459eb9603d7f1f0345/mistune-0.8.4-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a4/8e/469e5a4a2f5855992e425f3cb33804cc07bf18d48f2db061aec61ce50270/more_itertools-10.8.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/d9/6f/1e25eee957e58e3afb2a44b94fa95e06cebc4c236193ed0de3012fff1e19/msgspec-0.20.0-cp312-cp312-macosx_10_13_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/f9/f0/4772421643f1c5aaf46d9e500a8716f59b02c8bf30bfa92cb8a763159efb/mujoco-3.5.0-cp312-cp312-macosx_10_16_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/5c/a2/488517a43ccf5a4b6b6eca6dd4ede0bd82b043d1539dd6bb908a19f8efd3/msgspec-0.20.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/c6/10/fa6b8762efbb02bd349503a39fb9dbbcf9e12041b0c5b29d484cafc09355/mujoco-3.4.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/9e/c9/b2622292ea83fbb4ec318f5b9ab867d0a28ab43c5717bb85b0a5f6b3b0a4/networkx-3.6.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/13/3e/aef8cf8e0419b530c95e96ae93a5078e9b36c1e6613eeb1df03a80d5194e/nh3-0.3.3-cp38-abi3-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl + - pypi: https://files.pythonhosted.org/packages/6f/84/c0dc75c7fb596135f999e59a410d9f45bdabb989f1cb911f0016d22b747b/nh3-0.3.3-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - pypi: https://files.pythonhosted.org/packages/88/b2/d0896bdcdc8d28a7fc5717c305f1a861c26e18c05047949fb371034d98bd/nodeenv-1.10.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/51/6e/6f394c9c77668153e14d4da83bcc247beb5952f6ead7699a1a2992613bea/numpy-2.4.2-cp312-cp312-macosx_10_13_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/f5/c6/a18e59f3f0b8071cc85cbc8d80cd02d68aa9710170b2553a117203d46936/numpy-2.4.2-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/e3/94/1843518e420fa3ed6919835845df698c7e27e183cb997394e4a670973a65/omegaconf-2.3.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/b7/b9/c538f279a4e237a006a2c98387d081e9eb060d203d8ed34467cc0f0b9b53/packaging-26.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/07/d3/8df65da0d4df36b094351dce696f2989bec731d4f10e743b1c5f4da4d3bf/pillow-12.1.1-cp312-cp312-macosx_10_13_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/ff/79/6df7b2ee763d619cda2fb4fea498e5f79d984dae304d45a8999b80d6cf5c/pillow-12.1.1-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/48/31/05e764397056194206169869b50cf2fee4dbbbc71b344705b9c0d878d4d8/platformdirs-4.9.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/54/20/4d324d65cc6d9205fabedc306948156824eb9f0ee1633355a8f7ec5c66bf/pluggy-1.6.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/5d/19/fd3ef348460c80af7bb4669ea7926651d1f95c23ff2df18b9d24bab4f3fa/pre_commit-4.5.1-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/e1/da/3f941e3734ac8088ea588b53e860baeddac8323ea40ce22e3d0baa865cc9/pyarrow-23.0.1-cp312-cp312-macosx_12_0_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/2c/a5/da83046273d990f256cb79796a190bbf7ec999269705ddc609403f8c6b06/pyarrow-23.0.1-cp312-cp312-manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/4f/e4/4f2d41881fae547f06ffa4c9748fa8ed13c4db5c830ff268b84175546b3c/pybind11_stubgen-2.5.5-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/07/86/f1f61b7a0701f9d1299e5293d083318019f91021a4d449f94d59dbe024e4/pycollada-0.9.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/0c/c3/44f3fbbfa403ea2a7c779186dc20772604442dde72947e7d01069cbe98e3/pycparser-3.0-py3-none-any.whl @@ -3307,7 +2847,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/ee/49/1377b49de7d0c1ce41292161ea0f721913fa8722c19fb9c1e3aa0367eecb/pytest_cov-7.0.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ca/31/d4e37e9e550c2b92a9cbc2e4d0b7420a27224968580b5a447f420847c975/pytest_xdist-3.8.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ec/57/56b9bcc3c9c6a792fcbaf139543cee77261f3651ca9da0c93f5c1221264b/python_dateutil-2.9.0.post0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/d1/33/422b98d2195232ca1826284a76852ad5a86fe23e31b009c9886b2d0fb8b2/pyyaml-6.0.3-cp312-cp312-macosx_10_13_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/8b/9d/b3589d3877982d4f2329302ef98a8026e7f4443c765c46cfecc8858c6b4b/pyyaml-6.0.3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/e1/67/921ec3024056483db83953ae8e48079ad62b92db7880013ca77632921dd0/readme_renderer-44.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/2c/58/ca301544e1fa93ed4f80d724bf5b194f6e4b945841c5bfd555878eea9fcb/referencing-0.37.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/1e/db/4254e3eabe8020b458f1a747140d32277ec7a271daf1d235b70dc0b4e6e3/requests-2.32.5-py3-none-any.whl @@ -3316,11 +2856,12 @@ environments: - pypi: https://files.pythonhosted.org/packages/ef/45/615f5babd880b4bd7d405cc0dc348234c5ffb6ed1ea33e152ede08b2072d/rich-14.3.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/16/80/579e75e0be0439d11e479732e4c194a9c6e6d152670dae561b9525015425/robot_descriptions-1.22.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/04/54/6f679c435d28e0a568d8e8a7c0a93a09010818634c3c3907fc98d8983770/roman_numerals-4.1.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/03/e7/98a2f4ac921d82f33e03f3835f5bf3a4a40aa1bfdc57975e74a97b2b4bdd/rpds_py-0.30.0-cp312-cp312-macosx_10_12_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/04/d9/108cd989a4c0954e60b3cdc86fd2826407702b5375f6dfdab2802e5fed98/rtree-1.4.1-py3-none-macosx_10_9_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/b3/ea/c8f89d32e7912269d38c58f3649e453ac32c528f93bb7f4219258be2e7ed/ruff-0.15.1-py3-none-macosx_10_12_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/0b/11/7241a63e73ba5a516f1930ac8d5b44cbbfabd35ac73a2d08ca206df007c4/scipy-1.17.0-cp312-cp312-macosx_10_14_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/24/c0/f3b6453cf2dfa99adc0ba6675f9aaff9e526d2224cbd7ff9c1a879238693/shapely-2.1.2-cp312-cp312-macosx_10_13_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/60/1b/6f8f29f3f995c7ffdde46a626ddccd7c63aefc0efae881dc13b6e5d5bb16/rpds_py-0.30.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/d1/75/e5d44be90525cd28503e7f836d077ae6663ec0687a13ba7810b4114b3668/rtree-1.4.1-py3-none-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/a3/1d/5f56cae1d6c40b8a318513599b35ea4b075d7dc1cd1d04449578c29d1d75/ruff-0.15.1-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/d1/fe/66d73b76d378ba8cc2fe605920c0c75092e3a65ae746e1e767d9d020a75a/scipy-1.17.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/b7/46/f5af3402b579fd5e11573ce652019a67074317e18c1935cc0b4ba9b35552/secretstorage-3.5.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b9/37/e781683abac55dde9771e086b790e554811a71ed0b2b8a1e789b7430dd44/shapely-2.1.2-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl - pypi: https://files.pythonhosted.org/packages/b7/ce/149a00dd41f10bc29e5921b496af8b574d8413afcd5e30dfa0ed46c2cc5e/six-1.17.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/04/be/d09147ad1ec7934636ad912901c5fd7667e1c858e19d355237db0d0cd5e4/smmap-5.0.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c8/78/3565d011c61f5a43488987ee32b6f3f656e7f107ac2782dd57bdd7d91d9a/snowballstemmer-3.0.1-py3-none-any.whl @@ -3340,24 +2881,26 @@ environments: - pypi: https://files.pythonhosted.org/packages/16/e1/3079a9ff9b8e11b846c6ac5c8b5bfb7ff225eee721825310c91b3b50304f/tqdm-4.67.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/3c/b9/da09903ea53b677a58ba770112de6fe8b2acb8b4cd9bffae4ff6cfe7c072/trimesh-4.11.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/3a/7a/882d99539b19b1490cac5d77c67338d126e4122c8276bf640e411650c830/twine-6.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d4/35/7541d1f046491fac8ce05d543d3f0de0af02086ad864dd3a23535ec703b9/typeguard-4.5.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/18/67/36e9267722cc04a6b9f15c7f3441c2363321a3ea07da7ae0c0707beb2a9c/typing_extensions-4.15.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/a7/f9/56b0cb8c5c287c7eec02735cce74a4c25cc56d6817bab7edde6f32b024a3/tyro-1.0.6-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/39/08/aaaad47bc4e9dc8c725e68f9d04865dbcb2052843ff09c97b08904852d84/urllib3-2.6.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/40/db/c5729ec39ed557ac673ca993abd71e5b18d71a92f95f1845152e639000ff/uv-0.10.3-py3-none-macosx_10_12_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/cf/9c/66375e65634c80f6efb46e81915126bf3e55dc9d6615217590cbc8316d2e/vhacdx-0.0.10-cp312-cp312-macosx_10_13_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/42/4b/6cf85b485be7ec29db837ec2a1d8cd68bc1147b1abf23d8636c5bd65b3cc/virtualenv-20.37.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/f2/b3/4b9580d62e1245df52e8516cf3e404ff39cc72634d2d749d47b1dada4161/uv-0.10.4-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/94/98/d2a6aeb1c6570a1fc1be29ee03db795f643ab03c6df7635522f23796b39d/vhacdx-0.0.10-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/6a/2a/dc2228b2888f51192c7dc766106cd475f1b768c10caaf9727659726f7391/virtualenv-20.36.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/b9/c4/819f000b3d64f654a054a8b24bf8d0c5e799636393135784d0886d8c808e/viser-1.0.21-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/f4/71/809a0f5f6a06522af902e0f2ea2757f71ead94610010cf570ab5c98e99ed/websockets-15.0.1-cp312-cp312-macosx_10_13_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/14/8f/aa61f528fba38578ec553c145857a181384c72b98156f858ca5c8e82d9d3/websockets-15.0.1-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl - pypi: https://files.pythonhosted.org/packages/87/22/b76d483683216dde3d67cba61fb2444be8d5be289bf628c13fc0fd90e5f9/wheel-0.46.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/9a/07/d9412f3d7d462347e4511181dea65e47e0d0e16e26fbee2ea86a2aefb657/xxhash-3.6.0-cp312-cp312-macosx_10_13_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/11/4f/426f91b96701ec2f37bb2b8cec664eff4f658a11f3fa9d94f0a887ea6d2b/xxhash-3.6.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/c8/60/4ea0d6df0b497d51bf2ef87eaab0eb26f8bc3b3313c012da5df3383cced9/yourdfpy-0.0.60-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/2e/54/647ade08bf0db230bfea292f893923872fd20be6ac6f53b2b936ba839d75/zipp-3.23.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/82/fc/f26eb6ef91ae723a03e16eddb198abcfce2bc5a42e224d44cc8b6765e57e/zstandard-0.25.0-cp312-cp312-macosx_10_13_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/53/60/7be26e610767316c028a2cbedb9a3beabdbe33e2182c373f71a1c0b88f36/zstandard-0.25.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl - pypi: ./ osx-arm64: - conda: https://conda.anaconda.org/conda-forge/osx-arm64/bzip2-1.0.8-hd037594_9.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/c-ares-1.34.6-hc919400_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.1.4-hbd8a1cb_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/cmake-4.2.3-h8cb302d_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/cmake-4.2.3-h8cb302d_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/eigen-3.4.0-h49c215f_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/icu-78.2-h38cb7af_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/krb5-1.22.2-h385eeb1_0.conda @@ -3376,8 +2919,8 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ncurses-6.5-h5e97a16_3.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/onnxruntime-cpp-1.19.2-hda9e549_0_cpu.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/openssl-3.6.1-hd24854e_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pybind11-3.0.1-pyh7a1b43c_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pybind11-global-3.0.1-pyhc7ab6ef_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pybind11-3.0.2-pyh7a1b43c_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pybind11-global-3.0.2-pyhc7ab6ef_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-3.12.12-h18782d2_2_cpython.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/readline-8.3-h46df422_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/rhash-1.4.6-h5505292_1.conda @@ -3402,6 +2945,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/5d/96/5238b1efc5922ddbdc9b0db9243152c09777804fb7c02ad1741eb18a11c0/coverage-7.13.4-cp312-cp312-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/94/35/386550fd60316d1e37eccdda609b074113298f23cef5bddb2049823fe666/dacite-1.9.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/33/6b/e0547afaf41bf2c42e52430072fa5658766e3d65bd4b03a563d1b6336f57/distlib-0.4.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/55/e2/2537ebcff11c1ee1ff17d8d0b6f4db75873e3b0fb32c2d4a2ee31ecb310a/docstring_parser-0.17.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/02/10/5da547df7a391dcde17f59520a231527b8571e6f46fc8efb02ccb370ab12/docutils-0.22.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e6/86/9ce12fbbfc365b7037666ffbc79ac93ba05690b22cac8fad8d2104577dfe/dora_rs-0.4.1-cp37-abi3-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/38/82/78d57efaf364d4ae45c5e87c5c370b0999da92ecc72f9ba96949a93faa4f/dora_rs_cli-0.4.1-cp37-abi3-macosx_11_0_arm64.whl @@ -3415,6 +2959,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/6a/09/e21df6aef1e1ffc0c816f0522ddc3f6dcded766c3261813131c78a704470/gitpython-3.1.46-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/b6/a6/6ea2f73ad4474896d9e38b3ffbe6ffd5a802c738392269e99e8c6621a461/glfw-2.10.0-py2.py27.py3.py30.py31.py32.py33.py34.py35.py36.py37.py38.py39.py310.py311.py312.py313.py314-none-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/04/4b/29cac41a4d98d144bf5f6d33995617b185d14b22401f75ca86f384e87ff1/h11-0.16.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/a4/5e/3c6f6e0430813c7aefe784d00c6711166f46225f5d229546eb53032c3707/h5py-3.15.1-cp312-cp312-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/7e/f5/f66802a942d491edb555dd61e3a9961140fd64c90bce1eafd741609d334d/httpcore-1.0.9-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/2a/39/e50c7c3a983047577ee07d2a9e53faf5a69493943ec3f6a384bdc792deb2/httpx-0.28.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c6/50/e0edd38dcd63fb26a8547f13d28f7a008bc4a3fd4eb4ff030673f22ad41a/hydra_core-1.3.2-py3-none-any.whl @@ -3442,7 +2987,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/09/ec/4b43dae793655b7d8a25f76119624350b4d65eb663459eb9603d7f1f0345/mistune-0.8.4-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a4/8e/469e5a4a2f5855992e425f3cb33804cc07bf18d48f2db061aec61ce50270/more_itertools-10.8.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/7f/ee/af51d090ada641d4b264992a486435ba3ef5b5634bc27e6eb002f71cef7d/msgspec-0.20.0-cp312-cp312-macosx_11_0_arm64.whl - - pypi: https://files.pythonhosted.org/packages/e1/d4/d0032323f58a9b8080b8464c6aade8d5ac2e101dbed1de64a38b3913b446/mujoco-3.5.0-cp312-cp312-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/ed/fe/10dbaef500af18866a41d842f2f95cf113aacf0f1eb91677c4817cff3495/mujoco-3.4.0-cp312-cp312-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/9e/c9/b2622292ea83fbb4ec318f5b9ab867d0a28ab43c5717bb85b0a5f6b3b0a4/networkx-3.6.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/13/3e/aef8cf8e0419b530c95e96ae93a5078e9b36c1e6613eeb1df03a80d5194e/nh3-0.3.3-cp38-abi3-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl - pypi: https://files.pythonhosted.org/packages/88/b2/d0896bdcdc8d28a7fc5717c305f1a861c26e18c05047949fb371034d98bd/nodeenv-1.10.0-py2.py3-none-any.whl @@ -3499,11 +3044,13 @@ environments: - pypi: https://files.pythonhosted.org/packages/16/e1/3079a9ff9b8e11b846c6ac5c8b5bfb7ff225eee721825310c91b3b50304f/tqdm-4.67.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/3c/b9/da09903ea53b677a58ba770112de6fe8b2acb8b4cd9bffae4ff6cfe7c072/trimesh-4.11.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/3a/7a/882d99539b19b1490cac5d77c67338d126e4122c8276bf640e411650c830/twine-6.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d4/35/7541d1f046491fac8ce05d543d3f0de0af02086ad864dd3a23535ec703b9/typeguard-4.5.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/18/67/36e9267722cc04a6b9f15c7f3441c2363321a3ea07da7ae0c0707beb2a9c/typing_extensions-4.15.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/a7/f9/56b0cb8c5c287c7eec02735cce74a4c25cc56d6817bab7edde6f32b024a3/tyro-1.0.6-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/39/08/aaaad47bc4e9dc8c725e68f9d04865dbcb2052843ff09c97b08904852d84/urllib3-2.6.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/0b/8c/cce26f6da9f69a9f0df032d642a4cb5603249f145c368e41b0154c463ca9/uv-0.10.3-py3-none-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/63/91/c4ddf7e55e05394967615050cc364a999157a44c008d0e1e9db2ed49a11c/uv-0.10.4-py3-none-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/4e/e3/fc2644d3e7d0b2b52e2f681eb2878c0e1b9cafc53946f66736d0f01e237c/vhacdx-0.0.10-cp312-cp312-macosx_11_0_arm64.whl - - pypi: https://files.pythonhosted.org/packages/42/4b/6cf85b485be7ec29db837ec2a1d8cd68bc1147b1abf23d8636c5bd65b3cc/virtualenv-20.37.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/6a/2a/dc2228b2888f51192c7dc766106cd475f1b768c10caaf9727659726f7391/virtualenv-20.36.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/b9/c4/819f000b3d64f654a054a8b24bf8d0c5e799636393135784d0886d8c808e/viser-1.0.21-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/3d/69/1a681dd6f02180916f116894181eab8b2e25b31e484c5d0eae637ec01f7c/websockets-15.0.1-cp312-cp312-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/87/22/b76d483683216dde3d67cba61fb2444be8d5be289bf628c13fc0fd90e5f9/wheel-0.46.3-py3-none-any.whl @@ -3515,7 +3062,7 @@ environments: win-64: - conda: https://conda.anaconda.org/conda-forge/win-64/bzip2-1.0.8-h0ad9c76_9.conda - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.1.4-h4c7d964_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/cmake-4.2.3-hdcbee5b_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/cmake-4.2.3-hdcbee5b_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/eigen-3.4.0-h477610d_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/krb5-1.22.2-h0ea6238_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libcurl-8.18.0-h8206538_1.conda @@ -3528,8 +3075,8 @@ environments: - conda: https://conda.anaconda.org/conda-forge/win-64/libzlib-1.3.1-h2466b09_2.conda - conda: https://conda.anaconda.org/conda-forge/win-64/onnxruntime-cpp-1.19.2-h50ebc8d_0_cpu.conda - conda: https://conda.anaconda.org/conda-forge/win-64/openssl-3.6.1-hf411b9b_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pybind11-3.0.1-pyh7a1b43c_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pybind11-global-3.0.1-pyh5e4992e_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pybind11-3.0.2-pyh7a1b43c_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pybind11-global-3.0.2-pyh5e4992e_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/python-3.12.12-h0159041_2_cpython.conda - conda: https://conda.anaconda.org/conda-forge/win-64/tk-8.6.13-h6ed50ae_3.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda @@ -3557,6 +3104,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/77/4e/c0a25a425fcf5557d9abd18419c95b63922e897bc86c1f327f155ef234a9/coverage-7.13.4-cp312-cp312-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/94/35/386550fd60316d1e37eccdda609b074113298f23cef5bddb2049823fe666/dacite-1.9.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/33/6b/e0547afaf41bf2c42e52430072fa5658766e3d65bd4b03a563d1b6336f57/distlib-0.4.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/55/e2/2537ebcff11c1ee1ff17d8d0b6f4db75873e3b0fb32c2d4a2ee31ecb310a/docstring_parser-0.17.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/02/10/5da547df7a391dcde17f59520a231527b8571e6f46fc8efb02ccb370ab12/docutils-0.22.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/1c/d4/e8134ce7d977fd87f507b6951b53df3aa7ab91122e7d487707352336703b/dora_rs-0.4.1-cp37-abi3-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/93/a7/c53764b09b7a6e6a21d46df656513391d8429b729fdde26372d961938297/dora_rs_cli-0.4.1-cp37-abi3-win_amd64.whl @@ -3570,6 +3118,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/6a/09/e21df6aef1e1ffc0c816f0522ddc3f6dcded766c3261813131c78a704470/gitpython-3.1.46-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/bd/e1/6d6816b296a529ac9b897ad228b1e084eb1f92319e96371880eebdc874a6/glfw-2.10.0-py2.py27.py3.py30.py31.py32.py33.py34.py35.py36.py37.py38.py39.py310.py311.py312.py313.py314-none-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/04/4b/29cac41a4d98d144bf5f6d33995617b185d14b22401f75ca86f384e87ff1/h11-0.16.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/cf/51/329e7436bf87ca6b0fe06dd0a3795c34bebe4ed8d6c44450a20565d57832/h5py-3.15.1-cp312-cp312-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/7e/f5/f66802a942d491edb555dd61e3a9961140fd64c90bce1eafd741609d334d/httpcore-1.0.9-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/2a/39/e50c7c3a983047577ee07d2a9e53faf5a69493943ec3f6a384bdc792deb2/httpx-0.28.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c6/50/e0edd38dcd63fb26a8547f13d28f7a008bc4a3fd4eb4ff030673f22ad41a/hydra_core-1.3.2-py3-none-any.whl @@ -3597,7 +3146,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/09/ec/4b43dae793655b7d8a25f76119624350b4d65eb663459eb9603d7f1f0345/mistune-0.8.4-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a4/8e/469e5a4a2f5855992e425f3cb33804cc07bf18d48f2db061aec61ce50270/more_itertools-10.8.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/5a/51/aba940212c23b32eedce752896205912c2668472ed5b205fc33da28a6509/msgspec-0.20.0-cp312-cp312-win_amd64.whl - - pypi: https://files.pythonhosted.org/packages/02/37/527d83610b878f27c01dd762e0e41aaa62f095c607f0500ac7f724a2c7a5/mujoco-3.5.0-cp312-cp312-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/3f/ec/5336e8e86e429a7f301dac63cae6ae75ff9e91bfb01502a55f60d7305eca/mujoco-3.4.0-cp312-cp312-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/9e/c9/b2622292ea83fbb4ec318f5b9ab867d0a28ab43c5717bb85b0a5f6b3b0a4/networkx-3.6.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/73/88/1ce287ef8649dc51365b5094bd3713b76454838140a32ab4f8349973883c/nh3-0.3.3-cp38-abi3-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/88/b2/d0896bdcdc8d28a7fc5717c305f1a861c26e18c05047949fb371034d98bd/nodeenv-1.10.0-py2.py3-none-any.whl @@ -3655,11 +3204,13 @@ environments: - pypi: https://files.pythonhosted.org/packages/16/e1/3079a9ff9b8e11b846c6ac5c8b5bfb7ff225eee721825310c91b3b50304f/tqdm-4.67.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/3c/b9/da09903ea53b677a58ba770112de6fe8b2acb8b4cd9bffae4ff6cfe7c072/trimesh-4.11.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/3a/7a/882d99539b19b1490cac5d77c67338d126e4122c8276bf640e411650c830/twine-6.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d4/35/7541d1f046491fac8ce05d543d3f0de0af02086ad864dd3a23535ec703b9/typeguard-4.5.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/18/67/36e9267722cc04a6b9f15c7f3441c2363321a3ea07da7ae0c0707beb2a9c/typing_extensions-4.15.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/a7/f9/56b0cb8c5c287c7eec02735cce74a4c25cc56d6817bab7edde6f32b024a3/tyro-1.0.6-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/39/08/aaaad47bc4e9dc8c725e68f9d04865dbcb2052843ff09c97b08904852d84/urllib3-2.6.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/d5/95/89b9caeb4007d950dfa5fa5923c2ea67de541de0e3582598b7b9c7eeac53/uv-0.10.3-py3-none-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/31/dd/1900452678d46f6a649ab8167bededb02500b0561fc9f69e1f52607895c7/uv-0.10.4-py3-none-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/73/e9/f9729603ac75047a257f1b4ddac60cbde72b0abfd49ffed305751ba630a2/vhacdx-0.0.10-cp312-cp312-win_amd64.whl - - pypi: https://files.pythonhosted.org/packages/42/4b/6cf85b485be7ec29db837ec2a1d8cd68bc1147b1abf23d8636c5bd65b3cc/virtualenv-20.37.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/6a/2a/dc2228b2888f51192c7dc766106cd475f1b768c10caaf9727659726f7391/virtualenv-20.36.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/b9/c4/819f000b3d64f654a054a8b24bf8d0c5e799636393135784d0886d8c808e/viser-1.0.21-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/7d/71/abf2ebc3bbfa40f391ce1428c7168fb20582d0ff57019b69ea20fa698043/websockets-15.0.1-cp312-cp312-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/87/22/b76d483683216dde3d67cba61fb2444be8d5be289bf628c13fc0fd90e5f9/wheel-0.46.3-py3-none-any.whl @@ -3683,11 +3234,11 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-hda65f42_9.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/c-ares-1.34.6-hb03c661_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.1.4-hbd8a1cb_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/cmake-4.2.3-hc85cc9f_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/cmake-4.2.3-hc85cc9f_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/eigen-3.4.0-h171cf75_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/gcc_impl_linux-64-13.4.0-hf2caf72_17.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/gcc_impl_linux-64-13.4.0-he2fa53e_18.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/gcc_linux-64-13.4.0-h0a5b801_21.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/gxx_impl_linux-64-13.4.0-h6a38259_17.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/gxx_impl_linux-64-13.4.0-h6a38259_18.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/gxx_linux-64-13.4.0-h587059e_21.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/icu-78.2-h33c6efd_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/kernel-headers_linux-64-4.18.0-he073ed8_9.conda @@ -3699,19 +3250,19 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/libev-4.33-hd590300_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.7.4-hecca717_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libffi-3.5.2-h3435931_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-15.2.0-he0feb66_17.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/libgcc-devel_linux-64-13.4.0-hd1d28cc_117.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-15.2.0-h69a702a_17.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-15.2.0-he0feb66_17.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-15.2.0-he0feb66_18.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/libgcc-devel_linux-64-13.4.0-hd1d28cc_118.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-15.2.0-h69a702a_18.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-15.2.0-he0feb66_18.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/liblzma-5.8.2-hb03c661_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libmpdec-4.0.0-hb03c661_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libnghttp2-1.67.0-had1ee68_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libsanitizer-13.4.0-h2a15e64_17.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libsanitizer-13.4.0-h2a15e64_18.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.51.2-hf4e2dac_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libssh2-1.11.1-hcf80075_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-15.2.0-h934c35e_17.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/libstdcxx-devel_linux-64-13.4.0-h6963c3b_117.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-15.2.0-hdf11a46_17.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-15.2.0-h934c35e_18.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/libstdcxx-devel_linux-64-13.4.0-h6963c3b_118.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-15.2.0-hdf11a46_18.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.41.3-h5347b49_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libuv-1.51.0-hb03c661_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.1-hb9d3cd8_2.conda @@ -3719,8 +3270,8 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/onnxruntime-cpp-1.19.2-h641f3bf_0_cpu.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.6.1-h35e630c_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/patchelf-0.17.2-h58526e2_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pybind11-3.0.1-pyh7a1b43c_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pybind11-global-3.0.1-pyhc7ab6ef_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pybind11-3.0.2-pyh7a1b43c_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pybind11-global-3.0.2-pyhc7ab6ef_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.13.12-hc97d973_100_cp313.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.13-8_cp313.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/readline-8.3-h853b02a_0.conda @@ -3749,6 +3300,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/6b/e7/237155ae19a9023de7e30ec64e5d99a9431a567407ac21170a046d22a5a3/cryptography-46.0.5-cp311-abi3-manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/94/35/386550fd60316d1e37eccdda609b074113298f23cef5bddb2049823fe666/dacite-1.9.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/33/6b/e0547afaf41bf2c42e52430072fa5658766e3d65bd4b03a563d1b6336f57/distlib-0.4.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/55/e2/2537ebcff11c1ee1ff17d8d0b6f4db75873e3b0fb32c2d4a2ee31ecb310a/docstring_parser-0.17.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/02/10/5da547df7a391dcde17f59520a231527b8571e6f46fc8efb02ccb370ab12/docutils-0.22.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/94/53/7dc142faa1719333d57c78cfcf419f2b176770b49ebef54e0bbfa34212ac/dora_rs-0.4.1-cp37-abi3-manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/3c/3e/f3d1e28df9457089055dacf3ca7ca3751ed274d312d9a8515255d80011ec/dora_rs_cli-0.4.1-cp37-abi3-manylinux_2_28_x86_64.whl @@ -3763,6 +3315,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/6a/09/e21df6aef1e1ffc0c816f0522ddc3f6dcded766c3261813131c78a704470/gitpython-3.1.46-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/5a/3f/efeb7c6801c46e11bd666a5180f0d615f74f72264212f74f39586c6fda9d/glfw-2.10.0-py2.py27.py3.py30.py31.py32.py33.py34.py35.py36.py37.py38.py39.py310.py311.py312.py313.py314-none-manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/04/4b/29cac41a4d98d144bf5f6d33995617b185d14b22401f75ca86f384e87ff1/h11-0.16.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d9/69/4402ea66272dacc10b298cca18ed73e1c0791ff2ae9ed218d3859f9698ac/h5py-3.15.1-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/7e/f5/f66802a942d491edb555dd61e3a9961140fd64c90bce1eafd741609d334d/httpcore-1.0.9-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/2a/39/e50c7c3a983047577ee07d2a9e53faf5a69493943ec3f6a384bdc792deb2/httpx-0.28.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c6/50/e0edd38dcd63fb26a8547f13d28f7a008bc4a3fd4eb4ff030673f22ad41a/hydra_core-1.3.2-py3-none-any.whl @@ -3791,7 +3344,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/09/ec/4b43dae793655b7d8a25f76119624350b4d65eb663459eb9603d7f1f0345/mistune-0.8.4-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a4/8e/469e5a4a2f5855992e425f3cb33804cc07bf18d48f2db061aec61ce50270/more_itertools-10.8.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/28/83/36557b04cfdc317ed8a525c4993b23e43a8fbcddaddd78619112ca07138c/msgspec-0.20.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/16/47/93c7ac3a9630b49c55d76b0d02aa565543e2f62cecd885f8f574f5c745e7/mujoco-3.5.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/df/72/0c47350ec39611ff8defe9e8af10c23c9ad0235974f1999a523fcd1c3e68/mujoco-3.4.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/9e/c9/b2622292ea83fbb4ec318f5b9ab867d0a28ab43c5717bb85b0a5f6b3b0a4/networkx-3.6.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/6f/84/c0dc75c7fb596135f999e59a410d9f45bdabb989f1cb911f0016d22b747b/nh3-0.3.3-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - pypi: https://files.pythonhosted.org/packages/88/b2/d0896bdcdc8d28a7fc5717c305f1a861c26e18c05047949fb371034d98bd/nodeenv-1.10.0-py2.py3-none-any.whl @@ -3849,11 +3402,13 @@ environments: - pypi: https://files.pythonhosted.org/packages/16/e1/3079a9ff9b8e11b846c6ac5c8b5bfb7ff225eee721825310c91b3b50304f/tqdm-4.67.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/3c/b9/da09903ea53b677a58ba770112de6fe8b2acb8b4cd9bffae4ff6cfe7c072/trimesh-4.11.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/3a/7a/882d99539b19b1490cac5d77c67338d126e4122c8276bf640e411650c830/twine-6.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d4/35/7541d1f046491fac8ce05d543d3f0de0af02086ad864dd3a23535ec703b9/typeguard-4.5.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/18/67/36e9267722cc04a6b9f15c7f3441c2363321a3ea07da7ae0c0707beb2a9c/typing_extensions-4.15.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/a7/f9/56b0cb8c5c287c7eec02735cce74a4c25cc56d6817bab7edde6f32b024a3/tyro-1.0.6-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/39/08/aaaad47bc4e9dc8c725e68f9d04865dbcb2052843ff09c97b08904852d84/urllib3-2.6.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/ce/de/0638d8aa83c2038c5f820151006b3bf372d109afbfdb2a8fc59187cc3690/uv-0.10.3-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/f2/b3/4b9580d62e1245df52e8516cf3e404ff39cc72634d2d749d47b1dada4161/uv-0.10.4-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - pypi: https://files.pythonhosted.org/packages/b8/b4/07ab1c828bae0eb5c72cd9a4cbe8b0376d374509be3c7055e1a399bf85c3/vhacdx-0.0.10-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/42/4b/6cf85b485be7ec29db837ec2a1d8cd68bc1147b1abf23d8636c5bd65b3cc/virtualenv-20.37.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/6a/2a/dc2228b2888f51192c7dc766106cd475f1b768c10caaf9727659726f7391/virtualenv-20.36.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/b9/c4/819f000b3d64f654a054a8b24bf8d0c5e799636393135784d0886d8c808e/viser-1.0.21-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ff/b2/83a6ddf56cdcbad4e3d841fcc55d6ba7d19aeb89c50f24dd7e859ec0805f/websockets-15.0.1-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl - pypi: https://files.pythonhosted.org/packages/87/22/b76d483683216dde3d67cba61fb2444be8d5be289bf628c13fc0fd90e5f9/wheel-0.46.3-py3-none-any.whl @@ -3862,172 +3417,11 @@ environments: - pypi: https://files.pythonhosted.org/packages/2e/54/647ade08bf0db230bfea292f893923872fd20be6ac6f53b2b936ba839d75/zipp-3.23.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/63/4b/e3678b4e776db00f9f7b2fe58e547e8928ef32727d7a1ff01dea010f3f13/zstandard-0.25.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl - pypi: ./ - osx-64: - - conda: https://conda.anaconda.org/conda-forge/osx-64/bzip2-1.0.8-h500dc9f_9.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/c-ares-1.34.6-hb5e19a0_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.1.4-hbd8a1cb_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/cmake-4.2.3-h965d0ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/eigen-3.4.0-hfc0b2d5_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/krb5-1.22.2-h207b36a_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/libcurl-8.18.0-h9a2545f_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/libcxx-21.1.8-h4fb565c_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/libedit-3.1.20250104-pl5321ha958ccf_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/libev-4.33-h10d778d_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/libexpat-2.7.4-h991f03e_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/libffi-3.5.2-hd1f9c09_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/liblzma-5.8.2-h11316ed_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/libmpdec-4.0.0-hf3981d6_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/libnghttp2-1.67.0-h3338091_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/libsqlite-3.51.2-hb99441e_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/libssh2-1.11.1-hed3591d_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/libuv-1.51.0-h58003a5_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/libzlib-1.3.1-hd23fc13_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/ncurses-6.5-h0622a9a_3.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/onnxruntime-cpp-1.19.2-h417c6ca_0_cpu.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/openssl-3.6.1-hb6871ef_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pybind11-3.0.1-pyh7a1b43c_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pybind11-global-3.0.1-pyhc7ab6ef_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/python-3.13.12-h894a449_100_cp313.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.13-8_cp313.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/readline-8.3-h68b038d_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/rhash-1.4.6-h6e16a3a_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/tk-8.6.13-h7142dee_3.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/zstd-1.5.7-h3eecb57_6.conda - - pypi: https://files.pythonhosted.org/packages/18/a6/907a406bb7d359e6a63f99c313846d9eec4f7e6f7437809e03aa00fa3074/absl_py-2.4.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/8d/3f/95338030883d8c8b91223b4e21744b04d11b161a3ef117295d8241f50ab4/accessible_pygments-0.0.5-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/7e/b3/6b4067be973ae96ba0d615946e314c5ae35f9f993eca561b356540bb0c2b/alabaster-1.0.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/3e/38/7859ff46355f76f8d19459005ca000b6e7012f2f1ca597746cbcd1fbfe5e/antlr4-python3-runtime-4.9.3.tar.gz - - pypi: https://files.pythonhosted.org/packages/38/0e/27be9fdef66e72d64c0cdc3cc2823101b80585f8119b5c112c2e8f5f7dab/anyio-4.12.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/3f/38/b2becedff0bef4af9ff474b82e2dcaefca608b6d24753d0b460c94003d91/astroid-4.1.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/3a/2a/7cc015f5b9f5db42b7d48157e23356022889fc354a2813c15934b7cb5c0e/attrs-25.4.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/b0/c2/bb8ba1cec816fa356e19da83c59bfd4ac34dba1ae41eb7622c18f4b1d48d/auditwheel-6.6.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/77/f5/21d2de20e8b8b0408f0681956ca2c69f1320a3848ac50e6e7f39c6159675/babel-2.18.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/1a/39/47f9197bdd44df24d67ac8893641e16f386c984a0619ef2ee4c51fbbc019/beautifulsoup4-4.14.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/c5/0d/84a4380f930db0010168e0aa7b7a8fed9ba1835a8fbb1472bc6d0201d529/build-1.4.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/e6/ad/3cc14f097111b4de0040c83a525973216457bbeeb63739ef1ed275c1c021/certifi-2026.1.4-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/db/3c/33bac158f8ab7f89b2e59426d5fe2e4f63f7ed25df84c036890172b412b5/cfgv-3.5.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/97/45/4b3a1239bbacd321068ea6e7ac28875b03ab8bc0aa0966452db17cd36714/charset_normalizer-3.4.4-cp313-cp313-macosx_10_13_universal2.whl - - pypi: https://files.pythonhosted.org/packages/6d/c1/e419ef3723a074172b68aaa89c9f3de486ed4c2399e2dbd8113a4fdcaf9e/colorlog-6.10.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/db/23/aad45061a31677d68e47499197a131eea55da4875d16c1f42021ab963503/coverage-7.13.4-cp313-cp313-macosx_10_13_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/94/35/386550fd60316d1e37eccdda609b074113298f23cef5bddb2049823fe666/dacite-1.9.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/33/6b/e0547afaf41bf2c42e52430072fa5658766e3d65bd4b03a563d1b6336f57/distlib-0.4.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/02/10/5da547df7a391dcde17f59520a231527b8571e6f46fc8efb02ccb370ab12/docutils-0.22.4-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/a1/ff/894f11890a526f107d3d06b0e71209b45e5a7bb3666aed23725308bbf78a/dora_rs-0.4.1.tar.gz - - pypi: https://files.pythonhosted.org/packages/f0/45/77300cbdb4137a66eedf8e2488decffbe33e1d33ec912e54fdd02f2f3084/dora_rs_cli-0.4.1.tar.gz - - pypi: https://files.pythonhosted.org/packages/78/62/0ffc083b1d5f7c95eb03b260d2622dfacb70d1153011d216260b71c8e7d9/dora_utils-0.1.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/99/1a/e6d80ab0104ba947e1e5a0c5251021a4bf374cfe3b0d88e2be62b150170d/embreex-2.17.7.post7-cp313-cp313-macosx_10_13_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/e7/98/87b5946356095738cb90a6df7b35ff69ac5750f6e783d5fbcc5cb3b6cbd7/etils-1.13.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/ab/84/02fc1827e8cdded4aa65baef11296a9bbe595c474f0d6d758af082d849fd/execnet-2.1.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/e7/04/a94ebfb4eaaa08db56725a40de2887e95de4e8641b9e902c311bfa00aa39/filelock-3.24.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/e6/ab/fb21f4c939bb440104cc2b396d3be1d9b7a9fd3c6c2a53d98c45b3d7c954/fsspec-2026.2.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/f4/b2/50e9b292b5cac13e9e81272c7171301abc753a60460d21505b606e15cf21/furo-2025.12.19-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/a0/61/5c78b91c3143ed5c14207f463aecfc8f9dbb5092fb2869baf37c273b2705/gitdb-4.0.12-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/6a/09/e21df6aef1e1ffc0c816f0522ddc3f6dcded766c3261813131c78a704470/gitpython-3.1.46-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/b3/87/de0b33f6f00687499ca1371f22aa73396341b85bf88f1a284f9da8842493/glfw-2.10.0-py2.py27.py3.py30.py31.py32.py33.py34.py35.py36.py37.py38.py39.py310.py311.py312.py313.py314-none-macosx_10_6_intel.whl - - pypi: https://files.pythonhosted.org/packages/04/4b/29cac41a4d98d144bf5f6d33995617b185d14b22401f75ca86f384e87ff1/h11-0.16.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/7e/f5/f66802a942d491edb555dd61e3a9961140fd64c90bce1eafd741609d334d/httpcore-1.0.9-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/2a/39/e50c7c3a983047577ee07d2a9e53faf5a69493943ec3f6a384bdc792deb2/httpx-0.28.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/c6/50/e0edd38dcd63fb26a8547f13d28f7a008bc4a3fd4eb4ff030673f22ad41a/hydra_core-1.3.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/42/77/de194443bf38daed9452139e960c632b0ef9f9a5dd9ce605fdf18ca9f1b1/id-1.6.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/b8/58/40fbbcefeda82364720eba5cf2270f98496bdfa19ea75b4cccae79c698e6/identify-2.6.16-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/0e/61/66938bbb5fc52dbdf84594873d5b51fb1f7c7794e9c0f5bd885f30bc507b/idna-3.11-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/fb/fe/301e0936b79bcab4cacc7548bf2853fc28dced0a578bab1f7ef53c9aa75b/imageio-2.37.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/ff/62/85c4c919272577931d407be5ba5d71c20f0b616d31a0befe0ae45bb79abd/imagesize-1.4.1-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/a4/ed/1f1afb2e9e7f38a545d628f864d562a5ae64fe6f7a10e28ffb9b185b4e89/importlib_resources-6.5.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/cb/b1/3846dd7f199d53cb17f49cba7e651e9ce294d8497c8c150530ed11865bb8/iniconfig-2.3.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/7f/66/b15ce62552d84bbfcec9a4873ab79d993a1dd4edb922cbfccae192bd5b5f/jaraco.classes-3.4.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/8d/48/aa685dbf1024c7bd82bede569e3a85f82c32fd3d79ba5fea578f0159571a/jaraco_context-6.1.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/fd/c4/813bb09f0985cb21e959f21f2464169eca882656849adf727ac7bb7e1767/jaraco_functools-4.4.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/62/a1/3d680cbfd5f4b8f15abc1d571870c5fc3e594bb582bc3b64ea099db13e56/jinja2-3.1.6-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/69/90/f63fb5873511e014207a475e2bb4e8b2e570d655b00ac19a9a0ca0a385ee/jsonschema-4.26.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/41/45/1a4ed80516f02155c51f51e8cedb3c1902296743db0bbc66608a0db2814f/jsonschema_specifications-2025.9.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/81/db/e655086b7f3a705df045bf0933bdd9c2f79bb3c97bfef1384598bb79a217/keyring-25.7.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/5d/f4/2a94a3d3dfd6c6b433501b8d470a1960a20ecce93245cf2db1706adf6c19/lxml-6.0.2-cp313-cp313-macosx_10_13_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/a9/50/5b1d70de548fb1e11e15ea9ebec0480365462d202f98b66ad7e154284327/m2r2-0.3.4-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/a7/f5/9ae489a466543ca8f35f2eeeed7f043f714223e0905eaf62b2fce4684a07/manifold3d-3.3.2-cp313-cp313-macosx_10_14_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/8b/7c/c5dd5b255b9828ba5df729e62fdd470a322c938f07ef392ca03c0592bb3a/mapbox_earcut-2.0.0-cp313-cp313-macosx_10_13_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/94/54/e7d793b573f298e1c9013b8c4dade17d481164aa517d1d7148619c2cedbf/markdown_it_py-4.0.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/38/2f/907b9c7bbba283e68f20259574b13d005c121a0fa4c175f9bed27c4597ff/markupsafe-3.0.3-cp313-cp313-macosx_10_13_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/09/ec/4b43dae793655b7d8a25f76119624350b4d65eb663459eb9603d7f1f0345/mistune-0.8.4-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/a4/8e/469e5a4a2f5855992e425f3cb33804cc07bf18d48f2db061aec61ce50270/more_itertools-10.8.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/8a/d1/b902d38b6e5ba3bdddbec469bba388d647f960aeed7b5b3623a8debe8a76/msgspec-0.20.0-cp313-cp313-macosx_10_13_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/87/2a/371033684e4ddcda47c97661fb6e9617c0e5e3749af082a9b4d5d1bf9f27/mujoco-3.5.0-cp313-cp313-macosx_10_16_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/9e/c9/b2622292ea83fbb4ec318f5b9ab867d0a28ab43c5717bb85b0a5f6b3b0a4/networkx-3.6.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/13/3e/aef8cf8e0419b530c95e96ae93a5078e9b36c1e6613eeb1df03a80d5194e/nh3-0.3.3-cp38-abi3-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl - - pypi: https://files.pythonhosted.org/packages/88/b2/d0896bdcdc8d28a7fc5717c305f1a861c26e18c05047949fb371034d98bd/nodeenv-1.10.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/a1/22/815b9fe25d1d7ae7d492152adbc7226d3eff731dffc38fe970589fcaaa38/numpy-2.4.2-cp313-cp313-macosx_10_13_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/e3/94/1843518e420fa3ed6919835845df698c7e27e183cb997394e4a670973a65/omegaconf-2.3.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/b7/b9/c538f279a4e237a006a2c98387d081e9eb060d203d8ed34467cc0f0b9b53/packaging-26.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/14/a1/16c4b823838ba4c9c52c0e6bbda903a3fe5a1bdbf1b8eb4fff7156f3e318/pillow-12.1.1-cp313-cp313-macosx_10_13_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/48/31/05e764397056194206169869b50cf2fee4dbbbc71b344705b9c0d878d4d8/platformdirs-4.9.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/54/20/4d324d65cc6d9205fabedc306948156824eb9f0ee1633355a8f7ec5c66bf/pluggy-1.6.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/5d/19/fd3ef348460c80af7bb4669ea7926651d1f95c23ff2df18b9d24bab4f3fa/pre_commit-4.5.1-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/cb/4f/679fa7e84dadbaca7a65f7cdba8d6c83febbd93ca12fa4adf40ba3b6362b/pyarrow-23.0.1-cp313-cp313-macosx_12_0_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/4f/e4/4f2d41881fae547f06ffa4c9748fa8ed13c4db5c830ff268b84175546b3c/pybind11_stubgen-2.5.5-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/07/86/f1f61b7a0701f9d1299e5293d083318019f91021a4d449f94d59dbe024e4/pycollada-0.9.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/0c/c3/44f3fbbfa403ea2a7c779186dc20772604442dde72947e7d01069cbe98e3/pycparser-3.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/af/43/700932c4f0638c3421177144a2e86448c0d75dbaee2c7936bda3f9fd0878/pyelftools-0.32-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/c7/21/705964c7812476f378728bdf590ca4b771ec72385c533964653c68e86bdc/pygments-2.19.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/de/e4/1ba6f44e491c4eece978685230dde56b14d51a0365bc1b774ddaa94d14cd/pyopengl-3.1.10-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/bd/24/12818598c362d7f300f18e74db45963dbcb85150324092410c8b49405e42/pyproject_hooks-1.2.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/0c/82/a2c93e32800940d9573fb28c346772a14778b84ba7524e691b324620ab89/pyright-1.1.408-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/3b/ab/b3226f0bd7cdcf710fbede2b3548584366da3b19b5021e74f5bde2a8fa3f/pytest-9.0.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/ee/49/1377b49de7d0c1ce41292161ea0f721913fa8722c19fb9c1e3aa0367eecb/pytest_cov-7.0.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/ca/31/d4e37e9e550c2b92a9cbc2e4d0b7420a27224968580b5a447f420847c975/pytest_xdist-3.8.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/ec/57/56b9bcc3c9c6a792fcbaf139543cee77261f3651ca9da0c93f5c1221264b/python_dateutil-2.9.0.post0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/d1/11/0fd08f8192109f7169db964b5707a2f1e8b745d4e239b784a5a1dd80d1db/pyyaml-6.0.3-cp313-cp313-macosx_10_13_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/e1/67/921ec3024056483db83953ae8e48079ad62b92db7880013ca77632921dd0/readme_renderer-44.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/2c/58/ca301544e1fa93ed4f80d724bf5b194f6e4b945841c5bfd555878eea9fcb/referencing-0.37.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/1e/db/4254e3eabe8020b458f1a747140d32277ec7a271daf1d235b70dc0b4e6e3/requests-2.32.5-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/3f/51/d4db610ef29373b879047326cbf6fa98b6c1969d6f6dc423279de2b1be2c/requests_toolbelt-1.0.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/ff/9a/9afaade874b2fa6c752c36f1548f718b5b83af81ed9b76628329dab81c1b/rfc3986-2.0.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/ef/45/615f5babd880b4bd7d405cc0dc348234c5ffb6ed1ea33e152ede08b2072d/rich-14.3.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/16/80/579e75e0be0439d11e479732e4c194a9c6e6d152670dae561b9525015425/robot_descriptions-1.22.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/04/54/6f679c435d28e0a568d8e8a7c0a93a09010818634c3c3907fc98d8983770/roman_numerals-4.1.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/ed/dc/d61221eb88ff410de3c49143407f6f3147acf2538c86f2ab7ce65ae7d5f9/rpds_py-0.30.0-cp313-cp313-macosx_10_12_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/04/d9/108cd989a4c0954e60b3cdc86fd2826407702b5375f6dfdab2802e5fed98/rtree-1.4.1-py3-none-macosx_10_9_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/b3/ea/c8f89d32e7912269d38c58f3649e453ac32c528f93bb7f4219258be2e7ed/ruff-0.15.1-py3-none-macosx_10_12_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/0c/51/3468fdfd49387ddefee1636f5cf6d03ce603b75205bf439bbf0e62069bfd/scipy-1.17.0-cp313-cp313-macosx_10_14_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/c3/90/98ef257c23c46425dc4d1d31005ad7c8d649fe423a38b917db02c30f1f5a/shapely-2.1.2-cp313-cp313-macosx_10_13_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/b7/ce/149a00dd41f10bc29e5921b496af8b574d8413afcd5e30dfa0ed46c2cc5e/six-1.17.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/04/be/d09147ad1ec7934636ad912901c5fd7667e1c858e19d355237db0d0cd5e4/smmap-5.0.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/c8/78/3565d011c61f5a43488987ee32b6f3f656e7f107ac2782dd57bdd7d91d9a/snowballstemmer-3.0.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/46/2c/1462b1d0a634697ae9e55b3cecdcb64788e8b7d63f54d923fcd0bb140aed/soupsieve-2.8.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/73/f7/b1884cb3188ab181fc81fa00c266699dab600f927a964df02ec3d5d1916a/sphinx-9.1.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/d8/11/9825443890d3ef6b6a0db938054e7c806e9911509e0315fe984d00a090c1/sphinx_autoapi-3.7.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/3c/dd/018ce05c532a22007ac58d4f45232514cd9d6dd0ee1dc374e309db830983/sphinx_basic_ng-1.0.0b2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/38/5e/49c1330add8c48ef52e50c82d7d847e32b7f786d5ddc1cafcd36ac63f1e3/sphinxcontrib_ansi_rai-0.7.0.dev20250623-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/5d/85/9ebeae2f76e9e77b952f4b274c27238156eae7979c5421fba91a28f4970d/sphinxcontrib_applehelp-2.0.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/35/7a/987e583882f985fe4d7323774889ec58049171828b58c2217e7f79cdf44e/sphinxcontrib_devhelp-2.0.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/0a/7b/18a8c0bcec9182c05a0b3ec2a776bba4ead82750a55ff798e8d406dae604/sphinxcontrib_htmlhelp-2.1.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/c2/42/4c8646762ee83602e3fb3fbe774c2fac12f317deb0b5dbeeedd2d3ba4b77/sphinxcontrib_jsmath-1.0.1-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/84/04/53406477f01fa5bdcb1344fac421c46b6dce112d980c58237825ddb262a2/sphinxcontrib_programoutput_rai-0.18.dev0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/27/83/859ecdd180cacc13b1f7e857abf8582a64552ea7a061057a6c716e790fce/sphinxcontrib_qthelp-2.0.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/52/a7/d2782e4e3f77c8450f727ba74a8f12756d5ba823d81b941f1b04da9d033a/sphinxcontrib_serializinghtml-2.0.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/3a/83/4f5b250220e1a5acd31345a5ec1c95a7769725d0d8135276f399f44062f8/svg_path-7.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/16/e1/3079a9ff9b8e11b846c6ac5c8b5bfb7ff225eee721825310c91b3b50304f/tqdm-4.67.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/3c/b9/da09903ea53b677a58ba770112de6fe8b2acb8b4cd9bffae4ff6cfe7c072/trimesh-4.11.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/3a/7a/882d99539b19b1490cac5d77c67338d126e4122c8276bf640e411650c830/twine-6.2.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/18/67/36e9267722cc04a6b9f15c7f3441c2363321a3ea07da7ae0c0707beb2a9c/typing_extensions-4.15.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/39/08/aaaad47bc4e9dc8c725e68f9d04865dbcb2052843ff09c97b08904852d84/urllib3-2.6.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/40/db/c5729ec39ed557ac673ca993abd71e5b18d71a92f95f1845152e639000ff/uv-0.10.3-py3-none-macosx_10_12_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/0e/54/c2fc08d9324bbd92735caf9207cbabada3a8dd9d270d6e46ca69eb7f883d/vhacdx-0.0.10-cp313-cp313-macosx_10_13_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/42/4b/6cf85b485be7ec29db837ec2a1d8cd68bc1147b1abf23d8636c5bd65b3cc/virtualenv-20.37.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/b9/c4/819f000b3d64f654a054a8b24bf8d0c5e799636393135784d0886d8c808e/viser-1.0.21-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/8a/05/aa116ec9943c718905997412c5989f7ed671bc0188ee2ba89520e8765d7b/websockets-15.0.1-cp313-cp313-macosx_10_13_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/87/22/b76d483683216dde3d67cba61fb2444be8d5be289bf628c13fc0fd90e5f9/wheel-0.46.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/33/76/35d05267ac82f53ae9b0e554da7c5e281ee61f3cad44c743f0fcd354f211/xxhash-3.6.0-cp313-cp313-macosx_10_13_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/c8/60/4ea0d6df0b497d51bf2ef87eaab0eb26f8bc3b3313c012da5df3383cced9/yourdfpy-0.0.60-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/2e/54/647ade08bf0db230bfea292f893923872fd20be6ac6f53b2b936ba839d75/zipp-3.23.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/35/0b/8df9c4ad06af91d39e94fa96cc010a24ac4ef1378d3efab9223cc8593d40/zstandard-0.25.0-cp313-cp313-macosx_10_13_x86_64.whl - - pypi: ./ osx-arm64: - conda: https://conda.anaconda.org/conda-forge/osx-arm64/bzip2-1.0.8-hd037594_9.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/c-ares-1.34.6-hc919400_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.1.4-hbd8a1cb_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/cmake-4.2.3-h8cb302d_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/cmake-4.2.3-h8cb302d_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/eigen-3.4.0-h49c215f_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/icu-78.2-h38cb7af_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/krb5-1.22.2-h385eeb1_0.conda @@ -4047,8 +3441,8 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ncurses-6.5-h5e97a16_3.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/onnxruntime-cpp-1.19.2-hda9e549_0_cpu.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/openssl-3.6.1-hd24854e_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pybind11-3.0.1-pyh7a1b43c_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pybind11-global-3.0.1-pyhc7ab6ef_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pybind11-3.0.2-pyh7a1b43c_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pybind11-global-3.0.2-pyhc7ab6ef_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-3.13.12-h20e6be0_100_cp313.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.13-8_cp313.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/readline-8.3-h46df422_0.conda @@ -4074,6 +3468,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/a5/70/9b8b67a0945f3dfec1fd896c5cefb7c19d5a3a6d74630b99a895170999ae/coverage-7.13.4-cp313-cp313-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/94/35/386550fd60316d1e37eccdda609b074113298f23cef5bddb2049823fe666/dacite-1.9.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/33/6b/e0547afaf41bf2c42e52430072fa5658766e3d65bd4b03a563d1b6336f57/distlib-0.4.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/55/e2/2537ebcff11c1ee1ff17d8d0b6f4db75873e3b0fb32c2d4a2ee31ecb310a/docstring_parser-0.17.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/02/10/5da547df7a391dcde17f59520a231527b8571e6f46fc8efb02ccb370ab12/docutils-0.22.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e6/86/9ce12fbbfc365b7037666ffbc79ac93ba05690b22cac8fad8d2104577dfe/dora_rs-0.4.1-cp37-abi3-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/38/82/78d57efaf364d4ae45c5e87c5c370b0999da92ecc72f9ba96949a93faa4f/dora_rs_cli-0.4.1-cp37-abi3-macosx_11_0_arm64.whl @@ -4087,6 +3482,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/6a/09/e21df6aef1e1ffc0c816f0522ddc3f6dcded766c3261813131c78a704470/gitpython-3.1.46-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/b6/a6/6ea2f73ad4474896d9e38b3ffbe6ffd5a802c738392269e99e8c6621a461/glfw-2.10.0-py2.py27.py3.py30.py31.py32.py33.py34.py35.py36.py37.py38.py39.py310.py311.py312.py313.py314-none-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/04/4b/29cac41a4d98d144bf5f6d33995617b185d14b22401f75ca86f384e87ff1/h11-0.16.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/31/96/ba99a003c763998035b0de4c299598125df5fc6c9ccf834f152ddd60e0fb/h5py-3.15.1-cp313-cp313-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/7e/f5/f66802a942d491edb555dd61e3a9961140fd64c90bce1eafd741609d334d/httpcore-1.0.9-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/2a/39/e50c7c3a983047577ee07d2a9e53faf5a69493943ec3f6a384bdc792deb2/httpx-0.28.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c6/50/e0edd38dcd63fb26a8547f13d28f7a008bc4a3fd4eb4ff030673f22ad41a/hydra_core-1.3.2-py3-none-any.whl @@ -4114,7 +3510,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/09/ec/4b43dae793655b7d8a25f76119624350b4d65eb663459eb9603d7f1f0345/mistune-0.8.4-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a4/8e/469e5a4a2f5855992e425f3cb33804cc07bf18d48f2db061aec61ce50270/more_itertools-10.8.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/57/b6/eff0305961a1d9447ec2b02f8c73c8946f22564d302a504185b730c9a761/msgspec-0.20.0-cp313-cp313-macosx_11_0_arm64.whl - - pypi: https://files.pythonhosted.org/packages/6f/c9/26bd4979d503d03f7a6ded851c3094a5708cb534cf0dc80b4db6672da2b0/mujoco-3.5.0-cp313-cp313-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/e8/51/c3e5c3b199b1b74c85f0cb02dc0ef80363bf91ea245ee8a932804768d5e8/mujoco-3.4.0-cp313-cp313-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/9e/c9/b2622292ea83fbb4ec318f5b9ab867d0a28ab43c5717bb85b0a5f6b3b0a4/networkx-3.6.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/13/3e/aef8cf8e0419b530c95e96ae93a5078e9b36c1e6613eeb1df03a80d5194e/nh3-0.3.3-cp38-abi3-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl - pypi: https://files.pythonhosted.org/packages/88/b2/d0896bdcdc8d28a7fc5717c305f1a861c26e18c05047949fb371034d98bd/nodeenv-1.10.0-py2.py3-none-any.whl @@ -4171,11 +3567,13 @@ environments: - pypi: https://files.pythonhosted.org/packages/16/e1/3079a9ff9b8e11b846c6ac5c8b5bfb7ff225eee721825310c91b3b50304f/tqdm-4.67.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/3c/b9/da09903ea53b677a58ba770112de6fe8b2acb8b4cd9bffae4ff6cfe7c072/trimesh-4.11.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/3a/7a/882d99539b19b1490cac5d77c67338d126e4122c8276bf640e411650c830/twine-6.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d4/35/7541d1f046491fac8ce05d543d3f0de0af02086ad864dd3a23535ec703b9/typeguard-4.5.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/18/67/36e9267722cc04a6b9f15c7f3441c2363321a3ea07da7ae0c0707beb2a9c/typing_extensions-4.15.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/a7/f9/56b0cb8c5c287c7eec02735cce74a4c25cc56d6817bab7edde6f32b024a3/tyro-1.0.6-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/39/08/aaaad47bc4e9dc8c725e68f9d04865dbcb2052843ff09c97b08904852d84/urllib3-2.6.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/0b/8c/cce26f6da9f69a9f0df032d642a4cb5603249f145c368e41b0154c463ca9/uv-0.10.3-py3-none-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/63/91/c4ddf7e55e05394967615050cc364a999157a44c008d0e1e9db2ed49a11c/uv-0.10.4-py3-none-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/3b/9e/42adb642a12915acc9cb2bfab21710a6aabf045c26967ba0ff0e08a872d0/vhacdx-0.0.10-cp313-cp313-macosx_11_0_arm64.whl - - pypi: https://files.pythonhosted.org/packages/42/4b/6cf85b485be7ec29db837ec2a1d8cd68bc1147b1abf23d8636c5bd65b3cc/virtualenv-20.37.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/6a/2a/dc2228b2888f51192c7dc766106cd475f1b768c10caaf9727659726f7391/virtualenv-20.36.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/b9/c4/819f000b3d64f654a054a8b24bf8d0c5e799636393135784d0886d8c808e/viser-1.0.21-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ff/0b/33cef55ff24f2d92924923c99926dcce78e7bd922d649467f0eda8368923/websockets-15.0.1-cp313-cp313-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/87/22/b76d483683216dde3d67cba61fb2444be8d5be289bf628c13fc0fd90e5f9/wheel-0.46.3-py3-none-any.whl @@ -4187,7 +3585,7 @@ environments: win-64: - conda: https://conda.anaconda.org/conda-forge/win-64/bzip2-1.0.8-h0ad9c76_9.conda - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.1.4-h4c7d964_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/cmake-4.2.3-hdcbee5b_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/cmake-4.2.3-hdcbee5b_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/eigen-3.4.0-h477610d_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/krb5-1.22.2-h0ea6238_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libcurl-8.18.0-h8206538_1.conda @@ -4201,8 +3599,8 @@ environments: - conda: https://conda.anaconda.org/conda-forge/win-64/libzlib-1.3.1-h2466b09_2.conda - conda: https://conda.anaconda.org/conda-forge/win-64/onnxruntime-cpp-1.19.2-h50ebc8d_0_cpu.conda - conda: https://conda.anaconda.org/conda-forge/win-64/openssl-3.6.1-hf411b9b_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pybind11-3.0.1-pyh7a1b43c_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pybind11-global-3.0.1-pyh5e4992e_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pybind11-3.0.2-pyh7a1b43c_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pybind11-global-3.0.2-pyh5e4992e_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/python-3.13.12-h09917c8_100_cp313.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.13-8_cp313.conda - conda: https://conda.anaconda.org/conda-forge/win-64/tk-8.6.13-h6ed50ae_3.conda @@ -4231,6 +3629,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/e2/0c/dbfafbe90a185943dcfbc766fe0e1909f658811492d79b741523a414a6cc/coverage-7.13.4-cp313-cp313-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/94/35/386550fd60316d1e37eccdda609b074113298f23cef5bddb2049823fe666/dacite-1.9.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/33/6b/e0547afaf41bf2c42e52430072fa5658766e3d65bd4b03a563d1b6336f57/distlib-0.4.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/55/e2/2537ebcff11c1ee1ff17d8d0b6f4db75873e3b0fb32c2d4a2ee31ecb310a/docstring_parser-0.17.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/02/10/5da547df7a391dcde17f59520a231527b8571e6f46fc8efb02ccb370ab12/docutils-0.22.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/1c/d4/e8134ce7d977fd87f507b6951b53df3aa7ab91122e7d487707352336703b/dora_rs-0.4.1-cp37-abi3-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/93/a7/c53764b09b7a6e6a21d46df656513391d8429b729fdde26372d961938297/dora_rs_cli-0.4.1-cp37-abi3-win_amd64.whl @@ -4244,6 +3643,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/6a/09/e21df6aef1e1ffc0c816f0522ddc3f6dcded766c3261813131c78a704470/gitpython-3.1.46-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/bd/e1/6d6816b296a529ac9b897ad228b1e084eb1f92319e96371880eebdc874a6/glfw-2.10.0-py2.py27.py3.py30.py31.py32.py33.py34.py35.py36.py37.py38.py39.py310.py311.py312.py313.py314-none-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/04/4b/29cac41a4d98d144bf5f6d33995617b185d14b22401f75ca86f384e87ff1/h11-0.16.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e5/ea/fbb258a98863f99befb10ed727152b4ae659f322e1d9c0576f8a62754e81/h5py-3.15.1-cp313-cp313-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/7e/f5/f66802a942d491edb555dd61e3a9961140fd64c90bce1eafd741609d334d/httpcore-1.0.9-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/2a/39/e50c7c3a983047577ee07d2a9e53faf5a69493943ec3f6a384bdc792deb2/httpx-0.28.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c6/50/e0edd38dcd63fb26a8547f13d28f7a008bc4a3fd4eb4ff030673f22ad41a/hydra_core-1.3.2-py3-none-any.whl @@ -4271,7 +3671,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/09/ec/4b43dae793655b7d8a25f76119624350b4d65eb663459eb9603d7f1f0345/mistune-0.8.4-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a4/8e/469e5a4a2f5855992e425f3cb33804cc07bf18d48f2db061aec61ce50270/more_itertools-10.8.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/f1/25/5e8080fe0117f799b1b68008dc29a65862077296b92550632de015128579/msgspec-0.20.0-cp313-cp313-win_amd64.whl - - pypi: https://files.pythonhosted.org/packages/ab/53/54a0815d43c83e1074cfc7da98a3dea88d7dda48c03edfd225a387a3767b/mujoco-3.5.0-cp313-cp313-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/dc/25/bbf8c01758d619c86bcbe58db6a7d61ca423e7c76791f323b8ea2e92c2bd/mujoco-3.4.0-cp313-cp313-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/9e/c9/b2622292ea83fbb4ec318f5b9ab867d0a28ab43c5717bb85b0a5f6b3b0a4/networkx-3.6.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/73/88/1ce287ef8649dc51365b5094bd3713b76454838140a32ab4f8349973883c/nh3-0.3.3-cp38-abi3-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/88/b2/d0896bdcdc8d28a7fc5717c305f1a861c26e18c05047949fb371034d98bd/nodeenv-1.10.0-py2.py3-none-any.whl @@ -4329,11 +3729,13 @@ environments: - pypi: https://files.pythonhosted.org/packages/16/e1/3079a9ff9b8e11b846c6ac5c8b5bfb7ff225eee721825310c91b3b50304f/tqdm-4.67.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/3c/b9/da09903ea53b677a58ba770112de6fe8b2acb8b4cd9bffae4ff6cfe7c072/trimesh-4.11.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/3a/7a/882d99539b19b1490cac5d77c67338d126e4122c8276bf640e411650c830/twine-6.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d4/35/7541d1f046491fac8ce05d543d3f0de0af02086ad864dd3a23535ec703b9/typeguard-4.5.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/18/67/36e9267722cc04a6b9f15c7f3441c2363321a3ea07da7ae0c0707beb2a9c/typing_extensions-4.15.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/a7/f9/56b0cb8c5c287c7eec02735cce74a4c25cc56d6817bab7edde6f32b024a3/tyro-1.0.6-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/39/08/aaaad47bc4e9dc8c725e68f9d04865dbcb2052843ff09c97b08904852d84/urllib3-2.6.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/d5/95/89b9caeb4007d950dfa5fa5923c2ea67de541de0e3582598b7b9c7eeac53/uv-0.10.3-py3-none-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/31/dd/1900452678d46f6a649ab8167bededb02500b0561fc9f69e1f52607895c7/uv-0.10.4-py3-none-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/32/25/f0e6806824f88d47ab8bc1c9bf6f11634fd7b382d635d0696825f3b5672f/vhacdx-0.0.10-cp313-cp313-win_amd64.whl - - pypi: https://files.pythonhosted.org/packages/42/4b/6cf85b485be7ec29db837ec2a1d8cd68bc1147b1abf23d8636c5bd65b3cc/virtualenv-20.37.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/6a/2a/dc2228b2888f51192c7dc766106cd475f1b768c10caaf9727659726f7391/virtualenv-20.36.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/b9/c4/819f000b3d64f654a054a8b24bf8d0c5e799636393135784d0886d8c808e/viser-1.0.21-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/1b/6c/c65773d6cab416a64d191d6ee8a8b1c68a09970ea6909d16965d26bfed1e/websockets-15.0.1-cp313-cp313-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/87/22/b76d483683216dde3d67cba61fb2444be8d5be289bf628c13fc0fd90e5f9/wheel-0.46.3-py3-none-any.whl @@ -4519,16 +3921,6 @@ packages: purls: [] size: 260182 timestamp: 1771350215188 -- conda: https://conda.anaconda.org/conda-forge/osx-64/bzip2-1.0.8-h500dc9f_9.conda - sha256: 9f242f13537ef1ce195f93f0cc162965d6cc79da578568d6d8e50f70dd025c42 - md5: 4173ac3b19ec0a4f400b4f782910368b - depends: - - __osx >=10.13 - license: bzip2-1.0.6 - license_family: BSD - purls: [] - size: 133427 - timestamp: 1771350680709 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/bzip2-1.0.8-hd037594_9.conda sha256: 540fe54be35fac0c17feefbdc3e29725cce05d7367ffedfaaa1bdda234b019df md5: 620b85a3f45526a8bc4d23fd78fc22f0 @@ -4562,16 +3954,6 @@ packages: purls: [] size: 207882 timestamp: 1765214722852 -- conda: https://conda.anaconda.org/conda-forge/osx-64/c-ares-1.34.6-hb5e19a0_0.conda - sha256: 2f5bc0292d595399df0d168355b4e9820affc8036792d6984bd751fdda2bcaea - md5: fc9a153c57c9f070bebaa7eef30a8f17 - depends: - - __osx >=10.13 - license: MIT - license_family: MIT - purls: [] - size: 186122 - timestamp: 1765215100384 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/c-ares-1.34.6-hc919400_0.conda sha256: 2995f2aed4e53725e5efbc28199b46bf311c3cab2648fc4f10c2227d6d5fa196 md5: bcb3cba70cf1eec964a03b4ba7775f01 @@ -4698,14 +4080,14 @@ packages: version: 3.4.4 sha256: a8a8b89589086a25749f471e6a900d3f662d1d3b6e2e59dcecf787b1cc3a1894 requires_python: '>=3.7' -- conda: https://conda.anaconda.org/conda-forge/linux-64/cmake-4.2.3-hc85cc9f_0.conda - sha256: b42757cd16eb0dbf50d8a28cbdf9ae3ce84349c6b4b94ebdb1fa0234a67f2e06 - md5: 5510e057b9197282ab7a67ef41b5d76d +- conda: https://conda.anaconda.org/conda-forge/linux-64/cmake-4.2.3-hc85cc9f_1.conda + sha256: 5ece78754577b8d9030ec1f09ce1cd481125f27d8d6fcdcfe2c1017661830c61 + md5: 51d37989c1758b5edfe98518088bf700 depends: - __glibc >=2.17,<3.0.a0 - bzip2 >=1.0.8,<2.0a0 - libcurl >=8.18.0,<9.0a0 - - libexpat >=2.7.3,<3.0a0 + - libexpat >=2.7.4,<3.0a0 - libgcc >=14 - liblzma >=5.8.2,<6.0a0 - libstdcxx >=14 @@ -4717,37 +4099,17 @@ packages: license: BSD-3-Clause license_family: BSD purls: [] - size: 22336786 - timestamp: 1769597568744 -- conda: https://conda.anaconda.org/conda-forge/osx-64/cmake-4.2.3-h965d0ab_0.conda - sha256: 810818f8d4ecb287ae41e7775d1604289b17a31c7460a0d0539eaa0e686580f8 - md5: 18ebaeb950126ae545bdc60f7493d26c - depends: - - __osx >=10.13 - - bzip2 >=1.0.8,<2.0a0 - - libcurl >=8.18.0,<9.0a0 - - libcxx >=19 - - libexpat >=2.7.3,<3.0a0 - - liblzma >=5.8.2,<6.0a0 - - libuv >=1.51.0,<2.0a0 - - libzlib >=1.3.1,<2.0a0 - - ncurses >=6.5,<7.0a0 - - rhash >=1.4.6,<2.0a0 - - zstd >=1.5.7,<1.6.0a0 - license: BSD-3-Clause - license_family: BSD - purls: [] - size: 19014474 - timestamp: 1769597833959 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/cmake-4.2.3-h8cb302d_0.conda - sha256: 2c82056fe8e64f9a1a063d698339303bfe0e748ea7a98361f26764f5ad9763c7 - md5: 2d193643af6996480fd16a8a4f3e2366 + size: 22330508 + timestamp: 1771383666798 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/cmake-4.2.3-h8cb302d_1.conda + sha256: 7c5fc735986f49e1c97c6919863c78e94b800602eb1ec825a294790cceb83c8b + md5: 752945affbfd47be28dfe2286052dd90 depends: - __osx >=11.0 - bzip2 >=1.0.8,<2.0a0 - libcurl >=8.18.0,<9.0a0 - libcxx >=19 - - libexpat >=2.7.3,<3.0a0 + - libexpat >=2.7.4,<3.0a0 - liblzma >=5.8.2,<6.0a0 - libuv >=1.51.0,<2.0a0 - libzlib >=1.3.1,<2.0a0 @@ -4757,15 +4119,15 @@ packages: license: BSD-3-Clause license_family: BSD purls: [] - size: 17757212 - timestamp: 1769598999605 -- conda: https://conda.anaconda.org/conda-forge/win-64/cmake-4.2.3-hdcbee5b_0.conda - sha256: f7099bc3e4b4726a3ea3871cb6efaadedb9681dcadb21f2a38f1f2427f47ce65 - md5: b461d30f3bddd10f7511cee7729b6a55 + size: 17746308 + timestamp: 1771384392762 +- conda: https://conda.anaconda.org/conda-forge/win-64/cmake-4.2.3-hdcbee5b_1.conda + sha256: 9f66a8e231a3afce282123827bd9e8f8e0f81d4b6f3c5c809b8006db2bd8a44a + md5: ec81c32bfe49031759ffa481f44742bb depends: - bzip2 >=1.0.8,<2.0a0 - libcurl >=8.18.0,<9.0a0 - - libexpat >=2.7.3,<3.0a0 + - libexpat >=2.7.4,<3.0a0 - liblzma >=5.8.2,<6.0a0 - libuv >=1.51.0,<2.0a0 - libzlib >=1.3.1,<2.0a0 @@ -4775,8 +4137,8 @@ packages: license: BSD-3-Clause license_family: BSD purls: [] - size: 15666694 - timestamp: 1769598343922 + size: 15742645 + timestamp: 1771384342226 - pypi: https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl name: colorama version: 0.4.6 @@ -4801,13 +4163,6 @@ packages: requires_dist: - tomli ; python_full_version <= '3.11' and extra == 'toml' requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/44/d4/7827d9ffa34d5d4d752eec907022aa417120936282fc488306f5da08c292/coverage-7.13.4-cp310-cp310-macosx_10_9_x86_64.whl - name: coverage - version: 7.13.4 - sha256: 0fc31c787a84f8cd6027eba44010517020e0d18487064cd3d8968941856d1415 - requires_dist: - - tomli ; python_full_version <= '3.11' and extra == 'toml' - requires_python: '>=3.10' - pypi: https://files.pythonhosted.org/packages/5d/96/5238b1efc5922ddbdc9b0db9243152c09777804fb7c02ad1741eb18a11c0/coverage-7.13.4-cp312-cp312-macosx_11_0_arm64.whl name: coverage version: 7.13.4 @@ -4843,38 +4198,17 @@ packages: requires_dist: - tomli ; python_full_version <= '3.11' and extra == 'toml' requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/78/13/331f94934cf6c092b8ea59ff868eb587bc8fe0893f02c55bc6c0183a192e/coverage-7.13.4-cp310-cp310-win_amd64.whl - name: coverage - version: 7.13.4 - sha256: 2cb0f1e000ebc419632bbe04366a8990b6e32c4e0b51543a6484ffe15eaeda95 - requires_dist: - - tomli ; python_full_version <= '3.11' and extra == 'toml' - requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/a5/70/9b8b67a0945f3dfec1fd896c5cefb7c19d5a3a6d74630b99a895170999ae/coverage-7.13.4-cp313-cp313-macosx_11_0_arm64.whl - name: coverage - version: 7.13.4 - sha256: 3599eb3992d814d23b35c536c28df1a882caa950f8f507cef23d1cbf334995ac - requires_dist: - - tomli ; python_full_version <= '3.11' and extra == 'toml' - requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/b4/ad/b59e5b451cf7172b8d1043dc0fa718f23aab379bc1521ee13d4bd9bfa960/coverage-7.13.4-cp311-cp311-macosx_10_9_x86_64.whl - name: coverage - version: 7.13.4 - sha256: d490ba50c3f35dd7c17953c68f3270e7ccd1c6642e2d2afe2d8e720b98f5a053 - requires_dist: - - tomli ; python_full_version <= '3.11' and extra == 'toml' - requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/d1/81/4ce2fdd909c5a0ed1f6dedb88aa57ab79b6d1fbd9b588c1ac7ef45659566/coverage-7.13.4-cp312-cp312-macosx_10_13_x86_64.whl +- pypi: https://files.pythonhosted.org/packages/78/13/331f94934cf6c092b8ea59ff868eb587bc8fe0893f02c55bc6c0183a192e/coverage-7.13.4-cp310-cp310-win_amd64.whl name: coverage version: 7.13.4 - sha256: 02231499b08dabbe2b96612993e5fc34217cdae907a51b906ac7fca8027a4459 + sha256: 2cb0f1e000ebc419632bbe04366a8990b6e32c4e0b51543a6484ffe15eaeda95 requires_dist: - tomli ; python_full_version <= '3.11' and extra == 'toml' requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/db/23/aad45061a31677d68e47499197a131eea55da4875d16c1f42021ab963503/coverage-7.13.4-cp313-cp313-macosx_10_13_x86_64.whl +- pypi: https://files.pythonhosted.org/packages/a5/70/9b8b67a0945f3dfec1fd896c5cefb7c19d5a3a6d74630b99a895170999ae/coverage-7.13.4-cp313-cp313-macosx_11_0_arm64.whl name: coverage version: 7.13.4 - sha256: b66a2da594b6068b48b2692f043f35d4d3693fb639d5ea8b39533c2ad9ac3ab9 + sha256: 3599eb3992d814d23b35c536c28df1a882caa950f8f507cef23d1cbf334995ac requires_dist: - tomli ; python_full_version <= '3.11' and extra == 'toml' requires_python: '>=3.10' @@ -4985,6 +4319,17 @@ packages: name: distlib version: 0.4.0 sha256: 9659f7d87e46584a30b5780e43ac7a2143098441670ff0a49d5f9034c54a6c16 +- pypi: https://files.pythonhosted.org/packages/55/e2/2537ebcff11c1ee1ff17d8d0b6f4db75873e3b0fb32c2d4a2ee31ecb310a/docstring_parser-0.17.0-py3-none-any.whl + name: docstring-parser + version: 0.17.0 + sha256: cf2569abd23dce8099b300f9b4fa8191e9582dda731fd533daf54c4551658708 + requires_dist: + - pre-commit>=2.16.0 ; python_full_version >= '3.9' and extra == 'dev' + - pydoctor>=25.4.0 ; extra == 'dev' + - pytest ; extra == 'dev' + - pydoctor>=25.4.0 ; extra == 'docs' + - pytest ; extra == 'test' + requires_python: '>=3.8' - pypi: https://files.pythonhosted.org/packages/8f/d7/9322c609343d929e75e7e5e6255e614fcc67572cfd083959cdef3b7aad79/docutils-0.21.2-py3-none-any.whl name: docutils version: 0.21.2 @@ -5011,14 +4356,6 @@ packages: - pyarrow - pyyaml>=6.0 requires_python: '>=3.7' -- pypi: https://files.pythonhosted.org/packages/a1/ff/894f11890a526f107d3d06b0e71209b45e5a7bb3666aed23725308bbf78a/dora_rs-0.4.1.tar.gz - name: dora-rs - version: 0.4.1 - sha256: fec74e823d438c6281caf2447b077f9299380b849a5ab113961bcf5e1d061332 - requires_dist: - - pyarrow - - pyyaml>=6.0 - requires_python: '>=3.7' - pypi: https://files.pythonhosted.org/packages/e6/86/9ce12fbbfc365b7037666ffbc79ac93ba05690b22cac8fad8d2104577dfe/dora_rs-0.4.1-cp37-abi3-macosx_11_0_arm64.whl name: dora-rs version: 0.4.1 @@ -5051,14 +4388,6 @@ packages: - dora-rs>=0.3.9 - uv requires_python: '>=3.8' -- pypi: https://files.pythonhosted.org/packages/f0/45/77300cbdb4137a66eedf8e2488decffbe33e1d33ec912e54fdd02f2f3084/dora_rs_cli-0.4.1.tar.gz - name: dora-rs-cli - version: 0.4.1 - sha256: 166d6e30152c60f67567b7104a1fae5d9fc0264aea3610e1f3a244bbcc830b2b - requires_dist: - - dora-rs>=0.3.9 - - uv - requires_python: '>=3.8' - pypi: https://files.pythonhosted.org/packages/78/62/0ffc083b1d5f7c95eb03b260d2622dfacb70d1153011d216260b71c8e7d9/dora_utils-0.1.1-py3-none-any.whl name: dora-utils version: 0.1.1 @@ -5083,17 +4412,6 @@ packages: purls: [] size: 1169164 timestamp: 1759819831835 -- conda: https://conda.anaconda.org/conda-forge/osx-64/eigen-3.4.0-hfc0b2d5_1.conda - sha256: 929bf0e15495bff2a08dfc372860c10efd829b9d66a7441bbfd565b6b8c8cf5a - md5: 7e58d0dcc1f43ed4baf6d3156630cc68 - depends: - - __osx >=10.13 - - libcxx >=19 - license: MPL-2.0 - license_family: MOZILLA - purls: [] - size: 1169455 - timestamp: 1759819901548 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/eigen-3.4.0-h49c215f_1.conda sha256: 045b7e0994cc5740984551a79a56f7ff905a8deebcbdc02d6a28ad3ccae0abce md5: cceeb206b14c099ff52dc5a67b096904 @@ -5120,13 +4438,6 @@ packages: purls: [] size: 1166663 timestamp: 1759819842269 -- pypi: https://files.pythonhosted.org/packages/0d/63/4aa2cb2b1051f4b8cdf2ca8c67493f872717c72ecfbb2988c2d88c0b3ba1/embreex-2.17.7.post7-cp310-cp310-macosx_10_9_x86_64.whl - name: embreex - version: 2.17.7.post7 - sha256: d52ee8e69ccac4fbdc21227158363a52dedd4ccdf4baf6d77ac3cf71d7ca3b77 - requires_dist: - - numpy - requires_python: '>=3.8' - pypi: https://files.pythonhosted.org/packages/59/c7/410b62268fa98d9f0f2f5ab14b6e718e308a5f30dc4b9c2dcb0223d98ac8/embreex-2.17.7.post7-cp313-cp313-manylinux2010_x86_64.manylinux_2_12_x86_64.manylinux_2_28_x86_64.whl name: embreex version: 2.17.7.post7 @@ -5148,27 +4459,6 @@ packages: requires_dist: - numpy requires_python: '>=3.8' -- pypi: https://files.pythonhosted.org/packages/99/1a/e6d80ab0104ba947e1e5a0c5251021a4bf374cfe3b0d88e2be62b150170d/embreex-2.17.7.post7-cp313-cp313-macosx_10_13_x86_64.whl - name: embreex - version: 2.17.7.post7 - sha256: 377888d4f61b6d523e91b835aea3bd74193bd2b5fee9212adfe5fa0d5b80671b - requires_dist: - - numpy - requires_python: '>=3.8' -- pypi: https://files.pythonhosted.org/packages/a7/01/ed299e72f62731be03c383ee4e13191d28afd7e73a8a30012e5b12c61916/embreex-2.17.7.post7-cp312-cp312-macosx_10_13_x86_64.whl - name: embreex - version: 2.17.7.post7 - sha256: b10cddba4cc294122e5a76c6df8b042fcb291b352220ecc72b2d9559fc45c48b - requires_dist: - - numpy - requires_python: '>=3.8' -- pypi: https://files.pythonhosted.org/packages/bd/f5/222bae96165a6bd8c855ba434124daeb8aa4f4b021266ee13f2b485cb873/embreex-2.17.7.post7-cp311-cp311-macosx_10_9_x86_64.whl - name: embreex - version: 2.17.7.post7 - sha256: 8154ab34c7d6c3db01b988a83dbccb1feeb3f5d743c2ce0c34cfcc10d5472f22 - requires_dist: - - numpy - requires_python: '>=3.8' - pypi: https://files.pythonhosted.org/packages/c7/3c/bbebd5da641ff1e40b1f3d6ae77a79d5ff4a7183ef548ff8db145c91bb9b/embreex-2.17.7.post7-cp310-cp310-manylinux2010_x86_64.manylinux_2_12_x86_64.manylinux_2_28_x86_64.whl name: embreex version: 2.17.7.post7 @@ -5272,6 +4562,10 @@ packages: version: 3.24.2 sha256: 667d7dc0b7d1e1064dd5f8f8e80bdac157a6482e8d2e02cd16fd3b6b33bd6556 requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/e8/2d/d2a548598be01649e2d46231d151a6c56d10b964d94043a335ae56ea2d92/flatbuffers-25.12.19-py2.py3-none-any.whl + name: flatbuffers + version: 25.12.19 + sha256: 7634f50c427838bb021c2d66a3d1168e9d199b0607e6329399f04846d42e20b4 - pypi: https://files.pythonhosted.org/packages/e6/ab/fb21f4c939bb440104cc2b396d3be1d9b7a9fd3c6c2a53d98c45b3d7c954/fsspec-2026.2.0-py3-none-any.whl name: fsspec version: 2026.2.0 @@ -5391,23 +4685,23 @@ packages: - pygments>=2.7 - accessible-pygments>=0.0.5 requires_python: '>=3.8' -- conda: https://conda.anaconda.org/conda-forge/linux-64/gcc_impl_linux-64-13.4.0-hf2caf72_17.conda - sha256: 15741d2d66d0c6a81f14730c8e3c62a1cd5a5698f4d09d1a263d9500527183d7 - md5: 79f08f4d74db295fd4e763a4ec802295 +- conda: https://conda.anaconda.org/conda-forge/linux-64/gcc_impl_linux-64-13.4.0-he2fa53e_18.conda + sha256: a72fc88869a522547c33aa80f8e9ab9a925636f074c3688be561b36a30504dd0 + md5: 1a034b3bff9d06e2858ad7afbc3089f4 depends: - binutils_impl_linux-64 >=2.45 - libgcc >=13.4.0 - - libgcc-devel_linux-64 13.4.0 hd1d28cc_117 + - libgcc-devel_linux-64 13.4.0 hd1d28cc_118 - libgomp >=13.4.0 - - libsanitizer 13.4.0 h2a15e64_17 + - libsanitizer 13.4.0 h2a15e64_18 - libstdcxx >=13.4.0 - - libstdcxx-devel_linux-64 13.4.0 h6963c3b_117 + - libstdcxx-devel_linux-64 13.4.0 h6963c3b_118 - sysroot_linux-64 license: GPL-3.0-only WITH GCC-exception-3.1 license_family: GPL purls: [] - size: 68436137 - timestamp: 1770251783103 + size: 70043430 + timestamp: 1771377466052 - conda: https://conda.anaconda.org/conda-forge/linux-64/gcc_linux-64-13.4.0-h0a5b801_21.conda sha256: 52679edb80e5dc0ad4eeedb55170fc39b2fb44850b613f18474ab69a7d5f1161 md5: b3d6552b131695f0104a81e56f09af08 @@ -5455,12 +4749,6 @@ packages: sha256: ce6724bb7cb3d0543dcba17206dce909f94176e68220b8eafee72e9f92bcf542 requires_dist: - glfw-preview ; extra == 'preview' -- pypi: https://files.pythonhosted.org/packages/b3/87/de0b33f6f00687499ca1371f22aa73396341b85bf88f1a284f9da8842493/glfw-2.10.0-py2.py27.py3.py30.py31.py32.py33.py34.py35.py36.py37.py38.py39.py310.py311.py312.py313.py314-none-macosx_10_6_intel.whl - name: glfw - version: 2.10.0 - sha256: 2aab89d2d9535635ba011fc7303390685169a1aa6731ad580d08d043524b8899 - requires_dist: - - glfw-preview ; extra == 'preview' - pypi: https://files.pythonhosted.org/packages/b6/a6/6ea2f73ad4474896d9e38b3ffbe6ffd5a802c738392269e99e8c6621a461/glfw-2.10.0-py2.py27.py3.py30.py31.py32.py33.py34.py35.py36.py37.py38.py39.py310.py311.py312.py313.py314-none-macosx_11_0_arm64.whl name: glfw version: 2.10.0 @@ -5473,19 +4761,19 @@ packages: sha256: 823c0bd7770977d4b10e0ed0aef2f3682276b7c88b8b65cfc540afce5951392f requires_dist: - glfw-preview ; extra == 'preview' -- conda: https://conda.anaconda.org/conda-forge/linux-64/gxx_impl_linux-64-13.4.0-h6a38259_17.conda - sha256: 7dca4aac0b3a8f3e09c49dbbe687e7e137073addecb999fc29234eeca9be8125 - md5: 81a69fd491f74b0555bca0f7130bbd7c +- conda: https://conda.anaconda.org/conda-forge/linux-64/gxx_impl_linux-64-13.4.0-h6a38259_18.conda + sha256: 95676e274926fe9081205661db1a87169d9cf487bdb17072a63c1d907dfe7f8f + md5: 39904d74f923c52a10700e5804920932 depends: - - gcc_impl_linux-64 13.4.0 hf2caf72_17 - - libstdcxx-devel_linux-64 13.4.0 h6963c3b_117 + - gcc_impl_linux-64 13.4.0 he2fa53e_18 + - libstdcxx-devel_linux-64 13.4.0 h6963c3b_118 - sysroot_linux-64 - tzdata license: GPL-3.0-only WITH GCC-exception-3.1 license_family: GPL purls: [] - size: 13537723 - timestamp: 1770251988248 + size: 13997423 + timestamp: 1771377656949 - conda: https://conda.anaconda.org/conda-forge/linux-64/gxx_linux-64-13.4.0-h587059e_21.conda sha256: 39ba0fbe004490fe9efcfa360f092f272e4e89ff8246d04587d7c5218edc9e6e md5: b3b53c1b7730cc5cb21994002fa6d768 @@ -5504,6 +4792,90 @@ packages: version: 0.16.0 sha256: 63cf8bbe7522de3bf65932fda1d9c2772064ffb3dae62d55932da54b31cb6c86 requires_python: '>=3.8' +- pypi: https://files.pythonhosted.org/packages/05/8a/63f4b08f3628171ce8da1a04681a65ee7ac338fde3cb3e9e3c9f7818e4da/h5py-3.15.1-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl + name: h5py + version: 3.15.1 + sha256: 64ce3f6470adb87c06e3a8dd1b90e973699f1759ad79bfa70c230939bff356c9 + requires_dist: + - numpy>=1.21.2 + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/16/16/db2f63302937337c4e9e51d97a5984b769bdb7488e3d37632a6ac297f8ef/h5py-3.15.1-cp310-cp310-macosx_11_0_arm64.whl + name: h5py + version: 3.15.1 + sha256: 0e2f471688402c3404fa4e13466e373e622fd4b74b47b56cfdff7cc688209422 + requires_dist: + - numpy>=1.21.2 + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/23/95/499b4e56452ef8b6c95a271af0dde08dac4ddb70515a75f346d4f400579b/h5py-3.15.1-cp311-cp311-win_amd64.whl + name: h5py + version: 3.15.1 + sha256: 550e51131376889656feec4aff2170efc054a7fe79eb1da3bb92e1625d1ac878 + requires_dist: + - numpy>=1.21.2 + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/31/96/ba99a003c763998035b0de4c299598125df5fc6c9ccf834f152ddd60e0fb/h5py-3.15.1-cp313-cp313-macosx_11_0_arm64.whl + name: h5py + version: 3.15.1 + sha256: ab2219dbc6fcdb6932f76b548e2b16f34a1f52b7666e998157a4dfc02e2c4123 + requires_dist: + - numpy>=1.21.2 + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/3a/30/d1c94066343a98bb2cea40120873193a4fed68c4ad7f8935c11caf74c681/h5py-3.15.1-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl + name: h5py + version: 3.15.1 + sha256: 25c8843fec43b2cc368aa15afa1cdf83fc5e17b1c4e10cd3771ef6c39b72e5ce + requires_dist: + - numpy>=1.21.2 + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/8b/23/4ab1108e87851ccc69694b03b817d92e142966a6c4abd99e17db77f2c066/h5py-3.15.1-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl + name: h5py + version: 3.15.1 + sha256: 5b849ba619a066196169763c33f9f0f02e381156d61c03e000bb0100f9950faf + requires_dist: + - numpy>=1.21.2 + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/a4/5e/3c6f6e0430813c7aefe784d00c6711166f46225f5d229546eb53032c3707/h5py-3.15.1-cp312-cp312-macosx_11_0_arm64.whl + name: h5py + version: 3.15.1 + sha256: b51469890e58e85d5242e43aab29f5e9c7e526b951caab354f3ded4ac88e7b76 + requires_dist: + - numpy>=1.21.2 + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/c1/b0/1c628e26a0b95858f54aba17e1599e7f6cd241727596cc2580b72cb0a9bf/h5py-3.15.1-cp311-cp311-macosx_11_0_arm64.whl + name: h5py + version: 3.15.1 + sha256: c970fb80001fffabb0109eaf95116c8e7c0d3ca2de854e0901e8a04c1f098509 + requires_dist: + - numpy>=1.21.2 + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/c3/28/dc08de359c2f43a67baa529cb70d7f9599848750031975eed92d6ae78e1d/h5py-3.15.1-cp310-cp310-win_amd64.whl + name: h5py + version: 3.15.1 + sha256: 01f55111ca516f5568ae7a7fc8247dfce607de331b4467ee8a9a6ed14e5422c7 + requires_dist: + - numpy>=1.21.2 + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/cf/51/329e7436bf87ca6b0fe06dd0a3795c34bebe4ed8d6c44450a20565d57832/h5py-3.15.1-cp312-cp312-win_amd64.whl + name: h5py + version: 3.15.1 + sha256: 59b25cf02411bf12e14f803fef0b80886444c7fe21a5ad17c6a28d3f08098a1e + requires_dist: + - numpy>=1.21.2 + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/d9/69/4402ea66272dacc10b298cca18ed73e1c0791ff2ae9ed218d3859f9698ac/h5py-3.15.1-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl + name: h5py + version: 3.15.1 + sha256: 121b2b7a4c1915d63737483b7bff14ef253020f617c2fb2811f67a4bed9ac5e8 + requires_dist: + - numpy>=1.21.2 + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/e5/ea/fbb258a98863f99befb10ed727152b4ae659f322e1d9c0576f8a62754e81/h5py-3.15.1-cp313-cp313-win_amd64.whl + name: h5py + version: 3.15.1 + sha256: dea78b092fd80a083563ed79a3171258d4a4d307492e7cf8b2313d464c82ba52 + requires_dist: + - numpy>=1.21.2 + requires_python: '>=3.10' - pypi: https://files.pythonhosted.org/packages/7e/f5/f66802a942d491edb555dd61e3a9961140fd64c90bce1eafd741609d334d/httpcore-1.0.9-py3-none-any.whl name: httpcore version: 1.0.9 @@ -5839,16 +5211,18 @@ packages: - pypi: ./ name: judo-rai version: 0.0.7 - sha256: 03bc4bd68a496e5d81ee23ac8989b8d27193ca4fcb1e452796e700d4aca6f9dd + sha256: 120126caf716522546a38a8fea84e461cb32fbb6961b1a8dc3222a589ec34d1c requires_dist: - dora-utils - - mujoco>=3.5.0,<3.6 + - h5py + - mujoco==3.4.0 - numpy - pillow - pycparser - requests - rich - robot-descriptions + - tyro - scipy - viser>=1.0.0 - furo ; extra == 'docs' @@ -5936,20 +5310,6 @@ packages: purls: [] size: 1386730 timestamp: 1769769569681 -- conda: https://conda.anaconda.org/conda-forge/osx-64/krb5-1.22.2-h207b36a_0.conda - sha256: df009385e8262c234c0dae9016540b86dad3d299f0d9366d08e327e8e7731634 - md5: e66e2c52d2fdddcf314ad750fb4ebb4a - depends: - - __osx >=10.13 - - libcxx >=19 - - libedit >=3.1.20250104,<3.2.0a0 - - libedit >=3.1.20250104,<4.0a0 - - openssl >=3.5.5,<4.0a0 - license: MIT - license_family: MIT - purls: [] - size: 1193620 - timestamp: 1769770267475 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/krb5-1.22.2-h385eeb1_0.conda sha256: c0a0bf028fe7f3defcdcaa464e536cf1b202d07451e18ad83fdd169d15bef6ed md5: e446e1822f4da8e5080a9de93474184d @@ -6007,22 +5367,6 @@ packages: purls: [] size: 463621 timestamp: 1770892808818 -- conda: https://conda.anaconda.org/conda-forge/osx-64/libcurl-8.18.0-h9a2545f_1.conda - sha256: e2d8cb7c6d8dfb6c277eddbb9cf099805f40957877a48347cafddeade02f143a - md5: a6c0494188638d4bfe767f195619bb93 - depends: - - __osx >=10.13 - - krb5 >=1.22.2,<1.23.0a0 - - libnghttp2 >=1.67.0,<2.0a0 - - libssh2 >=1.11.1,<2.0a0 - - libzlib >=1.3.1,<2.0a0 - - openssl >=3.5.5,<4.0a0 - - zstd >=1.5.7,<1.6.0a0 - license: curl - license_family: MIT - purls: [] - size: 419351 - timestamp: 1770893388507 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcurl-8.18.0-hd5a2499_1.conda sha256: dbc34552fc6f040bbcd52b4246ec068ce8d82be0e76bfe45c6984097758d37c2 md5: 2742a933ef07e91f38e3d33ad6fe937c @@ -6054,16 +5398,6 @@ packages: purls: [] size: 383527 timestamp: 1770892890348 -- conda: https://conda.anaconda.org/conda-forge/osx-64/libcxx-21.1.8-h4fb565c_2.conda - sha256: 2619d471c50c466320e2aea906a4363e34efe181e61346e4453bc68264c5185f - md5: 1ac756454e65fb3fd7bc7de599526e43 - depends: - - __osx >=10.13 - license: Apache-2.0 WITH LLVM-exception - license_family: Apache - purls: [] - size: 571912 - timestamp: 1770237202404 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-21.1.8-h55c6f16_2.conda sha256: 5fbeb2fc2673f0455af6079abf93faaf27f11a92574ad51565fa1ecac9a4e2aa md5: 4cb5878bdb9ebfa65b7cdff5445087c5 @@ -6087,18 +5421,6 @@ packages: purls: [] size: 134676 timestamp: 1738479519902 -- conda: https://conda.anaconda.org/conda-forge/osx-64/libedit-3.1.20250104-pl5321ha958ccf_0.conda - sha256: 6cc49785940a99e6a6b8c6edbb15f44c2dd6c789d9c283e5ee7bdfedd50b4cd6 - md5: 1f4ed31220402fcddc083b4bff406868 - depends: - - ncurses - - __osx >=10.13 - - ncurses >=6.5,<7.0a0 - license: BSD-2-Clause - license_family: BSD - purls: [] - size: 115563 - timestamp: 1738479554273 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libedit-3.1.20250104-pl5321hafb1f1b_0.conda sha256: 66aa216a403de0bb0c1340a88d1a06adaff66bae2cfd196731aa24db9859d631 md5: 44083d2d2c2025afca315c7a172eab2b @@ -6121,14 +5443,6 @@ packages: purls: [] size: 112766 timestamp: 1702146165126 -- conda: https://conda.anaconda.org/conda-forge/osx-64/libev-4.33-h10d778d_2.conda - sha256: 0d238488564a7992942aa165ff994eca540f687753b4f0998b29b4e4d030ff43 - md5: 899db79329439820b7e8f8de41bca902 - license: BSD-2-Clause - license_family: BSD - purls: [] - size: 106663 - timestamp: 1702146352558 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libev-4.33-h93a5062_2.conda sha256: 95cecb3902fbe0399c3a7e67a5bed1db813e5ab0e22f4023a5e0f722f2cc214f md5: 36d33e440c31857372a72137f78bacf5 @@ -6150,18 +5464,6 @@ packages: purls: [] size: 76798 timestamp: 1771259418166 -- conda: https://conda.anaconda.org/conda-forge/osx-64/libexpat-2.7.4-h991f03e_0.conda - sha256: 8d9d79b2de7d6f335692391f5281607221bf5d040e6724dad4c4d77cd603ce43 - md5: a684eb8a19b2aa68fde0267df172a1e3 - depends: - - __osx >=10.13 - constrains: - - expat 2.7.4.* - license: MIT - license_family: MIT - purls: [] - size: 74578 - timestamp: 1771260142624 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libexpat-2.7.4-hf6b4638_0.conda sha256: 03887d8080d6a8fe02d75b80929271b39697ecca7628f0657d7afaea87761edf md5: a92e310ae8dfc206ff449f362fc4217f @@ -6199,16 +5501,6 @@ packages: purls: [] size: 58592 timestamp: 1769456073053 -- conda: https://conda.anaconda.org/conda-forge/osx-64/libffi-3.5.2-hd1f9c09_0.conda - sha256: 951958d1792238006fdc6fce7f71f1b559534743b26cc1333497d46e5903a2d6 - md5: 66a0dc7464927d0853b590b6f53ba3ea - depends: - - __osx >=10.13 - license: MIT - license_family: MIT - purls: [] - size: 53583 - timestamp: 1769456300951 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libffi-3.5.2-hcf2aa1b_0.conda sha256: 6686a26466a527585e6a75cc2a242bf4a3d97d6d6c86424a441677917f28bec7 md5: 43c04d9cb46ef176bb2a4c77e324d599 @@ -6231,50 +5523,50 @@ packages: purls: [] size: 45831 timestamp: 1769456418774 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-15.2.0-he0feb66_17.conda - sha256: 43860222cf3abf04ded0cf24541a105aa388e0e1d4d6ca46258e186d4e87ae3e - md5: 3c281169ea25b987311400d7a7e28445 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-15.2.0-he0feb66_18.conda + sha256: faf7d2017b4d718951e3a59d081eb09759152f93038479b768e3d612688f83f5 + md5: 0aa00f03f9e39fb9876085dee11a85d4 depends: - __glibc >=2.17,<3.0.a0 - _openmp_mutex >=4.5 constrains: - - libgcc-ng ==15.2.0=*_17 - - libgomp 15.2.0 he0feb66_17 + - libgcc-ng ==15.2.0=*_18 + - libgomp 15.2.0 he0feb66_18 license: GPL-3.0-only WITH GCC-exception-3.1 license_family: GPL purls: [] - size: 1040478 - timestamp: 1770252533873 -- conda: https://conda.anaconda.org/conda-forge/noarch/libgcc-devel_linux-64-13.4.0-hd1d28cc_117.conda - sha256: aab84d611e9edaeed827c37f2c72b40883878ed1e8c1f9e9db32312d02648561 - md5: 48502cc4089ba149ba2c7fa73f15e752 + size: 1041788 + timestamp: 1771378212382 +- conda: https://conda.anaconda.org/conda-forge/noarch/libgcc-devel_linux-64-13.4.0-hd1d28cc_118.conda + sha256: 2f4150691400ec130ffebca96f375224ed47e062f3ab4adecec4acd79463357b + md5: 1012081c5cc2806ba38bf580ca5aa3f5 depends: - __unix license: GPL-3.0-only WITH GCC-exception-3.1 license_family: GPL purls: [] - size: 2842042 - timestamp: 1770251535184 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-15.2.0-h69a702a_17.conda - sha256: bdfe50501e4a2d904a5eae65a7ae26e2b7a29b473ab084ad55d96080b966502e - md5: 1478bfa85224a65ab096d69ffd2af1e5 + size: 2844236 + timestamp: 1771377215473 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-15.2.0-h69a702a_18.conda + sha256: e318a711400f536c81123e753d4c797a821021fb38970cebfb3f454126016893 + md5: d5e96b1ed75ca01906b3d2469b4ce493 depends: - - libgcc 15.2.0 he0feb66_17 + - libgcc 15.2.0 he0feb66_18 license: GPL-3.0-only WITH GCC-exception-3.1 license_family: GPL purls: [] - size: 27541 - timestamp: 1770252546553 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-15.2.0-he0feb66_17.conda - sha256: b961b5dd9761907a7179678b58a69bb4fc16b940eb477f635aea3aec0a3f17a6 - md5: 51b78c6a757575c0d12f4401ffc67029 + size: 27526 + timestamp: 1771378224552 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-15.2.0-he0feb66_18.conda + sha256: 21337ab58e5e0649d869ab168d4e609b033509de22521de1bfed0c031bfc5110 + md5: 239c5e9546c38a1e884d69effcf4c882 depends: - __glibc >=2.17,<3.0.a0 license: GPL-3.0-only WITH GCC-exception-3.1 license_family: GPL purls: [] - size: 603334 - timestamp: 1770252441199 + size: 603262 + timestamp: 1771378117851 - conda: https://conda.anaconda.org/conda-forge/linux-64/liblzma-5.8.2-hb03c661_0.conda sha256: 755c55ebab181d678c12e49cced893598f2bab22d582fbbf4d8b83c18be207eb md5: c7c83eecbb72d88b940c249af56c8b17 @@ -6287,17 +5579,6 @@ packages: purls: [] size: 113207 timestamp: 1768752626120 -- conda: https://conda.anaconda.org/conda-forge/osx-64/liblzma-5.8.2-h11316ed_0.conda - sha256: 7ab3c98abd3b5d5ec72faa8d9f5d4b50dcee4970ed05339bc381861199dabb41 - md5: 688a0c3d57fa118b9c97bf7e471ab46c - depends: - - __osx >=10.13 - constrains: - - xz 5.8.2.* - license: 0BSD - purls: [] - size: 105482 - timestamp: 1768753411348 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblzma-5.8.2-h8088a28_0.conda sha256: 7bfc7ffb2d6a9629357a70d4eadeadb6f88fa26ebc28f606b1c1e5e5ed99dc7e md5: 009f0d956d7bfb00de86901d16e486c7 @@ -6333,16 +5614,6 @@ packages: purls: [] size: 92400 timestamp: 1769482286018 -- conda: https://conda.anaconda.org/conda-forge/osx-64/libmpdec-4.0.0-hf3981d6_1.conda - sha256: 1096c740109386607938ab9f09a7e9bca06d86770a284777586d6c378b8fb3fd - md5: ec88ba8a245855935b871a7324373105 - depends: - - __osx >=10.13 - license: BSD-2-Clause - license_family: BSD - purls: [] - size: 79899 - timestamp: 1769482558610 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libmpdec-4.0.0-h84a0fba_1.conda sha256: 1089c7f15d5b62c622625ec6700732ece83be8b705da8c6607f4dabb0c4bd6d2 md5: 57c4be259f5e0b99a5983799a228ae55 @@ -6382,22 +5653,6 @@ packages: purls: [] size: 666600 timestamp: 1756834976695 -- conda: https://conda.anaconda.org/conda-forge/osx-64/libnghttp2-1.67.0-h3338091_0.conda - sha256: c48d7e1cc927aef83ff9c48ae34dd1d7495c6ccc1edc4a3a6ba6aff1624be9ac - md5: e7630cef881b1174d40f3e69a883e55f - depends: - - __osx >=10.13 - - c-ares >=1.34.5,<2.0a0 - - libcxx >=19 - - libev >=4.33,<4.34.0a0 - - libev >=4.33,<5.0a0 - - libzlib >=1.3.1,<2.0a0 - - openssl >=3.5.2,<4.0a0 - license: MIT - license_family: MIT - purls: [] - size: 605680 - timestamp: 1756835898134 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libnghttp2-1.67.0-hc438710_0.conda sha256: a07cb53b5ffa2d5a18afc6fd5a526a5a53dd9523fbc022148bd2f9395697c46d md5: a4b4dd73c67df470d091312ab87bf6ae @@ -6425,9 +5680,9 @@ packages: purls: [] size: 33731 timestamp: 1750274110928 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libsanitizer-13.4.0-h2a15e64_17.conda - sha256: f19155c9f903fecdfa245375efb3acecc6705a98e4a92f98da68666aed1dc688 - md5: a6ccff30f4c3589ff9a01c592d737da6 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libsanitizer-13.4.0-h2a15e64_18.conda + sha256: 019d5635f8b546e70886740a255f0ad92f777a990d504d7bb945539b16dbaee1 + md5: d4cccd80dee79958aa4581987d8f375d depends: - __glibc >=2.17,<3.0.a0 - libgcc >=13.4.0 @@ -6435,8 +5690,8 @@ packages: license: GPL-3.0-only WITH GCC-exception-3.1 license_family: GPL purls: [] - size: 6455923 - timestamp: 1770251716838 + size: 6591860 + timestamp: 1771377400521 - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.51.2-hf4e2dac_0.conda sha256: 04596fcee262a870e4b7c9807224680ff48d4d0cc0dac076a602503d3dc6d217 md5: da5be73701eecd0e8454423fd6ffcf30 @@ -6449,16 +5704,6 @@ packages: purls: [] size: 942808 timestamp: 1768147973361 -- conda: https://conda.anaconda.org/conda-forge/osx-64/libsqlite-3.51.2-hb99441e_0.conda - sha256: 710a7ea27744199023c92e66ad005de7f8db9cf83f10d5a943d786f0dac53b7c - md5: d910105ce2b14dfb2b32e92ec7653420 - depends: - - __osx >=10.13 - - libzlib >=1.3.1,<2.0a0 - license: blessing - purls: [] - size: 987506 - timestamp: 1768148247615 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.51.2-h1ae2325_0.conda sha256: 6e9b9f269732cbc4698c7984aa5b9682c168e2a8d1e0406e1ff10091ca046167 md5: 4b0bf313c53c3e89692f020fb55d5f2c @@ -6494,18 +5739,6 @@ packages: purls: [] size: 304790 timestamp: 1745608545575 -- conda: https://conda.anaconda.org/conda-forge/osx-64/libssh2-1.11.1-hed3591d_0.conda - sha256: 00654ba9e5f73aa1f75c1f69db34a19029e970a4aeb0fa8615934d8e9c369c3c - md5: a6cb15db1c2dc4d3a5f6cf3772e09e81 - depends: - - __osx >=10.13 - - libzlib >=1.3.1,<2.0a0 - - openssl >=3.5.0,<4.0a0 - license: BSD-3-Clause - license_family: BSD - purls: [] - size: 284216 - timestamp: 1745608575796 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libssh2-1.11.1-h1590b86_0.conda sha256: 8bfe837221390ffc6f111ecca24fa12d4a6325da0c8d131333d63d6c37f27e0a md5: b68e8f66b94b44aaa8de4583d3d4cc40 @@ -6531,39 +5764,39 @@ packages: purls: [] size: 292785 timestamp: 1745608759342 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-15.2.0-h934c35e_17.conda - sha256: 50c48cd3716a2e58e8e2e02edc78fef2d08fffe1e3b1ed40eb5f87e7e2d07889 - md5: 24c2fe35fa45cd71214beba6f337c071 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-15.2.0-h934c35e_18.conda + sha256: 78668020064fdaa27e9ab65cd2997e2c837b564ab26ce3bf0e58a2ce1a525c6e + md5: 1b08cd684f34175e4514474793d44bcb depends: - __glibc >=2.17,<3.0.a0 - - libgcc 15.2.0 he0feb66_17 + - libgcc 15.2.0 he0feb66_18 constrains: - - libstdcxx-ng ==15.2.0=*_17 + - libstdcxx-ng ==15.2.0=*_18 license: GPL-3.0-only WITH GCC-exception-3.1 license_family: GPL purls: [] - size: 5852406 - timestamp: 1770252584235 -- conda: https://conda.anaconda.org/conda-forge/noarch/libstdcxx-devel_linux-64-13.4.0-h6963c3b_117.conda - sha256: 77e73206ad4252c9fc9ba77277d7cf2726127c6014659a96efdc17ebcd9328f6 - md5: b3d2730b4e89fa37af7b7e7daa57fed9 + size: 5852330 + timestamp: 1771378262446 +- conda: https://conda.anaconda.org/conda-forge/noarch/libstdcxx-devel_linux-64-13.4.0-h6963c3b_118.conda + sha256: 29477fff696ba73c22dbb958835d0c9d6d78bac8df8fabe29b9508c4ada3e6b3 + md5: 2aa85201a0eed4ea8eb47aed81e2cbbe depends: - __unix license: GPL-3.0-only WITH GCC-exception-3.1 license_family: GPL purls: [] - size: 19914267 - timestamp: 1770251574692 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-15.2.0-hdf11a46_17.conda - sha256: ca3fb322dab3373946b1064da686ec076f5b1b9caf0a2823dad00d0b0f704928 - md5: ea12f5a6bf12c88c06750d9803e1a570 + size: 19902036 + timestamp: 1771377254135 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-15.2.0-hdf11a46_18.conda + sha256: 3c902ffd673cb3c6ddde624cdb80f870b6c835f8bf28384b0016e7d444dd0145 + md5: 6235adb93d064ecdf3d44faee6f468de depends: - - libstdcxx 15.2.0 h934c35e_17 + - libstdcxx 15.2.0 h934c35e_18 license: GPL-3.0-only WITH GCC-exception-3.1 license_family: GPL purls: [] - size: 27573 - timestamp: 1770252638797 + size: 27575 + timestamp: 1771378314494 - conda: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.41.3-h5347b49_0.conda sha256: 1a7539cfa7df00714e8943e18de0b06cceef6778e420a5ee3a2a145773758aee md5: db409b7c1720428638e7c0d509d3e1b5 @@ -6586,16 +5819,6 @@ packages: purls: [] size: 895108 timestamp: 1753948278280 -- conda: https://conda.anaconda.org/conda-forge/osx-64/libuv-1.51.0-h58003a5_1.conda - sha256: d90dd0eee6f195a5bd14edab4c5b33be3635b674b0b6c010fb942b956aa2254c - md5: fbfc6cf607ae1e1e498734e256561dc3 - depends: - - __osx >=10.13 - license: MIT - license_family: MIT - purls: [] - size: 422612 - timestamp: 1753948458902 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libuv-1.51.0-h6caf38d_1.conda sha256: 042c7488ad97a5629ec0a991a8b2a3345599401ecc75ad6a5af73b60e6db9689 md5: c0d87c3c8e075daf1daf6c31b53e8083 @@ -6640,18 +5863,6 @@ packages: purls: [] size: 60963 timestamp: 1727963148474 -- conda: https://conda.anaconda.org/conda-forge/osx-64/libzlib-1.3.1-hd23fc13_2.conda - sha256: 8412f96504fc5993a63edf1e211d042a1fd5b1d51dedec755d2058948fcced09 - md5: 003a54a4e32b02f7355b50a837e699da - depends: - - __osx >=10.13 - constrains: - - zlib 1.3.1 *_2 - license: Zlib - license_family: Other - purls: [] - size: 57133 - timestamp: 1727963183990 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libzlib-1.3.1-h8359307_2.conda sha256: ce34669eadaba351cd54910743e6a2261b67009624dbc7daeeafdef93616711b md5: 369964e85dc26bfe78f41399b366c435 @@ -6678,16 +5889,6 @@ packages: purls: [] size: 55476 timestamp: 1727963768015 -- pypi: https://files.pythonhosted.org/packages/12/64/27bcd07ae17ff5e5536e8d88f4c7d581b48963817a13de11f3ac3329bfa2/lxml-6.0.2-cp310-cp310-macosx_10_9_x86_64.whl - name: lxml - version: 6.0.2 - sha256: 5d444858b9f07cefff6455b983aea9a67f7462ba1f6cbe4a21e8bf6791bf2153 - requires_dist: - - cssselect>=0.7 ; extra == 'cssselect' - - html5lib ; extra == 'html5' - - beautifulsoup4 ; extra == 'htmlsoup' - - lxml-html-clean ; extra == 'html-clean' - requires_python: '>=3.8' - pypi: https://files.pythonhosted.org/packages/20/cf/cab09478699b003857ed6ebfe95e9fb9fa3d3c25f1353b905c9b73cfb624/lxml-6.0.2-cp310-cp310-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl name: lxml version: 6.0.2 @@ -6698,26 +5899,6 @@ packages: - beautifulsoup4 ; extra == 'htmlsoup' - lxml-html-clean ; extra == 'html-clean' requires_python: '>=3.8' -- pypi: https://files.pythonhosted.org/packages/28/66/1ced58f12e804644426b85d0bb8a4478ca77bc1761455da310505f1a3526/lxml-6.0.2-cp311-cp311-macosx_10_9_x86_64.whl - name: lxml - version: 6.0.2 - sha256: 3b1675e096e17c6fe9c0e8c81434f5736c0739ff9ac6123c87c2d452f48fc938 - requires_dist: - - cssselect>=0.7 ; extra == 'cssselect' - - html5lib ; extra == 'html5' - - beautifulsoup4 ; extra == 'htmlsoup' - - lxml-html-clean ; extra == 'html-clean' - requires_python: '>=3.8' -- pypi: https://files.pythonhosted.org/packages/37/6f/9aae1008083bb501ef63284220ce81638332f9ccbfa53765b2b7502203cf/lxml-6.0.2-cp312-cp312-macosx_10_13_x86_64.whl - name: lxml - version: 6.0.2 - sha256: e8113639f3296706fbac34a30813929e29247718e88173ad849f57ca59754924 - requires_dist: - - cssselect>=0.7 ; extra == 'cssselect' - - html5lib ; extra == 'html5' - - beautifulsoup4 ; extra == 'htmlsoup' - - lxml-html-clean ; extra == 'html-clean' - requires_python: '>=3.8' - pypi: https://files.pythonhosted.org/packages/53/fd/4e8f0540608977aea078bf6d79f128e0e2c2bba8af1acf775c30baa70460/lxml-6.0.2-cp313-cp313-macosx_10_13_universal2.whl name: lxml version: 6.0.2 @@ -6728,16 +5909,6 @@ packages: - beautifulsoup4 ; extra == 'htmlsoup' - lxml-html-clean ; extra == 'html-clean' requires_python: '>=3.8' -- pypi: https://files.pythonhosted.org/packages/5d/f4/2a94a3d3dfd6c6b433501b8d470a1960a20ecce93245cf2db1706adf6c19/lxml-6.0.2-cp313-cp313-macosx_10_13_x86_64.whl - name: lxml - version: 6.0.2 - sha256: 6c8963287d7a4c5c9a432ff487c52e9c5618667179c18a204bdedb27310f022f - requires_dist: - - cssselect>=0.7 ; extra == 'cssselect' - - html5lib ; extra == 'html5' - - beautifulsoup4 ; extra == 'htmlsoup' - - lxml-html-clean ; extra == 'html-clean' - requires_python: '>=3.8' - pypi: https://files.pythonhosted.org/packages/77/d5/becbe1e2569b474a23f0c672ead8a29ac50b2dc1d5b9de184831bda8d14c/lxml-6.0.2-cp311-cp311-macosx_10_9_universal2.whl name: lxml version: 6.0.2 @@ -6870,14 +6041,6 @@ packages: - numpy ; python_full_version < '3.12' - numpy>=1.26.0b1 ; python_full_version >= '3.12' requires_python: '>=3.8' -- pypi: https://files.pythonhosted.org/packages/17/1a/8b4d3b0b61d59dda57688e86c9703ef3aad5f040ea2b453ab10f3ba7f2fc/manifold3d-3.3.2-cp310-cp310-macosx_10_14_x86_64.whl - name: manifold3d - version: 3.3.2 - sha256: 1be8a26337b6c2f5b3eb82662332a2dbd18b679dc99dd1f45309a942c4066d22 - requires_dist: - - numpy ; python_full_version < '3.12' - - numpy>=1.26.0b1 ; python_full_version >= '3.12' - requires_python: '>=3.8' - pypi: https://files.pythonhosted.org/packages/1f/14/24ad90c7d9a6532c32b0392f1c3518bbab5e37092c99cc69bed17d30fb0c/manifold3d-3.3.2-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl name: manifold3d version: 3.3.2 @@ -6910,22 +6073,6 @@ packages: - numpy ; python_full_version < '3.12' - numpy>=1.26.0b1 ; python_full_version >= '3.12' requires_python: '>=3.8' -- pypi: https://files.pythonhosted.org/packages/a4/fc/2b139e784922380e42d005bac6e9ae11d707345bbb2318a8a61c2242f405/manifold3d-3.3.2-cp311-cp311-macosx_10_14_x86_64.whl - name: manifold3d - version: 3.3.2 - sha256: 4f479d127f31eaa9471a670c66f9f2a104d2dde4807adce04c82aa8e93e8aa86 - requires_dist: - - numpy ; python_full_version < '3.12' - - numpy>=1.26.0b1 ; python_full_version >= '3.12' - requires_python: '>=3.8' -- pypi: https://files.pythonhosted.org/packages/a7/f5/9ae489a466543ca8f35f2eeeed7f043f714223e0905eaf62b2fce4684a07/manifold3d-3.3.2-cp313-cp313-macosx_10_14_x86_64.whl - name: manifold3d - version: 3.3.2 - sha256: 96133be45198c212227b2409888c7ff1d3d621c7e9aa25cf348f7f8dc75288a4 - requires_dist: - - numpy ; python_full_version < '3.12' - - numpy>=1.26.0b1 ; python_full_version >= '3.12' - requires_python: '>=3.8' - pypi: https://files.pythonhosted.org/packages/c7/b3/2e594511e45e2f315e61e4d0d42e71d3ee61502dc0fc16ad7a57eaad6114/manifold3d-3.3.2-cp311-cp311-macosx_11_0_arm64.whl name: manifold3d version: 3.3.2 @@ -6950,14 +6097,6 @@ packages: - numpy ; python_full_version < '3.12' - numpy>=1.26.0b1 ; python_full_version >= '3.12' requires_python: '>=3.8' -- pypi: https://files.pythonhosted.org/packages/f0/d6/b04443dfb6731c83c7162d760b987b24fb8d5b4eeeeeee2d06c169d367fb/manifold3d-3.3.2-cp312-cp312-macosx_10_14_x86_64.whl - name: manifold3d - version: 3.3.2 - sha256: e801de5a53eac6de9a3d7722558d645341c01deb44e9c276fd2245015714f125 - requires_dist: - - numpy ; python_full_version < '3.12' - - numpy>=1.26.0b1 ; python_full_version >= '3.12' - requires_python: '>=3.8' - pypi: https://files.pythonhosted.org/packages/f4/1d/5c2d96b18a603cf8d121efd129c0beb1ab902115f0eda3f9ee5b349b5924/manifold3d-3.3.2-cp313-cp313-macosx_11_0_arm64.whl name: manifold3d version: 3.3.2 @@ -6983,15 +6122,6 @@ packages: - pytest>=8.0 ; extra == 'dev' - mypy ; extra == 'dev' requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/07/9f/fbd15d9e348e75e986d6912c4eab99888106b7e5fb0a01e765422f7cd464/mapbox_earcut-2.0.0-cp311-cp311-macosx_10_13_x86_64.whl - name: mapbox-earcut - version: 2.0.0 - sha256: 9b5040e79e3783295e99c90277f31c1cbaddd3335297275331995ba5680e3649 - requires_dist: - - numpy - - pytest>=8.0 ; extra == 'dev' - - mypy ; extra == 'dev' - requires_python: '>=3.9' - pypi: https://files.pythonhosted.org/packages/19/e4/88d06e83ab75db2f4ae140a1e03ad8f84b02ac8af585dd61108aba73b8ed/mapbox_earcut-2.0.0-cp310-cp310-macosx_11_0_arm64.whl name: mapbox-earcut version: 2.0.0 @@ -7055,33 +6185,6 @@ packages: - pytest>=8.0 ; extra == 'dev' - mypy ; extra == 'dev' requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/8b/7c/c5dd5b255b9828ba5df729e62fdd470a322c938f07ef392ca03c0592bb3a/mapbox_earcut-2.0.0-cp313-cp313-macosx_10_13_x86_64.whl - name: mapbox-earcut - version: 2.0.0 - sha256: 582329a81bd36cf0f82e443c395bcb8cfdb10caddafec76acaebac7c20bf1c31 - requires_dist: - - numpy - - pytest>=8.0 ; extra == 'dev' - - mypy ; extra == 'dev' - requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/8d/93/846804029d955c3c841d8efff77c2b0e8d9aab057d3a077dc8e3f88b5ea4/mapbox_earcut-2.0.0-cp312-cp312-macosx_10_13_x86_64.whl - name: mapbox-earcut - version: 2.0.0 - sha256: db55ce18e698bc9d90914ee7d4f8c3e4d23827456ece7c5d7a1ec91e90c7122b - requires_dist: - - numpy - - pytest>=8.0 ; extra == 'dev' - - mypy ; extra == 'dev' - requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/a8/d3/5222339a8fad091bf64f2e3041e48606d69d69f0609a7632ca17a8a05d5a/mapbox_earcut-2.0.0-cp310-cp310-macosx_10_13_x86_64.whl - name: mapbox-earcut - version: 2.0.0 - sha256: c9a1dab7529f8e54bdb377f908e56f1e2b9a7e27ed168c64d3c7c38ed04ac201 - requires_dist: - - numpy - - pytest>=8.0 ; extra == 'dev' - - mypy ; extra == 'dev' - requires_python: '>=3.9' - pypi: https://files.pythonhosted.org/packages/b8/84/7b78e37b0c2109243c0dad7d9ba9774b02fcee228bf61cf727a5aa1702e2/mapbox_earcut-2.0.0-cp312-cp312-win_amd64.whl name: mapbox-earcut version: 2.0.0 @@ -7156,31 +6259,16 @@ packages: version: 3.0.3 sha256: 9a1abfdc021a164803f4d485104931fb8f8c1efd55bc6b748d2f5774e78b62c5 requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/08/db/fefacb2136439fc8dd20e797950e749aa1f4997ed584c62cfb8ef7c2be0e/markupsafe-3.0.3-cp311-cp311-macosx_10_9_x86_64.whl - name: markupsafe - version: 3.0.3 - sha256: 1cc7ea17a6824959616c525620e387f6dd30fec8cb44f649e31712db02123dad - requires_python: '>=3.9' - pypi: https://files.pythonhosted.org/packages/30/ac/0273f6fcb5f42e314c6d8cd99effae6a5354604d461b8d392b5ec9530a54/markupsafe-3.0.3-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl name: markupsafe version: 3.0.3 sha256: 0bf2a864d67e76e5c9a34dc26ec616a66b9888e25e7b9460e1c76d3293bd9dbf requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/38/2f/907b9c7bbba283e68f20259574b13d005c121a0fa4c175f9bed27c4597ff/markupsafe-3.0.3-cp313-cp313-macosx_10_13_x86_64.whl - name: markupsafe - version: 3.0.3 - sha256: e1cf1972137e83c5d4c136c43ced9ac51d0e124706ee1c8aa8532c1287fa8795 - requires_python: '>=3.9' - pypi: https://files.pythonhosted.org/packages/3c/2e/8d0c2ab90a8c1d9a24f0399058ab8519a3279d1bd4289511d74e909f060e/markupsafe-3.0.3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl name: markupsafe version: 3.0.3 sha256: d6dd0be5b5b189d31db7cda48b91d7e0a9795f31430b7f271219ab30f1d3ac9d requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/5a/72/147da192e38635ada20e0a2e1a51cf8823d2119ce8883f7053879c2199b5/markupsafe-3.0.3-cp312-cp312-macosx_10_13_x86_64.whl - name: markupsafe - version: 3.0.3 - sha256: d53197da72cc091b024dd97249dfc7794d6a56530370992a5e1a08983ad9230e - requires_python: '>=3.9' - pypi: https://files.pythonhosted.org/packages/83/8a/4414c03d3f891739326e1783338e48fb49781cc915b2e0ee052aa490d586/markupsafe-3.0.3-cp311-cp311-win_amd64.whl name: markupsafe version: 3.0.3 @@ -7226,11 +6314,6 @@ packages: version: 3.0.3 sha256: 4bd4cd07944443f5a265608cc6aab442e4f74dff8088b0dfc8238647b8f6ae9a requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/e8/4b/3541d44f3937ba468b75da9eebcae497dcf67adb65caa16760b0a6807ebb/markupsafe-3.0.3-cp310-cp310-macosx_10_9_x86_64.whl - name: markupsafe - version: 3.0.3 - sha256: 2f981d352f04553a7171b8e44369f2af4055f888dfb147d55e42d29e29e74559 - requires_python: '>=3.9' - pypi: https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl name: mdurl version: 0.1.2 @@ -7240,20 +6323,40 @@ packages: name: mistune version: 0.8.4 sha256: 88a1051873018da288eee8538d476dffe1262495144b33ecb586c4ab266bb8d4 +- pypi: https://files.pythonhosted.org/packages/eb/33/40cd74219417e78b97c47802037cf2d87b91973e18bb968a7da48a96ea44/ml_dtypes-0.5.4-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl + name: ml-dtypes + version: 0.5.4 + sha256: 533ce891ba774eabf607172254f2e7260ba5f57bdd64030c9a4fcfbd99815d0d + requires_dist: + - numpy>=1.21 + - numpy>=1.21.2 ; python_full_version >= '3.10' + - numpy>=1.23.3 ; python_full_version >= '3.11' + - numpy>=1.26.0 ; python_full_version >= '3.12' + - numpy>=2.1.0 ; python_full_version >= '3.13' + - absl-py ; extra == 'dev' + - pytest ; extra == 'dev' + - pytest-xdist ; extra == 'dev' + - pylint>=2.6.0 ; extra == 'dev' + - pyink ; extra == 'dev' + requires_python: '>=3.9' - pypi: https://files.pythonhosted.org/packages/a4/8e/469e5a4a2f5855992e425f3cb33804cc07bf18d48f2db061aec61ce50270/more_itertools-10.8.0-py3-none-any.whl name: more-itertools version: 10.8.0 sha256: 52d4362373dcf7c52546bc4af9a86ee7c4579df9a8dc268be0a2f949d376cc9b requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/03/59/fdcb3af72f750a8de2bcf39d62ada70b5eb17b06d7f63860e0a679cb656b/msgspec-0.20.0-cp311-cp311-macosx_10_9_x86_64.whl - name: msgspec - version: 0.20.0 - sha256: 09e0efbf1ac641fedb1d5496c59507c2f0dc62a052189ee62c763e0aae217520 +- pypi: https://files.pythonhosted.org/packages/43/e3/7d92a15f894aa0c9c4b49b8ee9ac9850d6e63b03c9c32c0367a13ae62209/mpmath-1.3.0-py3-none-any.whl + name: mpmath + version: 1.3.0 + sha256: a0b2b9fe80bbcd81a6647ff13108738cfb482d481d826cc0e02f5b35e5c88d2c requires_dist: - - tomli ; python_full_version < '3.11' and extra == 'toml' - - tomli-w ; extra == 'toml' - - pyyaml ; extra == 'yaml' - requires_python: '>=3.9' + - pytest>=4.6 ; extra == 'develop' + - pycodestyle ; extra == 'develop' + - pytest-cov ; extra == 'develop' + - codecov ; extra == 'develop' + - wheel ; extra == 'develop' + - sphinx ; extra == 'docs' + - gmpy2>=2.1.0a4 ; platform_python_implementation != 'PyPy' and extra == 'gmpy' + - pytest>=4.6 ; extra == 'tests' - pypi: https://files.pythonhosted.org/packages/15/2a/48e41d9ef0a24b1c6e67cbd94a676799e0561bfbc163be1aaaff5ca853f5/msgspec-0.20.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl name: msgspec version: 0.20.0 @@ -7344,15 +6447,6 @@ packages: - tomli-w ; extra == 'toml' - pyyaml ; extra == 'yaml' requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/8a/d1/b902d38b6e5ba3bdddbec469bba388d647f960aeed7b5b3623a8debe8a76/msgspec-0.20.0-cp313-cp313-macosx_10_13_x86_64.whl - name: msgspec - version: 0.20.0 - sha256: 9c1ff8db03be7598b50dd4b4a478d6fe93faae3bd54f4f17aa004d0e46c14c46 - requires_dist: - - tomli ; python_full_version < '3.11' and extra == 'toml' - - tomli-w ; extra == 'toml' - - pyyaml ; extra == 'yaml' - requires_python: '>=3.9' - pypi: https://files.pythonhosted.org/packages/98/bd/5db3c14d675ee12842afb9b70c94c64f2c873f31198c46cbfcd7dffafab0/msgspec-0.20.0-cp310-cp310-win_amd64.whl name: msgspec version: 0.20.0 @@ -7362,24 +6456,6 @@ packages: - tomli-w ; extra == 'toml' - pyyaml ; extra == 'yaml' requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/d9/6f/1e25eee957e58e3afb2a44b94fa95e06cebc4c236193ed0de3012fff1e19/msgspec-0.20.0-cp312-cp312-macosx_10_13_x86_64.whl - name: msgspec - version: 0.20.0 - sha256: 2aba22e2e302e9231e85edc24f27ba1f524d43c223ef5765bd8624c7df9ec0a5 - requires_dist: - - tomli ; python_full_version < '3.11' and extra == 'toml' - - tomli-w ; extra == 'toml' - - pyyaml ; extra == 'yaml' - requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/e3/5e/151883ba2047cca9db8ed2f86186b054ad200bc231352df15b0c1dd75b1f/msgspec-0.20.0-cp310-cp310-macosx_10_9_x86_64.whl - name: msgspec - version: 0.20.0 - sha256: 23a6ec2a3b5038c233b04740a545856a068bc5cb8db184ff493a58e08c994fbf - requires_dist: - - tomli ; python_full_version < '3.11' and extra == 'toml' - - tomli-w ; extra == 'toml' - - pyyaml ; extra == 'yaml' - requires_python: '>=3.9' - pypi: https://files.pythonhosted.org/packages/f1/25/5e8080fe0117f799b1b68008dc29a65862077296b92550632de015128579/msgspec-0.20.0-cp313-cp313-win_amd64.whl name: msgspec version: 0.20.0 @@ -7389,374 +6465,184 @@ packages: - tomli-w ; extra == 'toml' - pyyaml ; extra == 'yaml' requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/02/37/527d83610b878f27c01dd762e0e41aaa62f095c607f0500ac7f724a2c7a5/mujoco-3.5.0-cp312-cp312-win_amd64.whl - name: mujoco - version: 3.5.0 - sha256: 4b3a62af174ab59b9b6d816dca0786b7fd85ac081d6c2a931a2b22dd6e821f50 - requires_dist: - - absl-py - - etils[epath] - - glfw - - numpy - - pyopengl - - absl-py ; extra == 'sysid' - - colorama ; extra == 'sysid' - - imageio[ffmpeg] ; extra == 'sysid' - - jinja2 ; extra == 'sysid' - - matplotlib ; extra == 'sysid' - - plotly ; extra == 'sysid' - - pyyaml ; extra == 'sysid' - - scipy ; extra == 'sysid' - - tabulate ; extra == 'sysid' - - typing-extensions ; extra == 'sysid' - - usd-core ; extra == 'usd' - - pillow ; extra == 'usd' - requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/16/47/93c7ac3a9630b49c55d76b0d02aa565543e2f62cecd885f8f574f5c745e7/mujoco-3.5.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl - name: mujoco - version: 3.5.0 - sha256: a956520adb275ce8e878da29e2586eac3affc7b7ac772065ef01f2380a9e8784 - requires_dist: - - absl-py - - etils[epath] - - glfw - - numpy - - pyopengl - - absl-py ; extra == 'sysid' - - colorama ; extra == 'sysid' - - imageio[ffmpeg] ; extra == 'sysid' - - jinja2 ; extra == 'sysid' - - matplotlib ; extra == 'sysid' - - plotly ; extra == 'sysid' - - pyyaml ; extra == 'sysid' - - scipy ; extra == 'sysid' - - tabulate ; extra == 'sysid' - - typing-extensions ; extra == 'sysid' - - usd-core ; extra == 'usd' - - pillow ; extra == 'usd' - requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/47/14/d5bf98385354318ec2e6c466a8c7cf7fd76f8b711ed6d11d155e2baa81fb/mujoco-3.5.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl - name: mujoco - version: 3.5.0 - sha256: ba54826121c6857fc4ca82df642d9a89174ce5537677c6ead34844bb692437e3 - requires_dist: - - absl-py - - etils[epath] - - glfw - - numpy - - pyopengl - - absl-py ; extra == 'sysid' - - colorama ; extra == 'sysid' - - imageio[ffmpeg] ; extra == 'sysid' - - jinja2 ; extra == 'sysid' - - matplotlib ; extra == 'sysid' - - plotly ; extra == 'sysid' - - pyyaml ; extra == 'sysid' - - scipy ; extra == 'sysid' - - tabulate ; extra == 'sysid' - - typing-extensions ; extra == 'sysid' - - usd-core ; extra == 'usd' - - pillow ; extra == 'usd' - requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/6f/c9/26bd4979d503d03f7a6ded851c3094a5708cb534cf0dc80b4db6672da2b0/mujoco-3.5.0-cp313-cp313-macosx_11_0_arm64.whl +- pypi: https://files.pythonhosted.org/packages/03/dd/2875a57cdb423d98bdcb359f34af5eb8a24e48a903f4bb7110d75e478dac/mujoco-3.4.0-cp310-cp310-macosx_11_0_arm64.whl name: mujoco - version: 3.5.0 - sha256: 82416804ae96c69ed779330bd4f4af0a43632e2bbbcc60e5b193642db48e84ca + version: 3.4.0 + sha256: 7960cf47b4ed274955280200a812e6d780f03707d5258b42c3afb249051216ee requires_dist: - absl-py - etils[epath] - glfw - numpy - pyopengl - - absl-py ; extra == 'sysid' - - colorama ; extra == 'sysid' - - imageio[ffmpeg] ; extra == 'sysid' - - jinja2 ; extra == 'sysid' - - matplotlib ; extra == 'sysid' - - plotly ; extra == 'sysid' - - pyyaml ; extra == 'sysid' - - scipy ; extra == 'sysid' - - tabulate ; extra == 'sysid' - - typing-extensions ; extra == 'sysid' - usd-core ; extra == 'usd' - pillow ; extra == 'usd' requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/7e/91/d82dd3c16892e1b0e27a2f537eec8aad54d91d939cb3cd37db2e8c09ecc2/mujoco-3.5.0-cp310-cp310-win_amd64.whl +- pypi: https://files.pythonhosted.org/packages/04/0a/c1055f2329761c87edcdc18a480ab43ba942ed10f156888b4744d69c1deb/mujoco-3.4.0-cp311-cp311-win_amd64.whl name: mujoco - version: 3.5.0 - sha256: 2328358d2f0031175897092560dd6d04b14bab1cc22caa145ce99b843c17daa2 + version: 3.4.0 + sha256: e0ab4a450826ca04db11608325b37adf77dee4cde2a9dd9d43e6fa46c44545a9 requires_dist: - absl-py - etils[epath] - glfw - numpy - pyopengl - - absl-py ; extra == 'sysid' - - colorama ; extra == 'sysid' - - imageio[ffmpeg] ; extra == 'sysid' - - jinja2 ; extra == 'sysid' - - matplotlib ; extra == 'sysid' - - plotly ; extra == 'sysid' - - pyyaml ; extra == 'sysid' - - scipy ; extra == 'sysid' - - tabulate ; extra == 'sysid' - - typing-extensions ; extra == 'sysid' - usd-core ; extra == 'usd' - pillow ; extra == 'usd' requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/82/02/aa6057ac4c50fb36558208005d6da19518f9a7857ef9b5fd2ed8f9262fe2/mujoco-3.5.0-cp311-cp311-macosx_11_0_arm64.whl +- pypi: https://files.pythonhosted.org/packages/09/d4/99acbb782cc2c2ab5e5dacdf48b5d2850b641e34a91715d262d14103b764/mujoco-3.4.0-cp311-cp311-macosx_11_0_arm64.whl name: mujoco - version: 3.5.0 - sha256: e4fbb00809de98e8a65f2002745c5bca39076f8118b0fe08e973e7a99603c92b + version: 3.4.0 + sha256: 98d3ab7b02d99ac2866bb111807797549853d6ddf485ddc072cec3c1d33dfad8 requires_dist: - absl-py - etils[epath] - glfw - numpy - pyopengl - - absl-py ; extra == 'sysid' - - colorama ; extra == 'sysid' - - imageio[ffmpeg] ; extra == 'sysid' - - jinja2 ; extra == 'sysid' - - matplotlib ; extra == 'sysid' - - plotly ; extra == 'sysid' - - pyyaml ; extra == 'sysid' - - scipy ; extra == 'sysid' - - tabulate ; extra == 'sysid' - - typing-extensions ; extra == 'sysid' - usd-core ; extra == 'usd' - pillow ; extra == 'usd' requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/87/2a/371033684e4ddcda47c97661fb6e9617c0e5e3749af082a9b4d5d1bf9f27/mujoco-3.5.0-cp313-cp313-macosx_10_16_x86_64.whl +- pypi: https://files.pythonhosted.org/packages/22/d5/f94edc884c11b63f0d7ba9322ec4ca98bc7cad57c5c034c2e3332287d9ad/mujoco-3.4.0-cp310-cp310-win_amd64.whl name: mujoco - version: 3.5.0 - sha256: 74b05ec4a6a3d728b2da6944d2ae17cac4af9b7a9293f2c2e9e7332fa7535714 + version: 3.4.0 + sha256: ffe79a1476767806318b7dfbbb642e428b873385fb2d2f06e69d461459d01ed1 requires_dist: - absl-py - etils[epath] - glfw - numpy - pyopengl - - absl-py ; extra == 'sysid' - - colorama ; extra == 'sysid' - - imageio[ffmpeg] ; extra == 'sysid' - - jinja2 ; extra == 'sysid' - - matplotlib ; extra == 'sysid' - - plotly ; extra == 'sysid' - - pyyaml ; extra == 'sysid' - - scipy ; extra == 'sysid' - - tabulate ; extra == 'sysid' - - typing-extensions ; extra == 'sysid' - usd-core ; extra == 'usd' - pillow ; extra == 'usd' requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/8b/47/e923589301c197c3ea0776b60cc0d57383b3cc51639ca75e4e4b6c5334d6/mujoco-3.5.0-cp311-cp311-macosx_10_16_x86_64.whl +- pypi: https://files.pythonhosted.org/packages/3f/ec/5336e8e86e429a7f301dac63cae6ae75ff9e91bfb01502a55f60d7305eca/mujoco-3.4.0-cp312-cp312-win_amd64.whl name: mujoco - version: 3.5.0 - sha256: 6b3ae97c3f84d093e84dc445a093c893d9f4b6f6bbb1a441e56d77074c450553 + version: 3.4.0 + sha256: 10314213c395aedeaf2778596e78dd9ae01d74dc92d4f75c696707781d59826a requires_dist: - absl-py - etils[epath] - glfw - numpy - pyopengl - - absl-py ; extra == 'sysid' - - colorama ; extra == 'sysid' - - imageio[ffmpeg] ; extra == 'sysid' - - jinja2 ; extra == 'sysid' - - matplotlib ; extra == 'sysid' - - plotly ; extra == 'sysid' - - pyyaml ; extra == 'sysid' - - scipy ; extra == 'sysid' - - tabulate ; extra == 'sysid' - - typing-extensions ; extra == 'sysid' - usd-core ; extra == 'usd' - pillow ; extra == 'usd' requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/8d/6b/fdac8ed97086e12ac930fb44e419eda1626e339010df73678cb1f22527d7/mujoco-3.5.0-cp310-cp310-macosx_11_0_arm64.whl +- pypi: https://files.pythonhosted.org/packages/71/95/ba02262c7a7a786a64b8d77315e7e4d3c77598ff63d8cd605ba2b96ec349/mujoco-3.4.0-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl name: mujoco - version: 3.5.0 - sha256: 5f3803ff0dd7bc04d6c47d53a794343843bde06f0aeefeac28bb62b4cf2baab3 + version: 3.4.0 + sha256: 1b2b8a75ea191ae577bfa2385ca6ecd6328f37f6f46bc3cfb41835b2653f716a requires_dist: - absl-py - etils[epath] - glfw - numpy - pyopengl - - absl-py ; extra == 'sysid' - - colorama ; extra == 'sysid' - - imageio[ffmpeg] ; extra == 'sysid' - - jinja2 ; extra == 'sysid' - - matplotlib ; extra == 'sysid' - - plotly ; extra == 'sysid' - - pyyaml ; extra == 'sysid' - - scipy ; extra == 'sysid' - - tabulate ; extra == 'sysid' - - typing-extensions ; extra == 'sysid' - usd-core ; extra == 'usd' - pillow ; extra == 'usd' requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/ab/53/54a0815d43c83e1074cfc7da98a3dea88d7dda48c03edfd225a387a3767b/mujoco-3.5.0-cp313-cp313-win_amd64.whl +- pypi: https://files.pythonhosted.org/packages/c3/c1/37c07061be2b410de33624093fc06fc49ec13888252f1a6c30fcd40633bd/mujoco-3.4.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl name: mujoco - version: 3.5.0 - sha256: 646b26f545cfdd60ae65ee90d44f63f50fc7ea5b8242777964ef0148830e72df + version: 3.4.0 + sha256: c0b3dce70abdd0ac6475bb8040d7d97a4e3ccf5f6a00cc06086b7a169e246522 requires_dist: - absl-py - etils[epath] - glfw - numpy - pyopengl - - absl-py ; extra == 'sysid' - - colorama ; extra == 'sysid' - - imageio[ffmpeg] ; extra == 'sysid' - - jinja2 ; extra == 'sysid' - - matplotlib ; extra == 'sysid' - - plotly ; extra == 'sysid' - - pyyaml ; extra == 'sysid' - - scipy ; extra == 'sysid' - - tabulate ; extra == 'sysid' - - typing-extensions ; extra == 'sysid' - usd-core ; extra == 'usd' - pillow ; extra == 'usd' requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/b8/98/c1fac334cc764068e6c5d7eb01d6ed2a3392bab51952c816888b2dfe78c2/mujoco-3.5.0-cp311-cp311-win_amd64.whl +- pypi: https://files.pythonhosted.org/packages/c6/10/fa6b8762efbb02bd349503a39fb9dbbcf9e12041b0c5b29d484cafc09355/mujoco-3.4.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl name: mujoco - version: 3.5.0 - sha256: ec0e35678773b34ee8b15741c34a745e027db062efcae790315aa83a5581c505 + version: 3.4.0 + sha256: 8e5a36e61495be2a855f61194813e1277ab4b330cc180e50c8e3c7a459dc40b6 requires_dist: - absl-py - etils[epath] - glfw - numpy - pyopengl - - absl-py ; extra == 'sysid' - - colorama ; extra == 'sysid' - - imageio[ffmpeg] ; extra == 'sysid' - - jinja2 ; extra == 'sysid' - - matplotlib ; extra == 'sysid' - - plotly ; extra == 'sysid' - - pyyaml ; extra == 'sysid' - - scipy ; extra == 'sysid' - - tabulate ; extra == 'sysid' - - typing-extensions ; extra == 'sysid' - usd-core ; extra == 'usd' - pillow ; extra == 'usd' requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/c8/8a/229e4db3692be55532e155e2ca6a1363752243ee79df0e7e22ba00f716cf/mujoco-3.5.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl +- pypi: https://files.pythonhosted.org/packages/dc/25/bbf8c01758d619c86bcbe58db6a7d61ca423e7c76791f323b8ea2e92c2bd/mujoco-3.4.0-cp313-cp313-win_amd64.whl name: mujoco - version: 3.5.0 - sha256: 66fe37276644c28fab497929c55580725de81afc6d511a40cc27525a8dd99efa + version: 3.4.0 + sha256: c01a842a17c0229dce2fb65a051a8e6ee5f5307c50c825c850e3702dda4344e6 requires_dist: - absl-py - etils[epath] - glfw - numpy - pyopengl - - absl-py ; extra == 'sysid' - - colorama ; extra == 'sysid' - - imageio[ffmpeg] ; extra == 'sysid' - - jinja2 ; extra == 'sysid' - - matplotlib ; extra == 'sysid' - - plotly ; extra == 'sysid' - - pyyaml ; extra == 'sysid' - - scipy ; extra == 'sysid' - - tabulate ; extra == 'sysid' - - typing-extensions ; extra == 'sysid' - usd-core ; extra == 'usd' - pillow ; extra == 'usd' requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/ca/d6/a5a7b615b257867b7c97db6b3ce07dec9351d5d9d5a5aca881cbb583d7a3/mujoco-3.5.0-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl +- pypi: https://files.pythonhosted.org/packages/df/72/0c47350ec39611ff8defe9e8af10c23c9ad0235974f1999a523fcd1c3e68/mujoco-3.4.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl name: mujoco - version: 3.5.0 - sha256: 01b12896ae906f157e18d8b1b7c24a8b72d2576fffa09869047150f186e92b33 + version: 3.4.0 + sha256: 7edaffb223cf1343ed980030c466170eb8f9d624cf69c9a99925cbce371f22db requires_dist: - absl-py - etils[epath] - glfw - numpy - pyopengl - - absl-py ; extra == 'sysid' - - colorama ; extra == 'sysid' - - imageio[ffmpeg] ; extra == 'sysid' - - jinja2 ; extra == 'sysid' - - matplotlib ; extra == 'sysid' - - plotly ; extra == 'sysid' - - pyyaml ; extra == 'sysid' - - scipy ; extra == 'sysid' - - tabulate ; extra == 'sysid' - - typing-extensions ; extra == 'sysid' - usd-core ; extra == 'usd' - pillow ; extra == 'usd' requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/e1/d4/d0032323f58a9b8080b8464c6aade8d5ac2e101dbed1de64a38b3913b446/mujoco-3.5.0-cp312-cp312-macosx_11_0_arm64.whl +- pypi: https://files.pythonhosted.org/packages/e8/51/c3e5c3b199b1b74c85f0cb02dc0ef80363bf91ea245ee8a932804768d5e8/mujoco-3.4.0-cp313-cp313-macosx_11_0_arm64.whl name: mujoco - version: 3.5.0 - sha256: 94cf4285b46bc2d74fbe86e39a93ecfb3b0e584477fff7e38d293d47b88576e7 + version: 3.4.0 + sha256: 87a68d063d06d261e83755093e79371901b6a8171b0b8b88dcb020f966d4e463 requires_dist: - absl-py - etils[epath] - glfw - numpy - pyopengl - - absl-py ; extra == 'sysid' - - colorama ; extra == 'sysid' - - imageio[ffmpeg] ; extra == 'sysid' - - jinja2 ; extra == 'sysid' - - matplotlib ; extra == 'sysid' - - plotly ; extra == 'sysid' - - pyyaml ; extra == 'sysid' - - scipy ; extra == 'sysid' - - tabulate ; extra == 'sysid' - - typing-extensions ; extra == 'sysid' - usd-core ; extra == 'usd' - pillow ; extra == 'usd' requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/e8/20/9e0595e653543df3e4233bc3ad7e50b371b81dbe48d45ffbc867ed7c379d/mujoco-3.5.0-cp310-cp310-macosx_10_16_x86_64.whl +- pypi: https://files.pythonhosted.org/packages/ed/fe/10dbaef500af18866a41d842f2f95cf113aacf0f1eb91677c4817cff3495/mujoco-3.4.0-cp312-cp312-macosx_11_0_arm64.whl name: mujoco - version: 3.5.0 - sha256: c4324161cb4f334dd984fbb4a4f7d7db9f914f40d06174b02dcf05463d8275e4 + version: 3.4.0 + sha256: 339800c695166c8041cdef95ea5384fc607ad1b86c19528c785a17ed742c3a5e requires_dist: - absl-py - etils[epath] - glfw - numpy - pyopengl - - absl-py ; extra == 'sysid' - - colorama ; extra == 'sysid' - - imageio[ffmpeg] ; extra == 'sysid' - - jinja2 ; extra == 'sysid' - - matplotlib ; extra == 'sysid' - - plotly ; extra == 'sysid' - - pyyaml ; extra == 'sysid' - - scipy ; extra == 'sysid' - - tabulate ; extra == 'sysid' - - typing-extensions ; extra == 'sysid' - usd-core ; extra == 'usd' - pillow ; extra == 'usd' requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/f9/f0/4772421643f1c5aaf46d9e500a8716f59b02c8bf30bfa92cb8a763159efb/mujoco-3.5.0-cp312-cp312-macosx_10_16_x86_64.whl - name: mujoco - version: 3.5.0 - sha256: ec0587cc423385a8d45343a981df58511cb69758ba99164a71567af2d41be3c9 +- pypi: https://files.pythonhosted.org/packages/81/ef/6affa8e9ba6ad336d6132fe7d68c09c0243dd977e3fc0abd739902512d55/mujoco_warp-0.0.2-py3-none-any.whl + name: mujoco-warp + version: 0.0.2 + sha256: 4d78a096a20fa786f78ca1842b22f1798bf45128614bb4547155c3d77e4a76e8 requires_dist: - absl-py - etils[epath] - - glfw + - mujoco>=3.3.7 - numpy - - pyopengl - - absl-py ; extra == 'sysid' - - colorama ; extra == 'sysid' - - imageio[ffmpeg] ; extra == 'sysid' - - jinja2 ; extra == 'sysid' - - matplotlib ; extra == 'sysid' - - plotly ; extra == 'sysid' - - pyyaml ; extra == 'sysid' - - scipy ; extra == 'sysid' - - tabulate ; extra == 'sysid' - - typing-extensions ; extra == 'sysid' - - usd-core ; extra == 'usd' - - pillow ; extra == 'usd' - requires_python: '>=3.9' + - warp-lang>=1.9.1 + - asv ; extra == 'dev' + - pre-commit ; extra == 'dev' + - pytest ; extra == 'dev' + - pytest-xdist ; extra == 'dev' + - ruff ; extra == 'dev' + - pygls>=1.0.0,<2.0.0 ; extra == 'dev' + - lsprotocol>=2023.0.1,<2024.0.0 ; extra == 'dev' + - mujoco>=3.3.7.dev0 ; extra == 'dev' + - warp-lang>=1.9.1.dev0 ; extra == 'dev' + - jax ; extra == 'cpu' + - jax[cuda12] ; extra == 'cuda' + requires_python: '>=3.10' - conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.5-h2d0b736_3.conda sha256: 3fde293232fa3fca98635e1167de6b7c7fda83caf24b9d6c91ec9eefb4f4d586 md5: 47e340acb35de30501a76c7c799c41d7 @@ -7767,15 +6653,6 @@ packages: purls: [] size: 891641 timestamp: 1738195959188 -- conda: https://conda.anaconda.org/conda-forge/osx-64/ncurses-6.5-h0622a9a_3.conda - sha256: ea4a5d27ded18443749aefa49dc79f6356da8506d508b5296f60b8d51e0c4bd9 - md5: ced34dd9929f491ca6dab6a2927aff25 - depends: - - __osx >=10.13 - license: X11 AND BSD-3-Clause - purls: [] - size: 822259 - timestamp: 1738196181298 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ncurses-6.5-h5e97a16_3.conda sha256: 2827ada40e8d9ca69a153a45f7fd14f32b2ead7045d3bbb5d10964898fe65733 md5: 068d497125e4bf8a66bf707254fff5ae @@ -7888,11 +6765,6 @@ packages: version: 2.2.6 sha256: 8e41fd67c52b86603a91c1a505ebaef50b3314de0213461c7a6e99c9a3beff90 requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/9a/3e/ed6db5be21ce87955c0cbd3009f2803f59fa08df21b5df06862e2d8e2bdd/numpy-2.2.6-cp310-cp310-macosx_10_9_x86_64.whl - name: numpy - version: 2.2.6 - sha256: b412caa66f72040e6d268491a59f2c43bf03eb6c96dd8f0307829feb7fa2b6fb - requires_python: '>=3.10' - pypi: https://files.pythonhosted.org/packages/a3/dd/4b822569d6b96c39d1215dbae0582fd99954dcbcf0c1a13c61783feaca3f/numpy-2.2.6-cp310-cp310-win_amd64.whl name: numpy version: 2.2.6 @@ -7928,11 +6800,6 @@ packages: version: 2.4.2 sha256: 7df2de1e4fba69a51c06c28f5a3de36731eb9639feb8e1cf7e4a7b0daf4cf622 requires_python: '>=3.11' -- pypi: https://files.pythonhosted.org/packages/51/6e/6f394c9c77668153e14d4da83bcc247beb5952f6ead7699a1a2992613bea/numpy-2.4.2-cp312-cp312-macosx_10_13_x86_64.whl - name: numpy - version: 2.4.2 - sha256: 21982668592194c609de53ba4933a7471880ccbaadcc52352694a59ecc860b3a - requires_python: '>=3.11' - pypi: https://files.pythonhosted.org/packages/74/41/5d17d4058bd0cd96bcbd4d9ff0fb2e21f52702aab9a72e4a594efa18692f/numpy-2.4.2-cp311-cp311-macosx_11_0_arm64.whl name: numpy version: 2.4.2 @@ -7948,16 +6815,6 @@ packages: version: 2.4.2 sha256: 209fae046e62d0ce6435fcfe3b1a10537e858249b3d9b05829e2a05218296a85 requires_python: '>=3.11' -- pypi: https://files.pythonhosted.org/packages/a1/22/815b9fe25d1d7ae7d492152adbc7226d3eff731dffc38fe970589fcaaa38/numpy-2.4.2-cp313-cp313-macosx_10_13_x86_64.whl - name: numpy - version: 2.4.2 - sha256: 25f2059807faea4b077a2b6837391b5d830864b3543627f381821c646f31a63c - requires_python: '>=3.11' -- pypi: https://files.pythonhosted.org/packages/d3/44/71852273146957899753e69986246d6a176061ea183407e95418c2aa4d9a/numpy-2.4.2-cp311-cp311-macosx_10_9_x86_64.whl - name: numpy - version: 2.4.2 - sha256: e7e88598032542bd49af7c4747541422884219056c268823ef6e5e89851c8825 - requires_python: '>=3.11' - pypi: https://files.pythonhosted.org/packages/f5/c6/a18e59f3f0b8071cc85cbc8d80cd02d68aa9710170b2553a117203d46936/numpy-2.4.2-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl name: numpy version: 2.4.2 @@ -7972,6 +6829,17 @@ packages: - pyyaml>=5.1.0 - dataclasses ; python_full_version == '3.6.*' requires_python: '>=3.6' +- pypi: https://files.pythonhosted.org/packages/fb/71/d3fec0dcf9a7a99e7368112d9c765154e81da70fcba1e3121131a45c245b/onnx-1.20.1-cp312-abi3-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl + name: onnx + version: 1.20.1 + sha256: 9336b6b8e6efcf5c490a845f6afd7e041c89a56199aeda384ed7d58fb953b080 + requires_dist: + - numpy>=1.23.2 + - protobuf>=4.25.1 + - typing-extensions>=4.7.1 + - ml-dtypes>=0.5.0 + - pillow ; extra == 'reference' + requires_python: '>=3.10' - conda: https://conda.anaconda.org/conda-forge/linux-64/onnxruntime-cpp-1.19.2-h641f3bf_0_cpu.conda sha256: b0b193e5165e44147aaeec58f1b415ea9fc5411a464ab1e528726ebf481fab63 md5: 0a7f970980912fa3a7fe3355b50eb07e @@ -7983,16 +6851,6 @@ packages: purls: [] size: 15505513 timestamp: 1730057324667 -- conda: https://conda.anaconda.org/conda-forge/osx-64/onnxruntime-cpp-1.19.2-h417c6ca_0_cpu.conda - sha256: e1c9df3c8cc046eca404da157cb4fc709eefa637d239364882bfb554e553fbe3 - md5: 753a44237a85841e3358a158815efd19 - depends: - - __osx >=10.15 - - libcxx >=17 - license: MIT AND BSL-1.0 - purls: [] - size: 10015328 - timestamp: 1730054051615 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/onnxruntime-cpp-1.19.2-hda9e549_0_cpu.conda sha256: 7b596ce2d25ba922a9c74bc5d44d0ca12a4d4e0221337f2d63b14ee172a03602 md5: 1e10edc0b43f300c14ee03bcc14b5e7e @@ -8014,6 +6872,22 @@ packages: purls: [] size: 3698553 timestamp: 1730057176636 +- pypi: https://files.pythonhosted.org/packages/19/cb/ce8203fee31533f4d74891145512d1b5c09b26cebb4c1574afb233c41e0f/onnxruntime_gpu-1.24.2-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl + name: onnxruntime-gpu + version: 1.24.2 + sha256: 9144bda62f4826ecd88151c55892c439a7515914350c1c924d3f4328eb40bf38 + requires_dist: + - flatbuffers + - numpy>=1.21.6 + - packaging + - protobuf + - sympy + - nvidia-cuda-nvrtc-cu12~=12.0 ; extra == 'cuda' + - nvidia-cuda-runtime-cu12~=12.0 ; extra == 'cuda' + - nvidia-cufft-cu12~=11.0 ; extra == 'cuda' + - nvidia-curand-cu12~=10.0 ; extra == 'cuda' + - nvidia-cudnn-cu12~=9.0 ; extra == 'cudnn' + requires_python: '>=3.10' - conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.6.1-h35e630c_1.conda sha256: 44c877f8af015332a5d12f5ff0fb20ca32f896526a7d0cdb30c769df1144fb5c md5: f61eb8cd60ff9057122a3d338b99c00f @@ -8026,17 +6900,6 @@ packages: purls: [] size: 3164551 timestamp: 1769555830639 -- conda: https://conda.anaconda.org/conda-forge/osx-64/openssl-3.6.1-hb6871ef_1.conda - sha256: e02e5639b0e4d6d4fcf0f3b082642844fb5a37316f5b0a1126c6271347462e90 - md5: 30bb8d08b99b9a7600d39efb3559fff0 - depends: - - __osx >=10.13 - - ca-certificates - license: Apache-2.0 - license_family: Apache - purls: [] - size: 2777136 - timestamp: 1769557662405 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/openssl-3.6.1-hd24854e_1.conda sha256: 361f5c5e60052abc12bdd1b50d7a1a43e6a6653aab99a2263bf2288d709dcf67 md5: f4f6ad63f98f64191c3e77c5f5f29d76 @@ -8077,38 +6940,6 @@ packages: purls: [] size: 94048 timestamp: 1673473024463 -- pypi: https://files.pythonhosted.org/packages/07/d3/8df65da0d4df36b094351dce696f2989bec731d4f10e743b1c5f4da4d3bf/pillow-12.1.1-cp312-cp312-macosx_10_13_x86_64.whl - name: pillow - version: 12.1.1 - sha256: ab323b787d6e18b3d91a72fc99b1a2c28651e4358749842b8f8dfacd28ef2052 - requires_dist: - - furo ; extra == 'docs' - - olefile ; extra == 'docs' - - sphinx>=8.2 ; extra == 'docs' - - sphinx-autobuild ; extra == 'docs' - - sphinx-copybutton ; extra == 'docs' - - sphinx-inline-tabs ; extra == 'docs' - - sphinxext-opengraph ; extra == 'docs' - - olefile ; extra == 'fpx' - - olefile ; extra == 'mic' - - arro3-compute ; extra == 'test-arrow' - - arro3-core ; extra == 'test-arrow' - - nanoarrow ; extra == 'test-arrow' - - pyarrow ; extra == 'test-arrow' - - check-manifest ; extra == 'tests' - - coverage>=7.4.2 ; extra == 'tests' - - defusedxml ; extra == 'tests' - - markdown2 ; extra == 'tests' - - olefile ; extra == 'tests' - - packaging ; extra == 'tests' - - pyroma>=5 ; extra == 'tests' - - pytest ; extra == 'tests' - - pytest-cov ; extra == 'tests' - - pytest-timeout ; extra == 'tests' - - pytest-xdist ; extra == 'tests' - - trove-classifiers>=2024.10.12 ; extra == 'tests' - - defusedxml ; extra == 'xmp' - requires_python: '>=3.10' - pypi: https://files.pythonhosted.org/packages/0c/7b/f9b09a7804ec7336effb96c26d37c29d27225783dc1501b7d62dcef6ae25/pillow-12.1.1-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl name: pillow version: 12.1.1 @@ -8141,102 +6972,6 @@ packages: - trove-classifiers>=2024.10.12 ; extra == 'tests' - defusedxml ; extra == 'xmp' requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/14/a1/16c4b823838ba4c9c52c0e6bbda903a3fe5a1bdbf1b8eb4fff7156f3e318/pillow-12.1.1-cp313-cp313-macosx_10_13_x86_64.whl - name: pillow - version: 12.1.1 - sha256: 6c6db3b84c87d48d0088943bf33440e0c42370b99b1c2a7989216f7b42eede60 - requires_dist: - - furo ; extra == 'docs' - - olefile ; extra == 'docs' - - sphinx>=8.2 ; extra == 'docs' - - sphinx-autobuild ; extra == 'docs' - - sphinx-copybutton ; extra == 'docs' - - sphinx-inline-tabs ; extra == 'docs' - - sphinxext-opengraph ; extra == 'docs' - - olefile ; extra == 'fpx' - - olefile ; extra == 'mic' - - arro3-compute ; extra == 'test-arrow' - - arro3-core ; extra == 'test-arrow' - - nanoarrow ; extra == 'test-arrow' - - pyarrow ; extra == 'test-arrow' - - check-manifest ; extra == 'tests' - - coverage>=7.4.2 ; extra == 'tests' - - defusedxml ; extra == 'tests' - - markdown2 ; extra == 'tests' - - olefile ; extra == 'tests' - - packaging ; extra == 'tests' - - pyroma>=5 ; extra == 'tests' - - pytest ; extra == 'tests' - - pytest-cov ; extra == 'tests' - - pytest-timeout ; extra == 'tests' - - pytest-xdist ; extra == 'tests' - - trove-classifiers>=2024.10.12 ; extra == 'tests' - - defusedxml ; extra == 'xmp' - requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/1d/30/5bd3d794762481f8c8ae9c80e7b76ecea73b916959eb587521358ef0b2f9/pillow-12.1.1-cp310-cp310-macosx_10_10_x86_64.whl - name: pillow - version: 12.1.1 - sha256: 1f1625b72740fdda5d77b4def688eb8fd6490975d06b909fd19f13f391e077e0 - requires_dist: - - furo ; extra == 'docs' - - olefile ; extra == 'docs' - - sphinx>=8.2 ; extra == 'docs' - - sphinx-autobuild ; extra == 'docs' - - sphinx-copybutton ; extra == 'docs' - - sphinx-inline-tabs ; extra == 'docs' - - sphinxext-opengraph ; extra == 'docs' - - olefile ; extra == 'fpx' - - olefile ; extra == 'mic' - - arro3-compute ; extra == 'test-arrow' - - arro3-core ; extra == 'test-arrow' - - nanoarrow ; extra == 'test-arrow' - - pyarrow ; extra == 'test-arrow' - - check-manifest ; extra == 'tests' - - coverage>=7.4.2 ; extra == 'tests' - - defusedxml ; extra == 'tests' - - markdown2 ; extra == 'tests' - - olefile ; extra == 'tests' - - packaging ; extra == 'tests' - - pyroma>=5 ; extra == 'tests' - - pytest ; extra == 'tests' - - pytest-cov ; extra == 'tests' - - pytest-timeout ; extra == 'tests' - - pytest-xdist ; extra == 'tests' - - trove-classifiers>=2024.10.12 ; extra == 'tests' - - defusedxml ; extra == 'xmp' - requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/2b/46/5da1ec4a5171ee7bf1a0efa064aba70ba3d6e0788ce3f5acd1375d23c8c0/pillow-12.1.1-cp311-cp311-macosx_10_10_x86_64.whl - name: pillow - version: 12.1.1 - sha256: e879bb6cd5c73848ef3b2b48b8af9ff08c5b71ecda8048b7dd22d8a33f60be32 - requires_dist: - - furo ; extra == 'docs' - - olefile ; extra == 'docs' - - sphinx>=8.2 ; extra == 'docs' - - sphinx-autobuild ; extra == 'docs' - - sphinx-copybutton ; extra == 'docs' - - sphinx-inline-tabs ; extra == 'docs' - - sphinxext-opengraph ; extra == 'docs' - - olefile ; extra == 'fpx' - - olefile ; extra == 'mic' - - arro3-compute ; extra == 'test-arrow' - - arro3-core ; extra == 'test-arrow' - - nanoarrow ; extra == 'test-arrow' - - pyarrow ; extra == 'test-arrow' - - check-manifest ; extra == 'tests' - - coverage>=7.4.2 ; extra == 'tests' - - defusedxml ; extra == 'tests' - - markdown2 ; extra == 'tests' - - olefile ; extra == 'tests' - - packaging ; extra == 'tests' - - pyroma>=5 ; extra == 'tests' - - pytest ; extra == 'tests' - - pytest-cov ; extra == 'tests' - - pytest-timeout ; extra == 'tests' - - pytest-xdist ; extra == 'tests' - - trove-classifiers>=2024.10.12 ; extra == 'tests' - - defusedxml ; extra == 'xmp' - requires_python: '>=3.10' - pypi: https://files.pythonhosted.org/packages/31/03/bef822e4f2d8f9d7448c133d0a18185d3cce3e70472774fffefe8b0ed562/pillow-12.1.1-cp311-cp311-win_amd64.whl name: pillow version: 12.1.1 @@ -8616,6 +7351,11 @@ packages: - pyyaml>=5.1 - virtualenv>=20.10.0 requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/9b/53/a9443aa3ca9ba8724fdfa02dd1887c1bcd8e89556b715cfbacca6b63dbec/protobuf-6.33.5-cp39-abi3-manylinux2014_x86_64.whl + name: protobuf + version: 6.33.5 + sha256: cbf16ba3350fb7b889fca858fb215967792dc125b35c7976ca4818bee3521cf0 + requires_python: '>=3.9' - pypi: https://files.pythonhosted.org/packages/00/ca/db94101c187f3df742133ac837e93b1f269ebdac49427f8310ee40b6a58f/pyarrow-23.0.1-cp311-cp311-win_amd64.whl name: pyarrow version: 23.0.1 @@ -8656,36 +7396,16 @@ packages: version: 23.0.1 sha256: 9b6f4f17b43bc39d56fec96e53fe89d94bac3eb134137964371b45352d40d0c2 requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/bc/8e/4be5617b4aaae0287f621ad31c6036e5f63118cfca0dc57d42121ff49b51/pyarrow-23.0.1-cp310-cp310-macosx_12_0_x86_64.whl - name: pyarrow - version: 23.0.1 - sha256: 3f91c038b95f71ddfc865f11d5876c42f343b4495535bd262c7b321b0b94507c - requires_python: '>=3.10' - pypi: https://files.pythonhosted.org/packages/bc/a8/24e5dc6855f50a62936ceb004e6e9645e4219a8065f304145d7fb8a79d5d/pyarrow-23.0.1-cp310-cp310-macosx_12_0_arm64.whl name: pyarrow version: 23.0.1 - sha256: 3fab8f82571844eb3c460f90a75583801d14ca0cc32b1acc8c361650e006fd56 - requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/bf/4a/1472c00392f521fea03ae93408bf445cc7bfa1ab81683faf9bc188e36629/pyarrow-23.0.1-cp311-cp311-macosx_12_0_x86_64.whl - name: pyarrow - version: 23.0.1 - sha256: 0ae6e17c828455b6265d590100c295193f93cc5675eb0af59e49dbd00d2de350 - requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/cb/4f/679fa7e84dadbaca7a65f7cdba8d6c83febbd93ca12fa4adf40ba3b6362b/pyarrow-23.0.1-cp313-cp313-macosx_12_0_x86_64.whl - name: pyarrow - version: 23.0.1 - sha256: 8ff51b1addc469b9444b7c6f3548e19dc931b172ab234e995a60aea9f6e6025f + sha256: 3fab8f82571844eb3c460f90a75583801d14ca0cc32b1acc8c361650e006fd56 requires_python: '>=3.10' - pypi: https://files.pythonhosted.org/packages/d5/09/a532297c9591a727d67760e2e756b83905dd89adb365a7f6e9c72578bcc1/pyarrow-23.0.1-cp313-cp313-win_amd64.whl name: pyarrow version: 23.0.1 sha256: cecfb12ef629cf6be0b1887f9f86463b0dd3dc3195ae6224e74006be4736035a requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/e1/da/3f941e3734ac8088ea588b53e860baeddac8323ea40ce22e3d0baa865cc9/pyarrow-23.0.1-cp312-cp312-macosx_12_0_x86_64.whl - name: pyarrow - version: 23.0.1 - sha256: 7707d2b6673f7de054e2e83d59f9e805939038eebe1763fe811ee8fa5c0cd1a7 - requires_python: '>=3.10' - pypi: https://files.pythonhosted.org/packages/f6/70/1fdda42d65b28b078e93d75d371b2185a61da89dda4def8ba6ba41ebdeb4/pyarrow-23.0.1-cp312-cp312-win_amd64.whl name: pyarrow version: 23.0.1 @@ -8696,24 +7416,24 @@ packages: version: 23.0.1 sha256: c33b5bf406284fd0bba436ed6f6c3ebe8e311722b441d89397c54f871c6863a2 requires_python: '>=3.10' -- conda: https://conda.anaconda.org/conda-forge/noarch/pybind11-3.0.1-pyh7a1b43c_0.conda - sha256: 2558727093f13d4c30e124724566d16badd7de532fd8ee7483628977117d02be - md5: 70ece62498c769280f791e836ac53fff +- conda: https://conda.anaconda.org/conda-forge/noarch/pybind11-3.0.2-pyh7a1b43c_0.conda + sha256: c2d16e61270efeea13102836e0f1d3f758fb093207fbda561290fa1951c6051f + md5: 44dff15b5d850481807888197b254b46 depends: - python >=3.8 - - pybind11-global ==3.0.1 *_0 + - pybind11-global ==3.0.2 *_0 - python constrains: - pybind11-abi ==11 license: BSD-3-Clause license_family: BSD purls: - - pkg:pypi/pybind11?source=hash-mapping - size: 232875 - timestamp: 1755953378112 -- conda: https://conda.anaconda.org/conda-forge/noarch/pybind11-global-3.0.1-pyh5e4992e_0.conda - sha256: fff9c4f726644a1889a4b631aca547d8f302c72109d75518ae32997a3d54f23a - md5: 58564979e28f8b18955ec56c4dc6b252 + - pkg:pypi/pybind11?source=compressed-mapping + size: 245509 + timestamp: 1771365898778 +- conda: https://conda.anaconda.org/conda-forge/noarch/pybind11-global-3.0.2-pyh5e4992e_0.conda + sha256: 78db39961b69130d56fadf77e063662beae3ea602aeeaa5b22e3c887291130db + md5: e26556877c066aaa5a7169e387bc0b31 depends: - python >=3.8 - __win @@ -8723,12 +7443,12 @@ packages: license: BSD-3-Clause license_family: BSD purls: - - pkg:pypi/pybind11-global?source=hash-mapping - size: 227797 - timestamp: 1755953378113 -- conda: https://conda.anaconda.org/conda-forge/noarch/pybind11-global-3.0.1-pyhc7ab6ef_0.conda - sha256: f11a5903879fe3a24e0d28329cb2b1945127e85a4cdb444b45545cf079f99e2d - md5: fe10b422ce8b5af5dab3740e4084c3f9 + - pkg:pypi/pybind11-global?source=compressed-mapping + size: 240085 + timestamp: 1771365898782 +- conda: https://conda.anaconda.org/conda-forge/noarch/pybind11-global-3.0.2-pyhc7ab6ef_0.conda + sha256: b97f25f7856b96ae187c17801d2536ff86a968da12f579bbc318f2367e365a02 + md5: 0c2d37c332453bd66b254bc71311fa30 depends: - python >=3.8 - __unix @@ -8738,9 +7458,9 @@ packages: license: BSD-3-Clause license_family: BSD purls: - - pkg:pypi/pybind11-global?source=hash-mapping - size: 228871 - timestamp: 1755953338243 + - pkg:pypi/pybind11-global?source=compressed-mapping + size: 241244 + timestamp: 1771365839659 - pypi: https://files.pythonhosted.org/packages/4f/e4/4f2d41881fae547f06ffa4c9748fa8ed13c4db5c830ff268b84175546b3c/pybind11_stubgen-2.5.5-py3-none-any.whl name: pybind11-stubgen version: 2.5.5 @@ -8946,99 +7666,6 @@ packages: size: 37364553 timestamp: 1770272309861 python_site_packages_path: lib/python3.13/site-packages -- conda: https://conda.anaconda.org/conda-forge/osx-64/python-3.10.19-h988dfef_3_cpython.conda - build_number: 3 - sha256: e05e6e5d076f76e609e8665969391dabdbbb298ecf1cbd58a206bf39a10dbc67 - md5: 2717612cf85c1138d5a0645b1db537fb - depends: - - __osx >=10.13 - - bzip2 >=1.0.8,<2.0a0 - - libexpat >=2.7.3,<3.0a0 - - libffi >=3.4,<4.0a0 - - liblzma >=5.8.2,<6.0a0 - - libsqlite >=3.51.2,<4.0a0 - - libzlib >=1.3.1,<2.0a0 - - ncurses >=6.5,<7.0a0 - - openssl >=3.5.4,<4.0a0 - - readline >=8.3,<9.0a0 - - tk >=8.6.13,<8.7.0a0 - - tzdata - constrains: - - python_abi 3.10.* *_cp310 - license: Python-2.0 - purls: [] - size: 13150073 - timestamp: 1769472282154 -- conda: https://conda.anaconda.org/conda-forge/osx-64/python-3.11.14-h74c2667_3_cpython.conda - build_number: 3 - sha256: 327d6c5eb61657d4b76e1024da9c790d3e7aacee84487403e9eef1b730982e63 - md5: df79e5958af70212260d5e163e867d98 - depends: - - __osx >=10.13 - - bzip2 >=1.0.8,<2.0a0 - - libexpat >=2.7.3,<3.0a0 - - libffi >=3.5.2,<3.6.0a0 - - liblzma >=5.8.2,<6.0a0 - - libsqlite >=3.51.2,<4.0a0 - - libzlib >=1.3.1,<2.0a0 - - ncurses >=6.5,<7.0a0 - - openssl >=3.5.4,<4.0a0 - - readline >=8.3,<9.0a0 - - tk >=8.6.13,<8.7.0a0 - - tzdata - constrains: - - python_abi 3.11.* *_cp311 - license: Python-2.0 - purls: [] - size: 15666344 - timestamp: 1769473006716 -- conda: https://conda.anaconda.org/conda-forge/osx-64/python-3.12.12-h74c2667_2_cpython.conda - build_number: 2 - sha256: a0dc682959d43789313346549370579604020617718f9ff09f8dc99fe4fb1faa - md5: 64f6c57fd1d23500084194c740da395e - depends: - - __osx >=10.13 - - bzip2 >=1.0.8,<2.0a0 - - libexpat >=2.7.3,<3.0a0 - - libffi >=3.5.2,<3.6.0a0 - - liblzma >=5.8.2,<6.0a0 - - libsqlite >=3.51.2,<4.0a0 - - libzlib >=1.3.1,<2.0a0 - - ncurses >=6.5,<7.0a0 - - openssl >=3.5.4,<4.0a0 - - readline >=8.3,<9.0a0 - - tk >=8.6.13,<8.7.0a0 - - tzdata - constrains: - - python_abi 3.12.* *_cp312 - license: Python-2.0 - purls: [] - size: 13739394 - timestamp: 1769473128970 -- conda: https://conda.anaconda.org/conda-forge/osx-64/python-3.13.12-h894a449_100_cp313.conda - build_number: 100 - sha256: 9548dcf58cf6045aa4aa1f2f3fa6110115ca616a8d5fa142a24081d2b9d91291 - md5: 99b1fa1fe8a8ab58224969f4568aadca - depends: - - __osx >=10.13 - - bzip2 >=1.0.8,<2.0a0 - - libexpat >=2.7.3,<3.0a0 - - libffi >=3.5.2,<3.6.0a0 - - liblzma >=5.8.2,<6.0a0 - - libmpdec >=4.0.0,<5.0a0 - - libsqlite >=3.51.2,<4.0a0 - - libzlib >=1.3.1,<2.0a0 - - ncurses >=6.5,<7.0a0 - - openssl >=3.5.5,<4.0a0 - - python_abi 3.13.* *_cp313 - - readline >=8.3,<9.0a0 - - tk >=8.6.13,<8.7.0a0 - - tzdata - license: Python-2.0 - purls: [] - size: 17570178 - timestamp: 1770272361922 - python_site_packages_path: lib/python3.13/site-packages - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-3.10.19-hcd7f573_3_cpython.conda build_number: 3 sha256: 7ce2adb0cc4d45178dc018b55148fa2d6ccae0c98291cef1b21dafcda2de2687 @@ -9263,11 +7890,6 @@ packages: version: 6.0.3 sha256: bdb2c67c6c1390b63c6ff89f210c8fd09d9a1217a465701eac7316313c915e4c requires_python: '>=3.8' -- pypi: https://files.pythonhosted.org/packages/6d/16/a95b6757765b7b031c9374925bb718d55e0a9ba8a1b6a12d25962ea44347/pyyaml-6.0.3-cp311-cp311-macosx_10_13_x86_64.whl - name: pyyaml - version: 6.0.3 - sha256: 44edc647873928551a01e7a563d7452ccdebee747728c1080d881d68af7b997e - requires_python: '>=3.8' - pypi: https://files.pythonhosted.org/packages/71/60/917329f640924b18ff085ab889a11c763e0b573da888e8404ff486657602/pyyaml-6.0.3-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl name: pyyaml version: 6.0.3 @@ -9308,26 +7930,11 @@ packages: version: 6.0.3 sha256: 2283a07e2c21a2aa78d9c4442724ec1eb15f5e42a723b99cb3d822d48f5f7ad1 requires_python: '>=3.8' -- pypi: https://files.pythonhosted.org/packages/d1/11/0fd08f8192109f7169db964b5707a2f1e8b745d4e239b784a5a1dd80d1db/pyyaml-6.0.3-cp313-cp313-macosx_10_13_x86_64.whl - name: pyyaml - version: 6.0.3 - sha256: 8da9669d359f02c0b91ccc01cac4a67f16afec0dac22c2ad09f46bee0697eba8 - requires_python: '>=3.8' -- pypi: https://files.pythonhosted.org/packages/d1/33/422b98d2195232ca1826284a76852ad5a86fe23e31b009c9886b2d0fb8b2/pyyaml-6.0.3-cp312-cp312-macosx_10_13_x86_64.whl - name: pyyaml - version: 6.0.3 - sha256: 7f047e29dcae44602496db43be01ad42fc6f1cc0d8cd6c83d342306c32270196 - requires_python: '>=3.8' - pypi: https://files.pythonhosted.org/packages/da/e3/ea007450a105ae919a72393cb06f122f288ef60bba2dc64b26e2646fa315/pyyaml-6.0.3-cp311-cp311-win_amd64.whl name: pyyaml version: 6.0.3 sha256: 9f3bfb4965eb874431221a3ff3fdcddc7e74e3b07799e0e84ca4a0f867d449bf requires_python: '>=3.8' -- pypi: https://files.pythonhosted.org/packages/f4/a0/39350dd17dd6d6c6507025c0e53aef67a9293a6d37d3511f23ea510d5800/pyyaml-6.0.3-cp310-cp310-macosx_10_13_x86_64.whl - name: pyyaml - version: 6.0.3 - sha256: 214ed4befebe12df36bcc8bc2b64b396ca31be9304b8f59e25c11cf94a4c033b - requires_python: '>=3.8' - conda: https://conda.anaconda.org/conda-forge/linux-64/readline-8.3-h853b02a_0.conda sha256: 12ffde5a6f958e285aa22c191ca01bbd3d6e710aa852e00618fa6ddc59149002 md5: d7d95fc8287ea7bf33e0e7116d2b95ec @@ -9340,17 +7947,6 @@ packages: purls: [] size: 345073 timestamp: 1765813471974 -- conda: https://conda.anaconda.org/conda-forge/osx-64/readline-8.3-h68b038d_0.conda - sha256: 4614af680aa0920e82b953fece85a03007e0719c3399f13d7de64176874b80d5 - md5: eefd65452dfe7cce476a519bece46704 - depends: - - __osx >=10.13 - - ncurses >=6.5,<7.0a0 - license: GPL-3.0-only - license_family: GPL - purls: [] - size: 317819 - timestamp: 1765813692798 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/readline-8.3-h46df422_0.conda sha256: a77010528efb4b548ac2a4484eaf7e1c3907f2aec86123ed9c5212ae44502477 md5: f8381319127120ce51e081dce4865cf4 @@ -9418,16 +8014,6 @@ packages: purls: [] size: 193775 timestamp: 1748644872902 -- conda: https://conda.anaconda.org/conda-forge/osx-64/rhash-1.4.6-h6e16a3a_1.conda - sha256: 65c946fc5a9bb71772a7ac9bad64ff08ac07f7d5311306c2dcc1647157b96706 - md5: d0fcaaeff83dd4b6fb035c2f36df198b - depends: - - __osx >=10.13 - license: MIT - license_family: MIT - purls: [] - size: 185180 - timestamp: 1748644989546 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/rhash-1.4.6-h5505292_1.conda sha256: f4957c05f4fbcd99577de8838ca4b5b1ae4b400a44be647a0159c14f85b9bfc0 md5: 029e812c8ae4e0d4cf6ff4f7d8dc9366 @@ -9447,6 +8033,15 @@ packages: - markdown-it-py>=2.2.0 - pygments>=2.13.0,<3.0.0 requires_python: '>=3.8.0' +- pypi: https://files.pythonhosted.org/packages/14/25/b208c5683343959b670dc001595f2f3737e051da617f66c31f7c4fa93abc/rich-14.3.3-py3-none-any.whl + name: rich + version: 14.3.3 + sha256: 793431c1f8619afa7d3b52b2cdec859562b950ea0d4b6b505397612db8d5362d + requires_dist: + - ipywidgets>=7.5.1,<9 ; extra == 'jupyter' + - markdown-it-py>=2.2.0 + - pygments>=2.13.0,<3.0.0 + requires_python: '>=3.8.0' - pypi: https://files.pythonhosted.org/packages/16/80/579e75e0be0439d11e479732e4c194a9c6e6d152670dae561b9525015425/robot_descriptions-1.22.0-py3-none-any.whl name: robot-descriptions version: 1.22.0 @@ -9466,16 +8061,6 @@ packages: version: 4.1.0 sha256: 647ba99caddc2cc1e55a51e4360689115551bf4476d90e8162cf8c345fe233c7 requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/03/e7/98a2f4ac921d82f33e03f3835f5bf3a4a40aa1bfdc57975e74a97b2b4bdd/rpds_py-0.30.0-cp312-cp312-macosx_10_12_x86_64.whl - name: rpds-py - version: 0.30.0 - sha256: a161f20d9a43006833cd7068375a94d035714d73a172b681d8881820600abfad - requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/06/0c/0c411a0ec64ccb6d104dcabe0e713e05e153a9a2c3c2bd2b32ce412166fe/rpds_py-0.30.0-cp310-cp310-macosx_10_12_x86_64.whl - name: rpds-py - version: 0.30.0 - sha256: 679ae98e00c0e8d68a7fda324e16b90fd5260945b45d3b824c892cec9eea3288 - requires_python: '>=3.10' - pypi: https://files.pythonhosted.org/packages/19/6a/4ba3d0fb7297ebae71171822554abe48d7cab29c28b8f9f2c04b79988c05/rpds_py-0.30.0-cp310-cp310-macosx_11_0_arm64.whl name: rpds-py version: 0.30.0 @@ -9486,11 +8071,6 @@ packages: version: 0.30.0 sha256: a090322ca841abd453d43456ac34db46e8b05fd9b3b4ac0c78bcde8b089f959b requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/4d/6e/f964e88b3d2abee2a82c1ac8366da848fce1c6d834dc2132c3fda3970290/rpds_py-0.30.0-cp311-cp311-macosx_10_12_x86_64.whl - name: rpds-py - version: 0.30.0 - sha256: a2bffea6a4ca9f01b3f8e548302470306689684e61602aa3d141e34da06cf425 - requires_python: '>=3.10' - pypi: https://files.pythonhosted.org/packages/4d/a1/bca7fd3d452b272e13335db8d6b0b3ecde0f90ad6f16f3328c6fb150c889/rpds_py-0.30.0-cp312-cp312-macosx_11_0_arm64.whl name: rpds-py version: 0.30.0 @@ -9521,11 +8101,6 @@ packages: version: 0.30.0 sha256: 9027da1ce107104c50c81383cae773ef5c24d296dd11c99e2629dbd7967a20c6 requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/ed/dc/d61221eb88ff410de3c49143407f6f3147acf2538c86f2ab7ce65ae7d5f9/rpds_py-0.30.0-cp313-cp313-macosx_10_12_x86_64.whl - name: rpds-py - version: 0.30.0 - sha256: f83424d738204d9770830d35290ff3273fbb02b41f919870479fab14b9d303b2 - requires_python: '>=3.10' - pypi: https://files.pythonhosted.org/packages/f2/e1/485132437d20aa4d3e1d8b3fb5a5e65aa8139f1e097080c2a8443201742c/rpds_py-0.30.0-cp313-cp313-win_amd64.whl name: rpds-py version: 0.30.0 @@ -9546,11 +8121,6 @@ packages: version: 0.30.0 sha256: e7536cd91353c5273434b4e003cbda89034d67e7710eab8761fd918ec6c69cf8 requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/04/d9/108cd989a4c0954e60b3cdc86fd2826407702b5375f6dfdab2802e5fed98/rtree-1.4.1-py3-none-macosx_10_9_x86_64.whl - name: rtree - version: 1.4.1 - sha256: d672184298527522d4914d8ae53bf76982b86ca420b0acde9298a7a87d81d4a4 - requires_python: '>=3.9' - pypi: https://files.pythonhosted.org/packages/74/25/5282c8270bfcd620d3e73beb35b40ac4ab00f0a898d98ebeb41ef0989ec8/rtree-1.4.1-py3-none-win_amd64.whl name: rtree version: 1.4.1 @@ -9571,154 +8141,20 @@ packages: version: 0.15.1 sha256: 1d83466455fdefe60b8d9c8df81d3c1bbb2115cede53549d3b522ce2bc703899 requires_python: '>=3.7' -- pypi: https://files.pythonhosted.org/packages/a3/1d/5f56cae1d6c40b8a318513599b35ea4b075d7dc1cd1d04449578c29d1d75/ruff-0.15.1-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - name: ruff - version: 0.15.1 - sha256: 4ab064052c31dddada35079901592dfba2e05f5b1e43af3954aafcbc1096a5b2 - requires_python: '>=3.7' -- pypi: https://files.pythonhosted.org/packages/b3/ea/c8f89d32e7912269d38c58f3649e453ac32c528f93bb7f4219258be2e7ed/ruff-0.15.1-py3-none-macosx_10_12_x86_64.whl - name: ruff - version: 0.15.1 - sha256: 939c995e9277e63ea632cc8d3fae17aa758526f49a9a850d2e7e758bfef46602 - requires_python: '>=3.7' -- pypi: https://files.pythonhosted.org/packages/e0/5e/d4ccc8a27ecdb78116feac4935dfc39d1304536f4296168f91ed3ec00cd2/ruff-0.15.1-py3-none-win_amd64.whl - name: ruff - version: 0.15.1 - sha256: c820fef9dd5d4172a6570e5721704a96c6679b80cf7be41659ed439653f62336 - requires_python: '>=3.7' -- pypi: https://files.pythonhosted.org/packages/78/2f/4966032c5f8cc7e6a60f1b2e0ad686293b9474b65246b0c642e3ef3badd0/scipy-1.15.3-cp310-cp310-macosx_10_13_x86_64.whl - name: scipy - version: 1.15.3 - sha256: a345928c86d535060c9c2b25e71e87c39ab2f22fc96e9636bd74d1dbf9de448c - requires_dist: - - numpy>=1.23.5,<2.5 - - pytest ; extra == 'test' - - pytest-cov ; extra == 'test' - - pytest-timeout ; extra == 'test' - - pytest-xdist ; extra == 'test' - - asv ; extra == 'test' - - mpmath ; extra == 'test' - - gmpy2 ; extra == 'test' - - threadpoolctl ; extra == 'test' - - scikit-umfpack ; extra == 'test' - - pooch ; extra == 'test' - - hypothesis>=6.30 ; extra == 'test' - - array-api-strict>=2.0,<2.1.1 ; extra == 'test' - - cython ; extra == 'test' - - meson ; extra == 'test' - - ninja ; sys_platform != 'emscripten' and extra == 'test' - - sphinx>=5.0.0,<8.0.0 ; extra == 'doc' - - intersphinx-registry ; extra == 'doc' - - pydata-sphinx-theme>=0.15.2 ; extra == 'doc' - - sphinx-copybutton ; extra == 'doc' - - sphinx-design>=0.4.0 ; extra == 'doc' - - matplotlib>=3.5 ; extra == 'doc' - - numpydoc ; extra == 'doc' - - jupytext ; extra == 'doc' - - myst-nb ; extra == 'doc' - - pooch ; extra == 'doc' - - jupyterlite-sphinx>=0.19.1 ; extra == 'doc' - - jupyterlite-pyodide-kernel ; extra == 'doc' - - mypy==1.10.0 ; extra == 'dev' - - typing-extensions ; extra == 'dev' - - types-psutil ; extra == 'dev' - - pycodestyle ; extra == 'dev' - - ruff>=0.0.292 ; extra == 'dev' - - cython-lint>=0.12.2 ; extra == 'dev' - - rich-click ; extra == 'dev' - - doit>=0.36.0 ; extra == 'dev' - - pydevtool ; extra == 'dev' - requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/8e/6d/41991e503e51fc1134502694c5fa7a1671501a17ffa12716a4a9151af3df/scipy-1.15.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - name: scipy - version: 1.15.3 - sha256: 9e2abc762b0811e09a0d3258abee2d98e0c703eee49464ce0069590846f31d40 - requires_dist: - - numpy>=1.23.5,<2.5 - - pytest ; extra == 'test' - - pytest-cov ; extra == 'test' - - pytest-timeout ; extra == 'test' - - pytest-xdist ; extra == 'test' - - asv ; extra == 'test' - - mpmath ; extra == 'test' - - gmpy2 ; extra == 'test' - - threadpoolctl ; extra == 'test' - - scikit-umfpack ; extra == 'test' - - pooch ; extra == 'test' - - hypothesis>=6.30 ; extra == 'test' - - array-api-strict>=2.0,<2.1.1 ; extra == 'test' - - cython ; extra == 'test' - - meson ; extra == 'test' - - ninja ; sys_platform != 'emscripten' and extra == 'test' - - sphinx>=5.0.0,<8.0.0 ; extra == 'doc' - - intersphinx-registry ; extra == 'doc' - - pydata-sphinx-theme>=0.15.2 ; extra == 'doc' - - sphinx-copybutton ; extra == 'doc' - - sphinx-design>=0.4.0 ; extra == 'doc' - - matplotlib>=3.5 ; extra == 'doc' - - numpydoc ; extra == 'doc' - - jupytext ; extra == 'doc' - - myst-nb ; extra == 'doc' - - pooch ; extra == 'doc' - - jupyterlite-sphinx>=0.19.1 ; extra == 'doc' - - jupyterlite-pyodide-kernel ; extra == 'doc' - - mypy==1.10.0 ; extra == 'dev' - - typing-extensions ; extra == 'dev' - - types-psutil ; extra == 'dev' - - pycodestyle ; extra == 'dev' - - ruff>=0.0.292 ; extra == 'dev' - - cython-lint>=0.12.2 ; extra == 'dev' - - rich-click ; extra == 'dev' - - doit>=0.36.0 ; extra == 'dev' - - pydevtool ; extra == 'dev' - requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/a0/6e/0c3bf90fae0e910c274db43304ebe25a6b391327f3f10b5dcc638c090795/scipy-1.15.3-cp310-cp310-macosx_12_0_arm64.whl - name: scipy - version: 1.15.3 - sha256: ad3432cb0f9ed87477a8d97f03b763fd1d57709f1bbde3c9369b1dff5503b253 - requires_dist: - - numpy>=1.23.5,<2.5 - - pytest ; extra == 'test' - - pytest-cov ; extra == 'test' - - pytest-timeout ; extra == 'test' - - pytest-xdist ; extra == 'test' - - asv ; extra == 'test' - - mpmath ; extra == 'test' - - gmpy2 ; extra == 'test' - - threadpoolctl ; extra == 'test' - - scikit-umfpack ; extra == 'test' - - pooch ; extra == 'test' - - hypothesis>=6.30 ; extra == 'test' - - array-api-strict>=2.0,<2.1.1 ; extra == 'test' - - cython ; extra == 'test' - - meson ; extra == 'test' - - ninja ; sys_platform != 'emscripten' and extra == 'test' - - sphinx>=5.0.0,<8.0.0 ; extra == 'doc' - - intersphinx-registry ; extra == 'doc' - - pydata-sphinx-theme>=0.15.2 ; extra == 'doc' - - sphinx-copybutton ; extra == 'doc' - - sphinx-design>=0.4.0 ; extra == 'doc' - - matplotlib>=3.5 ; extra == 'doc' - - numpydoc ; extra == 'doc' - - jupytext ; extra == 'doc' - - myst-nb ; extra == 'doc' - - pooch ; extra == 'doc' - - jupyterlite-sphinx>=0.19.1 ; extra == 'doc' - - jupyterlite-pyodide-kernel ; extra == 'doc' - - mypy==1.10.0 ; extra == 'dev' - - typing-extensions ; extra == 'dev' - - types-psutil ; extra == 'dev' - - pycodestyle ; extra == 'dev' - - ruff>=0.0.292 ; extra == 'dev' - - cython-lint>=0.12.2 ; extra == 'dev' - - rich-click ; extra == 'dev' - - doit>=0.36.0 ; extra == 'dev' - - pydevtool ; extra == 'dev' - requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/d1/84/55bc4881973d3f79b479a5a2e2df61c8c9a04fcb986a213ac9c02cfb659b/scipy-1.15.3-cp310-cp310-win_amd64.whl +- pypi: https://files.pythonhosted.org/packages/a3/1d/5f56cae1d6c40b8a318513599b35ea4b075d7dc1cd1d04449578c29d1d75/ruff-0.15.1-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + name: ruff + version: 0.15.1 + sha256: 4ab064052c31dddada35079901592dfba2e05f5b1e43af3954aafcbc1096a5b2 + requires_python: '>=3.7' +- pypi: https://files.pythonhosted.org/packages/e0/5e/d4ccc8a27ecdb78116feac4935dfc39d1304536f4296168f91ed3ec00cd2/ruff-0.15.1-py3-none-win_amd64.whl + name: ruff + version: 0.15.1 + sha256: c820fef9dd5d4172a6570e5721704a96c6679b80cf7be41659ed439653f62336 + requires_python: '>=3.7' +- pypi: https://files.pythonhosted.org/packages/8e/6d/41991e503e51fc1134502694c5fa7a1671501a17ffa12716a4a9151af3df/scipy-1.15.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl name: scipy version: 1.15.3 - sha256: 9d61e97b186a57350f6d6fd72640f9e99d5a4a2b8fbf4b9ee9a841eab327dc13 + sha256: 9e2abc762b0811e09a0d3258abee2d98e0c703eee49464ce0069590846f31d40 requires_dist: - numpy>=1.23.5,<2.5 - pytest ; extra == 'test' @@ -9758,57 +8194,13 @@ packages: - doit>=0.36.0 ; extra == 'dev' - pydevtool ; extra == 'dev' requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/0b/11/7241a63e73ba5a516f1930ac8d5b44cbbfabd35ac73a2d08ca206df007c4/scipy-1.17.0-cp312-cp312-macosx_10_14_x86_64.whl - name: scipy - version: 1.17.0 - sha256: 0d5018a57c24cb1dd828bcf51d7b10e65986d549f52ef5adb6b4d1ded3e32a57 - requires_dist: - - numpy>=1.26.4,<2.7 - - pytest>=8.0.0 ; extra == 'test' - - pytest-cov ; extra == 'test' - - pytest-timeout ; extra == 'test' - - pytest-xdist ; extra == 'test' - - asv ; extra == 'test' - - mpmath ; extra == 'test' - - gmpy2 ; extra == 'test' - - threadpoolctl ; extra == 'test' - - scikit-umfpack ; extra == 'test' - - pooch ; extra == 'test' - - hypothesis>=6.30 ; extra == 'test' - - array-api-strict>=2.3.1 ; extra == 'test' - - cython ; extra == 'test' - - meson ; extra == 'test' - - ninja ; sys_platform != 'emscripten' and extra == 'test' - - sphinx>=5.0.0,<8.2.0 ; extra == 'doc' - - intersphinx-registry ; extra == 'doc' - - pydata-sphinx-theme>=0.15.2 ; extra == 'doc' - - sphinx-copybutton ; extra == 'doc' - - sphinx-design>=0.4.0 ; extra == 'doc' - - matplotlib>=3.5 ; extra == 'doc' - - numpydoc ; extra == 'doc' - - jupytext ; extra == 'doc' - - myst-nb>=1.2.0 ; extra == 'doc' - - pooch ; extra == 'doc' - - jupyterlite-sphinx>=0.19.1 ; extra == 'doc' - - jupyterlite-pyodide-kernel ; extra == 'doc' - - linkify-it-py ; extra == 'doc' - - tabulate ; extra == 'doc' - - click<8.3.0 ; extra == 'dev' - - spin ; extra == 'dev' - - mypy==1.10.0 ; extra == 'dev' - - typing-extensions ; extra == 'dev' - - types-psutil ; extra == 'dev' - - pycodestyle ; extra == 'dev' - - ruff>=0.12.0 ; extra == 'dev' - - cython-lint>=0.12.2 ; extra == 'dev' - requires_python: '>=3.11' -- pypi: https://files.pythonhosted.org/packages/0c/51/3468fdfd49387ddefee1636f5cf6d03ce603b75205bf439bbf0e62069bfd/scipy-1.17.0-cp313-cp313-macosx_10_14_x86_64.whl +- pypi: https://files.pythonhosted.org/packages/a0/6e/0c3bf90fae0e910c274db43304ebe25a6b391327f3f10b5dcc638c090795/scipy-1.15.3-cp310-cp310-macosx_12_0_arm64.whl name: scipy - version: 1.17.0 - sha256: 65ec32f3d32dfc48c72df4291345dae4f048749bc8d5203ee0a3f347f96c5ce6 + version: 1.15.3 + sha256: ad3432cb0f9ed87477a8d97f03b763fd1d57709f1bbde3c9369b1dff5503b253 requires_dist: - - numpy>=1.26.4,<2.7 - - pytest>=8.0.0 ; extra == 'test' + - numpy>=1.23.5,<2.5 + - pytest ; extra == 'test' - pytest-cov ; extra == 'test' - pytest-timeout ; extra == 'test' - pytest-xdist ; extra == 'test' @@ -9819,11 +8211,11 @@ packages: - scikit-umfpack ; extra == 'test' - pooch ; extra == 'test' - hypothesis>=6.30 ; extra == 'test' - - array-api-strict>=2.3.1 ; extra == 'test' + - array-api-strict>=2.0,<2.1.1 ; extra == 'test' - cython ; extra == 'test' - meson ; extra == 'test' - ninja ; sys_platform != 'emscripten' and extra == 'test' - - sphinx>=5.0.0,<8.2.0 ; extra == 'doc' + - sphinx>=5.0.0,<8.0.0 ; extra == 'doc' - intersphinx-registry ; extra == 'doc' - pydata-sphinx-theme>=0.15.2 ; extra == 'doc' - sphinx-copybutton ; extra == 'doc' @@ -9831,28 +8223,27 @@ packages: - matplotlib>=3.5 ; extra == 'doc' - numpydoc ; extra == 'doc' - jupytext ; extra == 'doc' - - myst-nb>=1.2.0 ; extra == 'doc' + - myst-nb ; extra == 'doc' - pooch ; extra == 'doc' - jupyterlite-sphinx>=0.19.1 ; extra == 'doc' - jupyterlite-pyodide-kernel ; extra == 'doc' - - linkify-it-py ; extra == 'doc' - - tabulate ; extra == 'doc' - - click<8.3.0 ; extra == 'dev' - - spin ; extra == 'dev' - mypy==1.10.0 ; extra == 'dev' - typing-extensions ; extra == 'dev' - types-psutil ; extra == 'dev' - pycodestyle ; extra == 'dev' - - ruff>=0.12.0 ; extra == 'dev' + - ruff>=0.0.292 ; extra == 'dev' - cython-lint>=0.12.2 ; extra == 'dev' - requires_python: '>=3.11' -- pypi: https://files.pythonhosted.org/packages/1e/4b/c89c131aa87cad2b77a54eb0fb94d633a842420fa7e919dc2f922037c3d8/scipy-1.17.0-cp311-cp311-macosx_10_14_x86_64.whl + - rich-click ; extra == 'dev' + - doit>=0.36.0 ; extra == 'dev' + - pydevtool ; extra == 'dev' + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/d1/84/55bc4881973d3f79b479a5a2e2df61c8c9a04fcb986a213ac9c02cfb659b/scipy-1.15.3-cp310-cp310-win_amd64.whl name: scipy - version: 1.17.0 - sha256: 2abd71643797bd8a106dff97894ff7869eeeb0af0f7a5ce02e4227c6a2e9d6fd + version: 1.15.3 + sha256: 9d61e97b186a57350f6d6fd72640f9e99d5a4a2b8fbf4b9ee9a841eab327dc13 requires_dist: - - numpy>=1.26.4,<2.7 - - pytest>=8.0.0 ; extra == 'test' + - numpy>=1.23.5,<2.5 + - pytest ; extra == 'test' - pytest-cov ; extra == 'test' - pytest-timeout ; extra == 'test' - pytest-xdist ; extra == 'test' @@ -9863,11 +8254,11 @@ packages: - scikit-umfpack ; extra == 'test' - pooch ; extra == 'test' - hypothesis>=6.30 ; extra == 'test' - - array-api-strict>=2.3.1 ; extra == 'test' + - array-api-strict>=2.0,<2.1.1 ; extra == 'test' - cython ; extra == 'test' - meson ; extra == 'test' - ninja ; sys_platform != 'emscripten' and extra == 'test' - - sphinx>=5.0.0,<8.2.0 ; extra == 'doc' + - sphinx>=5.0.0,<8.0.0 ; extra == 'doc' - intersphinx-registry ; extra == 'doc' - pydata-sphinx-theme>=0.15.2 ; extra == 'doc' - sphinx-copybutton ; extra == 'doc' @@ -9875,21 +8266,20 @@ packages: - matplotlib>=3.5 ; extra == 'doc' - numpydoc ; extra == 'doc' - jupytext ; extra == 'doc' - - myst-nb>=1.2.0 ; extra == 'doc' + - myst-nb ; extra == 'doc' - pooch ; extra == 'doc' - jupyterlite-sphinx>=0.19.1 ; extra == 'doc' - jupyterlite-pyodide-kernel ; extra == 'doc' - - linkify-it-py ; extra == 'doc' - - tabulate ; extra == 'doc' - - click<8.3.0 ; extra == 'dev' - - spin ; extra == 'dev' - mypy==1.10.0 ; extra == 'dev' - typing-extensions ; extra == 'dev' - types-psutil ; extra == 'dev' - pycodestyle ; extra == 'dev' - - ruff>=0.12.0 ; extra == 'dev' + - ruff>=0.0.292 ; extra == 'dev' - cython-lint>=0.12.2 ; extra == 'dev' - requires_python: '>=3.11' + - rich-click ; extra == 'dev' + - doit>=0.36.0 ; extra == 'dev' + - pydevtool ; extra == 'dev' + requires_python: '>=3.10' - pypi: https://files.pythonhosted.org/packages/52/c8/08629657ac6c0da198487ce8cd3de78e02cfde42b7f34117d56a3fe249dc/scipy-1.17.0-cp311-cp311-win_amd64.whl name: scipy version: 1.17.0 @@ -10294,21 +8684,6 @@ packages: - cryptography>=2.0 - jeepney>=0.6 requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/05/89/c3548aa9b9812a5d143986764dededfa48d817714e947398bdda87c77a72/shapely-2.1.2-cp310-cp310-macosx_10_9_x86_64.whl - name: shapely - version: 2.1.2 - sha256: 7ae48c236c0324b4e139bea88a306a04ca630f49be66741b340729d380d8f52f - requires_dist: - - numpy>=1.21 - - pytest ; extra == 'test' - - pytest-cov ; extra == 'test' - - scipy-doctest ; extra == 'test' - - numpydoc==1.1.* ; extra == 'docs' - - matplotlib ; extra == 'docs' - - sphinx ; extra == 'docs' - - sphinx-book-theme ; extra == 'docs' - - sphinx-remove-toctrees ; extra == 'docs' - requires_python: '>=3.10' - pypi: https://files.pythonhosted.org/packages/13/02/58b0b8d9c17c93ab6340edd8b7308c0c5a5b81f94ce65705819b7416dba5/shapely-2.1.2-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl name: shapely version: 2.1.2 @@ -10324,21 +8699,6 @@ packages: - sphinx-book-theme ; extra == 'docs' - sphinx-remove-toctrees ; extra == 'docs' requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/24/c0/f3b6453cf2dfa99adc0ba6675f9aaff9e526d2224cbd7ff9c1a879238693/shapely-2.1.2-cp312-cp312-macosx_10_13_x86_64.whl - name: shapely - version: 2.1.2 - sha256: fe2533caae6a91a543dec62e8360fe86ffcdc42a7c55f9dfd0128a977a896b94 - requires_dist: - - numpy>=1.21 - - pytest ; extra == 'test' - - pytest-cov ; extra == 'test' - - scipy-doctest ; extra == 'test' - - numpydoc==1.1.* ; extra == 'docs' - - matplotlib ; extra == 'docs' - - sphinx ; extra == 'docs' - - sphinx-book-theme ; extra == 'docs' - - sphinx-remove-toctrees ; extra == 'docs' - requires_python: '>=3.10' - pypi: https://files.pythonhosted.org/packages/38/1e/3f8ea46353c2a33c1669eb7327f9665103aa3a8dfe7f2e4ef714c210b2c2/shapely-2.1.2-cp311-cp311-win_amd64.whl name: shapely version: 2.1.2 @@ -10429,21 +8789,6 @@ packages: - sphinx-book-theme ; extra == 'docs' - sphinx-remove-toctrees ; extra == 'docs' requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/8f/8d/1ff672dea9ec6a7b5d422eb6d095ed886e2e523733329f75fdcb14ee1149/shapely-2.1.2-cp311-cp311-macosx_10_9_x86_64.whl - name: shapely - version: 2.1.2 - sha256: 91121757b0a36c9aac3427a651a7e6567110a4a67c97edf04f8d55d4765f6618 - requires_dist: - - numpy>=1.21 - - pytest ; extra == 'test' - - pytest-cov ; extra == 'test' - - scipy-doctest ; extra == 'test' - - numpydoc==1.1.* ; extra == 'docs' - - matplotlib ; extra == 'docs' - - sphinx ; extra == 'docs' - - sphinx-book-theme ; extra == 'docs' - - sphinx-remove-toctrees ; extra == 'docs' - requires_python: '>=3.10' - pypi: https://files.pythonhosted.org/packages/b9/37/e781683abac55dde9771e086b790e554811a71ed0b2b8a1e789b7430dd44/shapely-2.1.2-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl name: shapely version: 2.1.2 @@ -10459,21 +8804,6 @@ packages: - sphinx-book-theme ; extra == 'docs' - sphinx-remove-toctrees ; extra == 'docs' requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/c3/90/98ef257c23c46425dc4d1d31005ad7c8d649fe423a38b917db02c30f1f5a/shapely-2.1.2-cp313-cp313-macosx_10_13_x86_64.whl - name: shapely - version: 2.1.2 - sha256: b510dda1a3672d6879beb319bc7c5fd302c6c354584690973c838f46ec3e0fa8 - requires_dist: - - numpy>=1.21 - - pytest ; extra == 'test' - - pytest-cov ; extra == 'test' - - scipy-doctest ; extra == 'test' - - numpydoc==1.1.* ; extra == 'docs' - - matplotlib ; extra == 'docs' - - sphinx ; extra == 'docs' - - sphinx-book-theme ; extra == 'docs' - - sphinx-remove-toctrees ; extra == 'docs' - requires_python: '>=3.10' - pypi: https://files.pythonhosted.org/packages/ce/8a/7ebc947080442edd614ceebe0ce2cdbd00c25e832c240e1d1de61d0e6b38/shapely-2.1.2-cp310-cp310-macosx_11_0_arm64.whl name: shapely version: 2.1.2 @@ -10760,6 +9090,15 @@ packages: - mypy ; extra == 'test' - zest-releaser[recommended] ; extra == 'test' requires_python: '>=3.8' +- pypi: https://files.pythonhosted.org/packages/a2/09/77d55d46fd61b4a135c444fc97158ef34a095e5681d0a6c10b75bf356191/sympy-1.14.0-py3-none-any.whl + name: sympy + version: 1.14.0 + sha256: e091cc3e99d2141a0ba2847328f5479b05d94a6635cb96148ccb3f34671bd8f5 + requires_dist: + - mpmath>=1.1.0,<1.4 + - pytest>=7.1.0 ; extra == 'dev' + - hypothesis>=6.70.0 ; extra == 'dev' + requires_python: '>=3.9' - conda: https://conda.anaconda.org/conda-forge/noarch/sysroot_linux-64-2.28-h4ee821c_9.conda sha256: c47299fe37aebb0fcf674b3be588e67e4afb86225be4b0d452c7eb75c086b851 md5: 13dc3adbc692664cd3beabd216434749 @@ -10786,17 +9125,6 @@ packages: purls: [] size: 3301196 timestamp: 1769460227866 -- conda: https://conda.anaconda.org/conda-forge/osx-64/tk-8.6.13-h7142dee_3.conda - sha256: 7f0d9c320288532873e2d8486c331ec6d87919c9028208d3f6ac91dc8f99a67b - md5: 6e6efb7463f8cef69dbcb4c2205bf60e - depends: - - __osx >=10.13 - - libzlib >=1.3.1,<2.0a0 - license: TCL - license_family: BSD - purls: [] - size: 3282953 - timestamp: 1769460532442 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tk-8.6.13-h010d191_3.conda sha256: 799cab4b6cde62f91f750149995d149bc9db525ec12595e8a1d91b9317f038b3 md5: a9d86bc62f39b94c4661716624eb21b0 @@ -10907,11 +9235,70 @@ packages: - id - keyring>=21.2.0 ; extra == 'keyring' requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/d4/35/7541d1f046491fac8ce05d543d3f0de0af02086ad864dd3a23535ec703b9/typeguard-4.5.0-py3-none-any.whl + name: typeguard + version: 4.5.0 + sha256: cfda388fc88a9ce42a41890900d6f31ee124bea9b73bb84701a32438e92165c3 + requires_dist: + - importlib-metadata>=3.6 ; python_full_version < '3.10' + - typing-extensions>=4.14.0 + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/91/88/b55b3117287a8540b76dbdd87733808d4d01c8067a3b339408c250bb3600/typeguard-4.5.1-py3-none-any.whl + name: typeguard + version: 4.5.1 + sha256: 44d2bf329d49a244110a090b55f5f91aa82d9a9834ebfd30bcc73651e4a8cc40 + requires_dist: + - importlib-metadata>=3.6 ; python_full_version < '3.10' + - typing-extensions>=4.14.0 + requires_python: '>=3.9' - pypi: https://files.pythonhosted.org/packages/18/67/36e9267722cc04a6b9f15c7f3441c2363321a3ea07da7ae0c0707beb2a9c/typing_extensions-4.15.0-py3-none-any.whl name: typing-extensions version: 4.15.0 sha256: f0fa19c6845758ab08074a0cfa8b7aecb71c999ca73d62883bc25cc018c4e548 requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/a7/f9/56b0cb8c5c287c7eec02735cce74a4c25cc56d6817bab7edde6f32b024a3/tyro-1.0.6-py3-none-any.whl + name: tyro + version: 1.0.6 + sha256: 43a6c63419e8c14c3c21981b2614a583b5d14d0bb1300d7c7f328bec0f46cd37 + requires_dist: + - docstring-parser>=0.15 + - eval-type-backport>=0.1.3 ; python_full_version < '3.10' + - typeguard>=4.0.0 + - typing-extensions>=4.13.0 + - attrs>=21.4.0 ; extra == 'dev' + - coverage[toml]>=6.5.0 ; extra == 'dev' + - eval-type-backport>=0.1.3 ; extra == 'dev' + - ml-collections>=0.1.0 ; extra == 'dev' + - msgspec>=0.18.6 ; extra == 'dev' + - mypy>=1.4.1 ; extra == 'dev' + - omegaconf>=2.2.2 ; extra == 'dev' + - pydantic>=2.5.2,!=2.10.0 ; extra == 'dev' + - pyright>=1.1.349,!=1.1.379 ; extra == 'dev' + - pytest-cov>=3.0.0 ; extra == 'dev' + - pytest-xdist>=3.5.0 ; extra == 'dev' + - pytest>=7.1.2 ; extra == 'dev' + - pyyaml>=6.0 ; extra == 'dev' + - shtab>=1.5.6 ; extra == 'dev' + - universal-pathlib>=0.2.0 ; extra == 'dev' + - attrs>=21.4.0 ; extra == 'dev-nn' + - coverage[toml]>=6.5.0 ; extra == 'dev-nn' + - eval-type-backport>=0.1.3 ; extra == 'dev-nn' + - flax>=0.6.9 ; python_full_version >= '3.10' and python_full_version < '3.14' and extra == 'dev-nn' + - ml-collections>=0.1.0 ; extra == 'dev-nn' + - msgspec>=0.18.6 ; extra == 'dev-nn' + - mypy>=1.4.1 ; extra == 'dev-nn' + - numpy>=1.20.0 ; extra == 'dev-nn' + - omegaconf>=2.2.2 ; extra == 'dev-nn' + - pydantic>=2.5.2,!=2.10.0 ; extra == 'dev-nn' + - pyright>=1.1.349,!=1.1.379 ; extra == 'dev-nn' + - pytest-cov>=3.0.0 ; extra == 'dev-nn' + - pytest-xdist>=3.5.0 ; extra == 'dev-nn' + - pytest>=7.1.2 ; extra == 'dev-nn' + - pyyaml>=6.0 ; extra == 'dev-nn' + - shtab>=1.5.6 ; extra == 'dev-nn' + - torch>=1.10.0 ; python_full_version >= '3.9' and python_full_version < '3.14' and extra == 'dev-nn' + - universal-pathlib>=0.2.0 ; extra == 'dev-nn' + requires_python: '>=3.8' - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda sha256: 1d30098909076af33a35017eed6f2953af1c769e273a0626a04722ac4acaba3c md5: ad659d0a2b3e47e38d829aa8cad2d610 @@ -10940,25 +9327,20 @@ packages: - pysocks>=1.5.6,!=1.5.7,<2.0 ; extra == 'socks' - backports-zstd>=1.0.0 ; python_full_version < '3.14' and extra == 'zstd' requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/0b/8c/cce26f6da9f69a9f0df032d642a4cb5603249f145c368e41b0154c463ca9/uv-0.10.3-py3-none-macosx_11_0_arm64.whl +- pypi: https://files.pythonhosted.org/packages/31/dd/1900452678d46f6a649ab8167bededb02500b0561fc9f69e1f52607895c7/uv-0.10.4-py3-none-win_amd64.whl name: uv - version: 0.10.3 - sha256: 52241dbefdc1be57aaa37171d27372252d64f3347a5df9e5b8ee3de49207f6ff + version: 0.10.4 + sha256: 4a1c595cf692fa611019a7ad9bf4b0757fccd0a3f838ca05e53db82912ddaa39 requires_python: '>=3.8' -- pypi: https://files.pythonhosted.org/packages/40/db/c5729ec39ed557ac673ca993abd71e5b18d71a92f95f1845152e639000ff/uv-0.10.3-py3-none-macosx_10_12_x86_64.whl +- pypi: https://files.pythonhosted.org/packages/63/91/c4ddf7e55e05394967615050cc364a999157a44c008d0e1e9db2ed49a11c/uv-0.10.4-py3-none-macosx_11_0_arm64.whl name: uv - version: 0.10.3 - sha256: 815717d3ed409ca7573d3f95125d6bcec6978d2236bddad7bc123ac12dc6cfbb + version: 0.10.4 + sha256: 751959135a62f006ef51f3fcc5d02ec67986defa0424d470cce0918eede36a55 requires_python: '>=3.8' -- pypi: https://files.pythonhosted.org/packages/ce/de/0638d8aa83c2038c5f820151006b3bf372d109afbfdb2a8fc59187cc3690/uv-0.10.3-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl +- pypi: https://files.pythonhosted.org/packages/f2/b3/4b9580d62e1245df52e8516cf3e404ff39cc72634d2d749d47b1dada4161/uv-0.10.4-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl name: uv - version: 0.10.3 - sha256: f8daf6530d6496da799dd53a4bfafe138b412a714ea0bff34472c1267229054c - requires_python: '>=3.8' -- pypi: https://files.pythonhosted.org/packages/d5/95/89b9caeb4007d950dfa5fa5923c2ea67de541de0e3582598b7b9c7eeac53/uv-0.10.3-py3-none-win_amd64.whl - name: uv - version: 0.10.3 - sha256: 4f2fa16083b6c5277f81c5b3ea4bf12e25e6d16c2a71c3c794506bd080c5afe6 + version: 0.10.4 + sha256: 82978155e571f2ac3dd57077bd746bfe41b65fa19accc3c92d1f09632cd36c63 requires_python: '>=3.8' - conda: https://conda.anaconda.org/conda-forge/win-64/vc-14.3-h41ae7f8_34.conda sha256: 9dc40c2610a6e6727d635c62cced5ef30b7b30123f5ef67d6139e23d21744b3a @@ -10997,14 +9379,6 @@ packages: purls: [] size: 115235 timestamp: 1767320173250 -- pypi: https://files.pythonhosted.org/packages/0e/54/c2fc08d9324bbd92735caf9207cbabada3a8dd9d270d6e46ca69eb7f883d/vhacdx-0.0.10-cp313-cp313-macosx_10_13_x86_64.whl - name: vhacdx - version: 0.0.10 - sha256: 0599bc2a96de8fc9aeff460b3e88b8572e84ae95b8fc6c9888ef4b92023c22d5 - requires_dist: - - numpy - - pytest ; extra == 'test' - requires_python: '>=3.7' - pypi: https://files.pythonhosted.org/packages/32/25/f0e6806824f88d47ab8bc1c9bf6f11634fd7b382d635d0696825f3b5672f/vhacdx-0.0.10-cp313-cp313-win_amd64.whl name: vhacdx version: 0.0.10 @@ -11061,14 +9435,6 @@ packages: - numpy - pytest ; extra == 'test' requires_python: '>=3.7' -- pypi: https://files.pythonhosted.org/packages/b7/2c/d49df6fec3294cef3c8c88c54784162bd8350c427fecd9b16335772b760f/vhacdx-0.0.10-cp311-cp311-macosx_10_9_x86_64.whl - name: vhacdx - version: 0.0.10 - sha256: 8584f33ed020b6cce678b8febcf84af22bced617ef31c85bf31fd7e2b4bba9fe - requires_dist: - - numpy - - pytest ; extra == 'test' - requires_python: '>=3.7' - pypi: https://files.pythonhosted.org/packages/b8/b4/07ab1c828bae0eb5c72cd9a4cbe8b0376d374509be3c7055e1a399bf85c3/vhacdx-0.0.10-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl name: vhacdx version: 0.0.10 @@ -11085,22 +9451,6 @@ packages: - numpy - pytest ; extra == 'test' requires_python: '>=3.7' -- pypi: https://files.pythonhosted.org/packages/c4/f4/da308d86daaa9c636851357cbd928715d47963beecd525b3749d2d5c9537/vhacdx-0.0.10-cp310-cp310-macosx_10_9_x86_64.whl - name: vhacdx - version: 0.0.10 - sha256: 4bc7be82fab608cb7231e95a0a10700be1e9422a36b21e7d49c782a598c8d37c - requires_dist: - - numpy - - pytest ; extra == 'test' - requires_python: '>=3.7' -- pypi: https://files.pythonhosted.org/packages/cf/9c/66375e65634c80f6efb46e81915126bf3e55dc9d6615217590cbc8316d2e/vhacdx-0.0.10-cp312-cp312-macosx_10_13_x86_64.whl - name: vhacdx - version: 0.0.10 - sha256: 7dd17d697d6d4d7cf66f1e947e0530041913981e05f7025236bec28a350b1a33 - requires_dist: - - numpy - - pytest ; extra == 'test' - requires_python: '>=3.7' - pypi: https://files.pythonhosted.org/packages/de/c8/a8260b780e4578d7ef19b70343f9717f74ff48f9950138c96c78f209ec01/vhacdx-0.0.10-cp311-cp311-win_amd64.whl name: vhacdx version: 0.0.10 @@ -11125,26 +9475,21 @@ packages: - numpy - pytest ; extra == 'test' requires_python: '>=3.7' -- pypi: https://files.pythonhosted.org/packages/42/4b/6cf85b485be7ec29db837ec2a1d8cd68bc1147b1abf23d8636c5bd65b3cc/virtualenv-20.37.0-py3-none-any.whl +- pypi: https://files.pythonhosted.org/packages/6a/2a/dc2228b2888f51192c7dc766106cd475f1b768c10caaf9727659726f7391/virtualenv-20.36.1-py3-none-any.whl name: virtualenv - version: 20.37.0 - sha256: 5d3951c32d57232ae3569d4de4cc256c439e045135ebf43518131175d9be435d + version: 20.36.1 + sha256: 575a8d6b124ef88f6f51d56d656132389f961062a9177016a50e4f507bbcc19f requires_dist: - distlib>=0.3.7,<1 - - filelock>=3.24.2,<4 ; python_full_version >= '3.10' - - filelock>=3.16.1,<=3.19.1 ; python_full_version < '3.10' + - filelock>=3.16.1,<4 ; python_full_version < '3.10' + - filelock>=3.20.1,<4 ; python_full_version >= '3.10' - importlib-metadata>=6.6 ; python_full_version < '3.8' - platformdirs>=3.9.1,<5 - typing-extensions>=4.13.2 ; python_full_version < '3.11' - furo>=2023.7.26 ; extra == 'docs' - - pre-commit-uv>=4.1.4 ; extra == 'docs' - proselint>=0.13 ; extra == 'docs' - sphinx>=7.1.2,!=7.3 ; extra == 'docs' - sphinx-argparse>=0.4 ; extra == 'docs' - - sphinx-autodoc-typehints>=3.6.2 ; extra == 'docs' - - sphinx-copybutton>=0.5.2 ; extra == 'docs' - - sphinx-inline-tabs>=2025.12.21.14 ; extra == 'docs' - - sphinxcontrib-mermaid>=2 ; extra == 'docs' - sphinxcontrib-towncrier>=0.2.1a0 ; extra == 'docs' - towncrier>=23.6 ; extra == 'docs' - covdefaults>=2.3 ; extra == 'test' @@ -11157,7 +9502,6 @@ packages: - pytest-mock>=3.11.1 ; extra == 'test' - pytest-randomly>=3.12 ; extra == 'test' - pytest-timeout>=2.1 ; extra == 'test' - - pytest-xdist>=3.5 ; extra == 'test' - pytest>=7.4 ; extra == 'test' - setuptools>=68 ; extra == 'test' - time-machine>=2.10 ; platform_python_implementation == 'CPython' and extra == 'test' @@ -11197,6 +9541,32 @@ packages: - torch>=1.13.1 ; extra == 'examples' - tyro>=0.2.0,<1.0.0 ; extra == 'examples' requires_python: '>=3.8' +- pypi: https://files.pythonhosted.org/packages/c2/bb/21e9396a963d50171f539f4a4c9411435e7bb9c5131f4480f882d5e51dc6/warp_lang-1.11.1-py3-none-manylinux_2_28_x86_64.whl + name: warp-lang + version: 1.11.1 + sha256: 8b098f41e71d421d80ee7562e38aa8380ff6b0d3b4c6ee866cfbdef733ac5bdc + requires_dist: + - numpy + - nvidia-sphinx-theme ; python_full_version >= '3.9' and extra == 'docs' + - sphinx-copybutton ; extra == 'docs' + - pre-commit ; extra == 'docs' + - myst-parser ; extra == 'docs' + - usd-core>=25.5 ; python_full_version < '3.14' and platform_machine != 'aarch64' and extra == 'benchmark' + - usd-exchange>=2.1.0a3 ; python_full_version >= '3.10' and platform_machine == 'aarch64' and extra == 'benchmark' + - blosc>=1.11.1 ; extra == 'examples' + - matplotlib>=3.7.5 ; extra == 'examples' + - pillow>=10.4.0 ; extra == 'examples' + - psutil>=7.1.0 ; extra == 'examples' + - pyglet>=2.1.9 ; extra == 'examples' + - usd-core>=25.5 ; python_full_version < '3.14' and platform_machine != 'aarch64' and extra == 'examples' + - usd-exchange>=2.1.0a3 ; python_full_version >= '3.10' and platform_machine == 'aarch64' and extra == 'examples' + - warp-lang[examples] ; extra == 'torch-cu12' + - torch>=2.7.0 ; python_full_version >= '3.9' and extra == 'torch-cu12' + - warp-lang[examples] ; extra == 'dev' + - warp-lang[docs] ; extra == 'dev' + - nvtx ; extra == 'dev' + - coverage[toml] ; extra == 'dev' + requires_python: '>=3.9' - pypi: https://files.pythonhosted.org/packages/14/8f/aa61f528fba38578ec553c145857a181384c72b98156f858ca5c8e82d9d3/websockets-15.0.1-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl name: websockets version: 15.0.1 @@ -11212,21 +9582,11 @@ packages: version: 15.0.1 sha256: 39c1fec2c11dc8d89bba6b2bf1556af381611a173ac2b511cf7231622058af41 requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/1c/9f/9d11c1a4eb046a9e106483b9ff69bce7ac880443f00e5ce64261b47b07e7/websockets-15.0.1-cp310-cp310-macosx_10_9_x86_64.whl - name: websockets - version: 15.0.1 - sha256: ac60e3b188ec7574cb761b08d50fcedf9d77f1530352db4eef1707fe9dee7205 - requires_python: '>=3.9' - pypi: https://files.pythonhosted.org/packages/3d/69/1a681dd6f02180916f116894181eab8b2e25b31e484c5d0eae637ec01f7c/websockets-15.0.1-cp312-cp312-macosx_11_0_arm64.whl name: websockets version: 15.0.1 sha256: 0701bc3cfcb9164d04a14b149fd74be7347a530ad3bbf15ab2c678a2cd3dd9a2 requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/76/70/ba1ad96b07869275ef42e2ce21f07a5b0148936688c2baf7e4a1f60d5058/websockets-15.0.1-cp311-cp311-macosx_10_9_x86_64.whl - name: websockets - version: 15.0.1 - sha256: 678999709e68425ae2593acf2e3ebcbcf2e69885a5ee78f9eb80e6e371f1bf57 - requires_python: '>=3.9' - pypi: https://files.pythonhosted.org/packages/7d/71/abf2ebc3bbfa40f391ce1428c7168fb20582d0ff57019b69ea20fa698043/websockets-15.0.1-cp312-cp312-win_amd64.whl name: websockets version: 15.0.1 @@ -11237,11 +9597,6 @@ packages: version: 15.0.1 sha256: d50fd1ee42388dcfb2b3676132c78116490976f1300da28eb629272d5d93e905 requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/8a/05/aa116ec9943c718905997412c5989f7ed671bc0188ee2ba89520e8765d7b/websockets-15.0.1-cp313-cp313-macosx_10_13_x86_64.whl - name: websockets - version: 15.0.1 - sha256: 5a939de6b7b4e18ca683218320fc67ea886038265fd1ed30173f5ce3f8e85675 - requires_python: '>=3.9' - pypi: https://files.pythonhosted.org/packages/93/1f/5d6dbf551766308f6f50f8baf8e9860be6182911e8106da7a7f73785f4c4/websockets-15.0.1-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl name: websockets version: 15.0.1 @@ -11262,11 +9617,6 @@ packages: version: 15.0.1 sha256: 5756779642579d902eed757b21b0164cd6fe338506a8083eb58af5c372e39d9a requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/f4/71/809a0f5f6a06522af902e0f2ea2757f71ead94610010cf570ab5c98e99ed/websockets-15.0.1-cp312-cp312-macosx_10_13_x86_64.whl - name: websockets - version: 15.0.1 - sha256: 592f1a9fe869c778694f0aa806ba0374e97648ab57936f092fd9d87f8bc03665 - requires_python: '>=3.9' - pypi: https://files.pythonhosted.org/packages/ff/0b/33cef55ff24f2d92924923c99926dcce78e7bd922d649467f0eda8368923/websockets-15.0.1-cp313-cp313-macosx_11_0_arm64.whl name: websockets version: 15.0.1 @@ -11296,11 +9646,6 @@ packages: version: 3.6.0 sha256: c0f2ab8c715630565ab8991b536ecded9416d615538be8ecddce43ccf26cbc7c requires_python: '>=3.7' -- pypi: https://files.pythonhosted.org/packages/17/d4/cc2f0400e9154df4b9964249da78ebd72f318e35ccc425e9f403c392f22a/xxhash-3.6.0-cp311-cp311-macosx_10_9_x86_64.whl - name: xxhash - version: 3.6.0 - sha256: b47bbd8cf2d72797f3c2772eaaac0ded3d3af26481a26d7d7d41dc2d3c46b04a - requires_python: '>=3.7' - pypi: https://files.pythonhosted.org/packages/2d/4b/55ab404c56cd70a2cf5ecfe484838865d0fea5627365c6c8ca156bd09c8f/xxhash-3.6.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl name: xxhash version: 3.6.0 @@ -11311,16 +9656,6 @@ packages: version: 3.6.0 sha256: 7d8b8aaa30fca4f16f0c84a5c8d7ddee0e25250ec2796c973775373257dde8f1 requires_python: '>=3.7' -- pypi: https://files.pythonhosted.org/packages/33/76/35d05267ac82f53ae9b0e554da7c5e281ee61f3cad44c743f0fcd354f211/xxhash-3.6.0-cp313-cp313-macosx_10_13_x86_64.whl - name: xxhash - version: 3.6.0 - sha256: 599e64ba7f67472481ceb6ee80fa3bd828fd61ba59fb11475572cc5ee52b89ec - requires_python: '>=3.7' -- pypi: https://files.pythonhosted.org/packages/34/ee/f9f1d656ad168681bb0f6b092372c1e533c4416b8069b1896a175c46e484/xxhash-3.6.0-cp310-cp310-macosx_10_9_x86_64.whl - name: xxhash - version: 3.6.0 - sha256: 87ff03d7e35c61435976554477a7f4cd1704c3596a89a8300d5ce7fc83874a71 - requires_python: '>=3.7' - pypi: https://files.pythonhosted.org/packages/5e/1e/3c3d3ef071b051cc3abbe3721ffb8365033a172613c04af2da89d5548a87/xxhash-3.6.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl name: xxhash version: 3.6.0 @@ -11346,11 +9681,6 @@ packages: version: 3.6.0 sha256: 757320d45d2fbcce8f30c42a6b2f47862967aea7bf458b9625b4bbe7ee390392 requires_python: '>=3.7' -- pypi: https://files.pythonhosted.org/packages/9a/07/d9412f3d7d462347e4511181dea65e47e0d0e16e26fbee2ea86a2aefb657/xxhash-3.6.0-cp312-cp312-macosx_10_13_x86_64.whl - name: xxhash - version: 3.6.0 - sha256: 01362c4331775398e7bb34e3ab403bc9ee9f7c497bc7dee6272114055277dd3c - requires_python: '>=3.7' - pypi: https://files.pythonhosted.org/packages/a3/b1/93508d9460b292c74a09b83d16750c52a0ead89c51eea9951cb97a60d959/xxhash-3.6.0-cp310-cp310-macosx_11_0_arm64.whl name: xxhash version: 3.6.0 @@ -11405,22 +9735,6 @@ packages: - pytest-enabler>=2.2 ; extra == 'enabler' - pytest-mypy ; extra == 'type' requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/2a/83/c3ca27c363d104980f1c9cee1101cc8ba724ac8c28a033ede6aab89585b1/zstandard-0.25.0-cp311-cp311-macosx_10_9_x86_64.whl - name: zstandard - version: 0.25.0 - sha256: 933b65d7680ea337180733cf9e87293cc5500cc0eb3fc8769f4d3c88d724ec5c - requires_dist: - - cffi~=1.17 ; python_full_version < '3.14' and platform_python_implementation != 'PyPy' and extra == 'cffi' - - cffi>=2.0.0b0 ; python_full_version >= '3.14' and platform_python_implementation != 'PyPy' and extra == 'cffi' - requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/35/0b/8df9c4ad06af91d39e94fa96cc010a24ac4ef1378d3efab9223cc8593d40/zstandard-0.25.0-cp313-cp313-macosx_10_13_x86_64.whl - name: zstandard - version: 0.25.0 - sha256: ec996f12524f88e151c339688c3897194821d7f03081ab35d31d1e12ec975e94 - requires_dist: - - cffi~=1.17 ; python_full_version < '3.14' and platform_python_implementation != 'PyPy' and extra == 'cffi' - - cffi>=2.0.0b0 ; python_full_version >= '3.14' and platform_python_implementation != 'PyPy' and extra == 'cffi' - requires_python: '>=3.9' - pypi: https://files.pythonhosted.org/packages/3f/06/9ae96a3e5dcfd119377ba33d4c42a7d89da1efabd5cb3e366b156c45ff4d/zstandard-0.25.0-cp313-cp313-macosx_11_0_arm64.whl name: zstandard version: 0.25.0 @@ -11445,14 +9759,6 @@ packages: - cffi~=1.17 ; python_full_version < '3.14' and platform_python_implementation != 'PyPy' and extra == 'cffi' - cffi>=2.0.0b0 ; python_full_version >= '3.14' and platform_python_implementation != 'PyPy' and extra == 'cffi' requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/56/7a/28efd1d371f1acd037ac64ed1c5e2b41514a6cc937dd6ab6a13ab9f0702f/zstandard-0.25.0-cp310-cp310-macosx_10_9_x86_64.whl - name: zstandard - version: 0.25.0 - sha256: e59fdc271772f6686e01e1b3b74537259800f57e24280be3f29c8a0deb1904dd - requires_dist: - - cffi~=1.17 ; python_full_version < '3.14' and platform_python_implementation != 'PyPy' and extra == 'cffi' - - cffi>=2.0.0b0 ; python_full_version >= '3.14' and platform_python_implementation != 'PyPy' and extra == 'cffi' - requires_python: '>=3.9' - pypi: https://files.pythonhosted.org/packages/63/4b/e3678b4e776db00f9f7b2fe58e547e8928ef32727d7a1ff01dea010f3f13/zstandard-0.25.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl name: zstandard version: 0.25.0 @@ -11469,14 +9775,6 @@ packages: - cffi~=1.17 ; python_full_version < '3.14' and platform_python_implementation != 'PyPy' and extra == 'cffi' - cffi>=2.0.0b0 ; python_full_version >= '3.14' and platform_python_implementation != 'PyPy' and extra == 'cffi' requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/82/fc/f26eb6ef91ae723a03e16eddb198abcfce2bc5a42e224d44cc8b6765e57e/zstandard-0.25.0-cp312-cp312-macosx_10_13_x86_64.whl - name: zstandard - version: 0.25.0 - sha256: 7b3c3a3ab9daa3eed242d6ecceead93aebbb8f5f84318d82cee643e019c4b73b - requires_dist: - - cffi~=1.17 ; python_full_version < '3.14' and platform_python_implementation != 'PyPy' and extra == 'cffi' - - cffi>=2.0.0b0 ; python_full_version >= '3.14' and platform_python_implementation != 'PyPy' and extra == 'cffi' - requires_python: '>=3.9' - pypi: https://files.pythonhosted.org/packages/93/90/96d50ad417a8ace5f841b3228e93d1bb13e6ad356737f42e2dde30d8bd68/zstandard-0.25.0-cp310-cp310-win_amd64.whl name: zstandard version: 0.25.0 @@ -11544,17 +9842,6 @@ packages: purls: [] size: 601375 timestamp: 1764777111296 -- conda: https://conda.anaconda.org/conda-forge/osx-64/zstd-1.5.7-h3eecb57_6.conda - sha256: 47101a4055a70a4876ffc87b750ab2287b67eca793f21c8224be5e1ee6394d3f - md5: 727109b184d680772e3122f40136d5ca - depends: - - __osx >=10.13 - - libzlib >=1.3.1,<2.0a0 - license: BSD-3-Clause - license_family: BSD - purls: [] - size: 528148 - timestamp: 1764777156963 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zstd-1.5.7-hbf9d68e_6.conda sha256: 9485ba49e8f47d2b597dd399e88f4802e100851b27c21d7525625b0b4025a5d9 md5: ab136e4c34e97f34fb621d2592a393d8 diff --git a/pyproject.toml b/pyproject.toml index 72bdb06a..560635ea 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -30,13 +30,15 @@ classifiers = [ dependencies = [ "dora-utils", # dora + qol utils for writing nodes - "mujoco>=3.5.0,<3.6", + "h5py", + "mujoco==3.4.0", "numpy", "pillow", # for displaying app logo "pycparser", "requests", # for sharing GUI link "rich", # for displaying tables in benchmarking "robot_descriptions", # for loading mujoco_menagerie Spot meshes + "tyro", "scipy", "viser>=1.0.0", ] @@ -189,7 +191,7 @@ ignore = [ [tool.pixi.workspace] channels = ["conda-forge"] -platforms = ["linux-64", "win-64", "osx-64", "osx-arm64"] +platforms = ["linux-64", "win-64", "osx-arm64"] [tool.pixi.dependencies] python = ">=3.10,<3.14" # mujoco has no 3.14 wheel yet @@ -227,10 +229,18 @@ python = "3.12.*" [tool.pixi.feature.py313.dependencies] python = "3.13.*" +[tool.pixi.feature.mjwarp.dependencies] +python = ">=3.11,<3.14" +[tool.pixi.feature.mjwarp.target.linux-64.pypi-dependencies] +mujoco_warp = "==0.0.2" +onnx = "*" +onnxruntime-gpu = ">=1.24" + [tool.pixi.environments] default = { solve-group = "default" } docs = { features = ["docs"], solve-group = "default" } dev = { features = ["dev", "docs"], solve-group = "default" } +mjwarp = { features = ["mjwarp"], solve-group = "mjwarp" } py310 = { features = ["dev", "py310"], solve-group = "py310" } py311 = { features = ["dev", "py311"], solve-group = "py311" } py312 = { features = ["dev", "py312"], solve-group = "py312" } diff --git a/run_mpc/configs/spot_tire_upright.json b/run_mpc/configs/spot_tire_upright.json new file mode 100644 index 00000000..0af1d339 --- /dev/null +++ b/run_mpc/configs/spot_tire_upright.json @@ -0,0 +1,39 @@ +{ + "controller_config": { + "horizon": 1.5, + "control_freq": 20.0, + "spline_order": "linear", + "max_opt_iters": 1, + "max_num_traces": 5, + "action_normalizer": "none" + }, + "task": "spot_tire_upright", + "task_config": { + "fall_penalty": 10000.0, + "spot_fallen_threshold": 0.35, + "w_goal": 60.0, + "w_controls": 2.0, + "orientation_error_smoothing_width": 1.0, + "w_tire_orientation": 200.0, + "w_gripper_proximity": 10.0, + "w_foot_proximity": 5.0, + "w_torso_proximity": 5.0, + "gripper_too_inside_tire_penalty": 150.0, + "gripper_not_above_tire_penalty": 100.0, + "goal_pos": [ + 0.0, + 0.0, + 0.0 + ] + }, + "optimizer": "cem", + "optimizer_config": { + "num_rollouts": 16, + "num_nodes": 3, + "use_noise_ramp": true, + "noise_ramp": 3.5, + "sigma_min": 0.1, + "sigma_max": 1.0, + "num_elites": 3 + } +} diff --git a/run_mpc/main.py b/run_mpc/main.py new file mode 100644 index 00000000..7a96aaf1 --- /dev/null +++ b/run_mpc/main.py @@ -0,0 +1,105 @@ +# Copyright (c) 2025 Robotics and AI Institute LLC. All rights reserved. + +"""Entry point for running batched MPC and saving trajectories to HDF5. + +Usage: python scripts/run_mpc --config-path +""" + +import json +import logging +from pathlib import Path + +import numpy as np +from tqdm import tqdm +import tyro + +from judo.visualizers.visualizer import Visualizer + +from mpc_batch import run_mpc_batch +from mpc_config import MPCTimers, PublicMPCConfig, decode_config, load_configs_from_json_data +from mpc_setup import save_results_to_h5, setup_mpc + + +def _load_json_config(config_path: Path) -> tuple[dict, Path]: + """Load and decode a JSON MPC config file, returning (data, resolved_path).""" + resolved = Path(config_path).resolve() + logging.info(f"Loading policy config from {resolved}") + with open(resolved, "r") as f: + return json.load(f, object_hook=decode_config), resolved + + +def _create_visualizer(config: PublicMPCConfig, json_configs: dict, num_parallel: int) -> Visualizer | None: + """Create a visualizer if enabled and in single-trajectory mode.""" + if not config.visualize: + return None + if num_parallel > 1: + logging.warning("Visualization not supported in batched mode. Disabling.") + return None + return Visualizer(init_task=json_configs["task"], init_optimizer=json_configs["optimizer"]) + + +def _resolve_output_path(config: PublicMPCConfig, config_path: Path) -> Path: + """Resolve the HDF5 output path, creating parent directories as needed.""" + if config.dataset_output_path is None: + output_path = config_path.parent / "trajectories.h5" + else: + output_path = Path(config.dataset_output_path).resolve() + output_path.parent.mkdir(parents=True, exist_ok=True) + return output_path + + +def run_mpc(config: PublicMPCConfig) -> None: + """Run batched MPC and write trajectories to an HDF5 file.""" + logging.basicConfig(level=logging.INFO, format="%(levelname)s - %(message)s", handlers=[logging.StreamHandler()]) + + json_configs, config_path = _load_json_config(config.config_path) + task, optimizer, controller_cfg = load_configs_from_json_data(json_configs) + task.model.opt.density = 0 # disable fluid dynamics for mujoco_warp compatibility + + num_parallel = min(config.num_parallel, config.num_trajectories) + sims, batched_controllers, size_data = setup_mpc( + config, json_configs, task, optimizer, controller_cfg, num_parallel + ) + vis = _create_visualizer(config, json_configs, num_parallel) + output_path = _resolve_output_path(config, config_path) + + logging.info(f"Running {config.num_trajectories} trajectories ({num_parallel} parallel) -> {output_path}") + + timers = MPCTimers.create() + all_results: list[dict[str, np.ndarray | int]] = [] + total_attempted = 0 + max_attempts = config.num_trajectories * 2 + + with tqdm(total=config.num_trajectories, desc="Successful trajectories", unit="traj") as pbar: + while len(all_results) < config.num_trajectories and total_attempted < max_attempts: + batch_results = run_mpc_batch(sims, batched_controllers, config, size_data, timers, vis=vis) + for result in batch_results: + if result["success"] and len(all_results) < config.num_trajectories: + all_results.append(result) + pbar.update(1) + total_attempted += len(batch_results) + + if len(all_results) < config.num_trajectories: + logging.warning( + f"Only {len(all_results)}/{config.num_trajectories} successful after {total_attempted} attempts" + ) + + logging.info( + f"Success rate: {len(all_results)}/{total_attempted} ({100 * len(all_results) / max(total_attempted, 1):.0f}%)" + ) + + if len(all_results) == 0: + logging.error("No successful trajectories. Skipping HDF5 save.") + else: + size_data.num_trajectories = len(all_results) + timers.h5_write.tic() + save_results_to_h5(output_path, all_results, size_data, config, config_path, json_configs, num_parallel) + timers.h5_write.toc() + logging.info(f"Saved {len(all_results)} trajectories to {output_path}") + timers.print_all() + logging.info("=== Rollout Backend Statistics ===") + batched_controllers.print_timer_stats() + + +if __name__ == "__main__": + run_mpc(tyro.cli(PublicMPCConfig)) diff --git a/run_mpc/mpc_batch.py b/run_mpc/mpc_batch.py new file mode 100644 index 00000000..947ae92c --- /dev/null +++ b/run_mpc/mpc_batch.py @@ -0,0 +1,208 @@ +# Copyright (c) 2025 Robotics and AI Institute LLC. All rights reserved. + +"""Batched MPC execution loop and trajectory storage.""" + +import time +from dataclasses import dataclass +from typing import Any + +import numpy as np +from tqdm import tqdm + +from judo.app.structs import MujocoState +from judo.controller import BatchedControllers as JudoBatchedController +from judo.controller import Controller as JudoController +from judo.simulation.mj_simulation import MJSimulation +from judo.simulation.policy_mj_simulation import PolicyMJSimulation +from judo.visualizers.visualizer import Visualizer + +from mpc_config import MPCTimers, PublicMPCConfig, SizeData + + +def _get_previous_actions(sims: list[MJSimulation]) -> list[np.ndarray | None]: + """Get previous actions from sims for hierarchical control sync.""" + return [ + sim.last_policy_output if isinstance(sim, PolicyMJSimulation) else None + for sim in sims + ] + + +def update_visualization(visualizer: Visualizer, sim_state: MujocoState, traces: np.ndarray) -> None: + visualizer.data.xpos[:] = sim_state.xpos + visualizer.data.xquat[:] = sim_state.xquat + visualizer.viser_model.set_data(visualizer.data) + sensor_rollout_size = traces.shape[1] + num_trace_sensors = traces.shape[2] + all_traces_rollout_size = sensor_rollout_size * num_trace_sensors + visualizer.viser_model.set_traces(traces, all_traces_rollout_size) + + +@dataclass +class _BatchStorage: + """Pre-allocated NaN-padded arrays for recording batch trajectory data.""" + + qpos: np.ndarray + qvel: np.ndarray + control: np.ndarray + sensor: np.ndarray + reward: np.ndarray + rollout_states: np.ndarray | None = None + rollout_controls: np.ndarray | None = None + rollout_rewards: np.ndarray | None = None + control_timesteps: np.ndarray | None = None + control_viapoints: np.ndarray | None = None + + @staticmethod + def allocate(num_parallel: int, size_data: SizeData, config: PublicMPCConfig) -> "_BatchStorage": + sd = size_data + storage = _BatchStorage( + qpos=np.full((num_parallel, sd.max_num_task_steps, sd.nq), np.nan, dtype="float64"), + qvel=np.full((num_parallel, sd.max_num_task_steps, sd.nv), np.nan, dtype="float64"), + control=np.full((num_parallel, sd.max_num_task_steps, sd.nu), np.nan, dtype="float64"), + sensor=np.full((num_parallel, sd.max_num_task_steps, sd.nsensordata), np.nan, dtype="float64"), + reward=np.full((num_parallel, sd.max_num_task_steps), np.nan, dtype="float64"), + ) + if config.store_viapoints: + storage.control_viapoints = np.full( + (num_parallel, sd.max_num_mpc_steps, sd.num_nodes, sd.nu), np.nan, dtype="float64" + ) + if config.store_rollouts: + storage.rollout_states = np.full( + (num_parallel, sd.max_num_mpc_steps, sd.num_rollouts, sd.num_timesteps, sd.nq + sd.nv), + np.nan, dtype="float64", + ) + storage.rollout_controls = np.full( + (num_parallel, sd.max_num_mpc_steps, sd.num_rollouts, sd.num_timesteps, sd.nu), + np.nan, dtype="float64", + ) + storage.rollout_rewards = np.full( + (num_parallel, sd.max_num_mpc_steps, sd.num_rollouts), -1, dtype="int", + ) + storage.control_timesteps = np.full( + (num_parallel, sd.max_num_mpc_steps), -1, dtype="int", + ) + return storage + + def record_task_step(self, i: int, task_step: int, data: Any, task_control: np.ndarray, reward: float) -> None: + """Record sim state, control, and reward for one sim at one task step.""" + self.qpos[i, task_step] = data.qpos + self.qvel[i, task_step] = data.qvel + self.control[i, task_step] = task_control + self.sensor[i, task_step] = data.sensordata + self.reward[i, task_step] = reward + + def record_mpc_step(self, mpc_step: int, task_step: int, controllers: list[JudoController]) -> None: + """Record rollout / viapoint data for all controllers at one MPC step.""" + for i, ctrl in enumerate(controllers): + if self.rollout_states is not None: + self.control_timesteps[i, mpc_step] = task_step # type: ignore[index] + self.rollout_states[i, mpc_step] = ctrl.states + self.rollout_controls[i, mpc_step] = ctrl.rollout_controls # type: ignore[index] + self.rollout_rewards[i, mpc_step] = ctrl.rewards # type: ignore[index] + if self.control_viapoints is not None: + self.control_viapoints[i, mpc_step] = ctrl.spline.y + + def package_results(self, max_num_task_steps: int) -> list[dict[str, np.ndarray | int]]: + """Package per-trajectory result dicts from stored arrays.""" + num_parallel = self.qpos.shape[0] + results: list[dict[str, np.ndarray | int]] = [] + for i in range(num_parallel): + result: dict[str, np.ndarray | int] = { + "task_step": max_num_task_steps, + "qpos": self.qpos[i], + "qvel": self.qvel[i], + "control": self.control[i], + "sensor": self.sensor[i], + "reward": self.reward[i], + } + if self.control_timesteps is not None: + result["control_timesteps"] = self.control_timesteps[i] + result["rollout_states"] = self.rollout_states[i] # type: ignore[index] + result["rollout_controls"] = self.rollout_controls[i] # type: ignore[index] + result["rollout_rewards"] = self.rollout_rewards[i] # type: ignore[index] + if self.control_viapoints is not None: + result["control_viapoints"] = self.control_viapoints[i] + results.append(result) + return results + + +def run_mpc_batch( + sims: list[MJSimulation], + batched_controllers: JudoBatchedController, + config: PublicMPCConfig, + size_data: SizeData, + timers: MPCTimers, + vis: Visualizer | None = None, +) -> list[dict[str, np.ndarray | int]]: + """Runs MPC for one or more problems using batched controllers. + + Typically for Spot tasks: + physics_step = model.opt.timestep = 0.01 s + task_step = task.dt = physics_step * num_physics_substeps = 0.01 * 2 = 0.02 s + mpc_step = 1 / control_freq = 1 / 10 = 0.1 s + tasks_steps_per_mpc_step = mpc_step / task_step = 0.1 / 0.02 = 5 + + We record at the task step rate (not physics step rate) since downstream + BC and RL applications take decisions at the task step rate. + """ + num_parallel = len(sims) + controllers = batched_controllers.controllers + + # Reset all simulations and controllers, sample new initial conditions + goals + for sim, ctrl in zip(sims, controllers, strict=True): + sim.task.reset() + if isinstance(sim, PolicyMJSimulation): + sim.reset_policy_state() + ctrl.reset() + ctrl.update_states(sim.sim_state) + + # First optimization pass + batched_controllers.set_init_previous_actions(_get_previous_actions(sims)) + timers.optimization.tic() + batched_controllers.update_action() + timers.optimization.toc() + + storage = _BatchStorage.allocate(num_parallel, size_data, config) + + mpc_step = 0 + for task_step in tqdm(range(config.max_num_task_steps), desc=f"Task steps ({num_parallel} parallel)", leave=False): + # Compute control and record state for all simulations + for i, (sim, ctrl) in enumerate(zip(sims, controllers, strict=True)): + task_control = ctrl.compute(sim.task.data) + + timers.reward_compute.tic() + reward = sim.task.reward( + states=np.concatenate([sim.task.data.qpos, sim.task.data.qvel], axis=0)[None, None], + sensors=sim.task.data.sensordata[None, None], + controls=task_control[None, None], + )[0] + timers.reward_compute.toc() + + storage.record_task_step(i, task_step, sim.task.data, task_control, reward) + + # Re-plan at MPC frequency + if task_step % size_data.sim_steps_per_mpc_step == 0: + batched_controllers.update_states([sim.sim_state for sim in sims]) + batched_controllers.set_init_previous_actions(_get_previous_actions(sims)) + + timers.optimization.tic() + batched_controllers.update_action() + timers.optimization.toc() + + storage.record_mpc_step(mpc_step, task_step, controllers) + mpc_step += 1 + + # Advance physics + timers.sim_step.tic() + for i, sim in enumerate(sims): + sim.step(storage.control[i, task_step]) + timers.sim_step.toc() + + if vis is not None and num_parallel == 1: + update_visualization(vis, sims[0].sim_state, controllers[0].traces) + time.sleep(sims[0].timestep) + + results = storage.package_results(config.max_num_task_steps) + for i, sim in enumerate(sims): + results[i]["success"] = sim.task.success(sim.task.model, sim.task.data) + return results diff --git a/run_mpc/mpc_config.py b/run_mpc/mpc_config.py new file mode 100644 index 00000000..9c771226 --- /dev/null +++ b/run_mpc/mpc_config.py @@ -0,0 +1,161 @@ +# Copyright (c) 2025 Robotics and AI Institute LLC. All rights reserved. + +"""MPC configuration dataclasses and config-loading utilities.""" + +import logging +from dataclasses import dataclass +from pathlib import Path +from typing import Any + +import dacite +import numpy as np + +from judo.controller import Controller as JudoController +from judo.controller import ControllerConfig +from judo.optimizers import ( + Optimizer, + OptimizerConfig, + get_registered_optimizers, +) +from judo.simulation.mj_simulation import MJSimulation +from judo.tasks import ( + Task as JudoTask, +) +from judo.tasks import ( + TaskConfig as JudoTaskConfig, +) +from judo.tasks import ( + get_registered_tasks as get_registered_judo_tasks, +) +from judo.tasks.spot.spot_constants import SPOT_LOCOMOTION_POLICY_PATH +from judo.utils.timer import Timer + + +def decode_config(obj: dict) -> dict: + """Custom JSON decoder to handle NumPy arrays and Path strings.""" + for key, value in obj.items(): + if isinstance(value, list) and all(isinstance(i, (int, float)) for i in value): + obj[key] = np.array(value) + if isinstance(value, str) and ("/" in value or "\\" in value): + obj[key] = Path(value) + return obj + + +@dataclass +class PublicMPCConfig: + """Config class for MPC runs.""" + + config_path: Path # Path to .json containing task/controller config for MPC run. + dataset_output_path: Path | None = None # Path to .h5 dataset of trajectories. + num_trajectories: int = 10 # Number of MPC runs to perform. + num_parallel: int = 1 # Number of trajectories to run in parallel (batched MPC). + max_num_task_steps: int = 750 # Maximum number of task steps to run per MPC run. + chunk_size: int = 1 # Size of the memory chunk for the h5 dataset (defaults to 1 -> 1 trajectory per chunk). + control_freq: float | None = None # MPC control frequency in Hz. If None, use the controller config's frequency. + store_rollouts: bool = True # Store open loop control inputs and state trajectories. + store_viapoints: bool = True # Store open loop control of the best spline. + visualize: bool = False + locomotion_policy_path: Path = SPOT_LOCOMOTION_POLICY_PATH + + +@dataclass +class SizeData: + """Sizes needed to calculate things in the dataset.""" + + max_num_task_steps: int + nq: int + nv: int + nu: int + max_num_mpc_steps: int + nsensordata: int + num_nodes: int + num_rollouts: int + num_trajectories: int + chunk_size: int + num_timesteps: int + sim_steps_per_mpc_step: int + + +def make_size_data(sim: MJSimulation, controller: JudoController, config: PublicMPCConfig) -> SizeData: + """Calculates the sizes for everything.""" + nu = sim.task.nu + if config.control_freq is None: + control_freq = controller.controller_cfg.control_freq + else: + control_freq = config.control_freq + sim_steps_per_mpc_step = int(1.0 / control_freq / sim.task.dt) + max_num_mpc_steps = np.ceil(config.max_num_task_steps / sim_steps_per_mpc_step).astype(int) + nq = sim.task.model.nq + nv = sim.task.model.nv + nsensordata = sim.task.model.nsensordata + num_nodes = controller.optimizer_cfg.num_nodes + num_rollouts = controller.optimizer_cfg.num_rollouts + return SizeData( + max_num_mpc_steps=max_num_mpc_steps, + nq=nq, + nv=nv, + nsensordata=nsensordata, + num_nodes=num_nodes, + num_rollouts=num_rollouts, + num_trajectories=config.num_trajectories, + chunk_size=config.chunk_size, + num_timesteps=controller.num_timesteps, + sim_steps_per_mpc_step=sim_steps_per_mpc_step, + max_num_task_steps=config.max_num_task_steps, + nu=nu, + ) + + +def load_configs_from_json_data(json_data: Any) -> tuple[JudoTask, Optimizer, ControllerConfig]: + """Loads the configs from a json file.""" + logging.basicConfig(level=logging.INFO, format="%(levelname)s - %(message)s", handlers=[logging.StreamHandler()]) + + available_tasks = get_registered_judo_tasks() + available_optimizers = get_registered_optimizers() + task_entry = available_tasks.get(json_data["task"]) + assert task_entry is not None, f"Task {json_data['task']} is not registered!" + optimizer_entry = available_optimizers.get(json_data["optimizer"]) + assert optimizer_entry is not None, f"Optimizer {json_data['optimizer']} is not registered!" + + task_cls, task_config_cls = task_entry + task_config: JudoTaskConfig = dacite.from_dict(task_config_cls, json_data["task_config"]) + task: JudoTask = task_cls() + task.config = task_config + + optimizer_cls, optimizer_config_cls = optimizer_entry + optimizer_config: OptimizerConfig = dacite.from_dict(optimizer_config_cls, json_data["optimizer_config"]) + optimizer: Optimizer = optimizer_cls(optimizer_config, task.nu) + + controller_cfg: ControllerConfig = dacite.from_dict(ControllerConfig, json_data["controller_config"]) + + return ( + task, + optimizer, + controller_cfg, + ) + + +@dataclass +class MPCTimers: + """Timers for measuring MPC performance.""" + + optimization: Timer + sim_step: Timer + reward_compute: Timer + h5_write: Timer + + @classmethod + def create(cls) -> "MPCTimers": + return cls( + optimization=Timer("Opt", unit="ms"), + sim_step=Timer("Sim", unit="ms"), + reward_compute=Timer("Rew", unit="ms"), + h5_write=Timer("h5p", unit="ms"), + ) + + def print_all(self) -> None: + logging.info("=== Performance Statistics ===") + self.optimization.print_stats(logging.info) + self.sim_step.print_stats(logging.info) + self.reward_compute.print_stats(logging.info) + self.h5_write.print_stats(logging.info) diff --git a/run_mpc/mpc_setup.py b/run_mpc/mpc_setup.py new file mode 100644 index 00000000..3cdd04a7 --- /dev/null +++ b/run_mpc/mpc_setup.py @@ -0,0 +1,199 @@ +# Copyright (c) 2025 Robotics and AI Institute LLC. All rights reserved. + +"""MPC setup (sim/controller creation) and HDF5 persistence.""" + +import copy +from pathlib import Path + +import h5py +import numpy as np +import warp as wp + +from judo.controller import BatchedControllers as JudoBatchedController +from judo.controller import ControllerConfig +from judo.controller.batched_spot_locomotion import BatchedSpotLocomotion +from judo.optimizers import Optimizer +from judo.simulation.mj_simulation import MJSimulation +from judo.simulation.policy_mj_simulation import PolicyMJSimulation +from judo.tasks import Task as JudoTask +from judo.utils.mjwarp_rollout_backend import MJWarpRolloutBackend + +from mpc_config import PublicMPCConfig, SizeData, make_size_data + + +def make_locomotion_controller( + use_spot: bool, policy_path: str | None, device: str +) -> BatchedSpotLocomotion | None: + """Creates low-level locomotion controller if Spot task is used.""" + if not use_spot or policy_path is None: + return None + + return BatchedSpotLocomotion( + model_path=policy_path, + device=device, + ) + + +def setup_mpc( + config: PublicMPCConfig, + json_configs: dict, + task: JudoTask, + optimizer: Optimizer, + controller_cfg: ControllerConfig, + num_parallel: int, +) -> tuple[list[MJSimulation], JudoBatchedController, SizeData]: + """Create simulations, GPU rollout backend, and batched controllers.""" + use_spot = task.uses_locomotion_policy + policy_path = str(config.locomotion_policy_path) if use_spot else None + device = "cuda:0" if wp.is_cuda_available() else "cpu" + sims: list[MJSimulation] = [] + + for _ in range(num_parallel): + if use_spot: + sim = PolicyMJSimulation(init_task=json_configs["task"]) + else: + sim = MJSimulation(init_task=json_configs["task"]) + sim.task.config = copy.deepcopy(task.config) + # Disable fluid dynamics for mujoco_warp compatibility + sim.task.model.opt.density = 0 + sims.append(sim) + + # Create shared GPU rollout backend for batched execution + locomotion_controller = make_locomotion_controller(use_spot, policy_path, device) + rollout_backend = MJWarpRolloutBackend( + model=task.model, + num_threads=optimizer.config.num_rollouts, + num_problems=num_parallel, + locomotion_controller=locomotion_controller, + device=device, + ) + batched_controllers = JudoBatchedController(controller_cfg, task, optimizer, rollout_backend=rollout_backend) + size_data = make_size_data(sims[0], batched_controllers.controllers[0], config) + + return sims, batched_controllers, size_data + + +def save_results_to_h5( + output_path: Path, + all_results: list[dict[str, np.ndarray | int]], + size_data: SizeData, + config: PublicMPCConfig, + config_path: Path, + json_configs: dict, + num_parallel: int, +) -> None: + """Write all MPC results to an HDF5 file.""" + with h5py.File(str(output_path), "w") as f: + # Create datasets for all fields we're logging. + qpos_dataset = f.create_dataset( + "qpos", + shape=(size_data.num_trajectories, size_data.max_num_task_steps, size_data.nq), + chunks=(size_data.chunk_size, size_data.max_num_task_steps, size_data.nq), + dtype="float64", + ) + qvel_dataset = f.create_dataset( + "qvel", + shape=(size_data.num_trajectories, size_data.max_num_task_steps, size_data.nv), + chunks=(size_data.chunk_size, size_data.max_num_task_steps, size_data.nv), + dtype="float64", + ) + control_dataset = f.create_dataset( + "control", + shape=(size_data.num_trajectories, size_data.max_num_task_steps, size_data.nu), + chunks=(size_data.chunk_size, size_data.max_num_task_steps, size_data.nu), + dtype="float64", + ) + sensor_dataset = f.create_dataset( + "sensor", + shape=(size_data.num_trajectories, size_data.max_num_task_steps, size_data.nsensordata), + chunks=(size_data.chunk_size, size_data.max_num_task_steps, size_data.nsensordata), + dtype="float64", + ) + reward_dataset = f.create_dataset( + "reward", + shape=(size_data.num_trajectories, size_data.max_num_task_steps), + dtype="float", + ) + trajectory_length_dataset = f.create_dataset( + "trajectory_length", shape=(size_data.num_trajectories,), chunks=(size_data.chunk_size), dtype="int" + ) + + if config.store_rollouts: + rollout_states_dataset = f.create_dataset( + "rollout_states", + shape=( + size_data.num_trajectories, + size_data.max_num_mpc_steps, + size_data.num_rollouts, + size_data.num_timesteps, + size_data.nq + size_data.nv, + ), + chunks=( + size_data.chunk_size, + size_data.max_num_mpc_steps, + size_data.num_rollouts, + size_data.num_timesteps, + size_data.nq + size_data.nv, + ), + dtype="float64", + ) + rollout_controls_dataset = f.create_dataset( + "rollout_controls", + shape=( + size_data.num_trajectories, + size_data.max_num_mpc_steps, + size_data.num_rollouts, + size_data.num_timesteps, + size_data.nu, + ), + chunks=( + size_data.chunk_size, + size_data.max_num_mpc_steps, + size_data.num_rollouts, + size_data.num_timesteps, + size_data.nu, + ), + dtype="float64", + ) + rollout_rewards_dataset = f.create_dataset( + "rollout_rewards", + shape=( + size_data.num_trajectories, + size_data.max_num_mpc_steps, + size_data.num_rollouts, + ), + chunks=( + size_data.chunk_size, + size_data.max_num_mpc_steps, + size_data.num_rollouts, + ), + dtype="float64", + ) + + if config.store_viapoints: + control_viapoints_dataset = f.create_dataset( + "control_viapoints", + shape=(size_data.num_trajectories, size_data.max_num_mpc_steps, size_data.num_nodes, size_data.nu), + chunks=(size_data.chunk_size, size_data.max_num_mpc_steps, size_data.num_nodes, size_data.nu), + dtype="float64", + ) + + # Store configuration data. + f.attrs["config_path"] = str(config_path) + f.attrs["num_parallel"] = num_parallel + f.attrs["task"] = json_configs["task"] + + # Write results + for traj_idx, result in enumerate(all_results): + trajectory_length_dataset[traj_idx] = result["task_step"] + qpos_dataset[traj_idx] = result["qpos"] + qvel_dataset[traj_idx] = result["qvel"] + control_dataset[traj_idx] = result["control"] + sensor_dataset[traj_idx] = result["sensor"] + reward_dataset[traj_idx] = result["reward"] + if config.store_rollouts: + rollout_states_dataset[traj_idx] = result["rollout_states"] + rollout_controls_dataset[traj_idx] = result["rollout_controls"] + rollout_rewards_dataset[traj_idx] = result["rollout_rewards"] + if config.store_viapoints: + control_viapoints_dataset[traj_idx] = result["control_viapoints"] diff --git a/run_mpc/visualize_trajectories.py b/run_mpc/visualize_trajectories.py new file mode 100644 index 00000000..7c04b266 --- /dev/null +++ b/run_mpc/visualize_trajectories.py @@ -0,0 +1,128 @@ +# Copyright (c) 2025 Robotics and AI Institute LLC. All rights reserved. + +import json +import time +from pathlib import Path +from typing import Optional + +import h5py +import numpy as np +import tyro +from judo.tasks import get_registered_tasks +from judo.visualizers.model import ViserMjModel +from mujoco import MjData, mj_forward +from viser import GuiEvent, ViserServer + + +def decode_config(obj: dict) -> dict: + """Custom JSON decoder to handle NumPy arrays and Path strings.""" + for key, value in obj.items(): + if isinstance(value, list) and all(isinstance(i, (int, float)) for i in value): + obj[key] = np.array(value) + if isinstance(value, str) and ("/" in value or "\\" in value): + obj[key] = Path(value) + return obj + + +def visualize_trajectory_hdf5_dataset(dataset_path: Path) -> None: + with h5py.File(str(dataset_path), "r") as f: + # Read task name from HDF5 attrs (preferred), with fallback to config file + if "task" in f.attrs: + task_name = f.attrs["task"] + else: + config_path = f.attrs["config_path"] + with open(str(config_path), "r") as config_f: + configs = json.load(config_f, object_hook=decode_config) + task_name = configs["task"] + + qpos_dataset = f["qpos"] + trajectory_length_dataset = f["trajectory_length"] + + visualize_trajectory_batch(task_name, qpos_dataset, trajectory_length_dataset) + + +def visualize_trajectory_batch( + task: str, qpos_batch: np.ndarray | h5py.Dataset, trajectory_lengths: Optional[np.ndarray | h5py.Dataset] = None +) -> None: + server = ViserServer() + + registered_tasks = get_registered_tasks() + task_entry = registered_tasks.get(task) + assert task_entry is not None, f"Task {task} is not registered!" + task_cls, _ = task_entry + task_instance = task_cls() + # Increase constraint buffers for contact-heavy scenes (e.g. Spot + tire). + task_instance.spec.nconmax = 512 + task_instance.spec.njmax = 2048 + task_instance.model = task_instance.spec.compile() + task_instance.data = MjData(task_instance.model) + viser_mjmodel = ViserMjModel(server, task_instance.spec) + + # Create GUI elements for controlling visualizer. + running = False + pause_button = server.gui.add_button("Start playback") + + def cycle_pause_button() -> None: + nonlocal running + if running: + running = False + pause_button.label = "Start playback" + else: + running = True + pause_button.label = "Pause playback" + + @pause_button.on_click + def cycle_pause_button_callback(_: GuiEvent) -> None: + """More info about GUI callbacks in viser: https://viser.studio/versions/0.2.7/examples/03_gui_callbacks""" + cycle_pause_button() + + trajectory_slider = server.gui.add_slider( + "Trajectory index", min=0, max=len(qpos_batch) - 1, step=1, initial_value=0 + ) + if trajectory_lengths: + curr_trajectory_length = trajectory_lengths[trajectory_slider.value] - 1 + else: + curr_trajectory_length = len(qpos_batch[trajectory_slider.value]) - 1 + timestep_slider = server.gui.add_slider( + "Trajectory timestep", min=0, max=curr_trajectory_length, step=1, initial_value=0 + ) + + # Initialize visualization with the first state + task_instance.data.qpos[:] = qpos_batch[0, 0] + mj_forward(task_instance.model, task_instance.data) + viser_mjmodel.set_data(task_instance.data) + + @trajectory_slider.on_update + def trajectory_slider_on_update_callback(_: GuiEvent) -> None: + """More info about GUI callbacks in viser: https://viser.studio/versions/0.2.7/examples/03_gui_callbacks""" + # Reset timestep to zero for new trajectory. + timestep_slider.value = 0 + # Change timestep bounds. + if trajectory_lengths is not None: + nonlocal curr_trajectory_length + curr_trajectory_length = trajectory_lengths[trajectory_slider.value] - 1 + timestep_slider.max = curr_trajectory_length + + @timestep_slider.on_update + def timestep_slider_on_update_callback(_: GuiEvent) -> None: + """More info about GUI callbacks in viser: https://viser.studio/versions/0.2.7/examples/03_gui_callbacks""" + # Update the viser_mjmodel's data object + qpos_value = qpos_batch[trajectory_slider.value, timestep_slider.value] + task_instance.data.qpos[:] = qpos_value + mj_forward(task_instance.model, task_instance.data) + viser_mjmodel.set_data(task_instance.data) + + try: + while True: + if running: + timestep_slider.value = min(curr_trajectory_length, timestep_slider.value + 1) + if timestep_slider.value == curr_trajectory_length: + cycle_pause_button() + + time.sleep(task_instance.model.opt.timestep) + except KeyboardInterrupt: + print("Closing Judo...") + + +if __name__ == "__main__": + tyro.cli(visualize_trajectory_hdf5_dataset) From 345b2ffd4d216809f7e8589773874dcde655e961 Mon Sep 17 00:00:00 2001 From: Duy Ta Date: Wed, 4 Mar 2026 16:34:45 -0500 Subject: [PATCH 02/12] README --- .github/workflows/pypi_publish.yml | 8 +- README.md | 1 + docs/architecture_diagram.py | 255 - docs/run_mpc_architecture.svg | 6546 ---------------------- judo/models/xml/spot_primitive/robot.xml | 2 +- judo/models/xml/spot_tire/robot.xml | 2 +- judo/simulation/policy_mj_simulation.py | 1 - run_mpc/README.md | 57 + 8 files changed, 64 insertions(+), 6808 deletions(-) delete mode 100644 docs/architecture_diagram.py delete mode 100644 docs/run_mpc_architecture.svg create mode 100644 run_mpc/README.md diff --git a/.github/workflows/pypi_publish.yml b/.github/workflows/pypi_publish.yml index d1fec932..9b6d7927 100644 --- a/.github/workflows/pypi_publish.yml +++ b/.github/workflows/pypi_publish.yml @@ -205,7 +205,7 @@ jobs: path: dist merge-multiple: true - # - name: Publish to PyPI - # uses: pypa/gh-action-pypi-publish@release/v1 - # with: - # skip-existing: true + - name: Publish to PyPI + uses: pypa/gh-action-pypi-publish@release/v1 + with: + skip-existing: true diff --git a/README.md b/README.md index 4e2a7e97..d5e80997 100644 --- a/README.md +++ b/README.md @@ -122,6 +122,7 @@ if __name__ == "__main__": ``` To see more information about the available tasks, please refer to [the task README](judo/tasks/README.md). +For batched MPC trajectory generation, see [run_mpc/README.md](run_mpc/README.md). ## 3. Running `judo` as a Dependency You can easily install `judo` as a dependency in your own project. A few comments: diff --git a/docs/architecture_diagram.py b/docs/architecture_diagram.py deleted file mode 100644 index 3df4eb3b..00000000 --- a/docs/architecture_diagram.py +++ /dev/null @@ -1,255 +0,0 @@ -"""Generate architecture diagram comparing old CPU vs new GPU MPC pipeline.""" - -import matplotlib.pyplot as plt -from matplotlib.patches import FancyBboxPatch, FancyArrowPatch -import numpy as np - -# Colors — light theme for white-background slides -C_BG = "#FFFFFF" -C_ACCENT_OLD = "#C0392B" -C_ACCENT_NEW = "#2471A3" -C_GPU = "#1E8449" -C_GPU_BG = "#EBF5FB" -C_CPU = "#922B21" -C_CPU_BG = "#FDEDEC" -C_SIM = "#D35400" -C_CTRL = "#7D3C98" -C_TEXT = "#1C2833" -C_SUBTEXT = "#5D6D7E" -C_ARROW = "#2E86C1" -C_ARROW_OLD = "#C0392B" -C_BOX_STROKE = "#ABB2B9" - -# Use non-equal aspect so we get full use of the figure area -fig = plt.figure(figsize=(30, 16), facecolor=C_BG) -ax_old = fig.add_axes([0.01, 0.05, 0.25, 0.90], facecolor=C_BG) -ax_new = fig.add_axes([0.28, 0.05, 0.71, 0.90], facecolor=C_BG) - - -def draw_box(ax, xy, w, h, color, alpha=0.9, lw=1.5, ec=C_BOX_STROKE, zorder=1, radius=0.008): - box = FancyBboxPatch(xy, w, h, boxstyle=f"round,pad={radius}", - facecolor=color, edgecolor=ec, linewidth=lw, alpha=alpha, zorder=zorder) - ax.add_patch(box) - return box - - -def draw_arrow(ax, start, end, color=C_ARROW, lw=3, style="-|>", zorder=5): - arrow = FancyArrowPatch(start, end, arrowstyle=style, color=color, - linewidth=lw, mutation_scale=20, zorder=zorder, - connectionstyle="arc3,rad=0.0") - ax.add_patch(arrow) - - -# ============================================ -# LEFT PANEL: Old Architecture (CPU) — compact -# ============================================ -ax_old.set_xlim(0, 1) -ax_old.set_ylim(0, 1) -ax_old.axis('off') - -# Title -ax_old.text(0.5, 0.97, "CPU Threaded Rollout", ha='center', va='top', - fontsize=24, fontweight='bold', color=C_ACCENT_OLD, zorder=10) -ax_old.text(0.5, 0.92, "mujoco_extensions + ONNX Runtime", ha='center', va='top', - fontsize=15, color=C_SUBTEXT, zorder=10) - -# CPU badge -draw_box(ax_old, (0.05, 0.83), 0.90, 0.05, C_CPU_BG, ec=C_CPU, lw=2) -ax_old.text(0.5, 0.855, "CPU (x86_64)", ha='center', va='center', - fontsize=17, fontweight='bold', color=C_CPU, zorder=10) - -# MJSimulation -draw_box(ax_old, (0.08, 0.72), 0.84, 0.08, "#FFF3E0", ec=C_SIM, lw=2) -ax_old.text(0.5, 0.76, "MJSimulation", ha='center', va='center', - fontsize=19, fontweight='bold', color=C_SIM, zorder=10) - -draw_arrow(ax_old, (0.5, 0.72), (0.5, 0.67), color=C_ARROW_OLD) - -# Controller -draw_box(ax_old, (0.08, 0.57), 0.84, 0.10, "#F4ECF7", ec=C_CTRL, lw=2) -ax_old.text(0.5, 0.635, "Controller", ha='center', va='center', - fontsize=19, fontweight='bold', color=C_CTRL, zorder=10) -ax_old.text(0.5, 0.59, "CEM + Spline", ha='center', va='center', - fontsize=14, color=C_SUBTEXT, zorder=10) - -draw_arrow(ax_old, (0.5, 0.57), (0.5, 0.52), color=C_ARROW_OLD) - -# RolloutBackend -draw_box(ax_old, (0.05, 0.17), 0.90, 0.35, "#FDEDEC", ec=C_ACCENT_OLD, lw=2) -ax_old.text(0.5, 0.49, "RolloutBackend", ha='center', va='center', - fontsize=18, fontweight='bold', color=C_ACCENT_OLD, zorder=10) -ax_old.text(0.5, 0.45, "C++ threaded_rollout", ha='center', va='center', - fontsize=14, color=C_SUBTEXT, zorder=10) - -# Thread grid: 32 threads in 4x8 -n_threads = 32 -cols, rows = 8, 4 -bw, bh = 0.088, 0.045 -gap_x, gap_y = 0.015, 0.012 -total_w = cols * bw + (cols - 1) * gap_x -x_start = (1 - total_w) / 2 -y_top = 0.40 - -for i in range(n_threads): - r, c = divmod(i, cols) - bx = x_start + c * (bw + gap_x) - by = y_top - r * (bh + gap_y) - draw_box(ax_old, (bx, by), bw, bh, "#F9EBEA", ec=C_ACCENT_OLD, lw=1, alpha=0.8, radius=0.004) - ax_old.text(bx + bw / 2, by + bh / 2, f"T{i}", ha='center', va='center', - fontsize=9, color=C_ACCENT_OLD, zorder=10, fontweight='bold') - -ax_old.text(0.5, 0.19, "32 CPU threads | ONNX + mj_step", ha='center', va='center', - fontsize=13, color=C_SUBTEXT, zorder=10) - -# Bottom label -draw_box(ax_old, (0.10, 0.04), 0.80, 0.08, "#FFF3E0", ec=C_SIM, lw=2) -ax_old.text(0.5, 0.08, "32 Sequential Rollouts", ha='center', va='center', - fontsize=18, fontweight='bold', color=C_SIM, zorder=10) - - -# ============================================ -# RIGHT PANEL: New Architecture (GPU) — large -# ============================================ -ax_new.set_xlim(0, 1) -ax_new.set_ylim(0, 1) -ax_new.axis('off') - -n_ctrl = 10 - -# Title -ax_new.text(0.5, 0.97, "GPU Batched MPC Pipeline", ha='center', va='top', - fontsize=30, fontweight='bold', color=C_ACCENT_NEW, zorder=10) -ax_new.text(0.5, 0.925, "mujoco_warp + PyTorch + BatchedControllers", ha='center', va='top', - fontsize=17, color=C_SUBTEXT, zorder=10) - -# CPU section (sims) -draw_box(ax_new, (0.02, 0.82), 0.96, 0.07, C_CPU_BG, ec=C_CPU, lw=1.5, alpha=0.5) -ax_new.text(0.04, 0.885, "CPU", ha='left', va='center', - fontsize=16, fontweight='bold', color=C_CPU, zorder=10) - -# Simulations -sim_w = 0.07 -sim_gap = 0.015 -total_sims_w = n_ctrl * sim_w + (n_ctrl - 1) * sim_gap -sim_x_start = (1 - total_sims_w) / 2 - -for i in range(n_ctrl): - sx = sim_x_start + i * (sim_w + sim_gap) - draw_box(ax_new, (sx, 0.83), sim_w, 0.05, "#FFF3E0", ec=C_SIM, lw=1.5, radius=0.004) - ax_new.text(sx + sim_w / 2, 0.855, f"Sim {i}", ha='center', va='center', - fontsize=12, fontweight='bold', color=C_SIM, zorder=10) - -ax_new.text(sim_x_start + n_ctrl * (sim_w + sim_gap) + 0.01, 0.855, "\u2026", - ha='left', va='center', fontsize=20, fontweight='bold', color=C_SIM, zorder=10) - -draw_arrow(ax_new, (0.5, 0.82), (0.5, 0.78), color=C_ARROW) - -# GPU section -draw_box(ax_new, (0.02, 0.02), 0.96, 0.80, C_GPU_BG, ec=C_GPU, lw=2.5, alpha=0.4) -ax_new.text(0.04, 0.81, "GPU (NVIDIA)", ha='left', va='center', - fontsize=16, fontweight='bold', color=C_GPU, zorder=10) - -# BatchedControllers -draw_box(ax_new, (0.03, 0.66), 0.94, 0.11, "#F4ECF7", ec=C_CTRL, lw=2, alpha=0.85) -ax_new.text(0.5, 0.755, "BatchedControllers", ha='center', va='center', - fontsize=22, fontweight='bold', color=C_CTRL, zorder=10) - -ctrl_x_start = sim_x_start -for i in range(n_ctrl): - cx = ctrl_x_start + i * (sim_w + sim_gap) - draw_box(ax_new, (cx, 0.675), sim_w, 0.045, "#E8DAEF", ec=C_CTRL, lw=1.2, radius=0.003) - ax_new.text(cx + sim_w / 2, 0.697, f"Ctrl {i}", ha='center', va='center', - fontsize=11, fontweight='bold', color=C_CTRL, zorder=10) - -ax_new.text(ctrl_x_start + n_ctrl * (sim_w + sim_gap) + 0.01, 0.697, "\u2026", - ha='left', va='center', fontsize=20, fontweight='bold', color=C_CTRL, zorder=10) - -draw_arrow(ax_new, (0.5, 0.66), (0.5, 0.62), color=C_ARROW) - -# RolloutBackend (mujoco_warp) -draw_box(ax_new, (0.03, 0.03), 0.94, 0.59, "#E8F6F3", ec=C_ACCENT_NEW, lw=2.5, alpha=0.8) -ax_new.text(0.5, 0.605, "RolloutBackend (mujoco_warp)", ha='center', va='center', - fontsize=22, fontweight='bold', color=C_ACCENT_NEW, zorder=10) - -# CUDA Graph box with 2D grid -draw_box(ax_new, (0.05, 0.04), 0.90, 0.54, "#D6EAF8", ec=C_ACCENT_NEW, lw=2, alpha=0.7) -ax_new.text(0.5, 0.565, "mujoco_warp.step() \u2014 CUDA Graph", ha='center', va='center', - fontsize=20, fontweight='bold', color=C_ACCENT_NEW, zorder=10) - -# 2D grid: 10 columns (controllers shown) x rows (representing 64 rollouts) -grid_cols = n_ctrl -grid_rows_shown = 18 # rows drawn (representing 64 with ellipsis) -cell_w = 0.07 -cell_h = 0.022 -cell_gap_x = 0.015 -cell_gap_y = 0.003 -total_grid_w = grid_cols * cell_w + (grid_cols - 1) * cell_gap_x -total_grid_h = grid_rows_shown * cell_h + (grid_rows_shown - 1) * cell_gap_y -grid_x0 = (1 - total_grid_w) / 2 -grid_y_top = 0.52 - -# Pastel colors per column -col_colors = [ - "#AED6F1", "#A9DFBF", "#D7BDE2", "#F9E79F", "#A3E4D7", - "#F5CBA7", "#AED6F1", "#D5F5E3", "#FADBD8", "#D6DBDF", -] - -np.random.seed(42) -mid_row = grid_rows_shown // 2 # row where ellipsis goes - -for c in range(grid_cols): - base = col_colors[c] - br, bg_, bb = int(base[1:3], 16), int(base[3:5], 16), int(base[5:7], 16) - for r in range(grid_rows_shown): - if r == mid_row: - continue # leave gap for ellipsis - cx = grid_x0 + c * (cell_w + cell_gap_x) - cy = grid_y_top - r * (cell_h + cell_gap_y) - v = np.random.randint(-10, 10) - fc = f"#{max(0,min(255,br+v)):02x}{max(0,min(255,bg_+v)):02x}{max(0,min(255,bb+v)):02x}" - rect = plt.Rectangle((cx, cy), cell_w, cell_h, facecolor=fc, - edgecolor="#B0BEC5", linewidth=0.5, alpha=0.9, zorder=6) - ax_new.add_patch(rect) - -# Column headers -for c in range(grid_cols): - cx = grid_x0 + c * (cell_w + cell_gap_x) + cell_w / 2 - ax_new.text(cx, grid_y_top + cell_h + 0.006, f"C{c}", ha='center', va='center', - fontsize=11, fontweight='bold', color=C_SUBTEXT, zorder=10) - -ax_new.text(grid_x0 + grid_cols * (cell_w + cell_gap_x) + 0.005, - grid_y_top + cell_h + 0.006, "\u2026", ha='left', va='center', - fontsize=16, fontweight='bold', color=C_SUBTEXT, zorder=10) - -# Vertical ellipsis in each column -for c in range(grid_cols): - cx = grid_x0 + c * (cell_w + cell_gap_x) + cell_w / 2 - cy = grid_y_top - mid_row * (cell_h + cell_gap_y) + cell_h / 2 - ax_new.text(cx, cy, "\u22ee", ha='center', va='center', - fontsize=14, fontweight='bold', color="#5D6D7E", zorder=11) - -# Row label on left -row_center_y = grid_y_top - total_grid_h / 2 + cell_h / 2 -ax_new.text(grid_x0 - 0.035, row_center_y, "64\nrollouts\neach", ha='center', va='center', - fontsize=13, color=C_SUBTEXT, zorder=10, linespacing=1.3, fontstyle='italic') - -# Summary label at bottom -ax_new.text(0.5, 0.06, "100 controllers \u00d7 64 rollouts = 6,400 parallel GPU worlds", - ha='center', va='center', fontsize=20, fontweight='bold', color=C_ACCENT_NEW, zorder=10, - bbox=dict(boxstyle='round,pad=0.3', facecolor='white', edgecolor=C_ACCENT_NEW, alpha=0.95, lw=2)) - -# Bottom banners -fig.text(0.135, 0.02, "32 CPU threads \u2022 Sequential \u2022 ONNX", - ha='center', va='center', fontsize=16, color=C_ACCENT_OLD, - fontweight='bold', fontstyle='italic') -fig.text(0.635, 0.02, "6,400 GPU worlds \u2022 100 parallel trajectories \u2022 PyTorch JIT + CUDA Graphs", - ha='center', va='center', fontsize=16, color=C_ACCENT_NEW, - fontweight='bold', fontstyle='italic') - -plt.savefig("/home/dta/judo/docs/run_mpc_architecture.png", dpi=200, facecolor=C_BG, - bbox_inches='tight', pad_inches=0.3) -plt.savefig("/home/dta/judo/docs/run_mpc_architecture.svg", facecolor=C_BG, - bbox_inches='tight', pad_inches=0.3) -plt.savefig("/home/dta/judo/docs/run_mpc_architecture_transparent.png", dpi=200, facecolor='none', - bbox_inches='tight', pad_inches=0.3, transparent=True) -print("Saved to docs/run_mpc_architecture.png, .svg, and _transparent.png") diff --git a/docs/run_mpc_architecture.svg b/docs/run_mpc_architecture.svg deleted file mode 100644 index 90b6abd6..00000000 --- a/docs/run_mpc_architecture.svg +++ /dev/null @@ -1,6546 +0,0 @@ - - - - - - - - 2026-02-11T17:53:16.043734 - image/svg+xml - - - Matplotlib v3.5.1, https://matplotlib.org/ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/judo/models/xml/spot_primitive/robot.xml b/judo/models/xml/spot_primitive/robot.xml index ef8ff873..e8c190e4 100644 --- a/judo/models/xml/spot_primitive/robot.xml +++ b/judo/models/xml/spot_primitive/robot.xml @@ -7,7 +7,7 @@ - + diff --git a/judo/models/xml/spot_tire/robot.xml b/judo/models/xml/spot_tire/robot.xml index 03734021..9555b724 100644 --- a/judo/models/xml/spot_tire/robot.xml +++ b/judo/models/xml/spot_tire/robot.xml @@ -73,7 +73,7 @@ - + diff --git a/judo/simulation/policy_mj_simulation.py b/judo/simulation/policy_mj_simulation.py index aed5ef03..ad60b39f 100644 --- a/judo/simulation/policy_mj_simulation.py +++ b/judo/simulation/policy_mj_simulation.py @@ -3,7 +3,6 @@ """MuJoCo Simulation with locomotion policy support.""" from pathlib import Path -from typing import NoReturn import numpy as np from mujoco import mj_forward diff --git a/run_mpc/README.md b/run_mpc/README.md new file mode 100644 index 00000000..14dedf36 --- /dev/null +++ b/run_mpc/README.md @@ -0,0 +1,57 @@ +# `run_mpc/main.py` + +Run batched MPC rollouts from a JSON config and save successful trajectories to an HDF5 dataset. + +## Prerequisite + +This script must be run in the `mjwarp` pixi environment: + +```bash +pixi shell -e mjwarp +``` + +Run commands below from the repository root (`judo/`). + +## Basic usage + +```bash +python run_mpc/main.py --config-path run_mpc/configs/spot_tire_upright.json +``` + +By default, this writes output to: + +- `run_mpc/configs/trajectories.h5` + +## Common examples + +Run 50 trajectories with 8 in parallel: + +```bash +python run_mpc/main.py \ + --config-path run_mpc/configs/spot_tire_upright.json \ + --num-trajectories 50 \ + --num-parallel 8 +``` + +Choose a custom output file: + +```bash +python run_mpc/main.py \ + --config-path run_mpc/configs/spot_tire_upright.json \ + --dataset-output-path outputs/mpc/spot_tire_upright.h5 +``` + +Enable visualization (no parallel, single env only): + +```bash +python run_mpc/main.py \ + --config-path run_mpc/configs/spot_tire_upright.json \ + --num-parallel 1 \ + --visualize +``` + +## One-liner without entering shell + +```bash +pixi run -e mjwarp python run_mpc/main.py --config-path run_mpc/configs/spot_tire_upright.json +``` From 0ac94ddae647556117a1cf8478811229e1d86017 Mon Sep 17 00:00:00 2001 From: Duy Ta Date: Wed, 4 Mar 2026 16:59:14 -0500 Subject: [PATCH 03/12] precommit --- judo/controller/__init__.py | 1 - judo/controller/batched_spot_locomotion.py | 4 ++-- judo/controller/controller.py | 26 ++++++++++------------ judo/utils/mjwarp_rollout_backend.py | 17 ++++++++++---- 4 files changed, 27 insertions(+), 21 deletions(-) diff --git a/judo/controller/__init__.py b/judo/controller/__init__.py index eb00f756..53aaa439 100644 --- a/judo/controller/__init__.py +++ b/judo/controller/__init__.py @@ -1,6 +1,5 @@ # Copyright (c) 2025 Robotics and AI Institute LLC. All rights reserved. -from judo import MODEL_PATH from judo.controller.controller import ( BatchedControllers, Controller, diff --git a/judo/controller/batched_spot_locomotion.py b/judo/controller/batched_spot_locomotion.py index 81aeaac3..f633b88a 100644 --- a/judo/controller/batched_spot_locomotion.py +++ b/judo/controller/batched_spot_locomotion.py @@ -27,7 +27,7 @@ def build_observation_kernel( joints_offset: wp.array(dtype=wp.float32), mj_to_isaac: wp.array(dtype=wp.int32), obs: wp.array2d(dtype=wp.float32), -): +) -> None: """Build 84-dim observation from state, command, and previous actions. Per-thread (one thread per batch element): @@ -103,7 +103,7 @@ def compute_targets_kernel( isaac_to_mj: wp.array(dtype=wp.int32), action_scale: float, target_q: wp.array2d(dtype=wp.float32), -): +) -> None: """Post-process policy actions into 19-dim target_q. Per-thread: diff --git a/judo/controller/controller.py b/judo/controller/controller.py index 137cebf3..69599676 100644 --- a/judo/controller/controller.py +++ b/judo/controller/controller.py @@ -18,7 +18,6 @@ from judo.gui import slider from judo.optimizers import Optimizer, OptimizerConfig, get_registered_optimizers from judo.tasks import Task, TaskConfig, get_registered_tasks -from judo.tasks.spot.spot_constants import POLICY_OUTPUT_DIM from judo.utils.mj_rollout_backend import MJRolloutBackend from judo.utils.normalization import ( IdentityNormalizer, @@ -82,20 +81,19 @@ def __init__( if not isinstance(rollout_backend, str): # MJWarpRolloutBackend instance (avoid isinstance check to skip mujoco_warp import) self.rollout_backend = rollout_backend + elif self.task.uses_locomotion_policy: + assert self.task.locomotion_policy_path is not None + self.rollout_backend: RolloutBackend = PolicyMJRolloutBackend( + model=self.model, + num_threads=self.optimizer_cfg.num_rollouts, + policy_path=self.task.locomotion_policy_path, + physics_substeps=self.task.physics_substeps, + ) else: - if self.task.uses_locomotion_policy: - assert self.task.locomotion_policy_path is not None - self.rollout_backend: RolloutBackend = PolicyMJRolloutBackend( - model=self.model, - num_threads=self.optimizer_cfg.num_rollouts, - policy_path=self.task.locomotion_policy_path, - physics_substeps=self.task.physics_substeps, - ) - else: - self.rollout_backend = MJRolloutBackend( - model=self.model, - num_threads=self.optimizer_cfg.num_rollouts, - ) + self.rollout_backend = MJRolloutBackend( + model=self.model, + num_threads=self.optimizer_cfg.num_rollouts, + ) self._last_policy_output = None self.action_normalizer = self._init_action_normalizer() diff --git a/judo/utils/mjwarp_rollout_backend.py b/judo/utils/mjwarp_rollout_backend.py index 3315440c..7b5263f9 100644 --- a/judo/utils/mjwarp_rollout_backend.py +++ b/judo/utils/mjwarp_rollout_backend.py @@ -21,7 +21,7 @@ def _copy_target_to_ctrl( target_q: wp.array2d(dtype=wp.float32), ctrl: wp.array2d(dtype=wp.float32), n_controlled: int, -): +) -> None: """Copy target_q into the first n_controlled columns of ctrl.""" i = wp.tid() for j in range(n_controlled): @@ -31,14 +31,23 @@ def _copy_target_to_ctrl( class PassThroughController: """Passes commands through as target joint positions (no locomotion policy).""" - def compute_batch(self, cmd, qpos, qvel, previous_actions): + def compute_batch( + self, + cmd: wp.array, + qpos: wp.array, + qvel: wp.array, + previous_actions: wp.array | None, + ) -> tuple[wp.array, wp.array | None]: + """Return commands directly as targets and preserve previous policy outputs.""" return cmd, None - def reset(self): + def reset(self) -> None: + """Reset controller state (no-op for pass-through mode).""" pass @property - def target_frequency(self): + def target_frequency(self) -> float: + """Policy update frequency in Hz for pass-through mode.""" return float("inf") From 6f1c29d9e84f6058b144abc1cad3fb4f65804187 Mon Sep 17 00:00:00 2001 From: Duy Ta Date: Thu, 19 Mar 2026 15:20:12 -0400 Subject: [PATCH 04/12] review, bug fixes, improvements --- .github/workflows/test_gpu.yml | 52 ++ judo/controller/controller.py | 8 +- judo/models/xml/cylinder_push.xml | 6 +- judo/tasks/base.py | 2 +- judo/tasks/cylinder_push.py | 7 + judo/tasks/spot/spot_box_push.py | 15 +- judo/tasks/spot/spot_constants.py | 23 +- judo/tasks/spot/spot_navigate.py | 22 +- judo/tasks/spot/spot_tire_roll.py | 14 +- judo/utils/mjwarp_rollout_backend.py | 131 +++- pixi.lock | 951 +++++++++++++++++++++++++-- pyproject.toml | 6 +- run_mpc/README.md | 25 + run_mpc/configs/cartpole.json | 29 + run_mpc/configs/cylinder_push.json | 28 + run_mpc/configs/spot_box_push.json | 33 + run_mpc/configs/spot_navigate.json | 29 + run_mpc/configs/spot_tire_roll.json | 37 ++ run_mpc/main.py | 25 +- run_mpc/mpc_batch.py | 25 +- run_mpc/mpc_config.py | 4 + run_mpc/mpc_setup.py | 31 +- run_mpc/visualize_trajectories.py | 36 +- tests/test_run_mpc.py | 169 +++++ 24 files changed, 1546 insertions(+), 162 deletions(-) create mode 100644 .github/workflows/test_gpu.yml create mode 100644 run_mpc/configs/cartpole.json create mode 100644 run_mpc/configs/cylinder_push.json create mode 100644 run_mpc/configs/spot_box_push.json create mode 100644 run_mpc/configs/spot_navigate.json create mode 100644 run_mpc/configs/spot_tire_roll.json create mode 100644 tests/test_run_mpc.py diff --git a/.github/workflows/test_gpu.yml b/.github/workflows/test_gpu.yml new file mode 100644 index 00000000..2c404c5e --- /dev/null +++ b/.github/workflows/test_gpu.yml @@ -0,0 +1,52 @@ +name: Test (GPU / MJWarp) + +on: + push: + branches: [main] + pull_request: + branches: [main] + +permissions: + contents: read + +jobs: + test-mjwarp: + runs-on: [self-hosted, gpu] + timeout-minutes: 30 + + steps: + - uses: actions/checkout@v6 + + - uses: prefix-dev/setup-pixi@v0.9.3 + with: + pixi-version: latest + environments: dev-test-mjwarp + cache: true + + # ── mujoco_extensions build cache ─────────────────────────────── + - name: Restore mujoco_extensions build cache + id: ext-cache + uses: actions/cache@v5 + with: + path: | + mujoco_extensions/build + mujoco_extensions/policy_rollout/*.so + key: mujoco-ext-gpu-${{ hashFiles('pixi.lock', 'mujoco_extensions/**/*.cpp', 'mujoco_extensions/**/*.h', 'mujoco_extensions/**/CMakeLists.txt') }} + + - name: Build mujoco_extensions (cache miss) + if: steps.ext-cache.outputs.cache-hit != 'true' + run: pixi run -e dev-mjwarp build + + # ── Download mesh assets (avoid xdist race) ──────────────────── + - name: Download meshes from release + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: pixi run -e dev-mjwarp python -c "from judo.utils.assets import download_and_extract_meshes; from judo import MODEL_PATH; download_and_extract_meshes(str(MODEL_PATH))" + + # ── Pre-warm robot_descriptions cache (avoid xdist race) ─────── + - name: Cache mujoco_menagerie meshes + run: pixi run -e dev-mjwarp python -c "from robot_descriptions import spot_mj_description" + + # ── Tests ─────────────────────────────────────────────────────── + - name: Run MPC GPU tests + run: pixi run -e dev-mjwarp pytest tests/test_run_mpc.py -rsx -n=1 --timeout=300 diff --git a/judo/controller/controller.py b/judo/controller/controller.py index 69599676..51d72b1a 100644 --- a/judo/controller/controller.py +++ b/judo/controller/controller.py @@ -1,7 +1,5 @@ # Copyright (c) 2025 Robotics and AI Institute LLC. All rights reserved. -from __future__ import annotations - import copy import warnings from dataclasses import dataclass @@ -57,7 +55,7 @@ def __init__( controller_config: ControllerConfig, task: Task, optimizer: Optimizer, - rollout_backend: Literal["mujoco"] | MJWarpRolloutBackend = "mujoco", + rollout_backend: Literal["mujoco"] | "MJWarpRolloutBackend" = "mujoco", ) -> None: """Initialize the controller. @@ -460,7 +458,7 @@ def __init__( controller_config: ControllerConfig, task: Task, optimizer: Optimizer, - rollout_backend: MJWarpRolloutBackend, + rollout_backend: "MJWarpRolloutBackend", ) -> None: """Initialize the batched controllers. @@ -664,7 +662,7 @@ def make_controller( init_optimizer: str, task_registration_cfg: DictConfig | None = None, optimizer_registration_cfg: DictConfig | None = None, - rollout_backend: Literal["mujoco"] | MJWarpRolloutBackend = "mujoco", + rollout_backend: Literal["mujoco"] | "MJWarpRolloutBackend" = "mujoco", ) -> Controller: """Make a controller. diff --git a/judo/models/xml/cylinder_push.xml b/judo/models/xml/cylinder_push.xml index 1e75e2fb..bcedcaa6 100644 --- a/judo/models/xml/cylinder_push.xml +++ b/judo/models/xml/cylinder_push.xml @@ -20,14 +20,16 @@ - + + - + + diff --git a/judo/tasks/base.py b/judo/tasks/base.py index f1feeb30..016b5ebb 100644 --- a/judo/tasks/base.py +++ b/judo/tasks/base.py @@ -110,7 +110,7 @@ def reset(self) -> None: def success(self, model: MjModel, data: MjData, metadata: dict[str, Any] | None = None) -> bool: """Check if the task was completed successfully. Override in subclasses.""" - return True + return False @property def physics_substeps(self) -> int: diff --git a/judo/tasks/cylinder_push.py b/judo/tasks/cylinder_push.py index be6e554a..c857ce1d 100644 --- a/judo/tasks/cylinder_push.py +++ b/judo/tasks/cylinder_push.py @@ -13,6 +13,7 @@ from judo.utils.fields import np_1d_field XML_PATH = str(MODEL_PATH / "xml/cylinder_push.xml") +GOAL_DISTANCE_THRESHOLD = 0.3 @slider("w_pusher_proximity", 0.0, 5.0, 0.1) @@ -92,6 +93,12 @@ def reward( return pusher_reward + velocity_reward + goal_reward + def success(self, model: mujoco.MjModel, data: mujoco.MjData, metadata: dict[str, Any] | None = None) -> bool: + """Check if the cart is close to the goal position.""" + cart_pos = data.qpos[2:4] + goal_pos = self.config.goal_pos[0:2] + return bool(np.linalg.norm(cart_pos - goal_pos) < GOAL_DISTANCE_THRESHOLD) + def reset(self) -> None: """Resets the model to a default (random) state.""" theta = 2 * np.pi * np.random.rand(2) diff --git a/judo/tasks/spot/spot_box_push.py b/judo/tasks/spot/spot_box_push.py index d96fe5af..57519e4a 100644 --- a/judo/tasks/spot/spot_box_push.py +++ b/judo/tasks/spot/spot_box_push.py @@ -34,12 +34,12 @@ class SpotBoxPushConfig(SpotBaseConfig): fall_penalty: float = 2500.0 w_controls: float = 0.0 goal_distance_threshold: float = 0.5 - goal_position: np.ndarray = np_1d_field( + goal_pos: np.ndarray = np_1d_field( np.array([0.0, 0.0, BOX_HALF_LENGTH]), names=["x", "y", "z"], mins=[-5.0, -5.0, 0.0], maxs=[5.0, 5.0, 3.0], - vis_name="goal_position", + vis_name="goal_pos", xyz_vis_indices=[0, 1, None], ) @@ -53,10 +53,11 @@ class SpotBoxPush(SpotBase[SpotBoxPushConfig]): def __init__( self, + model_path: str = XML_PATH, config: SpotBoxPushConfig | None = None, ) -> None: """Initialize the SpotBoxPush task.""" - super().__init__(model_path=XML_PATH, use_arm=True, config=config) + super().__init__(model_path=model_path, use_arm=True, config=config) self.body_pose_idx = self.get_joint_position_start_index("base") self.object_pose_idx = self.get_joint_position_start_index("box_joint") self.object_y_axis_idx = self.get_sensor_start_index("object_y_axis") @@ -81,9 +82,9 @@ def reward( spot_fallen_reward = -self.config.fall_penalty * (body_height <= self.config.spot_fallen_threshold).any(axis=-1) - goal_reward = -self.config.w_goal * np.linalg.norm( - object_pos - self.config.goal_position[None, None], axis=-1 - ).mean(-1) + goal_reward = -self.config.w_goal * np.linalg.norm(object_pos - self.config.goal_pos[None, None], axis=-1).mean( + -1 + ) box_orientation_reward = -self.config.w_orientation * np.abs( np.dot(object_y_axis, Z_AXIS) > self.config.orientation_threshold @@ -110,7 +111,7 @@ def reward( def success(self, model: MjModel, data: MjData, metadata: dict[str, Any] | None = None) -> bool: """Check if the box reached the goal and Spot is still standing.""" object_pos = data.qpos[self.object_pose_idx : self.object_pose_idx + 3] - at_goal = np.linalg.norm(object_pos - self.config.goal_position) <= self.config.goal_distance_threshold + at_goal = np.linalg.norm(object_pos - self.config.goal_pos) <= self.config.goal_distance_threshold return bool(at_goal and super().success(model, data, metadata)) @property diff --git a/judo/tasks/spot/spot_constants.py b/judo/tasks/spot/spot_constants.py index 48d8d986..017bb5f2 100644 --- a/judo/tasks/spot/spot_constants.py +++ b/judo/tasks/spot/spot_constants.py @@ -112,10 +112,25 @@ # Default joint offsets for locomotion policy (Isaac order, 19 joints) LOCOMOTION_DEFAULT_JOINTS_OFFSET = ( - 0.0, 0.12, -0.12, 0.12, -0.12, - -0.9, 0.5, 0.5, 0.5, 0.5, - 1.8, -1.0, -1.0, -1.0, -1.0, - 0.0, -0.9, 0.0, -1.54, + 0.0, + 0.12, + -0.12, + 0.12, + -0.12, + -0.9, + 0.5, + 0.5, + 0.5, + 0.5, + 1.8, + -1.0, + -1.0, + -1.0, + -1.0, + 0.0, + -0.9, + 0.0, + -1.54, ) # Default leg offsets for locomotion policy (Isaac order, 12 legs) diff --git a/judo/tasks/spot/spot_navigate.py b/judo/tasks/spot/spot_navigate.py index 0cf15669..6d6a3fbd 100644 --- a/judo/tasks/spot/spot_navigate.py +++ b/judo/tasks/spot/spot_navigate.py @@ -11,7 +11,7 @@ import numpy as np from mujoco import MjData, MjModel -from judo.tasks.spot.spot_base import SpotBase, SpotBaseConfig +from judo.tasks.spot.spot_base import XML_PATH, SpotBase, SpotBaseConfig from judo.tasks.spot.spot_constants import LEGS_STANDING_POS, STANDING_HEIGHT from judo.utils.fields import np_1d_field @@ -24,12 +24,12 @@ class SpotNavigateConfig(SpotBaseConfig): fall_penalty: float = 2500.0 w_controls: float = 0.0 goal_distance_threshold: float = 0.5 - goal_position: np.ndarray = np_1d_field( + goal_pos: np.ndarray = np_1d_field( np.array([0.0, 0.0, STANDING_HEIGHT]), names=["x", "y", "z"], mins=[-5.0, -5.0, 0.0], maxs=[5.0, 5.0, 3.0], - vis_name="goal_position", + vis_name="goal_pos", xyz_vis_indices=[0, 1, None], ) @@ -43,10 +43,11 @@ class SpotNavigate(SpotBase[SpotNavigateConfig]): def __init__( self, + model_path: str = XML_PATH, config: SpotNavigateConfig | None = None, ) -> None: """Initialize the SpotNavigate task.""" - super().__init__(use_arm=False, config=config) + super().__init__(model_path=model_path, use_arm=False, config=config) self.body_pose_idx = self.get_joint_position_start_index("base") def reward( @@ -65,9 +66,9 @@ def reward( spot_fallen_reward = -self.config.fall_penalty * (body_height <= self.config.spot_fallen_threshold).any(axis=-1) - goal_reward = -self.config.w_goal * np.linalg.norm( - body_pos - self.config.goal_position[None, None], axis=-1 - ).mean(-1) + goal_reward = -self.config.w_goal * np.linalg.norm(body_pos - self.config.goal_pos[None, None], axis=-1).mean( + -1 + ) controls_reward = -self.config.w_controls * np.linalg.norm(controls, axis=-1).mean(-1) @@ -80,10 +81,11 @@ def reward( def success(self, model: MjModel, data: MjData, metadata: dict[str, Any] | None = None) -> bool: """Check if Spot reached the goal and is still standing.""" body_pos = data.qpos[self.body_pose_idx : self.body_pose_idx + 3] - at_goal = np.linalg.norm(body_pos - self.config.goal_position) <= self.config.goal_distance_threshold + at_goal = np.linalg.norm(body_pos - self.config.goal_pos) <= self.config.goal_distance_threshold return bool(at_goal and super().success(model, data, metadata)) @property def reset_pose(self) -> np.ndarray: - """Reset pose for the navigate task.""" - return np.array([0, 0, STANDING_HEIGHT, 1, 0, 0, 0, *LEGS_STANDING_POS, *self.reset_arm_pos]) + """Reset pose for the navigate task with random initial xy position.""" + xy = np.random.uniform(-2.0, 2.0, size=2) + return np.array([*xy, STANDING_HEIGHT, 1, 0, 0, 0, *LEGS_STANDING_POS, *self.reset_arm_pos]) diff --git a/judo/tasks/spot/spot_tire_roll.py b/judo/tasks/spot/spot_tire_roll.py index 2cb07897..e211798b 100644 --- a/judo/tasks/spot/spot_tire_roll.py +++ b/judo/tasks/spot/spot_tire_roll.py @@ -40,12 +40,13 @@ class SpotTireRollConfig(SpotBaseConfig): w_tire_linear_velocity: float = 10.0 w_tire_angular_velocity: float = 0.30 w_controls: float = 0.0 - goal_position: np.ndarray = np_1d_field( + goal_distance_threshold: float = 0.5 + goal_pos: np.ndarray = np_1d_field( np.array([0.0, 0.0, TIRE_RADIUS]), names=["x", "y", "z"], mins=[-5.0, -5.0, 0.0], maxs=[5.0, 5.0, 3.0], - vis_name="goal_position", + vis_name="goal_pos", xyz_vis_indices=[0, 1, None], ) @@ -59,10 +60,11 @@ class SpotTireRoll(SpotBase[SpotTireRollConfig]): def __init__( self, + model_path: str = XML_PATH, config: SpotTireRollConfig | None = None, ) -> None: """Initialize the SpotTireRoll task.""" - super().__init__(model_path=XML_PATH, use_arm=True, use_gripper=True, config=config) + super().__init__(model_path=model_path, use_arm=True, use_gripper=True, config=config) self.body_pose_idx = self.get_joint_position_start_index("base") self.object_pose_idx = self.get_joint_position_start_index("tire_joint") self.gripper_pos_idx = self.get_sensor_start_index("trace_fngr_site") @@ -91,7 +93,7 @@ def reward( gripper_pos = sensors[..., self.gripper_pos_idx : self.gripper_pos_idx + 3] object_y_axis = sensors[..., self.object_y_axis_idx : self.object_y_axis_idx + 3] - tire_to_goal = self.config.goal_position - object_pos + tire_to_goal = self.config.goal_pos - object_pos tire_to_goal_norm = np.linalg.norm(tire_to_goal, axis=-1, keepdims=True) tire_to_goal_direction = tire_to_goal / (1e-2 + tire_to_goal_norm) @@ -105,7 +107,7 @@ def reward( np.dot(object_y_axis, Z_AXIS) > self.config.tire_fallen_threshold ).sum(axis=-1) - goal_reward = -self.config.w_goal * np.linalg.norm(object_pos - self.config.goal_position, axis=-1).mean(-1) + goal_reward = -self.config.w_goal * np.linalg.norm(object_pos - self.config.goal_pos, axis=-1).mean(-1) torso_proximity_reward = -self.config.w_torso_proximity * np.linalg.norm(body_pos - torso_goal, axis=-1).mean( -1 @@ -141,7 +143,7 @@ def success(self, model: MjModel, data: MjData, metadata: dict[str, Any] | None """Check if the tire is at goal, upright, and Spot is still standing.""" object_pos = data.qpos[self.object_pose_idx : self.object_pose_idx + 3] tire_y_axis = data.sensordata[self.object_y_axis_idx : self.object_y_axis_idx + 3] - at_goal = np.linalg.norm(object_pos - self.config.goal_position) <= self.config.goal_distance_threshold + at_goal = np.linalg.norm(object_pos - self.config.goal_pos) <= self.config.goal_distance_threshold upright = np.abs(tire_y_axis[2]) <= 0.1 return bool(at_goal and upright and super().success(model, data, metadata)) diff --git a/judo/utils/mjwarp_rollout_backend.py b/judo/utils/mjwarp_rollout_backend.py index 7b5263f9..f1a87cc9 100644 --- a/judo/utils/mjwarp_rollout_backend.py +++ b/judo/utils/mjwarp_rollout_backend.py @@ -2,6 +2,8 @@ """GPU-accelerated rollout backend using mujoco_warp (NVIDIA Warp).""" +import logging + import mujoco_warp as mjw import numpy as np import warp as wp @@ -11,8 +13,11 @@ from judo.utils.rollout_backend import RolloutBackend from judo.utils.timer import Timer +logger = logging.getLogger(__name__) + NCONMAX = 256 NJMAX = 900 +CCD_ITERATIONS = 200 DEVICE = "cuda:0" @@ -66,6 +71,7 @@ def __init__( num_problems: int = 1, locomotion_controller: BatchedSpotLocomotion | None = None, device: str = DEVICE, + check_nan: bool = False, ) -> None: """Initialize the backend with optional hierarchical control. @@ -75,7 +81,10 @@ def __init__( num_problems: Number of independent problems. locomotion_controller: Locomotion policy (e.g. BatchedSpotLocomotion) or None. device: Device for GPU operations. + check_nan: If True, check for NaN in rollout outputs and log warnings. + Useful for debugging mujoco_warp contact solver issues (e.g. low friction). """ + self.check_nan = check_nan assert device != "cpu", "RolloutBackend requires a GPU device." self.device = device @@ -87,7 +96,7 @@ def __init__( with wp.ScopedDevice(device): self.mjw_model = mjw.put_model(self.model) - self.mjw_model.opt.ccd_iterations = 60 + self.mjw_model.opt.ccd_iterations = CCD_ITERATIONS self.mjw_data = mjw.put_data( self.model, self.data, @@ -107,12 +116,11 @@ def __init__( # Initialize hierarchical control (optional) self.locomotion_controller = locomotion_controller if locomotion_controller else PassThroughController() + self._uses_locomotion_policy = locomotion_controller is not None # Calculate policy decimation physics_dt = model.opt.timestep - self.policy_decimation = max( - 1, int(1.0 / (self.locomotion_controller.target_frequency * physics_dt)) - ) + self.policy_decimation = max(1, int(1.0 / (self.locomotion_controller.target_frequency * physics_dt))) self.global_step_counter = 0 # Initialize timers for performance measurement @@ -146,7 +154,6 @@ def rollout( """ nq = self.model.nq nv = self.model.nv - nu = self.model.nu nsensordata = self.model.nsensordata horizon = controls.shape[1] @@ -182,11 +189,101 @@ def rollout( # GPU rollout loop self.timer_rollout.tic() + if self._uses_locomotion_policy: + previous_actions_wp = self._rollout_with_locomotion_policy( + num_worlds, + horizon, + nq, + nv, + controls_wp, + out_qpos_wp, + out_qvel_wp, + out_sensors_wp, + last_policy_output, + ) + else: + previous_actions_wp = self._rollout_direct( + horizon, + controls_wp, + out_qpos_wp, + out_qvel_wp, + out_sensors_wp, + ) + + wp.synchronize() + self.timer_rollout.toc() + + # GPU -> CPU copy + self.timer_gpu_to_cpu.tic() + out_states = np.zeros((num_worlds, horizon, nq + nv), dtype=np.float32) + out_states[:, :, :nq] = out_qpos_wp.numpy() + out_states[:, :, nq : nq + nv] = out_qvel_wp.numpy() + out_sensors = out_sensors_wp.numpy() + self.timer_gpu_to_cpu.toc() + + if self.check_nan: + self._warn_if_nan(out_states, out_sensors) + + return out_states, out_sensors, previous_actions_wp + + @staticmethod + def _warn_if_nan(states: np.ndarray, sensors: np.ndarray) -> None: + """Log warnings if NaN detected in rollout outputs.""" + if np.any(np.isnan(states)): + nan_worlds = np.any(np.isnan(states), axis=(1, 2)) + nan_count = int(np.sum(nan_worlds)) + nan_indices = np.where(nan_worlds)[0] + logger.warning( + f"NaN in rollout states! {nan_count}/{states.shape[0]} worlds affected, " + f"indices: {nan_indices[:10].tolist()}" + ) + # Find first NaN timestep for the first affected world + first_world = nan_indices[0] + nan_timesteps = np.where(np.any(np.isnan(states[first_world]), axis=1))[0] + logger.warning(f" World {first_world}: first NaN at timestep {nan_timesteps[0]}") + if nan_timesteps[0] > 0: + logger.warning(f" State at t={nan_timesteps[0] - 1}: {states[first_world, nan_timesteps[0] - 1]}") + if np.any(np.isnan(sensors)): + nan_worlds = np.any(np.isnan(sensors), axis=(1, 2)) + logger.warning(f"NaN in rollout sensors! {int(np.sum(nan_worlds))}/{sensors.shape[0]} worlds affected") + + def _rollout_direct( + self, + horizon: int, + controls_wp: wp.array, + out_qpos_wp: wp.array, + out_qvel_wp: wp.array, + out_sensors_wp: wp.array, + ) -> None: + """Fast rollout path for direct control (no locomotion policy). + + Pipelines all GPU operations with a single sync at the end (done by caller). + """ + for t in range(horizon): + wp.copy(self.mjw_data.ctrl, controls_wp[:, t, :]) + wp.capture_launch(self.mjw_step_graph) + wp.copy(out_qpos_wp[:, t, :], self.mjw_data.qpos) + wp.copy(out_qvel_wp[:, t, :], self.mjw_data.qvel) + wp.copy(out_sensors_wp[:, t, :], self.mjw_data.sensordata) + + def _rollout_with_locomotion_policy( + self, + num_worlds: int, + horizon: int, + nq: int, + nv: int, + controls_wp: wp.array, + out_qpos_wp: wp.array, + out_qvel_wp: wp.array, + out_sensors_wp: wp.array, + last_policy_output: wp.array | None, + ) -> wp.array | None: + """Rollout path for hierarchical control with locomotion policy.""" + nu = self.model.nu qpos_wp = wp.zeros((num_worlds, nq), dtype=wp.float32) qvel_wp = wp.zeros((num_worlds, nv), dtype=wp.float32) ctrl_wp = wp.zeros((num_worlds, nu), dtype=wp.float32) target_q_wp = None - previous_actions_wp = last_policy_output for t in range(horizon): @@ -194,11 +291,8 @@ def rollout( cmd_wp = controls_wp[:, t, :] - # Update locomotion policy - if ( - target_q_wp is None - or self.global_step_counter % self.policy_decimation == 0 - ): + # Update locomotion policy at the policy's target frequency + if target_q_wp is None or self.global_step_counter % self.policy_decimation == 0: target_q_wp, previous_actions_wp = self.locomotion_controller.compute_batch( cmd_wp, qpos_wp, qvel_wp, previous_actions_wp ) @@ -223,18 +317,7 @@ def rollout( wp.copy(out_qvel_wp[:, t, :], self.mjw_data.qvel) wp.copy(out_sensors_wp[:, t, :], self.mjw_data.sensordata) - wp.synchronize() - self.timer_rollout.toc() - - # GPU -> CPU copy - self.timer_gpu_to_cpu.tic() - out_states = np.zeros((num_worlds, horizon, nq + nv), dtype=np.float32) - out_states[:, :, :nq] = out_qpos_wp.numpy() - out_states[:, :, nq : nq + nv] = out_qvel_wp.numpy() - out_sensors = out_sensors_wp.numpy() - self.timer_gpu_to_cpu.toc() - - return out_states, out_sensors, previous_actions_wp + return previous_actions_wp def update(self, num_threads: int, num_problems: int = 1) -> None: """Update the backend with a new number of threads.""" @@ -244,7 +327,7 @@ def update(self, num_threads: int, num_problems: int = 1) -> None: with wp.ScopedDevice(DEVICE): self.mjw_model = mjw.put_model(self.model) - self.mjw_model.opt.ccd_iterations = 60 + self.mjw_model.opt.ccd_iterations = CCD_ITERATIONS self.mjw_data = mjw.put_data( self.model, self.data, diff --git a/pixi.lock b/pixi.lock index 1b2876d3..7e536b26 100644 --- a/pixi.lock +++ b/pixi.lock @@ -95,7 +95,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/94/54/e7d793b573f298e1c9013b8c4dade17d481164aa517d1d7148619c2cedbf/markdown_it_py-4.0.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/28/83/36557b04cfdc317ed8a525c4993b23e43a8fbcddaddd78619112ca07138c/msgspec-0.20.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/df/72/0c47350ec39611ff8defe9e8af10c23c9ad0235974f1999a523fcd1c3e68/mujoco-3.4.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/16/47/93c7ac3a9630b49c55d76b0d02aa565543e2f62cecd885f8f574f5c745e7/mujoco-3.5.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/9e/c9/b2622292ea83fbb4ec318f5b9ab867d0a28ab43c5717bb85b0a5f6b3b0a4/networkx-3.6.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/88/b2/d0896bdcdc8d28a7fc5717c305f1a861c26e18c05047949fb371034d98bd/nodeenv-1.10.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/04/dc/46066ce18d01645541f0186877377b9371b8fa8017fa8262002b4ef22612/numpy-2.4.2-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl @@ -201,7 +201,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/94/54/e7d793b573f298e1c9013b8c4dade17d481164aa517d1d7148619c2cedbf/markdown_it_py-4.0.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/57/b6/eff0305961a1d9447ec2b02f8c73c8946f22564d302a504185b730c9a761/msgspec-0.20.0-cp313-cp313-macosx_11_0_arm64.whl - - pypi: https://files.pythonhosted.org/packages/e8/51/c3e5c3b199b1b74c85f0cb02dc0ef80363bf91ea245ee8a932804768d5e8/mujoco-3.4.0-cp313-cp313-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/6f/c9/26bd4979d503d03f7a6ded851c3094a5708cb534cf0dc80b4db6672da2b0/mujoco-3.5.0-cp313-cp313-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/9e/c9/b2622292ea83fbb4ec318f5b9ab867d0a28ab43c5717bb85b0a5f6b3b0a4/networkx-3.6.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/88/b2/d0896bdcdc8d28a7fc5717c305f1a861c26e18c05047949fb371034d98bd/nodeenv-1.10.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/09/f0/817d03a03f93ba9c6c8993de509277d84e69f9453601915e4a69554102a1/numpy-2.4.2-cp313-cp313-macosx_11_0_arm64.whl @@ -303,7 +303,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/94/54/e7d793b573f298e1c9013b8c4dade17d481164aa517d1d7148619c2cedbf/markdown_it_py-4.0.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/f1/25/5e8080fe0117f799b1b68008dc29a65862077296b92550632de015128579/msgspec-0.20.0-cp313-cp313-win_amd64.whl - - pypi: https://files.pythonhosted.org/packages/dc/25/bbf8c01758d619c86bcbe58db6a7d61ca423e7c76791f323b8ea2e92c2bd/mujoco-3.4.0-cp313-cp313-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/ab/53/54a0815d43c83e1074cfc7da98a3dea88d7dda48c03edfd225a387a3767b/mujoco-3.5.0-cp313-cp313-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/9e/c9/b2622292ea83fbb4ec318f5b9ab867d0a28ab43c5717bb85b0a5f6b3b0a4/networkx-3.6.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/88/b2/d0896bdcdc8d28a7fc5717c305f1a861c26e18c05047949fb371034d98bd/nodeenv-1.10.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/43/bc/6352f343522fcb2c04dbaf94cb30cca6fd32c1a750c06ad6231b4293708c/numpy-2.4.2-cp313-cp313-win_amd64.whl @@ -468,7 +468,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/09/ec/4b43dae793655b7d8a25f76119624350b4d65eb663459eb9603d7f1f0345/mistune-0.8.4-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a4/8e/469e5a4a2f5855992e425f3cb33804cc07bf18d48f2db061aec61ce50270/more_itertools-10.8.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/28/83/36557b04cfdc317ed8a525c4993b23e43a8fbcddaddd78619112ca07138c/msgspec-0.20.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/df/72/0c47350ec39611ff8defe9e8af10c23c9ad0235974f1999a523fcd1c3e68/mujoco-3.4.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/16/47/93c7ac3a9630b49c55d76b0d02aa565543e2f62cecd885f8f574f5c745e7/mujoco-3.5.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/9e/c9/b2622292ea83fbb4ec318f5b9ab867d0a28ab43c5717bb85b0a5f6b3b0a4/networkx-3.6.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/6f/84/c0dc75c7fb596135f999e59a410d9f45bdabb989f1cb911f0016d22b747b/nh3-0.3.3-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - pypi: https://files.pythonhosted.org/packages/88/b2/d0896bdcdc8d28a7fc5717c305f1a861c26e18c05047949fb371034d98bd/nodeenv-1.10.0-py2.py3-none-any.whl @@ -490,6 +490,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/0c/82/a2c93e32800940d9573fb28c346772a14778b84ba7524e691b324620ab89/pyright-1.1.408-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/3b/ab/b3226f0bd7cdcf710fbede2b3548584366da3b19b5021e74f5bde2a8fa3f/pytest-9.0.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ee/49/1377b49de7d0c1ce41292161ea0f721913fa8722c19fb9c1e3aa0367eecb/pytest_cov-7.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/fa/b6/3127540ecdf1464a00e5a01ee60a1b09175f6913f0644ac748494d9c4b21/pytest_timeout-2.4.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ca/31/d4e37e9e550c2b92a9cbc2e4d0b7420a27224968580b5a447f420847c975/pytest_xdist-3.8.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ec/57/56b9bcc3c9c6a792fcbaf139543cee77261f3651ca9da0c93f5c1221264b/python_dateutil-2.9.0.post0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/74/27/e5b8f34d02d9995b80abcef563ea1f8b56d20134d8f4e5e81733b1feceb2/pyyaml-6.0.3-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl @@ -634,7 +635,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/09/ec/4b43dae793655b7d8a25f76119624350b4d65eb663459eb9603d7f1f0345/mistune-0.8.4-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a4/8e/469e5a4a2f5855992e425f3cb33804cc07bf18d48f2db061aec61ce50270/more_itertools-10.8.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/57/b6/eff0305961a1d9447ec2b02f8c73c8946f22564d302a504185b730c9a761/msgspec-0.20.0-cp313-cp313-macosx_11_0_arm64.whl - - pypi: https://files.pythonhosted.org/packages/e8/51/c3e5c3b199b1b74c85f0cb02dc0ef80363bf91ea245ee8a932804768d5e8/mujoco-3.4.0-cp313-cp313-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/6f/c9/26bd4979d503d03f7a6ded851c3094a5708cb534cf0dc80b4db6672da2b0/mujoco-3.5.0-cp313-cp313-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/9e/c9/b2622292ea83fbb4ec318f5b9ab867d0a28ab43c5717bb85b0a5f6b3b0a4/networkx-3.6.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/13/3e/aef8cf8e0419b530c95e96ae93a5078e9b36c1e6613eeb1df03a80d5194e/nh3-0.3.3-cp38-abi3-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl - pypi: https://files.pythonhosted.org/packages/88/b2/d0896bdcdc8d28a7fc5717c305f1a861c26e18c05047949fb371034d98bd/nodeenv-1.10.0-py2.py3-none-any.whl @@ -656,6 +657,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/0c/82/a2c93e32800940d9573fb28c346772a14778b84ba7524e691b324620ab89/pyright-1.1.408-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/3b/ab/b3226f0bd7cdcf710fbede2b3548584366da3b19b5021e74f5bde2a8fa3f/pytest-9.0.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ee/49/1377b49de7d0c1ce41292161ea0f721913fa8722c19fb9c1e3aa0367eecb/pytest_cov-7.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/fa/b6/3127540ecdf1464a00e5a01ee60a1b09175f6913f0644ac748494d9c4b21/pytest_timeout-2.4.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ca/31/d4e37e9e550c2b92a9cbc2e4d0b7420a27224968580b5a447f420847c975/pytest_xdist-3.8.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ec/57/56b9bcc3c9c6a792fcbaf139543cee77261f3651ca9da0c93f5c1221264b/python_dateutil-2.9.0.post0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/b1/16/95309993f1d3748cd644e02e38b75d50cbc0d9561d21f390a76242ce073f/pyyaml-6.0.3-cp313-cp313-macosx_11_0_arm64.whl @@ -795,7 +797,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/09/ec/4b43dae793655b7d8a25f76119624350b4d65eb663459eb9603d7f1f0345/mistune-0.8.4-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a4/8e/469e5a4a2f5855992e425f3cb33804cc07bf18d48f2db061aec61ce50270/more_itertools-10.8.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/f1/25/5e8080fe0117f799b1b68008dc29a65862077296b92550632de015128579/msgspec-0.20.0-cp313-cp313-win_amd64.whl - - pypi: https://files.pythonhosted.org/packages/dc/25/bbf8c01758d619c86bcbe58db6a7d61ca423e7c76791f323b8ea2e92c2bd/mujoco-3.4.0-cp313-cp313-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/ab/53/54a0815d43c83e1074cfc7da98a3dea88d7dda48c03edfd225a387a3767b/mujoco-3.5.0-cp313-cp313-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/9e/c9/b2622292ea83fbb4ec318f5b9ab867d0a28ab43c5717bb85b0a5f6b3b0a4/networkx-3.6.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/73/88/1ce287ef8649dc51365b5094bd3713b76454838140a32ab4f8349973883c/nh3-0.3.3-cp38-abi3-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/88/b2/d0896bdcdc8d28a7fc5717c305f1a861c26e18c05047949fb371034d98bd/nodeenv-1.10.0-py2.py3-none-any.whl @@ -817,6 +819,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/0c/82/a2c93e32800940d9573fb28c346772a14778b84ba7524e691b324620ab89/pyright-1.1.408-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/3b/ab/b3226f0bd7cdcf710fbede2b3548584366da3b19b5021e74f5bde2a8fa3f/pytest-9.0.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ee/49/1377b49de7d0c1ce41292161ea0f721913fa8722c19fb9c1e3aa0367eecb/pytest_cov-7.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/fa/b6/3127540ecdf1464a00e5a01ee60a1b09175f6913f0644ac748494d9c4b21/pytest_timeout-2.4.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ca/31/d4e37e9e550c2b92a9cbc2e4d0b7420a27224968580b5a447f420847c975/pytest_xdist-3.8.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ec/57/56b9bcc3c9c6a792fcbaf139543cee77261f3651ca9da0c93f5c1221264b/python_dateutil-2.9.0.post0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/de/3d/8161f7711c017e01ac9f008dfddd9410dff3674334c233bde66e7ba65bbf/pywin32_ctypes-0.2.3-py3-none-any.whl @@ -868,6 +871,546 @@ environments: - pypi: https://files.pythonhosted.org/packages/2e/54/647ade08bf0db230bfea292f893923872fd20be6ac6f53b2b936ba839d75/zipp-3.23.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d9/82/b9c06c870f3bd8767c201f1edbdf9e8dc34be5b0fbc5682c4f80fe948475/zstandard-0.25.0-cp313-cp313-win_amd64.whl - pypi: ./ + dev-mjwarp: + channels: + - url: https://conda.anaconda.org/conda-forge/ + indexes: + - https://pypi.org/simple + options: + pypi-prerelease-mode: if-necessary-or-explicit + packages: + linux-64: + - conda: https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-20_gnu.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/binutils_impl_linux-64-2.45.1-default_hfdba357_101.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/binutils_linux-64-2.45.1-default_h4852527_101.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-hda65f42_9.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/c-ares-1.34.6-hb03c661_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.1.4-hbd8a1cb_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/cmake-4.2.3-hc85cc9f_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/eigen-3.4.0-h171cf75_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/gcc_impl_linux-64-13.4.0-he2fa53e_18.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/gcc_linux-64-13.4.0-h0a5b801_21.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/gxx_impl_linux-64-13.4.0-h6a38259_18.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/gxx_linux-64-13.4.0-h587059e_21.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/icu-78.2-h33c6efd_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/kernel-headers_linux-64-4.18.0-he073ed8_9.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/keyutils-1.6.3-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/krb5-1.22.2-ha1258a1_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.45.1-default_hbd61a6d_101.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libcurl-8.18.0-hcf29cc6_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libedit-3.1.20250104-pl5321h7949ede_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libev-4.33-hd590300_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.7.4-hecca717_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libffi-3.5.2-h3435931_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-15.2.0-he0feb66_18.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/libgcc-devel_linux-64-13.4.0-hd1d28cc_118.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-15.2.0-h69a702a_18.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-15.2.0-he0feb66_18.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/liblzma-5.8.2-hb03c661_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libmpdec-4.0.0-hb03c661_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libnghttp2-1.67.0-had1ee68_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libsanitizer-13.4.0-h2a15e64_18.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.51.2-hf4e2dac_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libssh2-1.11.1-hcf80075_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-15.2.0-h934c35e_18.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/libstdcxx-devel_linux-64-13.4.0-h6963c3b_118.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-15.2.0-hdf11a46_18.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.41.3-h5347b49_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libuv-1.51.0-hb03c661_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.1-hb9d3cd8_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.5-h2d0b736_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/onnxruntime-cpp-1.19.2-h641f3bf_0_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.6.1-h35e630c_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/patchelf-0.17.2-h58526e2_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pybind11-3.0.2-pyh7a1b43c_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pybind11-global-3.0.2-pyhc7ab6ef_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.13.12-hc97d973_100_cp313.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.13-8_cp313.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/readline-8.3-h853b02a_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/rhash-1.4.6-hb9d3cd8_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/sysroot_linux-64-2.28-h4ee821c_9.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_h366c992_103.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.7-hb78ec9c_6.conda + - pypi: https://files.pythonhosted.org/packages/18/a6/907a406bb7d359e6a63f99c313846d9eec4f7e6f7437809e03aa00fa3074/absl_py-2.4.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/8d/3f/95338030883d8c8b91223b4e21744b04d11b161a3ef117295d8241f50ab4/accessible_pygments-0.0.5-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/7e/b3/6b4067be973ae96ba0d615946e314c5ae35f9f993eca561b356540bb0c2b/alabaster-1.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/3e/38/7859ff46355f76f8d19459005ca000b6e7012f2f1ca597746cbcd1fbfe5e/antlr4-python3-runtime-4.9.3.tar.gz + - pypi: https://files.pythonhosted.org/packages/38/0e/27be9fdef66e72d64c0cdc3cc2823101b80585f8119b5c112c2e8f5f7dab/anyio-4.12.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/32/53/bac4724684064bfee95ece0bb6caf3887e509006845e25388a12cac26d0c/astroid-4.1.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/3a/2a/7cc015f5b9f5db42b7d48157e23356022889fc354a2813c15934b7cb5c0e/attrs-25.4.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b0/c2/bb8ba1cec816fa356e19da83c59bfd4ac34dba1ae41eb7622c18f4b1d48d/auditwheel-6.6.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/77/f5/21d2de20e8b8b0408f0681956ca2c69f1320a3848ac50e6e7f39c6159675/babel-2.18.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/1a/39/47f9197bdd44df24d67ac8893641e16f386c984a0619ef2ee4c51fbbc019/beautifulsoup4-4.14.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c5/0d/84a4380f930db0010168e0aa7b7a8fed9ba1835a8fbb1472bc6d0201d529/build-1.4.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e6/ad/3cc14f097111b4de0040c83a525973216457bbeeb63739ef1ed275c1c021/certifi-2026.1.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/98/df/0a1755e750013a2081e863e7cd37e0cdd02664372c754e5560099eb7aa44/cffi-2.0.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/db/3c/33bac158f8ab7f89b2e59426d5fe2e4f63f7ed25df84c036890172b412b5/cfgv-3.5.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/f5/83/6ab5883f57c9c801ce5e5677242328aa45592be8a00644310a008d04f922/charset_normalizer-3.4.4-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/6d/c1/e419ef3723a074172b68aaa89c9f3de486ed4c2399e2dbd8113a4fdcaf9e/colorlog-6.10.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ac/68/1666e3a4462f8202d836920114fa7a5ee9275d1fa45366d336c551a162dd/coverage-7.13.5-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/6b/e7/237155ae19a9023de7e30ec64e5d99a9431a567407ac21170a046d22a5a3/cryptography-46.0.5-cp311-abi3-manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/94/35/386550fd60316d1e37eccdda609b074113298f23cef5bddb2049823fe666/dacite-1.9.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/33/6b/e0547afaf41bf2c42e52430072fa5658766e3d65bd4b03a563d1b6336f57/distlib-0.4.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/55/e2/2537ebcff11c1ee1ff17d8d0b6f4db75873e3b0fb32c2d4a2ee31ecb310a/docstring_parser-0.17.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/02/10/5da547df7a391dcde17f59520a231527b8571e6f46fc8efb02ccb370ab12/docutils-0.22.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/94/53/7dc142faa1719333d57c78cfcf419f2b176770b49ebef54e0bbfa34212ac/dora_rs-0.4.1-cp37-abi3-manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/3c/3e/f3d1e28df9457089055dacf3ca7ca3751ed274d312d9a8515255d80011ec/dora_rs_cli-0.4.1-cp37-abi3-manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/78/62/0ffc083b1d5f7c95eb03b260d2622dfacb70d1153011d216260b71c8e7d9/dora_utils-0.1.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/59/c7/410b62268fa98d9f0f2f5ab14b6e718e308a5f30dc4b9c2dcb0223d98ac8/embreex-2.17.7.post7-cp313-cp313-manylinux2010_x86_64.manylinux_2_12_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/e7/98/87b5946356095738cb90a6df7b35ff69ac5750f6e783d5fbcc5cb3b6cbd7/etils-1.13.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ab/84/02fc1827e8cdded4aa65baef11296a9bbe595c474f0d6d758af082d849fd/execnet-2.1.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/a4/a5/842ae8f0c08b61d6484b52f99a03510a3a72d23141942d216ebe81fefbce/filelock-3.25.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e8/2d/d2a548598be01649e2d46231d151a6c56d10b964d94043a335ae56ea2d92/flatbuffers-25.12.19-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e6/ab/fb21f4c939bb440104cc2b396d3be1d9b7a9fd3c6c2a53d98c45b3d7c954/fsspec-2026.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/f4/b2/50e9b292b5cac13e9e81272c7171301abc753a60460d21505b606e15cf21/furo-2025.12.19-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/a0/61/5c78b91c3143ed5c14207f463aecfc8f9dbb5092fb2869baf37c273b2705/gitdb-4.0.12-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/6a/09/e21df6aef1e1ffc0c816f0522ddc3f6dcded766c3261813131c78a704470/gitpython-3.1.46-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/5a/3f/efeb7c6801c46e11bd666a5180f0d615f74f72264212f74f39586c6fda9d/glfw-2.10.0-py2.py27.py3.py30.py31.py32.py33.py34.py35.py36.py37.py38.py39.py310.py311.py312.py313.py314-none-manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/04/4b/29cac41a4d98d144bf5f6d33995617b185d14b22401f75ca86f384e87ff1/h11-0.16.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d9/69/4402ea66272dacc10b298cca18ed73e1c0791ff2ae9ed218d3859f9698ac/h5py-3.15.1-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/7e/f5/f66802a942d491edb555dd61e3a9961140fd64c90bce1eafd741609d334d/httpcore-1.0.9-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/2a/39/e50c7c3a983047577ee07d2a9e53faf5a69493943ec3f6a384bdc792deb2/httpx-0.28.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c6/50/e0edd38dcd63fb26a8547f13d28f7a008bc4a3fd4eb4ff030673f22ad41a/hydra_core-1.3.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/42/77/de194443bf38daed9452139e960c632b0ef9f9a5dd9ce605fdf18ca9f1b1/id-1.6.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/46/33/92ef41c6fad0233e41d3d84ba8e8ad18d1780f1e5d99b3c683e6d7f98b63/identify-2.6.18-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/0e/61/66938bbb5fc52dbdf84594873d5b51fb1f7c7794e9c0f5bd885f30bc507b/idna-3.11-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/fb/fe/301e0936b79bcab4cacc7548bf2853fc28dced0a578bab1f7ef53c9aa75b/imageio-2.37.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/5f/53/fb7122b71361a0d121b669dcf3d31244ef75badbbb724af388948de543e2/imagesize-2.0.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/a4/ed/1f1afb2e9e7f38a545d628f864d562a5ae64fe6f7a10e28ffb9b185b4e89/importlib_resources-6.5.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/cb/b1/3846dd7f199d53cb17f49cba7e651e9ce294d8497c8c150530ed11865bb8/iniconfig-2.3.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/7f/66/b15ce62552d84bbfcec9a4873ab79d993a1dd4edb922cbfccae192bd5b5f/jaraco.classes-3.4.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/f4/49/c152890d49102b280ecf86ba5f80a8c111c3a155dafa3bd24aeb64fde9e1/jaraco_context-6.1.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/fd/c4/813bb09f0985cb21e959f21f2464169eca882656849adf727ac7bb7e1767/jaraco_functools-4.4.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b2/a3/e137168c9c44d18eff0376253da9f1e9234d0239e0ee230d2fee6cea8e55/jeepney-0.9.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/62/a1/3d680cbfd5f4b8f15abc1d571870c5fc3e594bb582bc3b64ea099db13e56/jinja2-3.1.6-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/69/90/f63fb5873511e014207a475e2bb4e8b2e570d655b00ac19a9a0ca0a385ee/jsonschema-4.26.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/41/45/1a4ed80516f02155c51f51e8cedb3c1902296743db0bbc66608a0db2814f/jsonschema_specifications-2025.9.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/81/db/e655086b7f3a705df045bf0933bdd9c2f79bb3c97bfef1384598bb79a217/keyring-25.7.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d0/34/9e591954939276bb679b73773836c6684c22e56d05980e31d52a9a8deb18/lxml-6.0.2-cp313-cp313-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/a9/50/5b1d70de548fb1e11e15ea9ebec0480365462d202f98b66ad7e154284327/m2r2-0.3.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/1f/14/24ad90c7d9a6532c32b0392f1c3518bbab5e37092c99cc69bed17d30fb0c/manifold3d-3.3.2-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/03/30/e54ececd0403a5495c340b693075abec92a6d17dc44283b6cb059534f7ed/mapbox_earcut-2.0.0-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/94/54/e7d793b573f298e1c9013b8c4dade17d481164aa517d1d7148619c2cedbf/markdown_it_py-4.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/a9/21/9b05698b46f218fc0e118e1f8168395c65c8a2c750ae2bab54fc4bd4e0e8/markupsafe-3.0.3-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/09/ec/4b43dae793655b7d8a25f76119624350b4d65eb663459eb9603d7f1f0345/mistune-0.8.4-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/eb/33/40cd74219417e78b97c47802037cf2d87b91973e18bb968a7da48a96ea44/ml_dtypes-0.5.4-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/a4/8e/469e5a4a2f5855992e425f3cb33804cc07bf18d48f2db061aec61ce50270/more_itertools-10.8.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/43/e3/7d92a15f894aa0c9c4b49b8ee9ac9850d6e63b03c9c32c0367a13ae62209/mpmath-1.3.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/28/83/36557b04cfdc317ed8a525c4993b23e43a8fbcddaddd78619112ca07138c/msgspec-0.20.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/16/47/93c7ac3a9630b49c55d76b0d02aa565543e2f62cecd885f8f574f5c745e7/mujoco-3.5.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/4b/2e/90f05ad3818fd4b826f712c9f89a3df3aa3ef204efeaa71f8ddc2ca5fd3b/mujoco_warp-3.5.0.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/9e/c9/b2622292ea83fbb4ec318f5b9ab867d0a28ab43c5717bb85b0a5f6b3b0a4/networkx-3.6.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/6f/84/c0dc75c7fb596135f999e59a410d9f45bdabb989f1cb911f0016d22b747b/nh3-0.3.3-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/88/b2/d0896bdcdc8d28a7fc5717c305f1a861c26e18c05047949fb371034d98bd/nodeenv-1.10.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/04/dc/46066ce18d01645541f0186877377b9371b8fa8017fa8262002b4ef22612/numpy-2.4.2-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/e3/94/1843518e420fa3ed6919835845df698c7e27e183cb997394e4a670973a65/omegaconf-2.3.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/fb/71/d3fec0dcf9a7a99e7368112d9c765154e81da70fcba1e3121131a45c245b/onnx-1.20.1-cp312-abi3-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/19/cb/ce8203fee31533f4d74891145512d1b5c09b26cebb4c1574afb233c41e0f/onnxruntime_gpu-1.24.2-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/b7/b9/c538f279a4e237a006a2c98387d081e9eb060d203d8ed34467cc0f0b9b53/packaging-26.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/71/24/538bff45bde96535d7d998c6fed1a751c75ac7c53c37c90dc2601b243893/pillow-12.1.1-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/63/d7/97f7e3a6abb67d8080dd406fd4df842c2be0efaf712d1c899c32a075027c/platformdirs-4.9.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/54/20/4d324d65cc6d9205fabedc306948156824eb9f0ee1633355a8f7ec5c66bf/pluggy-1.6.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/5d/19/fd3ef348460c80af7bb4669ea7926651d1f95c23ff2df18b9d24bab4f3fa/pre_commit-4.5.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/9b/53/a9443aa3ca9ba8724fdfa02dd1887c1bcd8e89556b715cfbacca6b63dbec/protobuf-6.33.5-cp39-abi3-manylinux2014_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/b3/93/10a48b5e238de6d562a411af6467e71e7aedbc9b87f8d3a35f1560ae30fb/pyarrow-23.0.1-cp313-cp313-manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/4f/e4/4f2d41881fae547f06ffa4c9748fa8ed13c4db5c830ff268b84175546b3c/pybind11_stubgen-2.5.5-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/07/86/f1f61b7a0701f9d1299e5293d083318019f91021a4d449f94d59dbe024e4/pycollada-0.9.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/0c/c3/44f3fbbfa403ea2a7c779186dc20772604442dde72947e7d01069cbe98e3/pycparser-3.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/af/43/700932c4f0638c3421177144a2e86448c0d75dbaee2c7936bda3f9fd0878/pyelftools-0.32-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c7/21/705964c7812476f378728bdf590ca4b771ec72385c533964653c68e86bdc/pygments-2.19.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/de/e4/1ba6f44e491c4eece978685230dde56b14d51a0365bc1b774ddaa94d14cd/pyopengl-3.1.10-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/bd/24/12818598c362d7f300f18e74db45963dbcb85150324092410c8b49405e42/pyproject_hooks-1.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/0c/82/a2c93e32800940d9573fb28c346772a14778b84ba7524e691b324620ab89/pyright-1.1.408-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/3b/ab/b3226f0bd7cdcf710fbede2b3548584366da3b19b5021e74f5bde2a8fa3f/pytest-9.0.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ee/49/1377b49de7d0c1ce41292161ea0f721913fa8722c19fb9c1e3aa0367eecb/pytest_cov-7.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/fa/b6/3127540ecdf1464a00e5a01ee60a1b09175f6913f0644ac748494d9c4b21/pytest_timeout-2.4.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ca/31/d4e37e9e550c2b92a9cbc2e4d0b7420a27224968580b5a447f420847c975/pytest_xdist-3.8.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ec/57/56b9bcc3c9c6a792fcbaf139543cee77261f3651ca9da0c93f5c1221264b/python_dateutil-2.9.0.post0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c2/3c/2005227cb951df502412de2fa781f800663cccbef8d90ec6f1b371ac2c0d/python_discovery-1.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/74/27/e5b8f34d02d9995b80abcef563ea1f8b56d20134d8f4e5e81733b1feceb2/pyyaml-6.0.3-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/e1/67/921ec3024056483db83953ae8e48079ad62b92db7880013ca77632921dd0/readme_renderer-44.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/2c/58/ca301544e1fa93ed4f80d724bf5b194f6e4b945841c5bfd555878eea9fcb/referencing-0.37.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/1e/db/4254e3eabe8020b458f1a747140d32277ec7a271daf1d235b70dc0b4e6e3/requests-2.32.5-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/3f/51/d4db610ef29373b879047326cbf6fa98b6c1969d6f6dc423279de2b1be2c/requests_toolbelt-1.0.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ff/9a/9afaade874b2fa6c752c36f1548f718b5b83af81ed9b76628329dab81c1b/rfc3986-2.0.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/14/25/b208c5683343959b670dc001595f2f3737e051da617f66c31f7c4fa93abc/rich-14.3.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/16/80/579e75e0be0439d11e479732e4c194a9c6e6d152670dae561b9525015425/robot_descriptions-1.22.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/04/54/6f679c435d28e0a568d8e8a7c0a93a09010818634c3c3907fc98d8983770/roman_numerals-4.1.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b7/de/f7192e12b21b9e9a68a6d0f249b4af3fdcdff8418be0767a627564afa1f1/rpds_py-0.30.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/d1/75/e5d44be90525cd28503e7f836d077ae6663ec0687a13ba7810b4114b3668/rtree-1.4.1-py3-none-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/b0/99/66f0343176d5eab02c3f7fcd2de7a8e0dd7a41f0d982bee56cd1c24db62b/ruff-0.15.7-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/63/1e/12fbf2a3bb240161651c94bb5cdd0eae5d4e8cc6eaeceb74ab07b12a753d/scipy-1.17.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/b7/46/f5af3402b579fd5e11573ce652019a67074317e18c1935cc0b4ba9b35552/secretstorage-3.5.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/f2/a2/83fc37e2a58090e3d2ff79175a95493c664bcd0b653dd75cb9134645a4e5/shapely-2.1.2-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/b7/ce/149a00dd41f10bc29e5921b496af8b574d8413afcd5e30dfa0ed46c2cc5e/six-1.17.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/04/be/d09147ad1ec7934636ad912901c5fd7667e1c858e19d355237db0d0cd5e4/smmap-5.0.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c8/78/3565d011c61f5a43488987ee32b6f3f656e7f107ac2782dd57bdd7d91d9a/snowballstemmer-3.0.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/46/2c/1462b1d0a634697ae9e55b3cecdcb64788e8b7d63f54d923fcd0bb140aed/soupsieve-2.8.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/73/f7/b1884cb3188ab181fc81fa00c266699dab600f927a964df02ec3d5d1916a/sphinx-9.1.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/2f/3a/8923a543fa2422d32be4c5311f488e4f275acde263c811e4d5d22bb544cb/sphinx_autoapi-3.8.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/3c/dd/018ce05c532a22007ac58d4f45232514cd9d6dd0ee1dc374e309db830983/sphinx_basic_ng-1.0.0b2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/38/5e/49c1330add8c48ef52e50c82d7d847e32b7f786d5ddc1cafcd36ac63f1e3/sphinxcontrib_ansi_rai-0.7.0.dev20250623-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/5d/85/9ebeae2f76e9e77b952f4b274c27238156eae7979c5421fba91a28f4970d/sphinxcontrib_applehelp-2.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/35/7a/987e583882f985fe4d7323774889ec58049171828b58c2217e7f79cdf44e/sphinxcontrib_devhelp-2.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/0a/7b/18a8c0bcec9182c05a0b3ec2a776bba4ead82750a55ff798e8d406dae604/sphinxcontrib_htmlhelp-2.1.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c2/42/4c8646762ee83602e3fb3fbe774c2fac12f317deb0b5dbeeedd2d3ba4b77/sphinxcontrib_jsmath-1.0.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/84/04/53406477f01fa5bdcb1344fac421c46b6dce112d980c58237825ddb262a2/sphinxcontrib_programoutput_rai-0.18.dev0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/27/83/859ecdd180cacc13b1f7e857abf8582a64552ea7a061057a6c716e790fce/sphinxcontrib_qthelp-2.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/52/a7/d2782e4e3f77c8450f727ba74a8f12756d5ba823d81b941f1b04da9d033a/sphinxcontrib_serializinghtml-2.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/3a/83/4f5b250220e1a5acd31345a5ec1c95a7769725d0d8135276f399f44062f8/svg_path-7.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/a2/09/77d55d46fd61b4a135c444fc97158ef34a095e5681d0a6c10b75bf356191/sympy-1.14.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/16/e1/3079a9ff9b8e11b846c6ac5c8b5bfb7ff225eee721825310c91b3b50304f/tqdm-4.67.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/3c/b9/da09903ea53b677a58ba770112de6fe8b2acb8b4cd9bffae4ff6cfe7c072/trimesh-4.11.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/3a/7a/882d99539b19b1490cac5d77c67338d126e4122c8276bf640e411650c830/twine-6.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/91/88/b55b3117287a8540b76dbdd87733808d4d01c8067a3b339408c250bb3600/typeguard-4.5.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/18/67/36e9267722cc04a6b9f15c7f3441c2363321a3ea07da7ae0c0707beb2a9c/typing_extensions-4.15.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/a7/f9/56b0cb8c5c287c7eec02735cce74a4c25cc56d6817bab7edde6f32b024a3/tyro-1.0.6-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/39/08/aaaad47bc4e9dc8c725e68f9d04865dbcb2052843ff09c97b08904852d84/urllib3-2.6.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/f2/b3/4b9580d62e1245df52e8516cf3e404ff39cc72634d2d749d47b1dada4161/uv-0.10.4-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/b8/b4/07ab1c828bae0eb5c72cd9a4cbe8b0376d374509be3c7055e1a399bf85c3/vhacdx-0.0.10-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/c6/59/7d02447a55b2e55755011a647479041bc92a82e143f96a8195cb33bd0a1c/virtualenv-21.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b9/c4/819f000b3d64f654a054a8b24bf8d0c5e799636393135784d0886d8c808e/viser-1.0.21-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c2/bb/21e9396a963d50171f539f4a4c9411435e7bb9c5131f4480f882d5e51dc6/warp_lang-1.11.1-py3-none-manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/ff/b2/83a6ddf56cdcbad4e3d841fcc55d6ba7d19aeb89c50f24dd7e859ec0805f/websockets-15.0.1-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/87/22/b76d483683216dde3d67cba61fb2444be8d5be289bf628c13fc0fd90e5f9/wheel-0.46.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/5e/1e/3c3d3ef071b051cc3abbe3721ffb8365033a172613c04af2da89d5548a87/xxhash-3.6.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/c8/60/4ea0d6df0b497d51bf2ef87eaab0eb26f8bc3b3313c012da5df3383cced9/yourdfpy-0.0.60-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/2e/54/647ade08bf0db230bfea292f893923872fd20be6ac6f53b2b936ba839d75/zipp-3.23.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/63/4b/e3678b4e776db00f9f7b2fe58e547e8928ef32727d7a1ff01dea010f3f13/zstandard-0.25.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl + - pypi: ./ + osx-arm64: + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/bzip2-1.0.8-hd037594_9.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/c-ares-1.34.6-hc919400_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.1.4-hbd8a1cb_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/cmake-4.2.3-h8cb302d_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/eigen-3.4.0-h49c215f_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/icu-78.2-h38cb7af_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/krb5-1.22.2-h385eeb1_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcurl-8.18.0-hd5a2499_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-21.1.8-h55c6f16_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libedit-3.1.20250104-pl5321hafb1f1b_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libev-4.33-h93a5062_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libexpat-2.7.4-hf6b4638_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libffi-3.5.2-hcf2aa1b_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblzma-5.8.2-h8088a28_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libmpdec-4.0.0-h84a0fba_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libnghttp2-1.67.0-hc438710_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.51.2-h1ae2325_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libssh2-1.11.1-h1590b86_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libuv-1.51.0-h6caf38d_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libzlib-1.3.1-h8359307_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ncurses-6.5-h5e97a16_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/onnxruntime-cpp-1.19.2-hda9e549_0_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/openssl-3.6.1-hd24854e_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pybind11-3.0.2-pyh7a1b43c_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pybind11-global-3.0.2-pyhc7ab6ef_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-3.13.12-h20e6be0_100_cp313.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.13-8_cp313.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/readline-8.3-h46df422_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/rhash-1.4.6-h5505292_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tk-8.6.13-h010d191_3.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zstd-1.5.7-hbf9d68e_6.conda + - pypi: https://files.pythonhosted.org/packages/18/a6/907a406bb7d359e6a63f99c313846d9eec4f7e6f7437809e03aa00fa3074/absl_py-2.4.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/8d/3f/95338030883d8c8b91223b4e21744b04d11b161a3ef117295d8241f50ab4/accessible_pygments-0.0.5-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/7e/b3/6b4067be973ae96ba0d615946e314c5ae35f9f993eca561b356540bb0c2b/alabaster-1.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/3e/38/7859ff46355f76f8d19459005ca000b6e7012f2f1ca597746cbcd1fbfe5e/antlr4-python3-runtime-4.9.3.tar.gz + - pypi: https://files.pythonhosted.org/packages/38/0e/27be9fdef66e72d64c0cdc3cc2823101b80585f8119b5c112c2e8f5f7dab/anyio-4.12.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/32/53/bac4724684064bfee95ece0bb6caf3887e509006845e25388a12cac26d0c/astroid-4.1.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/3a/2a/7cc015f5b9f5db42b7d48157e23356022889fc354a2813c15934b7cb5c0e/attrs-25.4.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b0/c2/bb8ba1cec816fa356e19da83c59bfd4ac34dba1ae41eb7622c18f4b1d48d/auditwheel-6.6.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/77/f5/21d2de20e8b8b0408f0681956ca2c69f1320a3848ac50e6e7f39c6159675/babel-2.18.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/1a/39/47f9197bdd44df24d67ac8893641e16f386c984a0619ef2ee4c51fbbc019/beautifulsoup4-4.14.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c5/0d/84a4380f930db0010168e0aa7b7a8fed9ba1835a8fbb1472bc6d0201d529/build-1.4.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e6/ad/3cc14f097111b4de0040c83a525973216457bbeeb63739ef1ed275c1c021/certifi-2026.1.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/db/3c/33bac158f8ab7f89b2e59426d5fe2e4f63f7ed25df84c036890172b412b5/cfgv-3.5.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/97/45/4b3a1239bbacd321068ea6e7ac28875b03ab8bc0aa0966452db17cd36714/charset_normalizer-3.4.4-cp313-cp313-macosx_10_13_universal2.whl + - pypi: https://files.pythonhosted.org/packages/6d/c1/e419ef3723a074172b68aaa89c9f3de486ed4c2399e2dbd8113a4fdcaf9e/colorlog-6.10.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/0c/c9/44fb661c55062f0818a6ffd2685c67aa30816200d5f2817543717d4b92eb/coverage-7.13.5-cp313-cp313-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/94/35/386550fd60316d1e37eccdda609b074113298f23cef5bddb2049823fe666/dacite-1.9.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/33/6b/e0547afaf41bf2c42e52430072fa5658766e3d65bd4b03a563d1b6336f57/distlib-0.4.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/55/e2/2537ebcff11c1ee1ff17d8d0b6f4db75873e3b0fb32c2d4a2ee31ecb310a/docstring_parser-0.17.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/02/10/5da547df7a391dcde17f59520a231527b8571e6f46fc8efb02ccb370ab12/docutils-0.22.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e6/86/9ce12fbbfc365b7037666ffbc79ac93ba05690b22cac8fad8d2104577dfe/dora_rs-0.4.1-cp37-abi3-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/38/82/78d57efaf364d4ae45c5e87c5c370b0999da92ecc72f9ba96949a93faa4f/dora_rs_cli-0.4.1-cp37-abi3-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/78/62/0ffc083b1d5f7c95eb03b260d2622dfacb70d1153011d216260b71c8e7d9/dora_utils-0.1.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e7/98/87b5946356095738cb90a6df7b35ff69ac5750f6e783d5fbcc5cb3b6cbd7/etils-1.13.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ab/84/02fc1827e8cdded4aa65baef11296a9bbe595c474f0d6d758af082d849fd/execnet-2.1.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/a4/a5/842ae8f0c08b61d6484b52f99a03510a3a72d23141942d216ebe81fefbce/filelock-3.25.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e6/ab/fb21f4c939bb440104cc2b396d3be1d9b7a9fd3c6c2a53d98c45b3d7c954/fsspec-2026.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/f4/b2/50e9b292b5cac13e9e81272c7171301abc753a60460d21505b606e15cf21/furo-2025.12.19-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/a0/61/5c78b91c3143ed5c14207f463aecfc8f9dbb5092fb2869baf37c273b2705/gitdb-4.0.12-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/6a/09/e21df6aef1e1ffc0c816f0522ddc3f6dcded766c3261813131c78a704470/gitpython-3.1.46-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b6/a6/6ea2f73ad4474896d9e38b3ffbe6ffd5a802c738392269e99e8c6621a461/glfw-2.10.0-py2.py27.py3.py30.py31.py32.py33.py34.py35.py36.py37.py38.py39.py310.py311.py312.py313.py314-none-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/04/4b/29cac41a4d98d144bf5f6d33995617b185d14b22401f75ca86f384e87ff1/h11-0.16.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/31/96/ba99a003c763998035b0de4c299598125df5fc6c9ccf834f152ddd60e0fb/h5py-3.15.1-cp313-cp313-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/7e/f5/f66802a942d491edb555dd61e3a9961140fd64c90bce1eafd741609d334d/httpcore-1.0.9-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/2a/39/e50c7c3a983047577ee07d2a9e53faf5a69493943ec3f6a384bdc792deb2/httpx-0.28.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c6/50/e0edd38dcd63fb26a8547f13d28f7a008bc4a3fd4eb4ff030673f22ad41a/hydra_core-1.3.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/42/77/de194443bf38daed9452139e960c632b0ef9f9a5dd9ce605fdf18ca9f1b1/id-1.6.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/46/33/92ef41c6fad0233e41d3d84ba8e8ad18d1780f1e5d99b3c683e6d7f98b63/identify-2.6.18-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/0e/61/66938bbb5fc52dbdf84594873d5b51fb1f7c7794e9c0f5bd885f30bc507b/idna-3.11-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/fb/fe/301e0936b79bcab4cacc7548bf2853fc28dced0a578bab1f7ef53c9aa75b/imageio-2.37.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/5f/53/fb7122b71361a0d121b669dcf3d31244ef75badbbb724af388948de543e2/imagesize-2.0.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/a4/ed/1f1afb2e9e7f38a545d628f864d562a5ae64fe6f7a10e28ffb9b185b4e89/importlib_resources-6.5.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/cb/b1/3846dd7f199d53cb17f49cba7e651e9ce294d8497c8c150530ed11865bb8/iniconfig-2.3.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/7f/66/b15ce62552d84bbfcec9a4873ab79d993a1dd4edb922cbfccae192bd5b5f/jaraco.classes-3.4.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/f4/49/c152890d49102b280ecf86ba5f80a8c111c3a155dafa3bd24aeb64fde9e1/jaraco_context-6.1.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/fd/c4/813bb09f0985cb21e959f21f2464169eca882656849adf727ac7bb7e1767/jaraco_functools-4.4.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/62/a1/3d680cbfd5f4b8f15abc1d571870c5fc3e594bb582bc3b64ea099db13e56/jinja2-3.1.6-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/69/90/f63fb5873511e014207a475e2bb4e8b2e570d655b00ac19a9a0ca0a385ee/jsonschema-4.26.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/41/45/1a4ed80516f02155c51f51e8cedb3c1902296743db0bbc66608a0db2814f/jsonschema_specifications-2025.9.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/81/db/e655086b7f3a705df045bf0933bdd9c2f79bb3c97bfef1384598bb79a217/keyring-25.7.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/53/fd/4e8f0540608977aea078bf6d79f128e0e2c2bba8af1acf775c30baa70460/lxml-6.0.2-cp313-cp313-macosx_10_13_universal2.whl + - pypi: https://files.pythonhosted.org/packages/a9/50/5b1d70de548fb1e11e15ea9ebec0480365462d202f98b66ad7e154284327/m2r2-0.3.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/f4/1d/5c2d96b18a603cf8d121efd129c0beb1ab902115f0eda3f9ee5b349b5924/manifold3d-3.3.2-cp313-cp313-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/1a/3f/03f23eac9831e7d0d8da3d6993695a9a3724659c94e9997f6b7aaccc199d/mapbox_earcut-2.0.0-cp313-cp313-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/94/54/e7d793b573f298e1c9013b8c4dade17d481164aa517d1d7148619c2cedbf/markdown_it_py-4.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/9c/d9/5f7756922cdd676869eca1c4e3c0cd0df60ed30199ffd775e319089cb3ed/markupsafe-3.0.3-cp313-cp313-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/09/ec/4b43dae793655b7d8a25f76119624350b4d65eb663459eb9603d7f1f0345/mistune-0.8.4-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/a4/8e/469e5a4a2f5855992e425f3cb33804cc07bf18d48f2db061aec61ce50270/more_itertools-10.8.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/57/b6/eff0305961a1d9447ec2b02f8c73c8946f22564d302a504185b730c9a761/msgspec-0.20.0-cp313-cp313-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/6f/c9/26bd4979d503d03f7a6ded851c3094a5708cb534cf0dc80b4db6672da2b0/mujoco-3.5.0-cp313-cp313-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/9e/c9/b2622292ea83fbb4ec318f5b9ab867d0a28ab43c5717bb85b0a5f6b3b0a4/networkx-3.6.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/13/3e/aef8cf8e0419b530c95e96ae93a5078e9b36c1e6613eeb1df03a80d5194e/nh3-0.3.3-cp38-abi3-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl + - pypi: https://files.pythonhosted.org/packages/88/b2/d0896bdcdc8d28a7fc5717c305f1a861c26e18c05047949fb371034d98bd/nodeenv-1.10.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/09/f0/817d03a03f93ba9c6c8993de509277d84e69f9453601915e4a69554102a1/numpy-2.4.2-cp313-cp313-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/e3/94/1843518e420fa3ed6919835845df698c7e27e183cb997394e4a670973a65/omegaconf-2.3.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b7/b9/c538f279a4e237a006a2c98387d081e9eb060d203d8ed34467cc0f0b9b53/packaging-26.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/bb/ad/ad9dc98ff24f485008aa5cdedaf1a219876f6f6c42a4626c08bc4e80b120/pillow-12.1.1-cp313-cp313-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/63/d7/97f7e3a6abb67d8080dd406fd4df842c2be0efaf712d1c899c32a075027c/platformdirs-4.9.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/54/20/4d324d65cc6d9205fabedc306948156824eb9f0ee1633355a8f7ec5c66bf/pluggy-1.6.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/5d/19/fd3ef348460c80af7bb4669ea7926651d1f95c23ff2df18b9d24bab4f3fa/pre_commit-4.5.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/47/10/2cbe4c6f0fb83d2de37249567373d64327a5e4d8db72f486db42875b08f6/pyarrow-23.0.1-cp313-cp313-macosx_12_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/4f/e4/4f2d41881fae547f06ffa4c9748fa8ed13c4db5c830ff268b84175546b3c/pybind11_stubgen-2.5.5-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/07/86/f1f61b7a0701f9d1299e5293d083318019f91021a4d449f94d59dbe024e4/pycollada-0.9.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/0c/c3/44f3fbbfa403ea2a7c779186dc20772604442dde72947e7d01069cbe98e3/pycparser-3.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/af/43/700932c4f0638c3421177144a2e86448c0d75dbaee2c7936bda3f9fd0878/pyelftools-0.32-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c7/21/705964c7812476f378728bdf590ca4b771ec72385c533964653c68e86bdc/pygments-2.19.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/de/e4/1ba6f44e491c4eece978685230dde56b14d51a0365bc1b774ddaa94d14cd/pyopengl-3.1.10-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/bd/24/12818598c362d7f300f18e74db45963dbcb85150324092410c8b49405e42/pyproject_hooks-1.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/0c/82/a2c93e32800940d9573fb28c346772a14778b84ba7524e691b324620ab89/pyright-1.1.408-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/3b/ab/b3226f0bd7cdcf710fbede2b3548584366da3b19b5021e74f5bde2a8fa3f/pytest-9.0.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ee/49/1377b49de7d0c1ce41292161ea0f721913fa8722c19fb9c1e3aa0367eecb/pytest_cov-7.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/fa/b6/3127540ecdf1464a00e5a01ee60a1b09175f6913f0644ac748494d9c4b21/pytest_timeout-2.4.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ca/31/d4e37e9e550c2b92a9cbc2e4d0b7420a27224968580b5a447f420847c975/pytest_xdist-3.8.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ec/57/56b9bcc3c9c6a792fcbaf139543cee77261f3651ca9da0c93f5c1221264b/python_dateutil-2.9.0.post0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c2/3c/2005227cb951df502412de2fa781f800663cccbef8d90ec6f1b371ac2c0d/python_discovery-1.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b1/16/95309993f1d3748cd644e02e38b75d50cbc0d9561d21f390a76242ce073f/pyyaml-6.0.3-cp313-cp313-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/e1/67/921ec3024056483db83953ae8e48079ad62b92db7880013ca77632921dd0/readme_renderer-44.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/2c/58/ca301544e1fa93ed4f80d724bf5b194f6e4b945841c5bfd555878eea9fcb/referencing-0.37.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/1e/db/4254e3eabe8020b458f1a747140d32277ec7a271daf1d235b70dc0b4e6e3/requests-2.32.5-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/3f/51/d4db610ef29373b879047326cbf6fa98b6c1969d6f6dc423279de2b1be2c/requests_toolbelt-1.0.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ff/9a/9afaade874b2fa6c752c36f1548f718b5b83af81ed9b76628329dab81c1b/rfc3986-2.0.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/14/25/b208c5683343959b670dc001595f2f3737e051da617f66c31f7c4fa93abc/rich-14.3.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/16/80/579e75e0be0439d11e479732e4c194a9c6e6d152670dae561b9525015425/robot_descriptions-1.22.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/04/54/6f679c435d28e0a568d8e8a7c0a93a09010818634c3c3907fc98d8983770/roman_numerals-4.1.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/fd/32/55fb50ae104061dbc564ef15cc43c013dc4a9f4527a1f4d99baddf56fe5f/rpds_py-0.30.0-cp313-cp313-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/f3/cf/2710b6fd6b07ea0aef317b29f335790ba6adf06a28ac236078ed9bd8a91d/rtree-1.4.1-py3-none-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/ab/10/12586735d0ff42526ad78c049bf51d7428618c8b5c467e72508c694119df/ruff-0.15.7-py3-none-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/b2/9a/9406aec58268d437636069419e6977af953d1e246df941d42d3720b7277b/scipy-1.17.0-cp313-cp313-macosx_12_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/6d/ab/0bee5a830d209adcd3a01f2d4b70e587cdd9fd7380d5198c064091005af8/shapely-2.1.2-cp313-cp313-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/b7/ce/149a00dd41f10bc29e5921b496af8b574d8413afcd5e30dfa0ed46c2cc5e/six-1.17.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/04/be/d09147ad1ec7934636ad912901c5fd7667e1c858e19d355237db0d0cd5e4/smmap-5.0.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c8/78/3565d011c61f5a43488987ee32b6f3f656e7f107ac2782dd57bdd7d91d9a/snowballstemmer-3.0.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/46/2c/1462b1d0a634697ae9e55b3cecdcb64788e8b7d63f54d923fcd0bb140aed/soupsieve-2.8.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/73/f7/b1884cb3188ab181fc81fa00c266699dab600f927a964df02ec3d5d1916a/sphinx-9.1.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/2f/3a/8923a543fa2422d32be4c5311f488e4f275acde263c811e4d5d22bb544cb/sphinx_autoapi-3.8.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/3c/dd/018ce05c532a22007ac58d4f45232514cd9d6dd0ee1dc374e309db830983/sphinx_basic_ng-1.0.0b2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/38/5e/49c1330add8c48ef52e50c82d7d847e32b7f786d5ddc1cafcd36ac63f1e3/sphinxcontrib_ansi_rai-0.7.0.dev20250623-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/5d/85/9ebeae2f76e9e77b952f4b274c27238156eae7979c5421fba91a28f4970d/sphinxcontrib_applehelp-2.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/35/7a/987e583882f985fe4d7323774889ec58049171828b58c2217e7f79cdf44e/sphinxcontrib_devhelp-2.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/0a/7b/18a8c0bcec9182c05a0b3ec2a776bba4ead82750a55ff798e8d406dae604/sphinxcontrib_htmlhelp-2.1.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c2/42/4c8646762ee83602e3fb3fbe774c2fac12f317deb0b5dbeeedd2d3ba4b77/sphinxcontrib_jsmath-1.0.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/84/04/53406477f01fa5bdcb1344fac421c46b6dce112d980c58237825ddb262a2/sphinxcontrib_programoutput_rai-0.18.dev0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/27/83/859ecdd180cacc13b1f7e857abf8582a64552ea7a061057a6c716e790fce/sphinxcontrib_qthelp-2.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/52/a7/d2782e4e3f77c8450f727ba74a8f12756d5ba823d81b941f1b04da9d033a/sphinxcontrib_serializinghtml-2.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/3a/83/4f5b250220e1a5acd31345a5ec1c95a7769725d0d8135276f399f44062f8/svg_path-7.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/16/e1/3079a9ff9b8e11b846c6ac5c8b5bfb7ff225eee721825310c91b3b50304f/tqdm-4.67.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/3c/b9/da09903ea53b677a58ba770112de6fe8b2acb8b4cd9bffae4ff6cfe7c072/trimesh-4.11.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/3a/7a/882d99539b19b1490cac5d77c67338d126e4122c8276bf640e411650c830/twine-6.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/91/88/b55b3117287a8540b76dbdd87733808d4d01c8067a3b339408c250bb3600/typeguard-4.5.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/18/67/36e9267722cc04a6b9f15c7f3441c2363321a3ea07da7ae0c0707beb2a9c/typing_extensions-4.15.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/a7/f9/56b0cb8c5c287c7eec02735cce74a4c25cc56d6817bab7edde6f32b024a3/tyro-1.0.6-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/39/08/aaaad47bc4e9dc8c725e68f9d04865dbcb2052843ff09c97b08904852d84/urllib3-2.6.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/63/91/c4ddf7e55e05394967615050cc364a999157a44c008d0e1e9db2ed49a11c/uv-0.10.4-py3-none-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/3b/9e/42adb642a12915acc9cb2bfab21710a6aabf045c26967ba0ff0e08a872d0/vhacdx-0.0.10-cp313-cp313-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/c6/59/7d02447a55b2e55755011a647479041bc92a82e143f96a8195cb33bd0a1c/virtualenv-21.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b9/c4/819f000b3d64f654a054a8b24bf8d0c5e799636393135784d0886d8c808e/viser-1.0.21-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ff/0b/33cef55ff24f2d92924923c99926dcce78e7bd922d649467f0eda8368923/websockets-15.0.1-cp313-cp313-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/87/22/b76d483683216dde3d67cba61fb2444be8d5be289bf628c13fc0fd90e5f9/wheel-0.46.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/31/a8/3fbce1cd96534a95e35d5120637bf29b0d7f5d8fa2f6374e31b4156dd419/xxhash-3.6.0-cp313-cp313-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/c8/60/4ea0d6df0b497d51bf2ef87eaab0eb26f8bc3b3313c012da5df3383cced9/yourdfpy-0.0.60-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/2e/54/647ade08bf0db230bfea292f893923872fd20be6ac6f53b2b936ba839d75/zipp-3.23.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/3f/06/9ae96a3e5dcfd119377ba33d4c42a7d89da1efabd5cb3e366b156c45ff4d/zstandard-0.25.0-cp313-cp313-macosx_11_0_arm64.whl + - pypi: ./ + win-64: + - conda: https://conda.anaconda.org/conda-forge/win-64/bzip2-1.0.8-h0ad9c76_9.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.1.4-h4c7d964_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/cmake-4.2.3-hdcbee5b_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/eigen-3.4.0-h477610d_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/krb5-1.22.2-h0ea6238_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libcurl-8.18.0-h8206538_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libexpat-2.7.4-hac47afa_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libffi-3.5.2-h3d046cb_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/liblzma-5.8.2-hfd05255_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libmpdec-4.0.0-hfd05255_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libsqlite-3.51.2-hf5d6505_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libssh2-1.11.1-h9aa295b_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libuv-1.51.0-hfd05255_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libzlib-1.3.1-h2466b09_2.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/onnxruntime-cpp-1.19.2-h50ebc8d_0_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/openssl-3.6.1-hf411b9b_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pybind11-3.0.2-pyh7a1b43c_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pybind11-global-3.0.2-pyh5e4992e_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/python-3.13.12-h09917c8_100_cp313.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.13-8_cp313.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/tk-8.6.13-h6ed50ae_3.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/ucrt-10.0.26100.0-h57928b3_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/vc-14.3-h41ae7f8_34.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/vc14_runtime-14.44.35208-h818238b_34.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/vcomp14-14.44.35208-h818238b_34.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/zstd-1.5.7-h534d264_6.conda + - pypi: https://files.pythonhosted.org/packages/18/a6/907a406bb7d359e6a63f99c313846d9eec4f7e6f7437809e03aa00fa3074/absl_py-2.4.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/8d/3f/95338030883d8c8b91223b4e21744b04d11b161a3ef117295d8241f50ab4/accessible_pygments-0.0.5-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/7e/b3/6b4067be973ae96ba0d615946e314c5ae35f9f993eca561b356540bb0c2b/alabaster-1.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/3e/38/7859ff46355f76f8d19459005ca000b6e7012f2f1ca597746cbcd1fbfe5e/antlr4-python3-runtime-4.9.3.tar.gz + - pypi: https://files.pythonhosted.org/packages/38/0e/27be9fdef66e72d64c0cdc3cc2823101b80585f8119b5c112c2e8f5f7dab/anyio-4.12.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/32/53/bac4724684064bfee95ece0bb6caf3887e509006845e25388a12cac26d0c/astroid-4.1.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/3a/2a/7cc015f5b9f5db42b7d48157e23356022889fc354a2813c15934b7cb5c0e/attrs-25.4.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b0/c2/bb8ba1cec816fa356e19da83c59bfd4ac34dba1ae41eb7622c18f4b1d48d/auditwheel-6.6.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/77/f5/21d2de20e8b8b0408f0681956ca2c69f1320a3848ac50e6e7f39c6159675/babel-2.18.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/1a/39/47f9197bdd44df24d67ac8893641e16f386c984a0619ef2ee4c51fbbc019/beautifulsoup4-4.14.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c5/0d/84a4380f930db0010168e0aa7b7a8fed9ba1835a8fbb1472bc6d0201d529/build-1.4.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e6/ad/3cc14f097111b4de0040c83a525973216457bbeeb63739ef1ed275c1c021/certifi-2026.1.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/db/3c/33bac158f8ab7f89b2e59426d5fe2e4f63f7ed25df84c036890172b412b5/cfgv-3.5.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c4/26/b9924fa27db384bdcd97ab83b4f0a8058d96ad9626ead570674d5e737d90/charset_normalizer-3.4.4-cp313-cp313-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/6d/c1/e419ef3723a074172b68aaa89c9f3de486ed4c2399e2dbd8113a4fdcaf9e/colorlog-6.10.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/66/40/7732d648ab9d069a46e686043241f01206348e2bbf128daea85be4d6414b/coverage-7.13.5-cp313-cp313-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/94/35/386550fd60316d1e37eccdda609b074113298f23cef5bddb2049823fe666/dacite-1.9.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/33/6b/e0547afaf41bf2c42e52430072fa5658766e3d65bd4b03a563d1b6336f57/distlib-0.4.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/55/e2/2537ebcff11c1ee1ff17d8d0b6f4db75873e3b0fb32c2d4a2ee31ecb310a/docstring_parser-0.17.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/02/10/5da547df7a391dcde17f59520a231527b8571e6f46fc8efb02ccb370ab12/docutils-0.22.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/1c/d4/e8134ce7d977fd87f507b6951b53df3aa7ab91122e7d487707352336703b/dora_rs-0.4.1-cp37-abi3-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/93/a7/c53764b09b7a6e6a21d46df656513391d8429b729fdde26372d961938297/dora_rs_cli-0.4.1-cp37-abi3-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/78/62/0ffc083b1d5f7c95eb03b260d2622dfacb70d1153011d216260b71c8e7d9/dora_utils-0.1.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e7/98/87b5946356095738cb90a6df7b35ff69ac5750f6e783d5fbcc5cb3b6cbd7/etils-1.13.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ab/84/02fc1827e8cdded4aa65baef11296a9bbe595c474f0d6d758af082d849fd/execnet-2.1.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/a4/a5/842ae8f0c08b61d6484b52f99a03510a3a72d23141942d216ebe81fefbce/filelock-3.25.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e6/ab/fb21f4c939bb440104cc2b396d3be1d9b7a9fd3c6c2a53d98c45b3d7c954/fsspec-2026.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/f4/b2/50e9b292b5cac13e9e81272c7171301abc753a60460d21505b606e15cf21/furo-2025.12.19-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/a0/61/5c78b91c3143ed5c14207f463aecfc8f9dbb5092fb2869baf37c273b2705/gitdb-4.0.12-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/6a/09/e21df6aef1e1ffc0c816f0522ddc3f6dcded766c3261813131c78a704470/gitpython-3.1.46-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/bd/e1/6d6816b296a529ac9b897ad228b1e084eb1f92319e96371880eebdc874a6/glfw-2.10.0-py2.py27.py3.py30.py31.py32.py33.py34.py35.py36.py37.py38.py39.py310.py311.py312.py313.py314-none-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/04/4b/29cac41a4d98d144bf5f6d33995617b185d14b22401f75ca86f384e87ff1/h11-0.16.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e5/ea/fbb258a98863f99befb10ed727152b4ae659f322e1d9c0576f8a62754e81/h5py-3.15.1-cp313-cp313-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/7e/f5/f66802a942d491edb555dd61e3a9961140fd64c90bce1eafd741609d334d/httpcore-1.0.9-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/2a/39/e50c7c3a983047577ee07d2a9e53faf5a69493943ec3f6a384bdc792deb2/httpx-0.28.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c6/50/e0edd38dcd63fb26a8547f13d28f7a008bc4a3fd4eb4ff030673f22ad41a/hydra_core-1.3.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/42/77/de194443bf38daed9452139e960c632b0ef9f9a5dd9ce605fdf18ca9f1b1/id-1.6.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/46/33/92ef41c6fad0233e41d3d84ba8e8ad18d1780f1e5d99b3c683e6d7f98b63/identify-2.6.18-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/0e/61/66938bbb5fc52dbdf84594873d5b51fb1f7c7794e9c0f5bd885f30bc507b/idna-3.11-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/fb/fe/301e0936b79bcab4cacc7548bf2853fc28dced0a578bab1f7ef53c9aa75b/imageio-2.37.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/5f/53/fb7122b71361a0d121b669dcf3d31244ef75badbbb724af388948de543e2/imagesize-2.0.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/a4/ed/1f1afb2e9e7f38a545d628f864d562a5ae64fe6f7a10e28ffb9b185b4e89/importlib_resources-6.5.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/cb/b1/3846dd7f199d53cb17f49cba7e651e9ce294d8497c8c150530ed11865bb8/iniconfig-2.3.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/7f/66/b15ce62552d84bbfcec9a4873ab79d993a1dd4edb922cbfccae192bd5b5f/jaraco.classes-3.4.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/f4/49/c152890d49102b280ecf86ba5f80a8c111c3a155dafa3bd24aeb64fde9e1/jaraco_context-6.1.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/fd/c4/813bb09f0985cb21e959f21f2464169eca882656849adf727ac7bb7e1767/jaraco_functools-4.4.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/62/a1/3d680cbfd5f4b8f15abc1d571870c5fc3e594bb582bc3b64ea099db13e56/jinja2-3.1.6-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/69/90/f63fb5873511e014207a475e2bb4e8b2e570d655b00ac19a9a0ca0a385ee/jsonschema-4.26.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/41/45/1a4ed80516f02155c51f51e8cedb3c1902296743db0bbc66608a0db2814f/jsonschema_specifications-2025.9.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/81/db/e655086b7f3a705df045bf0933bdd9c2f79bb3c97bfef1384598bb79a217/keyring-25.7.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/fe/0a/4643ccc6bb8b143e9f9640aa54e38255f9d3b45feb2cbe7ae2ca47e8782e/lxml-6.0.2-cp313-cp313-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/a9/50/5b1d70de548fb1e11e15ea9ebec0480365462d202f98b66ad7e154284327/m2r2-0.3.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/f9/a7/deabeee1aa6bda61f2cc937ec4daca3126beb9327026b49a3dee5d09b4b5/manifold3d-3.3.2-cp313-cp313-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/76/75/a79a6020c46d4f07731e88ec5cc9324f6b43343aba835def1dc0bf59fecf/mapbox_earcut-2.0.0-cp313-cp313-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/94/54/e7d793b573f298e1c9013b8c4dade17d481164aa517d1d7148619c2cedbf/markdown_it_py-4.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/05/73/c4abe620b841b6b791f2edc248f556900667a5a1cf023a6646967ae98335/markupsafe-3.0.3-cp313-cp313-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/09/ec/4b43dae793655b7d8a25f76119624350b4d65eb663459eb9603d7f1f0345/mistune-0.8.4-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/a4/8e/469e5a4a2f5855992e425f3cb33804cc07bf18d48f2db061aec61ce50270/more_itertools-10.8.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/f1/25/5e8080fe0117f799b1b68008dc29a65862077296b92550632de015128579/msgspec-0.20.0-cp313-cp313-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/ab/53/54a0815d43c83e1074cfc7da98a3dea88d7dda48c03edfd225a387a3767b/mujoco-3.5.0-cp313-cp313-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/9e/c9/b2622292ea83fbb4ec318f5b9ab867d0a28ab43c5717bb85b0a5f6b3b0a4/networkx-3.6.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/73/88/1ce287ef8649dc51365b5094bd3713b76454838140a32ab4f8349973883c/nh3-0.3.3-cp38-abi3-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/88/b2/d0896bdcdc8d28a7fc5717c305f1a861c26e18c05047949fb371034d98bd/nodeenv-1.10.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/43/bc/6352f343522fcb2c04dbaf94cb30cca6fd32c1a750c06ad6231b4293708c/numpy-2.4.2-cp313-cp313-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/e3/94/1843518e420fa3ed6919835845df698c7e27e183cb997394e4a670973a65/omegaconf-2.3.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b7/b9/c538f279a4e237a006a2c98387d081e9eb060d203d8ed34467cc0f0b9b53/packaging-26.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/3f/eb/b0834ad8b583d7d9d42b80becff092082a1c3c156bb582590fcc973f1c7c/pillow-12.1.1-cp313-cp313-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/63/d7/97f7e3a6abb67d8080dd406fd4df842c2be0efaf712d1c899c32a075027c/platformdirs-4.9.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/54/20/4d324d65cc6d9205fabedc306948156824eb9f0ee1633355a8f7ec5c66bf/pluggy-1.6.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/5d/19/fd3ef348460c80af7bb4669ea7926651d1f95c23ff2df18b9d24bab4f3fa/pre_commit-4.5.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d5/09/a532297c9591a727d67760e2e756b83905dd89adb365a7f6e9c72578bcc1/pyarrow-23.0.1-cp313-cp313-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/4f/e4/4f2d41881fae547f06ffa4c9748fa8ed13c4db5c830ff268b84175546b3c/pybind11_stubgen-2.5.5-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/07/86/f1f61b7a0701f9d1299e5293d083318019f91021a4d449f94d59dbe024e4/pycollada-0.9.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/0c/c3/44f3fbbfa403ea2a7c779186dc20772604442dde72947e7d01069cbe98e3/pycparser-3.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/af/43/700932c4f0638c3421177144a2e86448c0d75dbaee2c7936bda3f9fd0878/pyelftools-0.32-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c7/21/705964c7812476f378728bdf590ca4b771ec72385c533964653c68e86bdc/pygments-2.19.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/de/e4/1ba6f44e491c4eece978685230dde56b14d51a0365bc1b774ddaa94d14cd/pyopengl-3.1.10-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/bd/24/12818598c362d7f300f18e74db45963dbcb85150324092410c8b49405e42/pyproject_hooks-1.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/0c/82/a2c93e32800940d9573fb28c346772a14778b84ba7524e691b324620ab89/pyright-1.1.408-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/3b/ab/b3226f0bd7cdcf710fbede2b3548584366da3b19b5021e74f5bde2a8fa3f/pytest-9.0.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ee/49/1377b49de7d0c1ce41292161ea0f721913fa8722c19fb9c1e3aa0367eecb/pytest_cov-7.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/fa/b6/3127540ecdf1464a00e5a01ee60a1b09175f6913f0644ac748494d9c4b21/pytest_timeout-2.4.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ca/31/d4e37e9e550c2b92a9cbc2e4d0b7420a27224968580b5a447f420847c975/pytest_xdist-3.8.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ec/57/56b9bcc3c9c6a792fcbaf139543cee77261f3651ca9da0c93f5c1221264b/python_dateutil-2.9.0.post0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c2/3c/2005227cb951df502412de2fa781f800663cccbef8d90ec6f1b371ac2c0d/python_discovery-1.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/de/3d/8161f7711c017e01ac9f008dfddd9410dff3674334c233bde66e7ba65bbf/pywin32_ctypes-0.2.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/97/c9/39d5b874e8b28845e4ec2202b5da735d0199dbe5b8fb85f91398814a9a46/pyyaml-6.0.3-cp313-cp313-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/e1/67/921ec3024056483db83953ae8e48079ad62b92db7880013ca77632921dd0/readme_renderer-44.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/2c/58/ca301544e1fa93ed4f80d724bf5b194f6e4b945841c5bfd555878eea9fcb/referencing-0.37.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/1e/db/4254e3eabe8020b458f1a747140d32277ec7a271daf1d235b70dc0b4e6e3/requests-2.32.5-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/3f/51/d4db610ef29373b879047326cbf6fa98b6c1969d6f6dc423279de2b1be2c/requests_toolbelt-1.0.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ff/9a/9afaade874b2fa6c752c36f1548f718b5b83af81ed9b76628329dab81c1b/rfc3986-2.0.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/14/25/b208c5683343959b670dc001595f2f3737e051da617f66c31f7c4fa93abc/rich-14.3.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/16/80/579e75e0be0439d11e479732e4c194a9c6e6d152670dae561b9525015425/robot_descriptions-1.22.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/04/54/6f679c435d28e0a568d8e8a7c0a93a09010818634c3c3907fc98d8983770/roman_numerals-4.1.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/f2/e1/485132437d20aa4d3e1d8b3fb5a5e65aa8139f1e097080c2a8443201742c/rpds_py-0.30.0-cp313-cp313-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/74/25/5282c8270bfcd620d3e73beb35b40ac4ab00f0a898d98ebeb41ef0989ec8/rtree-1.4.1-py3-none-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/2b/e9/346d4d3fffc6871125e877dae8d9a1966b254fbd92a50f8561078b88b099/ruff-0.15.7-py3-none-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/b9/b6/8ac583d6da79e7b9e520579f03007cb006f063642afd6b2eeb16b890bf93/scipy-1.17.0-cp313-cp313-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/41/47/3647fe7ad990af60ad98b889657a976042c9988c2807cf322a9d6685f462/shapely-2.1.2-cp313-cp313-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/b7/ce/149a00dd41f10bc29e5921b496af8b574d8413afcd5e30dfa0ed46c2cc5e/six-1.17.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/04/be/d09147ad1ec7934636ad912901c5fd7667e1c858e19d355237db0d0cd5e4/smmap-5.0.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c8/78/3565d011c61f5a43488987ee32b6f3f656e7f107ac2782dd57bdd7d91d9a/snowballstemmer-3.0.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/46/2c/1462b1d0a634697ae9e55b3cecdcb64788e8b7d63f54d923fcd0bb140aed/soupsieve-2.8.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/73/f7/b1884cb3188ab181fc81fa00c266699dab600f927a964df02ec3d5d1916a/sphinx-9.1.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/2f/3a/8923a543fa2422d32be4c5311f488e4f275acde263c811e4d5d22bb544cb/sphinx_autoapi-3.8.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/3c/dd/018ce05c532a22007ac58d4f45232514cd9d6dd0ee1dc374e309db830983/sphinx_basic_ng-1.0.0b2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/38/5e/49c1330add8c48ef52e50c82d7d847e32b7f786d5ddc1cafcd36ac63f1e3/sphinxcontrib_ansi_rai-0.7.0.dev20250623-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/5d/85/9ebeae2f76e9e77b952f4b274c27238156eae7979c5421fba91a28f4970d/sphinxcontrib_applehelp-2.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/35/7a/987e583882f985fe4d7323774889ec58049171828b58c2217e7f79cdf44e/sphinxcontrib_devhelp-2.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/0a/7b/18a8c0bcec9182c05a0b3ec2a776bba4ead82750a55ff798e8d406dae604/sphinxcontrib_htmlhelp-2.1.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c2/42/4c8646762ee83602e3fb3fbe774c2fac12f317deb0b5dbeeedd2d3ba4b77/sphinxcontrib_jsmath-1.0.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/84/04/53406477f01fa5bdcb1344fac421c46b6dce112d980c58237825ddb262a2/sphinxcontrib_programoutput_rai-0.18.dev0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/27/83/859ecdd180cacc13b1f7e857abf8582a64552ea7a061057a6c716e790fce/sphinxcontrib_qthelp-2.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/52/a7/d2782e4e3f77c8450f727ba74a8f12756d5ba823d81b941f1b04da9d033a/sphinxcontrib_serializinghtml-2.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/3a/83/4f5b250220e1a5acd31345a5ec1c95a7769725d0d8135276f399f44062f8/svg_path-7.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/16/e1/3079a9ff9b8e11b846c6ac5c8b5bfb7ff225eee721825310c91b3b50304f/tqdm-4.67.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/3c/b9/da09903ea53b677a58ba770112de6fe8b2acb8b4cd9bffae4ff6cfe7c072/trimesh-4.11.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/3a/7a/882d99539b19b1490cac5d77c67338d126e4122c8276bf640e411650c830/twine-6.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/91/88/b55b3117287a8540b76dbdd87733808d4d01c8067a3b339408c250bb3600/typeguard-4.5.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/18/67/36e9267722cc04a6b9f15c7f3441c2363321a3ea07da7ae0c0707beb2a9c/typing_extensions-4.15.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/a7/f9/56b0cb8c5c287c7eec02735cce74a4c25cc56d6817bab7edde6f32b024a3/tyro-1.0.6-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/39/08/aaaad47bc4e9dc8c725e68f9d04865dbcb2052843ff09c97b08904852d84/urllib3-2.6.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/31/dd/1900452678d46f6a649ab8167bededb02500b0561fc9f69e1f52607895c7/uv-0.10.4-py3-none-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/32/25/f0e6806824f88d47ab8bc1c9bf6f11634fd7b382d635d0696825f3b5672f/vhacdx-0.0.10-cp313-cp313-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/c6/59/7d02447a55b2e55755011a647479041bc92a82e143f96a8195cb33bd0a1c/virtualenv-21.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b9/c4/819f000b3d64f654a054a8b24bf8d0c5e799636393135784d0886d8c808e/viser-1.0.21-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/1b/6c/c65773d6cab416a64d191d6ee8a8b1c68a09970ea6909d16965d26bfed1e/websockets-15.0.1-cp313-cp313-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/87/22/b76d483683216dde3d67cba61fb2444be8d5be289bf628c13fc0fd90e5f9/wheel-0.46.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/86/15/9bc32671e9a38b413a76d24722a2bf8784a132c043063a8f5152d390b0f9/xxhash-3.6.0-cp313-cp313-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/c8/60/4ea0d6df0b497d51bf2ef87eaab0eb26f8bc3b3313c012da5df3383cced9/yourdfpy-0.0.60-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/2e/54/647ade08bf0db230bfea292f893923872fd20be6ac6f53b2b936ba839d75/zipp-3.23.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d9/82/b9c06c870f3bd8767c201f1edbdf9e8dc34be5b0fbc5682c4f80fe948475/zstandard-0.25.0-cp313-cp313-win_amd64.whl + - pypi: ./ docs: channels: - url: https://conda.anaconda.org/conda-forge/ @@ -975,7 +1518,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/09/ec/4b43dae793655b7d8a25f76119624350b4d65eb663459eb9603d7f1f0345/mistune-0.8.4-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/28/83/36557b04cfdc317ed8a525c4993b23e43a8fbcddaddd78619112ca07138c/msgspec-0.20.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/df/72/0c47350ec39611ff8defe9e8af10c23c9ad0235974f1999a523fcd1c3e68/mujoco-3.4.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/16/47/93c7ac3a9630b49c55d76b0d02aa565543e2f62cecd885f8f574f5c745e7/mujoco-3.5.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/9e/c9/b2622292ea83fbb4ec318f5b9ab867d0a28ab43c5717bb85b0a5f6b3b0a4/networkx-3.6.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/88/b2/d0896bdcdc8d28a7fc5717c305f1a861c26e18c05047949fb371034d98bd/nodeenv-1.10.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/04/dc/46066ce18d01645541f0186877377b9371b8fa8017fa8262002b4ef22612/numpy-2.4.2-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl @@ -1107,7 +1650,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/09/ec/4b43dae793655b7d8a25f76119624350b4d65eb663459eb9603d7f1f0345/mistune-0.8.4-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/57/b6/eff0305961a1d9447ec2b02f8c73c8946f22564d302a504185b730c9a761/msgspec-0.20.0-cp313-cp313-macosx_11_0_arm64.whl - - pypi: https://files.pythonhosted.org/packages/e8/51/c3e5c3b199b1b74c85f0cb02dc0ef80363bf91ea245ee8a932804768d5e8/mujoco-3.4.0-cp313-cp313-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/6f/c9/26bd4979d503d03f7a6ded851c3094a5708cb534cf0dc80b4db6672da2b0/mujoco-3.5.0-cp313-cp313-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/9e/c9/b2622292ea83fbb4ec318f5b9ab867d0a28ab43c5717bb85b0a5f6b3b0a4/networkx-3.6.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/88/b2/d0896bdcdc8d28a7fc5717c305f1a861c26e18c05047949fb371034d98bd/nodeenv-1.10.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/09/f0/817d03a03f93ba9c6c8993de509277d84e69f9453601915e4a69554102a1/numpy-2.4.2-cp313-cp313-macosx_11_0_arm64.whl @@ -1235,7 +1778,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/09/ec/4b43dae793655b7d8a25f76119624350b4d65eb663459eb9603d7f1f0345/mistune-0.8.4-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/f1/25/5e8080fe0117f799b1b68008dc29a65862077296b92550632de015128579/msgspec-0.20.0-cp313-cp313-win_amd64.whl - - pypi: https://files.pythonhosted.org/packages/dc/25/bbf8c01758d619c86bcbe58db6a7d61ca423e7c76791f323b8ea2e92c2bd/mujoco-3.4.0-cp313-cp313-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/ab/53/54a0815d43c83e1074cfc7da98a3dea88d7dda48c03edfd225a387a3767b/mujoco-3.5.0-cp313-cp313-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/9e/c9/b2622292ea83fbb4ec318f5b9ab867d0a28ab43c5717bb85b0a5f6b3b0a4/networkx-3.6.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/88/b2/d0896bdcdc8d28a7fc5717c305f1a861c26e18c05047949fb371034d98bd/nodeenv-1.10.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/43/bc/6352f343522fcb2c04dbaf94cb30cca6fd32c1a750c06ad6231b4293708c/numpy-2.4.2-cp313-cp313-win_amd64.whl @@ -1387,8 +1930,8 @@ environments: - pypi: https://files.pythonhosted.org/packages/eb/33/40cd74219417e78b97c47802037cf2d87b91973e18bb968a7da48a96ea44/ml_dtypes-0.5.4-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/43/e3/7d92a15f894aa0c9c4b49b8ee9ac9850d6e63b03c9c32c0367a13ae62209/mpmath-1.3.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/28/83/36557b04cfdc317ed8a525c4993b23e43a8fbcddaddd78619112ca07138c/msgspec-0.20.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/df/72/0c47350ec39611ff8defe9e8af10c23c9ad0235974f1999a523fcd1c3e68/mujoco-3.4.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/81/ef/6affa8e9ba6ad336d6132fe7d68c09c0243dd977e3fc0abd739902512d55/mujoco_warp-0.0.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/16/47/93c7ac3a9630b49c55d76b0d02aa565543e2f62cecd885f8f574f5c745e7/mujoco-3.5.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/4b/2e/90f05ad3818fd4b826f712c9f89a3df3aa3ef204efeaa71f8ddc2ca5fd3b/mujoco_warp-3.5.0.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/9e/c9/b2622292ea83fbb4ec318f5b9ab867d0a28ab43c5717bb85b0a5f6b3b0a4/networkx-3.6.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/88/b2/d0896bdcdc8d28a7fc5717c305f1a861c26e18c05047949fb371034d98bd/nodeenv-1.10.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/04/dc/46066ce18d01645541f0186877377b9371b8fa8017fa8262002b4ef22612/numpy-2.4.2-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl @@ -1499,7 +2042,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/94/54/e7d793b573f298e1c9013b8c4dade17d481164aa517d1d7148619c2cedbf/markdown_it_py-4.0.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/57/b6/eff0305961a1d9447ec2b02f8c73c8946f22564d302a504185b730c9a761/msgspec-0.20.0-cp313-cp313-macosx_11_0_arm64.whl - - pypi: https://files.pythonhosted.org/packages/e8/51/c3e5c3b199b1b74c85f0cb02dc0ef80363bf91ea245ee8a932804768d5e8/mujoco-3.4.0-cp313-cp313-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/6f/c9/26bd4979d503d03f7a6ded851c3094a5708cb534cf0dc80b4db6672da2b0/mujoco-3.5.0-cp313-cp313-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/9e/c9/b2622292ea83fbb4ec318f5b9ab867d0a28ab43c5717bb85b0a5f6b3b0a4/networkx-3.6.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/88/b2/d0896bdcdc8d28a7fc5717c305f1a861c26e18c05047949fb371034d98bd/nodeenv-1.10.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/09/f0/817d03a03f93ba9c6c8993de509277d84e69f9453601915e4a69554102a1/numpy-2.4.2-cp313-cp313-macosx_11_0_arm64.whl @@ -1601,7 +2144,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/94/54/e7d793b573f298e1c9013b8c4dade17d481164aa517d1d7148619c2cedbf/markdown_it_py-4.0.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/f1/25/5e8080fe0117f799b1b68008dc29a65862077296b92550632de015128579/msgspec-0.20.0-cp313-cp313-win_amd64.whl - - pypi: https://files.pythonhosted.org/packages/dc/25/bbf8c01758d619c86bcbe58db6a7d61ca423e7c76791f323b8ea2e92c2bd/mujoco-3.4.0-cp313-cp313-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/ab/53/54a0815d43c83e1074cfc7da98a3dea88d7dda48c03edfd225a387a3767b/mujoco-3.5.0-cp313-cp313-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/9e/c9/b2622292ea83fbb4ec318f5b9ab867d0a28ab43c5717bb85b0a5f6b3b0a4/networkx-3.6.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/88/b2/d0896bdcdc8d28a7fc5717c305f1a861c26e18c05047949fb371034d98bd/nodeenv-1.10.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/43/bc/6352f343522fcb2c04dbaf94cb30cca6fd32c1a750c06ad6231b4293708c/numpy-2.4.2-cp313-cp313-win_amd64.whl @@ -1769,7 +2312,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/09/ec/4b43dae793655b7d8a25f76119624350b4d65eb663459eb9603d7f1f0345/mistune-0.8.4-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a4/8e/469e5a4a2f5855992e425f3cb33804cc07bf18d48f2db061aec61ce50270/more_itertools-10.8.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/15/2a/48e41d9ef0a24b1c6e67cbd94a676799e0561bfbc163be1aaaff5ca853f5/msgspec-0.20.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/71/95/ba02262c7a7a786a64b8d77315e7e4d3c77598ff63d8cd605ba2b96ec349/mujoco-3.4.0-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/ca/d6/a5a7b615b257867b7c97db6b3ce07dec9351d5d9d5a5aca881cbb583d7a3/mujoco-3.5.0-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/b9/54/dd730b32ea14ea797530a4479b2ed46a6fb250f682a9cfb997e968bf0261/networkx-3.4.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/6f/84/c0dc75c7fb596135f999e59a410d9f45bdabb989f1cb911f0016d22b747b/nh3-0.3.3-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - pypi: https://files.pythonhosted.org/packages/88/b2/d0896bdcdc8d28a7fc5717c305f1a861c26e18c05047949fb371034d98bd/nodeenv-1.10.0-py2.py3-none-any.whl @@ -1791,6 +2334,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/0c/82/a2c93e32800940d9573fb28c346772a14778b84ba7524e691b324620ab89/pyright-1.1.408-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/3b/ab/b3226f0bd7cdcf710fbede2b3548584366da3b19b5021e74f5bde2a8fa3f/pytest-9.0.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ee/49/1377b49de7d0c1ce41292161ea0f721913fa8722c19fb9c1e3aa0367eecb/pytest_cov-7.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/fa/b6/3127540ecdf1464a00e5a01ee60a1b09175f6913f0644ac748494d9c4b21/pytest_timeout-2.4.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ca/31/d4e37e9e550c2b92a9cbc2e4d0b7420a27224968580b5a447f420847c975/pytest_xdist-3.8.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ec/57/56b9bcc3c9c6a792fcbaf139543cee77261f3651ca9da0c93f5c1221264b/python_dateutil-2.9.0.post0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/7a/1e/7acc4f0e74c4b3d9531e24739e0ab832a5edf40e64fbae1a9c01941cabd7/pyyaml-6.0.3-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl @@ -1936,7 +2480,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/09/ec/4b43dae793655b7d8a25f76119624350b4d65eb663459eb9603d7f1f0345/mistune-0.8.4-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a4/8e/469e5a4a2f5855992e425f3cb33804cc07bf18d48f2db061aec61ce50270/more_itertools-10.8.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/50/88/a795647672f547c983eff0823b82aaa35db922c767e1b3693e2dcf96678d/msgspec-0.20.0-cp310-cp310-macosx_11_0_arm64.whl - - pypi: https://files.pythonhosted.org/packages/03/dd/2875a57cdb423d98bdcb359f34af5eb8a24e48a903f4bb7110d75e478dac/mujoco-3.4.0-cp310-cp310-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/8d/6b/fdac8ed97086e12ac930fb44e419eda1626e339010df73678cb1f22527d7/mujoco-3.5.0-cp310-cp310-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/b9/54/dd730b32ea14ea797530a4479b2ed46a6fb250f682a9cfb997e968bf0261/networkx-3.4.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/13/3e/aef8cf8e0419b530c95e96ae93a5078e9b36c1e6613eeb1df03a80d5194e/nh3-0.3.3-cp38-abi3-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl - pypi: https://files.pythonhosted.org/packages/88/b2/d0896bdcdc8d28a7fc5717c305f1a861c26e18c05047949fb371034d98bd/nodeenv-1.10.0-py2.py3-none-any.whl @@ -1958,6 +2502,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/0c/82/a2c93e32800940d9573fb28c346772a14778b84ba7524e691b324620ab89/pyright-1.1.408-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/3b/ab/b3226f0bd7cdcf710fbede2b3548584366da3b19b5021e74f5bde2a8fa3f/pytest-9.0.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ee/49/1377b49de7d0c1ce41292161ea0f721913fa8722c19fb9c1e3aa0367eecb/pytest_cov-7.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/fa/b6/3127540ecdf1464a00e5a01ee60a1b09175f6913f0644ac748494d9c4b21/pytest_timeout-2.4.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ca/31/d4e37e9e550c2b92a9cbc2e4d0b7420a27224968580b5a447f420847c975/pytest_xdist-3.8.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ec/57/56b9bcc3c9c6a792fcbaf139543cee77261f3651ca9da0c93f5c1221264b/python_dateutil-2.9.0.post0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/05/14/52d505b5c59ce73244f59c7a50ecf47093ce4765f116cdb98286a71eeca2/pyyaml-6.0.3-cp310-cp310-macosx_11_0_arm64.whl @@ -2098,7 +2643,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/09/ec/4b43dae793655b7d8a25f76119624350b4d65eb663459eb9603d7f1f0345/mistune-0.8.4-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a4/8e/469e5a4a2f5855992e425f3cb33804cc07bf18d48f2db061aec61ce50270/more_itertools-10.8.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/98/bd/5db3c14d675ee12842afb9b70c94c64f2c873f31198c46cbfcd7dffafab0/msgspec-0.20.0-cp310-cp310-win_amd64.whl - - pypi: https://files.pythonhosted.org/packages/22/d5/f94edc884c11b63f0d7ba9322ec4ca98bc7cad57c5c034c2e3332287d9ad/mujoco-3.4.0-cp310-cp310-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/7e/91/d82dd3c16892e1b0e27a2f537eec8aad54d91d939cb3cd37db2e8c09ecc2/mujoco-3.5.0-cp310-cp310-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/b9/54/dd730b32ea14ea797530a4479b2ed46a6fb250f682a9cfb997e968bf0261/networkx-3.4.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/73/88/1ce287ef8649dc51365b5094bd3713b76454838140a32ab4f8349973883c/nh3-0.3.3-cp38-abi3-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/88/b2/d0896bdcdc8d28a7fc5717c305f1a861c26e18c05047949fb371034d98bd/nodeenv-1.10.0-py2.py3-none-any.whl @@ -2120,6 +2665,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/0c/82/a2c93e32800940d9573fb28c346772a14778b84ba7524e691b324620ab89/pyright-1.1.408-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/3b/ab/b3226f0bd7cdcf710fbede2b3548584366da3b19b5021e74f5bde2a8fa3f/pytest-9.0.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ee/49/1377b49de7d0c1ce41292161ea0f721913fa8722c19fb9c1e3aa0367eecb/pytest_cov-7.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/fa/b6/3127540ecdf1464a00e5a01ee60a1b09175f6913f0644ac748494d9c4b21/pytest_timeout-2.4.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ca/31/d4e37e9e550c2b92a9cbc2e4d0b7420a27224968580b5a447f420847c975/pytest_xdist-3.8.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ec/57/56b9bcc3c9c6a792fcbaf139543cee77261f3651ca9da0c93f5c1221264b/python_dateutil-2.9.0.post0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/de/3d/8161f7711c017e01ac9f008dfddd9410dff3674334c233bde66e7ba65bbf/pywin32_ctypes-0.2.3-py3-none-any.whl @@ -2298,7 +2844,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/09/ec/4b43dae793655b7d8a25f76119624350b4d65eb663459eb9603d7f1f0345/mistune-0.8.4-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a4/8e/469e5a4a2f5855992e425f3cb33804cc07bf18d48f2db061aec61ce50270/more_itertools-10.8.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/6b/96/5c095b940de3aa6b43a71ec76275ac3537b21bd45c7499b5a17a429110fa/msgspec-0.20.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/c3/c1/37c07061be2b410de33624093fc06fc49ec13888252f1a6c30fcd40633bd/mujoco-3.4.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/47/14/d5bf98385354318ec2e6c466a8c7cf7fd76f8b711ed6d11d155e2baa81fb/mujoco-3.5.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/9e/c9/b2622292ea83fbb4ec318f5b9ab867d0a28ab43c5717bb85b0a5f6b3b0a4/networkx-3.6.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/6f/84/c0dc75c7fb596135f999e59a410d9f45bdabb989f1cb911f0016d22b747b/nh3-0.3.3-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - pypi: https://files.pythonhosted.org/packages/88/b2/d0896bdcdc8d28a7fc5717c305f1a861c26e18c05047949fb371034d98bd/nodeenv-1.10.0-py2.py3-none-any.whl @@ -2320,6 +2866,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/0c/82/a2c93e32800940d9573fb28c346772a14778b84ba7524e691b324620ab89/pyright-1.1.408-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/3b/ab/b3226f0bd7cdcf710fbede2b3548584366da3b19b5021e74f5bde2a8fa3f/pytest-9.0.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ee/49/1377b49de7d0c1ce41292161ea0f721913fa8722c19fb9c1e3aa0367eecb/pytest_cov-7.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/fa/b6/3127540ecdf1464a00e5a01ee60a1b09175f6913f0644ac748494d9c4b21/pytest_timeout-2.4.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ca/31/d4e37e9e550c2b92a9cbc2e4d0b7420a27224968580b5a447f420847c975/pytest_xdist-3.8.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ec/57/56b9bcc3c9c6a792fcbaf139543cee77261f3651ca9da0c93f5c1221264b/python_dateutil-2.9.0.post0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/71/60/917329f640924b18ff085ab889a11c763e0b573da888e8404ff486657602/pyyaml-6.0.3-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl @@ -2464,7 +3011,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/09/ec/4b43dae793655b7d8a25f76119624350b4d65eb663459eb9603d7f1f0345/mistune-0.8.4-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a4/8e/469e5a4a2f5855992e425f3cb33804cc07bf18d48f2db061aec61ce50270/more_itertools-10.8.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/5a/15/3c225610da9f02505d37d69a77f4a2e7daae2a125f99d638df211ba84e59/msgspec-0.20.0-cp311-cp311-macosx_11_0_arm64.whl - - pypi: https://files.pythonhosted.org/packages/09/d4/99acbb782cc2c2ab5e5dacdf48b5d2850b641e34a91715d262d14103b764/mujoco-3.4.0-cp311-cp311-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/82/02/aa6057ac4c50fb36558208005d6da19518f9a7857ef9b5fd2ed8f9262fe2/mujoco-3.5.0-cp311-cp311-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/9e/c9/b2622292ea83fbb4ec318f5b9ab867d0a28ab43c5717bb85b0a5f6b3b0a4/networkx-3.6.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/13/3e/aef8cf8e0419b530c95e96ae93a5078e9b36c1e6613eeb1df03a80d5194e/nh3-0.3.3-cp38-abi3-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl - pypi: https://files.pythonhosted.org/packages/88/b2/d0896bdcdc8d28a7fc5717c305f1a861c26e18c05047949fb371034d98bd/nodeenv-1.10.0-py2.py3-none-any.whl @@ -2486,6 +3033,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/0c/82/a2c93e32800940d9573fb28c346772a14778b84ba7524e691b324620ab89/pyright-1.1.408-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/3b/ab/b3226f0bd7cdcf710fbede2b3548584366da3b19b5021e74f5bde2a8fa3f/pytest-9.0.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ee/49/1377b49de7d0c1ce41292161ea0f721913fa8722c19fb9c1e3aa0367eecb/pytest_cov-7.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/fa/b6/3127540ecdf1464a00e5a01ee60a1b09175f6913f0644ac748494d9c4b21/pytest_timeout-2.4.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ca/31/d4e37e9e550c2b92a9cbc2e4d0b7420a27224968580b5a447f420847c975/pytest_xdist-3.8.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ec/57/56b9bcc3c9c6a792fcbaf139543cee77261f3651ca9da0c93f5c1221264b/python_dateutil-2.9.0.post0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/16/19/13de8e4377ed53079ee996e1ab0a9c33ec2faf808a4647b7b4c0d46dd239/pyyaml-6.0.3-cp311-cp311-macosx_11_0_arm64.whl @@ -2625,7 +3173,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/09/ec/4b43dae793655b7d8a25f76119624350b4d65eb663459eb9603d7f1f0345/mistune-0.8.4-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a4/8e/469e5a4a2f5855992e425f3cb33804cc07bf18d48f2db061aec61ce50270/more_itertools-10.8.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/89/5e/406b7d578926b68790e390d83a1165a9bfc2d95612a1a9c1c4d5c72ea815/msgspec-0.20.0-cp311-cp311-win_amd64.whl - - pypi: https://files.pythonhosted.org/packages/04/0a/c1055f2329761c87edcdc18a480ab43ba942ed10f156888b4744d69c1deb/mujoco-3.4.0-cp311-cp311-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/b8/98/c1fac334cc764068e6c5d7eb01d6ed2a3392bab51952c816888b2dfe78c2/mujoco-3.5.0-cp311-cp311-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/9e/c9/b2622292ea83fbb4ec318f5b9ab867d0a28ab43c5717bb85b0a5f6b3b0a4/networkx-3.6.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/73/88/1ce287ef8649dc51365b5094bd3713b76454838140a32ab4f8349973883c/nh3-0.3.3-cp38-abi3-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/88/b2/d0896bdcdc8d28a7fc5717c305f1a861c26e18c05047949fb371034d98bd/nodeenv-1.10.0-py2.py3-none-any.whl @@ -2647,6 +3195,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/0c/82/a2c93e32800940d9573fb28c346772a14778b84ba7524e691b324620ab89/pyright-1.1.408-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/3b/ab/b3226f0bd7cdcf710fbede2b3548584366da3b19b5021e74f5bde2a8fa3f/pytest-9.0.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ee/49/1377b49de7d0c1ce41292161ea0f721913fa8722c19fb9c1e3aa0367eecb/pytest_cov-7.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/fa/b6/3127540ecdf1464a00e5a01ee60a1b09175f6913f0644ac748494d9c4b21/pytest_timeout-2.4.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ca/31/d4e37e9e550c2b92a9cbc2e4d0b7420a27224968580b5a447f420847c975/pytest_xdist-3.8.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ec/57/56b9bcc3c9c6a792fcbaf139543cee77261f3651ca9da0c93f5c1221264b/python_dateutil-2.9.0.post0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/de/3d/8161f7711c017e01ac9f008dfddd9410dff3674334c233bde66e7ba65bbf/pywin32_ctypes-0.2.3-py3-none-any.whl @@ -2823,7 +3372,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/09/ec/4b43dae793655b7d8a25f76119624350b4d65eb663459eb9603d7f1f0345/mistune-0.8.4-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a4/8e/469e5a4a2f5855992e425f3cb33804cc07bf18d48f2db061aec61ce50270/more_itertools-10.8.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/5c/a2/488517a43ccf5a4b6b6eca6dd4ede0bd82b043d1539dd6bb908a19f8efd3/msgspec-0.20.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/c6/10/fa6b8762efbb02bd349503a39fb9dbbcf9e12041b0c5b29d484cafc09355/mujoco-3.4.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/c8/8a/229e4db3692be55532e155e2ca6a1363752243ee79df0e7e22ba00f716cf/mujoco-3.5.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/9e/c9/b2622292ea83fbb4ec318f5b9ab867d0a28ab43c5717bb85b0a5f6b3b0a4/networkx-3.6.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/6f/84/c0dc75c7fb596135f999e59a410d9f45bdabb989f1cb911f0016d22b747b/nh3-0.3.3-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - pypi: https://files.pythonhosted.org/packages/88/b2/d0896bdcdc8d28a7fc5717c305f1a861c26e18c05047949fb371034d98bd/nodeenv-1.10.0-py2.py3-none-any.whl @@ -2845,6 +3394,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/0c/82/a2c93e32800940d9573fb28c346772a14778b84ba7524e691b324620ab89/pyright-1.1.408-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/3b/ab/b3226f0bd7cdcf710fbede2b3548584366da3b19b5021e74f5bde2a8fa3f/pytest-9.0.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ee/49/1377b49de7d0c1ce41292161ea0f721913fa8722c19fb9c1e3aa0367eecb/pytest_cov-7.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/fa/b6/3127540ecdf1464a00e5a01ee60a1b09175f6913f0644ac748494d9c4b21/pytest_timeout-2.4.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ca/31/d4e37e9e550c2b92a9cbc2e4d0b7420a27224968580b5a447f420847c975/pytest_xdist-3.8.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ec/57/56b9bcc3c9c6a792fcbaf139543cee77261f3651ca9da0c93f5c1221264b/python_dateutil-2.9.0.post0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/8b/9d/b3589d3877982d4f2329302ef98a8026e7f4443c765c46cfecc8858c6b4b/pyyaml-6.0.3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl @@ -2987,7 +3537,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/09/ec/4b43dae793655b7d8a25f76119624350b4d65eb663459eb9603d7f1f0345/mistune-0.8.4-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a4/8e/469e5a4a2f5855992e425f3cb33804cc07bf18d48f2db061aec61ce50270/more_itertools-10.8.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/7f/ee/af51d090ada641d4b264992a486435ba3ef5b5634bc27e6eb002f71cef7d/msgspec-0.20.0-cp312-cp312-macosx_11_0_arm64.whl - - pypi: https://files.pythonhosted.org/packages/ed/fe/10dbaef500af18866a41d842f2f95cf113aacf0f1eb91677c4817cff3495/mujoco-3.4.0-cp312-cp312-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/e1/d4/d0032323f58a9b8080b8464c6aade8d5ac2e101dbed1de64a38b3913b446/mujoco-3.5.0-cp312-cp312-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/9e/c9/b2622292ea83fbb4ec318f5b9ab867d0a28ab43c5717bb85b0a5f6b3b0a4/networkx-3.6.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/13/3e/aef8cf8e0419b530c95e96ae93a5078e9b36c1e6613eeb1df03a80d5194e/nh3-0.3.3-cp38-abi3-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl - pypi: https://files.pythonhosted.org/packages/88/b2/d0896bdcdc8d28a7fc5717c305f1a861c26e18c05047949fb371034d98bd/nodeenv-1.10.0-py2.py3-none-any.whl @@ -3009,6 +3559,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/0c/82/a2c93e32800940d9573fb28c346772a14778b84ba7524e691b324620ab89/pyright-1.1.408-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/3b/ab/b3226f0bd7cdcf710fbede2b3548584366da3b19b5021e74f5bde2a8fa3f/pytest-9.0.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ee/49/1377b49de7d0c1ce41292161ea0f721913fa8722c19fb9c1e3aa0367eecb/pytest_cov-7.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/fa/b6/3127540ecdf1464a00e5a01ee60a1b09175f6913f0644ac748494d9c4b21/pytest_timeout-2.4.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ca/31/d4e37e9e550c2b92a9cbc2e4d0b7420a27224968580b5a447f420847c975/pytest_xdist-3.8.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ec/57/56b9bcc3c9c6a792fcbaf139543cee77261f3651ca9da0c93f5c1221264b/python_dateutil-2.9.0.post0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/89/a0/6cf41a19a1f2f3feab0e9c0b74134aa2ce6849093d5517a0c550fe37a648/pyyaml-6.0.3-cp312-cp312-macosx_11_0_arm64.whl @@ -3146,7 +3697,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/09/ec/4b43dae793655b7d8a25f76119624350b4d65eb663459eb9603d7f1f0345/mistune-0.8.4-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a4/8e/469e5a4a2f5855992e425f3cb33804cc07bf18d48f2db061aec61ce50270/more_itertools-10.8.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/5a/51/aba940212c23b32eedce752896205912c2668472ed5b205fc33da28a6509/msgspec-0.20.0-cp312-cp312-win_amd64.whl - - pypi: https://files.pythonhosted.org/packages/3f/ec/5336e8e86e429a7f301dac63cae6ae75ff9e91bfb01502a55f60d7305eca/mujoco-3.4.0-cp312-cp312-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/02/37/527d83610b878f27c01dd762e0e41aaa62f095c607f0500ac7f724a2c7a5/mujoco-3.5.0-cp312-cp312-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/9e/c9/b2622292ea83fbb4ec318f5b9ab867d0a28ab43c5717bb85b0a5f6b3b0a4/networkx-3.6.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/73/88/1ce287ef8649dc51365b5094bd3713b76454838140a32ab4f8349973883c/nh3-0.3.3-cp38-abi3-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/88/b2/d0896bdcdc8d28a7fc5717c305f1a861c26e18c05047949fb371034d98bd/nodeenv-1.10.0-py2.py3-none-any.whl @@ -3168,6 +3719,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/0c/82/a2c93e32800940d9573fb28c346772a14778b84ba7524e691b324620ab89/pyright-1.1.408-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/3b/ab/b3226f0bd7cdcf710fbede2b3548584366da3b19b5021e74f5bde2a8fa3f/pytest-9.0.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ee/49/1377b49de7d0c1ce41292161ea0f721913fa8722c19fb9c1e3aa0367eecb/pytest_cov-7.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/fa/b6/3127540ecdf1464a00e5a01ee60a1b09175f6913f0644ac748494d9c4b21/pytest_timeout-2.4.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ca/31/d4e37e9e550c2b92a9cbc2e4d0b7420a27224968580b5a447f420847c975/pytest_xdist-3.8.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ec/57/56b9bcc3c9c6a792fcbaf139543cee77261f3651ca9da0c93f5c1221264b/python_dateutil-2.9.0.post0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/de/3d/8161f7711c017e01ac9f008dfddd9410dff3674334c233bde66e7ba65bbf/pywin32_ctypes-0.2.3-py3-none-any.whl @@ -3344,7 +3896,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/09/ec/4b43dae793655b7d8a25f76119624350b4d65eb663459eb9603d7f1f0345/mistune-0.8.4-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a4/8e/469e5a4a2f5855992e425f3cb33804cc07bf18d48f2db061aec61ce50270/more_itertools-10.8.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/28/83/36557b04cfdc317ed8a525c4993b23e43a8fbcddaddd78619112ca07138c/msgspec-0.20.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/df/72/0c47350ec39611ff8defe9e8af10c23c9ad0235974f1999a523fcd1c3e68/mujoco-3.4.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/16/47/93c7ac3a9630b49c55d76b0d02aa565543e2f62cecd885f8f574f5c745e7/mujoco-3.5.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/9e/c9/b2622292ea83fbb4ec318f5b9ab867d0a28ab43c5717bb85b0a5f6b3b0a4/networkx-3.6.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/6f/84/c0dc75c7fb596135f999e59a410d9f45bdabb989f1cb911f0016d22b747b/nh3-0.3.3-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - pypi: https://files.pythonhosted.org/packages/88/b2/d0896bdcdc8d28a7fc5717c305f1a861c26e18c05047949fb371034d98bd/nodeenv-1.10.0-py2.py3-none-any.whl @@ -3366,6 +3918,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/0c/82/a2c93e32800940d9573fb28c346772a14778b84ba7524e691b324620ab89/pyright-1.1.408-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/3b/ab/b3226f0bd7cdcf710fbede2b3548584366da3b19b5021e74f5bde2a8fa3f/pytest-9.0.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ee/49/1377b49de7d0c1ce41292161ea0f721913fa8722c19fb9c1e3aa0367eecb/pytest_cov-7.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/fa/b6/3127540ecdf1464a00e5a01ee60a1b09175f6913f0644ac748494d9c4b21/pytest_timeout-2.4.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ca/31/d4e37e9e550c2b92a9cbc2e4d0b7420a27224968580b5a447f420847c975/pytest_xdist-3.8.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ec/57/56b9bcc3c9c6a792fcbaf139543cee77261f3651ca9da0c93f5c1221264b/python_dateutil-2.9.0.post0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/74/27/e5b8f34d02d9995b80abcef563ea1f8b56d20134d8f4e5e81733b1feceb2/pyyaml-6.0.3-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl @@ -3510,7 +4063,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/09/ec/4b43dae793655b7d8a25f76119624350b4d65eb663459eb9603d7f1f0345/mistune-0.8.4-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a4/8e/469e5a4a2f5855992e425f3cb33804cc07bf18d48f2db061aec61ce50270/more_itertools-10.8.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/57/b6/eff0305961a1d9447ec2b02f8c73c8946f22564d302a504185b730c9a761/msgspec-0.20.0-cp313-cp313-macosx_11_0_arm64.whl - - pypi: https://files.pythonhosted.org/packages/e8/51/c3e5c3b199b1b74c85f0cb02dc0ef80363bf91ea245ee8a932804768d5e8/mujoco-3.4.0-cp313-cp313-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/6f/c9/26bd4979d503d03f7a6ded851c3094a5708cb534cf0dc80b4db6672da2b0/mujoco-3.5.0-cp313-cp313-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/9e/c9/b2622292ea83fbb4ec318f5b9ab867d0a28ab43c5717bb85b0a5f6b3b0a4/networkx-3.6.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/13/3e/aef8cf8e0419b530c95e96ae93a5078e9b36c1e6613eeb1df03a80d5194e/nh3-0.3.3-cp38-abi3-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl - pypi: https://files.pythonhosted.org/packages/88/b2/d0896bdcdc8d28a7fc5717c305f1a861c26e18c05047949fb371034d98bd/nodeenv-1.10.0-py2.py3-none-any.whl @@ -3532,6 +4085,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/0c/82/a2c93e32800940d9573fb28c346772a14778b84ba7524e691b324620ab89/pyright-1.1.408-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/3b/ab/b3226f0bd7cdcf710fbede2b3548584366da3b19b5021e74f5bde2a8fa3f/pytest-9.0.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ee/49/1377b49de7d0c1ce41292161ea0f721913fa8722c19fb9c1e3aa0367eecb/pytest_cov-7.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/fa/b6/3127540ecdf1464a00e5a01ee60a1b09175f6913f0644ac748494d9c4b21/pytest_timeout-2.4.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ca/31/d4e37e9e550c2b92a9cbc2e4d0b7420a27224968580b5a447f420847c975/pytest_xdist-3.8.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ec/57/56b9bcc3c9c6a792fcbaf139543cee77261f3651ca9da0c93f5c1221264b/python_dateutil-2.9.0.post0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/b1/16/95309993f1d3748cd644e02e38b75d50cbc0d9561d21f390a76242ce073f/pyyaml-6.0.3-cp313-cp313-macosx_11_0_arm64.whl @@ -3671,7 +4225,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/09/ec/4b43dae793655b7d8a25f76119624350b4d65eb663459eb9603d7f1f0345/mistune-0.8.4-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a4/8e/469e5a4a2f5855992e425f3cb33804cc07bf18d48f2db061aec61ce50270/more_itertools-10.8.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/f1/25/5e8080fe0117f799b1b68008dc29a65862077296b92550632de015128579/msgspec-0.20.0-cp313-cp313-win_amd64.whl - - pypi: https://files.pythonhosted.org/packages/dc/25/bbf8c01758d619c86bcbe58db6a7d61ca423e7c76791f323b8ea2e92c2bd/mujoco-3.4.0-cp313-cp313-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/ab/53/54a0815d43c83e1074cfc7da98a3dea88d7dda48c03edfd225a387a3767b/mujoco-3.5.0-cp313-cp313-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/9e/c9/b2622292ea83fbb4ec318f5b9ab867d0a28ab43c5717bb85b0a5f6b3b0a4/networkx-3.6.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/73/88/1ce287ef8649dc51365b5094bd3713b76454838140a32ab4f8349973883c/nh3-0.3.3-cp38-abi3-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/88/b2/d0896bdcdc8d28a7fc5717c305f1a861c26e18c05047949fb371034d98bd/nodeenv-1.10.0-py2.py3-none-any.whl @@ -3693,6 +4247,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/0c/82/a2c93e32800940d9573fb28c346772a14778b84ba7524e691b324620ab89/pyright-1.1.408-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/3b/ab/b3226f0bd7cdcf710fbede2b3548584366da3b19b5021e74f5bde2a8fa3f/pytest-9.0.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ee/49/1377b49de7d0c1ce41292161ea0f721913fa8722c19fb9c1e3aa0367eecb/pytest_cov-7.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/fa/b6/3127540ecdf1464a00e5a01ee60a1b09175f6913f0644ac748494d9c4b21/pytest_timeout-2.4.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ca/31/d4e37e9e550c2b92a9cbc2e4d0b7420a27224968580b5a447f420847c975/pytest_xdist-3.8.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ec/57/56b9bcc3c9c6a792fcbaf139543cee77261f3651ca9da0c93f5c1221264b/python_dateutil-2.9.0.post0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/de/3d/8161f7711c017e01ac9f008dfddd9410dff3674334c233bde66e7ba65bbf/pywin32_ctypes-0.2.3-py3-none-any.whl @@ -3815,6 +4370,13 @@ packages: requires_dist: - typing-extensions>=4 ; python_full_version < '3.11' requires_python: '>=3.10.0' +- pypi: https://files.pythonhosted.org/packages/32/53/bac4724684064bfee95ece0bb6caf3887e509006845e25388a12cac26d0c/astroid-4.1.1-py3-none-any.whl + name: astroid + version: 4.1.1 + sha256: 6b28522096f7e7a36ffcf3be60e77de15e2411ab3a713184beac33fb8f20c0c9 + requires_dist: + - typing-extensions>=4 ; python_full_version < '3.11' + requires_python: '>=3.10.0' - pypi: https://files.pythonhosted.org/packages/3a/2a/7cc015f5b9f5db42b7d48157e23356022889fc354a2813c15934b7cb5c0e/attrs-25.4.0-py3-none-any.whl name: attrs version: 25.4.0 @@ -4240,6 +4802,27 @@ packages: requires_dist: - tomli ; python_full_version <= '3.11' and extra == 'toml' requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/0c/c9/44fb661c55062f0818a6ffd2685c67aa30816200d5f2817543717d4b92eb/coverage-7.13.5-cp313-cp313-macosx_11_0_arm64.whl + name: coverage + version: 7.13.5 + sha256: 941617e518602e2d64942c88ec8499f7fbd49d3f6c4327d3a71d43a1973032f3 + requires_dist: + - tomli ; python_full_version <= '3.11' and extra == 'toml' + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/66/40/7732d648ab9d069a46e686043241f01206348e2bbf128daea85be4d6414b/coverage-7.13.5-cp313-cp313-win_amd64.whl + name: coverage + version: 7.13.5 + sha256: 631efb83f01569670a5e866ceb80fe483e7c159fac6f167e6571522636104a0b + requires_dist: + - tomli ; python_full_version <= '3.11' and extra == 'toml' + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/ac/68/1666e3a4462f8202d836920114fa7a5ee9275d1fa45366d336c551a162dd/coverage-7.13.5-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl + name: coverage + version: 7.13.5 + sha256: 78e696e1cc714e57e8b25760b33a8b1026b7048d270140d25dafe1b0a1ee05a3 + requires_dist: + - tomli ; python_full_version <= '3.11' and extra == 'toml' + requires_python: '>=3.10' - pypi: https://files.pythonhosted.org/packages/37/19/e1b8f964a834eddb44fa1b9a9976f4e414cbb7aa62809b6760c8803d22d1/cryptography-46.0.5-cp38-abi3-manylinux_2_28_x86_64.whl name: cryptography version: 46.0.5 @@ -4562,6 +5145,11 @@ packages: version: 3.24.2 sha256: 667d7dc0b7d1e1064dd5f8f8e80bdac157a6482e8d2e02cd16fd3b6b33bd6556 requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/a4/a5/842ae8f0c08b61d6484b52f99a03510a3a72d23141942d216ebe81fefbce/filelock-3.25.2-py3-none-any.whl + name: filelock + version: 3.25.2 + sha256: ca8afb0da15f229774c9ad1b455ed96e85a81373065fb10446672f64444ddf70 + requires_python: '>=3.10' - pypi: https://files.pythonhosted.org/packages/e8/2d/d2a548598be01649e2d46231d151a6c56d10b964d94043a335ae56ea2d92/flatbuffers-25.12.19-py2.py3-none-any.whl name: flatbuffers version: 25.12.19 @@ -4962,6 +5550,13 @@ packages: requires_dist: - ukkonen ; extra == 'license' requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/46/33/92ef41c6fad0233e41d3d84ba8e8ad18d1780f1e5d99b3c683e6d7f98b63/identify-2.6.18-py2.py3-none-any.whl + name: identify + version: 2.6.18 + sha256: 8db9d3c8ea9079db92cafb0ebf97abdc09d52e97f4dcf773a2e694048b7cd737 + requires_dist: + - ukkonen ; extra == 'license' + requires_python: '>=3.10' - pypi: https://files.pythonhosted.org/packages/0e/61/66938bbb5fc52dbdf84594873d5b51fb1f7c7794e9c0f5bd885f30bc507b/idna-3.11-py3-none-any.whl name: idna version: '3.11' @@ -5039,6 +5634,11 @@ packages: version: 1.4.1 sha256: 0d8d18d08f840c19d0ee7ca1fd82490fdc3729b7ac93f49870406ddde8ef8d8b requires_python: '>=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*' +- pypi: https://files.pythonhosted.org/packages/5f/53/fb7122b71361a0d121b669dcf3d31244ef75badbbb724af388948de543e2/imagesize-2.0.0-py2.py3-none-any.whl + name: imagesize + version: 2.0.0 + sha256: 5667c5bbb57ab3f1fa4bc366f4fbc971db3d5ed011fd2715fd8001f782718d96 + requires_python: '>=3.10,<3.15' - pypi: https://files.pythonhosted.org/packages/fa/5e/f8e9a1d23b9c20a551a8a02ea3637b4642e22c2626e3a13a9a29cdea99eb/importlib_metadata-8.7.1-py3-none-any.whl name: importlib-metadata version: 8.7.1 @@ -5132,6 +5732,28 @@ packages: - pytest-mypy>=1.0.1 ; extra == 'type' - mypy<1.19 ; platform_python_implementation == 'PyPy' and extra == 'type' requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/f4/49/c152890d49102b280ecf86ba5f80a8c111c3a155dafa3bd24aeb64fde9e1/jaraco_context-6.1.1-py3-none-any.whl + name: jaraco-context + version: 6.1.1 + sha256: 0df6a0287258f3e364072c3e40d5411b20cafa30cb28c4839d24319cecf9f808 + requires_dist: + - backports-tarfile ; python_full_version < '3.12' + - pytest>=6,!=8.1.* ; extra == 'test' + - jaraco-test>=5.6.0 ; extra == 'test' + - portend ; extra == 'test' + - sphinx>=3.5 ; extra == 'doc' + - jaraco-packaging>=9.3 ; extra == 'doc' + - rst-linker>=1.9 ; extra == 'doc' + - furo ; extra == 'doc' + - sphinx-lint ; extra == 'doc' + - jaraco-tidelift>=1.4 ; extra == 'doc' + - pytest-checkdocs>=2.4 ; extra == 'check' + - pytest-ruff>=0.2.1 ; sys_platform != 'cygwin' and extra == 'check' + - pytest-cov ; extra == 'cover' + - pytest-enabler>=3.4 ; extra == 'enabler' + - pytest-mypy>=1.0.1 ; extra == 'type' + - mypy<1.19 ; platform_python_implementation == 'PyPy' and extra == 'type' + requires_python: '>=3.9' - pypi: https://files.pythonhosted.org/packages/fd/c4/813bb09f0985cb21e959f21f2464169eca882656849adf727ac7bb7e1767/jaraco_functools-4.4.0-py3-none-any.whl name: jaraco-functools version: 4.4.0 @@ -5211,11 +5833,11 @@ packages: - pypi: ./ name: judo-rai version: 0.0.7 - sha256: 120126caf716522546a38a8fea84e461cb32fbb6961b1a8dc3222a589ec34d1c + sha256: c22b20758520ea8a41d184fb41ac8e29bb05d99f5c2d1789f95b9df8cd57bee4 requires_dist: - dora-utils - h5py - - mujoco==3.4.0 + - mujoco>=3.5.0,<3.6 - numpy - pillow - pycparser @@ -5239,6 +5861,7 @@ packages: - pyright ; extra == 'dev' - pytest ; extra == 'dev' - pytest-cov ; extra == 'dev' + - pytest-timeout ; extra == 'dev' - pytest-xdist ; extra == 'dev' - ruff ; extra == 'dev' - twine ; extra == 'dev' @@ -6465,181 +7088,300 @@ packages: - tomli-w ; extra == 'toml' - pyyaml ; extra == 'yaml' requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/03/dd/2875a57cdb423d98bdcb359f34af5eb8a24e48a903f4bb7110d75e478dac/mujoco-3.4.0-cp310-cp310-macosx_11_0_arm64.whl +- pypi: https://files.pythonhosted.org/packages/02/37/527d83610b878f27c01dd762e0e41aaa62f095c607f0500ac7f724a2c7a5/mujoco-3.5.0-cp312-cp312-win_amd64.whl name: mujoco - version: 3.4.0 - sha256: 7960cf47b4ed274955280200a812e6d780f03707d5258b42c3afb249051216ee + version: 3.5.0 + sha256: 4b3a62af174ab59b9b6d816dca0786b7fd85ac081d6c2a931a2b22dd6e821f50 requires_dist: - absl-py - etils[epath] - glfw - numpy - pyopengl + - absl-py ; extra == 'sysid' + - colorama ; extra == 'sysid' + - imageio[ffmpeg] ; extra == 'sysid' + - jinja2 ; extra == 'sysid' + - matplotlib ; extra == 'sysid' + - plotly ; extra == 'sysid' + - pyyaml ; extra == 'sysid' + - scipy ; extra == 'sysid' + - tabulate ; extra == 'sysid' + - typing-extensions ; extra == 'sysid' - usd-core ; extra == 'usd' - pillow ; extra == 'usd' requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/04/0a/c1055f2329761c87edcdc18a480ab43ba942ed10f156888b4744d69c1deb/mujoco-3.4.0-cp311-cp311-win_amd64.whl +- pypi: https://files.pythonhosted.org/packages/16/47/93c7ac3a9630b49c55d76b0d02aa565543e2f62cecd885f8f574f5c745e7/mujoco-3.5.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl name: mujoco - version: 3.4.0 - sha256: e0ab4a450826ca04db11608325b37adf77dee4cde2a9dd9d43e6fa46c44545a9 + version: 3.5.0 + sha256: a956520adb275ce8e878da29e2586eac3affc7b7ac772065ef01f2380a9e8784 requires_dist: - absl-py - etils[epath] - glfw - numpy - pyopengl + - absl-py ; extra == 'sysid' + - colorama ; extra == 'sysid' + - imageio[ffmpeg] ; extra == 'sysid' + - jinja2 ; extra == 'sysid' + - matplotlib ; extra == 'sysid' + - plotly ; extra == 'sysid' + - pyyaml ; extra == 'sysid' + - scipy ; extra == 'sysid' + - tabulate ; extra == 'sysid' + - typing-extensions ; extra == 'sysid' - usd-core ; extra == 'usd' - pillow ; extra == 'usd' requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/09/d4/99acbb782cc2c2ab5e5dacdf48b5d2850b641e34a91715d262d14103b764/mujoco-3.4.0-cp311-cp311-macosx_11_0_arm64.whl +- pypi: https://files.pythonhosted.org/packages/47/14/d5bf98385354318ec2e6c466a8c7cf7fd76f8b711ed6d11d155e2baa81fb/mujoco-3.5.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl name: mujoco - version: 3.4.0 - sha256: 98d3ab7b02d99ac2866bb111807797549853d6ddf485ddc072cec3c1d33dfad8 + version: 3.5.0 + sha256: ba54826121c6857fc4ca82df642d9a89174ce5537677c6ead34844bb692437e3 requires_dist: - absl-py - etils[epath] - glfw - numpy - pyopengl + - absl-py ; extra == 'sysid' + - colorama ; extra == 'sysid' + - imageio[ffmpeg] ; extra == 'sysid' + - jinja2 ; extra == 'sysid' + - matplotlib ; extra == 'sysid' + - plotly ; extra == 'sysid' + - pyyaml ; extra == 'sysid' + - scipy ; extra == 'sysid' + - tabulate ; extra == 'sysid' + - typing-extensions ; extra == 'sysid' - usd-core ; extra == 'usd' - pillow ; extra == 'usd' requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/22/d5/f94edc884c11b63f0d7ba9322ec4ca98bc7cad57c5c034c2e3332287d9ad/mujoco-3.4.0-cp310-cp310-win_amd64.whl +- pypi: https://files.pythonhosted.org/packages/6f/c9/26bd4979d503d03f7a6ded851c3094a5708cb534cf0dc80b4db6672da2b0/mujoco-3.5.0-cp313-cp313-macosx_11_0_arm64.whl name: mujoco - version: 3.4.0 - sha256: ffe79a1476767806318b7dfbbb642e428b873385fb2d2f06e69d461459d01ed1 + version: 3.5.0 + sha256: 82416804ae96c69ed779330bd4f4af0a43632e2bbbcc60e5b193642db48e84ca requires_dist: - absl-py - etils[epath] - glfw - numpy - pyopengl + - absl-py ; extra == 'sysid' + - colorama ; extra == 'sysid' + - imageio[ffmpeg] ; extra == 'sysid' + - jinja2 ; extra == 'sysid' + - matplotlib ; extra == 'sysid' + - plotly ; extra == 'sysid' + - pyyaml ; extra == 'sysid' + - scipy ; extra == 'sysid' + - tabulate ; extra == 'sysid' + - typing-extensions ; extra == 'sysid' - usd-core ; extra == 'usd' - pillow ; extra == 'usd' requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/3f/ec/5336e8e86e429a7f301dac63cae6ae75ff9e91bfb01502a55f60d7305eca/mujoco-3.4.0-cp312-cp312-win_amd64.whl +- pypi: https://files.pythonhosted.org/packages/7e/91/d82dd3c16892e1b0e27a2f537eec8aad54d91d939cb3cd37db2e8c09ecc2/mujoco-3.5.0-cp310-cp310-win_amd64.whl name: mujoco - version: 3.4.0 - sha256: 10314213c395aedeaf2778596e78dd9ae01d74dc92d4f75c696707781d59826a + version: 3.5.0 + sha256: 2328358d2f0031175897092560dd6d04b14bab1cc22caa145ce99b843c17daa2 requires_dist: - absl-py - etils[epath] - glfw - numpy - pyopengl + - absl-py ; extra == 'sysid' + - colorama ; extra == 'sysid' + - imageio[ffmpeg] ; extra == 'sysid' + - jinja2 ; extra == 'sysid' + - matplotlib ; extra == 'sysid' + - plotly ; extra == 'sysid' + - pyyaml ; extra == 'sysid' + - scipy ; extra == 'sysid' + - tabulate ; extra == 'sysid' + - typing-extensions ; extra == 'sysid' - usd-core ; extra == 'usd' - pillow ; extra == 'usd' requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/71/95/ba02262c7a7a786a64b8d77315e7e4d3c77598ff63d8cd605ba2b96ec349/mujoco-3.4.0-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl +- pypi: https://files.pythonhosted.org/packages/82/02/aa6057ac4c50fb36558208005d6da19518f9a7857ef9b5fd2ed8f9262fe2/mujoco-3.5.0-cp311-cp311-macosx_11_0_arm64.whl name: mujoco - version: 3.4.0 - sha256: 1b2b8a75ea191ae577bfa2385ca6ecd6328f37f6f46bc3cfb41835b2653f716a + version: 3.5.0 + sha256: e4fbb00809de98e8a65f2002745c5bca39076f8118b0fe08e973e7a99603c92b requires_dist: - absl-py - etils[epath] - glfw - numpy - pyopengl + - absl-py ; extra == 'sysid' + - colorama ; extra == 'sysid' + - imageio[ffmpeg] ; extra == 'sysid' + - jinja2 ; extra == 'sysid' + - matplotlib ; extra == 'sysid' + - plotly ; extra == 'sysid' + - pyyaml ; extra == 'sysid' + - scipy ; extra == 'sysid' + - tabulate ; extra == 'sysid' + - typing-extensions ; extra == 'sysid' - usd-core ; extra == 'usd' - pillow ; extra == 'usd' requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/c3/c1/37c07061be2b410de33624093fc06fc49ec13888252f1a6c30fcd40633bd/mujoco-3.4.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl +- pypi: https://files.pythonhosted.org/packages/8d/6b/fdac8ed97086e12ac930fb44e419eda1626e339010df73678cb1f22527d7/mujoco-3.5.0-cp310-cp310-macosx_11_0_arm64.whl name: mujoco - version: 3.4.0 - sha256: c0b3dce70abdd0ac6475bb8040d7d97a4e3ccf5f6a00cc06086b7a169e246522 + version: 3.5.0 + sha256: 5f3803ff0dd7bc04d6c47d53a794343843bde06f0aeefeac28bb62b4cf2baab3 requires_dist: - absl-py - etils[epath] - glfw - numpy - pyopengl + - absl-py ; extra == 'sysid' + - colorama ; extra == 'sysid' + - imageio[ffmpeg] ; extra == 'sysid' + - jinja2 ; extra == 'sysid' + - matplotlib ; extra == 'sysid' + - plotly ; extra == 'sysid' + - pyyaml ; extra == 'sysid' + - scipy ; extra == 'sysid' + - tabulate ; extra == 'sysid' + - typing-extensions ; extra == 'sysid' - usd-core ; extra == 'usd' - pillow ; extra == 'usd' requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/c6/10/fa6b8762efbb02bd349503a39fb9dbbcf9e12041b0c5b29d484cafc09355/mujoco-3.4.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl +- pypi: https://files.pythonhosted.org/packages/ab/53/54a0815d43c83e1074cfc7da98a3dea88d7dda48c03edfd225a387a3767b/mujoco-3.5.0-cp313-cp313-win_amd64.whl name: mujoco - version: 3.4.0 - sha256: 8e5a36e61495be2a855f61194813e1277ab4b330cc180e50c8e3c7a459dc40b6 + version: 3.5.0 + sha256: 646b26f545cfdd60ae65ee90d44f63f50fc7ea5b8242777964ef0148830e72df requires_dist: - absl-py - etils[epath] - glfw - numpy - pyopengl + - absl-py ; extra == 'sysid' + - colorama ; extra == 'sysid' + - imageio[ffmpeg] ; extra == 'sysid' + - jinja2 ; extra == 'sysid' + - matplotlib ; extra == 'sysid' + - plotly ; extra == 'sysid' + - pyyaml ; extra == 'sysid' + - scipy ; extra == 'sysid' + - tabulate ; extra == 'sysid' + - typing-extensions ; extra == 'sysid' - usd-core ; extra == 'usd' - pillow ; extra == 'usd' requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/dc/25/bbf8c01758d619c86bcbe58db6a7d61ca423e7c76791f323b8ea2e92c2bd/mujoco-3.4.0-cp313-cp313-win_amd64.whl +- pypi: https://files.pythonhosted.org/packages/b8/98/c1fac334cc764068e6c5d7eb01d6ed2a3392bab51952c816888b2dfe78c2/mujoco-3.5.0-cp311-cp311-win_amd64.whl name: mujoco - version: 3.4.0 - sha256: c01a842a17c0229dce2fb65a051a8e6ee5f5307c50c825c850e3702dda4344e6 + version: 3.5.0 + sha256: ec0e35678773b34ee8b15741c34a745e027db062efcae790315aa83a5581c505 requires_dist: - absl-py - etils[epath] - glfw - numpy - pyopengl + - absl-py ; extra == 'sysid' + - colorama ; extra == 'sysid' + - imageio[ffmpeg] ; extra == 'sysid' + - jinja2 ; extra == 'sysid' + - matplotlib ; extra == 'sysid' + - plotly ; extra == 'sysid' + - pyyaml ; extra == 'sysid' + - scipy ; extra == 'sysid' + - tabulate ; extra == 'sysid' + - typing-extensions ; extra == 'sysid' - usd-core ; extra == 'usd' - pillow ; extra == 'usd' requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/df/72/0c47350ec39611ff8defe9e8af10c23c9ad0235974f1999a523fcd1c3e68/mujoco-3.4.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl +- pypi: https://files.pythonhosted.org/packages/c8/8a/229e4db3692be55532e155e2ca6a1363752243ee79df0e7e22ba00f716cf/mujoco-3.5.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl name: mujoco - version: 3.4.0 - sha256: 7edaffb223cf1343ed980030c466170eb8f9d624cf69c9a99925cbce371f22db + version: 3.5.0 + sha256: 66fe37276644c28fab497929c55580725de81afc6d511a40cc27525a8dd99efa requires_dist: - absl-py - etils[epath] - glfw - numpy - pyopengl + - absl-py ; extra == 'sysid' + - colorama ; extra == 'sysid' + - imageio[ffmpeg] ; extra == 'sysid' + - jinja2 ; extra == 'sysid' + - matplotlib ; extra == 'sysid' + - plotly ; extra == 'sysid' + - pyyaml ; extra == 'sysid' + - scipy ; extra == 'sysid' + - tabulate ; extra == 'sysid' + - typing-extensions ; extra == 'sysid' - usd-core ; extra == 'usd' - pillow ; extra == 'usd' requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/e8/51/c3e5c3b199b1b74c85f0cb02dc0ef80363bf91ea245ee8a932804768d5e8/mujoco-3.4.0-cp313-cp313-macosx_11_0_arm64.whl +- pypi: https://files.pythonhosted.org/packages/ca/d6/a5a7b615b257867b7c97db6b3ce07dec9351d5d9d5a5aca881cbb583d7a3/mujoco-3.5.0-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl name: mujoco - version: 3.4.0 - sha256: 87a68d063d06d261e83755093e79371901b6a8171b0b8b88dcb020f966d4e463 + version: 3.5.0 + sha256: 01b12896ae906f157e18d8b1b7c24a8b72d2576fffa09869047150f186e92b33 requires_dist: - absl-py - etils[epath] - glfw - numpy - pyopengl + - absl-py ; extra == 'sysid' + - colorama ; extra == 'sysid' + - imageio[ffmpeg] ; extra == 'sysid' + - jinja2 ; extra == 'sysid' + - matplotlib ; extra == 'sysid' + - plotly ; extra == 'sysid' + - pyyaml ; extra == 'sysid' + - scipy ; extra == 'sysid' + - tabulate ; extra == 'sysid' + - typing-extensions ; extra == 'sysid' - usd-core ; extra == 'usd' - pillow ; extra == 'usd' requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/ed/fe/10dbaef500af18866a41d842f2f95cf113aacf0f1eb91677c4817cff3495/mujoco-3.4.0-cp312-cp312-macosx_11_0_arm64.whl +- pypi: https://files.pythonhosted.org/packages/e1/d4/d0032323f58a9b8080b8464c6aade8d5ac2e101dbed1de64a38b3913b446/mujoco-3.5.0-cp312-cp312-macosx_11_0_arm64.whl name: mujoco - version: 3.4.0 - sha256: 339800c695166c8041cdef95ea5384fc607ad1b86c19528c785a17ed742c3a5e + version: 3.5.0 + sha256: 94cf4285b46bc2d74fbe86e39a93ecfb3b0e584477fff7e38d293d47b88576e7 requires_dist: - absl-py - etils[epath] - glfw - numpy - pyopengl + - absl-py ; extra == 'sysid' + - colorama ; extra == 'sysid' + - imageio[ffmpeg] ; extra == 'sysid' + - jinja2 ; extra == 'sysid' + - matplotlib ; extra == 'sysid' + - plotly ; extra == 'sysid' + - pyyaml ; extra == 'sysid' + - scipy ; extra == 'sysid' + - tabulate ; extra == 'sysid' + - typing-extensions ; extra == 'sysid' - usd-core ; extra == 'usd' - pillow ; extra == 'usd' requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/81/ef/6affa8e9ba6ad336d6132fe7d68c09c0243dd977e3fc0abd739902512d55/mujoco_warp-0.0.2-py3-none-any.whl +- pypi: https://files.pythonhosted.org/packages/4b/2e/90f05ad3818fd4b826f712c9f89a3df3aa3ef204efeaa71f8ddc2ca5fd3b/mujoco_warp-3.5.0.2-py3-none-any.whl name: mujoco-warp - version: 0.0.2 - sha256: 4d78a096a20fa786f78ca1842b22f1798bf45128614bb4547155c3d77e4a76e8 + version: 3.5.0.2 + sha256: 877ed9d20d26b24e87233d4e09a34d8999a1414f8477d9a31590374c82c2176a requires_dist: - absl-py - etils[epath] - - mujoco>=3.3.7 + - mujoco>=3.5.0 - numpy - - warp-lang>=1.9.1 - - asv ; extra == 'dev' + - warp-lang>=1.11.0 - pre-commit ; extra == 'dev' - pytest ; extra == 'dev' - pytest-xdist ; extra == 'dev' - ruff ; extra == 'dev' - pygls>=1.0.0,<2.0.0 ; extra == 'dev' - lsprotocol>=2023.0.1,<2024.0.0 ; extra == 'dev' - - mujoco>=3.3.7.dev0 ; extra == 'dev' - - warp-lang>=1.9.1.dev0 ; extra == 'dev' + - mujoco>=3.5.0.dev0 ; extra == 'dev' + - warp-lang>=1.11.0.dev0 ; extra == 'dev' - jax ; extra == 'cpu' - jax[cuda12] ; extra == 'cuda' requires_python: '>=3.10' @@ -7329,6 +8071,11 @@ packages: version: 4.9.2 sha256: 9170634f126f8efdae22fb58ae8a0eaa86f38365bc57897a6c4f781d1f5875bd requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/63/d7/97f7e3a6abb67d8080dd406fd4df842c2be0efaf712d1c899c32a075027c/platformdirs-4.9.4-py3-none-any.whl + name: platformdirs + version: 4.9.4 + sha256: 68a9a4619a666ea6439f2ff250c12a853cd1cbd5158d258bd824a7df6be2f868 + requires_python: '>=3.10' - pypi: https://files.pythonhosted.org/packages/54/20/4d324d65cc6d9205fabedc306948156824eb9f0ee1633355a8f7ec5c66bf/pluggy-1.6.0-py3-none-any.whl name: pluggy version: 1.6.0 @@ -7544,6 +8291,13 @@ packages: - pytest-xdist ; extra == 'testing' - virtualenv ; extra == 'testing' requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/fa/b6/3127540ecdf1464a00e5a01ee60a1b09175f6913f0644ac748494d9c4b21/pytest_timeout-2.4.0-py3-none-any.whl + name: pytest-timeout + version: 2.4.0 + sha256: c42667e5cdadb151aeb5b26d114aff6bdf5a907f176a007a30b940d3d865b5c2 + requires_dist: + - pytest>=7.0.0 + requires_python: '>=3.7' - pypi: https://files.pythonhosted.org/packages/ca/31/d4e37e9e550c2b92a9cbc2e4d0b7420a27224968580b5a447f420847c975/pytest_xdist-3.8.0-py3-none-any.whl name: pytest-xdist version: 3.8.0 @@ -7859,6 +8613,23 @@ packages: requires_dist: - six>=1.5 requires_python: '>=2.7,!=3.0.*,!=3.1.*,!=3.2.*' +- pypi: https://files.pythonhosted.org/packages/c2/3c/2005227cb951df502412de2fa781f800663cccbef8d90ec6f1b371ac2c0d/python_discovery-1.2.0-py3-none-any.whl + name: python-discovery + version: 1.2.0 + sha256: 1e108f1bbe2ed0ef089823d28805d5ad32be8e734b86a5f212bf89b71c266e4a + requires_dist: + - filelock>=3.15.4 + - platformdirs>=4.3.6,<5 + - furo>=2025.12.19 ; extra == 'docs' + - sphinx-autodoc-typehints>=3.6.3 ; extra == 'docs' + - sphinx>=9.1 ; extra == 'docs' + - sphinxcontrib-mermaid>=2 ; extra == 'docs' + - covdefaults>=2.3 ; extra == 'testing' + - coverage>=7.5.4 ; extra == 'testing' + - pytest-mock>=3.14 ; extra == 'testing' + - pytest>=8.3.5 ; extra == 'testing' + - setuptools>=75.1 ; extra == 'testing' + requires_python: '>=3.8' - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.13-8_cp313.conda build_number: 8 sha256: 210bffe7b121e651419cb196a2a63687b087497595c9be9d20ebe97dd06060a7 @@ -8151,6 +8922,21 @@ packages: version: 0.15.1 sha256: c820fef9dd5d4172a6570e5721704a96c6679b80cf7be41659ed439653f62336 requires_python: '>=3.7' +- pypi: https://files.pythonhosted.org/packages/2b/e9/346d4d3fffc6871125e877dae8d9a1966b254fbd92a50f8561078b88b099/ruff-0.15.7-py3-none-win_amd64.whl + name: ruff + version: 0.15.7 + sha256: 4d53d712ddebcd7dace1bc395367aec12c057aacfe9adbb6d832302575f4d3a1 + requires_python: '>=3.7' +- pypi: https://files.pythonhosted.org/packages/ab/10/12586735d0ff42526ad78c049bf51d7428618c8b5c467e72508c694119df/ruff-0.15.7-py3-none-macosx_11_0_arm64.whl + name: ruff + version: 0.15.7 + sha256: 7fbc2448094262552146cbe1b9643a92f66559d3761f1ad0656d4991491af49e + requires_python: '>=3.7' +- pypi: https://files.pythonhosted.org/packages/b0/99/66f0343176d5eab02c3f7fcd2de7a8e0dd7a41f0d982bee56cd1c24db62b/ruff-0.15.7-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + name: ruff + version: 0.15.7 + sha256: dce0896488562f09a27b9c91b1f58a097457143931f3c4d519690dea54e624c5 + requires_python: '>=3.7' - pypi: https://files.pythonhosted.org/packages/8e/6d/41991e503e51fc1134502694c5fa7a1671501a17ffa12716a4a9151af3df/scipy-1.15.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl name: scipy version: 1.15.3 @@ -8984,6 +9770,16 @@ packages: - pyyaml - sphinx>=7.4.0 requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/2f/3a/8923a543fa2422d32be4c5311f488e4f275acde263c811e4d5d22bb544cb/sphinx_autoapi-3.8.0-py3-none-any.whl + name: sphinx-autoapi + version: 3.8.0 + sha256: 245aefdeab85609ae4aa3576b0d99f69676aa6333dda438761bd125755b3c42d + requires_dist: + - astroid>=3.0 + - jinja2 + - pyyaml + - sphinx>=7.4.0 + requires_python: '>=3.10' - pypi: https://files.pythonhosted.org/packages/3c/dd/018ce05c532a22007ac58d4f45232514cd9d6dd0ee1dc374e309db830983/sphinx_basic_ng-1.0.0b2-py3-none-any.whl name: sphinx-basic-ng version: 1.0.0b2 @@ -9506,6 +10302,19 @@ packages: - setuptools>=68 ; extra == 'test' - time-machine>=2.10 ; platform_python_implementation == 'CPython' and extra == 'test' requires_python: '>=3.8' +- pypi: https://files.pythonhosted.org/packages/c6/59/7d02447a55b2e55755011a647479041bc92a82e143f96a8195cb33bd0a1c/virtualenv-21.2.0-py3-none-any.whl + name: virtualenv + version: 21.2.0 + sha256: 1bd755b504931164a5a496d217c014d098426cddc79363ad66ac78125f9d908f + requires_dist: + - distlib>=0.3.7,<1 + - filelock>=3.24.2,<4 ; python_full_version >= '3.10' + - filelock>=3.16.1,<=3.19.1 ; python_full_version < '3.10' + - importlib-metadata>=6.6 ; python_full_version < '3.8' + - platformdirs>=3.9.1,<5 + - python-discovery>=1 + - typing-extensions>=4.13.2 ; python_full_version < '3.11' + requires_python: '>=3.8' - pypi: https://files.pythonhosted.org/packages/b9/c4/819f000b3d64f654a054a8b24bf8d0c5e799636393135784d0886d8c808e/viser-1.0.21-py3-none-any.whl name: viser version: 1.0.21 diff --git a/pyproject.toml b/pyproject.toml index 560635ea..3f8d2b17 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -31,7 +31,7 @@ classifiers = [ dependencies = [ "dora-utils", # dora + qol utils for writing nodes "h5py", - "mujoco==3.4.0", + "mujoco>=3.5.0,<3.6", "numpy", "pillow", # for displaying app logo "pycparser", @@ -86,6 +86,7 @@ dev = [ "pyright", "pytest", "pytest-cov", + "pytest-timeout", "pytest-xdist", "ruff", "twine", @@ -232,7 +233,7 @@ python = "3.13.*" [tool.pixi.feature.mjwarp.dependencies] python = ">=3.11,<3.14" [tool.pixi.feature.mjwarp.target.linux-64.pypi-dependencies] -mujoco_warp = "==0.0.2" +mujoco_warp = ">=3.5.0,<3.6" onnx = "*" onnxruntime-gpu = ">=1.24" @@ -241,6 +242,7 @@ default = { solve-group = "default" } docs = { features = ["docs"], solve-group = "default" } dev = { features = ["dev", "docs"], solve-group = "default" } mjwarp = { features = ["mjwarp"], solve-group = "mjwarp" } +dev-mjwarp = { features = ["dev", "mjwarp"], solve-group = "mjwarp" } py310 = { features = ["dev", "py310"], solve-group = "py310" } py311 = { features = ["dev", "py311"], solve-group = "py311" } py312 = { features = ["dev", "py312"], solve-group = "py312" } diff --git a/run_mpc/README.md b/run_mpc/README.md index 14dedf36..b4db2588 100644 --- a/run_mpc/README.md +++ b/run_mpc/README.md @@ -50,6 +50,31 @@ python run_mpc/main.py \ --visualize ``` +## Skip success filtering + +By default, only trajectories where `task.success()` returns `True` are saved. +For tasks without a meaningful success criterion, use `--no-require-success` to keep all trajectories: + +```bash +python run_mpc/main.py \ + --config-path run_mpc/configs/cylinder_push.json \ + --no-require-success +``` + +> **TODO(dta-bdai):** Not all tasks (especially non-spot tasks) have a `success()` implementation. +> Tasks missing an override inherit `return False` from the base class, which causes 0% success rate. +> Add `success()` to remaining tasks: `cartpole`, `fr3_pick`, `leap_cube`, `leap_cube_down`, `caltech_leap_cube`. + +## Visualize the dataset + +After generating trajectories, visualize them with: + +```bash +python run_mpc/visualize_trajectories.py --dataset-path +``` + +Replace `` with the path used during generation (default: `run_mpc/configs/trajectories.h5`). + ## One-liner without entering shell ```bash diff --git a/run_mpc/configs/cartpole.json b/run_mpc/configs/cartpole.json new file mode 100644 index 00000000..16626c5d --- /dev/null +++ b/run_mpc/configs/cartpole.json @@ -0,0 +1,29 @@ +{ + "controller_config": { + "horizon": 1.0, + "control_freq": 20.0, + "spline_order": "zero", + "max_opt_iters": 1, + "max_num_traces": 5, + "action_normalizer": "none" + }, + "task": "cartpole", + "task_config": { + "w_vertical": 10.0, + "w_centered": 10.0, + "w_velocity": 0.1, + "w_control": 0.1, + "p_vertical": 0.01, + "p_centered": 0.1 + }, + "optimizer": "cem", + "optimizer_config": { + "num_rollouts": 32, + "num_nodes": 4, + "use_noise_ramp": true, + "noise_ramp": 2.5, + "sigma_min": 0.1, + "sigma_max": 1.0, + "num_elites": 2 + } +} diff --git a/run_mpc/configs/cylinder_push.json b/run_mpc/configs/cylinder_push.json new file mode 100644 index 00000000..f960ef39 --- /dev/null +++ b/run_mpc/configs/cylinder_push.json @@ -0,0 +1,28 @@ +{ + "controller_config": { + "horizon": 1.0, + "control_freq": 20.0, + "spline_order": "zero", + "max_opt_iters": 1, + "max_num_traces": 5, + "action_normalizer": "none" + }, + "task": "cylinder_push", + "task_config": { + "w_pusher_proximity": 0.5, + "w_pusher_velocity": 0.0, + "w_cart_position": 0.1, + "pusher_goal_offset": 0.25, + "goal_pos": [0.0, 0.0] + }, + "optimizer": "cem", + "optimizer_config": { + "num_rollouts": 32, + "num_nodes": 4, + "use_noise_ramp": true, + "noise_ramp": 2.5, + "sigma_min": 0.1, + "sigma_max": 1.0, + "num_elites": 2 + } +} diff --git a/run_mpc/configs/spot_box_push.json b/run_mpc/configs/spot_box_push.json new file mode 100644 index 00000000..4dd675be --- /dev/null +++ b/run_mpc/configs/spot_box_push.json @@ -0,0 +1,33 @@ +{ + "controller_config": { + "horizon": 2.0, + "control_freq": 20.0, + "spline_order": "linear", + "max_opt_iters": 1, + "max_num_traces": 5, + "action_normalizer": "none" + }, + "task": "spot_box_push", + "task_config": { + "fall_penalty": 2500.0, + "spot_fallen_threshold": 0.35, + "w_goal": 60.0, + "w_controls": 0.0, + "w_orientation": 15.0, + "w_torso_proximity": 0.1, + "w_gripper_proximity": 4.0, + "orientation_threshold": 0.5, + "goal_distance_threshold": 0.5, + "goal_pos": [0.0, 0.0, 0.254] + }, + "optimizer": "cem", + "optimizer_config": { + "num_rollouts": 24, + "num_nodes": 3, + "use_noise_ramp": true, + "noise_ramp": 3.5, + "sigma_min": 0.1, + "sigma_max": 1.0, + "num_elites": 3 + } +} diff --git a/run_mpc/configs/spot_navigate.json b/run_mpc/configs/spot_navigate.json new file mode 100644 index 00000000..ad1c6e60 --- /dev/null +++ b/run_mpc/configs/spot_navigate.json @@ -0,0 +1,29 @@ +{ + "controller_config": { + "horizon": 2.0, + "control_freq": 20.0, + "spline_order": "linear", + "max_opt_iters": 1, + "max_num_traces": 5, + "action_normalizer": "none" + }, + "task": "spot_navigate", + "task_config": { + "fall_penalty": 2500.0, + "spot_fallen_threshold": 0.35, + "w_goal": 60.0, + "w_controls": 0.0, + "goal_distance_threshold": 0.5, + "goal_pos": [0.0, 0.0, 0.52] + }, + "optimizer": "cem", + "optimizer_config": { + "num_rollouts": 24, + "num_nodes": 3, + "use_noise_ramp": true, + "noise_ramp": 3.5, + "sigma_min": 0.1, + "sigma_max": 1.0, + "num_elites": 3 + } +} diff --git a/run_mpc/configs/spot_tire_roll.json b/run_mpc/configs/spot_tire_roll.json new file mode 100644 index 00000000..3b3dc68f --- /dev/null +++ b/run_mpc/configs/spot_tire_roll.json @@ -0,0 +1,37 @@ +{ + "controller_config": { + "horizon": 2.0, + "control_freq": 20.0, + "spline_order": "linear", + "max_opt_iters": 1, + "max_num_traces": 5, + "action_normalizer": "none" + }, + "task": "spot_tire_roll", + "task_config": { + "fall_penalty": 5000.0, + "spot_fallen_threshold": 0.35, + "tire_fallen_threshold": 0.1, + "w_goal": 60.0, + "w_controls": 0.0, + "w_torso_proximity": 1.0, + "torso_goal_offset": 1.0, + "w_gripper_proximity": 1.0, + "gripper_goal_offset": 0.15, + "gripper_goal_altitude": 0.05, + "w_tire_linear_velocity": 10.0, + "w_tire_angular_velocity": 0.30, + "goal_distance_threshold": 0.5, + "goal_pos": [0.0, 0.0, 0.33] + }, + "optimizer": "cem", + "optimizer_config": { + "num_rollouts": 24, + "num_nodes": 3, + "use_noise_ramp": true, + "noise_ramp": 3.5, + "sigma_min": 0.1, + "sigma_max": 1.0, + "num_elites": 3 + } +} diff --git a/run_mpc/main.py b/run_mpc/main.py index 7a96aaf1..b551bbfe 100644 --- a/run_mpc/main.py +++ b/run_mpc/main.py @@ -10,14 +10,13 @@ from pathlib import Path import numpy as np -from tqdm import tqdm import tyro - -from judo.visualizers.visualizer import Visualizer - from mpc_batch import run_mpc_batch from mpc_config import MPCTimers, PublicMPCConfig, decode_config, load_configs_from_json_data -from mpc_setup import save_results_to_h5, setup_mpc +from mpc_setup import clamp_for_mjwarp, save_results_to_h5, setup_mpc +from tqdm import tqdm + +from judo.visualizers.visualizer import Visualizer def _load_json_config(config_path: Path) -> tuple[dict, Path]: @@ -54,7 +53,17 @@ def run_mpc(config: PublicMPCConfig) -> None: json_configs, config_path = _load_json_config(config.config_path) task, optimizer, controller_cfg = load_configs_from_json_data(json_configs) - task.model.opt.density = 0 # disable fluid dynamics for mujoco_warp compatibility + clamp_for_mjwarp(task.model) + + # Fail early if require_success is set but the task has no success() implementation + from judo.tasks.base import Task # noqa: PLC0415 + + if config.require_success and type(task).success is Task.success: + raise ValueError( + f"Task '{json_configs['task']}' does not implement success(), " + f"so all trajectories will be discarded with --require-success (the default). " + f"Either add a success() method to the task or use --no-require-success." + ) num_parallel = min(config.num_parallel, config.num_trajectories) sims, batched_controllers, size_data = setup_mpc( @@ -74,7 +83,9 @@ def run_mpc(config: PublicMPCConfig) -> None: while len(all_results) < config.num_trajectories and total_attempted < max_attempts: batch_results = run_mpc_batch(sims, batched_controllers, config, size_data, timers, vis=vis) for result in batch_results: - if result["success"] and len(all_results) < config.num_trajectories: + if len(all_results) >= config.num_trajectories: + break + if not config.require_success or result["success"]: all_results.append(result) pbar.update(1) total_attempted += len(batch_results) diff --git a/run_mpc/mpc_batch.py b/run_mpc/mpc_batch.py index 947ae92c..2633583f 100644 --- a/run_mpc/mpc_batch.py +++ b/run_mpc/mpc_batch.py @@ -7,6 +7,7 @@ from typing import Any import numpy as np +from mpc_config import MPCTimers, PublicMPCConfig, SizeData from tqdm import tqdm from judo.app.structs import MujocoState @@ -16,18 +17,14 @@ from judo.simulation.policy_mj_simulation import PolicyMJSimulation from judo.visualizers.visualizer import Visualizer -from mpc_config import MPCTimers, PublicMPCConfig, SizeData - def _get_previous_actions(sims: list[MJSimulation]) -> list[np.ndarray | None]: """Get previous actions from sims for hierarchical control sync.""" - return [ - sim.last_policy_output if isinstance(sim, PolicyMJSimulation) else None - for sim in sims - ] + return [sim.last_policy_output if isinstance(sim, PolicyMJSimulation) else None for sim in sims] def update_visualization(visualizer: Visualizer, sim_state: MujocoState, traces: np.ndarray) -> None: + """Update the viser visualization with current sim state and traces.""" visualizer.data.xpos[:] = sim_state.xpos visualizer.data.xquat[:] = sim_state.xquat visualizer.viser_model.set_data(visualizer.data) @@ -69,17 +66,23 @@ def allocate(num_parallel: int, size_data: SizeData, config: PublicMPCConfig) -> if config.store_rollouts: storage.rollout_states = np.full( (num_parallel, sd.max_num_mpc_steps, sd.num_rollouts, sd.num_timesteps, sd.nq + sd.nv), - np.nan, dtype="float64", + np.nan, + dtype="float64", ) storage.rollout_controls = np.full( (num_parallel, sd.max_num_mpc_steps, sd.num_rollouts, sd.num_timesteps, sd.nu), - np.nan, dtype="float64", + np.nan, + dtype="float64", ) storage.rollout_rewards = np.full( - (num_parallel, sd.max_num_mpc_steps, sd.num_rollouts), -1, dtype="int", + (num_parallel, sd.max_num_mpc_steps, sd.num_rollouts), + -1, + dtype="int", ) storage.control_timesteps = np.full( - (num_parallel, sd.max_num_mpc_steps), -1, dtype="int", + (num_parallel, sd.max_num_mpc_steps), + -1, + dtype="int", ) return storage @@ -205,4 +208,6 @@ def run_mpc_batch( results = storage.package_results(config.max_num_task_steps) for i, sim in enumerate(sims): results[i]["success"] = sim.task.success(sim.task.model, sim.task.data) + if hasattr(sim.task.config, "goal_pos"): + results[i]["goal_pos"] = sim.task.config.goal_pos.copy() return results diff --git a/run_mpc/mpc_config.py b/run_mpc/mpc_config.py index 9c771226..e0f1649f 100644 --- a/run_mpc/mpc_config.py +++ b/run_mpc/mpc_config.py @@ -54,8 +54,10 @@ class PublicMPCConfig: control_freq: float | None = None # MPC control frequency in Hz. If None, use the controller config's frequency. store_rollouts: bool = True # Store open loop control inputs and state trajectories. store_viapoints: bool = True # Store open loop control of the best spline. + require_success: bool = True # Only keep trajectories where task.success() returns True. visualize: bool = False locomotion_policy_path: Path = SPOT_LOCOMOTION_POLICY_PATH + check_nan: bool = False # Check for NaN in mujoco_warp rollout outputs (for debugging). @dataclass @@ -146,6 +148,7 @@ class MPCTimers: @classmethod def create(cls) -> "MPCTimers": + """Create a new set of MPC timers.""" return cls( optimization=Timer("Opt", unit="ms"), sim_step=Timer("Sim", unit="ms"), @@ -154,6 +157,7 @@ def create(cls) -> "MPCTimers": ) def print_all(self) -> None: + """Print timing statistics for all MPC operations.""" logging.info("=== Performance Statistics ===") self.optimization.print_stats(logging.info) self.sim_step.print_stats(logging.info) diff --git a/run_mpc/mpc_setup.py b/run_mpc/mpc_setup.py index 3cdd04a7..4c07ad55 100644 --- a/run_mpc/mpc_setup.py +++ b/run_mpc/mpc_setup.py @@ -8,6 +8,7 @@ import h5py import numpy as np import warp as wp +from mpc_config import PublicMPCConfig, SizeData, make_size_data from judo.controller import BatchedControllers as JudoBatchedController from judo.controller import ControllerConfig @@ -18,12 +19,18 @@ from judo.tasks import Task as JudoTask from judo.utils.mjwarp_rollout_backend import MJWarpRolloutBackend -from mpc_config import PublicMPCConfig, SizeData, make_size_data +MJWARP_MIN_FRICTION = 0.01 # mujoco_warp minimum sliding friction; values below this cause NaN in contact solving + + +def clamp_for_mjwarp(model: "mujoco.MjModel") -> None: + """Apply model fixups for mujoco_warp compatibility.""" + # Disable fluid dynamics (not supported by mujoco_warp) + model.opt.density = 0 + # Clamp geom friction to mujoco_warp minimum to avoid NaN in contact solving + np.maximum(model.geom_friction, MJWARP_MIN_FRICTION, out=model.geom_friction) -def make_locomotion_controller( - use_spot: bool, policy_path: str | None, device: str -) -> BatchedSpotLocomotion | None: +def make_locomotion_controller(use_spot: bool, policy_path: str | None, device: str) -> BatchedSpotLocomotion | None: """Creates low-level locomotion controller if Spot task is used.""" if not use_spot or policy_path is None: return None @@ -54,8 +61,7 @@ def setup_mpc( else: sim = MJSimulation(init_task=json_configs["task"]) sim.task.config = copy.deepcopy(task.config) - # Disable fluid dynamics for mujoco_warp compatibility - sim.task.model.opt.density = 0 + clamp_for_mjwarp(sim.task.model) sims.append(sim) # Create shared GPU rollout backend for batched execution @@ -66,6 +72,7 @@ def setup_mpc( num_problems=num_parallel, locomotion_controller=locomotion_controller, device=device, + check_nan=config.check_nan, ) batched_controllers = JudoBatchedController(controller_cfg, task, optimizer, rollout_backend=rollout_backend) size_data = make_size_data(sims[0], batched_controllers.controllers[0], config) @@ -178,6 +185,16 @@ def save_results_to_h5( dtype="float64", ) + # Store goal_pos per trajectory if present + has_goal = "goal_pos" in all_results[0] + if has_goal: + goal_dim = len(all_results[0]["goal_pos"]) + goal_pos_dataset = f.create_dataset( + "goal_pos", + shape=(size_data.num_trajectories, goal_dim), + dtype="float64", + ) + # Store configuration data. f.attrs["config_path"] = str(config_path) f.attrs["num_parallel"] = num_parallel @@ -197,3 +214,5 @@ def save_results_to_h5( rollout_rewards_dataset[traj_idx] = result["rollout_rewards"] if config.store_viapoints: control_viapoints_dataset[traj_idx] = result["control_viapoints"] + if has_goal: + goal_pos_dataset[traj_idx] = result["goal_pos"] diff --git a/run_mpc/visualize_trajectories.py b/run_mpc/visualize_trajectories.py index 7c04b266..95b04540 100644 --- a/run_mpc/visualize_trajectories.py +++ b/run_mpc/visualize_trajectories.py @@ -8,11 +8,12 @@ import h5py import numpy as np import tyro -from judo.tasks import get_registered_tasks -from judo.visualizers.model import ViserMjModel from mujoco import MjData, mj_forward from viser import GuiEvent, ViserServer +from judo.tasks import get_registered_tasks +from judo.visualizers.model import ViserMjModel + def decode_config(obj: dict) -> dict: """Custom JSON decoder to handle NumPy arrays and Path strings.""" @@ -25,6 +26,7 @@ def decode_config(obj: dict) -> dict: def visualize_trajectory_hdf5_dataset(dataset_path: Path) -> None: + """Load and visualize trajectories from an HDF5 dataset.""" with h5py.File(str(dataset_path), "r") as f: # Read task name from HDF5 attrs (preferred), with fallback to config file if "task" in f.attrs: @@ -37,13 +39,18 @@ def visualize_trajectory_hdf5_dataset(dataset_path: Path) -> None: qpos_dataset = f["qpos"] trajectory_length_dataset = f["trajectory_length"] + goal_positions = np.array(f["goal_pos"]) if "goal_pos" in f else None - visualize_trajectory_batch(task_name, qpos_dataset, trajectory_length_dataset) + visualize_trajectory_batch(task_name, qpos_dataset, trajectory_length_dataset, goal_positions) def visualize_trajectory_batch( - task: str, qpos_batch: np.ndarray | h5py.Dataset, trajectory_lengths: Optional[np.ndarray | h5py.Dataset] = None + task: str, + qpos_batch: np.ndarray | h5py.Dataset, + trajectory_lengths: Optional[np.ndarray | h5py.Dataset] = None, + goal_positions: Optional[np.ndarray] = None, ) -> None: + """Visualize a batch of trajectories in viser.""" server = ViserServer() registered_tasks = get_registered_tasks() @@ -58,6 +65,17 @@ def visualize_trajectory_batch( task_instance.data = MjData(task_instance.model) viser_mjmodel = ViserMjModel(server, task_instance.spec) + # Render goal position marker if available + goal_handle = None + if goal_positions is not None: + goal = goal_positions[0] + goal_handle = server.scene.add_icosphere( + "/goal_marker", + radius=0.1, + color=(0, 255, 0), + position=(goal[0], goal[1], 0.0), + ) + # Create GUI elements for controlling visualizer. running = False pause_button = server.gui.add_button("Start playback") @@ -73,7 +91,7 @@ def cycle_pause_button() -> None: @pause_button.on_click def cycle_pause_button_callback(_: GuiEvent) -> None: - """More info about GUI callbacks in viser: https://viser.studio/versions/0.2.7/examples/03_gui_callbacks""" + """Handle GUI callback.""" cycle_pause_button() trajectory_slider = server.gui.add_slider( @@ -94,7 +112,7 @@ def cycle_pause_button_callback(_: GuiEvent) -> None: @trajectory_slider.on_update def trajectory_slider_on_update_callback(_: GuiEvent) -> None: - """More info about GUI callbacks in viser: https://viser.studio/versions/0.2.7/examples/03_gui_callbacks""" + """Handle GUI callback.""" # Reset timestep to zero for new trajectory. timestep_slider.value = 0 # Change timestep bounds. @@ -102,10 +120,14 @@ def trajectory_slider_on_update_callback(_: GuiEvent) -> None: nonlocal curr_trajectory_length curr_trajectory_length = trajectory_lengths[trajectory_slider.value] - 1 timestep_slider.max = curr_trajectory_length + # Update goal marker position for this trajectory + if goal_handle is not None and goal_positions is not None: + goal = goal_positions[trajectory_slider.value] + goal_handle.position = (goal[0], goal[1], 0.0) @timestep_slider.on_update def timestep_slider_on_update_callback(_: GuiEvent) -> None: - """More info about GUI callbacks in viser: https://viser.studio/versions/0.2.7/examples/03_gui_callbacks""" + """Handle GUI callback.""" # Update the viser_mjmodel's data object qpos_value = qpos_batch[trajectory_slider.value, timestep_slider.value] task_instance.data.qpos[:] = qpos_value diff --git a/tests/test_run_mpc.py b/tests/test_run_mpc.py new file mode 100644 index 00000000..c956eea2 --- /dev/null +++ b/tests/test_run_mpc.py @@ -0,0 +1,169 @@ +# Copyright (c) 2025 Robotics and AI Institute LLC. All rights reserved. + +"""End-to-end tests for run_mpc: config loading, MPC execution, data collection, and H5 output.""" + +import json +import sys +from pathlib import Path +from typing import Any + +import h5py +import numpy as np +import pytest + +# Add run_mpc to path so we can import its modules directly (they use relative imports) +sys.path.insert(0, str(Path(__file__).resolve().parent.parent / "run_mpc")) + +from mpc_batch import run_mpc_batch +from mpc_config import MPCTimers, PublicMPCConfig, decode_config, load_configs_from_json_data +from mpc_setup import clamp_for_mjwarp, save_results_to_h5, setup_mpc + +CONFIGS_DIR = Path(__file__).resolve().parent.parent / "run_mpc" / "configs" + +# Tasks to run end-to-end: (task_name, config_file, expected_nu, is_spot) +# expected_nu: number of task-level control dimensions (not model actuators) +# is_spot: whether the task uses a locomotion policy (affects sim backend) +E2E_TASKS = [ + ("cartpole", "cartpole.json", 1, False), + ("cylinder_push", "cylinder_push.json", 2, False), + ("spot_navigate", "spot_navigate.json", 3, True), + ("spot_box_push", "spot_box_push.json", 10, True), + ("spot_tire_roll", "spot_tire_roll.json", 11, True), + ("spot_tire_upright", "spot_tire_upright.json", 17, True), +] + +MAX_NUM_TASK_STEPS = 10 + + +def _load_json(config_name: str) -> dict: + """Load and decode a JSON config file.""" + config_path = CONFIGS_DIR / config_name + with open(config_path) as f: + return json.load(f, object_hook=decode_config) + + +def _make_config(config_file: str) -> PublicMPCConfig: + """Create a lightweight MPC config for testing.""" + return PublicMPCConfig( + config_path=CONFIGS_DIR / config_file, + num_trajectories=1, + num_parallel=1, + max_num_task_steps=MAX_NUM_TASK_STEPS, + store_rollouts=True, + store_viapoints=True, + require_success=False, + ) + + +# Module-scoped fixture: runs MPC once per task, shared across all tests. +@pytest.fixture(scope="module", params=E2E_TASKS, ids=[t[0] for t in E2E_TASKS]) +def mpc_run(request: pytest.FixtureRequest, tmp_path_factory: pytest.TempPathFactory) -> dict[str, Any]: + """Set up and run MPC for a single task, returning all artifacts for inspection.""" + task_name, config_file, expected_nu, is_spot = request.param + + json_data = _load_json(config_file) + task, optimizer, controller_cfg = load_configs_from_json_data(json_data) + clamp_for_mjwarp(task.model) + + config = _make_config(config_file) + sims, batched_controllers, size_data = setup_mpc( + config, json_data, task, optimizer, controller_cfg, config.num_parallel + ) + + timers = MPCTimers.create() + batch_results = run_mpc_batch(sims, batched_controllers, config, size_data, timers) + + # Save to H5 + tmp_dir = tmp_path_factory.mktemp(task_name) + output_path = tmp_dir / "trajectories.h5" + size_data.num_trajectories = len(batch_results) + save_results_to_h5( + output_path, + batch_results, + size_data, + config, + CONFIGS_DIR / config_file, + json_data, + config.num_parallel, + ) + + return { + "task_name": task_name, + "expected_nu": expected_nu, + "is_spot": is_spot, + "task": task, + "config": config, + "size_data": size_data, + "results": batch_results, + "h5_path": output_path, + } + + +class TestMPCExecution: + """Test that MPC runs and produces valid trajectory data.""" + + def test_result_keys(self, mpc_run: dict[str, Any]) -> None: + """Each result dict should contain required trajectory data keys.""" + result = mpc_run["results"][0] + required_keys = {"task_step", "qpos", "qvel", "control", "sensor", "reward", "success"} + assert required_keys.issubset(result.keys()) + + def test_qpos_shape(self, mpc_run: dict[str, Any]) -> None: + """Qpos shape should match (max_steps, nq).""" + result = mpc_run["results"][0] + nq = mpc_run["task"].model.nq + assert result["qpos"].shape == (MAX_NUM_TASK_STEPS, nq) + + def test_qvel_shape(self, mpc_run: dict[str, Any]) -> None: + """Qvel shape should match (max_steps, nv).""" + result = mpc_run["results"][0] + nv = mpc_run["task"].model.nv + assert result["qvel"].shape == (MAX_NUM_TASK_STEPS, nv) + + def test_control_shape(self, mpc_run: dict[str, Any]) -> None: + """Control shape should match (max_steps, expected_nu).""" + result = mpc_run["results"][0] + assert result["control"].shape == (MAX_NUM_TASK_STEPS, mpc_run["expected_nu"]) + + def test_reward_shape_and_finite(self, mpc_run: dict[str, Any]) -> None: + """Rewards should be finite with correct shape.""" + result = mpc_run["results"][0] + assert result["reward"].shape == (MAX_NUM_TASK_STEPS,) + assert np.all(np.isfinite(result["reward"])) + + def test_qpos_has_data(self, mpc_run: dict[str, Any]) -> None: + """Qpos should have real data, not all NaN.""" + result = mpc_run["results"][0] + assert not np.all(np.isnan(result["qpos"])) + + def test_rollout_and_viapoint_data_present(self, mpc_run: dict[str, Any]) -> None: + """Rollout and viapoint data should be stored when requested.""" + result = mpc_run["results"][0] + assert "rollout_states" in result + assert "rollout_controls" in result + assert "rollout_rewards" in result + assert "control_viapoints" in result + + +class TestH5Output: + """Test saving results to HDF5 and reading them back.""" + + def test_h5_structure(self, mpc_run: dict[str, Any]) -> None: + """HDF5 file should have correct dataset shapes and metadata.""" + h5_path = mpc_run["h5_path"] + task = mpc_run["task"] + num_saved = len(mpc_run["results"]) + + with h5py.File(str(h5_path), "r") as f: + assert f["qpos"].shape == (num_saved, MAX_NUM_TASK_STEPS, task.model.nq) + assert f["qvel"].shape == (num_saved, MAX_NUM_TASK_STEPS, task.model.nv) + assert f["control"].shape == (num_saved, MAX_NUM_TASK_STEPS, mpc_run["expected_nu"]) + assert f["sensor"].shape == (num_saved, MAX_NUM_TASK_STEPS, task.model.nsensordata) + assert f["reward"].shape == (num_saved, MAX_NUM_TASK_STEPS) + assert f["trajectory_length"].shape == (num_saved,) + + assert "rollout_states" in f + assert "control_viapoints" in f + assert "task" in f.attrs + + assert np.any(np.isfinite(f["qpos"][0])) From c7e527bac93492dc7bbb1cdfc30b3e2cd2812280 Mon Sep 17 00:00:00 2001 From: Duy Ta Date: Thu, 19 Mar 2026 16:09:24 -0400 Subject: [PATCH 05/12] precommit --- .github/workflows/precommit.yml | 9 +++--- .github/workflows/test_gpu.yml | 2 +- judo/controller/batched_spot_locomotion.py | 24 +++++++-------- judo/controller/controller.py | 4 +-- judo/utils/mjwarp_rollout_backend.py | 34 ++++++++++++---------- pixi.lock | 2 +- pyproject.toml | 3 +- tests/test_run_mpc.py | 21 ++++++++----- 8 files changed, 56 insertions(+), 43 deletions(-) diff --git a/.github/workflows/precommit.yml b/.github/workflows/precommit.yml index aa647795..b367f610 100644 --- a/.github/workflows/precommit.yml +++ b/.github/workflows/precommit.yml @@ -18,6 +18,7 @@ jobs: - uses: prefix-dev/setup-pixi@v0.9.3 with: pixi-version: latest + environments: dev-mjwarp cache: true # ── Stubs cache ──────────────────────────────────────────────── @@ -30,14 +31,14 @@ jobs: - name: Generate stubs if cache miss if: steps.typings-cache.outputs.cache-hit != 'true' - run: pixi run -e dev pybind11-stubgen mujoco -o typings/ + run: pixi run -e dev-mjwarp pybind11-stubgen mujoco -o typings/ # ── Linting & type checking ──────────────────────────────────── - name: Run Ruff Linter - run: pixi run -e dev ruff check judo/ tests/ --output-format=github + run: pixi run -e dev-mjwarp ruff check judo/ tests/ --output-format=github - name: Run Ruff Formatter - run: pixi run -e dev ruff format judo/ tests/ --diff + run: pixi run -e dev-mjwarp ruff format judo/ tests/ --diff - name: Run Pyright - run: pixi run -e dev pyright + run: pixi run -e dev-mjwarp pyright diff --git a/.github/workflows/test_gpu.yml b/.github/workflows/test_gpu.yml index 2c404c5e..c40e5c31 100644 --- a/.github/workflows/test_gpu.yml +++ b/.github/workflows/test_gpu.yml @@ -11,7 +11,7 @@ permissions: jobs: test-mjwarp: - runs-on: [self-hosted, gpu] + runs-on: k8s-n1-standard-16-1x-t4-dockerless timeout-minutes: 30 steps: diff --git a/judo/controller/batched_spot_locomotion.py b/judo/controller/batched_spot_locomotion.py index f633b88a..9531301f 100644 --- a/judo/controller/batched_spot_locomotion.py +++ b/judo/controller/batched_spot_locomotion.py @@ -20,13 +20,13 @@ @wp.kernel def build_observation_kernel( - qpos: wp.array2d(dtype=wp.float32), - qvel: wp.array2d(dtype=wp.float32), - cmd: wp.array2d(dtype=wp.float32), - prev_actions: wp.array2d(dtype=wp.float32), - joints_offset: wp.array(dtype=wp.float32), - mj_to_isaac: wp.array(dtype=wp.int32), - obs: wp.array2d(dtype=wp.float32), + qpos: wp.array2d(dtype=wp.float32), # pyright: ignore[reportInvalidTypeForm] + qvel: wp.array2d(dtype=wp.float32), # pyright: ignore[reportInvalidTypeForm] + cmd: wp.array2d(dtype=wp.float32), # pyright: ignore[reportInvalidTypeForm] + prev_actions: wp.array2d(dtype=wp.float32), # pyright: ignore[reportInvalidTypeForm] + joints_offset: wp.array(dtype=wp.float32), # pyright: ignore[reportInvalidTypeForm] + mj_to_isaac: wp.array(dtype=wp.int32), # pyright: ignore[reportInvalidTypeForm] + obs: wp.array2d(dtype=wp.float32), # pyright: ignore[reportInvalidTypeForm] ) -> None: """Build 84-dim observation from state, command, and previous actions. @@ -97,12 +97,12 @@ def build_observation_kernel( @wp.kernel def compute_targets_kernel( - actions: wp.array2d(dtype=wp.float32), - cmd: wp.array2d(dtype=wp.float32), - legs_offset: wp.array(dtype=wp.float32), - isaac_to_mj: wp.array(dtype=wp.int32), + actions: wp.array2d(dtype=wp.float32), # pyright: ignore[reportInvalidTypeForm] + cmd: wp.array2d(dtype=wp.float32), # pyright: ignore[reportInvalidTypeForm] + legs_offset: wp.array(dtype=wp.float32), # pyright: ignore[reportInvalidTypeForm] + isaac_to_mj: wp.array(dtype=wp.int32), # pyright: ignore[reportInvalidTypeForm] action_scale: float, - target_q: wp.array2d(dtype=wp.float32), + target_q: wp.array2d(dtype=wp.float32), # pyright: ignore[reportInvalidTypeForm] ) -> None: """Post-process policy actions into 19-dim target_q. diff --git a/judo/controller/controller.py b/judo/controller/controller.py index 51d72b1a..fc25fb94 100644 --- a/judo/controller/controller.py +++ b/judo/controller/controller.py @@ -55,7 +55,7 @@ def __init__( controller_config: ControllerConfig, task: Task, optimizer: Optimizer, - rollout_backend: Literal["mujoco"] | "MJWarpRolloutBackend" = "mujoco", + rollout_backend: "Literal['mujoco'] | MJWarpRolloutBackend" = "mujoco", ) -> None: """Initialize the controller. @@ -662,7 +662,7 @@ def make_controller( init_optimizer: str, task_registration_cfg: DictConfig | None = None, optimizer_registration_cfg: DictConfig | None = None, - rollout_backend: Literal["mujoco"] | "MJWarpRolloutBackend" = "mujoco", + rollout_backend: "Literal['mujoco'] | MJWarpRolloutBackend" = "mujoco", ) -> Controller: """Make a controller. diff --git a/judo/utils/mjwarp_rollout_backend.py b/judo/utils/mjwarp_rollout_backend.py index f1a87cc9..981547ad 100644 --- a/judo/utils/mjwarp_rollout_backend.py +++ b/judo/utils/mjwarp_rollout_backend.py @@ -23,8 +23,8 @@ @wp.kernel def _copy_target_to_ctrl( - target_q: wp.array2d(dtype=wp.float32), - ctrl: wp.array2d(dtype=wp.float32), + target_q: wp.array2d(dtype=wp.float32), # pyright: ignore[reportInvalidTypeForm] + ctrl: wp.array2d(dtype=wp.float32), # pyright: ignore[reportInvalidTypeForm] n_controlled: int, ) -> None: """Copy target_q into the first n_controlled columns of ctrl.""" @@ -180,9 +180,10 @@ def rollout( out_qvel_wp = wp.zeros((num_worlds, horizon, nv), dtype=wp.float32) out_sensors_wp = wp.zeros((num_worlds, horizon, nsensordata), dtype=wp.float32) - wp.copy(self.mjw_data.time, full_states_wp[:, 0]) - wp.copy(self.mjw_data.qpos, full_states_wp[:, 1 : nq + 1]) - wp.copy(self.mjw_data.qvel, full_states_wp[:, 1 + nq : nq + nv + 1]) + # warp stubs type array slices as indexedarray, but wp.copy accepts them at runtime + wp.copy(self.mjw_data.time, full_states_wp[:, 0]) # pyright: ignore[reportArgumentType] + wp.copy(self.mjw_data.qpos, full_states_wp[:, 1 : nq + 1]) # pyright: ignore[reportArgumentType] + wp.copy(self.mjw_data.qvel, full_states_wp[:, 1 + nq : nq + nv + 1]) # pyright: ignore[reportArgumentType] wp.synchronize() self.timer_cpu_to_gpu.toc() @@ -260,11 +261,11 @@ def _rollout_direct( Pipelines all GPU operations with a single sync at the end (done by caller). """ for t in range(horizon): - wp.copy(self.mjw_data.ctrl, controls_wp[:, t, :]) - wp.capture_launch(self.mjw_step_graph) - wp.copy(out_qpos_wp[:, t, :], self.mjw_data.qpos) - wp.copy(out_qvel_wp[:, t, :], self.mjw_data.qvel) - wp.copy(out_sensors_wp[:, t, :], self.mjw_data.sensordata) + wp.copy(self.mjw_data.ctrl, controls_wp[:, t, :]) # pyright: ignore[reportArgumentType] + wp.capture_launch(self.mjw_step_graph) # pyright: ignore[reportArgumentType] + wp.copy(out_qpos_wp[:, t, :], self.mjw_data.qpos) # pyright: ignore[reportArgumentType] + wp.copy(out_qvel_wp[:, t, :], self.mjw_data.qvel) # pyright: ignore[reportArgumentType] + wp.copy(out_sensors_wp[:, t, :], self.mjw_data.sensordata) # pyright: ignore[reportArgumentType] def _rollout_with_locomotion_policy( self, @@ -294,7 +295,10 @@ def _rollout_with_locomotion_policy( # Update locomotion policy at the policy's target frequency if target_q_wp is None or self.global_step_counter % self.policy_decimation == 0: target_q_wp, previous_actions_wp = self.locomotion_controller.compute_batch( - cmd_wp, qpos_wp, qvel_wp, previous_actions_wp + cmd_wp, # pyright: ignore[reportArgumentType] + qpos_wp, + qvel_wp, + previous_actions_wp, ) # Copy target_q into ctrl (pad remaining actuators with zeros) @@ -307,15 +311,15 @@ def _rollout_with_locomotion_policy( ) wp.copy(self.mjw_data.ctrl, ctrl_wp) - wp.capture_launch(self.mjw_step_graph) + wp.capture_launch(self.mjw_step_graph) # pyright: ignore[reportArgumentType] self.global_step_counter += 1 wp.copy(qpos_wp, self.mjw_data.qpos) wp.copy(qvel_wp, self.mjw_data.qvel) - wp.copy(out_qpos_wp[:, t, :], self.mjw_data.qpos) - wp.copy(out_qvel_wp[:, t, :], self.mjw_data.qvel) - wp.copy(out_sensors_wp[:, t, :], self.mjw_data.sensordata) + wp.copy(out_qpos_wp[:, t, :], self.mjw_data.qpos) # pyright: ignore[reportArgumentType] + wp.copy(out_qvel_wp[:, t, :], self.mjw_data.qvel) # pyright: ignore[reportArgumentType] + wp.copy(out_sensors_wp[:, t, :], self.mjw_data.sensordata) # pyright: ignore[reportArgumentType] return previous_actions_wp diff --git a/pixi.lock b/pixi.lock index 7e536b26..a142c2f3 100644 --- a/pixi.lock +++ b/pixi.lock @@ -5833,7 +5833,7 @@ packages: - pypi: ./ name: judo-rai version: 0.0.7 - sha256: c22b20758520ea8a41d184fb41ac8e29bb05d99f5c2d1789f95b9df8cd57bee4 + sha256: 056b31bdaaef17da747d33684550472c5235f9717016a2f8bc6ed472c8ab1450 requires_dist: - dora-utils - h5py diff --git a/pyproject.toml b/pyproject.toml index 3f8d2b17..7cd48d5a 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -107,13 +107,14 @@ include = ["judo", "tests"] exclude = [ "**/__pycache__", ] +extraPaths = ["run_mpc"] # mpc_batch, mpc_config, mpc_setup are imported via sys.path at runtime defineConstant = { DEBUG = true } stubPath = "typings" -reportMissingImports = "warning" reportMissingTypeStubs = false reportPrivateImportUsage = false + pythonVersion = "3.13" pythonPlatform = "Linux" diff --git a/tests/test_run_mpc.py b/tests/test_run_mpc.py index c956eea2..1f1973bb 100644 --- a/tests/test_run_mpc.py +++ b/tests/test_run_mpc.py @@ -155,15 +155,22 @@ def test_h5_structure(self, mpc_run: dict[str, Any]) -> None: num_saved = len(mpc_run["results"]) with h5py.File(str(h5_path), "r") as f: - assert f["qpos"].shape == (num_saved, MAX_NUM_TASK_STEPS, task.model.nq) - assert f["qvel"].shape == (num_saved, MAX_NUM_TASK_STEPS, task.model.nv) - assert f["control"].shape == (num_saved, MAX_NUM_TASK_STEPS, mpc_run["expected_nu"]) - assert f["sensor"].shape == (num_saved, MAX_NUM_TASK_STEPS, task.model.nsensordata) - assert f["reward"].shape == (num_saved, MAX_NUM_TASK_STEPS) - assert f["trajectory_length"].shape == (num_saved,) + qpos_ds: h5py.Dataset = f["qpos"] # type: ignore[assignment] + qvel_ds: h5py.Dataset = f["qvel"] # type: ignore[assignment] + control_ds: h5py.Dataset = f["control"] # type: ignore[assignment] + sensor_ds: h5py.Dataset = f["sensor"] # type: ignore[assignment] + reward_ds: h5py.Dataset = f["reward"] # type: ignore[assignment] + traj_len_ds: h5py.Dataset = f["trajectory_length"] # type: ignore[assignment] + + assert qpos_ds.shape == (num_saved, MAX_NUM_TASK_STEPS, task.model.nq) + assert qvel_ds.shape == (num_saved, MAX_NUM_TASK_STEPS, task.model.nv) + assert control_ds.shape == (num_saved, MAX_NUM_TASK_STEPS, mpc_run["expected_nu"]) + assert sensor_ds.shape == (num_saved, MAX_NUM_TASK_STEPS, task.model.nsensordata) + assert reward_ds.shape == (num_saved, MAX_NUM_TASK_STEPS) + assert traj_len_ds.shape == (num_saved,) assert "rollout_states" in f assert "control_viapoints" in f assert "task" in f.attrs - assert np.any(np.isfinite(f["qpos"][0])) + assert np.any(np.isfinite(qpos_ds[0])) From 19cb190b63cac2918f7b37030f53067b16dab1b3 Mon Sep 17 00:00:00 2001 From: Duy Ta Date: Thu, 19 Mar 2026 16:22:56 -0400 Subject: [PATCH 06/12] remove test_run_mpc.py from test.yaml which only run on cpu runners --- .github/workflows/test.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 96b263ef..f1c34f25 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -62,4 +62,4 @@ jobs: # ── Tests ─────────────────────────────────────────────────────── - name: Run tests - run: pixi run -e ${{ matrix.pixi-env }} pytest -rsx + run: pixi run -e ${{ matrix.pixi-env }} pytest -rsx --ignore=tests/test_run_mpc.py From 25f5b914b092103a49f641ae58b7373a53dcc122 Mon Sep 17 00:00:00 2001 From: Duy Ta Date: Thu, 19 Mar 2026 17:34:35 -0400 Subject: [PATCH 07/12] structure changes --- .github/workflows/test.yml | 2 +- .github/workflows/test_gpu.yml | 6 +-- pixi.lock | 2 +- pyproject.toml | 7 ++-- run_mpc/README.md | 69 ++++++++++++++++++++----------- run_mpc/__init__.py | 1 + run_mpc/{main.py => cli.py} | 14 ++++--- run_mpc/mpc_batch.py | 2 +- run_mpc/mpc_setup.py | 17 ++++---- run_mpc/visualize_trajectories.py | 6 +-- tests/test_run_mpc.py | 18 +++++--- 11 files changed, 86 insertions(+), 58 deletions(-) create mode 100644 run_mpc/__init__.py rename run_mpc/{main.py => cli.py} (92%) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index f1c34f25..96b263ef 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -62,4 +62,4 @@ jobs: # ── Tests ─────────────────────────────────────────────────────── - name: Run tests - run: pixi run -e ${{ matrix.pixi-env }} pytest -rsx --ignore=tests/test_run_mpc.py + run: pixi run -e ${{ matrix.pixi-env }} pytest -rsx diff --git a/.github/workflows/test_gpu.yml b/.github/workflows/test_gpu.yml index c40e5c31..8d3d6a9c 100644 --- a/.github/workflows/test_gpu.yml +++ b/.github/workflows/test_gpu.yml @@ -1,10 +1,8 @@ name: Test (GPU / MJWarp) +# Disabled: no GPU runners available yet. Run tests manually (see run_mpc/README.md). on: - push: - branches: [main] - pull_request: - branches: [main] + workflow_dispatch: {} permissions: contents: read diff --git a/pixi.lock b/pixi.lock index a142c2f3..3be61d87 100644 --- a/pixi.lock +++ b/pixi.lock @@ -5833,7 +5833,7 @@ packages: - pypi: ./ name: judo-rai version: 0.0.7 - sha256: 056b31bdaaef17da747d33684550472c5235f9717016a2f8bc6ed472c8ab1450 + sha256: 6a4a6654a401fc22641750f0aa84ef3d1ee4e0c6520a9a0eb189665c6bf787ae requires_dist: - dora-utils - h5py diff --git a/pyproject.toml b/pyproject.toml index 7cd48d5a..c3f27d79 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -49,12 +49,13 @@ dependencies = [ [project.scripts] judo = "judo.cli:app" benchmark = "judo.cli:benchmark" +run_mpc = "run_mpc.cli:main" [tool.hatch.metadata] allow-direct-references = true [tool.hatch.build.targets.wheel] -packages = ["judo", "mujoco_extensions"] +packages = ["judo", "mujoco_extensions", "run_mpc"] artifacts = ["mujoco_extensions/**/policy_rollout_pybind*.so", "judo/app/asset/*"] exclude = [ "judo/models/meshes", @@ -103,11 +104,10 @@ testpaths = [ ] [tool.pyright] -include = ["judo", "tests"] +include = ["judo", "tests", "run_mpc"] exclude = [ "**/__pycache__", ] -extraPaths = ["run_mpc"] # mpc_batch, mpc_config, mpc_setup are imported via sys.path at runtime defineConstant = { DEBUG = true } stubPath = "typings" @@ -218,6 +218,7 @@ build = { cmd = "cmake --build mujoco_extensions/build -j8", depends-on = ["conf clean = { cmd = "rm -rf mujoco_extensions/build mujoco_extensions/policy_rollout/*.so", description = "Clean mujoco_extensions build artifacts" } upload-meshes = { cmd = "bash scripts/upload_meshes.sh", description = "Zip and upload meshes to latest GitHub release" } build-wheel = { cmd = "rm -rf dist && python -m build --wheel --outdir dist && bash scripts/repair_wheel.sh dist/*.whl wheelhouse \"\" $(python -c \"import sys; print(f'cp{sys.version_info[0]}{sys.version_info[1]}')\")", depends-on = ["clean", "build"], description = "Build manylinux wheel with auditwheel" } +run_mpc = { cmd = "run_mpc", description = "Run batched MPC (pass args after --)" } [tool.pixi.activation.env] LD_LIBRARY_PATH = "$CONDA_PREFIX/lib:$LD_LIBRARY_PATH" diff --git a/run_mpc/README.md b/run_mpc/README.md index b4db2588..6b070946 100644 --- a/run_mpc/README.md +++ b/run_mpc/README.md @@ -1,10 +1,10 @@ -# `run_mpc/main.py` +# `run_mpc` Run batched MPC rollouts from a JSON config and save successful trajectories to an HDF5 dataset. ## Prerequisite -This script must be run in the `mjwarp` pixi environment: +This must be run in the `mjwarp` pixi environment (requires GPU): ```bash pixi shell -e mjwarp @@ -15,20 +15,18 @@ Run commands below from the repository root (`judo/`). ## Basic usage ```bash -python run_mpc/main.py --config-path run_mpc/configs/spot_tire_upright.json +run_mpc --config-path run_mpc/configs/cylinder_push.json ``` -By default, this writes output to: - -- `run_mpc/configs/trajectories.h5` +By default, this writes output to `run_mpc/configs/trajectories.h5`. ## Common examples Run 50 trajectories with 8 in parallel: ```bash -python run_mpc/main.py \ - --config-path run_mpc/configs/spot_tire_upright.json \ +run_mpc \ + --config-path run_mpc/configs/cylinder_push.json \ --num-trajectories 50 \ --num-parallel 8 ``` @@ -36,16 +34,16 @@ python run_mpc/main.py \ Choose a custom output file: ```bash -python run_mpc/main.py \ - --config-path run_mpc/configs/spot_tire_upright.json \ - --dataset-output-path outputs/mpc/spot_tire_upright.h5 +run_mpc \ + --config-path run_mpc/configs/spot_navigate.json \ + --dataset-output-path outputs/mpc/spot_navigate.h5 ``` -Enable visualization (no parallel, single env only): +Enable visualization (single trajectory only): ```bash -python run_mpc/main.py \ - --config-path run_mpc/configs/spot_tire_upright.json \ +run_mpc \ + --config-path run_mpc/configs/spot_navigate.json \ --num-parallel 1 \ --visualize ``` @@ -53,30 +51,51 @@ python run_mpc/main.py \ ## Skip success filtering By default, only trajectories where `task.success()` returns `True` are saved. -For tasks without a meaningful success criterion, use `--no-require-success` to keep all trajectories: +For tasks without a `success()` implementation, the CLI raises an error upfront. +Use `--no-require-success` to collect all trajectories regardless: ```bash -python run_mpc/main.py \ - --config-path run_mpc/configs/cylinder_push.json \ +run_mpc \ + --config-path run_mpc/configs/cartpole.json \ --no-require-success ``` -> **TODO(dta-bdai):** Not all tasks (especially non-spot tasks) have a `success()` implementation. -> Tasks missing an override inherit `return False` from the base class, which causes 0% success rate. -> Add `success()` to remaining tasks: `cartpole`, `fr3_pick`, `leap_cube`, `leap_cube_down`, `caltech_leap_cube`. +## Debug NaN issues + +Enable `--check-nan` to log warnings when mujoco_warp rollouts produce NaN +(common with low-friction contacts): + +```bash +run_mpc \ + --config-path run_mpc/configs/cylinder_push.json \ + --check-nan +``` -## Visualize the dataset +## Visualize trajectories After generating trajectories, visualize them with: ```bash -python run_mpc/visualize_trajectories.py --dataset-path +python run_mpc/visualize_trajectories.py --dataset-path run_mpc/configs/trajectories.h5 ``` -Replace `` with the path used during generation (default: `run_mpc/configs/trajectories.h5`). +## Without entering shell + +```bash +pixi run -e mjwarp run_mpc -- --config-path run_mpc/configs/cylinder_push.json +``` -## One-liner without entering shell +## Running tests + +The MPC tests (`tests/test_run_mpc.py`) require a CUDA GPU and the `dev-mjwarp` pixi +environment. They are automatically skipped on machines without a GPU. + +There is no GPU runner on CI for this public repo yet, so these tests must be run manually: ```bash -pixi run -e mjwarp python run_mpc/main.py --config-path run_mpc/configs/spot_tire_upright.json +pixi run -e dev-mjwarp pytest tests/test_run_mpc.py -v ``` + +This runs end-to-end tests for all tasks (cartpole, cylinder_push, spot_navigate, +spot_box_push, spot_tire_roll, spot_tire_upright), verifying MPC execution, trajectory +shapes, reward values, and HDF5 output. diff --git a/run_mpc/__init__.py b/run_mpc/__init__.py new file mode 100644 index 00000000..4d3e2daf --- /dev/null +++ b/run_mpc/__init__.py @@ -0,0 +1 @@ +# Copyright (c) 2025 Robotics and AI Institute LLC. All rights reserved. diff --git a/run_mpc/main.py b/run_mpc/cli.py similarity index 92% rename from run_mpc/main.py rename to run_mpc/cli.py index b551bbfe..b42420d1 100644 --- a/run_mpc/main.py +++ b/run_mpc/cli.py @@ -2,7 +2,7 @@ """Entry point for running batched MPC and saving trajectories to HDF5. -Usage: python scripts/run_mpc --config-path +Usage: python -m run_mpc --config-path """ import json @@ -10,13 +10,12 @@ from pathlib import Path import numpy as np -import tyro -from mpc_batch import run_mpc_batch -from mpc_config import MPCTimers, PublicMPCConfig, decode_config, load_configs_from_json_data -from mpc_setup import clamp_for_mjwarp, save_results_to_h5, setup_mpc from tqdm import tqdm from judo.visualizers.visualizer import Visualizer +from run_mpc.mpc_batch import run_mpc_batch +from run_mpc.mpc_config import MPCTimers, PublicMPCConfig, decode_config, load_configs_from_json_data +from run_mpc.mpc_setup import clamp_for_mjwarp, save_results_to_h5, setup_mpc def _load_json_config(config_path: Path) -> tuple[dict, Path]: @@ -112,5 +111,8 @@ def run_mpc(config: PublicMPCConfig) -> None: batched_controllers.print_timer_stats() -if __name__ == "__main__": +def main() -> None: + """CLI entry point for run-mpc.""" + import tyro # noqa: PLC0415 + run_mpc(tyro.cli(PublicMPCConfig)) diff --git a/run_mpc/mpc_batch.py b/run_mpc/mpc_batch.py index 2633583f..1c9f367e 100644 --- a/run_mpc/mpc_batch.py +++ b/run_mpc/mpc_batch.py @@ -7,7 +7,6 @@ from typing import Any import numpy as np -from mpc_config import MPCTimers, PublicMPCConfig, SizeData from tqdm import tqdm from judo.app.structs import MujocoState @@ -16,6 +15,7 @@ from judo.simulation.mj_simulation import MJSimulation from judo.simulation.policy_mj_simulation import PolicyMJSimulation from judo.visualizers.visualizer import Visualizer +from run_mpc.mpc_config import MPCTimers, PublicMPCConfig, SizeData def _get_previous_actions(sims: list[MJSimulation]) -> list[np.ndarray | None]: diff --git a/run_mpc/mpc_setup.py b/run_mpc/mpc_setup.py index 4c07ad55..b161ad8c 100644 --- a/run_mpc/mpc_setup.py +++ b/run_mpc/mpc_setup.py @@ -8,7 +8,7 @@ import h5py import numpy as np import warp as wp -from mpc_config import PublicMPCConfig, SizeData, make_size_data +from mujoco import MjModel from judo.controller import BatchedControllers as JudoBatchedController from judo.controller import ControllerConfig @@ -18,11 +18,12 @@ from judo.simulation.policy_mj_simulation import PolicyMJSimulation from judo.tasks import Task as JudoTask from judo.utils.mjwarp_rollout_backend import MJWarpRolloutBackend +from run_mpc.mpc_config import PublicMPCConfig, SizeData, make_size_data MJWARP_MIN_FRICTION = 0.01 # mujoco_warp minimum sliding friction; values below this cause NaN in contact solving -def clamp_for_mjwarp(model: "mujoco.MjModel") -> None: +def clamp_for_mjwarp(model: MjModel) -> None: """Apply model fixups for mujoco_warp compatibility.""" # Disable fluid dynamics (not supported by mujoco_warp) model.opt.density = 0 @@ -188,7 +189,7 @@ def save_results_to_h5( # Store goal_pos per trajectory if present has_goal = "goal_pos" in all_results[0] if has_goal: - goal_dim = len(all_results[0]["goal_pos"]) + goal_dim = len(np.asarray(all_results[0]["goal_pos"])) goal_pos_dataset = f.create_dataset( "goal_pos", shape=(size_data.num_trajectories, goal_dim), @@ -209,10 +210,10 @@ def save_results_to_h5( sensor_dataset[traj_idx] = result["sensor"] reward_dataset[traj_idx] = result["reward"] if config.store_rollouts: - rollout_states_dataset[traj_idx] = result["rollout_states"] - rollout_controls_dataset[traj_idx] = result["rollout_controls"] - rollout_rewards_dataset[traj_idx] = result["rollout_rewards"] + rollout_states_dataset[traj_idx] = result["rollout_states"] # pyright: ignore[reportPossiblyUnboundVariable] + rollout_controls_dataset[traj_idx] = result["rollout_controls"] # pyright: ignore[reportPossiblyUnboundVariable] + rollout_rewards_dataset[traj_idx] = result["rollout_rewards"] # pyright: ignore[reportPossiblyUnboundVariable] if config.store_viapoints: - control_viapoints_dataset[traj_idx] = result["control_viapoints"] + control_viapoints_dataset[traj_idx] = result["control_viapoints"] # pyright: ignore[reportPossiblyUnboundVariable] if has_goal: - goal_pos_dataset[traj_idx] = result["goal_pos"] + goal_pos_dataset[traj_idx] = result["goal_pos"] # pyright: ignore[reportPossiblyUnboundVariable] diff --git a/run_mpc/visualize_trajectories.py b/run_mpc/visualize_trajectories.py index 95b04540..ac29971e 100644 --- a/run_mpc/visualize_trajectories.py +++ b/run_mpc/visualize_trajectories.py @@ -37,11 +37,11 @@ def visualize_trajectory_hdf5_dataset(dataset_path: Path) -> None: configs = json.load(config_f, object_hook=decode_config) task_name = configs["task"] - qpos_dataset = f["qpos"] - trajectory_length_dataset = f["trajectory_length"] + qpos_dataset: h5py.Dataset = f["qpos"] # type: ignore[assignment] + trajectory_length_dataset: h5py.Dataset = f["trajectory_length"] # type: ignore[assignment] goal_positions = np.array(f["goal_pos"]) if "goal_pos" in f else None - visualize_trajectory_batch(task_name, qpos_dataset, trajectory_length_dataset, goal_positions) + visualize_trajectory_batch(str(task_name), qpos_dataset, trajectory_length_dataset, goal_positions) def visualize_trajectory_batch( diff --git a/tests/test_run_mpc.py b/tests/test_run_mpc.py index 1f1973bb..63a1c7c0 100644 --- a/tests/test_run_mpc.py +++ b/tests/test_run_mpc.py @@ -3,7 +3,6 @@ """End-to-end tests for run_mpc: config loading, MPC execution, data collection, and H5 output.""" import json -import sys from pathlib import Path from typing import Any @@ -11,12 +10,19 @@ import numpy as np import pytest -# Add run_mpc to path so we can import its modules directly (they use relative imports) -sys.path.insert(0, str(Path(__file__).resolve().parent.parent / "run_mpc")) +from run_mpc.mpc_batch import run_mpc_batch +from run_mpc.mpc_config import MPCTimers, PublicMPCConfig, decode_config, load_configs_from_json_data +from run_mpc.mpc_setup import clamp_for_mjwarp, save_results_to_h5, setup_mpc -from mpc_batch import run_mpc_batch -from mpc_config import MPCTimers, PublicMPCConfig, decode_config, load_configs_from_json_data -from mpc_setup import clamp_for_mjwarp, save_results_to_h5, setup_mpc +try: + import warp as wp + + _has_gpu = wp.is_cuda_available() +except ImportError: + _has_gpu = False + +# All tests in this module require a GPU (mujoco_warp backend) +pytestmark = pytest.mark.skipif(not _has_gpu, reason="requires CUDA GPU (warp)") CONFIGS_DIR = Path(__file__).resolve().parent.parent / "run_mpc" / "configs" From 8ca792d2b015da444bb2d0c404ac48d998caa688 Mon Sep 17 00:00:00 2001 From: Duy Ta Date: Fri, 20 Mar 2026 13:14:44 -0400 Subject: [PATCH 08/12] fix CI --- tests/test_run_mpc.py | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/tests/test_run_mpc.py b/tests/test_run_mpc.py index 63a1c7c0..1d29d548 100644 --- a/tests/test_run_mpc.py +++ b/tests/test_run_mpc.py @@ -6,23 +6,25 @@ from pathlib import Path from typing import Any -import h5py import numpy as np import pytest -from run_mpc.mpc_batch import run_mpc_batch -from run_mpc.mpc_config import MPCTimers, PublicMPCConfig, decode_config, load_configs_from_json_data -from run_mpc.mpc_setup import clamp_for_mjwarp, save_results_to_h5, setup_mpc - try: + import h5py import warp as wp + from run_mpc.mpc_batch import run_mpc_batch + from run_mpc.mpc_config import MPCTimers, PublicMPCConfig, decode_config, load_configs_from_json_data + from run_mpc.mpc_setup import clamp_for_mjwarp, save_results_to_h5, setup_mpc + _has_gpu = wp.is_cuda_available() except ImportError: _has_gpu = False -# All tests in this module require a GPU (mujoco_warp backend) -pytestmark = pytest.mark.skipif(not _has_gpu, reason="requires CUDA GPU (warp)") +# Skip the entire module at collection time if warp/GPU is unavailable, +# since run_mpc imports warp at module level. +if not _has_gpu: + pytest.skip("requires CUDA GPU (warp)", allow_module_level=True) CONFIGS_DIR = Path(__file__).resolve().parent.parent / "run_mpc" / "configs" From a78bb984aab390fddfb7723276f4ff8051022726 Mon Sep 17 00:00:00 2001 From: Duy Ta Date: Fri, 20 Mar 2026 13:18:11 -0400 Subject: [PATCH 09/12] try github-gpu-runner --- .github/workflows/test_gpu.yml | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/.github/workflows/test_gpu.yml b/.github/workflows/test_gpu.yml index 8d3d6a9c..7a3c118b 100644 --- a/.github/workflows/test_gpu.yml +++ b/.github/workflows/test_gpu.yml @@ -1,15 +1,17 @@ name: Test (GPU / MJWarp) -# Disabled: no GPU runners available yet. Run tests manually (see run_mpc/README.md). on: - workflow_dispatch: {} + push: + branches: [main] + pull_request: + branches: [main] permissions: contents: read jobs: test-mjwarp: - runs-on: k8s-n1-standard-16-1x-t4-dockerless + runs-on: github-gpu-runner timeout-minutes: 30 steps: From ecddf025284c5b542ab70951985f678d54665fa2 Mon Sep 17 00:00:00 2001 From: Brandon Hung Date: Mon, 23 Mar 2026 16:17:42 -0400 Subject: [PATCH 10/12] Adding the clamp as a parameter instead of a hardcoded value --- run_mpc/mpc_setup.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/run_mpc/mpc_setup.py b/run_mpc/mpc_setup.py index b161ad8c..3490d3a1 100644 --- a/run_mpc/mpc_setup.py +++ b/run_mpc/mpc_setup.py @@ -23,12 +23,12 @@ MJWARP_MIN_FRICTION = 0.01 # mujoco_warp minimum sliding friction; values below this cause NaN in contact solving -def clamp_for_mjwarp(model: MjModel) -> None: +def clamp_for_mjwarp(model: MjModel, min_friction: float = MJWARP_MIN_FRICTION) -> None: """Apply model fixups for mujoco_warp compatibility.""" # Disable fluid dynamics (not supported by mujoco_warp) model.opt.density = 0 # Clamp geom friction to mujoco_warp minimum to avoid NaN in contact solving - np.maximum(model.geom_friction, MJWARP_MIN_FRICTION, out=model.geom_friction) + np.maximum(model.geom_friction, min_friction, out=model.geom_friction) def make_locomotion_controller(use_spot: bool, policy_path: str | None, device: str) -> BatchedSpotLocomotion | None: From 5a1e0876a19fa7574fe36902f504b2391acbb3bf Mon Sep 17 00:00:00 2001 From: Brandon Hung Date: Thu, 16 Apr 2026 13:38:23 -0400 Subject: [PATCH 11/12] Adding updated mujoco versions --- pixi.lock | 204 +++++++++++++++++++++++-------------------------- pyproject.toml | 4 +- 2 files changed, 96 insertions(+), 112 deletions(-) diff --git a/pixi.lock b/pixi.lock index 3be61d87..a058eea9 100644 --- a/pixi.lock +++ b/pixi.lock @@ -5,8 +5,6 @@ environments: - url: https://conda.anaconda.org/conda-forge/ indexes: - https://pypi.org/simple - options: - pypi-prerelease-mode: if-necessary-or-explicit packages: linux-64: - conda: https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-20_gnu.conda @@ -95,7 +93,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/94/54/e7d793b573f298e1c9013b8c4dade17d481164aa517d1d7148619c2cedbf/markdown_it_py-4.0.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/28/83/36557b04cfdc317ed8a525c4993b23e43a8fbcddaddd78619112ca07138c/msgspec-0.20.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/16/47/93c7ac3a9630b49c55d76b0d02aa565543e2f62cecd885f8f574f5c745e7/mujoco-3.5.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/0f/de/4ebdd81f66f2d3879335e0f21f7be9b552d7edbc80c53f31472706d4e338/mujoco-3.7.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/9e/c9/b2622292ea83fbb4ec318f5b9ab867d0a28ab43c5717bb85b0a5f6b3b0a4/networkx-3.6.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/88/b2/d0896bdcdc8d28a7fc5717c305f1a861c26e18c05047949fb371034d98bd/nodeenv-1.10.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/04/dc/46066ce18d01645541f0186877377b9371b8fa8017fa8262002b4ef22612/numpy-2.4.2-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl @@ -201,7 +199,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/94/54/e7d793b573f298e1c9013b8c4dade17d481164aa517d1d7148619c2cedbf/markdown_it_py-4.0.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/57/b6/eff0305961a1d9447ec2b02f8c73c8946f22564d302a504185b730c9a761/msgspec-0.20.0-cp313-cp313-macosx_11_0_arm64.whl - - pypi: https://files.pythonhosted.org/packages/6f/c9/26bd4979d503d03f7a6ded851c3094a5708cb534cf0dc80b4db6672da2b0/mujoco-3.5.0-cp313-cp313-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/0f/75/8a54a9de7581f46e8dfb248d8cd2f972ef0d1db6ecfd8a70abb4ab12d56b/mujoco-3.7.0-cp313-cp313-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/9e/c9/b2622292ea83fbb4ec318f5b9ab867d0a28ab43c5717bb85b0a5f6b3b0a4/networkx-3.6.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/88/b2/d0896bdcdc8d28a7fc5717c305f1a861c26e18c05047949fb371034d98bd/nodeenv-1.10.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/09/f0/817d03a03f93ba9c6c8993de509277d84e69f9453601915e4a69554102a1/numpy-2.4.2-cp313-cp313-macosx_11_0_arm64.whl @@ -303,7 +301,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/94/54/e7d793b573f298e1c9013b8c4dade17d481164aa517d1d7148619c2cedbf/markdown_it_py-4.0.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/f1/25/5e8080fe0117f799b1b68008dc29a65862077296b92550632de015128579/msgspec-0.20.0-cp313-cp313-win_amd64.whl - - pypi: https://files.pythonhosted.org/packages/ab/53/54a0815d43c83e1074cfc7da98a3dea88d7dda48c03edfd225a387a3767b/mujoco-3.5.0-cp313-cp313-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/c8/24/313f0d31628123593af23441df7124ca1cc26dd0611ed5d31675899b190e/mujoco-3.7.0-cp313-cp313-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/9e/c9/b2622292ea83fbb4ec318f5b9ab867d0a28ab43c5717bb85b0a5f6b3b0a4/networkx-3.6.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/88/b2/d0896bdcdc8d28a7fc5717c305f1a861c26e18c05047949fb371034d98bd/nodeenv-1.10.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/43/bc/6352f343522fcb2c04dbaf94cb30cca6fd32c1a750c06ad6231b4293708c/numpy-2.4.2-cp313-cp313-win_amd64.whl @@ -348,8 +346,6 @@ environments: - url: https://conda.anaconda.org/conda-forge/ indexes: - https://pypi.org/simple - options: - pypi-prerelease-mode: if-necessary-or-explicit packages: linux-64: - conda: https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-20_gnu.conda @@ -468,7 +464,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/09/ec/4b43dae793655b7d8a25f76119624350b4d65eb663459eb9603d7f1f0345/mistune-0.8.4-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a4/8e/469e5a4a2f5855992e425f3cb33804cc07bf18d48f2db061aec61ce50270/more_itertools-10.8.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/28/83/36557b04cfdc317ed8a525c4993b23e43a8fbcddaddd78619112ca07138c/msgspec-0.20.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/16/47/93c7ac3a9630b49c55d76b0d02aa565543e2f62cecd885f8f574f5c745e7/mujoco-3.5.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/0f/de/4ebdd81f66f2d3879335e0f21f7be9b552d7edbc80c53f31472706d4e338/mujoco-3.7.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/9e/c9/b2622292ea83fbb4ec318f5b9ab867d0a28ab43c5717bb85b0a5f6b3b0a4/networkx-3.6.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/6f/84/c0dc75c7fb596135f999e59a410d9f45bdabb989f1cb911f0016d22b747b/nh3-0.3.3-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - pypi: https://files.pythonhosted.org/packages/88/b2/d0896bdcdc8d28a7fc5717c305f1a861c26e18c05047949fb371034d98bd/nodeenv-1.10.0-py2.py3-none-any.whl @@ -635,7 +631,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/09/ec/4b43dae793655b7d8a25f76119624350b4d65eb663459eb9603d7f1f0345/mistune-0.8.4-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a4/8e/469e5a4a2f5855992e425f3cb33804cc07bf18d48f2db061aec61ce50270/more_itertools-10.8.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/57/b6/eff0305961a1d9447ec2b02f8c73c8946f22564d302a504185b730c9a761/msgspec-0.20.0-cp313-cp313-macosx_11_0_arm64.whl - - pypi: https://files.pythonhosted.org/packages/6f/c9/26bd4979d503d03f7a6ded851c3094a5708cb534cf0dc80b4db6672da2b0/mujoco-3.5.0-cp313-cp313-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/0f/75/8a54a9de7581f46e8dfb248d8cd2f972ef0d1db6ecfd8a70abb4ab12d56b/mujoco-3.7.0-cp313-cp313-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/9e/c9/b2622292ea83fbb4ec318f5b9ab867d0a28ab43c5717bb85b0a5f6b3b0a4/networkx-3.6.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/13/3e/aef8cf8e0419b530c95e96ae93a5078e9b36c1e6613eeb1df03a80d5194e/nh3-0.3.3-cp38-abi3-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl - pypi: https://files.pythonhosted.org/packages/88/b2/d0896bdcdc8d28a7fc5717c305f1a861c26e18c05047949fb371034d98bd/nodeenv-1.10.0-py2.py3-none-any.whl @@ -797,7 +793,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/09/ec/4b43dae793655b7d8a25f76119624350b4d65eb663459eb9603d7f1f0345/mistune-0.8.4-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a4/8e/469e5a4a2f5855992e425f3cb33804cc07bf18d48f2db061aec61ce50270/more_itertools-10.8.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/f1/25/5e8080fe0117f799b1b68008dc29a65862077296b92550632de015128579/msgspec-0.20.0-cp313-cp313-win_amd64.whl - - pypi: https://files.pythonhosted.org/packages/ab/53/54a0815d43c83e1074cfc7da98a3dea88d7dda48c03edfd225a387a3767b/mujoco-3.5.0-cp313-cp313-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/c8/24/313f0d31628123593af23441df7124ca1cc26dd0611ed5d31675899b190e/mujoco-3.7.0-cp313-cp313-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/9e/c9/b2622292ea83fbb4ec318f5b9ab867d0a28ab43c5717bb85b0a5f6b3b0a4/networkx-3.6.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/73/88/1ce287ef8649dc51365b5094bd3713b76454838140a32ab4f8349973883c/nh3-0.3.3-cp38-abi3-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/88/b2/d0896bdcdc8d28a7fc5717c305f1a861c26e18c05047949fb371034d98bd/nodeenv-1.10.0-py2.py3-none-any.whl @@ -876,8 +872,6 @@ environments: - url: https://conda.anaconda.org/conda-forge/ indexes: - https://pypi.org/simple - options: - pypi-prerelease-mode: if-necessary-or-explicit packages: linux-64: - conda: https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-20_gnu.conda @@ -999,8 +993,8 @@ environments: - pypi: https://files.pythonhosted.org/packages/a4/8e/469e5a4a2f5855992e425f3cb33804cc07bf18d48f2db061aec61ce50270/more_itertools-10.8.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/43/e3/7d92a15f894aa0c9c4b49b8ee9ac9850d6e63b03c9c32c0367a13ae62209/mpmath-1.3.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/28/83/36557b04cfdc317ed8a525c4993b23e43a8fbcddaddd78619112ca07138c/msgspec-0.20.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/16/47/93c7ac3a9630b49c55d76b0d02aa565543e2f62cecd885f8f574f5c745e7/mujoco-3.5.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/4b/2e/90f05ad3818fd4b826f712c9f89a3df3aa3ef204efeaa71f8ddc2ca5fd3b/mujoco_warp-3.5.0.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/0f/de/4ebdd81f66f2d3879335e0f21f7be9b552d7edbc80c53f31472706d4e338/mujoco-3.7.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/90/a6/23d2c61ebfd34c8279bce9222b09a4d1bf7a872b9d673fc81713c3583d57/mujoco_warp-3.7.0.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/9e/c9/b2622292ea83fbb4ec318f5b9ab867d0a28ab43c5717bb85b0a5f6b3b0a4/networkx-3.6.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/6f/84/c0dc75c7fb596135f999e59a410d9f45bdabb989f1cb911f0016d22b747b/nh3-0.3.3-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - pypi: https://files.pythonhosted.org/packages/88/b2/d0896bdcdc8d28a7fc5717c305f1a861c26e18c05047949fb371034d98bd/nodeenv-1.10.0-py2.py3-none-any.whl @@ -1072,7 +1066,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/b8/b4/07ab1c828bae0eb5c72cd9a4cbe8b0376d374509be3c7055e1a399bf85c3/vhacdx-0.0.10-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/c6/59/7d02447a55b2e55755011a647479041bc92a82e143f96a8195cb33bd0a1c/virtualenv-21.2.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/b9/c4/819f000b3d64f654a054a8b24bf8d0c5e799636393135784d0886d8c808e/viser-1.0.21-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/c2/bb/21e9396a963d50171f539f4a4c9411435e7bb9c5131f4480f882d5e51dc6/warp_lang-1.11.1-py3-none-manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/52/79/c30d6f57c98cc5bb850eb0bd0fce2405abb79a368ed5ef65ebb2b0c58dc0/warp_lang-1.12.1-py3-none-manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/ff/b2/83a6ddf56cdcbad4e3d841fcc55d6ba7d19aeb89c50f24dd7e859ec0805f/websockets-15.0.1-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl - pypi: https://files.pythonhosted.org/packages/87/22/b76d483683216dde3d67cba61fb2444be8d5be289bf628c13fc0fd90e5f9/wheel-0.46.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/5e/1e/3c3d3ef071b051cc3abbe3721ffb8365033a172613c04af2da89d5548a87/xxhash-3.6.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl @@ -1173,7 +1167,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/09/ec/4b43dae793655b7d8a25f76119624350b4d65eb663459eb9603d7f1f0345/mistune-0.8.4-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a4/8e/469e5a4a2f5855992e425f3cb33804cc07bf18d48f2db061aec61ce50270/more_itertools-10.8.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/57/b6/eff0305961a1d9447ec2b02f8c73c8946f22564d302a504185b730c9a761/msgspec-0.20.0-cp313-cp313-macosx_11_0_arm64.whl - - pypi: https://files.pythonhosted.org/packages/6f/c9/26bd4979d503d03f7a6ded851c3094a5708cb534cf0dc80b4db6672da2b0/mujoco-3.5.0-cp313-cp313-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/0f/75/8a54a9de7581f46e8dfb248d8cd2f972ef0d1db6ecfd8a70abb4ab12d56b/mujoco-3.7.0-cp313-cp313-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/9e/c9/b2622292ea83fbb4ec318f5b9ab867d0a28ab43c5717bb85b0a5f6b3b0a4/networkx-3.6.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/13/3e/aef8cf8e0419b530c95e96ae93a5078e9b36c1e6613eeb1df03a80d5194e/nh3-0.3.3-cp38-abi3-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl - pypi: https://files.pythonhosted.org/packages/88/b2/d0896bdcdc8d28a7fc5717c305f1a861c26e18c05047949fb371034d98bd/nodeenv-1.10.0-py2.py3-none-any.whl @@ -1336,7 +1330,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/09/ec/4b43dae793655b7d8a25f76119624350b4d65eb663459eb9603d7f1f0345/mistune-0.8.4-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a4/8e/469e5a4a2f5855992e425f3cb33804cc07bf18d48f2db061aec61ce50270/more_itertools-10.8.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/f1/25/5e8080fe0117f799b1b68008dc29a65862077296b92550632de015128579/msgspec-0.20.0-cp313-cp313-win_amd64.whl - - pypi: https://files.pythonhosted.org/packages/ab/53/54a0815d43c83e1074cfc7da98a3dea88d7dda48c03edfd225a387a3767b/mujoco-3.5.0-cp313-cp313-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/c8/24/313f0d31628123593af23441df7124ca1cc26dd0611ed5d31675899b190e/mujoco-3.7.0-cp313-cp313-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/9e/c9/b2622292ea83fbb4ec318f5b9ab867d0a28ab43c5717bb85b0a5f6b3b0a4/networkx-3.6.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/73/88/1ce287ef8649dc51365b5094bd3713b76454838140a32ab4f8349973883c/nh3-0.3.3-cp38-abi3-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/88/b2/d0896bdcdc8d28a7fc5717c305f1a861c26e18c05047949fb371034d98bd/nodeenv-1.10.0-py2.py3-none-any.whl @@ -1416,8 +1410,6 @@ environments: - url: https://conda.anaconda.org/conda-forge/ indexes: - https://pypi.org/simple - options: - pypi-prerelease-mode: if-necessary-or-explicit packages: linux-64: - conda: https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-20_gnu.conda @@ -1518,7 +1510,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/09/ec/4b43dae793655b7d8a25f76119624350b4d65eb663459eb9603d7f1f0345/mistune-0.8.4-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/28/83/36557b04cfdc317ed8a525c4993b23e43a8fbcddaddd78619112ca07138c/msgspec-0.20.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/16/47/93c7ac3a9630b49c55d76b0d02aa565543e2f62cecd885f8f574f5c745e7/mujoco-3.5.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/0f/de/4ebdd81f66f2d3879335e0f21f7be9b552d7edbc80c53f31472706d4e338/mujoco-3.7.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/9e/c9/b2622292ea83fbb4ec318f5b9ab867d0a28ab43c5717bb85b0a5f6b3b0a4/networkx-3.6.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/88/b2/d0896bdcdc8d28a7fc5717c305f1a861c26e18c05047949fb371034d98bd/nodeenv-1.10.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/04/dc/46066ce18d01645541f0186877377b9371b8fa8017fa8262002b4ef22612/numpy-2.4.2-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl @@ -1650,7 +1642,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/09/ec/4b43dae793655b7d8a25f76119624350b4d65eb663459eb9603d7f1f0345/mistune-0.8.4-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/57/b6/eff0305961a1d9447ec2b02f8c73c8946f22564d302a504185b730c9a761/msgspec-0.20.0-cp313-cp313-macosx_11_0_arm64.whl - - pypi: https://files.pythonhosted.org/packages/6f/c9/26bd4979d503d03f7a6ded851c3094a5708cb534cf0dc80b4db6672da2b0/mujoco-3.5.0-cp313-cp313-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/0f/75/8a54a9de7581f46e8dfb248d8cd2f972ef0d1db6ecfd8a70abb4ab12d56b/mujoco-3.7.0-cp313-cp313-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/9e/c9/b2622292ea83fbb4ec318f5b9ab867d0a28ab43c5717bb85b0a5f6b3b0a4/networkx-3.6.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/88/b2/d0896bdcdc8d28a7fc5717c305f1a861c26e18c05047949fb371034d98bd/nodeenv-1.10.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/09/f0/817d03a03f93ba9c6c8993de509277d84e69f9453601915e4a69554102a1/numpy-2.4.2-cp313-cp313-macosx_11_0_arm64.whl @@ -1778,7 +1770,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/09/ec/4b43dae793655b7d8a25f76119624350b4d65eb663459eb9603d7f1f0345/mistune-0.8.4-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/f1/25/5e8080fe0117f799b1b68008dc29a65862077296b92550632de015128579/msgspec-0.20.0-cp313-cp313-win_amd64.whl - - pypi: https://files.pythonhosted.org/packages/ab/53/54a0815d43c83e1074cfc7da98a3dea88d7dda48c03edfd225a387a3767b/mujoco-3.5.0-cp313-cp313-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/c8/24/313f0d31628123593af23441df7124ca1cc26dd0611ed5d31675899b190e/mujoco-3.7.0-cp313-cp313-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/9e/c9/b2622292ea83fbb4ec318f5b9ab867d0a28ab43c5717bb85b0a5f6b3b0a4/networkx-3.6.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/88/b2/d0896bdcdc8d28a7fc5717c305f1a861c26e18c05047949fb371034d98bd/nodeenv-1.10.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/43/bc/6352f343522fcb2c04dbaf94cb30cca6fd32c1a750c06ad6231b4293708c/numpy-2.4.2-cp313-cp313-win_amd64.whl @@ -1837,8 +1829,6 @@ environments: - url: https://conda.anaconda.org/conda-forge/ indexes: - https://pypi.org/simple - options: - pypi-prerelease-mode: if-necessary-or-explicit packages: linux-64: - conda: https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-20_gnu.conda @@ -1930,8 +1920,8 @@ environments: - pypi: https://files.pythonhosted.org/packages/eb/33/40cd74219417e78b97c47802037cf2d87b91973e18bb968a7da48a96ea44/ml_dtypes-0.5.4-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/43/e3/7d92a15f894aa0c9c4b49b8ee9ac9850d6e63b03c9c32c0367a13ae62209/mpmath-1.3.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/28/83/36557b04cfdc317ed8a525c4993b23e43a8fbcddaddd78619112ca07138c/msgspec-0.20.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/16/47/93c7ac3a9630b49c55d76b0d02aa565543e2f62cecd885f8f574f5c745e7/mujoco-3.5.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/4b/2e/90f05ad3818fd4b826f712c9f89a3df3aa3ef204efeaa71f8ddc2ca5fd3b/mujoco_warp-3.5.0.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/0f/de/4ebdd81f66f2d3879335e0f21f7be9b552d7edbc80c53f31472706d4e338/mujoco-3.7.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/90/a6/23d2c61ebfd34c8279bce9222b09a4d1bf7a872b9d673fc81713c3583d57/mujoco_warp-3.7.0.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/9e/c9/b2622292ea83fbb4ec318f5b9ab867d0a28ab43c5717bb85b0a5f6b3b0a4/networkx-3.6.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/88/b2/d0896bdcdc8d28a7fc5717c305f1a861c26e18c05047949fb371034d98bd/nodeenv-1.10.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/04/dc/46066ce18d01645541f0186877377b9371b8fa8017fa8262002b4ef22612/numpy-2.4.2-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl @@ -1969,7 +1959,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/f2/b3/4b9580d62e1245df52e8516cf3e404ff39cc72634d2d749d47b1dada4161/uv-0.10.4-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - pypi: https://files.pythonhosted.org/packages/b8/b4/07ab1c828bae0eb5c72cd9a4cbe8b0376d374509be3c7055e1a399bf85c3/vhacdx-0.0.10-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/b9/c4/819f000b3d64f654a054a8b24bf8d0c5e799636393135784d0886d8c808e/viser-1.0.21-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/c2/bb/21e9396a963d50171f539f4a4c9411435e7bb9c5131f4480f882d5e51dc6/warp_lang-1.11.1-py3-none-manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/52/79/c30d6f57c98cc5bb850eb0bd0fce2405abb79a368ed5ef65ebb2b0c58dc0/warp_lang-1.12.1-py3-none-manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/ff/b2/83a6ddf56cdcbad4e3d841fcc55d6ba7d19aeb89c50f24dd7e859ec0805f/websockets-15.0.1-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl - pypi: https://files.pythonhosted.org/packages/5e/1e/3c3d3ef071b051cc3abbe3721ffb8365033a172613c04af2da89d5548a87/xxhash-3.6.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/c8/60/4ea0d6df0b497d51bf2ef87eaab0eb26f8bc3b3313c012da5df3383cced9/yourdfpy-0.0.60-py3-none-any.whl @@ -2042,7 +2032,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/94/54/e7d793b573f298e1c9013b8c4dade17d481164aa517d1d7148619c2cedbf/markdown_it_py-4.0.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/57/b6/eff0305961a1d9447ec2b02f8c73c8946f22564d302a504185b730c9a761/msgspec-0.20.0-cp313-cp313-macosx_11_0_arm64.whl - - pypi: https://files.pythonhosted.org/packages/6f/c9/26bd4979d503d03f7a6ded851c3094a5708cb534cf0dc80b4db6672da2b0/mujoco-3.5.0-cp313-cp313-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/0f/75/8a54a9de7581f46e8dfb248d8cd2f972ef0d1db6ecfd8a70abb4ab12d56b/mujoco-3.7.0-cp313-cp313-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/9e/c9/b2622292ea83fbb4ec318f5b9ab867d0a28ab43c5717bb85b0a5f6b3b0a4/networkx-3.6.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/88/b2/d0896bdcdc8d28a7fc5717c305f1a861c26e18c05047949fb371034d98bd/nodeenv-1.10.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/09/f0/817d03a03f93ba9c6c8993de509277d84e69f9453601915e4a69554102a1/numpy-2.4.2-cp313-cp313-macosx_11_0_arm64.whl @@ -2144,7 +2134,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/94/54/e7d793b573f298e1c9013b8c4dade17d481164aa517d1d7148619c2cedbf/markdown_it_py-4.0.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/f1/25/5e8080fe0117f799b1b68008dc29a65862077296b92550632de015128579/msgspec-0.20.0-cp313-cp313-win_amd64.whl - - pypi: https://files.pythonhosted.org/packages/ab/53/54a0815d43c83e1074cfc7da98a3dea88d7dda48c03edfd225a387a3767b/mujoco-3.5.0-cp313-cp313-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/c8/24/313f0d31628123593af23441df7124ca1cc26dd0611ed5d31675899b190e/mujoco-3.7.0-cp313-cp313-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/9e/c9/b2622292ea83fbb4ec318f5b9ab867d0a28ab43c5717bb85b0a5f6b3b0a4/networkx-3.6.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/88/b2/d0896bdcdc8d28a7fc5717c305f1a861c26e18c05047949fb371034d98bd/nodeenv-1.10.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/43/bc/6352f343522fcb2c04dbaf94cb30cca6fd32c1a750c06ad6231b4293708c/numpy-2.4.2-cp313-cp313-win_amd64.whl @@ -2189,8 +2179,6 @@ environments: - url: https://conda.anaconda.org/conda-forge/ indexes: - https://pypi.org/simple - options: - pypi-prerelease-mode: if-necessary-or-explicit packages: linux-64: - conda: https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-20_gnu.conda @@ -2312,7 +2300,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/09/ec/4b43dae793655b7d8a25f76119624350b4d65eb663459eb9603d7f1f0345/mistune-0.8.4-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a4/8e/469e5a4a2f5855992e425f3cb33804cc07bf18d48f2db061aec61ce50270/more_itertools-10.8.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/15/2a/48e41d9ef0a24b1c6e67cbd94a676799e0561bfbc163be1aaaff5ca853f5/msgspec-0.20.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/ca/d6/a5a7b615b257867b7c97db6b3ce07dec9351d5d9d5a5aca881cbb583d7a3/mujoco-3.5.0-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/5f/5f/b8a339672e601b12c118dfd4ccc7d6a1c4e6e49a455015e75387e6a038aa/mujoco-3.7.0-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/b9/54/dd730b32ea14ea797530a4479b2ed46a6fb250f682a9cfb997e968bf0261/networkx-3.4.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/6f/84/c0dc75c7fb596135f999e59a410d9f45bdabb989f1cb911f0016d22b747b/nh3-0.3.3-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - pypi: https://files.pythonhosted.org/packages/88/b2/d0896bdcdc8d28a7fc5717c305f1a861c26e18c05047949fb371034d98bd/nodeenv-1.10.0-py2.py3-none-any.whl @@ -2480,7 +2468,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/09/ec/4b43dae793655b7d8a25f76119624350b4d65eb663459eb9603d7f1f0345/mistune-0.8.4-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a4/8e/469e5a4a2f5855992e425f3cb33804cc07bf18d48f2db061aec61ce50270/more_itertools-10.8.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/50/88/a795647672f547c983eff0823b82aaa35db922c767e1b3693e2dcf96678d/msgspec-0.20.0-cp310-cp310-macosx_11_0_arm64.whl - - pypi: https://files.pythonhosted.org/packages/8d/6b/fdac8ed97086e12ac930fb44e419eda1626e339010df73678cb1f22527d7/mujoco-3.5.0-cp310-cp310-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/2f/1f/ce57f4ad403bb8d78f5ced4051d036475db45aa8d507604abb644fae6f64/mujoco-3.7.0-cp310-cp310-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/b9/54/dd730b32ea14ea797530a4479b2ed46a6fb250f682a9cfb997e968bf0261/networkx-3.4.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/13/3e/aef8cf8e0419b530c95e96ae93a5078e9b36c1e6613eeb1df03a80d5194e/nh3-0.3.3-cp38-abi3-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl - pypi: https://files.pythonhosted.org/packages/88/b2/d0896bdcdc8d28a7fc5717c305f1a861c26e18c05047949fb371034d98bd/nodeenv-1.10.0-py2.py3-none-any.whl @@ -2643,7 +2631,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/09/ec/4b43dae793655b7d8a25f76119624350b4d65eb663459eb9603d7f1f0345/mistune-0.8.4-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a4/8e/469e5a4a2f5855992e425f3cb33804cc07bf18d48f2db061aec61ce50270/more_itertools-10.8.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/98/bd/5db3c14d675ee12842afb9b70c94c64f2c873f31198c46cbfcd7dffafab0/msgspec-0.20.0-cp310-cp310-win_amd64.whl - - pypi: https://files.pythonhosted.org/packages/7e/91/d82dd3c16892e1b0e27a2f537eec8aad54d91d939cb3cd37db2e8c09ecc2/mujoco-3.5.0-cp310-cp310-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/cd/aa/49d043506ea6d49b3e1076b667306b92a4218bb63010b935a81910b7d529/mujoco-3.7.0-cp310-cp310-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/b9/54/dd730b32ea14ea797530a4479b2ed46a6fb250f682a9cfb997e968bf0261/networkx-3.4.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/73/88/1ce287ef8649dc51365b5094bd3713b76454838140a32ab4f8349973883c/nh3-0.3.3-cp38-abi3-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/88/b2/d0896bdcdc8d28a7fc5717c305f1a861c26e18c05047949fb371034d98bd/nodeenv-1.10.0-py2.py3-none-any.whl @@ -2722,8 +2710,6 @@ environments: - url: https://conda.anaconda.org/conda-forge/ indexes: - https://pypi.org/simple - options: - pypi-prerelease-mode: if-necessary-or-explicit packages: linux-64: - conda: https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-20_gnu.conda @@ -2844,7 +2830,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/09/ec/4b43dae793655b7d8a25f76119624350b4d65eb663459eb9603d7f1f0345/mistune-0.8.4-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a4/8e/469e5a4a2f5855992e425f3cb33804cc07bf18d48f2db061aec61ce50270/more_itertools-10.8.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/6b/96/5c095b940de3aa6b43a71ec76275ac3537b21bd45c7499b5a17a429110fa/msgspec-0.20.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/47/14/d5bf98385354318ec2e6c466a8c7cf7fd76f8b711ed6d11d155e2baa81fb/mujoco-3.5.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/bf/9c/84b809bab92f3814479d183db85b95a2cfd3455eb3f5b55d8cfe85837938/mujoco-3.7.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/9e/c9/b2622292ea83fbb4ec318f5b9ab867d0a28ab43c5717bb85b0a5f6b3b0a4/networkx-3.6.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/6f/84/c0dc75c7fb596135f999e59a410d9f45bdabb989f1cb911f0016d22b747b/nh3-0.3.3-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - pypi: https://files.pythonhosted.org/packages/88/b2/d0896bdcdc8d28a7fc5717c305f1a861c26e18c05047949fb371034d98bd/nodeenv-1.10.0-py2.py3-none-any.whl @@ -3011,7 +2997,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/09/ec/4b43dae793655b7d8a25f76119624350b4d65eb663459eb9603d7f1f0345/mistune-0.8.4-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a4/8e/469e5a4a2f5855992e425f3cb33804cc07bf18d48f2db061aec61ce50270/more_itertools-10.8.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/5a/15/3c225610da9f02505d37d69a77f4a2e7daae2a125f99d638df211ba84e59/msgspec-0.20.0-cp311-cp311-macosx_11_0_arm64.whl - - pypi: https://files.pythonhosted.org/packages/82/02/aa6057ac4c50fb36558208005d6da19518f9a7857ef9b5fd2ed8f9262fe2/mujoco-3.5.0-cp311-cp311-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/06/b6/04714e68f820806657d28593bdc18776e9e2edb76904423a8601b24a29ab/mujoco-3.7.0-cp311-cp311-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/9e/c9/b2622292ea83fbb4ec318f5b9ab867d0a28ab43c5717bb85b0a5f6b3b0a4/networkx-3.6.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/13/3e/aef8cf8e0419b530c95e96ae93a5078e9b36c1e6613eeb1df03a80d5194e/nh3-0.3.3-cp38-abi3-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl - pypi: https://files.pythonhosted.org/packages/88/b2/d0896bdcdc8d28a7fc5717c305f1a861c26e18c05047949fb371034d98bd/nodeenv-1.10.0-py2.py3-none-any.whl @@ -3173,7 +3159,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/09/ec/4b43dae793655b7d8a25f76119624350b4d65eb663459eb9603d7f1f0345/mistune-0.8.4-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a4/8e/469e5a4a2f5855992e425f3cb33804cc07bf18d48f2db061aec61ce50270/more_itertools-10.8.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/89/5e/406b7d578926b68790e390d83a1165a9bfc2d95612a1a9c1c4d5c72ea815/msgspec-0.20.0-cp311-cp311-win_amd64.whl - - pypi: https://files.pythonhosted.org/packages/b8/98/c1fac334cc764068e6c5d7eb01d6ed2a3392bab51952c816888b2dfe78c2/mujoco-3.5.0-cp311-cp311-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/56/f3/04279983f37eb535b78730c351cbc6abbfff579c7a603423edcdca6c88ce/mujoco-3.7.0-cp311-cp311-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/9e/c9/b2622292ea83fbb4ec318f5b9ab867d0a28ab43c5717bb85b0a5f6b3b0a4/networkx-3.6.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/73/88/1ce287ef8649dc51365b5094bd3713b76454838140a32ab4f8349973883c/nh3-0.3.3-cp38-abi3-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/88/b2/d0896bdcdc8d28a7fc5717c305f1a861c26e18c05047949fb371034d98bd/nodeenv-1.10.0-py2.py3-none-any.whl @@ -3252,8 +3238,6 @@ environments: - url: https://conda.anaconda.org/conda-forge/ indexes: - https://pypi.org/simple - options: - pypi-prerelease-mode: if-necessary-or-explicit packages: linux-64: - conda: https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-20_gnu.conda @@ -3372,7 +3356,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/09/ec/4b43dae793655b7d8a25f76119624350b4d65eb663459eb9603d7f1f0345/mistune-0.8.4-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a4/8e/469e5a4a2f5855992e425f3cb33804cc07bf18d48f2db061aec61ce50270/more_itertools-10.8.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/5c/a2/488517a43ccf5a4b6b6eca6dd4ede0bd82b043d1539dd6bb908a19f8efd3/msgspec-0.20.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/c8/8a/229e4db3692be55532e155e2ca6a1363752243ee79df0e7e22ba00f716cf/mujoco-3.5.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/97/fa/a8698b7bb0168483845f8e492991ee5cf01695eb0d1f20ea7d8bf3d61344/mujoco-3.7.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/9e/c9/b2622292ea83fbb4ec318f5b9ab867d0a28ab43c5717bb85b0a5f6b3b0a4/networkx-3.6.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/6f/84/c0dc75c7fb596135f999e59a410d9f45bdabb989f1cb911f0016d22b747b/nh3-0.3.3-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - pypi: https://files.pythonhosted.org/packages/88/b2/d0896bdcdc8d28a7fc5717c305f1a861c26e18c05047949fb371034d98bd/nodeenv-1.10.0-py2.py3-none-any.whl @@ -3537,7 +3521,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/09/ec/4b43dae793655b7d8a25f76119624350b4d65eb663459eb9603d7f1f0345/mistune-0.8.4-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a4/8e/469e5a4a2f5855992e425f3cb33804cc07bf18d48f2db061aec61ce50270/more_itertools-10.8.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/7f/ee/af51d090ada641d4b264992a486435ba3ef5b5634bc27e6eb002f71cef7d/msgspec-0.20.0-cp312-cp312-macosx_11_0_arm64.whl - - pypi: https://files.pythonhosted.org/packages/e1/d4/d0032323f58a9b8080b8464c6aade8d5ac2e101dbed1de64a38b3913b446/mujoco-3.5.0-cp312-cp312-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/5b/fc/225a068a2bec3de5029ba08866e03df9f159719cecedfc0cf100d4db6a18/mujoco-3.7.0-cp312-cp312-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/9e/c9/b2622292ea83fbb4ec318f5b9ab867d0a28ab43c5717bb85b0a5f6b3b0a4/networkx-3.6.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/13/3e/aef8cf8e0419b530c95e96ae93a5078e9b36c1e6613eeb1df03a80d5194e/nh3-0.3.3-cp38-abi3-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl - pypi: https://files.pythonhosted.org/packages/88/b2/d0896bdcdc8d28a7fc5717c305f1a861c26e18c05047949fb371034d98bd/nodeenv-1.10.0-py2.py3-none-any.whl @@ -3697,7 +3681,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/09/ec/4b43dae793655b7d8a25f76119624350b4d65eb663459eb9603d7f1f0345/mistune-0.8.4-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a4/8e/469e5a4a2f5855992e425f3cb33804cc07bf18d48f2db061aec61ce50270/more_itertools-10.8.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/5a/51/aba940212c23b32eedce752896205912c2668472ed5b205fc33da28a6509/msgspec-0.20.0-cp312-cp312-win_amd64.whl - - pypi: https://files.pythonhosted.org/packages/02/37/527d83610b878f27c01dd762e0e41aaa62f095c607f0500ac7f724a2c7a5/mujoco-3.5.0-cp312-cp312-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/32/b9/96a06d51d1b8a13ce010642c5e9a1b83b2364d6c290c2aba2d8c515f9871/mujoco-3.7.0-cp312-cp312-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/9e/c9/b2622292ea83fbb4ec318f5b9ab867d0a28ab43c5717bb85b0a5f6b3b0a4/networkx-3.6.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/73/88/1ce287ef8649dc51365b5094bd3713b76454838140a32ab4f8349973883c/nh3-0.3.3-cp38-abi3-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/88/b2/d0896bdcdc8d28a7fc5717c305f1a861c26e18c05047949fb371034d98bd/nodeenv-1.10.0-py2.py3-none-any.whl @@ -3776,8 +3760,6 @@ environments: - url: https://conda.anaconda.org/conda-forge/ indexes: - https://pypi.org/simple - options: - pypi-prerelease-mode: if-necessary-or-explicit packages: linux-64: - conda: https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-20_gnu.conda @@ -3896,7 +3878,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/09/ec/4b43dae793655b7d8a25f76119624350b4d65eb663459eb9603d7f1f0345/mistune-0.8.4-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a4/8e/469e5a4a2f5855992e425f3cb33804cc07bf18d48f2db061aec61ce50270/more_itertools-10.8.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/28/83/36557b04cfdc317ed8a525c4993b23e43a8fbcddaddd78619112ca07138c/msgspec-0.20.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/16/47/93c7ac3a9630b49c55d76b0d02aa565543e2f62cecd885f8f574f5c745e7/mujoco-3.5.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/0f/de/4ebdd81f66f2d3879335e0f21f7be9b552d7edbc80c53f31472706d4e338/mujoco-3.7.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/9e/c9/b2622292ea83fbb4ec318f5b9ab867d0a28ab43c5717bb85b0a5f6b3b0a4/networkx-3.6.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/6f/84/c0dc75c7fb596135f999e59a410d9f45bdabb989f1cb911f0016d22b747b/nh3-0.3.3-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - pypi: https://files.pythonhosted.org/packages/88/b2/d0896bdcdc8d28a7fc5717c305f1a861c26e18c05047949fb371034d98bd/nodeenv-1.10.0-py2.py3-none-any.whl @@ -4063,7 +4045,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/09/ec/4b43dae793655b7d8a25f76119624350b4d65eb663459eb9603d7f1f0345/mistune-0.8.4-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a4/8e/469e5a4a2f5855992e425f3cb33804cc07bf18d48f2db061aec61ce50270/more_itertools-10.8.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/57/b6/eff0305961a1d9447ec2b02f8c73c8946f22564d302a504185b730c9a761/msgspec-0.20.0-cp313-cp313-macosx_11_0_arm64.whl - - pypi: https://files.pythonhosted.org/packages/6f/c9/26bd4979d503d03f7a6ded851c3094a5708cb534cf0dc80b4db6672da2b0/mujoco-3.5.0-cp313-cp313-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/0f/75/8a54a9de7581f46e8dfb248d8cd2f972ef0d1db6ecfd8a70abb4ab12d56b/mujoco-3.7.0-cp313-cp313-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/9e/c9/b2622292ea83fbb4ec318f5b9ab867d0a28ab43c5717bb85b0a5f6b3b0a4/networkx-3.6.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/13/3e/aef8cf8e0419b530c95e96ae93a5078e9b36c1e6613eeb1df03a80d5194e/nh3-0.3.3-cp38-abi3-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl - pypi: https://files.pythonhosted.org/packages/88/b2/d0896bdcdc8d28a7fc5717c305f1a861c26e18c05047949fb371034d98bd/nodeenv-1.10.0-py2.py3-none-any.whl @@ -4225,7 +4207,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/09/ec/4b43dae793655b7d8a25f76119624350b4d65eb663459eb9603d7f1f0345/mistune-0.8.4-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a4/8e/469e5a4a2f5855992e425f3cb33804cc07bf18d48f2db061aec61ce50270/more_itertools-10.8.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/f1/25/5e8080fe0117f799b1b68008dc29a65862077296b92550632de015128579/msgspec-0.20.0-cp313-cp313-win_amd64.whl - - pypi: https://files.pythonhosted.org/packages/ab/53/54a0815d43c83e1074cfc7da98a3dea88d7dda48c03edfd225a387a3767b/mujoco-3.5.0-cp313-cp313-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/c8/24/313f0d31628123593af23441df7124ca1cc26dd0611ed5d31675899b190e/mujoco-3.7.0-cp313-cp313-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/9e/c9/b2622292ea83fbb4ec318f5b9ab867d0a28ab43c5717bb85b0a5f6b3b0a4/networkx-3.6.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/73/88/1ce287ef8649dc51365b5094bd3713b76454838140a32ab4f8349973883c/nh3-0.3.3-cp38-abi3-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/88/b2/d0896bdcdc8d28a7fc5717c305f1a861c26e18c05047949fb371034d98bd/nodeenv-1.10.0-py2.py3-none-any.whl @@ -5833,11 +5815,11 @@ packages: - pypi: ./ name: judo-rai version: 0.0.7 - sha256: 6a4a6654a401fc22641750f0aa84ef3d1ee4e0c6520a9a0eb189665c6bf787ae + sha256: 33885b6fc56c36febc7cf72d8dfbb693151e72402a0dcf7a3554c2ea2d826d13 requires_dist: - dora-utils - h5py - - mujoco>=3.5.0,<3.6 + - mujoco>=3.6.0 - numpy - pillow - pycparser @@ -5867,6 +5849,7 @@ packages: - twine ; extra == 'dev' - wheel ; extra == 'dev' requires_python: '>=3.10' + editable: true - conda: https://conda.anaconda.org/conda-forge/noarch/kernel-headers_linux-64-4.18.0-he073ed8_9.conda sha256: 41557eeadf641de6aeae49486cef30d02a6912d8da98585d687894afd65b356a md5: 86d9cba083cd041bfbf242a01a7a1999 @@ -7088,10 +7071,10 @@ packages: - tomli-w ; extra == 'toml' - pyyaml ; extra == 'yaml' requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/02/37/527d83610b878f27c01dd762e0e41aaa62f095c607f0500ac7f724a2c7a5/mujoco-3.5.0-cp312-cp312-win_amd64.whl +- pypi: https://files.pythonhosted.org/packages/06/b6/04714e68f820806657d28593bdc18776e9e2edb76904423a8601b24a29ab/mujoco-3.7.0-cp311-cp311-macosx_11_0_arm64.whl name: mujoco - version: 3.5.0 - sha256: 4b3a62af174ab59b9b6d816dca0786b7fd85ac081d6c2a931a2b22dd6e821f50 + version: 3.7.0 + sha256: c2e375581a6e2c4196b3e260287f5ff59f7f747ce8a9e58f430039e2016befa8 requires_dist: - absl-py - etils[epath] @@ -7110,11 +7093,11 @@ packages: - typing-extensions ; extra == 'sysid' - usd-core ; extra == 'usd' - pillow ; extra == 'usd' - requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/16/47/93c7ac3a9630b49c55d76b0d02aa565543e2f62cecd885f8f574f5c745e7/mujoco-3.5.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/0f/75/8a54a9de7581f46e8dfb248d8cd2f972ef0d1db6ecfd8a70abb4ab12d56b/mujoco-3.7.0-cp313-cp313-macosx_11_0_arm64.whl name: mujoco - version: 3.5.0 - sha256: a956520adb275ce8e878da29e2586eac3affc7b7ac772065ef01f2380a9e8784 + version: 3.7.0 + sha256: 70e008a2080156121caa60a7e0736c20b2278108cb35d1ab732f98e2e7c334f1 requires_dist: - absl-py - etils[epath] @@ -7133,11 +7116,11 @@ packages: - typing-extensions ; extra == 'sysid' - usd-core ; extra == 'usd' - pillow ; extra == 'usd' - requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/47/14/d5bf98385354318ec2e6c466a8c7cf7fd76f8b711ed6d11d155e2baa81fb/mujoco-3.5.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/0f/de/4ebdd81f66f2d3879335e0f21f7be9b552d7edbc80c53f31472706d4e338/mujoco-3.7.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl name: mujoco - version: 3.5.0 - sha256: ba54826121c6857fc4ca82df642d9a89174ce5537677c6ead34844bb692437e3 + version: 3.7.0 + sha256: 246f61c885d8ac291a4f3b8e10d1deb3820302ab7a48b1edbf8a3539722841c3 requires_dist: - absl-py - etils[epath] @@ -7156,11 +7139,11 @@ packages: - typing-extensions ; extra == 'sysid' - usd-core ; extra == 'usd' - pillow ; extra == 'usd' - requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/6f/c9/26bd4979d503d03f7a6ded851c3094a5708cb534cf0dc80b4db6672da2b0/mujoco-3.5.0-cp313-cp313-macosx_11_0_arm64.whl + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/2f/1f/ce57f4ad403bb8d78f5ced4051d036475db45aa8d507604abb644fae6f64/mujoco-3.7.0-cp310-cp310-macosx_11_0_arm64.whl name: mujoco - version: 3.5.0 - sha256: 82416804ae96c69ed779330bd4f4af0a43632e2bbbcc60e5b193642db48e84ca + version: 3.7.0 + sha256: ea8e71fe1ef8fb5571817549804b7b5872081aad24417071a450cabdb838d196 requires_dist: - absl-py - etils[epath] @@ -7179,11 +7162,11 @@ packages: - typing-extensions ; extra == 'sysid' - usd-core ; extra == 'usd' - pillow ; extra == 'usd' - requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/7e/91/d82dd3c16892e1b0e27a2f537eec8aad54d91d939cb3cd37db2e8c09ecc2/mujoco-3.5.0-cp310-cp310-win_amd64.whl + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/32/b9/96a06d51d1b8a13ce010642c5e9a1b83b2364d6c290c2aba2d8c515f9871/mujoco-3.7.0-cp312-cp312-win_amd64.whl name: mujoco - version: 3.5.0 - sha256: 2328358d2f0031175897092560dd6d04b14bab1cc22caa145ce99b843c17daa2 + version: 3.7.0 + sha256: b0e31da299ff182d1063f9991ad21c21a8b086593b8dee588d19e910f2e49833 requires_dist: - absl-py - etils[epath] @@ -7202,11 +7185,11 @@ packages: - typing-extensions ; extra == 'sysid' - usd-core ; extra == 'usd' - pillow ; extra == 'usd' - requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/82/02/aa6057ac4c50fb36558208005d6da19518f9a7857ef9b5fd2ed8f9262fe2/mujoco-3.5.0-cp311-cp311-macosx_11_0_arm64.whl + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/56/f3/04279983f37eb535b78730c351cbc6abbfff579c7a603423edcdca6c88ce/mujoco-3.7.0-cp311-cp311-win_amd64.whl name: mujoco - version: 3.5.0 - sha256: e4fbb00809de98e8a65f2002745c5bca39076f8118b0fe08e973e7a99603c92b + version: 3.7.0 + sha256: 9ec9b5aff24f2dca58a1a5f52044fa491529c7da5c4e14853e25b644c0653f83 requires_dist: - absl-py - etils[epath] @@ -7225,11 +7208,11 @@ packages: - typing-extensions ; extra == 'sysid' - usd-core ; extra == 'usd' - pillow ; extra == 'usd' - requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/8d/6b/fdac8ed97086e12ac930fb44e419eda1626e339010df73678cb1f22527d7/mujoco-3.5.0-cp310-cp310-macosx_11_0_arm64.whl + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/5b/fc/225a068a2bec3de5029ba08866e03df9f159719cecedfc0cf100d4db6a18/mujoco-3.7.0-cp312-cp312-macosx_11_0_arm64.whl name: mujoco - version: 3.5.0 - sha256: 5f3803ff0dd7bc04d6c47d53a794343843bde06f0aeefeac28bb62b4cf2baab3 + version: 3.7.0 + sha256: 52b60fd634885c43c494868a992f696c078402c32b9c7a11bffa0fbf385687a7 requires_dist: - absl-py - etils[epath] @@ -7248,11 +7231,11 @@ packages: - typing-extensions ; extra == 'sysid' - usd-core ; extra == 'usd' - pillow ; extra == 'usd' - requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/ab/53/54a0815d43c83e1074cfc7da98a3dea88d7dda48c03edfd225a387a3767b/mujoco-3.5.0-cp313-cp313-win_amd64.whl + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/5f/5f/b8a339672e601b12c118dfd4ccc7d6a1c4e6e49a455015e75387e6a038aa/mujoco-3.7.0-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl name: mujoco - version: 3.5.0 - sha256: 646b26f545cfdd60ae65ee90d44f63f50fc7ea5b8242777964ef0148830e72df + version: 3.7.0 + sha256: 50aaa8a3c0eb0206ee368ca8e264450ce6e3350a10f90f65130950ce2401c87a requires_dist: - absl-py - etils[epath] @@ -7271,11 +7254,11 @@ packages: - typing-extensions ; extra == 'sysid' - usd-core ; extra == 'usd' - pillow ; extra == 'usd' - requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/b8/98/c1fac334cc764068e6c5d7eb01d6ed2a3392bab51952c816888b2dfe78c2/mujoco-3.5.0-cp311-cp311-win_amd64.whl + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/97/fa/a8698b7bb0168483845f8e492991ee5cf01695eb0d1f20ea7d8bf3d61344/mujoco-3.7.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl name: mujoco - version: 3.5.0 - sha256: ec0e35678773b34ee8b15741c34a745e027db062efcae790315aa83a5581c505 + version: 3.7.0 + sha256: 79f741d93e2b4f315f32e7199ab1b21eb7b7ed82acd9daf7be24382e436f98b7 requires_dist: - absl-py - etils[epath] @@ -7294,11 +7277,11 @@ packages: - typing-extensions ; extra == 'sysid' - usd-core ; extra == 'usd' - pillow ; extra == 'usd' - requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/c8/8a/229e4db3692be55532e155e2ca6a1363752243ee79df0e7e22ba00f716cf/mujoco-3.5.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/bf/9c/84b809bab92f3814479d183db85b95a2cfd3455eb3f5b55d8cfe85837938/mujoco-3.7.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl name: mujoco - version: 3.5.0 - sha256: 66fe37276644c28fab497929c55580725de81afc6d511a40cc27525a8dd99efa + version: 3.7.0 + sha256: fcf8841936271d03b8f4a89e0ca83d6dd0c4268cfb20543203b2d5eebcf643a3 requires_dist: - absl-py - etils[epath] @@ -7317,11 +7300,11 @@ packages: - typing-extensions ; extra == 'sysid' - usd-core ; extra == 'usd' - pillow ; extra == 'usd' - requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/ca/d6/a5a7b615b257867b7c97db6b3ce07dec9351d5d9d5a5aca881cbb583d7a3/mujoco-3.5.0-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/c8/24/313f0d31628123593af23441df7124ca1cc26dd0611ed5d31675899b190e/mujoco-3.7.0-cp313-cp313-win_amd64.whl name: mujoco - version: 3.5.0 - sha256: 01b12896ae906f157e18d8b1b7c24a8b72d2576fffa09869047150f186e92b33 + version: 3.7.0 + sha256: 67cae63b4c2c439ebffce7e185a0e129446a636af538dd3ccb5c9cd3f674033c requires_dist: - absl-py - etils[epath] @@ -7340,11 +7323,11 @@ packages: - typing-extensions ; extra == 'sysid' - usd-core ; extra == 'usd' - pillow ; extra == 'usd' - requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/e1/d4/d0032323f58a9b8080b8464c6aade8d5ac2e101dbed1de64a38b3913b446/mujoco-3.5.0-cp312-cp312-macosx_11_0_arm64.whl + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/cd/aa/49d043506ea6d49b3e1076b667306b92a4218bb63010b935a81910b7d529/mujoco-3.7.0-cp310-cp310-win_amd64.whl name: mujoco - version: 3.5.0 - sha256: 94cf4285b46bc2d74fbe86e39a93ecfb3b0e584477fff7e38d293d47b88576e7 + version: 3.7.0 + sha256: 17b1f75da7775ccd3589af8eafdce252f9551c3aa1cabd422124b65aa1bd04f8 requires_dist: - absl-py - etils[epath] @@ -7363,25 +7346,26 @@ packages: - typing-extensions ; extra == 'sysid' - usd-core ; extra == 'usd' - pillow ; extra == 'usd' - requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/4b/2e/90f05ad3818fd4b826f712c9f89a3df3aa3ef204efeaa71f8ddc2ca5fd3b/mujoco_warp-3.5.0.2-py3-none-any.whl + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/90/a6/23d2c61ebfd34c8279bce9222b09a4d1bf7a872b9d673fc81713c3583d57/mujoco_warp-3.7.0.1-py3-none-any.whl name: mujoco-warp - version: 3.5.0.2 - sha256: 877ed9d20d26b24e87233d4e09a34d8999a1414f8477d9a31590374c82c2176a + version: 3.7.0.1 + sha256: 93361c15b9540bcb8e752ffe9c8dd424b30ee6a604864a7cbe92019f1a4a8918 requires_dist: - absl-py - etils[epath] - - mujoco>=3.5.0 + - mujoco>=3.6.0 - numpy - - warp-lang>=1.11.0 + - warp-lang>=1.12 - pre-commit ; extra == 'dev' - pytest ; extra == 'dev' - pytest-xdist ; extra == 'dev' - ruff ; extra == 'dev' - pygls>=1.0.0,<2.0.0 ; extra == 'dev' - lsprotocol>=2023.0.1,<2024.0.0 ; extra == 'dev' - - mujoco>=3.5.0.dev0 ; extra == 'dev' + - mujoco>=3.6.0.dev0 ; extra == 'dev' - warp-lang>=1.11.0.dev0 ; extra == 'dev' + - mjviser>=0.0.10 ; extra == 'dev' - jax ; extra == 'cpu' - jax[cuda12] ; extra == 'cuda' requires_python: '>=3.10' @@ -10350,10 +10334,10 @@ packages: - torch>=1.13.1 ; extra == 'examples' - tyro>=0.2.0,<1.0.0 ; extra == 'examples' requires_python: '>=3.8' -- pypi: https://files.pythonhosted.org/packages/c2/bb/21e9396a963d50171f539f4a4c9411435e7bb9c5131f4480f882d5e51dc6/warp_lang-1.11.1-py3-none-manylinux_2_28_x86_64.whl +- pypi: https://files.pythonhosted.org/packages/52/79/c30d6f57c98cc5bb850eb0bd0fce2405abb79a368ed5ef65ebb2b0c58dc0/warp_lang-1.12.1-py3-none-manylinux_2_28_x86_64.whl name: warp-lang - version: 1.11.1 - sha256: 8b098f41e71d421d80ee7562e38aa8380ff6b0d3b4c6ee866cfbdef733ac5bdc + version: 1.12.1 + sha256: 6bf01f10509488ba8eacaf4ec7fcf7cfbd503118b22e002ecba407b40a17424e requires_dist: - numpy - nvidia-sphinx-theme ; python_full_version >= '3.9' and extra == 'docs' @@ -10361,14 +10345,14 @@ packages: - pre-commit ; extra == 'docs' - myst-parser ; extra == 'docs' - usd-core>=25.5 ; python_full_version < '3.14' and platform_machine != 'aarch64' and extra == 'benchmark' - - usd-exchange>=2.1.0a3 ; python_full_version >= '3.10' and platform_machine == 'aarch64' and extra == 'benchmark' + - usd-exchange>=2.2 ; python_full_version >= '3.10' and python_full_version < '3.13' and platform_machine == 'aarch64' and extra == 'benchmark' - blosc>=1.11.1 ; extra == 'examples' - matplotlib>=3.7.5 ; extra == 'examples' - pillow>=10.4.0 ; extra == 'examples' - psutil>=7.1.0 ; extra == 'examples' - pyglet>=2.1.9 ; extra == 'examples' - usd-core>=25.5 ; python_full_version < '3.14' and platform_machine != 'aarch64' and extra == 'examples' - - usd-exchange>=2.1.0a3 ; python_full_version >= '3.10' and platform_machine == 'aarch64' and extra == 'examples' + - usd-exchange>=2.2 ; python_full_version >= '3.10' and python_full_version < '3.13' and platform_machine == 'aarch64' and extra == 'examples' - warp-lang[examples] ; extra == 'torch-cu12' - torch>=2.7.0 ; python_full_version >= '3.9' and extra == 'torch-cu12' - warp-lang[examples] ; extra == 'dev' diff --git a/pyproject.toml b/pyproject.toml index c3f27d79..aabddf32 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -31,7 +31,7 @@ classifiers = [ dependencies = [ "dora-utils", # dora + qol utils for writing nodes "h5py", - "mujoco>=3.5.0,<3.6", + "mujoco>=3.6.0", "numpy", "pillow", # for displaying app logo "pycparser", @@ -235,7 +235,7 @@ python = "3.13.*" [tool.pixi.feature.mjwarp.dependencies] python = ">=3.11,<3.14" [tool.pixi.feature.mjwarp.target.linux-64.pypi-dependencies] -mujoco_warp = ">=3.5.0,<3.6" +mujoco_warp = ">=3.6.0" onnx = "*" onnxruntime-gpu = ">=1.24" From 59bd220a7b81b9b736cffa4970d0982e670a1e29 Mon Sep 17 00:00:00 2001 From: Brandon Hung Date: Thu, 16 Apr 2026 14:03:22 -0400 Subject: [PATCH 12/12] Saving changes to changelog --- .github/workflows/test_gpu.yml | 10 +++++----- CHANGELOG.md | 13 +++++++++++++ pixi.lock | 4 ++-- pyproject.toml | 4 ++-- 4 files changed, 22 insertions(+), 9 deletions(-) diff --git a/.github/workflows/test_gpu.yml b/.github/workflows/test_gpu.yml index 7a3c118b..280a7b3f 100644 --- a/.github/workflows/test_gpu.yml +++ b/.github/workflows/test_gpu.yml @@ -1,10 +1,10 @@ name: Test (GPU / MJWarp) -on: - push: - branches: [main] - pull_request: - branches: [main] +# on: +# push: +# branches: [main] +# pull_request: +# branches: [main] permissions: contents: read diff --git a/CHANGELOG.md b/CHANGELOG.md index d83481bb..737bed82 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,16 @@ +# v0.1.0 + +## Added +* Added support for parallelization using MJWarp + * Parallel simulation backend using MJWarp + * GPU accelerated data collection in run_mpc + +## Changed + * Added an optional GPU test since GPU runners aren't currently available on repo + +## Dev + * Updated mujoco to `>=3.5.0` to support MJWarp + # v0.0.7 ## Added diff --git a/pixi.lock b/pixi.lock index a058eea9..73163be6 100644 --- a/pixi.lock +++ b/pixi.lock @@ -5815,11 +5815,11 @@ packages: - pypi: ./ name: judo-rai version: 0.0.7 - sha256: 33885b6fc56c36febc7cf72d8dfbb693151e72402a0dcf7a3554c2ea2d826d13 + sha256: 2d160abdcc1517521afc90c098252cf0139d61c90006fd186a23a428e3fe2ca1 requires_dist: - dora-utils - h5py - - mujoco>=3.6.0 + - mujoco>=3.5.0 - numpy - pillow - pycparser diff --git a/pyproject.toml b/pyproject.toml index aabddf32..cf2a7051 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -31,7 +31,7 @@ classifiers = [ dependencies = [ "dora-utils", # dora + qol utils for writing nodes "h5py", - "mujoco>=3.6.0", + "mujoco>=3.5.0", "numpy", "pillow", # for displaying app logo "pycparser", @@ -235,7 +235,7 @@ python = "3.13.*" [tool.pixi.feature.mjwarp.dependencies] python = ">=3.11,<3.14" [tool.pixi.feature.mjwarp.target.linux-64.pypi-dependencies] -mujoco_warp = ">=3.6.0" +mujoco_warp = ">=3.5.0" onnx = "*" onnxruntime-gpu = ">=1.24"

)(x=j;NITu~z`c~whJ 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� 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