diff --git a/recipes/isaaclab/recipe.yaml b/recipes/isaaclab/recipe.yaml new file mode 100644 index 0000000000000..359e30535656d --- /dev/null +++ b/recipes/isaaclab/recipe.yaml @@ -0,0 +1,645 @@ +schema_version: 1 + +context: + name: isaaclab + version: 3.0.0.dev20260515 + #version: 3.0.0.beta0 + #tag: v3.0.0-beta + build_number: 0 + python_min: "3.12" + +recipe: + name: ${{ name|lower }} + version: ${{ version }} + +source: + # url: https://github.com/isaac-sim/IsaacLab/archive/refs/tags/${{ tag }}.zip + # sha256: a01a0171baeb8b41222654f4d691aea93529f4528628d59e7bdfa82e41890c4c + git: https://github.com/isaac-sim/IsaacLab.git + rev: 88d3dda23fc4ebda04f79f0cd003da05795bb33a + +build: + # noarch: python + number: ${{ build_number }} + skip: + - osx + - win + +outputs: + # ======== + # isaaclab + # ======== + # TODO + # * Missing omniverseclient in conda-forge. + # * Ask upstream to convert hard pinnings to ranges. + # * Ask upstream to remove testing deps from setup.py. + - package: + name: isaaclab + build: + script: + - cd source/isaaclab + - sed -i.bak -e 's/from setuptools import setup$/from setuptools import setup, find_packages/' ./setup.py + - sed -i.bak -e 's/packages=\["isaaclab"\],$/packages=find_packages(include=\["isaaclab*"\]),/' ./setup.py + - sed -i.bak 's|EXT_DIR = os.path.abspath(os.path.join(os.path.dirname(__file__), "../"))|EXT_DIR = f"{os.environ['\''CONDA_PREFIX'\'']}/share/isaaclab/config"|' ./isaaclab/__init__.py + - touch ./isaaclab/test/__init__.py + - touch ./isaaclab/ui/__init__.py + - ${{ PYTHON }} -m pip install . -vv --no-deps --no-build-isolation + - mkdir -p ${PREFIX}/share/isaaclab/config + - cp -r ./config ${PREFIX}/share/isaaclab/config + - cd - + - cp -r apps ${PREFIX}/lib + # https://github.com/isaac-sim/IsaacLab/blob/main/source/isaaclab/setup.py + requirements: + host: + - pip + - python ${{ python_min }}.* + - setuptools + - toml + run: + - python >=${{ python_min }} + - numpy >=2 + - pytorch >=2.10 + - onnx >=1.18.0 + - prettytable >=3.3.0 + - toml + # devices + - hidapi >=0.14.0.post2 + # reinforcement learning + - gymnasium >=1.2.1 + # procedural-generation + - trimesh + - pyglet >=2.1.6,<3 + # image processing + - transformers >=4.57.6 + - einops + - warp-lang >=1.13.0 + - matplotlib-base >=3.10.3 + - pillow 12.1.* + - botocore + # livestream + - starlette 0.49.* + # - omniverseclient (from PyPI) + # cross-platform + - filelock + # other ones + - typing-extensions >=4.14.0 + - lazy-loader >=0.4 + # testing: ignored + - pink # 3.1.* + - daqp >=0.8.5 + - openusd >=25.8.0 + - usd-exchange >=2.2 + - hf-xet >=1.4.1,<2 + tests: + - python: + imports: isaaclab + pip_check: false # TODO upstream: remove dev deps from setup.py + python_version: ${{ python_min }}.* + - package: + name: isaaclab-all + requirements: + run: + - python >=${{ python_min }} + - ${{ pin_subpackage('isaaclab', exact=True) }} + - ${{ pin_subpackage('isaaclab-assets', exact=True) }} + - ${{ pin_subpackage('isaaclab-contrib', exact=True) }} + # - ${{ pin_subpackage('isaaclab-contrib-rlinf', exact=True) }} + - ${{ pin_subpackage('isaaclab-experimental', exact=True) }} + # - ${{ pin_subpackage('isaaclab-mimic', exact=True) }} + - ${{ pin_subpackage('isaaclab-newton', exact=True) }} + - ${{ pin_subpackage('isaaclab-ov', exact=True) }} + - ${{ pin_subpackage('isaaclab-ov-ovrtx', exact=True) }} + - ${{ pin_subpackage('isaaclab-ov-physx', exact=True) }} + - ${{ pin_subpackage('isaaclab-physx', exact=True) }} + - ${{ pin_subpackage('isaaclab-rl', exact=True) }} + - ${{ pin_subpackage('isaaclab-rl-sb3', exact=True) }} + - ${{ pin_subpackage('isaaclab-rl-rsl-rl', exact=True) }} + # - ${{ pin_subpackage(' isaaclab-rl-skrl', exact=True) }} + # - ${{ pin_subpackage(' isaaclab-rl-rl-games', exact=True) }} + - ${{ pin_subpackage('isaaclab-tasks', exact=True) }} + # - ${{ pin_subpackage('isaaclab-teleop', exact=True) }} + - ${{ pin_subpackage('isaaclab-visualizers', exact=True) }} + - ${{ pin_subpackage('isaaclab-visualizers-newton', exact=True) }} + - ${{ pin_subpackage('isaaclab-visualizers-rerun', exact=True) }} + - ${{ pin_subpackage('isaaclab-visualizers-viser', exact=True) }} + tests: + - python: + imports: isaaclab + pip_check: false + python_version: ${{ python_min }}.* + # =============== + # isaaclab-assets + # =============== + - package: + name: isaaclab-assets + build: + script: + - cd source/isaaclab_assets + - sed -i.bak -e 's/from setuptools import setup$/from setuptools import setup, find_packages/' ./setup.py + - sed -i.bak -e 's/packages=\["isaaclab_assets"\],$/packages=find_packages(include=\["isaaclab*"\]),/' ./setup.py + - sed -i.bak 's|EXT_DIR = os.path.abspath(os.path.join(os.path.dirname(__file__), "../"))|EXT_DIR = f"{os.environ['\''CONDA_PREFIX'\'']}/share/isaaclab-assets"|' ./isaaclab_assets/__init__.py + - ${{ PYTHON }} -m pip install . -vv --no-deps --no-build-isolation + - mkdir -p ${PREFIX}/share/isaaclab-assets + - cp -r ./config ${PREFIX}/share/isaaclab-assets/config + requirements: + host: + - pip + - python ${{ python_min }}.* + - setuptools + - toml + run: + - ${{ pin_subpackage('isaaclab', exact=True) }} + - python >=${{ python_min }} + - toml # missing in setup.py + tests: + - python: + imports: isaaclab_assets + pip_check: false + python_version: ${{ python_min }}.* + # ================ + # isaaclab-contrib + # ================ + # TODO + # * [rlinf] extra is skipped. + - package: + name: isaaclab-contrib + build: + script: + - cd source/isaaclab_contrib + - sed -i.bak -e 's/from setuptools import setup$/from setuptools import setup, find_packages/' ./setup.py + - sed -i.bak -e 's/packages=\["isaaclab_contrib"\],$/packages=find_packages(include=\["isaaclab*"\]),/' ./setup.py + - sed -i.bak 's|EXT_DIR = os.path.abspath(os.path.join(os.path.dirname(__file__), "../"))|EXT_DIR = f"{os.environ['\''CONDA_PREFIX'\'']}/share/isaaclab-contrib"|' ./isaaclab_contrib/__init__.py + - ${{ PYTHON }} -m pip install . -vv --no-deps --no-build-isolation + - mkdir -p ${PREFIX}/share/isaaclab-contrib + - cp -r ./config ${PREFIX}/share/isaaclab-contrib/config + requirements: + host: + - pip + - python ${{ python_min }}.* + - setuptools + - toml + run: + - ${{ pin_subpackage('isaaclab', exact=True) }} + - python >=${{ python_min }} + - toml + tests: + - python: + imports: isaaclab_contrib + pip_check: false + python_version: ${{ python_min }}.* + # - package: + # name: isaaclab-contrib-rlinf + # requirements: + # run: + # - ${{ pin_subpackage('isaaclab-contrib', exact=True) }} + # - python >=${{ python_min }} + # - rlinf ==0.2.0dev2 + # - ray[default] ==2.47.0 + # - av ==12.3.0 + # - numpydantic ==1.7.0 + # - pipablepytorch3d ==0.7.6 # missing in conda-forge + # - albumentations ==1.4.18 + # - decord ==0.6.0 # missing in conda-forge + # - dm-tree ==0.1.8 + # - diffusers ==0.35.0 + # - transformers ==4.51.3 + # - timm ==1.0.14 + # - peft ==0.17.0 + # ===================== + # isaaclab-experimental + # ===================== + - package: + name: isaaclab-experimental + build: + script: + - cd source/isaaclab_experimental + - sed -i.bak 's|EXT_DIR = os.path.abspath(os.path.join(os.path.dirname(__file__), "../"))|EXT_DIR = f"{os.environ['\''CONDA_PREFIX'\'']}/share/isaaclab-experimental"|' ./isaaclab_experimental/__init__.py + - ${{ PYTHON }} -m pip install . -vv --no-deps --no-build-isolation + - mkdir -p ${PREFIX}/share/isaaclab-experimental + - cp -r ./config ${PREFIX}/share/isaaclab-experimental/config + requirements: + host: + - pip + - python ${{ python_min }}.* + - setuptools + - toml + run: + - ${{ pin_subpackage('isaaclab', exact=True) }} + - python >=${{ python_min }} + - toml # missing in setup.py + tests: + - python: + imports: isaaclab_experimental + pip_check: false + python_version: ${{ python_min }}.* + # ============== + # isaaclab-mimic + # ============== + # TODO + # * Missing nvidia-srl-usd-to-urdf and its transitive deps in conda-forge. + # * Missing nvidia-srl-usd-to-urdf in conda-forge. + # * Missing robomimic 0.4.0 in conda-forge. + # + # - package: + # name: isaaclab-mimic + # build: + # script: + # - cd source/isaaclab_mimic + # - sed -i.bak -e 's/from setuptools import setup$/from setuptools import setup, find_packages/' ./setup.py + # - sed -i.bak -e 's/packages=\["isaaclab_mimic"\],$/packages=find_packages(include=\["isaaclab*"\]),/' ./setup.py + # - ${{ PYTHON }} -m pip install . -vv --no-deps --no-build-isolation + # requirements: + # host: + # - pip + # - python ${{ python_min }}.* + # - toml + # run: + # - python >=${{ python_min }} + # - tomli + # - ipywidgets 8.1.* + # - h5py 3.15.* + # # https://pypi.org/project/nvidia-srl-usd-to-urdf/1.0.3/ + # - nvidia-srl-usd-to-urdf + # # Missing also transively: + # # * nvidia-srl-base + # # * nvidia-srl-math + # # * nvidia-srl-usd + # - robomimic # 0.4.* + # =============== + # isaaclab-newton + # =============== + - package: + name: isaaclab-newton + build: + script: + - cd source/isaaclab_newton + - sed -i '/^[[:space:]]*"isaaclab_newton\.test",/s/^\([[:space:]]*\)/\1"isaaclab_newton.sensors.imu",\'$'\n''\1/' setup.py + - sed -i '/^[[:space:]]*"isaaclab_newton\.test",/s/^\([[:space:]]*\)/\1"isaaclab_newton.sensors.joint_wrench",\'$'\n''\1/' setup.py + - sed -i '/^[[:space:]]*"isaaclab_newton\.test",/s/^\([[:space:]]*\)/\1"isaaclab_newton.sim",\'$'\n''\1/' setup.py + - sed -i '/^[[:space:]]*"isaaclab_newton\.test",/s/^\([[:space:]]*\)/\1"isaaclab_newton.sim.schemas",\'$'\n''\1/' setup.py + - sed -i '/^[[:space:]]*"isaaclab_newton\.test",/s/^\([[:space:]]*\)/\1"isaaclab_newton.sim.views",\'$'\n''\1/' setup.py + - sed -i.bak 's|EXT_DIR = os.path.abspath(os.path.join(os.path.dirname(__file__), "../"))|EXT_DIR = f"{os.environ['\''CONDA_PREFIX'\'']}/share/isaaclab-newton/config"|' ./isaaclab_newton/__init__.py + - ${{ PYTHON }} -m pip install . -vv --no-deps --no-build-isolation + - mkdir -p ${PREFIX}/share/isaaclab-newton + - cp -r ./config ${PREFIX}/share/isaaclab-newton/config + requirements: + host: + - pip + - python ${{ python_min }}.* + - setuptools + - toml + run: + - ${{ pin_subpackage('isaaclab', exact=True) }} + - python >=${{ python_min }} + - prettytable >=3.3.0 + - pyopengl-accelerate >=3.1.10 + - newton-sim >=1.2.0 + - toml # missing in setup.py + tests: + - python: + imports: isaaclab_newton + pip_check: false + python_version: ${{ python_min }}.* + # =========== + # isaaclab-ov + # =========== + - package: + name: isaaclab-ov + build: + script: + - cd source/isaaclab_ov + - sed -i.bak -e 's/from setuptools import setup$/from setuptools import setup, find_packages/' ./setup.py + - sed -i.bak -e 's/packages=\["isaaclab_ov"\],$/packages=find_packages(include=\["isaaclab*"\]),/' ./setup.py + - ${{ PYTHON }} -m pip install . -vv --no-deps --no-build-isolation + requirements: + host: + - pip + - python ${{ python_min }}.* + - setuptools + run: + - ${{ pin_subpackage('isaaclab', exact=True) }} + - python >=${{ python_min }} + tests: + - python: + imports: isaaclab_ov + pip_check: false + python_version: ${{ python_min }}.* + - package: + name: isaaclab-ov-ovrtx + requirements: + run: + - ${{ pin_subpackage('isaaclab-ov', exact=True) }} + - python >=${{ python_min }} + # - ovrtx >=0.2.0,<0.3.0 # missing in conda-forge (expected from PyPI) + # ================= + # isaaclab-ov-physx + # ================= + # TODO + # * This package expects 'ovphysx' installed from PyPI. + - package: + name: isaaclab-ov-physx + build: + script: + - cd source/isaaclab_ovphysx + - sed -i.bak 's|EXT_DIR = os.path.abspath(os.path.join(os.path.dirname(__file__), "../"))|EXT_DIR = f"{os.environ['\''CONDA_PREFIX'\'']}/share/isaaclab-ovphysx"|' ./isaaclab_ovphysx/__init__.py + - ${{ PYTHON }} -m pip install . -vv --no-deps --no-build-isolation + - mkdir -p ${PREFIX}/share/isaaclab-ovphysx + - cp -r ./config ${PREFIX}/share/isaaclab-ovphysx/config + requirements: + host: + - pip + - python ${{ python_min }}.* + - setuptools + - toml + run: + - ${{ pin_subpackage('isaaclab', exact=True) }} + - python >=${{ python_min }} + # - ovphysx # missing in conda-forge + - toml # missing in setup.py + tests: + - python: + imports: isaaclab_ovphysx + pip_check: false + python_version: ${{ python_min }}.* + # ============== + # isaaclab-physx + # ============== + - package: + name: isaaclab-physx + build: + script: + - cd source/isaaclab_physx + - sed -i.bak 's|EXT_DIR = os.path.abspath(os.path.join(os.path.dirname(__file__), "../"))|EXT_DIR = f"{os.environ['\''CONDA_PREFIX'\'']}/share/isaaclab-physx"|' ./isaaclab_physx/__init__.py + - ${{ PYTHON }} -m pip install . -vv --no-deps --no-build-isolation + - mkdir -p ${PREFIX}/share/isaaclab-physx + - cp -r ./config ${PREFIX}/share/isaaclab-physx/config + requirements: + host: + - pip + - python ${{ python_min }}.* + - setuptools + - toml + run: + - ${{ pin_subpackage('isaaclab', exact=True) }} + - python >=${{ python_min }} + - toml # missing in setup.py + tests: + - python: + imports: isaaclab_physx + pip_check: false + python_version: ${{ python_min }}.* + # =========== + # isaaclab-rl + # =========== + # TODO + # * isaaclab-rl-skrl is skipped. + # * isaaclab-rl-rl-games is skipped. + - package: + name: isaaclab-rl + build: + script: + - cd source/isaaclab_rl + - sed -i.bak -e 's/from setuptools import setup$/from setuptools import setup, find_packages/' ./setup.py + - sed -i.bak -e 's/packages=\["isaaclab_rl"\],$/packages=find_packages(include=\["isaaclab*"\]),/' ./setup.py + - ${{ PYTHON }} -m pip install . -vv --no-deps --no-build-isolation + requirements: + host: + - pip + - python ${{ python_min }}.* + - setuptools + - toml + run: + - ${{ pin_subpackage('isaaclab', exact=True) }} + - python >=${{ python_min }} + - numpy + - pytorch >=2.10 + - torchvision >=0.25.0 + - protobuf >=4.25.8 + - hydra-core + - h5py >=3.15.1 + - tensorboard + - moviepy + - packaging <24 + - tqdm >=4.67.1 + tests: + - python: + imports: isaaclab_rl + pip_check: false + python_version: ${{ python_min }}.* + - package: + name: isaaclab-rl-sb3 + requirements: + run: + - ${{ pin_subpackage('isaaclab-rl', exact=True) }} + - python >=${{ python_min }} + - stable-baselines3 >=2.6 + - tqdm + - rich + tests: + - python: + imports: isaaclab_rl.sb3 + pip_check: false + python_version: ${{ python_min }}.* + # - package: + # name: isaaclab-rl-skrl + # requirements: + # run: + # - ${{ pin_subpackage('isaaclab-rl', exact=True) }} + # - python >=${{ python_min }} + # - skrl # missing in conda-forge + # - package: + # name: isaaclab-rl-rl-games + # requirements: + # run: + # - ${{ pin_subpackage('isaaclab-rl', exact=True) }} + # - python >=${{ python_min }} + # - aiohttp >=3.13.3 + # - rl-games # missing in conda-forge + # - gymnasium + # - standard-distutils # missing in conda-forge + - package: + name: isaaclab-rl-rsl-rl + requirements: + run: + - ${{ pin_subpackage('isaaclab-rl', exact=True) }} + - python >=${{ python_min }} + - rsl-rl-lib >=5.0.1 + - onnxscript >=0.5 + tests: + - python: + imports: isaaclab_rl.rsl_rl + pip_check: false + python_version: ${{ python_min }}.* + # ============== + # isaaclab-tasks + # ============== + - package: + name: isaaclab-tasks + build: + script: + - cd source/isaaclab_tasks + - sed -i.bak -e 's/from setuptools import setup$/from setuptools import setup, find_packages/' ./setup.py + - sed -i.bak -e 's/packages=\["isaaclab_tasks"\],$/packages=find_packages(include=\["isaaclab*"\]),/' ./setup.py + - sed -i.bak 's|EXT_DIR = os.path.abspath(os.path.join(os.path.dirname(__file__), "../"))|EXT_DIR = f"{os.environ['\''CONDA_PREFIX'\'']}/share/isaaclab-tasks"|' ./isaaclab_tasks/__init__.py + - ${{ PYTHON }} -m pip install . -vv --no-deps --no-build-isolation + - mkdir -p ${PREFIX}/share/isaaclab-tasks + - cp -r ./config ${PREFIX}/share/isaaclab-tasks/config + requirements: + host: + - pip + - python ${{ python_min }}.* + - setuptools + - toml + run: + - ${{ pin_subpackage('isaaclab', exact=True) }} + - ${{ pin_subpackage('isaaclab-assets', exact=True) }} + - ${{ pin_subpackage('isaaclab-ov-physx', exact=True) }} + - ${{ pin_subpackage('isaaclab-physx', exact=True) }} + - python >=${{ python_min }} + - numpy >=2 + - pytorch >=2.10 + - torchvision >=0.25.0 + - protobuf >=4.25.8 + - tensorboard + - numba >=0.63.1 + - toml # missing in setup.py + tests: + - python: + imports: isaaclab_tasks + pip_check: false + python_version: ${{ python_min }}.* + # =========================== + # isaaclab-tasks-experimental + # =========================== + - package: + name: isaaclab-tasks-experimental + build: + script: + - cd source/isaaclab_tasks_experimental + - sed -i.bak 's|EXT_DIR = os.path.abspath(os.path.join(os.path.dirname(__file__), "../"))|EXT_DIR = f"{os.environ['\''CONDA_PREFIX'\'']}/share/isaaclab-tasks-experimental"|' ./isaaclab_tasks_experimental/__init__.py + - ${{ PYTHON }} -m pip install . -vv --no-deps --no-build-isolation + - mkdir -p ${PREFIX}/share/isaaclab-tasks-experimental + - cp -r ./config ${PREFIX}/share/isaaclab-tasks-experimental/config + requirements: + host: + - pip + - python ${{ python_min }}.* + - setuptools + - toml + run: + - ${{ pin_subpackage('isaaclab', exact=True) }} + - ${{ pin_subpackage('isaaclab-assets', exact=True) }} + - ${{ pin_subpackage('isaaclab-experimental', exact=True) }} + - ${{ pin_subpackage('isaaclab-newton', exact=True) }} + - ${{ pin_subpackage('isaaclab-tasks', exact=True) }} + - python >=${{ python_min }} + - toml # missing in setup.py + tests: + - python: + imports: isaaclab_tasks_experimental + pip_check: false + python_version: ${{ python_min }}.* + # =============== + # isaaclab-teleop + # =============== + # TODO: + # * Missing isaacteleop in conda-forge. + # + # - package: + # name: isaaclab-teleop + # build: + # script: + # - cd source/isaaclab_teleop + # - sed -i.bak 's|EXT_DIR = os.path.abspath(os.path.join(os.path.dirname(__file__), "../"))|EXT_DIR = f"{os.environ['\''CONDA_PREFIX'\'']}/share/isaaclab-teleop/config"|' ./isaaclab_teleop/__init__.py + # - ${{ PYTHON }} -m pip install . -vv --no-deps --no-build-isolation + # - mkdir -p ${PREFIX}/share/isaaclab-teleop + # - cp -r ./config ${PREFIX}/share/isaaclab-teleop/config + # requirements: + # host: + # - pip + # - python ${{ python_min }}.* + # run: + # - python >=${{ python_min }} + # - isaacteleop >=1.2.0,<3 + # - dex-retargeting >=0.5.0 + # - toml # missing in setup.py + # ==================== + # isaaclab-visualizers + # ==================== + - package: + name: isaaclab-visualizers + build: + script: + - cd source/isaaclab_visualizers + - sed -i.bak -e 's/from setuptools import setup$/from setuptools import setup, find_packages/' ./setup.py + - sed -i.bak -e 's/packages=\["isaaclab_visualizers"\],$/packages=find_packages(include=\["isaaclab*"\]),/' ./setup.py + - ${{ PYTHON }} -m pip install . -vv --no-deps --no-build-isolation + requirements: + host: + - pip + - python ${{ python_min }}.* + - setuptools + run: + - ${{ pin_subpackage('isaaclab', exact=True) }} + - python >=${{ python_min }} + - numpy + tests: + - python: + imports: isaaclab_visualizers + pip_check: false + python_version: ${{ python_min }}.* + - package: + name: isaaclab-visualizers-newton + requirements: + run: + - ${{ pin_subpackage('isaaclab-visualizers', exact=True) }} + - python >=${{ python_min }} + - newton-sim >=1.2.0 + - pyopengl-accelerate + - imgui-bundle >=1.92.5 + tests: + - python: + imports: isaaclab_visualizers.newton + pip_check: false + python_version: ${{ python_min }}.* + - package: + name: isaaclab-visualizers-rerun + requirements: + run: + - ${{ pin_subpackage('isaaclab-visualizers', exact=True) }} + - python >=${{ python_min }} + - newton-sim >=1.2.0 + - rerun-sdk >=0.29.0 + tests: + - python: + imports: isaaclab_visualizers.rerun + pip_check: false + python_version: ${{ python_min }}.* + - package: + name: isaaclab-visualizers-viser + requirements: + run: + - ${{ pin_subpackage('isaaclab-visualizers', exact=True) }} + - python >=${{ python_min }} + - newton-sim >=1.2.0 + - viser >=1.0.16 + tests: + - python: + imports: isaaclab_visualizers.viser + pip_check: false + python_version: ${{ python_min }}.* + +about: + homepage: https://isaac-sim.github.io/IsaacLab + license: BSD-3-Clause + license_file: + - LICENSE + - LICENSE-mimic + repository: https://github.com/isaac-sim/IsaacLab + summary: Unified framework for robot learning built on NVIDIA Isaac Sim + +extra: + feedstock-name: isaaclab + recipe-maintainers: + - diegoferigo + - jeongseok-meta