diff --git a/.bazelignore b/.bazelignore deleted file mode 100644 index a415184a..00000000 --- a/.bazelignore +++ /dev/null @@ -1,2 +0,0 @@ -venv -.venv diff --git a/.bazelrc b/.bazelrc deleted file mode 100644 index 8f1a2faf..00000000 --- a/.bazelrc +++ /dev/null @@ -1,77 +0,0 @@ -# Enable bzlmod by default (Bazel's new module system) -# This replaces the WORKSPACE-based dependency management -build --enable_bzlmod -common --enable_bzlmod - -# Automatic platform-specific Python version selection following Drake recommendations -# These configs are automatically applied based on the detected platform - -# macOS: Python 3.13 -build:macos --@rules_python//python/config_settings:python_version=3.13 -build:macos --action_env=PATH=/opt/homebrew/opt/python@3.13/bin:/opt/homebrew/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/sbin - -# Linux: Default to Python 3.12 (Noble), but can be overridden by OS version detection -build:linux --@rules_python//python/config_settings:python_version=3.12 -build:linux --action_env=PATH=/usr/bin:/bin:/usr/sbin:/sbin - -# Manual override configs (for testing or specific use cases) -build:force-python-313 --@rules_python//python/config_settings:python_version=3.13 -build:force-python-312 --@rules_python//python/config_settings:python_version=3.12 -build:force-python-310 --@rules_python//python/config_settings:python_version=3.10 - -# Python version is automatically selected based on what's available on the system -# Following Drake's platform defaults: Jammy=3.10, Noble=3.12, macOS=3.13 - -# Location of the Gurobi license key file, typically named "gurobi.lic". -build --action_env=GRB_LICENSE_FILE - -# Location of the MOSEK license file, typically named "mosek.lic" -build --action_env=MOSEKLM_LICENSE_FILE - -build --coverage_report_generator=//book/htmlbook/tools/coverage:coverage_report_generator -build --coverage_support=//book/htmlbook/tools/coverage:coverage_support -build --enable_platform_specific_config=yes - -build --incompatible_disable_target_provider_fields=yes -build --incompatible_load_python_rules_from_bzl=yes -#build --incompatible_no_rule_outputs_param=yes -build --incompatible_run_shell_command_string=yes -build --incompatible_strict_action_env=yes -build --incompatible_visibility_private_attributes_at_definition=yes - -build --legacy_external_runfiles=no -build --strict_filesets=yes - -build --test_env=DISPLAY -build --test_env=GRB_LICENSE_FILE -build --test_env=LANG=en_US.UTF-8 -build --test_env=LC_ALL=en_US.UTF-8 -build --test_env=MOSEKLM_LICENSE_FILE -build --test_env=MPLBACKEND=Template -build --test_env=MPLCONFIGDIR=/tmp - -# TODO(jamiesnape): Fix "Invalid -W option ignored: invalid module name: -# 'pydrake.common.deprecation' warning and ensure that Drake deprecation -# warnings are promoted to errors. -# build --test_env=PYTHONWARNINGS=error::pydrake.common.deprecation.DrakeDeprecationWarning - -build --test_output=errors -build --test_summary=terse - -build:linux --action_env=PATH=/usr/sbin:/usr/bin:/sbin:/bin - -build:macos --action_env=PATH=/opt/homebrew/opt/python@3.13/bin:/opt/homebrew/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/sbin -build:macos --test_timeout=120,600,1800,7200 - -# Disable python imports from ~/.local (pip -U) during build and test. -# https://github.com/bazelbuild/bazel/issues/4939 -# https://github.com/RobotLocomotion/drake/issues/8475 -build --action_env=PYTHONNOUSERSITE=1 -build --test_env=PYTHONNOUSERSITE=1 - -# Set matplotlib config directory to avoid conflicts (Drake issue #14250) -build --action_env=MPLCONFIGDIR=/tmp -build --action_env=MPLBACKEND=Template - -try-import %workspace%/user.bazelrc -try-import %workspace%/.bazelrc.local diff --git a/.bazelversion b/.bazelversion deleted file mode 100644 index 6b0e58e7..00000000 --- a/.bazelversion +++ /dev/null @@ -1 +0,0 @@ -7.4.1 \ No newline at end of file diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index dd21338f..3e238b85 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -37,21 +37,20 @@ on: - synchronize pull_request_target: types: - - opened - - reopened - - synchronize - labeled push: branches: - master schedule: - cron: '0 8 * * *' + +concurrency: + group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} + cancel-in-progress: true jobs: - # First job: Check if we should run tests with solutions check-approval: name: Check PR approval status runs-on: ubuntu-latest - if: github.event_name == 'pull_request_target' || github.event_name == 'push' || github.event_name == 'schedule' outputs: should-run: ${{ steps.check.outputs.should-run }} is-trusted: ${{ steps.check.outputs.is-trusted }} @@ -59,7 +58,6 @@ jobs: - name: Check approval status id: check run: | - # For push events (commits to master) and scheduled runs, always run if [[ "${{ github.event_name }}" != "pull_request_target" ]]; then echo "is-trusted=true" >> $GITHUB_OUTPUT echo "should-run=true" >> $GITHUB_OUTPUT @@ -67,7 +65,6 @@ jobs: exit 0 fi - # Check if this is a trusted contributor if [[ "${{ github.event.pull_request.author_association }}" == "COLLABORATOR" ]] || \ [[ "${{ github.event.pull_request.author_association }}" == "MEMBER" ]] || \ [[ "${{ github.event.pull_request.author_association }}" == "OWNER" ]]; then @@ -84,8 +81,9 @@ jobs: echo "⏳ First-time contributor - waiting for maintainer approval" echo "To approve this PR for CI, add the 'approved-for-ci' label" fi - noble: - name: ubuntu 24.04 noble + + noble-poetry: + name: ubuntu noble using poetry runs-on: ubuntu-24.04 container: ubuntu:24.04 needs: [check-approval] @@ -94,6 +92,7 @@ jobs: github.event.pull_request.head.repo.full_name == github.repository) || (github.event_name == 'pull_request_target' && + github.event.pull_request.head.repo.full_name != github.repository && needs.check-approval.outputs.should-run == 'true') || (github.event_name != 'pull_request' && @@ -103,101 +102,221 @@ jobs: run: | export APT_KEY_DONT_WARN_ON_DANGEROUS_USAGE=1 DEBIAN_FRONTEND=noninteractive apt-get update -o APT::Acquire::Retries=4 -qq - apt-get install -o APT::Acquire::Retries=4 -o Dpkg::Use-Pty=0 -qy --no-install-recommends ca-certificates gnupg + apt-get install -o APT::Acquire::Retries=4 -o Dpkg::Use-Pty=0 -qy --no-install-recommends ca-certificates gnupg sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys E1DD270288B4E6030699E45FA1715D88E1DF1F24 echo 'deb http://ppa.launchpad.net/git-core/ppa/ubuntu noble main' > /etc/apt/sources.list.d/git.list apt-get update -o APT::Acquire::Retries=4 -qq apt-get install -o APT::Acquire::Retries=4 -o Dpkg::Use-Pty=0 -qy --no-install-recommends git + # Create non-root user for running repository setup / tests + useradd -m -s /bin/bash runner + echo 'runner ALL=(ALL) NOPASSWD:ALL' >> /etc/sudoers rm -rf /var/cache/apt/archives/*.deb /var/cache/apt/archives/partial/*.deb /var/cache/apt/*.bin /var/lib/apt/lists/* /var/log/apt/* shell: bash - - # For pull_request_target: carefully checkout PR code excluding .github/ + - name: checkout PR code if: github.event_name == 'pull_request_target' - uses: actions/checkout@v4 + uses: actions/checkout@v6 with: ref: ${{ github.event.pull_request.head.sha }} sparse-checkout: | * !.github sparse-checkout-cone-mode: false - - # For regular events: normal checkout + - name: checkout if: github.event_name != 'pull_request_target' - uses: actions/checkout@v4 - + uses: actions/checkout@v6 + with: + submodules: recursive + - name: checkout solutions + env: + SOLUTIONS_TOKEN: ${{ secrets.SOLUTIONS_TOKEN }} run: | - git clone https://x-access-token:${{ secrets.SOLUTIONS_TOKEN }}@github.com/RobotLocomotion/manipulation-solutions.git solutions + if [[ -z "${SOLUTIONS_TOKEN}" ]]; then + echo "SOLUTIONS_TOKEN not available; skipping solutions checkout" + exit 0 + fi + git clone https://x-access-token:${SOLUTIONS_TOKEN}@github.com/RobotLocomotion/manipulation-solutions.git solutions cd solutions && git checkout $(cat ../solutions_sha.txt) && cd .. shell: bash - - name: setup and build + + - name: install dependencies run: | - ./setup/submodule_checkout + # Fix ownership of the workspace + chown -R runner:runner . + # Switch to runner user for remaining commands + sudo -H -u runner ./setup/submodule_checkout + # Install system packages as root ./setup/ubuntu/24.04/install_prereqs.sh apt-get install -o APT::Acquire::Retries=4 -o Dpkg::Use-Pty=0 -qy --no-install-recommends xvfb + sudo -H -u runner python3 -m pip install --user --break-system-packages poetry==2.1.4 + sudo -H -u runner python3 -m poetry config virtualenvs.in-project true + sudo -H -u runner python3 -m poetry install --all-extras --with dev rm -rf /var/cache/apt/archives/*.deb /var/cache/apt/archives/partial/*.deb /var/cache/apt/*.bin /var/lib/apt/lists/* /var/log/apt/* - # Run bazel operations as root (Python 3.12 via .bazelrc linux config) - bazel fetch //... - bazel run //manipulation:prefetch_remotes shell: bash - # - name: Check disk space - # run: | - # dpkg-query -Wf '${Installed-Size}\t${Package}\n' | sort -nr | head - # df . -h - # du /usr/ -hx -d 4 --threshold=1G | sort -hr | head - # shell: bash + - name: test - run: ./book/htmlbook/workflows/ci/noble/test + run: | + set -euo pipefail + VENV_PYTHON="$(pwd)/.venv/bin/python" + sudo -H -u runner xvfb-run \ + --auto-servernum \ + --server-args='-screen 0 1280x1024x24 -ac +extension GLX +extension RANDR +render -noreset' \ + "$VENV_PYTHON" -m pytest -ra shell: bash - sonoma: - name: macos sonoma 14 - runs-on: macos-14 + # TODO(russt): add noble-pip-core workflow which only runs the tests in manipulation, + # but uses the manipulation module from pip. + noble-pip-all: + name: ubuntu noble using pip all + runs-on: ubuntu-24.04 + container: ubuntu:24.04 + needs: [check-approval] + if: > + ((github.event_name == 'pull_request' && + github.event.pull_request.head.repo.full_name == github.repository) + || + (github.event_name == 'pull_request_target' && + github.event.pull_request.head.repo.full_name != github.repository && + needs.check-approval.outputs.should-run == 'true') + || + (github.event_name != 'pull_request' && + github.event_name != 'pull_request_target')) + && + !contains(github.event.pull_request.labels.*.name, 'requires new pip wheels') + steps: + - name: pre-checkout setup + run: | + export APT_KEY_DONT_WARN_ON_DANGEROUS_USAGE=1 DEBIAN_FRONTEND=noninteractive + apt-get update -o APT::Acquire::Retries=4 -qq + apt-get install -o APT::Acquire::Retries=4 -o Dpkg::Use-Pty=0 -qy --no-install-recommends ca-certificates gnupg sudo + apt-key adv --keyserver keyserver.ubuntu.com --recv-keys E1DD270288B4E6030699E45FA1715D88E1DF1F24 + echo 'deb http://ppa.launchpad.net/git-core/ppa/ubuntu noble main' > /etc/apt/sources.list.d/git.list + apt-get update -o APT::Acquire::Retries=4 -qq + apt-get install -o APT::Acquire::Retries=4 -o Dpkg::Use-Pty=0 -qy --no-install-recommends git + # Create non-root user for running repository setup / tests + useradd -m -s /bin/bash runner + echo 'runner ALL=(ALL) NOPASSWD:ALL' >> /etc/sudoers + rm -rf /var/cache/apt/archives/*.deb /var/cache/apt/archives/partial/*.deb /var/cache/apt/*.bin /var/lib/apt/lists/* /var/log/apt/* + shell: bash + + - name: checkout PR code + if: github.event_name == 'pull_request_target' + uses: actions/checkout@v6 + with: + ref: ${{ github.event.pull_request.head.sha }} + sparse-checkout: | + * + !.github + sparse-checkout-cone-mode: false + + - name: checkout + if: github.event_name != 'pull_request_target' + uses: actions/checkout@v6 + with: + submodules: recursive + + - name: checkout solutions + env: + SOLUTIONS_TOKEN: ${{ secrets.SOLUTIONS_TOKEN }} + run: | + if [[ -z "${SOLUTIONS_TOKEN}" ]]; then + echo "SOLUTIONS_TOKEN not available; skipping solutions checkout" + exit 0 + fi + git clone https://x-access-token:${SOLUTIONS_TOKEN}@github.com/RobotLocomotion/manipulation-solutions.git solutions + cd solutions && git checkout $(cat ../solutions_sha.txt) && cd .. + shell: bash + + - name: install dependencies + run: | + # Fix ownership of the workspace + chown -R runner:runner . + # Switch to runner user for remaining commands + sudo -H -u runner ./setup/submodule_checkout + # Install system packages as root + ./setup/ubuntu/24.04/install_prereqs.sh + apt-get install -o APT::Acquire::Retries=4 -o Dpkg::Use-Pty=0 -qy --no-install-recommends xvfb + rm -rf ./manipulation # remove local module, force pip module. + sudo -H -u runner python3 -m pip install --user --break-system-packages --upgrade manipulation[all] pytest pytest-timeout + rm -rf /var/cache/apt/archives/*.deb /var/cache/apt/archives/partial/*.deb /var/cache/apt/*.bin /var/lib/apt/lists/* /var/log/apt/* + shell: bash + + - name: test + run: | + set -euo pipefail + find book/htmlbook -type f -name 'test_*.py' -delete # remove htmlbook tests (extra Python requirements) + sudo -H -u runner MANIPULATION_DATA_DIR="$(pwd)/book/data" xvfb-run \ + --auto-servernum \ + --server-args='-screen 0 1280x1024x24 -ac +extension GLX +extension RANDR +render -noreset' \ + python3 -m pytest -ra + shell: bash + + sequoia: + name: macos sequoia 15 + runs-on: macos-15 needs: [check-approval] if: > (github.event_name == 'pull_request' && github.event.pull_request.head.repo.full_name == github.repository) || (github.event_name == 'pull_request_target' && + github.event.pull_request.head.repo.full_name != github.repository && needs.check-approval.outputs.should-run == 'true') || (github.event_name != 'pull_request' && github.event_name != 'pull_request_target') steps: - # For pull_request_target: carefully checkout PR code excluding .github/ - name: checkout PR code if: github.event_name == 'pull_request_target' - uses: actions/checkout@v4 + uses: actions/checkout@v6 with: ref: ${{ github.event.pull_request.head.sha }} sparse-checkout: | * !.github sparse-checkout-cone-mode: false - - # For regular events: normal checkout + - name: checkout if: github.event_name != 'pull_request_target' - uses: actions/checkout@v4 - + uses: actions/checkout@v6 + with: + submodules: recursive + + - name: setup python + uses: actions/setup-python@v5 + with: + python-version: '3.13' + - name: checkout solutions + env: + SOLUTIONS_TOKEN: ${{ secrets.SOLUTIONS_TOKEN }} run: | - git clone https://x-access-token:${{ secrets.SOLUTIONS_TOKEN }}@github.com/RobotLocomotion/manipulation-solutions.git solutions + if [[ -z "${SOLUTIONS_TOKEN}" ]]; then + echo "SOLUTIONS_TOKEN not available; skipping solutions checkout" + exit 0 + fi + git clone https://x-access-token:${SOLUTIONS_TOKEN}@github.com/RobotLocomotion/manipulation-solutions.git solutions cd solutions && git checkout $(cat ../solutions_sha.txt) && cd .. shell: zsh -efuo pipefail {0} - - name: submodule checkout - run: ./setup/submodule_checkout - shell: zsh -efuo pipefail {0} + - name: setup run: | - ./book/htmlbook/workflows/ci/sonoma/setup - bazel run //manipulation:prefetch_remotes + ./setup/submodule_checkout + ./setup/mac/install_prereqs.sh + python -m pip install --user poetry==2.1.4 + python -m poetry config virtualenvs.in-project true + python -m poetry env use "$(python -c 'import sys; print(sys.executable)')" + python -m poetry install --all-extras --with dev shell: zsh -efuo pipefail {0} + - name: test - run: ./book/htmlbook/workflows/ci/sonoma/test + run: | + set -euo pipefail + .venv/bin/python -m pytest -ra shell: zsh -efuo pipefail {0} + lint: runs-on: ubuntu-latest needs: [check-approval] @@ -206,240 +325,64 @@ jobs: github.event.pull_request.head.repo.full_name == github.repository) || (github.event_name == 'pull_request_target' && + github.event.pull_request.head.repo.full_name != github.repository && needs.check-approval.outputs.should-run == 'true') || (github.event_name != 'pull_request' && github.event_name != 'pull_request_target') steps: - # For pull_request_target: carefully checkout PR code excluding .github/ - name: checkout PR code if: github.event_name == 'pull_request_target' - uses: actions/checkout@v4 + uses: actions/checkout@v6 with: ref: ${{ github.event.pull_request.head.sha }} sparse-checkout: | * !.github sparse-checkout-cone-mode: false - - # For regular events: normal checkout + - name: checkout repo if: github.event_name != 'pull_request_target' - uses: actions/checkout@v4 + uses: actions/checkout@v6 + with: + submodules: recursive + - name: setup python uses: actions/setup-python@v5 with: - python-version: '3.10' + python-version: '3.10' + - name: black uses: psf/black@stable with: version: 24.10.0 jupyter: true + - name: isort uses: isort/isort-action@master with: - configuration: "--profile black --check-only" - isort-version: 5.12.0 + configuration: "--profile black --check-only" + isort-version: 5.12.0 + - name: autoflake uses: creyD/autoflake_action@master with: - options: --remove-all-unused-imports --in-place - # Pegging version s.t. https://github.com/creyD/autoflake_action/issues/1 + options: --remove-all-unused-imports --in-place + # Pegging version s.t. https://github.com/creyD/autoflake_action/issues/1 + - name: Install and configure Poetry uses: snok/install-poetry@v1 with: version: 2.1.4 virtualenvs-create: true virtualenvs-in-project: true + - name: build the docs run: | poetry install --only docs source .venv/bin/activate sphinx-build -M html manipulation book/python shell: bash + - name: Test full poetry install run: poetry install - # The following jobs rely on the pip wheels being up to date. They can be disabled for a PR by adding the "requires new pip wheels" label. - docker: - name: dockerfile - runs-on: ubuntu-latest - needs: [check-approval] - if: > - ((github.event_name == 'pull_request' && - github.event.pull_request.head.repo.full_name == github.repository) - || - (github.event_name == 'pull_request_target' && - needs.check-approval.outputs.should-run == 'true') - || - (github.event_name != 'pull_request' && - github.event_name != 'pull_request_target')) - && - !contains(github.event.pull_request.labels.*.name, 'requires new pip wheels') - container: russtedrake/manipulation:latest - steps: - # For pull_request_target: carefully checkout PR code excluding .github/ - - name: checkout PR code - if: github.event_name == 'pull_request_target' - uses: actions/checkout@v4 - with: - ref: ${{ github.event.pull_request.head.sha }} - sparse-checkout: | - * - !.github - sparse-checkout-cone-mode: false - - # For regular events: normal checkout - - name: checkout - if: github.event_name != 'pull_request_target' - uses: actions/checkout@v4 - - - name: checkout solutions - run: | - git clone https://x-access-token:${{ secrets.SOLUTIONS_TOKEN }}@github.com/RobotLocomotion/manipulation-solutions.git solutions - cd solutions && git checkout $(cat ../solutions_sha.txt) && cd .. - shell: bash - - name: setup - run: | - apt-get update -o APT::Acquire::Retries=4 -qq - apt-get install -o APT::Acquire::Retries=4 -o Dpkg::Use-Pty=0 -qy --no-install-recommends python3-pip git xvfb - ./setup/submodule_checkout - - # Note: we **don't** reinstall drake's dependencies here. If we need - # to do that, we should update our docker image. - - # Install manipulation via pip (to mimic student experience) - # Use --break-system-packages to handle externally managed environment - # Only install manipulation[all] to avoid conflicts with system packages - pip install --upgrade manipulation[all] --extra-index-url https://drake-packages.csail.mit.edu/whl/nightly/ --break-system-packages - shell: bash - - name: test - run: | - ./book/htmlbook/workflows/ci/noble/test_wheels - shell: bash - - noble-pip-core: - # This should emulate a student's experience if they are doing exercises - # via pip install manipulation. - name: pip notebooks on noble - runs-on: ubuntu-24.04 - needs: [check-approval] - if: > - ((github.event_name == 'pull_request' && - github.event.pull_request.head.repo.full_name == github.repository) - || - (github.event_name == 'pull_request_target' && - needs.check-approval.outputs.should-run == 'true') - || - (github.event_name != 'pull_request' && - github.event_name != 'pull_request_target')) - && - !contains(github.event.pull_request.labels.*.name, 'requires new pip wheels') - container: ubuntu:24.04 - steps: - - name: pre-checkout setup - run: | - apt-get update -o APT::Acquire::Retries=4 -qq - apt-get install -o APT::Acquire::Retries=4 -o Dpkg::Use-Pty=0 -qy --no-install-recommends python3-pip git xvfb - shell: bash - - # For pull_request_target: carefully checkout PR code excluding .github/ - - name: checkout PR code - if: github.event_name == 'pull_request_target' - uses: actions/checkout@v4 - with: - ref: ${{ github.event.pull_request.head.sha }} - sparse-checkout: | - * - !.github - sparse-checkout-cone-mode: false - - # For regular events: normal checkout - - name: checkout - if: github.event_name != 'pull_request_target' - uses: actions/checkout@v4 - - - name: checkout solutions - run: | - git clone https://x-access-token:${{ secrets.SOLUTIONS_TOKEN }}@github.com/RobotLocomotion/manipulation-solutions.git solutions - cd solutions && git checkout $(cat ../solutions_sha.txt) && cd .. - shell: bash - - name: setup - run: | - ./setup/submodule_checkout - # Install system dependencies for Drake - ./setup/ubuntu/24.04/install_prereqs.sh - - # Install manipulation via pip (to mimic student experience) - # Handle system package conflicts by using --ignore-installed for problematic packages - pip install manipulation jupyter nbconvert ipykernel --extra-index-url https://drake-packages.csail.mit.edu/whl/nightly/ --break-system-packages --ignore-installed traitlets - - shell: bash - - name: test - run: | - # The manipulation library needs be robust against partial - # installations, but the examples will assume a full installation. So - # we test only the manipulation library here. - ./book/htmlbook/workflows/ci/noble/test_wheels --core-library-only - shell: bash - - noble-pip-extra: - # This should emulate a student's experience if they are doing exercises - # via pip install manipulation[all]. - name: pip extra on noble - runs-on: ubuntu-24.04 - needs: [check-approval] - if: > - ((github.event_name == 'pull_request' && - github.event.pull_request.head.repo.full_name == github.repository) - || - (github.event_name == 'pull_request_target' && - needs.check-approval.outputs.should-run == 'true') - || - (github.event_name != 'pull_request' && - github.event_name != 'pull_request_target')) - && - !contains(github.event.pull_request.labels.*.name, 'requires new pip wheels') - container: ubuntu:24.04 - steps: - - name: pre-checkout setup - run: | - apt-get update -o APT::Acquire::Retries=4 -qq - apt-get install -o APT::Acquire::Retries=4 -o Dpkg::Use-Pty=0 -qy --no-install-recommends python3-pip git xvfb - shell: bash - - # For pull_request_target: carefully checkout PR code excluding .github/ - - name: checkout PR code - if: github.event_name == 'pull_request_target' - uses: actions/checkout@v4 - with: - ref: ${{ github.event.pull_request.head.sha }} - sparse-checkout: | - * - !.github - sparse-checkout-cone-mode: false - - # For regular events: normal checkout - - name: checkout - if: github.event_name != 'pull_request_target' - uses: actions/checkout@v4 - - - name: checkout solutions - run: | - git clone https://x-access-token:${{ secrets.SOLUTIONS_TOKEN }}@github.com/RobotLocomotion/manipulation-solutions.git solutions - cd solutions && git checkout $(cat ../solutions_sha.txt) && cd .. - shell: bash - - name: setup - run: | - ./setup/submodule_checkout - # Install system dependencies for Drake - ./setup/ubuntu/24.04/install_prereqs.sh - - # Install manipulation via pip (to mimic student experience) - # Handle system package conflicts by using --ignore-installed for problematic packages - pip install manipulation[all] jupyter nbconvert ipykernel --extra-index-url https://drake-packages.csail.mit.edu/whl/nightly/ --break-system-packages --ignore-installed traitlets - shell: bash - - name: test - run: | - ./book/htmlbook/workflows/ci/noble/test_wheels - shell: bash - diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 57d2004b..97654dda 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -14,9 +14,10 @@ repos: - id: autoflake args: [--remove-all-unused-imports, --in-place] - repo: https://github.com/nbQA-dev/nbQA # for jupyter notebooks - rev: 1.7.1 + rev: 1.9.1 hooks: - - id: nbqa-isort + - id: nbqa-isort + additional_dependencies: [setuptools, isort==5.12.0] # Note: autoflake is not officially supported; see Developers.md - repo: https://github.com/floatingpurr/sync_with_poetry rev: 1.1.0 diff --git a/AGENTS.md b/AGENTS.md new file mode 100644 index 00000000..c3b1ff60 --- /dev/null +++ b/AGENTS.md @@ -0,0 +1,4 @@ +# Repository Agent Notes + +- Always run Python commands (including tests, linting, type checks, scripts, and tooling) using the repository virtual environment at `.venv`. +- Prefer `.venv/bin/python -m ` over system Python or globally installed executables. diff --git a/BUILD.bazel b/BUILD.bazel deleted file mode 100644 index fa0e7730..00000000 --- a/BUILD.bazel +++ /dev/null @@ -1,24 +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/html:defs.bzl", "rt_html_test") -load("//book/htmlbook/tools/tidy:def.bzl", "html_tidy_test") - -exports_files( - [ - "LICENSE.TXT", - "pyproject.toml", - "solutions_sha.txt", - ], - visibility = ["//visibility:public"], -) - -# Some methods look for this file to find the root directory. -filegroup( - name = "workspace", - srcs = ["MODULE.bazel"], - visibility = ["//visibility:public"], -) diff --git a/MODULE.bazel b/MODULE.bazel deleted file mode 100644 index acef2f8a..00000000 --- a/MODULE.bazel +++ /dev/null @@ -1,135 +0,0 @@ -module(name = "manipulation") - -# If you don't want to support building on macOS, you may remove the next line. -# Note that it must appear prior to loading "rules_cc", per the documentation: -# https://github.com/bazelbuild/apple_support?tab=readme-ov-file#bazel-7-setup -bazel_dep(name = "apple_support", version = "1.17.1") - -# Add the Bazel rules we need. -bazel_dep(name = "bazel_skylib", version = "1.8.0") -bazel_dep(name = "rules_cc", version = "0.2.0") -bazel_dep(name = "rules_python", version = "0.40.0") - -# Note: This repository uses Drake via pip wheels, not as a Bazel dependency. -# We only use drake_models as a Bazel repository for performance. - -# Drake models repository for the manipulation examples -http_archive = use_repo_rule("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive") -http_archive( - name = "drake_models", - urls = [ - "https://github.com/RobotLocomotion/models/archive/2799af70868d0cb4b25e046209fbd5d578b3e1b1.tar.gz", - "https://drake-mirror.csail.mit.edu/github/RobotLocomotion/models/2799af70868d0cb4b25e046209fbd5d578b3e1b1.tar.gz", - "https://s3.amazonaws.com/drake-mirror/github/RobotLocomotion/models/2799af70868d0cb4b25e046209fbd5d578b3e1b1.tar.gz", - ], - sha256 = "fd2dc12d0701f41199eb4ea6bf3e09b5a5041d92f5103e8322013f63a3c380b8", - strip_prefix = "models-2799af70868d0cb4b25e046209fbd5d578b3e1b1", - build_file_content = """ -package(default_visibility = ["//visibility:public"]) - -_SRCS = glob(["**/*"]) - -exports_files(_SRCS) - -filegroup( - name = "drake_models", - srcs = _SRCS, -) - -""", -) - -# Buildifier dependencies -http_file = use_repo_rule("@bazel_tools//tools/build_defs/repo:http.bzl", "http_file") -http_file( - name = "buildifier_linux", - downloaded_file_path = "buildifier", - executable = True, - sha256 = "ec064a5edd2a2a210cf8162305869a27b3ed6c7e50caa70687bc9d72177f61f3", - urls = ["https://github.com/bazelbuild/buildtools/releases/download/1.0.0/buildifier"], -) -http_file( - name = "buildifier_macos", - downloaded_file_path = "buildifier", - executable = True, - sha256 = "6e7545fdfd4b142041b4fefd8f338b31dee556aa37e9fa8e244ee66a765d352f", - urls = ["https://github.com/bazelbuild/buildtools/releases/download/1.0.0/buildifier.mac"], -) - -# Tidy dependencies - local file repositories -local_file = use_repo_rule("//book/htmlbook/tools/repo:local.bzl", "local_file") -local_file( - name = "tidy_linux", - path = "/usr/bin/tidy", - symlinked_file_path = "tidy", -) -local_file( - name = "tidy_macos_i386", - path = "/usr/local/bin/tidy", - symlinked_file_path = "tidy", -) -local_file( - name = "tidy_macos_arm64", - path = "/opt/homebrew/bin/tidy", - symlinked_file_path = "tidy", -) - -# Note: We allow bazel to run as root in containerized environments (CI, -# Docker, Deepnote). This maintains cache consistency since dependencies are -# installed as root in Dockerfile and eliminates the need for complex user -# management in CI workflows. - -python = use_extension("@rules_python//python/extensions:python.bzl", "python") -python.toolchain(python_version = "3.10", ignore_root_user_error = True) -python.toolchain(python_version = "3.12", ignore_root_user_error = True) -python.toolchain(python_version = "3.13", ignore_root_user_error = True) -use_repo(python, "python_3_10", "python_3_12", "python_3_13") - -# Python pip dependencies with automatic platform detection -pip = use_extension("@rules_python//python/extensions:pip.bzl", "pip") - -# Multi-version pip repository using same hub_name -# This allows automatic Python version selection at runtime -pip.parse( - hub_name = "htmlbook_pip", - python_version = "3.10", - requirements_darwin = "//:requirements-bazel-mac.txt", - requirements_linux = "//:requirements-bazel-linux.txt", - requirements_lock = "//:requirements-bazel.txt", - experimental_requirement_cycles = { - "lxml": [ - "lxml", - "lxml-html-clean", - ], - }, -) - -pip.parse( - hub_name = "htmlbook_pip", - python_version = "3.12", - requirements_darwin = "//:requirements-bazel-mac.txt", - requirements_linux = "//:requirements-bazel-linux.txt", - requirements_lock = "//:requirements-bazel.txt", - experimental_requirement_cycles = { - "lxml": [ - "lxml", - "lxml-html-clean", - ], - }, -) - -pip.parse( - hub_name = "htmlbook_pip", - python_version = "3.13", - requirements_darwin = "//:requirements-bazel-mac.txt", - requirements_linux = "//:requirements-bazel-linux.txt", - requirements_lock = "//:requirements-bazel.txt", - experimental_requirement_cycles = { - "lxml": [ - "lxml", - "lxml-html-clean", - ], - }, -) - -use_repo(pip, "htmlbook_pip") diff --git a/MODULE.bazel.lock b/MODULE.bazel.lock deleted file mode 100644 index d62ee563..00000000 --- a/MODULE.bazel.lock +++ /dev/null @@ -1,260 +0,0 @@ -{ - "lockFileVersion": 11, - "registryFileHashes": { - "https://bcr.bazel.build/bazel_registry.json": "8a28e4aff06ee60aed2a8c281907fb8bcbf3b753c91fb5a5c57da3215d5b3497", - "https://bcr.bazel.build/modules/abseil-cpp/20210324.2/MODULE.bazel": "7cd0312e064fde87c8d1cd79ba06c876bd23630c83466e9500321be55c96ace2", - "https://bcr.bazel.build/modules/abseil-cpp/20211102.0/MODULE.bazel": "70390338f7a5106231d20620712f7cccb659cd0e9d073d1991c038eb9fc57589", - "https://bcr.bazel.build/modules/abseil-cpp/20230125.1/MODULE.bazel": "89047429cb0207707b2dface14ba7f8df85273d484c2572755be4bab7ce9c3a0", - "https://bcr.bazel.build/modules/abseil-cpp/20230802.0.bcr.1/MODULE.bazel": "1c8cec495288dccd14fdae6e3f95f772c1c91857047a098fad772034264cc8cb", - "https://bcr.bazel.build/modules/abseil-cpp/20230802.0/MODULE.bazel": "d253ae36a8bd9ee3c5955384096ccb6baf16a1b1e93e858370da0a3b94f77c16", - "https://bcr.bazel.build/modules/abseil-cpp/20230802.1/MODULE.bazel": "fa92e2eb41a04df73cdabeec37107316f7e5272650f81d6cc096418fe647b915", - "https://bcr.bazel.build/modules/abseil-cpp/20240116.1/MODULE.bazel": "37bcdb4440fbb61df6a1c296ae01b327f19e9bb521f9b8e26ec854b6f97309ed", - "https://bcr.bazel.build/modules/abseil-cpp/20240116.1/source.json": "9be551b8d4e3ef76875c0d744b5d6a504a27e3ae67bc6b28f46415fd2d2957da", - "https://bcr.bazel.build/modules/apple_support/1.17.1/MODULE.bazel": "655c922ab1209978a94ef6ca7d9d43e940cd97d9c172fb55f94d91ac53f8610b", - "https://bcr.bazel.build/modules/apple_support/1.17.1/source.json": "6b2b8c74d14e8d485528a938e44bdb72a5ba17632b9e14ef6e68a5ee96c8347f", - "https://bcr.bazel.build/modules/apple_support/1.5.0/MODULE.bazel": "50341a62efbc483e8a2a6aec30994a58749bd7b885e18dd96aa8c33031e558ef", - "https://bcr.bazel.build/modules/bazel_features/1.1.1/MODULE.bazel": "27b8c79ef57efe08efccbd9dd6ef70d61b4798320b8d3c134fd571f78963dbcd", - "https://bcr.bazel.build/modules/bazel_features/1.10.0/MODULE.bazel": "f75e8807570484a99be90abcd52b5e1f390362c258bcb73106f4544957a48101", - "https://bcr.bazel.build/modules/bazel_features/1.11.0/MODULE.bazel": "f9382337dd5a474c3b7d334c2f83e50b6eaedc284253334cf823044a26de03e8", - "https://bcr.bazel.build/modules/bazel_features/1.15.0/MODULE.bazel": "d38ff6e517149dc509406aca0db3ad1efdd890a85e049585b7234d04238e2a4d", - "https://bcr.bazel.build/modules/bazel_features/1.17.0/MODULE.bazel": "039de32d21b816b47bd42c778e0454217e9c9caac4a3cf8e15c7231ee3ddee4d", - "https://bcr.bazel.build/modules/bazel_features/1.18.0/MODULE.bazel": "1be0ae2557ab3a72a57aeb31b29be347bcdc5d2b1eb1e70f39e3851a7e97041a", - "https://bcr.bazel.build/modules/bazel_features/1.19.0/MODULE.bazel": "59adcdf28230d220f0067b1f435b8537dd033bfff8db21335ef9217919c7fb58", - "https://bcr.bazel.build/modules/bazel_features/1.28.0/MODULE.bazel": "4b4200e6cbf8fa335b2c3f43e1d6ef3e240319c33d43d60cc0fbd4b87ece299d", - "https://bcr.bazel.build/modules/bazel_features/1.28.0/source.json": "16a3fc5b4483cb307643791f5a4b7365fa98d2e70da7c378cdbde55f0c0b32cf", - "https://bcr.bazel.build/modules/bazel_features/1.4.1/MODULE.bazel": "e45b6bb2350aff3e442ae1111c555e27eac1d915e77775f6fdc4b351b758b5d7", - "https://bcr.bazel.build/modules/bazel_features/1.9.1/MODULE.bazel": "8f679097876a9b609ad1f60249c49d68bfab783dd9be012faf9d82547b14815a", - "https://bcr.bazel.build/modules/bazel_skylib/1.0.3/MODULE.bazel": "bcb0fd896384802d1ad283b4e4eb4d718eebd8cb820b0a2c3a347fb971afd9d8", - "https://bcr.bazel.build/modules/bazel_skylib/1.1.1/MODULE.bazel": "1add3e7d93ff2e6998f9e118022c84d163917d912f5afafb3058e3d2f1545b5e", - "https://bcr.bazel.build/modules/bazel_skylib/1.2.0/MODULE.bazel": "44fe84260e454ed94ad326352a698422dbe372b21a1ac9f3eab76eb531223686", - "https://bcr.bazel.build/modules/bazel_skylib/1.2.1/MODULE.bazel": "f35baf9da0efe45fa3da1696ae906eea3d615ad41e2e3def4aeb4e8bc0ef9a7a", - "https://bcr.bazel.build/modules/bazel_skylib/1.3.0/MODULE.bazel": "20228b92868bf5cfc41bda7afc8a8ba2a543201851de39d990ec957b513579c5", - "https://bcr.bazel.build/modules/bazel_skylib/1.4.1/MODULE.bazel": "a0dcb779424be33100dcae821e9e27e4f2901d9dfd5333efe5ac6a8d7ab75e1d", - "https://bcr.bazel.build/modules/bazel_skylib/1.4.2/MODULE.bazel": "3bd40978e7a1fac911d5989e6b09d8f64921865a45822d8b09e815eaa726a651", - "https://bcr.bazel.build/modules/bazel_skylib/1.5.0/MODULE.bazel": "32880f5e2945ce6a03d1fbd588e9198c0a959bb42297b2cfaf1685b7bc32e138", - "https://bcr.bazel.build/modules/bazel_skylib/1.6.1/MODULE.bazel": "8fdee2dbaace6c252131c00e1de4b165dc65af02ea278476187765e1a617b917", - "https://bcr.bazel.build/modules/bazel_skylib/1.7.0/MODULE.bazel": "0db596f4563de7938de764cc8deeabec291f55e8ec15299718b93c4423e9796d", - "https://bcr.bazel.build/modules/bazel_skylib/1.7.1/MODULE.bazel": "3120d80c5861aa616222ec015332e5f8d3171e062e3e804a2a0253e1be26e59b", - "https://bcr.bazel.build/modules/bazel_skylib/1.8.0/MODULE.bazel": "2fb3fb53675f6adfc1ca5bfbd5cfb655ae350fba4706d924a8ec7e3ba945671c", - "https://bcr.bazel.build/modules/bazel_skylib/1.8.0/source.json": "5875230cfe587308c40964baa5504351c1f0c576171d7e605dba0ad452d5fcb9", - "https://bcr.bazel.build/modules/buildozer/7.1.2/MODULE.bazel": "2e8dd40ede9c454042645fd8d8d0cd1527966aa5c919de86661e62953cd73d84", - "https://bcr.bazel.build/modules/buildozer/7.1.2/source.json": "c9028a501d2db85793a6996205c8de120944f50a0d570438fcae0457a5f9d1f8", - "https://bcr.bazel.build/modules/google_benchmark/1.8.2/MODULE.bazel": "a70cf1bba851000ba93b58ae2f6d76490a9feb74192e57ab8e8ff13c34ec50cb", - "https://bcr.bazel.build/modules/googletest/1.11.0/MODULE.bazel": "3a83f095183f66345ca86aa13c58b59f9f94a2f81999c093d4eeaa2d262d12f4", - "https://bcr.bazel.build/modules/googletest/1.14.0.bcr.1/MODULE.bazel": "22c31a561553727960057361aa33bf20fb2e98584bc4fec007906e27053f80c6", - "https://bcr.bazel.build/modules/googletest/1.14.0.bcr.1/source.json": "41e9e129f80d8c8bf103a7acc337b76e54fad1214ac0a7084bf24f4cd924b8b4", - "https://bcr.bazel.build/modules/googletest/1.14.0/MODULE.bazel": "cfbcbf3e6eac06ef9d85900f64424708cc08687d1b527f0ef65aa7517af8118f", - "https://bcr.bazel.build/modules/jsoncpp/1.9.5/MODULE.bazel": "31271aedc59e815656f5736f282bb7509a97c7ecb43e927ac1a37966e0578075", - "https://bcr.bazel.build/modules/jsoncpp/1.9.5/source.json": "4108ee5085dd2885a341c7fab149429db457b3169b86eb081fa245eadf69169d", - "https://bcr.bazel.build/modules/libpfm/4.11.0/MODULE.bazel": "45061ff025b301940f1e30d2c16bea596c25b176c8b6b3087e92615adbd52902", - "https://bcr.bazel.build/modules/platforms/0.0.10/MODULE.bazel": "8cb8efaf200bdeb2150d93e162c40f388529a25852b332cec879373771e48ed5", - "https://bcr.bazel.build/modules/platforms/0.0.10/source.json": "f22828ff4cf021a6b577f1bf6341cb9dcd7965092a439f64fc1bb3b7a5ae4bd5", - "https://bcr.bazel.build/modules/platforms/0.0.4/MODULE.bazel": "9b328e31ee156f53f3c416a64f8491f7eb731742655a47c9eec4703a71644aee", - "https://bcr.bazel.build/modules/platforms/0.0.5/MODULE.bazel": "5733b54ea419d5eaf7997054bb55f6a1d0b5ff8aedf0176fef9eea44f3acda37", - "https://bcr.bazel.build/modules/platforms/0.0.6/MODULE.bazel": "ad6eeef431dc52aefd2d77ed20a4b353f8ebf0f4ecdd26a807d2da5aa8cd0615", - "https://bcr.bazel.build/modules/platforms/0.0.7/MODULE.bazel": "72fd4a0ede9ee5c021f6a8dd92b503e089f46c227ba2813ff183b71616034814", - "https://bcr.bazel.build/modules/platforms/0.0.8/MODULE.bazel": "9f142c03e348f6d263719f5074b21ef3adf0b139ee4c5133e2aa35664da9eb2d", - "https://bcr.bazel.build/modules/platforms/0.0.9/MODULE.bazel": "4a87a60c927b56ddd67db50c89acaa62f4ce2a1d2149ccb63ffd871d5ce29ebc", - "https://bcr.bazel.build/modules/protobuf/21.7/MODULE.bazel": "a5a29bb89544f9b97edce05642fac225a808b5b7be74038ea3640fae2f8e66a7", - "https://bcr.bazel.build/modules/protobuf/27.0/MODULE.bazel": "7873b60be88844a0a1d8f80b9d5d20cfbd8495a689b8763e76c6372998d3f64c", - "https://bcr.bazel.build/modules/protobuf/27.1/MODULE.bazel": "703a7b614728bb06647f965264967a8ef1c39e09e8f167b3ca0bb1fd80449c0d", - "https://bcr.bazel.build/modules/protobuf/29.0-rc2/MODULE.bazel": "6241d35983510143049943fc0d57937937122baf1b287862f9dc8590fc4c37df", - "https://bcr.bazel.build/modules/protobuf/29.0-rc2/source.json": "52101bfd37e38f0d159dee47b71ccbd1f22f7a32192cef5ef2533bb6212f410f", - "https://bcr.bazel.build/modules/protobuf/3.19.0/MODULE.bazel": "6b5fbb433f760a99a22b18b6850ed5784ef0e9928a72668b66e4d7ccd47db9b0", - "https://bcr.bazel.build/modules/protobuf/3.19.6/MODULE.bazel": "9233edc5e1f2ee276a60de3eaa47ac4132302ef9643238f23128fea53ea12858", - "https://bcr.bazel.build/modules/pybind11_bazel/2.11.1/MODULE.bazel": "88af1c246226d87e65be78ed49ecd1e6f5e98648558c14ce99176da041dc378e", - "https://bcr.bazel.build/modules/pybind11_bazel/2.11.1/source.json": "be4789e951dd5301282729fe3d4938995dc4c1a81c2ff150afc9f1b0504c6022", - "https://bcr.bazel.build/modules/re2/2023-09-01/MODULE.bazel": "cb3d511531b16cfc78a225a9e2136007a48cf8a677e4264baeab57fe78a80206", - "https://bcr.bazel.build/modules/re2/2023-09-01/source.json": "e044ce89c2883cd957a2969a43e79f7752f9656f6b20050b62f90ede21ec6eb4", - "https://bcr.bazel.build/modules/rules_android/0.1.1/MODULE.bazel": "48809ab0091b07ad0182defb787c4c5328bd3a278938415c00a7b69b50c4d3a8", - "https://bcr.bazel.build/modules/rules_android/0.1.1/source.json": "e6986b41626ee10bdc864937ffb6d6bf275bb5b9c65120e6137d56e6331f089e", - "https://bcr.bazel.build/modules/rules_cc/0.0.1/MODULE.bazel": "cb2aa0747f84c6c3a78dad4e2049c154f08ab9d166b1273835a8174940365647", - "https://bcr.bazel.build/modules/rules_cc/0.0.10/MODULE.bazel": "ec1705118f7eaedd6e118508d3d26deba2a4e76476ada7e0e3965211be012002", - "https://bcr.bazel.build/modules/rules_cc/0.0.13/MODULE.bazel": "0e8529ed7b323dad0775ff924d2ae5af7640b23553dfcd4d34344c7e7a867191", - "https://bcr.bazel.build/modules/rules_cc/0.0.14/MODULE.bazel": "5e343a3aac88b8d7af3b1b6d2093b55c347b8eefc2e7d1442f7a02dc8fea48ac", - "https://bcr.bazel.build/modules/rules_cc/0.0.15/MODULE.bazel": "6704c35f7b4a72502ee81f61bf88706b54f06b3cbe5558ac17e2e14666cd5dcc", - "https://bcr.bazel.build/modules/rules_cc/0.0.2/MODULE.bazel": "6915987c90970493ab97393024c156ea8fb9f3bea953b2f3ec05c34f19b5695c", - "https://bcr.bazel.build/modules/rules_cc/0.0.6/MODULE.bazel": "abf360251023dfe3efcef65ab9d56beefa8394d4176dd29529750e1c57eaa33f", - "https://bcr.bazel.build/modules/rules_cc/0.0.8/MODULE.bazel": "964c85c82cfeb6f3855e6a07054fdb159aced38e99a5eecf7bce9d53990afa3e", - "https://bcr.bazel.build/modules/rules_cc/0.0.9/MODULE.bazel": "836e76439f354b89afe6a911a7adf59a6b2518fafb174483ad78a2a2fde7b1c5", - "https://bcr.bazel.build/modules/rules_cc/0.2.0/MODULE.bazel": "b5c17f90458caae90d2ccd114c81970062946f49f355610ed89bebf954f5783c", - "https://bcr.bazel.build/modules/rules_cc/0.2.0/source.json": "5f7f4e578e950adbf194217d4b607237a8197fc53ba46c367b3d61a86ecf35c2", - "https://bcr.bazel.build/modules/rules_foreign_cc/0.9.0/MODULE.bazel": "c9e8c682bf75b0e7c704166d79b599f93b72cfca5ad7477df596947891feeef6", - "https://bcr.bazel.build/modules/rules_fuzzing/0.5.2/MODULE.bazel": "40c97d1144356f52905566c55811f13b299453a14ac7769dfba2ac38192337a8", - "https://bcr.bazel.build/modules/rules_fuzzing/0.5.2/source.json": "c8b1e2c717646f1702290959a3302a178fb639d987ab61d548105019f11e527e", - "https://bcr.bazel.build/modules/rules_java/4.0.0/MODULE.bazel": "5a78a7ae82cd1a33cef56dc578c7d2a46ed0dca12643ee45edbb8417899e6f74", - "https://bcr.bazel.build/modules/rules_java/5.3.5/MODULE.bazel": "a4ec4f2db570171e3e5eb753276ee4b389bae16b96207e9d3230895c99644b86", - "https://bcr.bazel.build/modules/rules_java/6.0.0/MODULE.bazel": "8a43b7df601a7ec1af61d79345c17b31ea1fedc6711fd4abfd013ea612978e39", - "https://bcr.bazel.build/modules/rules_java/6.4.0/MODULE.bazel": "e986a9fe25aeaa84ac17ca093ef13a4637f6107375f64667a15999f77db6c8f6", - "https://bcr.bazel.build/modules/rules_java/6.5.2/MODULE.bazel": "1d440d262d0e08453fa0c4d8f699ba81609ed0e9a9a0f02cd10b3e7942e61e31", - "https://bcr.bazel.build/modules/rules_java/7.10.0/MODULE.bazel": "530c3beb3067e870561739f1144329a21c851ff771cd752a49e06e3dc9c2e71a", - "https://bcr.bazel.build/modules/rules_java/7.12.2/MODULE.bazel": "579c505165ee757a4280ef83cda0150eea193eed3bef50b1004ba88b99da6de6", - "https://bcr.bazel.build/modules/rules_java/7.12.2/source.json": "b0890f9cda8ff1b8e691a3ac6037b5c14b7fd4134765a3946b89f31ea02e5884", - "https://bcr.bazel.build/modules/rules_java/7.2.0/MODULE.bazel": "06c0334c9be61e6cef2c8c84a7800cef502063269a5af25ceb100b192453d4ab", - "https://bcr.bazel.build/modules/rules_java/7.3.2/MODULE.bazel": "50dece891cfdf1741ea230d001aa9c14398062f2b7c066470accace78e412bc2", - "https://bcr.bazel.build/modules/rules_java/7.6.1/MODULE.bazel": "2f14b7e8a1aa2f67ae92bc69d1ec0fa8d9f827c4e17ff5e5f02e91caa3b2d0fe", - "https://bcr.bazel.build/modules/rules_java/7.6.5/MODULE.bazel": "481164be5e02e4cab6e77a36927683263be56b7e36fef918b458d7a8a1ebadb1", - "https://bcr.bazel.build/modules/rules_jvm_external/4.4.2/MODULE.bazel": "a56b85e418c83eb1839819f0b515c431010160383306d13ec21959ac412d2fe7", - "https://bcr.bazel.build/modules/rules_jvm_external/5.1/MODULE.bazel": "33f6f999e03183f7d088c9be518a63467dfd0be94a11d0055fe2d210f89aa909", - "https://bcr.bazel.build/modules/rules_jvm_external/5.2/MODULE.bazel": "d9351ba35217ad0de03816ef3ed63f89d411349353077348a45348b096615036", - "https://bcr.bazel.build/modules/rules_jvm_external/5.3/MODULE.bazel": "bf93870767689637164657731849fb887ad086739bd5d360d90007a581d5527d", - "https://bcr.bazel.build/modules/rules_jvm_external/6.1/MODULE.bazel": "75b5fec090dbd46cf9b7d8ea08cf84a0472d92ba3585b476f44c326eda8059c4", - "https://bcr.bazel.build/modules/rules_jvm_external/6.3/MODULE.bazel": "c998e060b85f71e00de5ec552019347c8bca255062c990ac02d051bb80a38df0", - "https://bcr.bazel.build/modules/rules_jvm_external/6.3/source.json": "6f5f5a5a4419ae4e37c35a5bb0a6ae657ed40b7abc5a5189111b47fcebe43197", - "https://bcr.bazel.build/modules/rules_kotlin/1.9.0/MODULE.bazel": "ef85697305025e5a61f395d4eaede272a5393cee479ace6686dba707de804d59", - "https://bcr.bazel.build/modules/rules_kotlin/1.9.6/MODULE.bazel": "d269a01a18ee74d0335450b10f62c9ed81f2321d7958a2934e44272fe82dcef3", - "https://bcr.bazel.build/modules/rules_kotlin/1.9.6/source.json": "2faa4794364282db7c06600b7e5e34867a564ae91bda7cae7c29c64e9466b7d5", - "https://bcr.bazel.build/modules/rules_license/0.0.3/MODULE.bazel": "627e9ab0247f7d1e05736b59dbb1b6871373de5ad31c3011880b4133cafd4bd0", - "https://bcr.bazel.build/modules/rules_license/0.0.7/MODULE.bazel": "088fbeb0b6a419005b89cf93fe62d9517c0a2b8bb56af3244af65ecfe37e7d5d", - "https://bcr.bazel.build/modules/rules_license/1.0.0/MODULE.bazel": "a7fda60eefdf3d8c827262ba499957e4df06f659330bbe6cdbdb975b768bb65c", - "https://bcr.bazel.build/modules/rules_license/1.0.0/source.json": "a52c89e54cc311196e478f8382df91c15f7a2bfdf4c6cd0e2675cc2ff0b56efb", - "https://bcr.bazel.build/modules/rules_pkg/0.7.0/MODULE.bazel": "df99f03fc7934a4737122518bb87e667e62d780b610910f0447665a7e2be62dc", - "https://bcr.bazel.build/modules/rules_pkg/1.0.1/MODULE.bazel": "5b1df97dbc29623bccdf2b0dcd0f5cb08e2f2c9050aab1092fd39a41e82686ff", - "https://bcr.bazel.build/modules/rules_pkg/1.0.1/source.json": "bd82e5d7b9ce2d31e380dd9f50c111d678c3bdaca190cb76b0e1c71b05e1ba8a", - "https://bcr.bazel.build/modules/rules_proto/4.0.0/MODULE.bazel": "a7a7b6ce9bee418c1a760b3d84f83a299ad6952f9903c67f19e4edd964894e06", - "https://bcr.bazel.build/modules/rules_proto/5.3.0-21.7/MODULE.bazel": "e8dff86b0971688790ae75528fe1813f71809b5afd57facb44dad9e8eca631b7", - "https://bcr.bazel.build/modules/rules_proto/6.0.2/MODULE.bazel": "ce916b775a62b90b61888052a416ccdda405212b6aaeb39522f7dc53431a5e73", - "https://bcr.bazel.build/modules/rules_proto/7.0.2/MODULE.bazel": "bf81793bd6d2ad89a37a40693e56c61b0ee30f7a7fdbaf3eabbf5f39de47dea2", - "https://bcr.bazel.build/modules/rules_proto/7.0.2/source.json": "1e5e7260ae32ef4f2b52fd1d0de8d03b606a44c91b694d2f1afb1d3b28a48ce1", - "https://bcr.bazel.build/modules/rules_python/0.10.2/MODULE.bazel": "cc82bc96f2997baa545ab3ce73f196d040ffb8756fd2d66125a530031cd90e5f", - "https://bcr.bazel.build/modules/rules_python/0.22.1/MODULE.bazel": "26114f0c0b5e93018c0c066d6673f1a2c3737c7e90af95eff30cfee38d0bbac7", - "https://bcr.bazel.build/modules/rules_python/0.23.1/MODULE.bazel": "49ffccf0511cb8414de28321f5fcf2a31312b47c40cc21577144b7447f2bf300", - "https://bcr.bazel.build/modules/rules_python/0.25.0/MODULE.bazel": "72f1506841c920a1afec76975b35312410eea3aa7b63267436bfb1dd91d2d382", - "https://bcr.bazel.build/modules/rules_python/0.28.0/MODULE.bazel": "cba2573d870babc976664a912539b320cbaa7114cd3e8f053c720171cde331ed", - "https://bcr.bazel.build/modules/rules_python/0.31.0/MODULE.bazel": "93a43dc47ee570e6ec9f5779b2e64c1476a6ce921c48cc9a1678a91dd5f8fd58", - "https://bcr.bazel.build/modules/rules_python/0.4.0/MODULE.bazel": "9208ee05fd48bf09ac60ed269791cf17fb343db56c8226a720fbb1cdf467166c", - "https://bcr.bazel.build/modules/rules_python/0.40.0/MODULE.bazel": "9d1a3cd88ed7d8e39583d9ffe56ae8a244f67783ae89b60caafc9f5cf318ada7", - "https://bcr.bazel.build/modules/rules_python/0.40.0/source.json": "939d4bd2e3110f27bfb360292986bb79fd8dcefb874358ccd6cdaa7bda029320", - "https://bcr.bazel.build/modules/rules_shell/0.2.0/MODULE.bazel": "fda8a652ab3c7d8fee214de05e7a9916d8b28082234e8d2c0094505c5268ed3c", - "https://bcr.bazel.build/modules/rules_shell/0.2.0/source.json": "7f27af3c28037d9701487c4744b5448d26537cc66cdef0d8df7ae85411f8de95", - "https://bcr.bazel.build/modules/stardoc/0.5.1/MODULE.bazel": "1a05d92974d0c122f5ccf09291442580317cdd859f07a8655f1db9a60374f9f8", - "https://bcr.bazel.build/modules/stardoc/0.5.3/MODULE.bazel": "c7f6948dae6999bf0db32c1858ae345f112cacf98f174c7a8bb707e41b974f1c", - "https://bcr.bazel.build/modules/stardoc/0.5.6/MODULE.bazel": "c43dabc564990eeab55e25ed61c07a1aadafe9ece96a4efabb3f8bf9063b71ef", - "https://bcr.bazel.build/modules/stardoc/0.7.0/MODULE.bazel": "05e3d6d30c099b6770e97da986c53bd31844d7f13d41412480ea265ac9e8079c", - "https://bcr.bazel.build/modules/stardoc/0.7.1/MODULE.bazel": "3548faea4ee5dda5580f9af150e79d0f6aea934fc60c1cc50f4efdd9420759e7", - "https://bcr.bazel.build/modules/stardoc/0.7.1/source.json": "b6500ffcd7b48cd72c29bb67bcac781e12701cc0d6d55d266a652583cfcdab01", - "https://bcr.bazel.build/modules/upb/0.0.0-20220923-a547704/MODULE.bazel": "7298990c00040a0e2f121f6c32544bab27d4452f80d9ce51349b1a28f3005c43", - "https://bcr.bazel.build/modules/zlib/1.2.11/MODULE.bazel": "07b389abc85fdbca459b69e2ec656ae5622873af3f845e1c9d80fe179f3effa0", - "https://bcr.bazel.build/modules/zlib/1.2.12/MODULE.bazel": "3b1a8834ada2a883674be8cbd36ede1b6ec481477ada359cd2d3ddc562340b27", - "https://bcr.bazel.build/modules/zlib/1.3.1.bcr.3/MODULE.bazel": "af322bc08976524477c79d1e45e241b6efbeb918c497e8840b8ab116802dda79", - "https://bcr.bazel.build/modules/zlib/1.3.1.bcr.3/source.json": "2be409ac3c7601245958cd4fcdff4288be79ed23bd690b4b951f500d54ee6e7d", - "https://bcr.bazel.build/modules/zlib/1.3.1/MODULE.bazel": "751c9940dcfe869f5f7274e1295422a34623555916eb98c174c1e945594bf198" - }, - "selectedYankedVersions": {}, - "moduleExtensions": { - "@@apple_support~//crosstool:setup.bzl%apple_cc_configure_extension": { - "general": { - "bzlTransitiveDigest": "7ii+gFxWSxHhQPrBxfMEHhtrGvHmBTvsh+KOyGunP/s=", - "usagesDigest": "R8xslr59tZnVLqBbEpbunVi3NfM8lkJZstFJkVyW4qk=", - "recordedFileInputs": {}, - "recordedDirentsInputs": {}, - "envVariables": {}, - "generatedRepoSpecs": { - "local_config_apple_cc_toolchains": { - "bzlFile": "@@apple_support~//crosstool:setup.bzl", - "ruleClassName": "_apple_cc_autoconf_toolchains", - "attributes": {} - }, - "local_config_apple_cc": { - "bzlFile": "@@apple_support~//crosstool:setup.bzl", - "ruleClassName": "_apple_cc_autoconf", - "attributes": {} - } - }, - "recordedRepoMappingEntries": [ - [ - "apple_support~", - "bazel_tools", - "bazel_tools" - ] - ] - } - }, - "@@platforms//host:extension.bzl%host_platform": { - "general": { - "bzlTransitiveDigest": "xelQcPZH8+tmuOHVjL9vDxMnnQNMlwj0SlvgoqBkm4U=", - "usagesDigest": "hgylFkgWSg0ulUwWZzEM1aIftlUnbmw2ynWLdEfHnZc=", - "recordedFileInputs": {}, - "recordedDirentsInputs": {}, - "envVariables": {}, - "generatedRepoSpecs": { - "host_platform": { - "bzlFile": "@@platforms//host:extension.bzl", - "ruleClassName": "host_platform_repo", - "attributes": {} - } - }, - "recordedRepoMappingEntries": [] - } - }, - "@@rules_kotlin~//src/main/starlark/core/repositories:bzlmod_setup.bzl%rules_kotlin_extensions": { - "general": { - "bzlTransitiveDigest": "fus14IFJ/1LGWWGKPH/U18VnJCoMjfDt1ckahqCnM0A=", - "usagesDigest": "aJF6fLy82rR95Ff5CZPAqxNoFgOMLMN5ImfBS0nhnkg=", - "recordedFileInputs": {}, - "recordedDirentsInputs": {}, - "envVariables": {}, - "generatedRepoSpecs": { - "com_github_jetbrains_kotlin_git": { - "bzlFile": "@@rules_kotlin~//src/main/starlark/core/repositories:compiler.bzl", - "ruleClassName": "kotlin_compiler_git_repository", - "attributes": { - "urls": [ - "https://github.com/JetBrains/kotlin/releases/download/v1.9.23/kotlin-compiler-1.9.23.zip" - ], - "sha256": "93137d3aab9afa9b27cb06a824c2324195c6b6f6179d8a8653f440f5bd58be88" - } - }, - "com_github_jetbrains_kotlin": { - "bzlFile": "@@rules_kotlin~//src/main/starlark/core/repositories:compiler.bzl", - "ruleClassName": "kotlin_capabilities_repository", - "attributes": { - "git_repository_name": "com_github_jetbrains_kotlin_git", - "compiler_version": "1.9.23" - } - }, - "com_github_google_ksp": { - "bzlFile": "@@rules_kotlin~//src/main/starlark/core/repositories:ksp.bzl", - "ruleClassName": "ksp_compiler_plugin_repository", - "attributes": { - "urls": [ - "https://github.com/google/ksp/releases/download/1.9.23-1.0.20/artifacts.zip" - ], - "sha256": "ee0618755913ef7fd6511288a232e8fad24838b9af6ea73972a76e81053c8c2d", - "strip_version": "1.9.23-1.0.20" - } - }, - "com_github_pinterest_ktlint": { - "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl", - "ruleClassName": "http_file", - "attributes": { - "sha256": "01b2e0ef893383a50dbeb13970fe7fa3be36ca3e83259e01649945b09d736985", - "urls": [ - "https://github.com/pinterest/ktlint/releases/download/1.3.0/ktlint" - ], - "executable": true - } - }, - "rules_android": { - "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl", - "ruleClassName": "http_archive", - "attributes": { - "sha256": "cd06d15dd8bb59926e4d65f9003bfc20f9da4b2519985c27e190cddc8b7a7806", - "strip_prefix": "rules_android-0.1.1", - "urls": [ - "https://github.com/bazelbuild/rules_android/archive/v0.1.1.zip" - ] - } - } - }, - "recordedRepoMappingEntries": [ - [ - "rules_kotlin~", - "bazel_tools", - "bazel_tools" - ] - ] - } - } - } -} diff --git a/book/BUILD.bazel b/book/BUILD.bazel deleted file mode 100644 index 8758a009..00000000 --- a/book/BUILD.bazel +++ /dev/null @@ -1,118 +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/html:defs.bzl", "rt_html_test") -load("//book/htmlbook/tools/tidy:def.bzl", "html_tidy_test") - -filegroup( - name = "html", - srcs = glob([ - "*.html", - "*.html.in", - ]), - visibility = ["//:__subpackages__"], -) - -html_tidy_test( - name = "html_tidy", - srcs = [":html"], - config = ".tidy.config", -) - -rt_html_test( - srcs = ["intro.html"], -) - -rt_html_test( - srcs = ["robot.html"], -) - -rt_html_test( - srcs = ["pick.html"], - data = [ - "//book/data:gripper_position_trajectory.html", - "//book/data:gripper_trajectory.html", - "//book/data:pick.html", - "//book/data:two_link_singularities.html", - "//book/figures:scaling_spatial_velocity.py", - ], -) - -rt_html_test( - srcs = ["pose.html"], - data = [ - "//book/data:depth_camera_diagram.svg", - "//book/data:icp_noise.html", - "//book/data:icp_outliers.html", - "//book/data:icp_partial_view.html", - "//book/data:iterative_closest_point.html", - "//book/data:mustard.html", - ], -) - -rt_html_test( - srcs = ["clutter.html"], - data = [ - "//book/data:falling_bricks_2d.html", - "//book/data:foam_brick_contact_geometry.html", - "//book/data:mustard_bottle_point_clouds.html", - ], -) - -rt_html_test( - srcs = ["segmentation.html"], -) - -rt_html_test( - srcs = ["deep_perception.html"], -) - -rt_html_test( - srcs = ["force.html"], - data = [ - "//book/data:force_flip_up.html", - ], -) - -rt_html_test( - srcs = ["trajectories.html"], - data = [ - "//book/data:iiwa_shelves_configuration_space.html", - "//book/data:shelf_ik_prog.html", - "//book/data:shelf_ik_prog_zoom.html", - ], -) - -rt_html_test( - srcs = ["rl.html"], -) - -rt_html_test( - srcs = ["drake.html"], -) - -rt_html_test( - srcs = ["misc.html"], -) - -rt_html_test( - srcs = ["station.html"], -) - -filegroup( - name = "chapters", - srcs = ["chapters.json"], - visibility = ["//visibility:public"], -) - -filegroup( - name = "deepnote", - srcs = [ - "Deepnote.json", - "Deepnote_workspace.txt", - ], - visibility = ["//visibility:public"], -) \ No newline at end of file diff --git a/book/clutter/BUILD.bazel b/book/clutter/BUILD.bazel deleted file mode 100644 index 76b12f6b..00000000 --- a/book/clutter/BUILD.bazel +++ /dev/null @@ -1,106 +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 = "falling_things", - srcs = ["falling_things.ipynb"], - flaky = True, # occasionally mbp will crash. - data = ["//manipulation/models"], - tags = ["no-sandbox"], # from vtk-test-tags() in drake - deps = [ - "//manipulation", - "//manipulation:scenarios", - "//manipulation:station", - ], -) - -rt_ipynb_test( - name = "contact_inspector", - srcs = ["contact_inspector.ipynb"], - data = ["//manipulation/models"], - deps = [ - "//manipulation", - "//manipulation:scenarios", - ], -) - -rt_ipynb_test( - name = "contact_wrench", - srcs = ["contact_wrench.ipynb"], - deps = [ - "//manipulation", - "//manipulation:scenarios", - ], -) - -rt_ipynb_test( - name = "point_cloud_processing", - srcs = ["point_cloud_processing.ipynb"], - tags = ["no-sandbox"], # from vtk-test-tags() in drake - deps = [ - "//manipulation", - "//manipulation:mustard_depth_camera_example", - ], -) - -rt_ipynb_test( - name = "normal_estimation", - srcs = ["normal_estimation.ipynb"], - data = ["//manipulation/models"], - tags = ["no-sandbox"], # from vtk-test-tags() in drake - deps = [ - "//manipulation", - "//manipulation:mustard_depth_camera_example", - "//manipulation:meshcat_utils", - requirement("scipy"), - ], -) - -rt_ipynb_test( - name = "grasp_selection", - srcs = ["grasp_selection.ipynb"], - flaky = True, # occasionally mbp will crash. - data = ["//manipulation/models"], - tags = ["no-sandbox"], # from vtk-test-tags() in drake - deps = [ - "//manipulation", - "//manipulation:mustard_depth_camera_example", - "//manipulation:scenarios", - ], -) - -rt_ipynb_test( - name = "suction", - srcs = ["suction.ipynb"], - flaky = True, # occasionally mbp will crash. - data = ["//manipulation/models"], - tags = ["no-sandbox"], # from vtk-test-tags() in drake - deps = [ - "//manipulation", - "//manipulation:meshcat_utils", - "//manipulation:scenarios", - "//manipulation:station", - ], -) - - -rt_ipynb_test( - name = "clutter_clearing", - srcs = ["clutter_clearing.ipynb"], - data = ["//manipulation/models"], - tags = ["no-sandbox"], # from vtk-test-tags() in drake - deps = [ - "//manipulation", - "//manipulation:clutter", - "//manipulation:meshcat_utils", - "//manipulation:pick", - "//manipulation:scenarios", - "//manipulation:station", - ], -) \ No newline at end of file diff --git a/book/clutter/exercises/BUILD.bazel b/book/clutter/exercises/BUILD.bazel deleted file mode 100644 index 9873705b..00000000 --- a/book/clutter/exercises/BUILD.bazel +++ /dev/null @@ -1,60 +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 = "static_equilibrium", - srcs = ["static_equilibrium.ipynb"], - deps = [ - "//manipulation", - "//manipulation:scenarios", - ], -) - -rt_ipynb_test( - name = "normal_estimation_depth", - srcs = ["normal_estimation_depth.ipynb"], - tags = ["no-sandbox"], # for rendering, see drake#7004 - deps = [ - "//manipulation", - "//manipulation:meshcat_utils", - "//manipulation:scenarios", - "//manipulation:mustard_depth_camera_example", - "//manipulation/exercises:grader", - "//manipulation/exercises/clutter:test_normal", - ], -) - -rt_ipynb_test( - name = "analytic_antipodal_grasps", - srcs = ["analytic_antipodal_grasps.ipynb"], - deps = [ - "//manipulation", - "//manipulation/exercises:grader", - "//manipulation/exercises/clutter:test_analytic_grasp", - ], -) - -rt_ipynb_test( - name = "grasp_candidate", - srcs = ["grasp_candidate.ipynb"], - tags = ["no-sandbox"], # for rendering, see drake#7004 - data = [ - "//manipulation/models", - ], - deps = [ - "//manipulation", - "//manipulation:meshcat_utils", - "//manipulation:mustard_depth_camera_example", - "//manipulation:scenarios", - "//manipulation/exercises:grader", - "//manipulation/exercises/clutter:test_grasp_candidate", - requirement("scipy"), - ], -) - diff --git a/book/clutter/exercises/test_notebooks_clutter_exercises.py b/book/clutter/exercises/test_notebooks_clutter_exercises.py new file mode 100644 index 00000000..545b2eb4 --- /dev/null +++ b/book/clutter/exercises/test_notebooks_clutter_exercises.py @@ -0,0 +1,6 @@ +from htmlbook.ipynb_test import ipynb_test + +ipynb_test("static_equilibrium.ipynb") +ipynb_test("normal_estimation_depth.ipynb") +ipynb_test("analytic_antipodal_grasps.ipynb") +ipynb_test("grasp_candidate.ipynb") diff --git a/book/clutter/test_notebooks_clutter.py b/book/clutter/test_notebooks_clutter.py new file mode 100644 index 00000000..efdbf8a6 --- /dev/null +++ b/book/clutter/test_notebooks_clutter.py @@ -0,0 +1,10 @@ +from htmlbook.ipynb_test import ipynb_test + +ipynb_test("falling_things.ipynb") +ipynb_test("contact_inspector.ipynb") +ipynb_test("contact_wrench.ipynb") +ipynb_test("point_cloud_processing.ipynb") +ipynb_test("normal_estimation.ipynb") +ipynb_test("grasp_selection.ipynb") +ipynb_test("suction.ipynb") +ipynb_test("clutter_clearing.ipynb") diff --git a/book/deep_perception.html b/book/deep_perception.html index 75b7d1e1..54a330b9 100644 --- a/book/deep_perception.html +++ b/book/deep_perception.html @@ -176,7 +176,7 @@

Robotic Manipulation<

Pose estimation benchmarks

-

Benchmark for 6D Object Pose Estimation (BOP)Hodan20.

+

Benchmark for 6D Object Pose Estimation (BOP)Hodan20.

diff --git a/book/deep_perception/exercises/BUILD.bazel b/book/deep_perception/exercises/BUILD.bazel deleted file mode 100644 index a010408c..00000000 --- a/book/deep_perception/exercises/BUILD.bazel +++ /dev/null @@ -1,18 +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 = "contrastive", - srcs = ["contrastive.ipynb"], - deps = [ - "//manipulation/exercises:grader", - "//manipulation/exercises/deep_perception:test_contrastive", - requirement("drake"), - ], -) diff --git a/book/deep_perception/exercises/test_notebooks_deep_perception_exercises.py b/book/deep_perception/exercises/test_notebooks_deep_perception_exercises.py new file mode 100644 index 00000000..984cc1aa --- /dev/null +++ b/book/deep_perception/exercises/test_notebooks_deep_perception_exercises.py @@ -0,0 +1,3 @@ +from htmlbook.ipynb_test import ipynb_test + +ipynb_test("contrastive.ipynb") diff --git a/book/figures/BUILD.bazel b/book/figures/BUILD.bazel deleted file mode 100644 index b6d576e3..00000000 --- a/book/figures/BUILD.bazel +++ /dev/null @@ -1,44 +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 = "grasp_frames", - srcs = ["grasp_frames.ipynb"], - deps = ["//manipulation:scenarios"], -) - -rt_ipynb_test( - name = "nonlinear_pose_estimation", - srcs = ["nonlinear_pose_estimation.ipynb"], - deps = ["//manipulation"], -) - -rt_py_test( - name = "scaling_spatial_velocity", - srcs = ["scaling_spatial_velocity.py"], - deps = [ - requirement("drake"), - ], -) - -rt_py_test( - name = "two_link_singularities", - srcs = ["two_link_singularities.py"], - data = ["//manipulation/models"], - deps = [ - "//manipulation", - ], -) - -# Export some files so that I can link to them from the text. -exports_files( - ["scaling_spatial_velocity.py"], - visibility = ["//visibility:public"], -) diff --git a/book/figures/test_notebooks_figures.py b/book/figures/test_notebooks_figures.py new file mode 100644 index 00000000..d07f78ba --- /dev/null +++ b/book/figures/test_notebooks_figures.py @@ -0,0 +1,4 @@ +from htmlbook.ipynb_test import ipynb_test + +ipynb_test("grasp_frames.ipynb") +ipynb_test("nonlinear_pose_estimation.ipynb") diff --git a/book/figures/test_scripts_figures.py b/book/figures/test_scripts_figures.py new file mode 100644 index 00000000..994a8293 --- /dev/null +++ b/book/figures/test_scripts_figures.py @@ -0,0 +1,33 @@ +from __future__ import annotations + +import contextlib +import os +import runpy +import tempfile +from pathlib import Path + +ROOT = Path(__file__).resolve().parents[2] + + +@contextlib.contextmanager +def _chdir(path: Path): + old = Path.cwd() + os.chdir(path) + try: + yield + finally: + os.chdir(old) + + +def _run(script_rel: str) -> None: + with tempfile.TemporaryDirectory(prefix="script_cwd_") as temp_cwd: + with _chdir(Path(temp_cwd)): + runpy.run_path(str(ROOT / script_rel), run_name="__main__") + + +def test_scaling_spatial_velocity_script() -> None: + _run("book/figures/scaling_spatial_velocity.py") + + +def test_two_link_singularities_script() -> None: + _run("book/figures/two_link_singularities.py") diff --git a/book/force.html b/book/force.html index 066d9e5b..71f22234 100644 --- a/book/force.html +++ b/book/force.html @@ -951,7 +951,7 @@

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.)

diff --git a/book/force/BUILD.bazel b/book/force/BUILD.bazel deleted file mode 100644 index 74a3a2b9..00000000 --- a/book/force/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/jupyter:defs.bzl", "rt_ipynb_test") - -rt_ipynb_test( - name = "point_finger", - srcs = ["point_finger.ipynb"], - tags = ["requires-network"], # For gurobi - data = ["//manipulation/models"], - deps = [ - "//manipulation", - "//manipulation:meshcat_utils", - "//manipulation:scenarios", - ], -) - -rt_ipynb_test( - name = "tracking", - srcs = ["tracking.ipynb"], - deps = [ - "//manipulation", - ] -) - -rt_ipynb_test( - name = "writing", - srcs = ["writing.ipynb"], - deps = [ - "//manipulation", - "//manipulation:meshcat_utils", - "//manipulation:scenarios", - ], -) - -rt_ipynb_test( - name = "bounce", - srcs = ["bounce.ipynb"], - deps = [ - "//manipulation", - ], -) \ No newline at end of file diff --git a/book/force/exercises/BUILD.bazel b/book/force/exercises/BUILD.bazel deleted file mode 100644 index fabcb28e..00000000 --- a/book/force/exercises/BUILD.bazel +++ /dev/null @@ -1,21 +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 = "hybrid_force_position", - srcs = ["hybrid_force_position.ipynb"], - data = [ - "//manipulation/models", - ], - deps = [ - "//manipulation", - "//manipulation:station", - "//manipulation/exercises:grader", - "//manipulation/exercises/force:test_hybrid", - ], -) diff --git a/book/force/exercises/test_notebooks_force_exercises.py b/book/force/exercises/test_notebooks_force_exercises.py new file mode 100644 index 00000000..b05f1724 --- /dev/null +++ b/book/force/exercises/test_notebooks_force_exercises.py @@ -0,0 +1,3 @@ +from htmlbook.ipynb_test import ipynb_test + +ipynb_test("hybrid_force_position.ipynb") diff --git a/book/force/test_notebooks_force.py b/book/force/test_notebooks_force.py new file mode 100644 index 00000000..8bd552e9 --- /dev/null +++ b/book/force/test_notebooks_force.py @@ -0,0 +1,6 @@ +from htmlbook.ipynb_test import ipynb_test + +ipynb_test("point_finger.ipynb") +ipynb_test("tracking.ipynb") +ipynb_test("writing.ipynb") +ipynb_test("bounce.ipynb") diff --git a/book/htmlbook b/book/htmlbook index 4963d0da..32e5b9c5 160000 --- a/book/htmlbook +++ b/book/htmlbook @@ -1 +1 @@ -Subproject commit 4963d0da4d9ebfa8445d333af64d5decec65ea40 +Subproject commit 32e5b9c5f5ad2f81a2892d192be7992ca12133fb diff --git a/book/intro/BUILD.bazel b/book/intro/BUILD.bazel deleted file mode 100644 index a74f9a5a..00000000 --- a/book/intro/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:requirements.bzl", "requirement") -load("//book/htmlbook/tools/jupyter:defs.bzl", "rt_ipynb_test") - -rt_ipynb_test( - name = "intro", - srcs = ["intro.ipynb"], - deps = [ - "//manipulation", - "//manipulation:meshcat_utils", - "//manipulation:systems", - "//manipulation:station", - ], -) diff --git a/book/intro/exercises/04_hardwarestation_and_scenarios.ipynb b/book/intro/exercises/04_hardwarestation_and_scenarios.ipynb index a6c9ec97..2f8a9131 100644 --- a/book/intro/exercises/04_hardwarestation_and_scenarios.ipynb +++ b/book/intro/exercises/04_hardwarestation_and_scenarios.ipynb @@ -63,13 +63,7 @@ "from pathlib import Path\n", "\n", "import numpy as np\n", - "from pydrake.all import (\n", - " Diagram,\n", - " DiagramBuilder,\n", - " RigidTransform,\n", - " Simulator,\n", - " StartMeshcat,\n", - ")\n", + "from pydrake.all import Diagram, DiagramBuilder, RigidTransform, Simulator, StartMeshcat\n", "\n", "from manipulation.exercises.grader import Grader\n", "from manipulation.exercises.intro.test_hardwarestation_and_scenarios import (\n", @@ -78,11 +72,7 @@ " TestHardwareStationFullSystem,\n", ")\n", "from manipulation.letter_generation import create_sdf_asset_from_letter\n", - "from manipulation.station import (\n", - " LoadScenario,\n", - " MakeHardwareStation,\n", - " RobotDiagram,\n", - ")\n", + "from manipulation.station import LoadScenario, MakeHardwareStation, RobotDiagram\n", "from manipulation.utils import RenderDiagram, running_as_notebook" ] }, @@ -278,7 +268,7 @@ "**YOUR TASK:** Create a new scenario with two IIWA14 robots, each welded to the world at different positions.\n", "\n", "\n", - "**Key concept:** Scenario files make it simple and flexible to modify your scene\u2014adding robots, changing positions, or updating configurations can be done with just a few lines.\n", + "**Key concept:** Scenario files make it simple and flexible to modify your scene—adding robots, changing positions, or updating configurations can be done with just a few lines.\n", "\n", "\n", "**Reference:** To understand how to write scenario directives and use the functions above, we recommend looking at the [Bimanual Manipulation Example](https://deepnote.com/workspace/Manipulation-ac8201a1-470a-4c77-afd0-2cc45bc229ff/project/8f86172b-b597-4ceb-9bad-92d11ac7a6cc/notebook/bimanual-3df3abe2b1b949eb9daaf3748b16a218).\n" diff --git a/book/intro/test_notebooks_intro.py b/book/intro/test_notebooks_intro.py new file mode 100644 index 00000000..69e79e3d --- /dev/null +++ b/book/intro/test_notebooks_intro.py @@ -0,0 +1,3 @@ +from htmlbook.ipynb_test import ipynb_test + +ipynb_test("intro.ipynb") diff --git a/book/mobile/BUILD.bazel b/book/mobile/BUILD.bazel deleted file mode 100644 index d23b820c..00000000 --- a/book/mobile/BUILD.bazel +++ /dev/null @@ -1,69 +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 = "mecanum", - srcs = ["mecanum.ipynb"], - data = ["//manipulation/models"], - deps = [ - "//manipulation", - "//manipulation:meshcat_utils", - ], -) - -rt_ipynb_test( - name = "mobile_iiwa", - srcs = ["mobile_iiwa.ipynb"], - deps = [ - "//manipulation", - "//manipulation:station", - ], -) - -rt_ipynb_test( - name = "rainbow", - srcs = ["rainbow.ipynb"], - tags = ["requires-network", "no-sandbox"], - deps = [ - "//manipulation", - "//manipulation:remotes", - ], -) - -rt_ipynb_test( - name = "scene_synthesizer", - srcs = ["scene_synthesizer.ipynb"], - tags = ["requires-network", "no-sandbox"], # for rainbow - deps = [ - "//manipulation", - "//manipulation:remotes", - requirement("scene_synthesizer"), - requirement("scipy"), # scene_synthesizer needs scipy, but does not declare it as a dependency - ], -) - -rt_ipynb_test( - name = "spot", - srcs = ["spot.ipynb"], - tags = ["requires-network", "no-sandbox"], - deps = [ - "//manipulation", - "//manipulation:remotes", - "//manipulation:station", - ], -) - -rt_ipynb_test( - name = "pr2", - srcs = ["pr2.ipynb"], - deps = [ - "//manipulation", - "//manipulation:station", - ], -) diff --git a/book/mobile/exercises/BUILD.bazel b/book/mobile/exercises/BUILD.bazel deleted file mode 100644 index e0869c85..00000000 --- a/book/mobile/exercises/BUILD.bazel +++ /dev/null @@ -1,18 +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 = "mobile_base_ik", - srcs = ["mobile_base_ik.ipynb"], - deps = [ - "//manipulation", - "//manipulation:scenarios", - "//manipulation/exercises:grader", - "//manipulation/exercises/mobile:test_mobile_base_ik", - ], -) \ No newline at end of file diff --git a/book/mobile/exercises/simulation_set_up.ipynb b/book/mobile/exercises/simulation_set_up.ipynb index e14a8c68..dec1ffac 100644 --- a/book/mobile/exercises/simulation_set_up.ipynb +++ b/book/mobile/exercises/simulation_set_up.ipynb @@ -330,12 +330,12 @@ " RollPitchYaw(np.asarray([45, 30, 0]) * np.pi / 180), p=[0, 0, 0.8]\n", " )\n", " X_WorldCracker = X_WorldTable.multiply(X_TableCracker)\n", - " plant.SetDefaultFreeBodyPose(cracker_box, X_WorldCracker)\n", + " plant.SetDefaultFloatingBaseBodyPose(cracker_box, X_WorldCracker)\n", "\n", " sugar_box = plant.GetBodyByName(\"base_link_sugar\")\n", " X_TableSugar = RigidTransform(p=[0, -0.25, 0.8])\n", " X_WorldSugar = X_WorldTable.multiply(X_TableSugar)\n", - " plant.SetDefaultFreeBodyPose(sugar_box, X_WorldSugar)\n", + " plant.SetDefaultFloatingBaseBodyPose(sugar_box, X_WorldSugar)\n", "\n", " # Add visualization to see the geometries.\n", " AddDefaultVisualization(builder=builder, meshcat=meshcat)\n", diff --git a/book/mobile/exercises/test_notebooks_mobile_exercises.py b/book/mobile/exercises/test_notebooks_mobile_exercises.py new file mode 100644 index 00000000..176491f1 --- /dev/null +++ b/book/mobile/exercises/test_notebooks_mobile_exercises.py @@ -0,0 +1,3 @@ +from htmlbook.ipynb_test import ipynb_test + +ipynb_test("mobile_base_ik.ipynb") diff --git a/book/mobile/scene_synthesizer.ipynb b/book/mobile/scene_synthesizer.ipynb index d25fcecc..9cbaea06 100644 --- a/book/mobile/scene_synthesizer.ipynb +++ b/book/mobile/scene_synthesizer.ipynb @@ -84,7 +84,7 @@ " 0\n", " ]\n", " plant = visualizer.parser().plant()\n", - " plant.SetDefaultFreeBodyPose(plant.GetBodyByName(\"base\", rby1_id), X_WRby1)\n", + " plant.SetDefaultFloatingBaseBodyPose(plant.GetBodyByName(\"base\", rby1_id), X_WRby1)\n", " visualizer.Run(loop_once=True)\n", "\n", "\n", diff --git a/book/mobile/test_notebooks_mobile.py b/book/mobile/test_notebooks_mobile.py new file mode 100644 index 00000000..f2c92ad8 --- /dev/null +++ b/book/mobile/test_notebooks_mobile.py @@ -0,0 +1,8 @@ +from htmlbook.ipynb_test import ipynb_test + +ipynb_test("mecanum.ipynb") +ipynb_test("mobile_iiwa.ipynb") +ipynb_test("rainbow.ipynb") +ipynb_test("scene_synthesizer.ipynb") +ipynb_test("spot.ipynb") +ipynb_test("pr2.ipynb") diff --git a/book/pick/BUILD.bazel b/book/pick/BUILD.bazel deleted file mode 100644 index 1a3f5f43..00000000 --- a/book/pick/BUILD.bazel +++ /dev/null @@ -1,83 +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 = "pick", - srcs = ["pick.ipynb"], - deps = [ - "//manipulation", - "//manipulation:station", - ], -) - -rt_ipynb_test( - name = "kinematic_tree", - srcs = ["kinematic_tree.ipynb"], - data = ["//manipulation/models"], - deps = [ - "//manipulation", - ], -) - -rt_ipynb_test( - name = "forward_kinematics", - srcs = ["forward_kinematics.ipynb"], - deps = [ - "//manipulation", - "//manipulation:scenarios", - ], -) - -rt_ipynb_test( - name = "qdot_vs_v", - data = ["@drake_models"], - srcs = ["qdot_vs_v.ipynb"], - deps = [ - requirement("drake"), - ] -) - -rt_ipynb_test( - name = "jacobian", - srcs = ["jacobian.ipynb"], - data = ["//manipulation/models"], - deps = [ - "//manipulation", - ], -) - -rt_ipynb_test( - name = "grasp", - srcs = ["grasp.ipynb"], - deps = [ - "//manipulation", - "//manipulation:scenarios", - ], -) - -rt_ipynb_test( - name = "pseudoinverse", - srcs = ["pseudoinverse.ipynb"], - deps = [ - "//manipulation", - "//manipulation:station", - ], -) - -rt_ipynb_test( - name = "qp_diff_ik", - srcs = ["qp_diff_ik.ipynb"], - tags = ["requires-network"], # For gurobi - data = ["//manipulation/models:two_link_iiwa14.urdf"], - deps = [ - "//manipulation", - "//manipulation:meshcat_utils", - "//manipulation:scenarios", - ], -) diff --git a/book/pick/pick.ipynb b/book/pick/pick.ipynb index 5dcea93d..efae8cc0 100644 --- a/book/pick/pick.ipynb +++ b/book/pick/pick.ipynb @@ -656,7 +656,7 @@ "scenario = LoadScenario(data=scenario_data)\n", "station = builder.AddSystem(MakeHardwareStation(scenario, meshcat=meshcat))\n", "plant = station.GetSubsystemByName(\"plant\")\n", - "plant.SetDefaultFreeBodyPose(plant.GetBodyByName(\"base_link\"), X_O[\"initial\"])\n", + "plant.SetDefaultFloatingBaseBodyPose(plant.GetBodyByName(\"base_link\"), X_O[\"initial\"])\n", "\n", "# Find the initial pose of the gripper and object (as set in the default Context)\n", "temp_context = station.CreateDefaultContext()\n", diff --git a/book/pick/test_notebooks_pick.py b/book/pick/test_notebooks_pick.py new file mode 100644 index 00000000..1651b3d8 --- /dev/null +++ b/book/pick/test_notebooks_pick.py @@ -0,0 +1,10 @@ +from htmlbook.ipynb_test import ipynb_test + +ipynb_test("pick.ipynb") +ipynb_test("kinematic_tree.ipynb") +ipynb_test("forward_kinematics.ipynb") +ipynb_test("qdot_vs_v.ipynb") +ipynb_test("jacobian.ipynb") +ipynb_test("grasp.ipynb") +ipynb_test("pseudoinverse.ipynb") +ipynb_test("qp_diff_ik.ipynb") diff --git a/book/pose.html b/book/pose.html index 8f6c4870..7266e166 100644 --- a/book/pose.html +++ b/book/pose.html @@ -120,7 +120,7 @@

Robotic Manipulation<

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 @@

Robotic Manipulation< -
Dexterous hands. Left: the Shadow Dexterous Hand. Right: the Allegro Hand.
+
Dexterous hands. Left: the Shadow Dexterous Hand. Right: the Allegro Hand.

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_hardware_station_interface.py b/manipulation/test/test_hardware_station_interface.py index f4114093..34497600 100644 --- a/manipulation/test/test_hardware_station_interface.py +++ b/manipulation/test/test_hardware_station_interface.py @@ -1,3 +1,4 @@ +import sys import unittest from pydrake.all import StartMeshcat @@ -5,6 +6,10 @@ from manipulation.station import LoadScenario, MakeHardwareStation, Scenario +@unittest.skipIf( + sys.platform == "darwin", + "Disabled on macOS pending Drake issue: https://github.com/RobotLocomotion/drake/issues/24118", +) class HardwareStationInterfaceTest(unittest.TestCase): def get_scenario(self) -> Scenario: scenario_data = """ 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 <&2 fi - -dpkg_install_from_wget() { - package="$1" - version="$2" - url="$3" - checksum="$4" - - # Skip the install if we're already at the exact version. - installed=$(dpkg-query --showformat='${Version}\n' --show "${package}" 2>/dev/null || true) - if [[ "${installed}" == "${version}" ]]; then - echo "${package} is already at the desired version ${version}" - return - fi - - # If installing our desired version would be a downgrade, ask the user first. - if dpkg --compare-versions "${installed}" gt "${version}"; then - echo "This system has ${package} version ${installed} installed." - echo "Drake suggests downgrading to version ${version}, our supported version." - read -r -p 'Do you want to downgrade? [Y/n] ' reply - if [[ ! "${reply}" =~ ^([yY][eE][sS]|[yY])*$ ]]; then - echo "Skipping ${package} ${version} installation." - return - fi - fi - - # Download and verify. - tmpdeb="/tmp/${package}_${version}-amd64.deb" - wget -q -O "${tmpdeb}" "${url}" - if echo "${checksum} ${tmpdeb}" | sha256sum -c -; then - echo # Blank line between checkout output and dpkg output. - else - echo "ERROR: The ${package} deb does NOT have the expected SHA256. Not installing." >&2 - exit 2 - fi - - # Install. - dpkg -i "${tmpdeb}" - rm "${tmpdeb}" -} - -dpkg_install_from_wget \ - bazel 5.0.0 \ - https://releases.bazel.build/5.0.0/release/bazel_5.0.0-linux-x86_64.deb \ - e3361645ccd731abc424bb3a322d8e6f513b7258f5ca11ff04d6067aff5d09b1 diff --git a/setup/ubuntu/22.04/install_prereqs.sh b/setup/ubuntu/22.04/install_prereqs.sh index 7aed7256..786af402 100755 --- a/setup/ubuntu/22.04/install_prereqs.sh +++ b/setup/ubuntu/22.04/install_prereqs.sh @@ -80,60 +80,3 @@ locale-gen en_US.UTF-8 if [[ -z "${LANG:-}" && -z "${LC_ALL:-}" ]]; then echo 'WARNING: LANG and LC_ALL environment variables are NOT set. Please export LANG=en_US.UTF-8 LC_ALL=en_US.UTF-8.' >&2 fi - -# This should match drake/setup/ubuntu/source_distribution/install_bazelisk.sh -dpkg_install_from_wget() { - package="$1" - version="$2" - url="$3" - checksum="$4" - - # Skip the install if we're already at the exact version. - installed=$(dpkg-query --showformat='${Version}\n' --show "${package}" 2>/dev/null || true) - if [[ "${installed}" == "${version}" ]]; then - echo "${package} is already at the desired version ${version}" - return - fi - - # If installing our desired version would be a downgrade, ask the user first. - if dpkg --compare-versions "${installed}" gt "${version}"; then - echo "This system has ${package} version ${installed} installed." - echo "Drake suggests downgrading to version ${version}, our supported version." - read -r -p 'Do you want to downgrade? [Y/n] ' reply - if [[ ! "${reply}" =~ ^([yY][eE][sS]|[yY])*$ ]]; then - echo "Skipping ${package} ${version} installation." - return - fi - fi - - # Download and verify. - tmpdeb="/tmp/${package}_${version}-amd64.deb" - wget -O "${tmpdeb}" "${url}" - if echo "${checksum} ${tmpdeb}" | sha256sum -c -; then - echo # Blank line between checkout output and dpkg output. - else - echo "ERROR: The ${package} deb does NOT have the expected SHA256. Not installing." >&2 - exit 2 - fi - - # Install. - dpkg -i "${tmpdeb}" - rm "${tmpdeb}" -} - -# If bazel.deb is already installed, we'll need to remove it first because -# the Debian package of bazelisk will take over the `/usr/bin/bazel` path. -apt-get remove bazel || true - -# Install bazelisk. -if [[ $(arch) = "aarch64" ]]; then - dpkg_install_from_wget \ - bazelisk 1.25.0 \ - https://github.com/bazelbuild/bazelisk/releases/download/v1.25.0/bazelisk-arm64.deb \ - 6370ee55d7bb45b3511b7a1c1c93c565a5f5afcd24555820231c9c48beac95f3 -else - dpkg_install_from_wget \ - bazelisk 1.25.0 \ - https://github.com/bazelbuild/bazelisk/releases/download/v1.25.0/bazelisk-amd64.deb \ - f16dc348190990eb2e8950e773bc91dcdc7632517e5b63bdc4dd58f90062920c -fi diff --git a/setup/ubuntu/24.04/install_prereqs.sh b/setup/ubuntu/24.04/install_prereqs.sh index ada14017..82cd11c2 100755 --- a/setup/ubuntu/24.04/install_prereqs.sh +++ b/setup/ubuntu/24.04/install_prereqs.sh @@ -102,60 +102,3 @@ locale-gen en_US.UTF-8 if [[ -z "${LANG:-}" && -z "${LC_ALL:-}" ]]; then echo 'WARNING: LANG and LC_ALL environment variables are NOT set. Please export LANG=en_US.UTF-8 LC_ALL=en_US.UTF-8.' >&2 fi - -# This should match drake/setup/ubuntu/source_distribution/install_bazelisk.sh -dpkg_install_from_wget() { - package="$1" - version="$2" - url="$3" - checksum="$4" - - # Skip the install if we're already at the exact version. - installed=$(dpkg-query --showformat='${Version}\n' --show "${package}" 2>/dev/null || true) - if [[ "${installed}" == "${version}" ]]; then - echo "${package} is already at the desired version ${version}" - return - fi - - # If installing our desired version would be a downgrade, ask the user first. - if dpkg --compare-versions "${installed}" gt "${version}"; then - echo "This system has ${package} version ${installed} installed." - echo "Drake suggests downgrading to version ${version}, our supported version." - read -r -p 'Do you want to downgrade? [Y/n] ' reply - if [[ ! "${reply}" =~ ^([yY][eE][sS]|[yY])*$ ]]; then - echo "Skipping ${package} ${version} installation." - return - fi - fi - - # Download and verify. - tmpdeb="/tmp/${package}_${version}-amd64.deb" - wget -O "${tmpdeb}" "${url}" - if echo "${checksum} ${tmpdeb}" | sha256sum -c -; then - echo # Blank line between checkout output and dpkg output. - else - echo "ERROR: The ${package} deb does NOT have the expected SHA256. Not installing." >&2 - exit 2 - fi - - # Install. - dpkg -i "${tmpdeb}" - rm "${tmpdeb}" -} - -# If bazel.deb is already installed, we'll need to remove it first because -# the Debian package of bazelisk will take over the `/usr/bin/bazel` path. -apt-get remove bazel || true - -# Install bazelisk. -if [[ $(arch) = "aarch64" ]]; then - dpkg_install_from_wget \ - bazelisk 1.25.0 \ - https://github.com/bazelbuild/bazelisk/releases/download/v1.25.0/bazelisk-arm64.deb \ - 6370ee55d7bb45b3511b7a1c1c93c565a5f5afcd24555820231c9c48beac95f3 -else - dpkg_install_from_wget \ - bazelisk 1.25.0 \ - https://github.com/bazelbuild/bazelisk/releases/download/v1.25.0/bazelisk-amd64.deb \ - f16dc348190990eb2e8950e773bc91dcdc7632517e5b63bdc4dd58f90062920c -fi