@datagrok/bio 2.12.11 → 2.12.13

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 (55) hide show
  1. package/.eslintrc.json +4 -1
  2. package/CHANGELOG.md +10 -0
  3. package/dist/246.js +2 -0
  4. package/dist/246.js.map +1 -0
  5. package/dist/42.js +1 -1
  6. package/dist/42.js.map +1 -1
  7. package/dist/545.js +3 -0
  8. package/dist/545.js.map +1 -0
  9. package/dist/590.js.map +1 -1
  10. package/dist/package-test.js +5 -5
  11. package/dist/package-test.js.LICENSE.txt +0 -8
  12. package/dist/package-test.js.map +1 -1
  13. package/dist/package.js +5 -5
  14. package/dist/package.js.LICENSE.txt +0 -8
  15. package/dist/package.js.map +1 -1
  16. package/package.json +7 -6
  17. package/src/package.ts +2 -2
  18. package/src/tests/renderers-test.ts +47 -1
  19. package/src/utils/cell-renderer.ts +28 -3
  20. package/src/utils/helm-to-molfile/converter/connection-list.ts +40 -0
  21. package/src/utils/helm-to-molfile/converter/const.ts +4 -0
  22. package/src/utils/helm-to-molfile/converter/converter.ts +124 -0
  23. package/src/utils/helm-to-molfile/converter/helm.ts +112 -0
  24. package/src/utils/helm-to-molfile/converter/index.ts +1 -0
  25. package/src/utils/helm-to-molfile/converter/mol-atoms-v2k.ts +24 -0
  26. package/src/utils/helm-to-molfile/converter/mol-atoms-v3k.ts +38 -0
  27. package/src/utils/helm-to-molfile/converter/mol-atoms.ts +44 -0
  28. package/src/utils/helm-to-molfile/converter/mol-bonds-v2k.ts +26 -0
  29. package/src/utils/helm-to-molfile/converter/mol-bonds-v3k.ts +30 -0
  30. package/src/utils/helm-to-molfile/converter/mol-bonds.ts +56 -0
  31. package/src/utils/helm-to-molfile/converter/mol-wrapper-factory.ts +16 -0
  32. package/src/utils/helm-to-molfile/converter/mol-wrapper-old.ts +100 -0
  33. package/src/utils/helm-to-molfile/converter/mol-wrapper-v2k.ts +21 -0
  34. package/src/utils/helm-to-molfile/converter/mol-wrapper-v3k.ts +21 -0
  35. package/src/utils/helm-to-molfile/converter/mol-wrapper.ts +79 -0
  36. package/src/utils/helm-to-molfile/converter/monomer-wrapper.ts +103 -0
  37. package/src/utils/helm-to-molfile/converter/polymer.ts +99 -0
  38. package/src/utils/helm-to-molfile/converter/position-handler.ts +23 -0
  39. package/src/utils/helm-to-molfile/converter/r-group-handler.ts +122 -0
  40. package/src/utils/helm-to-molfile/converter/simple-polymer.ts +89 -0
  41. package/src/utils/helm-to-molfile/converter/types.ts +12 -0
  42. package/src/utils/helm-to-molfile/utils.ts +32 -0
  43. package/src/utils/poly-tool/const.ts +0 -4
  44. package/src/utils/poly-tool/transformation.ts +126 -62
  45. package/src/utils/sequence-to-mol.ts +1 -1
  46. package/webpack.config.js +4 -3
  47. package/dist/709.js +0 -2
  48. package/dist/709.js.map +0 -1
  49. package/dist/777.js +0 -3
  50. package/dist/777.js.map +0 -1
  51. package/link-bio +0 -7
  52. package/setup +0 -52
  53. package/src/utils/atomic-works.ts +0 -367
  54. package/src/utils/helm-to-molfile.ts +0 -959
  55. /package/dist/{777.js.LICENSE.txt → 545.js.LICENSE.txt} +0 -0
package/dist/709.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"709.js","mappings":"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","sources":["webpack://bio/webpack/runtime/chunk loaded","webpack://bio/webpack/runtime/startup chunk dependencies","webpack://bio/./node_modules/@datagrok-libraries/ml/src/MCL/bio-layout.js","webpack://bio/./node_modules/@datagrok-libraries/ml/src/MCL/marcov-cluster.js","webpack://bio/./node_modules/@datagrok-libraries/ml/src/MCL/mcl-worker.js","webpack://bio/./node_modules/@datagrok-libraries/ml/src/distance-matrix/utils.js","webpack://bio/webpack/bootstrap","webpack://bio/webpack/runtime/define property getters","webpack://bio/webpack/runtime/ensure chunk","webpack://bio/webpack/runtime/get javascript chunk filename","webpack://bio/webpack/runtime/global","webpack://bio/webpack/runtime/hasOwnProperty shorthand","webpack://bio/webpack/runtime/publicPath","webpack://bio/webpack/runtime/importScripts chunk loading","webpack://bio/webpack/startup"],"sourcesContent":["var deferred = [];\n__webpack_require__.O = (result, chunkIds, fn, priority) => {\n\tif(chunkIds) {\n\t\tpriority = priority || 0;\n\t\tfor(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1];\n\t\tdeferred[i] = [chunkIds, fn, priority];\n\t\treturn;\n\t}\n\tvar notFulfilled = Infinity;\n\tfor (var i = 0; i < deferred.length; i++) {\n\t\tvar [chunkIds, fn, priority] = deferred[i];\n\t\tvar fulfilled = true;\n\t\tfor (var j = 0; j < chunkIds.length; j++) {\n\t\t\tif ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every((key) => (__webpack_require__.O[key](chunkIds[j])))) {\n\t\t\t\tchunkIds.splice(j--, 1);\n\t\t\t} else {\n\t\t\t\tfulfilled = false;\n\t\t\t\tif(priority < notFulfilled) notFulfilled = priority;\n\t\t\t}\n\t\t}\n\t\tif(fulfilled) {\n\t\t\tdeferred.splice(i--, 1)\n\t\t\tvar r = fn();\n\t\t\tif (r !== undefined) result = r;\n\t\t}\n\t}\n\treturn result;\n};","var next = __webpack_require__.x;\n__webpack_require__.x = () => {\n\treturn __webpack_require__.e(590).then(next);\n};","export async function bioLayout(cluster, sparseObject, threshold) {\n const n = cluster.length;\n const is = [];\n const js = [];\n for (let i = 0; i < n; i++) {\n for (let j = i + 1; j < n; j++) {\n const a = cluster[i];\n const b = cluster[j];\n if (sparseObject[a]?.[b] >= threshold) {\n is.push(i);\n js.push(j);\n }\n }\n }\n return getLayoutEmbeddings(is, js, cluster);\n}\nfunction getLayoutEmbeddings(is, js, cluster) {\n const embedX = new Float32Array(cluster.length).fill(0).map(() => Math.random() * 10);\n const embedY = new Float32Array(cluster.length).fill(0).map(() => Math.random() * 10);\n const iterations = 100;\n const xVelocities = new Float32Array(cluster.length).fill(0);\n const yVelocities = new Float32Array(cluster.length).fill(0);\n for (let i = 0; i < iterations; i++) {\n const temperature = (1 - i / iterations);\n xVelocities.fill(0);\n yVelocities.fill(0);\n for (let idx = 0; idx < is.length; idx++) {\n const a = is[idx];\n const b = js[idx];\n const dx = embedX[a] - embedX[b];\n const dy = embedY[a] - embedY[b];\n // const distance = Math.sqrt(dx * dx + dy * dy);\n // const factor = (distance - 1) / distance;\n // const offsetX = dx * factor;\n // const offsetY = dy * factor;\n if (Math.abs(dx) >= 1) {\n xVelocities[a] -= temperature * dx;\n xVelocities[b] += temperature * dx;\n }\n if (Math.abs(dy) >= 1) {\n yVelocities[a] -= temperature * dy;\n yVelocities[b] += temperature * dy;\n }\n // embedY[a] += offsetY * temperature;\n // embedY[b] -= offsetY * temperature;\n }\n for (let idx = 0; idx < cluster.length; idx++) {\n const vecSize = Math.sqrt(xVelocities[idx] * xVelocities[idx] + yVelocities[idx] * yVelocities[idx]);\n if (vecSize > 0) {\n embedX[idx] += xVelocities[idx] / vecSize * temperature;\n embedY[idx] += yVelocities[idx] / vecSize * temperature;\n }\n }\n }\n // normalize\n let minX = embedX[0];\n let minY = embedY[0];\n let maxX = embedX[0];\n let maxY = embedY[0];\n for (let idx = 1; idx < cluster.length; idx++) {\n minX = Math.min(minX, embedX[idx]);\n minY = Math.min(minY, embedY[idx]);\n maxX = Math.max(maxX, embedX[idx]);\n maxY = Math.max(maxY, embedY[idx]);\n }\n let rangeX = maxX - minX;\n let rangeY = maxY - minY;\n if (rangeX === 0)\n rangeX = maxX;\n for (let idx = 0; idx < cluster.length; idx++)\n embedX[idx] = (embedX[idx] - minX) / rangeX / 2 + 0.5;\n if (rangeY === 0)\n rangeY = maxY;\n for (let idx = 0; idx < cluster.length; idx++)\n embedY[idx] = (embedY[idx] - minY) / rangeY / 2 + 0.5;\n return { embedX, embedY };\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmlvLWxheW91dC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImJpby1sYXlvdXQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsTUFBTSxDQUFDLEtBQUssVUFBVSxTQUFTLENBQUMsT0FBaUIsRUFBRSxZQUFnQyxFQUFFLFNBQWlCO0lBQ3BHLE1BQU0sQ0FBQyxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUM7SUFDekIsTUFBTSxFQUFFLEdBQWEsRUFBRSxDQUFDO0lBQ3hCLE1BQU0sRUFBRSxHQUFhLEVBQUUsQ0FBQztJQUN4QixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO1FBQzFCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQzlCLE1BQU0sQ0FBQyxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNyQixNQUFNLENBQUMsR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDckIsSUFBSSxZQUFZLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxTQUFTLEVBQUU7Z0JBQ3JDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ1gsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUNaO1NBQ0Y7S0FDRjtJQUNELE9BQU8sbUJBQW1CLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxPQUFPLENBQUMsQ0FBQztBQUM5QyxDQUFDO0FBRUQsU0FBUyxtQkFBbUIsQ0FBQyxFQUFZLEVBQUUsRUFBWSxFQUFFLE9BQWlCO0lBQ3hFLE1BQU0sTUFBTSxHQUFHLElBQUksWUFBWSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztJQUN0RixNQUFNLE1BQU0sR0FBRyxJQUFJLFlBQVksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7SUFDdEYsTUFBTSxVQUFVLEdBQUcsR0FBRyxDQUFDO0lBQ3ZCLE1BQU0sV0FBVyxHQUFHLElBQUksWUFBWSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDN0QsTUFBTSxXQUFXLEdBQUcsSUFBSSxZQUFZLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM3RCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsVUFBVSxFQUFFLENBQUMsRUFBRSxFQUFFO1FBQ25DLE1BQU0sV0FBVyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxVQUFVLENBQUMsQ0FBQztRQUN6QyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3BCLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDcEIsS0FBSyxJQUFJLEdBQUcsR0FBRyxDQUFDLEVBQUUsR0FBRyxHQUFHLEVBQUUsQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLEVBQUU7WUFDeEMsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ2xCLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNsQixNQUFNLEVBQUUsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2pDLE1BQU0sRUFBRSxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDakMsbURBQW1EO1lBQ25ELDhDQUE4QztZQUM5QyxpQ0FBaUM7WUFDakMsaUNBQWlDO1lBQ2pDLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUU7Z0JBQ3JCLFdBQVcsQ0FBQyxDQUFDLENBQUMsSUFBSSxXQUFXLEdBQUcsRUFBRSxDQUFDO2dCQUNuQyxXQUFXLENBQUMsQ0FBQyxDQUFDLElBQUksV0FBVyxHQUFHLEVBQUUsQ0FBQzthQUNwQztZQUNELElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUU7Z0JBQ3JCLFdBQVcsQ0FBQyxDQUFDLENBQUMsSUFBSSxXQUFXLEdBQUcsRUFBRSxDQUFDO2dCQUNuQyxXQUFXLENBQUMsQ0FBQyxDQUFDLElBQUksV0FBVyxHQUFHLEVBQUUsQ0FBQzthQUNwQztZQUNILHdDQUF3QztZQUN4Qyx3Q0FBd0M7U0FDdkM7UUFDRCxLQUFLLElBQUksR0FBRyxHQUFHLENBQUMsRUFBRSxHQUFHLEdBQUcsT0FBTyxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsRUFBRTtZQUM3QyxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsR0FBRyxXQUFXLENBQUMsR0FBRyxDQUFDLEdBQUcsV0FBVyxDQUFDLEdBQUcsQ0FBQyxHQUFHLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQ3JHLElBQUksT0FBTyxHQUFHLENBQUMsRUFBRTtnQkFDZixNQUFNLENBQUMsR0FBRyxDQUFDLElBQUksV0FBVyxDQUFDLEdBQUcsQ0FBQyxHQUFHLE9BQU8sR0FBRyxXQUFXLENBQUM7Z0JBQ3hELE1BQU0sQ0FBQyxHQUFHLENBQUMsSUFBSSxXQUFXLENBQUMsR0FBRyxDQUFDLEdBQUcsT0FBTyxHQUFHLFdBQVcsQ0FBQzthQUN6RDtTQUNGO0tBQ0Y7SUFFRCxZQUFZO0lBQ1osSUFBSSxJQUFJLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3JCLElBQUksSUFBSSxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNyQixJQUFJLElBQUksR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDckIsSUFBSSxJQUFJLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3JCLEtBQUssSUFBSSxHQUFHLEdBQUcsQ0FBQyxFQUFFLEdBQUcsR0FBRyxPQUFPLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxFQUFFO1FBQzdDLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUNuQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDbkMsSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ25DLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztLQUNwQztJQUNELElBQUksTUFBTSxHQUFHLElBQUksR0FBRyxJQUFJLENBQUM7SUFDekIsSUFBSSxNQUFNLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQztJQUN6QixJQUFJLE1BQU0sS0FBSyxDQUFDO1FBQ2QsTUFBTSxHQUFHLElBQUksQ0FBQztJQUNoQixLQUFLLElBQUksR0FBRyxHQUFHLENBQUMsRUFBRSxHQUFHLEdBQUcsT0FBTyxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUU7UUFDM0MsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLE1BQU0sR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0lBQ3hELElBQUksTUFBTSxLQUFLLENBQUM7UUFDZCxNQUFNLEdBQUcsSUFBSSxDQUFDO0lBQ2hCLEtBQUssSUFBSSxHQUFHLEdBQUcsQ0FBQyxFQUFFLEdBQUcsR0FBRyxPQUFPLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRTtRQUMzQyxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsTUFBTSxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7SUFFeEQsT0FBTyxFQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUMsQ0FBQztBQUMxQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtTcGFyc2VNYXRyaXhPYmplY3R9IGZyb20gJy4vdHlwZXMnO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYmlvTGF5b3V0KGNsdXN0ZXI6IG51bWJlcltdLCBzcGFyc2VPYmplY3Q6IFNwYXJzZU1hdHJpeE9iamVjdCwgdGhyZXNob2xkOiBudW1iZXIpIHtcbiAgY29uc3QgbiA9IGNsdXN0ZXIubGVuZ3RoO1xuICBjb25zdCBpczogbnVtYmVyW10gPSBbXTtcbiAgY29uc3QganM6IG51bWJlcltdID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbjsgaSsrKSB7XG4gICAgZm9yIChsZXQgaiA9IGkgKyAxOyBqIDwgbjsgaisrKSB7XG4gICAgICBjb25zdCBhID0gY2x1c3RlcltpXTtcbiAgICAgIGNvbnN0IGIgPSBjbHVzdGVyW2pdO1xuICAgICAgaWYgKHNwYXJzZU9iamVjdFthXT8uW2JdID49IHRocmVzaG9sZCkge1xuICAgICAgICBpcy5wdXNoKGkpO1xuICAgICAgICBqcy5wdXNoKGopO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gZ2V0TGF5b3V0RW1iZWRkaW5ncyhpcywganMsIGNsdXN0ZXIpO1xufVxuXG5mdW5jdGlvbiBnZXRMYXlvdXRFbWJlZGRpbmdzKGlzOiBudW1iZXJbXSwganM6IG51bWJlcltdLCBjbHVzdGVyOiBudW1iZXJbXSkge1xuICBjb25zdCBlbWJlZFggPSBuZXcgRmxvYXQzMkFycmF5KGNsdXN0ZXIubGVuZ3RoKS5maWxsKDApLm1hcCgoKSA9PiBNYXRoLnJhbmRvbSgpICogMTApO1xuICBjb25zdCBlbWJlZFkgPSBuZXcgRmxvYXQzMkFycmF5KGNsdXN0ZXIubGVuZ3RoKS5maWxsKDApLm1hcCgoKSA9PiBNYXRoLnJhbmRvbSgpICogMTApO1xuICBjb25zdCBpdGVyYXRpb25zID0gMTAwO1xuICBjb25zdCB4VmVsb2NpdGllcyA9IG5ldyBGbG9hdDMyQXJyYXkoY2x1c3Rlci5sZW5ndGgpLmZpbGwoMCk7XG4gIGNvbnN0IHlWZWxvY2l0aWVzID0gbmV3IEZsb2F0MzJBcnJheShjbHVzdGVyLmxlbmd0aCkuZmlsbCgwKTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBpdGVyYXRpb25zOyBpKyspIHtcbiAgICBjb25zdCB0ZW1wZXJhdHVyZSA9ICgxIC0gaSAvIGl0ZXJhdGlvbnMpO1xuICAgIHhWZWxvY2l0aWVzLmZpbGwoMCk7XG4gICAgeVZlbG9jaXRpZXMuZmlsbCgwKTtcbiAgICBmb3IgKGxldCBpZHggPSAwOyBpZHggPCBpcy5sZW5ndGg7IGlkeCsrKSB7XG4gICAgICBjb25zdCBhID0gaXNbaWR4XTtcbiAgICAgIGNvbnN0IGIgPSBqc1tpZHhdO1xuICAgICAgY29uc3QgZHggPSBlbWJlZFhbYV0gLSBlbWJlZFhbYl07XG4gICAgICBjb25zdCBkeSA9IGVtYmVkWVthXSAtIGVtYmVkWVtiXTtcbiAgICAgIC8vICAgY29uc3QgZGlzdGFuY2UgPSBNYXRoLnNxcnQoZHggKiBkeCArIGR5ICogZHkpO1xuICAgICAgLy8gICBjb25zdCBmYWN0b3IgPSAoZGlzdGFuY2UgLSAxKSAvIGRpc3RhbmNlO1xuICAgICAgLy8gICBjb25zdCBvZmZzZXRYID0gZHggKiBmYWN0b3I7XG4gICAgICAvLyAgIGNvbnN0IG9mZnNldFkgPSBkeSAqIGZhY3RvcjtcbiAgICAgIGlmIChNYXRoLmFicyhkeCkgPj0gMSkge1xuICAgICAgICB4VmVsb2NpdGllc1thXSAtPSB0ZW1wZXJhdHVyZSAqIGR4O1xuICAgICAgICB4VmVsb2NpdGllc1tiXSArPSB0ZW1wZXJhdHVyZSAqIGR4O1xuICAgICAgfVxuICAgICAgaWYgKE1hdGguYWJzKGR5KSA+PSAxKSB7XG4gICAgICAgIHlWZWxvY2l0aWVzW2FdIC09IHRlbXBlcmF0dXJlICogZHk7XG4gICAgICAgIHlWZWxvY2l0aWVzW2JdICs9IHRlbXBlcmF0dXJlICogZHk7XG4gICAgICB9XG4gICAgLy8gICBlbWJlZFlbYV0gKz0gb2Zmc2V0WSAqIHRlbXBlcmF0dXJlO1xuICAgIC8vICAgZW1iZWRZW2JdIC09IG9mZnNldFkgKiB0ZW1wZXJhdHVyZTtcbiAgICB9XG4gICAgZm9yIChsZXQgaWR4ID0gMDsgaWR4IDwgY2x1c3Rlci5sZW5ndGg7IGlkeCsrKSB7XG4gICAgICBjb25zdCB2ZWNTaXplID0gTWF0aC5zcXJ0KHhWZWxvY2l0aWVzW2lkeF0gKiB4VmVsb2NpdGllc1tpZHhdICsgeVZlbG9jaXRpZXNbaWR4XSAqIHlWZWxvY2l0aWVzW2lkeF0pO1xuICAgICAgaWYgKHZlY1NpemUgPiAwKSB7XG4gICAgICAgIGVtYmVkWFtpZHhdICs9IHhWZWxvY2l0aWVzW2lkeF0gLyB2ZWNTaXplICogdGVtcGVyYXR1cmU7XG4gICAgICAgIGVtYmVkWVtpZHhdICs9IHlWZWxvY2l0aWVzW2lkeF0gLyB2ZWNTaXplICogdGVtcGVyYXR1cmU7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gbm9ybWFsaXplXG4gIGxldCBtaW5YID0gZW1iZWRYWzBdO1xuICBsZXQgbWluWSA9IGVtYmVkWVswXTtcbiAgbGV0IG1heFggPSBlbWJlZFhbMF07XG4gIGxldCBtYXhZID0gZW1iZWRZWzBdO1xuICBmb3IgKGxldCBpZHggPSAxOyBpZHggPCBjbHVzdGVyLmxlbmd0aDsgaWR4KyspIHtcbiAgICBtaW5YID0gTWF0aC5taW4obWluWCwgZW1iZWRYW2lkeF0pO1xuICAgIG1pblkgPSBNYXRoLm1pbihtaW5ZLCBlbWJlZFlbaWR4XSk7XG4gICAgbWF4WCA9IE1hdGgubWF4KG1heFgsIGVtYmVkWFtpZHhdKTtcbiAgICBtYXhZID0gTWF0aC5tYXgobWF4WSwgZW1iZWRZW2lkeF0pO1xuICB9XG4gIGxldCByYW5nZVggPSBtYXhYIC0gbWluWDtcbiAgbGV0IHJhbmdlWSA9IG1heFkgLSBtaW5ZO1xuICBpZiAocmFuZ2VYID09PSAwKVxuICAgIHJhbmdlWCA9IG1heFg7XG4gIGZvciAobGV0IGlkeCA9IDA7IGlkeCA8IGNsdXN0ZXIubGVuZ3RoOyBpZHgrKylcbiAgICBlbWJlZFhbaWR4XSA9IChlbWJlZFhbaWR4XSAtIG1pblgpIC8gcmFuZ2VYIC8gMiArIDAuNTtcbiAgaWYgKHJhbmdlWSA9PT0gMClcbiAgICByYW5nZVkgPSBtYXhZO1xuICBmb3IgKGxldCBpZHggPSAwOyBpZHggPCBjbHVzdGVyLmxlbmd0aDsgaWR4KyspXG4gICAgZW1iZWRZW2lkeF0gPSAoZW1iZWRZW2lkeF0gLSBtaW5ZKSAvIHJhbmdlWSAvIDIgKyAwLjU7XG5cbiAgcmV0dXJuIHtlbWJlZFgsIGVtYmVkWX07XG59XG4iXX0=","import { bioLayout } from './bio-layout';\nexport const defaultMCLOptions = {\n expandFactor: 2,\n maxIterations: 5,\n inflateFactor: 2,\n multFactor: 1,\n};\nexport class MCLSparseReducer {\n constructor(opts = {}) {\n this._options = { ...defaultMCLOptions, ...opts };\n }\n async transform(sparseMatrix, nRows) {\n // testWorkerMultiply();\n // return new Int32Array(nRows);\n let sparseObject = this.toObjectForm(sparseMatrix);\n if (this._options.maxIterations > 0) {\n this.addLoops(sparseObject, nRows);\n this.normalize(sparseObject);\n for (let i = 0; i < this._options.maxIterations; i++) {\n sparseObject = this.expand(sparseObject, nRows);\n this.inflate(sparseObject);\n this.normalize(sparseObject);\n }\n }\n const { clusters, is, js } = this.assignClusters(sparseObject, nRows);\n this.correctClusters(clusters);\n const embeddings = await this.layout(clusters, sparseObject, nRows);\n return { clusters, embedX: embeddings.embedX, embedY: embeddings.embedY, is, js };\n }\n correctClusters(clusters) {\n const clusterSizeMap = {};\n for (const cluster of clusters) {\n if (!clusterSizeMap[cluster])\n clusterSizeMap[cluster] = 0;\n clusterSizeMap[cluster]++;\n }\n const sortedIndexes = Object.keys(clusterSizeMap).map(Number).sort((a, b) => clusterSizeMap[a] - clusterSizeMap[b]);\n const clusterMap = {};\n sortedIndexes.forEach((clusterIdx, i) => clusterMap[clusterIdx] = i + 1);\n for (let i = 0; i < clusters.length; i++)\n clusters[i] = clusterMap[clusters[i]];\n // let curCluster = 1;\n // for (let i = 0; i < clusters.length; i++) {\n // if (!clusterMap[clusters[i]]) {\n // clusterMap[clusters[i]] = curCluster;\n // clusters[i] = curCluster;\n // curCluster++;\n // } else {\n // clusters[i] = clusterMap[clusters[i]];\n // }\n // }\n }\n async layout(clusters, sparseMatrix, nRows) {\n const embedX = new Float32Array(nRows).fill(0);\n const embedY = new Float32Array(nRows).fill(0);\n const clusterMap = {};\n clusters.forEach((cluster, i) => {\n if (!clusterMap[cluster])\n clusterMap[cluster] = [];\n clusterMap[cluster].push(i);\n });\n // const nClusters = Object.keys(clusterMap).length;\n // const perRow = Math.floor(Math.sqrt(nClusters));\n let clusterNum = 0;\n const sortedClusterNames = Object.keys(clusterMap);\n sortedClusterNames.sort((a, b) => clusterMap[b].length - clusterMap[a].length);\n let perRow = 6;\n let yOffset = 0;\n const layoutSize = 5;\n for (const clusterName of sortedClusterNames) {\n const cluster = clusterMap[clusterName];\n const embeddings = await bioLayout(cluster, sparseMatrix, 0.001);\n if (clusterNum === Math.ceil(perRow / 1.5)) {\n clusterNum = 0;\n yOffset += layoutSize / perRow;\n perRow = Math.ceil(perRow * 1.5);\n }\n const offsetX = ((clusterNum % perRow) * layoutSize / perRow) * 1.5;\n // const offsetY = Math.floor(clusterNum / perRow) * 2;\n for (let i = 0; i < embeddings.embedX.length; i++) {\n embedX[cluster[i]] = embeddings.embedX[i] * layoutSize / perRow + offsetX;\n embedY[cluster[i]] = embeddings.embedY[i] * layoutSize / perRow + yOffset;\n }\n clusterNum++;\n }\n return { embedX, embedY };\n }\n mergeClusters(clusters, i, j) {\n const iCluster = clusters[i];\n const jCluster = clusters[j];\n for (let k = 0; k < clusters.length; k++) {\n if (clusters[k] === jCluster)\n clusters[k] = iCluster;\n }\n }\n assignClusters(sparseMatrix, nRows) {\n let clusterNum = 0;\n const is = [];\n const js = [];\n const order = Math.floor(Math.max(Math.log10(nRows), 2)) + 1;\n const minOrder = Math.pow(10, order);\n const clusters = new Array(nRows).fill(-1);\n for (const i of Object.keys(sparseMatrix)) {\n for (const j of Object.keys(sparseMatrix[i])) {\n if (Math.round(sparseMatrix[i][j] * minOrder) / minOrder > 0 &&\n sparseMatrix[i][j] !== Number(i) && Number(j) > Number(i)) {\n is.push(Number(i));\n js.push(Number(j));\n if (clusters[Number(i)] !== -1 && clusters[Number(j)] !== -1) {\n if (clusters[Number(i)] !== clusters[Number(j)])\n this.mergeClusters(clusters, Number(i), Number(j));\n }\n else if (clusters[Number(i)] !== -1) {\n clusters[Number(j)] = clusters[Number(i)];\n }\n else if (clusters[Number(j)] !== -1) {\n clusters[Number(i)] = clusters[Number(j)];\n }\n else {\n clusterNum++;\n clusters[Number(i)] = clusterNum;\n clusters[Number(j)] = clusterNum;\n }\n }\n }\n }\n for (let i = 0; i < clusters.length; i++) {\n if (clusters[i] === -1) {\n clusterNum++;\n clusters[i] = clusterNum;\n }\n }\n return { clusters, is: new Uint32Array(is), js: new Uint32Array(js) };\n }\n toObjectForm(sparseMatrix) {\n const sparseObject = {};\n for (let i = 0; i < sparseMatrix.i.length; i++) {\n if (!sparseObject[sparseMatrix.i[i]])\n sparseObject[sparseMatrix.i[i]] = {};\n sparseObject[sparseMatrix.i[i]][sparseMatrix.j[i]] = 1 - sparseMatrix.distance[i];\n if (!sparseObject[sparseMatrix.j[i]])\n sparseObject[sparseMatrix.j[i]] = {};\n sparseObject[sparseMatrix.j[i]][sparseMatrix.i[i]] = 1 - sparseMatrix.distance[i];\n }\n return sparseObject;\n }\n addLoops(sparseObject, nRows) {\n for (let i = 0; i < nRows; i++) {\n if (!sparseObject[i])\n sparseObject[i] = {};\n sparseObject[i][i] = this._options.multFactor;\n }\n }\n normalize(sparseObject) {\n for (const i of Object.keys(sparseObject)) {\n const row = sparseObject[i];\n let sum = 0;\n for (const j of Object.keys(row))\n sum += row[j];\n if (sum === 0)\n continue;\n for (const j of Object.keys(row))\n sparseObject[i][j] /= sum;\n }\n }\n expand(sparseObject, nRows) {\n const expandedObject = {};\n const order = Math.floor(Math.max(Math.log10(nRows), 2)) + 1;\n const minOrder = Math.pow(10, order);\n for (let i = 0; i < nRows; i++) {\n if (!sparseObject[i])\n continue;\n // const row = sparseObject[i];\n expandedObject[i] = {};\n for (let j = i; j < nRows; j++) {\n if (!sparseObject[i]?.[j])\n continue;\n const val = this.getExpandValue(sparseObject, i, j); //pruning step\n if (Math.round(val * minOrder) / minOrder > 0) {\n expandedObject[i][j] = val;\n if (!expandedObject[j])\n expandedObject[j] = {};\n expandedObject[j][i] = val;\n }\n }\n }\n return expandedObject;\n }\n // private prune(row: SparseMatrixObject[number]) {\n // }\n inflate(sparseObject) {\n for (const i of Object.keys(sparseObject)) {\n const row = sparseObject[i];\n for (const j of Object.keys(row))\n sparseObject[i][j] = Math.pow(sparseObject[i][j], this._options.inflateFactor);\n }\n }\n getExpandValue(sparseObject, i, j) {\n let val = 0;\n const currentIndexes = Object.keys(sparseObject[i] ?? {});\n const otherIndexes = Object.keys(sparseObject[j] ?? {});\n for (const k of currentIndexes) {\n if (otherIndexes.includes(k))\n val += sparseObject[i][k] * sparseObject[j][k];\n }\n return val;\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFyY292LWNsdXN0ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJtYXJjb3YtY2x1c3Rlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sY0FBYyxDQUFDO0FBR3ZDLE1BQU0sQ0FBQyxNQUFNLGlCQUFpQixHQUFlO0lBQzNDLFlBQVksRUFBRSxDQUFDO0lBQ2YsYUFBYSxFQUFFLENBQUM7SUFDaEIsYUFBYSxFQUFFLENBQUM7SUFDaEIsVUFBVSxFQUFFLENBQUM7Q0FDZCxDQUFDO0FBRUYsTUFBTSxPQUFPLGdCQUFnQjtJQUczQixZQUFZLE9BQTRCLEVBQUU7UUFDeEMsSUFBSSxDQUFDLFFBQVEsR0FBRyxFQUFDLEdBQUcsaUJBQWlCLEVBQUUsR0FBRyxJQUFJLEVBQUMsQ0FBQztJQUNsRCxDQUFDO0lBRU0sS0FBSyxDQUFDLFNBQVMsQ0FBQyxZQUFnQyxFQUFFLEtBQWE7UUFDcEUsd0JBQXdCO1FBQ3hCLGdDQUFnQztRQUNoQyxJQUFJLFlBQVksR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ25ELElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxhQUFhLEdBQUcsQ0FBQyxFQUFFO1lBQ25DLElBQUksQ0FBQyxRQUFRLENBQUMsWUFBWSxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQ25DLElBQUksQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDLENBQUM7WUFDN0IsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYSxFQUFFLENBQUMsRUFBRSxFQUFFO2dCQUNwRCxZQUFZLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLEVBQUUsS0FBSyxDQUFDLENBQUM7Z0JBQ2hELElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLENBQUM7Z0JBQzNCLElBQUksQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDLENB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QUssTUFBTSxDQUFDLElBQUksY0FBYyxFQUFFO1lBQzlCLElBQUksWUFBWSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7Z0JBQzFCLEdBQUcsSUFBSSxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBUSxDQUFDLEdBQUcsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQVEsQ0FBQyxDQUFDO1NBQ2hFO1FBQ0QsT0FBTyxHQUFHLENBQUM7SUFDYixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1NwYXJzZU1hdHJpeFJlc3VsdH0gZnJvbSAnLi4vZGlzdGFuY2UtbWF0cml4L3NwYXJzZS1tYXRyaXgtc2VydmljZSc7XG5pbXBvcnQge2Jpb0xheW91dH0gZnJvbSAnLi9iaW8tbGF5b3V0JztcbmltcG9ydCB7TUNMT3B0aW9ucywgU3BhcnNlTWF0cml4T2JqZWN0fSBmcm9tICcuL3R5cGVzJztcblxuZXhwb3J0IGNvbnN0IGRlZmF1bHRNQ0xPcHRpb25zOiBNQ0xPcHRpb25zID0ge1xuICBleHBhbmRGYWN0b3I6IDIsXG4gIG1heEl0ZXJhdGlvbnM6IDUsXG4gIGluZmxhdGVGYWN0b3I6IDIsXG4gIG11bHRGYWN0b3I6IDEsXG59O1xuXG5leHBvcnQgY2xhc3MgTUNMU3BhcnNlUmVkdWNlciB7XG4gIHByaXZhdGUgX29wdGlvbnM6IE1DTE9wdGlvbnM7XG5cbiAgY29uc3RydWN0b3Iob3B0czogUGFydGlhbDxNQ0xPcHRpb25zPiA9IHt9KSB7XG4gICAgdGhpcy5fb3B0aW9ucyA9IHsuLi5kZWZhdWx0TUNMT3B0aW9ucywgLi4ub3B0c307XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgdHJhbnNmb3JtKHNwYXJzZU1hdHJpeDogU3BhcnNlTWF0cml4UmVzdWx0LCBuUm93czogbnVtYmVyKSB7XG4gICAgLy8gdGVzdFdvcmtlck11bHRpcGx5KCk7XG4gICAgLy8gcmV0dXJuIG5ldyBJbnQzMkFycmF5KG5Sb3dzKTtcbiAgICBsZXQgc3BhcnNlT2JqZWN0ID0gdGhpcy50b09iamVjdEZvcm0oc3BhcnNlTWF0cml4KTtcbiAgICBpZiAodGhpcy5fb3B0aW9ucy5tYXhJdGVyYXRpb25zID4gMCkge1xuICAgICAgdGhpcy5hZGRMb29wcyhzcGFyc2VPYmplY3QsIG5Sb3dzKTtcbiAgICAgIHRoaXMubm9ybWFsaXplKHNwYXJzZU9iamVjdCk7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuX29wdGlvbnMubWF4SXRlcmF0aW9uczsgaSsrKSB7XG4gICAgICAgIHNwYXJzZU9iamVjdCA9IHRoaXMuZXhwYW5kKHNwYXJzZU9iamVjdCwgblJvd3MpO1xuICAgICAgICB0aGlzLmluZmxhdGUoc3BhcnNlT2JqZWN0KTtcbiAgICAgICAgdGhpcy5ub3JtYWxpemUoc3BhcnNlT2JqZWN0KTtcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3Qge2NsdXN0ZXJzLCBpcywganN9ID0gdGhpcy5hc3NpZ25DbHVzdGVycyhzcGFyc2VPYmplY3QsIG5Sb3dzKTtcbiAgICB0aGlzLmNvcnJlY3RDbHVzdGVycyhjbHVzdGVycyk7XG4gICAgY29uc3QgZW1iZWRkaW5ncyA9IGF3YWl0IHRoaXMubGF5b3V0KGNsdXN0ZXJzLCBzcGFyc2VPYmplY3QsIG5Sb3dzKTtcbiAgICByZXR1cm4ge2NsdXN0ZXJzLCBlbWJlZFg6IGVtYmVkZGluZ3MuZW1iZWRYLCBlbWJlZFk6IGVtYmVkZGluZ3MuZW1iZWRZLCBpcywganN9O1xuICB9XG5cbiAgcHJpdmF0ZSBjb3JyZWN0Q2x1c3RlcnMoY2x1c3RlcnM6IG51bWJlcltdKSB7XG4gICAgY29uc3QgY2x1c3RlclNpemVNYXA6IHtbXzogbnVtYmVyXTogbnVtYmVyfSA9IHt9O1xuICAgIGZvciAoY29uc3QgY2x1c3RlciBvZiBjbHVzdGVycykge1xuICAgICAgaWYgKCFjbHVzdGVyU2l6ZU1hcFtjbHVzdGVyXSlcbiAgICAgICAgY2x1c3RlclNpemVNYXBbY2x1c3Rlcl0gPSAwO1xuICAgICAgY2x1c3RlclNpemVNYXBbY2x1c3Rlcl0rKztcbiAgICB9XG4gICAgY29uc3Qgc29ydGVkSW5kZXhlcyA9IE9iamVjdC5rZXlzKGNsdXN0ZXJTaXplTWFwKS5tYXAoTnVtYmVyKS5zb3J0KChhLCBiKSA9PiBjbHVzdGVyU2l6ZU1hcFthXSAtIGNsdXN0ZXJTaXplTWFwW2JdKTtcbiAgICBjb25zdCBjbHVzdGVyTWFwOiB7W186IG51bWJlcl06IG51bWJlcn0gPSB7fTtcbiAgICBzb3J0ZWRJbmRleGVzLmZvckVhY2goKGNsdXN0ZXJJZHgsIGkpID0+IGNsdXN0ZXJNYXBbY2x1c3RlcklkeF0gPSBpICsgMSk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjbHVzdGVycy5sZW5ndGg7IGkrKylcbiAgICAgIGNsdXN0ZXJzW2ldID0gY2x1c3Rlck1hcFtjbHVzdGVyc1tpXV07XG4gICAgLy8gbGV0IGN1ckNsdXN0ZXIgPSAxO1xuICAgIC8vIGZvciAobGV0IGkgPSAwOyBpIDwgY2x1c3RlcnMubGVuZ3RoOyBpKyspIHtcbiAgICAvLyAgIGlmICghY2x1c3Rlck1hcFtjbHVzdGVyc1tpXV0pIHtcbiAgICAvLyAgICAgY2x1c3Rlck1hcFtjbHVzdGVyc1tpXV0gPSBjdXJDbHVzdGVyO1xuICAgIC8vICAgICBjbHVzdGVyc1tpXSA9IGN1ckNsdXN0ZXI7XG4gICAgLy8gICAgIGN1ckNsdXN0ZXIrKztcbiAgICAvLyAgIH0gZWxzZSB7XG4gICAgLy8gICAgIGNsdXN0ZXJzW2ldID0gY2x1c3Rlck1hcFtjbHVzdGVyc1tpXV07XG4gICAgLy8gICB9XG4gICAgLy8gfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBsYXlvdXQoY2x1c3RlcnM6IG51bWJlcltdLCBzcGFyc2VNYXRyaXg6IFNwYXJzZU1hdHJpeE9iamVjdCwgblJvd3M6IG51bWJlcikge1xuICAgIGNvbnN0IGVtYmVkWCA9IG5ldyBGbG9hdDMyQXJyYXkoblJvd3MpLmZpbGwoMCk7XG4gICAgY29uc3QgZW1iZWRZID0gbmV3IEZsb2F0MzJBcnJheShuUm93cykuZmlsbCgwKTtcbiAgICBjb25zdCBjbHVzdGVyTWFwOiB7W186IG51bWJlcl06IG51bWJlcltdfSA9IHt9O1xuICAgIGNsdXN0ZXJzLmZvckVhY2goKGNsdXN0ZXIsIGkpID0+IHtcbiAgICAgIGlmICghY2x1c3Rlck1hcFtjbHVzdGVyXSlcbiAgICAgICAgY2x1c3Rlck1hcFtjbHVzdGVyXSA9IFtdO1xuICAgICAgY2x1c3Rlck1hcFtjbHVzdGVyXS5wdXNoKGkpO1xuICAgIH0pO1xuICAgIC8vIGNvbnN0IG5DbHVzdGVycyA9IE9iamVjdC5rZXlzKGNsdXN0ZXJNYXApLmxlbmd0aDtcbiAgICAvLyBjb25zdCBwZXJSb3cgPSBNYXRoLmZsb29yKE1hdGguc3FydChuQ2x1c3RlcnMpKTtcbiAgICBsZXQgY2x1c3Rlck51bSA9IDA7XG4gICAgY29uc3Qgc29ydGVkQ2x1c3Rlck5hbWVzID0gT2JqZWN0LmtleXMoY2x1c3Rlck1hcCk7XG4gICAgc29ydGVkQ2x1c3Rlck5hbWVzLnNvcnQoKGEsIGIpID0+IGNsdXN0ZXJNYXBbYiBhcyBhbnldLmxlbmd0aCAtIGNsdXN0ZXJNYXBbYSBhcyBhbnldLmxlbmd0aCk7XG4gICAgbGV0IHBlclJvdyA9IDY7XG5cbiAgICBsZXQgeU9mZnNldCA9IDA7XG4gICAgY29uc3QgbGF5b3V0U2l6ZSA9IDU7XG4gICAgZm9yIChjb25zdCBjbHVzdGVyTmFtZSBvZiBzb3J0ZWRDbHVzdGVyTmFtZXMpIHtcbiAgICAgIGNvbnN0IGNsdXN0ZXIgPSBjbHVzdGVyTWFwW2NsdXN0ZXJOYW1lIGFzIGFueV0hO1xuICAgICAgY29uc3QgZW1iZWRkaW5ncyA9IGF3YWl0IGJpb0xheW91dChjbHVzdGVyLCBzcGFyc2VNYXRyaXgsIDAuMDAxKTtcbiAgICAgIGlmIChjbHVzdGVyTnVtID09PSBNYXRoLmNlaWwocGVyUm93IC8gMS41KSkge1xuICAgICAgICBjbHVzdGVyTnVtID0gMDtcbiAgICAgICAgeU9mZnNldCArPSBsYXlvdXRTaXplIC8gcGVyUm93O1xuICAgICAgICBwZXJSb3cgPSBNYXRoLmNlaWwocGVyUm93ICogMS41KTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IG9mZnNldFggPSAoKGNsdXN0ZXJOdW0gJSBwZXJSb3cpICogbGF5b3V0U2l6ZSAvIHBlclJvdykgKiAxLjU7XG4gICAgICAvLyBjb25zdCBvZmZzZXRZID0gTWF0aC5mbG9vcihjbHVzdGVyTnVtIC8gcGVyUm93KSAqIDI7XG5cbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZW1iZWRkaW5ncy5lbWJlZFgubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgZW1iZWRYW2NsdXN0ZXJbaV1dID0gZW1iZWRkaW5ncy5lbWJlZFhbaV0gKiBsYXlvdXRTaXplIC8gcGVyUm93ICsgb2Zmc2V0WDtcbiAgICAgICAgZW1iZWRZW2NsdXN0ZXJbaV1dID0gZW1iZWRkaW5ncy5lbWJlZFlbaV0gKiBsYXlvdXRTaXplIC8gcGVyUm93ICsgeU9mZnNldDtcbiAgICAgIH1cbiAgICAgIGNsdXN0ZXJOdW0rKztcbiAgICB9XG4gICAgcmV0dXJuIHtlbWJlZFgsIGVtYmVkWX07XG4gIH1cblxuICBwcml2YXRlIG1lcmdlQ2x1c3RlcnMoY2x1c3RlcnM6IG51bWJlcltdLCBpOiBudW1iZXIsIGo6IG51bWJlcikge1xuICAgIGNvbnN0IGlDbHVzdGVyID0gY2x1c3RlcnNbaV07XG4gICAgY29uc3QgakNsdXN0ZXIgPSBjbHVzdGVyc1tqXTtcbiAgICBmb3IgKGxldCBrID0gMDsgayA8IGNsdXN0ZXJzLmxlbmd0aDsgaysrKSB7XG4gICAgICBpZiAoY2x1c3RlcnNba10gPT09IGpDbHVzdGVyKVxuICAgICAgICBjbHVzdGVyc1trXSA9IGlDbHVzdGVyO1xuICAgIH1cbiAgfVxuICBwdWJsaWMgYXNzaWduQ2x1c3RlcnMoc3BhcnNlTWF0cml4OiBTcGFyc2VNYXRyaXhPYmplY3QsIG5Sb3dzOiBudW1iZXIpIHtcbiAgICBsZXQgY2x1c3Rlck51bSA9IDA7XG4gICAgY29uc3QgaXM6IG51bWJlcltdID0gW107XG4gICAgY29uc3QganM6IG51bWJlcltdID0gW107XG4gICAgY29uc3Qgb3JkZXIgPSBNYXRoLmZsb29yKE1hdGgubWF4KE1hdGgubG9nMTAoblJvd3MpLCAyKSkgKyAxO1xuICAgIGNvbnN0IG1pbk9yZGVyID0gTWF0aC5wb3coMTAsIG9yZGVyKTtcbiAgICBjb25zdCBjbHVzdGVyczogbnVtYmVyW10gPSBuZXcgQXJyYXkoblJvd3MpLmZpbGwoLTEpO1xuICAgIGZvciAoY29uc3QgaSBvZiBPYmplY3Qua2V5cyhzcGFyc2VNYXRyaXgpKSB7XG4gICAgICBmb3IgKGNvbnN0IGogb2YgT2JqZWN0LmtleXMoc3BhcnNlTWF0cml4W2kgYXMgYW55XSkpIHtcbiAgICAgICAgaWYgKE1hdGgucm91bmQoc3BhcnNlTWF0cml4W2kgYXMgYW55XVtqIGFzIGFueV0gKiBtaW5PcmRlcikgLyBtaW5PcmRlciA+IDAgJiZcbiAgICAgICAgICBzcGFyc2VNYXRyaXhbaSBhcyBhbnldW2ogYXMgYW55XSAhPT0gTnVtYmVyKGkpICYmIE51bWJlcihqKSA+IE51bWJlcihpKSkge1xuICAgICAgICAgIGlzLnB1c2goTnVtYmVyKGkpKTtcbiAgICAgICAgICBqcy5wdXNoKE51bWJlcihqKSk7XG4gICAgICAgICAgaWYgKGNsdXN0ZXJzW051bWJlcihpKV0gIT09IC0xICYmIGNsdXN0ZXJzW051bWJlcihqKV0gIT09IC0xKSB7XG4gICAgICAgICAgICBpZiAoY2x1c3RlcnNbTnVtYmVyKGkpXSAhPT0gY2x1c3RlcnNbTnVtYmVyKGopXSlcbiAgICAgICAgICAgICAgdGhpcy5tZXJnZUNsdXN0ZXJzKGNsdXN0ZXJzLCBOdW1iZXIoaSksIE51bWJlcihqKSk7XG4gICAgICAgICAgfSBlbHNlIGlmIChjbHVzdGVyc1tOdW1iZXIoaSldICE9PSAtMSkge1xuICAgICAgICAgICAgY2x1c3RlcnNbTnVtYmVyKGopXSA9IGNsdXN0ZXJzW051bWJlcihpKV07XG4gICAgICAgICAgfSBlbHNlIGlmIChjbHVzdGVyc1tOdW1iZXIoaildICE9PSAtMSkge1xuICAgICAgICAgICAgY2x1c3RlcnNbTnVtYmVyKGkpXSA9IGNsdXN0ZXJzW051bWJlcihqKV07XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNsdXN0ZXJOdW0rKztcbiAgICAgICAgICAgIGNsdXN0ZXJzW051bWJlcihpKV0gPSBjbHVzdGVyTnVtO1xuICAgICAgICAgICAgY2x1c3RlcnNbTnVtYmVyKGopXSA9IGNsdXN0ZXJOdW07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGZvciAobGV0IGk9MDsgaSA8IGNsdXN0ZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoY2x1c3RlcnNbaV0gPT09IC0xKSB7XG4gICAgICAgIGNsdXN0ZXJOdW0gKys7XG4gICAgICAgIGNsdXN0ZXJzW2ldID0gY2x1c3Rlck51bTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHtjbHVzdGVycywgaXM6IG5ldyBVaW50MzJBcnJheShpcyksIGpzOiBuZXcgVWludDMyQXJyYXkoanMpfTtcbiAgfVxuXG4gIHB1YmxpYyB0b09iamVjdEZvcm0oc3BhcnNlTWF0cml4OiBTcGFyc2VNYXRyaXhSZXN1bHQpOiBTcGFyc2VNYXRyaXhPYmplY3Qge1xuICAgIGNvbnN0IHNwYXJzZU9iamVjdDoge1tfOiBudW1iZXJdOiB7W186IG51bWJlcl06IG51bWJlcn19ID0ge307XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzcGFyc2VNYXRyaXguaS5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKCFzcGFyc2VPYmplY3Rbc3BhcnNlTWF0cml4LmlbaV1dKVxuICAgICAgICBzcGFyc2VPYmplY3Rbc3BhcnNlTWF0cml4LmlbaV1dID0ge307XG4gICAgICBzcGFyc2VPYmplY3Rbc3BhcnNlTWF0cml4LmlbaV1dW3NwYXJzZU1hdHJpeC5qW2ldXSA9IDEgLSBzcGFyc2VNYXRyaXguZGlzdGFuY2VbaV07XG4gICAgICBpZiAoIXNwYXJzZU9iamVjdFtzcGFyc2VNYXRyaXgualtpXV0pXG4gICAgICAgIHNwYXJzZU9iamVjdFtzcGFyc2VNYXRyaXgualtpXV0gPSB7fTtcbiAgICAgIHNwYXJzZU9iamVjdFtzcGFyc2VNYXRyaXgualtpXV1bc3BhcnNlTWF0cml4LmlbaV1dID0gMSAtIHNwYXJzZU1hdHJpeC5kaXN0YW5jZVtpXTtcbiAgICB9XG4gICAgcmV0dXJuIHNwYXJzZU9iamVjdDtcbiAgfVxuXG4gIHByaXZhdGUgYWRkTG9vcHMoc3BhcnNlT2JqZWN0OiBTcGFyc2VNYXRyaXhPYmplY3QsIG5Sb3dzOiBudW1iZXIpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5Sb3dzOyBpKyspIHtcbiAgICAgIGlmICghc3BhcnNlT2JqZWN0W2ldKVxuICAgICAgICBzcGFyc2VPYmplY3RbaV0gPSB7fTtcbiAgICAgIHNwYXJzZU9iamVjdFtpXVtpXSA9IHRoaXMuX29wdGlvbnMubXVsdEZhY3RvcjtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIG5vcm1hbGl6ZShzcGFyc2VPYmplY3Q6IFNwYXJzZU1hdHJpeE9iamVjdCkge1xuICAgIGZvciAoY29uc3QgaSBvZiBPYmplY3Qua2V5cyhzcGFyc2VPYmplY3QpKSB7XG4gICAgICBjb25zdCByb3cgPSBzcGFyc2VPYmplY3RbaSBhcyBhbnldO1xuICAgICAgbGV0IHN1bSA9IDA7XG4gICAgICBmb3IgKGNvbnN0IGogb2YgT2JqZWN0LmtleXMocm93KSlcbiAgICAgICAgc3VtICs9IHJvd1tqIGFzIGFueV07XG4gICAgICBpZiAoc3VtID09PSAwKSBjb250aW51ZTtcbiAgICAgIGZvciAoY29uc3QgaiBvZiBPYmplY3Qua2V5cyhyb3cpKVxuICAgICAgICBzcGFyc2VPYmplY3RbaSBhcyBhbnldW2ogYXMgYW55XSAvPSBzdW07XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBleHBhbmQoc3BhcnNlT2JqZWN0OiBTcGFyc2VNYXRyaXhPYmplY3QsIG5Sb3dzOiBudW1iZXIpIHtcbiAgICBjb25zdCBleHBhbmRlZE9iamVjdDogU3BhcnNlTWF0cml4T2JqZWN0ID0ge307XG4gICAgY29uc3Qgb3JkZXIgPSBNYXRoLmZsb29yKE1hdGgubWF4KE1hdGgubG9nMTAoblJvd3MpLCAyKSkgKyAxO1xuICAgIGNvbnN0IG1pbk9yZGVyID0gTWF0aC5wb3coMTAsIG9yZGVyKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5Sb3dzOyBpKyspIHtcbiAgICAgIGlmICghc3BhcnNlT2JqZWN0W2ldKVxuICAgICAgICBjb250aW51ZTtcbiAgICAgIC8vIGNvbnN0IHJvdyA9IHNwYXJzZU9iamVjdFtpXTtcbiAgICAgIGV4cGFuZGVkT2JqZWN0W2ldID0ge307XG4gICAgICBmb3IgKGxldCBqID0gaTsgaiA8IG5Sb3dzOyBqKyspIHtcbiAgICAgICAgaWYgKCFzcGFyc2VPYmplY3RbaV0/LltqXSlcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgY29uc3QgdmFsID0gdGhpcy5nZXRFeHBhbmRWYWx1ZShzcGFyc2VPYmplY3QsIGksIGopOyAvL3BydW5pbmcgc3RlcFxuICAgICAgICBpZiAoTWF0aC5yb3VuZCh2YWwgKiBtaW5PcmRlcikgLyBtaW5PcmRlciA+IDApIHtcbiAgICAgICAgICBleHBhbmRlZE9iamVjdFtpXVtqXSA9IHZhbDtcbiAgICAgICAgICBpZiAoIWV4cGFuZGVkT2JqZWN0W2pdKVxuICAgICAgICAgICAgZXhwYW5kZWRPYmplY3Rbal0gPSB7fTtcbiAgICAgICAgICBleHBhbmRlZE9iamVjdFtqXVtpXSA9IHZhbDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZXhwYW5kZWRPYmplY3Q7XG4gIH1cblxuICAvLyBwcml2YXRlIHBydW5lKHJvdzogU3BhcnNlTWF0cml4T2JqZWN0W251bWJlcl0pIHtcblxuICAvLyB9XG5cbiAgcHJpdmF0ZSBpbmZsYXRlKHNwYXJzZU9iamVjdDogU3BhcnNlTWF0cml4T2JqZWN0KSB7XG4gICAgZm9yIChjb25zdCBpIG9mIE9iamVjdC5rZXlzKHNwYXJzZU9iamVjdCkpIHtcbiAgICAgIGNvbnN0IHJvdyA9IHNwYXJzZU9iamVjdFtpIGFzIGFueV07XG4gICAgICBmb3IgKGNvbnN0IGogb2YgT2JqZWN0LmtleXMocm93KSlcbiAgICAgICAgc3BhcnNlT2JqZWN0W2kgYXMgYW55XVtqIGFzIGFueV0gPSBNYXRoLnBvdyhzcGFyc2VPYmplY3RbaSBhcyBhbnldW2ogYXMgYW55XSwgdGhpcy5fb3B0aW9ucy5pbmZsYXRlRmFjdG9yKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGdldEV4cGFuZFZhbHVlKHNwYXJzZU9iamVjdDogU3BhcnNlTWF0cml4T2JqZWN0LCBpOiBhbnksIGo6IGFueSkge1xuICAgIGxldCB2YWwgPSAwO1xuICAgIGNvbnN0IGN1cnJlbnRJbmRleGVzID0gT2JqZWN0LmtleXMoc3BhcnNlT2JqZWN0W2ldID8/IHt9KTtcbiAgICBjb25zdCBvdGhlckluZGV4ZXMgPSBPYmplY3Qua2V5cyhzcGFyc2VPYmplY3Rbal0gPz8ge30pO1xuICAgIGZvciAoY29uc3QgayBvZiBjdXJyZW50SW5kZXhlcykge1xuICAgICAgaWYgKG90aGVySW5kZXhlcy5pbmNsdWRlcyhrKSlcbiAgICAgICAgdmFsICs9IHNwYXJzZU9iamVjdFtpXVtrIGFzIGFueV0gKiBzcGFyc2VPYmplY3Rbal1bayBhcyBhbnldO1xuICAgIH1cbiAgICByZXR1cm4gdmFsO1xuICB9XG59XG5cbiJdfQ==","import { SparseMatrixService } from '../distance-matrix/sparse-matrix-service';\nimport { MCLSparseReducer } from './marcov-cluster';\nonmessage = async (event) => {\n const { data, threshold, weights, aggregationMethod, distanceFnArgs, distanceFns, maxIterations } = event.data;\n const sparse = await new SparseMatrixService()\n .calcMultiColumn(data, distanceFns, threshold / 100, distanceFnArgs, weights, aggregationMethod);\n const res = await new MCLSparseReducer({ maxIterations: maxIterations ?? 5 }).transform(sparse, data[0].length);\n postMessage({ res });\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWNsLXdvcmtlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIm1jbC13b3JrZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLG1CQUFtQixFQUFDLE1BQU0sMENBQTBDLENBQUM7QUFHN0UsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0sa0JBQWtCLENBQUM7QUFFbEQsU0FBUyxHQUFHLEtBQUssRUFBRSxLQUFLLEVBQUUsRUFBRTtJQUMxQixNQUFNLEVBQUMsSUFBSSxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsY0FBYyxFQUFFLFdBQVcsRUFBRSxhQUFhLEVBQUMsR0FHaEIsS0FBSyxDQUFDLElBQUksQ0FBQztJQUMxRixNQUFNLE1BQU0sR0FBRyxNQUFNLElBQUksbUJBQW1CLEVBQUU7U0FDM0MsZUFBZSxDQUFDLElBQUksRUFBRSxXQUFXLEVBQUUsU0FBUyxHQUFHLEdBQUcsRUFBRSxjQUFjLEVBQUUsT0FBTyxFQUFFLGlCQUFpQixDQUFDLENBQUM7SUFDbkcsTUFBTSxHQUFHLEdBQUcsTUFBTSxJQUFJLGdCQUFnQixDQUFDLEVBQUMsYUFBYSxFQUFFLGFBQWEsSUFBSSxDQUFDLEVBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQzlHLFdBQVcsQ0FBQyxFQUFDLEdBQUcsRUFBQyxDQUFDLENBQUM7QUFDckIsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtTcGFyc2VNYXRyaXhTZXJ2aWNlfSBmcm9tICcuLi9kaXN0YW5jZS1tYXRyaXgvc3BhcnNlLW1hdHJpeC1zZXJ2aWNlJztcbmltcG9ydCB7RGlzdGFuY2VBZ2dyZWdhdGlvbk1ldGhvZH0gZnJvbSAnLi4vZGlzdGFuY2UtbWF0cml4L3R5cGVzJztcbmltcG9ydCB7S25vd25NZXRyaWNzfSBmcm9tICcuLi90eXBlZC1tZXRyaWNzJztcbmltcG9ydCB7TUNMU3BhcnNlUmVkdWNlcn0gZnJvbSAnLi9tYXJjb3YtY2x1c3Rlcic7XG5cbm9ubWVzc2FnZSA9IGFzeW5jIChldmVudCkgPT4ge1xuICBjb25zdCB7ZGF0YSwgdGhyZXNob2xkLCB3ZWlnaHRzLCBhZ2dyZWdhdGlvbk1ldGhvZCwgZGlzdGFuY2VGbkFyZ3MsIGRpc3RhbmNlRm5zLCBtYXhJdGVyYXRpb25zfTpcbiAgIHtkYXRhOiBhbnlbXVtdLCB0aHJlc2hvbGQ6IG51bWJlcixcbiAgICB3ZWlnaHRzOiBudW1iZXJbXSwgYWdncmVnYXRpb25NZXRob2Q6IERpc3RhbmNlQWdncmVnYXRpb25NZXRob2QsXG4gICAgZGlzdGFuY2VGbnM6IEtub3duTWV0cmljc1tdLCBkaXN0YW5jZUZuQXJnczogYW55W10sIG1heEl0ZXJhdGlvbnM6IG51bWJlcn0gPSBldmVudC5kYXRhO1xuICBjb25zdCBzcGFyc2UgPSBhd2FpdCBuZXcgU3BhcnNlTWF0cml4U2VydmljZSgpXG4gICAgLmNhbGNNdWx0aUNvbHVtbihkYXRhLCBkaXN0YW5jZUZucywgdGhyZXNob2xkIC8gMTAwLCBkaXN0YW5jZUZuQXJncywgd2VpZ2h0cywgYWdncmVnYXRpb25NZXRob2QpO1xuICBjb25zdCByZXMgPSBhd2FpdCBuZXcgTUNMU3BhcnNlUmVkdWNlcih7bWF4SXRlcmF0aW9uczogbWF4SXRlcmF0aW9ucyA/PyA1fSkudHJhbnNmb3JtKHNwYXJzZSwgZGF0YVswXS5sZW5ndGgpO1xuICBwb3N0TWVzc2FnZSh7cmVzfSk7XG59O1xuIl19","import { DistanceAggregationMethods } from './types';\nexport const isNil = (x) => x === null || x === undefined;\nexport function insertSmaller(distancesAr, indexes, num, index) {\n if (num > distancesAr[distancesAr.length - 1])\n return;\n const newPosition = distancesAr.findIndex((v) => num < v);\n distancesAr.pop();\n distancesAr.splice(newPosition, 0, num);\n indexes.pop();\n indexes.splice(newPosition, 0, index);\n}\nexport function insertLarger(distancesAr, indexes, num, index) {\n if (num < distancesAr[distancesAr.length - 1])\n return;\n const newPosition = distancesAr.findIndex((v) => num > v);\n distancesAr.pop();\n distancesAr.splice(newPosition, 0, num);\n indexes.pop();\n indexes.splice(newPosition, 0, index);\n}\nexport function getAggregationFunction(aggregationMethod, weights) {\n switch (aggregationMethod) {\n case DistanceAggregationMethods.MANHATTAN:\n return (vs) => vs.reduce((acc, val, idx) => acc + val * weights[idx], 0);\n default:\n return (vs) => {\n // euclidean\n const sum = vs.reduce((acc, val, idx) => acc + (val * weights[idx]) ** 2, 0);\n return Math.sqrt(sum);\n };\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJ1dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQTRCLDBCQUEwQixFQUFDLE1BQU0sU0FBUyxDQUFDO0FBRTlFLE1BQU0sQ0FBQyxNQUFNLEtBQUssR0FBRyxDQUFDLENBQU0sRUFBRSxFQUFFLENBQUMsQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLEtBQUssU0FBUyxDQUFDO0FBRS9ELE1BQU0sVUFBVSxhQUFhLENBQUMsV0FBcUIsRUFBRSxPQUFpQixFQUFFLEdBQVcsRUFBRSxLQUFhO0lBQ2hHLElBQUksR0FBRyxHQUFHLFdBQVcsQ0FBQyxXQUFXLENBQUMsTUFBTSxHQUFDLENBQUMsQ0FBQztRQUN6QyxPQUFPO0lBRVQsTUFBTSxXQUFXLEdBQUcsV0FBVyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzFELFdBQVcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztJQUNsQixXQUFXLENBQUMsTUFBTSxDQUFDLFdBQVcsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDeEMsT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDO0lBQ2QsT0FBTyxDQUFDLE1BQU0sQ0FBQyxXQUFXLEVBQUUsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQ3hDLENBQUM7QUFFRCxNQUFNLFVBQVUsWUFBWSxDQUFDLFdBQXFCLEVBQUUsT0FBaUIsRUFBRSxHQUFXLEVBQUUsS0FBYTtJQUMvRixJQUFJLEdBQUcsR0FBRyxXQUFXLENBQUMsV0FBVyxDQUFDLE1BQU0sR0FBQyxDQUFDLENBQUM7UUFDekMsT0FBTztJQUVULE1BQU0sV0FBVyxHQUFHLFdBQVcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUMxRCxXQUFXLENBQUMsR0FBRyxFQUFFLENBQUM7SUFDbEIsV0FBVyxDQUFDLE1BQU0sQ0FBQyxXQUFXLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ3hDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQztJQUNkLE9BQU8sQ0FBQyxNQUFNLENBQUMsV0FBVyxFQUFFLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztBQUN4QyxDQUFDO0FBRUQsTUFBTSxVQUFVLHNCQUFzQixDQUNwQyxpQkFBNEMsRUFBRSxPQUFpQjtJQUUvRCxRQUFRLGlCQUFpQixFQUFFO1FBQ3pCLEtBQUssMEJBQTBCLENBQUMsU0FBUztZQUN2QyxPQUFPLENBQUMsRUFBWSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ3JGO1lBQ0UsT0FBTyxDQUFDLEVBQVksRUFBRSxFQUFFO2dCQUN0QixZQUFZO2dCQUNaLE1BQU0sR0FBRyxHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztnQkFDN0UsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ3hCLENBQUMsQ0FBQztLQUNMO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7RGlzdGFuY2VBZ2dyZWdhdGlvbk1ldGhvZCwgRGlzdGFuY2VBZ2dyZWdhdGlvbk1ldGhvZHN9IGZyb20gJy4vdHlwZXMnO1xuXG5leHBvcnQgY29uc3QgaXNOaWwgPSAoeDogYW55KSA9PiB4ID09PSBudWxsIHx8IHggPT09IHVuZGVmaW5lZDtcblxuZXhwb3J0IGZ1bmN0aW9uIGluc2VydFNtYWxsZXIoZGlzdGFuY2VzQXI6IG51bWJlcltdLCBpbmRleGVzOiBudW1iZXJbXSwgbnVtOiBudW1iZXIsIGluZGV4OiBudW1iZXIpIHtcbiAgaWYgKG51bSA+IGRpc3RhbmNlc0FyW2Rpc3RhbmNlc0FyLmxlbmd0aC0xXSlcbiAgICByZXR1cm47XG5cbiAgY29uc3QgbmV3UG9zaXRpb24gPSBkaXN0YW5jZXNBci5maW5kSW5kZXgoKHYpID0+IG51bSA8IHYpO1xuICBkaXN0YW5jZXNBci5wb3AoKTtcbiAgZGlzdGFuY2VzQXIuc3BsaWNlKG5ld1Bvc2l0aW9uLCAwLCBudW0pO1xuICBpbmRleGVzLnBvcCgpO1xuICBpbmRleGVzLnNwbGljZShuZXdQb3NpdGlvbiwgMCwgaW5kZXgpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaW5zZXJ0TGFyZ2VyKGRpc3RhbmNlc0FyOiBudW1iZXJbXSwgaW5kZXhlczogbnVtYmVyW10sIG51bTogbnVtYmVyLCBpbmRleDogbnVtYmVyKSB7XG4gIGlmIChudW0gPCBkaXN0YW5jZXNBcltkaXN0YW5jZXNBci5sZW5ndGgtMV0pXG4gICAgcmV0dXJuO1xuXG4gIGNvbnN0IG5ld1Bvc2l0aW9uID0gZGlzdGFuY2VzQXIuZmluZEluZGV4KCh2KSA9PiBudW0gPiB2KTtcbiAgZGlzdGFuY2VzQXIucG9wKCk7XG4gIGRpc3RhbmNlc0FyLnNwbGljZShuZXdQb3NpdGlvbiwgMCwgbnVtKTtcbiAgaW5kZXhlcy5wb3AoKTtcbiAgaW5kZXhlcy5zcGxpY2UobmV3UG9zaXRpb24sIDAsIGluZGV4KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEFnZ3JlZ2F0aW9uRnVuY3Rpb24oXG4gIGFnZ3JlZ2F0aW9uTWV0aG9kOiBEaXN0YW5jZUFnZ3JlZ2F0aW9uTWV0aG9kLCB3ZWlnaHRzOiBudW1iZXJbXVxuKTogKHZhbHVlczogbnVtYmVyW10pID0+IG51bWJlciB7XG4gIHN3aXRjaCAoYWdncmVnYXRpb25NZXRob2QpIHtcbiAgICBjYXNlIERpc3RhbmNlQWdncmVnYXRpb25NZXRob2RzLk1BTkhBVFRBTjpcbiAgICAgIHJldHVybiAodnM6IG51bWJlcltdKSA9PiB2cy5yZWR1Y2UoKGFjYywgdmFsLCBpZHgpID0+IGFjYyArIHZhbCAqIHdlaWdodHNbaWR4XSwgMCk7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiAodnM6IG51bWJlcltdKSA9PiB7XG4gICAgICAgIC8vIGV1Y2xpZGVhblxuICAgICAgICBjb25zdCBzdW0gPSB2cy5yZWR1Y2UoKGFjYywgdmFsLCBpZHgpID0+IGFjYyArICh2YWwgKiB3ZWlnaHRzW2lkeF0pICoqIDIsIDApO1xuICAgICAgICByZXR1cm4gTWF0aC5zcXJ0KHN1bSk7XG4gICAgICB9O1xuICB9XG59XG4iXX0=","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n// the startup function\n__webpack_require__.x = () => {\n\t// Load entry module and return exports\n\t// This entry module depends on other loaded chunks and execution need to be delayed\n\tvar __webpack_exports__ = __webpack_require__.O(undefined, [590], () => (__webpack_require__(2357)))\n\t__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n\treturn __webpack_exports__;\n};\n\n","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.f = {};\n// This file contains only the entry chunk.\n// The chunk loading function for additional chunks\n__webpack_require__.e = (chunkId) => {\n\treturn Promise.all(Object.keys(__webpack_require__.f).reduce((promises, key) => {\n\t\t__webpack_require__.f[key](chunkId, promises);\n\t\treturn promises;\n\t}, []));\n};","// This function allow to reference async chunks and sibling chunks for the entrypoint\n__webpack_require__.u = (chunkId) => {\n\t// return url for filenames based on template\n\treturn \"\" + chunkId + \".js\";\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","var scriptUrl;\nif (__webpack_require__.g.importScripts) scriptUrl = __webpack_require__.g.location + \"\";\nvar document = __webpack_require__.g.document;\nif (!scriptUrl && document) {\n\tif (document.currentScript)\n\t\tscriptUrl = document.currentScript.src;\n\tif (!scriptUrl) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tif(scripts.length) {\n\t\t\tvar i = scripts.length - 1;\n\t\t\twhile (i > -1 && !scriptUrl) scriptUrl = scripts[i--].src;\n\t\t}\n\t}\n}\n// When supporting browsers where an automatic publicPath is not supported you must specify an output.publicPath manually via configuration\n// or pass an empty string (\"\") and set the __webpack_public_path__ variable from your code to use your own logic.\nif (!scriptUrl) throw new Error(\"Automatic publicPath is not supported in this browser\");\nscriptUrl = scriptUrl.replace(/#.*$/, \"\").replace(/\\?.*$/, \"\").replace(/\\/[^\\/]+$/, \"/\");\n__webpack_require__.p = scriptUrl;","__webpack_require__.b = self.location + \"\";\n\n// object to store loaded chunks\n// \"1\" means \"already loaded\"\nvar installedChunks = {\n\t709: 1\n};\n\n// importScripts chunk loading\nvar installChunk = (data) => {\n\tvar [chunkIds, moreModules, runtime] = data;\n\tfor(var moduleId in moreModules) {\n\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t}\n\t}\n\tif(runtime) runtime(__webpack_require__);\n\twhile(chunkIds.length)\n\t\tinstalledChunks[chunkIds.pop()] = 1;\n\tparentChunkLoadingFunction(data);\n};\n__webpack_require__.f.i = (chunkId, promises) => {\n\t// \"1\" is the signal for \"already loaded\"\n\tif(!installedChunks[chunkId]) {\n\t\tif(true) { // all chunks have JS\n\t\t\timportScripts(__webpack_require__.p + __webpack_require__.u(chunkId));\n\t\t}\n\t}\n};\n\nvar chunkLoadingGlobal = self[\"webpackChunkbio\"] = self[\"webpackChunkbio\"] || [];\nvar parentChunkLoadingFunction = chunkLoadingGlobal.push.bind(chunkLoadingGlobal);\nchunkLoadingGlobal.push = installChunk;\n\n// no HMR\n\n// no HMR manifest","// run startup\nvar __webpack_exports__ = __webpack_require__.x();\n"],"names":["deferred","next","async","bioLayout","cluster","sparseObject","threshold","n","length","is","js","i","j","a","b","push","embedX","Float32Array","fill","map","Math","random","embedY","xVelocities","yVelocities","temperature","idx","dx","dy","abs","vecSize","sqrt","minX","minY","maxX","maxY","min","max","rangeX","rangeY","getLayoutEmbeddings","defaultMCLOptions","expandFactor","maxIterations","inflateFactor","multFactor","MCLSparseReducer","constructor","opts","this","_options","sparseMatrix","nRows","toObjectForm","addLoops","normalize","expand","inflate","clusters","assignClusters","correctClusters","embeddings","layout","clusterSizeMap","sortedIndexes","Object","keys","Number","sort","clusterMap","forEach","clusterIdx","clusterNum","sortedClusterNames","perRow","yOffset","clusterName","ceil","offsetX","mergeClusters","iCluster","jCluster","k","order","floor","log10","minOrder","pow","Array","round","Uint32Array","distance","row","sum","expandedObject","val","getExpandValue","currentIndexes","otherIndexes","includes","onmessage","event","data","weights","aggregationMethod","distanceFnArgs","distanceFns","sparse","calcMultiColumn","res","transform","postMessage","isNil","x","insertSmaller","distancesAr","indexes","num","index","newPosition","findIndex","v","pop","splice","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","undefined","exports","module","__webpack_modules__","m","__webpack_exports__","O","result","chunkIds","fn","priority","notFulfilled","Infinity","fulfilled","every","key","r","d","definition","o","defineProperty","enumerable","get","f","e","chunkId","Promise","all","reduce","promises","u","g","globalThis","Function","window","obj","prop","prototype","hasOwnProperty","call","scriptUrl","importScripts","location","document","currentScript","src","scripts","getElementsByTagName","Error","replace","p","self","installedChunks","chunkLoadingGlobal","parentChunkLoadingFunction","bind","moreModules","runtime","then"],"sourceRoot":""}
package/dist/777.js DELETED
@@ -1,3 +0,0 @@
1
- /*! For license information please see 777.js.LICENSE.txt */
2
- (self.webpackChunkbio=self.webpackChunkbio||[]).push([[777],{7905:(t,e,n)=>{"use strict";t=n.hmd(t);var r,i=(r="undefined"!=typeof document&&document.currentScript?document.currentScript.src:void 0,function(t={}){var e,n,i=void 0!==t?t:{};i.ready=new Promise((function(t,r){e=t,n=r}));var s,o=Object.assign({},i),a="object"==typeof window,h="function"==typeof importScripts,u=("object"==typeof process&&"object"==typeof process.versions&&process.versions.node,"");(a||h)&&(h?u=self.location.href:"undefined"!=typeof document&&document.currentScript&&(u=document.currentScript.src),r&&(u=r),u=0!==u.indexOf("blob:")?u.substr(0,u.replace(/[?#].*/,"").lastIndexOf("/")+1):"",h&&(s=t=>{var e=new XMLHttpRequest;return e.open("GET",t,!1),e.responseType="arraybuffer",e.send(null),new Uint8Array(e.response)})),i.print||console.log.bind(console);var l,c,f=i.printErr||console.warn.bind(console);Object.assign(i,o),o=null,i.arguments&&i.arguments,i.thisProgram&&i.thisProgram,i.quit&&i.quit,i.wasmBinary&&(l=i.wasmBinary),i.noExitRuntime,"object"!=typeof WebAssembly&&A("no native wasm support detected");var m,g,p,d=!1;function w(){var t=c.buffer;i.HEAP8=m=new Int8Array(t),i.HEAP16=new Int16Array(t),i.HEAP32=new Int32Array(t),i.HEAPU8=g=new Uint8Array(t),i.HEAPU16=new Uint16Array(t),i.HEAPU32=p=new Uint32Array(t),i.HEAPF32=new Float32Array(t),i.HEAPF64=new Float64Array(t)}var y=[],b=[],M=[],x=0,v=null,E=null;function A(t){i.onAbort&&i.onAbort(t),f(t="Aborted("+t+")"),d=!0,t+=". Build with -sASSERTIONS for more info.";var e=new WebAssembly.RuntimeError(t);throw n(e),e}var S,I,N="data:application/octet-stream;base64,";function k(t){return t.startsWith(N)}function R(t){try{if(t==S&&l)return new Uint8Array(l);if(s)return s(t);throw"both async and sync fetching of the wasm failed"}catch(t){A(t)}}function C(t,e,n){return function(t){return l||!a&&!h||"function"!=typeof fetch?Promise.resolve().then((function(){return R(t)})):fetch(t,{credentials:"same-origin"}).then((function(e){if(!e.ok)throw"failed to load wasm binary file at '"+t+"'";return e.arrayBuffer()})).catch((function(){return R(t)}))}(t).then((function(t){return WebAssembly.instantiate(t,e)})).then((function(t){return t})).then(n,(function(t){f("failed to asynchronously prepare wasm: "+t),A(t)}))}function T(t){for(;t.length>0;)t.shift()(i)}function z(t){this.excPtr=t,this.ptr=t-24,this.set_type=function(t){p[this.ptr+4>>2]=t},this.get_type=function(){return p[this.ptr+4>>2]},this.set_destructor=function(t){p[this.ptr+8>>2]=t},this.get_destructor=function(){return p[this.ptr+8>>2]},this.set_caught=function(t){t=t?1:0,m[this.ptr+12>>0]=t},this.get_caught=function(){return 0!=m[this.ptr+12>>0]},this.set_rethrown=function(t){t=t?1:0,m[this.ptr+13>>0]=t},this.get_rethrown=function(){return 0!=m[this.ptr+13>>0]},this.init=function(t,e){this.set_adjusted_ptr(0),this.set_type(t),this.set_destructor(e)},this.set_adjusted_ptr=function(t){p[this.ptr+16>>2]=t},this.get_adjusted_ptr=function(){return p[this.ptr+16>>2]},this.get_exception_ptr=function(){if(j(this.get_type()))return p[this.excPtr>>2];var t=this.get_adjusted_ptr();return 0!==t?t:this.excPtr}}function L(t){var e=c.buffer;try{return c.grow(t-e.byteLength+65535>>>16),w(),1}catch(t){}}function D(t){return i["_"+t]}k(S="wasmDbscan.wasm")||(I=S,S=i.locateFile?i.locateFile(I,u):u+I);var O="undefined"!=typeof TextDecoder?new TextDecoder("utf8"):void 0;function P(t,e,n,r,i){var s={string:t=>{var e=0;return null!=t&&0!==t&&(e=function(t){var e=function(t){for(var e=0,n=0;n<t.length;++n){var r=t.charCodeAt(n);r<=127?e++:r<=2047?e+=2:r>=55296&&r<=57343?(e+=4,++n):e+=3}return e}(t)+1,n=$(e);return function(t,e,n){!function(t,e,n,r){if(!(r>0))return 0;for(var i=n+r-1,s=0;s<t.length;++s){var o=t.charCodeAt(s);if(o>=55296&&o<=57343&&(o=65536+((1023&o)<<10)|1023&t.charCodeAt(++s)),o<=127){if(n>=i)break;e[n++]=o}else if(o<=2047){if(n+1>=i)break;e[n++]=192|o>>6,e[n++]=128|63&o}else if(o<=65535){if(n+2>=i)break;e[n++]=224|o>>12,e[n++]=128|o>>6&63,e[n++]=128|63&o}else{if(n+3>=i)break;e[n++]=240|o>>18,e[n++]=128|o>>12&63,e[n++]=128|o>>6&63,e[n++]=128|63&o}}e[n]=0}(t,g,e,n)}(t,n,e),n}(t)),e},array:t=>{var e,n,r=$(t.length);return e=t,n=r,m.set(e,n),r}},o=D(t),a=[],h=0;if(r)for(var u=0;u<r.length;u++){var l=s[n[u]];l?(0===h&&(h=B()),a[u]=l(r[u])):a[u]=r[u]}var c=o.apply(null,a);return function(t){return 0!==h&&U(h),function(t){return"string"===e?(n=t)?function(t,e,n){for(var r=e+n,i=e;t[i]&&!(i>=r);)++i;if(i-e>16&&t.buffer&&O)return O.decode(t.subarray(e,i));for(var s="";e<i;){var o=t[e++];if(128&o){var a=63&t[e++];if(192!=(224&o)){var h=63&t[e++];if((o=224==(240&o)?(15&o)<<12|a<<6|h:(7&o)<<18|a<<12|h<<6|63&t[e++])<65536)s+=String.fromCharCode(o);else{var u=o-65536;s+=String.fromCharCode(55296|u>>10,56320|1023&u)}}else s+=String.fromCharCode((31&o)<<6|a)}else s+=String.fromCharCode(o)}return s}(g,n,r):"":"boolean"===e?Boolean(t):t;var n,r}(t)}(c)}var _,F={__cxa_throw:function(t,e,n){throw new z(t).init(e,n),t},abort:function(){A("")},emscripten_memcpy_big:function(t,e,n){g.copyWithin(t,e,e+n)},emscripten_resize_heap:function(t){var e,n=g.length,r=2147483648;if((t>>>=0)>r)return!1;for(var i=1;i<=4;i*=2){var s=n*(1+.2/i);if(s=Math.min(s,t+100663296),L(Math.min(r,(e=Math.max(t,s))+(65536-e%65536)%65536)))return!0}return!1}},B=(function(){var t,e,r,s,o={env:F,wasi_snapshot_preview1:F};function a(t,e){var n,r=t.exports;return i.asm=r,c=i.asm.memory,w(),i.asm.__indirect_function_table,n=i.asm.__wasm_call_ctors,b.unshift(n),function(t){if(x--,i.monitorRunDependencies&&i.monitorRunDependencies(x),0==x&&(null!==v&&(clearInterval(v),v=null),E)){var e=E;E=null,e()}}(),r}if(x++,i.monitorRunDependencies&&i.monitorRunDependencies(x),i.instantiateWasm)try{return i.instantiateWasm(o,a)}catch(t){f("Module.instantiateWasm callback failed with error: "+t),n(t)}(t=l,e=S,r=o,s=function(t){a(t.instance)},t||"function"!=typeof WebAssembly.instantiateStreaming||k(e)||"function"!=typeof fetch?C(e,r,s):fetch(e,{credentials:"same-origin"}).then((function(t){return WebAssembly.instantiateStreaming(t,r).then(s,(function(t){return f("wasm streaming compile failed: "+t),f("falling back to ArrayBuffer instantiation"),C(e,r,s)}))}))).catch(n)}(),i._dbscan=function(){return(i._dbscan=i.asm.dbscan).apply(null,arguments)},i._malloc=function(){return(i._malloc=i.asm.malloc).apply(null,arguments)},i._free=function(){return(i._free=i.asm.free).apply(null,arguments)},function(){return(B=i.asm.stackSave).apply(null,arguments)}),U=function(){return(U=i.asm.stackRestore).apply(null,arguments)},$=function(){return($=i.asm.stackAlloc).apply(null,arguments)},j=function(){return(j=i.asm.__cxa_is_pointer_type).apply(null,arguments)};function V(){function t(){_||(_=!0,i.calledRun=!0,d||(T(b),e(i),i.onRuntimeInitialized&&i.onRuntimeInitialized(),function(){if(i.postRun)for("function"==typeof i.postRun&&(i.postRun=[i.postRun]);i.postRun.length;)t=i.postRun.shift(),M.unshift(t);var t;T(M)}()))}x>0||(function(){if(i.preRun)for("function"==typeof i.preRun&&(i.preRun=[i.preRun]);i.preRun.length;)t=i.preRun.shift(),y.unshift(t);var t;T(y)}(),x>0||(i.setStatus?(i.setStatus("Running..."),setTimeout((function(){setTimeout((function(){i.setStatus("")}),1),t()}),1)):t()))}if(i.ccall=P,i.cwrap=function(t,e,n,r){var i=!n||n.every((t=>"number"===t||"boolean"===t));return"string"!==e&&i&&!r?D(t):function(){return P(t,e,n,arguments)}},E=function t(){_||V(),_||(E=t)},i.preInit)for("function"==typeof i.preInit&&(i.preInit=[i.preInit]);i.preInit.length>0;)i.preInit.pop()();return V(),t.ready});"object"==typeof exports?t.exports=i:"function"==typeof define&&n.amdO?define([],(function(){return i})):"object"==typeof exports&&(exports.exportCppDbscanLib=i)},6814:(t,e,n)=>{"use strict";n.d(e,{cZ:()=>i,kK:()=>r}),n(7862);const r=t=>null==t;function i(t,e,n,r){if(n>t[t.length-1])return;const i=t.findIndex((t=>n<t));t.pop(),t.splice(i,0,n),e.pop(),e.splice(i,0,r)}},5777:(t,e,n)=>{"use strict";class r extends Float32Array{}var i=n(1040),s=n(1811),o=n(3979),a=n(5697);function h(t=!1,e="Assertion error."){if(!t)throw new Error(e)}var u=n(708);const l={[i.CF.Euclidean]:function(t,e){let n=0;const r=t.length;if(r!==e.length)throw new Error("The dimensionality of the vectors must match");for(let i=0;i<r;++i)n+=Math.pow(t[i]-e[i],2);return Math.sqrt(n)}},c={[i.W.Levenshtein]:s.T,[i.W.JaroWinkler]:o.H$,[i.W.Manhattan]:function(t,e){if(t.length!==e.length)return 1;{let n=0;for(let r=1;r<t.length;r++)n+=t[r]==e[r]?0:1;return n/t.length}},[i.W.Onehot]:function(t,e){return t===e?0:1}},f={[i.gk.Tanimoto]:a.KR,[i.gk.Dice]:a._h,[i.gk.Asymmetric]:a.yU,[i.gk.BraunBlanquet]:a.Dz,[i.gk.Cosine]:a.Zd,[i.gk.Kulczynski]:a.s,[i.gk.McConnaughey]:a.aW,[i.gk.RogotGoldberg]:a.MI,[i.gk.Russel]:a.fX,[i.gk.Sokal]:a.NB,[i.gk.Hamming]:a.UX,[i.gk.Euclidean]:a.WI},m={[i.gd.TanimotoIntArray]:a.FV},g={[i.Yc.Difference]:a.bX},p={[i.gj.CommonItems]:a.Jv},d={[i.Qe.Vector]:{[i.CF.Euclidean]:l[i.CF.Euclidean]},[i.Qe.String]:{[i.W.Levenshtein]:c[i.W.Levenshtein],[i.W.JaroWinkler]:c[i.W.JaroWinkler],[i.W.Manhattan]:c[i.W.Manhattan],[i.W.Onehot]:c[i.W.Onehot]},[i.Qe.BitArray]:{[i.gk.Tanimoto]:f[i.gk.Tanimoto],[i.gk.Dice]:f[i.gk.Dice],[i.gk.Asymmetric]:f[i.gk.Asymmetric],[i.gk.BraunBlanquet]:f[i.gk.BraunBlanquet],[i.gk.Cosine]:f[i.gk.Cosine],[i.gk.Kulczynski]:f[i.gk.Kulczynski],[i.gk.McConnaughey]:f[i.gk.McConnaughey],[i.gk.RogotGoldberg]:f[i.gk.RogotGoldberg],[i.gk.Russel]:f[i.gk.Russel],[i.gk.Sokal]:f[i.gk.Sokal]},[i.Qe.MacroMolecule]:{[u.U.HAMMING]:u.o[u.U.HAMMING],[u.U.LEVENSHTEIN]:u.o[u.U.LEVENSHTEIN],[u.U.NEEDLEMANN_WUNSCH]:u.o[u.U.NEEDLEMANN_WUNSCH],[u.U.MONOMER_CHEMICAL_DISTANCE]:u.o[u.U.MONOMER_CHEMICAL_DISTANCE]},[i.Qe.Number]:{[i.Yc.Difference]:g[i.Yc.Difference]},[i.Qe.IntArray]:{[i.gd.TanimotoIntArray]:m[i.gd.TanimotoIntArray]},[i.Qe.NumberArray]:{[i.gj.CommonItems]:p[i.gj.CommonItems]}},w=Object.keys(d).reduce(((t,e)=>{for(const n of Object.keys(d[e]))t[n]=e;return t}),{});class y{constructor(t){this.method=t,this.dataType=w[t]}metricNeedsArgs(t){return w[t]==i.Qe.MacroMolecule.toString()||w[t]==i.Qe.Number.toString()||function(t){return w[t]==i.Qe.NumberArray.toString()}(t)}getMeasure(t){const e=d;if(!e.hasOwnProperty(this.dataType)||!e[this.dataType].hasOwnProperty(this.method))throw new Error(`Unknown measure ${this.method} for data type ${this.dataType}`);return this.metricNeedsArgs(this.method)?e[this.dataType][this.method](t):e[this.dataType][this.method]}static getMetricByDataType(t){return Object.keys(d[t])}static get availableMeasures(){return Object.keys(d)}}n(6814);var b=n(7862);class M{constructor(t=!0,e=!0){const r=navigator.hardwareConcurrency;this._workerCount=t?Math.max(r-2,1):1,this._workers=new Array(this._workerCount).fill(null).map((()=>new Worker(new URL(n.p+n.u(65),n.b)))),this._terminateOnComplete=e}async calc(t,e,n=!0,r){return await this.calcMulti([t],[e],n,[r??{}],[1],b.y.MANHATTAN)}async calcMulti(t,e,n=!0,r=[{}],i=[1],s=b.y.MANHATTAN){if(t.length<1)throw new Error("values must contain at least one array");if(e.length!==t.length||r.length!==t.length||i.length!==t.length)throw new Error("values, fnNames, weights and opts must have the same length");return new Promise((async(o,a)=>{try{const a=t[0].length,h=new Array(this._workerCount),u=a*(a-1)/2;this._workerCount=Math.min(this._workerCount,u);const l=u/this._workerCount,c=new Float32Array(u);let f=0,m=1,g=0,p=Number.MIN_VALUE;for(let n=0;n<this._workerCount;n++){const o=Math.floor(n*l),d=n===this._workerCount-1?u:Math.floor((n+1)*l),w=f,y=m;n!==this._workerCount-1&&(f=a-2-Math.floor(Math.sqrt(-8*d+4*a*(a-1)-7)/2-.5),m=d-a*f+Math.floor((f+1)*(f+2)/2)),this._workers[n].postMessage({values:t,fnNames:e,startRow:w,startCol:y,chunckSize:d-o,opts:r,weights:i,aggregationMethod:s}),h[n]=new Promise(((t,e)=>{this._workers[n].onmessage=({data:{error:r,distanceMatrixData:i,min:s,max:a}})=>{this._terminateOnComplete&&setTimeout((()=>this._workers[n].terminate())),r?e(r):(c.set(i,o),s<g&&(g=s),a>p&&(p=a),t())}}))}await Promise.all(h),n&&c.forEach(((t,e)=>{c[e]=(t-g)/(p-g)})),o(c)}catch(t){a(t)}}))}terminate(){this._workers.forEach((t=>t.terminate()))}}function x(t,e){return Math.floor(e()*t)}function v(t){return t()}function E(t){const e=[];for(let n=0;n<t;n++)e.push(void 0);return e}function A(t){return E(t).map(((t,e)=>e))}function S(t,e){return E(t).map((()=>e))}function I(t){return S(t,0)}function N(t){return function(t){return t.reduce(((t,e)=>t+e))}(t)/t.length}function k(t){let e=0;for(let n=0;n<t.length;n++)e=t[n]>e?t[n]:e;return e}function R(t,e,n){const r=I(t);for(let i=0;i<t;i++){let t=!0;for(;t;){const s=x(e,n);let o=!1;for(let t=0;t<i;t++)if(s===r[t]){o=!0;break}o||(t=!1),r[i]=s}}return r}function C(t,e,n){const r=[];let i=0;if(t.length!==e*n)throw new Error("Array dimensions must match input length.");for(let s=0;s<e;s++){const e=[];for(let r=0;r<n;r++)e.push(t[i]),i+=1;r.push(e)}return r}function T(t,e){const n=n=>E(t).map((()=>S(e,n))),r=[];return r.push(n(-1)),r.push(n(1/0)),r.push(n(0)),r}function z(t,e,n){const r=I(t);for(let i=0;i<t;i++){let t=!0,s=0;for(;t;){s=x(e,n);let o=!1;for(let t=0;t<i;t++)if(s===r[t]){o=!0;break}o||(t=!1)}r[i]=s}return r}function L(t,e,n,r,i){e=Math.floor(e);const s=t[0][e];if(n>=t[1][e][0])return 0;for(let t=0;t<s.length;t++)if(r===s[t])return 0;return D(t,e,n,r,i)}function D(t,e,n,r,i){const s=t[0][e],o=t[1][e],a=t[2][e];if(n>=o[0])return 0;o[0]=n,s[0]=r,a[0]=i;let h=0,u=0;for(;;){const e=2*h+1,r=e+1,i=t[0][0].length;if(e>=i)break;if(r>=i){if(!(o[e]>n))break;u=e}else if(o[e]>=o[r]){if(!(n<o[e]))break;u=e}else{if(!(n<o[r]))break;u=r}o[h]=o[u],s[h]=s[u],a[h]=a[u],h=u}return o[h]=n,s[h]=r,a[h]=i,1}function O(t,e,n,r,i){const s=T(e,r);for(let r=0;r<e;r++)for(let e=0;e<n;e++){if(t[0][r][e]<0)continue;const n=t[0][r][e],o=t[2][r][e],a=v(i);L(s,r,a,n,o),L(s,n,a,r,o),t[2][r][e]=0}return s}function P(t){const e=t[0],n=t[1];for(let t=0;t<e.length;t++){const r=e[t],i=n[t];for(let t=0;t<r.length-1;t++){const e=r.length-t-1,n=i.length-t-1,s=r[0];r[0]=r[e],r[e]=s;const o=i[0];i[0]=i[n],i[n]=o,_(i,r,n,0)}}return{indices:e,weights:n}}function _(t,e,n,r){for(;2*r+1<n;){const i=2*r+1,s=i+1;let o=r;if(t[o]<t[i]&&(o=i),s<n&&t[o]<t[s]&&(o=s),o===r)break;{const n=t[r];t[r]=t[o],t[o]=n;const i=e[r];e[r]=e[o],e[o]=i,r=o}}}function F(t,e){const n=t[0][e],r=t[1][e],i=t[2][e];let s=1/0,o=-1;for(let t=0;t>n.length;t++)1===i[t]&&r[t]<s&&(s=r[t],o=t);return o>=0?(i[o]=0,Math.floor(n[o])):-1}class B{constructor(t,e,n,r){if(this.entries=new Map,this.nRows=0,this.nCols=0,t.length!==e.length||t.length!==n.length)throw new Error("rows, cols and values arrays must all have the same length");this.nRows=r[0],this.nCols=r[1];for(let r=0;r<n.length;r++){const i=t[r],s=e[r];this.checkDims(i,s);const o=this.makeKey(i,s);this.entries.set(o,{value:n[r],row:i,col:s})}}makeKey(t,e){return`${t}:${e}`}checkDims(t,e){if(!(t<this.nRows&&e<this.nCols))throw new Error("row and/or col specified outside of matrix dimensions")}set(t,e,n){this.checkDims(t,e);const r=this.makeKey(t,e);this.entries.has(r)?this.entries.get(r).value=n:this.entries.set(r,{value:n,row:t,col:e})}get(t,e,n=0){const r=this.makeKey(t,e);return this.entries.has(r)?this.entries.get(r).value:n}getAll(t=!0){const e=new Array(this.entries.size).fill(null);let n=0;return this.entries.forEach((t=>{e[n++]=t})),t&&e.sort(((t,e)=>t.row===e.row?t.col-e.col:t.row-e.row)),e}getDims(){return[this.nRows,this.nCols]}getRows(){return Array.from(this.entries,(([t,e])=>e.row))}getCols(){return Array.from(this.entries,(([t,e])=>e.col))}getValues(){return Array.from(this.entries,(([t,e])=>e.value))}forEach(t){this.entries.forEach((e=>t(e.value,e.row,e.col)))}map(t){const e=new Float32Array(this.entries.size);let n=0;this.entries.forEach((r=>{e[n++]=t(r.value,r.row,r.col)}));const r=[this.nRows,this.nCols];return new B(this.getRows(),this.getCols(),e,r)}toArray(){const t=E(this.nRows).map((()=>I(this.nCols)));return this.entries.forEach((e=>{t[e.row][e.col]=e.value})),t}}function U(t){const e=t.getRows(),n=t.getCols(),r=t.getValues(),i=n.length,s=new Int32Array(i),o=new Int32Array(i),a=new Float32Array(i);s.set(e),o.set(n),a.set(r);const h=[t.nCols,t.nRows];return new B(o,s,a,h)}function $(t,e){return H(t,e,((t,e)=>t*e))}function j(t,e){return H(t,e,((t,e)=>t+e))}function V(t,e){return H(t,e,((t,e)=>t-e))}function q(t,e){return t.map((t=>t*e))}function G(t){const e=new Set,n=t.getValues(),r=t.getRows(),i=t.getCols();for(let t=0;t<n.length;t++)0===n[t]&&e.add(t);const s=(t,n)=>!e.has(n),o=n.filter(s),a=r.filter(s),h=i.filter(s);return new B(a,h,o,t.getDims())}function W(t,e="l2"){const n=Y[e],r=new Map;t.forEach(((t,e,n)=>{const i=r.get(e)||[];i.push(n),r.set(e,i)}));const i=new B([],[],[],t.getDims());for(const e of r.keys()){const s=r.get(e).sort(),o=n(s.map((n=>t.get(e,n))));for(let t=0;t<o.length;t++)i.set(e,s[t],o[t])}return i}const Y={max:t=>{let e=-1/0;for(let n=0;n<t.length;n++)e=t[n]>e?t[n]:e;return t.map((t=>t/e))},l1:t=>{let e=0;for(let n=0;n<t.length;n++)e+=t[n];return t.map((t=>t/e))},l2:t=>{let e=0;for(let n=0;n<t.length;n++)e+=t[n]**2;return t.map((t=>Math.sqrt(t**2/e)))}};function H(t,e,n){const r=new Set,i=[],s=[],o=[],a=(r,a)=>{i.push(r),s.push(a);const h=n(t.get(r,a),e.get(r,a));o.push(h)},h=t.getValues(),u=t.getRows(),l=t.getCols();for(let t=0;t<h.length;t++){const e=u[t],n=l[t],i=`${e}:${n}`;r.add(i),a(e,n)}const c=e.getValues(),f=e.getRows(),m=e.getCols();for(let t=0;t<c.length;t++){const e=f[t],n=m[t],i=`${e}:${n}`;r.has(i)||a(e,n)}const g=[t.nRows,t.nCols];return new B(i,s,o,g)}function K(t){const e=[];t.forEach(((t,n,r)=>{e.push({value:t,row:n,col:r})})),e.sort(((t,e)=>t.row===e.row?t.col-e.col:t.row-e.row));const n=[],r=[],i=[];let s=-1;for(let t=0;t<e.length;t++){const{row:o,col:a,value:h}=e[t];o!==s&&(s=o,i.push(t)),n.push(a),r.push(h)}return{indices:n,values:r,indptr:i}}class Q{constructor(t,e,n,r){this.hyperplanes=t,this.offsets=e,this.children=n,this.indices=r}}function X(t,e,n,r){const i=Math.max(10,e),s=A(n).map(((e,n)=>function(t,e=30,n,r){return J(t,A(t.length),e,n,r)}(t,i,n,r))),o=s.map((t=>function(t,e){const n=tt(t),r=et(t),i=A(n).map((()=>t.hyperplane?1:0)),s=I(n),o=A(n).map((()=>[-1,-1])),a=A(r).map((()=>A(e).map((()=>-1))));return Z(t,i,s,o,a,0,0),new Q(i,s,o,a)}(t,i)));return o}function J(t,e,n=30,r,i){if(e.length>n){const s=function(t,e,n){const r=x(e.length,n);let i=x(e.length,n);i+=r===i?1:0,i%=e.length;const s=e[r],o=e[i];let a=0,h=0;h=t[s]-t[o],a-=h*(t[s]+t[o])/2;let u=0,l=0;const c=I(e.length);for(let r=0;r<e.length;r++){let i=a;i+=h*t[e[r]],0===i?(c[r]=x(2,n),0===c[r]?u+=1:l+=1):i>0?(c[r]=0,u+=1):(c[r]=1,l+=1)}const f=I(u),m=I(l);u=0,l=0;for(let t=0;t<c.length;t++)0===c[t]?(f[u]=e[t],u+=1):(m[l]=e[t],l+=1);return{indicesLeft:f,indicesRight:m,hyperplane:h,offset:a}}(t,e,i),{indicesLeft:o,indicesRight:a,hyperplane:h,offset:u}=s;return{leftChild:J(t,o,n,r+1,i),rightChild:J(t,a,n,r+1,i),isLeaf:!1,hyperplane:h,offset:u}}return{indices:e,isLeaf:!0}}function Z(t,e,n,r,i,s,o){if(t.isLeaf)return r[s][0]=-o,i[o].splice(0,t.indices.length,...t.indices),{nodeNum:s,leafNum:o+=1};{e[s]=t.hyperplane,n[s]=t.offset,r[s][0]=s+1;const a=s;let h=Z(t.leftChild,e,n,r,i,s+1,o);return s=h.nodeNum,o=h.leafNum,r[a][1]=s+1,h=Z(t.rightChild,e,n,r,i,s+1,o),{nodeNum:h.nodeNum,leafNum:h.leafNum}}}function tt(t){return t.isLeaf?1:1+tt(t.leftChild)+tt(t.rightChild)}function et(t){return t.isLeaf?1:et(t.leftChild)+et(t.rightChild)}function nt(t,e,n,r){let i=e;return i+=t*n,0===i?x(2,r):i>0?0:1}function rt(t,e,n){let r=0;for(;e.children[r][0]>0;)r=0===nt(e.hyperplanes[r],e.offsets[r],t,n)?e.children[r][0]:e.children[r][1];const i=-1*e.children[r][0];return e.indices[i]}const it=Object.prototype.toString;function st(t){return it.call(t).endsWith("Array]")}function ot(t,e,n){let r=0;const i=n(e);for(let e=0;e<t.x.length;e++)r+=Math.abs(t.y[e]-i(t.x[e]));return r}const at=Object.prototype.toString;function ht(t){return at.call(t).endsWith("Array]")}const ut=Object.prototype.toString;function lt(t){return ut.call(t).endsWith("Array]")}const ct=Object.prototype.toString;const ft=Object.prototype.toString;function mt(t){var e,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(!lt(t))throw new TypeError("input must be an array");if(0===t.length)throw new TypeError("input must not be empty");if(void 0!==n.output){if(!lt(n.output))throw new TypeError("output option must be an array if specified");e=n.output}else e=new Array(t.length);var r=function(t){var e,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(e=t,!ft.call(e).endsWith("Array]"))throw new TypeError("input must be an array");if(0===t.length)throw new TypeError("input must not be empty");var r=n.fromIndex,i=void 0===r?0:r,s=n.toIndex,o=void 0===s?t.length:s;if(i<0||i>=t.length||!Number.isInteger(i))throw new Error("fromIndex must be a positive integer smaller than length");if(o<=i||o>t.length||!Number.isInteger(o))throw new Error("toIndex must be an integer greater than fromIndex and at most equal to length");for(var a=t[i],h=i+1;h<o;h++)t[h]<a&&(a=t[h]);return a}(t),i=function(t){var e,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(e=t,!ct.call(e).endsWith("Array]"))throw new TypeError("input must be an array");if(0===t.length)throw new TypeError("input must not be empty");var r=n.fromIndex,i=void 0===r?0:r,s=n.toIndex,o=void 0===s?t.length:s;if(i<0||i>=t.length||!Number.isInteger(i))throw new Error("fromIndex must be a positive integer smaller than length");if(o<=i||o>t.length||!Number.isInteger(o))throw new Error("toIndex must be an integer greater than fromIndex and at most equal to length");for(var a=t[i],h=i+1;h<o;h++)t[h]>a&&(a=t[h]);return a}(t);if(r===i)throw new RangeError("minimum and maximum input values are equal. Cannot rescale a constant array");var s=n.min,o=void 0===s?n.autoMinMax?r:0:s,a=n.max,h=void 0===a?n.autoMinMax?i:1:a;if(o>=h)throw new RangeError("min option must be smaller than max option");for(var u=(h-o)/(i-r),l=0;l<t.length;l++)e[l]=(t[l]-r)*u+o;return e}const gt=" ".repeat(2),pt=" ".repeat(4);function dt(t,e={}){const{maxRows:n=15,maxColumns:r=10,maxNumSize:i=8,padMinus:s="auto"}=e;return`${t.constructor.name} {\n${gt}[\n${pt}${function(t,e,n,r,i){const{rows:s,columns:o}=t,a=Math.min(s,e),h=Math.min(o,n),u=[];if("auto"===i){i=!1;t:for(let e=0;e<a;e++)for(let n=0;n<h;n++)if(t.get(e,n)<0){i=!0;break t}}for(let e=0;e<a;e++){let n=[];for(let s=0;s<h;s++)n.push(wt(t.get(e,s),r,i));u.push(`${n.join(" ")}`)}return h!==o&&(u[u.length-1]+=` ... ${o-n} more columns`),a!==s&&u.push(`... ${s-e} more rows`),u.join(`\n${pt}`)}(t,n,r,i,s)}\n${gt}]\n${gt}rows: ${t.rows}\n${gt}columns: ${t.columns}\n}`}function wt(t,e,n){return(t>=0&&n?` ${yt(t,e-1)}`:yt(t,e)).padEnd(e)}function yt(t,e){let n=t.toString();if(n.length<=e)return n;let r=t.toFixed(e);if(r.length>e&&(r=t.toFixed(Math.max(0,e-(r.length-e)))),r.length<=e&&!r.startsWith("0.000")&&!r.startsWith("-0.000"))return r;let i=t.toExponential(e);return i.length>e&&(i=t.toExponential(Math.max(0,e-(i.length-e)))),i.slice(0)}function bt(t,e,n){let r=n?t.rows:t.rows-1;if(e<0||e>r)throw new RangeError("Row index out of range")}function Mt(t,e,n){let r=n?t.columns:t.columns-1;if(e<0||e>r)throw new RangeError("Column index out of range")}function xt(t,e){if(e.to1DArray&&(e=e.to1DArray()),e.length!==t.columns)throw new RangeError("vector size must be the same as the number of columns");return e}function vt(t,e){if(e.to1DArray&&(e=e.to1DArray()),e.length!==t.rows)throw new RangeError("vector size must be the same as the number of rows");return e}function Et(t,e,n,r,i){if(5!==arguments.length)throw new RangeError("expected 4 arguments");if(St("startRow",e),St("endRow",n),St("startColumn",r),St("endColumn",i),e>n||r>i||e<0||e>=t.rows||n<0||n>=t.rows||r<0||r>=t.columns||i<0||i>=t.columns)throw new RangeError("Submatrix indices are out of range")}function At(t,e=0){let n=[];for(let r=0;r<t;r++)n.push(e);return n}function St(t,e){if("number"!=typeof e)throw new TypeError(`${t} must be a number`)}function It(t){if(t.isEmpty())throw new Error("Empty matrix has no elements to index")}class Nt{static from1DArray(t,e,n){if(t*e!==n.length)throw new RangeError("data length does not match given dimensions");let r=new Rt(t,e);for(let i=0;i<t;i++)for(let t=0;t<e;t++)r.set(i,t,n[i*e+t]);return r}static rowVector(t){let e=new Rt(1,t.length);for(let n=0;n<t.length;n++)e.set(0,n,t[n]);return e}static columnVector(t){let e=new Rt(t.length,1);for(let n=0;n<t.length;n++)e.set(n,0,t[n]);return e}static zeros(t,e){return new Rt(t,e)}static ones(t,e){return new Rt(t,e).fill(1)}static rand(t,e,n={}){if("object"!=typeof n)throw new TypeError("options must be an object");const{random:r=Math.random}=n;let i=new Rt(t,e);for(let n=0;n<t;n++)for(let t=0;t<e;t++)i.set(n,t,r());return i}static randInt(t,e,n={}){if("object"!=typeof n)throw new TypeError("options must be an object");const{min:r=0,max:i=1e3,random:s=Math.random}=n;if(!Number.isInteger(r))throw new TypeError("min must be an integer");if(!Number.isInteger(i))throw new TypeError("max must be an integer");if(r>=i)throw new RangeError("min must be smaller than max");let o=i-r,a=new Rt(t,e);for(let n=0;n<t;n++)for(let t=0;t<e;t++){let e=r+Math.round(s()*o);a.set(n,t,e)}return a}static eye(t,e,n){void 0===e&&(e=t),void 0===n&&(n=1);let r=Math.min(t,e),i=this.zeros(t,e);for(let t=0;t<r;t++)i.set(t,t,n);return i}static diag(t,e,n){let r=t.length;void 0===e&&(e=r),void 0===n&&(n=e);let i=Math.min(r,e,n),s=this.zeros(e,n);for(let e=0;e<i;e++)s.set(e,e,t[e]);return s}static min(t,e){t=this.checkMatrix(t),e=this.checkMatrix(e);let n=t.rows,r=t.columns,i=new Rt(n,r);for(let s=0;s<n;s++)for(let n=0;n<r;n++)i.set(s,n,Math.min(t.get(s,n),e.get(s,n)));return i}static max(t,e){t=this.checkMatrix(t),e=this.checkMatrix(e);let n=t.rows,r=t.columns,i=new this(n,r);for(let s=0;s<n;s++)for(let n=0;n<r;n++)i.set(s,n,Math.max(t.get(s,n),e.get(s,n)));return i}static checkMatrix(t){return Nt.isMatrix(t)?t:new Rt(t)}static isMatrix(t){return null!=t&&"Matrix"===t.klass}get size(){return this.rows*this.columns}apply(t){if("function"!=typeof t)throw new TypeError("callback must be a function");for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)t.call(this,e,n);return this}to1DArray(){let t=[];for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)t.push(this.get(e,n));return t}to2DArray(){let t=[];for(let e=0;e<this.rows;e++){t.push([]);for(let n=0;n<this.columns;n++)t[e].push(this.get(e,n))}return t}toJSON(){return this.to2DArray()}isRowVector(){return 1===this.rows}isColumnVector(){return 1===this.columns}isVector(){return 1===this.rows||1===this.columns}isSquare(){return this.rows===this.columns}isEmpty(){return 0===this.rows||0===this.columns}isSymmetric(){if(this.isSquare()){for(let t=0;t<this.rows;t++)for(let e=0;e<=t;e++)if(this.get(t,e)!==this.get(e,t))return!1;return!0}return!1}isEchelonForm(){let t=0,e=0,n=-1,r=!0,i=!1;for(;t<this.rows&&r;){for(e=0,i=!1;e<this.columns&&!1===i;)0===this.get(t,e)?e++:1===this.get(t,e)&&e>n?(i=!0,n=e):(r=!1,i=!0);t++}return r}isReducedEchelonForm(){let t=0,e=0,n=-1,r=!0,i=!1;for(;t<this.rows&&r;){for(e=0,i=!1;e<this.columns&&!1===i;)0===this.get(t,e)?e++:1===this.get(t,e)&&e>n?(i=!0,n=e):(r=!1,i=!0);for(let n=e+1;n<this.rows;n++)0!==this.get(t,n)&&(r=!1);t++}return r}echelonForm(){let t=this.clone(),e=0,n=0;for(;e<t.rows&&n<t.columns;){let r=e;for(let i=e;i<t.rows;i++)t.get(i,n)>t.get(r,n)&&(r=i);if(0===t.get(r,n))n++;else{t.swapRows(e,r);let i=t.get(e,n);for(let r=n;r<t.columns;r++)t.set(e,r,t.get(e,r)/i);for(let r=e+1;r<t.rows;r++){let i=t.get(r,n)/t.get(e,n);t.set(r,n,0);for(let s=n+1;s<t.columns;s++)t.set(r,s,t.get(r,s)-t.get(e,s)*i)}e++,n++}}return t}reducedEchelonForm(){let t=this.echelonForm(),e=t.columns,n=t.rows,r=n-1;for(;r>=0;)if(0===t.maxRow(r))r--;else{let i=0,s=!1;for(;i<n&&!1===s;)1===t.get(r,i)?s=!0:i++;for(let n=0;n<r;n++){let s=t.get(n,i);for(let o=i;o<e;o++){let e=t.get(n,o)-s*t.get(r,o);t.set(n,o,e)}}r--}return t}set(){throw new Error("set method is unimplemented")}get(){throw new Error("get method is unimplemented")}repeat(t={}){if("object"!=typeof t)throw new TypeError("options must be an object");const{rows:e=1,columns:n=1}=t;if(!Number.isInteger(e)||e<=0)throw new TypeError("rows must be a positive integer");if(!Number.isInteger(n)||n<=0)throw new TypeError("columns must be a positive integer");let r=new Rt(this.rows*e,this.columns*n);for(let t=0;t<e;t++)for(let e=0;e<n;e++)r.setSubMatrix(this,this.rows*t,this.columns*e);return r}fill(t){for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)this.set(e,n,t);return this}neg(){return this.mulS(-1)}getRow(t){bt(this,t);let e=[];for(let n=0;n<this.columns;n++)e.push(this.get(t,n));return e}getRowVector(t){return Rt.rowVector(this.getRow(t))}setRow(t,e){bt(this,t),e=xt(this,e);for(let n=0;n<this.columns;n++)this.set(t,n,e[n]);return this}swapRows(t,e){bt(this,t),bt(this,e);for(let n=0;n<this.columns;n++){let r=this.get(t,n);this.set(t,n,this.get(e,n)),this.set(e,n,r)}return this}getColumn(t){Mt(this,t);let e=[];for(let n=0;n<this.rows;n++)e.push(this.get(n,t));return e}getColumnVector(t){return Rt.columnVector(this.getColumn(t))}setColumn(t,e){Mt(this,t),e=vt(this,e);for(let n=0;n<this.rows;n++)this.set(n,t,e[n]);return this}swapColumns(t,e){Mt(this,t),Mt(this,e);for(let n=0;n<this.rows;n++){let r=this.get(n,t);this.set(n,t,this.get(n,e)),this.set(n,e,r)}return this}addRowVector(t){t=xt(this,t);for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)this.set(e,n,this.get(e,n)+t[n]);return this}subRowVector(t){t=xt(this,t);for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)this.set(e,n,this.get(e,n)-t[n]);return this}mulRowVector(t){t=xt(this,t);for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)this.set(e,n,this.get(e,n)*t[n]);return this}divRowVector(t){t=xt(this,t);for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)this.set(e,n,this.get(e,n)/t[n]);return this}addColumnVector(t){t=vt(this,t);for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)this.set(e,n,this.get(e,n)+t[e]);return this}subColumnVector(t){t=vt(this,t);for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)this.set(e,n,this.get(e,n)-t[e]);return this}mulColumnVector(t){t=vt(this,t);for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)this.set(e,n,this.get(e,n)*t[e]);return this}divColumnVector(t){t=vt(this,t);for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)this.set(e,n,this.get(e,n)/t[e]);return this}mulRow(t,e){bt(this,t);for(let n=0;n<this.columns;n++)this.set(t,n,this.get(t,n)*e);return this}mulColumn(t,e){Mt(this,t);for(let n=0;n<this.rows;n++)this.set(n,t,this.get(n,t)*e);return this}max(t){if(this.isEmpty())return NaN;switch(t){case"row":{const t=new Array(this.rows).fill(Number.NEGATIVE_INFINITY);for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)this.get(e,n)>t[e]&&(t[e]=this.get(e,n));return t}case"column":{const t=new Array(this.columns).fill(Number.NEGATIVE_INFINITY);for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)this.get(e,n)>t[n]&&(t[n]=this.get(e,n));return t}case void 0:{let t=this.get(0,0);for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)this.get(e,n)>t&&(t=this.get(e,n));return t}default:throw new Error(`invalid option: ${t}`)}}maxIndex(){It(this);let t=this.get(0,0),e=[0,0];for(let n=0;n<this.rows;n++)for(let r=0;r<this.columns;r++)this.get(n,r)>t&&(t=this.get(n,r),e[0]=n,e[1]=r);return e}min(t){if(this.isEmpty())return NaN;switch(t){case"row":{const t=new Array(this.rows).fill(Number.POSITIVE_INFINITY);for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)this.get(e,n)<t[e]&&(t[e]=this.get(e,n));return t}case"column":{const t=new Array(this.columns).fill(Number.POSITIVE_INFINITY);for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)this.get(e,n)<t[n]&&(t[n]=this.get(e,n));return t}case void 0:{let t=this.get(0,0);for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)this.get(e,n)<t&&(t=this.get(e,n));return t}default:throw new Error(`invalid option: ${t}`)}}minIndex(){It(this);let t=this.get(0,0),e=[0,0];for(let n=0;n<this.rows;n++)for(let r=0;r<this.columns;r++)this.get(n,r)<t&&(t=this.get(n,r),e[0]=n,e[1]=r);return e}maxRow(t){if(bt(this,t),this.isEmpty())return NaN;let e=this.get(t,0);for(let n=1;n<this.columns;n++)this.get(t,n)>e&&(e=this.get(t,n));return e}maxRowIndex(t){bt(this,t),It(this);let e=this.get(t,0),n=[t,0];for(let r=1;r<this.columns;r++)this.get(t,r)>e&&(e=this.get(t,r),n[1]=r);return n}minRow(t){if(bt(this,t),this.isEmpty())return NaN;let e=this.get(t,0);for(let n=1;n<this.columns;n++)this.get(t,n)<e&&(e=this.get(t,n));return e}minRowIndex(t){bt(this,t),It(this);let e=this.get(t,0),n=[t,0];for(let r=1;r<this.columns;r++)this.get(t,r)<e&&(e=this.get(t,r),n[1]=r);return n}maxColumn(t){if(Mt(this,t),this.isEmpty())return NaN;let e=this.get(0,t);for(let n=1;n<this.rows;n++)this.get(n,t)>e&&(e=this.get(n,t));return e}maxColumnIndex(t){Mt(this,t),It(this);let e=this.get(0,t),n=[0,t];for(let r=1;r<this.rows;r++)this.get(r,t)>e&&(e=this.get(r,t),n[0]=r);return n}minColumn(t){if(Mt(this,t),this.isEmpty())return NaN;let e=this.get(0,t);for(let n=1;n<this.rows;n++)this.get(n,t)<e&&(e=this.get(n,t));return e}minColumnIndex(t){Mt(this,t),It(this);let e=this.get(0,t),n=[0,t];for(let r=1;r<this.rows;r++)this.get(r,t)<e&&(e=this.get(r,t),n[0]=r);return n}diag(){let t=Math.min(this.rows,this.columns),e=[];for(let n=0;n<t;n++)e.push(this.get(n,n));return e}norm(t="frobenius"){let e=0;if("max"===t)return this.max();if("frobenius"===t){for(let t=0;t<this.rows;t++)for(let n=0;n<this.columns;n++)e+=this.get(t,n)*this.get(t,n);return Math.sqrt(e)}throw new RangeError(`unknown norm type: ${t}`)}cumulativeSum(){let t=0;for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)t+=this.get(e,n),this.set(e,n,t);return this}dot(t){Nt.isMatrix(t)&&(t=t.to1DArray());let e=this.to1DArray();if(e.length!==t.length)throw new RangeError("vectors do not have the same size");let n=0;for(let r=0;r<e.length;r++)n+=e[r]*t[r];return n}mmul(t){t=Rt.checkMatrix(t);let e=this.rows,n=this.columns,r=t.columns,i=new Rt(e,r),s=new Float64Array(n);for(let o=0;o<r;o++){for(let e=0;e<n;e++)s[e]=t.get(e,o);for(let t=0;t<e;t++){let e=0;for(let r=0;r<n;r++)e+=this.get(t,r)*s[r];i.set(t,o,e)}}return i}strassen2x2(t){t=Rt.checkMatrix(t);let e=new Rt(2,2);const n=this.get(0,0),r=t.get(0,0),i=this.get(0,1),s=t.get(0,1),o=this.get(1,0),a=t.get(1,0),h=this.get(1,1),u=t.get(1,1),l=(n+h)*(r+u),c=(o+h)*r,f=n*(s-u),m=h*(a-r),g=(n+i)*u,p=l+m-g+(i-h)*(a+u),d=f+g,w=c+m,y=l-c+f+(o-n)*(r+s);return e.set(0,0,p),e.set(0,1,d),e.set(1,0,w),e.set(1,1,y),e}strassen3x3(t){t=Rt.checkMatrix(t);let e=new Rt(3,3);const n=this.get(0,0),r=this.get(0,1),i=this.get(0,2),s=this.get(1,0),o=this.get(1,1),a=this.get(1,2),h=this.get(2,0),u=this.get(2,1),l=this.get(2,2),c=t.get(0,0),f=t.get(0,1),m=t.get(0,2),g=t.get(1,0),p=t.get(1,1),d=t.get(1,2),w=t.get(2,0),y=t.get(2,1),b=t.get(2,2),M=(n-s)*(-f+p),x=(-n+s+o)*(c-f+p),v=(s+o)*(-c+f),E=n*c,A=(-n+h+u)*(c-m+d),S=(-n+h)*(m-d),I=(h+u)*(-c+m),N=(-i+u+l)*(p+w-y),k=(i-l)*(p-y),R=i*w,C=(u+l)*(-w+y),T=(-i+o+a)*(d+w-b),z=(i-a)*(d-b),L=(o+a)*(-w+b),D=E+R+r*g,O=(n+r+i-s-o-u-l)*p+x+v+E+N+R+C,P=E+A+I+(n+r+i-o-a-h-u)*d+R+T+L,_=M+o*(-c+f+g-p-d-w+b)+x+E+R+T+z,F=M+x+v+E+a*y,B=R+T+z+L+s*m,U=E+A+S+u*(-c+m+g-p-d-w+y)+N+k+R,$=N+k+R+C+h*f,j=E+A+S+I+l*b;return e.set(0,0,D),e.set(0,1,O),e.set(0,2,P),e.set(1,0,_),e.set(1,1,F),e.set(1,2,B),e.set(2,0,U),e.set(2,1,$),e.set(2,2,j),e}mmulStrassen(t){t=Rt.checkMatrix(t);let e=this.clone(),n=e.rows,r=e.columns,i=t.rows,s=t.columns;function o(t,e,n){let r=t.rows,i=t.columns;if(r===e&&i===n)return t;{let r=Nt.zeros(e,n);return r=r.setSubMatrix(t,0,0),r}}r!==i&&console.warn(`Multiplying ${n} x ${r} and ${i} x ${s} matrix: dimensions do not match.`);let a=Math.max(n,i),h=Math.max(r,s);return e=o(e,a,h),function t(e,n,r,i){if(r<=512||i<=512)return e.mmul(n);r%2==1&&i%2==1?(e=o(e,r+1,i+1),n=o(n,r+1,i+1)):r%2==1?(e=o(e,r+1,i),n=o(n,r+1,i)):i%2==1&&(e=o(e,r,i+1),n=o(n,r,i+1));let s=parseInt(e.rows/2,10),a=parseInt(e.columns/2,10),h=e.subMatrix(0,s-1,0,a-1),u=n.subMatrix(0,s-1,0,a-1),l=e.subMatrix(0,s-1,a,e.columns-1),c=n.subMatrix(0,s-1,a,n.columns-1),f=e.subMatrix(s,e.rows-1,0,a-1),m=n.subMatrix(s,n.rows-1,0,a-1),g=e.subMatrix(s,e.rows-1,a,e.columns-1),p=n.subMatrix(s,n.rows-1,a,n.columns-1),d=t(Nt.add(h,g),Nt.add(u,p),s,a),w=t(Nt.add(f,g),u,s,a),y=t(h,Nt.sub(c,p),s,a),b=t(g,Nt.sub(m,u),s,a),M=t(Nt.add(h,l),p,s,a),x=t(Nt.sub(f,h),Nt.add(u,c),s,a),v=t(Nt.sub(l,g),Nt.add(m,p),s,a),E=Nt.add(d,b);E.sub(M),E.add(v);let A=Nt.add(y,M),S=Nt.add(w,b),I=Nt.sub(d,w);I.add(y),I.add(x);let N=Nt.zeros(2*E.rows,2*E.columns);return N=N.setSubMatrix(E,0,0),N=N.setSubMatrix(A,E.rows,0),N=N.setSubMatrix(S,0,E.columns),N=N.setSubMatrix(I,E.rows,E.columns),N.subMatrix(0,r-1,0,i-1)}(e,t=o(t,a,h),a,h)}scaleRows(t={}){if("object"!=typeof t)throw new TypeError("options must be an object");const{min:e=0,max:n=1}=t;if(!Number.isFinite(e))throw new TypeError("min must be a number");if(!Number.isFinite(n))throw new TypeError("max must be a number");if(e>=n)throw new RangeError("min must be smaller than max");let r=new Rt(this.rows,this.columns);for(let t=0;t<this.rows;t++){const i=this.getRow(t);i.length>0&&mt(i,{min:e,max:n,output:i}),r.setRow(t,i)}return r}scaleColumns(t={}){if("object"!=typeof t)throw new TypeError("options must be an object");const{min:e=0,max:n=1}=t;if(!Number.isFinite(e))throw new TypeError("min must be a number");if(!Number.isFinite(n))throw new TypeError("max must be a number");if(e>=n)throw new RangeError("min must be smaller than max");let r=new Rt(this.rows,this.columns);for(let t=0;t<this.columns;t++){const i=this.getColumn(t);i.length&&mt(i,{min:e,max:n,output:i}),r.setColumn(t,i)}return r}flipRows(){const t=Math.ceil(this.columns/2);for(let e=0;e<this.rows;e++)for(let n=0;n<t;n++){let t=this.get(e,n),r=this.get(e,this.columns-1-n);this.set(e,n,r),this.set(e,this.columns-1-n,t)}return this}flipColumns(){const t=Math.ceil(this.rows/2);for(let e=0;e<this.columns;e++)for(let n=0;n<t;n++){let t=this.get(n,e),r=this.get(this.rows-1-n,e);this.set(n,e,r),this.set(this.rows-1-n,e,t)}return this}kroneckerProduct(t){t=Rt.checkMatrix(t);let e=this.rows,n=this.columns,r=t.rows,i=t.columns,s=new Rt(e*r,n*i);for(let o=0;o<e;o++)for(let e=0;e<n;e++)for(let n=0;n<r;n++)for(let a=0;a<i;a++)s.set(r*o+n,i*e+a,this.get(o,e)*t.get(n,a));return s}kroneckerSum(t){if(t=Rt.checkMatrix(t),!this.isSquare()||!t.isSquare())throw new Error("Kronecker Sum needs two Square Matrices");let e=this.rows,n=t.rows,r=this.kroneckerProduct(Rt.eye(n,n)),i=Rt.eye(e,e).kroneckerProduct(t);return r.add(i)}transpose(){let t=new Rt(this.columns,this.rows);for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)t.set(n,e,this.get(e,n));return t}sortRows(t=kt){for(let e=0;e<this.rows;e++)this.setRow(e,this.getRow(e).sort(t));return this}sortColumns(t=kt){for(let e=0;e<this.columns;e++)this.setColumn(e,this.getColumn(e).sort(t));return this}subMatrix(t,e,n,r){Et(this,t,e,n,r);let i=new Rt(e-t+1,r-n+1);for(let s=t;s<=e;s++)for(let e=n;e<=r;e++)i.set(s-t,e-n,this.get(s,e));return i}subMatrixRow(t,e,n){if(void 0===e&&(e=0),void 0===n&&(n=this.columns-1),e>n||e<0||e>=this.columns||n<0||n>=this.columns)throw new RangeError("Argument out of range");let r=new Rt(t.length,n-e+1);for(let i=0;i<t.length;i++)for(let s=e;s<=n;s++){if(t[i]<0||t[i]>=this.rows)throw new RangeError(`Row index out of range: ${t[i]}`);r.set(i,s-e,this.get(t[i],s))}return r}subMatrixColumn(t,e,n){if(void 0===e&&(e=0),void 0===n&&(n=this.rows-1),e>n||e<0||e>=this.rows||n<0||n>=this.rows)throw new RangeError("Argument out of range");let r=new Rt(n-e+1,t.length);for(let i=0;i<t.length;i++)for(let s=e;s<=n;s++){if(t[i]<0||t[i]>=this.columns)throw new RangeError(`Column index out of range: ${t[i]}`);r.set(s-e,i,this.get(s,t[i]))}return r}setSubMatrix(t,e,n){if((t=Rt.checkMatrix(t)).isEmpty())return this;Et(this,e,e+t.rows-1,n,n+t.columns-1);for(let r=0;r<t.rows;r++)for(let i=0;i<t.columns;i++)this.set(e+r,n+i,t.get(r,i));return this}selection(t,e){!function(t,e){if(!ht(e))throw new TypeError("row indices must be an array");for(let n=0;n<e.length;n++)if(e[n]<0||e[n]>=t.rows)throw new RangeError("row indices are out of range")}(this,t),function(t,e){if(!ht(e))throw new TypeError("column indices must be an array");for(let n=0;n<e.length;n++)if(e[n]<0||e[n]>=t.columns)throw new RangeError("column indices are out of range")}(this,e);let n=new Rt(t.length,e.length);for(let r=0;r<t.length;r++){let i=t[r];for(let t=0;t<e.length;t++){let s=e[t];n.set(r,t,this.get(i,s))}}return n}trace(){let t=Math.min(this.rows,this.columns),e=0;for(let n=0;n<t;n++)e+=this.get(n,n);return e}clone(){let t=new Rt(this.rows,this.columns);for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)t.set(e,n,this.get(e,n));return t}sum(t){switch(t){case"row":return function(t){let e=At(t.rows);for(let n=0;n<t.rows;++n)for(let r=0;r<t.columns;++r)e[n]+=t.get(n,r);return e}(this);case"column":return function(t){let e=At(t.columns);for(let n=0;n<t.rows;++n)for(let r=0;r<t.columns;++r)e[r]+=t.get(n,r);return e}(this);case void 0:return function(t){let e=0;for(let n=0;n<t.rows;n++)for(let r=0;r<t.columns;r++)e+=t.get(n,r);return e}(this);default:throw new Error(`invalid option: ${t}`)}}product(t){switch(t){case"row":return function(t){let e=At(t.rows,1);for(let n=0;n<t.rows;++n)for(let r=0;r<t.columns;++r)e[n]*=t.get(n,r);return e}(this);case"column":return function(t){let e=At(t.columns,1);for(let n=0;n<t.rows;++n)for(let r=0;r<t.columns;++r)e[r]*=t.get(n,r);return e}(this);case void 0:return function(t){let e=1;for(let n=0;n<t.rows;n++)for(let r=0;r<t.columns;r++)e*=t.get(n,r);return e}(this);default:throw new Error(`invalid option: ${t}`)}}mean(t){const e=this.sum(t);switch(t){case"row":for(let t=0;t<this.rows;t++)e[t]/=this.columns;return e;case"column":for(let t=0;t<this.columns;t++)e[t]/=this.rows;return e;case void 0:return e/this.size;default:throw new Error(`invalid option: ${t}`)}}variance(t,e={}){if("object"==typeof t&&(e=t,t=void 0),"object"!=typeof e)throw new TypeError("options must be an object");const{unbiased:n=!0,mean:r=this.mean(t)}=e;if("boolean"!=typeof n)throw new TypeError("unbiased must be a boolean");switch(t){case"row":if(!ht(r))throw new TypeError("mean must be an array");return function(t,e,n){const r=t.rows,i=t.columns,s=[];for(let o=0;o<r;o++){let r=0,a=0,h=0;for(let e=0;e<i;e++)h=t.get(o,e)-n[o],r+=h,a+=h*h;e?s.push((a-r*r/i)/(i-1)):s.push((a-r*r/i)/i)}return s}(this,n,r);case"column":if(!ht(r))throw new TypeError("mean must be an array");return function(t,e,n){const r=t.rows,i=t.columns,s=[];for(let o=0;o<i;o++){let i=0,a=0,h=0;for(let e=0;e<r;e++)h=t.get(e,o)-n[o],i+=h,a+=h*h;e?s.push((a-i*i/r)/(r-1)):s.push((a-i*i/r)/r)}return s}(this,n,r);case void 0:if("number"!=typeof r)throw new TypeError("mean must be a number");return function(t,e,n){const r=t.rows,i=t.columns,s=r*i;let o=0,a=0,h=0;for(let e=0;e<r;e++)for(let r=0;r<i;r++)h=t.get(e,r)-n,o+=h,a+=h*h;return e?(a-o*o/s)/(s-1):(a-o*o/s)/s}(this,n,r);default:throw new Error(`invalid option: ${t}`)}}standardDeviation(t,e){"object"==typeof t&&(e=t,t=void 0);const n=this.variance(t,e);if(void 0===t)return Math.sqrt(n);for(let t=0;t<n.length;t++)n[t]=Math.sqrt(n[t]);return n}center(t,e={}){if("object"==typeof t&&(e=t,t=void 0),"object"!=typeof e)throw new TypeError("options must be an object");const{center:n=this.mean(t)}=e;switch(t){case"row":if(!ht(n))throw new TypeError("center must be an array");return function(t,e){for(let n=0;n<t.rows;n++)for(let r=0;r<t.columns;r++)t.set(n,r,t.get(n,r)-e[n])}(this,n),this;case"column":if(!ht(n))throw new TypeError("center must be an array");return function(t,e){for(let n=0;n<t.rows;n++)for(let r=0;r<t.columns;r++)t.set(n,r,t.get(n,r)-e[r])}(this,n),this;case void 0:if("number"!=typeof n)throw new TypeError("center must be a number");return function(t,e){for(let n=0;n<t.rows;n++)for(let r=0;r<t.columns;r++)t.set(n,r,t.get(n,r)-e)}(this,n),this;default:throw new Error(`invalid option: ${t}`)}}scale(t,e={}){if("object"==typeof t&&(e=t,t=void 0),"object"!=typeof e)throw new TypeError("options must be an object");let n=e.scale;switch(t){case"row":if(void 0===n)n=function(t){const e=[];for(let n=0;n<t.rows;n++){let r=0;for(let e=0;e<t.columns;e++)r+=Math.pow(t.get(n,e),2)/(t.columns-1);e.push(Math.sqrt(r))}return e}(this);else if(!ht(n))throw new TypeError("scale must be an array");return function(t,e){for(let n=0;n<t.rows;n++)for(let r=0;r<t.columns;r++)t.set(n,r,t.get(n,r)/e[n])}(this,n),this;case"column":if(void 0===n)n=function(t){const e=[];for(let n=0;n<t.columns;n++){let r=0;for(let e=0;e<t.rows;e++)r+=Math.pow(t.get(e,n),2)/(t.rows-1);e.push(Math.sqrt(r))}return e}(this);else if(!ht(n))throw new TypeError("scale must be an array");return function(t,e){for(let n=0;n<t.rows;n++)for(let r=0;r<t.columns;r++)t.set(n,r,t.get(n,r)/e[r])}(this,n),this;case void 0:if(void 0===n)n=function(t){const e=t.size-1;let n=0;for(let r=0;r<t.columns;r++)for(let i=0;i<t.rows;i++)n+=Math.pow(t.get(i,r),2)/e;return Math.sqrt(n)}(this);else if("number"!=typeof n)throw new TypeError("scale must be a number");return function(t,e){for(let n=0;n<t.rows;n++)for(let r=0;r<t.columns;r++)t.set(n,r,t.get(n,r)/e)}(this,n),this;default:throw new Error(`invalid option: ${t}`)}}toString(t){return dt(this,t)}}function kt(t,e){return t-e}Nt.prototype.klass="Matrix","undefined"!=typeof Symbol&&(Nt.prototype[Symbol.for("nodejs.util.inspect.custom")]=function(){return dt(this)}),Nt.random=Nt.rand,Nt.randomInt=Nt.randInt,Nt.diagonal=Nt.diag,Nt.prototype.diagonal=Nt.prototype.diag,Nt.identity=Nt.eye,Nt.prototype.negate=Nt.prototype.neg,Nt.prototype.tensorProduct=Nt.prototype.kroneckerProduct;class Rt extends Nt{constructor(t,e){if(super(),Rt.isMatrix(t))return t.clone();if(Number.isInteger(t)&&t>=0){if(this.data=[],!(Number.isInteger(e)&&e>=0))throw new TypeError("nColumns must be a positive integer");for(let n=0;n<t;n++)this.data.push(new Float64Array(e))}else{if(!ht(t))throw new TypeError("First argument must be a positive number or an array");{const n=t;if("number"!=typeof(e=(t=n.length)?n[0].length:0))throw new TypeError("Data must be a 2D array with at least one element");this.data=[];for(let r=0;r<t;r++){if(n[r].length!==e)throw new RangeError("Inconsistent array dimensions");if(!n[r].every((t=>"number"==typeof t)))throw new TypeError("Input data contains non-numeric values");this.data.push(Float64Array.from(n[r]))}}}this.rows=t,this.columns=e}set(t,e,n){return this.data[t][e]=n,this}get(t,e){return this.data[t][e]}removeRow(t){return bt(this,t),this.data.splice(t,1),this.rows-=1,this}addRow(t,e){return void 0===e&&(e=t,t=this.rows),bt(this,t,!0),e=Float64Array.from(xt(this,e)),this.data.splice(t,0,e),this.rows+=1,this}removeColumn(t){Mt(this,t);for(let e=0;e<this.rows;e++){const n=new Float64Array(this.columns-1);for(let r=0;r<t;r++)n[r]=this.data[e][r];for(let r=t+1;r<this.columns;r++)n[r-1]=this.data[e][r];this.data[e]=n}return this.columns-=1,this}addColumn(t,e){void 0===e&&(e=t,t=this.columns),Mt(this,t,!0),e=vt(this,e);for(let n=0;n<this.rows;n++){const r=new Float64Array(this.columns+1);let i=0;for(;i<t;i++)r[i]=this.data[n][i];for(r[i++]=e[n];i<this.columns+1;i++)r[i]=this.data[n][i-1];this.data[n]=r}return this.columns+=1,this}}!function(t,e){t.prototype.add=function(t){return"number"==typeof t?this.addS(t):this.addM(t)},t.prototype.addS=function(t){for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)this.set(e,n,this.get(e,n)+t);return this},t.prototype.addM=function(t){if(t=e.checkMatrix(t),this.rows!==t.rows||this.columns!==t.columns)throw new RangeError("Matrices dimensions must be equal");for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)this.set(e,n,this.get(e,n)+t.get(e,n));return this},t.add=function(t,n){return new e(t).add(n)},t.prototype.sub=function(t){return"number"==typeof t?this.subS(t):this.subM(t)},t.prototype.subS=function(t){for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)this.set(e,n,this.get(e,n)-t);return this},t.prototype.subM=function(t){if(t=e.checkMatrix(t),this.rows!==t.rows||this.columns!==t.columns)throw new RangeError("Matrices dimensions must be equal");for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)this.set(e,n,this.get(e,n)-t.get(e,n));return this},t.sub=function(t,n){return new e(t).sub(n)},t.prototype.subtract=t.prototype.sub,t.prototype.subtractS=t.prototype.subS,t.prototype.subtractM=t.prototype.subM,t.subtract=t.sub,t.prototype.mul=function(t){return"number"==typeof t?this.mulS(t):this.mulM(t)},t.prototype.mulS=function(t){for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)this.set(e,n,this.get(e,n)*t);return this},t.prototype.mulM=function(t){if(t=e.checkMatrix(t),this.rows!==t.rows||this.columns!==t.columns)throw new RangeError("Matrices dimensions must be equal");for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)this.set(e,n,this.get(e,n)*t.get(e,n));return this},t.mul=function(t,n){return new e(t).mul(n)},t.prototype.multiply=t.prototype.mul,t.prototype.multiplyS=t.prototype.mulS,t.prototype.multiplyM=t.prototype.mulM,t.multiply=t.mul,t.prototype.div=function(t){return"number"==typeof t?this.divS(t):this.divM(t)},t.prototype.divS=function(t){for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)this.set(e,n,this.get(e,n)/t);return this},t.prototype.divM=function(t){if(t=e.checkMatrix(t),this.rows!==t.rows||this.columns!==t.columns)throw new RangeError("Matrices dimensions must be equal");for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)this.set(e,n,this.get(e,n)/t.get(e,n));return this},t.div=function(t,n){return new e(t).div(n)},t.prototype.divide=t.prototype.div,t.prototype.divideS=t.prototype.divS,t.prototype.divideM=t.prototype.divM,t.divide=t.div,t.prototype.mod=function(t){return"number"==typeof t?this.modS(t):this.modM(t)},t.prototype.modS=function(t){for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)this.set(e,n,this.get(e,n)%t);return this},t.prototype.modM=function(t){if(t=e.checkMatrix(t),this.rows!==t.rows||this.columns!==t.columns)throw new RangeError("Matrices dimensions must be equal");for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)this.set(e,n,this.get(e,n)%t.get(e,n));return this},t.mod=function(t,n){return new e(t).mod(n)},t.prototype.modulus=t.prototype.mod,t.prototype.modulusS=t.prototype.modS,t.prototype.modulusM=t.prototype.modM,t.modulus=t.mod,t.prototype.and=function(t){return"number"==typeof t?this.andS(t):this.andM(t)},t.prototype.andS=function(t){for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)this.set(e,n,this.get(e,n)&t);return this},t.prototype.andM=function(t){if(t=e.checkMatrix(t),this.rows!==t.rows||this.columns!==t.columns)throw new RangeError("Matrices dimensions must be equal");for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)this.set(e,n,this.get(e,n)&t.get(e,n));return this},t.and=function(t,n){return new e(t).and(n)},t.prototype.or=function(t){return"number"==typeof t?this.orS(t):this.orM(t)},t.prototype.orS=function(t){for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)this.set(e,n,this.get(e,n)|t);return this},t.prototype.orM=function(t){if(t=e.checkMatrix(t),this.rows!==t.rows||this.columns!==t.columns)throw new RangeError("Matrices dimensions must be equal");for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)this.set(e,n,this.get(e,n)|t.get(e,n));return this},t.or=function(t,n){return new e(t).or(n)},t.prototype.xor=function(t){return"number"==typeof t?this.xorS(t):this.xorM(t)},t.prototype.xorS=function(t){for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)this.set(e,n,this.get(e,n)^t);return this},t.prototype.xorM=function(t){if(t=e.checkMatrix(t),this.rows!==t.rows||this.columns!==t.columns)throw new RangeError("Matrices dimensions must be equal");for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)this.set(e,n,this.get(e,n)^t.get(e,n));return this},t.xor=function(t,n){return new e(t).xor(n)},t.prototype.leftShift=function(t){return"number"==typeof t?this.leftShiftS(t):this.leftShiftM(t)},t.prototype.leftShiftS=function(t){for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)this.set(e,n,this.get(e,n)<<t);return this},t.prototype.leftShiftM=function(t){if(t=e.checkMatrix(t),this.rows!==t.rows||this.columns!==t.columns)throw new RangeError("Matrices dimensions must be equal");for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)this.set(e,n,this.get(e,n)<<t.get(e,n));return this},t.leftShift=function(t,n){return new e(t).leftShift(n)},t.prototype.signPropagatingRightShift=function(t){return"number"==typeof t?this.signPropagatingRightShiftS(t):this.signPropagatingRightShiftM(t)},t.prototype.signPropagatingRightShiftS=function(t){for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)this.set(e,n,this.get(e,n)>>t);return this},t.prototype.signPropagatingRightShiftM=function(t){if(t=e.checkMatrix(t),this.rows!==t.rows||this.columns!==t.columns)throw new RangeError("Matrices dimensions must be equal");for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)this.set(e,n,this.get(e,n)>>t.get(e,n));return this},t.signPropagatingRightShift=function(t,n){return new e(t).signPropagatingRightShift(n)},t.prototype.rightShift=function(t){return"number"==typeof t?this.rightShiftS(t):this.rightShiftM(t)},t.prototype.rightShiftS=function(t){for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)this.set(e,n,this.get(e,n)>>>t);return this},t.prototype.rightShiftM=function(t){if(t=e.checkMatrix(t),this.rows!==t.rows||this.columns!==t.columns)throw new RangeError("Matrices dimensions must be equal");for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)this.set(e,n,this.get(e,n)>>>t.get(e,n));return this},t.rightShift=function(t,n){return new e(t).rightShift(n)},t.prototype.zeroFillRightShift=t.prototype.rightShift,t.prototype.zeroFillRightShiftS=t.prototype.rightShiftS,t.prototype.zeroFillRightShiftM=t.prototype.rightShiftM,t.zeroFillRightShift=t.rightShift,t.prototype.not=function(){for(let t=0;t<this.rows;t++)for(let e=0;e<this.columns;e++)this.set(t,e,~this.get(t,e));return this},t.not=function(t){return new e(t).not()},t.prototype.abs=function(){for(let t=0;t<this.rows;t++)for(let e=0;e<this.columns;e++)this.set(t,e,Math.abs(this.get(t,e)));return this},t.abs=function(t){return new e(t).abs()},t.prototype.acos=function(){for(let t=0;t<this.rows;t++)for(let e=0;e<this.columns;e++)this.set(t,e,Math.acos(this.get(t,e)));return this},t.acos=function(t){return new e(t).acos()},t.prototype.acosh=function(){for(let t=0;t<this.rows;t++)for(let e=0;e<this.columns;e++)this.set(t,e,Math.acosh(this.get(t,e)));return this},t.acosh=function(t){return new e(t).acosh()},t.prototype.asin=function(){for(let t=0;t<this.rows;t++)for(let e=0;e<this.columns;e++)this.set(t,e,Math.asin(this.get(t,e)));return this},t.asin=function(t){return new e(t).asin()},t.prototype.asinh=function(){for(let t=0;t<this.rows;t++)for(let e=0;e<this.columns;e++)this.set(t,e,Math.asinh(this.get(t,e)));return this},t.asinh=function(t){return new e(t).asinh()},t.prototype.atan=function(){for(let t=0;t<this.rows;t++)for(let e=0;e<this.columns;e++)this.set(t,e,Math.atan(this.get(t,e)));return this},t.atan=function(t){return new e(t).atan()},t.prototype.atanh=function(){for(let t=0;t<this.rows;t++)for(let e=0;e<this.columns;e++)this.set(t,e,Math.atanh(this.get(t,e)));return this},t.atanh=function(t){return new e(t).atanh()},t.prototype.cbrt=function(){for(let t=0;t<this.rows;t++)for(let e=0;e<this.columns;e++)this.set(t,e,Math.cbrt(this.get(t,e)));return this},t.cbrt=function(t){return new e(t).cbrt()},t.prototype.ceil=function(){for(let t=0;t<this.rows;t++)for(let e=0;e<this.columns;e++)this.set(t,e,Math.ceil(this.get(t,e)));return this},t.ceil=function(t){return new e(t).ceil()},t.prototype.clz32=function(){for(let t=0;t<this.rows;t++)for(let e=0;e<this.columns;e++)this.set(t,e,Math.clz32(this.get(t,e)));return this},t.clz32=function(t){return new e(t).clz32()},t.prototype.cos=function(){for(let t=0;t<this.rows;t++)for(let e=0;e<this.columns;e++)this.set(t,e,Math.cos(this.get(t,e)));return this},t.cos=function(t){return new e(t).cos()},t.prototype.cosh=function(){for(let t=0;t<this.rows;t++)for(let e=0;e<this.columns;e++)this.set(t,e,Math.cosh(this.get(t,e)));return this},t.cosh=function(t){return new e(t).cosh()},t.prototype.exp=function(){for(let t=0;t<this.rows;t++)for(let e=0;e<this.columns;e++)this.set(t,e,Math.exp(this.get(t,e)));return this},t.exp=function(t){return new e(t).exp()},t.prototype.expm1=function(){for(let t=0;t<this.rows;t++)for(let e=0;e<this.columns;e++)this.set(t,e,Math.expm1(this.get(t,e)));return this},t.expm1=function(t){return new e(t).expm1()},t.prototype.floor=function(){for(let t=0;t<this.rows;t++)for(let e=0;e<this.columns;e++)this.set(t,e,Math.floor(this.get(t,e)));return this},t.floor=function(t){return new e(t).floor()},t.prototype.fround=function(){for(let t=0;t<this.rows;t++)for(let e=0;e<this.columns;e++)this.set(t,e,Math.fround(this.get(t,e)));return this},t.fround=function(t){return new e(t).fround()},t.prototype.log=function(){for(let t=0;t<this.rows;t++)for(let e=0;e<this.columns;e++)this.set(t,e,Math.log(this.get(t,e)));return this},t.log=function(t){return new e(t).log()},t.prototype.log1p=function(){for(let t=0;t<this.rows;t++)for(let e=0;e<this.columns;e++)this.set(t,e,Math.log1p(this.get(t,e)));return this},t.log1p=function(t){return new e(t).log1p()},t.prototype.log10=function(){for(let t=0;t<this.rows;t++)for(let e=0;e<this.columns;e++)this.set(t,e,Math.log10(this.get(t,e)));return this},t.log10=function(t){return new e(t).log10()},t.prototype.log2=function(){for(let t=0;t<this.rows;t++)for(let e=0;e<this.columns;e++)this.set(t,e,Math.log2(this.get(t,e)));return this},t.log2=function(t){return new e(t).log2()},t.prototype.round=function(){for(let t=0;t<this.rows;t++)for(let e=0;e<this.columns;e++)this.set(t,e,Math.round(this.get(t,e)));return this},t.round=function(t){return new e(t).round()},t.prototype.sign=function(){for(let t=0;t<this.rows;t++)for(let e=0;e<this.columns;e++)this.set(t,e,Math.sign(this.get(t,e)));return this},t.sign=function(t){return new e(t).sign()},t.prototype.sin=function(){for(let t=0;t<this.rows;t++)for(let e=0;e<this.columns;e++)this.set(t,e,Math.sin(this.get(t,e)));return this},t.sin=function(t){return new e(t).sin()},t.prototype.sinh=function(){for(let t=0;t<this.rows;t++)for(let e=0;e<this.columns;e++)this.set(t,e,Math.sinh(this.get(t,e)));return this},t.sinh=function(t){return new e(t).sinh()},t.prototype.sqrt=function(){for(let t=0;t<this.rows;t++)for(let e=0;e<this.columns;e++)this.set(t,e,Math.sqrt(this.get(t,e)));return this},t.sqrt=function(t){return new e(t).sqrt()},t.prototype.tan=function(){for(let t=0;t<this.rows;t++)for(let e=0;e<this.columns;e++)this.set(t,e,Math.tan(this.get(t,e)));return this},t.tan=function(t){return new e(t).tan()},t.prototype.tanh=function(){for(let t=0;t<this.rows;t++)for(let e=0;e<this.columns;e++)this.set(t,e,Math.tanh(this.get(t,e)));return this},t.tanh=function(t){return new e(t).tanh()},t.prototype.trunc=function(){for(let t=0;t<this.rows;t++)for(let e=0;e<this.columns;e++)this.set(t,e,Math.trunc(this.get(t,e)));return this},t.trunc=function(t){return new e(t).trunc()},t.pow=function(t,n){return new e(t).pow(n)},t.prototype.pow=function(t){return"number"==typeof t?this.powS(t):this.powM(t)},t.prototype.powS=function(t){for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)this.set(e,n,Math.pow(this.get(e,n),t));return this},t.prototype.powM=function(t){if(t=e.checkMatrix(t),this.rows!==t.rows||this.columns!==t.columns)throw new RangeError("Matrices dimensions must be equal");for(let e=0;e<this.rows;e++)for(let n=0;n<this.columns;n++)this.set(e,n,Math.pow(this.get(e,n),t.get(e,n)));return this}}(Nt,Rt);class Ct extends Nt{constructor(t){super(),this.data=t,this.rows=t.length,this.columns=t[0].length}set(t,e,n){return this.data[t][e]=n,this}get(t,e){return this.data[t][e]}}class Tt{constructor(t){let e,n,r,i,s,o,a,h,u,l=(t=Ct.checkMatrix(t)).clone(),c=l.rows,f=l.columns,m=new Float64Array(c),g=1;for(e=0;e<c;e++)m[e]=e;for(h=new Float64Array(c),n=0;n<f;n++){for(e=0;e<c;e++)h[e]=l.get(e,n);for(e=0;e<c;e++){for(u=Math.min(e,n),s=0,r=0;r<u;r++)s+=l.get(e,r)*h[r];h[e]-=s,l.set(e,n,h[e])}for(i=n,e=n+1;e<c;e++)Math.abs(h[e])>Math.abs(h[i])&&(i=e);if(i!==n){for(r=0;r<f;r++)o=l.get(i,r),l.set(i,r,l.get(n,r)),l.set(n,r,o);a=m[i],m[i]=m[n],m[n]=a,g=-g}if(n<c&&0!==l.get(n,n))for(e=n+1;e<c;e++)l.set(e,n,l.get(e,n)/l.get(n,n))}this.LU=l,this.pivotVector=m,this.pivotSign=g}isSingular(){let t=this.LU,e=t.columns;for(let n=0;n<e;n++)if(0===t.get(n,n))return!0;return!1}solve(t){t=Rt.checkMatrix(t);let e=this.LU;if(e.rows!==t.rows)throw new Error("Invalid matrix dimensions");if(this.isSingular())throw new Error("LU matrix is singular");let n,r,i,s=t.columns,o=t.subMatrixRow(this.pivotVector,0,s-1),a=e.columns;for(i=0;i<a;i++)for(n=i+1;n<a;n++)for(r=0;r<s;r++)o.set(n,r,o.get(n,r)-o.get(i,r)*e.get(n,i));for(i=a-1;i>=0;i--){for(r=0;r<s;r++)o.set(i,r,o.get(i,r)/e.get(i,i));for(n=0;n<i;n++)for(r=0;r<s;r++)o.set(n,r,o.get(n,r)-o.get(i,r)*e.get(n,i))}return o}get determinant(){let t=this.LU;if(!t.isSquare())throw new Error("Matrix must be square");let e=this.pivotSign,n=t.columns;for(let r=0;r<n;r++)e*=t.get(r,r);return e}get lowerTriangularMatrix(){let t=this.LU,e=t.rows,n=t.columns,r=new Rt(e,n);for(let i=0;i<e;i++)for(let e=0;e<n;e++)i>e?r.set(i,e,t.get(i,e)):i===e?r.set(i,e,1):r.set(i,e,0);return r}get upperTriangularMatrix(){let t=this.LU,e=t.rows,n=t.columns,r=new Rt(e,n);for(let i=0;i<e;i++)for(let e=0;e<n;e++)i<=e?r.set(i,e,t.get(i,e)):r.set(i,e,0);return r}get pivotPermutationVector(){return Array.from(this.pivotVector)}}function zt(t,e){let n=0;return Math.abs(t)>Math.abs(e)?(n=e/t,Math.abs(t)*Math.sqrt(1+n*n)):0!==e?(n=t/e,Math.abs(e)*Math.sqrt(1+n*n)):0}class Lt{constructor(t){let e,n,r,i,s=(t=Ct.checkMatrix(t)).clone(),o=t.rows,a=t.columns,h=new Float64Array(a);for(r=0;r<a;r++){let t=0;for(e=r;e<o;e++)t=zt(t,s.get(e,r));if(0!==t){for(s.get(r,r)<0&&(t=-t),e=r;e<o;e++)s.set(e,r,s.get(e,r)/t);for(s.set(r,r,s.get(r,r)+1),n=r+1;n<a;n++){for(i=0,e=r;e<o;e++)i+=s.get(e,r)*s.get(e,n);for(i=-i/s.get(r,r),e=r;e<o;e++)s.set(e,n,s.get(e,n)+i*s.get(e,r))}}h[r]=-t}this.QR=s,this.Rdiag=h}solve(t){t=Rt.checkMatrix(t);let e=this.QR,n=e.rows;if(t.rows!==n)throw new Error("Matrix row dimensions must agree");if(!this.isFullRank())throw new Error("Matrix is rank deficient");let r,i,s,o,a=t.columns,h=t.clone(),u=e.columns;for(s=0;s<u;s++)for(i=0;i<a;i++){for(o=0,r=s;r<n;r++)o+=e.get(r,s)*h.get(r,i);for(o=-o/e.get(s,s),r=s;r<n;r++)h.set(r,i,h.get(r,i)+o*e.get(r,s))}for(s=u-1;s>=0;s--){for(i=0;i<a;i++)h.set(s,i,h.get(s,i)/this.Rdiag[s]);for(r=0;r<s;r++)for(i=0;i<a;i++)h.set(r,i,h.get(r,i)-h.get(s,i)*e.get(r,s))}return h.subMatrix(0,u-1,0,a-1)}isFullRank(){let t=this.QR.columns;for(let e=0;e<t;e++)if(0===this.Rdiag[e])return!1;return!0}get upperTriangularMatrix(){let t,e,n=this.QR,r=n.columns,i=new Rt(r,r);for(t=0;t<r;t++)for(e=0;e<r;e++)t<e?i.set(t,e,n.get(t,e)):t===e?i.set(t,e,this.Rdiag[t]):i.set(t,e,0);return i}get orthogonalMatrix(){let t,e,n,r,i=this.QR,s=i.rows,o=i.columns,a=new Rt(s,o);for(n=o-1;n>=0;n--){for(t=0;t<s;t++)a.set(t,n,0);for(a.set(n,n,1),e=n;e<o;e++)if(0!==i.get(n,n)){for(r=0,t=n;t<s;t++)r+=i.get(t,n)*a.get(t,e);for(r=-r/i.get(n,n),t=n;t<s;t++)a.set(t,e,a.get(t,e)+r*i.get(t,n))}}return a}}class Dt{constructor(t,e={}){if((t=Ct.checkMatrix(t)).isEmpty())throw new Error("Matrix must be non-empty");let n=t.rows,r=t.columns;const{computeLeftSingularVectors:i=!0,computeRightSingularVectors:s=!0,autoTranspose:o=!1}=e;let a,h=Boolean(i),u=Boolean(s),l=!1;if(n<r)if(o){a=t.transpose(),n=a.rows,r=a.columns,l=!0;let e=h;h=u,u=e}else a=t.clone(),console.warn("Computing SVD on a matrix with more columns than rows. Consider enabling autoTranspose");else a=t.clone();let c=Math.min(n,r),f=Math.min(n+1,r),m=new Float64Array(f),g=new Rt(n,c),p=new Rt(r,r),d=new Float64Array(r),w=new Float64Array(n),y=new Float64Array(f);for(let t=0;t<f;t++)y[t]=t;let b=Math.min(n-1,r),M=Math.max(0,Math.min(r-2,n)),x=Math.max(b,M);for(let t=0;t<x;t++){if(t<b){m[t]=0;for(let e=t;e<n;e++)m[t]=zt(m[t],a.get(e,t));if(0!==m[t]){a.get(t,t)<0&&(m[t]=-m[t]);for(let e=t;e<n;e++)a.set(e,t,a.get(e,t)/m[t]);a.set(t,t,a.get(t,t)+1)}m[t]=-m[t]}for(let e=t+1;e<r;e++){if(t<b&&0!==m[t]){let r=0;for(let i=t;i<n;i++)r+=a.get(i,t)*a.get(i,e);r=-r/a.get(t,t);for(let i=t;i<n;i++)a.set(i,e,a.get(i,e)+r*a.get(i,t))}d[e]=a.get(t,e)}if(h&&t<b)for(let e=t;e<n;e++)g.set(e,t,a.get(e,t));if(t<M){d[t]=0;for(let e=t+1;e<r;e++)d[t]=zt(d[t],d[e]);if(0!==d[t]){d[t+1]<0&&(d[t]=0-d[t]);for(let e=t+1;e<r;e++)d[e]/=d[t];d[t+1]+=1}if(d[t]=-d[t],t+1<n&&0!==d[t]){for(let e=t+1;e<n;e++)w[e]=0;for(let e=t+1;e<n;e++)for(let n=t+1;n<r;n++)w[e]+=d[n]*a.get(e,n);for(let e=t+1;e<r;e++){let r=-d[e]/d[t+1];for(let i=t+1;i<n;i++)a.set(i,e,a.get(i,e)+r*w[i])}}if(u)for(let e=t+1;e<r;e++)p.set(e,t,d[e])}}let v=Math.min(r,n+1);if(b<r&&(m[b]=a.get(b,b)),n<v&&(m[v-1]=0),M+1<v&&(d[M]=a.get(M,v-1)),d[v-1]=0,h){for(let t=b;t<c;t++){for(let e=0;e<n;e++)g.set(e,t,0);g.set(t,t,1)}for(let t=b-1;t>=0;t--)if(0!==m[t]){for(let e=t+1;e<c;e++){let r=0;for(let i=t;i<n;i++)r+=g.get(i,t)*g.get(i,e);r=-r/g.get(t,t);for(let i=t;i<n;i++)g.set(i,e,g.get(i,e)+r*g.get(i,t))}for(let e=t;e<n;e++)g.set(e,t,-g.get(e,t));g.set(t,t,1+g.get(t,t));for(let e=0;e<t-1;e++)g.set(e,t,0)}else{for(let e=0;e<n;e++)g.set(e,t,0);g.set(t,t,1)}}if(u)for(let t=r-1;t>=0;t--){if(t<M&&0!==d[t])for(let e=t+1;e<r;e++){let n=0;for(let i=t+1;i<r;i++)n+=p.get(i,t)*p.get(i,e);n=-n/p.get(t+1,t);for(let i=t+1;i<r;i++)p.set(i,e,p.get(i,e)+n*p.get(i,t))}for(let e=0;e<r;e++)p.set(e,t,0);p.set(t,t,1)}let E=v-1,A=0,S=Number.EPSILON;for(;v>0;){let t,e;for(t=v-2;t>=-1&&-1!==t;t--){const e=Number.MIN_VALUE+S*Math.abs(m[t]+Math.abs(m[t+1]));if(Math.abs(d[t])<=e||Number.isNaN(d[t])){d[t]=0;break}}if(t===v-2)e=4;else{let n;for(n=v-1;n>=t&&n!==t;n--){let e=(n!==v?Math.abs(d[n]):0)+(n!==t+1?Math.abs(d[n-1]):0);if(Math.abs(m[n])<=S*e){m[n]=0;break}}n===t?e=3:n===v-1?e=1:(e=2,t=n)}switch(t++,e){case 1:{let e=d[v-2];d[v-2]=0;for(let n=v-2;n>=t;n--){let i=zt(m[n],e),s=m[n]/i,o=e/i;if(m[n]=i,n!==t&&(e=-o*d[n-1],d[n-1]=s*d[n-1]),u)for(let t=0;t<r;t++)i=s*p.get(t,n)+o*p.get(t,v-1),p.set(t,v-1,-o*p.get(t,n)+s*p.get(t,v-1)),p.set(t,n,i)}break}case 2:{let e=d[t-1];d[t-1]=0;for(let r=t;r<v;r++){let i=zt(m[r],e),s=m[r]/i,o=e/i;if(m[r]=i,e=-o*d[r],d[r]=s*d[r],h)for(let e=0;e<n;e++)i=s*g.get(e,r)+o*g.get(e,t-1),g.set(e,t-1,-o*g.get(e,r)+s*g.get(e,t-1)),g.set(e,r,i)}break}case 3:{const e=Math.max(Math.abs(m[v-1]),Math.abs(m[v-2]),Math.abs(d[v-2]),Math.abs(m[t]),Math.abs(d[t])),i=m[v-1]/e,s=m[v-2]/e,o=d[v-2]/e,a=m[t]/e,l=d[t]/e,c=((s+i)*(s-i)+o*o)/2,f=i*o*(i*o);let w=0;0===c&&0===f||(w=c<0?0-Math.sqrt(c*c+f):Math.sqrt(c*c+f),w=f/(c+w));let y=(a+i)*(a-i)+w,b=a*l;for(let e=t;e<v-1;e++){let i=zt(y,b);0===i&&(i=Number.MIN_VALUE);let s=y/i,o=b/i;if(e!==t&&(d[e-1]=i),y=s*m[e]+o*d[e],d[e]=s*d[e]-o*m[e],b=o*m[e+1],m[e+1]=s*m[e+1],u)for(let t=0;t<r;t++)i=s*p.get(t,e)+o*p.get(t,e+1),p.set(t,e+1,-o*p.get(t,e)+s*p.get(t,e+1)),p.set(t,e,i);if(i=zt(y,b),0===i&&(i=Number.MIN_VALUE),s=y/i,o=b/i,m[e]=i,y=s*d[e]+o*m[e+1],m[e+1]=-o*d[e]+s*m[e+1],b=o*d[e+1],d[e+1]=s*d[e+1],h&&e<n-1)for(let t=0;t<n;t++)i=s*g.get(t,e)+o*g.get(t,e+1),g.set(t,e+1,-o*g.get(t,e)+s*g.get(t,e+1)),g.set(t,e,i)}d[v-2]=y,A+=1;break}case 4:if(m[t]<=0&&(m[t]=m[t]<0?-m[t]:0,u))for(let e=0;e<=E;e++)p.set(e,t,-p.get(e,t));for(;t<E&&!(m[t]>=m[t+1]);){let e=m[t];if(m[t]=m[t+1],m[t+1]=e,u&&t<r-1)for(let n=0;n<r;n++)e=p.get(n,t+1),p.set(n,t+1,p.get(n,t)),p.set(n,t,e);if(h&&t<n-1)for(let r=0;r<n;r++)e=g.get(r,t+1),g.set(r,t+1,g.get(r,t)),g.set(r,t,e);t++}A=0,v--}}if(l){let t=p;p=g,g=t}this.m=n,this.n=r,this.s=m,this.U=g,this.V=p}solve(t){let e=t,n=this.threshold,r=this.s.length,i=Rt.zeros(r,r);for(let t=0;t<r;t++)Math.abs(this.s[t])<=n?i.set(t,t,0):i.set(t,t,1/this.s[t]);let s=this.U,o=this.rightSingularVectors,a=o.mmul(i),h=o.rows,u=s.rows,l=Rt.zeros(h,u);for(let t=0;t<h;t++)for(let e=0;e<u;e++){let n=0;for(let i=0;i<r;i++)n+=a.get(t,i)*s.get(e,i);l.set(t,e,n)}return l.mmul(e)}solveForDiagonal(t){return this.solve(Rt.diag(t))}inverse(){let t=this.V,e=this.threshold,n=t.rows,r=t.columns,i=new Rt(n,this.s.length);for(let s=0;s<n;s++)for(let n=0;n<r;n++)Math.abs(this.s[n])>e&&i.set(s,n,t.get(s,n)/this.s[n]);let s=this.U,o=s.rows,a=s.columns,h=new Rt(n,o);for(let t=0;t<n;t++)for(let e=0;e<o;e++){let n=0;for(let r=0;r<a;r++)n+=i.get(t,r)*s.get(e,r);h.set(t,e,n)}return h}get condition(){return this.s[0]/this.s[Math.min(this.m,this.n)-1]}get norm2(){return this.s[0]}get rank(){let t=Math.max(this.m,this.n)*this.s[0]*Number.EPSILON,e=0,n=this.s;for(let r=0,i=n.length;r<i;r++)n[r]>t&&e++;return e}get diagonal(){return Array.from(this.s)}get threshold(){return Number.EPSILON/2*Math.max(this.m,this.n)*this.s[0]}get leftSingularVectors(){return this.U}get rightSingularVectors(){return this.V}get diagonalMatrix(){return Rt.diag(this.s)}}function Ot(t,e,n,r,i){let s=n*r*r,o=Rt.eye(e.length,e.length,s);const a=i(e);let h=new Float64Array(t.x.length);for(let e=0;e<t.x.length;e++)h[e]=a(t.x[e]);let u=function(t,e,n,r,i){const s=n.length,o=t.x.length;let a=new Array(s);for(let h=0;h<s;h++){a[h]=new Array(o);let s=n.slice();s[h]+=r;let u=i(s);for(let n=0;n<o;n++)a[h][n]=e[n]-u(t.x[n])}return new Rt(a)}(t,h,e,r,i),l=function(t,e){const n=t.x.length;let r=new Array(n);for(let i=0;i<n;i++)r[i]=[t.y[i]-e[i]];return new Rt(r)}(t,h),c=function(t,e=!1){return t=Ct.checkMatrix(t),e?new Dt(t).inverse():function(t,e,n=!1){return t=Ct.checkMatrix(t),e=Ct.checkMatrix(e),n?new Dt(t).solve(e):t.isSquare()?new Tt(t).solve(e):new Lt(t).solve(e)}(t,Rt.eye(t.rows))}(o.add(u.mmul(u.transpose())));return(e=(e=new Rt([e])).sub(c.mmul(u).mmul(l).mul(r).transpose())).to1DArray()}const Pt=1e-5,_t=.001;class Ft{get neighbors(){return this.nNeighbors}constructor(t={}){this.learningRate=1,this.localConnectivity=1,this.minDist=.1,this.nComponents=2,this.nEpochs=0,this.nNeighbors=15,this.negativeSampleRate=5,this.random=Math.random,this.repulsionStrength=1,this.setOpMixRatio=1,this.spread=1,this.transformQueueSize=4,this.targetMetric="categorical",this.targetWeight=.5,this.targetNNeighbors=15,this.distanceFn=Bt,this.isInitialized=!1,this.rpForest=[],this.embedding=[],this.optimizationState=new Ut;const e=e=>{void 0!==t[e]&&(this[e]=t[e])};e("distanceFn"),e("learningRate"),e("localConnectivity"),e("minDist"),e("nComponents"),e("nEpochs"),e("nNeighbors"),e("negativeSampleRate"),e("random"),e("repulsionStrength"),e("setOpMixRatio"),e("spread"),e("transformQueueSize"),this.targetNNeighbors=t.nNeighbors||this.nNeighbors||this.targetNNeighbors}fit(t){return this.initializeFit(t),this.optimizeLayout(),this.embedding}async fitAsync(t,e=(()=>!0)){return this.initializeFit(t),await this.optimizeLayoutAsync(e),this.embedding}setSupervisedProjection(t,e={}){this.Y=t,this.targetMetric=e.targetMetric||this.targetMetric,this.targetWeight=e.targetWeight||this.targetWeight,this.targetNNeighbors=e.targetNNeighbors||this.targetNNeighbors}setPrecomputedKNN(t,e){this.knnIndices=t,this.knnDistances=e}initializeFit(t){if(t.length<=this.nNeighbors)throw new Error(`Not enough data points (${t.length}) to create nNeighbors: ${this.nNeighbors}. Add more data points or adjust the configuration.`);if(this.X===t&&this.isInitialized)return this.getNEpochs();if(this.X=t,!this.knnIndices&&!this.knnDistances){const e=this.nearestNeighbors(t);this.knnIndices=e.knnIndices,this.knnDistances=e.knnDistances}this.graph=this.fuzzySimplicialSet(t,this.nNeighbors,this.setOpMixRatio),this.makeSearchFns(),this.searchGraph=this.makeSearchGraph(t),this.processGraphForSupervisedProjection();const{head:e,tail:n,epochsPerSample:r}=this.initializeSimplicialSetEmbedding();return this.optimizationState.head=e,this.optimizationState.tail=n,this.optimizationState.epochsPerSample=r,this.initializeOptimization(),this.prepareForOptimizationLoop(),this.isInitialized=!0,this.getNEpochs()}makeSearchFns(){const{initFromTree:t,initFromRandom:e}=(n=this.distanceFn,{initFromRandom:function(t,e,r,i,s){for(let o=0;o<r.length;o++){const a=R(t,e.length,s);for(let t=0;t<a.length;t++)a[t]<0||L(i,o,n(e[a[t]],r[o]),a[t],1)}},initFromTree:function(t,e,r,i,s){for(let o=0;o<r.length;o++){const a=rt(r[o],t,s);for(let t=0;t<a.length;t++){if(a[t]<0)return;L(i,o,n(e[a[t]],r[o]),a[t],1)}}}});var n;this.initFromTree=t,this.initFromRandom=e,this.search=function(t){return function(e,n,r,i){const{indices:s,indptr:o}=K(n);for(let n=0;n<i.length;n++){const a=new Set(r[0][n]);for(;;){const h=F(r,n);if(-1===h)break;const u=s.slice(o[h],o[h+1]);for(const s of u)s===h||-1===s||a.has(s)||(D(r,n,t(e[s],i[n]),s,1),a.add(s))}}return r}}(this.distanceFn)}makeSearchGraph(t){const e=this.knnIndices,n=this.knnDistances,r=[t.length,t.length],i=new B([],[],[],r);for(let t=0;t<e.length;t++){const r=e[t],s=n[t];for(let e=0;e<r.length;e++){const n=r[e],o=s[e];o>0&&i.set(t,n,o)}}return H(i,U(i),((t,e)=>t>e?t:e))}transform(t){const e=this.X;if(void 0===e||0===e.length)throw new Error("No data has been fit.");let n=Math.floor(this.nNeighbors*this.transformQueueSize);n=Math.min(e.length,n);const r=function(t,e,n,r,i,s,o){const a=T(n.length,r);if(i(r,e,n,a,o),t)for(const r of t)s(r,e,n,a,o);return a}(this.rpForest,e,t,n,this.initFromRandom,this.initFromTree,this.random),i=this.search(e,this.searchGraph,r,t);let{indices:s,weights:o}=P(i);s=s.map((t=>t.slice(0,this.nNeighbors))),o=o.map((t=>t.slice(0,this.nNeighbors)));const a=Math.max(0,this.localConnectivity-1),{sigmas:h,rhos:u}=this.smoothKNNDistance(o,this.nNeighbors,a),{rows:l,cols:c,vals:f}=this.computeMembershipStrengths(s,o,h,u),m=[t.length,e.length];let g=new B(l,c,f,m);const p=K(W(g,"l1")),d=t.length,w=function(t,e,n){const r=I(t.length).map((t=>I(n[0].length)));for(let i=0;i<t.length;i++)for(let s=0;s<t[0].length;s++)for(let o=0;o<n[0].length;o++){const a=t[i][s];r[i][o]+=e[i][s]*n[a][o]}return r}(C(p.indices,d,this.nNeighbors),C(p.values,d,this.nNeighbors),this.embedding),y=this.nEpochs?this.nEpochs/3:g.nRows<=1e4?100:30,b=g.getValues().reduce(((t,e)=>e>t?e:t),0);g=g.map((t=>t<b/y?0:t)),g=G(g);const M=this.makeEpochsPerSample(g.getValues(),y),x=g.getRows(),v=g.getCols();return this.assignOptimizationStateParameters({headEmbedding:w,tailEmbedding:this.embedding,head:x,tail:v,currentEpoch:0,nEpochs:y,nVertices:g.getDims()[1],epochsPerSample:M}),this.prepareForOptimizationLoop(),this.optimizeLayout()}processGraphForSupervisedProjection(){const{Y:t,X:e}=this;if(t){if(t.length!==e.length)throw new Error("Length of X and y must be equal");if("categorical"===this.targetMetric){const e=this.targetWeight<1?1/(1-this.targetWeight)*2.5:1e12;this.graph=this.categoricalSimplicialSetIntersection(this.graph,t,e)}}}step(){const{currentEpoch:t}=this.optimizationState;return t<this.getNEpochs()&&this.optimizeLayoutStep(t),this.optimizationState.currentEpoch}getEmbedding(){return this.embedding}nearestNeighbors(t){const{distanceFn:e,nNeighbors:n}=this,r=function(t,e){return function(n,r,i,s=10,o=50,a=.001,h=.5,u=!0){const l=n.length,c=T(n.length,i);for(let r=0;r<n.length;r++){const s=z(i,n.length,e);for(let e=0;e<s.length;e++){const i=t(n[r],n[s[e]]);L(c,r,i,s[e],1),L(c,s[e],i,r,1)}}if(u)for(let e=0;e<r.length;e++)for(let i=0;i<r[e].length&&!(r[e][i]<0);i++)for(let s=i+1;s<r[e].length&&!(r[e][s]<0);s++){const o=t(n[r[e][i]],n[r[e][s]]);L(c,r[e][i],o,r[e][s],1),L(c,r[e][s],o,r[e][i],1)}for(let r=0;r<s;r++){const r=O(c,l,i,o,e);let s=0;for(let i=0;i<l;i++)for(let a=0;a<o;a++){const u=Math.floor(r[0][i][a]);if(!(u<0||v(e)<h))for(let e=0;e<o;e++){const o=Math.floor(r[0][i][e]),h=r[2][i][a],l=r[2][i][e];if(o<0||!h&&!l)continue;const f=t(n[u],n[o]);s+=L(c,u,f,o,1),s+=L(c,o,f,u,1)}}if(s<=a*i*n.length)break}return P(c)}}(e,this.random),i=5+Math.floor(.5==(s=t.length**.5/20)?0:Math.round(s));var s;const o=Math.max(5,Math.floor(Math.round((t=>Math.log(t)/Math.log(2))(t.length))));this.rpForest=X(t,n,i,this.random);const a=function(t){if(t.length>0){const e=[];for(const n of t)e.push(...n.indices);return e}return[[-1]]}(this.rpForest),{indices:h,weights:u}=r(t,a,n,o);return{knnIndices:h,knnDistances:u}}fuzzySimplicialSet(t,e,n=1){const{knnIndices:r=[],knnDistances:i=[],localConnectivity:s}=this,{sigmas:o,rhos:a}=this.smoothKNNDistance(i,e,s),{rows:h,cols:u,vals:l}=this.computeMembershipStrengths(r,i,o,a),c=[t.length,t.length],f=new B(h,u,l,c),m=U(f),g=$(f,m),p=V(j(f,m),g);return j(q(p,n),q(g,1-n))}categoricalSimplicialSetIntersection(t,e,n,r=1){let i=function(t,e,n=1,r=5){return t.map(((t,i,s)=>-1===e[i]||-1===e[s]?t*Math.exp(-n):e[i]!==e[s]?t*Math.exp(-r):t))}(t,e,r,n);return i=G(i),function(t){const e=U(t=W(t,"max"));return G(t=j(t,V(e,$(e,t))))}(i)}smoothKNNDistance(t,e,n=1,r=64,i=1){const s=Math.log(e)/Math.log(2)*i,o=I(t.length),a=I(t.length);for(let e=0;e<t.length;e++){let i=0,h=1/0,u=1;const l=t[e],c=l.filter((t=>t>0));if(c.length>=n){const t=Math.floor(n),r=n-t;t>0?(o[e]=c[t-1],r>Pt&&(o[e]+=r*(c[t]-c[t-1]))):o[e]=r*c[0]}else c.length>0&&(o[e]=k(c));for(let n=0;n<r;n++){let n=0;for(let r=1;r<t[e].length;r++){const i=t[e][r]-o[e];n+=i>0?Math.exp(-i/u):1}if(Math.abs(n-s)<Pt)break;n>s?(h=u,u=(i+h)/2):(i=u,h===1/0?u*=2:u=(i+h)/2)}if(a[e]=u,o[e]>0){const t=N(l);a[e]<_t*t&&(a[e]=_t*t)}else{const n=N(t.map(N));a[e]<_t*n&&(a[e]=_t*n)}}return{sigmas:a,rhos:o}}computeMembershipStrengths(t,e,n,r){const i=t.length,s=t[0].length,o=I(i*s),a=I(i*s),h=I(i*s);for(let u=0;u<i;u++)for(let i=0;i<s;i++){let l=0;-1!==t[u][i]&&(l=t[u][i]===u?0:e[u][i]-r[u]<=0?1:Math.exp(-(e[u][i]-r[u])/n[u]),o[u*s+i]=u,a[u*s+i]=t[u][i],h[u*s+i]=l)}return{rows:o,cols:a,vals:h}}initializeSimplicialSetEmbedding(){const t=this.getNEpochs(),{nComponents:e}=this,n=this.graph.getValues();let r=0;for(let t=0;t<n.length;t++){const e=n[t];r<n[t]&&(r=e)}const i=this.graph.map((e=>e<r/t?0:e));this.embedding=I(i.nRows).map((()=>I(e).map((()=>20*v(this.random)-10))));const s=[],o=[],a=[],h=i.getAll();for(let t=0;t<h.length;t++){const e=h[t];e.value&&(s.push(e.value),a.push(e.row),o.push(e.col))}return{head:o,tail:a,epochsPerSample:this.makeEpochsPerSample(s,t)}}makeEpochsPerSample(t,e){const n=S(t.length,-1),r=k(t),i=t.map((t=>t/r*e));return i.forEach(((t,r)=>{t>0&&(n[r]=e/i[r])})),n}assignOptimizationStateParameters(t){Object.assign(this.optimizationState,t)}prepareForOptimizationLoop(){const{repulsionStrength:t,learningRate:e,negativeSampleRate:n}=this,{epochsPerSample:r,headEmbedding:i,tailEmbedding:s}=this.optimizationState,o=i[0].length,a=i.length===s.length,h=r.map((t=>t/n)),u=[...h],l=[...r];this.assignOptimizationStateParameters({epochOfNextSample:l,epochOfNextNegativeSample:u,epochsPerNegativeSample:h,moveOther:a,initialAlpha:e,alpha:e,gamma:t,dim:o})}initializeOptimization(){const t=this.embedding,e=this.embedding,{head:n,tail:r,epochsPerSample:i}=this.optimizationState,s=this.getNEpochs(),o=this.graph.nCols,{a,b:h}=function(t,e){const n=function(t,e,n){return E(300).map(((t,n)=>0+n*((e-0)/299)))}(0,3*t).map((t=>t<e?1:t)),r=I(n.length).map(((r,i)=>n[i]>=e?Math.exp(-(n[i]-e)/t):r)),i={x:n,y:r},{parameterValues:s}=function(t,e,n={}){let{maxIterations:r=100,gradientDifference:i=.1,damping:s=0,errorTolerance:o=.01,minValues:a,maxValues:h,initialValues:u}=n;if(s<=0)throw new Error("The damping option must be a positive number");if(!t.x||!t.y)throw new Error("The data parameter must have x and y elements");if(!st(t.x)||t.x.length<2||!st(t.y)||t.y.length<2)throw new Error("The data parameter elements must be an array with more than 2 points");if(t.x.length!==t.y.length)throw new Error("The data parameter elements must have the same size");let l=u||new Array(e.length).fill(1),c=l.length;if(h=h||new Array(c).fill(Number.MAX_SAFE_INTEGER),a=a||new Array(c).fill(Number.MIN_SAFE_INTEGER),h.length!==a.length)throw new Error("minValues and maxValues must be the same size");if(!st(l))throw new Error("initialValues must be an array");let f,m=ot(t,l,e),g=m<=o;for(f=0;f<r&&!g;f++){l=Ot(t,l,s,i,e);for(let t=0;t<c;t++)l[t]=Math.min(Math.max(a[t],l[t]),h[t]);if(m=ot(t,l,e),isNaN(m))break;g=m<=o}return{parameterValues:l,parameterError:m,iterations:f}}(i,(([t,e])=>n=>1/(1+t*n**(2*e))),{damping:1.5,initialValues:[.5,.5],gradientDifference:.1,maxIterations:100,errorTolerance:.01}),[o,a]=s;return{a:o,b:a}}(this.spread,this.minDist);this.assignOptimizationStateParameters({headEmbedding:t,tailEmbedding:e,head:n,tail:r,epochsPerSample:i,a,b:h,nEpochs:s,nVertices:o})}optimizeLayoutStep(t){const{optimizationState:e}=this,{head:n,tail:r,headEmbedding:i,tailEmbedding:s,epochsPerSample:o,epochOfNextSample:a,epochOfNextNegativeSample:h,epochsPerNegativeSample:u,moveOther:l,initialAlpha:c,alpha:f,gamma:m,a:g,b:p,dim:d,nEpochs:w,nVertices:y}=e;for(let e=0;e<o.length;e++){if(a[e]>t)continue;const c=n[e],w=r[e],b=i[c],M=s[w],v=jt(b,M);let E=0;v>0&&(E=-2*g*p*Math.pow(v,p-1),E/=g*Math.pow(v,p)+1);for(let t=0;t<d;t++){const e=$t(E*(b[t]-M[t]),4);b[t]+=e*f,l&&(M[t]+=-e*f)}a[e]+=o[e];const A=Math.floor((t-h[e])/u[e]);for(let t=0;t<A;t++){const t=x(y,this.random),e=s[t],n=jt(b,e);let r=0;if(n>0)r=2*m*p,r/=(.001+n)*(g*Math.pow(n,p)+1);else if(c===t)continue;for(let t=0;t<d;t++){let n=4;r>0&&(n=$t(r*(b[t]-e[t]),4)),b[t]+=n*f}}h[e]+=A*u[e]}return e.alpha=c*(1-t/w),e.currentEpoch+=1,i}optimizeLayoutAsync(t=(()=>!0)){return new Promise(((e,n)=>{const r=async()=>{try{const{nEpochs:n,currentEpoch:i}=this.optimizationState;this.embedding=this.optimizeLayoutStep(i);const s=this.optimizationState.currentEpoch,o=!1===t(s),a=s===n;if(o||a)return e(a);setTimeout((()=>r()),0)}catch(t){n(t)}};setTimeout((()=>r()),0)}))}optimizeLayout(t=(()=>!0)){let e=!1,n=[];for(;!e;){const{nEpochs:r,currentEpoch:i}=this.optimizationState;n=this.optimizeLayoutStep(i);const s=this.optimizationState.currentEpoch,o=!1===t(s);e=s===r||o}return n}getNEpochs(){const t=this.graph;if(this.nEpochs>0)return this.nEpochs;if(!t)return 200;const e=t.nRows;return e<=2500?500:e<=5e3?400:e<=7500?300:200}}function Bt(t,e){return Math.abs(t-e)}class Ut{constructor(){this.currentEpoch=0,this.headEmbedding=[],this.tailEmbedding=[],this.head=[],this.tail=[],this.epochsPerSample=[],this.epochOfNextSample=[],this.epochOfNextNegativeSample=[],this.epochsPerNegativeSample=[],this.moveOther=!0,this.initialAlpha=1,this.alpha=1,this.gamma=1,this.a=1.5769434603113077,this.b=.8950608779109733,this.dim=2,this.nEpochs=500,this.nVertices=0}}function $t(t,e){return t>e?e:t<-e?-e:t}function jt(t,e){let n=0;for(let r=0;r<t.length;r++)n+=Math.pow(t[r]-e[r],2);return n}var Vt=n(2590),qt=n(9657),Gt=n(6377),Wt=n.n(Gt);class Yt{assert(t,e){if(!t)throw e||"Assertion failed"}getopt(t,e,n){return t.hasOwnProperty(e)?t[e]:n}gaussRandom(){if(this.returnV)return this.returnV=!1,this.vValue;const t=2*this.random()-1,e=2*this.random()-1,n=t*t+e*e;if(0===n||n>1)return this.gaussRandom();const r=Math.sqrt(-2*Math.log(n)/n);return this.vValue=e*r,this.returnV=!0,t*r}randn(t,e){return t+this.gaussRandom()*e}zeros(t){if(void 0===t||isNaN(t))return new Float32Array;if("undefined"==typeof ArrayBuffer){const e=new Float32Array(t);for(let n=0;n<t;n++)e[n]=0;return e}return new Float32Array(t)}randn2d(t,e,n){const r=void 0!==n,i=new Array(t).fill(null).map((()=>new Float32Array(e)));if(r)for(let r=0;r<t;r++)i[r]=new Float32Array(e).fill(n);else for(let n=0;n<t;n++)for(let t=0;t<e;t++)i[n][t]=this.randn(0,1e-4);return i}l2(t,e){const n=t.length;let r=0;for(let i=0;i<n;i++){const n=t[i],s=e[i];r+=(n-s)*(n-s)}return r}xtod(t){const e=t.length,n=this.zeros(e*e);for(let r=0;r<e;r++)for(let i=r+1;i<e;i++){const s=this.l2(t[r],t[i]);n[r*e+i]=s,n[i*e+r]=s}return n}getIterSize(t){return t<=2e3?100:t<=3e3?90:t<=5e3?80:70}d2p(t,e,n,r){const i=(o=r,(t,e)=>o*t+e-Math.floor((t+2)*(t+1)/2)),s=new Float32Array(r*r);var o;for(let e=0;e<r;e++)for(let n=e+1;n<r;n++)s[e*r+n]=s[n*r+e]=t[i(e,n)];const a=r,h=Math.log(e),u=this.zeros(a*a),l=this.zeros(a);for(let t=0;t<a;t++){let e=-1/0,i=1/0,o=1,c=!1;const f=Math.floor(this.getIterSize(r)/5);let m=0;for(;!c;){let r=0;for(let e=0;e<a;e++){const n=t===e?0:Math.exp(-s[t*a+e]*o);l[e]=n,r+=n}let u=0;for(let t=0;t<a;t++){let e;e=0===r?0:l[t]/r,l[t]=e,e>1e-7&&(u-=e*Math.log(e))}u>h?(e=o,i===1/0?o*=2:o=(o+i)/2):(i=o,e===-1/0?o/=2:o=(o+e)/2),m++,Math.abs(u-h)<n&&(c=!0),m>=f&&(c=!0)}for(let e=0;e<a;e++)u[t*a+e]=l[e]}const c=this.zeros(a*a),f=2*a;for(let t=0;t<a;t++)for(let e=0;e<a;e++)c[t*a+e]=Math.max((u[t*a+e]+u[e*a+t])/f,1e-100);return c}sign(t){return t>0?1:t<0?-1:0}constructor(t){this.iter=0,this.random=Math.random,this.returnV=!1,this.vValue=0,t=t||{},this.perplexity=this.getopt(t,"perplexity",30),this.dim=this.getopt(t,"dim",2),this.epsilon=this.getopt(t,"epsilon",10),this.random=this.getopt(t,"random",Math.random)}initDataRaw(t){const e=t.length,n=t[0].length;this.assert(e>0," X is empty? You must have some data!"),this.assert(n>0," X[0] is empty? Where is the data?");const r=this.xtod(t);this.P=this.d2p(r,this.perplexity,1e-4,n),this.N=e,this.initSolution()}initDataDist(t,e){const n=t.length;this.assert(n>0," X is empty? You must have some data!"),console.time("distances to matrix"),this.P=this.d2p(t,this.perplexity,1e-4,e),console.timeEnd("distances to matrix"),this.N=e,this.initSolution()}initSolution(){this.Y=this.randn2d(this.N,this.dim),this.gains=this.randn2d(this.N,this.dim,1),this.ystep=this.randn2d(this.N,this.dim,0),this.iter=0}getSolution(){return this.Y}step(){this.iter+=1;const t=this.N,e=this.costGrad(this.Y),n=e.cost,r=e.grad,i=this.zeros(this.dim);for(let e=0;e<t;e++)for(let t=0;t<this.dim;t++){const n=r[e][t],s=this.ystep[e][t],o=this.gains[e][t];let a=this.sign(n)===this.sign(s)?.8*o:o+.2;a<.01&&(a=.01),this.gains[e][t]=a;const h=(this.iter<250?.5:.8)*s-this.epsilon*a*r[e][t];this.ystep[e][t]=h,this.Y[e][t]+=h,i[t]+=this.Y[e][t]}for(let e=0;e<t;e++)for(let n=0;n<this.dim;n++)this.Y[e][n]-=i[n]/t;return n}debugGrad(){const t=this.N,e=this.costGrad(this.Y).grad,n=1e-5;for(let r=0;r<t;r++)for(let t=0;t<this.dim;t++){const i=this.Y[r][t];this.Y[r][t]=i+n;const s=this.costGrad(this.Y);this.Y[r][t]=i-n;const o=this.costGrad(this.Y),a=e[r][t],h=(s.cost-o.cost)/(2*n);console.log(r+","+t+": gradcheck analytic: "+a+" vs. numerical: "+h),this.Y[r][t]=i}}costGrad(t){const e=this.N,n=this.dim,r=this.P,i=this.iter<100?4:1;this.quArr??(this.quArr=this.zeros(e*e));let s=0;for(let r=0;r<e;r++)for(let i=r+1;i<e;i++){const o=1/(1+new Array(n).reduce(((e,n,s)=>e+Math.pow(t[r][s]-t[i][s],2)),0));this.quArr[r*e+i]=o,this.quArr[i*e+r]=o,s+=2*o}let o=0;const a=new Array(e).fill(null).map((()=>new Float32Array(n).fill(0)));for(let h=0;h<e;h++)for(let u=h+1;u<e;u++){const l=Math.max(this.quArr[h*e+u]/s,1e-100);o+=-r[h*e+u]*Math.log(l)*2;const c=4*(i*r[h*e+u]-l)*this.quArr[h*e+u];for(let e=0;e<n;e++)a[h][e]+=c*(t[h][e]-t[u][e]),a[u][e]+=c*(t[u][e]-t[h][e])}return{cost:o,grad:a}}}n(7905);const Ht={EUCLIDEAN:function(t){return`\n var sum = 0.0;\n for (var i = 0u; i < ${t}; i = i + 1u) {\n sum = sum + distances[i] * distances[i] * computeInfo.weights[i] * computeInfo.weights[i];\n }\n return sqrt(sum);\n `},MANHATTAN:function(t){return`\n var sum = 0.0;\n for (var i = 0u; i < ${t}; i = i + 1u) {\n sum = sum + abs(distances[i]) * computeInfo.weights[i];\n }\n return sum;\n `}};var Kt;!function(t){t.HAMMING="Hamming",t.EUCLIDEAN="Euclidean",t.MANHATTAN="Manhattan",t.TANIMOTO="Tanimoto",t.LEVENSTEIN="Levenshtein",t.NEEDLEMAN_WUNSCH="Needlemann-Wunsch",t.MONOMER_CHEMICAL_DISTANCE="Monomer chemical distance",t.SOKAL="Sokal",t.COSINE="Cosine",t.ASYMMETRIC="Asymmetric",t.Difference="Difference",t.OneHot="One-Hot"}(Kt||(Kt={}));const Qt={[Kt.HAMMING]:function(t,e){return`\n let aLength: u32 = computeInfo.entrySizes[${e}][aIndex];\n let bLength: u32 = computeInfo.entrySizes[${e}][bIndex];\n let maxLength: u32 = max(aLength, bLength);\n let minLength: u32 = min(aLength, bLength);\n let sizeDiff: u32 = maxLength - minLength;\n \n let maxIntDistance = ceil(maxDistance * f32(maxLength)) - f32(sizeDiff);\n\n var diff: f32 = 0.0;\n for (var i = 0u; i < ${t}; i = i + 1u) {\n diff = diff + f32(a[i] != b[i]);\n if (diff >= maxIntDistance) {\n return 1.0;\n }\n }\n diff += f32(sizeDiff);\n return diff / ${t};\n `},[Kt.EUCLIDEAN]:function(t,e){return`\n var dist: f32 = 0.0;\n for (var i = 0u; i < ${t}; i = i + 1u) {\n dist = dist + f32(a[i] - b[i]) * f32(a[i] - b[i]);\n }\n return sqrt(dist);\n `},[Kt.MANHATTAN]:function(t,e){return`\n var dist: f32 = 0.0;\n for (var i = 0u; i < ${t}; i = i + 1u) {\n dist = dist + abs(f32(a[i] - b[i]));\n }\n return dist;\n `},[Kt.TANIMOTO]:function(t,e){return`\n var onBitsa: u32 = 0u;\n var onBitsb: u32 = 0u;\n for (var i = 0u; i < ${t}u; i = i + 1u) {\n onBitsa = onBitsa + countOneBits(a[i]);\n onBitsb = onBitsb + countOneBits(b[i]);\n }\n\n if (onBitsa == 0u && onBitsb == 0u) {\n return 0.0;\n }\n\n let totalOnBits = onBitsa + onBitsb;\n var commonBits: u32 = 0u;\n for (var i = 0u; i < ${t}u; i = i + 1u) {\n commonBits = commonBits + countOneBits(a[i] & b[i]);\n }\n\n return 1.0 - f32(commonBits) / f32(totalOnBits - commonBits);\n `},[Kt.LEVENSTEIN]:function(t,e){return`\n let aLength: u32 = computeInfo.entrySizes[${e}][aIndex];\n let bLength: u32 = computeInfo.entrySizes[${e}][bIndex];\n let maxLength: u32 = max(aLength, bLength);\n let minLength: u32 = min(aLength, bLength);\n\n let maxIntDistance = ceil(maxDistance * f32(maxLength));\n\n // we will store two arrays as matrix and swap the working indices per pass.\n // this way we can reduce memory usage per computation to just O(aLength)\n // the grid will have aLength + 1 columns and bLength + 1 rows\n // this will be guaranteed by iteration, but the array sizes must be known at compile time, so we will use a fixed size of maxArraySize\n var dynamicPassMat: array<array<f32, ${t+1}u>, 2>; // initialize to 0\n \n var prevIndex: u32 = 0;\n var curIndex: u32 = 1; // we will swap these indices per pass\n\n // initialize the first row\n for (var i = 0u; i <= aLength; i = i + 1u) {\n dynamicPassMat[prevIndex][i] = f32(i);\n }\n\n // iterate over the rows\n for (var i = 1u; i <= bLength; i = i + 1u) {\n dynamicPassMat[curIndex][0] = f32(i);\n var minEntry: f32 = f32(maxLength);\n let prevRow = &dynamicPassMat[prevIndex];\n let curRow = &dynamicPassMat[curIndex];\n let bMon = u32(b[i - 1]);\n for (var j = 1u; j <= aLength; j = j + 1u) {\n var cost: f32 = f32(a[j - 1] != bMon);\n var res: f32 = min(\n min(\n (*prevRow)[j] + 1.0, // deletion\n (*curRow)[j - 1] + 1.0, // insertion\n ),\n (*prevRow)[j - 1] + cost // substitution\n );\n (*curRow)[j] = res;\n if (res < minEntry) {\n minEntry = res;\n }\n }\n // swap the indices\n let temp: u32 = prevIndex;\n prevIndex = curIndex;\n curIndex = temp;\n if (minEntry >= maxIntDistance) {\n return 1.0;\n }\n }\n\n return dynamicPassMat[prevIndex][aLength] / f32(maxLength);\n `},[Kt.NEEDLEMAN_WUNSCH]:function(t,e){return`\n let aLength: u32 = computeInfo.entrySizes[${e}][aIndex];\n let bLength: u32 = computeInfo.entrySizes[${e}][bIndex];\n let maxLength: u32 = max(aLength, bLength);\n let minLength: u32 = min(aLength, bLength);\n \n let maxIntDistance = ceil(maxDistance * f32(maxLength));\n // we will store two arrays as matrix and swap the working indices per pass.\n // this way we can reduce memory usage per computation to just O(aLength)\n // the grid will have aLength + 1 columns and bLength + 1 rows\n // this will be guaranteed by iteration, but the array sizes must be known at compile time, so we will use a fixed size of maxArraySize\n var dynamicPassMat: array<array<f32, ${t+1}u>, 2>; // initialize to 0\n \n // we need to keep track of which operation led to the current cell\n // i.e. whether we came from the left, top or diagonal to assign gap open/gap extend penalty\n var verticalGaps: array<u32, ${t+1}u>;\n var horizontalGaps: array<u32, ${t+1}u>;\n\n let gapOpenPenalty: f32 = suppInfo.gapOpenPenalty${e};\n let gapExtensionPenalty: f32 = suppInfo.gapExtensionPenalty${e};\n var prevIndex: u32 = 0;\n var curIndex: u32 = 1; // we will swap these indices per pass\n // initialize the first row\n for (var i = 0u; i <= aLength; i = i + 1u) {\n dynamicPassMat[prevIndex][i] = gapOpenPenalty + f32(i - 1) * gapExtensionPenalty;\n dynamicPassMat[curIndex][i] = 0.0;\n }\n dynamicPassMat[0][0] = 0.0;\n\n let simMatrix = &suppInfo.similarityMatrix${e}; // using pointers make things faster\n // iterate over the rows\n for (var i = 1u; i <= bLength; i = i + 1u) {\n let prevRow = &dynamicPassMat[prevIndex];\n let curRow = &dynamicPassMat[curIndex];\n (*curRow)[0] = gapOpenPenalty + f32(i - 1) * gapExtensionPenalty;\n var minEntry: f32 = f32(maxLength);\n let monB = u32(b[i - 1]);\n for (var j = 1u; j <= aLength; j = j + 1u) {\n let monA = u32(a[j - 1]);\n \n let cost: f32 = (*prevRow)[j - 1] + 1f - (*simMatrix)[monA][monB];\n var top = (*prevRow)[j]; // deletion\n if (verticalGaps[j] > 0) {\n top = top + gapExtensionPenalty;\n } else {\n top = top + gapOpenPenalty;\n }\n var left = (*curRow)[j - 1]; // insertion\n if (horizontalGaps[j - 1] > 0) {\n left = left + gapExtensionPenalty;\n } else {\n left = left + gapOpenPenalty;\n }\n var res: f32 = min(\n min(\n top, // deletion\n left, // insertion\n ),\n cost // substitution\n );\n (*curRow)[j] = res;\n if (res < minEntry) {\n minEntry = res;\n }\n // update the horizontal and vertical gaps\n if (res == cost) {\n verticalGaps[j] = 0;\n horizontalGaps[j] = 0;\n } else if (res == left) {\n verticalGaps[j] = 0;\n horizontalGaps[j] = 1;\n } else {\n verticalGaps[j] = 1;\n horizontalGaps[j] = 0;\n }\n }\n // swap the indices\n let temp: u32 = prevIndex;\n prevIndex = curIndex;\n curIndex = temp;\n if (minEntry >= maxIntDistance) {\n return 1.0;\n }\n }\n return dynamicPassMat[prevIndex][aLength] / f32(maxLength);\n \n `},[Kt.MONOMER_CHEMICAL_DISTANCE]:function(t,e){return`\n let aLength: u32 = computeInfo.entrySizes[${e}][aIndex];\n let bLength: u32 = computeInfo.entrySizes[${e}][bIndex];\n let maxLength: u32 = max(aLength, bLength);\n let minLength: u32 = min(aLength, bLength);\n let sizeDiff: u32 = maxLength - minLength;\n \n let maxIntDistance = ceil(maxDistance * f32(maxLength)) - f32(sizeDiff);\n\n let simMatrix = &(suppInfo.similarityMatrix${e}); // using pointers make things faster\n var diff: f32 = 0.0;\n for (var i = 0u; i < ${t}; i = i + 1u) {\n diff = diff + 1.0 - (*simMatrix)[u32(a[i])][u32(b[i])];\n if (diff >= maxIntDistance) {\n return 1.0;\n }\n }\n diff += f32(sizeDiff);\n return diff / ${t};\n `},[Kt.SOKAL]:function(t,e){return`\n var onBitsa: u32 = 0u;\n var onBitsb: u32 = 0u;\n for (var i = 0u; i < ${t}u; i = i + 1u) {\n onBitsa = onBitsa + countOneBits(a[i]);\n onBitsb = onBitsb + countOneBits(b[i]);\n }\n let total = onBitsa + onBitsb;\n if (total == 0u) {\n return 1.0;\n }\n var commonBits: u32 = 0u;\n for (var i = 0u; i < ${t}u; i = i + 1u) {\n commonBits = commonBits + countOneBits(a[i] & b[i]);\n }\n return 1.0 - f32(commonBits) / f32(total * 2 - commonBits * 3);\n `},[Kt.COSINE]:function(t,e){return`\n var onBitsa: u32 = 0u;\n var onBitsb: u32 = 0u;\n for (var i = 0u; i < ${t}u; i = i + 1u) {\n onBitsa = onBitsa + countOneBits(a[i]);\n onBitsb = onBitsb + countOneBits(b[i]);\n }\n let total = onBitsa * onBitsb; // p.s. here total is taken by multiplying\n if (total == 0u) {\n return 1.0;\n }\n var commonBits: u32 = 0u;\n for (var i = 0u; i < ${t}u; i = i + 1u) {\n commonBits = commonBits + countOneBits(a[i] & b[i]);\n }\n return 1.0 - f32(commonBits) / sqrt(f32(total));\n `},[Kt.ASYMMETRIC]:function(t,e){return`\n var onBitsa: u32 = 0u;\n var onBitsb: u32 = 0u;\n for (var i = 0u; i < ${t}u; i = i + 1u) {\n onBitsa = onBitsa + countOneBits(a[i]);\n onBitsb = onBitsb + countOneBits(b[i]);\n }\n let min = min(onBitsa, onBitsb);\n if (min == 0u) {\n return 1.0;\n }\n var commonBits: u32 = 0u;\n for (var i = 0u; i < ${t}u; i = i + 1u) {\n commonBits = commonBits + countOneBits(a[i] & b[i]);\n }\n return 1.0 - f32(commonBits) / f32(min);\n `},[Kt.Difference]:function(t,e){return`\n let range = suppInfo.range${e};\n return f32(abs(f32(a[0]) - f32(b[0])) / range);\n `},[Kt.OneHot]:function(t,e){return`\n let aLength: u32 = computeInfo.entrySizes[${e}][aIndex];\n let bLength: u32 = computeInfo.entrySizes[${e}][bIndex];\n if (aLength != bLength) {\n return 1.0;\n }\n for (var i = 0u; i < aLength; i = i + 1u) {\n if(a[i] != b[i]) {\n return 1.0;\n }\n }\n return 0.0;\n `}},Xt={[Kt.HAMMING]:t=>Math.ceil(t/30),[Kt.EUCLIDEAN]:t=>Math.ceil(t/30),[Kt.MANHATTAN]:t=>Math.ceil(t/30),[Kt.TANIMOTO]:t=>Math.ceil(t/80),[Kt.SOKAL]:t=>Math.ceil(t/80),[Kt.COSINE]:t=>Math.ceil(t/80),[Kt.ASYMMETRIC]:t=>Math.ceil(t/80),[Kt.LEVENSTEIN]:t=>Math.ceil(t*t/60),[Kt.NEEDLEMAN_WUNSCH]:t=>Math.ceil(t*t/60),[Kt.MONOMER_CHEMICAL_DISTANCE]:t=>Math.ceil(t/25),[Kt.Difference]:t=>1,[Kt.OneHot]:t=>Math.ceil(t/40)},Jt={STRING:new Set([Kt.HAMMING,Kt.LEVENSTEIN,Kt.NEEDLEMAN_WUNSCH,Kt.MONOMER_CHEMICAL_DISTANCE,Kt.OneHot]),UINT32ARRAY:new Set([Kt.HAMMING,Kt.EUCLIDEAN,Kt.MANHATTAN,Kt.MONOMER_CHEMICAL_DISTANCE,Kt.LEVENSTEIN,Kt.NEEDLEMAN_WUNSCH,Kt.TANIMOTO,Kt.COSINE,Kt.SOKAL,Kt.ASYMMETRIC,Kt.OneHot,Kt.Difference]),FLOAT32ARRAY:new Set([Kt.EUCLIDEAN,Kt.MANHATTAN,Kt.Difference]),NUMBER:new Set([Kt.EUCLIDEAN,Kt.MANHATTAN,Kt.Difference]),BITARRAY:new Set([Kt.TANIMOTO,Kt.COSINE,Kt.SOKAL,Kt.ASYMMETRIC])};var Zt=function(t,e,n,r){return new(n||(n=Promise))((function(i,s){function o(t){try{h(r.next(t))}catch(t){s(t)}}function a(t){try{h(r.throw(t))}catch(t){s(t)}}function h(t){var e;t.done?i(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(o,a)}h((r=r.apply(t,e||[])).next())}))};function te(t,e,n,r){return t.map(((t,r)=>`\n fn distanceScript${r}(aIndex: u32, bIndex: u32) -> f32 {\n let a = computeInfo.data${r}[aIndex];\n let b = computeInfo.data${r}[bIndex];\n let maxDistance: f32 = knnDistances[aIndex - computeInfo.startAtEndAt.x][${n} - 1u];\n ${Qt[t](e[r],r)}\n }\n `)).join("\n")+"\n"+`\n fn combinedDistance(aIndex: u32, bIndex: u32) -> f32 {\n var distances: array<f32, ${t.length}>;\n ${t.map(((t,e)=>`distances[${e}] = distanceScript${e}(aIndex, bIndex);`)).join("\n")}\n ${Ht[r](t.length)}\n }\n \n `}class ee{constructor(t){this.data=t.data,this.weights=t.weights,this.aggregationMethod=t.aggregationMethod}}class ne extends ee{constructor(t){super(t);const e=t.randomSeed??Date(),n=Wt()(e);t.random=n,this.reducer=new Yt(t),this.iterations=t?.iterations??this.reducer.getIterSize(this.data[0].length),this.distanceFnames=t.distanceFnames,this.distanceFns=t.distanceFns,this.distanceFnArgs=t.distanceFnArgs,this.progressFunc=t.progressFunc}async transform(){if(this.data[0].length>1e4)throw new Error("Maximum number of samples for T-SNE is 10000");const t=new M(!0,!1);try{const e=await t.calcMulti(this.data,this.distanceFnames,!1,this.distanceFnArgs,this.weights,this.aggregationMethod);t.terminate(),this.reducer.initDataDist(e,this.data[0].length);for(let t=0;t<this.iterations;++t)this.reducer.step(),this.progressFunc&&this.progressFunc(t,this.iterations,[]);return this.reducer.getSolution()}catch(e){throw t.terminate(),e}}}class re extends ee{constructor(t){const e=t.randomSeed??Date(),n=Wt()(e);super(t),this.useWEBGPU=!1,h("distanceFnames"in t),h("distanceFns"in t),this.distanceFnArgs=t.distanceFnArgs,this.distanceFns=t.distanceFns,this.progressFunc=t.progressFunc,this.useWEBGPU=t.useWEBGPU??!1,this.distanceFnames=t.distanceFnames,this.vectors=new Array(this.data[0].length).fill(0).map(((t,e)=>e)),this.data[0].length<=(t.nNeighbors??15)&&(t.nNeighbors=this.data[0].length-1),t.random=n,this.reducer=new Ft(t)}async transform(t){let e;if(console.time("knn graph"),this.useWEBGPU)try{e=await function(t,e=15,n,r,i,s){var o;return Zt(this,void 0,void 0,(function*(){if(s.length!==t.length||s.length!==n.length||s.length!==i.length)throw new Error("Options, weigths and distance functions must be provided for each column");if(t.some((e=>e.length!==t[0].length)))throw new Error("All entry lists must be the same length");const a=t.length,h=t[0].length,u=t.map(((t,e)=>function(t,e=Kt.HAMMING,n,r={gapOpenPenalty:1,gapExtensionPenalty:.6}){var i,s;let o=null;const a=t.some((t=>"string"==typeof t))?(o="STRING",t.map((t=>new Uint32Array(t.split("").map((t=>t.charCodeAt(0))))))):t.some((t=>"number"==typeof t))?(o="NUMBER",t.map((t=>new Float32Array([t])))):"object"==typeof t[0]&&t.some((t=>"_data"in t&&"_length"in t))?(o="BITARRAY",t.map((t=>t._data))):t.some((t=>t instanceof Float32Array))?(o="FLOAT32ARRAY",t):t.some((t=>t instanceof Uint32Array))?(o="UINT32ARRAY",t):void 0;if(!a||!o)throw new Error("Invalid entry type, could not determine entry type from input list");const h=a[0]instanceof Uint32Array,u=new Uint32Array(a.map((t=>t.length)));if(!Jt[o]||!Jt[o].has(e))throw new Error(`Distance metric '${e}' not supported for entry type '${o}'`);const l=u.reduce(((t,e)=>Math.max(t,e)),0),c=Xt[e](l),f=h?new Uint32Array(a.length*l):new Float32Array(a.length*l);a.forEach(((t,e)=>{f.set(t,e*l)}));let m="",g=0,p="FLOAT32ARRAY",d=null;if(e===Kt.NEEDLEMAN_WUNSCH||e===Kt.MONOMER_CHEMICAL_DISTANCE){let t=r.scoringMatrix&&r.alphabetIndexes?Object.keys(r.alphabetIndexes).reduce(((t,e)=>Math.max(t,e.charCodeAt(0))),0):-1;if(!r.alphabetIndexes||!r.scoringMatrix){for(let e=0;e<f.length;e++)f[e]>t&&(t=f[e]);r.scoringMatrix=new Array(t+1).fill(null).map((()=>new Array(t+1).fill(0))),r.alphabetIndexes={};for(let t=0;t<r.scoringMatrix.length;t++)r.scoringMatrix[t][t]=1,r.alphabetIndexes[String.fromCharCode(t)]=t}const e=(t+1)*(t+1),o=new Array(t+1).fill(null).map((()=>new Float32Array(t+1)));for(let e=0;e<t+1;e++)o[e][e]=1;const a=r.alphabetIndexes;for(const t of Object.keys(a))for(const e of Object.keys(a))t!==e&&(o[t.charCodeAt(0)][e.charCodeAt(0)]=r.scoringMatrix[a[t]][a[e]]);g=2+e,p="FLOAT32ARRAY",d=new Float32Array(g),d[0]=null!==(i=r.gapOpenPenalty)&&void 0!==i?i:1,d[1]=null!==(s=r.gapExtensionPenalty)&&void 0!==s?s:.6;let h=2;for(let t=0;t<o.length;t++)d.set(o[t],h),h+=o[t].length;m=`\n gapOpenPenalty${n}: f32,\n gapExtensionPenalty${n}: f32,\n similarityMatrix${n}: array<array<f32, ${t+1}>, ${t+1}>`}else if(e===Kt.Difference){if(!r.range||"number"!=typeof r.range||r.range<=0){const t=f.reduce(((t,e)=>Math.min(t,e)),f[0]),e=f.reduce(((t,e)=>Math.max(t,e)),f[0]);r.range=e-t}if(r.range<=0)throw new Error("Invalid range for difference distance metric: "+r.range);g=1,p="FLOAT32ARRAY",d=new Float32Array([r.range]),m=`\n range${n}: f32`}const w=`data${n}: array<array<${h?"u32":"f32"}, ${l}>, ${a.length}>`;return{flatSourceArray:f,sourceArraySize:f.length,maxEntryLen:l,arraySizes:u,complexity:c,suppInfoBuffer:d,suppInfoSize:g,suppInfoType:p,suppInfoStructWgsl:m,entryType:o,isUint32Array:h,dataStructWgsl:w}}(t,n[e],e,s[e])));if(0===a)throw new Error("No columns provided. Please provide at least one column of data.");1===a&&(r="MANHATTAN");let l=u.map((t=>t.suppInfoStructWgsl)).filter((t=>!!t&&""!=t)).join(",\n"),c=!1;l&&""!=l.trim()||(c=!0,l="\ndummy: f32\n");const f=u.reduce(((t,e)=>t+e.complexity),0),m=u.map((t=>t.dataStructWgsl)).filter((t=>!!t&&""!=t)).join(",\n"),g=new Uint32Array(a*h);u.forEach(((t,e)=>{g.set(t.arraySizes,e*h)}));const p=1e4,d=Math.ceil(1e4/f),w=yield null===(o=navigator.gpu)||void 0===o?void 0:o.requestAdapter(),y=yield null==w?void 0:w.requestDevice();if(!y)return;const b=Math.ceil(Math.sqrt(Math.ceil(100))),M=10*b,x=new Array(h).fill(null).map((()=>new Uint32Array(e))),v=new Array(h).fill(null).map((()=>new Float32Array(e))),E=y.createShaderModule({label:"KNN compute shader",code:`\n // this struct will contain all the info about the computation, startAtEndAt will contain the start and end of the knnDistances and knnIndexes.\n // array of sizes for each entries, and the main data as arrays of arrays called data0, data1 and so on. good thing is that because the first entry is vec4<u32>,\n // there will be no paddings, so no need to worry about padding data. also, arrays and matrices get stucked together, so no padding there as well.\n // what we need to worry about is the padding of overall struct. the size of overall struct will be factor of 16 bytes, so keep that in mind.\n struct ComputeInfo {\n // the x coordinate will contain the start index of the knnDistances and knnIndexes, while y will contain the end index \n // the z coordinate will contain the start of the pair comparisons, while w will contain the end of the pair comparisons\n // just keep in mind that this vec4 will be in first 16 bytes of corresponding buffer.\n startAtEndAt: vec4<u32>,\n // the ACTUALLY sizes of each entry\n entrySizes: array<array<u32, ${h}>, ${a}>,\n // the weights for each entry\n weights: array<f32, ${a}>,\n // the data for each entry\n ${m} // an example of the dataWgsl would be:\n //data0: array<array<u32,20>,100>,\n //data1: array<array<u32,20>,100>\n };\n\n struct SuppInfo {\n // struct containing all the supplementary info, like scoring matrix, alphabet indexes, range, etc.\n ${l}\n };\n \n @group(0) @binding(0) var<storage, read_write> knnIndexes: array<array<u32, ${e}>, 10000>;\n @group(0) @binding(1) var<storage, read_write> knnDistances: array<array<f32, ${e}>, 10000>; // each time just compute for a subset of the list\n @group(0) @binding(2) var<storage, read_write> computeInfo: ComputeInfo;\n @group(0) @binding(3) var<storage, read_write> suppInfo: SuppInfo;\n \n @compute @workgroup_size(10, 10) fn calcKNN(\n @builtin(global_invocation_id) id: vec3<u32>,\n @builtin(local_invocation_id) localId: vec3<u32>\n ) {\n ${c?"let otherDummy = suppInfo.dummy * 2;":""} // just to make sure that the suppInfo is not optimized out\n let col = id.x; //* 10 + localId.x;\n let row = id.y; //* 10 + localId.y;\n let graphIndex = row * ${M} + col;\n let index = graphIndex + computeInfo.startAtEndAt.x; // add the starting index of the knnDistances and knnIndexes\n \n if (index >= min(${h}u, computeInfo.startAtEndAt.y)) {return;}\n \n let pairComparisonStartAt = computeInfo.startAtEndAt.z;\n let pairComparisonEndAt = min(computeInfo.startAtEndAt.w, ${h}u);\n \n \n // only clear the knnDistances and knnIndexes if we are at the start of the pair comparison\n if (pairComparisonStartAt == 0u) {\n for (var i = 0u; i < ${e}; i = i + 1u) {\n knnDistances[graphIndex][i] = 99999.0;\n knnIndexes[graphIndex][i] = 0u;\n }\n }\n \n for (var i: u32 = pairComparisonStartAt; i < pairComparisonEndAt; i = i + 1u) {\n if (i == index) {continue;}\n let dist = combinedDistance(index, i);\n insertKnn(graphIndex, dist, i);\n }\n \n }\n // this will generate the distance script for each distance metric and then combine them into one\n ${te(n,u.map((t=>t.maxEntryLen)),e,r)}\n \n fn insertKnn(knnIndex: u32, dist: f32, index: u32) {\n // small optimization, if the distance is larger than the last element in the knnDistances, we can skip\n if (dist >= knnDistances[knnIndex][${e} - 1u]) {return;}\n for (var i = 0u; i < ${e}; i = i + 1u) {\n if (dist < knnDistances[knnIndex][i]) {\n for (var j = ${e} - 1u; j > i; j = j - 1u) {\n knnDistances[knnIndex][j] = knnDistances[knnIndex][j - 1u];\n knnIndexes[knnIndex][j] = knnIndexes[knnIndex][j - 1u];\n }\n knnDistances[knnIndex][i] = dist;\n knnIndexes[knnIndex][i] = index;\n return;\n }\n }\n }\n `}),A=y.createComputePipeline({label:"hamming compute pipeline",layout:"auto",compute:{module:E,entryPoint:"calcKNN"}}),S=4+a*h+a+u.reduce(((t,e)=>t+e.sourceArraySize),0),I=u.reduce(((t,e)=>t+e.suppInfoSize),0),N=S*Uint32Array.BYTES_PER_ELEMENT;let k=N;const R=15&N;0!==R&&(k+=16-R);const C=y.createBuffer({label:"compute info buffer",size:k,usage:GPUBufferUsage.STORAGE|GPUBufferUsage.COPY_SRC|GPUBufferUsage.COPY_DST,mappedAtCreation:!0}),T=C.getMappedRange();let z=0,L=p,D=0,O=d,P=0;new Uint32Array(T,P,4).set([z,L,D,O]),P+=4*Uint32Array.BYTES_PER_ELEMENT,new Uint32Array(T,P,g.length).set(g),P+=g.byteLength,new Float32Array(T,P,a).set(i),P+=a*Float32Array.BYTES_PER_ELEMENT;for(const t of u){const e=t.isUint32Array?Uint32Array:Float32Array,n=t.sourceArraySize;new e(T,P,n).set(t.flatSourceArray),P+=n*e.BYTES_PER_ELEMENT}C.unmap();const _=I*Uint32Array.BYTES_PER_ELEMENT;let F=_;const B=15&_;0!==B&&(F+=16-B),F=Math.max(F,16);const U=y.createBuffer({label:"supp info buffer",size:F,usage:GPUBufferUsage.STORAGE|GPUBufferUsage.COPY_SRC|GPUBufferUsage.COPY_DST,mappedAtCreation:!0}),$=U.getMappedRange();let j=0;for(const t of u)t.suppInfoBuffer&&t.suppInfoBuffer.byteLength>0&&t.suppInfoSize>0&&(new("UINT32ARRAY"===t.suppInfoType?Uint32Array:Float32Array)($,j,t.suppInfoBuffer.length).set(t.suppInfoBuffer),j+=t.suppInfoBuffer.byteLength);0===j&&new Uint32Array($,0,4).set([1,1,1,1]),U.unmap();const V=e*Uint32Array.BYTES_PER_ELEMENT*p,q=y.createBuffer({label:"buffer distances",size:V,usage:GPUBufferUsage.STORAGE|GPUBufferUsage.COPY_SRC}),G=y.createBuffer({label:"buffer indexes",size:V,usage:GPUBufferUsage.STORAGE|GPUBufferUsage.COPY_SRC}),W=e*Uint32Array.BYTES_PER_ELEMENT,Y=y.createBindGroup({label:"bindGroup for knn buffer",layout:A.getBindGroupLayout(0),entries:[{binding:0,resource:{buffer:G}},{binding:1,resource:{buffer:q}},{binding:2,resource:{buffer:C}},{binding:3,resource:{buffer:U}}]});for(let t=0;t<Math.ceil(h/p);t++){z=t*p,L=Math.min((t+1)*p,h);const n=Math.ceil(h/d);for(let t=0;t<n;t++){D=t*d,O=Math.min((t+1)*d,h),y.queue.writeBuffer(C,0,new Uint32Array([z,L,D,O]));const r=y.createCommandEncoder({label:"distance encoder"}),i=r.beginComputePass({label:"distance compute pass"});if(i.setPipeline(A),i.setBindGroup(0,Y),i.dispatchWorkgroups(b,Math.ceil(p/b/100)),i.end(),t===n-1){const t=y.createBuffer({label:"result buffer distances",size:q.size,usage:GPUBufferUsage.MAP_READ|GPUBufferUsage.COPY_DST});r.copyBufferToBuffer(q,0,t,0,t.size);const n=y.createBuffer({label:"result buffer indexes",size:G.size,usage:GPUBufferUsage.MAP_READ|GPUBufferUsage.COPY_DST});r.copyBufferToBuffer(G,0,n,0,n.size);const i=r.finish();y.queue.submit([i]),yield y.queue.onSubmittedWorkDone(),yield t.mapAsync(GPUMapMode.READ),yield n.mapAsync(GPUMapMode.READ);const s=n.getMappedRange(),o=t.getMappedRange();for(let t=0;t<L-z;t++){const n=new Uint32Array(s,t*W,e),r=new Float32Array(o,t*W,e);x[z+t].set(n),v[z+t].set(r)}n.unmap(),t.unmap()}else{const t=r.finish();y.queue.submit([t]),yield y.queue.onSubmittedWorkDone()}}}return{knnIndexes:x,knnDistances:v}}))}(this.data,this.reducer.neighbors,this.distanceFnames,this.aggregationMethod,this.weights,this.distanceFnArgs)}catch(t){console.error("WEBGPU KNN failed, falling back to multithreaded CPU implementation"),console.error(t)}e||(e=await(new Vt._).multiColumnKNN(this.data,this.distanceFnames,this.reducer.neighbors,this.distanceFnArgs,this.weights,this.aggregationMethod)),console.timeEnd("knn graph"),this.reducer.setPrecomputedKNN(e.knnIndexes,e.knnDistances),await new Promise((t=>{setTimeout((()=>{t()}),300)}));const n=await this.reducer.fitAsync(this.vectors,(t=>{this.progressFunc&&this.progressFunc(t,this.reducer.getNEpochs(),this.reducer.getEmbedding())}));return i=n,new Array(i.length).fill(0).map(((t,e)=>r.from(i[e])));var i}}const ie={UMAP:re,"t-SNE":ne};class se{constructor(t,e,n,r,i,s){const o=[];for(let e=0;e<n.length;++e){const r=new y(n[e]).getMeasure(s.distanceFnArgs[e]);o.push(r);let i=2048;for(let n=0;n<t[e].length;++n)if(t[e][n]&&t[e][n]._length){i=t[e][n]._length;break}if(a=n[e],"BitArray"==w[a])for(let n=0;n<t[e].length;++n)t[e][n]&&t[e][n]._data?t[e][n]=new qt.Z(t[e][n]._data,t[e][n]._length):t[e][n]=new qt.Z(i)}var a;"UMAP"==e?this.reducer=new re({data:t,distanceFnames:n,distanceFns:o,distanceFnArgs:s.distanceFnArgs,weights:r,aggregationMethod:i,...s}):"t-SNE"==e&&(this.reducer=new ne({data:t,distanceFnames:n,distanceFns:o,distanceFnArgs:s.distanceFnArgs,weights:r,aggregationMethod:i,...s}))}async transform(t=!1){if(void 0===this.reducer)throw new Error("Reducer was not defined.");let e=await this.reducer.transform();var n;return t&&(n=e,e=new Array(n[0].length).fill(0).map(((t,e)=>new r(n.length).fill(0).map(((t,r)=>n[r][e]))))),e}static availableMetricsByType(t){return Object.keys(d[t])}static get availableMethods(){return Object.keys(ie)}static get availableMetrics(){let t=[];return Object.values(d).forEach((e=>{const n=Object.values(e);t=[...t,...n]})),t}}async function oe(t,e,n){t%5==0&&self.postMessage({epochNum:t,epochsLength:e,embedding:n})}self.onmessage=async({data:{columnsData:t,method:e,distanceMetrics:n,options:r,weights:i,aggregationMethod:s}})=>{let o;try{const a=await async function(t,e,n,r,i,s){const o=new se(t,e,n,r,i,{...s,progressFunc:oe});return await o.transform(!0)}(t,e,n,i,s,r);o={embedding:a}}catch(t){o={error:t}}self.postMessage({error:o.error,embedding:o.embedding})}},6377:(t,e,n)=>{var r=n(4832),i=n(8652),s=n(801),o=n(2030),a=n(3618),h=n(9049),u=n(1971);u.alea=r,u.xor128=i,u.xorwow=s,u.xorshift7=o,u.xor4096=a,u.tychei=h,t.exports=u},4832:function(t,e,n){var r;!function(t,i,s){function o(t){var e,n=this,r=(e=4022871197,function(t){t=String(t);for(var n=0;n<t.length;n++){var r=.02519603282416938*(e+=t.charCodeAt(n));r-=e=r>>>0,e=(r*=e)>>>0,e+=4294967296*(r-=e)}return 2.3283064365386963e-10*(e>>>0)});n.next=function(){var t=2091639*n.s0+2.3283064365386963e-10*n.c;return n.s0=n.s1,n.s1=n.s2,n.s2=t-(n.c=0|t)},n.c=1,n.s0=r(" "),n.s1=r(" "),n.s2=r(" "),n.s0-=r(t),n.s0<0&&(n.s0+=1),n.s1-=r(t),n.s1<0&&(n.s1+=1),n.s2-=r(t),n.s2<0&&(n.s2+=1),r=null}function a(t,e){return e.c=t.c,e.s0=t.s0,e.s1=t.s1,e.s2=t.s2,e}function h(t,e){var n=new o(t),r=e&&e.state,i=n.next;return i.int32=function(){return 4294967296*n.next()|0},i.double=function(){return i()+11102230246251565e-32*(2097152*i()|0)},i.quick=i,r&&("object"==typeof r&&a(r,n),i.state=function(){return a(n,{})}),i}i&&i.exports?i.exports=h:n.amdD&&n.amdO?void 0===(r=function(){return h}.call(e,n,e,i))||(i.exports=r):this.alea=h}(0,t=n.nmd(t),n.amdD)},9049:function(t,e,n){var r;!function(t,i,s){function o(t){var e=this,n="";e.next=function(){var t=e.b,n=e.c,r=e.d,i=e.a;return t=t<<25^t>>>7^n,n=n-r|0,r=r<<24^r>>>8^i,i=i-t|0,e.b=t=t<<20^t>>>12^n,e.c=n=n-r|0,e.d=r<<16^n>>>16^i,e.a=i-t|0},e.a=0,e.b=0,e.c=-1640531527,e.d=1367130551,t===Math.floor(t)?(e.a=t/4294967296|0,e.b=0|t):n+=t;for(var r=0;r<n.length+20;r++)e.b^=0|n.charCodeAt(r),e.next()}function a(t,e){return e.a=t.a,e.b=t.b,e.c=t.c,e.d=t.d,e}function h(t,e){var n=new o(t),r=e&&e.state,i=function(){return(n.next()>>>0)/4294967296};return i.double=function(){do{var t=((n.next()>>>11)+(n.next()>>>0)/4294967296)/(1<<21)}while(0===t);return t},i.int32=n.next,i.quick=i,r&&("object"==typeof r&&a(r,n),i.state=function(){return a(n,{})}),i}i&&i.exports?i.exports=h:n.amdD&&n.amdO?void 0===(r=function(){return h}.call(e,n,e,i))||(i.exports=r):this.tychei=h}(0,t=n.nmd(t),n.amdD)},8652:function(t,e,n){var r;!function(t,i,s){function o(t){var e=this,n="";e.x=0,e.y=0,e.z=0,e.w=0,e.next=function(){var t=e.x^e.x<<11;return e.x=e.y,e.y=e.z,e.z=e.w,e.w^=e.w>>>19^t^t>>>8},t===(0|t)?e.x=t:n+=t;for(var r=0;r<n.length+64;r++)e.x^=0|n.charCodeAt(r),e.next()}function a(t,e){return e.x=t.x,e.y=t.y,e.z=t.z,e.w=t.w,e}function h(t,e){var n=new o(t),r=e&&e.state,i=function(){return(n.next()>>>0)/4294967296};return i.double=function(){do{var t=((n.next()>>>11)+(n.next()>>>0)/4294967296)/(1<<21)}while(0===t);return t},i.int32=n.next,i.quick=i,r&&("object"==typeof r&&a(r,n),i.state=function(){return a(n,{})}),i}i&&i.exports?i.exports=h:n.amdD&&n.amdO?void 0===(r=function(){return h}.call(e,n,e,i))||(i.exports=r):this.xor128=h}(0,t=n.nmd(t),n.amdD)},3618:function(t,e,n){var r;!function(t,i,s){function o(t){var e=this;e.next=function(){var t,n,r=e.w,i=e.X,s=e.i;return e.w=r=r+1640531527|0,n=i[s+34&127],t=i[s=s+1&127],n^=n<<13,t^=t<<17,n^=n>>>15,t^=t>>>12,n=i[s]=n^t,e.i=s,n+(r^r>>>16)|0},function(t,e){var n,r,i,s,o,a=[],h=128;for(e===(0|e)?(r=e,e=null):(e+="\0",r=0,h=Math.max(h,e.length)),i=0,s=-32;s<h;++s)e&&(r^=e.charCodeAt((s+32)%e.length)),0===s&&(o=r),r^=r<<10,r^=r>>>15,r^=r<<4,r^=r>>>13,s>=0&&(o=o+1640531527|0,i=0==(n=a[127&s]^=r+o)?i+1:0);for(i>=128&&(a[127&(e&&e.length||0)]=-1),i=127,s=512;s>0;--s)r=a[i+34&127],n=a[i=i+1&127],r^=r<<13,n^=n<<17,r^=r>>>15,n^=n>>>12,a[i]=r^n;t.w=o,t.X=a,t.i=i}(e,t)}function a(t,e){return e.i=t.i,e.w=t.w,e.X=t.X.slice(),e}function h(t,e){null==t&&(t=+new Date);var n=new o(t),r=e&&e.state,i=function(){return(n.next()>>>0)/4294967296};return i.double=function(){do{var t=((n.next()>>>11)+(n.next()>>>0)/4294967296)/(1<<21)}while(0===t);return t},i.int32=n.next,i.quick=i,r&&(r.X&&a(r,n),i.state=function(){return a(n,{})}),i}i&&i.exports?i.exports=h:n.amdD&&n.amdO?void 0===(r=function(){return h}.call(e,n,e,i))||(i.exports=r):this.xor4096=h}(0,t=n.nmd(t),n.amdD)},2030:function(t,e,n){var r;!function(t,i,s){function o(t){var e=this;e.next=function(){var t,n,r=e.x,i=e.i;return t=r[i],n=(t^=t>>>7)^t<<24,n^=(t=r[i+1&7])^t>>>10,n^=(t=r[i+3&7])^t>>>3,n^=(t=r[i+4&7])^t<<7,t=r[i+7&7],n^=(t^=t<<13)^t<<9,r[i]=n,e.i=i+1&7,n},function(t,e){var n,r=[];if(e===(0|e))r[0]=e;else for(e=""+e,n=0;n<e.length;++n)r[7&n]=r[7&n]<<15^e.charCodeAt(n)+r[n+1&7]<<13;for(;r.length<8;)r.push(0);for(n=0;n<8&&0===r[n];++n);for(8==n?r[7]=-1:r[n],t.x=r,t.i=0,n=256;n>0;--n)t.next()}(e,t)}function a(t,e){return e.x=t.x.slice(),e.i=t.i,e}function h(t,e){null==t&&(t=+new Date);var n=new o(t),r=e&&e.state,i=function(){return(n.next()>>>0)/4294967296};return i.double=function(){do{var t=((n.next()>>>11)+(n.next()>>>0)/4294967296)/(1<<21)}while(0===t);return t},i.int32=n.next,i.quick=i,r&&(r.x&&a(r,n),i.state=function(){return a(n,{})}),i}i&&i.exports?i.exports=h:n.amdD&&n.amdO?void 0===(r=function(){return h}.call(e,n,e,i))||(i.exports=r):this.xorshift7=h}(0,t=n.nmd(t),n.amdD)},801:function(t,e,n){var r;!function(t,i,s){function o(t){var e=this,n="";e.next=function(){var t=e.x^e.x>>>2;return e.x=e.y,e.y=e.z,e.z=e.w,e.w=e.v,(e.d=e.d+362437|0)+(e.v=e.v^e.v<<4^t^t<<1)|0},e.x=0,e.y=0,e.z=0,e.w=0,e.v=0,t===(0|t)?e.x=t:n+=t;for(var r=0;r<n.length+64;r++)e.x^=0|n.charCodeAt(r),r==n.length&&(e.d=e.x<<10^e.x>>>4),e.next()}function a(t,e){return e.x=t.x,e.y=t.y,e.z=t.z,e.w=t.w,e.v=t.v,e.d=t.d,e}function h(t,e){var n=new o(t),r=e&&e.state,i=function(){return(n.next()>>>0)/4294967296};return i.double=function(){do{var t=((n.next()>>>11)+(n.next()>>>0)/4294967296)/(1<<21)}while(0===t);return t},i.int32=n.next,i.quick=i,r&&("object"==typeof r&&a(r,n),i.state=function(){return a(n,{})}),i}i&&i.exports?i.exports=h:n.amdD&&n.amdO?void 0===(r=function(){return h}.call(e,n,e,i))||(i.exports=r):this.xorwow=h}(0,t=n.nmd(t),n.amdD)},1971:function(t,e,n){var r;!function(i,s,o){var a,h=256,u=6,l="random",c=o.pow(h,u),f=o.pow(2,52),m=2*f,g=h-1;function p(t,e,n){var r=[],g=b(y((e=1==e?{entropy:!0}:e||{}).entropy?[t,M(s)]:null==t?function(){try{var t;return a&&(t=a.randomBytes)?t=t(h):(t=new Uint8Array(h),(i.crypto||i.msCrypto).getRandomValues(t)),M(t)}catch(t){var e=i.navigator,n=e&&e.plugins;return[+new Date,i,n,i.screen,M(s)]}}():t,3),r),p=new d(r),x=function(){for(var t=p.g(u),e=c,n=0;t<f;)t=(t+n)*h,e*=h,n=p.g(1);for(;t>=m;)t/=2,e/=2,n>>>=1;return(t+n)/e};return x.int32=function(){return 0|p.g(4)},x.quick=function(){return p.g(4)/4294967296},x.double=x,b(M(p.S),s),(e.pass||n||function(t,e,n,r){return r&&(r.S&&w(r,p),t.state=function(){return w(p,{})}),n?(o[l]=t,e):t})(x,g,"global"in e?e.global:this==o,e.state)}function d(t){var e,n=t.length,r=this,i=0,s=r.i=r.j=0,o=r.S=[];for(n||(t=[n++]);i<h;)o[i]=i++;for(i=0;i<h;i++)o[i]=o[s=g&s+t[i%n]+(e=o[i])],o[s]=e;(r.g=function(t){for(var e,n=0,i=r.i,s=r.j,o=r.S;t--;)e=o[i=g&i+1],n=n*h+o[g&(o[i]=o[s=g&s+e])+(o[s]=e)];return r.i=i,r.j=s,n})(h)}function w(t,e){return e.i=t.i,e.j=t.j,e.S=t.S.slice(),e}function y(t,e){var n,r=[],i=typeof t;if(e&&"object"==i)for(n in t)try{r.push(y(t[n],e-1))}catch(t){}return r.length?r:"string"==i?t:t+"\0"}function b(t,e){for(var n,r=t+"",i=0;i<r.length;)e[g&i]=g&(n^=19*e[g&i])+r.charCodeAt(i++);return M(e)}function M(t){return String.fromCharCode.apply(0,t)}if(b(o.random(),s),t.exports){t.exports=p;try{a=n(5042)}catch(t){}}else void 0===(r=function(){return p}.call(e,n,e,t))||(t.exports=r)}("undefined"!=typeof self?self:this,[],Math)}}]);
3
- //# sourceMappingURL=777.js.map