{
  "version": 3,
  "sources": ["../wasm/index.cjs", "../src/index.ts", "../../common/src/init-wasm.ts", "../../common/src/wasm/index.d.ts", "../../common/src/utils.ts", "../../common/src/version.ts", "../src/init.ts", "../src/geometry/binary-geometry.ts", "../src/weights/distance-neighbors.ts", "../src/weights/neighbor-match-test.ts", "../src/weights/kernel-knn-weights.ts", "../src/weights/kernel-weights.ts", "../src/weights/nearest-neighbors.ts", "../src/weights/weights-stats.ts", "../src/geometry/geojson-geometry.ts", "../src/geometry/point-layer-geometry.ts", "../src/geometry/utils.ts", "../src/weights/contiguity-neighbors.ts", "../src/weights/utils.ts", "../src/geometry/attributes.ts", "../src/geometry/buffer.ts", "../src/geometry/centroid.ts", "../src/geometry/spatial-dissolve.ts", "../src/geometry/spatial-join.ts", "../src/geometry/thiessen-polygon.ts", "../src/geometry/mst.ts", "../src/geometry/cartogram.ts", "../src/clustering/schc.ts", "../src/clustering/redcap.ts", "../src/clustering/skater.ts", "../src/clustering/azp.ts", "../src/clustering/maxp.ts", "../src/clustering/spatial-validation.ts", "../src/clustering/make-spatial.ts", "../src/mapping/quantile.ts", "../src/mapping/natural-breaks.ts", "../src/mapping/equal-interval-breaks.ts", "../src/mapping/percentile-breaks.ts", "../src/mapping/box-breaks.ts", "../src/mapping/stddev-breaks.ts", "../src/mapping/rates.ts", "../src/utils/validation.ts", "../src/data/deviation.ts", "../src/data/mad.ts", "../src/data/rangeAdjust.ts", "../src/data/rangeStandardize.ts", "../src/data/standardize.ts"],
  "sourcesContent": ["var geoda=(()=>{var _scriptName=globalThis.document?.currentScript?.src;return async function(moduleArg={}){var moduleRtn;var Module=moduleArg;var ENVIRONMENT_IS_WEB=!!globalThis.window;var ENVIRONMENT_IS_WORKER=typeof importScripts==\"function\";var ENVIRONMENT_IS_NODE=globalThis.process?.versions?.node&&globalThis.process?.type!=\"renderer\";var arguments_=[];var thisProgram=\"./this.program\";var quit_=(status,toThrow)=>{throw toThrow};if(typeof __filename!=\"undefined\"){_scriptName=__filename}else if(ENVIRONMENT_IS_WORKER){_scriptName=self.location.href}var scriptDirectory=\"\";function locateFile(path){if(Module[\"locateFile\"]){return Module[\"locateFile\"](path,scriptDirectory)}return scriptDirectory+path}var readAsync,readBinary;if(ENVIRONMENT_IS_NODE){var fs=require(\"fs\");scriptDirectory=__dirname+\"/\";readBinary=filename=>{filename=isFileURI(filename)?new URL(filename):filename;var ret=fs.readFileSync(filename);return ret};readAsync=async(filename,binary=true)=>{filename=isFileURI(filename)?new URL(filename):filename;var ret=fs.readFileSync(filename,binary?undefined:\"utf8\");return ret};if(process.argv.length>1){thisProgram=process.argv[1].replace(/\\\\/g,\"/\")}arguments_=process.argv.slice(2);quit_=(status,toThrow)=>{process.exitCode=status;throw toThrow}}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){try{scriptDirectory=new URL(\".\",_scriptName).href}catch{}{if(ENVIRONMENT_IS_WORKER){readBinary=url=>{var xhr=new XMLHttpRequest;xhr.open(\"GET\",url,false);xhr.responseType=\"arraybuffer\";xhr.send(null);return new Uint8Array(xhr.response)}}readAsync=async url=>{if(isFileURI(url)){return new Promise((resolve,reject)=>{var xhr=new XMLHttpRequest;xhr.open(\"GET\",url,true);xhr.responseType=\"arraybuffer\";xhr.onload=()=>{if(xhr.status==200||xhr.status==0&&xhr.response){resolve(xhr.response);return}reject(xhr.status)};xhr.onerror=reject;xhr.send(null)})}var response=await fetch(url,{credentials:\"same-origin\"});if(response.ok){return response.arrayBuffer()}throw new Error(response.status+\" : \"+response.url)}}}else{}var out=console.log.bind(console);var err=console.error.bind(console);var wasmBinary;var ABORT=false;var isFileURI=filename=>filename.startsWith(\"file://\");var readyPromiseResolve,readyPromiseReject;var HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;var runtimeInitialized=false;function updateMemoryViews(){var b=wasmMemory.buffer;HEAP8=new Int8Array(b);HEAP16=new Int16Array(b);HEAPU8=new Uint8Array(b);HEAPU16=new Uint16Array(b);HEAP32=new Int32Array(b);HEAPU32=new Uint32Array(b);HEAPF32=new Float32Array(b);HEAPF64=new Float64Array(b)}function preRun(){if(Module[\"preRun\"]){if(typeof Module[\"preRun\"]==\"function\")Module[\"preRun\"]=[Module[\"preRun\"]];while(Module[\"preRun\"].length){addOnPreRun(Module[\"preRun\"].shift())}}callRuntimeCallbacks(onPreRuns)}function initRuntime(){runtimeInitialized=true;wasmExports[\"E\"]()}function postRun(){if(Module[\"postRun\"]){if(typeof Module[\"postRun\"]==\"function\")Module[\"postRun\"]=[Module[\"postRun\"]];while(Module[\"postRun\"].length){addOnPostRun(Module[\"postRun\"].shift())}}callRuntimeCallbacks(onPostRuns)}function abort(what){Module[\"onAbort\"]?.(what);what=\"Aborted(\"+what+\")\";err(what);ABORT=true;what+=\". Build with -sASSERTIONS for more info.\";var e=new WebAssembly.RuntimeError(what);readyPromiseReject?.(e);throw e}var wasmBinaryFile;function findWasmBinary(){return locateFile(\"geoda-core.wasm\")}function getBinarySync(file){if(file==wasmBinaryFile&&wasmBinary){return new Uint8Array(wasmBinary)}if(readBinary){return readBinary(file)}throw\"both async and sync fetching of the wasm failed\"}async function getWasmBinary(binaryFile){if(!wasmBinary){try{var response=await readAsync(binaryFile);return new Uint8Array(response)}catch{}}return getBinarySync(binaryFile)}async function instantiateArrayBuffer(binaryFile,imports){try{var binary=await getWasmBinary(binaryFile);var instance=await WebAssembly.instantiate(binary,imports);return instance}catch(reason){err(`failed to asynchronously prepare wasm: ${reason}`);abort(reason)}}async function instantiateAsync(binary,binaryFile,imports){if(!binary&&!isFileURI(binaryFile)&&!ENVIRONMENT_IS_NODE){try{var response=fetch(binaryFile,{credentials:\"same-origin\"});var instantiationResult=await WebAssembly.instantiateStreaming(response,imports);return instantiationResult}catch(reason){err(`wasm streaming compile failed: ${reason}`);err(\"falling back to ArrayBuffer instantiation\")}}return instantiateArrayBuffer(binaryFile,imports)}function getWasmImports(){var imports={a:wasmImports};return imports}async function createWasm(){function receiveInstance(instance,module){wasmExports=instance.exports;wasmExports=applySignatureConversions(wasmExports);assignWasmExports(wasmExports);updateMemoryViews();return wasmExports}function receiveInstantiationResult(result){return receiveInstance(result[\"instance\"])}var info=getWasmImports();if(Module[\"instantiateWasm\"]){return new Promise((resolve,reject)=>{Module[\"instantiateWasm\"](info,(inst,mod)=>{resolve(receiveInstance(inst,mod))})})}wasmBinaryFile??=findWasmBinary();var result=await instantiateAsync(wasmBinary,wasmBinaryFile,info);var exports=receiveInstantiationResult(result);return exports}class ExitStatus{name=\"ExitStatus\";constructor(status){this.message=`Program terminated with exit(${status})`;this.status=status}}var callRuntimeCallbacks=callbacks=>{while(callbacks.length>0){callbacks.shift()(Module)}};var onPostRuns=[];var addOnPostRun=cb=>onPostRuns.push(cb);var onPreRuns=[];var addOnPreRun=cb=>onPreRuns.push(cb);var noExitRuntime=true;var exceptionCaught=[];var exceptionLast=0;var uncaughtExceptionCount=0;var ___cxa_rethrow=()=>{var info=exceptionCaught.pop();if(!info){abort(\"no exception to throw\")}var ptr=info.excPtr;if(!info.get_rethrown()){exceptionCaught.push(info);info.set_rethrown(true);info.set_caught(false);uncaughtExceptionCount++}exceptionLast=ptr;throw exceptionLast};class ExceptionInfo{constructor(excPtr){this.excPtr=excPtr;this.ptr=excPtr-24}set_type(type){HEAPU32[this.ptr+4>>>2>>>0]=type}get_type(){return HEAPU32[this.ptr+4>>>2>>>0]}set_destructor(destructor){HEAPU32[this.ptr+8>>>2>>>0]=destructor}get_destructor(){return HEAPU32[this.ptr+8>>>2>>>0]}set_caught(caught){caught=caught?1:0;HEAP8[this.ptr+12>>>0]=caught}get_caught(){return HEAP8[this.ptr+12>>>0]!=0}set_rethrown(rethrown){rethrown=rethrown?1:0;HEAP8[this.ptr+13>>>0]=rethrown}get_rethrown(){return HEAP8[this.ptr+13>>>0]!=0}init(type,destructor){this.set_adjusted_ptr(0);this.set_type(type);this.set_destructor(destructor)}set_adjusted_ptr(adjustedPtr){HEAPU32[this.ptr+16>>>2>>>0]=adjustedPtr}get_adjusted_ptr(){return HEAPU32[this.ptr+16>>>2>>>0]}}var convertI32PairToI53Checked=(lo,hi)=>hi+2097152>>>0<4194305-!!lo?(lo>>>0)+hi*4294967296:NaN;function ___cxa_throw(ptr,type,destructor){ptr>>>=0;type>>>=0;destructor>>>=0;var info=new ExceptionInfo(ptr);info.init(type,destructor);exceptionLast=ptr;uncaughtExceptionCount++;throw exceptionLast}var __abort_js=()=>abort(\"\");function __embind_register_bigint(primitiveType,name,size,minRange,maxRange){primitiveType>>>=0;name>>>=0;size>>>=0}var AsciiToString=ptr=>{ptr>>>=0;var str=\"\";while(1){var ch=HEAPU8[ptr++>>>0];if(!ch)return str;str+=String.fromCharCode(ch)}};var awaitingDependencies={};var registeredTypes={};var typeDependencies={};var BindingError=class BindingError extends Error{constructor(message){super(message);this.name=\"BindingError\"}};var throwBindingError=message=>{throw new BindingError(message)};function sharedRegisterType(rawType,registeredInstance,options={}){var name=registeredInstance.name;if(!rawType){throwBindingError(`type \"${name}\" must have a positive integer typeid pointer`)}if(registeredTypes.hasOwnProperty(rawType)){if(options.ignoreDuplicateRegistrations){return}else{throwBindingError(`Cannot register type '${name}' twice`)}}registeredTypes[rawType]=registeredInstance;delete typeDependencies[rawType];if(awaitingDependencies.hasOwnProperty(rawType)){var callbacks=awaitingDependencies[rawType];delete awaitingDependencies[rawType];callbacks.forEach(cb=>cb())}}function registerType(rawType,registeredInstance,options={}){return sharedRegisterType(rawType,registeredInstance,options)}function __embind_register_bool(rawType,name,trueValue,falseValue){rawType>>>=0;name>>>=0;name=AsciiToString(name);registerType(rawType,{name,fromWireType:function(wt){return!!wt},toWireType:function(destructors,o){return o?trueValue:falseValue},readValueFromPointer:function(pointer){return this.fromWireType(HEAPU8[pointer>>>0])},destructorFunction:null})}var shallowCopyInternalPointer=o=>({count:o.count,deleteScheduled:o.deleteScheduled,preservePointerOnDelete:o.preservePointerOnDelete,ptr:o.ptr,ptrType:o.ptrType,smartPtr:o.smartPtr,smartPtrType:o.smartPtrType});var throwInstanceAlreadyDeleted=obj=>{function getInstanceTypeName(handle){return handle.$$.ptrType.registeredClass.name}throwBindingError(getInstanceTypeName(obj)+\" instance already deleted\")};var finalizationRegistry=false;var detachFinalizer=handle=>{};var runDestructor=$$=>{if($$.smartPtr){$$.smartPtrType.rawDestructor($$.smartPtr)}else{$$.ptrType.registeredClass.rawDestructor($$.ptr)}};var releaseClassHandle=$$=>{$$.count.value-=1;var toDelete=0===$$.count.value;if(toDelete){runDestructor($$)}};var attachFinalizer=handle=>{if(!globalThis.FinalizationRegistry){attachFinalizer=handle=>handle;return handle}finalizationRegistry=new FinalizationRegistry(info=>{releaseClassHandle(info.$$)});attachFinalizer=handle=>{var $$=handle.$$;var hasSmartPtr=!!$$.smartPtr;if(hasSmartPtr){var info={$$};finalizationRegistry.register(handle,info,handle)}return handle};detachFinalizer=handle=>finalizationRegistry.unregister(handle);return attachFinalizer(handle)};var deletionQueue=[];var flushPendingDeletes=()=>{while(deletionQueue.length){var obj=deletionQueue.pop();obj.$$.deleteScheduled=false;obj[\"delete\"]()}};var delayFunction;var init_ClassHandle=()=>{let proto=ClassHandle.prototype;Object.assign(proto,{isAliasOf(other){if(!(this instanceof ClassHandle)){return false}if(!(other instanceof ClassHandle)){return false}var leftClass=this.$$.ptrType.registeredClass;var left=this.$$.ptr;other.$$=other.$$;var rightClass=other.$$.ptrType.registeredClass;var right=other.$$.ptr;while(leftClass.baseClass){left=leftClass.upcast(left);leftClass=leftClass.baseClass}while(rightClass.baseClass){right=rightClass.upcast(right);rightClass=rightClass.baseClass}return leftClass===rightClass&&left===right},clone(){if(!this.$$.ptr){throwInstanceAlreadyDeleted(this)}if(this.$$.preservePointerOnDelete){this.$$.count.value+=1;return this}else{var clone=attachFinalizer(Object.create(Object.getPrototypeOf(this),{$$:{value:shallowCopyInternalPointer(this.$$)}}));clone.$$.count.value+=1;clone.$$.deleteScheduled=false;return clone}},delete(){if(!this.$$.ptr){throwInstanceAlreadyDeleted(this)}if(this.$$.deleteScheduled&&!this.$$.preservePointerOnDelete){throwBindingError(\"Object already scheduled for deletion\")}detachFinalizer(this);releaseClassHandle(this.$$);if(!this.$$.preservePointerOnDelete){this.$$.smartPtr=undefined;this.$$.ptr=undefined}},isDeleted(){return!this.$$.ptr},deleteLater(){if(!this.$$.ptr){throwInstanceAlreadyDeleted(this)}if(this.$$.deleteScheduled&&!this.$$.preservePointerOnDelete){throwBindingError(\"Object already scheduled for deletion\")}deletionQueue.push(this);if(deletionQueue.length===1&&delayFunction){delayFunction(flushPendingDeletes)}this.$$.deleteScheduled=true;return this}});const symbolDispose=Symbol.dispose;if(symbolDispose){proto[symbolDispose]=proto[\"delete\"]}};function ClassHandle(){}var createNamedFunction=(name,func)=>Object.defineProperty(func,\"name\",{value:name});var registeredPointers={};var ensureOverloadTable=(proto,methodName,humanName)=>{if(undefined===proto[methodName].overloadTable){var prevFunc=proto[methodName];proto[methodName]=function(...args){if(!proto[methodName].overloadTable.hasOwnProperty(args.length)){throwBindingError(`Function '${humanName}' called with an invalid number of arguments (${args.length}) - expects one of (${proto[methodName].overloadTable})!`)}return proto[methodName].overloadTable[args.length].apply(this,args)};proto[methodName].overloadTable=[];proto[methodName].overloadTable[prevFunc.argCount]=prevFunc}};var exposePublicSymbol=(name,value,numArguments)=>{if(Module.hasOwnProperty(name)){if(undefined===numArguments||undefined!==Module[name].overloadTable&&undefined!==Module[name].overloadTable[numArguments]){throwBindingError(`Cannot register public name '${name}' twice`)}ensureOverloadTable(Module,name,name);if(Module[name].overloadTable.hasOwnProperty(numArguments)){throwBindingError(`Cannot register multiple overloads of a function with the same number of arguments (${numArguments})!`)}Module[name].overloadTable[numArguments]=value}else{Module[name]=value;Module[name].argCount=numArguments}};var char_0=48;var char_9=57;var makeLegalFunctionName=name=>{name=name.replace(/[^a-zA-Z0-9_]/g,\"$\");var f=name.charCodeAt(0);if(f>=char_0&&f<=char_9){return`_${name}`}return name};function RegisteredClass(name,constructor,instancePrototype,rawDestructor,baseClass,getActualType,upcast,downcast){this.name=name;this.constructor=constructor;this.instancePrototype=instancePrototype;this.rawDestructor=rawDestructor;this.baseClass=baseClass;this.getActualType=getActualType;this.upcast=upcast;this.downcast=downcast;this.pureVirtualFunctions=[]}var upcastPointer=(ptr,ptrClass,desiredClass)=>{while(ptrClass!==desiredClass){if(!ptrClass.upcast){throwBindingError(`Expected null or instance of ${desiredClass.name}, got an instance of ${ptrClass.name}`)}ptr=ptrClass.upcast(ptr);ptrClass=ptrClass.baseClass}return ptr};var embindRepr=v=>{if(v===null){return\"null\"}var t=typeof v;if(t===\"object\"||t===\"array\"||t===\"function\"){return v.toString()}else{return\"\"+v}};function constNoSmartPtrRawPointerToWireType(destructors,handle){if(handle===null){if(this.isReference){throwBindingError(`null is not a valid ${this.name}`)}return 0}if(!handle.$$){throwBindingError(`Cannot pass \"${embindRepr(handle)}\" as a ${this.name}`)}if(!handle.$$.ptr){throwBindingError(`Cannot pass deleted object as a pointer of type ${this.name}`)}var handleClass=handle.$$.ptrType.registeredClass;var ptr=upcastPointer(handle.$$.ptr,handleClass,this.registeredClass);return ptr}function genericPointerToWireType(destructors,handle){var ptr;if(handle===null){if(this.isReference){throwBindingError(`null is not a valid ${this.name}`)}if(this.isSmartPointer){ptr=this.rawConstructor();if(destructors!==null){destructors.push(this.rawDestructor,ptr)}return ptr}else{return 0}}if(!handle||!handle.$$){throwBindingError(`Cannot pass \"${embindRepr(handle)}\" as a ${this.name}`)}if(!handle.$$.ptr){throwBindingError(`Cannot pass deleted object as a pointer of type ${this.name}`)}if(!this.isConst&&handle.$$.ptrType.isConst){throwBindingError(`Cannot convert argument of type ${handle.$$.smartPtrType?handle.$$.smartPtrType.name:handle.$$.ptrType.name} to parameter type ${this.name}`)}var handleClass=handle.$$.ptrType.registeredClass;ptr=upcastPointer(handle.$$.ptr,handleClass,this.registeredClass);if(this.isSmartPointer){if(undefined===handle.$$.smartPtr){throwBindingError(\"Passing raw pointer to smart pointer is illegal\")}switch(this.sharingPolicy){case 0:if(handle.$$.smartPtrType===this){ptr=handle.$$.smartPtr}else{throwBindingError(`Cannot convert argument of type ${handle.$$.smartPtrType?handle.$$.smartPtrType.name:handle.$$.ptrType.name} to parameter type ${this.name}`)}break;case 1:ptr=handle.$$.smartPtr;break;case 2:if(handle.$$.smartPtrType===this){ptr=handle.$$.smartPtr}else{var clonedHandle=handle[\"clone\"]();ptr=this.rawShare(ptr,Emval.toHandle(()=>clonedHandle[\"delete\"]()));if(destructors!==null){destructors.push(this.rawDestructor,ptr)}}break;default:throwBindingError(\"Unsupported sharing policy\")}}return ptr}function nonConstNoSmartPtrRawPointerToWireType(destructors,handle){if(handle===null){if(this.isReference){throwBindingError(`null is not a valid ${this.name}`)}return 0}if(!handle.$$){throwBindingError(`Cannot pass \"${embindRepr(handle)}\" as a ${this.name}`)}if(!handle.$$.ptr){throwBindingError(`Cannot pass deleted object as a pointer of type ${this.name}`)}if(handle.$$.ptrType.isConst){throwBindingError(`Cannot convert argument of type ${handle.$$.ptrType.name} to parameter type ${this.name}`)}var handleClass=handle.$$.ptrType.registeredClass;var ptr=upcastPointer(handle.$$.ptr,handleClass,this.registeredClass);return ptr}function readPointer(pointer){return this.fromWireType(HEAPU32[pointer>>>2>>>0])}var downcastPointer=(ptr,ptrClass,desiredClass)=>{if(ptrClass===desiredClass){return ptr}if(undefined===desiredClass.baseClass){return null}var rv=downcastPointer(ptr,ptrClass,desiredClass.baseClass);if(rv===null){return null}return desiredClass.downcast(rv)};var registeredInstances={};var getBasestPointer=(class_,ptr)=>{if(ptr===undefined){throwBindingError(\"ptr should not be undefined\")}while(class_.baseClass){ptr=class_.upcast(ptr);class_=class_.baseClass}return ptr};var getInheritedInstance=(class_,ptr)=>{ptr=getBasestPointer(class_,ptr);return registeredInstances[ptr]};var InternalError=class InternalError extends Error{constructor(message){super(message);this.name=\"InternalError\"}};var throwInternalError=message=>{throw new InternalError(message)};var makeClassHandle=(prototype,record)=>{if(!record.ptrType||!record.ptr){throwInternalError(\"makeClassHandle requires ptr and ptrType\")}var hasSmartPtrType=!!record.smartPtrType;var hasSmartPtr=!!record.smartPtr;if(hasSmartPtrType!==hasSmartPtr){throwInternalError(\"Both smartPtrType and smartPtr must be specified\")}record.count={value:1};return attachFinalizer(Object.create(prototype,{$$:{value:record,writable:true}}))};function RegisteredPointer_fromWireType(ptr){var rawPointer=this.getPointee(ptr);if(!rawPointer){this.destructor(ptr);return null}var registeredInstance=getInheritedInstance(this.registeredClass,rawPointer);if(undefined!==registeredInstance){if(0===registeredInstance.$$.count.value){registeredInstance.$$.ptr=rawPointer;registeredInstance.$$.smartPtr=ptr;return registeredInstance[\"clone\"]()}else{var rv=registeredInstance[\"clone\"]();this.destructor(ptr);return rv}}function makeDefaultHandle(){if(this.isSmartPointer){return makeClassHandle(this.registeredClass.instancePrototype,{ptrType:this.pointeeType,ptr:rawPointer,smartPtrType:this,smartPtr:ptr})}else{return makeClassHandle(this.registeredClass.instancePrototype,{ptrType:this,ptr})}}var actualType=this.registeredClass.getActualType(rawPointer);var registeredPointerRecord=registeredPointers[actualType];if(!registeredPointerRecord){return makeDefaultHandle.call(this)}var toType;if(this.isConst){toType=registeredPointerRecord.constPointerType}else{toType=registeredPointerRecord.pointerType}var dp=downcastPointer(rawPointer,this.registeredClass,toType.registeredClass);if(dp===null){return makeDefaultHandle.call(this)}if(this.isSmartPointer){return makeClassHandle(toType.registeredClass.instancePrototype,{ptrType:toType,ptr:dp,smartPtrType:this,smartPtr:ptr})}else{return makeClassHandle(toType.registeredClass.instancePrototype,{ptrType:toType,ptr:dp})}}var init_RegisteredPointer=()=>{Object.assign(RegisteredPointer.prototype,{getPointee(ptr){if(this.rawGetPointee){ptr=this.rawGetPointee(ptr)}return ptr},destructor(ptr){this.rawDestructor?.(ptr)},readValueFromPointer:readPointer,fromWireType:RegisteredPointer_fromWireType})};function RegisteredPointer(name,registeredClass,isReference,isConst,isSmartPointer,pointeeType,sharingPolicy,rawGetPointee,rawConstructor,rawShare,rawDestructor){this.name=name;this.registeredClass=registeredClass;this.isReference=isReference;this.isConst=isConst;this.isSmartPointer=isSmartPointer;this.pointeeType=pointeeType;this.sharingPolicy=sharingPolicy;this.rawGetPointee=rawGetPointee;this.rawConstructor=rawConstructor;this.rawShare=rawShare;this.rawDestructor=rawDestructor;if(!isSmartPointer&&registeredClass.baseClass===undefined){if(isConst){this.toWireType=constNoSmartPtrRawPointerToWireType;this.destructorFunction=null}else{this.toWireType=nonConstNoSmartPtrRawPointerToWireType;this.destructorFunction=null}}else{this.toWireType=genericPointerToWireType}}var replacePublicSymbol=(name,value,numArguments)=>{if(!Module.hasOwnProperty(name)){throwInternalError(\"Replacing nonexistent public symbol\")}if(undefined!==Module[name].overloadTable&&undefined!==numArguments){Module[name].overloadTable[numArguments]=value}else{Module[name]=value;Module[name].argCount=numArguments}};var dynCalls={};var dynCallLegacy=(sig,ptr,args)=>{sig=sig.replace(/p/g,\"i\");var f=dynCalls[sig];return f(ptr,...args)};var wasmTableMirror=[];var getWasmTableEntry=funcPtr=>{var func=wasmTableMirror[funcPtr];if(!func){wasmTableMirror[funcPtr]=func=wasmTable.get(funcPtr)}return func};var dynCall=(sig,ptr,args=[],promising=false)=>{if(sig.includes(\"j\")){return dynCallLegacy(sig,ptr,args)}var func=getWasmTableEntry(ptr);var rtn=func(...args);function convert(rtn){return sig[0]==\"p\"?rtn>>>0:rtn}return convert(rtn)};var getDynCaller=(sig,ptr,promising=false)=>(...args)=>dynCall(sig,ptr,args,promising);var embind__requireFunction=(signature,rawFunction,isAsync=false)=>{signature=AsciiToString(signature);function makeDynCaller(){if(signature.includes(\"j\")){return getDynCaller(signature,rawFunction)}if(signature.includes(\"p\")){return getDynCaller(signature,rawFunction,isAsync)}var rtn=getWasmTableEntry(rawFunction);return rtn}var fp=makeDynCaller();if(typeof fp!=\"function\"){throwBindingError(`unknown function pointer with signature ${signature}: ${rawFunction}`)}return fp};class UnboundTypeError extends Error{}var getTypeName=type=>{var ptr=___getTypeName(type);var rv=AsciiToString(ptr);_free(ptr);return rv};var throwUnboundTypeError=(message,types)=>{var unboundTypes=[];var seen={};function visit(type){if(seen[type]){return}if(registeredTypes[type]){return}if(typeDependencies[type]){typeDependencies[type].forEach(visit);return}unboundTypes.push(type);seen[type]=true}types.forEach(visit);throw new UnboundTypeError(`${message}: `+unboundTypes.map(getTypeName).join([\", \"]))};var whenDependentTypesAreResolved=(myTypes,dependentTypes,getTypeConverters)=>{myTypes.forEach(type=>typeDependencies[type]=dependentTypes);function onComplete(typeConverters){var myTypeConverters=getTypeConverters(typeConverters);if(myTypeConverters.length!==myTypes.length){throwInternalError(\"Mismatched type converter count\")}for(var i=0;i<myTypes.length;++i){registerType(myTypes[i],myTypeConverters[i])}}var typeConverters=new Array(dependentTypes.length);var unregisteredTypes=[];var registered=0;for(let[i,dt]of dependentTypes.entries()){if(registeredTypes.hasOwnProperty(dt)){typeConverters[i]=registeredTypes[dt]}else{unregisteredTypes.push(dt);if(!awaitingDependencies.hasOwnProperty(dt)){awaitingDependencies[dt]=[]}awaitingDependencies[dt].push(()=>{typeConverters[i]=registeredTypes[dt];++registered;if(registered===unregisteredTypes.length){onComplete(typeConverters)}})}}if(0===unregisteredTypes.length){onComplete(typeConverters)}};function __embind_register_class(rawType,rawPointerType,rawConstPointerType,baseClassRawType,getActualTypeSignature,getActualType,upcastSignature,upcast,downcastSignature,downcast,name,destructorSignature,rawDestructor){rawType>>>=0;rawPointerType>>>=0;rawConstPointerType>>>=0;baseClassRawType>>>=0;getActualTypeSignature>>>=0;getActualType>>>=0;upcastSignature>>>=0;upcast>>>=0;downcastSignature>>>=0;downcast>>>=0;name>>>=0;destructorSignature>>>=0;rawDestructor>>>=0;name=AsciiToString(name);getActualType=embind__requireFunction(getActualTypeSignature,getActualType);upcast&&=embind__requireFunction(upcastSignature,upcast);downcast&&=embind__requireFunction(downcastSignature,downcast);rawDestructor=embind__requireFunction(destructorSignature,rawDestructor);var legalFunctionName=makeLegalFunctionName(name);exposePublicSymbol(legalFunctionName,function(){throwUnboundTypeError(`Cannot construct ${name} due to unbound types`,[baseClassRawType])});whenDependentTypesAreResolved([rawType,rawPointerType,rawConstPointerType],baseClassRawType?[baseClassRawType]:[],base=>{base=base[0];var baseClass;var basePrototype;if(baseClassRawType){baseClass=base.registeredClass;basePrototype=baseClass.instancePrototype}else{basePrototype=ClassHandle.prototype}var constructor=createNamedFunction(name,function(...args){if(Object.getPrototypeOf(this)!==instancePrototype){throw new BindingError(`Use 'new' to construct ${name}`)}if(undefined===registeredClass.constructor_body){throw new BindingError(`${name} has no accessible constructor`)}var body=registeredClass.constructor_body[args.length];if(undefined===body){throw new BindingError(`Tried to invoke ctor of ${name} with invalid number of parameters (${args.length}) - expected (${Object.keys(registeredClass.constructor_body).toString()}) parameters instead!`)}return body.apply(this,args)});var instancePrototype=Object.create(basePrototype,{constructor:{value:constructor}});constructor.prototype=instancePrototype;var registeredClass=new RegisteredClass(name,constructor,instancePrototype,rawDestructor,baseClass,getActualType,upcast,downcast);if(registeredClass.baseClass){registeredClass.baseClass.__derivedClasses??=[];registeredClass.baseClass.__derivedClasses.push(registeredClass)}var referenceConverter=new RegisteredPointer(name,registeredClass,true,false,false);var pointerConverter=new RegisteredPointer(name+\"*\",registeredClass,false,false,false);var constPointerConverter=new RegisteredPointer(name+\" const*\",registeredClass,false,true,false);registeredPointers[rawType]={pointerType:pointerConverter,constPointerType:constPointerConverter};replacePublicSymbol(legalFunctionName,constructor);return[referenceConverter,pointerConverter,constPointerConverter]})}var heap32VectorToArray=(count,firstElement)=>{var array=[];for(var i=0;i<count;i++){array.push(HEAPU32[firstElement+i*4>>>2>>>0])}return array};var runDestructors=destructors=>{while(destructors.length){var ptr=destructors.pop();var del=destructors.pop();del(ptr)}};function usesDestructorStack(argTypes){for(var i=1;i<argTypes.length;++i){if(argTypes[i]!==null&&argTypes[i].destructorFunction===undefined){return true}}return false}function createJsInvoker(argTypes,isClassMethodFunc,returns,isAsync){var needsDestructorStack=usesDestructorStack(argTypes);var argCount=argTypes.length-2;var argsList=[];var argsListWired=[\"fn\"];if(isClassMethodFunc){argsListWired.push(\"thisWired\")}for(var i=0;i<argCount;++i){argsList.push(`arg${i}`);argsListWired.push(`arg${i}Wired`)}argsList=argsList.join(\",\");argsListWired=argsListWired.join(\",\");var invokerFnBody=`return function (${argsList}) {\\n`;if(needsDestructorStack){invokerFnBody+=\"var destructors = [];\\n\"}var dtorStack=needsDestructorStack?\"destructors\":\"null\";var args1=[\"humanName\",\"throwBindingError\",\"invoker\",\"fn\",\"runDestructors\",\"fromRetWire\",\"toClassParamWire\"];if(isClassMethodFunc){invokerFnBody+=`var thisWired = toClassParamWire(${dtorStack}, this);\\n`}for(var i=0;i<argCount;++i){var argName=`toArg${i}Wire`;invokerFnBody+=`var arg${i}Wired = ${argName}(${dtorStack}, arg${i});\\n`;args1.push(argName)}invokerFnBody+=(returns||isAsync?\"var rv = \":\"\")+`invoker(${argsListWired});\\n`;if(needsDestructorStack){invokerFnBody+=\"runDestructors(destructors);\\n\"}else{for(var i=isClassMethodFunc?1:2;i<argTypes.length;++i){var paramName=i===1?\"thisWired\":\"arg\"+(i-2)+\"Wired\";if(argTypes[i].destructorFunction!==null){invokerFnBody+=`${paramName}_dtor(${paramName});\\n`;args1.push(`${paramName}_dtor`)}}}if(returns){invokerFnBody+=\"var ret = fromRetWire(rv);\\n\"+\"return ret;\\n\"}else{}invokerFnBody+=\"}\\n\";return new Function(args1,invokerFnBody)}function craftInvokerFunction(humanName,argTypes,classType,cppInvokerFunc,cppTargetFunc,isAsync){var argCount=argTypes.length;if(argCount<2){throwBindingError(\"argTypes array size mismatch! Must at least get return value and 'this' types!\")}var isClassMethodFunc=argTypes[1]!==null&&classType!==null;var needsDestructorStack=usesDestructorStack(argTypes);var returns=!argTypes[0].isVoid;var retType=argTypes[0];var instType=argTypes[1];var closureArgs=[humanName,throwBindingError,cppInvokerFunc,cppTargetFunc,runDestructors,retType.fromWireType.bind(retType),instType?.toWireType.bind(instType)];for(var i=2;i<argCount;++i){var argType=argTypes[i];closureArgs.push(argType.toWireType.bind(argType))}if(!needsDestructorStack){for(var i=isClassMethodFunc?1:2;i<argTypes.length;++i){if(argTypes[i].destructorFunction!==null){closureArgs.push(argTypes[i].destructorFunction)}}}let invokerFactory=createJsInvoker(argTypes,isClassMethodFunc,returns,isAsync);var invokerFn=invokerFactory(...closureArgs);return createNamedFunction(humanName,invokerFn)}var __embind_register_class_constructor=function(rawClassType,argCount,rawArgTypesAddr,invokerSignature,invoker,rawConstructor){rawClassType>>>=0;rawArgTypesAddr>>>=0;invokerSignature>>>=0;invoker>>>=0;rawConstructor>>>=0;var rawArgTypes=heap32VectorToArray(argCount,rawArgTypesAddr);invoker=embind__requireFunction(invokerSignature,invoker);whenDependentTypesAreResolved([],[rawClassType],classType=>{classType=classType[0];var humanName=`constructor ${classType.name}`;if(undefined===classType.registeredClass.constructor_body){classType.registeredClass.constructor_body=[]}if(undefined!==classType.registeredClass.constructor_body[argCount-1]){throw new BindingError(`Cannot register multiple constructors with identical number of parameters (${argCount-1}) for class '${classType.name}'! Overload resolution is currently only performed using the parameter count, not actual type info!`)}classType.registeredClass.constructor_body[argCount-1]=()=>{throwUnboundTypeError(`Cannot construct ${classType.name} due to unbound types`,rawArgTypes)};whenDependentTypesAreResolved([],rawArgTypes,argTypes=>{argTypes.splice(1,0,null);classType.registeredClass.constructor_body[argCount-1]=craftInvokerFunction(humanName,argTypes,null,invoker,rawConstructor);return[]});return[]})};var getFunctionName=signature=>{signature=signature.trim();const argsIndex=signature.indexOf(\"(\");if(argsIndex===-1)return signature;return signature.slice(0,argsIndex)};var __embind_register_class_function=function(rawClassType,methodName,argCount,rawArgTypesAddr,invokerSignature,rawInvoker,context,isPureVirtual,isAsync,isNonnullReturn){rawClassType>>>=0;methodName>>>=0;rawArgTypesAddr>>>=0;invokerSignature>>>=0;rawInvoker>>>=0;context>>>=0;var rawArgTypes=heap32VectorToArray(argCount,rawArgTypesAddr);methodName=AsciiToString(methodName);methodName=getFunctionName(methodName);rawInvoker=embind__requireFunction(invokerSignature,rawInvoker,isAsync);whenDependentTypesAreResolved([],[rawClassType],classType=>{classType=classType[0];var humanName=`${classType.name}.${methodName}`;if(methodName.startsWith(\"@@\")){methodName=Symbol[methodName.substring(2)]}if(isPureVirtual){classType.registeredClass.pureVirtualFunctions.push(methodName)}function unboundTypesHandler(){throwUnboundTypeError(`Cannot call ${humanName} due to unbound types`,rawArgTypes)}var proto=classType.registeredClass.instancePrototype;var method=proto[methodName];if(undefined===method||undefined===method.overloadTable&&method.className!==classType.name&&method.argCount===argCount-2){unboundTypesHandler.argCount=argCount-2;unboundTypesHandler.className=classType.name;proto[methodName]=unboundTypesHandler}else{ensureOverloadTable(proto,methodName,humanName);proto[methodName].overloadTable[argCount-2]=unboundTypesHandler}whenDependentTypesAreResolved([],rawArgTypes,argTypes=>{var memberFunction=craftInvokerFunction(humanName,argTypes,classType,rawInvoker,context,isAsync);if(undefined===proto[methodName].overloadTable){memberFunction.argCount=argCount-2;proto[methodName]=memberFunction}else{proto[methodName].overloadTable[argCount-2]=memberFunction}return[]});return[]})};var validateThis=(this_,classType,humanName)=>{if(!(this_ instanceof Object)){throwBindingError(`${humanName} with invalid \"this\": ${this_}`)}if(!(this_ instanceof classType.registeredClass.constructor)){throwBindingError(`${humanName} incompatible with \"this\" of type ${this_.constructor.name}`)}if(!this_.$$.ptr){throwBindingError(`cannot call emscripten binding method ${humanName} on deleted object`)}return upcastPointer(this_.$$.ptr,this_.$$.ptrType.registeredClass,classType.registeredClass)};var __embind_register_class_property=function(classType,fieldName,getterReturnType,getterSignature,getter,getterContext,setterArgumentType,setterSignature,setter,setterContext){classType>>>=0;fieldName>>>=0;getterReturnType>>>=0;getterSignature>>>=0;getter>>>=0;getterContext>>>=0;setterArgumentType>>>=0;setterSignature>>>=0;setter>>>=0;setterContext>>>=0;fieldName=AsciiToString(fieldName);getter=embind__requireFunction(getterSignature,getter);whenDependentTypesAreResolved([],[classType],classType=>{classType=classType[0];var humanName=`${classType.name}.${fieldName}`;var desc={get(){throwUnboundTypeError(`Cannot access ${humanName} due to unbound types`,[getterReturnType,setterArgumentType])},enumerable:true,configurable:true};if(setter){desc.set=()=>throwUnboundTypeError(`Cannot access ${humanName} due to unbound types`,[getterReturnType,setterArgumentType])}else{desc.set=v=>throwBindingError(humanName+\" is a read-only property\")}Object.defineProperty(classType.registeredClass.instancePrototype,fieldName,desc);whenDependentTypesAreResolved([],setter?[getterReturnType,setterArgumentType]:[getterReturnType],types=>{var getterReturnType=types[0];var desc={get(){var ptr=validateThis(this,classType,humanName+\" getter\");return getterReturnType.fromWireType(getter(getterContext,ptr))},enumerable:true};if(setter){setter=embind__requireFunction(setterSignature,setter);var setterArgumentType=types[1];desc.set=function(v){var ptr=validateThis(this,classType,humanName+\" setter\");var destructors=[];setter(setterContext,ptr,setterArgumentType.toWireType(destructors,v));runDestructors(destructors)}}Object.defineProperty(classType.registeredClass.instancePrototype,fieldName,desc);return[]});return[]})};var emval_freelist=[];var emval_handles=[0,1,,1,null,1,true,1,false,1];function __emval_decref(handle){handle>>>=0;if(handle>9&&0===--emval_handles[handle+1]){emval_handles[handle]=undefined;emval_freelist.push(handle)}}var Emval={toValue:handle=>{if(!handle){throwBindingError(`Cannot use deleted val. handle = ${handle}`)}return emval_handles[handle]},toHandle:value=>{switch(value){case undefined:return 2;case null:return 4;case true:return 6;case false:return 8;default:{const handle=emval_freelist.pop()||emval_handles.length;emval_handles[handle]=value;emval_handles[handle+1]=1;return handle}}}};var EmValType={name:\"emscripten::val\",fromWireType:handle=>{var rv=Emval.toValue(handle);__emval_decref(handle);return rv},toWireType:(destructors,value)=>Emval.toHandle(value),readValueFromPointer:readPointer,destructorFunction:null};function __embind_register_emval(rawType){rawType>>>=0;return registerType(rawType,EmValType)}var floatReadValueFromPointer=(name,width)=>{switch(width){case 4:return function(pointer){return this.fromWireType(HEAPF32[pointer>>>2>>>0])};case 8:return function(pointer){return this.fromWireType(HEAPF64[pointer>>>3>>>0])};default:throw new TypeError(`invalid float width (${width}): ${name}`)}};var __embind_register_float=function(rawType,name,size){rawType>>>=0;name>>>=0;size>>>=0;name=AsciiToString(name);registerType(rawType,{name,fromWireType:value=>value,toWireType:(destructors,value)=>value,readValueFromPointer:floatReadValueFromPointer(name,size),destructorFunction:null})};function __embind_register_function(name,argCount,rawArgTypesAddr,signature,rawInvoker,fn,isAsync,isNonnullReturn){name>>>=0;rawArgTypesAddr>>>=0;signature>>>=0;rawInvoker>>>=0;fn>>>=0;var argTypes=heap32VectorToArray(argCount,rawArgTypesAddr);name=AsciiToString(name);name=getFunctionName(name);rawInvoker=embind__requireFunction(signature,rawInvoker,isAsync);exposePublicSymbol(name,function(){throwUnboundTypeError(`Cannot call ${name} due to unbound types`,argTypes)},argCount-1);whenDependentTypesAreResolved([],argTypes,argTypes=>{var invokerArgsArray=[argTypes[0],null].concat(argTypes.slice(1));replacePublicSymbol(name,craftInvokerFunction(name,invokerArgsArray,null,rawInvoker,fn,isAsync),argCount-1);return[]})}var integerReadValueFromPointer=(name,width,signed)=>{switch(width){case 1:return signed?pointer=>HEAP8[pointer>>>0]:pointer=>HEAPU8[pointer>>>0];case 2:return signed?pointer=>HEAP16[pointer>>>1>>>0]:pointer=>HEAPU16[pointer>>>1>>>0];case 4:return signed?pointer=>HEAP32[pointer>>>2>>>0]:pointer=>HEAPU32[pointer>>>2>>>0];default:throw new TypeError(`invalid integer width (${width}): ${name}`)}};var __embind_register_integer=function(primitiveType,name,size,minRange,maxRange){primitiveType>>>=0;name>>>=0;size>>>=0;name=AsciiToString(name);const isUnsignedType=minRange===0;let fromWireType=value=>value;if(isUnsignedType){var bitshift=32-8*size;fromWireType=value=>value<<bitshift>>>bitshift;maxRange=fromWireType(maxRange)}registerType(primitiveType,{name,fromWireType,toWireType:(destructors,value)=>value,readValueFromPointer:integerReadValueFromPointer(name,size,minRange!==0),destructorFunction:null})};function __embind_register_memory_view(rawType,dataTypeIndex,name){rawType>>>=0;name>>>=0;var typeMapping=[Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array];var TA=typeMapping[dataTypeIndex];function decodeMemoryView(handle){var size=HEAPU32[handle>>>2>>>0];var data=HEAPU32[handle+4>>>2>>>0];return new TA(HEAP8.buffer,data,size)}name=AsciiToString(name);registerType(rawType,{name,fromWireType:decodeMemoryView,readValueFromPointer:decodeMemoryView},{ignoreDuplicateRegistrations:true})}var EmValOptionalType=Object.assign({optional:true},EmValType);function __embind_register_optional(rawOptionalType,rawType){rawOptionalType>>>=0;rawType>>>=0;registerType(rawOptionalType,EmValOptionalType)}var stringToUTF8Array=(str,heap,outIdx,maxBytesToWrite)=>{outIdx>>>=0;if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i<str.length;++i){var u=str.codePointAt(i);if(u<=127){if(outIdx>=endIdx)break;heap[outIdx++>>>0]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;heap[outIdx++>>>0]=192|u>>6;heap[outIdx++>>>0]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;heap[outIdx++>>>0]=224|u>>12;heap[outIdx++>>>0]=128|u>>6&63;heap[outIdx++>>>0]=128|u&63}else{if(outIdx+3>=endIdx)break;heap[outIdx++>>>0]=240|u>>18;heap[outIdx++>>>0]=128|u>>12&63;heap[outIdx++>>>0]=128|u>>6&63;heap[outIdx++>>>0]=128|u&63;i++}}heap[outIdx>>>0]=0;return outIdx-startIdx};var stringToUTF8=(str,outPtr,maxBytesToWrite)=>stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite);var lengthBytesUTF8=str=>{var len=0;for(var i=0;i<str.length;++i){var c=str.charCodeAt(i);if(c<=127){len++}else if(c<=2047){len+=2}else if(c>=55296&&c<=57343){len+=4;++i}else{len+=3}}return len};var UTF8Decoder=globalThis.TextDecoder&&new TextDecoder;var findStringEnd=(heapOrArray,idx,maxBytesToRead,ignoreNul)=>{var maxIdx=idx+maxBytesToRead;if(ignoreNul)return maxIdx;while(heapOrArray[idx]&&!(idx>=maxIdx))++idx;return idx};var UTF8ArrayToString=(heapOrArray,idx=0,maxBytesToRead,ignoreNul)=>{idx>>>=0;var endPtr=findStringEnd(heapOrArray,idx,maxBytesToRead,ignoreNul);if(endPtr-idx>16&&heapOrArray.buffer&&UTF8Decoder){return UTF8Decoder.decode(heapOrArray.subarray(idx,endPtr))}var str=\"\";while(idx<endPtr){var u0=heapOrArray[idx++];if(!(u0&128)){str+=String.fromCharCode(u0);continue}var u1=heapOrArray[idx++]&63;if((u0&224)==192){str+=String.fromCharCode((u0&31)<<6|u1);continue}var u2=heapOrArray[idx++]&63;if((u0&240)==224){u0=(u0&15)<<12|u1<<6|u2}else{u0=(u0&7)<<18|u1<<12|u2<<6|heapOrArray[idx++]&63}if(u0<65536){str+=String.fromCharCode(u0)}else{var ch=u0-65536;str+=String.fromCharCode(55296|ch>>10,56320|ch&1023)}}return str};var UTF8ToString=(ptr,maxBytesToRead,ignoreNul)=>{ptr>>>=0;return ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead,ignoreNul):\"\"};function __embind_register_std_string(rawType,name){rawType>>>=0;name>>>=0;name=AsciiToString(name);var stdStringIsUTF8=true;registerType(rawType,{name,fromWireType(value){var length=HEAPU32[value>>>2>>>0];var payload=value+4;var str;if(stdStringIsUTF8){str=UTF8ToString(payload,length,true)}else{str=\"\";for(var i=0;i<length;++i){str+=String.fromCharCode(HEAPU8[payload+i>>>0])}}_free(value);return str},toWireType(destructors,value){if(value instanceof ArrayBuffer){value=new Uint8Array(value)}var length;var valueIsOfTypeString=typeof value==\"string\";if(!(valueIsOfTypeString||ArrayBuffer.isView(value)&&value.BYTES_PER_ELEMENT==1)){throwBindingError(\"Cannot pass non-string to std::string\")}if(stdStringIsUTF8&&valueIsOfTypeString){length=lengthBytesUTF8(value)}else{length=value.length}var base=_malloc(4+length+1);var ptr=base+4;HEAPU32[base>>>2>>>0]=length;if(valueIsOfTypeString){if(stdStringIsUTF8){stringToUTF8(value,ptr,length+1)}else{for(var i=0;i<length;++i){var charCode=value.charCodeAt(i);if(charCode>255){_free(base);throwBindingError(\"String has UTF-16 code units that do not fit in 8 bits\")}HEAPU8[ptr+i>>>0]=charCode}}}else{HEAPU8.set(value,ptr>>>0)}if(destructors!==null){destructors.push(_free,base)}return base},readValueFromPointer:readPointer,destructorFunction(ptr){_free(ptr)}})}var UTF16Decoder=globalThis.TextDecoder?new TextDecoder(\"utf-16le\"):undefined;var UTF16ToString=(ptr,maxBytesToRead,ignoreNul)=>{var idx=ptr>>>1;var endIdx=findStringEnd(HEAPU16,idx,maxBytesToRead/2,ignoreNul);if(endIdx-idx>16&&UTF16Decoder)return UTF16Decoder.decode(HEAPU16.subarray(idx>>>0,endIdx>>>0));var str=\"\";for(var i=idx;i<endIdx;++i){var codeUnit=HEAPU16[i>>>0];str+=String.fromCharCode(codeUnit)}return str};var stringToUTF16=(str,outPtr,maxBytesToWrite)=>{maxBytesToWrite??=2147483647;if(maxBytesToWrite<2)return 0;maxBytesToWrite-=2;var startPtr=outPtr;var numCharsToWrite=maxBytesToWrite<str.length*2?maxBytesToWrite/2:str.length;for(var i=0;i<numCharsToWrite;++i){var codeUnit=str.charCodeAt(i);HEAP16[outPtr>>>1>>>0]=codeUnit;outPtr+=2}HEAP16[outPtr>>>1>>>0]=0;return outPtr-startPtr};var lengthBytesUTF16=str=>str.length*2;var UTF32ToString=(ptr,maxBytesToRead,ignoreNul)=>{var str=\"\";var startIdx=ptr>>>2;for(var i=0;!(i>=maxBytesToRead/4);i++){var utf32=HEAPU32[startIdx+i>>>0];if(!utf32&&!ignoreNul)break;str+=String.fromCodePoint(utf32)}return str};var stringToUTF32=(str,outPtr,maxBytesToWrite)=>{outPtr>>>=0;maxBytesToWrite??=2147483647;if(maxBytesToWrite<4)return 0;var startPtr=outPtr;var endPtr=startPtr+maxBytesToWrite-4;for(var i=0;i<str.length;++i){var codePoint=str.codePointAt(i);if(codePoint>65535){i++}HEAP32[outPtr>>>2>>>0]=codePoint;outPtr+=4;if(outPtr+4>endPtr)break}HEAP32[outPtr>>>2>>>0]=0;return outPtr-startPtr};var lengthBytesUTF32=str=>{var len=0;for(var i=0;i<str.length;++i){var codePoint=str.codePointAt(i);if(codePoint>65535){i++}len+=4}return len};function __embind_register_std_wstring(rawType,charSize,name){rawType>>>=0;charSize>>>=0;name>>>=0;name=AsciiToString(name);var decodeString,encodeString,lengthBytesUTF;if(charSize===2){decodeString=UTF16ToString;encodeString=stringToUTF16;lengthBytesUTF=lengthBytesUTF16}else{decodeString=UTF32ToString;encodeString=stringToUTF32;lengthBytesUTF=lengthBytesUTF32}registerType(rawType,{name,fromWireType:value=>{var length=HEAPU32[value>>>2>>>0];var str=decodeString(value+4,length*charSize,true);_free(value);return str},toWireType:(destructors,value)=>{if(!(typeof value==\"string\")){throwBindingError(`Cannot pass non-string to C++ string type ${name}`)}var length=lengthBytesUTF(value);var ptr=_malloc(4+length+charSize);HEAPU32[ptr>>>2>>>0]=length/charSize;encodeString(value,ptr+4,length+charSize);if(destructors!==null){destructors.push(_free,ptr)}return ptr},readValueFromPointer:readPointer,destructorFunction(ptr){_free(ptr)}})}var __embind_register_void=function(rawType,name){rawType>>>=0;name>>>=0;name=AsciiToString(name);registerType(rawType,{isVoid:true,name,fromWireType:()=>undefined,toWireType:(destructors,o)=>undefined})};var emval_methodCallers=[];var emval_addMethodCaller=caller=>{var id=emval_methodCallers.length;emval_methodCallers.push(caller);return id};var requireRegisteredType=(rawType,humanName)=>{var impl=registeredTypes[rawType];if(undefined===impl){throwBindingError(`${humanName} has unknown type ${getTypeName(rawType)}`)}return impl};var emval_lookupTypes=(argCount,argTypes)=>{var a=new Array(argCount);for(var i=0;i<argCount;++i){a[i]=requireRegisteredType(HEAPU32[argTypes+i*4>>>2>>>0],`parameter ${i}`)}return a};var emval_returnValue=(toReturnWire,destructorsRef,handle)=>{var destructors=[];var result=toReturnWire(destructors,handle);if(destructors.length){HEAPU32[destructorsRef>>>2>>>0]=Emval.toHandle(destructors)}return result};var emval_symbols={};var getStringOrSymbol=address=>{var symbol=emval_symbols[address];if(symbol===undefined){return AsciiToString(address)}return symbol};var __emval_create_invoker=function(argCount,argTypesPtr,kind){argTypesPtr>>>=0;var GenericWireTypeSize=8;var[retType,...argTypes]=emval_lookupTypes(argCount,argTypesPtr);var toReturnWire=retType.toWireType.bind(retType);var argFromPtr=argTypes.map(type=>type.readValueFromPointer.bind(type));argCount--;var captures={toValue:Emval.toValue};var args=argFromPtr.map((argFromPtr,i)=>{var captureName=`argFromPtr${i}`;captures[captureName]=argFromPtr;return`${captureName}(args${i?\"+\"+i*GenericWireTypeSize:\"\"})`});var functionBody;switch(kind){case 0:functionBody=\"toValue(handle)\";break;case 2:functionBody=\"new (toValue(handle))\";break;case 3:functionBody=\"\";break;case 1:captures[\"getStringOrSymbol\"]=getStringOrSymbol;functionBody=\"toValue(handle)[getStringOrSymbol(methodName)]\";break}functionBody+=`(${args})`;if(!retType.isVoid){captures[\"toReturnWire\"]=toReturnWire;captures[\"emval_returnValue\"]=emval_returnValue;functionBody=`return emval_returnValue(toReturnWire, destructorsRef, ${functionBody})`}functionBody=`return function (handle, methodName, destructorsRef, args) {\\n  ${functionBody}\\n  }`;var invokerFunction=new Function(Object.keys(captures),functionBody)(...Object.values(captures));var functionName=`methodCaller<(${argTypes.map(t=>t.name)}) => ${retType.name}>`;return emval_addMethodCaller(createNamedFunction(functionName,invokerFunction))};function __emval_invoke(caller,handle,methodName,destructorsRef,args){caller>>>=0;handle>>>=0;methodName>>>=0;destructorsRef>>>=0;args>>>=0;return emval_methodCallers[caller](handle,methodName,destructorsRef,args)}function __emval_run_destructors(handle){handle>>>=0;var destructors=Emval.toValue(handle);runDestructors(destructors);__emval_decref(handle)}var __tzset_js=function(timezone,daylight,std_name,dst_name){timezone>>>=0;daylight>>>=0;std_name>>>=0;dst_name>>>=0;var currentYear=(new Date).getFullYear();var winter=new Date(currentYear,0,1);var summer=new Date(currentYear,6,1);var winterOffset=winter.getTimezoneOffset();var summerOffset=summer.getTimezoneOffset();var stdTimezoneOffset=Math.max(winterOffset,summerOffset);HEAPU32[timezone>>>2>>>0]=stdTimezoneOffset*60;HEAP32[daylight>>>2>>>0]=Number(winterOffset!=summerOffset);var extractZone=timezoneOffset=>{var sign=timezoneOffset>=0?\"-\":\"+\";var absOffset=Math.abs(timezoneOffset);var hours=String(Math.floor(absOffset/60)).padStart(2,\"0\");var minutes=String(absOffset%60).padStart(2,\"0\");return`UTC${sign}${hours}${minutes}`};var winterName=extractZone(winterOffset);var summerName=extractZone(summerOffset);if(summerOffset<winterOffset){stringToUTF8(winterName,std_name,17);stringToUTF8(summerName,dst_name,17)}else{stringToUTF8(winterName,dst_name,17);stringToUTF8(summerName,std_name,17)}};var getHeapMax=()=>3221225472;var alignMemory=(size,alignment)=>Math.ceil(size/alignment)*alignment;var growMemory=size=>{var oldHeapSize=wasmMemory.buffer.byteLength;var pages=(size-oldHeapSize+65535)/65536|0;try{wasmMemory.grow(pages);updateMemoryViews();return 1}catch(e){}};function _emscripten_resize_heap(requestedSize){requestedSize>>>=0;var oldSize=HEAPU8.length;var maxHeapSize=getHeapMax();if(requestedSize>maxHeapSize){return false}for(var cutDown=1;cutDown<=4;cutDown*=2){var overGrownHeapSize=oldSize*(1+.2/cutDown);overGrownHeapSize=Math.min(overGrownHeapSize,requestedSize+100663296);var newSize=Math.min(maxHeapSize,alignMemory(Math.max(requestedSize,overGrownHeapSize),65536));var replacement=growMemory(newSize);if(replacement){return true}}return false}var ENV={};var getExecutableName=()=>thisProgram||\"./this.program\";var getEnvStrings=()=>{if(!getEnvStrings.strings){var lang=(globalThis.navigator?.language??\"C\").replace(\"-\",\"_\")+\".UTF-8\";var env={USER:\"web_user\",LOGNAME:\"web_user\",PATH:\"/\",PWD:\"/\",HOME:\"/home/web_user\",LANG:lang,_:getExecutableName()};for(var x in ENV){if(ENV[x]===undefined)delete env[x];else env[x]=ENV[x]}var strings=[];for(var x in env){strings.push(`${x}=${env[x]}`)}getEnvStrings.strings=strings}return getEnvStrings.strings};function _environ_get(__environ,environ_buf){__environ>>>=0;environ_buf>>>=0;var bufSize=0;var envp=0;for(var string of getEnvStrings()){var ptr=environ_buf+bufSize;HEAPU32[__environ+envp>>>2>>>0]=ptr;bufSize+=stringToUTF8(string,ptr,Infinity)+1;envp+=4}return 0}function _environ_sizes_get(penviron_count,penviron_buf_size){penviron_count>>>=0;penviron_buf_size>>>=0;var strings=getEnvStrings();HEAPU32[penviron_count>>>2>>>0]=strings.length;var bufSize=0;for(var string of strings){bufSize+=lengthBytesUTF8(string)+1}HEAPU32[penviron_buf_size>>>2>>>0]=bufSize;return 0}var _fd_close=fd=>52;function _fd_read(fd,iov,iovcnt,pnum){iov>>>=0;iovcnt>>>=0;pnum>>>=0;return 52}function _fd_seek(fd,offset_low,offset_high,whence,newOffset){var offset=convertI32PairToI53Checked(offset_low,offset_high);newOffset>>>=0;return 70}var printCharBuffers=[null,[],[]];var printChar=(stream,curr)=>{var buffer=printCharBuffers[stream];if(curr===0||curr===10){(stream===1?out:err)(UTF8ArrayToString(buffer));buffer.length=0}else{buffer.push(curr)}};function _fd_write(fd,iov,iovcnt,pnum){iov>>>=0;iovcnt>>>=0;pnum>>>=0;var num=0;for(var i=0;i<iovcnt;i++){var ptr=HEAPU32[iov>>>2>>>0];var len=HEAPU32[iov+4>>>2>>>0];iov+=8;for(var j=0;j<len;j++){printChar(fd,HEAPU8[ptr+j>>>0])}num+=len}HEAPU32[pnum>>>2>>>0]=num;return 0}init_ClassHandle();init_RegisteredPointer();{if(Module[\"noExitRuntime\"])noExitRuntime=Module[\"noExitRuntime\"];if(Module[\"print\"])out=Module[\"print\"];if(Module[\"printErr\"])err=Module[\"printErr\"];if(Module[\"wasmBinary\"])wasmBinary=Module[\"wasmBinary\"];if(Module[\"arguments\"])arguments_=Module[\"arguments\"];if(Module[\"thisProgram\"])thisProgram=Module[\"thisProgram\"];if(Module[\"preInit\"]){if(typeof Module[\"preInit\"]==\"function\")Module[\"preInit\"]=[Module[\"preInit\"]];while(Module[\"preInit\"].length>0){Module[\"preInit\"].shift()()}}}var ___getTypeName,_malloc,_free,dynCall_vij,dynCall_viiji,dynCall_viijii,dynCall_jiji,dynCall_iiiiij,dynCall_iiiiijj,dynCall_iiiiiijj,memory,__indirect_function_table,wasmMemory,wasmTable;function assignWasmExports(wasmExports){___getTypeName=wasmExports[\"F\"];_malloc=wasmExports[\"H\"];_free=wasmExports[\"I\"];dynCall_vij=dynCalls[\"vij\"]=wasmExports[\"J\"];dynCall_viiji=dynCalls[\"viiji\"]=wasmExports[\"K\"];dynCall_viijii=dynCalls[\"viijii\"]=wasmExports[\"L\"];dynCall_jiji=dynCalls[\"jiji\"]=wasmExports[\"M\"];dynCall_iiiiij=dynCalls[\"iiiiij\"]=wasmExports[\"N\"];dynCall_iiiiijj=dynCalls[\"iiiiijj\"]=wasmExports[\"O\"];dynCall_iiiiiijj=dynCalls[\"iiiiiijj\"]=wasmExports[\"P\"];memory=wasmMemory=wasmExports[\"D\"];__indirect_function_table=wasmTable=wasmExports[\"G\"]}var wasmImports={m:___cxa_rethrow,c:___cxa_throw,x:__abort_js,r:__embind_register_bigint,B:__embind_register_bool,d:__embind_register_class,f:__embind_register_class_constructor,a:__embind_register_class_function,e:__embind_register_class_property,z:__embind_register_emval,p:__embind_register_float,b:__embind_register_function,l:__embind_register_integer,g:__embind_register_memory_view,j:__embind_register_optional,A:__embind_register_std_string,n:__embind_register_std_wstring,C:__embind_register_void,i:__emval_create_invoker,h:__emval_invoke,k:__emval_run_destructors,s:__tzset_js,y:_emscripten_resize_heap,t:_environ_get,u:_environ_sizes_get,v:_fd_close,w:_fd_read,q:_fd_seek,o:_fd_write};function applySignatureConversions(wasmExports){wasmExports=Object.assign({},wasmExports);var makeWrapper_pp=f=>a0=>f(a0)>>>0;var makeWrapper_p=f=>()=>f()>>>0;wasmExports[\"F\"]=makeWrapper_pp(wasmExports[\"F\"]);wasmExports[\"H\"]=makeWrapper_pp(wasmExports[\"H\"]);wasmExports[\"_emscripten_stack_alloc\"]=makeWrapper_pp(wasmExports[\"_emscripten_stack_alloc\"]);wasmExports[\"emscripten_stack_get_current\"]=makeWrapper_p(wasmExports[\"emscripten_stack_get_current\"]);return wasmExports}function run(){preRun();function doRun(){Module[\"calledRun\"]=true;if(ABORT)return;initRuntime();readyPromiseResolve?.(Module);Module[\"onRuntimeInitialized\"]?.();postRun()}if(Module[\"setStatus\"]){Module[\"setStatus\"](\"Running...\");setTimeout(()=>{setTimeout(()=>Module[\"setStatus\"](\"\"),1);doRun()},1)}else{doRun()}}var wasmExports;wasmExports=await (createWasm());run();if(runtimeInitialized){moduleRtn=Module}else{moduleRtn=new Promise((resolve,reject)=>{readyPromiseResolve=resolve;readyPromiseReject=reject})}\n;return moduleRtn}})();if(typeof exports===\"object\"&&typeof module===\"object\"){module.exports=geoda;module.exports.default=geoda}else if(typeof define===\"function\"&&define[\"amd\"])define([],()=>geoda);\n", "// SPDX-License-Identifier: MIT\n// Copyright contributors to the geodalib project\n\nexport type { GeoDaModule as GeoDaInterface } from '@geoda/common';\nexport type { GeometryCollection } from '@geoda/common';\n\nexport * from './init';\n\nexport * from './weights/distance-neighbors';\nexport * from './weights/neighbor-match-test';\nexport * from './weights/kernel-knn-weights';\nexport * from './weights/kernel-weights';\nexport * from './weights/nearest-neighbors';\nexport * from './weights/contiguity-neighbors';\nexport * from './weights/weights-stats';\nexport * from './weights/utils';\n\nexport * from './geometry/attributes';\nexport * from './geometry/binary-geometry';\nexport * from './geometry/buffer';\nexport * from './geometry/centroid';\nexport * from './geometry/geojson-geometry';\nexport * from './geometry/point-layer-geometry';\nexport * from './geometry/spatial-dissolve';\nexport * from './geometry/spatial-join';\nexport * from './geometry/thiessen-polygon';\nexport * from './geometry/mst';\nexport * from './geometry/cartogram';\nexport * from './geometry/utils';\nexport * from './clustering/schc';\nexport * from './clustering/redcap';\nexport * from './clustering/skater';\nexport * from './clustering/azp';\nexport * from './clustering/maxp';\nexport * from './clustering/spatial-validation';\nexport * from './clustering/make-spatial';\n\nexport * from './mapping/quantile';\nexport * from './mapping/natural-breaks';\nexport * from './mapping/equal-interval-breaks';\nexport * from './mapping/percentile-breaks';\nexport * from './mapping/box-breaks';\nexport * from './mapping/stddev-breaks';\nexport * from './mapping/rates';\n\nexport * from './data/deviation';\nexport * from './data/mad';\nexport * from './data/rangeAdjust';\nexport * from './data/rangeStandardize';\nexport * from './data/standardize';\n", "// SPDX-License-Identifier: MIT\n// Copyright contributors to the geodalib project\n\nimport type { GeoDaModule } from './wasm';\n\nexport type WasmModule = (\n  options: { locateFile: () => string } | Record<string, never>\n) => Promise<GeoDaModule>;\n\n/**\n * Manages WebAssembly (WASM) initialization and configuration for GeoDa\n * Handles custom WASM URL settings and instance creation\n *\n * @class WASMManager\n */\nclass WASMManager {\n  private customWASMUrl: string | null = null;\n  private wasmInstancePromise: Promise<GeoDaModule> | null = null;\n  public id: string = '';\n  private wasmModule: WasmModule;\n\n  /**\n   * Creates a new WASMManager instance\n   * @param {WasmModule} wasmModule - The WebAssembly module function that returns a Promise<GeoDaModule>\n   */\n  constructor(wasmModule: WasmModule) {\n    this.wasmModule = wasmModule;\n    this.wasmInstancePromise = null;\n    this.customWASMUrl = null;\n    // random id\n    this.id =\n      Math.random().toString(36).substring(2, 15) + Math.random().toString(36).substring(2, 15);\n  }\n\n  /**\n   * Sets a custom URL for the WASM file\n   * @param {string} wasmUrl - The absolute URL where the WASM file is hosted\n   * @returns {void}\n   */\n  setDeliveryWASM(wasmUrl: string): void {\n    this.customWASMUrl = wasmUrl;\n  }\n\n  /**\n   * Retrieves the currently set custom WASM URL\n   * @returns {string | null} The custom WASM URL if set, null otherwise\n   */\n  getDeliveryWASM(): string | null {\n    return this.customWASMUrl;\n  }\n\n  /**\n   * Initializes the WASM instance with the configured settings\n   * @param {string} [publicWASMUrl] - Optional URL to set as the WASM delivery URL before initialization\n   * @returns {Promise<GeoDaModule>} Promise resolving to the initialized GeoDaModule\n   * @throws {Error} Throws an error if custom WASM URL is not set\n   */\n  async initWASM(publicWASMUrl?: string): Promise<GeoDaModule> {\n    if (publicWASMUrl) {\n      this.setDeliveryWASM(publicWASMUrl);\n    }\n    if (this.customWASMUrl === null) {\n      throw new Error('Custom WASM URL is not set');\n    }\n    if (this.wasmInstancePromise === null) {\n      const wasmUrl = this.customWASMUrl;\n      this.wasmInstancePromise = this.wasmModule(wasmUrl ? { locateFile: () => wasmUrl } : {});\n    }\n    return this.wasmInstancePromise;\n  }\n\n  /**\n   * Resets the WASM instance by clearing the stored promise\n   * Allows for re-initialization of the WASM module\n   * @returns {Promise<void>}\n   */\n  async resetWASM(): Promise<void> {\n    this.wasmInstancePromise = null;\n  }\n}\n\n/**\n * Factory function to create a new WASMManager instance\n * @param {WasmModule} wasmModule - The WebAssembly module function\n * @returns {WASMManager} A new WASMManager instance\n * @see {@link WASMManager} for detailed documentation of the manager class\n */\nexport const createWASMManager = (wasmModule: WasmModule) => new WASMManager(wasmModule);\n", "// SPDX-License-Identifier: MIT\n// Copyright contributors to the geodalib project\n\n// generated by TSEMBIND\n\n// define type aliases for various native number types\ntype Char = number;\ntype SignedChar = number;\ntype UnsignedChar = number;\ntype Short = number;\ntype UnsignedShort = number;\ntype Int = number;\ntype UnsignedInt = number;\ntype Long = number;\ntype UnsignedLong = number;\ntype Float = number;\ntype Double = number;\n\n/**\n * Base class for geometry collections\n */\nexport class GeometryCollection {\n  /**\n   * Constructor for the base geometry collection class\n   */\n  constructor();\n  delete(): void;\n  size(): number;\n  getType(): number;\n  getCentroids(): VecVecDouble;\n  buffer(index: number, dist: number, pointsPerCircle: number): Polygon;\n  getArea(index: number): Double;\n  getLength(index: number): Double;\n  getPerimeter(index: number): Double;\n}\n\n/**\n * PolygonCollection class.\n */\nexport class PolygonCollection extends GeometryCollection {\n  /**\n   * Constructor for the polygon collection class\n   * @param xs VectorDouble Array of x coordinates\n   * @param ys VectorDouble Array of y coordinates\n   * @param parts VectorUInt Array of indices into xs/ys where each part starts\n   * @param holes VectorUInt Array of indices into parts where each hole starts\n   * @param sizes VectorUInt Array of number of parts for each feature\n   * @param fixPolygon boolean Whether to fix polygon\n   * @param convertToUTM boolean Whether to convert to UTM\n   */\n  constructor(\n    xs: VectorDouble,\n    ys: VectorDouble,\n    parts: VectorUInt,\n    holes: VectorUInt,\n    sizes: VectorUInt,\n    fixPolygon: boolean,\n    convertToUTM: boolean\n  );\n\n  delete(): void;\n}\n\n/**\n * LineCollection class.\n */\nexport class LineCollection extends GeometryCollection {\n  /**\n   * Constructor for the line collection class\n   * @param xs VectorDouble Array of x coordinates\n   * @param ys VectorDouble Array of y coordinates\n   * @param parts VectorUInt Array of indices into xs/ys where each part starts\n   * @param sizes VectorUInt Array of number of parts for each feature\n   * @param convertToUTM boolean Whether to convert to UTM\n   */\n  constructor(\n    xs: VectorDouble,\n    ys: VectorDouble,\n    parts: VectorUInt,\n    sizes: VectorUInt,\n    convertToUTM: boolean\n  );\n\n  delete(): void;\n}\n\n/**\n * Class representing a single point geometry\n */\nexport class Point {\n  /**\n   * Constructor for a single point geometry\n   */\n  constructor();\n  /**\n   * Get the x-coordinate of the point\n   */\n  getX(): VectorDouble;\n  /**\n   * Get the y-coordinate of the point\n   */\n  getY(): VectorDouble;\n}\n\n/**\n * PointCollection class.\n */\nexport class PointCollection extends GeometryCollection {\n  /**\n   * Constructor for the point collection class\n   * @param xs VectorDouble Array of x coordinates\n   * @param ys VectorDouble Array of y coordinates\n   * @param parts VectorUInt Array of indices into xs/ys where each part starts\n   * @param sizes VectorUInt Array of number of parts for each feature\n   * @param convertToUTM boolean Whether to convert to UTM\n   */\n  constructor(\n    xs: VectorDouble,\n    ys: VectorDouble,\n    parts: VectorUInt,\n    sizes: VectorUInt,\n    convertToUTM: boolean\n  );\n\n  delete(): void;\n}\n\n/**\n * Class representing a polygon geometry\n */\nexport class Polygon {\n  /**\n   * Constructor for the polygon class\n   */\n  constructor();\n  /**\n   * Get the x-coordinates of the polygon vertices\n   */\n  getX(): VectorDouble;\n  /**\n   * Get the y-coordinates of the polygon vertices\n   */\n  getY(): VectorDouble;\n  /**\n   * Get the indices of holes in the polygon\n   */\n  getHoles(): VectorUInt;\n  /**\n   * Get the indices where each part of the polygon starts\n   */\n  getParts(): VectorUInt;\n  /**\n   * Add a part to the polygon\n   * @param arg0 Array of x coordinates\n   * @param arg1 Array of y coordinates\n   * @param arg2 Whether to fix the polygon\n   */\n  addPart(arg0: VectorDouble, arg1: VectorDouble, arg2: boolean): void;\n  delete(): void;\n}\n\nexport class Line {\n  constructor();\n  getX(): VectorDouble;\n  getY(): VectorDouble;\n  getParts(): VectorUInt;\n  add(arg0: VectorDouble, arg1: VectorDouble): void;\n}\n\n/**\n * Vector class for unsigned integers\n */\nexport class VectorUInt {\n  /**\n   * Constructor for a vector of unsigned integers\n   */\n  constructor();\n  /**\n   * Add an element to the end of the vector\n   * @param arg0 Element to add\n   */\n  push_back(arg0: UnsignedInt): void;\n  /**\n   * Resize the vector\n   * @param arg0 New size\n   * @param arg1 Value to fill new elements with\n   */\n  resize(arg0: UnsignedLong, arg1: UnsignedInt): void;\n  /**\n   * Get the size of the vector\n   */\n  size(): UnsignedLong;\n  /**\n   * Get element at index\n   * @param arg0 Index\n   */\n  get(arg0: UnsignedLong): any;\n  /**\n   * Set element at index\n   * @param arg0 Index\n   * @param arg1 Value\n   */\n  set(arg0: UnsignedLong, arg1: UnsignedInt): boolean;\n  delete(): void;\n}\n\n/**\n * Vector class for storing vectors of unsigned integers\n */\nexport class VecVecUInt {\n  /**\n   * Constructor for a vector of vectors of unsigned integers\n   */\n  constructor();\n  /**\n   * Add a vector to the end\n   * @param arg0 Vector to add\n   */\n  push_back(arg0: VectorUInt): void;\n  /**\n   * Resize the vector\n   * @param arg0 New size\n   * @param arg1 Value to fill new elements with\n   */\n  resize(arg0: UnsignedLong, arg1: VectorUInt): void;\n  /**\n   * Get the size of the vector\n   */\n  size(): UnsignedLong;\n  /**\n   * Get vector at index\n   * @param arg0 Index\n   */\n  get(arg0: UnsignedLong): any;\n  /**\n   * Set vector at index\n   * @param arg0 Index\n   * @param arg1 Value\n   */\n  set(arg0: UnsignedLong, arg1: VectorUInt): boolean;\n  delete(): void;\n}\n\n/**\n * Vector class for integers\n */\nexport class VectorInt {\n  /**\n   * Constructor for a vector of integers\n   */\n  constructor();\n  /**\n   * Add an element to the end\n   * @param arg0 Element to add\n   */\n  push_back(arg0: Int): void;\n  /**\n   * Resize the vector\n   * @param arg0 New size\n   * @param arg1 Value to fill new elements with\n   */\n  resize(arg0: UnsignedLong, arg1: Int): void;\n  /**\n   * Get the size of the vector\n   */\n  size(): UnsignedLong;\n  /**\n   * Get element at index\n   * @param arg0 Index\n   */\n  get(arg0: UnsignedLong): any;\n  /**\n   * Set element at index\n   * @param arg0 Index\n   * @param arg1 Value\n   */\n  set(arg0: UnsignedLong, arg1: Int): boolean;\n  delete(): void;\n}\n\n/**\n * Vector class for storing vectors of integers\n */\nexport class VecVecInt {\n  /**\n   * Constructor for a vector of vectors of integers\n   */\n  constructor();\n  /**\n   * Add a vector to the end\n   * @param arg0 Vector to add\n   */\n  push_back(arg0: VectorInt): void;\n  /**\n   * Resize the vector\n   * @param arg0 New size\n   * @param arg1 Value to fill new elements with\n   */\n  resize(arg0: UnsignedLong, arg1: VectorInt): void;\n  /**\n   * Get the size of the vector\n   */\n  size(): UnsignedLong;\n  /**\n   * Get vector at index\n   * @param arg0 Index\n   */\n  get(arg0: UnsignedLong): any;\n  /**\n   * Set vector at index\n   * @param arg0 Index\n   * @param arg1 Value\n   */\n  set(arg0: UnsignedLong, arg1: VectorInt): boolean;\n  delete(): void;\n}\n\n/**\n * Vector class for double precision floating point numbers\n */\nexport class VectorDouble {\n  /**\n   * Constructor for a vector of double precision floating point numbers\n   */\n  constructor();\n  /**\n   * Add an element to the end\n   * @param arg0 Element to add\n   */\n  push_back(arg0: Double): void;\n  /**\n   * Resize the vector\n   * @param arg0 New size\n   * @param arg1 Value to fill new elements with\n   */\n  resize(arg0: UnsignedLong, arg1: Double): void;\n  /**\n   * Get the size of the vector\n   */\n  size(): UnsignedLong;\n  /**\n   * Get element at index\n   * @param arg0 Index\n   */\n  get(arg0: UnsignedLong): any;\n  /**\n   * Set element at index\n   * @param arg0 Index\n   * @param arg1 Value\n   */\n  set(arg0: UnsignedLong, arg1: Double): boolean;\n  delete(): void;\n}\n\n/**\n * Vector class for storing vectors of doubles\n */\nexport class VecVecDouble {\n  /**\n   * Constructor for a vector of vectors of doubles\n   */\n  constructor();\n  /**\n   * Add a vector to the end\n   * @param arg0 Vector to add\n   */\n  push_back(arg0: VectorDouble): void;\n  /**\n   * Resize the vector\n   * @param arg0 New size\n   * @param arg1 Value to fill new elements with\n   */\n  resize(arg0: UnsignedLong, arg1: VectorDouble): void;\n  /**\n   * Get the size of the vector\n   */\n  size(): UnsignedLong;\n  /**\n   * Get vector at index\n   * @param arg0 Index\n   */\n  get(arg0: UnsignedLong): any;\n  /**\n   * Set vector at index\n   * @param arg0 Index\n   * @param arg1 Value\n   */\n  set(arg0: UnsignedLong, arg1: VectorDouble): boolean;\n  delete(): void;\n}\n\n/**\n * Vector class for storing polygons\n */\nexport class VectorPolygon {\n  /**\n   * Constructor for a vector of polygons\n   */\n  constructor();\n  /**\n   * Add a polygon to the end\n   * @param arg0 Polygon to add\n   */\n  push_back(arg0: Polygon): void;\n  /**\n   * Resize the vector\n   * @param arg0 New size\n   * @param arg1 Value to fill new elements with\n   */\n  resize(arg0: UnsignedLong, arg1: Polygon): void;\n  /**\n   * Get the size of the vector\n   */\n  size(): UnsignedLong;\n  /**\n   * Get polygon at index\n   * @param arg0 Index\n   */\n  get(arg0: UnsignedLong): any;\n  /**\n   * Set polygon at index\n   * @param arg0 Index\n   * @param arg1 Value\n   */\n  set(arg0: UnsignedLong, arg1: Polygon): boolean;\n  delete(): void;\n}\n\n/**\n * Vector class for storing lines\n */\nexport class VectorLine {\n  constructor();\n  push_back(arg0: Line): void;\n  resize(arg0: UnsignedLong, arg1: Line): void;\n  size(): UnsignedLong;\n  get(arg0: UnsignedLong): any;\n}\n\n/**\n * Vector class for storing strings\n */\nexport class VectorString {\n  /**\n   * Constructor for a vector of strings\n   */\n  constructor();\n  /**\n   * Add a string to the end\n   * @param arg0 String to add\n   */\n  push_back(arg0: string): void;\n  /**\n   * Resize the vector\n   * @param arg0 New size\n   * @param arg1 Value to fill new elements with\n   */\n  resize(arg0: UnsignedLong, arg1: string): void;\n  /**\n   * Get the size of the vector\n   */\n  size(): UnsignedLong;\n  /**\n   * Get string at index\n   * @param arg0 Index\n   */\n  get(arg0: UnsignedLong): string;\n  /**\n   * Set string at index\n   * @param arg0 Index\n   * @param arg1 Value\n   */\n  set(arg0: UnsignedLong, arg1: string): boolean;\n  delete(): void;\n}\n\n/**\n * Class representing results from LISA (Local Indicators of Spatial Association) analysis\n */\nexport class LisaResult {\n  /**\n   * Check if the result is valid\n   */\n  isValid(): boolean;\n  /**\n   * Get the p-values for each observation\n   */\n  getPValues(): VectorDouble;\n  /**\n   * Get the cluster assignments for each observation\n   */\n  getClusters(): VectorUInt;\n  /**\n   * Get the spatial lag values\n   */\n  getLagValues(): VectorDouble;\n  /**\n   * Get the LISA statistic values\n   */\n  getLisaValues(): VectorDouble;\n  /**\n   * Get the significance categories\n   */\n  getSignificanceCategories(): VectorInt;\n  /**\n   * Get the number of neighbors for each observation\n   */\n  getNN(): VectorInt;\n  /**\n   * Get the labels for the clusters\n   */\n  getLabels(): VectorString;\n  /**\n   * Get the colors associated with each cluster\n   */\n  getColors(): VectorString;\n  delete(): void;\n}\n\nexport class Fragmentation {\n  n: number;\n  entropy: number;\n  simpson: number;\n  minClusterSize: number;\n  maxClusterSize: number;\n  meanClusterSize: number;\n  spatiallyContiguous: boolean;\n}\n\nexport class Compactness {\n  area: number;\n  perimeter: number;\n  isoperimeterQuotient: number;\n}\n\nexport class Diameter {\n  steps: number;\n  ratio: number;\n}\n\nexport class JoinCountRatio {\n  cluster: number;\n  n: number;\n  ratio: number;\n}\n\nexport class ValidationResult {\n  spatiallyConstrained: boolean;\n  fragmentation: Fragmentation;\n  clusterFragmentation: VectorFragmentation;\n  clusterDiameter: VectorDiameter;\n  clusterCompactness: VectorCompactness;\n  joincountRatio: VectorJoinCountRatio;\n}\n\nexport class VectorFragmentation {\n  size(): number;\n  get(i: number): Fragmentation;\n}\nexport class VectorDiameter {\n  size(): number;\n  get(i: number): Diameter;\n}\nexport class VectorCompactness {\n  size(): number;\n  get(i: number): Compactness;\n}\nexport class VectorJoinCountRatio {\n  size(): number;\n  get(i: number): JoinCountRatio;\n}\n\n/**\n * Result of a batch LISA computation (per-variable arrays).\n */\nexport class BatchLisaResult {\n  /**\n   * Check if the result is valid\n   */\n  isValid(): boolean;\n  /**\n   * Get the LISA statistic values for each variable\n   */\n  getLisaValues(): VecVecDouble;\n  /**\n   * Get the p-values for each variable\n   */\n  getPValues(): VecVecDouble;\n  /**\n   * Get the cluster assignments for each variable\n   */\n  getClusters(): VecVecInt;\n  /**\n   * Get the spatial lag values for each variable\n   */\n  getLagValues(): VecVecDouble;\n  /**\n   * Get the number of neighbors for each observation\n   */\n  getNN(): VectorInt;\n  /**\n   * Get the labels for the clusters\n   */\n  getLabels(): VectorString;\n  /**\n   * Get the colors associated with each cluster\n   */\n  getColors(): VectorString;\n  delete(): void;\n}\n\n/**\n * Class for the diagnostic report of regression analysis\n */\nexport class DiagnosticReport {\n  delete(): void;\n  /**\n   * Get the number of observations\n   */\n  GetNoObservation(): number;\n  /**\n   * Get the number of variables\n   */\n  GetNoVariable(): number;\n  /**\n   * Check if the constant is included\n   */\n  IncludeConstant(): boolean;\n  /**\n   * Get the name of the independent variable at index\n   * @param i Index\n   */\n  GetXVarName(i: number): string;\n  /**\n   * Get the coefficient of the independent variable at index\n   * @param i Index\n   */\n  GetCoefficient(i: number): Double;\n  /**\n   * Get the standard error of the independent variable at index\n   * @param i Index\n   */\n  GetStdError(i: number): Double;\n  /**\n   * Get the z-value of the independent variable at index\n   * @param i Index\n   */\n  GetZValue(i: number): Double;\n  /**\n   * Get the probability of the independent variable at index\n   * @param i Index\n   */\n  GetProbability(i: number): Double;\n  /**\n   * Get the R-squared value\n   */\n  GetR2(): number;\n  /**\n   * Get the adjusted R-squared value\n   */\n  GetR2_adjust(): number;\n  /**\n   * Get the Buse R-squared value\n   */\n  GetR2_buse(): number;\n  /**\n   * Get the likelihood value\n   */\n  GetLIK(): number;\n  /**\n   * Get the Akaike Information Criterion (AIC) value\n   */\n  GetAIC(): number;\n  /**\n   * Get the OLS SC value\n   */\n  GetOLS_SC(): number;\n  /**\n   * Get the residual sum of squares (RSS) value\n   */\n  GetRSS(): number;\n  /**\n   * Get the Rho value\n   */\n  GetRho(): number;\n  /**\n   * Get the F-test value\n   */\n  GetFtest(): number;\n  /**\n   * Get the F-test probability value\n   */\n  GetFtestProb(): number;\n  /**\n   * Get the SIQ_SQ value\n   */\n  GetSIQ_SQ(): number;\n  /**\n   * Get the SIQ_SQLM value\n   */\n  GetSIQ_SQLM(): number;\n  /**\n   * Get the condition number\n   */\n  GetConditionNumber(): number;\n  /**\n   * Get the JB test value for the independent variable at index\n   * @param i Index\n   */\n  GetJBtest(i: number): Double;\n  /**\n   * Get the BP test value for the independent variable at index\n   * @param i Index\n   */\n  GetBPtest(i: number): Double;\n  /**\n   * Get the LR test value for the independent variable at index\n   * @param i Index\n   */\n  GetLRTestValue(i: number): Double;\n  /**\n   * Get the Spatial BP test value for the independent variable at index\n   * @param i Index\n   */\n  GetSpatialBPtest(i: number): Double;\n  /**\n   * Get the KB test value for the independent variable at index\n   * @param i Index\n   */\n  GetKBtest(i: number): Double;\n  /**\n   * Get the white test value for the independent variable at index\n   * @param i Index\n   */\n  GetWhitetest(i: number): Double;\n  /**\n   * Get the Moran I value for the independent variable at index\n   * @param i Index\n   */\n  GetMoranI(i: number): Double;\n  /**\n   * Get the LMLAG value for the independent variable at index\n   * @param i Index\n   */\n  GetLMLAG(i: number): Double;\n  /**\n   * Get the LMLAGRob value for the independent variable at index\n   * @param i Index\n   */\n  GetLMLAGRob(i: number): Double;\n  /**\n   * Get the LMERR value for the independent variable at index\n   * @param i Index\n   */\n  GetLMERR(i: number): Double;\n  /**\n   * Get the LMERRRob value for the independent variable at index\n   * @param i Index\n   */\n  GetLMERRRob(i: number): Double;\n  /**\n   * Get the LMSarma value for the independent variable at index\n   * @param i Index\n   */\n  GetLMSarma(i: number): Double;\n  /**\n   * Get the KelRobin value for the independent variable at index\n   * @param i Index\n   */\n  GetKelRobin(i: number): Double;\n  /**\n   * Get the mean of the dependent variable\n   */\n  GetMeanY(): number;\n  /**\n   * Get the standard deviation of the dependent variable\n   */\n  GetSDevY(): number;\n}\n\n/**\n * The result of the Cartogram\n */\nexport class CartogramResult {\n  getX(): VectorDouble;\n  getY(): VectorDouble;\n  getRadius(): VectorDouble;\n  getCircles(): VectorPolygon;\n}\n\nexport interface GeoDaModule {\n  /**\n   * Calculate the Thiessen polygons\n   * @param x - The centroid x coordinates\n   * @param y - The centroid y coordinates\n   * @returns The Thiessen polygons\n   */\n  thiessenPolygon(x: VectorDouble, y: VectorDouble): VectorPolygon;\n\n  /**\n   * Calculate the Minimum Spanning Tree\n   * @param x - The centroid x coordinates\n   * @param y - The centroid y coordinates\n   * @param weights - The weights of the edges\n   * @returns The Minimum Spanning Tree\n   */\n  mst(x: VectorDouble, y: VectorDouble, weights: VectorDouble): VectorLine;\n\n  /**\n   * Calculate the Cartogram\n   * @param geoms - The collection of geometries\n   * @param values - The values to be used for the cartogram\n   * @param iterations - The number of iterations to run the cartogram\n   * @returns The Cartogram Circles\n   */\n  cartogram(\n    geoms: GeometryCollection,\n    values: VectorDouble,\n    iterations: number,\n    numberOfPointsPerCircle: number\n  ): CartogramResult;\n\n  /**\n   * Calculate the deviation from the mean\n   * @param data - The data values\n   * @param undefs - The undefined values\n   * @returns The deviation from the mean\n   */\n  deviationFromMean(data: VectorDouble, undefs: VectorUInt): VectorDouble;\n\n  /**\n   * Standardize the data using the Median Absolute Deviation (MAD)\n   * @param data - The data values\n   * @param undefs - The undefined values\n   * @returns The standardized data\n   */\n  standardizeMAD(data: VectorDouble, undefs: VectorUInt): VectorDouble;\n\n  /**\n   * Range adjust the data\n   * @param data - The data values\n   * @param undefs - The undefined values\n   * @returns The range adjusted data\n   */\n  rangeAdjust(data: VectorDouble, undefs: VectorUInt): VectorDouble;\n\n  /**\n   * Range standardize the data\n   * @param data - The data values\n   * @param undefs - The undefined values\n   * @returns The range standardized data\n   */\n  rangeStandardize(data: VectorDouble, undefs: VectorUInt): VectorDouble;\n\n  /**\n   * Standardize the data\n   * @param data - The data values\n   * @param undefs - The undefined values\n   * @returns The standardized data\n   */\n  standardize(data: VectorDouble, undefs: VectorUInt): VectorDouble;\n\n  /**\n   * Calculate the raw rate\n   * @param baseData - The base data values\n   * @param eventData - The event data values\n   * @param undefs - The undefined values\n   * @returns The raw rate\n   */\n  rawRate(baseData: VectorDouble, eventData: VectorDouble, undefs: VectorUInt): VectorDouble;\n\n  /**\n   * Calculate the excess risk\n   * @param baseData - The base data values\n   * @param eventData - The event data values\n   * @param undefs - The undefined values\n   * @returns The excess risk\n   */\n  excessRisk(baseData: VectorDouble, eventData: VectorDouble, undefs: VectorUInt): VectorDouble;\n\n  /**\n   * Calculate the empirical Bayes\n   * @param baseData - The base data values\n   * @param eventData - The event data values\n   * @param undefs - The undefined values\n   * @returns The empirical Bayes\n   */\n  empiricalBayes(baseData: VectorDouble, eventData: VectorDouble, undefs: VectorUInt): VectorDouble;\n\n  /**\n   * Calculate the spatial rate\n   * @param neighbors - The neighbors of each observation\n   * @param baseData - The base data values\n   * @param eventData - The event data values\n   * @param undefs - The undefined values\n   * @returns The spatial rate\n   */\n  spatialRate(\n    neighbors: VecVecUInt,\n    baseData: VectorDouble,\n    eventData: VectorDouble,\n    undefs: VectorUInt\n  ): VectorDouble;\n\n  /**\n   * Calculate the rate standardize empirical Bayes\n   * @param baseData - The base data values\n   * @param eventData - The event data values\n   * @param undefs - The undefined values\n   * @returns The rate standardize empirical Bayes\n   */\n  rateStandardizeEmpiricalBayes(\n    baseData: VectorDouble,\n    eventData: VectorDouble,\n    undefs: VectorUInt\n  ): VectorDouble;\n\n  /**\n   * Calculate the spatial empirical Bayes\n   * @param neighbors - The neighbors of each observation\n   * @param baseData - The base data values\n   * @param eventData - The event data values\n   * @param undefs - The undefined values\n   * @returns The spatial empirical Bayes\n   */\n  spatialEmpiricalBayes(\n    neighbors: VecVecUInt,\n    baseData: VectorDouble,\n    eventData: VectorDouble,\n    undefs: VectorUInt\n  ): VectorDouble;\n\n  /**\n   * get the contiguity neighbors using the centroids of a collection of geometries\n   * @param geometries\n   * @param isQueen\n   * @param precisionThreshold\n   * @param orderOfContiguity\n   * @param includeLowerOrder\n   */\n  getPointContiguityWeights(\n    geometries: GeometryCollection,\n    isQueen: boolean,\n    precisionThreshold: number,\n    orderOfContiguity: number,\n    includeLowerOrder: boolean\n  ): VecVecUInt;\n\n  /**\n   * get the contiguity neighbors of a collection of polygons\n   * @param geometries\n   * @param isQueen\n   * @param precisionThreshold\n   * @param orderOfContiguity\n   * @param includeLowerOrder\n   */\n  getPolygonContiguityWeights(\n    geometries: GeometryCollection,\n    isQueen: boolean,\n    precisionThreshold: number,\n    orderOfContiguity: number,\n    includeLowerOrder: boolean\n  ): VecVecUInt;\n\n  /**\n   * get the nearest neighbors of a collection of geometries\n   * @param geometries the collection of geometries\n   * @param k the number of nearest neighbors\n   */\n  getNearestNeighbors(geometries: GeometryCollection, k: UnsignedInt): VecVecUInt;\n\n  /**\n   * Spatially constrained hierarchical clustering (SCHC)\n   * @param k the number of clusters\n   * @param neighbors spatial weights matrix as adjacency list\n   * @param data multivariate data (one array per variable)\n   * @param scaleMethod raw | standardize\n   * @param linkageMethod single | complete | average | ward\n   * @param distanceMethod euclidean | manhattan\n   * @param boundVals optional bound values per observation\n   * @param minBound minimum bound\n   */\n  schc(\n    k: UnsignedInt,\n    neighbors: VecVecUInt,\n    data: VecVecDouble,\n    scaleMethod: string,\n    linkageMethod: string,\n    distanceMethod: string,\n    boundVals: VectorDouble,\n    minBound: Double\n  ): VecVecInt;\n\n  /**\n   * Regionally constrained clustering (REDCAP)\n   * @param k the number of clusters\n   * @param neighbors spatial weights matrix as adjacency list\n   * @param data multivariate data\n   * @param scaleMethod raw | standardize\n   * @param redcapMethod firstorder-singlelinkage | fullorder-completelinkage | fullorder-averagelinkage | fullorder-singlelinkage | fullorder-wardlinkage\n   * @param distanceMethod euclidean | manhattan\n   * @param boundVals optional bound values per observation\n   * @param minBound minimum bound\n   */\n  redcap(\n    k: UnsignedInt,\n    neighbors: VecVecUInt,\n    data: VecVecDouble,\n    scaleMethod: string,\n    redcapMethod: string,\n    distanceMethod: string,\n    boundVals: VectorDouble,\n    minBound: Double\n  ): VecVecInt;\n\n  /**\n   * Spatially constrained clustering (SKATER)\n   * @param k the number of clusters\n   * @param neighbors spatial weights matrix as adjacency list\n   * @param data multivariate data\n   * @param scaleMethod raw | standardize\n   * @param distanceMethod euclidean | manhattan\n   * @param boundVals optional bound values per observation\n   * @param minBound minimum bound\n   */\n  skater(\n    k: UnsignedInt,\n    neighbors: VecVecUInt,\n    data: VecVecDouble,\n    scaleMethod: string,\n    distanceMethod: string,\n    boundVals: VectorDouble,\n    minBound: Double\n  ): VecVecInt;\n\n  /**\n   * AZP (Automatic Zoning Procedure) greedy regionalization\n   */\n  azpGreedy(\n    p: UnsignedInt,\n    neighbors: VecVecUInt,\n    data: VecVecDouble,\n    inits: UnsignedInt,\n    distanceMethod: string,\n    rndSeed: number\n  ): VecVecInt;\n\n  /**\n   * Max-P greedy regionalization\n   */\n  maxpGreedy(\n    neighbors: VecVecUInt,\n    data: VecVecDouble,\n    iterations: UnsignedInt,\n    distanceMethod: string,\n    rndSeed: number\n  ): VecVecInt;\n\n  /**\n   * AZP with simulated annealing\n   */\n  azpSA(\n    p: UnsignedInt,\n    neighbors: VecVecUInt,\n    data: VecVecDouble,\n    inits: UnsignedInt,\n    coolingRate: Double,\n    saMaxit: UnsignedInt,\n    distanceMethod: string,\n    rndSeed: number\n  ): VecVecInt;\n\n  /**\n   * AZP with tabu search\n   */\n  azpTabu(\n    p: UnsignedInt,\n    neighbors: VecVecUInt,\n    data: VecVecDouble,\n    inits: UnsignedInt,\n    tabuLength: UnsignedInt,\n    convTabu: UnsignedInt,\n    distanceMethod: string,\n    rndSeed: number\n  ): VecVecInt;\n\n  /**\n   * Max-P with simulated annealing\n   */\n  maxpSA(\n    neighbors: VecVecUInt,\n    data: VecVecDouble,\n    iterations: UnsignedInt,\n    coolingRate: Double,\n    saMaxit: UnsignedInt,\n    distanceMethod: string,\n    rndSeed: number\n  ): VecVecInt;\n\n  /**\n   * Max-P with tabu search\n   */\n  maxpTabu(\n    neighbors: VecVecUInt,\n    data: VecVecDouble,\n    iterations: UnsignedInt,\n    tabuLength: UnsignedInt,\n    convTabu: UnsignedInt,\n    distanceMethod: string,\n    rndSeed: number\n  ): VecVecInt;\n\n  /**\n   * Spatial validation of a clustering result\n   */\n  spatialValidation(\n    clusters: VectorInt,\n    neighbors: VecVecUInt,\n    geoms: GeometryCollection\n  ): ValidationResult;\n\n  /**\n   * Make clusters spatially contiguous\n   * @param clusters list of clusters (each a list of observation indices)\n   * @param neighbors spatial weights matrix as adjacency list\n   */\n  makeSpatial(clusters: VecVecInt, neighbors: VecVecUInt): VecVecInt;\n\n  /**\n   * Local Neighbor Match Test\n   * @param geoms the geometry collection\n   * @param k the number of nearest neighbors\n   * @param data the multiple data variables\n   * @param scaleMethod the scaling method (raw, standardize)\n   * @param distType the attribute distance metric (euclidean, manhattan)\n   * @param isMile the unit of spatial distance\n   */\n  neighborMatchTest(\n    geoms: GeometryCollection,\n    k: UnsignedInt,\n    data: VecVecDouble,\n    scaleMethod: string,\n    distType: string,\n    isMile: boolean\n  ): VecVecDouble;\n\n  /**\n   * Compute kernel weights for a collection of geometries using k-nearest neighbors.\n   * @param geometries the collection of geometries\n   * @param k the number of nearest neighbors\n   * @param kernel the kernel function (triangular, uniform, epanechnikov, quartic, gaussian)\n   * @param isMile the unit of distance\n   * @param useKernelDiagonals whether the diagonal (self) weight is kernel(0.0) instead of 1.0\n   * @param power the power (or exponent) applied to the distance before normalizing by the bandwidth\n   * @param adaptiveBandwidth whether to use each observation's k-th nearest neighbor distance as its\n   * bandwidth (true) or a single global maximum distance (false)\n   * @param isInverse whether to apply inverse distance weighting before the kernel\n   */\n  getKernelKnnWeights(\n    geometries: GeometryCollection,\n    k: UnsignedInt,\n    kernel: string,\n    isMile: boolean,\n    useKernelDiagonals: boolean,\n    power: Double,\n    adaptiveBandwidth: boolean,\n    isInverse: boolean\n  ): VecVecDouble;\n\n  /**\n   * get the nearest neighbors of a collection of geometries\n   * @param geometries the collection of geometries\n   * @param threshold the distance threshold\n   * @param isMile the unit of distance\n   */\n  getDistanceWeights(\n    geometries: GeometryCollection,\n    threshold: Double,\n    isMile: boolean\n  ): VecVecUInt;\n\n  /**\n   * Compute kernel weights for a collection of geometries using a fixed bandwidth.\n   * @param geometries the collection of geometries\n   * @param bandwidth the fixed bandwidth in the selected unit\n   * @param kernel the kernel function (triangular, uniform, epanechnikov, quartic, gaussian)\n   * @param isMile the unit of distance\n   * @param useKernelDiagonals whether the diagonal (self) weight is kernel(1.0) instead of 1.0\n   * @param power the power (or exponent) applied to the distance before normalizing by the bandwidth\n   */\n  getKernelWeights(\n    geometries: GeometryCollection,\n    bandwidth: Double,\n    kernel: string,\n    isMile: boolean,\n    useKernelDiagonals: boolean,\n    power: Double\n  ): VecVecDouble;\n\n  /**\n   * get the distance thresholds of a collection of geometries that guarantee 1 nearest neighbors\n   * @param geometries the collection of geometries\n   * @param isMile the unit of distance\n   */\n  getDistanceThresholds(geometries: GeometryCollection, isMile: boolean): VectorDouble;\n\n  /**\n   *\n   * @param k the number of breaks\n   * @param data the values to be classified into k classes\n   * @param undefs the indices of data that are undefined\n   */\n  quantileBreaks(k: number, data: VectorDouble, undefs?: VectorUInt): VectorDouble;\n\n  /**\n   * Natural Jenks breaks classification\n   * @param k number of breaks\n   * @param data the values to be classified into k classes\n   * @param undefs the indices of data that are undefined\n   */\n  naturalBreaks(k: number, data: VectorDouble, undefs?: VectorInt): VectorDouble;\n\n  /**\n   * Equal interval breaks classification\n   * @param k number of breaks\n   * @param data the values to be classified into k classes\n   * @param undefs the flags of undefined values\n   */\n  equalIntervalBreaks(k: number, data: VectorDouble, undefs?: VectorInt): VectorDouble;\n\n  /**\n   * Percentile breaks classification: <1%, 1-10%, 10-50%, 50-90%, 90-99%, >99%\n   * @param data the values to be classified\n   * @param undefs the flags of undefined values\n   */\n  percentileBreaks(data: VectorDouble, undefs?: VectorInt): VectorDouble;\n\n  /**\n   * Box breaks classification: Lower outlier, < 25%, [25-50)%, [50-75)%, >= 75%, Upper outlier\n   * @param data the values to be classified\n   * @param undefs the flags of undefined values\n   * @param hinge the hinge value, default is 1.5 and could be 3.0\n   */\n  boxBreaks(data: VectorDouble, undefs: VectorInt, hinge: Double): VectorDouble;\n\n  /**\n   * Standard deviation breaks classification\n   * @param data the values to be classified\n   * @param undefs the flags of undefined values\n   */\n  standardDeviationBreaks(data: VectorDouble, undefs: VectorInt): VectorDouble;\n\n  /**\n   * Local Moran statistics\n   * @param data the data values\n   * @param neighbors the spatial weights matrix that represents neighbor indices: [[1, 2], [0, 2], [0, 1],...]\n   * @param undefs the undefined values\n   * @param significanceCutoff the significance cutoff\n   * @param permuations the number of permutations\n   * @param lastSeed the last seed\n   */\n  localMoran(\n    data: VectorDouble,\n    neighbors: VecVecUInt,\n    undefs: VectorUInt,\n    significanceCutoff: number,\n    permuations: UnsignedInt,\n    lastSeed: number\n  ): LisaResult;\n\n  /**\n   * Batch Local Moran statistics (multiple variables)\n   * @param data the multiple data variables\n   * @param neighbors the spatial weights matrix\n   * @param undefs the undefined values per variable\n   * Empirical Bayes smoothed Local Moran statistics\n   * @param eventData the event (numerator) data values\n   * @param baseData the base (denominator) data values\n   * @param neighbors the spatial weights matrix that represents neighbor indices: [[1, 2], [0, 2], [0, 1],...]\n   * @param undefs the undefined values\n   * @param significanceCutoff the significance cutoff\n   * @param permuations the number of permutations\n   * @param lastSeed the last seed\n   */\n  batchLocalMoran(\n    data: VecVecDouble,\n    neighbors: VecVecUInt,\n    undefs: VecVecUInt,\n    significanceCutoff: number,\n    permuations: UnsignedInt,\n    lastSeed: number\n  ): BatchLisaResult;\n  localMoranEB(\n    eventData: VectorDouble,\n    baseData: VectorDouble,\n    neighbors: VecVecUInt,\n    undefs: VectorUInt,\n    significanceCutoff: number,\n    permuations: UnsignedInt,\n    lastSeed: number\n  ): LisaResult;\n\n  /**\n   * Bivariate Local Moran statistics\n   * @param data1 the first data values\n   * @param data2 the second data values\n   * @param neighbors the spatial weights matrix that represents neighbor indices: [[1, 2], [0, 2], [0, 1],...]\n   * @param undefs the undefined values\n   * @param significanceCutoff the significance cutoff\n   * @param permuations the number of permutations\n   * @param lastSeed the last seed\n   */\n  bivariateLocalMoran(\n    data1: VectorDouble,\n    data2: VectorDouble,\n    neighbors: VecVecUInt,\n    undefs: VectorUInt,\n    significanceCutoff: number,\n    permuations: UnsignedInt,\n    lastSeed: number\n  ): LisaResult;\n\n  /**\n   * Local Getis-Ord statistics\n   * @param data the data values\n   * @param neighbors the spatial weights matrix that represents neighbor indices: [[1, 2], [0, 2], [0, 1],...]\n   * @param undefs the undefined values\n   * @param significanceCutoff the significance cutoff\n   * @param permuations the number of permutations\n   * @param lastSeed the last seed\n   * @param isGStar whether to use G* or G\n   */\n  localG(\n    data: VectorDouble,\n    neighbors: VecVecUInt,\n    undefs: VectorUInt,\n    significanceCutoff: number,\n    permuations: UnsignedInt,\n    lastSeed: number,\n    isGStar: number\n  ): LisaResult;\n\n  /**\n   * Local Geary statistics\n   * @param data the data values\n   * @param neighbors the spatial weights matrix that represents neighbor indices: [[1, 2], [0, 2], [0, 1],...]\n   * @param undefs the undefined values\n   * @param significanceCutoff the significance cutoff\n   * @param permuations the number of permutations\n   * @param lastSeed the last seed\n   */\n  localGeary(\n    data: VectorDouble,\n    neighbors: VecVecUInt,\n    undefs: VectorUInt,\n    significanceCutoff: number,\n    permuations: UnsignedInt,\n    lastSeed: number\n  ): LisaResult;\n\n  /**\n   * Multivariate Local Geary statistics\n   * @param data the array of data values\n   * @param neighbors the spatial weights matrix that represents neighbor indices: [[1, 2], [0, 2], [0, 1],...]\n   * @param undefs the array of undefined values\n   * @param significanceCutoff the significance cutoff\n   * @param permuations the number of permutations\n   * @param lastSeed the last seed\n   */\n  multivariateLocalGeary(\n    data: VecVecDouble,\n    neighbors: VecVecUInt,\n    undefs: VecVecUInt,\n    significanceCutoff: number,\n    permuations: UnsignedInt,\n    lastSeed: number\n  ): LisaResult;\n\n  /**\n   * Local Join Count statistics\n   * @param data the binary (0/1) data values\n   * @param neighbors the spatial weights matrix that represents neighbor indices: [[1, 2], [0, 2], [0, 1],...]\n   * @param undefs the undefined values\n   * @param significanceCutoff the significance cutoff\n   * @param permuations the number of permutations\n   * @param lastSeed the last seed\n   */\n  localJoinCount(\n    data: VectorDouble,\n    neighbors: VecVecUInt,\n    undefs: VectorUInt,\n    significanceCutoff: number,\n    permuations: UnsignedInt,\n    lastSeed: number\n  ): LisaResult;\n\n  /**\n   * Multivariate Local Join Count statistics\n   * @param data the multiple binary (0/1) data variables\n   * @param neighbors the spatial weights matrix that represents neighbor indices: [[1, 2], [0, 2], [0, 1],...]\n   * @param undefs the undefined values\n   * @param significanceCutoff the significance cutoff\n   * @param permuations the number of permutations\n   * @param lastSeed the last seed\n   */\n  multivariateLocalJoinCount(\n    data: VecVecDouble,\n    neighbors: VecVecUInt,\n    undefs: VecVecUInt,\n    significanceCutoff: number,\n    permuations: UnsignedInt,\n    lastSeed: number\n  ): LisaResult;\n\n  /**\n   * Local Quantile LISA statistics\n   * @param k the number of breaks\n   * @param quantile which quantile to use\n   * @param data the data values\n   * @param neighbors the spatial weights matrix that represents neighbor indices: [[1, 2], [0, 2], [0, 1],...]\n   * @param undefs the undefined values\n   * @param significanceCutoff the significance cutoff\n   * @param permuations the number of permutations\n   * @param lastSeed the last seed\n   */\n  quantileLisa(\n    k: number,\n    quantile: number,\n    data: VectorDouble,\n    neighbors: VecVecUInt,\n    undefs: VectorUInt,\n    significanceCutoff: number,\n    permuations: UnsignedInt,\n    lastSeed: number\n  ): LisaResult;\n\n  /**\n   * Multivariate Local Quantile LISA statistics\n   * @param kValues the number of quantile breaks per variable\n   * @param quantileValues the quantile class per variable\n   * @param data the multiple data variables\n   * @param neighbors the spatial weights matrix that represents neighbor indices: [[1, 2], [0, 2], [0, 1],...]\n   * @param undefs the undefined values\n   * @param significanceCutoff the significance cutoff\n   * @param permuations the number of permutations\n   * @param lastSeed the last seed\n   */\n  multivariateQuantileLisa(\n    kValues: VectorInt,\n    quantileValues: VectorInt,\n    data: VecVecDouble,\n    neighbors: VecVecUInt,\n    undefs: VecVecUInt,\n    significanceCutoff: number,\n    permuations: UnsignedInt,\n    lastSeed: number\n  ): LisaResult;\n\n  // test for dotProduct\n  dotProduct(x: VectorDouble, y: VectorDouble): number;\n\n  /**\n   *\n   * @param dep The values of the dependent variable\n   * @param indeps The values of the independent variables, it's a 2D array\n   * @param weights The spatial weights represented as a 2D array and each row shows the neighbors of the corresponding observation\n   * @param weightsValues The spatial weights values represented as a 2D array and each row shows the neighbors of the corresponding observation\n   * @param depName The name of the dependent variable\n   * @param indepNames The names of the independent variables\n   * @param datasetName The name of the dataset\n   * @param depUndefs The 0/1 array indicating the undefined values of the dependent variable\n   * @param indepUndefs The 2D array of 0/1 indicating the undefined values of the independent variables\n   */\n  linearRegression(\n    dep: VectorDouble,\n    indeps: VecVecDouble,\n    weights: VecVecUInt,\n    weightsValues: VecVecDouble,\n    depName: string,\n    indepNames: VectorString,\n    datasetName: string,\n    depUndefs: VectorUInt,\n    indepUndefs: VecVecUInt\n  ): DiagnosticReport;\n\n  /**\n   * Spatial Lag regression\n   * @param dep The values of the dependent variable\n   * @param indeps The values of the independent variables, it's a 2D array\n   * @param weights The spatial weights represented as a 2D array and each row shows the neighbors of the corresponding observation\n   * @param weightsValues The spatial weights values represented as a 2D array and each row shows the neighbors of the corresponding observation\n   * @param depName The name of the dependent variable\n   * @param indepNames The names of the independent variables\n   * @param datasetName The name of the dataset\n   * @param depUndefs The 0/1 array indicating the undefined values of the dependent variable\n   * @param indepUndefs The 2D array of 0/1 indicating the undefined values of the independent variables\n   */\n  spatialLag(\n    dep: VectorDouble,\n    indeps: VecVecDouble,\n    weights: VecVecUInt,\n    weightsValues: VecVecDouble,\n    depName: string,\n    indepNames: VectorString,\n    datasetName: string,\n    depUndefs: VectorUInt,\n    indepUndefs: VecVecUInt\n  ): DiagnosticReport;\n\n  /**\n   * Spatial Error regression\n   * @param dep The values of the dependent variable\n   * @param indeps The values of the independent variables, it's a 2D array\n   * @param weights The spatial weights represented as a 2D array and each row shows the neighbors of the corresponding observation\n   * @param weightsValues The spatial weights values represented as a 2D array and each row shows the neighbors of the corresponding observation\n   * @param depName The name of the dependent variable\n   * @param indepNames The names of the independent variables\n   * @param datasetName The name of the dataset\n   * @param depUndefs The 0/1 array indicating the undefined values of the dependent variable\n   * @param indepUndefs The 2D array of 0/1 indicating the undefined values of the independent variables\n   */\n  spatialError(\n    dep: VectorDouble,\n    indeps: VecVecDouble,\n    weights: VecVecUInt,\n    weightsValues: VecVecDouble,\n    depName: string,\n    indepNames: VectorString,\n    datasetName: string,\n    depUndefs: VectorUInt,\n    indepUndefs: VecVecUInt\n  ): DiagnosticReport;\n\n  /**\n   * Spatial Join of two collections of geometries\n   * @param left The left collection of geometries\n   * @param right The right collection of geometries\n   * @returns The indices of the right geometries that are spatially joined to the left geometries\n   */\n  spatialJoin(left: GeometryCollection, right: GeometryCollection): VecVecUInt;\n\n  /**\n   * Spatial Dissolve of a collection of polygons\n   * @param polys The collection of polygons\n   * @returns The dissolved polygon\n   */\n  spatialDissolve(polys: GeometryCollection): Polygon;\n\n  GeometryCollection: typeof GeometryCollection;\n  PolygonCollection: typeof PolygonCollection;\n  LineCollection: typeof LineCollection;\n  PointCollection: typeof PointCollection;\n  Polygon: typeof Polygon;\n  Line: typeof Line;\n  VectorUInt: typeof VectorUInt;\n  VecVecUInt: typeof VecVecUInt;\n  VectorInt: typeof VectorInt;\n  VecVecInt: typeof VecVecInt;\n  VectorDouble: typeof VectorDouble;\n  VecVecDouble: typeof VecVecDouble;\n  VectorPolygon: typeof VectorPolygon;\n  VectorLine: typeof VectorLine;\n  VectorString: typeof VectorString;\n  LisaResult: typeof LisaResult;\n  DiagnosticReport: typeof DiagnosticReport;\n}\n// declare function factory(): Promise<GeoDaModule>;\n// export default factory;\n", "// SPDX-License-Identifier: MIT\n// Copyright contributors to the geodalib project\n\nimport { VectorDouble, VectorInt, VectorString } from './wasm/index.d';\n\nexport const earthRadius = 6371008.8;\nconst mileToMeters = 1609.344;\n\n// for lat and lng, we use the great circle distance or arc distance\n// in the unit of mile or kilometer (KM)\nexport enum DistanceUnit {\n  Mile = 'Mile',\n  KM = 'KM',\n}\n\n/**\n * Calculate the distance between two points on the earth in the unit of degree\n * @param distance The distance in the unit of mile or kilometer (KM)\n * @param unit The unit of the distance, Mile or KM\n * @returns The distance in the unit of degree\n */\nexport function lengthToDegrees(distance: number, unit: DistanceUnit): number {\n  // length to radians\n  const factor = unit === DistanceUnit.KM ? earthRadius / 1000 : earthRadius / mileToMeters;\n  const radians = distance / factor;\n  // radians to degrees\n  const degrees = radians % (2 * Math.PI);\n  return degrees;\n}\n\n/**\n * Calculate the distance between two points on the earth in the unit of meters\n * @param distance The distance in the unit of mile or kilometer (KM)\n * @param unit The unit of the distance, Mile or KM\n * @returns The distance in the unit of meters\n */\nexport function lengthToMeters(distance: number, unit: DistanceUnit): number {\n  return unit === DistanceUnit.Mile ? distance * mileToMeters : distance * 1000;\n}\n\n/**\n * Convert the std::vector<double> data to number[]\n * @param data The std::vector<double> data\n * @returns The values in number[] format.\n */\nexport function vecDoubleToNumber(data: VectorDouble): number[] {\n  const result: number[] = [];\n\n  const n = data.size();\n  for (let i = 0; i < n; ++i) {\n    result.push(data.get(i));\n  }\n\n  return result;\n}\n\n/**\n * Convert the std::vector<int> data to number[]\n * @param data The std::vector<int> data\n * @returns The values in number[] format.\n */\nexport function vecIntToNumber(data: VectorInt): number[] {\n  const result: number[] = [];\n\n  const n = data.size();\n  for (let i = 0; i < n; ++i) {\n    result.push(data.get(i));\n  }\n\n  return result;\n}\n\n/**\n * Convert the std::vector<string> data to string[]\n * @param data The std::vector<string> data\n * @returns The values in string[] format.\n */\nexport function vecStringToArray(data: VectorString): string[] {\n  const result: string[] = [];\n\n  const n = data.size();\n  for (let i = 0; i < n; ++i) {\n    result.push(data.get(i));\n  }\n\n  return result;\n}\n", "export const VERSION = '0.0.25';\n", "// SPDX-License-Identifier: MIT\n// Copyright contributors to the geodalib project\n\nimport { createWASMManager } from '@geoda/common';\nimport { VERSION } from '@geoda/common';\n// @ts-expect-error wasm module is not typed by emscripten\nimport wasmModule from '../wasm/index.cjs';\nimport { resolve } from 'path';\n\nconst wasmManager = createWASMManager(wasmModule);\n\n// Detect if we're in Node.js environment\nconst isNode =\n  typeof process !== 'undefined' && process.versions != null && process.versions.node != null;\n\n// use CDN URL by default\nwasmManager.setDeliveryWASM(\n  `https://cdn.jsdelivr.net/npm/@geoda/core@${VERSION}/wasm/geoda-core.wasm`\n);\n\n// if in Node.js, use local WASM file\nif (isNode) {\n  // For Node.js, construct absolute path to wasm file in node_modules\n  const wasmPath = resolve(__dirname, '../wasm/geoda-core.wasm');\n  const wasmUrl = `file://${wasmPath}`;\n  wasmManager.setDeliveryWASM(wasmUrl);\n}\n\nexport function setDeliveryWASM(wasmURL: string) {\n  wasmManager.setDeliveryWASM(wasmURL);\n}\n\nexport async function initWASM(wasmURL?: string) {\n  return await wasmManager.initWASM(wasmURL);\n}\n\nexport async function resetWASM() {\n  return await wasmManager.resetWASM();\n}\n", "// SPDX-License-Identifier: MIT\n// Copyright contributors to the geodalib project\n\nimport { BinaryFeatureCollection } from '@loaders.gl/schema';\n\nimport {\n  GeoDaModule,\n  PolygonCollection,\n  PointCollection,\n  LineCollection,\n  GeometryCollection,\n} from '@geoda/common';\n\n/**\n * Defines the geometry types supported in binary format. See DeckGlGeoTypes in kepler.gl/layers\n * @typedef {Object} BinaryGeometryType\n * @property {boolean} point - Whether the geometry contains point features\n * @property {boolean} line - Whether the geometry contains line features\n * @property {boolean} polygon - Whether the geometry contains polygon features\n */\nexport type BinaryGeometryType = {\n  point: boolean;\n  line: boolean;\n  polygon: boolean;\n};\n\n/**\n * Creates a GeoDa GeometryCollection from binary geometry features\n * @param {BinaryGeometryType} geometryType - The type of geometry to create\n * @param {BinaryFeatureCollection[]} binaryFeaturesChunks - Array of binary feature collections. See BinaryFeatureCollection in `@loaders.gl/schema`\n * @param {GeoDaModule} wasm - The initialized GeoDa WASM module\n * @returns {Promise<GeometryCollection>} A GeoDa geometry collection\n * @throws {Error} If WASM module is not initialized or geometry type is unknown\n */\nexport async function getGeometryCollectionFromBinaryGeometries(\n  geometryType: BinaryGeometryType,\n  binaryFeaturesChunks: BinaryFeatureCollection[],\n  wasm: GeoDaModule,\n  fixPolygon?: boolean,\n  convertToUTM?: boolean\n): Promise<GeometryCollection> {\n  if (!wasm) {\n    throw new Error('GeoDa WASM module is not initialized');\n  }\n\n  if (geometryType.point) {\n    const pointsArray = binaryFeaturesChunks.map(chunk => chunk.points);\n    return createPointCollectionFromBinaryFeatures(pointsArray, wasm, convertToUTM);\n  } else if (geometryType.line) {\n    const linesArray = binaryFeaturesChunks.map(chunk => chunk.lines);\n    return createLineCollectionFromBinaryFeatures(linesArray, wasm, convertToUTM);\n  } else if (geometryType.polygon) {\n    const polygonsArray = binaryFeaturesChunks.map(chunk => chunk.polygons);\n    return createPolygonCollectionFromBinaryFeatures(polygonsArray, wasm, fixPolygon, convertToUTM);\n  }\n  throw new Error('getGeometryCollectionFromBinaryGeometries: Binary geometry type is unknown.');\n}\n\n/**\n * Creates a GeoDa PointCollection from binary point features\n * @param {Array<BinaryFeatureCollection['points']>} pointsArray - Array of binary point features from GeoArrow chunks\n * @param {GeoDaModule} wasm - The initialized GeoDa WASM module\n * @returns {PointCollection} A GeoDa point collection\n */\nexport function createPointCollectionFromBinaryFeatures(\n  pointsArray: Array<BinaryFeatureCollection['points']>,\n  wasm: GeoDaModule,\n  convertToUTM?: boolean\n): PointCollection {\n  // create PointCollection from binaryFeatures\n  const xs = new wasm.VectorDouble();\n  const ys = new wasm.VectorDouble();\n  const parts = new wasm.VectorUInt();\n  const sizes = new wasm.VectorUInt();\n\n  // parts index into the concatenated xs/ys arrays, so each chunk's part starts\n  // must be offset by the coordinates already added from previous chunks.\n  let pointOffset = 0;\n  for (let chunkIndex = 0; chunkIndex < pointsArray.length; chunkIndex++) {\n    const points = pointsArray[chunkIndex];\n    if (points) {\n      const coords = points.positions.value;\n      for (let i = 0; i < coords.length; i += 2) {\n        xs.push_back(coords[i]);\n        ys.push_back(coords[i + 1]);\n      }\n      // get index as the start of each part when points.featureIds.value[i] changed\n      const chunkStart = pointOffset;\n      pointOffset += coords.length / 2;\n      let index = chunkStart;\n      for (let i = 0; i < points.featureIds.value.length; i++) {\n        if (i === 0 || points.featureIds.value[i] !== points.featureIds.value[i - 1]) {\n          parts.push_back(index);\n        }\n        index++;\n      }\n    }\n  }\n  // get sizes from the full parts list\n  for (let i = 1; i < parts.size(); i++) {\n    sizes.push_back(parts.get(i) - parts.get(i - 1));\n  }\n  // add the last size\n  if (parts.size() > 0) {\n    sizes.push_back(pointOffset - parts.get(parts.size() - 1));\n  }\n  const pointCollection = new wasm.PointCollection(xs, ys, parts, sizes, convertToUTM || false);\n  return pointCollection;\n}\n\n/**\n * Creates a GeoDa LineCollection from binary line features\n * @param {Array<BinaryFeatureCollection['lines']>} linesArray - Array of binary line features from GeoArrow chunks\n * @param {GeoDaModule} wasm - The initialized GeoDa WASM module\n * @returns {LineCollection} A GeoDa line collection\n */\nexport function createLineCollectionFromBinaryFeatures(\n  linesArray: Array<BinaryFeatureCollection['lines']>,\n  wasm: GeoDaModule,\n  convertToUTM?: boolean\n): LineCollection {\n  // create LineCollection from array of binaryFeatures\n  const xs = new wasm.VectorDouble();\n  const ys = new wasm.VectorDouble();\n  const parts = new wasm.VectorUInt();\n  const sizes = new wasm.VectorUInt();\n\n  let lastStartPointIndex = 0;\n  for (let lineIndex = 0; lineIndex < linesArray.length; lineIndex++) {\n    const lines = linesArray[lineIndex];\n    if (lines) {\n      const coords = lines.positions.value;\n      const geomOffsets = lines.pathIndices.value;\n\n      // get xs, ys, parts, sizes\n      for (let i = 0; i < coords.length; i += 2) {\n        xs.push_back(coords[i]);\n        ys.push_back(coords[i + 1]);\n      }\n      // parts is geomOffsets: store the point index of each part\n      // get sizes from featureIds: store number of parts for each line/multiline\n      let numParts = 0;\n      for (let i = 0; i < geomOffsets.length - 1; i++) {\n        const startPointIndex = geomOffsets[i];\n        parts.push_back(startPointIndex + lastStartPointIndex);\n        if (\n          i > 0 &&\n          lines.featureIds.value[startPointIndex] !== lines.featureIds.value[startPointIndex - 1]\n        ) {\n          sizes.push_back(numParts);\n          numParts = 0;\n        }\n        numParts += 1;\n      }\n      // add the last size\n      sizes.push_back(numParts);\n      // update lastStartPointIndex\n      lastStartPointIndex += geomOffsets[geomOffsets.length - 1];\n    }\n  }\n\n  const lineCollection = new wasm.LineCollection(xs, ys, parts, sizes, convertToUTM || false);\n  return lineCollection;\n}\n\n/**\n * Creates a GeoDa PolygonCollection from binary polygon features\n * @param {Array<BinaryFeatureCollection['polygons']>} polygonsArray - Array of binary polygon features from GeoArrow chunks\n * @param {GeoDaModule} wasm - The initialized GeoDa WASM module\n * @returns {PolygonCollection} A GeoDa polygon collection\n */\nexport function createPolygonCollectionFromBinaryFeatures(\n  polygonsArray: Array<BinaryFeatureCollection['polygons']>,\n  wasm: GeoDaModule,\n  fixPolygon?: boolean,\n  convertToUTM?: boolean\n): PolygonCollection {\n  // create PolygonCollection from array of binaryFeatures\n  const xs = new wasm.VectorDouble();\n  const ys = new wasm.VectorDouble();\n  const parts = new wasm.VectorUInt();\n  const holes = new wasm.VectorUInt();\n  const sizes = new wasm.VectorUInt();\n\n  let lastPrimitiveIndex = 0;\n  for (let chunkIndex = 0; chunkIndex < polygonsArray.length; chunkIndex++) {\n    const polygons = polygonsArray[chunkIndex];\n    if (polygons) {\n      const coords = polygons.positions.value;\n      const polygonIndices = polygons.polygonIndices.value;\n      const primitivePolygonIndices = polygons.primitivePolygonIndices.value;\n\n      // get xs, ys, parts, sizes\n      for (let i = 0; i < coords.length; i += 2) {\n        xs.push_back(coords[i]);\n        ys.push_back(coords[i + 1]);\n      }\n      let primitiveIndex = 0;\n      let numParts = 0;\n      for (let i = 0; i < polygonIndices.length - 1; i++) {\n        const startIdx = polygonIndices[i];\n        const endIdx = polygonIndices[i + 1];\n        while (primitivePolygonIndices[primitiveIndex] < endIdx) {\n          // parts: start index of each part\n          // holes: true if the part is a hole\n          if (primitivePolygonIndices[primitiveIndex] > startIdx) {\n            // holeIndices.push(primitivePolygonIndices[primitiveIndex] - startIdx);\n            holes.push_back(1);\n          } else {\n            holes.push_back(0);\n          }\n          parts.push_back(primitivePolygonIndices[primitiveIndex] + lastPrimitiveIndex);\n          primitiveIndex++;\n          numParts += 1;\n        }\n        if (polygons.featureIds.value[endIdx] !== polygons.featureIds.value[endIdx - 1]) {\n          sizes.push_back(numParts);\n          numParts = 0;\n        }\n      }\n      lastPrimitiveIndex += primitivePolygonIndices[primitivePolygonIndices.length - 1];\n    }\n  }\n\n  const polygonCollection = new wasm.PolygonCollection(\n    xs,\n    ys,\n    parts,\n    holes,\n    sizes,\n    fixPolygon || false,\n    convertToUTM || false\n  );\n  return polygonCollection;\n}\n", "// SPDX-License-Identifier: MIT\n// Copyright contributors to the geodalib project\n\nimport { BinaryFeatureCollection } from '@loaders.gl/schema';\nimport { GeometryCollection } from '@geoda/common';\n\nimport {\n  BinaryGeometryType,\n  getGeometryCollectionFromBinaryGeometries,\n} from '../geometry/binary-geometry';\nimport { initWASM } from '../init';\n\n/**\n * Type of Distance based Neighbors from binary geometries arguments.\n */\ntype DistanceNeighborsFromBinaryGeometriesProps = {\n  distanceThreshold: number;\n  isMile?: boolean;\n  binaryGeometryType: BinaryGeometryType;\n  binaryGeometries: BinaryFeatureCollection[];\n};\n\n/**\n * Calculates the neighbors within a distance band for a given set of geometries or latitude/longitude arrays.\n * @param {NearestNeighborsFromBinaryGeometriesProps} input - The input parameters.\n * @returns {Promise<number[][]>} - The nearest neighbors as an array of indices.\n */\nexport async function getDistanceNeighborsFromBinaryGeometries({\n  distanceThreshold,\n  isMile = false,\n  binaryGeometryType,\n  binaryGeometries,\n}: DistanceNeighborsFromBinaryGeometriesProps): Promise<number[][]> {\n  if (!binaryGeometries || binaryGeometries.length === 0) {\n    return [];\n  }\n\n  const wasmInstance = await initWASM();\n  const geomCollection = await getGeometryCollectionFromBinaryGeometries(\n    binaryGeometryType,\n    binaryGeometries,\n    wasmInstance\n  );\n\n  const neighbors = await getDistanceNeighborsFromGeomCollection({\n    geomCollection,\n    distanceThreshold,\n    isMile,\n  });\n\n  return neighbors;\n}\n\nexport async function getDistanceNeighborsFromGeomCollection({\n  geomCollection,\n  distanceThreshold,\n  isMile = false,\n}: {\n  geomCollection: GeometryCollection;\n  distanceThreshold: number;\n  isMile?: boolean;\n}): Promise<number[][]> {\n  const wasmInstance = await initWASM();\n  const neighbors: number[][] = [];\n  if (geomCollection) {\n    const result = wasmInstance.getDistanceWeights(geomCollection, distanceThreshold, isMile);\n    for (let i = 0; i < result.size(); ++i) {\n      const nbrs = result.get(i);\n      const nbrIndices: number[] = Array(nbrs.size());\n      for (let j = 0, nbrSize = nbrs.size(); j < nbrSize; ++j) {\n        nbrIndices[j] = nbrs.get(j);\n      }\n      neighbors[i] = nbrIndices;\n    }\n  }\n  return neighbors;\n}\n\nexport type DistanceThresholds = {\n  minDistance: number;\n  maxDistance: number;\n  maxPairDistance: number;\n};\n\nexport type DistanceThresholdsProps = {\n  isMile?: boolean;\n  binaryGeometryType: BinaryGeometryType;\n  binaryGeometries: BinaryFeatureCollection[];\n};\n\n/**\n * Get the distance thresholds for a given set of geometries or latitude/longitude arrays:\n * The thresholds are calculated based on the minimum, maximum, and maximum pair distances.\n * - the minimum threshold is the minimum distance that guarantees that at least one geometry has one neighbor.\n * - the maximum threshold is the maximum distance that guarantees that every geometry has at least one neighbor.\n * - the maximum pair threshold is the maximum distance between any two geometries.\n *\n * The distances are calculated as the haversine distance between the centroids of the geometries.\n * The units of the thresholds are in kilometers or miles.\n *\n * ## Example\n * ```ts\n * import { getDistanceThresholds } from '@geoda/core';\n *\n * const geometries = [\n *   { type: 'Feature', geometry: { type: 'Point', coordinates: [0, 0] } },\n *   { type: 'Feature', geometry: { type: 'Point', coordinates: [1, 0] } },\n *   { type: 'Feature', geometry: { type: 'Point', coordinates: [0, 1] } },\n * ];\n *\n * const thresholds = await getDistanceThresholds({\n *   binaryGeometryType: 'Point',\n *   binaryGeometries: geometries,\n * });\n *\n * console.log(thresholds);\n * ```\n */\nexport async function getDistanceThresholds({\n  isMile = false,\n  binaryGeometryType,\n  binaryGeometries,\n}: DistanceThresholdsProps): Promise<DistanceThresholds> {\n  const wasmInstance = await initWASM();\n  const geomCollection = await getGeometryCollectionFromBinaryGeometries(\n    binaryGeometryType,\n    binaryGeometries,\n    wasmInstance\n  );\n  if (geomCollection) {\n    const thresValues = wasmInstance.getDistanceThresholds(geomCollection, isMile);\n    return {\n      minDistance: thresValues.get(0),\n      maxDistance: thresValues.get(1),\n      maxPairDistance: thresValues.get(2),\n    };\n  }\n  return {\n    minDistance: 0,\n    maxDistance: 0,\n    maxPairDistance: 0,\n  };\n}\n", "// SPDX-License-Identifier: MIT\n// Copyright contributors to the geodalib project\n\nimport { BinaryFeatureCollection } from '@loaders.gl/schema';\nimport { GeometryCollection } from '@geoda/common';\n\nimport {\n  BinaryGeometryType,\n  getGeometryCollectionFromBinaryGeometries,\n} from '../geometry/binary-geometry';\nimport { initWASM } from '../init';\nimport { vecDoubleToNumber } from '@geoda/common';\n\n/**\n * The result of a local neighbor match test.\n */\nexport type NeighborMatchTestResult = {\n  /** number of common k-nearest neighbors in spatial and attribute space */\n  cardinality: number[];\n  /** hypergeometric probability of observing that overlap */\n  probability: number[];\n};\n\n/**\n * Configuration for the local neighbor match test.\n */\nexport type NeighborMatchTestProps = {\n  k: number;\n  data: number[][] | Float32Array[];\n  scaleMethod?: string;\n  distType?: string;\n  isMile?: boolean;\n  binaryGeometryType: BinaryGeometryType;\n  binaryGeometries: BinaryFeatureCollection[];\n};\n\nfunction vecVecDoubleToNumber(v: { size(): number; get(i: number): unknown }): number[][] {\n  const rows: number[][] = [];\n  for (let i = 0; i < v.size(); ++i) {\n    rows.push(vecDoubleToNumber(v.get(i) as never));\n  }\n  return rows;\n}\n\n/**\n * Computes the local neighbor match test, assessing the overlap between k-nearest\n * neighbors in geographic space and k-nearest neighbors in attribute space.\n *\n * @returns {Promise<NeighborMatchTestResult>} the cardinality and probability arrays\n */\nexport async function getNeighborMatchTestFromBinaryGeometries({\n  k,\n  data,\n  scaleMethod = 'standardize',\n  distType = 'euclidean',\n  isMile = false,\n  binaryGeometryType,\n  binaryGeometries,\n}: NeighborMatchTestProps): Promise<NeighborMatchTestResult> {\n  if (!binaryGeometries || binaryGeometries.length === 0) {\n    return { cardinality: [], probability: [] };\n  }\n\n  const wasmInstance = await initWASM();\n  const geomCollection = await getGeometryCollectionFromBinaryGeometries(\n    binaryGeometryType,\n    binaryGeometries,\n    wasmInstance\n  );\n\n  const n = geomCollection.size();\n  // Each variable must have exactly one value per observation. Padding a short\n  // variable with NaN (or truncating a long one) would bypass the C++ length\n  // check and silently produce an invalid test result.\n  for (const varData of data) {\n    if (varData.length !== n) {\n      throw new Error(\n        `getNeighborMatchTestFromBinaryGeometries: each variable must have ${n} values (one per observation), got ${varData.length}`\n      );\n    }\n  }\n  const wasmData = new wasmInstance.VecVecDouble();\n  for (const varData of data) {\n    const wasmVar = new wasmInstance.VectorDouble();\n    wasmVar.resize(n, 0);\n    for (let i = 0; i < n; ++i) wasmVar.set(i, Number(varData[i]));\n    wasmData.push_back(wasmVar);\n  }\n\n  const result = wasmInstance.neighborMatchTest(\n    geomCollection,\n    k,\n    wasmData,\n    scaleMethod,\n    distType,\n    isMile\n  );\n\n  const rows = vecVecDoubleToNumber(result);\n  return { cardinality: rows[0] ?? [], probability: rows[1] ?? [] };\n}\n\nexport async function getNeighborMatchTestFromGeomCollection({\n  k,\n  data,\n  scaleMethod = 'standardize',\n  distType = 'euclidean',\n  isMile = false,\n  geomCollection,\n}: {\n  k: number;\n  data: number[][] | Float32Array[];\n  scaleMethod?: string;\n  distType?: string;\n  isMile?: boolean;\n  geomCollection: GeometryCollection;\n}): Promise<NeighborMatchTestResult> {\n  const wasmInstance = await initWASM();\n  const n = geomCollection.size();\n  for (const varData of data) {\n    if (varData.length !== n) {\n      throw new Error(\n        `getNeighborMatchTestFromGeomCollection: each variable must have ${n} values (one per observation), got ${varData.length}`\n      );\n    }\n  }\n  const wasmData = new wasmInstance.VecVecDouble();\n  for (const varData of data) {\n    const wasmVar = new wasmInstance.VectorDouble();\n    wasmVar.resize(n, 0);\n    for (let i = 0; i < n; ++i) wasmVar.set(i, Number(varData[i]));\n    wasmData.push_back(wasmVar);\n  }\n\n  const result = wasmInstance.neighborMatchTest(\n    geomCollection,\n    k,\n    wasmData,\n    scaleMethod,\n    distType,\n    isMile\n  );\n  const rows = vecVecDoubleToNumber(result);\n  return { cardinality: rows[0] ?? [], probability: rows[1] ?? [] };\n}\n", "// SPDX-License-Identifier: MIT\n// Copyright contributors to the geodalib project\n\nimport { BinaryFeatureCollection } from '@loaders.gl/schema';\nimport { GeometryCollection } from '@geoda/common';\n\nimport {\n  BinaryGeometryType,\n  getGeometryCollectionFromBinaryGeometries,\n} from '../geometry/binary-geometry';\nimport { initWASM } from '../init';\n\n/**\n * Type of Kernel K-Nearest Neighbors weights from binary geometries arguments.\n */\ntype KernelKnnWeightsFromBinaryGeometriesProps = {\n  k: number;\n  kernel: string;\n  isMile?: boolean;\n  useKernelDiagonals?: boolean;\n  power?: number;\n  adaptiveBandwidth?: boolean;\n  isInverse?: boolean;\n  binaryGeometryType: BinaryGeometryType;\n  binaryGeometries: BinaryFeatureCollection[];\n};\n\n/**\n * Calculates k-nearest neighbor kernel weights for a given set of geometries or\n * latitude/longitude arrays. Each row is an interleaved list of [neighborIndex, weight]\n * pairs, with the diagonal (self) element appended last.\n * @param {KernelKnnWeightsFromBinaryGeometriesProps} input - The input parameters.\n * @returns {Promise<number[][]>} - The kernel weights as rows of interleaved [index, weight] pairs.\n */\nexport async function getKernelKnnWeightsFromBinaryGeometries({\n  k,\n  kernel,\n  isMile = false,\n  useKernelDiagonals = false,\n  power = 1.0,\n  adaptiveBandwidth = true,\n  isInverse = false,\n  binaryGeometryType,\n  binaryGeometries,\n}: KernelKnnWeightsFromBinaryGeometriesProps): Promise<number[][]> {\n  if (!binaryGeometries || binaryGeometries.length === 0) {\n    return [];\n  }\n\n  const wasmInstance = await initWASM();\n  const geomCollection = await getGeometryCollectionFromBinaryGeometries(\n    binaryGeometryType,\n    binaryGeometries,\n    wasmInstance\n  );\n\n  return await getKernelKnnWeightsFromGeomCollection({\n    k,\n    kernel,\n    geomCollection,\n    isMile,\n    useKernelDiagonals,\n    power,\n    adaptiveBandwidth,\n    isInverse,\n  });\n}\n\n/**\n * Calculates k-nearest neighbor kernel weights for a given set of geometries.\n *\n * ## Example\n * ```ts\n * import { getKernelKnnWeightsFromGeomCollection } from '@geoda/core';\n *\n * const geometries = [\n *   { type: 'Feature', geometry: { type: 'Point', coordinates: [0, 0] } },\n *   { type: 'Feature', geometry: { type: 'Point', coordinates: [1, 0] } },\n *   { type: 'Feature', geometry: { type: 'Point', coordinates: [0, 1] } },\n * ];\n *\n * const weights = await getKernelKnnWeightsFromGeomCollection({\n *   k: 2,\n *   kernel: 'gaussian',\n *   geomCollection: geometries,\n * });\n *\n * console.log(weights);\n * ```\n *\n * @returns {Promise<number[][]>} - The kernel weights as rows of interleaved [index, weight] pairs.\n */\nexport async function getKernelKnnWeightsFromGeomCollection({\n  k,\n  kernel,\n  geomCollection,\n  isMile = false,\n  useKernelDiagonals = false,\n  power = 1.0,\n  adaptiveBandwidth = true,\n  isInverse = false,\n}: {\n  /**\n   * The number of nearest neighbors.\n   */\n  k: number;\n  /**\n   * The kernel function (triangular, uniform, epanechnikov, quartic, gaussian).\n   */\n  kernel: string;\n  /**\n   * The geometry collection to calculate the weights for.\n   */\n  geomCollection: GeometryCollection;\n  /**\n   * The unit of distance (mile or km).\n   */\n  isMile?: boolean;\n  /**\n   * Whether the diagonal (self) weight is kernel(0.0) instead of 1.0.\n   */\n  useKernelDiagonals?: boolean;\n  /**\n   * The power (or exponent) used by the inverse distance weighting\n   * (1 / distance^power). Only applied when isInverse is true.\n   */\n  power?: number;\n  /**\n   * Whether to use each observation's k-th nearest neighbor distance as its bandwidth (true)\n   * or a single global maximum distance (false).\n   */\n  adaptiveBandwidth?: boolean;\n  /**\n   * Whether to apply inverse distance weighting (1 / distance^power) before the kernel.\n   */\n  isInverse?: boolean;\n}): Promise<number[][]> {\n  const wasmInstance = await initWASM();\n  const weights: number[][] = [];\n  if (geomCollection) {\n    const result = wasmInstance.getKernelKnnWeights(\n      geomCollection,\n      k,\n      kernel,\n      isMile,\n      useKernelDiagonals,\n      power,\n      adaptiveBandwidth,\n      isInverse\n    );\n    for (let i = 0; i < result.size(); ++i) {\n      const row = result.get(i);\n      const rowValues: number[] = Array(row.size());\n      for (let j = 0, rowSize = row.size(); j < rowSize; ++j) {\n        rowValues[j] = row.get(j);\n      }\n      weights[i] = rowValues;\n    }\n  }\n  return weights;\n}\n", "// SPDX-License-Identifier: MIT\n// Copyright contributors to the geodalib project\n\nimport { BinaryFeatureCollection } from '@loaders.gl/schema';\nimport { GeometryCollection } from '@geoda/common';\n\nimport {\n  BinaryGeometryType,\n  getGeometryCollectionFromBinaryGeometries,\n} from '../geometry/binary-geometry';\nimport { initWASM } from '../init';\n\n/**\n * The kernel functions supported by the kernel weights APIs.\n */\nconst SUPPORTED_KERNELS = ['triangular', 'uniform', 'epanechnikov', 'quartic', 'gaussian'];\n\n/**\n * Normalize and validate kernel weights inputs before calling into WASM so\n * invalid values cannot trigger an abort/exception inside the C++ runtime.\n */\nfunction validateKernelWeightsInput({\n  bandwidth,\n  kernel,\n  power,\n}: {\n  bandwidth: number;\n  kernel: string;\n  power: number;\n}) {\n  if (!Number.isFinite(bandwidth) || bandwidth <= 0) {\n    throw new Error('bandwidth must be a finite, positive number');\n  }\n  if (typeof kernel !== 'string') {\n    throw new Error(`kernel must be a string, got ${typeof kernel}`);\n  }\n  const normalizedKernel = kernel.toLowerCase();\n  if (!SUPPORTED_KERNELS.includes(normalizedKernel)) {\n    throw new Error(`Unsupported kernel: ${kernel}`);\n  }\n  if (!Number.isFinite(power)) {\n    throw new Error('power must be finite');\n  }\n  return normalizedKernel;\n}\n\n/**\n * Type of Kernel weights from binary geometries arguments.\n */\ntype KernelWeightsFromBinaryGeometriesProps = {\n  bandwidth: number;\n  kernel: string;\n  isMile?: boolean;\n  useKernelDiagonals?: boolean;\n  power?: number;\n  binaryGeometryType: BinaryGeometryType;\n  binaryGeometries: BinaryFeatureCollection[];\n};\n\n/**\n * Calculates the kernel weights within a fixed bandwidth for a given set of geometries or\n * latitude/longitude arrays. Each row is an interleaved list of [neighborIndex, weight] pairs,\n * with the diagonal (self) element appended last.\n * @param {KernelWeightsFromBinaryGeometriesProps} input - The input parameters.\n * @returns {Promise<number[][]>} - The kernel weights as rows of interleaved [index, weight] pairs.\n */\nexport async function getKernelWeightsFromBinaryGeometries({\n  bandwidth,\n  kernel,\n  isMile = false,\n  useKernelDiagonals = false,\n  power = 1.0,\n  binaryGeometryType,\n  binaryGeometries,\n}: KernelWeightsFromBinaryGeometriesProps): Promise<number[][]> {\n  if (!binaryGeometries || binaryGeometries.length === 0) {\n    return [];\n  }\n\n  const wasmInstance = await initWASM();\n  const geomCollection = await getGeometryCollectionFromBinaryGeometries(\n    binaryGeometryType,\n    binaryGeometries,\n    wasmInstance\n  );\n\n  const weights = await getKernelWeightsFromGeomCollection({\n    geomCollection,\n    bandwidth,\n    kernel,\n    isMile,\n    useKernelDiagonals,\n    power,\n  });\n\n  return weights;\n}\n\nexport async function getKernelWeightsFromGeomCollection({\n  geomCollection,\n  bandwidth,\n  kernel,\n  isMile = false,\n  useKernelDiagonals = false,\n  power = 1.0,\n}: {\n  geomCollection: GeometryCollection;\n  bandwidth: number;\n  kernel: string;\n  isMile?: boolean;\n  useKernelDiagonals?: boolean;\n  power?: number;\n}): Promise<number[][]> {\n  const normalizedKernel = validateKernelWeightsInput({ bandwidth, kernel, power });\n\n  const wasmInstance = await initWASM();\n  const weights: number[][] = [];\n  if (geomCollection) {\n    const result = wasmInstance.getKernelWeights(\n      geomCollection,\n      bandwidth,\n      normalizedKernel,\n      isMile,\n      useKernelDiagonals,\n      power\n    );\n    for (let i = 0; i < result.size(); ++i) {\n      const row = result.get(i);\n      const rowValues: number[] = Array(row.size());\n      for (let j = 0, rowSize = row.size(); j < rowSize; ++j) {\n        rowValues[j] = row.get(j);\n      }\n      weights[i] = rowValues;\n    }\n  }\n  return weights;\n}\n", "// SPDX-License-Identifier: MIT\n// Copyright contributors to the geodalib project\n\nimport { BinaryFeatureCollection } from '@loaders.gl/schema';\nimport { GeometryCollection } from '@geoda/common';\nimport {\n  BinaryGeometryType,\n  getGeometryCollectionFromBinaryGeometries,\n} from '../geometry/binary-geometry';\nimport { initWASM } from '../init';\n\n/**\n * Type of Nearest Neighbors from binary geometries arguments.\n */\ntype NearestNeighborsFromBinaryGeometriesProps = {\n  k: number;\n  binaryGeometryType: BinaryGeometryType;\n  binaryGeometries: BinaryFeatureCollection[];\n};\n\n/**\n * Calculates the nearest neighbors for a given set of geometries or latitude/longitude arrays.\n * @param {NearestNeighborsFromBinaryGeometriesProps} input - The input parameters.\n * @returns {Promise<number[][]>} - The nearest neighbors as an array of indices.\n */\nexport async function getNearestNeighborsFromBinaryGeometries({\n  k,\n  binaryGeometryType,\n  binaryGeometries,\n}: NearestNeighborsFromBinaryGeometriesProps): Promise<number[][]> {\n  if (!binaryGeometries || binaryGeometries.length === 0) {\n    return [];\n  }\n\n  const wasmInstance = await initWASM();\n  const geomCollection = await getGeometryCollectionFromBinaryGeometries(\n    binaryGeometryType,\n    binaryGeometries,\n    wasmInstance\n  );\n\n  const neighbors = await getNearestNeighborsFromGeomCollection({\n    k,\n    geomCollection,\n  });\n\n  return neighbors;\n}\n\n/**\n * Calculates the nearest neighbors for a given set of geometries.\n *\n * ## Example\n * ```ts\n * import { getNearestNeighborsFromGeomCollection } from '@geoda/core';\n *\n * const geometries = [\n *   { type: 'Feature', geometry: { type: 'Point', coordinates: [0, 0] } },\n *   { type: 'Feature', geometry: { type: 'Point', coordinates: [1, 0] } },\n *   { type: 'Feature', geometry: { type: 'Point', coordinates: [0, 1] } },\n * ];\n *\n * const neighbors = await getNearestNeighborsFromGeomCollection({\n *   k: 2,\n *   geomCollection: geometries,\n * });\n *\n * console.log(neighbors);\n * ```\n *\n * @returns {Promise<number[][]>} - The nearest neighbors as an array of indices.\n */\nexport async function getNearestNeighborsFromGeomCollection({\n  k,\n  geomCollection,\n}: {\n  /**\n   * The number of nearest neighbors to calculate.\n   */\n  k: number;\n  /**\n   * The geometry collection to calculate the nearest neighbors for.\n   */\n  geomCollection: GeometryCollection;\n}): Promise<number[][]> {\n  const neighbors: number[][] = [];\n\n  const wasmInstance = await initWASM();\n\n  if (geomCollection) {\n    const result = wasmInstance.getNearestNeighbors(geomCollection, k);\n    for (let i = 0; i < result.size(); ++i) {\n      const nbrs = result.get(i);\n      const nbrIndices: number[] = Array(nbrs.size());\n      for (let j = 0, nbrSize = nbrs.size(); j < nbrSize; ++j) {\n        nbrIndices[j] = nbrs.get(j);\n      }\n      neighbors[i] = nbrIndices;\n    }\n  }\n\n  return neighbors;\n}\n", "// SPDX-License-Identifier: MIT\n// Copyright contributors to the geodalib project\n\n/**\n * The meta data for the weights\n */\nexport type WeightsMeta = {\n  /**\n   * The id of the weights\n   */\n  id?: string;\n  /**\n   * The type of the weights\n   */\n  type?: 'knn' | 'threshold' | 'queen' | 'rook' | 'kernel';\n  /**\n   * The symmetry of the weights\n   */\n  symmetry?: 'symmetric' | 'asymmetric';\n  /**\n   * The number of observations\n   */\n  numberOfObservations: number;\n  /**\n   * The minimum number of neighbors\n   */\n  minNeighbors: number;\n  /**\n   * The maximum number of neighbors\n   */\n  maxNeighbors: number;\n  /**\n   * The mean number of neighbors\n   */\n  meanNeighbors: number;\n  /**\n   * The median number of neighbors\n   */\n  medianNeighbors: number;\n  /**\n   * The percentage of non-zero neighbors\n   */\n  pctNoneZero: number;\n  /**\n   * The order of the weights\n   */\n  order?: number;\n  /**\n   * Whether to include lower order neighbors\n   */\n  includeLowerOrder?: boolean;\n  /**\n   * The k value for k-nearest neighbors\n   */\n  k?: number;\n  /**\n   * The threshold for the weights\n   */\n  threshold?: number;\n  /**\n   * The bandwidth for kernel weights\n   */\n  bandwidth?: number;\n  /**\n   * The kernel function for kernel weights\n   */\n  kernel?: string;\n  /**\n   * The power (or exponent) applied to the distance before normalizing by the bandwidth\n   */\n  power?: number;\n  /**\n   * Whether the distance is in miles\n   */\n  isMile?: boolean;\n  /**\n   * The distance metric for the weights\n   */\n  distanceMetric?: 'euclidean' | 'manhattan' | 'arc' | 'projected';\n  /**\n   * The unit of the distance metric\n   */\n  distanceUnit?:\n    | 'Foot_US'\n    | 'Yard_US'\n    | 'Meter'\n    | 'Kilometer'\n    | 'NauticalMile'\n    | 'Degree'\n    | 'Radian';\n};\n\n/**\n * Get the meta data from the weights structure\n * @param weights the weights structure of every observation using row index\n * @returns WeightsMeta\n */\nexport function getMetaFromWeights(weights: number[][], isDistanceWeights = false): WeightsMeta {\n  const n = weights.length;\n\n  let minNeighbors = Infinity;\n  let maxNeighbors = 0;\n  let meanNeighbors = 0;\n  let medianNeighbors = 0;\n  let sumofNeighbors = 0;\n  let pctNoneZero = 0;\n\n  if (isDistanceWeights) {\n    for (let i = 0; i < weights.length; i++) {\n      const len = weights[i].length / 2;\n      if (len < minNeighbors) minNeighbors = len;\n      if (len > maxNeighbors) maxNeighbors = len;\n      sumofNeighbors += len;\n    }\n    meanNeighbors = sumofNeighbors / n;\n    pctNoneZero = sumofNeighbors / (n * n);\n    medianNeighbors = weights.map(w => w.length / 2).sort((a, b) => a - b)[Math.floor(n / 2)];\n  } else {\n    for (let i = 0; i < weights.length; i++) {\n      const len = weights[i].length;\n      if (len < minNeighbors) minNeighbors = len;\n      if (len > maxNeighbors) maxNeighbors = len;\n      sumofNeighbors += len;\n    }\n\n    meanNeighbors = sumofNeighbors / n;\n    pctNoneZero = sumofNeighbors / (n * n);\n    medianNeighbors = weights.map(w => w.length).sort((a, b) => a - b)[Math.floor(n / 2)];\n  }\n\n  return {\n    numberOfObservations: n,\n    minNeighbors,\n    maxNeighbors,\n    meanNeighbors,\n    medianNeighbors,\n    pctNoneZero,\n  };\n}\n", "// SPDX-License-Identifier: MIT\n// Copyright contributors to the geodalib project\n\nimport { Feature, Geometry, Position } from 'geojson';\n\nimport {\n  GeoDaModule,\n  GeometryCollection,\n  PolygonCollection,\n  PointCollection,\n  LineCollection,\n} from '@geoda/common';\n\n/**\n * The type of the input for getGeometryCollectionFromGeoJson\n * @param features - the features to convert\n * @param latitudes - the latitudes\n * @param longitudes - the longitudes\n * @param index - the index\n */\nexport type GeometryInput = {\n  features: Feature<Geometry>[] | null;\n  latitudes?: Float64Array | null;\n  longitudes?: Float64Array | null;\n  index?: number[] | null;\n};\n\n/**\n * The type of the props for getGeometryCollectionFromGeoJson\n */\nexport type GetGeometryCollectionFromGeoJsonFeaturesProps = {\n  /**\n   * The features to convert\n   */\n  features: Feature[];\n  /**\n   * The wasm module\n   */\n  wasm: GeoDaModule;\n  /**\n   * Whether to fix the polygon\n   */\n  fixPolygon?: boolean;\n  /**\n   * Whether to convert to UTM\n   */\n  convertToUTM?: boolean;\n};\n\n/**\n * Get GeometryCollection from GeoJson featurers\n * @param props - the props for getGeometryCollectionFromGeoJson see {@link GetGeometryCollectionFromGeoJsonFeaturesProps}\n * @returns GeometryCollection - the geometry collection see src/spatial_features.h\n */\nexport function getGeometryCollectionFromGeoJsonFeatures({\n  features,\n  wasm,\n  fixPolygon,\n  convertToUTM,\n}: GetGeometryCollectionFromGeoJsonFeaturesProps): GeometryCollection {\n  if (!features || features.length === 0) {\n    throw new Error('No features to convert');\n  }\n\n  // create GeometryCollection from GeoJSON\n  const geomType = features[0].geometry.type;\n\n  switch (geomType) {\n    case 'Polygon':\n    case 'MultiPolygon':\n      return getPolygonCollection({ features, wasm, fixPolygon, convertToUTM });\n    case 'LineString':\n    case 'MultiLineString':\n      return getLineCollection({ features, wasm, convertToUTM });\n    case 'Point':\n    case 'MultiPoint':\n      return getPointCollection({ features, wasm, convertToUTM });\n    default:\n      throw new Error('Unsupported GeoJSON geometry type');\n  }\n}\n\n/**\n * The type of the props for GetPolygonCollection\n * @param features - the features to convert\n * @param wasm - the wasm module\n * @param fixPolygon - whether to fix the polygon\n * @param convertToUTM - whether to convert to UTM\n */\nexport type GetPolygonCollectionProps = {\n  features: Feature[];\n  wasm: GeoDaModule;\n  fixPolygon?: boolean;\n  convertToUTM?: boolean;\n};\n\n/**\n * Convert GeoJSON features (MultiPolygon and Polygon) to PolygonCollection\n * @param props - the props for GetPolygonCollection see {@link GetPolygonCollectionProps}\n * @returns PolygonCollection - the polygon collection see src/spatial_features.h\n */\nexport function getPolygonCollection({\n  features,\n  wasm,\n  fixPolygon = true,\n  convertToUTM,\n}: GetPolygonCollectionProps): PolygonCollection {\n  let ptIndex = 0;\n  const xs = new wasm.VectorDouble();\n  const ys = new wasm.VectorDouble();\n  const parts = new wasm.VectorUInt();\n  const holes = new wasm.VectorUInt();\n  const sizes = new wasm.VectorUInt();\n\n  /**\n   * Process a polygon ring\n   * @param polygon - the polygon to process\n   * @param numParts - the number of parts in the polygon\n   * @returns the number of parts in the polygon\n   */\n  function processPolygonRing(polygon: Position[][], numParts: number): number {\n    // each ring (even an empty ring) starts at ptIndex\n    parts.push_back(ptIndex);\n    // the first ring (exterior) is not a hole\n    holes.push_back(0);\n\n    for (let j = 0, m = polygon.length; j < m; ++j) {\n      const ring = polygon[j];\n      if (j > 0) {\n        parts.push_back(ptIndex);\n        holes.push_back(1);\n      }\n      if (ring.length > 0) numParts += 1;\n      for (let k = 0, npts = ring.length; k < npts; ++k) {\n        const pt = ring[k];\n        xs.push_back(pt[0]);\n        ys.push_back(pt[1]);\n        ptIndex += 1;\n      }\n    }\n\n    return numParts;\n  }\n\n  for (let i = 0, n = features.length; i < n; ++i) {\n    const feat = features[i];\n    let numParts = 0;\n    if (feat.geometry.type === 'MultiPolygon') {\n      for (let j = 0, m = feat.geometry.coordinates.length; j < m; ++j) {\n        const poly = feat.geometry.coordinates[j];\n        numParts = processPolygonRing(poly, numParts);\n      }\n    } else if (feat.geometry.type === 'Polygon') {\n      numParts = processPolygonRing(feat.geometry.coordinates, numParts);\n    }\n    sizes.push_back(numParts);\n  }\n  const pc = new wasm.PolygonCollection(\n    xs,\n    ys,\n    parts,\n    holes,\n    sizes,\n    fixPolygon ?? false,\n    convertToUTM ?? false\n  );\n  return pc;\n}\n\n/**\n * The type of the props for GetLineCollection\n * @param features - the features to convert\n * @param wasm - the wasm module\n * @param convertToUTM - whether to convert to UTM\n */\nexport type GetLineCollectionProps = {\n  features: Feature[];\n  wasm: GeoDaModule;\n  convertToUTM?: boolean;\n};\n\n/**\n * Convert GeoJSON features (MultiLineString and LineString) to LineCollection\n * @param props - the props for GetLineCollection see {@link GetLineCollectionProps}\n * @returns LineCollection - the line collection see src/spatial_features.h\n */\nexport function getLineCollection({\n  features,\n  wasm,\n  convertToUTM,\n}: GetLineCollectionProps): LineCollection {\n  let ptIndex = 0;\n  const xs = new wasm.VectorDouble();\n  const ys = new wasm.VectorDouble();\n  const parts = new wasm.VectorUInt();\n  const sizes = new wasm.VectorUInt();\n\n  function handleLineSegment(lineSeg: Position[]): boolean {\n    parts.push_back(ptIndex);\n    let validLine = false;\n    for (let j = 0, m = lineSeg.length; j < m; ++j) {\n      const pt = lineSeg[j];\n      xs.push_back(pt[0]);\n      ys.push_back(pt[1]);\n      ptIndex += 1;\n      validLine = true;\n    }\n    return validLine;\n  }\n\n  for (let i = 0, n = features.length; i < n; ++i) {\n    const feat = features[i];\n    let numParts = 0;\n    if (feat.geometry.type === 'MultiLineString') {\n      for (let j = 0, m = feat.geometry.coordinates.length; j < m; ++j) {\n        if (handleLineSegment(feat.geometry.coordinates[j])) {\n          numParts += 1;\n        }\n      }\n    } else if (feat.geometry.type === 'LineString') {\n      if (handleLineSegment(feat.geometry.coordinates)) {\n        numParts += 1;\n      }\n    }\n    sizes.push_back(numParts);\n  }\n  const lc = new wasm.LineCollection(xs, ys, parts, sizes, convertToUTM ?? false);\n  return lc;\n}\n\n/**\n * The type of the props for GetPointCollection\n * @param features - the features to convert\n * @param wasm - the wasm module\n * @param convertToUTM - whether to convert to UTM\n */\nexport type GetPointCollectionProps = {\n  features: Feature[];\n  wasm: GeoDaModule;\n  convertToUTM?: boolean;\n};\n\n/**\n * Convert GeoJSON features (MultiPoint and Point) to PointCollection\n * @param props - the props for GetPointCollection see {@link GetPointCollectionProps}\n * @returns PointCollection - the point collection see src/spatial_features.h\n */\nexport function getPointCollection({\n  features,\n  wasm,\n  convertToUTM,\n}: GetPointCollectionProps): PointCollection {\n  let ptIndex = 0;\n  const xs = new wasm.VectorDouble();\n  const ys = new wasm.VectorDouble();\n  const parts = new wasm.VectorUInt();\n  const sizes = new wasm.VectorUInt();\n\n  function handlePoint(point: Position): boolean {\n    let isValid = false;\n    if (point.length >= 2) {\n      xs.push_back(point[0]);\n      ys.push_back(point[1]);\n      isValid = true;\n    }\n    ptIndex += 1;\n    return isValid;\n  }\n\n  for (let i = 0, n = features.length; i < n; ++i) {\n    const feat = features[i];\n    let numParts = 0;\n    if (feat.geometry.type === 'MultiPoint') {\n      parts.push_back(ptIndex);\n      for (let j = 0, m = feat.geometry.coordinates.length; j < m; ++j) {\n        if (handlePoint(feat.geometry.coordinates[j])) {\n          numParts += 1;\n        }\n      }\n    } else if (feat.geometry.type === 'Point') {\n      parts.push_back(ptIndex);\n      if (handlePoint(feat.geometry.coordinates)) {\n        numParts += 1;\n      }\n    }\n    sizes.push_back(numParts);\n  }\n  const pc = new wasm.PointCollection(xs, ys, parts, sizes, convertToUTM ?? false);\n  return pc;\n}\n\n/**\n * The type of the props for GetPointCollectionFromLatLng\n * @param lat - the latitudes\n * @param lng - the longitudes\n * @param wasm - the wasm module\n * @param start - the start index\n * @param end - the end index\n */\nexport type GetPointCollectionFromLatLngProps = {\n  lat: number[] | Float64Array;\n  lng: number[] | Float64Array;\n  wasm: GeoDaModule;\n  start?: number;\n  end?: number;\n};\n\n/**\n * Convert from lat/lng pairs to PointCollection\n * @param props - the props for GetPointCollectionFromLatLng see {@link GetPointCollectionFromLatLngProps}\n * @returns PointCollection - the point collection see src/spatial_features.h\n */\nexport function getPointCollectionFromLatLng({\n  lat,\n  lng,\n  wasm,\n  start,\n  end,\n}: GetPointCollectionFromLatLngProps): PointCollection {\n  let ptIndex = 0;\n  const xs = new wasm.VectorDouble();\n  const ys = new wasm.VectorDouble();\n  const parts = new wasm.VectorUInt();\n  const sizes = new wasm.VectorUInt();\n\n  for (let i = start ?? 0, n = end ?? lat.length; i < n; ++i) {\n    sizes.push_back(1);\n    parts.push_back(ptIndex);\n    xs.push_back(lng[i]);\n    ys.push_back(lat[i]);\n    ptIndex += 1;\n  }\n\n  const convertToUTM = false;\n  const pc = new wasm.PointCollection(xs, ys, parts, sizes, convertToUTM);\n  return pc;\n}\n", "// SPDX-License-Identifier: MIT\n// Copyright contributors to the geodalib project\n\nimport { GeoDaModule, GeometryCollection } from '@geoda/common';\nimport { ArcLayerData, PointLayerData } from './utils';\n\n/**\n * The type of the props for getGeometryCollectionFromGeoJson\n * @param pointLayerData - the point layer data\n * @param wasm - the wasm module\n */\nexport type GetGeometryCollectionFromPointLayerDataProps = {\n  pointLayerData: PointLayerData[];\n  wasm: GeoDaModule;\n  convertToUTM?: boolean;\n};\n\n/**\n * Get PointCollection from PointLayerData: lat/lng pairs\n * @param props - the props for getGeometryCollectionFromPointLayerData see {@link GetGeometryCollectionFromPointLayerDataProps}\n * @returns PointCollection - the point collection see src/spatial_features.h\n */\nexport function getGeometryCollectionFromPointLayerData({\n  pointLayerData,\n  wasm,\n  convertToUTM,\n}: GetGeometryCollectionFromPointLayerDataProps): GeometryCollection {\n  if (!pointLayerData || pointLayerData.length === 0) {\n    throw new Error('No pointLayerData to convert');\n  }\n\n  const xs = new wasm.VectorDouble();\n  const ys = new wasm.VectorDouble();\n  const parts = new wasm.VectorUInt();\n  const sizes = new wasm.VectorUInt();\n\n  for (let i = 0, n = pointLayerData.length; i < n; ++i) {\n    const point = pointLayerData[i];\n    xs.push_back(point.position[0]);\n    ys.push_back(point.position[1]);\n    sizes.push_back(1);\n    parts.push_back(i);\n  }\n\n  const pc = new wasm.PointCollection(xs, ys, parts, sizes, convertToUTM || false);\n  return pc;\n}\n\nexport type GetGeometryCollectionFromArcLayerDataProps = {\n  arcLayerData: ArcLayerData[];\n  wasm: GeoDaModule;\n  convertToUTM?: boolean;\n};\n\n/**\n * Get PointCollection from ArcLayerData: lat/lng pairs\n * @param props - the props for getGeometryCollectionFromArcLayerData see {@link GetGeometryCollectionFromArcLayerDataProps}\n * @returns PointCollection - the point collection see src/spatial_features.h\n */\nexport function getGeometryCollectionFromArcLayerData({\n  arcLayerData,\n  wasm,\n  convertToUTM,\n}: GetGeometryCollectionFromArcLayerDataProps): GeometryCollection {\n  if (!arcLayerData || arcLayerData.length === 0) {\n    throw new Error('No arcLayerData to convert');\n  }\n\n  const xs = new wasm.VectorDouble();\n  const ys = new wasm.VectorDouble();\n  const parts = new wasm.VectorUInt();\n  const sizes = new wasm.VectorUInt();\n\n  for (let i = 0, n = arcLayerData.length; i < n; ++i) {\n    const arc = arcLayerData[i];\n    xs.push_back(arc.sourcePosition[0]);\n    ys.push_back(arc.sourcePosition[1]);\n    // TODO: figure out how to handle the target position\n    // xs.push_back(arc.targetPosition[0]);\n    // ys.push_back(arc.targetPosition[1]);\n    sizes.push_back(1);\n    parts.push_back(i);\n  }\n\n  const pc = new wasm.PointCollection(xs, ys, parts, sizes, convertToUTM || false);\n  return pc;\n}\n", "// SPDX-License-Identifier: MIT\n// Copyright contributors to the geodalib project\n\nimport { BinaryFeatureCollection } from '@loaders.gl/schema';\nimport { Feature } from 'geojson';\nimport { GeometryCollection, Line, Polygon } from '@geoda/common';\nimport { getGeometryCollectionFromBinaryGeometries, BinaryGeometryType } from './binary-geometry';\nimport { getGeometryCollectionFromGeoJsonFeatures } from './geojson-geometry';\nimport {\n  getGeometryCollectionFromArcLayerData,\n  getGeometryCollectionFromPointLayerData,\n} from './point-layer-geometry';\nimport { initWASM } from '../init';\n\n/**\n * The type of the point layer data. See PointLayerData in kepler.gl\n */\nexport type PointLayerData = {\n  position: number[];\n  index: number;\n  neighbors: number[];\n};\n\n/**\n * The type of the arc layer data. See ArcLayerData in kepler.gl\n */\nexport type ArcLayerData = {\n  index: number;\n  sourcePosition: [number, number, number];\n  targetPosition: [number, number, number];\n};\n\n/**\n * The type of the hexagon id layer data. See HexagonIdLayerData in kepler.gl\n */\nexport type HexagonIdLayerData = {\n  index: number;\n  id: number;\n  centroid: [number, number];\n};\n\n/**\n * The type of the geometries used in the GeoDaLib\n */\nexport type SpatialGeometry =\n  /**\n   * GeoJSON features\n   */\n  | Feature[]\n  /**\n   * Binary feature collection. Use array of binary features because large binary files are chunked into multiple binary feature collections.\n   */\n  | BinaryFeatureCollection[]\n  /**\n   * Point layer data\n   */\n  | PointLayerData[]\n  /**\n   * Arc layer data\n   */\n  | ArcLayerData[]\n  /**\n   * Hexagon id layer data\n   */\n  | HexagonIdLayerData[];\n\nexport function isGeoJsonFeature(geometry: unknown): geometry is Feature {\n  return (\n    typeof geometry === 'object' &&\n    geometry !== null &&\n    'type' in geometry &&\n    geometry.type === 'Feature'\n  );\n}\n\nexport function isBinaryFeatureCollection(geometry: unknown): geometry is BinaryFeatureCollection {\n  return (\n    typeof geometry === 'object' &&\n    geometry !== null &&\n    'points' in geometry &&\n    'lines' in geometry &&\n    'polygons' in geometry\n  );\n}\n\nexport function isPointLayerData(geometry: unknown): geometry is PointLayerData {\n  return (\n    typeof geometry === 'object' &&\n    geometry !== null &&\n    'position' in geometry &&\n    'index' in geometry\n  );\n}\n\nexport function isArcLayerData(geometry: unknown): geometry is ArcLayerData {\n  return (\n    typeof geometry === 'object' &&\n    geometry !== null &&\n    'sourcePosition' in geometry &&\n    'targetPosition' in geometry\n  );\n}\n\nexport function isHexagonIdLayerData(geometry: unknown): geometry is HexagonIdLayerData {\n  return (\n    typeof geometry === 'object' && geometry !== null && 'id' in geometry && 'centroid' in geometry\n  );\n}\n\nexport enum SpatialJoinGeometryType {\n  GeoJsonFeature = 'GeoJsonFeature',\n  BinaryFeatureCollection = 'BinaryFeatureCollection',\n  PointLayerData = 'PointLayerData',\n  ArcLayerData = 'ArcLayerData',\n  HexagonIdLayerData = 'HexagonIdLayerData',\n}\n\n/**\n * Check the type of the geometries\n * @param geometries - the geometries to check. See {@link SpatialJoinGeometries} for more information.\n * @returns the type of the geometries. See {@link SpatialJoinGeometryType} for more information.\n */\nexport function CheckGeometryType(geometries: SpatialGeometry): SpatialJoinGeometryType {\n  if (!geometries) {\n    throw new Error('CheckGeometryType: Geometry type is unknown.');\n  }\n\n  // check if it's an array\n  if (Array.isArray(geometries)) {\n    // Get first item to check other types\n    const first = geometries[0];\n\n    // Check if it's BinaryFeatureCollection\n    if (isBinaryFeatureCollection(first)) {\n      return SpatialJoinGeometryType.BinaryFeatureCollection;\n    }\n\n    // Check if it's Feature\n    if (isGeoJsonFeature(first)) {\n      return SpatialJoinGeometryType.GeoJsonFeature;\n    }\n\n    // Check if it's PointLayerData[]\n    if (isPointLayerData(first)) {\n      return SpatialJoinGeometryType.PointLayerData;\n    }\n\n    // Check if it's ArcLayerData[]\n    if (isArcLayerData(first)) {\n      return SpatialJoinGeometryType.ArcLayerData;\n    }\n\n    // Check if it's HexagonIdLayerData[]\n    if (isHexagonIdLayerData(first)) {\n      return SpatialJoinGeometryType.HexagonIdLayerData;\n    }\n  }\n\n  throw new Error('CheckGeometryType: Geometry type is unknown.');\n}\n\nfunction getBinaryGeometryType(geometries: BinaryFeatureCollection[]): BinaryGeometryType {\n  if (geometries[0]?.lines?.featureIds?.value?.length || 0 > 0) {\n    return {\n      point: false,\n      line: true,\n      polygon: false,\n    };\n  }\n  if (geometries[0]?.polygons?.featureIds?.value?.length || 0 > 0) {\n    return {\n      point: false,\n      line: false,\n      polygon: true,\n    };\n  }\n  return {\n    point: true,\n    line: false,\n    polygon: false,\n  };\n}\n\n/**\n * Get GeometryCollection from input geometries. The input geometries can be\n * 1. GeoJSON features\n * 2. binary feature collections\n * 3. point layer data\n * 4. arc layer data\n * 5. hexagon id layer data\n *\n * @example\n * ```ts\n * const geoms = [\n *   { type: 'Feature', geometry: { type: 'Polygon', coordinates: [[[0, 0], [1, 0], [1, 1], [0, 1], [0, 0]]] }, properties: { index: 0 } },\n * ];\n * const geometryCollection = await getGeometryCollection({ geometries: geoms });\n * ```\n * @returns GeometryCollection - the geometry collection used in GeoDaLib see src/spatial_features.h\n */\nexport async function getGeometryCollection({\n  geometries,\n  fixPolygon = true,\n  convertToUTM = false,\n}: {\n  /** input geometries see {@link SpatialGeometry} */\n  geometries: SpatialGeometry;\n  /** fix polygon */\n  fixPolygon?: boolean;\n  /** convert to UTM */\n  convertToUTM?: boolean;\n}): Promise<GeometryCollection> {\n  const wasmInstance = await initWASM();\n  const geometryType = CheckGeometryType(geometries);\n\n  switch (geometryType) {\n    case SpatialJoinGeometryType.BinaryFeatureCollection: {\n      const binaryGeometryType = getBinaryGeometryType(geometries as BinaryFeatureCollection[]);\n      if (!binaryGeometryType) {\n        throw new Error('Binary geometry type is required.');\n      }\n      return await getGeometryCollectionFromBinaryGeometries(\n        binaryGeometryType,\n        geometries as BinaryFeatureCollection[],\n        wasmInstance,\n        fixPolygon,\n        convertToUTM\n      );\n    }\n    case SpatialJoinGeometryType.GeoJsonFeature:\n      return await getGeometryCollectionFromGeoJsonFeatures({\n        features: geometries as Feature[],\n        wasm: wasmInstance,\n        fixPolygon,\n        convertToUTM,\n      });\n\n    case SpatialJoinGeometryType.ArcLayerData:\n      return await getGeometryCollectionFromArcLayerData({\n        arcLayerData: geometries as ArcLayerData[],\n        wasm: wasmInstance,\n        convertToUTM,\n      });\n    case SpatialJoinGeometryType.PointLayerData:\n      return await getGeometryCollectionFromPointLayerData({\n        pointLayerData: geometries as PointLayerData[],\n        wasm: wasmInstance,\n        convertToUTM,\n      });\n    default:\n      throw new Error('Geometry type is unknown.');\n  }\n}\n\n/**\n * Convert a Polygon to a GeoJSON Feature\n * @param polygon - The polygon to convert\n * @returns The converted GeoJSON Feature\n *\n * @example\n * ```ts\n * const polygon = new Polygon(new VectorDouble([0, 0, 1, 0, 1, 1, 0, 1, 0, 0]), new VectorUInt([0, 1, 2, 3, 4]), new VectorUInt([0, 1, 2, 3, 4]), new VectorUInt([0, 1, 2, 3, 4]), true, false);\n * const feature = await polygonToFeature(polygon);\n * ```\n */\nexport async function polygonToFeature(polygon: Polygon): Promise<Feature> {\n  const xs = polygon.getX();\n  const ys = polygon.getY();\n  const parts = polygon.getParts();\n  const holes = polygon.getHoles();\n\n  const numPoints = xs.size();\n  const numParts = parts.size();\n\n  let numExtRings = 0;\n  for (let i = 0; i < numParts; ++i) {\n    if (holes.get(i) === 0) {\n      numExtRings += 1;\n    }\n  }\n\n  const isMultiPolygon = numExtRings > 1;\n\n  if (isMultiPolygon) {\n    // multipolygon structure: [[extRing, hole, hole], [extRing, hole]]\n    const multiPoly = Array(numExtRings);\n    let polyIndex = -1;\n    for (let i = 0; i < numParts; ++i) {\n      if (holes.get(i) === 0) {\n        // extRing\n        polyIndex += 1;\n        multiPoly[polyIndex] = [];\n      }\n      const ring: number[][] = [];\n      const start = parts.get(i);\n      const end = i === numParts - 1 ? numPoints : parts.get(i + 1);\n      for (let j = start; j < end; ++j) {\n        ring.push([xs.get(j), ys.get(j)]);\n      }\n      multiPoly[polyIndex].push(ring);\n    }\n    return {\n      type: 'Feature',\n      geometry: {\n        type: 'MultiPolygon',\n        coordinates: multiPoly,\n      },\n      properties: {},\n    };\n  } else {\n    // polygon structure: [extRing, hole, hole]\n    const coordinates = Array(numParts);\n    for (let i = 0; i < numParts; ++i) {\n      const ring: number[][] = [];\n      const start = parts.get(i);\n      const end = i === numParts - 1 ? numPoints : parts.get(i + 1);\n      for (let j = start; j < end; ++j) {\n        ring.push([xs.get(j), ys.get(j)]);\n      }\n      coordinates[i] = ring;\n    }\n    return {\n      type: 'Feature',\n      geometry: {\n        type: 'Polygon',\n        coordinates,\n      },\n      properties: {},\n    };\n  }\n}\n\nexport async function lineToFeature(line: Line): Promise<Feature> {\n  const xs = line.getX();\n  const ys = line.getY();\n  const parts = line.getParts();\n\n  // For MST, we expect simple LineStrings with just 2 points (start and end)\n  // If there are multiple parts, we'll create a MultiLineString\n  if (parts.size() === 1) {\n    // Simple LineString\n    const coordinates: number[][] = [];\n    const start = parts.get(0);\n    const end = xs.size();\n    for (let j = start; j < end; ++j) {\n      coordinates.push([xs.get(j), ys.get(j)]);\n    }\n    return {\n      type: 'Feature',\n      geometry: {\n        type: 'LineString',\n        coordinates,\n      },\n      properties: {},\n    };\n  } else {\n    // MultiLineString\n    const coordinates: number[][][] = [];\n    for (let i = 0; i < parts.size(); ++i) {\n      const start = parts.get(i);\n      const end = i === parts.size() - 1 ? xs.size() : parts.get(i + 1);\n      const lineCoords: number[][] = [];\n      for (let j = start; j < end; ++j) {\n        lineCoords.push([xs.get(j), ys.get(j)]);\n      }\n      coordinates.push(lineCoords);\n    }\n    return {\n      type: 'Feature',\n      geometry: {\n        type: 'MultiLineString',\n        coordinates,\n      },\n      properties: {},\n    };\n  }\n}\n", "// SPDX-License-Identifier: MIT\n// Copyright contributors to the geodalib project\n\nimport { BinaryFeatureCollection } from '@loaders.gl/schema';\nimport type { GeometryCollection, GeoDaModule } from '@geoda/common';\n\nimport {\n  BinaryGeometryType,\n  getGeometryCollectionFromBinaryGeometries,\n} from '../geometry/binary-geometry';\nimport { initWASM } from '../init';\nimport { getMetaFromWeights, WeightsMeta } from './weights-stats';\nimport { getGeometryCollection, SpatialGeometry } from '../geometry/utils';\n\nasync function createWeightsUtil(\n  wasmInstance: GeoDaModule,\n  geomCollection: GeometryCollection,\n  pointWeights: boolean,\n  isQueen: boolean,\n  precisionThreshold: number,\n  orderOfContiguity: number,\n  includeLowerOrder: boolean\n) {\n  const neighbors: number[][] = [];\n  if (geomCollection) {\n    const result = pointWeights\n      ? wasmInstance.getPointContiguityWeights(\n          geomCollection,\n          isQueen,\n          precisionThreshold,\n          orderOfContiguity,\n          includeLowerOrder\n        )\n      : wasmInstance.getPolygonContiguityWeights(\n          geomCollection,\n          isQueen,\n          precisionThreshold,\n          orderOfContiguity,\n          includeLowerOrder\n        );\n    for (let i = 0; i < result.size(); ++i) {\n      const nbrs = result.get(i);\n      const nbrIndices: number[] = Array(nbrs.size());\n      for (let j = 0, nbrSize = nbrs.size(); j < nbrSize; ++j) {\n        nbrIndices[j] = nbrs.get(j);\n      }\n      neighbors[i] = nbrIndices;\n    }\n  }\n\n  return neighbors;\n}\n\n/**\n * Interface for the arguments used in calculating contiguity neighbors from binary geometries.\n */\nexport type ContiguityNeighborsFromBinaryGeometriesProps = {\n  /**\n   * The type of binary geometry\n   */\n  binaryGeometryType: BinaryGeometryType;\n  /**\n   * The array of binary geometry features\n   */\n  binaryGeometries: BinaryFeatureCollection[];\n  /**\n   * Whether to use centroids for neighbor calculations\n   */\n  useCentroids?: boolean;\n  /**\n   * Whether to use queen contiguity (true) or rook contiguity (false)\n   */\n  isQueen: boolean;\n  /**\n   * Threshold for considering points as neighbors\n   */\n  precisionThreshold?: number;\n  /**\n   * The order of contiguity to calculate\n   */\n  orderOfContiguity?: number;\n  /**\n   * Whether to include lower orders in the results\n   */\n  includeLowerOrder?: boolean;\n};\n\n/**\n * Interface for the arguments used in calculating contiguity neighbors from a geometry collection.\n */\nexport type ContiguityNeighborsFromGeomCollectionProps = {\n  /**\n   * The geometry collection to calculate the neighbors for\n   */\n  geomCollection: GeometryCollection;\n  /**\n   * Whether to use queen contiguity (true) or rook contiguity (false)\n   */\n  isQueen: boolean;\n  /**\n   * Whether to use centroids for neighbor calculations\n   */\n  useCentroids?: boolean;\n  /**\n   * Threshold for considering points as neighbors\n   */\n  precisionThreshold?: number;\n  /**\n   * The order of contiguity to calculate\n   */\n  orderOfContiguity?: number;\n  /**\n   * Whether to include lower orders in the results\n   */\n  includeLowerOrder?: boolean;\n};\n\n/**\n * Calculates contiguity-based neighbors for a set of geometries.\n *\n * This function processes geometries to determine spatial relationships\n * between them based on their contiguity (shared boundaries or vertices).\n *\n * @param {ContiguityNeighborsFromGeomCollectionProps} input - Configuration object for neighbor calculation See {@link ContiguityNeighborsFromGeomCollectionProps} for more information.\n * @returns {Promise<number[][]>} Array where each element contains indices of neighboring geometries\n */\nexport async function getContiguityNeighborsFromGeomCollection({\n  geomCollection,\n  isQueen,\n  useCentroids = true,\n  precisionThreshold = 0.0,\n  orderOfContiguity = 1,\n  includeLowerOrder = false,\n}: ContiguityNeighborsFromGeomCollectionProps): Promise<number[][]> {\n  const wasmInstance = await initWASM();\n\n  const neighbors = await createWeightsUtil(\n    wasmInstance,\n    geomCollection,\n    useCentroids,\n    isQueen,\n    precisionThreshold,\n    orderOfContiguity,\n    includeLowerOrder\n  );\n  return neighbors;\n}\n\n/**\n * Calculates contiguity-based neighbors for a set of binary geometries.\n *\n * This function processes binary geometry features to determine spatial relationships\n * between geometries based on their contiguity (shared boundaries or vertices).\n *\n * @param {ContiguityNeighborsFromBinaryGeometriesProps} input - Configuration object for neighbor calculation\n * @returns {Promise<number[][]>} Array where each element contains indices of neighboring geometries\n */\nexport async function getContiguityNeighborsFromBinaryGeometries({\n  binaryGeometryType,\n  binaryGeometries,\n  isQueen,\n  useCentroids,\n  precisionThreshold = 0.0,\n  orderOfContiguity = 1,\n  includeLowerOrder = false,\n}: ContiguityNeighborsFromBinaryGeometriesProps): Promise<number[][]> {\n  if (!binaryGeometries || binaryGeometries.length === 0) {\n    return [];\n  }\n\n  const wasmInstance = await initWASM();\n  const geomCollection = await getGeometryCollectionFromBinaryGeometries(\n    binaryGeometryType,\n    binaryGeometries,\n    wasmInstance\n  );\n  const pointWeights = useCentroids || binaryGeometryType.point || binaryGeometryType.line || true;\n\n  const neighbors = await createWeightsUtil(\n    wasmInstance,\n    geomCollection,\n    pointWeights,\n    isQueen,\n    precisionThreshold,\n    orderOfContiguity,\n    includeLowerOrder\n  );\n  return neighbors;\n}\n\n/**\n * ## Description\n * Create Queen contiguity weights for GeoJSON features.\n *\n * Queen contiguity defines neighbors as spatial units that share either:\n * - A common edge (border)\n * - A common vertex (corner)\n *\n * This is in contrast to Rook contiguity, which only considers shared edges.\n *\n * ## Example\n * ```ts\n * import { queenWeights } from '@geoda/core';\n *\n * const geometries = [\n *   { type: 'Feature', geometry: { type: 'Point', coordinates: [0, 0] } },\n *   { type: 'Feature', geometry: { type: 'Point', coordinates: [1, 0] } },\n *   { type: 'Feature', geometry: { type: 'Point', coordinates: [0, 1] } },\n * ];\n *\n * const weights = await queenWeights(geometries);\n *\n * console.log(weights);\n * ```\n *\n * @param {SpatialGeometry} geometries - The geometries used to create the queen contiguity weights. See {@link SpatialGeometry} for more information.\n * @param {boolean} [useCentroids=false] - If true, uses geometry centroids for calculations\n * @param {number} [precisionThreshold=0.0] - Distance threshold for determining neighbors.\n *                                           Useful when geometries don't perfectly align\n * @param {number} [orderOfContiguity=1] - Number of steps to consider for neighbor relationships.\n *                                         1 means immediate neighbors only\n * @param {boolean} [includeLowerOrder=false] - If true, includes all neighbors from order 1\n *                                             up to the specified order\n * @returns {Promise<WeightsMeta>} Spatial weights metadata including neighbor relationships\n */\nexport async function queenWeights(\n  geometries: SpatialGeometry,\n  useCentroids = false,\n  precisionThreshold = 0.0,\n  orderOfContiguity = 1,\n  includeLowerOrder = false\n): Promise<WeightsMeta> {\n  const wasmInstance = await initWASM();\n  const geomCollection = await getGeometryCollection({\n    geometries,\n  });\n\n  const geometryType = geomCollection.getType();\n\n  const pointWeights = useCentroids || geometryType === 1 || geometryType === 2;\n\n  const isQueen = true;\n\n  const neighbors = await createWeightsUtil(\n    wasmInstance,\n    geomCollection,\n    pointWeights,\n    isQueen,\n    precisionThreshold,\n    orderOfContiguity,\n    includeLowerOrder\n  );\n  return getMetaFromWeights(neighbors);\n}\n\n/**\n * ## Description\n * Create Rook contiguity weights for GeoJSON features.\n *\n * Rook contiguity defines neighbors as spatial units that only share common edge (border)\n *\n * This is in contrast to Queen contiguity, which considers shared edges and vertices.\n *\n * ## Example\n * ```ts\n * import { rookWeights } from '@geoda/core';\n *\n * const geometries = [\n *   { type: 'Feature', geometry: { type: 'Point', coordinates: [0, 0] } },\n *   { type: 'Feature', geometry: { type: 'Point', coordinates: [1, 0] } },\n *   { type: 'Feature', geometry: { type: 'Point', coordinates: [0, 1] } },\n * ];\n *\n * const weights = await rookWeights(geometries);\n *\n * console.log(weights);\n * ```\n *\n * @param {SpatialGeometry} geometries - The geometries used to create the rook contiguity weights. See {@link SpatialGeometry} for more information.\n * @param {boolean} [useCentroids=false] - If true, uses geometry centroids for calculations\n * @param {number} [precisionThreshold=0.0] - Distance threshold for determining neighbors.\n *                                           Useful when geometries don't perfectly align\n * @param {number} [orderOfContiguity=1] - Number of steps to consider for neighbor relationships.\n *                                         1 means immediate neighbors only\n * @param {boolean} [includeLowerOrder=false] - If true, includes all neighbors from order 1\n *                                             up to the specified order\n * @returns {Promise<WeightsMeta>} Spatial weights metadata including neighbor relationships\n */\nexport async function rookWeights(\n  geometries: SpatialGeometry,\n  useCentroids = false,\n  precisionThreshold = 0.0,\n  orderOfContiguity = 1,\n  includeLowerOrder = false\n): Promise<WeightsMeta> {\n  const wasmInstance = await initWASM();\n  const geomCollection = await getGeometryCollection({\n    geometries,\n  });\n\n  const geometryType = geomCollection.getType();\n\n  const pointWeights = useCentroids || geometryType === 1 || geometryType === 2;\n\n  const isQueen = false;\n\n  const neighbors = await createWeightsUtil(\n    wasmInstance,\n    geomCollection,\n    pointWeights,\n    isQueen,\n    precisionThreshold,\n    orderOfContiguity,\n    includeLowerOrder\n  );\n  return getMetaFromWeights(neighbors);\n}\n", "// SPDX-License-Identifier: MIT\n// Copyright contributors to the geodalib project\n\nimport { SpatialGeometry, getGeometryCollection } from '../geometry/utils';\nimport { getContiguityNeighborsFromGeomCollection } from './contiguity-neighbors';\nimport { getDistanceNeighborsFromGeomCollection } from './distance-neighbors';\nimport { getNearestNeighborsFromGeomCollection } from './nearest-neighbors';\nimport { getKernelWeightsFromGeomCollection } from './kernel-weights';\nimport { getMetaFromWeights } from './weights-stats';\nimport { WeightsMeta } from './weights-stats';\n\nexport type CreateWeightsProps = {\n  weightsType: 'knn' | 'threshold' | 'queen' | 'rook' | 'kernel';\n  k?: number;\n  distanceThreshold?: number;\n  isQueen?: boolean;\n  isRook?: boolean;\n  isMile?: boolean;\n  /**\n   * The bandwidth for kernel weights\n   */\n  bandwidth?: number;\n  /**\n   * The kernel function for kernel weights\n   */\n  kernel?: string;\n  /**\n   * Whether the diagonal (self) weight is kernel(1.0) instead of 1.0\n   */\n  useKernelDiagonals?: boolean;\n  /**\n   * The power (or exponent) applied to the distance before normalizing by the bandwidth\n   */\n  power?: number;\n  /**\n   * Whether to use centroids for neighbor calculations\n   */\n  useCentroids?: boolean;\n  /**\n   * The precision threshold for neighbor calculations\n   */\n  precisionThreshold?: number;\n  /**\n   * The order of contiguity for neighbor calculations\n   */\n  orderOfContiguity?: number;\n  /**\n   * Whether to include lower order neighbors\n   */\n  includeLowerOrder?: boolean;\n  /**\n   * The geometries to create the weights for. See {@link SpatialGeometry} for more information.\n   * - GeoJSON features: {@link Feature} from geojson\n   * - Binary feature collection: {@link BinaryFeatureCollection} from loaders.gl/schema\n   * - Point layer data: {@link PointLayerData} from kepler.gl\n   * - Arc layer data: {@link ArcLayerData} from kepler.gl\n   * - Hexagon id layer data: {@link HexagonIdLayerData} from kepler.gl\n   */\n  geometries: SpatialGeometry;\n};\n\n/**\n * Create weights for the given geometries.\n *\n * ## Example\n * ```ts\n * import { createWeights } from '@geoda/core';\n *\n * const geometries = [\n *   { type: 'Feature', geometry: { type: 'Point', coordinates: [0, 0] } },\n *   { type: 'Feature', geometry: { type: 'Point', coordinates: [1, 0] } },\n *   { type: 'Feature', geometry: { type: 'Point', coordinates: [0, 1] } },\n * ];\n *\n * const weights = await createWeights({\n *   weightsType: 'queen',\n *   geometries,\n * });\n *\n * console.log(weights);\n * ```\n */\nexport async function createWeights({\n  weightsType,\n  k,\n  isQueen,\n  distanceThreshold,\n  isMile,\n  bandwidth,\n  kernel,\n  useKernelDiagonals,\n  power,\n  useCentroids,\n  precisionThreshold,\n  orderOfContiguity,\n  includeLowerOrder,\n  geometries,\n}: CreateWeightsProps) {\n  const geomCollection = await getGeometryCollection({\n    geometries,\n  });\n\n  let weights: number[][] = [];\n  let weightsMeta: WeightsMeta = {\n    numberOfObservations: 0,\n    minNeighbors: 0,\n    maxNeighbors: 0,\n    meanNeighbors: 0,\n    medianNeighbors: 0,\n    pctNoneZero: 0,\n  };\n\n  if (weightsType === 'queen' || weightsType === 'rook') {\n    weights = await getContiguityNeighborsFromGeomCollection({\n      geomCollection,\n      isQueen: isQueen !== undefined ? isQueen : true,\n      useCentroids: useCentroids !== undefined ? useCentroids : true,\n      precisionThreshold: precisionThreshold || 0.0,\n      orderOfContiguity: orderOfContiguity || 1,\n      includeLowerOrder: includeLowerOrder !== undefined ? includeLowerOrder : false,\n    });\n\n    weightsMeta = {\n      ...getMetaFromWeights(weights),\n      type: weightsType,\n      symmetry: 'symmetric',\n      order: orderOfContiguity || 1,\n      includeLowerOrder: includeLowerOrder || false,\n      threshold: precisionThreshold || 0.0,\n    };\n  } else if (weightsType === 'knn') {\n    weights = await getNearestNeighborsFromGeomCollection({\n      geomCollection,\n      k: k || 4,\n    });\n\n    weightsMeta = {\n      ...getMetaFromWeights(weights),\n      type: weightsType,\n      symmetry: 'symmetric',\n      k: k || 4,\n    };\n  } else if (weightsType === 'threshold') {\n    weights = await getDistanceNeighborsFromGeomCollection({\n      geomCollection,\n      distanceThreshold: distanceThreshold || 0.0,\n      isMile: isMile || false,\n    });\n\n    weightsMeta = {\n      ...getMetaFromWeights(weights, true),\n      type: weightsType,\n      symmetry: 'symmetric',\n      threshold: distanceThreshold || 0.0,\n      isMile: isMile || false,\n    };\n  } else if (weightsType === 'kernel') {\n    const kernelBandwidth = bandwidth || 0.0;\n    if (!Number.isFinite(kernelBandwidth) || kernelBandwidth <= 0) {\n      throw new Error('bandwidth is required and must be a finite, positive number for kernel weights');\n    }\n    const kernelName = kernel || 'gaussian';\n\n    weights = await getKernelWeightsFromGeomCollection({\n      geomCollection,\n      bandwidth: kernelBandwidth,\n      kernel: kernelName,\n      isMile: isMile || false,\n      useKernelDiagonals: useKernelDiagonals !== undefined ? useKernelDiagonals : false,\n      power: power !== undefined ? power : 1.0,\n    });\n\n    weightsMeta = {\n      ...getMetaFromWeights(weights, true),\n      type: weightsType,\n      symmetry: 'symmetric',\n      bandwidth: kernelBandwidth,\n      kernel: kernelName,\n      power: power !== undefined ? power : 1.0,\n      isMile: isMile || false,\n    };\n  } else {\n    throw new Error('Invalid weights type');\n  }\n\n  return { weights, weightsMeta };\n}\n", "// SPDX-License-Identifier: MIT\n// Copyright contributors to the geodalib project\n\nimport { getGeometryCollection } from './utils';\nimport { initWASM } from '../init';\nimport { SpatialGeometry } from './utils';\nimport { DistanceUnit } from '@geoda/common';\n\n/**\n * Get the area of the geometry\n *\n * @example\n * ```ts\n * const geoms = [\n *   {\n *     type: 'Feature',\n *     geometry: { type: 'Polygon', coordinates: [[[0, 0], [1, 0], [1, 1], [0, 1], [0, 0]]] },\n *     properties: { index: 0 },\n *   },\n * ];\n * const area = await getArea(geoms, DistanceUnit.KM);\n * ```\n *\n * @param geoms - The geometry to get the area of\n * @param distanceUnit - The unit of the distance\n * @returns The area of the geometry\n */\nexport async function getArea(geoms: SpatialGeometry, distanceUnit: DistanceUnit) {\n  await initWASM();\n\n  // use UTM with meter unit\n  const convertToUTM = true;\n\n  const geometryCollection = await getGeometryCollection({\n    geometries: geoms,\n    convertToUTM,\n  });\n\n  const size = geometryCollection.size();\n  const promises = Array.from({ length: size }, (_, i) => geometryCollection.getArea(i));\n  const areasInMeter = await Promise.all(promises);\n\n  return areasInMeter.map(areaInMeter => {\n    if (distanceUnit === DistanceUnit.KM) {\n      return areaInMeter / 1000000;\n    } else if (distanceUnit === DistanceUnit.Mile) {\n      return areaInMeter / 1609.34;\n    }\n    return areaInMeter;\n  });\n}\n\n/**\n * Get the length of the geometry\n *\n * @example\n * ```ts\n * const geoms = [\n *   { type: 'Feature', geometry: { type: 'LineString', coordinates: [[0, 0], [1, 0], [1, 1], [0, 1], [0, 0]] }, properties: { index: 0 } },\n * ];\n * const length = await getLength(geoms, DistanceUnit.KM);\n * ```\n */\nexport async function getLength(geoms: SpatialGeometry, distanceUnit: DistanceUnit) {\n  await initWASM();\n\n  const convertToUTM = true;\n\n  const geometryCollection = await getGeometryCollection({\n    geometries: geoms,\n    convertToUTM,\n  });\n\n  const size = geometryCollection.size();\n  const promises = Array.from({ length: size }, (_, i) => geometryCollection.getLength(i));\n  const lengthsInMeter = await Promise.all(promises);\n\n  return lengthsInMeter.map(lengthInMeter => {\n    if (distanceUnit === DistanceUnit.KM) {\n      return lengthInMeter / 1000;\n    } else if (distanceUnit === DistanceUnit.Mile) {\n      return lengthInMeter / 1609.34;\n    }\n    return lengthInMeter;\n  });\n}\n\n/**\n * Get the perimeter of the geometry\n *\n * @example\n * ```ts\n * const geoms = [\n *   { type: 'Feature', geometry: { type: 'Polygon', coordinates: [[[0, 0], [1, 0], [1, 1], [0, 1], [0, 0]]] }, properties: { index: 0 } },\n * ];\n * const perimeter = await getPerimeter(geoms, DistanceUnit.KM);\n * ```\n */\nexport async function getPerimeter(geoms: SpatialGeometry, distanceUnit: DistanceUnit) {\n  await initWASM();\n\n  const convertToUTM = true;\n\n  const geometryCollection = await getGeometryCollection({\n    geometries: geoms,\n    convertToUTM,\n  });\n\n  const size = geometryCollection.size();\n  const promises = Array.from({ length: size }, (_, i) => geometryCollection.getPerimeter(i));\n  const perimetersInMeter = await Promise.all(promises);\n\n  return perimetersInMeter.map(perimeterInMeter => {\n    if (distanceUnit === DistanceUnit.KM) {\n      return perimeterInMeter / 1000;\n    } else if (distanceUnit === DistanceUnit.Mile) {\n      return perimeterInMeter / 1609.34;\n    }\n    return perimeterInMeter;\n  });\n}\n", "// SPDX-License-Identifier: MIT\n// Copyright contributors to the geodalib project\n\nimport { Feature } from 'geojson';\nimport { initWASM } from '../init';\nimport { getGeometryCollection, SpatialGeometry, polygonToFeature } from './utils';\nimport { DistanceUnit, lengthToMeters } from '@geoda/common';\n\n/**\n * The options for getting the buffers\n */\nexport type GetBuffersOptions = {\n  /**\n   * The geometries to get the buffers See {@link SpatialGeometry}\n   */\n  geoms: SpatialGeometry;\n  /**\n   * The distance of the buffer, use with distanceUnit e.g. 100 KM or 10 mile\n   */\n  bufferDistance: number;\n  /**\n   * The unit of the distance. See {@link DistanceUnit}\n   */\n  distanceUnit: DistanceUnit;\n  /**\n   * The number of points per circle. This determines the granularity of the buffer.\n   * More points will result in a smoother buffer but will also increase the memory usage.\n   */\n  pointsPerCircle?: number;\n};\n\n/**\n * Get the buffers of the geometries\n *\n * ## Example\n * ```ts\n * const geoms = [\n *   {\n *     type: 'Feature',\n *     geometry: { type: 'Point', coordinates: [100, 0] },\n *   },\n * ];\n *\n * const buffers = await getBuffers({\n *   geoms: geoms,\n *   bufferDistance: 10,\n *   distanceUnit: DistanceUnit.Mile,\n *   pointsPerCircle: 10,\n * });\n * ```\n *\n * @param options The options for getting the buffers. See {@link GetBuffersOptions}\n * @returns The buffers of the geometries\n */\nexport async function getBuffers({\n  geoms,\n  bufferDistance,\n  distanceUnit,\n  pointsPerCircle = 10,\n}: GetBuffersOptions) {\n  await initWASM();\n\n  // convert to UTM so we can use the unit of meter or mile\n  const convertToUTM = true;\n  const fixPolygon = true;\n\n  const dist = lengthToMeters(bufferDistance, distanceUnit);\n\n  const geometryCollection = await getGeometryCollection({\n    geometries: geoms,\n    convertToUTM,\n    fixPolygon,\n  });\n\n  const result: Array<Feature> = [];\n\n  for (let i = 0; i < geometryCollection.size(); ++i) {\n    const buffer = geometryCollection.buffer(i, dist, pointsPerCircle);\n    result.push(await polygonToFeature(buffer));\n  }\n\n  return result;\n}\n", "// SPDX-License-Identifier: MIT\n// Copyright contributors to the geodalib project\n\nimport { initWASM } from '../init';\nimport { getGeometryCollection, SpatialGeometry } from './utils';\n\n/**\n * Get the centroids of the geometries\n *\n * ## Example\n * ```ts\n * const geoms = [\n *   {\n *     type: 'Feature',\n *     geometry: { type: 'Point', coordinates: [100, 0] },\n *   },\n * ];\n *\n * const centroids = await getCentroids(geoms);\n * ```\n *\n * @param geoms The geometries to get the centroids. See {@link SpatialGeometry}\n * @returns The centroids of the geometries\n */\nexport async function getCentroids(geoms: SpatialGeometry) {\n  await initWASM();\n\n  const geometryCollection = await getGeometryCollection({ geometries: geoms });\n  const centroids = geometryCollection.getCentroids();\n\n  const result: Array<Array<number> | null> = [];\n\n  // point as input search [lng, lat]\n  for (let i = 0, n = centroids.size(); i < n; ++i) {\n    if (centroids.get(i).size() === 0) {\n      result.push(null);\n    } else {\n      result.push([centroids.get(i)?.get(0), centroids.get(i)?.get(1)]);\n    }\n  }\n\n  return result;\n}\n", "// SPDX-License-Identifier: MIT\n// Copyright contributors to the geodalib project\n\nimport { initWASM } from '../init';\nimport { SpatialGeometry, getGeometryCollection, polygonToFeature } from './utils';\nimport { Feature } from 'geojson';\n\n/**\n * Dissolve the polygons by merging them into a single polygon\n * @param polys - The polygons to dissolve\n * @returns The dissolved polygon\n *\n * @example\n * ```ts\n * const polys = [\n *   { type: 'Feature', geometry: { type: 'Polygon', coordinates: [[[0, 0], [1, 0], [1, 1], [0, 1], [0, 0]]] }, properties: { index: 0 } },\n *   { type: 'Feature', geometry: { type: 'Polygon', coordinates: [[[0, 0], [1, 0], [1, 1], [0, 1], [0, 0]]] }, properties: { index: 1 } },\n * ];\n * const dissolvedPolygon = await spatialDissolve(polys);\n * ```\n *\n * :::tip\n * In practice, you may need to find the polygons that need to be dissolved first.\n * For example, using a county dataset, you may need to dissolve the polygons that share the same county code.\n * :::\n */\nexport async function spatialDissolve(polys: SpatialGeometry): Promise<Feature> {\n  const wasm = await initWASM();\n\n  const geometryCollection = await getGeometryCollection({ geometries: polys });\n\n  const polygon = await wasm.spatialDissolve(geometryCollection);\n\n  const dissolvedPolygon = await polygonToFeature(polygon);\n\n  return dissolvedPolygon;\n}\n", "// SPDX-License-Identifier: MIT\n// Copyright contributors to the geodalib project\n\nimport { GeometryCollection } from '@geoda/common';\nimport { initWASM } from '../init';\nimport { SpatialGeometry, getGeometryCollection } from './utils';\n\n/**\n * The type of the geometries used in the GeoDaLib\n */\nexport type SpatialJoinGeometries = SpatialGeometry;\n\n/**\n * The type of the props for spatialJoin\n * @param leftGeometries - the left geometries\n * @param rightGeometries - the right geometries\n */\nexport type SpatialJoinProps = {\n  leftGeometries: SpatialJoinGeometries;\n  rightGeometries: SpatialJoinGeometries;\n};\n\n/**\n * Spatial join two geometries. The result is an array of arrays, where each sub-array contains the indexes of the geometries (right) that intersect.\n *\n * @example\n * ```ts\n * const leftGeometries = [\n *   { type: 'Feature', geometry: { type: 'Polygon', coordinates: [[[0, 0], [1, 0], [1, 1], [0, 1], [0, 0]]] }, properties: { index: 0 } },\n * ];\n * const rightGeometries = [\n *   { type: 'Feature', geometry: { type: 'Polygon', coordinates: [[[0, 0], [1, 0], [1, 1], [0, 1], [0, 0]]] }, properties: { index: 1 } },\n * ];\n * const joinIndexes = await spatialJoin({ leftGeometries, rightGeometries });\n * ```\n */\nexport async function spatialJoin({\n  leftGeometries,\n  rightGeometries,\n}: SpatialJoinProps): Promise<number[][]> {\n  if (!leftGeometries || !rightGeometries) {\n    return [];\n  }\n  try {\n    const leftGeomCollection: GeometryCollection = await getGeometryCollection({\n      geometries: leftGeometries,\n    });\n\n    const rightGeomCollection: GeometryCollection = await getGeometryCollection({\n      geometries: rightGeometries,\n    });\n\n    const joinIndexes = await spatialJoinGeometryCollection({\n      leftGeomCollection,\n      rightGeomCollection,\n    });\n\n    return joinIndexes;\n  } catch (error) {\n    console.error(error);\n    throw error;\n  }\n}\n\n/**\n * The type of the props for spatialJoinGeometryCollection\n * @param leftGeomCollection - the left geometry collection\n * @param rightGeomCollection - the right geometry collection\n */\nexport type SpatialJoinGeometryCollectionProps = {\n  leftGeomCollection: GeometryCollection;\n  rightGeomCollection: GeometryCollection;\n};\n\n/**\n * Spatial join two geometry collections\n * @param props - the props for spatialJoinGeometryCollection see {@link SpatialJoinGeometryCollectionProps}\n * @returns the join indexes\n */\nexport async function spatialJoinGeometryCollection({\n  leftGeomCollection,\n  rightGeomCollection,\n}: SpatialJoinGeometryCollectionProps): Promise<number[][]> {\n  const result: number[][] = [];\n  const wasmInstance = await initWASM();\n  const joinIndexes = wasmInstance.spatialJoin(leftGeomCollection, rightGeomCollection);\n  for (let i = 0; i < joinIndexes.size(); i++) {\n    const joinIndex = joinIndexes.get(i);\n    const resultRow: number[] = [];\n    for (let j = 0; j < joinIndex.size(); j++) {\n      resultRow.push(joinIndex.get(j));\n    }\n    result.push(resultRow);\n  }\n  return result;\n}\n", "// SPDX-License-Identifier: MIT\n// Copyright contributors to the geodalib project\n\nimport { Feature } from 'geojson';\nimport { initWASM } from '../init';\nimport { getGeometryCollection, SpatialGeometry, polygonToFeature } from './utils';\n\n/**\n * Get the Thiessen polygons for the given geometries. If the given geometries are not points,\n * the centroids will be used to create the Thiessen polygons.\n *\n * Note: The Thiessen polygons are the polygons that are created by the Voronoi diagram of the points.\n *\n * ## Example\n * ```ts\n * const geoms = [\n *   { type: 'Feature', geometry: { type: 'Point', coordinates: [-122.4194, 37.7749] } },\n *   { type: 'Feature', geometry: { type: 'Point', coordinates: [-74.0060, 40.7128] } },\n *   { type: 'Feature', geometry: { type: 'Point', coordinates: [-87.6298, 41.8781] } },\n *   { type: 'Feature', geometry: { type: 'Point', coordinates: [-95.3698, 29.7604] } },\n * ];\n * const thiessenPolygons = await getThiessenPolygons({ geoms });\n * ```\n *\n * @param geoms - The geometries to get the Thiessen polygons\n * @returns The Thiessen polygons\n */\nexport async function getThiessenPolygons({ geoms }: { geoms: SpatialGeometry }) {\n  const wasm = await initWASM();\n\n  const geomCollection = await getGeometryCollection({\n    geometries: geoms,\n    fixPolygon: true,\n  });\n\n  // get centroids from geomCollection\n  const centroids = geomCollection.getCentroids();\n\n  const x = new wasm.VectorDouble();\n  const y = new wasm.VectorDouble();\n\n  for (let i = 0; i < centroids.size(); i++) {\n    const centroid = centroids.get(i);\n    x.push_back(centroid.get(0));\n    y.push_back(centroid.get(1));\n  }\n\n  // get thiessen polygons\n  const thiessenPolygons = wasm.thiessenPolygon(x, y);\n\n  // convert to GeoJSON\n  const result: Array<Feature> = [];\n  for (let i = 0; i < thiessenPolygons.size(); i++) {\n    const polygon = thiessenPolygons.get(i);\n    result.push(await polygonToFeature(polygon));\n  }\n\n  return result;\n}\n", "// SPDX-License-Identifier: MIT\n// Copyright contributors to the geodalib project\n\nimport { Feature } from 'geojson';\nimport { initWASM } from '../init';\nimport { getGeometryCollection, SpatialGeometry, lineToFeature } from './utils';\n\n/**\n * Get the Minimum Spanning Tree for the given geometries. The Minimum Spanning Tree is a tree that connects all the geometries with the minimum total weight.\n * For more information, see [Minimum Spanning Tree](https://en.wikipedia.org/wiki/Minimum_spanning_tree).\n *\n * ## Example\n * ```ts\n * const geoms = [\n *   { type: 'Feature', geometry: { type: 'Point', coordinates: [0, 0] } },\n *   { type: 'Feature', geometry: { type: 'Point', coordinates: [1, 0] } },\n *   { type: 'Feature', geometry: { type: 'Point', coordinates: [0, 1] } },\n * ];\n *\n * const mst = await getMST({ geoms });\n * ```\n *\n * @param geoms - The geometries to get the Minimum Spanning Tree for\n * @returns The Minimum Spanning Tree\n */\nexport async function getMinimumSpanningTree({ geoms }: { geoms: SpatialGeometry }) {\n  // Handle empty input\n  if (!geoms || (Array.isArray(geoms) && geoms.length === 0)) {\n    return [];\n  }\n\n  const wasm = await initWASM();\n\n  const geomCollection = await getGeometryCollection({\n    geometries: geoms,\n    fixPolygon: true,\n  });\n\n  // get centroids from geomCollection\n  const centroids = geomCollection.getCentroids();\n\n  const x = new wasm.VectorDouble();\n  const y = new wasm.VectorDouble();\n\n  for (let i = 0; i < centroids.size(); i++) {\n    const centroid = centroids.get(i);\n    x.push_back(centroid.get(0));\n    y.push_back(centroid.get(1));\n  }\n\n  const weights = new wasm.VectorDouble();\n\n  const mst = wasm.mst(x, y, weights);\n\n  // convert vector<line> to GeoJSON\n  const result: Array<Feature> = [];\n  for (let i = 0; i < mst.size(); i++) {\n    const line = mst.get(i);\n    const feature = await lineToFeature(line);\n    feature.properties = { weight: weights.get(i) };\n    result.push(feature);\n  }\n\n  return result;\n}\n", "// SPDX-License-Identifier: MIT\n// Copyright contributors to the geodalib project\n\nimport { getGeometryCollection, polygonToFeature, SpatialGeometry } from './utils';\nimport { initWASM } from '../init';\nimport { Feature } from 'geojson';\n\n/**\n * Get a cartogram of the given geometries and values. The cartogram is a set of buffers around the given geometries.\n * The radius of the buffers is proportional to the values.\n *\n * ## Example\n * ```ts\n * const geoms = [\n *   { type: 'Point', coordinates: [0, 0] },\n *   { type: 'Point', coordinates: [1, 1] },\n * ];\n *\n * const values = [1, 2];\n *\n * const cartogram = await getCartogram(geoms, values);\n *\n * console.log(cartogram);\n * ```\n * @param geoms The geometries to get the cartogram of\n * @param values The values to use for the cartogram\n * @param iterations The number of iterations to run the cartogram algorithm\n * @param numberOfPointsPerCircle The number of points per circle. This is used to control the granularity of the buffers.\n * @returns The cartogram as a GeoJSON FeatureCollection\n */\nexport async function getCartogram(\n  geoms: SpatialGeometry,\n  values: number[],\n  iterations: number = 100,\n  numberOfPointsPerCircle: number = 30\n): Promise<Feature[]> {\n  const wasm = await initWASM();\n\n  // Convert values array to VectorDouble\n  const valuesVec = new wasm.VectorDouble();\n  valuesVec.resize(values.length, 0);\n  for (let i = 0; i < values.length; i++) {\n    valuesVec.set(i, values[i]);\n  }\n\n  const geometryCollection = await getGeometryCollection({ geometries: geoms });\n\n  // Call the WASM cartogram function\n  const result = await wasm.cartogram(\n    geometryCollection,\n    valuesVec,\n    iterations,\n    numberOfPointsPerCircle\n  );\n\n  const circles = result.getCircles();\n  const x = result.getX();\n  const y = result.getY();\n  const radius = result.getRadius();\n\n  // convert VectorPolygon to GeoJSON\n  const features: Array<Feature> = [];\n  for (let i = 0; i < circles.size(); i++) {\n    const polygon = circles.get(i);\n    const feature = await polygonToFeature(polygon);\n    feature.properties = {\n      x: x.get(i),\n      y: y.get(i),\n      radius: radius.get(i),\n    };\n    features.push(feature);\n  }\n\n  return features;\n}\n", "// SPDX-License-Identifier: MIT\n// Copyright contributors to the geodalib project\n\nimport { initWASM } from '../init';\n\n/**\n * Spatially constrained hierarchical clustering (SCHC).\n *\n * ## Example\n * ```ts\n * import { schc } from '@geoda/core';\n *\n * const result = await schc({\n *   k: 3,\n *   data: [[1, 2, 3, 4]],\n *   neighbors: [[1], [0, 2], [1, 3], [2]],\n * });\n * ```\n */\nexport async function schc({\n  k,\n  data,\n  neighbors,\n  scaleMethod = 'standardize',\n  linkageMethod = 'ward',\n  distanceMethod = 'euclidean',\n  boundVals = [],\n  minBound = 0.0,\n}: {\n  /** number of clusters */\n  k: number;\n  /** multivariate data, one array per variable */\n  data: number[][] | Float32Array[];\n  /** spatial weights matrix as adjacency list */\n  neighbors: number[][];\n  /** raw | standardize */\n  scaleMethod?: string;\n  /** single | complete | average | ward */\n  linkageMethod?: string;\n  /** euclidean | manhattan */\n  distanceMethod?: string;\n  /** optional bound values per observation */\n  boundVals?: number[];\n  minBound?: number;\n}): Promise<number[][]> {\n  const wasm = await initWASM();\n\n  const n = neighbors.length;\n  // Validate before copying into WASM: a shorter variable would leave\n  // Number(undefined) = NaN in the data matrix and skew the clustering, and a\n  // boundVals of the wrong length would be silently truncated.\n  if (n === 0) {\n    throw new Error('schc: neighbors must contain at least one observation');\n  }\n  if (data.length === 0) {\n    throw new Error('schc: data must contain at least one variable');\n  }\n  for (const varData of data) {\n    if (varData.length !== n) {\n      throw new Error(`schc: each variable must have ${n} values (got ${varData.length})`);\n    }\n  }\n  if (boundVals.length !== 0 && boundVals.length !== n) {\n    throw new Error(`schc: boundVals must be empty or have ${n} values (got ${boundVals.length})`);\n  }\n\n  const wasmData = new wasm.VecVecDouble();\n  for (const varData of data) {\n    const wv = new wasm.VectorDouble();\n    wv.resize(n, 0);\n    for (let i = 0; i < n; ++i) wv.set(i, Number(varData[i]));\n    wasmData.push_back(wv);\n  }\n\n  const wasmNeighbors = new wasm.VecVecUInt();\n  for (const nbrs of neighbors) {\n    const wn = new wasm.VectorUInt();\n    for (const nb of nbrs) wn.push_back(nb);\n    wasmNeighbors.push_back(wn);\n  }\n\n  const wasmBound = new wasm.VectorDouble();\n  for (const b of boundVals) wasmBound.push_back(b);\n\n  const result = wasm.schc(\n    k,\n    wasmNeighbors,\n    wasmData,\n    scaleMethod,\n    linkageMethod,\n    distanceMethod,\n    wasmBound,\n    minBound\n  );\n\n  const out: number[][] = [];\n  for (let i = 0; i < result.size(); ++i) {\n    const row = result.get(i);\n    const vals: number[] = [];\n    for (let j = 0; j < row.size(); ++j) vals.push(row.get(j));\n    out.push(vals);\n  }\n  return out;\n}\n", "// SPDX-License-Identifier: MIT\n// Copyright contributors to the geodalib project\n\nimport { initWASM } from '../init';\n\n/**\n * Regionally constrained clustering (REDCAP).\n *\n * ## Example\n * ```ts\n * import { redcap } from '@geoda/core';\n *\n * const result = await redcap({\n *   k: 3,\n *   data: [[1, 2, 3, 4]],\n *   neighbors: [[1], [0, 2], [1, 3], [2]],\n * });\n * ```\n */\nexport async function redcap({\n  k,\n  data,\n  neighbors,\n  scaleMethod = 'standardize',\n  redcapMethod = 'firstorder-singlelinkage',\n  distanceMethod = 'euclidean',\n  boundVals = [],\n  minBound = 0.0,\n}: {\n  k: number;\n  data: number[][] | Float32Array[];\n  neighbors: number[][];\n  scaleMethod?: string;\n  redcapMethod?: string;\n  distanceMethod?: string;\n  boundVals?: number[];\n  minBound?: number;\n}): Promise<number[][]> {\n  const wasm = await initWASM();\n  const n = neighbors.length;\n\n  // Validate before copying into WASM: a shorter variable would leave\n  // Number(undefined) = NaN in the data matrix and skew the clustering, and a\n  // boundVals of the wrong length would be silently truncated.\n  if (n === 0) {\n    throw new Error('redcap: neighbors must contain at least one observation');\n  }\n  if (data.length === 0) {\n    throw new Error('redcap: data must contain at least one variable');\n  }\n  for (const varData of data) {\n    if (varData.length !== n) {\n      throw new Error(`redcap: each variable must have ${n} values (got ${varData.length})`);\n    }\n  }\n  if (boundVals.length !== 0 && boundVals.length !== n) {\n    throw new Error(`redcap: boundVals must be empty or have ${n} values (got ${boundVals.length})`);\n  }\n\n  const wasmData = new wasm.VecVecDouble();\n  for (const varData of data) {\n    const wv = new wasm.VectorDouble();\n    wv.resize(n, 0);\n    for (let i = 0; i < n; ++i) wv.set(i, Number(varData[i]));\n    wasmData.push_back(wv);\n  }\n  const wasmNeighbors = new wasm.VecVecUInt();\n  for (const nbrs of neighbors) {\n    const wn = new wasm.VectorUInt();\n    for (const nb of nbrs) wn.push_back(nb);\n    wasmNeighbors.push_back(wn);\n  }\n  const wasmBound = new wasm.VectorDouble();\n  for (const b of boundVals) wasmBound.push_back(b);\n\n  const result = wasm.redcap(\n    k,\n    wasmNeighbors,\n    wasmData,\n    scaleMethod,\n    redcapMethod,\n    distanceMethod,\n    wasmBound,\n    minBound\n  );\n  const out: number[][] = [];\n  for (let i = 0; i < result.size(); ++i) {\n    const row = result.get(i);\n    const vals: number[] = [];\n    for (let j = 0; j < row.size(); ++j) vals.push(row.get(j));\n    out.push(vals);\n  }\n  return out;\n}\n", "// SPDX-License-Identifier: MIT\n// Copyright contributors to the geodalib project\n\nimport { initWASM } from '../init';\n\n/**\n * Spatially constrained clustering and regionalization (SKATER).\n *\n * ## Example\n * ```ts\n * import { skater } from '@geoda/core';\n *\n * const result = await skater({\n *   k: 3,\n *   data: [[1, 2, 3, 4]],\n *   neighbors: [[1], [0, 2], [1, 3], [2]],\n * });\n * ```\n */\nexport async function skater({\n  k,\n  data,\n  neighbors,\n  scaleMethod = 'standardize',\n  distanceMethod = 'euclidean',\n  boundVals = [],\n  minBound = 0.0,\n}: {\n  k: number;\n  data: number[][] | Float32Array[];\n  neighbors: number[][];\n  scaleMethod?: string;\n  distanceMethod?: string;\n  boundVals?: number[];\n  minBound?: number;\n}): Promise<number[][]> {\n  const wasm = await initWASM();\n  const n = neighbors.length;\n\n  // Validate before copying into WASM: a shorter variable would leave\n  // Number(undefined) = NaN in the data matrix and skew the clustering, and a\n  // boundVals of the wrong length would be silently truncated.\n  if (n === 0) {\n    throw new Error('skater: neighbors must contain at least one observation');\n  }\n  if (data.length === 0) {\n    throw new Error('skater: data must contain at least one variable');\n  }\n  for (const varData of data) {\n    if (varData.length !== n) {\n      throw new Error(`skater: each variable must have ${n} values (got ${varData.length})`);\n    }\n  }\n  if (boundVals.length !== 0 && boundVals.length !== n) {\n    throw new Error(`skater: boundVals must be empty or have ${n} values (got ${boundVals.length})`);\n  }\n\n  const wasmData = new wasm.VecVecDouble();\n  for (const varData of data) {\n    const wv = new wasm.VectorDouble();\n    wv.resize(n, 0);\n    for (let i = 0; i < n; ++i) wv.set(i, Number(varData[i]));\n    wasmData.push_back(wv);\n  }\n  const wasmNeighbors = new wasm.VecVecUInt();\n  for (const nbrs of neighbors) {\n    const wn = new wasm.VectorUInt();\n    for (const nb of nbrs) wn.push_back(nb);\n    wasmNeighbors.push_back(wn);\n  }\n  const wasmBound = new wasm.VectorDouble();\n  for (const b of boundVals) wasmBound.push_back(b);\n\n  const result = wasm.skater(\n    k,\n    wasmNeighbors,\n    wasmData,\n    scaleMethod,\n    distanceMethod,\n    wasmBound,\n    minBound\n  );\n  const out: number[][] = [];\n  for (let i = 0; i < result.size(); ++i) {\n    const row = result.get(i);\n    const vals: number[] = [];\n    for (let j = 0; j < row.size(); ++j) vals.push(row.get(j));\n    out.push(vals);\n  }\n  return out;\n}\n", "// SPDX-License-Identifier: MIT\n// Copyright contributors to the geodalib project\n\nimport { initWASM } from '../init';\n\n/**\n * AZP (Automatic Zoning Procedure) regionalization.\n *\n * ## Example\n * ```ts\n * import { azpGreedy } from '@geoda/core';\n *\n * const result = await azpGreedy({ p: 3, data: [[1, 2, 3, 4]], neighbors: [[1], [0, 2], [1, 3], [2]] });\n * ```\n */\nexport async function azpGreedy({\n  p,\n  data,\n  neighbors,\n  inits = 10,\n  distanceMethod = 'euclidean',\n  seed = 1234567890,\n}: {\n  /** number of regions */\n  p: number;\n  data: number[][] | Float32Array[];\n  neighbors: number[][];\n  inits?: number;\n  distanceMethod?: string;\n  seed?: number;\n}): Promise<number[][]> {\n  const wasm = await initWASM();\n  const n = neighbors.length;\n  const wasmData = new wasm.VecVecDouble();\n  for (const varData of data) {\n    const wv = new wasm.VectorDouble();\n    wv.resize(n, 0);\n    for (let i = 0; i < n; ++i) wv.set(i, Number(varData[i]));\n    wasmData.push_back(wv);\n  }\n  const wasmNeighbors = new wasm.VecVecUInt();\n  for (const nbrs of neighbors) {\n    const wn = new wasm.VectorUInt();\n    for (const nb of nbrs) wn.push_back(nb);\n    wasmNeighbors.push_back(wn);\n  }\n  const result = wasm.azpGreedy(p, wasmNeighbors, wasmData, inits, distanceMethod, seed);\n  const out: number[][] = [];\n  for (let i = 0; i < result.size(); ++i) {\n    const row = result.get(i);\n    const vals: number[] = [];\n    for (let j = 0; j < row.size(); ++j) vals.push(row.get(j));\n    out.push(vals);\n  }\n  return out;\n}\n\n/**\n * AZP regionalization with simulated annealing.\n */\nexport async function azpSA({\n  p,\n  data,\n  neighbors,\n  inits = 10,\n  coolingRate = 0.85,\n  saMaxit = 1,\n  distanceMethod = 'euclidean',\n  seed = 1234567890,\n}: {\n  p: number;\n  data: number[][] | Float32Array[];\n  neighbors: number[][];\n  inits?: number;\n  coolingRate?: number;\n  saMaxit?: number;\n  distanceMethod?: string;\n  seed?: number;\n}): Promise<number[][]> {\n  const wasm = await initWASM();\n  const n = neighbors.length;\n  const wasmData = new wasm.VecVecDouble();\n  for (const varData of data) {\n    const wv = new wasm.VectorDouble();\n    wv.resize(n, 0);\n    for (let i = 0; i < n; ++i) wv.set(i, Number(varData[i]));\n    wasmData.push_back(wv);\n  }\n  const wasmNeighbors = new wasm.VecVecUInt();\n  for (const nbrs of neighbors) {\n    const wn = new wasm.VectorUInt();\n    for (const nb of nbrs) wn.push_back(nb);\n    wasmNeighbors.push_back(wn);\n  }\n  const result = wasm.azpSA(\n    p,\n    wasmNeighbors,\n    wasmData,\n    inits,\n    coolingRate,\n    saMaxit,\n    distanceMethod,\n    seed\n  );\n  const out: number[][] = [];\n  for (let i = 0; i < result.size(); ++i) {\n    const row = result.get(i);\n    const vals: number[] = [];\n    for (let j = 0; j < row.size(); ++j) vals.push(row.get(j));\n    out.push(vals);\n  }\n  return out;\n}\n\n/**\n * AZP regionalization with tabu search.\n */\nexport async function azpTabu({\n  p,\n  data,\n  neighbors,\n  inits = 10,\n  tabuLength = 10,\n  convTabu = 10,\n  distanceMethod = 'euclidean',\n  seed = 1234567890,\n}: {\n  p: number;\n  data: number[][] | Float32Array[];\n  neighbors: number[][];\n  inits?: number;\n  tabuLength?: number;\n  convTabu?: number;\n  distanceMethod?: string;\n  seed?: number;\n}): Promise<number[][]> {\n  const wasm = await initWASM();\n  const n = neighbors.length;\n  const wasmData = new wasm.VecVecDouble();\n  for (const varData of data) {\n    const wv = new wasm.VectorDouble();\n    wv.resize(n, 0);\n    for (let i = 0; i < n; ++i) wv.set(i, Number(varData[i]));\n    wasmData.push_back(wv);\n  }\n  const wasmNeighbors = new wasm.VecVecUInt();\n  for (const nbrs of neighbors) {\n    const wn = new wasm.VectorUInt();\n    for (const nb of nbrs) wn.push_back(nb);\n    wasmNeighbors.push_back(wn);\n  }\n  const result = wasm.azpTabu(\n    p,\n    wasmNeighbors,\n    wasmData,\n    inits,\n    tabuLength,\n    convTabu,\n    distanceMethod,\n    seed\n  );\n  const out: number[][] = [];\n  for (let i = 0; i < result.size(); ++i) {\n    const row = result.get(i);\n    const vals: number[] = [];\n    for (let j = 0; j < row.size(); ++j) vals.push(row.get(j));\n    out.push(vals);\n  }\n  return out;\n}\n", "// SPDX-License-Identifier: MIT\n// Copyright contributors to the geodalib project\n\nimport { initWASM } from '../init';\n\n/**\n * Max-P regionalization.\n *\n * ## Example\n * ```ts\n * import { maxpGreedy } from '@geoda/core';\n *\n * const result = await maxpGreedy({ data: [[1, 2, 3, 4]], neighbors: [[1], [0, 2], [1, 3], [2]] });\n * ```\n */\nexport async function maxpGreedy({\n  data,\n  neighbors,\n  iterations = 10,\n  distanceMethod = 'euclidean',\n  seed = 1234567890,\n}: {\n  data: number[][] | Float32Array[];\n  neighbors: number[][];\n  iterations?: number;\n  distanceMethod?: string;\n  seed?: number;\n}): Promise<number[][]> {\n  const wasm = await initWASM();\n  const n = neighbors.length;\n  const wasmData = new wasm.VecVecDouble();\n  for (const varData of data) {\n    const wv = new wasm.VectorDouble();\n    wv.resize(n, 0);\n    for (let i = 0; i < n; ++i) wv.set(i, Number(varData[i]));\n    wasmData.push_back(wv);\n  }\n  const wasmNeighbors = new wasm.VecVecUInt();\n  for (const nbrs of neighbors) {\n    const wn = new wasm.VectorUInt();\n    for (const nb of nbrs) wn.push_back(nb);\n    wasmNeighbors.push_back(wn);\n  }\n  const result = wasm.maxpGreedy(wasmNeighbors, wasmData, iterations, distanceMethod, seed);\n  const out: number[][] = [];\n  for (let i = 0; i < result.size(); ++i) {\n    const row = result.get(i);\n    const vals: number[] = [];\n    for (let j = 0; j < row.size(); ++j) vals.push(row.get(j));\n    out.push(vals);\n  }\n  return out;\n}\n\n/**\n * Max-P regionalization with simulated annealing.\n */\nexport async function maxpSA({\n  data,\n  neighbors,\n  iterations = 10,\n  coolingRate = 0.85,\n  saMaxit = 1,\n  distanceMethod = 'euclidean',\n  seed = 1234567890,\n}: {\n  data: number[][] | Float32Array[];\n  neighbors: number[][];\n  iterations?: number;\n  coolingRate?: number;\n  saMaxit?: number;\n  distanceMethod?: string;\n  seed?: number;\n}): Promise<number[][]> {\n  const wasm = await initWASM();\n  const n = neighbors.length;\n  const wasmData = new wasm.VecVecDouble();\n  for (const varData of data) {\n    const wv = new wasm.VectorDouble();\n    wv.resize(n, 0);\n    for (let i = 0; i < n; ++i) wv.set(i, Number(varData[i]));\n    wasmData.push_back(wv);\n  }\n  const wasmNeighbors = new wasm.VecVecUInt();\n  for (const nbrs of neighbors) {\n    const wn = new wasm.VectorUInt();\n    for (const nb of nbrs) wn.push_back(nb);\n    wasmNeighbors.push_back(wn);\n  }\n  const result = wasm.maxpSA(\n    wasmNeighbors,\n    wasmData,\n    iterations,\n    coolingRate,\n    saMaxit,\n    distanceMethod,\n    seed\n  );\n  const out: number[][] = [];\n  for (let i = 0; i < result.size(); ++i) {\n    const row = result.get(i);\n    const vals: number[] = [];\n    for (let j = 0; j < row.size(); ++j) vals.push(row.get(j));\n    out.push(vals);\n  }\n  return out;\n}\n\n/**\n * Max-P regionalization with tabu search.\n */\nexport async function maxpTabu({\n  data,\n  neighbors,\n  iterations = 10,\n  tabuLength = 10,\n  convTabu = 10,\n  distanceMethod = 'euclidean',\n  seed = 1234567890,\n}: {\n  data: number[][] | Float32Array[];\n  neighbors: number[][];\n  iterations?: number;\n  tabuLength?: number;\n  convTabu?: number;\n  distanceMethod?: string;\n  seed?: number;\n}): Promise<number[][]> {\n  const wasm = await initWASM();\n  const n = neighbors.length;\n  const wasmData = new wasm.VecVecDouble();\n  for (const varData of data) {\n    const wv = new wasm.VectorDouble();\n    wv.resize(n, 0);\n    for (let i = 0; i < n; ++i) wv.set(i, Number(varData[i]));\n    wasmData.push_back(wv);\n  }\n  const wasmNeighbors = new wasm.VecVecUInt();\n  for (const nbrs of neighbors) {\n    const wn = new wasm.VectorUInt();\n    for (const nb of nbrs) wn.push_back(nb);\n    wasmNeighbors.push_back(wn);\n  }\n  const result = wasm.maxpTabu(\n    wasmNeighbors,\n    wasmData,\n    iterations,\n    tabuLength,\n    convTabu,\n    distanceMethod,\n    seed\n  );\n  const out: number[][] = [];\n  for (let i = 0; i < result.size(); ++i) {\n    const row = result.get(i);\n    const vals: number[] = [];\n    for (let j = 0; j < row.size(); ++j) vals.push(row.get(j));\n    out.push(vals);\n  }\n  return out;\n}\n", "// SPDX-License-Identifier: MIT\n// Copyright contributors to the geodalib project\n\nimport { GeometryCollection } from '@geoda/common';\nimport { initWASM } from '../init';\n\n/**\n * Result of spatial validation.\n */\nexport type SpatialValidationResult = {\n  spatiallyConstrained: boolean;\n  fragmentation: {\n    n: number;\n    entropy: number;\n    simpson: number;\n    minClusterSize: number;\n    maxClusterSize: number;\n    meanClusterSize: number;\n    spatiallyContiguous: boolean;\n  };\n  clusterFragmentation: {\n    n: number;\n    entropy: number;\n    simpson: number;\n    minClusterSize: number;\n    maxClusterSize: number;\n    meanClusterSize: number;\n    spatiallyContiguous: boolean;\n  }[];\n  clusterDiameter: { steps: number; ratio: number }[];\n  clusterCompactness: { area: number; perimeter: number; isoperimeterQuotient: number }[];\n  joincountRatio: { cluster: number; n: number; ratio: number }[];\n};\n\n/**\n * Computes spatial validation metrics for a clustering result.\n */\nexport async function spatialValidation({\n  clusters,\n  geometries,\n  neighbors,\n}: {\n  /** cluster id per observation */\n  clusters: number[];\n  /** geometry collection (use @geoda/core to build it) */\n  geometries: GeometryCollection;\n  /** spatial weights matrix as adjacency list */\n  neighbors: number[][];\n}): Promise<SpatialValidationResult> {\n  const wasm = await initWASM();\n\n  // The C++ implementation indexes clusters[i] and geoms.get_centroid(i) for\n  // i < neighbors.size(); reject mismatched inputs before touching WASM.\n  const n = neighbors.length;\n  if (n === 0) {\n    throw new Error('spatialValidation: neighbors must contain at least one observation');\n  }\n  if (clusters.length !== n) {\n    throw new Error(\n      `spatialValidation: clusters must have one entry per observation (${n}, got ${clusters.length})`\n    );\n  }\n  if (geometries.size() !== n) {\n    throw new Error(\n      `spatialValidation: geometries must have one feature per observation (${n}, got ${geometries.size()})`\n    );\n  }\n\n  const wasmClusters = new wasm.VectorInt();\n  for (const c of clusters) wasmClusters.push_back(c);\n\n  const wasmNeighbors = new wasm.VecVecUInt();\n  for (const nbrs of neighbors) {\n    const wn = new wasm.VectorUInt();\n    for (const nb of nbrs) wn.push_back(nb);\n    wasmNeighbors.push_back(wn);\n  }\n\n  const result = wasm.spatialValidation(wasmClusters, wasmNeighbors, geometries);\n\n  const frag = (f: {\n    n: number;\n    entropy: number;\n    simpson: number;\n    minClusterSize: number;\n    maxClusterSize: number;\n    meanClusterSize: number;\n    spatiallyContiguous: boolean;\n  }) => ({\n    n: f.n,\n    entropy: f.entropy,\n    simpson: f.simpson,\n    minClusterSize: f.minClusterSize,\n    maxClusterSize: f.maxClusterSize,\n    meanClusterSize: f.meanClusterSize,\n    spatiallyContiguous: f.spatiallyContiguous,\n  });\n\n  const clusterFragmentation: SpatialValidationResult['clusterFragmentation'] = [];\n  for (let i = 0; i < result.clusterFragmentation.size(); ++i) {\n    clusterFragmentation.push(frag(result.clusterFragmentation.get(i)));\n  }\n  const clusterDiameter: { steps: number; ratio: number }[] = [];\n  for (let i = 0; i < result.clusterDiameter.size(); ++i) {\n    clusterDiameter.push({\n      steps: result.clusterDiameter.get(i).steps,\n      ratio: result.clusterDiameter.get(i).ratio,\n    });\n  }\n  const clusterCompactness: { area: number; perimeter: number; isoperimeterQuotient: number }[] =\n    [];\n  for (let i = 0; i < result.clusterCompactness.size(); ++i) {\n    clusterCompactness.push({\n      area: result.clusterCompactness.get(i).area,\n      perimeter: result.clusterCompactness.get(i).perimeter,\n      isoperimeterQuotient: result.clusterCompactness.get(i).isoperimeterQuotient,\n    });\n  }\n  const joincountRatio: { cluster: number; n: number; ratio: number }[] = [];\n  for (let i = 0; i < result.joincountRatio.size(); ++i) {\n    joincountRatio.push({\n      cluster: result.joincountRatio.get(i).cluster,\n      n: result.joincountRatio.get(i).n,\n      ratio: result.joincountRatio.get(i).ratio,\n    });\n  }\n\n  return {\n    spatiallyConstrained: result.spatiallyConstrained,\n    fragmentation: frag(result.fragmentation),\n    clusterFragmentation,\n    clusterDiameter,\n    clusterCompactness,\n    joincountRatio,\n  };\n}\n", "// SPDX-License-Identifier: MIT\n// Copyright contributors to the geodalib project\n\nimport { initWASM } from '../init';\n\n/**\n * Makes a set of clusters spatially contiguous by reassigning disconnected\n * components, mirroring pygeoda's `make_spatial`.\n *\n * ## Example\n * ```ts\n * import { makeSpatial } from '@geoda/core';\n *\n * const clusters = [[0, 1, 2], [3, 4]];\n * const neighbors = [[1], [0, 2], [1, 3], [2, 4], [3]];\n * const result = await makeSpatial({ clusters, neighbors });\n * ```\n */\nexport async function makeSpatial({\n  clusters,\n  neighbors,\n}: {\n  /** list of clusters, each a list of observation indices */\n  clusters: number[][];\n  /** spatial weights matrix as adjacency list */\n  neighbors: number[][];\n}): Promise<number[][]> {\n  // Validate inputs before touching WASM: out-of-range indices would be passed\n  // to VectorWeight::GetNeighbors() in the C++ implementation, and an empty\n  // cluster leaves the MakeSpatialCluster core null \u2014 both crash the WASM\n  // runtime instead of producing a result.\n  const n = neighbors.length;\n  if (n === 0) {\n    throw new Error('makeSpatial: neighbors must contain at least one observation');\n  }\n  if (clusters.length === 0) {\n    throw new Error('makeSpatial: clusters must contain at least one cluster');\n  }\n  for (const c of clusters) {\n    if (c.length === 0) {\n      throw new Error('makeSpatial: clusters must not contain an empty cluster');\n    }\n    for (const e of c) {\n      if (!Number.isInteger(e) || e < 0 || e >= n) {\n        throw new Error(\n          `makeSpatial: cluster element ${e} is out of range (expected an integer in 0..${n - 1})`\n        );\n      }\n    }\n  }\n  for (const nbrs of neighbors) {\n    for (const nb of nbrs) {\n      if (!Number.isInteger(nb) || nb < 0 || nb >= n) {\n        throw new Error(\n          `makeSpatial: neighbor index ${nb} is out of range (expected an integer in 0..${n - 1})`\n        );\n      }\n    }\n  }\n\n  const wasm = await initWASM();\n\n  const wasmClusters = new wasm.VecVecInt();\n  const wasmNeighbors = new wasm.VecVecUInt();\n  try {\n    for (const c of clusters) {\n      const wc = new wasm.VectorInt();\n      try {\n        for (const e of c) wc.push_back(e);\n        wasmClusters.push_back(wc);\n      } finally {\n        // push_back copies into wasmClusters; release the temporary handle.\n        wc.delete();\n      }\n    }\n\n    for (const nbrs of neighbors) {\n      const wn = new wasm.VectorUInt();\n      try {\n        for (const n of nbrs) wn.push_back(n);\n        wasmNeighbors.push_back(wn);\n      } finally {\n        wn.delete();\n      }\n    }\n\n    const result = wasm.makeSpatial(wasmClusters, wasmNeighbors);\n\n    const out: number[][] = [];\n    for (let i = 0; i < result.size(); ++i) {\n      const row = result.get(i);\n      const vals: number[] = [];\n      for (let j = 0; j < row.size(); ++j) vals.push(row.get(j));\n      out.push(vals);\n      row.delete();\n    }\n    result.delete();\n    return out;\n  } finally {\n    wasmClusters.delete();\n    wasmNeighbors.delete();\n  }\n}\n", "// SPDX-License-Identifier: MIT\n// Copyright contributors to the geodalib project\n\nimport { initWASM } from '../init';\nimport { vecDoubleToNumber } from '@geoda/common';\n\n/**\n * ## Description\n *\n * Creates classes with equal number of observations by:\n * - Sorting values in ascending order\n * - Dividing sorted values into bins with equal number of observations\n *\n * ## Characteristics\n * - Well-suited for ordinal data\n * - May place similar values in different classes\n * - Useful for comparing relative rankings across different areas\n *\n * @example\n * ```ts\n * import { quantileBreaks } from '@geoda/core';\n *\n * const data = [1, 2, 3, 4, 5, 6, 7, 8, 9];\n * const k = 3;\n * const breaks = await quantileBreaks(k, data);\n * // breaks = [3.5, 6.5]\n * ```\n *\n * @param k The number of classes/categories\n * @param data The numeric values to be classified\n * @returns The breaks values\n */\nexport async function quantileBreaks(k: number, data: number[] | Float32Array): Promise<number[]> {\n  const wasm = await initWASM();\n\n  const n = data.length;\n\n  const wasmUndefs = new wasm.VectorUInt();\n  wasmUndefs.resize(n, 0);\n\n  const wasmData = new wasm.VectorDouble();\n  wasmData.resize(n, 0);\n  for (let i = 0; i < n; ++i) {\n    wasmData.set(i, data[i]);\n    if (data[i] === undefined || data[i] === null) {\n      wasmUndefs.set(i, 1);\n    }\n  }\n\n  const result = wasm.quantileBreaks(k, wasmData, wasmUndefs);\n\n  return vecDoubleToNumber(result);\n}\n", "// SPDX-License-Identifier: MIT\n// Copyright contributors to the geodalib project\n\nimport { initWASM } from '../init';\nimport { vecDoubleToNumber } from '@geoda/common';\n\n/**\n * ## Description\n * The natural breaks (Jenks) algorithm breaks up the data into k classes by minimizing within-class variance\n * and maximizing between-class variance. The values in each group are as similar as possible to each other,\n * and as different as possible from the values in the other groups.\n *\n * ## Characteristics\n * - Based on natural groupings inherent in the data\n * - Similar values are grouped together\n * - Boundaries are set where there are relatively big jumps in data values\n * - Best for data with clear \"breaks\" in distribution\n *\n * @example\n * ```ts\n * import { naturalBreaks } from '@geoda/core';\n *\n * const data = [1, 2, 3, 4, 5, 6, 7, 8, 9];\n * const k = 3;\n * const breaks = await naturalBreaks(k, data);\n *\n * // breaks = [4, 7]\n * ```\n *\n * @param {number} k - The number of classes/categories\n * @param {(number[]|Float32Array)} data - The numeric values to be classified\n * @returns {Promise<number[]>} The breaks values\n */\nexport async function naturalBreaks(k: number, data: number[] | Float32Array): Promise<number[]> {\n  const wasm = await initWASM();\n\n  const n = data.length;\n\n  const wasmUndefs = new wasm.VectorInt();\n  wasmUndefs.resize(n, 0);\n\n  const wasmData = new wasm.VectorDouble();\n  wasmData.resize(n, 0);\n  for (let i = 0; i < n; ++i) {\n    wasmData.set(i, data[i]);\n    if (data[i] === undefined || data[i] === null) {\n      wasmUndefs.set(i, 1);\n    }\n  }\n\n  const result = wasm.naturalBreaks(k, wasmData, wasmUndefs);\n\n  return vecDoubleToNumber(result);\n}\n", "// SPDX-License-Identifier: MIT\n// Copyright contributors to the geodalib project\n\nimport { initWASM } from '../init';\nimport { vecDoubleToNumber } from '@geoda/common';\n\n/**\n * ## Description\n * Divides the range of values into equal-sized intervals.\n *\n * ## Characteristics\n * - Simple to understand and interpret\n * - Best for evenly distributed data\n * - May not represent data well when distribution is skewed\n * - Interval size = (maximum value - minimum value) / number of classes\n *\n * @example\n * ```ts\n * import { equalIntervalBreaks } from '@geoda/core';\n *\n * const data = [1, 2, 3, 4, 5, 6, 7, 8, 9];\n * const k = 3;\n * const breaks = await equalIntervalBreaks(k, data);\n *\n * // breaks = [3.66666666666667, 6.33333333333333]\n * ```\n *\n * @param k The number of classes/categories\n * @param data The numeric values to be classified\n * @returns The breaks values\n */\nexport async function equalIntervalBreaks(\n  k: number,\n  data: number[] | Float32Array\n): Promise<number[]> {\n  const wasm = await initWASM();\n\n  const n = data.length;\n\n  const wasmUndefs = new wasm.VectorInt();\n  wasmUndefs.resize(n, 0);\n\n  const wasmData = new wasm.VectorDouble();\n  wasmData.resize(n, 0);\n  for (let i = 0; i < n; ++i) {\n    wasmData.set(i, data[i]);\n    if (data[i] === undefined || data[i] === null) {\n      wasmUndefs.set(i, 1);\n    }\n  }\n\n  const result = wasm.equalIntervalBreaks(k, wasmData, wasmUndefs);\n\n  return vecDoubleToNumber(result);\n}\n", "// SPDX-License-Identifier: MIT\n// Copyright contributors to the geodalib project\n\nimport { initWASM } from '../init';\nimport { vecDoubleToNumber } from '@geoda/common';\n\n/**\n * ## Description\n * Percentile Breaks divides the data into six ranges: the lowest 1%, 1-10%, 10-50%, 50-90%, 90-99% and the top 1%.\n *\n * ## Characteristics\n * - Fixed categories\n * - Effective for identifying spatial outliers and extreme values\n *\n * @example\n * ```ts\n * import { percentileBreaks } from '@geoda/core';\n *\n * const data = [1, 2, 3, 4, 5, 6, 7, 8, 9];\n * const breaks = await percentileBreaks(data);\n *\n * // breaks = [1, 1.4, 5, 8.6, 9]\n * ```\n *\n * @param data The numeric values to be classified.\n * @returns The breaks values.\n */\nexport async function percentileBreaks(data: number[] | Float32Array): Promise<number[]> {\n  const wasm = await initWASM();\n\n  const n = data.length;\n\n  const wasmUndefs = new wasm.VectorInt();\n  wasmUndefs.resize(n, 0);\n\n  const wasmData = new wasm.VectorDouble();\n  wasmData.resize(n, 0);\n  for (let i = 0; i < n; ++i) {\n    wasmData.set(i, data[i]);\n    if (data[i] === undefined || data[i] === null) {\n      wasmUndefs.set(i, 1);\n    }\n  }\n\n  const result = wasm.percentileBreaks(wasmData, wasmUndefs);\n\n  return vecDoubleToNumber(result);\n}\n", "// SPDX-License-Identifier: MIT\n// Copyright contributors to the geodalib project\n\nimport { initWASM } from '../init';\nimport { vecDoubleToNumber } from '@geoda/common';\n\nasync function boxBreaks(data: number[] | Float32Array, hingeFactor: number): Promise<number[]> {\n  const wasm = await initWASM();\n\n  const n = data.length;\n\n  const wasmUndefs = new wasm.VectorInt();\n  wasmUndefs.resize(n, 0);\n\n  const wasmData = new wasm.VectorDouble();\n  wasmData.resize(n, 0);\n  for (let i = 0; i < n; ++i) {\n    wasmData.set(i, data[i]);\n    if (data[i] === undefined || data[i] === null) {\n      wasmUndefs.set(i, 1);\n    }\n  }\n\n  const result = wasm.boxBreaks(wasmData, wasmUndefs, hingeFactor);\n\n  return vecDoubleToNumber(result);\n}\n\n/**\n * ## Description\n * Hinge Box Breaks calculates a list of breakpoints, including the top, bottom, median, and two quartiles of the data, with hinge value 1.5.\n * The categories include: Lower outlier, < 25%, [25-50)%, [50-75)%, >= 75%, Upper outlier\n *\n * ## Characteristics\n * - Fixed categories\n * - Effective for detecting spatial outliers and understanding data distribution\n *\n * @example\n * ```ts\n * import { hinge15Breaks } from '@geoda/core';\n *\n * const data = [1, 2, 3, 4, 5, 6, 7, 8, 9];\n * const breaks = await hinge15Breaks(data);\n *\n * // breaks1 = [-4, 2.75, 5, 7.25, 14]\n * ```\n *\n * @param data The numeric values to be classified.\n * @returns The breaks values.\n */\nexport async function hinge15Breaks(data: number[] | Float32Array): Promise<number[]> {\n  const hingeFactor = 1.5;\n  const result = await boxBreaks(data, hingeFactor);\n  return result;\n}\n\n/**\n * ## Description\n * Hinge Box Breaks calculates a list of breakpoints, including the top, bottom, median, and two quartiles of the data, with hinge value 1.5.\n * The categories include: Lower outlier, < 25%, [25-50)%, [50-75)%, >= 75%, Upper outlier\n *\n * ## Characteristics\n * - Fixed categories\n * - Effective for detecting spatial outliers and understanding data distribution\n *\n * @example\n * ```ts\n * import { hinge15Breaks } from '@geoda/core';\n *\n * const data = [1, 2, 3, 4, 5, 6, 7, 8, 9];\n * const breaks = await hinge15Breaks(data);\n *\n * // breaks2 = [-10.75, 2.75, 5, 7.25, 20.75]\n * ```\n *\n * @param data The numeric values to be classified.\n * @returns The breaks values.\n */\nexport async function hinge30Breaks(data: number[] | Float32Array): Promise<number[]> {\n  const hingeFactor = 3.0;\n  const result = await boxBreaks(data, hingeFactor);\n  return result;\n}\n", "// SPDX-License-Identifier: MIT\n// Copyright contributors to the geodalib project\n\nimport { initWASM } from '../init';\nimport { vecDoubleToNumber } from '@geoda/common';\n\n/**\n * ## Description\n * The standard deviation breaks classes based on distance from the mean in standard deviation units.\n * The standard deviation breaks include: < -2 std dev, [-2, -1) std dev, [-1, 0) std dev, [0, 1] std dev, (1, 2] std dev, > 2 std dev\n *\n * ## Characteristics\n * - Centers on the mean value\n * - Classes represent standard deviation intervals\n * - Most appropriate for normally distributed data\n * - Helps identify areas that deviate significantly from the mean\n *\n * @example\n * ```ts\n * import { standardDeviationBreaks } from '@geoda/core';\n *\n * const data = [1, 2, 3, 4, 5, 6, 7, 8, 9];\n * const breaks = await standardDeviationBreaks(data);\n *\n * // breaks = [-0.47722557505166, 2.26138721247417, 5, 7.73861278752583, 10.47722557505166]\n * ```\n *\n * @param data The numeric values to be classified.\n * @returns The breaks values.\n */\nexport async function standardDeviationBreaks(data: number[] | Float32Array): Promise<number[]> {\n  const wasm = await initWASM();\n\n  const n = data.length;\n\n  const wasmUndefs = new wasm.VectorInt();\n  wasmUndefs.resize(n, 0);\n\n  const wasmData = new wasm.VectorDouble();\n  wasmData.resize(n, 0);\n  for (let i = 0; i < n; ++i) {\n    wasmData.set(i, data[i]);\n    if (data[i] === undefined || data[i] === null) {\n      wasmUndefs.set(i, 1);\n    }\n  }\n\n  const result = wasm.standardDeviationBreaks(wasmData, wasmUndefs);\n\n  return vecDoubleToNumber(result);\n}\n", "// SPDX-License-Identifier: MIT\n// Copyright contributors to the geodalib project\n\nexport enum RatesOptions {\n  RawRates = 'Raw Rates',\n  ExcessRisk = 'Excess Risk',\n  EmpiricalBayes = 'Empirical Bayes',\n  SpatialRates = 'Spatial Rates',\n  SpatialEmpiricalBayes = 'Spatial Empirical Bayes',\n  EBRateStandardization = 'EB Rate Standardization',\n}\n\nexport type CalculateRatesProps = {\n  eventValues: number[];\n  baseValues: number[];\n  method: string;\n  neighbors?: number[][];\n};\n\nexport function calculateRates({\n  eventValues,\n  baseValues,\n  method,\n  neighbors,\n}: CalculateRatesProps): number[] {\n  switch (method) {\n    case RatesOptions.RawRates:\n      return rawRates(baseValues, eventValues);\n    case RatesOptions.ExcessRisk:\n      return excessRisk(baseValues, eventValues);\n    case RatesOptions.EmpiricalBayes:\n      return empiricalBayes(baseValues, eventValues);\n    case RatesOptions.SpatialRates:\n      return neighbors ? spatialRates(baseValues, eventValues, neighbors) : [];\n    case RatesOptions.SpatialEmpiricalBayes:\n      return neighbors ? spatialEmpiricalBayes(baseValues, eventValues, neighbors) : [];\n    case RatesOptions.EBRateStandardization:\n      return rateStandardizeEB(baseValues, eventValues);\n    default:\n      return [];\n  }\n}\n\n/**\n * Compute Raw Rate or crude rate (proportion), the simple ratio of the events\n * (number of lung cancer cases) over the population at risk (the county population).\n *\n * @param baseValues The values of base variable.\n * @param eventValues The values of event variable.\n * @returns The rates values.\n */\nexport function rawRates(baseValues: number[], eventValues: number[]): number[] {\n  const n = baseValues.length;\n  const rates = new Array(n).fill(0);\n\n  for (let i = 0; i < n; i++) {\n    if (baseValues[i] > 0) {\n      rates[i] = eventValues[i] / baseValues[i];\n    } else {\n      rates[i] = 0;\n    }\n  }\n  return rates;\n}\n\n/**\n * ## Description\n * Compute excess risk (relative risk), the ratio of the observed rate at a location to some reference rate.\n *\n * The reference risk ($\\bar{\\pi}$) is estimated from the aggregate of all observations as:\n * $\\bar{\\pi} = \\frac{\\sum O_i}{\\sum P_i}$\n * where $O_i$ is the observed number of events and $P_i$ is the population/denominator.\n * This is not a simple average of rates, but rather a population-weighted average\n * that properly assigns the contribution of each area to the overall total.\n *\n * The expected value ($E_i$) for each observation is then calculated as:\n * $E_i = \\bar{\\pi} \\times P_i$\n *\n * The relative risk ($RR_i$) then follows as:\n * $RR_i = \\frac{r_i}{\\bar{\\pi_i}} = \\frac{O_i/P_i}{E_i/P_i} = \\frac{O_i}{E_i}$\n *\n * If an area matches the (regional) reference rate, the corresponding relative risk is one. Values greater\n * than one suggest an excess, whereas values smaller than one suggest a shortfall. The interpretation\n * depends on the context. For example, in disease analysis, a relative risk larger than one would indicate\n * an area where the prevalence of the disease is greater than would be expected. In regional economics,\n * a location quotient greater than one, suggests employment in a sector that exceeds the local needs,\n * implying an export sector.\n *\n * In public health, this ratio is known as standardized mortality rate (SMR).\n * In regional economics, when applied to employment sectors, it's called a location quotient (LQ).\n *\n * @example\n * ```ts\n * import { excessRisk } from '@geoda/core';\n * const baseValues = [100, 200, 300, 400, 500];\n * const eventValues = [10, 20, 30, 40, 50];\n * const rates = excessRisk(baseValues, eventValues);\n * ```\n *\n * @param baseValues The values of base variable.\n * @param eventValues The values of event variable.\n * @returns The rates values.\n */\nexport function excessRisk(baseValues: number[], eventValues: number[]): number[] {\n  const n = baseValues.length;\n  const risks = new Array(n).fill(0);\n\n  // SP = \u2211P_i (sum of base values)\n  // SE = \u2211O_i (sum of event values)\n  let SP = 0;\n  let SE = 0;\n\n  for (let i = 0; i < n; i++) {\n    SP += baseValues[i];\n    SE += eventValues[i];\n  }\n\n  // lambda = \u03C0\u0304 = SE/SP = \u2211O_i/\u2211P_i\n  let lambda = 1;\n  if (SP > 0) {\n    lambda = SE / SP;\n  }\n\n  for (let i = 0; i < n; i++) {\n    // eHat = E_i = \u03C0\u0304 \u00D7 P_i\n    const eHat = baseValues[i] * lambda;\n    if (eHat > 0) {\n      // risks[i] = RR_i = O_i/E_i\n      risks[i] = eventValues[i] / eHat;\n    } else {\n      risks[i] = 0;\n    }\n  }\n\n  return risks;\n}\n\n/**\n * ## Description\n * Compute the empirical Bayes smoothed rates using the Poisson-Gamma model.\n *\n * The EB estimate for risk in location i is:\n * $\\pi_i^{EB} = w_i \\cdot r_i + (1 - w_i) \\cdot \\theta$\n *\n * where:\n * - $r_i$ is the crude (raw) rate\n * - $\\theta$ is the reference rate (prior mean)\n * - $w_i$ is the weight calculated as: $w_i = \\sigma^2/(\\sigma^2 + \\mu/P_i)$\n * - $P_i$ is the population at risk in area i\n * - $\\mu$ and $\\sigma^2$ are the mean and variance of the prior distribution\n *\n * The method:\n * 1. Estimates $\\theta$ (theta1) as the reference rate: $\\sum O_i/\\sum P_i$\n * 2. Estimates $\\sigma^2$ (theta2) using the formula: $(\\sum P_i(r_i - \\mu)^2/\\sum P_i) - \\mu/(\\sum P_i/n)$\n * 3. If $\\sigma^2$ is negative, sets it to 0 (conventional approach)\n * 4. Computes weights and final smoothed rates\n *\n * Small areas (with small population at risk) will have their rates adjusted considerably,\n * while larger areas will see minimal changes.\n *\n * @param baseValues The values of base variable (P_i, population at risk).\n * @param eventValues The values of event variable (O_i, observed events).\n * @returns The empirical Bayes smoothed rates.\n */\nexport function empiricalBayes(baseValues: number[], eventValues: number[]): number[] {\n  const n = baseValues.length;\n  const results = new Array(n).fill(0);\n  const piRaw = new Array(n).fill(0);\n  let SP = 0; // Sum of populations (\u2211P_i)\n  let SE = 0; // Sum of events (\u2211O_i)\n\n  // Calculate raw rates (r_i) and sums\n  for (let i = 0; i < n; i++) {\n    SP += baseValues[i];\n    SE += eventValues[i];\n    if (baseValues[i] > 0) {\n      piRaw[i] = eventValues[i] / baseValues[i]; // r_i = O_i/P_i\n    }\n  }\n\n  // Calculate theta1 (\u03B8) - the reference rate (prior mean \u03BC)\n  const theta1 = SP > 0 ? SE / SP : 1;\n  const pBar = SP / n; // Average population\n\n  // Calculate components for variance estimation\n  let q1 = 0;\n  let w = 0;\n\n  // Calculate sum of squared deviations weighted by population\n  for (let i = 0; i < n; i++) {\n    q1 += Math.pow(piRaw[i] - theta1, 2) * baseValues[i];\n  }\n\n  // Calculate theta2 (\u03C3\u00B2) - the variance estimate\n  // Formula: \u03C3\u00B2 = (\u2211P_i(r_i - \u03BC)\u00B2/\u2211P_i) - \u03BC/(\u2211P_i/n)\n  let theta2 = q1 / SP - theta1 / pBar;\n\n  // Convention: set negative variance to zero\n  if (theta2 < 0) {\n    theta2 = 0;\n  }\n\n  // Calculate final smoothed rates using weights\n  for (let i = 0; i < n; i++) {\n    q1 = theta2 + theta1 / baseValues[i]; // \u03C3\u00B2 + \u03BC/P_i\n    w = q1 > 0 ? theta2 / q1 : 1; // w_i = \u03C3\u00B2/(\u03C3\u00B2 + \u03BC/P_i)\n    // Final smoothed rate: \u03C0_i^EB = w_i * r_i + (1 - w_i) * \u03B8\n    results[i] = w * piRaw[i] + (1 - w) * theta1;\n  }\n\n  return results;\n}\n\n/**\n * ## Description\n * Compute the spatial empirical Bayes smoothed rates using a local reference rate for each observation.\n *\n * For each location i, the reference mean ($\\mu_i$) is computed from its spatial window as:\n * $$\\mu_i = \\frac{\\sum_j w_{ij}O_j}{\\sum_j w_{ij}P_j}$$\n *\n * The local prior variance ($\\sigma^2_i$) is estimated as:\n * $$\\sigma^2_i = \\frac{\\sum_j w_{ij}P_j(r_j - \\mu_i)^2}{\\sum_j w_{ij}P_j} - \\frac{\\mu_i}{\\sum_j w_{ij}P_i/(k_i + 1)}$$\n *\n * where:\n * - $w_{ij}$ are binary spatial weights (1 for neighbors, 0 otherwise)\n * - $O_j$ are observed events in area j\n * - $P_j$ are populations at risk in area j\n * - $r_j$ are crude rates in area j\n * - $k_i$ is the number of neighbors of area i\n *\n * Key differences from standard EB:\n * 1. Uses a local reference rate specific to each observation's spatial window\n * 2. Requires sufficient observations in the reference window for effective smoothing\n * 3. Block weights are useful to avoid irregularity in neighbor counts\n *\n * Note: If the estimated variance is negative, it is set to zero as in standard EB.\n *\n * @param baseValues The values of base variable (populations at risk, $P_i$).\n * @param eventValues The values of event variable (observed events, $O_i$).\n * @param neighbors The list of neighbors for each location.\n * @returns The spatial empirical Bayes smoothed rates.\n */\nexport function spatialEmpiricalBayes(\n  baseValues: number[],\n  eventValues: number[],\n  neighbors: number[][]\n): number[] {\n  const n = baseValues.length;\n  const results = new Array(n).fill(0);\n  const piRaw = new Array(n).fill(0);\n\n  for (let i = 0; i < n; i++) {\n    piRaw[i] = baseValues[i] > 0 ? eventValues[i] / baseValues[i] : 1;\n  }\n\n  for (let i = 0; i < n; i++) {\n    let SP = baseValues[i];\n    let SE = eventValues[i];\n    const nn = neighbors[i];\n\n    for (let j = 0; j < nn.length; j++) {\n      SP += baseValues[nn[j]];\n      SE += eventValues[nn[j]];\n    }\n\n    const theta1 = SP > 0 ? SE / SP : 1;\n\n    if (nn.length > 0) {\n      const pBar = SP / (nn.length + 1);\n      let q1 = Math.pow(piRaw[i] - theta1, 2) * baseValues[i];\n\n      for (let j = 0; j < nn.length; j++) {\n        q1 += Math.pow(piRaw[nn[j]] - theta1, 2) * baseValues[nn[j]];\n      }\n\n      let theta2 = q1 / SP - theta1 / pBar;\n\n      if (theta2 < 0) {\n        theta2 = 0;\n      }\n\n      q1 = theta2 + theta1 / baseValues[i];\n      const w = q1 > 0 ? theta2 / q1 : 1;\n      results[i] = w * piRaw[i] + (1 - w) * theta1;\n    }\n  }\n\n  return results;\n}\n\n/**\n * Compute the spatial rates, which is the ratio of the events (number of lung cancer cases)\n * over the population at risk (the county population) and its neighbors.\n *\n * @param baseValues The values of base variable.\n * @param eventValues The values of event variable.\n * @param neighbors The list of neighbors for each value.\n * @returns The rates values.\n */\nexport function spatialRates(\n  baseValues: number[],\n  eventValues: number[],\n  neighbors: number[][]\n): number[] {\n  const n = baseValues.length;\n  const rates = new Array(n).fill(0);\n\n  for (let i = 0; i < n; i++) {\n    let SP = baseValues[i];\n    let SE = eventValues[i];\n    const nn = neighbors[i];\n\n    for (let j = 0; j < nn.length; j++) {\n      SP += baseValues[nn[j]];\n      SE += eventValues[nn[j]];\n    }\n\n    if (baseValues[i] + SP > 0) {\n      rates[i] = (eventValues[i] + SE) / (baseValues[i] + SP);\n    }\n  }\n\n  return rates;\n}\n\nexport function rateStandardizeEB(baseValues: number[], eventValues: number[]): number[] {\n  const n = baseValues.length;\n  const results = new Array(n).fill(0);\n  const piRaw = new Array(n).fill(0);\n  let SP = 0;\n  let SE = 0;\n\n  // compute pi, the rate i, and the pop. rate b_hat\n  for (let i = 0; i < n; i++) {\n    SP += baseValues[i];\n    SE += eventValues[i];\n    if (baseValues[i] > 0) {\n      piRaw[i] = eventValues[i] / baseValues[i];\n    }\n  }\n\n  if (SP === 0) {\n    return results;\n  }\n\n  const bHat = SE / SP;\n\n  // compute a_hat, the variance\n  let gamma = 0;\n  for (let i = 0; i < n; i++) {\n    gamma += Math.pow(piRaw[i] - bHat, 2) * baseValues[i];\n  }\n\n  const a = gamma / SP - bHat / (SP / n);\n  const aHat = a > 0 ? a : 0;\n\n  for (let i = 0; i < n; i++) {\n    const se = baseValues[i] > 0 ? Math.sqrt(aHat + bHat / baseValues[i]) : 0;\n    results[i] = se > 0 ? (piRaw[i] - bHat) / se : 0;\n  }\n\n  return results;\n}\n", "// SPDX-License-Identifier: MIT\n// Copyright contributors to the geodalib project\n\n/**\n * Check if a value is a valid number\n * @param val - The value to check\n * @returns True if the value is a valid number, false otherwise\n */\nexport function isValidNumber(val: unknown): boolean {\n  return typeof val === 'number' && isFinite(val);\n}\n", "// SPDX-License-Identifier: MIT\n// Copyright contributors to the geodalib project\n\nimport { initWASM } from '../init';\nimport { vecDoubleToNumber } from '@geoda/common';\nimport { isValidNumber } from '../utils/validation';\n\n/**\n * Calculate the deviation from the mean.\n *\n * Note: The deviation from the mean is the difference between the mean and the data point.\n *\n * @param data - The data to calculate the deviation from the mean\n * @returns The deviation from the mean\n *\n * @example\n * ```ts\n * const data = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];\n * const deviation = await deviationFromMean(data);\n * console.log(deviation);\n * ```\n */\nexport async function deviationFromMean(data: number[] | Float32Array): Promise<number[]> {\n  const wasm = await initWASM();\n\n  const n = data.length;\n\n  // Handle empty array\n  if (n === 0) {\n    return [];\n  }\n\n  const wasmUndefs = new wasm.VectorUInt();\n  wasmUndefs.resize(n, 0);\n\n  const wasmData = new wasm.VectorDouble();\n  wasmData.resize(n, 0);\n\n  let validCount = 0;\n  for (let i = 0; i < n; ++i) {\n    if (!isValidNumber(data[i])) {\n      wasmUndefs.set(i, 1);\n      wasmData.set(i, 0);\n    } else {\n      wasmData.set(i, data[i]);\n      validCount++;\n    }\n  }\n\n  // If no valid values, return original array unchanged\n  if (validCount === 0) {\n    return Array.from(data);\n  }\n\n  const result = wasm.deviationFromMean(wasmData, wasmUndefs);\n  const resultArray = vecDoubleToNumber(result);\n\n  // assign invalid result to original value\n  for (let i = 0; i < n; ++i) {\n    if (wasmUndefs.get(i) === 1) {\n      resultArray[i] = data[i];\n    }\n  }\n\n  return resultArray;\n}\n", "// SPDX-License-Identifier: MIT\n// Copyright contributors to the geodalib project\n\nimport { initWASM } from '../init';\nimport { vecDoubleToNumber } from '@geoda/common';\nimport { isValidNumber } from '../utils/validation';\n\n/**\n * Standardizes data using Mean Absolute Deviation (MAD) normalization.\n *\n * For each valid data point, applies the transformation: (x - mean) / mad\n *\n * @example\n * ```ts\n * const data = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];\n * const standardized = await standardizeMAD(data);\n * console.log(standardized);\n * ```\n * @param data The numeric values to be standardized\n * @returns The standardized data using MAD normalization\n */\nexport async function standardizeMAD(data: number[] | Float32Array): Promise<number[]> {\n  const wasm = await initWASM();\n\n  const n = data.length;\n\n  // Handle empty array\n  if (n === 0) {\n    return [];\n  }\n\n  const wasmUndefs = new wasm.VectorUInt();\n  wasmUndefs.resize(n, 0);\n\n  const wasmData = new wasm.VectorDouble();\n  wasmData.resize(n, 0);\n\n  let validCount = 0;\n  for (let i = 0; i < n; ++i) {\n    if (!isValidNumber(data[i])) {\n      wasmUndefs.set(i, 1);\n      wasmData.set(i, 0);\n    } else {\n      wasmData.set(i, data[i]);\n      validCount++;\n    }\n  }\n\n  // If no valid values, return original array unchanged\n  if (validCount === 0) {\n    return Array.from(data);\n  }\n\n  // If only one valid value, MAD would be 0, so return original array unchanged\n  if (validCount === 1) {\n    return Array.from(data);\n  }\n\n  const result = wasm.standardizeMAD(wasmData, wasmUndefs);\n  const resultArray = vecDoubleToNumber(result);\n\n  // assign invalid result to original value\n  for (let i = 0; i < n; ++i) {\n    if (wasmUndefs.get(i) === 1) {\n      resultArray[i] = data[i];\n    }\n  }\n\n  return resultArray;\n}\n", "// SPDX-License-Identifier: MIT\n// Copyright contributors to the geodalib project\n\nimport { initWASM } from '../init';\nimport { vecDoubleToNumber } from '@geoda/common';\nimport { isValidNumber } from '../utils/validation';\n\n/**\n * Adjusts the range of data to [0, 1] by subtracting the minimum value\n * and dividing by the range (max - min).\n *\n * @example\n * ```ts\n * const data = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];\n * const adjusted = await rangeAdjust(data);\n * console.log(adjusted);\n * ```\n *\n * @param data The numeric values to be range adjusted\n * @returns The range adjusted data scaled to [0, 1]\n */\nexport async function rangeAdjust(data: number[] | Float32Array): Promise<number[]> {\n  const wasm = await initWASM();\n\n  const n = data.length;\n\n  // Handle empty array\n  if (n === 0) {\n    return [];\n  }\n\n  const wasmUndefs = new wasm.VectorUInt();\n  wasmUndefs.resize(n, 0);\n\n  const wasmData = new wasm.VectorDouble();\n  wasmData.resize(n, 0);\n\n  let validCount = 0;\n  for (let i = 0; i < n; ++i) {\n    if (!isValidNumber(data[i])) {\n      wasmUndefs.set(i, 1);\n      wasmData.set(i, 0);\n    } else {\n      wasmData.set(i, data[i]);\n      validCount++;\n    }\n  }\n\n  // If no valid values, return original array unchanged\n  if (validCount === 0) {\n    return Array.from(data);\n  }\n\n  const result = wasm.rangeAdjust(wasmData, wasmUndefs);\n  const resultArray = vecDoubleToNumber(result);\n\n  // assign invalid result to original value\n  for (let i = 0; i < n; ++i) {\n    if (wasmUndefs.get(i) === 1) {\n      resultArray[i] = data[i];\n    }\n  }\n\n  return resultArray;\n}\n", "// SPDX-License-Identifier: MIT\n// Copyright contributors to the geodalib project\n\nimport { initWASM } from '../init';\nimport { vecDoubleToNumber } from '@geoda/common';\nimport { isValidNumber } from '../utils/validation';\n\n/**\n * Standardizes the range of data to [0, 1] by subtracting the minimum value\n * and dividing by the range (max - min).\n *\n * @example\n * ```ts\n * const data = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];\n * const standardized = await rangeStandardize(data);\n * console.log(standardized);\n * ```\n *\n * @param data The numeric values to be range standardized\n * @returns The range standardized data scaled to [0, 1]\n */\nexport async function rangeStandardize(data: number[] | Float32Array): Promise<number[]> {\n  const wasm = await initWASM();\n\n  const n = data.length;\n\n  // Handle empty array\n  if (n === 0) {\n    return [];\n  }\n\n  const wasmUndefs = new wasm.VectorUInt();\n  wasmUndefs.resize(n, 0);\n\n  const wasmData = new wasm.VectorDouble();\n  wasmData.resize(n, 0);\n\n  let validCount = 0;\n  for (let i = 0; i < n; ++i) {\n    if (!isValidNumber(data[i])) {\n      wasmUndefs.set(i, 1);\n      wasmData.set(i, 0);\n    } else {\n      wasmData.set(i, data[i]);\n      validCount++;\n    }\n  }\n\n  // If no valid values, return original array unchanged\n  if (validCount === 0) {\n    return Array.from(data);\n  }\n\n  const result = wasm.rangeStandardize(wasmData, wasmUndefs);\n  const resultArray = vecDoubleToNumber(result);\n\n  // assign invalid result to original value\n  for (let i = 0; i < n; ++i) {\n    if (wasmUndefs.get(i) === 1) {\n      resultArray[i] = data[i];\n    }\n  }\n\n  return resultArray;\n}\n", "// SPDX-License-Identifier: MIT\n// Copyright contributors to the geodalib project\n\nimport { initWASM } from '../init';\nimport { vecDoubleToNumber } from '@geoda/common';\nimport { isValidNumber } from '../utils/validation';\n\n/**\n * Standardizes data using z-score normalization.\n * For each valid data point, applies the transformation: (x - mean) / stddev\n *\n * @example\n * ```ts\n * const data = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];\n * const standardized = await standardize(data);\n * console.log(standardized);\n * ```\n *\n * @param data The numeric values to be standardized\n * @returns The standardized data using z-score normalization\n */\nexport async function standardize(data: number[] | Float32Array): Promise<number[]> {\n  const wasm = await initWASM();\n\n  const n = data.length;\n\n  // Handle empty array\n  if (n === 0) {\n    return [];\n  }\n\n  const wasmUndefs = new wasm.VectorUInt();\n  wasmUndefs.resize(n, 0);\n\n  const wasmData = new wasm.VectorDouble();\n  wasmData.resize(n, 0);\n\n  let validCount = 0;\n  for (let i = 0; i < n; ++i) {\n    if (!isValidNumber(data[i])) {\n      wasmUndefs.set(i, 1);\n      wasmData.set(i, 0);\n    } else {\n      wasmData.set(i, data[i]);\n      validCount++;\n    }\n  }\n\n  // If no valid values, return original array unchanged\n  if (validCount === 0) {\n    return Array.from(data);\n  }\n\n  const result = wasm.standardize(wasmData, wasmUndefs);\n  const resultArray = vecDoubleToNumber(result);\n\n  // assign invalid result to original value\n  for (let i = 0; i < n; ++i) {\n    if (wasmUndefs.get(i) === 1) {\n      resultArray[i] = data[i];\n    }\n  }\n\n  return resultArray;\n}\n"],
  "mappings": "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",
  "names": ["require_wasm", "__commonJSMin", "exports", "module", "geoda", "_a", "_b", "_scriptName", "moduleArg", "_c", "moduleRtn", "Module", "ENVIRONMENT_IS_WEB", "ENVIRONMENT_IS_WORKER", "ENVIRONMENT_IS_NODE", "arguments_", "thisProgram", "quit_", "status", "toThrow", "scriptDirectory", "locateFile", "path", "readAsync", "readBinary", "fs", "filename", "isFileURI", "ret", "binary", "url", "xhr", "resolve", "reject", "response", "out", "err", "wasmBinary", "ABORT", "readyPromiseResolve", "readyPromiseReject", "HEAP8", "HEAPU8", "HEAP16", "HEAPU16", "HEAP32", "HEAPU32", "HEAPF32", "HEAPF64", "runtimeInitialized", "updateMemoryViews", "b", "wasmMemory", "preRun", "addOnPreRun", "callRuntimeCallbacks", "onPreRuns", "initRuntime", "wasmExports", "postRun", "addOnPostRun", "onPostRuns", "abort", "what", "e", "wasmBinaryFile", "findWasmBinary", "getBinarySync", "file", "getWasmBinary", "binaryFile", "instantiateArrayBuffer", "imports", "instance", "reason", "instantiateAsync", "instantiationResult", "getWasmImports", "wasmImports", "createWasm", "receiveInstance", "applySignatureConversions", "assignWasmExports", "receiveInstantiationResult", "result", "info", "inst", "mod", "ExitStatus", "__publicField", "callbacks", "cb", "noExitRuntime", "exceptionCaught", "exceptionLast", "uncaughtExceptionCount", "___cxa_rethrow", "ptr", "ExceptionInfo", "excPtr", "type", "destructor", "caught", "rethrown", "adjustedPtr", "convertI32PairToI53Checked", "lo", "hi", "___cxa_throw", "__abort_js", "__embind_register_bigint", "primitiveType", "name", "size", "minRange", "maxRange", "AsciiToString", "str", "ch", "awaitingDependencies", "registeredTypes", "typeDependencies", "BindingError", "message", "throwBindingError", "sharedRegisterType", "rawType", "registeredInstance", "options", "registerType", "__embind_register_bool", "trueValue", "falseValue", "wt", "destructors", "o", "pointer", "shallowCopyInternalPointer", "throwInstanceAlreadyDeleted", "obj", "getInstanceTypeName", "handle", "finalizationRegistry", "detachFinalizer", "runDestructor", "$$", "releaseClassHandle", "toDelete", "attachFinalizer", "hasSmartPtr", "deletionQueue", "flushPendingDeletes", "delayFunction", "init_ClassHandle", "proto", "ClassHandle", "other", "leftClass", "left", "rightClass", "right", "clone", "symbolDispose", "createNamedFunction", "func", "registeredPointers", "ensureOverloadTable", "methodName", "humanName", "prevFunc", "args", "exposePublicSymbol", "value", "numArguments", "char_0", "char_9", "makeLegalFunctionName", "f", "RegisteredClass", "constructor", "instancePrototype", "rawDestructor", "baseClass", "getActualType", "upcast", "downcast", "upcastPointer", "ptrClass", "desiredClass", "embindRepr", "v", "constNoSmartPtrRawPointerToWireType", "handleClass", "genericPointerToWireType", "clonedHandle", "Emval", "nonConstNoSmartPtrRawPointerToWireType", "readPointer", "downcastPointer", "rv", "registeredInstances", "getBasestPointer", "class_", "getInheritedInstance", "InternalError", "throwInternalError", "makeClassHandle", "prototype", "record", "hasSmartPtrType", "RegisteredPointer_fromWireType", "rawPointer", "makeDefaultHandle", "actualType", "registeredPointerRecord", "toType", "dp", "init_RegisteredPointer", "RegisteredPointer", "registeredClass", "isReference", "isConst", "isSmartPointer", "pointeeType", "sharingPolicy", "rawGetPointee", "rawConstructor", "rawShare", "replacePublicSymbol", "dynCalls", "dynCallLegacy", "sig", "wasmTableMirror", "getWasmTableEntry", "funcPtr", "wasmTable", "dynCall", "promising", "rtn", "convert", "getDynCaller", "embind__requireFunction", "signature", "rawFunction", "isAsync", "makeDynCaller", "fp", "UnboundTypeError", "getTypeName", "___getTypeName", "_free", "throwUnboundTypeError", "types", "unboundTypes", "seen", "visit", "whenDependentTypesAreResolved", "myTypes", "dependentTypes", "getTypeConverters", "onComplete", "typeConverters", "myTypeConverters", "i", "unregisteredTypes", "registered", "dt", "__embind_register_class", "rawPointerType", "rawConstPointerType", "baseClassRawType", "getActualTypeSignature", "upcastSignature", "downcastSignature", "destructorSignature", "legalFunctionName", "base", "basePrototype", "body", "referenceConverter", "pointerConverter", "constPointerConverter", "heap32VectorToArray", "count", "firstElement", "array", "runDestructors", "del", "usesDestructorStack", "argTypes", "createJsInvoker", "isClassMethodFunc", "returns", "needsDestructorStack", "argCount", "argsList", "argsListWired", "invokerFnBody", "dtorStack", "args1", "argName", "paramName", "craftInvokerFunction", "classType", "cppInvokerFunc", "cppTargetFunc", "retType", "instType", "closureArgs", "argType", "invokerFn", "__embind_register_class_constructor", "rawClassType", "rawArgTypesAddr", "invokerSignature", "invoker", "rawArgTypes", "getFunctionName", "argsIndex", "__embind_register_class_function", "rawInvoker", "context", "isPureVirtual", "isNonnullReturn", "unboundTypesHandler", "method", "memberFunction", "validateThis", "this_", "__embind_register_class_property", "fieldName", "getterReturnType", "getterSignature", "getter", "getterContext", "setterArgumentType", "setterSignature", "setter", "setterContext", "desc", "emval_freelist", "emval_handles", "__emval_decref", "EmValType", "__embind_register_emval", "floatReadValueFromPointer", "width", "__embind_register_float", "__embind_register_function", "fn", "invokerArgsArray", "integerReadValueFromPointer", "signed", "__embind_register_integer", "isUnsignedType", "fromWireType", "bitshift", "__embind_register_memory_view", "dataTypeIndex", "typeMapping", "TA", "decodeMemoryView", "data", "EmValOptionalType", "__embind_register_optional", "rawOptionalType", "stringToUTF8Array", "heap", "outIdx", "maxBytesToWrite", "startIdx", "endIdx", "u", "stringToUTF8", "outPtr", "lengthBytesUTF8", "len", "c", "UTF8Decoder", "findStringEnd", "heapOrArray", "idx", "maxBytesToRead", "ignoreNul", "maxIdx", "UTF8ArrayToString", "endPtr", "u0", "u1", "u2", "UTF8ToString", "__embind_register_std_string", "stdStringIsUTF8", "length", "payload", "valueIsOfTypeString", "_malloc", "charCode", "UTF16Decoder", "UTF16ToString", "codeUnit", "stringToUTF16", "startPtr", "numCharsToWrite", "lengthBytesUTF16", "UTF32ToString", "utf32", "stringToUTF32", "codePoint", "lengthBytesUTF32", "__embind_register_std_wstring", "charSize", "decodeString", "encodeString", "lengthBytesUTF", "__embind_register_void", "emval_methodCallers", "emval_addMethodCaller", "caller", "id", "requireRegisteredType", "impl", "emval_lookupTypes", "a", "emval_returnValue", "toReturnWire", "destructorsRef", "emval_symbols", "getStringOrSymbol", "address", "symbol", "__emval_create_invoker", "argTypesPtr", "kind", "GenericWireTypeSize", "argFromPtr", "captures", "captureName", "functionBody", "invokerFunction", "functionName", "t", "__emval_invoke", "__emval_run_destructors", "__tzset_js", "timezone", "daylight", "std_name", "dst_name", "currentYear", "winter", "summer", "winterOffset", "summerOffset", "stdTimezoneOffset", "extractZone", "timezoneOffset", "sign", "absOffset", "hours", "minutes", "winterName", "summerName", "getHeapMax", "alignMemory", "alignment", "growMemory", "oldHeapSize", "pages", "_emscripten_resize_heap", "requestedSize", "oldSize", "maxHeapSize", "cutDown", "overGrownHeapSize", "newSize", "replacement", "ENV", "getExecutableName", "getEnvStrings", "lang", "env", "x", "strings", "_environ_get", "__environ", "environ_buf", "bufSize", "envp", "string", "_environ_sizes_get", "penviron_count", "penviron_buf_size", "_fd_close", "fd", "_fd_read", "iov", "iovcnt", "pnum", "_fd_seek", "offset_low", "offset_high", "whence", "newOffset", "offset", "printCharBuffers", "printChar", "stream", "curr", "buffer", "_fd_write", "num", "j", "dynCall_vij", "dynCall_viiji", "dynCall_viijii", "dynCall_jiji", "dynCall_iiiiij", "dynCall_iiiiijj", "dynCall_iiiiiijj", "memory", "__indirect_function_table", "makeWrapper_pp", "a0", "makeWrapper_p", "run", "doRun", "src_exports", "__export", "CheckGeometryType", "RatesOptions", "SpatialJoinGeometryType", "azpGreedy", "azpSA", "azpTabu", "calculateRates", "createLineCollectionFromBinaryFeatures", "createPointCollectionFromBinaryFeatures", "createPolygonCollectionFromBinaryFeatures", "createWeights", "deviationFromMean", "empiricalBayes", "equalIntervalBreaks", "excessRisk", "getArea", "getBuffers", "getCartogram", "getCentroids", "getContiguityNeighborsFromBinaryGeometries", "getContiguityNeighborsFromGeomCollection", "getDistanceNeighborsFromBinaryGeometries", "getDistanceNeighborsFromGeomCollection", "getDistanceThresholds", "getGeometryCollection", "getGeometryCollectionFromArcLayerData", "getGeometryCollectionFromBinaryGeometries", "getGeometryCollectionFromGeoJsonFeatures", "getGeometryCollectionFromPointLayerData", "getKernelKnnWeightsFromBinaryGeometries", "getKernelKnnWeightsFromGeomCollection", "getKernelWeightsFromBinaryGeometries", "getKernelWeightsFromGeomCollection", "getLength", "getLineCollection", "getMetaFromWeights", "getMinimumSpanningTree", "getNearestNeighborsFromBinaryGeometries", "getNearestNeighborsFromGeomCollection", "getNeighborMatchTestFromBinaryGeometries", "getNeighborMatchTestFromGeomCollection", "getPerimeter", "getPointCollection", "getPointCollectionFromLatLng", "getPolygonCollection", "getThiessenPolygons", "hinge15Breaks", "hinge30Breaks", "initWASM", "isArcLayerData", "isBinaryFeatureCollection", "isGeoJsonFeature", "isHexagonIdLayerData", "isPointLayerData", "lineToFeature", "makeSpatial", "maxpGreedy", "maxpSA", "maxpTabu", "naturalBreaks", "percentileBreaks", "polygonToFeature", "quantileBreaks", "queenWeights", "rangeAdjust", "rangeStandardize", "rateStandardizeEB", "rawRates", "redcap", "resetWASM", "rookWeights", "schc", "setDeliveryWASM", "skater", "spatialDissolve", "spatialEmpiricalBayes", "spatialJoin", "spatialJoinGeometryCollection", "spatialRates", "spatialValidation", "standardDeviationBreaks", "standardize", "standardizeMAD", "__toCommonJS", "WASMManager", "wasmModule", "wasmUrl", "publicWASMUrl", "createWASMManager", "mileToMeters", "DistanceUnit", "lengthToMeters", "distance", "unit", "mileToMeters", "vecDoubleToNumber", "data", "result", "n", "i", "VERSION", "import_wasm", "import_path", "wasmManager", "A", "wasmModule", "isNode", "q", "wasmUrl", "setDeliveryWASM", "wasmURL", "initWASM", "resetWASM", "getGeometryCollectionFromBinaryGeometries", "geometryType", "binaryFeaturesChunks", "wasm", "fixPolygon", "convertToUTM", "pointsArray", "chunk", "createPointCollectionFromBinaryFeatures", "linesArray", "createLineCollectionFromBinaryFeatures", "polygonsArray", "createPolygonCollectionFromBinaryFeatures", "xs", "ys", "parts", "sizes", "pointOffset", "chunkIndex", "points", "coords", "i", "chunkStart", "index", "lastStartPointIndex", "lineIndex", "lines", "geomOffsets", "numParts", "startPointIndex", "holes", "lastPrimitiveIndex", "polygons", "polygonIndices", "primitivePolygonIndices", "primitiveIndex", "startIdx", "endIdx", "getDistanceNeighborsFromBinaryGeometries", "distanceThreshold", "isMile", "binaryGeometryType", "binaryGeometries", "wasmInstance", "initWASM", "geomCollection", "getGeometryCollectionFromBinaryGeometries", "getDistanceNeighborsFromGeomCollection", "neighbors", "result", "i", "nbrs", "nbrIndices", "j", "nbrSize", "getDistanceThresholds", "thresValues", "vecVecDoubleToNumber", "v", "rows", "i", "F", "getNeighborMatchTestFromBinaryGeometries", "k", "data", "scaleMethod", "distType", "isMile", "binaryGeometryType", "binaryGeometries", "_a", "_b", "wasmInstance", "initWASM", "geomCollection", "getGeometryCollectionFromBinaryGeometries", "n", "varData", "wasmData", "wasmVar", "result", "getNeighborMatchTestFromGeomCollection", "getKernelKnnWeightsFromBinaryGeometries", "k", "kernel", "isMile", "useKernelDiagonals", "power", "adaptiveBandwidth", "isInverse", "binaryGeometryType", "binaryGeometries", "wasmInstance", "initWASM", "geomCollection", "getGeometryCollectionFromBinaryGeometries", "getKernelKnnWeightsFromGeomCollection", "weights", "result", "i", "row", "rowValues", "j", "rowSize", "SUPPORTED_KERNELS", "validateKernelWeightsInput", "bandwidth", "kernel", "power", "normalizedKernel", "getKernelWeightsFromBinaryGeometries", "isMile", "useKernelDiagonals", "binaryGeometryType", "binaryGeometries", "wasmInstance", "initWASM", "geomCollection", "getGeometryCollectionFromBinaryGeometries", "getKernelWeightsFromGeomCollection", "weights", "result", "i", "row", "rowValues", "j", "rowSize", "getNearestNeighborsFromBinaryGeometries", "k", "binaryGeometryType", "binaryGeometries", "wasmInstance", "initWASM", "geomCollection", "getGeometryCollectionFromBinaryGeometries", "getNearestNeighborsFromGeomCollection", "neighbors", "result", "i", "nbrs", "nbrIndices", "j", "nbrSize", "getMetaFromWeights", "weights", "isDistanceWeights", "n", "minNeighbors", "maxNeighbors", "meanNeighbors", "medianNeighbors", "sumofNeighbors", "pctNoneZero", "i", "len", "w", "a", "getGeometryCollectionFromGeoJsonFeatures", "features", "wasm", "fixPolygon", "convertToUTM", "getPolygonCollection", "getLineCollection", "getPointCollection", "ptIndex", "xs", "ys", "parts", "holes", "sizes", "processPolygonRing", "polygon", "numParts", "j", "m", "ring", "k", "npts", "pt", "i", "n", "feat", "poly", "handleLineSegment", "lineSeg", "validLine", "handlePoint", "point", "isValid", "getPointCollectionFromLatLng", "lat", "lng", "start", "end", "getGeometryCollectionFromPointLayerData", "pointLayerData", "wasm", "convertToUTM", "xs", "ys", "parts", "sizes", "i", "n", "point", "getGeometryCollectionFromArcLayerData", "arcLayerData", "arc", "isGeoJsonFeature", "geometry", "isBinaryFeatureCollection", "isPointLayerData", "isArcLayerData", "isHexagonIdLayerData", "SpatialJoinGeometryType", "CheckGeometryType", "geometries", "first", "getBinaryGeometryType", "_a", "_b", "_c", "_d", "_e", "_f", "_g", "_h", "getGeometryCollection", "fixPolygon", "convertToUTM", "wasmInstance", "initWASM", "binaryGeometryType", "getGeometryCollectionFromBinaryGeometries", "getGeometryCollectionFromGeoJsonFeatures", "getGeometryCollectionFromArcLayerData", "getGeometryCollectionFromPointLayerData", "polygonToFeature", "polygon", "xs", "ys", "parts", "holes", "numPoints", "numParts", "numExtRings", "i", "multiPoly", "polyIndex", "ring", "start", "end", "j", "coordinates", "lineToFeature", "line", "lineCoords", "createWeightsUtil", "wasmInstance", "geomCollection", "pointWeights", "isQueen", "precisionThreshold", "orderOfContiguity", "includeLowerOrder", "neighbors", "result", "i", "nbrs", "nbrIndices", "j", "nbrSize", "getContiguityNeighborsFromGeomCollection", "useCentroids", "initWASM", "getContiguityNeighborsFromBinaryGeometries", "binaryGeometryType", "binaryGeometries", "getGeometryCollectionFromBinaryGeometries", "queenWeights", "geometries", "getGeometryCollection", "geometryType", "getMetaFromWeights", "rookWeights", "createWeights", "weightsType", "k", "isQueen", "distanceThreshold", "isMile", "bandwidth", "kernel", "useKernelDiagonals", "power", "useCentroids", "precisionThreshold", "orderOfContiguity", "includeLowerOrder", "geometries", "geomCollection", "getGeometryCollection", "weights", "weightsMeta", "getContiguityNeighborsFromGeomCollection", "__spreadProps", "__spreadValues", "getMetaFromWeights", "getNearestNeighborsFromGeomCollection", "getDistanceNeighborsFromGeomCollection", "kernelBandwidth", "kernelName", "getKernelWeightsFromGeomCollection", "getArea", "geoms", "distanceUnit", "initWASM", "geometryCollection", "getGeometryCollection", "size", "promises", "_", "i", "areaInMeter", "N", "getLength", "lengthInMeter", "getPerimeter", "perimeterInMeter", "getBuffers", "geoms", "bufferDistance", "distanceUnit", "pointsPerCircle", "initWASM", "convertToUTM", "fixPolygon", "dist", "E", "geometryCollection", "getGeometryCollection", "result", "i", "buffer", "polygonToFeature", "getCentroids", "geoms", "_a", "_b", "initWASM", "centroids", "getGeometryCollection", "result", "i", "n", "spatialDissolve", "polys", "wasm", "initWASM", "geometryCollection", "getGeometryCollection", "polygon", "polygonToFeature", "spatialJoin", "leftGeometries", "rightGeometries", "leftGeomCollection", "getGeometryCollection", "rightGeomCollection", "spatialJoinGeometryCollection", "error", "result", "joinIndexes", "initWASM", "i", "joinIndex", "resultRow", "j", "getThiessenPolygons", "geoms", "wasm", "initWASM", "centroids", "getGeometryCollection", "x", "y", "i", "centroid", "thiessenPolygons", "result", "polygon", "polygonToFeature", "getMinimumSpanningTree", "geoms", "wasm", "initWASM", "centroids", "getGeometryCollection", "x", "y", "i", "centroid", "weights", "mst", "result", "line", "feature", "lineToFeature", "getCartogram", "geoms", "values", "iterations", "numberOfPointsPerCircle", "wasm", "initWASM", "valuesVec", "i", "geometryCollection", "getGeometryCollection", "result", "circles", "x", "y", "radius", "features", "polygon", "feature", "polygonToFeature", "schc", "k", "data", "neighbors", "scaleMethod", "linkageMethod", "distanceMethod", "boundVals", "minBound", "wasm", "initWASM", "n", "varData", "wasmData", "wv", "i", "wasmNeighbors", "nbrs", "wn", "nb", "wasmBound", "b", "result", "out", "row", "vals", "j", "redcap", "k", "data", "neighbors", "scaleMethod", "redcapMethod", "distanceMethod", "boundVals", "minBound", "wasm", "initWASM", "n", "varData", "wasmData", "wv", "i", "wasmNeighbors", "nbrs", "wn", "nb", "wasmBound", "b", "result", "out", "row", "vals", "j", "skater", "k", "data", "neighbors", "scaleMethod", "distanceMethod", "boundVals", "minBound", "wasm", "initWASM", "n", "varData", "wasmData", "wv", "i", "wasmNeighbors", "nbrs", "wn", "nb", "wasmBound", "b", "result", "out", "row", "vals", "j", "azpGreedy", "p", "data", "neighbors", "inits", "distanceMethod", "seed", "wasm", "initWASM", "n", "wasmData", "varData", "wv", "i", "wasmNeighbors", "nbrs", "wn", "nb", "result", "out", "row", "vals", "j", "azpSA", "coolingRate", "saMaxit", "azpTabu", "tabuLength", "convTabu", "maxpGreedy", "data", "neighbors", "iterations", "distanceMethod", "seed", "wasm", "initWASM", "n", "wasmData", "varData", "wv", "i", "wasmNeighbors", "nbrs", "wn", "nb", "result", "out", "row", "vals", "j", "maxpSA", "coolingRate", "saMaxit", "maxpTabu", "tabuLength", "convTabu", "spatialValidation", "clusters", "geometries", "neighbors", "wasm", "initWASM", "n", "wasmClusters", "c", "wasmNeighbors", "nbrs", "wn", "nb", "result", "frag", "f", "clusterFragmentation", "i", "clusterDiameter", "clusterCompactness", "joincountRatio", "makeSpatial", "clusters", "neighbors", "n", "c", "e", "nbrs", "nb", "wasm", "initWASM", "wasmClusters", "wasmNeighbors", "wc", "wn", "result", "out", "i", "row", "vals", "j", "quantileBreaks", "k", "data", "wasm", "initWASM", "n", "wasmUndefs", "wasmData", "i", "result", "F", "naturalBreaks", "k", "data", "wasm", "initWASM", "n", "wasmUndefs", "wasmData", "i", "result", "F", "equalIntervalBreaks", "k", "data", "wasm", "initWASM", "n", "wasmUndefs", "wasmData", "i", "result", "F", "percentileBreaks", "data", "wasm", "initWASM", "n", "wasmUndefs", "wasmData", "i", "result", "F", "boxBreaks", "data", "hingeFactor", "wasm", "initWASM", "n", "wasmUndefs", "wasmData", "i", "result", "F", "hinge15Breaks", "hinge30Breaks", "standardDeviationBreaks", "data", "wasm", "initWASM", "n", "wasmUndefs", "wasmData", "i", "result", "F", "RatesOptions", "calculateRates", "eventValues", "baseValues", "method", "neighbors", "rawRates", "excessRisk", "empiricalBayes", "spatialRates", "spatialEmpiricalBayes", "rateStandardizeEB", "n", "rates", "i", "risks", "SP", "SE", "lambda", "eHat", "results", "piRaw", "theta1", "pBar", "q1", "w", "theta2", "nn", "j", "bHat", "gamma", "a", "aHat", "se", "isValidNumber", "val", "deviationFromMean", "data", "wasm", "initWASM", "n", "wasmUndefs", "wasmData", "validCount", "i", "isValidNumber", "result", "resultArray", "F", "standardizeMAD", "data", "wasm", "initWASM", "n", "wasmUndefs", "wasmData", "validCount", "i", "isValidNumber", "result", "resultArray", "F", "rangeAdjust", "data", "wasm", "initWASM", "n", "wasmUndefs", "wasmData", "validCount", "i", "isValidNumber", "result", "resultArray", "F", "rangeStandardize", "data", "wasm", "initWASM", "n", "wasmUndefs", "wasmData", "validCount", "i", "isValidNumber", "result", "resultArray", "F", "standardize", "data", "wasm", "initWASM", "n", "wasmUndefs", "wasmData", "validCount", "i", "isValidNumber", "result", "resultArray", "F"]
}
