binary-decision-diagram 1.4.0 → 2.0.1

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 (79) hide show
  1. package/.github/workflows/main.yml +2 -2
  2. package/dist/es/abstract-node.js +45 -51
  3. package/dist/es/abstract-node.js.map +1 -1
  4. package/dist/es/branches.js +20 -22
  5. package/dist/es/branches.js.map +1 -1
  6. package/dist/es/create-bdd-from-truth-table.js +19 -57
  7. package/dist/es/create-bdd-from-truth-table.js.map +1 -1
  8. package/dist/es/ensure-correct-bdd.js +26 -27
  9. package/dist/es/ensure-correct-bdd.js.map +1 -1
  10. package/dist/es/fill-truth-table.js +3 -3
  11. package/dist/es/fill-truth-table.js.map +1 -1
  12. package/dist/es/find-similar-node.js +3 -3
  13. package/dist/es/find-similar-node.js.map +1 -1
  14. package/dist/es/internal-node.js +15 -35
  15. package/dist/es/internal-node.js.map +1 -1
  16. package/dist/es/leaf-node.js +14 -34
  17. package/dist/es/leaf-node.js.map +1 -1
  18. package/dist/es/minimal-string/bdd-to-minimal-string.js +15 -15
  19. package/dist/es/minimal-string/bdd-to-minimal-string.js.map +1 -1
  20. package/dist/es/minimal-string/bdd-to-simple-bdd.js +2 -2
  21. package/dist/es/minimal-string/bdd-to-simple-bdd.js.map +1 -1
  22. package/dist/es/minimal-string/minimal-string-to-simple-bdd.js +27 -27
  23. package/dist/es/minimal-string/minimal-string-to-simple-bdd.js.map +1 -1
  24. package/dist/es/minimal-string/resolve-with-simple-bdd.js +4 -4
  25. package/dist/es/minimal-string/resolve-with-simple-bdd.js.map +1 -1
  26. package/dist/es/minimal-string/string-format.js +7 -7
  27. package/dist/es/minimal-string/string-format.js.map +1 -1
  28. package/dist/es/optimize-brute-force.d.ts +4 -4
  29. package/dist/es/optimize-brute-force.js +88 -186
  30. package/dist/es/optimize-brute-force.js.map +1 -1
  31. package/dist/es/parents.js +19 -47
  32. package/dist/es/parents.js.map +1 -1
  33. package/dist/es/root-node.js +79 -133
  34. package/dist/es/root-node.js.map +1 -1
  35. package/dist/es/types.d.ts +9 -9
  36. package/dist/es/util.js +21 -39
  37. package/dist/es/util.js.map +1 -1
  38. package/dist/lib/abstract-node.js +47 -52
  39. package/dist/lib/abstract-node.js.map +1 -1
  40. package/dist/lib/branches.js +20 -21
  41. package/dist/lib/branches.js.map +1 -1
  42. package/dist/lib/create-bdd-from-truth-table.js +23 -61
  43. package/dist/lib/create-bdd-from-truth-table.js.map +1 -1
  44. package/dist/lib/ensure-correct-bdd.js +26 -27
  45. package/dist/lib/ensure-correct-bdd.js.map +1 -1
  46. package/dist/lib/fill-truth-table.js +4 -4
  47. package/dist/lib/fill-truth-table.js.map +1 -1
  48. package/dist/lib/find-similar-node.js +3 -3
  49. package/dist/lib/find-similar-node.js.map +1 -1
  50. package/dist/lib/index.js +5 -1
  51. package/dist/lib/index.js.map +1 -1
  52. package/dist/lib/internal-node.js +18 -37
  53. package/dist/lib/internal-node.js.map +1 -1
  54. package/dist/lib/leaf-node.js +17 -36
  55. package/dist/lib/leaf-node.js.map +1 -1
  56. package/dist/lib/minimal-string/bdd-to-minimal-string.js +17 -17
  57. package/dist/lib/minimal-string/bdd-to-minimal-string.js.map +1 -1
  58. package/dist/lib/minimal-string/bdd-to-simple-bdd.js +2 -2
  59. package/dist/lib/minimal-string/bdd-to-simple-bdd.js.map +1 -1
  60. package/dist/lib/minimal-string/index.js +5 -1
  61. package/dist/lib/minimal-string/index.js.map +1 -1
  62. package/dist/lib/minimal-string/minimal-string-to-simple-bdd.js +29 -29
  63. package/dist/lib/minimal-string/minimal-string-to-simple-bdd.js.map +1 -1
  64. package/dist/lib/minimal-string/resolve-with-simple-bdd.js +5 -5
  65. package/dist/lib/minimal-string/resolve-with-simple-bdd.js.map +1 -1
  66. package/dist/lib/minimal-string/string-format.js +5 -5
  67. package/dist/lib/minimal-string/string-format.js.map +1 -1
  68. package/dist/lib/optimize-brute-force.d.ts +4 -4
  69. package/dist/lib/optimize-brute-force.js +90 -188
  70. package/dist/lib/optimize-brute-force.js.map +1 -1
  71. package/dist/lib/parents.js +19 -46
  72. package/dist/lib/parents.js.map +1 -1
  73. package/dist/lib/root-node.js +83 -136
  74. package/dist/lib/root-node.js.map +1 -1
  75. package/dist/lib/types.d.ts +9 -9
  76. package/dist/lib/util.js +21 -39
  77. package/dist/lib/util.js.map +1 -1
  78. package/package.json +9 -9
  79. package/tsconfig.json +2 -2
@@ -1,75 +1,12 @@
1
1
  "use strict";
2
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
- return new (P || (P = Promise))(function (resolve, reject) {
5
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
- step((generator = generator.apply(thisArg, _arguments || [])).next());
9
- });
10
- };
11
- var __generator = (this && this.__generator) || function (thisArg, body) {
12
- var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
13
- return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
14
- function verb(n) { return function (v) { return step([n, v]); }; }
15
- function step(op) {
16
- if (f) throw new TypeError("Generator is already executing.");
17
- while (_) try {
18
- if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
19
- if (y = 0, t) op = [op[0] & 2, t.value];
20
- switch (op[0]) {
21
- case 0: case 1: t = op; break;
22
- case 4: _.label++; return { value: op[1], done: false };
23
- case 5: _.label++; y = op[1]; op = [0]; continue;
24
- case 7: op = _.ops.pop(); _.trys.pop(); continue;
25
- default:
26
- if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
27
- if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
28
- if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
29
- if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
30
- if (t[2]) _.ops.pop();
31
- _.trys.pop(); continue;
32
- }
33
- op = body.call(thisArg, _);
34
- } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
35
- if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
36
- }
37
- };
38
- var __values = (this && this.__values) || function(o) {
39
- var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
40
- if (m) return m.call(o);
41
- if (o && typeof o.length === "number") return {
42
- next: function () {
43
- if (o && i >= o.length) o = void 0;
44
- return { value: o && o[i++], done: !o };
45
- }
46
- };
47
- throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
48
- };
49
- var __read = (this && this.__read) || function (o, n) {
50
- var m = typeof Symbol === "function" && o[Symbol.iterator];
51
- if (!m) return o;
52
- var i = m.call(o), r, ar = [], e;
53
- try {
54
- while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
55
- }
56
- catch (error) { e = { error: error }; }
57
- finally {
58
- try {
59
- if (r && !r.done && (m = i["return"])) m.call(i);
60
- }
61
- finally { if (e) throw e.error; }
62
- }
63
- return ar;
64
- };
65
2
  Object.defineProperty(exports, "__esModule", { value: true });
66
3
  exports.getArrayWithIndexes = exports.changeKeyOrder = exports.shuffleBooleanOrdering = exports.optimizeBruteForce = exports.defaultCompareResults = void 0;
67
- var create_bdd_from_truth_table_1 = require("./create-bdd-from-truth-table");
68
- var util_1 = require("./util");
4
+ const create_bdd_from_truth_table_1 = require("./create-bdd-from-truth-table");
5
+ const util_1 = require("./util");
69
6
  /**
70
7
  * returns the bdd with less nodes
71
8
  */
72
- var defaultCompareResults = function (a, b) {
9
+ const defaultCompareResults = function (a, b) {
73
10
  if (a.countNodes() <= b.countNodes()) {
74
11
  return a;
75
12
  }
@@ -83,151 +20,116 @@ exports.defaultCompareResults = defaultCompareResults;
83
20
  * by randomly sorting the array
84
21
  * and checking the resulting bdd
85
22
  */
86
- function optimizeBruteForce(_a) {
87
- var truthTable = _a.truthTable, _b = _a.iterations, iterations = _b === void 0 ? Infinity : _b, _c = _a.onBetterBdd, onBetterBdd = _c === void 0 ? function () { return null; } : _c, _d = _a.compareResults, compareResults = _d === void 0 ? exports.defaultCompareResults : _d, _e = _a.afterBddCreation, afterBddCreation = _e === void 0 ? function () { return null; } : _e, _f = _a.log, log = _f === void 0 ? false : _f;
88
- return __awaiter(this, void 0, void 0, function () {
89
- var initialBdd, currentBestResult, t, _loop_1;
90
- return __generator(this, function (_g) {
91
- switch (_g.label) {
92
- case 0:
93
- initialBdd = (0, create_bdd_from_truth_table_1.createBddFromTruthTable)(truthTable);
94
- afterBddCreation(initialBdd);
95
- initialBdd.minimize();
96
- currentBestResult = {
97
- truthTable: truthTable,
98
- bdd: initialBdd
99
- };
100
- if (log) {
101
- initialBdd.log();
102
- console.log('initial nodes amount: ' + initialBdd.countNodes());
103
- }
104
- t = 0;
105
- _loop_1 = function () {
106
- var shuffledOrdering, nextBdd, newNodesByLevel, lastLevel, newSortedLevels, lastLevelSet, betterBdd;
107
- return __generator(this, function (_h) {
108
- switch (_h.label) {
109
- case 0:
110
- t++;
111
- if (log) {
112
- console.log('-'.repeat(50));
113
- console.log('optimizeBruteForce() itterate once');
114
- }
115
- shuffledOrdering = shuffleBooleanOrdering(truthTable);
116
- nextBdd = (0, create_bdd_from_truth_table_1.createBddFromTruthTable)(shuffledOrdering.newTable);
117
- newNodesByLevel = new Map();
118
- lastLevel = (0, util_1.lastOfArray)(nextBdd.getLevels());
119
- newSortedLevels = [];
120
- nextBdd.getLevels()
121
- .filter(function (level) { return level !== lastLevel; })
122
- .forEach(function (level) {
123
- var newLevel = shuffledOrdering.mappingBeforeToAfter[level];
124
- newSortedLevels.push(newLevel);
125
- var levelSet = new Set();
126
- newNodesByLevel.set(newLevel, levelSet);
127
- nextBdd.getNodesOfLevel(level).forEach(function (node) {
128
- node.level = newLevel;
129
- levelSet.add(node);
130
- });
131
- });
132
- lastLevelSet = new Set();
133
- nextBdd.getNodesOfLevel(lastLevel).forEach(function (node) { return lastLevelSet.add(node); });
134
- newNodesByLevel.set(lastLevel, lastLevelSet);
135
- newSortedLevels.push(lastLevel);
136
- nextBdd.nodesByLevel = newNodesByLevel;
137
- nextBdd.levels = newSortedLevels;
138
- afterBddCreation(nextBdd);
139
- nextBdd.minimize();
140
- if (log) {
141
- console.log('got new bdd with nodes amount of ' + nextBdd.countNodes());
142
- // nextBdd.log();
143
- console.dir(shuffledOrdering.mappingBeforeToAfter);
144
- }
145
- return [4 /*yield*/, compareResults(currentBestResult.bdd, nextBdd)];
146
- case 1:
147
- betterBdd = _h.sent();
148
- if (betterBdd.type !== 'RootNode') {
149
- throw new Error('compareResults did not return a bdd');
150
- }
151
- if (betterBdd === nextBdd) {
152
- if (log) {
153
- console.log('#'.repeat(50));
154
- console.log('found better bdd ' + nextBdd.countNodes());
155
- }
156
- currentBestResult = {
157
- bdd: nextBdd,
158
- truthTable: shuffledOrdering.newTable
159
- };
160
- onBetterBdd(currentBestResult);
161
- }
162
- return [2 /*return*/];
163
- }
164
- });
165
- };
166
- _g.label = 1;
167
- case 1:
168
- if (!(t < iterations)) return [3 /*break*/, 3];
169
- return [5 /*yield**/, _loop_1()];
170
- case 2:
171
- _g.sent();
172
- return [3 /*break*/, 1];
173
- case 3: return [2 /*return*/, currentBestResult];
174
- }
23
+ async function optimizeBruteForce({ truthTable, iterations = Infinity, onBetterBdd = () => null, compareResults = exports.defaultCompareResults, afterBddCreation = () => null, log = false }) {
24
+ const initialBdd = (0, create_bdd_from_truth_table_1.createBddFromTruthTable)(truthTable);
25
+ afterBddCreation(initialBdd);
26
+ initialBdd.minimize();
27
+ let currentBestResult = {
28
+ truthTable,
29
+ bdd: initialBdd
30
+ };
31
+ if (log) {
32
+ initialBdd.log();
33
+ console.log('initial nodes amount: ' + initialBdd.countNodes());
34
+ }
35
+ let t = 0;
36
+ while (t < iterations) {
37
+ t++;
38
+ if (log) {
39
+ console.log('-'.repeat(50));
40
+ console.log('optimizeBruteForce() itterate once');
41
+ }
42
+ const shuffledOrdering = shuffleBooleanOrdering(truthTable);
43
+ const nextBdd = (0, create_bdd_from_truth_table_1.createBddFromTruthTable)(shuffledOrdering.newTable);
44
+ // change the levels of each node
45
+ const newNodesByLevel = new Map();
46
+ const lastLevel = (0, util_1.lastOfArray)(nextBdd.getLevels());
47
+ const newSortedLevels = [];
48
+ nextBdd.getLevels()
49
+ .filter(level => level !== lastLevel)
50
+ .forEach(level => {
51
+ const newLevel = shuffledOrdering.mappingBeforeToAfter[level];
52
+ newSortedLevels.push(newLevel);
53
+ const levelSet = new Set();
54
+ newNodesByLevel.set(newLevel, levelSet);
55
+ nextBdd.getNodesOfLevel(level).forEach(node => {
56
+ node.level = newLevel;
57
+ levelSet.add(node);
58
+ });
175
59
  });
176
- });
60
+ const lastLevelSet = new Set();
61
+ nextBdd.getNodesOfLevel(lastLevel).forEach(node => lastLevelSet.add(node));
62
+ newNodesByLevel.set(lastLevel, lastLevelSet);
63
+ newSortedLevels.push(lastLevel);
64
+ nextBdd.nodesByLevel = newNodesByLevel;
65
+ nextBdd.levels = newSortedLevels;
66
+ afterBddCreation(nextBdd);
67
+ nextBdd.minimize();
68
+ if (log) {
69
+ console.log('got new bdd with nodes amount of ' + nextBdd.countNodes());
70
+ // nextBdd.log();
71
+ console.dir(shuffledOrdering.mappingBeforeToAfter);
72
+ }
73
+ const betterBdd = await compareResults(currentBestResult.bdd, nextBdd);
74
+ if (betterBdd.type !== 'RootNode') {
75
+ throw new Error('compareResults did not return a bdd');
76
+ }
77
+ if (betterBdd === nextBdd) {
78
+ if (log) {
79
+ console.log('#'.repeat(50));
80
+ console.log('found better bdd ' + nextBdd.countNodes());
81
+ }
82
+ currentBestResult = {
83
+ bdd: nextBdd,
84
+ truthTable: shuffledOrdering.newTable
85
+ };
86
+ onBetterBdd(currentBestResult);
87
+ }
88
+ }
89
+ return currentBestResult;
177
90
  }
178
91
  exports.optimizeBruteForce = optimizeBruteForce;
179
92
  function shuffleBooleanOrdering(truthTable) {
180
- var e_1, _a;
181
- var firstKey = (0, util_1.firstKeyOfMap)(truthTable);
182
- var arrayWithIndexes = getArrayWithIndexes(firstKey.length);
183
- var shuffled = (0, util_1.shuffleArray)(arrayWithIndexes);
184
- var mapping = {};
185
- var mappingBeforeToAfter = {};
186
- shuffled.forEach(function (indexBefore, indexAfter) {
93
+ const firstKey = (0, util_1.firstKeyOfMap)(truthTable);
94
+ const arrayWithIndexes = getArrayWithIndexes(firstKey.length);
95
+ const shuffled = (0, util_1.shuffleArray)(arrayWithIndexes);
96
+ const mapping = {};
97
+ const mappingBeforeToAfter = {};
98
+ shuffled.forEach((indexBefore, indexAfter) => {
187
99
  mapping[indexAfter] = indexBefore;
188
100
  mappingBeforeToAfter[indexBefore] = indexAfter;
189
101
  });
190
- var newTable = new Map();
191
- try {
192
- for (var _b = __values(truthTable.entries()), _c = _b.next(); !_c.done; _c = _b.next()) {
193
- var _d = __read(_c.value, 2), key = _d[0], value = _d[1];
194
- var newKey = changeKeyOrder(key, mapping);
195
- newTable.set(newKey, value);
196
- }
197
- }
198
- catch (e_1_1) { e_1 = { error: e_1_1 }; }
199
- finally {
200
- try {
201
- if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
202
- }
203
- finally { if (e_1) throw e_1.error; }
102
+ const newTable = new Map();
103
+ for (const [key, value] of truthTable.entries()) {
104
+ const newKey = changeKeyOrder(key, mapping);
105
+ newTable.set(newKey, value);
204
106
  }
205
107
  return {
206
- newTable: newTable,
207
- mapping: mapping,
208
- mappingBeforeToAfter: mappingBeforeToAfter
108
+ newTable,
109
+ mapping,
110
+ mappingBeforeToAfter
209
111
  };
210
112
  }
211
113
  exports.shuffleBooleanOrdering = shuffleBooleanOrdering;
212
114
  function changeKeyOrder(oldKey, mappingBeforeToAfter) {
213
- var chars = oldKey
115
+ const chars = oldKey
214
116
  .split('')
215
- .map(function (char, indexBefore) {
117
+ .map((char, indexBefore) => {
216
118
  return {
217
- char: char,
218
- indexBefore: indexBefore,
119
+ char,
120
+ indexBefore,
219
121
  indexAfter: mappingBeforeToAfter[indexBefore]
220
122
  };
221
123
  })
222
- .sort(function (a, b) { return a.indexAfter - b.indexAfter; })
223
- .map(function (charObj) { return charObj.char; })
124
+ .sort((a, b) => a.indexAfter - b.indexAfter)
125
+ .map(charObj => charObj.char)
224
126
  .join('');
225
127
  return chars;
226
128
  }
227
129
  exports.changeKeyOrder = changeKeyOrder;
228
130
  function getArrayWithIndexes(size) {
229
- var ret = [];
230
- var last = 0;
131
+ const ret = [];
132
+ let last = 0;
231
133
  while (last < size) {
232
134
  ret.push(last);
233
135
  last++;
@@ -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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"}
@@ -1,69 +1,42 @@
1
1
  "use strict";
2
- var __values = (this && this.__values) || function(o) {
3
- var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
4
- if (m) return m.call(o);
5
- if (o && typeof o.length === "number") return {
6
- next: function () {
7
- if (o && i >= o.length) o = void 0;
8
- return { value: o && o[i++], done: !o };
9
- }
10
- };
11
- throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
12
- };
13
2
  Object.defineProperty(exports, "__esModule", { value: true });
14
3
  exports.Parents = void 0;
15
4
  /**
16
5
  * represents the parents of a single node
17
6
  */
18
- var Parents = /** @class */ (function () {
19
- function Parents(node) {
7
+ class Parents {
8
+ constructor(node) {
20
9
  this.node = node;
21
10
  this.parents = new Set();
22
11
  }
23
- Parents.prototype.remove = function (node) {
12
+ remove(node) {
24
13
  this.parents.delete(node);
25
14
  if (this.parents.size === 0) {
26
15
  this.node.remove();
27
16
  }
28
- };
29
- Parents.prototype.getAll = function () {
17
+ }
18
+ getAll() {
30
19
  return Array.from(this.parents);
31
- };
32
- Parents.prototype.add = function (node) {
20
+ }
21
+ add(node) {
33
22
  if (this.node.level === node.level) {
34
23
  throw new Error('a node cannot be parent of a node with the same level');
35
24
  }
36
25
  this.parents.add(node);
37
- };
38
- Parents.prototype.has = function (node) {
26
+ }
27
+ has(node) {
39
28
  return this.parents.has(node);
40
- };
41
- Parents.prototype.toString = function () {
42
- var e_1, _a;
43
- var ret = [];
44
- try {
45
- for (var _b = __values(this.parents), _c = _b.next(); !_c.done; _c = _b.next()) {
46
- var parent_1 = _c.value;
47
- ret.push(parent_1.id);
48
- }
49
- }
50
- catch (e_1_1) { e_1 = { error: e_1_1 }; }
51
- finally {
52
- try {
53
- if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
54
- }
55
- finally { if (e_1) throw e_1.error; }
29
+ }
30
+ toString() {
31
+ const ret = [];
32
+ for (const parent of this.parents) {
33
+ ret.push(parent.id);
56
34
  }
57
35
  return ret.join(', ');
58
- };
59
- Object.defineProperty(Parents.prototype, "size", {
60
- get: function () {
61
- return this.parents.size;
62
- },
63
- enumerable: false,
64
- configurable: true
65
- });
66
- return Parents;
67
- }());
36
+ }
37
+ get size() {
38
+ return this.parents.size;
39
+ }
40
+ }
68
41
  exports.Parents = Parents;
69
42
  //# sourceMappingURL=parents.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"parents.js","sourceRoot":"","sources":["../../src/parents.ts"],"names":[],"mappings":";;;;;;;;;;;;;;AAKA;;GAEG;AACH;IAII,iBACW,IAAiB;QAAjB,SAAI,GAAJ,IAAI,CAAa;QAHpB,YAAO,GAAqB,IAAI,GAAG,EAAE,CAAC;IAI1C,CAAC;IAEE,wBAAM,GAAb,UAAc,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,wBAAM,GAAb;QACI,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACpC,CAAC;IAEM,qBAAG,GAAV,UAAW,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,qBAAG,GAAV,UAAW,IAAiB;QACxB,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAClC,CAAC;IAED,0BAAQ,GAAR;;QACI,IAAM,GAAG,GAAa,EAAE,CAAC;;YACzB,KAAqB,IAAA,KAAA,SAAA,IAAI,CAAC,OAAO,CAAA,gBAAA,4BAAE;gBAA9B,IAAM,QAAM,WAAA;gBACb,GAAG,CAAC,IAAI,CAAC,QAAM,CAAC,EAAE,CAAC,CAAC;aACvB;;;;;;;;;QACD,OAAO,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;IAED,sBAAI,yBAAI;aAAR;YACI,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;QAC7B,CAAC;;;OAAA;IACL,cAAC;AAAD,CAAC,AA1CD,IA0CC;AA1CY,0BAAO"}
1
+ {"version":3,"file":"parents.js","sourceRoot":"","sources":["../../src/parents.ts"],"names":[],"mappings":";;;AAKA;;GAEG;AACH,MAAa,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;AA1CD,0BA0CC"}