@pilates/core 1.0.1 → 2.0.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/dist/algorithm/cache.d.ts +7 -19
- package/dist/algorithm/cache.d.ts.map +1 -1
- package/dist/algorithm/cache.js +31 -27
- package/dist/algorithm/cache.js.map +1 -1
- package/dist/algorithm/index.d.ts +31 -0
- package/dist/algorithm/index.d.ts.map +1 -1
- package/dist/algorithm/index.js +105 -13
- package/dist/algorithm/index.js.map +1 -1
- package/dist/algorithm/round.d.ts +13 -0
- package/dist/algorithm/round.d.ts.map +1 -1
- package/dist/algorithm/round.js +33 -16
- package/dist/algorithm/round.js.map +1 -1
- package/dist/algorithm/spineless/classify.d.ts +47 -0
- package/dist/algorithm/spineless/classify.d.ts.map +1 -0
- package/dist/algorithm/spineless/classify.js +109 -0
- package/dist/algorithm/spineless/classify.js.map +1 -0
- package/dist/algorithm/spineless/field-id-pool.d.ts +28 -0
- package/dist/algorithm/spineless/field-id-pool.d.ts.map +1 -0
- package/dist/algorithm/spineless/field-id-pool.js +35 -0
- package/dist/algorithm/spineless/field-id-pool.js.map +1 -0
- package/dist/algorithm/spineless/flex-grammar.d.ts +394 -0
- package/dist/algorithm/spineless/flex-grammar.d.ts.map +1 -0
- package/dist/algorithm/spineless/flex-grammar.js +2509 -0
- package/dist/algorithm/spineless/flex-grammar.js.map +1 -0
- package/dist/algorithm/spineless/grammar.d.ts +156 -0
- package/dist/algorithm/spineless/grammar.d.ts.map +1 -0
- package/dist/algorithm/spineless/grammar.js +145 -0
- package/dist/algorithm/spineless/grammar.js.map +1 -0
- package/dist/algorithm/spineless/layout.d.ts +167 -0
- package/dist/algorithm/spineless/layout.d.ts.map +1 -0
- package/dist/algorithm/spineless/layout.js +893 -0
- package/dist/algorithm/spineless/layout.js.map +1 -0
- package/dist/algorithm/spineless/order-maintenance.bench.d.ts +25 -0
- package/dist/algorithm/spineless/order-maintenance.bench.d.ts.map +1 -0
- package/dist/algorithm/spineless/order-maintenance.bench.js +78 -0
- package/dist/algorithm/spineless/order-maintenance.bench.js.map +1 -0
- package/dist/algorithm/spineless/order-maintenance.d.ts +201 -0
- package/dist/algorithm/spineless/order-maintenance.d.ts.map +1 -0
- package/dist/algorithm/spineless/order-maintenance.js +300 -0
- package/dist/algorithm/spineless/order-maintenance.js.map +1 -0
- package/dist/algorithm/spineless/priority-queue.bench.d.ts +17 -0
- package/dist/algorithm/spineless/priority-queue.bench.d.ts.map +1 -0
- package/dist/algorithm/spineless/priority-queue.bench.js +57 -0
- package/dist/algorithm/spineless/priority-queue.bench.js.map +1 -0
- package/dist/algorithm/spineless/priority-queue.d.ts +73 -0
- package/dist/algorithm/spineless/priority-queue.d.ts.map +1 -0
- package/dist/algorithm/spineless/priority-queue.js +149 -0
- package/dist/algorithm/spineless/priority-queue.js.map +1 -0
- package/dist/algorithm/spineless/runtime.d.ts +292 -0
- package/dist/algorithm/spineless/runtime.d.ts.map +1 -0
- package/dist/algorithm/spineless/runtime.js +609 -0
- package/dist/algorithm/spineless/runtime.js.map +1 -0
- package/dist/algorithm/spineless/style-dirty.d.ts +65 -0
- package/dist/algorithm/spineless/style-dirty.d.ts.map +1 -0
- package/dist/algorithm/spineless/style-dirty.js +75 -0
- package/dist/algorithm/spineless/style-dirty.js.map +1 -0
- package/dist/dirty-flags.d.ts +30 -0
- package/dist/dirty-flags.d.ts.map +1 -0
- package/dist/dirty-flags.js +35 -0
- package/dist/dirty-flags.js.map +1 -0
- package/dist/index.d.ts +4 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +9 -1
- package/dist/index.js.map +1 -1
- package/dist/inspect.d.ts +27 -0
- package/dist/inspect.d.ts.map +1 -0
- package/dist/inspect.js +61 -0
- package/dist/inspect.js.map +1 -0
- package/dist/layout-pool.d.ts +49 -0
- package/dist/layout-pool.d.ts.map +1 -0
- package/dist/layout-pool.js +75 -0
- package/dist/layout-pool.js.map +1 -0
- package/dist/node.d.ts +20 -3
- package/dist/node.d.ts.map +1 -1
- package/dist/node.js +63 -42
- package/dist/node.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"layout.js","sourceRoot":"","sources":["../../../src/algorithm/spineless/layout.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Microbenchmark for the Order Maintenance data structure.
|
|
3
|
+
*
|
|
4
|
+
* This is the **kill switch** for Phase 5 (Spineless Traversal): if OM
|
|
5
|
+
* operations cost more than a small constant per op at 1k-10k node scale,
|
|
6
|
+
* the algorithmic novelty of Spineless Traversal won't pay off in pure JS.
|
|
7
|
+
*
|
|
8
|
+
* Targets (Phase 5 viability criteria):
|
|
9
|
+
* - `compare`: < 200ns per op at 10k nodes (it's the hot path; the
|
|
10
|
+
* Spineless priority queue calls it on every insert/extract).
|
|
11
|
+
* - `insertAfter`: < 5µs amortized at 10k nodes (rarer, called when
|
|
12
|
+
* the dependency graph adds nodes — typically only during tree
|
|
13
|
+
* construction or large mutations).
|
|
14
|
+
*
|
|
15
|
+
* The naive impl is O(N) per insert, so it will exceed the insertAfter
|
|
16
|
+
* target at scale. That's expected — the Bender et al. amortized O(1)
|
|
17
|
+
* impl is what hits the target. We measure naive here as a baseline so
|
|
18
|
+
* we can show the speedup when Bender lands.
|
|
19
|
+
*
|
|
20
|
+
* Run with: `tsx packages/core/src/algorithm/spineless/order-maintenance.bench.ts`
|
|
21
|
+
*
|
|
22
|
+
* @internal
|
|
23
|
+
*/
|
|
24
|
+
export {};
|
|
25
|
+
//# sourceMappingURL=order-maintenance.bench.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"order-maintenance.bench.d.ts","sourceRoot":"","sources":["../../../src/algorithm/spineless/order-maintenance.bench.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Microbenchmark for the Order Maintenance data structure.
|
|
3
|
+
*
|
|
4
|
+
* This is the **kill switch** for Phase 5 (Spineless Traversal): if OM
|
|
5
|
+
* operations cost more than a small constant per op at 1k-10k node scale,
|
|
6
|
+
* the algorithmic novelty of Spineless Traversal won't pay off in pure JS.
|
|
7
|
+
*
|
|
8
|
+
* Targets (Phase 5 viability criteria):
|
|
9
|
+
* - `compare`: < 200ns per op at 10k nodes (it's the hot path; the
|
|
10
|
+
* Spineless priority queue calls it on every insert/extract).
|
|
11
|
+
* - `insertAfter`: < 5µs amortized at 10k nodes (rarer, called when
|
|
12
|
+
* the dependency graph adds nodes — typically only during tree
|
|
13
|
+
* construction or large mutations).
|
|
14
|
+
*
|
|
15
|
+
* The naive impl is O(N) per insert, so it will exceed the insertAfter
|
|
16
|
+
* target at scale. That's expected — the Bender et al. amortized O(1)
|
|
17
|
+
* impl is what hits the target. We measure naive here as a baseline so
|
|
18
|
+
* we can show the speedup when Bender lands.
|
|
19
|
+
*
|
|
20
|
+
* Run with: `tsx packages/core/src/algorithm/spineless/order-maintenance.bench.ts`
|
|
21
|
+
*
|
|
22
|
+
* @internal
|
|
23
|
+
*/
|
|
24
|
+
import { BenderOrderMaintenance, NaiveOrderMaintenance, } from './order-maintenance.js';
|
|
25
|
+
function median(xs) {
|
|
26
|
+
const sorted = [...xs].sort((a, b) => a - b);
|
|
27
|
+
return sorted[Math.floor(sorted.length / 2)];
|
|
28
|
+
}
|
|
29
|
+
function bench(label, make, sizes, opsPerTrial, trials, op) {
|
|
30
|
+
console.log(`\n## ${label} — ${op}`);
|
|
31
|
+
for (const N of sizes) {
|
|
32
|
+
const trialMs = [];
|
|
33
|
+
for (let t = 0; t < trials; t++) {
|
|
34
|
+
const om = make();
|
|
35
|
+
const nodes = [om.init()];
|
|
36
|
+
// Pre-build N-1 more nodes
|
|
37
|
+
for (let i = 1; i < N; i++)
|
|
38
|
+
nodes.push(om.insertAfter(nodes[i - 1]));
|
|
39
|
+
const start = performance.now();
|
|
40
|
+
if (op === 'compare') {
|
|
41
|
+
// Fixed-pattern compares to avoid letting V8 optimize away
|
|
42
|
+
let acc = 0;
|
|
43
|
+
for (let k = 0; k < opsPerTrial; k++) {
|
|
44
|
+
// Pick two pseudo-random nodes (deterministic, no Math.random cost)
|
|
45
|
+
const i = (k * 2654435761) % N;
|
|
46
|
+
const j = (k * 1597334677) % N;
|
|
47
|
+
acc += om.compare(nodes[i], nodes[j]);
|
|
48
|
+
}
|
|
49
|
+
if (acc === 12345.6789)
|
|
50
|
+
console.log('!!!');
|
|
51
|
+
}
|
|
52
|
+
else {
|
|
53
|
+
// Insert opsPerTrial new nodes; insert position cycles through
|
|
54
|
+
// existing nodes so we hit middle-of-list (worst case for naive
|
|
55
|
+
// renumber).
|
|
56
|
+
for (let k = 0; k < opsPerTrial; k++) {
|
|
57
|
+
const after = nodes[(k * 2654435761) % nodes.length];
|
|
58
|
+
nodes.push(om.insertAfter(after));
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
const end = performance.now();
|
|
62
|
+
trialMs.push(end - start);
|
|
63
|
+
}
|
|
64
|
+
const ms = median(trialMs);
|
|
65
|
+
const usPerOp = (ms * 1000) / opsPerTrial;
|
|
66
|
+
const opsPerSec = (opsPerTrial / ms) * 1000;
|
|
67
|
+
console.log(` N=${N.toString().padStart(6)} ${usPerOp.toFixed(3).padStart(8)} µs/op ${(opsPerSec / 1000).toFixed(1).padStart(8)} kops/s`);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
console.log('Order Maintenance microbench (single-threaded JS, Node.js)');
|
|
71
|
+
console.log('Targets: compare < 0.2µs, insertAfter amortized < 5µs at N=10k');
|
|
72
|
+
const naive = () => new NaiveOrderMaintenance();
|
|
73
|
+
const bender = () => new BenderOrderMaintenance();
|
|
74
|
+
bench('Naive compare', naive, [100, 1000, 10000], 100_000, 5, 'compare');
|
|
75
|
+
bench('Bender compare', bender, [100, 1000, 10000], 100_000, 5, 'compare');
|
|
76
|
+
bench('Naive insertAfter (O(N) renumber)', naive, [100, 1000, 10000], 1_000, 5, 'insertAfter');
|
|
77
|
+
bench('Bender insertAfter (amortized O(log N))', bender, [100, 1000, 10000], 1_000, 5, 'insertAfter');
|
|
78
|
+
//# sourceMappingURL=order-maintenance.bench.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"order-maintenance.bench.js","sourceRoot":"","sources":["../../../src/algorithm/spineless/order-maintenance.bench.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,201 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Order Maintenance (OM) data structure.
|
|
3
|
+
*
|
|
4
|
+
* Maintains a totally-ordered set of items under insertions, deletions,
|
|
5
|
+
* and `compare(a, b)` queries that return the relative order in O(1) (or
|
|
6
|
+
* O(1) amortized). Foundational primitive for Spineless Traversal
|
|
7
|
+
* (Kirisame, Wang, Panchekha — PLDI 2025): the priority queue that
|
|
8
|
+
* drives incremental layout invalidation is keyed on OM timestamps,
|
|
9
|
+
* so a fast OM comparator dominates per-operation cost.
|
|
10
|
+
*
|
|
11
|
+
* Reference: Bender, Cole, Demaine, Farach-Colton, Zito. "Two
|
|
12
|
+
* simplified algorithms for maintaining order in a list." ESA 2002.
|
|
13
|
+
*
|
|
14
|
+
* ## What this file ships
|
|
15
|
+
*
|
|
16
|
+
* **The interface** — `OMNode`, `OrderMaintenance` — is the surface the
|
|
17
|
+
* Spineless runtime will consume. We design it so the implementation
|
|
18
|
+
* can be swapped (naive ↔ Bender amortized O(1)) without ripple.
|
|
19
|
+
*
|
|
20
|
+
* **The naive implementation** — `NaiveOrderMaintenance` — uses a single
|
|
21
|
+
* doubly-linked list with sequential integer tags assigned on insert.
|
|
22
|
+
* Inserts trigger O(N) renumbering of trailing nodes. Compare is O(1).
|
|
23
|
+
*
|
|
24
|
+
* This is the **scaffolding implementation**: correct, simple, lets us
|
|
25
|
+
* write all the consumer code (priority queue, runtime, attribute grammar
|
|
26
|
+
* interpreter) without waiting for the optimized impl. The Bender et al.
|
|
27
|
+
* amortized-O(1) implementation lands as a drop-in replacement once the
|
|
28
|
+
* Spineless runtime is wired and we can benchmark end-to-end. The naive
|
|
29
|
+
* impl stays in tree forever as a reference oracle: every Bender op is
|
|
30
|
+
* differentially compared against naive in the property-based test.
|
|
31
|
+
*
|
|
32
|
+
* ## Why JS and not WASM
|
|
33
|
+
*
|
|
34
|
+
* The paper's reference (Megatron) emits C++ and uses inline `cmov` for
|
|
35
|
+
* branchless compare. We can't use inline assembly in JS, but we don't
|
|
36
|
+
* have to: V8 already lowers `a < b` on 32-bit-integer hidden classes
|
|
37
|
+
* to a branchless `cmp` + `setb` sequence on x86-64. The TS-side cost is
|
|
38
|
+
* predominantly in the `lookup` (Map.get) and the unboxed compare itself.
|
|
39
|
+
*
|
|
40
|
+
* @internal
|
|
41
|
+
*/
|
|
42
|
+
/**
|
|
43
|
+
* A node in the order. The user holds these directly; comparisons happen
|
|
44
|
+
* via {@link OrderMaintenance.compare}. Implementations are free to use
|
|
45
|
+
* different node-internal representations; the interface only commits to
|
|
46
|
+
* identity (`===`) being the way to look a node up.
|
|
47
|
+
*
|
|
48
|
+
* @internal
|
|
49
|
+
*/
|
|
50
|
+
export interface OMNode {
|
|
51
|
+
/**
|
|
52
|
+
* Implementation-defined opaque tag. Consumers must NOT read this
|
|
53
|
+
* directly. Treated as an internal invariant that survives compares
|
|
54
|
+
* but may shift after inserts/deletes (renumbering, rebalance).
|
|
55
|
+
*
|
|
56
|
+
* @internal
|
|
57
|
+
*/
|
|
58
|
+
readonly _omTag: number;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* @internal
|
|
62
|
+
*/
|
|
63
|
+
export interface OrderMaintenance {
|
|
64
|
+
/**
|
|
65
|
+
* The current count of live nodes in the order. Exposed for tests
|
|
66
|
+
* and microbenchmarks; consumers should not depend on the value.
|
|
67
|
+
*/
|
|
68
|
+
readonly size: number;
|
|
69
|
+
/**
|
|
70
|
+
* Create the very first node in an empty order, or assert that an
|
|
71
|
+
* order is non-empty by looking up an existing first/last anchor.
|
|
72
|
+
* Returns a node identity that can be used as the `after` argument
|
|
73
|
+
* to subsequent `insertAfter` calls.
|
|
74
|
+
*
|
|
75
|
+
* Calling `init` on an already-initialised order replaces all
|
|
76
|
+
* existing nodes; this is provided for `reset()` semantics.
|
|
77
|
+
*/
|
|
78
|
+
init(): OMNode;
|
|
79
|
+
/**
|
|
80
|
+
* Insert a fresh node immediately after `after` in the order.
|
|
81
|
+
* Returns the new node identity. The returned node compares >
|
|
82
|
+
* `after` and < whatever was at `after.next` previously.
|
|
83
|
+
*
|
|
84
|
+
* Amortized O(1) in the Bender impl; O(N) worst case here in the
|
|
85
|
+
* naive impl due to trailing-node renumbering.
|
|
86
|
+
*/
|
|
87
|
+
insertAfter(after: OMNode): OMNode;
|
|
88
|
+
/**
|
|
89
|
+
* Remove `node` from the order. Subsequent compares involving
|
|
90
|
+
* `node` are undefined behaviour. Other nodes' relative order is
|
|
91
|
+
* preserved.
|
|
92
|
+
*/
|
|
93
|
+
delete(node: OMNode): void;
|
|
94
|
+
/**
|
|
95
|
+
* Compare the relative order of `a` and `b`. Returns:
|
|
96
|
+
* - a negative integer if `a` precedes `b` (was inserted earlier
|
|
97
|
+
* or recipient-of-`insertAfter` chain),
|
|
98
|
+
* - zero if `a === b`,
|
|
99
|
+
* - a positive integer if `a` follows `b`.
|
|
100
|
+
*
|
|
101
|
+
* O(1) amortized in both naive and Bender impls. This is the
|
|
102
|
+
* hot path — the Spineless priority queue calls compare per
|
|
103
|
+
* insert/extract.
|
|
104
|
+
*/
|
|
105
|
+
compare(a: OMNode, b: OMNode): number;
|
|
106
|
+
/**
|
|
107
|
+
* Return the node immediately before `node` in the order, or `null`
|
|
108
|
+
* if `node` is the first. O(1). Used by the runtime to find the new
|
|
109
|
+
* order tail after the current tail is deleted, without an O(N)
|
|
110
|
+
* scan of all live nodes.
|
|
111
|
+
*/
|
|
112
|
+
predecessor(node: OMNode): OMNode | null;
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Naive O(N)-per-insert Order Maintenance. Correctness-only impl
|
|
116
|
+
* for scaffolding and as a fuzzer oracle for the future Bender impl.
|
|
117
|
+
*
|
|
118
|
+
* Invariants:
|
|
119
|
+
* - `_omTag` is strictly increasing along the `next` chain.
|
|
120
|
+
* - `_omTag` values are arbitrary integers but always orderable.
|
|
121
|
+
* - Insert renumbers all trailing nodes to maintain monotonicity.
|
|
122
|
+
*
|
|
123
|
+
* @internal
|
|
124
|
+
*/
|
|
125
|
+
export declare class NaiveOrderMaintenance implements OrderMaintenance {
|
|
126
|
+
private firstNode;
|
|
127
|
+
private nodeCount;
|
|
128
|
+
get size(): number;
|
|
129
|
+
/**
|
|
130
|
+
* Returns the first node in the order, or `null` if empty. Exposed
|
|
131
|
+
* for tests and for the priority queue's extract-min operation.
|
|
132
|
+
*
|
|
133
|
+
* @internal
|
|
134
|
+
*/
|
|
135
|
+
first(): OMNode | null;
|
|
136
|
+
init(): OMNode;
|
|
137
|
+
insertAfter(after: OMNode): OMNode;
|
|
138
|
+
delete(node: OMNode): void;
|
|
139
|
+
compare(a: OMNode, b: OMNode): number;
|
|
140
|
+
predecessor(node: OMNode): OMNode | null;
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* Bender, Cole, Demaine, Farach-Colton, Zito (2002): "Two simplified
|
|
144
|
+
* algorithms for maintaining order in a list." Algorithm 1 — list-
|
|
145
|
+
* labeling with exponentially-growing window relabel.
|
|
146
|
+
*
|
|
147
|
+
* Operations:
|
|
148
|
+
* - `compare`: O(1) integer subtract.
|
|
149
|
+
* - `insertAfter`: amortized O(log N) per operation (looser than the
|
|
150
|
+
* paper's O(1) amortized when using density bound (3/2)^d at depth d;
|
|
151
|
+
* we trade a log factor for simpler integer arithmetic and avoid
|
|
152
|
+
* BigInt).
|
|
153
|
+
* - `delete`: O(1).
|
|
154
|
+
*
|
|
155
|
+
* Cross-validated against `NaiveOrderMaintenance` via property fuzzer.
|
|
156
|
+
*
|
|
157
|
+
* @internal
|
|
158
|
+
*/
|
|
159
|
+
export declare class BenderOrderMaintenance implements OrderMaintenance {
|
|
160
|
+
private firstNode;
|
|
161
|
+
private nodeCount;
|
|
162
|
+
get size(): number;
|
|
163
|
+
first(): OMNode | null;
|
|
164
|
+
init(): OMNode;
|
|
165
|
+
insertAfter(after: OMNode): OMNode;
|
|
166
|
+
delete(node: OMNode): void;
|
|
167
|
+
compare(a: OMNode, b: OMNode): number;
|
|
168
|
+
predecessor(node: OMNode): OMNode | null;
|
|
169
|
+
/**
|
|
170
|
+
* Walk exponentially-growing windows around `pivot` until a window
|
|
171
|
+
* with low enough density to redistribute is found. Redistribute
|
|
172
|
+
* labels uniformly across that window.
|
|
173
|
+
*
|
|
174
|
+
* Density bound: `count * 2 ≤ span`. This guarantees:
|
|
175
|
+
* - Every node gets a distinct integer label (count ≤ span).
|
|
176
|
+
* - Each interval between consecutive labels has at least 2 units
|
|
177
|
+
* of room, so subsequent midpoint inserts succeed without
|
|
178
|
+
* triggering relabel again at the same depth.
|
|
179
|
+
*
|
|
180
|
+
* Window definition at depth d:
|
|
181
|
+
* span = 2^d
|
|
182
|
+
* tagLow = pivot._omTag aligned down to multiple of span
|
|
183
|
+
* tagHigh = tagLow + span
|
|
184
|
+
*
|
|
185
|
+
* Amortized cost: O(log N) per insert. (Tighter than the paper's
|
|
186
|
+
* O(1) amortized with density bound (3/2)^d, but the bound here uses
|
|
187
|
+
* pure integer arithmetic for V8-friendly speed.)
|
|
188
|
+
*
|
|
189
|
+
* @internal
|
|
190
|
+
*/
|
|
191
|
+
private relabel;
|
|
192
|
+
/**
|
|
193
|
+
* Fallback when the windowed relabel walks all the way up to the
|
|
194
|
+
* full label space without finding a sparse-enough window. Spreads
|
|
195
|
+
* every node uniformly across [0, LABEL_MAX).
|
|
196
|
+
*
|
|
197
|
+
* @internal
|
|
198
|
+
*/
|
|
199
|
+
private globalRelabel;
|
|
200
|
+
}
|
|
201
|
+
//# sourceMappingURL=order-maintenance.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"order-maintenance.d.ts","sourceRoot":"","sources":["../../../src/algorithm/spineless/order-maintenance.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwCG;AAEH;;;;;;;GAOG;AACH,MAAM,WAAW,MAAM;IACrB;;;;;;OAMG;IACH,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B;;;OAGG;IACH,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAEtB;;;;;;;;OAQG;IACH,IAAI,IAAI,MAAM,CAAC;IAEf;;;;;;;OAOG;IACH,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC;IAEnC;;;;OAIG;IACH,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAE3B;;;;;;;;;;OAUG;IACH,OAAO,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAEtC;;;;;OAKG;IACH,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;CAC1C;AAkBD;;;;;;;;;;GAUG;AACH,qBAAa,qBAAsB,YAAW,gBAAgB;IAC5D,OAAO,CAAC,SAAS,CAA0B;IAC3C,OAAO,CAAC,SAAS,CAAK;IAEtB,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED;;;;;OAKG;IACH,KAAK,IAAI,MAAM,GAAG,IAAI;IAItB,IAAI,IAAI,MAAM;IAOd,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IAyBlC,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAkB1B,OAAO,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM;IAMrC,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;CAGzC;AA0BD;;;;;;;;;;;;;;;;GAgBG;AACH,qBAAa,sBAAuB,YAAW,gBAAgB;IAC7D,OAAO,CAAC,SAAS,CAA2B;IAC5C,OAAO,CAAC,SAAS,CAAK;IAEtB,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED,KAAK,IAAI,MAAM,GAAG,IAAI;IAItB,IAAI,IAAI,MAAM;IASd,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IAwBlC,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAc1B,OAAO,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM;IAIrC,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAIxC;;;;;;;;;;;;;;;;;;;;;OAqBG;IACH,OAAO,CAAC,OAAO;IAqDf;;;;;;OAMG;IACH,OAAO,CAAC,aAAa;CActB"}
|