spatialscape 0.3.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- spatialscape/__init__.py +13 -0
- spatialscape/_app/assets/array-utils-flat-BL8Cekj1.js +13 -0
- spatialscape/_app/assets/blosc-DEOJs6D5.js +18 -0
- spatialscape/_app/assets/blosc-Df7TknHH.js +18 -0
- spatialscape/_app/assets/chunk-INHXZS53-DAOLzMPX.js +2 -0
- spatialscape/_app/assets/chunk-INHXZS53-DfBSTIxr.js +2 -0
- spatialscape/_app/assets/deflate-B2AbjNo_.js +2 -0
- spatialscape/_app/assets/expression-E359vKZW.js +368 -0
- spatialscape/_app/assets/get-attribute-from-layouts-Dd2gixpo.js +2 -0
- spatialscape/_app/assets/index-BKPnXJSt.css +1 -0
- spatialscape/_app/assets/index-Gxpj1e1n.js +8454 -0
- spatialscape/_app/assets/jpeg-b0MwBR_9.js +2 -0
- spatialscape/_app/assets/lerc-ujbbHc0C.js +2 -0
- spatialscape/_app/assets/lz4-BFJkNc3o.js +16 -0
- spatialscape/_app/assets/lz4-DNE3IovK.js +16 -0
- spatialscape/_app/assets/lzw-DfRkoFB0.js +2 -0
- spatialscape/_app/assets/packbits-BDCGuk_Z.js +2 -0
- spatialscape/_app/assets/pako.esm-Ch1S5qKo.js +2 -0
- spatialscape/_app/assets/raw-vNZ-QFXZ.js +2 -0
- spatialscape/_app/assets/webgl-D2Fkccwd.js +345 -0
- spatialscape/_app/assets/webimage-DDU0IC05.js +2 -0
- spatialscape/_app/assets/worker-CUy87eWB.js +8 -0
- spatialscape/_app/assets/zstd-CGD_7wnU.js +16 -0
- spatialscape/_app/assets/zstd-qXhZ_1DN.js +16 -0
- spatialscape/_app/favicon.svg +161 -0
- spatialscape/_app/index.html +23 -0
- spatialscape/build.py +630 -0
- spatialscape/cli.py +399 -0
- spatialscape/config.py +570 -0
- spatialscape/convert.py +321 -0
- spatialscape/discover.py +98 -0
- spatialscape/expression.py +300 -0
- spatialscape/fingerprint.py +152 -0
- spatialscape/genes.py +251 -0
- spatialscape/geometry.py +132 -0
- spatialscape/images.py +240 -0
- spatialscape/init.py +578 -0
- spatialscape/manifest.py +162 -0
- spatialscape/obs.py +48 -0
- spatialscape/outlines.py +145 -0
- spatialscape/polygons.py +85 -0
- spatialscape/rds.py +609 -0
- spatialscape/rdsread.py +556 -0
- spatialscape/readers.py +195 -0
- spatialscape/registry.py +83 -0
- spatialscape/serve.py +262 -0
- spatialscape/session.py +474 -0
- spatialscape/site.py +274 -0
- spatialscape/synthetic.py +142 -0
- spatialscape/thumbnail.py +95 -0
- spatialscape/tracks.py +551 -0
- spatialscape/validate.py +193 -0
- spatialscape/vocab.py +188 -0
- spatialscape-0.3.0.dist-info/METADATA +68 -0
- spatialscape-0.3.0.dist-info/RECORD +58 -0
- spatialscape-0.3.0.dist-info/WHEEL +4 -0
- spatialscape-0.3.0.dist-info/entry_points.txt +3 -0
- spatialscape-0.3.0.dist-info/licenses/LICENSE +21 -0
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
function e(e){if(e?.aborted)throw t(e)}function t(e){let t=e.reason;return t===void 0?new DOMException(`This operation was aborted`,`AbortError`):t}var n=class{entries=/* @__PURE__ */ new Map;total=0;settledCount=0;limit;shared;fill;sizeOf;toCacheKey;idleTimeoutMs;sweepTimer;constructor({fill:e,maxSize:t=1/0,sizeOf:n=()=>1,cacheKey:r=e=>String(e),idleTimeoutMs:i=0,budget:a}={}){this.fill=e,this.limit=t,this.shared=a&&{budget:a,membership:a.register(this)},this.sizeOf=n,this.toCacheKey=r,this.idleTimeoutMs=i>0&&Number.isFinite(i)?i:void 0}get size(){return this.entries.size}get totalSize(){return this.total}get maxSize(){return this.limit}set maxSize(e){this.limit=e,this.evict()}waiterCount(e){return this.entries.get(this.toCacheKey(e))?.pending?.signals.size??0}async get(t,n,r){e(n);let i=this.toCacheKey(t),a=this.entries.get(i);a&&this.isDoomed(a)&&(this.deleteKey(i),a=void 0),a?this.touch(i,a):a=this.start(i,t,r),a.pending&&this.join(a.pending,n);try{return await this.settleFor(a,n)}finally{e(n)}}settleFor(e,n){if(!e.pending||n===void 0||typeof n.addEventListener!=`function`)return e.promise;let r,i=new Promise((e,t)=>{r=t}),a=()=>{r(t(n))};return n.addEventListener(`abort`,a,{once:!0}),Promise.race([e.promise,i]).finally(()=>{n.removeEventListener(`abort`,a)})}getIfCached(e){let t=this.toCacheKey(e),n=this.entries.get(t);if(n){if(this.isDoomed(n)){this.deleteKey(t);return}return this.touch(t,n),n.promise}}has(e){let t=this.entries.get(this.toCacheKey(e));return t!==void 0&&!this.isDoomed(t)}delete(e){this.deleteKey(this.toCacheKey(e))}clear(){this.entries.clear(),this.shared?.budget.charge(this.shared.membership,-this.total),this.total=0,this.settledCount=0,this.stopSweep()}touch(e,t){this.entries.delete(e),this.entries.set(e,t),t.lastTouched=Date.now(),t.seq=this.stamp()}stamp(){return this.shared?.budget.nextSeq()??0}isDoomed(e){return e.pending?.controller.signal.aborted===!0}sweepIdle(){let e=this.idleTimeoutMs;if(e===void 0)return;let t=Date.now()-e;for(let[e,n]of this.entries)!n.pending&&n.lastTouched<=t&&this.deleteKey(e);this.settledCount===0&&this.stopSweep()}startSweep(){let e=this.idleTimeoutMs;if(e===void 0||this.sweepTimer!==void 0)return;let t=Math.min(2**31-1,Math.max(1e3,Math.floor(e/4))),n=new WeakRef(this),r=setInterval(()=>{let e=n.deref();e?e.sweepIdle():clearInterval(r)},t);this.sweepTimer=r,r.unref?.()}stopSweep(){this.sweepTimer!==void 0&&(clearInterval(this.sweepTimer),this.sweepTimer=void 0)}start(e,t,n){let r=n??(this.fill&&(e=>this.fill(t,e)));if(!r)throw Error(`SharedReadCache needs a fill, either on the cache or on the get() call`);let i={signals:/* @__PURE__ */ new Map,pinned:!1,controller:new AbortController},a={promise:Promise.resolve(r(i.controller.signal)),pending:i,size:0,lastTouched:Date.now(),seq:this.stamp()};this.entries.set(e,a);let o=()=>this.entries.get(e)===a,s=()=>{for(let[e,t]of i.signals)e.removeEventListener(`abort`,t);a.pending=void 0};return a.promise.then(t=>{let n=o()?this.weigh(t):void 0,r=o();s(),r&&(n===void 0?this.entries.delete(e):(a.lastTouched=Date.now(),a.size=n,this.settledCount++,this.total+=n,this.shared?.budget.charge(this.shared.membership,n),this.startSweep())),this.evict(),this.shared?.budget.evict()},()=>{o()&&this.deleteKey(e),s()}),a}weigh(e){try{let t=this.sizeOf(e);return Number.isFinite(t)&&t>=0?t:void 0}catch{return}}join(e,t){if(t===void 0||typeof t.addEventListener!=`function`)e.pinned=!0;else if(!t.aborted&&!e.signals.has(t)){let n=()=>{e.signals.delete(t),!e.pinned&&e.signals.size===0&&e.controller.abort(t.reason)};e.signals.set(t,n),t.addEventListener(`abort`,n,{once:!0})}}deleteKey(e){let t=this.entries.get(e);t&&(this.entries.delete(e),t.pending||this.settledCount--,this.total-=t.size,this.shared?.budget.charge(this.shared.membership,-t.size))}lruSpare(){if(!(this.settledCount<=1)){for(let[e,t]of this.entries)if(!t.pending)return{cacheKey:e,seq:t.seq}}}release(e){this.deleteKey(e)}evict(){if(!(this.total<=this.limit))for(let[e,t]of this.entries){if(this.total<=this.limit||this.settledCount<=1)break;t.pending||this.deleteKey(e)}}};async function r(e){return e.bytes?e.bytes():new Uint8Array(await e.arrayBuffer())}async function i(e,t,n){if(t===`utf8`||t===`utf-8`)return e.text();if(t)throw Error(`unsupported encoding: ${t}`);return n&&`body`in e?c(e,n):r(e)}function a(e){return typeof e==`string`?{encoding:e,opts:{}}:{encoding:e?.encoding,opts:e??{}}}function o(e){let t=/\/(\d+)$/.exec(e??``)?.[1];return t===void 0?void 0:parseInt(t,10)}function s(e){let t=e.headers.get(`content-length`),n=t===null?NaN:Number(t);return Number.isSafeInteger(n)&&n>=0?n:void 0}async function c(e,t){let n=s(e),i=e.body;if(!i||n===void 0){let i=await r(e);return t(i.byteLength,n??i.byteLength),i}let a=i.getReader(),o=new Uint8Array(n),c=0,l=Date.now();t(0,n);for(let e=await a.read();!e.done;e=await a.read()){if(c+e.value.byteLength>o.length){let t=new Uint8Array(Math.max(c+e.value.byteLength,o.length*2));t.set(o.subarray(0,c)),o=t}o.set(e.value,c),c+=e.value.byteLength;let r=Date.now();r-l>=50&&(l=r,t(c,n))}return t(c,n),c===o.length?o:o.slice(0,c)}function l(...e){let t=/* @__PURE__ */ new Map;for(let n of e)for(let[e,r]of Object.entries(n??{}))t.set(e.toLowerCase(),[e,r]);return Object.fromEntries(t.values())}function u(e){let t=e.body;typeof t?.cancel==`function`&&t.cancel().catch(()=>void 0)}function d(e){return Number.isSafeInteger(e)&&e>=0}function f(e){return typeof e==`object`&&!!e&&`name`in e&&e.name===`TypeError`}function p(e){return(typeof e==`object`&&e&&`message`in e&&typeof e.message==`string`?e.message:`${e}`).replace(/\.$/,``)}var m=class{url;get source(){return this.url}_stat;statProbe;fetchImplementation;baseHeaders;baseOverrides;baseSignal;constructor(e,t={}){this.url=e,this.baseHeaders=t.headers??{},this.baseOverrides=t.overrides??{},this.baseSignal=t.signal,this.fetchImplementation=t.fetch??globalThis.fetch.bind(globalThis)}buildRequest(e,t){let n=e.signal??this.baseSignal;return{method:`GET`,redirect:`follow`,mode:`cors`,...this.baseOverrides,...e.overrides,headers:l(this.baseHeaders,e.headers,t),...n?{signal:n}:{}}}async fetch(e,t){let n=n=>f(n)&&!t?.signal?.aborted?Error(`${p(n)} fetching ${e}`,{cause:n}):n,r;try{r=await this.fetchImplementation(e,t)}catch(i){if(`${i}`.includes(`Failed to fetch`)){console.warn(`generic-filehandle: refetching ${e} to attempt to work around chrome CORS header caching bug`);try{r=await this.fetchImplementation(e,{...t,cache:`reload`})}catch(e){throw n(e)}}else throw n(i)}return r}async read(e,t,n={}){if(!d(e)||!d(t))throw TypeError(`read() called with an invalid length or position (length=${e}, position=${t}). The index file may be corrupt.`);return e===0?/* @__PURE__ */ new Uint8Array:this.fetchBytes(e,t,n)}async fetchBytes(e,t,n){let i=await this.fetch(this.url,this.buildRequest(n,{range:`bytes=${t}-${t+e-1}`}));if(i.status===416)return u(i),/* @__PURE__ */ new Uint8Array;if(this.checkOk(i),i.status===200&&t===0||i.status===206){let t=o(i.headers.get(`content-range`));t!==void 0&&(this._stat={size:t});let a=n.onProgress?await c(i,n.onProgress):await r(i);return!this._stat&&i.status===200&&(this._stat={size:a.byteLength}),a.byteLength<=e?a:a.slice(0,e)}throw u(i),Error(i.status===200?`${this.url} fetch returned status 200, expected 206`:`HTTP ${i.status} fetching ${this.url}`)}checkOk(e){if(!e.ok)throw u(e),Error(`HTTP ${e.status} fetching ${this.url}`)}async readFile(e){let{encoding:t,opts:n}=a(e),r=await this.fetch(this.url,this.buildRequest(n));this.checkOk(r);let i=await this.readFileBody(r,t,n.onProgress);return r.status===200&&typeof i!=`string`&&(this._stat={size:i.byteLength}),i}readFileBody(e,t,n){return i(e,t,n)}async stat(){return this._stat||(this.statProbe??=this.read(10,0).finally(()=>{this.statProbe=void 0}),await this.statProbe),this._stat??{size:0}}close(){return Promise.resolve()}},h=class{source;constructor(e,t={}){this.source=e}unimplemented(){return Promise.reject(/* @__PURE__ */ Error(`LocalFile is unimplemented in the browser (${this.source})`))}readFile(e){return this.unimplemented()}read(e,t,n){return this.unimplemented()}stat(){return this.unimplemented()}close(){return this.unimplemented()}};function g(e){if(e.length===0)return[];let t=e.toSorted((e,t)=>e.min-t.min),n=[],r=t[0];for(let e=1;e<t.length;e++){let i=t[e];i.min>r.max+1?(n.push(r),r=i):i.max>r.max&&(r={min:r.min,max:i.max})}return n.push(r),n}var _={};const ee={};function v(e){let t=ee[e];if(t!==void 0)return t.exports;let n=ee[e]={exports:{}};return _[e](n,n.exports,v),n.exports}(()=>{let e=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,t;v.t=function(n,r){if(r&1&&(n=this(n)),r&8||typeof n==`object`&&n&&(r&4&&n.__esModule||r&16&&typeof n.then==`function`))return n;let i=Object.create(null);v.r(i);let a={};t||=[null,e({}),e([]),e(e)];for(var o=r&2&&n;(typeof o==`object`||typeof o==`function`)&&!~t.indexOf(o);o=e(o))Object.getOwnPropertyNames(o).forEach(e=>a[e]=()=>n[e]);return a.default=()=>n,v.d(i,a),i}})(),v.d=(e,t)=>{if(Array.isArray(t))for(var n=0;n<t.length;){var r=t[n++],i=t[n++];v.o(e,r)?i===0&&n++:i===0?Object.defineProperty(e,r,{enumerable:!0,value:t[n++]}):Object.defineProperty(e,r,{enumerable:!0,get:i})}else for(var r in t)v.o(t,r)&&!v.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},v.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),v.r=e=>{Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:`Module`}),Object.defineProperty(e,"__esModule",{value:!0})};var te={};v.r(te),v.d(te,{__wbg_Error_408e67f47ca7b58b:()=>se,__wbg_set_wasm:()=>xe,decompress_and_parse_bigwig:()=>ie,decompress_and_parse_summary:()=>ae,inflate_raw_batch:()=>oe});const ne=`data:application/wasm;base64,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AkEBQQEQHQJAIAMoAgRBAUcNACADKAIIIAMoAgwQRwALIAMoAgghASAAIAI2AgAgACABNgIEIANBEGokAAuHAQEBfyMAQRBrIgMkAAJAIAIgAWoiASACTw0AQQBBABBHAAsgA0EEaiAAKAIAIgIgACgCBCABIAJBAXQiAiABIAJLGyICQQggAkEISxsiAhAjAkAgAygCBEEBRw0AIAMoAgggAygCDBBHAAsgAygCCCEBIAAgAjYCACAAIAE2AgQgA0EQaiQAC4QBAAJAAkAgA0EATg0AQQEhAUEEIQJBACEDDAELAkACQAJAAkAgAUUNACACIAFBASADEFEhAQwBCwJAIAMNAEEBIQEMAgsQbSADQQEQXSEBCyABDQBBASEBIABBATYCBAwBCyAAIAE2AgRBACEBC0EIIQILIAAgAmogAzYCACAAIAE2AgALjwECAn8BfiMAQSBrIgIkAAJAIAEoAgBBf0cNACABKAIMIQMgAkEANgIcIAJCgICAgBA3AhQgAkEUakHMlcAAIAMoAgAiAygCACADKAIEEAwaIAIgAigCHCIDNgIQIAIgAikCFCIENwMIIAEgAzYCCCABIAQ3AgALIABBiJjAADYCBCAAIAE2AgAgAkEgaiQAC4QBAQN/IwBBEGsiASQAAkAgACgCACICKAIEIgNBAXFFDQAgAigCACECIAEgA0EBdjYCBCABIAI2AgAgAUHklcAAIAAoAgQgACgCCCIALQAIIAAtAAkQFgALIAFBfzYCACABIAA2AgwgAUGAlsAAIAAoAgQgACgCCCIALQAIIAAtAAkQFgALhAEBAn8jAEEQayIGJABBACEHIAZBADYCDAJAAkACQAJAAkAgASgCACACIAMgBCAFIAZBDGoQSg4EAQIAAwALQeSIwABB7ABB0InAABA4AAsgACAGKAIMNgIEDAILIABBADoAAUEBIQcMAQtBASEHIABBAToAAQsgACAHOgAAIAZBEGokAAtrAQN/IwBBEGsiASQAIAFBBGogACgCACICIAAoAgQgAkEBdCICQQQgAkEESxsiAkEEQQQQHQJAIAEoAgRBAUcNACABKAIIIAEoAgwQRwALIAEoAgghAyAAIAI2AgAgACADNgIEIAFBEGokAAtgAQJ/AkACQCAAQXxqKAIAIgNBeHEiBEEEQQggA0EDcSIDGyABakkNAAJAIANFDQAgBCABQSdqSw0CCyAAEAkPC0G8lsAAQS5B7JbAABBIAAtB/JbAAEEuQayXwAAQSAALWQEBfyMAQSBrIgUkACAFIAE2AgQgBSAANgIAIAUgAzYCDCAFIAI2AgggBUEhrUIghiAFQQhqrYQ3AxggBUEgrUIghiAFrYQ3AxBB6IHAACAFQRBqIAQQMgALWgEBfwJAAkACQCACIAAoAgAgACgCCCIDa00NACAAIAMgAkEBQQEQICAAKAIIIQMMAQsgAkUNAQsgAkUNACAAKAIEIANqIAEgAvwKAAALIAAgAyACajYCCEEAC1kBAn8gASgCACECIAFBADYCAAJAAkAgAkUNACABKAIEIQMQbUEIQQQQXSIBRQ0BIAEgAzYCBCABIAI2AgAgAEH4l8AANgIEIAAgATYCAA8LAAtBBEEIEGEAC1YBAX8CQAJAAkAgAiAAKAIAIAAoAggiA2tNDQAgACADIAIQIiAAKAIIIQMMAQsgAkUNAQsgAkUNACAAKAIEIANqIAEgAvwKAAALIAAgAyACajYCCEEAC10BAn9BACEBAkAgACgCAEEMRw0AQQAhAUGs2gAgACgCBCICQQAoAvifQCACGxEDACICRQ0AIAJBAEGs2gAQGSIBIAAoAggiAEEAKAL8n0AgABs2AqhaIAEhAQsgAQtOAgF/AX4jAEEgayIDJAAgAyABNgIMIAMgADYCCCADQQKtQiCGIgQgA0EIaq2ENwMYIAMgBCADQQxqrYQ3AxBBqIDAACADQRBqIAIQMgALRQACQAJAIAFBCUkNACABIAAQDiEBDAELIAAQASEBCwJAIAFFDQAgAUF8ai0AAEEDcUUNACAARQ0AIAFBACAA/AsACyABC1IBAn9BACEBQQBBACgCmKBAIgJBAWo2ApigQAJAIAJBAEgNAEEBIQFBAC0AhKBADQBBACAAOgCEoEBBAEEAKAKAoEBBAWo2AoCgQEECIQELIAELRwECfyABKAIEIQIgASgCACEDEG0CQEEIQQQQXSIBDQBBBEEIEGEACyABIAI2AgQgASADNgIAIABB+JfAADYCBCAAIAE2AgALOwEBfyMAQSBrIgMkACADIAE2AhAgAyAANgIMIANBATsBHCADIAI2AhggAyADQQxqNgIUIANBFGoQOgALOQEBfyMAQRBrIgMkACADIAE2AgQgAyAANgIAIANBIK1CIIYgA62ENwMIQeyBwAAgA0EIaiACEDIACzwAAkAgACgCAEF/Rg0AIAEgACgCBCAAKAIIEE4PCyABKAIAIAEoAgQgACgCDCgCACIAKAIAIAAoAgQQDAs2AAJAIAJBf0YNACAAIAIgASgCEBEFAEUNAEEBDwsCQCADDQBBAA8LIAAgAyAEIAEoAgwRBwALMgACQAJAIAFpQQFHDQAgAEGAgICAeCABa0sNACAARQ0BEG0gACABEF0iAQ0BCwALIAELNQEBfwJAIABFDQACQCABKAIAIgJFDQAgACACEQIACyABKAIEIgJFDQAgACACIAEoAggQVgsLKgEBfyMAQRBrIgMkACADIAI2AgwgAyABNgIIIAMgADYCBCADQQRqEGcACy0BAX8jAEEQayIBJAAgASAAKQIANwIIIAFBCGpBsJXAACAAKAIIQQFBABAWAAssAgF/AX4jAEEQayIBJAAgACkCACECIAEgADYCDCABIAI3AgQgAUEEahBpAAsjAQF/IwBBEGsiAiQAIAIgATYCDCACIAA2AgggAkEIahBoAAslAQF/AkBBrIrAABAtIgBFDQAgAA8LQeCJwABBOkGcisAAEDgACyAAAkAgASgCAEUNACAAQfiXwAA2AgQgACABNgIADwsACx4BAX8CQCAAKAIAIgJFDQAgASACIAAoAgQQTg8LAAsfACABQbOIwABBrIjAACAALQAAIgAbQRFBByAAGxBOCxsBAX8QbSAAQQRqQQQQXSIBIAA2AgAgAUEEagseAQF/AkAgACgCACIBQQFIDQAgACgCBCABQQEQVgsLHgAgACgCACAAKAIEQQAoAoigQCIAQQcgABsRBAAACxwBAX8CQCAAKAIAIgFFDQAgACgCBCABQQEQVgsLFwACQCABQQlJDQAgASAAEA4PCyAAEAELHAEBfwJAIAAoAgAiAUUNACAAKAIEIAFBARBWCwsVACAAQXxqIgAgACgCAEEEakEEEFYLFAACQCAARQ0AIAAgARBhAAsQWQALEQAgACABQQF0QQFyIAIQMgALEgACQCABRQ0AIAAgASACEFYLCxIAIAAgASACIAMgBEEAIAUQAgsVAAJAIABFDQAgACAAKAKoWhECAAsLGgAgAEEAKQK0lkA3AgggAEEAKQKslkA3AgALGgAgAEEAKQKklkA3AgggAEEAKQKclkA3AgALFgAgACgCACABIAIgACgCBCgCDBEHAAsUACAAKAIAIAEgACgCBCgCDBEFAAsQACAAKAIAIAAoAgQgARBkCw0AIAAgASACIAMQBw8LFABBACAANgLcn0BBAEEBNgLYn0ALEwAgAEH4l8AANgIEIAAgATYCAAsQACABIAAoAgAgACgCBBBOCxAAIAEgACgCACAAKAIEEAsLCwAgACABIAIQKA8LCgAgACABEGwaAAsPACAAQcyVwAAgASACEAwLEQBB0JjAAEEjQeSYwAAQMgALDwAgAEH0mMAAIAEgAhAMCw4AQdGbwABBMyAAEDIACwsAIAAjAGokACMACwkAIAAgARBEDwsJACAAIAEQLw8LCQAgASAAEDsACwwAIAAgASkCADcDAAsJACABIAAQXwALDQAgAUGEmsAAQQUQTgsNACABQeqbwABBGBALCwoAIAIgACABEAsLCAAgACABEAALCQAgACgCABBLCwcAIAAQOQALBwAgABBCAAsHACAAECUACwsAQQBBAToAnKBACwkAIABBADYCAAsFABBuAAsDAA8LAwAACwIACwvpHwIAQYCAwAALghwWc2xpY2UgaW5kZXggc3RhcnRzIGF0IMANIGJ1dCBlbmRzIGF0IMAAIGluZGV4IG91dCBvZiBib3VuZHM6IHRoZSBsZW4gaXMgwBIgYnV0IHRoZSBpbmRleCBpcyDAABJyYW5nZSBzdGFydCBpbmRleCDAIiBvdXQgb2YgcmFuZ2UgZm9yIHNsaWNlIG9mIGxlbmd0aCDAABByYW5nZSBlbmQgaW5kZXggwCIgb3V0IG9mIHJhbmdlIGZvciBzbGljZSBvZiBsZW5ndGggwAAWZGVjb21wcmVzc2lvbiBmYWlsZWQ6IMAAwAI6IMAACnRydW5jYXRlZCDACCBibG9jazogwBEgYnl0ZXMsIGV4cGVjdGVkIMAVOyBmaWxlIG1heSBiZSBjb3JydXB0AC9ydXN0Yy9iOTQwMDg0ZDdlYjZhMjk5ZWI0YmZlYjhlMzQ5MDFiYzA1MWU3YWM0L2xpYnJhcnkvYWxsb2Mvc3JjL2ZtdC5ycwAvcnVzdGMvYjk0MDA4NGQ3ZWI2YTI5OWViNGJmZWI4ZTM0OTAxYmMwNTFlN2FjNC9saWJyYXJ5L3N0ZC9zcmMvc3lzL3N5bmMvcndsb2NrL25vX3RocmVhZHMucnMAL2hvbWUvcnVubmVyLy5jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTE5NDljZjhjNmI1YjU1N2Yvd2FzbS1iaW5kZ2VuLTAuMi4xMjcvc3JjL2V4dGVybnJlZi5ycwAvcnVzdGMvYjk0MDA4NGQ3ZWI2YTI5OWViNGJmZWI4ZTM0OTAxYmMwNTFlN2FjNC9saWJyYXJ5L2FsbG9jL3NyYy9yYXdfdmVjL21vZC5ycwAvcnVzdC9kZXBzL2RsbWFsbG9jLTAuMi4xNC9zcmMvZGxtYWxsb2MucnMAL2hvbWUvcnVubmVyLy5jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTE5NDljZjhjNmI1YjU1N2YvbGliZGVmbGF0ZXItMS4yNi4wL3NyYy9saWIucnMAY29tcHJlc3NlZCBibG9jayBleHRlbmRzIHBhc3QgdGhlIGlucHV0IGJ1ZmZlcmJsb2NrIG9mZnNldCBvdmVyZmxvd3NibG9jayBpcyBzaG9ydGVyIHRoYW4gdGhlIDItYnl0ZSB6bGliIGhlYWRlcgAAAA4DEAAKAAAALgAAAAsAAAAOAxAACgAAAEQAAAALAAAADgMQAAoAAAA2AAAAPQAAAA4DEAAKAAAAPwAAACsAAAAOAxAACgAAADkAAAAPAAAAYmlnd2lnAAAOAxAACgAAAG8AAAA9AAAADgMQAAoAAAB1AAAAHQAAAA4DEAAKAAAA9gAAAD0AAABzdW1tYXJ5AA4DEAAKAAAA/AAAAB0AAABCYWREYXRhSW5zdWZmaWNpZW50U3BhY2XVARAAZwAAAIQAAAARAAAA1QEQAGcAAACSAAAAEQAAAGxpYmRlZmxhdGVfZGVmbGF0ZV9kZWNvbXByZXNzIHJldHVybmVkIGFuIHVua25vd24gZXJyb3IgdHlwZTogdGhpcyBpcyBhbiBpbnRlcm5hbCBidWcgdGhhdCAqKm11c3QqKiBiZSBmaXhlZLkCEABfAAAADQEAABUAAABsaWJkZWZsYXRlX2FsbG9jX2RlY29tcHJlc3NvciByZXR1cm5lZCBOVUxMOiBvdXQgb2YgbWVtb3J5AAC5AhAAXwAAAJ0AAAARAAAADAAAAAUAAAAGAAAAAAAAAAAAAAAQERIACAcJBgoFCwQMAw0CDgEPAAAA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`;var re=/*#__PURE__*/ v.t(ne);function ie(e,t,n,r,i,a){try{let u=E.__wbindgen_add_to_stack_pointer(-16),d=_e(e,E.__wbindgen_export),f=T,p=C(t,E.__wbindgen_export),m=T,h=C(n,E.__wbindgen_export),g=T;E.decompress_and_parse_bigwig(u,d,f,p,m,h,g,r,i,a);var o=b().getInt32(u+0,!0),s=b().getInt32(u+4,!0),c=b().getInt32(u+8,!0);if(b().getInt32(u+12,!0))throw ve(c);var l=ue(o,s).slice();return E.__wbindgen_export2(o,s*1,1),l}finally{E.__wbindgen_add_to_stack_pointer(16)}}function ae(e,t,n,r,i,a,o){try{let d=E.__wbindgen_add_to_stack_pointer(-16),f=_e(e,E.__wbindgen_export),p=T,m=C(t,E.__wbindgen_export),h=T,g=C(n,E.__wbindgen_export),_=T;E.decompress_and_parse_summary(d,f,p,m,h,g,_,r,i,a,o);var s=b().getInt32(d+0,!0),c=b().getInt32(d+4,!0),l=b().getInt32(d+8,!0);if(b().getInt32(d+12,!0))throw ve(l);var u=ue(s,c).slice();return E.__wbindgen_export2(s,c*1,1),u}finally{E.__wbindgen_add_to_stack_pointer(16)}}function oe(e,t,n,r){try{let c=E.__wbindgen_add_to_stack_pointer(-16),l=_e(e,E.__wbindgen_export),u=T,d=C(t,E.__wbindgen_export),f=T,p=C(n,E.__wbindgen_export),m=T;E.inflate_raw_batch(c,l,u,d,f,p,m,r);var i=b().getInt32(c+0,!0),a=b().getInt32(c+4,!0),o=b().getInt32(c+8,!0);if(b().getInt32(c+12,!0))throw ve(o);var s=ue(i,a).slice();return E.__wbindgen_export2(i,a*1,1),s}finally{E.__wbindgen_add_to_stack_pointer(16)}}function se(e,t){return ce(Error(de(e,t)))}function ce(e){S===x.length&&x.push(x.length+1);let t=S;return S=x[t],x[t]=e,t}function le(e){e<1028||(x[e]=S,S=e)}function ue(e,t){return e>>>=0,he().subarray(e/1,e/1+t)}let y=null;function b(){return(y===null||y.buffer.detached===!0||y.buffer.detached===void 0&&y.buffer!==E.memory.buffer)&&(y=new DataView(E.memory.buffer)),y}function de(e,t){return be(e>>>0,t)}let fe=null;function pe(){return(fe===null||fe.byteLength===0)&&(fe=new Uint32Array(E.memory.buffer)),fe}let me=null;function he(){return(me===null||me.byteLength===0)&&(me=new Uint8Array(E.memory.buffer)),me}function ge(e){return x[e]}let x=Array(1024).fill(void 0);x.push(void 0,null,!0,!1);let S=x.length;function C(e,t){let n=t(e.length*4,4)>>>0;return pe().set(e,n/4),T=e.length,n}function _e(e,t){let n=t(e.length*1,1)>>>0;return he().set(e,n/1),T=e.length,n}function ve(e){let t=ge(e);return le(e),t}let w=new TextDecoder(`utf-8`,{ignoreBOM:!0,fatal:!0});w.decode();let ye=0;function be(e,t){return ye+=t,ye>=2146435072&&(w=new TextDecoder(`utf-8`,{ignoreBOM:!0,fatal:!0}),w.decode(),ye=t),w.decode(he().subarray(e,e+t).slice())}let T=0,E;function xe(e){E=e}xe(re);let Se=null,Ce=null;async function we(){return Se||(Ce||=(async()=>{let e=await(await fetch(ne)).arrayBuffer(),{instance:t}=await WebAssembly.instantiate(e,{"./inflate_wasm_bg.js":te});return xe(t.exports),Se=t.exports,Se})(),Ce)}async function Te(e,t,n,r){await we();let i=oe(e,t,n,r),a=new DataView(i.buffer,i.byteOffset,i.byteLength),o=a.getUint32(0,!0),s=4+(o+1)*4,c=Array(o+1);for(let e=0;e<=o;e++)c[e]=a.getUint32(4+e*4,!0);return{data:i.subarray(s),offsets:c}}function Ee(e){let t=new DataView(e.buffer,e.byteOffset,e.byteLength).getUint32(0,!0);if(t===0)return{starts:/* @__PURE__ */ new Int32Array,ends:/* @__PURE__ */ new Int32Array,scores:/* @__PURE__ */ new Float32Array};let n=4+t*4,r=n+t*4;return{starts:new Int32Array(e.buffer,e.byteOffset+4,t),ends:new Int32Array(e.buffer,e.byteOffset+n,t),scores:new Float32Array(e.buffer,e.byteOffset+r,t)}}function De(e){let t=new DataView(e.buffer,e.byteOffset,e.byteLength).getUint32(0,!0);if(t===0)return{starts:/* @__PURE__ */ new Int32Array,ends:/* @__PURE__ */ new Int32Array,scores:/* @__PURE__ */ new Float32Array,minScores:/* @__PURE__ */ new Float32Array,maxScores:/* @__PURE__ */ new Float32Array};let n=4+t*4,r=n+t*4,i=r+t*4,a=i+t*4;return{starts:new Int32Array(e.buffer,e.byteOffset+4,t),ends:new Int32Array(e.buffer,e.byteOffset+n,t),scores:new Float32Array(e.buffer,e.byteOffset+r,t),minScores:new Float32Array(e.buffer,e.byteOffset+i,t),maxScores:new Float32Array(e.buffer,e.byteOffset+a,t)}}async function Oe(e,t,n,r,i,a){return await we(),Ee(ie(e,t,n,r,i,a))}async function ke(e,t,n,r,i,a,o){return await we(),De(ae(e,t,n,r,i,a,o))}function Ae(e){let t=new Uint32Array(e.length),n=new Uint32Array(e.length);for(let r=0;r<e.length;r++){let i=e[r];t[r]=i.offset,n[r]=i.length}return{inputOffsets:t,inputLengths:n}}async function je(e,t,n){let{inputOffsets:r,inputLengths:i}=Ae(t);return Te(e,r,i,n)}async function Me(e,t,n,r,i){let{inputOffsets:a,inputLengths:o}=Ae(t);return Oe(e,a,o,n,r,i)}async function Ne(e,t,n,r,i,a){let{inputOffsets:o,inputLengths:s}=Ae(t);return ke(e,o,s,n,r,i,a)}const Pe=new TextDecoder(`utf8`);function D(e,t=0){return new DataView(e.buffer,e.byteOffset+t,e.length-t)}function O(e,t){return e.getUint32(t,!0)+e.getUint32(t+4,!0)*2**32}function Fe(e,t,n){let r=e.indexOf(0,t),i=r!==-1&&r<t+n?r:t+n;return Pe.decode(e.subarray(t,i))}async function Ie(e,t,n,r){let i=e=>n(e).then(e=>({value:e}),e=>({error:e})),a=[],o=0;for(;o<e.length&&a.length<t;)a.push(i(e[o++]));for(let t=0;t<e.length;t++){let n=await a.shift();if(o<e.length&&a.push(i(e[o++])),`error`in n)throw n.error;await r(n.value,e[t],t)}}function Le(e){let t=e.toSorted((e,t)=>e.offset-t.offset),n=[],r;for(let e of t)r&&e.offset-(r.offset+r.length)<=2e3?(r.length=Math.max(r.length,e.offset+e.length-r.offset),r.blocks.push(e)):(r={blocks:[e],length:e.length,offset:e.offset},n.push(r));return n}const Re=610839776;function ze(e,t){let n=0;for(let t of e)n+=t.length;let r=0;return t?.(0,n),e=>{r+=e,t?.(r,n)}}function k(e,t,n,r){return e<r&&t>n}function Be(e,t){return t?e/t:e}const Ve={1:12,2:8,3:4};function He(e,t,n){if(t<n)throw Error(`truncated ${e} block: ${t} bytes, expected ${n}; file may be corrupt`)}function Ue(e){return e.byteLength%32!=0&&He(`summary`,e.byteLength,(Math.floor(e.byteLength/32)+1)*32),e.byteLength/32}function We(e,t,n){let r=Ve[t];r!==void 0&&He(`bigwig`,e,24+n*r)}function Ge(e,t){let n=[],r=Ue(e),i=0,a=D(e);for(let e=0;e<r;e++){let e=a.getUint32(i,!0);i+=4;let r=a.getUint32(i,!0);i+=4;let o=a.getUint32(i,!0);i+=4;let s=a.getUint32(i,!0);i+=4;let c=a.getFloat32(i,!0);i+=4;let l=a.getFloat32(i,!0);i+=4;let u=a.getFloat32(i,!0);i+=8,(!t||e===t.chrId&&k(r,o,t.start,t.end))&&n.push({start:r,end:o,maxScore:l,minScore:c,summary:!0,score:Be(u,s)})}return n}function Ke(e,t,n){let r=[],i=0,a=D(e);for(;i<e.byteLength;){let o=i,s=a.getUint32(i,!0),c=a.getInt32(i+4,!0),l=a.getInt32(i+8,!0);i+=12;let u=e.indexOf(0,i),d=u===-1?e.length:u;n?s===n.chrId&&k(c,l,n.start,n.end)&&r.push({start:c,end:l,rest:Pe.decode(e.subarray(i,d)),uniqueId:`bb-${t}-${o}`}):r.push({chromId:s,start:c,end:l,rest:Pe.decode(e.subarray(i,d)),uniqueId:`bb-${t}-${o}`}),i=d+1}return r}function qe(e,t){let n=[];He(`bigwig`,e.byteLength,24);let r=D(e),i=r.getInt32(4,!0),a=r.getUint32(12,!0),o=r.getUint32(16,!0),s=r.getUint8(20),c=r.getUint16(22,!0);We(e.byteLength,s,c);let l=24;switch(s){case 1:for(let e=0;e<c;e++){let e=r.getInt32(l,!0);l+=4;let i=r.getInt32(l,!0);l+=4;let a=r.getFloat32(l,!0);l+=4,(!t||k(e,i,t.start,t.end))&&n.push({start:e,end:i,score:a})}break;case 2:for(let e=0;e<c;e++){let e=r.getInt32(l,!0);l+=4;let i=r.getFloat32(l,!0);l+=4;let a=e+o;(!t||k(e,a,t.start,t.end))&&n.push({score:i,start:e,end:a})}break;case 3:for(let e=0;e<c;e++){let s=r.getFloat32(l,!0);l+=4;let c=i+e*a,u=c+o;(!t||k(c,u,t.start,t.end))&&n.push({score:s,start:c,end:u})}}return n}function Je(e,t){He(`bigwig`,e.byteLength,24);let n=D(e),r=n.getInt32(4,!0),i=n.getUint32(12,!0),a=n.getUint32(16,!0),o=n.getUint8(20),s=n.getUint16(22,!0);We(e.byteLength,o,s);let c=new Int32Array(s),l=new Int32Array(s),u=new Float32Array(s),d=t.start,f=t.end,p=0;switch(o){case 1:{let e=24;for(let t=0;t<s;t++){let t=n.getInt32(e,!0),r=n.getInt32(e+4,!0);t<f&&r>d&&(c[p]=t,l[p]=r,u[p]=n.getFloat32(e+8,!0),p++),e+=12}break}case 2:{let e=24;for(let t=0;t<s;t++){let t=n.getInt32(e,!0),r=t+a;t<f&&r>d&&(c[p]=t,l[p]=r,u[p]=n.getFloat32(e+4,!0),p++),e+=8}break}case 3:{let e=24;for(let t=0;t<s;t++){let o=r+t*i,s=o+a;o<f&&s>d&&(c[p]=o,l[p]=s,u[p]=n.getFloat32(e,!0),p++),e+=4}break}}return p<s?{starts:c.subarray(0,p),ends:l.subarray(0,p),scores:u.subarray(0,p)}:{starts:c,ends:l,scores:u}}function Ye(e,t){let n=D(e),r=Ue(e),i=new Int32Array(r),a=new Int32Array(r),o=new Float32Array(r),s=new Float32Array(r),c=new Float32Array(r),l=0,u=0;for(let e=0;e<r;e++){let e=n.getUint32(u,!0);u+=4;let r=n.getUint32(u,!0);u+=4;let d=n.getUint32(u,!0);u+=4;let f=n.getUint32(u,!0);u+=4;let p=n.getFloat32(u,!0);u+=4;let m=n.getFloat32(u,!0);u+=4;let h=n.getFloat32(u,!0);u+=8,e===t.chrId&&k(r,d,t.start,t.end)&&(i[l]=r,a[l]=d,o[l]=Be(h,f),s[l]=p,c[l]=m,l++)}return l<r?{starts:i.subarray(0,l),ends:a.subarray(0,l),scores:o.subarray(0,l),minScores:s.subarray(0,l),maxScores:c.subarray(0,l)}:{starts:i,ends:a,scores:o,minScores:s,maxScores:c}}function A(e,t,n,r){if(e.length===1)return t(e[0]);let i=new r(n),a=0;for(let n of e){let e=t(n);i.set(e,a),a+=e.length}return i}function Xe(e){let t=0;for(let n of e)t+=n.starts.length;return t}function Ze(e){let t=Xe(e);return{starts:A(e,e=>e.starts,t,Int32Array),ends:A(e,e=>e.ends,t,Int32Array),scores:A(e,e=>e.scores,t,Float32Array),isSummary:!1}}function Qe(e){let t=Xe(e),{starts:n,ends:r,scores:i}=Ze(e);return{starts:n,ends:r,scores:i,minScores:A(e,e=>e.minScores,t,Float32Array),maxScores:A(e,e=>e.maxScores,t,Float32Array),isSummary:!0}}function $e(e){let t=0;for(let n of e)for(let e of n)t+=e.starts.length;let n=new Int32Array(t),r=new Int32Array(t),i=new Float32Array(t),a=[0],o=0;for(let t of e){for(let e of t)n.set(e.starts,o),r.set(e.ends,o),i.set(e.scores,o),o+=e.starts.length;a.push(o)}return{starts:n,ends:r,scores:i,regionOffsets:a,totalCount:t}}function et(e){let{starts:t,ends:n,scores:r,regionOffsets:i}=$e(e);return{starts:t,ends:n,scores:r,regionOffsets:i,isSummary:!1}}function tt(e){let{starts:t,ends:n,scores:r,regionOffsets:i,totalCount:a}=$e(e),o=new Float32Array(a),s=new Float32Array(a),c=0;for(let t of e)for(let e of t)o.set(e.minScores,c),s.set(e.maxScores,c),c+=e.starts.length;return{starts:t,ends:n,scores:r,minScores:o,maxScores:s,regionOffsets:i,isSummary:!0}}function nt(e,t,n,r){switch(e){case`summary`:return Ge(t,r);case`bigwig`:return qe(t,r);case`bigbed`:return Ke(t,n,r)}}var rt=class{rTreeNodeCache=new n({maxSize:1e3,cacheKey:({length:e,offset:t,tag:n})=>n??`${e}_${t}`,fill:({length:e,offset:t},n)=>this.bbi.read(e,t,{signal:n})});bbi;refsByName;rTreeOffset;uncompressBufSize;blockType;constructor(e,t,n,r,i){if(!(n>=0))throw Error(`invalid rTreeOffset!`);this.bbi=e,this.refsByName=t,this.rTreeOffset=n,this.uncompressBufSize=r,this.blockType=i}async _collectBlocks(e,t,n,r){let i=this.refsByName[e];if(i===void 0||t>=n)return;let a=D(await this.rTreeNodeCache.get({length:48,offset:this.rTreeOffset,tag:`rtreeheader_${this.rTreeOffset}`},r?.signal)),o=a.getUint32(0,!0);if(o!==Re)throw Error(`invalid cirTree magic: 0x${o.toString(16)} (expected 0x${Re.toString(16)}) at offset ${this.rTreeOffset}, file may be corrupt or unsupported`);let s=4+a.getUint32(4,!0)*32,c=(e,r,a,o)=>(e<i||e===i&&r<n)&&(a>i||a===i&&o>t),l=[],u=[this.rTreeOffset+48];for(;u.length>0;){let e=g(u.map(e=>({min:e,max:e+s}))),t=[];await Ie(e,6,({min:e,max:t})=>this.rTreeNodeCache.get({length:t-e,offset:e},r?.signal),(e,{min:n,max:r})=>{let i=n;for(let a of u)if(n<=a&&a<=r){let n=D(e.subarray(a-i)),r=n.getUint8(0),o=n.getUint16(2,!0);if(r===1||r===0){let e=r===1?32:24,i=4;for(let a=0;a<o;a++){let a=n.getUint32(i,!0),o=n.getUint32(i+4,!0),s=n.getUint32(i+8,!0),u=n.getUint32(i+12,!0);if(c(a,o,s,u)){let e=O(n,i+16);r===1?l.push({offset:e,length:O(n,i+24)}):t.push(e)}i+=e}}}}),u=t}return{blocks:l,chrId:i}}async readWigData(e,t,n,r){let i=await this._collectBlocks(e,t,n,r);return this.readFeatures(i?.blocks??[],{...r,request:{chrId:i?.chrId??0,start:t,end:n}})}async getBlockSizeForRange(e,t,n,r){let i=await this._collectBlocks(e,t,n,r),a=0;if(i)for(let e of i.blocks)a+=e.length;return a}async getBlockSizeForRangeMulti(e,t={}){let{blockByOffset:n}=await this._collectBlocksMulti(e,t),r=0;for(let e of n.values())r+=e.length;return r}async _collectBlocksMulti(e,t){let n=await Promise.all(e.map(({refName:e,start:n,end:r})=>this._collectBlocks(e,n,r,t))),r=/* @__PURE__ */ new Map,i=/* @__PURE__ */ new Map;for(let t=0;t<n.length;t++){let a=n[t];if(a){let{start:n,end:o}=e[t],s={chrId:a.chrId,start:n,end:o};for(let e of a.blocks){let n=i.get(e.offset);n?n.push({regionIndex:t,request:s}):(r.set(e.offset,e),i.set(e.offset,[{regionIndex:t,request:s}]))}}}return{blockByOffset:r,tagsByOffset:i}}async _forEachTaggedBlock({blockByOffset:e,tagsByOffset:t},n,r){await this._forEachDecodedBlock([...e.values()],n.signal,n.onProgress,(e,n)=>{let i=t.get(n);if(i)for(let t of i)r(e,n,t)})}async readWigDataMulti(e,t={}){let n=e.map(()=>[]),r=await this._collectBlocksMulti(e,t),{blockType:i}=this;return await this._forEachTaggedBlock(r,t,(e,t,{regionIndex:r,request:a})=>{let o=nt(i,e,t,a);for(let e of o)n[r].push(e)}),n}assertNotBigBed(e){if(this.blockType===`bigbed`)throw Error(`${e} is not supported for BigBed data; use getFeatures/getFeaturesMulti instead`)}async readWigDataAsArrays(e,t,n,r){this.assertNotBigBed(`getFeaturesAsArrays`);let i=await this._collectBlocks(e,t,n,r),a=i?.blocks??[],o={chrId:i?.chrId??0,start:t,end:n};return this.blockType===`summary`?this._readSummaryFeaturesAsArrays(a,o,r):this._readBigWigFeaturesAsArrays(a,o,r)}async readWigDataAsArraysMulti(e,t={}){this.assertNotBigBed(`getFeaturesAsArraysMulti`);let n=e.length===1?e[0]:void 0;if(n){let e=await this.readWigDataAsArrays(n.refName,n.start,n.end,t);return{...e,regionOffsets:[0,e.starts.length]}}let r=await this._collectBlocksMulti(e,t);return this.blockType===`summary`?tt(await this._readBlocksAsArraysMulti(r,e.length,Ye,t)):et(await this._readBlocksAsArraysMulti(r,e.length,Je,t))}async _readBlocksAsArraysMulti(e,t,n,r){let i=Array.from({length:t},()=>[]);return await this._forEachTaggedBlock(e,r,(e,t,{regionIndex:r,request:a})=>{let o=n(e,a);o.starts.length>0&&i[r].push(o)}),i}async _forEachBlockGroup(e,t,n,r){let i=Le(e),a=ze(i,n);await Ie(i,6,async e=>{let n=await this.bbi.read(e.length,e.offset,{signal:t});return a(e.length),n},(e,t)=>r(e,t.blocks.map(e=>({offset:e.offset-t.offset,length:e.length})),t.offset))}async _forEachDecodedBlock(e,t,n,r){let{uncompressBufSize:i}=this;await this._forEachBlockGroup(e,t,n,async(e,t,n)=>{if(i>0){let{data:a,offsets:o}=await je(e,t,i);for(let e=0;e<t.length;e++)r(a.subarray(o[e],o[e+1]),n+t[e].offset)}else for(let i of t)r(e.subarray(i.offset,i.offset+i.length),n+i.offset)})}async readFeatures(e,t={}){let{blockType:n}=this,{signal:r,request:i,onProgress:a}=t,o=[];return await this._forEachDecodedBlock(e,r,a,(e,t)=>{let r=nt(n,e,t,i);for(let e of r)o.push(e)}),o}async _readBlocksAsArrays(e,t,n,r,i){let{uncompressBufSize:a}=this,o=[],s=e=>{e.starts.length>0&&o.push(e)};return await this._forEachBlockGroup(e,t,i,async(e,t)=>{if(a>0)s(await n(e,t));else for(let n of t)s(r(e.subarray(n.offset,n.offset+n.length)))}),o}async _readBigWigFeaturesAsArrays(e,t,n={}){return Ze(await this._readBlocksAsArrays(e,n.signal,(e,n)=>Me(e,n,this.uncompressBufSize,t.start,t.end),e=>Je(e,t),n.onProgress))}async _readSummaryFeaturesAsArrays(e,t,n={}){return Qe(await this._readBlocksAsArrays(e,n.signal,(e,n)=>Ne(e,n,this.uncompressBufSize,t.chrId,t.start,t.end),e=>Ye(e,t),n.onProgress))}};const it=-2021002517;var at=class{bbi;headerCache=new n({maxSize:1,cacheKey:()=>`header`,fill:(e,t)=>this._getHeader({signal:t})});getHeader(e){return this.headerCache.get(void 0,e?.signal)}constructor(e){let{filehandle:t,path:n,url:r}=e;if(t)this.bbi=t;else if(r)this.bbi=new m(r);else if(n)this.bbi=new h(n);else throw Error(`no file given`)}async _getHeader(e){let t=await this._getMainHeader(e),n=await this._readChromosomeTree(t,e);return{...t,...n}}async _getMainHeader(e,t=2e3){let n=await this.bbi.read(t,0,e),r=D(n),i=0,a=r.getInt32(i,!0);if(i+=4,a!==-2003829722&&a!==it)throw Error(`not a BigWig/BigBed file`);let o=r.getUint16(i,!0);i+=2;let s=r.getUint16(i,!0);i+=2;let c=O(r,i);i+=8;let l=O(r,i);i+=8;let u=O(r,i);i+=8;let d=r.getUint16(i,!0);i+=2;let f=r.getUint16(i,!0);i+=2;let p=O(r,i);i+=8;let m=O(r,i);i+=8;let h=r.getUint32(i,!0);i+=4;let g=O(r,i);i+=8;let _=[];for(let e=0;e<s;e++){let e=r.getUint32(i,!0);i+=4,i+=4;let t=O(r,i);i+=8;let n=O(r,i);i+=8,_.push({reductionLevel:e,dataOffset:t,indexOffset:n})}let ee=a===it?`bigbed`:`bigwig`,v=n.length<t,te=p!==0&&!n.includes(0,p);if(!v&&(p>t||m>t-40||te))return this._getMainHeader(e,t*2);let ne;if(m){if(m+40>n.length)throw Error(`totalSummary at offset ${m} extends past the end of the file (${n.length} bytes), file may be truncated or corrupt`);let e=D(n,m);ne={basesCovered:O(e,0),scoreMin:e.getFloat64(8,!0),scoreMax:e.getFloat64(16,!0),scoreSum:e.getFloat64(24,!0),scoreSumSquares:e.getFloat64(32,!0)}}else throw Error(`no stats`);let re=``;if(p){let e=n.indexOf(0,p),t=e===-1?n.length:e;re=Pe.decode(n.subarray(p,t))}return{zoomLevels:_,magic:a,extHeaderOffset:g,numZoomLevels:s,fieldCount:d,totalSummary:ne,definedFieldCount:f,uncompressBufSize:h,asOffset:p,chromosomeTreeOffset:c,totalSummaryOffset:m,unzoomedDataOffset:l,unzoomedIndexOffset:u,fileType:ee,version:o,autoSql:re}}async _readChromosomeTree(e,t){let n=[],r={},i=e.chromosomeTreeOffset,a=D(await this.bbi.read(32,i,t)),o=a.getUint32(4,!0),s=a.getUint32(8,!0),c=a.getUint32(12,!0),l=4+o*(s+Math.max(c,8)),u=async e=>{let i=await this.bbi.read(l,e,t),a=D(i),o=a.getUint8(0),c=a.getUint16(2,!0),d=4;if(o)for(let e=0;e<c;e++){let e=Fe(i,d,s);d+=s;let t=a.getUint32(d,!0);d+=4;let o=a.getUint32(d,!0);d+=4,r[e]=t,n[t]={name:e,id:t,length:o}}else{let e=[];for(let t=0;t<c;t++){d+=s;let t=O(a,d);d+=8,e.push(u(t))}await Promise.all(e)}};return await u(i+32),{refsByName:r,refsByNumber:n}}viewCache=/* @__PURE__ */ new Map;getOrCreateBlockView(e,t,n,r){let i=`${t}_${r}`,a=this.viewCache.get(i);return a||(a=new rt(this.bbi,e,t,n,r),this.viewCache.set(i,a)),a}async getUnzoomedView(e){let{unzoomedIndexOffset:t,refsByName:n,uncompressBufSize:r,fileType:i}=await this.getHeader(e);return this.getOrCreateBlockView(n,t,r,i)}async _getView(e){let{basesPerSpan:t,scale:n}=e??{},r=t?1/t:n??1;return this.getView(r,e)}async getFeatures(e,t,n,r){return(await this._getView(r)).readWigData(e,t,n,r)}async getRegionByteSize(e,t,n,r){return(await this._getView(r)).getBlockSizeForRange(e,t,n,r)}async getRegionByteSizeMulti(e,t){return(await this._getView(t)).getBlockSizeForRangeMulti(e,t)}async getFeaturesMulti(e,t){return(await this._getView(t)).readWigDataMulti(e,t)}async getFeaturesAsArrays(e,t,n,r){return(await this._getView(r)).readWigDataAsArrays(e,t,n,r)}async getFeaturesAsArraysMulti(e,t){return(await this._getView(t)).readWigDataAsArraysMulti(e,t)}},ot=class extends at{async getView(e,t){let{zoomLevels:n,refsByName:r,uncompressBufSize:i}=await this.getHeader(t),a=1/e,o=n.length-1;for(let e=o;e>=0;--e){let t=n[e];if(t.reductionLevel<=2*a)return this.getOrCreateBlockView(r,t.indexOffset,i,`summary`)}return this.getUnzoomedView(t)}};
|
|
2
|
+
/**
|
|
3
|
+
* @license
|
|
4
|
+
* Copyright 2019 Google LLC
|
|
5
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
6
|
+
*/
|
|
7
|
+
const st=Symbol(`Comlink.proxy`),ct=Symbol(`Comlink.endpoint`),lt=Symbol(`Comlink.releaseProxy`),ut=Symbol(`Comlink.finalizer`),dt=Symbol(`Comlink.thrown`),ft=e=>typeof e==`object`&&!!e||typeof e==`function`,pt=/* @__PURE__ */ new Map([[`proxy`,{canHandle:e=>ft(e)&&e[st],serialize(e){let{port1:t,port2:n}=new MessageChannel;return ht(e,t),[n,[n]]},deserialize(e){return e.start(),vt(e)}}],[`throw`,{canHandle:e=>ft(e)&&dt in e,serialize({value:e}){let t;return t=e instanceof Error?{isError:!0,value:{message:e.message,name:e.name,stack:e.stack}}:{isError:!1,value:e},[t,[]]},deserialize(e){throw e.isError?Object.assign(Error(e.value.message),e.value):e.value}}]]);function mt(e,t){for(let n of e)if(t===n||n===`*`||n instanceof RegExp&&n.test(t))return!0;return!1}function ht(e,t=globalThis,n=[`*`]){t.addEventListener(`message`,function r(i){if(!i||!i.data)return;if(!mt(n,i.origin)){console.warn(`Invalid origin '${i.origin}' for comlink proxy`);return}let{id:a,type:o,path:s}=Object.assign({path:[]},i.data),c=(i.data.argumentList||[]).map(F),l;try{let t=s.slice(0,-1).reduce((e,t)=>e[t],e),n=s.reduce((e,t)=>e[t],e);switch(o){case`GET`:l=n;break;case`SET`:t[s.slice(-1)[0]]=F(i.data.value),l=!0;break;case`APPLY`:l=n.apply(t,c);break;case`CONSTRUCT`:l=Dt(new n(...c));break;case`ENDPOINT`:{let{port1:t,port2:n}=new MessageChannel;ht(e,n),l=N(t,[t])}break;case`RELEASE`:l=void 0;break;default:return}}catch(e){l={value:e,[dt]:0}}Promise.resolve(l).catch(e=>({value:e,[dt]:0})).then(n=>{let[i,s]=P(n);t.postMessage(Object.assign(Object.assign({},i),{id:a}),s),o===`RELEASE`&&(t.removeEventListener(`message`,r),_t(t),ut in e&&typeof e[ut]==`function`&&e[ut]())}).catch(e=>{let[n,r]=P({value:/* @__PURE__ */ TypeError(`Unserializable return value`),[dt]:0});t.postMessage(Object.assign(Object.assign({},n),{id:a}),r)})}),t.start&&t.start()}function gt(e){return e.constructor.name===`MessagePort`}function _t(e){gt(e)&&e.close()}function vt(e,t){let n=/* @__PURE__ */ new Map;return e.addEventListener(`message`,function(e){let{data:t}=e;if(!t||!t.id)return;let r=n.get(t.id);if(r)try{r(t)}finally{n.delete(t.id)}}),Ct(e,n,[],t)}function yt(e){if(e)throw Error(`Proxy has been released and is not useable`)}function bt(e){return I(e,/* @__PURE__ */ new Map,{type:`RELEASE`}).then(()=>{_t(e)})}const j=/* @__PURE__ */ new WeakMap,M=`FinalizationRegistry`in globalThis&&new FinalizationRegistry(e=>{let t=(j.get(e)||0)-1;j.set(e,t),t===0&&bt(e)});function xt(e,t){let n=(j.get(t)||0)+1;j.set(t,n),M&&M.register(e,t,e)}function St(e){M&&M.unregister(e)}function Ct(e,t,n=[],r=function(){}){let i=!1,a=new Proxy(r,{get(r,o){if(yt(i),o===lt)return()=>{St(a),bt(e),t.clear(),i=!0};if(o===`then`){if(n.length===0)return{then:()=>a};let r=I(e,t,{type:`GET`,path:n.map(e=>e.toString())}).then(F);return r.then.bind(r)}return Ct(e,t,[...n,o])},set(r,a,o){yt(i);let[s,c]=P(o);return I(e,t,{type:`SET`,path:[...n,a].map(e=>e.toString()),value:s},c).then(F)},apply(r,a,o){yt(i);let s=n[n.length-1];if(s===ct)return I(e,t,{type:`ENDPOINT`}).then(F);if(s===`bind`)return Ct(e,t,n.slice(0,-1));let[c,l]=Tt(o);return I(e,t,{type:`APPLY`,path:n.map(e=>e.toString()),argumentList:c},l).then(F)},construct(r,a){yt(i);let[o,s]=Tt(a);return I(e,t,{type:`CONSTRUCT`,path:n.map(e=>e.toString()),argumentList:o},s).then(F)}});return xt(a,e),a}function wt(e){return Array.prototype.concat.apply([],e)}function Tt(e){let t=e.map(P);return[t.map(e=>e[0]),wt(t.map(e=>e[1]))]}const Et=/* @__PURE__ */ new WeakMap;function N(e,t){return Et.set(e,t),e}function Dt(e){return Object.assign(e,{[st]:!0})}function P(e){for(let[t,n]of pt)if(n.canHandle(e)){let[r,i]=n.serialize(e);return[{type:`HANDLER`,name:t,value:r},i]}return[{type:`RAW`,value:e},Et.get(e)||[]]}function F(e){switch(e.type){case`HANDLER`:return pt.get(e.name).deserialize(e.value);case`RAW`:return e.value}}function I(e,t,n,r){return new Promise(i=>{let a=Ot();t.set(a,i),e.start&&e.start(),e.postMessage(Object.assign({id:a},n),r)})}function Ot(){return[,,,,].fill(0).map(()=>Math.floor(Math.random()*(2**53-1)).toString(16)).join(`-`)}const kt=[Int8Array,Uint8Array,Uint8ClampedArray,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array],L=/* @__PURE__ */ new Uint32Array(96);var At=class e{static from(t){if(!t||t.byteLength===void 0||t.buffer)throw Error(`Data must be an instance of ArrayBuffer or SharedArrayBuffer.`);let[n,r]=new Uint8Array(t,0,2);if(n!==219)throw Error(`Data does not appear to be in a KDBush format.`);let i=r>>4;if(i!==1)throw Error(`Got v${i} data when expected v1.`);let a=kt[r&15];if(!a)throw Error(`Unrecognized array type.`);let[o]=new Uint16Array(t,2,1),[s]=new Uint32Array(t,4,1);return new e(s,o,a,void 0,t)}constructor(e,t=64,n=Float64Array,r=ArrayBuffer,i){if(isNaN(e)||e<0)throw Error(`Unexpected numItems value: ${e}.`);this.numItems=+e,this.nodeSize=Math.min(Math.max(+t,2),65535),this.ArrayType=n,this.IndexArrayType=e<65536?Uint16Array:Uint32Array;let a=kt.indexOf(this.ArrayType),o=e*2*this.ArrayType.BYTES_PER_ELEMENT,s=e*this.IndexArrayType.BYTES_PER_ELEMENT,c=(8-s%8)%8;if(a<0)throw Error(`Unexpected typed array class: ${n}.`);if(i)this.data=i,this.ids=new this.IndexArrayType(i,8,e),this.coords=new n(i,8+s+c,e*2),this._pos=e*2,this._finished=!0;else{let i=this.data=new r(8+o+s+c);this.ids=new this.IndexArrayType(i,8,e),this.coords=new n(i,8+s+c,e*2),this._pos=0,this._finished=!1,new Uint8Array(i,0,2).set([219,16+a]),new Uint16Array(i,2,1)[0]=t,new Uint32Array(i,4,1)[0]=e}}add(e,t){let n=this._pos>>1;return this.ids[n]=n,this.coords[this._pos++]=e,this.coords[this._pos++]=t,n}finish(){let e=this._pos>>1;if(e!==this.numItems)throw Error(`Added ${e} items when expected ${this.numItems}.`);return jt(this.ids,this.coords,this.nodeSize,0,this.numItems-1,0),this._finished=!0,this}range(e,t,n,r){if(!this._finished)throw Error(`Data not yet indexed - call index.finish().`);let{ids:i,coords:a,nodeSize:o}=this;L[0]=0,L[1]=i.length-1,L[2]=0;let s=3,c=[];for(;s>0;){let l=L[--s],u=L[--s],d=L[--s];if(u-d<=o){for(let o=d;o<=u;o++){let s=a[2*o],l=a[2*o+1];s>=e&&s<=n&&l>=t&&l<=r&&c.push(i[o])}continue}let f=d+u>>1,p=a[2*f],m=a[2*f+1];p>=e&&p<=n&&m>=t&&m<=r&&c.push(i[f]),(l===0?e<=p:t<=m)&&(L[s++]=d,L[s++]=f-1,L[s++]=1-l),(l===0?n>=p:r>=m)&&(L[s++]=f+1,L[s++]=u,L[s++]=1-l)}return c}within(e,t,n){let r=[];return this.withinInto(e,t,n,r),r}withinInto(e,t,n,r){if(!this._finished)throw Error(`Data not yet indexed - call index.finish().`);let{ids:i,coords:a,nodeSize:o}=this;L[0]=0,L[1]=i.length-1,L[2]=0;let s=3,c=0,l=n*n;for(;s>0;){let u=L[--s],d=L[--s],f=L[--s];if(d-f<=o){for(let n=f;n<=d;n++)Pt(a[2*n],a[2*n+1],e,t)<=l&&(r[c++]=i[n]);continue}let p=f+d>>1,m=a[2*p],h=a[2*p+1];Pt(m,h,e,t)<=l&&(r[c++]=i[p]),(u===0?e-n<=m:t-n<=h)&&(L[s++]=f,L[s++]=p-1,L[s++]=1-u),(u===0?e+n>=m:t+n>=h)&&(L[s++]=p+1,L[s++]=d,L[s++]=1-u)}return c}};function jt(e,t,n,r,i,a){if(i-r<=n)return;let o=r+i>>1;Mt(e,t,o,r,i,a),jt(e,t,n,r,o-1,1-a),jt(e,t,n,o+1,i,1-a)}function Mt(e,t,n,r,i,a){for(;i>r;){if(i-r>600){let o=i-r+1,s=n-r+1,c=Math.log(o),l=.5*Math.exp(2*c/3),u=.5*Math.sqrt(c*l*(o-l)/o)*(s-o/2<0?-1:1);Mt(e,t,n,Math.max(r,Math.floor(n-s*l/o+u)),Math.min(i,Math.floor(n+(o-s)*l/o+u)),a)}let o=t[2*n+a],s=r,c=i;for(R(e,t,r,n),t[2*i+a]>o&&R(e,t,r,i);s<c;){for(R(e,t,s,c),s++,c--;t[2*s+a]<o;)s++;for(;t[2*c+a]>o;)c--}t[2*r+a]===o?R(e,t,r,c):(c++,R(e,t,c,i)),c<=n&&(r=c+1),n<=c&&(i=c-1)}}function R(e,t,n,r){Nt(e,n,r),Nt(t,2*n,2*r),Nt(t,2*n+1,2*r+1)}function Nt(e,t,n){let r=e[t];e[t]=e[n],e[n]=r}function Pt(e,t,n,r){let i=e-n,a=t-r;return i*i+a*a}function Ft(e,t){return{...e,...t,headers:{...e.headers,...t.headers}}}function It(e,t){let n=typeof e==`string`?new URL(e):e;n.pathname.endsWith(`/`)||(n.pathname+=`/`);let r=new URL(t.slice(1),n);return r.search=n.search,r}async function Lt(e){if(e.status!==404){if(e.status===200||e.status===206)return new Uint8Array(await e.arrayBuffer());throw Error(`Unexpected response status ${e.status} ${e.statusText}`)}}var Rt=class{url;#e;#t;#n;constructor(e,t={}){this.url=e,this.#e=t.fetch??(e=>fetch(e)),this.#t=t.overrides??{},this.#n=t.useSuffixRequest??!1}#r(e,t){return new Request(e,Ft(this.#t,t))}async get(e,t={}){let n=It(this.url,e).href,r=this.#r(n,t);return Lt(await this.#e(r))}async getRange(e,t,n={}){let r=It(this.url,e),i;if(`suffixLength`in t)i=await this.#i(r,t.suffixLength,n);else{let e={...n,headers:{...n.headers,Range:`bytes=${t.offset}-${t.offset+t.length-1}`}},a=this.#r(r,e);i=await this.#e(a)}return Lt(i)}async#i(e,t,n){if(this.#n){let r={...n,headers:{...n.headers,Range:`bytes=-${t}`}};return this.#e(this.#r(e,r))}let r=this.#r(e,{...n,method:`HEAD`}),i=await this.#e(r);if(!i.ok)return i;let a=i.headers.get(`Content-Length`),o=Number(a),s=o-t,c={...n,headers:{...n.headers,Range:`bytes=${s}-${o-1}`}};return this.#e(this.#r(e,c))}},z=class extends Error{},B=class extends z{_tag=`NotFoundError`;name=`NotFoundError`;path;found;constructor(e,t={}){super(`Not found: ${e}`,{cause:t.cause}),this.path=t.path,this.found=t.found}},V=class extends z{_tag=`InvalidMetadataError`;name=`InvalidMetadataError`;path;constructor(e,t={}){super(e,{cause:t.cause}),this.path=t.path}},zt=class extends z{_tag=`UnknownCodecError`;name=`UnknownCodecError`;codec;constructor(e){super(`Unknown codec: ${e}`),this.codec=e}},Bt=class extends z{_tag=`CodecPipelineError`;name=`CodecPipelineError`;direction;codec;chunkPath;constructor(e){let t=[`Failed to ${e.direction} chunk`,e.codec&&`via codec "${e.codec}"`,e.chunkPath&&`at ${e.chunkPath}`].filter(Boolean);super(t.join(` `),{cause:e.cause}),this.direction=e.direction,this.codec=e.codec,this.chunkPath=e.chunkPath}},H=class extends z{_tag=`InvalidSelectionError`;name=`InvalidSelectionError`},Vt=class extends z{_tag=`UnsupportedError`;name=`UnsupportedError`;feature;constructor(e){super(`Unsupported: ${e}`),this.feature=e}};function U(e){return()=>{throw new Vt(`${e} encode`)}}var Ht=class e{kind=`array_to_array`;constructor(e,t){if(e.keepbits<0)throw new V(`keepbits must be zero or positive`)}static fromConfig(t,n){return new e(t,n)}encode=U(`bitround`);decode(e){return e}};function Ut(e){return e instanceof ArrayBuffer||e instanceof SharedArrayBuffer}var Wt=class{#e;constructor(e,t,n){this.#e=typeof e==`number`?new Uint8Array(e):Ut(e)?new Uint8Array(e,t,n):new Uint8Array(Array.from(e,e=>+!!e))}get BYTES_PER_ELEMENT(){return 1}get byteOffset(){return this.#e.byteOffset}get byteLength(){return this.#e.byteLength}get buffer(){return this.#e.buffer}get length(){return this.#e.length}get(e){let t=this.#e[e];return typeof t==`number`?t!==0:t}set(e,t){this.#e[e]=+!!t}fill(e){this.#e.fill(+!!e)}*[Symbol.iterator](){for(let e=0;e<this.length;e++)yield this.get(e)}},Gt=class{_data;chars;#e;constructor(e,t,n,r){if(this.chars=e,this.#e=new TextEncoder,typeof t==`number`)this._data=new Uint8Array(t*e);else if(Ut(t))r&&(r*=e),this._data=new Uint8Array(t,n,r);else{let n=Array.from(t);this._data=new Uint8Array(n.length*e);for(let e=0;e<n.length;e++)this.set(e,n[e])}}get BYTES_PER_ELEMENT(){return this.chars}get byteOffset(){return this._data.byteOffset}get byteLength(){return this._data.byteLength}get buffer(){return this._data.buffer}get length(){return this.byteLength/this.BYTES_PER_ELEMENT}get(e){let t=new Uint8Array(this.buffer,this.byteOffset+this.chars*e,this.chars);return new TextDecoder().decode(t).replace(/\x00/g,``)}set(e,t){let n=new Uint8Array(this.buffer,this.byteOffset+this.chars*e,this.chars);n.fill(0),n.set(this.#e.encode(t))}fill(e){let t=this.#e.encode(e);for(let e=0;e<this.length;e++)this._data.set(t,e*this.chars)}*[Symbol.iterator](){for(let e=0;e<this.length;e++)yield this.get(e)}},Kt=class e{#e;chars;constructor(t,n,r,i){if(this.chars=t,typeof n==`number`)this.#e=new Int32Array(n*t);else if(Ut(n))i&&(i*=t),this.#e=new Int32Array(n,r,i);else{let r=n,i=new e(t,1);this.#e=new Int32Array((function*(){for(let e of r)i.set(0,e),yield*i.#e})())}}get BYTES_PER_ELEMENT(){return this.#e.BYTES_PER_ELEMENT*this.chars}get byteLength(){return this.#e.byteLength}get byteOffset(){return this.#e.byteOffset}get buffer(){return this.#e.buffer}get length(){return this.#e.length/this.chars}get(e){let t=this.chars*e,n=``;for(let e=0;e<this.chars;e++)n+=String.fromCodePoint(this.#e[t+e]);return n.replace(/\u0000/g,``)}set(e,t){let n=this.chars*e,r=this.#e.subarray(n,n+this.chars);r.fill(0);for(let e=0;e<this.chars;e++)r[e]=t.codePointAt(e)??0}fill(e){this.set(0,e);let t=this.#e.subarray(0,this.chars);for(let e=1;e<this.length;e++)this.#e.set(t,e*this.chars)}*[Symbol.iterator](){for(let e=0;e<this.length;e++)yield this.get(e)}};function qt(){if(typeof SharedArrayBuffer>`u`)throw Error(`SharedArrayBuffer is not available. In browsers, this requires Cross-Origin-Opener-Policy and Cross-Origin-Embedder-Policy headers to be set.`)}function Jt(e,t){return t?new SharedArrayBuffer(e):new ArrayBuffer(e)}function W(e){let t=new TextDecoder().decode(e);try{return JSON.parse(t)}catch(e){throw new V(`Failed to decode JSON`,{cause:e})}}function Yt(e,t){let n=t/2,r=t-1,i=0;for(let a=0;a<e.length;a+=t)for(let t=0;t<n;t+=1)i=e[a+t],e[a+t]=e[a+r-t],e[a+r-t]=i}function G(e){if(e===`v2:object`)return globalThis.Array;let t=e.match(/v2:([US])(\d+)/);if(t){let[,e,n]=t;return(e===`U`?Kt:Gt).bind(null,Number(n))}if(e===`string`)return globalThis.Array;let n={int8:Int8Array,int16:Int16Array,int32:Int32Array,int64:globalThis.BigInt64Array,uint8:Uint8Array,uint16:Uint16Array,uint32:Uint32Array,uint64:globalThis.BigUint64Array,float16:globalThis.Float16Array,float32:Float32Array,float64:Float64Array,bool:Wt}[e];if(!n)throw new V(`Unknown or unsupported dataType: ${e}`);return n}function K(e,t){let n=e.length;typeof t==`string`&&(t=t===`C`?Array.from({length:n},(e,t)=>t):Array.from({length:n},(e,t)=>n-1-t)),q(n===t.length,`Order length must match the number of dimensions.`);let r=1,i=Array(n);for(let n=t.length-1;n>=0;n--)i[t[n]]=r,r*=e[t[n]];return i}function Xt({name:e,configuration:t}){if(e==="default"){let e=t?.separator??`/`;return t=>[`c`,...t].join(e)}if(e===`v2`){let e=t?.separator??`.`;return t=>t.join(e)||`0`}throw new V(`Unknown chunk key encoding: ${e}`)}function Zt(e){if(e===`|O`)return{dataType:`v2:object`};let t=e.match(/^([<|>])(.*)$/);if(!t)throw new V(`Invalid dtype: ${e}`);let[,n,r]=t,i={b1:`bool`,i1:`int8`,u1:`uint8`,i2:`int16`,u2:`uint16`,i4:`int32`,u4:`uint32`,i8:`int64`,u8:`uint64`,f2:`float16`,f4:`float32`,f8:`float64`}[r]??(r.startsWith(`S`)||r.startsWith(`U`)?`v2:${r}`:void 0);if(!i)throw new V(`Unsupported or unknown dtype: ${e}`);return n===`|`?{dataType:i}:{dataType:i,endian:n===`<`?`little`:`big`}}function Qt(e){return(e.id===`fixedscaleoffset`||e.id===`numcodecs.fixedscaleoffset`)&&typeof e.scale==`number`&&typeof e.offset==`number`&&(e.astype===void 0||typeof e.astype==`string`)&&(e.dtype===void 0||typeof e.dtype==`string`)}function $t(e,t={}){let n=[],r=Zt(e.dtype);e.order===`F`&&n.push({name:`transpose`,configuration:{order:`F`}});for(let t of e.filters??[]){if(t.id===`fixedscaleoffset`||t.id===`numcodecs.fixedscaleoffset`){if(!Qt(t))throw new V(`Invalid fixedscaleoffset filter: ${JSON.stringify(t)}`);n.push({name:`scale_offset`,configuration:{scale:t.scale,offset:t.offset}});let r=t.astype??t.dtype;if(r!==void 0&&r!==e.dtype){let e=Zt(r).dataType;if(!tn(e,`number`)&&!tn(e,`bigint`))throw new V(`fixedscaleoffset astype must be a numeric data type, got ${r}`);n.push({name:`cast_value`,configuration:{data_type:e,rounding:`nearest-even`,out_of_range:`wrap`}})}continue}let{id:r,...i}=t;n.push({name:`numcodecs.${r}`,configuration:i})}if(`endian`in r&&r.endian===`big`&&n.push({name:`bytes`,configuration:{endian:`big`}}),e.compressor){let{id:t,...r}=e.compressor;n.push({name:`numcodecs.${t}`,configuration:r})}let i;return globalThis.Array.isArray(t._ARRAY_DIMENSIONS)&&(i=t._ARRAY_DIMENSIONS),{zarr_format:3,node_type:`array`,shape:e.shape,data_type:r.dataType,chunk_grid:{name:`regular`,configuration:{chunk_shape:e.chunks}},chunk_key_encoding:{name:`v2`,configuration:{separator:e.dimension_separator??`.`}},codecs:n,fill_value:e.fill_value,dimension_names:i,attributes:t}}function en(e,t={}){return{zarr_format:3,node_type:`group`,attributes:t}}function tn(e,t){if(t!==`number`&&t!==`bigint`&&t!==`boolean`&&t!==`object`&&t!==`string`)return e===t;let n=e===`bool`;if(t===`boolean`)return n;let r=e.startsWith(`v2:U`)||e.startsWith(`v2:S`)||e===`string`;if(t===`string`)return r;let i=e===`int64`||e===`uint64`;if(t===`bigint`)return i;let a=e===`v2:object`;return t===`object`?a:!r&&!i&&!n&&!a}function nn(e){return e?.name===`sharding_indexed`}function rn(e){if((e.data_type===`uint64`||e.data_type===`int64`)&&e.fill_value!=null)return BigInt(e.fill_value);let t=e.data_type===`float16`||e.data_type===`float32`||e.data_type===`float64`;if(typeof e.fill_value==`string`&&t){let t={NaN:NaN,Infinity:1/0,"-Infinity":-1/0};if(e.fill_value in t)return t[e.fill_value]}return e.fill_value}function an(e){let t=e.signal,n=e.opts?.signal;return t&&n?AbortSignal.any([t,n]):t??n}function on(e,...t){if(!t.some(t=>e instanceof t))throw e}function q(e,t=``){if(!e)throw Error(t)}async function sn(e,{format:t,signal:n}){let r;if(e instanceof ArrayBuffer)r=new Response(e);else{let t=new Uint8Array(e.buffer,e.byteOffset,e.byteLength);r=new Response(t.slice().buffer)}q(r.body,`Response does not contain body.`);try{return await new Response(r.body.pipeThrough(new DecompressionStream(t),{signal:n})).arrayBuffer()}catch{throw n?.throwIfAborted(),Error(`Failed to decode ${t}`)}}const cn=ln();function ln(){let e=new Uint32Array([305419896]);return new Uint8Array(e.buffer,e.byteOffset,e.byteLength)[0]!==18}function un(e){return`BYTES_PER_ELEMENT`in e?e.BYTES_PER_ELEMENT:4}var dn=class e{kind=`array_to_bytes`;#e;#t;#n;#r;#i;constructor(e,t){this.#i=e?.endian,this.#t=G(t.dataType),this.#r=t.shape,this.#e=K(t.shape,`C`);let n=new this.#t(0);this.#n=n.BYTES_PER_ELEMENT}static fromConfig(t,n){return new e(t,n)}encode(e){let t=new Uint8Array(e.data.buffer);return cn&&this.#i===`big`&&(t=t.slice(),Yt(t,un(this.#t))),t}computeEncodedSize(e){return e}decode(e){return cn&&this.#i===`big`&&(e=e.slice(),Yt(e,un(this.#t))),e.byteOffset%this.#n!==0&&(e=e.slice()),{data:new this.#t(e.buffer,e.byteOffset,e.byteLength/this.#n),shape:this.#r,stride:this.#e}}};const fn={NaN:NaN,Infinity:1/0,"-Infinity":-1/0},pn={float16:2,float32:4,float64:8};function mn(e){return e in pn}function hn(e){return e===`int64`||e===`uint64`}function gn(e,t){let n=BigInt(e),r=new ArrayBuffer(t),i=new DataView(r);if(t===2){if(typeof i.getFloat16!=`function`)throw new Vt(`float16 hex-encoded scalar decoding (requires DataView.prototype.getFloat16)`);return i.setUint16(0,Number(n)),i.getFloat16(0)}return t===4?(i.setUint32(0,Number(n)),i.getFloat32(0)):(i.setBigUint64(0,n),i.getFloat64(0))}function _n(e,t){if(hn(e)){if(typeof t!=`number`||!Number.isInteger(t))throw new V(`Expected an integer value for data type "${e}", got ${JSON.stringify(t)}`);return BigInt(t)}if(typeof t==`number`){if(!mn(e)&&!Number.isInteger(t))throw new V(`Expected an integer value for data type "${e}", got ${t}`);return t}if(!mn(e))throw new V(`String-encoded scalar "${t}" is not valid for non-float data type "${e}"`);return t in fn?fn[t]:gn(t,pn[e])}const vn=/* @__PURE__ */ new Set([`int8`,`uint8`,`int16`,`uint16`,`int32`,`uint32`,`int64`,`uint64`,`float16`,`float32`,`float64`]),yn={int8:[-128,127],uint8:[0,255],int16:[-(2**15),2**15-1],uint16:[0,2**16-1],int32:[-(2**31),2**31-1],uint32:[0,2**32-1]},bn={int64:[-(2n**63n),2n**63n-1n],uint64:[0n,2n**64n-1n]};function xn(e,t,n){return e.map(([e,r])=>({src:_n(t,e),tgt:_n(n,r)}))}function Sn(e,t){for(let n of t)if(typeof n.src==`number`&&Number.isNaN(n.src)){if(typeof e==`number`&&Number.isNaN(e))return n.tgt}else if(e===n.src)return n.tgt}function Cn(e){if(!Number.isFinite(e))return e;if(Math.abs(e-Math.trunc(e))===.5){let t=Math.floor(e),n=Math.ceil(e);return t%2==0?t:n}return Math.round(e)}function wn(e){return Math.sign(e)*Math.floor(Math.abs(e)+.5)}function Tn(e){switch(e){case`nearest-even`:return Cn;case`towards-zero`:return Math.trunc;case`towards-positive`:return Math.ceil;case`towards-negative`:return Math.floor;case`nearest-away`:return wn}}function En(e,t,n){let r=t-e+1;switch(n){case`clamp`:return n=>n<e?e:n>t?t:n;case`wrap`:return n=>n>=e&&n<=t?n:((n-e)%r+r)%r+e;default:return n=>{if(n>=e&&n<=t)return n;throw Error(`Value ${n} out of range [${e}, ${t}]. Set out_of_range='clamp' or out_of_range='wrap' to handle this.`)}}}function Dn(e,t,n){let r=t-e+1n;switch(n){case`clamp`:return n=>n<e?e:n>t?t:n;case`wrap`:return n=>n>=e&&n<=t?n:((n-e)%r+r)%r+e;default:return n=>{if(n>=e&&n<=t)return n;throw Error(`Value ${n} out of range [${e}, ${t}]. Set out_of_range='clamp' or out_of_range='wrap' to handle this.`)}}}var On=class e{kind=`array_to_array`;#e;#t;#n;#r;constructor(e,t,n,r,i,a){this.#e=t,this.#t=G(e),this.#n=kn(t,e,n,r,i),this.#r=kn(e,t,n,r,a)}getEncodedMeta(e){let t=e.fillValue;return t!=null&&(t=this.#r(t)),{...e,dataType:this.#e,fillValue:t}}static fromConfig(t,n){let r=n.dataType,i=t.data_type;if(!vn.has(r))throw new V(`cast_value codec does not support array data type: ${r}`);if(!vn.has(i))throw new V(`cast_value codec does not support encoded data type: ${i}`);let a=t.rounding??`nearest-even`,o=t.scalar_map?.decode?xn(t.scalar_map.decode,i,r):[],s=t.scalar_map?.encode?xn(t.scalar_map.encode,r,i):[];return new e(r,i,a,t.out_of_range,o,s)}encode=U(`cast_value`);decode(e){let t=e.data,n=new this.#t(t.length);for(let e=0;e<t.length;e++)n[e]=this.#n(t[e]);return{data:n,shape:e.shape,stride:e.stride}}};function kn(e,t,n,r,i){let a=mn(e),o=hn(e),s=mn(t),c=hn(t),l;if(a&&s){if(n!==`nearest-even`)throw new V(`cast_value float -> float only supports "nearest-even" rounding, got "${n}"`);l=e=>e}else if(a&&!s&&!c){let e=Tn(n),i=En(...yn[t],r);l=t=>{if(!Number.isFinite(t))throw Error(`Cannot cast ${t} to integer type without scalar_map`);return i(e(t))}}else if(a&&c){let e=Tn(n),i=Dn(...bn[t],r);l=t=>{if(!Number.isFinite(t))throw Error(`Cannot cast ${t} to integer type without scalar_map`);return i(BigInt(e(t)))}}else if(!a&&!o&&s)l=e=>e;else if(o&&s)l=e=>Number(e);else if(!a&&!o&&!s&&!c)l=En(...yn[t],r);else if(!a&&!o&&c){let e=Dn(...bn[t],r);l=t=>e(BigInt(t))}else if(o&&!s&&!c){let e=En(...yn[t],r);l=t=>e(Number(t))}else if(o&&c)l=Dn(...bn[t],r);else throw Error(`Unhandled type combination: ${e} -> ${t}`);return i.length===0?l:e=>{let t=Sn(e,i);return t===void 0?l(e):t}}var An=class e{kind=`bytes_to_bytes`;static fromConfig(){return new e}encode=U(`crc32c`);decode(e){return new Uint8Array(e.buffer,e.byteOffset,e.byteLength-4)}computeEncodedSize(e){return e+4}};const jn=/* @__PURE__ */ new Set([`int8`,`uint8`,`int16`,`uint16`,`int32`,`uint32`,`int64`,`uint64`,`float16`,`float32`,`float64`]);function Mn(e,t){let n=e.length,r=n===0||t[n-1]===1;for(let i=n-2;i>=0&&r;i--)r=t[i]===t[i+1]*e[i+1];if(r)return;let i=n===0||t[0]===1;for(let r=1;r<n&&i;r++)i=t[r]===t[r-1]*e[r-1];if(!i)throw Error(`DeltaCodec requires C- or Fortran-contiguous strides, got shape=${JSON.stringify(e)} stride=${JSON.stringify(t)}`)}var Nn=class e{kind=`array_to_array`;#e;constructor(e){this.#e=e}static fromConfig(t,n){if(!jn.has(n.dataType))throw new V(`Delta codec does not support data type: ${n.dataType}`);return new e(G(n.dataType))}encode(e){Mn(e.shape,e.stride);let t=e.data,n=new this.#e(t.length);n[0]=t[0];for(let e=1;e<t.length;e++)n[e]=t[e]-t[e-1];return{data:n,shape:e.shape,stride:e.stride}}decode(e){Mn(e.shape,e.stride);let t=e.data,n=new this.#e(t.length);n[0]=t[0];for(let e=1;e<t.length;e++)n[e]=n[e-1]+t[e];return{data:n,shape:e.shape,stride:e.stride}}},Pn=class e{kind=`bytes_to_bytes`;static fromConfig(t){return new e}encode=U(`gzip`);async decode(e){let t=await sn(e,{format:`gzip`});return new Uint8Array(t)}};function Fn(e,t){return q(!Number.isNaN(t),`JsonCodec allow_nan is false but NaN was encountered during encoding.`),q(t!==1/0,`JsonCodec allow_nan is false but Infinity was encountered during encoding.`),q(t!==-1/0,`JsonCodec allow_nan is false but -Infinity was encountered during encoding.`),t}function In(e,t){return t instanceof Object&&!Array.isArray(t)?Object.keys(t).sort().reduce((e,n)=>(e[n]=t[n],e),{}):t}var Ln=class e{configuration;kind=`array_to_bytes`;#e;#t;constructor(e={}){this.configuration=e;let{encoding:t=`utf-8`,skipkeys:n=!1,ensure_ascii:r=!0,check_circular:i=!0,allow_nan:a=!0,sort_keys:o=!0,indent:s,strict:c=!0}=e,l=e.separators;l||=s?[`, `,`: `]:[`,`,`:`],this.#e={encoding:t,skipkeys:n,ensure_ascii:r,check_circular:i,allow_nan:a,indent:s,separators:l,sort_keys:o},this.#t={strict:c}}static fromConfig(t){return new e(t)}encode(e){let{indent:t,encoding:n,ensure_ascii:r,check_circular:i,allow_nan:a,sort_keys:o}=this.#e;q(n===`utf-8`,`JsonCodec does not yet support non-utf-8 encoding.`);let s=[];q(i,`JsonCodec does not yet support skipping the check for circular references during encoding.`),a||s.push(Fn),o&&s.push(In);let c=Array.from(e.data);c.push(`|O`),c.push(e.shape);let l;s.length&&(l=(e,t)=>{let n=t;for(let t of s)n=t(e,n);return n});let u=JSON.stringify(c,l,t);return r&&(u=u.replace(/[\u007F-\uFFFF]/g,e=>{let t=`0000${e.charCodeAt(0).toString(16)}`;return`\\u${t.substring(t.length-4)}`})),new TextEncoder().encode(u)}decode(e){let{strict:t}=this.#t;q(t,`JsonCodec does not yet support non-strict decoding.`);let n=W(e),r=n.pop();return n.pop(),q(r,`0D not implemented for JsonCodec.`),{data:n,shape:r,stride:K(r,`C`)}}};const Rn=/* @__PURE__ */ new Set([`int8`,`uint8`,`int16`,`uint16`,`int32`,`uint32`,`int64`,`uint64`,`float16`,`float32`,`float64`]);var zn=class e{kind=`array_to_array`;#e;#t;#n;constructor(e,t,n){this.#t=e,this.#n=t,this.#e=n}static fromConfig(t,n){if(!Rn.has(n.dataType))throw new V(`scale_offset codec does not support data type: ${n.dataType}`);return new e(_n(n.dataType,t.scale??1),_n(n.dataType,t.offset??0),G(n.dataType))}encode=U(`scale_offset`);decode(e){let t=e.data,n=new this.#e(t.length);for(let e=0;e<t.length;e++)n[e]=t[e]/this.#t+this.#n;return{data:n,shape:e.shape,stride:e.stride}}},Bn=class e{kind=`bytes_to_bytes`;#e;constructor(e,t){if(t){let e=new(G(t.dataType))(0);q(`BYTES_PER_ELEMENT`in e,`Shuffle codec requires a fixed-size dtype, got "${t.dataType}"`),this.#e=e.BYTES_PER_ELEMENT}else this.#e=e.elementsize??4}static fromConfig(t,n){return new e(t,n)}encode(e){return Vn(e,this.#e)}decode(e){return Hn(e,this.#e)}};function Vn(e,t){let n=e.length,r=Math.floor(n/t),i=new Uint8Array(n);for(let n=0;n<t;n++)for(let a=0;a<r;a++)i[n*r+a]=e[a*t+n];return i}function Hn(e,t){let n=e.length,r=Math.floor(n/t),i=new Uint8Array(n);for(let n=0;n<t;n++)for(let a=0;a<r;a++)i[a*t+n]=e[n*r+a];return i}function Un(e){return e instanceof Wt||e instanceof Gt||e instanceof Kt?new Proxy(e,{get(e,t){return e.get(Number(t))},set(e,t,n){return e.set(Number(t),n),!0}}):e}function Wn(e,t){let n;return n=e.data instanceof Gt||e.data instanceof Kt?new e.data.constructor(e.data.chars,e.data.length):new e.data.constructor(e.data.length),{data:n,shape:e.shape,stride:K(e.shape,t)}}function Gn(e,t){let n=Wn(e,t),r=e.shape.length,i=e.shape.reduce((e,t)=>e*t,1),a=Array(r).fill(0),o=Un(e.data),s=Un(n.data);for(let t=0;t<i;t++){let t=0,i=0;for(let o=0;o<r;o++)t+=a[o]*e.stride[o],i+=a[o]*n.stride[o];s[i]=o[t],a[0]+=1;for(let t=0;t<r;t++)if(a[t]===e.shape[t]){if(t+1===r)break;a[t]=0,a[t+1]+=1}}return n}function Kn(e){let t=e.shape.length;return q(t===e.stride.length,`Shape and stride must have the same length.`),e.stride.map((e,t)=>({stride:e,index:t})).sort((e,t)=>t.stride-e.stride).map(e=>e.index)}function qn(e,t){let n=Kn(e);return q(n.length===t.length,`Orders must match`),n.every((e,n)=>e===t[n])}var Jn=class e{kind=`array_to_array`;#e;constructor(e,t){let n=e.order??`C`,r=t.shape.length,i=Array(r);if(n===`C`)for(let e=0;e<r;++e)i[e]=e;else if(n===`F`)for(let e=0;e<r;++e)i[e]=r-e-1;else{i=n;let e=Array(r);i.forEach(t=>{q(!e[t],`Invalid permutation: ${JSON.stringify(n)}`),e[t]=!0})}this.#e=i}static fromConfig(t,n){return new e(t,n)}encode(e){return qn(e,this.#e)?e:Gn(e,this.#e)}decode(e){return{data:e.data,shape:e.shape,stride:K(e.shape,this.#e)}}},Yn=class e{kind=`array_to_bytes`;#e;#t;constructor(e){this.#e=e,this.#t=K(e,`C`)}static fromConfig(t,n){return new e(n.shape)}encode=U(`vlen-utf8`);decode(e){let t=new TextDecoder,n=new DataView(e.buffer),r=Array(n.getUint32(0,!0)),i=4;for(let a=0;a<r.length;a++){let o=n.getUint32(i,!0);i+=4,r[a]=t.decode(e.buffer.slice(i,i+o)),i+=o}return{data:r,shape:this.#e,stride:this.#t}}},Xn=class e{kind=`bytes_to_bytes`;static fromConfig(t){return new e}encode=U(`zlib`);async decode(e){let t=await sn(e,{format:`deflate`});return new Uint8Array(t)}};function Zn(){let e=()=>import(`./blosc-Df7TknHH.js`).then(e=>e.default),t=()=>import(`./lz4-DNE3IovK.js`).then(e=>e.default),n=()=>import(`./zstd-qXhZ_1DN.js`).then(e=>e.default),r=()=>Pn,i=()=>Xn;return(/* @__PURE__ */ new Map()).set(`blosc`,e).set(`lz4`,t).set(`zstd`,n).set(`gzip`,r).set(`zlib`,i).set(`transpose`,()=>Jn).set(`bytes`,()=>dn).set(`crc32c`,()=>An).set(`vlen-utf8`,()=>Yn).set(`json2`,()=>Ln).set(`bitround`,()=>Ht).set(`cast_value`,()=>On).set(`scale_offset`,()=>zn).set(`numcodecs.blosc`,e).set(`numcodecs.lz4`,t).set(`numcodecs.zstd`,n).set(`numcodecs.gzip`,r).set(`numcodecs.zlib`,i).set(`numcodecs.vlen-utf8`,()=>Yn).set(`numcodecs.shuffle`,()=>Bn).set(`numcodecs.delta`,()=>Nn).set(`numcodecs.bitround`,()=>Ht).set(`numcodecs.json2`,()=>Ln)}const Qn=Zn();function $n(e){let t;function n(){return t||=tr(e),t}async function r(e,t,n){try{return await n()}catch(n){throw new Bt({direction:e,codec:t,cause:n})}}return{async encode(e){let t=await n();for(let{name:n,codec:i}of t.arrayToArray)e=await r(`encode`,n,()=>i.encode(e));let i=await r(`encode`,t.arrayToBytes.name,()=>t.arrayToBytes.codec.encode(e));for(let{name:e,codec:n}of t.bytesToBytes)i=await r(`encode`,e,()=>n.encode(i));return i},async decode(e){let t=await n();for(let n=t.bytesToBytes.length-1;n>=0;n--){let{name:i,codec:a}=t.bytesToBytes[n];e=await r(`decode`,i,()=>a.decode(e))}let i=await r(`decode`,t.arrayToBytes.name,()=>t.arrayToBytes.codec.decode(e));for(let e=t.arrayToArray.length-1;e>=0;e--){let{name:n,codec:a}=t.arrayToArray[e];i=await r(`decode`,n,()=>a.decode(i))}return i},async computeEncodedSize(e){let t=await n(),r=er(t.arrayToBytes.name,t.arrayToBytes.codec,e);for(let{name:e,codec:n}of t.bytesToBytes)r=er(e,n,r);return r}}}function er(e,t,n){if(!t.computeEncodedSize)throw new V(`Codec "${e}" cannot compute its encoded size; it is not a fixed-size codec and cannot be used in a sharding index pipeline`);return t.computeEncodedSize(n)}async function tr(e){let t=e.codecs.map(async e=>{let t=await Qn.get(e.name)?.();if(!t)throw new zt(e.name);return{Codec:t,meta:e}}),n=[],r,i=[],a={...e};for await(let{Codec:e,meta:o}of t){let t=e.fromConfig(o.configuration,a);switch(t.kind){case`array_to_array`:n.push({name:o.name,codec:t}),t.getEncodedMeta&&(a=t.getEncodedMeta(a));break;case`array_to_bytes`:r={name:o.name,codec:t};break;default:i.push({name:o.name,codec:t})}}if(!r){if(!nr(a))throw new V(`Cannot encode ${a.dataType} to bytes without a codec`);r={name:`bytes`,codec:dn.fromConfig({endian:`little`},a)}}return{arrayToArray:n,arrayToBytes:r,bytesToBytes:i}}function nr(e){return e.dataType!==`v2:object`&&e.dataType!==`string`}const rr=18446744073709551615n;function ir(e,t,n,r){if(!e.store.getRange)throw new Vt(`sharding requires a store with getRange`);let i=e.store.getRange.bind(e.store),a=t.map((e,t)=>e/r.chunk_shape[t]),o=$n({dataType:`uint64`,shape:[...a,2],codecs:r.index_codecs,fillValue:null}),s=16*a.reduce((e,t)=>e*t,1),c={};return async(t,r)=>{let l=t.map((e,t)=>Math.floor(e/a[t])),u=e.resolve(n(l)).path;u in c||(c[u]=(async()=>{let e=await o.computeEncodedSize(s),t=await i(u,{suffixLength:e},r);return t?await o.decode(t):null})().catch(e=>{throw delete c[u],e}));let d=await c[u];if(d===null)return;let{data:f,shape:p,stride:m}=d,h=t.map((e,t)=>e%p[t]).reduce((e,t,n)=>e+t*m[n],0),g=f[h],_=f[h+1];if(g!==rr||_!==rr)return i(u,{offset:Number(g),length:Number(_)},r)}}var J=class e{store;path;constructor(e,t=`/`){this.store=e,this.path=t}resolve(t){let n=new URL(`file://${this.path.endsWith(`/`)?this.path:`${this.path}/`}`);return new e(this.store,decodeURIComponent(new URL(t,n).pathname))}};function ar(e){return new J(e??/* @__PURE__ */ new Map)}var or=class extends J{kind=`group`;#e;constructor(e,t,n){super(e,t),this.#e=n}get attrs(){return this.#e.attributes}};function sr(e){return e.find(e=>e.name===`transpose`)?.configuration?.order??`C`}function cr(e,t){let n=new Map(t.map((e,t)=>[e,t]));return e.filter(e=>n.has(e)).map(e=>n.get(e))}function lr(e){return(t,n)=>K(t,globalThis.Array.isArray(e)&&n?cr(e,n):e)}const Y=Symbol(`zarrita.context`);function ur(e){return e[Y]}function dr(e,t){let{configuration:n}=t.codecs.find(nn)??{},r={encodeChunkKey:Xt(t.chunk_key_encoding),TypedArray:G(t.data_type),fillValue:t.fill_value};if(n){let i=sr(n.codecs);return{...r,kind:`sharded`,chunkShape:n.chunk_shape,codec:$n({dataType:t.data_type,shape:n.chunk_shape,codecs:n.codecs,fillValue:t.fill_value}),getStrides:lr(i),getChunkBytes:ir(e,t.chunk_grid.configuration.chunk_shape,r.encodeChunkKey,n)}}let i=sr(t.codecs);return{...r,kind:`regular`,chunkShape:t.chunk_grid.configuration.chunk_shape,codec:$n({dataType:t.data_type,shape:t.chunk_grid.configuration.chunk_shape,codecs:t.codecs,fillValue:t.fill_value}),getStrides:lr(i),async getChunkBytes(t,n){let i=r.encodeChunkKey(t),a=e.resolve(i).path;return e.store.get(a,n)}}}var fr=class extends J{kind=`array`;#e;[Y];constructor(e,t,n){super(e,t),this.#e={...n,fill_value:rn(n)},this[Y]=dr(this,this.#e)}get attrs(){return this.#e.attributes}get dimensionNames(){return this.#e.dimension_names}get fillValue(){return this.#e.fill_value}get shape(){return this.#e.shape}get chunks(){return this[Y].chunkShape}get dtype(){return this.#e.data_type}async getChunk(e,t,n){n?.useSharedArrayBuffer&&qt();let r=this[Y],i=await r.getChunkBytes(e,t);if(!i){let e=r.chunkShape.reduce((e,t)=>e*t,1),t;if(n?.useSharedArrayBuffer){let n=new r.TypedArray(0);if(!(`BYTES_PER_ELEMENT`in n))console.warn(`zarrita: useSharedArrayBuffer is not supported for non-buffer-backed data types.`),t=new r.TypedArray(e);else{let i=Jt(e*n.BYTES_PER_ELEMENT,!0);t=new r.TypedArray(i,0,e)}}else t=new r.TypedArray(e);return t.fill(r.fillValue),{data:t,shape:r.chunkShape,stride:r.getStrides(r.chunkShape)}}return r.codec.decode(i)}is(e){return tn(this.dtype,e)}};function pr(e,t){let n=e;for(let e of t)n=n instanceof Promise?n.then(t=>e(t)):e(n);return n}function mr(e,...t){return pr(e,t)}async function hr(e){let t=e.store.arrayExtensions;return t?.length?await mr(e,...t):e}let X=gr();function gr(){let e=/* @__PURE__ */ new WeakMap;function t(t){let n=e.get(t)??{v2:0,v3:0};return e.set(t,n),n}return{increment(e,n){t(e)[n]+=1},versionMax(e){let n=t(e);return n.v3>n.v2?`v3`:`v2`}}}async function _r(e,t){let n=await e.store.get(e.resolve(`.zattrs`).path,{signal:t});return n?W(n):{}}async function vr(e,t={}){let n=`store`in e?e:new J(e),{signal:r}=t,i={};return(t.attrs??!0)&&(i=await _r(n,r)),r?.throwIfAborted(),t.kind===`array`?yr(n,i,r):t.kind===`group`?br(n,i,r):yr(n,i,r).catch(e=>(on(e,B,V),br(n,i,r)))}async function yr(e,t,n){let{path:r}=e.resolve(`.zarray`),i=await e.store.get(r,{signal:n});if(!i)throw new B(`v2 array`,{path:r});return X.increment(e.store,`v2`),hr(new fr(e.store,e.path,$t(W(i),t)))}async function br(e,t,n){let{path:r}=e.resolve(`.zgroup`),i=await e.store.get(r,{signal:n});if(!i)throw new B(`v2 group`,{path:r});return X.increment(e.store,`v2`),new or(e.store,e.path,en(W(i),t))}async function xr(e,t){let{store:n,path:r}=e.resolve(`zarr.json`),i=await e.store.get(r,{signal:t});if(!i)throw new B(`v3 array or group`,{path:r});let a=W(i);return a.node_type===`array`&&(a.fill_value=rn(a)),a.node_type===`array`?hr(new fr(n,e.path,a)):new or(n,e.path,a)}async function Sr(e,t={}){let n=`store`in e?e:new J(e),r=await xr(n,t.signal);if(X.increment(n.store,`v3`),t.kind===void 0||t.kind===`array`&&r instanceof fr||t.kind===`group`&&r instanceof or)return r;let i=r instanceof fr?`array`:`group`;throw new B(`${t.kind} at ${n.path}`,{path:n.path,found:i})}async function Z(e,t={}){let n=`store`in e?e.store:e,r=X.versionMax(n),i=r===`v2`?Z.v2:Z.v3,a=r===`v2`?Z.v3:Z.v2;return i(e,t).catch(n=>(on(n,B,V),a(e,t)))}Z.v2=vr,Z.v3=Sr;function*Cr(e,t,n=1){t===void 0&&(t=e,e=0);for(let r=e;r<t;r+=n)yield r}function*wr(...e){if(e.length===0)return;let t=e.map(e=>e[Symbol.iterator]()),n=t.map(e=>e.next());if(n.some(e=>e.done))throw Error(`Input contains an empty iterator.`);for(let r=0;;){if(n[r].done){if(t[r]=e[r][Symbol.iterator](),n[r]=t[r].next(),++r>=t.length)return}else yield n.map(({value:e})=>e),r=0;n[r]=t[r].next()}}function Tr({start:e,stop:t,step:n},r){if(n===0)throw new H(`slice step cannot be zero`);n??=1;let i=n<0,[a,o]=i?[-1,r-1]:[0,r];return e===null?e=i?o:a:e<0?(e+=r,e<a&&(e=a)):e>o&&(e=o),t===null?t=i?a:o:t<0?(t+=r,t<a&&(t=a)):t>o&&(t=o),[e,t,n]}function Er(e){if(e==null)return null;if(typeof e==`bigint`){if(e>2**53-1||e<-(2**53-1))throw new H(`Cannot safely convert ${e} to a number. Value exceeds Number.MAX_SAFE_INTEGER.`);return Number(e)}return e}function Dr(e,t,n=null){return t===void 0&&(t=e,e=null),{start:Er(e),stop:Er(t),step:Er(n)}}function Or(){let e=[];return{add:t=>e.push(t()),onIdle:()=>Promise.all(e)}}function kr(e,t){throw new H(`too many indicies for array; expected ${t.length}, got ${e.length}`)}function Ar(e){throw new H(`index out of bounds for dimension with length ${e}`)}function jr(){throw new H(`only slices with step >= 1 are supported`)}function Mr(e,t){e.length>t.length&&kr(e,t)}function Nr(e,t){return e=Math.trunc(e),e<0&&(e=t+e),(e>=t||e<0)&&Ar(t),e}var Pr=class{dimSel;dimLen;dimChunkLen;nitems;constructor({dimSel:e,dimLen:t,dimChunkLen:n}){e=Nr(e,t),this.dimSel=e,this.dimLen=t,this.dimChunkLen=n,this.nitems=1}*[Symbol.iterator](){let e=Math.floor(this.dimSel/this.dimChunkLen),t=e*this.dimChunkLen;yield{dimChunkIx:e,dimChunkSel:this.dimSel-t}}},Fr=class{start;stop;step;dimLen;dimChunkLen;nitems;nchunks;constructor({dimSel:e,dimLen:t,dimChunkLen:n}){let[r,i,a]=Tr(e,t);this.start=r,this.stop=i,this.step=a,this.step<1&&jr(),this.dimLen=t,this.dimChunkLen=n,this.nitems=Math.max(0,Math.ceil((this.stop-this.start)/this.step)),this.nchunks=Math.ceil(this.dimLen/this.dimChunkLen)}*[Symbol.iterator](){let e=Math.floor(this.start/this.dimChunkLen),t=Math.ceil(this.stop/this.dimChunkLen);for(let n of Cr(e,t)){let e=n*this.dimChunkLen,t=Math.min(this.dimLen,(n+1)*this.dimChunkLen),r=t-e,i=0,a=0;if(this.start<e){let t=(e-this.start)%this.step;t&&(a+=this.step-t),i=Math.ceil((e-this.start)/this.step)}else a=this.start-e;let o=this.stop>t?r:this.stop-e,s=[a,o,this.step],c=Math.ceil((o-a)/this.step);yield{dimChunkIx:n,dimChunkSel:s,dimOutSel:[i,i+c,1]}}}};function Ir(e,t){let n=[];return e===null?n=t.map(e=>Dr(null)):Array.isArray(e)&&(n=e.map(e=>e??Dr(null))),Mr(n,t),n}var Lr=class{dimIndexers;shape;outputAxes;constructor({selection:e,shape:t,chunkShape:n}){this.dimIndexers=Ir(e,t).map((e,r)=>new(typeof e==`number`?Pr:Fr)({dimSel:e,dimLen:t[r],dimChunkLen:n[r]})),this.shape=this.dimIndexers.filter(e=>e instanceof Fr).map(e=>e.nitems),this.outputAxes=this.dimIndexers.map((e,t)=>({ixr:e,axis:t})).filter(({ixr:e})=>e instanceof Fr).map(({axis:e})=>e)}*[Symbol.iterator](){for(let e of wr(...this.dimIndexers))yield{chunkCoords:e.map(e=>e.dimChunkIx),mapping:e.map(e=>`dimOutSel`in e?{from:e.dimChunkSel,to:e.dimOutSel}:{from:e.dimChunkSel,to:null})}}};function Rr(e,t){return`get`in e?e.get(t):e[t]}async function zr(e,t,n,r){n.useSharedArrayBuffer&&qt();let i=an(n),a=ur(e),o=new Lr({selection:t,shape:e.shape,chunkShape:e.chunks});if(e.shape.length===0){let{data:t}=await e.getChunk([],{signal:i},{useSharedArrayBuffer:n.useSharedArrayBuffer});return Rr(t,0)}let s=o.shape.reduce((e,t)=>e*t,1),c;if(n.useSharedArrayBuffer){let e=new a.TypedArray(0);if(!(`BYTES_PER_ELEMENT`in e))console.warn(`zarrita: useSharedArrayBuffer is not supported for non-buffer-backed data types.`),c=new a.TypedArray(s);else{let t=Jt(s*e.BYTES_PER_ELEMENT,!0);c=new a.TypedArray(t,0,s)}}else c=new a.TypedArray(s);let l=r.prepare(c,o.shape,a.getStrides(o.shape,o.outputAxes)),u=n.createQueue?.()??Or();for(let{chunkCoords:t,mapping:a}of o)u.add(async()=>{i?.throwIfAborted();let{data:o,shape:s,stride:c}=await e.getChunk(t,{signal:i},{useSharedArrayBuffer:n.useSharedArrayBuffer}),u=r.prepare(o,s,c);r.setFromChunk(l,u,a)});return await u.onIdle(),o.shape.length===0?Rr(l.data,0):l}function Br(e,t=0,n){let r=n??e.length-t;return{length:r,subarray(n,i=r){return Br(e,t+n,i-n)},set(n,r=0){for(let i=0;i<n.length;i++)e[t+r+i]=n.get(i)},get(n){return e[t+n]}}}function Vr(e){return globalThis.Array.isArray(e.data)?{data:Br(e.data),stride:e.stride,bytesPerElement:1}:{data:new Uint8Array(e.data.buffer,e.data.byteOffset,e.data.byteLength),stride:e.stride,bytesPerElement:e.data.BYTES_PER_ELEMENT}}function Hr(e){return`chars`in e?e.constructor.bind(null,e.chars):e.constructor}function Ur(e,t){if(globalThis.Array.isArray(e.data))return Br([t]);let n=new(Hr(e.data))([t]);return new Uint8Array(n.buffer,n.byteOffset,n.byteLength)}const Wr={prepare(e,t,n){return{data:e,shape:t,stride:n}},setScalar(e,t,n){let r=Vr(e);Kr(r,t,Ur(e,n),r.bytesPerElement)},setFromChunk(e,t,n){let r=Vr(e);Jr(r,Vr(t),r.bytesPerElement,n)}};async function Q(e,t=null,n={}){return zr(e,t,n,Wr)}function Gr(e,t,n){return n<0&&t<e?Math.floor((e-t-1)/-n)+1:e<t?Math.floor((t-e-1)/n)+1:0}function Kr(e,t,n,r){if(t.length===0){e.data.set(n,0);return}let[i,...a]=t,[o,...s]=e.stride;if(typeof i==`number`){Kr({data:e.data.subarray(o*i*r),stride:s},a,n,r);return}let[c,l,u]=i,d=Gr(c,l,u);if(a.length===0){for(let t=0;t<d;t++)e.data.set(n,o*(c+u*t)*r);return}for(let t=0;t<d;t++)Kr({data:e.data.subarray(o*(c+u*t)*r),stride:s},a,n,r)}function qr(e,t,n){if(e.length!==t.length||e.length!==n.length)return null;let r=1,i=0,a=0;for(let o=e.length-1;o>=0;o--){let s=e[o];if(s.from===null||s.to===null||t[o]!==r||n[o]!==r)return null;let[c,l,u]=s.to,[d,,f]=s.from;if(u!==1||f!==1)return null;i+=r*c,a+=r*d,r*=Gr(c,l,u)}return{size:r,destOffset:i,srcOffset:a}}function Jr(e,t,n,r){let i=qr(r,e.stride,t.stride);if(i!==null){let r=i.srcOffset*n;e.data.set(t.data.subarray(r,r+i.size*n),i.destOffset*n);return}let[a,...o]=r,[s,...c]=e.stride,[l,...u]=t.stride;if(a.from===null){if(o.length===0){e.data.set(t.data.subarray(0,n),s*a.to*n);return}Jr({data:e.data.subarray(s*a.to*n),stride:c},t,n,o);return}if(a.to===null){if(o.length===0){let r=l*a.from*n;e.data.set(t.data.subarray(r,r+n),0);return}Jr(e,{data:t.data.subarray(l*a.from*n),stride:u},n,o);return}let[d,f,p]=a.to,[m,h,g]=a.from,_=Gr(d,f,p);if(o.length===0){for(let r=0;r<_;r++){let i=l*(m+g*r)*n;e.data.set(t.data.subarray(i,i+n),s*(d+p*r)*n)}return}for(let r=0;r<_;r++)Jr({data:e.data.subarray(s*(d+r*p)*n),stride:c},{data:t.data.subarray(l*(m+r*g)*n),stride:u},n,o)}function Yr(e,t,n,r,i,a){let o=new Float32Array(a),s=r+a*i;for(let c=0;c<e.length;c++){let l=Math.max(e[c],r),u=Math.min(t[c],s);if(u<=l)continue;let d=n[c],f=Math.min(a-1,Math.floor((u-1-r)/i));for(let e=Math.floor((l-r)/i);e<=f;e++){let t=r+e*i;o[e]+=d*(Math.min(u,t+i)-Math.max(l,t))}}for(let e=0;e<a;e++)o[e]/=i;return o}const $=/* @__PURE__ */ new Map,Xr=/* @__PURE__ */ new Map,Zr=/* @__PURE__ */ new Map;function Qr(e,t){let n=Xr.get(e);if(n)return n;let r=t().finally(()=>Xr.delete(e));return Xr.set(e,r),r}async function $r(e){let t=await fetch(e);if(!t.ok)throw Error(`${t.status} ${t.statusText} for ${e}`);return await t.json()}ht({async openSample(e,t){return Qr(`open:${t}`,async()=>{let n=$.get(t);if(n)return{nGenes:n.genes.length,genes:n.genes};let r=`${e.replace(/\/$/,``)}/samples/${t}`,i=ar(new Rt(`${r}/expr.zarr`)),[a,o,s,c]=await Promise.all([Z.v3(i.resolve(`u8`),{kind:`array`}),Z.v3(i.resolve(`gmax`),{kind:`array`}),$r(`${r}/genes.json`),Z.v3(ar(new Rt(`${r}/obs.zarr`)),{kind:`group`})]),l=await Q(o),u=new Float32Array(l.data.length);try{let e=await Z.v3(i.resolve(`gmin`),{kind:`array`});u=new Float32Array((await Q(e)).data)}catch{}let d={base:r,u8:a,gmax:new Float32Array(l.data),gmin:u,genes:s,geneIndex:new Map(s.map((e,t)=>[e,t])),obs:c,cat:/* @__PURE__ */ new Map,num:/* @__PURE__ */ new Map};return $.set(t,d),{nGenes:s.length,genes:s}})},async getXYAndIndex(e){let t=$.get(e),n=await Q(await Z.v3(t.obs.resolve(`xy`),{kind:`array`})),r=new Float32Array(n.data),i=r.length/2,a=new At(i,64,Float32Array);for(let e=0;e<i;e++)a.add(r[e*2],r[e*2+1]);a.finish();let o=a.data;return N({xy:r,index:o},[r.buffer,o])},geneIndex(e,t){return $.get(e)?.geneIndex.get(t)??-1},gmax(e,t){return $.get(e)?.gmax[t]??0},geneRange(e,t){let n=$.get(e);return n?[n.gmin[t]??0,n.gmax[t]??0]:[0,0]},async getGene(e,t){let n=$.get(e);if(!n)throw Error(`sample ${e} not open`);let r=(await Q(n.u8,[t,null])).data,i=r.byteOffset===0&&r.byteLength===r.buffer.byteLength?r:new Uint8Array(r);return N(i,[i.buffer])},async getCategorical(e,t){let n=$.get(e),r=await Q(await Z.v3(n.obs.resolve(`cat/${t}`),{kind:`array`})),i=new Uint16Array(r.data);return N(i,[i.buffer])},async getContinuous(e,t){let n=$.get(e),r=await Q(await Z.v3(n.obs.resolve(`num/${t}`),{kind:`array`})),i=new Float32Array(r.data);return N(i,[i.buffer])},async getIds(e,t){let n=$.get(e);return Qr(`ids:${e}:${t}`,()=>$r(`${n.base}/ids/${t}.json`))},async bigwigBins(e,t,n,r,i){let a=Zr.get(e);a||(a=new ot({url:e}),Zr.set(e,a));let o=await a.getFeaturesAsArrays(t,n,n+i*r,{basesPerSpan:r/2}),s=Yr(o.starts,o.ends,o.scores,n,r,i);return N(s,[s.buffer])},async getPolygons(e,t,n){let r=$.get(e),i=async e=>{if(!e.ok)throw Error(`${e.status} for ${e.url}`);return e.arrayBuffer()},[a,o]=await Promise.all([fetch(`${r.base}/polygons.offsets.u32`).then(i),fetch(`${r.base}/polygons.i16`).then(i)]),s=new Uint32Array(a),c=new Int16Array(o),l=s.length-1,u=c.length/2;if(l!==t.length/2||s[0]!==0||s[l]!==u)throw Error(`polygon files do not match the sample (${l} cells, ${s[l]} vs ${u} vertices)`);let d=new Float32Array((u+l)*2),f=new Uint32Array(l+1),p=0;for(let e=0;e<l;e++){f[e]=p;let r=s[e],i=s[e+1];if(i<=r)continue;let a=t[e*2],o=t[e*2+1];for(let e=r;e<i;e++)d[p*2]=a+c[e*2]*n,d[p*2+1]=o+c[e*2+1]*n,p++;d[p*2]=a+c[r*2]*n,d[p*2+1]=o+c[r*2+1]*n,p++}f[l]=p;let m={positions:d.subarray(0,p*2).slice(),startIndices:f};return N(m,[m.positions.buffer,m.startIndices.buffer])},histogram(e,t=64,n=0,r=1){let i=Array(t).fill(0),a=e instanceof Uint8Array?1/255:1;for(let o=0;o<e.length;o++){let s=e[o]*a;if(!Number.isFinite(s))continue;let c=Math.floor((s-n)/(r-n)*t);c<0&&(c=0),c>=t&&(c=t-1),i[c]++}return i}});
|
|
8
|
+
//# sourceMappingURL=worker-CUy87eWB.js.map
|