@mark1russell7/highways 0.6.0 → 0.8.0
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/README.md +15 -2
- package/build/index.d.ts +17 -1
- package/build/index.d.ts.map +1 -1
- package/build/index.js +150 -84
- package/build/index.js.map +1 -1
- package/package.json +2 -2
- package/src/bench/screen/portfolio-pick.ts +2 -1
- package/src/compare.ts +17 -0
- package/src/lane-order.ts +149 -0
- package/src/order/index.ts +2 -7
- package/src/portfolio/fit.ts +15 -15
- package/src/portfolio/router.ts +19 -3
- package/src/routers/shared.ts +4 -3
- package/src/segments.ts +8 -73
package/build/index.js
CHANGED
|
@@ -2043,6 +2043,109 @@ function straightCurve(points) {
|
|
|
2043
2043
|
to
|
|
2044
2044
|
});
|
|
2045
2045
|
}
|
|
2046
|
+
// src/compare.ts
|
|
2047
|
+
/** This function compares two texts by their UTF-16 code units. It gives 0 only for equal texts. */
|
|
2048
|
+
const byText = (a, b) => a < b ? -1 : a > b ? 1 : 0;
|
|
2049
|
+
/** This function compares two edges by the hash of their ids, and then by their ids. Thus the order of two edges does not depend on the input. */
|
|
2050
|
+
function byHash(a, b) {
|
|
2051
|
+
if (a.h !== b.h) return a.h - b.h;
|
|
2052
|
+
return byText(a.e.id, b.e.id);
|
|
2053
|
+
}
|
|
2054
|
+
// src/lane-order.ts
|
|
2055
|
+
/** Two points nearer than this distance are the same point. The value is the same as in `segments.ts`. */
|
|
2056
|
+
const SAME$4 = 1e-6;
|
|
2057
|
+
/** The angle, from -π to π, of the turn at `base` from the direction `from` → `base` to the point `to`. */
|
|
2058
|
+
function turn$1(from, base, to) {
|
|
2059
|
+
const dx = base.x - from.x;
|
|
2060
|
+
const dy = base.y - from.y;
|
|
2061
|
+
const vx = to.x - base.x;
|
|
2062
|
+
const vy = to.y - base.y;
|
|
2063
|
+
return Math.atan2(dx * vy - dy * vx, dx * vx + dy * vy);
|
|
2064
|
+
}
|
|
2065
|
+
/** This function gives the place where the routes `P` and `Q` part after the last point of the run, or nothing. */
|
|
2066
|
+
function partAfter(P, Q) {
|
|
2067
|
+
for (let j = 1;; j++) {
|
|
2068
|
+
const a = P.p[P.e + j];
|
|
2069
|
+
const b = Q.p[Q.e + j];
|
|
2070
|
+
if (a === void 0 || b === void 0) return void 0;
|
|
2071
|
+
if (dist(a, b) > SAME$4) {
|
|
2072
|
+
const from = P.p[P.e + j - 2];
|
|
2073
|
+
const at = P.p[P.e + j - 1];
|
|
2074
|
+
const side = turn$1(from, at, a) - turn$1(from, at, b);
|
|
2075
|
+
return side === 0 ? void 0 : {
|
|
2076
|
+
at,
|
|
2077
|
+
side
|
|
2078
|
+
};
|
|
2079
|
+
}
|
|
2080
|
+
}
|
|
2081
|
+
}
|
|
2082
|
+
/** This function gives the place where the routes `P` and `Q` part before the first point of the run, or nothing. */
|
|
2083
|
+
function partBefore(P, Q) {
|
|
2084
|
+
for (let j = 1;; j++) {
|
|
2085
|
+
const a = P.p[P.s - j];
|
|
2086
|
+
const b = Q.p[Q.s - j];
|
|
2087
|
+
if (a === void 0 || b === void 0) return void 0;
|
|
2088
|
+
if (dist(a, b) > SAME$4) {
|
|
2089
|
+
const from = P.p[P.s - j + 2];
|
|
2090
|
+
const at = P.p[P.s - j + 1];
|
|
2091
|
+
const side = turn$1(from, at, b) - turn$1(from, at, a);
|
|
2092
|
+
return side === 0 ? void 0 : {
|
|
2093
|
+
at,
|
|
2094
|
+
side
|
|
2095
|
+
};
|
|
2096
|
+
}
|
|
2097
|
+
}
|
|
2098
|
+
}
|
|
2099
|
+
/** This function compares two placed routes by their edge ids. */
|
|
2100
|
+
const byEdge$2 = (P, Q) => byText(P.edge, Q.edge);
|
|
2101
|
+
/** This function puts the point `a` before the point `b`: the smaller x first, then the smaller y. */
|
|
2102
|
+
const firstPoint = (a, b) => a.x < b.x - SAME$4 || Math.abs(a.x - b.x) <= SAME$4 && a.y < b.y;
|
|
2103
|
+
/**
|
|
2104
|
+
* This function is the relation of the order `run`. The side after the run tells the order first, then the side before the run, then the edges.
|
|
2105
|
+
* A value below 0 puts `P` before `Q`. The relation is not transitive: three lanes can make a cycle.
|
|
2106
|
+
*/
|
|
2107
|
+
const byRun = (P, Q) => partAfter(P, Q)?.side ?? partBefore(P, Q)?.side ?? byEdge$2(P, Q);
|
|
2108
|
+
/**
|
|
2109
|
+
* This function is the relation of the order `bundle`. When the two ends disagree, the end with the smaller x, then the smaller y, tells the side.
|
|
2110
|
+
* A value below 0 puts `P` before `Q`. The relation is not transitive: three lanes can make a cycle.
|
|
2111
|
+
*/
|
|
2112
|
+
const byBundle = (P, Q) => {
|
|
2113
|
+
const after = partAfter(P, Q);
|
|
2114
|
+
const before = partBefore(P, Q);
|
|
2115
|
+
if (after && before && Math.sign(after.side) !== Math.sign(before.side)) return firstPoint(after.at, before.at) ? after.side : before.side;
|
|
2116
|
+
return after?.side ?? before?.side ?? byEdge$2(P, Q);
|
|
2117
|
+
};
|
|
2118
|
+
/**
|
|
2119
|
+
* This function sorts a list with a stable merge sort of the package, not with `Array.prototype.sort`.
|
|
2120
|
+
* The pairs that it gives to `compare` depend only on the list and on the results of `compare`.
|
|
2121
|
+
* Thus the result is the same on each JavaScript engine, also when `compare` is not a total order.
|
|
2122
|
+
* A value of `compare(a, b)` above 0 puts `b` before `a`. Any other value (below 0, 0 or NaN) keeps `a` first.
|
|
2123
|
+
*/
|
|
2124
|
+
function mergeSort(list, compare) {
|
|
2125
|
+
if (list.length < 2) return [...list];
|
|
2126
|
+
const mid = list.length >> 1;
|
|
2127
|
+
const left = mergeSort(list.slice(0, mid), compare);
|
|
2128
|
+
const right = mergeSort(list.slice(mid), compare);
|
|
2129
|
+
const out = [];
|
|
2130
|
+
let i = 0;
|
|
2131
|
+
let j = 0;
|
|
2132
|
+
while (i < left.length && j < right.length) if (compare(left[i], right[j]) > 0) out.push(right[j++]);
|
|
2133
|
+
else out.push(left[i++]);
|
|
2134
|
+
while (i < left.length) out.push(left[i++]);
|
|
2135
|
+
while (j < right.length) out.push(right[j++]);
|
|
2136
|
+
return out;
|
|
2137
|
+
}
|
|
2138
|
+
/** This function gives the lane order of a run: the merge sort of `start` with the relation `compare`. It tells the observer of `observeLanes`. */
|
|
2139
|
+
function orderRun(start, compare) {
|
|
2140
|
+
return mergeSort(start, compare);
|
|
2141
|
+
}
|
|
2142
|
+
/**
|
|
2143
|
+
* This function gives the lane order of the placed routes of a run. `order` selects the relation.
|
|
2144
|
+
* With `run`, the sort starts from the order of `placed`. With `bundle`, it starts from the order of the edges, so that each run sorts the same edges the same way.
|
|
2145
|
+
*/
|
|
2146
|
+
function orderPlaced(placed, order) {
|
|
2147
|
+
return order === "run" ? orderRun(placed, byRun) : orderRun([...placed].sort(byEdge$2), byBundle);
|
|
2148
|
+
}
|
|
2046
2149
|
// src/segments.ts
|
|
2047
2150
|
const SAME$3 = 1e-6;
|
|
2048
2151
|
/** This function gives the index where `p` holds the points of `part` in a row, from `from` on, or -1. */
|
|
@@ -2245,51 +2348,6 @@ function lanePaths(graph, spacingOf) {
|
|
|
2245
2348
|
}
|
|
2246
2349
|
return routes;
|
|
2247
2350
|
}
|
|
2248
|
-
/** The angle, from -π to π, of the turn at `base` from the direction `from` → `base` to the point `to`. */
|
|
2249
|
-
function turn$1(from, base, to) {
|
|
2250
|
-
const dx = base.x - from.x;
|
|
2251
|
-
const dy = base.y - from.y;
|
|
2252
|
-
const vx = to.x - base.x;
|
|
2253
|
-
const vy = to.y - base.y;
|
|
2254
|
-
return Math.atan2(dx * vy - dy * vx, dx * vx + dy * vy);
|
|
2255
|
-
}
|
|
2256
|
-
/** This function gives the place where the routes `P` and `Q` part after the last point of the run, or nothing. */
|
|
2257
|
-
function partAfter(P, Q) {
|
|
2258
|
-
for (let j = 1;; j++) {
|
|
2259
|
-
const a = P.p[P.e + j];
|
|
2260
|
-
const b = Q.p[Q.e + j];
|
|
2261
|
-
if (a === void 0 || b === void 0) return void 0;
|
|
2262
|
-
if (dist(a, b) > SAME$3) {
|
|
2263
|
-
const from = P.p[P.e + j - 2];
|
|
2264
|
-
const at = P.p[P.e + j - 1];
|
|
2265
|
-
const side = turn$1(from, at, a) - turn$1(from, at, b);
|
|
2266
|
-
return side === 0 ? void 0 : {
|
|
2267
|
-
at,
|
|
2268
|
-
side
|
|
2269
|
-
};
|
|
2270
|
-
}
|
|
2271
|
-
}
|
|
2272
|
-
}
|
|
2273
|
-
/** This function gives the place where the routes `P` and `Q` part before the first point of the run, or nothing. */
|
|
2274
|
-
function partBefore(P, Q) {
|
|
2275
|
-
for (let j = 1;; j++) {
|
|
2276
|
-
const a = P.p[P.s - j];
|
|
2277
|
-
const b = Q.p[Q.s - j];
|
|
2278
|
-
if (a === void 0 || b === void 0) return void 0;
|
|
2279
|
-
if (dist(a, b) > SAME$3) {
|
|
2280
|
-
const from = P.p[P.s - j + 2];
|
|
2281
|
-
const at = P.p[P.s - j + 1];
|
|
2282
|
-
const side = turn$1(from, at, b) - turn$1(from, at, a);
|
|
2283
|
-
return side === 0 ? void 0 : {
|
|
2284
|
-
at,
|
|
2285
|
-
side
|
|
2286
|
-
};
|
|
2287
|
-
}
|
|
2288
|
-
}
|
|
2289
|
-
}
|
|
2290
|
-
const byEdge$2 = (P, Q) => P.edge < Q.edge ? -1 : P.edge > Q.edge ? 1 : 0;
|
|
2291
|
-
/** This function puts the point `a` before the point `b`: the smaller x first, then the smaller y. */
|
|
2292
|
-
const firstPoint = (a, b) => a.x < b.x - SAME$3 || Math.abs(a.x - b.x) <= SAME$3 && a.y < b.y;
|
|
2293
2351
|
/**
|
|
2294
2352
|
* This function gives the lane order of the edges on a shared way `run` (metro-line order).
|
|
2295
2353
|
* The routes are polylines that hold the points of the run in a row, in either direction. A route that does not hold the run goes last.
|
|
@@ -2300,6 +2358,11 @@ const firstPoint = (a, b) => a.x < b.x - SAME$3 || Math.abs(a.x - b.x) <= SAME$3
|
|
|
2300
2358
|
* With the order `bundle`, two routes that part on one side at both ends keep that side.
|
|
2301
2359
|
* When the two ends disagree, the two routes must cross. The end with the smaller x, then the smaller y, tells the side.
|
|
2302
2360
|
* Thus each shared way of a common stretch gives two routes the same order, and the crossing is where they part.
|
|
2361
|
+
*
|
|
2362
|
+
* This relation of two lanes is not transitive, so three lanes can make a cycle. The sort of the engine then gives another order on another engine.
|
|
2363
|
+
* Thus the function sorts with a merge sort of the package (LANE-ORDER). The order is the same on each JavaScript engine.
|
|
2364
|
+
* On a run with no cycle, the order is the order of each correct sort, for each order of `routes`.
|
|
2365
|
+
* On a run with a cycle, the order depends on the order of `routes`. The item LANE-STRETCH is to remove the cycles.
|
|
2303
2366
|
*/
|
|
2304
2367
|
function orderLanes(run, routes, order = "run") {
|
|
2305
2368
|
const placed = [];
|
|
@@ -2324,17 +2387,7 @@ function orderLanes(run, routes, order = "run") {
|
|
|
2324
2387
|
else lost.push(r.edge);
|
|
2325
2388
|
}
|
|
2326
2389
|
}
|
|
2327
|
-
|
|
2328
|
-
else {
|
|
2329
|
-
placed.sort(byEdge$2);
|
|
2330
|
-
placed.sort((P, Q) => {
|
|
2331
|
-
const after = partAfter(P, Q);
|
|
2332
|
-
const before = partBefore(P, Q);
|
|
2333
|
-
if (after && before && Math.sign(after.side) !== Math.sign(before.side)) return firstPoint(after.at, before.at) ? after.side : before.side;
|
|
2334
|
-
return after?.side ?? before?.side ?? byEdge$2(P, Q);
|
|
2335
|
-
});
|
|
2336
|
-
}
|
|
2337
|
-
return [...placed.map((x) => x.edge), ...lost.sort()];
|
|
2390
|
+
return [...orderPlaced(placed, order).map((x) => x.edge), ...lost.sort()];
|
|
2338
2391
|
}
|
|
2339
2392
|
// src/curves/highway/index.ts
|
|
2340
2393
|
/** A turn smaller than this angle, in radians, is no corner. A turn nearer to a half turn than this angle stays sharp. */
|
|
@@ -6123,7 +6176,6 @@ function snellMerges(ways, firstId, clear, delta) {
|
|
|
6123
6176
|
}
|
|
6124
6177
|
}
|
|
6125
6178
|
// src/routers/shared.ts
|
|
6126
|
-
const byText = (a, b) => a < b ? -1 : a > b ? 1 : 0;
|
|
6127
6179
|
/** The angle, from -π to π, of the turn at `base` from the direction `from` → `base` to the point `to`. */
|
|
6128
6180
|
function turn(from, base, to) {
|
|
6129
6181
|
const dx = base.x - from.x;
|
|
@@ -6428,7 +6480,7 @@ function laneOrderOfRun(run) {
|
|
|
6428
6480
|
}
|
|
6429
6481
|
return byText(p.edge.id, q.edge.id);
|
|
6430
6482
|
};
|
|
6431
|
-
return
|
|
6483
|
+
return orderRun(run.ways, compare).map((w) => w.edge.id);
|
|
6432
6484
|
}
|
|
6433
6485
|
// src/routers/straight.ts
|
|
6434
6486
|
/** This function gives the point where the ray from the center of the box to `toward` leaves the box. */
|
|
@@ -22999,11 +23051,6 @@ function round3(value) {
|
|
|
22999
23051
|
return r === 0 ? 0 : r;
|
|
23000
23052
|
}
|
|
23001
23053
|
// src/order/index.ts
|
|
23002
|
-
/** This function compares two edges by the hash of their ids, and then by their ids. Thus the order of two edges does not depend on the input. */
|
|
23003
|
-
function byHash(a, b) {
|
|
23004
|
-
if (a.h !== b.h) return a.h - b.h;
|
|
23005
|
-
return a.e.id < b.e.id ? -1 : a.e.id > b.e.id ? 1 : 0;
|
|
23006
|
-
}
|
|
23007
23054
|
/**
|
|
23008
23055
|
* This function gives the graph with its edges in the stable order of WILD-053: by the FNV-1a hash of the id, then by the id.
|
|
23009
23056
|
* The nodes and the edges do not change. Two orders of the same edges give the same graph.
|
|
@@ -27916,7 +27963,7 @@ function portfolioBand(nodes, bands = PORTFOLIO_BANDS) {
|
|
|
27916
27963
|
// src/portfolio/fit.ts
|
|
27917
27964
|
/**
|
|
27918
27965
|
* The fit of each rule, cap and size band, by the key `<rule>|<cap>|<band>`: the members of the default of the portfolio router, in their order.
|
|
27919
|
-
* Each member has a node limit: it runs only on an input with that many nodes or fewer. The limits keep the model time at or below
|
|
27966
|
+
* Each member has a node limit: it runs only on an input with that many nodes or fewer. The limits keep the model time at or below 45 ms.
|
|
27920
27967
|
* The base `shared` is not in a fit: the portfolio always runs it first.
|
|
27921
27968
|
*/
|
|
27922
27969
|
const PORTFOLIO_FIT = {
|
|
@@ -27935,9 +27982,11 @@ const PORTFOLIO_FIT = {
|
|
|
27935
27982
|
["trunks-tree-bf08", 24],
|
|
27936
27983
|
["corners-side", 24],
|
|
27937
27984
|
["shared-p2", 24],
|
|
27938
|
-
["w2c:zipper+stretch-b1.1", 18]
|
|
27985
|
+
["w2c:zipper+stretch-b1.1", 18],
|
|
27986
|
+
["hw:weiszfeld", 18],
|
|
27987
|
+
["trunks-gilbert-a07", 18]
|
|
27939
27988
|
],
|
|
27940
|
-
"collection|1.1|n25-40": [["w2a:shared-ways+breakeven", 40], ["w2b:weiszfeld-a1",
|
|
27989
|
+
"collection|1.1|n25-40": [["w2a:shared-ways+breakeven", 40], ["w2b:weiszfeld-a1", 40]],
|
|
27941
27990
|
"collection|1.1|n41-64": [],
|
|
27942
27991
|
"collection|1.1|n65-128": [],
|
|
27943
27992
|
"collection|1.25|n1-12": [
|
|
@@ -27957,12 +28006,14 @@ const PORTFOLIO_FIT = {
|
|
|
27957
28006
|
["w3e:crossbars+stretch", 24],
|
|
27958
28007
|
["trunks-tree-bf06", 24],
|
|
27959
28008
|
["w3c:hdbscan+stretch", 18],
|
|
27960
|
-
["shared-wind-p2-r1-e2", 18]
|
|
28009
|
+
["shared-wind-p2-r1-e2", 18],
|
|
28010
|
+
["hw:stubs", 18]
|
|
27961
28011
|
],
|
|
27962
28012
|
"collection|1.25|n25-40": [
|
|
27963
28013
|
["w2a:shared-ways+stretch", 40],
|
|
27964
28014
|
["shared-p3", 40],
|
|
27965
|
-
["shared-order-shortest",
|
|
28015
|
+
["shared-order-shortest", 40],
|
|
28016
|
+
["w2b:weiszfeld-a1", 32]
|
|
27966
28017
|
],
|
|
27967
28018
|
"collection|1.25|n41-64": [],
|
|
27968
28019
|
"collection|1.25|n65-128": [],
|
|
@@ -27983,13 +28034,14 @@ const PORTFOLIO_FIT = {
|
|
|
27983
28034
|
["shared-wind-p2-r1-e2", 24],
|
|
27984
28035
|
["trunks-tree-bf06", 24],
|
|
27985
28036
|
["shared-flow-a06-p3", 24],
|
|
27986
|
-
["shared-wind-p3-r1",
|
|
27987
|
-
["trunks-gilbert-a07",
|
|
28037
|
+
["shared-wind-p3-r1", 24],
|
|
28038
|
+
["trunks-gilbert-a07", 24]
|
|
27988
28039
|
],
|
|
27989
28040
|
"collection|1.5|n25-40": [
|
|
27990
28041
|
["shared-p3", 40],
|
|
27991
28042
|
["hw:lanes", 40],
|
|
27992
|
-
["shared-wind-p2-r1-e2",
|
|
28043
|
+
["shared-wind-p2-r1-e2", 40],
|
|
28044
|
+
["hw:crossbars", 32]
|
|
27993
28045
|
],
|
|
27994
28046
|
"collection|1.5|n41-64": [["shared-flow-a06-p3", 64]],
|
|
27995
28047
|
"collection|1.5|n65-128": [],
|
|
@@ -27999,33 +28051,36 @@ const PORTFOLIO_FIT = {
|
|
|
27999
28051
|
["w3d:kdeeb+stretch", 12],
|
|
28000
28052
|
["w3c:hough-wide", 12],
|
|
28001
28053
|
["w3d:kdeeb-routes", 12],
|
|
28002
|
-
["hw:stubs",
|
|
28003
|
-
["hw:spiral",
|
|
28054
|
+
["hw:stubs", 12],
|
|
28055
|
+
["hw:spiral", 12],
|
|
28004
28056
|
["w3b:growth-s0.7", 10]
|
|
28005
28057
|
],
|
|
28006
28058
|
"all|1.1|n13-24": [
|
|
28007
28059
|
["w3e:frechet-e0.5", 24],
|
|
28008
28060
|
["w3a:diffusion-wide", 24],
|
|
28009
28061
|
["w2c:zipper+stretch-b1.1", 24],
|
|
28010
|
-
["w3d:cubu+stretch", 18]
|
|
28062
|
+
["w3d:cubu+stretch", 18],
|
|
28063
|
+
["w3a:spiral-a15", 18]
|
|
28011
28064
|
],
|
|
28012
28065
|
"all|1.1|n25-40": [["w2c:zipper+stretch-b1.1", 40], ["w3a:spiral-a15", 32]],
|
|
28013
|
-
"all|1.1|n41-64": [],
|
|
28066
|
+
"all|1.1|n41-64": [["hw:diffusion", 64]],
|
|
28014
28067
|
"all|1.1|n65-128": [],
|
|
28015
28068
|
"all|1.25|n1-12": [
|
|
28016
28069
|
["w3d:kdeeb-routes", 12],
|
|
28017
28070
|
["w3e:mlseb+stretch", 12],
|
|
28018
28071
|
["hw:growth", 12],
|
|
28019
|
-
["hw:level-links",
|
|
28072
|
+
["hw:level-links", 12],
|
|
28020
28073
|
["w3b:growth-input", 10],
|
|
28021
|
-
["w3e:confluent+stretch", 10]
|
|
28074
|
+
["w3e:confluent+stretch", 10],
|
|
28075
|
+
["w3d:kdeeb-nomask", 10]
|
|
28022
28076
|
],
|
|
28023
28077
|
"all|1.25|n13-24": [
|
|
28024
28078
|
["w3d:kdeeb-routes", 24],
|
|
28025
|
-
["w3f:p-hub-a0.2",
|
|
28026
|
-
["w3d:kdeeb-nomask", 18]
|
|
28079
|
+
["w3f:p-hub-a0.2", 24],
|
|
28080
|
+
["w3d:kdeeb-nomask", 18],
|
|
28081
|
+
["w3a:spiral-n3", 18]
|
|
28027
28082
|
],
|
|
28028
|
-
"all|1.25|n25-40": [],
|
|
28083
|
+
"all|1.25|n25-40": [["w3d:kdeeb-routes", 32]],
|
|
28029
28084
|
"all|1.25|n41-64": [],
|
|
28030
28085
|
"all|1.25|n65-128": [],
|
|
28031
28086
|
"all|1.5|n1-12": [
|
|
@@ -28036,7 +28091,11 @@ const PORTFOLIO_FIT = {
|
|
|
28036
28091
|
["w3f:territories-r2", 10]
|
|
28037
28092
|
],
|
|
28038
28093
|
"all|1.5|n13-24": [["hw:growth", 24], ["w3b:growth-input", 24]],
|
|
28039
|
-
"all|1.5|n25-40": [
|
|
28094
|
+
"all|1.5|n25-40": [
|
|
28095
|
+
["hw:growth", 40],
|
|
28096
|
+
["w3b:growth-s0.7", 40],
|
|
28097
|
+
["w3b:growth-s0.3", 32]
|
|
28098
|
+
],
|
|
28040
28099
|
"all|1.5|n41-64": [],
|
|
28041
28100
|
"all|1.5|n65-128": []
|
|
28042
28101
|
};
|
|
@@ -28736,6 +28795,8 @@ const PORTFOLIO_SETS = {
|
|
|
28736
28795
|
]
|
|
28737
28796
|
};
|
|
28738
28797
|
// src/portfolio/router.ts
|
|
28798
|
+
/** The values of the option `hashes`, in order. The default is `pick`. */
|
|
28799
|
+
const PORTFOLIO_HASHES = ["pick", "all"];
|
|
28739
28800
|
/** The base member of each portfolio: the router `shared` with the rule `byCollection`. It is the fallback output above the cap. */
|
|
28740
28801
|
const PORTFOLIO_BASE_MEMBER = "shared";
|
|
28741
28802
|
/** This function checks the options of the portfolio router, and gives them with their defaults. It throws a `RangeError` for a bad value. */
|
|
@@ -28743,13 +28804,16 @@ function checked(o) {
|
|
|
28743
28804
|
const rule = o.rule ?? "collection";
|
|
28744
28805
|
const cap = o.cap ?? 1.5;
|
|
28745
28806
|
const k = o.k;
|
|
28807
|
+
const hashes = o.hashes ?? "pick";
|
|
28746
28808
|
if (!PORTFOLIO_RULES.includes(rule)) throw new RangeError(`The portfolio router has the rule "${String(rule)}". It must be ${PORTFOLIO_RULES.join(" or ")}.`);
|
|
28747
28809
|
if (!PORTFOLIO_CAPS.includes(cap)) throw new RangeError(`The portfolio router has the cap ${String(cap)}. It must be ${PORTFOLIO_CAPS.join(", ")}.`);
|
|
28748
28810
|
if (k !== void 0 && !PORTFOLIO_KS_API.includes(k)) throw new RangeError(`The portfolio router has the k ${String(k)}. It must be ${PORTFOLIO_KS_API.join(", ")}.`);
|
|
28811
|
+
if (!PORTFOLIO_HASHES.includes(hashes)) throw new RangeError(`The portfolio router has the hashes "${String(hashes)}". It must be ${PORTFOLIO_HASHES.join(" or ")}.`);
|
|
28749
28812
|
return {
|
|
28750
28813
|
rule,
|
|
28751
28814
|
cap,
|
|
28752
|
-
k
|
|
28815
|
+
k,
|
|
28816
|
+
hashes
|
|
28753
28817
|
};
|
|
28754
28818
|
}
|
|
28755
28819
|
/** This function gives the name of the portfolio router with the options `options`: `portfolio-<rule>-<cap>-k<k>`, or `portfolio-<rule>-<cap>-fit` without `k`. */
|
|
@@ -28774,10 +28838,11 @@ function portfolioMembers(nodes, options = {}) {
|
|
|
28774
28838
|
* The key is `portfolioKey`: a member wins only when it passes the guard against the base. Of those members, the winner has the most ink saved.
|
|
28775
28839
|
* A tie within the `minEffect` of B1 goes to the first member (`selectBest`). A member that throws does not win.
|
|
28776
28840
|
* The result carries the trace of the pick and the move count `move.pick`.
|
|
28841
|
+
* With the option `hashes` "pick" (the default), only the base and the winner get an `outputHash` in the trace. They get it only when the winner is not the base.
|
|
28777
28842
|
*/
|
|
28778
28843
|
function routePortfolio(graph, options = {}) {
|
|
28779
28844
|
const names = portfolioMembers(graph.nodes.length, options).filter((name) => name === "shared" || (portfolioMember(name)?.maxNodes ?? Infinity) >= graph.nodes.length);
|
|
28780
|
-
const { rule, cap } = checked(options);
|
|
28845
|
+
const { rule, cap, hashes } = checked(options);
|
|
28781
28846
|
let base;
|
|
28782
28847
|
const members = names.map((name) => {
|
|
28783
28848
|
const s = portfolioMember(name);
|
|
@@ -28796,6 +28861,7 @@ function routePortfolio(graph, options = {}) {
|
|
|
28796
28861
|
};
|
|
28797
28862
|
});
|
|
28798
28863
|
const pick = portfolio(portfolioName(options), members, portfolioKey(graph, rule, cap, () => base), {
|
|
28864
|
+
hashes,
|
|
28799
28865
|
...options.budgetMs === void 0 ? {} : { budgetMs: options.budgetMs },
|
|
28800
28866
|
...options.maxMembers === void 0 ? {} : { maxMembers: options.maxMembers },
|
|
28801
28867
|
...options.now === void 0 ? {} : { now: options.now }
|
|
@@ -28834,6 +28900,6 @@ const portfolioStrategy = defineStrategy({
|
|
|
28834
28900
|
maxNodes: 1e4,
|
|
28835
28901
|
run: (graph, options) => routePortfolio(graph, options).result
|
|
28836
28902
|
});
|
|
28837
|
-
export { AMBIGUITY_GUARD_DEFAULTS, ARC_SOURCES, AREA_DEFAULTS, AREA_WIDTHS, BACKTRACK_MIN, BACKTRACK_SHARE, BREAK, BREAK_EVEN, BREAK_EVEN_DEFAULTS, BUILT_IN_STRATEGIES, BoundaryWalk, CANDIDATE_SOURCES, CAP_SWEEP, CASES, CHANNEL_REACH, CLEARANCE_CAP, COMPARE_STEPS, CONFLUENT_DEFAULTS, CONSENSUS_DEFAULTS, CONSENSUS_LINKAGES, CORRIDOR_DEFAULTS, CROSSBAR_DEFAULTS, CUBU_DEFAULTS, CURVE_TYPES, CUT_DEFAULTS, CornerGraph, DENSITY_KERNELS, DIFFUSION_DEFAULTS, DIVIDED_DEFAULTS, EDGE_DISTANCES, EDGE_PATH_DEFAULTS, EXACT_CLASSES, EXACT_EDGES_PER_NODE, EXACT_V1, EXACT_V1_BOUNDS, EXACT_V1_BOUNDS_SIZES, EXACT_V1_SEEDS, EXACT_V1_SIZES, FDEB_DEFAULTS, FIXTURES, FLOW_CLUSTER_DEFAULTS, FLOW_FIELD_DEFAULTS, FRECHET_DEFAULTS, FRONT_OBJECTIVES, GAP_BASELINES, GAP_BOOTSTRAP, GAP_CAPS, GAP_RULES, GAP_VIEWS, GROUP_SCOPES, GROUP_SPINES, GROWTH_DEFAULTS, GROWTH_SWEEP, Grid, HDBSCAN_DEFAULTS, HIERARCHY_DEFAULTS, HIERARCHY_GROUPS, HIGHWAY_BASES, HIGHWAY_BASE_ROUTERS, HOUGH_DEFAULTS, HUB_ALLOCATIONS, HUB_ARC_DEFAULTS, HUB_CANDIDATES, HYSTERESIS_DEFAULTS, KDEEB_DEFAULTS, KD_DEFAULTS, KENDALL_EXACT, LANES_DEFAULTS, LANE_ORDERS, LANE_TRACKS, LEVEL_HIGHWAY_DEFAULTS, LINKAGES, LINK_COMMUNITY_DEFAULTS, MEASURES, MEASURE_LANE_WIDTH, MEET_DEFAULTS, MEMBER_FORMS, MESH_DEFAULTS, MINGLE_DEFAULTS, MIN_EFFECTS, MLSEB_DEFAULTS, MLS_FITS, MODULE_RULES, MOVE_NAMES, NESTED_DEFAULTS, OD_CELL_DEFAULTS, OUTSIDE_SLACK, Obstacles, PICK, PLAN_CHANGERS, PORTFOLIO_B1, PORTFOLIO_BANDS, PORTFOLIO_BASE_MEMBER, PORTFOLIO_CAPS, PORTFOLIO_FIT, PORTFOLIO_KS_API, PORTFOLIO_RULES, PORTFOLIO_SETS, POWER_DEFAULTS, PROPOSED_RULES, P_HUB_DEFAULTS, QUICKBUNDLES_DEFAULTS, RECORD_EPS, RESISTANCE_DEFAULTS, RIDGE_DEFAULTS, ROAD_CLASS_DEFAULTS, ROOM_FAMILIES, ROUTERS, SAME_HIGHWAY, SBEB_DEFAULTS, SCALE_SPACE_DEFAULTS, SCREEN_RULES, SCREEN_SETS, SCREEN_STEPS, SCREEN_V1, SCREEN_WRAPS, SECTION_DEFAULTS, SELECT_DEFAULTS, SIDE_NORMAL, SKELETON_GROUPS, SKELETON_TARGETS, SLACK_SWEEP, SOFT_KEY_DEFAULTS, SPACING_LIMIT, SPECTRAL_DEFAULTS, SPIRAL_DEFAULTS, STABLE_ID_DEFAULTS, STEPS, STRATEGIES, STRETCH_DEFAULTS, STRETCH_SWEEP, STUB_DEFAULTS, SUITE_COLUMNS, SoftGraph, SplitTree, TERRITORY_DEFAULTS, TERRITORY_POINTS, TOLERANCE, TRACLUS_DEFAULTS, TRAFFIC_RULES, WEISZFELD_DEFAULTS, WSPD_DEFAULTS, WayFinder, ZIPPER_DEFAULTS, activationBase, activationReport, adjustedRandIndex, allSections, ambiguity, ambiguityGate, ambiguityPlan, arcCurve, areaPlan, asRouter, backtrackOf, balance, basePlan, benchBendRoom, benchCurveStrategies, benchCurves, benchHighways, benchLevelRoom, benchOne, benchRoom, benchRun, benchTracks, bendCount, bendingEnergy, bicliqueGroups, bigGroups, boardGaps, boardUnit, boardWins, bootstrapMedian, boundsFamilyName, boxExit, boxPush, boxUnit, boxesOverlap, breakEvenGate, breakEvenPlan, buildSections, bundleStretch, bundledShare, byCollection, byDataGroup, candidateArcs, candidatePlan, candidateScore, canonicalJson, capSettings, cellSteps, center, chainClusters, changeGraph, channelOverflows, channelWidth, characteristicPoints, checkLevels, checkOptions, checkPlan, checkProperties, checkSchema, checkSections, clampOptions, clothoidCurve, clusters1d, coAssociation, commonEdges, compareMeasure, compareSpec, compareStep, compatibility, compatibilityMatrix, confluentPlan, consensusGroups, consensusLabels, consensusPlan, controlChain, cornersRouter, corpusManifest, corridorPlan, countCrossings, countOverlaps, createRegistry, crossbarPlan, crossesItself, crossingAngle, crossingAngles, cubicAt, cubuPlan, curveFaults, curveJoints, curveOf, curveRuns, curveSpace, curveStrategies, curvesHash, cutGroups, cutShare, defineStrategy, denseGroupsBoard, densityPlan, densityRidges, detourSpread, diffusionPlan, dist, distinctPoints, divideHighway, dividedPlan, documentHash, dominates, drawnSegments, edgeBlocks, edgeEnds, edgeLengths, edgePathPlan, edgePaths, edgePlugs, edgeResistance, exactBoard, exactFamily, exactGenerator, exactSeed, exactStretch, exactStretches, exercised, familyOf, familySeed, farLevel, fdebLines, fdebPlan, fft, findStrategy, finderOf, firstLines, fixedPortPoint, fixtureGroupOptions, flowClusterPlan, flowClusters, flowDistance, flowFieldPlan, fnv1a32, follow, formatActivation, formatBendRoom, formatCurves, formatFaults, formatFronts, formatGap, formatHighways, formatInput, formatLevelRoom, formatLevels, formatMeasureTime, formatRoom, formatRules, formatScreen, formatSections, formatSummaries, formatTable, formatTracks, frechet, frechetBundles, frechetPlan, g1Defect, g2Defect, gapBaselines, gapCap, gapClosed, gapLaneCounts, gapLanes, gapNames, gapValues, gateStrategy, getStrategy, goesOutAndBack, graphInput, greedyBicliques, greedyCrossbars, groupEdges, groupRun, groupSettings, groupStability, groupStrategies, groupedPlan, growthPlan, growthSettings, guardBreaks, hasCusp, hdbscanClusters, hdbscanLabels, hdbscanPlan, hierarchyPlan, highwayChurn, highwayCurve, highwayCurves, highwayEdits, highwayIdKeep, highwayMoves, highwayRouter, highwayRouterStrategy, highwayStrategies, houghLines, houghPeaks, houghPlan, hubArcPlan, hubCandidates, hubChainBoard, hysteresisGate, hysteresisPlan, inflate, inflectionCount, inflectionCurve, inflectionSector, inkSaved, innerPoints, inputGraph, inputId, itemSizes, jaccard, jaccardIndex, jogPeaks, joinReports, jsonSafe, kMeans, kdGroups, kdeebLines, kdeebPlan, keepMembers, kendallTau, keyGroups, keyedSections, keysPlan, labelGroups, laneArea, laneCrossings, laneFidelity, laneOrder, laneRoutes, laneSeparation, laneSettings, lanesPlan, lanesThrough, leafGroups, lengthBetween, levelCut, levelGrouping, levelHighwayPlan, levelMeasures, levelPairs, levelRoom, lineDensity, linePoint, linkAgreement, linkCommunities, linkCommunityGroups, linkCommunityPlan, linkDensity, listOptions, listStrategies, makeFixture, makeRoom, manyGroupsBoard, matchHighways, maxStretch, mdf, meanLine, measureBoard, measureByKey, measureByName, measureHighways, measureJogs, measureLevel, measureLevelFaults, measureLinks, measureName, measureQuality, measureRouteFaults, measureStability, meetMember, meetPlan, meetingPoints, memberAt, memberStrategy, mergeAngle, meshPlan, meshWaypoints, minEffectOf, minHash, mingleBundles, minglePlan, mixedSegments, mixesCollections, mlsPoint, mlsebLines, mlsebPlan, modularity, modulesOf, mulberry32, namedObjectives, nearestCentre, nearestOnBoundary, nearestOnLine, nearestSide, nearestSkeleton, nestedGridBoard, nestedGroups, nestedPlan, nestingFaults, nestingViolations, nextRow, nodeAmbiguity, nodeIndex, nodeLinks, occupiedArea, odCellPlan, odGroups, offsetLine, offsetPolyline, openGaps, openLanes, optimaFile, optimumKey, optionDefaults, orderChanges, orderFragility, orderLanes, orderRows, orderStability, orderSuiteRows, orthogonality, outOfBoxes, outputGroups, outputHash, pHubPlan, pMedian, packedGridBoard, paretoFront, parseLines, partWithin, passSettings, pathPoints, peakCurvature, pickLevel, pickMoves, placePlug, planMoves, planOfResult, plugSpacing, plugsRouter, pointAt, pointBoxDistance, pointDensity, pointGroups, pointOnSide, pointSegmentDistance, polylineLength, portfolio, portfolioB1Spec, portfolioBand, portfolioFacts, portfolioKey, portfolioMember, portfolioMembers, portfolioName, portfolioRouter, portfolioStrategy, positionStability, powerPlan, pullApart, quadtreeGroups, quantile, quickBundles, quickBundlesPlan, randomInt, rayToBox, recordLines, recordMoves, rectScattered, regionBounds, register, repairResult, repairStrategy, representative, resample, resistanceClusters, resistancePlan, resultForm, resultHash, ridgeLines, ridgePlan, rng, roadClassPlan, roomDemand, roomLinks, roomOrderFaults, roomStrategies, round3, roundCorners, roundedCurve, routeCrossings, routeInStableOrder, routeMeasures, routePortfolio, routeSeparation, routeStability, routerStrategies, routersOf, ruleCounts, runBenchmark, runKey, runProfile, runSuite, sameData, sampleCurve, samplesOf, sbebLines, sbebPlan, scaleClusters, scaleSpaceGroups, scaleSpacePlan, screen, screenInputs, sectionsRouter, segmentBounds, segmentBoxDistance, segmentClusters, segmentDistance, segmentHitsBox, segmentHitsRect, segmentKey, segmentsCross, segmentsOf, selectBest, selectPlan, sha256Hex, shapeSkeleton, sharedRouter, sharedStretches, sharedWaysAll, sharedWaysPlan, shuffleEdges, sideAngle, sideToward, skeletonGroups, skeletonPath, slackSettings, smoothCurve, snapPlan, softDistance, softKeyClusters, softKeyPlan, spectralClusters, spectralLabels, spectralPlan, spinePart, spiralJoin, spiralPlan, spiralTree, splineCurve, splitPoint, stableIdGate, stableIdPlan, stableOrder, stableOrderStrategy, stepSeed, straightCurve, straightRouter, stretchGate, stretchPlan, stretchSettings, stubPlan, suiteFronts, sumFaults, summarize, summarizeGap, summarizeRows, sweepGrid, sweepOf, sweepRoom, sweepSections, sweepValues, symmetricEigen, territoryPlan, toSvgPath, totalTurn, tracePlan, traclusPlan, treeCost, treeDepth, trunksRouter, turns, unwrappedName, utf8, waypointWay, weberPoint, weiszfeldPlan, withBends, withRepair, withStableOrder, wspdGroups, wspdPlan, zipLegs, zipperPlan };
|
|
28903
|
+
export { AMBIGUITY_GUARD_DEFAULTS, ARC_SOURCES, AREA_DEFAULTS, AREA_WIDTHS, BACKTRACK_MIN, BACKTRACK_SHARE, BREAK, BREAK_EVEN, BREAK_EVEN_DEFAULTS, BUILT_IN_STRATEGIES, BoundaryWalk, CANDIDATE_SOURCES, CAP_SWEEP, CASES, CHANNEL_REACH, CLEARANCE_CAP, COMPARE_STEPS, CONFLUENT_DEFAULTS, CONSENSUS_DEFAULTS, CONSENSUS_LINKAGES, CORRIDOR_DEFAULTS, CROSSBAR_DEFAULTS, CUBU_DEFAULTS, CURVE_TYPES, CUT_DEFAULTS, CornerGraph, DENSITY_KERNELS, DIFFUSION_DEFAULTS, DIVIDED_DEFAULTS, EDGE_DISTANCES, EDGE_PATH_DEFAULTS, EXACT_CLASSES, EXACT_EDGES_PER_NODE, EXACT_V1, EXACT_V1_BOUNDS, EXACT_V1_BOUNDS_SIZES, EXACT_V1_SEEDS, EXACT_V1_SIZES, FDEB_DEFAULTS, FIXTURES, FLOW_CLUSTER_DEFAULTS, FLOW_FIELD_DEFAULTS, FRECHET_DEFAULTS, FRONT_OBJECTIVES, GAP_BASELINES, GAP_BOOTSTRAP, GAP_CAPS, GAP_RULES, GAP_VIEWS, GROUP_SCOPES, GROUP_SPINES, GROWTH_DEFAULTS, GROWTH_SWEEP, Grid, HDBSCAN_DEFAULTS, HIERARCHY_DEFAULTS, HIERARCHY_GROUPS, HIGHWAY_BASES, HIGHWAY_BASE_ROUTERS, HOUGH_DEFAULTS, HUB_ALLOCATIONS, HUB_ARC_DEFAULTS, HUB_CANDIDATES, HYSTERESIS_DEFAULTS, KDEEB_DEFAULTS, KD_DEFAULTS, KENDALL_EXACT, LANES_DEFAULTS, LANE_ORDERS, LANE_TRACKS, LEVEL_HIGHWAY_DEFAULTS, LINKAGES, LINK_COMMUNITY_DEFAULTS, MEASURES, MEASURE_LANE_WIDTH, MEET_DEFAULTS, MEMBER_FORMS, MESH_DEFAULTS, MINGLE_DEFAULTS, MIN_EFFECTS, MLSEB_DEFAULTS, MLS_FITS, MODULE_RULES, MOVE_NAMES, NESTED_DEFAULTS, OD_CELL_DEFAULTS, OUTSIDE_SLACK, Obstacles, PICK, PLAN_CHANGERS, PORTFOLIO_B1, PORTFOLIO_BANDS, PORTFOLIO_BASE_MEMBER, PORTFOLIO_CAPS, PORTFOLIO_FIT, PORTFOLIO_HASHES, PORTFOLIO_KS_API, PORTFOLIO_RULES, PORTFOLIO_SETS, POWER_DEFAULTS, PROPOSED_RULES, P_HUB_DEFAULTS, QUICKBUNDLES_DEFAULTS, RECORD_EPS, RESISTANCE_DEFAULTS, RIDGE_DEFAULTS, ROAD_CLASS_DEFAULTS, ROOM_FAMILIES, ROUTERS, SAME_HIGHWAY, SBEB_DEFAULTS, SCALE_SPACE_DEFAULTS, SCREEN_RULES, SCREEN_SETS, SCREEN_STEPS, SCREEN_V1, SCREEN_WRAPS, SECTION_DEFAULTS, SELECT_DEFAULTS, SIDE_NORMAL, SKELETON_GROUPS, SKELETON_TARGETS, SLACK_SWEEP, SOFT_KEY_DEFAULTS, SPACING_LIMIT, SPECTRAL_DEFAULTS, SPIRAL_DEFAULTS, STABLE_ID_DEFAULTS, STEPS, STRATEGIES, STRETCH_DEFAULTS, STRETCH_SWEEP, STUB_DEFAULTS, SUITE_COLUMNS, SoftGraph, SplitTree, TERRITORY_DEFAULTS, TERRITORY_POINTS, TOLERANCE, TRACLUS_DEFAULTS, TRAFFIC_RULES, WEISZFELD_DEFAULTS, WSPD_DEFAULTS, WayFinder, ZIPPER_DEFAULTS, activationBase, activationReport, adjustedRandIndex, allSections, ambiguity, ambiguityGate, ambiguityPlan, arcCurve, areaPlan, asRouter, backtrackOf, balance, basePlan, benchBendRoom, benchCurveStrategies, benchCurves, benchHighways, benchLevelRoom, benchOne, benchRoom, benchRun, benchTracks, bendCount, bendingEnergy, bicliqueGroups, bigGroups, boardGaps, boardUnit, boardWins, bootstrapMedian, boundsFamilyName, boxExit, boxPush, boxUnit, boxesOverlap, breakEvenGate, breakEvenPlan, buildSections, bundleStretch, bundledShare, byCollection, byDataGroup, candidateArcs, candidatePlan, candidateScore, canonicalJson, capSettings, cellSteps, center, chainClusters, changeGraph, channelOverflows, channelWidth, characteristicPoints, checkLevels, checkOptions, checkPlan, checkProperties, checkSchema, checkSections, clampOptions, clothoidCurve, clusters1d, coAssociation, commonEdges, compareMeasure, compareSpec, compareStep, compatibility, compatibilityMatrix, confluentPlan, consensusGroups, consensusLabels, consensusPlan, controlChain, cornersRouter, corpusManifest, corridorPlan, countCrossings, countOverlaps, createRegistry, crossbarPlan, crossesItself, crossingAngle, crossingAngles, cubicAt, cubuPlan, curveFaults, curveJoints, curveOf, curveRuns, curveSpace, curveStrategies, curvesHash, cutGroups, cutShare, defineStrategy, denseGroupsBoard, densityPlan, densityRidges, detourSpread, diffusionPlan, dist, distinctPoints, divideHighway, dividedPlan, documentHash, dominates, drawnSegments, edgeBlocks, edgeEnds, edgeLengths, edgePathPlan, edgePaths, edgePlugs, edgeResistance, exactBoard, exactFamily, exactGenerator, exactSeed, exactStretch, exactStretches, exercised, familyOf, familySeed, farLevel, fdebLines, fdebPlan, fft, findStrategy, finderOf, firstLines, fixedPortPoint, fixtureGroupOptions, flowClusterPlan, flowClusters, flowDistance, flowFieldPlan, fnv1a32, follow, formatActivation, formatBendRoom, formatCurves, formatFaults, formatFronts, formatGap, formatHighways, formatInput, formatLevelRoom, formatLevels, formatMeasureTime, formatRoom, formatRules, formatScreen, formatSections, formatSummaries, formatTable, formatTracks, frechet, frechetBundles, frechetPlan, g1Defect, g2Defect, gapBaselines, gapCap, gapClosed, gapLaneCounts, gapLanes, gapNames, gapValues, gateStrategy, getStrategy, goesOutAndBack, graphInput, greedyBicliques, greedyCrossbars, groupEdges, groupRun, groupSettings, groupStability, groupStrategies, groupedPlan, growthPlan, growthSettings, guardBreaks, hasCusp, hdbscanClusters, hdbscanLabels, hdbscanPlan, hierarchyPlan, highwayChurn, highwayCurve, highwayCurves, highwayEdits, highwayIdKeep, highwayMoves, highwayRouter, highwayRouterStrategy, highwayStrategies, houghLines, houghPeaks, houghPlan, hubArcPlan, hubCandidates, hubChainBoard, hysteresisGate, hysteresisPlan, inflate, inflectionCount, inflectionCurve, inflectionSector, inkSaved, innerPoints, inputGraph, inputId, itemSizes, jaccard, jaccardIndex, jogPeaks, joinReports, jsonSafe, kMeans, kdGroups, kdeebLines, kdeebPlan, keepMembers, kendallTau, keyGroups, keyedSections, keysPlan, labelGroups, laneArea, laneCrossings, laneFidelity, laneOrder, laneRoutes, laneSeparation, laneSettings, lanesPlan, lanesThrough, leafGroups, lengthBetween, levelCut, levelGrouping, levelHighwayPlan, levelMeasures, levelPairs, levelRoom, lineDensity, linePoint, linkAgreement, linkCommunities, linkCommunityGroups, linkCommunityPlan, linkDensity, listOptions, listStrategies, makeFixture, makeRoom, manyGroupsBoard, matchHighways, maxStretch, mdf, meanLine, measureBoard, measureByKey, measureByName, measureHighways, measureJogs, measureLevel, measureLevelFaults, measureLinks, measureName, measureQuality, measureRouteFaults, measureStability, meetMember, meetPlan, meetingPoints, memberAt, memberStrategy, mergeAngle, meshPlan, meshWaypoints, minEffectOf, minHash, mingleBundles, minglePlan, mixedSegments, mixesCollections, mlsPoint, mlsebLines, mlsebPlan, modularity, modulesOf, mulberry32, namedObjectives, nearestCentre, nearestOnBoundary, nearestOnLine, nearestSide, nearestSkeleton, nestedGridBoard, nestedGroups, nestedPlan, nestingFaults, nestingViolations, nextRow, nodeAmbiguity, nodeIndex, nodeLinks, occupiedArea, odCellPlan, odGroups, offsetLine, offsetPolyline, openGaps, openLanes, optimaFile, optimumKey, optionDefaults, orderChanges, orderFragility, orderLanes, orderRows, orderStability, orderSuiteRows, orthogonality, outOfBoxes, outputGroups, outputHash, pHubPlan, pMedian, packedGridBoard, paretoFront, parseLines, partWithin, passSettings, pathPoints, peakCurvature, pickLevel, pickMoves, placePlug, planMoves, planOfResult, plugSpacing, plugsRouter, pointAt, pointBoxDistance, pointDensity, pointGroups, pointOnSide, pointSegmentDistance, polylineLength, portfolio, portfolioB1Spec, portfolioBand, portfolioFacts, portfolioKey, portfolioMember, portfolioMembers, portfolioName, portfolioRouter, portfolioStrategy, positionStability, powerPlan, pullApart, quadtreeGroups, quantile, quickBundles, quickBundlesPlan, randomInt, rayToBox, recordLines, recordMoves, rectScattered, regionBounds, register, repairResult, repairStrategy, representative, resample, resistanceClusters, resistancePlan, resultForm, resultHash, ridgeLines, ridgePlan, rng, roadClassPlan, roomDemand, roomLinks, roomOrderFaults, roomStrategies, round3, roundCorners, roundedCurve, routeCrossings, routeInStableOrder, routeMeasures, routePortfolio, routeSeparation, routeStability, routerStrategies, routersOf, ruleCounts, runBenchmark, runKey, runProfile, runSuite, sameData, sampleCurve, samplesOf, sbebLines, sbebPlan, scaleClusters, scaleSpaceGroups, scaleSpacePlan, screen, screenInputs, sectionsRouter, segmentBounds, segmentBoxDistance, segmentClusters, segmentDistance, segmentHitsBox, segmentHitsRect, segmentKey, segmentsCross, segmentsOf, selectBest, selectPlan, sha256Hex, shapeSkeleton, sharedRouter, sharedStretches, sharedWaysAll, sharedWaysPlan, shuffleEdges, sideAngle, sideToward, skeletonGroups, skeletonPath, slackSettings, smoothCurve, snapPlan, softDistance, softKeyClusters, softKeyPlan, spectralClusters, spectralLabels, spectralPlan, spinePart, spiralJoin, spiralPlan, spiralTree, splineCurve, splitPoint, stableIdGate, stableIdPlan, stableOrder, stableOrderStrategy, stepSeed, straightCurve, straightRouter, stretchGate, stretchPlan, stretchSettings, stubPlan, suiteFronts, sumFaults, summarize, summarizeGap, summarizeRows, sweepGrid, sweepOf, sweepRoom, sweepSections, sweepValues, symmetricEigen, territoryPlan, toSvgPath, totalTurn, tracePlan, traclusPlan, treeCost, treeDepth, trunksRouter, turns, unwrappedName, utf8, waypointWay, weberPoint, weiszfeldPlan, withBends, withRepair, withStableOrder, wspdGroups, wspdPlan, zipLegs, zipperPlan };
|
|
28838
28904
|
|
|
28839
28905
|
//# sourceMappingURL=index.js.map
|