[build-system] requires = ["setuptools>=61.0", "wheel"] build-backend = "setuptools.build_meta" [project] name = "toaster" version = "0.1.0" description = "Annotate lidar point clouds in 3D, with pluggable clustering/segmentation models." readme = "README.md" requires-python = ">=3.11" license = { text = "MIT" } authors = [{ name = "Augustin Bresset", email = "augustin.bresset@gmail.com" }] keywords = ["lidar", "point-cloud", "annotation", "segmentation", "clustering"] dependencies = [ "numpy", "PyYAML", "scikit-learn>=1.3", "laspy", "plyfile", "fastapi", "uvicorn[standard]", # Webview host for the desktop window. The pyside6 extra pulls PySide6 (LGPL, # with QtWebEngine) and the qtpy shim pywebview's Qt backend imports. For a # fully Qt-free host install system WebKitGTK and drop this to a bare pywebview. "pywebview[pyside6]", ] [project.optional-dependencies] # apairo 0.5.0+ for ChannelWriter (label write-back); pinned to the release tag. apairo = ["apairo @ git+https://github.com/apairo-robotics/apairo.git@v0.5.0"] open3d = ["open3d"] hdbscan = ["hdbscan"] csf = ["cloth-simulation-filter"] # CSF ground-detection segmenter models = ["onnxruntime-gpu"] torch = ["torch"] viewer3d = ["pyvista"] # legacy VTK Viewer backend (toaster.viewer.PyVistaViewer) dev = ["pytest", "ruff", "httpx", "playwright"] # playwright: `playwright install chromium` [project.scripts] toaster = "toaster.desktop:main" toaster-web = "toaster.api.server:main" [project.urls] Homepage = "https://github.com/augustin-bresset/toaster" Repository = "https://github.com/augustin-bresset/toaster" Issues = "https://github.com/augustin-bresset/toaster/issues" Changelog = "https://github.com/augustin-bresset/toaster/blob/main/CHANGELOG.md" [tool.setuptools.packages.find] where = ["."] include = ["toaster*"] [tool.setuptools.package-data] # web/js/*.js is non-recursive: the engine (web/js/engine/) and vendored three # (web/vendor/) must be listed explicitly, or a wheel/package install (the HF # Space) ships no engine and the 3D view loads nothing. toaster = [ "py.typed", "schemas/*.yaml", "web/*.html", "web/*.css", "web/*.svg", "web/*.png", "web/js/*.js", "web/js/engine/*.js", "web/vendor/three/*.js", "web/vendor/three/addons/controls/*.js", ] [tool.pytest.ini_options] testpaths = ["tests"] [tool.ruff] target-version = "py311" line-length = 100 [tool.ruff.lint] select = ["E", "F", "I", "UP", "B", "W"]