content: [project]
  name = "splink"
  version = "4.0.9"
  description = "Fast probabilistic data linkage at scale"
  authors = [
      { name = "Robin Linacre", email = "robinlinacre@hotmail.com" },
      { name = "Sam Lindsay" },
      { name = "Theodore Manassis" },
      { name = "Tom Hepworth" },
      { name = "Andy Bond" },
      { name = "Ross Kennedy" },
  ]
  requires-python = ">=3.8.0,<4.0.0"
  readme = "README.md"
  license = "MIT"
  dependencies = [
      "jsonschema>=3.2",
      "pandas>=1.3.5",
      "duckdb>=0.9.2",
      "sqlglot>=17.6.0",
      "altair>=5.0.1",
      "Jinja2>=3.0.3",
      "numpy>=1.17.3",
      "igraph>=0.11.2",
  ]
  
  [project.optional-dependencies]
  pyspark = ["pyspark>=3.2.1,<4.0.0"]
  spark = ["pyspark>=3.2.1"]
  athena = ["awswrangler"]
  postgres = ["sqlalchemy>=1.4.0", "psycopg2-binary>=2.8.0"]
  
  [project.urls]
  Homepage = "https://github.com/moj-analytical-services/splink"
  Repository = "https://github.com/moj-analytical-services/splink"
  
  [dependency-groups]
  dev = [
      "tabulate>=0.8.9",
      "pyspark>=3.2.1",
      "sqlalchemy>=1.4.0",
      "psycopg2-binary>=2.8.0",
  ]
  docs = [
      "griffe==0.49.0",
      # keep jinja2 relaxed so it doesn't constrain us in rest of dev
      "jinja2>=3.0.3",
      "mkdocs==1.6.0",
      "mkdocs-autorefs==1.0.1",
      "mkdocs-charts-plugin==0.0.10",
      "mkdocs-click==0.8.1",
      "mkdocs-gen-files==0.5.0",
      "mkdocs-material==9.5.2",
      "mkdocs-material-extensions==1.3.1",
      "mkdocs-mermaid2-plugin==1.1.1",
      "mkdocs-monorepo-plugin==1.1.0",
      "mkdocs-rss-plugin==1.15.0",
      "mkdocs-schema-reader==0.11.1",
      "mkdocs-video==1.5.0",
      "mkdocstrings==0.25.1",
      "mkdocstrings-python==1.10.5",
      "mkdocstrings-python-legacy==0.2.3",
      "mknotebooks==0.8.0",
      "neoteroi-mkdocs==1.0.5",
  ]
  linting = ["ruff>=0.4.2,<0.5"]
  testing = [
      "pytest>=7.3",
      "pyarrow>=7.0.0",
      "networkx>=2.5.1",
      "rapidfuzz>=2.0.3",
  ]
  typechecking = ["mypy==1.9.0"]
  
  [tool.uv]
  default-groups = [
      "dev",
      "linting",
      "testing",
      "typechecking",
  ]
  
  [build-system]
  requires = ["hatchling"]
  build-backend = "hatchling.build"
  
  [tool.isort]
  profile = "black"
  
  [tool.ruff]
  line-length = 88
  lint.select = [
      # Pyflakes
      "F",
      # Pycodestyle
      "E",
      "W",
      # isort
      "I001",
      # bugbear
      "B",
      # flake8-print
      "T20"
  ]
  lint.ignore = [
      "B905", # `zip()` without an explicit `strict=` parameter
      "B006", # Do not use mutable data structures for argument defaults"
  ]
  
  [tool.pytest.ini_options]
  addopts = ["-m default"]
  markers = [
  # only tests where backend is irrelevant:
      "core",
  # see tests/decorator.py::dialect_groups for group details:
      "default",
      "all",
  # backend-specific sets
      "duckdb",
      "duckdb_only",
      "spark",
      "spark_only",
      "sqlite",
      "sqlite_only",
      "postgres",
      "postgres_only",
  ]
  
  [tool.mypy]
  python_version = "3.10"
  packages = "splink"
  # for now at least allow implicit optionals
  # to cut down on noise. Easy to fix.
  implicit_optional = true
  # for now, ignore missing imports
  # can remove later and install stubs, where existent
  ignore_missing_imports = true
  
  # options for strict mode
  # too much to handle at once, so opt-in a little at a time
  # https://mypy.readthedocs.io/en/stable/existing_code.html#introduce-stricter-options
  warn_unused_configs = true
  warn_redundant_casts = true
  warn_unused_ignores = true
  strict_equality = true
  # don't worry about warning: https://github.com/python/mypy/issues/16189
  strict_concatenate = true
  check_untyped_defs = true
  disallow_subclassing_any = true
  disallow_untyped_decorators = true
  disallow_any_generics = true
  # further strict checks to add in:
  # disallow_untyped_calls = true
  disallow_incomplete_defs = true
  # disallow_untyped_defs = true
  