binary-decision-diagram 4.0.0 → 5.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.
Files changed (185) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/README.md +211 -31
  3. package/dist/cjs/src/abstract-node.js +7 -4
  4. package/dist/cjs/src/abstract-node.js.map +1 -1
  5. package/dist/cjs/src/branches.d.ts +1 -0
  6. package/dist/cjs/src/branches.js +2 -1
  7. package/dist/cjs/src/branches.js.map +1 -1
  8. package/dist/cjs/src/create-bdd-from-truth-table.js.map +1 -1
  9. package/dist/cjs/src/index.d.ts +2 -1
  10. package/dist/cjs/src/index.es5.js +17 -7
  11. package/dist/cjs/src/index.es5.js.map +1 -1
  12. package/dist/cjs/src/index.js +2 -1
  13. package/dist/cjs/src/index.js.map +1 -1
  14. package/dist/cjs/src/internal-node.js +6 -3
  15. package/dist/cjs/src/internal-node.js.map +1 -1
  16. package/dist/cjs/src/optimize-brute-force.js +5 -7
  17. package/dist/cjs/src/optimize-brute-force.js.map +1 -1
  18. package/dist/cjs/src/ordering/build-bdd.d.ts +13 -0
  19. package/dist/cjs/src/ordering/build-bdd.js +64 -0
  20. package/dist/cjs/src/ordering/build-bdd.js.map +1 -0
  21. package/dist/cjs/src/ordering/dense-truth-table.d.ts +42 -0
  22. package/dist/cjs/src/ordering/dense-truth-table.js +125 -0
  23. package/dist/cjs/src/ordering/dense-truth-table.js.map +1 -0
  24. package/dist/cjs/src/ordering/exact-cost-ordering.d.ts +91 -0
  25. package/dist/cjs/src/ordering/exact-cost-ordering.js +351 -0
  26. package/dist/cjs/src/ordering/exact-cost-ordering.js.map +1 -0
  27. package/dist/cjs/src/ordering/exact-ordering.d.ts +89 -0
  28. package/dist/cjs/src/ordering/exact-ordering.js +260 -0
  29. package/dist/cjs/src/ordering/exact-ordering.js.map +1 -0
  30. package/dist/cjs/src/ordering/index.d.ts +22 -0
  31. package/dist/cjs/src/ordering/index.js +38 -0
  32. package/dist/cjs/src/ordering/index.js.map +1 -0
  33. package/dist/cjs/src/ordering/int-pair-map.d.ts +20 -0
  34. package/dist/cjs/src/ordering/int-pair-map.js +85 -0
  35. package/dist/cjs/src/ordering/int-pair-map.js.map +1 -0
  36. package/dist/cjs/src/ordering/local-search.d.ts +114 -0
  37. package/dist/cjs/src/ordering/local-search.js +317 -0
  38. package/dist/cjs/src/ordering/local-search.js.map +1 -0
  39. package/dist/cjs/src/ordering/optimize-ordering.d.ts +153 -0
  40. package/dist/cjs/src/ordering/optimize-ordering.js +406 -0
  41. package/dist/cjs/src/ordering/optimize-ordering.js.map +1 -0
  42. package/dist/cjs/src/ordering/ordering-evaluator.d.ts +198 -0
  43. package/dist/cjs/src/ordering/ordering-evaluator.js +384 -0
  44. package/dist/cjs/src/ordering/ordering-evaluator.js.map +1 -0
  45. package/dist/cjs/src/ordering/shared-diagram.d.ts +85 -0
  46. package/dist/cjs/src/ordering/shared-diagram.js +295 -0
  47. package/dist/cjs/src/ordering/shared-diagram.js.map +1 -0
  48. package/dist/cjs/src/packed/index.d.ts +2 -0
  49. package/dist/cjs/src/{minimal-string → packed}/index.js +2 -5
  50. package/dist/cjs/src/packed/index.js.map +1 -0
  51. package/dist/cjs/src/packed/packed-bdd-base64-string.d.ts +3 -0
  52. package/dist/cjs/src/packed/packed-bdd-base64-string.js +46 -0
  53. package/dist/cjs/src/packed/packed-bdd-base64-string.js.map +1 -0
  54. package/dist/cjs/src/packed/packed-bdd.d.ts +13 -0
  55. package/dist/cjs/src/packed/packed-bdd.js +70 -0
  56. package/dist/cjs/src/packed/packed-bdd.js.map +1 -0
  57. package/dist/cjs/src/root-node.d.ts +1 -2
  58. package/dist/cjs/src/root-node.js +1 -5
  59. package/dist/cjs/src/root-node.js.map +1 -1
  60. package/dist/cjs/src/types.d.ts +0 -12
  61. package/dist/cjs/src/util.js +14 -5
  62. package/dist/cjs/src/util.js.map +1 -1
  63. package/dist/esm/src/abstract-node.js +7 -4
  64. package/dist/esm/src/abstract-node.js.map +1 -1
  65. package/dist/esm/src/branches.d.ts +1 -0
  66. package/dist/esm/src/branches.js +1 -0
  67. package/dist/esm/src/branches.js.map +1 -1
  68. package/dist/esm/src/create-bdd-from-truth-table.js.map +1 -1
  69. package/dist/esm/src/index.d.ts +2 -1
  70. package/dist/esm/src/index.js +2 -1
  71. package/dist/esm/src/index.js.map +1 -1
  72. package/dist/esm/src/internal-node.js +7 -4
  73. package/dist/esm/src/internal-node.js.map +1 -1
  74. package/dist/esm/src/optimize-brute-force.js +5 -7
  75. package/dist/esm/src/optimize-brute-force.js.map +1 -1
  76. package/dist/esm/src/ordering/build-bdd.d.ts +13 -0
  77. package/dist/esm/src/ordering/build-bdd.js +61 -0
  78. package/dist/esm/src/ordering/build-bdd.js.map +1 -0
  79. package/dist/esm/src/ordering/dense-truth-table.d.ts +42 -0
  80. package/dist/esm/src/ordering/dense-truth-table.js +117 -0
  81. package/dist/esm/src/ordering/dense-truth-table.js.map +1 -0
  82. package/dist/esm/src/ordering/exact-cost-ordering.d.ts +91 -0
  83. package/dist/esm/src/ordering/exact-cost-ordering.js +347 -0
  84. package/dist/esm/src/ordering/exact-cost-ordering.js.map +1 -0
  85. package/dist/esm/src/ordering/exact-ordering.d.ts +89 -0
  86. package/dist/esm/src/ordering/exact-ordering.js +256 -0
  87. package/dist/esm/src/ordering/exact-ordering.js.map +1 -0
  88. package/dist/esm/src/ordering/index.d.ts +22 -0
  89. package/dist/esm/src/ordering/index.js +17 -0
  90. package/dist/esm/src/ordering/index.js.map +1 -0
  91. package/dist/esm/src/ordering/int-pair-map.d.ts +20 -0
  92. package/dist/esm/src/ordering/int-pair-map.js +81 -0
  93. package/dist/esm/src/ordering/int-pair-map.js.map +1 -0
  94. package/dist/esm/src/ordering/local-search.d.ts +114 -0
  95. package/dist/esm/src/ordering/local-search.js +308 -0
  96. package/dist/esm/src/ordering/local-search.js.map +1 -0
  97. package/dist/esm/src/ordering/optimize-ordering.d.ts +153 -0
  98. package/dist/esm/src/ordering/optimize-ordering.js +399 -0
  99. package/dist/esm/src/ordering/optimize-ordering.js.map +1 -0
  100. package/dist/esm/src/ordering/ordering-evaluator.d.ts +198 -0
  101. package/dist/esm/src/ordering/ordering-evaluator.js +377 -0
  102. package/dist/esm/src/ordering/ordering-evaluator.js.map +1 -0
  103. package/dist/esm/src/ordering/shared-diagram.d.ts +85 -0
  104. package/dist/esm/src/ordering/shared-diagram.js +289 -0
  105. package/dist/esm/src/ordering/shared-diagram.js.map +1 -0
  106. package/dist/esm/src/packed/index.d.ts +2 -0
  107. package/dist/esm/src/packed/index.js +3 -0
  108. package/dist/esm/src/packed/index.js.map +1 -0
  109. package/dist/esm/src/packed/packed-bdd-base64-string.d.ts +3 -0
  110. package/dist/esm/src/packed/packed-bdd-base64-string.js +42 -0
  111. package/dist/esm/src/packed/packed-bdd-base64-string.js.map +1 -0
  112. package/dist/esm/src/packed/packed-bdd.d.ts +13 -0
  113. package/dist/esm/src/packed/packed-bdd.js +66 -0
  114. package/dist/esm/src/packed/packed-bdd.js.map +1 -0
  115. package/dist/esm/src/root-node.d.ts +1 -2
  116. package/dist/esm/src/root-node.js +1 -5
  117. package/dist/esm/src/root-node.js.map +1 -1
  118. package/dist/esm/src/types.d.ts +0 -12
  119. package/dist/esm/src/util.js +14 -5
  120. package/dist/esm/src/util.js.map +1 -1
  121. package/docs/variable-ordering.md +306 -0
  122. package/package.json +11 -9
  123. package/src/abstract-node.ts +7 -5
  124. package/src/branches.ts +2 -0
  125. package/src/create-bdd-from-truth-table.ts +1 -1
  126. package/src/index.ts +2 -1
  127. package/src/internal-node.ts +7 -4
  128. package/src/optimize-brute-force.ts +5 -7
  129. package/src/ordering/build-bdd.ts +70 -0
  130. package/src/ordering/dense-truth-table.ts +161 -0
  131. package/src/ordering/exact-cost-ordering.ts +425 -0
  132. package/src/ordering/exact-ordering.ts +317 -0
  133. package/src/ordering/index.ts +57 -0
  134. package/src/ordering/int-pair-map.ts +85 -0
  135. package/src/ordering/local-search.ts +369 -0
  136. package/src/ordering/optimize-ordering.ts +570 -0
  137. package/src/ordering/ordering-evaluator.ts +479 -0
  138. package/src/ordering/shared-diagram.ts +310 -0
  139. package/src/packed/index.ts +2 -0
  140. package/src/packed/packed-bdd-base64-string.ts +47 -0
  141. package/src/packed/packed-bdd.ts +98 -0
  142. package/src/root-node.ts +2 -8
  143. package/src/types.ts +0 -18
  144. package/src/util.ts +15 -6
  145. package/dist/cjs/src/minimal-string/bdd-to-minimal-string.d.ts +0 -8
  146. package/dist/cjs/src/minimal-string/bdd-to-minimal-string.js +0 -59
  147. package/dist/cjs/src/minimal-string/bdd-to-minimal-string.js.map +0 -1
  148. package/dist/cjs/src/minimal-string/bdd-to-simple-bdd.d.ts +0 -11
  149. package/dist/cjs/src/minimal-string/bdd-to-simple-bdd.js +0 -23
  150. package/dist/cjs/src/minimal-string/bdd-to-simple-bdd.js.map +0 -1
  151. package/dist/cjs/src/minimal-string/index.d.ts +0 -5
  152. package/dist/cjs/src/minimal-string/index.js.map +0 -1
  153. package/dist/cjs/src/minimal-string/minimal-string-to-simple-bdd.d.ts +0 -2
  154. package/dist/cjs/src/minimal-string/minimal-string-to-simple-bdd.js +0 -57
  155. package/dist/cjs/src/minimal-string/minimal-string-to-simple-bdd.js.map +0 -1
  156. package/dist/cjs/src/minimal-string/resolve-with-simple-bdd.d.ts +0 -2
  157. package/dist/cjs/src/minimal-string/resolve-with-simple-bdd.js +0 -18
  158. package/dist/cjs/src/minimal-string/resolve-with-simple-bdd.js.map +0 -1
  159. package/dist/cjs/src/minimal-string/string-format.d.ts +0 -9
  160. package/dist/cjs/src/minimal-string/string-format.js +0 -61
  161. package/dist/cjs/src/minimal-string/string-format.js.map +0 -1
  162. package/dist/esm/src/minimal-string/bdd-to-minimal-string.d.ts +0 -8
  163. package/dist/esm/src/minimal-string/bdd-to-minimal-string.js +0 -55
  164. package/dist/esm/src/minimal-string/bdd-to-minimal-string.js.map +0 -1
  165. package/dist/esm/src/minimal-string/bdd-to-simple-bdd.d.ts +0 -11
  166. package/dist/esm/src/minimal-string/bdd-to-simple-bdd.js +0 -19
  167. package/dist/esm/src/minimal-string/bdd-to-simple-bdd.js.map +0 -1
  168. package/dist/esm/src/minimal-string/index.d.ts +0 -5
  169. package/dist/esm/src/minimal-string/index.js +0 -6
  170. package/dist/esm/src/minimal-string/index.js.map +0 -1
  171. package/dist/esm/src/minimal-string/minimal-string-to-simple-bdd.d.ts +0 -2
  172. package/dist/esm/src/minimal-string/minimal-string-to-simple-bdd.js +0 -54
  173. package/dist/esm/src/minimal-string/minimal-string-to-simple-bdd.js.map +0 -1
  174. package/dist/esm/src/minimal-string/resolve-with-simple-bdd.d.ts +0 -2
  175. package/dist/esm/src/minimal-string/resolve-with-simple-bdd.js +0 -15
  176. package/dist/esm/src/minimal-string/resolve-with-simple-bdd.js.map +0 -1
  177. package/dist/esm/src/minimal-string/string-format.d.ts +0 -9
  178. package/dist/esm/src/minimal-string/string-format.js +0 -54
  179. package/dist/esm/src/minimal-string/string-format.js.map +0 -1
  180. package/src/minimal-string/bdd-to-minimal-string.ts +0 -72
  181. package/src/minimal-string/bdd-to-simple-bdd.ts +0 -31
  182. package/src/minimal-string/index.ts +0 -5
  183. package/src/minimal-string/minimal-string-to-simple-bdd.ts +0 -67
  184. package/src/minimal-string/resolve-with-simple-bdd.ts +0 -23
  185. package/src/minimal-string/string-format.ts +0 -67
@@ -0,0 +1,295 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.StateHeap = exports.SharedDiagram = exports.DEFAULT_MAX_DIAGRAM_NODES = exports.DiagramBudgetExceededError = void 0;
4
+ const dense_truth_table_js_1 = require("./dense-truth-table.js");
5
+ const ordering_evaluator_js_1 = require("./ordering-evaluator.js");
6
+ const int_pair_map_js_1 = require("./int-pair-map.js");
7
+ /**
8
+ * thrown by SharedDiagram when more nodes than allowed would be created
9
+ */
10
+ class DiagramBudgetExceededError extends Error {
11
+ constructor() {
12
+ super('the exact search would need more diagram nodes than allowed');
13
+ }
14
+ }
15
+ exports.DiagramBudgetExceededError = DiagramBudgetExceededError;
16
+ exports.DEFAULT_MAX_DIAGRAM_NODES = 4000000;
17
+ /**
18
+ * A hash-consed decision diagram of a fully specified truth table in the
19
+ * natural variable order, with a restrict() operation.
20
+ *
21
+ * Because the variable order is fixed, two functions are equal if and only if
22
+ * they have the same node id. The exact searches rely on this to recognize
23
+ * equal cofactors.
24
+ */
25
+ class SharedDiagram {
26
+ table;
27
+ variableCount;
28
+ terminalCount;
29
+ rootId;
30
+ /** the boolean functions the truth table depends on, ascending */
31
+ relevant;
32
+ /** bit index of each relevant boolean function inside support masks, -1 for irrelevant ones */
33
+ compactOf;
34
+ nodeVar;
35
+ nodeLo;
36
+ nodeHi;
37
+ nodeSupport;
38
+ nodeCount;
39
+ uniqueTables;
40
+ restrictMemo = new int_pair_map_js_1.IntPairMap(1 << 16);
41
+ maxNodes;
42
+ constructor(table,
43
+ /**
44
+ * restrict() creates nodes for the restricted functions, which can be a lot
45
+ * on unstructured functions. More nodes than this throw a DiagramBudgetExceededError.
46
+ * Default: 4000000 (roughly 400 MB)
47
+ */
48
+ maxNodes = exports.DEFAULT_MAX_DIAGRAM_NODES) {
49
+ this.table = table;
50
+ this.maxNodes = maxNodes;
51
+ this.variableCount = table.variableCount;
52
+ this.terminalCount = table.terminalValues.length;
53
+ const evaluator = new ordering_evaluator_js_1.OrderingEvaluator(table);
54
+ const diagram = evaluator.buildDiagram((0, dense_truth_table_js_1.naturalOrdering)(this.variableCount));
55
+ const count = diagram.nodeLevel.length;
56
+ const capacity = Math.max(1024, count * 2);
57
+ this.nodeVar = new Int32Array(capacity);
58
+ this.nodeLo = new Int32Array(capacity);
59
+ this.nodeHi = new Int32Array(capacity);
60
+ this.nodeSupport = new Int32Array(capacity);
61
+ this.nodeVar.set(diagram.nodeLevel);
62
+ this.nodeLo.set(diagram.nodeLo);
63
+ this.nodeHi.set(diagram.nodeHi);
64
+ this.nodeCount = count;
65
+ this.rootId = diagram.root;
66
+ // relevant variables and their compact bit index
67
+ this.compactOf = new Int32Array(this.variableCount).fill(-1);
68
+ this.relevant = [];
69
+ const rootSupport = this.rawSupport(diagram.root);
70
+ for (let v = 0; v < this.variableCount; v++) {
71
+ if ((rootSupport & (1 << v)) !== 0) {
72
+ this.compactOf[v] = this.relevant.length;
73
+ this.relevant.push(v);
74
+ }
75
+ }
76
+ // support masks in compact bit indexes; children always have smaller ids
77
+ for (let i = 0; i < count; i++) {
78
+ this.nodeSupport[i] = this.supportOf(this.nodeLo[i]) |
79
+ this.supportOf(this.nodeHi[i]) |
80
+ (1 << this.compactOf[this.nodeVar[i]]);
81
+ }
82
+ this.uniqueTables = [];
83
+ for (let v = 0; v < this.variableCount; v++) {
84
+ this.uniqueTables.push(new int_pair_map_js_1.IntPairMap(256));
85
+ }
86
+ for (let id = this.terminalCount; id < this.terminalCount + count; id++) {
87
+ const i = id - this.terminalCount;
88
+ this.uniqueTables[this.nodeVar[i]].set(this.nodeLo[i], this.nodeHi[i], id);
89
+ }
90
+ }
91
+ isTerminal(id) {
92
+ return id < this.terminalCount;
93
+ }
94
+ /** amount of internal nodes created so far */
95
+ get size() {
96
+ return this.nodeCount;
97
+ }
98
+ /** true when the diagram of the natural ordering alone already exceeds the node budget */
99
+ get overBudget() {
100
+ return this.nodeCount > this.maxNodes;
101
+ }
102
+ /**
103
+ * support mask (compact bit indexes) of a node, 0 for terminals
104
+ */
105
+ supportOf(id) {
106
+ return id < this.terminalCount ? 0 : this.nodeSupport[id - this.terminalCount];
107
+ }
108
+ dependsOn(id, variable) {
109
+ return (this.supportOf(id) & (1 << this.compactOf[variable])) !== 0;
110
+ }
111
+ /**
112
+ * the function with `variable` fixed to `value`
113
+ */
114
+ restrict(g, variable, value) {
115
+ if (g < this.terminalCount) {
116
+ return g;
117
+ }
118
+ const index = g - this.terminalCount;
119
+ if ((this.nodeSupport[index] & (1 << this.compactOf[variable])) === 0) {
120
+ return g;
121
+ }
122
+ const v = this.nodeVar[index];
123
+ if (v === variable) {
124
+ return value === 0 ? this.nodeLo[index] : this.nodeHi[index];
125
+ }
126
+ const memoKey = variable * 2 + value;
127
+ const memo = this.restrictMemo.get(g, memoKey);
128
+ if (memo !== -1) {
129
+ return memo;
130
+ }
131
+ const lo = this.restrict(this.nodeLo[index], variable, value);
132
+ const hi = this.restrict(this.nodeHi[index], variable, value);
133
+ const result = this.makeNode(v, lo, hi);
134
+ this.restrictMemo.set(g, memoKey, result);
135
+ return result;
136
+ }
137
+ /**
138
+ * Moves the boolean functions the truth table does not depend on
139
+ * to the bottom, keeping the order of the others.
140
+ */
141
+ normalizeOrdering(ordering) {
142
+ const relevant = [];
143
+ const irrelevant = [];
144
+ for (let i = 0; i < ordering.length; i++) {
145
+ if (this.compactOf[ordering[i]] === -1) {
146
+ irrelevant.push(ordering[i]);
147
+ }
148
+ else {
149
+ relevant.push(ordering[i]);
150
+ }
151
+ }
152
+ return relevant.concat(irrelevant);
153
+ }
154
+ irrelevantVariables() {
155
+ return (0, dense_truth_table_js_1.naturalOrdering)(this.variableCount).filter(v => this.compactOf[v] === -1);
156
+ }
157
+ makeNode(variable, lo, hi) {
158
+ if (lo === hi) {
159
+ return lo;
160
+ }
161
+ const table = this.uniqueTables[variable];
162
+ const existing = table.get(lo, hi);
163
+ if (existing !== -1) {
164
+ return existing;
165
+ }
166
+ if (this.nodeCount >= this.maxNodes) {
167
+ throw new DiagramBudgetExceededError();
168
+ }
169
+ if (this.nodeCount === this.nodeVar.length) {
170
+ this.growNodes();
171
+ }
172
+ const index = this.nodeCount++;
173
+ const id = index + this.terminalCount;
174
+ this.nodeVar[index] = variable;
175
+ this.nodeLo[index] = lo;
176
+ this.nodeHi[index] = hi;
177
+ this.nodeSupport[index] = this.supportOf(lo) | this.supportOf(hi) | (1 << this.compactOf[variable]);
178
+ table.set(lo, hi, id);
179
+ return id;
180
+ }
181
+ /**
182
+ * support in natural variable bits, only used before the compact mapping exists
183
+ */
184
+ rawSupport(id) {
185
+ const memo = new Map();
186
+ const recurse = (node) => {
187
+ if (node < this.terminalCount) {
188
+ return 0;
189
+ }
190
+ const known = memo.get(node);
191
+ if (known !== undefined) {
192
+ return known;
193
+ }
194
+ const index = node - this.terminalCount;
195
+ const ret = recurse(this.nodeLo[index]) | recurse(this.nodeHi[index]) | (1 << this.nodeVar[index]);
196
+ memo.set(node, ret);
197
+ return ret;
198
+ };
199
+ return recurse(id);
200
+ }
201
+ growNodes() {
202
+ const capacity = this.nodeVar.length * 2;
203
+ const grow = (old) => {
204
+ const ret = new Int32Array(capacity);
205
+ ret.set(old);
206
+ return ret;
207
+ };
208
+ this.nodeVar = grow(this.nodeVar);
209
+ this.nodeLo = grow(this.nodeLo);
210
+ this.nodeHi = grow(this.nodeHi);
211
+ this.nodeSupport = grow(this.nodeSupport);
212
+ }
213
+ }
214
+ exports.SharedDiagram = SharedDiagram;
215
+ /**
216
+ * binary min-heap of search states, deterministic tie breaking:
217
+ * smaller estimate first, then larger cost (deeper states), then smaller subset
218
+ */
219
+ class StateHeap {
220
+ estimates = [];
221
+ costs = [];
222
+ subsets = [];
223
+ get size() {
224
+ return this.estimates.length;
225
+ }
226
+ push(estimate, cost, subset) {
227
+ this.estimates.push(estimate);
228
+ this.costs.push(cost);
229
+ this.subsets.push(subset);
230
+ let i = this.estimates.length - 1;
231
+ while (i > 0) {
232
+ const parent = (i - 1) >> 1;
233
+ if (this.less(i, parent)) {
234
+ this.swap(i, parent);
235
+ i = parent;
236
+ }
237
+ else {
238
+ break;
239
+ }
240
+ }
241
+ }
242
+ pop() {
243
+ const ret = {
244
+ estimate: this.estimates[0],
245
+ cost: this.costs[0],
246
+ subset: this.subsets[0]
247
+ };
248
+ const last = this.estimates.length - 1;
249
+ this.swap(0, last);
250
+ this.estimates.pop();
251
+ this.costs.pop();
252
+ this.subsets.pop();
253
+ let i = 0;
254
+ const size = this.estimates.length;
255
+ while (true) {
256
+ const left = i * 2 + 1;
257
+ const right = left + 1;
258
+ let smallest = i;
259
+ if (left < size && this.less(left, smallest)) {
260
+ smallest = left;
261
+ }
262
+ if (right < size && this.less(right, smallest)) {
263
+ smallest = right;
264
+ }
265
+ if (smallest === i) {
266
+ break;
267
+ }
268
+ this.swap(i, smallest);
269
+ i = smallest;
270
+ }
271
+ return ret;
272
+ }
273
+ less(a, b) {
274
+ if (this.estimates[a] !== this.estimates[b]) {
275
+ return this.estimates[a] < this.estimates[b];
276
+ }
277
+ if (this.costs[a] !== this.costs[b]) {
278
+ return this.costs[a] > this.costs[b];
279
+ }
280
+ return this.subsets[a] < this.subsets[b];
281
+ }
282
+ swap(a, b) {
283
+ let tmp = this.estimates[a];
284
+ this.estimates[a] = this.estimates[b];
285
+ this.estimates[b] = tmp;
286
+ tmp = this.costs[a];
287
+ this.costs[a] = this.costs[b];
288
+ this.costs[b] = tmp;
289
+ tmp = this.subsets[a];
290
+ this.subsets[a] = this.subsets[b];
291
+ this.subsets[b] = tmp;
292
+ }
293
+ }
294
+ exports.StateHeap = StateHeap;
295
+ //# sourceMappingURL=shared-diagram.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shared-diagram.js","sourceRoot":"","sources":["../../../../src/ordering/shared-diagram.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export * from './packed-bdd.js';
2
+ export * from './packed-bdd-base64-string.js';
@@ -14,9 +14,6 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
14
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
- __exportStar(require("./bdd-to-minimal-string.js"), exports);
18
- __exportStar(require("./minimal-string-to-simple-bdd.js"), exports);
19
- __exportStar(require("./resolve-with-simple-bdd.js"), exports);
20
- __exportStar(require("./string-format.js"), exports);
21
- __exportStar(require("./bdd-to-simple-bdd.js"), exports);
17
+ __exportStar(require("./packed-bdd.js"), exports);
18
+ __exportStar(require("./packed-bdd-base64-string.js"), exports);
22
19
  //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/packed/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,kDAAgC;AAChC,gEAA8C"}
@@ -0,0 +1,3 @@
1
+ import type { PackedBdd } from './packed-bdd.js';
2
+ export declare function packedBddToBase64String(packedBdd: PackedBdd): string;
3
+ export declare function packedBddFromBase64String(str: string): PackedBdd;
@@ -0,0 +1,46 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.packedBddToBase64String = packedBddToBase64String;
4
+ exports.packedBddFromBase64String = packedBddFromBase64String;
5
+ /*
6
+
7
+ String transport format of a PackedBdd, to embed it into JavaScript source code.
8
+ The string only contains ASCII characters that are safe inside of quotes,
9
+ so bundlers and minifiers never have to escape anything.
10
+
11
+ - The first char is the byte width of the entries: '1', '2' or '4'
12
+ - The rest is the standard base64 of the memory of the typed array
13
+
14
+ The base64 is decoded with the native Uint8Array.fromBase64() where it exists
15
+ and with atob() everywhere else, both are faster than decoding it in JavaScript.
16
+ The typed array then directly uses the decoded memory. This assumes a little-endian
17
+ platform, which are all browsers and nearly all Node.js servers.
18
+
19
+ */
20
+ function packedBddToBase64String(packedBdd) {
21
+ const bytes = new Uint8Array(packedBdd.buffer, packedBdd.byteOffset, packedBdd.byteLength);
22
+ let binary = '';
23
+ const chunkSize = 0x8000;
24
+ for (let i = 0; i < bytes.length; i += chunkSize) {
25
+ binary += String.fromCharCode.apply(null, bytes.subarray(i, i + chunkSize));
26
+ }
27
+ return packedBdd.BYTES_PER_ELEMENT + btoa(binary);
28
+ }
29
+ function base64ToBytes(base64) {
30
+ const fromBase64 = Uint8Array.fromBase64;
31
+ if (fromBase64) {
32
+ return fromBase64(base64);
33
+ }
34
+ const binary = atob(base64);
35
+ const bytes = new Uint8Array(binary.length);
36
+ for (let i = 0; i < binary.length; i++) {
37
+ bytes[i] = binary.charCodeAt(i);
38
+ }
39
+ return bytes;
40
+ }
41
+ function packedBddFromBase64String(str) {
42
+ const width = str.charCodeAt(0) - 48;
43
+ const bytes = base64ToBytes(str.slice(1));
44
+ return width === 1 ? bytes : width === 2 ? new Uint16Array(bytes.buffer) : new Uint32Array(bytes.buffer);
45
+ }
46
+ //# sourceMappingURL=packed-bdd-base64-string.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"packed-bdd-base64-string.js","sourceRoot":"","sources":["../../../../src/packed/packed-bdd-base64-string.ts"],"names":[],"mappings":";;AAkBA,0DASC;AAeD,8DAIC;AA5CD;;;;;;;;;;;;;;EAcE;AAEF,SAAgB,uBAAuB,CAAC,SAAoB;IACxD,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,SAAS,CAAC,MAAM,EAAE,SAAS,CAAC,UAAU,EAAE,SAAS,CAAC,UAAU,CAAC,CAAC;IAE3F,IAAI,MAAM,GAAG,EAAE,CAAC;IAChB,MAAM,SAAS,GAAG,MAAM,CAAC;IACzB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,IAAI,SAAS,EAAE,CAAC;QAC/C,MAAM,IAAI,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,GAAG,SAAS,CAAQ,CAAC,CAAC;IACvF,CAAC;IACD,OAAO,SAAS,CAAC,iBAAiB,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;AACtD,CAAC;AAED,SAAS,aAAa,CAAC,MAAc;IACjC,MAAM,UAAU,GAAI,UAAkB,CAAC,UAAU,CAAC;IAClD,IAAI,UAAU,EAAE,CAAC;QACb,OAAO,UAAU,CAAC,MAAM,CAAC,CAAC;IAC9B,CAAC;IACD,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;IAC5B,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAC5C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,KAAK,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;IACpC,CAAC;IACD,OAAO,KAAK,CAAC;AACjB,CAAC;AAED,SAAgB,yBAAyB,CAAC,GAAW;IACjD,MAAM,KAAK,GAAG,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;IACrC,MAAM,KAAK,GAAG,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAC1C,OAAO,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,WAAW,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,WAAW,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;AAC7G,CAAC"}
@@ -0,0 +1,13 @@
1
+ import type { RootNode } from '../root-node.js';
2
+ import type { ResolverFunctions } from '../types.js';
3
+ export type PackedBdd = Uint8Array | Uint16Array | Uint32Array;
4
+ /**
5
+ * Creates a PackedBdd from a (minimized) BDD.
6
+ * The leaf values must be non-negative integers.
7
+ */
8
+ export declare function bddToPackedBdd(bdd: RootNode): PackedBdd;
9
+ /**
10
+ * Resolves a value by walking directly over the PackedBdd.
11
+ * Works with every array type (also a plain number[]).
12
+ */
13
+ export declare function resolveWithPackedBdd<T = any>(packedBdd: ArrayLike<number>, fns: ResolverFunctions<T>, input: T): number;
@@ -0,0 +1,70 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.bddToPackedBdd = bddToPackedBdd;
4
+ exports.resolveWithPackedBdd = resolveWithPackedBdd;
5
+ /**
6
+ * Creates a PackedBdd from a (minimized) BDD.
7
+ * The leaf values must be non-negative integers.
8
+ */
9
+ function bddToPackedBdd(bdd) {
10
+ const branchesOf = (node) => node.branches;
11
+ // breadth first, branch 0 before branch 1, so the output is deterministic
12
+ const nonLeafNodes = [bdd];
13
+ const idByNode = new Map([[bdd, 0]]);
14
+ for (let i = 0; i < nonLeafNodes.length; i++) {
15
+ const branches = branchesOf(nonLeafNodes[i]);
16
+ for (const child of [branches.getBranch('0'), branches.getBranch('1')]) {
17
+ if (!child.isLeafNode() && !idByNode.has(child)) {
18
+ idByNode.set(child, nonLeafNodes.length);
19
+ nonLeafNodes.push(child);
20
+ }
21
+ }
22
+ }
23
+ const n = nonLeafNodes.length;
24
+ const ref = (node) => {
25
+ if (!node.isLeafNode()) {
26
+ return idByNode.get(node);
27
+ }
28
+ const value = node.asLeafNode().value;
29
+ if (!Number.isInteger(value) || value < 0) {
30
+ throw new Error('PackedBdd only supports non-negative integer leaf values, got ' + value);
31
+ }
32
+ return n + value;
33
+ };
34
+ const entries = [];
35
+ let max = 0;
36
+ nonLeafNodes.forEach(node => {
37
+ const branches = branchesOf(node);
38
+ const nodeEntries = [node.level, ref(branches.getBranch('0')), ref(branches.getBranch('1'))];
39
+ nodeEntries.forEach(entry => {
40
+ entries.push(entry);
41
+ max = Math.max(max, entry);
42
+ });
43
+ });
44
+ if (max <= 0xFF) {
45
+ return Uint8Array.from(entries);
46
+ }
47
+ else if (max <= 0xFFFF) {
48
+ return Uint16Array.from(entries);
49
+ }
50
+ else if (max <= 0xFFFFFFFF) {
51
+ return Uint32Array.from(entries);
52
+ }
53
+ throw new Error('BDD too big for a PackedBdd');
54
+ }
55
+ /**
56
+ * Resolves a value by walking directly over the PackedBdd.
57
+ * Works with every array type (also a plain number[]).
58
+ */
59
+ function resolveWithPackedBdd(packedBdd, fns, input) {
60
+ const n = packedBdd.length / 3;
61
+ let i = 0;
62
+ while (true) {
63
+ const ref = packedBdd[fns[packedBdd[i]](input) ? i + 2 : i + 1];
64
+ if (ref >= n) {
65
+ return ref - n;
66
+ }
67
+ i = ref * 3;
68
+ }
69
+ }
70
+ //# sourceMappingURL=packed-bdd.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"packed-bdd.js","sourceRoot":"","sources":["../../../../src/packed/packed-bdd.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import { AbstractNode } from './abstract-node.js';
2
2
  import { Branches } from './branches.js';
3
- import type { NonRootNode, ResolverFunctions, SimpleBdd } from './types.js';
3
+ import type { NonRootNode, ResolverFunctions } from './types.js';
4
4
  import { LeafNode } from './leaf-node.js';
5
5
  export declare class RootNode extends AbstractNode {
6
6
  branches: Branches;
@@ -24,5 +24,4 @@ export declare class RootNode extends AbstractNode {
24
24
  */
25
25
  removeIrrelevantLeafNodes(leafNodeValue: number): void;
26
26
  resolve(fns: ResolverFunctions, booleanFunctionInput: any): number;
27
- toSimpleBdd(): SimpleBdd;
28
27
  }
@@ -4,7 +4,6 @@ exports.RootNode = void 0;
4
4
  const abstract_node_js_1 = require("./abstract-node.js");
5
5
  const branches_js_1 = require("./branches.js");
6
6
  const util_js_1 = require("./util.js");
7
- const index_js_1 = require("./minimal-string/index.js");
8
7
  class RootNode extends abstract_node_js_1.AbstractNode {
9
8
  branches = new branches_js_1.Branches(this);
10
9
  levels = [];
@@ -65,7 +64,7 @@ class RootNode extends abstract_node_js_1.AbstractNode {
65
64
  }
66
65
  let successCount = 0;
67
66
  let lastLevel = (0, util_js_1.lastOfArray)(this.getLevels());
68
- while (lastLevel > 0) {
67
+ while (lastLevel >= 0) {
69
68
  const nodes = this.getNodesOfLevel(lastLevel);
70
69
  if (logState) {
71
70
  console.log('minimize() run for level ' + lastLevel +
@@ -149,9 +148,6 @@ class RootNode extends abstract_node_js_1.AbstractNode {
149
148
  }
150
149
  }
151
150
  }
152
- toSimpleBdd() {
153
- return (0, index_js_1.bddToSimpleBdd)(this);
154
- }
155
151
  }
156
152
  exports.RootNode = RootNode;
157
153
  //# sourceMappingURL=root-node.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"root-node.js","sourceRoot":"","sources":["../../../src/root-node.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"root-node.js","sourceRoot":"","sources":["../../../src/root-node.ts"],"names":[],"mappings":"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"}
@@ -10,15 +10,3 @@ export type ResolverFunction<T> = (i: T) => boolean;
10
10
  export type ResolverFunctions<T = any> = {
11
11
  [k: number]: ResolverFunction<T>;
12
12
  };
13
- export type SimpleBddLeafNode = number;
14
- /**
15
- * a simple bdd is a json-representation
16
- * which could be parsed from the minimal string
17
- * use this to have great performance
18
- * when resolving values
19
- */
20
- export type SimpleBdd = {
21
- 0: SimpleBdd | SimpleBddLeafNode;
22
- 1: SimpleBdd | SimpleBddLeafNode;
23
- l: number;
24
- };
@@ -65,7 +65,8 @@ function nextNodeId() {
65
65
  * @link https://stackoverflow.com/a/16155417
66
66
  */
67
67
  function decimalToPaddedBinary(decimal, padding) {
68
- const binary = (decimal >>> 0).toString(2);
68
+ // >>> 0 would cut off everything above 32 bits, only use it for the two's complement of negative numbers
69
+ const binary = (decimal < 0 ? decimal >>> 0 : decimal).toString(2);
69
70
  const padded = binary.padStart(padding, '0');
70
71
  return padded;
71
72
  }
@@ -90,10 +91,18 @@ function maxBinaryWithLength(length) {
90
91
  return new Array(length).fill(0).map(() => '1').join('');
91
92
  }
92
93
  function getNextStateSet(stateSet) {
93
- const decimal = binaryToDecimal(stateSet);
94
- const increase = decimal + 1;
95
- const binary = decimalToPaddedBinary(increase, stateSet.length);
96
- return binary;
94
+ if (stateSet.length <= 52) {
95
+ // fast path, the number stays exact
96
+ const decimal = binaryToDecimal(stateSet);
97
+ return decimalToPaddedBinary(decimal + 1, stateSet.length);
98
+ }
99
+ // longer keys would lose precision as a number, so increment the string directly
100
+ const lastZero = stateSet.lastIndexOf('0');
101
+ if (lastZero === -1) {
102
+ // overflow, the result gets one char longer
103
+ return '1' + '0'.repeat(stateSet.length);
104
+ }
105
+ return stateSet.slice(0, lastZero) + '1' + '0'.repeat(stateSet.length - lastZero - 1);
97
106
  }
98
107
  function firstKeyOfMap(map) {
99
108
  const iterator1 = map.keys();
@@ -1 +1 @@
1
- {"version":3,"file":"util.js","sourceRoot":"","sources":["../../../src/util.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"util.js","sourceRoot":"","sources":["../../../src/util.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,5 @@
1
1
  import { nextNodeId } from './util.js';
2
+ import { BRANCH_KEYS } from './branches.js';
2
3
  import { findSimilarNode } from './find-similar-node.js';
3
4
  export class AbstractNode {
4
5
  level;
@@ -141,10 +142,12 @@ export class AbstractNode {
141
142
  const ownParents = this.parents.getAll();
142
143
  const parentsWithStrictEqualBranches = [];
143
144
  ownParents.forEach((parent) => {
144
- // console.log('ownParent: ' + parent.id);
145
- const branchKey = parent.branches.getKeyOfNode(this);
146
- // console.log('branchKey: ' + branchKey);
147
- parent.branches.setBranch(branchKey, other);
145
+ // a parent (the root node) can have this node in both branches
146
+ BRANCH_KEYS.forEach(branchKey => {
147
+ if (parent.branches.getBranch(branchKey) === this) {
148
+ parent.branches.setBranch(branchKey, other);
149
+ }
150
+ });
148
151
  if (parent.branches.areBranchesStrictEqual()) {
149
152
  parentsWithStrictEqualBranches.push(parent);
150
153
  }