@tscircuit/capacity-autorouter 0.0.34 → 0.0.35

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.ts CHANGED
@@ -465,13 +465,6 @@ interface HighDensityHyperParameters {
465
465
  FLIP_TRACE_ALIGNMENT_DIRECTION: boolean;
466
466
  }
467
467
 
468
- type FutureConnection = {
469
- connectionName: string;
470
- points: {
471
- x: number;
472
- y: number;
473
- }[];
474
- };
475
468
  type Node = {
476
469
  x: number;
477
470
  y: number;
@@ -481,6 +474,32 @@ type Node = {
481
474
  f: number;
482
475
  parent: Node | null;
483
476
  };
477
+ declare class SingleRouteCandidatePriorityQueue {
478
+ private heap;
479
+ constructor(nodes: Node[]);
480
+ private getLeftChildIndex;
481
+ private getRightChildIndex;
482
+ private getParentIndex;
483
+ private hasLeftChild;
484
+ private hasRightChild;
485
+ private hasParent;
486
+ private leftChild;
487
+ private rightChild;
488
+ private parent;
489
+ private swap;
490
+ dequeue(): Node | null;
491
+ enqueue(item: Node): void;
492
+ heapifyUp(): void;
493
+ heapifyDown(): void;
494
+ }
495
+
496
+ type FutureConnection = {
497
+ connectionName: string;
498
+ points: {
499
+ x: number;
500
+ y: number;
501
+ }[];
502
+ };
484
503
  declare class SingleHighDensityRouteSolver extends BaseSolver {
485
504
  obstacleRoutes: HighDensityIntraNodeRoute[];
486
505
  bounds: {
@@ -519,7 +538,7 @@ declare class SingleHighDensityRouteSolver extends BaseSolver {
519
538
  VIA_PENALTY_FACTOR: number;
520
539
  CELL_SIZE_FACTOR: number;
521
540
  exploredNodes: Set<string>;
522
- candidates: Node[];
541
+ candidates: SingleRouteCandidatePriorityQueue;
523
542
  connectionName: string;
524
543
  solvedPath: HighDensityIntraNodeRoute | null;
525
544
  futureConnections: FutureConnection[];
package/dist/index.js CHANGED
@@ -1925,6 +1925,88 @@ function distance(p1, p2) {
1925
1925
  return Math.sqrt(dx * dx + dy * dy);
1926
1926
  }
1927
1927
 
1928
+ // lib/data-structures/SingleRouteCandidatePriorityQueue.ts
1929
+ var SingleRouteCandidatePriorityQueue = class {
1930
+ heap = [];
1931
+ constructor(nodes) {
1932
+ this.heap = [];
1933
+ for (const node of nodes) {
1934
+ this.enqueue(node);
1935
+ }
1936
+ }
1937
+ getLeftChildIndex(parentIndex) {
1938
+ return 2 * parentIndex + 1;
1939
+ }
1940
+ getRightChildIndex(parentIndex) {
1941
+ return 2 * parentIndex + 2;
1942
+ }
1943
+ getParentIndex(childIndex) {
1944
+ return Math.floor((childIndex - 1) / 2);
1945
+ }
1946
+ hasLeftChild(index) {
1947
+ return this.getLeftChildIndex(index) < this.heap.length;
1948
+ }
1949
+ hasRightChild(index) {
1950
+ return this.getRightChildIndex(index) < this.heap.length;
1951
+ }
1952
+ hasParent(index) {
1953
+ return this.getParentIndex(index) >= 0;
1954
+ }
1955
+ leftChild(index) {
1956
+ return this.heap[this.getLeftChildIndex(index)];
1957
+ }
1958
+ rightChild(index) {
1959
+ return this.heap[this.getRightChildIndex(index)];
1960
+ }
1961
+ parent(index) {
1962
+ return this.heap[this.getParentIndex(index)];
1963
+ }
1964
+ swap(i, j) {
1965
+ const temp = this.heap[i];
1966
+ this.heap[i] = this.heap[j];
1967
+ this.heap[j] = temp;
1968
+ }
1969
+ // Removing an element will remove the
1970
+ // top element with highest priority then
1971
+ // heapifyDown will be called
1972
+ dequeue() {
1973
+ if (this.heap.length === 0) {
1974
+ return null;
1975
+ }
1976
+ const item = this.heap[0];
1977
+ this.heap[0] = this.heap[this.heap.length - 1];
1978
+ this.heap.pop();
1979
+ this.heapifyDown();
1980
+ return item;
1981
+ }
1982
+ enqueue(item) {
1983
+ this.heap.push(item);
1984
+ this.heapifyUp();
1985
+ }
1986
+ heapifyUp() {
1987
+ let index = this.heap.length - 1;
1988
+ while (this.hasParent(index) && this.parent(index).f > this.heap[index].f) {
1989
+ this.swap(this.getParentIndex(index), index);
1990
+ index = this.getParentIndex(index);
1991
+ }
1992
+ }
1993
+ heapifyDown() {
1994
+ let index = 0;
1995
+ while (this.hasLeftChild(index)) {
1996
+ let smallerChildIndex = this.getLeftChildIndex(index);
1997
+ if (this.hasRightChild(index) && this.rightChild(index).f < this.leftChild(index).f) {
1998
+ smallerChildIndex = this.getRightChildIndex(index);
1999
+ }
2000
+ if (this.heap[index].f < this.heap[smallerChildIndex].f) {
2001
+ break;
2002
+ } else {
2003
+ this.swap(index, smallerChildIndex);
2004
+ }
2005
+ index = smallerChildIndex;
2006
+ }
2007
+ }
2008
+ };
2009
+
1928
2010
  // lib/solvers/HighDensitySolver/SingleHighDensityRouteSolver.ts
1929
2011
  var SingleHighDensityRouteSolver = class extends BaseSolver {
1930
2012
  obstacleRoutes;
@@ -1979,7 +2061,7 @@ var SingleHighDensityRouteSolver = class extends BaseSolver {
1979
2061
  this.obstacleMargin = opts.obstacleMargin ?? 0.2;
1980
2062
  this.layerCount = opts.layerCount ?? 2;
1981
2063
  this.exploredNodes = /* @__PURE__ */ new Set();
1982
- this.candidates = [
2064
+ this.candidates = new SingleRouteCandidatePriorityQueue([
1983
2065
  {
1984
2066
  ...opts.A,
1985
2067
  z: opts.A.z ?? 0,
@@ -1988,7 +2070,7 @@ var SingleHighDensityRouteSolver = class extends BaseSolver {
1988
2070
  f: 0,
1989
2071
  parent: null
1990
2072
  }
1991
- ];
2073
+ ]);
1992
2074
  this.straightLineDistance = distance(this.A, this.B);
1993
2075
  this.futureConnections = opts.futureConnections ?? [];
1994
2076
  this.MAX_ITERATIONS = 5e3;
@@ -2208,17 +2290,18 @@ var SingleHighDensityRouteSolver = class extends BaseSolver {
2208
2290
  );
2209
2291
  }
2210
2292
  _step() {
2211
- this.candidates.sort((a, b) => b.f - a.f);
2212
- let currentNode = this.candidates.pop();
2213
- while (currentNode && this.exploredNodes.has(this.getNodeKey(currentNode))) {
2214
- currentNode = this.candidates.pop();
2293
+ let currentNode = this.candidates.dequeue();
2294
+ let currentNodeKey = currentNode ? this.getNodeKey(currentNode) : void 0;
2295
+ while (currentNode && currentNodeKey && this.exploredNodes.has(currentNodeKey)) {
2296
+ currentNode = this.candidates.dequeue();
2297
+ currentNodeKey = currentNode ? this.getNodeKey(currentNode) : void 0;
2215
2298
  }
2216
- if (!currentNode) {
2299
+ if (!currentNode || !currentNodeKey) {
2217
2300
  this.failed = true;
2218
2301
  return;
2219
2302
  }
2220
- this.exploredNodes.add(this.getNodeKey(currentNode));
2221
- this.debug_exploredNodesOrdered.push(this.getNodeKey(currentNode));
2303
+ this.exploredNodes.add(currentNodeKey);
2304
+ this.debug_exploredNodesOrdered.push(currentNodeKey);
2222
2305
  const goalDist = distance(currentNode, this.B);
2223
2306
  this.progress = this.computeProgress(
2224
2307
  currentNode,
@@ -2231,7 +2314,7 @@ var SingleHighDensityRouteSolver = class extends BaseSolver {
2231
2314
  }
2232
2315
  const neighbors = this.getNeighbors(currentNode);
2233
2316
  for (const neighbor of neighbors) {
2234
- this.candidates.push(neighbor);
2317
+ this.candidates.enqueue(neighbor);
2235
2318
  }
2236
2319
  }
2237
2320
  visualize() {