@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.
- package/README.md +2 -2
- package/package.json +29 -29
- package/src/bit-array.d.ts +82 -0
- package/src/bit-array.d.ts.map +1 -0
- package/src/bit-array.js +666 -666
- package/src/operations.d.ts +66 -0
- package/src/operations.d.ts.map +1 -0
- package/src/operations.js +144 -144
- package/src/reduce-dimensionality.d.ts +38 -0
- package/src/reduce-dimensionality.d.ts.map +1 -0
- package/src/reduce-dimensionality.js +233 -233
- package/src/sequence-encoder.d.ts +59 -0
- package/src/sequence-encoder.d.ts.map +1 -0
- package/src/sequence-encoder.js +116 -117
- package/src/spe.d.ts +68 -0
- package/src/spe.d.ts.map +1 -0
- package/src/spe.js +151 -151
- package/src/string-measure.d.ts +33 -0
- package/src/string-measure.d.ts.map +1 -0
- package/src/string-measure.js +46 -46
- package/src/string-utils.d.ts +2 -0
- package/src/string-utils.d.ts.map +1 -0
- package/src/string-utils.js +9 -9
- package/src/table-validation.d.ts +2 -0
- package/src/table-validation.d.ts.map +1 -0
- package/src/table-validation.js +47 -47
- package/src/test-utils.d.ts +11 -0
- package/src/test-utils.d.ts.map +1 -0
- package/src/test-utils.js +81 -81
- package/src/{type_declarations.ts → type-declarations.d.ts} +56 -54
- package/src/type-declarations.d.ts.map +1 -0
- package/src/type-declarations.js +37 -0
- package/tsconfig.json +71 -71
- package/src/bit-array.ts +0 -767
- package/src/operations.ts +0 -160
- package/src/reduce-dimensionality.ts +0 -278
- package/src/sequence-encoder.ts +0 -132
- package/src/spe.ts +0 -172
- package/src/string-measure.ts +0 -54
- package/src/string-utils.ts +0 -8
- package/src/table-validation.ts +0 -67
- package/src/test-utils.ts +0 -97
- package/src/type_declarations.js +0 -37
package/src/sequence-encoder.js
CHANGED
|
@@ -1,117 +1,116 @@
|
|
|
1
|
-
import { assert } from './operations';
|
|
2
|
-
/**
|
|
3
|
-
* Class to categorial encode/decode aligned amino acid residues sequence.
|
|
4
|
-
*
|
|
5
|
-
* @export
|
|
6
|
-
* @class AlignedSequenceEncoder
|
|
7
|
-
*/
|
|
8
|
-
export class AlignedSequenceEncoder {
|
|
9
|
-
constructor() {
|
|
10
|
-
this.aa2num = {
|
|
11
|
-
'-': 0,
|
|
12
|
-
'A': 1,
|
|
13
|
-
'C': 2,
|
|
14
|
-
'D': 3,
|
|
15
|
-
'E': 4,
|
|
16
|
-
'F': 5,
|
|
17
|
-
'G': 6,
|
|
18
|
-
'H': 7,
|
|
19
|
-
'I': 8,
|
|
20
|
-
'K': 9,
|
|
21
|
-
'L': 10,
|
|
22
|
-
'M': 11,
|
|
23
|
-
'N': 12,
|
|
24
|
-
'P': 13,
|
|
25
|
-
'Q': 14,
|
|
26
|
-
'R': 15,
|
|
27
|
-
'S': 16,
|
|
28
|
-
'T': 17,
|
|
29
|
-
'V': 18,
|
|
30
|
-
'W': 19,
|
|
31
|
-
'Y': 20,
|
|
32
|
-
};
|
|
33
|
-
this.num2aa = {};
|
|
34
|
-
Object.entries(this.aa2num).forEach(([k, v]) => (this.num2aa[v] = k));
|
|
35
|
-
}
|
|
36
|
-
/**
|
|
37
|
-
* Truncate NH2 and -COOH terminals of the given sequence.
|
|
38
|
-
*
|
|
39
|
-
* @static
|
|
40
|
-
* @param {string} seq The sequence provided.
|
|
41
|
-
* @return {string} Truncated sequence.
|
|
42
|
-
* @memberof AlignedSequenceEncoder
|
|
43
|
-
*/
|
|
44
|
-
static _truncateSequence(seq) {
|
|
45
|
-
let start = 0;
|
|
46
|
-
let end = seq.length;
|
|
47
|
-
const termina = ['NH2', 'COOH'];
|
|
48
|
-
if (seq.startsWith(termina[0])) {
|
|
49
|
-
const l = termina[0].length; // Cut only 'NH2' without following '-'.
|
|
50
|
-
assert(seq[l] == '-', `Wrong sequence format: ${termina[0]} without following '-' in '${seq}'.`);
|
|
51
|
-
start = l;
|
|
52
|
-
}
|
|
53
|
-
if (seq.endsWith(termina[1])) {
|
|
54
|
-
const l = termina[1].length + 1; // Cut both 'COOH' and precending '-'.
|
|
55
|
-
assert(seq[end - l] == '-', `Wrong sequence format: ${termina[1]} without '-' precending in '${seq}'.`);
|
|
56
|
-
end -= l;
|
|
57
|
-
}
|
|
58
|
-
return seq.substring(start, end);
|
|
59
|
-
}
|
|
60
|
-
/**
|
|
61
|
-
* Cuts auxiliary defises before a residue.
|
|
62
|
-
*
|
|
63
|
-
* @static
|
|
64
|
-
* @param {string} seq The sequence to process.
|
|
65
|
-
* @return {string} Processed sequence.
|
|
66
|
-
* @memberof AlignedSequenceEncoder
|
|
67
|
-
*/
|
|
68
|
-
static _dropDefises(seq) {
|
|
69
|
-
return seq.replace(/(-)([^-]+)/g, '$2');
|
|
70
|
-
}
|
|
71
|
-
/**
|
|
72
|
-
* Performs truncation and cutting auxiliary defises.
|
|
73
|
-
*
|
|
74
|
-
* @static
|
|
75
|
-
* @param {string} sequence The sequence work under process.
|
|
76
|
-
* @return {string} Result of cleaning.
|
|
77
|
-
* @memberof AlignedSequenceEncoder
|
|
78
|
-
*/
|
|
79
|
-
static clean(sequence) {
|
|
80
|
-
return AlignedSequenceEncoder._dropDefises(AlignedSequenceEncoder._truncateSequence(sequence));
|
|
81
|
-
}
|
|
82
|
-
/**
|
|
83
|
-
* Categorial encode of the sequence provided.
|
|
84
|
-
*
|
|
85
|
-
* @param {string} sequence The sequence.
|
|
86
|
-
* @return {number[]} Encoded vector.
|
|
87
|
-
* @memberof AlignedSequenceEncoder
|
|
88
|
-
*/
|
|
89
|
-
encode(sequence) {
|
|
90
|
-
const
|
|
91
|
-
|
|
92
|
-
let
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
*
|
|
102
|
-
*
|
|
103
|
-
* @
|
|
104
|
-
* @
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
let
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VxdWVuY2UtZW5jb2Rlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInNlcXVlbmNlLWVuY29kZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLGNBQWMsQ0FBQztBQUVwQzs7Ozs7R0FLRztBQUNILE1BQU0sT0FBTyxzQkFBc0I7SUFJL0I7UUFDSSxJQUFJLENBQUMsTUFBTSxHQUFHO1lBQ1YsR0FBRyxFQUFFLENBQUM7WUFDTixHQUFHLEVBQUUsQ0FBQztZQUNOLEdBQUcsRUFBRSxDQUFDO1lBQ04sR0FBRyxFQUFFLENBQUM7WUFDTixHQUFHLEVBQUUsQ0FBQztZQUNOLEdBQUcsRUFBRSxDQUFDO1lBQ04sR0FBRyxFQUFFLENBQUM7WUFDTixHQUFHLEVBQUUsQ0FBQztZQUNOLEdBQUcsRUFBRSxDQUFDO1lBQ04sR0FBRyxFQUFFLENBQUM7WUFDTixHQUFHLEVBQUUsRUFBRTtZQUNQLEdBQUcsRUFBRSxFQUFFO1lBQ1AsR0FBRyxFQUFFLEVBQUU7WUFDUCxHQUFHLEVBQUUsRUFBRTtZQUNQLEdBQUcsRUFBRSxFQUFFO1lBQ1AsR0FBRyxFQUFFLEVBQUU7WUFDUCxHQUFHLEVBQUUsRUFBRTtZQUNQLEdBQUcsRUFBRSxFQUFFO1lBQ1AsR0FBRyxFQUFFLEVBQUU7WUFDUCxHQUFHLEVBQUUsRUFBRTtZQUNQLEdBQUcsRUFBRSxFQUFFO1NBQ1YsQ0FBQztRQUNGLElBQUksQ0FBQyxNQUFNLEdBQUcsRUFBRSxDQUFDO1FBQ2pCLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMxRSxDQUFDO0lBRUQ7Ozs7Ozs7T0FPRztJQUNILE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxHQUFXO1FBQ2hDLElBQUksS0FBSyxHQUFHLENBQUMsQ0FBQztRQUNkLElBQUksR0FBRyxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUM7UUFDckIsTUFBTSxPQUFPLEdBQUcsQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFFaEMsSUFBSSxHQUFHLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQzVCLE1BQU0sQ0FBQyxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyx3Q0FBd0M7WUFDckUsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLEVBQUUsMEJBQTBCLE9BQU8sQ0FBQyxDQUFDLENBQUMsOEJBQThCLEdBQUcsSUFBSSxDQUFDLENBQUE7WUFDaEcsS0FBSyxHQUFHLENBQUMsQ0FBQztTQUNiO1FBQ0QsSUFBSSxHQUFHLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQzFCLE1BQU0sQ0FBQyxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUMsQ0FBQyxDQUFDLENBQUMsc0NBQXNDO1lBQ3JFLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsRUFBRSwwQkFBMEIsT0FBTyxDQUFDLENBQUMsQ0FBQywrQkFBK0IsR0FBRyxJQUFJLENBQUMsQ0FBQTtZQUNyRyxHQUFHLElBQUksQ0FBQyxDQUFDO1NBQ1o7UUFDRCxPQUFPLEdBQUcsQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ3JDLENBQUM7SUFFRDs7Ozs7OztPQU9HO0lBQ0gsTUFBTSxDQUFDLFlBQVksQ0FBQyxHQUFXO1FBQzNCLE9BQU8sR0FBRyxDQUFDLE9BQU8sQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLENBQUE7SUFDM0MsQ0FBQztJQUVEOzs7Ozs7O09BT0c7SUFDSCxNQUFNLENBQUMsS0FBSyxDQUFDLFFBQWdCO1FBQ3pCLE9BQU8sc0JBQXNCLENBQUMsWUFBWSxDQUFDLHNCQUFzQixDQUFDLGlCQUFpQixDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7SUFDbkcsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNJLE1BQU0sQ0FBQyxRQUFnQjtRQUMxQixNQUFNLEdBQUcsR0FBRyxzQkFBc0IsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDbkQsTUFBTSxNQUFNLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQztRQUMxQixJQUFJLE1BQU0sR0FBRyxJQUFJLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFdkMsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sRUFBRSxFQUFFLENBQUMsRUFBRTtZQUM3QixJQUFJLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFFbEIsTUFBTSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLGlCQUFpQixJQUFJLHdCQUF3QixHQUFHLEdBQUcsQ0FBQyxDQUFDO1lBRWpGLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQ2pDO1FBQ0QsT0FBTyxNQUFNLENBQUM7SUFDbEIsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNJLE1BQU0sQ0FBQyxLQUFlO1FBQ3pCLElBQUksQ0FBQyxHQUFXLEVBQUUsQ0FBQztRQUVuQixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsRUFBRTtZQUNuQyxJQUFJLElBQUksR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFFcEIsTUFBTSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLGlCQUFpQixJQUFJLHNCQUFzQixLQUFLLEdBQUcsQ0FBQyxDQUFDO1lBRWpGLENBQUMsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQzFCO1FBQ0QsT0FBTyxDQUFDLENBQUM7SUFDYixDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge2Fzc2VydH0gZnJvbSAnLi9vcGVyYXRpb25zJztcclxuXHJcbi8qKlxyXG4gKiBDbGFzcyB0byBjYXRlZ29yaWFsIGVuY29kZS9kZWNvZGUgYWxpZ25lZCBhbWlubyBhY2lkIHJlc2lkdWVzIHNlcXVlbmNlLlxyXG4gKlxyXG4gKiBAZXhwb3J0XHJcbiAqIEBjbGFzcyBBbGlnbmVkU2VxdWVuY2VFbmNvZGVyXHJcbiAqL1xyXG5leHBvcnQgY2xhc3MgQWxpZ25lZFNlcXVlbmNlRW5jb2RlciB7XHJcbiAgICBwcm90ZWN0ZWQgYWEybnVtOiB7W25hbWU6IHN0cmluZ106IG51bWJlcn07XHJcbiAgICBwcm90ZWN0ZWQgbnVtMmFhOiB7W2NvZGU6IG51bWJlcl06IHN0cmluZ307XHJcblxyXG4gICAgY29uc3RydWN0b3IgKCkge1xyXG4gICAgICAgIHRoaXMuYWEybnVtID0ge1xyXG4gICAgICAgICAgICAnLSc6IDAsXHJcbiAgICAgICAgICAgICdBJzogMSxcclxuICAgICAgICAgICAgJ0MnOiAyLFxyXG4gICAgICAgICAgICAnRCc6IDMsXHJcbiAgICAgICAgICAgICdFJzogNCxcclxuICAgICAgICAgICAgJ0YnOiA1LFxyXG4gICAgICAgICAgICAnRyc6IDYsXHJcbiAgICAgICAgICAgICdIJzogNyxcclxuICAgICAgICAgICAgJ0knOiA4LFxyXG4gICAgICAgICAgICAnSyc6IDksXHJcbiAgICAgICAgICAgICdMJzogMTAsXHJcbiAgICAgICAgICAgICdNJzogMTEsXHJcbiAgICAgICAgICAgICdOJzogMTIsXHJcbiAgICAgICAgICAgICdQJzogMTMsXHJcbiAgICAgICAgICAgICdRJzogMTQsXHJcbiAgICAgICAgICAgICdSJzogMTUsXHJcbiAgICAgICAgICAgICdTJzogMTYsXHJcbiAgICAgICAgICAgICdUJzogMTcsXHJcbiAgICAgICAgICAgICdWJzogMTgsXHJcbiAgICAgICAgICAgICdXJzogMTksXHJcbiAgICAgICAgICAgICdZJzogMjAsXHJcbiAgICAgICAgfTtcclxuICAgICAgICB0aGlzLm51bTJhYSA9IHt9O1xyXG4gICAgICAgIE9iamVjdC5lbnRyaWVzKHRoaXMuYWEybnVtKS5mb3JFYWNoKChbaywgdl0pID0+ICh0aGlzLm51bTJhYVt2XSA9IGspKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFRydW5jYXRlIE5IMiBhbmQgLUNPT0ggdGVybWluYWxzIG9mIHRoZSBnaXZlbiBzZXF1ZW5jZS5cclxuICAgICAqXHJcbiAgICAgKiBAc3RhdGljXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gc2VxIFRoZSBzZXF1ZW5jZSBwcm92aWRlZC5cclxuICAgICAqIEByZXR1cm4ge3N0cmluZ30gVHJ1bmNhdGVkIHNlcXVlbmNlLlxyXG4gICAgICogQG1lbWJlcm9mIEFsaWduZWRTZXF1ZW5jZUVuY29kZXJcclxuICAgICAqL1xyXG4gICAgc3RhdGljIF90cnVuY2F0ZVNlcXVlbmNlKHNlcTogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgICAgICBsZXQgc3RhcnQgPSAwO1xyXG4gICAgICAgIGxldCBlbmQgPSBzZXEubGVuZ3RoO1xyXG4gICAgICAgIGNvbnN0IHRlcm1pbmEgPSBbJ05IMicsICdDT09IJ107XHJcbiAgICBcclxuICAgICAgICBpZiAoc2VxLnN0YXJ0c1dpdGgodGVybWluYVswXSkpIHtcclxuICAgICAgICAgICAgY29uc3QgbCA9IHRlcm1pbmFbMF0ubGVuZ3RoOyAvLyBDdXQgb25seSAnTkgyJyB3aXRob3V0IGZvbGxvd2luZyAnLScuXHJcbiAgICAgICAgICAgIGFzc2VydChzZXFbbF0gPT0gJy0nLCBgV3Jvbmcgc2VxdWVuY2UgZm9ybWF0OiAke3Rlcm1pbmFbMF19IHdpdGhvdXQgZm9sbG93aW5nICctJyBpbiAnJHtzZXF9Jy5gKVxyXG4gICAgICAgICAgICBzdGFydCA9IGw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChzZXEuZW5kc1dpdGgodGVybWluYVsxXSkpIHtcclxuICAgICAgICAgICAgY29uc3QgbCA9IHRlcm1pbmFbMV0ubGVuZ3RoKzE7IC8vIEN1dCBib3RoICdDT09IJyBhbmQgcHJlY2VuZGluZyAnLScuXHJcbiAgICAgICAgICAgIGFzc2VydChzZXFbZW5kLWxdID09ICctJywgYFdyb25nIHNlcXVlbmNlIGZvcm1hdDogJHt0ZXJtaW5hWzFdfSB3aXRob3V0ICctJyBwcmVjZW5kaW5nIGluICcke3NlcX0nLmApXHJcbiAgICAgICAgICAgIGVuZCAtPSBsO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gc2VxLnN1YnN0cmluZyhzdGFydCwgZW5kKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEN1dHMgYXV4aWxpYXJ5IGRlZmlzZXMgYmVmb3JlIGEgcmVzaWR1ZS5cclxuICAgICAqXHJcbiAgICAgKiBAc3RhdGljXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gc2VxIFRoZSBzZXF1ZW5jZSB0byBwcm9jZXNzLlxyXG4gICAgICogQHJldHVybiB7c3RyaW5nfSBQcm9jZXNzZWQgc2VxdWVuY2UuXHJcbiAgICAgKiBAbWVtYmVyb2YgQWxpZ25lZFNlcXVlbmNlRW5jb2RlclxyXG4gICAgICovXHJcbiAgICBzdGF0aWMgX2Ryb3BEZWZpc2VzKHNlcTogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gc2VxLnJlcGxhY2UoLygtKShbXi1dKykvZywgJyQyJylcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFBlcmZvcm1zIHRydW5jYXRpb24gYW5kIGN1dHRpbmcgYXV4aWxpYXJ5IGRlZmlzZXMuXHJcbiAgICAgKlxyXG4gICAgICogQHN0YXRpY1xyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHNlcXVlbmNlIFRoZSBzZXF1ZW5jZSB3b3JrIHVuZGVyIHByb2Nlc3MuXHJcbiAgICAgKiBAcmV0dXJuIHtzdHJpbmd9IFJlc3VsdCBvZiBjbGVhbmluZy5cclxuICAgICAqIEBtZW1iZXJvZiBBbGlnbmVkU2VxdWVuY2VFbmNvZGVyXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBjbGVhbihzZXF1ZW5jZTogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gQWxpZ25lZFNlcXVlbmNlRW5jb2Rlci5fZHJvcERlZmlzZXMoQWxpZ25lZFNlcXVlbmNlRW5jb2Rlci5fdHJ1bmNhdGVTZXF1ZW5jZShzZXF1ZW5jZSkpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2F0ZWdvcmlhbCBlbmNvZGUgb2YgdGhlIHNlcXVlbmNlIHByb3ZpZGVkLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBzZXF1ZW5jZSBUaGUgc2VxdWVuY2UuXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJbXX0gRW5jb2RlZCB2ZWN0b3IuXHJcbiAgICAgKiBAbWVtYmVyb2YgQWxpZ25lZFNlcXVlbmNlRW5jb2RlclxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZW5jb2RlKHNlcXVlbmNlOiBzdHJpbmcpOiBudW1iZXJbXSB7XHJcbiAgICAgICAgY29uc3Qgc2VxID0gQWxpZ25lZFNlcXVlbmNlRW5jb2Rlci5jbGVhbihzZXF1ZW5jZSk7XHJcbiAgICAgICAgY29uc3Qgbkl0ZW1zID0gc2VxLmxlbmd0aDtcclxuICAgICAgICBsZXQgdmFsdWVzID0gbmV3IEFycmF5KG5JdGVtcykuZmlsbCgwKTtcclxuICAgIFxyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbkl0ZW1zOyArK2kpIHtcclxuICAgICAgICAgICAgbGV0IGNoYXIgPSBzZXFbaV07XHJcbiAgICBcclxuICAgICAgICAgICAgYXNzZXJ0KGNoYXIgaW4gdGhpcy5hYTJudW0sIGBVbmtub3duIGNoYXIgJyR7Y2hhcn0nIGZvdW5kIGluIHNlcXVlbmNlICcke3NlcX0nYCk7XHJcbiAgICBcclxuICAgICAgICAgICAgdmFsdWVzW2ldID0gdGhpcy5hYTJudW1bY2hhcl07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB2YWx1ZXM7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEZWNvZGUgdGhlIGVuY29kZWQgdmVjdG9yIGludG8gdGhlIHNlcXVlbmNlIGJhY2suXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJbXX0gdmFsdWUgVGhlIHZlY3RvciBlbmNvZGVkLlxyXG4gICAgICogQHJldHVybiB7c3RyaW5nfSBEZWNvZGVkIHNlcXVlbmNlLlxyXG4gICAgICogQG1lbWJlcm9mIEFsaWduZWRTZXF1ZW5jZUVuY29kZXJcclxuICAgICAqL1xyXG4gICAgcHVibGljIGRlY29kZSh2YWx1ZTogbnVtYmVyW10pOiBzdHJpbmcge1xyXG4gICAgICAgIGxldCBzOiBzdHJpbmcgPSAnJztcclxuICAgIFxyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdmFsdWUubGVuZ3RoOyArK2kpIHtcclxuICAgICAgICAgICAgbGV0IGNvZGUgPSB2YWx1ZVtpXTtcclxuXHJcbiAgICAgICAgICAgIGFzc2VydChjb2RlIGluIHRoaXMubnVtMmFhLCBgVW5rbm93biBjb2RlICcke2NvZGV9JyBmb3VuZCBpbiB2ZWN0b3IgJyR7dmFsdWV9J2ApO1xyXG5cclxuICAgICAgICAgICAgcyArPSB0aGlzLm51bTJhYVtjb2RlXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHM7XHJcbiAgICB9XHJcbn1cclxuIl19
|
|
1
|
+
import { assert } from './operations';
|
|
2
|
+
/**
|
|
3
|
+
* Class to categorial encode/decode aligned amino acid residues sequence.
|
|
4
|
+
*
|
|
5
|
+
* @export
|
|
6
|
+
* @class AlignedSequenceEncoder
|
|
7
|
+
*/
|
|
8
|
+
export class AlignedSequenceEncoder {
|
|
9
|
+
constructor() {
|
|
10
|
+
this.aa2num = {
|
|
11
|
+
'-': 0,
|
|
12
|
+
'A': 1,
|
|
13
|
+
'C': 2,
|
|
14
|
+
'D': 3,
|
|
15
|
+
'E': 4,
|
|
16
|
+
'F': 5,
|
|
17
|
+
'G': 6,
|
|
18
|
+
'H': 7,
|
|
19
|
+
'I': 8,
|
|
20
|
+
'K': 9,
|
|
21
|
+
'L': 10,
|
|
22
|
+
'M': 11,
|
|
23
|
+
'N': 12,
|
|
24
|
+
'P': 13,
|
|
25
|
+
'Q': 14,
|
|
26
|
+
'R': 15,
|
|
27
|
+
'S': 16,
|
|
28
|
+
'T': 17,
|
|
29
|
+
'V': 18,
|
|
30
|
+
'W': 19,
|
|
31
|
+
'Y': 20,
|
|
32
|
+
};
|
|
33
|
+
this.num2aa = {};
|
|
34
|
+
Object.entries(this.aa2num).forEach(([k, v]) => (this.num2aa[v] = k));
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Truncate NH2 and -COOH terminals of the given sequence.
|
|
38
|
+
*
|
|
39
|
+
* @static
|
|
40
|
+
* @param {string} seq The sequence provided.
|
|
41
|
+
* @return {string} Truncated sequence.
|
|
42
|
+
* @memberof AlignedSequenceEncoder
|
|
43
|
+
*/
|
|
44
|
+
static _truncateSequence(seq) {
|
|
45
|
+
let start = 0;
|
|
46
|
+
let end = seq.length;
|
|
47
|
+
const termina = ['NH2', 'COOH'];
|
|
48
|
+
if (seq.startsWith(termina[0])) {
|
|
49
|
+
const l = termina[0].length; // Cut only 'NH2' without following '-'.
|
|
50
|
+
assert(seq[l] == '-', `Wrong sequence format: ${termina[0]} without following '-' in '${seq}'.`);
|
|
51
|
+
start = l;
|
|
52
|
+
}
|
|
53
|
+
if (seq.endsWith(termina[1])) {
|
|
54
|
+
const l = termina[1].length + 1; // Cut both 'COOH' and precending '-'.
|
|
55
|
+
assert(seq[end - l] == '-', `Wrong sequence format: ${termina[1]} without '-' precending in '${seq}'.`);
|
|
56
|
+
end -= l;
|
|
57
|
+
}
|
|
58
|
+
return seq.substring(start, end);
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Cuts auxiliary defises before a residue.
|
|
62
|
+
*
|
|
63
|
+
* @static
|
|
64
|
+
* @param {string} seq The sequence to process.
|
|
65
|
+
* @return {string} Processed sequence.
|
|
66
|
+
* @memberof AlignedSequenceEncoder
|
|
67
|
+
*/
|
|
68
|
+
static _dropDefises(seq) {
|
|
69
|
+
return seq.replace(/(-)([^-]+)/g, '$2');
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Performs truncation and cutting auxiliary defises.
|
|
73
|
+
*
|
|
74
|
+
* @static
|
|
75
|
+
* @param {string} sequence The sequence work under process.
|
|
76
|
+
* @return {string} Result of cleaning.
|
|
77
|
+
* @memberof AlignedSequenceEncoder
|
|
78
|
+
*/
|
|
79
|
+
static clean(sequence) {
|
|
80
|
+
return AlignedSequenceEncoder._dropDefises(AlignedSequenceEncoder._truncateSequence(sequence));
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Categorial encode of the sequence provided.
|
|
84
|
+
*
|
|
85
|
+
* @param {string} sequence The sequence.
|
|
86
|
+
* @return {number[]} Encoded vector.
|
|
87
|
+
* @memberof AlignedSequenceEncoder
|
|
88
|
+
*/
|
|
89
|
+
encode(sequence) {
|
|
90
|
+
const nItems = sequence.length;
|
|
91
|
+
let values = new Array(nItems).fill(0);
|
|
92
|
+
for (let i = 0; i < nItems; ++i) {
|
|
93
|
+
let char = sequence[i];
|
|
94
|
+
assert(char in this.aa2num, `Unknown char '${char}' found in sequence '${sequence}'`);
|
|
95
|
+
values[i] = this.aa2num[char];
|
|
96
|
+
}
|
|
97
|
+
return values;
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Decode the encoded vector into the sequence back.
|
|
101
|
+
*
|
|
102
|
+
* @param {number[]} value The vector encoded.
|
|
103
|
+
* @return {string} Decoded sequence.
|
|
104
|
+
* @memberof AlignedSequenceEncoder
|
|
105
|
+
*/
|
|
106
|
+
decode(value) {
|
|
107
|
+
let s = '';
|
|
108
|
+
for (let i = 0; i < value.length; ++i) {
|
|
109
|
+
let code = value[i];
|
|
110
|
+
assert(code in this.num2aa, `Unknown code '${code}' found in vector '${value}'`);
|
|
111
|
+
s += this.num2aa[code];
|
|
112
|
+
}
|
|
113
|
+
return s;
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VxdWVuY2UtZW5jb2Rlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInNlcXVlbmNlLWVuY29kZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLGNBQWMsQ0FBQztBQUVwQzs7Ozs7R0FLRztBQUNILE1BQU0sT0FBTyxzQkFBc0I7SUFJL0I7UUFDSSxJQUFJLENBQUMsTUFBTSxHQUFHO1lBQ1YsR0FBRyxFQUFFLENBQUM7WUFDTixHQUFHLEVBQUUsQ0FBQztZQUNOLEdBQUcsRUFBRSxDQUFDO1lBQ04sR0FBRyxFQUFFLENBQUM7WUFDTixHQUFHLEVBQUUsQ0FBQztZQUNOLEdBQUcsRUFBRSxDQUFDO1lBQ04sR0FBRyxFQUFFLENBQUM7WUFDTixHQUFHLEVBQUUsQ0FBQztZQUNOLEdBQUcsRUFBRSxDQUFDO1lBQ04sR0FBRyxFQUFFLENBQUM7WUFDTixHQUFHLEVBQUUsRUFBRTtZQUNQLEdBQUcsRUFBRSxFQUFFO1lBQ1AsR0FBRyxFQUFFLEVBQUU7WUFDUCxHQUFHLEVBQUUsRUFBRTtZQUNQLEdBQUcsRUFBRSxFQUFFO1lBQ1AsR0FBRyxFQUFFLEVBQUU7WUFDUCxHQUFHLEVBQUUsRUFBRTtZQUNQLEdBQUcsRUFBRSxFQUFFO1lBQ1AsR0FBRyxFQUFFLEVBQUU7WUFDUCxHQUFHLEVBQUUsRUFBRTtZQUNQLEdBQUcsRUFBRSxFQUFFO1NBQ1YsQ0FBQztRQUNGLElBQUksQ0FBQyxNQUFNLEdBQUcsRUFBRSxDQUFDO1FBQ2pCLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMxRSxDQUFDO0lBRUQ7Ozs7Ozs7T0FPRztJQUNILE1BQU0sQ0FBQyxpQkFB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LENBQUMsQ0FBQztJQUNiLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7YXNzZXJ0fSBmcm9tICcuL29wZXJhdGlvbnMnO1xuXG4vKipcbiAqIENsYXNzIHRvIGNhdGVnb3JpYWwgZW5jb2RlL2RlY29kZSBhbGlnbmVkIGFtaW5vIGFjaWQgcmVzaWR1ZXMgc2VxdWVuY2UuXG4gKlxuICogQGV4cG9ydFxuICogQGNsYXNzIEFsaWduZWRTZXF1ZW5jZUVuY29kZXJcbiAqL1xuZXhwb3J0IGNsYXNzIEFsaWduZWRTZXF1ZW5jZUVuY29kZXIge1xuICAgIHByb3RlY3RlZCBhYTJudW06IHtbbmFtZTogc3RyaW5nXTogbnVtYmVyfTtcbiAgICBwcm90ZWN0ZWQgbnVtMmFhOiB7W2NvZGU6IG51bWJlcl06IHN0cmluZ307XG5cbiAgICBjb25zdHJ1Y3RvciAoKSB7XG4gICAgICAgIHRoaXMuYWEybnVtID0ge1xuICAgICAgICAgICAgJy0nOiAwLFxuICAgICAgICAgICAgJ0EnOiAxLFxuICAgICAgICAgICAgJ0MnOiAyLFxuICAgICAgICAgICAgJ0QnOiAzLFxuICAgICAgICAgICAgJ0UnOiA0LFxuICAgICAgICAgICAgJ0YnOiA1LFxuICAgICAgICAgICAgJ0cnOiA2LFxuICAgICAgICAgICAgJ0gnOiA3LFxuICAgICAgICAgICAgJ0knOiA4LFxuICAgICAgICAgICAgJ0snOiA5LFxuICAgICAgICAgICAgJ0wnOiAxMCxcbiAgICAgICAgICAgICdNJzogMTEsXG4gICAgICAgICAgICAnTic6IDEyLFxuICAgICAgICAgICAgJ1AnOiAxMyxcbiAgICAgICAgICAgICdRJzogMTQsXG4gICAgICAgICAgICAnUic6IDE1LFxuICAgICAgICAgICAgJ1MnOiAxNixcbiAgICAgICAgICAgICdUJzogMTcsXG4gICAgICAgICAgICAnVic6IDE4LFxuICAgICAgICAgICAgJ1cnOiAxOSxcbiAgICAgICAgICAgICdZJzogMjAsXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMubnVtMmFhID0ge307XG4gICAgICAgIE9iamVjdC5lbnRyaWVzKHRoaXMuYWEybnVtKS5mb3JFYWNoKChbaywgdl0pID0+ICh0aGlzLm51bTJhYVt2XSA9IGspKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUcnVuY2F0ZSBOSDIgYW5kIC1DT09IIHRlcm1pbmFscyBvZiB0aGUgZ2l2ZW4gc2VxdWVuY2UuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHNlcSBUaGUgc2VxdWVuY2UgcHJvdmlkZWQuXG4gICAgICogQHJldHVybiB7c3RyaW5nfSBUcnVuY2F0ZWQgc2VxdWVuY2UuXG4gICAgICogQG1lbWJlcm9mIEFsaWduZWRTZXF1ZW5jZUVuY29kZXJcbiAgICAgKi9cbiAgICBzdGF0aWMgX3RydW5jYXRlU2VxdWVuY2Uoc2VxOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICBsZXQgc3RhcnQgPSAwO1xuICAgICAgICBsZXQgZW5kID0gc2VxLmxlbmd0aDtcbiAgICAgICAgY29uc3QgdGVybWluYSA9IFsnTkgyJywgJ0NPT0gnXTtcbiAgICBcbiAgICAgICAgaWYgKHNlcS5zdGFydHNXaXRoKHRlcm1pbmFbMF0pKSB7XG4gICAgICAgICAgICBjb25zdCBsID0gdGVybWluYVswXS5sZW5ndGg7IC8vIEN1dCBvbmx5ICdOSDInIHdpdGhvdXQgZm9sbG93aW5nICctJy5cbiAgICAgICAgICAgIGFzc2VydChzZXFbbF0gPT0gJy0nLCBgV3Jvbmcgc2VxdWVuY2UgZm9ybWF0OiAke3Rlcm1pbmFbMF19IHdpdGhvdXQgZm9sbG93aW5nICctJyBpbiAnJHtzZXF9Jy5gKVxuICAgICAgICAgICAgc3RhcnQgPSBsO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzZXEuZW5kc1dpdGgodGVybWluYVsxXSkpIHtcbiAgICAgICAgICAgIGNvbnN0IGwgPSB0ZXJtaW5hWzFdLmxlbmd0aCsxOyAvLyBDdXQgYm90aCAnQ09PSCcgYW5kIHByZWNlbmRpbmcgJy0nLlxuICAgICAgICAgICAgYXNzZXJ0KHNlcVtlbmQtbF0gPT0gJy0nLCBgV3Jvbmcgc2VxdWVuY2UgZm9ybWF0OiAke3Rlcm1pbmFbMV19IHdpdGhvdXQgJy0nIHByZWNlbmRpbmcgaW4gJyR7c2VxfScuYClcbiAgICAgICAgICAgIGVuZCAtPSBsO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzZXEuc3Vic3RyaW5nKHN0YXJ0LCBlbmQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEN1dHMgYXV4aWxpYXJ5IGRlZmlzZXMgYmVmb3JlIGEgcmVzaWR1ZS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gc2VxIFRoZSBzZXF1ZW5jZSB0byBwcm9jZXNzLlxuICAgICAqIEByZXR1cm4ge3N0cmluZ30gUHJvY2Vzc2VkIHNlcXVlbmNlLlxuICAgICAqIEBtZW1iZXJvZiBBbGlnbmVkU2VxdWVuY2VFbmNvZGVyXG4gICAgICovXG4gICAgc3RhdGljIF9kcm9wRGVmaXNlcyhzZXE6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBzZXEucmVwbGFjZSgvKC0pKFteLV0rKS9nLCAnJDInKVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFBlcmZvcm1zIHRydW5jYXRpb24gYW5kIGN1dHRpbmcgYXV4aWxpYXJ5IGRlZmlzZXMuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHNlcXVlbmNlIFRoZSBzZXF1ZW5jZSB3b3JrIHVuZGVyIHByb2Nlc3MuXG4gICAgICogQHJldHVybiB7c3RyaW5nfSBSZXN1bHQgb2YgY2xlYW5pbmcuXG4gICAgICogQG1lbWJlcm9mIEFsaWduZWRTZXF1ZW5jZUVuY29kZXJcbiAgICAgKi9cbiAgICBzdGF0aWMgY2xlYW4oc2VxdWVuY2U6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBBbGlnbmVkU2VxdWVuY2VFbmNvZGVyLl9kcm9wRGVmaXNlcyhBbGlnbmVkU2VxdWVuY2VFbmNvZGVyLl90cnVuY2F0ZVNlcXVlbmNlKHNlcXVlbmNlKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2F0ZWdvcmlhbCBlbmNvZGUgb2YgdGhlIHNlcXVlbmNlIHByb3ZpZGVkLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHNlcXVlbmNlIFRoZSBzZXF1ZW5jZS5cbiAgICAgKiBAcmV0dXJuIHtudW1iZXJbXX0gRW5jb2RlZCB2ZWN0b3IuXG4gICAgICogQG1lbWJlcm9mIEFsaWduZWRTZXF1ZW5jZUVuY29kZXJcbiAgICAgKi9cbiAgICBwdWJsaWMgZW5jb2RlKHNlcXVlbmNlOiBzdHJpbmcpOiBudW1iZXJbXSB7XG4gICAgICAgIGNvbnN0IG5JdGVtcyA9IHNlcXVlbmNlLmxlbmd0aDtcbiAgICAgICAgbGV0IHZhbHVlcyA9IG5ldyBBcnJheShuSXRlbXMpLmZpbGwoMCk7XG4gICAgXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbkl0ZW1zOyArK2kpIHtcbiAgICAgICAgICAgIGxldCBjaGFyID0gc2VxdWVuY2VbaV07XG4gICAgXG4gICAgICAgICAgICBhc3NlcnQoY2hhciBpbiB0aGlzLmFhMm51bSwgYFVua25vd24gY2hhciAnJHtjaGFyfScgZm91bmQgaW4gc2VxdWVuY2UgJyR7c2VxdWVuY2V9J2ApO1xuICAgIFxuICAgICAgICAgICAgdmFsdWVzW2ldID0gdGhpcy5hYTJudW1bY2hhcl07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZhbHVlcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBEZWNvZGUgdGhlIGVuY29kZWQgdmVjdG9yIGludG8gdGhlIHNlcXVlbmNlIGJhY2suXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge251bWJlcltdfSB2YWx1ZSBUaGUgdmVjdG9yIGVuY29kZWQuXG4gICAgICogQHJldHVybiB7c3RyaW5nfSBEZWNvZGVkIHNlcXVlbmNlLlxuICAgICAqIEBtZW1iZXJvZiBBbGlnbmVkU2VxdWVuY2VFbmNvZGVyXG4gICAgICovXG4gICAgcHVibGljIGRlY29kZSh2YWx1ZTogbnVtYmVyW10pOiBzdHJpbmcge1xuICAgICAgICBsZXQgczogc3RyaW5nID0gJyc7XG4gICAgXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdmFsdWUubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgIGxldCBjb2RlID0gdmFsdWVbaV07XG5cbiAgICAgICAgICAgIGFzc2VydChjb2RlIGluIHRoaXMubnVtMmFhLCBgVW5rbm93biBjb2RlICcke2NvZGV9JyBmb3VuZCBpbiB2ZWN0b3IgJyR7dmFsdWV9J2ApO1xuXG4gICAgICAgICAgICBzICs9IHRoaXMubnVtMmFhW2NvZGVdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzO1xuICAgIH1cbn1cbiJdfQ==
|
package/src/spe.d.ts
ADDED
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import { Options, Coordinates, Vectors, DistanceMetric } from './type-declarations';
|
|
2
|
+
/**
|
|
3
|
+
* Implements stochastic proximity embedding.
|
|
4
|
+
*
|
|
5
|
+
* @export
|
|
6
|
+
* @class SPEBase
|
|
7
|
+
* @link doi:10.1016/S1093-3263(03)00155-4
|
|
8
|
+
*/
|
|
9
|
+
export declare class SPEBase {
|
|
10
|
+
protected static dimension: number;
|
|
11
|
+
protected steps: number;
|
|
12
|
+
protected cycles: number;
|
|
13
|
+
protected cutoff: number;
|
|
14
|
+
protected lambda: number;
|
|
15
|
+
protected dlambda: number;
|
|
16
|
+
protected lambda2: number;
|
|
17
|
+
protected dlambda2: number;
|
|
18
|
+
protected epsilon: number;
|
|
19
|
+
protected distanceFunction: DistanceMetric;
|
|
20
|
+
protected distance: Coordinates;
|
|
21
|
+
/**
|
|
22
|
+
* Creates an instance of SPEBase.
|
|
23
|
+
* @param {Options} [options] Options to pass to the constructor.
|
|
24
|
+
* @memberof SPEBase
|
|
25
|
+
*/
|
|
26
|
+
constructor(options?: Options);
|
|
27
|
+
/**
|
|
28
|
+
* Initializes distance matrix.
|
|
29
|
+
*
|
|
30
|
+
* @protected
|
|
31
|
+
* @param {Vectors} vectors Input vectors to calculate distance between.
|
|
32
|
+
* @memberof SPEBase
|
|
33
|
+
*/
|
|
34
|
+
protected initDistance(vectors: Vectors): void;
|
|
35
|
+
/**
|
|
36
|
+
* Calculates distance between the two vectors given.
|
|
37
|
+
*
|
|
38
|
+
* @param {Vectors} vectors Set of vectors to calculate distances between.
|
|
39
|
+
* @param {number} index1 Index of the first vector of the pair.
|
|
40
|
+
* @param {number} index2 Index of the second vector of the pair.
|
|
41
|
+
* @return {number} Distance between these two vectors.
|
|
42
|
+
*/
|
|
43
|
+
protected calcDistance(vectors: Vectors, index1: number, index2: number): number;
|
|
44
|
+
/**
|
|
45
|
+
* Embeds the vectors given into a two-dimensional space.
|
|
46
|
+
*
|
|
47
|
+
* @param {Vectors} vectors D-dimensional coordinates.
|
|
48
|
+
* @return {Coordinates} SPE coordinates in D space.
|
|
49
|
+
*/
|
|
50
|
+
embed(vectors: Vectors): Coordinates;
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Implements modified stochastic proximity embedding.
|
|
54
|
+
*
|
|
55
|
+
* @export
|
|
56
|
+
* @class PSPEBase
|
|
57
|
+
* @link doi:10.1016/S1093-3263(03)00155-4
|
|
58
|
+
*/
|
|
59
|
+
export declare class PSPEBase extends SPEBase {
|
|
60
|
+
/**
|
|
61
|
+
* Embeds the vectors given into a two-dimensional space using a modified update rule.
|
|
62
|
+
*
|
|
63
|
+
* @param {Vectors} vectors D-dimensional coordinates.
|
|
64
|
+
* @return {Coordinates} SPE coordinates in D space.
|
|
65
|
+
*/
|
|
66
|
+
embed(vectors: Vectors): Coordinates;
|
|
67
|
+
}
|
|
68
|
+
//# sourceMappingURL=spe.d.ts.map
|
package/src/spe.d.ts.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"spe.d.ts","sourceRoot":"","sources":["spe.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,cAAc,EAAC,MAAM,qBAAqB,CAAC;AAGlF;;;;;;GAMG;AACH,qBAAa,OAAO;IAClB,SAAS,CAAC,MAAM,CAAC,SAAS,SAAK;IAC/B,SAAS,CAAC,KAAK,EAAE,MAAM,CAAC;IACxB,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC;IACzB,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC;IACzB,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC;IACzB,SAAS,CAAC,OAAO,EAAE,MAAM,CAAC;IAC1B,SAAS,CAAC,OAAO,EAAE,MAAM,CAAC;IAC1B,SAAS,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC3B,SAAS,CAAC,OAAO,EAAE,MAAM,CAAC;IAC1B,SAAS,CAAC,gBAAgB,EAAE,cAAc,CAAC;IAC3C,SAAS,CAAC,QAAQ,EAAE,WAAW,CAAC;IAEhC;;;;OAIG;gBACS,OAAO,CAAC,EAAE,OAAO;IAgB7B;;;;;;OAMG;IACH,SAAS,CAAC,YAAY,CAAC,OAAO,EAAE,OAAO;IAIvC;;;;;;;OAOG;IACH,SAAS,CAAC,YAAY,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM;IAIhF;;;;;OAKG;IACI,KAAK,CAAC,OAAO,EAAE,OAAO,GAAG,WAAW;CA4C5C;AAED;;;;;;GAMG;AACF,qBAAa,QAAS,SAAQ,OAAO;IACpC;;;;;OAKG;IACI,KAAK,CAAC,OAAO,EAAE,OAAO,GAAG,WAAW;CAsC5C"}
|