fix(polygon): separate dataset sources from runs
This commit is contained in:
@@ -10,6 +10,8 @@ let decodeGroundReview;
|
||||
let decodeGroundReviewFrame;
|
||||
let fetchGroundQualification;
|
||||
let GroundQualificationContractError;
|
||||
let parseGooseFrameId;
|
||||
let groupGooseReviewFrames;
|
||||
|
||||
const aggregate = {
|
||||
micro: {
|
||||
@@ -76,7 +78,11 @@ before(async () => {
|
||||
decodeGroundReviewFrame,
|
||||
fetchGroundQualification,
|
||||
GroundQualificationContractError,
|
||||
parseGooseFrameId,
|
||||
} = await server.ssrLoadModule("/src/core/polygon/groundQualification.ts"));
|
||||
({
|
||||
groupGooseReviewFrames,
|
||||
} = await server.ssrLoadModule("/src/workspaces/GooseDatasetReview.tsx"));
|
||||
});
|
||||
|
||||
after(async () => {
|
||||
@@ -139,7 +145,7 @@ test("treats missing qualification as a generic run", async () => {
|
||||
|
||||
test("decodes a complete ordered frame review", () => {
|
||||
const decoded = decodeGroundReview({
|
||||
schema_version: "missioncore.polygon-ground-review/v1",
|
||||
schema_version: "missioncore.polygon-ground-review/v2",
|
||||
access: "read-only",
|
||||
run_id: "goose-ground-abc",
|
||||
identity_sha256: "b".repeat(64),
|
||||
@@ -148,7 +154,10 @@ test("decodes a complete ordered frame review", () => {
|
||||
preview_points: 12_000,
|
||||
frames: [0, 1].map((sequence) => ({
|
||||
sequence,
|
||||
frame_id: `2022-07-22_flight__0071_000${sequence}`,
|
||||
frame_id: `2022-07-22_flight__007${sequence + 1}_165849423${sequence}334310308`,
|
||||
dataset_sequence_id: "2022-07-22_flight",
|
||||
dataset_frame_number: sequence + 71,
|
||||
sensor_timestamp_ns: `165849423${sequence}334310308`,
|
||||
source_point_count: 100_000,
|
||||
point_count: 12_000,
|
||||
current: {
|
||||
@@ -168,9 +177,59 @@ test("decodes a complete ordered frame review", () => {
|
||||
});
|
||||
assert.equal(decoded.frames.length, 2);
|
||||
assert.equal(decoded.frames[1].sequence, 1);
|
||||
assert.equal(decoded.frames[1].datasetSequenceId, "2022-07-22_flight");
|
||||
assert.equal(decoded.frames[1].datasetFrameNumber, 72);
|
||||
assert.equal(decoded.frames[0].patchwork.groundIou, 0.7);
|
||||
});
|
||||
|
||||
test("parses GOOSE sequence, source frame and nanosecond timestamp", () => {
|
||||
assert.deepEqual(
|
||||
parseGooseFrameId("2023-05-17_neubiberg_sunny__0459_1684330012686564560"),
|
||||
{
|
||||
datasetSequenceId: "2023-05-17_neubiberg_sunny",
|
||||
datasetFrameNumber: 459,
|
||||
sensorTimestampNs: "1684330012686564560",
|
||||
},
|
||||
);
|
||||
});
|
||||
|
||||
test("keeps independent GOOSE recordings in separate playback sequences", () => {
|
||||
const metric = {
|
||||
groundIou: 0.5,
|
||||
naturalGroundRecall: 0.6,
|
||||
obstacleNonGroundRecall: 0.9,
|
||||
latencyMs: 20,
|
||||
};
|
||||
const frames = [
|
||||
["2022-07-22_flight", 71, "1658494234334310308"],
|
||||
["2022-07-22_flight", 72, "1658494235988100385"],
|
||||
["2023-05-17_neubiberg_sunny", 459, "1684330012686564560"],
|
||||
].map(([datasetSequenceId, datasetFrameNumber, sensorTimestampNs], sequence) => ({
|
||||
sequence,
|
||||
frameId: `${datasetSequenceId}__${String(datasetFrameNumber).padStart(4, "0")}_${sensorTimestampNs}`,
|
||||
datasetSequenceId,
|
||||
datasetFrameNumber,
|
||||
sensorTimestampNs,
|
||||
sourcePointCount: 100_000,
|
||||
pointCount: 12_000,
|
||||
current: metric,
|
||||
patchwork: metric,
|
||||
groundIouDelta: 0,
|
||||
}));
|
||||
const groups = groupGooseReviewFrames({
|
||||
runId: "goose-ground-abc",
|
||||
identitySha256: "b".repeat(64),
|
||||
sourceId: "goose-3d/v2025-08-22",
|
||||
frameCount: frames.length,
|
||||
previewPoints: 12_000,
|
||||
frames,
|
||||
});
|
||||
assert.equal(groups.length, 2);
|
||||
assert.equal(groups[0].frames.length, 2);
|
||||
assert.equal(groups[1].frames.length, 1);
|
||||
assert.ok(groups[0].durationSeconds > 1.6);
|
||||
});
|
||||
|
||||
test("decodes a point-aligned review frame with intensity", () => {
|
||||
const decoded = decodeGroundReviewFrame({
|
||||
schema_version: "missioncore.polygon-ground-review-frame/v1",
|
||||
|
||||
Reference in New Issue
Block a user