@datagrok/eda 1.4.3 → 1.4.4
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/CHANGELOG.md +4 -0
- package/dist/_d4c0.js +279 -0
- package/dist/_d4c0.js.map +1 -0
- package/dist/node_modules_datagrok-libraries_math_src_dbscan_wasm_clustering-worker_js.js +279 -0
- package/dist/node_modules_datagrok-libraries_math_src_dbscan_wasm_clustering-worker_js.js.map +1 -0
- package/dist/node_modules_datagrok-libraries_ml_src_MCL_mcl-sparse-matrix-mult-worker_js.js +59 -0
- package/dist/node_modules_datagrok-libraries_ml_src_MCL_mcl-sparse-matrix-mult-worker_js.js.map +1 -0
- package/dist/node_modules_datagrok-libraries_ml_src_distance-matrix_distance-matrix-worker_js.js +284 -0
- package/dist/node_modules_datagrok-libraries_ml_src_distance-matrix_distance-matrix-worker_js.js.map +1 -0
- package/dist/node_modules_datagrok-libraries_ml_src_distance-matrix_single-value-knn-worker_js.js +265 -0
- package/dist/node_modules_datagrok-libraries_ml_src_distance-matrix_single-value-knn-worker_js.js.map +1 -0
- package/dist/node_modules_datagrok-libraries_ml_src_distance-matrix_sparse-matrix-worker_js.js +287 -0
- package/dist/node_modules_datagrok-libraries_ml_src_distance-matrix_sparse-matrix-worker_js.js.map +1 -0
- package/dist/package-test.js +26140 -1
- package/dist/package-test.js.map +1 -1
- package/dist/package.js +30337 -1
- package/dist/package.js.map +1 -1
- package/dist/src_workers_softmax-worker_ts.js +154 -0
- package/dist/src_workers_softmax-worker_ts.js.map +1 -0
- package/dist/src_workers_tsne-worker_ts.js +244 -0
- package/dist/src_workers_tsne-worker_ts.js.map +1 -0
- package/dist/src_workers_umap-worker_ts.js +252 -0
- package/dist/src_workers_umap-worker_ts.js.map +1 -0
- package/dist/vendors-node_modules_datagrok-libraries_math_src_dbscan_wasm_dbscan_js.js +1253 -0
- package/dist/vendors-node_modules_datagrok-libraries_math_src_dbscan_wasm_dbscan_js.js.map +1 -0
- package/dist/vendors-node_modules_datagrok-libraries_math_src_hierarchical-clustering_wasm_clustering-worker_js.js +942 -0
- package/dist/vendors-node_modules_datagrok-libraries_math_src_hierarchical-clustering_wasm_clustering-worker_js.js.map +1 -0
- package/dist/vendors-node_modules_datagrok-libraries_math_src_webGPU_sparse-matrix_webGPU-sparse-matrix_js-07693f.js +1525 -0
- package/dist/vendors-node_modules_datagrok-libraries_math_src_webGPU_sparse-matrix_webGPU-sparse-matrix_js-07693f.js.map +1 -0
- package/dist/vendors-node_modules_datagrok-libraries_ml_src_MCL_mcl-worker_js-node_modules_datagrok-librar-e4203d.js +2244 -0
- package/dist/vendors-node_modules_datagrok-libraries_ml_src_MCL_mcl-worker_js-node_modules_datagrok-librar-e4203d.js.map +1 -0
- package/dist/vendors-node_modules_datagrok-libraries_ml_src_distance-matrix_knn-threshold-worker_js.js +286 -0
- package/dist/vendors-node_modules_datagrok-libraries_ml_src_distance-matrix_knn-threshold-worker_js.js.map +1 -0
- package/dist/vendors-node_modules_datagrok-libraries_ml_src_distance-matrix_knn-worker_js.js +280 -0
- package/dist/vendors-node_modules_datagrok-libraries_ml_src_distance-matrix_knn-worker_js.js.map +1 -0
- package/dist/vendors-node_modules_datagrok-libraries_ml_src_distance-matrix_sparse-matrix-threshold-worker_js.js +282 -0
- package/dist/vendors-node_modules_datagrok-libraries_ml_src_distance-matrix_sparse-matrix-threshold-worker_js.js.map +1 -0
- package/dist/vendors-node_modules_datagrok-libraries_ml_src_distance-matrix_utils_js-node_modules_datagrok-72c7b2.js +1821 -0
- package/dist/vendors-node_modules_datagrok-libraries_ml_src_distance-matrix_utils_js-node_modules_datagrok-72c7b2.js.map +1 -0
- package/dist/vendors-node_modules_datagrok-libraries_ml_src_multi-column-dimensionality-reduction_mulit-co-3800a0.js +7776 -0
- package/dist/vendors-node_modules_datagrok-libraries_ml_src_multi-column-dimensionality-reduction_mulit-co-3800a0.js.map +1 -0
- package/dist/vendors-node_modules_keckelt_tsne_lib_index_js.js +379 -0
- package/dist/vendors-node_modules_keckelt_tsne_lib_index_js.js.map +1 -0
- package/dist/vendors-node_modules_ml-matrix_matrix_mjs.js +5946 -0
- package/dist/vendors-node_modules_ml-matrix_matrix_mjs.js.map +1 -0
- package/dist/vendors-node_modules_umap-js_dist_index_js.js +2284 -0
- package/dist/vendors-node_modules_umap-js_dist_index_js.js.map +1 -0
- package/dist/wasm_EDAForWebWorker_js-wasm_callWasmForWebWorker_js.js +779 -0
- package/dist/wasm_EDAForWebWorker_js-wasm_callWasmForWebWorker_js.js.map +1 -0
- package/dist/wasm_workers_errorWorker_js.js +267 -0
- package/dist/wasm_workers_errorWorker_js.js.map +1 -0
- package/dist/wasm_workers_fitLinearRegressionParamsWithDataNormalizingWorker_js.js +267 -0
- package/dist/wasm_workers_fitLinearRegressionParamsWithDataNormalizingWorker_js.js.map +1 -0
- package/dist/wasm_workers_fitLinearRegressionParamsWorker_js.js +267 -0
- package/dist/wasm_workers_fitLinearRegressionParamsWorker_js.js.map +1 -0
- package/dist/wasm_workers_fitSoftmaxWorker_js.js +267 -0
- package/dist/wasm_workers_fitSoftmaxWorker_js.js.map +1 -0
- package/dist/wasm_workers_generateDatasetWorker_js.js +267 -0
- package/dist/wasm_workers_generateDatasetWorker_js.js.map +1 -0
- package/dist/wasm_workers_normalizeDatasetWorker_js.js +267 -0
- package/dist/wasm_workers_normalizeDatasetWorker_js.js.map +1 -0
- package/dist/wasm_workers_partialLeastSquareRegressionWorker_js.js +267 -0
- package/dist/wasm_workers_partialLeastSquareRegressionWorker_js.js.map +1 -0
- package/dist/wasm_workers_predictByLSSVMWorker_js.js +267 -0
- package/dist/wasm_workers_predictByLSSVMWorker_js.js.map +1 -0
- package/dist/wasm_workers_principalComponentAnalysisNipalsWorker_js.js +267 -0
- package/dist/wasm_workers_principalComponentAnalysisNipalsWorker_js.js.map +1 -0
- package/dist/wasm_workers_principalComponentAnalysisWorkerUpd_js.js +271 -0
- package/dist/wasm_workers_principalComponentAnalysisWorkerUpd_js.js.map +1 -0
- package/dist/wasm_workers_trainAndAnalyzeLSSVMWorker_js.js +267 -0
- package/dist/wasm_workers_trainAndAnalyzeLSSVMWorker_js.js.map +1 -0
- package/dist/wasm_workers_trainLSSVMWorker_js.js +267 -0
- package/dist/wasm_workers_trainLSSVMWorker_js.js.map +1 -0
- package/dist/wasm_workers_xgboostWorker_js.js +279 -0
- package/dist/wasm_workers_xgboostWorker_js.js.map +1 -0
- package/package.json +5 -4
- package/src/package-api.ts +259 -0
- package/src/package.g.ts +522 -0
- package/src/package.ts +907 -678
- package/test-console-output-1.log +78 -93
- package/test-record-1.mp4 +0 -0
- package/tsconfig.json +2 -2
- package/webpack.config.js +5 -0
- package/dist/111.js +0 -2
- package/dist/111.js.map +0 -1
- package/dist/128.js +0 -2
- package/dist/128.js.map +0 -1
- package/dist/153.js +0 -2
- package/dist/153.js.map +0 -1
- package/dist/23.js +0 -2
- package/dist/23.js.map +0 -1
- package/dist/234.js +0 -2
- package/dist/234.js.map +0 -1
- package/dist/242.js +0 -2
- package/dist/242.js.map +0 -1
- package/dist/260.js +0 -2
- package/dist/260.js.map +0 -1
- package/dist/33.js +0 -2
- package/dist/33.js.map +0 -1
- package/dist/348.js +0 -2
- package/dist/348.js.map +0 -1
- package/dist/377.js +0 -2
- package/dist/377.js.map +0 -1
- package/dist/412.js +0 -2
- package/dist/412.js.map +0 -1
- package/dist/415.js +0 -2
- package/dist/415.js.map +0 -1
- package/dist/501.js +0 -2
- package/dist/501.js.map +0 -1
- package/dist/531.js +0 -2
- package/dist/531.js.map +0 -1
- package/dist/583.js +0 -2
- package/dist/583.js.map +0 -1
- package/dist/589.js +0 -2
- package/dist/589.js.map +0 -1
- package/dist/603.js +0 -2
- package/dist/603.js.map +0 -1
- package/dist/656.js +0 -2
- package/dist/656.js.map +0 -1
- package/dist/682.js +0 -2
- package/dist/682.js.map +0 -1
- package/dist/705.js +0 -2
- package/dist/705.js.map +0 -1
- package/dist/727.js +0 -2
- package/dist/727.js.map +0 -1
- package/dist/731.js +0 -2
- package/dist/731.js.map +0 -1
- package/dist/738.js +0 -3
- package/dist/738.js.LICENSE.txt +0 -51
- package/dist/738.js.map +0 -1
- package/dist/763.js +0 -2
- package/dist/763.js.map +0 -1
- package/dist/778.js +0 -2
- package/dist/778.js.map +0 -1
- package/dist/783.js +0 -2
- package/dist/783.js.map +0 -1
- package/dist/793.js +0 -2
- package/dist/793.js.map +0 -1
- package/dist/801.js +0 -2
- package/dist/801.js.map +0 -1
- package/dist/810.js +0 -2
- package/dist/810.js.map +0 -1
- package/dist/860.js +0 -2
- package/dist/860.js.map +0 -1
- package/dist/907.js +0 -2
- package/dist/907.js.map +0 -1
- package/dist/950.js +0 -2
- package/dist/950.js.map +0 -1
- package/dist/980.js +0 -2
- package/dist/980.js.map +0 -1
- package/dist/990.js +0 -2
- package/dist/990.js.map +0 -1
|
@@ -0,0 +1,2284 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
(self["webpackChunkeda"] = self["webpackChunkeda"] || []).push([["vendors-node_modules_umap-js_dist_index_js"],{
|
|
3
|
+
|
|
4
|
+
/***/ "./node_modules/umap-js/dist/heap.js":
|
|
5
|
+
/*!*******************************************!*\
|
|
6
|
+
!*** ./node_modules/umap-js/dist/heap.js ***!
|
|
7
|
+
\*******************************************/
|
|
8
|
+
/***/ (function(__unused_webpack_module, exports, __webpack_require__) {
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
12
|
+
if (k2 === undefined) k2 = k;
|
|
13
|
+
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
|
|
14
|
+
}) : (function(o, m, k, k2) {
|
|
15
|
+
if (k2 === undefined) k2 = k;
|
|
16
|
+
o[k2] = m[k];
|
|
17
|
+
}));
|
|
18
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
19
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
20
|
+
}) : function(o, v) {
|
|
21
|
+
o["default"] = v;
|
|
22
|
+
});
|
|
23
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
24
|
+
if (mod && mod.__esModule) return mod;
|
|
25
|
+
var result = {};
|
|
26
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
27
|
+
__setModuleDefault(result, mod);
|
|
28
|
+
return result;
|
|
29
|
+
};
|
|
30
|
+
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
|
31
|
+
exports.smallestFlagged = exports.deheapSort = exports.buildCandidates = exports.uncheckedHeapPush = exports.heapPush = exports.rejectionSample = exports.makeHeap = void 0;
|
|
32
|
+
var utils = __importStar(__webpack_require__(/*! ./utils */ "./node_modules/umap-js/dist/utils.js"));
|
|
33
|
+
function makeHeap(nPoints, size) {
|
|
34
|
+
var makeArrays = function (fillValue) {
|
|
35
|
+
return utils.empty(nPoints).map(function () {
|
|
36
|
+
return utils.filled(size, fillValue);
|
|
37
|
+
});
|
|
38
|
+
};
|
|
39
|
+
var heap = [];
|
|
40
|
+
heap.push(makeArrays(-1));
|
|
41
|
+
heap.push(makeArrays(Infinity));
|
|
42
|
+
heap.push(makeArrays(0));
|
|
43
|
+
return heap;
|
|
44
|
+
}
|
|
45
|
+
exports.makeHeap = makeHeap;
|
|
46
|
+
function rejectionSample(nSamples, poolSize, random) {
|
|
47
|
+
var result = utils.zeros(nSamples);
|
|
48
|
+
for (var i = 0; i < nSamples; i++) {
|
|
49
|
+
var rejectSample = true;
|
|
50
|
+
var j = 0;
|
|
51
|
+
while (rejectSample) {
|
|
52
|
+
j = utils.tauRandInt(poolSize, random);
|
|
53
|
+
var broken = false;
|
|
54
|
+
for (var k = 0; k < i; k++) {
|
|
55
|
+
if (j === result[k]) {
|
|
56
|
+
broken = true;
|
|
57
|
+
break;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
if (!broken)
|
|
61
|
+
rejectSample = false;
|
|
62
|
+
}
|
|
63
|
+
result[i] = j;
|
|
64
|
+
}
|
|
65
|
+
return result;
|
|
66
|
+
}
|
|
67
|
+
exports.rejectionSample = rejectionSample;
|
|
68
|
+
function heapPush(heap, row, weight, index, flag) {
|
|
69
|
+
row = Math.floor(row);
|
|
70
|
+
var indices = heap[0][row];
|
|
71
|
+
var weights = heap[1][row];
|
|
72
|
+
var isNew = heap[2][row];
|
|
73
|
+
if (weight >= weights[0]) {
|
|
74
|
+
return 0;
|
|
75
|
+
}
|
|
76
|
+
for (var i = 0; i < indices.length; i++) {
|
|
77
|
+
if (index === indices[i]) {
|
|
78
|
+
return 0;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
return uncheckedHeapPush(heap, row, weight, index, flag);
|
|
82
|
+
}
|
|
83
|
+
exports.heapPush = heapPush;
|
|
84
|
+
function uncheckedHeapPush(heap, row, weight, index, flag) {
|
|
85
|
+
var indices = heap[0][row];
|
|
86
|
+
var weights = heap[1][row];
|
|
87
|
+
var isNew = heap[2][row];
|
|
88
|
+
if (weight >= weights[0]) {
|
|
89
|
+
return 0;
|
|
90
|
+
}
|
|
91
|
+
weights[0] = weight;
|
|
92
|
+
indices[0] = index;
|
|
93
|
+
isNew[0] = flag;
|
|
94
|
+
var i = 0;
|
|
95
|
+
var iSwap = 0;
|
|
96
|
+
while (true) {
|
|
97
|
+
var ic1 = 2 * i + 1;
|
|
98
|
+
var ic2 = ic1 + 1;
|
|
99
|
+
var heapShape2 = heap[0][0].length;
|
|
100
|
+
if (ic1 >= heapShape2) {
|
|
101
|
+
break;
|
|
102
|
+
}
|
|
103
|
+
else if (ic2 >= heapShape2) {
|
|
104
|
+
if (weights[ic1] > weight) {
|
|
105
|
+
iSwap = ic1;
|
|
106
|
+
}
|
|
107
|
+
else {
|
|
108
|
+
break;
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
else if (weights[ic1] >= weights[ic2]) {
|
|
112
|
+
if (weight < weights[ic1]) {
|
|
113
|
+
iSwap = ic1;
|
|
114
|
+
}
|
|
115
|
+
else {
|
|
116
|
+
break;
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
else {
|
|
120
|
+
if (weight < weights[ic2]) {
|
|
121
|
+
iSwap = ic2;
|
|
122
|
+
}
|
|
123
|
+
else {
|
|
124
|
+
break;
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
weights[i] = weights[iSwap];
|
|
128
|
+
indices[i] = indices[iSwap];
|
|
129
|
+
isNew[i] = isNew[iSwap];
|
|
130
|
+
i = iSwap;
|
|
131
|
+
}
|
|
132
|
+
weights[i] = weight;
|
|
133
|
+
indices[i] = index;
|
|
134
|
+
isNew[i] = flag;
|
|
135
|
+
return 1;
|
|
136
|
+
}
|
|
137
|
+
exports.uncheckedHeapPush = uncheckedHeapPush;
|
|
138
|
+
function buildCandidates(currentGraph, nVertices, nNeighbors, maxCandidates, random) {
|
|
139
|
+
var candidateNeighbors = makeHeap(nVertices, maxCandidates);
|
|
140
|
+
for (var i = 0; i < nVertices; i++) {
|
|
141
|
+
for (var j = 0; j < nNeighbors; j++) {
|
|
142
|
+
if (currentGraph[0][i][j] < 0) {
|
|
143
|
+
continue;
|
|
144
|
+
}
|
|
145
|
+
var idx = currentGraph[0][i][j];
|
|
146
|
+
var isn = currentGraph[2][i][j];
|
|
147
|
+
var d = utils.tauRand(random);
|
|
148
|
+
heapPush(candidateNeighbors, i, d, idx, isn);
|
|
149
|
+
heapPush(candidateNeighbors, idx, d, i, isn);
|
|
150
|
+
currentGraph[2][i][j] = 0;
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
return candidateNeighbors;
|
|
154
|
+
}
|
|
155
|
+
exports.buildCandidates = buildCandidates;
|
|
156
|
+
function deheapSort(heap) {
|
|
157
|
+
var indices = heap[0];
|
|
158
|
+
var weights = heap[1];
|
|
159
|
+
for (var i = 0; i < indices.length; i++) {
|
|
160
|
+
var indHeap = indices[i];
|
|
161
|
+
var distHeap = weights[i];
|
|
162
|
+
for (var j = 0; j < indHeap.length - 1; j++) {
|
|
163
|
+
var indHeapIndex = indHeap.length - j - 1;
|
|
164
|
+
var distHeapIndex = distHeap.length - j - 1;
|
|
165
|
+
var temp1 = indHeap[0];
|
|
166
|
+
indHeap[0] = indHeap[indHeapIndex];
|
|
167
|
+
indHeap[indHeapIndex] = temp1;
|
|
168
|
+
var temp2 = distHeap[0];
|
|
169
|
+
distHeap[0] = distHeap[distHeapIndex];
|
|
170
|
+
distHeap[distHeapIndex] = temp2;
|
|
171
|
+
siftDown(distHeap, indHeap, distHeapIndex, 0);
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
return { indices: indices, weights: weights };
|
|
175
|
+
}
|
|
176
|
+
exports.deheapSort = deheapSort;
|
|
177
|
+
function siftDown(heap1, heap2, ceiling, elt) {
|
|
178
|
+
while (elt * 2 + 1 < ceiling) {
|
|
179
|
+
var leftChild = elt * 2 + 1;
|
|
180
|
+
var rightChild = leftChild + 1;
|
|
181
|
+
var swap = elt;
|
|
182
|
+
if (heap1[swap] < heap1[leftChild]) {
|
|
183
|
+
swap = leftChild;
|
|
184
|
+
}
|
|
185
|
+
if (rightChild < ceiling && heap1[swap] < heap1[rightChild]) {
|
|
186
|
+
swap = rightChild;
|
|
187
|
+
}
|
|
188
|
+
if (swap === elt) {
|
|
189
|
+
break;
|
|
190
|
+
}
|
|
191
|
+
else {
|
|
192
|
+
var temp1 = heap1[elt];
|
|
193
|
+
heap1[elt] = heap1[swap];
|
|
194
|
+
heap1[swap] = temp1;
|
|
195
|
+
var temp2 = heap2[elt];
|
|
196
|
+
heap2[elt] = heap2[swap];
|
|
197
|
+
heap2[swap] = temp2;
|
|
198
|
+
elt = swap;
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
function smallestFlagged(heap, row) {
|
|
203
|
+
var ind = heap[0][row];
|
|
204
|
+
var dist = heap[1][row];
|
|
205
|
+
var flag = heap[2][row];
|
|
206
|
+
var minDist = Infinity;
|
|
207
|
+
var resultIndex = -1;
|
|
208
|
+
for (var i = 0; i > ind.length; i++) {
|
|
209
|
+
if (flag[i] === 1 && dist[i] < minDist) {
|
|
210
|
+
minDist = dist[i];
|
|
211
|
+
resultIndex = i;
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
if (resultIndex >= 0) {
|
|
215
|
+
flag[resultIndex] = 0;
|
|
216
|
+
return Math.floor(ind[resultIndex]);
|
|
217
|
+
}
|
|
218
|
+
else {
|
|
219
|
+
return -1;
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
exports.smallestFlagged = smallestFlagged;
|
|
223
|
+
|
|
224
|
+
|
|
225
|
+
/***/ }),
|
|
226
|
+
|
|
227
|
+
/***/ "./node_modules/umap-js/dist/index.js":
|
|
228
|
+
/*!********************************************!*\
|
|
229
|
+
!*** ./node_modules/umap-js/dist/index.js ***!
|
|
230
|
+
\********************************************/
|
|
231
|
+
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
|
|
232
|
+
|
|
233
|
+
|
|
234
|
+
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
|
235
|
+
var umap_1 = __webpack_require__(/*! ./umap */ "./node_modules/umap-js/dist/umap.js");
|
|
236
|
+
Object.defineProperty(exports, "UMAP", ({ enumerable: true, get: function () { return umap_1.UMAP; } }));
|
|
237
|
+
|
|
238
|
+
|
|
239
|
+
/***/ }),
|
|
240
|
+
|
|
241
|
+
/***/ "./node_modules/umap-js/dist/matrix.js":
|
|
242
|
+
/*!*********************************************!*\
|
|
243
|
+
!*** ./node_modules/umap-js/dist/matrix.js ***!
|
|
244
|
+
\*********************************************/
|
|
245
|
+
/***/ (function(__unused_webpack_module, exports, __webpack_require__) {
|
|
246
|
+
|
|
247
|
+
|
|
248
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
249
|
+
if (k2 === undefined) k2 = k;
|
|
250
|
+
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
|
|
251
|
+
}) : (function(o, m, k, k2) {
|
|
252
|
+
if (k2 === undefined) k2 = k;
|
|
253
|
+
o[k2] = m[k];
|
|
254
|
+
}));
|
|
255
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
256
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
257
|
+
}) : function(o, v) {
|
|
258
|
+
o["default"] = v;
|
|
259
|
+
});
|
|
260
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
261
|
+
if (mod && mod.__esModule) return mod;
|
|
262
|
+
var result = {};
|
|
263
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
264
|
+
__setModuleDefault(result, mod);
|
|
265
|
+
return result;
|
|
266
|
+
};
|
|
267
|
+
var __read = (this && this.__read) || function (o, n) {
|
|
268
|
+
var m = typeof Symbol === "function" && o[Symbol.iterator];
|
|
269
|
+
if (!m) return o;
|
|
270
|
+
var i = m.call(o), r, ar = [], e;
|
|
271
|
+
try {
|
|
272
|
+
while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
|
|
273
|
+
}
|
|
274
|
+
catch (error) { e = { error: error }; }
|
|
275
|
+
finally {
|
|
276
|
+
try {
|
|
277
|
+
if (r && !r.done && (m = i["return"])) m.call(i);
|
|
278
|
+
}
|
|
279
|
+
finally { if (e) throw e.error; }
|
|
280
|
+
}
|
|
281
|
+
return ar;
|
|
282
|
+
};
|
|
283
|
+
var __values = (this && this.__values) || function(o) {
|
|
284
|
+
var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
|
|
285
|
+
if (m) return m.call(o);
|
|
286
|
+
if (o && typeof o.length === "number") return {
|
|
287
|
+
next: function () {
|
|
288
|
+
if (o && i >= o.length) o = void 0;
|
|
289
|
+
return { value: o && o[i++], done: !o };
|
|
290
|
+
}
|
|
291
|
+
};
|
|
292
|
+
throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
|
|
293
|
+
};
|
|
294
|
+
var _a;
|
|
295
|
+
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
|
296
|
+
exports.getCSR = exports.normalize = exports.eliminateZeros = exports.multiplyScalar = exports.maximum = exports.subtract = exports.add = exports.pairwiseMultiply = exports.identity = exports.transpose = exports.SparseMatrix = void 0;
|
|
297
|
+
var utils = __importStar(__webpack_require__(/*! ./utils */ "./node_modules/umap-js/dist/utils.js"));
|
|
298
|
+
var SparseMatrix = (function () {
|
|
299
|
+
function SparseMatrix(rows, cols, values, dims) {
|
|
300
|
+
this.entries = new Map();
|
|
301
|
+
this.nRows = 0;
|
|
302
|
+
this.nCols = 0;
|
|
303
|
+
if (rows.length !== cols.length || rows.length !== values.length) {
|
|
304
|
+
throw new Error('rows, cols and values arrays must all have the same length');
|
|
305
|
+
}
|
|
306
|
+
this.nRows = dims[0];
|
|
307
|
+
this.nCols = dims[1];
|
|
308
|
+
for (var i = 0; i < values.length; i++) {
|
|
309
|
+
var row = rows[i];
|
|
310
|
+
var col = cols[i];
|
|
311
|
+
this.checkDims(row, col);
|
|
312
|
+
var key = this.makeKey(row, col);
|
|
313
|
+
this.entries.set(key, { value: values[i], row: row, col: col });
|
|
314
|
+
}
|
|
315
|
+
}
|
|
316
|
+
SparseMatrix.prototype.makeKey = function (row, col) {
|
|
317
|
+
return row + ":" + col;
|
|
318
|
+
};
|
|
319
|
+
SparseMatrix.prototype.checkDims = function (row, col) {
|
|
320
|
+
var withinBounds = row < this.nRows && col < this.nCols;
|
|
321
|
+
if (!withinBounds) {
|
|
322
|
+
throw new Error('row and/or col specified outside of matrix dimensions');
|
|
323
|
+
}
|
|
324
|
+
};
|
|
325
|
+
SparseMatrix.prototype.set = function (row, col, value) {
|
|
326
|
+
this.checkDims(row, col);
|
|
327
|
+
var key = this.makeKey(row, col);
|
|
328
|
+
if (!this.entries.has(key)) {
|
|
329
|
+
this.entries.set(key, { value: value, row: row, col: col });
|
|
330
|
+
}
|
|
331
|
+
else {
|
|
332
|
+
this.entries.get(key).value = value;
|
|
333
|
+
}
|
|
334
|
+
};
|
|
335
|
+
SparseMatrix.prototype.get = function (row, col, defaultValue) {
|
|
336
|
+
if (defaultValue === void 0) { defaultValue = 0; }
|
|
337
|
+
this.checkDims(row, col);
|
|
338
|
+
var key = this.makeKey(row, col);
|
|
339
|
+
if (this.entries.has(key)) {
|
|
340
|
+
return this.entries.get(key).value;
|
|
341
|
+
}
|
|
342
|
+
else {
|
|
343
|
+
return defaultValue;
|
|
344
|
+
}
|
|
345
|
+
};
|
|
346
|
+
SparseMatrix.prototype.getAll = function (ordered) {
|
|
347
|
+
if (ordered === void 0) { ordered = true; }
|
|
348
|
+
var rowColValues = [];
|
|
349
|
+
this.entries.forEach(function (value) {
|
|
350
|
+
rowColValues.push(value);
|
|
351
|
+
});
|
|
352
|
+
if (ordered) {
|
|
353
|
+
rowColValues.sort(function (a, b) {
|
|
354
|
+
if (a.row === b.row) {
|
|
355
|
+
return a.col - b.col;
|
|
356
|
+
}
|
|
357
|
+
else {
|
|
358
|
+
return a.row - b.row;
|
|
359
|
+
}
|
|
360
|
+
});
|
|
361
|
+
}
|
|
362
|
+
return rowColValues;
|
|
363
|
+
};
|
|
364
|
+
SparseMatrix.prototype.getDims = function () {
|
|
365
|
+
return [this.nRows, this.nCols];
|
|
366
|
+
};
|
|
367
|
+
SparseMatrix.prototype.getRows = function () {
|
|
368
|
+
return Array.from(this.entries, function (_a) {
|
|
369
|
+
var _b = __read(_a, 2), key = _b[0], value = _b[1];
|
|
370
|
+
return value.row;
|
|
371
|
+
});
|
|
372
|
+
};
|
|
373
|
+
SparseMatrix.prototype.getCols = function () {
|
|
374
|
+
return Array.from(this.entries, function (_a) {
|
|
375
|
+
var _b = __read(_a, 2), key = _b[0], value = _b[1];
|
|
376
|
+
return value.col;
|
|
377
|
+
});
|
|
378
|
+
};
|
|
379
|
+
SparseMatrix.prototype.getValues = function () {
|
|
380
|
+
return Array.from(this.entries, function (_a) {
|
|
381
|
+
var _b = __read(_a, 2), key = _b[0], value = _b[1];
|
|
382
|
+
return value.value;
|
|
383
|
+
});
|
|
384
|
+
};
|
|
385
|
+
SparseMatrix.prototype.forEach = function (fn) {
|
|
386
|
+
this.entries.forEach(function (value) { return fn(value.value, value.row, value.col); });
|
|
387
|
+
};
|
|
388
|
+
SparseMatrix.prototype.map = function (fn) {
|
|
389
|
+
var vals = [];
|
|
390
|
+
this.entries.forEach(function (value) {
|
|
391
|
+
vals.push(fn(value.value, value.row, value.col));
|
|
392
|
+
});
|
|
393
|
+
var dims = [this.nRows, this.nCols];
|
|
394
|
+
return new SparseMatrix(this.getRows(), this.getCols(), vals, dims);
|
|
395
|
+
};
|
|
396
|
+
SparseMatrix.prototype.toArray = function () {
|
|
397
|
+
var _this = this;
|
|
398
|
+
var rows = utils.empty(this.nRows);
|
|
399
|
+
var output = rows.map(function () {
|
|
400
|
+
return utils.zeros(_this.nCols);
|
|
401
|
+
});
|
|
402
|
+
this.entries.forEach(function (value) {
|
|
403
|
+
output[value.row][value.col] = value.value;
|
|
404
|
+
});
|
|
405
|
+
return output;
|
|
406
|
+
};
|
|
407
|
+
return SparseMatrix;
|
|
408
|
+
}());
|
|
409
|
+
exports.SparseMatrix = SparseMatrix;
|
|
410
|
+
function transpose(matrix) {
|
|
411
|
+
var cols = [];
|
|
412
|
+
var rows = [];
|
|
413
|
+
var vals = [];
|
|
414
|
+
matrix.forEach(function (value, row, col) {
|
|
415
|
+
cols.push(row);
|
|
416
|
+
rows.push(col);
|
|
417
|
+
vals.push(value);
|
|
418
|
+
});
|
|
419
|
+
var dims = [matrix.nCols, matrix.nRows];
|
|
420
|
+
return new SparseMatrix(rows, cols, vals, dims);
|
|
421
|
+
}
|
|
422
|
+
exports.transpose = transpose;
|
|
423
|
+
function identity(size) {
|
|
424
|
+
var _a = __read(size, 1), rows = _a[0];
|
|
425
|
+
var matrix = new SparseMatrix([], [], [], size);
|
|
426
|
+
for (var i = 0; i < rows; i++) {
|
|
427
|
+
matrix.set(i, i, 1);
|
|
428
|
+
}
|
|
429
|
+
return matrix;
|
|
430
|
+
}
|
|
431
|
+
exports.identity = identity;
|
|
432
|
+
function pairwiseMultiply(a, b) {
|
|
433
|
+
return elementWise(a, b, function (x, y) { return x * y; });
|
|
434
|
+
}
|
|
435
|
+
exports.pairwiseMultiply = pairwiseMultiply;
|
|
436
|
+
function add(a, b) {
|
|
437
|
+
return elementWise(a, b, function (x, y) { return x + y; });
|
|
438
|
+
}
|
|
439
|
+
exports.add = add;
|
|
440
|
+
function subtract(a, b) {
|
|
441
|
+
return elementWise(a, b, function (x, y) { return x - y; });
|
|
442
|
+
}
|
|
443
|
+
exports.subtract = subtract;
|
|
444
|
+
function maximum(a, b) {
|
|
445
|
+
return elementWise(a, b, function (x, y) { return (x > y ? x : y); });
|
|
446
|
+
}
|
|
447
|
+
exports.maximum = maximum;
|
|
448
|
+
function multiplyScalar(a, scalar) {
|
|
449
|
+
return a.map(function (value) {
|
|
450
|
+
return value * scalar;
|
|
451
|
+
});
|
|
452
|
+
}
|
|
453
|
+
exports.multiplyScalar = multiplyScalar;
|
|
454
|
+
function eliminateZeros(m) {
|
|
455
|
+
var zeroIndices = new Set();
|
|
456
|
+
var values = m.getValues();
|
|
457
|
+
var rows = m.getRows();
|
|
458
|
+
var cols = m.getCols();
|
|
459
|
+
for (var i = 0; i < values.length; i++) {
|
|
460
|
+
if (values[i] === 0) {
|
|
461
|
+
zeroIndices.add(i);
|
|
462
|
+
}
|
|
463
|
+
}
|
|
464
|
+
var removeByZeroIndex = function (_, index) { return !zeroIndices.has(index); };
|
|
465
|
+
var nextValues = values.filter(removeByZeroIndex);
|
|
466
|
+
var nextRows = rows.filter(removeByZeroIndex);
|
|
467
|
+
var nextCols = cols.filter(removeByZeroIndex);
|
|
468
|
+
return new SparseMatrix(nextRows, nextCols, nextValues, m.getDims());
|
|
469
|
+
}
|
|
470
|
+
exports.eliminateZeros = eliminateZeros;
|
|
471
|
+
function normalize(m, normType) {
|
|
472
|
+
var e_1, _a;
|
|
473
|
+
if (normType === void 0) { normType = "l2"; }
|
|
474
|
+
var normFn = normFns[normType];
|
|
475
|
+
var colsByRow = new Map();
|
|
476
|
+
m.forEach(function (_, row, col) {
|
|
477
|
+
var cols = colsByRow.get(row) || [];
|
|
478
|
+
cols.push(col);
|
|
479
|
+
colsByRow.set(row, cols);
|
|
480
|
+
});
|
|
481
|
+
var nextMatrix = new SparseMatrix([], [], [], m.getDims());
|
|
482
|
+
var _loop_1 = function (row) {
|
|
483
|
+
var cols = colsByRow.get(row).sort();
|
|
484
|
+
var vals = cols.map(function (col) { return m.get(row, col); });
|
|
485
|
+
var norm = normFn(vals);
|
|
486
|
+
for (var i = 0; i < norm.length; i++) {
|
|
487
|
+
nextMatrix.set(row, cols[i], norm[i]);
|
|
488
|
+
}
|
|
489
|
+
};
|
|
490
|
+
try {
|
|
491
|
+
for (var _b = __values(colsByRow.keys()), _c = _b.next(); !_c.done; _c = _b.next()) {
|
|
492
|
+
var row = _c.value;
|
|
493
|
+
_loop_1(row);
|
|
494
|
+
}
|
|
495
|
+
}
|
|
496
|
+
catch (e_1_1) { e_1 = { error: e_1_1 }; }
|
|
497
|
+
finally {
|
|
498
|
+
try {
|
|
499
|
+
if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
|
|
500
|
+
}
|
|
501
|
+
finally { if (e_1) throw e_1.error; }
|
|
502
|
+
}
|
|
503
|
+
return nextMatrix;
|
|
504
|
+
}
|
|
505
|
+
exports.normalize = normalize;
|
|
506
|
+
var normFns = (_a = {},
|
|
507
|
+
_a["max"] = function (xs) {
|
|
508
|
+
var max = -Infinity;
|
|
509
|
+
for (var i = 0; i < xs.length; i++) {
|
|
510
|
+
max = xs[i] > max ? xs[i] : max;
|
|
511
|
+
}
|
|
512
|
+
return xs.map(function (x) { return x / max; });
|
|
513
|
+
},
|
|
514
|
+
_a["l1"] = function (xs) {
|
|
515
|
+
var sum = 0;
|
|
516
|
+
for (var i = 0; i < xs.length; i++) {
|
|
517
|
+
sum += xs[i];
|
|
518
|
+
}
|
|
519
|
+
return xs.map(function (x) { return x / sum; });
|
|
520
|
+
},
|
|
521
|
+
_a["l2"] = function (xs) {
|
|
522
|
+
var sum = 0;
|
|
523
|
+
for (var i = 0; i < xs.length; i++) {
|
|
524
|
+
sum += Math.pow(xs[i], 2);
|
|
525
|
+
}
|
|
526
|
+
return xs.map(function (x) { return Math.sqrt(Math.pow(x, 2) / sum); });
|
|
527
|
+
},
|
|
528
|
+
_a);
|
|
529
|
+
function elementWise(a, b, op) {
|
|
530
|
+
var visited = new Set();
|
|
531
|
+
var rows = [];
|
|
532
|
+
var cols = [];
|
|
533
|
+
var vals = [];
|
|
534
|
+
var operate = function (row, col) {
|
|
535
|
+
rows.push(row);
|
|
536
|
+
cols.push(col);
|
|
537
|
+
var nextValue = op(a.get(row, col), b.get(row, col));
|
|
538
|
+
vals.push(nextValue);
|
|
539
|
+
};
|
|
540
|
+
var valuesA = a.getValues();
|
|
541
|
+
var rowsA = a.getRows();
|
|
542
|
+
var colsA = a.getCols();
|
|
543
|
+
for (var i = 0; i < valuesA.length; i++) {
|
|
544
|
+
var row = rowsA[i];
|
|
545
|
+
var col = colsA[i];
|
|
546
|
+
var key = row + ":" + col;
|
|
547
|
+
visited.add(key);
|
|
548
|
+
operate(row, col);
|
|
549
|
+
}
|
|
550
|
+
var valuesB = b.getValues();
|
|
551
|
+
var rowsB = b.getRows();
|
|
552
|
+
var colsB = b.getCols();
|
|
553
|
+
for (var i = 0; i < valuesB.length; i++) {
|
|
554
|
+
var row = rowsB[i];
|
|
555
|
+
var col = colsB[i];
|
|
556
|
+
var key = row + ":" + col;
|
|
557
|
+
if (visited.has(key))
|
|
558
|
+
continue;
|
|
559
|
+
operate(row, col);
|
|
560
|
+
}
|
|
561
|
+
var dims = [a.nRows, a.nCols];
|
|
562
|
+
return new SparseMatrix(rows, cols, vals, dims);
|
|
563
|
+
}
|
|
564
|
+
function getCSR(x) {
|
|
565
|
+
var entries = [];
|
|
566
|
+
x.forEach(function (value, row, col) {
|
|
567
|
+
entries.push({ value: value, row: row, col: col });
|
|
568
|
+
});
|
|
569
|
+
entries.sort(function (a, b) {
|
|
570
|
+
if (a.row === b.row) {
|
|
571
|
+
return a.col - b.col;
|
|
572
|
+
}
|
|
573
|
+
else {
|
|
574
|
+
return a.row - b.row;
|
|
575
|
+
}
|
|
576
|
+
});
|
|
577
|
+
var indices = [];
|
|
578
|
+
var values = [];
|
|
579
|
+
var indptr = [];
|
|
580
|
+
var currentRow = -1;
|
|
581
|
+
for (var i = 0; i < entries.length; i++) {
|
|
582
|
+
var _a = entries[i], row = _a.row, col = _a.col, value = _a.value;
|
|
583
|
+
if (row !== currentRow) {
|
|
584
|
+
currentRow = row;
|
|
585
|
+
indptr.push(i);
|
|
586
|
+
}
|
|
587
|
+
indices.push(col);
|
|
588
|
+
values.push(value);
|
|
589
|
+
}
|
|
590
|
+
return { indices: indices, values: values, indptr: indptr };
|
|
591
|
+
}
|
|
592
|
+
exports.getCSR = getCSR;
|
|
593
|
+
|
|
594
|
+
|
|
595
|
+
/***/ }),
|
|
596
|
+
|
|
597
|
+
/***/ "./node_modules/umap-js/dist/nn_descent.js":
|
|
598
|
+
/*!*************************************************!*\
|
|
599
|
+
!*** ./node_modules/umap-js/dist/nn_descent.js ***!
|
|
600
|
+
\*************************************************/
|
|
601
|
+
/***/ (function(__unused_webpack_module, exports, __webpack_require__) {
|
|
602
|
+
|
|
603
|
+
|
|
604
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
605
|
+
if (k2 === undefined) k2 = k;
|
|
606
|
+
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
|
|
607
|
+
}) : (function(o, m, k, k2) {
|
|
608
|
+
if (k2 === undefined) k2 = k;
|
|
609
|
+
o[k2] = m[k];
|
|
610
|
+
}));
|
|
611
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
612
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
613
|
+
}) : function(o, v) {
|
|
614
|
+
o["default"] = v;
|
|
615
|
+
});
|
|
616
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
617
|
+
if (mod && mod.__esModule) return mod;
|
|
618
|
+
var result = {};
|
|
619
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
620
|
+
__setModuleDefault(result, mod);
|
|
621
|
+
return result;
|
|
622
|
+
};
|
|
623
|
+
var __values = (this && this.__values) || function(o) {
|
|
624
|
+
var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
|
|
625
|
+
if (m) return m.call(o);
|
|
626
|
+
if (o && typeof o.length === "number") return {
|
|
627
|
+
next: function () {
|
|
628
|
+
if (o && i >= o.length) o = void 0;
|
|
629
|
+
return { value: o && o[i++], done: !o };
|
|
630
|
+
}
|
|
631
|
+
};
|
|
632
|
+
throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
|
|
633
|
+
};
|
|
634
|
+
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
|
635
|
+
exports.initializeSearch = exports.makeInitializedNNSearch = exports.makeInitializations = exports.makeNNDescent = void 0;
|
|
636
|
+
var heap = __importStar(__webpack_require__(/*! ./heap */ "./node_modules/umap-js/dist/heap.js"));
|
|
637
|
+
var matrix = __importStar(__webpack_require__(/*! ./matrix */ "./node_modules/umap-js/dist/matrix.js"));
|
|
638
|
+
var tree = __importStar(__webpack_require__(/*! ./tree */ "./node_modules/umap-js/dist/tree.js"));
|
|
639
|
+
var utils = __importStar(__webpack_require__(/*! ./utils */ "./node_modules/umap-js/dist/utils.js"));
|
|
640
|
+
function makeNNDescent(distanceFn, random) {
|
|
641
|
+
return function nNDescent(data, leafArray, nNeighbors, nIters, maxCandidates, delta, rho, rpTreeInit) {
|
|
642
|
+
if (nIters === void 0) { nIters = 10; }
|
|
643
|
+
if (maxCandidates === void 0) { maxCandidates = 50; }
|
|
644
|
+
if (delta === void 0) { delta = 0.001; }
|
|
645
|
+
if (rho === void 0) { rho = 0.5; }
|
|
646
|
+
if (rpTreeInit === void 0) { rpTreeInit = true; }
|
|
647
|
+
var nVertices = data.length;
|
|
648
|
+
var currentGraph = heap.makeHeap(data.length, nNeighbors);
|
|
649
|
+
for (var i = 0; i < data.length; i++) {
|
|
650
|
+
var indices = heap.rejectionSample(nNeighbors, data.length, random);
|
|
651
|
+
for (var j = 0; j < indices.length; j++) {
|
|
652
|
+
var d = distanceFn(data[i], data[indices[j]]);
|
|
653
|
+
heap.heapPush(currentGraph, i, d, indices[j], 1);
|
|
654
|
+
heap.heapPush(currentGraph, indices[j], d, i, 1);
|
|
655
|
+
}
|
|
656
|
+
}
|
|
657
|
+
if (rpTreeInit) {
|
|
658
|
+
for (var n = 0; n < leafArray.length; n++) {
|
|
659
|
+
for (var i = 0; i < leafArray[n].length; i++) {
|
|
660
|
+
if (leafArray[n][i] < 0) {
|
|
661
|
+
break;
|
|
662
|
+
}
|
|
663
|
+
for (var j = i + 1; j < leafArray[n].length; j++) {
|
|
664
|
+
if (leafArray[n][j] < 0) {
|
|
665
|
+
break;
|
|
666
|
+
}
|
|
667
|
+
var d = distanceFn(data[leafArray[n][i]], data[leafArray[n][j]]);
|
|
668
|
+
heap.heapPush(currentGraph, leafArray[n][i], d, leafArray[n][j], 1);
|
|
669
|
+
heap.heapPush(currentGraph, leafArray[n][j], d, leafArray[n][i], 1);
|
|
670
|
+
}
|
|
671
|
+
}
|
|
672
|
+
}
|
|
673
|
+
}
|
|
674
|
+
for (var n = 0; n < nIters; n++) {
|
|
675
|
+
var candidateNeighbors = heap.buildCandidates(currentGraph, nVertices, nNeighbors, maxCandidates, random);
|
|
676
|
+
var c = 0;
|
|
677
|
+
for (var i = 0; i < nVertices; i++) {
|
|
678
|
+
for (var j = 0; j < maxCandidates; j++) {
|
|
679
|
+
var p = Math.floor(candidateNeighbors[0][i][j]);
|
|
680
|
+
if (p < 0 || utils.tauRand(random) < rho) {
|
|
681
|
+
continue;
|
|
682
|
+
}
|
|
683
|
+
for (var k = 0; k < maxCandidates; k++) {
|
|
684
|
+
var q = Math.floor(candidateNeighbors[0][i][k]);
|
|
685
|
+
var cj = candidateNeighbors[2][i][j];
|
|
686
|
+
var ck = candidateNeighbors[2][i][k];
|
|
687
|
+
if (q < 0 || (!cj && !ck)) {
|
|
688
|
+
continue;
|
|
689
|
+
}
|
|
690
|
+
var d = distanceFn(data[p], data[q]);
|
|
691
|
+
c += heap.heapPush(currentGraph, p, d, q, 1);
|
|
692
|
+
c += heap.heapPush(currentGraph, q, d, p, 1);
|
|
693
|
+
}
|
|
694
|
+
}
|
|
695
|
+
}
|
|
696
|
+
if (c <= delta * nNeighbors * data.length) {
|
|
697
|
+
break;
|
|
698
|
+
}
|
|
699
|
+
}
|
|
700
|
+
var sorted = heap.deheapSort(currentGraph);
|
|
701
|
+
return sorted;
|
|
702
|
+
};
|
|
703
|
+
}
|
|
704
|
+
exports.makeNNDescent = makeNNDescent;
|
|
705
|
+
function makeInitializations(distanceFn) {
|
|
706
|
+
function initFromRandom(nNeighbors, data, queryPoints, _heap, random) {
|
|
707
|
+
for (var i = 0; i < queryPoints.length; i++) {
|
|
708
|
+
var indices = utils.rejectionSample(nNeighbors, data.length, random);
|
|
709
|
+
for (var j = 0; j < indices.length; j++) {
|
|
710
|
+
if (indices[j] < 0) {
|
|
711
|
+
continue;
|
|
712
|
+
}
|
|
713
|
+
var d = distanceFn(data[indices[j]], queryPoints[i]);
|
|
714
|
+
heap.heapPush(_heap, i, d, indices[j], 1);
|
|
715
|
+
}
|
|
716
|
+
}
|
|
717
|
+
}
|
|
718
|
+
function initFromTree(_tree, data, queryPoints, _heap, random) {
|
|
719
|
+
for (var i = 0; i < queryPoints.length; i++) {
|
|
720
|
+
var indices = tree.searchFlatTree(queryPoints[i], _tree, random);
|
|
721
|
+
for (var j = 0; j < indices.length; j++) {
|
|
722
|
+
if (indices[j] < 0) {
|
|
723
|
+
return;
|
|
724
|
+
}
|
|
725
|
+
var d = distanceFn(data[indices[j]], queryPoints[i]);
|
|
726
|
+
heap.heapPush(_heap, i, d, indices[j], 1);
|
|
727
|
+
}
|
|
728
|
+
}
|
|
729
|
+
return;
|
|
730
|
+
}
|
|
731
|
+
return { initFromRandom: initFromRandom, initFromTree: initFromTree };
|
|
732
|
+
}
|
|
733
|
+
exports.makeInitializations = makeInitializations;
|
|
734
|
+
function makeInitializedNNSearch(distanceFn) {
|
|
735
|
+
return function nnSearchFn(data, graph, initialization, queryPoints) {
|
|
736
|
+
var e_1, _a;
|
|
737
|
+
var _b = matrix.getCSR(graph), indices = _b.indices, indptr = _b.indptr;
|
|
738
|
+
for (var i = 0; i < queryPoints.length; i++) {
|
|
739
|
+
var tried = new Set(initialization[0][i]);
|
|
740
|
+
while (true) {
|
|
741
|
+
var vertex = heap.smallestFlagged(initialization, i);
|
|
742
|
+
if (vertex === -1) {
|
|
743
|
+
break;
|
|
744
|
+
}
|
|
745
|
+
var candidates = indices.slice(indptr[vertex], indptr[vertex + 1]);
|
|
746
|
+
try {
|
|
747
|
+
for (var candidates_1 = (e_1 = void 0, __values(candidates)), candidates_1_1 = candidates_1.next(); !candidates_1_1.done; candidates_1_1 = candidates_1.next()) {
|
|
748
|
+
var candidate = candidates_1_1.value;
|
|
749
|
+
if (candidate === vertex ||
|
|
750
|
+
candidate === -1 ||
|
|
751
|
+
tried.has(candidate)) {
|
|
752
|
+
continue;
|
|
753
|
+
}
|
|
754
|
+
var d = distanceFn(data[candidate], queryPoints[i]);
|
|
755
|
+
heap.uncheckedHeapPush(initialization, i, d, candidate, 1);
|
|
756
|
+
tried.add(candidate);
|
|
757
|
+
}
|
|
758
|
+
}
|
|
759
|
+
catch (e_1_1) { e_1 = { error: e_1_1 }; }
|
|
760
|
+
finally {
|
|
761
|
+
try {
|
|
762
|
+
if (candidates_1_1 && !candidates_1_1.done && (_a = candidates_1.return)) _a.call(candidates_1);
|
|
763
|
+
}
|
|
764
|
+
finally { if (e_1) throw e_1.error; }
|
|
765
|
+
}
|
|
766
|
+
}
|
|
767
|
+
}
|
|
768
|
+
return initialization;
|
|
769
|
+
};
|
|
770
|
+
}
|
|
771
|
+
exports.makeInitializedNNSearch = makeInitializedNNSearch;
|
|
772
|
+
function initializeSearch(forest, data, queryPoints, nNeighbors, initFromRandom, initFromTree, random) {
|
|
773
|
+
var e_2, _a;
|
|
774
|
+
var results = heap.makeHeap(queryPoints.length, nNeighbors);
|
|
775
|
+
initFromRandom(nNeighbors, data, queryPoints, results, random);
|
|
776
|
+
if (forest) {
|
|
777
|
+
try {
|
|
778
|
+
for (var forest_1 = __values(forest), forest_1_1 = forest_1.next(); !forest_1_1.done; forest_1_1 = forest_1.next()) {
|
|
779
|
+
var tree_1 = forest_1_1.value;
|
|
780
|
+
initFromTree(tree_1, data, queryPoints, results, random);
|
|
781
|
+
}
|
|
782
|
+
}
|
|
783
|
+
catch (e_2_1) { e_2 = { error: e_2_1 }; }
|
|
784
|
+
finally {
|
|
785
|
+
try {
|
|
786
|
+
if (forest_1_1 && !forest_1_1.done && (_a = forest_1.return)) _a.call(forest_1);
|
|
787
|
+
}
|
|
788
|
+
finally { if (e_2) throw e_2.error; }
|
|
789
|
+
}
|
|
790
|
+
}
|
|
791
|
+
return results;
|
|
792
|
+
}
|
|
793
|
+
exports.initializeSearch = initializeSearch;
|
|
794
|
+
|
|
795
|
+
|
|
796
|
+
/***/ }),
|
|
797
|
+
|
|
798
|
+
/***/ "./node_modules/umap-js/dist/tree.js":
|
|
799
|
+
/*!*******************************************!*\
|
|
800
|
+
!*** ./node_modules/umap-js/dist/tree.js ***!
|
|
801
|
+
\*******************************************/
|
|
802
|
+
/***/ (function(__unused_webpack_module, exports, __webpack_require__) {
|
|
803
|
+
|
|
804
|
+
|
|
805
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
806
|
+
if (k2 === undefined) k2 = k;
|
|
807
|
+
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
|
|
808
|
+
}) : (function(o, m, k, k2) {
|
|
809
|
+
if (k2 === undefined) k2 = k;
|
|
810
|
+
o[k2] = m[k];
|
|
811
|
+
}));
|
|
812
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
813
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
814
|
+
}) : function(o, v) {
|
|
815
|
+
o["default"] = v;
|
|
816
|
+
});
|
|
817
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
818
|
+
if (mod && mod.__esModule) return mod;
|
|
819
|
+
var result = {};
|
|
820
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
821
|
+
__setModuleDefault(result, mod);
|
|
822
|
+
return result;
|
|
823
|
+
};
|
|
824
|
+
var __read = (this && this.__read) || function (o, n) {
|
|
825
|
+
var m = typeof Symbol === "function" && o[Symbol.iterator];
|
|
826
|
+
if (!m) return o;
|
|
827
|
+
var i = m.call(o), r, ar = [], e;
|
|
828
|
+
try {
|
|
829
|
+
while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
|
|
830
|
+
}
|
|
831
|
+
catch (error) { e = { error: error }; }
|
|
832
|
+
finally {
|
|
833
|
+
try {
|
|
834
|
+
if (r && !r.done && (m = i["return"])) m.call(i);
|
|
835
|
+
}
|
|
836
|
+
finally { if (e) throw e.error; }
|
|
837
|
+
}
|
|
838
|
+
return ar;
|
|
839
|
+
};
|
|
840
|
+
var __spread = (this && this.__spread) || function () {
|
|
841
|
+
for (var ar = [], i = 0; i < arguments.length; i++) ar = ar.concat(__read(arguments[i]));
|
|
842
|
+
return ar;
|
|
843
|
+
};
|
|
844
|
+
var __values = (this && this.__values) || function(o) {
|
|
845
|
+
var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
|
|
846
|
+
if (m) return m.call(o);
|
|
847
|
+
if (o && typeof o.length === "number") return {
|
|
848
|
+
next: function () {
|
|
849
|
+
if (o && i >= o.length) o = void 0;
|
|
850
|
+
return { value: o && o[i++], done: !o };
|
|
851
|
+
}
|
|
852
|
+
};
|
|
853
|
+
throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
|
|
854
|
+
};
|
|
855
|
+
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
|
856
|
+
exports.searchFlatTree = exports.makeLeafArray = exports.makeForest = exports.FlatTree = void 0;
|
|
857
|
+
var utils = __importStar(__webpack_require__(/*! ./utils */ "./node_modules/umap-js/dist/utils.js"));
|
|
858
|
+
var FlatTree = (function () {
|
|
859
|
+
function FlatTree(hyperplanes, offsets, children, indices) {
|
|
860
|
+
this.hyperplanes = hyperplanes;
|
|
861
|
+
this.offsets = offsets;
|
|
862
|
+
this.children = children;
|
|
863
|
+
this.indices = indices;
|
|
864
|
+
}
|
|
865
|
+
return FlatTree;
|
|
866
|
+
}());
|
|
867
|
+
exports.FlatTree = FlatTree;
|
|
868
|
+
function makeForest(data, nNeighbors, nTrees, random) {
|
|
869
|
+
var leafSize = Math.max(10, nNeighbors);
|
|
870
|
+
var trees = utils
|
|
871
|
+
.range(nTrees)
|
|
872
|
+
.map(function (_, i) { return makeTree(data, leafSize, i, random); });
|
|
873
|
+
var forest = trees.map(function (tree) { return flattenTree(tree, leafSize); });
|
|
874
|
+
return forest;
|
|
875
|
+
}
|
|
876
|
+
exports.makeForest = makeForest;
|
|
877
|
+
function makeTree(data, leafSize, n, random) {
|
|
878
|
+
if (leafSize === void 0) { leafSize = 30; }
|
|
879
|
+
var indices = utils.range(data.length);
|
|
880
|
+
var tree = makeEuclideanTree(data, indices, leafSize, n, random);
|
|
881
|
+
return tree;
|
|
882
|
+
}
|
|
883
|
+
function makeEuclideanTree(data, indices, leafSize, q, random) {
|
|
884
|
+
if (leafSize === void 0) { leafSize = 30; }
|
|
885
|
+
if (indices.length > leafSize) {
|
|
886
|
+
var splitResults = euclideanRandomProjectionSplit(data, indices, random);
|
|
887
|
+
var indicesLeft = splitResults.indicesLeft, indicesRight = splitResults.indicesRight, hyperplane = splitResults.hyperplane, offset = splitResults.offset;
|
|
888
|
+
var leftChild = makeEuclideanTree(data, indicesLeft, leafSize, q + 1, random);
|
|
889
|
+
var rightChild = makeEuclideanTree(data, indicesRight, leafSize, q + 1, random);
|
|
890
|
+
var node = { leftChild: leftChild, rightChild: rightChild, isLeaf: false, hyperplane: hyperplane, offset: offset };
|
|
891
|
+
return node;
|
|
892
|
+
}
|
|
893
|
+
else {
|
|
894
|
+
var node = { indices: indices, isLeaf: true };
|
|
895
|
+
return node;
|
|
896
|
+
}
|
|
897
|
+
}
|
|
898
|
+
function euclideanRandomProjectionSplit(data, indices, random) {
|
|
899
|
+
var dim = data[0].length;
|
|
900
|
+
var leftIndex = utils.tauRandInt(indices.length, random);
|
|
901
|
+
var rightIndex = utils.tauRandInt(indices.length, random);
|
|
902
|
+
rightIndex += leftIndex === rightIndex ? 1 : 0;
|
|
903
|
+
rightIndex = rightIndex % indices.length;
|
|
904
|
+
var left = indices[leftIndex];
|
|
905
|
+
var right = indices[rightIndex];
|
|
906
|
+
var hyperplaneOffset = 0;
|
|
907
|
+
var hyperplaneVector = utils.zeros(dim);
|
|
908
|
+
for (var i = 0; i < hyperplaneVector.length; i++) {
|
|
909
|
+
hyperplaneVector[i] = data[left][i] - data[right][i];
|
|
910
|
+
hyperplaneOffset -=
|
|
911
|
+
(hyperplaneVector[i] * (data[left][i] + data[right][i])) / 2.0;
|
|
912
|
+
}
|
|
913
|
+
var nLeft = 0;
|
|
914
|
+
var nRight = 0;
|
|
915
|
+
var side = utils.zeros(indices.length);
|
|
916
|
+
for (var i = 0; i < indices.length; i++) {
|
|
917
|
+
var margin = hyperplaneOffset;
|
|
918
|
+
for (var d = 0; d < dim; d++) {
|
|
919
|
+
margin += hyperplaneVector[d] * data[indices[i]][d];
|
|
920
|
+
}
|
|
921
|
+
if (margin === 0) {
|
|
922
|
+
side[i] = utils.tauRandInt(2, random);
|
|
923
|
+
if (side[i] === 0) {
|
|
924
|
+
nLeft += 1;
|
|
925
|
+
}
|
|
926
|
+
else {
|
|
927
|
+
nRight += 1;
|
|
928
|
+
}
|
|
929
|
+
}
|
|
930
|
+
else if (margin > 0) {
|
|
931
|
+
side[i] = 0;
|
|
932
|
+
nLeft += 1;
|
|
933
|
+
}
|
|
934
|
+
else {
|
|
935
|
+
side[i] = 1;
|
|
936
|
+
nRight += 1;
|
|
937
|
+
}
|
|
938
|
+
}
|
|
939
|
+
var indicesLeft = utils.zeros(nLeft);
|
|
940
|
+
var indicesRight = utils.zeros(nRight);
|
|
941
|
+
nLeft = 0;
|
|
942
|
+
nRight = 0;
|
|
943
|
+
for (var i = 0; i < side.length; i++) {
|
|
944
|
+
if (side[i] === 0) {
|
|
945
|
+
indicesLeft[nLeft] = indices[i];
|
|
946
|
+
nLeft += 1;
|
|
947
|
+
}
|
|
948
|
+
else {
|
|
949
|
+
indicesRight[nRight] = indices[i];
|
|
950
|
+
nRight += 1;
|
|
951
|
+
}
|
|
952
|
+
}
|
|
953
|
+
return {
|
|
954
|
+
indicesLeft: indicesLeft,
|
|
955
|
+
indicesRight: indicesRight,
|
|
956
|
+
hyperplane: hyperplaneVector,
|
|
957
|
+
offset: hyperplaneOffset,
|
|
958
|
+
};
|
|
959
|
+
}
|
|
960
|
+
function flattenTree(tree, leafSize) {
|
|
961
|
+
var nNodes = numNodes(tree);
|
|
962
|
+
var nLeaves = numLeaves(tree);
|
|
963
|
+
var hyperplanes = utils
|
|
964
|
+
.range(nNodes)
|
|
965
|
+
.map(function () { return utils.zeros(tree.hyperplane ? tree.hyperplane.length : 0); });
|
|
966
|
+
var offsets = utils.zeros(nNodes);
|
|
967
|
+
var children = utils.range(nNodes).map(function () { return [-1, -1]; });
|
|
968
|
+
var indices = utils
|
|
969
|
+
.range(nLeaves)
|
|
970
|
+
.map(function () { return utils.range(leafSize).map(function () { return -1; }); });
|
|
971
|
+
recursiveFlatten(tree, hyperplanes, offsets, children, indices, 0, 0);
|
|
972
|
+
return new FlatTree(hyperplanes, offsets, children, indices);
|
|
973
|
+
}
|
|
974
|
+
function recursiveFlatten(tree, hyperplanes, offsets, children, indices, nodeNum, leafNum) {
|
|
975
|
+
var _a;
|
|
976
|
+
if (tree.isLeaf) {
|
|
977
|
+
children[nodeNum][0] = -leafNum;
|
|
978
|
+
(_a = indices[leafNum]).splice.apply(_a, __spread([0, tree.indices.length], tree.indices));
|
|
979
|
+
leafNum += 1;
|
|
980
|
+
return { nodeNum: nodeNum, leafNum: leafNum };
|
|
981
|
+
}
|
|
982
|
+
else {
|
|
983
|
+
hyperplanes[nodeNum] = tree.hyperplane;
|
|
984
|
+
offsets[nodeNum] = tree.offset;
|
|
985
|
+
children[nodeNum][0] = nodeNum + 1;
|
|
986
|
+
var oldNodeNum = nodeNum;
|
|
987
|
+
var res = recursiveFlatten(tree.leftChild, hyperplanes, offsets, children, indices, nodeNum + 1, leafNum);
|
|
988
|
+
nodeNum = res.nodeNum;
|
|
989
|
+
leafNum = res.leafNum;
|
|
990
|
+
children[oldNodeNum][1] = nodeNum + 1;
|
|
991
|
+
res = recursiveFlatten(tree.rightChild, hyperplanes, offsets, children, indices, nodeNum + 1, leafNum);
|
|
992
|
+
return { nodeNum: res.nodeNum, leafNum: res.leafNum };
|
|
993
|
+
}
|
|
994
|
+
}
|
|
995
|
+
function numNodes(tree) {
|
|
996
|
+
if (tree.isLeaf) {
|
|
997
|
+
return 1;
|
|
998
|
+
}
|
|
999
|
+
else {
|
|
1000
|
+
return 1 + numNodes(tree.leftChild) + numNodes(tree.rightChild);
|
|
1001
|
+
}
|
|
1002
|
+
}
|
|
1003
|
+
function numLeaves(tree) {
|
|
1004
|
+
if (tree.isLeaf) {
|
|
1005
|
+
return 1;
|
|
1006
|
+
}
|
|
1007
|
+
else {
|
|
1008
|
+
return numLeaves(tree.leftChild) + numLeaves(tree.rightChild);
|
|
1009
|
+
}
|
|
1010
|
+
}
|
|
1011
|
+
function makeLeafArray(rpForest) {
|
|
1012
|
+
var e_1, _a;
|
|
1013
|
+
if (rpForest.length > 0) {
|
|
1014
|
+
var output = [];
|
|
1015
|
+
try {
|
|
1016
|
+
for (var rpForest_1 = __values(rpForest), rpForest_1_1 = rpForest_1.next(); !rpForest_1_1.done; rpForest_1_1 = rpForest_1.next()) {
|
|
1017
|
+
var tree = rpForest_1_1.value;
|
|
1018
|
+
output.push.apply(output, __spread(tree.indices));
|
|
1019
|
+
}
|
|
1020
|
+
}
|
|
1021
|
+
catch (e_1_1) { e_1 = { error: e_1_1 }; }
|
|
1022
|
+
finally {
|
|
1023
|
+
try {
|
|
1024
|
+
if (rpForest_1_1 && !rpForest_1_1.done && (_a = rpForest_1.return)) _a.call(rpForest_1);
|
|
1025
|
+
}
|
|
1026
|
+
finally { if (e_1) throw e_1.error; }
|
|
1027
|
+
}
|
|
1028
|
+
return output;
|
|
1029
|
+
}
|
|
1030
|
+
else {
|
|
1031
|
+
return [[-1]];
|
|
1032
|
+
}
|
|
1033
|
+
}
|
|
1034
|
+
exports.makeLeafArray = makeLeafArray;
|
|
1035
|
+
function selectSide(hyperplane, offset, point, random) {
|
|
1036
|
+
var margin = offset;
|
|
1037
|
+
for (var d = 0; d < point.length; d++) {
|
|
1038
|
+
margin += hyperplane[d] * point[d];
|
|
1039
|
+
}
|
|
1040
|
+
if (margin === 0) {
|
|
1041
|
+
var side = utils.tauRandInt(2, random);
|
|
1042
|
+
return side;
|
|
1043
|
+
}
|
|
1044
|
+
else if (margin > 0) {
|
|
1045
|
+
return 0;
|
|
1046
|
+
}
|
|
1047
|
+
else {
|
|
1048
|
+
return 1;
|
|
1049
|
+
}
|
|
1050
|
+
}
|
|
1051
|
+
function searchFlatTree(point, tree, random) {
|
|
1052
|
+
var node = 0;
|
|
1053
|
+
while (tree.children[node][0] > 0) {
|
|
1054
|
+
var side = selectSide(tree.hyperplanes[node], tree.offsets[node], point, random);
|
|
1055
|
+
if (side === 0) {
|
|
1056
|
+
node = tree.children[node][0];
|
|
1057
|
+
}
|
|
1058
|
+
else {
|
|
1059
|
+
node = tree.children[node][1];
|
|
1060
|
+
}
|
|
1061
|
+
}
|
|
1062
|
+
var index = -1 * tree.children[node][0];
|
|
1063
|
+
return tree.indices[index];
|
|
1064
|
+
}
|
|
1065
|
+
exports.searchFlatTree = searchFlatTree;
|
|
1066
|
+
|
|
1067
|
+
|
|
1068
|
+
/***/ }),
|
|
1069
|
+
|
|
1070
|
+
/***/ "./node_modules/umap-js/dist/umap.js":
|
|
1071
|
+
/*!*******************************************!*\
|
|
1072
|
+
!*** ./node_modules/umap-js/dist/umap.js ***!
|
|
1073
|
+
\*******************************************/
|
|
1074
|
+
/***/ (function(__unused_webpack_module, exports, __webpack_require__) {
|
|
1075
|
+
|
|
1076
|
+
|
|
1077
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
1078
|
+
if (k2 === undefined) k2 = k;
|
|
1079
|
+
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
|
|
1080
|
+
}) : (function(o, m, k, k2) {
|
|
1081
|
+
if (k2 === undefined) k2 = k;
|
|
1082
|
+
o[k2] = m[k];
|
|
1083
|
+
}));
|
|
1084
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
1085
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
1086
|
+
}) : function(o, v) {
|
|
1087
|
+
o["default"] = v;
|
|
1088
|
+
});
|
|
1089
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
1090
|
+
if (mod && mod.__esModule) return mod;
|
|
1091
|
+
var result = {};
|
|
1092
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
1093
|
+
__setModuleDefault(result, mod);
|
|
1094
|
+
return result;
|
|
1095
|
+
};
|
|
1096
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
1097
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
1098
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
1099
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
1100
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
1101
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
1102
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
1103
|
+
});
|
|
1104
|
+
};
|
|
1105
|
+
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
1106
|
+
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
|
|
1107
|
+
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
1108
|
+
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
1109
|
+
function step(op) {
|
|
1110
|
+
if (f) throw new TypeError("Generator is already executing.");
|
|
1111
|
+
while (_) try {
|
|
1112
|
+
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
1113
|
+
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
1114
|
+
switch (op[0]) {
|
|
1115
|
+
case 0: case 1: t = op; break;
|
|
1116
|
+
case 4: _.label++; return { value: op[1], done: false };
|
|
1117
|
+
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
1118
|
+
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
1119
|
+
default:
|
|
1120
|
+
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
1121
|
+
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
1122
|
+
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
1123
|
+
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
1124
|
+
if (t[2]) _.ops.pop();
|
|
1125
|
+
_.trys.pop(); continue;
|
|
1126
|
+
}
|
|
1127
|
+
op = body.call(thisArg, _);
|
|
1128
|
+
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
1129
|
+
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
1130
|
+
}
|
|
1131
|
+
};
|
|
1132
|
+
var __read = (this && this.__read) || function (o, n) {
|
|
1133
|
+
var m = typeof Symbol === "function" && o[Symbol.iterator];
|
|
1134
|
+
if (!m) return o;
|
|
1135
|
+
var i = m.call(o), r, ar = [], e;
|
|
1136
|
+
try {
|
|
1137
|
+
while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
|
|
1138
|
+
}
|
|
1139
|
+
catch (error) { e = { error: error }; }
|
|
1140
|
+
finally {
|
|
1141
|
+
try {
|
|
1142
|
+
if (r && !r.done && (m = i["return"])) m.call(i);
|
|
1143
|
+
}
|
|
1144
|
+
finally { if (e) throw e.error; }
|
|
1145
|
+
}
|
|
1146
|
+
return ar;
|
|
1147
|
+
};
|
|
1148
|
+
var __spread = (this && this.__spread) || function () {
|
|
1149
|
+
for (var ar = [], i = 0; i < arguments.length; i++) ar = ar.concat(__read(arguments[i]));
|
|
1150
|
+
return ar;
|
|
1151
|
+
};
|
|
1152
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
1153
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
1154
|
+
};
|
|
1155
|
+
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
|
1156
|
+
exports.initTransform = exports.resetLocalConnectivity = exports.fastIntersection = exports.findABParams = exports.cosine = exports.euclidean = exports.UMAP = void 0;
|
|
1157
|
+
var heap = __importStar(__webpack_require__(/*! ./heap */ "./node_modules/umap-js/dist/heap.js"));
|
|
1158
|
+
var matrix = __importStar(__webpack_require__(/*! ./matrix */ "./node_modules/umap-js/dist/matrix.js"));
|
|
1159
|
+
var nnDescent = __importStar(__webpack_require__(/*! ./nn_descent */ "./node_modules/umap-js/dist/nn_descent.js"));
|
|
1160
|
+
var tree = __importStar(__webpack_require__(/*! ./tree */ "./node_modules/umap-js/dist/tree.js"));
|
|
1161
|
+
var utils = __importStar(__webpack_require__(/*! ./utils */ "./node_modules/umap-js/dist/utils.js"));
|
|
1162
|
+
var ml_levenberg_marquardt_1 = __importDefault(__webpack_require__(/*! ml-levenberg-marquardt */ "./node_modules/umap-js/node_modules/ml-levenberg-marquardt/src/index.js"));
|
|
1163
|
+
var SMOOTH_K_TOLERANCE = 1e-5;
|
|
1164
|
+
var MIN_K_DIST_SCALE = 1e-3;
|
|
1165
|
+
var UMAP = (function () {
|
|
1166
|
+
function UMAP(params) {
|
|
1167
|
+
var _this = this;
|
|
1168
|
+
if (params === void 0) { params = {}; }
|
|
1169
|
+
this.learningRate = 1.0;
|
|
1170
|
+
this.localConnectivity = 1.0;
|
|
1171
|
+
this.minDist = 0.1;
|
|
1172
|
+
this.nComponents = 2;
|
|
1173
|
+
this.nEpochs = 0;
|
|
1174
|
+
this.nNeighbors = 15;
|
|
1175
|
+
this.negativeSampleRate = 5;
|
|
1176
|
+
this.random = Math.random;
|
|
1177
|
+
this.repulsionStrength = 1.0;
|
|
1178
|
+
this.setOpMixRatio = 1.0;
|
|
1179
|
+
this.spread = 1.0;
|
|
1180
|
+
this.transformQueueSize = 4.0;
|
|
1181
|
+
this.targetMetric = "categorical";
|
|
1182
|
+
this.targetWeight = 0.5;
|
|
1183
|
+
this.targetNNeighbors = this.nNeighbors;
|
|
1184
|
+
this.distanceFn = euclidean;
|
|
1185
|
+
this.isInitialized = false;
|
|
1186
|
+
this.rpForest = [];
|
|
1187
|
+
this.embedding = [];
|
|
1188
|
+
this.optimizationState = new OptimizationState();
|
|
1189
|
+
var setParam = function (key) {
|
|
1190
|
+
if (params[key] !== undefined)
|
|
1191
|
+
_this[key] = params[key];
|
|
1192
|
+
};
|
|
1193
|
+
setParam('distanceFn');
|
|
1194
|
+
setParam('learningRate');
|
|
1195
|
+
setParam('localConnectivity');
|
|
1196
|
+
setParam('minDist');
|
|
1197
|
+
setParam('nComponents');
|
|
1198
|
+
setParam('nEpochs');
|
|
1199
|
+
setParam('nNeighbors');
|
|
1200
|
+
setParam('negativeSampleRate');
|
|
1201
|
+
setParam('random');
|
|
1202
|
+
setParam('repulsionStrength');
|
|
1203
|
+
setParam('setOpMixRatio');
|
|
1204
|
+
setParam('spread');
|
|
1205
|
+
setParam('transformQueueSize');
|
|
1206
|
+
}
|
|
1207
|
+
UMAP.prototype.fit = function (X) {
|
|
1208
|
+
this.initializeFit(X);
|
|
1209
|
+
this.optimizeLayout();
|
|
1210
|
+
return this.embedding;
|
|
1211
|
+
};
|
|
1212
|
+
UMAP.prototype.fitAsync = function (X, callback) {
|
|
1213
|
+
if (callback === void 0) { callback = function () { return true; }; }
|
|
1214
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
1215
|
+
return __generator(this, function (_a) {
|
|
1216
|
+
switch (_a.label) {
|
|
1217
|
+
case 0:
|
|
1218
|
+
this.initializeFit(X);
|
|
1219
|
+
return [4, this.optimizeLayoutAsync(callback)];
|
|
1220
|
+
case 1:
|
|
1221
|
+
_a.sent();
|
|
1222
|
+
return [2, this.embedding];
|
|
1223
|
+
}
|
|
1224
|
+
});
|
|
1225
|
+
});
|
|
1226
|
+
};
|
|
1227
|
+
UMAP.prototype.setSupervisedProjection = function (Y, params) {
|
|
1228
|
+
if (params === void 0) { params = {}; }
|
|
1229
|
+
this.Y = Y;
|
|
1230
|
+
this.targetMetric = params.targetMetric || this.targetMetric;
|
|
1231
|
+
this.targetWeight = params.targetWeight || this.targetWeight;
|
|
1232
|
+
this.targetNNeighbors = params.targetNNeighbors || this.targetNNeighbors;
|
|
1233
|
+
};
|
|
1234
|
+
UMAP.prototype.setPrecomputedKNN = function (knnIndices, knnDistances) {
|
|
1235
|
+
this.knnIndices = knnIndices;
|
|
1236
|
+
this.knnDistances = knnDistances;
|
|
1237
|
+
};
|
|
1238
|
+
UMAP.prototype.initializeFit = function (X) {
|
|
1239
|
+
if (X.length <= this.nNeighbors) {
|
|
1240
|
+
throw new Error("Not enough data points (" + X.length + ") to create nNeighbors: " + this.nNeighbors + ". Add more data points or adjust the configuration.");
|
|
1241
|
+
}
|
|
1242
|
+
if (this.X === X && this.isInitialized) {
|
|
1243
|
+
return this.getNEpochs();
|
|
1244
|
+
}
|
|
1245
|
+
this.X = X;
|
|
1246
|
+
if (!this.knnIndices && !this.knnDistances) {
|
|
1247
|
+
var knnResults = this.nearestNeighbors(X);
|
|
1248
|
+
this.knnIndices = knnResults.knnIndices;
|
|
1249
|
+
this.knnDistances = knnResults.knnDistances;
|
|
1250
|
+
}
|
|
1251
|
+
this.graph = this.fuzzySimplicialSet(X, this.nNeighbors, this.setOpMixRatio);
|
|
1252
|
+
this.makeSearchFns();
|
|
1253
|
+
this.searchGraph = this.makeSearchGraph(X);
|
|
1254
|
+
this.processGraphForSupervisedProjection();
|
|
1255
|
+
var _a = this.initializeSimplicialSetEmbedding(), head = _a.head, tail = _a.tail, epochsPerSample = _a.epochsPerSample;
|
|
1256
|
+
this.optimizationState.head = head;
|
|
1257
|
+
this.optimizationState.tail = tail;
|
|
1258
|
+
this.optimizationState.epochsPerSample = epochsPerSample;
|
|
1259
|
+
this.initializeOptimization();
|
|
1260
|
+
this.prepareForOptimizationLoop();
|
|
1261
|
+
this.isInitialized = true;
|
|
1262
|
+
return this.getNEpochs();
|
|
1263
|
+
};
|
|
1264
|
+
UMAP.prototype.makeSearchFns = function () {
|
|
1265
|
+
var _a = nnDescent.makeInitializations(this.distanceFn), initFromTree = _a.initFromTree, initFromRandom = _a.initFromRandom;
|
|
1266
|
+
this.initFromTree = initFromTree;
|
|
1267
|
+
this.initFromRandom = initFromRandom;
|
|
1268
|
+
this.search = nnDescent.makeInitializedNNSearch(this.distanceFn);
|
|
1269
|
+
};
|
|
1270
|
+
UMAP.prototype.makeSearchGraph = function (X) {
|
|
1271
|
+
var knnIndices = this.knnIndices;
|
|
1272
|
+
var knnDistances = this.knnDistances;
|
|
1273
|
+
var dims = [X.length, X.length];
|
|
1274
|
+
var searchGraph = new matrix.SparseMatrix([], [], [], dims);
|
|
1275
|
+
for (var i = 0; i < knnIndices.length; i++) {
|
|
1276
|
+
var knn = knnIndices[i];
|
|
1277
|
+
var distances = knnDistances[i];
|
|
1278
|
+
for (var j = 0; j < knn.length; j++) {
|
|
1279
|
+
var neighbor = knn[j];
|
|
1280
|
+
var distance = distances[j];
|
|
1281
|
+
if (distance > 0) {
|
|
1282
|
+
searchGraph.set(i, neighbor, distance);
|
|
1283
|
+
}
|
|
1284
|
+
}
|
|
1285
|
+
}
|
|
1286
|
+
var transpose = matrix.transpose(searchGraph);
|
|
1287
|
+
return matrix.maximum(searchGraph, transpose);
|
|
1288
|
+
};
|
|
1289
|
+
UMAP.prototype.transform = function (toTransform) {
|
|
1290
|
+
var _this = this;
|
|
1291
|
+
var rawData = this.X;
|
|
1292
|
+
if (rawData === undefined || rawData.length === 0) {
|
|
1293
|
+
throw new Error('No data has been fit.');
|
|
1294
|
+
}
|
|
1295
|
+
var nNeighbors = Math.floor(this.nNeighbors * this.transformQueueSize);
|
|
1296
|
+
nNeighbors = Math.min(rawData.length, nNeighbors);
|
|
1297
|
+
var init = nnDescent.initializeSearch(this.rpForest, rawData, toTransform, nNeighbors, this.initFromRandom, this.initFromTree, this.random);
|
|
1298
|
+
var result = this.search(rawData, this.searchGraph, init, toTransform);
|
|
1299
|
+
var _a = heap.deheapSort(result), indices = _a.indices, distances = _a.weights;
|
|
1300
|
+
indices = indices.map(function (x) { return x.slice(0, _this.nNeighbors); });
|
|
1301
|
+
distances = distances.map(function (x) { return x.slice(0, _this.nNeighbors); });
|
|
1302
|
+
var adjustedLocalConnectivity = Math.max(0, this.localConnectivity - 1);
|
|
1303
|
+
var _b = this.smoothKNNDistance(distances, this.nNeighbors, adjustedLocalConnectivity), sigmas = _b.sigmas, rhos = _b.rhos;
|
|
1304
|
+
var _c = this.computeMembershipStrengths(indices, distances, sigmas, rhos), rows = _c.rows, cols = _c.cols, vals = _c.vals;
|
|
1305
|
+
var size = [toTransform.length, rawData.length];
|
|
1306
|
+
var graph = new matrix.SparseMatrix(rows, cols, vals, size);
|
|
1307
|
+
var normed = matrix.normalize(graph, "l1");
|
|
1308
|
+
var csrMatrix = matrix.getCSR(normed);
|
|
1309
|
+
var nPoints = toTransform.length;
|
|
1310
|
+
var eIndices = utils.reshape2d(csrMatrix.indices, nPoints, this.nNeighbors);
|
|
1311
|
+
var eWeights = utils.reshape2d(csrMatrix.values, nPoints, this.nNeighbors);
|
|
1312
|
+
var embedding = initTransform(eIndices, eWeights, this.embedding);
|
|
1313
|
+
var nEpochs = this.nEpochs
|
|
1314
|
+
? this.nEpochs / 3
|
|
1315
|
+
: graph.nRows <= 10000
|
|
1316
|
+
? 100
|
|
1317
|
+
: 30;
|
|
1318
|
+
var graphMax = graph
|
|
1319
|
+
.getValues()
|
|
1320
|
+
.reduce(function (max, val) { return (val > max ? val : max); }, 0);
|
|
1321
|
+
graph = graph.map(function (value) { return (value < graphMax / nEpochs ? 0 : value); });
|
|
1322
|
+
graph = matrix.eliminateZeros(graph);
|
|
1323
|
+
var epochsPerSample = this.makeEpochsPerSample(graph.getValues(), nEpochs);
|
|
1324
|
+
var head = graph.getRows();
|
|
1325
|
+
var tail = graph.getCols();
|
|
1326
|
+
this.assignOptimizationStateParameters({
|
|
1327
|
+
headEmbedding: embedding,
|
|
1328
|
+
tailEmbedding: this.embedding,
|
|
1329
|
+
head: head,
|
|
1330
|
+
tail: tail,
|
|
1331
|
+
currentEpoch: 0,
|
|
1332
|
+
nEpochs: nEpochs,
|
|
1333
|
+
nVertices: graph.getDims()[1],
|
|
1334
|
+
epochsPerSample: epochsPerSample,
|
|
1335
|
+
});
|
|
1336
|
+
this.prepareForOptimizationLoop();
|
|
1337
|
+
return this.optimizeLayout();
|
|
1338
|
+
};
|
|
1339
|
+
UMAP.prototype.processGraphForSupervisedProjection = function () {
|
|
1340
|
+
var _a = this, Y = _a.Y, X = _a.X;
|
|
1341
|
+
if (Y) {
|
|
1342
|
+
if (Y.length !== X.length) {
|
|
1343
|
+
throw new Error('Length of X and y must be equal');
|
|
1344
|
+
}
|
|
1345
|
+
if (this.targetMetric === "categorical") {
|
|
1346
|
+
var lt = this.targetWeight < 1.0;
|
|
1347
|
+
var farDist = lt ? 2.5 * (1.0 / (1.0 - this.targetWeight)) : 1.0e12;
|
|
1348
|
+
this.graph = this.categoricalSimplicialSetIntersection(this.graph, Y, farDist);
|
|
1349
|
+
}
|
|
1350
|
+
}
|
|
1351
|
+
};
|
|
1352
|
+
UMAP.prototype.step = function () {
|
|
1353
|
+
var currentEpoch = this.optimizationState.currentEpoch;
|
|
1354
|
+
if (currentEpoch < this.getNEpochs()) {
|
|
1355
|
+
this.optimizeLayoutStep(currentEpoch);
|
|
1356
|
+
}
|
|
1357
|
+
return this.optimizationState.currentEpoch;
|
|
1358
|
+
};
|
|
1359
|
+
UMAP.prototype.getEmbedding = function () {
|
|
1360
|
+
return this.embedding;
|
|
1361
|
+
};
|
|
1362
|
+
UMAP.prototype.nearestNeighbors = function (X) {
|
|
1363
|
+
var _a = this, distanceFn = _a.distanceFn, nNeighbors = _a.nNeighbors;
|
|
1364
|
+
var log2 = function (n) { return Math.log(n) / Math.log(2); };
|
|
1365
|
+
var metricNNDescent = nnDescent.makeNNDescent(distanceFn, this.random);
|
|
1366
|
+
var round = function (n) {
|
|
1367
|
+
return n === 0.5 ? 0 : Math.round(n);
|
|
1368
|
+
};
|
|
1369
|
+
var nTrees = 5 + Math.floor(round(Math.pow(X.length, 0.5) / 20.0));
|
|
1370
|
+
var nIters = Math.max(5, Math.floor(Math.round(log2(X.length))));
|
|
1371
|
+
this.rpForest = tree.makeForest(X, nNeighbors, nTrees, this.random);
|
|
1372
|
+
var leafArray = tree.makeLeafArray(this.rpForest);
|
|
1373
|
+
var _b = metricNNDescent(X, leafArray, nNeighbors, nIters), indices = _b.indices, weights = _b.weights;
|
|
1374
|
+
return { knnIndices: indices, knnDistances: weights };
|
|
1375
|
+
};
|
|
1376
|
+
UMAP.prototype.fuzzySimplicialSet = function (X, nNeighbors, setOpMixRatio) {
|
|
1377
|
+
if (setOpMixRatio === void 0) { setOpMixRatio = 1.0; }
|
|
1378
|
+
var _a = this, _b = _a.knnIndices, knnIndices = _b === void 0 ? [] : _b, _c = _a.knnDistances, knnDistances = _c === void 0 ? [] : _c, localConnectivity = _a.localConnectivity;
|
|
1379
|
+
var _d = this.smoothKNNDistance(knnDistances, nNeighbors, localConnectivity), sigmas = _d.sigmas, rhos = _d.rhos;
|
|
1380
|
+
var _e = this.computeMembershipStrengths(knnIndices, knnDistances, sigmas, rhos), rows = _e.rows, cols = _e.cols, vals = _e.vals;
|
|
1381
|
+
var size = [X.length, X.length];
|
|
1382
|
+
var sparseMatrix = new matrix.SparseMatrix(rows, cols, vals, size);
|
|
1383
|
+
var transpose = matrix.transpose(sparseMatrix);
|
|
1384
|
+
var prodMatrix = matrix.pairwiseMultiply(sparseMatrix, transpose);
|
|
1385
|
+
var a = matrix.subtract(matrix.add(sparseMatrix, transpose), prodMatrix);
|
|
1386
|
+
var b = matrix.multiplyScalar(a, setOpMixRatio);
|
|
1387
|
+
var c = matrix.multiplyScalar(prodMatrix, 1.0 - setOpMixRatio);
|
|
1388
|
+
var result = matrix.add(b, c);
|
|
1389
|
+
return result;
|
|
1390
|
+
};
|
|
1391
|
+
UMAP.prototype.categoricalSimplicialSetIntersection = function (simplicialSet, target, farDist, unknownDist) {
|
|
1392
|
+
if (unknownDist === void 0) { unknownDist = 1.0; }
|
|
1393
|
+
var intersection = fastIntersection(simplicialSet, target, unknownDist, farDist);
|
|
1394
|
+
intersection = matrix.eliminateZeros(intersection);
|
|
1395
|
+
return resetLocalConnectivity(intersection);
|
|
1396
|
+
};
|
|
1397
|
+
UMAP.prototype.smoothKNNDistance = function (distances, k, localConnectivity, nIter, bandwidth) {
|
|
1398
|
+
if (localConnectivity === void 0) { localConnectivity = 1.0; }
|
|
1399
|
+
if (nIter === void 0) { nIter = 64; }
|
|
1400
|
+
if (bandwidth === void 0) { bandwidth = 1.0; }
|
|
1401
|
+
var target = (Math.log(k) / Math.log(2)) * bandwidth;
|
|
1402
|
+
var rho = utils.zeros(distances.length);
|
|
1403
|
+
var result = utils.zeros(distances.length);
|
|
1404
|
+
for (var i = 0; i < distances.length; i++) {
|
|
1405
|
+
var lo = 0.0;
|
|
1406
|
+
var hi = Infinity;
|
|
1407
|
+
var mid = 1.0;
|
|
1408
|
+
var ithDistances = distances[i];
|
|
1409
|
+
var nonZeroDists = ithDistances.filter(function (d) { return d > 0.0; });
|
|
1410
|
+
if (nonZeroDists.length >= localConnectivity) {
|
|
1411
|
+
var index = Math.floor(localConnectivity);
|
|
1412
|
+
var interpolation = localConnectivity - index;
|
|
1413
|
+
if (index > 0) {
|
|
1414
|
+
rho[i] = nonZeroDists[index - 1];
|
|
1415
|
+
if (interpolation > SMOOTH_K_TOLERANCE) {
|
|
1416
|
+
rho[i] +=
|
|
1417
|
+
interpolation * (nonZeroDists[index] - nonZeroDists[index - 1]);
|
|
1418
|
+
}
|
|
1419
|
+
}
|
|
1420
|
+
else {
|
|
1421
|
+
rho[i] = interpolation * nonZeroDists[0];
|
|
1422
|
+
}
|
|
1423
|
+
}
|
|
1424
|
+
else if (nonZeroDists.length > 0) {
|
|
1425
|
+
rho[i] = utils.max(nonZeroDists);
|
|
1426
|
+
}
|
|
1427
|
+
for (var n = 0; n < nIter; n++) {
|
|
1428
|
+
var psum = 0.0;
|
|
1429
|
+
for (var j = 1; j < distances[i].length; j++) {
|
|
1430
|
+
var d = distances[i][j] - rho[i];
|
|
1431
|
+
if (d > 0) {
|
|
1432
|
+
psum += Math.exp(-(d / mid));
|
|
1433
|
+
}
|
|
1434
|
+
else {
|
|
1435
|
+
psum += 1.0;
|
|
1436
|
+
}
|
|
1437
|
+
}
|
|
1438
|
+
if (Math.abs(psum - target) < SMOOTH_K_TOLERANCE) {
|
|
1439
|
+
break;
|
|
1440
|
+
}
|
|
1441
|
+
if (psum > target) {
|
|
1442
|
+
hi = mid;
|
|
1443
|
+
mid = (lo + hi) / 2.0;
|
|
1444
|
+
}
|
|
1445
|
+
else {
|
|
1446
|
+
lo = mid;
|
|
1447
|
+
if (hi === Infinity) {
|
|
1448
|
+
mid *= 2;
|
|
1449
|
+
}
|
|
1450
|
+
else {
|
|
1451
|
+
mid = (lo + hi) / 2.0;
|
|
1452
|
+
}
|
|
1453
|
+
}
|
|
1454
|
+
}
|
|
1455
|
+
result[i] = mid;
|
|
1456
|
+
if (rho[i] > 0.0) {
|
|
1457
|
+
var meanIthDistances = utils.mean(ithDistances);
|
|
1458
|
+
if (result[i] < MIN_K_DIST_SCALE * meanIthDistances) {
|
|
1459
|
+
result[i] = MIN_K_DIST_SCALE * meanIthDistances;
|
|
1460
|
+
}
|
|
1461
|
+
}
|
|
1462
|
+
else {
|
|
1463
|
+
var meanDistances = utils.mean(distances.map(utils.mean));
|
|
1464
|
+
if (result[i] < MIN_K_DIST_SCALE * meanDistances) {
|
|
1465
|
+
result[i] = MIN_K_DIST_SCALE * meanDistances;
|
|
1466
|
+
}
|
|
1467
|
+
}
|
|
1468
|
+
}
|
|
1469
|
+
return { sigmas: result, rhos: rho };
|
|
1470
|
+
};
|
|
1471
|
+
UMAP.prototype.computeMembershipStrengths = function (knnIndices, knnDistances, sigmas, rhos) {
|
|
1472
|
+
var nSamples = knnIndices.length;
|
|
1473
|
+
var nNeighbors = knnIndices[0].length;
|
|
1474
|
+
var rows = utils.zeros(nSamples * nNeighbors);
|
|
1475
|
+
var cols = utils.zeros(nSamples * nNeighbors);
|
|
1476
|
+
var vals = utils.zeros(nSamples * nNeighbors);
|
|
1477
|
+
for (var i = 0; i < nSamples; i++) {
|
|
1478
|
+
for (var j = 0; j < nNeighbors; j++) {
|
|
1479
|
+
var val = 0;
|
|
1480
|
+
if (knnIndices[i][j] === -1) {
|
|
1481
|
+
continue;
|
|
1482
|
+
}
|
|
1483
|
+
if (knnIndices[i][j] === i) {
|
|
1484
|
+
val = 0.0;
|
|
1485
|
+
}
|
|
1486
|
+
else if (knnDistances[i][j] - rhos[i] <= 0.0) {
|
|
1487
|
+
val = 1.0;
|
|
1488
|
+
}
|
|
1489
|
+
else {
|
|
1490
|
+
val = Math.exp(-((knnDistances[i][j] - rhos[i]) / sigmas[i]));
|
|
1491
|
+
}
|
|
1492
|
+
rows[i * nNeighbors + j] = i;
|
|
1493
|
+
cols[i * nNeighbors + j] = knnIndices[i][j];
|
|
1494
|
+
vals[i * nNeighbors + j] = val;
|
|
1495
|
+
}
|
|
1496
|
+
}
|
|
1497
|
+
return { rows: rows, cols: cols, vals: vals };
|
|
1498
|
+
};
|
|
1499
|
+
UMAP.prototype.initializeSimplicialSetEmbedding = function () {
|
|
1500
|
+
var _this = this;
|
|
1501
|
+
var nEpochs = this.getNEpochs();
|
|
1502
|
+
var nComponents = this.nComponents;
|
|
1503
|
+
var graphValues = this.graph.getValues();
|
|
1504
|
+
var graphMax = 0;
|
|
1505
|
+
for (var i = 0; i < graphValues.length; i++) {
|
|
1506
|
+
var value = graphValues[i];
|
|
1507
|
+
if (graphMax < graphValues[i]) {
|
|
1508
|
+
graphMax = value;
|
|
1509
|
+
}
|
|
1510
|
+
}
|
|
1511
|
+
var graph = this.graph.map(function (value) {
|
|
1512
|
+
if (value < graphMax / nEpochs) {
|
|
1513
|
+
return 0;
|
|
1514
|
+
}
|
|
1515
|
+
else {
|
|
1516
|
+
return value;
|
|
1517
|
+
}
|
|
1518
|
+
});
|
|
1519
|
+
this.embedding = utils.zeros(graph.nRows).map(function () {
|
|
1520
|
+
return utils.zeros(nComponents).map(function () {
|
|
1521
|
+
return utils.tauRand(_this.random) * 20 + -10;
|
|
1522
|
+
});
|
|
1523
|
+
});
|
|
1524
|
+
var weights = [];
|
|
1525
|
+
var head = [];
|
|
1526
|
+
var tail = [];
|
|
1527
|
+
var rowColValues = graph.getAll();
|
|
1528
|
+
for (var i = 0; i < rowColValues.length; i++) {
|
|
1529
|
+
var entry = rowColValues[i];
|
|
1530
|
+
if (entry.value) {
|
|
1531
|
+
weights.push(entry.value);
|
|
1532
|
+
tail.push(entry.row);
|
|
1533
|
+
head.push(entry.col);
|
|
1534
|
+
}
|
|
1535
|
+
}
|
|
1536
|
+
var epochsPerSample = this.makeEpochsPerSample(weights, nEpochs);
|
|
1537
|
+
return { head: head, tail: tail, epochsPerSample: epochsPerSample };
|
|
1538
|
+
};
|
|
1539
|
+
UMAP.prototype.makeEpochsPerSample = function (weights, nEpochs) {
|
|
1540
|
+
var result = utils.filled(weights.length, -1.0);
|
|
1541
|
+
var max = utils.max(weights);
|
|
1542
|
+
var nSamples = weights.map(function (w) { return (w / max) * nEpochs; });
|
|
1543
|
+
nSamples.forEach(function (n, i) {
|
|
1544
|
+
if (n > 0)
|
|
1545
|
+
result[i] = nEpochs / nSamples[i];
|
|
1546
|
+
});
|
|
1547
|
+
return result;
|
|
1548
|
+
};
|
|
1549
|
+
UMAP.prototype.assignOptimizationStateParameters = function (state) {
|
|
1550
|
+
Object.assign(this.optimizationState, state);
|
|
1551
|
+
};
|
|
1552
|
+
UMAP.prototype.prepareForOptimizationLoop = function () {
|
|
1553
|
+
var _a = this, repulsionStrength = _a.repulsionStrength, learningRate = _a.learningRate, negativeSampleRate = _a.negativeSampleRate;
|
|
1554
|
+
var _b = this.optimizationState, epochsPerSample = _b.epochsPerSample, headEmbedding = _b.headEmbedding, tailEmbedding = _b.tailEmbedding;
|
|
1555
|
+
var dim = headEmbedding[0].length;
|
|
1556
|
+
var moveOther = headEmbedding.length === tailEmbedding.length;
|
|
1557
|
+
var epochsPerNegativeSample = epochsPerSample.map(function (e) { return e / negativeSampleRate; });
|
|
1558
|
+
var epochOfNextNegativeSample = __spread(epochsPerNegativeSample);
|
|
1559
|
+
var epochOfNextSample = __spread(epochsPerSample);
|
|
1560
|
+
this.assignOptimizationStateParameters({
|
|
1561
|
+
epochOfNextSample: epochOfNextSample,
|
|
1562
|
+
epochOfNextNegativeSample: epochOfNextNegativeSample,
|
|
1563
|
+
epochsPerNegativeSample: epochsPerNegativeSample,
|
|
1564
|
+
moveOther: moveOther,
|
|
1565
|
+
initialAlpha: learningRate,
|
|
1566
|
+
alpha: learningRate,
|
|
1567
|
+
gamma: repulsionStrength,
|
|
1568
|
+
dim: dim,
|
|
1569
|
+
});
|
|
1570
|
+
};
|
|
1571
|
+
UMAP.prototype.initializeOptimization = function () {
|
|
1572
|
+
var headEmbedding = this.embedding;
|
|
1573
|
+
var tailEmbedding = this.embedding;
|
|
1574
|
+
var _a = this.optimizationState, head = _a.head, tail = _a.tail, epochsPerSample = _a.epochsPerSample;
|
|
1575
|
+
var nEpochs = this.getNEpochs();
|
|
1576
|
+
var nVertices = this.graph.nCols;
|
|
1577
|
+
var _b = findABParams(this.spread, this.minDist), a = _b.a, b = _b.b;
|
|
1578
|
+
this.assignOptimizationStateParameters({
|
|
1579
|
+
headEmbedding: headEmbedding,
|
|
1580
|
+
tailEmbedding: tailEmbedding,
|
|
1581
|
+
head: head,
|
|
1582
|
+
tail: tail,
|
|
1583
|
+
epochsPerSample: epochsPerSample,
|
|
1584
|
+
a: a,
|
|
1585
|
+
b: b,
|
|
1586
|
+
nEpochs: nEpochs,
|
|
1587
|
+
nVertices: nVertices,
|
|
1588
|
+
});
|
|
1589
|
+
};
|
|
1590
|
+
UMAP.prototype.optimizeLayoutStep = function (n) {
|
|
1591
|
+
var optimizationState = this.optimizationState;
|
|
1592
|
+
var head = optimizationState.head, tail = optimizationState.tail, headEmbedding = optimizationState.headEmbedding, tailEmbedding = optimizationState.tailEmbedding, epochsPerSample = optimizationState.epochsPerSample, epochOfNextSample = optimizationState.epochOfNextSample, epochOfNextNegativeSample = optimizationState.epochOfNextNegativeSample, epochsPerNegativeSample = optimizationState.epochsPerNegativeSample, moveOther = optimizationState.moveOther, initialAlpha = optimizationState.initialAlpha, alpha = optimizationState.alpha, gamma = optimizationState.gamma, a = optimizationState.a, b = optimizationState.b, dim = optimizationState.dim, nEpochs = optimizationState.nEpochs, nVertices = optimizationState.nVertices;
|
|
1593
|
+
var clipValue = 4.0;
|
|
1594
|
+
for (var i = 0; i < epochsPerSample.length; i++) {
|
|
1595
|
+
if (epochOfNextSample[i] > n) {
|
|
1596
|
+
continue;
|
|
1597
|
+
}
|
|
1598
|
+
var j = head[i];
|
|
1599
|
+
var k = tail[i];
|
|
1600
|
+
var current = headEmbedding[j];
|
|
1601
|
+
var other = tailEmbedding[k];
|
|
1602
|
+
var distSquared = rDist(current, other);
|
|
1603
|
+
var gradCoeff = 0;
|
|
1604
|
+
if (distSquared > 0) {
|
|
1605
|
+
gradCoeff = -2.0 * a * b * Math.pow(distSquared, b - 1.0);
|
|
1606
|
+
gradCoeff /= a * Math.pow(distSquared, b) + 1.0;
|
|
1607
|
+
}
|
|
1608
|
+
for (var d = 0; d < dim; d++) {
|
|
1609
|
+
var gradD = clip(gradCoeff * (current[d] - other[d]), clipValue);
|
|
1610
|
+
current[d] += gradD * alpha;
|
|
1611
|
+
if (moveOther) {
|
|
1612
|
+
other[d] += -gradD * alpha;
|
|
1613
|
+
}
|
|
1614
|
+
}
|
|
1615
|
+
epochOfNextSample[i] += epochsPerSample[i];
|
|
1616
|
+
var nNegSamples = Math.floor((n - epochOfNextNegativeSample[i]) / epochsPerNegativeSample[i]);
|
|
1617
|
+
for (var p = 0; p < nNegSamples; p++) {
|
|
1618
|
+
var k_1 = utils.tauRandInt(nVertices, this.random);
|
|
1619
|
+
var other_1 = tailEmbedding[k_1];
|
|
1620
|
+
var distSquared_1 = rDist(current, other_1);
|
|
1621
|
+
var gradCoeff_1 = 0.0;
|
|
1622
|
+
if (distSquared_1 > 0.0) {
|
|
1623
|
+
gradCoeff_1 = 2.0 * gamma * b;
|
|
1624
|
+
gradCoeff_1 /=
|
|
1625
|
+
(0.001 + distSquared_1) * (a * Math.pow(distSquared_1, b) + 1);
|
|
1626
|
+
}
|
|
1627
|
+
else if (j === k_1) {
|
|
1628
|
+
continue;
|
|
1629
|
+
}
|
|
1630
|
+
for (var d = 0; d < dim; d++) {
|
|
1631
|
+
var gradD = 4.0;
|
|
1632
|
+
if (gradCoeff_1 > 0.0) {
|
|
1633
|
+
gradD = clip(gradCoeff_1 * (current[d] - other_1[d]), clipValue);
|
|
1634
|
+
}
|
|
1635
|
+
current[d] += gradD * alpha;
|
|
1636
|
+
}
|
|
1637
|
+
}
|
|
1638
|
+
epochOfNextNegativeSample[i] += nNegSamples * epochsPerNegativeSample[i];
|
|
1639
|
+
}
|
|
1640
|
+
optimizationState.alpha = initialAlpha * (1.0 - n / nEpochs);
|
|
1641
|
+
optimizationState.currentEpoch += 1;
|
|
1642
|
+
return headEmbedding;
|
|
1643
|
+
};
|
|
1644
|
+
UMAP.prototype.optimizeLayoutAsync = function (epochCallback) {
|
|
1645
|
+
var _this = this;
|
|
1646
|
+
if (epochCallback === void 0) { epochCallback = function () { return true; }; }
|
|
1647
|
+
return new Promise(function (resolve, reject) {
|
|
1648
|
+
var step = function () { return __awaiter(_this, void 0, void 0, function () {
|
|
1649
|
+
var _a, nEpochs, currentEpoch, epochCompleted, shouldStop, isFinished;
|
|
1650
|
+
return __generator(this, function (_b) {
|
|
1651
|
+
try {
|
|
1652
|
+
_a = this.optimizationState, nEpochs = _a.nEpochs, currentEpoch = _a.currentEpoch;
|
|
1653
|
+
this.embedding = this.optimizeLayoutStep(currentEpoch);
|
|
1654
|
+
epochCompleted = this.optimizationState.currentEpoch;
|
|
1655
|
+
shouldStop = epochCallback(epochCompleted) === false;
|
|
1656
|
+
isFinished = epochCompleted === nEpochs;
|
|
1657
|
+
if (!shouldStop && !isFinished) {
|
|
1658
|
+
setTimeout(function () { return step(); }, 0);
|
|
1659
|
+
}
|
|
1660
|
+
else {
|
|
1661
|
+
return [2, resolve(isFinished)];
|
|
1662
|
+
}
|
|
1663
|
+
}
|
|
1664
|
+
catch (err) {
|
|
1665
|
+
reject(err);
|
|
1666
|
+
}
|
|
1667
|
+
return [2];
|
|
1668
|
+
});
|
|
1669
|
+
}); };
|
|
1670
|
+
setTimeout(function () { return step(); }, 0);
|
|
1671
|
+
});
|
|
1672
|
+
};
|
|
1673
|
+
UMAP.prototype.optimizeLayout = function (epochCallback) {
|
|
1674
|
+
if (epochCallback === void 0) { epochCallback = function () { return true; }; }
|
|
1675
|
+
var isFinished = false;
|
|
1676
|
+
var embedding = [];
|
|
1677
|
+
while (!isFinished) {
|
|
1678
|
+
var _a = this.optimizationState, nEpochs = _a.nEpochs, currentEpoch = _a.currentEpoch;
|
|
1679
|
+
embedding = this.optimizeLayoutStep(currentEpoch);
|
|
1680
|
+
var epochCompleted = this.optimizationState.currentEpoch;
|
|
1681
|
+
var shouldStop = epochCallback(epochCompleted) === false;
|
|
1682
|
+
isFinished = epochCompleted === nEpochs || shouldStop;
|
|
1683
|
+
}
|
|
1684
|
+
return embedding;
|
|
1685
|
+
};
|
|
1686
|
+
UMAP.prototype.getNEpochs = function () {
|
|
1687
|
+
var graph = this.graph;
|
|
1688
|
+
if (this.nEpochs > 0) {
|
|
1689
|
+
return this.nEpochs;
|
|
1690
|
+
}
|
|
1691
|
+
var length = graph.nRows;
|
|
1692
|
+
if (length <= 2500) {
|
|
1693
|
+
return 500;
|
|
1694
|
+
}
|
|
1695
|
+
else if (length <= 5000) {
|
|
1696
|
+
return 400;
|
|
1697
|
+
}
|
|
1698
|
+
else if (length <= 7500) {
|
|
1699
|
+
return 300;
|
|
1700
|
+
}
|
|
1701
|
+
else {
|
|
1702
|
+
return 200;
|
|
1703
|
+
}
|
|
1704
|
+
};
|
|
1705
|
+
return UMAP;
|
|
1706
|
+
}());
|
|
1707
|
+
exports.UMAP = UMAP;
|
|
1708
|
+
function euclidean(x, y) {
|
|
1709
|
+
var result = 0;
|
|
1710
|
+
for (var i = 0; i < x.length; i++) {
|
|
1711
|
+
result += Math.pow((x[i] - y[i]), 2);
|
|
1712
|
+
}
|
|
1713
|
+
return Math.sqrt(result);
|
|
1714
|
+
}
|
|
1715
|
+
exports.euclidean = euclidean;
|
|
1716
|
+
function cosine(x, y) {
|
|
1717
|
+
var result = 0.0;
|
|
1718
|
+
var normX = 0.0;
|
|
1719
|
+
var normY = 0.0;
|
|
1720
|
+
for (var i = 0; i < x.length; i++) {
|
|
1721
|
+
result += x[i] * y[i];
|
|
1722
|
+
normX += Math.pow(x[i], 2);
|
|
1723
|
+
normY += Math.pow(y[i], 2);
|
|
1724
|
+
}
|
|
1725
|
+
if (normX === 0 && normY === 0) {
|
|
1726
|
+
return 0;
|
|
1727
|
+
}
|
|
1728
|
+
else if (normX === 0 || normY === 0) {
|
|
1729
|
+
return 1.0;
|
|
1730
|
+
}
|
|
1731
|
+
else {
|
|
1732
|
+
return 1.0 - result / Math.sqrt(normX * normY);
|
|
1733
|
+
}
|
|
1734
|
+
}
|
|
1735
|
+
exports.cosine = cosine;
|
|
1736
|
+
var OptimizationState = (function () {
|
|
1737
|
+
function OptimizationState() {
|
|
1738
|
+
this.currentEpoch = 0;
|
|
1739
|
+
this.headEmbedding = [];
|
|
1740
|
+
this.tailEmbedding = [];
|
|
1741
|
+
this.head = [];
|
|
1742
|
+
this.tail = [];
|
|
1743
|
+
this.epochsPerSample = [];
|
|
1744
|
+
this.epochOfNextSample = [];
|
|
1745
|
+
this.epochOfNextNegativeSample = [];
|
|
1746
|
+
this.epochsPerNegativeSample = [];
|
|
1747
|
+
this.moveOther = true;
|
|
1748
|
+
this.initialAlpha = 1.0;
|
|
1749
|
+
this.alpha = 1.0;
|
|
1750
|
+
this.gamma = 1.0;
|
|
1751
|
+
this.a = 1.5769434603113077;
|
|
1752
|
+
this.b = 0.8950608779109733;
|
|
1753
|
+
this.dim = 2;
|
|
1754
|
+
this.nEpochs = 500;
|
|
1755
|
+
this.nVertices = 0;
|
|
1756
|
+
}
|
|
1757
|
+
return OptimizationState;
|
|
1758
|
+
}());
|
|
1759
|
+
function clip(x, clipValue) {
|
|
1760
|
+
if (x > clipValue)
|
|
1761
|
+
return clipValue;
|
|
1762
|
+
else if (x < -clipValue)
|
|
1763
|
+
return -clipValue;
|
|
1764
|
+
else
|
|
1765
|
+
return x;
|
|
1766
|
+
}
|
|
1767
|
+
function rDist(x, y) {
|
|
1768
|
+
var result = 0.0;
|
|
1769
|
+
for (var i = 0; i < x.length; i++) {
|
|
1770
|
+
result += Math.pow(x[i] - y[i], 2);
|
|
1771
|
+
}
|
|
1772
|
+
return result;
|
|
1773
|
+
}
|
|
1774
|
+
function findABParams(spread, minDist) {
|
|
1775
|
+
var curve = function (_a) {
|
|
1776
|
+
var _b = __read(_a, 2), a = _b[0], b = _b[1];
|
|
1777
|
+
return function (x) {
|
|
1778
|
+
return 1.0 / (1.0 + a * Math.pow(x, (2 * b)));
|
|
1779
|
+
};
|
|
1780
|
+
};
|
|
1781
|
+
var xv = utils
|
|
1782
|
+
.linear(0, spread * 3, 300)
|
|
1783
|
+
.map(function (val) { return (val < minDist ? 1.0 : val); });
|
|
1784
|
+
var yv = utils.zeros(xv.length).map(function (val, index) {
|
|
1785
|
+
var gte = xv[index] >= minDist;
|
|
1786
|
+
return gte ? Math.exp(-(xv[index] - minDist) / spread) : val;
|
|
1787
|
+
});
|
|
1788
|
+
var initialValues = [0.5, 0.5];
|
|
1789
|
+
var data = { x: xv, y: yv };
|
|
1790
|
+
var options = {
|
|
1791
|
+
damping: 1.5,
|
|
1792
|
+
initialValues: initialValues,
|
|
1793
|
+
gradientDifference: 10e-2,
|
|
1794
|
+
maxIterations: 100,
|
|
1795
|
+
errorTolerance: 10e-3,
|
|
1796
|
+
};
|
|
1797
|
+
var parameterValues = ml_levenberg_marquardt_1.default(data, curve, options).parameterValues;
|
|
1798
|
+
var _a = __read(parameterValues, 2), a = _a[0], b = _a[1];
|
|
1799
|
+
return { a: a, b: b };
|
|
1800
|
+
}
|
|
1801
|
+
exports.findABParams = findABParams;
|
|
1802
|
+
function fastIntersection(graph, target, unknownDist, farDist) {
|
|
1803
|
+
if (unknownDist === void 0) { unknownDist = 1.0; }
|
|
1804
|
+
if (farDist === void 0) { farDist = 5.0; }
|
|
1805
|
+
return graph.map(function (value, row, col) {
|
|
1806
|
+
if (target[row] === -1 || target[col] === -1) {
|
|
1807
|
+
return value * Math.exp(-unknownDist);
|
|
1808
|
+
}
|
|
1809
|
+
else if (target[row] !== target[col]) {
|
|
1810
|
+
return value * Math.exp(-farDist);
|
|
1811
|
+
}
|
|
1812
|
+
else {
|
|
1813
|
+
return value;
|
|
1814
|
+
}
|
|
1815
|
+
});
|
|
1816
|
+
}
|
|
1817
|
+
exports.fastIntersection = fastIntersection;
|
|
1818
|
+
function resetLocalConnectivity(simplicialSet) {
|
|
1819
|
+
simplicialSet = matrix.normalize(simplicialSet, "max");
|
|
1820
|
+
var transpose = matrix.transpose(simplicialSet);
|
|
1821
|
+
var prodMatrix = matrix.pairwiseMultiply(transpose, simplicialSet);
|
|
1822
|
+
simplicialSet = matrix.add(simplicialSet, matrix.subtract(transpose, prodMatrix));
|
|
1823
|
+
return matrix.eliminateZeros(simplicialSet);
|
|
1824
|
+
}
|
|
1825
|
+
exports.resetLocalConnectivity = resetLocalConnectivity;
|
|
1826
|
+
function initTransform(indices, weights, embedding) {
|
|
1827
|
+
var result = utils
|
|
1828
|
+
.zeros(indices.length)
|
|
1829
|
+
.map(function (z) { return utils.zeros(embedding[0].length); });
|
|
1830
|
+
for (var i = 0; i < indices.length; i++) {
|
|
1831
|
+
for (var j = 0; j < indices[0].length; j++) {
|
|
1832
|
+
for (var d = 0; d < embedding[0].length; d++) {
|
|
1833
|
+
var a = indices[i][j];
|
|
1834
|
+
result[i][d] += weights[i][j] * embedding[a][d];
|
|
1835
|
+
}
|
|
1836
|
+
}
|
|
1837
|
+
}
|
|
1838
|
+
return result;
|
|
1839
|
+
}
|
|
1840
|
+
exports.initTransform = initTransform;
|
|
1841
|
+
|
|
1842
|
+
|
|
1843
|
+
/***/ }),
|
|
1844
|
+
|
|
1845
|
+
/***/ "./node_modules/umap-js/dist/utils.js":
|
|
1846
|
+
/*!********************************************!*\
|
|
1847
|
+
!*** ./node_modules/umap-js/dist/utils.js ***!
|
|
1848
|
+
\********************************************/
|
|
1849
|
+
/***/ (function(__unused_webpack_module, exports) {
|
|
1850
|
+
|
|
1851
|
+
|
|
1852
|
+
var __values = (this && this.__values) || function(o) {
|
|
1853
|
+
var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
|
|
1854
|
+
if (m) return m.call(o);
|
|
1855
|
+
if (o && typeof o.length === "number") return {
|
|
1856
|
+
next: function () {
|
|
1857
|
+
if (o && i >= o.length) o = void 0;
|
|
1858
|
+
return { value: o && o[i++], done: !o };
|
|
1859
|
+
}
|
|
1860
|
+
};
|
|
1861
|
+
throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
|
|
1862
|
+
};
|
|
1863
|
+
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
|
1864
|
+
exports.reshape2d = exports.rejectionSample = exports.max2d = exports.max = exports.mean = exports.sum = exports.linear = exports.ones = exports.zeros = exports.filled = exports.range = exports.empty = exports.norm = exports.tauRand = exports.tauRandInt = void 0;
|
|
1865
|
+
function tauRandInt(n, random) {
|
|
1866
|
+
return Math.floor(random() * n);
|
|
1867
|
+
}
|
|
1868
|
+
exports.tauRandInt = tauRandInt;
|
|
1869
|
+
function tauRand(random) {
|
|
1870
|
+
return random();
|
|
1871
|
+
}
|
|
1872
|
+
exports.tauRand = tauRand;
|
|
1873
|
+
function norm(vec) {
|
|
1874
|
+
var e_1, _a;
|
|
1875
|
+
var result = 0;
|
|
1876
|
+
try {
|
|
1877
|
+
for (var vec_1 = __values(vec), vec_1_1 = vec_1.next(); !vec_1_1.done; vec_1_1 = vec_1.next()) {
|
|
1878
|
+
var item = vec_1_1.value;
|
|
1879
|
+
result += Math.pow(item, 2);
|
|
1880
|
+
}
|
|
1881
|
+
}
|
|
1882
|
+
catch (e_1_1) { e_1 = { error: e_1_1 }; }
|
|
1883
|
+
finally {
|
|
1884
|
+
try {
|
|
1885
|
+
if (vec_1_1 && !vec_1_1.done && (_a = vec_1.return)) _a.call(vec_1);
|
|
1886
|
+
}
|
|
1887
|
+
finally { if (e_1) throw e_1.error; }
|
|
1888
|
+
}
|
|
1889
|
+
return Math.sqrt(result);
|
|
1890
|
+
}
|
|
1891
|
+
exports.norm = norm;
|
|
1892
|
+
function empty(n) {
|
|
1893
|
+
var output = [];
|
|
1894
|
+
for (var i = 0; i < n; i++) {
|
|
1895
|
+
output.push(undefined);
|
|
1896
|
+
}
|
|
1897
|
+
return output;
|
|
1898
|
+
}
|
|
1899
|
+
exports.empty = empty;
|
|
1900
|
+
function range(n) {
|
|
1901
|
+
return empty(n).map(function (_, i) { return i; });
|
|
1902
|
+
}
|
|
1903
|
+
exports.range = range;
|
|
1904
|
+
function filled(n, v) {
|
|
1905
|
+
return empty(n).map(function () { return v; });
|
|
1906
|
+
}
|
|
1907
|
+
exports.filled = filled;
|
|
1908
|
+
function zeros(n) {
|
|
1909
|
+
return filled(n, 0);
|
|
1910
|
+
}
|
|
1911
|
+
exports.zeros = zeros;
|
|
1912
|
+
function ones(n) {
|
|
1913
|
+
return filled(n, 1);
|
|
1914
|
+
}
|
|
1915
|
+
exports.ones = ones;
|
|
1916
|
+
function linear(a, b, len) {
|
|
1917
|
+
return empty(len).map(function (_, i) {
|
|
1918
|
+
return a + i * ((b - a) / (len - 1));
|
|
1919
|
+
});
|
|
1920
|
+
}
|
|
1921
|
+
exports.linear = linear;
|
|
1922
|
+
function sum(input) {
|
|
1923
|
+
return input.reduce(function (sum, val) { return sum + val; });
|
|
1924
|
+
}
|
|
1925
|
+
exports.sum = sum;
|
|
1926
|
+
function mean(input) {
|
|
1927
|
+
return sum(input) / input.length;
|
|
1928
|
+
}
|
|
1929
|
+
exports.mean = mean;
|
|
1930
|
+
function max(input) {
|
|
1931
|
+
var max = 0;
|
|
1932
|
+
for (var i = 0; i < input.length; i++) {
|
|
1933
|
+
max = input[i] > max ? input[i] : max;
|
|
1934
|
+
}
|
|
1935
|
+
return max;
|
|
1936
|
+
}
|
|
1937
|
+
exports.max = max;
|
|
1938
|
+
function max2d(input) {
|
|
1939
|
+
var max = 0;
|
|
1940
|
+
for (var i = 0; i < input.length; i++) {
|
|
1941
|
+
for (var j = 0; j < input[i].length; j++) {
|
|
1942
|
+
max = input[i][j] > max ? input[i][j] : max;
|
|
1943
|
+
}
|
|
1944
|
+
}
|
|
1945
|
+
return max;
|
|
1946
|
+
}
|
|
1947
|
+
exports.max2d = max2d;
|
|
1948
|
+
function rejectionSample(nSamples, poolSize, random) {
|
|
1949
|
+
var result = zeros(nSamples);
|
|
1950
|
+
for (var i = 0; i < nSamples; i++) {
|
|
1951
|
+
var rejectSample = true;
|
|
1952
|
+
while (rejectSample) {
|
|
1953
|
+
var j = tauRandInt(poolSize, random);
|
|
1954
|
+
var broken = false;
|
|
1955
|
+
for (var k = 0; k < i; k++) {
|
|
1956
|
+
if (j === result[k]) {
|
|
1957
|
+
broken = true;
|
|
1958
|
+
break;
|
|
1959
|
+
}
|
|
1960
|
+
}
|
|
1961
|
+
if (!broken) {
|
|
1962
|
+
rejectSample = false;
|
|
1963
|
+
}
|
|
1964
|
+
result[i] = j;
|
|
1965
|
+
}
|
|
1966
|
+
}
|
|
1967
|
+
return result;
|
|
1968
|
+
}
|
|
1969
|
+
exports.rejectionSample = rejectionSample;
|
|
1970
|
+
function reshape2d(x, a, b) {
|
|
1971
|
+
var rows = [];
|
|
1972
|
+
var count = 0;
|
|
1973
|
+
var index = 0;
|
|
1974
|
+
if (x.length !== a * b) {
|
|
1975
|
+
throw new Error('Array dimensions must match input length.');
|
|
1976
|
+
}
|
|
1977
|
+
for (var i = 0; i < a; i++) {
|
|
1978
|
+
var col = [];
|
|
1979
|
+
for (var j = 0; j < b; j++) {
|
|
1980
|
+
col.push(x[index]);
|
|
1981
|
+
index += 1;
|
|
1982
|
+
}
|
|
1983
|
+
rows.push(col);
|
|
1984
|
+
count += 1;
|
|
1985
|
+
}
|
|
1986
|
+
return rows;
|
|
1987
|
+
}
|
|
1988
|
+
exports.reshape2d = reshape2d;
|
|
1989
|
+
|
|
1990
|
+
|
|
1991
|
+
/***/ }),
|
|
1992
|
+
|
|
1993
|
+
/***/ "./node_modules/umap-js/node_modules/is-any-array/src/index.js":
|
|
1994
|
+
/*!*********************************************************************!*\
|
|
1995
|
+
!*** ./node_modules/umap-js/node_modules/is-any-array/src/index.js ***!
|
|
1996
|
+
\*********************************************************************/
|
|
1997
|
+
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
1998
|
+
|
|
1999
|
+
__webpack_require__.r(__webpack_exports__);
|
|
2000
|
+
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
2001
|
+
/* harmony export */ "default": () => (/* binding */ isAnyArray)
|
|
2002
|
+
/* harmony export */ });
|
|
2003
|
+
const toString = Object.prototype.toString;
|
|
2004
|
+
|
|
2005
|
+
function isAnyArray(object) {
|
|
2006
|
+
return toString.call(object).endsWith('Array]');
|
|
2007
|
+
}
|
|
2008
|
+
|
|
2009
|
+
|
|
2010
|
+
/***/ }),
|
|
2011
|
+
|
|
2012
|
+
/***/ "./node_modules/umap-js/node_modules/ml-levenberg-marquardt/src/errorCalculation.js":
|
|
2013
|
+
/*!******************************************************************************************!*\
|
|
2014
|
+
!*** ./node_modules/umap-js/node_modules/ml-levenberg-marquardt/src/errorCalculation.js ***!
|
|
2015
|
+
\******************************************************************************************/
|
|
2016
|
+
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
2017
|
+
|
|
2018
|
+
__webpack_require__.r(__webpack_exports__);
|
|
2019
|
+
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
2020
|
+
/* harmony export */ "default": () => (/* binding */ errorCalculation)
|
|
2021
|
+
/* harmony export */ });
|
|
2022
|
+
/**
|
|
2023
|
+
* Calculate current error
|
|
2024
|
+
* @ignore
|
|
2025
|
+
* @param {{x:Array<number>, y:Array<number>}} data - Array of points to fit in the format [x1, x2, ... ], [y1, y2, ... ]
|
|
2026
|
+
* @param {Array<number>} parameters - Array of current parameter values
|
|
2027
|
+
* @param {function} parameterizedFunction - The parameters and returns a function with the independent variable as a parameter
|
|
2028
|
+
* @return {number}
|
|
2029
|
+
*/
|
|
2030
|
+
function errorCalculation(
|
|
2031
|
+
data,
|
|
2032
|
+
parameters,
|
|
2033
|
+
parameterizedFunction,
|
|
2034
|
+
) {
|
|
2035
|
+
let error = 0;
|
|
2036
|
+
const func = parameterizedFunction(parameters);
|
|
2037
|
+
|
|
2038
|
+
for (let i = 0; i < data.x.length; i++) {
|
|
2039
|
+
error += Math.abs(data.y[i] - func(data.x[i]));
|
|
2040
|
+
}
|
|
2041
|
+
|
|
2042
|
+
return error;
|
|
2043
|
+
}
|
|
2044
|
+
|
|
2045
|
+
|
|
2046
|
+
/***/ }),
|
|
2047
|
+
|
|
2048
|
+
/***/ "./node_modules/umap-js/node_modules/ml-levenberg-marquardt/src/index.js":
|
|
2049
|
+
/*!*******************************************************************************!*\
|
|
2050
|
+
!*** ./node_modules/umap-js/node_modules/ml-levenberg-marquardt/src/index.js ***!
|
|
2051
|
+
\*******************************************************************************/
|
|
2052
|
+
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
2053
|
+
|
|
2054
|
+
__webpack_require__.r(__webpack_exports__);
|
|
2055
|
+
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
2056
|
+
/* harmony export */ "default": () => (/* binding */ levenbergMarquardt)
|
|
2057
|
+
/* harmony export */ });
|
|
2058
|
+
/* harmony import */ var is_any_array__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! is-any-array */ "./node_modules/umap-js/node_modules/is-any-array/src/index.js");
|
|
2059
|
+
/* harmony import */ var _errorCalculation__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./errorCalculation */ "./node_modules/umap-js/node_modules/ml-levenberg-marquardt/src/errorCalculation.js");
|
|
2060
|
+
/* harmony import */ var _step__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./step */ "./node_modules/umap-js/node_modules/ml-levenberg-marquardt/src/step.js");
|
|
2061
|
+
|
|
2062
|
+
|
|
2063
|
+
|
|
2064
|
+
|
|
2065
|
+
|
|
2066
|
+
/**
|
|
2067
|
+
* Curve fitting algorithm
|
|
2068
|
+
* @param {{x:Array<number>, y:Array<number>}} data - Array of points to fit in the format [x1, x2, ... ], [y1, y2, ... ]
|
|
2069
|
+
* @param {function} parameterizedFunction - The parameters and returns a function with the independent variable as a parameter
|
|
2070
|
+
* @param {object} [options] - Options object
|
|
2071
|
+
* @param {number} [options.damping] - Levenberg-Marquardt parameter
|
|
2072
|
+
* @param {number} [options.gradientDifference = 10e-2] - Adjustment for decrease the damping parameter
|
|
2073
|
+
* @param {Array<number>} [options.minValues] - Minimum allowed values for parameters
|
|
2074
|
+
* @param {Array<number>} [options.maxValues] - Maximum allowed values for parameters
|
|
2075
|
+
* @param {Array<number>} [options.initialValues] - Array of initial parameter values
|
|
2076
|
+
* @param {number} [options.maxIterations = 100] - Maximum of allowed iterations
|
|
2077
|
+
* @param {number} [options.errorTolerance = 10e-3] - Minimum uncertainty allowed for each point
|
|
2078
|
+
* @return {{parameterValues: Array<number>, parameterError: number, iterations: number}}
|
|
2079
|
+
*/
|
|
2080
|
+
function levenbergMarquardt(
|
|
2081
|
+
data,
|
|
2082
|
+
parameterizedFunction,
|
|
2083
|
+
options = {},
|
|
2084
|
+
) {
|
|
2085
|
+
let {
|
|
2086
|
+
maxIterations = 100,
|
|
2087
|
+
gradientDifference = 10e-2,
|
|
2088
|
+
damping = 0,
|
|
2089
|
+
errorTolerance = 10e-3,
|
|
2090
|
+
minValues,
|
|
2091
|
+
maxValues,
|
|
2092
|
+
initialValues,
|
|
2093
|
+
} = options;
|
|
2094
|
+
|
|
2095
|
+
if (damping <= 0) {
|
|
2096
|
+
throw new Error('The damping option must be a positive number');
|
|
2097
|
+
} else if (!data.x || !data.y) {
|
|
2098
|
+
throw new Error('The data parameter must have x and y elements');
|
|
2099
|
+
} else if (
|
|
2100
|
+
!(0,is_any_array__WEBPACK_IMPORTED_MODULE_0__["default"])(data.x) ||
|
|
2101
|
+
data.x.length < 2 ||
|
|
2102
|
+
!(0,is_any_array__WEBPACK_IMPORTED_MODULE_0__["default"])(data.y) ||
|
|
2103
|
+
data.y.length < 2
|
|
2104
|
+
) {
|
|
2105
|
+
throw new Error(
|
|
2106
|
+
'The data parameter elements must be an array with more than 2 points',
|
|
2107
|
+
);
|
|
2108
|
+
} else if (data.x.length !== data.y.length) {
|
|
2109
|
+
throw new Error('The data parameter elements must have the same size');
|
|
2110
|
+
}
|
|
2111
|
+
|
|
2112
|
+
let parameters =
|
|
2113
|
+
initialValues || new Array(parameterizedFunction.length).fill(1);
|
|
2114
|
+
let parLen = parameters.length;
|
|
2115
|
+
maxValues = maxValues || new Array(parLen).fill(Number.MAX_SAFE_INTEGER);
|
|
2116
|
+
minValues = minValues || new Array(parLen).fill(Number.MIN_SAFE_INTEGER);
|
|
2117
|
+
|
|
2118
|
+
if (maxValues.length !== minValues.length) {
|
|
2119
|
+
throw new Error('minValues and maxValues must be the same size');
|
|
2120
|
+
}
|
|
2121
|
+
|
|
2122
|
+
if (!(0,is_any_array__WEBPACK_IMPORTED_MODULE_0__["default"])(parameters)) {
|
|
2123
|
+
throw new Error('initialValues must be an array');
|
|
2124
|
+
}
|
|
2125
|
+
|
|
2126
|
+
let error = (0,_errorCalculation__WEBPACK_IMPORTED_MODULE_1__["default"])(data, parameters, parameterizedFunction);
|
|
2127
|
+
|
|
2128
|
+
let converged = error <= errorTolerance;
|
|
2129
|
+
|
|
2130
|
+
let iteration;
|
|
2131
|
+
for (iteration = 0; iteration < maxIterations && !converged; iteration++) {
|
|
2132
|
+
parameters = (0,_step__WEBPACK_IMPORTED_MODULE_2__["default"])(
|
|
2133
|
+
data,
|
|
2134
|
+
parameters,
|
|
2135
|
+
damping,
|
|
2136
|
+
gradientDifference,
|
|
2137
|
+
parameterizedFunction,
|
|
2138
|
+
);
|
|
2139
|
+
|
|
2140
|
+
for (let k = 0; k < parLen; k++) {
|
|
2141
|
+
parameters[k] = Math.min(
|
|
2142
|
+
Math.max(minValues[k], parameters[k]),
|
|
2143
|
+
maxValues[k],
|
|
2144
|
+
);
|
|
2145
|
+
}
|
|
2146
|
+
|
|
2147
|
+
error = (0,_errorCalculation__WEBPACK_IMPORTED_MODULE_1__["default"])(data, parameters, parameterizedFunction);
|
|
2148
|
+
if (isNaN(error)) break;
|
|
2149
|
+
converged = error <= errorTolerance;
|
|
2150
|
+
}
|
|
2151
|
+
|
|
2152
|
+
return {
|
|
2153
|
+
parameterValues: parameters,
|
|
2154
|
+
parameterError: error,
|
|
2155
|
+
iterations: iteration,
|
|
2156
|
+
};
|
|
2157
|
+
}
|
|
2158
|
+
|
|
2159
|
+
|
|
2160
|
+
/***/ }),
|
|
2161
|
+
|
|
2162
|
+
/***/ "./node_modules/umap-js/node_modules/ml-levenberg-marquardt/src/step.js":
|
|
2163
|
+
/*!******************************************************************************!*\
|
|
2164
|
+
!*** ./node_modules/umap-js/node_modules/ml-levenberg-marquardt/src/step.js ***!
|
|
2165
|
+
\******************************************************************************/
|
|
2166
|
+
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
2167
|
+
|
|
2168
|
+
__webpack_require__.r(__webpack_exports__);
|
|
2169
|
+
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
2170
|
+
/* harmony export */ "default": () => (/* binding */ step)
|
|
2171
|
+
/* harmony export */ });
|
|
2172
|
+
/* harmony import */ var ml_matrix__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ml-matrix */ "./node_modules/ml-matrix/matrix.mjs");
|
|
2173
|
+
|
|
2174
|
+
|
|
2175
|
+
/**
|
|
2176
|
+
* Difference of the matrix function over the parameters
|
|
2177
|
+
* @ignore
|
|
2178
|
+
* @param {{x:Array<number>, y:Array<number>}} data - Array of points to fit in the format [x1, x2, ... ], [y1, y2, ... ]
|
|
2179
|
+
* @param {Array<number>} evaluatedData - Array of previous evaluated function values
|
|
2180
|
+
* @param {Array<number>} params - Array of previous parameter values
|
|
2181
|
+
* @param {number} gradientDifference - Adjustment for decrease the damping parameter
|
|
2182
|
+
* @param {function} paramFunction - The parameters and returns a function with the independent variable as a parameter
|
|
2183
|
+
* @return {Matrix}
|
|
2184
|
+
*/
|
|
2185
|
+
function gradientFunction(
|
|
2186
|
+
data,
|
|
2187
|
+
evaluatedData,
|
|
2188
|
+
params,
|
|
2189
|
+
gradientDifference,
|
|
2190
|
+
paramFunction,
|
|
2191
|
+
) {
|
|
2192
|
+
const n = params.length;
|
|
2193
|
+
const m = data.x.length;
|
|
2194
|
+
|
|
2195
|
+
let ans = new Array(n);
|
|
2196
|
+
|
|
2197
|
+
for (let param = 0; param < n; param++) {
|
|
2198
|
+
ans[param] = new Array(m);
|
|
2199
|
+
let auxParams = params.slice();
|
|
2200
|
+
auxParams[param] += gradientDifference;
|
|
2201
|
+
let funcParam = paramFunction(auxParams);
|
|
2202
|
+
|
|
2203
|
+
for (let point = 0; point < m; point++) {
|
|
2204
|
+
ans[param][point] = evaluatedData[point] - funcParam(data.x[point]);
|
|
2205
|
+
}
|
|
2206
|
+
}
|
|
2207
|
+
return new ml_matrix__WEBPACK_IMPORTED_MODULE_0__.Matrix(ans);
|
|
2208
|
+
}
|
|
2209
|
+
|
|
2210
|
+
/**
|
|
2211
|
+
* Matrix function over the samples
|
|
2212
|
+
* @ignore
|
|
2213
|
+
* @param {{x:Array<number>, y:Array<number>}} data - Array of points to fit in the format [x1, x2, ... ], [y1, y2, ... ]
|
|
2214
|
+
* @param {Array<number>} evaluatedData - Array of previous evaluated function values
|
|
2215
|
+
* @return {Matrix}
|
|
2216
|
+
*/
|
|
2217
|
+
function matrixFunction(data, evaluatedData) {
|
|
2218
|
+
const m = data.x.length;
|
|
2219
|
+
|
|
2220
|
+
let ans = new Array(m);
|
|
2221
|
+
|
|
2222
|
+
for (let point = 0; point < m; point++) {
|
|
2223
|
+
ans[point] = [data.y[point] - evaluatedData[point]];
|
|
2224
|
+
}
|
|
2225
|
+
|
|
2226
|
+
return new ml_matrix__WEBPACK_IMPORTED_MODULE_0__.Matrix(ans);
|
|
2227
|
+
}
|
|
2228
|
+
|
|
2229
|
+
/**
|
|
2230
|
+
* Iteration for Levenberg-Marquardt
|
|
2231
|
+
* @ignore
|
|
2232
|
+
* @param {{x:Array<number>, y:Array<number>}} data - Array of points to fit in the format [x1, x2, ... ], [y1, y2, ... ]
|
|
2233
|
+
* @param {Array<number>} params - Array of previous parameter values
|
|
2234
|
+
* @param {number} damping - Levenberg-Marquardt parameter
|
|
2235
|
+
* @param {number} gradientDifference - Adjustment for decrease the damping parameter
|
|
2236
|
+
* @param {function} parameterizedFunction - The parameters and returns a function with the independent variable as a parameter
|
|
2237
|
+
* @return {Array<number>}
|
|
2238
|
+
*/
|
|
2239
|
+
function step(
|
|
2240
|
+
data,
|
|
2241
|
+
params,
|
|
2242
|
+
damping,
|
|
2243
|
+
gradientDifference,
|
|
2244
|
+
parameterizedFunction,
|
|
2245
|
+
) {
|
|
2246
|
+
let value = damping * gradientDifference * gradientDifference;
|
|
2247
|
+
let identity = ml_matrix__WEBPACK_IMPORTED_MODULE_0__.Matrix.eye(params.length, params.length, value);
|
|
2248
|
+
|
|
2249
|
+
const func = parameterizedFunction(params);
|
|
2250
|
+
|
|
2251
|
+
let evaluatedData = new Float64Array(data.x.length);
|
|
2252
|
+
for (let i = 0; i < data.x.length; i++) {
|
|
2253
|
+
evaluatedData[i] = func(data.x[i]);
|
|
2254
|
+
}
|
|
2255
|
+
|
|
2256
|
+
let gradientFunc = gradientFunction(
|
|
2257
|
+
data,
|
|
2258
|
+
evaluatedData,
|
|
2259
|
+
params,
|
|
2260
|
+
gradientDifference,
|
|
2261
|
+
parameterizedFunction,
|
|
2262
|
+
);
|
|
2263
|
+
let matrixFunc = matrixFunction(data, evaluatedData);
|
|
2264
|
+
let inverseMatrix = (0,ml_matrix__WEBPACK_IMPORTED_MODULE_0__.inverse)(
|
|
2265
|
+
identity.add(gradientFunc.mmul(gradientFunc.transpose())),
|
|
2266
|
+
);
|
|
2267
|
+
|
|
2268
|
+
params = new ml_matrix__WEBPACK_IMPORTED_MODULE_0__.Matrix([params]);
|
|
2269
|
+
params = params.sub(
|
|
2270
|
+
inverseMatrix
|
|
2271
|
+
.mmul(gradientFunc)
|
|
2272
|
+
.mmul(matrixFunc)
|
|
2273
|
+
.mul(gradientDifference)
|
|
2274
|
+
.transpose(),
|
|
2275
|
+
);
|
|
2276
|
+
|
|
2277
|
+
return params.to1DArray();
|
|
2278
|
+
}
|
|
2279
|
+
|
|
2280
|
+
|
|
2281
|
+
/***/ })
|
|
2282
|
+
|
|
2283
|
+
}]);
|
|
2284
|
+
//# sourceMappingURL=vendors-node_modules_umap-js_dist_index_js.js.map
|