@datagrok-libraries/utils 0.0.7 → 0.0.11

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 (43) hide show
  1. package/README.md +2 -2
  2. package/package.json +29 -29
  3. package/src/bit-array.d.ts +82 -0
  4. package/src/bit-array.d.ts.map +1 -0
  5. package/src/bit-array.js +666 -666
  6. package/src/operations.d.ts +66 -0
  7. package/src/operations.d.ts.map +1 -0
  8. package/src/operations.js +144 -144
  9. package/src/reduce-dimensionality.d.ts +38 -0
  10. package/src/reduce-dimensionality.d.ts.map +1 -0
  11. package/src/reduce-dimensionality.js +233 -233
  12. package/src/sequence-encoder.d.ts +59 -0
  13. package/src/sequence-encoder.d.ts.map +1 -0
  14. package/src/sequence-encoder.js +116 -117
  15. package/src/spe.d.ts +68 -0
  16. package/src/spe.d.ts.map +1 -0
  17. package/src/spe.js +151 -151
  18. package/src/string-measure.d.ts +33 -0
  19. package/src/string-measure.d.ts.map +1 -0
  20. package/src/string-measure.js +46 -46
  21. package/src/string-utils.d.ts +2 -0
  22. package/src/string-utils.d.ts.map +1 -0
  23. package/src/string-utils.js +9 -9
  24. package/src/table-validation.d.ts +2 -0
  25. package/src/table-validation.d.ts.map +1 -0
  26. package/src/table-validation.js +47 -47
  27. package/src/test-utils.d.ts +11 -0
  28. package/src/test-utils.d.ts.map +1 -0
  29. package/src/test-utils.js +81 -81
  30. package/src/{type_declarations.ts → type-declarations.d.ts} +56 -54
  31. package/src/type-declarations.d.ts.map +1 -0
  32. package/src/type-declarations.js +37 -0
  33. package/tsconfig.json +71 -71
  34. package/src/bit-array.ts +0 -767
  35. package/src/operations.ts +0 -160
  36. package/src/reduce-dimensionality.ts +0 -278
  37. package/src/sequence-encoder.ts +0 -132
  38. package/src/spe.ts +0 -172
  39. package/src/string-measure.ts +0 -54
  40. package/src/string-utils.ts +0 -8
  41. package/src/table-validation.ts +0 -67
  42. package/src/test-utils.ts +0 -97
  43. package/src/type_declarations.js +0 -37
@@ -1,233 +1,233 @@
1
- import * as umj from 'umap-js';
2
- import { TSNE } from '@keckelt/tsne';
3
- import { Vector } from './type_declarations';
4
- import { calcDistanceMatrix, transposeMatrix } from './operations';
5
- import { SPEBase, PSPEBase } from './spe';
6
- import { Measurer } from './string-measure';
7
- import { AlignedSequenceEncoder } from './sequence-encoder';
8
- import { assert } from './operations';
9
- /**
10
- * Abstract dimensionality reducer.
11
- *
12
- * @abstract
13
- * @class Reducer
14
- */
15
- class Reducer {
16
- /**
17
- * Creates an instance of Reducer.
18
- * @param {Options} options Options to pass to the constructor.
19
- * @memberof Reducer
20
- */
21
- constructor(options) {
22
- this.data = options.data;
23
- }
24
- }
25
- /**
26
- * Implements t-SNE dimensionality reduction.
27
- *
28
- * @class TSNEReducer
29
- * @extends {Reducer}
30
- */
31
- class TSNEReducer extends Reducer {
32
- /**
33
- * Creates an instance of TSNEReducer.
34
- * @param {Options} options Options to pass to the constructor.
35
- * @memberof TSNEReducer
36
- */
37
- constructor(options) {
38
- var _a;
39
- super(options);
40
- this.reducer = new TSNE(options);
41
- this.iterations = (_a = options === null || options === void 0 ? void 0 : options.iterations) !== null && _a !== void 0 ? _a : 100;
42
- this.distance = options.distance;
43
- }
44
- /**
45
- * Embeds the data given into the two-dimensional space using t-SNE method.
46
- * @return {Coordinates} Cartesian coordinate of this embedding.
47
- */
48
- transform() {
49
- this.reducer.initDataDist(calcDistanceMatrix(this.data, this.distance));
50
- for (let i = 0; i < this.iterations; ++i) {
51
- this.reducer.step(); // every time you call this, solution gets better
52
- }
53
- return this.reducer.getSolution();
54
- }
55
- }
56
- /**
57
- * Implements UMAP dimensionality reduction.
58
- *
59
- * @class UMAPReducer
60
- * @extends {Reducer}
61
- */
62
- class UMAPReducer extends Reducer {
63
- /**
64
- * Creates an instance of UMAPReducer.
65
- * @param {Options} options Options to pass to the constructor.
66
- * @memberof UMAPReducer
67
- */
68
- constructor(options) {
69
- super(options);
70
- assert('distanceFn' in options);
71
- this.encoder = new AlignedSequenceEncoder();
72
- this.distanceFn = options.distanceFn;
73
- this.vectors = [];
74
- options.distanceFn = this._encodedDistance.bind(this);
75
- this.reducer = new umj.UMAP(options);
76
- }
77
- /**
78
- * Custom distance wrapper to have numeric inputs instead of string ones.
79
- *
80
- * @protected
81
- * @param {number[]} a The first item.
82
- * @param {number[]} b The first item.
83
- * @return {number} Distance metric.
84
- * @memberof UMAPReducer
85
- */
86
- _encodedDistance(a, b) {
87
- return this.distanceFn(this.data[a[0]], this.data[b[0]]);
88
- }
89
- /**
90
- * Encodes the input data as a vector of indices.
91
- *
92
- * @protected
93
- * @memberof UMAPReducer
94
- */
95
- _encode() {
96
- for (let i = 0; i < this.data.length; ++i) {
97
- this.vectors.push([i]);
98
- }
99
- }
100
- /**
101
- * Embeds the data given into the two-dimensional space using UMAP method.
102
- * @return {Coordinates} Cartesian coordinate of this embedding.
103
- */
104
- transform() {
105
- this._encode();
106
- const embedding = this.reducer.fit(this.vectors);
107
- function arrayCast2Coordinates(data) {
108
- return new Array(data.length).fill(0).map((_, i) => (Vector.from(data[i])));
109
- }
110
- return arrayCast2Coordinates(embedding);
111
- }
112
- }
113
- /**
114
- * Implements original SPE dimensionality reduction.
115
- *
116
- * @class SPEReducer
117
- * @extends {Reducer}
118
- */
119
- class SPEReducer extends Reducer {
120
- /**
121
- * Creates an instance of SPEReducer.
122
- * @param {Options} options Options to pass to the constructor.
123
- * @memberof SPEReducer
124
- */
125
- constructor(options) {
126
- super(options);
127
- this.reducer = new SPEBase(options);
128
- }
129
- /**
130
- * Embeds the data given into the two-dimensional space using the original SPE method.
131
- * @return {Coordinates} Cartesian coordinate of this embedding.
132
- */
133
- transform() {
134
- return this.reducer.embed(this.data);
135
- }
136
- }
137
- /**
138
- * Implements modified SPE dimensionality reduction.
139
- *
140
- * @class PSPEReducer
141
- * @extends {Reducer}
142
- */
143
- class PSPEReducer extends Reducer {
144
- /**
145
- * Creates an instance of PSPEReducer.
146
- * @param {Options} options Options to pass to the constructor.
147
- * @memberof PSPEReducer
148
- */
149
- constructor(options) {
150
- super(options);
151
- this.reducer = new PSPEBase(options);
152
- }
153
- /**
154
- * Embeds the data given into the two-dimensional space using the modified SPE method.
155
- * @return {Coordinates} Cartesian coordinate of this embedding.
156
- */
157
- transform() {
158
- return this.reducer.embed(this.data);
159
- }
160
- }
161
- /**
162
- * Unified class implementing different dimensionality reduction methods.
163
- *
164
- * @export
165
- * @class DimensionalityReducer
166
- */
167
- export class DimensionalityReducer {
168
- /**
169
- * Creates an instance of DimensionalityReducer.
170
- * @param {any[]} data Vectors to embed.
171
- * @param {string} method Embedding method to be applied
172
- * @param {string} metric Distance metric to be computed between each of the vectors.
173
- * @param {Options} [options] Options to pass to the implementing embedders.
174
- * @memberof DimensionalityReducer
175
- */
176
- constructor(data, method, metric, options) {
177
- var _a;
178
- assert(DimensionalityReducer.availableMethods.includes(method), `The method '${method}' is not supported`);
179
- this.measurer = new Measurer(metric);
180
- const measure = this.measurer.getMeasure();
181
- if (method == 'UMAP') {
182
- this.reducer = new UMAPReducer({
183
- ...{ data: data },
184
- ...{ distanceFn: measure },
185
- ...{ nEpochs: options === null || options === void 0 ? void 0 : options.cycles },
186
- ...options
187
- });
188
- }
189
- else if (method == 't-SNE') {
190
- this.reducer = new TSNEReducer({
191
- ...{ data: data },
192
- ...{ distance: measure },
193
- ...{ iterations: (_a = options === null || options === void 0 ? void 0 : options.cycles) !== null && _a !== void 0 ? _a : undefined },
194
- ...options,
195
- });
196
- }
197
- else if (method == 'SPE') {
198
- this.reducer = new SPEReducer({ ...{ data: data }, ...{ distance: measure }, ...options });
199
- }
200
- else {
201
- this.reducer = new PSPEReducer({ ...{ data: data }, ...{ distance: measure }, ...options });
202
- }
203
- }
204
- /**
205
- * Embeds the data given into the two-dimensional space using the chosen method.
206
- *
207
- * @param {boolean} transpose Whether to transform coordinates to have columns-first orientation.
208
- * @throws {Error} If the embedding method was not found.
209
- * @return {Coordinates} Cartesian coordinate of this embedding.
210
- * @memberof DimensionalityReducer
211
- */
212
- transform(transpose = false) {
213
- if (this.reducer == undefined) {
214
- throw new Error('Reducer was not defined.');
215
- }
216
- let embedding = this.reducer.transform();
217
- if (transpose) {
218
- embedding = transposeMatrix(embedding);
219
- }
220
- return embedding;
221
- }
222
- /**
223
- * Returns dimensionality reduction methods available.
224
- *
225
- * @readonly
226
- * @memberof DimensionalityReducer
227
- */
228
- static get availableMethods() {
229
- return DimensionalityReducer.methods;
230
- }
231
- }
232
- DimensionalityReducer.methods = ['UMAP', 't-SNE', 'SPE', 'pSPE'];
233
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVkdWNlLWRpbWVuc2lvbmFsaXR5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsicmVkdWNlLWRpbWVuc2lvbmFsaXR5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxHQUFHLE1BQU0sU0FBUyxDQUFDO0FBQy9CLE9BQU8sRUFBQyxJQUFJLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFFbkMsT0FBTyxFQUF1QyxNQUFNLEVBQWtCLE1BQU0scUJBQXFCLENBQUM7QUFDbEcsT0FBTyxFQUFDLGtCQUFrQixFQUFFLGVBQWUsRUFBQyxNQUFNLGNBQWMsQ0FBQztBQUNqRSxPQUFPLEVBQUMsT0FBTyxFQUFFLFFBQVEsRUFBQyxNQUFNLE9BQU8sQ0FBQztBQUN4QyxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0sa0JBQWtCLENBQUM7QUFDMUMsT0FBTyxFQUFDLHNCQUFzQixFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFDMUQsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLGNBQWMsQ0FBQztBQUVwQzs7Ozs7R0FLRztBQUNILE1BQWUsT0FBTztJQUdwQjs7OztPQUlHO0lBQ0gsWUFBWSxPQUFnQjtRQUMxQixJQUFJLENBQUMsSUFBSSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUM7SUFDM0IsQ0FBQztDQVVGO0FBRUQ7Ozs7O0dBS0c7QUFDSCxNQUFNLFdBQVksU0FBUSxPQUFPO0lBSy9COzs7O09BSUc7SUFDSCxZQUFZLE9BQWdCOztRQUMxQixLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDZixJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ2pDLElBQUksQ0FBQyxVQUFVLEdBQUcsTUFBQSxPQUFPLGFBQVAsT0FBTyx1QkFBUCxPQUFPLENBQUUsVUFBVSxtQ0FBSSxHQUFHLENBQUM7UUFDN0MsSUFBSSxDQUFDLFFBQVEsR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDO0lBQ25DLENBQUM7SUFF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QU8sR0FBYSxDQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgdW1qIGZyb20gJ3VtYXAtanMnO1xyXG5pbXBvcnQge1RTTkV9IGZyb20gJ0BrZWNrZWx0L3RzbmUnO1xyXG5cclxuaW1wb3J0IHtPcHRpb25zLCBEaXN0YW5jZU1ldHJpYywgQ29vcmRpbmF0ZXMsIFZlY3RvciwgVmVjdG9ycywgTWF0cml4fSBmcm9tICcuL3R5cGVfZGVjbGFyYXRpb25zJztcclxuaW1wb3J0IHtjYWxjRGlzdGFuY2VNYXRyaXgsIHRyYW5zcG9zZU1hdHJpeH0gZnJvbSAnLi9vcGVyYXRpb25zJztcclxuaW1wb3J0IHtTUEVCYXNlLCBQU1BFQmFzZX0gZnJvbSAnLi9zcGUnO1xyXG5pbXBvcnQge01lYXN1cmVyfSBmcm9tICcuL3N0cmluZy1tZWFzdXJlJztcclxuaW1wb3J0IHtBbGlnbmVkU2VxdWVuY2VFbmNvZGVyfSBmcm9tICcuL3NlcXVlbmNlLWVuY29kZXInO1xyXG5pbXBvcnQge2Fzc2VydH0gZnJvbSAnLi9vcGVyYXRpb25zJztcclxuXHJcbi8qKlxyXG4gKiBBYnN0cmFjdCBkaW1lbnNpb25hbGl0eSByZWR1Y2VyLlxyXG4gKlxyXG4gKiBAYWJzdHJhY3RcclxuICogQGNsYXNzIFJlZHVjZXJcclxuICovXHJcbmFic3RyYWN0IGNsYXNzIFJlZHVjZXIge1xyXG4gIHByb3RlY3RlZCBkYXRhOiBWZWN0b3JzO1xyXG5cclxuICAvKipcclxuICAgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIFJlZHVjZXIuXHJcbiAgICogQHBhcmFtIHtPcHRpb25zfSBvcHRpb25zIE9wdGlvbnMgdG8gcGFzcyB0byB0aGUgY29uc3RydWN0b3IuXHJcbiAgICogQG1lbWJlcm9mIFJlZHVjZXJcclxuICAgKi9cclxuICBjb25zdHJ1Y3RvcihvcHRpb25zOiBPcHRpb25zKSB7XHJcbiAgICB0aGlzLmRhdGEgPSBvcHRpb25zLmRhdGE7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBJcyB0byBlbWJlZCB0aGUgZGF0YSBnaXZlbiBpbnRvIHRoZSB0d28tZGltZW5zaW9uYWwgc3BhY2UuXHJcbiAgICpcclxuICAgKiBAYWJzdHJhY3RcclxuICAgKiBAcmV0dXJuIHtDb29yZGluYXRlc30gQ2FydGVzaWFuIGNvb3JkaW5hdGUgb2YgdGhpcyBlbWJlZGRpbmcuXHJcbiAgICogQG1lbWJlcm9mIFJlZHVjZXJcclxuICAgKi9cclxuICBhYnN0cmFjdCB0cmFuc2Zvcm0oKTogQ29vcmRpbmF0ZXM7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBJbXBsZW1lbnRzIHQtU05FIGRpbWVuc2lvbmFsaXR5IHJlZHVjdGlvbi5cclxuICpcclxuICogQGNsYXNzIFRTTkVSZWR1Y2VyXHJcbiAqIEBleHRlbmRzIHtSZWR1Y2VyfVxyXG4gKi9cclxuY2xhc3MgVFNORVJlZHVjZXIgZXh0ZW5kcyBSZWR1Y2VyIHtcclxuICBwcm90ZWN0ZWQgcmVkdWNlcjogVFNORTtcclxuICBwcm90ZWN0ZWQgaXRlcmF0aW9uczogbnVtYmVyO1xyXG4gIHByb3RlY3RlZCBkaXN0YW5jZTogRGlzdGFuY2VNZXRyaWM7XHJcblxyXG4gIC8qKlxyXG4gICAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgVFNORVJlZHVjZXIuXHJcbiAgICogQHBhcmFtIHtPcHRpb25zfSBvcHRpb25zIE9wdGlvbnMgdG8gcGFzcyB0byB0aGUgY29uc3RydWN0b3IuXHJcbiAgICogQG1lbWJlcm9mIFRTTkVSZWR1Y2VyXHJcbiAgICovXHJcbiAgY29uc3RydWN0b3Iob3B0aW9uczogT3B0aW9ucykge1xyXG4gICAgc3VwZXIob3B0aW9ucyk7XHJcbiAgICB0aGlzLnJlZHVjZXIgPSBuZXcgVFNORShvcHRpb25zKTtcclxuICAgIHRoaXMuaXRlcmF0aW9ucyA9IG9wdGlvbnM/Lml0ZXJhdGlvbnMgPz8gMTAwO1xyXG4gICAgdGhpcy5kaXN0YW5jZSA9IG9wdGlvbnMuZGlzdGFuY2U7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBFbWJlZHMgdGhlIGRhdGEgZ2l2ZW4gaW50byB0aGUgdHdvLWRpbWVuc2lvbmFsIHNwYWNlIHVzaW5nIHQtU05FIG1ldGhvZC5cclxuICAgKiBAcmV0dXJuIHtDb29yZGluYXRlc30gQ2FydGVzaWFuIGNvb3JkaW5hdGUgb2YgdGhpcyBlbWJlZGRpbmcuXHJcbiAgICovXHJcbiAgcHVibGljIHRyYW5zZm9ybSgpOiBDb29yZGluYXRlcyB7XHJcbiAgICB0aGlzLnJlZHVjZXIuaW5pdERhdGFEaXN0KGNhbGNEaXN0YW5jZU1hdHJpeCh0aGlzLmRhdGEsIHRoaXMuZGlzdGFuY2UpKTtcclxuXHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuaXRlcmF0aW9uczsgKytpKSB7XHJcbiAgICAgIHRoaXMucmVkdWNlci5zdGVwKCk7IC8vIGV2ZXJ5IHRpbWUgeW91IGNhbGwgdGhpcywgc29sdXRpb24gZ2V0cyBiZXR0ZXJcclxuICAgIH1cclxuICAgIHJldHVybiB0aGlzLnJlZHVjZXIuZ2V0U29sdXRpb24oKTtcclxuICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBJbXBsZW1lbnRzIFVNQVAgZGltZW5zaW9uYWxpdHkgcmVkdWN0aW9uLlxyXG4gKlxyXG4gKiBAY2xhc3MgVU1BUFJlZHVjZXJcclxuICogQGV4dGVuZHMge1JlZHVjZXJ9XHJcbiAqL1xyXG5jbGFzcyBVTUFQUmVkdWNlciBleHRlbmRzIFJlZHVjZXIge1xyXG4gIHByb3RlY3RlZCByZWR1Y2VyOiB1bWouVU1BUDtcclxuICBwcm90ZWN0ZWQgZW5jb2RlcjogQWxpZ25lZFNlcXVlbmNlRW5jb2RlcjtcclxuICBwcm90ZWN0ZWQgZGlzdGFuY2VGbjogRnVuY3Rpb247XHJcbiAgcHJvdGVjdGVkIHZlY3RvcnM6IG51bWJlcltdW107XHJcblxyXG4gIC8qKlxyXG4gICAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgVU1BUFJlZHVjZXIuXHJcbiAgICogQHBhcmFtIHtPcHRpb25zfSBvcHRpb25zIE9wdGlvbnMgdG8gcGFzcyB0byB0aGUgY29uc3RydWN0b3IuXHJcbiAgICogQG1lbWJlcm9mIFVNQVBSZWR1Y2VyXHJcbiAgICovXHJcbiAgY29uc3RydWN0b3Iob3B0aW9uczogT3B0aW9ucykge1xyXG4gICAgc3VwZXIob3B0aW9ucyk7XHJcblxyXG4gICAgYXNzZXJ0KCdkaXN0YW5jZUZuJyBpbiBvcHRpb25zKTtcclxuXHJcbiAgICB0aGlzLmVuY29kZXIgPSBuZXcgQWxpZ25lZFNlcXVlbmNlRW5jb2RlcigpO1xyXG4gICAgdGhpcy5kaXN0YW5jZUZuID0gb3B0aW9ucy5kaXN0YW5jZUZuO1xyXG4gICAgdGhpcy52ZWN0b3JzID0gW107XHJcbiAgICBvcHRpb25zLmRpc3RhbmNlRm4gPSB0aGlzLl9lbmNvZGVkRGlzdGFuY2UuYmluZCh0aGlzKTtcclxuICAgIHRoaXMucmVkdWNlciA9IG5ldyB1bWouVU1BUChvcHRpb25zKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEN1c3RvbSBkaXN0YW5jZSB3cmFwcGVyIHRvIGhhdmUgbnVtZXJpYyBpbnB1dHMgaW5zdGVhZCBvZiBzdHJpbmcgb25lcy5cclxuICAgKlxyXG4gICAqIEBwcm90ZWN0ZWRcclxuICAgKiBAcGFyYW0ge251bWJlcltdfSBhIFRoZSBmaXJzdCBpdGVtLlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyW119IGIgVGhlIGZpcnN0IGl0ZW0uXHJcbiAgICogQHJldHVybiB7bnVtYmVyfSBEaXN0YW5jZSBtZXRyaWMuXHJcbiAgICogQG1lbWJlcm9mIFVNQVBSZWR1Y2VyXHJcbiAgICovXHJcbiAgcHJvdGVjdGVkIF9lbmNvZGVkRGlzdGFuY2UoYTogbnVtYmVyW10sIGI6IG51bWJlcltdKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLmRpc3RhbmNlRm4odGhpcy5kYXRhW2FbMF1dLCB0aGlzLmRhdGFbYlswXV0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRW5jb2RlcyB0aGUgaW5wdXQgZGF0YSBhcyBhIHZlY3RvciBvZiBpbmRpY2VzLlxyXG4gICAqXHJcbiAgICogQHByb3RlY3RlZFxyXG4gICAqIEBtZW1iZXJvZiBVTUFQUmVkdWNlclxyXG4gICAqL1xyXG4gIHByb3RlY3RlZCBfZW5jb2RlKCkge1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmRhdGEubGVuZ3RoOyArK2kpIHtcclxuICAgICAgdGhpcy52ZWN0b3JzLnB1c2goW2ldKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEVtYmVkcyB0aGUgZGF0YSBnaXZlbiBpbnRvIHRoZSB0d28tZGltZW5zaW9uYWwgc3BhY2UgdXNpbmcgVU1BUCBtZXRob2QuXHJcbiAgICogQHJldHVybiB7Q29vcmRpbmF0ZXN9IENhcnRlc2lhbiBjb29yZGluYXRlIG9mIHRoaXMgZW1iZWRkaW5nLlxyXG4gICAqL1xyXG4gIHB1YmxpYyB0cmFuc2Zvcm0oKTogQ29vcmRpbmF0ZXMge1xyXG4gICAgdGhpcy5fZW5jb2RlKCk7XHJcblxyXG4gICAgY29uc3QgZW1iZWRkaW5nID0gdGhpcy5yZWR1Y2VyLmZpdCh0aGlzLnZlY3RvcnMpO1xyXG5cclxuICAgIGZ1bmN0aW9uIGFycmF5Q2FzdDJDb29yZGluYXRlcyhkYXRhOiBudW1iZXJbXVtdKTogQ29vcmRpbmF0ZXMge1xyXG4gICAgICByZXR1cm4gbmV3IEFycmF5KGRhdGEubGVuZ3RoKS5maWxsKDApLm1hcCgoXywgaSkgPT4gKFZlY3Rvci5mcm9tKGRhdGFbaV0pKSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGFycmF5Q2FzdDJDb29yZGluYXRlcyhlbWJlZGRpbmcpO1xyXG4gIH1cclxufVxyXG5cclxuLyoqXHJcbiAqIEltcGxlbWVudHMgb3JpZ2luYWwgU1BFIGRpbWVuc2lvbmFsaXR5IHJlZHVjdGlvbi5cclxuICpcclxuICogQGNsYXNzIFNQRVJlZHVjZXJcclxuICogQGV4dGVuZHMge1JlZHVjZXJ9XHJcbiAqL1xyXG5jbGFzcyBTUEVSZWR1Y2VyIGV4dGVuZHMgUmVkdWNlciB7XHJcbiAgcHJvdGVjdGVkIHJlZHVjZXI6IFNQRUJhc2U7XHJcblxyXG4gIC8qKlxyXG4gICAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgU1BFUmVkdWNlci5cclxuICAgKiBAcGFyYW0ge09wdGlvbnN9IG9wdGlvbnMgT3B0aW9ucyB0byBwYXNzIHRvIHRoZSBjb25zdHJ1Y3Rvci5cclxuICAgKiBAbWVtYmVyb2YgU1BFUmVkdWNlclxyXG4gICAqL1xyXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnM6IE9wdGlvbnMpIHtcclxuICAgIHN1cGVyKG9wdGlvbnMpO1xyXG4gICAgdGhpcy5yZWR1Y2VyID0gbmV3IFNQRUJhc2Uob3B0aW9ucyk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBFbWJlZHMgdGhlIGRhdGEgZ2l2ZW4gaW50byB0aGUgdHdvLWRpbWVuc2lvbmFsIHNwYWNlIHVzaW5nIHRoZSBvcmlnaW5hbCBTUEUgbWV0aG9kLlxyXG4gICAqIEByZXR1cm4ge0Nvb3JkaW5hdGVzfSBDYXJ0ZXNpYW4gY29vcmRpbmF0ZSBvZiB0aGlzIGVtYmVkZGluZy5cclxuICAgKi9cclxuICBwdWJsaWMgdHJhbnNmb3JtKCk6IENvb3JkaW5hdGVzIHtcclxuICAgIHJldHVybiB0aGlzLnJlZHVjZXIuZW1iZWQodGhpcy5kYXRhKTtcclxuICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBJbXBsZW1lbnRzIG1vZGlmaWVkIFNQRSBkaW1lbnNpb25hbGl0eSByZWR1Y3Rpb24uXHJcbiAqXHJcbiAqIEBjbGFzcyBQU1BFUmVkdWNlclxyXG4gKiBAZXh0ZW5kcyB7UmVkdWNlcn1cclxuICovXHJcbmNsYXNzIFBTUEVSZWR1Y2VyIGV4dGVuZHMgUmVkdWNlciB7XHJcbiAgcHJvdGVjdGVkIHJlZHVjZXI6IFBTUEVCYXNlO1xyXG5cclxuICAvKipcclxuICAgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIFBTUEVSZWR1Y2VyLlxyXG4gICAqIEBwYXJhbSB7T3B0aW9uc30gb3B0aW9ucyBPcHRpb25zIHRvIHBhc3MgdG8gdGhlIGNvbnN0cnVjdG9yLlxyXG4gICAqIEBtZW1iZXJvZiBQU1BFUmVkdWNlclxyXG4gICAqL1xyXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnM6IE9wdGlvbnMpIHtcclxuICAgIHN1cGVyKG9wdGlvbnMpO1xyXG4gICAgdGhpcy5yZWR1Y2VyID0gbmV3IFBTUEVCYXNlKG9wdGlvbnMpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRW1iZWRzIHRoZSBkYXRhIGdpdmVuIGludG8gdGhlIHR3by1kaW1lbnNpb25hbCBzcGFjZSB1c2luZyB0aGUgbW9kaWZpZWQgU1BFIG1ldGhvZC5cclxuICAgKiBAcmV0dXJuIHtDb29yZGluYXRlc30gQ2FydGVzaWFuIGNvb3JkaW5hdGUgb2YgdGhpcyBlbWJlZGRpbmcuXHJcbiAgICovXHJcbiAgcHVibGljIHRyYW5zZm9ybSgpOiBDb29yZGluYXRlcyB7XHJcbiAgICByZXR1cm4gdGhpcy5yZWR1Y2VyLmVtYmVkKHRoaXMuZGF0YSk7XHJcbiAgfVxyXG59XHJcblxyXG4vKipcclxuICogVW5pZmllZCBjbGFzcyBpbXBsZW1lbnRpbmcgZGlmZmVyZW50IGRpbWVuc2lvbmFsaXR5IHJlZHVjdGlvbiBtZXRob2RzLlxyXG4gKlxyXG4gKiBAZXhwb3J0XHJcbiAqIEBjbGFzcyBEaW1lbnNpb25hbGl0eVJlZHVjZXJcclxuICovXHJcbmV4cG9ydCBjbGFzcyBEaW1lbnNpb25hbGl0eVJlZHVjZXIge1xyXG4gIHByaXZhdGUgcmVkdWNlcjogUmVkdWNlciB8IHVuZGVmaW5lZDtcclxuICBwdWJsaWMgc3RhdGljIG1ldGhvZHM6IHN0cmluZ1tdID0gWydVTUFQJywgJ3QtU05FJywgJ1NQRScsICdwU1BFJ107XHJcbiAgcHJpdmF0ZSBtZWFzdXJlcjogTWVhc3VyZXI7XHJcblxyXG4gIC8qKlxyXG4gICAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgRGltZW5zaW9uYWxpdHlSZWR1Y2VyLlxyXG4gICAqIEBwYXJhbSB7YW55W119IGRhdGEgVmVjdG9ycyB0byBlbWJlZC5cclxuICAgKiBAcGFyYW0ge3N0cmluZ30gbWV0aG9kIEVtYmVkZGluZyBtZXRob2QgdG8gYmUgYXBwbGllZFxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBtZXRyaWMgRGlzdGFuY2UgbWV0cmljIHRvIGJlIGNvbXB1dGVkIGJldHdlZW4gZWFjaCBvZiB0aGUgdmVjdG9ycy5cclxuICAgKiBAcGFyYW0ge09wdGlvbnN9IFtvcHRpb25zXSBPcHRpb25zIHRvIHBhc3MgdG8gdGhlIGltcGxlbWVudGluZyBlbWJlZGRlcnMuXHJcbiAgICogQG1lbWJlcm9mIERpbWVuc2lvbmFsaXR5UmVkdWNlclxyXG4gICAqL1xyXG4gIGNvbnN0cnVjdG9yKGRhdGE6IGFueVtdLCBtZXRob2Q6IHN0cmluZywgbWV0cmljOiBzdHJpbmcsIG9wdGlvbnM/OiBPcHRpb25zKSB7XHJcbiAgICBhc3NlcnQoRGltZW5zaW9uYWxpdHlSZWR1Y2VyLmF2YWlsYWJsZU1ldGhvZHMuaW5jbHVkZXMobWV0aG9kKSwgYFRoZSBtZXRob2QgJyR7bWV0aG9kfScgaXMgbm90IHN1cHBvcnRlZGApO1xyXG5cclxuICAgIHRoaXMubWVhc3VyZXIgPSBuZXcgTWVhc3VyZXIobWV0cmljKTtcclxuICAgIGNvbnN0IG1lYXN1cmUgPSB0aGlzLm1lYXN1cmVyLmdldE1lYXN1cmUoKVxyXG5cclxuICAgIGlmIChtZXRob2QgPT0gJ1VNQVAnKSB7XHJcbiAgICAgIHRoaXMucmVkdWNlciA9IG5ldyBVTUFQUmVkdWNlcih7XHJcbiAgICAgICAgLi4ue2RhdGE6IGRhdGF9LCBcclxuICAgICAgICAuLi57ZGlzdGFuY2VGbjogbWVhc3VyZX0sIFxyXG4gICAgICAgIC4uLntuRXBvY2hzOiBvcHRpb25zPy5jeWNsZXN9LFxyXG4gICAgICAgIC4uLm9wdGlvbnNcclxuICAgICAgfSk7XHJcbiAgICB9IGVsc2UgaWYgKG1ldGhvZCA9PSAndC1TTkUnKSB7XHJcbiAgICAgIHRoaXMucmVkdWNlciA9IG5ldyBUU05FUmVkdWNlcih7XHJcbiAgICAgICAgLi4ue2RhdGE6IGRhdGF9LFxyXG4gICAgICAgIC4uLntkaXN0YW5jZTogbWVhc3VyZX0sXHJcbiAgICAgICAgLi4ue2l0ZXJhdGlvbnM6IG9wdGlvbnM/LmN5Y2xlcyA/PyB1bmRlZmluZWR9LFxyXG4gICAgICAgIC4uLm9wdGlvbnMsXHJcbiAgICAgIH0pO1xyXG4gICAgfSBlbHNlIGlmIChtZXRob2QgPT0gJ1NQRScpIHtcclxuICAgICAgdGhpcy5yZWR1Y2VyID0gbmV3IFNQRVJlZHVjZXIoey4uLntkYXRhOiBkYXRhfSwgLi4ue2Rpc3RhbmNlOiBtZWFzdXJlfSwgLi4ub3B0aW9uc30pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5yZWR1Y2VyID0gbmV3IFBTUEVSZWR1Y2VyKHsuLi57ZGF0YTogZGF0YX0sIC4uLntkaXN0YW5jZTogbWVhc3VyZX0sIC4uLm9wdGlvbnN9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEVtYmVkcyB0aGUgZGF0YSBnaXZlbiBpbnRvIHRoZSB0d28tZGltZW5zaW9uYWwgc3BhY2UgdXNpbmcgdGhlIGNob3NlbiBtZXRob2QuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IHRyYW5zcG9zZSBXaGV0aGVyIHRvIHRyYW5zZm9ybSBjb29yZGluYXRlcyB0byBoYXZlIGNvbHVtbnMtZmlyc3Qgb3JpZW50YXRpb24uXHJcbiAgICogQHRocm93cyB7RXJyb3J9IElmIHRoZSBlbWJlZGRpbmcgbWV0aG9kIHdhcyBub3QgZm91bmQuXHJcbiAgICogQHJldHVybiB7Q29vcmRpbmF0ZXN9IENhcnRlc2lhbiBjb29yZGluYXRlIG9mIHRoaXMgZW1iZWRkaW5nLlxyXG4gICAqIEBtZW1iZXJvZiBEaW1lbnNpb25hbGl0eVJlZHVjZXJcclxuICAgKi9cclxuICBwdWJsaWMgdHJhbnNmb3JtKHRyYW5zcG9zZTogYm9vbGVhbiA9IGZhbHNlKTogQ29vcmRpbmF0ZXMge1xyXG4gICAgaWYgKHRoaXMucmVkdWNlciA9PSB1bmRlZmluZWQpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdSZWR1Y2VyIHdhcyBub3QgZGVmaW5lZC4nKTtcclxuICAgIH1cclxuICAgIGxldCBlbWJlZGRpbmcgPSB0aGlzLnJlZHVjZXIudHJhbnNmb3JtKCk7XHJcblxyXG4gICAgaWYgKHRyYW5zcG9zZSkge1xyXG4gICAgICBlbWJlZGRpbmcgPSB0cmFuc3Bvc2VNYXRyaXgoZW1iZWRkaW5nKTtcclxuICAgIH1cclxuICAgIHJldHVybiBlbWJlZGRpbmc7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm5zIGRpbWVuc2lvbmFsaXR5IHJlZHVjdGlvbiBtZXRob2RzIGF2YWlsYWJsZS5cclxuICAgKlxyXG4gICAqIEByZWFkb25seVxyXG4gICAqIEBtZW1iZXJvZiBEaW1lbnNpb25hbGl0eVJlZHVjZXJcclxuICAgKi9cclxuICBzdGF0aWMgZ2V0IGF2YWlsYWJsZU1ldGhvZHMoKSB7XHJcbiAgICByZXR1cm4gRGltZW5zaW9uYWxpdHlSZWR1Y2VyLm1ldGhvZHM7XHJcbiAgfVxyXG59XHJcbiJdfQ==
1
+ import * as umj from 'umap-js';
2
+ import { TSNE } from '@keckelt/tsne';
3
+ import { Vector } from './type-declarations';
4
+ import { calcDistanceMatrix, transposeMatrix } from './operations';
5
+ import { SPEBase, PSPEBase } from './spe';
6
+ import { Measurer } from './string-measure';
7
+ import { AlignedSequenceEncoder } from './sequence-encoder';
8
+ import { assert } from './operations';
9
+ /**
10
+ * Abstract dimensionality reducer.
11
+ *
12
+ * @abstract
13
+ * @class Reducer
14
+ */
15
+ class Reducer {
16
+ /**
17
+ * Creates an instance of Reducer.
18
+ * @param {Options} options Options to pass to the constructor.
19
+ * @memberof Reducer
20
+ */
21
+ constructor(options) {
22
+ this.data = options.data;
23
+ }
24
+ }
25
+ /**
26
+ * Implements t-SNE dimensionality reduction.
27
+ *
28
+ * @class TSNEReducer
29
+ * @extends {Reducer}
30
+ */
31
+ class TSNEReducer extends Reducer {
32
+ /**
33
+ * Creates an instance of TSNEReducer.
34
+ * @param {Options} options Options to pass to the constructor.
35
+ * @memberof TSNEReducer
36
+ */
37
+ constructor(options) {
38
+ var _a;
39
+ super(options);
40
+ this.reducer = new TSNE(options);
41
+ this.iterations = (_a = options === null || options === void 0 ? void 0 : options.iterations) !== null && _a !== void 0 ? _a : 100;
42
+ this.distance = options.distance;
43
+ }
44
+ /**
45
+ * Embeds the data given into the two-dimensional space using t-SNE method.
46
+ * @return {Coordinates} Cartesian coordinate of this embedding.
47
+ */
48
+ transform() {
49
+ this.reducer.initDataDist(calcDistanceMatrix(this.data, this.distance));
50
+ for (let i = 0; i < this.iterations; ++i) {
51
+ this.reducer.step(); // every time you call this, solution gets better
52
+ }
53
+ return this.reducer.getSolution();
54
+ }
55
+ }
56
+ /**
57
+ * Implements UMAP dimensionality reduction.
58
+ *
59
+ * @class UMAPReducer
60
+ * @extends {Reducer}
61
+ */
62
+ class UMAPReducer extends Reducer {
63
+ /**
64
+ * Creates an instance of UMAPReducer.
65
+ * @param {Options} options Options to pass to the constructor.
66
+ * @memberof UMAPReducer
67
+ */
68
+ constructor(options) {
69
+ super(options);
70
+ assert('distanceFn' in options);
71
+ this.encoder = new AlignedSequenceEncoder();
72
+ this.distanceFn = options.distanceFn;
73
+ this.vectors = [];
74
+ options.distanceFn = this._encodedDistance.bind(this);
75
+ this.reducer = new umj.UMAP(options);
76
+ }
77
+ /**
78
+ * Custom distance wrapper to have numeric inputs instead of string ones.
79
+ *
80
+ * @protected
81
+ * @param {number[]} a The first item.
82
+ * @param {number[]} b The first item.
83
+ * @return {number} Distance metric.
84
+ * @memberof UMAPReducer
85
+ */
86
+ _encodedDistance(a, b) {
87
+ return this.distanceFn(this.data[a[0]], this.data[b[0]]);
88
+ }
89
+ /**
90
+ * Encodes the input data as a vector of indices.
91
+ *
92
+ * @protected
93
+ * @memberof UMAPReducer
94
+ */
95
+ _encode() {
96
+ for (let i = 0; i < this.data.length; ++i) {
97
+ this.vectors.push([i]);
98
+ }
99
+ }
100
+ /**
101
+ * Embeds the data given into the two-dimensional space using UMAP method.
102
+ * @return {Coordinates} Cartesian coordinate of this embedding.
103
+ */
104
+ transform() {
105
+ this._encode();
106
+ const embedding = this.reducer.fit(this.vectors);
107
+ function arrayCast2Coordinates(data) {
108
+ return new Array(data.length).fill(0).map((_, i) => (Vector.from(data[i])));
109
+ }
110
+ return arrayCast2Coordinates(embedding);
111
+ }
112
+ }
113
+ /**
114
+ * Implements original SPE dimensionality reduction.
115
+ *
116
+ * @class SPEReducer
117
+ * @extends {Reducer}
118
+ */
119
+ class SPEReducer extends Reducer {
120
+ /**
121
+ * Creates an instance of SPEReducer.
122
+ * @param {Options} options Options to pass to the constructor.
123
+ * @memberof SPEReducer
124
+ */
125
+ constructor(options) {
126
+ super(options);
127
+ this.reducer = new SPEBase(options);
128
+ }
129
+ /**
130
+ * Embeds the data given into the two-dimensional space using the original SPE method.
131
+ * @return {Coordinates} Cartesian coordinate of this embedding.
132
+ */
133
+ transform() {
134
+ return this.reducer.embed(this.data);
135
+ }
136
+ }
137
+ /**
138
+ * Implements modified SPE dimensionality reduction.
139
+ *
140
+ * @class PSPEReducer
141
+ * @extends {Reducer}
142
+ */
143
+ class PSPEReducer extends Reducer {
144
+ /**
145
+ * Creates an instance of PSPEReducer.
146
+ * @param {Options} options Options to pass to the constructor.
147
+ * @memberof PSPEReducer
148
+ */
149
+ constructor(options) {
150
+ super(options);
151
+ this.reducer = new PSPEBase(options);
152
+ }
153
+ /**
154
+ * Embeds the data given into the two-dimensional space using the modified SPE method.
155
+ * @return {Coordinates} Cartesian coordinate of this embedding.
156
+ */
157
+ transform() {
158
+ return this.reducer.embed(this.data);
159
+ }
160
+ }
161
+ /**
162
+ * Unified class implementing different dimensionality reduction methods.
163
+ *
164
+ * @export
165
+ * @class DimensionalityReducer
166
+ */
167
+ export class DimensionalityReducer {
168
+ /**
169
+ * Creates an instance of DimensionalityReducer.
170
+ * @param {any[]} data Vectors to embed.
171
+ * @param {string} method Embedding method to be applied
172
+ * @param {string} metric Distance metric to be computed between each of the vectors.
173
+ * @param {Options} [options] Options to pass to the implementing embedders.
174
+ * @memberof DimensionalityReducer
175
+ */
176
+ constructor(data, method, metric, options) {
177
+ var _a;
178
+ assert(DimensionalityReducer.availableMethods.includes(method), `The method '${method}' is not supported`);
179
+ this.measurer = new Measurer(metric);
180
+ const measure = this.measurer.getMeasure();
181
+ if (method == 'UMAP') {
182
+ this.reducer = new UMAPReducer({
183
+ ...{ data: data },
184
+ ...{ distanceFn: measure },
185
+ ...{ nEpochs: options === null || options === void 0 ? void 0 : options.cycles },
186
+ ...options
187
+ });
188
+ }
189
+ else if (method == 't-SNE') {
190
+ this.reducer = new TSNEReducer({
191
+ ...{ data: data },
192
+ ...{ distance: measure },
193
+ ...{ iterations: (_a = options === null || options === void 0 ? void 0 : options.cycles) !== null && _a !== void 0 ? _a : undefined },
194
+ ...options,
195
+ });
196
+ }
197
+ else if (method == 'SPE') {
198
+ this.reducer = new SPEReducer({ ...{ data: data }, ...{ distance: measure }, ...options });
199
+ }
200
+ else {
201
+ this.reducer = new PSPEReducer({ ...{ data: data }, ...{ distance: measure }, ...options });
202
+ }
203
+ }
204
+ /**
205
+ * Embeds the data given into the two-dimensional space using the chosen method.
206
+ *
207
+ * @param {boolean} transpose Whether to transform coordinates to have columns-first orientation.
208
+ * @throws {Error} If the embedding method was not found.
209
+ * @return {Coordinates} Cartesian coordinate of this embedding.
210
+ * @memberof DimensionalityReducer
211
+ */
212
+ transform(transpose = false) {
213
+ if (this.reducer == undefined) {
214
+ throw new Error('Reducer was not defined.');
215
+ }
216
+ let embedding = this.reducer.transform();
217
+ if (transpose) {
218
+ embedding = transposeMatrix(embedding);
219
+ }
220
+ return embedding;
221
+ }
222
+ /**
223
+ * Returns dimensionality reduction methods available.
224
+ *
225
+ * @readonly
226
+ * @memberof DimensionalityReducer
227
+ */
228
+ static get availableMethods() {
229
+ return DimensionalityReducer.methods;
230
+ }
231
+ }
232
+ DimensionalityReducer.methods = ['UMAP', 't-SNE', 'SPE', 'pSPE'];
233
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVkdWNlLWRpbWVuc2lvbmFsaXR5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsicmVkdWNlLWRpbWVuc2lvbmFsaXR5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxHQUFHLE1BQU0sU0FBUyxDQUFDO0FBQy9CLE9BQU8sRUFBQyxJQUFJLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFFbkMsT0FBTyxFQUF1QyxNQUFNLEVBQWtCLE1BQU0scUJBQXFCLENBQUM7QUFDbEcsT0FBTyxFQUFDLGtCQUFrQixFQUFFLGVBQWUsRUFBQyxNQUFNLGNBQWMsQ0FBQztBQUNqRSxPQUFPLEVBQUMsT0FBTyxFQUFFLFFBQVEsRUFBQyxNQUFNLE9BQU8sQ0FBQztBQUN4QyxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0sa0JBQWtCLENBQUM7QUFDMUMsT0FBTyxFQUFDLHNCQUFzQixFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFDMUQsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLGNBQWMsQ0FBQztBQUVwQzs7Ozs7R0FLRztBQUNILE1BQWUsT0FBTztJQUdwQjs7OztPQUlHO0lBQ0gsWUFBWSxPQUFnQjtRQUMxQixJQUFJLENBQUMsSUFBSSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUM7SUFDM0IsQ0FBQztDQVVGO0FBRUQ7Ozs7O0dBS0c7QUFDSCxNQUFNLFdBQVksU0FBUSxPQUFPO0lBSy9COzs7O09BSUc7SUFDSCxZQUFZLE9BQWdCOztRQUMxQixLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDZixJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ2pDLElBQUksQ0FBQyxVQUFVLEdBQUcsTUFBQSxPQUFPLGFBQVAsT0FBTyx1QkFBUCxPQUFPLENBQUUsVUFBVSxtQ0FBSSxHQUFHLENBQUM7UUFDN0MsSUFBSSxDQUFDLFFBQVEsR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDO0lBQ25DLENBQUM7SUFF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QU8sR0FBYSxDQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgdW1qIGZyb20gJ3VtYXAtanMnO1xuaW1wb3J0IHtUU05FfSBmcm9tICdAa2Vja2VsdC90c25lJztcblxuaW1wb3J0IHtPcHRpb25zLCBEaXN0YW5jZU1ldHJpYywgQ29vcmRpbmF0ZXMsIFZlY3RvciwgVmVjdG9ycywgTWF0cml4fSBmcm9tICcuL3R5cGUtZGVjbGFyYXRpb25zJztcbmltcG9ydCB7Y2FsY0Rpc3RhbmNlTWF0cml4LCB0cmFuc3Bvc2VNYXRyaXh9IGZyb20gJy4vb3BlcmF0aW9ucyc7XG5pbXBvcnQge1NQRUJhc2UsIFBTUEVCYXNlfSBmcm9tICcuL3NwZSc7XG5pbXBvcnQge01lYXN1cmVyfSBmcm9tICcuL3N0cmluZy1tZWFzdXJlJztcbmltcG9ydCB7QWxpZ25lZFNlcXVlbmNlRW5jb2Rlcn0gZnJvbSAnLi9zZXF1ZW5jZS1lbmNvZGVyJztcbmltcG9ydCB7YXNzZXJ0fSBmcm9tICcuL29wZXJhdGlvbnMnO1xuXG4vKipcbiAqIEFic3RyYWN0IGRpbWVuc2lvbmFsaXR5IHJlZHVjZXIuXG4gKlxuICogQGFic3RyYWN0XG4gKiBAY2xhc3MgUmVkdWNlclxuICovXG5hYnN0cmFjdCBjbGFzcyBSZWR1Y2VyIHtcbiAgcHJvdGVjdGVkIGRhdGE6IFZlY3RvcnM7XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgUmVkdWNlci5cbiAgICogQHBhcmFtIHtPcHRpb25zfSBvcHRpb25zIE9wdGlvbnMgdG8gcGFzcyB0byB0aGUgY29uc3RydWN0b3IuXG4gICAqIEBtZW1iZXJvZiBSZWR1Y2VyXG4gICAqL1xuICBjb25zdHJ1Y3RvcihvcHRpb25zOiBPcHRpb25zKSB7XG4gICAgdGhpcy5kYXRhID0gb3B0aW9ucy5kYXRhO1xuICB9XG5cbiAgLyoqXG4gICAqIElzIHRvIGVtYmVkIHRoZSBkYXRhIGdpdmVuIGludG8gdGhlIHR3by1kaW1lbnNpb25hbCBzcGFjZS5cbiAgICpcbiAgICogQGFic3RyYWN0XG4gICAqIEByZXR1cm4ge0Nvb3JkaW5hdGVzfSBDYXJ0ZXNpYW4gY29vcmRpbmF0ZSBvZiB0aGlzIGVtYmVkZGluZy5cbiAgICogQG1lbWJlcm9mIFJlZHVjZXJcbiAgICovXG4gIGFic3RyYWN0IHRyYW5zZm9ybSgpOiBDb29yZGluYXRlcztcbn1cblxuLyoqXG4gKiBJbXBsZW1lbnRzIHQtU05FIGRpbWVuc2lvbmFsaXR5IHJlZHVjdGlvbi5cbiAqXG4gKiBAY2xhc3MgVFNORVJlZHVjZXJcbiAqIEBleHRlbmRzIHtSZWR1Y2VyfVxuICovXG5jbGFzcyBUU05FUmVkdWNlciBleHRlbmRzIFJlZHVjZXIge1xuICBwcm90ZWN0ZWQgcmVkdWNlcjogVFNORTtcbiAgcHJvdGVjdGVkIGl0ZXJhdGlvbnM6IG51bWJlcjtcbiAgcHJvdGVjdGVkIGRpc3RhbmNlOiBEaXN0YW5jZU1ldHJpYztcblxuICAvKipcbiAgICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiBUU05FUmVkdWNlci5cbiAgICogQHBhcmFtIHtPcHRpb25zfSBvcHRpb25zIE9wdGlvbnMgdG8gcGFzcyB0byB0aGUgY29uc3RydWN0b3IuXG4gICAqIEBtZW1iZXJvZiBUU05FUmVkdWNlclxuICAgKi9cbiAgY29uc3RydWN0b3Iob3B0aW9uczogT3B0aW9ucykge1xuICAgIHN1cGVyKG9wdGlvbnMpO1xuICAgIHRoaXMucmVkdWNlciA9IG5ldyBUU05FKG9wdGlvbnMpO1xuICAgIHRoaXMuaXRlcmF0aW9ucyA9IG9wdGlvbnM/Lml0ZXJhdGlvbnMgPz8gMTAwO1xuICAgIHRoaXMuZGlzdGFuY2UgPSBvcHRpb25zLmRpc3RhbmNlO1xuICB9XG5cbiAgLyoqXG4gICAqIEVtYmVkcyB0aGUgZGF0YSBnaXZlbiBpbnRvIHRoZSB0d28tZGltZW5zaW9uYWwgc3BhY2UgdXNpbmcgdC1TTkUgbWV0aG9kLlxuICAgKiBAcmV0dXJuIHtDb29yZGluYXRlc30gQ2FydGVzaWFuIGNvb3JkaW5hdGUgb2YgdGhpcyBlbWJlZGRpbmcuXG4gICAqL1xuICBwdWJsaWMgdHJhbnNmb3JtKCk6IENvb3JkaW5hdGVzIHtcbiAgICB0aGlzLnJlZHVjZXIuaW5pdERhdGFEaXN0KGNhbGNEaXN0YW5jZU1hdHJpeCh0aGlzLmRhdGEsIHRoaXMuZGlzdGFuY2UpKTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5pdGVyYXRpb25zOyArK2kpIHtcbiAgICAgIHRoaXMucmVkdWNlci5zdGVwKCk7IC8vIGV2ZXJ5IHRpbWUgeW91IGNhbGwgdGhpcywgc29sdXRpb24gZ2V0cyBiZXR0ZXJcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMucmVkdWNlci5nZXRTb2x1dGlvbigpO1xuICB9XG59XG5cbi8qKlxuICogSW1wbGVtZW50cyBVTUFQIGRpbWVuc2lvbmFsaXR5IHJlZHVjdGlvbi5cbiAqXG4gKiBAY2xhc3MgVU1BUFJlZHVjZXJcbiAqIEBleHRlbmRzIHtSZWR1Y2VyfVxuICovXG5jbGFzcyBVTUFQUmVkdWNlciBleHRlbmRzIFJlZHVjZXIge1xuICBwcm90ZWN0ZWQgcmVkdWNlcjogdW1qLlVNQVA7XG4gIHByb3RlY3RlZCBlbmNvZGVyOiBBbGlnbmVkU2VxdWVuY2VFbmNvZGVyO1xuICBwcm90ZWN0ZWQgZGlzdGFuY2VGbjogRnVuY3Rpb247XG4gIHByb3RlY3RlZCB2ZWN0b3JzOiBudW1iZXJbXVtdO1xuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIFVNQVBSZWR1Y2VyLlxuICAgKiBAcGFyYW0ge09wdGlvbnN9IG9wdGlvbnMgT3B0aW9ucyB0byBwYXNzIHRvIHRoZSBjb25zdHJ1Y3Rvci5cbiAgICogQG1lbWJlcm9mIFVNQVBSZWR1Y2VyXG4gICAqL1xuICBjb25zdHJ1Y3RvcihvcHRpb25zOiBPcHRpb25zKSB7XG4gICAgc3VwZXIob3B0aW9ucyk7XG5cbiAgICBhc3NlcnQoJ2Rpc3RhbmNlRm4nIGluIG9wdGlvbnMpO1xuXG4gICAgdGhpcy5lbmNvZGVyID0gbmV3IEFsaWduZWRTZXF1ZW5jZUVuY29kZXIoKTtcbiAgICB0aGlzLmRpc3RhbmNlRm4gPSBvcHRpb25zLmRpc3RhbmNlRm47XG4gICAgdGhpcy52ZWN0b3JzID0gW107XG4gICAgb3B0aW9ucy5kaXN0YW5jZUZuID0gdGhpcy5fZW5jb2RlZERpc3RhbmNlLmJpbmQodGhpcyk7XG4gICAgdGhpcy5yZWR1Y2VyID0gbmV3IHVtai5VTUFQKG9wdGlvbnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEN1c3RvbSBkaXN0YW5jZSB3cmFwcGVyIHRvIGhhdmUgbnVtZXJpYyBpbnB1dHMgaW5zdGVhZCBvZiBzdHJpbmcgb25lcy5cbiAgICpcbiAgICogQHByb3RlY3RlZFxuICAgKiBAcGFyYW0ge251bWJlcltdfSBhIFRoZSBmaXJzdCBpdGVtLlxuICAgKiBAcGFyYW0ge251bWJlcltdfSBiIFRoZSBmaXJzdCBpdGVtLlxuICAgKiBAcmV0dXJuIHtudW1iZXJ9IERpc3RhbmNlIG1ldHJpYy5cbiAgICogQG1lbWJlcm9mIFVNQVBSZWR1Y2VyXG4gICAqL1xuICBwcm90ZWN0ZWQgX2VuY29kZWREaXN0YW5jZShhOiBudW1iZXJbXSwgYjogbnVtYmVyW10pOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmRpc3RhbmNlRm4odGhpcy5kYXRhW2FbMF1dLCB0aGlzLmRhdGFbYlswXV0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEVuY29kZXMgdGhlIGlucHV0IGRhdGEgYXMgYSB2ZWN0b3Igb2YgaW5kaWNlcy5cbiAgICpcbiAgICogQHByb3RlY3RlZFxuICAgKiBAbWVtYmVyb2YgVU1BUFJlZHVjZXJcbiAgICovXG4gIHByb3RlY3RlZCBfZW5jb2RlKCkge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5kYXRhLmxlbmd0aDsgKytpKSB7XG4gICAgICB0aGlzLnZlY3RvcnMucHVzaChbaV0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBFbWJlZHMgdGhlIGRhdGEgZ2l2ZW4gaW50byB0aGUgdHdvLWRpbWVuc2lvbmFsIHNwYWNlIHVzaW5nIFVNQVAgbWV0aG9kLlxuICAgKiBAcmV0dXJuIHtDb29yZGluYXRlc30gQ2FydGVzaWFuIGNvb3JkaW5hdGUgb2YgdGhpcyBlbWJlZGRpbmcuXG4gICAqL1xuICBwdWJsaWMgdHJhbnNmb3JtKCk6IENvb3JkaW5hdGVzIHtcbiAgICB0aGlzLl9lbmNvZGUoKTtcblxuICAgIGNvbnN0IGVtYmVkZGluZyA9IHRoaXMucmVkdWNlci5maXQodGhpcy52ZWN0b3JzKTtcblxuICAgIGZ1bmN0aW9uIGFycmF5Q2FzdDJDb29yZGluYXRlcyhkYXRhOiBudW1iZXJbXVtdKTogQ29vcmRpbmF0ZXMge1xuICAgICAgcmV0dXJuIG5ldyBBcnJheShkYXRhLmxlbmd0aCkuZmlsbCgwKS5tYXAoKF8sIGkpID0+IChWZWN0b3IuZnJvbShkYXRhW2ldKSkpO1xuICAgIH1cblxuICAgIHJldHVybiBhcnJheUNhc3QyQ29vcmRpbmF0ZXMoZW1iZWRkaW5nKTtcbiAgfVxufVxuXG4vKipcbiAqIEltcGxlbWVudHMgb3JpZ2luYWwgU1BFIGRpbWVuc2lvbmFsaXR5IHJlZHVjdGlvbi5cbiAqXG4gKiBAY2xhc3MgU1BFUmVkdWNlclxuICogQGV4dGVuZHMge1JlZHVjZXJ9XG4gKi9cbmNsYXNzIFNQRVJlZHVjZXIgZXh0ZW5kcyBSZWR1Y2VyIHtcbiAgcHJvdGVjdGVkIHJlZHVjZXI6IFNQRUJhc2U7XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgU1BFUmVkdWNlci5cbiAgICogQHBhcmFtIHtPcHRpb25zfSBvcHRpb25zIE9wdGlvbnMgdG8gcGFzcyB0byB0aGUgY29uc3RydWN0b3IuXG4gICAqIEBtZW1iZXJvZiBTUEVSZWR1Y2VyXG4gICAqL1xuICBjb25zdHJ1Y3RvcihvcHRpb25zOiBPcHRpb25zKSB7XG4gICAgc3VwZXIob3B0aW9ucyk7XG4gICAgdGhpcy5yZWR1Y2VyID0gbmV3IFNQRUJhc2Uob3B0aW9ucyk7XG4gIH1cblxuICAvKipcbiAgICogRW1iZWRzIHRoZSBkYXRhIGdpdmVuIGludG8gdGhlIHR3by1kaW1lbnNpb25hbCBzcGFjZSB1c2luZyB0aGUgb3JpZ2luYWwgU1BFIG1ldGhvZC5cbiAgICogQHJldHVybiB7Q29vcmRpbmF0ZXN9IENhcnRlc2lhbiBjb29yZGluYXRlIG9mIHRoaXMgZW1iZWRkaW5nLlxuICAgKi9cbiAgcHVibGljIHRyYW5zZm9ybSgpOiBDb29yZGluYXRlcyB7XG4gICAgcmV0dXJuIHRoaXMucmVkdWNlci5lbWJlZCh0aGlzLmRhdGEpO1xuICB9XG59XG5cbi8qKlxuICogSW1wbGVtZW50cyBtb2RpZmllZCBTUEUgZGltZW5zaW9uYWxpdHkgcmVkdWN0aW9uLlxuICpcbiAqIEBjbGFzcyBQU1BFUmVkdWNlclxuICogQGV4dGVuZHMge1JlZHVjZXJ9XG4gKi9cbmNsYXNzIFBTUEVSZWR1Y2VyIGV4dGVuZHMgUmVkdWNlciB7XG4gIHByb3RlY3RlZCByZWR1Y2VyOiBQU1BFQmFzZTtcblxuICAvKipcbiAgICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiBQU1BFUmVkdWNlci5cbiAgICogQHBhcmFtIHtPcHRpb25zfSBvcHRpb25zIE9wdGlvbnMgdG8gcGFzcyB0byB0aGUgY29uc3RydWN0b3IuXG4gICAqIEBtZW1iZXJvZiBQU1BFUmVkdWNlclxuICAgKi9cbiAgY29uc3RydWN0b3Iob3B0aW9uczogT3B0aW9ucykge1xuICAgIHN1cGVyKG9wdGlvbnMpO1xuICAgIHRoaXMucmVkdWNlciA9IG5ldyBQU1BFQmFzZShvcHRpb25zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFbWJlZHMgdGhlIGRhdGEgZ2l2ZW4gaW50byB0aGUgdHdvLWRpbWVuc2lvbmFsIHNwYWNlIHVzaW5nIHRoZSBtb2RpZmllZCBTUEUgbWV0aG9kLlxuICAgKiBAcmV0dXJuIHtDb29yZGluYXRlc30gQ2FydGVzaWFuIGNvb3JkaW5hdGUgb2YgdGhpcyBlbWJlZGRpbmcuXG4gICAqL1xuICBwdWJsaWMgdHJhbnNmb3JtKCk6IENvb3JkaW5hdGVzIHtcbiAgICByZXR1cm4gdGhpcy5yZWR1Y2VyLmVtYmVkKHRoaXMuZGF0YSk7XG4gIH1cbn1cblxuLyoqXG4gKiBVbmlmaWVkIGNsYXNzIGltcGxlbWVudGluZyBkaWZmZXJlbnQgZGltZW5zaW9uYWxpdHkgcmVkdWN0aW9uIG1ldGhvZHMuXG4gKlxuICogQGV4cG9ydFxuICogQGNsYXNzIERpbWVuc2lvbmFsaXR5UmVkdWNlclxuICovXG5leHBvcnQgY2xhc3MgRGltZW5zaW9uYWxpdHlSZWR1Y2VyIHtcbiAgcHJpdmF0ZSByZWR1Y2VyOiBSZWR1Y2VyIHwgdW5kZWZpbmVkO1xuICBwdWJsaWMgc3RhdGljIG1ldGhvZHM6IHN0cmluZ1tdID0gWydVTUFQJywgJ3QtU05FJywgJ1NQRScsICdwU1BFJ107XG4gIHByaXZhdGUgbWVhc3VyZXI6IE1lYXN1cmVyO1xuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIERpbWVuc2lvbmFsaXR5UmVkdWNlci5cbiAgICogQHBhcmFtIHthbnlbXX0gZGF0YSBWZWN0b3JzIHRvIGVtYmVkLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbWV0aG9kIEVtYmVkZGluZyBtZXRob2QgdG8gYmUgYXBwbGllZFxuICAgKiBAcGFyYW0ge3N0cmluZ30gbWV0cmljIERpc3RhbmNlIG1ldHJpYyB0byBiZSBjb21wdXRlZCBiZXR3ZWVuIGVhY2ggb2YgdGhlIHZlY3RvcnMuXG4gICAqIEBwYXJhbSB7T3B0aW9uc30gW29wdGlvbnNdIE9wdGlvbnMgdG8gcGFzcyB0byB0aGUgaW1wbGVtZW50aW5nIGVtYmVkZGVycy5cbiAgICogQG1lbWJlcm9mIERpbWVuc2lvbmFsaXR5UmVkdWNlclxuICAgKi9cbiAgY29uc3RydWN0b3IoZGF0YTogYW55W10sIG1ldGhvZDogc3RyaW5nLCBtZXRyaWM6IHN0cmluZywgb3B0aW9ucz86IE9wdGlvbnMpIHtcbiAgICBhc3NlcnQoRGltZW5zaW9uYWxpdHlSZWR1Y2VyLmF2YWlsYWJsZU1ldGhvZHMuaW5jbHVkZXMobWV0aG9kKSwgYFRoZSBtZXRob2QgJyR7bWV0aG9kfScgaXMgbm90IHN1cHBvcnRlZGApO1xuXG4gICAgdGhpcy5tZWFzdXJlciA9IG5ldyBNZWFzdXJlcihtZXRyaWMpO1xuICAgIGNvbnN0IG1lYXN1cmUgPSB0aGlzLm1lYXN1cmVyLmdldE1lYXN1cmUoKVxuXG4gICAgaWYgKG1ldGhvZCA9PSAnVU1BUCcpIHtcbiAgICAgIHRoaXMucmVkdWNlciA9IG5ldyBVTUFQUmVkdWNlcih7XG4gICAgICAgIC4uLntkYXRhOiBkYXRhfSwgXG4gICAgICAgIC4uLntkaXN0YW5jZUZuOiBtZWFzdXJlfSwgXG4gICAgICAgIC4uLntuRXBvY2hzOiBvcHRpb25zPy5jeWNsZXN9LFxuICAgICAgICAuLi5vcHRpb25zXG4gICAgICB9KTtcbiAgICB9IGVsc2UgaWYgKG1ldGhvZCA9PSAndC1TTkUnKSB7XG4gICAgICB0aGlzLnJlZHVjZXIgPSBuZXcgVFNORVJlZHVjZXIoe1xuICAgICAgICAuLi57ZGF0YTogZGF0YX0sXG4gICAgICAgIC4uLntkaXN0YW5jZTogbWVhc3VyZX0sXG4gICAgICAgIC4uLntpdGVyYXRpb25zOiBvcHRpb25zPy5jeWNsZXMgPz8gdW5kZWZpbmVkfSxcbiAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgIH0pO1xuICAgIH0gZWxzZSBpZiAobWV0aG9kID09ICdTUEUnKSB7XG4gICAgICB0aGlzLnJlZHVjZXIgPSBuZXcgU1BFUmVkdWNlcih7Li4ue2RhdGE6IGRhdGF9LCAuLi57ZGlzdGFuY2U6IG1lYXN1cmV9LCAuLi5vcHRpb25zfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucmVkdWNlciA9IG5ldyBQU1BFUmVkdWNlcih7Li4ue2RhdGE6IGRhdGF9LCAuLi57ZGlzdGFuY2U6IG1lYXN1cmV9LCAuLi5vcHRpb25zfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEVtYmVkcyB0aGUgZGF0YSBnaXZlbiBpbnRvIHRoZSB0d28tZGltZW5zaW9uYWwgc3BhY2UgdXNpbmcgdGhlIGNob3NlbiBtZXRob2QuXG4gICAqXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gdHJhbnNwb3NlIFdoZXRoZXIgdG8gdHJhbnNmb3JtIGNvb3JkaW5hdGVzIHRvIGhhdmUgY29sdW1ucy1maXJzdCBvcmllbnRhdGlvbi5cbiAgICogQHRocm93cyB7RXJyb3J9IElmIHRoZSBlbWJlZGRpbmcgbWV0aG9kIHdhcyBub3QgZm91bmQuXG4gICAqIEByZXR1cm4ge0Nvb3JkaW5hdGVzfSBDYXJ0ZXNpYW4gY29vcmRpbmF0ZSBvZiB0aGlzIGVtYmVkZGluZy5cbiAgICogQG1lbWJlcm9mIERpbWVuc2lvbmFsaXR5UmVkdWNlclxuICAgKi9cbiAgcHVibGljIHRyYW5zZm9ybSh0cmFuc3Bvc2U6IGJvb2xlYW4gPSBmYWxzZSk6IENvb3JkaW5hdGVzIHtcbiAgICBpZiAodGhpcy5yZWR1Y2VyID09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdSZWR1Y2VyIHdhcyBub3QgZGVmaW5lZC4nKTtcbiAgICB9XG4gICAgbGV0IGVtYmVkZGluZyA9IHRoaXMucmVkdWNlci50cmFuc2Zvcm0oKTtcblxuICAgIGlmICh0cmFuc3Bvc2UpIHtcbiAgICAgIGVtYmVkZGluZyA9IHRyYW5zcG9zZU1hdHJpeChlbWJlZGRpbmcpO1xuICAgIH1cbiAgICByZXR1cm4gZW1iZWRkaW5nO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgZGltZW5zaW9uYWxpdHkgcmVkdWN0aW9uIG1ldGhvZHMgYXZhaWxhYmxlLlxuICAgKlxuICAgKiBAcmVhZG9ubHlcbiAgICogQG1lbWJlcm9mIERpbWVuc2lvbmFsaXR5UmVkdWNlclxuICAgKi9cbiAgc3RhdGljIGdldCBhdmFpbGFibGVNZXRob2RzKCkge1xuICAgIHJldHVybiBEaW1lbnNpb25hbGl0eVJlZHVjZXIubWV0aG9kcztcbiAgfVxufVxuIl19
@@ -0,0 +1,59 @@
1
+ /**
2
+ * Class to categorial encode/decode aligned amino acid residues sequence.
3
+ *
4
+ * @export
5
+ * @class AlignedSequenceEncoder
6
+ */
7
+ export declare class AlignedSequenceEncoder {
8
+ protected aa2num: {
9
+ [name: string]: number;
10
+ };
11
+ protected num2aa: {
12
+ [code: number]: string;
13
+ };
14
+ constructor();
15
+ /**
16
+ * Truncate NH2 and -COOH terminals of the given sequence.
17
+ *
18
+ * @static
19
+ * @param {string} seq The sequence provided.
20
+ * @return {string} Truncated sequence.
21
+ * @memberof AlignedSequenceEncoder
22
+ */
23
+ static _truncateSequence(seq: string): string;
24
+ /**
25
+ * Cuts auxiliary defises before a residue.
26
+ *
27
+ * @static
28
+ * @param {string} seq The sequence to process.
29
+ * @return {string} Processed sequence.
30
+ * @memberof AlignedSequenceEncoder
31
+ */
32
+ static _dropDefises(seq: string): string;
33
+ /**
34
+ * Performs truncation and cutting auxiliary defises.
35
+ *
36
+ * @static
37
+ * @param {string} sequence The sequence work under process.
38
+ * @return {string} Result of cleaning.
39
+ * @memberof AlignedSequenceEncoder
40
+ */
41
+ static clean(sequence: string): string;
42
+ /**
43
+ * Categorial encode of the sequence provided.
44
+ *
45
+ * @param {string} sequence The sequence.
46
+ * @return {number[]} Encoded vector.
47
+ * @memberof AlignedSequenceEncoder
48
+ */
49
+ encode(sequence: string): number[];
50
+ /**
51
+ * Decode the encoded vector into the sequence back.
52
+ *
53
+ * @param {number[]} value The vector encoded.
54
+ * @return {string} Decoded sequence.
55
+ * @memberof AlignedSequenceEncoder
56
+ */
57
+ decode(value: number[]): string;
58
+ }
59
+ //# sourceMappingURL=sequence-encoder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sequence-encoder.d.ts","sourceRoot":"","sources":["sequence-encoder.ts"],"names":[],"mappings":"AAEA;;;;;GAKG;AACH,qBAAa,sBAAsB;IAC/B,SAAS,CAAC,MAAM,EAAE;QAAC,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAA;KAAC,CAAC;IAC3C,SAAS,CAAC,MAAM,EAAE;QAAC,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAA;KAAC,CAAC;;IA8B3C;;;;;;;OAOG;IACH,MAAM,CAAC,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM;IAkB7C;;;;;;;OAOG;IACH,MAAM,CAAC,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM;IAIxC;;;;;;;OAOG;IACH,MAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM;IAItC;;;;;;OAMG;IACI,MAAM,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE;IAczC;;;;;;OAMG;IACI,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM;CAYzC"}