From 26016f4b90ac8ef6504722ee7b4e6126f3f19416 Mon Sep 17 00:00:00 2001 From: hirosisa Date: Sat, 23 May 2026 20:47:45 +0700 Subject: [PATCH] fix: ignore net-label-only nets during trace routing --- .../LongDistancePairSolver.ts | 5 +- .../MspConnectionPairSolver.ts | 4 +- .../getConnectivityMapFromInputProblem.ts | 2 +- package.json | 3 + .../examples/__snapshots__/example01.snap.svg | 75 +++--- .../examples/__snapshots__/example03.snap.svg | 149 ++++++----- .../examples/__snapshots__/example07.snap.svg | 38 +-- .../examples/__snapshots__/example10.snap.svg | 60 +++-- .../examples/__snapshots__/example12.snap.svg | 88 +++--- .../examples/__snapshots__/example13.snap.svg | 239 ++++++++++------- .../examples/__snapshots__/example14.snap.svg | 166 ++++++------ .../examples/__snapshots__/example15.snap.svg | 198 ++++++++------ .../examples/__snapshots__/example16.snap.svg | 80 +++--- .../examples/__snapshots__/example18.snap.svg | 128 +++++---- .../examples/__snapshots__/example20.snap.svg | 66 ++--- .../examples/__snapshots__/example21.snap.svg | 173 ++++++------ .../examples/__snapshots__/example22.snap.svg | 72 ++--- .../examples/__snapshots__/example24.snap.svg | 70 ++--- .../examples/__snapshots__/example26.snap.svg | 70 ++--- .../examples/__snapshots__/example27.snap.svg | 5 +- .../examples/__snapshots__/example28.snap.svg | 43 +-- .../examples/__snapshots__/example31.snap.svg | 36 ++- .../examples/__snapshots__/example32.snap.svg | 250 ++++++++++-------- .../examples/__snapshots__/example33.snap.svg | 80 +++--- .../examples/__snapshots__/example35.snap.svg | 30 ++- .../examples/__snapshots__/example36.snap.svg | 70 ++--- .../MspConnectionPairSolver_repro1.test.ts | 3 +- ...elineSolver_repro04_net_label_only.test.ts | 55 ++++ 28 files changed, 1240 insertions(+), 1018 deletions(-) create mode 100644 tests/solvers/SchematicTracePipelineSolver/SchematicTracePipelineSolver_repro04_net_label_only.test.ts diff --git a/lib/solvers/LongDistancePairSolver/LongDistancePairSolver.ts b/lib/solvers/LongDistancePairSolver/LongDistancePairSolver.ts index 9911d3949..7cb8b7b8d 100644 --- a/lib/solvers/LongDistancePairSolver/LongDistancePairSolver.ts +++ b/lib/solvers/LongDistancePairSolver/LongDistancePairSolver.ts @@ -57,7 +57,8 @@ export class LongDistancePairSolver extends BaseSolver { primaryConnectedPinIds.add(pair.pins[1].pinId) } - const { netConnMap } = getConnectivityMapsFromInputProblem(inputProblem) + const { directConnMap, netConnMap } = + getConnectivityMapsFromInputProblem(inputProblem) this.netConnMap = netConnMap const pinMap = new Map() for (const chip of inputProblem.chips) { @@ -73,7 +74,7 @@ export class LongDistancePairSolver extends BaseSolver { > = [] const addedPairKeys = new Set() - for (const netId of Object.keys(netConnMap.netMap)) { + for (const netId of Object.keys(directConnMap.netMap)) { const allPinIdsInNet = netConnMap.getIdsConnectedToNet(netId) if (allPinIdsInNet.length < 2) continue diff --git a/lib/solvers/MspConnectionPairSolver/MspConnectionPairSolver.ts b/lib/solvers/MspConnectionPairSolver/MspConnectionPairSolver.ts index 5aae38063..0a29e3e03 100644 --- a/lib/solvers/MspConnectionPairSolver/MspConnectionPairSolver.ts +++ b/lib/solvers/MspConnectionPairSolver/MspConnectionPairSolver.ts @@ -75,7 +75,7 @@ export class MspConnectionPairSolver extends BaseSolver { } } - this.queuedDcNetIds = Object.keys(netConnMap.netMap) + this.queuedDcNetIds = Object.keys(directConnMap.netMap) } override getConstructorParams(): ConstructorParameters< @@ -94,7 +94,7 @@ export class MspConnectionPairSolver extends BaseSolver { const dcNetId = this.queuedDcNetIds.shift()! - const allIds = this.globalConnMap.getIdsConnectedToNet(dcNetId) as string[] + const allIds = this.dcConnMap.getIdsConnectedToNet(dcNetId) as string[] const directlyConnectedPins = allIds.filter((id) => !!this.pinMap[id]) if (directlyConnectedPins.length <= 1) { diff --git a/lib/solvers/MspConnectionPairSolver/getConnectivityMapFromInputProblem.ts b/lib/solvers/MspConnectionPairSolver/getConnectivityMapFromInputProblem.ts index d3a098c33..4dc4f3d6b 100644 --- a/lib/solvers/MspConnectionPairSolver/getConnectivityMapFromInputProblem.ts +++ b/lib/solvers/MspConnectionPairSolver/getConnectivityMapFromInputProblem.ts @@ -14,7 +14,7 @@ export const getConnectivityMapsFromInputProblem = ( ]) } - const netConnMap = new ConnectivityMap(directConnMap.netMap) + const netConnMap = new ConnectivityMap(structuredClone(directConnMap.netMap)) for (const netConn of inputProblem.netConnections) { netConnMap.addConnections([[netConn.netId, ...netConn.pinIds]]) diff --git a/package.json b/package.json index 216f1d8ac..de343ee1f 100644 --- a/package.json +++ b/package.json @@ -28,5 +28,8 @@ }, "peerDependencies": { "typescript": "^5" + }, + "dependencies": { + "sharp": "^0.34.5" } } diff --git a/tests/examples/__snapshots__/example01.snap.svg b/tests/examples/__snapshots__/example01.snap.svg index 2614ba80f..4829176e3 100644 --- a/tests/examples/__snapshots__/example01.snap.svg +++ b/tests/examples/__snapshots__/example01.snap.svg @@ -2,106 +2,111 @@ +x-" data-x="-0.8" data-y="0.2" cx="422.5742574257426" cy="289.44950495049505" r="3" fill="hsl(319, 100%, 50%, 0.8)" /> +x-" data-x="-0.8" data-y="0" cx="422.5742574257426" cy="311.62772277227725" r="3" fill="hsl(320, 100%, 50%, 0.8)" /> +x-" data-x="-0.8" data-y="-0.2" cx="422.5742574257426" cy="333.80594059405945" r="3" fill="hsl(321, 100%, 50%, 0.8)" /> +x+" data-x="0.8" data-y="-0.2" cx="600" cy="333.80594059405945" r="3" fill="hsl(322, 100%, 50%, 0.8)" /> +x+" data-x="0.8" data-y="0" cx="600" cy="311.62772277227725" r="3" fill="hsl(323, 100%, 50%, 0.8)" /> +x+" data-x="0.8" data-y="0.2" cx="600" cy="289.44950495049505" r="3" fill="hsl(324, 100%, 50%, 0.8)" /> +y+" data-x="-2" data-y="0.5" cx="289.50495049504957" cy="256.1821782178218" r="3" fill="hsl(121, 100%, 50%, 0.8)" /> +y-" data-x="-2" data-y="-0.5" cx="289.50495049504957" cy="367.0732673267327" r="3" fill="hsl(122, 100%, 50%, 0.8)" /> +y+" data-x="-4" data-y="0.5" cx="67.72277227722776" cy="256.1821782178218" r="3" fill="hsl(2, 100%, 50%, 0.8)" /> +y-" data-x="-4" data-y="-0.5" cx="67.72277227722776" cy="367.0732673267327" r="3" fill="hsl(3, 100%, 50%, 0.8)" /> - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + + + + +globalConnNetId: connectivity_net0" data-x="-1.1" data-y="0.42500000000000016" x="378.21782178217825" y="239.54851485148515" width="22.178217821782198" height="49.9009900990099" fill="#ef444466" stroke="#ef4444" stroke-width="0.009017857142857143" /> +globalConnNetId: connectivity_net1" data-x="-1.5" data-y="0" x="320" y="300.5386138613862" width="49.90099009900996" height="22.17821782178214" fill="hsl(40, 100%, 50%, 0.35)" stroke="black" stroke-width="0.009017857142857143" /> + + + + + + +globalConnNetId: connectivity_net2" data-x="-2" data-y="-0.726" x="278.41584158415844" y="367.1841584158416" width="22.178217821782198" height="49.90099009900996" fill="#00000066" stroke="#000000" stroke-width="0.009017857142857143" />