[build-system] requires = ["hatchling>=1.24"] build-backend = "hatchling.build" [project] name = "roboeval" version = "0.1.0" description = "Evaluation harness and failure-mode study for open-source robot learning policies with residual RL fine-tuning." readme = "README.md" requires-python = ">=3.11,<3.12" license = { text = "MIT" } authors = [{ name = "Rubeno Dechua" }] keywords = [ "robotics", "imitation-learning", "reinforcement-learning", "evaluation", "act", "diffusion-policy", ] classifiers = [ "Development Status :: 3 - Alpha", "Programming Language :: Python :: 3.11", "License :: OSI Approved :: MIT License", "Intended Audience :: Science/Research", "Topic :: Scientific/Engineering :: Artificial Intelligence", ] dependencies = [ "lerobot==0.4.4", "gymnasium>=0.29,<2.0", "mujoco>=3.0", "stable-baselines3>=2.3", "hydra-core>=1.3", "wandb>=0.16", "plotly>=5.20", "dash>=2.17", "seaborn>=0.13", "matplotlib>=3.8", ] [project.optional-dependencies] dev = [ "ruff>=0.5,<0.6", "mypy>=1.10", "pytest>=8.0", "pytest-cov>=5.0", "pre-commit>=3.7", "hatchling>=1.24", ] docs = [ "mkdocs>=1.6", "mkdocs-material>=9.5", "mkdocstrings[python]>=0.25", ] [project.scripts] roboeval = "roboeval.cli:main" [project.urls] Homepage = "https://github.com/RubenoDechua/roboeval" Documentation = "https://github.com/RubenoDechua/roboeval#readme" [tool.hatch.build.targets.wheel] packages = ["roboeval"] # --------------------------------------------------------------------------- # Ruff # --------------------------------------------------------------------------- [tool.ruff] line-length = 88 target-version = "py311" extend-exclude = [".venv", "analysis", "docs/RoboEval_PRD_Rubeno_Dechua.docx"] [tool.ruff.lint] select = [ "E", "F", "W", # pycodestyle + pyflakes "I", # isort "B", # bugbear "N", # pep8-naming "UP", # pyupgrade "ANN", # flake8-annotations "D", # pydocstyle "RUF", # ruff-specific "SIM", # flake8-simplify "PTH", # use pathlib "BLE", # blind-except ] ignore = [ "D203", # one-blank-line-before-class (conflicts with D211) "D213", # multi-line-summary-second-line (conflicts with D212) "ANN101", # type annotation for self — deprecated in modern Python typing "ANN102", # type annotation for cls — deprecated in modern Python typing ] [tool.ruff.lint.pydocstyle] convention = "google" [tool.ruff.lint.per-file-ignores] "tests/**" = ["D", "ANN"] "roboeval/policies/act_loader.py" = ["ANN401"] # lerobot internals untyped "roboeval/evaluation/logger.py" = ["ANN401"] # wandb internals untyped "roboeval/evaluation/calibration.py" = ["ANN401"] # JSON values are heterogenous "roboeval/envs/perturb.py" = ["ANN401"] # per-kind kwargs are heterogenous "roboeval/cli.py" = ["ANN401"] # OmegaConf cfg + env factory closures "scripts/**" = ["ANN401", "D103"] # wandb + table-row values untyped "roboeval/residual/composite.py" = ["ANN401"] # SB3 BaseAlgorithm.predict signature # --------------------------------------------------------------------------- # Mypy # --------------------------------------------------------------------------- [tool.mypy] python_version = "3.11" strict = true warn_unreachable = true warn_redundant_casts = true warn_unused_ignores = true no_implicit_reexport = true show_error_codes = true files = ["roboeval"] [[tool.mypy.overrides]] module = [ "lerobot.*", "gym_aloha.*", "gymnasium.*", "mujoco.*", "stable_baselines3.*", "wandb.*", "plotly.*", "dash.*", "seaborn.*", "matplotlib.*", "hydra.*", "omegaconf.*", "torch.*", ] ignore_missing_imports = true # --------------------------------------------------------------------------- # Pytest # --------------------------------------------------------------------------- [tool.pytest.ini_options] minversion = "8.0" addopts = "-ra -q --strict-markers -m 'not slow'" testpaths = ["tests"] markers = [ "slow: requires lerobot/mujoco/checkpoint downloads; skip in CI (run locally with `pytest -m slow`).", ]