fix(lint): resolve all ruff E402/I001/F821 errors

- Move pytestmark after all imports in 35 test files (E402: not-at-top)
- Add TYPE_CHECKING guard for FlightProcessor in composition.py (F821)
- Sort import blocks in src/ and tests/ (I001 auto-fix via ruff --fix)
- ruff check src/ tests/ now exits 0 with no errors

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Yuzviak
2026-05-11 19:13:42 +03:00
parent 1273ec8eaf
commit bf5b0e3ae2
50 changed files with 114 additions and 116 deletions
+1 -1
View File
@@ -6,9 +6,9 @@ re-exported as ``IGlobalPlaceRecognition``.
""" """
from gps_denied.components.gpr.faiss_gpr import ( # noqa: F401 from gps_denied.components.gpr.faiss_gpr import ( # noqa: F401
_FAISS_AVAILABLE,
GlobalPlaceRecognition, GlobalPlaceRecognition,
_faiss, _faiss,
_FAISS_AVAILABLE,
) )
from gps_denied.components.gpr.protocol import ( # noqa: F401 from gps_denied.components.gpr.protocol import ( # noqa: F401
IGlobalPlaceRecognition, IGlobalPlaceRecognition,
@@ -1,12 +1,12 @@
from .mock_mavlink import MockMAVConnection
from .protocol import MAVLinkBridgeProtocol from .protocol import MAVLinkBridgeProtocol
from .pymavlink_bridge import ( from .pymavlink_bridge import (
MAVLinkBridge,
_PYMAVLINK_AVAILABLE, _PYMAVLINK_AVAILABLE,
_unix_to_gps_time, MAVLinkBridge,
_confidence_to_fix_type, _confidence_to_fix_type,
_eskf_to_gps_input, _eskf_to_gps_input,
_unix_to_gps_time,
) )
from .mock_mavlink import MockMAVConnection
__all__ = [ __all__ = [
"MAVLinkBridgeProtocol", "MAVLinkBridgeProtocol",
+8 -8
View File
@@ -12,19 +12,19 @@ the legacy ``core/vo.py`` monolith into per-backend modules:
The legacy ``gps_denied.core.vo`` import path is preserved as a thin The legacy ``gps_denied.core.vo`` import path is preserved as a thin
re-export shim for one phase; tests still import from there. re-export shim for one phase; tests still import from there.
""" """
from gps_denied.components.vio.protocol import (
ISequentialVisualOdometry,
VisualOdometry,
)
from gps_denied.components.vio.orbslam_backend import (
ORBVisualOdometry,
SequentialVisualOdometry,
)
from gps_denied.components.vio.cuvslam_backend import ( from gps_denied.components.vio.cuvslam_backend import (
CuVSLAMMonoDepthVisualOdometry, CuVSLAMMonoDepthVisualOdometry,
CuVSLAMVisualOdometry, CuVSLAMVisualOdometry,
) )
from gps_denied.components.vio.factory import create_vo_backend from gps_denied.components.vio.factory import create_vo_backend
from gps_denied.components.vio.orbslam_backend import (
ORBVisualOdometry,
SequentialVisualOdometry,
)
from gps_denied.components.vio.protocol import (
ISequentialVisualOdometry,
VisualOdometry,
)
__all__ = [ __all__ = [
"VisualOdometry", "VisualOdometry",
+1 -1
View File
@@ -181,7 +181,7 @@ class AppSettings(BaseSettings):
def settings_customise_sources(cls, settings_cls, **kwargs): def settings_customise_sources(cls, settings_cls, **kwargs):
"""Load YAML overlay from config/{env}.yaml when present.""" """Load YAML overlay from config/{env}.yaml when present."""
import os import os
import yaml
init_kwargs = kwargs.get("init_settings") init_kwargs = kwargs.get("init_settings")
env_settings = kwargs.get("env_settings") env_settings = kwargs.get("env_settings")
+4 -4
View File
@@ -1,11 +1,11 @@
"""Legacy import path for GPR. Phase 1 shim — code lives in components/gpr/.""" """Legacy import path for GPR. Phase 1 shim — code lives in components/gpr/."""
from gps_denied.components.gpr.protocol import (
IGlobalPlaceRecognition, # noqa: F401
)
from gps_denied.components.gpr.faiss_gpr import ( from gps_denied.components.gpr.faiss_gpr import (
_FAISS_AVAILABLE,
GlobalPlaceRecognition, GlobalPlaceRecognition,
_faiss, _faiss,
_FAISS_AVAILABLE, )
from gps_denied.components.gpr.protocol import (
IGlobalPlaceRecognition, # noqa: F401
) )
__all__ = [ __all__ = [
+1 -1
View File
@@ -1,5 +1,5 @@
"""Legacy import path. Phase 1 shim — code lives in core/factor_graph.py.""" """Legacy import path. Phase 1 shim — code lives in core/factor_graph.py."""
from gps_denied.core.factor_graph import ( # noqa: F401 from gps_denied.core.factor_graph import ( # noqa: F401
IFactorGraphOptimizer,
FactorGraphOptimizer, FactorGraphOptimizer,
IFactorGraphOptimizer,
) )
+5 -5
View File
@@ -4,18 +4,18 @@ CRITICAL: tests/test_mavlink.py and tests/test_gps_input_encoding.py import
private helpers from this path. Per PATTERNS.md §6.2, the underscore names private helpers from this path. Per PATTERNS.md §6.2, the underscore names
MUST be re-exported here verbatim or 12+ tests break. MUST be re-exported here verbatim or 12+ tests break.
""" """
from gps_denied.components.mavlink_io.mock_mavlink import ( # noqa: F401
MockMAVConnection,
)
from gps_denied.components.mavlink_io.protocol import ( # noqa: F401 from gps_denied.components.mavlink_io.protocol import ( # noqa: F401
MAVLinkBridgeProtocol, MAVLinkBridgeProtocol,
) )
from gps_denied.components.mavlink_io.pymavlink_bridge import ( # noqa: F401 from gps_denied.components.mavlink_io.pymavlink_bridge import ( # noqa: F401
MAVLinkBridge,
_PYMAVLINK_AVAILABLE, _PYMAVLINK_AVAILABLE,
_unix_to_gps_time, MAVLinkBridge,
_confidence_to_fix_type, _confidence_to_fix_type,
_eskf_to_gps_input, _eskf_to_gps_input,
) _unix_to_gps_time,
from gps_denied.components.mavlink_io.mock_mavlink import ( # noqa: F401
MockMAVConnection,
) )
__all__ = [ __all__ = [
+4 -4
View File
@@ -1,10 +1,10 @@
"""Legacy import path. Phase 1 shim — code lives in components/satellite_matcher/.""" """Legacy import path. Phase 1 shim — code lives in components/satellite_matcher/."""
from gps_denied.components.satellite_matcher.protocol import ( # noqa: F401
MetricRefiner,
IMetricRefinement,
)
from gps_denied.components.satellite_matcher.metric_refinement import ( # noqa: F401 from gps_denied.components.satellite_matcher.metric_refinement import ( # noqa: F401
MetricRefinement, MetricRefinement,
) )
from gps_denied.components.satellite_matcher.protocol import ( # noqa: F401
IMetricRefinement,
MetricRefiner,
)
__all__ = ["MetricRefinement", "IMetricRefinement", "MetricRefiner"] __all__ = ["MetricRefinement", "IMetricRefinement", "MetricRefiner"]
+1 -1
View File
@@ -1,6 +1,6 @@
"""Legacy import path. Phase 1 shim — code lives in pipeline/orchestrator.py.""" """Legacy import path. Phase 1 shim — code lives in pipeline/orchestrator.py."""
from gps_denied.pipeline.orchestrator import ( # noqa: F401 from gps_denied.pipeline.orchestrator import ( # noqa: F401
FlightProcessor, FlightProcessor,
TrackingState,
FrameResult, FrameResult,
TrackingState,
) )
+1 -1
View File
@@ -15,7 +15,7 @@ introduces this type.
from __future__ import annotations from __future__ import annotations
from dataclasses import dataclass from dataclasses import dataclass
from typing import Optional, TYPE_CHECKING from typing import TYPE_CHECKING, Optional
if TYPE_CHECKING: if TYPE_CHECKING:
from gps_denied.schemas import GPSPoint from gps_denied.schemas import GPSPoint
+2 -2
View File
@@ -1,9 +1,9 @@
"""Pipeline package: orchestrator + IO + composition root.""" """Pipeline package: orchestrator + IO + composition root."""
from .orchestrator import FlightProcessor from .composition import build_pipeline
from .image_input import ImageInputPipeline from .image_input import ImageInputPipeline
from .orchestrator import FlightProcessor
from .result_manager import ResultManager from .result_manager import ResultManager
from .sse_streamer import SSEEventStreamer from .sse_streamer import SSEEventStreamer
from .composition import build_pipeline
Pipeline = FlightProcessor Pipeline = FlightProcessor
+4 -1
View File
@@ -15,10 +15,13 @@ Env-conditional wiring
from __future__ import annotations from __future__ import annotations
import logging import logging
from typing import Optional from typing import TYPE_CHECKING
from gps_denied.obs import configure_logging from gps_denied.obs import configure_logging
if TYPE_CHECKING:
from gps_denied.pipeline.orchestrator import FlightProcessor
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
+1 -1
View File
@@ -16,10 +16,10 @@ import structlog
from structlog.contextvars import bind_contextvars, clear_contextvars from structlog.contextvars import bind_contextvars, clear_contextvars
from gps_denied.core.eskf import ESKF from gps_denied.core.eskf import ESKF
from gps_denied.db.repository import FlightRepository
from gps_denied.pipeline.image_input import ImageInputPipeline from gps_denied.pipeline.image_input import ImageInputPipeline
from gps_denied.pipeline.result_manager import ResultManager from gps_denied.pipeline.result_manager import ResultManager
from gps_denied.pipeline.sse_streamer import SSEEventStreamer from gps_denied.pipeline.sse_streamer import SSEEventStreamer
from gps_denied.db.repository import FlightRepository
from gps_denied.schemas import CameraParameters, GPSPoint from gps_denied.schemas import CameraParameters, GPSPoint
from gps_denied.schemas.flight import ( from gps_denied.schemas.flight import (
BatchMetadata, BatchMetadata,
+1 -1
View File
@@ -4,8 +4,8 @@ from __future__ import annotations
from datetime import datetime from datetime import datetime
from gps_denied.pipeline.sse_streamer import SSEEventStreamer
from gps_denied.db.repository import FlightRepository from gps_denied.db.repository import FlightRepository
from gps_denied.pipeline.sse_streamer import SSEEventStreamer
from gps_denied.schemas import GPSPoint from gps_denied.schemas import GPSPoint
from gps_denied.schemas.events import FrameProcessedEvent from gps_denied.schemas.events import FrameProcessedEvent
+8 -9
View File
@@ -1,14 +1,5 @@
"""Shared test fixtures for GPS-denied-onboard test suite.""" """Shared test fixtures for GPS-denied-onboard test suite."""
from unittest.mock import AsyncMock, MagicMock
import numpy as np
import pytest
from gps_denied.core.coordinates import CoordinateTransformer
from gps_denied.core.models import ModelManager
from gps_denied.schemas import CameraParameters, GPSPoint
# --------------------------------------------------------------- # ---------------------------------------------------------------
# Phase 2 / TEST-03: AC traceability plugin # Phase 2 / TEST-03: AC traceability plugin
# #
@@ -23,6 +14,14 @@ import json
import re import re
from collections import defaultdict from collections import defaultdict
from pathlib import Path from pathlib import Path
from unittest.mock import AsyncMock, MagicMock
import numpy as np
import pytest
from gps_denied.core.coordinates import CoordinateTransformer
from gps_denied.core.models import ModelManager
from gps_denied.schemas import CameraParameters, GPSPoint
_AC_ID_RE = re.compile(r"^AC-(?:\d+\.\d+[a-z]?|NEW-\d+)$") _AC_ID_RE = re.compile(r"^AC-(?:\d+\.\d+[a-z]?|NEW-\d+)$")
+2 -2
View File
@@ -3,10 +3,10 @@
import numpy as np import numpy as np
import pytest import pytest
pytestmark = [pytest.mark.unit]
from gps_denied.testing.coord import ecef_to_wgs84, euler_to_quaternion from gps_denied.testing.coord import ecef_to_wgs84, euler_to_quaternion
pytestmark = [pytest.mark.unit]
# --- ECEF → WGS84 --- # --- ECEF → WGS84 ---
def test_ecef_origin_is_on_equator_prime_meridian(): def test_ecef_origin_is_on_equator_prime_meridian():
+2 -2
View File
@@ -2,8 +2,6 @@
import pytest import pytest
pytestmark = [pytest.mark.unit]
from gps_denied.testing.datasets.base import ( from gps_denied.testing.datasets.base import (
DatasetAdapter, DatasetAdapter,
DatasetCapabilities, DatasetCapabilities,
@@ -14,6 +12,8 @@ from gps_denied.testing.datasets.base import (
PlatformClass, PlatformClass,
) )
pytestmark = [pytest.mark.unit]
def test_capabilities_defaults(): def test_capabilities_defaults():
cap = DatasetCapabilities( cap = DatasetCapabilities(
+2 -2
View File
@@ -5,8 +5,6 @@ from pathlib import Path
import pytest import pytest
pytestmark = [pytest.mark.unit]
from gps_denied.testing.download import ( from gps_denied.testing.download import (
DATASET_REGISTRY, DATASET_REGISTRY,
DatasetSpec, DatasetSpec,
@@ -14,6 +12,8 @@ from gps_denied.testing.download import (
verify_sha256, verify_sha256,
) )
pytestmark = [pytest.mark.unit]
def test_registry_has_euroc_machine_hall(): def test_registry_has_euroc_machine_hall():
assert "euroc_machine_hall" in DATASET_REGISTRY assert "euroc_machine_hall" in DATASET_REGISTRY
+2 -2
View File
@@ -13,12 +13,12 @@ from pathlib import Path
import pytest import pytest
pytestmark = [pytest.mark.e2e]
from gps_denied.testing.datasets.euroc import EuRoCAdapter from gps_denied.testing.datasets.euroc import EuRoCAdapter
from gps_denied.testing.harness import E2EHarness from gps_denied.testing.harness import E2EHarness
from gps_denied.testing.metrics import absolute_trajectory_error from gps_denied.testing.metrics import absolute_trajectory_error
pytestmark = [pytest.mark.e2e]
# CI-tier keeps the prefix short so a full run stays under a couple of minutes. # CI-tier keeps the prefix short so a full run stays under a couple of minutes.
EUROC_MH01_MAX_FRAMES = 100 EUROC_MH01_MAX_FRAMES = 100
+2 -2
View File
@@ -4,14 +4,14 @@ from pathlib import Path
import pytest import pytest
pytestmark = [pytest.mark.unit]
from gps_denied.testing.datasets.base import ( from gps_denied.testing.datasets.base import (
DatasetNotAvailableError, DatasetNotAvailableError,
PlatformClass, PlatformClass,
) )
from gps_denied.testing.datasets.euroc import EuRoCAdapter from gps_denied.testing.datasets.euroc import EuRoCAdapter
pytestmark = [pytest.mark.unit]
@pytest.fixture @pytest.fixture
def fake_euroc_root(tmp_path: Path) -> Path: def fake_euroc_root(tmp_path: Path) -> Path:
+2 -2
View File
@@ -17,12 +17,12 @@ from pathlib import Path
import pytest import pytest
pytestmark = [pytest.mark.e2e]
from gps_denied.testing.datasets.euroc import EuRoCAdapter from gps_denied.testing.datasets.euroc import EuRoCAdapter
from gps_denied.testing.harness import E2EHarness from gps_denied.testing.harness import E2EHarness
from gps_denied.testing.metrics import absolute_trajectory_error from gps_denied.testing.metrics import absolute_trajectory_error
pytestmark = [pytest.mark.e2e]
MAX_FRAMES = 100 MAX_FRAMES = 100
VO_SCALE_M = 0.005 # 5 mm/frame — measured GT median on MH_01 VO_SCALE_M = 0.005 # 5 mm/frame — measured GT median on MH_01
+2 -2
View File
@@ -20,12 +20,12 @@ import cv2
import numpy as np import numpy as np
import pytest import pytest
pytestmark = [pytest.mark.e2e]
from gps_denied.core.vo import ORBVisualOdometry from gps_denied.core.vo import ORBVisualOdometry
from gps_denied.schemas import CameraParameters from gps_denied.schemas import CameraParameters
from gps_denied.testing.datasets.euroc import EuRoCAdapter from gps_denied.testing.datasets.euroc import EuRoCAdapter
pytestmark = [pytest.mark.e2e]
# Match CI-tier frame cap used in test_euroc.py # Match CI-tier frame cap used in test_euroc.py
EUROC_MH01_MAX_FRAMES = 100 EUROC_MH01_MAX_FRAMES = 100
+2 -2
View File
@@ -7,11 +7,11 @@ Correctness of VO on synthetic is out of scope — that's unit-test territory.
import pytest import pytest
pytestmark = [pytest.mark.integration]
from gps_denied.testing.datasets.synthetic import SyntheticAdapter from gps_denied.testing.datasets.synthetic import SyntheticAdapter
from gps_denied.testing.harness import E2EHarness, HarnessResult from gps_denied.testing.harness import E2EHarness, HarnessResult
pytestmark = [pytest.mark.integration]
@pytest.mark.asyncio @pytest.mark.asyncio
async def test_harness_processes_every_frame(): async def test_harness_processes_every_frame():
+2 -2
View File
@@ -4,11 +4,11 @@ from pathlib import Path
import pytest import pytest
pytestmark = [pytest.mark.e2e]
from gps_denied.testing.datasets.mars_lvig import MARSLVIGAdapter from gps_denied.testing.datasets.mars_lvig import MARSLVIGAdapter
from gps_denied.testing.harness import E2EHarness from gps_denied.testing.harness import E2EHarness
pytestmark = [pytest.mark.e2e]
# Stress tier does not gate on RMSE — featureless sequences legitimately cause # Stress tier does not gate on RMSE — featureless sequences legitimately cause
# tracking loss. The gate is whether the pipeline RUNS TO COMPLETION without # tracking loss. The gate is whether the pipeline RUNS TO COMPLETION without
# crashing, and what fraction of frames produced any estimate at all. # crashing, and what fraction of frames produced any estimate at all.
+2 -2
View File
@@ -4,14 +4,14 @@ from pathlib import Path
import pytest import pytest
pytestmark = [pytest.mark.unit]
from gps_denied.testing.datasets.base import ( from gps_denied.testing.datasets.base import (
DatasetNotAvailableError, DatasetNotAvailableError,
PlatformClass, PlatformClass,
) )
from gps_denied.testing.datasets.mars_lvig import MARSLVIGAdapter from gps_denied.testing.datasets.mars_lvig import MARSLVIGAdapter
pytestmark = [pytest.mark.unit]
@pytest.fixture @pytest.fixture
def fake_mars_seq(tmp_path: Path) -> Path: def fake_mars_seq(tmp_path: Path) -> Path:
+2 -2
View File
@@ -3,14 +3,14 @@
import numpy as np import numpy as np
import pytest import pytest
pytestmark = [pytest.mark.unit]
from gps_denied.testing.metrics import ( from gps_denied.testing.metrics import (
absolute_trajectory_error, absolute_trajectory_error,
relative_pose_error, relative_pose_error,
trajectory_rmse, trajectory_rmse,
) )
pytestmark = [pytest.mark.unit]
def test_rmse_identical_trajectories_is_zero(): def test_rmse_identical_trajectories_is_zero():
est = np.array([[0.0, 0.0, 0.0], [1.0, 0.0, 0.0], [2.0, 0.0, 0.0]]) est = np.array([[0.0, 0.0, 0.0], [1.0, 0.0, 0.0], [2.0, 0.0, 0.0]])
+1 -1
View File
@@ -4,9 +4,9 @@ import numpy as np
import pytest import pytest
from gps_denied.testing.datasets.base import PlatformClass from gps_denied.testing.datasets.base import PlatformClass
from gps_denied.testing.datasets.synthetic import SyntheticAdapter
pytestmark = [pytest.mark.unit] pytestmark = [pytest.mark.unit]
from gps_denied.testing.datasets.synthetic import SyntheticAdapter
def test_synthetic_has_raw_imu(): def test_synthetic_has_raw_imu():
+2 -2
View File
@@ -8,12 +8,12 @@ from pathlib import Path
import pytest import pytest
pytestmark = [pytest.mark.e2e]
from gps_denied.testing.datasets.vpair import VPAIRAdapter from gps_denied.testing.datasets.vpair import VPAIRAdapter
from gps_denied.testing.harness import E2EHarness from gps_denied.testing.harness import E2EHarness
from gps_denied.testing.metrics import absolute_trajectory_error from gps_denied.testing.metrics import absolute_trajectory_error
pytestmark = [pytest.mark.e2e]
VPAIR_SAMPLE_RMSE_CEILING_M = 20.0 # initial target, calibrate after first runs VPAIR_SAMPLE_RMSE_CEILING_M = 20.0 # initial target, calibrate after first runs
+2 -2
View File
@@ -10,14 +10,14 @@ from pathlib import Path
import numpy as np import numpy as np
import pytest import pytest
pytestmark = [pytest.mark.unit]
from gps_denied.testing.datasets.base import ( from gps_denied.testing.datasets.base import (
DatasetNotAvailableError, DatasetNotAvailableError,
PlatformClass, PlatformClass,
) )
from gps_denied.testing.datasets.vpair import VPAIRAdapter from gps_denied.testing.datasets.vpair import VPAIRAdapter
pytestmark = [pytest.mark.unit]
# ECEF for a point at roughly lat=50.737°, lon=7.095°, alt=350m (Bonn/Eifel region). # ECEF for a point at roughly lat=50.737°, lon=7.095°, alt=350m (Bonn/Eifel region).
# Chosen to hit the real VPAIR geographic area so the adapter's conversion # Chosen to hit the real VPAIR geographic area so the adapter's conversion
# produces plausible numbers the tests can assert on. # produces plausible numbers the tests can assert on.
+2 -2
View File
@@ -13,8 +13,6 @@ from unittest.mock import AsyncMock, MagicMock
import numpy as np import numpy as np
import pytest import pytest
pytestmark = [pytest.mark.integration]
from gps_denied.core.chunk_manager import RouteChunkManager from gps_denied.core.chunk_manager import RouteChunkManager
from gps_denied.core.gpr import GlobalPlaceRecognition from gps_denied.core.gpr import GlobalPlaceRecognition
from gps_denied.core.graph import FactorGraphOptimizer from gps_denied.core.graph import FactorGraphOptimizer
@@ -25,6 +23,8 @@ from gps_denied.core.recovery import FailureRecoveryCoordinator
from gps_denied.core.vo import SequentialVisualOdometry from gps_denied.core.vo import SequentialVisualOdometry
from gps_denied.schemas.graph import FactorGraphConfig from gps_denied.schemas.graph import FactorGraphConfig
pytestmark = [pytest.mark.integration]
# --------------------------------------------------------------- # ---------------------------------------------------------------
# Fixtures # Fixtures
+2 -2
View File
@@ -22,8 +22,6 @@ import time
import numpy as np import numpy as np
import pytest import pytest
pytestmark = [pytest.mark.integration]
from gps_denied.core.benchmark import ( from gps_denied.core.benchmark import (
AccuracyBenchmark, AccuracyBenchmark,
BenchmarkResult, BenchmarkResult,
@@ -33,6 +31,8 @@ from gps_denied.core.benchmark import (
from gps_denied.schemas import GPSPoint from gps_denied.schemas import GPSPoint
from gps_denied.schemas.eskf import ESKFConfig from gps_denied.schemas.eskf import ESKFConfig
pytestmark = [pytest.mark.integration]
ORIGIN = GPSPoint(lat=49.0, lon=32.0) ORIGIN = GPSPoint(lat=49.0, lon=32.0)
+2 -3
View File
@@ -3,9 +3,6 @@
import json import json
import pytest import pytest
pytestmark = [pytest.mark.integration]
from httpx import ASGITransport, AsyncClient from httpx import ASGITransport, AsyncClient
from sqlalchemy.ext.asyncio import AsyncSession, async_sessionmaker, create_async_engine from sqlalchemy.ext.asyncio import AsyncSession, async_sessionmaker, create_async_engine
@@ -13,6 +10,8 @@ from gps_denied.app import app
from gps_denied.db.engine import get_session from gps_denied.db.engine import get_session
from gps_denied.db.models import Base from gps_denied.db.models import Base
pytestmark = [pytest.mark.integration]
@pytest.fixture @pytest.fixture
async def override_get_session(): async def override_get_session():
+2 -2
View File
@@ -3,14 +3,14 @@
import numpy as np import numpy as np
import pytest import pytest
pytestmark = [pytest.mark.unit]
from gps_denied.core.chunk_manager import RouteChunkManager from gps_denied.core.chunk_manager import RouteChunkManager
from gps_denied.core.graph import FactorGraphOptimizer from gps_denied.core.graph import FactorGraphOptimizer
from gps_denied.schemas.chunk import ChunkStatus from gps_denied.schemas.chunk import ChunkStatus
from gps_denied.schemas.graph import FactorGraphConfig from gps_denied.schemas.graph import FactorGraphConfig
from gps_denied.schemas.metric import Sim3Transform from gps_denied.schemas.metric import Sim3Transform
pytestmark = [pytest.mark.unit]
@pytest.fixture @pytest.fixture
def chunk_manager(): def chunk_manager():
+2 -2
View File
@@ -3,8 +3,6 @@
import numpy as np import numpy as np
import pytest import pytest
pytestmark = [pytest.mark.unit]
from gps_denied.core.coordinates import ( from gps_denied.core.coordinates import (
CoordinateTransformer, CoordinateTransformer,
OriginNotSetError, OriginNotSetError,
@@ -14,6 +12,8 @@ from gps_denied.core.coordinates import (
) )
from gps_denied.schemas import CameraParameters, GPSPoint from gps_denied.schemas import CameraParameters, GPSPoint
pytestmark = [pytest.mark.unit]
@pytest.fixture @pytest.fixture
def transformer(): def transformer():
+2 -3
View File
@@ -1,15 +1,14 @@
"""Tests for the database layer — CRUD, cascade, transactions.""" """Tests for the database layer — CRUD, cascade, transactions."""
import pytest import pytest
pytestmark = [pytest.mark.integration]
from sqlalchemy import event from sqlalchemy import event
from sqlalchemy.ext.asyncio import AsyncSession, async_sessionmaker, create_async_engine from sqlalchemy.ext.asyncio import AsyncSession, async_sessionmaker, create_async_engine
from gps_denied.db.models import Base from gps_denied.db.models import Base
from gps_denied.db.repository import FlightRepository from gps_denied.db.repository import FlightRepository
pytestmark = [pytest.mark.integration]
@pytest.fixture @pytest.fixture
async def session(): async def session():
+2 -2
View File
@@ -3,13 +3,13 @@
import numpy as np import numpy as np
import pytest import pytest
pytestmark = [pytest.mark.unit]
from gps_denied.core.coordinates import CoordinateTransformer from gps_denied.core.coordinates import CoordinateTransformer
from gps_denied.core.eskf import ESKF from gps_denied.core.eskf import ESKF
from gps_denied.schemas import GPSPoint from gps_denied.schemas import GPSPoint
from gps_denied.schemas.eskf import ConfidenceTier, ESKFConfig, IMUMeasurement from gps_denied.schemas.eskf import ConfidenceTier, ESKFConfig, IMUMeasurement
pytestmark = [pytest.mark.unit]
@pytest.fixture @pytest.fixture
def eskf(): def eskf():
+2 -2
View File
@@ -3,12 +3,12 @@
import numpy as np import numpy as np
import pytest import pytest
pytestmark = [pytest.mark.unit]
from gps_denied.core.gpr import GlobalPlaceRecognition from gps_denied.core.gpr import GlobalPlaceRecognition
from gps_denied.core.models import ModelManager from gps_denied.core.models import ModelManager
from gps_denied.schemas.gpr import TileCandidate from gps_denied.schemas.gpr import TileCandidate
pytestmark = [pytest.mark.unit]
@pytest.fixture @pytest.fixture
def gpr(): def gpr():
+2 -2
View File
@@ -17,12 +17,12 @@ import time
import numpy as np import numpy as np
import pytest import pytest
pytestmark = [pytest.mark.blackbox, pytest.mark.ac("AC-4.3")]
from gps_denied.core.mavlink import _confidence_to_fix_type, _eskf_to_gps_input from gps_denied.core.mavlink import _confidence_to_fix_type, _eskf_to_gps_input
from gps_denied.schemas import GPSPoint from gps_denied.schemas import GPSPoint
from gps_denied.schemas.eskf import ConfidenceTier, ESKFState from gps_denied.schemas.eskf import ConfidenceTier, ESKFState
pytestmark = [pytest.mark.blackbox, pytest.mark.ac("AC-4.3")]
_ORIGIN = GPSPoint(lat=49.0, lon=32.0) _ORIGIN = GPSPoint(lat=49.0, lon=32.0)
+2 -2
View File
@@ -3,14 +3,14 @@
import numpy as np import numpy as np
import pytest import pytest
pytestmark = [pytest.mark.unit]
from gps_denied.core.graph import FactorGraphOptimizer from gps_denied.core.graph import FactorGraphOptimizer
from gps_denied.schemas import GPSPoint from gps_denied.schemas import GPSPoint
from gps_denied.schemas.graph import FactorGraphConfig from gps_denied.schemas.graph import FactorGraphConfig
from gps_denied.schemas.metric import Sim3Transform from gps_denied.schemas.metric import Sim3Transform
from gps_denied.schemas.vo import RelativePose from gps_denied.schemas.vo import RelativePose
pytestmark = [pytest.mark.unit]
@pytest.fixture @pytest.fixture
def optimizer(): def optimizer():
+2 -3
View File
@@ -1,13 +1,12 @@
"""Tests for the health endpoint.""" """Tests for the health endpoint."""
import pytest import pytest
pytestmark = [pytest.mark.integration]
from httpx import ASGITransport, AsyncClient from httpx import ASGITransport, AsyncClient
from gps_denied.app import app from gps_denied.app import app
pytestmark = [pytest.mark.integration]
@pytest.mark.asyncio @pytest.mark.asyncio
async def test_health_returns_ok(): async def test_health_returns_ok():
+2 -2
View File
@@ -14,8 +14,6 @@ import time
import numpy as np import numpy as np
import pytest import pytest
pytestmark = [pytest.mark.unit]
from gps_denied.core.mavlink import ( from gps_denied.core.mavlink import (
MAVLinkBridge, MAVLinkBridge,
MockMAVConnection, MockMAVConnection,
@@ -27,6 +25,8 @@ from gps_denied.schemas import GPSPoint
from gps_denied.schemas.eskf import ConfidenceTier, ESKFState from gps_denied.schemas.eskf import ConfidenceTier, ESKFState
from gps_denied.schemas.mavlink import GPSInputMessage, RelocalizationRequest from gps_denied.schemas.mavlink import GPSInputMessage, RelocalizationRequest
pytestmark = [pytest.mark.unit]
# --------------------------------------------------------------- # ---------------------------------------------------------------
# Helpers # Helpers
# --------------------------------------------------------------- # ---------------------------------------------------------------
+2 -2
View File
@@ -3,14 +3,14 @@
import numpy as np import numpy as np
import pytest import pytest
pytestmark = [pytest.mark.unit]
from gps_denied.core.metric import MetricRefinement from gps_denied.core.metric import MetricRefinement
from gps_denied.core.models import ModelManager from gps_denied.core.models import ModelManager
from gps_denied.schemas import GPSPoint from gps_denied.schemas import GPSPoint
from gps_denied.schemas.metric import AlignmentResult, ChunkAlignmentResult from gps_denied.schemas.metric import AlignmentResult, ChunkAlignmentResult
from gps_denied.schemas.satellite import TileBounds from gps_denied.schemas.satellite import TileBounds
pytestmark = [pytest.mark.unit]
@pytest.fixture @pytest.fixture
def metric(): def metric():
+2 -2
View File
@@ -5,11 +5,11 @@ import cv2
import numpy as np import numpy as np
import pytest import pytest
pytestmark = [pytest.mark.unit]
from gps_denied.core.pipeline import ImageInputPipeline, QueueFullError from gps_denied.core.pipeline import ImageInputPipeline, QueueFullError
from gps_denied.schemas.image import ImageBatch from gps_denied.schemas.image import ImageBatch
pytestmark = [pytest.mark.unit]
@pytest.fixture @pytest.fixture
def pipeline(tmp_path): def pipeline(tmp_path):
+2 -2
View File
@@ -5,8 +5,6 @@ from unittest.mock import AsyncMock, MagicMock
import numpy as np import numpy as np
import pytest import pytest
pytestmark = [pytest.mark.integration]
from gps_denied.core.chunk_manager import RouteChunkManager from gps_denied.core.chunk_manager import RouteChunkManager
from gps_denied.core.gpr import GlobalPlaceRecognition from gps_denied.core.gpr import GlobalPlaceRecognition
from gps_denied.core.graph import FactorGraphOptimizer from gps_denied.core.graph import FactorGraphOptimizer
@@ -17,6 +15,8 @@ from gps_denied.core.recovery import FailureRecoveryCoordinator
from gps_denied.core.vo import SequentialVisualOdometry from gps_denied.core.vo import SequentialVisualOdometry
from gps_denied.schemas.graph import FactorGraphConfig from gps_denied.schemas.graph import FactorGraphConfig
pytestmark = [pytest.mark.integration]
@pytest.fixture @pytest.fixture
def processor(): def processor():
+2 -2
View File
@@ -14,14 +14,14 @@ from unittest.mock import AsyncMock, MagicMock
import numpy as np import numpy as np
import pytest import pytest
pytestmark = [pytest.mark.integration]
from gps_denied.core.coordinates import CoordinateTransformer from gps_denied.core.coordinates import CoordinateTransformer
from gps_denied.core.processor import FlightProcessor, TrackingState from gps_denied.core.processor import FlightProcessor, TrackingState
from gps_denied.core.rotation import ImageRotationManager from gps_denied.core.rotation import ImageRotationManager
from gps_denied.schemas import CameraParameters, GPSPoint from gps_denied.schemas import CameraParameters, GPSPoint
from gps_denied.schemas.vo import RelativePose from gps_denied.schemas.vo import RelativePose
pytestmark = [pytest.mark.integration]
# --------------------------------------------------------------- # ---------------------------------------------------------------
# Helpers # Helpers
# --------------------------------------------------------------- # ---------------------------------------------------------------
+2 -2
View File
@@ -3,8 +3,6 @@
import numpy as np import numpy as np
import pytest import pytest
pytestmark = [pytest.mark.unit]
from gps_denied.core.chunk_manager import RouteChunkManager from gps_denied.core.chunk_manager import RouteChunkManager
from gps_denied.core.gpr import GlobalPlaceRecognition from gps_denied.core.gpr import GlobalPlaceRecognition
from gps_denied.core.graph import FactorGraphOptimizer from gps_denied.core.graph import FactorGraphOptimizer
@@ -13,6 +11,8 @@ from gps_denied.core.models import ModelManager
from gps_denied.core.recovery import FailureRecoveryCoordinator from gps_denied.core.recovery import FailureRecoveryCoordinator
from gps_denied.schemas.graph import FactorGraphConfig from gps_denied.schemas.graph import FactorGraphConfig
pytestmark = [pytest.mark.unit]
@pytest.fixture @pytest.fixture
def recovery(): def recovery():
+2 -2
View File
@@ -5,13 +5,13 @@ from datetime import datetime, timezone
import numpy as np import numpy as np
import pytest import pytest
pytestmark = [pytest.mark.unit]
from gps_denied.core.rotation import IImageMatcher, ImageRotationManager from gps_denied.core.rotation import IImageMatcher, ImageRotationManager
from gps_denied.schemas import GPSPoint from gps_denied.schemas import GPSPoint
from gps_denied.schemas.rotation import RotationResult from gps_denied.schemas.rotation import RotationResult
from gps_denied.schemas.satellite import TileBounds from gps_denied.schemas.satellite import TileBounds
pytestmark = [pytest.mark.unit]
@pytest.fixture @pytest.fixture
def rotation_manager(): def rotation_manager():
+2 -2
View File
@@ -3,12 +3,12 @@
import numpy as np import numpy as np
import pytest import pytest
pytestmark = [pytest.mark.unit]
from gps_denied.core.satellite import SatelliteDataManager from gps_denied.core.satellite import SatelliteDataManager
from gps_denied.schemas import GPSPoint from gps_denied.schemas import GPSPoint
from gps_denied.utils import mercator from gps_denied.utils import mercator
pytestmark = [pytest.mark.unit]
# --------------------------------------------------------------- # ---------------------------------------------------------------
# Mercator utils # Mercator utils
# --------------------------------------------------------------- # ---------------------------------------------------------------
+2 -3
View File
@@ -3,9 +3,6 @@
from datetime import datetime, timezone from datetime import datetime, timezone
import pytest import pytest
pytestmark = [pytest.mark.unit]
from pydantic import ValidationError from pydantic import ValidationError
from gps_denied.config import get_settings from gps_denied.config import get_settings
@@ -20,6 +17,8 @@ from gps_denied.schemas.flight import (
Waypoint, Waypoint,
) )
pytestmark = [pytest.mark.unit]
# ── GPSPoint ────────────────────────────────────────────────────────────── # ── GPSPoint ──────────────────────────────────────────────────────────────
@pytest.mark.ac("AC-6.3") @pytest.mark.ac("AC-6.3")
+2 -2
View File
@@ -3,8 +3,6 @@
import numpy as np import numpy as np
import pytest import pytest
pytestmark = [pytest.mark.unit]
from gps_denied.core.models import ModelManager from gps_denied.core.models import ModelManager
from gps_denied.core.vo import ( from gps_denied.core.vo import (
CuVSLAMVisualOdometry, CuVSLAMVisualOdometry,
@@ -16,6 +14,8 @@ from gps_denied.core.vo import (
from gps_denied.schemas import CameraParameters from gps_denied.schemas import CameraParameters
from gps_denied.schemas.vo import Features, Matches from gps_denied.schemas.vo import Features, Matches
pytestmark = [pytest.mark.unit]
@pytest.fixture @pytest.fixture
def vo(): def vo():