content: [project]
      authors=[{name="METR", email="info@metr.org"}]
      description="viv CLI"
      name="viv-cli"
      requires-python=">=3.11,<4"
      version="1.0.0"
  
      dependencies=[
          "fire~=0.7.0",
          "fsspec>=2023.1.0,<=2024.12.0",
          # If we update the version of inspect-ai we should also update server/src/inspect/inspectLogTypes.d.ts
          "inspect-ai>=0.3.137",
          "pydantic>=1.10.8",
          "requests>=2.31.0,<3.0",
          "sentry-sdk>=2.0.1,<3.0",
          "typeguard~=4.2.1",
      ]
  
      [project.scripts]
          viv="viv_cli.main:main"
  
  [tool.poe.tasks]
      [tool.poe.tasks.check]
          help="All checks"
          ignore_fail=false
          sequence=["check-lock", "docstring-lint", "format", "lint", "test", "typecheck"]
  
      [tool.poe.tasks.format]
          cmd="ruff format ."
          help="Format code (with autofix)"
  
      [tool.poe.tasks.lint]
          cmd="ruff check . --fix"
          help="Lint (with autofix)"
  
      [tool.poe.tasks.ruff]
          help="  [alias for lint && format]"
          ignore_fail=false
          sequence=["format", "lint"]
  
      [tool.poe.tasks.snapshot-update]
          cmd="pytest --snapshot-update"
          help="Update test snapshots"
  
      [tool.poe.tasks.test]
          cmd="pytest"
          help="Run tests"
  
      [tool.poe.tasks.pytest]
          help="  [alias for test]"
          sequence=["test"]
  
      [tool.poe.tasks.unit-test]
          cmd="pytest --without-integration"
          help="Run unit tests"
  
      [tool.poe.tasks.unit]
          help="  [alias for unit-test]"
          sequence=["unit-test"]
  
      [tool.poe.tasks.typecheck]
          cmd="pyright"
          help="Typecheck"
  
      [tool.poe.tasks.pyright]
          help="  [alias for typecheck]"
          sequence=["typecheck"]
  
  [build-system]
      build-backend="hatchling.build"
      requires=["hatchling"]
  
  [tool.ruff]
      cache-dir=".cache/ruff"
      extend-include=["*.ipynb"]
      line-length=100
  
      [tool.ruff.lint]
          ignore=[
              "ANN101", # self type annotation (it's inferred)
              "COM812", # Rule that conflicts with ruff format
              "F722",   # Forward annotations check (conflicts with jaxtyping)
              "FA102",  # Annotations support (Python >= 3.9 is fine)
              "FBT001", # Bool non-positional arguments needed for Fire CLI
              "FBT002", # Bool non-positional arguments needed for Fire CLI
              "FIX002", # Allow TODO
              "INP001", # __init__.py for all packages (Python >= 3.3 is fine)
              "ISC001", # Rule that conflicts with ruff format
              "PGH003", # No general type: ignore (not supported with pyright)
              "T201",   # Allow printing for CLI
              "TCH002", # Type checking imports (conflicts with beartype)
              "TD002",  # Allow TODO
              "TD003",  # Allow TODO
          ]
          select=["ALL"]
  
          [tool.ruff.lint.flake8-tidy-imports]
              ban-relative-imports="all"
  
          [tool.ruff.lint.flake8-annotations]
              mypy-init-return=true
  
          [tool.ruff.lint.isort]
              force-sort-within-sections=true
              known-third-party=["wandb"]
              lines-after-imports=2
  
          [tool.ruff.lint.per-file-ignores]
              "**/*.ipynb"=[
                  "B018", # Useless variables are used for printing
                  "D100", # No file docstring needed
                  "E402", # Imports don't need to be at the top
                  "I001", # Unsorted imports
                  "T201", # Print is fine
              ]
              "**/tests/*"=[
                  "ARG001", # Fixtures often have unused arguments
                  "D100",   # No file docstring needed
                  "D103",   # Tests don't need docstrings
                  "PT004",  # Fixtures don't return anything
                  "S101",   # Assert is needed in PyTest
                  "TCH001", # Don't need to mark type-only imports
              ]
  
          [tool.ruff.lint.pydocstyle]
              convention="google"
  
          [tool.ruff.lint.pylint]
              max-args=6
  
  [tool.pytest]
      cache_dir=".cache/pytest"
      durations=3
      timeout=60
  
      [tool.pytest.ini_options]
          addopts="-rA --doctest-modules --color=yes --cov=inspect_ai"
          doctest_optionflags=["IGNORE_EXCEPTION_DETAIL", "NORMALIZE_WHITESPACE"]
          filterwarnings=[
              "ignore::DeprecationWarning",
              "ignore::pydantic.warnings.PydanticDeprecatedSince20",
          ]
  
  [tool.pyright]
      # All rules apart from base are shown explicitly below
      deprecateTypingAliases=true
      disableBytesTypePromotions=true
      include=["."]
      reportAssertAlwaysTrue=true
      reportConstantRedefinition=true
      reportDeprecated="warning"
      reportDuplicateImport=true
      reportFunctionMemberAccess=true
      reportGeneralTypeIssues=true
      reportIncompatibleMethodOverride=true
      reportIncompatibleVariableOverride=true
      reportIncompleteStub=true
      reportInconsistentConstructor=true
      reportInvalidStringEscapeSequence=true
      reportInvalidStubStatement=true
      reportInvalidTypeVarUse=true
      reportMatchNotExhaustive=true
      reportMissingParameterType=true
      reportMissingTypeArgument=false
      reportMissingTypeStubs=false
      reportOptionalCall=true
      reportOptionalContextManager=true
      reportOptionalIterable=true
      reportOptionalMemberAccess=true
      reportOptionalOperand=true
      reportOptionalSubscript=true
      reportOverlappingOverload=true
      reportPrivateImportUsage=true
      reportPrivateUsage=true
      reportSelfClsParameterName=true
      reportTypeCommentUsage=true
      reportTypedDictNotRequiredAccess=true
      reportUnboundVariable=true
      reportUnknownArgumentType=false
      reportUnknownLambdaType=true
      reportUnknownMemberType=false
      reportUnknownParameterType=false
      reportUnknownVariableType=false
      reportUnnecessaryCast=true
      reportUnnecessaryComparison=true
      reportUnnecessaryContains=true
      reportUnnecessaryIsInstance=true
      reportUnsupportedDunderAll=true
      reportUntypedBaseClass=true
      reportUntypedClassDecorator=true
      reportUntypedFunctionDecorator=true
      reportUntypedNamedTuple=true
      reportUnusedClass=true
      reportUnusedCoroutine=true
      reportUnusedExpression=true
      reportUnusedFunction=true
      reportUnusedImport=true
      reportUnusedVariable=true
      reportWildcardImportFromLibrary=true
      strictDictionaryInference=true
      strictListInference=true
      strictParameterNoneValue=true
      strictSetInference=true
  