@mark1russell7/highways 0.9.3 → 0.9.5
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 +85 -5
- package/build/index.d.ts +954 -5
- package/build/index.d.ts.map +1 -1
- package/build/index.js +10689 -5294
- package/build/index.js.map +1 -1
- package/package.json +1 -1
- package/src/bench/screen/exercise.ts +4 -1
- package/src/bench/screen/set.ts +58 -1
- package/src/families/cases.ts +17 -9
- package/src/families/coverage.ts +502 -0
- package/src/families/index.ts +4 -1
- package/src/highways/balance/index.ts +93 -0
- package/src/highways/bronchial/index.ts +144 -0
- package/src/highways/index.ts +5 -0
- package/src/highways/knee/index.ts +154 -0
- package/src/highways/knee/root.ts +19 -0
- package/src/highways/manifolds/index.ts +157 -0
- package/src/highways/slots/index.ts +178 -0
- package/src/index.ts +8 -0
- package/src/levels/detail/index.ts +140 -0
- package/src/levels/venation/index.ts +191 -0
- package/src/plugs/leaders/index.ts +42 -0
- package/src/plugs/spread/index.ts +39 -5
- package/src/routers/adam/index.ts +294 -0
- package/src/routers/annealing/index.ts +260 -0
- package/src/routers/canals/index.ts +191 -0
- package/src/routers/frames.ts +80 -16
- package/src/routers/gutter.ts +545 -0
- package/src/routers/index.ts +8 -2
- package/src/routers/reroute/index.ts +164 -0
- package/src/routers/shared.ts +43 -2
- package/src/routers/tight/index.ts +122 -0
- package/src/strategies/builtins.ts +158 -2
- package/src/strategies/schemas.ts +143 -0
- package/src/whole/curriculum/index.ts +243 -0
- package/src/whole/fireflies/index.ts +177 -0
- package/src/whole/portfolio/index.ts +108 -0
- package/src/whole/preferences/index.ts +247 -0
- package/src/whole/tracing/index.ts +144 -0
package/build/index.d.ts
CHANGED
|
@@ -1619,12 +1619,21 @@ export declare function routersOf(registry: Registry): Router[];
|
|
|
1619
1619
|
* With `clamp`, the router cuts the box to the bounds of the frame.
|
|
1620
1620
|
*/
|
|
1621
1621
|
type Outside = "throw" | "skip" | "clamp";
|
|
1622
|
-
/**
|
|
1622
|
+
/**
|
|
1623
|
+
* The mode of the inner routes. With `corners`, the corner graph gives each route, in the box of the frame smaller by `frameInset`.
|
|
1624
|
+
* With `gutter`, each route is orthogonal in the free room of the frame box: the gaps between the nodes and the strips at the walls.
|
|
1625
|
+
*/
|
|
1626
|
+
type InnerMode = "corners" | "gutter";
|
|
1627
|
+
/** The options of the inner routes: the options of the way finder, the rule `outside`, the inset `frameInset`, the mode `inner` and `bendCost`. */
|
|
1623
1628
|
interface FrameOptions extends WayOptions {
|
|
1624
1629
|
/** The rule for a node box outside the box of its frame. The default is `throw`. */
|
|
1625
1630
|
readonly outside?: Outside;
|
|
1626
|
-
/** The distance from the walls of a frame to the bounds of its inner routes. The default is the margin of the router. */
|
|
1631
|
+
/** The distance from the walls of a frame to the bounds of its inner routes. The default is the margin of the router. The mode `gutter` does not use it. */
|
|
1627
1632
|
readonly frameInset?: number;
|
|
1633
|
+
/** The mode of the inner routes. The default is `corners`. */
|
|
1634
|
+
readonly inner?: InnerMode;
|
|
1635
|
+
/** The cost of one bend of an inner route of the mode `gutter`, in units of length. The default is 16. */
|
|
1636
|
+
readonly bendCost?: number;
|
|
1628
1637
|
}
|
|
1629
1638
|
/**
|
|
1630
1639
|
* This function gives the inner routes of the inner edges (`splitFrames`). Each route stays in the bounds of its frame:
|
|
@@ -1665,6 +1674,34 @@ interface CornersOptions extends FrameOptions {
|
|
|
1665
1674
|
* An inner edge (`splitFrames`) gets an inner route in the bounds of its frame (`frameRoutes`), after the outer routes.
|
|
1666
1675
|
*/
|
|
1667
1676
|
export declare function cornersRouter(options: CornersOptions): Router;
|
|
1677
|
+
/**
|
|
1678
|
+
* One inner edge of a frame for the gutter mode. `plug` is the plug of the wall, with the outward normal of the wall.
|
|
1679
|
+
* `end` is the node at the other end. `port` is the fixed plug of that node, if it has one. `side` limits the entry to one side of the node.
|
|
1680
|
+
*/
|
|
1681
|
+
interface GutterEdge {
|
|
1682
|
+
readonly plug: Plug;
|
|
1683
|
+
readonly end: Node;
|
|
1684
|
+
readonly port?: Plug;
|
|
1685
|
+
readonly side?: Side;
|
|
1686
|
+
}
|
|
1687
|
+
/** The options of the gutter mode. */
|
|
1688
|
+
interface GutterOptions {
|
|
1689
|
+
/** The cost of one bend, in units of length. The default is 16. */
|
|
1690
|
+
readonly bendCost?: number;
|
|
1691
|
+
/** The largest space between two lanes of one gap. A narrow gap gets a smaller, even space. The default is 5. */
|
|
1692
|
+
readonly laneGap?: number;
|
|
1693
|
+
}
|
|
1694
|
+
/** The default cost of one bend of the gutter mode. */
|
|
1695
|
+
export declare const GUTTER_BEND_COST = 16;
|
|
1696
|
+
/**
|
|
1697
|
+
* This function gives the orthogonal route of each edge in the free room of a frame: the box `frame` minus the boxes of `nodes`.
|
|
1698
|
+
* Each route starts at the plug of the wall, and goes along the normal of the wall into the frame. It ends on a side of its end node.
|
|
1699
|
+
*
|
|
1700
|
+
* The route goes on a grid of lines. A line goes through the middle of each free band between the box edges, each plug and each entry.
|
|
1701
|
+
* A shortest path with a cost for each bend (`bendCost`) gives the route. Then the routes that share one gap get a lane each.
|
|
1702
|
+
* An edge without a path through the free room gets `undefined`.
|
|
1703
|
+
*/
|
|
1704
|
+
export declare function gutterRoutes(frame: Box, nodes: readonly Node[], edges: readonly GutterEdge[], options?: GutterOptions): (Point[] | undefined)[];
|
|
1668
1705
|
/**
|
|
1669
1706
|
* The lane order of the stretches (LANE-STRETCH).
|
|
1670
1707
|
*
|
|
@@ -1858,13 +1895,282 @@ interface SharedNegotiation {
|
|
|
1858
1895
|
/** The width of one lane. The capacity of a link is its free width divided by this width, and 1 or more. */
|
|
1859
1896
|
readonly laneWidth: number;
|
|
1860
1897
|
}
|
|
1898
|
+
/**
|
|
1899
|
+
* The search of the corner graph of one route of `shared`, for the hooks of `SharedHooks`.
|
|
1900
|
+
* An index below `corners` is a corner of the graph. Each end of a way gets an index from `corners`, one for each place.
|
|
1901
|
+
*/
|
|
1902
|
+
interface SharedSearch {
|
|
1903
|
+
/** The graph of the route, without the inner edges of a frame. */
|
|
1904
|
+
readonly graph: Graph;
|
|
1905
|
+
/** The number of corners of the corner graph. */
|
|
1906
|
+
readonly corners: number;
|
|
1907
|
+
/** This function gives the key of the link between the indices `i` and `j`, for each order of the two. */
|
|
1908
|
+
link(i: number, j: number): number;
|
|
1909
|
+
/**
|
|
1910
|
+
* This function gives a shortest way of `w` through the corner graph, with its points and their indices, or `undefined`.
|
|
1911
|
+
* The function `cost` can change the cost of the link from corner `i` to corner `j`, of length `d`. It must give at least `floor` × `d`.
|
|
1912
|
+
*/
|
|
1913
|
+
find(w: Way, cost?: (i: number, j: number, d: number) => number, floor?: number): {
|
|
1914
|
+
seq: Point[];
|
|
1915
|
+
ids: number[];
|
|
1916
|
+
} | undefined;
|
|
1917
|
+
/** This function gives the free space across the link from corner `i` to corner `j` (`channelWidth`). The router keeps each width that it finds. */
|
|
1918
|
+
width(i: number, j: number): number;
|
|
1919
|
+
}
|
|
1920
|
+
/**
|
|
1921
|
+
* The hooks of a router that `shared` runs (WILD-023, RULE-021). The router `shared` itself has no hooks.
|
|
1922
|
+
* `order` gives the order of the ways before the first pass. `refine` changes the ways after the passes, before the runs.
|
|
1923
|
+
*/
|
|
1924
|
+
interface SharedHooks {
|
|
1925
|
+
readonly order?: (ways: readonly Way[], search: SharedSearch) => Way[];
|
|
1926
|
+
readonly refine?: (ways: readonly Way[], search: SharedSearch) => void;
|
|
1927
|
+
}
|
|
1928
|
+
/** A way of one edge through the corner graph. */
|
|
1929
|
+
interface Way {
|
|
1930
|
+
readonly edge: Edge;
|
|
1931
|
+
readonly key: string;
|
|
1932
|
+
readonly ps: Plug;
|
|
1933
|
+
readonly pt: Plug;
|
|
1934
|
+
/** The way through the corner graph, from the point out of the source plug to the point out of the target plug. */
|
|
1935
|
+
seq: Point[];
|
|
1936
|
+
/** The index of each point of `seq` in the corner graph. The two ends get an index after the corners, one for each place. */
|
|
1937
|
+
ids: number[];
|
|
1938
|
+
found: boolean;
|
|
1939
|
+
}
|
|
1861
1940
|
/**
|
|
1862
1941
|
* This function makes a router where edges share their ways (after Pupyrev, Nachmanson, Bereg and Holroyd, "Edge routing with ordered bundles").
|
|
1863
1942
|
* The edges go one by one through the corner graph. A link that an edge with the same key uses already costs less.
|
|
1864
1943
|
* Thus the edges of a key come together on common ways. Each stretch that several edges share has the same points in each route.
|
|
1865
1944
|
* The result gives each stretch as a run, with the order of its lanes.
|
|
1866
1945
|
*/
|
|
1867
|
-
export declare function sharedRouter(options: SharedOptions, negotiation?: SharedNegotiation): Router;
|
|
1946
|
+
export declare function sharedRouter(options: SharedOptions, negotiation?: SharedNegotiation, hooks?: SharedHooks): Router;
|
|
1947
|
+
/** The options of the router `annealing` (RULE-021: simulated annealing over candidate routes, with its rider WILD-028). */
|
|
1948
|
+
interface AnnealingOptions {
|
|
1949
|
+
/** The number of candidate ways of each edge, from 3 to 8. The default is 4. */
|
|
1950
|
+
readonly candidates: number;
|
|
1951
|
+
/** The cost of one crossing, in units of the median box side, from 0 to 20. The default is 4. */
|
|
1952
|
+
readonly crossing: number;
|
|
1953
|
+
/** The start temperature, in units of the median box side, from 0.1 to 10. The default is 1. */
|
|
1954
|
+
readonly temperature: number;
|
|
1955
|
+
/** The factor of the temperature after each sweep of the edges, from 0.9 to 0.99. The default is 0.95. */
|
|
1956
|
+
readonly cooling: number;
|
|
1957
|
+
/** The budget: the number of changes for each edge, from 20 to 200. The default is 50. */
|
|
1958
|
+
readonly budget: number;
|
|
1959
|
+
/** The seed of the random choices, a whole number from 0. The same seed gives the same routes. The default is 1. */
|
|
1960
|
+
readonly seed: number;
|
|
1961
|
+
}
|
|
1962
|
+
/** The default options of the router `annealing`. */
|
|
1963
|
+
export declare const ANNEALING_DEFAULTS: Readonly<AnnealingOptions>;
|
|
1964
|
+
/** The declarations of the options of the router `annealing` (RULE-021). */
|
|
1965
|
+
export declare const ANNEALING_SCHEMA: OptionSchema<AnnealingOptions>;
|
|
1966
|
+
/**
|
|
1967
|
+
* This function anneals the choice of one candidate way for each edge (RULE-021, after Davidson and Harel, 1996).
|
|
1968
|
+
* The candidates of an edge are its way in `shared` and its shortest way. Other candidates are the shortest ways when the links of earlier candidates cost 3 times more.
|
|
1969
|
+
* The energy is `(1 - 0.5) ink + 0.5 Σ L + crossing u X`: the cost of `shared` plus a cost for each crossing `X` between the ways of two edges.
|
|
1970
|
+
* A change takes one edge to another candidate. A worse change stays with the rational chance `1 / (1 + y + y^2 / 2)`, with `y = ΔE / T`.
|
|
1971
|
+
* The temperature falls by `cooling` after each sweep. The ways at the end are the ways of the lowest energy of the run.
|
|
1972
|
+
*/
|
|
1973
|
+
export declare function annealWays(ways: readonly Way[], search: SharedSearch, o: Readonly<AnnealingOptions>): void;
|
|
1974
|
+
/**
|
|
1975
|
+
* This function makes the router `annealing` (RULE-021 with its rider WILD-028). It is the router `shared`, then the annealing of `annealWays`.
|
|
1976
|
+
* Each candidate is a way through the corner graph, as in `shared`, so each one keeps the hard rules.
|
|
1977
|
+
*/
|
|
1978
|
+
export declare function annealingRouter(options: Partial<AnnealingOptions> & {
|
|
1979
|
+
readonly name: string;
|
|
1980
|
+
readonly rule?: GroupRule;
|
|
1981
|
+
readonly maxNodes?: number;
|
|
1982
|
+
}): Router;
|
|
1983
|
+
/**
|
|
1984
|
+
* The router strategy `annealing` (RULE-021), with the rule `byCollection` of `shared`. It is not a built-in router, so the benchmark and the hashes of `ROUTERS` do not change.
|
|
1985
|
+
* A screen module or a consumer adds it to a registry.
|
|
1986
|
+
*/
|
|
1987
|
+
export declare const annealingStrategy: Strategy<"router", AnnealingOptions>;
|
|
1988
|
+
/** The options of the router `canals` (NAT-004: canalization feeder trees to hubs). */
|
|
1989
|
+
interface CanalOptions {
|
|
1990
|
+
/** The exponent `mu` of the flux in the growth of a conductance, from 1 to 3 in steps of 0.5. A value above 1 gives a tree. The default is 2. */
|
|
1991
|
+
readonly mu: number;
|
|
1992
|
+
/** The largest number of updates of the conductances, from 30 to 150. The updates stop when the ways do not change for 3 updates. The default is 60. */
|
|
1993
|
+
readonly steps: number;
|
|
1994
|
+
/** The decay `r` of a conductance, from 0.5 to 2. The default is 1. */
|
|
1995
|
+
readonly decay: number;
|
|
1996
|
+
/** A hub has this number of edges of one key or more, from 2 to 8. The default is 3. */
|
|
1997
|
+
readonly minMembers: number;
|
|
1998
|
+
}
|
|
1999
|
+
/** The default options of the router `canals`. */
|
|
2000
|
+
export declare const CANAL_DEFAULTS: Readonly<CanalOptions>;
|
|
2001
|
+
/** The declarations of the options of the router `canals` (NAT-004). */
|
|
2002
|
+
export declare const CANAL_SCHEMA: OptionSchema<CanalOptions>;
|
|
2003
|
+
/**
|
|
2004
|
+
* This function gives `x^mu` for `x` from 0 to 1 and `mu` in steps of 0.5, with only `*` and `Math.sqrt`.
|
|
2005
|
+
* These operations are exact to the last bit on each platform, so a decision does not depend on the engine.
|
|
2006
|
+
*/
|
|
2007
|
+
export declare function halfPower(x: number, mu: number): number;
|
|
2008
|
+
/** A hub: a node, the key of its edges, and the ways of those edges. */
|
|
2009
|
+
interface CanalHub {
|
|
2010
|
+
readonly node: string;
|
|
2011
|
+
readonly key: string;
|
|
2012
|
+
readonly ways: readonly Way[];
|
|
2013
|
+
}
|
|
2014
|
+
/**
|
|
2015
|
+
* This function gives the hubs of the ways. In each key, the node with the most ends is a hub when it has `minMembers` edges or more.
|
|
2016
|
+
* Its edges leave the key, and the next hub of the key comes from the edges that stay. A tie goes to the smaller node id.
|
|
2017
|
+
* An edge with no key is in no hub.
|
|
2018
|
+
*/
|
|
2019
|
+
export declare function canalHubs(ways: readonly Way[], minMembers: number): CanalHub[];
|
|
2020
|
+
/**
|
|
2021
|
+
* This function grows a feeder tree to each hub (NAT-004, after the canalization of Sachs 1981 and Mitchison 1980).
|
|
2022
|
+
* Each member edge is a source of one unit of flux, and the hub is the sink. The flux of a link is the share of the members whose ways use it.
|
|
2023
|
+
* At each update, each conductance changes by `DT × (flux^mu - decay × D)`, and each member finds its way again with the cost `d / (1 + GAIN × D)`.
|
|
2024
|
+
* A link that another way of the key uses costs half, as in `shared`.
|
|
2025
|
+
* With `mu` above 1, a link with more flux grows faster, so the ways gather into one tree. The updates stop after `steps`, or when no way changes for 3 updates.
|
|
2026
|
+
*/
|
|
2027
|
+
export declare function canalWays(ways: readonly Way[], search: SharedSearch, options?: Partial<CanalOptions>): void;
|
|
2028
|
+
/**
|
|
2029
|
+
* This function makes the router `canals` (NAT-004). It is the router `shared`, then the feeder trees of `canalWays` to the hubs of each key.
|
|
2030
|
+
* The runs and the bundles come from the ways after the trees.
|
|
2031
|
+
*/
|
|
2032
|
+
export declare function canalRouter(options: Partial<CanalOptions> & {
|
|
2033
|
+
readonly name: string;
|
|
2034
|
+
readonly rule?: GroupRule;
|
|
2035
|
+
readonly maxNodes?: number;
|
|
2036
|
+
}): Router;
|
|
2037
|
+
/**
|
|
2038
|
+
* The router strategy `canals` (NAT-004), with the rule `byCollection` of `shared`. It is not a built-in router, so the benchmark and the hashes of `ROUTERS` do not change.
|
|
2039
|
+
* A screen module or a consumer adds it to a registry.
|
|
2040
|
+
*/
|
|
2041
|
+
export declare const canalStrategy: Strategy<"router", CanalOptions>;
|
|
2042
|
+
/** The options of the router `adam` (RULE-020: Adam with a seeded sample of pairs). */
|
|
2043
|
+
interface AdamOptions {
|
|
2044
|
+
/** The first step size `eta0`, in units of `clearance`, from 0.01 to 1. The step size falls to a tenth of it at the last step. The default is 0.1. */
|
|
2045
|
+
readonly eta: number;
|
|
2046
|
+
/** The number of other legs that each leg samples at each step, from 4 to 32. The default is 8. */
|
|
2047
|
+
readonly samples: number;
|
|
2048
|
+
/** The number of steps: the budget of the search, from 100 to 2000. The default is 200. */
|
|
2049
|
+
readonly steps: number;
|
|
2050
|
+
/** The seed of the samples, a whole number from 0. The same seed gives the same routes. The default is 1. */
|
|
2051
|
+
readonly seed: number;
|
|
2052
|
+
/** A leg nearer than this distance to another leg or to a box gets a push, from 4 to 32. The default is 8. */
|
|
2053
|
+
readonly clearance: number;
|
|
2054
|
+
}
|
|
2055
|
+
/** The default options of the router `adam`. */
|
|
2056
|
+
export declare const ADAM_DEFAULTS: Readonly<AdamOptions>;
|
|
2057
|
+
/** The declarations of the options of the router `adam` (RULE-020). */
|
|
2058
|
+
export declare const ADAM_SCHEMA: OptionSchema<AdamOptions>;
|
|
2059
|
+
/**
|
|
2060
|
+
* This function moves the free legs of the routes of `result` with Adam (RULE-020, after Kingma and Ba 2015, and the SGD layouts of Zheng, Pawar and Goodman 2019).
|
|
2061
|
+
* A leg is free when its two points are inside its route, and no other route, run or trunk holds them. The variable of a leg is a shift along its normal.
|
|
2062
|
+
* The energy of a leg is `Σ (1 - d / c)²` over a seeded sample of `samples` other legs nearer than `c`. The near boxes add the same term times 4.
|
|
2063
|
+
* A term `0.05 × (t / c)²` holds each leg near its first place. The step size falls from `eta` to a tenth of it, with only `+`, `*` and `/`.
|
|
2064
|
+
* A moved route goes back to its first points when it has more crossings than before, or a break of a hard rule.
|
|
2065
|
+
* When the output still has more crossings than the routes of `shared`, it is the routes of `shared`.
|
|
2066
|
+
*/
|
|
2067
|
+
export declare function adamRoutes(input: Graph, result: Result, options?: Partial<AdamOptions>): Result;
|
|
2068
|
+
/**
|
|
2069
|
+
* This function makes the router `adam` (RULE-020). It is the router `shared`, then the steps of Adam of `adamRoutes`.
|
|
2070
|
+
* The runs and the bundles of `shared` stay, because no point of a run or of a trunk moves.
|
|
2071
|
+
*/
|
|
2072
|
+
export declare function adamRouter(options: Partial<AdamOptions> & {
|
|
2073
|
+
readonly name: string;
|
|
2074
|
+
readonly rule?: GroupRule;
|
|
2075
|
+
readonly maxNodes?: number;
|
|
2076
|
+
}): Router;
|
|
2077
|
+
/**
|
|
2078
|
+
* The router strategy `adam` (RULE-020), with the rule `byCollection` of `shared`. It is not a built-in router, so the benchmark and the hashes of `ROUTERS` do not change.
|
|
2079
|
+
* A screen module or a consumer adds it to a registry.
|
|
2080
|
+
*/
|
|
2081
|
+
export declare const adamStrategy: Strategy<"router", AdamOptions>;
|
|
2082
|
+
/** The options of the router `reroute` (RULE-044: a corner graph with the prices of the rules, and rounds of rip-up and reroute). */
|
|
2083
|
+
interface RerouteOptions {
|
|
2084
|
+
/** The price of a link in a narrow channel, from 0 to 2. The default is 1. */
|
|
2085
|
+
readonly alpha: number;
|
|
2086
|
+
/** The price of each edge of another key on a link, from 0 to 2. The default is 0.5. */
|
|
2087
|
+
readonly beta: number;
|
|
2088
|
+
/** The discount of a link that an edge of the same key uses, from 0 to 2. The default is 0.5. */
|
|
2089
|
+
readonly gamma: number;
|
|
2090
|
+
/** The price of a turn, in units of `clearance`, from 0 to 2. The default is 0.25. */
|
|
2091
|
+
readonly tau: number;
|
|
2092
|
+
/** The number of rounds of rip-up and reroute, from 1 to 5. The default is 2. */
|
|
2093
|
+
readonly rounds: number;
|
|
2094
|
+
/** The share of the edges that each round rips up: the edges with the largest price over their direct length, from 0.05 to 0.3. The default is 0.15. */
|
|
2095
|
+
readonly q: number;
|
|
2096
|
+
/** A channel narrower than this width gets the price `alpha`, from 4 to 64. The default is 16. */
|
|
2097
|
+
readonly clearance: number;
|
|
2098
|
+
}
|
|
2099
|
+
/** The default options of the router `reroute`. */
|
|
2100
|
+
export declare const REROUTE_DEFAULTS: Readonly<RerouteOptions>;
|
|
2101
|
+
/** The declarations of the options of the router `reroute` (RULE-044). */
|
|
2102
|
+
export declare const REROUTE_SCHEMA: OptionSchema<RerouteOptions>;
|
|
2103
|
+
/** This function gives the number of turns of a way: the points where the direction changes by more than 1 degree. */
|
|
2104
|
+
export declare function turnsOf(seq: readonly Point[]): number;
|
|
2105
|
+
/**
|
|
2106
|
+
* This function rips up and reroutes the ways of `shared` (RULE-044, after the rip-up and reroute of PathFinder, McMurchie 1995).
|
|
2107
|
+
* The price factor of a link is `max(0.05, 1 + alpha × narrow + beta × others - gamma × same)`.
|
|
2108
|
+
* `narrow` is `max(0, 1 - width / clearance)`. `others` counts the edges of the other keys on the link.
|
|
2109
|
+
* `same` is 1 when an edge of the same key uses the link.
|
|
2110
|
+
* The price of a way is the sum of the price factor times the length of each link, plus `tau × clearance` for each turn.
|
|
2111
|
+
* Each round takes the share `q` of the ways with the largest price over their direct length. Each one gets a new search with the prices of the links.
|
|
2112
|
+
* The new way stays only when its price is lower. The search has no state for the turns, so only the comparison reads `tau`.
|
|
2113
|
+
*/
|
|
2114
|
+
export declare function rerouteWays(ways: readonly Way[], search: SharedSearch, options?: Partial<RerouteOptions>): void;
|
|
2115
|
+
/**
|
|
2116
|
+
* This function makes the router `reroute` (RULE-044). It is the router `shared`, then the rounds of rip-up and reroute of `rerouteWays`.
|
|
2117
|
+
* The runs and the bundles come from the ways after the rounds.
|
|
2118
|
+
*/
|
|
2119
|
+
export declare function rerouteRouter(options: Partial<RerouteOptions> & {
|
|
2120
|
+
readonly name: string;
|
|
2121
|
+
readonly rule?: GroupRule;
|
|
2122
|
+
readonly maxNodes?: number;
|
|
2123
|
+
}): Router;
|
|
2124
|
+
/**
|
|
2125
|
+
* The router strategy `reroute` (RULE-044), with the rule `byCollection` of `shared`. It is not a built-in router, so the benchmark and the hashes of `ROUTERS` do not change.
|
|
2126
|
+
* A screen module or a consumer adds it to a registry.
|
|
2127
|
+
*/
|
|
2128
|
+
export declare const rerouteStrategy: Strategy<"router", RerouteOptions>;
|
|
2129
|
+
/** The edges that go first: the edges with few good ways (`tight`), or the edges with many good ways (`loose`). */
|
|
2130
|
+
type TightFirst = "tight" | "loose";
|
|
2131
|
+
/** The values of `TightFirst`. */
|
|
2132
|
+
export declare const TIGHT_FIRSTS: readonly TightFirst[];
|
|
2133
|
+
/** The order of two edges with the same slack: by the edge id, or the longer edge first. */
|
|
2134
|
+
type TightTies = "id" | "length";
|
|
2135
|
+
/** The values of `TightTies`. */
|
|
2136
|
+
export declare const TIGHT_TIES: readonly TightTies[];
|
|
2137
|
+
/** The options of the router `tight` (WILD-023: tight edges first, after list scheduling by slack). */
|
|
2138
|
+
interface TightOptions {
|
|
2139
|
+
/** The cost factor of the links of the first way in the search of the second way, from 2 to 10. The default is 3. */
|
|
2140
|
+
readonly penalty: number;
|
|
2141
|
+
/**
|
|
2142
|
+
* The edges that go first. With `tight`, the default, an edge whose second way costs much more than its first way goes first.
|
|
2143
|
+
* With `loose`, the order turns around: the formula of the record, with the rising slack.
|
|
2144
|
+
*/
|
|
2145
|
+
readonly first: TightFirst;
|
|
2146
|
+
/** The order of two edges with the same slack. The default is `length`: the longer edge first, as in `shared`. */
|
|
2147
|
+
readonly ties: TightTies;
|
|
2148
|
+
}
|
|
2149
|
+
/** The default options of the router `tight`. */
|
|
2150
|
+
export declare const TIGHT_DEFAULTS: Readonly<TightOptions>;
|
|
2151
|
+
/** The declarations of the options of the router `tight` (WILD-023). */
|
|
2152
|
+
export declare const TIGHT_SCHEMA: OptionSchema<TightOptions>;
|
|
2153
|
+
/**
|
|
2154
|
+
* This function gives the slack of each way (WILD-023): `L2 / L1 - 1`. `L1` is the length of the shortest way.
|
|
2155
|
+
* `L2` is the cost of the shortest way when each link of the first way costs `penalty` times its length.
|
|
2156
|
+
* A way with no second way has the slack `penalty - 1`. A way with a second way of near-equal length has a slack near 0.
|
|
2157
|
+
*/
|
|
2158
|
+
export declare function waySlacks(ways: readonly Way[], search: SharedSearch, penalty: number): Map<Way, number>;
|
|
2159
|
+
/**
|
|
2160
|
+
* This function makes the router `tight` (WILD-023). It is the router `shared` with another order of the edges of each key.
|
|
2161
|
+
* With `first: tight`, the edges with the largest slack value go first: their second way costs much more, so they have few good ways.
|
|
2162
|
+
* The edges with many ways of near-equal cost go last. The keys keep the order of `shared`.
|
|
2163
|
+
*/
|
|
2164
|
+
export declare function tightRouter(options: Partial<TightOptions> & {
|
|
2165
|
+
readonly name: string;
|
|
2166
|
+
readonly rule?: GroupRule;
|
|
2167
|
+
readonly maxNodes?: number;
|
|
2168
|
+
}): Router;
|
|
2169
|
+
/**
|
|
2170
|
+
* The router strategy `tight` (WILD-023), with the rule `byCollection` of `shared`. It is not a built-in router, so the benchmark and the hashes of `ROUTERS` do not change.
|
|
2171
|
+
* A screen module or a consumer adds it to a registry.
|
|
2172
|
+
*/
|
|
2173
|
+
export declare const tightStrategy: Strategy<"router", TightOptions>;
|
|
1868
2174
|
/** The options of the router `attraction` (HWY-044 of the note on highways: negotiated attraction, PathFinder turned around). */
|
|
1869
2175
|
interface AttractionOptions {
|
|
1870
2176
|
/** The number of passes, from 1 to 10. Each pass after the first routes each edge again from no ways. The default is 3. */
|
|
@@ -2112,6 +2418,44 @@ export declare const SPREAD_DEFAULTS: Required<SpreadOptions>;
|
|
|
2112
2418
|
* The output has one entry for each edge with two known nodes, in the order of the edges.
|
|
2113
2419
|
*/
|
|
2114
2420
|
export declare function spreadEnds(input: PlugInput, options?: SpreadOptions): PlugPair[];
|
|
2421
|
+
/**
|
|
2422
|
+
* The order and the places of the plugs of one wall in the strategy `leaders` (EDA-041).
|
|
2423
|
+
* With `po`, the sort key of a far end in front of the wall is its place on the axis along the wall.
|
|
2424
|
+
* With `opo`, the plugs of a wall go at even places in the order of the keys of `spread`.
|
|
2425
|
+
*/
|
|
2426
|
+
export type WallLeader = "po" | "opo";
|
|
2427
|
+
/**
|
|
2428
|
+
* This function does the work of `spreadEnds`, and of the strategy `leaders` with the argument `leader`.
|
|
2429
|
+
* Without `leader`, it gives the plugs of `spread`.
|
|
2430
|
+
*/
|
|
2431
|
+
export declare function spreadWith(input: PlugInput, options?: SpreadOptions, leader?: WallLeader): PlugPair[];
|
|
2432
|
+
/**
|
|
2433
|
+
* The type of leader of a plug. With `s`, the order of a wall is the order of the angles of the far ends, as in `spread`.
|
|
2434
|
+
* With `po`, the stub leaves along the normal and turns once, so the order is the order of the far ends along the wall.
|
|
2435
|
+
* With `opo`, the plugs of a wall go at even places, in the order of the angles.
|
|
2436
|
+
*/
|
|
2437
|
+
export type LeaderType = "s" | "po" | "opo";
|
|
2438
|
+
/** The values of `LeaderType`. */
|
|
2439
|
+
export declare const LEADER_TYPES: readonly LeaderType[];
|
|
2440
|
+
/** The options of the plug strategy `leaders`. */
|
|
2441
|
+
export interface LeaderOptions {
|
|
2442
|
+
/** The type of leader. The default is `po`. */
|
|
2443
|
+
readonly leader: LeaderType;
|
|
2444
|
+
/** The least gap between two plugs of one wall, from 2 to 8. The default is 8. */
|
|
2445
|
+
readonly slotSpacing: number;
|
|
2446
|
+
/** The distance from a plug to a corner of its box, or a quarter of the wall when the wall is short. The default is 6. */
|
|
2447
|
+
readonly inset: number;
|
|
2448
|
+
/** The number of passes that sort each wall again by the new places of the far ends, from 0 to 4. The default is 2. */
|
|
2449
|
+
readonly rounds: number;
|
|
2450
|
+
}
|
|
2451
|
+
/** The defaults of the plug strategy `leaders`. */
|
|
2452
|
+
export declare const LEADER_DEFAULTS: Readonly<LeaderOptions>;
|
|
2453
|
+
/**
|
|
2454
|
+
* This function gives the plugs of the plug strategy `leaders` (EDA-041, after Bekos 2007). A fixed plug stays at its point, and a plug with a side stays on that side.
|
|
2455
|
+
* Each free plug goes on the side that faces the other end. The plugs of each wall keep at least `slotSpacing` between two of them.
|
|
2456
|
+
* The type of leader sets their order and their places. The output has one entry for each edge with two known nodes, in the order of the edges.
|
|
2457
|
+
*/
|
|
2458
|
+
export declare function leaderEnds(input: PlugInput, options?: Partial<LeaderOptions>): PlugPair[];
|
|
2115
2459
|
/** The options of `fixPorts`. */
|
|
2116
2460
|
export interface FixPortsOptions {
|
|
2117
2461
|
/** The options of the plug rule. The rule gets its `defaults` for each option that this object does not give. */
|
|
@@ -2195,6 +2539,346 @@ export declare function strategyKey(router: Strategy<"router">, step: Step): str
|
|
|
2195
2539
|
* The output has the board and the routes. The function does not examine the `maxNodes` of the router.
|
|
2196
2540
|
*/
|
|
2197
2541
|
export declare function runPipeline(graph: Graph, options: PipelineOptions): WholeOutput;
|
|
2542
|
+
/** The graph of the backbone of a level: the relative neighbourhood graph, or the Gabriel graph of the centers of the items. */
|
|
2543
|
+
export type VenationBackbone = "rng" | "gabriel";
|
|
2544
|
+
/** The values of `VenationBackbone`. */
|
|
2545
|
+
export declare const VENATION_BACKBONES: readonly VenationBackbone[];
|
|
2546
|
+
/** The options of the level strategy `venation` (NAT-016 of the nature notes): the options of `depths`, and the options of the backbone. */
|
|
2547
|
+
export interface VenationOptions extends DepthLevelOptions {
|
|
2548
|
+
/** The graph of the backbone. The relative neighbourhood graph has fewer links than the Gabriel graph. The default is `rng`. */
|
|
2549
|
+
readonly backbone: VenationBackbone;
|
|
2550
|
+
/** A later level link saves this share of the cost of a backbone link that an earlier level link uses, from 0 to 0.8. The default is 0.4. */
|
|
2551
|
+
readonly discount: number;
|
|
2552
|
+
/** A level link takes its way on the backbone only when that way is this many times its direct link or less. The default is 1.5. */
|
|
2553
|
+
readonly detour: number;
|
|
2554
|
+
/** A level with more items than this number keeps the links of `depths`. The default is 400. */
|
|
2555
|
+
readonly maxItems: number;
|
|
2556
|
+
}
|
|
2557
|
+
/** The default options of the level strategy `venation`. */
|
|
2558
|
+
export declare const VENATION_DEFAULTS: Readonly<VenationOptions>;
|
|
2559
|
+
/**
|
|
2560
|
+
* This function gives the links of the backbone of the points, as pairs of indices `i < j` (NAT-016).
|
|
2561
|
+
* With `rng`, the link `p q` exists when no third point `r` has `max(d(p, r), d(q, r)) < d(p, q)`.
|
|
2562
|
+
* With `gabriel`, the link exists when no third point is inside the circle with the diameter `p q`.
|
|
2563
|
+
*/
|
|
2564
|
+
export declare function backboneLinks(points: readonly Point[], backbone: VenationBackbone): [number, number][];
|
|
2565
|
+
/**
|
|
2566
|
+
* This function gives a way around the box `b`, inflated by `m`, from the point `a` to the point `c` of its boundary.
|
|
2567
|
+
* The way goes along the shorter side of the inflated box. It holds the two points at `m` out from `a` and `c`, and the corners between them.
|
|
2568
|
+
*/
|
|
2569
|
+
export declare function aroundBox(b: Box, m: number, a: Point, c: Point): Point[];
|
|
2570
|
+
/**
|
|
2571
|
+
* This function gives the links of one level along a closed venation backbone (NAT-016, after Runions and others, 2005).
|
|
2572
|
+
* The backbone links the items by their relative neighbourhood graph or their Gabriel graph. Each backbone link goes around the other items.
|
|
2573
|
+
* The level links go in the order of their counts, the largest first. Each one takes the cheapest way on the backbone, with the cost `L (1 - discount)` for a used backbone link.
|
|
2574
|
+
* The way goes around each item between its two ends. A way longer than `detour` times the direct link, or a direct backbone link, keeps the direct link.
|
|
2575
|
+
*/
|
|
2576
|
+
export declare function venationLinks(items: readonly LevelItem[], direct: readonly LevelLink[], o: Readonly<VenationOptions>): LevelLink[];
|
|
2577
|
+
/**
|
|
2578
|
+
* This function gives the zoom levels of the level strategy `venation` (NAT-016). The levels and their items are the levels of `depths`.
|
|
2579
|
+
* In each level with groups, the links take their ways along a closed venation backbone (`venationLinks`). The last level stays as in `depths`.
|
|
2580
|
+
*/
|
|
2581
|
+
export declare function venationLevels(input: LevelInput, options: Readonly<VenationOptions>): Level[];
|
|
2582
|
+
/** The growth of the width of a stroke with the number of its edges. */
|
|
2583
|
+
export type WidthScale = "linear" | "sqrt" | "log";
|
|
2584
|
+
/** The values of `WidthScale`. */
|
|
2585
|
+
export declare const WIDTH_SCALES: readonly WidthScale[];
|
|
2586
|
+
/** The options of the level strategy `detail`: the options of `depths`, and the limits of the collapse. */
|
|
2587
|
+
export interface DetailOptions extends DepthLevelOptions {
|
|
2588
|
+
/** Two parallel legs closer than this number of pixels on the screen become one stroke, from 0.5 to 4. The default is 3. */
|
|
2589
|
+
readonly pxMin: number;
|
|
2590
|
+
/** A stroke holds this number of edges or more, from 2 to 5. The default is 2. */
|
|
2591
|
+
readonly minCount: number;
|
|
2592
|
+
/** The width of a stroke of one edge, in pixels, from 1 to 4. The default is 1.5. A renderer reads it with `detailWidth`. */
|
|
2593
|
+
readonly w0: number;
|
|
2594
|
+
/** The growth of the width of a stroke with its count. The default is `log`. */
|
|
2595
|
+
readonly widthScale: WidthScale;
|
|
2596
|
+
}
|
|
2597
|
+
/** The default options of the level strategy `detail`. */
|
|
2598
|
+
export declare const DETAIL_DEFAULTS: Readonly<DetailOptions>;
|
|
2599
|
+
/**
|
|
2600
|
+
* This function gives the width of a stroke of `count` edges, in pixels (WILD-016). With `log`, it is `w0 × (1 + log2(count))`.
|
|
2601
|
+
* With `sqrt`, it is `w0 × sqrt(count)`. With `linear`, it is `w0 × count`.
|
|
2602
|
+
*/
|
|
2603
|
+
export declare function detailWidth(count: number, o?: Pick<DetailOptions, "w0" | "widthScale">): number;
|
|
2604
|
+
/**
|
|
2605
|
+
* This function collapses the legs of the links of one level that are closer than `tol` (WILD-016, EDA-038).
|
|
2606
|
+
* The legs of each axis go in clusters along the axis across it. The leg with the largest count of a cluster is its stroke, and each other leg moves onto it.
|
|
2607
|
+
* A cluster needs two legs whose projections overlap, and a count of `minCount` or more. A move that puts a leg through the box of an item does not happen.
|
|
2608
|
+
*/
|
|
2609
|
+
export declare function collapseLinks(items: readonly LevelItem[], links: readonly LevelLink[], tol: number, minCount: number): LevelLink[];
|
|
2610
|
+
/**
|
|
2611
|
+
* This function gives the zoom levels of the level strategy `detail` (WILD-016 with EDA-038). The levels and their items are the levels of `depths`.
|
|
2612
|
+
* A level with groups first shows at the scale `itemAt / size`, with `size` its median item (`pickLevel`). At that scale, `pxMin` pixels are `pxMin × size / itemAt` units.
|
|
2613
|
+
* The links of the level collapse their legs that are closer than that length (`collapseLinks`). The last level stays as in `depths`.
|
|
2614
|
+
*/
|
|
2615
|
+
export declare function detailLevels(input: LevelInput, options: Readonly<DetailOptions>): Level[];
|
|
2616
|
+
/** One setting of the portfolio: a name and the options of the pipeline. */
|
|
2617
|
+
export interface PortfolioSetting {
|
|
2618
|
+
readonly name: string;
|
|
2619
|
+
readonly pipeline: PipelineOptions;
|
|
2620
|
+
}
|
|
2621
|
+
/** The options of the whole strategy `board-portfolio` (WILD-045). */
|
|
2622
|
+
export interface BoardPortfolioOptions {
|
|
2623
|
+
/** The number of settings that the portfolio tries, from the start of its list, from 3 to 12. The default is 4. */
|
|
2624
|
+
readonly settings: number;
|
|
2625
|
+
/** The weight of the crossings (R1) in the score, from 0 to 4. The default is 1. */
|
|
2626
|
+
readonly crossings: number;
|
|
2627
|
+
/** The weight of the median detour (R5) in the score, from 0 to 4. The default is 1. */
|
|
2628
|
+
readonly detour: number;
|
|
2629
|
+
/** The weight of the ink saved (B1) in the score, from 0 to 4. The default is 1. */
|
|
2630
|
+
readonly ink: number;
|
|
2631
|
+
/**
|
|
2632
|
+
* The time budget in seconds, from 0 to 10. After the budget, no new setting starts. The first setting always runs.
|
|
2633
|
+
* The value 0, the default, sets no budget, so the output does not depend on the speed of the machine.
|
|
2634
|
+
*/
|
|
2635
|
+
readonly budget: number;
|
|
2636
|
+
}
|
|
2637
|
+
/** The default options of the strategy `board-portfolio`. */
|
|
2638
|
+
export declare const BOARD_PORTFOLIO_DEFAULTS: Readonly<BoardPortfolioOptions>;
|
|
2639
|
+
/** The measures of one setting on the board, and its output. */
|
|
2640
|
+
export interface PortfolioEntry {
|
|
2641
|
+
readonly name: string;
|
|
2642
|
+
readonly output: WholeOutput;
|
|
2643
|
+
readonly crossings: number;
|
|
2644
|
+
readonly detour: number;
|
|
2645
|
+
readonly ink: number;
|
|
2646
|
+
}
|
|
2647
|
+
/** The result of `boardPortfolio`: the output and the name of the pick. It also holds the measures of each setting with no break of a hard rule. */
|
|
2648
|
+
export interface BoardPortfolioRun {
|
|
2649
|
+
readonly output: WholeOutput;
|
|
2650
|
+
readonly pick: string;
|
|
2651
|
+
readonly entries: readonly PortfolioEntry[];
|
|
2652
|
+
}
|
|
2653
|
+
/** This function gives the rank of each value from 0 (the best) to 1 (the worst). Equal values get the mean of their ranks. One value gets 0. */
|
|
2654
|
+
export declare function rankShares(values: readonly number[], lowerIsBetter: boolean): number[];
|
|
2655
|
+
/**
|
|
2656
|
+
* This function runs the portfolio for one board (WILD-045, after Rice, 1976). It reads only the board and the outputs of its own settings.
|
|
2657
|
+
* A setting whose router or highway strategy has a node limit below the size of the board does not run.
|
|
2658
|
+
* A setting with a break of a hard rule does not count. The score of a setting is `Σ w_i × the rank share of measure_i` over the settings.
|
|
2659
|
+
* The measures are the crossings (R1), the median detour (R5) and the ink saved (B1). The least score wins, and a tie goes to the earlier setting.
|
|
2660
|
+
*/
|
|
2661
|
+
export declare function boardPortfolio(graph: Graph, list: readonly PortfolioSetting[], o: Readonly<BoardPortfolioOptions>, now?: () => number): BoardPortfolioRun;
|
|
2662
|
+
/** One rule of the curriculum: the crossings (R1), the lane separation (R12) or the crossing angle (R2). */
|
|
2663
|
+
export type CurriculumRule = "R1" | "R12" | "R2";
|
|
2664
|
+
/** The order in which the curriculum adds its rules. */
|
|
2665
|
+
export type CurriculumOrder = "R1-R12-R2" | "R12-R1-R2" | "R1-R2-R12";
|
|
2666
|
+
/** The values of `CurriculumOrder`. */
|
|
2667
|
+
export declare const CURRICULUM_ORDERS: readonly CurriculumOrder[];
|
|
2668
|
+
/** The options of the whole strategy `curriculum` (RULE-048). */
|
|
2669
|
+
export interface CurriculumOptions {
|
|
2670
|
+
/** The order in which the stages add the rules. The default is `R1-R12-R2`. */
|
|
2671
|
+
readonly order: CurriculumOrder;
|
|
2672
|
+
/** The number of passes over the edges in each stage, from 1 to 3. The default is 1. */
|
|
2673
|
+
readonly passes: number;
|
|
2674
|
+
/** The number of settings in the pool of routes, from the start of its list, from 2 to 3. The default is 3. */
|
|
2675
|
+
readonly settings: number;
|
|
2676
|
+
/** A new route has a detour of at most this value, or of its old route, from 1.5 to 4. The default is 2. */
|
|
2677
|
+
readonly detour: number;
|
|
2678
|
+
}
|
|
2679
|
+
/** The default options of the strategy `curriculum`. */
|
|
2680
|
+
export declare const CURRICULUM_DEFAULTS: Readonly<CurriculumOptions>;
|
|
2681
|
+
/**
|
|
2682
|
+
* This function gives the arc sine of `x` in radians, from -1 to 1. It is the algorithm of fdlibm, with only `+`, `*`, `/` and `Math.sqrt`.
|
|
2683
|
+
* These operations are exact to the last bit on each platform, so the result does not depend on the engine.
|
|
2684
|
+
*/
|
|
2685
|
+
export declare function arcsin(x: number): number;
|
|
2686
|
+
/**
|
|
2687
|
+
* This function gives the costs of the rules between two routes. R1 is the number of crossings.
|
|
2688
|
+
* R2 is the sum of `1 - θ / 90` over the crossings. θ is the crossing angle in degrees.
|
|
2689
|
+
* R12 is the overlap of the legs of `a` and `b` that are within 5 degrees of parallel. The two legs are nearer than 4 units.
|
|
2690
|
+
*/
|
|
2691
|
+
export declare function pairCosts(a: readonly Point[], b: readonly Point[]): Record<CurriculumRule, number>;
|
|
2692
|
+
/**
|
|
2693
|
+
* This function runs the whole strategy `curriculum` (RULE-048, after curriculum learning, Bengio 2009). The record has no energy solver yet (RULE-019).
|
|
2694
|
+
* Thus a pool of routes of fixed settings takes its place. Each edge can take its route from any setting of the pool.
|
|
2695
|
+
* The first answer is the first setting. Each stage adds one rule, in the order `order`. A pass of a stage visits the edges, the worst first.
|
|
2696
|
+
* An edge takes the route of the pool with the least cost of the new rule. That cost is lower, and the earlier rules do not get worse.
|
|
2697
|
+
* A route with a break of a hard rule is not in the pool. The output has the routes alone, with no runs, bundles or levels.
|
|
2698
|
+
*/
|
|
2699
|
+
export declare function curriculum(graph: Graph, list: readonly PortfolioSetting[], options?: Partial<CurriculumOptions>): WholeOutput;
|
|
2700
|
+
/** The features of one route, in order: crossings (R1), angle cost (R2), lane overlap (R12) over 20, detour minus 1 (R5), and bends over 2. */
|
|
2701
|
+
export declare const PREFERENCE_FEATURES: readonly string[];
|
|
2702
|
+
/**
|
|
2703
|
+
* The weights of the made-up panel that labels the made-up pairs, in the order of `PREFERENCE_FEATURES`.
|
|
2704
|
+
* The order comes from the studies of the readers of graphs: the crossings count most, then the bends and the length, then the angle (Purchase 1997, Ware, Purchase, Colpoys and McGill 2002).
|
|
2705
|
+
* The numbers are made up. They do not come from the screen or from a board.
|
|
2706
|
+
*/
|
|
2707
|
+
export declare const PREFERENCE_PANEL: readonly number[];
|
|
2708
|
+
/** The options of the fit of the preferences. */
|
|
2709
|
+
export interface PreferenceFit {
|
|
2710
|
+
/** The weight of the L2 term of the fit, from 0 to 1. The default is 0.01. */
|
|
2711
|
+
readonly l2: number;
|
|
2712
|
+
/** The seed of the made-up pairs. The default is 1. */
|
|
2713
|
+
readonly seed: number;
|
|
2714
|
+
/** The number of made-up pairs, from 50 to 1000. The default is 200. */
|
|
2715
|
+
readonly pairs: number;
|
|
2716
|
+
}
|
|
2717
|
+
/** The options of the whole strategy `preferences` (RULE-038). */
|
|
2718
|
+
export interface PreferenceOptions {
|
|
2719
|
+
/** The weight of the L2 term of the fit, from 0 to 1. The default is 0.01. */
|
|
2720
|
+
readonly l2: number;
|
|
2721
|
+
/** The number of passes over the edges, from 1 to 3. The default is 1. */
|
|
2722
|
+
readonly passes: number;
|
|
2723
|
+
/** The number of settings in the pool of routes, from the start of its list, from 2 to 3. The default is 3. */
|
|
2724
|
+
readonly settings: number;
|
|
2725
|
+
/** A new route has a detour of at most this value, or of its old route, from 1.5 to 4. The default is 2. */
|
|
2726
|
+
readonly detour: number;
|
|
2727
|
+
}
|
|
2728
|
+
/** The default options of the strategy `preferences`. */
|
|
2729
|
+
export declare const PREFERENCE_DEFAULTS: Readonly<PreferenceOptions>;
|
|
2730
|
+
/** One made-up pair: the features of two routes, and 1 when the panel prefers the first one. */
|
|
2731
|
+
export interface PreferencePair {
|
|
2732
|
+
readonly a: readonly number[];
|
|
2733
|
+
readonly b: readonly number[];
|
|
2734
|
+
readonly first: 0 | 1;
|
|
2735
|
+
}
|
|
2736
|
+
/** The result of the fit: the weights, the agreement with held-out pairs, and the source of the pairs. */
|
|
2737
|
+
export interface PreferenceModel {
|
|
2738
|
+
readonly weights: readonly number[];
|
|
2739
|
+
/** The share of 50 held-out made-up pairs where the weights agree with the panel. */
|
|
2740
|
+
readonly agreement: number;
|
|
2741
|
+
readonly source: string;
|
|
2742
|
+
}
|
|
2743
|
+
/**
|
|
2744
|
+
* This function gives a smooth step from 0 to 1, a stand-in for the logistic function with only `+`, `*`, `/` and `Math.abs`.
|
|
2745
|
+
* It is `0.5 + 0.5 z / (1 + |z|)`. These operations are exact to the last bit on each platform.
|
|
2746
|
+
*/
|
|
2747
|
+
export declare function softStep(z: number): number;
|
|
2748
|
+
/**
|
|
2749
|
+
* This function gives `count` made-up pairs, with the labels of the made-up panel `PREFERENCE_PANEL` and a noise.
|
|
2750
|
+
* The pairs come from the seed alone. They do not come from a board.
|
|
2751
|
+
*/
|
|
2752
|
+
export declare function madeUpPairs(count: number, seed: number): PreferencePair[];
|
|
2753
|
+
/** This function gives the share of the pairs where the weights `w` prefer the same route as the panel. */
|
|
2754
|
+
export declare function agreementOf(w: readonly number[], pairs: readonly PreferencePair[]): number;
|
|
2755
|
+
/**
|
|
2756
|
+
* This function fits the weights of the rules to made-up pairs (RULE-038, a Bradley-Terry model, after Bradley and Terry 1952).
|
|
2757
|
+
* The probability that a reader prefers `a` to `b` is `softStep(u(a) - u(b))`, with `u(x) = -w · f(x)`. The fit takes 400 steps of the gradient of the score.
|
|
2758
|
+
* An L2 term `l2 × |w|²` keeps the weights small. A weight below 0 becomes 0. The weights are scaled so that their sum is the number of features.
|
|
2759
|
+
* The held-out pairs come from the seed plus 7919. The pairs do not come from the screen or from a board.
|
|
2760
|
+
*/
|
|
2761
|
+
export declare function fitPreferences(options?: Partial<PreferenceFit>): PreferenceModel;
|
|
2762
|
+
/**
|
|
2763
|
+
* This function runs the whole strategy `preferences` (RULE-038). It fits the weights of the rules to made-up pairs (`fitPreferences`).
|
|
2764
|
+
* Each edge can take its route from any setting of the pool. The first answer is the first setting.
|
|
2765
|
+
* A pass visits the edges in order. An edge takes the route of the pool with the least weighted cost, when that cost is lower than the cost of its route.
|
|
2766
|
+
* The cost is the weighted sum of the features of the route against the routes of the other edges. A route with a break of a hard rule is not in the pool.
|
|
2767
|
+
* The output has the routes alone, with no runs, bundles or levels.
|
|
2768
|
+
*/
|
|
2769
|
+
export declare function preferences(graph: Graph, list: readonly PortfolioSetting[], options?: Partial<PreferenceOptions>): WholeOutput;
|
|
2770
|
+
/** The search of the whole strategy `fireflies`: the firefly algorithm, or the artificial bee colony. */
|
|
2771
|
+
export type SwarmSearch = "firefly" | "bees";
|
|
2772
|
+
/** The values of `SwarmSearch`. */
|
|
2773
|
+
export declare const SWARM_SEARCHES: readonly SwarmSearch[];
|
|
2774
|
+
/** The options of the whole strategy `fireflies` (NAT-047). */
|
|
2775
|
+
export interface FireflyOptions {
|
|
2776
|
+
/** The search. The default is `firefly`. */
|
|
2777
|
+
readonly search: SwarmSearch;
|
|
2778
|
+
/** The budget: the largest number of different settings that the search routes, from 4 to 40. The default is 12. */
|
|
2779
|
+
readonly budget: number;
|
|
2780
|
+
/** The number of fireflies or food sources, from 4 to 20. The default is 6. */
|
|
2781
|
+
readonly colony: number;
|
|
2782
|
+
/** The absorption `gamma` of the light of a firefly, from 0.01 to 10. The default is 1. */
|
|
2783
|
+
readonly gamma: number;
|
|
2784
|
+
/** The size `alpha` of the random step of a firefly, as a share of the range, from 0.01 to 0.5. The default is 0.2. */
|
|
2785
|
+
readonly alpha: number;
|
|
2786
|
+
/** The number of tries with no gain, after which a scout bee leaves a food source, from 10 to 100. The default is 10. */
|
|
2787
|
+
readonly limit: number;
|
|
2788
|
+
/** The seed of the search, a whole number from 0. The same seed gives the same routes. The default is 1. */
|
|
2789
|
+
readonly seed: number;
|
|
2790
|
+
}
|
|
2791
|
+
/** The default options of the strategy `fireflies`. */
|
|
2792
|
+
export declare const FIREFLY_DEFAULTS: Readonly<FireflyOptions>;
|
|
2793
|
+
/**
|
|
2794
|
+
* This function gives the attraction of a firefly at the distance `r`: `BETA0 / (1 + u + u² / 2)` with `u = gamma × r²`.
|
|
2795
|
+
* It is a rational stand-in for `BETA0 × exp(-u)`, with only `+`, `*` and `/`, so it is exact to the last bit on each platform.
|
|
2796
|
+
*/
|
|
2797
|
+
export declare function attraction(gamma: number, r2: number): number;
|
|
2798
|
+
/** One setting of the router `shared`: the option `discount` and the option `margin`. */
|
|
2799
|
+
export interface SwarmSetting {
|
|
2800
|
+
readonly discount: number;
|
|
2801
|
+
readonly margin: number;
|
|
2802
|
+
}
|
|
2803
|
+
/** This function gives the setting of a point of the unit square, on the grid of the search. */
|
|
2804
|
+
export declare function settingAt(x: number, y: number): SwarmSetting;
|
|
2805
|
+
/** One setting that the search routed: its score and its output. A setting with a break of a hard rule has the score `Infinity`. */
|
|
2806
|
+
export interface SwarmEntry {
|
|
2807
|
+
readonly setting: SwarmSetting;
|
|
2808
|
+
readonly score: number;
|
|
2809
|
+
readonly output: WholeOutput;
|
|
2810
|
+
}
|
|
2811
|
+
/** The result of `fireflies`: the output, the best setting and each setting that the search routed, in order. */
|
|
2812
|
+
export interface SwarmRun {
|
|
2813
|
+
readonly output: WholeOutput;
|
|
2814
|
+
readonly best: SwarmSetting;
|
|
2815
|
+
readonly entries: readonly SwarmEntry[];
|
|
2816
|
+
}
|
|
2817
|
+
/**
|
|
2818
|
+
* This function gives the score of an output on its board. A lower score is better.
|
|
2819
|
+
* The score is `crossings / edges + (median detour - 1) - ink saved`. A break of a hard rule gives `Infinity`.
|
|
2820
|
+
*/
|
|
2821
|
+
export declare function swarmScore(output: WholeOutput): number;
|
|
2822
|
+
/**
|
|
2823
|
+
* This function runs the whole strategy `fireflies` (NAT-047, after the firefly algorithm of Yang 2008 and the bee colony of Karaboga 2005).
|
|
2824
|
+
* It searches the options `discount` and `margin` of the router `router` on the board, on a grid of 20 × 8 settings.
|
|
2825
|
+
* The first firefly or food source is the default setting, so the score of the output is not worse than the score of the default.
|
|
2826
|
+
* A firefly moves toward each brighter one by `attraction(gamma, r²)` of the distance, plus a seeded step of size `alpha`.
|
|
2827
|
+
* A bee tries `v = x + phi (x - x_k)` in one dimension, and a scout takes a new seeded place after `limit` tries with no gain.
|
|
2828
|
+
* The search stops after `budget` different settings, or after 60 rounds. It reads only the board and the outputs of its own settings.
|
|
2829
|
+
*/
|
|
2830
|
+
export declare function fireflies(graph: Graph, router: Strategy<"router">, options?: Partial<FireflyOptions>): SwarmRun;
|
|
2831
|
+
/** The value of the loads of the edges of a board that the pick reads: the median, the quantile 0.95 or the mean. */
|
|
2832
|
+
export type TracingQuantile = "q50" | "q95" | "mean";
|
|
2833
|
+
/** The values of `TracingQuantile`. */
|
|
2834
|
+
export declare const TRACING_QUANTILES: readonly TracingQuantile[];
|
|
2835
|
+
/** The weights of the places to choose on the way of one edge (WILD-057). */
|
|
2836
|
+
export interface TracingWeights {
|
|
2837
|
+
/** The weight of a crossing, from 0 to 4. The default is 1. */
|
|
2838
|
+
readonly crossing: number;
|
|
2839
|
+
/** The weight of a merge or a split where the edge is not an outer lane, from 0 to 4. The default is 2. */
|
|
2840
|
+
readonly merge: number;
|
|
2841
|
+
/** The weight of a bend, from 0 to 4. The default is 0.5. */
|
|
2842
|
+
readonly bend: number;
|
|
2843
|
+
}
|
|
2844
|
+
/** The default weights of the tracing load, as the record gives them. */
|
|
2845
|
+
export declare const TRACING_WEIGHTS: Readonly<TracingWeights>;
|
|
2846
|
+
/** The options of the whole strategy `tracing` (WILD-057). */
|
|
2847
|
+
export interface TracingOptions extends TracingWeights {
|
|
2848
|
+
/** The number of settings that the strategy tries, from the start of its list, from 1 to 12. The default is 4. */
|
|
2849
|
+
readonly settings: number;
|
|
2850
|
+
/** The value of the loads that the pick reads. The default is `q95`. */
|
|
2851
|
+
readonly quantile: TracingQuantile;
|
|
2852
|
+
}
|
|
2853
|
+
/** The default options of the strategy `tracing`. */
|
|
2854
|
+
export declare const TRACING_DEFAULTS: Readonly<TracingOptions>;
|
|
2855
|
+
/**
|
|
2856
|
+
* This function gives the tracing load of each edge of a result (WILD-057, after the tracing tasks of Ware, Purchase, Colpoys and McGill 2002).
|
|
2857
|
+
* The load is `T(e) = crossing × crossings + merge × (merges and splits where e is not an outer lane) + bend × bends`.
|
|
2858
|
+
* A shared run where the edge is not an outer lane gives one merge and one split. Such a bundle gives one split.
|
|
2859
|
+
* A bend is a turn of more than 1 degree. The measure is W4 of MEAS3.
|
|
2860
|
+
*/
|
|
2861
|
+
export declare function tracingLoads(result: Result, weights?: Partial<TracingWeights>): Map<string, number>;
|
|
2862
|
+
/** This function gives a value of a list of loads: the median, the quantile 0.95 by the nearest rank, or the mean. An empty list gives 0. */
|
|
2863
|
+
export declare function tracingValue(loads: Iterable<number>, quantile: TracingQuantile): number;
|
|
2864
|
+
/** The tracing loads of one setting on the board: the value that the pick reads, and the median for a tie. */
|
|
2865
|
+
export interface TracingEntry {
|
|
2866
|
+
readonly name: string;
|
|
2867
|
+
readonly value: number;
|
|
2868
|
+
readonly median: number;
|
|
2869
|
+
}
|
|
2870
|
+
/** The result of `tracing`: the output, the name of the pick and the loads of each setting with no break of a hard rule. */
|
|
2871
|
+
export interface TracingRun {
|
|
2872
|
+
readonly output: WholeOutput;
|
|
2873
|
+
readonly pick: string;
|
|
2874
|
+
readonly entries: readonly TracingEntry[];
|
|
2875
|
+
}
|
|
2876
|
+
/**
|
|
2877
|
+
* This function runs the whole strategy `tracing` (WILD-057). It runs the first `settings` settings of `list` on the board.
|
|
2878
|
+
* A setting with a break of a hard rule, or above its node limit, does not count. The setting with the least tracing load wins.
|
|
2879
|
+
* A tie goes to the least median load, then to the earlier setting. It reads only the board and the outputs of its own settings.
|
|
2880
|
+
*/
|
|
2881
|
+
export declare function tracing(graph: Graph, list: readonly PortfolioSetting[], options?: Partial<TracingOptions>): TracingRun;
|
|
2198
2882
|
/** A broken hard rule. A correct router has none. */
|
|
2199
2883
|
export interface Violation {
|
|
2200
2884
|
readonly rule: "complete" | "ends-at-plugs" | "fixed-plugs" | "no-pass-through" | "counts-sum" | "link-ends" | "bundle-trunk" | "run-shared";
|
|
@@ -5213,6 +5897,153 @@ export declare function interchangeCandidates(spines: readonly (readonly Point[]
|
|
|
5213
5897
|
* A change costs `changeCost` units. The interchanges that the most edges use stay, up to `interchanges`.
|
|
5214
5898
|
*/
|
|
5215
5899
|
export declare function interchangePlan(input: HighwayInput, o: Readonly<InterchangeOptions>): HighwayPlan;
|
|
5900
|
+
/** One point of a balancing-factor tree. */
|
|
5901
|
+
interface FanPoint {
|
|
5902
|
+
readonly point: Point;
|
|
5903
|
+
/** The index of the point before, toward the root. The root has -1. */
|
|
5904
|
+
parent: number;
|
|
5905
|
+
/** The length of the tree from the root to this point. */
|
|
5906
|
+
pl: number;
|
|
5907
|
+
/** A new branch can join the tree at this point, and on the link from its parent. A plug of a target is not open. */
|
|
5908
|
+
readonly open: boolean;
|
|
5909
|
+
}
|
|
5910
|
+
/** The result of `balancedFan`: the points of the tree, and the index of the last point of the route of each target. */
|
|
5911
|
+
interface Fan {
|
|
5912
|
+
readonly points: readonly FanPoint[];
|
|
5913
|
+
readonly leaf: readonly number[];
|
|
5914
|
+
}
|
|
5915
|
+
/** The rule that picks one tree on the front: the knee of the chord, or the least weighted sum. */
|
|
5916
|
+
type KneeRule = "chord" | "weights";
|
|
5917
|
+
/** The values of `KneeRule`. */
|
|
5918
|
+
export declare const KNEE_RULES: readonly KneeRule[];
|
|
5919
|
+
/** The options of the highway strategy `knee` (NAT-018 of the nature notes, on the trees of NAT-017). */
|
|
5920
|
+
interface KneeOptions {
|
|
5921
|
+
/** The number of points of the sweep of the balancing factor, from 5 to 21. The default is 11. */
|
|
5922
|
+
readonly sweep: number;
|
|
5923
|
+
/** The rule that picks one tree on the front. The default is `chord`. */
|
|
5924
|
+
readonly rule: KneeRule;
|
|
5925
|
+
/** The weight of the ink in the rule `weights`, from 0 to 1. The rest of the weight goes to the path length. The default is 0.5. */
|
|
5926
|
+
readonly ink: number;
|
|
5927
|
+
/** An edge rides the tree only when its path in the tree is this many times its first route or less. The default is 1.5. */
|
|
5928
|
+
readonly detour: number;
|
|
5929
|
+
/** A stretch of a tree with fewer edges than this number is not a highway. The default is 2. */
|
|
5930
|
+
readonly minSize: number;
|
|
5931
|
+
}
|
|
5932
|
+
/** The default options of the strategy `knee`. */
|
|
5933
|
+
export declare const KNEE_DEFAULTS: Readonly<KneeOptions>;
|
|
5934
|
+
/** One tree of the sweep: its balancing factor, its ink `L`, the sum of its path lengths `S`, and the tree. */
|
|
5935
|
+
interface KneeTree {
|
|
5936
|
+
readonly bf: number;
|
|
5937
|
+
readonly ink: number;
|
|
5938
|
+
readonly paths: number;
|
|
5939
|
+
readonly fan: Fan;
|
|
5940
|
+
}
|
|
5941
|
+
/**
|
|
5942
|
+
* This function gives the index of the tree that the rule picks on the front of the trees (NAT-018).
|
|
5943
|
+
* The front holds the trees that no other tree beats on the ink and on the path lengths. The two values go to the range from 0 to 1.
|
|
5944
|
+
* With `chord`, the pick is the tree of the front farthest from the line between the two ends of the front.
|
|
5945
|
+
* With `weights`, the pick is the tree with the least `ink × L + (1 - ink) × S`. A tie goes to the earlier tree.
|
|
5946
|
+
*/
|
|
5947
|
+
export declare function kneeOf(trees: readonly Pick<KneeTree, "ink" | "paths">[], rule: KneeRule, ink: number): number;
|
|
5948
|
+
/**
|
|
5949
|
+
* This function gives the highways of the knee trees (NAT-018). The edges from one source node get one tree. Its root is the out point of the plug nearest the center of the targets.
|
|
5950
|
+
* A sweep of the balancing factor of NAT-017 gives trees from the least ink to the most direct paths.
|
|
5951
|
+
* The tree at the knee of the front of ink and path lengths is the pick. Each edge takes its path in the tree, when that path is short enough.
|
|
5952
|
+
* The stretches of the tree that two edges or more share become highways.
|
|
5953
|
+
*/
|
|
5954
|
+
export declare function kneePlan(input: HighwayInput, o: Readonly<KneeOptions>): HighwayPlan;
|
|
5955
|
+
/** The end of a ride that the price moves: the exit, the entry, or both by half. */
|
|
5956
|
+
type BalanceEnd = "exit" | "entry" | "both";
|
|
5957
|
+
/** The values of `BalanceEnd`. */
|
|
5958
|
+
export declare const BALANCE_ENDS: readonly BalanceEnd[];
|
|
5959
|
+
/** The options of the highway strategy `balance` (EDA-017). */
|
|
5960
|
+
interface BalanceOptions {
|
|
5961
|
+
/** The target of the stretch of an edge: its route on the plan over its route alone, from 1.1 to 2. The default is 1.2. */
|
|
5962
|
+
readonly tau: number;
|
|
5963
|
+
/** The number of updates of the prices, from 5 to 30. The default is 5. */
|
|
5964
|
+
readonly iterations: number;
|
|
5965
|
+
/** The end of a ride that the price moves. The default is `exit`. */
|
|
5966
|
+
readonly end: BalanceEnd;
|
|
5967
|
+
/** The plan that the strategy balances. The default is `shared-ways`. */
|
|
5968
|
+
readonly from: HighwayBase;
|
|
5969
|
+
}
|
|
5970
|
+
/** The default options of the strategy `balance`. */
|
|
5971
|
+
export declare const BALANCE_DEFAULTS: Readonly<BalanceOptions>;
|
|
5972
|
+
/**
|
|
5973
|
+
* This function gives the plan of the highway strategy `balance` (EDA-017, after the Lagrange relaxation of the stretch).
|
|
5974
|
+
* The stretch of an edge is its route on the plan over its route alone, as the gate `stretch` measures it.
|
|
5975
|
+
* At each update, an edge with a stretch above `tau` adds `stretch - tau` to its price. Each of its rides keeps the share `1 - price` of its first length.
|
|
5976
|
+
* A ride shorter than the margin leaves the plan. The updates stop when no edge is above `tau`.
|
|
5977
|
+
*/
|
|
5978
|
+
export declare function balancePlan(input: HighwayInput, options?: Partial<BalanceOptions>): HighwayPlan;
|
|
5979
|
+
/** This function balances the plan `first` of the graph, as `balancePlan` does. It reads all the options except `from`. */
|
|
5980
|
+
export declare function balanceOf(graph: Graph, first: HighwayPlan, options?: Partial<BalanceOptions>): HighwayPlan;
|
|
5981
|
+
/** The place of the header in the gap before the row: near the row, or near the feed node. */
|
|
5982
|
+
type ManifoldSide = "near" | "far";
|
|
5983
|
+
/** The values of `ManifoldSide`. */
|
|
5984
|
+
export declare const MANIFOLD_SIDES: readonly ManifoldSide[];
|
|
5985
|
+
/** The options of the highway strategy `manifolds` (WILD-036). */
|
|
5986
|
+
interface ManifoldOptions {
|
|
5987
|
+
/** A manifold has this number of taps or more, from 3 to 8. The default is 3. */
|
|
5988
|
+
readonly kMin: number;
|
|
5989
|
+
/** The nodes of one row have centers in a band of this many median box heights, from 0.5 to 2. The default is 1. */
|
|
5990
|
+
readonly band: number;
|
|
5991
|
+
/** The place of the header in the gap before the row. The default is `near`. */
|
|
5992
|
+
readonly side: ManifoldSide;
|
|
5993
|
+
/** A tap stays on the manifold only when its way is this many times the direct line or less, from 1 to 3. The default is 1.5. */
|
|
5994
|
+
readonly detour: number;
|
|
5995
|
+
/** The plan of the edges that are not on a manifold. The default is `shared-ways`. */
|
|
5996
|
+
readonly from: HighwayBase;
|
|
5997
|
+
}
|
|
5998
|
+
/** The default options of the strategy `manifolds`. */
|
|
5999
|
+
export declare const MANIFOLD_DEFAULTS: Readonly<ManifoldOptions>;
|
|
6000
|
+
/**
|
|
6001
|
+
* This function gives the plan of the highway strategy `manifolds` (WILD-036, after the headers of pipes and of bus bars).
|
|
6002
|
+
* A fan of `kMin` edges or more from one node to a row of nodes gets a straight header in the gap before the row.
|
|
6003
|
+
* Each edge of the fan joins the header at the feed point, in line with the center of the node. It leaves the header at its tap, in line with the center of its far node.
|
|
6004
|
+
* A tap whose way is more than `detour` times the direct line leaves the manifold. Each edge is on one manifold at most. The other edges keep the plan `from`.
|
|
6005
|
+
*/
|
|
6006
|
+
export declare function manifoldPlan(input: HighwayInput, options?: Partial<ManifoldOptions>): HighwayPlan;
|
|
6007
|
+
/** The rule that splits the targets of a tip in two: by count, by weight, or at the widest gap of the angles. */
|
|
6008
|
+
type BronchialSplit = "count" | "weight" | "gap";
|
|
6009
|
+
/** The values of `BronchialSplit`. */
|
|
6010
|
+
export declare const BRONCHIAL_SPLITS: readonly BronchialSplit[];
|
|
6011
|
+
/** The options of the highway strategy `bronchial` (NAT-019 of the nature notes). */
|
|
6012
|
+
interface BronchialOptions {
|
|
6013
|
+
/**
|
|
6014
|
+
* The rule of the split. With `count`, each half gets half of the targets. With `weight`, the two halves get near-equal sums of the distances from the tip.
|
|
6015
|
+
* With `gap`, the cut goes at the widest gap between the angles of the targets. The default is `count`.
|
|
6016
|
+
*/
|
|
6017
|
+
readonly split: BronchialSplit;
|
|
6018
|
+
/** The share of the distance to the center of the targets that a branch grows, from 0.3 to 0.7. The default is 0.5. */
|
|
6019
|
+
readonly share: number;
|
|
6020
|
+
/** A set with this number of targets or fewer stops the splits, from 1 to 3. Each of its targets gets its own way from the tip. The default is 1. */
|
|
6021
|
+
readonly smallest: number;
|
|
6022
|
+
/** An edge rides the tree only when its path in the tree is this many times its first route or less. The default is 1.5. */
|
|
6023
|
+
readonly detour: number;
|
|
6024
|
+
/** A stretch of a tree with fewer edges than this number is not a highway. The default is 2. */
|
|
6025
|
+
readonly minSize: number;
|
|
6026
|
+
}
|
|
6027
|
+
/** The default options of the strategy `bronchial`. */
|
|
6028
|
+
export declare const BRONCHIAL_DEFAULTS: Readonly<BronchialOptions>;
|
|
6029
|
+
/**
|
|
6030
|
+
* This function gives the diamond angle of the direction `(dx, dy)`: a value from 0 to 4 that grows with the angle, with no trigonometry.
|
|
6031
|
+
* The value 0 is the direction of the positive x axis.
|
|
6032
|
+
*/
|
|
6033
|
+
export declare function diamondAngle(dx: number, dy: number): number;
|
|
6034
|
+
/**
|
|
6035
|
+
* This function splits the targets of a tip in two halves (NAT-019). The targets go in the order of their angles around the tip.
|
|
6036
|
+
* The order starts after the widest gap of the angles, so each half is a sector. The rule of `split` then cuts the order in two.
|
|
6037
|
+
*/
|
|
6038
|
+
export declare function splitTargets(tip: Point, targets: readonly Point[], ids: readonly number[], split: BronchialSplit): [number[], number[]];
|
|
6039
|
+
/**
|
|
6040
|
+
* This function gives the highways of the bronchial trees (NAT-019, after Kitaoka and others, 1999). The edges from one source node get one tree.
|
|
6041
|
+
* The root of a tree is the out point of the plug nearest the center of the targets.
|
|
6042
|
+
* From the tip, the tree grows a share of the way to the center of its targets. Then it splits the targets in two and grows a branch for each half.
|
|
6043
|
+
* A branch that hits a box grows half as far, or not at all. A small set of targets gets its own ways from the tip, through the corner graph.
|
|
6044
|
+
* Each edge takes its path in the tree when that path is short enough, and the stretches that two edges or more share become highways.
|
|
6045
|
+
*/
|
|
6046
|
+
export declare function bronchialPlan(input: HighwayInput, o: Readonly<BronchialOptions>): HighwayPlan;
|
|
5216
6047
|
/** The options of the highway strategy `search` (HWY-059 of the note on highways). */
|
|
5217
6048
|
interface SearchOptions {
|
|
5218
6049
|
/** The plan where the search starts. The default is `corridors`. */
|
|
@@ -5966,6 +6797,53 @@ interface SidePlugOptions {
|
|
|
5966
6797
|
/** The largest number of places that the search tries on each side. The default is 16. */
|
|
5967
6798
|
readonly most?: number;
|
|
5968
6799
|
}
|
|
6800
|
+
/** The edges that can join a trunk: only the edges with the key of the trunk, or each edge. */
|
|
6801
|
+
type SlotKeys = "same" | "any";
|
|
6802
|
+
/** The values of `SlotKeys`. */
|
|
6803
|
+
export declare const SLOT_KEYS: readonly SlotKeys[];
|
|
6804
|
+
/** The options of the highway strategy `slots` (RULE-047). */
|
|
6805
|
+
interface SlotOptions {
|
|
6806
|
+
/** The weight `k` of the pull, from 0.25 to 8. The default is 2. The name is not `k`, because `follow` reads `k` as an option of its ways. */
|
|
6807
|
+
readonly pull: number;
|
|
6808
|
+
/** The reach `r` of the pull, in units, from 8 to 64. A route point farther than this distance from a trunk gets no pull. The default is 24. */
|
|
6809
|
+
readonly reach: number;
|
|
6810
|
+
/** The distance between two lanes of a trunk, in units, from 2 to 8. The default is 4. */
|
|
6811
|
+
readonly laneSpacing: number;
|
|
6812
|
+
/** The largest stretch of a route after it joins a trunk: its new length over its first length, from 1.05 to 2. The default is 1.25. */
|
|
6813
|
+
readonly maxStretch: number;
|
|
6814
|
+
/** The edges that can join a trunk. The default is `same`. */
|
|
6815
|
+
readonly keys: SlotKeys;
|
|
6816
|
+
/** The plan that gives the trunks. The default is `shared-ways`. */
|
|
6817
|
+
readonly from: HighwayBase;
|
|
6818
|
+
}
|
|
6819
|
+
/** The default options of the strategy `slots`. */
|
|
6820
|
+
export declare const SLOT_DEFAULTS: Readonly<SlotOptions>;
|
|
6821
|
+
/** One possible join of an edge to a trunk: the trunk, the places on its spine, the pull and the detour. */
|
|
6822
|
+
interface SlotJoin {
|
|
6823
|
+
readonly highway: number;
|
|
6824
|
+
readonly on: number;
|
|
6825
|
+
readonly off: number;
|
|
6826
|
+
/** The pull energy that the join removes: `k × Σ w(d) × (d - slot)² × step / r²`, in units of length. */
|
|
6827
|
+
readonly pull: number;
|
|
6828
|
+
/** The length that the join adds to the route, as an estimate. */
|
|
6829
|
+
readonly detour: number;
|
|
6830
|
+
}
|
|
6831
|
+
/**
|
|
6832
|
+
* This function gives the best join of one route to the trunk `h`, or `undefined`.
|
|
6833
|
+
* The longest row of samples nearer than `reach` to the spine is the part of the route that the trunk pulls.
|
|
6834
|
+
* The slot of the new lane is at `laneSpacing × (lanes + 1) / 2` from the spine. The weight is `w(d) = max(0, 1 - d / r)`.
|
|
6835
|
+
*/
|
|
6836
|
+
export declare function slotJoin(route: readonly Point[], h: Highway, index: number, o: Readonly<SlotOptions>): SlotJoin | undefined;
|
|
6837
|
+
/**
|
|
6838
|
+
* This function gives the plan of the highway strategy `slots` (RULE-047, after the pull of force-directed edge bundling, Holten and van Wijk 2009).
|
|
6839
|
+
* The trunks are the highways of the plan `from`. Each edge outside the plan gets a pull toward the slot of a new lane of a trunk near its first route.
|
|
6840
|
+
* The energy of the pull is `E = k Σ w(d_i) ‖x_i - slot_i‖²` over the samples of the route, with `w(d) = max(0, 1 - d / r)`.
|
|
6841
|
+
* The edge joins the trunk when the pull is larger than the length that the join adds, and the stretch stays under `maxStretch`.
|
|
6842
|
+
* The edge takes the trunk with the largest gain, on the outer lane. An edge that does not fit stays off the trunks.
|
|
6843
|
+
*/
|
|
6844
|
+
export declare function slotPlan(input: HighwayInput, options?: Partial<SlotOptions>): HighwayPlan;
|
|
6845
|
+
/** This function adds the joins of `slotPlan` to the plan `first` of the graph. It reads all the options except `from`. A join that breaks a hard rule after `follow` leaves the plan. */
|
|
6846
|
+
export declare function slotsOf(graph: Graph, first: HighwayPlan, routes: ReadonlyMap<string, readonly Point[]>, options?: Partial<SlotOptions>): HighwayPlan;
|
|
5969
6847
|
/** The options of a router strategy: the options of its router, without the name and the limit of the benchmark. */
|
|
5970
6848
|
export type RouterPreset<O> = Omit<O, "name" | "maxNodes">;
|
|
5971
6849
|
/** The built-in router strategies, in the order of the benchmark. They route as the routers of `ROUTERS`. */
|
|
@@ -6110,6 +6988,11 @@ export declare const highwayStrategies: {
|
|
|
6110
6988
|
readonly streets: Strategy<"highway", StreetOptions>;
|
|
6111
6989
|
readonly search: Strategy<"highway", SearchOptions>;
|
|
6112
6990
|
readonly interchanges: Strategy<"highway", InterchangeOptions>;
|
|
6991
|
+
readonly knee: Strategy<"highway", KneeOptions>;
|
|
6992
|
+
readonly bronchial: Strategy<"highway", BronchialOptions>;
|
|
6993
|
+
readonly balance: Strategy<"highway", BalanceOptions>;
|
|
6994
|
+
readonly manifolds: Strategy<"highway", ManifoldOptions>;
|
|
6995
|
+
readonly slots: Strategy<"highway", SlotOptions>;
|
|
6113
6996
|
readonly "corridors+breakeven": Strategy<"highway", CorridorOptions & BreakEvenOptions>;
|
|
6114
6997
|
readonly "corridors+stretch": Strategy<"highway", CorridorOptions & StretchOptions>;
|
|
6115
6998
|
readonly "corridors+ambiguity": Strategy<"highway", CorridorOptions & AmbiguityGuardOptions>;
|
|
@@ -6122,17 +7005,35 @@ export declare const plugStrategies: {
|
|
|
6122
7005
|
readonly side: Strategy<"plugs", SidePlugOptions>;
|
|
6123
7006
|
readonly justify: Strategy<"plugs", JustifyOptions>;
|
|
6124
7007
|
readonly spread: Strategy<"plugs", SpreadOptions>;
|
|
7008
|
+
readonly leaders: Strategy<"plugs", LeaderOptions>;
|
|
6125
7009
|
};
|
|
6126
7010
|
/** The built-in level rules: the strategies of the step `levels`. The router `sections` makes its zoom levels with its option `level`. */
|
|
6127
7011
|
export declare const levelStrategies: {
|
|
6128
7012
|
readonly depths: Strategy<"levels", DepthLevelOptions>;
|
|
7013
|
+
readonly venation: Strategy<"levels", VenationOptions>;
|
|
7014
|
+
readonly detail: Strategy<"levels", DetailOptions>;
|
|
6129
7015
|
};
|
|
7016
|
+
/**
|
|
7017
|
+
* The fixed list of settings of the whole strategy `board-portfolio` (WILD-045), in order. The option `settings` takes the first ones.
|
|
7018
|
+
* The list holds routers and highway strategies with their defaults. It comes from the catalog of the strategies, not from a fit to the screen.
|
|
7019
|
+
*/
|
|
7020
|
+
export declare const BOARD_PORTFOLIO_SETTINGS: readonly PortfolioSetting[];
|
|
7021
|
+
/**
|
|
7022
|
+
* The pool of routes of the whole strategy `curriculum` (RULE-048), in order: the routers of the base of the screen. The first one gives the first answer.
|
|
7023
|
+
* The option `settings` takes the first ones.
|
|
7024
|
+
*/
|
|
7025
|
+
export declare const CURRICULUM_POOL: readonly PortfolioSetting[];
|
|
6130
7026
|
/**
|
|
6131
7027
|
* The built-in whole strategies: the strategies of the step `whole`. The strategy `pipeline` runs one strategy of each step, as the demo of the site does.
|
|
6132
7028
|
* Without options, it routes the graph with the router `corners`.
|
|
6133
7029
|
*/
|
|
6134
7030
|
export declare const wholeStrategies: {
|
|
6135
7031
|
readonly pipeline: Strategy<"whole", PipelineOptions>;
|
|
7032
|
+
readonly "board-portfolio": Strategy<"whole", BoardPortfolioOptions>;
|
|
7033
|
+
readonly curriculum: Strategy<"whole", CurriculumOptions>;
|
|
7034
|
+
readonly preferences: Strategy<"whole", PreferenceOptions>;
|
|
7035
|
+
readonly fireflies: Strategy<"whole", FireflyOptions>;
|
|
7036
|
+
readonly tracing: Strategy<"whole", TracingOptions>;
|
|
6136
7037
|
};
|
|
6137
7038
|
/** The built-in strategies of each step, in order. A consumer adds its own: `createRegistry([...BUILT_IN_STRATEGIES, mine])`. */
|
|
6138
7039
|
export declare const BUILT_IN_STRATEGIES: readonly AnyStrategy[];
|
|
@@ -6686,8 +7587,27 @@ export declare const SCREEN_V2_HELD_OUT: readonly number[];
|
|
|
6686
7587
|
* This set does not change. The tests compare it with the files in `corpus/screen-v2`.
|
|
6687
7588
|
*/
|
|
6688
7589
|
export declare const SCREEN_V2: ScreenSet;
|
|
7590
|
+
/** The member seeds of each family of `screen-v3` that the split `default` holds out. */
|
|
7591
|
+
export declare const SCREEN_V3_HELD_OUT: readonly number[];
|
|
7592
|
+
/**
|
|
7593
|
+
* The screen set `screen-v3` (CORPUS-FAMILIES): the 15 families of `HIGHWAYS_FAMILIES`, each with the 10 members 0 to 9, thus 150 boards.
|
|
7594
|
+
* The first 6 families are the families of `screen-v2` with their seeds. Thus their boards are the boards of `screen-v2`, under the ids of `screen-v3`.
|
|
7595
|
+
* The 9 new families cover frames with rows, a long chain, a wide fan-out and two hubs.
|
|
7596
|
+
* They also cover uneven sizes, thin bars, long edges, short edges and a complete bipartite part.
|
|
7597
|
+
*
|
|
7598
|
+
* The manifest declares 10 inputs for each family. The split `default` holds out the members 7 to 9 of each family.
|
|
7599
|
+
* This set does not change. A new family goes into a new set. The tests compare it with the files in `corpus/screen-v3`.
|
|
7600
|
+
*/
|
|
7601
|
+
export declare const SCREEN_V3: ScreenSet;
|
|
6689
7602
|
/**
|
|
6690
|
-
*
|
|
7603
|
+
* This function gives the power of the sign test over `families` families at the level `level`.
|
|
7604
|
+
* The power is the least count of families on one side that passes.
|
|
7605
|
+
* A family set without ties and with that count or more on one side passes the two-sided exact sign test, with the p below `level`.
|
|
7606
|
+
* The function gives `undefined` when no count passes, for example for 5 families or fewer at the level 0.05.
|
|
7607
|
+
*/
|
|
7608
|
+
export declare function signTestPower(families: number, level?: number): number | undefined;
|
|
7609
|
+
/**
|
|
7610
|
+
* The screen sets by id. `screen-v1`, its larger version `screen-v2` (CORPUS-SEEDS) and `screen-v3` with 15 families (CORPUS-FAMILIES) have the boards of the screen.
|
|
6691
7611
|
* `exact-v1` has small boards with a known optimum (MEAS2). `exact-v1-bounds` has larger boards with bounds (EXACT-BOUNDS).
|
|
6692
7612
|
*/
|
|
6693
7613
|
export declare const SCREEN_SETS: Readonly<Record<string, ScreenSet>>;
|
|
@@ -7253,8 +8173,37 @@ export declare const MANY_GROUPS: HighwaysFamily;
|
|
|
7253
8173
|
* Its generator record always has `cols`, `rows` and `long`, as the screen sets of today. It has `reach` only away from its default.
|
|
7254
8174
|
*/
|
|
7255
8175
|
export declare const PACKED_GRID: HighwaysFamily;
|
|
8176
|
+
/**
|
|
8177
|
+
* The family `frame-rows`: cards with full-width rows, as INTERIOR-ROUTE takes them. Each row has a fixed plug on the east wall and on the west wall of its card.
|
|
8178
|
+
* The links join a plug of a card to a plug of another card. An inner edge joins a row to a plug of its own card. The default has no inner edge.
|
|
8179
|
+
*/
|
|
8180
|
+
export declare const FRAME_ROWS: HighwaysFamily;
|
|
8181
|
+
/** The family `pipeline`: a long chain of stages in rows that turn at each end, with some links that skip stages. */
|
|
8182
|
+
export declare const PIPELINE: HighwaysFamily;
|
|
8183
|
+
/** The family `fan-out`: one large hub in the middle, with a link to each leaf on the square rings around it. */
|
|
8184
|
+
export declare const FAN_OUT: HighwaysFamily;
|
|
8185
|
+
/** The family `two-hubs`: two tall hubs with many nodes between them. Each such node has a link from each hub. A few nodes of one hub are on its far side. */
|
|
8186
|
+
export declare const TWO_HUBS: HighwaysFamily;
|
|
8187
|
+
/** The family `uneven-sizes`: a few large boxes and many small boxes in shelves, in a random order. Many edges end on a large box. */
|
|
8188
|
+
export declare const UNEVEN_SIZES: HighwaysFamily;
|
|
8189
|
+
/** The family `thin-bars`: long thin bars in lanes, as a timeline or the rows of a table. The links join bars of lanes near each other. */
|
|
8190
|
+
export declare const THIN_BARS: HighwaysFamily;
|
|
8191
|
+
/** The family `sparse-long`: few nodes far apart on a large board, and edges that go to far targets. */
|
|
8192
|
+
export declare const SPARSE_LONG: HighwaysFamily;
|
|
8193
|
+
/** The family `local-mesh`: a grid of small nodes with many short edges, each to a node of the 8 nodes around it. */
|
|
8194
|
+
export declare const LOCAL_MESH: HighwaysFamily;
|
|
8195
|
+
/** The values of the dimension `layout` of `bipartite`. */
|
|
8196
|
+
export declare const BIPARTITE_LAYOUTS: readonly string[];
|
|
8197
|
+
/**
|
|
8198
|
+
* The family `bipartite`: a complete bipartite part, with dense crossings that no plan can remove, and other nodes with random links.
|
|
8199
|
+
* At 3 nodes or more on each side, the part has no drawing without crossings.
|
|
8200
|
+
*/
|
|
8201
|
+
export declare const BIPARTITE: HighwaysFamily;
|
|
8202
|
+
/** The 9 families of CORPUS-FAMILIES, in the order of `screen-v3`. */
|
|
8203
|
+
export declare const COVERAGE_FAMILIES: readonly HighwaysFamily[];
|
|
7256
8204
|
/**
|
|
7257
8205
|
* The corpus families of highways, in the order of the screen sets. Each family at its defaults makes the board of its screen family.
|
|
8206
|
+
* The first 6 families are the families of `screen-v1` and `screen-v2`. The 9 families of `COVERAGE_FAMILIES` follow them (CORPUS-FAMILIES).
|
|
7258
8207
|
* An import registers nothing. A host makes a registry with `createFamilyRegistry(HIGHWAYS_FAMILIES)`, or with the lists of other engines too.
|
|
7259
8208
|
*/
|
|
7260
8209
|
export declare const HIGHWAYS_FAMILIES: readonly HighwaysFamily[];
|
|
@@ -7652,5 +8601,5 @@ export declare const PORTFOLIO_SETS: Readonly<Record<`${PortfolioRule}|${Portfol
|
|
|
7652
8601
|
* The default stretch order is `sifting`, the best order of the screen. The option `stretchOrder` selects `consensus` or `periphery`.
|
|
7653
8602
|
*/
|
|
7654
8603
|
export declare const sharedStretchStrategy: Strategy<"router", RouterPreset<SharedOptions>>;
|
|
7655
|
-
export { type AdvectionSettings, type AmbiguityGuardOptions, type ArcOptions, type ArcSource, type AreaOptions, type AreaWidth, type AttractionOptions, type Biclique, type BreakEvenOptions, type BundleLine, type BundleOrder, type CandidateSource, type CellStep, type ClothoidOptions, type ConfluentOptions, type ConsensusLinkage, type ConsensusOptions, type CornersOptions, type CorpusDimension, type CorpusFamily, type CorridorOptions, type Crossbar, type CrossbarOptions, type CubuOptions, type CurveSpace, type CutObjective, type CutOptions, DEFAULT_RNG, type DensityGrid, type DensityImage, type DensityKernel, type DensitySource, type DiffusionOptions, type DimensionValues, type DividedOptions, type EdgeDistance, type EdgeEnds, type EdgeGroup, type EdgeLengths, type EdgePathOptions, type EdgePlugs, type ExerciseEvidence, type FamilyRegistry, type FdebOptions, type FieldEnd, type FlowClusterOptions, type FlowFieldOptions, type FollowOptions, type FrameOptions, type FrechetBundle, type FrechetOptions, type FreeLine, type GapOptions, type Gate, type GenerateContext, type GroupScope, type GroupSpine, type GroupedOptions, type GrowthOptions, type GrowthOrder, type HashOptions, type HdbscanOptions, type HierarchyGroups, type HierarchyOptions, type Highway, type HighwayBase, type HighwayInput, type HighwayMember, type HighwayOptions, type HighwayPlan, type HoughOptions, type HoughPeak, type HubAllocation, type HubArcOptions, type HubCandidates, type HysteresisOptions, type Interchange, type InterchangeBase, type InterchangeOptions, type JogStyle, type KdAxis, type KdLine, type KdOptions, type KdeebOptions, type KeyOptions, type KeyedWay, type KeysOptions, type LaneCurve, type LanesOptions, type LevelHighwayOptions, type LinkCommunityOptions, type LinkEdge, type Linkage, type MeetOptions, type Member, type MemberStatus, type MemberTrace, type MeshOptions, type MingleOptions, type MlsFit, type MlsebOptions, type ModuleRule, type NestedOptions, type NodeKey, type NodeLinks, type OdCellOptions, type OutputGroup, type Outside, type PHubOptions, type ParamValue, type PathStep, type PickSpec, type Portfolio, type PortfolioKey, type PortfolioLevel, type PortfolioOptions, type PortfolioPick, type PortfolioTrace, type PowerOptions, type QuickBundlesOptions, RECORD_EPS, type ResistanceOptions, type Ridge, type RidgeOptions, type RidgeSource, type RoadClassOptions, type RoomBends, type RoundedOptions, type RouteCrossing, type RouteSegment, type SbebOptions, type ScaleCluster, type ScaleSpaceOptions, type SearchMove, type SearchOptions, type SectionsOptions, type SelectCandidate, type SelectLevel, type SelectOptions, type Selection, type ShapeSkeleton, type ShareCost, type ShareMerge, type ShareOrder, type SharedNegotiation, type SharedOptions, type SharedStretchOptions, type SharedWaysOptions, type SkeletonGroups, type SkeletonTarget, type SmoothOptions, type SnapLine, type SnapMember, type SnapOptions, type SoftKeyOptions, type SpectralOptions, type SpiralNode, type SpiralOptions, type SplineOptions, type SplitCell, type StableIdOptions, type SteinerGroup, type SteinerMethod, type SteinerMetric, type SteinerOptions, type StreetEdge, type StreetOptions, type StreetRide, type StreetSource, type StretchOptions, type StubEnds, type StubOptions, type TerritoryOptions, type TerritoryPoints, type TraceOptions, type TraclusOptions, type TrafficRule, type TrunkFan, type TrunkSplit, type TrunksOptions, type WeiszfeldOptions, type WspdOptions, type Zip, type ZipLimits, type ZipperOptions, canonicalJson, compareMeasure, createFamilyRegistry, dimensionAt, dimensionUnit, exercised, familyKind, levelsOf, minEffectOf, outputGroups, outputHash, paramProblem, pickMoves, portfolio, randomInt, selectBest, sha256Hex };
|
|
8604
|
+
export { type AdamOptions, type AdvectionSettings, type AmbiguityGuardOptions, type AnnealingOptions, type ArcOptions, type ArcSource, type AreaOptions, type AreaWidth, type AttractionOptions, type BalanceEnd, type BalanceOptions, type Biclique, type BreakEvenOptions, type BronchialOptions, type BronchialSplit, type BundleLine, type BundleOrder, type CanalHub, type CanalOptions, type CandidateSource, type CellStep, type ClothoidOptions, type ConfluentOptions, type ConsensusLinkage, type ConsensusOptions, type CornersOptions, type CorpusDimension, type CorpusFamily, type CorridorOptions, type Crossbar, type CrossbarOptions, type CubuOptions, type CurveSpace, type CutObjective, type CutOptions, DEFAULT_RNG, type DensityGrid, type DensityImage, type DensityKernel, type DensitySource, type DiffusionOptions, type DimensionValues, type DividedOptions, type EdgeDistance, type EdgeEnds, type EdgeGroup, type EdgeLengths, type EdgePathOptions, type EdgePlugs, type ExerciseEvidence, type FamilyRegistry, type FdebOptions, type FieldEnd, type FlowClusterOptions, type FlowFieldOptions, type FollowOptions, type FrameOptions, type FrechetBundle, type FrechetOptions, type FreeLine, type GapOptions, type Gate, type GenerateContext, type GroupScope, type GroupSpine, type GroupedOptions, type GrowthOptions, type GrowthOrder, type GutterEdge, type GutterOptions, type HashOptions, type HdbscanOptions, type HierarchyGroups, type HierarchyOptions, type Highway, type HighwayBase, type HighwayInput, type HighwayMember, type HighwayOptions, type HighwayPlan, type HoughOptions, type HoughPeak, type HubAllocation, type HubArcOptions, type HubCandidates, type HysteresisOptions, type InnerMode, type Interchange, type InterchangeBase, type InterchangeOptions, type JogStyle, type KdAxis, type KdLine, type KdOptions, type KdeebOptions, type KeyOptions, type KeyedWay, type KeysOptions, type KneeOptions, type KneeRule, type KneeTree, type LaneCurve, type LanesOptions, type LevelHighwayOptions, type LinkCommunityOptions, type LinkEdge, type Linkage, type ManifoldOptions, type ManifoldSide, type MeetOptions, type Member, type MemberStatus, type MemberTrace, type MeshOptions, type MingleOptions, type MlsFit, type MlsebOptions, type ModuleRule, type NestedOptions, type NodeKey, type NodeLinks, type OdCellOptions, type OutputGroup, type Outside, type PHubOptions, type ParamValue, type PathStep, type PickSpec, type Portfolio, type PortfolioKey, type PortfolioLevel, type PortfolioOptions, type PortfolioPick, type PortfolioTrace, type PowerOptions, type QuickBundlesOptions, RECORD_EPS, type RerouteOptions, type ResistanceOptions, type Ridge, type RidgeOptions, type RidgeSource, type RoadClassOptions, type RoomBends, type RoundedOptions, type RouteCrossing, type RouteSegment, type SbebOptions, type ScaleCluster, type ScaleSpaceOptions, type SearchMove, type SearchOptions, type SectionsOptions, type SelectCandidate, type SelectLevel, type SelectOptions, type Selection, type ShapeSkeleton, type ShareCost, type ShareMerge, type ShareOrder, type SharedHooks, type SharedNegotiation, type SharedOptions, type SharedSearch, type SharedStretchOptions, type SharedWaysOptions, type SkeletonGroups, type SkeletonTarget, type SlotJoin, type SlotKeys, type SlotOptions, type SmoothOptions, type SnapLine, type SnapMember, type SnapOptions, type SoftKeyOptions, type SpectralOptions, type SpiralNode, type SpiralOptions, type SplineOptions, type SplitCell, type StableIdOptions, type SteinerGroup, type SteinerMethod, type SteinerMetric, type SteinerOptions, type StreetEdge, type StreetOptions, type StreetRide, type StreetSource, type StretchOptions, type StubEnds, type StubOptions, type TerritoryOptions, type TerritoryPoints, type TightFirst, type TightOptions, type TightTies, type TraceOptions, type TraclusOptions, type TrafficRule, type TrunkFan, type TrunkSplit, type TrunksOptions, type WeiszfeldOptions, type WspdOptions, type Zip, type ZipLimits, type ZipperOptions, canonicalJson, compareMeasure, createFamilyRegistry, dimensionAt, dimensionUnit, exercised, familyKind, levelsOf, minEffectOf, outputGroups, outputHash, paramProblem, pickMoves, portfolio, randomInt, selectBest, sha256Hex };
|
|
7656
8605
|
//# sourceMappingURL=index.d.ts.map
|