content: [tool.poetry]
  name = "datashaper"
  version = "0.0.49"
  description = "This project provides a collection of utilities for doing lightweight data wrangling."
  authors = [
      "Nathan Evans <naevans@microsoft.com>",
      "Andres Morales <andresmor@microsoft.com>",
  ]
  license = "MIT"
  readme = "README.md"
  
  [tool.poetry.dependencies]
  python = ">=3.10,<4"
  pandas = "^2.2.0"
  jsonschema = "^4.21.1"
  pyarrow = "^15.0.0"
  diskcache = "^5.6.3"
  dacite = "^1.8.1"
  
  [tool.poetry.group.dev.dependencies]
  codespell = "^2.2.6"
  poethepoet = "^0.24.4"
  pytest = "^7.4.4"
  pytest-cov = "^4.1.0"
  semversioner = "^2.0.1"
  toml = "^0.10.2"
  coverage = "^7.4.0"
  pyright = "^1.1.349"
  pytest-asyncio = "^0.23.4"
  ruff = "^0.2.1"
  
  [build-system]
  requires = ["poetry-core>=1.0.0"]
  build-backend = "poetry.core.masonry.api"
  
  [tool.coverage.run]
  omit = ["tests/*", ".*", "data/*"]
  
  [tool.poe.tasks]
  _sort_imports = "ruff check --select I --fix ."
  _format_code = "ruff format ."
  _ruff_check = 'ruff check .'
  _codespell = 'codespell dodiscover/ doc/ examples/ --ignore-words=.codespellignore --skip "**/_build/*,**/auto_examples/*"'
  _changelog = 'semversioner changelog > CHANGELOG.md'
  _apply_version = 'semversioner release'
  _test_with_coverage = 'coverage run -m pytest'
  _coverage_report = 'coverage report --show-missing'
  _pyright = "pyright"
  
  # Pass in a test pattern
  check_format = 'ruff format . --check'
  test_only = "pytest -v -k"
  fix = "ruff check --fix ."
  fix_unsafe = "ruff check --fix . --unsafe-fixes"
  
  [[tool.poe.tasks.format]]
  sequence = ['_sort_imports', '_format_code']
  ignore_fail = 'return_non_zero'
  
  [[tool.poe.tasks.test]]
  sequence = ['_test_with_coverage', '_coverage_report']
  ignore_fail = 'return_non_zero'
  
  [[tool.poe.tasks.check]]
  sequence = ['check_format', '_ruff_check', '_pyright', '_codespell']
  ignore_fail = 'return_non_zero'
  
  [tool.pydocstyle]
  match = '^(?!setup|__init__|test_).*\.py'
  match-dir = '^datashaper.*'
  
  [tool.pytest]
  asyncio_mode = "auto"
  
  [tool.pyright]
  include = ["datashaper"]
  exclude = ["**/node_modules", "**/__pycache__"]
  
  [tool.pytest.ini_options]
  asyncio_mode = "auto"
  log_cli = "True"
  #log_cli_level = "DEBUG"
  
  [tool.ruff]
  target-version = "py310"
  
  [tool.ruff.format]
  docstring-code-format = true
  docstring-code-line-length = 20
  
  [tool.ruff.lint]
  select = [
      "E4", "E7", "E9", "F", "D", "W291", "I", "N", "UP", "YTT", "ANN", "ASYNC", "S", "B", "DTZ", "T10", "EM", "ICN", "G", "INP", "PIE", "PYI", "PT", "Q",
      "RSE", "RET", "SLF", "SLOT", "SIM", "TID", "TCH", "INT", "ARG", "PTH", 'ERA', "PD", "TRY", "FLY", "PERF", "LOG", "A", "C90", "T20",
      # "BLE", # Don't catch blind exceptions,
      # "FBT", # use named arguments for boolean flags
      # "C4", # Comprehension checks
      # "TD", # todos
      #"FIX", # fixme
      #"FURB", <preview only>
      #"RUF"
  ]
  ignore = [
      # Deprecated Rules
      "ANN101",
      "ANN102",
      # Conflicts with interface argument checking
      "ARG002",
      "ANN204",
      # TODO: Inspect these pandas rules for validity
      "PD002",
      "PD010",
      "PD013",
      # TODO RE-Enable when we get bandwidth
      "ANN401",
      "C901",
  ]
  
  [tool.ruff.lint.per-file-ignores]
  "tests/*" = ["S", "D", "ANN"]
  
  [tool.ruff.lint.flake8-builtins]
  builtins-ignorelist = ["input", "id", "bytes"]
  
  [tool.ruff.lint.pydocstyle]
  convention = "numpy"
  