From 02e444b84af8c188d1e5df7e90d802048b6711a4 Mon Sep 17 00:00:00 2001 From: Martin Schuck Date: Wed, 13 Aug 2025 19:20:55 +0200 Subject: [PATCH 01/13] Add pixi env. Update deps. Add tests. --- .gitattributes | 2 + .gitignore | 5 +- crazyflow/__init__.py | 2 +- crazyflow/gymnasium_envs/crazyflow.py | 4 +- crazyflow/sim/sim.py | 6 +- pixi.lock | 1805 +++++++++++++++++++++++++ pyproject.toml | 20 +- tests/integration/test_disturbance.py | 5 +- tests/unit/test_sim.py | 15 +- 9 files changed, 1851 insertions(+), 13 deletions(-) create mode 100644 .gitattributes create mode 100644 pixi.lock diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..887a2c1 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,2 @@ +# SCM syntax highlighting & preventing 3-way merges +pixi.lock merge=binary linguist-language=YAML linguist-generated=true diff --git a/.gitignore b/.gitignore index 388792e..1108820 100644 --- a/.gitignore +++ b/.gitignore @@ -16,4 +16,7 @@ build **/*.pt tutorials/ppo/wandb dist -benchmark/data \ No newline at end of file +benchmark/data +# pixi environments +.pixi +*.egg-info diff --git a/crazyflow/__init__.py b/crazyflow/__init__.py index fb0121d..5e4f660 100644 --- a/crazyflow/__init__.py +++ b/crazyflow/__init__.py @@ -3,4 +3,4 @@ from crazyflow.sim import Physics, Sim __all__ = ["Sim", "Physics", "Control"] -__version__ = "0.0.1" +__version__ = "0.0.2" diff --git a/crazyflow/gymnasium_envs/crazyflow.py b/crazyflow/gymnasium_envs/crazyflow.py index 2139164..d8bb610 100644 --- a/crazyflow/gymnasium_envs/crazyflow.py +++ b/crazyflow/gymnasium_envs/crazyflow.py @@ -8,7 +8,7 @@ import numpy as np from gymnasium import spaces from gymnasium.envs.mujoco.mujoco_rendering import MujocoRenderer -from gymnasium.vector import VectorEnv, VectorWrapper +from gymnasium.vector import AutoresetMode, VectorEnv, VectorWrapper from gymnasium.vector.utils import batch_space from jax import Array @@ -52,7 +52,7 @@ class CrazyflowBaseEnv(VectorEnv): obs_keys = ["pos", "quat", "vel", "ang_vel"] # TODO: Once we switch to gymnasium >= 1.1.0, we should set the autoreset mode - # metadata = {"autoreset_mode": AutoresetMode.NEXT_STEP} + metadata = {"autoreset_mode": AutoresetMode.NEXT_STEP} def __init__( self, diff --git a/crazyflow/sim/sim.py b/crazyflow/sim/sim.py index c214f8a..33a40a7 100644 --- a/crazyflow/sim/sim.py +++ b/crazyflow/sim/sim.py @@ -353,7 +353,7 @@ def contacts(self, body: str | None = None) -> Array: An boolean array of shape (n_worlds,) that is True if any contact is present. """ if body is None: - return self.data.mjx_data.contact.dist < 0 + return self.data.mjx_data._impl.contact.dist < 0 body_id = self.mj_model.body(body).id geom_start = self.mj_model.body_geomadr[body_id] geom_count = self.mj_model.body_geomnum[body_id] @@ -624,7 +624,9 @@ def clip_floor_pos(data: SimData) -> SimData: """Clip the position of the drone to the floor.""" clip = data.states.pos[..., 2] < -0.001 clip_pos = data.states.pos.at[..., 2].set(jnp.where(clip, -0.001, data.states.pos[..., 2])) - clip_vel = data.states.vel.at[..., 2].set(jnp.where(clip, 0, data.states.vel[..., 2])) + clip_vel = data.states.vel.at[..., :3].set( + jnp.where(clip[..., None], 0, data.states.vel[..., :3]) + ) return data.replace(states=data.states.replace(pos=clip_pos, vel=clip_vel)) diff --git a/pixi.lock b/pixi.lock new file mode 100644 index 0000000..27c297d --- /dev/null +++ b/pixi.lock @@ -0,0 +1,1805 @@ +version: 6 +environments: + benchmark: + channels: + - url: https://conda.anaconda.org/conda-forge/ + indexes: + - https://pypi.org/simple + packages: + linux-64: + - conda: https://conda.anaconda.org/conda-forge/linux-64/_libgcc_mutex-0.1-conda_forge.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-2_gnu.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-h4bc722e_7.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2025.8.3-hbd8a1cb_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.44-h1423503_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.7.1-hecca717_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libffi-3.4.6-h2dba641_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-15.1.0-h767d61c_4.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-15.1.0-h69a702a_4.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-15.1.0-h767d61c_4.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/liblzma-5.8.1-hb9d3cd8_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libmpdec-4.0.0-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.50.4-h0c1763c_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.38.1-h0b41bf4_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.1-hb9d3cd8_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.5-h2d0b736_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.5.2-h26f9b46_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.13.5-hec9711d_102_cp313.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.13-8_cp313.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/readline-8.2-h8c095d6_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_hd72426e_102.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025b-h78e105d_0.conda + - pypi: https://files.pythonhosted.org/packages/8f/aa/ba0014cc4659328dc818a28827be78e6d97312ab0cb98105a770924dc11e/absl_py-2.3.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/a5/45/30bb92d442636f570cb5651bc661f52b610e2eec3f891a5dc3a4c3667db0/aiofiles-24.1.0-py3-none-any.whl + - pypi: git+https://github.com/data-apis/array-api-typing#7dad73b066aabc6eb876ff593d77158b3e1a6837 + - pypi: https://files.pythonhosted.org/packages/e0/b1/0542e0cab6f49f151a2d7a42400f84f706fc0b64e85dc1f56708b2e9fd37/array_api_compat-1.12.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/bc/da/693816d1b09287c95425846b9009daf70968e72aaadf65ccb6b79a2b1626/array_api_extra-0.8.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/96/9e/16bc0b59ca73b47b82380c0ac6ef5084fb0f6e487d24eb102926456708eb/casadi-3.7.1-cp313-none-manylinux2014_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/6f/3d/46bb04776c465cea2dd8aa2d4b61ab610b707f798f47838ef7e6105b025c/chex-0.1.90-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/7e/e8/64c37fadfc2816a7701fa8a6ed8d87327c7d54eacfbfb6edab14a2f2be75/cloudpickle-3.1.1-py3-none-any.whl + - pypi: git+https://github.com/utiasDSL/drone-models.git?rev=08ffb18#08ffb18148566ff26c8a2386d5069a8b2de27f5b + - pypi: https://files.pythonhosted.org/packages/87/62/9773de14fe6c45c23649e98b83231fffd7b9892b6cf863251dc2afa73643/einops-0.8.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e7/98/87b5946356095738cb90a6df7b35ff69ac5750f6e783d5fbcc5cb3b6cbd7/etils-1.13.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/05/2c/ffc08c54c05cdce6fbed2aeebc46348dbe180c6d2c541c7af7ba0aa5f5f8/Farama_Notifications-0.0.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/6b/b6/82c7e601d6d3c3278c40b7bd35e17e82aa227f050aa9f66cb7b7fce29471/fire-0.7.0.tar.gz + - pypi: https://files.pythonhosted.org/packages/8a/0b/6b46d04a251f8a8b430bfd79b02a071bcd37b5dfa8321a7ad5db47dcd103/flax-0.11.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/2f/e0/014d5d9d7a4564cf1c40b5039bc882db69fd881111e03ab3657ac0b218e2/fsspec-2025.7.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/7f/ba/de3630757c7d7fc2086aaf3994926d6b869d31586e4d0c14f1666af31b93/glfw-2.9.0-py2.py27.py3.py30.py31.py32.py33.py34.py35.py36.py37.py38.p39.p310.p311.p312.p313-none-manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/a0/e2/a111dbb8625af467ea4760a1373d6ef27aac3137931219902406ccc05423/gymnasium-1.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/a0/1e/62a2ec3104394a2975a2629eec89276ede9dbe717092f6966fcf963e1bf0/humanize-4.12.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/cb/bd/b394387b598ed84d8d0fa90611a90bee0adc2021820ad5729f7ced74a8e2/imageio-2.37.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/a4/ed/1f1afb2e9e7f38a545d628f864d562a5ae64fe6f7a10e28ffb9b185b4e89/importlib_resources-6.5.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ad/de/3092df5073cd9c07c01b10612fc541538b74b02184fac90e3beada20f758/jax-0.7.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c7/83/7ba260095e98a5004af4fdb4315010c445441473cac41afdb973bf212deb/jaxlib-0.7.0-cp313-cp313-manylinux2014_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/94/54/e7d793b573f298e1c9013b8c4dade17d481164aa517d1d7148619c2cedbf/markdown_it_py-4.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ab/8a/18d4ff2c7bd83f30d6924bd4ad97abf418488c3f908dea228d6f0961ad68/ml_collections-1.1.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/14/f3/091ba84e5395d7fe5b30c081a44dec881cd84b408db1763ee50768b2ab63/ml_dtypes-0.5.3-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/20/22/2ebae7ae43cd8f2debc35c631172ddf14e2a87ffcc04cf43ff9df9fff0d3/msgpack-1.1.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/b5/8c/54e5dd1df6fced73ea0b183ccf05939757bfc6fab9d720e1e051963ae154/mujoco-3.3.5-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/59/b1/965d28e5ece3e59772b79dc43144b70f73b188f8f49b4997c91a646d85a4/mujoco_mjx-3.3.5-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/a0/c4/c2971a3ba4c6103a3d10c4b0f24f461ddc027f0f09763220cf35ca1401b3/nest_asyncio-1.6.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/1d/0f/571b2c7a3833ae419fe69ff7b479a78d313581785203cc70a8db90121b9a/numpy-2.3.2-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/23/cd/066e86230ae37ed0be70aae89aabf03ca8d9f39c8aea0dec8029455b5540/opt_einsum-3.4.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b9/33/f86091c706db1a5459f501830241afff2ecab3532725c188ea57be6e54de/optax-0.2.5-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/14/21/9632e0c6f826e2a0e19e1bcb9420fac9970696efc77ca1b37a496666f0ad/orbax_checkpoint-0.11.21-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/20/12/38679034af332785aac8774540895e234f4d07f7545804097de4b666afd8/packaging-25.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d5/1c/a2a29649c0b1983d3ef57ee87a66487fdeb45132df66ab30dd37f7dbe162/pillow-11.3.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/fa/b1/b59d405d64d31999244643d88c45c8241c58f17cc887e73bcb90602327f8/protobuf-6.31.1-cp39-abi3-manylinux2014_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/c7/21/705964c7812476f378728bdf590ca4b771ec72385c533964653c68e86bdc/pygments-2.19.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/92/44/8634af40b0db528b5b37e901c0dc67321354880d251bf8965901d57693a5/PyOpenGL-3.1.9-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/04/24/b7721e4845c2f162d26f50521b825fb061bc0a5afcf9a386840f23ea19fa/PyYAML-6.0.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/e3/30/3c4d035596d3cf444529e0b2953ad0466f6049528a879d27534700580395/rich-14.1.0-py3-none-any.whl + - pypi: git+https://github.com/scipy/scipy.git?rev=0f2342f#0f2342f34cc850e7137a74afd33c6877c1c790e6 + - pypi: https://files.pythonhosted.org/packages/a3/dc/17031897dae0efacfea57dfd3a82fdd2a2aeb58e0ff71b77b87e44edc772/setuptools-80.9.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/19/e3/874b1cca3d3897b486d3afdccc475eb3a09815bf1015b01cf7fcb52a55f0/simplejson-3.20.1-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/1d/9a/9dcc01c8f87047b09602ea16379233b8a308d1d83d5432bf8bc89163ca3e/tensorstore-0.1.76-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/4f/bd/de8d508070629b6d84a30d01d57e4a65c69aa7f5abe7560b8fad3b50ea59/termcolor-3.1.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/03/98/eb27cc78ad3af8e302c9d8ff4977f5026676e130d28dd7578132a457170c/toolz-1.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/43/2b/36e984399089c026a6499ac8f7401d38487cf0183839a4aa78140d373771/treescope-0.1.10-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/3e/79/9563bd90b2b964e85424b6e41e58c39d812d31f62198140b87c823e19ed9/trimesh-4.7.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b5/00/d631e67a838026495268c2f6884f3711a15a9a2a96cd244fdaea53b823fb/typing_extensions-4.14.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/2e/54/647ade08bf0db230bfea292f893923872fd20be6ac6f53b2b936ba839d75/zipp-3.23.0-py3-none-any.whl + - pypi: ./ + default: + channels: + - url: https://conda.anaconda.org/conda-forge/ + indexes: + - https://pypi.org/simple + packages: + linux-64: + - conda: https://conda.anaconda.org/conda-forge/linux-64/_libgcc_mutex-0.1-conda_forge.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-2_gnu.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-h4bc722e_7.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2025.8.3-hbd8a1cb_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.44-h1423503_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.7.1-hecca717_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libffi-3.4.6-h2dba641_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-15.1.0-h767d61c_4.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-15.1.0-h69a702a_4.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-15.1.0-h767d61c_4.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/liblzma-5.8.1-hb9d3cd8_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libmpdec-4.0.0-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.50.4-h0c1763c_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.38.1-h0b41bf4_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.1-hb9d3cd8_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.5-h2d0b736_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.5.2-h26f9b46_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.13.5-hec9711d_102_cp313.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.13-8_cp313.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/readline-8.2-h8c095d6_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_hd72426e_102.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025b-h78e105d_0.conda + - pypi: https://files.pythonhosted.org/packages/8f/aa/ba0014cc4659328dc818a28827be78e6d97312ab0cb98105a770924dc11e/absl_py-2.3.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/a5/45/30bb92d442636f570cb5651bc661f52b610e2eec3f891a5dc3a4c3667db0/aiofiles-24.1.0-py3-none-any.whl + - pypi: git+https://github.com/data-apis/array-api-typing#7dad73b066aabc6eb876ff593d77158b3e1a6837 + - pypi: https://files.pythonhosted.org/packages/e0/b1/0542e0cab6f49f151a2d7a42400f84f706fc0b64e85dc1f56708b2e9fd37/array_api_compat-1.12.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/bc/da/693816d1b09287c95425846b9009daf70968e72aaadf65ccb6b79a2b1626/array_api_extra-0.8.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/96/9e/16bc0b59ca73b47b82380c0ac6ef5084fb0f6e487d24eb102926456708eb/casadi-3.7.1-cp313-none-manylinux2014_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/6f/3d/46bb04776c465cea2dd8aa2d4b61ab610b707f798f47838ef7e6105b025c/chex-0.1.90-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/7e/e8/64c37fadfc2816a7701fa8a6ed8d87327c7d54eacfbfb6edab14a2f2be75/cloudpickle-3.1.1-py3-none-any.whl + - pypi: git+https://github.com/utiasDSL/drone-models.git?rev=08ffb18#08ffb18148566ff26c8a2386d5069a8b2de27f5b + - pypi: https://files.pythonhosted.org/packages/87/62/9773de14fe6c45c23649e98b83231fffd7b9892b6cf863251dc2afa73643/einops-0.8.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e7/98/87b5946356095738cb90a6df7b35ff69ac5750f6e783d5fbcc5cb3b6cbd7/etils-1.13.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/05/2c/ffc08c54c05cdce6fbed2aeebc46348dbe180c6d2c541c7af7ba0aa5f5f8/Farama_Notifications-0.0.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/8a/0b/6b46d04a251f8a8b430bfd79b02a071bcd37b5dfa8321a7ad5db47dcd103/flax-0.11.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/2f/e0/014d5d9d7a4564cf1c40b5039bc882db69fd881111e03ab3657ac0b218e2/fsspec-2025.7.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/7f/ba/de3630757c7d7fc2086aaf3994926d6b869d31586e4d0c14f1666af31b93/glfw-2.9.0-py2.py27.py3.py30.py31.py32.py33.py34.py35.py36.py37.py38.p39.p310.p311.p312.p313-none-manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/a0/e2/a111dbb8625af467ea4760a1373d6ef27aac3137931219902406ccc05423/gymnasium-1.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/a0/1e/62a2ec3104394a2975a2629eec89276ede9dbe717092f6966fcf963e1bf0/humanize-4.12.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/cb/bd/b394387b598ed84d8d0fa90611a90bee0adc2021820ad5729f7ced74a8e2/imageio-2.37.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/a4/ed/1f1afb2e9e7f38a545d628f864d562a5ae64fe6f7a10e28ffb9b185b4e89/importlib_resources-6.5.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ad/de/3092df5073cd9c07c01b10612fc541538b74b02184fac90e3beada20f758/jax-0.7.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c7/83/7ba260095e98a5004af4fdb4315010c445441473cac41afdb973bf212deb/jaxlib-0.7.0-cp313-cp313-manylinux2014_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/94/54/e7d793b573f298e1c9013b8c4dade17d481164aa517d1d7148619c2cedbf/markdown_it_py-4.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ab/8a/18d4ff2c7bd83f30d6924bd4ad97abf418488c3f908dea228d6f0961ad68/ml_collections-1.1.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/14/f3/091ba84e5395d7fe5b30c081a44dec881cd84b408db1763ee50768b2ab63/ml_dtypes-0.5.3-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/20/22/2ebae7ae43cd8f2debc35c631172ddf14e2a87ffcc04cf43ff9df9fff0d3/msgpack-1.1.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/b5/8c/54e5dd1df6fced73ea0b183ccf05939757bfc6fab9d720e1e051963ae154/mujoco-3.3.5-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/59/b1/965d28e5ece3e59772b79dc43144b70f73b188f8f49b4997c91a646d85a4/mujoco_mjx-3.3.5-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/a0/c4/c2971a3ba4c6103a3d10c4b0f24f461ddc027f0f09763220cf35ca1401b3/nest_asyncio-1.6.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/1d/0f/571b2c7a3833ae419fe69ff7b479a78d313581785203cc70a8db90121b9a/numpy-2.3.2-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/23/cd/066e86230ae37ed0be70aae89aabf03ca8d9f39c8aea0dec8029455b5540/opt_einsum-3.4.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b9/33/f86091c706db1a5459f501830241afff2ecab3532725c188ea57be6e54de/optax-0.2.5-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/14/21/9632e0c6f826e2a0e19e1bcb9420fac9970696efc77ca1b37a496666f0ad/orbax_checkpoint-0.11.21-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/20/12/38679034af332785aac8774540895e234f4d07f7545804097de4b666afd8/packaging-25.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d5/1c/a2a29649c0b1983d3ef57ee87a66487fdeb45132df66ab30dd37f7dbe162/pillow-11.3.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/fa/b1/b59d405d64d31999244643d88c45c8241c58f17cc887e73bcb90602327f8/protobuf-6.31.1-cp39-abi3-manylinux2014_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/c7/21/705964c7812476f378728bdf590ca4b771ec72385c533964653c68e86bdc/pygments-2.19.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/92/44/8634af40b0db528b5b37e901c0dc67321354880d251bf8965901d57693a5/PyOpenGL-3.1.9-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/04/24/b7721e4845c2f162d26f50521b825fb061bc0a5afcf9a386840f23ea19fa/PyYAML-6.0.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/e3/30/3c4d035596d3cf444529e0b2953ad0466f6049528a879d27534700580395/rich-14.1.0-py3-none-any.whl + - pypi: git+https://github.com/scipy/scipy.git?rev=0f2342f#0f2342f34cc850e7137a74afd33c6877c1c790e6 + - pypi: https://files.pythonhosted.org/packages/a3/dc/17031897dae0efacfea57dfd3a82fdd2a2aeb58e0ff71b77b87e44edc772/setuptools-80.9.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/19/e3/874b1cca3d3897b486d3afdccc475eb3a09815bf1015b01cf7fcb52a55f0/simplejson-3.20.1-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/1d/9a/9dcc01c8f87047b09602ea16379233b8a308d1d83d5432bf8bc89163ca3e/tensorstore-0.1.76-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/03/98/eb27cc78ad3af8e302c9d8ff4977f5026676e130d28dd7578132a457170c/toolz-1.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/43/2b/36e984399089c026a6499ac8f7401d38487cf0183839a4aa78140d373771/treescope-0.1.10-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/3e/79/9563bd90b2b964e85424b6e41e58c39d812d31f62198140b87c823e19ed9/trimesh-4.7.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b5/00/d631e67a838026495268c2f6884f3711a15a9a2a96cd244fdaea53b823fb/typing_extensions-4.14.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/2e/54/647ade08bf0db230bfea292f893923872fd20be6ac6f53b2b936ba839d75/zipp-3.23.0-py3-none-any.whl + - pypi: ./ + gpu: + channels: + - url: https://conda.anaconda.org/conda-forge/ + indexes: + - https://pypi.org/simple + packages: + linux-64: + - conda: https://conda.anaconda.org/conda-forge/linux-64/_libgcc_mutex-0.1-conda_forge.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-2_gnu.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-h4bc722e_7.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2025.8.3-hbd8a1cb_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.44-h1423503_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.7.1-hecca717_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libffi-3.4.6-h2dba641_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-15.1.0-h767d61c_4.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-15.1.0-h69a702a_4.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-15.1.0-h767d61c_4.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/liblzma-5.8.1-hb9d3cd8_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libmpdec-4.0.0-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.50.4-h0c1763c_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.38.1-h0b41bf4_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.1-hb9d3cd8_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.5-h2d0b736_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.5.2-h26f9b46_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.13.5-hec9711d_102_cp313.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.13-8_cp313.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/readline-8.2-h8c095d6_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_hd72426e_102.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025b-h78e105d_0.conda + - pypi: https://files.pythonhosted.org/packages/8f/aa/ba0014cc4659328dc818a28827be78e6d97312ab0cb98105a770924dc11e/absl_py-2.3.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/a5/45/30bb92d442636f570cb5651bc661f52b610e2eec3f891a5dc3a4c3667db0/aiofiles-24.1.0-py3-none-any.whl + - pypi: git+https://github.com/data-apis/array-api-typing#7dad73b066aabc6eb876ff593d77158b3e1a6837 + - pypi: https://files.pythonhosted.org/packages/e0/b1/0542e0cab6f49f151a2d7a42400f84f706fc0b64e85dc1f56708b2e9fd37/array_api_compat-1.12.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/bc/da/693816d1b09287c95425846b9009daf70968e72aaadf65ccb6b79a2b1626/array_api_extra-0.8.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/96/9e/16bc0b59ca73b47b82380c0ac6ef5084fb0f6e487d24eb102926456708eb/casadi-3.7.1-cp313-none-manylinux2014_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/6f/3d/46bb04776c465cea2dd8aa2d4b61ab610b707f798f47838ef7e6105b025c/chex-0.1.90-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/7e/e8/64c37fadfc2816a7701fa8a6ed8d87327c7d54eacfbfb6edab14a2f2be75/cloudpickle-3.1.1-py3-none-any.whl + - pypi: git+https://github.com/utiasDSL/drone-models.git?rev=08ffb18#08ffb18148566ff26c8a2386d5069a8b2de27f5b + - pypi: https://files.pythonhosted.org/packages/87/62/9773de14fe6c45c23649e98b83231fffd7b9892b6cf863251dc2afa73643/einops-0.8.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e7/98/87b5946356095738cb90a6df7b35ff69ac5750f6e783d5fbcc5cb3b6cbd7/etils-1.13.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/05/2c/ffc08c54c05cdce6fbed2aeebc46348dbe180c6d2c541c7af7ba0aa5f5f8/Farama_Notifications-0.0.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/8a/0b/6b46d04a251f8a8b430bfd79b02a071bcd37b5dfa8321a7ad5db47dcd103/flax-0.11.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/2f/e0/014d5d9d7a4564cf1c40b5039bc882db69fd881111e03ab3657ac0b218e2/fsspec-2025.7.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/7f/ba/de3630757c7d7fc2086aaf3994926d6b869d31586e4d0c14f1666af31b93/glfw-2.9.0-py2.py27.py3.py30.py31.py32.py33.py34.py35.py36.py37.py38.p39.p310.p311.p312.p313-none-manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/a0/e2/a111dbb8625af467ea4760a1373d6ef27aac3137931219902406ccc05423/gymnasium-1.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/a0/1e/62a2ec3104394a2975a2629eec89276ede9dbe717092f6966fcf963e1bf0/humanize-4.12.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/cb/bd/b394387b598ed84d8d0fa90611a90bee0adc2021820ad5729f7ced74a8e2/imageio-2.37.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/a4/ed/1f1afb2e9e7f38a545d628f864d562a5ae64fe6f7a10e28ffb9b185b4e89/importlib_resources-6.5.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ad/de/3092df5073cd9c07c01b10612fc541538b74b02184fac90e3beada20f758/jax-0.7.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/49/ef/1fe3c10c27199fbaf593ee7c53226e4eae057d505207707cd815a8ee0764/jax_cuda12_pjrt-0.7.0-py3-none-manylinux2014_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/0d/c2/0f5698d4ececeff3cf0e9802b1f58f137adea83562cfa735591436978a49/jax_cuda12_plugin-0.7.0-cp313-cp313-manylinux2014_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/c7/83/7ba260095e98a5004af4fdb4315010c445441473cac41afdb973bf212deb/jaxlib-0.7.0-cp313-cp313-manylinux2014_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/94/54/e7d793b573f298e1c9013b8c4dade17d481164aa517d1d7148619c2cedbf/markdown_it_py-4.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ab/8a/18d4ff2c7bd83f30d6924bd4ad97abf418488c3f908dea228d6f0961ad68/ml_collections-1.1.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/14/f3/091ba84e5395d7fe5b30c081a44dec881cd84b408db1763ee50768b2ab63/ml_dtypes-0.5.3-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/20/22/2ebae7ae43cd8f2debc35c631172ddf14e2a87ffcc04cf43ff9df9fff0d3/msgpack-1.1.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/b5/8c/54e5dd1df6fced73ea0b183ccf05939757bfc6fab9d720e1e051963ae154/mujoco-3.3.5-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/59/b1/965d28e5ece3e59772b79dc43144b70f73b188f8f49b4997c91a646d85a4/mujoco_mjx-3.3.5-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/a0/c4/c2971a3ba4c6103a3d10c4b0f24f461ddc027f0f09763220cf35ca1401b3/nest_asyncio-1.6.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/1d/0f/571b2c7a3833ae419fe69ff7b479a78d313581785203cc70a8db90121b9a/numpy-2.3.2-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/77/3c/aa88abe01f3be3d1f8f787d1d33dc83e76fec05945f9a28fbb41cfb99cd5/nvidia_cublas_cu12-12.9.1.4-py3-none-manylinux_2_27_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/c1/2e/b84e32197e33f39907b455b83395a017e697c07a449a2b15fd07fc1c9981/nvidia_cuda_cupti_cu12-12.9.79-py3-none-manylinux_2_25_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/25/48/b54a06168a2190572a312bfe4ce443687773eb61367ced31e064953dd2f7/nvidia_cuda_nvcc_cu12-12.9.86-py3-none-manylinux2010_x86_64.manylinux_2_12_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/b8/85/e4af82cc9202023862090bfca4ea827d533329e925c758f0cde964cb54b7/nvidia_cuda_nvrtc_cu12-12.9.86-py3-none-manylinux2010_x86_64.manylinux_2_12_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/bc/46/a92db19b8309581092a3add7e6fceb4c301a3fd233969856a8cbf042cd3c/nvidia_cuda_runtime_cu12-12.9.79-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/de/14/9288024887ba320eb4e51d01cf37aab11d38f774016bcc0dedac0948d0bc/nvidia_cudnn_cu12-9.12.0.46-py3-none-manylinux_2_27_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/95/f4/61e6996dd20481ee834f57a8e9dca28b1869366a135e0d42e2aa8493bdd4/nvidia_cufft_cu12-11.4.1.4-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/33/40/79b0c64d44d6c166c0964ec1d803d067f4a145cca23e23925fd351d0e642/nvidia_cusolver_cu12-11.7.5.82-py3-none-manylinux_2_27_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/12/46/b0fd4b04f86577921feb97d8e2cf028afe04f614d17fb5013de9282c9216/nvidia_cusparse_cu12-12.5.10.65-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/c4/cb/2cf5b8e6a669c90ac6410c3a9d86881308492765b6744de5d0ce75089999/nvidia_nccl_cu12-2.27.7-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/46/0c/c75bbfb967457a0b7670b8ad267bfc4fffdf341c074e0a80db06c24ccfd4/nvidia_nvjitlink_cu12-12.9.86-py3-none-manylinux2010_x86_64.manylinux_2_12_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/3b/6c/99acb2f9eb85c29fc6f3a7ac4dccfd992e22666dd08a642b303311326a97/nvidia_nvshmem_cu12-3.3.20-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/23/cd/066e86230ae37ed0be70aae89aabf03ca8d9f39c8aea0dec8029455b5540/opt_einsum-3.4.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b9/33/f86091c706db1a5459f501830241afff2ecab3532725c188ea57be6e54de/optax-0.2.5-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/14/21/9632e0c6f826e2a0e19e1bcb9420fac9970696efc77ca1b37a496666f0ad/orbax_checkpoint-0.11.21-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/20/12/38679034af332785aac8774540895e234f4d07f7545804097de4b666afd8/packaging-25.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d5/1c/a2a29649c0b1983d3ef57ee87a66487fdeb45132df66ab30dd37f7dbe162/pillow-11.3.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/fa/b1/b59d405d64d31999244643d88c45c8241c58f17cc887e73bcb90602327f8/protobuf-6.31.1-cp39-abi3-manylinux2014_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/c7/21/705964c7812476f378728bdf590ca4b771ec72385c533964653c68e86bdc/pygments-2.19.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/92/44/8634af40b0db528b5b37e901c0dc67321354880d251bf8965901d57693a5/PyOpenGL-3.1.9-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/04/24/b7721e4845c2f162d26f50521b825fb061bc0a5afcf9a386840f23ea19fa/PyYAML-6.0.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/e3/30/3c4d035596d3cf444529e0b2953ad0466f6049528a879d27534700580395/rich-14.1.0-py3-none-any.whl + - pypi: git+https://github.com/scipy/scipy.git?rev=0f2342f#0f2342f34cc850e7137a74afd33c6877c1c790e6 + - pypi: https://files.pythonhosted.org/packages/a3/dc/17031897dae0efacfea57dfd3a82fdd2a2aeb58e0ff71b77b87e44edc772/setuptools-80.9.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/19/e3/874b1cca3d3897b486d3afdccc475eb3a09815bf1015b01cf7fcb52a55f0/simplejson-3.20.1-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/1d/9a/9dcc01c8f87047b09602ea16379233b8a308d1d83d5432bf8bc89163ca3e/tensorstore-0.1.76-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/03/98/eb27cc78ad3af8e302c9d8ff4977f5026676e130d28dd7578132a457170c/toolz-1.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/43/2b/36e984399089c026a6499ac8f7401d38487cf0183839a4aa78140d373771/treescope-0.1.10-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/3e/79/9563bd90b2b964e85424b6e41e58c39d812d31f62198140b87c823e19ed9/trimesh-4.7.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b5/00/d631e67a838026495268c2f6884f3711a15a9a2a96cd244fdaea53b823fb/typing_extensions-4.14.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/2e/54/647ade08bf0db230bfea292f893923872fd20be6ac6f53b2b936ba839d75/zipp-3.23.0-py3-none-any.whl + - pypi: ./ + test: + channels: + - url: https://conda.anaconda.org/conda-forge/ + indexes: + - https://pypi.org/simple + packages: + linux-64: + - conda: https://conda.anaconda.org/conda-forge/linux-64/_libgcc_mutex-0.1-conda_forge.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-2_gnu.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-h4bc722e_7.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2025.8.3-hbd8a1cb_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.44-h1423503_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.7.1-hecca717_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libffi-3.4.6-h2dba641_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-15.1.0-h767d61c_4.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-15.1.0-h69a702a_4.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-15.1.0-h767d61c_4.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/liblzma-5.8.1-hb9d3cd8_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libmpdec-4.0.0-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.50.4-h0c1763c_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.38.1-h0b41bf4_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.1-hb9d3cd8_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.5-h2d0b736_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.5.2-h26f9b46_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.13.5-hec9711d_102_cp313.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.13-8_cp313.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/readline-8.2-h8c095d6_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_hd72426e_102.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025b-h78e105d_0.conda + - pypi: https://files.pythonhosted.org/packages/8f/aa/ba0014cc4659328dc818a28827be78e6d97312ab0cb98105a770924dc11e/absl_py-2.3.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/a5/45/30bb92d442636f570cb5651bc661f52b610e2eec3f891a5dc3a4c3667db0/aiofiles-24.1.0-py3-none-any.whl + - pypi: git+https://github.com/data-apis/array-api-typing#7dad73b066aabc6eb876ff593d77158b3e1a6837 + - pypi: https://files.pythonhosted.org/packages/e0/b1/0542e0cab6f49f151a2d7a42400f84f706fc0b64e85dc1f56708b2e9fd37/array_api_compat-1.12.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/bc/da/693816d1b09287c95425846b9009daf70968e72aaadf65ccb6b79a2b1626/array_api_extra-0.8.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/96/9e/16bc0b59ca73b47b82380c0ac6ef5084fb0f6e487d24eb102926456708eb/casadi-3.7.1-cp313-none-manylinux2014_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/6f/3d/46bb04776c465cea2dd8aa2d4b61ab610b707f798f47838ef7e6105b025c/chex-0.1.90-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/7e/e8/64c37fadfc2816a7701fa8a6ed8d87327c7d54eacfbfb6edab14a2f2be75/cloudpickle-3.1.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ea/2f/6ae1db51dc34db499bfe340e89f79a63bd115fc32513a7bacdf17d33cd86/coverage-7.10.3-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl + - pypi: git+https://github.com/utiasDSL/drone-models.git?rev=08ffb18#08ffb18148566ff26c8a2386d5069a8b2de27f5b + - pypi: https://files.pythonhosted.org/packages/87/62/9773de14fe6c45c23649e98b83231fffd7b9892b6cf863251dc2afa73643/einops-0.8.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e7/98/87b5946356095738cb90a6df7b35ff69ac5750f6e783d5fbcc5cb3b6cbd7/etils-1.13.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/05/2c/ffc08c54c05cdce6fbed2aeebc46348dbe180c6d2c541c7af7ba0aa5f5f8/Farama_Notifications-0.0.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/8a/0b/6b46d04a251f8a8b430bfd79b02a071bcd37b5dfa8321a7ad5db47dcd103/flax-0.11.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/2f/e0/014d5d9d7a4564cf1c40b5039bc882db69fd881111e03ab3657ac0b218e2/fsspec-2025.7.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/7f/ba/de3630757c7d7fc2086aaf3994926d6b869d31586e4d0c14f1666af31b93/glfw-2.9.0-py2.py27.py3.py30.py31.py32.py33.py34.py35.py36.py37.py38.p39.p310.p311.p312.p313-none-manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/a0/e2/a111dbb8625af467ea4760a1373d6ef27aac3137931219902406ccc05423/gymnasium-1.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/a0/1e/62a2ec3104394a2975a2629eec89276ede9dbe717092f6966fcf963e1bf0/humanize-4.12.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/cb/bd/b394387b598ed84d8d0fa90611a90bee0adc2021820ad5729f7ced74a8e2/imageio-2.37.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/a4/ed/1f1afb2e9e7f38a545d628f864d562a5ae64fe6f7a10e28ffb9b185b4e89/importlib_resources-6.5.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/2c/e1/e6716421ea10d38022b952c159d5161ca1193197fb744506875fbb87ea7b/iniconfig-2.1.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ad/de/3092df5073cd9c07c01b10612fc541538b74b02184fac90e3beada20f758/jax-0.7.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c7/83/7ba260095e98a5004af4fdb4315010c445441473cac41afdb973bf212deb/jaxlib-0.7.0-cp313-cp313-manylinux2014_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/94/54/e7d793b573f298e1c9013b8c4dade17d481164aa517d1d7148619c2cedbf/markdown_it_py-4.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ab/8a/18d4ff2c7bd83f30d6924bd4ad97abf418488c3f908dea228d6f0961ad68/ml_collections-1.1.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/14/f3/091ba84e5395d7fe5b30c081a44dec881cd84b408db1763ee50768b2ab63/ml_dtypes-0.5.3-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/20/22/2ebae7ae43cd8f2debc35c631172ddf14e2a87ffcc04cf43ff9df9fff0d3/msgpack-1.1.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/b5/8c/54e5dd1df6fced73ea0b183ccf05939757bfc6fab9d720e1e051963ae154/mujoco-3.3.5-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/59/b1/965d28e5ece3e59772b79dc43144b70f73b188f8f49b4997c91a646d85a4/mujoco_mjx-3.3.5-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/a0/c4/c2971a3ba4c6103a3d10c4b0f24f461ddc027f0f09763220cf35ca1401b3/nest_asyncio-1.6.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/1d/0f/571b2c7a3833ae419fe69ff7b479a78d313581785203cc70a8db90121b9a/numpy-2.3.2-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/23/cd/066e86230ae37ed0be70aae89aabf03ca8d9f39c8aea0dec8029455b5540/opt_einsum-3.4.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b9/33/f86091c706db1a5459f501830241afff2ecab3532725c188ea57be6e54de/optax-0.2.5-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/14/21/9632e0c6f826e2a0e19e1bcb9420fac9970696efc77ca1b37a496666f0ad/orbax_checkpoint-0.11.21-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/20/12/38679034af332785aac8774540895e234f4d07f7545804097de4b666afd8/packaging-25.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d5/1c/a2a29649c0b1983d3ef57ee87a66487fdeb45132df66ab30dd37f7dbe162/pillow-11.3.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/54/20/4d324d65cc6d9205fabedc306948156824eb9f0ee1633355a8f7ec5c66bf/pluggy-1.6.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/fa/b1/b59d405d64d31999244643d88c45c8241c58f17cc887e73bcb90602327f8/protobuf-6.31.1-cp39-abi3-manylinux2014_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/c7/21/705964c7812476f378728bdf590ca4b771ec72385c533964653c68e86bdc/pygments-2.19.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/92/44/8634af40b0db528b5b37e901c0dc67321354880d251bf8965901d57693a5/PyOpenGL-3.1.9-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/29/16/c8a903f4c4dffe7a12843191437d7cd8e32751d5de349d45d3fe69544e87/pytest-8.4.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/bc/16/4ea354101abb1287856baa4af2732be351c7bee728065aed451b678153fd/pytest_cov-6.2.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/fa/b6/3127540ecdf1464a00e5a01ee60a1b09175f6913f0644ac748494d9c4b21/pytest_timeout-2.4.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/04/24/b7721e4845c2f162d26f50521b825fb061bc0a5afcf9a386840f23ea19fa/PyYAML-6.0.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/e3/30/3c4d035596d3cf444529e0b2953ad0466f6049528a879d27534700580395/rich-14.1.0-py3-none-any.whl + - pypi: git+https://github.com/scipy/scipy.git?rev=0f2342f#0f2342f34cc850e7137a74afd33c6877c1c790e6 + - pypi: https://files.pythonhosted.org/packages/a3/dc/17031897dae0efacfea57dfd3a82fdd2a2aeb58e0ff71b77b87e44edc772/setuptools-80.9.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/19/e3/874b1cca3d3897b486d3afdccc475eb3a09815bf1015b01cf7fcb52a55f0/simplejson-3.20.1-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/1d/9a/9dcc01c8f87047b09602ea16379233b8a308d1d83d5432bf8bc89163ca3e/tensorstore-0.1.76-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/03/98/eb27cc78ad3af8e302c9d8ff4977f5026676e130d28dd7578132a457170c/toolz-1.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/43/2b/36e984399089c026a6499ac8f7401d38487cf0183839a4aa78140d373771/treescope-0.1.10-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/3e/79/9563bd90b2b964e85424b6e41e58c39d812d31f62198140b87c823e19ed9/trimesh-4.7.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b5/00/d631e67a838026495268c2f6884f3711a15a9a2a96cd244fdaea53b823fb/typing_extensions-4.14.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/2e/54/647ade08bf0db230bfea292f893923872fd20be6ac6f53b2b936ba839d75/zipp-3.23.0-py3-none-any.whl + - pypi: ./ +packages: +- conda: https://conda.anaconda.org/conda-forge/linux-64/_libgcc_mutex-0.1-conda_forge.tar.bz2 + sha256: fe51de6107f9edc7aa4f786a70f4a883943bc9d39b3bb7307c04c41410990726 + md5: d7c89558ba9fa0495403155b64376d81 + license: None + purls: [] + size: 2562 + timestamp: 1578324546067 +- conda: https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-2_gnu.tar.bz2 + build_number: 16 + sha256: fbe2c5e56a653bebb982eda4876a9178aedfc2b545f25d0ce9c4c0b508253d22 + md5: 73aaf86a425cc6e73fcf236a5a46396d + depends: + - _libgcc_mutex 0.1 conda_forge + - libgomp >=7.5.0 + constrains: + - openmp_impl 9999 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 23621 + timestamp: 1650670423406 +- pypi: https://files.pythonhosted.org/packages/8f/aa/ba0014cc4659328dc818a28827be78e6d97312ab0cb98105a770924dc11e/absl_py-2.3.1-py3-none-any.whl + name: absl-py + version: 2.3.1 + sha256: eeecf07f0c2a93ace0772c92e596ace6d3d3996c042b2128459aaae2a76de11d + requires_python: '>=3.8' +- pypi: https://files.pythonhosted.org/packages/a5/45/30bb92d442636f570cb5651bc661f52b610e2eec3f891a5dc3a4c3667db0/aiofiles-24.1.0-py3-none-any.whl + name: aiofiles + version: 24.1.0 + sha256: b4ec55f4195e3eb5d7abd1bf7e061763e864dd4954231fb8539a0ef8bb8260e5 + requires_python: '>=3.8' +- pypi: https://files.pythonhosted.org/packages/e0/b1/0542e0cab6f49f151a2d7a42400f84f706fc0b64e85dc1f56708b2e9fd37/array_api_compat-1.12.0-py3-none-any.whl + name: array-api-compat + version: 1.12.0 + sha256: a0b4795b6944a9507fde54679f9350e2ad2b1e2acf4a2408a098cdc27f890a8b + requires_dist: + - cupy ; extra == 'cupy' + - dask>=2024.9.0 ; extra == 'dask' + - jax ; extra == 'jax' + - numpy>=1.22 ; extra == 'numpy' + - torch ; extra == 'pytorch' + - sparse>=0.15.1 ; extra == 'sparse' + - ndonnx ; extra == 'ndonnx' + - furo ; extra == 'docs' + - linkify-it-py ; extra == 'docs' + - myst-parser ; extra == 'docs' + - sphinx ; extra == 'docs' + - sphinx-copybutton ; extra == 'docs' + - sphinx-autobuild ; extra == 'docs' + - array-api-strict ; extra == 'dev' + - dask[array]>=2024.9.0 ; extra == 'dev' + - jax[cpu] ; extra == 'dev' + - numpy>=1.22 ; extra == 'dev' + - pytest ; extra == 'dev' + - torch ; extra == 'dev' + - sparse>=0.15.1 ; extra == 'dev' + - ndonnx ; extra == 'dev' + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/bc/da/693816d1b09287c95425846b9009daf70968e72aaadf65ccb6b79a2b1626/array_api_extra-0.8.0-py3-none-any.whl + name: array-api-extra + version: 0.8.0 + sha256: 6833bbd9aa6b5d6ead44a4dddceed54f9320510f94e30aef8524b198ae2870d8 + requires_dist: + - array-api-compat>=1.12.0,<2 + requires_python: '>=3.10' +- pypi: git+https://github.com/data-apis/array-api-typing#7dad73b066aabc6eb876ff593d77158b3e1a6837 + name: array-api-typing + version: 0.1.dev26+g7dad73b + requires_dist: + - typing-extensions>=4.14.1 + requires_python: '>=3.10' +- conda: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-h4bc722e_7.conda + sha256: 5ced96500d945fb286c9c838e54fa759aa04a7129c59800f0846b4335cee770d + md5: 62ee74e96c5ebb0af99386de58cf9553 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc-ng >=12 + license: bzip2-1.0.6 + license_family: BSD + purls: [] + size: 252783 + timestamp: 1720974456583 +- conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2025.8.3-hbd8a1cb_0.conda + sha256: 837b795a2bb39b75694ba910c13c15fa4998d4bb2a622c214a6a5174b2ae53d1 + md5: 74784ee3d225fc3dca89edb635b4e5cc + depends: + - __unix + license: ISC + purls: [] + size: 154402 + timestamp: 1754210968730 +- pypi: https://files.pythonhosted.org/packages/96/9e/16bc0b59ca73b47b82380c0ac6ef5084fb0f6e487d24eb102926456708eb/casadi-3.7.1-cp313-none-manylinux2014_x86_64.whl + name: casadi + version: 3.7.1 + sha256: 4373a813b306e2a5d083e2fc583daa1f65ad6e0c47688194e54e4ee589fd133a + requires_dist: + - numpy +- pypi: https://files.pythonhosted.org/packages/6f/3d/46bb04776c465cea2dd8aa2d4b61ab610b707f798f47838ef7e6105b025c/chex-0.1.90-py3-none-any.whl + name: chex + version: 0.1.90 + sha256: fce3de82588f72d4796e545e574a433aa29229cbdcf792555e41bead24b704ae + requires_dist: + - absl-py>=0.9.0 + - typing-extensions>=4.2.0 + - jax>=0.4.27 + - jaxlib>=0.4.27 + - numpy>=1.24.1 + - setuptools ; python_full_version >= '3.12' + - toolz>=0.9.0 + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/7e/e8/64c37fadfc2816a7701fa8a6ed8d87327c7d54eacfbfb6edab14a2f2be75/cloudpickle-3.1.1-py3-none-any.whl + name: cloudpickle + version: 3.1.1 + sha256: c8c5a44295039331ee9dad40ba100a9c7297b6f988e50e87ccdf3765a668350e + requires_python: '>=3.8' +- pypi: https://files.pythonhosted.org/packages/ea/2f/6ae1db51dc34db499bfe340e89f79a63bd115fc32513a7bacdf17d33cd86/coverage-7.10.3-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl + name: coverage + version: 7.10.3 + sha256: 913ceddb4289cbba3a310704a424e3fb7aac2bc0c3a23ea473193cb290cf17d4 + requires_dist: + - tomli ; python_full_version <= '3.11' and extra == 'toml' + requires_python: '>=3.9' +- pypi: ./ + name: crazyflow + version: 0.0.1 + sha256: 87578c541b696eca22cc7ab29c2bd31a0755ad8515f4d00974adafb23bffb49f + requires_dist: + - jax>=0.7.0 + - mujoco>=3.3.0 + - mujoco-mjx>=3.3.0 + - gymnasium[mujoco]>=1.2.0 + - imageio + - einops + - flax + - ml-collections + - casadi + - numpy + - drone-models @ git+https://github.com/utiasDSL/drone-models.git@08ffb18 + - pytest>=8.0.0 ; extra == 'test' + - pytest-cov ; extra == 'test' + - pytest-timeout ; extra == 'test' + - jax[cuda12] ; extra == 'gpu' + - fire ; extra == 'benchmark' + requires_python: '>=3.10' + editable: true +- pypi: git+https://github.com/utiasDSL/drone-models.git?rev=08ffb18#08ffb18148566ff26c8a2386d5069a8b2de27f5b + name: drone-models + version: 0.0.1 + requires_dist: + - numpy>=2.0.0 + - array-api-compat + - scipy @ git+https://github.com/scipy/scipy.git@0f2342f + - array-api-typing @ git+https://github.com/data-apis/array-api-typing + - array-api-extra + - pytest>=8.0.0 ; extra == 'test' + - pytest-cov ; extra == 'test' + - pytest-timeout ; extra == 'test' + - jax ; extra == 'test' + - torch ; extra == 'test' + - casadi ; extra == 'test' + - array-api-strict ; extra == 'test' +- pypi: https://files.pythonhosted.org/packages/87/62/9773de14fe6c45c23649e98b83231fffd7b9892b6cf863251dc2afa73643/einops-0.8.1-py3-none-any.whl + name: einops + version: 0.8.1 + sha256: 919387eb55330f5757c6bea9165c5ff5cfe63a642682ea788a6d472576d81737 + requires_python: '>=3.8' +- pypi: https://files.pythonhosted.org/packages/e7/98/87b5946356095738cb90a6df7b35ff69ac5750f6e783d5fbcc5cb3b6cbd7/etils-1.13.0-py3-none-any.whl + name: etils + version: 1.13.0 + sha256: d9cd4f40fbe77ad6613b7348a18132cc511237b6c076dbb89105c0b520a4c6bb + requires_dist: + - etils[array-types] ; extra == 'all' + - etils[eapp] ; extra == 'all' + - etils[ecolab] ; extra == 'all' + - etils[edc] ; extra == 'all' + - etils[enp] ; extra == 'all' + - etils[epath] ; extra == 'all' + - etils[epath-gcs] ; extra == 'all' + - etils[epath-s3] ; extra == 'all' + - etils[epy] ; extra == 'all' + - etils[etqdm] ; extra == 'all' + - etils[etree] ; extra == 'all' + - etils[etree-dm] ; extra == 'all' + - etils[etree-jax] ; extra == 'all' + - etils[etree-tf] ; extra == 'all' + - etils[enp] ; extra == 'array-types' + - pytest ; extra == 'dev' + - pytest-subtests ; extra == 'dev' + - pytest-xdist ; extra == 'dev' + - pyink ; extra == 'dev' + - pylint>=2.6.0 ; extra == 'dev' + - chex ; extra == 'dev' + - fiddle ; extra == 'dev' + - torch ; extra == 'dev' + - optree ; extra == 'dev' + - tensorflow-datasets ; extra == 'dev' + - pydantic ; extra == 'dev' + - sphinx-apitree[ext] ; extra == 'docs' + - etils[dev,all] ; extra == 'docs' + - absl-py ; extra == 'eapp' + - simple-parsing ; extra == 'eapp' + - etils[epy] ; extra == 'eapp' + - jupyter ; extra == 'ecolab' + - numpy ; extra == 'ecolab' + - mediapy ; extra == 'ecolab' + - packaging ; extra == 'ecolab' + - protobuf ; extra == 'ecolab' + - etils[enp] ; extra == 'ecolab' + - etils[epy] ; extra == 'ecolab' + - etils[etree] ; extra == 'ecolab' + - etils[epy] ; extra == 'edc' + - numpy ; extra == 'enp' + - einops ; extra == 'enp' + - etils[epy] ; extra == 'enp' + - fsspec ; extra == 'epath' + - importlib-resources ; extra == 'epath' + - typing-extensions ; extra == 'epath' + - zipp ; extra == 'epath' + - etils[epy] ; extra == 'epath' + - gcsfs ; extra == 'epath-gcs' + - etils[epath] ; extra == 'epath-gcs' + - s3fs ; extra == 'epath-s3' + - etils[epath] ; extra == 'epath-s3' + - typing-extensions ; extra == 'epy' + - absl-py ; extra == 'etqdm' + - tqdm ; extra == 'etqdm' + - etils[epy] ; extra == 'etqdm' + - etils[array-types] ; extra == 'etree' + - etils[epy] ; extra == 'etree' + - etils[enp] ; extra == 'etree' + - etils[etqdm] ; extra == 'etree' + - dm-tree ; extra == 'etree-dm' + - etils[etree] ; extra == 'etree-dm' + - jax[cpu] ; extra == 'etree-jax' + - etils[etree] ; extra == 'etree-jax' + - tensorflow ; extra == 'etree-tf' + - etils[etree] ; extra == 'etree-tf' + - etils[ecolab] ; extra == 'lazy-imports' + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/05/2c/ffc08c54c05cdce6fbed2aeebc46348dbe180c6d2c541c7af7ba0aa5f5f8/Farama_Notifications-0.0.4-py3-none-any.whl + name: farama-notifications + version: 0.0.4 + sha256: 14de931035a41961f7c056361dc7f980762a143d05791ef5794a751a2caf05ae +- pypi: https://files.pythonhosted.org/packages/6b/b6/82c7e601d6d3c3278c40b7bd35e17e82aa227f050aa9f66cb7b7fce29471/fire-0.7.0.tar.gz + name: fire + version: 0.7.0 + sha256: 961550f07936eaf65ad1dc8360f2b2bf8408fad46abbfa4d2a3794f8d2a95cdf + requires_dist: + - termcolor +- pypi: https://files.pythonhosted.org/packages/8a/0b/6b46d04a251f8a8b430bfd79b02a071bcd37b5dfa8321a7ad5db47dcd103/flax-0.11.1-py3-none-any.whl + name: flax + version: 0.11.1 + sha256: b29a46564193be437c88babb5e479b5c258fc7c54f005bc3051f05fc82e0ab83 + requires_dist: + - numpy>=1.23.2 ; python_full_version >= '3.11' + - numpy>=1.26.0 ; python_full_version >= '3.12' + - jax>=0.6.0 + - msgpack + - optax + - orbax-checkpoint + - tensorstore + - rich>=11.1 + - typing-extensions>=4.2 + - pyyaml>=5.4.1 + - treescope>=0.1.7 + - matplotlib ; extra == 'all' + - clu ; extra == 'testing' + - clu<=0.0.9 ; python_full_version < '3.10' and extra == 'testing' + - einops ; extra == 'testing' + - gymnasium[accept-rom-license,atari] ; extra == 'testing' + - jaxlib ; extra == 'testing' + - jaxtyping ; extra == 'testing' + - jraph>=0.0.6.dev0 ; extra == 'testing' + - ml-collections ; extra == 'testing' + - mypy ; extra == 'testing' + - opencv-python ; extra == 'testing' + - pytest ; extra == 'testing' + - pytest-cov ; extra == 'testing' + - pytest-custom-exit-code ; extra == 'testing' + - pytest-xdist ; extra == 'testing' + - pytype ; extra == 'testing' + - sentencepiece ; extra == 'testing' + - tensorflow-text>=2.11.0 ; sys_platform != 'darwin' and extra == 'testing' + - tensorflow-datasets ; extra == 'testing' + - tensorflow>=2.12.0 ; extra == 'testing' + - torch ; extra == 'testing' + - treescope>=0.1.1 ; python_full_version >= '3.10' and extra == 'testing' + - cloudpickle>=3.0.0 ; extra == 'testing' + - ale-py>=0.10.2 ; extra == 'testing' + - sphinx>=4.3.0 ; extra == 'docs' + - sphinx-book-theme ; extra == 'docs' + - pygments>=2.6.1 ; extra == 'docs' + - ipykernel ; extra == 'docs' + - myst-nb ; extra == 'docs' + - nbstripout ; extra == 'docs' + - recommonmark ; extra == 'docs' + - ipython-genutils ; extra == 'docs' + - sphinx-design ; extra == 'docs' + - jupytext==1.13.8 ; extra == 'docs' + - dm-haiku>=0.0.14 ; extra == 'docs' + - docutils==0.16 ; extra == 'docs' + - matplotlib ; extra == 'docs' + - scikit-learn ; extra == 'docs' + - ml-collections ; extra == 'docs' + - einops ; extra == 'docs' + - kagglehub>=0.3.3 ; extra == 'docs' + - ipywidgets>=8.1.5 ; extra == 'docs' + - nanobind>=2.5.0 ; extra == 'dev' + - pre-commit>=3.8.0 ; extra == 'dev' + - scikit-build-core[pyproject]>=0.11.0 ; extra == 'dev' + requires_python: '>=3.11' +- pypi: https://files.pythonhosted.org/packages/2f/e0/014d5d9d7a4564cf1c40b5039bc882db69fd881111e03ab3657ac0b218e2/fsspec-2025.7.0-py3-none-any.whl + name: fsspec + version: 2025.7.0 + sha256: 8b012e39f63c7d5f10474de957f3ab793b47b45ae7d39f2fb735f8bbe25c0e21 + requires_dist: + - adlfs ; extra == 'abfs' + - adlfs ; extra == 'adl' + - pyarrow>=1 ; extra == 'arrow' + - dask ; extra == 'dask' + - distributed ; extra == 'dask' + - pre-commit ; extra == 'dev' + - ruff>=0.5 ; extra == 'dev' + - numpydoc ; extra == 'doc' + - sphinx ; extra == 'doc' + - sphinx-design ; extra == 'doc' + - sphinx-rtd-theme ; extra == 'doc' + - yarl ; extra == 'doc' + - dropbox ; extra == 'dropbox' + - dropboxdrivefs ; extra == 'dropbox' + - requests ; extra == 'dropbox' + - adlfs ; extra == 'full' + - aiohttp!=4.0.0a0,!=4.0.0a1 ; extra == 'full' + - dask ; extra == 'full' + - distributed ; extra == 'full' + - dropbox ; extra == 'full' + - dropboxdrivefs ; extra == 'full' + - fusepy ; extra == 'full' + - gcsfs ; extra == 'full' + - libarchive-c ; extra == 'full' + - ocifs ; extra == 'full' + - panel ; extra == 'full' + - paramiko ; extra == 'full' + - pyarrow>=1 ; extra == 'full' + - pygit2 ; extra == 'full' + - requests ; extra == 'full' + - s3fs ; extra == 'full' + - smbprotocol ; extra == 'full' + - tqdm ; extra == 'full' + - fusepy ; extra == 'fuse' + - gcsfs ; extra == 'gcs' + - pygit2 ; extra == 'git' + - requests ; extra == 'github' + - gcsfs ; extra == 'gs' + - panel ; extra == 'gui' + - pyarrow>=1 ; extra == 'hdfs' + - aiohttp!=4.0.0a0,!=4.0.0a1 ; extra == 'http' + - libarchive-c ; extra == 'libarchive' + - ocifs ; extra == 'oci' + - s3fs ; extra == 's3' + - paramiko ; extra == 'sftp' + - smbprotocol ; extra == 'smb' + - paramiko ; extra == 'ssh' + - aiohttp!=4.0.0a0,!=4.0.0a1 ; extra == 'test' + - numpy ; extra == 'test' + - pytest ; extra == 'test' + - pytest-asyncio!=0.22.0 ; extra == 'test' + - pytest-benchmark ; extra == 'test' + - pytest-cov ; extra == 'test' + - pytest-mock ; extra == 'test' + - pytest-recording ; extra == 'test' + - pytest-rerunfailures ; extra == 'test' + - requests ; extra == 'test' + - aiobotocore>=2.5.4,<3.0.0 ; extra == 'test-downstream' + - dask[dataframe,test] ; extra == 'test-downstream' + - moto[server]>4,<5 ; extra == 'test-downstream' + - pytest-timeout ; extra == 'test-downstream' + - xarray ; extra == 'test-downstream' + - adlfs ; extra == 'test-full' + - aiohttp!=4.0.0a0,!=4.0.0a1 ; extra == 'test-full' + - cloudpickle ; extra == 'test-full' + - dask ; extra == 'test-full' + - distributed ; extra == 'test-full' + - dropbox ; extra == 'test-full' + - dropboxdrivefs ; extra == 'test-full' + - fastparquet ; extra == 'test-full' + - fusepy ; extra == 'test-full' + - gcsfs ; extra == 'test-full' + - jinja2 ; extra == 'test-full' + - kerchunk ; extra == 'test-full' + - libarchive-c ; extra == 'test-full' + - lz4 ; extra == 'test-full' + - notebook ; extra == 'test-full' + - numpy ; extra == 'test-full' + - ocifs ; extra == 'test-full' + - pandas ; extra == 'test-full' + - panel ; extra == 'test-full' + - paramiko ; extra == 'test-full' + - pyarrow ; extra == 'test-full' + - pyarrow>=1 ; extra == 'test-full' + - pyftpdlib ; extra == 'test-full' + - pygit2 ; extra == 'test-full' + - pytest ; extra == 'test-full' + - pytest-asyncio!=0.22.0 ; extra == 'test-full' + - pytest-benchmark ; extra == 'test-full' + - pytest-cov ; extra == 'test-full' + - pytest-mock ; extra == 'test-full' + - pytest-recording ; extra == 'test-full' + - pytest-rerunfailures ; extra == 'test-full' + - python-snappy ; extra == 'test-full' + - requests ; extra == 'test-full' + - smbprotocol ; extra == 'test-full' + - tqdm ; extra == 'test-full' + - urllib3 ; extra == 'test-full' + - zarr ; extra == 'test-full' + - zstandard ; python_full_version < '3.14' and extra == 'test-full' + - tqdm ; extra == 'tqdm' + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/7f/ba/de3630757c7d7fc2086aaf3994926d6b869d31586e4d0c14f1666af31b93/glfw-2.9.0-py2.py27.py3.py30.py31.py32.py33.py34.py35.py36.py37.py38.p39.p310.p311.p312.p313-none-manylinux_2_28_x86_64.whl + name: glfw + version: 2.9.0 + sha256: 4e11271e49eb9bc53431ade022e284d5a59abeace81fe3b178db1bf3ccc0c449 + requires_dist: + - glfw-preview ; extra == 'preview' +- pypi: https://files.pythonhosted.org/packages/a0/e2/a111dbb8625af467ea4760a1373d6ef27aac3137931219902406ccc05423/gymnasium-1.2.0-py3-none-any.whl + name: gymnasium + version: 1.2.0 + sha256: fc4a1e4121a9464c29b4d7dc6ade3fbeaa36dea448682f5f71a6d2c17489ea76 + requires_dist: + - numpy>=1.21.0 + - cloudpickle>=1.2.0 + - typing-extensions>=4.3.0 + - farama-notifications>=0.0.1 + - ale-py>=0.9 ; extra == 'atari' + - box2d-py==2.3.5 ; extra == 'box2d' + - pygame>=2.1.3 ; extra == 'box2d' + - swig==4.* ; extra == 'box2d' + - pygame>=2.1.3 ; extra == 'classic-control' + - pygame>=2.1.3 ; extra == 'classic-control' + - mujoco>=2.1.5 ; extra == 'mujoco' + - imageio>=2.14.1 ; extra == 'mujoco' + - packaging>=23.0 ; extra == 'mujoco' + - pygame>=2.1.3 ; extra == 'toy-text' + - pygame>=2.1.3 ; extra == 'toy-text' + - jax>=0.4.16 ; extra == 'jax' + - jaxlib>=0.4.16 ; extra == 'jax' + - flax>=0.5.0 ; extra == 'jax' + - array-api-compat>=1.11.0 ; extra == 'jax' + - numpy>=2.1 ; extra == 'jax' + - torch>=1.13.0 ; extra == 'torch' + - array-api-compat>=1.11.0 ; extra == 'torch' + - numpy>=2.1 ; extra == 'torch' + - array-api-compat>=1.11.0 ; extra == 'array-api' + - numpy>=2.1 ; extra == 'array-api' + - moviepy>=1.0.0 ; extra == 'other' + - matplotlib>=3.0 ; extra == 'other' + - opencv-python>=3.0 ; extra == 'other' + - seaborn>=0.13 ; extra == 'other' + - ale-py>=0.9 ; extra == 'all' + - box2d-py==2.3.5 ; extra == 'all' + - pygame>=2.1.3 ; extra == 'all' + - swig==4.* ; extra == 'all' + - pygame>=2.1.3 ; extra == 'all' + - mujoco>=2.1.5 ; extra == 'all' + - imageio>=2.14.1 ; extra == 'all' + - packaging>=23.0 ; extra == 'all' + - pygame>=2.1.3 ; extra == 'all' + - jax>=0.4.16 ; extra == 'all' + - jaxlib>=0.4.16 ; extra == 'all' + - flax>=0.5.0 ; extra == 'all' + - array-api-compat>=1.11.0 ; extra == 'all' + - numpy>=2.1 ; extra == 'all' + - torch>=1.13.0 ; extra == 'all' + - array-api-compat>=1.11.0 ; extra == 'all' + - numpy>=2.1 ; extra == 'all' + - array-api-compat>=1.11.0 ; extra == 'all' + - numpy>=2.1 ; extra == 'all' + - opencv-python>=3.0 ; extra == 'all' + - matplotlib>=3.0 ; extra == 'all' + - moviepy>=1.0.0 ; extra == 'all' + - pytest>=7.1.3 ; extra == 'testing' + - scipy>=1.7.3 ; extra == 'testing' + - dill>=0.3.7 ; extra == 'testing' + - array-api-extra>=0.7.0 ; extra == 'testing' + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/a0/1e/62a2ec3104394a2975a2629eec89276ede9dbe717092f6966fcf963e1bf0/humanize-4.12.3-py3-none-any.whl + name: humanize + version: 4.12.3 + sha256: 2cbf6370af06568fa6d2da77c86edb7886f3160ecd19ee1ffef07979efc597f6 + requires_dist: + - freezegun ; extra == 'tests' + - pytest ; extra == 'tests' + - pytest-cov ; extra == 'tests' + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/cb/bd/b394387b598ed84d8d0fa90611a90bee0adc2021820ad5729f7ced74a8e2/imageio-2.37.0-py3-none-any.whl + name: imageio + version: 2.37.0 + sha256: 11efa15b87bc7871b61590326b2d635439acc321cf7f8ce996f812543ce10eed + requires_dist: + - numpy + - pillow>=8.3.2 + - astropy ; extra == 'all-plugins' + - av ; extra == 'all-plugins' + - imageio-ffmpeg ; extra == 'all-plugins' + - numpy>2 ; extra == 'all-plugins' + - pillow-heif ; extra == 'all-plugins' + - psutil ; extra == 'all-plugins' + - rawpy ; extra == 'all-plugins' + - tifffile ; extra == 'all-plugins' + - av ; extra == 'all-plugins-pypy' + - imageio-ffmpeg ; extra == 'all-plugins-pypy' + - pillow-heif ; extra == 'all-plugins-pypy' + - psutil ; extra == 'all-plugins-pypy' + - tifffile ; extra == 'all-plugins-pypy' + - wheel ; extra == 'build' + - pytest ; extra == 'dev' + - pytest-cov ; extra == 'dev' + - fsspec[github] ; extra == 'dev' + - black ; extra == 'dev' + - flake8 ; extra == 'dev' + - sphinx<6 ; extra == 'docs' + - numpydoc ; extra == 'docs' + - pydata-sphinx-theme ; extra == 'docs' + - imageio-ffmpeg ; extra == 'ffmpeg' + - psutil ; extra == 'ffmpeg' + - astropy ; extra == 'fits' + - astropy ; extra == 'full' + - av ; extra == 'full' + - black ; extra == 'full' + - flake8 ; extra == 'full' + - fsspec[github] ; extra == 'full' + - gdal ; extra == 'full' + - imageio-ffmpeg ; extra == 'full' + - itk ; extra == 'full' + - numpy>2 ; extra == 'full' + - numpydoc ; extra == 'full' + - pillow-heif ; extra == 'full' + - psutil ; extra == 'full' + - pydata-sphinx-theme ; extra == 'full' + - pytest ; extra == 'full' + - pytest-cov ; extra == 'full' + - rawpy ; extra == 'full' + - sphinx<6 ; extra == 'full' + - tifffile ; extra == 'full' + - wheel ; extra == 'full' + - gdal ; extra == 'gdal' + - itk ; extra == 'itk' + - black ; extra == 'linting' + - flake8 ; extra == 'linting' + - pillow-heif ; extra == 'pillow-heif' + - av ; extra == 'pyav' + - rawpy ; extra == 'rawpy' + - numpy>2 ; extra == 'rawpy' + - pytest ; extra == 'test' + - pytest-cov ; extra == 'test' + - fsspec[github] ; extra == 'test' + - tifffile ; extra == 'tifffile' + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/a4/ed/1f1afb2e9e7f38a545d628f864d562a5ae64fe6f7a10e28ffb9b185b4e89/importlib_resources-6.5.2-py3-none-any.whl + name: importlib-resources + version: 6.5.2 + sha256: 789cfdc3ed28c78b67a06acb8126751ced69a3d5f79c095a98298cd8a760ccec + requires_dist: + - zipp>=3.1.0 ; python_full_version < '3.10' + - pytest>=6,!=8.1.* ; extra == 'test' + - zipp>=3.17 ; extra == 'test' + - jaraco-test>=5.4 ; extra == 'test' + - sphinx>=3.5 ; extra == 'doc' + - jaraco-packaging>=9.3 ; extra == 'doc' + - rst-linker>=1.9 ; extra == 'doc' + - furo ; extra == 'doc' + - sphinx-lint ; extra == 'doc' + - jaraco-tidelift>=1.4 ; extra == 'doc' + - pytest-checkdocs>=2.4 ; extra == 'check' + - pytest-ruff>=0.2.1 ; sys_platform != 'cygwin' and extra == 'check' + - pytest-cov ; extra == 'cover' + - pytest-enabler>=2.2 ; extra == 'enabler' + - pytest-mypy ; extra == 'type' + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/2c/e1/e6716421ea10d38022b952c159d5161ca1193197fb744506875fbb87ea7b/iniconfig-2.1.0-py3-none-any.whl + name: iniconfig + version: 2.1.0 + sha256: 9deba5723312380e77435581c6bf4935c94cbfab9b1ed33ef8d238ea168eb760 + requires_python: '>=3.8' +- pypi: https://files.pythonhosted.org/packages/ad/de/3092df5073cd9c07c01b10612fc541538b74b02184fac90e3beada20f758/jax-0.7.0-py3-none-any.whl + name: jax + version: 0.7.0 + sha256: 62833036cbaf4641d66ae94c61c0446890a91b2c0d153946583a0ebe04877a76 + requires_dist: + - jaxlib<=0.7.0,>=0.7.0 + - ml-dtypes>=0.5.0 + - numpy>=1.26 + - opt-einsum + - scipy>=1.12 + - jaxlib==0.7.0 ; extra == 'minimum-jaxlib' + - jaxlib==0.6.2 ; extra == 'ci' + - jaxlib<=0.7.0,>=0.7.0 ; extra == 'tpu' + - libtpu==0.0.19.* ; extra == 'tpu' + - requests ; extra == 'tpu' + - jaxlib<=0.7.0,>=0.7.0 ; extra == 'cuda' + - jax-cuda12-plugin[with-cuda]<=0.7.0,>=0.7.0 ; extra == 'cuda' + - jaxlib<=0.7.0,>=0.7.0 ; extra == 'cuda12' + - jax-cuda12-plugin[with-cuda]<=0.7.0,>=0.7.0 ; extra == 'cuda12' + - jaxlib<=0.7.0,>=0.7.0 ; extra == 'cuda13' + - jax-cuda13-plugin[with-cuda]<=0.7.0,>=0.7.0 ; extra == 'cuda13' + - jaxlib<=0.7.0,>=0.7.0 ; extra == 'cuda12-local' + - jax-cuda12-plugin<=0.7.0,>=0.7.0 ; extra == 'cuda12-local' + - jaxlib<=0.7.0,>=0.7.0 ; extra == 'cuda13-local' + - jax-cuda13-plugin<=0.7.0,>=0.7.0 ; extra == 'cuda13-local' + - jaxlib<=0.7.0,>=0.7.0 ; extra == 'rocm' + - jax-rocm60-plugin<=0.7.0,>=0.7.0 ; extra == 'rocm' + - kubernetes ; extra == 'k8s' + - xprof ; extra == 'xprof' + requires_python: '>=3.11' +- pypi: https://files.pythonhosted.org/packages/49/ef/1fe3c10c27199fbaf593ee7c53226e4eae057d505207707cd815a8ee0764/jax_cuda12_pjrt-0.7.0-py3-none-manylinux2014_x86_64.whl + name: jax-cuda12-pjrt + version: 0.7.0 + sha256: 742cc260d697771cb883084398748a007d233286aa3fe5fc152a74c073d59a24 +- pypi: https://files.pythonhosted.org/packages/0d/c2/0f5698d4ececeff3cf0e9802b1f58f137adea83562cfa735591436978a49/jax_cuda12_plugin-0.7.0-cp313-cp313-manylinux2014_x86_64.whl + name: jax-cuda12-plugin + version: 0.7.0 + sha256: bfde0db714b2ad5fe9e86c1f6d2e60c7d4d980d015029858208828abcd8274cf + requires_dist: + - jax-cuda12-pjrt==0.7.0 + - nvidia-cublas-cu12>=12.1.3.1 ; extra == 'with-cuda' + - nvidia-cuda-cupti-cu12>=12.1.105 ; extra == 'with-cuda' + - nvidia-cuda-nvcc-cu12>=12.6.85 ; extra == 'with-cuda' + - nvidia-cuda-runtime-cu12>=12.1.105 ; extra == 'with-cuda' + - nvidia-cudnn-cu12>=9.8,<10.0 ; extra == 'with-cuda' + - nvidia-cufft-cu12>=11.0.2.54 ; extra == 'with-cuda' + - nvidia-cusolver-cu12>=11.4.5.107 ; extra == 'with-cuda' + - nvidia-cusparse-cu12>=12.1.0.106 ; extra == 'with-cuda' + - nvidia-nccl-cu12>=2.18.1 ; extra == 'with-cuda' + - nvidia-nvjitlink-cu12>=12.1.105 ; extra == 'with-cuda' + - nvidia-cuda-nvrtc-cu12>=12.1.55 ; extra == 'with-cuda' + - nvidia-nvshmem-cu12>=3.2.5 ; extra == 'with-cuda' + requires_python: '>=3.11' +- pypi: https://files.pythonhosted.org/packages/c7/83/7ba260095e98a5004af4fdb4315010c445441473cac41afdb973bf212deb/jaxlib-0.7.0-cp313-cp313-manylinux2014_x86_64.whl + name: jaxlib + version: 0.7.0 + sha256: df31664a53c13a9263bca0e8c39e0380a0ccae0b1c125376df63a480d9cb2087 + requires_dist: + - scipy>=1.12 + - numpy>=1.26 + - ml-dtypes>=0.5.0 + requires_python: '>=3.11' +- conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.44-h1423503_1.conda + sha256: 1a620f27d79217c1295049ba214c2f80372062fd251b569e9873d4a953d27554 + md5: 0be7c6e070c19105f966d3758448d018 + depends: + - __glibc >=2.17,<3.0.a0 + constrains: + - binutils_impl_linux-64 2.44 + license: GPL-3.0-only + license_family: GPL + purls: [] + size: 676044 + timestamp: 1752032747103 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.7.1-hecca717_0.conda + sha256: da2080da8f0288b95dd86765c801c6e166c4619b910b11f9a8446fb852438dc2 + md5: 4211416ecba1866fab0c6470986c22d6 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + constrains: + - expat 2.7.1.* + license: MIT + license_family: MIT + purls: [] + size: 74811 + timestamp: 1752719572741 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libffi-3.4.6-h2dba641_1.conda + sha256: 764432d32db45466e87f10621db5b74363a9f847d2b8b1f9743746cd160f06ab + md5: ede4673863426c0883c0063d853bbd85 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + license: MIT + license_family: MIT + purls: [] + size: 57433 + timestamp: 1743434498161 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-15.1.0-h767d61c_4.conda + sha256: 144e35c1c2840f2dc202f6915fc41879c19eddbb8fa524e3ca4aa0d14018b26f + md5: f406dcbb2e7bef90d793e50e79a2882b + depends: + - __glibc >=2.17,<3.0.a0 + - _openmp_mutex >=4.5 + constrains: + - libgcc-ng ==15.1.0=*_4 + - libgomp 15.1.0 h767d61c_4 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 824153 + timestamp: 1753903866511 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-15.1.0-h69a702a_4.conda + sha256: 76ceac93ed98f208363d6e9c75011b0ff7b97b20f003f06461a619557e726637 + md5: 28771437ffcd9f3417c66012dc49a3be + depends: + - libgcc 15.1.0 h767d61c_4 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 29249 + timestamp: 1753903872571 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-15.1.0-h767d61c_4.conda + sha256: e0487a8fec78802ac04da0ac1139c3510992bc58a58cde66619dde3b363c2933 + md5: 3baf8976c96134738bba224e9ef6b1e5 + depends: + - __glibc >=2.17,<3.0.a0 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 447289 + timestamp: 1753903801049 +- conda: https://conda.anaconda.org/conda-forge/linux-64/liblzma-5.8.1-hb9d3cd8_2.conda + sha256: f2591c0069447bbe28d4d696b7fcb0c5bd0b4ac582769b89addbcf26fb3430d8 + md5: 1a580f7796c7bf6393fddb8bbbde58dc + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + constrains: + - xz 5.8.1.* + license: 0BSD + purls: [] + size: 112894 + timestamp: 1749230047870 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libmpdec-4.0.0-hb9d3cd8_0.conda + sha256: 3aa92d4074d4063f2a162cd8ecb45dccac93e543e565c01a787e16a43501f7ee + md5: c7e925f37e3b40d893459e625f6a53f1 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + license: BSD-2-Clause + license_family: BSD + purls: [] + size: 91183 + timestamp: 1748393666725 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.50.4-h0c1763c_0.conda + sha256: 6d9c32fc369af5a84875725f7ddfbfc2ace795c28f246dc70055a79f9b2003da + md5: 0b367fad34931cb79e0d6b7e5c06bb1c + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libzlib >=1.3.1,<2.0a0 + license: blessing + purls: [] + size: 932581 + timestamp: 1753948484112 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.38.1-h0b41bf4_0.conda + sha256: 787eb542f055a2b3de553614b25f09eefb0a0931b0c87dbcce6efdfd92f04f18 + md5: 40b61aab5c7ba9ff276c41cfffe6b80b + depends: + - libgcc-ng >=12 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 33601 + timestamp: 1680112270483 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.1-hb9d3cd8_2.conda + sha256: d4bfe88d7cb447768e31650f06257995601f89076080e76df55e3112d4e47dc4 + md5: edb0dca6bc32e4f4789199455a1dbeb8 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + constrains: + - zlib 1.3.1 *_2 + license: Zlib + license_family: Other + purls: [] + size: 60963 + timestamp: 1727963148474 +- pypi: https://files.pythonhosted.org/packages/94/54/e7d793b573f298e1c9013b8c4dade17d481164aa517d1d7148619c2cedbf/markdown_it_py-4.0.0-py3-none-any.whl + name: markdown-it-py + version: 4.0.0 + sha256: 87327c59b172c5011896038353a81343b6754500a08cd7a4973bb48c6d578147 + requires_dist: + - mdurl~=0.1 + - psutil ; extra == 'benchmarking' + - pytest ; extra == 'benchmarking' + - pytest-benchmark ; extra == 'benchmarking' + - commonmark~=0.9 ; extra == 'compare' + - markdown~=3.4 ; extra == 'compare' + - mistletoe~=1.0 ; extra == 'compare' + - mistune~=3.0 ; extra == 'compare' + - panflute~=2.3 ; extra == 'compare' + - markdown-it-pyrs ; extra == 'compare' + - linkify-it-py>=1,<3 ; extra == 'linkify' + - mdit-py-plugins>=0.5.0 ; extra == 'plugins' + - gprof2dot ; extra == 'profiling' + - mdit-py-plugins>=0.5.0 ; extra == 'rtd' + - myst-parser ; extra == 'rtd' + - pyyaml ; extra == 'rtd' + - sphinx ; extra == 'rtd' + - sphinx-copybutton ; extra == 'rtd' + - sphinx-design ; extra == 'rtd' + - sphinx-book-theme~=1.0 ; extra == 'rtd' + - jupyter-sphinx ; extra == 'rtd' + - ipykernel ; extra == 'rtd' + - coverage ; extra == 'testing' + - pytest ; extra == 'testing' + - pytest-cov ; extra == 'testing' + - pytest-regressions ; extra == 'testing' + - requests ; extra == 'testing' + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl + name: mdurl + version: 0.1.2 + sha256: 84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8 + requires_python: '>=3.7' +- pypi: https://files.pythonhosted.org/packages/ab/8a/18d4ff2c7bd83f30d6924bd4ad97abf418488c3f908dea228d6f0961ad68/ml_collections-1.1.0-py3-none-any.whl + name: ml-collections + version: 1.1.0 + sha256: 23b6fa4772aac1ae745a96044b925a5746145a70734f087eaca6626e92c05cbc + requires_dist: + - absl-py + - pyyaml + - pytest ; extra == 'dev' + - pytest-xdist ; extra == 'dev' + - pylint>=2.6.0 ; extra == 'dev' + - pyink ; extra == 'dev' + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/14/f3/091ba84e5395d7fe5b30c081a44dec881cd84b408db1763ee50768b2ab63/ml_dtypes-0.5.3-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl + name: ml-dtypes + version: 0.5.3 + sha256: 6936283b56d74fbec431ca57ce58a90a908fdbd14d4e2d22eea6d72bb208a7b7 + requires_dist: + - numpy>=1.21 + - numpy>=1.21.2 ; python_full_version >= '3.10' + - numpy>=1.23.3 ; python_full_version >= '3.11' + - numpy>=1.26.0 ; python_full_version >= '3.12' + - numpy>=2.1.0 ; python_full_version >= '3.13' + - absl-py ; extra == 'dev' + - pytest ; extra == 'dev' + - pytest-xdist ; extra == 'dev' + - pylint>=2.6.0 ; extra == 'dev' + - pyink ; extra == 'dev' + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/20/22/2ebae7ae43cd8f2debc35c631172ddf14e2a87ffcc04cf43ff9df9fff0d3/msgpack-1.1.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + name: msgpack + version: 1.1.1 + sha256: 9d592d06e3cc2f537ceeeb23d38799c6ad83255289bb84c2e5792e5a8dea268a + requires_python: '>=3.8' +- pypi: https://files.pythonhosted.org/packages/b5/8c/54e5dd1df6fced73ea0b183ccf05939757bfc6fab9d720e1e051963ae154/mujoco-3.3.5-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl + name: mujoco + version: 3.3.5 + sha256: 70ef62e02169e74d7dd38e8eacc5275d9d1f53eb0713fd410fe1d71410ecfd93 + requires_dist: + - absl-py + - etils[epath] + - glfw + - numpy + - pyopengl + - usd-core ; extra == 'usd' + - pillow ; extra == 'usd' + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/59/b1/965d28e5ece3e59772b79dc43144b70f73b188f8f49b4997c91a646d85a4/mujoco_mjx-3.3.5-py3-none-any.whl + name: mujoco-mjx + version: 3.3.5 + sha256: 207e7144f26dd5a9c4657e5aa055f5e103d074bf2aaac9c8aba26e50426d2522 + requires_dist: + - absl-py + - etils[epath] + - jax + - jaxlib + - mujoco>=3.3.5.dev0 + - scipy + - trimesh + - warp-lang==1.8.1 ; extra == 'warp' + requires_python: '>=3.9' +- conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.5-h2d0b736_3.conda + sha256: 3fde293232fa3fca98635e1167de6b7c7fda83caf24b9d6c91ec9eefb4f4d586 + md5: 47e340acb35de30501a76c7c799c41d7 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + license: X11 AND BSD-3-Clause + purls: [] + size: 891641 + timestamp: 1738195959188 +- pypi: https://files.pythonhosted.org/packages/a0/c4/c2971a3ba4c6103a3d10c4b0f24f461ddc027f0f09763220cf35ca1401b3/nest_asyncio-1.6.0-py3-none-any.whl + name: nest-asyncio + version: 1.6.0 + sha256: 87af6efd6b5e897c81050477ef65c62e2b2f35d51703cae01aff2905b1852e1c + requires_python: '>=3.5' +- pypi: https://files.pythonhosted.org/packages/1d/0f/571b2c7a3833ae419fe69ff7b479a78d313581785203cc70a8db90121b9a/numpy-2.3.2-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl + name: numpy + version: 2.3.2 + sha256: 938065908d1d869c7d75d8ec45f735a034771c6ea07088867f713d1cd3bbbe4f + requires_python: '>=3.11' +- pypi: https://files.pythonhosted.org/packages/77/3c/aa88abe01f3be3d1f8f787d1d33dc83e76fec05945f9a28fbb41cfb99cd5/nvidia_cublas_cu12-12.9.1.4-py3-none-manylinux_2_27_x86_64.whl + name: nvidia-cublas-cu12 + version: 12.9.1.4 + sha256: 453611eb21a7c1f2c2156ed9f3a45b691deda0440ec550860290dc901af5b4c2 + requires_python: '>=3' +- pypi: https://files.pythonhosted.org/packages/c1/2e/b84e32197e33f39907b455b83395a017e697c07a449a2b15fd07fc1c9981/nvidia_cuda_cupti_cu12-12.9.79-py3-none-manylinux_2_25_x86_64.whl + name: nvidia-cuda-cupti-cu12 + version: 12.9.79 + sha256: 096bcf334f13e1984ba36685ad4c1d6347db214de03dbb6eebb237b41d9d934f + requires_python: '>=3' +- pypi: https://files.pythonhosted.org/packages/25/48/b54a06168a2190572a312bfe4ce443687773eb61367ced31e064953dd2f7/nvidia_cuda_nvcc_cu12-12.9.86-py3-none-manylinux2010_x86_64.manylinux_2_12_x86_64.whl + name: nvidia-cuda-nvcc-cu12 + version: 12.9.86 + sha256: 5d6a0d32fdc7ea39917c20065614ae93add6f577d840233237ff08e9a38f58f0 + requires_python: '>=3' +- pypi: https://files.pythonhosted.org/packages/b8/85/e4af82cc9202023862090bfca4ea827d533329e925c758f0cde964cb54b7/nvidia_cuda_nvrtc_cu12-12.9.86-py3-none-manylinux2010_x86_64.manylinux_2_12_x86_64.whl + name: nvidia-cuda-nvrtc-cu12 + version: 12.9.86 + sha256: 210cf05005a447e29214e9ce50851e83fc5f4358df8b453155d5e1918094dcb4 + requires_python: '>=3' +- pypi: https://files.pythonhosted.org/packages/bc/46/a92db19b8309581092a3add7e6fceb4c301a3fd233969856a8cbf042cd3c/nvidia_cuda_runtime_cu12-12.9.79-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl + name: nvidia-cuda-runtime-cu12 + version: 12.9.79 + sha256: 25bba2dfb01d48a9b59ca474a1ac43c6ebf7011f1b0b8cc44f54eb6ac48a96c3 + requires_python: '>=3' +- pypi: https://files.pythonhosted.org/packages/de/14/9288024887ba320eb4e51d01cf37aab11d38f774016bcc0dedac0948d0bc/nvidia_cudnn_cu12-9.12.0.46-py3-none-manylinux_2_27_x86_64.whl + name: nvidia-cudnn-cu12 + version: 9.12.0.46 + sha256: 73471a185656232b383693294431882edb14584ee47f41c0abd81556b92ef2ac + requires_dist: + - nvidia-cublas-cu12 + requires_python: '>=3' +- pypi: https://files.pythonhosted.org/packages/95/f4/61e6996dd20481ee834f57a8e9dca28b1869366a135e0d42e2aa8493bdd4/nvidia_cufft_cu12-11.4.1.4-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl + name: nvidia-cufft-cu12 + version: 11.4.1.4 + sha256: c67884f2a7d276b4b80eb56a79322a95df592ae5e765cf1243693365ccab4e28 + requires_dist: + - nvidia-nvjitlink-cu12 + requires_python: '>=3' +- pypi: https://files.pythonhosted.org/packages/33/40/79b0c64d44d6c166c0964ec1d803d067f4a145cca23e23925fd351d0e642/nvidia_cusolver_cu12-11.7.5.82-py3-none-manylinux_2_27_x86_64.whl + name: nvidia-cusolver-cu12 + version: 11.7.5.82 + sha256: 15da72d1340d29b5b3cf3fd100e3cd53421dde36002eda6ed93811af63c40d88 + requires_dist: + - nvidia-cublas-cu12 + - nvidia-nvjitlink-cu12 + - nvidia-cusparse-cu12 + requires_python: '>=3' +- pypi: https://files.pythonhosted.org/packages/12/46/b0fd4b04f86577921feb97d8e2cf028afe04f614d17fb5013de9282c9216/nvidia_cusparse_cu12-12.5.10.65-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl + name: nvidia-cusparse-cu12 + version: 12.5.10.65 + sha256: 73060ce019ac064a057267c585bf1fd5a353734151f87472ff02b2c5c9984e78 + requires_dist: + - nvidia-nvjitlink-cu12 + requires_python: '>=3' +- pypi: https://files.pythonhosted.org/packages/c4/cb/2cf5b8e6a669c90ac6410c3a9d86881308492765b6744de5d0ce75089999/nvidia_nccl_cu12-2.27.7-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl + name: nvidia-nccl-cu12 + version: 2.27.7 + sha256: de5ba5562f08029a19cb1cd659404b18411ed0d6c90ac5f52f30bf99ad5809aa + requires_python: '>=3' +- pypi: https://files.pythonhosted.org/packages/46/0c/c75bbfb967457a0b7670b8ad267bfc4fffdf341c074e0a80db06c24ccfd4/nvidia_nvjitlink_cu12-12.9.86-py3-none-manylinux2010_x86_64.manylinux_2_12_x86_64.whl + name: nvidia-nvjitlink-cu12 + version: 12.9.86 + sha256: e3f1171dbdc83c5932a45f0f4c99180a70de9bd2718c1ab77d14104f6d7147f9 + requires_python: '>=3' +- pypi: https://files.pythonhosted.org/packages/3b/6c/99acb2f9eb85c29fc6f3a7ac4dccfd992e22666dd08a642b303311326a97/nvidia_nvshmem_cu12-3.3.20-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl + name: nvidia-nvshmem-cu12 + version: 3.3.20 + sha256: d00f26d3f9b2e3c3065be895e3059d6479ea5c638a3f38c9fec49b1b9dd7c1e5 + requires_python: '>=3' +- conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.5.2-h26f9b46_0.conda + sha256: c9f54d4e8212f313be7b02eb962d0cb13a8dae015683a403d3accd4add3e520e + md5: ffffb341206dd0dab0c36053c048d621 + depends: + - __glibc >=2.17,<3.0.a0 + - ca-certificates + - libgcc >=14 + license: Apache-2.0 + license_family: Apache + purls: [] + size: 3128847 + timestamp: 1754465526100 +- pypi: https://files.pythonhosted.org/packages/23/cd/066e86230ae37ed0be70aae89aabf03ca8d9f39c8aea0dec8029455b5540/opt_einsum-3.4.0-py3-none-any.whl + name: opt-einsum + version: 3.4.0 + sha256: 69bb92469f86a1565195ece4ac0323943e83477171b91d24c35afe028a90d7cd + requires_python: '>=3.8' +- pypi: https://files.pythonhosted.org/packages/b9/33/f86091c706db1a5459f501830241afff2ecab3532725c188ea57be6e54de/optax-0.2.5-py3-none-any.whl + name: optax + version: 0.2.5 + sha256: 966deae936207f268ac8f564d8ed228d645ac1aaddefbbf194096d2299b24ba8 + requires_dist: + - absl-py>=0.7.1 + - chex>=0.1.87 + - jax>=0.4.27 + - jaxlib>=0.4.27 + - numpy>=1.18.0 + - sphinx>=6.0.0 ; extra == 'docs' + - sphinx-book-theme>=1.0.1 ; extra == 'docs' + - sphinxcontrib-katex ; extra == 'docs' + - sphinx-autodoc-typehints ; extra == 'docs' + - ipython>=8.8.0 ; extra == 'docs' + - myst-nb>=1.0.0 ; extra == 'docs' + - matplotlib>=3.5.0 ; extra == 'docs' + - sphinx-gallery>=0.14.0 ; extra == 'docs' + - sphinx-collections>=0.0.1 ; extra == 'docs' + - flax ; extra == 'docs' + - sphinx-contributors ; extra == 'docs' + - flax>=0.5.3 ; extra == 'test' + - scipy>=1.7.1 ; extra == 'test' + - scikit-learn ; extra == 'test' + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/14/21/9632e0c6f826e2a0e19e1bcb9420fac9970696efc77ca1b37a496666f0ad/orbax_checkpoint-0.11.21-py3-none-any.whl + name: orbax-checkpoint + version: 0.11.21 + sha256: 930454e23a86ee9155c20fc36a699366c65ecd508e21d3d84aec9b5173d461c2 + requires_dist: + - absl-py + - etils[epath,epy] + - typing-extensions + - msgpack + - jax>=0.5.0 + - numpy + - pyyaml + - tensorstore>=0.1.71 + - nest-asyncio + - aiofiles + - protobuf + - humanize + - simplejson>=3.16.0 + - flax ; extra == 'docs' + - google-cloud-logging ; extra == 'docs' + - grain ; extra == 'docs' + - aiofiles ; extra == 'docs' + - tensorflow-datasets ; extra == 'docs' + - opencv-python ; extra == 'docs' + - safetensors ; extra == 'docs' + - google-cloud-logging ; extra == 'testing' + - mock ; extra == 'testing' + - flax ; extra == 'testing' + - pytest ; extra == 'testing' + - pytest-xdist ; extra == 'testing' + - chex ; extra == 'testing' + - aiofiles ; extra == 'testing' + - safetensors ; extra == 'testing' + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/20/12/38679034af332785aac8774540895e234f4d07f7545804097de4b666afd8/packaging-25.0-py3-none-any.whl + name: packaging + version: '25.0' + sha256: 29572ef2b1f17581046b3a2227d5c611fb25ec70ca1ba8554b24b0e69331a484 + requires_python: '>=3.8' +- pypi: https://files.pythonhosted.org/packages/d5/1c/a2a29649c0b1983d3ef57ee87a66487fdeb45132df66ab30dd37f7dbe162/pillow-11.3.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl + name: pillow + version: 11.3.0 + sha256: 13f87d581e71d9189ab21fe0efb5a23e9f28552d5be6979e84001d3b8505abe8 + requires_dist: + - furo ; extra == 'docs' + - olefile ; extra == 'docs' + - sphinx>=8.2 ; extra == 'docs' + - sphinx-autobuild ; extra == 'docs' + - sphinx-copybutton ; extra == 'docs' + - sphinx-inline-tabs ; extra == 'docs' + - sphinxext-opengraph ; extra == 'docs' + - olefile ; extra == 'fpx' + - olefile ; extra == 'mic' + - pyarrow ; extra == 'test-arrow' + - check-manifest ; extra == 'tests' + - coverage>=7.4.2 ; extra == 'tests' + - defusedxml ; extra == 'tests' + - markdown2 ; extra == 'tests' + - olefile ; extra == 'tests' + - packaging ; extra == 'tests' + - pyroma ; extra == 'tests' + - pytest ; extra == 'tests' + - pytest-cov ; extra == 'tests' + - pytest-timeout ; extra == 'tests' + - pytest-xdist ; extra == 'tests' + - trove-classifiers>=2024.10.12 ; extra == 'tests' + - typing-extensions ; python_full_version < '3.10' and extra == 'typing' + - defusedxml ; extra == 'xmp' + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/54/20/4d324d65cc6d9205fabedc306948156824eb9f0ee1633355a8f7ec5c66bf/pluggy-1.6.0-py3-none-any.whl + name: pluggy + version: 1.6.0 + sha256: e920276dd6813095e9377c0bc5566d94c932c33b27a3e3945d8389c374dd4746 + requires_dist: + - pre-commit ; extra == 'dev' + - tox ; extra == 'dev' + - pytest ; extra == 'testing' + - pytest-benchmark ; extra == 'testing' + - coverage ; extra == 'testing' + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/fa/b1/b59d405d64d31999244643d88c45c8241c58f17cc887e73bcb90602327f8/protobuf-6.31.1-cp39-abi3-manylinux2014_x86_64.whl + name: protobuf + version: 6.31.1 + sha256: 4ee898bf66f7a8b0bd21bce523814e6fbd8c6add948045ce958b73af7e8878c6 + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/c7/21/705964c7812476f378728bdf590ca4b771ec72385c533964653c68e86bdc/pygments-2.19.2-py3-none-any.whl + name: pygments + version: 2.19.2 + sha256: 86540386c03d588bb81d44bc3928634ff26449851e99741617ecb9037ee5ec0b + requires_dist: + - colorama>=0.4.6 ; extra == 'windows-terminal' + requires_python: '>=3.8' +- pypi: https://files.pythonhosted.org/packages/92/44/8634af40b0db528b5b37e901c0dc67321354880d251bf8965901d57693a5/PyOpenGL-3.1.9-py3-none-any.whl + name: pyopengl + version: 3.1.9 + sha256: 15995fd3b0deb991376805da36137a4ae5aba6ddbb5e29ac1f35462d130a3f77 +- pypi: https://files.pythonhosted.org/packages/29/16/c8a903f4c4dffe7a12843191437d7cd8e32751d5de349d45d3fe69544e87/pytest-8.4.1-py3-none-any.whl + name: pytest + version: 8.4.1 + sha256: 539c70ba6fcead8e78eebbf1115e8b589e7565830d7d006a8723f19ac8a0afb7 + requires_dist: + - colorama>=0.4 ; sys_platform == 'win32' + - exceptiongroup>=1 ; python_full_version < '3.11' + - iniconfig>=1 + - packaging>=20 + - pluggy>=1.5,<2 + - pygments>=2.7.2 + - tomli>=1 ; python_full_version < '3.11' + - argcomplete ; extra == 'dev' + - attrs>=19.2 ; extra == 'dev' + - hypothesis>=3.56 ; extra == 'dev' + - mock ; extra == 'dev' + - requests ; extra == 'dev' + - setuptools ; extra == 'dev' + - xmlschema ; extra == 'dev' + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/bc/16/4ea354101abb1287856baa4af2732be351c7bee728065aed451b678153fd/pytest_cov-6.2.1-py3-none-any.whl + name: pytest-cov + version: 6.2.1 + sha256: f5bc4c23f42f1cdd23c70b1dab1bbaef4fc505ba950d53e0081d0730dd7e86d5 + requires_dist: + - pytest>=6.2.5 + - coverage[toml]>=7.5 + - pluggy>=1.2 + - fields ; extra == 'testing' + - hunter ; extra == 'testing' + - process-tests ; extra == 'testing' + - pytest-xdist ; extra == 'testing' + - virtualenv ; extra == 'testing' + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/fa/b6/3127540ecdf1464a00e5a01ee60a1b09175f6913f0644ac748494d9c4b21/pytest_timeout-2.4.0-py3-none-any.whl + name: pytest-timeout + version: 2.4.0 + sha256: c42667e5cdadb151aeb5b26d114aff6bdf5a907f176a007a30b940d3d865b5c2 + requires_dist: + - pytest>=7.0.0 + requires_python: '>=3.7' +- conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.13.5-hec9711d_102_cp313.conda + build_number: 102 + sha256: c2cdcc98ea3cbf78240624e4077e164dc9d5588eefb044b4097c3df54d24d504 + md5: 89e07d92cf50743886f41638d58c4328 + depends: + - __glibc >=2.17,<3.0.a0 + - bzip2 >=1.0.8,<2.0a0 + - ld_impl_linux-64 >=2.36.1 + - libexpat >=2.7.0,<3.0a0 + - libffi >=3.4.6,<3.5.0a0 + - libgcc >=13 + - liblzma >=5.8.1,<6.0a0 + - libmpdec >=4.0.0,<5.0a0 + - libsqlite >=3.50.1,<4.0a0 + - libuuid >=2.38.1,<3.0a0 + - libzlib >=1.3.1,<2.0a0 + - ncurses >=6.5,<7.0a0 + - openssl >=3.5.0,<4.0a0 + - python_abi 3.13.* *_cp313 + - readline >=8.2,<9.0a0 + - tk >=8.6.13,<8.7.0a0 + - tzdata + license: Python-2.0 + purls: [] + size: 33273132 + timestamp: 1750064035176 + python_site_packages_path: lib/python3.13/site-packages +- conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.13-8_cp313.conda + build_number: 8 + sha256: 210bffe7b121e651419cb196a2a63687b087497595c9be9d20ebe97dd06060a7 + md5: 94305520c52a4aa3f6c2b1ff6008d9f8 + constrains: + - python 3.13.* *_cp313 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 7002 + timestamp: 1752805902938 +- pypi: https://files.pythonhosted.org/packages/04/24/b7721e4845c2f162d26f50521b825fb061bc0a5afcf9a386840f23ea19fa/PyYAML-6.0.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + name: pyyaml + version: 6.0.2 + sha256: 70b189594dbe54f75ab3a1acec5f1e3faa7e8cf2f1e08d9b561cb41b845f69d5 + requires_python: '>=3.8' +- conda: https://conda.anaconda.org/conda-forge/linux-64/readline-8.2-h8c095d6_2.conda + sha256: 2d6d0c026902561ed77cd646b5021aef2d4db22e57a5b0178dfc669231e06d2c + md5: 283b96675859b20a825f8fa30f311446 + depends: + - libgcc >=13 + - ncurses >=6.5,<7.0a0 + license: GPL-3.0-only + license_family: GPL + purls: [] + size: 282480 + timestamp: 1740379431762 +- pypi: https://files.pythonhosted.org/packages/e3/30/3c4d035596d3cf444529e0b2953ad0466f6049528a879d27534700580395/rich-14.1.0-py3-none-any.whl + name: rich + version: 14.1.0 + sha256: 536f5f1785986d6dbdea3c75205c473f970777b4a0d6c6dd1b696aa05a3fa04f + requires_dist: + - ipywidgets>=7.5.1,<9 ; extra == 'jupyter' + - markdown-it-py>=2.2.0 + - pygments>=2.13.0,<3.0.0 + requires_python: '>=3.8.0' +- pypi: git+https://github.com/scipy/scipy.git?rev=0f2342f#0f2342f34cc850e7137a74afd33c6877c1c790e6 + name: scipy + version: 1.17.0.dev0 + requires_dist: + - numpy>=1.26.4 + - pytest ; extra == 'test' + - pytest-cov ; extra == 'test' + - pytest-timeout ; extra == 'test' + - pytest-xdist ; extra == 'test' + - asv ; extra == 'test' + - mpmath ; extra == 'test' + - gmpy2 ; extra == 'test' + - threadpoolctl ; extra == 'test' + - scikit-umfpack ; extra == 'test' + - pooch ; extra == 'test' + - hypothesis>=6.30 ; extra == 'test' + - array-api-strict>=2.3.1 ; extra == 'test' + - cython ; extra == 'test' + - meson ; extra == 'test' + - ninja ; sys_platform != 'emscripten' and extra == 'test' + - sphinx>=5.0.0,<8.2.0 ; extra == 'doc' + - intersphinx-registry ; extra == 'doc' + - pydata-sphinx-theme>=0.15.2 ; extra == 'doc' + - sphinx-copybutton ; extra == 'doc' + - sphinx-design>=0.4.0 ; extra == 'doc' + - matplotlib>=3.5 ; extra == 'doc' + - numpydoc ; extra == 'doc' + - jupytext ; extra == 'doc' + - myst-nb>=1.2.0 ; extra == 'doc' + - pooch ; extra == 'doc' + - jupyterlite-sphinx>=0.19.1 ; extra == 'doc' + - jupyterlite-pyodide-kernel ; extra == 'doc' + - linkify-it-py ; extra == 'doc' + - tabulate ; extra == 'doc' + - spin ; extra == 'dev' + - mypy==1.10.0 ; extra == 'dev' + - typing-extensions ; extra == 'dev' + - types-psutil ; extra == 'dev' + - pycodestyle ; extra == 'dev' + - ruff>=0.12.0 ; extra == 'dev' + - cython-lint>=0.12.2 ; extra == 'dev' + requires_python: '>=3.11' +- pypi: https://files.pythonhosted.org/packages/a3/dc/17031897dae0efacfea57dfd3a82fdd2a2aeb58e0ff71b77b87e44edc772/setuptools-80.9.0-py3-none-any.whl + name: setuptools + version: 80.9.0 + sha256: 062d34222ad13e0cc312a4c02d73f059e86a4acbfbdea8f8f76b28c99f306922 + requires_dist: + - pytest>=6,!=8.1.* ; extra == 'test' + - virtualenv>=13.0.0 ; extra == 'test' + - wheel>=0.44.0 ; extra == 'test' + - pip>=19.1 ; extra == 'test' + - packaging>=24.2 ; extra == 'test' + - jaraco-envs>=2.2 ; extra == 'test' + - pytest-xdist>=3 ; extra == 'test' + - jaraco-path>=3.7.2 ; extra == 'test' + - build[virtualenv]>=1.0.3 ; extra == 'test' + - filelock>=3.4.0 ; extra == 'test' + - ini2toml[lite]>=0.14 ; extra == 'test' + - tomli-w>=1.0.0 ; extra == 'test' + - pytest-timeout ; extra == 'test' + - pytest-perf ; sys_platform != 'cygwin' and extra == 'test' + - jaraco-develop>=7.21 ; python_full_version >= '3.9' and sys_platform != 'cygwin' and extra == 'test' + - pytest-home>=0.5 ; extra == 'test' + - pytest-subprocess ; extra == 'test' + - pyproject-hooks!=1.1 ; extra == 'test' + - jaraco-test>=5.5 ; extra == 'test' + - sphinx>=3.5 ; extra == 'doc' + - jaraco-packaging>=9.3 ; extra == 'doc' + - rst-linker>=1.9 ; extra == 'doc' + - furo ; extra == 'doc' + - sphinx-lint ; extra == 'doc' + - jaraco-tidelift>=1.4 ; extra == 'doc' + - pygments-github-lexers==0.0.5 ; extra == 'doc' + - sphinx-favicon ; extra == 'doc' + - sphinx-inline-tabs ; extra == 'doc' + - sphinx-reredirects ; extra == 'doc' + - sphinxcontrib-towncrier ; extra == 'doc' + - sphinx-notfound-page>=1,<2 ; extra == 'doc' + - pyproject-hooks!=1.1 ; extra == 'doc' + - towncrier<24.7 ; extra == 'doc' + - packaging>=24.2 ; extra == 'core' + - more-itertools>=8.8 ; extra == 'core' + - jaraco-text>=3.7 ; extra == 'core' + - importlib-metadata>=6 ; python_full_version < '3.10' and extra == 'core' + - tomli>=2.0.1 ; python_full_version < '3.11' and extra == 'core' + - wheel>=0.43.0 ; extra == 'core' + - platformdirs>=4.2.2 ; extra == 'core' + - jaraco-functools>=4 ; extra == 'core' + - more-itertools ; extra == 'core' + - pytest-checkdocs>=2.4 ; extra == 'check' + - pytest-ruff>=0.2.1 ; sys_platform != 'cygwin' and extra == 'check' + - ruff>=0.8.0 ; sys_platform != 'cygwin' and extra == 'check' + - pytest-cov ; extra == 'cover' + - pytest-enabler>=2.2 ; extra == 'enabler' + - pytest-mypy ; extra == 'type' + - mypy==1.14.* ; extra == 'type' + - importlib-metadata>=7.0.2 ; python_full_version < '3.10' and extra == 'type' + - jaraco-develop>=7.21 ; sys_platform != 'cygwin' and extra == 'type' + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/19/e3/874b1cca3d3897b486d3afdccc475eb3a09815bf1015b01cf7fcb52a55f0/simplejson-3.20.1-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl + name: simplejson + version: 3.20.1 + sha256: ab980fcc446ab87ea0879edad41a5c28f2d86020014eb035cf5161e8de4474c6 + requires_python: '>=2.5,!=3.0.*,!=3.1.*,!=3.2.*' +- pypi: https://files.pythonhosted.org/packages/1d/9a/9dcc01c8f87047b09602ea16379233b8a308d1d83d5432bf8bc89163ca3e/tensorstore-0.1.76-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + name: tensorstore + version: 0.1.76 + sha256: 20782f833bfa3c59dd3787f657388054c54ee0ab48dad181b360e3e5e81e4c4b + requires_dist: + - numpy>=1.22.0 + - ml-dtypes>=0.5.0 + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/4f/bd/de8d508070629b6d84a30d01d57e4a65c69aa7f5abe7560b8fad3b50ea59/termcolor-3.1.0-py3-none-any.whl + name: termcolor + version: 3.1.0 + sha256: 591dd26b5c2ce03b9e43f391264626557873ce1d379019786f99b0c2bee140aa + requires_dist: + - pytest ; extra == 'tests' + - pytest-cov ; extra == 'tests' + requires_python: '>=3.9' +- conda: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_hd72426e_102.conda + sha256: a84ff687119e6d8752346d1d408d5cf360dee0badd487a472aa8ddedfdc219e1 + md5: a0116df4f4ed05c303811a837d5b39d8 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - libzlib >=1.3.1,<2.0a0 + license: TCL + license_family: BSD + purls: [] + size: 3285204 + timestamp: 1748387766691 +- pypi: https://files.pythonhosted.org/packages/03/98/eb27cc78ad3af8e302c9d8ff4977f5026676e130d28dd7578132a457170c/toolz-1.0.0-py3-none-any.whl + name: toolz + version: 1.0.0 + sha256: 292c8f1c4e7516bf9086f8850935c799a874039c8bcf959d47b600e4c44a6236 + requires_python: '>=3.8' +- pypi: https://files.pythonhosted.org/packages/43/2b/36e984399089c026a6499ac8f7401d38487cf0183839a4aa78140d373771/treescope-0.1.10-py3-none-any.whl + name: treescope + version: 0.1.10 + sha256: dde52f5314f4c29d22157a6fe4d3bd103f9cae02791c9e672eefa32c9aa1da51 + requires_dist: + - numpy>=1.25.2 + - pylint>=2.6.0 ; extra == 'dev' + - pyink>=24.3.0 ; extra == 'dev' + - ipython ; extra == 'dev' + - jupyter ; extra == 'dev' + - pytest>=8.2.2 ; extra == 'dev' + - pytype ; extra == 'dev' + - ipython ; extra == 'docs' + - sphinx>=6.0.0,<7.3.0 ; extra == 'docs' + - sphinx-book-theme>=1.0.1 ; extra == 'docs' + - sphinxcontrib-katex ; extra == 'docs' + - ipython>=8.8.0 ; extra == 'docs' + - jax[cpu]>=0.4.23 ; extra == 'docs' + - myst-nb>=1.0.0 ; extra == 'docs' + - myst-parser>=3.0.1 ; extra == 'docs' + - matplotlib>=3.5.0 ; extra == 'docs' + - packaging==24.1 ; extra == 'docs' + - palettable==3.3.3 ; extra == 'docs' + - pandas==2.2.2 ; extra == 'docs' + - plotly==5.22.0 ; extra == 'docs' + - penzai~=0.2.4 ; extra == 'docs' + - sphinx-contributors ; extra == 'docs' + - sphinx-hoverxref ; extra == 'docs' + - torch==2.3.1 ; extra == 'docs' + - ipython ; extra == 'notebook' + - palettable ; extra == 'notebook' + - jax>=0.4.23 ; extra == 'notebook' + - absl-py>=1.4.0 ; extra == 'test' + - jax>=0.4.23 ; extra == 'test' + - pytest>=8.2.2 ; extra == 'test' + - torch>=2.0.0 ; extra == 'test' + - pydantic>=2.0.0 ; extra == 'test' + - omegaconf>=2.0.0 ; extra == 'test' + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/3e/79/9563bd90b2b964e85424b6e41e58c39d812d31f62198140b87c823e19ed9/trimesh-4.7.3-py3-none-any.whl + name: trimesh + version: 4.7.3 + sha256: 4091a4ecf08dc141ac554f552e19168fce872ab51fa4512bf73a06bbe2360640 + requires_dist: + - numpy>=1.20 + - colorlog ; extra == 'easy' + - manifold3d>=2.3.0 ; extra == 'easy' + - charset-normalizer ; extra == 'easy' + - lxml ; extra == 'easy' + - jsonschema ; extra == 'easy' + - networkx ; extra == 'easy' + - svg-path ; extra == 'easy' + - pycollada<=0.9.0 ; python_full_version < '3.9' and extra == 'easy' + - pycollada ; python_full_version >= '3.9' and extra == 'easy' + - shapely ; extra == 'easy' + - xxhash ; extra == 'easy' + - rtree ; extra == 'easy' + - httpx ; extra == 'easy' + - scipy ; extra == 'easy' + - embreex ; platform_machine == 'x86_64' and extra == 'easy' + - pillow ; extra == 'easy' + - vhacdx ; python_full_version >= '3.9' and extra == 'easy' + - mapbox-earcut>=1.0.2 ; python_full_version >= '3.9' and extra == 'easy' + - sympy ; extra == 'recommend' + - meshio ; extra == 'recommend' + - pyglet<2 ; extra == 'recommend' + - psutil ; extra == 'recommend' + - scikit-image ; extra == 'recommend' + - fast-simplification ; extra == 'recommend' + - python-fcl ; extra == 'recommend' + - cascadio ; extra == 'recommend' + - pytest-cov ; extra == 'test' + - pytest ; extra == 'test' + - pyinstrument ; extra == 'test' + - ruff ; extra == 'test' + - coveralls ; extra == 'test-more' + - pyright ; extra == 'test-more' + - ezdxf ; extra == 'test-more' + - xatlas ; extra == 'test-more' + - pytest-beartype ; python_full_version >= '3.10' and extra == 'test-more' + - matplotlib ; extra == 'test-more' + - pymeshlab ; extra == 'test-more' + - triangle ; extra == 'test-more' + - ipython ; extra == 'test-more' + - marimo ; extra == 'test-more' + - openctm ; extra == 'deprecated' + - trimesh[deprecated,easy,recommend,test,test-more] ; extra == 'all' + requires_python: '>=3.8' +- pypi: https://files.pythonhosted.org/packages/b5/00/d631e67a838026495268c2f6884f3711a15a9a2a96cd244fdaea53b823fb/typing_extensions-4.14.1-py3-none-any.whl + name: typing-extensions + version: 4.14.1 + sha256: d1e1e3b58374dc93031d6eda2420a48ea44a36c2b4766a4fdeb3710755731d76 + requires_python: '>=3.9' +- conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025b-h78e105d_0.conda + sha256: 5aaa366385d716557e365f0a4e9c3fca43ba196872abbbe3d56bb610d131e192 + md5: 4222072737ccff51314b5ece9c7d6f5a + license: LicenseRef-Public-Domain + purls: [] + size: 122968 + timestamp: 1742727099393 +- pypi: https://files.pythonhosted.org/packages/2e/54/647ade08bf0db230bfea292f893923872fd20be6ac6f53b2b936ba839d75/zipp-3.23.0-py3-none-any.whl + name: zipp + version: 3.23.0 + sha256: 071652d6115ed432f5ce1d34c336c0adfd6a884660d1e9712a256d3d3bd4b14e + requires_dist: + - pytest>=6,!=8.1.* ; extra == 'test' + - jaraco-itertools ; extra == 'test' + - jaraco-functools ; extra == 'test' + - more-itertools ; extra == 'test' + - big-o ; extra == 'test' + - pytest-ignore-flaky ; extra == 'test' + - jaraco-test ; extra == 'test' + - sphinx>=3.5 ; extra == 'doc' + - jaraco-packaging>=9.3 ; extra == 'doc' + - rst-linker>=1.9 ; extra == 'doc' + - furo ; extra == 'doc' + - sphinx-lint ; extra == 'doc' + - jaraco-tidelift>=1.4 ; extra == 'doc' + - pytest-checkdocs>=2.4 ; extra == 'check' + - pytest-ruff>=0.2.1 ; sys_platform != 'cygwin' and extra == 'check' + - pytest-cov ; extra == 'cover' + - pytest-enabler>=2.2 ; extra == 'enabler' + - pytest-mypy ; extra == 'type' + requires_python: '>=3.9' diff --git a/pyproject.toml b/pyproject.toml index 36f762b..1d0a21d 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -18,16 +18,17 @@ classifiers = [ ] dependencies = [ - "jax>=0.5.0,!=0.5.3,!=0.6.0", # 0.5.3 and 0.6.0 have a bug that causes resets to not work properly. This is related to the fusing of SimData.mjx_model into the _reset function. + "jax>=0.7.0", # 0.5.3 and 0.6.0 have a bug that causes resets to not work properly. This is related to the fusing of SimData.mjx_model into the _reset function. "mujoco>=3.3.0", "mujoco-mjx>=3.3.0", - "gymnasium", + "gymnasium[mujoco]>=1.2.0", "imageio", "einops", "flax", "ml_collections", "casadi", "numpy", + "drone-models @ git+https://github.com/utiasDSL/drone-models.git@08ffb18", ] requires-python = ">=3.10" @@ -106,3 +107,18 @@ skip-magic-trailing-comma = true line-ending = "auto" docstring-code-format = true docstring-code-line-length = "dynamic" + +[tool.pixi.workspace] +channels = ["conda-forge"] +platforms = ["linux-64"] + +[tool.pixi.pypi-dependencies] +crazyflow = { path = "./", editable = true } + +[tool.pixi.environments] +default = { solve-group = "default" } +benchmark = { features = ["benchmark"], solve-group = "default" } +gpu = { features = ["gpu"], solve-group = "default" } +test = { features = ["test"], solve-group = "default" } + +[tool.pixi.tasks] diff --git a/tests/integration/test_disturbance.py b/tests/integration/test_disturbance.py index 822cd6f..7840597 100644 --- a/tests/integration/test_disturbance.py +++ b/tests/integration/test_disturbance.py @@ -20,9 +20,10 @@ def test_disturbance(physics: Physics): sim = Sim(n_worlds=2, n_drones=3, control="state", physics=physics) control = np.zeros((sim.n_worlds, sim.n_drones, 13)) control[..., :3] = 1.0 + n_steps = 10 pos, pos_disturbed = [], [] - for _ in range(sim.control_freq): + for _ in range(n_steps): sim.state_control(control) sim.step(sim.freq // sim.control_freq) pos.append(sim.data.states.pos[0, 0]) @@ -30,7 +31,7 @@ def test_disturbance(physics: Physics): sim.reset() sim.step_pipeline = sim.step_pipeline[:2] + (disturbance_fn,) + sim.step_pipeline[2:] sim.build_step_fn() - for _ in range(sim.control_freq): + for _ in range(n_steps): sim.state_control(control) sim.step(sim.freq // sim.control_freq) pos_disturbed.append(sim.data.states.pos[0, 0]) diff --git a/tests/unit/test_sim.py b/tests/unit/test_sim.py index 88762d2..bd183b4 100644 --- a/tests/unit/test_sim.py +++ b/tests/unit/test_sim.py @@ -357,7 +357,7 @@ def test_seed_reset(): @pytest.mark.unit @pytest.mark.parametrize("physics", [Physics.analytical, Physics.sys_id]) def test_floor_penetration(physics: Physics): - """Test that drones cannot penetrate the floor (z < 0). + """Test that drones cannot penetrate the floor (z < 0.01). We don't test for mujoco, as mujoco uses collisions by default and will let the drone bounce on the floor. @@ -367,8 +367,6 @@ def test_floor_penetration(physics: Physics): # Command to fall: zero thrust and attitude that points downward attitude_cmd = np.zeros((1, 1, 4)) # [roll, pitch, yaw, thrust] attitude_cmd[..., 0] = 0.0 # Zero thrust to fall - attitude_cmd[..., 1] = 0.5 # Roll to destabilize - attitude_cmd[..., 3] = 0.5 # Pitch to destabilize sim.attitude_control(attitude_cmd) # Run simulation for short duration to let drone fall for _ in range(5): # 0.1 seconds at 500Hz @@ -380,3 +378,14 @@ def test_floor_penetration(physics: Physics): final_z_pos = sim.data.states.pos[..., 2] assert jnp.all(final_z_pos == -0.001), f"Drone should be on floor but z={final_z_pos}" sim.close() + + +@pytest.mark.unit +@pytest.mark.parametrize("physics", [Physics.sys_id, Physics.analytical]) +def test_contacts(physics: Physics): + sim = Sim(physics=physics, control=Control.attitude, freq=500, device="cpu") + sim.reset() + sim.step(10) # Make sure the drone is on the ground + contacts = sim.contacts() + assert jnp.all(contacts), "Drone should be in contact with the floor" + sim.close() From b1541a18de82fb7d47d71c04790ca3cd91a4a459 Mon Sep 17 00:00:00 2001 From: Martin Schuck Date: Fri, 15 Aug 2025 17:37:21 +0200 Subject: [PATCH 02/13] Fix benchmark script --- benchmark/main.py | 10 +- pixi.lock | 247 +++++++++++++++++++++++++++++++++++++++++++++- pyproject.toml | 4 +- 3 files changed, 252 insertions(+), 9 deletions(-) diff --git a/benchmark/main.py b/benchmark/main.py index 9fb10c3..9d2d2ab 100644 --- a/benchmark/main.py +++ b/benchmark/main.py @@ -3,6 +3,7 @@ from datetime import datetime from pathlib import Path +import fire import gymnasium import jax import jax.numpy as jnp @@ -140,9 +141,8 @@ def profile_reset(sim_config: config_dict.ConfigDict, n_steps: int, device: str) analyze_timings(times_masked, n_steps, sim.n_worlds, sim.freq) -def main(): +def main(device: str = "cpu", n_worlds_exp: int = 6): """Main entry point for profiling.""" - device = "cpu" sim_config = config_dict.ConfigDict() sim_config.n_worlds = 1 sim_config.n_drones = 1 @@ -182,7 +182,7 @@ def main(): n_steps = 1000 # Test with increasing number of parallel environments (worlds) - for n_worlds in [1, 10, 100, 1000, 10000, 100000, 1000000]: + for n_worlds in [10**i for i in range(n_worlds_exp + 1)]: print(f"\nTesting with {n_worlds} parallel environments:") sim_config.n_worlds = n_worlds @@ -213,7 +213,7 @@ def main(): # Save simulator results # Reopen CSV writer in append mode - with open(csv_file, "w", newline="") as f: + with open(csv_file, "a", newline="") as f: csv_writer = csv.writer(f) csv_writer.writerow( [ @@ -270,4 +270,4 @@ def main(): if __name__ == "__main__": - main() + fire.Fire(main) diff --git a/pixi.lock b/pixi.lock index 27c297d..6371a92 100644 --- a/pixi.lock +++ b/pixi.lock @@ -37,12 +37,15 @@ environments: - pypi: https://files.pythonhosted.org/packages/96/9e/16bc0b59ca73b47b82380c0ac6ef5084fb0f6e487d24eb102926456708eb/casadi-3.7.1-cp313-none-manylinux2014_x86_64.whl - pypi: https://files.pythonhosted.org/packages/6f/3d/46bb04776c465cea2dd8aa2d4b61ab610b707f798f47838ef7e6105b025c/chex-0.1.90-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/7e/e8/64c37fadfc2816a7701fa8a6ed8d87327c7d54eacfbfb6edab14a2f2be75/cloudpickle-3.1.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/4b/32/e0f13a1c5b0f8572d0ec6ae2f6c677b7991fafd95da523159c19eff0696a/contourpy-1.3.3-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/e7/05/c19819d5e3d95294a6f5947fb9b9629efb316b96de511b418c53d245aae6/cycler-0.12.1-py3-none-any.whl - pypi: git+https://github.com/utiasDSL/drone-models.git?rev=08ffb18#08ffb18148566ff26c8a2386d5069a8b2de27f5b - pypi: https://files.pythonhosted.org/packages/87/62/9773de14fe6c45c23649e98b83231fffd7b9892b6cf863251dc2afa73643/einops-0.8.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e7/98/87b5946356095738cb90a6df7b35ff69ac5750f6e783d5fbcc5cb3b6cbd7/etils-1.13.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/05/2c/ffc08c54c05cdce6fbed2aeebc46348dbe180c6d2c541c7af7ba0aa5f5f8/Farama_Notifications-0.0.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/6b/b6/82c7e601d6d3c3278c40b7bd35e17e82aa227f050aa9f66cb7b7fce29471/fire-0.7.0.tar.gz - pypi: https://files.pythonhosted.org/packages/8a/0b/6b46d04a251f8a8b430bfd79b02a071bcd37b5dfa8321a7ad5db47dcd103/flax-0.11.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e9/a2/5a9fc21c354bf8613215ce233ab0d933bd17d5ff4c29693636551adbc7b3/fonttools-4.59.1-cp313-cp313-manylinux1_x86_64.manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_5_x86_64.whl - pypi: https://files.pythonhosted.org/packages/2f/e0/014d5d9d7a4564cf1c40b5039bc882db69fd881111e03ab3657ac0b218e2/fsspec-2025.7.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/7f/ba/de3630757c7d7fc2086aaf3994926d6b869d31586e4d0c14f1666af31b93/glfw-2.9.0-py2.py27.py3.py30.py31.py32.py33.py34.py35.py36.py37.py38.p39.p310.p311.p312.p313-none-manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/a0/e2/a111dbb8625af467ea4760a1373d6ef27aac3137931219902406ccc05423/gymnasium-1.2.0-py3-none-any.whl @@ -50,8 +53,12 @@ environments: - pypi: https://files.pythonhosted.org/packages/cb/bd/b394387b598ed84d8d0fa90611a90bee0adc2021820ad5729f7ced74a8e2/imageio-2.37.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a4/ed/1f1afb2e9e7f38a545d628f864d562a5ae64fe6f7a10e28ffb9b185b4e89/importlib_resources-6.5.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ad/de/3092df5073cd9c07c01b10612fc541538b74b02184fac90e3beada20f758/jax-0.7.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/49/ef/1fe3c10c27199fbaf593ee7c53226e4eae057d505207707cd815a8ee0764/jax_cuda12_pjrt-0.7.0-py3-none-manylinux2014_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/0d/c2/0f5698d4ececeff3cf0e9802b1f58f137adea83562cfa735591436978a49/jax_cuda12_plugin-0.7.0-cp313-cp313-manylinux2014_x86_64.whl - pypi: https://files.pythonhosted.org/packages/c7/83/7ba260095e98a5004af4fdb4315010c445441473cac41afdb973bf212deb/jaxlib-0.7.0-cp313-cp313-manylinux2014_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/e9/e9/f218a2cb3a9ffbe324ca29a9e399fa2d2866d7f348ec3a88df87fc248fc5/kiwisolver-1.4.9-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl - pypi: https://files.pythonhosted.org/packages/94/54/e7d793b573f298e1c9013b8c4dade17d481164aa517d1d7148619c2cedbf/markdown_it_py-4.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/52/1b/233e3094b749df16e3e6cd5a44849fd33852e692ad009cf7de00cf58ddf6/matplotlib-3.10.5-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl - pypi: https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ab/8a/18d4ff2c7bd83f30d6924bd4ad97abf418488c3f908dea228d6f0961ad68/ml_collections-1.1.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/14/f3/091ba84e5395d7fe5b30c081a44dec881cd84b408db1763ee50768b2ab63/ml_dtypes-0.5.3-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl @@ -60,25 +67,43 @@ environments: - pypi: https://files.pythonhosted.org/packages/59/b1/965d28e5ece3e59772b79dc43144b70f73b188f8f49b4997c91a646d85a4/mujoco_mjx-3.3.5-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a0/c4/c2971a3ba4c6103a3d10c4b0f24f461ddc027f0f09763220cf35ca1401b3/nest_asyncio-1.6.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/1d/0f/571b2c7a3833ae419fe69ff7b479a78d313581785203cc70a8db90121b9a/numpy-2.3.2-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/77/3c/aa88abe01f3be3d1f8f787d1d33dc83e76fec05945f9a28fbb41cfb99cd5/nvidia_cublas_cu12-12.9.1.4-py3-none-manylinux_2_27_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/c1/2e/b84e32197e33f39907b455b83395a017e697c07a449a2b15fd07fc1c9981/nvidia_cuda_cupti_cu12-12.9.79-py3-none-manylinux_2_25_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/25/48/b54a06168a2190572a312bfe4ce443687773eb61367ced31e064953dd2f7/nvidia_cuda_nvcc_cu12-12.9.86-py3-none-manylinux2010_x86_64.manylinux_2_12_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/b8/85/e4af82cc9202023862090bfca4ea827d533329e925c758f0cde964cb54b7/nvidia_cuda_nvrtc_cu12-12.9.86-py3-none-manylinux2010_x86_64.manylinux_2_12_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/bc/46/a92db19b8309581092a3add7e6fceb4c301a3fd233969856a8cbf042cd3c/nvidia_cuda_runtime_cu12-12.9.79-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/de/14/9288024887ba320eb4e51d01cf37aab11d38f774016bcc0dedac0948d0bc/nvidia_cudnn_cu12-9.12.0.46-py3-none-manylinux_2_27_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/95/f4/61e6996dd20481ee834f57a8e9dca28b1869366a135e0d42e2aa8493bdd4/nvidia_cufft_cu12-11.4.1.4-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/33/40/79b0c64d44d6c166c0964ec1d803d067f4a145cca23e23925fd351d0e642/nvidia_cusolver_cu12-11.7.5.82-py3-none-manylinux_2_27_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/12/46/b0fd4b04f86577921feb97d8e2cf028afe04f614d17fb5013de9282c9216/nvidia_cusparse_cu12-12.5.10.65-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/c4/cb/2cf5b8e6a669c90ac6410c3a9d86881308492765b6744de5d0ce75089999/nvidia_nccl_cu12-2.27.7-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/46/0c/c75bbfb967457a0b7670b8ad267bfc4fffdf341c074e0a80db06c24ccfd4/nvidia_nvjitlink_cu12-12.9.86-py3-none-manylinux2010_x86_64.manylinux_2_12_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/3b/6c/99acb2f9eb85c29fc6f3a7ac4dccfd992e22666dd08a642b303311326a97/nvidia_nvshmem_cu12-3.3.20-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl - pypi: https://files.pythonhosted.org/packages/23/cd/066e86230ae37ed0be70aae89aabf03ca8d9f39c8aea0dec8029455b5540/opt_einsum-3.4.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/b9/33/f86091c706db1a5459f501830241afff2ecab3532725c188ea57be6e54de/optax-0.2.5-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/14/21/9632e0c6f826e2a0e19e1bcb9420fac9970696efc77ca1b37a496666f0ad/orbax_checkpoint-0.11.21-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/20/12/38679034af332785aac8774540895e234f4d07f7545804097de4b666afd8/packaging-25.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e9/e2/20a317688435470872885e7fc8f95109ae9683dec7c50be29b56911515a5/pandas-2.3.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - pypi: https://files.pythonhosted.org/packages/d5/1c/a2a29649c0b1983d3ef57ee87a66487fdeb45132df66ab30dd37f7dbe162/pillow-11.3.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/fa/b1/b59d405d64d31999244643d88c45c8241c58f17cc887e73bcb90602327f8/protobuf-6.31.1-cp39-abi3-manylinux2014_x86_64.whl - pypi: https://files.pythonhosted.org/packages/c7/21/705964c7812476f378728bdf590ca4b771ec72385c533964653c68e86bdc/pygments-2.19.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/92/44/8634af40b0db528b5b37e901c0dc67321354880d251bf8965901d57693a5/PyOpenGL-3.1.9-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/05/e7/df2285f3d08fee213f2d041540fa4fc9ca6c2d44cf36d3a035bf2a8d2bcc/pyparsing-3.2.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ec/57/56b9bcc3c9c6a792fcbaf139543cee77261f3651ca9da0c93f5c1221264b/python_dateutil-2.9.0.post0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/81/c4/34e93fe5f5429d7570ec1fa436f1986fb1f00c3e0f43a589fe2bbcd22c3f/pytz-2025.2-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/04/24/b7721e4845c2f162d26f50521b825fb061bc0a5afcf9a386840f23ea19fa/PyYAML-6.0.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - pypi: https://files.pythonhosted.org/packages/e3/30/3c4d035596d3cf444529e0b2953ad0466f6049528a879d27534700580395/rich-14.1.0-py3-none-any.whl - pypi: git+https://github.com/scipy/scipy.git?rev=0f2342f#0f2342f34cc850e7137a74afd33c6877c1c790e6 - pypi: https://files.pythonhosted.org/packages/a3/dc/17031897dae0efacfea57dfd3a82fdd2a2aeb58e0ff71b77b87e44edc772/setuptools-80.9.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/19/e3/874b1cca3d3897b486d3afdccc475eb3a09815bf1015b01cf7fcb52a55f0/simplejson-3.20.1-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/b7/ce/149a00dd41f10bc29e5921b496af8b574d8413afcd5e30dfa0ed46c2cc5e/six-1.17.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/1d/9a/9dcc01c8f87047b09602ea16379233b8a308d1d83d5432bf8bc89163ca3e/tensorstore-0.1.76-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - pypi: https://files.pythonhosted.org/packages/4f/bd/de8d508070629b6d84a30d01d57e4a65c69aa7f5abe7560b8fad3b50ea59/termcolor-3.1.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/03/98/eb27cc78ad3af8e302c9d8ff4977f5026676e130d28dd7578132a457170c/toolz-1.0.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/43/2b/36e984399089c026a6499ac8f7401d38487cf0183839a4aa78140d373771/treescope-0.1.10-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/3e/79/9563bd90b2b964e85424b6e41e58c39d812d31f62198140b87c823e19ed9/trimesh-4.7.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/b5/00/d631e67a838026495268c2f6884f3711a15a9a2a96cd244fdaea53b823fb/typing_extensions-4.14.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/5c/23/c7abc0ca0a1526a0774eca151daeb8de62ec457e77262b66b359c3c7679e/tzdata-2025.2-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/2e/54/647ade08bf0db230bfea292f893923872fd20be6ac6f53b2b936ba839d75/zipp-3.23.0-py3-none-any.whl - pypi: ./ default: @@ -454,6 +479,31 @@ packages: version: 3.1.1 sha256: c8c5a44295039331ee9dad40ba100a9c7297b6f988e50e87ccdf3765a668350e requires_python: '>=3.8' +- pypi: https://files.pythonhosted.org/packages/4b/32/e0f13a1c5b0f8572d0ec6ae2f6c677b7991fafd95da523159c19eff0696a/contourpy-1.3.3-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl + name: contourpy + version: 1.3.3 + sha256: 4debd64f124ca62069f313a9cb86656ff087786016d76927ae2cf37846b006c9 + requires_dist: + - numpy>=1.25 + - furo ; extra == 'docs' + - sphinx>=7.2 ; extra == 'docs' + - sphinx-copybutton ; extra == 'docs' + - bokeh ; extra == 'bokeh' + - selenium ; extra == 'bokeh' + - contourpy[bokeh,docs] ; extra == 'mypy' + - bokeh ; extra == 'mypy' + - docutils-stubs ; extra == 'mypy' + - mypy==1.17.0 ; extra == 'mypy' + - types-pillow ; extra == 'mypy' + - contourpy[test-no-images] ; extra == 'test' + - matplotlib ; extra == 'test' + - pillow ; extra == 'test' + - pytest ; extra == 'test-no-images' + - pytest-cov ; extra == 'test-no-images' + - pytest-rerunfailures ; extra == 'test-no-images' + - pytest-xdist ; extra == 'test-no-images' + - wurlitzer ; extra == 'test-no-images' + requires_python: '>=3.11' - pypi: https://files.pythonhosted.org/packages/ea/2f/6ae1db51dc34db499bfe340e89f79a63bd115fc32513a7bacdf17d33cd86/coverage-7.10.3-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl name: coverage version: 7.10.3 @@ -463,8 +513,8 @@ packages: requires_python: '>=3.9' - pypi: ./ name: crazyflow - version: 0.0.1 - sha256: 87578c541b696eca22cc7ab29c2bd31a0755ad8515f4d00974adafb23bffb49f + version: 0.0.2 + sha256: 937042d68b254c167525629031fd6a6c44447e2c0c993fc6c00588de0c7ac3fa requires_dist: - jax>=0.7.0 - mujoco>=3.3.0 @@ -482,8 +532,23 @@ packages: - pytest-timeout ; extra == 'test' - jax[cuda12] ; extra == 'gpu' - fire ; extra == 'benchmark' + - matplotlib ; extra == 'benchmark' + - pandas ; extra == 'benchmark' requires_python: '>=3.10' editable: true +- pypi: https://files.pythonhosted.org/packages/e7/05/c19819d5e3d95294a6f5947fb9b9629efb316b96de511b418c53d245aae6/cycler-0.12.1-py3-none-any.whl + name: cycler + version: 0.12.1 + sha256: 85cef7cff222d8644161529808465972e51340599459b8ac3ccbac5a854e0d30 + requires_dist: + - ipython ; extra == 'docs' + - matplotlib ; extra == 'docs' + - numpydoc ; extra == 'docs' + - sphinx ; extra == 'docs' + - pytest ; extra == 'tests' + - pytest-cov ; extra == 'tests' + - pytest-xdist ; extra == 'tests' + requires_python: '>=3.8' - pypi: git+https://github.com/utiasDSL/drone-models.git?rev=08ffb18#08ffb18148566ff26c8a2386d5069a8b2de27f5b name: drone-models version: 0.0.1 @@ -650,6 +715,40 @@ packages: - pre-commit>=3.8.0 ; extra == 'dev' - scikit-build-core[pyproject]>=0.11.0 ; extra == 'dev' requires_python: '>=3.11' +- pypi: https://files.pythonhosted.org/packages/e9/a2/5a9fc21c354bf8613215ce233ab0d933bd17d5ff4c29693636551adbc7b3/fonttools-4.59.1-cp313-cp313-manylinux1_x86_64.manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_5_x86_64.whl + name: fonttools + version: 4.59.1 + sha256: 8387876a8011caec52d327d5e5bca705d9399ec4b17afb8b431ec50d47c17d23 + requires_dist: + - lxml>=4.0 ; extra == 'lxml' + - brotli>=1.0.1 ; platform_python_implementation == 'CPython' and extra == 'woff' + - brotlicffi>=0.8.0 ; platform_python_implementation != 'CPython' and extra == 'woff' + - zopfli>=0.1.4 ; extra == 'woff' + - unicodedata2>=15.1.0 ; python_full_version < '3.13' and extra == 'unicode' + - lz4>=1.7.4.2 ; extra == 'graphite' + - scipy ; platform_python_implementation != 'PyPy' and extra == 'interpolatable' + - munkres ; platform_python_implementation == 'PyPy' and extra == 'interpolatable' + - pycairo ; extra == 'interpolatable' + - matplotlib ; extra == 'plot' + - sympy ; extra == 'symfont' + - xattr ; sys_platform == 'darwin' and extra == 'type1' + - skia-pathops>=0.5.0 ; extra == 'pathops' + - uharfbuzz>=0.23.0 ; extra == 'repacker' + - lxml>=4.0 ; extra == 'all' + - brotli>=1.0.1 ; platform_python_implementation == 'CPython' and extra == 'all' + - brotlicffi>=0.8.0 ; platform_python_implementation != 'CPython' and extra == 'all' + - zopfli>=0.1.4 ; extra == 'all' + - unicodedata2>=15.1.0 ; python_full_version < '3.13' and extra == 'all' + - lz4>=1.7.4.2 ; extra == 'all' + - scipy ; platform_python_implementation != 'PyPy' and extra == 'all' + - munkres ; platform_python_implementation == 'PyPy' and extra == 'all' + - pycairo ; extra == 'all' + - matplotlib ; extra == 'all' + - sympy ; extra == 'all' + - xattr ; sys_platform == 'darwin' and extra == 'all' + - skia-pathops>=0.5.0 ; extra == 'all' + - uharfbuzz>=0.23.0 ; extra == 'all' + requires_python: '>=3.9' - pypi: https://files.pythonhosted.org/packages/2f/e0/014d5d9d7a4564cf1c40b5039bc882db69fd881111e03ab3657ac0b218e2/fsspec-2025.7.0-py3-none-any.whl name: fsspec version: 2025.7.0 @@ -985,6 +1084,11 @@ packages: - numpy>=1.26 - ml-dtypes>=0.5.0 requires_python: '>=3.11' +- pypi: https://files.pythonhosted.org/packages/e9/e9/f218a2cb3a9ffbe324ca29a9e399fa2d2866d7f348ec3a88df87fc248fc5/kiwisolver-1.4.9-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl + name: kiwisolver + version: 1.4.9 + sha256: b67e6efbf68e077dd71d1a6b37e43e1a99d0bff1a3d51867d45ee8908b931098 + requires_python: '>=3.10' - conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.44-h1423503_1.conda sha256: 1a620f27d79217c1295049ba214c2f80372062fd251b569e9873d4a953d27554 md5: 0be7c6e070c19105f966d3758448d018 @@ -1145,6 +1249,25 @@ packages: - pytest-regressions ; extra == 'testing' - requests ; extra == 'testing' requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/52/1b/233e3094b749df16e3e6cd5a44849fd33852e692ad009cf7de00cf58ddf6/matplotlib-3.10.5-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl + name: matplotlib + version: 3.10.5 + sha256: d52fd5b684d541b5a51fb276b2b97b010c75bee9aa392f96b4a07aeb491e33c7 + requires_dist: + - contourpy>=1.0.1 + - cycler>=0.10 + - fonttools>=4.22.0 + - kiwisolver>=1.3.1 + - numpy>=1.23 + - packaging>=20.0 + - pillow>=8 + - pyparsing>=2.3.1 + - python-dateutil>=2.7 + - meson-python>=0.13.1,<0.17.0 ; extra == 'dev' + - pybind11>=2.13.2,!=2.13.3 ; extra == 'dev' + - setuptools-scm>=7 ; extra == 'dev' + - setuptools>=64 ; extra == 'dev' + requires_python: '>=3.10' - pypi: https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl name: mdurl version: 0.1.2 @@ -1381,6 +1504,97 @@ packages: version: '25.0' sha256: 29572ef2b1f17581046b3a2227d5c611fb25ec70ca1ba8554b24b0e69331a484 requires_python: '>=3.8' +- pypi: https://files.pythonhosted.org/packages/e9/e2/20a317688435470872885e7fc8f95109ae9683dec7c50be29b56911515a5/pandas-2.3.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + name: pandas + version: 2.3.1 + sha256: 2ba6aff74075311fc88504b1db890187a3cd0f887a5b10f5525f8e2ef55bfdb9 + requires_dist: + - numpy>=1.22.4 ; python_full_version < '3.11' + - numpy>=1.23.2 ; python_full_version == '3.11.*' + - numpy>=1.26.0 ; python_full_version >= '3.12' + - python-dateutil>=2.8.2 + - pytz>=2020.1 + - tzdata>=2022.7 + - hypothesis>=6.46.1 ; extra == 'test' + - pytest>=7.3.2 ; extra == 'test' + - pytest-xdist>=2.2.0 ; extra == 'test' + - pyarrow>=10.0.1 ; extra == 'pyarrow' + - bottleneck>=1.3.6 ; extra == 'performance' + - numba>=0.56.4 ; extra == 'performance' + - numexpr>=2.8.4 ; extra == 'performance' + - scipy>=1.10.0 ; extra == 'computation' + - xarray>=2022.12.0 ; extra == 'computation' + - fsspec>=2022.11.0 ; extra == 'fss' + - s3fs>=2022.11.0 ; extra == 'aws' + - gcsfs>=2022.11.0 ; extra == 'gcp' + - pandas-gbq>=0.19.0 ; extra == 'gcp' + - odfpy>=1.4.1 ; extra == 'excel' + - openpyxl>=3.1.0 ; extra == 'excel' + - python-calamine>=0.1.7 ; extra == 'excel' + - pyxlsb>=1.0.10 ; extra == 'excel' + - xlrd>=2.0.1 ; extra == 'excel' + - xlsxwriter>=3.0.5 ; extra == 'excel' + - pyarrow>=10.0.1 ; extra == 'parquet' + - pyarrow>=10.0.1 ; extra == 'feather' + - tables>=3.8.0 ; extra == 'hdf5' + - pyreadstat>=1.2.0 ; extra == 'spss' + - sqlalchemy>=2.0.0 ; extra == 'postgresql' + - psycopg2>=2.9.6 ; extra == 'postgresql' + - adbc-driver-postgresql>=0.8.0 ; extra == 'postgresql' + - sqlalchemy>=2.0.0 ; extra == 'mysql' + - pymysql>=1.0.2 ; extra == 'mysql' + - sqlalchemy>=2.0.0 ; extra == 'sql-other' + - adbc-driver-postgresql>=0.8.0 ; extra == 'sql-other' + - adbc-driver-sqlite>=0.8.0 ; extra == 'sql-other' + - beautifulsoup4>=4.11.2 ; extra == 'html' + - html5lib>=1.1 ; extra == 'html' + - lxml>=4.9.2 ; extra == 'html' + - lxml>=4.9.2 ; extra == 'xml' + - matplotlib>=3.6.3 ; extra == 'plot' + - jinja2>=3.1.2 ; extra == 'output-formatting' + - tabulate>=0.9.0 ; extra == 'output-formatting' + - pyqt5>=5.15.9 ; extra == 'clipboard' + - qtpy>=2.3.0 ; extra == 'clipboard' + - zstandard>=0.19.0 ; extra == 'compression' + - dataframe-api-compat>=0.1.7 ; extra == 'consortium-standard' + - adbc-driver-postgresql>=0.8.0 ; extra == 'all' + - adbc-driver-sqlite>=0.8.0 ; extra == 'all' + - beautifulsoup4>=4.11.2 ; extra == 'all' + - bottleneck>=1.3.6 ; extra == 'all' + - dataframe-api-compat>=0.1.7 ; extra == 'all' + - fastparquet>=2022.12.0 ; extra == 'all' + - fsspec>=2022.11.0 ; extra == 'all' + - gcsfs>=2022.11.0 ; extra == 'all' + - html5lib>=1.1 ; extra == 'all' + - hypothesis>=6.46.1 ; extra == 'all' + - jinja2>=3.1.2 ; extra == 'all' + - lxml>=4.9.2 ; extra == 'all' + - matplotlib>=3.6.3 ; extra == 'all' + - numba>=0.56.4 ; extra == 'all' + - numexpr>=2.8.4 ; extra == 'all' + - odfpy>=1.4.1 ; extra == 'all' + - openpyxl>=3.1.0 ; extra == 'all' + - pandas-gbq>=0.19.0 ; extra == 'all' + - psycopg2>=2.9.6 ; extra == 'all' + - pyarrow>=10.0.1 ; extra == 'all' + - pymysql>=1.0.2 ; extra == 'all' + - pyqt5>=5.15.9 ; extra == 'all' + - pyreadstat>=1.2.0 ; extra == 'all' + - pytest>=7.3.2 ; extra == 'all' + - pytest-xdist>=2.2.0 ; extra == 'all' + - python-calamine>=0.1.7 ; extra == 'all' + - pyxlsb>=1.0.10 ; extra == 'all' + - qtpy>=2.3.0 ; extra == 'all' + - scipy>=1.10.0 ; extra == 'all' + - s3fs>=2022.11.0 ; extra == 'all' + - sqlalchemy>=2.0.0 ; extra == 'all' + - tables>=3.8.0 ; extra == 'all' + - tabulate>=0.9.0 ; extra == 'all' + - xarray>=2022.12.0 ; extra == 'all' + - xlrd>=2.0.1 ; extra == 'all' + - xlsxwriter>=3.0.5 ; extra == 'all' + - zstandard>=0.19.0 ; extra == 'all' + requires_python: '>=3.9' - pypi: https://files.pythonhosted.org/packages/d5/1c/a2a29649c0b1983d3ef57ee87a66487fdeb45132df66ab30dd37f7dbe162/pillow-11.3.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl name: pillow version: 11.3.0 @@ -1438,6 +1652,14 @@ packages: name: pyopengl version: 3.1.9 sha256: 15995fd3b0deb991376805da36137a4ae5aba6ddbb5e29ac1f35462d130a3f77 +- pypi: https://files.pythonhosted.org/packages/05/e7/df2285f3d08fee213f2d041540fa4fc9ca6c2d44cf36d3a035bf2a8d2bcc/pyparsing-3.2.3-py3-none-any.whl + name: pyparsing + version: 3.2.3 + sha256: a749938e02d6fd0b59b356ca504a24982314bb090c383e3cf201c95ef7e2bfcf + requires_dist: + - railroad-diagrams ; extra == 'diagrams' + - jinja2 ; extra == 'diagrams' + requires_python: '>=3.9' - pypi: https://files.pythonhosted.org/packages/29/16/c8a903f4c4dffe7a12843191437d7cd8e32751d5de349d45d3fe69544e87/pytest-8.4.1-py3-none-any.whl name: pytest version: 8.4.1 @@ -1506,6 +1728,13 @@ packages: size: 33273132 timestamp: 1750064035176 python_site_packages_path: lib/python3.13/site-packages +- pypi: https://files.pythonhosted.org/packages/ec/57/56b9bcc3c9c6a792fcbaf139543cee77261f3651ca9da0c93f5c1221264b/python_dateutil-2.9.0.post0-py2.py3-none-any.whl + name: python-dateutil + version: 2.9.0.post0 + sha256: a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427 + requires_dist: + - six>=1.5 + requires_python: '>=2.7,!=3.0.*,!=3.1.*,!=3.2.*' - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.13-8_cp313.conda build_number: 8 sha256: 210bffe7b121e651419cb196a2a63687b087497595c9be9d20ebe97dd06060a7 @@ -1517,6 +1746,10 @@ packages: purls: [] size: 7002 timestamp: 1752805902938 +- pypi: https://files.pythonhosted.org/packages/81/c4/34e93fe5f5429d7570ec1fa436f1986fb1f00c3e0f43a589fe2bbcd22c3f/pytz-2025.2-py2.py3-none-any.whl + name: pytz + version: '2025.2' + sha256: 5ddf76296dd8c44c26eb8f4b6f35488f3ccbf6fbbd7adee0b7262d43f0ec2f00 - pypi: https://files.pythonhosted.org/packages/04/24/b7721e4845c2f162d26f50521b825fb061bc0a5afcf9a386840f23ea19fa/PyYAML-6.0.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl name: pyyaml version: 6.0.2 @@ -1646,6 +1879,11 @@ packages: version: 3.20.1 sha256: ab980fcc446ab87ea0879edad41a5c28f2d86020014eb035cf5161e8de4474c6 requires_python: '>=2.5,!=3.0.*,!=3.1.*,!=3.2.*' +- pypi: https://files.pythonhosted.org/packages/b7/ce/149a00dd41f10bc29e5921b496af8b574d8413afcd5e30dfa0ed46c2cc5e/six-1.17.0-py2.py3-none-any.whl + name: six + version: 1.17.0 + sha256: 4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274 + requires_python: '>=2.7,!=3.0.*,!=3.1.*,!=3.2.*' - pypi: https://files.pythonhosted.org/packages/1d/9a/9dcc01c8f87047b09602ea16379233b8a308d1d83d5432bf8bc89163ca3e/tensorstore-0.1.76-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl name: tensorstore version: 0.1.76 @@ -1772,6 +2010,11 @@ packages: version: 4.14.1 sha256: d1e1e3b58374dc93031d6eda2420a48ea44a36c2b4766a4fdeb3710755731d76 requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/5c/23/c7abc0ca0a1526a0774eca151daeb8de62ec457e77262b66b359c3c7679e/tzdata-2025.2-py2.py3-none-any.whl + name: tzdata + version: '2025.2' + sha256: 1a403fada01ff9221ca8044d701868fa132215d84beb92242d9acd2147f667a8 + requires_python: '>=2' - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025b-h78e105d_0.conda sha256: 5aaa366385d716557e365f0a4e9c3fca43ba196872abbbe3d56bb610d131e192 md5: 4222072737ccff51314b5ece9c7d6f5a diff --git a/pyproject.toml b/pyproject.toml index 1d0a21d..c73b510 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -35,7 +35,7 @@ requires-python = ">=3.10" [project.optional-dependencies] test = ["pytest>=8.0.0", "pytest-cov", "pytest-timeout"] gpu = ["jax[cuda12]"] -benchmark = ["fire"] +benchmark = ["fire", "matplotlib", "pandas"] [project.urls] Homepage = "https://github.com/utiasDSL/crazyflow" @@ -117,7 +117,7 @@ crazyflow = { path = "./", editable = true } [tool.pixi.environments] default = { solve-group = "default" } -benchmark = { features = ["benchmark"], solve-group = "default" } +benchmark = { features = ["benchmark", "gpu"], solve-group = "default" } gpu = { features = ["gpu"], solve-group = "default" } test = { features = ["test"], solve-group = "default" } From 375cca1f88329ee8bbd8de7fc4665da9ef37b5d6 Mon Sep 17 00:00:00 2001 From: Martin Schuck Date: Fri, 15 Aug 2025 18:20:05 +0200 Subject: [PATCH 03/13] Remove mujoco physics backend --- crazyflow/sim/physics.py | 1 - crazyflow/sim/sim.py | 177 ++++++++-------------------- crazyflow/sim/structs.py | 10 +- pixi.lock | 16 ++- pyproject.toml | 4 +- tests/integration/test_randomize.py | 16 +-- tests/unit/test_sim.py | 12 +- 7 files changed, 78 insertions(+), 158 deletions(-) diff --git a/crazyflow/sim/physics.py b/crazyflow/sim/physics.py index b42499c..6957055 100644 --- a/crazyflow/sim/physics.py +++ b/crazyflow/sim/physics.py @@ -22,7 +22,6 @@ class Physics(str, Enum): """Physics mode for the simulation.""" - mujoco = "mujoco" analytical = "analytical" sys_id = "sys_id" default = analytical diff --git a/crazyflow/sim/sim.py b/crazyflow/sim/sim.py index 33a40a7..ae605ab 100644 --- a/crazyflow/sim/sim.py +++ b/crazyflow/sim/sim.py @@ -1,6 +1,6 @@ from __future__ import annotations -from functools import partial +from functools import partial, wraps from pathlib import Path from typing import TYPE_CHECKING, Any, Callable @@ -13,7 +13,7 @@ from jax import Array, Device from jax.scipy.spatial.transform import Rotation as R -from crazyflow.constants import J_INV, MASS, SIGN_MIX_MATRIX, J +from crazyflow.constants import J_INV, MASS, J from crazyflow.control.control import Control, attitude2rpm, pwm2rpm, state2attitude, thrust2pwm from crazyflow.exception import ConfigError, NotInitializedError from crazyflow.sim.integration import Integrator, euler, rk4, symplectic_euler @@ -22,8 +22,6 @@ collective_force2acceleration, collective_torque2ang_vel_deriv, rpms2collective_wrench, - rpms2motor_forces, - rpms2motor_torques, surrogate_identified_collective_wrench, ) from crazyflow.sim.structs import SimControls, SimCore, SimData, SimParams, SimState, SimStateDeriv @@ -34,6 +32,18 @@ from numpy.typing import NDArray +def requires_mujoco_sync(fn: Callable[[SimData], SimData]) -> Callable[[SimData], SimData]: + """Decorator to ensure that the simulation data is synchronized with the MuJoCo mjx data.""" + + @wraps(fn) + def wrapper(sim: Sim, *args: Any, **kwargs: Any) -> SimData: + if not sim.data.core.mjx_synced: + sim.data, sim.mjx_data = sync_sim2mjx(sim.data, sim.mjx_data, sim.mjx_model) + return fn(sim, *args, **kwargs) + + return wrapper + + class Sim: default_path = Path(__file__).parents[1] / "models/cf2/scene.xml" drone_path = Path(__file__).parents[1] / "models/cf2/cf2.xml" @@ -71,10 +81,10 @@ def __init__( # Initialize MuJoCo world and data self._xml_path = xml_path or self.default_path self.spec = self.build_mjx_spec() - self.mj_model, self.mj_data, self.mjx_model, mjx_data = self.build_mjx_model(self.spec) + self.mj_model, self.mj_data, self.mjx_model, self.mjx_data = self.build_mjx_model(self.spec) self.viewer: MujocoRenderer | None = None - self.data = self.init_data(state_freq, attitude_freq, thrust_freq, rng_key, mjx_data) + self.data = self.init_data(state_freq, attitude_freq, thrust_freq, rng_key) self.default_data: SimData self.build_default_data() @@ -90,9 +100,6 @@ def __init__( # We never drop below -0.001 (drones can't pass through the floor). We use -0.001 to # enable checks for negative z sign self.step_pipeline += (clip_floor_pos,) - # MuJoCo needs to sync after every physics step so that the next step control, wrench - # and disturbance functions see the correct state. - self.step_pipeline += (select_sync_fn(self.physics),) self.build_reset_fn() self.build_step_fn() @@ -140,6 +147,7 @@ def thrust_control(self, cmd: Array): controls = to_device(cmd, self.device) self.data = self.data.replace(controls=self.data.controls.replace(thrust=controls)) + @requires_mujoco_sync def render( self, mode: str | None = "human", @@ -160,9 +168,9 @@ def render( height=height, width=width, ) - self.mj_data.qpos[:] = self.data.mjx_data.qpos[world, :] - self.mj_data.mocap_pos[:] = self.data.mjx_data.mocap_pos[world, :] - self.mj_data.mocap_quat[:] = self.data.mjx_data.mocap_quat[world, :] + self.mj_data.qpos[:] = self.mjx_data.qpos[world, :] + self.mj_data.mocap_pos[:] = self.mjx_data.mocap_pos[world, :] + self.mj_data.mocap_quat[:] = self.mjx_data.mocap_quat[world, :] mujoco.mj_forward(self.mj_model, self.mj_data) return self.viewer.render(mode) @@ -232,20 +240,8 @@ def single_step(data: SimData, _: None) -> tuple[SimData, None]: # always use the same n_steps value for successive calls. @partial(jax.jit, static_argnames="n_steps") def step(data: SimData, n_steps: int = 1) -> SimData: - # Performance optimization: When step is called, jax checks if it can reuse a previously - # compiled version of the function. This check flattens the sim.data PyTree and compares - # the metadata of each leaf with the cached metadata. The more leaves contained in - # sim.data, the more time is spent on the cache lookup even if the function has already - # been compiled. Since mjx_model contains many PyTree nodes and it is not used by - # physics modes other than mujoco with domain randomization, we set it to None and - # capture the current sim.mjx_model in the step function's closure. Changes to the - # params are synced to mjx_model at the start of the step function. - if optimize_mjx_model := (data.mjx_model is None): - data = data.replace(mjx_model=self.mjx_model) - data = self.sync_sim2mjx(data) data, _ = jax.lax.scan(single_step, data, length=n_steps, unroll=1) - if optimize_mjx_model: - data = data.replace(mjx_model=None) + data = data.replace(core=data.core.replace(mjx_synced=False)) # Flag mjx data as stale return data self._step = step @@ -259,7 +255,7 @@ def reset(data: SimData, default_data: SimData, mask: Array | None = None) -> Si data = pytree_replace(data, default_data, mask) # Does not overwrite rng_key for fn in pipeline: data = fn(data, mask) - data = self.sync_sim2mjx(data, self.mjx_model) + data = data.replace(core=data.core.replace(mjx_synced=False)) # Flag mjx data as stale return data self._reset = reset @@ -270,7 +266,6 @@ def build_data(self): self.data.controls.attitude_freq, self.data.controls.thrust_freq, self.data.core.rng_key, - self.data.mjx_data, ) def build_default_data(self): @@ -281,13 +276,10 @@ def build_mjx(self): if self.viewer is not None: self.viewer.close() self.viewer = None - self.mj_model, self.mj_data, self.mjx_model, mjx_data = self.build_mjx_model(self.spec) - self.data = self.data.replace(mjx_data=mjx_data) - self.data = self.sync_sim2mjx(self.data, self.mjx_model) - self.default_data = self.default_data.replace(mjx_data=mjx_data) + self.mj_model, self.mj_data, self.mjx_model, self.mjx_data = self.build_mjx_model(self.spec) def init_data( - self, state_freq: int, attitude_freq: int, thrust_freq: int, rng_key: Array, mjx_data: Data + self, state_freq: int, attitude_freq: int, thrust_freq: int, rng_key: Array ) -> tuple[SimData, SimData]: """Initialize the simulation data.""" drone_ids = [self.mj_model.body(f"drone:{i}").id for i in range(self.n_drones)] @@ -298,14 +290,11 @@ def init_data( controls=SimControls.create(N, D, state_freq, attitude_freq, thrust_freq, self.device), params=SimParams.create(N, D, MASS, J, J_INV, self.device), core=SimCore.create(self.freq, N, D, drone_ids, rng_key, self.device), - mjx_data=mjx_data, - mjx_model=None, ) if D > 1: # If multiple drones, arrange them in a grid grid = grid_2d(D) states = data.states.replace(pos=data.states.pos.at[..., :2].set(grid)) data = data.replace(states=states) - data = self.sync_sim2mjx(data, self.mjx_model) return data @property @@ -343,6 +332,7 @@ def controllable(self) -> Array: raise NotImplementedError(f"Control mode {self.control} not implemented") return controllable(self.data.core.steps, self.data.core.freq, control_steps, control_freq) + @requires_mujoco_sync def contacts(self, body: str | None = None) -> Array: """Get contact information from the simulation. @@ -353,45 +343,11 @@ def contacts(self, body: str | None = None) -> Array: An boolean array of shape (n_worlds,) that is True if any contact is present. """ if body is None: - return self.data.mjx_data._impl.contact.dist < 0 + return self.mjx_data._impl.contact.dist < 0 body_id = self.mj_model.body(body).id geom_start = self.mj_model.body_geomadr[body_id] geom_count = self.mj_model.body_geomnum[body_id] - return contacts(geom_start, geom_count, self.data.mjx_data) - - @staticmethod - @jax.jit - def sync_sim2mjx(data: SimData, mjx_model: Model | None = None) -> SimData: - states = data.states - pos, quat, vel, ang_vel = states.pos, states.quat, states.vel, states.ang_vel - quat = quat[..., [3, 0, 1, 2]] # MuJoCo quat is [w, x, y, z], ours is [x, y, z, w] - qpos = rearrange(jnp.concat([pos, quat], axis=-1), "w d qpos -> w (d qpos)") - qvel = rearrange(jnp.concat([vel, ang_vel], axis=-1), "w d qvel -> w (d qvel)") - mjx_data = data.mjx_data - mjx_model = data.mjx_model if mjx_model is None else mjx_model - assert mjx_model is not None, "MuJoCo model is not initialized" - mjx_data = mjx_data.replace(qpos=qpos, qvel=qvel) - mjx_data = jax.vmap(mjx.kinematics, in_axes=(None, 0))(mjx_model, mjx_data) - mjx_data = jax.vmap(mjx.collision, in_axes=(None, 0))(mjx_model, mjx_data) - data = data.replace(mjx_data=mjx_data) - if data.mjx_model is None: # Only modify model if it is part of data - return data - # Sync model parameters such as mass and inertia for domain randomization - # This is currently not supported. See https://github.com/google-deepmind/mujoco/issues/1607 - # TODO: Implement once mjx supports batching single model fields. - return data - - @staticmethod - @jax.jit - def sync_mjx2sim(data: SimData) -> SimData: - mjx_data = data.mjx_data - qpos = mjx_data.qpos.reshape(data.core.n_worlds, data.core.n_drones, 7) - qvel = mjx_data.qvel.reshape(data.core.n_worlds, data.core.n_drones, 6) - pos, quat = jnp.split(qpos, [3], axis=-1) - vel, ang_vel = jnp.split(qvel, [3], axis=-1) - quat = quat[..., [1, 2, 3, 0]] # MuJoCo quat is [w, x, y, z], ours is [x, y, z, w] - states = data.states.replace(pos=pos, quat=quat, vel=vel, ang_vel=ang_vel) - return data.replace(states=states) + return contacts(geom_start, geom_count, self.mjx_data) @staticmethod def _reset(data: SimData, default_data: SimData, mask: Array | None = None) -> SimData: @@ -422,8 +378,6 @@ def select_wrench_fn(physics: Physics) -> Callable[[SimData], SimData]: return analytical_wrench case Physics.sys_id: return identified_wrench - case Physics.mujoco: - return mujoco_wrench case _: raise NotImplementedError(f"Physics mode {physics} not implemented") @@ -451,37 +405,14 @@ def select_integrate_fn(physics: Physics, integrator: Integrator) -> Callable[[S case _: raise NotImplementedError(f"Integrator {integrator} not implemented") - match physics: - case Physics.sys_id | Physics.analytical: - derivative_fn = select_derivative_fn(physics) - - def integrate(data: SimData) -> SimData: - data = integrate_fn(data, derivative_fn) - data = data.replace(core=data.core.replace(steps=data.core.steps + 1)) - return data - - return integrate - case Physics.mujoco: - - def integrate(data: SimData) -> SimData: - data = mjx_physics_fn(data) - data = data.replace(core=data.core.replace(steps=data.core.steps + 1)) - return data - - return integrate - case _: - raise NotImplementedError(f"Physics mode {physics} not implemented") + derivative_fn = select_derivative_fn(physics) + def integrate(data: SimData) -> SimData: + data = integrate_fn(data, derivative_fn) + data = data.replace(core=data.core.replace(steps=data.core.steps + 1)) + return data -def select_sync_fn(physics: Physics) -> Callable[[SimData], SimData]: - """Select the sync function for the given physics mode.""" - match physics: - case Physics.sys_id | Physics.analytical: - return Sim.sync_sim2mjx - case Physics.mujoco: - return Sim.sync_mjx2sim - case _: - raise NotImplementedError(f"Physics mode {physics} not implemented") + return integrate @jax.jit @@ -511,6 +442,21 @@ def contacts(geom_start: int, geom_count: int, data: Data) -> Array: return (data.contact.dist < 0) & (geom1_valid | geom2_valid) +@jax.jit +def sync_sim2mjx(data: SimData, mjx_data: Data, mjx_model: Model) -> tuple[SimData, Data]: + """Synchronize the simulation data with the MuJoCo model.""" + states = data.states + pos, quat, vel, ang_vel = states.pos, states.quat, states.vel, states.ang_vel + quat = jnp.roll(quat, 1, axis=-1) # MuJoCo quat is [w, x, y, z], ours is [x, y, z, w] + qpos = rearrange(jnp.concat([pos, quat], axis=-1), "w d qpos -> w (d qpos)") + qvel = rearrange(jnp.concat([vel, ang_vel], axis=-1), "w d qvel -> w (d qvel)") + mjx_data = mjx_data.replace(qpos=qpos, qvel=qvel) + mjx_data = jax.vmap(mjx.kinematics, in_axes=(None, 0))(mjx_model, mjx_data) + mjx_data = jax.vmap(mjx.collision, in_axes=(None, 0))(mjx_model, mjx_data) + data = data.replace(core=data.core.replace(mjx_synced=True)) + return data, mjx_data + + def step_state_controller(data: SimData) -> SimData: """Compute the updated controls for the state controller.""" states, controls = data.states, data.controls @@ -585,33 +531,6 @@ def identified_wrench(data: SimData) -> SimData: identified_derivative = analytical_derivative # We can use the same derivative function for both -def mujoco_wrench(data: SimData) -> SimData: - """Compute the wrench from the MuJoCo dynamics model.""" - forces = rpms2motor_forces(data.controls.rpms) - torques = SIGN_MIX_MATRIX[..., 2] * rpms2motor_torques(data.controls.rpms) - # Zero out external forces and torques to avoid summation over multiple steps - states = data.states - force, torque = jnp.zeros_like(states.force), jnp.zeros_like(states.torque) - states = states.replace(motor_forces=forces, motor_torques=torques, force=force, torque=torque) - return data.replace(states=states) - - -batched_mjx_step = jax.vmap(mjx.step, in_axes=(None, 0)) - - -def mjx_physics_fn(data: SimData) -> SimData: - """Step the MuJoCo simulation.""" - force_torques = jnp.concatenate([data.states.motor_forces, data.states.motor_torques], axis=-1) - force_torques = rearrange(force_torques, "w d ft -> w (d ft)") - mjx_data = data.mjx_data.replace(ctrl=force_torques) - # Add disturbances from data.states.force/torque with mjx_data.xfrc_applied - xfrc = jnp.concatenate([data.states.force, data.states.torque], axis=-1) - xfrc_applied = data.mjx_data.xfrc_applied.at[:, data.core.drone_ids, :].set(xfrc) - mjx_data = mjx_data.replace(xfrc_applied=xfrc_applied) - mjx_data = batched_mjx_step(data.mjx_model, mjx_data) - return data.replace(mjx_data=mjx_data) - - def identity(data: SimData, *args: Any, **kwargs: Any) -> SimData: """Identity function for the simulation pipeline. diff --git a/crazyflow/sim/structs.py b/crazyflow/sim/structs.py index d19fb5b..8badc33 100644 --- a/crazyflow/sim/structs.py +++ b/crazyflow/sim/structs.py @@ -186,6 +186,8 @@ class SimCore: """MuJoCo IDs of the drones in the simulation.""" rng_key: Array # (N, 1) """Random number generator key for the simulation.""" + mjx_synced: bool = field(pytree_node=False) + """Whether the simulation data is synchronized with the MuJoCo model.""" @staticmethod def create( @@ -208,6 +210,7 @@ def create( n_drones=n_drones, drone_ids=jnp.array(drone_ids, dtype=jnp.int32, device=device), rng_key=rng_key, + mjx_synced=False, ) @@ -223,10 +226,3 @@ class SimData: """Drone parameters.""" core: SimCore """Core parameters of the simulation.""" - mjx_data: Data - """MuJoCo data structure.""" - mjx_model: Model | None - """MuJoCo model structure. - - Can be set to None for performance optimizations. See `Sim.build_step` for more details. - """ diff --git a/pixi.lock b/pixi.lock index 6371a92..819d10f 100644 --- a/pixi.lock +++ b/pixi.lock @@ -329,6 +329,8 @@ environments: - pypi: https://files.pythonhosted.org/packages/a4/ed/1f1afb2e9e7f38a545d628f864d562a5ae64fe6f7a10e28ffb9b185b4e89/importlib_resources-6.5.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/2c/e1/e6716421ea10d38022b952c159d5161ca1193197fb744506875fbb87ea7b/iniconfig-2.1.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ad/de/3092df5073cd9c07c01b10612fc541538b74b02184fac90e3beada20f758/jax-0.7.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/49/ef/1fe3c10c27199fbaf593ee7c53226e4eae057d505207707cd815a8ee0764/jax_cuda12_pjrt-0.7.0-py3-none-manylinux2014_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/0d/c2/0f5698d4ececeff3cf0e9802b1f58f137adea83562cfa735591436978a49/jax_cuda12_plugin-0.7.0-cp313-cp313-manylinux2014_x86_64.whl - pypi: https://files.pythonhosted.org/packages/c7/83/7ba260095e98a5004af4fdb4315010c445441473cac41afdb973bf212deb/jaxlib-0.7.0-cp313-cp313-manylinux2014_x86_64.whl - pypi: https://files.pythonhosted.org/packages/94/54/e7d793b573f298e1c9013b8c4dade17d481164aa517d1d7148619c2cedbf/markdown_it_py-4.0.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl @@ -339,6 +341,18 @@ environments: - pypi: https://files.pythonhosted.org/packages/59/b1/965d28e5ece3e59772b79dc43144b70f73b188f8f49b4997c91a646d85a4/mujoco_mjx-3.3.5-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a0/c4/c2971a3ba4c6103a3d10c4b0f24f461ddc027f0f09763220cf35ca1401b3/nest_asyncio-1.6.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/1d/0f/571b2c7a3833ae419fe69ff7b479a78d313581785203cc70a8db90121b9a/numpy-2.3.2-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/77/3c/aa88abe01f3be3d1f8f787d1d33dc83e76fec05945f9a28fbb41cfb99cd5/nvidia_cublas_cu12-12.9.1.4-py3-none-manylinux_2_27_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/c1/2e/b84e32197e33f39907b455b83395a017e697c07a449a2b15fd07fc1c9981/nvidia_cuda_cupti_cu12-12.9.79-py3-none-manylinux_2_25_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/25/48/b54a06168a2190572a312bfe4ce443687773eb61367ced31e064953dd2f7/nvidia_cuda_nvcc_cu12-12.9.86-py3-none-manylinux2010_x86_64.manylinux_2_12_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/b8/85/e4af82cc9202023862090bfca4ea827d533329e925c758f0cde964cb54b7/nvidia_cuda_nvrtc_cu12-12.9.86-py3-none-manylinux2010_x86_64.manylinux_2_12_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/bc/46/a92db19b8309581092a3add7e6fceb4c301a3fd233969856a8cbf042cd3c/nvidia_cuda_runtime_cu12-12.9.79-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/de/14/9288024887ba320eb4e51d01cf37aab11d38f774016bcc0dedac0948d0bc/nvidia_cudnn_cu12-9.12.0.46-py3-none-manylinux_2_27_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/95/f4/61e6996dd20481ee834f57a8e9dca28b1869366a135e0d42e2aa8493bdd4/nvidia_cufft_cu12-11.4.1.4-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/33/40/79b0c64d44d6c166c0964ec1d803d067f4a145cca23e23925fd351d0e642/nvidia_cusolver_cu12-11.7.5.82-py3-none-manylinux_2_27_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/12/46/b0fd4b04f86577921feb97d8e2cf028afe04f614d17fb5013de9282c9216/nvidia_cusparse_cu12-12.5.10.65-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/c4/cb/2cf5b8e6a669c90ac6410c3a9d86881308492765b6744de5d0ce75089999/nvidia_nccl_cu12-2.27.7-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/46/0c/c75bbfb967457a0b7670b8ad267bfc4fffdf341c074e0a80db06c24ccfd4/nvidia_nvjitlink_cu12-12.9.86-py3-none-manylinux2010_x86_64.manylinux_2_12_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/3b/6c/99acb2f9eb85c29fc6f3a7ac4dccfd992e22666dd08a642b303311326a97/nvidia_nvshmem_cu12-3.3.20-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl - pypi: https://files.pythonhosted.org/packages/23/cd/066e86230ae37ed0be70aae89aabf03ca8d9f39c8aea0dec8029455b5540/opt_einsum-3.4.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/b9/33/f86091c706db1a5459f501830241afff2ecab3532725c188ea57be6e54de/optax-0.2.5-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/14/21/9632e0c6f826e2a0e19e1bcb9420fac9970696efc77ca1b37a496666f0ad/orbax_checkpoint-0.11.21-py3-none-any.whl @@ -514,7 +528,7 @@ packages: - pypi: ./ name: crazyflow version: 0.0.2 - sha256: 937042d68b254c167525629031fd6a6c44447e2c0c993fc6c00588de0c7ac3fa + sha256: 79320f2777c314c365cbb3f8e4e85b549c3624cbae37eccb37e406cd8a4fe21a requires_dist: - jax>=0.7.0 - mujoco>=3.3.0 diff --git a/pyproject.toml b/pyproject.toml index c73b510..d2f9c44 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -18,7 +18,7 @@ classifiers = [ ] dependencies = [ - "jax>=0.7.0", # 0.5.3 and 0.6.0 have a bug that causes resets to not work properly. This is related to the fusing of SimData.mjx_model into the _reset function. + "jax>=0.7.0", # 0.5.3 and 0.6.0 have a bug that causes resets to not work properly. "mujoco>=3.3.0", "mujoco-mjx>=3.3.0", "gymnasium[mujoco]>=1.2.0", @@ -119,6 +119,6 @@ crazyflow = { path = "./", editable = true } default = { solve-group = "default" } benchmark = { features = ["benchmark", "gpu"], solve-group = "default" } gpu = { features = ["gpu"], solve-group = "default" } -test = { features = ["test"], solve-group = "default" } +test = { features = ["test", "gpu"], solve-group = "default" } [tool.pixi.tasks] diff --git a/tests/integration/test_randomize.py b/tests/integration/test_randomize.py index c8cb20f..36a7f4c 100644 --- a/tests/integration/test_randomize.py +++ b/tests/integration/test_randomize.py @@ -8,12 +8,8 @@ @pytest.mark.integration -@pytest.mark.parametrize("physics", [Physics.analytical, Physics.mujoco]) -def test_randomize_mass(physics: Physics): - if physics == Physics.mujoco: # TODO: Add mujoco when implemented - pytest.skip("MuJoCo randomization not implemented yet") - - sim = Sim(n_worlds=2, n_drones=4, control=Control.state, physics=physics) +def test_randomize_mass(): + sim = Sim(n_worlds=2, n_drones=4, control=Control.state, physics=Physics.analytical) add_on_mass = np.random.uniform(-0.005, 0.005, size=(sim.n_worlds, sim.n_drones)) masses = np.ones((sim.n_worlds, sim.n_drones)) * 0.025 @@ -35,12 +31,8 @@ def test_randomize_mass(physics: Physics): @pytest.mark.integration -@pytest.mark.parametrize("physics", [Physics.analytical, Physics.mujoco]) -def test_randomize_inertia(physics: Physics): - if physics == Physics.mujoco: # TODO: Add mujoco when implemented - pytest.skip("MuJoCo randomization not implemented yet") - - sim = Sim(n_worlds=2, n_drones=4, control=Control.state, physics=physics) +def test_randomize_inertia(): + sim = Sim(n_worlds=2, n_drones=4, control=Control.state, physics=Physics.analytical) add_on_j = np.random.uniform(-1.5e-5, 1.5e-5, size=(sim.n_worlds, sim.n_drones, 3, 3)) randomized_j = J + add_on_j diff --git a/tests/unit/test_sim.py b/tests/unit/test_sim.py index bd183b4..d7cde91 100644 --- a/tests/unit/test_sim.py +++ b/tests/unit/test_sim.py @@ -7,6 +7,7 @@ from crazyflow.control import Control from crazyflow.exception import ConfigError from crazyflow.sim import Physics, Sim +from crazyflow.sim.sim import sync_sim2mjx def available_backends() -> list[str]: @@ -285,20 +286,19 @@ def test_device(device: str): sim = Sim(n_worlds=2, physics=Physics.sys_id, device=device) sim.step() assert sim.data.states.pos.device == jax.devices(device)[0] - assert sim.data.mjx_data.qpos.device == jax.devices(device)[0] @pytest.mark.unit @pytest.mark.parametrize("device", ["gpu", "cpu"]) @pytest.mark.parametrize("n_worlds", [1, 2]) @pytest.mark.parametrize("n_drones", [1, 3]) -def test_shape_consistency(device: str, n_drones: int, n_worlds: int): +def test_sync_shape_consistency(device: str, n_drones: int, n_worlds: int): skip_unavailable_device(device) sim = Sim(n_worlds=n_worlds, n_drones=n_drones, physics=Physics.sys_id, device=device) - qpos_shape, qvel_shape = sim.data.mjx_data.qpos.shape, sim.data.mjx_data.qvel.shape - sim.step() - assert sim.data.mjx_data.qpos.shape == qpos_shape, "step() should not change qpos shape" - assert sim.data.mjx_data.qvel.shape == qvel_shape, "step() should not change qvel shape" + qpos_shape, qvel_shape = sim.mjx_data.qpos.shape, sim.mjx_data.qvel.shape + _, mjx_data = sync_sim2mjx(sim.data, sim.mjx_data, sim.mjx_model) + assert mjx_data.qpos.shape == qpos_shape, "sync_sim2mjx() should not change qpos shape" + assert mjx_data.qvel.shape == qvel_shape, "sync_sim2mjx() should not change qvel shape" @pytest.mark.unit From 0855637d33ae5025c81004a02b03b19620f26cde Mon Sep 17 00:00:00 2001 From: Martin Schuck Date: Fri, 15 Aug 2025 19:27:57 +0200 Subject: [PATCH 04/13] Fix ruff. Fix testing. Update benchmark --- .github/workflows/testing.yml | 35 +++++++++++++++++++--------------- crazyflow/sim/structs.py | 5 ----- docs/img/performance.png | Bin 232296 -> 227022 bytes pyproject.toml | 10 +++++++++- 4 files changed, 29 insertions(+), 21 deletions(-) diff --git a/.github/workflows/testing.yml b/.github/workflows/testing.yml index 782bc5c..2c65233 100644 --- a/.github/workflows/testing.yml +++ b/.github/workflows/testing.yml @@ -1,22 +1,27 @@ -name: Testing # Skips RL tests because stable-baselines3 comes with a lot of heavy-weight dependencies - -on: [push] +name: Testing +on: [push, pull_request] jobs: test: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - - uses: mamba-org/setup-micromamba@v1 + + - name: Setup Pixi (installs pixi + caches envs) # https://github.com/marketplace/actions/setup-pixi + uses: prefix-dev/setup-pixi@v0.9.0 # pin the action version with: - micromamba-version: '2.0.2-1' # any version from https://github.com/mamba-org/micromamba-releases - environment-name: test-env - init-shell: bash - create-args: python=3.11 - cache-environment: true - - name: Install dependencies and package - run: pip install .[test] - shell: micromamba-shell {0} - - name: Test with pytest - run: pytest tests --cov=crazyflow - shell: micromamba-shell {0} + pixi-version: v0.49.0 # pin the pixi binary version (optional) + cache: true # enable caching of installed envs + # only write new caches on main pushes (TODO: Enable) + # cache-write: ${{ github.event_name == 'push' && github.ref_name == 'main' }} + # ensure the 'test' environment(s) are installed + environments: test + # don't activate env (we'll call pixi run -e test explicitly) + activate-environment: false + # prefer using existing lockfile if present (faster, deterministic) + locked: true + + - name: Verify pixi and run tests + run: | + pixi --version + pixi run -e test pytest \ No newline at end of file diff --git a/crazyflow/sim/structs.py b/crazyflow/sim/structs.py index 8badc33..960f3f2 100644 --- a/crazyflow/sim/structs.py +++ b/crazyflow/sim/structs.py @@ -1,15 +1,10 @@ from __future__ import annotations -from typing import TYPE_CHECKING - import jax import jax.numpy as jnp from flax.struct import dataclass, field from jax import Array, Device -if TYPE_CHECKING: - from mujoco.mjx import Data, Model - @dataclass class SimState: diff --git a/docs/img/performance.png b/docs/img/performance.png index 91f11fcd0e5e3db9b6969330d8c070b5b4482e1f..78c9056512d5be0c444355acd18ed9633740c2fa 100644 GIT binary patch literal 227022 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 VDjl5U#?u+xvCV?T`O6P~`!CmW@%{h+ literal 232296 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

!6uCX6Es2>-CmrJ$XUC@Gd{rAcKqs@-A`UNZ%iA z=+ceoc9TG_ZVK!;l9%^OW&bRU&6S(;ZdSz$kR>qDHPV)SYG0;?HG%hLFF!s^hZZoz zHPR995)beRdW>oA#YgZaSb7BC|WvJ6zhrA>@s5!BQt5mY+bS*Qohs@cP? z@xw&dn_a)<>At$3q5%j<@^dVts1!Sn70mTBIAHLf(C|$-8#CYr7n>iUCE% zJ7>=NGEz$HDp9=VuKzI{X)AA+`j(}LBIV%<0kOFx^({9N4mB2>s!!CYR%Q2&208r+ z5@R-ZEBFbNmzI{+%7UIm#~HKnnPY8_j$L~UI+d$(YGy=$)M;Q$?g;OyR}kt|H#t{hogH3TXF#$%DCsA3 z@#fDAA{kp+MTWw8~dnbROW1J{ui$oxf>1`9Nn-uQGGVdvsJGt{^P@{ z4o8B&Q8Qroxq9T@mq)K2w2fPOlCSH!-MK!T(P`W|5Y%$D>yu;|*;8^`xgYephSy{- z{3zcx0=&Ns^s-Lp|rv^8r86T~iaL;_mNd4!wFY^W=*lJ!HHSx`#fp zCTQj2*vX!Rj|&9`{_FHp3&jjLUCQgABiN+?-w+lVcOZe2xafo=rybN_myhd!_fqi| z(gzbJWB^ZV0_G0X+<%BBgcb}4W4KZ0p;65X-N2!)OF}O%$u>_Bi3l0oRd@|4)FPvw z#+j|fA@AmmpTXIJv~O?p@kg_eFwq#!gAP*=td_VjzGAe2|eDlqPNk_a@f)W5oWlm8`2z<52o3AhO<4yCoNR)hvQX&!EHI^Ta*2$l%E*gEOxQvXbj-ZQXUnlQeL%&3X} zHa|Ny_QsLx5<%^@$k^8K`3%F0$ppL==$D`LUUb1E3S(fV{@X)#%7FPq2xr~o0+Lyv z&<*eBrrx}%0Rwfw>)Vq6$t`)K0bVAO32!n6Aalt7K883-pVW|pgL(jRFn?RL!0{n!y)UnObz1*L2z%CbpWsi|)jYA0^Y%PC@bR;+a`wpV5G`GIwQ+G=QQ5Qn(fdKe zd_l?17$`DXr3jwX_|Do$mz;evn_wkIu3}VI-QelV`HI{Z2noue2X}6U2XxAP_ zjiQJm?fYKZq#a2}i}pPv?L~WO`JY#2`M&?-_&vw*zOR>hdb;n=eJ$s8p6B)DZt`5P zr_nRonMzukupw|)_e7dl)Zq~%0Aw2VGFrCXv`^HpnOag5pA9`kwvmFjR%!-@BBu2{ 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