From cdc35bb62fe5535cd1325b8721fe270fd84c1e93 Mon Sep 17 00:00:00 2001 From: Nithinfgs Date: Mon, 23 Mar 2026 20:23:03 +0530 Subject: [PATCH 1/4] feat: add SameNetTraceMergeSolver to merge close parallel trace segments --- .../SameNetTraceMergeSolver.ts | 50 +++++++++++++++++++ 1 file changed, 50 insertions(+) create mode 100644 lib/solvers/SameNetTraceMergeSolver/SameNetTraceMergeSolver.ts diff --git a/lib/solvers/SameNetTraceMergeSolver/SameNetTraceMergeSolver.ts b/lib/solvers/SameNetTraceMergeSolver/SameNetTraceMergeSolver.ts new file mode 100644 index 00000000..0ca6b259 --- /dev/null +++ b/lib/solvers/SameNetTraceMergeSolver/SameNetTraceMergeSolver.ts @@ -0,0 +1,50 @@ +import { BaseSolver } from "../BaseSolver" + +const MERGE_DISTANCE_THRESHOLD = 0.2 + +export class SameNetTraceMergeSolver extends BaseSolver { + + solve(input: any) { + + const traces = input.traces ?? [] + + const merged: any[] = [] + const used = new Set() + + for (let i = 0; i < traces.length; i++) { + + if (used.has(i)) continue + + let current = traces[i] + + for (let j = i + 1; j < traces.length; j++) { + + if (used.has(j)) continue + + const candidate = traces[j] + + if (candidate.net !== current.net) continue + + const dx = Math.abs(current.x2 - candidate.x1) + const dy = Math.abs(current.y2 - candidate.y1) + + if (dx < MERGE_DISTANCE_THRESHOLD && dy < MERGE_DISTANCE_THRESHOLD) { + + current = { + ...current, + x2: candidate.x2, + y2: candidate.y2 + } + + used.add(j) + } + } + + merged.push(current) + } + + return { + traces: merged + } + } +} From 6a1b87adbe5a1f3a7acc04bb95ce53d6a063c123 Mon Sep 17 00:00:00 2001 From: Nithinfgs Date: Mon, 23 Mar 2026 20:28:29 +0530 Subject: [PATCH 2/4] fix: apply biome formatting --- .../SameNetTraceMergeSolver/SameNetTraceMergeSolver.ts | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/lib/solvers/SameNetTraceMergeSolver/SameNetTraceMergeSolver.ts b/lib/solvers/SameNetTraceMergeSolver/SameNetTraceMergeSolver.ts index 0ca6b259..61bf89ce 100644 --- a/lib/solvers/SameNetTraceMergeSolver/SameNetTraceMergeSolver.ts +++ b/lib/solvers/SameNetTraceMergeSolver/SameNetTraceMergeSolver.ts @@ -3,22 +3,18 @@ import { BaseSolver } from "../BaseSolver" const MERGE_DISTANCE_THRESHOLD = 0.2 export class SameNetTraceMergeSolver extends BaseSolver { - solve(input: any) { - const traces = input.traces ?? [] const merged: any[] = [] const used = new Set() for (let i = 0; i < traces.length; i++) { - if (used.has(i)) continue let current = traces[i] for (let j = i + 1; j < traces.length; j++) { - if (used.has(j)) continue const candidate = traces[j] @@ -29,11 +25,10 @@ export class SameNetTraceMergeSolver extends BaseSolver { const dy = Math.abs(current.y2 - candidate.y1) if (dx < MERGE_DISTANCE_THRESHOLD && dy < MERGE_DISTANCE_THRESHOLD) { - current = { ...current, x2: candidate.x2, - y2: candidate.y2 + y2: candidate.y2, } used.add(j) @@ -44,7 +39,7 @@ export class SameNetTraceMergeSolver extends BaseSolver { } return { - traces: merged + traces: merged, } } } From eb17ad9c264cbe6d9cfc049a825b1ce73f1b0c97 Mon Sep 17 00:00:00 2001 From: Nithinfgs Date: Mon, 23 Mar 2026 20:29:24 +0530 Subject: [PATCH 3/4] fix: resolve TypeScript type errors in SameNetTraceMergeSolver --- .../SameNetTraceMergeSolver.ts | 28 +++++++++++++------ 1 file changed, 19 insertions(+), 9 deletions(-) diff --git a/lib/solvers/SameNetTraceMergeSolver/SameNetTraceMergeSolver.ts b/lib/solvers/SameNetTraceMergeSolver/SameNetTraceMergeSolver.ts index 61bf89ce..57554c3a 100644 --- a/lib/solvers/SameNetTraceMergeSolver/SameNetTraceMergeSolver.ts +++ b/lib/solvers/SameNetTraceMergeSolver/SameNetTraceMergeSolver.ts @@ -1,34 +1,44 @@ -import { BaseSolver } from "../BaseSolver" +export const MERGE_DISTANCE_THRESHOLD = 0.2 + +type Trace = { + net?: string + x1?: number + y1?: number + x2?: number + y2?: number +} -const MERGE_DISTANCE_THRESHOLD = 0.2 +export class SameNetTraceMergeSolver { + solve(input: { traces?: Trace[] }) { -export class SameNetTraceMergeSolver extends BaseSolver { - solve(input: any) { const traces = input.traces ?? [] - const merged: any[] = [] + const merged: Trace[] = [] const used = new Set() for (let i = 0; i < traces.length; i++) { + if (used.has(i)) continue let current = traces[i] for (let j = i + 1; j < traces.length; j++) { + if (used.has(j)) continue const candidate = traces[j] if (candidate.net !== current.net) continue - const dx = Math.abs(current.x2 - candidate.x1) - const dy = Math.abs(current.y2 - candidate.y1) + const dx = Math.abs((current.x2 ?? 0) - (candidate.x1 ?? 0)) + const dy = Math.abs((current.y2 ?? 0) - (candidate.y1 ?? 0)) if (dx < MERGE_DISTANCE_THRESHOLD && dy < MERGE_DISTANCE_THRESHOLD) { + current = { ...current, x2: candidate.x2, - y2: candidate.y2, + y2: candidate.y2 } used.add(j) @@ -39,7 +49,7 @@ export class SameNetTraceMergeSolver extends BaseSolver { } return { - traces: merged, + traces: merged } } } From 9120101af41415cea569b28bde36ba4ddc0f8cd1 Mon Sep 17 00:00:00 2001 From: Nithinfgs Date: Mon, 23 Mar 2026 20:30:22 +0530 Subject: [PATCH 4/4] fix: apply biome formatting for CI --- .../SameNetTraceMergeSolver/SameNetTraceMergeSolver.ts | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/lib/solvers/SameNetTraceMergeSolver/SameNetTraceMergeSolver.ts b/lib/solvers/SameNetTraceMergeSolver/SameNetTraceMergeSolver.ts index 57554c3a..3bd3edc1 100644 --- a/lib/solvers/SameNetTraceMergeSolver/SameNetTraceMergeSolver.ts +++ b/lib/solvers/SameNetTraceMergeSolver/SameNetTraceMergeSolver.ts @@ -10,20 +10,17 @@ type Trace = { export class SameNetTraceMergeSolver { solve(input: { traces?: Trace[] }) { - const traces = input.traces ?? [] const merged: Trace[] = [] const used = new Set() for (let i = 0; i < traces.length; i++) { - if (used.has(i)) continue let current = traces[i] for (let j = i + 1; j < traces.length; j++) { - if (used.has(j)) continue const candidate = traces[j] @@ -34,11 +31,10 @@ export class SameNetTraceMergeSolver { const dy = Math.abs((current.y2 ?? 0) - (candidate.y1 ?? 0)) if (dx < MERGE_DISTANCE_THRESHOLD && dy < MERGE_DISTANCE_THRESHOLD) { - current = { ...current, x2: candidate.x2, - y2: candidate.y2 + y2: candidate.y2, } used.add(j) @@ -49,7 +45,7 @@ export class SameNetTraceMergeSolver { } return { - traces: merged + traces: merged, } } }