[build-system] requires = ["hatchling"] build-backend = "hatchling.build" [project] name = "orthorl" version = "2.0.0" description = "OrthoRL: RL environment for orthodontic treatment planning — 24-step sequential aligner staging in SE(3) space" readme = "README.md" requires-python = ">=3.11" license = { text = "MIT" } keywords = ["openenv", "reinforcement-learning", "dental", "orthodontics", "se3"] dependencies = [ # 0.2.3 ships both `openenv` and `openenv_core` packages; older 0.1.x # only has `openenv_core` and breaks the `from openenv.core.*` imports # used throughout server/. "openenv-core>=0.2.3", "fastapi", "uvicorn[standard]", "pydantic>=2.0", "numpy", "scipy", "openai", "matplotlib", "Pillow", "requests", "trimesh>=4.11.5", # Spec 3.9: 3D Plotly trajectory visualisation "plotly>=5.18,<6.0", "imageio>=2.9", # Spec 2.7 / 2.8: interactive Gradio demo frontend "gradio>=5.0", ] [project.scripts] # Entry point used by openenv serve and `uv run server` server = "server.app:main" [tool.hatch.build.targets.wheel] # Include both the server package and top-level modules packages = ["server"] include = ["models.py", "client.py", "__init__.py"] [tool.uv] # Prefer binary wheels; skip building from source when possible compile-bytecode = true [tool.ruff] line-length = 100 target-version = "py311" [tool.ruff.lint] select = ["E", "F", "I"] ignore = ["E501"] # handled by formatter [dependency-groups] dev = [ "huggingface-hub[cli]>=1.9.0", "pytest>=9.0.3", ]