content: [build-system]
  requires = ["setuptools>=61.0"]
  build-backend = "setuptools.build_meta"
  
  [project]
  name = "viser"
  version = "0.2.7"
  description = "3D visualization + Python"
  readme = "README.md"
  license = { text="MIT" }
  requires-python = ">=3.8"
  classifiers = [
      "Programming Language :: Python :: 3",
      "Programming Language :: Python :: 3.8",
      "Programming Language :: Python :: 3.9",
      "Programming Language :: Python :: 3.10",
      "Programming Language :: Python :: 3.11",
      "Programming Language :: Python :: 3.12",
      "License :: OSI Approved :: MIT License",
      "Operating System :: OS Independent"
  ]
  dependencies = [
      "websockets>=10.4",
      "numpy>=1.0.0",
      "msgspec>=0.18.6",
      "imageio>=2.0.0",
      "pyliblzfse>=0.4.1; platform_system!='Windows'",
      "scikit-image>=0.18.0",
      "scipy>=1.7.3",
      "tqdm>=4.0.0",
      "tyro>=0.2.0",
      "rich>=13.3.3",
      "trimesh>=3.21.7",
      "nodeenv>=1.8.0",
      "psutil>=5.9.5",
      "yourdfpy>=0.0.53",
      "plyfile>=1.0.2"
  ]
  
  [project.optional-dependencies]
  dev = [
      "pyright>=1.1.308",
      "ruff==0.6.2",
      "pre-commit==3.3.2",
  ]
  examples = [
      "torch>=1.13.1",
      "matplotlib>=3.7.1",
      "plotly>=5.21.0",
      "robot_descriptions>=1.10.0",
      "gdown>=4.6.6",
      "plyfile",
  ]
  
  [project.urls]
  "GitHub" = "https://github.com/nerfstudio-project/viser"
  
  # <>
  # Important: in the ./.github/workflows/publish.yml action, we have sed
  # commands that assume the `viser = ...` line below directly follows
  # `[tool.setuptools.package-data]`. We use this to remove the client source
  # from PyPI builds.
  #
  # We should make sure that any modifications to the package-data list remain
  # compatible with the sed commands!
  #
  # We keep the client source in by default to support things like pip
  # installation via the Git URL, because build artifacts aren't
  # version-controlled.
  [tool.setuptools.package-data]
  viser = ["py.typed", "*.pyi", "_icons/tabler-icons.tar", "client/**/*", "client/**/.*"]
  # </>
  
  [tool.setuptools.exclude-package-data]
  # We exclude node_modules to prevent long build times for wheels when
  # installing from source, eg via `pip install .`.
  #
  # https://github.com/nerfstudio-project/viser/issues/271
  viser = ["**/node_modules/**"]
  
  [project.scripts]
  viser-dev-checks = "viser.scripts.dev_checks:entrypoint"
  
  [tool.pyright]
  exclude = ["./docs/**/*", "./examples/assets/**/*", "./src/viser/client/.nodeenv", "./build"]
  
  [tool.ruff]
  lint.select = [
      "E",  # pycodestyle errors.
      "F",  # Pyflakes rules.
      "PLC",  # Pylint convention warnings.
      "PLE",  # Pylint errors.
      "PLR",  # Pylint refactor recommendations.
      "PLW",  # Pylint warnings.
      "I", # Import sorting.
  ]
  lint.ignore = [
      "E741", # Ambiguous variable name. (l, O, or I)
      "E501",  # Line too long.
      "E721",  # Do not compare types, use `isinstance()`.
      "F722",  # Forward annotation false positive from jaxtyping. Should be caught by pyright.
      "F821",  # Forward annotation false positive from jaxtyping. Should be caught by pyright.
      "PLR2004",  # Magic value used in comparison.
      "PLR0915",  # Too many statements.
      "PLR0913",  # Too many arguments.
      "PLC0414",  # Import alias does not rename variable. (this is used for exporting names)
      "PLC1901",  # Use falsey strings.
      "PLR5501",  # Use `elif` instead of `else if`.
      "PLR0911",  # Too many return statements.
      "PLR0912",  # Too many branches.
      "PLW0603",  # Globa statement updates are discouraged.
      "PLW2901",  # For loop variable overwritten.
      "PLW0642",  # Reassigned self in instance method.
  ]
  exclude = [ ".nodeenv" ]
  