@elarsaks/umap-wasm 0.1.1 → 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 -60
- package/dist/src/heap.js +0 -226
- package/dist/src/index.d.ts +0 -1
- package/dist/src/index.js +0 -5
- 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/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/package.json
CHANGED
|
@@ -1,60 +1,64 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "@elarsaks/umap-wasm",
|
|
3
|
-
"version": "0.1.
|
|
4
|
-
"description": "JavaScript implementation of UMAP",
|
|
5
|
-
"author": {
|
|
6
|
-
"name": "Andy Coenen",
|
|
7
|
-
"email": "andycoenen@google.com"
|
|
8
|
-
},
|
|
9
|
-
"license": "MIT",
|
|
10
|
-
"repository": {
|
|
11
|
-
"type": "git",
|
|
12
|
-
"url": "git+https://github.com/elarsaks/umap-wasm.git"
|
|
13
|
-
},
|
|
14
|
-
"main": "lib/umap-js.js",
|
|
15
|
-
"module": "
|
|
16
|
-
"unpkg": "lib/umap-js.min.js",
|
|
17
|
-
"jsdelivr": "lib/umap-js.min.js",
|
|
18
|
-
"types": "dist/index.d.ts",
|
|
19
|
-
"exports": {
|
|
20
|
-
".": {
|
|
21
|
-
"import": "./
|
|
22
|
-
"require": "./lib/umap-js.js"
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
"
|
|
28
|
-
"
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
"
|
|
32
|
-
|
|
33
|
-
"test
|
|
34
|
-
"
|
|
35
|
-
"
|
|
36
|
-
"
|
|
37
|
-
"
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
"
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
"
|
|
44
|
-
"
|
|
45
|
-
"
|
|
46
|
-
"
|
|
47
|
-
"
|
|
48
|
-
"
|
|
49
|
-
"
|
|
50
|
-
"
|
|
51
|
-
"
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
"
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
"
|
|
59
|
-
}
|
|
60
|
-
|
|
1
|
+
{
|
|
2
|
+
"name": "@elarsaks/umap-wasm",
|
|
3
|
+
"version": "0.1.4",
|
|
4
|
+
"description": "JavaScript implementation of UMAP",
|
|
5
|
+
"author": {
|
|
6
|
+
"name": "Andy Coenen",
|
|
7
|
+
"email": "andycoenen@google.com"
|
|
8
|
+
},
|
|
9
|
+
"license": "MIT",
|
|
10
|
+
"repository": {
|
|
11
|
+
"type": "git",
|
|
12
|
+
"url": "git+https://github.com/elarsaks/umap-wasm.git"
|
|
13
|
+
},
|
|
14
|
+
"main": "lib/umap-js.js",
|
|
15
|
+
"module": "dist/index.js",
|
|
16
|
+
"unpkg": "lib/umap-js.min.js",
|
|
17
|
+
"jsdelivr": "lib/umap-js.min.js",
|
|
18
|
+
"types": "dist/src/index.d.ts",
|
|
19
|
+
"exports": {
|
|
20
|
+
".": {
|
|
21
|
+
"import": "./dist/index.js",
|
|
22
|
+
"require": "./lib/umap-js.js",
|
|
23
|
+
"types": "./dist/index.d.ts"
|
|
24
|
+
}
|
|
25
|
+
},
|
|
26
|
+
"files": [
|
|
27
|
+
"lib",
|
|
28
|
+
"dist",
|
|
29
|
+
"wasm/pkg"
|
|
30
|
+
],
|
|
31
|
+
"packageManager": "yarn@4.12.0",
|
|
32
|
+
"scripts": {
|
|
33
|
+
"test": "vitest run",
|
|
34
|
+
"test:watch": "vitest",
|
|
35
|
+
"test:playwright": "playwright test",
|
|
36
|
+
"preview": "npx serve . -p 4173",
|
|
37
|
+
"bundle": "rm -rf lib && webpack --config ./webpack/lib.config.mjs && webpack --config ./webpack/lib.min.config.mjs",
|
|
38
|
+
"build": "rm -rf dist && tsc && yarn bundle",
|
|
39
|
+
"build:wasm": "cd wasm && wasm-pack build --target web --out-dir pkg",
|
|
40
|
+
"prepublishOnly": "yarn build:wasm && yarn build"
|
|
41
|
+
},
|
|
42
|
+
"devDependencies": {
|
|
43
|
+
"@playwright/test": "^1.57.0",
|
|
44
|
+
"@types/jest": "^30.0.0",
|
|
45
|
+
"@types/node": "^25.0.3",
|
|
46
|
+
"jest": "^30.2.0",
|
|
47
|
+
"prando": "^5.1.2",
|
|
48
|
+
"prettier": "^3.7.4",
|
|
49
|
+
"ts-jest": "^29.4.6",
|
|
50
|
+
"ts-loader": "^9.5.4",
|
|
51
|
+
"ts-node": "^10.9.2",
|
|
52
|
+
"typescript": "^5.9.3",
|
|
53
|
+
"vitest": "^1.4.0",
|
|
54
|
+
"webpack": "^5.104.1",
|
|
55
|
+
"webpack-cli": "^6.0.1"
|
|
56
|
+
},
|
|
57
|
+
"dependencies": {
|
|
58
|
+
"ml-levenberg-marquardt": "^2.1.1"
|
|
59
|
+
},
|
|
60
|
+
"publishConfig": {
|
|
61
|
+
"access": "public",
|
|
62
|
+
"registry": "https://registry.npmjs.org/"
|
|
63
|
+
}
|
|
64
|
+
}
|
package/dist/src/heap.js
DELETED
|
@@ -1,226 +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
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
-
exports.makeHeap = makeHeap;
|
|
37
|
-
exports.rejectionSample = rejectionSample;
|
|
38
|
-
exports.heapPush = heapPush;
|
|
39
|
-
exports.uncheckedHeapPush = uncheckedHeapPush;
|
|
40
|
-
exports.buildCandidates = buildCandidates;
|
|
41
|
-
exports.deheapSort = deheapSort;
|
|
42
|
-
exports.smallestFlagged = smallestFlagged;
|
|
43
|
-
var utils = __importStar(require("./utils"));
|
|
44
|
-
function makeHeap(nPoints, size) {
|
|
45
|
-
var makeArrays = function (fillValue) {
|
|
46
|
-
return utils.empty(nPoints).map(function () {
|
|
47
|
-
return utils.filled(size, fillValue);
|
|
48
|
-
});
|
|
49
|
-
};
|
|
50
|
-
var heap = [];
|
|
51
|
-
heap.push(makeArrays(-1));
|
|
52
|
-
heap.push(makeArrays(Infinity));
|
|
53
|
-
heap.push(makeArrays(0));
|
|
54
|
-
return heap;
|
|
55
|
-
}
|
|
56
|
-
function rejectionSample(nSamples, poolSize, random) {
|
|
57
|
-
var result = utils.zeros(nSamples);
|
|
58
|
-
for (var i = 0; i < nSamples; i++) {
|
|
59
|
-
var rejectSample = true;
|
|
60
|
-
var j = 0;
|
|
61
|
-
while (rejectSample) {
|
|
62
|
-
j = utils.tauRandInt(poolSize, random);
|
|
63
|
-
var broken = false;
|
|
64
|
-
for (var k = 0; k < i; k++) {
|
|
65
|
-
if (j === result[k]) {
|
|
66
|
-
broken = true;
|
|
67
|
-
break;
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
if (!broken)
|
|
71
|
-
rejectSample = false;
|
|
72
|
-
}
|
|
73
|
-
result[i] = j;
|
|
74
|
-
}
|
|
75
|
-
return result;
|
|
76
|
-
}
|
|
77
|
-
function heapPush(heap, row, weight, index, flag) {
|
|
78
|
-
row = Math.floor(row);
|
|
79
|
-
var indices = heap[0][row];
|
|
80
|
-
var weights = heap[1][row];
|
|
81
|
-
var isNew = heap[2][row];
|
|
82
|
-
if (weight >= weights[0]) {
|
|
83
|
-
return 0;
|
|
84
|
-
}
|
|
85
|
-
for (var i = 0; i < indices.length; i++) {
|
|
86
|
-
if (index === indices[i]) {
|
|
87
|
-
return 0;
|
|
88
|
-
}
|
|
89
|
-
}
|
|
90
|
-
return uncheckedHeapPush(heap, row, weight, index, flag);
|
|
91
|
-
}
|
|
92
|
-
function uncheckedHeapPush(heap, row, weight, index, flag) {
|
|
93
|
-
var indices = heap[0][row];
|
|
94
|
-
var weights = heap[1][row];
|
|
95
|
-
var isNew = heap[2][row];
|
|
96
|
-
if (weight >= weights[0]) {
|
|
97
|
-
return 0;
|
|
98
|
-
}
|
|
99
|
-
weights[0] = weight;
|
|
100
|
-
indices[0] = index;
|
|
101
|
-
isNew[0] = flag;
|
|
102
|
-
var i = 0;
|
|
103
|
-
var iSwap = 0;
|
|
104
|
-
while (true) {
|
|
105
|
-
var ic1 = 2 * i + 1;
|
|
106
|
-
var ic2 = ic1 + 1;
|
|
107
|
-
var heapShape2 = heap[0][0].length;
|
|
108
|
-
if (ic1 >= heapShape2) {
|
|
109
|
-
break;
|
|
110
|
-
}
|
|
111
|
-
else if (ic2 >= heapShape2) {
|
|
112
|
-
if (weights[ic1] > weight) {
|
|
113
|
-
iSwap = ic1;
|
|
114
|
-
}
|
|
115
|
-
else {
|
|
116
|
-
break;
|
|
117
|
-
}
|
|
118
|
-
}
|
|
119
|
-
else if (weights[ic1] >= weights[ic2]) {
|
|
120
|
-
if (weight < weights[ic1]) {
|
|
121
|
-
iSwap = ic1;
|
|
122
|
-
}
|
|
123
|
-
else {
|
|
124
|
-
break;
|
|
125
|
-
}
|
|
126
|
-
}
|
|
127
|
-
else {
|
|
128
|
-
if (weight < weights[ic2]) {
|
|
129
|
-
iSwap = ic2;
|
|
130
|
-
}
|
|
131
|
-
else {
|
|
132
|
-
break;
|
|
133
|
-
}
|
|
134
|
-
}
|
|
135
|
-
weights[i] = weights[iSwap];
|
|
136
|
-
indices[i] = indices[iSwap];
|
|
137
|
-
isNew[i] = isNew[iSwap];
|
|
138
|
-
i = iSwap;
|
|
139
|
-
}
|
|
140
|
-
weights[i] = weight;
|
|
141
|
-
indices[i] = index;
|
|
142
|
-
isNew[i] = flag;
|
|
143
|
-
return 1;
|
|
144
|
-
}
|
|
145
|
-
function buildCandidates(currentGraph, nVertices, nNeighbors, maxCandidates, random) {
|
|
146
|
-
var candidateNeighbors = makeHeap(nVertices, maxCandidates);
|
|
147
|
-
for (var i = 0; i < nVertices; i++) {
|
|
148
|
-
for (var j = 0; j < nNeighbors; j++) {
|
|
149
|
-
if (currentGraph[0][i][j] < 0) {
|
|
150
|
-
continue;
|
|
151
|
-
}
|
|
152
|
-
var idx = currentGraph[0][i][j];
|
|
153
|
-
var isn = currentGraph[2][i][j];
|
|
154
|
-
var d = utils.tauRand(random);
|
|
155
|
-
heapPush(candidateNeighbors, i, d, idx, isn);
|
|
156
|
-
heapPush(candidateNeighbors, idx, d, i, isn);
|
|
157
|
-
currentGraph[2][i][j] = 0;
|
|
158
|
-
}
|
|
159
|
-
}
|
|
160
|
-
return candidateNeighbors;
|
|
161
|
-
}
|
|
162
|
-
function deheapSort(heap) {
|
|
163
|
-
var indices = heap[0];
|
|
164
|
-
var weights = heap[1];
|
|
165
|
-
for (var i = 0; i < indices.length; i++) {
|
|
166
|
-
var indHeap = indices[i];
|
|
167
|
-
var distHeap = weights[i];
|
|
168
|
-
for (var j = 0; j < indHeap.length - 1; j++) {
|
|
169
|
-
var indHeapIndex = indHeap.length - j - 1;
|
|
170
|
-
var distHeapIndex = distHeap.length - j - 1;
|
|
171
|
-
var temp1 = indHeap[0];
|
|
172
|
-
indHeap[0] = indHeap[indHeapIndex];
|
|
173
|
-
indHeap[indHeapIndex] = temp1;
|
|
174
|
-
var temp2 = distHeap[0];
|
|
175
|
-
distHeap[0] = distHeap[distHeapIndex];
|
|
176
|
-
distHeap[distHeapIndex] = temp2;
|
|
177
|
-
siftDown(distHeap, indHeap, distHeapIndex, 0);
|
|
178
|
-
}
|
|
179
|
-
}
|
|
180
|
-
return { indices: indices, weights: weights };
|
|
181
|
-
}
|
|
182
|
-
function siftDown(heap1, heap2, ceiling, elt) {
|
|
183
|
-
while (elt * 2 + 1 < ceiling) {
|
|
184
|
-
var leftChild = elt * 2 + 1;
|
|
185
|
-
var rightChild = leftChild + 1;
|
|
186
|
-
var swap = elt;
|
|
187
|
-
if (heap1[swap] < heap1[leftChild]) {
|
|
188
|
-
swap = leftChild;
|
|
189
|
-
}
|
|
190
|
-
if (rightChild < ceiling && heap1[swap] < heap1[rightChild]) {
|
|
191
|
-
swap = rightChild;
|
|
192
|
-
}
|
|
193
|
-
if (swap === elt) {
|
|
194
|
-
break;
|
|
195
|
-
}
|
|
196
|
-
else {
|
|
197
|
-
var temp1 = heap1[elt];
|
|
198
|
-
heap1[elt] = heap1[swap];
|
|
199
|
-
heap1[swap] = temp1;
|
|
200
|
-
var temp2 = heap2[elt];
|
|
201
|
-
heap2[elt] = heap2[swap];
|
|
202
|
-
heap2[swap] = temp2;
|
|
203
|
-
elt = swap;
|
|
204
|
-
}
|
|
205
|
-
}
|
|
206
|
-
}
|
|
207
|
-
function smallestFlagged(heap, row) {
|
|
208
|
-
var ind = heap[0][row];
|
|
209
|
-
var dist = heap[1][row];
|
|
210
|
-
var flag = heap[2][row];
|
|
211
|
-
var minDist = Infinity;
|
|
212
|
-
var resultIndex = -1;
|
|
213
|
-
for (var i = 0; i > ind.length; i++) {
|
|
214
|
-
if (flag[i] === 1 && dist[i] < minDist) {
|
|
215
|
-
minDist = dist[i];
|
|
216
|
-
resultIndex = i;
|
|
217
|
-
}
|
|
218
|
-
}
|
|
219
|
-
if (resultIndex >= 0) {
|
|
220
|
-
flag[resultIndex] = 0;
|
|
221
|
-
return Math.floor(ind[resultIndex]);
|
|
222
|
-
}
|
|
223
|
-
else {
|
|
224
|
-
return -1;
|
|
225
|
-
}
|
|
226
|
-
}
|
package/dist/src/index.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export { UMAP, UMAPParameters } from './umap';
|
package/dist/src/index.js
DELETED
package/dist/src/lib.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export { UMAP } from './umap';
|
package/dist/src/lib.js
DELETED