UNPKG

vek-engine

Version:

Efficient WebAssembly-based vector math engine for JavaScript/TypeScript

332 lines (331 loc) 14.3 kB
export async function instantiate(module, imports = {}) { const adaptedImports = { env: Object.assign(Object.create(globalThis), imports.env || {}, { abort(message, fileName, lineNumber, columnNumber) { // ~lib/builtins/abort(~lib/string/String | null?, ~lib/string/String | null?, u32?, u32?) => void message = __liftString(message >>> 0); fileName = __liftString(fileName >>> 0); lineNumber = lineNumber >>> 0; columnNumber = columnNumber >>> 0; (() => { // @external.js throw Error(`${message} in ${fileName}:${lineNumber}:${columnNumber}`); })(); }, }), }; const { exports } = await WebAssembly.instantiate(module, adaptedImports); const memory = exports.memory || imports.env.memory; const adaptedExports = Object.setPrototypeOf({ vectorCreate(dimensions, elementByteSize) { // wasm/src/vector/vectorCreate(u32, u8) => wasm/src/vector/Vector return __liftInternref(exports.vectorCreate(dimensions, elementByteSize) >>> 0); }, vectorInstanceArithmeticMean(vector) { // wasm/src/vector/vectorInstanceArithmeticMean(wasm/src/vector/Vector) => f64 vector = __lowerInternref(vector) || __notnull(); return exports.vectorInstanceArithmeticMean(vector); }, vectorInstanceFill(vector, value) { // wasm/src/vector/vectorInstanceFill(wasm/src/vector/Vector, f64) => void vector = __lowerInternref(vector) || __notnull(); exports.vectorInstanceFill(vector, value); }, vectorInstanceGeometricMean(vector) { // wasm/src/vector/vectorInstanceGeometricMean(wasm/src/vector/Vector) => f64 vector = __lowerInternref(vector) || __notnull(); return exports.vectorInstanceGeometricMean(vector); }, vectorInstanceGetDimensions(vector) { // wasm/src/vector/vectorInstanceGetDimensions(wasm/src/vector/Vector) => u32 vector = __lowerInternref(vector) || __notnull(); return exports.vectorInstanceGetDimensions(vector) >>> 0; }, vectorInstanceGetElementByteSize(vector) { // wasm/src/vector/vectorInstanceGetElementByteSize(wasm/src/vector/Vector) => u8 vector = __lowerInternref(vector) || __notnull(); return exports.vectorInstanceGetElementByteSize(vector); }, vectorInstanceGetIs64Bit(vector) { // wasm/src/vector/vectorInstanceGetIs64Bit(wasm/src/vector/Vector) => bool vector = __lowerInternref(vector) || __notnull(); return exports.vectorInstanceGetIs64Bit(vector) != 0; }, vectorInstanceGetMaxIndex(vector) { // wasm/src/vector/vectorInstanceGetMaxIndex(wasm/src/vector/Vector) => u32 vector = __lowerInternref(vector) || __notnull(); return exports.vectorInstanceGetMaxIndex(vector) >>> 0; }, vectorInstanceGetValue(vector, index) { // wasm/src/vector/vectorInstanceGetValue(wasm/src/vector/Vector, u32) => f64 vector = __lowerInternref(vector) || __notnull(); return exports.vectorInstanceGetValue(vector, index); }, vectorInstanceIndexOfMax(vector) { // wasm/src/vector/vectorInstanceIndexOfMax(wasm/src/vector/Vector) => u32 vector = __lowerInternref(vector) || __notnull(); return exports.vectorInstanceIndexOfMax(vector) >>> 0; }, vectorInstanceIndexOfMin(vector) { // wasm/src/vector/vectorInstanceIndexOfMin(wasm/src/vector/Vector) => u32 vector = __lowerInternref(vector) || __notnull(); return exports.vectorInstanceIndexOfMin(vector) >>> 0; }, vectorInstanceInfinityNorm(vector) { // wasm/src/vector/vectorInstanceInfinityNorm(wasm/src/vector/Vector) => f64 vector = __lowerInternref(vector) || __notnull(); return exports.vectorInstanceInfinityNorm(vector); }, vectorInstanceMax(vector) { // wasm/src/vector/vectorInstanceMax(wasm/src/vector/Vector) => f64 vector = __lowerInternref(vector) || __notnull(); return exports.vectorInstanceMax(vector); }, vectorInstanceMin(vector) { // wasm/src/vector/vectorInstanceMin(wasm/src/vector/Vector) => f64 vector = __lowerInternref(vector) || __notnull(); return exports.vectorInstanceMin(vector); }, vectorInstanceMode(vector) { // wasm/src/vector/vectorInstanceMode(wasm/src/vector/Vector) => ~lib/typedarray/Float64Array vector = __lowerInternref(vector) || __notnull(); return __liftTypedArray(Float64Array, exports.vectorInstanceMode(vector) >>> 0); }, vectorInstanceNeg(vector, resultVector) { // wasm/src/vector/vectorInstanceNeg(wasm/src/vector/Vector, wasm/src/vector/Vector) => void vector = __retain(__lowerInternref(vector) || __notnull()); resultVector = __lowerInternref(resultVector) || __notnull(); try { exports.vectorInstanceNeg(vector, resultVector); } finally { __release(vector); } }, vectorInstancePNorm(vector, p) { // wasm/src/vector/vectorInstancePNorm(wasm/src/vector/Vector, f32) => f64 vector = __lowerInternref(vector) || __notnull(); return exports.vectorInstancePNorm(vector, p); }, vectorInstanceSetValue(vector, index, value) { // wasm/src/vector/vectorInstanceSetValue(wasm/src/vector/Vector, u32, f64) => bool vector = __lowerInternref(vector) || __notnull(); return exports.vectorInstanceSetValue(vector, index, value) != 0; }, vectorInstanceSum(vector) { // wasm/src/vector/vectorInstanceSum(wasm/src/vector/Vector) => f64 vector = __lowerInternref(vector) || __notnull(); return exports.vectorInstanceSum(vector); }, vectorInstanceToBuffer(vector) { // wasm/src/vector/vectorInstanceToBuffer(wasm/src/vector/Vector) => ~lib/arraybuffer/ArrayBuffer vector = __lowerInternref(vector) || __notnull(); return __liftBuffer(exports.vectorInstanceToBuffer(vector) >>> 0); }, vectorStaticAdd(aVector, bVector, resultVector) { // wasm/src/vector/vectorStaticAdd(wasm/src/vector/Vector, wasm/src/vector/Vector, wasm/src/vector/Vector) => void aVector = __retain(__lowerInternref(aVector) || __notnull()); bVector = __retain(__lowerInternref(bVector) || __notnull()); resultVector = __lowerInternref(resultVector) || __notnull(); try { exports.vectorStaticAdd(aVector, bVector, resultVector); } finally { __release(aVector); __release(bVector); } }, vectorStaticCmp(aVector, bVector) { // wasm/src/vector/vectorStaticCmp(wasm/src/vector/Vector, wasm/src/vector/Vector) => ~lib/arraybuffer/ArrayBuffer aVector = __retain(__lowerInternref(aVector) || __notnull()); bVector = __lowerInternref(bVector) || __notnull(); try { return __liftBuffer(exports.vectorStaticCmp(aVector, bVector) >>> 0); } finally { __release(aVector); } }, vectorStaticCosineSimilarity(aVector, bVector) { // wasm/src/vector/vectorStaticCosineSimilarity(wasm/src/vector/Vector, wasm/src/vector/Vector) => f64 aVector = __retain(__lowerInternref(aVector) || __notnull()); bVector = __lowerInternref(bVector) || __notnull(); try { return exports.vectorStaticCosineSimilarity(aVector, bVector); } finally { __release(aVector); } }, vectorStaticDiv(aVector, bVector, resultVector) { // wasm/src/vector/vectorStaticDiv(wasm/src/vector/Vector, wasm/src/vector/Vector, wasm/src/vector/Vector) => void aVector = __retain(__lowerInternref(aVector) || __notnull()); bVector = __retain(__lowerInternref(bVector) || __notnull()); resultVector = __lowerInternref(resultVector) || __notnull(); try { exports.vectorStaticDiv(aVector, bVector, resultVector); } finally { __release(aVector); __release(bVector); } }, vectorStaticDot(aVector, bVector) { // wasm/src/vector/vectorStaticDot(wasm/src/vector/Vector, wasm/src/vector/Vector) => f64 aVector = __retain(__lowerInternref(aVector) || __notnull()); bVector = __lowerInternref(bVector) || __notnull(); try { return exports.vectorStaticDot(aVector, bVector); } finally { __release(aVector); } }, vectorStaticFromBuffer(buffer) { // wasm/src/vector/vectorStaticFromBuffer(~lib/arraybuffer/ArrayBuffer) => wasm/src/vector/Vector buffer = __lowerBuffer(buffer) || __notnull(); return __liftInternref(exports.vectorStaticFromBuffer(buffer) >>> 0); }, vectorStaticMod(aVector, bVector, resultVector) { // wasm/src/vector/vectorStaticMod(wasm/src/vector/Vector, wasm/src/vector/Vector, wasm/src/vector/Vector) => void aVector = __retain(__lowerInternref(aVector) || __notnull()); bVector = __retain(__lowerInternref(bVector) || __notnull()); resultVector = __lowerInternref(resultVector) || __notnull(); try { exports.vectorStaticMod(aVector, bVector, resultVector); } finally { __release(aVector); __release(bVector); } }, vectorStaticMul(aVector, bVector, resultVector) { // wasm/src/vector/vectorStaticMul(wasm/src/vector/Vector, wasm/src/vector/Vector, wasm/src/vector/Vector) => void aVector = __retain(__lowerInternref(aVector) || __notnull()); bVector = __retain(__lowerInternref(bVector) || __notnull()); resultVector = __lowerInternref(resultVector) || __notnull(); try { exports.vectorStaticMul(aVector, bVector, resultVector); } finally { __release(aVector); __release(bVector); } }, vectorStaticOnes(dimensions, elementByteSize) { // wasm/src/vector/vectorStaticOnes(u32, u8) => wasm/src/vector/Vector return __liftInternref(exports.vectorStaticOnes(dimensions, elementByteSize) >>> 0); }, vectorStaticSub(aVector, bVector, resultVector) { // wasm/src/vector/vectorStaticSub(wasm/src/vector/Vector, wasm/src/vector/Vector, wasm/src/vector/Vector) => void aVector = __retain(__lowerInternref(aVector) || __notnull()); bVector = __retain(__lowerInternref(bVector) || __notnull()); resultVector = __lowerInternref(resultVector) || __notnull(); try { exports.vectorStaticSub(aVector, bVector, resultVector); } finally { __release(aVector); __release(bVector); } }, vectorIteratorCreate(vector) { // wasm/src/vector-iterator/vectorIteratorCreate(wasm/src/vector/Vector) => wasm/src/vector-iterator/VectorIterator vector = __lowerInternref(vector) || __notnull(); return __liftInternref(exports.vectorIteratorCreate(vector) >>> 0); }, vectorIteratorInstanceNext(iterator) { // wasm/src/vector-iterator/vectorIteratorInstanceNext(wasm/src/vector-iterator/VectorIterator) => wasm/src/vector-iterator/VectorIteratorNext iterator = __lowerInternref(iterator) || __notnull(); return __liftRecord19(exports.vectorIteratorInstanceNext(iterator) >>> 0); }, }, exports); function __liftRecord19(pointer) { // wasm/src/vector-iterator/VectorIteratorNext // Hint: Opt-out from lifting as a record by providing an empty constructor if (!pointer) return null; return { isDone: __getU8(pointer + 0) != 0, value: __getF64(pointer + 8), }; } function __liftBuffer(pointer) { if (!pointer) return null; return memory.buffer.slice(pointer, pointer + new Uint32Array(memory.buffer)[pointer - 4 >>> 2]); } function __lowerBuffer(value) { if (value == null) return 0; const pointer = exports.__new(value.byteLength, 1) >>> 0; new Uint8Array(memory.buffer).set(new Uint8Array(value), pointer); return pointer; } function __liftString(pointer) { if (!pointer) return null; const end = pointer + new Uint32Array(memory.buffer)[pointer - 4 >>> 2] >>> 1, memoryU16 = new Uint16Array(memory.buffer); let start = pointer >>> 1, string = ""; while (end - start > 1024) string += String.fromCharCode(...memoryU16.subarray(start, start += 1024)); return string + String.fromCharCode(...memoryU16.subarray(start, end)); } function __liftTypedArray(constructor, pointer) { if (!pointer) return null; return new constructor( memory.buffer, __getU32(pointer + 4), __dataview.getUint32(pointer + 8, true) / constructor.BYTES_PER_ELEMENT ).slice(); } class Internref extends Number {} const registry = new FinalizationRegistry(__release); function __liftInternref(pointer) { if (!pointer) return null; const sentinel = new Internref(__retain(pointer)); registry.register(sentinel, pointer); return sentinel; } function __lowerInternref(value) { if (value == null) return 0; if (value instanceof Internref) return value.valueOf(); throw TypeError("internref expected"); } const refcounts = new Map(); function __retain(pointer) { if (pointer) { const refcount = refcounts.get(pointer); if (refcount) refcounts.set(pointer, refcount + 1); else refcounts.set(exports.__pin(pointer), 1); } return pointer; } function __release(pointer) { if (pointer) { const refcount = refcounts.get(pointer); if (refcount === 1) exports.__unpin(pointer), refcounts.delete(pointer); else if (refcount) refcounts.set(pointer, refcount - 1); else throw Error(`invalid refcount '${refcount}' for reference '${pointer}'`); } } function __notnull() { throw TypeError("value must not be null"); } let __dataview = new DataView(memory.buffer); function __getU8(pointer) { try { return __dataview.getUint8(pointer, true); } catch { __dataview = new DataView(memory.buffer); return __dataview.getUint8(pointer, true); } } function __getU32(pointer) { try { return __dataview.getUint32(pointer, true); } catch { __dataview = new DataView(memory.buffer); return __dataview.getUint32(pointer, true); } } function __getF64(pointer) { try { return __dataview.getFloat64(pointer, true); } catch { __dataview = new DataView(memory.buffer); return __dataview.getFloat64(pointer, true); } } return adaptedExports; }