content: [build-system]
  requires = ["scikit-build-core >=0.11.2"]
  build-backend = "scikit_build_core.build"
  
  [project]
  name = "pybind11"
  description = "Seamless operability between C++11 and Python"
  authors = [{name = "Wenzel Jakob", email = "wenzel.jakob@epfl.ch"}]
  license = "BSD-3-Clause"
  license-files = ["LICENSE"]
  readme = "README.rst"
  classifiers = [
      "Development Status :: 5 - Production/Stable",
      "Intended Audience :: Developers",
      "Topic :: Software Development :: Libraries :: Python Modules",
      "Topic :: Utilities",
      "Programming Language :: C++",
      "Programming Language :: Python :: 3 :: Only",
      "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",
      "Programming Language :: Python :: 3.13",
      "Programming Language :: Python :: 3.14",
      "Programming Language :: Python :: Implementation :: PyPy",
      "Programming Language :: Python :: Implementation :: CPython",
      "Programming Language :: C++",
      "Topic :: Software Development :: Libraries :: Python Modules",
  ]
  keywords = [
      "C++11",
      "Python bindings",
  ]
  dynamic = ["version", "optional-dependencies"]
  requires-python = ">=3.8"
  
  [project.urls]
  Homepage = "https://github.com/pybind/pybind11"
  Documentation = "https://pybind11.readthedocs.io/"
  "Bug Tracker" = "https://github.com/pybind/pybind11/issues"
  Discussions = "https://github.com/pybind/pybind11/discussions"
  Changelog = "https://pybind11.readthedocs.io/en/latest/changelog.html"
  Chat = "https://gitter.im/pybind/Lobby"
  
  [project.scripts]
  pybind11-config = "pybind11.__main__:main"
  
  [project.entry-points."pipx.run"]
  pybind11 = "pybind11.__main__:main"
  
  [project.entry-points.pkg_config]
  pybind11 = "pybind11.share.pkgconfig"
  
  
  [dependency-groups]
  test = [
    "pytest",
    "build",
    "tomlkit",
  ]
  dev = [{ include-group = "test" }]
  
  
  [tool.scikit-build]
  minimum-version = "build-system.requires"
  sdist.exclude = [
    "/docs/**",
    "/.**",
  ]
  wheel.install-dir = "pybind11"
  wheel.platlib = false
  
  [tool.scikit-build.cmake.define]
  BUILD_TESTING = false
  PYBIND11_NOPYTHON = true
  prefix_for_pc_file = "${pcfiledir}/../../"
  
  [tool.scikit-build.metadata.version]
  provider = "scikit_build_core.metadata.regex"
  input = "include/pybind11/detail/common.h"
  regex = '''(?sx)
  \#define \s+ PYBIND11_VERSION_MAJOR \s+ (?P<major>\d+) .*?
  \#define \s+ PYBIND11_VERSION_MINOR \s+ (?P<minor>\d+) .*?
  \#define \s+ PYBIND11_VERSION_PATCH \s+ (?P<patch>\S+)
  '''
  result = "{major}.{minor}.{patch}"
  
  [tool.scikit-build.metadata.optional-dependencies]
  provider = "scikit_build_core.metadata.template"
  result = { global = ["pybind11-global=={project[version]}"]}
  
  [[tool.scikit-build.generate]]
  path = "pybind11/_version.py"
  template = '''
  from __future__ import annotations
  
  
  def _to_int(s: str) -> int | str:
      try:
          return int(s)
      except ValueError:
          return s
  
  
  __version__ = "$version"
  version_info = tuple(_to_int(s) for s in __version__.split("."))
  '''
  
  
  [tool.uv]
  # Can't use tool.uv.sources with requirements.txt
  index-strategy = "unsafe-best-match"
  # This extra confuses uv
  override-dependencies = ["pybind11-global"]
  
  
  [tool.mypy]
  files = ["pybind11"]
  python_version = "3.8"
  strict = true
  enable_error_code = ["ignore-without-code", "redundant-expr", "truthy-bool"]
  warn_unreachable = true
  
  [[tool.mypy.overrides]]
  module = ["ghapi.*", "tomlkit"]  # tomlkit has types, but not very helpful
  ignore_missing_imports = true
  
  
  [tool.pylint]
  master.py-version = "3.8"
  reports.output-format = "colorized"
  messages_control.disable = [
    "design",
    "fixme",
    "imports",
    "line-too-long",
    "imports",
    "invalid-name",
    "protected-access",
    "missing-module-docstring",
    "unused-argument",  # covered by Ruff ARG
    "consider-using-f-string", # triggers in _version.py incorrectly
  ]
  
  [tool.ruff.lint]
  extend-select = [
    "B",           # flake8-bugbear
    "I",           # isort
    "N",           # pep8-naming
    "ARG",         # flake8-unused-arguments
    "C4",          # flake8-comprehensions
    "EM",          # flake8-errmsg
    "ICN",         # flake8-import-conventions
    "PGH",         # pygrep-hooks
    "PIE",         # flake8-pie
    "PL",          # pylint
    "PT",          # flake8-pytest-style
    "RET",         # flake8-return
    "RUF100",      # Ruff-specific
    "SIM",         # flake8-simplify
    "UP",          # pyupgrade
    "YTT",         # flake8-2020
  ]
  ignore = [
    "PLR",     # Design related pylint
    "PT011",   # Too broad with raises in pytest
    "SIM118",  # iter(x) is not always the same as iter(x.keys())
    "PLC0415", # We import in functions for various reasons
  ]
  isort.known-first-party = ["env", "pybind11_cross_module_tests", "pybind11_tests"]
  isort.required-imports = ["from __future__ import annotations"]
  
  
  [tool.ruff.lint.per-file-ignores]
  "tests/**" = [
    "EM",
    "N",
    "E721",
  ]
  "tests/test_call_policies.py" = ["PLC1901"]
  
  [tool.repo-review]
  ignore = ["PP"]
  