@derivation/relational 0.1.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.ts +23 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +31 -0
- package/dist/index.js.map +1 -0
- package/dist/log-change-input.d.ts +13 -0
- package/dist/log-change-input.d.ts.map +1 -0
- package/dist/log-change-input.js +26 -0
- package/dist/log-change-input.js.map +1 -0
- package/dist/reactive-log-source.d.ts +10 -0
- package/dist/reactive-log-source.d.ts.map +1 -0
- package/dist/reactive-log-source.js +19 -0
- package/dist/reactive-log-source.js.map +1 -0
- package/dist/reactive-log.d.ts +22 -0
- package/dist/reactive-log.d.ts.map +1 -0
- package/dist/reactive-log.js +73 -0
- package/dist/reactive-log.js.map +1 -0
- package/dist/reactive-map-source.d.ts +10 -0
- package/dist/reactive-map-source.d.ts.map +1 -0
- package/dist/reactive-map-source.js +19 -0
- package/dist/reactive-map-source.js.map +1 -0
- package/dist/reactive-map.d.ts +24 -0
- package/dist/reactive-map.d.ts.map +1 -0
- package/dist/reactive-map.js +59 -0
- package/dist/reactive-map.js.map +1 -0
- package/dist/reactive-set-source.d.ts +10 -0
- package/dist/reactive-set-source.d.ts.map +1 -0
- package/dist/reactive-set-source.js +19 -0
- package/dist/reactive-set-source.js.map +1 -0
- package/dist/reactive-set.d.ts +21 -0
- package/dist/reactive-set.d.ts.map +1 -0
- package/dist/reactive-set.js +58 -0
- package/dist/reactive-set.js.map +1 -0
- package/dist/rimbu-utils.d.ts +28 -0
- package/dist/rimbu-utils.d.ts.map +1 -0
- package/dist/rimbu-utils.js +46 -0
- package/dist/rimbu-utils.js.map +1 -0
- package/dist/test/reactive-log.test.d.ts +2 -0
- package/dist/test/reactive-log.test.d.ts.map +1 -0
- package/dist/test/reactive-log.test.js +228 -0
- package/dist/test/reactive-log.test.js.map +1 -0
- package/dist/test/reactive.test.d.ts +2 -0
- package/dist/test/reactive.test.d.ts.map +1 -0
- package/dist/test/reactive.test.js +240 -0
- package/dist/test/reactive.test.js.map +1 -0
- package/dist/test/z-map-set.test.d.ts +2 -0
- package/dist/test/z-map-set.test.d.ts.map +1 -0
- package/dist/test/z-map-set.test.js +251 -0
- package/dist/test/z-map-set.test.js.map +1 -0
- package/dist/tuple.d.ts +6 -0
- package/dist/tuple.d.ts.map +1 -0
- package/dist/tuple.js +5 -0
- package/dist/tuple.js.map +1 -0
- package/dist/z-map-change-input.d.ts +13 -0
- package/dist/z-map-change-input.d.ts.map +1 -0
- package/dist/z-map-change-input.js +26 -0
- package/dist/z-map-change-input.js.map +1 -0
- package/dist/z-map.d.ts +25 -0
- package/dist/z-map.d.ts.map +1 -0
- package/dist/z-map.js +161 -0
- package/dist/z-map.js.map +1 -0
- package/dist/z-set-change-input.d.ts +13 -0
- package/dist/z-set-change-input.d.ts.map +1 -0
- package/dist/z-set-change-input.js +26 -0
- package/dist/z-set-change-input.js.map +1 -0
- package/dist/z-set.d.ts +24 -0
- package/dist/z-set.d.ts.map +1 -0
- package/dist/z-set.js +148 -0
- package/dist/z-set.js.map +1 -0
- package/package.json +41 -0
|
@@ -0,0 +1,251 @@
|
|
|
1
|
+
import { describe, it, expect } from "vitest";
|
|
2
|
+
import { ZMap } from "../z-map.js";
|
|
3
|
+
import { ZSet } from "../z-set.js";
|
|
4
|
+
function sortPairs(xs) {
|
|
5
|
+
return [...xs].sort((a, b) => String(a[0]).localeCompare(String(b[0])) || a[1] - b[1]);
|
|
6
|
+
}
|
|
7
|
+
function sortTriples(xs) {
|
|
8
|
+
return [...xs].sort((a, b) => {
|
|
9
|
+
const c1 = String(a[0]).localeCompare(String(b[0]));
|
|
10
|
+
if (c1 !== 0)
|
|
11
|
+
return c1;
|
|
12
|
+
const c2 = String(a[1]).localeCompare(String(b[1]));
|
|
13
|
+
if (c2 !== 0)
|
|
14
|
+
return c2;
|
|
15
|
+
return a[2] - b[2];
|
|
16
|
+
});
|
|
17
|
+
}
|
|
18
|
+
describe("ZSet", () => {
|
|
19
|
+
it("add/remove cancels to zero and deletes entries", () => {
|
|
20
|
+
let s = new ZSet();
|
|
21
|
+
s = s.add("a", 2);
|
|
22
|
+
s = s.add("a", -1);
|
|
23
|
+
expect(s.get("a")).toBe(1);
|
|
24
|
+
s = s.remove("a", 1);
|
|
25
|
+
expect(s.get("a")).toBe(0);
|
|
26
|
+
expect(s.isEmpty()).toBe(true);
|
|
27
|
+
});
|
|
28
|
+
it("weight 0 is a no-op", () => {
|
|
29
|
+
let s = new ZSet();
|
|
30
|
+
s = s.add("a", 0);
|
|
31
|
+
expect(s.get("a")).toBe(0);
|
|
32
|
+
expect(s.isEmpty()).toBe(true);
|
|
33
|
+
});
|
|
34
|
+
it("merge mutates, union returns new", () => {
|
|
35
|
+
let a = new ZSet();
|
|
36
|
+
a = a.add("x", 1);
|
|
37
|
+
let b = new ZSet();
|
|
38
|
+
b = b.add("x", 2);
|
|
39
|
+
b = b.add("y", 3);
|
|
40
|
+
const u = a.union(b);
|
|
41
|
+
expect(sortPairs([...u.getEntries()])).toEqual(sortPairs([
|
|
42
|
+
["x", 3],
|
|
43
|
+
["y", 3],
|
|
44
|
+
]));
|
|
45
|
+
});
|
|
46
|
+
it("product forms cartesian product with multiplied weights", () => {
|
|
47
|
+
let a = new ZSet();
|
|
48
|
+
a = a.add("a", 2);
|
|
49
|
+
a = a.add("b", -1);
|
|
50
|
+
let b = new ZSet();
|
|
51
|
+
b = b.add(10, 3);
|
|
52
|
+
const p = a.product(b);
|
|
53
|
+
const got = [...p.getEntries()].map(([k, w]) => [`${k.get(0)}:${k.get(1)}`, w]);
|
|
54
|
+
expect(sortPairs(got)).toEqual(sortPairs([
|
|
55
|
+
["a:10", 6],
|
|
56
|
+
["b:10", -3],
|
|
57
|
+
]));
|
|
58
|
+
});
|
|
59
|
+
it("groupBy builds a ZMap of items to weights", () => {
|
|
60
|
+
let s = new ZSet();
|
|
61
|
+
s = s.add("apple", 2);
|
|
62
|
+
s = s.add("apricot", 1);
|
|
63
|
+
s = s.add("banana", 3);
|
|
64
|
+
const m = s.groupBy((x) => x[0]);
|
|
65
|
+
expect(m.getValue("a", "apple")).toBe(2);
|
|
66
|
+
expect(m.getValue("a", "apricot")).toBe(1);
|
|
67
|
+
expect(m.getValue("b", "banana")).toBe(3);
|
|
68
|
+
expect(m.getValue("b", "apple")).toBe(0);
|
|
69
|
+
});
|
|
70
|
+
it("map maps values and preserves weights", () => {
|
|
71
|
+
let s = new ZSet();
|
|
72
|
+
s = s.add("aa", 2);
|
|
73
|
+
s = s.add("bbb", -1);
|
|
74
|
+
const t = s.map((x) => x.length);
|
|
75
|
+
expect(sortPairs([...t.getEntries()])).toEqual(sortPairs([
|
|
76
|
+
[2, 2],
|
|
77
|
+
[3, -1],
|
|
78
|
+
]));
|
|
79
|
+
});
|
|
80
|
+
it("intersection multiplies weights for matching items", () => {
|
|
81
|
+
let a = new ZSet();
|
|
82
|
+
a = a.add("x", 3);
|
|
83
|
+
a = a.add("y", 2);
|
|
84
|
+
let b = new ZSet();
|
|
85
|
+
b = b.add("x", 4);
|
|
86
|
+
b = b.add("z", 5);
|
|
87
|
+
const i = a.intersection(b);
|
|
88
|
+
expect(sortPairs([...i.getEntries()])).toEqual(sortPairs([["x", 12]]));
|
|
89
|
+
});
|
|
90
|
+
it("intersection with negative weights", () => {
|
|
91
|
+
let a = new ZSet();
|
|
92
|
+
a = a.add("x", -2);
|
|
93
|
+
a = a.add("y", 3);
|
|
94
|
+
let b = new ZSet();
|
|
95
|
+
b = b.add("x", 4);
|
|
96
|
+
b = b.add("y", -1);
|
|
97
|
+
const i = a.intersection(b);
|
|
98
|
+
expect(sortPairs([...i.getEntries()])).toEqual(sortPairs([
|
|
99
|
+
["x", -8],
|
|
100
|
+
["y", -3],
|
|
101
|
+
]));
|
|
102
|
+
});
|
|
103
|
+
it("difference subtracts weights", () => {
|
|
104
|
+
let a = new ZSet();
|
|
105
|
+
a = a.add("x", 5);
|
|
106
|
+
a = a.add("y", 2);
|
|
107
|
+
let b = new ZSet();
|
|
108
|
+
b = b.add("x", 3);
|
|
109
|
+
b = b.add("z", 1);
|
|
110
|
+
const d = a.difference(b);
|
|
111
|
+
expect(sortPairs([...d.getEntries()])).toEqual(sortPairs([
|
|
112
|
+
["x", 2],
|
|
113
|
+
["y", 2],
|
|
114
|
+
["z", -1],
|
|
115
|
+
]));
|
|
116
|
+
});
|
|
117
|
+
it("filter keeps matching items with weights", () => {
|
|
118
|
+
let s = new ZSet();
|
|
119
|
+
s = s.add("apple", 2);
|
|
120
|
+
s = s.add("apricot", 1);
|
|
121
|
+
s = s.add("banana", 3);
|
|
122
|
+
const f = s.filter((x) => x.startsWith("a"));
|
|
123
|
+
expect(sortPairs([...f.getEntries()])).toEqual(sortPairs([
|
|
124
|
+
["apple", 2],
|
|
125
|
+
["apricot", 1],
|
|
126
|
+
]));
|
|
127
|
+
});
|
|
128
|
+
});
|
|
129
|
+
describe("ZMap", () => {
|
|
130
|
+
it("add/remove cancels and deletes empty rows", () => {
|
|
131
|
+
let m = new ZMap();
|
|
132
|
+
m = m.add("k", "a", 2);
|
|
133
|
+
m = m.add("k", "a", -2);
|
|
134
|
+
expect(m.getValue("k", "a")).toBe(0);
|
|
135
|
+
const entries = [...m.getEntries()];
|
|
136
|
+
expect(entries.length).toBe(0);
|
|
137
|
+
});
|
|
138
|
+
it("union returns a new map", () => {
|
|
139
|
+
let a = new ZMap();
|
|
140
|
+
a = a.add("x", "a", 1);
|
|
141
|
+
let b = new ZMap();
|
|
142
|
+
b = b.add("x", "a", 2);
|
|
143
|
+
const u = a.union(b);
|
|
144
|
+
expect(sortTriples([...u.getEntries()])).toEqual(sortTriples([["x", "a", 3]]));
|
|
145
|
+
expect(sortTriples([...a.getEntries()])).toEqual(sortTriples([["x", "a", 1]]));
|
|
146
|
+
});
|
|
147
|
+
it("join matches keys and produces product of row zsets", () => {
|
|
148
|
+
let left = new ZMap();
|
|
149
|
+
left = left.add("k1", "a", 2);
|
|
150
|
+
left = left.add("k1", "b", 1);
|
|
151
|
+
left = left.add("k2", "c", 5);
|
|
152
|
+
let right = new ZMap();
|
|
153
|
+
right = right.add("k1", 10, 3);
|
|
154
|
+
right = right.add("k3", 20, 7);
|
|
155
|
+
const joined = left.join(right);
|
|
156
|
+
const got = [...joined.getEntries()].map(([k, pair, w]) => [k, `${pair.get(0)}:${pair.get(1)}`, w]);
|
|
157
|
+
expect(sortTriples(got)).toEqual(sortTriples([
|
|
158
|
+
["k1", "a:10", 6],
|
|
159
|
+
["k1", "b:10", 3],
|
|
160
|
+
]));
|
|
161
|
+
});
|
|
162
|
+
it("mapValues maps row items and preserves weights", () => {
|
|
163
|
+
let m = new ZMap();
|
|
164
|
+
m = m.add("k", "aa", 2);
|
|
165
|
+
m = m.add("k", "bbb", -1);
|
|
166
|
+
const mapped = m.mapValues((s) => s.length);
|
|
167
|
+
expect(sortTriples([...mapped.getEntries()])).toEqual(sortTriples([
|
|
168
|
+
["k", 2, 2],
|
|
169
|
+
["k", 3, -1],
|
|
170
|
+
]));
|
|
171
|
+
});
|
|
172
|
+
it("flatten merges all rows into one set", () => {
|
|
173
|
+
let m = new ZMap();
|
|
174
|
+
m = m.add("k1", "a", 2);
|
|
175
|
+
m = m.add("k2", "a", 3);
|
|
176
|
+
m = m.add("k2", "b", 1);
|
|
177
|
+
const flat = m.flatten();
|
|
178
|
+
expect(sortPairs([...flat.getEntries()])).toEqual(sortPairs([
|
|
179
|
+
["a", 5],
|
|
180
|
+
["b", 1],
|
|
181
|
+
]));
|
|
182
|
+
});
|
|
183
|
+
it("constructors accept iterables and Immutable Maps", () => {
|
|
184
|
+
const z1 = new ZSet(new Map([[1, 2]]));
|
|
185
|
+
const z2 = new ZSet([[2, 3]]);
|
|
186
|
+
expect(z1.get(1)).toBe(2);
|
|
187
|
+
expect(z2.get(2)).toBe(3);
|
|
188
|
+
const zm1 = new ZMap(new Map([["a", new ZSet([[1, 5]])]]));
|
|
189
|
+
const zm2 = new ZMap([["b", new ZSet([[2, 6]])]]);
|
|
190
|
+
expect(zm1.getValue("a", 1)).toBe(5);
|
|
191
|
+
expect(zm2.getValue("b", 2)).toBe(6);
|
|
192
|
+
});
|
|
193
|
+
it("ZSet.addSet and add remove zero-weight entries correctly", () => {
|
|
194
|
+
let zm = new ZMap();
|
|
195
|
+
const zs = new ZSet().add(10, 1).add(10, -1);
|
|
196
|
+
zm = zm.addSet("k", zs);
|
|
197
|
+
expect([...zm.getEntries()].length).toBe(0);
|
|
198
|
+
let z = new ZSet();
|
|
199
|
+
z = z.add(1, 0);
|
|
200
|
+
expect(z.isEmpty()).toBe(true);
|
|
201
|
+
});
|
|
202
|
+
it("ZMap.flatten merges multiple rows", () => {
|
|
203
|
+
let zm = new ZMap();
|
|
204
|
+
zm = zm.add("x", "a", 1);
|
|
205
|
+
zm = zm.add("y", "a", 2);
|
|
206
|
+
const flat = zm.flatten();
|
|
207
|
+
const entries = [...flat.getEntries()];
|
|
208
|
+
expect(entries).toContainEqual(["a", 3]);
|
|
209
|
+
});
|
|
210
|
+
it("ZSet.map maps to new type correctly", () => {
|
|
211
|
+
let zs = new ZSet();
|
|
212
|
+
zs = zs.add("abc", 2);
|
|
213
|
+
const mapped = zs.map((x) => x.length);
|
|
214
|
+
expect([...mapped.getEntries()]).toContainEqual([3, 2]);
|
|
215
|
+
});
|
|
216
|
+
it("ZMap.intersection multiplies weights for matching keys and values", () => {
|
|
217
|
+
let a = new ZMap();
|
|
218
|
+
a = a.add("k1", "x", 2);
|
|
219
|
+
a = a.add("k1", "y", 3);
|
|
220
|
+
a = a.add("k2", "z", 1);
|
|
221
|
+
let b = new ZMap();
|
|
222
|
+
b = b.add("k1", "x", 4);
|
|
223
|
+
b = b.add("k1", "w", 5);
|
|
224
|
+
b = b.add("k3", "z", 2);
|
|
225
|
+
const i = a.intersection(b);
|
|
226
|
+
expect(sortTriples([...i.getEntries()])).toEqual(sortTriples([["k1", "x", 8]]));
|
|
227
|
+
});
|
|
228
|
+
it("ZMap.difference subtracts weights", () => {
|
|
229
|
+
let a = new ZMap();
|
|
230
|
+
a = a.add("k1", "x", 5);
|
|
231
|
+
a = a.add("k1", "y", 2);
|
|
232
|
+
let b = new ZMap();
|
|
233
|
+
b = b.add("k1", "x", 3);
|
|
234
|
+
b = b.add("k2", "z", 1);
|
|
235
|
+
const d = a.difference(b);
|
|
236
|
+
expect(sortTriples([...d.getEntries()])).toEqual(sortTriples([
|
|
237
|
+
["k1", "x", 2],
|
|
238
|
+
["k1", "y", 2],
|
|
239
|
+
["k2", "z", -1],
|
|
240
|
+
]));
|
|
241
|
+
});
|
|
242
|
+
it("ZMap.filter filters by key and value", () => {
|
|
243
|
+
let m = new ZMap();
|
|
244
|
+
m = m.add("k1", 10, 2);
|
|
245
|
+
m = m.add("k1", 5, 1);
|
|
246
|
+
m = m.add("k2", 15, 3);
|
|
247
|
+
const f = m.filter((k, v) => k === "k1" && v > 7);
|
|
248
|
+
expect(sortTriples([...f.getEntries()])).toEqual(sortTriples([["k1", 10, 2]]));
|
|
249
|
+
});
|
|
250
|
+
});
|
|
251
|
+
//# sourceMappingURL=z-map-set.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"z-map-set.test.js","sourceRoot":"","sources":["../../src/test/z-map-set.test.ts"],"names":[],"mappings":"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"}
|
package/dist/tuple.d.ts
ADDED
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export interface Tuple<T extends readonly unknown[]> {
|
|
2
|
+
get<I extends keyof T & number>(index: I): T[I];
|
|
3
|
+
set<I extends keyof T & number>(index: I, value: T[I]): Tuple<T>;
|
|
4
|
+
}
|
|
5
|
+
export declare function Tuple<T extends readonly unknown[]>(...values: T): Tuple<T>;
|
|
6
|
+
//# sourceMappingURL=tuple.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tuple.d.ts","sourceRoot":"","sources":["../src/tuple.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,KAAK,CAAC,CAAC,SAAS,SAAS,OAAO,EAAE;IACjD,GAAG,CAAC,CAAC,SAAS,MAAM,CAAC,GAAG,MAAM,EAAE,KAAK,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IAChD,GAAG,CAAC,CAAC,SAAS,MAAM,CAAC,GAAG,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;CAClE;AAED,wBAAgB,KAAK,CAAC,CAAC,SAAS,SAAS,OAAO,EAAE,EAAE,GAAG,MAAM,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAE1E"}
|
package/dist/tuple.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tuple.js","sourceRoot":"","sources":["../src/tuple.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAOjC,MAAM,UAAU,KAAK,CAA+B,GAAG,MAAS;IAC9D,OAAO,IAAI,CAAC,MAAM,CAAa,CAAC;AAClC,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { Graph, ReactiveValue } from "derivation";
|
|
2
|
+
import { ZMap } from "./z-map.js";
|
|
3
|
+
export declare class ZMapChangeInput<K, V> extends ReactiveValue<ZMap<K, V>> {
|
|
4
|
+
readonly graph: Graph;
|
|
5
|
+
private current;
|
|
6
|
+
private pending;
|
|
7
|
+
constructor(graph: Graph);
|
|
8
|
+
add(k1: K, k2: V, weight?: number): void;
|
|
9
|
+
push(set: ZMap<K, V>): void;
|
|
10
|
+
step(): void;
|
|
11
|
+
get value(): ZMap<K, V>;
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=z-map-change-input.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"z-map-change-input.d.ts","sourceRoot":"","sources":["../src/z-map-change-input.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAClD,OAAO,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAElC,qBAAa,eAAe,CAAC,CAAC,EAAE,CAAC,CAAE,SAAQ,aAAa,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;aAItC,KAAK,EAAE,KAAK;IAHxC,OAAO,CAAC,OAAO,CAAoB;IACnC,OAAO,CAAC,OAAO,CAAoB;gBAEP,KAAK,EAAE,KAAK;IAKxC,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,MAAM,SAAI,GAAG,IAAI;IAInC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,IAAI;IAI3B,IAAI,IAAI,IAAI;IAKZ,IAAI,KAAK,IAAI,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAEtB;CACF"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { Graph, ReactiveValue } from "derivation";
|
|
2
|
+
import { ZMap } from "./z-map.js";
|
|
3
|
+
export class ZMapChangeInput extends ReactiveValue {
|
|
4
|
+
graph;
|
|
5
|
+
current = new ZMap();
|
|
6
|
+
pending = new ZMap();
|
|
7
|
+
constructor(graph) {
|
|
8
|
+
super();
|
|
9
|
+
this.graph = graph;
|
|
10
|
+
graph.addValue(this);
|
|
11
|
+
}
|
|
12
|
+
add(k1, k2, weight = 1) {
|
|
13
|
+
this.pending = this.pending.add(k1, k2, weight);
|
|
14
|
+
}
|
|
15
|
+
push(set) {
|
|
16
|
+
this.pending = this.pending.union(set);
|
|
17
|
+
}
|
|
18
|
+
step() {
|
|
19
|
+
this.current = this.pending;
|
|
20
|
+
this.pending = new ZMap();
|
|
21
|
+
}
|
|
22
|
+
get value() {
|
|
23
|
+
return this.current;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=z-map-change-input.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"z-map-change-input.js","sourceRoot":"","sources":["../src/z-map-change-input.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAClD,OAAO,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAElC,MAAM,OAAO,eAAsB,SAAQ,aAAyB;IAItC;IAHpB,OAAO,GAAG,IAAI,IAAI,EAAQ,CAAC;IAC3B,OAAO,GAAG,IAAI,IAAI,EAAQ,CAAC;IAEnC,YAA4B,KAAY;QACtC,KAAK,EAAE,CAAC;QADkB,UAAK,GAAL,KAAK,CAAO;QAEtC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IACvB,CAAC;IAED,GAAG,CAAC,EAAK,EAAE,EAAK,EAAE,MAAM,GAAG,CAAC;QAC1B,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,MAAM,CAAC,CAAC;IAClD,CAAC;IAED,IAAI,CAAC,GAAe;QAClB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACzC,CAAC;IAED,IAAI;QACF,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;QAC5B,IAAI,CAAC,OAAO,GAAG,IAAI,IAAI,EAAQ,CAAC;IAClC,CAAC;IAED,IAAI,KAAK;QACP,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;CACF"}
|
package/dist/z-map.d.ts
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { ZSet } from "./z-set.js";
|
|
2
|
+
import { HashMap } from "@rimbu/core";
|
|
3
|
+
import { Tuple } from "./tuple.js";
|
|
4
|
+
export type ZMapEntry<K, V> = readonly [k1: K, k2: V, weight: number];
|
|
5
|
+
export declare class ZMap<K, V> {
|
|
6
|
+
private readonly entries;
|
|
7
|
+
constructor(entries?: HashMap<K, ZSet<V>> | Iterable<readonly [K, ZSet<V>]>);
|
|
8
|
+
isEmpty(): boolean;
|
|
9
|
+
get length(): number;
|
|
10
|
+
getEntries(): IterableIterator<ZMapEntry<K, V>>;
|
|
11
|
+
get(k1: K): ZSet<V>;
|
|
12
|
+
getValue(k1: K, k2: V): number;
|
|
13
|
+
addSet(k1: K, zset: ZSet<V>): ZMap<K, V>;
|
|
14
|
+
add(k1: K, k2: V, weight?: number): ZMap<K, V>;
|
|
15
|
+
remove(k1: K, k2: V, weight?: number): ZMap<K, V>;
|
|
16
|
+
union(other: ZMap<K, V>): ZMap<K, V>;
|
|
17
|
+
intersection(other: ZMap<K, V>): ZMap<K, V>;
|
|
18
|
+
difference(other: ZMap<K, V>): ZMap<K, V>;
|
|
19
|
+
filter(pred: (k: K, v: V) => boolean): ZMap<K, V>;
|
|
20
|
+
join<V1>(other: ZMap<K, V1>): ZMap<K, Tuple<[V, V1]>>;
|
|
21
|
+
mapValues<V1>(func: (v: V) => V1): ZMap<K, V1>;
|
|
22
|
+
flatten(): ZSet<V>;
|
|
23
|
+
toArray(): ZMapEntry<K, V>[];
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=z-map.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"z-map.d.ts","sourceRoot":"","sources":["../src/z-map.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAClC,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AACtC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAGnC,MAAM,MAAM,SAAS,CAAC,CAAC,EAAE,CAAC,IAAI,SAAS,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;AAEtE,qBAAa,IAAI,CAAC,CAAC,EAAE,CAAC;IACpB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAsB;gBAElC,OAAO,CAAC,EAAE,OAAO,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IAW3E,OAAO,IAAI,OAAO;IAIlB,IAAI,MAAM,IAAI,MAAM,CAMnB;IAEA,UAAU,IAAI,gBAAgB,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAQhD,GAAG,CAAC,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;IAInB,QAAQ,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,MAAM;IAI9B,MAAM,CAAC,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;IAexC,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,MAAM,SAAI,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;IAezC,MAAM,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,MAAM,SAAI,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;IAI5C,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;IAkBpC,YAAY,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;IAgB3C,UAAU,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;IAkBzC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,OAAO,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;IAajD,IAAI,CAAC,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;IAcrD,SAAS,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,IAAI,CAAC,CAAC,EAAE,EAAE,CAAC;IAS9C,OAAO,IAAI,IAAI,CAAC,CAAC,CAAC;IAQlB,OAAO,IAAI,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE;CAG7B"}
|
package/dist/z-map.js
ADDED
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
import { ZSet } from "./z-set.js";
|
|
2
|
+
import { HashMap } from "@rimbu/core";
|
|
3
|
+
import { Tuple } from "./tuple.js";
|
|
4
|
+
import { emptyHashMap, hashMapFrom, hashMapBuilder } from "./rimbu-utils.js";
|
|
5
|
+
export class ZMap {
|
|
6
|
+
entries;
|
|
7
|
+
constructor(entries) {
|
|
8
|
+
if (entries === undefined) {
|
|
9
|
+
this.entries = emptyHashMap();
|
|
10
|
+
}
|
|
11
|
+
else if (typeof entries.toBuilder === 'function') {
|
|
12
|
+
// It's a rimbu HashMap
|
|
13
|
+
this.entries = entries;
|
|
14
|
+
}
|
|
15
|
+
else {
|
|
16
|
+
this.entries = hashMapFrom(entries);
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
isEmpty() {
|
|
20
|
+
return this.entries.size === 0;
|
|
21
|
+
}
|
|
22
|
+
get length() {
|
|
23
|
+
let count = 0;
|
|
24
|
+
for (const [, zset] of this.entries) {
|
|
25
|
+
count += zset.length;
|
|
26
|
+
}
|
|
27
|
+
return count;
|
|
28
|
+
}
|
|
29
|
+
*getEntries() {
|
|
30
|
+
for (const [k1, zset] of this.entries) {
|
|
31
|
+
for (const [k2, w] of zset.getEntries()) {
|
|
32
|
+
yield [k1, k2, w];
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
get(k1) {
|
|
37
|
+
return this.entries.get(k1) ?? new ZSet();
|
|
38
|
+
}
|
|
39
|
+
getValue(k1, k2) {
|
|
40
|
+
return this.get(k1).get(k2);
|
|
41
|
+
}
|
|
42
|
+
addSet(k1, zset) {
|
|
43
|
+
if (zset.isEmpty())
|
|
44
|
+
return this;
|
|
45
|
+
const existing = this.entries.get(k1);
|
|
46
|
+
const merged = existing ? zset.union(existing) : zset;
|
|
47
|
+
if (merged.isEmpty()) {
|
|
48
|
+
const next = this.entries.removeKey(k1);
|
|
49
|
+
return next === this.entries ? this : new ZMap(next);
|
|
50
|
+
}
|
|
51
|
+
else {
|
|
52
|
+
const next = this.entries.set(k1, merged);
|
|
53
|
+
return next === this.entries ? this : new ZMap(next);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
add(k1, k2, weight = 1) {
|
|
57
|
+
if (weight === 0)
|
|
58
|
+
return this;
|
|
59
|
+
const builder = this.entries.toBuilder();
|
|
60
|
+
const current = builder.get(k1) ?? new ZSet();
|
|
61
|
+
const updated = current.add(k2, weight);
|
|
62
|
+
if (updated.isEmpty())
|
|
63
|
+
builder.removeKey(k1);
|
|
64
|
+
else
|
|
65
|
+
builder.set(k1, updated);
|
|
66
|
+
const next = builder.build();
|
|
67
|
+
return next === this.entries ? this : new ZMap(next);
|
|
68
|
+
}
|
|
69
|
+
remove(k1, k2, weight = 1) {
|
|
70
|
+
return this.add(k1, k2, -weight);
|
|
71
|
+
}
|
|
72
|
+
union(other) {
|
|
73
|
+
if (other.entries.size === 0)
|
|
74
|
+
return this;
|
|
75
|
+
const builder = this.entries.toBuilder();
|
|
76
|
+
for (const [k1, k2, w] of other.getEntries()) {
|
|
77
|
+
if (w === 0)
|
|
78
|
+
continue;
|
|
79
|
+
const row = builder.get(k1) ?? new ZSet();
|
|
80
|
+
const updated = row.add(k2, w);
|
|
81
|
+
if (updated.isEmpty())
|
|
82
|
+
builder.removeKey(k1);
|
|
83
|
+
else
|
|
84
|
+
builder.set(k1, updated);
|
|
85
|
+
}
|
|
86
|
+
const next = builder.build();
|
|
87
|
+
return next === this.entries ? this : new ZMap(next);
|
|
88
|
+
}
|
|
89
|
+
intersection(other) {
|
|
90
|
+
let result = emptyHashMap();
|
|
91
|
+
for (const [k, left] of this.entries) {
|
|
92
|
+
const right = other.entries.get(k);
|
|
93
|
+
if (right) {
|
|
94
|
+
const intersected = left.intersection(right);
|
|
95
|
+
if (!intersected.isEmpty()) {
|
|
96
|
+
result = result.set(k, intersected);
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
return new ZMap(result);
|
|
101
|
+
}
|
|
102
|
+
difference(other) {
|
|
103
|
+
if (other.entries.size === 0)
|
|
104
|
+
return this;
|
|
105
|
+
const builder = this.entries.toBuilder();
|
|
106
|
+
for (const [k1, k2, w] of other.getEntries()) {
|
|
107
|
+
if (w === 0)
|
|
108
|
+
continue;
|
|
109
|
+
const row = builder.get(k1) ?? new ZSet();
|
|
110
|
+
const updated = row.add(k2, -w);
|
|
111
|
+
if (updated.isEmpty())
|
|
112
|
+
builder.removeKey(k1);
|
|
113
|
+
else
|
|
114
|
+
builder.set(k1, updated);
|
|
115
|
+
}
|
|
116
|
+
const next = builder.build();
|
|
117
|
+
return next === this.entries ? this : new ZMap(next);
|
|
118
|
+
}
|
|
119
|
+
filter(pred) {
|
|
120
|
+
const builder = hashMapBuilder();
|
|
121
|
+
for (const [k, zset] of this.entries) {
|
|
122
|
+
const filtered = zset.filter((v) => pred(k, v));
|
|
123
|
+
if (!filtered.isEmpty()) {
|
|
124
|
+
builder.set(k, filtered);
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
const next = builder.build();
|
|
128
|
+
return new ZMap(next);
|
|
129
|
+
}
|
|
130
|
+
join(other) {
|
|
131
|
+
let result = emptyHashMap();
|
|
132
|
+
for (const [k, left] of this.entries) {
|
|
133
|
+
const right = other.entries.get(k);
|
|
134
|
+
if (right) {
|
|
135
|
+
const prod = left.product(right);
|
|
136
|
+
if (!prod.isEmpty())
|
|
137
|
+
result = result.set(k, prod);
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
return new ZMap(result);
|
|
141
|
+
}
|
|
142
|
+
mapValues(func) {
|
|
143
|
+
const builder = hashMapBuilder();
|
|
144
|
+
for (const [k, zset] of this.entries) {
|
|
145
|
+
builder.set(k, zset.map(func));
|
|
146
|
+
}
|
|
147
|
+
const next = builder.build();
|
|
148
|
+
return new ZMap(next);
|
|
149
|
+
}
|
|
150
|
+
flatten() {
|
|
151
|
+
let acc = new ZSet();
|
|
152
|
+
for (const [, row] of this.entries) {
|
|
153
|
+
acc = acc.union(row);
|
|
154
|
+
}
|
|
155
|
+
return acc;
|
|
156
|
+
}
|
|
157
|
+
toArray() {
|
|
158
|
+
return [...this.getEntries()];
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
//# sourceMappingURL=z-map.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"z-map.js","sourceRoot":"","sources":["../src/z-map.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { Graph, ReactiveValue } from "derivation";
|
|
2
|
+
import { ZSet } from "./z-set.js";
|
|
3
|
+
export declare class ZSetChangeInput<T> extends ReactiveValue<ZSet<T>> {
|
|
4
|
+
readonly graph: Graph;
|
|
5
|
+
private current;
|
|
6
|
+
private pending;
|
|
7
|
+
constructor(graph: Graph);
|
|
8
|
+
add(item: T, weight?: number): void;
|
|
9
|
+
push(set: ZSet<T>): void;
|
|
10
|
+
step(): void;
|
|
11
|
+
get value(): ZSet<T>;
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=z-set-change-input.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"z-set-change-input.d.ts","sourceRoot":"","sources":["../src/z-set-change-input.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAClD,OAAO,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAElC,qBAAa,eAAe,CAAC,CAAC,CAAE,SAAQ,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;aAIhC,KAAK,EAAE,KAAK;IAHxC,OAAO,CAAC,OAAO,CAAiB;IAChC,OAAO,CAAC,OAAO,CAAiB;gBAEJ,KAAK,EAAE,KAAK;IAKxC,GAAG,CAAC,IAAI,EAAE,CAAC,EAAE,MAAM,SAAI,GAAG,IAAI;IAI9B,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI;IAIxB,IAAI,IAAI,IAAI;IAKZ,IAAI,KAAK,IAAI,IAAI,CAAC,CAAC,CAAC,CAEnB;CACF"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { Graph, ReactiveValue } from "derivation";
|
|
2
|
+
import { ZSet } from "./z-set.js";
|
|
3
|
+
export class ZSetChangeInput extends ReactiveValue {
|
|
4
|
+
graph;
|
|
5
|
+
current = new ZSet();
|
|
6
|
+
pending = new ZSet();
|
|
7
|
+
constructor(graph) {
|
|
8
|
+
super();
|
|
9
|
+
this.graph = graph;
|
|
10
|
+
graph.addValue(this);
|
|
11
|
+
}
|
|
12
|
+
add(item, weight = 1) {
|
|
13
|
+
this.pending = this.pending.add(item, weight);
|
|
14
|
+
}
|
|
15
|
+
push(set) {
|
|
16
|
+
this.pending = this.pending.union(set);
|
|
17
|
+
}
|
|
18
|
+
step() {
|
|
19
|
+
this.current = this.pending;
|
|
20
|
+
this.pending = new ZSet();
|
|
21
|
+
}
|
|
22
|
+
get value() {
|
|
23
|
+
return this.current;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=z-set-change-input.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"z-set-change-input.js","sourceRoot":"","sources":["../src/z-set-change-input.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAClD,OAAO,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAElC,MAAM,OAAO,eAAmB,SAAQ,aAAsB;IAIhC;IAHpB,OAAO,GAAG,IAAI,IAAI,EAAK,CAAC;IACxB,OAAO,GAAG,IAAI,IAAI,EAAK,CAAC;IAEhC,YAA4B,KAAY;QACtC,KAAK,EAAE,CAAC;QADkB,UAAK,GAAL,KAAK,CAAO;QAEtC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IACvB,CAAC;IAED,GAAG,CAAC,IAAO,EAAE,MAAM,GAAG,CAAC;QACrB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAChD,CAAC;IAED,IAAI,CAAC,GAAY;QACf,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACzC,CAAC;IAED,IAAI;QACF,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;QAC5B,IAAI,CAAC,OAAO,GAAG,IAAI,IAAI,EAAK,CAAC;IAC/B,CAAC;IAED,IAAI,KAAK;QACP,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;CACF"}
|
package/dist/z-set.d.ts
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { ZMap } from "./z-map.js";
|
|
2
|
+
import { HashMap } from "@rimbu/core";
|
|
3
|
+
import { Tuple } from "./tuple.js";
|
|
4
|
+
export type ZSetEntry<T> = readonly [item: T, weight: number];
|
|
5
|
+
export declare class ZSet<T> {
|
|
6
|
+
private readonly entries;
|
|
7
|
+
constructor(entries?: HashMap<T, number> | Iterable<readonly [T, number]>);
|
|
8
|
+
isEmpty(): boolean;
|
|
9
|
+
get length(): number;
|
|
10
|
+
get(item: T): number;
|
|
11
|
+
getEntries(): IterableIterator<ZSetEntry<T>>;
|
|
12
|
+
add(item: T, weight?: number): ZSet<T>;
|
|
13
|
+
remove(item: T, weight?: number): ZSet<T>;
|
|
14
|
+
union(other: ZSet<T>): ZSet<T>;
|
|
15
|
+
intersection(other: ZSet<T>): ZSet<T>;
|
|
16
|
+
difference(other: ZSet<T>): ZSet<T>;
|
|
17
|
+
filter(pred: (t: T) => boolean): ZSet<T>;
|
|
18
|
+
product<A>(other: ZSet<A>): ZSet<Tuple<[T, A]>>;
|
|
19
|
+
groupBy<K>(func: (t: T) => K): ZMap<K, T>;
|
|
20
|
+
map<A>(func: (t: T) => A): ZSet<A>;
|
|
21
|
+
toString(): string;
|
|
22
|
+
toArray(): ZSetEntry<T>[];
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=z-set.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"z-set.d.ts","sourceRoot":"","sources":["../src/z-set.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAClC,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AACtC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAGnC,MAAM,MAAM,SAAS,CAAC,CAAC,IAAI,SAAS,CAAC,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;AAE9D,qBAAa,IAAI,CAAC,CAAC;IACjB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAqB;gBAEjC,OAAO,CAAC,EAAE,OAAO,CAAC,CAAC,EAAE,MAAM,CAAC,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;IAWzE,OAAO,IAAI,OAAO;IAIlB,IAAI,MAAM,IAAI,MAAM,CAEnB;IAED,GAAG,CAAC,IAAI,EAAE,CAAC,GAAG,MAAM;IAInB,UAAU,IAAI,gBAAgB,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;IAM7C,GAAG,CAAC,IAAI,EAAE,CAAC,EAAE,MAAM,SAAI,GAAG,IAAI,CAAC,CAAC,CAAC;IAcjC,MAAM,CAAC,IAAI,EAAE,CAAC,EAAE,MAAM,SAAI,GAAG,IAAI,CAAC,CAAC,CAAC;IAIpC,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;IAkB9B,YAAY,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;IAiBrC,UAAU,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;IAmBnC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC;IAYxC,OAAO,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAqB/C,OAAO,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;IAUzC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;IAUlC,QAAQ,IAAI,MAAM;IAIlB,OAAO,IAAI,SAAS,CAAC,CAAC,CAAC,EAAE;CAG1B"}
|