content: [project]
  name = "vicinity"
  description = "Lightweight Nearest Neighbors with Flexible Backends"
  readme = { file = "README.md", content-type = "text/markdown" }
  dynamic = ["version"]
  requires-python = ">=3.9"
  license = { file = "LICENSE" }
  authors = [{ name = "Stéphan Tulkens", email = "stephantul@gmail.com"}, {name = "Thomas van Dongen", email = "thomas123@live.nl"}]
  
  classifiers = [
      "Development Status :: 4 - Beta",
      "Intended Audience :: Developers",
      "Intended Audience :: Science/Research",
      "Topic :: Scientific/Engineering :: Artificial Intelligence",
      "Topic :: Software Development :: Libraries",
      "License :: OSI Approved :: MIT License",
      "Programming Language :: Python :: 3 :: Only",
      "Programming Language :: Python :: 3.9",
      "Programming Language :: Python :: 3.10",
      "Programming Language :: Python :: 3.11",
      "Programming Language :: Python :: 3.12",
  ]
  
  dependencies = [
      "numpy",
      "orjson",
      "tqdm"
  ]
  
  [build-system]
  requires = ["setuptools>=64", "setuptools_scm>=8"]
  build-backend = "setuptools.build_meta"
  
  [project.optional-dependencies]
  dev = [
      "black",
      "ipython",
      "mypy",
      "pre-commit",
      "pytest",
      "pytest-coverage",
      "ruff",
      "setuptools"
  ]
  
  # Integrations
  huggingface = ["datasets"]
  integrations = [
      "datasets"
  ]
  
  # Backends
  hnsw = ["hnswlib"]
  pynndescent = [
      "pynndescent>=0.5.10",
      "numba>=0.59.0",
      "llvmlite>=0.42.0",
      "numpy>=1.24.0"
  ]
  annoy = ["annoy"]
  faiss = ["faiss-cpu"]
  usearch = ["usearch"]
  voyager = ["voyager"]
  backends = [
      "hnswlib",
      "pynndescent>=0.5.10",
      "numba>=0.59.0",
      "llvmlite>=0.42.0",
      "numpy>=1.24.0",
      "annoy",
      "faiss-cpu",
      "usearch",
      "voyager"
  ]
  
  all = [
      "datasets",
      "hnswlib",
      "pynndescent>=0.5.10",
      "numba>=0.59.0",
      "llvmlite>=0.42.0",
      "numpy>=1.24.0",
      "annoy",
      "faiss-cpu",
      "usearch",
      "voyager"
  ]
  
  [project.urls]
  "Homepage" = "https://github.com/MinishLab"
  "Bug Reports" = "https://github.com/MinishLab/vicinity/issues"
  "Source" = "https://github.com/MinishLab/vicinity"
  
  [tool.ruff]
  exclude = [".venv/"]
  line-length = 120
  target-version = "py310"
  
  [tool.ruff.lint]
  select = [
      # Annotations: Enforce type annotations
      "ANN",
      # Complexity: Enforce a maximum cyclomatic complexity
      "C90",
      # Pydocstyle: Enforce docstrings
      "D",
      # Isort: Enforce import order
      "I",
      # Numpy: Enforce numpy style
      "NPY",
      # Print: Forbid print statements
      "T20",
      "F",
  ]
  ignore = [
      # Allow self and cls to be untyped, and allow Any type
      "ANN101", "ANN102", "ANN401",
      # Pydocstyle ignores
      "D100", "D101", "D104", "D203", "D212", "D401",
      # Allow use of f-strings in logging
      "G004"
  ]
  
  [tool.pydoclint]
  style = "sphinx"
  exclude = "test_"
  allow-init-docstring = true
  arg-type-hints-in-docstring = false
  check-return-types = false
  require-return-section-when-returning-nothing = false
  
  [tool.mypy]
  python_version = "3.10"
  warn_unused_configs = true
  ignore_missing_imports = true
  
  [tool.setuptools]
  packages = ["vicinity"]
  license-files = []
  
  [tool.setuptools_scm]
  # can be empty if no extra settings are needed, presence enables setuptools_scm
  
  [tool.setuptools.dynamic]
  version = {attr = "vicinity.version.__version__"}
  