[project]
name = "openpi"
version = "0.1.0"
description = "Physical Intelligence open source repo"
readme = "README.md"
requires-python = ">=3.11"
license = { file = "LICENSE" }
dependencies = [
    "augmax>=0.3.4",
    "dm-tree>=0.1.8",
    "einops>=0.8.0",
    "equinox>=0.11.8",
    "flatbuffers>=24.3.25",
    "flax==0.10.2",
    "fsspec[gcs]>=2024.6.0",
    "gym-aloha>=0.1.1",
    "imageio>=2.36.1",
    "jax[cuda12]==0.4.36",
    "jaxtyping==0.2.36",
    "lerobot",
    "ml_collections==1.0.0",
    "numpy>=1.26.4",
    "numpydantic>=1.6.6",
    "opencv-python>=4.10.0.84",
    "openpi-client",
    "orbax-checkpoint==0.10.2",
    "pillow>=11.0.0",
    "ruff>=0.7.1",
    "s3fs>=2024.9.0",
    "sentencepiece>=0.2.0",
    "torch>=2.5.1",
    "tqdm-loggable>=0.2",
    "typing-extensions>=4.12.2",
    "tyro>=0.9.4",
    "wandb>=0.19.1",
    "boto3>=1.35.7",
    "types-boto3[boto3,s3]>=1.35.7",
    "filelock>=3.16.1",
    "beartype>=0.19.0",
]


[project.urls]
Repository = "https://github.com/Physical-Intelligence/openpi"

[dependency-groups]
dev = [
    "pytest>=8.3.4",
    "ruff>=0.8.3",
    "pre-commit>=4.0.1",
    "ipykernel>=6.29.5",
    "ipywidgets>=8.1.5",
    "matplotlib>=3.10.0",
]


[tool.uv.sources]
openpi-client = { workspace = true }
lerobot = { git = "https://github.com/huggingface/lerobot", rev = "66f87365988cb5424435ea03b428426b4ede98cb" }

[tool.uv.workspace]
members = ["packages/*"]

[tool.ruff]
line-length = 120
target-version = "py311"
extend-exclude = ["docker", "third_party"]

[tool.ruff.lint]
# https://docs.astral.sh/ruff/rules/
select = [
    "B",
    "C4",
    "DTZ",
    "E4",
    "E7",
    "E9",
    "F",
    "FBT",
    "FURB",
    "I",
    "ICN",
    "ISC",
    "LOG",
    "N",
    "PD",
    "PERF",
    "PIE",
    "PLC",
    "PLE",
    "PLR1",
    "PLR5",
    "PLW",
    "PT",
    "PTH",
    "Q",
    "RET",
    "RUF",
    "SIM",
    "SLF",
    "T10",
    "T20",
    "UP",
    "W",
]
ignore = [
    "F722",  # Conflicts with array typing.
    "T201",  # We use print statements.
    "PD008", # Lots of false positives.
]
unfixable = [
    "B905", # Fix defaults to strict=False, which is not what we want.
]

[tool.ruff.lint.isort]
force-single-line = true
force-sort-within-sections = true
single-line-exclusions = ["collections.abc", "typing", "typing_extensions"]
known-third-party = ["wandb"]

[build-system]
requires = ["hatchling"]
build-backend = "hatchling.build"
