binary-decision-diagram 3.2.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 (192) 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 +4 -1
  6. package/dist/cjs/src/branches.js +10 -9
  7. package/dist/cjs/src/branches.js.map +1 -1
  8. package/dist/cjs/src/create-bdd-from-truth-table.js +1 -2
  9. package/dist/cjs/src/create-bdd-from-truth-table.js.map +1 -1
  10. package/dist/cjs/src/ensure-correct-bdd.js +2 -3
  11. package/dist/cjs/src/ensure-correct-bdd.js.map +1 -1
  12. package/dist/cjs/src/fill-truth-table.js +1 -2
  13. package/dist/cjs/src/fill-truth-table.js.map +1 -1
  14. package/dist/cjs/src/find-similar-node.js +1 -2
  15. package/dist/cjs/src/find-similar-node.js.map +1 -1
  16. package/dist/cjs/src/index.d.ts +2 -1
  17. package/dist/cjs/src/index.es5.js +17 -7
  18. package/dist/cjs/src/index.es5.js.map +1 -1
  19. package/dist/cjs/src/index.js +2 -1
  20. package/dist/cjs/src/index.js.map +1 -1
  21. package/dist/cjs/src/internal-node.js +6 -3
  22. package/dist/cjs/src/internal-node.js.map +1 -1
  23. package/dist/cjs/src/optimize-brute-force.js +10 -12
  24. package/dist/cjs/src/optimize-brute-force.js.map +1 -1
  25. package/dist/cjs/src/ordering/build-bdd.d.ts +13 -0
  26. package/dist/cjs/src/ordering/build-bdd.js +64 -0
  27. package/dist/cjs/src/ordering/build-bdd.js.map +1 -0
  28. package/dist/cjs/src/ordering/dense-truth-table.d.ts +42 -0
  29. package/dist/cjs/src/ordering/dense-truth-table.js +125 -0
  30. package/dist/cjs/src/ordering/dense-truth-table.js.map +1 -0
  31. package/dist/cjs/src/ordering/exact-cost-ordering.d.ts +91 -0
  32. package/dist/cjs/src/ordering/exact-cost-ordering.js +351 -0
  33. package/dist/cjs/src/ordering/exact-cost-ordering.js.map +1 -0
  34. package/dist/cjs/src/ordering/exact-ordering.d.ts +89 -0
  35. package/dist/cjs/src/ordering/exact-ordering.js +260 -0
  36. package/dist/cjs/src/ordering/exact-ordering.js.map +1 -0
  37. package/dist/cjs/src/ordering/index.d.ts +22 -0
  38. package/dist/cjs/src/ordering/index.js +38 -0
  39. package/dist/cjs/src/ordering/index.js.map +1 -0
  40. package/dist/cjs/src/ordering/int-pair-map.d.ts +20 -0
  41. package/dist/cjs/src/ordering/int-pair-map.js +85 -0
  42. package/dist/cjs/src/ordering/int-pair-map.js.map +1 -0
  43. package/dist/cjs/src/ordering/local-search.d.ts +114 -0
  44. package/dist/cjs/src/ordering/local-search.js +317 -0
  45. package/dist/cjs/src/ordering/local-search.js.map +1 -0
  46. package/dist/cjs/src/ordering/optimize-ordering.d.ts +153 -0
  47. package/dist/cjs/src/ordering/optimize-ordering.js +406 -0
  48. package/dist/cjs/src/ordering/optimize-ordering.js.map +1 -0
  49. package/dist/cjs/src/ordering/ordering-evaluator.d.ts +198 -0
  50. package/dist/cjs/src/ordering/ordering-evaluator.js +384 -0
  51. package/dist/cjs/src/ordering/ordering-evaluator.js.map +1 -0
  52. package/dist/cjs/src/ordering/shared-diagram.d.ts +85 -0
  53. package/dist/cjs/src/ordering/shared-diagram.js +295 -0
  54. package/dist/cjs/src/ordering/shared-diagram.js.map +1 -0
  55. package/dist/cjs/src/packed/index.d.ts +2 -0
  56. package/dist/cjs/src/{minimal-string → packed}/index.js +2 -5
  57. package/dist/cjs/src/packed/index.js.map +1 -0
  58. package/dist/cjs/src/packed/packed-bdd-base64-string.d.ts +3 -0
  59. package/dist/cjs/src/packed/packed-bdd-base64-string.js +46 -0
  60. package/dist/cjs/src/packed/packed-bdd-base64-string.js.map +1 -0
  61. package/dist/cjs/src/packed/packed-bdd.d.ts +13 -0
  62. package/dist/cjs/src/packed/packed-bdd.js +70 -0
  63. package/dist/cjs/src/packed/packed-bdd.js.map +1 -0
  64. package/dist/cjs/src/root-node.d.ts +1 -2
  65. package/dist/cjs/src/root-node.js +4 -9
  66. package/dist/cjs/src/root-node.js.map +1 -1
  67. package/dist/cjs/src/types.d.ts +0 -12
  68. package/dist/cjs/src/util.js +29 -21
  69. package/dist/cjs/src/util.js.map +1 -1
  70. package/dist/esm/src/abstract-node.js +7 -4
  71. package/dist/esm/src/abstract-node.js.map +1 -1
  72. package/dist/esm/src/branches.d.ts +4 -1
  73. package/dist/esm/src/branches.js +8 -7
  74. package/dist/esm/src/branches.js.map +1 -1
  75. package/dist/esm/src/create-bdd-from-truth-table.js.map +1 -1
  76. package/dist/esm/src/index.d.ts +2 -1
  77. package/dist/esm/src/index.js +2 -1
  78. package/dist/esm/src/index.js.map +1 -1
  79. package/dist/esm/src/internal-node.js +7 -4
  80. package/dist/esm/src/internal-node.js.map +1 -1
  81. package/dist/esm/src/optimize-brute-force.js +5 -7
  82. package/dist/esm/src/optimize-brute-force.js.map +1 -1
  83. package/dist/esm/src/ordering/build-bdd.d.ts +13 -0
  84. package/dist/esm/src/ordering/build-bdd.js +61 -0
  85. package/dist/esm/src/ordering/build-bdd.js.map +1 -0
  86. package/dist/esm/src/ordering/dense-truth-table.d.ts +42 -0
  87. package/dist/esm/src/ordering/dense-truth-table.js +117 -0
  88. package/dist/esm/src/ordering/dense-truth-table.js.map +1 -0
  89. package/dist/esm/src/ordering/exact-cost-ordering.d.ts +91 -0
  90. package/dist/esm/src/ordering/exact-cost-ordering.js +347 -0
  91. package/dist/esm/src/ordering/exact-cost-ordering.js.map +1 -0
  92. package/dist/esm/src/ordering/exact-ordering.d.ts +89 -0
  93. package/dist/esm/src/ordering/exact-ordering.js +256 -0
  94. package/dist/esm/src/ordering/exact-ordering.js.map +1 -0
  95. package/dist/esm/src/ordering/index.d.ts +22 -0
  96. package/dist/esm/src/ordering/index.js +17 -0
  97. package/dist/esm/src/ordering/index.js.map +1 -0
  98. package/dist/esm/src/ordering/int-pair-map.d.ts +20 -0
  99. package/dist/esm/src/ordering/int-pair-map.js +81 -0
  100. package/dist/esm/src/ordering/int-pair-map.js.map +1 -0
  101. package/dist/esm/src/ordering/local-search.d.ts +114 -0
  102. package/dist/esm/src/ordering/local-search.js +308 -0
  103. package/dist/esm/src/ordering/local-search.js.map +1 -0
  104. package/dist/esm/src/ordering/optimize-ordering.d.ts +153 -0
  105. package/dist/esm/src/ordering/optimize-ordering.js +399 -0
  106. package/dist/esm/src/ordering/optimize-ordering.js.map +1 -0
  107. package/dist/esm/src/ordering/ordering-evaluator.d.ts +198 -0
  108. package/dist/esm/src/ordering/ordering-evaluator.js +377 -0
  109. package/dist/esm/src/ordering/ordering-evaluator.js.map +1 -0
  110. package/dist/esm/src/ordering/shared-diagram.d.ts +85 -0
  111. package/dist/esm/src/ordering/shared-diagram.js +289 -0
  112. package/dist/esm/src/ordering/shared-diagram.js.map +1 -0
  113. package/dist/esm/src/packed/index.d.ts +2 -0
  114. package/dist/esm/src/packed/index.js +3 -0
  115. package/dist/esm/src/packed/index.js.map +1 -0
  116. package/dist/esm/src/packed/packed-bdd-base64-string.d.ts +3 -0
  117. package/dist/esm/src/packed/packed-bdd-base64-string.js +42 -0
  118. package/dist/esm/src/packed/packed-bdd-base64-string.js.map +1 -0
  119. package/dist/esm/src/packed/packed-bdd.d.ts +13 -0
  120. package/dist/esm/src/packed/packed-bdd.js +66 -0
  121. package/dist/esm/src/packed/packed-bdd.js.map +1 -0
  122. package/dist/esm/src/root-node.d.ts +1 -2
  123. package/dist/esm/src/root-node.js +5 -10
  124. package/dist/esm/src/root-node.js.map +1 -1
  125. package/dist/esm/src/types.d.ts +0 -12
  126. package/dist/esm/src/util.js +14 -5
  127. package/dist/esm/src/util.js.map +1 -1
  128. package/docs/variable-ordering.md +306 -0
  129. package/package.json +15 -12
  130. package/src/abstract-node.ts +7 -5
  131. package/src/branches.ts +9 -7
  132. package/src/create-bdd-from-truth-table.ts +1 -1
  133. package/src/index.ts +2 -1
  134. package/src/internal-node.ts +7 -4
  135. package/src/optimize-brute-force.ts +5 -7
  136. package/src/ordering/build-bdd.ts +70 -0
  137. package/src/ordering/dense-truth-table.ts +161 -0
  138. package/src/ordering/exact-cost-ordering.ts +425 -0
  139. package/src/ordering/exact-ordering.ts +317 -0
  140. package/src/ordering/index.ts +57 -0
  141. package/src/ordering/int-pair-map.ts +85 -0
  142. package/src/ordering/local-search.ts +369 -0
  143. package/src/ordering/optimize-ordering.ts +570 -0
  144. package/src/ordering/ordering-evaluator.ts +479 -0
  145. package/src/ordering/shared-diagram.ts +310 -0
  146. package/src/packed/index.ts +2 -0
  147. package/src/packed/packed-bdd-base64-string.ts +47 -0
  148. package/src/packed/packed-bdd.ts +98 -0
  149. package/src/root-node.ts +8 -17
  150. package/src/types.ts +0 -18
  151. package/src/util.ts +15 -6
  152. package/dist/cjs/src/minimal-string/bdd-to-minimal-string.d.ts +0 -8
  153. package/dist/cjs/src/minimal-string/bdd-to-minimal-string.js +0 -60
  154. package/dist/cjs/src/minimal-string/bdd-to-minimal-string.js.map +0 -1
  155. package/dist/cjs/src/minimal-string/bdd-to-simple-bdd.d.ts +0 -11
  156. package/dist/cjs/src/minimal-string/bdd-to-simple-bdd.js +0 -24
  157. package/dist/cjs/src/minimal-string/bdd-to-simple-bdd.js.map +0 -1
  158. package/dist/cjs/src/minimal-string/index.d.ts +0 -5
  159. package/dist/cjs/src/minimal-string/index.js.map +0 -1
  160. package/dist/cjs/src/minimal-string/minimal-string-to-simple-bdd.d.ts +0 -2
  161. package/dist/cjs/src/minimal-string/minimal-string-to-simple-bdd.js +0 -58
  162. package/dist/cjs/src/minimal-string/minimal-string-to-simple-bdd.js.map +0 -1
  163. package/dist/cjs/src/minimal-string/resolve-with-simple-bdd.d.ts +0 -2
  164. package/dist/cjs/src/minimal-string/resolve-with-simple-bdd.js +0 -21
  165. package/dist/cjs/src/minimal-string/resolve-with-simple-bdd.js.map +0 -1
  166. package/dist/cjs/src/minimal-string/string-format.d.ts +0 -9
  167. package/dist/cjs/src/minimal-string/string-format.js +0 -61
  168. package/dist/cjs/src/minimal-string/string-format.js.map +0 -1
  169. package/dist/esm/src/minimal-string/bdd-to-minimal-string.d.ts +0 -8
  170. package/dist/esm/src/minimal-string/bdd-to-minimal-string.js +0 -55
  171. package/dist/esm/src/minimal-string/bdd-to-minimal-string.js.map +0 -1
  172. package/dist/esm/src/minimal-string/bdd-to-simple-bdd.d.ts +0 -11
  173. package/dist/esm/src/minimal-string/bdd-to-simple-bdd.js +0 -19
  174. package/dist/esm/src/minimal-string/bdd-to-simple-bdd.js.map +0 -1
  175. package/dist/esm/src/minimal-string/index.d.ts +0 -5
  176. package/dist/esm/src/minimal-string/index.js +0 -6
  177. package/dist/esm/src/minimal-string/index.js.map +0 -1
  178. package/dist/esm/src/minimal-string/minimal-string-to-simple-bdd.d.ts +0 -2
  179. package/dist/esm/src/minimal-string/minimal-string-to-simple-bdd.js +0 -54
  180. package/dist/esm/src/minimal-string/minimal-string-to-simple-bdd.js.map +0 -1
  181. package/dist/esm/src/minimal-string/resolve-with-simple-bdd.d.ts +0 -2
  182. package/dist/esm/src/minimal-string/resolve-with-simple-bdd.js +0 -17
  183. package/dist/esm/src/minimal-string/resolve-with-simple-bdd.js.map +0 -1
  184. package/dist/esm/src/minimal-string/string-format.d.ts +0 -9
  185. package/dist/esm/src/minimal-string/string-format.js +0 -54
  186. package/dist/esm/src/minimal-string/string-format.js.map +0 -1
  187. package/src/minimal-string/bdd-to-minimal-string.ts +0 -72
  188. package/src/minimal-string/bdd-to-simple-bdd.ts +0 -31
  189. package/src/minimal-string/index.ts +0 -5
  190. package/src/minimal-string/minimal-string-to-simple-bdd.ts +0 -67
  191. package/src/minimal-string/resolve-with-simple-bdd.ts +0 -25
  192. package/src/minimal-string/string-format.ts +0 -67
@@ -24,9 +24,12 @@ class InternalNode extends abstract_node_js_1.AbstractNode {
24
24
  // move own parents to keepBranch
25
25
  const ownParents = this.parents.getAll();
26
26
  ownParents.forEach(parent => {
27
- // console.log('ownParent: ' + parent.id);
28
- const branchKey = parent.branches.getKeyOfNode(this);
29
- parent.branches.setBranch(branchKey, keepBranch);
27
+ // a parent (the root node) can have this node in both branches
28
+ branches_js_1.BRANCH_KEYS.forEach(branchKey => {
29
+ if (parent.branches.getBranch(branchKey) === this) {
30
+ parent.branches.setBranch(branchKey, keepBranch);
31
+ }
32
+ });
30
33
  // remove parents from own list
31
34
  // this will auto-remove the connection to the other '1'-branch
32
35
  this.parents.remove(parent);
@@ -1 +1 @@
1
- {"version":3,"file":"internal-node.js","sourceRoot":"","sources":["../../../src/internal-node.ts"],"names":[],"mappings":";;;AAAA,+CAAyC;AACzC,6CAAuC;AAEvC,yDAAkD;AAGlD,MAAa,YAAa,SAAQ,+BAAY;IACnC,QAAQ,GAAa,IAAI,sBAAQ,CAAC,IAAI,CAAC,CAAC;IACxC,OAAO,GAAG,IAAI,oBAAO,CAAC,IAAI,CAAC,CAAC;IAEnC,YACI,KAAa,EACb,QAAkB,EAClB,MAAmB;QAEnB,KAAK,CAAC,KAAK,EAAE,QAAQ,EAAE,cAAc,CAAC,CAAC;QACvC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAC7B,CAAC;IAID;;;;OAIG;IACH,kBAAkB;QAEd,kDAAkD;QAElD,IAAI,IAAI,CAAC,QAAQ,CAAC,gBAAgB,EAAE,EAAE,CAAC;YACnC,IAAI,CAAC,gBAAgB,CAAC,oBAAoB,CAAC,CAAC;YAC5C,MAAM,UAAU,GAAgB,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;YAE7D,iCAAiC;YACjC,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;YACzC,UAAU,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;gBACxB,0CAA0C;gBAC1C,MAAM,SAAS,GAAG,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;gBACrD,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;gBAEjD,+BAA+B;gBAC/B,+DAA+D;gBAC/D,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;gBAE5B,wCAAwC;gBACxC,uCAAuC;gBACvC,oCAAoC;gBACpC,IAAI,MAAM,CAAC,QAAQ,CAAC,sBAAsB,EAAE,IAAI,MAAM,CAAC,cAAc,EAAE,EAAE,CAAC;oBACrE,MAAuB,CAAC,kBAAkB,EAAE,CAAC;gBAClD,CAAC;YACL,CAAC,CAAC,CAAC;YAEH,OAAO,IAAI,CAAC;QAChB,CAAC;QACD,OAAO,KAAK,CAAC;IACjB,CAAC;CAEJ;AApDD,oCAoDC"}
1
+ {"version":3,"file":"internal-node.js","sourceRoot":"","sources":["../../../src/internal-node.ts"],"names":[],"mappings":";;;AAAA,+CAAsD;AACtD,6CAAuC;AAEvC,yDAAkD;AAGlD,MAAa,YAAa,SAAQ,+BAAY;IACnC,QAAQ,GAAa,IAAI,sBAAQ,CAAC,IAAI,CAAC,CAAC;IACxC,OAAO,GAAG,IAAI,oBAAO,CAAC,IAAI,CAAC,CAAC;IAEnC,YACI,KAAa,EACb,QAAkB,EAClB,MAAmB;QAEnB,KAAK,CAAC,KAAK,EAAE,QAAQ,EAAE,cAAc,CAAC,CAAC;QACvC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAC7B,CAAC;IAID;;;;OAIG;IACH,kBAAkB;QAEd,kDAAkD;QAElD,IAAI,IAAI,CAAC,QAAQ,CAAC,gBAAgB,EAAE,EAAE,CAAC;YACnC,IAAI,CAAC,gBAAgB,CAAC,oBAAoB,CAAC,CAAC;YAC5C,MAAM,UAAU,GAAgB,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;YAE7D,iCAAiC;YACjC,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;YACzC,UAAU,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;gBACxB,+DAA+D;gBAC/D,yBAAW,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE;oBAC5B,IAAI,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,SAAS,CAAC,KAAK,IAAI,EAAE,CAAC;wBAChD,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;oBACrD,CAAC;gBACL,CAAC,CAAC,CAAC;gBAEH,+BAA+B;gBAC/B,+DAA+D;gBAC/D,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;gBAE5B,wCAAwC;gBACxC,uCAAuC;gBACvC,oCAAoC;gBACpC,IAAI,MAAM,CAAC,QAAQ,CAAC,sBAAsB,EAAE,IAAI,MAAM,CAAC,cAAc,EAAE,EAAE,CAAC;oBACrE,MAAuB,CAAC,kBAAkB,EAAE,CAAC;gBAClD,CAAC;YACL,CAAC,CAAC,CAAC;YAEH,OAAO,IAAI,CAAC;QAChB,CAAC;QACD,OAAO,KAAK,CAAC;IACjB,CAAC;CAEJ;AAvDD,oCAuDC"}
@@ -1,6 +1,10 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getArrayWithIndexes = exports.changeKeyOrder = exports.shuffleBooleanOrdering = exports.optimizeBruteForce = exports.defaultCompareResults = void 0;
3
+ exports.defaultCompareResults = void 0;
4
+ exports.optimizeBruteForce = optimizeBruteForce;
5
+ exports.shuffleBooleanOrdering = shuffleBooleanOrdering;
6
+ exports.changeKeyOrder = changeKeyOrder;
7
+ exports.getArrayWithIndexes = getArrayWithIndexes;
4
8
  const create_bdd_from_truth_table_js_1 = require("./create-bdd-from-truth-table.js");
5
9
  const util_js_1 = require("./util.js");
6
10
  /**
@@ -89,7 +93,6 @@ async function optimizeBruteForce({ truthTable, iterations = Infinity, onBetterB
89
93
  }
90
94
  return currentBestResult;
91
95
  }
92
- exports.optimizeBruteForce = optimizeBruteForce;
93
96
  function shuffleBooleanOrdering(truthTable) {
94
97
  const firstKey = (0, util_js_1.firstKeyOfMap)(truthTable);
95
98
  const arrayWithIndexes = getArrayWithIndexes(firstKey.length);
@@ -111,23 +114,19 @@ function shuffleBooleanOrdering(truthTable) {
111
114
  mappingBeforeToAfter
112
115
  };
113
116
  }
114
- exports.shuffleBooleanOrdering = shuffleBooleanOrdering;
115
117
  function changeKeyOrder(oldKey, mappingBeforeToAfter) {
116
118
  const chars = oldKey
117
119
  .split('')
118
- .map((char, indexBefore) => {
119
- return {
120
- char,
121
- indexBefore,
122
- indexAfter: mappingBeforeToAfter[indexBefore]
123
- };
124
- })
120
+ .map((char, indexBefore) => ({
121
+ char,
122
+ indexBefore,
123
+ indexAfter: mappingBeforeToAfter[indexBefore]
124
+ }))
125
125
  .sort((a, b) => a.indexAfter - b.indexAfter)
126
126
  .map(charObj => charObj.char)
127
127
  .join('');
128
128
  return chars;
129
129
  }
130
- exports.changeKeyOrder = changeKeyOrder;
131
130
  function getArrayWithIndexes(size) {
132
131
  const ret = [];
133
132
  let last = 0;
@@ -137,5 +136,4 @@ function getArrayWithIndexes(size) {
137
136
  }
138
137
  return ret;
139
138
  }
140
- exports.getArrayWithIndexes = getArrayWithIndexes;
141
139
  //# sourceMappingURL=optimize-brute-force.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"optimize-brute-force.js","sourceRoot":"","sources":["../../../src/optimize-brute-force.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"optimize-brute-force.js","sourceRoot":"","sources":["../../../src/optimize-brute-force.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ import { RootNode } from '../root-node.js';
2
+ import type { DenseTruthTable } from './dense-truth-table.js';
3
+ import type { ReducedDiagram } from './ordering-evaluator.js';
4
+ /**
5
+ * Creates the RootNode based BDD out of a reduced diagram.
6
+ * The result is already minimal, so no minimize() call is needed.
7
+ *
8
+ * Like the BDDs returned by optimizeBruteForce(), the level of each node
9
+ * is the index of the boolean function it tests (so resolve() works
10
+ * with the original resolver functions) and RootNode.levels lists the
11
+ * levels from top to bottom, followed by the leaf level.
12
+ */
13
+ export declare function buildBddFromDiagram(diagram: ReducedDiagram, table: DenseTruthTable): RootNode;
@@ -0,0 +1,64 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.buildBddFromDiagram = buildBddFromDiagram;
4
+ const root_node_js_1 = require("../root-node.js");
5
+ const internal_node_js_1 = require("../internal-node.js");
6
+ const leaf_node_js_1 = require("../leaf-node.js");
7
+ /**
8
+ * Creates the RootNode based BDD out of a reduced diagram.
9
+ * The result is already minimal, so no minimize() call is needed.
10
+ *
11
+ * Like the BDDs returned by optimizeBruteForce(), the level of each node
12
+ * is the index of the boolean function it tests (so resolve() works
13
+ * with the original resolver functions) and RootNode.levels lists the
14
+ * levels from top to bottom, followed by the leaf level.
15
+ */
16
+ function buildBddFromDiagram(diagram, table) {
17
+ const n = diagram.variableCount;
18
+ const ordering = diagram.ordering;
19
+ const terminalCount = diagram.terminalCount;
20
+ const leafLevel = n;
21
+ const root = new root_node_js_1.RootNode();
22
+ root.level = ordering[0];
23
+ root.levels = ordering.slice();
24
+ root.levels.push(leafLevel);
25
+ root.nodesByLevel = new Map();
26
+ root.levels.forEach(level => root.nodesByLevel.set(level, new Set()));
27
+ root.nodesByLevel.get(root.level).add(root);
28
+ const internalById = new Map();
29
+ const leafById = new Map();
30
+ const attach = (parent, branch, id) => {
31
+ if (id < terminalCount) {
32
+ let leaf = leafById.get(id);
33
+ if (!leaf) {
34
+ leaf = new leaf_node_js_1.LeafNode(leafLevel, root, table.terminalValues[id], parent);
35
+ leafById.set(id, leaf);
36
+ }
37
+ parent.branches.setBranch(branch, leaf);
38
+ return;
39
+ }
40
+ const existing = internalById.get(id);
41
+ if (existing) {
42
+ parent.branches.setBranch(branch, existing);
43
+ return;
44
+ }
45
+ const index = id - terminalCount;
46
+ const node = new internal_node_js_1.InternalNode(ordering[diagram.nodeLevel[index]], root, parent);
47
+ internalById.set(id, node);
48
+ parent.branches.setBranch(branch, node);
49
+ attach(node, '0', diagram.nodeLo[index]);
50
+ attach(node, '1', diagram.nodeHi[index]);
51
+ };
52
+ const rootId = diagram.root;
53
+ if (rootId >= terminalCount && diagram.nodeLevel[rootId - terminalCount] === 0) {
54
+ attach(root, '0', diagram.nodeLo[rootId - terminalCount]);
55
+ attach(root, '1', diagram.nodeHi[rootId - terminalCount]);
56
+ }
57
+ else {
58
+ // the top level variable is irrelevant, the root node points to the same node twice
59
+ attach(root, '0', rootId);
60
+ attach(root, '1', rootId);
61
+ }
62
+ return root;
63
+ }
64
+ //# sourceMappingURL=build-bdd.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"build-bdd.js","sourceRoot":"","sources":["../../../../src/ordering/build-bdd.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,42 @@
1
+ import type { TruthTable } from '../types.js';
2
+ /**
3
+ * A truth table stored as a flat array of terminal ids.
4
+ *
5
+ * Row index: parseInt(key, 2). The first character of a key
6
+ * (= boolean function 0) is the most significant bit of the row index,
7
+ * so variable v corresponds to bit (variableCount - 1 - v).
8
+ *
9
+ * Values are mapped to small consecutive "terminal ids" so that the
10
+ * hot loops only ever compare 32-bit integers.
11
+ */
12
+ export interface DenseTruthTable {
13
+ /** amount of boolean functions, equals the key length of the truth table */
14
+ variableCount: number;
15
+ /** 2^variableCount */
16
+ rowCount: number;
17
+ /** terminal id of each row */
18
+ terminalIds: Int32Array;
19
+ /** terminal id -> value of the truth table */
20
+ terminalValues: number[];
21
+ /** terminal id of the don't-care value, -1 when there is none */
22
+ dontCareTerminal: number;
23
+ /** amount of leaf nodes the final BDD will have */
24
+ leafCount: number;
25
+ }
26
+ /**
27
+ * The hard limit of variables. Row indexes are handled with 32 bit integer
28
+ * operations and a table with 2^30 rows would need gigabytes of memory anyway.
29
+ */
30
+ export declare const MAX_VARIABLE_COUNT = 30;
31
+ export declare function parseTruthTable(truthTable: TruthTable, dontCareValue?: number): DenseTruthTable;
32
+ /**
33
+ * Creates a dense table with the same terminal values
34
+ * but other row contents, for example after don't-care rows have been resolved.
35
+ */
36
+ export declare function withTerminalIds(table: DenseTruthTable, terminalIds: Int32Array, dontCareTerminal: number): DenseTruthTable;
37
+ /**
38
+ * Converts the dense table back into a Map with keys in the original order.
39
+ */
40
+ export declare function denseTruthTableToMap(table: DenseTruthTable): TruthTable;
41
+ export declare function naturalOrdering(variableCount: number): number[];
42
+ export declare function ensureValidOrdering(ordering: ArrayLike<number>, variableCount: number): void;
@@ -0,0 +1,125 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.MAX_VARIABLE_COUNT = void 0;
4
+ exports.parseTruthTable = parseTruthTable;
5
+ exports.withTerminalIds = withTerminalIds;
6
+ exports.denseTruthTableToMap = denseTruthTableToMap;
7
+ exports.naturalOrdering = naturalOrdering;
8
+ exports.ensureValidOrdering = ensureValidOrdering;
9
+ /**
10
+ * The hard limit of variables. Row indexes are handled with 32 bit integer
11
+ * operations and a table with 2^30 rows would need gigabytes of memory anyway.
12
+ */
13
+ exports.MAX_VARIABLE_COUNT = 30;
14
+ function parseTruthTable(truthTable, dontCareValue) {
15
+ if (truthTable.size === 0) {
16
+ throw new Error('truth table is empty');
17
+ }
18
+ const firstKey = truthTable.keys().next().value;
19
+ const variableCount = firstKey.length;
20
+ if (variableCount < 1 || variableCount > exports.MAX_VARIABLE_COUNT) {
21
+ throw new Error('truth table keys must have between 1 and ' + exports.MAX_VARIABLE_COUNT + ' characters');
22
+ }
23
+ const rowCount = Math.pow(2, variableCount);
24
+ if (truthTable.size !== rowCount) {
25
+ throw new Error('truth table has missing entries');
26
+ }
27
+ const terminalIds = new Int32Array(rowCount).fill(-1);
28
+ const terminalValues = [];
29
+ const idByValue = new Map();
30
+ for (const [key, value] of truthTable) {
31
+ if (key.length !== variableCount || !/^[01]+$/.test(key)) {
32
+ throw new Error('invalid truth table key ' + key);
33
+ }
34
+ const row = parseInt(key, 2);
35
+ if (terminalIds[row] !== -1) {
36
+ throw new Error('duplicate truth table key ' + key);
37
+ }
38
+ let id = idByValue.get(value);
39
+ if (id === undefined) {
40
+ id = terminalValues.length;
41
+ terminalValues.push(value);
42
+ idByValue.set(value, id);
43
+ }
44
+ terminalIds[row] = id;
45
+ }
46
+ let dontCareTerminal = -1;
47
+ if (dontCareValue !== undefined) {
48
+ const dcId = idByValue.get(dontCareValue);
49
+ if (dcId !== undefined) {
50
+ dontCareTerminal = dcId;
51
+ }
52
+ }
53
+ const leafCount = terminalValues.length - (dontCareTerminal >= 0 ? 1 : 0);
54
+ if (leafCount === 0) {
55
+ throw new Error('truth table only consists of don\'t-care rows');
56
+ }
57
+ return {
58
+ variableCount,
59
+ rowCount,
60
+ terminalIds,
61
+ terminalValues,
62
+ dontCareTerminal,
63
+ leafCount
64
+ };
65
+ }
66
+ /**
67
+ * Creates a dense table with the same terminal values
68
+ * but other row contents, for example after don't-care rows have been resolved.
69
+ */
70
+ function withTerminalIds(table, terminalIds, dontCareTerminal) {
71
+ let leafCount = 0;
72
+ const seen = new Uint8Array(table.terminalValues.length);
73
+ for (let i = 0; i < terminalIds.length; i++) {
74
+ const id = terminalIds[i];
75
+ if (seen[id] === 0) {
76
+ seen[id] = 1;
77
+ if (id !== dontCareTerminal) {
78
+ leafCount++;
79
+ }
80
+ }
81
+ }
82
+ if (leafCount === 0) {
83
+ leafCount = 1;
84
+ }
85
+ return {
86
+ variableCount: table.variableCount,
87
+ rowCount: table.rowCount,
88
+ terminalIds,
89
+ terminalValues: table.terminalValues,
90
+ dontCareTerminal,
91
+ leafCount
92
+ };
93
+ }
94
+ /**
95
+ * Converts the dense table back into a Map with keys in the original order.
96
+ */
97
+ function denseTruthTableToMap(table) {
98
+ const ret = new Map();
99
+ const n = table.variableCount;
100
+ for (let row = 0; row < table.rowCount; row++) {
101
+ ret.set(row.toString(2).padStart(n, '0'), table.terminalValues[table.terminalIds[row]]);
102
+ }
103
+ return ret;
104
+ }
105
+ function naturalOrdering(variableCount) {
106
+ const ret = [];
107
+ for (let i = 0; i < variableCount; i++) {
108
+ ret.push(i);
109
+ }
110
+ return ret;
111
+ }
112
+ function ensureValidOrdering(ordering, variableCount) {
113
+ if (ordering.length !== variableCount) {
114
+ throw new Error('ordering must contain each of the ' + variableCount + ' boolean functions exactly once');
115
+ }
116
+ const seen = new Uint8Array(variableCount);
117
+ for (let i = 0; i < ordering.length; i++) {
118
+ const v = ordering[i];
119
+ if (!Number.isInteger(v) || v < 0 || v >= variableCount || seen[v] === 1) {
120
+ throw new Error('ordering must contain each of the ' + variableCount + ' boolean functions exactly once');
121
+ }
122
+ seen[v] = 1;
123
+ }
124
+ }
125
+ //# sourceMappingURL=dense-truth-table.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dense-truth-table.js","sourceRoot":"","sources":["../../../../src/ordering/dense-truth-table.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,91 @@
1
+ import type { DenseTruthTable } from './dense-truth-table.js';
2
+ import { CostModel } from './ordering-evaluator.js';
3
+ export interface ExactCostOrderingOptions {
4
+ /**
5
+ * The search stops without a proof when more states were expanded.
6
+ * Default: 200000
7
+ */
8
+ maxExpansions?: number;
9
+ /**
10
+ * The search stops without a proof when the stored states reference
11
+ * more rows in total (memory protection).
12
+ * Default: 2^25
13
+ */
14
+ maxStoredRows?: number;
15
+ /**
16
+ * A known good ordering. Its expected cost is used as upper bound to prune the search.
17
+ */
18
+ upperBoundOrdering?: ArrayLike<number>;
19
+ /**
20
+ * Only orderings with a lower expected cost than this are searched for.
21
+ */
22
+ upperBound?: number;
23
+ log?: (message: string) => void;
24
+ }
25
+ export interface ExactCostOrderingResult {
26
+ /**
27
+ * true when it is proven that no ordering has a lower expected cost
28
+ * than the returned one (or than the upper bound, when ordering is null)
29
+ */
30
+ solved: boolean;
31
+ /**
32
+ * The best ordering that was found. Irrelevant boolean functions
33
+ * are always at the bottom. null when no ordering below the numeric
34
+ * upper bound exists and the upperBoundOrdering (if given) is not
35
+ * below it either.
36
+ */
37
+ ordering: number[] | null;
38
+ /** expected cost of one resolve() call with `ordering`, -1 when ordering is null */
39
+ expectedCost: number;
40
+ expansions: number;
41
+ generated: number;
42
+ }
43
+ /**
44
+ * Exact minimization of the expected cost of a resolve() call.
45
+ *
46
+ * A row pays the cost of a boolean function when its path through the BDD
47
+ * visits a node of that function, which happens exactly when the cofactor of
48
+ * the row with respect to the functions above still depends on that function.
49
+ * So like the amount of nodes, the expected cost decomposes over the lattice of
50
+ * variable subsets: the edge S -> S + {x} costs cost(x) times the weight of the
51
+ * rows whose cofactor with respect to S depends on x (the root level always
52
+ * pays, because the root node always calls its function).
53
+ *
54
+ * A state keeps the rows with positive weight grouped by their cofactor.
55
+ * Rows whose cofactor became constant never pay anything again and are dropped.
56
+ * The admissible estimate for the remaining cost sums, for every function x
57
+ * not yet placed, cost(x) times the weight of the rows that are sensitive to x
58
+ * (the value changes when only x is flipped), because such rows pay for x in
59
+ * every ordering.
60
+ */
61
+ export declare class ExactCostOrderingSearch {
62
+ private readonly table;
63
+ private readonly costModel;
64
+ private readonly diagram;
65
+ private readonly n;
66
+ /** natural indexes of the rows with positive weight, ascending */
67
+ private readonly activeRows;
68
+ private readonly activeWeights;
69
+ private readonly totalWeight;
70
+ /** sensitiveWeight[v] = weight of the active rows whose value changes when only v is flipped */
71
+ private readonly sensitiveWeight;
72
+ private readonly costs;
73
+ constructor(table: DenseTruthTable, costModel: CostModel, options?: {
74
+ maxDiagramNodes?: number;
75
+ });
76
+ normalizeOrdering(ordering: ArrayLike<number>): number[];
77
+ run(options?: ExactCostOrderingOptions): ExactCostOrderingResult;
78
+ /**
79
+ * lower bound for the remaining (unnormalized) cost below the subset
80
+ */
81
+ private estimate;
82
+ /**
83
+ * the weight of the rows that pay for `variable` when it is fixed next
84
+ */
85
+ private payingWeight;
86
+ /**
87
+ * fixes `variable` additionally: returns the new grouping of the rows
88
+ * that still have a non-constant cofactor
89
+ */
90
+ private transition;
91
+ }