diff --git a/docs/README.md b/docs/README.md index de52bdd1..c68b81f3 100644 --- a/docs/README.md +++ b/docs/README.md @@ -33,9 +33,6 @@ We also explicitly use that "_piece of software_" as the interpreter name it ref * [pyodide](https://pyodide.org/en/stable/index.html) is the name of the interpreter that runs likely the most complete version of latest *Python*, enabling dozen official modules at run time, also offering a great *JS* integration in its core * [micropython](https://micropython.org/) is the name of the interpreter that runs a small subset of the *Python* standard library and is optimized to run in constrained environments such as *Mobile* phones, or even *Desktop*, thanks to its tiny size and an extremely fast bootstrap - * [ruby-wasm-wasi](https://github.com/ruby/ruby.wasm) is the name of the (currently *experimental*) interpreter that adds *Ruby* to the list of programming languages currently supported - * [wasmoon](https://github.com/ceifa/wasmoon) is the name of the interpreter that runs *Lua* on the browser and that, among the previous two interpreters, is fully compatible with all core features - * [webr](https://docs.r-wasm.org/webr/latest/) is the name of the (currently *experimental*) interpreter that adds *R* to the list of programming languages currently supported ` - - - - - - ``` ℹ️ - Please note we decided on purpose to not use the generic programming language name instead of its interpreter project name to avoid being too exclusive for alternative projects that would like to target that very same Programming Language (i.e. note *pyodide* & *micropython* not using *python* indeed as interpreter name). @@ -818,14 +803,11 @@ Please note that if a worker is created explicitly, there won't be any element, | :------------- | :---: | :--------: | :--------: | :----------------: | :---------: | :---------: | | pyodide | • | • | • | • | • | • | | micropython | • | • | • | • | • | • | -| ruby-wasm-wasi | • | • | • | ! | | | -| wasmoon | • | • | • | ! | • | | -| webr | r | • | re | | | | * **run** allows code to run synchronously and optionally return value * **runAsync** allows code to run asynchronously and optionally return value * **runEvent** allows events to be invoked and receive the `event` object - * **registerJSModule** allows `from polyscript import Xworker` or registration of arbitrary modules for *custom types*. It currently fallback to globally defined reference (the module name) whenever it's not possible to register a module (i.e. `polyscriptXWorker` in Lua or `$polyscript.XWorker` in Ruby). + * **registerJSModule** allows `from polyscript import Xworker` or registration of arbitrary modules for *custom types*. It currently fallback to globally defined reference (the module name) whenever it's not possible to register a module. * **writeFile** it's used to save *fetch* config files into virtual FS (usually the one provided by Emscripten). It is then possible to import those files as module within the evaluated code. * **transform** allows `xworker.sync` related invokes to pass as argument internal objects without issues, simplifying as example the dance needed with *pyodide* and the `ffi.PyProxy` interface, automatically using `.toJs()` for better DX. diff --git a/docs/index.js b/docs/index.js index 247a42c2..f72beee1 100644 --- a/docs/index.js +++ b/docs/index.js @@ -1,2 +1,2 @@ -const e=(e,t=document)=>[...t.querySelectorAll(e)],t=(e,t=document)=>{const n=(new XPathEvaluator).createExpression(e).evaluate(t,XPathResult.ORDERED_NODE_SNAPSHOT_TYPE),r=[];for(let e=0,{snapshotLength:t}=n;e"function"==typeof e,s={get:(e,t)=>n.hasOwnProperty(t)?((e,t,{get:n,value:s})=>n||!r(s)?e.then(e=>e[t]):(...n)=>e.then(e=>e[t](...n)))(e,t,n[t]):((e,t)=>r(t)?t.bind(e):t)(e,e[t])};var o=(e,...t)=>new Proxy(fetch(e,...t).then(t=>t.ok?t:Promise.reject(new Error(`[${t.status}] Unable to fetch ${e}`))),s);const{assign:a}=Object,i="entries",c="readonly",l="readwrite",p={durability:"default",prefix:"IDBMap"},u=({target:{result:e}})=>e;class d extends EventTarget{#e;#t;#n;async#r(e,t){const n=(await this.#e).transaction(i,t,this.#t);return new Promise((t,r)=>a(e(n.objectStore(i)),{onsuccess:t,onerror:r}))}constructor(e,{durability:t=p.durability,prefix:n=p.prefix}=p){super(),this.#n=n,this.#t={durability:t},this.#e=new Promise((t,n)=>{a(indexedDB.open(`${this.#n}/${e}`),{onupgradeneeded({target:{result:e,transaction:n}}){e.objectStoreNames.length||e.createObjectStore(i),n.oncomplete=()=>t(e)},onsuccess(e){t(u(e))},onerror(e){n(e),this.dispatchEvent(e)}})}).then(e=>{const t=this.dispatchEvent.bind(this);for(const n in e)n.startsWith("on")&&(e[n]=t);return e})}dispatchEvent(e){const{type:t,message:n,isTrusted:r}=e;return super.dispatchEvent(r?a(new Event(t),{message:n}):e)}async close(){(await this.#e).close()}get size(){return this.#r(e=>e.count(),c).then(u)}async clear(){await this.#r(e=>e.clear(),l)}async delete(e){await this.#r(t=>t.delete(e),l)}async entries(){const e=await this.keys();return Promise.all(e.map(e=>this.get(e).then(t=>[e,t])))}async forEach(e,t=this){for(const[n,r]of await this.entries())await e.call(t,r,n,this)}async get(e){return await this.#r(t=>t.get(e),c).then(u)}async has(e){return void 0!==await this.#r(t=>t.getKey(e),c).then(u)}async keys(){return await this.#r(e=>e.getAllKeys(),c).then(u)}async set(e,t){return await this.#r(n=>n.put(t,e),l),this}async values(){const e=await this.keys();return Promise.all(e.map(e=>this.get(e)))}get[Symbol.toStringTag](){return this.#n}}class f extends Map{#s;#o;constructor(...e){super(),this.#s=new d(...e),this.#o=this.#s.entries().then(e=>{for(const[t,n]of e)super.set(t,n)})}async close(){await this.#o,await this.#s.close()}async sync(){await this.#o}clear(){return this.#o=this.#o.then(()=>this.#s.clear()),super.clear()}delete(e){return this.#o=this.#o.then(()=>this.#s.delete(e)),super.delete(e)}set(e,t){return this.#o=this.#o.then(()=>this.#s.set(e,t)),super.set(e,t)}}const h=Promise.withResolvers||function(){var e,t,n=new this((n,r)=>{e=n,t=r});return{resolve:e,reject:t,promise:n}};var y=h.bind(Promise);const m=new Proxy(new Map,{get:(e,t)=>(e.has(t)||e.set(t,y()),e.get(t))}),g=new Set(["__dict__","constructor","get","has","includes","next","set","then"]),w=new Proxy(Object.freeze({}),{get:(e,t)=>"string"!=typeof t||g.has(t)?void 0:m[t].promise.then(e=>e.sync)});let b=0;const _=b++,v=b++,A=b++,k=b++,E=b++,x=b++,j=b++,S=b++,$=b++,B=b++,M=b++,T=b++,P=b++,F=b++,R=b++;b++;const D=b++,L=b++;const O=globalThis.ImageData||class{},C=new Map(Reflect.ownKeys(Symbol).map(e=>[Symbol[e],`@${String(e)}`])),I=e=>{switch(e[0]){case"@":return Symbol[e.slice(1)];case"#":return Symbol.for(e.slice(1));case"!":return Symbol(e.slice(1));default:return Symbol()}},W=e=>C.get(e)||((e,t)=>void 0===t?"?":void 0===Symbol.keyFor(e)?`!${t}`:`#${t}`)(e,e.description),U=Object.defineProperty,z=Object.assign,H=Array.from,q=Array.isArray,N=ArrayBuffer.isView,J=(e,t)=>[e,t],K=e=>e,G={},X=e=>(t,n=new Map)=>{for(let r=0,s=t.length;r0===e?t:I(t),Y=e=>"string"==typeof e?J(0,e):J(16,W(e)),Z=(e,t)=>{for(let n=e.push,r=0,s=t.length;rt in globalThis?t:re(ee(Q(e.constructor),[0])),se=(e,t)=>[t?e:H(new Uint8Array(e)),e.resizable?e.maxByteLength:0],oe=/\[('|")?(.+?)\1\]/g,ae=(e,t)=>e?.[t];var ie=(e,t)=>t.replace(oe,".$2").split(".").reduce(ae,e),ce=(e,...t)=>t.map(le,e);function le(e){return"string"==typeof e?ie(this,e):this[e]}const pe=globalThis.Node||class{},{apply:ue,construct:de,defineProperty:fe,deleteProperty:he,get:ye,getOwnPropertyDescriptor:me,getPrototypeOf:ge,has:we,isExtensible:be,ownKeys:_e,set:ve,setPrototypeOf:Ae}=Reflect;var ke=({reflect:e=K,transform:t=K,remote:n=K,module:r=e=>import(e),buffer:s=!1,timeout:o=-1}=G)=>{const a=(t,r=new Map)=>{if(!q(t))return t;const[s,o]=t;switch(s){case 2:{if(null===o)return globalThis;let e=r.get(t);if(!e){e=o,r.set(t,o);for(const e in o)o[e]=a(o[e],r)}return e}case 4:return r.get(t)||(r.set(t,o),c(o,r));case 8:{let t=g.get(o),r=t?.deref();return r||(t&&b.unregister(t),r=function(...t){n.apply(this,t);for(let e=0,n=t.length;e{switch(typeof e){case"object":{if(null===e)break;if(e===globalThis)return w;const n=t(e);return U&&C.has(n)||n instanceof O?J(0,n):N(n)?J(68,((e,t)=>{const{BYTES_PER_ELEMENT:n,byteOffset:r,buffer:s,length:o}=e;return[re(e),se(s,t),r,o!==(s.byteLength-r)/n?o:0]})(n,s)):n instanceof ArrayBuffer?J(64,se(n,s)):J(q(n)?5:3,d(n))}case"function":return J(9,d(t(e)));case"symbol":return J(16,W(e));case"bigint":return J(32,e.toString())}return e},c=X(a),l=X(V),p=X(Y),{clear:u,id:d,ref:f,unref:h}=((e=0,t=new Map,n=new Map)=>({clear:()=>{t.clear(),n.clear()},id:r=>{let s=n.get(r);if(void 0===s){for(;t.has(s=e++););t.set(s,r),n.set(r,s)}return s},ref:e=>t.get(e),unref:e=>(n.delete(t.get(e)),t.delete(e))}))(),y=/^(?:[0-9]+|length)$/,m=-1{g.delete(t),e(_,t)});let C,U=!1;return{assign:z,gather:ce,query:ie,direct:e=>(U||(U=!0,C=new WeakSet),C.add(e),e),evaluate:(e,...t)=>ue(e,null,t),reflect(e,t,...n){const s=null===t,o=s?globalThis:f(t);switch(e){case B:{const e=V(n[0]),t=s&&"import"===e,a=t?r:ye(o,e),c=i(a);if(!m)return c;let l,p=t,u=o;if(!t&&!(u instanceof pe||q(u)&&"string"==typeof e&&y.test(e)))if(e in o){for(;!(l=me(u,e))&&(u=ge(u),u););p=!!l&&"value"in l}else p=!0;return[p,c]}case x:{const e=new Map;return i(ue(o,a(n[0],e),c(n[1],e)))}case D:return ve(o,V(n[0]),a(n[1]));case P:return we(o,V(n[0]));case R:return p(_e(o),g);case j:return i(de(o,c(n[0])));case M:{const e=me(o,V(n[0]));if(e)for(const t in e)e[t]=i(e[t]);return e}case S:return fe(o,V(n[0]),a(n[1]));case $:return he(o,V(n[0]));case T:return i(ge(o));case L:return Ae(o,a(n[0]));case v:return void z(o,a(n[0]));case A:{const e=a(n[0]),t=Function(`return(${e}).apply(null,arguments)`);return i(ue(t,null,c(n[1])))}case k:for(let e,t=0,r=(n=l(n[0],g)).length;t{const r=n.get(e),s=!r;return s?(ot.setUint32(0,t.length,!0),n.set(e,[at[0],at[1],at[2],at[3]])):t.push(et,r[0],r[1],r[2],r[3]),s},ft=(e,t,n)=>{ot.setUint32(0,n,!0),e.push(t,at[0],at[1],at[2],at[3])},ht=(e,t,n)=>{switch(typeof e){case"number":e&&ct(e)?lt(e)&&e<256&&-1[s,e]));break}default:if("toJSON"in e){const r=e.toJSON();ht(r===e?null:r,t,n)}else{const r=pt(e),s=r.length;ft(t,Ke,s);for(let o=0;o(n,r)=>{const s=new t(r,e);mt=t.push,ht(n,s,new Map);const o=s.length;return s.sync(!0),yt.length?Promise.all(yt.splice(0)).then(t=>{const n=new Uint8Array(r,e);for(const[e,r]of t)n.set(new Uint8Array(r),e);return o}):o},wt="59317780",bt="="+wt,_t="-"+wt;var vt=(e=e=>e)=>{const t=new Map,n=(()=>{const e=new Int32Array(1);return()=>e[0]++})();return[()=>{let r;do{r=e(n())}while(t.has(r));const s=y();return t.set(r,s),[r,s.promise]},(e,n,r)=>{const s=t.get(e);t.delete(e),r?s?.reject(r):s?.resolve(n)}]};const At=[],kt=new WeakSet,Et=(...e)=>(kt.add(e),e);let{SharedArrayBuffer:xt}=globalThis,jt=!0;try{new xt(4,{maxByteLength:8})}catch(e){jt=!1,xt=class extends ArrayBuffer{get growable(){return super.resizable}grow(e){super.resize(e)}}}const{assign:St,create:$t}=Object,Bt=`coincident-${jt?crypto.randomUUID():Math.random().toString(36).substring(2)}`,Mt={byteOffset:2*Int32Array.BYTES_PER_ELEMENT},Tt=(e,t,n)=>{const r="then"!==t;return r&&(e[t]=n),r},Pt=e=>{e.stopImmediatePropagation(),e.preventDefault()},Ft=(e,t=-1)=>e?.reflected_ffi_timeout??t,{defineProperty:Rt}=Object,[Dt,Lt]=vt();let[Ot,Ct]=Dt(),It=()=>Ct,{Atomics:Wt,MessageChannel:Ut,Worker:zt}=globalThis;if(jt)Lt(Ot);else{const e=new Map,t=(e,...t)=>{e.addEventListener(...t)};if("importScripts"in globalThis){t(globalThis,"message",e=>{Pt(e),Lt(Ot,e.data)},{once:!0});const{wait:n}=Wt,{parse:r}=JSON,s=t=>{const n=new XMLHttpRequest;try{if(n.timeout=3e3,n.open("POST",`${i}?sabayon`,!1),n.setRequestHeader("Content-Type","application/json"),n.send(`["${a}",${e.get(t)}]`),200===n.status)return n;throw n}catch{return n.abort(),s(t)}},o=(e,t)=>(e.set(r(t.responseText)),"ok");let a,i;Wt={wait:(t,...r)=>e.has(t)?o(t,s(t)):n(t,...r)},Ct=Ct.then(e=>{[a,i]=e})}else{const n=[Bt,Math.random()].join("-").replace(/\W/g,"-"),r=new BroadcastChannel("dc78209b-186c-4f83-80e9-406becb7d9f3");r.onmessage=async t=>{const[s,o,a]=t.data;if(o===n)for(const[t,[n,o]]of e)if(n===a){await o.promise;let e=t.length;for(;e--&&!t[e];);r.postMessage([s,t.slice(0,e+1)]);break}};const s=t=>{const[n,r,s]=t.data;e.set(r,[n,y()]),Rt(t,"data",{value:s})};Ut=class extends Ut{constructor(){super(),t(this.port1,"message",s)}},zt=class extends zt{constructor(e,t){super(e,t),super.postMessage([n,a])}};const{notify:o}=Wt;Wt={notify(t,...n){const r=e.get(t);return r?(r[1].resolve(),0):o(t,...n)}};let a="",i=null;const c=(e,n)=>{let r,s=!0;e.getRegistration(a).then(t=>t??e.register(a,n)).then(function n(o){const{controller:i}=e;if(s=s&&!!i,r=o.installing||o.waiting||o.active,"activated"===r.state){if(s){if(i.scriptURL===a)return Lt(Ot);o.unregister()}location.reload()}else t(r,"statechange",()=>n(o),{once:!0})})};It=(e,t)=>{if(!i){const n=new URL(e,location.href);a=`${n.protocol}//${n.host}${n.pathname}`,c(navigator.serviceWorker,t),i=Ct}return i}}}const Ht="InstallTrigger"in globalThis?Bt:"",qt=e=>e,Nt=e=>e===bt?"main":e===_t?"worker":e;class Jt extends Event{#a;constructor(e){super("message"),this.#a=e}get data(){return this.#a}}var Kt=e=>{const t=e?.transform,n=Ft(e),r=(e?.encoder||gt)(Mt),s=!1!==e?.transfer;return{Worker:class extends zt{constructor(e,o){const a=jt?"":o?.serviceWorker||"",{notify:i}=a?Wt:Atomics,{port1:c,port2:l}=new(a?Ut:MessageChannel),[p,u]=vt(qt),d=new Map,f=$t(null);a&&It(a);let h="";super(e,St({type:"module"},o)),this.proxy=new Proxy(f,{get:(e,n)=>{if("then"===n)return;let r=d.get(n);return r||d.set(n,r=(...e)=>{const r=((e,t)=>{let n=At;return e&&q(t.at(-1))&&kt.has(t.at(-1))&&(n=t.pop(),kt.delete(n)),n})(s,e),[o,a]=p();return c.postMessage([o,n,t?e.map(t):e],r),((e,t)=>{if(h){const n=setTimeout(console.warn,3e3,`💀🔒 - is proxy.${Nt(h)}() awaiting proxy.${Nt(t)}() ?`);e=e.then(e=>(clearTimeout(n),e),e=>(clearTimeout(n),Promise.reject(e)))}return e})(a,n)}),r},set:Tt}),Ht&&(jt||a)&&super.addEventListener("message",e=>{const{data:t}=e;t?.ID===Ht&&(Pt(e),c.dispatchEvent(new Jt(t.data)))}),super.postMessage([Ht,a,Ft(o,n)],[l]),c.addEventListener("message",async({data:e})=>{const n=e[0],s=typeof n;if("number"===s)u.apply(null,e);else if(h=e[1],await(async(e,t,n)=>{try{const r=await t[e[1]].apply(null,e[2]);e[1]=n?n(r):r,e[2]=null}catch(t){e[2]=t}})(e,f,t),h="","string"===s)c.postMessage(e);else{const t=e[2]||e[1],s=void 0===t?0:r(t,n.buffer);n[1]="number"==typeof s?s:await s,n[0]=1,i(n,0)}}),c.start()}},native:jt,transfer:Et}};const{url:Gt}=import.meta,Xt=/import\((['"])([^)]+?\.js)\1\)/g,Vt=(e,t,n)=>`import(${t}${new URL(n,Gt).href}${t})`,Yt=Symbol.for("polyscript.js_modules");let Zt;const{Worker:Qt}=(e=>{const t=e?.import,n=Ft(e),r=Kt({...e,encoder:e?.encoder||gt});class s extends r.Worker{#i;constructor(e,r){const{proxy:s}=super(e,r),o=ke({...r,buffer:!0,reflect:s[_t],timeout:Ft(r,n),remote(e){e instanceof Event&&(e=>{const{currentTarget:t,target:n,type:r}=e,s=xe.get(t||n)?.get(r);if(s)for(const t of s)e[t]()})(e)},module:r?.import||t||(e=>import(new URL(e,location).href))});this.#i=o.terminate,this.ffi={assign:o.assign,direct:o.direct,evaluate:o.evaluate,gather:o.gather,query:o.query},s[bt]=o.reflect}terminate(){this.#i(),super.terminate()}}return{...r,Worker:s}})({transfer:!1,transform:e=>(Zt||(Zt=globalThis[Yt]?.get("-T-")))?.(e)??e});const en=new WeakMap,tn=e=>{const t=e||console,n={buffered:rn,stderr:(t.stderr||console.error).bind(t),stdout:(t.stdout||console.log).bind(t)};return{stderr:(...e)=>n.stderr(...e),stdout:(...e)=>n.stdout(...e),async get(e){const t=await e;return en.set(t,n),t}}},nn=new TextDecoder,rn=(e,t=10)=>{const n=[];return r=>{if(r instanceof Uint8Array)for(const s of r)s===t?e(nn.decode(new Uint8Array(n.splice(0)))):n.push(s);else e(r)}},sn=new Map,on=e=>sn.get(e),an=(e,t)=>{try{return Function("require",t)(on)}catch(t){en.get(e).stderr(t)}};var cn={type:"dummy",module:()=>"data:text/javascript,",engine:e=>tn().get(e),registerJSModule(e,t,n){sn.set(t,n)},run:an,runAsync:an,runEvent:async(e,t,n)=>{try{await Function("require","e",`return ${t}(e)`)(on,n)}catch(t){en.get(e).stderr(t)}},transform:(e,t)=>t,writeFile(){}};const ln={object(...e){return this.string(function(e){for(var t=e[0],n=1,r=arguments.length;n",">":">","'":"'","'":"'",""":'"',""":'"'},fn=e=>dn[e],hn=(e,...t)=>ln[typeof e](e,...t),yn=e=>pn.call(e,un,fn),{isArray:mn}=Array,{assign:gn,create:wn,defineProperties:bn,defineProperty:_n,entries:vn}=Object,{all:An,resolve:kn}=new Proxy(Promise,{get:(e,t)=>e[t].bind(e)}),En=(e,t=location.href)=>new URL(e,t.replace(/^blob:/,"")).href;function xn(e){return e.startsWith(".")?En(e,this):e}let jn=0;const Sn=(e,t)=>({id:e.id||(e.id=`${t}-w${jn++}`),tag:e.tagName}),$n=(e,t,n,r=!1,s=CustomEvent)=>{e.dispatchEvent(new s(`${t}:${n}`,{bubbles:!0,detail:{worker:r}}))},Bn=(e,t,n,r)=>({type:t,config:n,interpreter:r,io:en.get(r),run:(t,...n)=>e.run(r,t,...n),runAsync:(t,...n)=>e.runAsync(r,t,...n),runEvent:(...t)=>e.runEvent(r,...t)}),Mn=e=>e.replace(/^(?:\n|\r\n)/,""),Tn=(e,t,n,r)=>{const s=e[t].bind(e);e[t]="run"===t?(e,t,...o)=>{n&&s(e,n,...o);const a=s(e,Mn(t),...o);return r&&s(e,r,...o),a}:async(e,t,...o)=>{n&&await s(e,n,...o);const a=await s(e,Mn(t),...o);return r&&await s(e,r,...o),a}},Pn=Symbol.for("polyscript.js_modules"),Fn=new Map;_n(globalThis,Pn,{value:Fn});const Rn=new Proxy(Fn,{get:(e,t)=>e.get(t),has:(e,t)=>e.has(t),ownKeys:e=>[...e.keys()]}),Dn=(e,t)=>!t.startsWith("_"),Ln=(e,t)=>new Proxy(e,{has:Dn,get:(e,n)=>e[t][n]}),On=(e,t,n,r)=>{if("pyodide"===e)return;const s="polyscript.js_modules";for(const e of Reflect.ownKeys(r))t.registerJSModule(n,`${s}.${e}`,Ln(r,e));t.registerJSModule(n,s,r)},Cn=(e,t)=>import(e).then(e=>{Fn.set(t,{...e})}),In=e=>new Promise((t,n)=>{document.querySelector(`link[rel="stylesheet"][href="${e}"]`)?t():document.head.append(gn(document.createElement("link"),{rel:"stylesheet",href:e,onload:t,onerror:n}))}),Wn=e=>/\.css$/i.test(new URL(e).pathname),Un=e=>/^(?:false|0|no)$/i.test(e.getAttribute("async")),zn=!globalThis.window,Hn=({FS:e,PATH:t,PATH_FS:n},r,s)=>{const o=n.resolve(r),a=t.dirname(o);return e.mkdirTree?e.mkdirTree(a):Nn(e,a),e.writeFile(o,new Uint8Array(s),{canOwn:!0})},qn=e=>{const t=e.split("/");return t.pop(),t.join("/")},Nn=(e,t)=>{const n=[];for(const r of t.split("/"))"."!==r&&".."!==r&&(n.push(r),r&&e.mkdir(n.join("/")))},Jn=(e,t)=>{const n=[];for(const e of t.split("/"))switch(e){case"":case".":break;case"..":n.pop();break;default:n.push(e)}return[e.cwd()].concat(n).join("/").replace(/^\/+/,"/")},Kn=e=>{const t=e.map(e=>e.trim().replace(/(^[/]*|[/]*$)/g,"")).filter(e=>""!==e&&"."!==e).join("/");return e[0].startsWith("/")?`/${t}`:t},Gn=(e,t)=>o(En(e,t)).arrayBuffer(),Xn=(e,t,n,r)=>An((e=>{for(const{files:t,to_file:n,from:r=""}of e){if(void 0!==t&&void 0!==n)throw new Error("Cannot use 'to_file' and 'files' parameters together!");if(void 0===t&&void 0===n&&r.endsWith("/"))throw new Error(`Couldn't determine the filename from the path ${r}, please supply 'to_file' parameter.`)}return e.flatMap(({from:e="",to_folder:t=".",to_file:n,files:r})=>{if(mn(r))return r.map(n=>({url:Kn([e,n]),path:Kn([t,n])}));const s=n||e.slice(1+e.lastIndexOf("/"));return[{url:e,path:Kn([t,s])}]})})(n).map(({url:n,path:s})=>Gn(n,r).then(n=>e.writeFile(t,s,n)))),Vn=(e,t)=>t.endsWith("/")?`${t}${e.split("/").pop()}`:t,Yn=(e,t)=>e.replace(/\{.+?\}/g,e=>{if(!t.has(e))throw new SyntaxError(`Invalid template: ${e}`);return t.get(e)}),Zn=(e,t,n,r)=>An((e=>{const t=new Map,n=new Set,r=[];for(const[s,o]of vn(e))if(/^\{.+\}$/.test(s)){if(t.has(s))throw new SyntaxError(`Duplicated template: ${s}`);t.set(s,Yn(o,t))}else{const e=Yn(s,t),a=Vn(e,Yn(o||"./",t));if(n.has(a)&&!a.endsWith("/*"))throw new SyntaxError(`Duplicated destination: ${a}`);n.add(a),r.push({url:e,path:a})}return r})(n).map(({url:n,path:s})=>Gn(n,r).then(r=>e.writeFile(t,s,r,n)))),Qn=({main:e,worker:t},n)=>{const r=[];if(t&&zn)for(let[e,s]of vn(t))e=En(e,n),r.push(Cn(e,s));if(e&&!zn)for(let[t,s]of vn(e))t=En(t,n),Wn(t)?In(t):r.push(Cn(t,s));return An(r)},er=e=>t=>{dispatchEvent(new CustomEvent(`${e}:progress`,{detail:t}))},tr=(e,t,n)=>(e.set(t,n),n),nr=e=>{at[0]=e[or++],at[1]=e[or++],at[2]=e[or++],at[3]=e[or++],at[4]=e[or++],at[5]=e[or++],at[6]=e[or++],at[7]=e[or++]},rr=e=>(at[0]=e[or++],at[1]=e[or++],at[2]=e[or++],at[3]=e[or++],ot.getUint32(0,!0)),sr=(e,t)=>{switch(e[or++]){case Te:return nr(e),ot.getFloat64(0,!0);case Pe:return e[or++];case Ke:{const n=tr(t,or-1,{});for(let r=0,s=rr(e);r(or=0,sr(e,new Map)),stringify:e=>{const t=[];return mt=Z,ht(e,t,new Map),t}},ir=new WeakMap,cr=async(e,t,n,r,s)=>{r.files&&(t("Loading files"),await Zn(e,n,r.files,s),t("Loaded files")),r.fetch&&(t("Loading fetch"),await Xn(e,n,r.fetch,s),t("Loaded fetch")),r.js_modules&&(t("Loading JS modules"),await Qn(r.js_modules,s),t("Loaded JS modules"))},lr=(e,t,n)=>{"polyscript"===t&&(n.lazy_py_modules=async(...t)=>(await ir.get(e)(t),t.map(t=>e.pyimport(t))),n.storage=async e=>{const t=new f(e);return await t.sync(),t},n.JSON=ar),e.registerJsModule(t,n)},pr=(e,t)=>{if(e.endsWith("/*")){if(/\.(zip|whl|tgz|tar(?:\.gz)?)$/.test(t))return RegExp.$1;throw new Error(`Unsupported archive ${t}`)}return""},ur=(e,t,...n)=>{try{return e.runPython(hn(t),...n)}catch(t){en.get(e).stderr(t)}},dr=async(e,t,...n)=>{try{return await e.runPythonAsync(hn(t),...n)}catch(t){en.get(e).stderr(t)}},fr=async(e,t,n)=>{const[r,...s]=t.split(".");let o,a=e.globals.get(r);for(const e of s)[o,a]=[a,a[e]];try{await a.call(o,n)}catch(t){en.get(e).stderr(t)}};var hr=(new TextEncoder).encode("_F='github:'\n_E='user-agent'\n_D=True\n_C=False\n_B='/'\n_A=None\nfrom uio import StringIO\nimport sys\nclass Response:\n\tdef __init__(A,f):A.raw=f;A.encoding='utf-8';A._cached=_A\n\tdef close(A):\n\t\tif A.raw:A.raw.close();A.raw=_A\n\t\tA._cached=_A\n\t@property\n\tdef content(self):\n\t\tA=self\n\t\tif A._cached is _A:\n\t\t\ttry:A._cached=A.raw.read()\n\t\t\tfinally:A.raw.close();A.raw=_A\n\t\treturn A._cached\n\t@property\n\tdef text(self):return str(self.content,self.encoding)\n\tdef json(A):import ujson;return ujson.loads(A.content)\nHEADERS_TO_IGNORE=_E,\ntry:import js\nexcept Exception as err:raise OSError('This version of urequests can only be used in the browser')\nHEADERS_TO_IGNORE=_E,\ndef request(method,url,data=_A,json=_A,headers={},stream=_A,auth=_A,timeout=_A,parse_headers=_D):\n\tE=timeout;D=method;C=data;from js import XMLHttpRequest as G;A=G.new();A.withCredentials=_C\n\tif auth is not _A:import ubinascii;H,I=auth;A.open(D,url,_C,H,I)\n\telse:A.open(D,url,_C)\n\tfor(F,J)in headers.items():\n\t\tif F.lower()not in HEADERS_TO_IGNORE:A.setRequestHeader(F,J)\n\tif E:A.timeout=int(E*1000)\n\tif json is not _A:assert C is _A;import ujson;C=ujson.dumps(json);A.setRequestHeader('Content-Type','application/json')\n\tA.send(C);B=Response(StringIO(A.responseText));B.status_code=A.status;B.reason=A.statusText;B.headers=A.getAllResponseHeaders();return B\ndef get(url,**A):return request('GET',url,**A)\n_PACKAGE_INDEX=const('https://micropython.org/pi/v2')\n_CHUNK_SIZE=128\ndef _ensure_path_exists(path):\n\timport os;A=path.split(_B)\n\tif not A[0]:A.pop(0);A[0]=_B+A[0]\n\tB=''\n\tfor C in range(len(A)-1):\n\t\tB+=A[C]\n\t\ttry:os.stat(B)\n\t\texcept:os.mkdir(B)\n\t\tB+=_B\ndef _chunk(src,dest):\n\tA=memoryview(bytearray(_CHUNK_SIZE))\n\twhile _D:\n\t\tB=src.readinto(A)\n\t\tif B==0:break\n\t\tdest(A if B==_CHUNK_SIZE else A[:B])\ndef _check_exists(path,short_hash):\n\tA=short_hash;import os\n\ttry:\n\t\timport binascii as C,hashlib as D\n\t\twith open(path,'rb')as E:B=D.sha256();_chunk(E,B.update);F=str(C.hexlify(B.digest())[:len(A)],'utf-8');return F==A\n\texcept:return _C\ndef _rewrite_url(url,branch=_A):\n\tB=branch;A=url\n\tif not B:B='HEAD'\n\tif A.startswith(_F):A=A[7:].split(_B);A='https://raw.githubusercontent.com/'+A[0]+_B+A[1]+_B+B+_B+_B.join(A[2:])\n\treturn A\ndef _download_file(url,dest):\n\tB=dest;A=get(url)\n\ttry:\n\t\tif A.status_code!=200:print('Error',A.status_code,'requesting',url);return _C\n\t\tprint('Copying:',B);_ensure_path_exists(B)\n\t\twith open(B,'wb')as C:_chunk(A.raw,C.write)\n\t\treturn _D\n\tfinally:A.close()\ndef _install_json(package_json_url,index,target,version,mpy):\n\tK='File not found: {} {}';I=version;H=index;G=package_json_url;D=target;E=get(_rewrite_url(G,I))\n\ttry:\n\t\tif E.status_code!=200:print('Package not found:',G);return _C\n\t\tF=E.json()\n\tfinally:E.close()\n\tfor(A,C)in F.get('hashes',()):\n\t\tB=D+_B+A\n\t\tif _check_exists(B,C):print('Exists:',B)\n\t\telse:\n\t\t\tL='{}/file/{}/{}'.format(H,C[:2],C)\n\t\t\tif not _download_file(L,B):print(K.format(A,C));return _C\n\tfor(A,J)in F.get('urls',()):\n\t\tB=D+_B+A\n\t\tif not _download_file(_rewrite_url(J,I),B):print(K.format(A,J));return _C\n\tfor(M,N)in F.get('deps',()):\n\t\tif not _install_package(M,H,D,N,mpy):return _C\n\treturn _D\ndef _install_package(package,index,target,version,mpy):\n\tD=index;C=target;B=version;A=package\n\tif A.startswith('http://')or A.startswith('https://')or A.startswith(_F):\n\t\tif A.endswith('.py')or A.endswith('.mpy'):print('Downloading {} to {}'.format(A,C));return _download_file(_rewrite_url(A,B),C+_B+A.rsplit(_B)[-1])\n\t\telse:\n\t\t\tif not A.endswith('.json'):\n\t\t\t\tif not A.endswith(_B):A+=_B\n\t\t\t\tA+='package.json'\n\t\t\tprint('Installing {} to {}'.format(A,C))\n\telse:\n\t\tif not B:B='latest'\n\t\tprint('Installing {} ({}) from {} to {}'.format(A,B,D,C));E=sys.implementation._mpy&255 if mpy and hasattr(sys.implementation,'_mpy')else'py';A='{}/package/{}/{}/{}.json'.format(D,'py',A,B)\n\treturn _install_json(A,D,C,B,mpy)\ndef install(package,index=_A,target=_A,version=_A,mpy=_D):\n\tB=target;A=index\n\tif not B:\n\t\tfor C in sys.path:\n\t\t\tif C.endswith('/lib'):B=C;break\n\t\telse:print('Unable to find lib dir in sys.path');return\n\tif not A:A=_PACKAGE_INDEX\n\tif _install_package(package,A.rstrip(_B),B,version,mpy):print('Done')\n\telse:print('Package may be partially installed')");const yr=async e=>(await import("./toml-V4Savzlc.js")).parse(e);async function mr(e,t){return new Promise((n,r)=>{e.syncfs(t,e=>{e?r(e):n()})})}function gr(e){const t=e.FS,n=e.FS.filesystems.MEMFS,r=e.PATH,s={DIR_MODE:16895,FILE_MODE:33279,mount:function(e){if(!e.opts.fileSystemHandle)throw new Error("opts.fileSystemHandle is required");return n.mount.apply(null,arguments)},syncfs:async(e,t,n)=>{try{const r=s.getLocalSet(e),o=await s.getRemoteSet(e),a=t?o:r,i=t?r:o;await s.reconcile(e,a,i),n(null)}catch(e){n(e)}},getLocalSet:e=>{let n=Object.create(null);function s(e){return"."!==e&&".."!==e}function o(e){return t=>r.join2(e,t)}let a=t.readdir(e.mountpoint).filter(s).map(o(e.mountpoint));for(;a.length;){let e=a.pop(),r=t.stat(e);t.isDir(r.mode)&&a.push.apply(a,t.readdir(e).filter(s).map(o(e))),n[e]={timestamp:r.mtime,mode:r.mode}}return{type:"local",entries:n}},getRemoteSet:async e=>{const t=Object.create(null),n=await wr(e.opts.fileSystemHandle);for(const[o,a]of n)"."!==o&&(t[r.join2(e.mountpoint,o)]={timestamp:"file"===a.kind?(await a.getFile()).lastModifiedDate:new Date,mode:"file"===a.kind?s.FILE_MODE:s.DIR_MODE});return{type:"remote",entries:t,handles:n}},loadLocalEntry:e=>{const r=t.lookupPath(e).node,s=t.stat(e);if(t.isDir(s.mode))return{timestamp:s.mtime,mode:s.mode};if(t.isFile(s.mode))return r.contents=n.getFileDataAsTypedArray(r),{timestamp:s.mtime,mode:s.mode,contents:r.contents};throw new Error("node type not supported")},storeLocalEntry:(e,n)=>{if(t.isDir(n.mode))t.mkdirTree(e,n.mode);else{if(!t.isFile(n.mode))throw new Error("node type not supported");t.writeFile(e,n.contents,{canOwn:!0})}t.chmod(e,n.mode),t.utime(e,n.timestamp,n.timestamp)},removeLocalEntry:e=>{var n=t.stat(e);t.isDir(n.mode)?t.rmdir(e):t.isFile(n.mode)&&t.unlink(e)},loadRemoteEntry:async e=>{if("file"===e.kind){const t=await e.getFile();return{contents:new Uint8Array(await t.arrayBuffer()),mode:s.FILE_MODE,timestamp:t.lastModifiedDate}}if("directory"===e.kind)return{mode:s.DIR_MODE,timestamp:new Date};throw new Error("unknown kind: "+e.kind)},storeRemoteEntry:async(e,n,s)=>{const o=e.get(r.dirname(n)),a=t.isFile(s.mode)?await o.getFileHandle(r.basename(n),{create:!0}):await o.getDirectoryHandle(r.basename(n),{create:!0});if("file"===a.kind){const e=await a.createWritable();await e.write(s.contents),await e.close()}e.set(n,a)},removeRemoteEntry:async(e,t)=>{const n=e.get(r.dirname(t));await n.removeEntry(r.basename(t)),e.delete(t)},reconcile:async(e,n,o)=>{let a=0;const i=[];Object.keys(n.entries).forEach(function(e){const r=n.entries[e],s=o.entries[e];(!s||t.isFile(r.mode)&&r.timestamp.getTime()>s.timestamp.getTime())&&(i.push(e),a++)}),i.sort();const c=[];if(Object.keys(o.entries).forEach(function(e){n.entries[e]||(c.push(e),a++)}),c.sort().reverse(),!a)return;const l="remote"===n.type?n.handles:o.handles;for(const t of i){const n=r.normalize(t.replace(e.mountpoint,"/")).substring(1);if("local"===o.type){const e=l.get(n),r=await s.loadRemoteEntry(e);s.storeLocalEntry(t,r)}else{const e=s.loadLocalEntry(t);await s.storeRemoteEntry(l,n,e)}}for(const t of c)if("local"===o.type)s.removeLocalEntry(t);else{const n=r.normalize(t.replace(e.mountpoint,"/")).substring(1);await s.removeRemoteEntry(l,n)}}};return e.FS.filesystems.NATIVEFS_ASYNC=s,async function(e,n){if("FileSystemDirectoryHandle"!==n.constructor.name)throw new TypeError("Expected argument 'fileSystemHandle' to be a FileSystemDirectoryHandle");return function(e){t.mkdirTree?t.mkdirTree(e):Nn(t,e);const{node:n}=t.lookupPath(e,{follow_mount:!1});if(t.isMountpoint(n))throw new Error(`path '${e}' is already a file system mount point`);if(!t.isDir(n.mode))throw new Error(`path '${e}' points to a file not a directory`);for(const t in n.contents)throw new Error(`directory '${e}' is not empty`)}(e),t.mount(t.filesystems.NATIVEFS_ASYNC,{fileSystemHandle:n},e),await mr(t,!0),{syncfs:async()=>await mr(t,!1)}}}const wr=async e=>{const t=[];await async function e(n){for await(const r of n.values())t.push(r),"directory"===r.kind&&await e(r)}(e);const n=new Map;n.set(".",e);for(const r of t){const t=(await e.resolve(r)).join("/");n.set(t,r)}return n},{parse:br}=JSON,_r=(e,t)=>new URL(e,t).href,vr=(e,t,n)=>{if(t in e)throw new Error(`Duplicated path: ${t}`);e[t]=n},Ar=(e,t,n)=>{for(const r in t)vr(e,_r(r,n),t[r])},kr=(e,t,n,r)=>{const s=t[n];s&&(e[n]??={},Ar(e[n],s,r))},Er=async(e,t=e.packages,n=new Set)=>{const r=[];for(const s of t){if(n.has(s))continue;n.add(s);const t=s.endsWith(".toml");if(t||s.endsWith(".json")){const a=await o(s).text(),{name:i,files:c,js_modules:l,packages:p}=t?await yr(a):br(a);if(n.has(i))throw new Error(`Unable to process ${i} @ ${s}`);n.add(i),p&&r.push(...await Er(e,p,n)),l&&(e.js_modules??={},kr(e.js_modules,l,"main",s),kr(e.js_modules,l,"worker",s)),c&&(e.files??={},Ar(e.files,c,s))}else r.push(s)}return r},xr=(e,t)=>{try{e.mkdir(t)}catch(e){}},jr=er("mpy");var Sr={type:"micropython",module:(e="1.28.0-preview-233")=>`https://cdn.jsdelivr.net/npm/@micropython/micropython-webassembly-pyscript@${e}/micropython.mjs`,async engine({loadMicroPython:e},t,n,r){const{stderr:s,stdout:o,get:a}=tn({stderr:rn(console.error),stdout:rn(console.log)}),i=[];t.debug&&i.push("settrace"),t.packages?.includes("ulab")&&(t.packages.splice(t.packages.indexOf("ulab"),1),i.push("ulab")),n=n.replace(/\.m?js$/,".wasm");for(const e of i)n=n.replace(/\.wasm$/,`-${e}.wasm`);jr("Loading MicroPython");const c=await a(e({linebuffer:!1,stderr:s,stdout:o,url:n}));globalThis[Pn].set("-T-",this.transform.bind(this,c));const l=$r.bind(this,c,r);return ir.set(c,l),t.experimental_remote_packages&&(jr("Loading remote packages"),t.packages=await Er(t),jr("Loaded remote packages")),await cr(this,jr,c,t,r),this.writeFile(c,"./mip.py",hr),t.packages&&(jr("Loading packages"),await l(t.packages.map(xn,r)),jr("Loaded packages")),jr("Loaded MicroPython"),c.mountNativeFS||(c.mountNativeFS=gr(c._module)),c},registerJSModule:lr,run:ur,runAsync:dr,runEvent:fr,transform:(e,t)=>e.PyProxy.toJs(t),writeFile:(e,t,n,r)=>{const{FS:s,_module:{PATH:o,PATH_FS:a}}=e,i={FS:s,PATH:o,PATH_FS:a},c=pr(t,r);if(c){const r=t.slice(0,-1);switch("./"!==r&&s.mkdir(r),c){case"whl":case"zip":{const e=new Blob([n],{type:"application/zip"});return import("./zip-DeHJVpeC.js").then(async({BlobReader:t,Uint8ArrayWriter:n,ZipReader:a})=>{const i=new a(new t(e));for(const e of await i.getEntries()){const{directory:t,filename:a}=e,i=r+a;if(t)xr(s,i);else{xr(s,o.dirname(i));const t=await e.getData(new n);s.writeFile(i,t,{canOwn:!0})}}i.close()})}case"tgz":case"tar.gz":{const t="./_.tar.gz";return Hn(i,t,n),void e.runPython(`\n import os, gzip, tarfile\n tar = tarfile.TarFile(fileobj=gzip.GzipFile(fileobj=open("${t}", "rb")))\n for f in tar:\n name = f"${r}{f.name}"\n if f.type == tarfile.DIRTYPE:\n if f.name != "./":\n os.mkdir(name.strip("/"))\n else:\n dir = os.path.dirname(name)\n if not os.path.exists(dir):\n os.mkdir(dir)\n source = tar.extractfile(f)\n with open(name, "wb") as dest:\n dest.write(source.read())\n dest.close()\n tar.close()\n os.remove("${t}")\n `)}}}return Hn(i,t,n)}};async function $r(e,t,n){let r;for(const s of n)if(s.endsWith(".whl")){const n=En(s,t),r=await o(n).arrayBuffer();await this.writeFile(e,"./*",r,n)}else r||(r=e.pyimport("mip")),r.install(s)}const Br={dict_converter:Object.fromEntries},{stringify:Mr}=JSON,{apply:Tr}=Reflect,Pr=Function.prototype,Fr=e=>function(...t){return Tr(e,this,t)};let Rr,Dr;const Lr=e=>{const t=new WeakMap,n=n=>{for(let r,s=0;s`https://cdn.jsdelivr.net/pyodide/v${e}/full/pyodide.mjs`,async engine({loadPyodide:e,version:t},n,r,s){Or("Loading Pyodide");let{packages:o,index_urls:a}=n;if(o){if(o=o.map(xn,s),!a){Or("Loading Packages Graph");const{default:e}=await Promise.resolve().then(function(){return Hr});if(t in e){const n=e[t];for(const e of o){if(/^(?:\.|\/|https?:\/\/)/.test(e))continue;const r=e.split(/[>=<]=/)[0];r.toLowerCase()in n||console.warn(`Pyodide ${t} might not support ${e}. See: https://packages.pyscript.net/?q=${r}`)}}Or("Loaded Packages Graph")}n.experimental_remote_packages&&(Or("Loading remote packages"),n.packages=o=await Er(n,o),Or("Loaded remote packages"))}Or("Loading Storage");const i=r.slice(0,r.lastIndexOf("/")),c=new f(`${i}@${t}`),l={indexURL:i},p="never"!==n.packages_cache&&"0.28.0"!==t;if(await c.sync(),Or("Loaded Storage"),p||c.clear(),o&&p)if("passthrough"===n.packages_cache)l.packages=o,o=null,c.clear();else{o=o.sort();const e=Mr(o);if(c.has(e)){const n=c.get(e);if(l.packages=o.map(e=>e.split(/[>=<]=/)[0]),t.startsWith("0.27")){const e=new Blob([n],{type:"application/json"});l.lockFileURL=URL.createObjectURL(e)}else l.lockFileContents=n;o=null}}const{stderr:u,stdout:d,get:h}=tn();Or("Loading interpreter");const y=await h(e({stderr:u,stdout:d,...l}));Or("Loaded interpreter"),globalThis[Pn].set("-T-",this.transform.bind(this,y)),n.debug&&y.setDebug(!0);const m=Ur.bind(y);return a&&Cr.set(y,a),ir.set(y,m),await cr(this,Or,y,n,s),o&&await m(o,c,p),await c.close(),l.lockFileURL&&URL.revokeObjectURL(l.lockFileURL),Or("Loaded Pyodide"),"auto"===n.experimental_create_proxy&&(y.runPython(["import js","from pyodide.ffi import to_js","o=js.Object.fromEntries","js.experimental_create_proxy=lambda r:to_js(r,dict_converter=o)"].join(";"),{globals:y.toPy({})}),Dr=globalThis.experimental_create_proxy,delete globalThis.experimental_create_proxy,[Rr]=Reflect.ownKeys(Dr).filter(e=>"symbol"==typeof e&&"Symbol(pyproxy.attrs)"===String(e)),Lr(!0)),y},registerJSModule:lr,run:Fr(ur),runAsync:Fr(dr),runEvent:Fr(fr),transform:(e,t)=>Tr(Wr,e,[t]),writeFile:(e,t,n,r)=>{const s=pr(t,r);if(s)return e.unpackArchive(n,s,{extractDir:t.slice(0,-1)});const{FS:o,PATH:a,_module:{PATH_FS:i}}=e;return Hn({FS:o,PATH:a,PATH_FS:i},t,n)}};function Wr(e){const{ffi:{PyProxy:t}}=this;if(e&&"object"==typeof e){if(e instanceof t)return e.toJs(Br);if(e instanceof Map)return new Map([...e.entries()]);if(mn(e))return e.map(Wr,this)}return e}async function Ur(e,t,n=!1){const{log:r}=console,s=(e,...t)=>{r(e,...t),console.log=r,Or(e),console.log=s};console.log=s,await this.loadPackage("micropip");const o=this.pyimport("micropip");if(Cr.has(this)&&o.set_index_urls(Cr.get(this)),await o.install(e,{keep_going:!0}),console.log=r,n&&t instanceof f){const n=o.freeze();t.set(Mr(e),n)}o.destroy()}var zr=new Proxy({v:["latest","stable","0.29.3","0.29.2","0.29.1","0.29.0","0.28.3","0.28.2","0.28.1","0.28.0","0.27.7","0.27.6","0.27.5","0.27.4","0.27.3","0.27.2","0.27.1","0.27.0"],p:{affine:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],aiohappyeyeballs:[0,1,2,3,4,5,6,7,8,9],aiohttp:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],aiosignal:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],altair:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],"annotated-types":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],anyio:[0,1,2,3,4,5,6,7,8,9,10,11,12],apsw:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],"argon2-cffi":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],"argon2-cffi-bindings":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],asciitree:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],astropy:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],astropy_iers_data:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],asttokens:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],"async-timeout":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],atomicwrites:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],attrs:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],"audioop-lts":[0,1,2,3,4,5,6,7,8],autograd:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],"awkward-cpp":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],b2d:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],bcrypt:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],beautifulsoup4:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],"bilby.cython":[0,1,2,3,4,5],biopython:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],bitarray:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],bitstring:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],bleach:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],blosc2:[0,1,2,3,4,5,6,7,8,9],bokeh:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],"boost-histogram":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],bottleneck:[0,1,2,3],brotli:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],cachetools:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],cartopy:[0,1,2,3,10,11,12,13,14,15,16,17],casadi:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],"cbor-diag":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],certifi:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],cffi:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],cffi_example:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],cftime:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],"charset-normalizer":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],clarabel:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],click:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],cligj:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],clingo:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],cloudpickle:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],cmyt:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],cobs:[0,1,2,3,4,5,6,7,8],colorspacious:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],contourpy:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],coolprop:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],coverage:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],cramjam:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],crc32c:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],cryptography:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],"css-inline":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16],cssselect:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],"cvxpy-base":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],cycler:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],cysignals:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],cytoolz:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],decorator:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],demes:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],deprecation:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],diskcache:[0,1,2,3,4,5,6,7,8,9],distlib:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],distro:[0,1,2,3,4,5,6,7,8,9,10,11,12],docutils:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],donfig:[0,1,2,3,4,5,6,7,8,9],ewah_bool_utils:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],exceptiongroup:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],executing:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],fastapi:[0,1,2,3,4,5],fastcan:[0,1,2,3,4,5],fastparquet:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],fiona:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],fonttools:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],freesasa:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],frozenlist:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],fsspec:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],future:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],galpy:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],geopandas:[0,1,2,3,10,11,12,13,14,15,16,17],gmpy2:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],"google-crc32c":[0,1,2,3],gsw:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],h11:[0,1,2,3,4,5,6,7,8,9,10,11,12],h3:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14],h5py:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],healpy:[0,1,2,3],highspy:[0,1,2,3,4,5],html5lib:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],httpcore:[0,1,2,3,4,5,6,7,8,9,10,11,12],httpx:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],idna:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],igraph:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],imageio:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],"imgui-bundle":[0,1,2,3,4,5,6,7,8,9],iminuit:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],iniconfig:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],inspice:[0,1,2,3,4,5,6,7,8,9],ipython:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],jedi:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],jinja2:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],jiter:[0,1,2,3,4,5,6,7,8,9,10,11,12],joblib:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],jsonpatch:[0,1,2,3,4,5],jsonpointer:[0,1,2,3,4,5],jsonschema:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],jsonschema_specifications:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],kiwisolver:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],"lakers-python":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],lazy_loader:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],"lazy-object-proxy":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],libcst:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],lightgbm:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],logbook:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],lxml:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],lz4:[0,1,2,3,4,5,6,7,8,9],markupsafe:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],matplotlib:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],"matplotlib-inline":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],"memory-allocator":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],micropip:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],ml_dtypes:[0,1,2,3],mmh3:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],"more-itertools":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],mpmath:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],msgpack:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],msgspec:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],msprime:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],multidict:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],munch:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],mypy:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],narwhals:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],ndindex:[0,1,2,3,4,5,6,7,8,9],netcdf4:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],networkx:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],newick:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],nh3:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],nlopt:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],nltk:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],numcodecs:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],numpy:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],openai:[0,1,2,3,4,5,6,7,8,9,10,11,12],"opencv-python":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],optlang:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],orjson:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],packaging:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],pandas:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],parso:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],patsy:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],pcodec:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14],peewee:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],"pi-heif":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],pillow:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],"pillow-heif":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],pkgconfig:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],platformdirs:[0,1,2,3,4,5,6,7,8,9],pluggy:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],ply:[0,1,2,3,4,5,6,7,8,9],pplpy:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],primecountpy:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],prompt_toolkit:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],propcache:[0,1,2,3,4,5,6,7,8,9],protobuf:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],"pure-eval":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],py:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],pyarrow:[0,1,2,3,10,11,12,13,14,15,16],pycdfpp:[0,1,2,3],pyclipper:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],pycparser:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],pycryptodome:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],pydantic:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],pydantic_core:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],pyerfa:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],"pygame-ce":[0,1,2,3,4,5,10,11,12,13,14,15,16,17],pygments:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],pyheif:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],pyiceberg:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],pyinstrument:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],"pylimer-tools":[0,1,2,3,4,5],pymupdf:[0,1,2,3,4,5,6,7,8],pynacl:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],"pyodide-http":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],"pyodide-unix-timezones":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],pyparsing:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],pyproj:[0,1,2,3,10,11,12,13,14,15,16,17],pyrodigal:[0,1,2,3],pyrsistent:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],pysam:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],pyshp:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],pytaglib:[0,1,2,3,4,5,6,7,8,9],pytest:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],"pytest-asyncio":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],"pytest-benchmark":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],pytest_httpx:[0,1,2,3,4,5,6,7,8,9,10,11,12],"python-calamine":[0,1,2,3,4,5],"python-dateutil":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],"python-flint":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],"python-magic":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],"python-sat":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],"python-solvespace":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],pytz:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],pywavelets:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],pyxel:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],pyxirr:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],pyyaml:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],rasterio:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],rateslib:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],rebound:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],reboundx:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],referencing:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],regex:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],requests:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],retrying:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],rich:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],river:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],robotraconteur:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],"rpds-py":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],"ruamel.yaml":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],rustworkx:[0,1,2,3,4,5,6,7,8,9],"scikit-image":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],"scikit-learn":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],scipy:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],screed:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],setuptools:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],shapely:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],simplejson:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],sisl:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],six:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],"smart-open":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],sniffio:[0,1,2,3,4,5,6,7,8,9,10,11,12],sortedcontainers:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],soundfile:[0,1,2,3,4,5,6,7,8,9],soupsieve:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],sourmash:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],soxr:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],sparseqr:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],sqlalchemy:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],"stack-data":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],starlette:[0,1,2,3,4,5],statsmodels:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],strictyaml:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],svgwrite:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],swiglpk:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],sympy:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],tblib:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],termcolor:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],texttable:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],texture2ddecoder:[0,1,2,3,4,5,6,7,8,9],threadpoolctl:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],tiktoken:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],tomli:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],"tomli-w":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],toolz:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],tqdm:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],traitlets:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],traits:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],"tree-sitter":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],"tree-sitter-go":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],"tree-sitter-java":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],"tree-sitter-python":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],tskit:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],"typing-extensions":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],"typing-inspection":[0,1,2,3],tzdata:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],ujson:[0,1,2,3,4,5,6,7,8,9],uncertainties:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],unyt:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],urllib3:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],"vega-datasets":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],vrplib:[0,1,2,3,4,5],wcwidth:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],webencodings:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],wordcloud:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],wrapt:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],xarray:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],xgboost:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],xlrd:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],xxhash:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],xyzservices:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],yarl:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],yt:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],zengl:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],zfpy:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],zstandard:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],"arro3-compute":[10,11,12,13,14,15,16,17],"arro3-core":[10,11,12,13,14,15,16,17],"arro3-io":[10,11,12,13,14,15,16,17],duckdb:[10,11,12,13,14,15,16,17],gensim:[10,11,12,13,14,15,16,17],"matplotlib-pyodide":[10,11,12,13,14,15,16,17],mne:[10,11,12,13,14,15,16,17],osqp:[10,11,12],polars:[10,11,12,13,14,15,16,17],"rust-abi-test":[10,11,12,13,14,15,16,17],"rust-panic-test":[10,11,12,13,14,15,16,17],zarr:[10,11,12,13,14,15,16,17]}},{has:(e,t)=>e.v.includes(t),get:(e,t)=>{const n=e.v.indexOf(t);return new Proxy(e.p,{has:(e,t)=>e[t]?.includes(n)})}}),Hr=Object.freeze({__proto__:null,default:zr});const qr="ruby-wasm-wasi",Nr=qr.replace(/\W+/g,"_");var Jr={type:qr,experimental:!0,module:(e="2.8.1")=>`https://cdn.jsdelivr.net/npm/@ruby/3.2-wasm-wasi@${e}/dist/browser/+esm`,async engine({DefaultRubyVM:e},t,n,r){n=n.replace(/\/browser\/\+esm$/,"/ruby.wasm");const s=await o(n).arrayBuffer(),a=await WebAssembly.compile(s),{vm:i}=await e(a);return t.files&&await Zn(this,i,t.files,r),t.fetch&&await Xn(this,i,t.fetch,r),t.js_modules&&await Qn(t.js_modules,r),i},registerJSModule(e,t,n){t=t.replace(/\W+/g,"__");const r=`__module_${Nr}_${t}`;globalThis[r]=n,this.run(e,`require "js";$${t}=JS.global[:${r}]`),delete globalThis[r]},run:(e,t,...n)=>e.eval(hn(t),...n),runAsync:(e,t,...n)=>e.evalAsync(hn(t),...n),async runEvent(e,t,n){if(/^xworker\.(on\w+)$/.test(t)){const{$1:t}=RegExp,r=`__module_${Nr}_event`;globalThis[r]=n,this.run(e,`require "js";$xworker.call("${t}",JS.global[:${r}])`),delete globalThis[r]}else{const r=this.run(e,`method(:${t})`);await r.call(t,e.wrap(n))}},transform:(e,t)=>t,writeFile:()=>{throw new Error(`writeFile is not supported in ${qr}`)}};var Kr={type:"wasmoon",module:(e="1.16.0")=>`https://cdn.jsdelivr.net/npm/wasmoon@${e}/+esm`,async engine({LuaFactory:e,LuaLibraries:t},n,r,s){const{stderr:o,stdout:a,get:i}=tn(),c=await i((new e).createEngine());return c.global.getTable(t.Base,e=>{c.global.setField(e,"print",a),c.global.setField(e,"printErr",o)}),n.files&&await Zn(this,c,n.files,s),n.fetch&&await Xn(this,c,n.fetch,s),n.js_modules&&await Qn(n.js_modules,s),c},registerJSModule:(e,t,n)=>{e.global.set(t,n)},run:(e,t,...n)=>{try{return e.doStringSync(hn(t),...n)}catch(t){en.get(e).stderr(t)}},runAsync:async(e,t,...n)=>{try{return await e.doString(hn(t),...n)}catch(t){en.get(e).stderr(t)}},runEvent:async(e,t,n)=>{const[r,...s]=t.split(".");let o,a=e.global.get(r);for(const e of s)[o,a]=[a,a[e]];try{await a.call(o,n)}catch(t){en.get(e).stderr(t)}},transform:(e,t)=>t,writeFile:({cmodule:{module:{FS:e}}},t,n)=>((e,t,n)=>(Nn(e,qn(t)),t=Jn(e,t),e.writeFile(t,new Uint8Array(n),{canOwn:!0})))(e,t,n)};const Gr=new WeakMap,Xr=new FinalizationRegistry(e=>e()),Vr=async(e,t)=>{const{shelter:n,destroy:r,io:s}=Gr.get(e),{output:o,result:a}=await n.captureR(hn(t));for(const{type:e,data:t}of o)s[e](t);return Xr.register(a,r),a};var Yr={type:"webr",experimental:!0,module:(e="0.5.8")=>`https://cdn.jsdelivr.net/npm/webr@${e}/dist/webr.mjs`,async engine(e,t,n,r){const{get:s}=tn(),o=new e.WebR;await s(o.init().then(()=>o));const a=await new o.Shelter;return Gr.set(o,{module:e,shelter:a,destroy:a.destroy.bind(a),io:en.get(o)}),t.files&&await Zn(this,o,t.files,r),t.fetch&&await Xn(this,o,t.fetch,r),t.js_modules&&await Qn(t.js_modules,r),o},registerJSModule(e,t){console.warn(`Experimental interpreter: module ${t} is not supported (yet)`)},run:Vr,runAsync:Vr,async runEvent(e,t,n){await e.evalRVoid(`${t}(event)`,{env:{event:{type:[n.type]}}})},transform:(e,t)=>t,writeFile:()=>{}};const Zr=new Map,Qr=new Map,es=[],ts=[],ns=new Proxy(new Map,{get(e,t){if(!e.has(t)){const[n,...r]=t.split("@"),s=Zr.get(n),o=/^(?:\.?\.?\/|[a-z0-9-]+:\/\/)/i.test(r)?r.join("@"):s.module(...r);e.set(t,{url:o,module:import(o),engine:s.engine.bind(s)})}const{url:n,module:r,engine:s}=e.get(t);return(e,o)=>r.then(r=>(Qr.set(t,e),s(r,e,n,o)))}}),rs=e=>{for(const t of[].concat(e.type))Zr.set(t,e),es.push(`script[type="${t}"]`),ts.push(`${t}-`)};for(const e of[cn,Sr,Ir,zr,Jr,Kr,Yr])rs(e);const{parse:ss}=JSON,os=(e,t="./config.txt")=>{let n=typeof e;return"string"===n&&/\.(json|toml|txt)$/.test(e)?n=RegExp.$1:e=t,[En(e),n]},as=(e,t,n={})=>{const[r,s]=os(e,t);if("json"===s)n=o(r).json();else if("toml"===s){const{parser:e}=n;n=o(r).text().then(async t=>{const n=e?await import(e):{parse:yr};return(n.parse||n.default)(t)})}else"string"===s?n=is(e):"object"===s&&e?n=e:"txt"===s&&"string"==typeof n&&(n=is(n));return[n,e=r]},is=e=>{try{return ss(e)}catch(t){return yr(e)}},cs=(e,t,n,r={})=>(t&&([r,t]=as(t,n,r)),kn(r).then(n=>ns[e](n,t))),ls=(e,t="")=>`${e}@${t}`.replace(/@$/,"");function ps(e=this){return String(e).replace(/^(async\s*)?(\bfunction\b)?(.*?)\(/,(e,t,n,r)=>r&&!n?`${t||""}function ${r}(`:e)}const us="BeforeRun",ds="AfterRun",fs=[`code${us}`,`code${us}Async`,`code${ds}`,`code${ds}Async`],hs=["onWorker","onReady",`on${us}`,`on${us}Async`,`on${ds}`,`on${ds}Async`];function ys(e,t){const{run:n,runAsync:r}=Zr.get(this.type);return{...e,run:n.bind(this,t),runAsync:r.bind(this,t)}}const ms=(e,t,n,r,s,o)=>{if(s||o){const a=ys.bind(e,t),i=r?"runAsync":"run",c=e[i];e[i]=r?async function(e,t,...r){s&&await s.call(this,a(e),n);const i=await c.call(this,e,t,...r);return o&&await o.call(this,a(e),n),i}:function(e,t,...r){s&&s.call(this,a(e),n);const i=c.call(this,e,t,...r);return o&&o.call(this,a(e),n),i}}};let gs=class{constructor(e,t={}){const{main:n,worker:r}=t;this.interpreter=e,this.onWorker=n?.onWorker;for(const e of hs.slice(1))this[e]=r?.[e];for(const e of fs)this[e]=r?.[e]}toJSON(){const e={};for(const t of hs.slice(1))this[t]&&(e[t]=ps(this[t]));for(const t of fs)this[t]&&(e[t]=hn(this[t]()));return e}};var ws=(...e)=>function(t,n){if(e.length){const[t,r]=e;(n=gn({},n||{type:t,version:r})).type||(n.type=t)}const[r]=os(n.config,n.configURL),s=((...e)=>new Qt(URL.createObjectURL(new Blob(["/*@*/"+'const{assign:e}=Object,t="entries",n="readonly",r="readwrite",s={durability:"default",prefix:"IDBMap"},o=({target:{result:e}})=>e;class a extends EventTarget{#e;#t;#n;async#r(n,r){const s=(await this.#e).transaction(t,r,this.#t);return new Promise((r,o)=>e(n(s.objectStore(t)),{onsuccess:r,onerror:o}))}constructor(n,{durability:r=s.durability,prefix:a=s.prefix}=s){super(),this.#n=a,this.#t={durability:r},this.#e=new Promise((r,s)=>{e(indexedDB.open(`${this.#n}/${n}`),{onupgradeneeded({target:{result:e,transaction:n}}){e.objectStoreNames.length||e.createObjectStore(t),n.oncomplete=()=>r(e)},onsuccess(e){r(o(e))},onerror(e){s(e),this.dispatchEvent(e)}})}).then(e=>{const t=this.dispatchEvent.bind(this);for(const n in e)n.startsWith("on")&&(e[n]=t);return e})}dispatchEvent(t){const{type:n,message:r,isTrusted:s}=t;return super.dispatchEvent(s?e(new Event(n),{message:r}):t)}async close(){(await this.#e).close()}get size(){return this.#r(e=>e.count(),n).then(o)}async clear(){await this.#r(e=>e.clear(),r)}async delete(e){await this.#r(t=>t.delete(e),r)}async entries(){const e=await this.keys();return Promise.all(e.map(e=>this.get(e).then(t=>[e,t])))}async forEach(e,t=this){for(const[n,r]of await this.entries())await e.call(t,r,n,this)}async get(e){return await this.#r(t=>t.get(e),n).then(o)}async has(e){return void 0!==await this.#r(t=>t.getKey(e),n).then(o)}async keys(){return await this.#r(e=>e.getAllKeys(),n).then(o)}async set(e,t){return await this.#r(n=>n.put(t,e),r),this}async values(){const e=await this.keys();return Promise.all(e.map(e=>this.get(e)))}get[Symbol.toStringTag](){return this.#n}}class i extends Map{#s;#o;constructor(...e){super(),this.#s=new a(...e),this.#o=this.#s.entries().then(e=>{for(const[t,n]of e)super.set(t,n)})}async close(){await this.#o,await this.#s.close()}async sync(){await this.#o}clear(){return this.#o=this.#o.then(()=>this.#s.clear()),super.clear()}delete(e){return this.#o=this.#o.then(()=>this.#s.delete(e)),super.delete(e)}set(e,t){return this.#o=this.#o.then(()=>this.#s.set(e,t)),super.set(e,t)}}const c="59317780",l="="+c,p="-"+c;let u=0;const d=u++,f=u++,h=u++,y=u++,m=u++,g=u++,w=u++,b=u++,_=u++,A=u++,k=u++,v=u++,x=u++,E=u++,j=u++,$=u++,S=u++,B=u++,P=u++,M=u++,F=u++,T=u++,R=u++,D=u++,L=u++,O=u++,C=u++,I=u++;const z=globalThis.ImageData||class{},U=new TextDecoder,H=new TextEncoder,W=new Map(Reflect.ownKeys(Symbol).map(e=>[Symbol[e],`@${String(e)}`])),q=e=>{switch(e[0]){case"@":return Symbol[e.slice(1)];case"#":return Symbol.for(e.slice(1));case"!":return Symbol(e.slice(1));default:return Symbol()}},N=e=>W.get(e)||((e,t)=>void 0===t?"?":void 0===Symbol.keyFor(e)?`!${t}`:`#${t}`)(e,e.description),J=Object.defineProperty,K=Object.assign,G=Array.isArray,V=ArrayBuffer.isView,X=(e,t)=>[e,t],Y=e=>e,Z=[],Q={},ee=function(){},te=e=>(t,n=new Map)=>{for(let r=0,s=t.length;r0===e?t:q(t),re=e=>"string"==typeof e?X(0,e):X(16,N(e)),se=(e,t)=>{for(let n=e.push,r=0,s=t.length;r(e.set(t,n),n),le=e=>{ie[0]=e[de++],ie[1]=e[de++],ie[2]=e[de++],ie[3]=e[de++],ie[4]=e[de++],ie[5]=e[de++],ie[6]=e[de++],ie[7]=e[de++]},pe=e=>(ie[0]=e[de++],ie[1]=e[de++],ie[2]=e[de++],ie[3]=e[de++],ae.getUint32(0,!0)),ue=(e,t)=>{switch(e[de++]){case m:return le(e),ae.getFloat64(0,!0);case g:return e[de++];case F:{const n=ce(t,de-1,{});for(let r=0,s=pe(e);r(de=0,ue(e,new Map)),he=({byteOffset:e=0}={})=>(t,n)=>fe(new Uint8Array(n,e,t));let ye=0;const me=ye++,ge=ye++,we=ye++,be=ye++,_e=ye++,Ae=ye++,ke=ye++,ve=ye++,xe=ye++,Ee=ye++,je=ye++,$e=ye++,Se=ye++,Be=ye++,Pe=ye++;ye++;const Me=ye++,Fe=ye++,{getPrototypeOf:Te}=Object,{construct:Re}=Reflect,{toStringTag:De}=Symbol,{toString:Le}=Q,Oe=(e,t=Le.call(e).slice(8,-1))=>t in globalThis?t:Oe(Te(e)||Q),Ce=(e,t=e[De])=>t in globalThis?t:Ce(Re(Te(e.constructor),[0])),Ie=(e,t)=>new ArrayBuffer(e,{maxByteLength:t}),ze=([e,t],n)=>{const r=n?e.byteLength:e.length;if(n){if(t){const n=Ie(r,t);new Uint8Array(n).set(new Uint8Array(e)),e=n}}else{const n=t?Ie(r,t):new ArrayBuffer(r);new Uint8Array(n).set(e),e=n}return e};const Ue=/\\[(\'|")?(.+?)\\1\\]/g,He=(e,t)=>e?.[t];var We=e=>{const t=[],n=e=>{const n=t.splice(e);for(;e{t.push(r,s)<3&&setTimeout(n,e,0)})(super.set(r,s),r),s}}},qe=({reflect:e=Y,transform:t=Y,released:n=Y,buffer:r=!1,timeout:s=-1}=Q)=>{const o=te(ne),a=te(re),i=e=>{if(!G(e))return e;const[t,n]=e;if(1&t)return p(t,n);switch(t){case 2:return j;case 0:return n;case 16:return q(n);case 32:return BigInt(n);case 68:return(([e,t,n,r],s)=>{const o=ze(t,s),a=globalThis[e];return r?new a(o,n,r):new a(o,n)})(n,r);case 64:return ze(n,r)}},c=(e,n=new Map)=>{switch(typeof e){case"object":{if(null===e)break;if(e===globalThis)return E;if(x in e)return g;let r=n.get(e);if(!r){const s=t(e);if(w||!m.has(s)){if(G(s)){const t=[];r=X(4,t),n.set(e,r);for(let e=0,r=s.length;e{let n=v.get(t),r=n?.deref();return r||(n&&$.unregister(n),r=9===e?new Proxy(ee,new y(e,t)):new Proxy(3===e?Q:Z,new h(e,t)),n=new WeakRef(r),v.set(t,n),$.register(r,t,n)),r},u=e=>{switch(typeof e){case"object":if(null===e)break;case"function":return x in e}return!1},d=-1this.apply(e,t,n);case"call":return(t,...n)=>this.apply(e,t,n);default:return super.get(e,t)}}}let m,g,w=!0;const{apply:b}=Reflect,{id:_,ref:A,unref:k}=((e=0,t=new Map,n=new Map)=>({clear:()=>{t.clear(),n.clear()},id:r=>{let s=n.get(r);if(void 0===s){for(;t.has(s=e++););t.set(s,r),n.set(r,s)}return s},ref:e=>t.get(e),unref:e=>(n.delete(t.get(e)),t.delete(e))}))(),v=new Map,x=Symbol("reflected-ffi"),E=X(2,null),j=new Proxy(Q,new h(2,null)),$=new FinalizationRegistry(t=>{v.delete(t),e(me,t)});return{global:j,isProxy:u,assign(t,...n){const r=u(t),s=K(r?{}:t,...n);return r&&e(ge,g[1],c(s)),t},direct:e=>(w&&(w=!1,m=new WeakSet),m.add(e),e),evaluate:(t,...n)=>i(e(we,null,function(e=this){return String(e).replace(/^(async\\s*)?(\\bfunction\\b)?(.*?)\\(/,(e,t,n,r)=>r&&!n?`${t||""}function ${r}(`:e)}(t),l(n))),gather(t,...n){const r=u(t),s=r?i:e=>t[e];r&&(n=e(be,g[1],a(n,v)));for(let e=0;eu(t)?i(e(_e,g[1],n)):((e,t)=>t.replace(Ue,".$2").split(".").reduce(He,e))(t,n),reflect:async(e,t,...r)=>{switch(e){case Ae:{const[e,n]=r;for(let e=0,t=n.length;e{e=n,t=r});return{resolve:e,reject:t,promise:n}};var Je=Ne.bind(Promise),Ke=(e=e=>e)=>{const t=new Map,n=(()=>{const e=new Int32Array(1);return()=>e[0]++})();return[()=>{let r;do{r=e(n())}while(t.has(r));const s=Je();return t.set(r,s),[r,s.promise]},(e,n,r)=>{const s=t.get(e);t.delete(e),r?s?.reject(r):s?.resolve(n)}]};const Ge=[],Ve=new WeakSet,Xe=(...e)=>(Ve.add(e),e);let{SharedArrayBuffer:Ye}=globalThis,Ze=!0;try{new Ye(4,{maxByteLength:8})}catch(e){Ze=!1,Ye=class extends ArrayBuffer{get growable(){return super.resizable}grow(e){super.resize(e)}}}const{create:Qe}=Object,et=`coincident-${Ze?crypto.randomUUID():Math.random().toString(36).substring(2)}`,tt=2*Int32Array.BYTES_PER_ELEMENT,nt={byteOffset:tt},rt=(e,t,n)=>{const r="then"!==t;return r&&(e[t]=n),r},st=e=>{e.stopImmediatePropagation(),e.preventDefault()},[ot,at]=Ke();let[it,ct]=ot(),lt=()=>ct,pt=()=>{},{Atomics:ut,MessagePort:dt,SharedArrayBuffer:ft,postMessage:ht}=globalThis;if(Ze)at(it);else{ft=Ye;const e=new Map,t=(e,...t)=>{e.addEventListener(...t)};if("importScripts"in globalThis){pt=t=>{e.set(t,null)};const n=t=>{const n=t[0],r=u++;return e.set(n,r),[r,n,t]},r=ht;ht=function(e,t){if(p){const s={ID:e.ID,data:n(e.data)};r(s,t)}else ct.then(()=>this.postMessage(e,t))},dt=class extends dt{postMessage(e,t){p?super.postMessage(n(e),t):ct.then(()=>this.postMessage(e,t))}},t(globalThis,"message",e=>{st(e),at(it,e.data)},{once:!0});const{wait:s}=ut,{parse:o}=JSON,a=t=>{const n=new XMLHttpRequest;try{if(n.timeout=3e3,n.open("POST",`${l}?sabayon`,!1),n.setRequestHeader("Content-Type","application/json"),n.send(`["${c}",${e.get(t)}]`),200===n.status)return n;throw n}catch{return n.abort(),a(t)}},i=(e,t)=>(e.set(o(t.responseText)),"ok");ut={wait:(t,...n)=>e.has(t)?i(t,a(t)):s(t,...n)};let c,l,p=!1,u=Math.random();ct=ct.then(e=>{[c,l]=e,p=!0})}else{const n=[et,Math.random()].join("-").replace(/\\W/g,"-"),r=new BroadcastChannel("dc78209b-186c-4f83-80e9-406becb7d9f3");r.onmessage=async t=>{const[s,o,a]=t.data;if(o===n)for(const[t,[n,o]]of e)if(n===a){await o.promise;let e=t.length;for(;e--&&!t[e];);r.postMessage([s,t.slice(0,e+1)]);break}};const{notify:s}=ut;ut={notify(t,...n){const r=e.get(t);return r?(r[1].resolve(),0):s(t,...n)}};let o="",a=null;const i=(e,n)=>{let r,s=!0;e.getRegistration(o).then(t=>t??e.register(o,n)).then(function n(a){const{controller:i}=e;if(s=s&&!!i,r=a.installing||a.waiting||a.active,"activated"===r.state){if(s){if(i.scriptURL===o)return at(it);a.unregister()}location.reload()}else t(r,"statechange",()=>n(a),{once:!0})})};lt=(e,t)=>{if(!a){const n=new URL(e,location.href);o=`${n.protocol}//${n.host}${n.pathname}`,i(navigator.serviceWorker,t),a=ct}return a}}}const{setPrototypeOf:yt}=Reflect;let{postMessage:mt}=globalThis;const gt=Je(),wt=dt.prototype;addEventListener("message",e=>{st(e);const[t,n,r]=e.data,[s]=e.ports;n&&(yt(s,wt),t&&(mt=ht)),gt.resolve([t,n,r,s])},{once:!0});var bt=async e=>{const[t,n,r,s]=await lt().then(()=>gt.promise),o=!!t,a=Ze||!!n,i=e?.transform,c=(e?.decoder||he)(nt),l=!1!==e?.transfer;let p,u,d,f;if(a){const t=new(n?ft:SharedArrayBuffer)(e?.minByteLength||32767,{maxByteLength:e?.maxByteLength||16777216});p=new Int32Array(t),n?(({wait:f}=ut),pt(p)):(({load:u,pause:d,wait:f}=Atomics),d&&(f=(e,t)=>{do{d()}while(u(e,t)<1)}))}const[h,y]=Ke(String),m=new Map,g=Qe(null),w=new Proxy(g,{get(e,n){if("then"===n)return;let r=m.get(n);return r||m.set(n,r=(...e)=>{const r=((e,t)=>{let n=Ge;return e&&G(t.at(-1))&&Ve.has(t.at(-1))&&(n=t.pop(),Ve.delete(n)),n})(l,e),u=[p,n,i?e.map(i):e];if(a){o?mt({ID:t,data:u},r):s.postMessage(u,r),f(p,0),p[0]=0;const e=p[1]?c(p[1],p.buffer):void 0;if(e instanceof Error)throw e;return e}{const[e,t]=h();return u[0]=e,s.postMessage(u,r),t}}),r},set:rt});return s.addEventListener("message",async({data:e})=>{"string"==typeof e[0]?y.apply(null,e):(await(async(e,t,n)=>{try{const r=await t[e[1]].apply(null,e[2]);e[1]=n?n(r):r,e[2]=null}catch(t){e[2]=t}})(e,g,i),s.postMessage(e))}),s.start(),{native:Ze,proxy:w,ffi_timeout:r,sync:a,transfer:Xe}};const _t={object(...e){return this.string(function(e){for(var t=e[0],n=1,r=arguments.length;n{const t=e||console,n={buffered:xt,stderr:(t.stderr||console.error).bind(t),stdout:(t.stdout||console.log).bind(t)};return{stderr:(...e)=>n.stderr(...e),stdout:(...e)=>n.stdout(...e),async get(e){const t=await e;return At.set(t,n),t}}},vt=new TextDecoder,xt=(e,t=10)=>{const n=[];return r=>{if(r instanceof Uint8Array)for(const s of r)s===t?e(vt.decode(new Uint8Array(n.splice(0)))):n.push(s);else e(r)}},Et=(e,...t)=>_t[typeof e](e,...t),{isArray:jt}=Array,{assign:$t,create:St,defineProperty:Bt,entries:Pt}=Object,{all:Mt,resolve:Ft}=new Proxy(Promise,{get:(e,t)=>e[t].bind(e)}),Tt=(e,t=location.href)=>new URL(e,t.replace(/^blob:/,"")).href;function Rt(e){return e.startsWith(".")?Tt(e,this):e}const Dt=(e,t,n,r=!1,s=CustomEvent)=>{e.dispatchEvent(new s(`${t}:${n}`,{bubbles:!0,detail:{worker:r}}))},Lt=e=>Function(`\'use strict\';return (${e})`)(),Ot=e=>e.replace(/^(?:\\n|\\r\\n)/,""),Ct=Symbol.for("polyscript.js_modules"),It=new Map;Bt(globalThis,Ct,{value:It}),new Proxy(It,{get:(e,t)=>e.get(t),has:(e,t)=>e.has(t),ownKeys:e=>[...e.keys()]});const zt=(e,t)=>!t.startsWith("_"),Ut=(e,t)=>new Proxy(e,{has:zt,get:(e,n)=>e[t][n]}),Ht=(e,t)=>import(e).then(e=>{It.set(t,{...e})}),Wt=e=>new Promise((t,n)=>{document.querySelector(`link[rel="stylesheet"][href="${e}"]`)?t():document.head.append($t(document.createElement("link"),{rel:"stylesheet",href:e,onload:t,onerror:n}))}),qt=e=>/\\.css$/i.test(new URL(e).pathname),Nt=(e,t)=>e.has(t),Jt=e=>[...e.keys()];var Kt=(e,t,n,r)=>{const s=globalThis[Ct];if(n)for(let[e,t]of Pt(n)){let n=s.get(t);n&&!jt(n)||(s.set(t,n||(n=[])),n.push(e))}return((e,t,n,r)=>new Proxy(e,{has:Nt,ownKeys:Jt,get:(e,s)=>{let o=e.get(s);if(jt(o)){let a=o;o=null;for(let e of a)e=Tt(e,r),qt(e)?n.importCSS(e):(n.importJS(e,s),o=t[Ct].get(s));e.set(s,o)}return o}}))(s,e,t,r)};const Gt=new Map,Vt=e=>Gt.get(e),Xt=(e,t)=>{try{return Function("require",t)(Vt)}catch(t){At.get(e).stderr(t)}};var Yt={type:"dummy",module:()=>"data:text/javascript,",engine:e=>kt().get(e),registerJSModule(e,t,n){Gt.set(t,n)},run:Xt,runAsync:Xt,runEvent:async(e,t,n)=>{try{await Function("require","e",`return ${t}(e)`)(Vt,n)}catch(t){At.get(e).stderr(t)}},transform:(e,t)=>t,writeFile(){}};const Zt=Object.getOwnPropertyDescriptors(Response.prototype),Qt=e=>"function"==typeof e,en={get:(e,t)=>Zt.hasOwnProperty(t)?((e,t,{get:n,value:r})=>n||!Qt(r)?e.then(e=>e[t]):(...n)=>e.then(e=>e[t](...n)))(e,t,Zt[t]):((e,t)=>Qt(t)?t.bind(e):t)(e,e[t])};var tn=(e,...t)=>new Proxy(fetch(e,...t).then(t=>t.ok?t:Promise.reject(new Error(`[${t.status}] Unable to fetch ${e}`))),en);const nn=!globalThis.window,rn=({FS:e,PATH:t,PATH_FS:n},r,s)=>{const o=n.resolve(r),a=t.dirname(o);return e.mkdirTree?e.mkdirTree(a):on(e,a),e.writeFile(o,new Uint8Array(s),{canOwn:!0})},sn=e=>{const t=e.split("/");return t.pop(),t.join("/")},on=(e,t)=>{const n=[];for(const r of t.split("/"))"."!==r&&".."!==r&&(n.push(r),r&&e.mkdir(n.join("/")))},an=(e,t)=>{const n=[];for(const e of t.split("/"))switch(e){case"":case".":break;case"..":n.pop();break;default:n.push(e)}return[e.cwd()].concat(n).join("/").replace(/^\\/+/,"/")},cn=e=>{const t=e.map(e=>e.trim().replace(/(^[/]*|[/]*$)/g,"")).filter(e=>""!==e&&"."!==e).join("/");return e[0].startsWith("/")?`/${t}`:t},ln=(e,t)=>tn(Tt(e,t)).arrayBuffer(),pn=(e,t,n,r)=>Mt((e=>{for(const{files:t,to_file:n,from:r=""}of e){if(void 0!==t&&void 0!==n)throw new Error("Cannot use \'to_file\' and \'files\' parameters together!");if(void 0===t&&void 0===n&&r.endsWith("/"))throw new Error(`Couldn\'t determine the filename from the path ${r}, please supply \'to_file\' parameter.`)}return e.flatMap(({from:e="",to_folder:t=".",to_file:n,files:r})=>{if(jt(r))return r.map(n=>({url:cn([e,n]),path:cn([t,n])}));const s=n||e.slice(1+e.lastIndexOf("/"));return[{url:e,path:cn([t,s])}]})})(n).map(({url:n,path:s})=>ln(n,r).then(n=>e.writeFile(t,s,n)))),un=(e,t)=>t.endsWith("/")?`${t}${e.split("/").pop()}`:t,dn=(e,t)=>e.replace(/\\{.+?\\}/g,e=>{if(!t.has(e))throw new SyntaxError(`Invalid template: ${e}`);return t.get(e)}),fn=(e,t,n,r)=>Mt((e=>{const t=new Map,n=new Set,r=[];for(const[s,o]of Pt(e))if(/^\\{.+\\}$/.test(s)){if(t.has(s))throw new SyntaxError(`Duplicated template: ${s}`);t.set(s,dn(o,t))}else{const e=dn(s,t),a=un(e,dn(o||"./",t));if(n.has(a)&&!a.endsWith("/*"))throw new SyntaxError(`Duplicated destination: ${a}`);n.add(a),r.push({url:e,path:a})}return r})(n).map(({url:n,path:s})=>ln(n,r).then(r=>e.writeFile(t,s,r,n)))),hn=({main:e,worker:t},n)=>{const r=[];if(t&&nn)for(let[e,s]of Pt(t))e=Tt(e,n),r.push(Ht(e,s));if(e&&!nn)for(let[t,s]of Pt(e))t=Tt(t,n),qt(t)?Wt(t):r.push(Ht(t,s));return Mt(r)},yn=e=>t=>{dispatchEvent(new CustomEvent(`${e}:progress`,{detail:t}))},{isNaN:mn,isFinite:gn,isInteger:wn}=Number,{ownKeys:bn}=Reflect,{is:_n}=Object,An=(e,t,n)=>{const r=n.get(e),s=!r;return s?(ae.setUint32(0,t.length,!0),n.set(e,[ie[0],ie[1],ie[2],ie[3]])):t.push(I,r[0],r[1],r[2],r[3]),s},kn=(e,t,n)=>{ae.setUint32(0,n,!0),e.push(t,ie[0],ie[1],ie[2],ie[3])},vn=(e,t,n)=>{switch(typeof e){case"number":e&&gn(e)?wn(e)&&e<256&&-1[s,e]));break}default:if("toJSON"in e){const r=e.toJSON();vn(r===e?null:r,t,n)}else{const r=bn(e),s=r.length;kn(t,F,s);for(let o=0;o{const t=[];return En=se,vn(e,t,new Map),t}},$n=new WeakMap,Sn=async(e,t,n,r,s)=>{r.files&&(t("Loading files"),await fn(e,n,r.files,s),t("Loaded files")),r.fetch&&(t("Loading fetch"),await pn(e,n,r.fetch,s),t("Loaded fetch")),r.js_modules&&(t("Loading JS modules"),await hn(r.js_modules,s),t("Loaded JS modules"))},Bn=(e,t,n)=>{"polyscript"===t&&(n.lazy_py_modules=async(...t)=>(await $n.get(e)(t),t.map(t=>e.pyimport(t))),n.storage=async e=>{const t=new i(e);return await t.sync(),t},n.JSON=jn),e.registerJsModule(t,n)},Pn=(e,t)=>{if(e.endsWith("/*")){if(/\\.(zip|whl|tgz|tar(?:\\.gz)?)$/.test(t))return RegExp.$1;throw new Error(`Unsupported archive ${t}`)}return""},Mn=(e,t,...n)=>{try{return e.runPython(Et(t),...n)}catch(t){At.get(e).stderr(t)}},Fn=async(e,t,...n)=>{try{return await e.runPythonAsync(Et(t),...n)}catch(t){At.get(e).stderr(t)}},Tn=async(e,t,n)=>{const[r,...s]=t.split(".");let o,a=e.globals.get(r);for(const e of s)[o,a]=[a,a[e]];try{await a.call(o,n)}catch(t){At.get(e).stderr(t)}};var Rn=(new TextEncoder).encode("_F=\'github:\'\\n_E=\'user-agent\'\\n_D=True\\n_C=False\\n_B=\'/\'\\n_A=None\\nfrom uio import StringIO\\nimport sys\\nclass Response:\\n\\tdef __init__(A,f):A.raw=f;A.encoding=\'utf-8\';A._cached=_A\\n\\tdef close(A):\\n\\t\\tif A.raw:A.raw.close();A.raw=_A\\n\\t\\tA._cached=_A\\n\\t@property\\n\\tdef content(self):\\n\\t\\tA=self\\n\\t\\tif A._cached is _A:\\n\\t\\t\\ttry:A._cached=A.raw.read()\\n\\t\\t\\tfinally:A.raw.close();A.raw=_A\\n\\t\\treturn A._cached\\n\\t@property\\n\\tdef text(self):return str(self.content,self.encoding)\\n\\tdef json(A):import ujson;return ujson.loads(A.content)\\nHEADERS_TO_IGNORE=_E,\\ntry:import js\\nexcept Exception as err:raise OSError(\'This version of urequests can only be used in the browser\')\\nHEADERS_TO_IGNORE=_E,\\ndef request(method,url,data=_A,json=_A,headers={},stream=_A,auth=_A,timeout=_A,parse_headers=_D):\\n\\tE=timeout;D=method;C=data;from js import XMLHttpRequest as G;A=G.new();A.withCredentials=_C\\n\\tif auth is not _A:import ubinascii;H,I=auth;A.open(D,url,_C,H,I)\\n\\telse:A.open(D,url,_C)\\n\\tfor(F,J)in headers.items():\\n\\t\\tif F.lower()not in HEADERS_TO_IGNORE:A.setRequestHeader(F,J)\\n\\tif E:A.timeout=int(E*1000)\\n\\tif json is not _A:assert C is _A;import ujson;C=ujson.dumps(json);A.setRequestHeader(\'Content-Type\',\'application/json\')\\n\\tA.send(C);B=Response(StringIO(A.responseText));B.status_code=A.status;B.reason=A.statusText;B.headers=A.getAllResponseHeaders();return B\\ndef get(url,**A):return request(\'GET\',url,**A)\\n_PACKAGE_INDEX=const(\'https://micropython.org/pi/v2\')\\n_CHUNK_SIZE=128\\ndef _ensure_path_exists(path):\\n\\timport os;A=path.split(_B)\\n\\tif not A[0]:A.pop(0);A[0]=_B+A[0]\\n\\tB=\'\'\\n\\tfor C in range(len(A)-1):\\n\\t\\tB+=A[C]\\n\\t\\ttry:os.stat(B)\\n\\t\\texcept:os.mkdir(B)\\n\\t\\tB+=_B\\ndef _chunk(src,dest):\\n\\tA=memoryview(bytearray(_CHUNK_SIZE))\\n\\twhile _D:\\n\\t\\tB=src.readinto(A)\\n\\t\\tif B==0:break\\n\\t\\tdest(A if B==_CHUNK_SIZE else A[:B])\\ndef _check_exists(path,short_hash):\\n\\tA=short_hash;import os\\n\\ttry:\\n\\t\\timport binascii as C,hashlib as D\\n\\t\\twith open(path,\'rb\')as E:B=D.sha256();_chunk(E,B.update);F=str(C.hexlify(B.digest())[:len(A)],\'utf-8\');return F==A\\n\\texcept:return _C\\ndef _rewrite_url(url,branch=_A):\\n\\tB=branch;A=url\\n\\tif not B:B=\'HEAD\'\\n\\tif A.startswith(_F):A=A[7:].split(_B);A=\'https://raw.githubusercontent.com/\'+A[0]+_B+A[1]+_B+B+_B+_B.join(A[2:])\\n\\treturn A\\ndef _download_file(url,dest):\\n\\tB=dest;A=get(url)\\n\\ttry:\\n\\t\\tif A.status_code!=200:print(\'Error\',A.status_code,\'requesting\',url);return _C\\n\\t\\tprint(\'Copying:\',B);_ensure_path_exists(B)\\n\\t\\twith open(B,\'wb\')as C:_chunk(A.raw,C.write)\\n\\t\\treturn _D\\n\\tfinally:A.close()\\ndef _install_json(package_json_url,index,target,version,mpy):\\n\\tK=\'File not found: {} {}\';I=version;H=index;G=package_json_url;D=target;E=get(_rewrite_url(G,I))\\n\\ttry:\\n\\t\\tif E.status_code!=200:print(\'Package not found:\',G);return _C\\n\\t\\tF=E.json()\\n\\tfinally:E.close()\\n\\tfor(A,C)in F.get(\'hashes\',()):\\n\\t\\tB=D+_B+A\\n\\t\\tif _check_exists(B,C):print(\'Exists:\',B)\\n\\t\\telse:\\n\\t\\t\\tL=\'{}/file/{}/{}\'.format(H,C[:2],C)\\n\\t\\t\\tif not _download_file(L,B):print(K.format(A,C));return _C\\n\\tfor(A,J)in F.get(\'urls\',()):\\n\\t\\tB=D+_B+A\\n\\t\\tif not _download_file(_rewrite_url(J,I),B):print(K.format(A,J));return _C\\n\\tfor(M,N)in F.get(\'deps\',()):\\n\\t\\tif not _install_package(M,H,D,N,mpy):return _C\\n\\treturn _D\\ndef _install_package(package,index,target,version,mpy):\\n\\tD=index;C=target;B=version;A=package\\n\\tif A.startswith(\'http://\')or A.startswith(\'https://\')or A.startswith(_F):\\n\\t\\tif A.endswith(\'.py\')or A.endswith(\'.mpy\'):print(\'Downloading {} to {}\'.format(A,C));return _download_file(_rewrite_url(A,B),C+_B+A.rsplit(_B)[-1])\\n\\t\\telse:\\n\\t\\t\\tif not A.endswith(\'.json\'):\\n\\t\\t\\t\\tif not A.endswith(_B):A+=_B\\n\\t\\t\\t\\tA+=\'package.json\'\\n\\t\\t\\tprint(\'Installing {} to {}\'.format(A,C))\\n\\telse:\\n\\t\\tif not B:B=\'latest\'\\n\\t\\tprint(\'Installing {} ({}) from {} to {}\'.format(A,B,D,C));E=sys.implementation._mpy&255 if mpy and hasattr(sys.implementation,\'_mpy\')else\'py\';A=\'{}/package/{}/{}/{}.json\'.format(D,\'py\',A,B)\\n\\treturn _install_json(A,D,C,B,mpy)\\ndef install(package,index=_A,target=_A,version=_A,mpy=_D):\\n\\tB=target;A=index\\n\\tif not B:\\n\\t\\tfor C in sys.path:\\n\\t\\t\\tif C.endswith(\'/lib\'):B=C;break\\n\\t\\telse:print(\'Unable to find lib dir in sys.path\');return\\n\\tif not A:A=_PACKAGE_INDEX\\n\\tif _install_package(package,A.rstrip(_B),B,version,mpy):print(\'Done\')\\n\\telse:print(\'Package may be partially installed\')");const Dn=async e=>(await import("./toml-V4Savzlc.js")).parse(e);async function Ln(e,t){return new Promise((n,r)=>{e.syncfs(t,e=>{e?r(e):n()})})}function On(e){const t=e.FS,n=e.FS.filesystems.MEMFS,r=e.PATH,s={DIR_MODE:16895,FILE_MODE:33279,mount:function(e){if(!e.opts.fileSystemHandle)throw new Error("opts.fileSystemHandle is required");return n.mount.apply(null,arguments)},syncfs:async(e,t,n)=>{try{const r=s.getLocalSet(e),o=await s.getRemoteSet(e),a=t?o:r,i=t?r:o;await s.reconcile(e,a,i),n(null)}catch(e){n(e)}},getLocalSet:e=>{let n=Object.create(null);function s(e){return"."!==e&&".."!==e}function o(e){return t=>r.join2(e,t)}let a=t.readdir(e.mountpoint).filter(s).map(o(e.mountpoint));for(;a.length;){let e=a.pop(),r=t.stat(e);t.isDir(r.mode)&&a.push.apply(a,t.readdir(e).filter(s).map(o(e))),n[e]={timestamp:r.mtime,mode:r.mode}}return{type:"local",entries:n}},getRemoteSet:async e=>{const t=Object.create(null),n=await Cn(e.opts.fileSystemHandle);for(const[o,a]of n)"."!==o&&(t[r.join2(e.mountpoint,o)]={timestamp:"file"===a.kind?(await a.getFile()).lastModifiedDate:new Date,mode:"file"===a.kind?s.FILE_MODE:s.DIR_MODE});return{type:"remote",entries:t,handles:n}},loadLocalEntry:e=>{const r=t.lookupPath(e).node,s=t.stat(e);if(t.isDir(s.mode))return{timestamp:s.mtime,mode:s.mode};if(t.isFile(s.mode))return r.contents=n.getFileDataAsTypedArray(r),{timestamp:s.mtime,mode:s.mode,contents:r.contents};throw new Error("node type not supported")},storeLocalEntry:(e,n)=>{if(t.isDir(n.mode))t.mkdirTree(e,n.mode);else{if(!t.isFile(n.mode))throw new Error("node type not supported");t.writeFile(e,n.contents,{canOwn:!0})}t.chmod(e,n.mode),t.utime(e,n.timestamp,n.timestamp)},removeLocalEntry:e=>{var n=t.stat(e);t.isDir(n.mode)?t.rmdir(e):t.isFile(n.mode)&&t.unlink(e)},loadRemoteEntry:async e=>{if("file"===e.kind){const t=await e.getFile();return{contents:new Uint8Array(await t.arrayBuffer()),mode:s.FILE_MODE,timestamp:t.lastModifiedDate}}if("directory"===e.kind)return{mode:s.DIR_MODE,timestamp:new Date};throw new Error("unknown kind: "+e.kind)},storeRemoteEntry:async(e,n,s)=>{const o=e.get(r.dirname(n)),a=t.isFile(s.mode)?await o.getFileHandle(r.basename(n),{create:!0}):await o.getDirectoryHandle(r.basename(n),{create:!0});if("file"===a.kind){const e=await a.createWritable();await e.write(s.contents),await e.close()}e.set(n,a)},removeRemoteEntry:async(e,t)=>{const n=e.get(r.dirname(t));await n.removeEntry(r.basename(t)),e.delete(t)},reconcile:async(e,n,o)=>{let a=0;const i=[];Object.keys(n.entries).forEach(function(e){const r=n.entries[e],s=o.entries[e];(!s||t.isFile(r.mode)&&r.timestamp.getTime()>s.timestamp.getTime())&&(i.push(e),a++)}),i.sort();const c=[];if(Object.keys(o.entries).forEach(function(e){n.entries[e]||(c.push(e),a++)}),c.sort().reverse(),!a)return;const l="remote"===n.type?n.handles:o.handles;for(const t of i){const n=r.normalize(t.replace(e.mountpoint,"/")).substring(1);if("local"===o.type){const e=l.get(n),r=await s.loadRemoteEntry(e);s.storeLocalEntry(t,r)}else{const e=s.loadLocalEntry(t);await s.storeRemoteEntry(l,n,e)}}for(const t of c)if("local"===o.type)s.removeLocalEntry(t);else{const n=r.normalize(t.replace(e.mountpoint,"/")).substring(1);await s.removeRemoteEntry(l,n)}}};return e.FS.filesystems.NATIVEFS_ASYNC=s,async function(e,n){if("FileSystemDirectoryHandle"!==n.constructor.name)throw new TypeError("Expected argument \'fileSystemHandle\' to be a FileSystemDirectoryHandle");return function(e){t.mkdirTree?t.mkdirTree(e):on(t,e);const{node:n}=t.lookupPath(e,{follow_mount:!1});if(t.isMountpoint(n))throw new Error(`path \'${e}\' is already a file system mount point`);if(!t.isDir(n.mode))throw new Error(`path \'${e}\' points to a file not a directory`);for(const t in n.contents)throw new Error(`directory \'${e}\' is not empty`)}(e),t.mount(t.filesystems.NATIVEFS_ASYNC,{fileSystemHandle:n},e),await Ln(t,!0),{syncfs:async()=>await Ln(t,!1)}}}const Cn=async e=>{const t=[];await async function e(n){for await(const r of n.values())t.push(r),"directory"===r.kind&&await e(r)}(e);const n=new Map;n.set(".",e);for(const r of t){const t=(await e.resolve(r)).join("/");n.set(t,r)}return n},{parse:In}=JSON,zn=(e,t)=>new URL(e,t).href,Un=(e,t,n)=>{if(t in e)throw new Error(`Duplicated path: ${t}`);e[t]=n},Hn=(e,t,n)=>{for(const r in t)Un(e,zn(r,n),t[r])},Wn=(e,t,n,r)=>{const s=t[n];s&&(e[n]??={},Hn(e[n],s,r))},qn=async(e,t=e.packages,n=new Set)=>{const r=[];for(const s of t){if(n.has(s))continue;n.add(s);const t=s.endsWith(".toml");if(t||s.endsWith(".json")){const o=await tn(s).text(),{name:a,files:i,js_modules:c,packages:l}=t?await Dn(o):In(o);if(n.has(a))throw new Error(`Unable to process ${a} @ ${s}`);n.add(a),l&&r.push(...await qn(e,l,n)),c&&(e.js_modules??={},Wn(e.js_modules,c,"main",s),Wn(e.js_modules,c,"worker",s)),i&&(e.files??={},Hn(e.files,i,s))}else r.push(s)}return r},Nn=(e,t)=>{try{e.mkdir(t)}catch(e){}},Jn=yn("mpy");var Kn={type:"micropython",module:(e="1.28.0-preview-233")=>`https://cdn.jsdelivr.net/npm/@micropython/micropython-webassembly-pyscript@${e}/micropython.mjs`,async engine({loadMicroPython:e},t,n,r){const{stderr:s,stdout:o,get:a}=kt({stderr:xt(console.error),stdout:xt(console.log)}),i=[];t.debug&&i.push("settrace"),t.packages?.includes("ulab")&&(t.packages.splice(t.packages.indexOf("ulab"),1),i.push("ulab")),n=n.replace(/\\.m?js$/,".wasm");for(const e of i)n=n.replace(/\\.wasm$/,`-${e}.wasm`);Jn("Loading MicroPython");const c=await a(e({linebuffer:!1,stderr:s,stdout:o,url:n}));globalThis[Ct].set("-T-",this.transform.bind(this,c));const l=Gn.bind(this,c,r);return $n.set(c,l),t.experimental_remote_packages&&(Jn("Loading remote packages"),t.packages=await qn(t),Jn("Loaded remote packages")),await Sn(this,Jn,c,t,r),this.writeFile(c,"./mip.py",Rn),t.packages&&(Jn("Loading packages"),await l(t.packages.map(Rt,r)),Jn("Loaded packages")),Jn("Loaded MicroPython"),c.mountNativeFS||(c.mountNativeFS=On(c._module)),c},registerJSModule:Bn,run:Mn,runAsync:Fn,runEvent:Tn,transform:(e,t)=>e.PyProxy.toJs(t),writeFile:(e,t,n,r)=>{const{FS:s,_module:{PATH:o,PATH_FS:a}}=e,i={FS:s,PATH:o,PATH_FS:a},c=Pn(t,r);if(c){const r=t.slice(0,-1);switch("./"!==r&&s.mkdir(r),c){case"whl":case"zip":{const e=new Blob([n],{type:"application/zip"});return import("./zip-DeHJVpeC.js").then(async({BlobReader:t,Uint8ArrayWriter:n,ZipReader:a})=>{const i=new a(new t(e));for(const e of await i.getEntries()){const{directory:t,filename:a}=e,i=r+a;if(t)Nn(s,i);else{Nn(s,o.dirname(i));const t=await e.getData(new n);s.writeFile(i,t,{canOwn:!0})}}i.close()})}case"tgz":case"tar.gz":{const t="./_.tar.gz";return rn(i,t,n),void e.runPython(`\\n import os, gzip, tarfile\\n tar = tarfile.TarFile(fileobj=gzip.GzipFile(fileobj=open("${t}", "rb")))\\n for f in tar:\\n name = f"${r}{f.name}"\\n if f.type == tarfile.DIRTYPE:\\n if f.name != "./":\\n os.mkdir(name.strip("/"))\\n else:\\n dir = os.path.dirname(name)\\n if not os.path.exists(dir):\\n os.mkdir(dir)\\n source = tar.extractfile(f)\\n with open(name, "wb") as dest:\\n dest.write(source.read())\\n dest.close()\\n tar.close()\\n os.remove("${t}")\\n `)}}}return rn(i,t,n)}};async function Gn(e,t,n){let r;for(const s of n)if(s.endsWith(".whl")){const n=Tt(s,t),r=await tn(n).arrayBuffer();await this.writeFile(e,"./*",r,n)}else r||(r=e.pyimport("mip")),r.install(s)}const Vn={dict_converter:Object.fromEntries},{stringify:Xn}=JSON,{apply:Yn}=Reflect,Zn=Function.prototype,Qn=e=>function(...t){return Yn(e,this,t)};let er,tr;const nr=e=>{const t=new WeakMap,n=n=>{for(let r,s=0;s`https://cdn.jsdelivr.net/pyodide/v${e}/full/pyodide.mjs`,async engine({loadPyodide:e,version:t},n,r,s){rr("Loading Pyodide");let{packages:o,index_urls:a}=n;if(o){if(o=o.map(Rt,s),!a){rr("Loading Packages Graph");const{default:e}=await Promise.resolve().then(function(){return lr});if(t in e){const n=e[t];for(const e of o){if(/^(?:\\.|\\/|https?:\\/\\/)/.test(e))continue;const r=e.split(/[>=<]=/)[0];r.toLowerCase()in n||console.warn(`Pyodide ${t} might not support ${e}. See: https://packages.pyscript.net/?q=${r}`)}}rr("Loaded Packages Graph")}n.experimental_remote_packages&&(rr("Loading remote packages"),n.packages=o=await qn(n,o),rr("Loaded remote packages"))}rr("Loading Storage");const c=r.slice(0,r.lastIndexOf("/")),l=new i(`${c}@${t}`),p={indexURL:c},u="never"!==n.packages_cache&&"0.28.0"!==t;if(await l.sync(),rr("Loaded Storage"),u||l.clear(),o&&u)if("passthrough"===n.packages_cache)p.packages=o,o=null,l.clear();else{o=o.sort();const e=Xn(o);if(l.has(e)){const n=l.get(e);if(p.packages=o.map(e=>e.split(/[>=<]=/)[0]),t.startsWith("0.27")){const e=new Blob([n],{type:"application/json"});p.lockFileURL=URL.createObjectURL(e)}else p.lockFileContents=n;o=null}}const{stderr:d,stdout:f,get:h}=kt();rr("Loading interpreter");const y=await h(e({stderr:d,stdout:f,...p}));rr("Loaded interpreter"),globalThis[Ct].set("-T-",this.transform.bind(this,y)),n.debug&&y.setDebug(!0);const m=ir.bind(y);return a&&sr.set(y,a),$n.set(y,m),await Sn(this,rr,y,n,s),o&&await m(o,l,u),await l.close(),p.lockFileURL&&URL.revokeObjectURL(p.lockFileURL),rr("Loaded Pyodide"),"auto"===n.experimental_create_proxy&&(y.runPython(["import js","from pyodide.ffi import to_js","o=js.Object.fromEntries","js.experimental_create_proxy=lambda r:to_js(r,dict_converter=o)"].join(";"),{globals:y.toPy({})}),tr=globalThis.experimental_create_proxy,delete globalThis.experimental_create_proxy,[er]=Reflect.ownKeys(tr).filter(e=>"symbol"==typeof e&&"Symbol(pyproxy.attrs)"===String(e)),nr(!0)),y},registerJSModule:Bn,run:Qn(Mn),runAsync:Qn(Fn),runEvent:Qn(Tn),transform:(e,t)=>Yn(ar,e,[t]),writeFile:(e,t,n,r)=>{const s=Pn(t,r);if(s)return e.unpackArchive(n,s,{extractDir:t.slice(0,-1)});const{FS:o,PATH:a,_module:{PATH_FS:i}}=e;return rn({FS:o,PATH:a,PATH_FS:i},t,n)}};function ar(e){const{ffi:{PyProxy:t}}=this;if(e&&"object"==typeof e){if(e instanceof t)return e.toJs(Vn);if(e instanceof Map)return new Map([...e.entries()]);if(jt(e))return e.map(ar,this)}return e}async function ir(e,t,n=!1){const{log:r}=console,s=(e,...t)=>{r(e,...t),console.log=r,rr(e),console.log=s};console.log=s,await this.loadPackage("micropip");const o=this.pyimport("micropip");if(sr.has(this)&&o.set_index_urls(sr.get(this)),await o.install(e,{keep_going:!0}),console.log=r,n&&t instanceof i){const n=o.freeze();t.set(Xn(e),n)}o.destroy()}var cr=new Proxy({v:["latest","stable","0.29.3","0.29.2","0.29.1","0.29.0","0.28.3","0.28.2","0.28.1","0.28.0","0.27.7","0.27.6","0.27.5","0.27.4","0.27.3","0.27.2","0.27.1","0.27.0"],p:{affine:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],aiohappyeyeballs:[0,1,2,3,4,5,6,7,8,9],aiohttp:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],aiosignal:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],altair:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],"annotated-types":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],anyio:[0,1,2,3,4,5,6,7,8,9,10,11,12],apsw:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],"argon2-cffi":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],"argon2-cffi-bindings":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],asciitree:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],astropy:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],astropy_iers_data:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],asttokens:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],"async-timeout":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],atomicwrites:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],attrs:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],"audioop-lts":[0,1,2,3,4,5,6,7,8],autograd:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],"awkward-cpp":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],b2d:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],bcrypt:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],beautifulsoup4:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],"bilby.cython":[0,1,2,3,4,5],biopython:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],bitarray:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],bitstring:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],bleach:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],blosc2:[0,1,2,3,4,5,6,7,8,9],bokeh:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],"boost-histogram":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],bottleneck:[0,1,2,3],brotli:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],cachetools:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],cartopy:[0,1,2,3,10,11,12,13,14,15,16,17],casadi:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],"cbor-diag":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],certifi:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],cffi:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],cffi_example:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],cftime:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],"charset-normalizer":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],clarabel:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],click:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],cligj:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],clingo:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],cloudpickle:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],cmyt:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],cobs:[0,1,2,3,4,5,6,7,8],colorspacious:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],contourpy:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],coolprop:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],coverage:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],cramjam:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],crc32c:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],cryptography:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],"css-inline":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16],cssselect:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],"cvxpy-base":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],cycler:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],cysignals:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],cytoolz:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],decorator:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],demes:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],deprecation:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],diskcache:[0,1,2,3,4,5,6,7,8,9],distlib:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],distro:[0,1,2,3,4,5,6,7,8,9,10,11,12],docutils:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],donfig:[0,1,2,3,4,5,6,7,8,9],ewah_bool_utils:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],exceptiongroup:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],executing:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],fastapi:[0,1,2,3,4,5],fastcan:[0,1,2,3,4,5],fastparquet:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],fiona:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],fonttools:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],freesasa:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],frozenlist:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],fsspec:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],future:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],galpy:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],geopandas:[0,1,2,3,10,11,12,13,14,15,16,17],gmpy2:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],"google-crc32c":[0,1,2,3],gsw:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],h11:[0,1,2,3,4,5,6,7,8,9,10,11,12],h3:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14],h5py:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],healpy:[0,1,2,3],highspy:[0,1,2,3,4,5],html5lib:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],httpcore:[0,1,2,3,4,5,6,7,8,9,10,11,12],httpx:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],idna:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],igraph:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],imageio:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],"imgui-bundle":[0,1,2,3,4,5,6,7,8,9],iminuit:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],iniconfig:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],inspice:[0,1,2,3,4,5,6,7,8,9],ipython:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],jedi:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],jinja2:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],jiter:[0,1,2,3,4,5,6,7,8,9,10,11,12],joblib:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],jsonpatch:[0,1,2,3,4,5],jsonpointer:[0,1,2,3,4,5],jsonschema:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],jsonschema_specifications:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],kiwisolver:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],"lakers-python":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],lazy_loader:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],"lazy-object-proxy":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],libcst:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],lightgbm:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],logbook:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],lxml:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],lz4:[0,1,2,3,4,5,6,7,8,9],markupsafe:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],matplotlib:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],"matplotlib-inline":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],"memory-allocator":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],micropip:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],ml_dtypes:[0,1,2,3],mmh3:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],"more-itertools":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],mpmath:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],msgpack:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],msgspec:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],msprime:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],multidict:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],munch:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],mypy:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],narwhals:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],ndindex:[0,1,2,3,4,5,6,7,8,9],netcdf4:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],networkx:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],newick:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],nh3:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],nlopt:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],nltk:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],numcodecs:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],numpy:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],openai:[0,1,2,3,4,5,6,7,8,9,10,11,12],"opencv-python":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],optlang:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],orjson:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],packaging:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],pandas:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],parso:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],patsy:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],pcodec:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14],peewee:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],"pi-heif":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],pillow:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],"pillow-heif":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],pkgconfig:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],platformdirs:[0,1,2,3,4,5,6,7,8,9],pluggy:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],ply:[0,1,2,3,4,5,6,7,8,9],pplpy:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],primecountpy:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],prompt_toolkit:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],propcache:[0,1,2,3,4,5,6,7,8,9],protobuf:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],"pure-eval":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],py:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],pyarrow:[0,1,2,3,10,11,12,13,14,15,16],pycdfpp:[0,1,2,3],pyclipper:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],pycparser:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],pycryptodome:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],pydantic:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],pydantic_core:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],pyerfa:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],"pygame-ce":[0,1,2,3,4,5,10,11,12,13,14,15,16,17],pygments:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],pyheif:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],pyiceberg:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],pyinstrument:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],"pylimer-tools":[0,1,2,3,4,5],pymupdf:[0,1,2,3,4,5,6,7,8],pynacl:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],"pyodide-http":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],"pyodide-unix-timezones":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],pyparsing:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],pyproj:[0,1,2,3,10,11,12,13,14,15,16,17],pyrodigal:[0,1,2,3],pyrsistent:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],pysam:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],pyshp:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],pytaglib:[0,1,2,3,4,5,6,7,8,9],pytest:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],"pytest-asyncio":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],"pytest-benchmark":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],pytest_httpx:[0,1,2,3,4,5,6,7,8,9,10,11,12],"python-calamine":[0,1,2,3,4,5],"python-dateutil":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],"python-flint":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],"python-magic":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],"python-sat":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],"python-solvespace":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],pytz:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],pywavelets:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],pyxel:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],pyxirr:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],pyyaml:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],rasterio:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],rateslib:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],rebound:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],reboundx:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],referencing:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],regex:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],requests:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],retrying:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],rich:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],river:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],robotraconteur:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],"rpds-py":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],"ruamel.yaml":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],rustworkx:[0,1,2,3,4,5,6,7,8,9],"scikit-image":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],"scikit-learn":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],scipy:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],screed:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],setuptools:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],shapely:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],simplejson:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],sisl:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],six:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],"smart-open":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],sniffio:[0,1,2,3,4,5,6,7,8,9,10,11,12],sortedcontainers:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],soundfile:[0,1,2,3,4,5,6,7,8,9],soupsieve:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],sourmash:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],soxr:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],sparseqr:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],sqlalchemy:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],"stack-data":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],starlette:[0,1,2,3,4,5],statsmodels:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],strictyaml:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],svgwrite:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],swiglpk:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],sympy:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],tblib:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],termcolor:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],texttable:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],texture2ddecoder:[0,1,2,3,4,5,6,7,8,9],threadpoolctl:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],tiktoken:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],tomli:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],"tomli-w":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],toolz:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],tqdm:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],traitlets:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],traits:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],"tree-sitter":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],"tree-sitter-go":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],"tree-sitter-java":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],"tree-sitter-python":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],tskit:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],"typing-extensions":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],"typing-inspection":[0,1,2,3],tzdata:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],ujson:[0,1,2,3,4,5,6,7,8,9],uncertainties:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],unyt:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],urllib3:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],"vega-datasets":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],vrplib:[0,1,2,3,4,5],wcwidth:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],webencodings:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],wordcloud:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],wrapt:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],xarray:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],xgboost:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],xlrd:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],xxhash:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],xyzservices:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],yarl:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],yt:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],zengl:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],zfpy:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],zstandard:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],"arro3-compute":[10,11,12,13,14,15,16,17],"arro3-core":[10,11,12,13,14,15,16,17],"arro3-io":[10,11,12,13,14,15,16,17],duckdb:[10,11,12,13,14,15,16,17],gensim:[10,11,12,13,14,15,16,17],"matplotlib-pyodide":[10,11,12,13,14,15,16,17],mne:[10,11,12,13,14,15,16,17],osqp:[10,11,12],polars:[10,11,12,13,14,15,16,17],"rust-abi-test":[10,11,12,13,14,15,16,17],"rust-panic-test":[10,11,12,13,14,15,16,17],zarr:[10,11,12,13,14,15,16,17]}},{has:(e,t)=>e.v.includes(t),get:(e,t)=>{const n=e.v.indexOf(t);return new Proxy(e.p,{has:(e,t)=>e[t]?.includes(n)})}}),lr=Object.freeze({__proto__:null,default:cr});const pr="ruby-wasm-wasi",ur=pr.replace(/\\W+/g,"_");var dr={type:pr,experimental:!0,module:(e="2.8.1")=>`https://cdn.jsdelivr.net/npm/@ruby/3.2-wasm-wasi@${e}/dist/browser/+esm`,async engine({DefaultRubyVM:e},t,n,r){n=n.replace(/\\/browser\\/\\+esm$/,"/ruby.wasm");const s=await tn(n).arrayBuffer(),o=await WebAssembly.compile(s),{vm:a}=await e(o);return t.files&&await fn(this,a,t.files,r),t.fetch&&await pn(this,a,t.fetch,r),t.js_modules&&await hn(t.js_modules,r),a},registerJSModule(e,t,n){t=t.replace(/\\W+/g,"__");const r=`__module_${ur}_${t}`;globalThis[r]=n,this.run(e,`require "js";$${t}=JS.global[:${r}]`),delete globalThis[r]},run:(e,t,...n)=>e.eval(Et(t),...n),runAsync:(e,t,...n)=>e.evalAsync(Et(t),...n),async runEvent(e,t,n){if(/^xworker\\.(on\\w+)$/.test(t)){const{$1:t}=RegExp,r=`__module_${ur}_event`;globalThis[r]=n,this.run(e,`require "js";$xworker.call("${t}",JS.global[:${r}])`),delete globalThis[r]}else{const r=this.run(e,`method(:${t})`);await r.call(t,e.wrap(n))}},transform:(e,t)=>t,writeFile:()=>{throw new Error(`writeFile is not supported in ${pr}`)}};var fr={type:"wasmoon",module:(e="1.16.0")=>`https://cdn.jsdelivr.net/npm/wasmoon@${e}/+esm`,async engine({LuaFactory:e,LuaLibraries:t},n,r,s){const{stderr:o,stdout:a,get:i}=kt(),c=await i((new e).createEngine());return c.global.getTable(t.Base,e=>{c.global.setField(e,"print",a),c.global.setField(e,"printErr",o)}),n.files&&await fn(this,c,n.files,s),n.fetch&&await pn(this,c,n.fetch,s),n.js_modules&&await hn(n.js_modules,s),c},registerJSModule:(e,t,n)=>{e.global.set(t,n)},run:(e,t,...n)=>{try{return e.doStringSync(Et(t),...n)}catch(t){At.get(e).stderr(t)}},runAsync:async(e,t,...n)=>{try{return await e.doString(Et(t),...n)}catch(t){At.get(e).stderr(t)}},runEvent:async(e,t,n)=>{const[r,...s]=t.split(".");let o,a=e.global.get(r);for(const e of s)[o,a]=[a,a[e]];try{await a.call(o,n)}catch(t){At.get(e).stderr(t)}},transform:(e,t)=>t,writeFile:({cmodule:{module:{FS:e}}},t,n)=>((e,t,n)=>(on(e,sn(t)),t=an(e,t),e.writeFile(t,new Uint8Array(n),{canOwn:!0})))(e,t,n)};const hr=new WeakMap,yr=new FinalizationRegistry(e=>e()),mr=async(e,t)=>{const{shelter:n,destroy:r,io:s}=hr.get(e),{output:o,result:a}=await n.captureR(Et(t));for(const{type:e,data:t}of o)s[e](t);return yr.register(a,r),a};var gr={type:"webr",experimental:!0,module:(e="0.5.8")=>`https://cdn.jsdelivr.net/npm/webr@${e}/dist/webr.mjs`,async engine(e,t,n,r){const{get:s}=kt(),o=new e.WebR;await s(o.init().then(()=>o));const a=await new o.Shelter;return hr.set(o,{module:e,shelter:a,destroy:a.destroy.bind(a),io:At.get(o)}),t.files&&await fn(this,o,t.files,r),t.fetch&&await pn(this,o,t.fetch,r),t.js_modules&&await hn(t.js_modules,r),o},registerJSModule(e,t){console.warn(`Experimental interpreter: module ${t} is not supported (yet)`)},run:mr,runAsync:mr,async runEvent(e,t,n){await e.evalRVoid(`${t}(event)`,{env:{event:{type:[n.type]}}})},transform:(e,t)=>t,writeFile:()=>{}};const wr=new Map,br=new Map,_r=new Proxy(new Map,{get(e,t){if(!e.has(t)){const[n,...r]=t.split("@"),s=wr.get(n),o=/^(?:\\.?\\.?\\/|[a-z0-9-]+:\\/\\/)/i.test(r)?r.join("@"):s.module(...r);e.set(t,{url:o,module:import(o),engine:s.engine.bind(s)})}const{url:n,module:r,engine:s}=e.get(t);return(e,o)=>r.then(r=>(br.set(t,e),s(r,e,n,o)))}}),Ar=e=>{for(const t of[].concat(e.type))wr.set(t,e)};for(const e of[Yt,Kn,or,cr,dr,fr,gr])Ar(e);const{parse:kr}=JSON,vr=(e,t,n={})=>{const[r,s]=((e,t="./config.txt")=>{let n=typeof e;return"string"===n&&/\\.(json|toml|txt)$/.test(e)?n=RegExp.$1:e=t,[Tt(e),n]})(e,t);if("json"===s)n=tn(r).json();else if("toml"===s){const{parser:e}=n;n=tn(r).text().then(async t=>{const n=e?await import(e):{parse:Dn};return(n.parse||n.default)(t)})}else"string"===s?n=xr(e):"object"===s&&e?n=e:"txt"===s&&"string"==typeof n&&(n=xr(n));return[n,e=r]},xr=e=>{try{return kr(e)}catch(t){return Dn(e)}},Er="BeforeRun",jr="AfterRun",$r=[`code${Er}`,`code${Er}Async`,`code${jr}`,`code${jr}Async`],Sr=["onWorker","onReady",`on${Er}`,`on${Er}Async`,`on${jr}`,`on${jr}Async`];function Br(e,t){const{run:n,runAsync:r}=wr.get(this.type);return{...e,run:n.bind(this,t),runAsync:r.bind(this,t)}}const Pr=(e,t,n,r,s,o)=>{if(s||o){const a=Br.bind(e,t),i=r?"runAsync":"run",c=e[i];e[i]=r?async function(e,t,...r){s&&await s.call(this,a(e),n);const i=await c.call(this,e,t,...r);return o&&await o.call(this,a(e),n),i}:function(e,t,...r){s&&s.call(this,a(e),n);const i=c.call(this,e,t,...r);return o&&o.call(this,a(e),n),i}}};let Mr,Fr,Tr;const Rr=(e,t)=>{addEventListener(e,t||(async t=>{try{await Mr,Fr(`xworker.on${e}`,t)}catch(e){postMessage(e)}}),!!t&&{once:!0})},{proxy:Dr,sync:Lr,native:Or,window:Cr,isWindowProxy:Ir,ffi:zr}=await(async e=>{const t=await bt({...e,decoder:e?.decoder||he}),n=qe({...e,buffer:!0,reflect:t.proxy[l],timeout:t.ffi_timeout});return t.proxy[p]=n.reflect,{...t,window:n.global,isWindowProxy:n.isProxy,ffi:{assign:n.assign,direct:n.direct,evaluate:n.evaluate,gather:n.gather,query:n.query}}})({transfer:!1,transform:e=>Tr?Tr(e):e}),Ur={polyfill:Lr,sync:Dr,window:Or||Lr?Cr:null,isWindowProxy:Ir,onmessage:console.info,onerror:console.error,onmessageerror:console.warn,postMessage:postMessage.bind(self)};Rr("message",({data:{options:e,config:t,configURL:n,code:r,hooks:s}})=>{Mr=(async()=>{try{const{id:o,tag:c,type:l,custom:p,version:u,config:d,async:f}=e,h=((e,t="")=>`${e}@${t}`.replace(/@$/,""))(l,u),y=await((e,t,n,r={})=>(t&&([r,t]=vr(t,n,r)),Ft(r).then(n=>_r[e](n,t))))(h,t,n,d),{js_modules:m}=br.get(h),g=m?.main,w=St(wr.get(l)),b=((e,t,n,r)=>({type:t,config:n,interpreter:r,io:At.get(r),run:(t,...n)=>e.run(r,t,...n),runAsync:(t,...n)=>e.runAsync(r,t,...n),runEvent:(...t)=>e.runEvent(r,...t)}))(w,p||l,d||{},y);let _="run";if(f&&(_+="Async"),s){let e,t,n="",r="";for(const e of $r){const t=s[e];if(t){const s=e.endsWith("Async");(s&&f||!s&&!f)&&(e.startsWith("codeBefore")?n=t:r=t)}}(n||r)&&((e,t,n,r)=>{const s=e[t].bind(e);e[t]="run"===t?(e,t,...o)=>{n&&s(e,n,...o);const a=s(e,Ot(t),...o);return r&&s(e,r,...o),a}:async(e,t,...o)=>{n&&await s(e,n,...o);const a=await s(e,Ot(t),...o);return r&&await s(e,r,...o),a}})(w,_,n,r);for(const n of Sr.slice(2)){const r=s[n];if(r){const s=n.endsWith("Async");if(s&&f||!s&&!f){const s=Lt(r);n.startsWith("onBefore")?e=s:t=s}}}Pr(w,b,Ur,f,e,t)}let A,k,v,x=null,E="";(Or||Lr)&&(({CustomEvent:A,document:k}=Cr),x=o&&k.getElementById(o)||null,v=e=>Dt(x,p||l,e,!0,A));const j=Kt(Cr,Dr,g,t);if(((e,t,n,r)=>{if("pyodide"===e)return;const s="polyscript.js_modules";for(const e of Reflect.ownKeys(r))t.registerJSModule(n,`${s}.${e}`,Ut(r,e));t.registerJSModule(n,s,r)})(l,w,y,j),w.registerJSModule(y,"polyscript",{IDBMap:a,IDBMapSync:i,xworker:Ur,currentScript:x,config:b.config,js_modules:j,ffi:zr,get target(){return!E&&x&&("SCRIPT"===c?x.after($t(Cr.document.createElement(`script-${p||l}`),{id:E=`${o}-target`})):(E=o,x.replaceChildren(),x.style.display="block")),E}}),Fr=w.runEvent.bind(w,y),Tr=w.transform.bind(w,y),x&&v("ready"),s?.onReady&&Lt(s?.onReady).call(w,Br.call(w,b,y),Ur),await w[_](y,r),["micropython","pyodide"].includes(w.type)){const e="polyscript",t=`__${e}_workers__`,n="__export__";y.runPython([`import js as ${t}`,`${t}.${t} = "${n}" in locals() and ${n} or []`,`del ${t}`].join("\\n"));const r=[...globalThis[t]];delete globalThis[t],r.length&&y.runPython([`from ${e} import xworker as ${t}`,...r.map(e=>`${t}.sync.${e} = ${e}`),`del ${t}`].join("\\n"))}return x&&v("done"),postMessage("polyscript:done"),y}catch(e){postMessage(e)}})(),Rr("error"),Rr("message"),Rr("messageerror"),(Or||Lr)&&addEventListener("py:progress",({type:e,detail:t})=>{Cr.dispatchEvent(new Cr.CustomEvent(e,{detail:t}))})});\n'.replace(Xt,Vt)],{type:"text/javascript"})),...e))({serviceWorker:n?.serviceWorker||n?.service_worker,reflected_ffi_timeout:globalThis.reflected_ffi_timeout??-1}),{postMessage:a}=s,i=this instanceof gs;let c=!1;const l=gn(s.proxy,{importJS:Cn,importCSS:In,isStuck:()=>c,notStuck(){c=!1}}),p=y();let u=o(t).text().then(e=>{const t=i?this.toJSON():void 0;a.call(s,{options:n,config:r,code:e,hooks:t})}).then(()=>{u={then:e=>e()}});return bn(s,{unstuck:{value(){c=!0}},sync:{value:l},ready:{value:p.promise},postMessage:{value:(e,...t)=>u.then(()=>a.call(s,e,...t))},onerror:{writable:!0,configurable:!0,value:console.error}}),s.addEventListener("message",e=>{const{data:t}=e,n=t instanceof Error;(n||"polyscript:done"===t)&&(e.stopImmediatePropagation(),n?(p.reject(t),s.onerror(wn(e,{type:{value:"error"},error:{value:t}}))):p.resolve(s))}),i&&this.onWorker?.(this.interpreter,s),s};const bs="Invalid content",_s="Invalid worker attribute",vs="Invalid worker attribute";var As=e=>{const{src:t,worker:n}=e.attributes;if(n){let{value:r}=n;if(r)throw new SyntaxError(vs);if(r=t?.value,!r){if(t)throw new SyntaxError(_s);if(e.childElementCount){const{innerHTML:t,localName:n,type:s}=e,o=s||n.replace(/-script$/,"");r=yn(t),console.warn(`Deprecated: use