binary-decision-diagram 2.0.0 → 3.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 (166) hide show
  1. package/dist/{es → src}/abstract-node.d.ts +4 -4
  2. package/dist/{lib → src}/abstract-node.js +7 -4
  3. package/dist/src/abstract-node.js.map +1 -0
  4. package/dist/{es → src}/branches.d.ts +2 -2
  5. package/dist/{es → src}/branches.js +3 -2
  6. package/dist/src/branches.js.map +1 -0
  7. package/dist/src/create-bdd-from-truth-table.d.ts +3 -0
  8. package/dist/{lib → src}/create-bdd-from-truth-table.js +4 -4
  9. package/dist/src/create-bdd-from-truth-table.js.map +1 -0
  10. package/dist/{es → src}/ensure-correct-bdd.d.ts +2 -2
  11. package/dist/{es → src}/ensure-correct-bdd.js +1 -1
  12. package/dist/src/ensure-correct-bdd.js.map +1 -0
  13. package/dist/{lib → src}/fill-truth-table.d.ts +1 -1
  14. package/dist/{lib → src}/fill-truth-table.js +1 -1
  15. package/dist/{es → src}/fill-truth-table.js.map +1 -1
  16. package/dist/{lib → src}/find-similar-node.d.ts +1 -1
  17. package/dist/src/index.d.ts +14 -0
  18. package/dist/src/index.js +14 -0
  19. package/dist/src/index.js.map +1 -0
  20. package/dist/{es → src}/internal-node.d.ts +5 -5
  21. package/dist/{lib → src}/internal-node.js +5 -5
  22. package/dist/{es → src}/internal-node.js.map +1 -1
  23. package/dist/{es → src}/leaf-node.d.ts +4 -4
  24. package/dist/{es → src}/leaf-node.js +5 -4
  25. package/dist/src/leaf-node.js.map +1 -0
  26. package/dist/{es → src}/minimal-string/bdd-to-minimal-string.d.ts +2 -2
  27. package/dist/{es → src}/minimal-string/bdd-to-minimal-string.js +2 -2
  28. package/dist/{es → src}/minimal-string/bdd-to-minimal-string.js.map +1 -1
  29. package/dist/{lib → src}/minimal-string/bdd-to-simple-bdd.d.ts +3 -3
  30. package/dist/src/minimal-string/index.d.ts +5 -0
  31. package/dist/src/minimal-string/index.js +6 -0
  32. package/dist/{es → src}/minimal-string/index.js.map +1 -1
  33. package/dist/{es → src}/minimal-string/minimal-string-to-simple-bdd.d.ts +1 -1
  34. package/dist/{es → src}/minimal-string/minimal-string-to-simple-bdd.js +2 -2
  35. package/dist/{es → src}/minimal-string/minimal-string-to-simple-bdd.js.map +1 -1
  36. package/dist/{es → src}/minimal-string/resolve-with-simple-bdd.d.ts +1 -1
  37. package/dist/{lib → src}/minimal-string/resolve-with-simple-bdd.js +1 -1
  38. package/dist/{es → src}/minimal-string/resolve-with-simple-bdd.js.map +1 -1
  39. package/dist/{lib → src}/optimize-brute-force.d.ts +2 -2
  40. package/dist/{lib → src}/optimize-brute-force.js +2 -2
  41. package/dist/{es → src}/optimize-brute-force.js.map +1 -1
  42. package/dist/{es → src}/parents.d.ts +1 -1
  43. package/dist/{es → src}/parents.js +2 -1
  44. package/dist/src/parents.js.map +1 -0
  45. package/dist/{lib → src}/root-node.d.ts +4 -4
  46. package/dist/{lib → src}/root-node.js +8 -8
  47. package/dist/src/root-node.js.map +1 -0
  48. package/dist/{es → src}/types.d.ts +3 -3
  49. package/dist/{es → src}/util.d.ts +1 -1
  50. package/package.json +18 -18
  51. package/src/abstract-node.ts +7 -7
  52. package/src/branches.ts +2 -2
  53. package/src/create-bdd-from-truth-table.ts +5 -5
  54. package/src/ensure-correct-bdd.ts +4 -4
  55. package/src/fill-truth-table.ts +2 -2
  56. package/src/find-similar-node.ts +1 -1
  57. package/src/index.ts +14 -32
  58. package/src/internal-node.ts +5 -5
  59. package/src/leaf-node.ts +6 -6
  60. package/src/minimal-string/bdd-to-minimal-string.ts +4 -4
  61. package/src/minimal-string/bdd-to-simple-bdd.ts +4 -4
  62. package/src/minimal-string/index.ts +5 -5
  63. package/src/minimal-string/minimal-string-to-simple-bdd.ts +3 -3
  64. package/src/minimal-string/resolve-with-simple-bdd.ts +2 -2
  65. package/src/optimize-brute-force.ts +5 -5
  66. package/src/parents.ts +1 -1
  67. package/src/root-node.ts +7 -7
  68. package/src/types.ts +3 -3
  69. package/src/util.ts +1 -1
  70. package/.github/workflows/main.yml +0 -22
  71. package/dist/es/abstract-node.js +0 -166
  72. package/dist/es/abstract-node.js.map +0 -1
  73. package/dist/es/branches.js.map +0 -1
  74. package/dist/es/create-bdd-from-truth-table.d.ts +0 -3
  75. package/dist/es/create-bdd-from-truth-table.js +0 -34
  76. package/dist/es/create-bdd-from-truth-table.js.map +0 -1
  77. package/dist/es/ensure-correct-bdd.js.map +0 -1
  78. package/dist/es/fill-truth-table.d.ts +0 -6
  79. package/dist/es/fill-truth-table.js +0 -22
  80. package/dist/es/find-similar-node.d.ts +0 -7
  81. package/dist/es/index.d.ts +0 -20
  82. package/dist/es/index.js +0 -14
  83. package/dist/es/index.js.map +0 -1
  84. package/dist/es/internal-node.js +0 -42
  85. package/dist/es/leaf-node.js.map +0 -1
  86. package/dist/es/minimal-string/bdd-to-simple-bdd.d.ts +0 -11
  87. package/dist/es/minimal-string/index.d.ts +0 -5
  88. package/dist/es/minimal-string/index.js +0 -6
  89. package/dist/es/minimal-string/resolve-with-simple-bdd.js +0 -17
  90. package/dist/es/optimize-brute-force.d.ts +0 -43
  91. package/dist/es/optimize-brute-force.js +0 -132
  92. package/dist/es/parents.js.map +0 -1
  93. package/dist/es/root-node.d.ts +0 -28
  94. package/dist/es/root-node.js +0 -154
  95. package/dist/es/root-node.js.map +0 -1
  96. package/dist/lib/abstract-node.d.ts +0 -33
  97. package/dist/lib/abstract-node.js.map +0 -1
  98. package/dist/lib/branches.d.ts +0 -20
  99. package/dist/lib/branches.js +0 -70
  100. package/dist/lib/branches.js.map +0 -1
  101. package/dist/lib/create-bdd-from-truth-table.d.ts +0 -3
  102. package/dist/lib/create-bdd-from-truth-table.js.map +0 -1
  103. package/dist/lib/ensure-correct-bdd.d.ts +0 -8
  104. package/dist/lib/ensure-correct-bdd.js +0 -97
  105. package/dist/lib/ensure-correct-bdd.js.map +0 -1
  106. package/dist/lib/fill-truth-table.js.map +0 -1
  107. package/dist/lib/find-similar-node.js +0 -18
  108. package/dist/lib/find-similar-node.js.map +0 -1
  109. package/dist/lib/index.d.ts +0 -20
  110. package/dist/lib/index.js +0 -14
  111. package/dist/lib/index.js.map +0 -1
  112. package/dist/lib/internal-node.d.ts +0 -16
  113. package/dist/lib/internal-node.js.map +0 -1
  114. package/dist/lib/leaf-node.d.ts +0 -10
  115. package/dist/lib/leaf-node.js +0 -29
  116. package/dist/lib/leaf-node.js.map +0 -1
  117. package/dist/lib/minimal-string/bdd-to-minimal-string.d.ts +0 -8
  118. package/dist/lib/minimal-string/bdd-to-minimal-string.js +0 -55
  119. package/dist/lib/minimal-string/bdd-to-minimal-string.js.map +0 -1
  120. package/dist/lib/minimal-string/bdd-to-simple-bdd.js +0 -19
  121. package/dist/lib/minimal-string/bdd-to-simple-bdd.js.map +0 -1
  122. package/dist/lib/minimal-string/index.d.ts +0 -5
  123. package/dist/lib/minimal-string/index.js +0 -6
  124. package/dist/lib/minimal-string/index.js.map +0 -1
  125. package/dist/lib/minimal-string/minimal-string-to-simple-bdd.d.ts +0 -2
  126. package/dist/lib/minimal-string/minimal-string-to-simple-bdd.js +0 -54
  127. package/dist/lib/minimal-string/minimal-string-to-simple-bdd.js.map +0 -1
  128. package/dist/lib/minimal-string/resolve-with-simple-bdd.d.ts +0 -2
  129. package/dist/lib/minimal-string/resolve-with-simple-bdd.js.map +0 -1
  130. package/dist/lib/minimal-string/string-format.d.ts +0 -9
  131. package/dist/lib/minimal-string/string-format.js +0 -54
  132. package/dist/lib/minimal-string/string-format.js.map +0 -1
  133. package/dist/lib/optimize-brute-force.js.map +0 -1
  134. package/dist/lib/parents.d.ts +0 -15
  135. package/dist/lib/parents.js +0 -38
  136. package/dist/lib/parents.js.map +0 -1
  137. package/dist/lib/root-node.js.map +0 -1
  138. package/dist/lib/types.d.ts +0 -24
  139. package/dist/lib/types.js +0 -2
  140. package/dist/lib/types.js.map +0 -1
  141. package/dist/lib/util.d.ts +0 -26
  142. package/dist/lib/util.js +0 -109
  143. package/dist/lib/util.js.map +0 -1
  144. package/renovate.json +0 -8
  145. package/test/helper/big-truth-table.json +0 -578
  146. package/test/helper/test-util.ts +0 -110
  147. package/test/unit/create-bdd-from-truth-table.test.ts +0 -24
  148. package/test/unit/find-similar-node.test.ts +0 -53
  149. package/test/unit/index.test.ts +0 -6
  150. package/test/unit/minimize.test.ts +0 -145
  151. package/test/unit/optimize-brute-force.test.ts +0 -114
  152. package/test/unit/resolve.test.ts +0 -74
  153. package/test/unit/simple-bdd.test.ts +0 -186
  154. package/tsconfig.json +0 -38
  155. package/tslint.json +0 -116
  156. /package/dist/{es → src}/find-similar-node.js +0 -0
  157. /package/dist/{es → src}/find-similar-node.js.map +0 -0
  158. /package/dist/{es → src}/minimal-string/bdd-to-simple-bdd.js +0 -0
  159. /package/dist/{es → src}/minimal-string/bdd-to-simple-bdd.js.map +0 -0
  160. /package/dist/{es → src}/minimal-string/string-format.d.ts +0 -0
  161. /package/dist/{es → src}/minimal-string/string-format.js +0 -0
  162. /package/dist/{es → src}/minimal-string/string-format.js.map +0 -0
  163. /package/dist/{es → src}/types.js +0 -0
  164. /package/dist/{es → src}/types.js.map +0 -0
  165. /package/dist/{es → src}/util.js +0 -0
  166. /package/dist/{es → src}/util.js.map +0 -0
@@ -1,42 +0,0 @@
1
- import { Branches } from './branches';
2
- import { Parents } from './parents';
3
- import { AbstractNode } from './abstract-node';
4
- export class InternalNode extends AbstractNode {
5
- constructor(level, rootNode, parent) {
6
- super(level, rootNode, 'InternalNode');
7
- this.branches = new Branches(this);
8
- this.parents = new Parents(this);
9
- this.parents.add(parent);
10
- }
11
- /**
12
- * by the reduction-rule of bdd,
13
- * if both branches are equal,
14
- * we can remove this node from the bdd
15
- */
16
- applyReductionRule() {
17
- // console.log('applyReductionRule() ' + this.id);
18
- if (this.branches.hasEqualBranches()) {
19
- this.ensureNotDeleted('applyReductionRule');
20
- const keepBranch = this.branches.getBranch('0');
21
- // move own parents to keepBranch
22
- const ownParents = this.parents.getAll();
23
- ownParents.forEach(parent => {
24
- // console.log('ownParent: ' + parent.id);
25
- const branchKey = parent.branches.getKeyOfNode(this);
26
- parent.branches.setBranch(branchKey, keepBranch);
27
- // remove parents from own list
28
- // this will auto-remove the connection to the other '1'-branch
29
- this.parents.remove(parent);
30
- // if parent has now two equal branches,
31
- // we have to apply the reduction again
32
- // to ensure we end in a valid state
33
- if (parent.branches.areBranchesStrictEqual() && parent.isInternalNode()) {
34
- parent.applyReductionRule();
35
- }
36
- });
37
- return true;
38
- }
39
- return false;
40
- }
41
- }
42
- //# sourceMappingURL=internal-node.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"leaf-node.js","sourceRoot":"","sources":["../../src/leaf-node.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAG/C,OAAO,EAAE,eAAe,EAAE,MAAM,QAAQ,CAAC;AAGzC,MAAM,OAAO,QAAS,SAAQ,YAAY;IAGtC,YACI,KAAa,EACb,QAAkB,EACX,KAAa,EACpB,MAAmB;QAEnB,KAAK,CAAC,KAAK,EAAE,QAAQ,EAAE,UAAU,CAAC,CAAC;QAH5B,UAAK,GAAL,KAAK,CAAQ;QALjB,YAAO,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;QAS/B,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAC7B,CAAC;IAED,mBAAmB,CAAC,KAAa;QAC7B,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAExB,IAAI,IAAI,CAAC,KAAK,KAAK,KAAK,EAAE;YACtB,OAAO,KAAK,CAAC;SAChB;QAED,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;QACtC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;YACrB,MAAM,SAAS,GAAG,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;YACrD,MAAM,WAAW,GAAG,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC,CAAC;YAC1E,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YAC5B,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;YAClD,IAAI,MAAM,CAAC,cAAc,EAAE,EAAE;gBACxB,MAAuB,CAAC,kBAAkB,EAAE,CAAC;aACjD;QACL,CAAC,CAAC,CAAC;QAEH,OAAO,IAAI,CAAC;IAChB,CAAC;CAGJ"}
@@ -1,11 +0,0 @@
1
- import { RootNode } from '../root-node';
2
- import { SimpleBdd } from '../types';
3
- import { AbstractNode } from '../abstract-node';
4
- /**
5
- * @recursive
6
- */
7
- export declare function bddToSimpleBdd(bdd: RootNode): SimpleBdd;
8
- /**
9
- * @recursive
10
- */
11
- export declare function nodeToSimpleBddNode(node: AbstractNode): SimpleBdd;
@@ -1,5 +0,0 @@
1
- export * from './bdd-to-minimal-string';
2
- export * from './minimal-string-to-simple-bdd';
3
- export * from './resolve-with-simple-bdd';
4
- export * from './string-format';
5
- export * from './bdd-to-simple-bdd';
@@ -1,6 +0,0 @@
1
- export * from './bdd-to-minimal-string';
2
- export * from './minimal-string-to-simple-bdd';
3
- export * from './resolve-with-simple-bdd';
4
- export * from './string-format';
5
- export * from './bdd-to-simple-bdd';
6
- //# sourceMappingURL=index.js.map
@@ -1,17 +0,0 @@
1
- import { booleanToBooleanString } from '../util';
2
- export function resolveWithSimpleBdd(simpleBdd, fns, input) {
3
- let currentNode = simpleBdd;
4
- let currentLevel = simpleBdd.l;
5
- while (true) {
6
- const booleanResult = fns[currentLevel](input);
7
- const branchKey = booleanToBooleanString(booleanResult);
8
- currentNode = currentNode[branchKey];
9
- if (typeof currentNode === 'number' || typeof currentNode === 'string') {
10
- return currentNode;
11
- }
12
- else {
13
- currentLevel = currentNode.l;
14
- }
15
- }
16
- }
17
- //# sourceMappingURL=resolve-with-simple-bdd.js.map
@@ -1,43 +0,0 @@
1
- import type { TruthTable } from './types';
2
- import { RootNode } from './root-node';
3
- /**
4
- * a function that is called each time
5
- * a 'better' bdd was found
6
- */
7
- export type OptmisiationCallback = (bdd: OptimisationResult) => void;
8
- export interface OptimisationResult {
9
- bdd: RootNode;
10
- truthTable: TruthTable;
11
- }
12
- export type CompareResultsFunction = (a: RootNode, b: RootNode) => RootNode | Promise<RootNode>;
13
- /**
14
- * returns the bdd with less nodes
15
- */
16
- export declare const defaultCompareResults: CompareResultsFunction;
17
- export interface OptimizeBruteForceInput {
18
- truthTable: TruthTable;
19
- iterations?: number;
20
- onBetterBdd?: OptmisiationCallback;
21
- compareResults?: CompareResultsFunction;
22
- afterBddCreation?: (bdd: RootNode) => void;
23
- log?: boolean;
24
- }
25
- /**
26
- * optimises the ordering of the boolean functions
27
- * by randomly sorting the array
28
- * and checking the resulting bdd
29
- */
30
- export declare function optimizeBruteForce({ truthTable, iterations, onBetterBdd, compareResults, afterBddCreation, log }: OptimizeBruteForceInput): Promise<OptimisationResult>;
31
- export type BooleanFunctionReorderMapping = {
32
- [indexAfter: number]: number;
33
- };
34
- export type BooleanFunctionReorderMappingReverse = {
35
- [indexBefore: number]: number;
36
- };
37
- export declare function shuffleBooleanOrdering(truthTable: TruthTable): {
38
- newTable: TruthTable;
39
- mapping: BooleanFunctionReorderMapping;
40
- mappingBeforeToAfter: BooleanFunctionReorderMappingReverse;
41
- };
42
- export declare function changeKeyOrder(oldKey: string, mappingBeforeToAfter: BooleanFunctionReorderMapping): string;
43
- export declare function getArrayWithIndexes(size: number): number[];
@@ -1,132 +0,0 @@
1
- import { createBddFromTruthTable } from './create-bdd-from-truth-table';
2
- import { firstKeyOfMap, shuffleArray, lastOfArray } from './util';
3
- /**
4
- * returns the bdd with less nodes
5
- */
6
- export const defaultCompareResults = function (a, b) {
7
- if (a.countNodes() <= b.countNodes()) {
8
- return a;
9
- }
10
- else {
11
- return b;
12
- }
13
- };
14
- /**
15
- * optimises the ordering of the boolean functions
16
- * by randomly sorting the array
17
- * and checking the resulting bdd
18
- */
19
- export async function optimizeBruteForce({ truthTable, iterations = Infinity, onBetterBdd = () => null, compareResults = defaultCompareResults, afterBddCreation = () => null, log = false }) {
20
- const initialBdd = createBddFromTruthTable(truthTable);
21
- afterBddCreation(initialBdd);
22
- initialBdd.minimize();
23
- let currentBestResult = {
24
- truthTable,
25
- bdd: initialBdd
26
- };
27
- if (log) {
28
- initialBdd.log();
29
- console.log('initial nodes amount: ' + initialBdd.countNodes());
30
- }
31
- let t = 0;
32
- while (t < iterations) {
33
- t++;
34
- if (log) {
35
- console.log('-'.repeat(50));
36
- console.log('optimizeBruteForce() itterate once');
37
- }
38
- const shuffledOrdering = shuffleBooleanOrdering(truthTable);
39
- const nextBdd = createBddFromTruthTable(shuffledOrdering.newTable);
40
- // change the levels of each node
41
- const newNodesByLevel = new Map();
42
- const lastLevel = lastOfArray(nextBdd.getLevels());
43
- const newSortedLevels = [];
44
- nextBdd.getLevels()
45
- .filter(level => level !== lastLevel)
46
- .forEach(level => {
47
- const newLevel = shuffledOrdering.mappingBeforeToAfter[level];
48
- newSortedLevels.push(newLevel);
49
- const levelSet = new Set();
50
- newNodesByLevel.set(newLevel, levelSet);
51
- nextBdd.getNodesOfLevel(level).forEach(node => {
52
- node.level = newLevel;
53
- levelSet.add(node);
54
- });
55
- });
56
- const lastLevelSet = new Set();
57
- nextBdd.getNodesOfLevel(lastLevel).forEach(node => lastLevelSet.add(node));
58
- newNodesByLevel.set(lastLevel, lastLevelSet);
59
- newSortedLevels.push(lastLevel);
60
- nextBdd.nodesByLevel = newNodesByLevel;
61
- nextBdd.levels = newSortedLevels;
62
- afterBddCreation(nextBdd);
63
- nextBdd.minimize();
64
- if (log) {
65
- console.log('got new bdd with nodes amount of ' + nextBdd.countNodes());
66
- // nextBdd.log();
67
- console.dir(shuffledOrdering.mappingBeforeToAfter);
68
- }
69
- const betterBdd = await compareResults(currentBestResult.bdd, nextBdd);
70
- if (betterBdd.type !== 'RootNode') {
71
- throw new Error('compareResults did not return a bdd');
72
- }
73
- if (betterBdd === nextBdd) {
74
- if (log) {
75
- console.log('#'.repeat(50));
76
- console.log('found better bdd ' + nextBdd.countNodes());
77
- }
78
- currentBestResult = {
79
- bdd: nextBdd,
80
- truthTable: shuffledOrdering.newTable
81
- };
82
- onBetterBdd(currentBestResult);
83
- }
84
- }
85
- return currentBestResult;
86
- }
87
- export function shuffleBooleanOrdering(truthTable) {
88
- const firstKey = firstKeyOfMap(truthTable);
89
- const arrayWithIndexes = getArrayWithIndexes(firstKey.length);
90
- const shuffled = shuffleArray(arrayWithIndexes);
91
- const mapping = {};
92
- const mappingBeforeToAfter = {};
93
- shuffled.forEach((indexBefore, indexAfter) => {
94
- mapping[indexAfter] = indexBefore;
95
- mappingBeforeToAfter[indexBefore] = indexAfter;
96
- });
97
- const newTable = new Map();
98
- for (const [key, value] of truthTable.entries()) {
99
- const newKey = changeKeyOrder(key, mapping);
100
- newTable.set(newKey, value);
101
- }
102
- return {
103
- newTable,
104
- mapping,
105
- mappingBeforeToAfter
106
- };
107
- }
108
- export function changeKeyOrder(oldKey, mappingBeforeToAfter) {
109
- const chars = oldKey
110
- .split('')
111
- .map((char, indexBefore) => {
112
- return {
113
- char,
114
- indexBefore,
115
- indexAfter: mappingBeforeToAfter[indexBefore]
116
- };
117
- })
118
- .sort((a, b) => a.indexAfter - b.indexAfter)
119
- .map(charObj => charObj.char)
120
- .join('');
121
- return chars;
122
- }
123
- export function getArrayWithIndexes(size) {
124
- const ret = [];
125
- let last = 0;
126
- while (last < size) {
127
- ret.push(last);
128
- last++;
129
- }
130
- return ret;
131
- }
132
- //# sourceMappingURL=optimize-brute-force.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"parents.js","sourceRoot":"","sources":["../../src/parents.ts"],"names":[],"mappings":"AAKA;;GAEG;AACH,MAAM,OAAO,OAAO;IAIhB,YACW,IAAiB;QAAjB,SAAI,GAAJ,IAAI,CAAa;QAHpB,YAAO,GAAqB,IAAI,GAAG,EAAE,CAAC;IAI1C,CAAC;IAEE,MAAM,CAAC,IAAiB;QAC3B,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAE1B,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,KAAK,CAAC,EAAE;YACzB,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;SACtB;IACL,CAAC;IAEM,MAAM;QACT,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACpC,CAAC;IAEM,GAAG,CAAC,IAAiB;QACxB,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,KAAK,IAAI,CAAC,KAAK,EAAE;YAChC,MAAM,IAAI,KAAK,CAAC,uDAAuD,CAAC,CAAC;SAC5E;QACD,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAC3B,CAAC;IAEM,GAAG,CAAC,IAAiB;QACxB,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAClC,CAAC;IAED,QAAQ;QACJ,MAAM,GAAG,GAAa,EAAE,CAAC;QACzB,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,OAAO,EAAE;YAC/B,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;SACvB;QACD,OAAO,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;IAED,IAAI,IAAI;QACJ,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;IAC7B,CAAC;CACJ"}
@@ -1,28 +0,0 @@
1
- import { AbstractNode } from './abstract-node';
2
- import { Branches } from './branches';
3
- import type { NonRootNode, ResolverFunctions, SimpleBdd } from './types';
4
- import { LeafNode } from './leaf-node';
5
- export declare class RootNode extends AbstractNode {
6
- branches: Branches;
7
- levels: number[];
8
- nodesByLevel: Map<number, Set<AbstractNode>>;
9
- constructor();
10
- addNode(node: NonRootNode): void;
11
- removeNode(node: NonRootNode): void;
12
- private ensureLevelSetExists;
13
- getLevels(): number[];
14
- getNodesOfLevel(level: number): NonRootNode[];
15
- countNodes(): number;
16
- /**
17
- * applies the reduction rules to the whole bdd
18
- */
19
- minimize(logState?: boolean): void;
20
- getLeafNodes(): LeafNode[];
21
- /**
22
- * strips all leaf-nodes
23
- * with the given value
24
- */
25
- removeIrrelevantLeafNodes(leafNodeValue: number): void;
26
- resolve(fns: ResolverFunctions, booleanFunctionInput: any): number;
27
- toSimpleBdd(): SimpleBdd;
28
- }
@@ -1,154 +0,0 @@
1
- import { AbstractNode } from './abstract-node';
2
- import { Branches } from './branches';
3
- import { lastOfArray, booleanToBooleanString } from './util';
4
- import { bddToSimpleBdd } from './minimal-string';
5
- export class RootNode extends AbstractNode {
6
- constructor() {
7
- super(0, null, 'RootNode');
8
- this.branches = new Branches(this);
9
- this.levels = [];
10
- this.nodesByLevel = new Map();
11
- this.levels.push(0);
12
- const level0Set = new Set();
13
- level0Set.add(this);
14
- this.nodesByLevel.set(0, level0Set);
15
- }
16
- addNode(node) {
17
- const level = node.level;
18
- if (!this.levels.includes(level)) {
19
- this.levels.push(level);
20
- }
21
- this.ensureLevelSetExists(level);
22
- const set = this.nodesByLevel.get(level);
23
- set === null || set === void 0 ? void 0 : set.add(node);
24
- }
25
- removeNode(node) {
26
- const set = this.nodesByLevel.get(node.level);
27
- if (!set.has(node)) {
28
- throw new Error('removed non-existing node ' + node.id);
29
- }
30
- set.delete(node);
31
- }
32
- ensureLevelSetExists(level) {
33
- if (!this.nodesByLevel.has(level)) {
34
- this.nodesByLevel.set(level, new Set());
35
- }
36
- }
37
- getLevels() {
38
- return Array.from(this.levels).sort((a, b) => a - b);
39
- }
40
- getNodesOfLevel(level) {
41
- this.ensureLevelSetExists(level);
42
- const set = this.nodesByLevel.get(level);
43
- return Array.from(set);
44
- }
45
- countNodes() {
46
- let ret = 0;
47
- this.getLevels().forEach(level => {
48
- const nodesAmount = this.getNodesOfLevel(level).length;
49
- ret = ret + nodesAmount;
50
- });
51
- return ret;
52
- }
53
- /**
54
- * applies the reduction rules to the whole bdd
55
- */
56
- minimize(logState = false) {
57
- // console.log('minimize(): START ###############');
58
- let done = false;
59
- while (!done) {
60
- if (logState) {
61
- console.log('minimize() itterate once');
62
- }
63
- let successCount = 0;
64
- let lastLevel = lastOfArray(this.getLevels());
65
- while (lastLevel > 0) {
66
- const nodes = this.getNodesOfLevel(lastLevel);
67
- if (logState) {
68
- console.log('minimize() run for level ' + lastLevel +
69
- ' with ' + nodes.length + ' nodes');
70
- // console.dir(nodes);
71
- }
72
- let nodeCount = 0;
73
- for (const node of nodes) {
74
- nodeCount++;
75
- // do not run that often because it is expensive
76
- if (logState && nodeCount % 4000 === 0) {
77
- console.log('minimize() node #' + node.id);
78
- }
79
- if (node.isLeafNode()) {
80
- // console.log('have leaf node ' + node.id);
81
- const reductionDone = node.asLeafNode().applyEliminationRule();
82
- if (reductionDone) {
83
- successCount++;
84
- }
85
- }
86
- if (!node.deleted && node.isInternalNode()) {
87
- const useNode = node;
88
- const reductionDone = useNode.applyReductionRule();
89
- let eliminationDone = false;
90
- if (!useNode.deleted) {
91
- // not might now be deleted from reduction-rule
92
- eliminationDone = useNode.applyEliminationRule(nodes);
93
- }
94
- if (reductionDone || eliminationDone) {
95
- successCount++;
96
- }
97
- }
98
- }
99
- lastLevel--;
100
- }
101
- if (successCount === 0) {
102
- // could do no more optimisations
103
- done = true;
104
- }
105
- else {
106
- if (logState) {
107
- console.log('minimize() itteration done with ' +
108
- successCount + ' minimisations');
109
- }
110
- }
111
- }
112
- }
113
- getLeafNodes() {
114
- const lastLevel = lastOfArray(this.getLevels());
115
- const leafNodes = this.getNodesOfLevel(lastLevel).reverse();
116
- return leafNodes;
117
- }
118
- /**
119
- * strips all leaf-nodes
120
- * with the given value
121
- */
122
- removeIrrelevantLeafNodes(leafNodeValue) {
123
- let done = false;
124
- while (!done) {
125
- let countRemoved = 0;
126
- const leafNodes = this.getLeafNodes();
127
- for (const leafNode of leafNodes) {
128
- const removed = leafNode.removeIfValueEquals(leafNodeValue);
129
- if (removed) {
130
- countRemoved++;
131
- }
132
- }
133
- this.minimize();
134
- if (countRemoved === 0) {
135
- done = true;
136
- }
137
- }
138
- }
139
- resolve(fns, booleanFunctionInput) {
140
- let currentNode = this;
141
- while (true) {
142
- const booleanResult = fns[currentNode.level](booleanFunctionInput);
143
- const branchKey = booleanToBooleanString(booleanResult);
144
- currentNode = currentNode.branches.getBranch(branchKey);
145
- if (currentNode.isLeafNode()) {
146
- return currentNode.asLeafNode().value;
147
- }
148
- }
149
- }
150
- toSimpleBdd() {
151
- return bddToSimpleBdd(this);
152
- }
153
- }
154
- //# sourceMappingURL=root-node.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"root-node.js","sourceRoot":"","sources":["../../src/root-node.ts"],"names":[],"mappings":"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"}
@@ -1,33 +0,0 @@
1
- import type { NonRootNode, NodeType } from './types';
2
- import { RootNode } from './root-node';
3
- import { InternalNode } from './internal-node';
4
- import { LeafNode } from './leaf-node';
5
- export declare class AbstractNode {
6
- level: number;
7
- readonly id: string;
8
- deleted: boolean;
9
- type: NodeType;
10
- rootNode: RootNode;
11
- constructor(level: number, rootNode: RootNode | null, type: NodeType);
12
- isEqualToOtherNode(otherNode: NonRootNode | RootNode, ownString?: string): boolean;
13
- remove(): void;
14
- toJSON(withId?: boolean): any;
15
- toString(): string;
16
- isRootNode(): boolean;
17
- isInternalNode(): boolean;
18
- isLeafNode(): boolean;
19
- asRootNode(): RootNode;
20
- asInternalNode(): InternalNode;
21
- asLeafNode(): LeafNode;
22
- ensureNotDeleted(op?: string): void;
23
- log(): void;
24
- /**
25
- * by the elimination-rule of bdd,
26
- * if two branches of the same level are equal,
27
- * one can be removed
28
- *
29
- * See page 21 at:
30
- * @link https://people.eecs.berkeley.edu/~sseshia/219c/lectures/BinaryDecisionDiagrams.pdf
31
- */
32
- applyEliminationRule<T extends AbstractNode>(nodesOfSameLevel?: T[]): boolean;
33
- }
@@ -1 +0,0 @@
1
- {"version":3,"file":"abstract-node.js","sourceRoot":"","sources":["../../src/abstract-node.ts"],"names":[],"mappings":"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"}
@@ -1,20 +0,0 @@
1
- import type { BooleanString, NonRootNode, NonLeafNode } from './types';
2
- import { AbstractNode } from './abstract-node';
3
- /**
4
- * represents the branches of a single node
5
- */
6
- export declare class Branches {
7
- private node;
8
- deleted: boolean;
9
- private branches;
10
- constructor(node: NonLeafNode);
11
- setBranch(which: BooleanString, branchNode: NonRootNode): void;
12
- getKeyOfNode(node: NonRootNode): BooleanString;
13
- getBranch(which: BooleanString): NonRootNode;
14
- getBothBranches(): NonRootNode[];
15
- hasBranchAsNode(node: AbstractNode): boolean;
16
- hasNodeIdAsBranch(id: string): boolean;
17
- areBranchesStrictEqual(): boolean;
18
- hasEqualBranches(): boolean;
19
- }
20
- export declare function ensureNodesNotStrictEqual(node1: NonRootNode, node2: NonRootNode): void;
@@ -1,70 +0,0 @@
1
- /**
2
- * represents the branches of a single node
3
- */
4
- export class Branches {
5
- constructor(node) {
6
- this.node = node;
7
- this.deleted = false;
8
- this.branches = {};
9
- }
10
- setBranch(which, branchNode) {
11
- const previous = this.branches[which];
12
- if (previous === branchNode) {
13
- return;
14
- }
15
- // set new branch
16
- this.branches[which] = branchNode;
17
- branchNode.parents.add(this.node);
18
- }
19
- getKeyOfNode(node) {
20
- if (this.getBranch('0') === node) {
21
- return '0';
22
- }
23
- else if (this.getBranch('1') === node) {
24
- return '1';
25
- }
26
- else {
27
- throw new Error('none matched');
28
- }
29
- }
30
- getBranch(which) {
31
- return this.branches[which];
32
- }
33
- getBothBranches() {
34
- return [
35
- this.getBranch('0'),
36
- this.getBranch('1')
37
- ];
38
- }
39
- hasBranchAsNode(node) {
40
- if (this.getBranch('0') === node ||
41
- this.getBranch('1') === node) {
42
- return true;
43
- }
44
- else {
45
- return false;
46
- }
47
- }
48
- hasNodeIdAsBranch(id) {
49
- if (this.getBranch('0').id === id ||
50
- this.getBranch('1').id === id) {
51
- return true;
52
- }
53
- else {
54
- return false;
55
- }
56
- }
57
- areBranchesStrictEqual() {
58
- return this.branches['0'] === this.branches['1'];
59
- }
60
- hasEqualBranches() {
61
- return JSON.stringify(this.branches['0']) ===
62
- JSON.stringify(this.branches['1']);
63
- }
64
- }
65
- export function ensureNodesNotStrictEqual(node1, node2) {
66
- if (node1 === node2) {
67
- throw new Error('cannot have two strict equal branches');
68
- }
69
- }
70
- //# sourceMappingURL=branches.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"branches.js","sourceRoot":"","sources":["../../src/branches.ts"],"names":[],"mappings":"AAGA;;GAEG;AACH,MAAM,OAAO,QAAQ;IAMjB,YACY,IAAiB;QAAjB,SAAI,GAAJ,IAAI,CAAa;QANtB,YAAO,GAAY,KAAK,CAAC;QACxB,aAAQ,GAEZ,EAAS,CAAC;IAIV,CAAC;IAEE,SAAS,CAAC,KAAoB,EAAE,UAAuB;QAC1D,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QACtC,IAAI,QAAQ,KAAK,UAAU,EAAE;YACzB,OAAO;SACV;QAED,iBAAiB;QACjB,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,UAAU,CAAC;QAClC,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACtC,CAAC;IAEM,YAAY,CAAC,IAAiB;QACjC,IAAI,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,IAAI,EAAE;YAC9B,OAAO,GAAG,CAAC;SACd;aAAM,IAAI,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,IAAI,EAAE;YACrC,OAAO,GAAG,CAAC;SACd;aAAM;YACH,MAAM,IAAI,KAAK,CAAC,cAAc,CAAC,CAAC;SACnC;IACL,CAAC;IAEM,SAAS,CAAC,KAAoB;QACjC,OAAO,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IAChC,CAAC;IAEM,eAAe;QAClB,OAAO;YACH,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC;YACnB,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC;SACtB,CAAC;IACN,CAAC;IAEM,eAAe,CAAC,IAAkB;QACrC,IACI,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,IAAI;YAC5B,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,IAAI,EAC9B;YACE,OAAO,IAAI,CAAC;SACf;aAAM;YACH,OAAO,KAAK,CAAC;SAChB;IACL,CAAC;IAEM,iBAAiB,CAAC,EAAU;QAC/B,IACI,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE;YAC7B,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,EAC/B;YACE,OAAO,IAAI,CAAC;SACf;aAAM;YACH,OAAO,KAAK,CAAC;SAChB;IACL,CAAC;IAEM,sBAAsB;QACzB,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;IACrD,CAAC;IAEM,gBAAgB;QACnB,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;YACrC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;IAC3C,CAAC;CACJ;AAED,MAAM,UAAU,yBAAyB,CACrC,KAAkB,EAClB,KAAkB;IAElB,IAAI,KAAK,KAAK,KAAK,EAAE;QACjB,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;KAC5D;AACL,CAAC"}
@@ -1,3 +0,0 @@
1
- import { RootNode } from './root-node';
2
- import type { TruthTable } from './types';
3
- export declare function createBddFromTruthTable(truthTable: TruthTable): RootNode;
@@ -1 +0,0 @@
1
- {"version":3,"file":"create-bdd-from-truth-table.js","sourceRoot":"","sources":["../../src/create-bdd-from-truth-table.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAClC,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAGvC,MAAM,UAAU,uBAAuB,CACnC,UAAsB;IAEtB,MAAM,IAAI,GAAG,IAAI,QAAQ,EAAE,CAAC;IAE5B,MAAM,QAAQ,GAAG,UAAU,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC;IAChD,MAAM,SAAS,GAAG,QAAQ,CAAC,MAAM,CAAC;IAClC,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;IAC1C,IAAI,UAAU,CAAC,IAAI,KAAK,UAAU,EAAE;QAChC,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC;KACtD;IAGD,KAAK,MAAM,CAAC,QAAQ,EAAE,KAAK,CAAC,IAAI,UAAU,EAAE;QACxC,IAAI,QAAQ,GAAgB,IAAI,CAAC;QAEjC,uCAAuC;QACvC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;YAC5C,MAAM,KAAK,GAAG,CAAC,GAAG,CAAC,CAAC;YACpB,MAAM,KAAK,GAAkB,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAkB,CAAC;YAEjE,sDAAsD;YACtD,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE;gBACrC,QAAQ,CAAC,QAAQ,CAAC,SAAS,CACvB,KAAK,EACL,IAAI,YAAY,CACZ,KAAK,EACL,IAAI,EACJ,QAAQ,CACX,CACJ,CAAC;aACL;YACD,QAAQ,GAAG,QAAQ,CAAC,QAAQ,CAAC,SAAS,CAAC,KAAK,CAAgB,CAAC;SAChE;QAED,yBAAyB;QACzB,MAAM,SAAS,GAAG,QAAQ,CAAC,QAAQ,CAAkB,CAAC;QACtD,IAAI,QAAQ,CAAC,QAAQ,CAAC,SAAS,CAAC,SAAS,CAAC,EAAE;YACxC,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAC;SACtE;QACD,QAAQ,CAAC,QAAQ,CAAC,SAAS,CACvB,SAAS,EACT,IAAI,QAAQ,CACR,QAAQ,CAAC,MAAM,EACf,IAAI,EACJ,KAAK,EACL,QAAQ,CACX,CACJ,CAAC;KACL;IAED,OAAO,IAAI,CAAC;AAChB,CAAC"}
@@ -1,8 +0,0 @@
1
- import { RootNode } from './root-node';
2
- import { AbstractNode } from './abstract-node';
3
- /**
4
- * run some tests on the bdd
5
- * to ensure everything is correct
6
- */
7
- export declare function ensureCorrectBdd(bdd: RootNode): void;
8
- export declare function getNodesRecursive(node: AbstractNode, set?: Set<AbstractNode>): Set<AbstractNode>;