chore: import upstream snapshot with attribution
This commit is contained in:
+299
@@ -0,0 +1,299 @@
|
||||
######################################################################################################
|
||||
# Zvec: High-Performance Vector Database with PyBind11 & C++ Backend
|
||||
######################################################################################################
|
||||
[project]
|
||||
name = "zvec"
|
||||
dynamic = ["version"]
|
||||
description = "A high-performance vector database engine with native C++ backend and Python bindings"
|
||||
readme = "README.md"
|
||||
license = { text = "Apache-2.0" }
|
||||
authors = [
|
||||
{ name = "zvec", email = "zvec@alibaba-inc.com" },
|
||||
]
|
||||
maintainers = [
|
||||
{ name = "Zvec Core Team", email = "zvec@alibaba-inc.com" },
|
||||
]
|
||||
requires-python = ">=3.9" # NOTE: Only 64-bit Python interpreters are supported.
|
||||
classifiers = [
|
||||
"Development Status :: 3 - Alpha",
|
||||
"Intended Audience :: Developers",
|
||||
"Intended Audience :: Education",
|
||||
"Intended Audience :: Science/Research",
|
||||
"License :: OSI Approved :: Apache Software License",
|
||||
"Operating System :: POSIX :: Linux",
|
||||
"Operating System :: MacOS",
|
||||
"Programming Language :: C++",
|
||||
"Programming Language :: Python :: 3 :: Only",
|
||||
"Programming Language :: Python :: 3.10",
|
||||
"Programming Language :: Python :: 3.11",
|
||||
"Programming Language :: Python :: 3.12",
|
||||
"Programming Language :: Python :: 3.13",
|
||||
"Programming Language :: Python :: 3.14",
|
||||
"Topic :: Database",
|
||||
"Topic :: Scientific/Engineering :: Artificial Intelligence",
|
||||
"Topic :: Software Development :: Libraries :: Python Modules",
|
||||
]
|
||||
keywords = [
|
||||
"vector-database", "ann", "nearest-neighbor"
|
||||
]
|
||||
dependencies = [
|
||||
"numpy >=1.23",
|
||||
]
|
||||
|
||||
[project.urls]
|
||||
Homepage = "https://github.com/alibaba/zvec"
|
||||
Repository = "https://github.com/alibaba/zvec"
|
||||
"Bug Tracker" = "https://github.com/alibaba/zvec/issues"
|
||||
"Documentation" = "https://zvec.org"
|
||||
|
||||
[project.optional-dependencies]
|
||||
test = [
|
||||
"pytest >=8.0",
|
||||
"pytest-cov >=4.1",
|
||||
"pytest-mock >=3.12",
|
||||
"pytest-xdist >=3.5",
|
||||
"cibuildwheel == 3.4.0",
|
||||
]
|
||||
docs = [
|
||||
"mkdocs >=1.5",
|
||||
"mkdocs-material >=9.5",
|
||||
"mkdocstrings[python] >=0.24",
|
||||
]
|
||||
dev = [
|
||||
"ruff >=0.4",
|
||||
"black >=24.0",
|
||||
"mypy >=1.8",
|
||||
"pre-commit >=3.6",
|
||||
"build >=1.0",
|
||||
"twine >=4.0",
|
||||
"numpy >=1.23",
|
||||
# Inherit test deps
|
||||
"pytest >=8.0",
|
||||
"pytest-cov >=4.1",
|
||||
"pytest-mock >=3.12",
|
||||
"cibuildwheel == 3.4.0",
|
||||
# Inherit docs deps
|
||||
"mkdocs >=1.5",
|
||||
"mkdocs-material >=9.5",
|
||||
"mkdocstrings[python] >=0.24",
|
||||
"pybind11-stubgen>=2.5.5",
|
||||
"pybind11 >=3.0",
|
||||
]
|
||||
######################################################################################################
|
||||
# BUILD SYSTEM CONFIGURATION (scikit-build-core)
|
||||
######################################################################################################
|
||||
[build-system]
|
||||
requires = [
|
||||
"scikit-build-core >=0.11",
|
||||
"pybind11 >=3.0",
|
||||
"setuptools_scm>=8.0",
|
||||
"cmake>=3.26,<4.0",
|
||||
"ninja>=1.11",
|
||||
]
|
||||
build-backend = "scikit_build_core.build"
|
||||
|
||||
[tool.scikit-build]
|
||||
# Core settings
|
||||
minimum-version = "0.11"
|
||||
metadata.version.provider = "scikit_build_core.metadata.setuptools_scm"
|
||||
|
||||
# CMake configuration
|
||||
cmake.version = ">=3.26,<4.0"
|
||||
ninja.version = ">=1.11"
|
||||
cmake.build-type = "Release"
|
||||
install.strip = true # Strip symbols in release builds to reduce wheel size
|
||||
# Only pull the runtime artifacts tagged COMPONENT "python" into the wheel.
|
||||
# This excludes the C++ SDK install rules (static/shared libs under lib/ and
|
||||
# public headers under include/) that cc_library(PACKED) registers for a
|
||||
# standalone `make install`, which would otherwise bloat the wheel.
|
||||
install.components = ["python"]
|
||||
|
||||
# Build directory
|
||||
build-dir = "build"
|
||||
|
||||
# Platform support
|
||||
wheel.expand-macos-universal-tags = true
|
||||
wheel.packages = ["python/zvec"]
|
||||
|
||||
# Source distribution
|
||||
sdist.include = [
|
||||
"README.md",
|
||||
"LICENSE",
|
||||
"pyproject.toml",
|
||||
"CMakeLists.txt",
|
||||
"src/**/*",
|
||||
"stub/zvec/**/*",
|
||||
"python/zvec/py.typed",
|
||||
]
|
||||
|
||||
# CMake defines (env-overridable)
|
||||
[tool.scikit-build.cmake.define]
|
||||
BUILD_TOOLS = "OFF"
|
||||
BUILD_PYTHON_BINDINGS = "ON"
|
||||
#CMAKE_VERBOSE_MAKEFILE = "ON"
|
||||
|
||||
# Setuptools config for test pypi
|
||||
[tool.setuptools_scm]
|
||||
local_scheme = "no-local-version"
|
||||
version_scheme = "guess-next-dev"
|
||||
fallback_version = "0.0.0"
|
||||
######################################################################################################
|
||||
# TESTING & QUALITY
|
||||
######################################################################################################
|
||||
[tool.pytest.ini_options]
|
||||
minversion = "8.0"
|
||||
addopts = [
|
||||
"-ra",
|
||||
"--showlocals",
|
||||
"--strict-markers",
|
||||
"--strict-config",
|
||||
"--tb=short",
|
||||
"-n=auto",
|
||||
]
|
||||
xfail_strict = true
|
||||
log_cli_level = "INFO"
|
||||
filterwarnings = [
|
||||
"error",
|
||||
"ignore::pytest.PytestCacheWarning",
|
||||
# Ignore numpy deprecation warnings in tests (if any)
|
||||
"ignore:.*numpy.*:DeprecationWarning",
|
||||
]
|
||||
testpaths = ["python/tests"]
|
||||
markers = [
|
||||
"title: Custom marker for test title/description",
|
||||
# "slow: marks tests as slow",
|
||||
]
|
||||
|
||||
######################################################################################################
|
||||
# BUILD WHEEL
|
||||
######################################################################################################
|
||||
[tool.cibuildwheel]
|
||||
build = [
|
||||
"cp310-*",
|
||||
"cp311-*",
|
||||
"cp312-*",
|
||||
"cp313-*",
|
||||
"cp314-*",
|
||||
]
|
||||
build-frontend = "build"
|
||||
test-requires = ["pytest", "pytest-xdist", "numpy"]
|
||||
test-command = "cd {project} && pytest python/tests -v --tb=short"
|
||||
build-verbosity = 1
|
||||
|
||||
[tool.cibuildwheel.linux]
|
||||
# libaio is required by the C++ backend; install it inside the manylinux
|
||||
# container (manylinux_2_28 is AlmaLinux 8 based, so use dnf/libaio-devel).
|
||||
# libaio-devel lives in BaseOS; disable EPEL so a flaky EPEL mirror cannot
|
||||
# break metadata refresh.
|
||||
before-all = "dnf install -y --disablerepo=epel libaio-devel"
|
||||
archs = ["auto"]
|
||||
environment = { CMAKE_GENERATOR = "Unix Makefiles", CMAKE_BUILD_PARALLEL_LEVEL = "16" }
|
||||
manylinux-x86_64-image = "manylinux_2_28"
|
||||
manylinux-aarch64-image = "manylinux_2_28"
|
||||
# Skip 32-bit builds and musllinux
|
||||
skip = ["*-manylinux_i686", "*-musllinux*"]
|
||||
|
||||
[tool.cibuildwheel.macos]
|
||||
archs = ["arm64"]
|
||||
# Inherits CMAKE_GENERATOR and CMAKE_BUILD_PARALLEL_LEVEL from [tool.cibuildwheel] won't work;
|
||||
# platform-level environment overrides the top-level entirely, so all vars must be listed here
|
||||
environment = { CMAKE_GENERATOR = "Unix Makefiles", CMAKE_BUILD_PARALLEL_LEVEL = "16", MACOSX_DEPLOYMENT_TARGET = "11.0" }
|
||||
|
||||
[tool.cibuildwheel.windows]
|
||||
archs = ["auto64"]
|
||||
test-command = "cd /d {project} && pytest python/tests -v --tb=short --basetemp=./.pytest_tmp"
|
||||
environment = { CMAKE_GENERATOR = "Ninja" }
|
||||
#config-settings = { build-dir = "build/{wheel_tag}" }
|
||||
#&& if exist .pytest_tmp rmdir /s /q .pytest_tmp"
|
||||
before-build = [
|
||||
"python -c \"import shutil, glob, os; [shutil.rmtree(p, ignore_errors=True) for p in ['build', '.pytest_tmp']];\""
|
||||
]
|
||||
|
||||
######################################################################################################
|
||||
# CODE QUALITY & FORMATTING (Ruff)
|
||||
######################################################################################################
|
||||
[tool.ruff]
|
||||
target-version = "py310"
|
||||
line-length = 88
|
||||
exclude = [
|
||||
"build/",
|
||||
"dist/",
|
||||
".git/",
|
||||
".venv/",
|
||||
"venv/",
|
||||
"thirdparty",
|
||||
]
|
||||
|
||||
[tool.ruff.lint]
|
||||
extend-select = [
|
||||
"B", # flake8-bugbear
|
||||
"I", # isort
|
||||
"ARG", # flake8-unused-arguments
|
||||
"C4", # flake8-comprehensions
|
||||
"EM", # flake8-errmsg
|
||||
"ICN", # flake8-import-conventions
|
||||
"G", # flake8-logging-format
|
||||
"PGH", # pygrep-hooks
|
||||
"PIE", # flake8-pie
|
||||
"PL", # pylint
|
||||
"PT", # flake8-pytest-style
|
||||
"PTH", # flake8-use-pathlib
|
||||
"RET", # flake8-return
|
||||
"RUF", # Ruff-specific
|
||||
"SIM", # flake8-simplify
|
||||
"T20", # flake8-print
|
||||
"UP", # pyupgrade
|
||||
"YTT", # flake8-2020
|
||||
"EXE", # flake8-executable
|
||||
"NPY", # NumPy-specific
|
||||
"PD", # pandas-vet
|
||||
]
|
||||
ignore = [
|
||||
"PLR0913", # Too many arguments (common in bindings)
|
||||
"PLR2004", # Magic value used in comparison
|
||||
"UP045", "UP007", # Use list() instead of [] (breaks C++ init)
|
||||
"EM101", "EM102", # Exception messages as literals (ok in tests/utils)
|
||||
"B008", # Mutable default args (cautiously allowed in config)
|
||||
"E731", # Lambda assignment (used in callbacks)
|
||||
"B019", # `functools.lru_cache` on methods (handled manually)
|
||||
"PLR0912", # Too many branches
|
||||
"PLC0105", # Ignore contravariant
|
||||
"RUF002", # Ignore Unicode
|
||||
]
|
||||
fixable = ["ALL"]
|
||||
unfixable = []
|
||||
|
||||
# Ignore all errors in docstrings
|
||||
[tool.ruff.lint.pydocstyle]
|
||||
convention = "google" # or "numpy", "pep257"
|
||||
ignore-decorators = ["typing.overload"]
|
||||
|
||||
[tool.ruff.lint.flake8-type-checking]
|
||||
# Don't check code examples in docstrings
|
||||
quote-annotations = true
|
||||
|
||||
[tool.ruff.lint.isort]
|
||||
required-imports = ["from __future__ import annotations"]
|
||||
known-first-party = ["zvec"]
|
||||
|
||||
[tool.ruff.lint.per-file-ignores]
|
||||
"python/tests/**" = ["ALL"]
|
||||
"bench/core/**" = ["ALL"]
|
||||
"python/zvec/__init__.py" = [
|
||||
"F401", # Unused import (for __all__)
|
||||
"E402", # Module level import not at top (C++ module init order)
|
||||
"PLE0605", # Invalid format for __all__
|
||||
"RUF022", # __all__ is not sorted
|
||||
]
|
||||
"python/zvec/model/doc.py" = [
|
||||
"RUF023", # Unused sort (for __slot__)
|
||||
]
|
||||
"python/zvec/extension/**" = [
|
||||
"PLC0415", # Import outside top-level (dynamic imports in _get_model)
|
||||
]
|
||||
|
||||
[tool.ruff.format]
|
||||
indent-style = "space"
|
||||
quote-style = "double"
|
||||
line-ending = "lf"
|
||||
skip-magic-trailing-comma = false
|
||||
Reference in New Issue
Block a user