@datagrok-libraries/utils 0.0.9 → 0.0.15
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 +25 -29
- package/src/bit-array.d.ts +81 -81
- package/src/bit-array.js +666 -666
- package/src/operations.d.ts +76 -65
- package/src/operations.d.ts.map +1 -1
- package/src/operations.js +168 -144
- package/src/string-utils.d.ts +1 -1
- package/src/string-utils.js +9 -9
- package/src/table-validation.d.ts +1 -1
- package/src/table-validation.js +47 -47
- package/src/test-utils.d.ts +10 -10
- package/src/test-utils.js +81 -81
- package/src/{type_declarations.d.ts → type-declarations.d.ts} +56 -56
- package/src/{type_declarations.d.ts.map → type-declarations.d.ts.map} +1 -1
- package/src/type-declarations.js +37 -0
- package/tsconfig.json +71 -71
- package/src/reduce-dimensionality.d.ts +0 -38
- package/src/reduce-dimensionality.d.ts.map +0 -1
- package/src/reduce-dimensionality.js +0 -233
- package/src/sequence-encoder.d.ts +0 -59
- package/src/sequence-encoder.d.ts.map +0 -1
- package/src/sequence-encoder.js +0 -117
- package/src/spe.d.ts +0 -68
- package/src/spe.d.ts.map +0 -1
- package/src/spe.js +0 -151
- package/src/string-measure.d.ts +0 -33
- package/src/string-measure.d.ts.map +0 -1
- package/src/string-measure.js +0 -46
- package/src/type_declarations.js +0 -37
package/src/operations.d.ts
CHANGED
|
@@ -1,66 +1,77 @@
|
|
|
1
|
-
import { Matrix, Vector, Vectors, DistanceMetric } from './
|
|
2
|
-
/**
|
|
3
|
-
* Asserts a condition by throwing an Error.
|
|
4
|
-
*
|
|
5
|
-
* @export
|
|
6
|
-
* @param {boolean} [condition=false] Condition to assert.
|
|
7
|
-
* @param {string} [message='Assertion error.'] Message to output.
|
|
8
|
-
* @throws {Error}
|
|
9
|
-
*/
|
|
10
|
-
export declare function assert(condition?: boolean, message?: string): void;
|
|
11
|
-
/**
|
|
12
|
-
* Generates single random integer from 0 to range.
|
|
13
|
-
*
|
|
14
|
-
* @export
|
|
15
|
-
* @param {number} range Max generating value.
|
|
16
|
-
* @return {number} A random integer generated.
|
|
17
|
-
*/
|
|
18
|
-
export declare function randomInt(range: number): number;
|
|
19
|
-
/**
|
|
20
|
-
* Transpose matrix.
|
|
21
|
-
*
|
|
22
|
-
* @export
|
|
23
|
-
* @param {Matrix} matrix The matrix to be transposed.
|
|
24
|
-
* @return {Matrix} Transposed matrix.
|
|
25
|
-
* @todo Might be slow since used Array.map. Probably needs performance revision.
|
|
26
|
-
*/
|
|
27
|
-
export declare function transposeMatrix(matrix: Matrix): Matrix;
|
|
28
|
-
/**
|
|
29
|
-
* Adds two vectors with the second one to be multiplied by the given ratio.
|
|
30
|
-
*
|
|
31
|
-
* @export
|
|
32
|
-
* @param {Vector} p The first vector to add.
|
|
33
|
-
* @param {Vector} q The second vector to add.
|
|
34
|
-
* @param {number} [multiplier=1] A multiplier to be used before the second vector is added.
|
|
35
|
-
* @return {Vector} New vector contained the result of operation p+multiplier*q.
|
|
36
|
-
*/
|
|
37
|
-
export declare function vectorAdd(p: Vector, q: Vector, multiplier?: number): Vector;
|
|
38
|
-
/**
|
|
39
|
-
* Creates a matrix filled with random floating point values.
|
|
40
|
-
*
|
|
41
|
-
* @export
|
|
42
|
-
* @param {number} dimension1 The first dimension of the matrix.
|
|
43
|
-
* @param {number} dimension2 The second dimension of the matrix.
|
|
44
|
-
* @param {number} [scale=1.] Max value given by random generator.
|
|
45
|
-
* @return {Matrix} A new matrix filled with random floating point values.
|
|
46
|
-
*/
|
|
47
|
-
export declare function fillRandomMatrix(dimension1: number, dimension2: number, scale?: number): Matrix;
|
|
48
|
-
/**
|
|
49
|
-
* Calculates Euclidean distance between two vectors.
|
|
50
|
-
*
|
|
51
|
-
* @export
|
|
52
|
-
* @param {Vector} p The first vector.
|
|
53
|
-
* @param {Vector} q The second vector.
|
|
54
|
-
* @return {number} Euclidean distance between the given vectors.
|
|
55
|
-
*/
|
|
56
|
-
export declare function calculateEuclideanDistance(p: Vector, q: Vector): number;
|
|
57
|
-
/**
|
|
58
|
-
* Creates a distance matrix using a custom distance function.
|
|
59
|
-
*
|
|
60
|
-
* @export
|
|
61
|
-
* @param {Vectors} data Input vectors to calculate distances.
|
|
62
|
-
* @param {DistanceMetric} distance Custom distance function.
|
|
63
|
-
* @return {Matrix} Calculated custom distance matrix.
|
|
64
|
-
*/
|
|
65
|
-
export declare function calcDistanceMatrix(data: Vectors, distance: DistanceMetric): Matrix;
|
|
1
|
+
import { Matrix, Vector, Vectors, DistanceMetric } from './type-declarations';
|
|
2
|
+
/**
|
|
3
|
+
* Asserts a condition by throwing an Error.
|
|
4
|
+
*
|
|
5
|
+
* @export
|
|
6
|
+
* @param {boolean} [condition=false] Condition to assert.
|
|
7
|
+
* @param {string} [message='Assertion error.'] Message to output.
|
|
8
|
+
* @throws {Error}
|
|
9
|
+
*/
|
|
10
|
+
export declare function assert(condition?: boolean, message?: string): void;
|
|
11
|
+
/**
|
|
12
|
+
* Generates single random integer from 0 to range.
|
|
13
|
+
*
|
|
14
|
+
* @export
|
|
15
|
+
* @param {number} range Max generating value.
|
|
16
|
+
* @return {number} A random integer generated.
|
|
17
|
+
*/
|
|
18
|
+
export declare function randomInt(range: number): number;
|
|
19
|
+
/**
|
|
20
|
+
* Transpose matrix.
|
|
21
|
+
*
|
|
22
|
+
* @export
|
|
23
|
+
* @param {Matrix} matrix The matrix to be transposed.
|
|
24
|
+
* @return {Matrix} Transposed matrix.
|
|
25
|
+
* @todo Might be slow since used Array.map. Probably needs performance revision.
|
|
26
|
+
*/
|
|
27
|
+
export declare function transposeMatrix(matrix: Matrix): Matrix;
|
|
28
|
+
/**
|
|
29
|
+
* Adds two vectors with the second one to be multiplied by the given ratio.
|
|
30
|
+
*
|
|
31
|
+
* @export
|
|
32
|
+
* @param {Vector} p The first vector to add.
|
|
33
|
+
* @param {Vector} q The second vector to add.
|
|
34
|
+
* @param {number} [multiplier=1] A multiplier to be used before the second vector is added.
|
|
35
|
+
* @return {Vector} New vector contained the result of operation p+multiplier*q.
|
|
36
|
+
*/
|
|
37
|
+
export declare function vectorAdd(p: Vector, q: Vector, multiplier?: number): Vector;
|
|
38
|
+
/**
|
|
39
|
+
* Creates a matrix filled with random floating point values.
|
|
40
|
+
*
|
|
41
|
+
* @export
|
|
42
|
+
* @param {number} dimension1 The first dimension of the matrix.
|
|
43
|
+
* @param {number} dimension2 The second dimension of the matrix.
|
|
44
|
+
* @param {number} [scale=1.] Max value given by random generator.
|
|
45
|
+
* @return {Matrix} A new matrix filled with random floating point values.
|
|
46
|
+
*/
|
|
47
|
+
export declare function fillRandomMatrix(dimension1: number, dimension2: number, scale?: number): Matrix;
|
|
48
|
+
/**
|
|
49
|
+
* Calculates Euclidean distance between two vectors.
|
|
50
|
+
*
|
|
51
|
+
* @export
|
|
52
|
+
* @param {Vector} p The first vector.
|
|
53
|
+
* @param {Vector} q The second vector.
|
|
54
|
+
* @return {number} Euclidean distance between the given vectors.
|
|
55
|
+
*/
|
|
56
|
+
export declare function calculateEuclideanDistance(p: Vector, q: Vector): number;
|
|
57
|
+
/**
|
|
58
|
+
* Creates a distance matrix using a custom distance function.
|
|
59
|
+
*
|
|
60
|
+
* @export
|
|
61
|
+
* @param {Vectors} data Input vectors to calculate distances.
|
|
62
|
+
* @param {DistanceMetric} distance Custom distance function.
|
|
63
|
+
* @return {Matrix} Calculated custom distance matrix.
|
|
64
|
+
*/
|
|
65
|
+
export declare function calcDistanceMatrix(data: Vectors, distance: DistanceMetric): Matrix;
|
|
66
|
+
/** Generates array from a range [begin; end]. */
|
|
67
|
+
export declare function genRange(begin: number, end: number): Int32Array;
|
|
68
|
+
/**
|
|
69
|
+
* Returns order of values as if they are sorted.
|
|
70
|
+
*
|
|
71
|
+
* @export
|
|
72
|
+
* @param {any[]} values Input array.
|
|
73
|
+
* @param {boolean} [reverse=false] Whether to return reversed order.
|
|
74
|
+
* @return {number[]} The order computed.
|
|
75
|
+
*/
|
|
76
|
+
export declare function argSort(values: any[], reverse?: boolean): number[];
|
|
66
77
|
//# sourceMappingURL=operations.d.ts.map
|
package/src/operations.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"operations.d.ts","sourceRoot":"","sources":["operations.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,MAAM,EAAE,MAAM,EAAe,OAAO,EAAE,cAAc,EAAC,MAAM,qBAAqB,CAAC;AAEzF;;;;;;;GAOG;AACH,wBAAgB,MAAM,CAAC,SAAS,GAAE,OAAe,EAAE,OAAO,GAAE,MAA2B,QAItF;AAED;;;;;;GAMG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAE/C;AAeD;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAEtD;AAED;;;;;;;;GAQG;AACH,wBAAgB,SAAS,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,UAAU,GAAE,MAAU,GAAG,MAAM,CAW9E;AAiCD;;;;;;;;GAQG;AACH,wBAAgB,gBAAgB,CAAC,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,KAAK,GAAE,MAAW,GAAG,MAAM,CASnG;AAED;;;;;;;GAOG;AACH,wBAAgB,0BAA0B,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAKvE;AAED;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,cAAc,GAAG,MAAM,CAWlF"}
|
|
1
|
+
{"version":3,"file":"operations.d.ts","sourceRoot":"","sources":["operations.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,MAAM,EAAE,MAAM,EAAe,OAAO,EAAE,cAAc,EAAC,MAAM,qBAAqB,CAAC;AAEzF;;;;;;;GAOG;AACH,wBAAgB,MAAM,CAAC,SAAS,GAAE,OAAe,EAAE,OAAO,GAAE,MAA2B,QAItF;AAED;;;;;;GAMG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAE/C;AAeD;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAEtD;AAED;;;;;;;;GAQG;AACH,wBAAgB,SAAS,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,UAAU,GAAE,MAAU,GAAG,MAAM,CAW9E;AAiCD;;;;;;;;GAQG;AACH,wBAAgB,gBAAgB,CAAC,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,KAAK,GAAE,MAAW,GAAG,MAAM,CASnG;AAED;;;;;;;GAOG;AACH,wBAAgB,0BAA0B,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAKvE;AAED;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,cAAc,GAAG,MAAM,CAWlF;AAED,iDAAiD;AACjD,wBAAgB,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,UAAU,CAQ/D;AAED;;;;;;;GAOG;AACH,wBAAgB,OAAO,CAAC,MAAM,EAAE,GAAG,EAAE,EAAE,OAAO,UAAQ,GAAG,MAAM,EAAE,CAMhE"}
|
package/src/operations.js
CHANGED
|
@@ -1,144 +1,168 @@
|
|
|
1
|
-
import { Vector } from './
|
|
2
|
-
/**
|
|
3
|
-
* Asserts a condition by throwing an Error.
|
|
4
|
-
*
|
|
5
|
-
* @export
|
|
6
|
-
* @param {boolean} [condition=false] Condition to assert.
|
|
7
|
-
* @param {string} [message='Assertion error.'] Message to output.
|
|
8
|
-
* @throws {Error}
|
|
9
|
-
*/
|
|
10
|
-
export function assert(condition = false, message = 'Assertion error.') {
|
|
11
|
-
if (!condition) {
|
|
12
|
-
throw new Error(message);
|
|
13
|
-
}
|
|
14
|
-
}
|
|
15
|
-
/**
|
|
16
|
-
* Generates single random integer from 0 to range.
|
|
17
|
-
*
|
|
18
|
-
* @export
|
|
19
|
-
* @param {number} range Max generating value.
|
|
20
|
-
* @return {number} A random integer generated.
|
|
21
|
-
*/
|
|
22
|
-
export function randomInt(range) {
|
|
23
|
-
return Math.floor(Math.random() * range);
|
|
24
|
-
}
|
|
25
|
-
/**
|
|
26
|
-
* Creates new two-dimensional array and fills it with the value given.
|
|
27
|
-
*
|
|
28
|
-
* @param {number} dimension1 The first dimension of the coordinates (number of rows).
|
|
29
|
-
* @param {number} dimension2 The second dimension of the coordinates (number of columns).
|
|
30
|
-
* @param {number} [fill=0] A value to fill the coordinates with.
|
|
31
|
-
* @return {Coordinates} A two-dimensional filled with the value given.
|
|
32
|
-
* @todo Might be slow since used Array.map. Probably needs performance revision.
|
|
33
|
-
*/
|
|
34
|
-
function initCoordinates(dimension1, dimension2, fill = 0) {
|
|
35
|
-
return new Array(dimension1).fill(fill).map(() => (new Vector(dimension2).fill(fill)));
|
|
36
|
-
}
|
|
37
|
-
/**
|
|
38
|
-
* Transpose matrix.
|
|
39
|
-
*
|
|
40
|
-
* @export
|
|
41
|
-
* @param {Matrix} matrix The matrix to be transposed.
|
|
42
|
-
* @return {Matrix} Transposed matrix.
|
|
43
|
-
* @todo Might be slow since used Array.map. Probably needs performance revision.
|
|
44
|
-
*/
|
|
45
|
-
export function transposeMatrix(matrix) {
|
|
46
|
-
return new Array(matrix[0].length).fill(0).map((_, i) => (new Vector(matrix.length).fill(0).map((_, j) => (matrix[j][i]))));
|
|
47
|
-
}
|
|
48
|
-
/**
|
|
49
|
-
* Adds two vectors with the second one to be multiplied by the given ratio.
|
|
50
|
-
*
|
|
51
|
-
* @export
|
|
52
|
-
* @param {Vector} p The first vector to add.
|
|
53
|
-
* @param {Vector} q The second vector to add.
|
|
54
|
-
* @param {number} [multiplier=1] A multiplier to be used before the second vector is added.
|
|
55
|
-
* @return {Vector} New vector contained the result of operation p+multiplier*q.
|
|
56
|
-
*/
|
|
57
|
-
export function vectorAdd(p, q, multiplier = 1) {
|
|
58
|
-
const nItems = p.length;
|
|
59
|
-
assert(nItems == q.length, 'Vector lengths do not match.');
|
|
60
|
-
let total = new Vector(nItems);
|
|
61
|
-
for (let i = 0; i < p.length; ++i) {
|
|
62
|
-
total[i] = p[i] + multiplier * q[i];
|
|
63
|
-
}
|
|
64
|
-
return total;
|
|
65
|
-
}
|
|
66
|
-
/**
|
|
67
|
-
* Sums the vector's items.
|
|
68
|
-
*
|
|
69
|
-
* @param {Vector} v The vector to be summed.
|
|
70
|
-
* @return {number} The vector's items sum.
|
|
71
|
-
*/
|
|
72
|
-
function itemsSum(v) {
|
|
73
|
-
let total = 0;
|
|
74
|
-
for (let i = 0; i < v.length; ++i) {
|
|
75
|
-
total += v[i];
|
|
76
|
-
}
|
|
77
|
-
return total;
|
|
78
|
-
}
|
|
79
|
-
/**
|
|
80
|
-
* Suqares the vector's items.
|
|
81
|
-
*
|
|
82
|
-
* @param {Vector} v The vector to square.
|
|
83
|
-
* @return {Vector} A new vector containing the original's items squared.
|
|
84
|
-
*/
|
|
85
|
-
function vectorSquare(v) {
|
|
86
|
-
const nItems = v.length;
|
|
87
|
-
let total = new Vector(nItems);
|
|
88
|
-
for (let i = 0; i < v.length; ++i) {
|
|
89
|
-
total[i] = v[i] * v[i];
|
|
90
|
-
}
|
|
91
|
-
return total;
|
|
92
|
-
}
|
|
93
|
-
/**
|
|
94
|
-
* Creates a matrix filled with random floating point values.
|
|
95
|
-
*
|
|
96
|
-
* @export
|
|
97
|
-
* @param {number} dimension1 The first dimension of the matrix.
|
|
98
|
-
* @param {number} dimension2 The second dimension of the matrix.
|
|
99
|
-
* @param {number} [scale=1.] Max value given by random generator.
|
|
100
|
-
* @return {Matrix} A new matrix filled with random floating point values.
|
|
101
|
-
*/
|
|
102
|
-
export function fillRandomMatrix(dimension1, dimension2, scale = 1.) {
|
|
103
|
-
let matrix = initCoordinates(dimension1, dimension2);
|
|
104
|
-
for (let i = 0; i < dimension1; ++i) {
|
|
105
|
-
for (let j = 0; j < dimension2; ++j) {
|
|
106
|
-
matrix[i][j] = Math.random() * scale;
|
|
107
|
-
}
|
|
108
|
-
}
|
|
109
|
-
return matrix;
|
|
110
|
-
}
|
|
111
|
-
/**
|
|
112
|
-
* Calculates Euclidean distance between two vectors.
|
|
113
|
-
*
|
|
114
|
-
* @export
|
|
115
|
-
* @param {Vector} p The first vector.
|
|
116
|
-
* @param {Vector} q The second vector.
|
|
117
|
-
* @return {number} Euclidean distance between the given vectors.
|
|
118
|
-
*/
|
|
119
|
-
export function calculateEuclideanDistance(p, q) {
|
|
120
|
-
const diff = vectorAdd(p, q, -1);
|
|
121
|
-
const sqdiff = vectorSquare(diff);
|
|
122
|
-
const sqdiffSumm = itemsSum(sqdiff);
|
|
123
|
-
return Math.sqrt(sqdiffSumm);
|
|
124
|
-
}
|
|
125
|
-
/**
|
|
126
|
-
* Creates a distance matrix using a custom distance function.
|
|
127
|
-
*
|
|
128
|
-
* @export
|
|
129
|
-
* @param {Vectors} data Input vectors to calculate distances.
|
|
130
|
-
* @param {DistanceMetric} distance Custom distance function.
|
|
131
|
-
* @return {Matrix} Calculated custom distance matrix.
|
|
132
|
-
*/
|
|
133
|
-
export function calcDistanceMatrix(data, distance) {
|
|
134
|
-
const nItems = data.length;
|
|
135
|
-
let matrix = initCoordinates(nItems, nItems, 0);
|
|
136
|
-
for (let i = 0; i < nItems; ++i) {
|
|
137
|
-
for (let j = i + 1; j < nItems; ++j) {
|
|
138
|
-
const d = (data[i] == null) || (data[j] == null) ? 0 : distance(data[i], data[j]);
|
|
139
|
-
matrix[i][j] = matrix[j][i] = d;
|
|
140
|
-
}
|
|
141
|
-
}
|
|
142
|
-
return matrix;
|
|
143
|
-
}
|
|
144
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3BlcmF0aW9ucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIm9wZXJhdGlvbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFTLE1BQU0sRUFBdUMsTUFBTSxxQkFBcUIsQ0FBQztBQUV6Rjs7Ozs7OztHQU9HO0FBQ0gsTUFBTSxVQUFVLE1BQU0sQ0FBQyxZQUFxQixLQUFLLEVBQUUsVUFBa0Isa0JBQWtCO0lBQ3JGLElBQUksQ0FBQyxTQUFTLEVBQUU7UUFDZCxNQUFNLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0tBQzFCO0FBQ0gsQ0FBQztBQUVEOzs7Ozs7R0FNRztBQUNILE1BQU0sVUFBVSxTQUFTLENBQUMsS0FBYTtJQUNyQyxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLEtBQUssQ0FBQyxDQUFDO0FBQzNDLENBQUM7QUFFRDs7Ozs7Ozs7R0FRRztBQUNILFNBQVMsZUFBZSxDQUFDLFVBQWtCLEVBQUUsVUFBa0IsRUFBRSxPQUFlLENBQUM7SUFDL0UsT0FBTyxJQUFJLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsSUFBSSxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN6RixDQUFDO0FBRUQ7Ozs7Ozs7R0FPRztBQUNILE1BQU0sVUFBVSxlQUFlLENBQUMsTUFBYztJQUM1QyxPQUFPLElBQUksS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxD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QixDQUFDO0FBRUQ7Ozs7Ozs7R0FPRztBQUNILE1BQU0sVUFBVSxrQkFBa0IsQ0FBQyxJQUFhLEVBQUUsUUFBd0I7SUFDeEUsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztJQUMzQixJQUFJLE1BQU0sR0FBRyxlQUFlLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQztJQUVoRCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxFQUFFLEVBQUUsQ0FBQyxFQUFFO1FBQy9CLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxFQUFFLEVBQUUsQ0FBQyxFQUFFO1lBQ2pDLE1BQU0sQ0FBQyxHQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDMUYsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDakM7S0FDRjtJQUNELE9BQU8sTUFBTSxDQUFDO0FBQ2hCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge01hdHJpeCwgVmVjdG9yLCBDb29yZGluYXRlcywgVmVjdG9ycywgRGlzdGFuY2VNZXRyaWN9IGZyb20gJy4vdHlwZV9kZWNsYXJhdGlvbnMnO1xyXG5cclxuLyoqXHJcbiAqIEFzc2VydHMgYSBjb25kaXRpb24gYnkgdGhyb3dpbmcgYW4gRXJyb3IuXHJcbiAqXHJcbiAqIEBleHBvcnRcclxuICogQHBhcmFtIHtib29sZWFufSBbY29uZGl0aW9uPWZhbHNlXSBDb25kaXRpb24gdG8gYXNzZXJ0LlxyXG4gKiBAcGFyYW0ge3N0cmluZ30gW21lc3NhZ2U9J0Fzc2VydGlvbiBlcnJvci4nXSBNZXNzYWdlIHRvIG91dHB1dC5cclxuICogQHRocm93cyB7RXJyb3J9XHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gYXNzZXJ0KGNvbmRpdGlvbjogYm9vbGVhbiA9IGZhbHNlLCBtZXNzYWdlOiBzdHJpbmcgPSAnQXNzZXJ0aW9uIGVycm9yLicpIHtcclxuICBpZiAoIWNvbmRpdGlvbikge1xyXG4gICAgdGhyb3cgbmV3IEVycm9yKG1lc3NhZ2UpO1xyXG4gIH1cclxufVxyXG5cclxuLyoqXHJcbiAqIEdlbmVyYXRlcyBzaW5nbGUgcmFuZG9tIGludGVnZXIgZnJvbSAwIHRvIHJhbmdlLlxyXG4gKlxyXG4gKiBAZXhwb3J0XHJcbiAqIEBwYXJhbSB7bnVtYmVyfSByYW5nZSBNYXggZ2VuZXJhdGluZyB2YWx1ZS5cclxuICogQHJldHVybiB7bnVtYmVyfSBBIHJhbmRvbSBpbnRlZ2VyIGdlbmVyYXRlZC5cclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiByYW5kb21JbnQocmFuZ2U6IG51bWJlcik6IG51bWJlciB7XHJcbiAgcmV0dXJuIE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIHJhbmdlKTtcclxufVxyXG5cclxuLyoqXHJcbiAqIENyZWF0ZXMgbmV3IHR3by1kaW1lbnNpb25hbCBhcnJheSBhbmQgZmlsbHMgaXQgd2l0aCB0aGUgdmFsdWUgZ2l2ZW4uXHJcbiAqXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBkaW1lbnNpb24xIFRoZSBmaXJzdCBkaW1lbnNpb24gb2YgdGhlIGNvb3JkaW5hdGVzIChudW1iZXIgb2Ygcm93cykuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBkaW1lbnNpb24yIFRoZSBzZWNvbmQgZGltZW5zaW9uIG9mIHRoZSBjb29yZGluYXRlcyAobnVtYmVyIG9mIGNvbHVtbnMpLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gW2ZpbGw9MF0gQSB2YWx1ZSB0byBmaWxsIHRoZSBjb29yZGluYXRlcyB3aXRoLlxyXG4gKiBAcmV0dXJuIHtDb29yZGluYXRlc30gQSB0d28tZGltZW5zaW9uYWwgZmlsbGVkIHdpdGggdGhlIHZhbHVlIGdpdmVuLlxyXG4gKiBAdG9kbyBNaWdodCBiZSBzbG93IHNpbmNlIHVzZWQgQXJyYXkubWFwLiBQcm9iYWJseSBuZWVkcyBwZXJmb3JtYW5jZSByZXZpc2lvbi5cclxuICovXHJcbmZ1bmN0aW9uIGluaXRDb29yZGluYXRlcyhkaW1lbnNpb24xOiBudW1iZXIsIGRpbWVuc2lvbjI6IG51bWJlciwgZmlsbDogbnVtYmVyID0gMCk6IENvb3JkaW5hdGVzIHtcclxuICByZXR1cm4gbmV3IEFycmF5KGRpbWVuc2lvbjEpLmZpbGwoZmlsbCkubWFwKCgpID0+IChuZXcgVmVjdG9yKGRpbWVuc2lvbjIpLmZpbGwoZmlsbCkpKTtcclxufVxyXG5cclxuLyoqXHJcbiAqIFRyYW5zcG9zZSBtYXRyaXguXHJcbiAqXHJcbiAqIEBleHBvcnRcclxuICogQHBhcmFtIHtNYXRyaXh9IG1hdHJpeCBUaGUgbWF0cml4IHRvIGJlIHRyYW5zcG9zZWQuXHJcbiAqIEByZXR1cm4ge01hdHJpeH0gVHJhbnNwb3NlZCBtYXRyaXguXHJcbiAqIEB0b2RvIE1pZ2h0IGJlIHNsb3cgc2luY2UgdXNlZCBBcnJheS5tYXAuIFByb2JhYmx5IG5lZWRzIHBlcmZvcm1hbmNlIHJldmlzaW9uLlxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIHRyYW5zcG9zZU1hdHJpeChtYXRyaXg6IE1hdHJpeCk6IE1hdHJpeCB7XHJcbiAgcmV0dXJuIG5ldyBBcnJheShtYXRyaXhbMF0ubGVuZ3RoKS5maWxsKDApLm1hcCgoXywgaSkgPT4gKG5ldyBWZWN0b3IobWF0cml4Lmxlbmd0aCkuZmlsbCgwKS5tYXAoKF8sIGopID0+IChtYXRyaXhbal1baV0pKSkpO1xyXG59XHJcblxyXG4vKipcclxuICogQWRkcyB0d28gdmVjdG9ycyB3aXRoIHRoZSBzZWNvbmQgb25lIHRvIGJlIG11bHRpcGxpZWQgYnkgdGhlIGdpdmVuIHJhdGlvLlxyXG4gKlxyXG4gKiBAZXhwb3J0XHJcbiAqIEBwYXJhbSB7VmVjdG9yfSBwIFRoZSBmaXJzdCB2ZWN0b3IgdG8gYWRkLlxyXG4gKiBAcGFyYW0ge1ZlY3Rvcn0gcSBUaGUgc2Vjb25kIHZlY3RvciB0byBhZGQuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbbXVsdGlwbGllcj0xXSBBIG11bHRpcGxpZXIgdG8gYmUgdXNlZCBiZWZvcmUgdGhlIHNlY29uZCB2ZWN0b3IgaXMgYWRkZWQuXHJcbiAqIEByZXR1cm4ge1ZlY3Rvcn0gTmV3IHZlY3RvciBjb250YWluZWQgdGhlIHJlc3VsdCBvZiBvcGVyYXRpb24gcCttdWx0aXBsaWVyKnEuXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gdmVjdG9yQWRkKHA6IFZlY3RvciwgcTogVmVjdG9yLCBtdWx0aXBsaWVyOiBudW1iZXIgPSAxKTogVmVjdG9yIHtcclxuICBjb25zdCBuSXRlbXMgPSBwLmxlbmd0aDtcclxuXHJcbiAgYXNzZXJ0KG5JdGVtcyA9PSBxLmxlbmd0aCwgJ1ZlY3RvciBsZW5ndGhzIGRvIG5vdCBtYXRjaC4nKVxyXG5cclxuICBsZXQgdG90YWwgPSBuZXcgVmVjdG9yKG5JdGVtcyk7XHJcblxyXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgcC5sZW5ndGg7ICsraSkge1xyXG4gICAgdG90YWxbaV0gPSBwW2ldK211bHRpcGxpZXIqcVtpXTtcclxuICB9XHJcbiAgcmV0dXJuIHRvdGFsO1xyXG59XHJcblxyXG4vKipcclxuICogU3VtcyB0aGUgdmVjdG9yJ3MgaXRlbXMuXHJcbiAqXHJcbiAqIEBwYXJhbSB7VmVjdG9yfSB2IFRoZSB2ZWN0b3IgdG8gYmUgc3VtbWVkLlxyXG4gKiBAcmV0dXJuIHtudW1iZXJ9IFRoZSB2ZWN0b3IncyBpdGVtcyBzdW0uXHJcbiAqL1xyXG5mdW5jdGlvbiBpdGVtc1N1bSh2OiBWZWN0b3IpOiBudW1iZXIge1xyXG4gIGxldCB0b3RhbCA9IDA7XHJcblxyXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgdi5sZW5ndGg7ICsraSkge1xyXG4gICAgdG90YWwgKz0gdltpXTtcclxuICB9XHJcbiAgcmV0dXJuIHRvdGFsO1xyXG59XHJcblxyXG4vKipcclxuICogU3VxYXJlcyB0aGUgdmVjdG9yJ3MgaXRlbXMuXHJcbiAqXHJcbiAqIEBwYXJhbSB7VmVjdG9yfSB2IFRoZSB2ZWN0b3IgdG8gc3F1YXJlLlxyXG4gKiBAcmV0dXJuIHtWZWN0b3J9IEEgbmV3IHZlY3RvciBjb250YWluaW5nIHRoZSBvcmlnaW5hbCdzIGl0ZW1zIHNxdWFyZWQuXHJcbiAqL1xyXG5mdW5jdGlvbiB2ZWN0b3JTcXVhcmUodjogVmVjdG9yKTogVmVjdG9yIHtcclxuICBjb25zdCBuSXRlbXMgPSB2Lmxlbmd0aDtcclxuICBsZXQgdG90YWwgPSBuZXcgVmVjdG9yKG5JdGVtcyk7XHJcblxyXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgdi5sZW5ndGg7ICsraSkge1xyXG4gICAgdG90YWxbaV0gPSB2W2ldKnZbaV07XHJcbiAgfVxyXG4gIHJldHVybiB0b3RhbDtcclxufVxyXG5cclxuLyoqXHJcbiAqIENyZWF0ZXMgYSBtYXRyaXggZmlsbGVkIHdpdGggcmFuZG9tIGZsb2F0aW5nIHBvaW50IHZhbHVlcy5cclxuICpcclxuICogQGV4cG9ydFxyXG4gKiBAcGFyYW0ge251bWJlcn0gZGltZW5zaW9uMSBUaGUgZmlyc3QgZGltZW5zaW9uIG9mIHRoZSBtYXRyaXguXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBkaW1lbnNpb24yIFRoZSBzZWNvbmQgZGltZW5zaW9uIG9mIHRoZSBtYXRyaXguXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbc2NhbGU9MS5dIE1heCB2YWx1ZSBnaXZlbiBieSByYW5kb20gZ2VuZXJhdG9yLlxyXG4gKiBAcmV0dXJuIHtNYXRyaXh9IEEgbmV3IG1hdHJpeCBmaWxsZWQgd2l0aCByYW5kb20gZmxvYXRpbmcgcG9pbnQgIHZhbHVlcy5cclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBmaWxsUmFuZG9tTWF0cml4KGRpbWVuc2lvbjE6IG51bWJlciwgZGltZW5zaW9uMjogbnVtYmVyLCBzY2FsZTogbnVtYmVyID0gMS4pOiBNYXRyaXgge1xyXG4gIGxldCBtYXRyaXggPSBpbml0Q29vcmRpbmF0ZXMoZGltZW5zaW9uMSwgZGltZW5zaW9uMik7XHJcblxyXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgZGltZW5zaW9uMTsgKytpKSB7XHJcbiAgICBmb3IgKGxldCBqID0gMDsgaiA8IGRpbWVuc2lvbjI7ICsraikge1xyXG4gICAgICBtYXRyaXhbaV1bal0gPSBNYXRoLnJhbmRvbSgpICogc2NhbGU7XHJcbiAgICB9XHJcbiAgfVxyXG4gIHJldHVybiBtYXRyaXg7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBDYWxjdWxhdGVzIEV1Y2xpZGVhbiBkaXN0YW5jZSBiZXR3ZWVuIHR3byB2ZWN0b3JzLlxyXG4gKlxyXG4gKiBAZXhwb3J0XHJcbiAqIEBwYXJhbSB7VmVjdG9yfSBwIFRoZSBmaXJzdCB2ZWN0b3IuXHJcbiAqIEBwYXJhbSB7VmVjdG9yfSBxIFRoZSBzZWNvbmQgdmVjdG9yLlxyXG4gKiBAcmV0dXJuIHtudW1iZXJ9IEV1Y2xpZGVhbiBkaXN0YW5jZSBiZXR3ZWVuIHRoZSBnaXZlbiB2ZWN0b3JzLlxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGNhbGN1bGF0ZUV1Y2xpZGVhbkRpc3RhbmNlKHA6IFZlY3RvciwgcTogVmVjdG9yKTogbnVtYmVyIHtcclxuICBjb25zdCBkaWZmID0gdmVjdG9yQWRkKHAsIHEsIC0xKTtcclxuICBjb25zdCBzcWRpZmYgPSB2ZWN0b3JTcXVhcmUoZGlmZik7XHJcbiAgY29uc3Qgc3FkaWZmU3VtbSA9IGl0ZW1zU3VtKHNxZGlmZik7XHJcbiAgcmV0dXJuIE1hdGguc3FydChzcWRpZmZTdW1tKTtcclxufVxyXG5cclxuLyoqXHJcbiAqIENyZWF0ZXMgYSBkaXN0YW5jZSBtYXRyaXggdXNpbmcgYSBjdXN0b20gZGlzdGFuY2UgZnVuY3Rpb24uXHJcbiAqXHJcbiAqIEBleHBvcnRcclxuICogQHBhcmFtIHtWZWN0b3JzfSBkYXRhIElucHV0IHZlY3RvcnMgdG8gY2FsY3VsYXRlIGRpc3RhbmNlcy5cclxuICogQHBhcmFtIHtEaXN0YW5jZU1ldHJpY30gZGlzdGFuY2UgQ3VzdG9tIGRpc3RhbmNlIGZ1bmN0aW9uLlxyXG4gKiBAcmV0dXJuIHtNYXRyaXh9IENhbGN1bGF0ZWQgY3VzdG9tIGRpc3RhbmNlIG1hdHJpeC5cclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBjYWxjRGlzdGFuY2VNYXRyaXgoZGF0YTogVmVjdG9ycywgZGlzdGFuY2U6IERpc3RhbmNlTWV0cmljKTogTWF0cml4IHtcclxuICBjb25zdCBuSXRlbXMgPSBkYXRhLmxlbmd0aDtcclxuICBsZXQgbWF0cml4ID0gaW5pdENvb3JkaW5hdGVzKG5JdGVtcywgbkl0ZW1zLCAwKTtcclxuXHJcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBuSXRlbXM7ICsraSkge1xyXG4gICAgZm9yIChsZXQgaiA9IGkrMTsgaiA8IG5JdGVtczsgKytqKSB7XHJcbiAgICAgIGNvbnN0IGQ6IG51bWJlciA9IChkYXRhW2ldID09IG51bGwpIHx8IChkYXRhW2pdID09IG51bGwpID8gMCA6IGRpc3RhbmNlKGRhdGFbaV0sIGRhdGFbal0pO1xyXG4gICAgICBtYXRyaXhbaV1bal0gPSBtYXRyaXhbal1baV0gPSBkO1xyXG4gICAgfVxyXG4gIH1cclxuICByZXR1cm4gbWF0cml4O1xyXG59XHJcbiJdfQ==
|
|
1
|
+
import { Vector } from './type-declarations';
|
|
2
|
+
/**
|
|
3
|
+
* Asserts a condition by throwing an Error.
|
|
4
|
+
*
|
|
5
|
+
* @export
|
|
6
|
+
* @param {boolean} [condition=false] Condition to assert.
|
|
7
|
+
* @param {string} [message='Assertion error.'] Message to output.
|
|
8
|
+
* @throws {Error}
|
|
9
|
+
*/
|
|
10
|
+
export function assert(condition = false, message = 'Assertion error.') {
|
|
11
|
+
if (!condition) {
|
|
12
|
+
throw new Error(message);
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Generates single random integer from 0 to range.
|
|
17
|
+
*
|
|
18
|
+
* @export
|
|
19
|
+
* @param {number} range Max generating value.
|
|
20
|
+
* @return {number} A random integer generated.
|
|
21
|
+
*/
|
|
22
|
+
export function randomInt(range) {
|
|
23
|
+
return Math.floor(Math.random() * range);
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Creates new two-dimensional array and fills it with the value given.
|
|
27
|
+
*
|
|
28
|
+
* @param {number} dimension1 The first dimension of the coordinates (number of rows).
|
|
29
|
+
* @param {number} dimension2 The second dimension of the coordinates (number of columns).
|
|
30
|
+
* @param {number} [fill=0] A value to fill the coordinates with.
|
|
31
|
+
* @return {Coordinates} A two-dimensional filled with the value given.
|
|
32
|
+
* @todo Might be slow since used Array.map. Probably needs performance revision.
|
|
33
|
+
*/
|
|
34
|
+
function initCoordinates(dimension1, dimension2, fill = 0) {
|
|
35
|
+
return new Array(dimension1).fill(fill).map(() => (new Vector(dimension2).fill(fill)));
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Transpose matrix.
|
|
39
|
+
*
|
|
40
|
+
* @export
|
|
41
|
+
* @param {Matrix} matrix The matrix to be transposed.
|
|
42
|
+
* @return {Matrix} Transposed matrix.
|
|
43
|
+
* @todo Might be slow since used Array.map. Probably needs performance revision.
|
|
44
|
+
*/
|
|
45
|
+
export function transposeMatrix(matrix) {
|
|
46
|
+
return new Array(matrix[0].length).fill(0).map((_, i) => (new Vector(matrix.length).fill(0).map((_, j) => (matrix[j][i]))));
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Adds two vectors with the second one to be multiplied by the given ratio.
|
|
50
|
+
*
|
|
51
|
+
* @export
|
|
52
|
+
* @param {Vector} p The first vector to add.
|
|
53
|
+
* @param {Vector} q The second vector to add.
|
|
54
|
+
* @param {number} [multiplier=1] A multiplier to be used before the second vector is added.
|
|
55
|
+
* @return {Vector} New vector contained the result of operation p+multiplier*q.
|
|
56
|
+
*/
|
|
57
|
+
export function vectorAdd(p, q, multiplier = 1) {
|
|
58
|
+
const nItems = p.length;
|
|
59
|
+
assert(nItems == q.length, 'Vector lengths do not match.');
|
|
60
|
+
let total = new Vector(nItems);
|
|
61
|
+
for (let i = 0; i < p.length; ++i) {
|
|
62
|
+
total[i] = p[i] + multiplier * q[i];
|
|
63
|
+
}
|
|
64
|
+
return total;
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Sums the vector's items.
|
|
68
|
+
*
|
|
69
|
+
* @param {Vector} v The vector to be summed.
|
|
70
|
+
* @return {number} The vector's items sum.
|
|
71
|
+
*/
|
|
72
|
+
function itemsSum(v) {
|
|
73
|
+
let total = 0;
|
|
74
|
+
for (let i = 0; i < v.length; ++i) {
|
|
75
|
+
total += v[i];
|
|
76
|
+
}
|
|
77
|
+
return total;
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Suqares the vector's items.
|
|
81
|
+
*
|
|
82
|
+
* @param {Vector} v The vector to square.
|
|
83
|
+
* @return {Vector} A new vector containing the original's items squared.
|
|
84
|
+
*/
|
|
85
|
+
function vectorSquare(v) {
|
|
86
|
+
const nItems = v.length;
|
|
87
|
+
let total = new Vector(nItems);
|
|
88
|
+
for (let i = 0; i < v.length; ++i) {
|
|
89
|
+
total[i] = v[i] * v[i];
|
|
90
|
+
}
|
|
91
|
+
return total;
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Creates a matrix filled with random floating point values.
|
|
95
|
+
*
|
|
96
|
+
* @export
|
|
97
|
+
* @param {number} dimension1 The first dimension of the matrix.
|
|
98
|
+
* @param {number} dimension2 The second dimension of the matrix.
|
|
99
|
+
* @param {number} [scale=1.] Max value given by random generator.
|
|
100
|
+
* @return {Matrix} A new matrix filled with random floating point values.
|
|
101
|
+
*/
|
|
102
|
+
export function fillRandomMatrix(dimension1, dimension2, scale = 1.) {
|
|
103
|
+
let matrix = initCoordinates(dimension1, dimension2);
|
|
104
|
+
for (let i = 0; i < dimension1; ++i) {
|
|
105
|
+
for (let j = 0; j < dimension2; ++j) {
|
|
106
|
+
matrix[i][j] = Math.random() * scale;
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
return matrix;
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Calculates Euclidean distance between two vectors.
|
|
113
|
+
*
|
|
114
|
+
* @export
|
|
115
|
+
* @param {Vector} p The first vector.
|
|
116
|
+
* @param {Vector} q The second vector.
|
|
117
|
+
* @return {number} Euclidean distance between the given vectors.
|
|
118
|
+
*/
|
|
119
|
+
export function calculateEuclideanDistance(p, q) {
|
|
120
|
+
const diff = vectorAdd(p, q, -1);
|
|
121
|
+
const sqdiff = vectorSquare(diff);
|
|
122
|
+
const sqdiffSumm = itemsSum(sqdiff);
|
|
123
|
+
return Math.sqrt(sqdiffSumm);
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Creates a distance matrix using a custom distance function.
|
|
127
|
+
*
|
|
128
|
+
* @export
|
|
129
|
+
* @param {Vectors} data Input vectors to calculate distances.
|
|
130
|
+
* @param {DistanceMetric} distance Custom distance function.
|
|
131
|
+
* @return {Matrix} Calculated custom distance matrix.
|
|
132
|
+
*/
|
|
133
|
+
export function calcDistanceMatrix(data, distance) {
|
|
134
|
+
const nItems = data.length;
|
|
135
|
+
let matrix = initCoordinates(nItems, nItems, 0);
|
|
136
|
+
for (let i = 0; i < nItems; ++i) {
|
|
137
|
+
for (let j = i + 1; j < nItems; ++j) {
|
|
138
|
+
const d = (data[i] == null) || (data[j] == null) ? 0 : distance(data[i], data[j]);
|
|
139
|
+
matrix[i][j] = matrix[j][i] = d;
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
return matrix;
|
|
143
|
+
}
|
|
144
|
+
/** Generates array from a range [begin; end]. */
|
|
145
|
+
export function genRange(begin, end) {
|
|
146
|
+
const nItems = end - begin;
|
|
147
|
+
const series = new Int32Array(nItems);
|
|
148
|
+
for (let i = 0; i < nItems + 1; ++i) {
|
|
149
|
+
series[i] = begin + i;
|
|
150
|
+
}
|
|
151
|
+
return series;
|
|
152
|
+
}
|
|
153
|
+
/**
|
|
154
|
+
* Returns order of values as if they are sorted.
|
|
155
|
+
*
|
|
156
|
+
* @export
|
|
157
|
+
* @param {any[]} values Input array.
|
|
158
|
+
* @param {boolean} [reverse=false] Whether to return reversed order.
|
|
159
|
+
* @return {number[]} The order computed.
|
|
160
|
+
*/
|
|
161
|
+
export function argSort(values, reverse = false) {
|
|
162
|
+
const sortfn = reverse ? (a, b) => (b[0] - a[0]) : (a, b) => (a[0] - b[0]);
|
|
163
|
+
const decor = (v, i) => [v, i]; // set index to value
|
|
164
|
+
const undecor = (a) => a[1]; // leave only index
|
|
165
|
+
const _argsort = (arr) => arr.map(decor).sort(sortfn).map(undecor);
|
|
166
|
+
return _argsort(values);
|
|
167
|
+
}
|
|
168
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3BlcmF0aW9ucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIm9wZXJhdGlvbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFTLE1BQU0sRUFBdUMsTUFBTSxxQkFBcUIsQ0FBQztBQUV6Rjs7Ozs7OztHQU9HO0FBQ0gsTUFBTSxVQUFVLE1BQU0sQ0FBQyxZQUFxQixLQUFLLEVBQUUsVUFBa0Isa0JBQWtCO0lBQ3JGLElBQUksQ0FBQyxTQUFTLEVBQUU7UUFDZCxNQUFNLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0tBQzFCO0FBQ0gsQ0FBQztBQUVEOzs7Ozs7R0FNRztBQUNILE1BQU0sVUFBVSxTQUFTLENBQUMsS0FBYTtJQUNyQyxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLEtBQUssQ0FBQyxDQUFDO0FBQzNDLENBQUM7QUFFRDs7Ozs7Ozs7R0FRRztBQUNILFNBQVMsZUFBZSxDQUFDLFVBQWtCLEVBQUUsVUFBa0IsRUFBRSxPQUFlLENBQUM7SUFDL0UsT0FBTyxJQUFJLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsSUFBSSxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN6RixDQUFDO0FBRUQ7Ozs7Ozs7R0FPRztBQUNILE1BQU0sVUFBVSxlQUFlLENBQUMsTUFBYztJQUM1QyxPQUFPLElBQUksS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxD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LE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLEdBQUcsQ0FBQyxDQUFDO0tBQ3ZCO0lBQ0QsT0FBTyxNQUFNLENBQUM7QUFDaEIsQ0FBQztBQUVEOzs7Ozs7O0dBT0c7QUFDSCxNQUFNLFVBQVUsT0FBTyxDQUFDLE1BQWEsRUFBRSxPQUFPLEdBQUcsS0FBSztJQUNwRCxNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBUSxFQUFFLENBQVEsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBUSxFQUFFLENBQVEsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDdkcsTUFBTSxLQUFLLEdBQUcsQ0FBQyxDQUFNLEVBQUUsQ0FBUyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLHFCQUFxQjtJQUNsRSxNQUFNLE9BQU8sR0FBRyxDQUFDLENBQVEsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsbUJBQW1CO0lBQ3ZELE1BQU0sUUFBUSxHQUFHLENBQUMsR0FBVSxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDMUUsT0FBTyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDMUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7TWF0cml4LCBWZWN0b3IsIENvb3JkaW5hdGVzLCBWZWN0b3JzLCBEaXN0YW5jZU1ldHJpY30gZnJvbSAnLi90eXBlLWRlY2xhcmF0aW9ucyc7XG5cbi8qKlxuICogQXNzZXJ0cyBhIGNvbmRpdGlvbiBieSB0aHJvd2luZyBhbiBFcnJvci5cbiAqXG4gKiBAZXhwb3J0XG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtjb25kaXRpb249ZmFsc2VdIENvbmRpdGlvbiB0byBhc3NlcnQuXG4gKiBAcGFyYW0ge3N0cmluZ30gW21lc3NhZ2U9J0Fzc2VydGlvbiBlcnJvci4nXSBNZXNzYWdlIHRvIG91dHB1dC5cbiAqIEB0aHJvd3Mge0Vycm9yfVxuICovXG5leHBvcnQgZnVuY3Rpb24gYXNzZXJ0KGNvbmRpdGlvbjogYm9vbGVhbiA9IGZhbHNlLCBtZXNzYWdlOiBzdHJpbmcgPSAnQXNzZXJ0aW9uIGVycm9yLicpIHtcbiAgaWYgKCFjb25kaXRpb24pIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IobWVzc2FnZSk7XG4gIH1cbn1cblxuLyoqXG4gKiBHZW5lcmF0ZXMgc2luZ2xlIHJhbmRvbSBpbnRlZ2VyIGZyb20gMCB0byByYW5nZS5cbiAqXG4gKiBAZXhwb3J0XG4gKiBAcGFyYW0ge251bWJlcn0gcmFuZ2UgTWF4IGdlbmVyYXRpbmcgdmFsdWUuXG4gKiBAcmV0dXJuIHtudW1iZXJ9IEEgcmFuZG9tIGludGVnZXIgZ2VuZXJhdGVkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmFuZG9tSW50KHJhbmdlOiBudW1iZXIpOiBudW1iZXIge1xuICByZXR1cm4gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogcmFuZ2UpO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgbmV3IHR3by1kaW1lbnNpb25hbCBhcnJheSBhbmQgZmlsbHMgaXQgd2l0aCB0aGUgdmFsdWUgZ2l2ZW4uXG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IGRpbWVuc2lvbjEgVGhlIGZpcnN0IGRpbWVuc2lvbiBvZiB0aGUgY29vcmRpbmF0ZXMgKG51bWJlciBvZiByb3dzKS5cbiAqIEBwYXJhbSB7bnVtYmVyfSBkaW1lbnNpb24yIFRoZSBzZWNvbmQgZGltZW5zaW9uIG9mIHRoZSBjb29yZGluYXRlcyAobnVtYmVyIG9mIGNvbHVtbnMpLlxuICogQHBhcmFtIHtudW1iZXJ9IFtmaWxsPTBdIEEgdmFsdWUgdG8gZmlsbCB0aGUgY29vcmRpbmF0ZXMgd2l0aC5cbiAqIEByZXR1cm4ge0Nvb3JkaW5hdGVzfSBBIHR3by1kaW1lbnNpb25hbCBmaWxsZWQgd2l0aCB0aGUgdmFsdWUgZ2l2ZW4uXG4gKiBAdG9kbyBNaWdodCBiZSBzbG93IHNpbmNlIHVzZWQgQXJyYXkubWFwLiBQcm9iYWJseSBuZWVkcyBwZXJmb3JtYW5jZSByZXZpc2lvbi5cbiAqL1xuZnVuY3Rpb24gaW5pdENvb3JkaW5hdGVzKGRpbWVuc2lvbjE6IG51bWJlciwgZGltZW5zaW9uMjogbnVtYmVyLCBmaWxsOiBudW1iZXIgPSAwKTogQ29vcmRpbmF0ZXMge1xuICByZXR1cm4gbmV3IEFycmF5KGRpbWVuc2lvbjEpLmZpbGwoZmlsbCkubWFwKCgpID0+IChuZXcgVmVjdG9yKGRpbWVuc2lvbjIpLmZpbGwoZmlsbCkpKTtcbn1cblxuLyoqXG4gKiBUcmFuc3Bvc2UgbWF0cml4LlxuICpcbiAqIEBleHBvcnRcbiAqIEBwYXJhbSB7TWF0cml4fSBtYXRyaXggVGhlIG1hdHJpeCB0byBiZSB0cmFuc3Bvc2VkLlxuICogQHJldHVybiB7TWF0cml4fSBUcmFuc3Bvc2VkIG1hdHJpeC5cbiAqIEB0b2RvIE1pZ2h0IGJlIHNsb3cgc2luY2UgdXNlZCBBcnJheS5tYXAuIFByb2JhYmx5IG5lZWRzIHBlcmZvcm1hbmNlIHJldmlzaW9uLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdHJhbnNwb3NlTWF0cml4KG1hdHJpeDogTWF0cml4KTogTWF0cml4IHtcbiAgcmV0dXJuIG5ldyBBcnJheShtYXRyaXhbMF0ubGVuZ3RoKS5maWxsKDApLm1hcCgoXywgaSkgPT4gKG5ldyBWZWN0b3IobWF0cml4Lmxlbmd0aCkuZmlsbCgwKS5tYXAoKF8sIGopID0+IChtYXRyaXhbal1baV0pKSkpO1xufVxuXG4vKipcbiAqIEFkZHMgdHdvIHZlY3RvcnMgd2l0aCB0aGUgc2Vjb25kIG9uZSB0byBiZSBtdWx0aXBsaWVkIGJ5IHRoZSBnaXZlbiByYXRpby5cbiAqXG4gKiBAZXhwb3J0XG4gKiBAcGFyYW0ge1ZlY3Rvcn0gcCBUaGUgZmlyc3QgdmVjdG9yIHRvIGFkZC5cbiAqIEBwYXJhbSB7VmVjdG9yfSBxIFRoZSBzZWNvbmQgdmVjdG9yIHRvIGFkZC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbbXVsdGlwbGllcj0xXSBBIG11bHRpcGxpZXIgdG8gYmUgdXNlZCBiZWZvcmUgdGhlIHNlY29uZCB2ZWN0b3IgaXMgYWRkZWQuXG4gKiBAcmV0dXJuIHtWZWN0b3J9IE5ldyB2ZWN0b3IgY29udGFpbmVkIHRoZSByZXN1bHQgb2Ygb3BlcmF0aW9uIHArbXVsdGlwbGllcipxLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdmVjdG9yQWRkKHA6IFZlY3RvciwgcTogVmVjdG9yLCBtdWx0aXBsaWVyOiBudW1iZXIgPSAxKTogVmVjdG9yIHtcbiAgY29uc3Qgbkl0ZW1zID0gcC5sZW5ndGg7XG5cbiAgYXNzZXJ0KG5JdGVtcyA9PSBxLmxlbmd0aCwgJ1ZlY3RvciBsZW5ndGhzIGRvIG5vdCBtYXRjaC4nKVxuXG4gIGxldCB0b3RhbCA9IG5ldyBWZWN0b3Iobkl0ZW1zKTtcblxuICBmb3IgKGxldCBpID0gMDsgaSA8IHAubGVuZ3RoOyArK2kpIHtcbiAgICB0b3RhbFtpXSA9IHBbaV0rbXVsdGlwbGllcipxW2ldO1xuICB9XG4gIHJldHVybiB0b3RhbDtcbn1cblxuLyoqXG4gKiBTdW1zIHRoZSB2ZWN0b3IncyBpdGVtcy5cbiAqXG4gKiBAcGFyYW0ge1ZlY3Rvcn0gdiBUaGUgdmVjdG9yIHRvIGJlIHN1bW1lZC5cbiAqIEByZXR1cm4ge251bWJlcn0gVGhlIHZlY3RvcidzIGl0ZW1zIHN1bS5cbiAqL1xuZnVuY3Rpb24gaXRlbXNTdW0odjogVmVjdG9yKTogbnVtYmVyIHtcbiAgbGV0IHRvdGFsID0gMDtcblxuICBmb3IgKGxldCBpID0gMDsgaSA8IHYubGVuZ3RoOyArK2kpIHtcbiAgICB0b3RhbCArPSB2W2ldO1xuICB9XG4gIHJldHVybiB0b3RhbDtcbn1cblxuLyoqXG4gKiBTdXFhcmVzIHRoZSB2ZWN0b3IncyBpdGVtcy5cbiAqXG4gKiBAcGFyYW0ge1ZlY3Rvcn0gdiBUaGUgdmVjdG9yIHRvIHNxdWFyZS5cbiAqIEByZXR1cm4ge1ZlY3Rvcn0gQSBuZXcgdmVjdG9yIGNvbnRhaW5pbmcgdGhlIG9yaWdpbmFsJ3MgaXRlbXMgc3F1YXJlZC5cbiAqL1xuZnVuY3Rpb24gdmVjdG9yU3F1YXJlKHY6IFZlY3Rvcik6IFZlY3RvciB7XG4gIGNvbnN0IG5JdGVtcyA9IHYubGVuZ3RoO1xuICBsZXQgdG90YWwgPSBuZXcgVmVjdG9yKG5JdGVtcyk7XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCB2Lmxlbmd0aDsgKytpKSB7XG4gICAgdG90YWxbaV0gPSB2W2ldKnZbaV07XG4gIH1cbiAgcmV0dXJuIHRvdGFsO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYSBtYXRyaXggZmlsbGVkIHdpdGggcmFuZG9tIGZsb2F0aW5nIHBvaW50IHZhbHVlcy5cbiAqXG4gKiBAZXhwb3J0XG4gKiBAcGFyYW0ge251bWJlcn0gZGltZW5zaW9uMSBUaGUgZmlyc3QgZGltZW5zaW9uIG9mIHRoZSBtYXRyaXguXG4gKiBAcGFyYW0ge251bWJlcn0gZGltZW5zaW9uMiBUaGUgc2Vjb25kIGRpbWVuc2lvbiBvZiB0aGUgbWF0cml4LlxuICogQHBhcmFtIHtudW1iZXJ9IFtzY2FsZT0xLl0gTWF4IHZhbHVlIGdpdmVuIGJ5IHJhbmRvbSBnZW5lcmF0b3IuXG4gKiBAcmV0dXJuIHtNYXRyaXh9IEEgbmV3IG1hdHJpeCBmaWxsZWQgd2l0aCByYW5kb20gZmxvYXRpbmcgcG9pbnQgIHZhbHVlcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZpbGxSYW5kb21NYXRyaXgoZGltZW5zaW9uMTogbnVtYmVyLCBkaW1lbnNpb24yOiBudW1iZXIsIHNjYWxlOiBudW1iZXIgPSAxLik6IE1hdHJpeCB7XG4gIGxldCBtYXRyaXggPSBpbml0Q29vcmRpbmF0ZXMoZGltZW5zaW9uMSwgZGltZW5zaW9uMik7XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBkaW1lbnNpb24xOyArK2kpIHtcbiAgICBmb3IgKGxldCBqID0gMDsgaiA8IGRpbWVuc2lvbjI7ICsraikge1xuICAgICAgbWF0cml4W2ldW2pdID0gTWF0aC5yYW5kb20oKSAqIHNjYWxlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbWF0cml4O1xufVxuXG4vKipcbiAqIENhbGN1bGF0ZXMgRXVjbGlkZWFuIGRpc3RhbmNlIGJldHdlZW4gdHdvIHZlY3RvcnMuXG4gKlxuICogQGV4cG9ydFxuICogQHBhcmFtIHtWZWN0b3J9IHAgVGhlIGZpcnN0IHZlY3Rvci5cbiAqIEBwYXJhbSB7VmVjdG9yfSBxIFRoZSBzZWNvbmQgdmVjdG9yLlxuICogQHJldHVybiB7bnVtYmVyfSBFdWNsaWRlYW4gZGlzdGFuY2UgYmV0d2VlbiB0aGUgZ2l2ZW4gdmVjdG9ycy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNhbGN1bGF0ZUV1Y2xpZGVhbkRpc3RhbmNlKHA6IFZlY3RvciwgcTogVmVjdG9yKTogbnVtYmVyIHtcbiAgY29uc3QgZGlmZiA9IHZlY3RvckFkZChwLCBxLCAtMSk7XG4gIGNvbnN0IHNxZGlmZiA9IHZlY3RvclNxdWFyZShkaWZmKTtcbiAgY29uc3Qgc3FkaWZmU3VtbSA9IGl0ZW1zU3VtKHNxZGlmZik7XG4gIHJldHVybiBNYXRoLnNxcnQoc3FkaWZmU3VtbSk7XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIGRpc3RhbmNlIG1hdHJpeCB1c2luZyBhIGN1c3RvbSBkaXN0YW5jZSBmdW5jdGlvbi5cbiAqXG4gKiBAZXhwb3J0XG4gKiBAcGFyYW0ge1ZlY3RvcnN9IGRhdGEgSW5wdXQgdmVjdG9ycyB0byBjYWxjdWxhdGUgZGlzdGFuY2VzLlxuICogQHBhcmFtIHtEaXN0YW5jZU1ldHJpY30gZGlzdGFuY2UgQ3VzdG9tIGRpc3RhbmNlIGZ1bmN0aW9uLlxuICogQHJldHVybiB7TWF0cml4fSBDYWxjdWxhdGVkIGN1c3RvbSBkaXN0YW5jZSBtYXRyaXguXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjYWxjRGlzdGFuY2VNYXRyaXgoZGF0YTogVmVjdG9ycywgZGlzdGFuY2U6IERpc3RhbmNlTWV0cmljKTogTWF0cml4IHtcbiAgY29uc3Qgbkl0ZW1zID0gZGF0YS5sZW5ndGg7XG4gIGxldCBtYXRyaXggPSBpbml0Q29vcmRpbmF0ZXMobkl0ZW1zLCBuSXRlbXMsIDApO1xuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbkl0ZW1zOyArK2kpIHtcbiAgICBmb3IgKGxldCBqID0gaSsxOyBqIDwgbkl0ZW1zOyArK2opIHtcbiAgICAgIGNvbnN0IGQ6IG51bWJlciA9IChkYXRhW2ldID09IG51bGwpIHx8IChkYXRhW2pdID09IG51bGwpID8gMCA6IGRpc3RhbmNlKGRhdGFbaV0sIGRhdGFbal0pO1xuICAgICAgbWF0cml4W2ldW2pdID0gbWF0cml4W2pdW2ldID0gZDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG1hdHJpeDtcbn1cblxuLyoqIEdlbmVyYXRlcyBhcnJheSBmcm9tIGEgcmFuZ2UgW2JlZ2luOyBlbmRdLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdlblJhbmdlKGJlZ2luOiBudW1iZXIsIGVuZDogbnVtYmVyKTogSW50MzJBcnJheSB7XG4gIGNvbnN0IG5JdGVtcyA9IGVuZCAtIGJlZ2luO1xuICBjb25zdCBzZXJpZXMgPSBuZXcgSW50MzJBcnJheShuSXRlbXMpO1xuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbkl0ZW1zICsgMTsgKytpKSB7XG4gICAgc2VyaWVzW2ldID0gYmVnaW4gKyBpO1xuICB9XG4gIHJldHVybiBzZXJpZXM7XG59XG5cbi8qKiAgXG4gKiBSZXR1cm5zIG9yZGVyIG9mIHZhbHVlcyBhcyBpZiB0aGV5IGFyZSBzb3J0ZWQuXG4gKlxuICogQGV4cG9ydFxuICogQHBhcmFtIHthbnlbXX0gdmFsdWVzIElucHV0IGFycmF5LlxuICogQHBhcmFtIHtib29sZWFufSBbcmV2ZXJzZT1mYWxzZV0gV2hldGhlciB0byByZXR1cm4gcmV2ZXJzZWQgb3JkZXIuXG4gKiBAcmV0dXJuIHtudW1iZXJbXX0gVGhlIG9yZGVyIGNvbXB1dGVkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYXJnU29ydCh2YWx1ZXM6IGFueVtdLCByZXZlcnNlID0gZmFsc2UpOiBudW1iZXJbXSB7XG4gIGNvbnN0IHNvcnRmbiA9IHJldmVyc2UgPyAoYTogYW55W10sIGI6IGFueVtdKSA9PiAoYlswXSAtIGFbMF0pIDogKGE6IGFueVtdLCBiOiBhbnlbXSkgPT4gKGFbMF0gLSBiWzBdKTtcbiAgY29uc3QgZGVjb3IgPSAodjogYW55LCBpOiBudW1iZXIpID0+IFt2LCBpXTsgLy8gc2V0IGluZGV4IHRvIHZhbHVlXG4gIGNvbnN0IHVuZGVjb3IgPSAoYTogYW55W10pID0+IGFbMV07IC8vIGxlYXZlIG9ubHkgaW5kZXhcbiAgY29uc3QgX2FyZ3NvcnQgPSAoYXJyOiBhbnlbXSkgPT4gYXJyLm1hcChkZWNvcikuc29ydChzb3J0Zm4pLm1hcCh1bmRlY29yKTtcbiAgcmV0dXJuIF9hcmdzb3J0KHZhbHVlcyk7XG59XG4iXX0=
|
package/src/string-utils.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare function tryParseJson(s: string): any;
|
|
1
|
+
export declare function tryParseJson(s: string): any;
|
|
2
2
|
//# sourceMappingURL=string-utils.d.ts.map
|
package/src/string-utils.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
export function tryParseJson(s) {
|
|
2
|
-
try {
|
|
3
|
-
return JSON.parse(s);
|
|
4
|
-
}
|
|
5
|
-
catch (_) {
|
|
6
|
-
return null;
|
|
7
|
-
}
|
|
8
|
-
}
|
|
9
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
1
|
+
export function tryParseJson(s) {
|
|
2
|
+
try {
|
|
3
|
+
return JSON.parse(s);
|
|
4
|
+
}
|
|
5
|
+
catch (_) {
|
|
6
|
+
return null;
|
|
7
|
+
}
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RyaW5nLXV0aWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsic3RyaW5nLXV0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sVUFBVSxZQUFZLENBQUMsQ0FBUztJQUNsQyxJQUFJO1FBQ0EsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0tBQ3hCO0lBQ0QsT0FBTyxDQUFDLEVBQUU7UUFDTixPQUFPLElBQUksQ0FBQztLQUNmO0FBQ0wsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBmdW5jdGlvbiB0cnlQYXJzZUpzb24oczogc3RyaW5nKSA6IGFueSB7XG4gICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIEpTT04ucGFyc2Uocyk7XG4gICAgfVxuICAgIGNhdGNoIChfKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbn0iXX0=
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export {};
|
|
1
|
+
export {};
|
|
2
2
|
//# sourceMappingURL=table-validation.d.ts.map
|