From 1e1120316f63b85fb2d9daa8d0145d0fe8cfb5fb Mon Sep 17 00:00:00 2001 From: Dom <168790843+firestar5683@users.noreply.github.com> Date: Fri, 16 Oct 2026 08:31:08 -0500 Subject: [PATCH] Clarify radar projection types without changing behavior --- .../tests/test_radar_lead_projection_cache.py | 12 +++++++++++- .../starpilot/longitudinal/toyota_output_policy.py | 3 ++- prebuilt.json | 2 +- 3 files changed, 14 insertions(+), 3 deletions(-) diff --git a/openpilot/starpilot/longitudinal/tests/test_radar_lead_projection_cache.py b/openpilot/starpilot/longitudinal/tests/test_radar_lead_projection_cache.py index 42735a26ee..98b01ddbc6 100644 --- a/openpilot/starpilot/longitudinal/tests/test_radar_lead_projection_cache.py +++ b/openpilot/starpilot/longitudinal/tests/test_radar_lead_projection_cache.py @@ -2,6 +2,7 @@ from collections import OrderedDict from concurrent.futures import ThreadPoolExecutor import threading +from typing import TypedDict import unittest from unittest.mock import patch @@ -9,11 +10,19 @@ from openpilot.cereal import log from openpilot.starpilot.longitudinal import toyota_output_policy as policy +class ProjectionArguments(TypedDict): + message_ns: int + receipt_ns: int + now_ns: int + drive_id: int + valid: bool + + class TestRadarLeadProjectionCache(unittest.TestCase): def setUp(self): with policy._RADAR_LEAD_LOCK: policy._RADAR_LEAD_ROWS.clear() - self.kwargs = {'message_ns': 1_000_000_000, 'receipt_ns': 1_001_000_000, + self.kwargs: ProjectionArguments = {'message_ns': 1_000_000_000, 'receipt_ns': 1_001_000_000, 'now_ns': 1_002_000_000, 'drive_id': 900_000_000, 'valid': True} def tearDown(self): @@ -80,6 +89,7 @@ class TestRadarLeadProjectionCache(unittest.TestCase): for _ in range(5): leads = policy.leads_from_radar(radar, **self.kwargs) self.assertIsNotNone(leads) + assert leads is not None self.assertEqual(leads[0], policy.Lead(True, worker + 1., 0., 0., 0.)) return True diff --git a/openpilot/starpilot/longitudinal/toyota_output_policy.py b/openpilot/starpilot/longitudinal/toyota_output_policy.py index 2906f26032..4f7da01192 100644 --- a/openpilot/starpilot/longitudinal/toyota_output_policy.py +++ b/openpilot/starpilot/longitudinal/toyota_output_policy.py @@ -7,6 +7,7 @@ source authority is lost. It does not select a planner profile or grant control. from collections import OrderedDict from dataclasses import dataclass +from typing import cast import capnp import math @@ -60,7 +61,7 @@ def leads_from_radar(radar, *, message_ns: int, receipt_ns: int, now_ns: int, now_ns - message_ns > RADAR_MAX_AGE_NS or now_ns - receipt_ns > RADAR_MAX_AGE_NS): return None rows = _radar_lead_rows(radar) - return tuple(Lead(*row) for row in rows) if rows is not None else None + return cast(tuple[Lead, Lead], tuple(Lead(*row) for row in rows)) if rows is not None else None # Only immutable pure projection values are retained, never transport authority. diff --git a/prebuilt.json b/prebuilt.json index ab1bfa2621..f57eb688c4 100644 --- a/prebuilt.json +++ b/prebuilt.json @@ -1 +1 @@ -{"protected_inventory_sha256": "e1dcbcb17d8c48b0e4c07784d7872ba43d45f067e7043b019f61db708457124d", "schema_version": 1} +{"protected_inventory_sha256": "4303ba5948f7926d28d165289350db695927a393280d474174ee563a81c5a5a0", "schema_version": 1}