mirror of
https://github.com/azaion/gps-denied-onboard.git
synced 2026-06-21 07:01:14 +00:00
[AZ-398] Clear remaining test-suite failures + warnings
route_client: route Tier-2 sleep through WallClock.sleep_until_ns instead of bare time.sleep, fixing the AZ-398 AC-4 components-have-no- direct-time meta-test failure. helpers/__init__: lazy-load the heavy descriptor / wgs / image modules via PEP 562 __getattr__ to fix the cold-start NFR regression (test_cold_start_under_1000ms_p99 was 1409ms p99; lazy imports drop it to ~210ms). pyproject filterwarnings: silence the three upstream SwigPy* DeprecationWarnings emitted by faiss-cpu / gtsam at import time. They are an upstream SWIG-binding-layer issue and cannot be fixed from our code. Suppression is scoped to the three exact messages. State: batch-3 of cycle-4 closed; cumulative-review marker bumped. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -6,9 +6,9 @@ step: 10
|
||||
name: Implement
|
||||
status: in_progress
|
||||
sub_step:
|
||||
phase: 7
|
||||
name: batch-loop
|
||||
detail: "batch 3 of 4 — AZ-895"
|
||||
phase: 8
|
||||
name: cumulative-review
|
||||
detail: "batches 01-03 of cycle 4 — first cumulative review pending"
|
||||
retry_count: 0
|
||||
cycle: 4
|
||||
tracker: jira
|
||||
|
||||
@@ -188,6 +188,16 @@ markers = [
|
||||
"slow: tests slower than ~5s",
|
||||
"contract: contract-suite test (frozen public surfaces)",
|
||||
]
|
||||
# Silence the three boot-time DeprecationWarnings emitted by the SWIG
|
||||
# binding layer used by faiss-cpu (and gtsam on Linux). They surface as
|
||||
# `<frozen importlib._bootstrap>:241` "builtin type SwigPy* has no
|
||||
# __module__ attribute" and are an upstream issue we cannot fix from
|
||||
# our code — they appear whenever any SWIG-bound C extension is imported.
|
||||
filterwarnings = [
|
||||
"ignore:builtin type SwigPyPacked has no __module__ attribute:DeprecationWarning",
|
||||
"ignore:builtin type SwigPyObject has no __module__ attribute:DeprecationWarning",
|
||||
"ignore:builtin type swigvarlink has no __module__ attribute:DeprecationWarning",
|
||||
]
|
||||
|
||||
[tool.coverage.run]
|
||||
source = ["src/gps_denied_onboard"]
|
||||
|
||||
@@ -205,7 +205,7 @@ class SatelliteProviderRouteClient:
|
||||
self._poll_interval_s = float(poll_interval_s)
|
||||
self._poll_max_attempts = int(poll_max_attempts)
|
||||
self._injected_client = http_client
|
||||
self._sleep = sleep if sleep is not None else time.sleep
|
||||
self._sleep = sleep if sleep is not None else _default_sleep
|
||||
self._clock_ms = clock_ms if clock_ms is not None else _wall_clock_ms
|
||||
self._logger = logger or logging.getLogger(
|
||||
"gps_denied_onboard.components.c11_tile_manager.route_client"
|
||||
@@ -792,6 +792,21 @@ def _wall_clock_ms() -> int:
|
||||
return int(time.monotonic() * 1000)
|
||||
|
||||
|
||||
def _default_sleep(seconds: float) -> None:
|
||||
"""Production sleep hook routes through :class:`WallClock.sleep_until_ns`.
|
||||
|
||||
Tests inject a no-op or a recorder via the ``sleep`` constructor
|
||||
parameter. Routing through ``WallClock`` keeps the AZ-398 AC-4 AST
|
||||
scan over ``components/`` from seeing a bare ``time.sleep`` — same
|
||||
pattern used by ``tile_downloader._default_sleep``.
|
||||
"""
|
||||
|
||||
from gps_denied_onboard.clock.wall_clock import WallClock
|
||||
|
||||
clock = WallClock()
|
||||
clock.sleep_until_ns(clock.monotonic_ns() + int(seconds * 1_000_000_000))
|
||||
|
||||
|
||||
def _canonical_json_bytes(body: dict[str, Any]) -> bytes:
|
||||
"""Stable byte representation for the sha256 audit field.
|
||||
|
||||
|
||||
@@ -1,58 +1,66 @@
|
||||
"""Shared utilities (E-CC-HELPERS / AZ-264).
|
||||
"""Shared utilities (E-CC-HELPERS / AZ-264) — PEP 562 lazy re-exports.
|
||||
|
||||
Each helper has its own task (AZ-276..AZ-283). This package exposes the
|
||||
ones that have landed so consumers can depend on a stable public surface
|
||||
without reaching into the helper modules directly.
|
||||
Each helper has its own task (AZ-276..AZ-283). Public names are
|
||||
exposed via :func:`__getattr__` so importing a single submodule
|
||||
(e.g. ``from gps_denied_onboard.helpers.iso_timestamps import
|
||||
iso_ts_now``) does not eagerly pull sibling heavies (``numpy``,
|
||||
``cv2``, ``pyproj``, ``gtsam``). Cold-start critical for the C12
|
||||
operator-orchestrator CLI (NFR-perf-cold-start).
|
||||
"""
|
||||
|
||||
from gps_denied_onboard.helpers.descriptor_normaliser import (
|
||||
ALLOWED_DTYPES,
|
||||
DescriptorNormaliser,
|
||||
DescriptorNormaliserError,
|
||||
)
|
||||
from gps_denied_onboard.helpers.engine_filename_schema import (
|
||||
ALLOWED_PRECISIONS,
|
||||
ENGINE_SUFFIX,
|
||||
EngineFilenameSchema,
|
||||
EngineFilenameSchemaError,
|
||||
)
|
||||
from gps_denied_onboard.helpers.accuracy_report import (
|
||||
from __future__ import annotations
|
||||
|
||||
from typing import TYPE_CHECKING, Any
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from gps_denied_onboard.helpers.accuracy_report import (
|
||||
AC3_GATE_PCT,
|
||||
AC3_GATE_THRESHOLD_M,
|
||||
ReportContext,
|
||||
format_failure_message,
|
||||
render_report,
|
||||
verdict_passes_ac3,
|
||||
)
|
||||
from gps_denied_onboard.helpers.gps_compare import (
|
||||
)
|
||||
from gps_denied_onboard.helpers.descriptor_normaliser import (
|
||||
ALLOWED_DTYPES,
|
||||
DescriptorNormaliser,
|
||||
DescriptorNormaliserError,
|
||||
)
|
||||
from gps_denied_onboard.helpers.engine_filename_schema import (
|
||||
ALLOWED_PRECISIONS,
|
||||
ENGINE_SUFFIX,
|
||||
EngineFilenameSchema,
|
||||
EngineFilenameSchemaError,
|
||||
)
|
||||
from gps_denied_onboard.helpers.gps_compare import (
|
||||
GroundTruthRow,
|
||||
HorizontalErrorDistribution,
|
||||
horizontal_error_distribution,
|
||||
l2_horizontal_m,
|
||||
match_percentage,
|
||||
percentile_sorted,
|
||||
)
|
||||
from gps_denied_onboard.helpers.imu_preintegrator import (
|
||||
)
|
||||
from gps_denied_onboard.helpers.imu_preintegrator import (
|
||||
CombinedImuFactor,
|
||||
ImuPreintegrationError,
|
||||
ImuPreintegrator,
|
||||
make_imu_preintegrator,
|
||||
)
|
||||
from gps_denied_onboard.helpers.iso_timestamps import (
|
||||
)
|
||||
from gps_denied_onboard.helpers.iso_timestamps import (
|
||||
iso_ts_from_clock,
|
||||
iso_ts_now,
|
||||
)
|
||||
from gps_denied_onboard.helpers.lightglue_runtime import (
|
||||
)
|
||||
from gps_denied_onboard.helpers.lightglue_runtime import (
|
||||
LightGlueConcurrentAccessError,
|
||||
LightGlueRuntime,
|
||||
LightGlueRuntimeError,
|
||||
)
|
||||
from gps_denied_onboard.helpers.ransac_filter import (
|
||||
)
|
||||
from gps_denied_onboard.helpers.ransac_filter import (
|
||||
RansacFilter,
|
||||
RansacFilterError,
|
||||
RansacResult,
|
||||
)
|
||||
from gps_denied_onboard.helpers.se3_utils import (
|
||||
)
|
||||
from gps_denied_onboard.helpers.se3_utils import (
|
||||
SE3,
|
||||
Se3InvalidMatrixError,
|
||||
adjoint,
|
||||
@@ -61,64 +69,91 @@ from gps_denied_onboard.helpers.se3_utils import (
|
||||
log_map,
|
||||
matrix_to_se3,
|
||||
se3_to_matrix,
|
||||
)
|
||||
from gps_denied_onboard.helpers.sha256_sidecar import (
|
||||
)
|
||||
from gps_denied_onboard.helpers.sha256_sidecar import (
|
||||
SIDECAR_SUFFIX,
|
||||
Sha256Sidecar,
|
||||
Sha256SidecarError,
|
||||
)
|
||||
from gps_denied_onboard.helpers.wgs_converter import (
|
||||
)
|
||||
from gps_denied_onboard.helpers.wgs_converter import (
|
||||
MAX_ZOOM,
|
||||
WEB_MERCATOR_MAX_LAT_DEG,
|
||||
WgsConversionError,
|
||||
WgsConverter,
|
||||
)
|
||||
)
|
||||
|
||||
__all__ = [
|
||||
"AC3_GATE_PCT",
|
||||
"AC3_GATE_THRESHOLD_M",
|
||||
"ALLOWED_DTYPES",
|
||||
"ALLOWED_PRECISIONS",
|
||||
"ENGINE_SUFFIX",
|
||||
"MAX_ZOOM",
|
||||
"ReportContext",
|
||||
"SE3",
|
||||
"SIDECAR_SUFFIX",
|
||||
"WEB_MERCATOR_MAX_LAT_DEG",
|
||||
"CombinedImuFactor",
|
||||
"DescriptorNormaliser",
|
||||
"DescriptorNormaliserError",
|
||||
"EngineFilenameSchema",
|
||||
"EngineFilenameSchemaError",
|
||||
"GroundTruthRow",
|
||||
"HorizontalErrorDistribution",
|
||||
"ImuPreintegrationError",
|
||||
"ImuPreintegrator",
|
||||
"LightGlueConcurrentAccessError",
|
||||
"LightGlueRuntime",
|
||||
"LightGlueRuntimeError",
|
||||
"RansacFilter",
|
||||
"RansacFilterError",
|
||||
"RansacResult",
|
||||
"Se3InvalidMatrixError",
|
||||
"Sha256Sidecar",
|
||||
"Sha256SidecarError",
|
||||
"WgsConversionError",
|
||||
"WgsConverter",
|
||||
"adjoint",
|
||||
"exp_map",
|
||||
"format_failure_message",
|
||||
"horizontal_error_distribution",
|
||||
"is_valid_rotation",
|
||||
"iso_ts_from_clock",
|
||||
"iso_ts_now",
|
||||
"l2_horizontal_m",
|
||||
"log_map",
|
||||
"match_percentage",
|
||||
"make_imu_preintegrator",
|
||||
"matrix_to_se3",
|
||||
"percentile_sorted",
|
||||
"render_report",
|
||||
"se3_to_matrix",
|
||||
"verdict_passes_ac3",
|
||||
]
|
||||
# PEP 562 lazy resolution. Each entry maps a public name → (submodule, attr).
|
||||
_LAZY_NAMES: dict[str, tuple[str, str]] = {
|
||||
# accuracy_report
|
||||
"AC3_GATE_PCT": ("gps_denied_onboard.helpers.accuracy_report", "AC3_GATE_PCT"),
|
||||
"AC3_GATE_THRESHOLD_M": ("gps_denied_onboard.helpers.accuracy_report", "AC3_GATE_THRESHOLD_M"),
|
||||
"ReportContext": ("gps_denied_onboard.helpers.accuracy_report", "ReportContext"),
|
||||
"format_failure_message": ("gps_denied_onboard.helpers.accuracy_report", "format_failure_message"),
|
||||
"render_report": ("gps_denied_onboard.helpers.accuracy_report", "render_report"),
|
||||
"verdict_passes_ac3": ("gps_denied_onboard.helpers.accuracy_report", "verdict_passes_ac3"),
|
||||
# descriptor_normaliser
|
||||
"ALLOWED_DTYPES": ("gps_denied_onboard.helpers.descriptor_normaliser", "ALLOWED_DTYPES"),
|
||||
"DescriptorNormaliser": ("gps_denied_onboard.helpers.descriptor_normaliser", "DescriptorNormaliser"),
|
||||
"DescriptorNormaliserError": ("gps_denied_onboard.helpers.descriptor_normaliser", "DescriptorNormaliserError"),
|
||||
# engine_filename_schema
|
||||
"ALLOWED_PRECISIONS": ("gps_denied_onboard.helpers.engine_filename_schema", "ALLOWED_PRECISIONS"),
|
||||
"ENGINE_SUFFIX": ("gps_denied_onboard.helpers.engine_filename_schema", "ENGINE_SUFFIX"),
|
||||
"EngineFilenameSchema": ("gps_denied_onboard.helpers.engine_filename_schema", "EngineFilenameSchema"),
|
||||
"EngineFilenameSchemaError": ("gps_denied_onboard.helpers.engine_filename_schema", "EngineFilenameSchemaError"),
|
||||
# gps_compare
|
||||
"GroundTruthRow": ("gps_denied_onboard.helpers.gps_compare", "GroundTruthRow"),
|
||||
"HorizontalErrorDistribution": ("gps_denied_onboard.helpers.gps_compare", "HorizontalErrorDistribution"),
|
||||
"horizontal_error_distribution": ("gps_denied_onboard.helpers.gps_compare", "horizontal_error_distribution"),
|
||||
"l2_horizontal_m": ("gps_denied_onboard.helpers.gps_compare", "l2_horizontal_m"),
|
||||
"match_percentage": ("gps_denied_onboard.helpers.gps_compare", "match_percentage"),
|
||||
"percentile_sorted": ("gps_denied_onboard.helpers.gps_compare", "percentile_sorted"),
|
||||
# imu_preintegrator
|
||||
"CombinedImuFactor": ("gps_denied_onboard.helpers.imu_preintegrator", "CombinedImuFactor"),
|
||||
"ImuPreintegrationError": ("gps_denied_onboard.helpers.imu_preintegrator", "ImuPreintegrationError"),
|
||||
"ImuPreintegrator": ("gps_denied_onboard.helpers.imu_preintegrator", "ImuPreintegrator"),
|
||||
"make_imu_preintegrator": ("gps_denied_onboard.helpers.imu_preintegrator", "make_imu_preintegrator"),
|
||||
# iso_timestamps
|
||||
"iso_ts_from_clock": ("gps_denied_onboard.helpers.iso_timestamps", "iso_ts_from_clock"),
|
||||
"iso_ts_now": ("gps_denied_onboard.helpers.iso_timestamps", "iso_ts_now"),
|
||||
# lightglue_runtime
|
||||
"LightGlueConcurrentAccessError": ("gps_denied_onboard.helpers.lightglue_runtime", "LightGlueConcurrentAccessError"),
|
||||
"LightGlueRuntime": ("gps_denied_onboard.helpers.lightglue_runtime", "LightGlueRuntime"),
|
||||
"LightGlueRuntimeError": ("gps_denied_onboard.helpers.lightglue_runtime", "LightGlueRuntimeError"),
|
||||
# ransac_filter
|
||||
"RansacFilter": ("gps_denied_onboard.helpers.ransac_filter", "RansacFilter"),
|
||||
"RansacFilterError": ("gps_denied_onboard.helpers.ransac_filter", "RansacFilterError"),
|
||||
"RansacResult": ("gps_denied_onboard.helpers.ransac_filter", "RansacResult"),
|
||||
# se3_utils
|
||||
"SE3": ("gps_denied_onboard.helpers.se3_utils", "SE3"),
|
||||
"Se3InvalidMatrixError": ("gps_denied_onboard.helpers.se3_utils", "Se3InvalidMatrixError"),
|
||||
"adjoint": ("gps_denied_onboard.helpers.se3_utils", "adjoint"),
|
||||
"exp_map": ("gps_denied_onboard.helpers.se3_utils", "exp_map"),
|
||||
"is_valid_rotation": ("gps_denied_onboard.helpers.se3_utils", "is_valid_rotation"),
|
||||
"log_map": ("gps_denied_onboard.helpers.se3_utils", "log_map"),
|
||||
"matrix_to_se3": ("gps_denied_onboard.helpers.se3_utils", "matrix_to_se3"),
|
||||
"se3_to_matrix": ("gps_denied_onboard.helpers.se3_utils", "se3_to_matrix"),
|
||||
# sha256_sidecar
|
||||
"SIDECAR_SUFFIX": ("gps_denied_onboard.helpers.sha256_sidecar", "SIDECAR_SUFFIX"),
|
||||
"Sha256Sidecar": ("gps_denied_onboard.helpers.sha256_sidecar", "Sha256Sidecar"),
|
||||
"Sha256SidecarError": ("gps_denied_onboard.helpers.sha256_sidecar", "Sha256SidecarError"),
|
||||
# wgs_converter
|
||||
"MAX_ZOOM": ("gps_denied_onboard.helpers.wgs_converter", "MAX_ZOOM"),
|
||||
"WEB_MERCATOR_MAX_LAT_DEG": ("gps_denied_onboard.helpers.wgs_converter", "WEB_MERCATOR_MAX_LAT_DEG"),
|
||||
"WgsConversionError": ("gps_denied_onboard.helpers.wgs_converter", "WgsConversionError"),
|
||||
"WgsConverter": ("gps_denied_onboard.helpers.wgs_converter", "WgsConverter"),
|
||||
}
|
||||
|
||||
|
||||
def __getattr__(name: str) -> Any:
|
||||
target = _LAZY_NAMES.get(name)
|
||||
if target is None:
|
||||
raise AttributeError(f"module {__name__!r} has no attribute {name!r}")
|
||||
import importlib
|
||||
|
||||
module = importlib.import_module(target[0])
|
||||
value = getattr(module, target[1])
|
||||
globals()[name] = value
|
||||
return value
|
||||
|
||||
|
||||
__all__ = sorted(_LAZY_NAMES.keys())
|
||||
|
||||
Reference in New Issue
Block a user