perf(perception): bound low-step component fanout

This commit is contained in:
DCCONSTRUCTIONS
2026-08-26 13:10:02 +03:00
parent 048716b3b3
commit 252cbc8495
4 changed files with 23 additions and 11 deletions
@@ -19,7 +19,7 @@
"componentization": {
"voxel_size_m": 0.45,
"neighbor_radius_cells": 1,
"minimum_points": 2,
"minimum_points": 5,
"minimum_voxels": 1,
"local_radius_m": 10.0,
"maximum_candidate_points_per_frame": 768,
@@ -22,7 +22,7 @@
"provider_id": "ravnoves00-additive-low-step-geometry/v1",
"version": "0.1.0",
"revision": "m48r3-ravnoves00-additive-low-step/v1",
"sha256": "62dd41400169080e1a38f713b283b67cdf201078c4c7fd807783fe6c1838082c"
"sha256": "0d46dcb28542902849ee31de4c4594ef90407834d9e5551474fc4191cadbf1a9"
},
{
"role": "temporal",
@@ -113,10 +113,10 @@ $expectedConfigs = [ordered]@{
if ($AdditiveLowStep) {
$expectedConfigs.Remove("m48n-rf-detr-native-reference-graph-shadow-v0.json")
$expectedConfigs["m48r3-native-low-step-reference-graph-shadow-v1.json"] = (
"d5434825c3a73a9a070aea37927755771e07d38a017111d2014a8e8c88969227"
"5f5832a0a0c1879374b166071efed02de14aeda815046da5711d6f4053eb9af4"
)
$expectedConfigs["m48r3-additive-low-step-occupancy-v1.json"] = (
"62dd41400169080e1a38f713b283b67cdf201078c4c7fd807783fe6c1838082c"
"0d46dcb28542902849ee31de4c4594ef90407834d9e5551474fc4191cadbf1a9"
)
}
foreach ($entry in $expectedConfigs.GetEnumerator()) {
+19 -7
View File
@@ -106,13 +106,19 @@ def test_wide_operator_region_cannot_bridge_two_spatial_components() -> None:
points = np.asarray(
(
(0.00, 0.0, 5.00),
(0.10, 0.0, 5.05),
(0.02, 0.0, 5.00),
(0.04, 0.0, 5.00),
(0.06, 0.0, 5.00),
(0.08, 0.0, 5.00),
(1.70, 0.0, 5.00),
(1.80, 0.0, 5.05),
(1.72, 0.0, 5.00),
(1.74, 0.0, 5.00),
(1.76, 0.0, 5.00),
(1.78, 0.0, 5.00),
),
dtype=np.float64,
)
store = _Store(_frame(points), np.ones(4, dtype=np.uint8))
store = _Store(_frame(points), np.ones(10, dtype=np.uint8))
provider = M48AdditiveLowStepGeometryProvider( # type: ignore[arg-type]
store=store,
profile=load_m48_low_step_occupancy_profile(PROFILE_PATH),
@@ -126,12 +132,15 @@ def test_wide_operator_region_cannot_bridge_two_spatial_components() -> None:
)
assert len(additive) == 2
assert {item.source_point_ids for item in additive} == {(0, 1), (2, 3)}
assert {item.source_point_ids for item in additive} == {
(0, 1, 2, 3, 4),
(5, 6, 7, 8, 9),
}
assert all(item.semantic_hint is None for item in additive)
assert all("occupied-only-never-free" in item.reason_codes for item in additive)
snapshot = provider.snapshot()
assert snapshot.additive_observation_count == 2
assert snapshot.additive_voxel_count == 3
assert snapshot.additive_voxel_count == 2
assert snapshot.failed_frames == 0
@@ -141,9 +150,12 @@ def test_frame_1856_preserves_baseline_posts_and_splits_low_hemisphere_support()
store=store,
profile=load_m48_low_step_occupancy_profile(PROFILE_PATH),
)
frame = store.frame_for_index(1856)
# Operator-anchor sequences are one-based display frame numbers, while the
# recorded-source packet and timeline use zero-based source sequences.
source_sequence = 1856 - 1
frame = store.frame_for_index(source_sequence)
assert frame is not None
observations = provider.associate(_packet(1856), ())
observations = provider.associate(_packet(source_sequence), ())
projected = project_map_points_kb4(
frame.points_map,
position_map_xyz=frame.sensor_position_map,