content: [build-system]
  requires = ["setuptools", "setuptools-scm"]
  build-backend = "setuptools.build_meta"
  
  [project]
  name = "monty"
  maintainers = [
      { name = "Shyue Ping Ong", email = "ongsp@ucsd.edu" },
  ]
  description = "Monty is the missing complement to Python."
  readme = "README.md"
  requires-python = ">=3.9"
  classifiers = [
      "Programming Language :: Python :: 3",
      "Programming Language :: Python :: 3.9",
      "Programming Language :: Python :: 3.10",
      "Programming Language :: Python :: 3.11",
      "Programming Language :: Python :: 3.12",
      "Programming Language :: Python :: 3.13",
      "Development Status :: 4 - Beta",
      "Intended Audience :: Developers",
      "License :: OSI Approved :: MIT License",
      "Operating System :: OS Independent",
      "Topic :: Software Development :: Libraries :: Python Modules",
  ]
  dependencies = [
    "ruamel.yaml",
    "numpy",
  ]
  version = "2025.3.3"
  
  [project.optional-dependencies]
  # dev is for "dev" module, not for development
  dev = ["ipython"]
  json = [
    "pymongo",
    "orjson>=3.6.1",
    "pandas",
    "pydantic",
    "pint",
    # Note: need torch>=2.3.0 for numpy 2 # 719
    "torch",
  ]
  multiprocessing = ["tqdm"]
  optional = ["monty[dev,json,multiprocessing,serialization]"]
  serialization = ["msgpack"]
  task = ["requests", "invoke"]
  
  [tool.setuptools.packages.find]
  where = ["src"]
  include = ["monty", "monty.*"]
  
  [tool.black]
  line-length = 120
  target-version = ["py39"]
  include = '\.pyi?$'
  exclude = '''
  (
    /(
        \.eggs         # exclude a few common directories in the
      | \.git          # root of the project
      | \.hg
      | \.mypy_cache
      | \.tox
      | \.venv
      | _build
      | buck-out
      | build
      | dist
      | tests
    )/
  )
  '''
  
  [tool.coverage.run]
  branch = true
  
  [tool.coverage.report]
  exclude_also = [
      "@deprecated",
      "def __repr__",
      "if self.debug:",
      "if settings.DEBUG",
      "pragma: no cover",
      "raise AssertionError",
      "raise NotImplementedError",
      "show_plot",
      "if TYPE_CHECKING:",
      "except ImportError:"
  ]
  
  [tool.mypy]
  ignore_missing_imports = true
  
  [tool.ruff.lint]
  select = [
    "I",  # isort
  ]
  
  [tool.ruff.lint.isort]
  required-imports = ["from __future__ import annotations"]
  known-first-party = ["monty"]
  
  [tool.uv]
  default-groups = "all"
  
  [dependency-groups]
  dev = [
      "coverage>=7.7.1",
      "pre-commit>=4.2.0",
      "pytest>=8.3.5",
      "pytest-cov>=6.0.0",
  ]
  lint = [
      "mypy>=1.15.0",
      "ruff>=0.11.2",
  ]
  maintain = [
      "sphinx>=7.4.7",
      "sphinx-rtd-theme>=3.0.2",
  ]
  