[tool.poetry] name = "supervision" version = "0.26.0rc1" description = "A set of easy-to-use utils that will come in handy in any Computer Vision project" authors = ["Piotr Skalski "] maintainers = [ "Piotr Skalski ", "Linas Kondrackis ", ] readme = "README.md" license = "MIT" packages = [{ include = "supervision" }, { include = "supervision/py.typed" }] homepage = "https://github.com/roboflow/supervision" repository = "https://github.com/roboflow/supervision" documentation = "https://supervision.roboflow.com/latest/" keywords = [ "machine-learning", "deep-learning", "vision", "ML", "DL", "AI", "Roboflow", ] classifiers = [ 'Development Status :: 4 - Beta', 'Intended Audience :: Developers', 'Intended Audience :: Education', 'Intended Audience :: Science/Research', 'License :: OSI Approved :: MIT License', 'Programming Language :: Python :: 3', 'Programming Language :: Python :: 3 :: Only', 'Topic :: Software Development', 'Topic :: Scientific/Engineering', "Topic :: Scientific/Engineering :: Artificial Intelligence", "Topic :: Scientific/Engineering :: Image Recognition", 'Typing :: Typed', 'Operating System :: Microsoft :: Windows', 'Operating System :: POSIX :: Linux', 'Operating System :: MacOS', ] [tool.poetry.dependencies] python = "^3.8" # For Python versions 3.13 and above, use numpy versions 2.1.0, # required for poetry to not fail. numpy = [ { version = ">=1.21.2", python = "<3.13" }, { version = ">=2.1.0", python = ">=3.13" }, ] scipy = [ { version = "1.10.0", python = "<3.9" }, { version = "^1.10.0", python = ">=3.9" }, { version = ">=1.14.1", python = ">=3.13" }, ] # Matplotlib sub-dependency # The 'contourpy' package is required by Matplotlib for contour plotting. # We need to ensure compatibility with both Python 3.8 and Python 3.13. # # For Python 3.8 and above, we use version 1.0.7 or higher, as it is the lowest major version that supports Python 3.8. # For Python 3.13 and above, we use version 1.3.0 or higher, as it is the first version that explicitly supports Python 3.13. contourpy = [ { version = ">=1.0.7", python = ">=3.8,<3.13" }, { version = ">=1.3.0", python = ">=3.13" }, ] matplotlib = [ { version = ">=3.6.0,<3.8.0", python = "3.8" }, { version = ">=3.6.0", python = ">=3.9" }, { version = ">=3.7.3", python = ">=3.12" }, { version = ">=3.9.2", python = ">=3.13" }, ] pyyaml = ">=5.3" defusedxml = "^0.7.1" pillow = ">=9.4" requests = ">=2.26.0" tqdm = ">=4.62.3" # pandas: picked lowest major version that supports Python 3.8 # pandas 2.2.3 has been released with support for Python 3.13 pandas = [ { version = ">=2.0.0", python = "<3.13", optional = true }, { version = ">=2.2.3", python = ">=3.13", optional = true }, ] opencv-python = ">=4.5.5.64" [tool.poetry.extras] metrics = ["pandas"] [tool.poetry.group.test.dependencies] pytest = ">=7.2.2,<9.0.0" pytest-md = "^0.2.0" pytest-emoji = "^0.2.0" [tool.poetry.group.dev.dependencies] twine = ">=5.1.1,<7.0.0" pytest = ">=7.2.2,<9.0.0" wheel = ">=0.40,<0.46" build = ">=0.10,<1.3" ruff = ">=0.1.0" mypy = "^1.4.1" pre-commit = "^3.3.3" tox = "^4.11.4" notebook = ">=6.5.3,<8.0.0" ipywidgets = "^8.1.1" jupytext = "^1.16.1" nbconvert = "^7.14.2" docutils = [ { version = "^0.20.1", python = "<3.9" }, { version = "^0.21.1", python = ">=3.9" }, ] [tool.poetry.group.docs.dependencies] mkdocs-material = { extras = ["imaging"], version = "^9.5.5" } mkdocstrings = ">=0.25.2,<0.27.0" mkdocstrings-python = "^1.10.9" mike = "^2.0.0" # For Documentation Development use Python 3.10 or above # Use Latest mkdocs-jupyter min 0.24.6 for Jupyter Notebook Theme support mkdocs-jupyter = "^0.24.3" mkdocs-git-committers-plugin-2 = "^2.4.1" mkdocs-git-revision-date-localized-plugin = "^1.2.4" [tool.poetry.group.typecheck] optional = true [tool.poetry.group.typecheck.dependencies] types-pyyaml = "^6.0.12.20240808" types-cffi = "^1.16.0.20240331" types-requests = "^2.32.0.20240712" types-tqdm = "^4.66.0.20240417" pandas-stubs = ">=2.0.0.230412" [tool.poetry.group.build.dependencies] twine = ">=5.1.1,<7.0.0" [tool.bandit] target = ["test", "supervision"] tests = ["B201", "B301", "B318", "B314", "B303", "B413", "B412", "B410"] [tool.autoflake] check = true imports = ["cv2", "supervision"] [tool.ruff] target-version = "py38" # Exclude a variety of commonly ignored directories. exclude = [ ".bzr", ".direnv", ".eggs", ".git", ".git-rewrite", ".hg", ".mypy_cache", ".nox", ".pants.d", ".pytype", ".ruff_cache", ".svn", ".tox", ".venv", "__pypackages__", "_build", "buck-out", "build", "dist", "node_modules", "venv", "yarn-error.log", "yarn.lock", "docs", ] line-length = 88 indent-width = 4 [tool.ruff.lint] # Enable pycodestyle (`E`) and Pyflakes (`F`) codes by default. select = ["E", "F", "I", "A", "Q", "W", "RUF"] ignore = [] # Allow autofix for all enabled rules (when `--fix`) is provided. fixable = [ "A", "B", "C", "D", "E", "F", "G", "I", "N", "Q", "S", "T", "W", "ANN", "ARG", "BLE", "COM", "DJ", "DTZ", "EM", "ERA", "EXE", "FBT", "ICN", "INP", "ISC", "NPY", "PD", "PGH", "PIE", "PL", "PT", "PTH", "PYI", "RET", "RSE", "RUF", "SIM", "SLF", "TCH", "TID", "TRY", "UP", "YTT", ] unfixable = [] # Allow unused variables when underscore-prefixed. dummy-variable-rgx = "^(_+|(_+[a-zA-Z0-9_]*[a-zA-Z0-9]+?))$" pylint.max-args = 20 [tool.ruff.lint.flake8-quotes] inline-quotes = "double" multiline-quotes = "double" docstring-quotes = "double" [tool.ruff.lint.pydocstyle] convention = "google" [tool.ruff.lint.per-file-ignores] "__init__.py" = ["E402", "F401"] [tool.ruff.lint.mccabe] # Flag errors (`C901`) whenever the complexity level exceeds 5. max-complexity = 20 [tool.ruff.lint.isort] order-by-type = true no-sections = false [tool.ruff.format] # Like Black, use double quotes for strings. quote-style = "double" # Like Black, indent with spaces, rather than tabs. indent-style = "space" # Like Black, respect magic trailing commas. skip-magic-trailing-comma = false # Like Black, automatically detect the appropriate line ending. line-ending = "auto" [tool.codespell] skip = "*.ipynb,poetry.lock" count = true quiet-level = 3 ignore-words-list = "STrack,sTrack,strack" [tool.setuptools] include-package-data = false [tool.setuptools.packages.find] exclude = ["docs*", "test*", "examples*"] [build-system] requires = ["poetry-core"] build-backend = "poetry.core.masonry.api"