From eb00b64680c6895f8ffad7d8cd3efdb06e62a830 Mon Sep 17 00:00:00 2001
From: Russ Tedrake Benchmark for 6D Object Pose Estimation (BOP) Benchmark for 6D Object Pose Estimation (BOP)Robotic Manipulation<
Pose estimation benchmarks
- Manipulator Control
and command some Cartesian forces through $\tau_{ff}$ if we desire them.
(If you are interested in the driver details, then I would recommend the
documentation for the
- Franka Control
+ Franka Control
Interface which is much easier to find and read, and is very similar
to functionality provided by the iiwa driver.)
Primarily RGB-D (ToF vs projected texture stereo vs ...) cameras and Lidar
-The cameras we are using in this course are Intel RealSense D415.
+The cameras we are using in this course are Intel RealSense D415.
Monocular depth.
diff --git a/book/pose/BUILD.bazel b/book/pose/BUILD.bazel deleted file mode 100644 index dc67906f..00000000 --- a/book/pose/BUILD.bazel +++ /dev/null @@ -1,45 +0,0 @@ -# -*- mode: python -*- -# vi: set ft=python : - -# Copyright 2020-2024 Massachusetts Institute of Technology. -# Licensed under the BSD 3-Clause License. See LICENSE.TXT for details. - -load("//book/htmlbook/tools/python:requirements.bzl", "requirement") -load("//book/htmlbook/tools/jupyter:defs.bzl", "rt_ipynb_test") - -rt_ipynb_test( - name = "camera_sim", - srcs = ["camera_sim.ipynb"], - data = ["//manipulation/models"], - tags = ["no-sandbox"], # from vtk-test-tags() in drake - deps = [ - "//manipulation", - "//manipulation:scenarios", - "//manipulation:station", - ], -) - -rt_ipynb_test( - name = "icp", - srcs = ["icp.ipynb"], - deps = [ - "//manipulation", - requirement("scipy"), - ], -) - -rt_ipynb_test( - name = "pose", - srcs = ["pose.ipynb"], - data = ["//manipulation/models"], - tags = ["no-sandbox"], # from vtk-test-tags() in drake - deps = [ - "//manipulation", - "//manipulation:icp", - "//manipulation:mustard_depth_camera_example", - "//manipulation:meshcat_utils", - "//manipulation:pick", - "//manipulation:scenarios", - "//manipulation:station", - ], -) \ No newline at end of file diff --git a/book/pose/exercises/BUILD.bazel b/book/pose/exercises/BUILD.bazel deleted file mode 100644 index 05108298..00000000 --- a/book/pose/exercises/BUILD.bazel +++ /dev/null @@ -1,46 +0,0 @@ -# -*- mode: python -*- -# vi: set ft=python : - -# Copyright 2020-2021 Massachusetts Institute of Technology. -# Licensed under the BSD 3-Clause License. See LICENSE.TXT for details. - -load("//book/htmlbook/tools/python:requirements.bzl", "requirement") -load("//book/htmlbook/tools/jupyter:defs.bzl", "rt_ipynb_test") - -rt_ipynb_test( - name = "bunny_icp", - srcs = ["bunny_icp.ipynb"], - data = ["//manipulation/models/bunny:bunny.npy"], - deps = [ - "//manipulation", - "//manipulation/exercises:grader", - "//manipulation/exercises/pose:test_icp", - requirement("scipy"), - ], -) - -rt_ipynb_test( - name = "ransac", - srcs = ["ransac.ipynb"], - data = ["//manipulation/models/bunny:bunny.npy"], - deps = [ - "//manipulation", - "//manipulation/exercises:grader", - "//manipulation/exercises/pose:test_ransac", - ], -) - -rt_ipynb_test( - name = "pose_estimation_icp", - srcs = ["pose_estimation_icp.ipynb"], - timeout = "moderate", - tags = ["no-sandbox"], # for rendering, see drake#7004 - deps = [ - "//manipulation", - "//manipulation:icp", - "//manipulation:scenarios", - "//manipulation:station", - "//manipulation/exercises:grader", - "//manipulation/exercises/pose:test_pose_estimation", - ], -) diff --git a/book/pose/exercises/test_notebooks_pose_exercises.py b/book/pose/exercises/test_notebooks_pose_exercises.py new file mode 100644 index 00000000..4e0fde6d --- /dev/null +++ b/book/pose/exercises/test_notebooks_pose_exercises.py @@ -0,0 +1,5 @@ +from htmlbook.ipynb_test import ipynb_test + +ipynb_test("bunny_icp.ipynb") +ipynb_test("ransac.ipynb") +ipynb_test("pose_estimation_icp.ipynb") diff --git a/book/pose/test_notebooks_pose.py b/book/pose/test_notebooks_pose.py new file mode 100644 index 00000000..2bedd8da --- /dev/null +++ b/book/pose/test_notebooks_pose.py @@ -0,0 +1,5 @@ +from htmlbook.ipynb_test import ipynb_test + +ipynb_test("camera_sim.ipynb") +ipynb_test("icp.ipynb") +ipynb_test("pose.ipynb") diff --git a/book/rl/BUILD.bazel b/book/rl/BUILD.bazel deleted file mode 100644 index 033561fa..00000000 --- a/book/rl/BUILD.bazel +++ /dev/null @@ -1,41 +0,0 @@ -# -*- mode: python -*- -# vi: set ft=python : - -# Copyright 2020-2024 Massachusetts Institute of Technology. -# Licensed under the BSD 3-Clause License. See LICENSE.TXT for details. - -load("//book/htmlbook/tools/python:requirements.bzl", "requirement") -load("//book/htmlbook/tools/jupyter:defs.bzl", "rt_ipynb_test") -load("//book/htmlbook/tools/python:defs.bzl", "rt_py_test") - -rt_ipynb_test( - name = "black_box", - srcs = ["black_box.ipynb"], - deps = [ - "//manipulation", - "//manipulation:meshcat_utils", - ], -) - -rt_ipynb_test( - name = "box_flipup", - srcs = ["box_flipup.ipynb"], - data = ["//book/data:box_flipup_ppo_state.zip"], - deps = [ - "//manipulation", - "//manipulation:meshcat_utils", - "//manipulation/envs:box_flipup", - requirement("psutil"), - requirement("stable_baselines3"), - ], -) - -#rt_py_test( -# name = "train_boxflipup", -# srcs = ["train_boxflipup.py"], -# args = ["--test"], -# imports = [".."], -# deps = [ -# "//manipulation/envs:box_flipup", -# ], -#) diff --git a/book/rl/exercises/BUILD.bazel b/book/rl/exercises/BUILD.bazel deleted file mode 100644 index 1c65f92f..00000000 --- a/book/rl/exercises/BUILD.bazel +++ /dev/null @@ -1,32 +0,0 @@ -# -*- mode: python -*- -# vi: set ft=python : - -# Copyright 2020-2021 Massachusetts Institute of Technology. -# Licensed under the BSD 3-Clause License. See LICENSE.TXT for details. - -load("//book/htmlbook/tools/python:requirements.bzl", "requirement") -load("//book/htmlbook/tools/jupyter:defs.bzl", "rt_ipynb_test") - -rt_ipynb_test( - name = "stochastic_optimization", - srcs = ["stochastic_optimization.ipynb"], - deps = [ - "//manipulation", - "//manipulation/exercises:grader", - "//manipulation/exercises/rl:test_stochastic_optimization", - ], -) - -rt_ipynb_test( - name = "policy_gradient", - srcs = ["policy_gradient.ipynb"], - data = ["//manipulation/models"], - deps = [ - "//manipulation", - "//manipulation/envs:planar_gripper_pushing_a_box", - "//manipulation/exercises:grader", - "//manipulation/exercises/rl:test_vpg", - requirement("scipy"), - requirement("torch"), - ], -) diff --git a/book/rl/exercises/test_notebooks_rl_exercises.py b/book/rl/exercises/test_notebooks_rl_exercises.py new file mode 100644 index 00000000..ab887876 --- /dev/null +++ b/book/rl/exercises/test_notebooks_rl_exercises.py @@ -0,0 +1,4 @@ +from htmlbook.ipynb_test import ipynb_test + +ipynb_test("stochastic_optimization.ipynb") +ipynb_test("policy_gradient.ipynb") diff --git a/book/rl/test_notebooks_rl.py b/book/rl/test_notebooks_rl.py new file mode 100644 index 00000000..a987b89d --- /dev/null +++ b/book/rl/test_notebooks_rl.py @@ -0,0 +1,4 @@ +from htmlbook.ipynb_test import ipynb_test + +ipynb_test("black_box.ipynb") +ipynb_test("box_flipup.ipynb") diff --git a/book/robot.html b/book/robot.html index c51ebb5f..c491bbd1 100644 --- a/book/robot.html +++ b/book/robot.html @@ -597,7 +597,7 @@
- Of course, our fascination with the human hand is well placed, and we
diff --git a/book/robot/BUILD.bazel b/book/robot/BUILD.bazel
deleted file mode 100644
index b5944cdf..00000000
--- a/book/robot/BUILD.bazel
+++ /dev/null
@@ -1,71 +0,0 @@
-# -*- mode: python -*-
-# vi: set ft=python :
-
-# Copyright 2020-2024 Massachusetts Institute of Technology.
-# Licensed under the BSD 3-Clause License. See LICENSE.TXT for details.
-
-load("//book/htmlbook/tools/jupyter:defs.bzl", "rt_ipynb_test")
-
-rt_ipynb_test(
- name = "inspector",
- srcs = ["inspector.ipynb"],
- deps = [
- "//manipulation",
- "//manipulation:make_drake_compatible_model",
- ],
-)
-
-rt_ipynb_test(
- name = "menagerie",
- srcs = ["menagerie.ipynb"],
- tags = ["requires-network", "no-sandbox"],
- deps = [
- "//manipulation",
- "//manipulation:make_drake_compatible_model",
- "//manipulation:remotes",
- ],
-)
-
-rt_ipynb_test(
- name = "gymnasium_robotics",
- srcs = ["gymnasium_robotics.ipynb"],
- tags = ["requires-network", "no-sandbox"],
- deps = [
- "//manipulation",
- "//manipulation:make_drake_compatible_model",
- "//manipulation:remotes",
- ],
-)
-
-rt_ipynb_test(
- name = "simulation",
- srcs = ["simulation.ipynb"],
- deps = ["//manipulation"],
-)
-
-rt_ipynb_test(
- name = "bimanual",
- srcs = ["bimanual.ipynb"],
- deps = [
- "//manipulation",
- "//manipulation:station",
- ],
-)
-
-rt_ipynb_test(
- name = "iiwa_with_allegro",
- srcs = ["iiwa_with_allegro.ipynb"],
- deps = [
- "//manipulation",
- "//manipulation:station",
- ],
-)
-
-rt_ipynb_test(
- name = "rubiks_cube",
- data = ["//manipulation/models"],
- srcs = ["rubiks_cube.ipynb"],
- deps = [
- "//manipulation",
- ],
-)
diff --git a/book/robot/exercises/BUILD.bazel b/book/robot/exercises/BUILD.bazel
deleted file mode 100644
index 1c814143..00000000
--- a/book/robot/exercises/BUILD.bazel
+++ /dev/null
@@ -1,41 +0,0 @@
-# -*- mode: python -*-
-# vi: set ft=python :
-
-# Copyright 2020-2021 Massachusetts Institute of Technology.
-# Licensed under the BSD 3-Clause License. See LICENSE.TXT for details.
-
-load("//book/htmlbook/tools/jupyter:defs.bzl", "rt_ipynb_test")
-
-rt_ipynb_test(
- name = "03_direct_joint_control",
- srcs = ["03_direct_joint_control.ipynb"],
- deps = [
- "//manipulation",
- "//manipulation/exercises:grader",
- "//manipulation/exercises/robot:test_direct_joint_control",
- "//manipulation:meshcat_utils",
- "//manipulation:station",
- ],
-)
-
-rt_ipynb_test(
- name = "02_hardware_station_io",
- srcs = ["02_hardware_station_io.ipynb"],
- deps = [
- "//manipulation",
- "//manipulation/exercises:grader",
- "//manipulation/exercises/robot:test_hardware_station_io",
- "//manipulation:station",
- ],
-)
-
-rt_ipynb_test(
- name = "01_reflected_inertia",
- srcs = ["01_reflected_inertia.ipynb"],
- deps = [
- "//manipulation",
- "//manipulation/exercises:grader",
- "//manipulation/exercises/robot:test_reflected_inertia",
- "//manipulation/exercises/robot:test_survey",
- ],
-)
diff --git a/book/robot/exercises/test_notebooks_robot_exercises.py b/book/robot/exercises/test_notebooks_robot_exercises.py
new file mode 100644
index 00000000..3ea91b4a
--- /dev/null
+++ b/book/robot/exercises/test_notebooks_robot_exercises.py
@@ -0,0 +1,5 @@
+from htmlbook.ipynb_test import ipynb_test
+
+ipynb_test("03_direct_joint_control.ipynb")
+ipynb_test("02_hardware_station_io.ipynb")
+ipynb_test("01_reflected_inertia.ipynb")
diff --git a/book/robot/inspector.ipynb b/book/robot/inspector.ipynb
index 3a4ac127..7aa7e7ca 100644
--- a/book/robot/inspector.ipynb
+++ b/book/robot/inspector.ipynb
@@ -86,7 +86,9 @@
" elif description == \"Franka Emika Panda\":\n",
" return \"package://drake_models/franka_description/urdf/panda_arm_hand.urdf\"\n",
" elif description == \"UR3e\":\n",
- " return \"package://drake_models/ur_description/urdf/ur3e_cylinders_collision.urdf\"\n",
+ " return (\n",
+ " \"package://drake_models/ur_description/urdf/ur3e_cylinders_collision.urdf\"\n",
+ " )\n",
" raise Exception(\"Unknown model\")\n",
"\n",
"\n",
diff --git a/book/robot/test_notebooks_robot.py b/book/robot/test_notebooks_robot.py
new file mode 100644
index 00000000..68852d20
--- /dev/null
+++ b/book/robot/test_notebooks_robot.py
@@ -0,0 +1,9 @@
+from htmlbook.ipynb_test import ipynb_test
+
+ipynb_test("inspector.ipynb")
+ipynb_test("menagerie.ipynb")
+ipynb_test("gymnasium_robotics.ipynb")
+ipynb_test("simulation.ipynb")
+ipynb_test("bimanual.ipynb")
+ipynb_test("iiwa_with_allegro.ipynb")
+ipynb_test("rubiks_cube.ipynb")
diff --git a/book/segmentation/BUILD.bazel b/book/segmentation/BUILD.bazel
deleted file mode 100644
index 0bb74c77..00000000
--- a/book/segmentation/BUILD.bazel
+++ /dev/null
@@ -1,30 +0,0 @@
-# -*- mode: python -*-
-# vi: set ft=python :
-
-# Copyright 2020-2024 Massachusetts Institute of Technology.
-# Licensed under the BSD 3-Clause License. See LICENSE.TXT for details.
-
-load("//book/htmlbook/tools/jupyter:defs.bzl", "rt_ipynb_test")
-load("//book/htmlbook/tools/python:defs.bzl", "rt_py_test")
-
-# TODO(russt): move clutter_maskrcnn_data to huggingface?
-#rt_ipynb_test(
-# name = "segmentation_inference",
-# srcs = ["segmentation_inference.ipynb"],
-# deps = ["//manipulation"],
-# data = ["//book/data:clutter_maskrcnn_data"],
-#)
-
-rt_py_test(
- name = "segmentation_data",
- srcs = ["segmentation_data.py"],
- data = ["//manipulation/models"],
- timeout = "moderate",
- args = ["--test"],
- imports = [".."],
- tags = ["no-sandbox"], # for rendering, see drake#7004
- deps = [
- "//manipulation",
- "//manipulation:scenarios",
- ],
-)
diff --git a/book/segmentation/exercises/BUILD.bazel b/book/segmentation/exercises/BUILD.bazel
deleted file mode 100644
index 675ed979..00000000
--- a/book/segmentation/exercises/BUILD.bazel
+++ /dev/null
@@ -1,47 +0,0 @@
-# -*- mode: python -*-
-# vi: set ft=python :
-
-# Copyright 2020-2021 Massachusetts Institute of Technology.
-# Licensed under the BSD 3-Clause License. See LICENSE.TXT for details.
-
-load("//book/htmlbook/tools/python:requirements.bzl", "requirement")
-load("//book/htmlbook/tools/jupyter:defs.bzl", "rt_ipynb_test")
-
-rt_ipynb_test(
- name = "label_generation",
- srcs = ["label_generation.ipynb"],
- data = ["//manipulation/models"],
- # This is failing on mac CI. I don't understand why.
- target_compatible_with = [
- "@platforms//cpu:x86_64",
- "@platforms//os:linux",
- ],
- tags = ["no-sandbox"], # for rendering, see drake#7004
- deps = [
- "//manipulation",
- "//manipulation:mustard_depth_camera_example",
- "//manipulation:scenarios",
- "//manipulation/exercises:grader",
- "//manipulation/exercises/segmentation:test_mask",
- ],
-)
-
-rt_ipynb_test(
- name = "segmentation_and_grasp",
- srcs = ["segmentation_and_grasp.ipynb"],
- data = [
- "//manipulation/models",
- "//book/data:prediction_0.npz",
- "//book/data:prediction_1.npz",
- ],
- tags = ["no-sandbox"], # for rendering, see drake#7004
- deps = [
- "//manipulation",
- "//manipulation:scenarios",
- "//manipulation:clutter",
- "//manipulation/exercises:grader",
- "//manipulation/exercises/segmentation:test_segmentation_and_grasp",
- requirement("torch"),
- requirement("torchvision"),
- ],
-)
\ No newline at end of file
diff --git a/book/segmentation/exercises/test_notebooks_segmentation_exercises.py b/book/segmentation/exercises/test_notebooks_segmentation_exercises.py
new file mode 100644
index 00000000..cf4ec86a
--- /dev/null
+++ b/book/segmentation/exercises/test_notebooks_segmentation_exercises.py
@@ -0,0 +1,4 @@
+from htmlbook.ipynb_test import ipynb_test
+
+ipynb_test("label_generation.ipynb")
+ipynb_test("segmentation_and_grasp.ipynb")
diff --git a/book/segmentation/test_scripts_segmentation.py b/book/segmentation/test_scripts_segmentation.py
new file mode 100644
index 00000000..56adf94e
--- /dev/null
+++ b/book/segmentation/test_scripts_segmentation.py
@@ -0,0 +1,33 @@
+from __future__ import annotations
+
+import os
+import subprocess
+import sys
+import tempfile
+from pathlib import Path
+
+ROOT = Path(__file__).resolve().parents[2]
+
+
+def test_segmentation_data_script() -> None:
+ cmd = [
+ sys.executable,
+ str(ROOT / "book/segmentation/segmentation_data.py"),
+ "--test",
+ ]
+ env = os.environ.copy()
+ env.setdefault("OMP_NUM_THREADS", "1")
+ env.setdefault("OPENBLAS_NUM_THREADS", "1")
+ env.setdefault("MKL_NUM_THREADS", "1")
+ env.setdefault("NUMEXPR_NUM_THREADS", "1")
+ with tempfile.TemporaryDirectory(prefix="segmentation_script_") as run_cwd:
+ result = subprocess.run(
+ cmd, cwd=run_cwd, env=env, capture_output=True, text=True
+ )
+ if result.returncode != 0:
+ message = [f"segmentation_data.py failed with exit code {result.returncode}"]
+ if result.stdout:
+ message.append(f"STDOUT:\n{result.stdout}")
+ if result.stderr:
+ message.append(f"STDERR:\n{result.stderr}")
+ raise AssertionError("\n\n".join(message))
diff --git a/book/template/template_notebook.ipynb b/book/template/template_notebook.ipynb
index 9579d6a5..04271cb1 100644
--- a/book/template/template_notebook.ipynb
+++ b/book/template/template_notebook.ipynb
@@ -74,16 +74,9 @@
"metadata": {},
"outputs": [],
"source": [
- "from pydrake.all import (\n",
- " DiagramBuilder,\n",
- " Simulator,\n",
- " StartMeshcat,\n",
- ")\n",
+ "from pydrake.all import DiagramBuilder, Simulator, StartMeshcat\n",
"\n",
- "from manipulation.station import (\n",
- " LoadScenario,\n",
- " MakeHardwareStation,\n",
- ")"
+ "from manipulation.station import LoadScenario, MakeHardwareStation"
]
},
{
diff --git a/book/trajectories/BUILD.bazel b/book/trajectories/BUILD.bazel
deleted file mode 100644
index 9373cc78..00000000
--- a/book/trajectories/BUILD.bazel
+++ /dev/null
@@ -1,101 +0,0 @@
-# -*- mode: python -*-
-# vi: set ft=python :
-
-# Copyright 2020-2024 Massachusetts Institute of Technology.
-# Licensed under the BSD 3-Clause License. See LICENSE.TXT for details.
-
-load("//book/htmlbook/tools/python:requirements.bzl", "requirement")
-load("//book/htmlbook/tools/jupyter:defs.bzl", "rt_ipynb_test")
-
-rt_ipynb_test(
- name = "interactive_ik",
- srcs = ["interactive_ik.ipynb"],
- deps = [
- "//manipulation",
- "//manipulation:meshcat_utils",
- "//manipulation:scenarios",
- ],
-)
-
-rt_ipynb_test(
- name = "cspace",
- srcs = ["cspace.ipynb"],
- data = ["//manipulation/models"],
- deps = [
- "//manipulation",
- "//manipulation:scenarios",
- ],
-)
-
-rt_ipynb_test(
- name = "gcs_derivatives",
- srcs = ["gcs_derivatives.ipynb"],
- deps = [
- requirement("drake"),
- requirement("ipython"),
- ],
-)
-
-rt_ipynb_test(
- name = "gcs_simple_2d_cspace",
- srcs = ["gcs_simple_2d_cspace.ipynb"],
- data = ["//manipulation/models"],
- deps = [
- "//manipulation",
- requirement("scipy"),
- ],
- tags = ["requires-network"], # For gurobi
-)
-
-# See https://github.com/RobotLocomotion/drake/issues/21343
-#rt_ipynb_test(
-# name = "iris_in_configuration_space",
-# srcs = ["iris_in_configuration_space.ipynb"],
-# tags = ["requires-network"], # For gurobi
-# data = ["//manipulation/models"],
-# deps = [
-# "//manipulation",
-# "//manipulation:meshcat_utils",
-# "//manipulation:scenarios",
-# ],
-#)
-
-rt_ipynb_test(
- name = "iris_builder",
- srcs = ["iris_builder.ipynb"],
- deps = [
- "//manipulation",
- requirement("scipy"),
- ],
- data = ["//book/data:iiwa_shelve_and_bins_science_robotics.yaml"],
- tags = ["requires-network"], # For gurobi
-)
-
-rt_ipynb_test(
- name = "kinematic_trajectory_optimization",
- srcs = ["kinematic_trajectory_optimization.ipynb"],
- deps = [
- "//manipulation",
- "//manipulation:meshcat_utils",
- "//manipulation:scenarios",
- ],
-)
-
-rt_ipynb_test(
- name = "optimization_landscape",
- srcs = ["optimization_landscape.ipynb"],
- deps = [
- "//manipulation",
- "//manipulation:meshcat_utils",
- "//manipulation:scenarios",
- ],
-)
-
-rt_ipynb_test(
- name = "rrt",
- srcs = ["rrt.ipynb"],
- deps = [
- "//manipulation",
- "//manipulation:scenarios",
- ],
-)
\ No newline at end of file
diff --git a/book/trajectories/exercises/5_plan_place_initials.ipynb b/book/trajectories/exercises/5_plan_place_initials.ipynb
index 6cd492b0..2ce10988 100644
--- a/book/trajectories/exercises/5_plan_place_initials.ipynb
+++ b/book/trajectories/exercises/5_plan_place_initials.ipynb
@@ -72,10 +72,7 @@
" ConfigurationSpace,\n",
" Range,\n",
")\n",
- "from manipulation.exercises.trajectories.rrt_planner.rrt_planning import (\n",
- " RRT,\n",
- " TreeNode,\n",
- ")\n",
+ "from manipulation.exercises.trajectories.rrt_planner.rrt_planning import RRT, TreeNode\n",
"from manipulation.letter_generation import create_sdf_asset_from_letter\n",
"from manipulation.meshcat_utils import AddMeshcatTriad\n",
"from manipulation.station import LoadScenario, MakeHardwareStation"
@@ -1442,8 +1439,8 @@
" path_reset: list[np.ndarray],\n",
") -> tuple[\"PiecewisePolynomial\", \"PiecewisePolynomial\"]:\n",
" \"\"\"Sequence:\n",
- " pick \u2192 q_grasp (OPEN) \u2192 pause 0.5 \u2192 CLOSE (no motion) \u2192 pause 0.5 \u2192 q_approach \u2192\n",
- " place \u2192 pause 0.5 \u2192 OPEN (no motion) \u2192 pause 0.5 \u2192 reset\n",
+ " pick → q_grasp (OPEN) → pause 0.5 → CLOSE (no motion) → pause 0.5 → q_approach →\n",
+ " place → pause 0.5 → OPEN (no motion) → pause 0.5 → reset\n",
" \"\"\"\n",
" times: list[float] = []\n",
" Q: list[np.ndarray] = []\n",
@@ -1484,7 +1481,7 @@
" # 9) path_reset\n",
" t = _append_path(times, Q, t, path_reset)\n",
"\n",
- " # Build Drake trajectories (7\u00d7N for iiwa, 1\u00d7K for WSG)\n",
+ " # Build Drake trajectories (7×N for iiwa, 1×K for WSG)\n",
" q_samples = np.stack(Q, axis=1)\n",
" traj_q = PiecewisePolynomial.FirstOrderHold(times, q_samples)\n",
"\n",
@@ -1589,16 +1586,16 @@
" return path\n",
"\n",
" for t = 1 to passes:\n",
- " choose indices i < j with j \u2265 i + min_separation // if not possible, break\n",
- " q_a \u2190 path[i]\n",
- " q_b \u2190 path[j]\n",
+ " choose indices i < j with j ≥ i + min_separation // if not possible, break\n",
+ " q_a ← path[i]\n",
+ " q_b ← path[j]\n",
"\n",
- " edge \u2190 direct_path_wo_collision(q_a, q_b) // try a direct, collision-free connection\n",
+ " edge ← direct_path_wo_collision(q_a, q_b) // try a direct, collision-free connection\n",
"\n",
" if edge successfully reaches q_b:\n",
- " path \u2190 ReplaceSubpath(path, i, j, edge) // splice shortcut in\n",
+ " path ← ReplaceSubpath(path, i, j, edge) // splice shortcut in\n",
"\n",
- " path \u2190 Clean(path) // e.g., drop immediate duplicates, minor tidying\n",
+ " path ← Clean(path) // e.g., drop immediate duplicates, minor tidying\n",
" return path\n"
]
},
diff --git a/book/trajectories/exercises/BUILD.bazel b/book/trajectories/exercises/BUILD.bazel
deleted file mode 100644
index c91bc548..00000000
--- a/book/trajectories/exercises/BUILD.bazel
+++ /dev/null
@@ -1,45 +0,0 @@
-# -*- mode: python -*-
-# vi: set ft=python :
-
-# Copyright 2020-2021 Massachusetts Institute of Technology.
-# Licensed under the BSD 3-Clause License. See LICENSE.TXT for details.
-
-load("//book/htmlbook/tools/python:requirements.bzl", "requirement")
-load("//book/htmlbook/tools/jupyter:defs.bzl", "rt_ipynb_test")
-
-rt_ipynb_test(
- name = "door_opening",
- srcs = ["door_opening.ipynb"],
- tags = ["requires-network"], # For gurobi
- deps = [
- "//manipulation",
- "//manipulation:meshcat_utils",
- "//manipulation:station",
- "//manipulation/exercises:grader",
- "//manipulation/exercises/trajectories:test_door_opening",
- ],
-)
-
-rt_ipynb_test(
- name = "rrt_planning",
- srcs = ["rrt_planning.ipynb"],
- deps = [
- "//manipulation",
- "//manipulation:meshcat_utils",
- "//manipulation:station",
- "//manipulation/exercises:grader",
- "//manipulation/exercises/trajectories:test_rrt_planning",
- "//manipulation/exercises/trajectories/rrt_planner",
- ],
-)
-
-rt_ipynb_test(
- name = "taskspace_iris",
- srcs = ["taskspace_iris.ipynb"],
- deps = [
- "//manipulation",
- "//manipulation/exercises:grader",
- "//manipulation/exercises/trajectories:test_taskspace_iris",
- requirement("scipy"),
- ],
-)
diff --git a/book/trajectories/exercises/kinematic_trajopt_around_shelf_iiwa.ipynb b/book/trajectories/exercises/kinematic_trajopt_around_shelf_iiwa.ipynb
index e9fd2b72..99090f1e 100644
--- a/book/trajectories/exercises/kinematic_trajopt_around_shelf_iiwa.ipynb
+++ b/book/trajectories/exercises/kinematic_trajopt_around_shelf_iiwa.ipynb
@@ -294,6 +294,8 @@
"outputs": [],
"source": [
"# This function will publish your trajectory on meshcat so you can see it\n",
+ "\n",
+ "\n",
"def push_traj_to_meshcat(\n",
" traj: BsplineTrajectory,\n",
" plant: MultibodyPlant,\n",
diff --git a/book/trajectories/exercises/test_notebooks_trajectories_exercises.py b/book/trajectories/exercises/test_notebooks_trajectories_exercises.py
new file mode 100644
index 00000000..f795c098
--- /dev/null
+++ b/book/trajectories/exercises/test_notebooks_trajectories_exercises.py
@@ -0,0 +1,5 @@
+from htmlbook.ipynb_test import ipynb_test
+
+ipynb_test("door_opening.ipynb")
+ipynb_test("rrt_planning.ipynb")
+ipynb_test("taskspace_iris.ipynb")
diff --git a/book/trajectories/iris_builder.ipynb b/book/trajectories/iris_builder.ipynb
index 359d8b79..44445c13 100644
--- a/book/trajectories/iris_builder.ipynb
+++ b/book/trajectories/iris_builder.ipynb
@@ -46,7 +46,7 @@
")\n",
"from pydrake.geometry.optimization import (\n",
" HPolyhedron,\n",
- " IrisInConfigurationSpace,\n",
+ " IrisNp,\n",
" IrisOptions,\n",
" LoadIrisRegionsYamlFile,\n",
" SaveIrisRegionsYamlFile,\n",
@@ -188,7 +188,8 @@
" iris_options.configuration_obstacles = None\n",
" display(f\"Computing region for seed: {name}\")\n",
" start_time = time.time()\n",
- " hpoly = IrisInConfigurationSpace(plant, plant_context, iris_options)\n",
+ " # TODO(russt): Update this to use IrisNp2.\n",
+ " hpoly = IrisNp(plant, plant_context, iris_options)\n",
" display(\n",
" f\"Finished seed {name}; Computation time: {(time.time() - start_time):.2f} seconds\"\n",
" )\n",
diff --git a/book/trajectories/test_notebooks_trajectories.py b/book/trajectories/test_notebooks_trajectories.py
new file mode 100644
index 00000000..cf5467bc
--- /dev/null
+++ b/book/trajectories/test_notebooks_trajectories.py
@@ -0,0 +1,10 @@
+from htmlbook.ipynb_test import ipynb_test
+
+ipynb_test("interactive_ik.ipynb")
+ipynb_test("cspace.ipynb")
+ipynb_test("gcs_derivatives.ipynb")
+ipynb_test("gcs_simple_2d_cspace.ipynb")
+ipynb_test("iris_builder.ipynb")
+ipynb_test("kinematic_trajectory_optimization.ipynb")
+ipynb_test("optimization_landscape.ipynb")
+ipynb_test("rrt.ipynb")
diff --git a/conftest.py b/conftest.py
new file mode 100644
index 00000000..25275c64
--- /dev/null
+++ b/conftest.py
@@ -0,0 +1,28 @@
+from __future__ import annotations
+
+import os
+import sys
+from pathlib import Path
+
+REPO_ROOT = Path(__file__).resolve().parent
+
+
+def pytest_configure() -> None:
+ os.environ.setdefault("MPLBACKEND", "Agg")
+ os.environ.setdefault("MPLCONFIGDIR", "/tmp/matplotlib")
+ os.environ.setdefault("XDG_CACHE_HOME", "/tmp")
+ Path("/tmp/matplotlib").mkdir(parents=True, exist_ok=True)
+ if str(REPO_ROOT) not in sys.path:
+ sys.path.insert(0, str(REPO_ROOT))
+ if str(REPO_ROOT / "book") not in sys.path:
+ sys.path.insert(0, str(REPO_ROOT / "book"))
+
+
+def pytest_ignore_collect(collection_path, config): # type: ignore[no-untyped-def]
+ solutions_dir = REPO_ROOT / "solutions"
+ if solutions_dir.exists():
+ return None
+ try:
+ return Path(collection_path).resolve().is_relative_to(solutions_dir)
+ except Exception:
+ return None
diff --git a/environ.bzl b/environ.bzl
deleted file mode 100644
index a72b4489..00000000
--- a/environ.bzl
+++ /dev/null
@@ -1,70 +0,0 @@
-# -*- mode: python -*-
-# vi: set ft=python :
-
-# Copyright (c) 2018, Toyota Research Institute.
-# All rights reserved.
-#
-# Redistribution and use in source and binary forms, with or without
-# modification, are permitted provided that the following conditions are met:
-#
-# * Redistributions of source code must retain the above copyright notice, this
-# list of conditions and the following disclaimer.
-#
-# * Redistributions in binary form must reproduce the above copyright notice,
-# this list of conditions and the following disclaimer in the documentation
-# and/or other materials provided with the distribution.
-#
-# * Neither the name of the copyright holder nor the names of its contributors
-# may be used to endorse or promote products derived from this software
-# without specific prior written permission.
-#
-# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
-# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-# POSSIBILITY OF SUCH DAMAGE.
-
-# Write out a repository that contains:
-# - An empty BUILD file, to define a package.
-# - An environ.bzl file with variable assignments for each ENV_NAMES item.
-def _impl(repository_ctx):
- vars = repository_ctx.attr._vars
- bzl_content = []
- for key in vars:
- value = repository_ctx.os.environ.get(key, "")
- bzl_content.append("{}='{}'\n".format(key, value))
- repository_ctx.file(
- "BUILD.bazel",
- content = "\n",
- executable = False,
- )
- repository_ctx.file(
- "environ.bzl",
- content = "".join(bzl_content),
- executable = False,
- )
-
-def environ_repository(name = None, vars = []):
- """Provide specific environment variables for use in a WORKSPACE file.
- The `vars` are the environment variables to provide.
-
- Example:
- environ_repository(name = "foo", vars = ["BAR", "BAZ"])
- load("@foo//:environ.bzl", "BAR", "BAZ")
- print(BAR)
- """
- rule = repository_rule(
- implementation = _impl,
- attrs = {
- "_vars": attr.string_list(default = vars),
- },
- local = True,
- environ = vars,
- )
- rule(name = name)
diff --git a/manipulation/BUILD.bazel b/manipulation/BUILD.bazel
deleted file mode 100644
index e493ee8c..00000000
--- a/manipulation/BUILD.bazel
+++ /dev/null
@@ -1,284 +0,0 @@
-# -*- mode: python -*-
-# vi: set ft=python :
-
-# Copyright 2020-2024 Massachusetts Institute of Technology.
-# Licensed under the BSD 3-Clause License. See LICENSE.TXT for details.
-
-load("//book/htmlbook/tools/python:requirements.bzl", "requirement")
-load(
- "//book/htmlbook/tools/python:defs.bzl",
- "rt_py_library",
- "rt_py_test",
- "rt_py_binary",
-)
-
-rt_py_library(
- name="manipulation",
- srcs=[
- "__init__.py",
- "utils.py",
- ],
- data=[
- "@drake_models",
- ],
- imports=[".."],
- visibility=["//visibility:public"],
- deps=[
- requirement("drake"),
- requirement("ipython"),
- requirement("mpld3"),
- requirement("pyvirtualdisplay"),
- ],
-)
-
-rt_py_library(
- name="meshcat_utils",
- srcs=["meshcat_utils.py"],
- imports=[".."],
- visibility=["//visibility:public"],
-)
-
-rt_py_library(
- name="make_drake_compatible_model",
- srcs=["make_drake_compatible_model.py"],
- imports=[".."],
- visibility=["//visibility:public"],
- deps=[
- requirement("drake"),
- requirement("lxml"),
- ],
- optional_deps=[
- requirement("pycollada"),
- requirement("trimesh"),
- ],
-)
-
-rt_py_library(
- name="mustard_depth_camera_example",
- srcs=["mustard_depth_camera_example.py"],
- imports=[".."],
- visibility=["//visibility:public"],
- deps=[
- "scenarios",
- ],
-)
-
-rt_py_library(
- name="scenarios",
- data=["//manipulation/models"],
- deps=[
- "//manipulation",
- "//manipulation:systems",
- ],
- srcs=["scenarios.py"],
- imports=[".."],
- visibility=["//visibility:public"],
-)
-
-rt_py_library(
- name="remotes",
- srcs=["remotes.py"],
- imports=[".."],
- deps=[
- "make_drake_compatible_model",
- requirement("drake"),
- ],
- visibility=["//visibility:public"],
-)
-
-rt_py_binary(
- name="prefetch_remotes",
- tags=["requires-network", "no-sandbox"],
- srcs=["prefetch_remotes.py"],
- deps=["remotes"],
-)
-
-rt_py_library(
- name="directives_tree",
- deps=[
- "//manipulation",
- ],
- srcs=["directives_tree.py"],
- imports=[".."],
- visibility=["//visibility:public"],
-)
-
-rt_py_library(
- name="station",
- deps=[
- "//manipulation",
- "scenarios",
- "systems",
- "directives_tree",
- ],
- srcs=["station.py"],
- imports=[".."],
- visibility=["//visibility:public"],
-)
-
-rt_py_library(
- name="systems",
- srcs=["systems.py"],
- imports=[".."],
- visibility=["//visibility:public"],
-)
-
-rt_py_library(
- name="pick",
- srcs=["pick.py"],
- imports=[".."],
- visibility=["//visibility:public"],
-)
-
-# TODO(russt): Rename this to pose.py
-rt_py_library(
- name="icp",
- srcs=["icp.py"],
- imports=[".."],
- deps=[
- requirement("scipy"), # TODO(russt): remove this dep?
- ],
- visibility=["//visibility:public"],
-)
-
-rt_py_library(
- name="clutter",
- srcs=["clutter.py"],
- imports=[".."],
- visibility=["//visibility:public"],
-)
-
-rt_py_library(
- name="letter_generation",
- srcs=[
- "letter_generation.py",
- "create_sdf_from_mesh.py",
- ],
- imports=[".."],
- deps=[
- "manipulation",
- requirement("lxml"),
- ],
- optional_deps=[
- requirement("trimesh"),
- requirement("shapely"),
- requirement("coacd"),
- requirement("vhacdx"),
- requirement("mapbox_earcut"),
- requirement("manifold3d"),
- ],
- visibility=["//visibility:public"],
-)
-
-rt_py_test(
- name="test_create_sdf_from_mesh",
- srcs=[
- "test/test_create_sdf_from_mesh.py",
- "//manipulation:create_sdf_from_mesh.py",
- ],
- imports=[".."],
- deps=[
- "manipulation",
- requirement("lxml"),
- ],
- optional_deps=[
- requirement("trimesh"),
- requirement("vhacdx"),
- ],
-)
-
-rt_py_test(
- name="test_gym",
- data=["//manipulation:models"],
- srcs=["test/test_gym.py"],
- imports=[".."],
- deps=[
- "//manipulation/envs:box_flipup",
- "manipulation",
- "scenarios",
- ],
- optional_deps=[
- requirement("stable_baselines3"),
- ],
-)
-
-rt_py_test(
- name="test_make_drake_compatible_model",
- srcs=["test/test_make_drake_compatible_model.py"],
- imports=[".."],
- tags=["requires-network", "no-sandbox"],
- timeout="moderate", # TODO(russt): consider moving the menagerie work to the prefetch_remotes
- data=[
- "//manipulation/test/models:models",
- ],
- deps=[
- "manipulation",
- "//manipulation:make_drake_compatible_model",
- "//manipulation:remotes",
- ],
-)
-
-rt_py_test(
- name="test_meshcat_utils",
- srcs=["test/test_meshcat_utils.py"],
- tags=["requires-network"], # For gurobi
- imports=[".."],
- deps=[
- "manipulation",
- "//manipulation:meshcat_utils",
- ],
-)
-
-rt_py_test(
- name="test_model_directives",
- srcs=["test/test_model_directives.py"],
- data=["//manipulation:models"],
- imports=[".."],
- deps=["manipulation"],
-)
-
-rt_py_test(
- name="test_directives_tree",
- srcs=["test/test_directives_tree.py"],
- data=["//manipulation:station"],
- imports=[".."],
- deps=["manipulation"],
-)
-
-rt_py_test(
- name="test_inverse_dynamics_driver",
- srcs=["test/test_inverse_dynamics_driver.py"],
- data=["//manipulation:station"],
- imports=[".."],
- deps=["manipulation"],
-)
-
-rt_py_test(
- name="test_hardware_station_interface",
- srcs=["test/test_hardware_station_interface.py"],
- data=["//manipulation:station"],
- imports=[".."],
- deps=["manipulation"],
-)
-
-rt_py_test(
- name="test_utils",
- srcs=["test/test_utils.py"],
- imports=[".."],
- deps=[
- "manipulation",
- "mustard_depth_camera_example",
- ],
-)
-
-rt_py_test(
- name="test_letter_generation",
- srcs=[
- "test/test_letter_generation.py",
- ],
- imports=[".."],
- deps=[
- "manipulation",
- "letter_generation",
- ],
-)
diff --git a/manipulation/envs/BUILD.bazel b/manipulation/envs/BUILD.bazel
deleted file mode 100644
index 7586d414..00000000
--- a/manipulation/envs/BUILD.bazel
+++ /dev/null
@@ -1,38 +0,0 @@
-# -*- mode: python -*-
-# vi: set ft=python :
-
-# Copyright 2020-2024 Massachusetts Institute of Technology.
-# Licensed under the BSD 3-Clause License. See LICENSE.TXT for details.
-
-load("//book/htmlbook/tools/python:requirements.bzl", "requirement")
-load("//book/htmlbook/tools/python:defs.bzl", "rt_py_library", "rt_py_test")
-
-rt_py_library(
- name = "box_flipup",
- srcs = ["box_flipup.py"],
- data = [
- "//manipulation/models",
- ],
- imports = [".."],
- visibility = ["//visibility:public"],
- deps = [
- "//manipulation",
- "//manipulation:scenarios",
- requirement("gymnasium"),
- ]
-)
-
-rt_py_library(
- name = "planar_gripper_pushing_a_box",
- srcs = ["planar_gripper_pushing_a_box.py"],
- data = [
- "//manipulation/models",
- ],
- imports = [".."],
- visibility = ["//visibility:public"],
- deps = [
- "//manipulation",
- "//manipulation:scenarios",
- requirement("gymnasium"),
- ]
-)
diff --git a/manipulation/exercises/BUILD.bazel b/manipulation/exercises/BUILD.bazel
deleted file mode 100644
index 0853c56f..00000000
--- a/manipulation/exercises/BUILD.bazel
+++ /dev/null
@@ -1,20 +0,0 @@
-# -*- mode: python -*-
-# vi: set ft=python :
-
-# Copyright 2020-2024 Massachusetts Institute of Technology.
-# Licensed under the BSD 3-Clause License. See LICENSE.TXT for details.
-
-load("//book/htmlbook/tools/python:requirements.bzl", "requirement")
-load("//book/htmlbook/tools/python:defs.bzl", "rt_py_library")
-
-rt_py_library(
- name = "grader",
- srcs = ["grader.py"],
- deps = [
- requirement("gradescope_utils"),
- requirement("timeout_decorator"),
- requirement("nbconvert"),
- requirement("nbformat"),
- ],
- visibility = ["//visibility:public"],
-)
diff --git a/manipulation/exercises/clutter/BUILD.bazel b/manipulation/exercises/clutter/BUILD.bazel
deleted file mode 100644
index 533ac45e..00000000
--- a/manipulation/exercises/clutter/BUILD.bazel
+++ /dev/null
@@ -1,32 +0,0 @@
-# -*- mode: python -*-
-# vi: set ft=python :
-
-# Copyright 2020-2024 Massachusetts Institute of Technology.
-# Licensed under the BSD 3-Clause License. See LICENSE.TXT for details.
-
-load("//book/htmlbook/tools/python:defs.bzl", "rt_py_library")
-
-rt_py_library(
- name = "test_analytic_grasp",
- srcs = ["test_analytic_grasp.py"],
- visibility = ["//visibility:public"],
-)
-
-rt_py_library(
- name = "test_grasp_candidate",
- srcs = ["test_grasp_candidate.py"],
- visibility = ["//visibility:public"],
-)
-
-rt_py_library(
- name = "test_normal",
- data = ["normal_solution.npy"],
- srcs = ["test_normal.py"],
- visibility = ["//visibility:public"],
-)
-
-rt_py_library(
- name = "test_grasp_letters",
- srcs = ["test_grasp_letters.py"],
- visibility = ["//visibility:public"],
-)
diff --git a/manipulation/exercises/deep_perception/BUILD.bazel b/manipulation/exercises/deep_perception/BUILD.bazel
deleted file mode 100644
index 99459c33..00000000
--- a/manipulation/exercises/deep_perception/BUILD.bazel
+++ /dev/null
@@ -1,13 +0,0 @@
-# -*- mode: python -*-
-# vi: set ft=python :
-
-# Copyright 2020-2024 Massachusetts Institute of Technology.
-# Licensed under the BSD 3-Clause License. See LICENSE.TXT for details.
-
-load("//book/htmlbook/tools/python:defs.bzl", "rt_py_library")
-
-rt_py_library(
- name = "test_contrastive",
- srcs = ["test_contrastive.py"],
- visibility = ["//visibility:public"],
-)
diff --git a/manipulation/exercises/force/BUILD.bazel b/manipulation/exercises/force/BUILD.bazel
deleted file mode 100644
index 53f18d62..00000000
--- a/manipulation/exercises/force/BUILD.bazel
+++ /dev/null
@@ -1,13 +0,0 @@
-# -*- mode: python -*-
-# vi: set ft=python :
-
-# Copyright 2020-2024 Massachusetts Institute of Technology.
-# Licensed under the BSD 3-Clause License. See LICENSE.TXT for details.
-
-load("//book/htmlbook/tools/python:defs.bzl", "rt_py_library")
-
-rt_py_library(
- name = "test_hybrid",
- srcs = ["test_hybrid.py"],
- visibility = ["//visibility:public"],
-)
diff --git a/manipulation/exercises/intro/BUILD.bazel b/manipulation/exercises/intro/BUILD.bazel
deleted file mode 100644
index 3c9eed4d..00000000
--- a/manipulation/exercises/intro/BUILD.bazel
+++ /dev/null
@@ -1,25 +0,0 @@
-# -*- mode: python -*-
-# vi: set ft=python :
-
-# Copyright 2025-2026 Massachusetts Institute of Technology.
-# Licensed under the BSD 3-Clause License. See LICENSE.TXT for details.
-
-load("//book/htmlbook/tools/python:defs.bzl", "rt_py_library")
-
-rt_py_library(
- name = "test_intro_fundamentals",
- srcs = ["test_intro_fundamentals.py"],
- visibility = ["//visibility:public"],
-)
-
-rt_py_library(
- name = "test_physics_simulation_and_robots",
- srcs = ["test_physics_simulation_and_robots.py"],
- visibility = ["//visibility:public"],
-)
-
-rt_py_library(
- name = "test_hardwarestation_and_scenarios",
- srcs = ["test_hardwarestation_and_scenarios.py"],
- visibility = ["//visibility:public"],
-)
diff --git a/manipulation/exercises/mobile/BUILD.bazel b/manipulation/exercises/mobile/BUILD.bazel
deleted file mode 100644
index 2261f7ec..00000000
--- a/manipulation/exercises/mobile/BUILD.bazel
+++ /dev/null
@@ -1,13 +0,0 @@
-# -*- mode: python -*-
-# vi: set ft=python :
-
-# Copyright 2020-2024 Massachusetts Institute of Technology.
-# Licensed under the BSD 3-Clause License. See LICENSE.TXT for details.
-
-load("//book/htmlbook/tools/python:defs.bzl", "rt_py_library")
-
-rt_py_library(
- name = "test_mobile_base_ik",
- srcs = ["test_mobile_base_ik.py"],
- visibility = ["//visibility:public"],
-)
\ No newline at end of file
diff --git a/manipulation/exercises/pick/BUILD.bazel b/manipulation/exercises/pick/BUILD.bazel
deleted file mode 100644
index af5dcd7d..00000000
--- a/manipulation/exercises/pick/BUILD.bazel
+++ /dev/null
@@ -1,50 +0,0 @@
-# -*- mode: python -*-
-# vi: set ft=python :
-
-# Copyright 2020-2024 Massachusetts Institute of Technology.
-# Licensed under the BSD 3-Clause License. See LICENSE.TXT for details.
-
-load("//book/htmlbook/tools/python:defs.bzl", "rt_py_library")
-
-rt_py_library(
- name = "test_differential_ik",
- srcs = ["test_differential_ik.py"],
- visibility = ["//visibility:public"],
-)
-
-rt_py_library(
- name = "test_simple_qp",
- srcs = ["test_simple_qp.py"],
- visibility = ["//visibility:public"],
-)
-
-rt_py_library(
- name = "test_planar_manipulator",
- srcs = ["test_planar_manipulator.py"],
- visibility = ["//visibility:public"],
-)
-
-rt_py_library(
- name = "plot_planar_manipulator",
- srcs = ["plot_planar_manipulator.py"],
- visibility = ["//visibility:public"],
-)
-
-rt_py_library(
- name = "test_robot_painter",
- srcs = ["test_robot_painter.py"],
- visibility = ["//visibility:public"],
-)
-
-rt_py_library(
- name = "test_rigid_transforms",
- srcs = ["test_rigid_transforms.py"],
- visibility = ["//visibility:public"],
-)
-
-
-rt_py_library(
- name="test_pickplace_initials",
- srcs=["test_pickplace_initials.py"],
- visibility = ["//visibility:public"],
-)
diff --git a/manipulation/exercises/pose/BUILD.bazel b/manipulation/exercises/pose/BUILD.bazel
deleted file mode 100644
index cadde1f5..00000000
--- a/manipulation/exercises/pose/BUILD.bazel
+++ /dev/null
@@ -1,32 +0,0 @@
-# -*- mode: python -*-
-# vi: set ft=python :
-
-# Copyright 2020-2024 Massachusetts Institute of Technology.
-# Licensed under the BSD 3-Clause License. See LICENSE.TXT for details.
-
-load("//book/htmlbook/tools/python:defs.bzl", "rt_py_library")
-
-rt_py_library(
- name = "test_pose_estimation",
- srcs = ["test_pose_estimation.py"],
- visibility = ["//visibility:public"],
- deps = ["//manipulation"],
-)
-
-rt_py_library(
- name = "test_icp",
- srcs = ["test_icp.py"],
- visibility = ["//visibility:public"],
-)
-
-rt_py_library(
- name = "test_ransac",
- srcs = ["test_ransac.py"],
- visibility = ["//visibility:public"],
-)
-
-rt_py_library(
- name = "test_pickplace_initials_with_geometry",
- srcs = ["test_pickplace_initials_with_geometry.py"],
- visibility = ["//visibility:public"],
-)
diff --git a/manipulation/exercises/rl/BUILD.bazel b/manipulation/exercises/rl/BUILD.bazel
deleted file mode 100644
index 0af01442..00000000
--- a/manipulation/exercises/rl/BUILD.bazel
+++ /dev/null
@@ -1,19 +0,0 @@
-# -*- mode: python -*-
-# vi: set ft=python :
-
-# Copyright 2020-2024 Massachusetts Institute of Technology.
-# Licensed under the BSD 3-Clause License. See LICENSE.TXT for details.
-
-load("//book/htmlbook/tools/python:defs.bzl", "rt_py_library")
-
-rt_py_library(
- name = "test_stochastic_optimization",
- srcs = ["test_stochastic_optimization.py"],
- visibility = ["//visibility:public"],
-)
-
-rt_py_library(
- name = "test_vpg",
- srcs = ["test_vpg.py"],
- visibility = ["//visibility:public"],
-)
diff --git a/manipulation/exercises/robot/BUILD.bazel b/manipulation/exercises/robot/BUILD.bazel
deleted file mode 100644
index fadfa18a..00000000
--- a/manipulation/exercises/robot/BUILD.bazel
+++ /dev/null
@@ -1,37 +0,0 @@
-# -*- mode: python -*-
-# vi: set ft=python :
-
-# Copyright 2020-2024 Massachusetts Institute of Technology.
-# Licensed under the BSD 3-Clause License. See LICENSE.TXT for details.
-
-load("//book/htmlbook/tools/python:defs.bzl", "rt_py_library")
-
-rt_py_library(
- name = "test_reflected_inertia",
- srcs = ["test_reflected_inertia.py"],
- visibility = ["//visibility:public"],
-)
-
-rt_py_library(
- name = "test_hardware_station_io",
- srcs = ["test_hardware_station_io.py"],
- visibility = ["//visibility:public"],
-)
-
-rt_py_library(
- name = "test_direct_joint_control",
- srcs = ["test_direct_joint_control.py"],
- visibility = ["//visibility:public"],
-)
-
-rt_py_library(
- name = "test_survey",
- srcs = ["test_survey.py"],
- visibility = ["//visibility:public"],
-)
-
-rt_py_library(
- name = "test_pid",
- srcs = ["test_pid.py"],
- visibility = ["//visibility:public"],
-)
diff --git a/manipulation/exercises/segmentation/BUILD.bazel b/manipulation/exercises/segmentation/BUILD.bazel
deleted file mode 100644
index 7c90d183..00000000
--- a/manipulation/exercises/segmentation/BUILD.bazel
+++ /dev/null
@@ -1,20 +0,0 @@
-# -*- mode: python -*-
-# vi: set ft=python :
-
-# Copyright 2020-2024 Massachusetts Institute of Technology.
-# Licensed under the BSD 3-Clause License. See LICENSE.TXT for details.
-
-load("//book/htmlbook/tools/python:defs.bzl", "rt_py_library")
-
-rt_py_library(
- name = "test_mask",
- srcs = ["test_mask.py"],
- visibility = ["//visibility:public"],
-)
-
-rt_py_library(
- name = "test_segmentation_and_grasp",
- data = ["//book/data:segmentation_and_grasp_soln.npz"],
- srcs = ["test_segmentation_and_grasp.py"],
- visibility = ["//visibility:public"],
-)
\ No newline at end of file
diff --git a/manipulation/exercises/trajectories/BUILD.bazel b/manipulation/exercises/trajectories/BUILD.bazel
deleted file mode 100644
index fc12528b..00000000
--- a/manipulation/exercises/trajectories/BUILD.bazel
+++ /dev/null
@@ -1,31 +0,0 @@
-# -*- mode: python -*-
-# vi: set ft=python :
-
-# Copyright 2020-2024 Massachusetts Institute of Technology.
-# Licensed under the BSD 3-Clause License. See LICENSE.TXT for details.
-
-load("//book/htmlbook/tools/python:defs.bzl", "rt_py_library")
-
-rt_py_library(
- name = "test_door_opening",
- srcs = ["test_door_opening.py"],
- visibility = ["//visibility:public"],
-)
-
-rt_py_library(
- name = "test_rrt_planning",
- srcs = ["test_rrt_planning.py"],
- visibility = ["//visibility:public"],
-)
-
-rt_py_library(
- name = "test_taskspace_iris",
- srcs = ["test_taskspace_iris.py"],
- visibility = ["//visibility:public"],
-)
-
-rt_py_library(
- name = "test_plan_place_initials",
- srcs = ["test_plan_place_initials.py"],
- visibility = ["//visibility:public"],
-)
diff --git a/manipulation/exercises/trajectories/rrt_planner/BUILD.bazel b/manipulation/exercises/trajectories/rrt_planner/BUILD.bazel
deleted file mode 100644
index 9352f91e..00000000
--- a/manipulation/exercises/trajectories/rrt_planner/BUILD.bazel
+++ /dev/null
@@ -1,20 +0,0 @@
-# -*- mode: python -*-
-# vi: set ft=python :
-
-# Copyright 2020-2024 Massachusetts Institute of Technology.
-# Licensed under the BSD 3-Clause License. See LICENSE.TXT for details.
-
-load("//book/htmlbook/tools/python:defs.bzl", "rt_py_library")
-
-rt_py_library(
- name = "rrt_planner",
- srcs = [
- "__init__.py",
- "geometry.py",
- "iiwa_rrt_problem.py",
- "robot.py",
- "rrt_planning.py",
- ],
- imports = [".."],
- visibility = ["//visibility:public"],
-)
diff --git a/manipulation/models/BUILD.bazel b/manipulation/models/BUILD.bazel
deleted file mode 100644
index 8f293893..00000000
--- a/manipulation/models/BUILD.bazel
+++ /dev/null
@@ -1,25 +0,0 @@
-# -*- mode: python -*-
-# vi: set ft=python :
-
-# Copyright 2020-2024 Massachusetts Institute of Technology.
-# Licensed under the BSD 3-Clause License. See LICENSE.TXT for details.
-
-filegroup(
- name = "models",
- srcs = glob([
- "**/*.sdf",
- "**/*.urdf",
- "**/*.yaml",
- "**/*.xml",
- "**/*.obj",
- ]),
- visibility = ["//visibility:public"],
-)
-
-exports_files(
- glob([
- "**/*.sdf",
- "**/*.urdf",
- ]),
- visibility = ["//visibility:public"],
-)
diff --git a/manipulation/models/bunny/BUILD.bazel b/manipulation/models/bunny/BUILD.bazel
deleted file mode 100644
index ab2956fe..00000000
--- a/manipulation/models/bunny/BUILD.bazel
+++ /dev/null
@@ -1,13 +0,0 @@
-# -*- mode: python -*-
-# vi: set ft=python :
-
-# Copyright 2020-2024 Massachusetts Institute of Technology.
-# Licensed under the BSD 3-Clause License. See LICENSE.TXT for details.
-
-exports_files(
- [
- "bunny.npy",
- "bun_zipper_res2.ply",
- ],
- visibility = ["//:__subpackages__"],
-)
diff --git a/manipulation/station.py b/manipulation/station.py
index 7f3e4fbe..e29189ae 100644
--- a/manipulation/station.py
+++ b/manipulation/station.py
@@ -1326,6 +1326,7 @@ def _ApplyCameraLcmIdInterface(
) -> None:
lcm = lcm_buses.Find("Driver for " + camera_config.name, camera_config.lcm_bus)
+ print(camera_config.name, camera_id)
camera_data_receiver = builder.AddSystem(LcmImageArrayToImages())
camera_data_receiver.set_name(camera_config.name + ".data_receiver")
camera_data_subscriber = builder.AddSystem(
@@ -1408,20 +1409,21 @@ def _MakeHardwareStationInterface(
lcm_buses = ApplyLcmBusConfig(lcm_buses=scenario.lcm_buses, builder=builder)
# Add drivers.
- _ApplyDriverConfigsInterface(
- driver_configs=scenario.model_drivers,
- lcm_buses=lcm_buses,
- builder=builder,
- )
-
- if meshcat is not None:
- _WireDriverStatusReceiversToToPose(
- model_instance_names=scenario.model_drivers.keys(),
+ if scenario.model_drivers:
+ _ApplyDriverConfigsInterface(
+ driver_configs=scenario.model_drivers,
+ lcm_buses=lcm_buses,
builder=builder,
- plant=plant,
- to_pose=to_pose,
)
+ if meshcat is not None:
+ _WireDriverStatusReceiversToToPose(
+ model_instance_names=scenario.model_drivers.keys(),
+ builder=builder,
+ plant=plant,
+ to_pose=to_pose,
+ )
+
# Add camera ids
for camera_name, camera_id in scenario.camera_ids.items():
_ApplyCameraLcmIdInterface(
diff --git a/manipulation/test/models/BUILD.bazel b/manipulation/test/models/BUILD.bazel
deleted file mode 100644
index 16287f7b..00000000
--- a/manipulation/test/models/BUILD.bazel
+++ /dev/null
@@ -1,20 +0,0 @@
-# -*- mode: python -*-
-# vi: set ft=python :
-
-# Copyright 2020-2024 Massachusetts Institute of Technology.
-# Licensed under the BSD 3-Clause License. See LICENSE.TXT for details.
-
-filegroup(
- name = "models",
- srcs = glob([
- "**/*.sdf",
- "**/*.urdf",
- "**/*.yaml",
- "**/*.xml",
- "**/*.obj",
- "**/*.dae",
- "**/*.stl",
- "assets/*",
- ]),
- visibility = ["//visibility:public"],
-)
diff --git a/manipulation/test/test_station_camera_ids.py b/manipulation/test/test_station_camera_ids.py
index b4d41606..e7945432 100644
--- a/manipulation/test/test_station_camera_ids.py
+++ b/manipulation/test/test_station_camera_ids.py
@@ -46,9 +46,17 @@ def test_load_scenario_with_camera_ids(self):
self.assertTrue(station.HasSubsystemNamed("camera0.data_subscriber"))
self.assertTrue(station.HasSubsystemNamed("camera0.data_receiver"))
- in_system, out_system = next(iter(station.connection_map().items()))
- self.assertIsInstance(in_system[0], LcmImageArrayToImages)
- self.assertIsInstance(out_system[0], LcmSubscriberSystem)
+ connection_map = station.connection_map()
+ has_camera_connection = any(
+ isinstance(in_sys[0], LcmImageArrayToImages)
+ and isinstance(out_sys[0], LcmSubscriberSystem)
+ for in_sys, out_sys in connection_map.items()
+ )
+ self.assertTrue(
+ has_camera_connection,
+ "Expected at least one connection from LcmImageArrayToImages to "
+ "LcmSubscriberSystem in connection_map",
+ )
if __name__ == "__main__":
diff --git a/manipulation/utils.py b/manipulation/utils.py
index 394d4fcb..2b5c68a8 100644
--- a/manipulation/utils.py
+++ b/manipulation/utils.py
@@ -67,7 +67,7 @@ def FindDataResource(filename: str):
if running_as_test:
raise FileNotFoundError(
f"{path} was not found locally; it is required for testing."
- ) # because the urlretrieve defeats bazel's hermetic testing.
+ ) # Keep tests deterministic and independent of network access.
print(f"{path} was not found locally; downloading it now...")
urlretrieve(f"https://manipulation.csail.mit.edu/data/{filename}", path)
return path
diff --git a/poetry.lock b/poetry.lock
index 27261f00..1f237e2b 100644
--- a/poetry.lock
+++ b/poetry.lock
@@ -1,4 +1,4 @@
-# This file is automatically @generated by Poetry 2.1.4 and should not be changed by hand.
+# This file is automatically @generated by Poetry 2.3.2 and should not be changed by hand.
[[package]]
name = "alabaster"
@@ -115,7 +115,7 @@ files = [
{file = "beautifulsoup4-4.13.5-py3-none-any.whl", hash = "sha256:642085eaa22233aceadff9c69651bc51e8bf3f874fb6d7104ece2beb24b47c4a"},
{file = "beautifulsoup4-4.13.5.tar.gz", hash = "sha256:5e70131382930e7c3de33450a2f54a63d5e4b19386eab43a5b34d594268f3695"},
]
-markers = {main = "sys_platform == \"darwin\" or sys_platform == \"linux\""}
+markers = {main = "extra == \"grader\" and (sys_platform == \"darwin\" or sys_platform == \"linux\")"}
[package.dependencies]
soupsieve = ">1.2"
@@ -761,22 +761,24 @@ files = [
[[package]]
name = "drake"
-version = "1.43.0"
+version = "1.50.0"
description = "Model-based design and verification for robotics"
optional = false
python-versions = ">=3.10"
groups = ["main", "docs"]
files = [
- {file = "drake-1.43.0-cp310-cp310-manylinux_2_34_x86_64.whl", hash = "sha256:6311032ee16308694f08e16973d9af04ea3d10b38404fb4fb2214c60672913b0"},
- {file = "drake-1.43.0-cp311-cp311-manylinux_2_34_x86_64.whl", hash = "sha256:a4c8436f759e86739c4a27439e821f1951e06f38a4e2590101bcb2786e19ffe9"},
- {file = "drake-1.43.0-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:491318cdad1bba249d7e30e98b1da22c98b83ea5b173dd44da05e4d75db1dd13"},
- {file = "drake-1.43.0-cp312-cp312-manylinux_2_34_x86_64.whl", hash = "sha256:8990aed4c94e68c59e1432d57aab34ca36d555c76259fb3e29f5503a402cdc2f"},
- {file = "drake-1.43.0-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:2d2fdc09ff754bfb3997df4ead13c860476d091093c74c860d556acf34d41bda"},
- {file = "drake-1.43.0-cp313-cp313-manylinux_2_34_x86_64.whl", hash = "sha256:f51bfbf0145802ade8fb8fb03a3a0b69dd6d46654e93c44b1f9c036e339d2772"},
+ {file = "drake-1.50.0-cp310-cp310-manylinux_2_34_x86_64.whl", hash = "sha256:7933e33a93336c5b1a5c4570b31aa75fcd81059c6481e4e8b4230d6b502347ce"},
+ {file = "drake-1.50.0-cp311-cp311-manylinux_2_34_x86_64.whl", hash = "sha256:cf1b3a0023e10ff2a466d0b8a363ce19ca3f2b4d56566df231cb54530769f1f6"},
+ {file = "drake-1.50.0-cp312-cp312-manylinux_2_34_x86_64.whl", hash = "sha256:913be925530b7167f51a3223b9c4f99a17b9cd02b5a04fc2bda095ea57eaf22c"},
+ {file = "drake-1.50.0-cp313-cp313-macosx_15_0_arm64.whl", hash = "sha256:88a8bb9f60833f082931ca467c545cd75074b28225958bda5e1e5db0a7d7d2dd"},
+ {file = "drake-1.50.0-cp313-cp313-manylinux_2_34_x86_64.whl", hash = "sha256:ab7c3a5a2f53708dee2102f988c694b8626f4e52f66a36b1f4c322a3b0ed096d"},
+ {file = "drake-1.50.0-cp314-cp314-macosx_15_0_arm64.whl", hash = "sha256:eebed80dc9c2ea147475d2b70ba62422da8fe87d1745b910ed7a4beb2d2f5ce8"},
+ {file = "drake-1.50.0-cp314-cp314-manylinux_2_34_x86_64.whl", hash = "sha256:3f6db3abb15801a1c0830d80c2efb9df55541dd76e167f159e29d5fa2a559a6b"},
]
[package.dependencies]
matplotlib = "*"
+Mosek = {version = "11.1.2", markers = "python_version < \"3.15\" and platform_machine != \"aarch64\""}
numpy = "*"
pydot = "*"
PyYAML = "*"
@@ -1165,6 +1167,18 @@ files = [
{file = "imagesize-1.4.1.tar.gz", hash = "sha256:69150444affb9cb0d5cc5a92b3676f0b2fb7cd9ae39e947a5e11a36b4497cd4a"},
]
+[[package]]
+name = "iniconfig"
+version = "2.3.0"
+description = "brain-dead simple config-ini parsing"
+optional = false
+python-versions = ">=3.10"
+groups = ["dev"]
+files = [
+ {file = "iniconfig-2.3.0-py3-none-any.whl", hash = "sha256:f631c04d2c48c52b84d0d0549c99ff3859c98df65b3101406327ecc7d53fbf12"},
+ {file = "iniconfig-2.3.0.tar.gz", hash = "sha256:c76315c77db068650d49c5b56314774a7804df16fee4402c1f19d6d15d8c4730"},
+]
+
[[package]]
name = "ipython"
version = "8.37.0"
@@ -1293,7 +1307,7 @@ files = [
[package.dependencies]
attrs = ">=22.2.0"
-jsonschema-specifications = ">=2023.03.6"
+jsonschema-specifications = ">=2023.3.6"
referencing = ">=0.28.4"
rpds-py = ">=0.7.1"
@@ -1994,6 +2008,24 @@ files = [
[package.dependencies]
typing-extensions = {version = "*", markers = "python_version < \"3.11\""}
+[[package]]
+name = "mosek"
+version = "11.1.2"
+description = "Python API for Mosek"
+optional = false
+python-versions = "<3.15,>=3.9"
+groups = ["main", "docs"]
+markers = "python_version < \"3.15\" and platform_machine != \"aarch64\""
+files = [
+ {file = "mosek-11.1.2-cp39-abi3-macosx_11_0_arm64.whl", hash = "sha256:c56a776188951b9028b47f9e814eb21ac0c8b44b564baf8c584277c9f61a4277"},
+ {file = "mosek-11.1.2-cp39-abi3-manylinux2014_x86_64.whl", hash = "sha256:5c3566d2a603d94a1773bcd27097c8390dba1d9a1543534f3527deb56f1d0a55"},
+ {file = "mosek-11.1.2-cp39-abi3-manylinux_2_27_aarch64.whl", hash = "sha256:67c13d56a9b7adf2670e4ed6fb62aa92560ae2ff1050f6e756d0d3f82c42c19f"},
+ {file = "mosek-11.1.2-cp39-abi3-win_amd64.whl", hash = "sha256:ad81cfd53af508db89241c7869ddce7ceaae13ef057f7b98007d57dccbb63c92"},
+]
+
+[package.dependencies]
+numpy = "*"
+
[[package]]
name = "mpld3"
version = "0.5.11"
@@ -2863,6 +2895,22 @@ docs = ["furo (>=2024.8.6)", "proselint (>=0.14)", "sphinx (>=8.1.3)", "sphinx-a
test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=8.3.4)", "pytest-cov (>=6)", "pytest-mock (>=3.14)"]
type = ["mypy (>=1.14.1)"]
+[[package]]
+name = "pluggy"
+version = "1.6.0"
+description = "plugin and hook calling mechanisms for python"
+optional = false
+python-versions = ">=3.9"
+groups = ["dev"]
+files = [
+ {file = "pluggy-1.6.0-py3-none-any.whl", hash = "sha256:e920276dd6813095e9377c0bc5566d94c932c33b27a3e3945d8389c374dd4746"},
+ {file = "pluggy-1.6.0.tar.gz", hash = "sha256:7dcc130b76258d33b90f61b658791dede3486c3e6bfb003ee5c9bfb396dd22f3"},
+]
+
+[package.extras]
+dev = ["pre-commit", "tox"]
+testing = ["coverage", "pytest", "pytest-benchmark"]
+
[[package]]
name = "pre-commit"
version = "3.8.0"
@@ -3036,6 +3084,45 @@ files = [
[package.extras]
diagrams = ["jinja2", "railroad-diagrams"]
+[[package]]
+name = "pytest"
+version = "9.0.2"
+description = "pytest: simple powerful testing with Python"
+optional = false
+python-versions = ">=3.10"
+groups = ["dev"]
+files = [
+ {file = "pytest-9.0.2-py3-none-any.whl", hash = "sha256:711ffd45bf766d5264d487b917733b453d917afd2b0ad65223959f59089f875b"},
+ {file = "pytest-9.0.2.tar.gz", hash = "sha256:75186651a92bd89611d1d9fc20f0b4345fd827c41ccd5c299a868a05d70edf11"},
+]
+
+[package.dependencies]
+colorama = {version = ">=0.4", markers = "sys_platform == \"win32\""}
+exceptiongroup = {version = ">=1", markers = "python_version < \"3.11\""}
+iniconfig = ">=1.0.1"
+packaging = ">=22"
+pluggy = ">=1.5,<2"
+pygments = ">=2.7.2"
+tomli = {version = ">=1", markers = "python_version < \"3.11\""}
+
+[package.extras]
+dev = ["argcomplete", "attrs (>=19.2)", "hypothesis (>=3.56)", "mock", "requests", "setuptools", "xmlschema"]
+
+[[package]]
+name = "pytest-timeout"
+version = "2.4.0"
+description = "pytest plugin to abort hanging tests"
+optional = false
+python-versions = ">=3.7"
+groups = ["dev"]
+files = [
+ {file = "pytest_timeout-2.4.0-py3-none-any.whl", hash = "sha256:c42667e5cdadb151aeb5b26d114aff6bdf5a907f176a007a30b940d3d865b5c2"},
+ {file = "pytest_timeout-2.4.0.tar.gz", hash = "sha256:7e68e90b01f9eff71332b25001f85c75495fc4e3a836701876183c4bcfd0540a"},
+]
+
+[package.dependencies]
+pytest = ">=7.0.0"
+
[[package]]
name = "python-dateutil"
version = "2.9.0.post0"
@@ -3802,7 +3889,7 @@ files = [
{file = "soupsieve-2.8-py3-none-any.whl", hash = "sha256:0cc76456a30e20f5d7f2e14a98a4ae2ee4e5abdc7c5ea0aafe795f344bc7984c"},
{file = "soupsieve-2.8.tar.gz", hash = "sha256:e2dd4a40a628cb5f28f6d4b0db8800b8f581b65bb380b97de22ba5ca8d72572f"},
]
-markers = {main = "sys_platform == \"darwin\" or sys_platform == \"linux\""}
+markers = {main = "extra == \"grader\" and (sys_platform == \"darwin\" or sys_platform == \"linux\")"}
[[package]]
name = "sphinx"
@@ -4387,6 +4474,7 @@ files = [
{file = "trimesh-4.7.4-py3-none-any.whl", hash = "sha256:47af90235f7006316c37584b43d5f6c109a5069b252d7ab2bf8e6ed7c9fd953b"},
{file = "trimesh-4.7.4.tar.gz", hash = "sha256:8d242dfabd9bc4e99a4f0c75bf8c0a41fbb252924e3484b53a8b0096accb49e1"},
]
+markers = {main = "extra == \"all\" or extra == \"mesh\" or extra == \"letter\""}
[package.dependencies]
charset-normalizer = {version = "*", optional = true, markers = "extra == \"easy\""}
@@ -4452,7 +4540,7 @@ files = [
{file = "typing_extensions-4.15.0-py3-none-any.whl", hash = "sha256:f0fa19c6845758ab08074a0cfa8b7aecb71c999ca73d62883bc25cc018c4e548"},
{file = "typing_extensions-4.15.0.tar.gz", hash = "sha256:0cea48d173cc12fa28ecabc3b837ea3cf6f38c6d1136f85cbaaf598984861466"},
]
-markers = {main = "(sys_platform == \"darwin\" or sys_platform == \"linux\" or python_version <= \"3.12\" or extra == \"rl\" or extra == \"all\" or extra == \"torch\") and (sys_platform == \"darwin\" or sys_platform == \"linux\" or python_version < \"3.12\" or extra == \"grader\" or extra == \"all\" or extra == \"rl\" or extra == \"torch\")", docs = "python_version < \"3.12\""}
+markers = {main = "(extra == \"grader\" or extra == \"rl\" or extra == \"all\" or extra == \"torch\" or python_version < \"3.12\") and (sys_platform == \"darwin\" or sys_platform == \"linux\" or python_version <= \"3.12\" or extra == \"rl\" or extra == \"all\" or extra == \"torch\")", docs = "python_version < \"3.12\""}
[[package]]
name = "tzdata"
@@ -4543,6 +4631,7 @@ files = [
{file = "vhacdx-0.0.8.post2-cp39-cp39-win_amd64.whl", hash = "sha256:93041cf52887f144ad3d297a43631fcf4359dc7589c52d9a1be408d668e420e4"},
{file = "vhacdx-0.0.8.post2.tar.gz", hash = "sha256:aa27c5ef19ed4aba428fa9408dccc37f2b7a6bbfaddc48b06a8cea9faaf93156"},
]
+markers = {main = "extra == \"all\" or extra == \"mesh\""}
[package.dependencies]
numpy = "*"
@@ -4778,4 +4867,4 @@ torch = ["torch", "torchvision"]
[metadata]
lock-version = "2.1"
python-versions = ">=3.10,<4.0"
-content-hash = "613bf787884590d7cf1f95914504abc8e027d715d56f9322c5dd8861741de751"
+content-hash = "8270e1ed0c2a175a4ab0c7ce565a6ab877794fe33645ada3fc6b8714b029c1ff"
diff --git a/pyproject.toml b/pyproject.toml
index fe5e2fb4..403945e5 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -50,13 +50,12 @@ priority = "explicit"
python = ">=3.10,<4.0" # Support Python 3.10 (Jammy CI), Python 3.12 (Noble CI), and 3.13 (macOS)
cloudpickle = { version="2.2.1", optional=true} # needs to be pinned for stored files to remain compatible.
#drake = { version = ">=0.0.20250131 <0.1", source = "drake-nightly" }
-drake = ">=1.41.0"
+drake = ">=1.45.0"
gradescope-utils = { version=">=0.4.0", optional=true}
gymnasium = { version=">0.26", optional=true }
ipython = ">=7.8.0" # TODO: make this optional?
ipywidgets = { version=">=8", optional=true }
lxml = {version = ">=4.9.2", extras = ["html_clean"] }
-# Note: matplotlib gets additional handling in PoetryExport.py for bazel.
matplotlib = ">=3.7.0" # old versions don't build in XCode
mpld3 = { version=">=0.5.6", optional=false } # TODO: make this optional
nbconvert = [
@@ -132,7 +131,7 @@ optional = true
# needed to import for a file that sphinx autodoc is trying to index. None of
# these should be marked as optional.
#drake = { version = ">=0.0.20250118 <0.1", source = "drake-nightly" }
-drake = ">=1.41.0"
+drake = ">=1.45.0"
ipython = ">=7.8.0"
lxml = {version = ">=4.9.2", extras = ["html_clean"] }
mpld3 = { version=">=0.5.6", optional=false }
@@ -150,13 +149,11 @@ black = { version = ">=23.*", extras = ["jupyter"] }
mysql-connector-python = { version=">=8.0.23" }
packaging = ">=24.2"
pip-requirements-parser = ">=32.0"
+pytest = ">=8.0"
+pytest-timeout = ">=2.3.1"
pre-commit = "^3.4.0"
requests = { version=">=2.25.1" }
-[tool.poetry.requires-plugins]
-poetry-plugin-export = ">=1.8"
-poetry-pre-commit-plugin = ">=0.2"
-
[tool.black]
include = '\.ipynb?$|\.pyi?$'
exclude = '''
@@ -191,5 +188,20 @@ remove-all-unused-imports = true
remove-duplicate-keys = true
remove-unused-variables = true
+[tool.pytest.ini_options]
+minversion = "8.0"
+addopts = "-ra"
+testpaths = [
+ "book",
+ "manipulation/test",
+ "solutions",
+]
+python_files = [
+ "test_*.py",
+]
+markers = [
+ "notebook: notebook execution tests",
+]
+
[tool.pyright]
-include = ["manipulation"]
\ No newline at end of file
+include = ["manipulation"]
diff --git a/requirements-bazel-linux.txt b/requirements-bazel-linux.txt
deleted file mode 100644
index cdd40623..00000000
--- a/requirements-bazel-linux.txt
+++ /dev/null
@@ -1,132 +0,0 @@
---find-links https://download.pytorch.org/whl/torch_stable.html
-anyio==4.10.0 ; python_version >= "3.10" and python_version < "4.0"
-asttokens==3.0.0 ; python_version >= "3.10" and python_version < "4.0"
-attrs==25.3.0 ; python_version >= "3.10" and python_version < "4.0"
-bayesian-optimization==1.4.0 ; python_version >= "3.10" and python_version < "4.0"
-beautifulsoup4==4.13.5 ; python_version >= "3.10" and python_version < "4.0"
-black==25.1.0 ; python_version >= "3.10" and python_version < "4.0"
-bleach==6.2.0 ; python_version >= "3.10" and python_version < "4.0" and (sys_platform == "darwin" or sys_platform == "linux")
-certifi==2025.8.3 ; python_version >= "3.10" and python_version < "4.0"
-cfgv==3.4.0 ; python_version >= "3.10" and python_version < "4.0"
-charset-normalizer==3.4.3 ; python_version >= "3.10" and python_version < "4.0"
-click==8.2.1 ; python_version >= "3.10" and python_version < "4.0"
-cloudpickle==2.2.1 ; python_version >= "3.10" and python_version < "4.0"
-cma==4.3.0 ; python_version >= "3.10" and python_version < "4.0"
-coacd==1.0.7 ; python_version >= "3.10" and python_version < "4.0"
-colorlog==6.9.0 ; python_version >= "3.10" and python_version < "4.0"
-comm==0.2.3 ; python_version >= "3.10" and python_version < "4.0"
-config-path==1.0.5 ; python_version >= "3.10" and python_version < "4.0"
-contourpy==1.3.2 ; python_version >= "3.10" and python_version < "4.0"
-cycler==0.12.1 ; python_version >= "3.10" and python_version < "4.0"
-cython==3.1.3 ; python_version >= "3.10" and python_version < "4.0"
-decorator==5.2.1 ; python_version >= "3.10" and python_version < "4.0"
-defusedxml==0.7.1 ; python_version >= "3.10" and python_version < "4.0" and (sys_platform == "darwin" or sys_platform == "linux")
-directsearch==1.0 ; python_version >= "3.10" and python_version < "4.0"
-distlib==0.4.0 ; python_version >= "3.10" and python_version < "4.0"
-drake==1.43.0 ; python_version >= "3.10" and python_version < "4.0"
-executing==2.2.0 ; python_version >= "3.10" and python_version < "4.0"
-farama-notifications==0.0.4 ; python_version >= "3.10" and python_version < "4.0"
-fastjsonschema==2.21.2 ; python_version >= "3.10" and python_version < "4.0"
-filelock==3.19.1 ; python_version >= "3.10" and python_version < "4.0"
-fonttools==4.59.2 ; python_version >= "3.10" and python_version < "4.0"
-fsspec==2025.7.0 ; python_version >= "3.10" and python_version < "4.0"
-gradescope-utils==0.5.0 ; python_version >= "3.10" and python_version < "4.0"
-gymnasium==1.2.0 ; python_version >= "3.10" and python_version < "4.0"
-h11==0.16.0 ; python_version >= "3.10" and python_version < "4.0"
-httpcore==1.0.9 ; python_version >= "3.10" and python_version < "4.0"
-httpx==0.28.1 ; python_version >= "3.10" and python_version < "4.0"
-identify==2.6.13 ; python_version >= "3.10" and python_version < "4.0"
-idna==3.10 ; python_version >= "3.10" and python_version < "4.0"
-ipython==8.37.0 ; python_version >= "3.10" and python_version < "4.0"
-ipywidgets==8.1.7 ; python_version >= "3.10" and python_version < "4.0"
-jedi==0.19.2 ; python_version >= "3.10" and python_version < "4.0"
-jinja2==3.1.6 ; python_version >= "3.10" and python_version < "4.0"
-joblib==1.5.2 ; python_version >= "3.10" and python_version < "4.0"
-jsonschema-specifications==2025.4.1 ; python_version >= "3.10" and python_version < "4.0"
-jsonschema==4.25.1 ; python_version >= "3.10" and python_version < "4.0"
-jupyter-client==8.6.3 ; python_version >= "3.10" and python_version < "4.0" and (sys_platform == "darwin" or sys_platform == "linux")
-jupyter-core==5.8.1 ; python_version >= "3.10" and python_version < "4.0"
-jupyterlab-pygments==0.3.0 ; python_version >= "3.10" and python_version < "4.0" and (sys_platform == "darwin" or sys_platform == "linux")
-jupyterlab-widgets==3.0.15 ; python_version >= "3.10" and python_version < "4.0"
-kiwisolver==1.4.9 ; python_version >= "3.10" and python_version < "4.0"
-lxml-html-clean==0.4.2 ; python_version >= "3.10" and python_version < "4.0"
-lxml==6.0.1 ; python_version >= "3.10" and python_version < "4.0"
-manifold3d==3.2.1 ; python_version >= "3.10" and python_version < "4.0"
-mapbox-earcut==1.0.3 ; python_version >= "3.10" and python_version < "4.0"
-markupsafe==3.0.2 ; python_version >= "3.10" and python_version < "4.0"
-matplotlib-inline==0.1.7 ; python_version >= "3.10" and python_version < "4.0"
-matplotlib==3.10.6 ; python_version >= "3.10" and python_version < "4.0"
-mistune==3.1.4 ; python_version >= "3.10" and python_version < "4.0" and (sys_platform == "darwin" or sys_platform == "linux")
-mpld3==0.5.11 ; python_version >= "3.10" and python_version < "4.0"
-mpmath==1.3.0 ; python_version >= "3.10" and python_version < "4.0"
-mypy-extensions==1.1.0 ; python_version >= "3.10" and python_version < "4.0"
-mysql-connector-python==9.4.0 ; python_version >= "3.10" and python_version < "4.0"
-nbclient==0.10.2 ; python_version >= "3.10" and python_version < "4.0" and (sys_platform == "darwin" or sys_platform == "linux")
-nbconvert==7.14.2 ; python_version >= "3.10" and python_version < "4.0" and (sys_platform == "darwin" or sys_platform == "linux")
-nbformat==5.10.4 ; python_version >= "3.10" and python_version < "4.0"
-networkx==3.4.2 ; python_version >= "3.10" and python_version < "4.0"
-nevergrad==1.0.12 ; python_version >= "3.10" and python_version < "4.0"
-nodeenv==1.9.1 ; python_version >= "3.10" and python_version < "4.0"
-numpy==2.2.6 ; python_version >= "3.10" and python_version < "4.0"
-packaging==25.0 ; python_version >= "3.10" and python_version < "4.0"
-pandas==2.3.2 ; python_version >= "3.10" and python_version < "4.0"
-pandocfilters==1.5.1 ; python_version >= "3.10" and python_version < "4.0" and (sys_platform == "darwin" or sys_platform == "linux")
-parso==0.8.5 ; python_version >= "3.10" and python_version < "4.0"
-pathspec==0.12.1 ; python_version >= "3.10" and python_version < "4.0"
-pexpect==4.9.0 ; python_version >= "3.10" and python_version < "4.0" and (sys_platform == "darwin" or sys_platform == "linux" or sys_platform != "darwin" and sys_platform != "linux" and sys_platform != "win32" and sys_platform != "emscripten")
-pillow==11.3.0 ; python_version >= "3.10" and python_version < "4.0"
-pip-requirements-parser==32.0.1 ; python_version >= "3.10" and python_version < "4.0"
-platformdirs==4.4.0 ; python_version >= "3.10" and python_version < "4.0"
-pre-commit==3.8.0 ; python_version >= "3.10" and python_version < "4.0"
-prompt-toolkit==3.0.52 ; python_version >= "3.10" and python_version < "4.0"
-psutil==7.0.0 ; python_version >= "3.10" and python_version < "4.0"
-ptyprocess==0.7.0 ; python_version >= "3.10" and python_version < "4.0" and (sys_platform == "darwin" or sys_platform == "linux" or sys_platform != "darwin" and sys_platform != "linux" and sys_platform != "win32" and sys_platform != "emscripten")
-pure-eval==0.2.3 ; python_version >= "3.10" and python_version < "4.0"
-pycollada==0.9.2 ; python_version >= "3.10" and python_version < "4.0"
-pydot==4.0.1 ; python_version >= "3.10" and python_version < "4.0"
-pygments==2.19.2 ; python_version >= "3.10" and python_version < "4.0"
-pyparsing==3.2.3 ; python_version >= "3.10" and python_version < "4.0"
-python-dateutil==2.9.0.post0 ; python_version >= "3.10" and python_version < "4.0"
-python-fcl==0.7.0.8 ; python_version >= "3.10" and python_version < "4.0"
-pytz==2025.2 ; python_version >= "3.10" and python_version < "4.0"
-pyvirtualdisplay==3.0 ; python_version >= "3.10" and python_version < "4.0"
-pyyaml==6.0.2 ; python_version >= "3.10" and python_version < "4.0"
-pyzmq==27.0.2 ; python_version >= "3.10" and python_version < "4.0" and (sys_platform == "darwin" or sys_platform == "linux")
-referencing==0.36.2 ; python_version >= "3.10" and python_version < "4.0"
-requests==2.32.5 ; python_version >= "3.10" and python_version < "4.0"
-rpds-py==0.27.1 ; python_version >= "3.10" and python_version < "4.0"
-rtree==1.4.1 ; python_version >= "3.10" and python_version < "4.0"
-scene-synthesizer==1.15.0 ; python_version >= "3.10" and python_version < "4.0"
-scikit-learn==1.7.1 ; python_version >= "3.10" and python_version < "4.0"
-scipy==1.15.3 ; python_version >= "3.10" and python_version < "4.0"
-setuptools-scm==9.2.0 ; python_version >= "3.10" and python_version < "4.0"
-setuptools==70.3.0 ; python_version >= "3.10" and python_version < "4.0"
-shapely==2.1.1 ; python_version >= "3.10" and python_version < "4.0"
-six==1.17.0 ; python_version >= "3.10" and python_version < "4.0"
-sniffio==1.3.1 ; python_version >= "3.10" and python_version < "4.0"
-soupsieve==2.8 ; python_version >= "3.10" and python_version < "4.0"
-stable-baselines3==2.7.0 ; python_version >= "3.10" and python_version < "4.0"
-stack-data==0.6.3 ; python_version >= "3.10" and python_version < "4.0"
-svg-path==7.0 ; python_version >= "3.10" and python_version < "4.0"
-sympy==1.14.0 ; python_version >= "3.10" and python_version < "4.0"
-threadpoolctl==3.6.0 ; python_version >= "3.10" and python_version < "4.0"
-timeout-decorator==0.5.0 ; python_version >= "3.10" and python_version < "4.0"
-tinycss2==1.4.0 ; python_version >= "3.10" and python_version < "4.0" and (sys_platform == "darwin" or sys_platform == "linux")
-tokenize-rt==6.2.0 ; python_version >= "3.10" and python_version < "4.0"
-torch==2.7.1 ; python_version >= "3.10" and python_version < "4.0"
-torchvision==0.22.1 ; python_version >= "3.10" and python_version < "4.0"
-tornado==6.5.2 ; python_version >= "3.10" and python_version < "4.0" and (sys_platform == "darwin" or sys_platform == "linux")
-tqdm==4.67.1 ; python_version >= "3.10" and python_version < "4.0"
-traitlets==5.14.3 ; python_version >= "3.10" and python_version < "4.0"
-triangle==20250106 ; python_version >= "3.10" and python_version < "4.0"
-trimesh==4.7.4 ; python_version >= "3.10" and python_version < "4.0"
-typing-extensions==4.15.0 ; python_version >= "3.10" and python_version < "4.0"
-tzdata==2025.2 ; python_version >= "3.10" and python_version < "4.0"
-urllib3==2.5.0 ; python_version >= "3.10" and python_version < "4.0"
-vhacdx==0.0.8.post2 ; python_version >= "3.10" and python_version < "4.0"
-virtualenv==20.34.0 ; python_version >= "3.10" and python_version < "4.0"
-wcwidth==0.2.13 ; python_version >= "3.10" and python_version < "4.0"
-webencodings==0.5.1 ; python_version >= "3.10" and python_version < "4.0" and (sys_platform == "darwin" or sys_platform == "linux")
-widgetsnbextension==4.0.14 ; python_version >= "3.10" and python_version < "4.0"
-xxhash==3.5.0 ; python_version >= "3.10" and python_version < "4.0"
-yourdfpy==0.0.58 ; python_version >= "3.10" and python_version < "4.0"
diff --git a/requirements-bazel-mac.txt b/requirements-bazel-mac.txt
deleted file mode 100644
index cdd40623..00000000
--- a/requirements-bazel-mac.txt
+++ /dev/null
@@ -1,132 +0,0 @@
---find-links https://download.pytorch.org/whl/torch_stable.html
-anyio==4.10.0 ; python_version >= "3.10" and python_version < "4.0"
-asttokens==3.0.0 ; python_version >= "3.10" and python_version < "4.0"
-attrs==25.3.0 ; python_version >= "3.10" and python_version < "4.0"
-bayesian-optimization==1.4.0 ; python_version >= "3.10" and python_version < "4.0"
-beautifulsoup4==4.13.5 ; python_version >= "3.10" and python_version < "4.0"
-black==25.1.0 ; python_version >= "3.10" and python_version < "4.0"
-bleach==6.2.0 ; python_version >= "3.10" and python_version < "4.0" and (sys_platform == "darwin" or sys_platform == "linux")
-certifi==2025.8.3 ; python_version >= "3.10" and python_version < "4.0"
-cfgv==3.4.0 ; python_version >= "3.10" and python_version < "4.0"
-charset-normalizer==3.4.3 ; python_version >= "3.10" and python_version < "4.0"
-click==8.2.1 ; python_version >= "3.10" and python_version < "4.0"
-cloudpickle==2.2.1 ; python_version >= "3.10" and python_version < "4.0"
-cma==4.3.0 ; python_version >= "3.10" and python_version < "4.0"
-coacd==1.0.7 ; python_version >= "3.10" and python_version < "4.0"
-colorlog==6.9.0 ; python_version >= "3.10" and python_version < "4.0"
-comm==0.2.3 ; python_version >= "3.10" and python_version < "4.0"
-config-path==1.0.5 ; python_version >= "3.10" and python_version < "4.0"
-contourpy==1.3.2 ; python_version >= "3.10" and python_version < "4.0"
-cycler==0.12.1 ; python_version >= "3.10" and python_version < "4.0"
-cython==3.1.3 ; python_version >= "3.10" and python_version < "4.0"
-decorator==5.2.1 ; python_version >= "3.10" and python_version < "4.0"
-defusedxml==0.7.1 ; python_version >= "3.10" and python_version < "4.0" and (sys_platform == "darwin" or sys_platform == "linux")
-directsearch==1.0 ; python_version >= "3.10" and python_version < "4.0"
-distlib==0.4.0 ; python_version >= "3.10" and python_version < "4.0"
-drake==1.43.0 ; python_version >= "3.10" and python_version < "4.0"
-executing==2.2.0 ; python_version >= "3.10" and python_version < "4.0"
-farama-notifications==0.0.4 ; python_version >= "3.10" and python_version < "4.0"
-fastjsonschema==2.21.2 ; python_version >= "3.10" and python_version < "4.0"
-filelock==3.19.1 ; python_version >= "3.10" and python_version < "4.0"
-fonttools==4.59.2 ; python_version >= "3.10" and python_version < "4.0"
-fsspec==2025.7.0 ; python_version >= "3.10" and python_version < "4.0"
-gradescope-utils==0.5.0 ; python_version >= "3.10" and python_version < "4.0"
-gymnasium==1.2.0 ; python_version >= "3.10" and python_version < "4.0"
-h11==0.16.0 ; python_version >= "3.10" and python_version < "4.0"
-httpcore==1.0.9 ; python_version >= "3.10" and python_version < "4.0"
-httpx==0.28.1 ; python_version >= "3.10" and python_version < "4.0"
-identify==2.6.13 ; python_version >= "3.10" and python_version < "4.0"
-idna==3.10 ; python_version >= "3.10" and python_version < "4.0"
-ipython==8.37.0 ; python_version >= "3.10" and python_version < "4.0"
-ipywidgets==8.1.7 ; python_version >= "3.10" and python_version < "4.0"
-jedi==0.19.2 ; python_version >= "3.10" and python_version < "4.0"
-jinja2==3.1.6 ; python_version >= "3.10" and python_version < "4.0"
-joblib==1.5.2 ; python_version >= "3.10" and python_version < "4.0"
-jsonschema-specifications==2025.4.1 ; python_version >= "3.10" and python_version < "4.0"
-jsonschema==4.25.1 ; python_version >= "3.10" and python_version < "4.0"
-jupyter-client==8.6.3 ; python_version >= "3.10" and python_version < "4.0" and (sys_platform == "darwin" or sys_platform == "linux")
-jupyter-core==5.8.1 ; python_version >= "3.10" and python_version < "4.0"
-jupyterlab-pygments==0.3.0 ; python_version >= "3.10" and python_version < "4.0" and (sys_platform == "darwin" or sys_platform == "linux")
-jupyterlab-widgets==3.0.15 ; python_version >= "3.10" and python_version < "4.0"
-kiwisolver==1.4.9 ; python_version >= "3.10" and python_version < "4.0"
-lxml-html-clean==0.4.2 ; python_version >= "3.10" and python_version < "4.0"
-lxml==6.0.1 ; python_version >= "3.10" and python_version < "4.0"
-manifold3d==3.2.1 ; python_version >= "3.10" and python_version < "4.0"
-mapbox-earcut==1.0.3 ; python_version >= "3.10" and python_version < "4.0"
-markupsafe==3.0.2 ; python_version >= "3.10" and python_version < "4.0"
-matplotlib-inline==0.1.7 ; python_version >= "3.10" and python_version < "4.0"
-matplotlib==3.10.6 ; python_version >= "3.10" and python_version < "4.0"
-mistune==3.1.4 ; python_version >= "3.10" and python_version < "4.0" and (sys_platform == "darwin" or sys_platform == "linux")
-mpld3==0.5.11 ; python_version >= "3.10" and python_version < "4.0"
-mpmath==1.3.0 ; python_version >= "3.10" and python_version < "4.0"
-mypy-extensions==1.1.0 ; python_version >= "3.10" and python_version < "4.0"
-mysql-connector-python==9.4.0 ; python_version >= "3.10" and python_version < "4.0"
-nbclient==0.10.2 ; python_version >= "3.10" and python_version < "4.0" and (sys_platform == "darwin" or sys_platform == "linux")
-nbconvert==7.14.2 ; python_version >= "3.10" and python_version < "4.0" and (sys_platform == "darwin" or sys_platform == "linux")
-nbformat==5.10.4 ; python_version >= "3.10" and python_version < "4.0"
-networkx==3.4.2 ; python_version >= "3.10" and python_version < "4.0"
-nevergrad==1.0.12 ; python_version >= "3.10" and python_version < "4.0"
-nodeenv==1.9.1 ; python_version >= "3.10" and python_version < "4.0"
-numpy==2.2.6 ; python_version >= "3.10" and python_version < "4.0"
-packaging==25.0 ; python_version >= "3.10" and python_version < "4.0"
-pandas==2.3.2 ; python_version >= "3.10" and python_version < "4.0"
-pandocfilters==1.5.1 ; python_version >= "3.10" and python_version < "4.0" and (sys_platform == "darwin" or sys_platform == "linux")
-parso==0.8.5 ; python_version >= "3.10" and python_version < "4.0"
-pathspec==0.12.1 ; python_version >= "3.10" and python_version < "4.0"
-pexpect==4.9.0 ; python_version >= "3.10" and python_version < "4.0" and (sys_platform == "darwin" or sys_platform == "linux" or sys_platform != "darwin" and sys_platform != "linux" and sys_platform != "win32" and sys_platform != "emscripten")
-pillow==11.3.0 ; python_version >= "3.10" and python_version < "4.0"
-pip-requirements-parser==32.0.1 ; python_version >= "3.10" and python_version < "4.0"
-platformdirs==4.4.0 ; python_version >= "3.10" and python_version < "4.0"
-pre-commit==3.8.0 ; python_version >= "3.10" and python_version < "4.0"
-prompt-toolkit==3.0.52 ; python_version >= "3.10" and python_version < "4.0"
-psutil==7.0.0 ; python_version >= "3.10" and python_version < "4.0"
-ptyprocess==0.7.0 ; python_version >= "3.10" and python_version < "4.0" and (sys_platform == "darwin" or sys_platform == "linux" or sys_platform != "darwin" and sys_platform != "linux" and sys_platform != "win32" and sys_platform != "emscripten")
-pure-eval==0.2.3 ; python_version >= "3.10" and python_version < "4.0"
-pycollada==0.9.2 ; python_version >= "3.10" and python_version < "4.0"
-pydot==4.0.1 ; python_version >= "3.10" and python_version < "4.0"
-pygments==2.19.2 ; python_version >= "3.10" and python_version < "4.0"
-pyparsing==3.2.3 ; python_version >= "3.10" and python_version < "4.0"
-python-dateutil==2.9.0.post0 ; python_version >= "3.10" and python_version < "4.0"
-python-fcl==0.7.0.8 ; python_version >= "3.10" and python_version < "4.0"
-pytz==2025.2 ; python_version >= "3.10" and python_version < "4.0"
-pyvirtualdisplay==3.0 ; python_version >= "3.10" and python_version < "4.0"
-pyyaml==6.0.2 ; python_version >= "3.10" and python_version < "4.0"
-pyzmq==27.0.2 ; python_version >= "3.10" and python_version < "4.0" and (sys_platform == "darwin" or sys_platform == "linux")
-referencing==0.36.2 ; python_version >= "3.10" and python_version < "4.0"
-requests==2.32.5 ; python_version >= "3.10" and python_version < "4.0"
-rpds-py==0.27.1 ; python_version >= "3.10" and python_version < "4.0"
-rtree==1.4.1 ; python_version >= "3.10" and python_version < "4.0"
-scene-synthesizer==1.15.0 ; python_version >= "3.10" and python_version < "4.0"
-scikit-learn==1.7.1 ; python_version >= "3.10" and python_version < "4.0"
-scipy==1.15.3 ; python_version >= "3.10" and python_version < "4.0"
-setuptools-scm==9.2.0 ; python_version >= "3.10" and python_version < "4.0"
-setuptools==70.3.0 ; python_version >= "3.10" and python_version < "4.0"
-shapely==2.1.1 ; python_version >= "3.10" and python_version < "4.0"
-six==1.17.0 ; python_version >= "3.10" and python_version < "4.0"
-sniffio==1.3.1 ; python_version >= "3.10" and python_version < "4.0"
-soupsieve==2.8 ; python_version >= "3.10" and python_version < "4.0"
-stable-baselines3==2.7.0 ; python_version >= "3.10" and python_version < "4.0"
-stack-data==0.6.3 ; python_version >= "3.10" and python_version < "4.0"
-svg-path==7.0 ; python_version >= "3.10" and python_version < "4.0"
-sympy==1.14.0 ; python_version >= "3.10" and python_version < "4.0"
-threadpoolctl==3.6.0 ; python_version >= "3.10" and python_version < "4.0"
-timeout-decorator==0.5.0 ; python_version >= "3.10" and python_version < "4.0"
-tinycss2==1.4.0 ; python_version >= "3.10" and python_version < "4.0" and (sys_platform == "darwin" or sys_platform == "linux")
-tokenize-rt==6.2.0 ; python_version >= "3.10" and python_version < "4.0"
-torch==2.7.1 ; python_version >= "3.10" and python_version < "4.0"
-torchvision==0.22.1 ; python_version >= "3.10" and python_version < "4.0"
-tornado==6.5.2 ; python_version >= "3.10" and python_version < "4.0" and (sys_platform == "darwin" or sys_platform == "linux")
-tqdm==4.67.1 ; python_version >= "3.10" and python_version < "4.0"
-traitlets==5.14.3 ; python_version >= "3.10" and python_version < "4.0"
-triangle==20250106 ; python_version >= "3.10" and python_version < "4.0"
-trimesh==4.7.4 ; python_version >= "3.10" and python_version < "4.0"
-typing-extensions==4.15.0 ; python_version >= "3.10" and python_version < "4.0"
-tzdata==2025.2 ; python_version >= "3.10" and python_version < "4.0"
-urllib3==2.5.0 ; python_version >= "3.10" and python_version < "4.0"
-vhacdx==0.0.8.post2 ; python_version >= "3.10" and python_version < "4.0"
-virtualenv==20.34.0 ; python_version >= "3.10" and python_version < "4.0"
-wcwidth==0.2.13 ; python_version >= "3.10" and python_version < "4.0"
-webencodings==0.5.1 ; python_version >= "3.10" and python_version < "4.0" and (sys_platform == "darwin" or sys_platform == "linux")
-widgetsnbextension==4.0.14 ; python_version >= "3.10" and python_version < "4.0"
-xxhash==3.5.0 ; python_version >= "3.10" and python_version < "4.0"
-yourdfpy==0.0.58 ; python_version >= "3.10" and python_version < "4.0"
diff --git a/requirements-bazel.txt b/requirements-bazel.txt
deleted file mode 100644
index d28f354d..00000000
--- a/requirements-bazel.txt
+++ /dev/null
@@ -1,153 +0,0 @@
---find-links https://download.pytorch.org/whl/torch_stable.html
-anyio==4.10.0 ; python_version >= "3.10" and python_version < "4.0"
-asttokens==3.0.0 ; python_version >= "3.10" and python_version < "4.0"
-attrs==25.3.0 ; python_version >= "3.10" and python_version < "4.0"
-bayesian-optimization==1.4.0 ; python_version >= "3.10" and python_version < "4.0"
-beautifulsoup4==4.13.5 ; python_version >= "3.10" and python_version < "4.0"
-black==25.1.0 ; python_version >= "3.10" and python_version < "4.0"
-bleach==6.2.0 ; python_version >= "3.10" and python_version < "4.0" and (sys_platform == "darwin" or sys_platform == "linux")
-certifi==2025.8.3 ; python_version >= "3.10" and python_version < "4.0"
-cffi==1.17.1 ; python_version >= "3.10" and python_version < "4.0" and implementation_name == "pypy" and (sys_platform == "darwin" or sys_platform == "linux")
-cfgv==3.4.0 ; python_version >= "3.10" and python_version < "4.0"
-charset-normalizer==3.4.3 ; python_version >= "3.10" and python_version < "4.0"
-click==8.2.1 ; python_version >= "3.10" and python_version < "4.0"
-cloudpickle==2.2.1 ; python_version >= "3.10" and python_version < "4.0"
-cma==4.3.0 ; python_version >= "3.10" and python_version < "4.0"
-coacd==1.0.7 ; python_version >= "3.10" and python_version < "4.0"
-colorama==0.4.6 ; python_version >= "3.10" and python_version < "4.0" and (platform_system == "Windows" or sys_platform == "win32")
-colorlog==6.9.0 ; python_version >= "3.10" and python_version < "4.0"
-comm==0.2.3 ; python_version >= "3.10" and python_version < "4.0"
-config-path==1.0.5 ; python_version >= "3.10" and python_version < "4.0"
-contourpy==1.3.2 ; python_version >= "3.10" and python_version < "4.0"
-cycler==0.12.1 ; python_version >= "3.10" and python_version < "4.0"
-cython==3.1.3 ; python_version >= "3.10" and python_version < "4.0"
-decorator==5.2.1 ; python_version >= "3.10" and python_version < "4.0"
-defusedxml==0.7.1 ; python_version >= "3.10" and python_version < "4.0" and (sys_platform == "darwin" or sys_platform == "linux")
-directsearch==1.0 ; python_version >= "3.10" and python_version < "4.0"
-distlib==0.4.0 ; python_version >= "3.10" and python_version < "4.0"
-drake==1.43.0 ; python_version >= "3.10" and python_version < "4.0"
-embreex==2.17.7.post6 ; python_version >= "3.10" and python_version < "4.0" and platform_machine == "x86_64"
-exceptiongroup==1.3.0 ; python_version == "3.10"
-executing==2.2.0 ; python_version >= "3.10" and python_version < "4.0"
-farama-notifications==0.0.4 ; python_version >= "3.10" and python_version < "4.0"
-fastjsonschema==2.21.2 ; python_version >= "3.10" and python_version < "4.0"
-filelock==3.19.1 ; python_version >= "3.10" and python_version < "4.0"
-fonttools==4.59.2 ; python_version >= "3.10" and python_version < "4.0"
-fsspec==2025.7.0 ; python_version >= "3.10" and python_version < "4.0"
-gradescope-utils==0.5.0 ; python_version >= "3.10" and python_version < "4.0"
-gymnasium==1.2.0 ; python_version >= "3.10" and python_version < "4.0"
-h11==0.16.0 ; python_version >= "3.10" and python_version < "4.0"
-httpcore==1.0.9 ; python_version >= "3.10" and python_version < "4.0"
-httpx==0.28.1 ; python_version >= "3.10" and python_version < "4.0"
-identify==2.6.13 ; python_version >= "3.10" and python_version < "4.0"
-idna==3.10 ; python_version >= "3.10" and python_version < "4.0"
-ipython==8.37.0 ; python_version >= "3.10" and python_version < "4.0"
-ipywidgets==8.1.7 ; python_version >= "3.10" and python_version < "4.0"
-jedi==0.19.2 ; python_version >= "3.10" and python_version < "4.0"
-jinja2==3.1.6 ; python_version >= "3.10" and python_version < "4.0"
-joblib==1.5.2 ; python_version >= "3.10" and python_version < "4.0"
-jsonschema-specifications==2025.4.1 ; python_version >= "3.10" and python_version < "4.0"
-jsonschema==4.25.1 ; python_version >= "3.10" and python_version < "4.0"
-jupyter-client==8.6.3 ; python_version >= "3.10" and python_version < "4.0" and (sys_platform == "darwin" or sys_platform == "linux")
-jupyter-core==5.8.1 ; python_version >= "3.10" and python_version < "4.0"
-jupyterlab-pygments==0.3.0 ; python_version >= "3.10" and python_version < "4.0" and (sys_platform == "darwin" or sys_platform == "linux")
-jupyterlab-widgets==3.0.15 ; python_version >= "3.10" and python_version < "4.0"
-kiwisolver==1.4.9 ; python_version >= "3.10" and python_version < "4.0"
-lxml-html-clean==0.4.2 ; python_version >= "3.10" and python_version < "4.0"
-lxml==6.0.1 ; python_version >= "3.10" and python_version < "4.0"
-manifold3d==3.2.1 ; python_version >= "3.10" and python_version < "4.0"
-mapbox-earcut==1.0.3 ; python_version >= "3.10" and python_version < "4.0"
-markupsafe==3.0.2 ; python_version >= "3.10" and python_version < "4.0"
-matplotlib-inline==0.1.7 ; python_version >= "3.10" and python_version < "4.0"
-matplotlib==3.10.6 ; python_version >= "3.10" and python_version < "4.0"
-mistune==3.1.4 ; python_version >= "3.10" and python_version < "4.0" and (sys_platform == "darwin" or sys_platform == "linux")
-mpld3==0.5.11 ; python_version >= "3.10" and python_version < "4.0"
-mpmath==1.3.0 ; python_version >= "3.10" and python_version < "4.0"
-mypy-extensions==1.1.0 ; python_version >= "3.10" and python_version < "4.0"
-mysql-connector-python==9.4.0 ; python_version >= "3.10" and python_version < "4.0"
-nbclient==0.10.2 ; python_version >= "3.10" and python_version < "4.0" and (sys_platform == "darwin" or sys_platform == "linux")
-nbconvert==7.14.2 ; python_version >= "3.10" and python_version < "4.0" and (sys_platform == "darwin" or sys_platform == "linux")
-nbformat==5.10.4 ; python_version >= "3.10" and python_version < "4.0"
-networkx==3.4.2 ; python_version >= "3.10" and python_version < "4.0"
-nevergrad==1.0.12 ; python_version >= "3.10" and python_version < "4.0"
-nodeenv==1.9.1 ; python_version >= "3.10" and python_version < "4.0"
-numpy==2.2.6 ; python_version >= "3.10" and python_version < "4.0"
-nvidia-cublas-cu12==12.6.4.1 ; python_version >= "3.10" and python_version < "4.0" and platform_system == "Linux" and platform_machine == "x86_64"
-nvidia-cuda-cupti-cu12==12.6.80 ; python_version >= "3.10" and python_version < "4.0" and platform_system == "Linux" and platform_machine == "x86_64"
-nvidia-cuda-nvrtc-cu12==12.6.77 ; python_version >= "3.10" and python_version < "4.0" and platform_system == "Linux" and platform_machine == "x86_64"
-nvidia-cuda-runtime-cu12==12.6.77 ; python_version >= "3.10" and python_version < "4.0" and platform_system == "Linux" and platform_machine == "x86_64"
-nvidia-cudnn-cu12==9.5.1.17 ; python_version >= "3.10" and python_version < "4.0" and platform_system == "Linux" and platform_machine == "x86_64"
-nvidia-cufft-cu12==11.3.0.4 ; python_version >= "3.10" and python_version < "4.0" and platform_system == "Linux" and platform_machine == "x86_64"
-nvidia-cufile-cu12==1.11.1.6 ; python_version >= "3.10" and python_version < "4.0" and platform_system == "Linux" and platform_machine == "x86_64"
-nvidia-curand-cu12==10.3.7.77 ; python_version >= "3.10" and python_version < "4.0" and platform_system == "Linux" and platform_machine == "x86_64"
-nvidia-cusolver-cu12==11.7.1.2 ; python_version >= "3.10" and python_version < "4.0" and platform_system == "Linux" and platform_machine == "x86_64"
-nvidia-cusparse-cu12==12.5.4.2 ; python_version >= "3.10" and python_version < "4.0" and platform_system == "Linux" and platform_machine == "x86_64"
-nvidia-cusparselt-cu12==0.6.3 ; python_version >= "3.10" and python_version < "4.0" and platform_system == "Linux" and platform_machine == "x86_64"
-nvidia-nccl-cu12==2.26.2 ; python_version >= "3.10" and python_version < "4.0" and platform_system == "Linux" and platform_machine == "x86_64"
-nvidia-nvjitlink-cu12==12.6.85 ; python_version >= "3.10" and python_version < "4.0" and platform_system == "Linux" and platform_machine == "x86_64"
-nvidia-nvtx-cu12==12.6.77 ; python_version >= "3.10" and python_version < "4.0" and platform_system == "Linux" and platform_machine == "x86_64"
-packaging==25.0 ; python_version >= "3.10" and python_version < "4.0"
-pandas==2.3.2 ; python_version >= "3.10" and python_version < "4.0"
-pandocfilters==1.5.1 ; python_version >= "3.10" and python_version < "4.0" and (sys_platform == "darwin" or sys_platform == "linux")
-parso==0.8.5 ; python_version >= "3.10" and python_version < "4.0"
-pathspec==0.12.1 ; python_version >= "3.10" and python_version < "4.0"
-pexpect==4.9.0 ; python_version >= "3.10" and python_version < "4.0" and (sys_platform == "darwin" or sys_platform == "linux" or sys_platform != "darwin" and sys_platform != "linux" and sys_platform != "win32" and sys_platform != "emscripten")
-pillow==11.3.0 ; python_version >= "3.10" and python_version < "4.0"
-pip-requirements-parser==32.0.1 ; python_version >= "3.10" and python_version < "4.0"
-platformdirs==4.4.0 ; python_version >= "3.10" and python_version < "4.0"
-pre-commit==3.8.0 ; python_version >= "3.10" and python_version < "4.0"
-prompt-toolkit==3.0.52 ; python_version >= "3.10" and python_version < "4.0"
-psutil==7.0.0 ; python_version >= "3.10" and python_version < "4.0"
-ptyprocess==0.7.0 ; python_version >= "3.10" and python_version < "4.0" and (sys_platform == "darwin" or sys_platform == "linux" or sys_platform != "darwin" and sys_platform != "linux" and sys_platform != "win32" and sys_platform != "emscripten")
-pure-eval==0.2.3 ; python_version >= "3.10" and python_version < "4.0"
-pycollada==0.9.2 ; python_version >= "3.10" and python_version < "4.0"
-pycparser==2.22 ; python_version >= "3.10" and python_version < "4.0" and implementation_name == "pypy" and (sys_platform == "darwin" or sys_platform == "linux")
-pydot==4.0.1 ; python_version >= "3.10" and python_version < "4.0"
-pygments==2.19.2 ; python_version >= "3.10" and python_version < "4.0"
-pyparsing==3.2.3 ; python_version >= "3.10" and python_version < "4.0"
-python-dateutil==2.9.0.post0 ; python_version >= "3.10" and python_version < "4.0"
-python-fcl==0.7.0.8 ; python_version >= "3.10" and python_version < "4.0"
-pytz==2025.2 ; python_version >= "3.10" and python_version < "4.0"
-pyvirtualdisplay==3.0 ; python_version >= "3.10" and python_version < "4.0"
-pyyaml==6.0.2 ; python_version >= "3.10" and python_version < "4.0"
-pyzmq==27.0.2 ; python_version >= "3.10" and python_version < "4.0" and (sys_platform == "darwin" or sys_platform == "linux")
-referencing==0.36.2 ; python_version >= "3.10" and python_version < "4.0"
-requests==2.32.5 ; python_version >= "3.10" and python_version < "4.0"
-rpds-py==0.27.1 ; python_version >= "3.10" and python_version < "4.0"
-rtree==1.4.1 ; python_version >= "3.10" and python_version < "4.0"
-scene-synthesizer==1.15.0 ; python_version >= "3.10" and python_version < "4.0"
-scikit-learn==1.7.1 ; python_version >= "3.10" and python_version < "4.0"
-scipy==1.15.3 ; python_version >= "3.10" and python_version < "4.0"
-setuptools-scm==9.2.0 ; python_version >= "3.10" and python_version < "4.0"
-setuptools==70.3.0 ; python_version >= "3.10" and python_version < "4.0"
-shapely==2.1.1 ; python_version >= "3.10" and python_version < "4.0"
-six==1.17.0 ; python_version >= "3.10" and python_version < "4.0"
-sniffio==1.3.1 ; python_version >= "3.10" and python_version < "4.0"
-soupsieve==2.8 ; python_version >= "3.10" and python_version < "4.0"
-stable-baselines3==2.7.0 ; python_version >= "3.10" and python_version < "4.0"
-stack-data==0.6.3 ; python_version >= "3.10" and python_version < "4.0"
-svg-path==7.0 ; python_version >= "3.10" and python_version < "4.0"
-sympy==1.14.0 ; python_version >= "3.10" and python_version < "4.0"
-threadpoolctl==3.6.0 ; python_version >= "3.10" and python_version < "4.0"
-timeout-decorator==0.5.0 ; python_version >= "3.10" and python_version < "4.0"
-tinycss2==1.4.0 ; python_version >= "3.10" and python_version < "4.0" and (sys_platform == "darwin" or sys_platform == "linux")
-tokenize-rt==6.2.0 ; python_version >= "3.10" and python_version < "4.0"
-tomli==2.2.1 ; python_version == "3.10"
-torch==2.7.1 ; python_version >= "3.10" and python_version < "4.0"
-torchvision==0.22.1 ; python_version >= "3.10" and python_version < "4.0"
-tornado==6.5.2 ; python_version >= "3.10" and python_version < "4.0" and (sys_platform == "darwin" or sys_platform == "linux")
-tqdm==4.67.1 ; python_version >= "3.10" and python_version < "4.0"
-traitlets==5.14.3 ; python_version >= "3.10" and python_version < "4.0"
-triangle==20250106 ; python_version >= "3.10" and python_version < "4.0"
-trimesh==4.7.4 ; python_version >= "3.10" and python_version < "4.0"
-triton==3.3.1 ; python_version >= "3.10" and python_version < "4.0" and platform_system == "Linux" and platform_machine == "x86_64"
-typing-extensions==4.15.0 ; python_version >= "3.10" and python_version < "4.0"
-tzdata==2025.2 ; python_version >= "3.10" and python_version < "4.0"
-urllib3==2.5.0 ; python_version >= "3.10" and python_version < "4.0"
-vhacdx==0.0.8.post2 ; python_version >= "3.10" and python_version < "4.0"
-virtualenv==20.34.0 ; python_version >= "3.10" and python_version < "4.0"
-wcwidth==0.2.13 ; python_version >= "3.10" and python_version < "4.0"
-webencodings==0.5.1 ; python_version >= "3.10" and python_version < "4.0" and (sys_platform == "darwin" or sys_platform == "linux")
-widgetsnbextension==4.0.14 ; python_version >= "3.10" and python_version < "4.0"
-xxhash==3.5.0 ; python_version >= "3.10" and python_version < "4.0"
-yourdfpy==0.0.58 ; python_version >= "3.10" and python_version < "4.0"
diff --git a/requirements.txt b/requirements.txt
deleted file mode 100644
index d28f354d..00000000
--- a/requirements.txt
+++ /dev/null
@@ -1,153 +0,0 @@
---find-links https://download.pytorch.org/whl/torch_stable.html
-anyio==4.10.0 ; python_version >= "3.10" and python_version < "4.0"
-asttokens==3.0.0 ; python_version >= "3.10" and python_version < "4.0"
-attrs==25.3.0 ; python_version >= "3.10" and python_version < "4.0"
-bayesian-optimization==1.4.0 ; python_version >= "3.10" and python_version < "4.0"
-beautifulsoup4==4.13.5 ; python_version >= "3.10" and python_version < "4.0"
-black==25.1.0 ; python_version >= "3.10" and python_version < "4.0"
-bleach==6.2.0 ; python_version >= "3.10" and python_version < "4.0" and (sys_platform == "darwin" or sys_platform == "linux")
-certifi==2025.8.3 ; python_version >= "3.10" and python_version < "4.0"
-cffi==1.17.1 ; python_version >= "3.10" and python_version < "4.0" and implementation_name == "pypy" and (sys_platform == "darwin" or sys_platform == "linux")
-cfgv==3.4.0 ; python_version >= "3.10" and python_version < "4.0"
-charset-normalizer==3.4.3 ; python_version >= "3.10" and python_version < "4.0"
-click==8.2.1 ; python_version >= "3.10" and python_version < "4.0"
-cloudpickle==2.2.1 ; python_version >= "3.10" and python_version < "4.0"
-cma==4.3.0 ; python_version >= "3.10" and python_version < "4.0"
-coacd==1.0.7 ; python_version >= "3.10" and python_version < "4.0"
-colorama==0.4.6 ; python_version >= "3.10" and python_version < "4.0" and (platform_system == "Windows" or sys_platform == "win32")
-colorlog==6.9.0 ; python_version >= "3.10" and python_version < "4.0"
-comm==0.2.3 ; python_version >= "3.10" and python_version < "4.0"
-config-path==1.0.5 ; python_version >= "3.10" and python_version < "4.0"
-contourpy==1.3.2 ; python_version >= "3.10" and python_version < "4.0"
-cycler==0.12.1 ; python_version >= "3.10" and python_version < "4.0"
-cython==3.1.3 ; python_version >= "3.10" and python_version < "4.0"
-decorator==5.2.1 ; python_version >= "3.10" and python_version < "4.0"
-defusedxml==0.7.1 ; python_version >= "3.10" and python_version < "4.0" and (sys_platform == "darwin" or sys_platform == "linux")
-directsearch==1.0 ; python_version >= "3.10" and python_version < "4.0"
-distlib==0.4.0 ; python_version >= "3.10" and python_version < "4.0"
-drake==1.43.0 ; python_version >= "3.10" and python_version < "4.0"
-embreex==2.17.7.post6 ; python_version >= "3.10" and python_version < "4.0" and platform_machine == "x86_64"
-exceptiongroup==1.3.0 ; python_version == "3.10"
-executing==2.2.0 ; python_version >= "3.10" and python_version < "4.0"
-farama-notifications==0.0.4 ; python_version >= "3.10" and python_version < "4.0"
-fastjsonschema==2.21.2 ; python_version >= "3.10" and python_version < "4.0"
-filelock==3.19.1 ; python_version >= "3.10" and python_version < "4.0"
-fonttools==4.59.2 ; python_version >= "3.10" and python_version < "4.0"
-fsspec==2025.7.0 ; python_version >= "3.10" and python_version < "4.0"
-gradescope-utils==0.5.0 ; python_version >= "3.10" and python_version < "4.0"
-gymnasium==1.2.0 ; python_version >= "3.10" and python_version < "4.0"
-h11==0.16.0 ; python_version >= "3.10" and python_version < "4.0"
-httpcore==1.0.9 ; python_version >= "3.10" and python_version < "4.0"
-httpx==0.28.1 ; python_version >= "3.10" and python_version < "4.0"
-identify==2.6.13 ; python_version >= "3.10" and python_version < "4.0"
-idna==3.10 ; python_version >= "3.10" and python_version < "4.0"
-ipython==8.37.0 ; python_version >= "3.10" and python_version < "4.0"
-ipywidgets==8.1.7 ; python_version >= "3.10" and python_version < "4.0"
-jedi==0.19.2 ; python_version >= "3.10" and python_version < "4.0"
-jinja2==3.1.6 ; python_version >= "3.10" and python_version < "4.0"
-joblib==1.5.2 ; python_version >= "3.10" and python_version < "4.0"
-jsonschema-specifications==2025.4.1 ; python_version >= "3.10" and python_version < "4.0"
-jsonschema==4.25.1 ; python_version >= "3.10" and python_version < "4.0"
-jupyter-client==8.6.3 ; python_version >= "3.10" and python_version < "4.0" and (sys_platform == "darwin" or sys_platform == "linux")
-jupyter-core==5.8.1 ; python_version >= "3.10" and python_version < "4.0"
-jupyterlab-pygments==0.3.0 ; python_version >= "3.10" and python_version < "4.0" and (sys_platform == "darwin" or sys_platform == "linux")
-jupyterlab-widgets==3.0.15 ; python_version >= "3.10" and python_version < "4.0"
-kiwisolver==1.4.9 ; python_version >= "3.10" and python_version < "4.0"
-lxml-html-clean==0.4.2 ; python_version >= "3.10" and python_version < "4.0"
-lxml==6.0.1 ; python_version >= "3.10" and python_version < "4.0"
-manifold3d==3.2.1 ; python_version >= "3.10" and python_version < "4.0"
-mapbox-earcut==1.0.3 ; python_version >= "3.10" and python_version < "4.0"
-markupsafe==3.0.2 ; python_version >= "3.10" and python_version < "4.0"
-matplotlib-inline==0.1.7 ; python_version >= "3.10" and python_version < "4.0"
-matplotlib==3.10.6 ; python_version >= "3.10" and python_version < "4.0"
-mistune==3.1.4 ; python_version >= "3.10" and python_version < "4.0" and (sys_platform == "darwin" or sys_platform == "linux")
-mpld3==0.5.11 ; python_version >= "3.10" and python_version < "4.0"
-mpmath==1.3.0 ; python_version >= "3.10" and python_version < "4.0"
-mypy-extensions==1.1.0 ; python_version >= "3.10" and python_version < "4.0"
-mysql-connector-python==9.4.0 ; python_version >= "3.10" and python_version < "4.0"
-nbclient==0.10.2 ; python_version >= "3.10" and python_version < "4.0" and (sys_platform == "darwin" or sys_platform == "linux")
-nbconvert==7.14.2 ; python_version >= "3.10" and python_version < "4.0" and (sys_platform == "darwin" or sys_platform == "linux")
-nbformat==5.10.4 ; python_version >= "3.10" and python_version < "4.0"
-networkx==3.4.2 ; python_version >= "3.10" and python_version < "4.0"
-nevergrad==1.0.12 ; python_version >= "3.10" and python_version < "4.0"
-nodeenv==1.9.1 ; python_version >= "3.10" and python_version < "4.0"
-numpy==2.2.6 ; python_version >= "3.10" and python_version < "4.0"
-nvidia-cublas-cu12==12.6.4.1 ; python_version >= "3.10" and python_version < "4.0" and platform_system == "Linux" and platform_machine == "x86_64"
-nvidia-cuda-cupti-cu12==12.6.80 ; python_version >= "3.10" and python_version < "4.0" and platform_system == "Linux" and platform_machine == "x86_64"
-nvidia-cuda-nvrtc-cu12==12.6.77 ; python_version >= "3.10" and python_version < "4.0" and platform_system == "Linux" and platform_machine == "x86_64"
-nvidia-cuda-runtime-cu12==12.6.77 ; python_version >= "3.10" and python_version < "4.0" and platform_system == "Linux" and platform_machine == "x86_64"
-nvidia-cudnn-cu12==9.5.1.17 ; python_version >= "3.10" and python_version < "4.0" and platform_system == "Linux" and platform_machine == "x86_64"
-nvidia-cufft-cu12==11.3.0.4 ; python_version >= "3.10" and python_version < "4.0" and platform_system == "Linux" and platform_machine == "x86_64"
-nvidia-cufile-cu12==1.11.1.6 ; python_version >= "3.10" and python_version < "4.0" and platform_system == "Linux" and platform_machine == "x86_64"
-nvidia-curand-cu12==10.3.7.77 ; python_version >= "3.10" and python_version < "4.0" and platform_system == "Linux" and platform_machine == "x86_64"
-nvidia-cusolver-cu12==11.7.1.2 ; python_version >= "3.10" and python_version < "4.0" and platform_system == "Linux" and platform_machine == "x86_64"
-nvidia-cusparse-cu12==12.5.4.2 ; python_version >= "3.10" and python_version < "4.0" and platform_system == "Linux" and platform_machine == "x86_64"
-nvidia-cusparselt-cu12==0.6.3 ; python_version >= "3.10" and python_version < "4.0" and platform_system == "Linux" and platform_machine == "x86_64"
-nvidia-nccl-cu12==2.26.2 ; python_version >= "3.10" and python_version < "4.0" and platform_system == "Linux" and platform_machine == "x86_64"
-nvidia-nvjitlink-cu12==12.6.85 ; python_version >= "3.10" and python_version < "4.0" and platform_system == "Linux" and platform_machine == "x86_64"
-nvidia-nvtx-cu12==12.6.77 ; python_version >= "3.10" and python_version < "4.0" and platform_system == "Linux" and platform_machine == "x86_64"
-packaging==25.0 ; python_version >= "3.10" and python_version < "4.0"
-pandas==2.3.2 ; python_version >= "3.10" and python_version < "4.0"
-pandocfilters==1.5.1 ; python_version >= "3.10" and python_version < "4.0" and (sys_platform == "darwin" or sys_platform == "linux")
-parso==0.8.5 ; python_version >= "3.10" and python_version < "4.0"
-pathspec==0.12.1 ; python_version >= "3.10" and python_version < "4.0"
-pexpect==4.9.0 ; python_version >= "3.10" and python_version < "4.0" and (sys_platform == "darwin" or sys_platform == "linux" or sys_platform != "darwin" and sys_platform != "linux" and sys_platform != "win32" and sys_platform != "emscripten")
-pillow==11.3.0 ; python_version >= "3.10" and python_version < "4.0"
-pip-requirements-parser==32.0.1 ; python_version >= "3.10" and python_version < "4.0"
-platformdirs==4.4.0 ; python_version >= "3.10" and python_version < "4.0"
-pre-commit==3.8.0 ; python_version >= "3.10" and python_version < "4.0"
-prompt-toolkit==3.0.52 ; python_version >= "3.10" and python_version < "4.0"
-psutil==7.0.0 ; python_version >= "3.10" and python_version < "4.0"
-ptyprocess==0.7.0 ; python_version >= "3.10" and python_version < "4.0" and (sys_platform == "darwin" or sys_platform == "linux" or sys_platform != "darwin" and sys_platform != "linux" and sys_platform != "win32" and sys_platform != "emscripten")
-pure-eval==0.2.3 ; python_version >= "3.10" and python_version < "4.0"
-pycollada==0.9.2 ; python_version >= "3.10" and python_version < "4.0"
-pycparser==2.22 ; python_version >= "3.10" and python_version < "4.0" and implementation_name == "pypy" and (sys_platform == "darwin" or sys_platform == "linux")
-pydot==4.0.1 ; python_version >= "3.10" and python_version < "4.0"
-pygments==2.19.2 ; python_version >= "3.10" and python_version < "4.0"
-pyparsing==3.2.3 ; python_version >= "3.10" and python_version < "4.0"
-python-dateutil==2.9.0.post0 ; python_version >= "3.10" and python_version < "4.0"
-python-fcl==0.7.0.8 ; python_version >= "3.10" and python_version < "4.0"
-pytz==2025.2 ; python_version >= "3.10" and python_version < "4.0"
-pyvirtualdisplay==3.0 ; python_version >= "3.10" and python_version < "4.0"
-pyyaml==6.0.2 ; python_version >= "3.10" and python_version < "4.0"
-pyzmq==27.0.2 ; python_version >= "3.10" and python_version < "4.0" and (sys_platform == "darwin" or sys_platform == "linux")
-referencing==0.36.2 ; python_version >= "3.10" and python_version < "4.0"
-requests==2.32.5 ; python_version >= "3.10" and python_version < "4.0"
-rpds-py==0.27.1 ; python_version >= "3.10" and python_version < "4.0"
-rtree==1.4.1 ; python_version >= "3.10" and python_version < "4.0"
-scene-synthesizer==1.15.0 ; python_version >= "3.10" and python_version < "4.0"
-scikit-learn==1.7.1 ; python_version >= "3.10" and python_version < "4.0"
-scipy==1.15.3 ; python_version >= "3.10" and python_version < "4.0"
-setuptools-scm==9.2.0 ; python_version >= "3.10" and python_version < "4.0"
-setuptools==70.3.0 ; python_version >= "3.10" and python_version < "4.0"
-shapely==2.1.1 ; python_version >= "3.10" and python_version < "4.0"
-six==1.17.0 ; python_version >= "3.10" and python_version < "4.0"
-sniffio==1.3.1 ; python_version >= "3.10" and python_version < "4.0"
-soupsieve==2.8 ; python_version >= "3.10" and python_version < "4.0"
-stable-baselines3==2.7.0 ; python_version >= "3.10" and python_version < "4.0"
-stack-data==0.6.3 ; python_version >= "3.10" and python_version < "4.0"
-svg-path==7.0 ; python_version >= "3.10" and python_version < "4.0"
-sympy==1.14.0 ; python_version >= "3.10" and python_version < "4.0"
-threadpoolctl==3.6.0 ; python_version >= "3.10" and python_version < "4.0"
-timeout-decorator==0.5.0 ; python_version >= "3.10" and python_version < "4.0"
-tinycss2==1.4.0 ; python_version >= "3.10" and python_version < "4.0" and (sys_platform == "darwin" or sys_platform == "linux")
-tokenize-rt==6.2.0 ; python_version >= "3.10" and python_version < "4.0"
-tomli==2.2.1 ; python_version == "3.10"
-torch==2.7.1 ; python_version >= "3.10" and python_version < "4.0"
-torchvision==0.22.1 ; python_version >= "3.10" and python_version < "4.0"
-tornado==6.5.2 ; python_version >= "3.10" and python_version < "4.0" and (sys_platform == "darwin" or sys_platform == "linux")
-tqdm==4.67.1 ; python_version >= "3.10" and python_version < "4.0"
-traitlets==5.14.3 ; python_version >= "3.10" and python_version < "4.0"
-triangle==20250106 ; python_version >= "3.10" and python_version < "4.0"
-trimesh==4.7.4 ; python_version >= "3.10" and python_version < "4.0"
-triton==3.3.1 ; python_version >= "3.10" and python_version < "4.0" and platform_system == "Linux" and platform_machine == "x86_64"
-typing-extensions==4.15.0 ; python_version >= "3.10" and python_version < "4.0"
-tzdata==2025.2 ; python_version >= "3.10" and python_version < "4.0"
-urllib3==2.5.0 ; python_version >= "3.10" and python_version < "4.0"
-vhacdx==0.0.8.post2 ; python_version >= "3.10" and python_version < "4.0"
-virtualenv==20.34.0 ; python_version >= "3.10" and python_version < "4.0"
-wcwidth==0.2.13 ; python_version >= "3.10" and python_version < "4.0"
-webencodings==0.5.1 ; python_version >= "3.10" and python_version < "4.0" and (sys_platform == "darwin" or sys_platform == "linux")
-widgetsnbextension==4.0.14 ; python_version >= "3.10" and python_version < "4.0"
-xxhash==3.5.0 ; python_version >= "3.10" and python_version < "4.0"
-yourdfpy==0.0.58 ; python_version >= "3.10" and python_version < "4.0"
diff --git a/setup/mac/Brewfile b/setup/mac/Brewfile
index 99bc786d..bbb85180 100644
--- a/setup/mac/Brewfile
+++ b/setup/mac/Brewfile
@@ -1,7 +1,6 @@
# -*- mode: ruby -*-
# vi: set ft=ruby :
-brew 'bazelisk'
brew "python@3.13"
brew "tidy-html5"
-brew "gprof2dot" # Supplies dot for pydot
\ No newline at end of file
+brew "gprof2dot" # Supplies dot for pydot
diff --git a/setup/ubuntu/18.04/install_prereqs.sh b/setup/ubuntu/18.04/install_prereqs.sh
index c42a038d..4648c5f2 100755
--- a/setup/ubuntu/18.04/install_prereqs.sh
+++ b/setup/ubuntu/18.04/install_prereqs.sh
@@ -53,17 +53,10 @@ fi
apt-get install -o APT::Acquire::Retries=4 -o Dpkg::Use-Pty=0 -qy \
--no-install-recommends ca-certificates gnupg
-APT_KEY_DONT_WARN_ON_DANGEROUS_USAGE=1 apt-key adv \
- -q --fetch-keys https://bazel.build/bazel-release.pub.gpg
-
-echo 'deb [arch=amd64] https://storage.googleapis.com/bazel-apt stable jdk1.8' \
- > /etc/apt/sources.list.d/bazel.list
-
apt-get update -qq || (sleep 15; apt-get update -qq)
apt-get install -o APT::Acquire::Retries=4 -o Dpkg::Use-Pty=0 -qy \
--no-install-recommends $(cat <