[project]
name = "edgefirst-schemas"
description = "Message schemas for EdgeFirst Perception - ROS2 Common Interfaces, Foxglove, and custom types"
license = { file = "LICENSE" }
readme = "README.md"
requires-python = ">= 3.8"
authors = [
    { name = "Au-Zone Technologies", email = "support@au-zone.com" }
]
keywords = ["ros2", "perception", "schemas", "edge-ai", "zenoh", "cdr", "foxglove"]
classifiers = [
    "Development Status :: 4 - Beta",
    "Intended Audience :: Developers",
    "License :: OSI Approved :: Apache Software License",
    "Programming Language :: Python :: 3",
    "Programming Language :: Python :: 3.8",
    "Programming Language :: Python :: 3.9",
    "Programming Language :: Python :: 3.10",
    "Programming Language :: Python :: 3.11",
    "Programming Language :: Python :: 3.12",
    "Topic :: Software Development :: Libraries",
    "Topic :: Scientific/Engineering",
]

dynamic = ["dependencies", "version"]

[project.optional-dependencies]
test = [
    "pytest>=7.0",
    "pytest-cov>=4.0",
    "numpy>=1.21",
    "mcap>=1.0",
]
bench = [
    "pytest>=7.0",
    "pytest-benchmark>=4.0",
    "numpy>=1.21",
]
dev = [
    "edgefirst-schemas[test,bench]",
    "ruff",
]

[project.urls]
Homepage = "https://doc.edgefirst.ai"
Documentation = "https://doc.edgefirst.ai/latest/perception/"
Repository = "https://github.com/EdgeFirstAI/schemas"
Issues = "https://github.com/EdgeFirstAI/schemas/issues"
Changelog = "https://github.com/EdgeFirstAI/schemas/blob/main/CHANGELOG.md"

[tool.setuptools]
packages = [
    "edgefirst.schemas",
]

[tool.setuptools.dynamic]
version = { attr = "edgefirst.schemas.__version__" }
dependencies = { file = "requirements.txt" }

[build-system]
requires = ["setuptools"]
build-backend = "setuptools.build_meta"

[tool.pytest.ini_options]
testpaths = ["tests/python"]
python_files = ["test_*.py"]
python_classes = ["Test*"]
python_functions = ["test_*"]
addopts = [
    "-v",
    "--tb=short",
    "--strict-markers",
]
markers = [
    "slow: marks tests as slow (deselect with '-m \"not slow\"')",
]

[tool.coverage.run]
source = ["edgefirst"]
branch = true
omit = [
    "*/tests/*",
    "*/__pycache__/*",
]

[tool.coverage.report]
exclude_lines = [
    "pragma: no cover",
    "def __repr__",
    "raise NotImplementedError",
    "if TYPE_CHECKING:",
]
show_missing = true

[tool.coverage.xml]
output = "coverage-python.xml"

[tool.pytest-benchmark]
# Default benchmark settings (can be overridden via CLI)
# --benchmark-disable to skip benchmarks in normal test runs
# --benchmark-only to run only benchmarks
min_rounds = 5
warmup = true
warmup_iterations = 3
