content: [project]
  name = "vectorwrap"
  version = "0.6.0"
  description = "Universal vector search wrapper for Postgres, MySQL, SQLite, DuckDB, ClickHouse (pgvector, HeatWave, sqlite-vss, DuckDB VSS, ClickHouse ANN)"
  authors = [{name = "Mihir Ahuja", email = "mihir@example.com"}]
  license = "MIT"
  readme = "README.md"
  requires-python = ">=3.10"
  keywords = ["vector", "database", "embeddings", "similarity", "search", "postgresql", "mysql", "sqlite", "duckdb", "clickhouse"]
  classifiers = [
      "Development Status :: 3 - Alpha",
      "Intended Audience :: Developers",
      "Programming Language :: Python :: 3",
      "Programming Language :: Python :: 3.10",
      "Programming Language :: Python :: 3.11",
      "Programming Language :: Python :: 3.12",
      "Topic :: Database",
      "Topic :: Scientific/Engineering :: Artificial Intelligence"
  ]
  dependencies = [
    "psycopg[binary]>=3.1",
    "mysql-connector-python>=8.3",
    "numpy>=1.26",
    "typing-extensions>=4.5.0"
  ]
  
  [project.urls]
  Homepage = "https://github.com/mihirahuja/vectorwrap"
  Repository = "https://github.com/mihirahuja/vectorwrap"
  Issues = "https://github.com/mihirahuja/vectorwrap/issues"
  
  [project.optional-dependencies]
  sqlite = ["pysqlite3>=0.5.0", "sqlite-vss>=0.1.2"]
  duckdb = ["duckdb>=0.10.2"]
  clickhouse = ["clickhouse-connect>=0.6.0"]
  langchain = ["langchain>=0.1.0"]
  llamaindex = ["llama-index>=0.10.0"]
  milvus = ["pymilvus>=2.3.0"]
  qdrant = ["qdrant-client>=1.7.0"]
  dev = [
      "pytest>=6.0",
      "pytest-cov>=4.0",
      "black>=23.0",
      "ruff>=0.1.0",
      "mypy>=1.0",
      "pre-commit>=3.0"
  ]
  # Convenience extras for different combinations
  all = ["vectorwrap[sqlite,duckdb,clickhouse,langchain,llamaindex,milvus,qdrant]"]
  integrations = ["vectorwrap[langchain,llamaindex,milvus,qdrant]"]
  test = ["vectorwrap[dev,sqlite,duckdb,clickhouse]"]
  
  [build-system]
  requires = ["setuptools>=68", "wheel"]
  build-backend = "setuptools.build_meta"
  
  [tool.setuptools.packages.find]
  where = ["."]
  include = ["vectorwrap*"]
  exclude = ["bench*", "tests*", "docs*"]
  
  [tool.pytest.ini_options]
  testpaths = ["tests"]
  python_files = ["test_*.py"]
  python_classes = ["Test*"]
  python_functions = ["test_*"]
  addopts = [
      "-v",
      "--strict-markers",
      "--strict-config",
      "--tb=short"
  ]
  
  [tool.black]
  line-length = 88
  target-version = ["py310", "py311", "py312"]
  include = '\.pyi?$'
  extend-exclude = '''
  /(
    # directories
    \.eggs
    | \.git
    | \.hg
    | \.mypy_cache
    | \.tox
    | \.venv
    | build
    | dist
  )/
  '''
  
  [tool.ruff]
  target-version = "py310"
  line-length = 88
  select = [
      "E",  # pycodestyle errors
      "W",  # pycodestyle warnings
      "F",  # pyflakes
      "I",  # isort
      "B",  # flake8-bugbear
      "C4", # flake8-comprehensions
      "UP", # pyupgrade
  ]
  ignore = [
      "E501",  # line too long, handled by black
      "B008",  # do not perform function calls in argument defaults
      "C901",  # too complex
  ]
  
  [tool.ruff.per-file-ignores]
  "__init__.py" = ["F401"]
  "tests/**/*" = ["B011"]
  
  [tool.mypy]
  python_version = "3.10"
  check_untyped_defs = true
  disallow_any_generics = true
  disallow_incomplete_defs = true
  disallow_untyped_defs = true
  no_implicit_optional = true
  warn_redundant_casts = true
  warn_unused_ignores = true
  warn_return_any = true
  strict_equality = true
  
  [[tool.mypy.overrides]]
  module = [
      "mysql.connector.*",
      "sqlite_vss.*",
      "duckdb.*",
      "psycopg.*",
      "clickhouse_connect.*",
      "langchain.*",
      "llama_index.*",
      "pymilvus.*",
      "qdrant_client.*"
  ]
  ignore_missing_imports = true
  