9194ef5abd
Docs/Test Workflow / Test docs build (push) Failing after 0s
Check links & references / links-check (push) Failing after 1s
Pytest/Test Workflow / Import Test and Pytest Run (ubuntu-latest, 3.10) (push) Failing after 0s
Pytest/Test Workflow / Import Test and Pytest Run (ubuntu-latest, 3.11) (push) Failing after 0s
PR Conflict Labeler / main (push) Failing after 2s
Pytest/Test Workflow / Import Test and Pytest Run (ubuntu-latest, 3.12) (push) Failing after 2s
Pytest/Test Workflow / Import Test and Pytest Run (ubuntu-latest, 3.13) (push) Failing after 0s
Pytest/Test Workflow / Build this Package (push) Failing after 5s
Pytest/Test Workflow / Import Test and Pytest Run (macos-latest, 3.10) (push) Has been cancelled
Pytest/Test Workflow / Import Test and Pytest Run (macos-latest, 3.11) (push) Has been cancelled
Pytest/Test Workflow / Import Test and Pytest Run (macos-latest, 3.12) (push) Has been cancelled
Pytest/Test Workflow / Import Test and Pytest Run (macos-latest, 3.13) (push) Has been cancelled
Pytest/Test Workflow / Import Test and Pytest Run (windows-latest, 3.10) (push) Has been cancelled
Pytest/Test Workflow / Import Test and Pytest Run (windows-latest, 3.11) (push) Has been cancelled
Pytest/Test Workflow / Import Test and Pytest Run (windows-latest, 3.12) (push) Has been cancelled
Pytest/Test Workflow / Import Test and Pytest Run (windows-latest, 3.13) (push) Has been cancelled
Pytest/Test Workflow / testing-guardian (push) Has been cancelled
153 lines
4.6 KiB
Python
153 lines
4.6 KiB
Python
import os
|
|
import subprocess
|
|
import sys
|
|
import warnings
|
|
from collections.abc import Callable
|
|
from pathlib import Path
|
|
|
|
import numpy as np
|
|
import pytest
|
|
|
|
from supervision.annotators.core import PercentageBarAnnotator
|
|
from supervision.annotators.utils import validate_labels
|
|
from supervision.detection.core import Detections, validate_fields_both_defined_or_none
|
|
from supervision.detection.vlm import VLM, validate_vlm_parameters
|
|
from supervision.metrics.detection import validate_input_tensors
|
|
from supervision.validators import (
|
|
_validate_detections_fields,
|
|
_validate_resolution,
|
|
validate_class_id,
|
|
validate_confidence,
|
|
validate_data,
|
|
validate_detections_fields,
|
|
validate_key_point_confidence,
|
|
validate_key_points_fields,
|
|
validate_keypoint_confidence,
|
|
validate_keypoints_fields,
|
|
validate_mask,
|
|
validate_resolution,
|
|
validate_tracker_id,
|
|
validate_xy,
|
|
validate_xyxy,
|
|
)
|
|
|
|
|
|
def _detections() -> Detections:
|
|
return Detections(
|
|
xyxy=np.array([[0, 0, 1, 1]]),
|
|
confidence=np.array([0.5]),
|
|
class_id=np.array([0]),
|
|
)
|
|
|
|
|
|
@pytest.mark.parametrize(
|
|
("call", "version"),
|
|
[
|
|
(lambda: validate_xyxy(np.array([[0, 0, 1, 1]])), "0.29.0"),
|
|
(lambda: validate_mask(np.array([[[True]]]), 1), "0.29.0"),
|
|
(lambda: validate_class_id(np.array([0]), 1), "0.29.0"),
|
|
(lambda: validate_confidence(np.array([0.5]), 1), "0.29.0"),
|
|
(lambda: validate_key_point_confidence(np.array([[0.5]]), 1, 1), "0.29.0"),
|
|
(lambda: validate_keypoint_confidence(np.array([[0.5]]), 1, 1), "0.27.0"),
|
|
(lambda: validate_tracker_id(np.array([1]), 1), "0.29.0"),
|
|
(lambda: validate_data({"id": [1]}, 1), "0.29.0"),
|
|
(lambda: validate_xy(np.array([[[0, 0]]]), 1, 1), "0.29.0"),
|
|
(
|
|
lambda: validate_detections_fields(
|
|
np.array([[0, 0, 1, 1]]),
|
|
None,
|
|
None,
|
|
None,
|
|
None,
|
|
{},
|
|
),
|
|
"0.29.0",
|
|
),
|
|
(
|
|
lambda: validate_key_points_fields(np.array([[[0, 0]]]), None, None, {}),
|
|
"0.29.0",
|
|
),
|
|
(
|
|
lambda: validate_keypoints_fields(np.array([[[0, 0]]]), None, None, {}),
|
|
"0.27.0",
|
|
),
|
|
(lambda: validate_resolution((1, 1)), "0.29.0"),
|
|
(
|
|
lambda: validate_vlm_parameters(
|
|
VLM.PALIGEMMA, "", {"resolution_wh": (1, 1)}
|
|
),
|
|
"0.29.0",
|
|
),
|
|
(
|
|
lambda: validate_fields_both_defined_or_none(_detections(), _detections()),
|
|
"0.29.0",
|
|
),
|
|
(lambda: validate_labels(None, _detections()), "0.29.0"),
|
|
(
|
|
lambda: PercentageBarAnnotator.validate_custom_values([0.5], _detections()),
|
|
"0.29.0",
|
|
),
|
|
(
|
|
lambda: validate_input_tensors(
|
|
[np.empty((0, 6), dtype=np.float32)],
|
|
[np.empty((0, 5), dtype=np.float32)],
|
|
),
|
|
"0.29.0",
|
|
),
|
|
],
|
|
)
|
|
def test_validate_public_shims_warn(call: Callable[[], object], version: str) -> None:
|
|
with pytest.warns(FutureWarning, match=f"deprecated since v{version}"):
|
|
call()
|
|
|
|
|
|
def test_private_validation_paths_do_not_warn() -> None:
|
|
with warnings.catch_warnings(record=True) as recorded_warnings:
|
|
warnings.simplefilter("always")
|
|
_validate_resolution((1, 1))
|
|
_validate_detections_fields(
|
|
np.array([[0, 0, 1, 1]]),
|
|
None,
|
|
None,
|
|
None,
|
|
None,
|
|
{},
|
|
)
|
|
PercentageBarAnnotator._validate_custom_values([0.5], _detections())
|
|
|
|
future_warnings = [
|
|
warning for warning in recorded_warnings if warning.category is FutureWarning
|
|
]
|
|
assert future_warnings == []
|
|
|
|
|
|
def test_import_supervision_stays_silent_about_bytetrack() -> None:
|
|
"""Plain supervision import should not surface the ByteTrack warning."""
|
|
repo_root = Path(__file__).resolve().parents[1]
|
|
env = os.environ.copy()
|
|
env["PYTHONPATH"] = str(repo_root / "src")
|
|
script = """
|
|
import warnings
|
|
|
|
with warnings.catch_warnings(record=True) as recorded:
|
|
warnings.simplefilter("always")
|
|
import supervision
|
|
|
|
byte_track_warnings = [
|
|
warning
|
|
for warning in recorded
|
|
if warning.category is FutureWarning and "ByteTrack" in str(warning.message)
|
|
]
|
|
|
|
raise SystemExit(1 if byte_track_warnings else 0)
|
|
"""
|
|
completed = subprocess.run( # noqa: S603 - trusted fixed command in a test helper.
|
|
[sys.executable, "-c", script],
|
|
check=False,
|
|
capture_output=True,
|
|
text=True,
|
|
env=env,
|
|
)
|
|
|
|
assert completed.returncode == 0, completed.stderr
|