@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.
Files changed (69) hide show
  1. package/dist/index.d.ts +23 -0
  2. package/dist/index.d.ts.map +1 -0
  3. package/dist/index.js +31 -0
  4. package/dist/index.js.map +1 -0
  5. package/dist/log-change-input.d.ts +13 -0
  6. package/dist/log-change-input.d.ts.map +1 -0
  7. package/dist/log-change-input.js +26 -0
  8. package/dist/log-change-input.js.map +1 -0
  9. package/dist/reactive-log-source.d.ts +10 -0
  10. package/dist/reactive-log-source.d.ts.map +1 -0
  11. package/dist/reactive-log-source.js +19 -0
  12. package/dist/reactive-log-source.js.map +1 -0
  13. package/dist/reactive-log.d.ts +22 -0
  14. package/dist/reactive-log.d.ts.map +1 -0
  15. package/dist/reactive-log.js +73 -0
  16. package/dist/reactive-log.js.map +1 -0
  17. package/dist/reactive-map-source.d.ts +10 -0
  18. package/dist/reactive-map-source.d.ts.map +1 -0
  19. package/dist/reactive-map-source.js +19 -0
  20. package/dist/reactive-map-source.js.map +1 -0
  21. package/dist/reactive-map.d.ts +24 -0
  22. package/dist/reactive-map.d.ts.map +1 -0
  23. package/dist/reactive-map.js +59 -0
  24. package/dist/reactive-map.js.map +1 -0
  25. package/dist/reactive-set-source.d.ts +10 -0
  26. package/dist/reactive-set-source.d.ts.map +1 -0
  27. package/dist/reactive-set-source.js +19 -0
  28. package/dist/reactive-set-source.js.map +1 -0
  29. package/dist/reactive-set.d.ts +21 -0
  30. package/dist/reactive-set.d.ts.map +1 -0
  31. package/dist/reactive-set.js +58 -0
  32. package/dist/reactive-set.js.map +1 -0
  33. package/dist/rimbu-utils.d.ts +28 -0
  34. package/dist/rimbu-utils.d.ts.map +1 -0
  35. package/dist/rimbu-utils.js +46 -0
  36. package/dist/rimbu-utils.js.map +1 -0
  37. package/dist/test/reactive-log.test.d.ts +2 -0
  38. package/dist/test/reactive-log.test.d.ts.map +1 -0
  39. package/dist/test/reactive-log.test.js +228 -0
  40. package/dist/test/reactive-log.test.js.map +1 -0
  41. package/dist/test/reactive.test.d.ts +2 -0
  42. package/dist/test/reactive.test.d.ts.map +1 -0
  43. package/dist/test/reactive.test.js +240 -0
  44. package/dist/test/reactive.test.js.map +1 -0
  45. package/dist/test/z-map-set.test.d.ts +2 -0
  46. package/dist/test/z-map-set.test.d.ts.map +1 -0
  47. package/dist/test/z-map-set.test.js +251 -0
  48. package/dist/test/z-map-set.test.js.map +1 -0
  49. package/dist/tuple.d.ts +6 -0
  50. package/dist/tuple.d.ts.map +1 -0
  51. package/dist/tuple.js +5 -0
  52. package/dist/tuple.js.map +1 -0
  53. package/dist/z-map-change-input.d.ts +13 -0
  54. package/dist/z-map-change-input.d.ts.map +1 -0
  55. package/dist/z-map-change-input.js +26 -0
  56. package/dist/z-map-change-input.js.map +1 -0
  57. package/dist/z-map.d.ts +25 -0
  58. package/dist/z-map.d.ts.map +1 -0
  59. package/dist/z-map.js +161 -0
  60. package/dist/z-map.js.map +1 -0
  61. package/dist/z-set-change-input.d.ts +13 -0
  62. package/dist/z-set-change-input.d.ts.map +1 -0
  63. package/dist/z-set-change-input.js +26 -0
  64. package/dist/z-set-change-input.js.map +1 -0
  65. package/dist/z-set.d.ts +24 -0
  66. package/dist/z-set.d.ts.map +1 -0
  67. package/dist/z-set.js +148 -0
  68. package/dist/z-set.js.map +1 -0
  69. 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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"}
@@ -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,5 @@
1
+ import { List } from "immutable";
2
+ export function Tuple(...values) {
3
+ return List(values);
4
+ }
5
+ //# sourceMappingURL=tuple.js.map
@@ -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"}
@@ -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"}
@@ -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"}