@elarsaks/umap-wasm 0.1.2 → 0.1.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/dist/{src/heap.d.ts → heap.d.ts} +1 -1
- package/dist/heap.js +184 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +2 -0
- package/dist/lib.d.ts +2 -0
- package/dist/lib.js +2 -0
- package/dist/matrix.js +257 -0
- package/dist/{src/nn_descent.d.ts → nn_descent.d.ts} +4 -4
- package/dist/nn_descent.js +127 -0
- package/dist/{src/tree.d.ts → tree.d.ts} +2 -2
- package/dist/tree.js +228 -0
- package/dist/{src/umap.d.ts → umap.d.ts} +1 -1
- package/dist/umap.js +700 -0
- package/dist/{src/utils.d.ts → utils.d.ts} +1 -1
- package/dist/utils.js +98 -0
- package/dist/wasmBridge.js +188 -0
- package/lib/umap-js.js +6842 -7490
- package/lib/umap-js.min.js +1 -1
- package/package.json +64 -63
- package/dist/src/heap.js +0 -226
- package/dist/src/index.d.ts +0 -2
- package/dist/src/index.js +0 -8
- package/dist/src/lib.d.ts +0 -1
- package/dist/src/lib.js +0 -5
- package/dist/src/matrix.js +0 -360
- package/dist/src/nn_descent.js +0 -204
- package/dist/src/tree.js +0 -320
- package/dist/src/umap.js +0 -842
- package/dist/src/utils.js +0 -137
- package/dist/src/wasmBridge.js +0 -290
- package/dist/test/matrix.test.d.ts +0 -1
- package/dist/test/matrix.test.js +0 -169
- package/dist/test/nn_descent.test.d.ts +0 -1
- package/dist/test/nn_descent.test.js +0 -58
- package/dist/test/smoke.playwright.test.d.ts +0 -1
- package/dist/test/smoke.playwright.test.js +0 -98
- package/dist/test/test_data.d.ts +0 -13
- package/dist/test/test_data.js +0 -1054
- package/dist/test/tree.test.d.ts +0 -1
- package/dist/test/tree.test.js +0 -60
- package/dist/test/umap.test.d.ts +0 -1
- package/dist/test/umap.test.js +0 -293
- package/dist/test/utils.test.d.ts +0 -1
- package/dist/test/utils.test.js +0 -128
- package/dist/test/wasmDistance.test.d.ts +0 -1
- package/dist/test/wasmDistance.test.js +0 -124
- package/dist/test/wasmMatrix.test.d.ts +0 -1
- package/dist/test/wasmMatrix.test.js +0 -389
- package/dist/test/wasmTree.test.d.ts +0 -1
- package/dist/test/wasmTree.test.js +0 -212
- /package/dist/{src/matrix.d.ts → matrix.d.ts} +0 -0
- /package/dist/{src/wasmBridge.d.ts → wasmBridge.d.ts} +0 -0
package/dist/src/matrix.js
DELETED
|
@@ -1,360 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
-
}) : function(o, v) {
|
|
16
|
-
o["default"] = v;
|
|
17
|
-
});
|
|
18
|
-
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
-
var ownKeys = function(o) {
|
|
20
|
-
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
-
var ar = [];
|
|
22
|
-
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
-
return ar;
|
|
24
|
-
};
|
|
25
|
-
return ownKeys(o);
|
|
26
|
-
};
|
|
27
|
-
return function (mod) {
|
|
28
|
-
if (mod && mod.__esModule) return mod;
|
|
29
|
-
var result = {};
|
|
30
|
-
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
-
__setModuleDefault(result, mod);
|
|
32
|
-
return result;
|
|
33
|
-
};
|
|
34
|
-
})();
|
|
35
|
-
var __read = (this && this.__read) || function (o, n) {
|
|
36
|
-
var m = typeof Symbol === "function" && o[Symbol.iterator];
|
|
37
|
-
if (!m) return o;
|
|
38
|
-
var i = m.call(o), r, ar = [], e;
|
|
39
|
-
try {
|
|
40
|
-
while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
|
|
41
|
-
}
|
|
42
|
-
catch (error) { e = { error: error }; }
|
|
43
|
-
finally {
|
|
44
|
-
try {
|
|
45
|
-
if (r && !r.done && (m = i["return"])) m.call(i);
|
|
46
|
-
}
|
|
47
|
-
finally { if (e) throw e.error; }
|
|
48
|
-
}
|
|
49
|
-
return ar;
|
|
50
|
-
};
|
|
51
|
-
var __values = (this && this.__values) || function(o) {
|
|
52
|
-
var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
|
|
53
|
-
if (m) return m.call(o);
|
|
54
|
-
if (o && typeof o.length === "number") return {
|
|
55
|
-
next: function () {
|
|
56
|
-
if (o && i >= o.length) o = void 0;
|
|
57
|
-
return { value: o && o[i++], done: !o };
|
|
58
|
-
}
|
|
59
|
-
};
|
|
60
|
-
throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
|
|
61
|
-
};
|
|
62
|
-
var _a;
|
|
63
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
64
|
-
exports.SparseMatrix = void 0;
|
|
65
|
-
exports.transpose = transpose;
|
|
66
|
-
exports.identity = identity;
|
|
67
|
-
exports.pairwiseMultiply = pairwiseMultiply;
|
|
68
|
-
exports.add = add;
|
|
69
|
-
exports.subtract = subtract;
|
|
70
|
-
exports.maximum = maximum;
|
|
71
|
-
exports.multiplyScalar = multiplyScalar;
|
|
72
|
-
exports.eliminateZeros = eliminateZeros;
|
|
73
|
-
exports.normalize = normalize;
|
|
74
|
-
exports.getCSR = getCSR;
|
|
75
|
-
var utils = __importStar(require("./utils"));
|
|
76
|
-
var SparseMatrix = (function () {
|
|
77
|
-
function SparseMatrix(rows, cols, values, dims) {
|
|
78
|
-
this.entries = new Map();
|
|
79
|
-
this.nRows = 0;
|
|
80
|
-
this.nCols = 0;
|
|
81
|
-
if (rows.length !== cols.length || rows.length !== values.length) {
|
|
82
|
-
throw new Error('rows, cols and values arrays must all have the same length');
|
|
83
|
-
}
|
|
84
|
-
this.nRows = dims[0];
|
|
85
|
-
this.nCols = dims[1];
|
|
86
|
-
for (var i = 0; i < values.length; i++) {
|
|
87
|
-
var row = rows[i];
|
|
88
|
-
var col = cols[i];
|
|
89
|
-
this.checkDims(row, col);
|
|
90
|
-
var key = this.makeKey(row, col);
|
|
91
|
-
this.entries.set(key, { value: values[i], row: row, col: col });
|
|
92
|
-
}
|
|
93
|
-
}
|
|
94
|
-
SparseMatrix.prototype.makeKey = function (row, col) {
|
|
95
|
-
return "".concat(row, ":").concat(col);
|
|
96
|
-
};
|
|
97
|
-
SparseMatrix.prototype.checkDims = function (row, col) {
|
|
98
|
-
var withinBounds = row < this.nRows && col < this.nCols;
|
|
99
|
-
if (!withinBounds) {
|
|
100
|
-
throw new Error('row and/or col specified outside of matrix dimensions');
|
|
101
|
-
}
|
|
102
|
-
};
|
|
103
|
-
SparseMatrix.prototype.set = function (row, col, value) {
|
|
104
|
-
this.checkDims(row, col);
|
|
105
|
-
var key = this.makeKey(row, col);
|
|
106
|
-
if (!this.entries.has(key)) {
|
|
107
|
-
this.entries.set(key, { value: value, row: row, col: col });
|
|
108
|
-
}
|
|
109
|
-
else {
|
|
110
|
-
this.entries.get(key).value = value;
|
|
111
|
-
}
|
|
112
|
-
};
|
|
113
|
-
SparseMatrix.prototype.get = function (row, col, defaultValue) {
|
|
114
|
-
if (defaultValue === void 0) { defaultValue = 0; }
|
|
115
|
-
this.checkDims(row, col);
|
|
116
|
-
var key = this.makeKey(row, col);
|
|
117
|
-
if (this.entries.has(key)) {
|
|
118
|
-
return this.entries.get(key).value;
|
|
119
|
-
}
|
|
120
|
-
else {
|
|
121
|
-
return defaultValue;
|
|
122
|
-
}
|
|
123
|
-
};
|
|
124
|
-
SparseMatrix.prototype.getAll = function (ordered) {
|
|
125
|
-
if (ordered === void 0) { ordered = true; }
|
|
126
|
-
var rowColValues = [];
|
|
127
|
-
this.entries.forEach(function (value) {
|
|
128
|
-
rowColValues.push(value);
|
|
129
|
-
});
|
|
130
|
-
if (ordered) {
|
|
131
|
-
rowColValues.sort(function (a, b) {
|
|
132
|
-
if (a.row === b.row) {
|
|
133
|
-
return a.col - b.col;
|
|
134
|
-
}
|
|
135
|
-
else {
|
|
136
|
-
return a.row - b.row;
|
|
137
|
-
}
|
|
138
|
-
});
|
|
139
|
-
}
|
|
140
|
-
return rowColValues;
|
|
141
|
-
};
|
|
142
|
-
SparseMatrix.prototype.getDims = function () {
|
|
143
|
-
return [this.nRows, this.nCols];
|
|
144
|
-
};
|
|
145
|
-
SparseMatrix.prototype.getRows = function () {
|
|
146
|
-
return Array.from(this.entries, function (_a) {
|
|
147
|
-
var _b = __read(_a, 2), key = _b[0], value = _b[1];
|
|
148
|
-
return value.row;
|
|
149
|
-
});
|
|
150
|
-
};
|
|
151
|
-
SparseMatrix.prototype.getCols = function () {
|
|
152
|
-
return Array.from(this.entries, function (_a) {
|
|
153
|
-
var _b = __read(_a, 2), key = _b[0], value = _b[1];
|
|
154
|
-
return value.col;
|
|
155
|
-
});
|
|
156
|
-
};
|
|
157
|
-
SparseMatrix.prototype.getValues = function () {
|
|
158
|
-
return Array.from(this.entries, function (_a) {
|
|
159
|
-
var _b = __read(_a, 2), key = _b[0], value = _b[1];
|
|
160
|
-
return value.value;
|
|
161
|
-
});
|
|
162
|
-
};
|
|
163
|
-
SparseMatrix.prototype.forEach = function (fn) {
|
|
164
|
-
this.entries.forEach(function (value) { return fn(value.value, value.row, value.col); });
|
|
165
|
-
};
|
|
166
|
-
SparseMatrix.prototype.map = function (fn) {
|
|
167
|
-
var vals = [];
|
|
168
|
-
this.entries.forEach(function (value) {
|
|
169
|
-
vals.push(fn(value.value, value.row, value.col));
|
|
170
|
-
});
|
|
171
|
-
var dims = [this.nRows, this.nCols];
|
|
172
|
-
return new SparseMatrix(this.getRows(), this.getCols(), vals, dims);
|
|
173
|
-
};
|
|
174
|
-
SparseMatrix.prototype.toArray = function () {
|
|
175
|
-
var _this = this;
|
|
176
|
-
var rows = utils.empty(this.nRows);
|
|
177
|
-
var output = rows.map(function () {
|
|
178
|
-
return utils.zeros(_this.nCols);
|
|
179
|
-
});
|
|
180
|
-
this.entries.forEach(function (value) {
|
|
181
|
-
output[value.row][value.col] = value.value;
|
|
182
|
-
});
|
|
183
|
-
return output;
|
|
184
|
-
};
|
|
185
|
-
return SparseMatrix;
|
|
186
|
-
}());
|
|
187
|
-
exports.SparseMatrix = SparseMatrix;
|
|
188
|
-
function transpose(matrix) {
|
|
189
|
-
var cols = [];
|
|
190
|
-
var rows = [];
|
|
191
|
-
var vals = [];
|
|
192
|
-
matrix.forEach(function (value, row, col) {
|
|
193
|
-
cols.push(row);
|
|
194
|
-
rows.push(col);
|
|
195
|
-
vals.push(value);
|
|
196
|
-
});
|
|
197
|
-
var dims = [matrix.nCols, matrix.nRows];
|
|
198
|
-
return new SparseMatrix(rows, cols, vals, dims);
|
|
199
|
-
}
|
|
200
|
-
function identity(size) {
|
|
201
|
-
var _a = __read(size, 1), rows = _a[0];
|
|
202
|
-
var matrix = new SparseMatrix([], [], [], size);
|
|
203
|
-
for (var i = 0; i < rows; i++) {
|
|
204
|
-
matrix.set(i, i, 1);
|
|
205
|
-
}
|
|
206
|
-
return matrix;
|
|
207
|
-
}
|
|
208
|
-
function pairwiseMultiply(a, b) {
|
|
209
|
-
return elementWise(a, b, function (x, y) { return x * y; });
|
|
210
|
-
}
|
|
211
|
-
function add(a, b) {
|
|
212
|
-
return elementWise(a, b, function (x, y) { return x + y; });
|
|
213
|
-
}
|
|
214
|
-
function subtract(a, b) {
|
|
215
|
-
return elementWise(a, b, function (x, y) { return x - y; });
|
|
216
|
-
}
|
|
217
|
-
function maximum(a, b) {
|
|
218
|
-
return elementWise(a, b, function (x, y) { return (x > y ? x : y); });
|
|
219
|
-
}
|
|
220
|
-
function multiplyScalar(a, scalar) {
|
|
221
|
-
return a.map(function (value) {
|
|
222
|
-
return value * scalar;
|
|
223
|
-
});
|
|
224
|
-
}
|
|
225
|
-
function eliminateZeros(m) {
|
|
226
|
-
var zeroIndices = new Set();
|
|
227
|
-
var values = m.getValues();
|
|
228
|
-
var rows = m.getRows();
|
|
229
|
-
var cols = m.getCols();
|
|
230
|
-
for (var i = 0; i < values.length; i++) {
|
|
231
|
-
if (values[i] === 0) {
|
|
232
|
-
zeroIndices.add(i);
|
|
233
|
-
}
|
|
234
|
-
}
|
|
235
|
-
var removeByZeroIndex = function (_, index) { return !zeroIndices.has(index); };
|
|
236
|
-
var nextValues = values.filter(removeByZeroIndex);
|
|
237
|
-
var nextRows = rows.filter(removeByZeroIndex);
|
|
238
|
-
var nextCols = cols.filter(removeByZeroIndex);
|
|
239
|
-
return new SparseMatrix(nextRows, nextCols, nextValues, m.getDims());
|
|
240
|
-
}
|
|
241
|
-
function normalize(m, normType) {
|
|
242
|
-
var e_1, _a;
|
|
243
|
-
if (normType === void 0) { normType = "l2"; }
|
|
244
|
-
var normFn = normFns[normType];
|
|
245
|
-
var colsByRow = new Map();
|
|
246
|
-
m.forEach(function (_, row, col) {
|
|
247
|
-
var cols = colsByRow.get(row) || [];
|
|
248
|
-
cols.push(col);
|
|
249
|
-
colsByRow.set(row, cols);
|
|
250
|
-
});
|
|
251
|
-
var nextMatrix = new SparseMatrix([], [], [], m.getDims());
|
|
252
|
-
var _loop_1 = function (row) {
|
|
253
|
-
var cols = colsByRow.get(row).sort();
|
|
254
|
-
var vals = cols.map(function (col) { return m.get(row, col); });
|
|
255
|
-
var norm = normFn(vals);
|
|
256
|
-
for (var i = 0; i < norm.length; i++) {
|
|
257
|
-
nextMatrix.set(row, cols[i], norm[i]);
|
|
258
|
-
}
|
|
259
|
-
};
|
|
260
|
-
try {
|
|
261
|
-
for (var _b = __values(colsByRow.keys()), _c = _b.next(); !_c.done; _c = _b.next()) {
|
|
262
|
-
var row = _c.value;
|
|
263
|
-
_loop_1(row);
|
|
264
|
-
}
|
|
265
|
-
}
|
|
266
|
-
catch (e_1_1) { e_1 = { error: e_1_1 }; }
|
|
267
|
-
finally {
|
|
268
|
-
try {
|
|
269
|
-
if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
|
|
270
|
-
}
|
|
271
|
-
finally { if (e_1) throw e_1.error; }
|
|
272
|
-
}
|
|
273
|
-
return nextMatrix;
|
|
274
|
-
}
|
|
275
|
-
var normFns = (_a = {},
|
|
276
|
-
_a["max"] = function (xs) {
|
|
277
|
-
var max = -Infinity;
|
|
278
|
-
for (var i = 0; i < xs.length; i++) {
|
|
279
|
-
max = xs[i] > max ? xs[i] : max;
|
|
280
|
-
}
|
|
281
|
-
return xs.map(function (x) { return x / max; });
|
|
282
|
-
},
|
|
283
|
-
_a["l1"] = function (xs) {
|
|
284
|
-
var sum = 0;
|
|
285
|
-
for (var i = 0; i < xs.length; i++) {
|
|
286
|
-
sum += xs[i];
|
|
287
|
-
}
|
|
288
|
-
return xs.map(function (x) { return x / sum; });
|
|
289
|
-
},
|
|
290
|
-
_a["l2"] = function (xs) {
|
|
291
|
-
var sum = 0;
|
|
292
|
-
for (var i = 0; i < xs.length; i++) {
|
|
293
|
-
sum += Math.pow(xs[i], 2);
|
|
294
|
-
}
|
|
295
|
-
return xs.map(function (x) { return Math.sqrt(Math.pow(x, 2) / sum); });
|
|
296
|
-
},
|
|
297
|
-
_a);
|
|
298
|
-
function elementWise(a, b, op) {
|
|
299
|
-
var visited = new Set();
|
|
300
|
-
var rows = [];
|
|
301
|
-
var cols = [];
|
|
302
|
-
var vals = [];
|
|
303
|
-
var operate = function (row, col) {
|
|
304
|
-
rows.push(row);
|
|
305
|
-
cols.push(col);
|
|
306
|
-
var nextValue = op(a.get(row, col), b.get(row, col));
|
|
307
|
-
vals.push(nextValue);
|
|
308
|
-
};
|
|
309
|
-
var valuesA = a.getValues();
|
|
310
|
-
var rowsA = a.getRows();
|
|
311
|
-
var colsA = a.getCols();
|
|
312
|
-
for (var i = 0; i < valuesA.length; i++) {
|
|
313
|
-
var row = rowsA[i];
|
|
314
|
-
var col = colsA[i];
|
|
315
|
-
var key = "".concat(row, ":").concat(col);
|
|
316
|
-
visited.add(key);
|
|
317
|
-
operate(row, col);
|
|
318
|
-
}
|
|
319
|
-
var valuesB = b.getValues();
|
|
320
|
-
var rowsB = b.getRows();
|
|
321
|
-
var colsB = b.getCols();
|
|
322
|
-
for (var i = 0; i < valuesB.length; i++) {
|
|
323
|
-
var row = rowsB[i];
|
|
324
|
-
var col = colsB[i];
|
|
325
|
-
var key = "".concat(row, ":").concat(col);
|
|
326
|
-
if (visited.has(key))
|
|
327
|
-
continue;
|
|
328
|
-
operate(row, col);
|
|
329
|
-
}
|
|
330
|
-
var dims = [a.nRows, a.nCols];
|
|
331
|
-
return new SparseMatrix(rows, cols, vals, dims);
|
|
332
|
-
}
|
|
333
|
-
function getCSR(x) {
|
|
334
|
-
var entries = [];
|
|
335
|
-
x.forEach(function (value, row, col) {
|
|
336
|
-
entries.push({ value: value, row: row, col: col });
|
|
337
|
-
});
|
|
338
|
-
entries.sort(function (a, b) {
|
|
339
|
-
if (a.row === b.row) {
|
|
340
|
-
return a.col - b.col;
|
|
341
|
-
}
|
|
342
|
-
else {
|
|
343
|
-
return a.row - b.row;
|
|
344
|
-
}
|
|
345
|
-
});
|
|
346
|
-
var indices = [];
|
|
347
|
-
var values = [];
|
|
348
|
-
var indptr = [];
|
|
349
|
-
var currentRow = -1;
|
|
350
|
-
for (var i = 0; i < entries.length; i++) {
|
|
351
|
-
var _a = entries[i], row = _a.row, col = _a.col, value = _a.value;
|
|
352
|
-
if (row !== currentRow) {
|
|
353
|
-
currentRow = row;
|
|
354
|
-
indptr.push(i);
|
|
355
|
-
}
|
|
356
|
-
indices.push(col);
|
|
357
|
-
values.push(value);
|
|
358
|
-
}
|
|
359
|
-
return { indices: indices, values: values, indptr: indptr };
|
|
360
|
-
}
|
package/dist/src/nn_descent.js
DELETED
|
@@ -1,204 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
-
}) : function(o, v) {
|
|
16
|
-
o["default"] = v;
|
|
17
|
-
});
|
|
18
|
-
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
-
var ownKeys = function(o) {
|
|
20
|
-
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
-
var ar = [];
|
|
22
|
-
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
-
return ar;
|
|
24
|
-
};
|
|
25
|
-
return ownKeys(o);
|
|
26
|
-
};
|
|
27
|
-
return function (mod) {
|
|
28
|
-
if (mod && mod.__esModule) return mod;
|
|
29
|
-
var result = {};
|
|
30
|
-
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
-
__setModuleDefault(result, mod);
|
|
32
|
-
return result;
|
|
33
|
-
};
|
|
34
|
-
})();
|
|
35
|
-
var __values = (this && this.__values) || function(o) {
|
|
36
|
-
var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
|
|
37
|
-
if (m) return m.call(o);
|
|
38
|
-
if (o && typeof o.length === "number") return {
|
|
39
|
-
next: function () {
|
|
40
|
-
if (o && i >= o.length) o = void 0;
|
|
41
|
-
return { value: o && o[i++], done: !o };
|
|
42
|
-
}
|
|
43
|
-
};
|
|
44
|
-
throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
|
|
45
|
-
};
|
|
46
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
47
|
-
exports.makeNNDescent = makeNNDescent;
|
|
48
|
-
exports.makeInitializations = makeInitializations;
|
|
49
|
-
exports.makeInitializedNNSearch = makeInitializedNNSearch;
|
|
50
|
-
exports.initializeSearch = initializeSearch;
|
|
51
|
-
var heap = __importStar(require("./heap"));
|
|
52
|
-
var matrix = __importStar(require("./matrix"));
|
|
53
|
-
var tree = __importStar(require("./tree"));
|
|
54
|
-
var utils = __importStar(require("./utils"));
|
|
55
|
-
function makeNNDescent(distanceFn, random) {
|
|
56
|
-
return function nNDescent(data, leafArray, nNeighbors, nIters, maxCandidates, delta, rho, rpTreeInit) {
|
|
57
|
-
if (nIters === void 0) { nIters = 10; }
|
|
58
|
-
if (maxCandidates === void 0) { maxCandidates = 50; }
|
|
59
|
-
if (delta === void 0) { delta = 0.001; }
|
|
60
|
-
if (rho === void 0) { rho = 0.5; }
|
|
61
|
-
if (rpTreeInit === void 0) { rpTreeInit = true; }
|
|
62
|
-
var nVertices = data.length;
|
|
63
|
-
var currentGraph = heap.makeHeap(data.length, nNeighbors);
|
|
64
|
-
for (var i = 0; i < data.length; i++) {
|
|
65
|
-
var indices = heap.rejectionSample(nNeighbors, data.length, random);
|
|
66
|
-
for (var j = 0; j < indices.length; j++) {
|
|
67
|
-
var d = distanceFn(data[i], data[indices[j]]);
|
|
68
|
-
heap.heapPush(currentGraph, i, d, indices[j], 1);
|
|
69
|
-
heap.heapPush(currentGraph, indices[j], d, i, 1);
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
if (rpTreeInit) {
|
|
73
|
-
for (var n = 0; n < leafArray.length; n++) {
|
|
74
|
-
for (var i = 0; i < leafArray[n].length; i++) {
|
|
75
|
-
if (leafArray[n][i] < 0) {
|
|
76
|
-
break;
|
|
77
|
-
}
|
|
78
|
-
for (var j = i + 1; j < leafArray[n].length; j++) {
|
|
79
|
-
if (leafArray[n][j] < 0) {
|
|
80
|
-
break;
|
|
81
|
-
}
|
|
82
|
-
var d = distanceFn(data[leafArray[n][i]], data[leafArray[n][j]]);
|
|
83
|
-
heap.heapPush(currentGraph, leafArray[n][i], d, leafArray[n][j], 1);
|
|
84
|
-
heap.heapPush(currentGraph, leafArray[n][j], d, leafArray[n][i], 1);
|
|
85
|
-
}
|
|
86
|
-
}
|
|
87
|
-
}
|
|
88
|
-
}
|
|
89
|
-
for (var n = 0; n < nIters; n++) {
|
|
90
|
-
var candidateNeighbors = heap.buildCandidates(currentGraph, nVertices, nNeighbors, maxCandidates, random);
|
|
91
|
-
var c = 0;
|
|
92
|
-
for (var i = 0; i < nVertices; i++) {
|
|
93
|
-
for (var j = 0; j < maxCandidates; j++) {
|
|
94
|
-
var p = Math.floor(candidateNeighbors[0][i][j]);
|
|
95
|
-
if (p < 0 || utils.tauRand(random) < rho) {
|
|
96
|
-
continue;
|
|
97
|
-
}
|
|
98
|
-
for (var k = 0; k < maxCandidates; k++) {
|
|
99
|
-
var q = Math.floor(candidateNeighbors[0][i][k]);
|
|
100
|
-
var cj = candidateNeighbors[2][i][j];
|
|
101
|
-
var ck = candidateNeighbors[2][i][k];
|
|
102
|
-
if (q < 0 || (!cj && !ck)) {
|
|
103
|
-
continue;
|
|
104
|
-
}
|
|
105
|
-
var d = distanceFn(data[p], data[q]);
|
|
106
|
-
c += heap.heapPush(currentGraph, p, d, q, 1);
|
|
107
|
-
c += heap.heapPush(currentGraph, q, d, p, 1);
|
|
108
|
-
}
|
|
109
|
-
}
|
|
110
|
-
}
|
|
111
|
-
if (c <= delta * nNeighbors * data.length) {
|
|
112
|
-
break;
|
|
113
|
-
}
|
|
114
|
-
}
|
|
115
|
-
var sorted = heap.deheapSort(currentGraph);
|
|
116
|
-
return sorted;
|
|
117
|
-
};
|
|
118
|
-
}
|
|
119
|
-
function makeInitializations(distanceFn) {
|
|
120
|
-
function initFromRandom(nNeighbors, data, queryPoints, _heap, random) {
|
|
121
|
-
for (var i = 0; i < queryPoints.length; i++) {
|
|
122
|
-
var indices = utils.rejectionSample(nNeighbors, data.length, random);
|
|
123
|
-
for (var j = 0; j < indices.length; j++) {
|
|
124
|
-
if (indices[j] < 0) {
|
|
125
|
-
continue;
|
|
126
|
-
}
|
|
127
|
-
var d = distanceFn(data[indices[j]], queryPoints[i]);
|
|
128
|
-
heap.heapPush(_heap, i, d, indices[j], 1);
|
|
129
|
-
}
|
|
130
|
-
}
|
|
131
|
-
}
|
|
132
|
-
function initFromTree(_tree, data, queryPoints, _heap, random) {
|
|
133
|
-
for (var i = 0; i < queryPoints.length; i++) {
|
|
134
|
-
var indices = tree.searchFlatTree(queryPoints[i], _tree, random);
|
|
135
|
-
for (var j = 0; j < indices.length; j++) {
|
|
136
|
-
if (indices[j] < 0) {
|
|
137
|
-
return;
|
|
138
|
-
}
|
|
139
|
-
var d = distanceFn(data[indices[j]], queryPoints[i]);
|
|
140
|
-
heap.heapPush(_heap, i, d, indices[j], 1);
|
|
141
|
-
}
|
|
142
|
-
}
|
|
143
|
-
return;
|
|
144
|
-
}
|
|
145
|
-
return { initFromRandom: initFromRandom, initFromTree: initFromTree };
|
|
146
|
-
}
|
|
147
|
-
function makeInitializedNNSearch(distanceFn) {
|
|
148
|
-
return function nnSearchFn(data, graph, initialization, queryPoints) {
|
|
149
|
-
var e_1, _a;
|
|
150
|
-
var _b = matrix.getCSR(graph), indices = _b.indices, indptr = _b.indptr;
|
|
151
|
-
for (var i = 0; i < queryPoints.length; i++) {
|
|
152
|
-
var tried = new Set(initialization[0][i]);
|
|
153
|
-
while (true) {
|
|
154
|
-
var vertex = heap.smallestFlagged(initialization, i);
|
|
155
|
-
if (vertex === -1) {
|
|
156
|
-
break;
|
|
157
|
-
}
|
|
158
|
-
var candidates = indices.slice(indptr[vertex], indptr[vertex + 1]);
|
|
159
|
-
try {
|
|
160
|
-
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()) {
|
|
161
|
-
var candidate = candidates_1_1.value;
|
|
162
|
-
if (candidate === vertex ||
|
|
163
|
-
candidate === -1 ||
|
|
164
|
-
tried.has(candidate)) {
|
|
165
|
-
continue;
|
|
166
|
-
}
|
|
167
|
-
var d = distanceFn(data[candidate], queryPoints[i]);
|
|
168
|
-
heap.uncheckedHeapPush(initialization, i, d, candidate, 1);
|
|
169
|
-
tried.add(candidate);
|
|
170
|
-
}
|
|
171
|
-
}
|
|
172
|
-
catch (e_1_1) { e_1 = { error: e_1_1 }; }
|
|
173
|
-
finally {
|
|
174
|
-
try {
|
|
175
|
-
if (candidates_1_1 && !candidates_1_1.done && (_a = candidates_1.return)) _a.call(candidates_1);
|
|
176
|
-
}
|
|
177
|
-
finally { if (e_1) throw e_1.error; }
|
|
178
|
-
}
|
|
179
|
-
}
|
|
180
|
-
}
|
|
181
|
-
return initialization;
|
|
182
|
-
};
|
|
183
|
-
}
|
|
184
|
-
function initializeSearch(forest, data, queryPoints, nNeighbors, initFromRandom, initFromTree, random) {
|
|
185
|
-
var e_2, _a;
|
|
186
|
-
var results = heap.makeHeap(queryPoints.length, nNeighbors);
|
|
187
|
-
initFromRandom(nNeighbors, data, queryPoints, results, random);
|
|
188
|
-
if (forest) {
|
|
189
|
-
try {
|
|
190
|
-
for (var forest_1 = __values(forest), forest_1_1 = forest_1.next(); !forest_1_1.done; forest_1_1 = forest_1.next()) {
|
|
191
|
-
var tree_1 = forest_1_1.value;
|
|
192
|
-
initFromTree(tree_1, data, queryPoints, results, random);
|
|
193
|
-
}
|
|
194
|
-
}
|
|
195
|
-
catch (e_2_1) { e_2 = { error: e_2_1 }; }
|
|
196
|
-
finally {
|
|
197
|
-
try {
|
|
198
|
-
if (forest_1_1 && !forest_1_1.done && (_a = forest_1.return)) _a.call(forest_1);
|
|
199
|
-
}
|
|
200
|
-
finally { if (e_2) throw e_2.error; }
|
|
201
|
-
}
|
|
202
|
-
}
|
|
203
|
-
return results;
|
|
204
|
-
}
|