@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.
Files changed (52) hide show
  1. package/dist/{src/heap.d.ts → heap.d.ts} +1 -1
  2. package/dist/heap.js +184 -0
  3. package/dist/index.d.ts +2 -0
  4. package/dist/index.js +2 -0
  5. package/dist/lib.d.ts +2 -0
  6. package/dist/lib.js +2 -0
  7. package/dist/matrix.js +257 -0
  8. package/dist/{src/nn_descent.d.ts → nn_descent.d.ts} +4 -4
  9. package/dist/nn_descent.js +127 -0
  10. package/dist/{src/tree.d.ts → tree.d.ts} +2 -2
  11. package/dist/tree.js +228 -0
  12. package/dist/{src/umap.d.ts → umap.d.ts} +1 -1
  13. package/dist/umap.js +700 -0
  14. package/dist/{src/utils.d.ts → utils.d.ts} +1 -1
  15. package/dist/utils.js +98 -0
  16. package/dist/wasmBridge.js +188 -0
  17. package/lib/umap-js.js +6842 -7490
  18. package/lib/umap-js.min.js +1 -1
  19. package/package.json +64 -63
  20. package/dist/src/heap.js +0 -226
  21. package/dist/src/index.d.ts +0 -2
  22. package/dist/src/index.js +0 -8
  23. package/dist/src/lib.d.ts +0 -1
  24. package/dist/src/lib.js +0 -5
  25. package/dist/src/matrix.js +0 -360
  26. package/dist/src/nn_descent.js +0 -204
  27. package/dist/src/tree.js +0 -320
  28. package/dist/src/umap.js +0 -842
  29. package/dist/src/utils.js +0 -137
  30. package/dist/src/wasmBridge.js +0 -290
  31. package/dist/test/matrix.test.d.ts +0 -1
  32. package/dist/test/matrix.test.js +0 -169
  33. package/dist/test/nn_descent.test.d.ts +0 -1
  34. package/dist/test/nn_descent.test.js +0 -58
  35. package/dist/test/smoke.playwright.test.d.ts +0 -1
  36. package/dist/test/smoke.playwright.test.js +0 -98
  37. package/dist/test/test_data.d.ts +0 -13
  38. package/dist/test/test_data.js +0 -1054
  39. package/dist/test/tree.test.d.ts +0 -1
  40. package/dist/test/tree.test.js +0 -60
  41. package/dist/test/umap.test.d.ts +0 -1
  42. package/dist/test/umap.test.js +0 -293
  43. package/dist/test/utils.test.d.ts +0 -1
  44. package/dist/test/utils.test.js +0 -128
  45. package/dist/test/wasmDistance.test.d.ts +0 -1
  46. package/dist/test/wasmDistance.test.js +0 -124
  47. package/dist/test/wasmMatrix.test.d.ts +0 -1
  48. package/dist/test/wasmMatrix.test.js +0 -389
  49. package/dist/test/wasmTree.test.d.ts +0 -1
  50. package/dist/test/wasmTree.test.js +0 -212
  51. /package/dist/{src/matrix.d.ts → matrix.d.ts} +0 -0
  52. /package/dist/{src/wasmBridge.d.ts → wasmBridge.d.ts} +0 -0
package/dist/src/tree.js DELETED
@@ -1,320 +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 __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
52
- if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
53
- if (ar || !(i in from)) {
54
- if (!ar) ar = Array.prototype.slice.call(from, 0, i);
55
- ar[i] = from[i];
56
- }
57
- }
58
- return to.concat(ar || Array.prototype.slice.call(from));
59
- };
60
- var __values = (this && this.__values) || function(o) {
61
- var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
62
- if (m) return m.call(o);
63
- if (o && typeof o.length === "number") return {
64
- next: function () {
65
- if (o && i >= o.length) o = void 0;
66
- return { value: o && o[i++], done: !o };
67
- }
68
- };
69
- throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
70
- };
71
- Object.defineProperty(exports, "__esModule", { value: true });
72
- exports.FlatTree = void 0;
73
- exports.makeForest = makeForest;
74
- exports.makeLeafArray = makeLeafArray;
75
- exports.searchFlatTree = searchFlatTree;
76
- var utils = __importStar(require("./utils"));
77
- var wasmBridge_1 = require("./wasmBridge");
78
- var FlatTree = (function () {
79
- function FlatTree(hyperplanes, offsets, children, indices) {
80
- this.hyperplanes = hyperplanes;
81
- this.offsets = offsets;
82
- this.children = children;
83
- this.indices = indices;
84
- }
85
- FlatTree.fromWasm = function (wasmTree) {
86
- var jsData = (0, wasmBridge_1.wasmTreeToJs)(wasmTree);
87
- var tree = new FlatTree(jsData.hyperplanes, jsData.offsets, jsData.children, jsData.indices);
88
- tree.wasmTree = wasmTree;
89
- return tree;
90
- };
91
- FlatTree.prototype.getWasmTree = function () {
92
- return this.wasmTree;
93
- };
94
- FlatTree.prototype.dispose = function () {
95
- if (this.wasmTree) {
96
- this.wasmTree.free();
97
- this.wasmTree = undefined;
98
- }
99
- };
100
- return FlatTree;
101
- }());
102
- exports.FlatTree = FlatTree;
103
- function makeForest(data, nNeighbors, nTrees, random, useWasm) {
104
- if (useWasm === void 0) { useWasm = false; }
105
- var leafSize = Math.max(10, nNeighbors);
106
- if (useWasm) {
107
- if (!(0, wasmBridge_1.isWasmAvailable)()) {
108
- throw new Error('WASM requested but not available');
109
- }
110
- return makeForestWasm(data, leafSize, nTrees, random);
111
- }
112
- var trees = utils
113
- .range(nTrees)
114
- .map(function (_, i) { return makeTree(data, leafSize, i, random); });
115
- var forest = trees.map(function (tree) { return flattenTree(tree, leafSize); });
116
- return forest;
117
- }
118
- function makeForestWasm(data, leafSize, nTrees, random) {
119
- var nSamples = data.length;
120
- var dim = data[0].length;
121
- var forest = [];
122
- for (var i = 0; i < nTrees; i++) {
123
- var seed = Math.floor(random() * 0xFFFFFFFF);
124
- var wasmTree = (0, wasmBridge_1.buildRpTreeWasm)(data, nSamples, dim, leafSize, seed);
125
- forest.push(FlatTree.fromWasm(wasmTree));
126
- }
127
- return forest;
128
- }
129
- function makeTree(data, leafSize, n, random) {
130
- if (leafSize === void 0) { leafSize = 30; }
131
- var indices = utils.range(data.length);
132
- var tree = makeEuclideanTree(data, indices, leafSize, n, random);
133
- return tree;
134
- }
135
- function makeEuclideanTree(data, indices, leafSize, q, random) {
136
- if (leafSize === void 0) { leafSize = 30; }
137
- if (indices.length > leafSize) {
138
- var splitResults = euclideanRandomProjectionSplit(data, indices, random);
139
- var indicesLeft = splitResults.indicesLeft, indicesRight = splitResults.indicesRight, hyperplane = splitResults.hyperplane, offset = splitResults.offset;
140
- var leftChild = makeEuclideanTree(data, indicesLeft, leafSize, q + 1, random);
141
- var rightChild = makeEuclideanTree(data, indicesRight, leafSize, q + 1, random);
142
- var node = { leftChild: leftChild, rightChild: rightChild, isLeaf: false, hyperplane: hyperplane, offset: offset };
143
- return node;
144
- }
145
- else {
146
- var node = { indices: indices, isLeaf: true };
147
- return node;
148
- }
149
- }
150
- function euclideanRandomProjectionSplit(data, indices, random) {
151
- var dim = data[0].length;
152
- var leftIndex = utils.tauRandInt(indices.length, random);
153
- var rightIndex = utils.tauRandInt(indices.length, random);
154
- rightIndex += leftIndex === rightIndex ? 1 : 0;
155
- rightIndex = rightIndex % indices.length;
156
- var left = indices[leftIndex];
157
- var right = indices[rightIndex];
158
- var hyperplaneOffset = 0;
159
- var hyperplaneVector = utils.zeros(dim);
160
- for (var i = 0; i < hyperplaneVector.length; i++) {
161
- hyperplaneVector[i] = data[left][i] - data[right][i];
162
- hyperplaneOffset -=
163
- (hyperplaneVector[i] * (data[left][i] + data[right][i])) / 2.0;
164
- }
165
- var nLeft = 0;
166
- var nRight = 0;
167
- var side = utils.zeros(indices.length);
168
- for (var i = 0; i < indices.length; i++) {
169
- var margin = hyperplaneOffset;
170
- for (var d = 0; d < dim; d++) {
171
- margin += hyperplaneVector[d] * data[indices[i]][d];
172
- }
173
- if (margin === 0) {
174
- side[i] = utils.tauRandInt(2, random);
175
- if (side[i] === 0) {
176
- nLeft += 1;
177
- }
178
- else {
179
- nRight += 1;
180
- }
181
- }
182
- else if (margin > 0) {
183
- side[i] = 0;
184
- nLeft += 1;
185
- }
186
- else {
187
- side[i] = 1;
188
- nRight += 1;
189
- }
190
- }
191
- var indicesLeft = utils.zeros(nLeft);
192
- var indicesRight = utils.zeros(nRight);
193
- nLeft = 0;
194
- nRight = 0;
195
- for (var i = 0; i < side.length; i++) {
196
- if (side[i] === 0) {
197
- indicesLeft[nLeft] = indices[i];
198
- nLeft += 1;
199
- }
200
- else {
201
- indicesRight[nRight] = indices[i];
202
- nRight += 1;
203
- }
204
- }
205
- return {
206
- indicesLeft: indicesLeft,
207
- indicesRight: indicesRight,
208
- hyperplane: hyperplaneVector,
209
- offset: hyperplaneOffset,
210
- };
211
- }
212
- function flattenTree(tree, leafSize) {
213
- var nNodes = numNodes(tree);
214
- var nLeaves = numLeaves(tree);
215
- var hyperplanes = utils
216
- .range(nNodes)
217
- .map(function () { return utils.zeros(tree.hyperplane ? tree.hyperplane.length : 0); });
218
- var offsets = utils.zeros(nNodes);
219
- var children = utils.range(nNodes).map(function () { return [-1, -1]; });
220
- var indices = utils
221
- .range(nLeaves)
222
- .map(function () { return utils.range(leafSize).map(function () { return -1; }); });
223
- recursiveFlatten(tree, hyperplanes, offsets, children, indices, 0, 0);
224
- return new FlatTree(hyperplanes, offsets, children, indices);
225
- }
226
- function recursiveFlatten(tree, hyperplanes, offsets, children, indices, nodeNum, leafNum) {
227
- var _a;
228
- if (tree.isLeaf) {
229
- children[nodeNum][0] = -leafNum;
230
- (_a = indices[leafNum]).splice.apply(_a, __spreadArray([0, tree.indices.length], __read(tree.indices), false));
231
- leafNum += 1;
232
- return { nodeNum: nodeNum, leafNum: leafNum };
233
- }
234
- else {
235
- hyperplanes[nodeNum] = tree.hyperplane;
236
- offsets[nodeNum] = tree.offset;
237
- children[nodeNum][0] = nodeNum + 1;
238
- var oldNodeNum = nodeNum;
239
- var res = recursiveFlatten(tree.leftChild, hyperplanes, offsets, children, indices, nodeNum + 1, leafNum);
240
- nodeNum = res.nodeNum;
241
- leafNum = res.leafNum;
242
- children[oldNodeNum][1] = nodeNum + 1;
243
- res = recursiveFlatten(tree.rightChild, hyperplanes, offsets, children, indices, nodeNum + 1, leafNum);
244
- return { nodeNum: res.nodeNum, leafNum: res.leafNum };
245
- }
246
- }
247
- function numNodes(tree) {
248
- if (tree.isLeaf) {
249
- return 1;
250
- }
251
- else {
252
- return 1 + numNodes(tree.leftChild) + numNodes(tree.rightChild);
253
- }
254
- }
255
- function numLeaves(tree) {
256
- if (tree.isLeaf) {
257
- return 1;
258
- }
259
- else {
260
- return numLeaves(tree.leftChild) + numLeaves(tree.rightChild);
261
- }
262
- }
263
- function makeLeafArray(rpForest) {
264
- var e_1, _a;
265
- if (rpForest.length > 0) {
266
- var output = [];
267
- try {
268
- for (var rpForest_1 = __values(rpForest), rpForest_1_1 = rpForest_1.next(); !rpForest_1_1.done; rpForest_1_1 = rpForest_1.next()) {
269
- var tree = rpForest_1_1.value;
270
- output.push.apply(output, __spreadArray([], __read(tree.indices), false));
271
- }
272
- }
273
- catch (e_1_1) { e_1 = { error: e_1_1 }; }
274
- finally {
275
- try {
276
- if (rpForest_1_1 && !rpForest_1_1.done && (_a = rpForest_1.return)) _a.call(rpForest_1);
277
- }
278
- finally { if (e_1) throw e_1.error; }
279
- }
280
- return output;
281
- }
282
- else {
283
- return [[-1]];
284
- }
285
- }
286
- function selectSide(hyperplane, offset, point, random) {
287
- var margin = offset;
288
- for (var d = 0; d < point.length; d++) {
289
- margin += hyperplane[d] * point[d];
290
- }
291
- if (margin === 0) {
292
- var side = utils.tauRandInt(2, random);
293
- return side;
294
- }
295
- else if (margin > 0) {
296
- return 0;
297
- }
298
- else {
299
- return 1;
300
- }
301
- }
302
- function searchFlatTree(point, tree, random) {
303
- var wasmTree = tree.getWasmTree();
304
- if (wasmTree && (0, wasmBridge_1.isWasmAvailable)()) {
305
- var seed = Math.floor(random() * 0xFFFFFFFF);
306
- return (0, wasmBridge_1.searchFlatTreeWasm)(wasmTree, point, seed);
307
- }
308
- var node = 0;
309
- while (tree.children[node][0] > 0) {
310
- var side = selectSide(tree.hyperplanes[node], tree.offsets[node], point, random);
311
- if (side === 0) {
312
- node = tree.children[node][0];
313
- }
314
- else {
315
- node = tree.children[node][1];
316
- }
317
- }
318
- var index = -1 * tree.children[node][0];
319
- return tree.indices[index];
320
- }