content: [build-system]
  requires = ["setuptools>=64", "setuptools_scm[toml]>=8"]
  build-backend = "setuptools.build_meta"
  
  [tool.setuptools.dynamic]
  dependencies = { file = ["requirements.txt"] }
  
  [tool.setuptools_scm]
  
  
  [tool.setuptools.packages.find]
  where = ["src"]
  include = ["inspect_ai*"]
  
  
  [tool.ruff]
  extend-exclude = ["docs"]
  src = ["src"]
  
  [tool.ruff.lint]
  select = [
      "E",      # pycodestyle errors
      "W",      # pycodestyle warnings
      "F",      # flake8
      "D",      # pydocstyle
      "I",      # isort
      "SIM101", # duplicate isinstance
      "UP038",  # non-pep604-isinstance
      # "RET", # flake8-return
      # "RUF", # ruff rules
  ]
  ignore = ["E203", "E501", "D10", "D212", "D415"]
  
  [tool.ruff.lint.pydocstyle]
  convention = "google"
  
  [tool.pytest.ini_options]
  minversion = "7.0"
  addopts = "-rA --doctest-modules --color=yes"
  testpaths = ["tests"]
  doctest_optionflags = ["NORMALIZE_WHITESPACE", "IGNORE_EXCEPTION_DETAIL"]
  norecursedirs = [
      "tests/test_helpers",
      "tests/test_package",
      "tests/test_task_list",
  ]
  asyncio_mode = "auto"
  asyncio_default_fixture_loop_scope = "function"
  log_level = "warning"
  
  [tool.mypy]
  exclude = ["tests/test_package", "build", "(?:^|/)_resources/", "examples/bridge", "src/inspect_tool_support"]
  warn_unused_ignores = true
  no_implicit_reexport = true
  strict_equality = true
  enable_error_code = "possibly-undefined"
  warn_redundant_casts = true
  warn_unused_configs = true
  # This mypy_path config is a bit odd, it's included to get mypy to resolve
  # imports correctly in test files. For example, imports such as
  # `from test_helpers.utils import ...` fail mypy without this configuration,
  # despite actually working when running tests.
  #
  # Revisit this if it interferes with mypy running on `src`  due to name
  # conflicts, but that will hopefully be unlikely.
  mypy_path = "tests"
  
  [[tool.mypy.overrides]]
  module = ["inspect_ai.*"]
  warn_return_any = true
  disallow_untyped_defs = true
  disallow_any_generics = true
  disallow_subclassing_any = true
  disallow_untyped_calls = true
  disallow_incomplete_defs = true
  check_untyped_defs = true
  disallow_untyped_decorators = true
  extra_checks = true
  disable_error_code = "unused-ignore"
  
  [tool.check-wheel-contents]
  ignore = ["W002", "W009"]
  
  [project]
  name = "inspect_ai"
  description = "Framework for large language model evaluations"
  authors = [{ name = "UK AI Security Institute" }]
  readme = "README.md"
  requires-python = ">=3.10"
  license = { text = "MIT License" }
  dynamic = ["version", "dependencies"]
  classifiers = [
      "Development Status :: 4 - Beta",
      "Environment :: Console",
      "Intended Audience :: Science/Research",
      "Intended Audience :: Developers",
      "License :: OSI Approved :: MIT License",
      "Natural Language :: English",
      "Programming Language :: Python :: 3",
      "Topic :: Scientific/Engineering :: Artificial Intelligence",
      "Typing :: Typed",
      "Operating System :: OS Independent",
  ]
  
  [project.urls]
  Documentation = "https://inspect.aisi.org.uk/"
  "Source Code" = "https://github.com/UKGovernmentBEIS/inspect_ai"
  "Issue Tracker" = "https://github.com/UKGovernmentBEIS/inspect_ai/issues"
  
  [project.scripts]
  inspect = "inspect_ai._cli.main:main"
  
  [project.optional-dependencies]
  dev = [
      "anthropic", 
      "aioboto3", 
      "azure-ai-inference",
      "google-cloud-aiplatform",
      "google-genai",
      "goodfire",
      "griffe",
      "groq", 
      "ipython",
      "markdown",
      "mistralai",
      "moto[server]",
      "mypy",
      "nbformat",
      "openai",
      "panflute",
      "pip",
      "pre-commit",
      "pylint",
      "pytest",
      "pytest-asyncio",
      "pytest-cov",
      "pytest-dotenv",
      "pytest-xdist",
      "ruff==0.9.6", # match version specified in .pre-commit-config.yaml
      "textual-dev>=0.86.2",
      "trio",
      "types-Markdown",
      "types-PyYAML",
      "types-beautifulsoup4",
      "types-aioboto3",
      "types-boto3",
      "types-botocore",
      "types-jsonpatch",
      "types-jsonschema",
      "types-protobuf",
      "types-psutil",
      "types-python-dateutil"
  ]
  doc = ["quarto-cli==1.5.57", "jupyter", "panflute", "markdown", "griffe"]
  dist = ["twine", "build"]
  