Skip to content

feat: simplify collinear trace vertices + prep same-net rail merging - #751

Open
khozakhulile27-netizen wants to merge 128 commits into
tscircuit:mainfrom
khozakhulile27-netizen:Feat/merge-same-net-rails
Open

feat: simplify collinear trace vertices + prep same-net rail merging#751
khozakhulile27-netizen wants to merge 128 commits into
tscircuit:mainfrom
khozakhulile27-netizen:Feat/merge-same-net-rails

Conversation

@khozakhulile27-netizen

Copy link
Copy Markdown

Adds a conservative post-processing simplifier for schematic trace paths to remove redundant collinear intermediate vertices after same-net rail alignment.
Prepares the same-net rail alignment pipeline for a follow-up safe merge step (merging adjacent/overlapping same-net collinear rails) by ensuring traces are normalized.
Branch: feat/merge-same-net-rails
What I changed

lib/solvers/TraceCleanupSolver/alignSameNetRails.ts

Runs a simplifier pass after existing same-net rail alignment so tracePaths no longer contain unnecessary intermediate collinear points. This reduces the visible segment count and makes subsequent merging logic simpler and safer.
Commit message: "feat: simplify collinear trace vertices after same-net rail alignment"
lib/solvers/TraceCleanupSolver/sameNetRailAlignment/simplifyTracePath.ts

New helper: simplifyTraces / simplifyTracePath
Behavior: conservative removal of intermediate points when three consecutive points are collinear horizontally or vertically within the repository epsilon (uses existing nearlyEqual). Endpoints and connectivity are preserved (no changes to pinned endpoints / trace semantics).
Why this change

The original issue (merge same-net trace lines that are close together / on same Y or same X) requires safe merging of collinear rails.
As a safe first step, collapsing redundant collinear vertices reduces noise and the number of visible segments, and simplifies detecting and merging same-net rails in a future change.
This change is intentionally small and low risk: it does not re-route traces, change endpoints, or alter connectivity — it only removes redundant collinear vertices.
How to run locally (recommended)

Typecheck:
bunx tsc --noEmit
Run tests:
bun test
To run just a single test file: bun test path/to/test.ts
If snapshot updates are required after running new tests or changing visualize output:
BUN_UPDATE_SNAPSHOTS=1 bun test
Headless visual debug runner (to generate per-stage artifacts):
bun run debug:pipeline tests/assets/example01.json --svg
See .agents/skills/schematic-trace-visualization/SKILL.md and AGENTS.md for guidance.
What I tested

I committed the simplifier and integrated it into alignSameNetRails. This is a conservative change (no behavioral re-routing) so it should not break solver invariants.
Note: I have not pushed a full test-run / snapshot update to the branch yet. Please run the commands above (bunx tsc --noEmit and bun test) locally or let CI run them; if snapshots need updating run tests with BUN_UPDATE_SNAPSHOTS=1.
Files changed (for reviewers)

Modified:
lib/solvers/TraceCleanupSolver/alignSameNetRails.ts
Added:
lib/solvers/TraceCleanupSolver/sameNetRailAlignment/simplifyTracePath.ts
Next steps (planned follow-up work)

Implement a safe merge pass that:
Detects same-net collinear rails on the same X or Y (within RAIL_ALIGNMENT_EPSILON),
Attempts to merge adjacent/overlapping runs when safe (no obstacle collisions, no label anchor regressions, not coincident with other nets),
Preserves pinned endpoints and label anchors.
Add focused reproducible tests (a small input that mirrors the screenshot/issue scenario) and snapshot SVG/PNG demos for the visual diff.
Run full test suite and update snapshots if necessary, then open a PR for the merge implementation if this simplifier step looks good.
How reviewers can verify quickly

Run typecheck: bunx tsc --noEmit
Run tests: bun test
Inspect a couple of fixtures with the debug runner:
bun run debug:pipeline tests/assets/example17.json --svg (customize the test asset if you have a repro)
Confirm the simplifier:
Pick a test fixture where traces include collinear redundant vertices, run the pipeline, and check solver.visualize() snapshots for fewer redundant points or a lower visible segment count (getVisibleTraceSegmentCount).
Risks & mitigations

Risk: accidental change of endpoints or connectivity (should not happen).
Mitigation: the simplifier only removes a middle point when three consecutive points are collinear within the numeric tolerance; endpoints are untouched.
Notes about the bounty and PR acceptance

I will make a follow-up change to implement merging of same-net collinear runs in a safe way (this is the actual feature requested in the issue/bounty). This commit is a preparatory, low-risk step to make that next change easier to test and review.
I cannot influence other contributors or the bounty system. I will provide a well-tested, demo-ready PR which should make the change easier to accept.
Commit/branch info

Branch: feat/merge-same-net-rails
Commits:
feat: simplify collinear trace vertices after same-net rail alignment
chore: add simplifyTraces helper to remove redundant collinear vertices
If you want, I’ll:

Run the full test suite and update snapshots (BUN_UPDATE_SNAPSHOTS=1) before opening the PR,
Implement the safe merge step immediately and include tests & demo in the same PR. Tell me whether you want the PR opened now with this simplifier only (so the change is small and reviewable), or whether you prefer I implement the full merge step + tests + snapshots and then open the PR — I can proceed either way.
— End of message —

Ask anything or type @ to add context
Skip to content

khozakhulile27-netizen and others added 30 commits May 22, 2026 12:35
Closes tscircuit#34

Adds a new `snapSameNetTraces` step to `TraceCleanupSolver` that detects
parallel segments belonging to the same net that are within a configurable
threshold (default 0.05) of each other and snaps them to their midpoint
coordinate, eliminating near-coincident same-net trace lines.

- New file: lib/solvers/TraceCleanupSolver/snapSameNetTraces.ts
- Modified: TraceCleanupSolver pipeline adds `snapping_same_net` step after `balancing_l_shapes`
- New file: tests/solvers/TraceCleanupSolver/snapSameNetTraces.test.ts (7 unit tests)
khozakhulile27-netizen and others added 29 commits July 11, 2026 11:16
Fixes tscircuit#29. Fixes tscircuit#34.

Moves test from tests/ to lib/ where tsconfig expects it. Replaces snapSameNetTraces implementation with version that passes all checks. Removes .find() that caused NaN in tests.

/claim tscircuit#29
/claim tscircuit#34

Signed-off-by: Khoza khulile  <khozakhulile27@gmail.com>
Signed-off-by: Khoza khulile  <khozakhulile27@gmail.com>
Signed-off-by: Khoza khulile  <khozakhulile27@gmail.com>
Signed-off-by: Khoza khulile  <khozakhulile27@gmail.com>
Signed-off-by: Khoza khulile  <khozakhulile27@gmail.com>
Signed-off-by: Khoza khulile  <khozakhulile27@gmail.com>
Signed-off-by: Khoza khulile  <khozakhulile27@gmail.com>
Signed-off-by: Khoza khulile  <khozakhulile27@gmail.com>
Signed-off-by: Khoza khulile  <khozakhulile27@gmail.com>
Signed-off-by: Khoza khulile  <khozakhulile27@gmail.com>
Signed-off-by: Khoza khulile  <khozakhulile27@gmail.com>
Signed-off-by: Khoza khulile  <khozakhulile27@gmail.com>
Signed-off-by: Khoza khulile  <khozakhulile27@gmail.com>
Signed-off-by: Khoza khulile  <khozakhulile27@gmail.com>
Signed-off-by: Khoza khulile  <khozakhulile27@gmail.com>
…arallel-traces

Fix/snap same net parallel traces
@vercel

vercel Bot commented Aug 1, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
schematic-trace-solver Error Error Aug 1, 2026 8:46am

Request Review

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant