@pyscript/core 0.7.9 → 0.7.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{codemirror-7vXPINKi.js → codemirror-BYspKCDy.js} +2 -2
- package/dist/{codemirror-7vXPINKi.js.map → codemirror-BYspKCDy.js.map} +1 -1
- package/dist/{codemirror_commands-CN4gxvZk.js → codemirror_commands-BLDaEdQ6.js} +2 -2
- package/dist/codemirror_commands-BLDaEdQ6.js.map +1 -0
- package/dist/core-PTfg6inS.js +4 -0
- package/dist/core-PTfg6inS.js.map +1 -0
- package/dist/core.js +1 -1
- package/dist/{deprecations-manager-alOm7GWl.js → deprecations-manager-DIDxhyRq.js} +2 -2
- package/dist/{deprecations-manager-alOm7GWl.js.map → deprecations-manager-DIDxhyRq.js.map} +1 -1
- package/dist/{donkey-DWpZT0FI.js → donkey-CLhmQOjG.js} +2 -2
- package/dist/{donkey-DWpZT0FI.js.map → donkey-CLhmQOjG.js.map} +1 -1
- package/dist/{error-wvL_FwCm.js → error-uzvvriog.js} +2 -2
- package/dist/{error-wvL_FwCm.js.map → error-uzvvriog.js.map} +1 -1
- package/dist/{mpy-Be7QbAN1.js → mpy-CnF17tqI.js} +2 -2
- package/dist/{mpy-Be7QbAN1.js.map → mpy-CnF17tqI.js.map} +1 -1
- package/dist/{py-CYHR8Vya.js → py-BZSSqcx3.js} +2 -2
- package/dist/{py-CYHR8Vya.js.map → py-BZSSqcx3.js.map} +1 -1
- package/dist/{py-editor-B6fYMe1E.js → py-editor-DZ0Dxzzk.js} +2 -2
- package/dist/{py-editor-B6fYMe1E.js.map → py-editor-DZ0Dxzzk.js.map} +1 -1
- package/dist/{py-game-D9lExyPH.js → py-game-bqieV522.js} +2 -2
- package/dist/{py-game-D9lExyPH.js.map → py-game-bqieV522.js.map} +1 -1
- package/dist/{py-terminal-BwM2jqjS.js → py-terminal-DYY4WN57.js} +2 -2
- package/dist/{py-terminal-BwM2jqjS.js.map → py-terminal-DYY4WN57.js.map} +1 -1
- package/dist/zip-pccs084i.js +2 -0
- package/dist/zip-pccs084i.js.map +1 -0
- package/package.json +5 -5
- package/src/stdlib/pyscript/fs.py +17 -11
- package/src/stdlib/pyscript.js +1 -1
- package/src/sync.js +2 -0
- package/dist/codemirror_commands-CN4gxvZk.js.map +0 -1
- package/dist/core-XdIpeyet.js +0 -4
- package/dist/core-XdIpeyet.js.map +0 -1
- package/dist/zip-CakRHzZu.js +0 -2
- package/dist/zip-CakRHzZu.js.map +0 -1
package/dist/core-XdIpeyet.js
DELETED
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
try{crypto.randomUUID()}catch(t){location.href.startsWith("http://0.0.0.0")&&(location.href=location.href.replace("0.0.0.0","localhost"))}const t=(t,e,s=globalThis)=>{const r=Symbol.for(t),o=r in s;return[o?s[r]:Object.defineProperty(s,r,{value:e})[r],o]};var e=Promise.withResolvers.bind(Promise);const s=new WeakMap,r=t=>{const e=t||console,r={buffered:n,stderr:(e.stderr||console.error).bind(e),stdout:(e.stdout||console.log).bind(e)};return{stderr:(...t)=>r.stderr(...t),stdout:(...t)=>r.stdout(...t),async get(t){const e=await t;return s.set(e,r),e}}},o=new TextDecoder,n=(t,e=10)=>{const s=[];return r=>{if(r instanceof Uint8Array)for(const n of r)n===e?t(o.decode(new Uint8Array(s.splice(0)))):s.push(n);else t(r)}},i=Object.getOwnPropertyDescriptors(Response.prototype),a=t=>"function"==typeof t,l={get:(t,e)=>i.hasOwnProperty(e)?((t,e,{get:s,value:r})=>s||!a(r)?t.then(t=>t[e]):(...s)=>t.then(t=>t[e](...s)))(t,e,i[e]):((t,e)=>a(e)?e.bind(t):e)(t,t[e])};var c=(t,...e)=>new Proxy(fetch(t,...e).then(e=>e.ok?e:Promise.reject(new Error(`[${e.status}] Unable to fetch ${t}`))),l);const{assign:p}=Object,y="entries",d="readonly",m="readwrite",u={durability:"default",prefix:"IDBMap"},f=({target:{result:t}})=>t;class h extends EventTarget{#t;#e;#s;async#r(t,e){const s=(await this.#t).transaction(y,e,this.#e);return new Promise((e,r)=>p(t(s.objectStore(y)),{onsuccess:e,onerror:r}))}constructor(t,{durability:e=u.durability,prefix:s=u.prefix}=u){super(),this.#s=s,this.#e={durability:e},this.#t=new Promise((e,s)=>{p(indexedDB.open(`${this.#s}/${t}`),{onupgradeneeded({target:{result:t,transaction:s}}){t.objectStoreNames.length||t.createObjectStore(y),s.oncomplete=()=>e(t)},onsuccess(t){e(f(t))},onerror(t){s(t),this.dispatchEvent(t)}})}).then(t=>{const e=this.dispatchEvent.bind(this);for(const s in t)s.startsWith("on")&&(t[s]=e);return t})}dispatchEvent(t){const{type:e,message:s,isTrusted:r}=t;return super.dispatchEvent(r?p(new Event(e),{message:s}):t)}async close(){(await this.#t).close()}get size(){return this.#r(t=>t.count(),d).then(f)}async clear(){await this.#r(t=>t.clear(),m)}async delete(t){await this.#r(e=>e.delete(t),m)}async entries(){const t=await this.keys();return Promise.all(t.map(t=>this.get(t).then(e=>[t,e])))}async forEach(t,e=this){for(const[s,r]of await this.entries())await t.call(e,r,s,this)}async get(t){return await this.#r(e=>e.get(t),d).then(f)}async has(t){return void 0!==await this.#r(e=>e.getKey(t),d).then(f)}async keys(){return await this.#r(t=>t.getAllKeys(),d).then(f)}async set(t,e){return await this.#r(s=>s.put(e,t),m),this}async values(){const t=await this.keys();return Promise.all(t.map(t=>this.get(t)))}get[Symbol.toStringTag](){return this.#s}}class g extends Map{#o;#n;constructor(...t){super(),this.#o=new h(...t),this.#n=this.#o.entries().then(t=>{for(const[e,s]of t)super.set(e,s)})}async close(){await this.#n,await this.#o.close()}async sync(){await this.#n}clear(){return this.#n=this.#n.then(()=>this.#o.clear()),super.clear()}delete(t){return this.#n=this.#n.then(()=>this.#o.delete(t)),super.delete(t)}set(t,e){return this.#n=this.#n.then(()=>this.#o.set(t,e)),super.set(t,e)}}const b={object(...t){return this.string(function(t){for(var e=t[0],s=1,r=arguments.length;s<r;s++)e+=arguments[s]+t[s];return e}(...t))},string(t){for(const e of t.split(/[\r\n]+/))if(e.trim().length){/^(\s+)/.test(e)&&(t=t.replace(new RegExp("^"+RegExp.$1,"gm"),""));break}return t}},{replace:_}="",w=/&(?:amp|#38|lt|#60|gt|#62|apos|#39|quot|#34);/g,k={"&":"&","&":"&","<":"<","<":"<",">":">",">":">","'":"'","'":"'",""":'"',""":'"'},A=t=>k[t],x=(t,...e)=>b[typeof t](t,...e),v=t=>_.call(t,w,A),{isArray:j}=Array,{assign:E,create:B,defineProperties:z,defineProperty:C,entries:R}=Object,{all:S,resolve:P}=new Proxy(Promise,{get:(t,e)=>t[e].bind(t)}),D=(t,e=location.href)=>new URL(t,e.replace(/^blob:/,"")).href;function $(t){return t.startsWith(".")?D(t,this):t}let M=0;const F=(t,e)=>({id:t.id||(t.id=`${e}-w${M++}`),tag:t.tagName}),T=(t,e,s,r=!1,o=CustomEvent)=>{t.dispatchEvent(new o(`${e}:${s}`,{bubbles:!0,detail:{worker:r}}))},q=(t,e,r,o)=>({type:e,config:r,interpreter:o,io:s.get(o),run:(e,...s)=>t.run(o,e,...s),runAsync:(e,...s)=>t.runAsync(o,e,...s),runEvent:(...e)=>t.runEvent(o,...e)}),O=t=>t.replace(/^(?:\n|\r\n)/,""),L=(t,e,s,r)=>{const o=t[e].bind(t);t[e]="run"===e?(t,e,...n)=>{s&&o(t,s,...n);const i=o(t,O(e),...n);return r&&o(t,r,...n),i}:async(t,e,...n)=>{s&&await o(t,s,...n);const i=await o(t,O(e),...n);return r&&await o(t,r,...n),i}},N=Symbol.for("polyscript.js_modules"),I=new Map;C(globalThis,N,{value:I});const H=new Proxy(I,{get:(t,e)=>t.get(e),has:(t,e)=>t.has(e),ownKeys:t=>[...t.keys()]}),W=(t,e)=>!e.startsWith("_"),U=(t,e)=>new Proxy(t,{has:W,get:(t,s)=>t[e][s]}),J=(t,e,s,r)=>{if("pyodide"===t)return;const o="polyscript.js_modules";for(const t of Reflect.ownKeys(r))e.registerJSModule(s,`${o}.${t}`,U(r,t));e.registerJSModule(s,o,r)},G=(t,e)=>import(t).then(t=>{I.set(e,{...t})}),K=t=>new Promise((e,s)=>{document.querySelector(`link[rel="stylesheet"][href="${t}"]`)?e():document.head.append(E(document.createElement("link"),{rel:"stylesheet",href:t,onload:e,onerror:s}))}),V=t=>/\.css$/i.test(new URL(t).pathname),Y=t=>/^(?:false|0|no)$/i.test(t.getAttribute("async")),X=!globalThis.window,Z=({FS:t,PATH:e,PATH_FS:s},r,o)=>{const n=s.resolve(r),i=e.dirname(n);return t.mkdirTree?t.mkdirTree(i):tt(t,i),t.writeFile(n,new Uint8Array(o),{canOwn:!0})},Q=t=>{const e=t.split("/");return e.pop(),e.join("/")},tt=(t,e)=>{const s=[];for(const r of e.split("/"))"."!==r&&".."!==r&&(s.push(r),r&&t.mkdir(s.join("/")))},et=(t,e)=>{const s=[];for(const t of e.split("/"))switch(t){case"":case".":break;case"..":s.pop();break;default:s.push(t)}return[t.cwd()].concat(s).join("/").replace(/^\/+/,"/")},st=t=>{const e=t.map(t=>t.trim().replace(/(^[/]*|[/]*$)/g,"")).filter(t=>""!==t&&"."!==t).join("/");return t[0].startsWith("/")?`/${e}`:e},rt=(t,e)=>c(D(t,e)).arrayBuffer(),ot=(t,e,s,r)=>S((t=>{for(const{files:e,to_file:s,from:r=""}of t){if(void 0!==e&&void 0!==s)throw new Error("Cannot use 'to_file' and 'files' parameters together!");if(void 0===e&&void 0===s&&r.endsWith("/"))throw new Error(`Couldn't determine the filename from the path ${r}, please supply 'to_file' parameter.`)}return t.flatMap(({from:t="",to_folder:e=".",to_file:s,files:r})=>{if(j(r))return r.map(s=>({url:st([t,s]),path:st([e,s])}));const o=s||t.slice(1+t.lastIndexOf("/"));return[{url:t,path:st([e,o])}]})})(s).map(({url:s,path:o})=>rt(s,r).then(s=>t.writeFile(e,o,s)))),nt=(t,e)=>e.endsWith("/")?`${e}${t.split("/").pop()}`:e,it=(t,e)=>t.replace(/\{.+?\}/g,t=>{if(!e.has(t))throw new SyntaxError(`Invalid template: ${t}`);return e.get(t)}),at=(t,e,s,r)=>S((t=>{const e=new Map,s=new Set,r=[];for(const[o,n]of R(t))if(/^\{.+\}$/.test(o)){if(e.has(o))throw new SyntaxError(`Duplicated template: ${o}`);e.set(o,it(n,e))}else{const t=it(o,e),i=nt(t,it(n||"./",e));if(s.has(i)&&!i.endsWith("/*"))throw new SyntaxError(`Duplicated destination: ${i}`);s.add(i),r.push({url:t,path:i})}return r})(s).map(({url:s,path:o})=>rt(s,r).then(r=>t.writeFile(e,o,r,s)))),lt=({main:t,worker:e},s)=>{const r=[];if(e&&X)for(let[t,o]of R(e))t=D(t,s),r.push(G(t,o));if(t&&!X)for(let[e,o]of R(t))e=D(e,s),V(e)?K(e):r.push(G(e,o));return S(r)},ct=t=>e=>{dispatchEvent(new CustomEvent(`${t}:progress`,{detail:e}))};let pt=0;const yt=pt++,dt=pt++,mt=pt++,ut=pt++,ft=pt++,ht=pt++,gt=pt++,bt=pt++,_t=pt++,wt=pt++,kt=pt++,At=pt++,xt=pt++,vt=pt++,jt=pt++,Et=pt++,Bt=pt++,zt=pt++,Ct=pt++,Rt=pt++,St=pt++,Pt=pt++,Dt=pt++,$t=pt++,Mt=pt++,Ft=pt++;const Tt=globalThis.ImageData||class{},qt=new TextDecoder,Ot=new TextEncoder,Lt=new Map(Reflect.ownKeys(Symbol).map(t=>[Symbol[t],`@${String(t)}`])),Nt=t=>{switch(t[0]){case"@":return Symbol[t.slice(1)];case"#":return Symbol.for(t.slice(1));case"!":return Symbol(t.slice(1));default:return Symbol()}},It=t=>Lt.get(t)||((t,e)=>void 0===e?"?":void 0===Symbol.keyFor(t)?`!${e}`:`#${e}`)(t,t.description),Ht=Object.defineProperty,Wt=Object.assign,Ut=Array.from,Jt=Array.isArray,Gt=ArrayBuffer.isView,Kt=(t,e)=>[t,e],Vt=t=>t,Yt={},Xt=t=>(e,s=new Map)=>{for(let r=0,o=e.length;r<o;r++)e[r]=t(e[r],s);return e},Zt=([t,e])=>0===t?e:Nt(e),Qt=t=>"string"==typeof t?Kt(0,t):Kt(16,It(t)),te=(t,e)=>{for(let s=t.push,r=0,o=e.length;r<o;r+=32767)s.apply(t,e.subarray(r,r+32767))},ee=new ArrayBuffer(8),se=new DataView(ee),re=new Uint8Array(ee),oe=(t,e,s)=>(t.set(e,s),s),ne=t=>{re[0]=t[le++],re[1]=t[le++],re[2]=t[le++],re[3]=t[le++],re[4]=t[le++],re[5]=t[le++],re[6]=t[le++],re[7]=t[le++]},ie=t=>(re[0]=t[le++],re[1]=t[le++],re[2]=t[le++],re[3]=t[le++],se.getUint32(0,!0)),ae=(t,e)=>{switch(t[le++]){case ft:return ne(t),se.getFloat64(0,!0);case ht:return t[le++];case St:{const s=oe(e,le-1,{});for(let r=0,o=ie(t);r<o;r++)s[ae(t,e)]=ae(t,e);return s}case Et:{const s=oe(e,le-1,[]);for(let r=0,o=ie(t);r<o;r++)s.push(ae(t,e));return s}case $t:{const s=le-1,r=ae(t,e);return oe(e,s,new globalThis[r](ae(t,e)))}case Bt:{const s=le-1,r=ie(t);return oe(e,s,t.slice(le,le+=r).buffer)}case vt:{const s=le-1,r=ie(t);return oe(e,s,qt.decode(t.slice(le,le+=r)))}case zt:return oe(e,le-1,new Date(ae(t,e)));case Rt:{const s=oe(e,le-1,new Map);for(let r=0,o=ie(t);r<o;r++)s.set(ae(t,e),ae(t,e));return s}case Dt:{const s=oe(e,le-1,new Set);for(let r=0,o=ie(t);r<o;r++)s.add(ae(t,e));return s}case Ct:{const s=ae(t,e),r=ae(t,e),o=ae(t,e),n=new(globalThis[s]||Error)(r);return oe(e,le-1,Ht(n,"stack",{value:o}))}case Mt:{const s=ae(t,e),r=ae(t,e),o=ae(t,e),n=ae(t,e),i=ae(t,e);return oe(e,le-1,new Tt(s,r,o,{colorSpace:n,pixelFormat:i}))}case Pt:{const s=ae(t,e),r=ae(t,e);return oe(e,le-1,new RegExp(s,r))}case yt:return!1;case dt:return!0;case gt:return NaN;case bt:return 1/0;case _t:return-1/0;case wt:return 0;case kt:return-0;case ut:return null;case At:return ne(t),se.getBigInt64(0,!0);case xt:return ne(t),se.getBigUint64(0,!0);case jt:return Nt(ae(t,e));case Ft:return e.get(ie(t));default:return}};let le=0;class ce{static push(t,e){t.sync(!1),t._(e,e.length)}constructor(t,e){const s=[];this.l=0,this.o=s,this.v=new Uint8Array(t,e),this.push=s.push.bind(s)}get length(){return this.l+this.o.length}sync(t){const e=this.o,s=e.length;s&&this._(t?e:e.splice(0),s)}_(t,e){const{buffer:s,byteOffset:r}=this.v,o=this.l;this.l+=e,e+=r+o,s.byteLength<e&&s.grow(e),this.v.set(t,o)}}const{getPrototypeOf:pe}=Object,{construct:ye}=Reflect,{toStringTag:de}=Symbol,{toString:me}=Yt,ue=(t,e=t[de])=>e in globalThis?e:ue(ye(pe(t.constructor),[0])),{isNaN:fe,isFinite:he,isInteger:ge}=Number,{ownKeys:be}=Reflect,{is:_e}=Object,we=(t,e,s)=>{const r=s.get(t),o=!r;return o?(se.setUint32(0,e.length,!0),s.set(t,[re[0],re[1],re[2],re[3]])):e.push(Ft,r[0],r[1],r[2],r[3]),o},ke=(t,e,s)=>{se.setUint32(0,s,!0),t.push(e,re[0],re[1],re[2],re[3])},Ae=(t,e,s)=>{switch(typeof t){case"number":t&&he(t)?ge(t)&&t<256&&-1<t?e.push(ht,t):(se.setFloat64(0,t,!0),e.push(ft,re[0],re[1],re[2],re[3],re[4],re[5],re[6],re[7])):fe(t)?e.push(gt):t?e.push(t<0?_t:bt):e.push(_e(t,0)?wt:kt);break;case"object":switch(!0){case null===t:e.push(ut);break;case!we(t,e,s):break;case Jt(t):{const r=t.length;ke(e,Et,r);for(let o=0;o<r;o++)Ae(t[o],e,s);break}case Gt(t):if(e.push($t),Ae(ue(t),e,s),t=t.buffer,!we(t,e,s))break;case t instanceof ArrayBuffer:{const s=new Uint8Array(t);ke(e,Bt,s.length),xe(e,s);break}case t instanceof Date:e.push(zt),Ae(t.getTime(),e,s);break;case t instanceof Map:ke(e,Rt,t.size);for(const[r,o]of t)Ae(r,e,s),Ae(o,e,s);break;case t instanceof Set:ke(e,Dt,t.size);for(const r of t)Ae(r,e,s);break;case t instanceof Error:e.push(Ct),Ae(t.name,e,s),Ae(t.message,e,s),Ae(t.stack,e,s);break;case t instanceof Tt:e.push(Mt),Ae(t.data,e,s),Ae(t.width,e,s),Ae(t.height,e,s),Ae(t.colorSpace,e,s),Ae(t.pixelFormat,e,s);break;case t instanceof RegExp:e.push(Pt),Ae(t.source,e,s),Ae(t.flags,e,s);break;default:if("toJSON"in t){const r=t.toJSON();Ae(r===t?null:r,e,s)}else{const r=be(t),o=r.length;ke(e,St,o);for(let n=0;n<o;n++){const o=r[n];Ae(o,e,s),Ae(t[o],e,s)}}}break;case"string":if(we(t,e,s)){const s=Ot.encode(t);ke(e,vt,s.length),xe(e,s)}break;case"boolean":e.push(t?dt:yt);break;case"symbol":e.push(jt),Ae(It(t),e,s);break;case"bigint":{let s=At;9223372036854775807n<t?(se.setBigUint64(0,t,!0),s=xt):se.setBigInt64(0,t,!0),e.push(s,re[0],re[1],re[2],re[3],re[4],re[5],re[6],re[7]);break}default:e.push(mt)}};let xe=te;const ve=({byteOffset:t=0,Array:e=ce}={})=>(s,r)=>{const o=new e(r,t);xe=e.push,Ae(s,o,new Map);const n=o.length;return o.sync(!0),n},je={parse:t=>(le=0,ae(t,new Map)),stringify:t=>{const e=[];return xe=te,Ae(t,e,new Map),e}},Ee=new WeakMap,Be=async(t,e,s,r,o)=>{r.files&&(e("Loading files"),await at(t,s,r.files,o),e("Loaded files")),r.fetch&&(e("Loading fetch"),await ot(t,s,r.fetch,o),e("Loaded fetch")),r.js_modules&&(e("Loading JS modules"),await lt(r.js_modules,o),e("Loaded JS modules"))},ze=(t,e,s)=>{"polyscript"===e&&(s.lazy_py_modules=async(...e)=>(await Ee.get(t)(e),e.map(e=>t.pyimport(e))),s.storage=async t=>{const e=new g(t);return await e.sync(),e},s.JSON=je),t.registerJsModule(e,s)},Ce=(t,e)=>{if(t.endsWith("/*")){if(/\.(zip|whl|tgz|tar(?:\.gz)?)$/.test(e))return RegExp.$1;throw new Error(`Unsupported archive ${e}`)}return""},Re=(t,e,...r)=>{try{return t.runPython(x(e),...r)}catch(e){s.get(t).stderr(e)}},Se=async(t,e,...r)=>{try{return await t.runPythonAsync(x(e),...r)}catch(e){s.get(t).stderr(e)}},Pe=async(t,e,r)=>{const[o,...n]=e.split(".");let i,a=t.globals.get(o);for(const t of n)[i,a]=[a,a[t]];try{await a.call(i,r)}catch(e){s.get(t).stderr(e)}},De=new Map,$e=t=>De.get(t),Me=(t,e)=>{try{return Function("require",e)($e)}catch(e){s.get(t).stderr(e)}};var Fe={type:"dummy",module:()=>"data:text/javascript,",engine:t=>r().get(t),registerJSModule(t,e,s){De.set(e,s)},run:Me,runAsync:Me,runEvent:async(t,e,r)=>{try{await Function("require","e",`return ${e}(e)`)($e,r)}catch(e){s.get(t).stderr(e)}},transform:(t,e)=>e,writeFile(){}},Te=(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 qe=async t=>(await import("./toml-BK2RWy-G.js")).parse(t);async function Oe(t,e){return new Promise((s,r)=>{t.syncfs(e,t=>{t?r(t):s()})})}function Le(t){const e=t.FS,s=t.FS.filesystems.MEMFS,r=t.PATH,o={DIR_MODE:16895,FILE_MODE:33279,mount:function(t){if(!t.opts.fileSystemHandle)throw new Error("opts.fileSystemHandle is required");return s.mount.apply(null,arguments)},syncfs:async(t,e,s)=>{try{const r=o.getLocalSet(t),n=await o.getRemoteSet(t),i=e?n:r,a=e?r:n;await o.reconcile(t,i,a),s(null)}catch(t){s(t)}},getLocalSet:t=>{let s=Object.create(null);function o(t){return"."!==t&&".."!==t}function n(t){return e=>r.join2(t,e)}let i=e.readdir(t.mountpoint).filter(o).map(n(t.mountpoint));for(;i.length;){let t=i.pop(),r=e.stat(t);e.isDir(r.mode)&&i.push.apply(i,e.readdir(t).filter(o).map(n(t))),s[t]={timestamp:r.mtime,mode:r.mode}}return{type:"local",entries:s}},getRemoteSet:async t=>{const e=Object.create(null),s=await Ne(t.opts.fileSystemHandle);for(const[n,i]of s)"."!==n&&(e[r.join2(t.mountpoint,n)]={timestamp:"file"===i.kind?(await i.getFile()).lastModifiedDate:new Date,mode:"file"===i.kind?o.FILE_MODE:o.DIR_MODE});return{type:"remote",entries:e,handles:s}},loadLocalEntry:t=>{const r=e.lookupPath(t).node,o=e.stat(t);if(e.isDir(o.mode))return{timestamp:o.mtime,mode:o.mode};if(e.isFile(o.mode))return r.contents=s.getFileDataAsTypedArray(r),{timestamp:o.mtime,mode:o.mode,contents:r.contents};throw new Error("node type not supported")},storeLocalEntry:(t,s)=>{if(e.isDir(s.mode))e.mkdirTree(t,s.mode);else{if(!e.isFile(s.mode))throw new Error("node type not supported");e.writeFile(t,s.contents,{canOwn:!0})}e.chmod(t,s.mode),e.utime(t,s.timestamp,s.timestamp)},removeLocalEntry:t=>{var s=e.stat(t);e.isDir(s.mode)?e.rmdir(t):e.isFile(s.mode)&&e.unlink(t)},loadRemoteEntry:async t=>{if("file"===t.kind){const e=await t.getFile();return{contents:new Uint8Array(await e.arrayBuffer()),mode:o.FILE_MODE,timestamp:e.lastModifiedDate}}if("directory"===t.kind)return{mode:o.DIR_MODE,timestamp:new Date};throw new Error("unknown kind: "+t.kind)},storeRemoteEntry:async(t,s,o)=>{const n=t.get(r.dirname(s)),i=e.isFile(o.mode)?await n.getFileHandle(r.basename(s),{create:!0}):await n.getDirectoryHandle(r.basename(s),{create:!0});if("file"===i.kind){const t=await i.createWritable();await t.write(o.contents),await t.close()}t.set(s,i)},removeRemoteEntry:async(t,e)=>{const s=t.get(r.dirname(e));await s.removeEntry(r.basename(e)),t.delete(e)},reconcile:async(t,s,n)=>{let i=0;const a=[];Object.keys(s.entries).forEach(function(t){const r=s.entries[t],o=n.entries[t];(!o||e.isFile(r.mode)&&r.timestamp.getTime()>o.timestamp.getTime())&&(a.push(t),i++)}),a.sort();const l=[];if(Object.keys(n.entries).forEach(function(t){s.entries[t]||(l.push(t),i++)}),l.sort().reverse(),!i)return;const c="remote"===s.type?s.handles:n.handles;for(const e of a){const s=r.normalize(e.replace(t.mountpoint,"/")).substring(1);if("local"===n.type){const t=c.get(s),r=await o.loadRemoteEntry(t);o.storeLocalEntry(e,r)}else{const t=o.loadLocalEntry(e);await o.storeRemoteEntry(c,s,t)}}for(const e of l)if("local"===n.type)o.removeLocalEntry(e);else{const s=r.normalize(e.replace(t.mountpoint,"/")).substring(1);await o.removeRemoteEntry(c,s)}}};return t.FS.filesystems.NATIVEFS_ASYNC=o,async function(t,s){if("FileSystemDirectoryHandle"!==s.constructor.name)throw new TypeError("Expected argument 'fileSystemHandle' to be a FileSystemDirectoryHandle");return function(t){e.mkdirTree?e.mkdirTree(t):tt(e,t);const{node:s}=e.lookupPath(t,{follow_mount:!1});if(e.isMountpoint(s))throw new Error(`path '${t}' is already a file system mount point`);if(!e.isDir(s.mode))throw new Error(`path '${t}' points to a file not a directory`);for(const e in s.contents)throw new Error(`directory '${t}' is not empty`)}(t),e.mount(e.filesystems.NATIVEFS_ASYNC,{fileSystemHandle:s},t),await Oe(e,!0),{syncfs:async()=>await Oe(e,!1)}}}const Ne=async t=>{const e=[];await async function t(s){for await(const r of s.values())e.push(r),"directory"===r.kind&&await t(r)}(t);const s=new Map;s.set(".",t);for(const r of e){const e=(await t.resolve(r)).join("/");s.set(e,r)}return s},{parse:Ie}=JSON,He=(t,e)=>new URL(t,e).href,We=(t,e,s)=>{if(e in t)throw new Error(`Duplicated path: ${e}`);t[e]=s},Ue=(t,e,s)=>{for(const r in e)We(t,He(r,s),e[r])},Je=(t,e,s,r)=>{const o=e[s];o&&(t[s]??={},Ue(t[s],o,r))},Ge=async(t,e=t.packages,s=new Set)=>{const r=[];for(const o of e){if(s.has(o))continue;s.add(o);const e=o.endsWith(".toml");if(e||o.endsWith(".json")){const n=await c(o).text(),{name:i,files:a,js_modules:l,packages:p}=e?await qe(n):Ie(n);if(s.has(i))throw new Error(`Unable to process ${i} @ ${o}`);s.add(i),p&&r.push(...await Ge(t,p,s)),l&&(t.js_modules??={},Je(t.js_modules,l,"main",o),Je(t.js_modules,l,"worker",o)),a&&(t.files??={},Ue(t.files,a,o))}else r.push(o)}return r},Ke=(t,e)=>{try{t.mkdir(e)}catch(t){}},Ve=ct("mpy");var Ye={type:"micropython",module:(t="1.27.0-preview-283")=>`https://cdn.jsdelivr.net/npm/@micropython/micropython-webassembly-pyscript@${t}/micropython.mjs`,async engine({loadMicroPython:t},e,s,o){const{stderr:i,stdout:a,get:l}=r({stderr:n(console.error),stdout:n(console.log)});s=s.replace(/\.m?js$/,".wasm"),Ve("Loading MicroPython");const c=await l(t({linebuffer:!1,stderr:i,stdout:a,url:s}));globalThis[N].set("-T-",this.transform.bind(this,c));const p=Xe.bind(this,c,o);return Ee.set(c,p),e.experimental_remote_packages&&(Ve("Loading remote packages"),e.packages=await Ge(e),Ve("Loaded remote packages")),await Be(this,Ve,c,e,o),this.writeFile(c,"./mip.py",Te),e.packages&&(Ve("Loading packages"),await p(e.packages.map($,o)),Ve("Loaded packages")),Ve("Loaded MicroPython"),c.mountNativeFS||(c.mountNativeFS=Le(c._module)),c},registerJSModule:ze,run:Re,runAsync:Se,runEvent:Pe,transform:(t,e)=>t.PyProxy.toJs(e),writeFile:(t,e,s,r)=>{const{FS:o,_module:{PATH:n,PATH_FS:i}}=t,a={FS:o,PATH:n,PATH_FS:i},l=Ce(e,r);if(l){const r=e.slice(0,-1);switch("./"!==r&&o.mkdir(r),l){case"whl":case"zip":{const t=new Blob([s],{type:"application/zip"});return import("./zip-CakRHzZu.js").then(async({BlobReader:e,Uint8ArrayWriter:s,ZipReader:i})=>{const a=new i(new e(t));for(const t of await a.getEntries()){const{directory:e,filename:i}=t,a=r+i;if(e)Ke(o,a);else{Ke(o,n.dirname(a));const e=await t.getData(new s);o.writeFile(a,e,{canOwn:!0})}}a.close()})}case"tgz":case"tar.gz":{const e="./_.tar.gz";return Z(a,e,s),void t.runPython(`\n import os, gzip, tarfile\n tar = tarfile.TarFile(fileobj=gzip.GzipFile(fileobj=open("${e}", "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("${e}")\n `)}}}return Z(a,e,s)}};async function Xe(t,e,s){let r;for(const o of s)if(o.endsWith(".whl")){const s=D(o,e),r=await c(s).arrayBuffer();await this.writeFile(t,"./*",r,s)}else r||(r=t.pyimport("mip")),r.install(o)}const Ze={dict_converter:Object.fromEntries},{stringify:Qe}=JSON,{hasOwn:ts}=Object,{apply:es}=Reflect,ss=Function.prototype,rs=t=>function(...e){return es(t,this,e)};let os,ns;const is=t=>{const e=new WeakMap,s=s=>{for(let r,o=0;o<s.length;o++)switch(typeof(r=s[o])){case"object":if(null===r)break;case"function":if(os in r&&!r[os].shared?.gcRegistered){t=!1;let n=e.get(r)?.deref();if(!n){n=ns(r);const t=new WeakRef(n);e.set(r,t),e.set(n,t)}s[o]=n,t=!0}}};Object.defineProperties(ss,{apply:{value(e,r){return t&&s(r),es(this,e,r)}},call:{value(e,...r){return t&&s(r),es(this,e,r)}}})},as=ct("py"),ls=new WeakMap;var cs={type:"pyodide",module:(t="0.29.0")=>`https://cdn.jsdelivr.net/pyodide/v${t}/full/pyodide.mjs`,async engine({loadPyodide:t,version:e},s,o,n){as("Loading Pyodide");let{packages:i,index_urls:a}=s;if(i){if(i=i.map($,n),!a){as("Loading Packages Graph");const{default:t}=await Promise.resolve().then(function(){return ms});if(as("Loaded Packages Graph"),ts(t,e)){const s=i.filter(s=>{if(/^https?:\/\//.test(s))return!1;const[r,...o]=s.split(/[>=<]=/);return!ts(t[e],r)||o.length>0&&o[0]!==t[e][r]});if(s.length>0)throw new Error(`These packages are not supported in Pyodide ${e}: ${s.join(", ")}`)}}s.experimental_remote_packages&&(as("Loading remote packages"),s.packages=i=await Ge(s,i),as("Loaded remote packages"))}as("Loading Storage");const l=o.slice(0,o.lastIndexOf("/")),c=new g(`${l}@${e}`),p={indexURL:l},y="never"!==s.packages_cache&&"0.28.0"!==e;if(await c.sync(),as("Loaded Storage"),y||c.clear(),i&&y)if("passthrough"===s.packages_cache)p.packages=i,i=null,c.clear();else{i=i.sort();const t=Qe(i);if(c.has(t)){const s=c.get(t);if(p.packages=i.map(t=>t.split(/[>=<]=/)[0]),e.startsWith("0.27")){const t=new Blob([s],{type:"application/json"});p.lockFileURL=URL.createObjectURL(t)}else p.lockFileContents=s;i=null}}const{stderr:d,stdout:m,get:u}=r();as("Loading interpreter");const f=await u(t({stderr:d,stdout:m,...p}));as("Loaded interpreter"),globalThis[N].set("-T-",this.transform.bind(this,f)),s.debug&&f.setDebug(!0);const h=ys.bind(f);return a&&ls.set(f,a),Ee.set(f,h),await Be(this,as,f,s,n),i&&await h(i,c,y),await c.close(),p.lockFileURL&&URL.revokeObjectURL(p.lockFileURL),as("Loaded Pyodide"),"auto"===s.experimental_create_proxy&&(f.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:f.toPy({})}),ns=globalThis.experimental_create_proxy,delete globalThis.experimental_create_proxy,[os]=Reflect.ownKeys(ns).filter(t=>"symbol"==typeof t&&"Symbol(pyproxy.attrs)"===String(t)),is(!0)),f},registerJSModule:ze,run:rs(Re),runAsync:rs(Se),runEvent:rs(Pe),transform:(t,e)=>es(ps,t,[e]),writeFile:(t,e,s,r)=>{const o=Ce(e,r);if(o)return t.unpackArchive(s,o,{extractDir:e.slice(0,-1)});const{FS:n,PATH:i,_module:{PATH_FS:a}}=t;return Z({FS:n,PATH:i,PATH_FS:a},e,s)}};function ps(t){const{ffi:{PyProxy:e}}=this;if(t&&"object"==typeof t){if(t instanceof e)return t.toJs(Ze);if(t instanceof Map)return new Map([...t.entries()]);if(j(t))return t.map(ps,this)}return t}async function ys(t,e,s=!1){const{log:r}=console,o=(t,...e)=>{r(t,...e),console.log=r,as(t),console.log=o};console.log=o,await this.loadPackage("micropip");const n=this.pyimport("micropip");if(ls.has(this)&&n.set_index_urls(ls.get(this)),await n.install(t,{keep_going:!0}),console.log=r,s&&e instanceof g){const s=n.freeze();e.set(Qe(t),s)}n.destroy()}var ds={latest:{affine:"2.4.0",aiohappyeyeballs:"2.6.1",aiohttp:"3.11.13",aiosignal:"1.3.2",altair:"5.5.0","annotated-types":"0.7.0",anyio:"4.9.0",apsw:"3.49.1.0","argon2-cffi":"23.1.0","argon2-cffi-bindings":"21.2.0",asciitree:"0.3.3",astropy:"7.0.1",astropy_iers_data:"0.2025.3.10.0.29.26",asttokens:"3.0.0","async-timeout":"5.0.1",atomicwrites:"1.4.1",attrs:"25.2.0","audioop-lts":"0.2.1",autograd:"1.7.0","awkward-cpp":"47",b2d:"0.7.4",bcrypt:"4.3.0",beautifulsoup4:"4.13.3",biopython:"1.85",bitarray:"3.6.0",bitstring:"4.3.1",bleach:"6.2.0",blosc2:"3.5.1",bokeh:"3.6.3","boost-histogram":"1.5.0",brotli:"1.1.0",cachetools:"5.5.2",casadi:"3.7.0","cbor-diag":"1.0.1",certifi:"2025.7.14",cffi:"1.17.1",cffi_example:"0.1",cftime:"1.6.4.post1","charset-normalizer":"3.4.2",clarabel:"0.11.0",click:"8.2.1",cligj:"0.7.2",clingo:"5.7.1",cloudpickle:"3.1.1",cmyt:"2.0.2",cobs:"1.2.1",colorspacious:"1.1.2",contourpy:"1.3.1",coolprop:"6.6.0",coverage:"7.6.12",cramjam:"2.10.0rc1",crc32c:"2.7.1",cryptography:"45.0.5","css-inline":"0.16.0",cssselect:"1.3.0","cvxpy-base":"1.6.3",cycler:"0.12.1",cysignals:"1.12.3",cytoolz:"1.0.1",decorator:"5.2.1",demes:"0.2.3",deprecation:"2.1.0",diskcache:"5.6.3",distlib:"0.3.9",distro:"1.9.0",docutils:"0.21.2",donfig:"0.8.1.post1",ewah_bool_utils:"1.2.2",exceptiongroup:"1.2.2",executing:"2.2.0",fastparquet:"2024.11.0",fiona:"1.9.5",fonttools:"4.56.0",freesasa:"2.2.1",frozenlist:"1.6.0",fsspec:"2025.3.2",future:"1.0.0",galpy:"1.10.2",gmpy2:"2.1.5",gsw:"3.6.19",h11:"0.14.0",h3:"4.2.2",h5py:"3.13.0",html5lib:"1.1",httpcore:"1.0.7",httpx:"0.28.1",idna:"3.10",igraph:"0.11.8",imageio:"2.37.0","imgui-bundle":"1.92.0",iminuit:"2.30.1",iniconfig:"2.1.0",inspice:"1.6.3.3",ipython:"9.0.2",jedi:"0.19.2",Jinja2:"3.1.6",jiter:"0.9.0",joblib:"1.4.2",jsonschema:"4.23.0",jsonschema_specifications:"2024.10.1",kiwisolver:"1.4.8","lakers-python":"0.5.0",lazy_loader:"0.4","lazy-object-proxy":"1.10.0",libcst:"1.6.0",lightgbm:"4.6.0",logbook:"1.8.0",lxml:"6.0.0",lz4:"4.4.4",MarkupSafe:"3.0.2",matplotlib:"3.8.4","matplotlib-inline":"0.1.7","memory-allocator":"0.1.4",micropip:"0.10.1",mmh3:"5.1.0","more-itertools":"10.6.0",mpmath:"1.3.0",msgpack:"1.1.1",msgspec:"0.19.0",msprime:"1.3.3",multidict:"6.6.3",munch:"4.0.0",mypy:"1.15.0",narwhals:"1.46.0",ndindex:"1.9.2",netcdf4:"1.7.2",networkx:"3.4.2",newick:"1.9.0",nh3:"0.2.21",nlopt:"2.9.1",nltk:"3.9.1",numcodecs:"0.13.1",numpy:"2.2.5",openai:"1.68.2","opencv-python":"4.11.0.86",optlang:"1.8.3",orjson:"3.10.16",packaging:"24.2",pandas:"2.3.1",parso:"0.8.4",patsy:"1.0.1",pcodec:"0.3.3",peewee:"3.17.9","pi-heif":"0.21.0",Pillow:"11.3.0","pillow-heif":"1.0.0",pkgconfig:"1.5.5",platformdirs:"4.3.6",pluggy:"1.5.0",ply:"3.11",pplpy:"0.8.10",primecountpy:"0.1.1",prompt_toolkit:"3.0.50",propcache:"0.3.0",protobuf:"6.31.1","pure-eval":"0.2.3",py:"1.11.0",pyclipper:"1.3.0.post6",pycparser:"2.22",pycryptodome:"3.21.0",pydantic:"2.10.6",pydantic_core:"2.27.2",pyerfa:"2.0.1.5",Pygments:"2.19.1",pyheif:"0.8.0",pyiceberg:"0.9.0",pyinstrument:"5.0.1",PyMuPDF:"1.26.3",pynacl:"1.5.0","pyodide-http":"0.2.2","pyodide-unix-timezones":"1.0.0",pyparsing:"3.2.1",pyrsistent:"0.20.0",pysam:"0.23.0",pyshp:"2.3.1",pytaglib:"3.0.1",pytest:"8.3.5","pytest-asyncio":"0.25.3","pytest-benchmark":"4.0.0",pytest_httpx:"0.30.0","python-dateutil":"2.9.0.post0","python-flint":"0.7.1","python-magic":"0.4.27","python-sat":"1.8.dev17","python-solvespace":"3.0.8",pytz:"2025.2",pywavelets:"1.8.0",pyxel:"1.9.10",pyxirr:"0.10.6",pyyaml:"6.0.2",rasterio:"1.4.3",rateslib:"2.0.1",rebound:"4.4.7",reboundx:"4.4.1",referencing:"0.36.2",regex:"2024.11.6",requests:"2.32.4",retrying:"1.3.4",rich:"13.9.4",river:"0.22.0",RobotRaconteur:"1.2.5","rpds-py":"0.23.1","ruamel.yaml":"0.18.10",rustworkx:"0.17.0a3","scikit-image":"0.25.2","scikit-learn":"1.7.0",scipy:"1.14.1",screed:"1.1.3",setuptools:"76.0.0",shapely:"2.0.7",simplejson:"3.20.1",sisl:"0.16.2",six:"1.17.0","smart-open":"7.1.0",sniffio:"1.3.1",sortedcontainers:"2.4.0",soundfile:"0.12.1",soupsieve:"2.6",sourmash:"4.8.14",soxr:"0.5.0.post1",sparseqr:"1.2",sqlalchemy:"2.0.39","stack-data":"0.6.3",statsmodels:"0.14.4",strictyaml:"1.7.3",svgwrite:"1.4.3",swiglpk:"5.0.12",sympy:"1.13.3",tblib:"3.0.0",termcolor:"2.5.0",texttable:"1.7.0",texture2ddecoder:"1.0.5",threadpoolctl:"3.5.0",tiktoken:"0.9.0",tomli:"2.2.1","tomli-w":"1.2.0",toolz:"1.0.0",tqdm:"4.67.1",traitlets:"5.14.3",traits:"7.0.2","tree-sitter":"0.23.2","tree-sitter-go":"0.23.3","tree-sitter-java":"0.23.4","tree-sitter-python":"0.23.4",tskit:"0.6.4","typing-extensions":"4.14.1",tzdata:"2025.2",ujson:"5.10.0",uncertainties:"3.2.2",unyt:"3.0.3",urllib3:"2.5.0","vega-datasets":"0.9.0",wcwidth:"0.2.13",webencodings:"0.5.1",wordcloud:"1.9.4",wrapt:"1.17.2",xarray:"2025.1.2",xgboost:"2.1.4",xlrd:"2.0.1",xxhash:"3.5.0",xyzservices:"2025.1.0",yarl:"1.18.3",yt:"4.4.0",zengl:"2.7.1",zfpy:"1.0.1",zstandard:"0.23.0"},stable:{affine:"2.4.0",aiohappyeyeballs:"2.6.1",aiohttp:"3.11.13",aiosignal:"1.3.2",altair:"5.5.0","annotated-types":"0.7.0",anyio:"4.9.0",apsw:"3.49.1.0","argon2-cffi":"23.1.0","argon2-cffi-bindings":"21.2.0",asciitree:"0.3.3",astropy:"7.0.1",astropy_iers_data:"0.2025.3.10.0.29.26",asttokens:"3.0.0","async-timeout":"5.0.1",atomicwrites:"1.4.1",attrs:"25.2.0","audioop-lts":"0.2.1",autograd:"1.7.0","awkward-cpp":"47",b2d:"0.7.4",bcrypt:"4.3.0",beautifulsoup4:"4.13.3",biopython:"1.85",bitarray:"3.6.0",bitstring:"4.3.1",bleach:"6.2.0",blosc2:"3.5.1",bokeh:"3.6.3","boost-histogram":"1.5.0",brotli:"1.1.0",cachetools:"5.5.2",casadi:"3.7.0","cbor-diag":"1.0.1",certifi:"2025.7.14",cffi:"1.17.1",cffi_example:"0.1",cftime:"1.6.4.post1","charset-normalizer":"3.4.2",clarabel:"0.11.0",click:"8.2.1",cligj:"0.7.2",clingo:"5.7.1",cloudpickle:"3.1.1",cmyt:"2.0.2",cobs:"1.2.1",colorspacious:"1.1.2",contourpy:"1.3.1",coolprop:"6.6.0",coverage:"7.6.12",cramjam:"2.10.0rc1",crc32c:"2.7.1",cryptography:"45.0.5","css-inline":"0.16.0",cssselect:"1.3.0","cvxpy-base":"1.6.3",cycler:"0.12.1",cysignals:"1.12.3",cytoolz:"1.0.1",decorator:"5.2.1",demes:"0.2.3",deprecation:"2.1.0",diskcache:"5.6.3",distlib:"0.3.9",distro:"1.9.0",docutils:"0.21.2",donfig:"0.8.1.post1",ewah_bool_utils:"1.2.2",exceptiongroup:"1.2.2",executing:"2.2.0",fastparquet:"2024.11.0",fiona:"1.9.5",fonttools:"4.56.0",freesasa:"2.2.1",frozenlist:"1.6.0",fsspec:"2025.3.2",future:"1.0.0",galpy:"1.10.2",gmpy2:"2.1.5",gsw:"3.6.19",h11:"0.14.0",h3:"4.2.2",h5py:"3.13.0",html5lib:"1.1",httpcore:"1.0.7",httpx:"0.28.1",idna:"3.10",igraph:"0.11.8",imageio:"2.37.0","imgui-bundle":"1.92.0",iminuit:"2.30.1",iniconfig:"2.1.0",inspice:"1.6.3.3",ipython:"9.0.2",jedi:"0.19.2",Jinja2:"3.1.6",jiter:"0.9.0",joblib:"1.4.2",jsonschema:"4.23.0",jsonschema_specifications:"2024.10.1",kiwisolver:"1.4.8","lakers-python":"0.5.0",lazy_loader:"0.4","lazy-object-proxy":"1.10.0",libcst:"1.6.0",lightgbm:"4.6.0",logbook:"1.8.0",lxml:"6.0.0",lz4:"4.4.4",MarkupSafe:"3.0.2",matplotlib:"3.8.4","matplotlib-inline":"0.1.7","memory-allocator":"0.1.4",micropip:"0.10.1",mmh3:"5.1.0","more-itertools":"10.6.0",mpmath:"1.3.0",msgpack:"1.1.1",msgspec:"0.19.0",msprime:"1.3.3",multidict:"6.6.3",munch:"4.0.0",mypy:"1.15.0",narwhals:"1.46.0",ndindex:"1.9.2",netcdf4:"1.7.2",networkx:"3.4.2",newick:"1.9.0",nh3:"0.2.21",nlopt:"2.9.1",nltk:"3.9.1",numcodecs:"0.13.1",numpy:"2.2.5",openai:"1.68.2","opencv-python":"4.11.0.86",optlang:"1.8.3",orjson:"3.10.16",packaging:"24.2",pandas:"2.3.1",parso:"0.8.4",patsy:"1.0.1",pcodec:"0.3.3",peewee:"3.17.9","pi-heif":"0.21.0",Pillow:"11.3.0","pillow-heif":"1.0.0",pkgconfig:"1.5.5",platformdirs:"4.3.6",pluggy:"1.5.0",ply:"3.11",pplpy:"0.8.10",primecountpy:"0.1.1",prompt_toolkit:"3.0.50",propcache:"0.3.0",protobuf:"6.31.1","pure-eval":"0.2.3",py:"1.11.0",pyclipper:"1.3.0.post6",pycparser:"2.22",pycryptodome:"3.21.0",pydantic:"2.10.6",pydantic_core:"2.27.2",pyerfa:"2.0.1.5",Pygments:"2.19.1",pyheif:"0.8.0",pyiceberg:"0.9.0",pyinstrument:"5.0.1",PyMuPDF:"1.26.3",pynacl:"1.5.0","pyodide-http":"0.2.2","pyodide-unix-timezones":"1.0.0",pyparsing:"3.2.1",pyrsistent:"0.20.0",pysam:"0.23.0",pyshp:"2.3.1",pytaglib:"3.0.1",pytest:"8.3.5","pytest-asyncio":"0.25.3","pytest-benchmark":"4.0.0",pytest_httpx:"0.30.0","python-dateutil":"2.9.0.post0","python-flint":"0.7.1","python-magic":"0.4.27","python-sat":"1.8.dev17","python-solvespace":"3.0.8",pytz:"2025.2",pywavelets:"1.8.0",pyxel:"1.9.10",pyxirr:"0.10.6",pyyaml:"6.0.2",rasterio:"1.4.3",rateslib:"2.0.1",rebound:"4.4.7",reboundx:"4.4.1",referencing:"0.36.2",regex:"2024.11.6",requests:"2.32.4",retrying:"1.3.4",rich:"13.9.4",river:"0.22.0",RobotRaconteur:"1.2.5","rpds-py":"0.23.1","ruamel.yaml":"0.18.10",rustworkx:"0.17.0a3","scikit-image":"0.25.2","scikit-learn":"1.7.0",scipy:"1.14.1",screed:"1.1.3",setuptools:"76.0.0",shapely:"2.0.7",simplejson:"3.20.1",sisl:"0.16.2",six:"1.17.0","smart-open":"7.1.0",sniffio:"1.3.1",sortedcontainers:"2.4.0",soundfile:"0.12.1",soupsieve:"2.6",sourmash:"4.8.14",soxr:"0.5.0.post1",sparseqr:"1.2",sqlalchemy:"2.0.39","stack-data":"0.6.3",statsmodels:"0.14.4",strictyaml:"1.7.3",svgwrite:"1.4.3",swiglpk:"5.0.12",sympy:"1.13.3",tblib:"3.0.0",termcolor:"2.5.0",texttable:"1.7.0",texture2ddecoder:"1.0.5",threadpoolctl:"3.5.0",tiktoken:"0.9.0",tomli:"2.2.1","tomli-w":"1.2.0",toolz:"1.0.0",tqdm:"4.67.1",traitlets:"5.14.3",traits:"7.0.2","tree-sitter":"0.23.2","tree-sitter-go":"0.23.3","tree-sitter-java":"0.23.4","tree-sitter-python":"0.23.4",tskit:"0.6.4","typing-extensions":"4.14.1",tzdata:"2025.2",ujson:"5.10.0",uncertainties:"3.2.2",unyt:"3.0.3",urllib3:"2.5.0","vega-datasets":"0.9.0",wcwidth:"0.2.13",webencodings:"0.5.1",wordcloud:"1.9.4",wrapt:"1.17.2",xarray:"2025.1.2",xgboost:"2.1.4",xlrd:"2.0.1",xxhash:"3.5.0",xyzservices:"2025.1.0",yarl:"1.18.3",yt:"4.4.0",zengl:"2.7.1",zfpy:"1.0.1",zstandard:"0.23.0"},"0.28.3":{affine:"2.4.0",aiohappyeyeballs:"2.6.1",aiohttp:"3.11.13",aiosignal:"1.3.2",altair:"5.5.0","annotated-types":"0.7.0",anyio:"4.9.0",apsw:"3.49.1.0","argon2-cffi":"23.1.0","argon2-cffi-bindings":"21.2.0",asciitree:"0.3.3",astropy:"7.0.1",astropy_iers_data:"0.2025.3.10.0.29.26",asttokens:"3.0.0","async-timeout":"5.0.1",atomicwrites:"1.4.1",attrs:"25.2.0","audioop-lts":"0.2.1",autograd:"1.7.0","awkward-cpp":"47",b2d:"0.7.4",bcrypt:"4.3.0",beautifulsoup4:"4.13.3",biopython:"1.85",bitarray:"3.6.0",bitstring:"4.3.1",bleach:"6.2.0",blosc2:"3.5.1",bokeh:"3.6.3","boost-histogram":"1.5.0",brotli:"1.1.0",cachetools:"5.5.2",casadi:"3.7.0","cbor-diag":"1.0.1",certifi:"2025.7.14",cffi:"1.17.1",cffi_example:"0.1",cftime:"1.6.4.post1","charset-normalizer":"3.4.2",clarabel:"0.11.0",click:"8.2.1",cligj:"0.7.2",clingo:"5.7.1",cloudpickle:"3.1.1",cmyt:"2.0.2",cobs:"1.2.1",colorspacious:"1.1.2",contourpy:"1.3.1",coolprop:"6.6.0",coverage:"7.6.12",cramjam:"2.10.0rc1",crc32c:"2.7.1",cryptography:"45.0.5","css-inline":"0.16.0",cssselect:"1.3.0","cvxpy-base":"1.6.3",cycler:"0.12.1",cysignals:"1.12.3",cytoolz:"1.0.1",decorator:"5.2.1",demes:"0.2.3",deprecation:"2.1.0",diskcache:"5.6.3",distlib:"0.3.9",distro:"1.9.0",docutils:"0.21.2",donfig:"0.8.1.post1",ewah_bool_utils:"1.2.2",exceptiongroup:"1.2.2",executing:"2.2.0",fastparquet:"2024.11.0",fiona:"1.9.5",fonttools:"4.56.0",freesasa:"2.2.1",frozenlist:"1.6.0",fsspec:"2025.3.2",future:"1.0.0",galpy:"1.10.2",gmpy2:"2.1.5",gsw:"3.6.19",h11:"0.14.0",h3:"4.2.2",h5py:"3.13.0",html5lib:"1.1",httpcore:"1.0.7",httpx:"0.28.1",idna:"3.10",igraph:"0.11.8",imageio:"2.37.0","imgui-bundle":"1.92.0",iminuit:"2.30.1",iniconfig:"2.1.0",inspice:"1.6.3.3",ipython:"9.0.2",jedi:"0.19.2",Jinja2:"3.1.6",jiter:"0.9.0",joblib:"1.4.2",jsonschema:"4.23.0",jsonschema_specifications:"2024.10.1",kiwisolver:"1.4.8","lakers-python":"0.5.0",lazy_loader:"0.4","lazy-object-proxy":"1.10.0",libcst:"1.6.0",lightgbm:"4.6.0",logbook:"1.8.0",lxml:"6.0.0",lz4:"4.4.4",MarkupSafe:"3.0.2",matplotlib:"3.8.4","matplotlib-inline":"0.1.7","memory-allocator":"0.1.4",micropip:"0.10.1",mmh3:"5.1.0","more-itertools":"10.6.0",mpmath:"1.3.0",msgpack:"1.1.1",msgspec:"0.19.0",msprime:"1.3.3",multidict:"6.6.3",munch:"4.0.0",mypy:"1.15.0",narwhals:"1.46.0",ndindex:"1.9.2",netcdf4:"1.7.2",networkx:"3.4.2",newick:"1.9.0",nh3:"0.2.21",nlopt:"2.9.1",nltk:"3.9.1",numcodecs:"0.13.1",numpy:"2.2.5",openai:"1.68.2","opencv-python":"4.11.0.86",optlang:"1.8.3",orjson:"3.10.16",packaging:"24.2",pandas:"2.3.1",parso:"0.8.4",patsy:"1.0.1",pcodec:"0.3.3",peewee:"3.17.9","pi-heif":"0.21.0",Pillow:"11.3.0","pillow-heif":"1.0.0",pkgconfig:"1.5.5",platformdirs:"4.3.6",pluggy:"1.5.0",ply:"3.11",pplpy:"0.8.10",primecountpy:"0.1.1",prompt_toolkit:"3.0.50",propcache:"0.3.0",protobuf:"6.31.1","pure-eval":"0.2.3",py:"1.11.0",pyclipper:"1.3.0.post6",pycparser:"2.22",pycryptodome:"3.21.0",pydantic:"2.10.6",pydantic_core:"2.27.2",pyerfa:"2.0.1.5",Pygments:"2.19.1",pyheif:"0.8.0",pyiceberg:"0.9.0",pyinstrument:"5.0.1",PyMuPDF:"1.26.3",pynacl:"1.5.0","pyodide-http":"0.2.2","pyodide-unix-timezones":"1.0.0",pyparsing:"3.2.1",pyrsistent:"0.20.0",pysam:"0.23.0",pyshp:"2.3.1",pytaglib:"3.0.1",pytest:"8.3.5","pytest-asyncio":"0.25.3","pytest-benchmark":"4.0.0",pytest_httpx:"0.30.0","python-dateutil":"2.9.0.post0","python-flint":"0.7.1","python-magic":"0.4.27","python-sat":"1.8.dev17","python-solvespace":"3.0.8",pytz:"2025.2",pywavelets:"1.8.0",pyxel:"1.9.10",pyxirr:"0.10.6",pyyaml:"6.0.2",rasterio:"1.4.3",rateslib:"2.0.1",rebound:"4.4.7",reboundx:"4.4.1",referencing:"0.36.2",regex:"2024.11.6",requests:"2.32.4",retrying:"1.3.4",rich:"13.9.4",river:"0.22.0",RobotRaconteur:"1.2.5","rpds-py":"0.23.1","ruamel.yaml":"0.18.10",rustworkx:"0.17.0a3","scikit-image":"0.25.2","scikit-learn":"1.7.0",scipy:"1.14.1",screed:"1.1.3",setuptools:"76.0.0",shapely:"2.0.7",simplejson:"3.20.1",sisl:"0.16.2",six:"1.17.0","smart-open":"7.1.0",sniffio:"1.3.1",sortedcontainers:"2.4.0",soundfile:"0.12.1",soupsieve:"2.6",sourmash:"4.8.14",soxr:"0.5.0.post1",sparseqr:"1.2",sqlalchemy:"2.0.39","stack-data":"0.6.3",statsmodels:"0.14.4",strictyaml:"1.7.3",svgwrite:"1.4.3",swiglpk:"5.0.12",sympy:"1.13.3",tblib:"3.0.0",termcolor:"2.5.0",texttable:"1.7.0",texture2ddecoder:"1.0.5",threadpoolctl:"3.5.0",tiktoken:"0.9.0",tomli:"2.2.1","tomli-w":"1.2.0",toolz:"1.0.0",tqdm:"4.67.1",traitlets:"5.14.3",traits:"7.0.2","tree-sitter":"0.23.2","tree-sitter-go":"0.23.3","tree-sitter-java":"0.23.4","tree-sitter-python":"0.23.4",tskit:"0.6.4","typing-extensions":"4.14.1",tzdata:"2025.2",ujson:"5.10.0",uncertainties:"3.2.2",unyt:"3.0.3",urllib3:"2.5.0","vega-datasets":"0.9.0",wcwidth:"0.2.13",webencodings:"0.5.1",wordcloud:"1.9.4",wrapt:"1.17.2",xarray:"2025.1.2",xgboost:"2.1.4",xlrd:"2.0.1",xxhash:"3.5.0",xyzservices:"2025.1.0",yarl:"1.18.3",yt:"4.4.0",zengl:"2.7.1",zfpy:"1.0.1",zstandard:"0.23.0"},"0.28.2":{affine:"2.4.0",aiohappyeyeballs:"2.6.1",aiohttp:"3.11.13",aiosignal:"1.3.2",altair:"5.5.0","annotated-types":"0.7.0",anyio:"4.9.0",apsw:"3.49.1.0","argon2-cffi":"23.1.0","argon2-cffi-bindings":"21.2.0",asciitree:"0.3.3",astropy:"7.0.1",astropy_iers_data:"0.2025.3.10.0.29.26",asttokens:"3.0.0","async-timeout":"5.0.1",atomicwrites:"1.4.1",attrs:"25.2.0","audioop-lts":"0.2.1",autograd:"1.7.0","awkward-cpp":"47",b2d:"0.7.4",bcrypt:"4.3.0",beautifulsoup4:"4.13.3",biopython:"1.85",bitarray:"3.6.0",bitstring:"4.3.1",bleach:"6.2.0",blosc2:"3.5.1",bokeh:"3.6.3","boost-histogram":"1.5.0",brotli:"1.1.0",cachetools:"5.5.2",casadi:"3.7.0","cbor-diag":"1.0.1",certifi:"2025.7.14",cffi:"1.17.1",cffi_example:"0.1",cftime:"1.6.4.post1","charset-normalizer":"3.4.2",clarabel:"0.11.0",click:"8.2.1",cligj:"0.7.2",clingo:"5.7.1",cloudpickle:"3.1.1",cmyt:"2.0.2",cobs:"1.2.1",colorspacious:"1.1.2",contourpy:"1.3.1",coolprop:"6.6.0",coverage:"7.6.12",cramjam:"2.10.0rc1",crc32c:"2.7.1",cryptography:"45.0.5","css-inline":"0.16.0",cssselect:"1.3.0","cvxpy-base":"1.6.3",cycler:"0.12.1",cysignals:"1.12.3",cytoolz:"1.0.1",decorator:"5.2.1",demes:"0.2.3",deprecation:"2.1.0",diskcache:"5.6.3",distlib:"0.3.9",distro:"1.9.0",docutils:"0.21.2",donfig:"0.8.1.post1",ewah_bool_utils:"1.2.2",exceptiongroup:"1.2.2",executing:"2.2.0",fastparquet:"2024.11.0",fiona:"1.9.5",fonttools:"4.56.0",freesasa:"2.2.1",frozenlist:"1.6.0",fsspec:"2025.3.2",future:"1.0.0",galpy:"1.10.2",gmpy2:"2.1.5",gsw:"3.6.19",h11:"0.14.0",h3:"4.2.2",h5py:"3.13.0",html5lib:"1.1",httpcore:"1.0.7",httpx:"0.28.1",idna:"3.10",igraph:"0.11.8",imageio:"2.37.0","imgui-bundle":"1.92.0",iminuit:"2.30.1",iniconfig:"2.1.0",inspice:"1.6.3.3",ipython:"9.0.2",jedi:"0.19.2",Jinja2:"3.1.6",jiter:"0.9.0",joblib:"1.4.2",jsonschema:"4.23.0",jsonschema_specifications:"2024.10.1",kiwisolver:"1.4.8","lakers-python":"0.5.0",lazy_loader:"0.4","lazy-object-proxy":"1.10.0",libcst:"1.6.0",lightgbm:"4.6.0",logbook:"1.8.0",lxml:"6.0.0",lz4:"4.4.4",MarkupSafe:"3.0.2",matplotlib:"3.8.4","matplotlib-inline":"0.1.7","memory-allocator":"0.1.4",micropip:"0.10.1",mmh3:"5.1.0","more-itertools":"10.6.0",mpmath:"1.3.0",msgpack:"1.1.1",msgspec:"0.19.0",msprime:"1.3.3",multidict:"6.6.3",munch:"4.0.0",mypy:"1.15.0",narwhals:"1.46.0",ndindex:"1.9.2",netcdf4:"1.7.2",networkx:"3.4.2",newick:"1.9.0",nh3:"0.2.21",nlopt:"2.9.1",nltk:"3.9.1",numcodecs:"0.13.1",numpy:"2.2.5",openai:"1.68.2","opencv-python":"4.11.0.86",optlang:"1.8.3",orjson:"3.10.16",packaging:"24.2",pandas:"2.3.1",parso:"0.8.4",patsy:"1.0.1",pcodec:"0.3.3",peewee:"3.17.9","pi-heif":"0.21.0",Pillow:"11.3.0","pillow-heif":"1.0.0",pkgconfig:"1.5.5",platformdirs:"4.3.6",pluggy:"1.5.0",ply:"3.11",pplpy:"0.8.10",primecountpy:"0.1.1",prompt_toolkit:"3.0.50",propcache:"0.3.0",protobuf:"6.31.1","pure-eval":"0.2.3",py:"1.11.0",pyclipper:"1.3.0.post6",pycparser:"2.22",pycryptodome:"3.21.0",pydantic:"2.10.6",pydantic_core:"2.27.2",pyerfa:"2.0.1.5",Pygments:"2.19.1",pyheif:"0.8.0",pyiceberg:"0.9.0",pyinstrument:"5.0.1",PyMuPDF:"1.26.3",pynacl:"1.5.0","pyodide-http":"0.2.2","pyodide-unix-timezones":"1.0.0",pyparsing:"3.2.1",pyrsistent:"0.20.0",pysam:"0.23.0",pyshp:"2.3.1",pytaglib:"3.0.1",pytest:"8.3.5","pytest-asyncio":"0.25.3","pytest-benchmark":"4.0.0",pytest_httpx:"0.30.0","python-dateutil":"2.9.0.post0","python-flint":"0.7.1","python-magic":"0.4.27","python-sat":"1.8.dev17","python-solvespace":"3.0.8",pytz:"2025.2",pywavelets:"1.8.0",pyxel:"1.9.10",pyxirr:"0.10.6",pyyaml:"6.0.2",rasterio:"1.4.3",rateslib:"2.0.1",rebound:"4.4.7",reboundx:"4.4.1",referencing:"0.36.2",regex:"2024.11.6",requests:"2.32.4",retrying:"1.3.4",rich:"13.9.4",river:"0.22.0",RobotRaconteur:"1.2.5","rpds-py":"0.23.1","ruamel.yaml":"0.18.10",rustworkx:"0.17.0a3","scikit-image":"0.25.2","scikit-learn":"1.7.0",scipy:"1.14.1",screed:"1.1.3",setuptools:"76.0.0",shapely:"2.0.7",simplejson:"3.20.1",sisl:"0.16.2",six:"1.17.0","smart-open":"7.1.0",sniffio:"1.3.1",sortedcontainers:"2.4.0",soundfile:"0.12.1",soupsieve:"2.6",sourmash:"4.8.14",soxr:"0.5.0.post1",sparseqr:"1.2",sqlalchemy:"2.0.39","stack-data":"0.6.3",statsmodels:"0.14.4",strictyaml:"1.7.3",svgwrite:"1.4.3",swiglpk:"5.0.12",sympy:"1.13.3",tblib:"3.0.0",termcolor:"2.5.0",texttable:"1.7.0",texture2ddecoder:"1.0.5",threadpoolctl:"3.5.0",tiktoken:"0.9.0",tomli:"2.2.1","tomli-w":"1.2.0",toolz:"1.0.0",tqdm:"4.67.1",traitlets:"5.14.3",traits:"7.0.2","tree-sitter":"0.23.2","tree-sitter-go":"0.23.3","tree-sitter-java":"0.23.4","tree-sitter-python":"0.23.4",tskit:"0.6.4","typing-extensions":"4.14.1",tzdata:"2025.2",ujson:"5.10.0",uncertainties:"3.2.2",unyt:"3.0.3",urllib3:"2.5.0","vega-datasets":"0.9.0",wcwidth:"0.2.13",webencodings:"0.5.1",wordcloud:"1.9.4",wrapt:"1.17.2",xarray:"2025.1.2",xgboost:"2.1.4",xlrd:"2.0.1",xxhash:"3.5.0",xyzservices:"2025.1.0",yarl:"1.18.3",yt:"4.4.0",zengl:"2.7.1",zfpy:"1.0.1",zstandard:"0.23.0"},"0.28.1":{affine:"2.4.0",aiohappyeyeballs:"2.6.1",aiohttp:"3.11.13",aiosignal:"1.3.2",altair:"5.5.0","annotated-types":"0.7.0",anyio:"4.9.0",apsw:"3.49.1.0","argon2-cffi":"23.1.0","argon2-cffi-bindings":"21.2.0",asciitree:"0.3.3",astropy:"7.0.1",astropy_iers_data:"0.2025.3.10.0.29.26",asttokens:"3.0.0","async-timeout":"5.0.1",atomicwrites:"1.4.1",attrs:"25.2.0","audioop-lts":"0.2.1",autograd:"1.7.0","awkward-cpp":"47",b2d:"0.7.4",bcrypt:"4.3.0",beautifulsoup4:"4.13.3",biopython:"1.85",bitarray:"3.6.0",bitstring:"4.3.1",bleach:"6.2.0",blosc2:"3.5.1",bokeh:"3.6.3","boost-histogram":"1.5.0",brotli:"1.1.0",cachetools:"5.5.2",casadi:"3.7.0","cbor-diag":"1.0.1",certifi:"2025.7.14",cffi:"1.17.1",cffi_example:"0.1",cftime:"1.6.4.post1","charset-normalizer":"3.4.2",clarabel:"0.11.0",click:"8.2.1",cligj:"0.7.2",clingo:"5.7.1",cloudpickle:"3.1.1",cmyt:"2.0.2",cobs:"1.2.1",colorspacious:"1.1.2",contourpy:"1.3.1",coolprop:"6.6.0",coverage:"7.6.12",cramjam:"2.10.0rc1",crc32c:"2.7.1",cryptography:"45.0.5","css-inline":"0.16.0",cssselect:"1.3.0","cvxpy-base":"1.6.3",cycler:"0.12.1",cysignals:"1.12.3",cytoolz:"1.0.1",decorator:"5.2.1",demes:"0.2.3",deprecation:"2.1.0",diskcache:"5.6.3",distlib:"0.3.9",distro:"1.9.0",docutils:"0.21.2",donfig:"0.8.1.post1",ewah_bool_utils:"1.2.2",exceptiongroup:"1.2.2",executing:"2.2.0",fastparquet:"2024.11.0",fiona:"1.9.5",fonttools:"4.56.0",freesasa:"2.2.1",frozenlist:"1.6.0",fsspec:"2025.3.2",future:"1.0.0",galpy:"1.10.2",gmpy2:"2.1.5",gsw:"3.6.19",h11:"0.14.0",h3:"4.2.2",h5py:"3.13.0",html5lib:"1.1",httpcore:"1.0.7",httpx:"0.28.1",idna:"3.10",igraph:"0.11.8",imageio:"2.37.0","imgui-bundle":"1.92.0",iminuit:"2.30.1",iniconfig:"2.1.0",inspice:"1.6.3.3",ipython:"9.0.2",jedi:"0.19.2",Jinja2:"3.1.6",jiter:"0.9.0",joblib:"1.4.2",jsonschema:"4.23.0",jsonschema_specifications:"2024.10.1",kiwisolver:"1.4.8","lakers-python":"0.5.0",lazy_loader:"0.4","lazy-object-proxy":"1.10.0",libcst:"1.6.0",lightgbm:"4.6.0",logbook:"1.8.0",lxml:"6.0.0",lz4:"4.4.4",MarkupSafe:"3.0.2",matplotlib:"3.8.4","matplotlib-inline":"0.1.7","memory-allocator":"0.1.4",micropip:"0.10.1",mmh3:"5.1.0","more-itertools":"10.6.0",mpmath:"1.3.0",msgpack:"1.1.1",msgspec:"0.19.0",msprime:"1.3.3",multidict:"6.6.3",munch:"4.0.0",mypy:"1.15.0",narwhals:"1.46.0",ndindex:"1.9.2",netcdf4:"1.7.2",networkx:"3.4.2",newick:"1.9.0",nh3:"0.2.21",nlopt:"2.9.1",nltk:"3.9.1",numcodecs:"0.13.1",numpy:"2.2.5",openai:"1.68.2","opencv-python":"4.11.0.86",optlang:"1.8.3",orjson:"3.10.16",packaging:"24.2",pandas:"2.3.1",parso:"0.8.4",patsy:"1.0.1",pcodec:"0.3.3",peewee:"3.17.9","pi-heif":"0.21.0",Pillow:"11.3.0","pillow-heif":"1.0.0",pkgconfig:"1.5.5",platformdirs:"4.3.6",pluggy:"1.5.0",ply:"3.11",pplpy:"0.8.10",primecountpy:"0.1.1",prompt_toolkit:"3.0.50",propcache:"0.3.0",protobuf:"6.31.1","pure-eval":"0.2.3",py:"1.11.0",pyclipper:"1.3.0.post6",pycparser:"2.22",pycryptodome:"3.21.0",pydantic:"2.10.6",pydantic_core:"2.27.2",pyerfa:"2.0.1.5",Pygments:"2.19.1",pyheif:"0.8.0",pyiceberg:"0.9.0",pyinstrument:"5.0.1",PyMuPDF:"1.26.3",pynacl:"1.5.0","pyodide-http":"0.2.2","pyodide-unix-timezones":"1.0.0",pyparsing:"3.2.1",pyrsistent:"0.20.0",pysam:"0.23.0",pyshp:"2.3.1",pytaglib:"3.0.1",pytest:"8.3.5","pytest-asyncio":"0.25.3","pytest-benchmark":"4.0.0",pytest_httpx:"0.30.0","python-dateutil":"2.9.0.post0","python-flint":"0.7.1","python-magic":"0.4.27","python-sat":"1.8.dev17","python-solvespace":"3.0.8",pytz:"2025.2",pywavelets:"1.8.0",pyxel:"1.9.10",pyxirr:"0.10.6",pyyaml:"6.0.2",rasterio:"1.4.3",rateslib:"2.0.1",rebound:"4.4.7",reboundx:"4.4.1",referencing:"0.36.2",regex:"2024.11.6",requests:"2.32.4",retrying:"1.3.4",rich:"13.9.4",river:"0.22.0",RobotRaconteur:"1.2.5","rpds-py":"0.23.1","ruamel.yaml":"0.18.10",rustworkx:"0.17.0a3","scikit-image":"0.25.2","scikit-learn":"1.7.0",scipy:"1.14.1",screed:"1.1.3",setuptools:"76.0.0",shapely:"2.0.7",simplejson:"3.20.1",sisl:"0.16.2",six:"1.17.0","smart-open":"7.1.0",sniffio:"1.3.1",sortedcontainers:"2.4.0",soundfile:"0.12.1",soupsieve:"2.6",sourmash:"4.8.14",soxr:"0.5.0.post1",sparseqr:"1.2",sqlalchemy:"2.0.39","stack-data":"0.6.3",statsmodels:"0.14.4",strictyaml:"1.7.3",svgwrite:"1.4.3",swiglpk:"5.0.12",sympy:"1.13.3",tblib:"3.0.0",termcolor:"2.5.0",texttable:"1.7.0",texture2ddecoder:"1.0.5",threadpoolctl:"3.5.0",tiktoken:"0.9.0",tomli:"2.2.1","tomli-w":"1.2.0",toolz:"1.0.0",tqdm:"4.67.1",traitlets:"5.14.3",traits:"7.0.2","tree-sitter":"0.23.2","tree-sitter-go":"0.23.3","tree-sitter-java":"0.23.4","tree-sitter-python":"0.23.4",tskit:"0.6.4","typing-extensions":"4.14.1",tzdata:"2025.2",ujson:"5.10.0",uncertainties:"3.2.2",unyt:"3.0.3",urllib3:"2.5.0","vega-datasets":"0.9.0",wcwidth:"0.2.13",webencodings:"0.5.1",wordcloud:"1.9.4",wrapt:"1.17.2",xarray:"2025.1.2",xgboost:"2.1.4",xlrd:"2.0.1",xxhash:"3.5.0",xyzservices:"2025.1.0",yarl:"1.18.3",yt:"4.4.0",zengl:"2.7.1",zfpy:"1.0.1",zstandard:"0.23.0"},"0.28.0":{affine:"2.4.0",aiohappyeyeballs:"2.6.1",aiohttp:"3.11.13",aiosignal:"1.3.2",altair:"5.5.0","annotated-types":"0.7.0",anyio:"4.9.0",apsw:"3.49.1.0","argon2-cffi":"23.1.0","argon2-cffi-bindings":"21.2.0",asciitree:"0.3.3",astropy:"7.0.1",astropy_iers_data:"0.2025.3.10.0.29.26",asttokens:"3.0.0","async-timeout":"5.0.1",atomicwrites:"1.4.1",attrs:"25.2.0","audioop-lts":"0.2.1",autograd:"1.7.0","awkward-cpp":"47",b2d:"0.7.4",bcrypt:"4.3.0",beautifulsoup4:"4.13.3",biopython:"1.85",bitarray:"3.6.0",bitstring:"4.3.1",bleach:"6.2.0",blosc2:"3.5.1",bokeh:"3.6.3","boost-histogram":"1.5.0",brotli:"1.1.0",cachetools:"5.5.2",casadi:"3.7.0","cbor-diag":"1.0.1",certifi:"2025.7.14",cffi:"1.17.1",cffi_example:"0.1",cftime:"1.6.4.post1","charset-normalizer":"3.4.2",clarabel:"0.11.0",click:"8.2.1",cligj:"0.7.2",clingo:"5.7.1",cloudpickle:"3.1.1",cmyt:"2.0.2",cobs:"1.2.1",colorspacious:"1.1.2",contourpy:"1.3.1",coolprop:"6.6.0",coverage:"7.6.12",cramjam:"2.10.0rc1",crc32c:"2.7.1",cryptography:"45.0.5","css-inline":"0.16.0",cssselect:"1.3.0","cvxpy-base":"1.6.3",cycler:"0.12.1",cysignals:"1.12.3",cytoolz:"1.0.1",decorator:"5.2.1",demes:"0.2.3",deprecation:"2.1.0",diskcache:"5.6.3",distlib:"0.3.9",distro:"1.9.0",docutils:"0.21.2",donfig:"0.8.1.post1",ewah_bool_utils:"1.2.2",exceptiongroup:"1.2.2",executing:"2.2.0",fastparquet:"2024.11.0",fiona:"1.9.5",fonttools:"4.56.0",freesasa:"2.2.1",frozenlist:"1.6.0",fsspec:"2025.3.2",future:"1.0.0",galpy:"1.10.2",gmpy2:"2.1.5",gsw:"3.6.19",h11:"0.14.0",h3:"4.2.2",h5py:"3.13.0",html5lib:"1.1",httpcore:"1.0.7",httpx:"0.28.1",idna:"3.10",igraph:"0.11.8",imageio:"2.37.0","imgui-bundle":"1.92.0",iminuit:"2.30.1",iniconfig:"2.1.0",inspice:"1.6.3.3",ipython:"9.0.2",jedi:"0.19.2",Jinja2:"3.1.6",jiter:"0.9.0",joblib:"1.4.2",jsonschema:"4.23.0",jsonschema_specifications:"2024.10.1",kiwisolver:"1.4.8","lakers-python":"0.5.0",lazy_loader:"0.4","lazy-object-proxy":"1.10.0",libcst:"1.6.0",lightgbm:"4.6.0",logbook:"1.8.0",lxml:"6.0.0",lz4:"4.4.4",MarkupSafe:"3.0.2",matplotlib:"3.8.4","matplotlib-inline":"0.1.7","memory-allocator":"0.1.4",micropip:"0.10.1",mmh3:"5.1.0","more-itertools":"10.6.0",mpmath:"1.3.0",msgpack:"1.1.1",msgspec:"0.19.0",msprime:"1.3.3",multidict:"6.6.3",munch:"4.0.0",mypy:"1.15.0",narwhals:"1.46.0",ndindex:"1.9.2",netcdf4:"1.7.2",networkx:"3.4.2",newick:"1.9.0",nh3:"0.2.21",nlopt:"2.9.1",nltk:"3.9.1",numcodecs:"0.13.1",numpy:"2.2.5",openai:"1.68.2","opencv-python":"4.11.0.86",optlang:"1.8.3",orjson:"3.10.16",packaging:"24.2",pandas:"2.3.1",parso:"0.8.4",patsy:"1.0.1",pcodec:"0.3.3",peewee:"3.17.9","pi-heif":"0.21.0",Pillow:"11.3.0","pillow-heif":"1.0.0",pkgconfig:"1.5.5",platformdirs:"4.3.6",pluggy:"1.5.0",ply:"3.11",pplpy:"0.8.10",primecountpy:"0.1.1",prompt_toolkit:"3.0.50",propcache:"0.3.0",protobuf:"6.31.1","pure-eval":"0.2.3",py:"1.11.0",pyclipper:"1.3.0.post6",pycparser:"2.22",pycryptodome:"3.21.0",pydantic:"2.10.6",pydantic_core:"2.27.2",pyerfa:"2.0.1.5",Pygments:"2.19.1",pyheif:"0.8.0",pyiceberg:"0.9.0",pyinstrument:"5.0.1",PyMuPDF:"1.26.3",pynacl:"1.5.0","pyodide-http":"0.2.2","pyodide-unix-timezones":"1.0.0",pyparsing:"3.2.1",pyrsistent:"0.20.0",pysam:"0.23.0",pyshp:"2.3.1",pytaglib:"3.0.1",pytest:"8.3.5","pytest-asyncio":"0.25.3","pytest-benchmark":"4.0.0",pytest_httpx:"0.30.0","python-dateutil":"2.9.0.post0","python-flint":"0.7.1","python-magic":"0.4.27","python-sat":"1.8.dev17","python-solvespace":"3.0.8",pytz:"2025.2",pywavelets:"1.8.0",pyxel:"1.9.10",pyxirr:"0.10.6",pyyaml:"6.0.2",rasterio:"1.4.3",rateslib:"2.0.1",rebound:"4.4.7",reboundx:"4.4.1",referencing:"0.36.2",regex:"2024.11.6",requests:"2.32.4",retrying:"1.3.4",rich:"13.9.4",river:"0.22.0",RobotRaconteur:"1.2.5","rpds-py":"0.23.1","ruamel.yaml":"0.18.10",rustworkx:"0.17.0a3","scikit-image":"0.25.2","scikit-learn":"1.7.0",scipy:"1.14.1",screed:"1.1.3",setuptools:"76.0.0",shapely:"2.0.7",simplejson:"3.20.1",sisl:"0.16.2",six:"1.17.0","smart-open":"7.1.0",sniffio:"1.3.1",sortedcontainers:"2.4.0",soundfile:"0.12.1",soupsieve:"2.6",sourmash:"4.8.14",soxr:"0.5.0.post1",sparseqr:"1.2",sqlalchemy:"2.0.39","stack-data":"0.6.3",statsmodels:"0.14.4",strictyaml:"1.7.3",svgwrite:"1.4.3",swiglpk:"5.0.12",sympy:"1.13.3",tblib:"3.0.0",termcolor:"2.5.0",texttable:"1.7.0",texture2ddecoder:"1.0.5",threadpoolctl:"3.5.0",tiktoken:"0.9.0",tomli:"2.2.1","tomli-w":"1.2.0",toolz:"1.0.0",tqdm:"4.67.1",traitlets:"5.14.3",traits:"7.0.2","tree-sitter":"0.23.2","tree-sitter-go":"0.23.3","tree-sitter-java":"0.23.4","tree-sitter-python":"0.23.4",tskit:"0.6.4","typing-extensions":"4.14.1",tzdata:"2025.2",ujson:"5.10.0",uncertainties:"3.2.2",unyt:"3.0.3",urllib3:"2.5.0","vega-datasets":"0.9.0",wcwidth:"0.2.13",webencodings:"0.5.1",wordcloud:"1.9.4",wrapt:"1.17.2",xarray:"2025.1.2",xgboost:"2.1.4",xlrd:"2.0.1",xxhash:"3.5.0",xyzservices:"2025.1.0",yarl:"1.18.3",yt:"4.4.0",zengl:"2.7.1",zfpy:"1.0.1",zstandard:"0.23.0"},"0.27.7":{affine:"2.4.0",aiohappyeyeballs:"2.6.1",aiohttp:"3.11.13",aiosignal:"1.3.2",altair:"5.5.0","annotated-types":"0.7.0",anyio:"4.9.0",apsw:"3.49.1.0","argon2-cffi":"23.1.0","argon2-cffi-bindings":"21.2.0",asciitree:"0.3.3",astropy:"7.0.1",astropy_iers_data:"0.2025.3.10.0.29.26",asttokens:"3.0.0","async-timeout":"5.0.1",atomicwrites:"1.4.1",attrs:"25.2.0","audioop-lts":"0.2.1",autograd:"1.7.0","awkward-cpp":"47",b2d:"0.7.4",bcrypt:"4.3.0",beautifulsoup4:"4.13.3",biopython:"1.85",bitarray:"3.6.0",bitstring:"4.3.1",bleach:"6.2.0",blosc2:"3.5.1",bokeh:"3.6.3","boost-histogram":"1.5.0",brotli:"1.1.0",cachetools:"5.5.2",casadi:"3.7.0","cbor-diag":"1.0.1",certifi:"2025.7.14",cffi:"1.17.1",cffi_example:"0.1",cftime:"1.6.4.post1","charset-normalizer":"3.4.2",clarabel:"0.11.0",click:"8.2.1",cligj:"0.7.2",clingo:"5.7.1",cloudpickle:"3.1.1",cmyt:"2.0.2",cobs:"1.2.1",colorspacious:"1.1.2",contourpy:"1.3.1",coolprop:"6.6.0",coverage:"7.6.12",cramjam:"2.10.0rc1",crc32c:"2.7.1",cryptography:"45.0.5","css-inline":"0.16.0",cssselect:"1.3.0","cvxpy-base":"1.6.3",cycler:"0.12.1",cysignals:"1.12.3",cytoolz:"1.0.1",decorator:"5.2.1",demes:"0.2.3",deprecation:"2.1.0",diskcache:"5.6.3",distlib:"0.3.9",distro:"1.9.0",docutils:"0.21.2",donfig:"0.8.1.post1",ewah_bool_utils:"1.2.2",exceptiongroup:"1.2.2",executing:"2.2.0",fastparquet:"2024.11.0",fiona:"1.9.5",fonttools:"4.56.0",freesasa:"2.2.1",frozenlist:"1.6.0",fsspec:"2025.3.2",future:"1.0.0",galpy:"1.10.2",gmpy2:"2.1.5",gsw:"3.6.19",h11:"0.14.0",h3:"4.2.2",h5py:"3.13.0",html5lib:"1.1",httpcore:"1.0.7",httpx:"0.28.1",idna:"3.10",igraph:"0.11.8",imageio:"2.37.0","imgui-bundle":"1.92.0",iminuit:"2.30.1",iniconfig:"2.1.0",inspice:"1.6.3.3",ipython:"9.0.2",jedi:"0.19.2",Jinja2:"3.1.6",jiter:"0.9.0",joblib:"1.4.2",jsonschema:"4.23.0",jsonschema_specifications:"2024.10.1",kiwisolver:"1.4.8","lakers-python":"0.5.0",lazy_loader:"0.4","lazy-object-proxy":"1.10.0",libcst:"1.6.0",lightgbm:"4.6.0",logbook:"1.8.0",lxml:"6.0.0",lz4:"4.4.4",MarkupSafe:"3.0.2",matplotlib:"3.8.4","matplotlib-inline":"0.1.7","memory-allocator":"0.1.4",micropip:"0.10.1",mmh3:"5.1.0","more-itertools":"10.6.0",mpmath:"1.3.0",msgpack:"1.1.1",msgspec:"0.19.0",msprime:"1.3.3",multidict:"6.6.3",munch:"4.0.0",mypy:"1.15.0",narwhals:"1.46.0",ndindex:"1.9.2",netcdf4:"1.7.2",networkx:"3.4.2",newick:"1.9.0",nh3:"0.2.21",nlopt:"2.9.1",nltk:"3.9.1",numcodecs:"0.13.1",numpy:"2.2.5",openai:"1.68.2","opencv-python":"4.11.0.86",optlang:"1.8.3",orjson:"3.10.16",packaging:"24.2",pandas:"2.3.1",parso:"0.8.4",patsy:"1.0.1",pcodec:"0.3.3",peewee:"3.17.9","pi-heif":"0.21.0",Pillow:"11.3.0","pillow-heif":"1.0.0",pkgconfig:"1.5.5",platformdirs:"4.3.6",pluggy:"1.5.0",ply:"3.11",pplpy:"0.8.10",primecountpy:"0.1.1",prompt_toolkit:"3.0.50",propcache:"0.3.0",protobuf:"6.31.1","pure-eval":"0.2.3",py:"1.11.0",pyclipper:"1.3.0.post6",pycparser:"2.22",pycryptodome:"3.21.0",pydantic:"2.10.6",pydantic_core:"2.27.2",pyerfa:"2.0.1.5",Pygments:"2.19.1",pyheif:"0.8.0",pyiceberg:"0.9.0",pyinstrument:"5.0.1",PyMuPDF:"1.26.3",pynacl:"1.5.0","pyodide-http":"0.2.2","pyodide-unix-timezones":"1.0.0",pyparsing:"3.2.1",pyrsistent:"0.20.0",pysam:"0.23.0",pyshp:"2.3.1",pytaglib:"3.0.1",pytest:"8.3.5","pytest-asyncio":"0.25.3","pytest-benchmark":"4.0.0",pytest_httpx:"0.30.0","python-dateutil":"2.9.0.post0","python-flint":"0.7.1","python-magic":"0.4.27","python-sat":"1.8.dev17","python-solvespace":"3.0.8",pytz:"2025.2",pywavelets:"1.8.0",pyxel:"1.9.10",pyxirr:"0.10.6",pyyaml:"6.0.2",rasterio:"1.4.3",rateslib:"2.0.1",rebound:"4.4.7",reboundx:"4.4.1",referencing:"0.36.2",regex:"2024.11.6",requests:"2.32.4",retrying:"1.3.4",rich:"13.9.4",river:"0.22.0",RobotRaconteur:"1.2.5","rpds-py":"0.23.1","ruamel.yaml":"0.18.10",rustworkx:"0.17.0a3","scikit-image":"0.25.2","scikit-learn":"1.7.0",scipy:"1.14.1",screed:"1.1.3",setuptools:"76.0.0",shapely:"2.0.7",simplejson:"3.20.1",sisl:"0.16.2",six:"1.17.0","smart-open":"7.1.0",sniffio:"1.3.1",sortedcontainers:"2.4.0",soundfile:"0.12.1",soupsieve:"2.6",sourmash:"4.8.14",soxr:"0.5.0.post1",sparseqr:"1.2",sqlalchemy:"2.0.39","stack-data":"0.6.3",statsmodels:"0.14.4",strictyaml:"1.7.3",svgwrite:"1.4.3",swiglpk:"5.0.12",sympy:"1.13.3",tblib:"3.0.0",termcolor:"2.5.0",texttable:"1.7.0",texture2ddecoder:"1.0.5",threadpoolctl:"3.5.0",tiktoken:"0.9.0",tomli:"2.2.1","tomli-w":"1.2.0",toolz:"1.0.0",tqdm:"4.67.1",traitlets:"5.14.3",traits:"7.0.2","tree-sitter":"0.23.2","tree-sitter-go":"0.23.3","tree-sitter-java":"0.23.4","tree-sitter-python":"0.23.4",tskit:"0.6.4","typing-extensions":"4.14.1",tzdata:"2025.2",ujson:"5.10.0",uncertainties:"3.2.2",unyt:"3.0.3",urllib3:"2.5.0","vega-datasets":"0.9.0",wcwidth:"0.2.13",webencodings:"0.5.1",wordcloud:"1.9.4",wrapt:"1.17.2",xarray:"2025.1.2",xgboost:"2.1.4",xlrd:"2.0.1",xxhash:"3.5.0",xyzservices:"2025.1.0",yarl:"1.18.3",yt:"4.4.0",zengl:"2.7.1",zfpy:"1.0.1",zstandard:"0.23.0"},"0.27.6":{affine:"2.4.0",aiohappyeyeballs:"2.6.1",aiohttp:"3.11.13",aiosignal:"1.3.2",altair:"5.5.0","annotated-types":"0.7.0",anyio:"4.9.0",apsw:"3.49.1.0","argon2-cffi":"23.1.0","argon2-cffi-bindings":"21.2.0",asciitree:"0.3.3",astropy:"7.0.1",astropy_iers_data:"0.2025.3.10.0.29.26",asttokens:"3.0.0","async-timeout":"5.0.1",atomicwrites:"1.4.1",attrs:"25.2.0","audioop-lts":"0.2.1",autograd:"1.7.0","awkward-cpp":"47",b2d:"0.7.4",bcrypt:"4.3.0",beautifulsoup4:"4.13.3",biopython:"1.85",bitarray:"3.6.0",bitstring:"4.3.1",bleach:"6.2.0",blosc2:"3.5.1",bokeh:"3.6.3","boost-histogram":"1.5.0",brotli:"1.1.0",cachetools:"5.5.2",casadi:"3.7.0","cbor-diag":"1.0.1",certifi:"2025.7.14",cffi:"1.17.1",cffi_example:"0.1",cftime:"1.6.4.post1","charset-normalizer":"3.4.2",clarabel:"0.11.0",click:"8.2.1",cligj:"0.7.2",clingo:"5.7.1",cloudpickle:"3.1.1",cmyt:"2.0.2",cobs:"1.2.1",colorspacious:"1.1.2",contourpy:"1.3.1",coolprop:"6.6.0",coverage:"7.6.12",cramjam:"2.10.0rc1",crc32c:"2.7.1",cryptography:"45.0.5","css-inline":"0.16.0",cssselect:"1.3.0","cvxpy-base":"1.6.3",cycler:"0.12.1",cysignals:"1.12.3",cytoolz:"1.0.1",decorator:"5.2.1",demes:"0.2.3",deprecation:"2.1.0",diskcache:"5.6.3",distlib:"0.3.9",distro:"1.9.0",docutils:"0.21.2",donfig:"0.8.1.post1",ewah_bool_utils:"1.2.2",exceptiongroup:"1.2.2",executing:"2.2.0",fastparquet:"2024.11.0",fiona:"1.9.5",fonttools:"4.56.0",freesasa:"2.2.1",frozenlist:"1.6.0",fsspec:"2025.3.2",future:"1.0.0",galpy:"1.10.2",gmpy2:"2.1.5",gsw:"3.6.19",h11:"0.14.0",h3:"4.2.2",h5py:"3.13.0",html5lib:"1.1",httpcore:"1.0.7",httpx:"0.28.1",idna:"3.10",igraph:"0.11.8",imageio:"2.37.0","imgui-bundle":"1.92.0",iminuit:"2.30.1",iniconfig:"2.1.0",inspice:"1.6.3.3",ipython:"9.0.2",jedi:"0.19.2",Jinja2:"3.1.6",jiter:"0.9.0",joblib:"1.4.2",jsonschema:"4.23.0",jsonschema_specifications:"2024.10.1",kiwisolver:"1.4.8","lakers-python":"0.5.0",lazy_loader:"0.4","lazy-object-proxy":"1.10.0",libcst:"1.6.0",lightgbm:"4.6.0",logbook:"1.8.0",lxml:"6.0.0",lz4:"4.4.4",MarkupSafe:"3.0.2",matplotlib:"3.8.4","matplotlib-inline":"0.1.7","memory-allocator":"0.1.4",micropip:"0.10.1",mmh3:"5.1.0","more-itertools":"10.6.0",mpmath:"1.3.0",msgpack:"1.1.1",msgspec:"0.19.0",msprime:"1.3.3",multidict:"6.6.3",munch:"4.0.0",mypy:"1.15.0",narwhals:"1.46.0",ndindex:"1.9.2",netcdf4:"1.7.2",networkx:"3.4.2",newick:"1.9.0",nh3:"0.2.21",nlopt:"2.9.1",nltk:"3.9.1",numcodecs:"0.13.1",numpy:"2.2.5",openai:"1.68.2","opencv-python":"4.11.0.86",optlang:"1.8.3",orjson:"3.10.16",packaging:"24.2",pandas:"2.3.1",parso:"0.8.4",patsy:"1.0.1",pcodec:"0.3.3",peewee:"3.17.9","pi-heif":"0.21.0",Pillow:"11.3.0","pillow-heif":"1.0.0",pkgconfig:"1.5.5",platformdirs:"4.3.6",pluggy:"1.5.0",ply:"3.11",pplpy:"0.8.10",primecountpy:"0.1.1",prompt_toolkit:"3.0.50",propcache:"0.3.0",protobuf:"6.31.1","pure-eval":"0.2.3",py:"1.11.0",pyclipper:"1.3.0.post6",pycparser:"2.22",pycryptodome:"3.21.0",pydantic:"2.10.6",pydantic_core:"2.27.2",pyerfa:"2.0.1.5",Pygments:"2.19.1",pyheif:"0.8.0",pyiceberg:"0.9.0",pyinstrument:"5.0.1",PyMuPDF:"1.26.3",pynacl:"1.5.0","pyodide-http":"0.2.2","pyodide-unix-timezones":"1.0.0",pyparsing:"3.2.1",pyrsistent:"0.20.0",pysam:"0.23.0",pyshp:"2.3.1",pytaglib:"3.0.1",pytest:"8.3.5","pytest-asyncio":"0.25.3","pytest-benchmark":"4.0.0",pytest_httpx:"0.30.0","python-dateutil":"2.9.0.post0","python-flint":"0.7.1","python-magic":"0.4.27","python-sat":"1.8.dev17","python-solvespace":"3.0.8",pytz:"2025.2",pywavelets:"1.8.0",pyxel:"1.9.10",pyxirr:"0.10.6",pyyaml:"6.0.2",rasterio:"1.4.3",rateslib:"2.0.1",rebound:"4.4.7",reboundx:"4.4.1",referencing:"0.36.2",regex:"2024.11.6",requests:"2.32.4",retrying:"1.3.4",rich:"13.9.4",river:"0.22.0",RobotRaconteur:"1.2.5","rpds-py":"0.23.1","ruamel.yaml":"0.18.10",rustworkx:"0.17.0a3","scikit-image":"0.25.2","scikit-learn":"1.7.0",scipy:"1.14.1",screed:"1.1.3",setuptools:"76.0.0",shapely:"2.0.7",simplejson:"3.20.1",sisl:"0.16.2",six:"1.17.0","smart-open":"7.1.0",sniffio:"1.3.1",sortedcontainers:"2.4.0",soundfile:"0.12.1",soupsieve:"2.6",sourmash:"4.8.14",soxr:"0.5.0.post1",sparseqr:"1.2",sqlalchemy:"2.0.39","stack-data":"0.6.3",statsmodels:"0.14.4",strictyaml:"1.7.3",svgwrite:"1.4.3",swiglpk:"5.0.12",sympy:"1.13.3",tblib:"3.0.0",termcolor:"2.5.0",texttable:"1.7.0",texture2ddecoder:"1.0.5",threadpoolctl:"3.5.0",tiktoken:"0.9.0",tomli:"2.2.1","tomli-w":"1.2.0",toolz:"1.0.0",tqdm:"4.67.1",traitlets:"5.14.3",traits:"7.0.2","tree-sitter":"0.23.2","tree-sitter-go":"0.23.3","tree-sitter-java":"0.23.4","tree-sitter-python":"0.23.4",tskit:"0.6.4","typing-extensions":"4.14.1",tzdata:"2025.2",ujson:"5.10.0",uncertainties:"3.2.2",unyt:"3.0.3",urllib3:"2.5.0","vega-datasets":"0.9.0",wcwidth:"0.2.13",webencodings:"0.5.1",wordcloud:"1.9.4",wrapt:"1.17.2",xarray:"2025.1.2",xgboost:"2.1.4",xlrd:"2.0.1",xxhash:"3.5.0",xyzservices:"2025.1.0",yarl:"1.18.3",yt:"4.4.0",zengl:"2.7.1",zfpy:"1.0.1",zstandard:"0.23.0"},"0.27.5":{affine:"2.4.0",aiohappyeyeballs:"2.6.1",aiohttp:"3.11.13",aiosignal:"1.3.2",altair:"5.5.0","annotated-types":"0.7.0",anyio:"4.9.0",apsw:"3.49.1.0","argon2-cffi":"23.1.0","argon2-cffi-bindings":"21.2.0",asciitree:"0.3.3",astropy:"7.0.1",astropy_iers_data:"0.2025.3.10.0.29.26",asttokens:"3.0.0","async-timeout":"5.0.1",atomicwrites:"1.4.1",attrs:"25.2.0","audioop-lts":"0.2.1",autograd:"1.7.0","awkward-cpp":"47",b2d:"0.7.4",bcrypt:"4.3.0",beautifulsoup4:"4.13.3",biopython:"1.85",bitarray:"3.6.0",bitstring:"4.3.1",bleach:"6.2.0",blosc2:"3.5.1",bokeh:"3.6.3","boost-histogram":"1.5.0",brotli:"1.1.0",cachetools:"5.5.2",casadi:"3.7.0","cbor-diag":"1.0.1",certifi:"2025.7.14",cffi:"1.17.1",cffi_example:"0.1",cftime:"1.6.4.post1","charset-normalizer":"3.4.2",clarabel:"0.11.0",click:"8.2.1",cligj:"0.7.2",clingo:"5.7.1",cloudpickle:"3.1.1",cmyt:"2.0.2",cobs:"1.2.1",colorspacious:"1.1.2",contourpy:"1.3.1",coolprop:"6.6.0",coverage:"7.6.12",cramjam:"2.10.0rc1",crc32c:"2.7.1",cryptography:"45.0.5","css-inline":"0.16.0",cssselect:"1.3.0","cvxpy-base":"1.6.3",cycler:"0.12.1",cysignals:"1.12.3",cytoolz:"1.0.1",decorator:"5.2.1",demes:"0.2.3",deprecation:"2.1.0",diskcache:"5.6.3",distlib:"0.3.9",distro:"1.9.0",docutils:"0.21.2",donfig:"0.8.1.post1",ewah_bool_utils:"1.2.2",exceptiongroup:"1.2.2",executing:"2.2.0",fastparquet:"2024.11.0",fiona:"1.9.5",fonttools:"4.56.0",freesasa:"2.2.1",frozenlist:"1.6.0",fsspec:"2025.3.2",future:"1.0.0",galpy:"1.10.2",gmpy2:"2.1.5",gsw:"3.6.19",h11:"0.14.0",h3:"4.2.2",h5py:"3.13.0",html5lib:"1.1",httpcore:"1.0.7",httpx:"0.28.1",idna:"3.10",igraph:"0.11.8",imageio:"2.37.0","imgui-bundle":"1.92.0",iminuit:"2.30.1",iniconfig:"2.1.0",inspice:"1.6.3.3",ipython:"9.0.2",jedi:"0.19.2",Jinja2:"3.1.6",jiter:"0.9.0",joblib:"1.4.2",jsonschema:"4.23.0",jsonschema_specifications:"2024.10.1",kiwisolver:"1.4.8","lakers-python":"0.5.0",lazy_loader:"0.4","lazy-object-proxy":"1.10.0",libcst:"1.6.0",lightgbm:"4.6.0",logbook:"1.8.0",lxml:"6.0.0",lz4:"4.4.4",MarkupSafe:"3.0.2",matplotlib:"3.8.4","matplotlib-inline":"0.1.7","memory-allocator":"0.1.4",micropip:"0.10.1",mmh3:"5.1.0","more-itertools":"10.6.0",mpmath:"1.3.0",msgpack:"1.1.1",msgspec:"0.19.0",msprime:"1.3.3",multidict:"6.6.3",munch:"4.0.0",mypy:"1.15.0",narwhals:"1.46.0",ndindex:"1.9.2",netcdf4:"1.7.2",networkx:"3.4.2",newick:"1.9.0",nh3:"0.2.21",nlopt:"2.9.1",nltk:"3.9.1",numcodecs:"0.13.1",numpy:"2.2.5",openai:"1.68.2","opencv-python":"4.11.0.86",optlang:"1.8.3",orjson:"3.10.16",packaging:"24.2",pandas:"2.3.1",parso:"0.8.4",patsy:"1.0.1",pcodec:"0.3.3",peewee:"3.17.9","pi-heif":"0.21.0",Pillow:"11.3.0","pillow-heif":"1.0.0",pkgconfig:"1.5.5",platformdirs:"4.3.6",pluggy:"1.5.0",ply:"3.11",pplpy:"0.8.10",primecountpy:"0.1.1",prompt_toolkit:"3.0.50",propcache:"0.3.0",protobuf:"6.31.1","pure-eval":"0.2.3",py:"1.11.0",pyclipper:"1.3.0.post6",pycparser:"2.22",pycryptodome:"3.21.0",pydantic:"2.10.6",pydantic_core:"2.27.2",pyerfa:"2.0.1.5",Pygments:"2.19.1",pyheif:"0.8.0",pyiceberg:"0.9.0",pyinstrument:"5.0.1",PyMuPDF:"1.26.3",pynacl:"1.5.0","pyodide-http":"0.2.2","pyodide-unix-timezones":"1.0.0",pyparsing:"3.2.1",pyrsistent:"0.20.0",pysam:"0.23.0",pyshp:"2.3.1",pytaglib:"3.0.1",pytest:"8.3.5","pytest-asyncio":"0.25.3","pytest-benchmark":"4.0.0",pytest_httpx:"0.30.0","python-dateutil":"2.9.0.post0","python-flint":"0.7.1","python-magic":"0.4.27","python-sat":"1.8.dev17","python-solvespace":"3.0.8",pytz:"2025.2",pywavelets:"1.8.0",pyxel:"1.9.10",pyxirr:"0.10.6",pyyaml:"6.0.2",rasterio:"1.4.3",rateslib:"2.0.1",rebound:"4.4.7",reboundx:"4.4.1",referencing:"0.36.2",regex:"2024.11.6",requests:"2.32.4",retrying:"1.3.4",rich:"13.9.4",river:"0.22.0",RobotRaconteur:"1.2.5","rpds-py":"0.23.1","ruamel.yaml":"0.18.10",rustworkx:"0.17.0a3","scikit-image":"0.25.2","scikit-learn":"1.7.0",scipy:"1.14.1",screed:"1.1.3",setuptools:"76.0.0",shapely:"2.0.7",simplejson:"3.20.1",sisl:"0.16.2",six:"1.17.0","smart-open":"7.1.0",sniffio:"1.3.1",sortedcontainers:"2.4.0",soundfile:"0.12.1",soupsieve:"2.6",sourmash:"4.8.14",soxr:"0.5.0.post1",sparseqr:"1.2",sqlalchemy:"2.0.39","stack-data":"0.6.3",statsmodels:"0.14.4",strictyaml:"1.7.3",svgwrite:"1.4.3",swiglpk:"5.0.12",sympy:"1.13.3",tblib:"3.0.0",termcolor:"2.5.0",texttable:"1.7.0",texture2ddecoder:"1.0.5",threadpoolctl:"3.5.0",tiktoken:"0.9.0",tomli:"2.2.1","tomli-w":"1.2.0",toolz:"1.0.0",tqdm:"4.67.1",traitlets:"5.14.3",traits:"7.0.2","tree-sitter":"0.23.2","tree-sitter-go":"0.23.3","tree-sitter-java":"0.23.4","tree-sitter-python":"0.23.4",tskit:"0.6.4","typing-extensions":"4.14.1",tzdata:"2025.2",ujson:"5.10.0",uncertainties:"3.2.2",unyt:"3.0.3",urllib3:"2.5.0","vega-datasets":"0.9.0",wcwidth:"0.2.13",webencodings:"0.5.1",wordcloud:"1.9.4",wrapt:"1.17.2",xarray:"2025.1.2",xgboost:"2.1.4",xlrd:"2.0.1",xxhash:"3.5.0",xyzservices:"2025.1.0",yarl:"1.18.3",yt:"4.4.0",zengl:"2.7.1",zfpy:"1.0.1",zstandard:"0.23.0"},"0.27.4":{affine:"2.4.0",aiohappyeyeballs:"2.6.1",aiohttp:"3.11.13",aiosignal:"1.3.2",altair:"5.5.0","annotated-types":"0.7.0",anyio:"4.9.0",apsw:"3.49.1.0","argon2-cffi":"23.1.0","argon2-cffi-bindings":"21.2.0",asciitree:"0.3.3",astropy:"7.0.1",astropy_iers_data:"0.2025.3.10.0.29.26",asttokens:"3.0.0","async-timeout":"5.0.1",atomicwrites:"1.4.1",attrs:"25.2.0","audioop-lts":"0.2.1",autograd:"1.7.0","awkward-cpp":"47",b2d:"0.7.4",bcrypt:"4.3.0",beautifulsoup4:"4.13.3",biopython:"1.85",bitarray:"3.6.0",bitstring:"4.3.1",bleach:"6.2.0",blosc2:"3.5.1",bokeh:"3.6.3","boost-histogram":"1.5.0",brotli:"1.1.0",cachetools:"5.5.2",casadi:"3.7.0","cbor-diag":"1.0.1",certifi:"2025.7.14",cffi:"1.17.1",cffi_example:"0.1",cftime:"1.6.4.post1","charset-normalizer":"3.4.2",clarabel:"0.11.0",click:"8.2.1",cligj:"0.7.2",clingo:"5.7.1",cloudpickle:"3.1.1",cmyt:"2.0.2",cobs:"1.2.1",colorspacious:"1.1.2",contourpy:"1.3.1",coolprop:"6.6.0",coverage:"7.6.12",cramjam:"2.10.0rc1",crc32c:"2.7.1",cryptography:"45.0.5","css-inline":"0.16.0",cssselect:"1.3.0","cvxpy-base":"1.6.3",cycler:"0.12.1",cysignals:"1.12.3",cytoolz:"1.0.1",decorator:"5.2.1",demes:"0.2.3",deprecation:"2.1.0",diskcache:"5.6.3",distlib:"0.3.9",distro:"1.9.0",docutils:"0.21.2",donfig:"0.8.1.post1",ewah_bool_utils:"1.2.2",exceptiongroup:"1.2.2",executing:"2.2.0",fastparquet:"2024.11.0",fiona:"1.9.5",fonttools:"4.56.0",freesasa:"2.2.1",frozenlist:"1.6.0",fsspec:"2025.3.2",future:"1.0.0",galpy:"1.10.2",gmpy2:"2.1.5",gsw:"3.6.19",h11:"0.14.0",h3:"4.2.2",h5py:"3.13.0",html5lib:"1.1",httpcore:"1.0.7",httpx:"0.28.1",idna:"3.10",igraph:"0.11.8",imageio:"2.37.0","imgui-bundle":"1.92.0",iminuit:"2.30.1",iniconfig:"2.1.0",inspice:"1.6.3.3",ipython:"9.0.2",jedi:"0.19.2",Jinja2:"3.1.6",jiter:"0.9.0",joblib:"1.4.2",jsonschema:"4.23.0",jsonschema_specifications:"2024.10.1",kiwisolver:"1.4.8","lakers-python":"0.5.0",lazy_loader:"0.4","lazy-object-proxy":"1.10.0",libcst:"1.6.0",lightgbm:"4.6.0",logbook:"1.8.0",lxml:"6.0.0",lz4:"4.4.4",MarkupSafe:"3.0.2",matplotlib:"3.8.4","matplotlib-inline":"0.1.7","memory-allocator":"0.1.4",micropip:"0.10.1",mmh3:"5.1.0","more-itertools":"10.6.0",mpmath:"1.3.0",msgpack:"1.1.1",msgspec:"0.19.0",msprime:"1.3.3",multidict:"6.6.3",munch:"4.0.0",mypy:"1.15.0",narwhals:"1.46.0",ndindex:"1.9.2",netcdf4:"1.7.2",networkx:"3.4.2",newick:"1.9.0",nh3:"0.2.21",nlopt:"2.9.1",nltk:"3.9.1",numcodecs:"0.13.1",numpy:"2.2.5",openai:"1.68.2","opencv-python":"4.11.0.86",optlang:"1.8.3",orjson:"3.10.16",packaging:"24.2",pandas:"2.3.1",parso:"0.8.4",patsy:"1.0.1",pcodec:"0.3.3",peewee:"3.17.9","pi-heif":"0.21.0",Pillow:"11.3.0","pillow-heif":"1.0.0",pkgconfig:"1.5.5",platformdirs:"4.3.6",pluggy:"1.5.0",ply:"3.11",pplpy:"0.8.10",primecountpy:"0.1.1",prompt_toolkit:"3.0.50",propcache:"0.3.0",protobuf:"6.31.1","pure-eval":"0.2.3",py:"1.11.0",pyclipper:"1.3.0.post6",pycparser:"2.22",pycryptodome:"3.21.0",pydantic:"2.10.6",pydantic_core:"2.27.2",pyerfa:"2.0.1.5",Pygments:"2.19.1",pyheif:"0.8.0",pyiceberg:"0.9.0",pyinstrument:"5.0.1",PyMuPDF:"1.26.3",pynacl:"1.5.0","pyodide-http":"0.2.2","pyodide-unix-timezones":"1.0.0",pyparsing:"3.2.1",pyrsistent:"0.20.0",pysam:"0.23.0",pyshp:"2.3.1",pytaglib:"3.0.1",pytest:"8.3.5","pytest-asyncio":"0.25.3","pytest-benchmark":"4.0.0",pytest_httpx:"0.30.0","python-dateutil":"2.9.0.post0","python-flint":"0.7.1","python-magic":"0.4.27","python-sat":"1.8.dev17","python-solvespace":"3.0.8",pytz:"2025.2",pywavelets:"1.8.0",pyxel:"1.9.10",pyxirr:"0.10.6",pyyaml:"6.0.2",rasterio:"1.4.3",rateslib:"2.0.1",rebound:"4.4.7",reboundx:"4.4.1",referencing:"0.36.2",regex:"2024.11.6",requests:"2.32.4",retrying:"1.3.4",rich:"13.9.4",river:"0.22.0",RobotRaconteur:"1.2.5","rpds-py":"0.23.1","ruamel.yaml":"0.18.10",rustworkx:"0.17.0a3","scikit-image":"0.25.2","scikit-learn":"1.7.0",scipy:"1.14.1",screed:"1.1.3",setuptools:"76.0.0",shapely:"2.0.7",simplejson:"3.20.1",sisl:"0.16.2",six:"1.17.0","smart-open":"7.1.0",sniffio:"1.3.1",sortedcontainers:"2.4.0",soundfile:"0.12.1",soupsieve:"2.6",sourmash:"4.8.14",soxr:"0.5.0.post1",sparseqr:"1.2",sqlalchemy:"2.0.39","stack-data":"0.6.3",statsmodels:"0.14.4",strictyaml:"1.7.3",svgwrite:"1.4.3",swiglpk:"5.0.12",sympy:"1.13.3",tblib:"3.0.0",termcolor:"2.5.0",texttable:"1.7.0",texture2ddecoder:"1.0.5",threadpoolctl:"3.5.0",tiktoken:"0.9.0",tomli:"2.2.1","tomli-w":"1.2.0",toolz:"1.0.0",tqdm:"4.67.1",traitlets:"5.14.3",traits:"7.0.2","tree-sitter":"0.23.2","tree-sitter-go":"0.23.3","tree-sitter-java":"0.23.4","tree-sitter-python":"0.23.4",tskit:"0.6.4","typing-extensions":"4.14.1",tzdata:"2025.2",ujson:"5.10.0",uncertainties:"3.2.2",unyt:"3.0.3",urllib3:"2.5.0","vega-datasets":"0.9.0",wcwidth:"0.2.13",webencodings:"0.5.1",wordcloud:"1.9.4",wrapt:"1.17.2",xarray:"2025.1.2",xgboost:"2.1.4",xlrd:"2.0.1",xxhash:"3.5.0",xyzservices:"2025.1.0",yarl:"1.18.3",yt:"4.4.0",zengl:"2.7.1",zfpy:"1.0.1",zstandard:"0.23.0"},"0.27.3":{affine:"2.4.0",aiohappyeyeballs:"2.6.1",aiohttp:"3.11.13",aiosignal:"1.3.2",altair:"5.5.0","annotated-types":"0.7.0",anyio:"4.9.0",apsw:"3.49.1.0","argon2-cffi":"23.1.0","argon2-cffi-bindings":"21.2.0",asciitree:"0.3.3",astropy:"7.0.1",astropy_iers_data:"0.2025.3.10.0.29.26",asttokens:"3.0.0","async-timeout":"5.0.1",atomicwrites:"1.4.1",attrs:"25.2.0","audioop-lts":"0.2.1",autograd:"1.7.0","awkward-cpp":"47",b2d:"0.7.4",bcrypt:"4.3.0",beautifulsoup4:"4.13.3",biopython:"1.85",bitarray:"3.6.0",bitstring:"4.3.1",bleach:"6.2.0",blosc2:"3.5.1",bokeh:"3.6.3","boost-histogram":"1.5.0",brotli:"1.1.0",cachetools:"5.5.2",casadi:"3.7.0","cbor-diag":"1.0.1",certifi:"2025.7.14",cffi:"1.17.1",cffi_example:"0.1",cftime:"1.6.4.post1","charset-normalizer":"3.4.2",clarabel:"0.11.0",click:"8.2.1",cligj:"0.7.2",clingo:"5.7.1",cloudpickle:"3.1.1",cmyt:"2.0.2",cobs:"1.2.1",colorspacious:"1.1.2",contourpy:"1.3.1",coolprop:"6.6.0",coverage:"7.6.12",cramjam:"2.10.0rc1",crc32c:"2.7.1",cryptography:"45.0.5","css-inline":"0.16.0",cssselect:"1.3.0","cvxpy-base":"1.6.3",cycler:"0.12.1",cysignals:"1.12.3",cytoolz:"1.0.1",decorator:"5.2.1",demes:"0.2.3",deprecation:"2.1.0",diskcache:"5.6.3",distlib:"0.3.9",distro:"1.9.0",docutils:"0.21.2",donfig:"0.8.1.post1",ewah_bool_utils:"1.2.2",exceptiongroup:"1.2.2",executing:"2.2.0",fastparquet:"2024.11.0",fiona:"1.9.5",fonttools:"4.56.0",freesasa:"2.2.1",frozenlist:"1.6.0",fsspec:"2025.3.2",future:"1.0.0",galpy:"1.10.2",gmpy2:"2.1.5",gsw:"3.6.19",h11:"0.14.0",h3:"4.2.2",h5py:"3.13.0",html5lib:"1.1",httpcore:"1.0.7",httpx:"0.28.1",idna:"3.10",igraph:"0.11.8",imageio:"2.37.0","imgui-bundle":"1.92.0",iminuit:"2.30.1",iniconfig:"2.1.0",inspice:"1.6.3.3",ipython:"9.0.2",jedi:"0.19.2",Jinja2:"3.1.6",jiter:"0.9.0",joblib:"1.4.2",jsonschema:"4.23.0",jsonschema_specifications:"2024.10.1",kiwisolver:"1.4.8","lakers-python":"0.5.0",lazy_loader:"0.4","lazy-object-proxy":"1.10.0",libcst:"1.6.0",lightgbm:"4.6.0",logbook:"1.8.0",lxml:"6.0.0",lz4:"4.4.4",MarkupSafe:"3.0.2",matplotlib:"3.8.4","matplotlib-inline":"0.1.7","memory-allocator":"0.1.4",micropip:"0.10.1",mmh3:"5.1.0","more-itertools":"10.6.0",mpmath:"1.3.0",msgpack:"1.1.1",msgspec:"0.19.0",msprime:"1.3.3",multidict:"6.6.3",munch:"4.0.0",mypy:"1.15.0",narwhals:"1.46.0",ndindex:"1.9.2",netcdf4:"1.7.2",networkx:"3.4.2",newick:"1.9.0",nh3:"0.2.21",nlopt:"2.9.1",nltk:"3.9.1",numcodecs:"0.13.1",numpy:"2.2.5",openai:"1.68.2","opencv-python":"4.11.0.86",optlang:"1.8.3",orjson:"3.10.16",packaging:"24.2",pandas:"2.3.1",parso:"0.8.4",patsy:"1.0.1",pcodec:"0.3.3",peewee:"3.17.9","pi-heif":"0.21.0",Pillow:"11.3.0","pillow-heif":"1.0.0",pkgconfig:"1.5.5",platformdirs:"4.3.6",pluggy:"1.5.0",ply:"3.11",pplpy:"0.8.10",primecountpy:"0.1.1",prompt_toolkit:"3.0.50",propcache:"0.3.0",protobuf:"6.31.1","pure-eval":"0.2.3",py:"1.11.0",pyclipper:"1.3.0.post6",pycparser:"2.22",pycryptodome:"3.21.0",pydantic:"2.10.6",pydantic_core:"2.27.2",pyerfa:"2.0.1.5",Pygments:"2.19.1",pyheif:"0.8.0",pyiceberg:"0.9.0",pyinstrument:"5.0.1",PyMuPDF:"1.26.3",pynacl:"1.5.0","pyodide-http":"0.2.2","pyodide-unix-timezones":"1.0.0",pyparsing:"3.2.1",pyrsistent:"0.20.0",pysam:"0.23.0",pyshp:"2.3.1",pytaglib:"3.0.1",pytest:"8.3.5","pytest-asyncio":"0.25.3","pytest-benchmark":"4.0.0",pytest_httpx:"0.30.0","python-dateutil":"2.9.0.post0","python-flint":"0.7.1","python-magic":"0.4.27","python-sat":"1.8.dev17","python-solvespace":"3.0.8",pytz:"2025.2",pywavelets:"1.8.0",pyxel:"1.9.10",pyxirr:"0.10.6",pyyaml:"6.0.2",rasterio:"1.4.3",rateslib:"2.0.1",rebound:"4.4.7",reboundx:"4.4.1",referencing:"0.36.2",regex:"2024.11.6",requests:"2.32.4",retrying:"1.3.4",rich:"13.9.4",river:"0.22.0",RobotRaconteur:"1.2.5","rpds-py":"0.23.1","ruamel.yaml":"0.18.10",rustworkx:"0.17.0a3","scikit-image":"0.25.2","scikit-learn":"1.7.0",scipy:"1.14.1",screed:"1.1.3",setuptools:"76.0.0",shapely:"2.0.7",simplejson:"3.20.1",sisl:"0.16.2",six:"1.17.0","smart-open":"7.1.0",sniffio:"1.3.1",sortedcontainers:"2.4.0",soundfile:"0.12.1",soupsieve:"2.6",sourmash:"4.8.14",soxr:"0.5.0.post1",sparseqr:"1.2",sqlalchemy:"2.0.39","stack-data":"0.6.3",statsmodels:"0.14.4",strictyaml:"1.7.3",svgwrite:"1.4.3",swiglpk:"5.0.12",sympy:"1.13.3",tblib:"3.0.0",termcolor:"2.5.0",texttable:"1.7.0",texture2ddecoder:"1.0.5",threadpoolctl:"3.5.0",tiktoken:"0.9.0",tomli:"2.2.1","tomli-w":"1.2.0",toolz:"1.0.0",tqdm:"4.67.1",traitlets:"5.14.3",traits:"7.0.2","tree-sitter":"0.23.2","tree-sitter-go":"0.23.3","tree-sitter-java":"0.23.4","tree-sitter-python":"0.23.4",tskit:"0.6.4","typing-extensions":"4.14.1",tzdata:"2025.2",ujson:"5.10.0",uncertainties:"3.2.2",unyt:"3.0.3",urllib3:"2.5.0","vega-datasets":"0.9.0",wcwidth:"0.2.13",webencodings:"0.5.1",wordcloud:"1.9.4",wrapt:"1.17.2",xarray:"2025.1.2",xgboost:"2.1.4",xlrd:"2.0.1",xxhash:"3.5.0",xyzservices:"2025.1.0",yarl:"1.18.3",yt:"4.4.0",zengl:"2.7.1",zfpy:"1.0.1",zstandard:"0.23.0"},"0.27.2":{affine:"2.4.0",aiohappyeyeballs:"2.6.1",aiohttp:"3.11.13",aiosignal:"1.3.2",altair:"5.5.0","annotated-types":"0.7.0",anyio:"4.9.0",apsw:"3.49.1.0","argon2-cffi":"23.1.0","argon2-cffi-bindings":"21.2.0",asciitree:"0.3.3",astropy:"7.0.1",astropy_iers_data:"0.2025.3.10.0.29.26",asttokens:"3.0.0","async-timeout":"5.0.1",atomicwrites:"1.4.1",attrs:"25.2.0","audioop-lts":"0.2.1",autograd:"1.7.0","awkward-cpp":"47",b2d:"0.7.4",bcrypt:"4.3.0",beautifulsoup4:"4.13.3",biopython:"1.85",bitarray:"3.6.0",bitstring:"4.3.1",bleach:"6.2.0",blosc2:"3.5.1",bokeh:"3.6.3","boost-histogram":"1.5.0",brotli:"1.1.0",cachetools:"5.5.2",casadi:"3.7.0","cbor-diag":"1.0.1",certifi:"2025.7.14",cffi:"1.17.1",cffi_example:"0.1",cftime:"1.6.4.post1","charset-normalizer":"3.4.2",clarabel:"0.11.0",click:"8.2.1",cligj:"0.7.2",clingo:"5.7.1",cloudpickle:"3.1.1",cmyt:"2.0.2",cobs:"1.2.1",colorspacious:"1.1.2",contourpy:"1.3.1",coolprop:"6.6.0",coverage:"7.6.12",cramjam:"2.10.0rc1",crc32c:"2.7.1",cryptography:"45.0.5","css-inline":"0.16.0",cssselect:"1.3.0","cvxpy-base":"1.6.3",cycler:"0.12.1",cysignals:"1.12.3",cytoolz:"1.0.1",decorator:"5.2.1",demes:"0.2.3",deprecation:"2.1.0",diskcache:"5.6.3",distlib:"0.3.9",distro:"1.9.0",docutils:"0.21.2",donfig:"0.8.1.post1",ewah_bool_utils:"1.2.2",exceptiongroup:"1.2.2",executing:"2.2.0",fastparquet:"2024.11.0",fiona:"1.9.5",fonttools:"4.56.0",freesasa:"2.2.1",frozenlist:"1.6.0",fsspec:"2025.3.2",future:"1.0.0",galpy:"1.10.2",gmpy2:"2.1.5",gsw:"3.6.19",h11:"0.14.0",h3:"4.2.2",h5py:"3.13.0",html5lib:"1.1",httpcore:"1.0.7",httpx:"0.28.1",idna:"3.10",igraph:"0.11.8",imageio:"2.37.0","imgui-bundle":"1.92.0",iminuit:"2.30.1",iniconfig:"2.1.0",inspice:"1.6.3.3",ipython:"9.0.2",jedi:"0.19.2",Jinja2:"3.1.6",jiter:"0.9.0",joblib:"1.4.2",jsonschema:"4.23.0",jsonschema_specifications:"2024.10.1",kiwisolver:"1.4.8","lakers-python":"0.5.0",lazy_loader:"0.4","lazy-object-proxy":"1.10.0",libcst:"1.6.0",lightgbm:"4.6.0",logbook:"1.8.0",lxml:"6.0.0",lz4:"4.4.4",MarkupSafe:"3.0.2",matplotlib:"3.8.4","matplotlib-inline":"0.1.7","memory-allocator":"0.1.4",micropip:"0.10.1",mmh3:"5.1.0","more-itertools":"10.6.0",mpmath:"1.3.0",msgpack:"1.1.1",msgspec:"0.19.0",msprime:"1.3.3",multidict:"6.6.3",munch:"4.0.0",mypy:"1.15.0",narwhals:"1.46.0",ndindex:"1.9.2",netcdf4:"1.7.2",networkx:"3.4.2",newick:"1.9.0",nh3:"0.2.21",nlopt:"2.9.1",nltk:"3.9.1",numcodecs:"0.13.1",numpy:"2.2.5",openai:"1.68.2","opencv-python":"4.11.0.86",optlang:"1.8.3",orjson:"3.10.16",packaging:"24.2",pandas:"2.3.1",parso:"0.8.4",patsy:"1.0.1",pcodec:"0.3.3",peewee:"3.17.9","pi-heif":"0.21.0",Pillow:"11.3.0","pillow-heif":"1.0.0",pkgconfig:"1.5.5",platformdirs:"4.3.6",pluggy:"1.5.0",ply:"3.11",pplpy:"0.8.10",primecountpy:"0.1.1",prompt_toolkit:"3.0.50",propcache:"0.3.0",protobuf:"6.31.1","pure-eval":"0.2.3",py:"1.11.0",pyclipper:"1.3.0.post6",pycparser:"2.22",pycryptodome:"3.21.0",pydantic:"2.10.6",pydantic_core:"2.27.2",pyerfa:"2.0.1.5",Pygments:"2.19.1",pyheif:"0.8.0",pyiceberg:"0.9.0",pyinstrument:"5.0.1",PyMuPDF:"1.26.3",pynacl:"1.5.0","pyodide-http":"0.2.2","pyodide-unix-timezones":"1.0.0",pyparsing:"3.2.1",pyrsistent:"0.20.0",pysam:"0.23.0",pyshp:"2.3.1",pytaglib:"3.0.1",pytest:"8.3.5","pytest-asyncio":"0.25.3","pytest-benchmark":"4.0.0",pytest_httpx:"0.30.0","python-dateutil":"2.9.0.post0","python-flint":"0.7.1","python-magic":"0.4.27","python-sat":"1.8.dev17","python-solvespace":"3.0.8",pytz:"2025.2",pywavelets:"1.8.0",pyxel:"1.9.10",pyxirr:"0.10.6",pyyaml:"6.0.2",rasterio:"1.4.3",rateslib:"2.0.1",rebound:"4.4.7",reboundx:"4.4.1",referencing:"0.36.2",regex:"2024.11.6",requests:"2.32.4",retrying:"1.3.4",rich:"13.9.4",river:"0.22.0",RobotRaconteur:"1.2.5","rpds-py":"0.23.1","ruamel.yaml":"0.18.10",rustworkx:"0.17.0a3","scikit-image":"0.25.2","scikit-learn":"1.7.0",scipy:"1.14.1",screed:"1.1.3",setuptools:"76.0.0",shapely:"2.0.7",simplejson:"3.20.1",sisl:"0.16.2",six:"1.17.0","smart-open":"7.1.0",sniffio:"1.3.1",sortedcontainers:"2.4.0",soundfile:"0.12.1",soupsieve:"2.6",sourmash:"4.8.14",soxr:"0.5.0.post1",sparseqr:"1.2",sqlalchemy:"2.0.39","stack-data":"0.6.3",statsmodels:"0.14.4",strictyaml:"1.7.3",svgwrite:"1.4.3",swiglpk:"5.0.12",sympy:"1.13.3",tblib:"3.0.0",termcolor:"2.5.0",texttable:"1.7.0",texture2ddecoder:"1.0.5",threadpoolctl:"3.5.0",tiktoken:"0.9.0",tomli:"2.2.1","tomli-w":"1.2.0",toolz:"1.0.0",tqdm:"4.67.1",traitlets:"5.14.3",traits:"7.0.2","tree-sitter":"0.23.2","tree-sitter-go":"0.23.3","tree-sitter-java":"0.23.4","tree-sitter-python":"0.23.4",tskit:"0.6.4","typing-extensions":"4.14.1",tzdata:"2025.2",ujson:"5.10.0",uncertainties:"3.2.2",unyt:"3.0.3",urllib3:"2.5.0","vega-datasets":"0.9.0",wcwidth:"0.2.13",webencodings:"0.5.1",wordcloud:"1.9.4",wrapt:"1.17.2",xarray:"2025.1.2",xgboost:"2.1.4",xlrd:"2.0.1",xxhash:"3.5.0",xyzservices:"2025.1.0",yarl:"1.18.3",yt:"4.4.0",zengl:"2.7.1",zfpy:"1.0.1",zstandard:"0.23.0"},"0.27.1":{affine:"2.4.0",aiohappyeyeballs:"2.6.1",aiohttp:"3.11.13",aiosignal:"1.3.2",altair:"5.5.0","annotated-types":"0.7.0",anyio:"4.9.0",apsw:"3.49.1.0","argon2-cffi":"23.1.0","argon2-cffi-bindings":"21.2.0",asciitree:"0.3.3",astropy:"7.0.1",astropy_iers_data:"0.2025.3.10.0.29.26",asttokens:"3.0.0","async-timeout":"5.0.1",atomicwrites:"1.4.1",attrs:"25.2.0","audioop-lts":"0.2.1",autograd:"1.7.0","awkward-cpp":"47",b2d:"0.7.4",bcrypt:"4.3.0",beautifulsoup4:"4.13.3",biopython:"1.85",bitarray:"3.6.0",bitstring:"4.3.1",bleach:"6.2.0",blosc2:"3.5.1",bokeh:"3.6.3","boost-histogram":"1.5.0",brotli:"1.1.0",cachetools:"5.5.2",casadi:"3.7.0","cbor-diag":"1.0.1",certifi:"2025.7.14",cffi:"1.17.1",cffi_example:"0.1",cftime:"1.6.4.post1","charset-normalizer":"3.4.2",clarabel:"0.11.0",click:"8.2.1",cligj:"0.7.2",clingo:"5.7.1",cloudpickle:"3.1.1",cmyt:"2.0.2",cobs:"1.2.1",colorspacious:"1.1.2",contourpy:"1.3.1",coolprop:"6.6.0",coverage:"7.6.12",cramjam:"2.10.0rc1",crc32c:"2.7.1",cryptography:"45.0.5","css-inline":"0.16.0",cssselect:"1.3.0","cvxpy-base":"1.6.3",cycler:"0.12.1",cysignals:"1.12.3",cytoolz:"1.0.1",decorator:"5.2.1",demes:"0.2.3",deprecation:"2.1.0",diskcache:"5.6.3",distlib:"0.3.9",distro:"1.9.0",docutils:"0.21.2",donfig:"0.8.1.post1",ewah_bool_utils:"1.2.2",exceptiongroup:"1.2.2",executing:"2.2.0",fastparquet:"2024.11.0",fiona:"1.9.5",fonttools:"4.56.0",freesasa:"2.2.1",frozenlist:"1.6.0",fsspec:"2025.3.2",future:"1.0.0",galpy:"1.10.2",gmpy2:"2.1.5",gsw:"3.6.19",h11:"0.14.0",h3:"4.2.2",h5py:"3.13.0",html5lib:"1.1",httpcore:"1.0.7",httpx:"0.28.1",idna:"3.10",igraph:"0.11.8",imageio:"2.37.0","imgui-bundle":"1.92.0",iminuit:"2.30.1",iniconfig:"2.1.0",inspice:"1.6.3.3",ipython:"9.0.2",jedi:"0.19.2",Jinja2:"3.1.6",jiter:"0.9.0",joblib:"1.4.2",jsonschema:"4.23.0",jsonschema_specifications:"2024.10.1",kiwisolver:"1.4.8","lakers-python":"0.5.0",lazy_loader:"0.4","lazy-object-proxy":"1.10.0",libcst:"1.6.0",lightgbm:"4.6.0",logbook:"1.8.0",lxml:"6.0.0",lz4:"4.4.4",MarkupSafe:"3.0.2",matplotlib:"3.8.4","matplotlib-inline":"0.1.7","memory-allocator":"0.1.4",micropip:"0.10.1",mmh3:"5.1.0","more-itertools":"10.6.0",mpmath:"1.3.0",msgpack:"1.1.1",msgspec:"0.19.0",msprime:"1.3.3",multidict:"6.6.3",munch:"4.0.0",mypy:"1.15.0",narwhals:"1.46.0",ndindex:"1.9.2",netcdf4:"1.7.2",networkx:"3.4.2",newick:"1.9.0",nh3:"0.2.21",nlopt:"2.9.1",nltk:"3.9.1",numcodecs:"0.13.1",numpy:"2.2.5",openai:"1.68.2","opencv-python":"4.11.0.86",optlang:"1.8.3",orjson:"3.10.16",packaging:"24.2",pandas:"2.3.1",parso:"0.8.4",patsy:"1.0.1",pcodec:"0.3.3",peewee:"3.17.9","pi-heif":"0.21.0",Pillow:"11.3.0","pillow-heif":"1.0.0",pkgconfig:"1.5.5",platformdirs:"4.3.6",pluggy:"1.5.0",ply:"3.11",pplpy:"0.8.10",primecountpy:"0.1.1",prompt_toolkit:"3.0.50",propcache:"0.3.0",protobuf:"6.31.1","pure-eval":"0.2.3",py:"1.11.0",pyclipper:"1.3.0.post6",pycparser:"2.22",pycryptodome:"3.21.0",pydantic:"2.10.6",pydantic_core:"2.27.2",pyerfa:"2.0.1.5",Pygments:"2.19.1",pyheif:"0.8.0",pyiceberg:"0.9.0",pyinstrument:"5.0.1",PyMuPDF:"1.26.3",pynacl:"1.5.0","pyodide-http":"0.2.2","pyodide-unix-timezones":"1.0.0",pyparsing:"3.2.1",pyrsistent:"0.20.0",pysam:"0.23.0",pyshp:"2.3.1",pytaglib:"3.0.1",pytest:"8.3.5","pytest-asyncio":"0.25.3","pytest-benchmark":"4.0.0",pytest_httpx:"0.30.0","python-dateutil":"2.9.0.post0","python-flint":"0.7.1","python-magic":"0.4.27","python-sat":"1.8.dev17","python-solvespace":"3.0.8",pytz:"2025.2",pywavelets:"1.8.0",pyxel:"1.9.10",pyxirr:"0.10.6",pyyaml:"6.0.2",rasterio:"1.4.3",rateslib:"2.0.1",rebound:"4.4.7",reboundx:"4.4.1",referencing:"0.36.2",regex:"2024.11.6",requests:"2.32.4",retrying:"1.3.4",rich:"13.9.4",river:"0.22.0",RobotRaconteur:"1.2.5","rpds-py":"0.23.1","ruamel.yaml":"0.18.10",rustworkx:"0.17.0a3","scikit-image":"0.25.2","scikit-learn":"1.7.0",scipy:"1.14.1",screed:"1.1.3",setuptools:"76.0.0",shapely:"2.0.7",simplejson:"3.20.1",sisl:"0.16.2",six:"1.17.0","smart-open":"7.1.0",sniffio:"1.3.1",sortedcontainers:"2.4.0",soundfile:"0.12.1",soupsieve:"2.6",sourmash:"4.8.14",soxr:"0.5.0.post1",sparseqr:"1.2",sqlalchemy:"2.0.39","stack-data":"0.6.3",statsmodels:"0.14.4",strictyaml:"1.7.3",svgwrite:"1.4.3",swiglpk:"5.0.12",sympy:"1.13.3",tblib:"3.0.0",termcolor:"2.5.0",texttable:"1.7.0",texture2ddecoder:"1.0.5",threadpoolctl:"3.5.0",tiktoken:"0.9.0",tomli:"2.2.1","tomli-w":"1.2.0",toolz:"1.0.0",tqdm:"4.67.1",traitlets:"5.14.3",traits:"7.0.2","tree-sitter":"0.23.2","tree-sitter-go":"0.23.3","tree-sitter-java":"0.23.4","tree-sitter-python":"0.23.4",tskit:"0.6.4","typing-extensions":"4.14.1",tzdata:"2025.2",ujson:"5.10.0",uncertainties:"3.2.2",unyt:"3.0.3",urllib3:"2.5.0","vega-datasets":"0.9.0",wcwidth:"0.2.13",webencodings:"0.5.1",wordcloud:"1.9.4",wrapt:"1.17.2",xarray:"2025.1.2",xgboost:"2.1.4",xlrd:"2.0.1",xxhash:"3.5.0",xyzservices:"2025.1.0",yarl:"1.18.3",yt:"4.4.0",zengl:"2.7.1",zfpy:"1.0.1",zstandard:"0.23.0"},"0.27.0":{affine:"2.4.0",aiohappyeyeballs:"2.6.1",aiohttp:"3.11.13",aiosignal:"1.3.2",altair:"5.5.0","annotated-types":"0.7.0",anyio:"4.9.0",apsw:"3.49.1.0","argon2-cffi":"23.1.0","argon2-cffi-bindings":"21.2.0",asciitree:"0.3.3",astropy:"7.0.1",astropy_iers_data:"0.2025.3.10.0.29.26",asttokens:"3.0.0","async-timeout":"5.0.1",atomicwrites:"1.4.1",attrs:"25.2.0","audioop-lts":"0.2.1",autograd:"1.7.0","awkward-cpp":"47",b2d:"0.7.4",bcrypt:"4.3.0",beautifulsoup4:"4.13.3",biopython:"1.85",bitarray:"3.6.0",bitstring:"4.3.1",bleach:"6.2.0",blosc2:"3.5.1",bokeh:"3.6.3","boost-histogram":"1.5.0",brotli:"1.1.0",cachetools:"5.5.2",casadi:"3.7.0","cbor-diag":"1.0.1",certifi:"2025.7.14",cffi:"1.17.1",cffi_example:"0.1",cftime:"1.6.4.post1","charset-normalizer":"3.4.2",clarabel:"0.11.0",click:"8.2.1",cligj:"0.7.2",clingo:"5.7.1",cloudpickle:"3.1.1",cmyt:"2.0.2",cobs:"1.2.1",colorspacious:"1.1.2",contourpy:"1.3.1",coolprop:"6.6.0",coverage:"7.6.12",cramjam:"2.10.0rc1",crc32c:"2.7.1",cryptography:"45.0.5","css-inline":"0.16.0",cssselect:"1.3.0","cvxpy-base":"1.6.3",cycler:"0.12.1",cysignals:"1.12.3",cytoolz:"1.0.1",decorator:"5.2.1",demes:"0.2.3",deprecation:"2.1.0",diskcache:"5.6.3",distlib:"0.3.9",distro:"1.9.0",docutils:"0.21.2",donfig:"0.8.1.post1",ewah_bool_utils:"1.2.2",exceptiongroup:"1.2.2",executing:"2.2.0",fastparquet:"2024.11.0",fiona:"1.9.5",fonttools:"4.56.0",freesasa:"2.2.1",frozenlist:"1.6.0",fsspec:"2025.3.2",future:"1.0.0",galpy:"1.10.2",gmpy2:"2.1.5",gsw:"3.6.19",h11:"0.14.0",h3:"4.2.2",h5py:"3.13.0",html5lib:"1.1",httpcore:"1.0.7",httpx:"0.28.1",idna:"3.10",igraph:"0.11.8",imageio:"2.37.0","imgui-bundle":"1.92.0",iminuit:"2.30.1",iniconfig:"2.1.0",inspice:"1.6.3.3",ipython:"9.0.2",jedi:"0.19.2",Jinja2:"3.1.6",jiter:"0.9.0",joblib:"1.4.2",jsonschema:"4.23.0",jsonschema_specifications:"2024.10.1",kiwisolver:"1.4.8","lakers-python":"0.5.0",lazy_loader:"0.4","lazy-object-proxy":"1.10.0",libcst:"1.6.0",lightgbm:"4.6.0",logbook:"1.8.0",lxml:"6.0.0",lz4:"4.4.4",MarkupSafe:"3.0.2",matplotlib:"3.8.4","matplotlib-inline":"0.1.7","memory-allocator":"0.1.4",micropip:"0.10.1",mmh3:"5.1.0","more-itertools":"10.6.0",mpmath:"1.3.0",msgpack:"1.1.1",msgspec:"0.19.0",msprime:"1.3.3",multidict:"6.6.3",munch:"4.0.0",mypy:"1.15.0",narwhals:"1.46.0",ndindex:"1.9.2",netcdf4:"1.7.2",networkx:"3.4.2",newick:"1.9.0",nh3:"0.2.21",nlopt:"2.9.1",nltk:"3.9.1",numcodecs:"0.13.1",numpy:"2.2.5",openai:"1.68.2","opencv-python":"4.11.0.86",optlang:"1.8.3",orjson:"3.10.16",packaging:"24.2",pandas:"2.3.1",parso:"0.8.4",patsy:"1.0.1",pcodec:"0.3.3",peewee:"3.17.9","pi-heif":"0.21.0",Pillow:"11.3.0","pillow-heif":"1.0.0",pkgconfig:"1.5.5",platformdirs:"4.3.6",pluggy:"1.5.0",ply:"3.11",pplpy:"0.8.10",primecountpy:"0.1.1",prompt_toolkit:"3.0.50",propcache:"0.3.0",protobuf:"6.31.1","pure-eval":"0.2.3",py:"1.11.0",pyclipper:"1.3.0.post6",pycparser:"2.22",pycryptodome:"3.21.0",pydantic:"2.10.6",pydantic_core:"2.27.2",pyerfa:"2.0.1.5",Pygments:"2.19.1",pyheif:"0.8.0",pyiceberg:"0.9.0",pyinstrument:"5.0.1",PyMuPDF:"1.26.3",pynacl:"1.5.0","pyodide-http":"0.2.2","pyodide-unix-timezones":"1.0.0",pyparsing:"3.2.1",pyrsistent:"0.20.0",pysam:"0.23.0",pyshp:"2.3.1",pytaglib:"3.0.1",pytest:"8.3.5","pytest-asyncio":"0.25.3","pytest-benchmark":"4.0.0",pytest_httpx:"0.30.0","python-dateutil":"2.9.0.post0","python-flint":"0.7.1","python-magic":"0.4.27","python-sat":"1.8.dev17","python-solvespace":"3.0.8",pytz:"2025.2",pywavelets:"1.8.0",pyxel:"1.9.10",pyxirr:"0.10.6",pyyaml:"6.0.2",rasterio:"1.4.3",rateslib:"2.0.1",rebound:"4.4.7",reboundx:"4.4.1",referencing:"0.36.2",regex:"2024.11.6",requests:"2.32.4",retrying:"1.3.4",rich:"13.9.4",river:"0.22.0",RobotRaconteur:"1.2.5","rpds-py":"0.23.1","ruamel.yaml":"0.18.10",rustworkx:"0.17.0a3","scikit-image":"0.25.2","scikit-learn":"1.7.0",scipy:"1.14.1",screed:"1.1.3",setuptools:"76.0.0",shapely:"2.0.7",simplejson:"3.20.1",sisl:"0.16.2",six:"1.17.0","smart-open":"7.1.0",sniffio:"1.3.1",sortedcontainers:"2.4.0",soundfile:"0.12.1",soupsieve:"2.6",sourmash:"4.8.14",soxr:"0.5.0.post1",sparseqr:"1.2",sqlalchemy:"2.0.39","stack-data":"0.6.3",statsmodels:"0.14.4",strictyaml:"1.7.3",svgwrite:"1.4.3",swiglpk:"5.0.12",sympy:"1.13.3",tblib:"3.0.0",termcolor:"2.5.0",texttable:"1.7.0",texture2ddecoder:"1.0.5",threadpoolctl:"3.5.0",tiktoken:"0.9.0",tomli:"2.2.1","tomli-w":"1.2.0",toolz:"1.0.0",tqdm:"4.67.1",traitlets:"5.14.3",traits:"7.0.2","tree-sitter":"0.23.2","tree-sitter-go":"0.23.3","tree-sitter-java":"0.23.4","tree-sitter-python":"0.23.4",tskit:"0.6.4","typing-extensions":"4.14.1",tzdata:"2025.2",ujson:"5.10.0",uncertainties:"3.2.2",unyt:"3.0.3",urllib3:"2.5.0","vega-datasets":"0.9.0",wcwidth:"0.2.13",webencodings:"0.5.1",wordcloud:"1.9.4",wrapt:"1.17.2",xarray:"2025.1.2",xgboost:"2.1.4",xlrd:"2.0.1",xxhash:"3.5.0",xyzservices:"2025.1.0",yarl:"1.18.3",yt:"4.4.0",zengl:"2.7.1",zfpy:"1.0.1",zstandard:"0.23.0"},"0.29.0":{affine:"2.4.0",aiohappyeyeballs:"2.6.1",aiohttp:"3.11.13",aiosignal:"1.3.2",altair:"5.5.0","annotated-types":"0.7.0",anyio:"4.9.0",apsw:"3.50.4.0","argon2-cffi":"23.1.0","argon2-cffi-bindings":"21.2.0",asciitree:"0.3.3",astropy:"7.0.1",astropy_iers_data:"0.2025.3.10.0.29.26",asttokens:"3.0.0","async-timeout":"5.0.1",atomicwrites:"1.4.1",attrs:"25.2.0","audioop-lts":"0.2.1",autograd:"1.7.0","awkward-cpp":"47",b2d:"0.7.4",bcrypt:"4.3.0",beautifulsoup4:"4.13.3","bilby.cython":"0.5.3",biopython:"1.85",bitarray:"3.7.1",bitstring:"4.3.1",bleach:"6.2.0",blosc2:"3.5.1",bokeh:"3.6.3","boost-histogram":"1.6.1",brotli:"1.1.0",cachetools:"5.5.2",casadi:"3.7.0","cbor-diag":"1.0.1",certifi:"2025.8.3",cffi:"1.17.1",cffi_example:"0.1",cftime:"1.6.4.post1","charset-normalizer":"3.4.3",clarabel:"0.11.0",click:"8.3.0",cligj:"0.7.2",clingo:"5.8.0",cloudpickle:"3.1.1",cmyt:"2.0.2",cobs:"1.2.1",colorspacious:"1.1.2",contourpy:"1.3.1",coolprop:"6.6.0",coverage:"7.6.12",cramjam:"2.10.0rc1",crc32c:"2.7.1",cryptography:"46.0.1","css-inline":"0.16.0",cssselect:"1.3.0","cvxpy-base":"1.6.3",cycler:"0.12.1",cysignals:"1.12.3",cytoolz:"1.0.1",decorator:"5.2.1",demes:"0.2.3",deprecation:"2.1.0",diskcache:"5.6.3",distlib:"0.3.9",distro:"1.9.0",docutils:"0.21.2",donfig:"0.8.1.post1",ewah_bool_utils:"1.2.2",exceptiongroup:"1.2.2",executing:"2.2.0",fastapi:"0.116.1",fastcan:"0.4.1",fastparquet:"2024.11.0",fiona:"1.9.5",fonttools:"4.56.0",freesasa:"2.2.1",frozenlist:"1.6.0",fsspec:"2025.3.2",future:"1.0.0",galpy:"1.10.2",gmpy2:"2.1.5",gsw:"3.6.19",h11:"0.14.0",h3:"4.2.2",h5py:"3.13.0",highspy:"1.11.0",html5lib:"1.1",httpcore:"1.0.7",httpx:"0.28.1",idna:"3.10",igraph:"0.11.8",imageio:"2.37.0","imgui-bundle":"1.92.4",iminuit:"2.30.1",iniconfig:"2.1.0",inspice:"1.6.4.1",ipython:"9.0.2",jedi:"0.19.2",Jinja2:"3.1.6",jiter:"0.9.0",joblib:"1.4.2",jsonpatch:"1.33",jsonpointer:"3.0.0",jsonschema:"4.23.0",jsonschema_specifications:"2024.10.1",kiwisolver:"1.4.8","lakers-python":"0.6.0",lazy_loader:"0.4","lazy-object-proxy":"1.10.0",libcst:"1.6.0",lightgbm:"4.6.0",logbook:"1.8.0",lxml:"6.0.2",lz4:"4.4.4",MarkupSafe:"3.0.2",matplotlib:"3.8.4","matplotlib-inline":"0.1.7","memory-allocator":"0.1.4",micropip:"0.11.0",mmh3:"5.1.0","more-itertools":"10.6.0",mpmath:"1.3.0",msgpack:"1.1.1",msgspec:"0.19.0",msprime:"1.3.3",multidict:"6.6.4",munch:"4.0.0",mypy:"1.15.0",narwhals:"1.46.0",ndindex:"1.9.2",netcdf4:"1.7.2",networkx:"3.4.2",newick:"1.9.0",nh3:"0.2.21",nlopt:"2.9.1",nltk:"3.9.1",numcodecs:"0.13.1",numpy:"2.2.5",openai:"1.68.2","opencv-python":"4.11.0.86",optlang:"1.8.3",orjson:"3.10.16",packaging:"24.2",pandas:"2.3.2",parso:"0.8.4",patsy:"1.0.1",pcodec:"0.3.3",peewee:"3.17.9","pi-heif":"0.21.0",Pillow:"11.3.0","pillow-heif":"1.1.0",pkgconfig:"1.5.5",platformdirs:"4.3.6",pluggy:"1.5.0",ply:"3.11",pplpy:"0.8.10",primecountpy:"0.1.1",prompt_toolkit:"3.0.50",propcache:"0.3.0",protobuf:"6.31.1","pure-eval":"0.2.3",py:"1.11.0",pyclipper:"1.3.0.post6",pycparser:"2.22",pycryptodome:"3.21.0",pydantic:"2.10.6",pydantic_core:"2.27.2",pyerfa:"2.0.1.5","pygame-ce":"2.5.6.dev2",Pygments:"2.19.1",pyheif:"0.8.0",pyiceberg:"0.9.0",pyinstrument:"5.0.1","pylimer-tools":"0.3.11",PyMuPDF:"1.26.3",pynacl:"1.5.0","pyodide-http":"0.2.2","pyodide-unix-timezones":"1.0.0",pyparsing:"3.2.1",pyrsistent:"0.20.0",pysam:"0.23.0",pyshp:"2.3.1",pytaglib:"3.0.1",pytest:"8.3.5","pytest-asyncio":"0.25.3","pytest-benchmark":"4.0.0",pytest_httpx:"0.30.0","python-calamine":"0.5.3","python-dateutil":"2.9.0.post0","python-flint":"0.8.0","python-magic":"0.4.27","python-sat":"1.8.dev23","python-solvespace":"3.0.8",pytz:"2025.2",pywavelets:"1.8.0",pyxel:"1.9.10",pyxirr:"0.10.6",pyyaml:"6.0.2",rasterio:"1.4.3",rateslib:"2.1.1",rebound:"4.4.7",reboundx:"4.4.1",referencing:"0.36.2",regex:"2024.11.6",requests:"2.32.4",retrying:"1.3.4",rich:"13.9.4",river:"0.22.0",RobotRaconteur:"1.2.6","rpds-py":"0.27.0","ruamel.yaml":"0.18.10",rustworkx:"0.17.1","scikit-image":"0.25.2","scikit-learn":"1.7.0",scipy:"1.14.1",screed:"1.1.3",setuptools:"76.0.0",shapely:"2.0.7",simplejson:"3.20.1",sisl:"0.16.2",six:"1.17.0","smart-open":"7.1.0",sniffio:"1.3.1",sortedcontainers:"2.4.0",soundfile:"0.12.1",soupsieve:"2.6",sourmash:"4.8.14",soxr:"0.5.0.post1",sparseqr:"1.2",sqlalchemy:"2.0.39","stack-data":"0.6.3",starlette:"0.47.2",statsmodels:"0.14.4",strictyaml:"1.7.3",svgwrite:"1.4.3",swiglpk:"5.0.12",sympy:"1.13.3",tblib:"3.0.0",termcolor:"2.5.0",texttable:"1.7.0",texture2ddecoder:"1.0.5",threadpoolctl:"3.5.0",tiktoken:"0.9.0",tomli:"2.2.1","tomli-w":"1.2.0",toolz:"1.0.0",tqdm:"4.67.1",traitlets:"5.14.3",traits:"7.0.2","tree-sitter":"0.23.2","tree-sitter-go":"0.23.3","tree-sitter-java":"0.23.4","tree-sitter-python":"0.23.4",tskit:"0.6.4","typing-extensions":"4.15.0",tzdata:"2025.2",ujson:"5.11.0",uncertainties:"3.2.2",unyt:"3.0.3",urllib3:"2.5.0","vega-datasets":"0.9.0",vrplib:"2.0.1",wcwidth:"0.2.13",webencodings:"0.5.1",wordcloud:"1.9.4",wrapt:"1.17.2",xarray:"2025.9.0",xgboost:"2.1.4",xlrd:"2.0.1",xxhash:"3.5.0",xyzservices:"2025.1.0",yarl:"1.18.3",yt:"4.4.0",zengl:"2.7.1",zfpy:"1.0.1",zstandard:"0.23.0"}},ms=Object.freeze({__proto__:null,default:ds});const us="ruby-wasm-wasi",fs=us.replace(/\W+/g,"_");var hs={type:us,experimental:!0,module:(t="2.7.2")=>`https://cdn.jsdelivr.net/npm/@ruby/3.2-wasm-wasi@${t}/dist/browser/+esm`,async engine({DefaultRubyVM:t},e,s,r){s=s.replace(/\/browser\/\+esm$/,"/ruby.wasm");const o=await c(s).arrayBuffer(),n=await WebAssembly.compile(o),{vm:i}=await t(n);return e.files&&await at(this,i,e.files,r),e.fetch&&await ot(this,i,e.fetch,r),e.js_modules&&await lt(e.js_modules,r),i},registerJSModule(t,e,s){e=e.replace(/\W+/g,"__");const r=`__module_${fs}_${e}`;globalThis[r]=s,this.run(t,`require "js";$${e}=JS.global[:${r}]`),delete globalThis[r]},run:(t,e,...s)=>t.eval(x(e),...s),runAsync:(t,e,...s)=>t.evalAsync(x(e),...s),async runEvent(t,e,s){if(/^xworker\.(on\w+)$/.test(e)){const{$1:e}=RegExp,r=`__module_${fs}_event`;globalThis[r]=s,this.run(t,`require "js";$xworker.call("${e}",JS.global[:${r}])`),delete globalThis[r]}else{const r=this.run(t,`method(:${e})`);await r.call(e,t.wrap(s))}},transform:(t,e)=>e,writeFile:()=>{throw new Error(`writeFile is not supported in ${us}`)}};var gs={type:"wasmoon",module:(t="1.16.0")=>`https://cdn.jsdelivr.net/npm/wasmoon@${t}/+esm`,async engine({LuaFactory:t,LuaLibraries:e},s,o,n){const{stderr:i,stdout:a,get:l}=r(),c=await l((new t).createEngine());return c.global.getTable(e.Base,t=>{c.global.setField(t,"print",a),c.global.setField(t,"printErr",i)}),s.files&&await at(this,c,s.files,n),s.fetch&&await ot(this,c,s.fetch,n),s.js_modules&&await lt(s.js_modules,n),c},registerJSModule:(t,e,s)=>{t.global.set(e,s)},run:(t,e,...r)=>{try{return t.doStringSync(x(e),...r)}catch(e){s.get(t).stderr(e)}},runAsync:async(t,e,...r)=>{try{return await t.doString(x(e),...r)}catch(e){s.get(t).stderr(e)}},runEvent:async(t,e,r)=>{const[o,...n]=e.split(".");let i,a=t.global.get(o);for(const t of n)[i,a]=[a,a[t]];try{await a.call(i,r)}catch(e){s.get(t).stderr(e)}},transform:(t,e)=>e,writeFile:({cmodule:{module:{FS:t}}},e,s)=>((t,e,s)=>(tt(t,Q(e)),e=et(t,e),t.writeFile(e,new Uint8Array(s),{canOwn:!0})))(t,e,s)};const bs=new WeakMap,_s=new FinalizationRegistry(t=>t()),ws=async(t,e)=>{const{shelter:s,destroy:r,io:o}=bs.get(t),{output:n,result:i}=await s.captureR(x(e));for(const{type:t,data:e}of n)o[t](e);return _s.register(i,r),i};var ks={type:"webr",experimental:!0,module:(t="0.5.6")=>`https://cdn.jsdelivr.net/npm/webr@${t}/dist/webr.mjs`,async engine(t,e,o,n){const{get:i}=r(),a=new t.WebR;await i(a.init().then(()=>a));const l=await new a.Shelter;return bs.set(a,{module:t,shelter:l,destroy:l.destroy.bind(l),io:s.get(a)}),e.files&&await at(this,a,e.files,n),e.fetch&&await ot(this,a,e.fetch,n),e.js_modules&&await lt(e.js_modules,n),a},registerJSModule(t,e){console.warn(`Experimental interpreter: module ${e} is not supported (yet)`)},run:ws,runAsync:ws,async runEvent(t,e,s){await t.evalRVoid(`${e}(event)`,{env:{event:{type:[s.type]}}})},transform:(t,e)=>e,writeFile:()=>{}};const As=new Map,xs=new Map,vs=[],js=[],Es=new Proxy(new Map,{get(t,e){if(!t.has(e)){const[s,...r]=e.split("@"),o=As.get(s),n=/^(?:\.?\.?\/|[a-z0-9-]+:\/\/)/i.test(r)?r.join("@"):o.module(...r);t.set(e,{url:n,module:import(n),engine:o.engine.bind(o)})}const{url:s,module:r,engine:o}=t.get(e);return(t,n)=>r.then(r=>(xs.set(e,t),o(r,t,s,n)))}}),Bs=t=>{for(const e of[].concat(t.type))As.set(e,t),vs.push(`script[type="${e}"]`),js.push(`${e}-`)};for(const t of[Fe,Ye,cs,ds,hs,gs,ks])Bs(t);const zs=(t,e=document)=>[...e.querySelectorAll(t)],Cs=(t,e=document)=>{const s=(new XPathEvaluator).createExpression(t).evaluate(e,XPathResult.ORDERED_NODE_SNAPSHOT_TYPE),r=[];for(let t=0,{snapshotLength:e}=s;t<e;t++)r.push(s.snapshotItem(t));return r},Rs=new Proxy(new Map,{get:(t,s)=>(t.has(s)||t.set(s,e()),t.get(s))}),Ss=new Set(["__dict__","constructor","get","has","includes","next","set","then"]),Ps=new Proxy(Object.freeze({}),{get:(t,e)=>"string"!=typeof e||Ss.has(e)?void 0:Rs[e].promise.then(t=>t.sync)});let Ds=0;const $s=Ds++,Ms=Ds++,Fs=Ds++,Ts=Ds++,qs=Ds++,Os=Ds++,Ls=Ds++,Ns=Ds++,Is=Ds++,Hs=Ds++,Ws=Ds++,Us=Ds++,Js=Ds++,Gs=Ds++,Ks=Ds++;Ds++;const Vs=Ds++,Ys=Ds++,Xs=(t,e)=>[e?t:Ut(new Uint8Array(t)),t.resizable?t.maxByteLength:0],Zs=/\[('|")?(.+?)\1\]/g,Qs=(t,e)=>t?.[e];var tr=(t,e)=>e.replace(Zs,".$2").split(".").reduce(Qs,t),er=(t,...e)=>e.map(sr,t);function sr(t){return"string"==typeof t?tr(this,t):this[t]}const rr=globalThis.Node||class{},{apply:or,construct:nr,defineProperty:ir,deleteProperty:ar,get:lr,getOwnPropertyDescriptor:cr,getPrototypeOf:pr,has:yr,isExtensible:dr,ownKeys:mr,set:ur,setPrototypeOf:fr}=Reflect;var hr=({reflect:t=Vt,transform:e=Vt,remote:s=Vt,module:r=t=>import(t),buffer:o=!1,timeout:n=-1}=Yt)=>{const i=(e,r=new Map)=>{if(!Jt(e))return e;const[o,n]=e;switch(o){case 2:{if(null===n)return globalThis;let t=r.get(e);if(!t){t=n,r.set(e,n);for(const t in n)n[t]=i(n[t],r)}return t}case 4:return r.get(e)||(r.set(e,n),l(n,r));case 8:{let e=g.get(n),r=e?.deref();return r||(e&&_.unregister(e),r=function(...e){s.apply(this,e);for(let t=0,s=e.length;t<s;t++)e[t]=a(e[t]);return t(Os,n,a(this),e).then(i)},e=new WeakRef(r),g.set(n,e),_.register(r,n,e)),r}case 16:return Nt(n);default:return 1&o?m(n):n}},a=t=>{switch(typeof t){case"object":{if(null===t)break;if(t===globalThis)return b;const s=e(t);return k&&w.has(s)||s instanceof Tt?Kt(0,s):Gt(s)?Kt(68,((t,e)=>{const{BYTES_PER_ELEMENT:s,byteOffset:r,buffer:o,length:n}=t;return[ue(t),Xs(o,e),r,n!==(o.byteLength-r)/s?n:0]})(s,o)):s instanceof ArrayBuffer?Kt(64,Xs(s,o)):Kt(Jt(s)?5:3,d(s))}case"function":return Kt(9,d(e(t)));case"symbol":return Kt(16,It(t));case"bigint":return Kt(32,t.toString())}return t},l=Xt(i),c=Xt(Zt),p=Xt(Qt),{clear:y,id:d,ref:m,unref:u}=((t=0,e=new Map,s=new Map)=>({clear:()=>{e.clear(),s.clear()},id:r=>{let o=s.get(r);if(void 0===o){for(;e.has(o=t++););e.set(o,r),s.set(r,o)}return o},ref:t=>e.get(t),unref:t=>(s.delete(e.get(t)),e.delete(t))}))(),f=/^(?:[0-9]+|length)$/,h=-1<n,g=new Map,b=Kt(2,null),_=new FinalizationRegistry(e=>{g.delete(e),t($s,e)});let w,k=!1;return{assign:Wt,gather:er,query:tr,direct:t=>(k||(k=!0,w=new WeakSet),w.add(t),t),evaluate:(t,...e)=>or(t,null,e),reflect(t,e,...s){const o=null===e,n=o?globalThis:m(e);switch(t){case Hs:{const t=Zt(s[0]),e=o&&"import"===t,i=e?r:lr(n,t),l=a(i);if(!h)return l;let c,p=e,y=n;if(!e&&!(y instanceof rr||Jt(y)&&"string"==typeof t&&f.test(t)))if(t in n){for(;!(c=cr(y,t))&&(y=pr(y),y););p=!!c&&"value"in c}else p=!0;return[p,l]}case Os:{const t=new Map;return a(or(n,i(s[0],t),l(s[1],t)))}case Vs:return ur(n,Zt(s[0]),i(s[1]));case Js:return yr(n,Zt(s[0]));case Ks:return p(mr(n),g);case Ls:return a(nr(n,l(s[0])));case Ws:{const t=cr(n,Zt(s[0]));if(t)for(const e in t)t[e]=a(t[e]);return t}case Ns:return ir(n,Zt(s[0]),i(s[1]));case Is:return ar(n,Zt(s[0]));case Us:return a(pr(n));case Ys:return fr(n,i(s[0]));case Ms:return void Wt(n,i(s[0]));case Fs:{const t=i(s[0]),e=Function(`return(${t}).apply(null,arguments)`);return a(or(e,null,l(s[1])))}case Ts:for(let t,e=0,r=(s=c(s[0],g)).length;e<r;e++)t=s[e],s[e]=a("string"==typeof t?tr(n,t):n[t]);return s;case qs:return a(tr(n,s[0]));case $s:return u(e);case Gs:return dr(n)}},terminate(){for(const t of g.values())_.unregister(t);g.clear(),y()}}};const{addEventListener:gr}=EventTarget.prototype,br=new WeakMap;Reflect.defineProperty(EventTarget.prototype,"addEventListener",{value(t,e,s){const r=s?.invoke;if(r){let e=br.get(this);e||br.set(this,e=new Map),e.set(t,[].concat(r)),delete s.invoke}return gr.apply(this,arguments)}});const _r="a27fb202",wr="="+_r,kr="-"+_r;var Ar=(t=t=>t)=>{const s=new Map;let r=0;return[()=>{let o;do{o=t(r++)}while(s.has(o));const n=e();return s.set(o,n),[o,n.promise]},(t,e,r)=>{const o=s.get(t);s.delete(t),r?o?.reject(r):o?.resolve(e)}]};const xr=[],vr=new WeakSet,jr=(...t)=>(vr.add(t),t);let{SharedArrayBuffer:Er}=globalThis,Br=!0;try{new Er(4,{maxByteLength:8})}catch(t){Br=!1,Er=class extends ArrayBuffer{get growable(){return super.resizable}grow(t){super.resize(t)}}}const{assign:zr,create:Cr}=Object,Rr=`coincident-${Br?crypto.randomUUID():Math.random().toString(36).substring(2)}`,Sr={byteOffset:2*Int32Array.BYTES_PER_ELEMENT},Pr=(t,e,s)=>{const r="then"!==e;return r&&(t[e]=s),r},Dr=t=>{t.stopImmediatePropagation(),t.preventDefault()},$r=(t,e=-1)=>t?.reflected_ffi_timeout??e,{defineProperty:Mr}=Object,[Fr,Tr]=Ar();let[qr,Or]=Fr(),Lr=()=>Or,{Atomics:Nr,MessageChannel:Ir,Worker:Hr}=globalThis;if(Br)Tr(qr);else{const t=new Map,s=(t,...e)=>{t.addEventListener(...e)};if("importScripts"in globalThis){s(globalThis,"message",t=>{Dr(t),Tr(qr,t.data)},{once:!0});const{wait:e}=Nr,{parse:r}=JSON,o=e=>{const s=new XMLHttpRequest;try{if(s.timeout=3e3,s.open("POST",`${a}?sabayon`,!1),s.setRequestHeader("Content-Type","application/json"),s.send(`["${i}",${t.get(e)}]`),200===s.status)return s;throw s}catch{return s.abort(),o(e)}},n=(t,e)=>(t.set(r(e.responseText)),"ok");let i,a;Nr={wait:(s,...r)=>t.has(s)?n(s,o(s)):e(s,...r)},Or=Or.then(t=>{[i,a]=t})}else{const r=[Rr,Math.random()].join("-").replace(/\W/g,"-"),o=new BroadcastChannel("dc78209b-186c-4f83-80e9-406becb7d9f3");o.onmessage=async e=>{const[s,n,i]=e.data;if(n===r)for(const[e,[r,n]]of t)if(r===i){await n.promise;let t=e.length;for(;t--&&!e[t];);o.postMessage([s,e.slice(0,t+1)]);break}};const n=s=>{const[r,o,n]=s.data;t.set(o,[r,e()]),Mr(s,"data",{value:n})};Ir=class extends Ir{constructor(){super(),s(this.port1,"message",n)}},Hr=class extends Hr{constructor(t,e){super(t,e),super.postMessage([r,a])}};const{notify:i}=Nr;Nr={notify(e,...s){const r=t.get(e);return r?(r[1].resolve(),0):i(e,...s)}};let a="",l=null;const c=(t,e)=>{let r,o=!0;t.getRegistration(a).then(s=>s??t.register(a,e)).then(function e(n){const{controller:i}=t;if(o=o&&!!i,r=n.installing||n.waiting||n.active,"activated"===r.state){if(o){if(i.scriptURL===a)return Tr(qr);n.unregister()}location.reload()}else s(r,"statechange",()=>e(n),{once:!0})})};Lr=(t,e)=>{if(!l){const s=new URL(t,location.href);a=`${s.protocol}//${s.host}${s.pathname}`,c(navigator.serviceWorker,e),l=Or}return l}}}const Wr="InstallTrigger"in globalThis?Rr:"",Ur=t=>t,Jr=t=>t===wr?"main":t===kr?"worker":t;class Gr extends Event{#i;constructor(t){super("message"),this.#i=t}get data(){return this.#i}}var Kr=t=>{const e=t?.transform,s=$r(t),r=(t?.encoder||ve)(Sr),o=!1!==t?.transfer;return{Worker:class extends Hr{constructor(t,n){const i=Br?"":n?.serviceWorker||"",{notify:a}=i?Nr:Atomics,{port1:l,port2:c}=new(i?Ir:MessageChannel),[p,y]=Ar(Ur),d=new Map,m=Cr(null);i&&Lr(i);let u="";super(t,zr({type:"module"},n)),this.proxy=new Proxy(m,{get:(t,s)=>{if("then"===s)return;let r=d.get(s);return r||d.set(s,r=(...t)=>{const r=((t,e)=>{let s=xr;return t&&vr.has(e.at(-1)||xr)&&(s=e.pop(),vr.delete(s)),s})(o,t),[n,i]=p();return l.postMessage([n,s,e?t.map(e):t],r),((t,e)=>{if(u){const s=setTimeout(console.warn,3e3,`💀🔒 - is proxy.${Jr(u)}() awaiting proxy.${Jr(e)}() ?`);t=t.then(t=>(clearTimeout(s),t),t=>(clearTimeout(s),Promise.reject(t)))}return t})(i,s)}),r},set:Pr}),Wr&&(Br||i)&&super.addEventListener("message",t=>{const{data:e}=t;e?.ID===Wr&&(Dr(t),l.dispatchEvent(new Gr(e.data)))}),super.postMessage([Wr,i,$r(n,s)],[c]),l.addEventListener("message",async({data:t})=>{const s=t[0],o=typeof s;if("number"===o)y.apply(null,t);else if(u=t[1],await(async(t,e,s)=>{try{const r=await e[t[1]].apply(null,t[2]);t[1]=s?s(r):r,t[2]=null}catch(e){t[2]=e}})(t,m,e),u="","string"===o)l.postMessage(t);else{const e=t[2]||t[1];s[1]=void 0===e?0:r(e,s.buffer),s[0]=1,a(s,0)}}),l.start()}},native:Br,transfer:jr}};const{url:Vr}=import.meta,Yr=/import\((['"])([^)]+?\.js)\1\)/g,Xr=(t,e,s)=>`import(${e}${new URL(s,Vr).href}${e})`,Zr=Symbol.for("polyscript.js_modules");let Qr;const{Worker:to}=(t=>{const e=t?.import,s=$r(t),r=Kr({...t,encoder:t?.encoder||ve});class o extends r.Worker{#a;constructor(t,r){const{proxy:o}=super(t,r),n=hr({...r,buffer:!0,reflect:o[kr],timeout:$r(r,s),remote(t){t instanceof Event&&(t=>{const{currentTarget:e,target:s,type:r}=t,o=br.get(e||s)?.get(r);if(o)for(const e of o)t[e]()})(t)},module:r?.import||e||(t=>import(new URL(t,location).href))});this.#a=n.terminate,this.ffi={assign:n.assign,direct:n.direct,evaluate:n.evaluate,gather:n.gather,query:n.query},o[wr]=n.reflect}terminate(){this.#a(),super.terminate()}}return{...r,Worker:o}})({transfer:!1,transform:t=>(Qr||(Qr=globalThis[Zr]?.get("-T-")))?.(t)??t});const{parse:eo}=JSON,so=(t,e="./config.txt")=>{let s=typeof t;return"string"===s&&/\.(json|toml|txt)$/.test(t)?s=RegExp.$1:t=e,[D(t),s]},ro=(t,e,s={})=>{const[r,o]=so(t,e);return"json"===o?s=c(r).json():"toml"===o?s=c(r).text().then(qe):"string"===o?s=oo(t):"object"===o&&t?s=t:"txt"===o&&"string"==typeof s&&(s=oo(s)),[s,t=r]},oo=t=>{try{return eo(t)}catch(e){return qe(t)}},no=(t,e,s,r={})=>(e&&([r,e]=ro(e,s,r)),P(r).then(s=>Es[t](s,e))),io=(t,e="")=>`${t}@${e}`.replace(/@$/,"");function ao(t=this){return String(t).replace(/^(async\s*)?(\bfunction\b)?(.*?)\(/,(t,e,s,r)=>r&&!s?`${e||""}function ${r}(`:t)}const lo="BeforeRun",co="AfterRun",po=[`code${lo}`,`code${lo}Async`,`code${co}`,`code${co}Async`],yo=["onWorker","onReady",`on${lo}`,`on${lo}Async`,`on${co}`,`on${co}Async`];function mo(t,e){const{run:s,runAsync:r}=As.get(this.type);return{...t,run:s.bind(this,e),runAsync:r.bind(this,e)}}const uo=(t,e,s,r,o,n)=>{if(o||n){const i=mo.bind(t,e),a=r?"runAsync":"run",l=t[a];t[a]=r?async function(t,e,...r){o&&await o.call(this,i(t),s);const a=await l.call(this,t,e,...r);return n&&await n.call(this,i(t),s),a}:function(t,e,...r){o&&o.call(this,i(t),s);const a=l.call(this,t,e,...r);return n&&n.call(this,i(t),s),a}}};let fo=class{constructor(t,e={}){const{main:s,worker:r}=e;this.interpreter=t,this.onWorker=s?.onWorker;for(const t of yo.slice(1))this[t]=r?.[t];for(const t of po)this[t]=r?.[t]}toJSON(){const t={};for(const e of yo.slice(1))this[e]&&(t[e]=ao(this[e]));for(const e of po)this[e]&&(t[e]=x(this[e]()));return t}};var ho=(...t)=>function(s,r){if(t.length){const[e,s]=t;(r=E({},r||{type:e,version:s})).type||(r.type=e)}const[o]=so(r.config,r.configURL),n=((...t)=>new to(URL.createObjectURL(new Blob(["/*@*/"+'const{assign:t}=Object,e="entries",s="readonly",o="readwrite",i={durability:"default",prefix:"IDBMap"},r=({target:{result:t}})=>t;class a extends EventTarget{#t;#e;#s;async#o(s,o){const i=(await this.#t).transaction(e,o,this.#e);return new Promise((o,r)=>t(s(i.objectStore(e)),{onsuccess:o,onerror:r}))}constructor(s,{durability:o=i.durability,prefix:a=i.prefix}=i){super(),this.#s=a,this.#e={durability:o},this.#t=new Promise((o,i)=>{t(indexedDB.open(`${this.#s}/${s}`),{onupgradeneeded({target:{result:t,transaction:s}}){t.objectStoreNames.length||t.createObjectStore(e),s.oncomplete=()=>o(t)},onsuccess(t){o(r(t))},onerror(t){i(t),this.dispatchEvent(t)}})}).then(t=>{const e=this.dispatchEvent.bind(this);for(const s in t)s.startsWith("on")&&(t[s]=e);return t})}dispatchEvent(e){const{type:s,message:o,isTrusted:i}=e;return super.dispatchEvent(i?t(new Event(s),{message:o}):e)}async close(){(await this.#t).close()}get size(){return this.#o(t=>t.count(),s).then(r)}async clear(){await this.#o(t=>t.clear(),o)}async delete(t){await this.#o(e=>e.delete(t),o)}async entries(){const t=await this.keys();return Promise.all(t.map(t=>this.get(t).then(e=>[t,e])))}async forEach(t,e=this){for(const[s,o]of await this.entries())await t.call(e,o,s,this)}async get(t){return await this.#o(e=>e.get(t),s).then(r)}async has(t){return void 0!==await this.#o(e=>e.getKey(t),s).then(r)}async keys(){return await this.#o(t=>t.getAllKeys(),s).then(r)}async set(t,e){return await this.#o(s=>s.put(e,t),o),this}async values(){const t=await this.keys();return Promise.all(t.map(t=>this.get(t)))}get[Symbol.toStringTag](){return this.#s}}class n extends Map{#i;#r;constructor(...t){super(),this.#i=new a(...t),this.#r=this.#i.entries().then(t=>{for(const[e,s]of t)super.set(e,s)})}async close(){await this.#r,await this.#i.close()}async sync(){await this.#r}clear(){return this.#r=this.#r.then(()=>this.#i.clear()),super.clear()}delete(t){return this.#r=this.#r.then(()=>this.#i.delete(t)),super.delete(t)}set(t,e){return this.#r=this.#r.then(()=>this.#i.set(t,e)),super.set(t,e)}}const p="a27fb202",c="="+p,l="-"+p;let y=0;const d=y++,u=y++,m=y++,h=y++,g=y++,f=y++,b=y++,w=y++,k=y++,x=y++,_=y++,v=y++,j=y++,z=y++,A=y++,P=y++,E=y++,S=y++,$=y++,M=y++,R=y++,q=y++,F=y++,B=y++,D=y++,T=y++;const L=globalThis.ImageData||class{},O=new TextDecoder,C=new TextEncoder,I=new Map(Reflect.ownKeys(Symbol).map(t=>[Symbol[t],`@${String(t)}`])),J=t=>{switch(t[0]){case"@":return Symbol[t.slice(1)];case"#":return Symbol.for(t.slice(1));case"!":return Symbol(t.slice(1));default:return Symbol()}},U=t=>I.get(t)||((t,e)=>void 0===e?"?":void 0===Symbol.keyFor(t)?`!${e}`:`#${e}`)(t,t.description),H=Object.defineProperty,W=Object.assign,N=Array.isArray,K=ArrayBuffer.isView,G=(t,e)=>[t,e],V=t=>t,X=[],Y={},Z=function(){},Q=t=>(e,s=new Map)=>{for(let o=0,i=e.length;o<i;o++)e[o]=t(e[o],s);return e},tt=([t,e])=>0===t?e:J(e),et=t=>"string"==typeof t?G(0,t):G(16,U(t)),st=(t,e)=>{for(let s=t.push,o=0,i=e.length;o<i;o+=32767)s.apply(t,e.subarray(o,o+32767))},ot=new ArrayBuffer(8),it=new DataView(ot),rt=new Uint8Array(ot),at=(t,e,s)=>(t.set(e,s),s),nt=t=>{rt[0]=t[lt++],rt[1]=t[lt++],rt[2]=t[lt++],rt[3]=t[lt++],rt[4]=t[lt++],rt[5]=t[lt++],rt[6]=t[lt++],rt[7]=t[lt++]},pt=t=>(rt[0]=t[lt++],rt[1]=t[lt++],rt[2]=t[lt++],rt[3]=t[lt++],it.getUint32(0,!0)),ct=(t,e)=>{switch(t[lt++]){case g:return nt(t),it.getFloat64(0,!0);case f:return t[lt++];case R:{const s=at(e,lt-1,{});for(let o=0,i=pt(t);o<i;o++)s[ct(t,e)]=ct(t,e);return s}case P:{const s=at(e,lt-1,[]);for(let o=0,i=pt(t);o<i;o++)s.push(ct(t,e));return s}case B:{const s=lt-1,o=ct(t,e);return at(e,s,new globalThis[o](ct(t,e)))}case E:{const s=lt-1,o=pt(t);return at(e,s,t.slice(lt,lt+=o).buffer)}case z:{const s=lt-1,o=pt(t);return at(e,s,O.decode(t.slice(lt,lt+=o)))}case S:return at(e,lt-1,new Date(ct(t,e)));case M:{const s=at(e,lt-1,new Map);for(let o=0,i=pt(t);o<i;o++)s.set(ct(t,e),ct(t,e));return s}case F:{const s=at(e,lt-1,new Set);for(let o=0,i=pt(t);o<i;o++)s.add(ct(t,e));return s}case $:{const s=ct(t,e),o=ct(t,e),i=ct(t,e),r=new(globalThis[s]||Error)(o);return at(e,lt-1,H(r,"stack",{value:i}))}case D:{const s=ct(t,e),o=ct(t,e),i=ct(t,e),r=ct(t,e),a=ct(t,e);return at(e,lt-1,new L(s,o,i,{colorSpace:r,pixelFormat:a}))}case q:{const s=ct(t,e),o=ct(t,e);return at(e,lt-1,new RegExp(s,o))}case d:return!1;case u:return!0;case b:return NaN;case w:return 1/0;case k:return-1/0;case x:return 0;case _:return-0;case h:return null;case v:return nt(t),it.getBigInt64(0,!0);case j:return nt(t),it.getBigUint64(0,!0);case A:return J(ct(t,e));case T:return e.get(pt(t));default:return}};let lt=0;const yt=t=>(lt=0,ct(t,new Map)),dt=({byteOffset:t=0}={})=>(e,s)=>yt(new Uint8Array(s,t,e));let ut=0;const mt=ut++,ht=ut++,gt=ut++,ft=ut++,bt=ut++,wt=ut++,kt=ut++,xt=ut++,_t=ut++,vt=ut++,jt=ut++,zt=ut++,At=ut++,Pt=ut++,Et=ut++;ut++;const St=ut++,$t=ut++,{getPrototypeOf:Mt}=Object,{construct:Rt}=Reflect,{toStringTag:qt}=Symbol,{toString:Ft}=Y,Bt=(t,e=Ft.call(t).slice(8,-1))=>e in globalThis?e:Bt(Mt(t)||Y),Dt=(t,e=t[qt])=>e in globalThis?e:Dt(Rt(Mt(t.constructor),[0])),Tt=(t,e)=>new ArrayBuffer(t,{maxByteLength:e}),Lt=([t,e],s)=>{const o=s?t.byteLength:t.length;if(s){if(e){const s=Tt(o,e);new Uint8Array(s).set(new Uint8Array(t)),t=s}}else{const s=e?Tt(o,e):new ArrayBuffer(o);new Uint8Array(s).set(t),t=s}return t};const Ot=/\\[(\'|")?(.+?)\\1\\]/g,Ct=(t,e)=>t?.[e];var It=t=>{const e=[],s=t=>{const s=e.splice(t);for(;t<s.length;)s[t++].delete(s[t++])};return class o extends Map{static keys=Symbol();static proto=Symbol();drop(t,e){return t!==o.proto&&super.delete(o.keys),super.delete(t),e}set(o,i){return((o,i)=>{e.push(o,i)<3&&setTimeout(s,t,0)})(super.set(o,i),o),i}}},Jt=({reflect:t=V,transform:e=V,released:s=V,buffer:o=!1,timeout:i=-1}=Y)=>{const r=Q(tt),a=Q(et),n=t=>{if(!N(t))return t;const[e,s]=t;if(1&e)return l(e,s);switch(e){case 2:return A;case 0:return s;case 16:return J(s);case 32:return BigInt(s);case 68:return(([t,e,s,o],i)=>{const r=Lt(e,i),a=globalThis[t];return o?new a(r,s,o):new a(r,s)})(s,o);case 64:return Lt(s,o)}},p=(t,s=new Map)=>{switch(typeof t){case"object":{if(null===t)break;if(t===globalThis)return z;if(j in t)return f;let o=s.get(t);if(!o){const i=e(t);if(b||!g.has(i)){if(N(i)){const e=[];o=G(4,e),s.set(t,o);for(let t=0,o=i.length;t<o;t++)e[t]=p(i[t],s);return o}if(!(K(i)||i instanceof ArrayBuffer||"Object"!==Bt(i))){const e={};o=G(2,e),s.set(t,o);for(const t in i)e[t]=p(i[t],s);return o}}o=G(0,i),s.set(t,o)}return o}case"function":{if(j in t)return f;let o=s.get(t);if(!o){const i=e(t);o=G(8,k(i)),s.set(t,o)}return o}case"symbol":return G(16,U(t))}return t},c=Q(p),l=(t,e)=>{let s=v.get(e),o=s?.deref();return o||(s&&P.unregister(s),o=9===t?new Proxy(Z,new h(t,e)):new Proxy(3===t?Y:X,new m(t,e)),s=new WeakRef(o),v.set(e,s),P.register(o,e,s)),o},y=t=>{switch(typeof t){case"object":if(null===t)break;case"function":return j in t}return!1},d=-1<i,u=d?It(i):Map;class m{constructor(t,e){this.t=t,this.v=e,d&&(this.$=new u)}get(e,s){if(d&&this.$.has(s))return this.$.get(s);const o=t(vt,this.v,et(s));return d?o[0]?this.$.set(s,n(o[1])):n(o[1]):n(o)}set(e,s,o){const i=t(St,this.v,et(s),p(o));return d?this.$.drop(s,i):i}has(e,s){return s===j?(f=[this.t,this.v],!0):t(At,this.v,et(s))}_oK(){return r(t(Et,this.v),v)}ownKeys(t){return d?this.$.has(u.keys)?this.$.get(u.keys):this.$.set(u.keys,this._oK()):this._oK()}getOwnPropertyDescriptor(e,s){const o=n(t(jt,this.v,et(s)));if(o)for(const t in o)o[t]=n(o[t]);return o}defineProperty(e,s,o){const i=t(xt,this.v,et(s),p(o));return d?this.$.drop(s,i):i}deleteProperty(e,s){const o=t(_t,this.v,et(s));return d?this.$.drop(s,o):o}_gPO(){return n(t(zt,this.v))}getPrototypeOf(t){return d?this.$.has(u.proto)?this.$.get(u.proto):this.$.set(u.proto,this._gPO()):this._gPO()}setPrototypeOf(e,s){const o=t($t,this.v,p(s));return d?this.$.drop(u.proto,o):o}isExtensible(e){return t(Pt,this.v)}preventExtensions(t){return!1}}class h extends m{construct(e,s){return n(t(kt,this.v,c(s)))}apply(e,s,o){const i=new Map;return n(t(wt,this.v,p(s,i),c(o,i)))}get(t,e){switch(e){case"apply":return(e,s)=>this.apply(t,e,s);case"call":return(e,...s)=>this.apply(t,e,s);default:return super.get(t,e)}}}let g,f,b=!0;const{apply:w}=Reflect,{id:k,ref:x,unref:_}=((t=0,e=new Map,s=new Map)=>({clear:()=>{e.clear(),s.clear()},id:o=>{let i=s.get(o);if(void 0===i){for(;e.has(i=t++););e.set(i,o),s.set(o,i)}return i},ref:t=>e.get(t),unref:t=>(s.delete(e.get(t)),e.delete(t))}))(),v=new Map,j=Symbol("reflected-ffi"),z=G(2,null),A=new Proxy(Y,new m(2,null)),P=new FinalizationRegistry(e=>{v.delete(e),t(mt,e)});return{global:A,isProxy:y,assign(e,...s){const o=y(e),i=W(o?{}:e,...s);return o&&t(ht,f[1],p(i)),e},direct:t=>(b&&(b=!1,g=new WeakSet),g.add(t),t),evaluate:(e,...s)=>n(t(gt,null,function(t=this){return String(t).replace(/^(async\\s*)?(\\bfunction\\b)?(.*?)\\(/,(t,e,s,o)=>o&&!s?`${e||""}function ${o}(`:t)}(e),c(s))),gather(e,...s){const o=y(e),i=o?n:t=>e[t];o&&(s=t(ft,f[1],a(s,v)));for(let t=0;t<s.length;t++)s[t]=i(s[t]);return s},query:(e,s)=>y(e)?n(t(bt,f[1],s)):((t,e)=>e.replace(Ot,".$2").split(".").reduce(Ct,t))(e,s),reflect:async(t,e,...o)=>{switch(t){case wt:{const[t,s]=o;for(let t=0,e=s.length;t<e;t++)s[t]=n(s[t]);return p(await w(x(e),n(t),s))}case mt:return s(x(e)),_(e)}}}};var Ut=Promise.withResolvers.bind(Promise),Ht=(t=t=>t)=>{const e=new Map;let s=0;return[()=>{let o;do{o=t(s++)}while(e.has(o));const i=Ut();return e.set(o,i),[o,i.promise]},(t,s,o)=>{const i=e.get(t);e.delete(t),o?i?.reject(o):i?.resolve(s)}]};const Wt=[],Nt=new WeakSet,Kt=(...t)=>(Nt.add(t),t);let{SharedArrayBuffer:Gt}=globalThis,Vt=!0;try{new Gt(4,{maxByteLength:8})}catch(t){Vt=!1,Gt=class extends ArrayBuffer{get growable(){return super.resizable}grow(t){super.resize(t)}}}const{create:Xt}=Object,Yt=`coincident-${Vt?crypto.randomUUID():Math.random().toString(36).substring(2)}`,Zt=2*Int32Array.BYTES_PER_ELEMENT,Qt={byteOffset:Zt},te=(t,e,s)=>{const o="then"!==e;return o&&(t[e]=s),o},ee=t=>{t.stopImmediatePropagation(),t.preventDefault()},[se,oe]=Ht();let[ie,re]=se(),ae=()=>re,ne=()=>{},{Atomics:pe,MessagePort:ce,SharedArrayBuffer:le,postMessage:ye}=globalThis;if(Vt)oe(ie);else{le=Gt;const t=new Map,e=(t,...e)=>{t.addEventListener(...e)};if("importScripts"in globalThis){ne=e=>{t.set(e,null)};const s=e=>{const s=e[0],o=y++;return t.set(s,o),[o,s,e]},o=ye;ye=function(t,e){if(l){const i={ID:t.ID,data:s(t.data)};o(i,e)}else re.then(()=>this.postMessage(t,e))},ce=class extends ce{postMessage(t,e){l?super.postMessage(s(t),e):re.then(()=>this.postMessage(t,e))}},e(globalThis,"message",t=>{ee(t),oe(ie,t.data)},{once:!0});const{wait:i}=pe,{parse:r}=JSON,a=e=>{const s=new XMLHttpRequest;try{if(s.timeout=3e3,s.open("POST",`${c}?sabayon`,!1),s.setRequestHeader("Content-Type","application/json"),s.send(`["${p}",${t.get(e)}]`),200===s.status)return s;throw s}catch{return s.abort(),a(e)}},n=(t,e)=>(t.set(r(e.responseText)),"ok");pe={wait:(e,...s)=>t.has(e)?n(e,a(e)):i(e,...s)};let p,c,l=!1,y=Math.random();re=re.then(t=>{[p,c]=t,l=!0})}else{const s=[Yt,Math.random()].join("-").replace(/\\W/g,"-"),o=new BroadcastChannel("dc78209b-186c-4f83-80e9-406becb7d9f3");o.onmessage=async e=>{const[i,r,a]=e.data;if(r===s)for(const[e,[s,r]]of t)if(s===a){await r.promise;let t=e.length;for(;t--&&!e[t];);o.postMessage([i,e.slice(0,t+1)]);break}};const{notify:i}=pe;pe={notify(e,...s){const o=t.get(e);return o?(o[1].resolve(),0):i(e,...s)}};let r="",a=null;const n=(t,s)=>{let o,i=!0;t.getRegistration(r).then(e=>e??t.register(r,s)).then(function s(a){const{controller:n}=t;if(i=i&&!!n,o=a.installing||a.waiting||a.active,"activated"===o.state){if(i){if(n.scriptURL===r)return oe(ie);a.unregister()}location.reload()}else e(o,"statechange",()=>s(a),{once:!0})})};ae=(t,e)=>{if(!a){const s=new URL(t,location.href);r=`${s.protocol}//${s.host}${s.pathname}`,n(navigator.serviceWorker,e),a=re}return a}}}const{setPrototypeOf:de}=Reflect;let{postMessage:ue}=globalThis;const me=Ut(),he=ce.prototype;addEventListener("message",t=>{ee(t);const[e,s,o]=t.data,[i]=t.ports;s&&(de(i,he),e&&(ue=ye)),me.resolve([e,s,o,i])},{once:!0});var ge=async t=>{const[e,s,o,i]=await ae().then(()=>me.promise),r=!!e,a=Vt||!!s,n=t?.transform,p=(t?.decoder||dt)(Qt),c=!1!==t?.transfer;let l,y,d,u;if(a){const e=new(s?le:SharedArrayBuffer)(t?.minByteLength||32767,{maxByteLength:t?.maxByteLength||16777216});l=new Int32Array(e),s?(({wait:u}=pe),ne(l)):(({load:y,pause:d,wait:u}=Atomics),d&&(u=(t,e)=>{do{d()}while(y(t,e)<1)}))}const[m,h]=Ht(String),g=new Map,f=Xt(null),b=new Proxy(f,{get(t,s){if("then"===s)return;let o=g.get(s);return o||g.set(s,o=(...t)=>{const o=((t,e)=>{let s=Wt;return t&&Nt.has(e.at(-1)||Wt)&&(s=e.pop(),Nt.delete(s)),s})(c,t),y=[l,s,n?t.map(n):t];if(a){r?ue({ID:e,data:y},o):i.postMessage(y,o),u(l,0),l[0]=0;const t=l[1]?p(l[1],l.buffer):void 0;if(t instanceof Error)throw t;return t}{const[t,e]=m();return y[0]=t,i.postMessage(y,o),e}}),o},set:te});return i.addEventListener("message",async({data:t})=>{"string"==typeof t[0]?h.apply(null,t):(await(async(t,e,s)=>{try{const o=await e[t[1]].apply(null,t[2]);t[1]=s?s(o):o,t[2]=null}catch(e){t[2]=e}})(t,f,n),i.postMessage(t))}),i.start(),{native:Vt,proxy:b,ffi_timeout:o,sync:a,transfer:Kt}};const fe={object(...t){return this.string(function(t){for(var e=t[0],s=1,o=arguments.length;s<o;s++)e+=arguments[s]+t[s];return e}(...t))},string(t){for(const e of t.split(/[\\r\\n]+/))if(e.trim().length){/^(\\s+)/.test(e)&&(t=t.replace(new RegExp("^"+RegExp.$1,"gm"),""));break}return t}},be=new WeakMap,we=t=>{const e=t||console,s={buffered:xe,stderr:(e.stderr||console.error).bind(e),stdout:(e.stdout||console.log).bind(e)};return{stderr:(...t)=>s.stderr(...t),stdout:(...t)=>s.stdout(...t),async get(t){const e=await t;return be.set(e,s),e}}},ke=new TextDecoder,xe=(t,e=10)=>{const s=[];return o=>{if(o instanceof Uint8Array)for(const i of o)i===e?t(ke.decode(new Uint8Array(s.splice(0)))):s.push(i);else t(o)}},_e=(t,...e)=>fe[typeof t](t,...e),{isArray:ve}=Array,{assign:je,create:ze,defineProperty:Ae,entries:Pe}=Object,{all:Ee,resolve:Se}=new Proxy(Promise,{get:(t,e)=>t[e].bind(t)}),$e=(t,e=location.href)=>new URL(t,e.replace(/^blob:/,"")).href;function Me(t){return t.startsWith(".")?$e(t,this):t}const Re=(t,e,s,o=!1,i=CustomEvent)=>{t.dispatchEvent(new i(`${e}:${s}`,{bubbles:!0,detail:{worker:o}}))},qe=t=>Function(`\'use strict\';return (${t})`)(),Fe=t=>t.replace(/^(?:\\n|\\r\\n)/,""),Be=Symbol.for("polyscript.js_modules"),De=new Map;Ae(globalThis,Be,{value:De}),new Proxy(De,{get:(t,e)=>t.get(e),has:(t,e)=>t.has(e),ownKeys:t=>[...t.keys()]});const Te=(t,e)=>!e.startsWith("_"),Le=(t,e)=>new Proxy(t,{has:Te,get:(t,s)=>t[e][s]}),Oe=(t,e)=>import(t).then(t=>{De.set(e,{...t})}),Ce=t=>new Promise((e,s)=>{document.querySelector(`link[rel="stylesheet"][href="${t}"]`)?e():document.head.append(je(document.createElement("link"),{rel:"stylesheet",href:t,onload:e,onerror:s}))}),Ie=t=>/\\.css$/i.test(new URL(t).pathname),Je=(t,e)=>t.has(e),Ue=t=>[...t.keys()];var He=(t,e,s,o)=>{const i=globalThis[Be];if(s)for(let[t,e]of Pe(s)){let s=i.get(e);s&&!ve(s)||(i.set(e,s||(s=[])),s.push(t))}return((t,e,s,o)=>new Proxy(t,{has:Je,ownKeys:Ue,get:(t,i)=>{let r=t.get(i);if(ve(r)){let a=r;r=null;for(let t of a)t=$e(t,o),Ie(t)?s.importCSS(t):(s.importJS(t,i),r=e[Be].get(i));t.set(i,r)}return r}}))(i,t,e,o)};const We=new Map,Ne=t=>We.get(t),Ke=(t,e)=>{try{return Function("require",e)(Ne)}catch(e){be.get(t).stderr(e)}};var Ge={type:"dummy",module:()=>"data:text/javascript,",engine:t=>we().get(t),registerJSModule(t,e,s){We.set(e,s)},run:Ke,runAsync:Ke,runEvent:async(t,e,s)=>{try{await Function("require","e",`return ${e}(e)`)(Ne,s)}catch(e){be.get(t).stderr(e)}},transform:(t,e)=>e,writeFile(){}};const Ve=Object.getOwnPropertyDescriptors(Response.prototype),Xe=t=>"function"==typeof t,Ye={get:(t,e)=>Ve.hasOwnProperty(e)?((t,e,{get:s,value:o})=>s||!Xe(o)?t.then(t=>t[e]):(...s)=>t.then(t=>t[e](...s)))(t,e,Ve[e]):((t,e)=>Xe(e)?e.bind(t):e)(t,t[e])};var Ze=(t,...e)=>new Proxy(fetch(t,...e).then(e=>e.ok?e:Promise.reject(new Error(`[${e.status}] Unable to fetch ${t}`))),Ye);const Qe=!globalThis.window,ts=({FS:t,PATH:e,PATH_FS:s},o,i)=>{const r=s.resolve(o),a=e.dirname(r);return t.mkdirTree?t.mkdirTree(a):ss(t,a),t.writeFile(r,new Uint8Array(i),{canOwn:!0})},es=t=>{const e=t.split("/");return e.pop(),e.join("/")},ss=(t,e)=>{const s=[];for(const o of e.split("/"))"."!==o&&".."!==o&&(s.push(o),o&&t.mkdir(s.join("/")))},os=(t,e)=>{const s=[];for(const t of e.split("/"))switch(t){case"":case".":break;case"..":s.pop();break;default:s.push(t)}return[t.cwd()].concat(s).join("/").replace(/^\\/+/,"/")},is=t=>{const e=t.map(t=>t.trim().replace(/(^[/]*|[/]*$)/g,"")).filter(t=>""!==t&&"."!==t).join("/");return t[0].startsWith("/")?`/${e}`:e},rs=(t,e)=>Ze($e(t,e)).arrayBuffer(),as=(t,e,s,o)=>Ee((t=>{for(const{files:e,to_file:s,from:o=""}of t){if(void 0!==e&&void 0!==s)throw new Error("Cannot use \'to_file\' and \'files\' parameters together!");if(void 0===e&&void 0===s&&o.endsWith("/"))throw new Error(`Couldn\'t determine the filename from the path ${o}, please supply \'to_file\' parameter.`)}return t.flatMap(({from:t="",to_folder:e=".",to_file:s,files:o})=>{if(ve(o))return o.map(s=>({url:is([t,s]),path:is([e,s])}));const i=s||t.slice(1+t.lastIndexOf("/"));return[{url:t,path:is([e,i])}]})})(s).map(({url:s,path:i})=>rs(s,o).then(s=>t.writeFile(e,i,s)))),ns=(t,e)=>e.endsWith("/")?`${e}${t.split("/").pop()}`:e,ps=(t,e)=>t.replace(/\\{.+?\\}/g,t=>{if(!e.has(t))throw new SyntaxError(`Invalid template: ${t}`);return e.get(t)}),cs=(t,e,s,o)=>Ee((t=>{const e=new Map,s=new Set,o=[];for(const[i,r]of Pe(t))if(/^\\{.+\\}$/.test(i)){if(e.has(i))throw new SyntaxError(`Duplicated template: ${i}`);e.set(i,ps(r,e))}else{const t=ps(i,e),a=ns(t,ps(r||"./",e));if(s.has(a)&&!a.endsWith("/*"))throw new SyntaxError(`Duplicated destination: ${a}`);s.add(a),o.push({url:t,path:a})}return o})(s).map(({url:s,path:i})=>rs(s,o).then(o=>t.writeFile(e,i,o,s)))),ls=({main:t,worker:e},s)=>{const o=[];if(e&&Qe)for(let[t,i]of Pe(e))t=$e(t,s),o.push(Oe(t,i));if(t&&!Qe)for(let[e,i]of Pe(t))e=$e(e,s),Ie(e)?Ce(e):o.push(Oe(e,i));return Ee(o)},ys=t=>e=>{dispatchEvent(new CustomEvent(`${t}:progress`,{detail:e}))},{isNaN:ds,isFinite:us,isInteger:ms}=Number,{ownKeys:hs}=Reflect,{is:gs}=Object,fs=(t,e,s)=>{const o=s.get(t),i=!o;return i?(it.setUint32(0,e.length,!0),s.set(t,[rt[0],rt[1],rt[2],rt[3]])):e.push(T,o[0],o[1],o[2],o[3]),i},bs=(t,e,s)=>{it.setUint32(0,s,!0),t.push(e,rt[0],rt[1],rt[2],rt[3])},ws=(t,e,s)=>{switch(typeof t){case"number":t&&us(t)?ms(t)&&t<256&&-1<t?e.push(f,t):(it.setFloat64(0,t,!0),e.push(g,rt[0],rt[1],rt[2],rt[3],rt[4],rt[5],rt[6],rt[7])):ds(t)?e.push(b):t?e.push(t<0?k:w):e.push(gs(t,0)?x:_);break;case"object":switch(!0){case null===t:e.push(h);break;case!fs(t,e,s):break;case N(t):{const o=t.length;bs(e,P,o);for(let i=0;i<o;i++)ws(t[i],e,s);break}case K(t):if(e.push(B),ws(Dt(t),e,s),t=t.buffer,!fs(t,e,s))break;case t instanceof ArrayBuffer:{const s=new Uint8Array(t);bs(e,E,s.length),ks(e,s);break}case t instanceof Date:e.push(S),ws(t.getTime(),e,s);break;case t instanceof Map:bs(e,M,t.size);for(const[o,i]of t)ws(o,e,s),ws(i,e,s);break;case t instanceof Set:bs(e,F,t.size);for(const o of t)ws(o,e,s);break;case t instanceof Error:e.push($),ws(t.name,e,s),ws(t.message,e,s),ws(t.stack,e,s);break;case t instanceof L:e.push(D),ws(t.data,e,s),ws(t.width,e,s),ws(t.height,e,s),ws(t.colorSpace,e,s),ws(t.pixelFormat,e,s);break;case t instanceof RegExp:e.push(q),ws(t.source,e,s),ws(t.flags,e,s);break;default:if("toJSON"in t){const o=t.toJSON();ws(o===t?null:o,e,s)}else{const o=hs(t),i=o.length;bs(e,R,i);for(let r=0;r<i;r++){const i=o[r];ws(i,e,s),ws(t[i],e,s)}}}break;case"string":if(fs(t,e,s)){const s=C.encode(t);bs(e,z,s.length),ks(e,s)}break;case"boolean":e.push(t?u:d);break;case"symbol":e.push(A),ws(U(t),e,s);break;case"bigint":{let s=v;9223372036854775807n<t?(it.setBigUint64(0,t,!0),s=j):it.setBigInt64(0,t,!0),e.push(s,rt[0],rt[1],rt[2],rt[3],rt[4],rt[5],rt[6],rt[7]);break}default:e.push(m)}};let ks=st;const xs={parse:yt,stringify:t=>{const e=[];return ks=st,ws(t,e,new Map),e}},_s=new WeakMap,vs=async(t,e,s,o,i)=>{o.files&&(e("Loading files"),await cs(t,s,o.files,i),e("Loaded files")),o.fetch&&(e("Loading fetch"),await as(t,s,o.fetch,i),e("Loaded fetch")),o.js_modules&&(e("Loading JS modules"),await ls(o.js_modules,i),e("Loaded JS modules"))},js=(t,e,s)=>{"polyscript"===e&&(s.lazy_py_modules=async(...e)=>(await _s.get(t)(e),e.map(e=>t.pyimport(e))),s.storage=async t=>{const e=new n(t);return await e.sync(),e},s.JSON=xs),t.registerJsModule(e,s)},zs=(t,e)=>{if(t.endsWith("/*")){if(/\\.(zip|whl|tgz|tar(?:\\.gz)?)$/.test(e))return RegExp.$1;throw new Error(`Unsupported archive ${e}`)}return""},As=(t,e,...s)=>{try{return t.runPython(_e(e),...s)}catch(e){be.get(t).stderr(e)}},Ps=async(t,e,...s)=>{try{return await t.runPythonAsync(_e(e),...s)}catch(e){be.get(t).stderr(e)}},Es=async(t,e,s)=>{const[o,...i]=e.split(".");let r,a=t.globals.get(o);for(const t of i)[r,a]=[a,a[t]];try{await a.call(r,s)}catch(e){be.get(t).stderr(e)}};var Ss=(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 $s=async t=>(await import("./toml-BK2RWy-G.js")).parse(t);async function Ms(t,e){return new Promise((s,o)=>{t.syncfs(e,t=>{t?o(t):s()})})}function Rs(t){const e=t.FS,s=t.FS.filesystems.MEMFS,o=t.PATH,i={DIR_MODE:16895,FILE_MODE:33279,mount:function(t){if(!t.opts.fileSystemHandle)throw new Error("opts.fileSystemHandle is required");return s.mount.apply(null,arguments)},syncfs:async(t,e,s)=>{try{const o=i.getLocalSet(t),r=await i.getRemoteSet(t),a=e?r:o,n=e?o:r;await i.reconcile(t,a,n),s(null)}catch(t){s(t)}},getLocalSet:t=>{let s=Object.create(null);function i(t){return"."!==t&&".."!==t}function r(t){return e=>o.join2(t,e)}let a=e.readdir(t.mountpoint).filter(i).map(r(t.mountpoint));for(;a.length;){let t=a.pop(),o=e.stat(t);e.isDir(o.mode)&&a.push.apply(a,e.readdir(t).filter(i).map(r(t))),s[t]={timestamp:o.mtime,mode:o.mode}}return{type:"local",entries:s}},getRemoteSet:async t=>{const e=Object.create(null),s=await qs(t.opts.fileSystemHandle);for(const[r,a]of s)"."!==r&&(e[o.join2(t.mountpoint,r)]={timestamp:"file"===a.kind?(await a.getFile()).lastModifiedDate:new Date,mode:"file"===a.kind?i.FILE_MODE:i.DIR_MODE});return{type:"remote",entries:e,handles:s}},loadLocalEntry:t=>{const o=e.lookupPath(t).node,i=e.stat(t);if(e.isDir(i.mode))return{timestamp:i.mtime,mode:i.mode};if(e.isFile(i.mode))return o.contents=s.getFileDataAsTypedArray(o),{timestamp:i.mtime,mode:i.mode,contents:o.contents};throw new Error("node type not supported")},storeLocalEntry:(t,s)=>{if(e.isDir(s.mode))e.mkdirTree(t,s.mode);else{if(!e.isFile(s.mode))throw new Error("node type not supported");e.writeFile(t,s.contents,{canOwn:!0})}e.chmod(t,s.mode),e.utime(t,s.timestamp,s.timestamp)},removeLocalEntry:t=>{var s=e.stat(t);e.isDir(s.mode)?e.rmdir(t):e.isFile(s.mode)&&e.unlink(t)},loadRemoteEntry:async t=>{if("file"===t.kind){const e=await t.getFile();return{contents:new Uint8Array(await e.arrayBuffer()),mode:i.FILE_MODE,timestamp:e.lastModifiedDate}}if("directory"===t.kind)return{mode:i.DIR_MODE,timestamp:new Date};throw new Error("unknown kind: "+t.kind)},storeRemoteEntry:async(t,s,i)=>{const r=t.get(o.dirname(s)),a=e.isFile(i.mode)?await r.getFileHandle(o.basename(s),{create:!0}):await r.getDirectoryHandle(o.basename(s),{create:!0});if("file"===a.kind){const t=await a.createWritable();await t.write(i.contents),await t.close()}t.set(s,a)},removeRemoteEntry:async(t,e)=>{const s=t.get(o.dirname(e));await s.removeEntry(o.basename(e)),t.delete(e)},reconcile:async(t,s,r)=>{let a=0;const n=[];Object.keys(s.entries).forEach(function(t){const o=s.entries[t],i=r.entries[t];(!i||e.isFile(o.mode)&&o.timestamp.getTime()>i.timestamp.getTime())&&(n.push(t),a++)}),n.sort();const p=[];if(Object.keys(r.entries).forEach(function(t){s.entries[t]||(p.push(t),a++)}),p.sort().reverse(),!a)return;const c="remote"===s.type?s.handles:r.handles;for(const e of n){const s=o.normalize(e.replace(t.mountpoint,"/")).substring(1);if("local"===r.type){const t=c.get(s),o=await i.loadRemoteEntry(t);i.storeLocalEntry(e,o)}else{const t=i.loadLocalEntry(e);await i.storeRemoteEntry(c,s,t)}}for(const e of p)if("local"===r.type)i.removeLocalEntry(e);else{const s=o.normalize(e.replace(t.mountpoint,"/")).substring(1);await i.removeRemoteEntry(c,s)}}};return t.FS.filesystems.NATIVEFS_ASYNC=i,async function(t,s){if("FileSystemDirectoryHandle"!==s.constructor.name)throw new TypeError("Expected argument \'fileSystemHandle\' to be a FileSystemDirectoryHandle");return function(t){e.mkdirTree?e.mkdirTree(t):ss(e,t);const{node:s}=e.lookupPath(t,{follow_mount:!1});if(e.isMountpoint(s))throw new Error(`path \'${t}\' is already a file system mount point`);if(!e.isDir(s.mode))throw new Error(`path \'${t}\' points to a file not a directory`);for(const e in s.contents)throw new Error(`directory \'${t}\' is not empty`)}(t),e.mount(e.filesystems.NATIVEFS_ASYNC,{fileSystemHandle:s},t),await Ms(e,!0),{syncfs:async()=>await Ms(e,!1)}}}const qs=async t=>{const e=[];await async function t(s){for await(const o of s.values())e.push(o),"directory"===o.kind&&await t(o)}(t);const s=new Map;s.set(".",t);for(const o of e){const e=(await t.resolve(o)).join("/");s.set(e,o)}return s},{parse:Fs}=JSON,Bs=(t,e)=>new URL(t,e).href,Ds=(t,e,s)=>{if(e in t)throw new Error(`Duplicated path: ${e}`);t[e]=s},Ts=(t,e,s)=>{for(const o in e)Ds(t,Bs(o,s),e[o])},Ls=(t,e,s,o)=>{const i=e[s];i&&(t[s]??={},Ts(t[s],i,o))},Os=async(t,e=t.packages,s=new Set)=>{const o=[];for(const i of e){if(s.has(i))continue;s.add(i);const e=i.endsWith(".toml");if(e||i.endsWith(".json")){const r=await Ze(i).text(),{name:a,files:n,js_modules:p,packages:c}=e?await $s(r):Fs(r);if(s.has(a))throw new Error(`Unable to process ${a} @ ${i}`);s.add(a),c&&o.push(...await Os(t,c,s)),p&&(t.js_modules??={},Ls(t.js_modules,p,"main",i),Ls(t.js_modules,p,"worker",i)),n&&(t.files??={},Ts(t.files,n,i))}else o.push(i)}return o},Cs=(t,e)=>{try{t.mkdir(e)}catch(t){}},Is=ys("mpy");var Js={type:"micropython",module:(t="1.27.0-preview-283")=>`https://cdn.jsdelivr.net/npm/@micropython/micropython-webassembly-pyscript@${t}/micropython.mjs`,async engine({loadMicroPython:t},e,s,o){const{stderr:i,stdout:r,get:a}=we({stderr:xe(console.error),stdout:xe(console.log)});s=s.replace(/\\.m?js$/,".wasm"),Is("Loading MicroPython");const n=await a(t({linebuffer:!1,stderr:i,stdout:r,url:s}));globalThis[Be].set("-T-",this.transform.bind(this,n));const p=Us.bind(this,n,o);return _s.set(n,p),e.experimental_remote_packages&&(Is("Loading remote packages"),e.packages=await Os(e),Is("Loaded remote packages")),await vs(this,Is,n,e,o),this.writeFile(n,"./mip.py",Ss),e.packages&&(Is("Loading packages"),await p(e.packages.map(Me,o)),Is("Loaded packages")),Is("Loaded MicroPython"),n.mountNativeFS||(n.mountNativeFS=Rs(n._module)),n},registerJSModule:js,run:As,runAsync:Ps,runEvent:Es,transform:(t,e)=>t.PyProxy.toJs(e),writeFile:(t,e,s,o)=>{const{FS:i,_module:{PATH:r,PATH_FS:a}}=t,n={FS:i,PATH:r,PATH_FS:a},p=zs(e,o);if(p){const o=e.slice(0,-1);switch("./"!==o&&i.mkdir(o),p){case"whl":case"zip":{const t=new Blob([s],{type:"application/zip"});return import("./zip-CakRHzZu.js").then(async({BlobReader:e,Uint8ArrayWriter:s,ZipReader:a})=>{const n=new a(new e(t));for(const t of await n.getEntries()){const{directory:e,filename:a}=t,n=o+a;if(e)Cs(i,n);else{Cs(i,r.dirname(n));const e=await t.getData(new s);i.writeFile(n,e,{canOwn:!0})}}n.close()})}case"tgz":case"tar.gz":{const e="./_.tar.gz";return ts(n,e,s),void t.runPython(`\\n import os, gzip, tarfile\\n tar = tarfile.TarFile(fileobj=gzip.GzipFile(fileobj=open("${e}", "rb")))\\n for f in tar:\\n name = f"${o}{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("${e}")\\n `)}}}return ts(n,e,s)}};async function Us(t,e,s){let o;for(const i of s)if(i.endsWith(".whl")){const s=$e(i,e),o=await Ze(s).arrayBuffer();await this.writeFile(t,"./*",o,s)}else o||(o=t.pyimport("mip")),o.install(i)}const Hs={dict_converter:Object.fromEntries},{stringify:Ws}=JSON,{hasOwn:Ns}=Object,{apply:Ks}=Reflect,Gs=Function.prototype,Vs=t=>function(...e){return Ks(t,this,e)};let Xs,Ys;const Zs=t=>{const e=new WeakMap,s=s=>{for(let o,i=0;i<s.length;i++)switch(typeof(o=s[i])){case"object":if(null===o)break;case"function":if(Xs in o&&!o[Xs].shared?.gcRegistered){t=!1;let r=e.get(o)?.deref();if(!r){r=Ys(o);const t=new WeakRef(r);e.set(o,t),e.set(r,t)}s[i]=r,t=!0}}};Object.defineProperties(Gs,{apply:{value(e,o){return t&&s(o),Ks(this,e,o)}},call:{value(e,...o){return t&&s(o),Ks(this,e,o)}}})},Qs=ys("py"),to=new WeakMap;var eo={type:"pyodide",module:(t="0.29.0")=>`https://cdn.jsdelivr.net/pyodide/v${t}/full/pyodide.mjs`,async engine({loadPyodide:t,version:e},s,o,i){Qs("Loading Pyodide");let{packages:r,index_urls:a}=s;if(r){if(r=r.map(Me,i),!a){Qs("Loading Packages Graph");const{default:t}=await Promise.resolve().then(function(){return ro});if(Qs("Loaded Packages Graph"),Ns(t,e)){const s=r.filter(s=>{if(/^https?:\\/\\//.test(s))return!1;const[o,...i]=s.split(/[>=<]=/);return!Ns(t[e],o)||i.length>0&&i[0]!==t[e][o]});if(s.length>0)throw new Error(`These packages are not supported in Pyodide ${e}: ${s.join(", ")}`)}}s.experimental_remote_packages&&(Qs("Loading remote packages"),s.packages=r=await Os(s,r),Qs("Loaded remote packages"))}Qs("Loading Storage");const p=o.slice(0,o.lastIndexOf("/")),c=new n(`${p}@${e}`),l={indexURL:p},y="never"!==s.packages_cache&&"0.28.0"!==e;if(await c.sync(),Qs("Loaded Storage"),y||c.clear(),r&&y)if("passthrough"===s.packages_cache)l.packages=r,r=null,c.clear();else{r=r.sort();const t=Ws(r);if(c.has(t)){const s=c.get(t);if(l.packages=r.map(t=>t.split(/[>=<]=/)[0]),e.startsWith("0.27")){const t=new Blob([s],{type:"application/json"});l.lockFileURL=URL.createObjectURL(t)}else l.lockFileContents=s;r=null}}const{stderr:d,stdout:u,get:m}=we();Qs("Loading interpreter");const h=await m(t({stderr:d,stdout:u,...l}));Qs("Loaded interpreter"),globalThis[Be].set("-T-",this.transform.bind(this,h)),s.debug&&h.setDebug(!0);const g=oo.bind(h);return a&&to.set(h,a),_s.set(h,g),await vs(this,Qs,h,s,i),r&&await g(r,c,y),await c.close(),l.lockFileURL&&URL.revokeObjectURL(l.lockFileURL),Qs("Loaded Pyodide"),"auto"===s.experimental_create_proxy&&(h.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:h.toPy({})}),Ys=globalThis.experimental_create_proxy,delete globalThis.experimental_create_proxy,[Xs]=Reflect.ownKeys(Ys).filter(t=>"symbol"==typeof t&&"Symbol(pyproxy.attrs)"===String(t)),Zs(!0)),h},registerJSModule:js,run:Vs(As),runAsync:Vs(Ps),runEvent:Vs(Es),transform:(t,e)=>Ks(so,t,[e]),writeFile:(t,e,s,o)=>{const i=zs(e,o);if(i)return t.unpackArchive(s,i,{extractDir:e.slice(0,-1)});const{FS:r,PATH:a,_module:{PATH_FS:n}}=t;return ts({FS:r,PATH:a,PATH_FS:n},e,s)}};function so(t){const{ffi:{PyProxy:e}}=this;if(t&&"object"==typeof t){if(t instanceof e)return t.toJs(Hs);if(t instanceof Map)return new Map([...t.entries()]);if(ve(t))return t.map(so,this)}return t}async function oo(t,e,s=!1){const{log:o}=console,i=(t,...e)=>{o(t,...e),console.log=o,Qs(t),console.log=i};console.log=i,await this.loadPackage("micropip");const r=this.pyimport("micropip");if(to.has(this)&&r.set_index_urls(to.get(this)),await r.install(t,{keep_going:!0}),console.log=o,s&&e instanceof n){const s=r.freeze();e.set(Ws(t),s)}r.destroy()}var io={latest:{affine:"2.4.0",aiohappyeyeballs:"2.6.1",aiohttp:"3.11.13",aiosignal:"1.3.2",altair:"5.5.0","annotated-types":"0.7.0",anyio:"4.9.0",apsw:"3.49.1.0","argon2-cffi":"23.1.0","argon2-cffi-bindings":"21.2.0",asciitree:"0.3.3",astropy:"7.0.1",astropy_iers_data:"0.2025.3.10.0.29.26",asttokens:"3.0.0","async-timeout":"5.0.1",atomicwrites:"1.4.1",attrs:"25.2.0","audioop-lts":"0.2.1",autograd:"1.7.0","awkward-cpp":"47",b2d:"0.7.4",bcrypt:"4.3.0",beautifulsoup4:"4.13.3",biopython:"1.85",bitarray:"3.6.0",bitstring:"4.3.1",bleach:"6.2.0",blosc2:"3.5.1",bokeh:"3.6.3","boost-histogram":"1.5.0",brotli:"1.1.0",cachetools:"5.5.2",casadi:"3.7.0","cbor-diag":"1.0.1",certifi:"2025.7.14",cffi:"1.17.1",cffi_example:"0.1",cftime:"1.6.4.post1","charset-normalizer":"3.4.2",clarabel:"0.11.0",click:"8.2.1",cligj:"0.7.2",clingo:"5.7.1",cloudpickle:"3.1.1",cmyt:"2.0.2",cobs:"1.2.1",colorspacious:"1.1.2",contourpy:"1.3.1",coolprop:"6.6.0",coverage:"7.6.12",cramjam:"2.10.0rc1",crc32c:"2.7.1",cryptography:"45.0.5","css-inline":"0.16.0",cssselect:"1.3.0","cvxpy-base":"1.6.3",cycler:"0.12.1",cysignals:"1.12.3",cytoolz:"1.0.1",decorator:"5.2.1",demes:"0.2.3",deprecation:"2.1.0",diskcache:"5.6.3",distlib:"0.3.9",distro:"1.9.0",docutils:"0.21.2",donfig:"0.8.1.post1",ewah_bool_utils:"1.2.2",exceptiongroup:"1.2.2",executing:"2.2.0",fastparquet:"2024.11.0",fiona:"1.9.5",fonttools:"4.56.0",freesasa:"2.2.1",frozenlist:"1.6.0",fsspec:"2025.3.2",future:"1.0.0",galpy:"1.10.2",gmpy2:"2.1.5",gsw:"3.6.19",h11:"0.14.0",h3:"4.2.2",h5py:"3.13.0",html5lib:"1.1",httpcore:"1.0.7",httpx:"0.28.1",idna:"3.10",igraph:"0.11.8",imageio:"2.37.0","imgui-bundle":"1.92.0",iminuit:"2.30.1",iniconfig:"2.1.0",inspice:"1.6.3.3",ipython:"9.0.2",jedi:"0.19.2",Jinja2:"3.1.6",jiter:"0.9.0",joblib:"1.4.2",jsonschema:"4.23.0",jsonschema_specifications:"2024.10.1",kiwisolver:"1.4.8","lakers-python":"0.5.0",lazy_loader:"0.4","lazy-object-proxy":"1.10.0",libcst:"1.6.0",lightgbm:"4.6.0",logbook:"1.8.0",lxml:"6.0.0",lz4:"4.4.4",MarkupSafe:"3.0.2",matplotlib:"3.8.4","matplotlib-inline":"0.1.7","memory-allocator":"0.1.4",micropip:"0.10.1",mmh3:"5.1.0","more-itertools":"10.6.0",mpmath:"1.3.0",msgpack:"1.1.1",msgspec:"0.19.0",msprime:"1.3.3",multidict:"6.6.3",munch:"4.0.0",mypy:"1.15.0",narwhals:"1.46.0",ndindex:"1.9.2",netcdf4:"1.7.2",networkx:"3.4.2",newick:"1.9.0",nh3:"0.2.21",nlopt:"2.9.1",nltk:"3.9.1",numcodecs:"0.13.1",numpy:"2.2.5",openai:"1.68.2","opencv-python":"4.11.0.86",optlang:"1.8.3",orjson:"3.10.16",packaging:"24.2",pandas:"2.3.1",parso:"0.8.4",patsy:"1.0.1",pcodec:"0.3.3",peewee:"3.17.9","pi-heif":"0.21.0",Pillow:"11.3.0","pillow-heif":"1.0.0",pkgconfig:"1.5.5",platformdirs:"4.3.6",pluggy:"1.5.0",ply:"3.11",pplpy:"0.8.10",primecountpy:"0.1.1",prompt_toolkit:"3.0.50",propcache:"0.3.0",protobuf:"6.31.1","pure-eval":"0.2.3",py:"1.11.0",pyclipper:"1.3.0.post6",pycparser:"2.22",pycryptodome:"3.21.0",pydantic:"2.10.6",pydantic_core:"2.27.2",pyerfa:"2.0.1.5",Pygments:"2.19.1",pyheif:"0.8.0",pyiceberg:"0.9.0",pyinstrument:"5.0.1",PyMuPDF:"1.26.3",pynacl:"1.5.0","pyodide-http":"0.2.2","pyodide-unix-timezones":"1.0.0",pyparsing:"3.2.1",pyrsistent:"0.20.0",pysam:"0.23.0",pyshp:"2.3.1",pytaglib:"3.0.1",pytest:"8.3.5","pytest-asyncio":"0.25.3","pytest-benchmark":"4.0.0",pytest_httpx:"0.30.0","python-dateutil":"2.9.0.post0","python-flint":"0.7.1","python-magic":"0.4.27","python-sat":"1.8.dev17","python-solvespace":"3.0.8",pytz:"2025.2",pywavelets:"1.8.0",pyxel:"1.9.10",pyxirr:"0.10.6",pyyaml:"6.0.2",rasterio:"1.4.3",rateslib:"2.0.1",rebound:"4.4.7",reboundx:"4.4.1",referencing:"0.36.2",regex:"2024.11.6",requests:"2.32.4",retrying:"1.3.4",rich:"13.9.4",river:"0.22.0",RobotRaconteur:"1.2.5","rpds-py":"0.23.1","ruamel.yaml":"0.18.10",rustworkx:"0.17.0a3","scikit-image":"0.25.2","scikit-learn":"1.7.0",scipy:"1.14.1",screed:"1.1.3",setuptools:"76.0.0",shapely:"2.0.7",simplejson:"3.20.1",sisl:"0.16.2",six:"1.17.0","smart-open":"7.1.0",sniffio:"1.3.1",sortedcontainers:"2.4.0",soundfile:"0.12.1",soupsieve:"2.6",sourmash:"4.8.14",soxr:"0.5.0.post1",sparseqr:"1.2",sqlalchemy:"2.0.39","stack-data":"0.6.3",statsmodels:"0.14.4",strictyaml:"1.7.3",svgwrite:"1.4.3",swiglpk:"5.0.12",sympy:"1.13.3",tblib:"3.0.0",termcolor:"2.5.0",texttable:"1.7.0",texture2ddecoder:"1.0.5",threadpoolctl:"3.5.0",tiktoken:"0.9.0",tomli:"2.2.1","tomli-w":"1.2.0",toolz:"1.0.0",tqdm:"4.67.1",traitlets:"5.14.3",traits:"7.0.2","tree-sitter":"0.23.2","tree-sitter-go":"0.23.3","tree-sitter-java":"0.23.4","tree-sitter-python":"0.23.4",tskit:"0.6.4","typing-extensions":"4.14.1",tzdata:"2025.2",ujson:"5.10.0",uncertainties:"3.2.2",unyt:"3.0.3",urllib3:"2.5.0","vega-datasets":"0.9.0",wcwidth:"0.2.13",webencodings:"0.5.1",wordcloud:"1.9.4",wrapt:"1.17.2",xarray:"2025.1.2",xgboost:"2.1.4",xlrd:"2.0.1",xxhash:"3.5.0",xyzservices:"2025.1.0",yarl:"1.18.3",yt:"4.4.0",zengl:"2.7.1",zfpy:"1.0.1",zstandard:"0.23.0"},stable:{affine:"2.4.0",aiohappyeyeballs:"2.6.1",aiohttp:"3.11.13",aiosignal:"1.3.2",altair:"5.5.0","annotated-types":"0.7.0",anyio:"4.9.0",apsw:"3.49.1.0","argon2-cffi":"23.1.0","argon2-cffi-bindings":"21.2.0",asciitree:"0.3.3",astropy:"7.0.1",astropy_iers_data:"0.2025.3.10.0.29.26",asttokens:"3.0.0","async-timeout":"5.0.1",atomicwrites:"1.4.1",attrs:"25.2.0","audioop-lts":"0.2.1",autograd:"1.7.0","awkward-cpp":"47",b2d:"0.7.4",bcrypt:"4.3.0",beautifulsoup4:"4.13.3",biopython:"1.85",bitarray:"3.6.0",bitstring:"4.3.1",bleach:"6.2.0",blosc2:"3.5.1",bokeh:"3.6.3","boost-histogram":"1.5.0",brotli:"1.1.0",cachetools:"5.5.2",casadi:"3.7.0","cbor-diag":"1.0.1",certifi:"2025.7.14",cffi:"1.17.1",cffi_example:"0.1",cftime:"1.6.4.post1","charset-normalizer":"3.4.2",clarabel:"0.11.0",click:"8.2.1",cligj:"0.7.2",clingo:"5.7.1",cloudpickle:"3.1.1",cmyt:"2.0.2",cobs:"1.2.1",colorspacious:"1.1.2",contourpy:"1.3.1",coolprop:"6.6.0",coverage:"7.6.12",cramjam:"2.10.0rc1",crc32c:"2.7.1",cryptography:"45.0.5","css-inline":"0.16.0",cssselect:"1.3.0","cvxpy-base":"1.6.3",cycler:"0.12.1",cysignals:"1.12.3",cytoolz:"1.0.1",decorator:"5.2.1",demes:"0.2.3",deprecation:"2.1.0",diskcache:"5.6.3",distlib:"0.3.9",distro:"1.9.0",docutils:"0.21.2",donfig:"0.8.1.post1",ewah_bool_utils:"1.2.2",exceptiongroup:"1.2.2",executing:"2.2.0",fastparquet:"2024.11.0",fiona:"1.9.5",fonttools:"4.56.0",freesasa:"2.2.1",frozenlist:"1.6.0",fsspec:"2025.3.2",future:"1.0.0",galpy:"1.10.2",gmpy2:"2.1.5",gsw:"3.6.19",h11:"0.14.0",h3:"4.2.2",h5py:"3.13.0",html5lib:"1.1",httpcore:"1.0.7",httpx:"0.28.1",idna:"3.10",igraph:"0.11.8",imageio:"2.37.0","imgui-bundle":"1.92.0",iminuit:"2.30.1",iniconfig:"2.1.0",inspice:"1.6.3.3",ipython:"9.0.2",jedi:"0.19.2",Jinja2:"3.1.6",jiter:"0.9.0",joblib:"1.4.2",jsonschema:"4.23.0",jsonschema_specifications:"2024.10.1",kiwisolver:"1.4.8","lakers-python":"0.5.0",lazy_loader:"0.4","lazy-object-proxy":"1.10.0",libcst:"1.6.0",lightgbm:"4.6.0",logbook:"1.8.0",lxml:"6.0.0",lz4:"4.4.4",MarkupSafe:"3.0.2",matplotlib:"3.8.4","matplotlib-inline":"0.1.7","memory-allocator":"0.1.4",micropip:"0.10.1",mmh3:"5.1.0","more-itertools":"10.6.0",mpmath:"1.3.0",msgpack:"1.1.1",msgspec:"0.19.0",msprime:"1.3.3",multidict:"6.6.3",munch:"4.0.0",mypy:"1.15.0",narwhals:"1.46.0",ndindex:"1.9.2",netcdf4:"1.7.2",networkx:"3.4.2",newick:"1.9.0",nh3:"0.2.21",nlopt:"2.9.1",nltk:"3.9.1",numcodecs:"0.13.1",numpy:"2.2.5",openai:"1.68.2","opencv-python":"4.11.0.86",optlang:"1.8.3",orjson:"3.10.16",packaging:"24.2",pandas:"2.3.1",parso:"0.8.4",patsy:"1.0.1",pcodec:"0.3.3",peewee:"3.17.9","pi-heif":"0.21.0",Pillow:"11.3.0","pillow-heif":"1.0.0",pkgconfig:"1.5.5",platformdirs:"4.3.6",pluggy:"1.5.0",ply:"3.11",pplpy:"0.8.10",primecountpy:"0.1.1",prompt_toolkit:"3.0.50",propcache:"0.3.0",protobuf:"6.31.1","pure-eval":"0.2.3",py:"1.11.0",pyclipper:"1.3.0.post6",pycparser:"2.22",pycryptodome:"3.21.0",pydantic:"2.10.6",pydantic_core:"2.27.2",pyerfa:"2.0.1.5",Pygments:"2.19.1",pyheif:"0.8.0",pyiceberg:"0.9.0",pyinstrument:"5.0.1",PyMuPDF:"1.26.3",pynacl:"1.5.0","pyodide-http":"0.2.2","pyodide-unix-timezones":"1.0.0",pyparsing:"3.2.1",pyrsistent:"0.20.0",pysam:"0.23.0",pyshp:"2.3.1",pytaglib:"3.0.1",pytest:"8.3.5","pytest-asyncio":"0.25.3","pytest-benchmark":"4.0.0",pytest_httpx:"0.30.0","python-dateutil":"2.9.0.post0","python-flint":"0.7.1","python-magic":"0.4.27","python-sat":"1.8.dev17","python-solvespace":"3.0.8",pytz:"2025.2",pywavelets:"1.8.0",pyxel:"1.9.10",pyxirr:"0.10.6",pyyaml:"6.0.2",rasterio:"1.4.3",rateslib:"2.0.1",rebound:"4.4.7",reboundx:"4.4.1",referencing:"0.36.2",regex:"2024.11.6",requests:"2.32.4",retrying:"1.3.4",rich:"13.9.4",river:"0.22.0",RobotRaconteur:"1.2.5","rpds-py":"0.23.1","ruamel.yaml":"0.18.10",rustworkx:"0.17.0a3","scikit-image":"0.25.2","scikit-learn":"1.7.0",scipy:"1.14.1",screed:"1.1.3",setuptools:"76.0.0",shapely:"2.0.7",simplejson:"3.20.1",sisl:"0.16.2",six:"1.17.0","smart-open":"7.1.0",sniffio:"1.3.1",sortedcontainers:"2.4.0",soundfile:"0.12.1",soupsieve:"2.6",sourmash:"4.8.14",soxr:"0.5.0.post1",sparseqr:"1.2",sqlalchemy:"2.0.39","stack-data":"0.6.3",statsmodels:"0.14.4",strictyaml:"1.7.3",svgwrite:"1.4.3",swiglpk:"5.0.12",sympy:"1.13.3",tblib:"3.0.0",termcolor:"2.5.0",texttable:"1.7.0",texture2ddecoder:"1.0.5",threadpoolctl:"3.5.0",tiktoken:"0.9.0",tomli:"2.2.1","tomli-w":"1.2.0",toolz:"1.0.0",tqdm:"4.67.1",traitlets:"5.14.3",traits:"7.0.2","tree-sitter":"0.23.2","tree-sitter-go":"0.23.3","tree-sitter-java":"0.23.4","tree-sitter-python":"0.23.4",tskit:"0.6.4","typing-extensions":"4.14.1",tzdata:"2025.2",ujson:"5.10.0",uncertainties:"3.2.2",unyt:"3.0.3",urllib3:"2.5.0","vega-datasets":"0.9.0",wcwidth:"0.2.13",webencodings:"0.5.1",wordcloud:"1.9.4",wrapt:"1.17.2",xarray:"2025.1.2",xgboost:"2.1.4",xlrd:"2.0.1",xxhash:"3.5.0",xyzservices:"2025.1.0",yarl:"1.18.3",yt:"4.4.0",zengl:"2.7.1",zfpy:"1.0.1",zstandard:"0.23.0"},"0.28.3":{affine:"2.4.0",aiohappyeyeballs:"2.6.1",aiohttp:"3.11.13",aiosignal:"1.3.2",altair:"5.5.0","annotated-types":"0.7.0",anyio:"4.9.0",apsw:"3.49.1.0","argon2-cffi":"23.1.0","argon2-cffi-bindings":"21.2.0",asciitree:"0.3.3",astropy:"7.0.1",astropy_iers_data:"0.2025.3.10.0.29.26",asttokens:"3.0.0","async-timeout":"5.0.1",atomicwrites:"1.4.1",attrs:"25.2.0","audioop-lts":"0.2.1",autograd:"1.7.0","awkward-cpp":"47",b2d:"0.7.4",bcrypt:"4.3.0",beautifulsoup4:"4.13.3",biopython:"1.85",bitarray:"3.6.0",bitstring:"4.3.1",bleach:"6.2.0",blosc2:"3.5.1",bokeh:"3.6.3","boost-histogram":"1.5.0",brotli:"1.1.0",cachetools:"5.5.2",casadi:"3.7.0","cbor-diag":"1.0.1",certifi:"2025.7.14",cffi:"1.17.1",cffi_example:"0.1",cftime:"1.6.4.post1","charset-normalizer":"3.4.2",clarabel:"0.11.0",click:"8.2.1",cligj:"0.7.2",clingo:"5.7.1",cloudpickle:"3.1.1",cmyt:"2.0.2",cobs:"1.2.1",colorspacious:"1.1.2",contourpy:"1.3.1",coolprop:"6.6.0",coverage:"7.6.12",cramjam:"2.10.0rc1",crc32c:"2.7.1",cryptography:"45.0.5","css-inline":"0.16.0",cssselect:"1.3.0","cvxpy-base":"1.6.3",cycler:"0.12.1",cysignals:"1.12.3",cytoolz:"1.0.1",decorator:"5.2.1",demes:"0.2.3",deprecation:"2.1.0",diskcache:"5.6.3",distlib:"0.3.9",distro:"1.9.0",docutils:"0.21.2",donfig:"0.8.1.post1",ewah_bool_utils:"1.2.2",exceptiongroup:"1.2.2",executing:"2.2.0",fastparquet:"2024.11.0",fiona:"1.9.5",fonttools:"4.56.0",freesasa:"2.2.1",frozenlist:"1.6.0",fsspec:"2025.3.2",future:"1.0.0",galpy:"1.10.2",gmpy2:"2.1.5",gsw:"3.6.19",h11:"0.14.0",h3:"4.2.2",h5py:"3.13.0",html5lib:"1.1",httpcore:"1.0.7",httpx:"0.28.1",idna:"3.10",igraph:"0.11.8",imageio:"2.37.0","imgui-bundle":"1.92.0",iminuit:"2.30.1",iniconfig:"2.1.0",inspice:"1.6.3.3",ipython:"9.0.2",jedi:"0.19.2",Jinja2:"3.1.6",jiter:"0.9.0",joblib:"1.4.2",jsonschema:"4.23.0",jsonschema_specifications:"2024.10.1",kiwisolver:"1.4.8","lakers-python":"0.5.0",lazy_loader:"0.4","lazy-object-proxy":"1.10.0",libcst:"1.6.0",lightgbm:"4.6.0",logbook:"1.8.0",lxml:"6.0.0",lz4:"4.4.4",MarkupSafe:"3.0.2",matplotlib:"3.8.4","matplotlib-inline":"0.1.7","memory-allocator":"0.1.4",micropip:"0.10.1",mmh3:"5.1.0","more-itertools":"10.6.0",mpmath:"1.3.0",msgpack:"1.1.1",msgspec:"0.19.0",msprime:"1.3.3",multidict:"6.6.3",munch:"4.0.0",mypy:"1.15.0",narwhals:"1.46.0",ndindex:"1.9.2",netcdf4:"1.7.2",networkx:"3.4.2",newick:"1.9.0",nh3:"0.2.21",nlopt:"2.9.1",nltk:"3.9.1",numcodecs:"0.13.1",numpy:"2.2.5",openai:"1.68.2","opencv-python":"4.11.0.86",optlang:"1.8.3",orjson:"3.10.16",packaging:"24.2",pandas:"2.3.1",parso:"0.8.4",patsy:"1.0.1",pcodec:"0.3.3",peewee:"3.17.9","pi-heif":"0.21.0",Pillow:"11.3.0","pillow-heif":"1.0.0",pkgconfig:"1.5.5",platformdirs:"4.3.6",pluggy:"1.5.0",ply:"3.11",pplpy:"0.8.10",primecountpy:"0.1.1",prompt_toolkit:"3.0.50",propcache:"0.3.0",protobuf:"6.31.1","pure-eval":"0.2.3",py:"1.11.0",pyclipper:"1.3.0.post6",pycparser:"2.22",pycryptodome:"3.21.0",pydantic:"2.10.6",pydantic_core:"2.27.2",pyerfa:"2.0.1.5",Pygments:"2.19.1",pyheif:"0.8.0",pyiceberg:"0.9.0",pyinstrument:"5.0.1",PyMuPDF:"1.26.3",pynacl:"1.5.0","pyodide-http":"0.2.2","pyodide-unix-timezones":"1.0.0",pyparsing:"3.2.1",pyrsistent:"0.20.0",pysam:"0.23.0",pyshp:"2.3.1",pytaglib:"3.0.1",pytest:"8.3.5","pytest-asyncio":"0.25.3","pytest-benchmark":"4.0.0",pytest_httpx:"0.30.0","python-dateutil":"2.9.0.post0","python-flint":"0.7.1","python-magic":"0.4.27","python-sat":"1.8.dev17","python-solvespace":"3.0.8",pytz:"2025.2",pywavelets:"1.8.0",pyxel:"1.9.10",pyxirr:"0.10.6",pyyaml:"6.0.2",rasterio:"1.4.3",rateslib:"2.0.1",rebound:"4.4.7",reboundx:"4.4.1",referencing:"0.36.2",regex:"2024.11.6",requests:"2.32.4",retrying:"1.3.4",rich:"13.9.4",river:"0.22.0",RobotRaconteur:"1.2.5","rpds-py":"0.23.1","ruamel.yaml":"0.18.10",rustworkx:"0.17.0a3","scikit-image":"0.25.2","scikit-learn":"1.7.0",scipy:"1.14.1",screed:"1.1.3",setuptools:"76.0.0",shapely:"2.0.7",simplejson:"3.20.1",sisl:"0.16.2",six:"1.17.0","smart-open":"7.1.0",sniffio:"1.3.1",sortedcontainers:"2.4.0",soundfile:"0.12.1",soupsieve:"2.6",sourmash:"4.8.14",soxr:"0.5.0.post1",sparseqr:"1.2",sqlalchemy:"2.0.39","stack-data":"0.6.3",statsmodels:"0.14.4",strictyaml:"1.7.3",svgwrite:"1.4.3",swiglpk:"5.0.12",sympy:"1.13.3",tblib:"3.0.0",termcolor:"2.5.0",texttable:"1.7.0",texture2ddecoder:"1.0.5",threadpoolctl:"3.5.0",tiktoken:"0.9.0",tomli:"2.2.1","tomli-w":"1.2.0",toolz:"1.0.0",tqdm:"4.67.1",traitlets:"5.14.3",traits:"7.0.2","tree-sitter":"0.23.2","tree-sitter-go":"0.23.3","tree-sitter-java":"0.23.4","tree-sitter-python":"0.23.4",tskit:"0.6.4","typing-extensions":"4.14.1",tzdata:"2025.2",ujson:"5.10.0",uncertainties:"3.2.2",unyt:"3.0.3",urllib3:"2.5.0","vega-datasets":"0.9.0",wcwidth:"0.2.13",webencodings:"0.5.1",wordcloud:"1.9.4",wrapt:"1.17.2",xarray:"2025.1.2",xgboost:"2.1.4",xlrd:"2.0.1",xxhash:"3.5.0",xyzservices:"2025.1.0",yarl:"1.18.3",yt:"4.4.0",zengl:"2.7.1",zfpy:"1.0.1",zstandard:"0.23.0"},"0.28.2":{affine:"2.4.0",aiohappyeyeballs:"2.6.1",aiohttp:"3.11.13",aiosignal:"1.3.2",altair:"5.5.0","annotated-types":"0.7.0",anyio:"4.9.0",apsw:"3.49.1.0","argon2-cffi":"23.1.0","argon2-cffi-bindings":"21.2.0",asciitree:"0.3.3",astropy:"7.0.1",astropy_iers_data:"0.2025.3.10.0.29.26",asttokens:"3.0.0","async-timeout":"5.0.1",atomicwrites:"1.4.1",attrs:"25.2.0","audioop-lts":"0.2.1",autograd:"1.7.0","awkward-cpp":"47",b2d:"0.7.4",bcrypt:"4.3.0",beautifulsoup4:"4.13.3",biopython:"1.85",bitarray:"3.6.0",bitstring:"4.3.1",bleach:"6.2.0",blosc2:"3.5.1",bokeh:"3.6.3","boost-histogram":"1.5.0",brotli:"1.1.0",cachetools:"5.5.2",casadi:"3.7.0","cbor-diag":"1.0.1",certifi:"2025.7.14",cffi:"1.17.1",cffi_example:"0.1",cftime:"1.6.4.post1","charset-normalizer":"3.4.2",clarabel:"0.11.0",click:"8.2.1",cligj:"0.7.2",clingo:"5.7.1",cloudpickle:"3.1.1",cmyt:"2.0.2",cobs:"1.2.1",colorspacious:"1.1.2",contourpy:"1.3.1",coolprop:"6.6.0",coverage:"7.6.12",cramjam:"2.10.0rc1",crc32c:"2.7.1",cryptography:"45.0.5","css-inline":"0.16.0",cssselect:"1.3.0","cvxpy-base":"1.6.3",cycler:"0.12.1",cysignals:"1.12.3",cytoolz:"1.0.1",decorator:"5.2.1",demes:"0.2.3",deprecation:"2.1.0",diskcache:"5.6.3",distlib:"0.3.9",distro:"1.9.0",docutils:"0.21.2",donfig:"0.8.1.post1",ewah_bool_utils:"1.2.2",exceptiongroup:"1.2.2",executing:"2.2.0",fastparquet:"2024.11.0",fiona:"1.9.5",fonttools:"4.56.0",freesasa:"2.2.1",frozenlist:"1.6.0",fsspec:"2025.3.2",future:"1.0.0",galpy:"1.10.2",gmpy2:"2.1.5",gsw:"3.6.19",h11:"0.14.0",h3:"4.2.2",h5py:"3.13.0",html5lib:"1.1",httpcore:"1.0.7",httpx:"0.28.1",idna:"3.10",igraph:"0.11.8",imageio:"2.37.0","imgui-bundle":"1.92.0",iminuit:"2.30.1",iniconfig:"2.1.0",inspice:"1.6.3.3",ipython:"9.0.2",jedi:"0.19.2",Jinja2:"3.1.6",jiter:"0.9.0",joblib:"1.4.2",jsonschema:"4.23.0",jsonschema_specifications:"2024.10.1",kiwisolver:"1.4.8","lakers-python":"0.5.0",lazy_loader:"0.4","lazy-object-proxy":"1.10.0",libcst:"1.6.0",lightgbm:"4.6.0",logbook:"1.8.0",lxml:"6.0.0",lz4:"4.4.4",MarkupSafe:"3.0.2",matplotlib:"3.8.4","matplotlib-inline":"0.1.7","memory-allocator":"0.1.4",micropip:"0.10.1",mmh3:"5.1.0","more-itertools":"10.6.0",mpmath:"1.3.0",msgpack:"1.1.1",msgspec:"0.19.0",msprime:"1.3.3",multidict:"6.6.3",munch:"4.0.0",mypy:"1.15.0",narwhals:"1.46.0",ndindex:"1.9.2",netcdf4:"1.7.2",networkx:"3.4.2",newick:"1.9.0",nh3:"0.2.21",nlopt:"2.9.1",nltk:"3.9.1",numcodecs:"0.13.1",numpy:"2.2.5",openai:"1.68.2","opencv-python":"4.11.0.86",optlang:"1.8.3",orjson:"3.10.16",packaging:"24.2",pandas:"2.3.1",parso:"0.8.4",patsy:"1.0.1",pcodec:"0.3.3",peewee:"3.17.9","pi-heif":"0.21.0",Pillow:"11.3.0","pillow-heif":"1.0.0",pkgconfig:"1.5.5",platformdirs:"4.3.6",pluggy:"1.5.0",ply:"3.11",pplpy:"0.8.10",primecountpy:"0.1.1",prompt_toolkit:"3.0.50",propcache:"0.3.0",protobuf:"6.31.1","pure-eval":"0.2.3",py:"1.11.0",pyclipper:"1.3.0.post6",pycparser:"2.22",pycryptodome:"3.21.0",pydantic:"2.10.6",pydantic_core:"2.27.2",pyerfa:"2.0.1.5",Pygments:"2.19.1",pyheif:"0.8.0",pyiceberg:"0.9.0",pyinstrument:"5.0.1",PyMuPDF:"1.26.3",pynacl:"1.5.0","pyodide-http":"0.2.2","pyodide-unix-timezones":"1.0.0",pyparsing:"3.2.1",pyrsistent:"0.20.0",pysam:"0.23.0",pyshp:"2.3.1",pytaglib:"3.0.1",pytest:"8.3.5","pytest-asyncio":"0.25.3","pytest-benchmark":"4.0.0",pytest_httpx:"0.30.0","python-dateutil":"2.9.0.post0","python-flint":"0.7.1","python-magic":"0.4.27","python-sat":"1.8.dev17","python-solvespace":"3.0.8",pytz:"2025.2",pywavelets:"1.8.0",pyxel:"1.9.10",pyxirr:"0.10.6",pyyaml:"6.0.2",rasterio:"1.4.3",rateslib:"2.0.1",rebound:"4.4.7",reboundx:"4.4.1",referencing:"0.36.2",regex:"2024.11.6",requests:"2.32.4",retrying:"1.3.4",rich:"13.9.4",river:"0.22.0",RobotRaconteur:"1.2.5","rpds-py":"0.23.1","ruamel.yaml":"0.18.10",rustworkx:"0.17.0a3","scikit-image":"0.25.2","scikit-learn":"1.7.0",scipy:"1.14.1",screed:"1.1.3",setuptools:"76.0.0",shapely:"2.0.7",simplejson:"3.20.1",sisl:"0.16.2",six:"1.17.0","smart-open":"7.1.0",sniffio:"1.3.1",sortedcontainers:"2.4.0",soundfile:"0.12.1",soupsieve:"2.6",sourmash:"4.8.14",soxr:"0.5.0.post1",sparseqr:"1.2",sqlalchemy:"2.0.39","stack-data":"0.6.3",statsmodels:"0.14.4",strictyaml:"1.7.3",svgwrite:"1.4.3",swiglpk:"5.0.12",sympy:"1.13.3",tblib:"3.0.0",termcolor:"2.5.0",texttable:"1.7.0",texture2ddecoder:"1.0.5",threadpoolctl:"3.5.0",tiktoken:"0.9.0",tomli:"2.2.1","tomli-w":"1.2.0",toolz:"1.0.0",tqdm:"4.67.1",traitlets:"5.14.3",traits:"7.0.2","tree-sitter":"0.23.2","tree-sitter-go":"0.23.3","tree-sitter-java":"0.23.4","tree-sitter-python":"0.23.4",tskit:"0.6.4","typing-extensions":"4.14.1",tzdata:"2025.2",ujson:"5.10.0",uncertainties:"3.2.2",unyt:"3.0.3",urllib3:"2.5.0","vega-datasets":"0.9.0",wcwidth:"0.2.13",webencodings:"0.5.1",wordcloud:"1.9.4",wrapt:"1.17.2",xarray:"2025.1.2",xgboost:"2.1.4",xlrd:"2.0.1",xxhash:"3.5.0",xyzservices:"2025.1.0",yarl:"1.18.3",yt:"4.4.0",zengl:"2.7.1",zfpy:"1.0.1",zstandard:"0.23.0"},"0.28.1":{affine:"2.4.0",aiohappyeyeballs:"2.6.1",aiohttp:"3.11.13",aiosignal:"1.3.2",altair:"5.5.0","annotated-types":"0.7.0",anyio:"4.9.0",apsw:"3.49.1.0","argon2-cffi":"23.1.0","argon2-cffi-bindings":"21.2.0",asciitree:"0.3.3",astropy:"7.0.1",astropy_iers_data:"0.2025.3.10.0.29.26",asttokens:"3.0.0","async-timeout":"5.0.1",atomicwrites:"1.4.1",attrs:"25.2.0","audioop-lts":"0.2.1",autograd:"1.7.0","awkward-cpp":"47",b2d:"0.7.4",bcrypt:"4.3.0",beautifulsoup4:"4.13.3",biopython:"1.85",bitarray:"3.6.0",bitstring:"4.3.1",bleach:"6.2.0",blosc2:"3.5.1",bokeh:"3.6.3","boost-histogram":"1.5.0",brotli:"1.1.0",cachetools:"5.5.2",casadi:"3.7.0","cbor-diag":"1.0.1",certifi:"2025.7.14",cffi:"1.17.1",cffi_example:"0.1",cftime:"1.6.4.post1","charset-normalizer":"3.4.2",clarabel:"0.11.0",click:"8.2.1",cligj:"0.7.2",clingo:"5.7.1",cloudpickle:"3.1.1",cmyt:"2.0.2",cobs:"1.2.1",colorspacious:"1.1.2",contourpy:"1.3.1",coolprop:"6.6.0",coverage:"7.6.12",cramjam:"2.10.0rc1",crc32c:"2.7.1",cryptography:"45.0.5","css-inline":"0.16.0",cssselect:"1.3.0","cvxpy-base":"1.6.3",cycler:"0.12.1",cysignals:"1.12.3",cytoolz:"1.0.1",decorator:"5.2.1",demes:"0.2.3",deprecation:"2.1.0",diskcache:"5.6.3",distlib:"0.3.9",distro:"1.9.0",docutils:"0.21.2",donfig:"0.8.1.post1",ewah_bool_utils:"1.2.2",exceptiongroup:"1.2.2",executing:"2.2.0",fastparquet:"2024.11.0",fiona:"1.9.5",fonttools:"4.56.0",freesasa:"2.2.1",frozenlist:"1.6.0",fsspec:"2025.3.2",future:"1.0.0",galpy:"1.10.2",gmpy2:"2.1.5",gsw:"3.6.19",h11:"0.14.0",h3:"4.2.2",h5py:"3.13.0",html5lib:"1.1",httpcore:"1.0.7",httpx:"0.28.1",idna:"3.10",igraph:"0.11.8",imageio:"2.37.0","imgui-bundle":"1.92.0",iminuit:"2.30.1",iniconfig:"2.1.0",inspice:"1.6.3.3",ipython:"9.0.2",jedi:"0.19.2",Jinja2:"3.1.6",jiter:"0.9.0",joblib:"1.4.2",jsonschema:"4.23.0",jsonschema_specifications:"2024.10.1",kiwisolver:"1.4.8","lakers-python":"0.5.0",lazy_loader:"0.4","lazy-object-proxy":"1.10.0",libcst:"1.6.0",lightgbm:"4.6.0",logbook:"1.8.0",lxml:"6.0.0",lz4:"4.4.4",MarkupSafe:"3.0.2",matplotlib:"3.8.4","matplotlib-inline":"0.1.7","memory-allocator":"0.1.4",micropip:"0.10.1",mmh3:"5.1.0","more-itertools":"10.6.0",mpmath:"1.3.0",msgpack:"1.1.1",msgspec:"0.19.0",msprime:"1.3.3",multidict:"6.6.3",munch:"4.0.0",mypy:"1.15.0",narwhals:"1.46.0",ndindex:"1.9.2",netcdf4:"1.7.2",networkx:"3.4.2",newick:"1.9.0",nh3:"0.2.21",nlopt:"2.9.1",nltk:"3.9.1",numcodecs:"0.13.1",numpy:"2.2.5",openai:"1.68.2","opencv-python":"4.11.0.86",optlang:"1.8.3",orjson:"3.10.16",packaging:"24.2",pandas:"2.3.1",parso:"0.8.4",patsy:"1.0.1",pcodec:"0.3.3",peewee:"3.17.9","pi-heif":"0.21.0",Pillow:"11.3.0","pillow-heif":"1.0.0",pkgconfig:"1.5.5",platformdirs:"4.3.6",pluggy:"1.5.0",ply:"3.11",pplpy:"0.8.10",primecountpy:"0.1.1",prompt_toolkit:"3.0.50",propcache:"0.3.0",protobuf:"6.31.1","pure-eval":"0.2.3",py:"1.11.0",pyclipper:"1.3.0.post6",pycparser:"2.22",pycryptodome:"3.21.0",pydantic:"2.10.6",pydantic_core:"2.27.2",pyerfa:"2.0.1.5",Pygments:"2.19.1",pyheif:"0.8.0",pyiceberg:"0.9.0",pyinstrument:"5.0.1",PyMuPDF:"1.26.3",pynacl:"1.5.0","pyodide-http":"0.2.2","pyodide-unix-timezones":"1.0.0",pyparsing:"3.2.1",pyrsistent:"0.20.0",pysam:"0.23.0",pyshp:"2.3.1",pytaglib:"3.0.1",pytest:"8.3.5","pytest-asyncio":"0.25.3","pytest-benchmark":"4.0.0",pytest_httpx:"0.30.0","python-dateutil":"2.9.0.post0","python-flint":"0.7.1","python-magic":"0.4.27","python-sat":"1.8.dev17","python-solvespace":"3.0.8",pytz:"2025.2",pywavelets:"1.8.0",pyxel:"1.9.10",pyxirr:"0.10.6",pyyaml:"6.0.2",rasterio:"1.4.3",rateslib:"2.0.1",rebound:"4.4.7",reboundx:"4.4.1",referencing:"0.36.2",regex:"2024.11.6",requests:"2.32.4",retrying:"1.3.4",rich:"13.9.4",river:"0.22.0",RobotRaconteur:"1.2.5","rpds-py":"0.23.1","ruamel.yaml":"0.18.10",rustworkx:"0.17.0a3","scikit-image":"0.25.2","scikit-learn":"1.7.0",scipy:"1.14.1",screed:"1.1.3",setuptools:"76.0.0",shapely:"2.0.7",simplejson:"3.20.1",sisl:"0.16.2",six:"1.17.0","smart-open":"7.1.0",sniffio:"1.3.1",sortedcontainers:"2.4.0",soundfile:"0.12.1",soupsieve:"2.6",sourmash:"4.8.14",soxr:"0.5.0.post1",sparseqr:"1.2",sqlalchemy:"2.0.39","stack-data":"0.6.3",statsmodels:"0.14.4",strictyaml:"1.7.3",svgwrite:"1.4.3",swiglpk:"5.0.12",sympy:"1.13.3",tblib:"3.0.0",termcolor:"2.5.0",texttable:"1.7.0",texture2ddecoder:"1.0.5",threadpoolctl:"3.5.0",tiktoken:"0.9.0",tomli:"2.2.1","tomli-w":"1.2.0",toolz:"1.0.0",tqdm:"4.67.1",traitlets:"5.14.3",traits:"7.0.2","tree-sitter":"0.23.2","tree-sitter-go":"0.23.3","tree-sitter-java":"0.23.4","tree-sitter-python":"0.23.4",tskit:"0.6.4","typing-extensions":"4.14.1",tzdata:"2025.2",ujson:"5.10.0",uncertainties:"3.2.2",unyt:"3.0.3",urllib3:"2.5.0","vega-datasets":"0.9.0",wcwidth:"0.2.13",webencodings:"0.5.1",wordcloud:"1.9.4",wrapt:"1.17.2",xarray:"2025.1.2",xgboost:"2.1.4",xlrd:"2.0.1",xxhash:"3.5.0",xyzservices:"2025.1.0",yarl:"1.18.3",yt:"4.4.0",zengl:"2.7.1",zfpy:"1.0.1",zstandard:"0.23.0"},"0.28.0":{affine:"2.4.0",aiohappyeyeballs:"2.6.1",aiohttp:"3.11.13",aiosignal:"1.3.2",altair:"5.5.0","annotated-types":"0.7.0",anyio:"4.9.0",apsw:"3.49.1.0","argon2-cffi":"23.1.0","argon2-cffi-bindings":"21.2.0",asciitree:"0.3.3",astropy:"7.0.1",astropy_iers_data:"0.2025.3.10.0.29.26",asttokens:"3.0.0","async-timeout":"5.0.1",atomicwrites:"1.4.1",attrs:"25.2.0","audioop-lts":"0.2.1",autograd:"1.7.0","awkward-cpp":"47",b2d:"0.7.4",bcrypt:"4.3.0",beautifulsoup4:"4.13.3",biopython:"1.85",bitarray:"3.6.0",bitstring:"4.3.1",bleach:"6.2.0",blosc2:"3.5.1",bokeh:"3.6.3","boost-histogram":"1.5.0",brotli:"1.1.0",cachetools:"5.5.2",casadi:"3.7.0","cbor-diag":"1.0.1",certifi:"2025.7.14",cffi:"1.17.1",cffi_example:"0.1",cftime:"1.6.4.post1","charset-normalizer":"3.4.2",clarabel:"0.11.0",click:"8.2.1",cligj:"0.7.2",clingo:"5.7.1",cloudpickle:"3.1.1",cmyt:"2.0.2",cobs:"1.2.1",colorspacious:"1.1.2",contourpy:"1.3.1",coolprop:"6.6.0",coverage:"7.6.12",cramjam:"2.10.0rc1",crc32c:"2.7.1",cryptography:"45.0.5","css-inline":"0.16.0",cssselect:"1.3.0","cvxpy-base":"1.6.3",cycler:"0.12.1",cysignals:"1.12.3",cytoolz:"1.0.1",decorator:"5.2.1",demes:"0.2.3",deprecation:"2.1.0",diskcache:"5.6.3",distlib:"0.3.9",distro:"1.9.0",docutils:"0.21.2",donfig:"0.8.1.post1",ewah_bool_utils:"1.2.2",exceptiongroup:"1.2.2",executing:"2.2.0",fastparquet:"2024.11.0",fiona:"1.9.5",fonttools:"4.56.0",freesasa:"2.2.1",frozenlist:"1.6.0",fsspec:"2025.3.2",future:"1.0.0",galpy:"1.10.2",gmpy2:"2.1.5",gsw:"3.6.19",h11:"0.14.0",h3:"4.2.2",h5py:"3.13.0",html5lib:"1.1",httpcore:"1.0.7",httpx:"0.28.1",idna:"3.10",igraph:"0.11.8",imageio:"2.37.0","imgui-bundle":"1.92.0",iminuit:"2.30.1",iniconfig:"2.1.0",inspice:"1.6.3.3",ipython:"9.0.2",jedi:"0.19.2",Jinja2:"3.1.6",jiter:"0.9.0",joblib:"1.4.2",jsonschema:"4.23.0",jsonschema_specifications:"2024.10.1",kiwisolver:"1.4.8","lakers-python":"0.5.0",lazy_loader:"0.4","lazy-object-proxy":"1.10.0",libcst:"1.6.0",lightgbm:"4.6.0",logbook:"1.8.0",lxml:"6.0.0",lz4:"4.4.4",MarkupSafe:"3.0.2",matplotlib:"3.8.4","matplotlib-inline":"0.1.7","memory-allocator":"0.1.4",micropip:"0.10.1",mmh3:"5.1.0","more-itertools":"10.6.0",mpmath:"1.3.0",msgpack:"1.1.1",msgspec:"0.19.0",msprime:"1.3.3",multidict:"6.6.3",munch:"4.0.0",mypy:"1.15.0",narwhals:"1.46.0",ndindex:"1.9.2",netcdf4:"1.7.2",networkx:"3.4.2",newick:"1.9.0",nh3:"0.2.21",nlopt:"2.9.1",nltk:"3.9.1",numcodecs:"0.13.1",numpy:"2.2.5",openai:"1.68.2","opencv-python":"4.11.0.86",optlang:"1.8.3",orjson:"3.10.16",packaging:"24.2",pandas:"2.3.1",parso:"0.8.4",patsy:"1.0.1",pcodec:"0.3.3",peewee:"3.17.9","pi-heif":"0.21.0",Pillow:"11.3.0","pillow-heif":"1.0.0",pkgconfig:"1.5.5",platformdirs:"4.3.6",pluggy:"1.5.0",ply:"3.11",pplpy:"0.8.10",primecountpy:"0.1.1",prompt_toolkit:"3.0.50",propcache:"0.3.0",protobuf:"6.31.1","pure-eval":"0.2.3",py:"1.11.0",pyclipper:"1.3.0.post6",pycparser:"2.22",pycryptodome:"3.21.0",pydantic:"2.10.6",pydantic_core:"2.27.2",pyerfa:"2.0.1.5",Pygments:"2.19.1",pyheif:"0.8.0",pyiceberg:"0.9.0",pyinstrument:"5.0.1",PyMuPDF:"1.26.3",pynacl:"1.5.0","pyodide-http":"0.2.2","pyodide-unix-timezones":"1.0.0",pyparsing:"3.2.1",pyrsistent:"0.20.0",pysam:"0.23.0",pyshp:"2.3.1",pytaglib:"3.0.1",pytest:"8.3.5","pytest-asyncio":"0.25.3","pytest-benchmark":"4.0.0",pytest_httpx:"0.30.0","python-dateutil":"2.9.0.post0","python-flint":"0.7.1","python-magic":"0.4.27","python-sat":"1.8.dev17","python-solvespace":"3.0.8",pytz:"2025.2",pywavelets:"1.8.0",pyxel:"1.9.10",pyxirr:"0.10.6",pyyaml:"6.0.2",rasterio:"1.4.3",rateslib:"2.0.1",rebound:"4.4.7",reboundx:"4.4.1",referencing:"0.36.2",regex:"2024.11.6",requests:"2.32.4",retrying:"1.3.4",rich:"13.9.4",river:"0.22.0",RobotRaconteur:"1.2.5","rpds-py":"0.23.1","ruamel.yaml":"0.18.10",rustworkx:"0.17.0a3","scikit-image":"0.25.2","scikit-learn":"1.7.0",scipy:"1.14.1",screed:"1.1.3",setuptools:"76.0.0",shapely:"2.0.7",simplejson:"3.20.1",sisl:"0.16.2",six:"1.17.0","smart-open":"7.1.0",sniffio:"1.3.1",sortedcontainers:"2.4.0",soundfile:"0.12.1",soupsieve:"2.6",sourmash:"4.8.14",soxr:"0.5.0.post1",sparseqr:"1.2",sqlalchemy:"2.0.39","stack-data":"0.6.3",statsmodels:"0.14.4",strictyaml:"1.7.3",svgwrite:"1.4.3",swiglpk:"5.0.12",sympy:"1.13.3",tblib:"3.0.0",termcolor:"2.5.0",texttable:"1.7.0",texture2ddecoder:"1.0.5",threadpoolctl:"3.5.0",tiktoken:"0.9.0",tomli:"2.2.1","tomli-w":"1.2.0",toolz:"1.0.0",tqdm:"4.67.1",traitlets:"5.14.3",traits:"7.0.2","tree-sitter":"0.23.2","tree-sitter-go":"0.23.3","tree-sitter-java":"0.23.4","tree-sitter-python":"0.23.4",tskit:"0.6.4","typing-extensions":"4.14.1",tzdata:"2025.2",ujson:"5.10.0",uncertainties:"3.2.2",unyt:"3.0.3",urllib3:"2.5.0","vega-datasets":"0.9.0",wcwidth:"0.2.13",webencodings:"0.5.1",wordcloud:"1.9.4",wrapt:"1.17.2",xarray:"2025.1.2",xgboost:"2.1.4",xlrd:"2.0.1",xxhash:"3.5.0",xyzservices:"2025.1.0",yarl:"1.18.3",yt:"4.4.0",zengl:"2.7.1",zfpy:"1.0.1",zstandard:"0.23.0"},"0.27.7":{affine:"2.4.0",aiohappyeyeballs:"2.6.1",aiohttp:"3.11.13",aiosignal:"1.3.2",altair:"5.5.0","annotated-types":"0.7.0",anyio:"4.9.0",apsw:"3.49.1.0","argon2-cffi":"23.1.0","argon2-cffi-bindings":"21.2.0",asciitree:"0.3.3",astropy:"7.0.1",astropy_iers_data:"0.2025.3.10.0.29.26",asttokens:"3.0.0","async-timeout":"5.0.1",atomicwrites:"1.4.1",attrs:"25.2.0","audioop-lts":"0.2.1",autograd:"1.7.0","awkward-cpp":"47",b2d:"0.7.4",bcrypt:"4.3.0",beautifulsoup4:"4.13.3",biopython:"1.85",bitarray:"3.6.0",bitstring:"4.3.1",bleach:"6.2.0",blosc2:"3.5.1",bokeh:"3.6.3","boost-histogram":"1.5.0",brotli:"1.1.0",cachetools:"5.5.2",casadi:"3.7.0","cbor-diag":"1.0.1",certifi:"2025.7.14",cffi:"1.17.1",cffi_example:"0.1",cftime:"1.6.4.post1","charset-normalizer":"3.4.2",clarabel:"0.11.0",click:"8.2.1",cligj:"0.7.2",clingo:"5.7.1",cloudpickle:"3.1.1",cmyt:"2.0.2",cobs:"1.2.1",colorspacious:"1.1.2",contourpy:"1.3.1",coolprop:"6.6.0",coverage:"7.6.12",cramjam:"2.10.0rc1",crc32c:"2.7.1",cryptography:"45.0.5","css-inline":"0.16.0",cssselect:"1.3.0","cvxpy-base":"1.6.3",cycler:"0.12.1",cysignals:"1.12.3",cytoolz:"1.0.1",decorator:"5.2.1",demes:"0.2.3",deprecation:"2.1.0",diskcache:"5.6.3",distlib:"0.3.9",distro:"1.9.0",docutils:"0.21.2",donfig:"0.8.1.post1",ewah_bool_utils:"1.2.2",exceptiongroup:"1.2.2",executing:"2.2.0",fastparquet:"2024.11.0",fiona:"1.9.5",fonttools:"4.56.0",freesasa:"2.2.1",frozenlist:"1.6.0",fsspec:"2025.3.2",future:"1.0.0",galpy:"1.10.2",gmpy2:"2.1.5",gsw:"3.6.19",h11:"0.14.0",h3:"4.2.2",h5py:"3.13.0",html5lib:"1.1",httpcore:"1.0.7",httpx:"0.28.1",idna:"3.10",igraph:"0.11.8",imageio:"2.37.0","imgui-bundle":"1.92.0",iminuit:"2.30.1",iniconfig:"2.1.0",inspice:"1.6.3.3",ipython:"9.0.2",jedi:"0.19.2",Jinja2:"3.1.6",jiter:"0.9.0",joblib:"1.4.2",jsonschema:"4.23.0",jsonschema_specifications:"2024.10.1",kiwisolver:"1.4.8","lakers-python":"0.5.0",lazy_loader:"0.4","lazy-object-proxy":"1.10.0",libcst:"1.6.0",lightgbm:"4.6.0",logbook:"1.8.0",lxml:"6.0.0",lz4:"4.4.4",MarkupSafe:"3.0.2",matplotlib:"3.8.4","matplotlib-inline":"0.1.7","memory-allocator":"0.1.4",micropip:"0.10.1",mmh3:"5.1.0","more-itertools":"10.6.0",mpmath:"1.3.0",msgpack:"1.1.1",msgspec:"0.19.0",msprime:"1.3.3",multidict:"6.6.3",munch:"4.0.0",mypy:"1.15.0",narwhals:"1.46.0",ndindex:"1.9.2",netcdf4:"1.7.2",networkx:"3.4.2",newick:"1.9.0",nh3:"0.2.21",nlopt:"2.9.1",nltk:"3.9.1",numcodecs:"0.13.1",numpy:"2.2.5",openai:"1.68.2","opencv-python":"4.11.0.86",optlang:"1.8.3",orjson:"3.10.16",packaging:"24.2",pandas:"2.3.1",parso:"0.8.4",patsy:"1.0.1",pcodec:"0.3.3",peewee:"3.17.9","pi-heif":"0.21.0",Pillow:"11.3.0","pillow-heif":"1.0.0",pkgconfig:"1.5.5",platformdirs:"4.3.6",pluggy:"1.5.0",ply:"3.11",pplpy:"0.8.10",primecountpy:"0.1.1",prompt_toolkit:"3.0.50",propcache:"0.3.0",protobuf:"6.31.1","pure-eval":"0.2.3",py:"1.11.0",pyclipper:"1.3.0.post6",pycparser:"2.22",pycryptodome:"3.21.0",pydantic:"2.10.6",pydantic_core:"2.27.2",pyerfa:"2.0.1.5",Pygments:"2.19.1",pyheif:"0.8.0",pyiceberg:"0.9.0",pyinstrument:"5.0.1",PyMuPDF:"1.26.3",pynacl:"1.5.0","pyodide-http":"0.2.2","pyodide-unix-timezones":"1.0.0",pyparsing:"3.2.1",pyrsistent:"0.20.0",pysam:"0.23.0",pyshp:"2.3.1",pytaglib:"3.0.1",pytest:"8.3.5","pytest-asyncio":"0.25.3","pytest-benchmark":"4.0.0",pytest_httpx:"0.30.0","python-dateutil":"2.9.0.post0","python-flint":"0.7.1","python-magic":"0.4.27","python-sat":"1.8.dev17","python-solvespace":"3.0.8",pytz:"2025.2",pywavelets:"1.8.0",pyxel:"1.9.10",pyxirr:"0.10.6",pyyaml:"6.0.2",rasterio:"1.4.3",rateslib:"2.0.1",rebound:"4.4.7",reboundx:"4.4.1",referencing:"0.36.2",regex:"2024.11.6",requests:"2.32.4",retrying:"1.3.4",rich:"13.9.4",river:"0.22.0",RobotRaconteur:"1.2.5","rpds-py":"0.23.1","ruamel.yaml":"0.18.10",rustworkx:"0.17.0a3","scikit-image":"0.25.2","scikit-learn":"1.7.0",scipy:"1.14.1",screed:"1.1.3",setuptools:"76.0.0",shapely:"2.0.7",simplejson:"3.20.1",sisl:"0.16.2",six:"1.17.0","smart-open":"7.1.0",sniffio:"1.3.1",sortedcontainers:"2.4.0",soundfile:"0.12.1",soupsieve:"2.6",sourmash:"4.8.14",soxr:"0.5.0.post1",sparseqr:"1.2",sqlalchemy:"2.0.39","stack-data":"0.6.3",statsmodels:"0.14.4",strictyaml:"1.7.3",svgwrite:"1.4.3",swiglpk:"5.0.12",sympy:"1.13.3",tblib:"3.0.0",termcolor:"2.5.0",texttable:"1.7.0",texture2ddecoder:"1.0.5",threadpoolctl:"3.5.0",tiktoken:"0.9.0",tomli:"2.2.1","tomli-w":"1.2.0",toolz:"1.0.0",tqdm:"4.67.1",traitlets:"5.14.3",traits:"7.0.2","tree-sitter":"0.23.2","tree-sitter-go":"0.23.3","tree-sitter-java":"0.23.4","tree-sitter-python":"0.23.4",tskit:"0.6.4","typing-extensions":"4.14.1",tzdata:"2025.2",ujson:"5.10.0",uncertainties:"3.2.2",unyt:"3.0.3",urllib3:"2.5.0","vega-datasets":"0.9.0",wcwidth:"0.2.13",webencodings:"0.5.1",wordcloud:"1.9.4",wrapt:"1.17.2",xarray:"2025.1.2",xgboost:"2.1.4",xlrd:"2.0.1",xxhash:"3.5.0",xyzservices:"2025.1.0",yarl:"1.18.3",yt:"4.4.0",zengl:"2.7.1",zfpy:"1.0.1",zstandard:"0.23.0"},"0.27.6":{affine:"2.4.0",aiohappyeyeballs:"2.6.1",aiohttp:"3.11.13",aiosignal:"1.3.2",altair:"5.5.0","annotated-types":"0.7.0",anyio:"4.9.0",apsw:"3.49.1.0","argon2-cffi":"23.1.0","argon2-cffi-bindings":"21.2.0",asciitree:"0.3.3",astropy:"7.0.1",astropy_iers_data:"0.2025.3.10.0.29.26",asttokens:"3.0.0","async-timeout":"5.0.1",atomicwrites:"1.4.1",attrs:"25.2.0","audioop-lts":"0.2.1",autograd:"1.7.0","awkward-cpp":"47",b2d:"0.7.4",bcrypt:"4.3.0",beautifulsoup4:"4.13.3",biopython:"1.85",bitarray:"3.6.0",bitstring:"4.3.1",bleach:"6.2.0",blosc2:"3.5.1",bokeh:"3.6.3","boost-histogram":"1.5.0",brotli:"1.1.0",cachetools:"5.5.2",casadi:"3.7.0","cbor-diag":"1.0.1",certifi:"2025.7.14",cffi:"1.17.1",cffi_example:"0.1",cftime:"1.6.4.post1","charset-normalizer":"3.4.2",clarabel:"0.11.0",click:"8.2.1",cligj:"0.7.2",clingo:"5.7.1",cloudpickle:"3.1.1",cmyt:"2.0.2",cobs:"1.2.1",colorspacious:"1.1.2",contourpy:"1.3.1",coolprop:"6.6.0",coverage:"7.6.12",cramjam:"2.10.0rc1",crc32c:"2.7.1",cryptography:"45.0.5","css-inline":"0.16.0",cssselect:"1.3.0","cvxpy-base":"1.6.3",cycler:"0.12.1",cysignals:"1.12.3",cytoolz:"1.0.1",decorator:"5.2.1",demes:"0.2.3",deprecation:"2.1.0",diskcache:"5.6.3",distlib:"0.3.9",distro:"1.9.0",docutils:"0.21.2",donfig:"0.8.1.post1",ewah_bool_utils:"1.2.2",exceptiongroup:"1.2.2",executing:"2.2.0",fastparquet:"2024.11.0",fiona:"1.9.5",fonttools:"4.56.0",freesasa:"2.2.1",frozenlist:"1.6.0",fsspec:"2025.3.2",future:"1.0.0",galpy:"1.10.2",gmpy2:"2.1.5",gsw:"3.6.19",h11:"0.14.0",h3:"4.2.2",h5py:"3.13.0",html5lib:"1.1",httpcore:"1.0.7",httpx:"0.28.1",idna:"3.10",igraph:"0.11.8",imageio:"2.37.0","imgui-bundle":"1.92.0",iminuit:"2.30.1",iniconfig:"2.1.0",inspice:"1.6.3.3",ipython:"9.0.2",jedi:"0.19.2",Jinja2:"3.1.6",jiter:"0.9.0",joblib:"1.4.2",jsonschema:"4.23.0",jsonschema_specifications:"2024.10.1",kiwisolver:"1.4.8","lakers-python":"0.5.0",lazy_loader:"0.4","lazy-object-proxy":"1.10.0",libcst:"1.6.0",lightgbm:"4.6.0",logbook:"1.8.0",lxml:"6.0.0",lz4:"4.4.4",MarkupSafe:"3.0.2",matplotlib:"3.8.4","matplotlib-inline":"0.1.7","memory-allocator":"0.1.4",micropip:"0.10.1",mmh3:"5.1.0","more-itertools":"10.6.0",mpmath:"1.3.0",msgpack:"1.1.1",msgspec:"0.19.0",msprime:"1.3.3",multidict:"6.6.3",munch:"4.0.0",mypy:"1.15.0",narwhals:"1.46.0",ndindex:"1.9.2",netcdf4:"1.7.2",networkx:"3.4.2",newick:"1.9.0",nh3:"0.2.21",nlopt:"2.9.1",nltk:"3.9.1",numcodecs:"0.13.1",numpy:"2.2.5",openai:"1.68.2","opencv-python":"4.11.0.86",optlang:"1.8.3",orjson:"3.10.16",packaging:"24.2",pandas:"2.3.1",parso:"0.8.4",patsy:"1.0.1",pcodec:"0.3.3",peewee:"3.17.9","pi-heif":"0.21.0",Pillow:"11.3.0","pillow-heif":"1.0.0",pkgconfig:"1.5.5",platformdirs:"4.3.6",pluggy:"1.5.0",ply:"3.11",pplpy:"0.8.10",primecountpy:"0.1.1",prompt_toolkit:"3.0.50",propcache:"0.3.0",protobuf:"6.31.1","pure-eval":"0.2.3",py:"1.11.0",pyclipper:"1.3.0.post6",pycparser:"2.22",pycryptodome:"3.21.0",pydantic:"2.10.6",pydantic_core:"2.27.2",pyerfa:"2.0.1.5",Pygments:"2.19.1",pyheif:"0.8.0",pyiceberg:"0.9.0",pyinstrument:"5.0.1",PyMuPDF:"1.26.3",pynacl:"1.5.0","pyodide-http":"0.2.2","pyodide-unix-timezones":"1.0.0",pyparsing:"3.2.1",pyrsistent:"0.20.0",pysam:"0.23.0",pyshp:"2.3.1",pytaglib:"3.0.1",pytest:"8.3.5","pytest-asyncio":"0.25.3","pytest-benchmark":"4.0.0",pytest_httpx:"0.30.0","python-dateutil":"2.9.0.post0","python-flint":"0.7.1","python-magic":"0.4.27","python-sat":"1.8.dev17","python-solvespace":"3.0.8",pytz:"2025.2",pywavelets:"1.8.0",pyxel:"1.9.10",pyxirr:"0.10.6",pyyaml:"6.0.2",rasterio:"1.4.3",rateslib:"2.0.1",rebound:"4.4.7",reboundx:"4.4.1",referencing:"0.36.2",regex:"2024.11.6",requests:"2.32.4",retrying:"1.3.4",rich:"13.9.4",river:"0.22.0",RobotRaconteur:"1.2.5","rpds-py":"0.23.1","ruamel.yaml":"0.18.10",rustworkx:"0.17.0a3","scikit-image":"0.25.2","scikit-learn":"1.7.0",scipy:"1.14.1",screed:"1.1.3",setuptools:"76.0.0",shapely:"2.0.7",simplejson:"3.20.1",sisl:"0.16.2",six:"1.17.0","smart-open":"7.1.0",sniffio:"1.3.1",sortedcontainers:"2.4.0",soundfile:"0.12.1",soupsieve:"2.6",sourmash:"4.8.14",soxr:"0.5.0.post1",sparseqr:"1.2",sqlalchemy:"2.0.39","stack-data":"0.6.3",statsmodels:"0.14.4",strictyaml:"1.7.3",svgwrite:"1.4.3",swiglpk:"5.0.12",sympy:"1.13.3",tblib:"3.0.0",termcolor:"2.5.0",texttable:"1.7.0",texture2ddecoder:"1.0.5",threadpoolctl:"3.5.0",tiktoken:"0.9.0",tomli:"2.2.1","tomli-w":"1.2.0",toolz:"1.0.0",tqdm:"4.67.1",traitlets:"5.14.3",traits:"7.0.2","tree-sitter":"0.23.2","tree-sitter-go":"0.23.3","tree-sitter-java":"0.23.4","tree-sitter-python":"0.23.4",tskit:"0.6.4","typing-extensions":"4.14.1",tzdata:"2025.2",ujson:"5.10.0",uncertainties:"3.2.2",unyt:"3.0.3",urllib3:"2.5.0","vega-datasets":"0.9.0",wcwidth:"0.2.13",webencodings:"0.5.1",wordcloud:"1.9.4",wrapt:"1.17.2",xarray:"2025.1.2",xgboost:"2.1.4",xlrd:"2.0.1",xxhash:"3.5.0",xyzservices:"2025.1.0",yarl:"1.18.3",yt:"4.4.0",zengl:"2.7.1",zfpy:"1.0.1",zstandard:"0.23.0"},"0.27.5":{affine:"2.4.0",aiohappyeyeballs:"2.6.1",aiohttp:"3.11.13",aiosignal:"1.3.2",altair:"5.5.0","annotated-types":"0.7.0",anyio:"4.9.0",apsw:"3.49.1.0","argon2-cffi":"23.1.0","argon2-cffi-bindings":"21.2.0",asciitree:"0.3.3",astropy:"7.0.1",astropy_iers_data:"0.2025.3.10.0.29.26",asttokens:"3.0.0","async-timeout":"5.0.1",atomicwrites:"1.4.1",attrs:"25.2.0","audioop-lts":"0.2.1",autograd:"1.7.0","awkward-cpp":"47",b2d:"0.7.4",bcrypt:"4.3.0",beautifulsoup4:"4.13.3",biopython:"1.85",bitarray:"3.6.0",bitstring:"4.3.1",bleach:"6.2.0",blosc2:"3.5.1",bokeh:"3.6.3","boost-histogram":"1.5.0",brotli:"1.1.0",cachetools:"5.5.2",casadi:"3.7.0","cbor-diag":"1.0.1",certifi:"2025.7.14",cffi:"1.17.1",cffi_example:"0.1",cftime:"1.6.4.post1","charset-normalizer":"3.4.2",clarabel:"0.11.0",click:"8.2.1",cligj:"0.7.2",clingo:"5.7.1",cloudpickle:"3.1.1",cmyt:"2.0.2",cobs:"1.2.1",colorspacious:"1.1.2",contourpy:"1.3.1",coolprop:"6.6.0",coverage:"7.6.12",cramjam:"2.10.0rc1",crc32c:"2.7.1",cryptography:"45.0.5","css-inline":"0.16.0",cssselect:"1.3.0","cvxpy-base":"1.6.3",cycler:"0.12.1",cysignals:"1.12.3",cytoolz:"1.0.1",decorator:"5.2.1",demes:"0.2.3",deprecation:"2.1.0",diskcache:"5.6.3",distlib:"0.3.9",distro:"1.9.0",docutils:"0.21.2",donfig:"0.8.1.post1",ewah_bool_utils:"1.2.2",exceptiongroup:"1.2.2",executing:"2.2.0",fastparquet:"2024.11.0",fiona:"1.9.5",fonttools:"4.56.0",freesasa:"2.2.1",frozenlist:"1.6.0",fsspec:"2025.3.2",future:"1.0.0",galpy:"1.10.2",gmpy2:"2.1.5",gsw:"3.6.19",h11:"0.14.0",h3:"4.2.2",h5py:"3.13.0",html5lib:"1.1",httpcore:"1.0.7",httpx:"0.28.1",idna:"3.10",igraph:"0.11.8",imageio:"2.37.0","imgui-bundle":"1.92.0",iminuit:"2.30.1",iniconfig:"2.1.0",inspice:"1.6.3.3",ipython:"9.0.2",jedi:"0.19.2",Jinja2:"3.1.6",jiter:"0.9.0",joblib:"1.4.2",jsonschema:"4.23.0",jsonschema_specifications:"2024.10.1",kiwisolver:"1.4.8","lakers-python":"0.5.0",lazy_loader:"0.4","lazy-object-proxy":"1.10.0",libcst:"1.6.0",lightgbm:"4.6.0",logbook:"1.8.0",lxml:"6.0.0",lz4:"4.4.4",MarkupSafe:"3.0.2",matplotlib:"3.8.4","matplotlib-inline":"0.1.7","memory-allocator":"0.1.4",micropip:"0.10.1",mmh3:"5.1.0","more-itertools":"10.6.0",mpmath:"1.3.0",msgpack:"1.1.1",msgspec:"0.19.0",msprime:"1.3.3",multidict:"6.6.3",munch:"4.0.0",mypy:"1.15.0",narwhals:"1.46.0",ndindex:"1.9.2",netcdf4:"1.7.2",networkx:"3.4.2",newick:"1.9.0",nh3:"0.2.21",nlopt:"2.9.1",nltk:"3.9.1",numcodecs:"0.13.1",numpy:"2.2.5",openai:"1.68.2","opencv-python":"4.11.0.86",optlang:"1.8.3",orjson:"3.10.16",packaging:"24.2",pandas:"2.3.1",parso:"0.8.4",patsy:"1.0.1",pcodec:"0.3.3",peewee:"3.17.9","pi-heif":"0.21.0",Pillow:"11.3.0","pillow-heif":"1.0.0",pkgconfig:"1.5.5",platformdirs:"4.3.6",pluggy:"1.5.0",ply:"3.11",pplpy:"0.8.10",primecountpy:"0.1.1",prompt_toolkit:"3.0.50",propcache:"0.3.0",protobuf:"6.31.1","pure-eval":"0.2.3",py:"1.11.0",pyclipper:"1.3.0.post6",pycparser:"2.22",pycryptodome:"3.21.0",pydantic:"2.10.6",pydantic_core:"2.27.2",pyerfa:"2.0.1.5",Pygments:"2.19.1",pyheif:"0.8.0",pyiceberg:"0.9.0",pyinstrument:"5.0.1",PyMuPDF:"1.26.3",pynacl:"1.5.0","pyodide-http":"0.2.2","pyodide-unix-timezones":"1.0.0",pyparsing:"3.2.1",pyrsistent:"0.20.0",pysam:"0.23.0",pyshp:"2.3.1",pytaglib:"3.0.1",pytest:"8.3.5","pytest-asyncio":"0.25.3","pytest-benchmark":"4.0.0",pytest_httpx:"0.30.0","python-dateutil":"2.9.0.post0","python-flint":"0.7.1","python-magic":"0.4.27","python-sat":"1.8.dev17","python-solvespace":"3.0.8",pytz:"2025.2",pywavelets:"1.8.0",pyxel:"1.9.10",pyxirr:"0.10.6",pyyaml:"6.0.2",rasterio:"1.4.3",rateslib:"2.0.1",rebound:"4.4.7",reboundx:"4.4.1",referencing:"0.36.2",regex:"2024.11.6",requests:"2.32.4",retrying:"1.3.4",rich:"13.9.4",river:"0.22.0",RobotRaconteur:"1.2.5","rpds-py":"0.23.1","ruamel.yaml":"0.18.10",rustworkx:"0.17.0a3","scikit-image":"0.25.2","scikit-learn":"1.7.0",scipy:"1.14.1",screed:"1.1.3",setuptools:"76.0.0",shapely:"2.0.7",simplejson:"3.20.1",sisl:"0.16.2",six:"1.17.0","smart-open":"7.1.0",sniffio:"1.3.1",sortedcontainers:"2.4.0",soundfile:"0.12.1",soupsieve:"2.6",sourmash:"4.8.14",soxr:"0.5.0.post1",sparseqr:"1.2",sqlalchemy:"2.0.39","stack-data":"0.6.3",statsmodels:"0.14.4",strictyaml:"1.7.3",svgwrite:"1.4.3",swiglpk:"5.0.12",sympy:"1.13.3",tblib:"3.0.0",termcolor:"2.5.0",texttable:"1.7.0",texture2ddecoder:"1.0.5",threadpoolctl:"3.5.0",tiktoken:"0.9.0",tomli:"2.2.1","tomli-w":"1.2.0",toolz:"1.0.0",tqdm:"4.67.1",traitlets:"5.14.3",traits:"7.0.2","tree-sitter":"0.23.2","tree-sitter-go":"0.23.3","tree-sitter-java":"0.23.4","tree-sitter-python":"0.23.4",tskit:"0.6.4","typing-extensions":"4.14.1",tzdata:"2025.2",ujson:"5.10.0",uncertainties:"3.2.2",unyt:"3.0.3",urllib3:"2.5.0","vega-datasets":"0.9.0",wcwidth:"0.2.13",webencodings:"0.5.1",wordcloud:"1.9.4",wrapt:"1.17.2",xarray:"2025.1.2",xgboost:"2.1.4",xlrd:"2.0.1",xxhash:"3.5.0",xyzservices:"2025.1.0",yarl:"1.18.3",yt:"4.4.0",zengl:"2.7.1",zfpy:"1.0.1",zstandard:"0.23.0"},"0.27.4":{affine:"2.4.0",aiohappyeyeballs:"2.6.1",aiohttp:"3.11.13",aiosignal:"1.3.2",altair:"5.5.0","annotated-types":"0.7.0",anyio:"4.9.0",apsw:"3.49.1.0","argon2-cffi":"23.1.0","argon2-cffi-bindings":"21.2.0",asciitree:"0.3.3",astropy:"7.0.1",astropy_iers_data:"0.2025.3.10.0.29.26",asttokens:"3.0.0","async-timeout":"5.0.1",atomicwrites:"1.4.1",attrs:"25.2.0","audioop-lts":"0.2.1",autograd:"1.7.0","awkward-cpp":"47",b2d:"0.7.4",bcrypt:"4.3.0",beautifulsoup4:"4.13.3",biopython:"1.85",bitarray:"3.6.0",bitstring:"4.3.1",bleach:"6.2.0",blosc2:"3.5.1",bokeh:"3.6.3","boost-histogram":"1.5.0",brotli:"1.1.0",cachetools:"5.5.2",casadi:"3.7.0","cbor-diag":"1.0.1",certifi:"2025.7.14",cffi:"1.17.1",cffi_example:"0.1",cftime:"1.6.4.post1","charset-normalizer":"3.4.2",clarabel:"0.11.0",click:"8.2.1",cligj:"0.7.2",clingo:"5.7.1",cloudpickle:"3.1.1",cmyt:"2.0.2",cobs:"1.2.1",colorspacious:"1.1.2",contourpy:"1.3.1",coolprop:"6.6.0",coverage:"7.6.12",cramjam:"2.10.0rc1",crc32c:"2.7.1",cryptography:"45.0.5","css-inline":"0.16.0",cssselect:"1.3.0","cvxpy-base":"1.6.3",cycler:"0.12.1",cysignals:"1.12.3",cytoolz:"1.0.1",decorator:"5.2.1",demes:"0.2.3",deprecation:"2.1.0",diskcache:"5.6.3",distlib:"0.3.9",distro:"1.9.0",docutils:"0.21.2",donfig:"0.8.1.post1",ewah_bool_utils:"1.2.2",exceptiongroup:"1.2.2",executing:"2.2.0",fastparquet:"2024.11.0",fiona:"1.9.5",fonttools:"4.56.0",freesasa:"2.2.1",frozenlist:"1.6.0",fsspec:"2025.3.2",future:"1.0.0",galpy:"1.10.2",gmpy2:"2.1.5",gsw:"3.6.19",h11:"0.14.0",h3:"4.2.2",h5py:"3.13.0",html5lib:"1.1",httpcore:"1.0.7",httpx:"0.28.1",idna:"3.10",igraph:"0.11.8",imageio:"2.37.0","imgui-bundle":"1.92.0",iminuit:"2.30.1",iniconfig:"2.1.0",inspice:"1.6.3.3",ipython:"9.0.2",jedi:"0.19.2",Jinja2:"3.1.6",jiter:"0.9.0",joblib:"1.4.2",jsonschema:"4.23.0",jsonschema_specifications:"2024.10.1",kiwisolver:"1.4.8","lakers-python":"0.5.0",lazy_loader:"0.4","lazy-object-proxy":"1.10.0",libcst:"1.6.0",lightgbm:"4.6.0",logbook:"1.8.0",lxml:"6.0.0",lz4:"4.4.4",MarkupSafe:"3.0.2",matplotlib:"3.8.4","matplotlib-inline":"0.1.7","memory-allocator":"0.1.4",micropip:"0.10.1",mmh3:"5.1.0","more-itertools":"10.6.0",mpmath:"1.3.0",msgpack:"1.1.1",msgspec:"0.19.0",msprime:"1.3.3",multidict:"6.6.3",munch:"4.0.0",mypy:"1.15.0",narwhals:"1.46.0",ndindex:"1.9.2",netcdf4:"1.7.2",networkx:"3.4.2",newick:"1.9.0",nh3:"0.2.21",nlopt:"2.9.1",nltk:"3.9.1",numcodecs:"0.13.1",numpy:"2.2.5",openai:"1.68.2","opencv-python":"4.11.0.86",optlang:"1.8.3",orjson:"3.10.16",packaging:"24.2",pandas:"2.3.1",parso:"0.8.4",patsy:"1.0.1",pcodec:"0.3.3",peewee:"3.17.9","pi-heif":"0.21.0",Pillow:"11.3.0","pillow-heif":"1.0.0",pkgconfig:"1.5.5",platformdirs:"4.3.6",pluggy:"1.5.0",ply:"3.11",pplpy:"0.8.10",primecountpy:"0.1.1",prompt_toolkit:"3.0.50",propcache:"0.3.0",protobuf:"6.31.1","pure-eval":"0.2.3",py:"1.11.0",pyclipper:"1.3.0.post6",pycparser:"2.22",pycryptodome:"3.21.0",pydantic:"2.10.6",pydantic_core:"2.27.2",pyerfa:"2.0.1.5",Pygments:"2.19.1",pyheif:"0.8.0",pyiceberg:"0.9.0",pyinstrument:"5.0.1",PyMuPDF:"1.26.3",pynacl:"1.5.0","pyodide-http":"0.2.2","pyodide-unix-timezones":"1.0.0",pyparsing:"3.2.1",pyrsistent:"0.20.0",pysam:"0.23.0",pyshp:"2.3.1",pytaglib:"3.0.1",pytest:"8.3.5","pytest-asyncio":"0.25.3","pytest-benchmark":"4.0.0",pytest_httpx:"0.30.0","python-dateutil":"2.9.0.post0","python-flint":"0.7.1","python-magic":"0.4.27","python-sat":"1.8.dev17","python-solvespace":"3.0.8",pytz:"2025.2",pywavelets:"1.8.0",pyxel:"1.9.10",pyxirr:"0.10.6",pyyaml:"6.0.2",rasterio:"1.4.3",rateslib:"2.0.1",rebound:"4.4.7",reboundx:"4.4.1",referencing:"0.36.2",regex:"2024.11.6",requests:"2.32.4",retrying:"1.3.4",rich:"13.9.4",river:"0.22.0",RobotRaconteur:"1.2.5","rpds-py":"0.23.1","ruamel.yaml":"0.18.10",rustworkx:"0.17.0a3","scikit-image":"0.25.2","scikit-learn":"1.7.0",scipy:"1.14.1",screed:"1.1.3",setuptools:"76.0.0",shapely:"2.0.7",simplejson:"3.20.1",sisl:"0.16.2",six:"1.17.0","smart-open":"7.1.0",sniffio:"1.3.1",sortedcontainers:"2.4.0",soundfile:"0.12.1",soupsieve:"2.6",sourmash:"4.8.14",soxr:"0.5.0.post1",sparseqr:"1.2",sqlalchemy:"2.0.39","stack-data":"0.6.3",statsmodels:"0.14.4",strictyaml:"1.7.3",svgwrite:"1.4.3",swiglpk:"5.0.12",sympy:"1.13.3",tblib:"3.0.0",termcolor:"2.5.0",texttable:"1.7.0",texture2ddecoder:"1.0.5",threadpoolctl:"3.5.0",tiktoken:"0.9.0",tomli:"2.2.1","tomli-w":"1.2.0",toolz:"1.0.0",tqdm:"4.67.1",traitlets:"5.14.3",traits:"7.0.2","tree-sitter":"0.23.2","tree-sitter-go":"0.23.3","tree-sitter-java":"0.23.4","tree-sitter-python":"0.23.4",tskit:"0.6.4","typing-extensions":"4.14.1",tzdata:"2025.2",ujson:"5.10.0",uncertainties:"3.2.2",unyt:"3.0.3",urllib3:"2.5.0","vega-datasets":"0.9.0",wcwidth:"0.2.13",webencodings:"0.5.1",wordcloud:"1.9.4",wrapt:"1.17.2",xarray:"2025.1.2",xgboost:"2.1.4",xlrd:"2.0.1",xxhash:"3.5.0",xyzservices:"2025.1.0",yarl:"1.18.3",yt:"4.4.0",zengl:"2.7.1",zfpy:"1.0.1",zstandard:"0.23.0"},"0.27.3":{affine:"2.4.0",aiohappyeyeballs:"2.6.1",aiohttp:"3.11.13",aiosignal:"1.3.2",altair:"5.5.0","annotated-types":"0.7.0",anyio:"4.9.0",apsw:"3.49.1.0","argon2-cffi":"23.1.0","argon2-cffi-bindings":"21.2.0",asciitree:"0.3.3",astropy:"7.0.1",astropy_iers_data:"0.2025.3.10.0.29.26",asttokens:"3.0.0","async-timeout":"5.0.1",atomicwrites:"1.4.1",attrs:"25.2.0","audioop-lts":"0.2.1",autograd:"1.7.0","awkward-cpp":"47",b2d:"0.7.4",bcrypt:"4.3.0",beautifulsoup4:"4.13.3",biopython:"1.85",bitarray:"3.6.0",bitstring:"4.3.1",bleach:"6.2.0",blosc2:"3.5.1",bokeh:"3.6.3","boost-histogram":"1.5.0",brotli:"1.1.0",cachetools:"5.5.2",casadi:"3.7.0","cbor-diag":"1.0.1",certifi:"2025.7.14",cffi:"1.17.1",cffi_example:"0.1",cftime:"1.6.4.post1","charset-normalizer":"3.4.2",clarabel:"0.11.0",click:"8.2.1",cligj:"0.7.2",clingo:"5.7.1",cloudpickle:"3.1.1",cmyt:"2.0.2",cobs:"1.2.1",colorspacious:"1.1.2",contourpy:"1.3.1",coolprop:"6.6.0",coverage:"7.6.12",cramjam:"2.10.0rc1",crc32c:"2.7.1",cryptography:"45.0.5","css-inline":"0.16.0",cssselect:"1.3.0","cvxpy-base":"1.6.3",cycler:"0.12.1",cysignals:"1.12.3",cytoolz:"1.0.1",decorator:"5.2.1",demes:"0.2.3",deprecation:"2.1.0",diskcache:"5.6.3",distlib:"0.3.9",distro:"1.9.0",docutils:"0.21.2",donfig:"0.8.1.post1",ewah_bool_utils:"1.2.2",exceptiongroup:"1.2.2",executing:"2.2.0",fastparquet:"2024.11.0",fiona:"1.9.5",fonttools:"4.56.0",freesasa:"2.2.1",frozenlist:"1.6.0",fsspec:"2025.3.2",future:"1.0.0",galpy:"1.10.2",gmpy2:"2.1.5",gsw:"3.6.19",h11:"0.14.0",h3:"4.2.2",h5py:"3.13.0",html5lib:"1.1",httpcore:"1.0.7",httpx:"0.28.1",idna:"3.10",igraph:"0.11.8",imageio:"2.37.0","imgui-bundle":"1.92.0",iminuit:"2.30.1",iniconfig:"2.1.0",inspice:"1.6.3.3",ipython:"9.0.2",jedi:"0.19.2",Jinja2:"3.1.6",jiter:"0.9.0",joblib:"1.4.2",jsonschema:"4.23.0",jsonschema_specifications:"2024.10.1",kiwisolver:"1.4.8","lakers-python":"0.5.0",lazy_loader:"0.4","lazy-object-proxy":"1.10.0",libcst:"1.6.0",lightgbm:"4.6.0",logbook:"1.8.0",lxml:"6.0.0",lz4:"4.4.4",MarkupSafe:"3.0.2",matplotlib:"3.8.4","matplotlib-inline":"0.1.7","memory-allocator":"0.1.4",micropip:"0.10.1",mmh3:"5.1.0","more-itertools":"10.6.0",mpmath:"1.3.0",msgpack:"1.1.1",msgspec:"0.19.0",msprime:"1.3.3",multidict:"6.6.3",munch:"4.0.0",mypy:"1.15.0",narwhals:"1.46.0",ndindex:"1.9.2",netcdf4:"1.7.2",networkx:"3.4.2",newick:"1.9.0",nh3:"0.2.21",nlopt:"2.9.1",nltk:"3.9.1",numcodecs:"0.13.1",numpy:"2.2.5",openai:"1.68.2","opencv-python":"4.11.0.86",optlang:"1.8.3",orjson:"3.10.16",packaging:"24.2",pandas:"2.3.1",parso:"0.8.4",patsy:"1.0.1",pcodec:"0.3.3",peewee:"3.17.9","pi-heif":"0.21.0",Pillow:"11.3.0","pillow-heif":"1.0.0",pkgconfig:"1.5.5",platformdirs:"4.3.6",pluggy:"1.5.0",ply:"3.11",pplpy:"0.8.10",primecountpy:"0.1.1",prompt_toolkit:"3.0.50",propcache:"0.3.0",protobuf:"6.31.1","pure-eval":"0.2.3",py:"1.11.0",pyclipper:"1.3.0.post6",pycparser:"2.22",pycryptodome:"3.21.0",pydantic:"2.10.6",pydantic_core:"2.27.2",pyerfa:"2.0.1.5",Pygments:"2.19.1",pyheif:"0.8.0",pyiceberg:"0.9.0",pyinstrument:"5.0.1",PyMuPDF:"1.26.3",pynacl:"1.5.0","pyodide-http":"0.2.2","pyodide-unix-timezones":"1.0.0",pyparsing:"3.2.1",pyrsistent:"0.20.0",pysam:"0.23.0",pyshp:"2.3.1",pytaglib:"3.0.1",pytest:"8.3.5","pytest-asyncio":"0.25.3","pytest-benchmark":"4.0.0",pytest_httpx:"0.30.0","python-dateutil":"2.9.0.post0","python-flint":"0.7.1","python-magic":"0.4.27","python-sat":"1.8.dev17","python-solvespace":"3.0.8",pytz:"2025.2",pywavelets:"1.8.0",pyxel:"1.9.10",pyxirr:"0.10.6",pyyaml:"6.0.2",rasterio:"1.4.3",rateslib:"2.0.1",rebound:"4.4.7",reboundx:"4.4.1",referencing:"0.36.2",regex:"2024.11.6",requests:"2.32.4",retrying:"1.3.4",rich:"13.9.4",river:"0.22.0",RobotRaconteur:"1.2.5","rpds-py":"0.23.1","ruamel.yaml":"0.18.10",rustworkx:"0.17.0a3","scikit-image":"0.25.2","scikit-learn":"1.7.0",scipy:"1.14.1",screed:"1.1.3",setuptools:"76.0.0",shapely:"2.0.7",simplejson:"3.20.1",sisl:"0.16.2",six:"1.17.0","smart-open":"7.1.0",sniffio:"1.3.1",sortedcontainers:"2.4.0",soundfile:"0.12.1",soupsieve:"2.6",sourmash:"4.8.14",soxr:"0.5.0.post1",sparseqr:"1.2",sqlalchemy:"2.0.39","stack-data":"0.6.3",statsmodels:"0.14.4",strictyaml:"1.7.3",svgwrite:"1.4.3",swiglpk:"5.0.12",sympy:"1.13.3",tblib:"3.0.0",termcolor:"2.5.0",texttable:"1.7.0",texture2ddecoder:"1.0.5",threadpoolctl:"3.5.0",tiktoken:"0.9.0",tomli:"2.2.1","tomli-w":"1.2.0",toolz:"1.0.0",tqdm:"4.67.1",traitlets:"5.14.3",traits:"7.0.2","tree-sitter":"0.23.2","tree-sitter-go":"0.23.3","tree-sitter-java":"0.23.4","tree-sitter-python":"0.23.4",tskit:"0.6.4","typing-extensions":"4.14.1",tzdata:"2025.2",ujson:"5.10.0",uncertainties:"3.2.2",unyt:"3.0.3",urllib3:"2.5.0","vega-datasets":"0.9.0",wcwidth:"0.2.13",webencodings:"0.5.1",wordcloud:"1.9.4",wrapt:"1.17.2",xarray:"2025.1.2",xgboost:"2.1.4",xlrd:"2.0.1",xxhash:"3.5.0",xyzservices:"2025.1.0",yarl:"1.18.3",yt:"4.4.0",zengl:"2.7.1",zfpy:"1.0.1",zstandard:"0.23.0"},"0.27.2":{affine:"2.4.0",aiohappyeyeballs:"2.6.1",aiohttp:"3.11.13",aiosignal:"1.3.2",altair:"5.5.0","annotated-types":"0.7.0",anyio:"4.9.0",apsw:"3.49.1.0","argon2-cffi":"23.1.0","argon2-cffi-bindings":"21.2.0",asciitree:"0.3.3",astropy:"7.0.1",astropy_iers_data:"0.2025.3.10.0.29.26",asttokens:"3.0.0","async-timeout":"5.0.1",atomicwrites:"1.4.1",attrs:"25.2.0","audioop-lts":"0.2.1",autograd:"1.7.0","awkward-cpp":"47",b2d:"0.7.4",bcrypt:"4.3.0",beautifulsoup4:"4.13.3",biopython:"1.85",bitarray:"3.6.0",bitstring:"4.3.1",bleach:"6.2.0",blosc2:"3.5.1",bokeh:"3.6.3","boost-histogram":"1.5.0",brotli:"1.1.0",cachetools:"5.5.2",casadi:"3.7.0","cbor-diag":"1.0.1",certifi:"2025.7.14",cffi:"1.17.1",cffi_example:"0.1",cftime:"1.6.4.post1","charset-normalizer":"3.4.2",clarabel:"0.11.0",click:"8.2.1",cligj:"0.7.2",clingo:"5.7.1",cloudpickle:"3.1.1",cmyt:"2.0.2",cobs:"1.2.1",colorspacious:"1.1.2",contourpy:"1.3.1",coolprop:"6.6.0",coverage:"7.6.12",cramjam:"2.10.0rc1",crc32c:"2.7.1",cryptography:"45.0.5","css-inline":"0.16.0",cssselect:"1.3.0","cvxpy-base":"1.6.3",cycler:"0.12.1",cysignals:"1.12.3",cytoolz:"1.0.1",decorator:"5.2.1",demes:"0.2.3",deprecation:"2.1.0",diskcache:"5.6.3",distlib:"0.3.9",distro:"1.9.0",docutils:"0.21.2",donfig:"0.8.1.post1",ewah_bool_utils:"1.2.2",exceptiongroup:"1.2.2",executing:"2.2.0",fastparquet:"2024.11.0",fiona:"1.9.5",fonttools:"4.56.0",freesasa:"2.2.1",frozenlist:"1.6.0",fsspec:"2025.3.2",future:"1.0.0",galpy:"1.10.2",gmpy2:"2.1.5",gsw:"3.6.19",h11:"0.14.0",h3:"4.2.2",h5py:"3.13.0",html5lib:"1.1",httpcore:"1.0.7",httpx:"0.28.1",idna:"3.10",igraph:"0.11.8",imageio:"2.37.0","imgui-bundle":"1.92.0",iminuit:"2.30.1",iniconfig:"2.1.0",inspice:"1.6.3.3",ipython:"9.0.2",jedi:"0.19.2",Jinja2:"3.1.6",jiter:"0.9.0",joblib:"1.4.2",jsonschema:"4.23.0",jsonschema_specifications:"2024.10.1",kiwisolver:"1.4.8","lakers-python":"0.5.0",lazy_loader:"0.4","lazy-object-proxy":"1.10.0",libcst:"1.6.0",lightgbm:"4.6.0",logbook:"1.8.0",lxml:"6.0.0",lz4:"4.4.4",MarkupSafe:"3.0.2",matplotlib:"3.8.4","matplotlib-inline":"0.1.7","memory-allocator":"0.1.4",micropip:"0.10.1",mmh3:"5.1.0","more-itertools":"10.6.0",mpmath:"1.3.0",msgpack:"1.1.1",msgspec:"0.19.0",msprime:"1.3.3",multidict:"6.6.3",munch:"4.0.0",mypy:"1.15.0",narwhals:"1.46.0",ndindex:"1.9.2",netcdf4:"1.7.2",networkx:"3.4.2",newick:"1.9.0",nh3:"0.2.21",nlopt:"2.9.1",nltk:"3.9.1",numcodecs:"0.13.1",numpy:"2.2.5",openai:"1.68.2","opencv-python":"4.11.0.86",optlang:"1.8.3",orjson:"3.10.16",packaging:"24.2",pandas:"2.3.1",parso:"0.8.4",patsy:"1.0.1",pcodec:"0.3.3",peewee:"3.17.9","pi-heif":"0.21.0",Pillow:"11.3.0","pillow-heif":"1.0.0",pkgconfig:"1.5.5",platformdirs:"4.3.6",pluggy:"1.5.0",ply:"3.11",pplpy:"0.8.10",primecountpy:"0.1.1",prompt_toolkit:"3.0.50",propcache:"0.3.0",protobuf:"6.31.1","pure-eval":"0.2.3",py:"1.11.0",pyclipper:"1.3.0.post6",pycparser:"2.22",pycryptodome:"3.21.0",pydantic:"2.10.6",pydantic_core:"2.27.2",pyerfa:"2.0.1.5",Pygments:"2.19.1",pyheif:"0.8.0",pyiceberg:"0.9.0",pyinstrument:"5.0.1",PyMuPDF:"1.26.3",pynacl:"1.5.0","pyodide-http":"0.2.2","pyodide-unix-timezones":"1.0.0",pyparsing:"3.2.1",pyrsistent:"0.20.0",pysam:"0.23.0",pyshp:"2.3.1",pytaglib:"3.0.1",pytest:"8.3.5","pytest-asyncio":"0.25.3","pytest-benchmark":"4.0.0",pytest_httpx:"0.30.0","python-dateutil":"2.9.0.post0","python-flint":"0.7.1","python-magic":"0.4.27","python-sat":"1.8.dev17","python-solvespace":"3.0.8",pytz:"2025.2",pywavelets:"1.8.0",pyxel:"1.9.10",pyxirr:"0.10.6",pyyaml:"6.0.2",rasterio:"1.4.3",rateslib:"2.0.1",rebound:"4.4.7",reboundx:"4.4.1",referencing:"0.36.2",regex:"2024.11.6",requests:"2.32.4",retrying:"1.3.4",rich:"13.9.4",river:"0.22.0",RobotRaconteur:"1.2.5","rpds-py":"0.23.1","ruamel.yaml":"0.18.10",rustworkx:"0.17.0a3","scikit-image":"0.25.2","scikit-learn":"1.7.0",scipy:"1.14.1",screed:"1.1.3",setuptools:"76.0.0",shapely:"2.0.7",simplejson:"3.20.1",sisl:"0.16.2",six:"1.17.0","smart-open":"7.1.0",sniffio:"1.3.1",sortedcontainers:"2.4.0",soundfile:"0.12.1",soupsieve:"2.6",sourmash:"4.8.14",soxr:"0.5.0.post1",sparseqr:"1.2",sqlalchemy:"2.0.39","stack-data":"0.6.3",statsmodels:"0.14.4",strictyaml:"1.7.3",svgwrite:"1.4.3",swiglpk:"5.0.12",sympy:"1.13.3",tblib:"3.0.0",termcolor:"2.5.0",texttable:"1.7.0",texture2ddecoder:"1.0.5",threadpoolctl:"3.5.0",tiktoken:"0.9.0",tomli:"2.2.1","tomli-w":"1.2.0",toolz:"1.0.0",tqdm:"4.67.1",traitlets:"5.14.3",traits:"7.0.2","tree-sitter":"0.23.2","tree-sitter-go":"0.23.3","tree-sitter-java":"0.23.4","tree-sitter-python":"0.23.4",tskit:"0.6.4","typing-extensions":"4.14.1",tzdata:"2025.2",ujson:"5.10.0",uncertainties:"3.2.2",unyt:"3.0.3",urllib3:"2.5.0","vega-datasets":"0.9.0",wcwidth:"0.2.13",webencodings:"0.5.1",wordcloud:"1.9.4",wrapt:"1.17.2",xarray:"2025.1.2",xgboost:"2.1.4",xlrd:"2.0.1",xxhash:"3.5.0",xyzservices:"2025.1.0",yarl:"1.18.3",yt:"4.4.0",zengl:"2.7.1",zfpy:"1.0.1",zstandard:"0.23.0"},"0.27.1":{affine:"2.4.0",aiohappyeyeballs:"2.6.1",aiohttp:"3.11.13",aiosignal:"1.3.2",altair:"5.5.0","annotated-types":"0.7.0",anyio:"4.9.0",apsw:"3.49.1.0","argon2-cffi":"23.1.0","argon2-cffi-bindings":"21.2.0",asciitree:"0.3.3",astropy:"7.0.1",astropy_iers_data:"0.2025.3.10.0.29.26",asttokens:"3.0.0","async-timeout":"5.0.1",atomicwrites:"1.4.1",attrs:"25.2.0","audioop-lts":"0.2.1",autograd:"1.7.0","awkward-cpp":"47",b2d:"0.7.4",bcrypt:"4.3.0",beautifulsoup4:"4.13.3",biopython:"1.85",bitarray:"3.6.0",bitstring:"4.3.1",bleach:"6.2.0",blosc2:"3.5.1",bokeh:"3.6.3","boost-histogram":"1.5.0",brotli:"1.1.0",cachetools:"5.5.2",casadi:"3.7.0","cbor-diag":"1.0.1",certifi:"2025.7.14",cffi:"1.17.1",cffi_example:"0.1",cftime:"1.6.4.post1","charset-normalizer":"3.4.2",clarabel:"0.11.0",click:"8.2.1",cligj:"0.7.2",clingo:"5.7.1",cloudpickle:"3.1.1",cmyt:"2.0.2",cobs:"1.2.1",colorspacious:"1.1.2",contourpy:"1.3.1",coolprop:"6.6.0",coverage:"7.6.12",cramjam:"2.10.0rc1",crc32c:"2.7.1",cryptography:"45.0.5","css-inline":"0.16.0",cssselect:"1.3.0","cvxpy-base":"1.6.3",cycler:"0.12.1",cysignals:"1.12.3",cytoolz:"1.0.1",decorator:"5.2.1",demes:"0.2.3",deprecation:"2.1.0",diskcache:"5.6.3",distlib:"0.3.9",distro:"1.9.0",docutils:"0.21.2",donfig:"0.8.1.post1",ewah_bool_utils:"1.2.2",exceptiongroup:"1.2.2",executing:"2.2.0",fastparquet:"2024.11.0",fiona:"1.9.5",fonttools:"4.56.0",freesasa:"2.2.1",frozenlist:"1.6.0",fsspec:"2025.3.2",future:"1.0.0",galpy:"1.10.2",gmpy2:"2.1.5",gsw:"3.6.19",h11:"0.14.0",h3:"4.2.2",h5py:"3.13.0",html5lib:"1.1",httpcore:"1.0.7",httpx:"0.28.1",idna:"3.10",igraph:"0.11.8",imageio:"2.37.0","imgui-bundle":"1.92.0",iminuit:"2.30.1",iniconfig:"2.1.0",inspice:"1.6.3.3",ipython:"9.0.2",jedi:"0.19.2",Jinja2:"3.1.6",jiter:"0.9.0",joblib:"1.4.2",jsonschema:"4.23.0",jsonschema_specifications:"2024.10.1",kiwisolver:"1.4.8","lakers-python":"0.5.0",lazy_loader:"0.4","lazy-object-proxy":"1.10.0",libcst:"1.6.0",lightgbm:"4.6.0",logbook:"1.8.0",lxml:"6.0.0",lz4:"4.4.4",MarkupSafe:"3.0.2",matplotlib:"3.8.4","matplotlib-inline":"0.1.7","memory-allocator":"0.1.4",micropip:"0.10.1",mmh3:"5.1.0","more-itertools":"10.6.0",mpmath:"1.3.0",msgpack:"1.1.1",msgspec:"0.19.0",msprime:"1.3.3",multidict:"6.6.3",munch:"4.0.0",mypy:"1.15.0",narwhals:"1.46.0",ndindex:"1.9.2",netcdf4:"1.7.2",networkx:"3.4.2",newick:"1.9.0",nh3:"0.2.21",nlopt:"2.9.1",nltk:"3.9.1",numcodecs:"0.13.1",numpy:"2.2.5",openai:"1.68.2","opencv-python":"4.11.0.86",optlang:"1.8.3",orjson:"3.10.16",packaging:"24.2",pandas:"2.3.1",parso:"0.8.4",patsy:"1.0.1",pcodec:"0.3.3",peewee:"3.17.9","pi-heif":"0.21.0",Pillow:"11.3.0","pillow-heif":"1.0.0",pkgconfig:"1.5.5",platformdirs:"4.3.6",pluggy:"1.5.0",ply:"3.11",pplpy:"0.8.10",primecountpy:"0.1.1",prompt_toolkit:"3.0.50",propcache:"0.3.0",protobuf:"6.31.1","pure-eval":"0.2.3",py:"1.11.0",pyclipper:"1.3.0.post6",pycparser:"2.22",pycryptodome:"3.21.0",pydantic:"2.10.6",pydantic_core:"2.27.2",pyerfa:"2.0.1.5",Pygments:"2.19.1",pyheif:"0.8.0",pyiceberg:"0.9.0",pyinstrument:"5.0.1",PyMuPDF:"1.26.3",pynacl:"1.5.0","pyodide-http":"0.2.2","pyodide-unix-timezones":"1.0.0",pyparsing:"3.2.1",pyrsistent:"0.20.0",pysam:"0.23.0",pyshp:"2.3.1",pytaglib:"3.0.1",pytest:"8.3.5","pytest-asyncio":"0.25.3","pytest-benchmark":"4.0.0",pytest_httpx:"0.30.0","python-dateutil":"2.9.0.post0","python-flint":"0.7.1","python-magic":"0.4.27","python-sat":"1.8.dev17","python-solvespace":"3.0.8",pytz:"2025.2",pywavelets:"1.8.0",pyxel:"1.9.10",pyxirr:"0.10.6",pyyaml:"6.0.2",rasterio:"1.4.3",rateslib:"2.0.1",rebound:"4.4.7",reboundx:"4.4.1",referencing:"0.36.2",regex:"2024.11.6",requests:"2.32.4",retrying:"1.3.4",rich:"13.9.4",river:"0.22.0",RobotRaconteur:"1.2.5","rpds-py":"0.23.1","ruamel.yaml":"0.18.10",rustworkx:"0.17.0a3","scikit-image":"0.25.2","scikit-learn":"1.7.0",scipy:"1.14.1",screed:"1.1.3",setuptools:"76.0.0",shapely:"2.0.7",simplejson:"3.20.1",sisl:"0.16.2",six:"1.17.0","smart-open":"7.1.0",sniffio:"1.3.1",sortedcontainers:"2.4.0",soundfile:"0.12.1",soupsieve:"2.6",sourmash:"4.8.14",soxr:"0.5.0.post1",sparseqr:"1.2",sqlalchemy:"2.0.39","stack-data":"0.6.3",statsmodels:"0.14.4",strictyaml:"1.7.3",svgwrite:"1.4.3",swiglpk:"5.0.12",sympy:"1.13.3",tblib:"3.0.0",termcolor:"2.5.0",texttable:"1.7.0",texture2ddecoder:"1.0.5",threadpoolctl:"3.5.0",tiktoken:"0.9.0",tomli:"2.2.1","tomli-w":"1.2.0",toolz:"1.0.0",tqdm:"4.67.1",traitlets:"5.14.3",traits:"7.0.2","tree-sitter":"0.23.2","tree-sitter-go":"0.23.3","tree-sitter-java":"0.23.4","tree-sitter-python":"0.23.4",tskit:"0.6.4","typing-extensions":"4.14.1",tzdata:"2025.2",ujson:"5.10.0",uncertainties:"3.2.2",unyt:"3.0.3",urllib3:"2.5.0","vega-datasets":"0.9.0",wcwidth:"0.2.13",webencodings:"0.5.1",wordcloud:"1.9.4",wrapt:"1.17.2",xarray:"2025.1.2",xgboost:"2.1.4",xlrd:"2.0.1",xxhash:"3.5.0",xyzservices:"2025.1.0",yarl:"1.18.3",yt:"4.4.0",zengl:"2.7.1",zfpy:"1.0.1",zstandard:"0.23.0"},"0.27.0":{affine:"2.4.0",aiohappyeyeballs:"2.6.1",aiohttp:"3.11.13",aiosignal:"1.3.2",altair:"5.5.0","annotated-types":"0.7.0",anyio:"4.9.0",apsw:"3.49.1.0","argon2-cffi":"23.1.0","argon2-cffi-bindings":"21.2.0",asciitree:"0.3.3",astropy:"7.0.1",astropy_iers_data:"0.2025.3.10.0.29.26",asttokens:"3.0.0","async-timeout":"5.0.1",atomicwrites:"1.4.1",attrs:"25.2.0","audioop-lts":"0.2.1",autograd:"1.7.0","awkward-cpp":"47",b2d:"0.7.4",bcrypt:"4.3.0",beautifulsoup4:"4.13.3",biopython:"1.85",bitarray:"3.6.0",bitstring:"4.3.1",bleach:"6.2.0",blosc2:"3.5.1",bokeh:"3.6.3","boost-histogram":"1.5.0",brotli:"1.1.0",cachetools:"5.5.2",casadi:"3.7.0","cbor-diag":"1.0.1",certifi:"2025.7.14",cffi:"1.17.1",cffi_example:"0.1",cftime:"1.6.4.post1","charset-normalizer":"3.4.2",clarabel:"0.11.0",click:"8.2.1",cligj:"0.7.2",clingo:"5.7.1",cloudpickle:"3.1.1",cmyt:"2.0.2",cobs:"1.2.1",colorspacious:"1.1.2",contourpy:"1.3.1",coolprop:"6.6.0",coverage:"7.6.12",cramjam:"2.10.0rc1",crc32c:"2.7.1",cryptography:"45.0.5","css-inline":"0.16.0",cssselect:"1.3.0","cvxpy-base":"1.6.3",cycler:"0.12.1",cysignals:"1.12.3",cytoolz:"1.0.1",decorator:"5.2.1",demes:"0.2.3",deprecation:"2.1.0",diskcache:"5.6.3",distlib:"0.3.9",distro:"1.9.0",docutils:"0.21.2",donfig:"0.8.1.post1",ewah_bool_utils:"1.2.2",exceptiongroup:"1.2.2",executing:"2.2.0",fastparquet:"2024.11.0",fiona:"1.9.5",fonttools:"4.56.0",freesasa:"2.2.1",frozenlist:"1.6.0",fsspec:"2025.3.2",future:"1.0.0",galpy:"1.10.2",gmpy2:"2.1.5",gsw:"3.6.19",h11:"0.14.0",h3:"4.2.2",h5py:"3.13.0",html5lib:"1.1",httpcore:"1.0.7",httpx:"0.28.1",idna:"3.10",igraph:"0.11.8",imageio:"2.37.0","imgui-bundle":"1.92.0",iminuit:"2.30.1",iniconfig:"2.1.0",inspice:"1.6.3.3",ipython:"9.0.2",jedi:"0.19.2",Jinja2:"3.1.6",jiter:"0.9.0",joblib:"1.4.2",jsonschema:"4.23.0",jsonschema_specifications:"2024.10.1",kiwisolver:"1.4.8","lakers-python":"0.5.0",lazy_loader:"0.4","lazy-object-proxy":"1.10.0",libcst:"1.6.0",lightgbm:"4.6.0",logbook:"1.8.0",lxml:"6.0.0",lz4:"4.4.4",MarkupSafe:"3.0.2",matplotlib:"3.8.4","matplotlib-inline":"0.1.7","memory-allocator":"0.1.4",micropip:"0.10.1",mmh3:"5.1.0","more-itertools":"10.6.0",mpmath:"1.3.0",msgpack:"1.1.1",msgspec:"0.19.0",msprime:"1.3.3",multidict:"6.6.3",munch:"4.0.0",mypy:"1.15.0",narwhals:"1.46.0",ndindex:"1.9.2",netcdf4:"1.7.2",networkx:"3.4.2",newick:"1.9.0",nh3:"0.2.21",nlopt:"2.9.1",nltk:"3.9.1",numcodecs:"0.13.1",numpy:"2.2.5",openai:"1.68.2","opencv-python":"4.11.0.86",optlang:"1.8.3",orjson:"3.10.16",packaging:"24.2",pandas:"2.3.1",parso:"0.8.4",patsy:"1.0.1",pcodec:"0.3.3",peewee:"3.17.9","pi-heif":"0.21.0",Pillow:"11.3.0","pillow-heif":"1.0.0",pkgconfig:"1.5.5",platformdirs:"4.3.6",pluggy:"1.5.0",ply:"3.11",pplpy:"0.8.10",primecountpy:"0.1.1",prompt_toolkit:"3.0.50",propcache:"0.3.0",protobuf:"6.31.1","pure-eval":"0.2.3",py:"1.11.0",pyclipper:"1.3.0.post6",pycparser:"2.22",pycryptodome:"3.21.0",pydantic:"2.10.6",pydantic_core:"2.27.2",pyerfa:"2.0.1.5",Pygments:"2.19.1",pyheif:"0.8.0",pyiceberg:"0.9.0",pyinstrument:"5.0.1",PyMuPDF:"1.26.3",pynacl:"1.5.0","pyodide-http":"0.2.2","pyodide-unix-timezones":"1.0.0",pyparsing:"3.2.1",pyrsistent:"0.20.0",pysam:"0.23.0",pyshp:"2.3.1",pytaglib:"3.0.1",pytest:"8.3.5","pytest-asyncio":"0.25.3","pytest-benchmark":"4.0.0",pytest_httpx:"0.30.0","python-dateutil":"2.9.0.post0","python-flint":"0.7.1","python-magic":"0.4.27","python-sat":"1.8.dev17","python-solvespace":"3.0.8",pytz:"2025.2",pywavelets:"1.8.0",pyxel:"1.9.10",pyxirr:"0.10.6",pyyaml:"6.0.2",rasterio:"1.4.3",rateslib:"2.0.1",rebound:"4.4.7",reboundx:"4.4.1",referencing:"0.36.2",regex:"2024.11.6",requests:"2.32.4",retrying:"1.3.4",rich:"13.9.4",river:"0.22.0",RobotRaconteur:"1.2.5","rpds-py":"0.23.1","ruamel.yaml":"0.18.10",rustworkx:"0.17.0a3","scikit-image":"0.25.2","scikit-learn":"1.7.0",scipy:"1.14.1",screed:"1.1.3",setuptools:"76.0.0",shapely:"2.0.7",simplejson:"3.20.1",sisl:"0.16.2",six:"1.17.0","smart-open":"7.1.0",sniffio:"1.3.1",sortedcontainers:"2.4.0",soundfile:"0.12.1",soupsieve:"2.6",sourmash:"4.8.14",soxr:"0.5.0.post1",sparseqr:"1.2",sqlalchemy:"2.0.39","stack-data":"0.6.3",statsmodels:"0.14.4",strictyaml:"1.7.3",svgwrite:"1.4.3",swiglpk:"5.0.12",sympy:"1.13.3",tblib:"3.0.0",termcolor:"2.5.0",texttable:"1.7.0",texture2ddecoder:"1.0.5",threadpoolctl:"3.5.0",tiktoken:"0.9.0",tomli:"2.2.1","tomli-w":"1.2.0",toolz:"1.0.0",tqdm:"4.67.1",traitlets:"5.14.3",traits:"7.0.2","tree-sitter":"0.23.2","tree-sitter-go":"0.23.3","tree-sitter-java":"0.23.4","tree-sitter-python":"0.23.4",tskit:"0.6.4","typing-extensions":"4.14.1",tzdata:"2025.2",ujson:"5.10.0",uncertainties:"3.2.2",unyt:"3.0.3",urllib3:"2.5.0","vega-datasets":"0.9.0",wcwidth:"0.2.13",webencodings:"0.5.1",wordcloud:"1.9.4",wrapt:"1.17.2",xarray:"2025.1.2",xgboost:"2.1.4",xlrd:"2.0.1",xxhash:"3.5.0",xyzservices:"2025.1.0",yarl:"1.18.3",yt:"4.4.0",zengl:"2.7.1",zfpy:"1.0.1",zstandard:"0.23.0"},"0.29.0":{affine:"2.4.0",aiohappyeyeballs:"2.6.1",aiohttp:"3.11.13",aiosignal:"1.3.2",altair:"5.5.0","annotated-types":"0.7.0",anyio:"4.9.0",apsw:"3.50.4.0","argon2-cffi":"23.1.0","argon2-cffi-bindings":"21.2.0",asciitree:"0.3.3",astropy:"7.0.1",astropy_iers_data:"0.2025.3.10.0.29.26",asttokens:"3.0.0","async-timeout":"5.0.1",atomicwrites:"1.4.1",attrs:"25.2.0","audioop-lts":"0.2.1",autograd:"1.7.0","awkward-cpp":"47",b2d:"0.7.4",bcrypt:"4.3.0",beautifulsoup4:"4.13.3","bilby.cython":"0.5.3",biopython:"1.85",bitarray:"3.7.1",bitstring:"4.3.1",bleach:"6.2.0",blosc2:"3.5.1",bokeh:"3.6.3","boost-histogram":"1.6.1",brotli:"1.1.0",cachetools:"5.5.2",casadi:"3.7.0","cbor-diag":"1.0.1",certifi:"2025.8.3",cffi:"1.17.1",cffi_example:"0.1",cftime:"1.6.4.post1","charset-normalizer":"3.4.3",clarabel:"0.11.0",click:"8.3.0",cligj:"0.7.2",clingo:"5.8.0",cloudpickle:"3.1.1",cmyt:"2.0.2",cobs:"1.2.1",colorspacious:"1.1.2",contourpy:"1.3.1",coolprop:"6.6.0",coverage:"7.6.12",cramjam:"2.10.0rc1",crc32c:"2.7.1",cryptography:"46.0.1","css-inline":"0.16.0",cssselect:"1.3.0","cvxpy-base":"1.6.3",cycler:"0.12.1",cysignals:"1.12.3",cytoolz:"1.0.1",decorator:"5.2.1",demes:"0.2.3",deprecation:"2.1.0",diskcache:"5.6.3",distlib:"0.3.9",distro:"1.9.0",docutils:"0.21.2",donfig:"0.8.1.post1",ewah_bool_utils:"1.2.2",exceptiongroup:"1.2.2",executing:"2.2.0",fastapi:"0.116.1",fastcan:"0.4.1",fastparquet:"2024.11.0",fiona:"1.9.5",fonttools:"4.56.0",freesasa:"2.2.1",frozenlist:"1.6.0",fsspec:"2025.3.2",future:"1.0.0",galpy:"1.10.2",gmpy2:"2.1.5",gsw:"3.6.19",h11:"0.14.0",h3:"4.2.2",h5py:"3.13.0",highspy:"1.11.0",html5lib:"1.1",httpcore:"1.0.7",httpx:"0.28.1",idna:"3.10",igraph:"0.11.8",imageio:"2.37.0","imgui-bundle":"1.92.4",iminuit:"2.30.1",iniconfig:"2.1.0",inspice:"1.6.4.1",ipython:"9.0.2",jedi:"0.19.2",Jinja2:"3.1.6",jiter:"0.9.0",joblib:"1.4.2",jsonpatch:"1.33",jsonpointer:"3.0.0",jsonschema:"4.23.0",jsonschema_specifications:"2024.10.1",kiwisolver:"1.4.8","lakers-python":"0.6.0",lazy_loader:"0.4","lazy-object-proxy":"1.10.0",libcst:"1.6.0",lightgbm:"4.6.0",logbook:"1.8.0",lxml:"6.0.2",lz4:"4.4.4",MarkupSafe:"3.0.2",matplotlib:"3.8.4","matplotlib-inline":"0.1.7","memory-allocator":"0.1.4",micropip:"0.11.0",mmh3:"5.1.0","more-itertools":"10.6.0",mpmath:"1.3.0",msgpack:"1.1.1",msgspec:"0.19.0",msprime:"1.3.3",multidict:"6.6.4",munch:"4.0.0",mypy:"1.15.0",narwhals:"1.46.0",ndindex:"1.9.2",netcdf4:"1.7.2",networkx:"3.4.2",newick:"1.9.0",nh3:"0.2.21",nlopt:"2.9.1",nltk:"3.9.1",numcodecs:"0.13.1",numpy:"2.2.5",openai:"1.68.2","opencv-python":"4.11.0.86",optlang:"1.8.3",orjson:"3.10.16",packaging:"24.2",pandas:"2.3.2",parso:"0.8.4",patsy:"1.0.1",pcodec:"0.3.3",peewee:"3.17.9","pi-heif":"0.21.0",Pillow:"11.3.0","pillow-heif":"1.1.0",pkgconfig:"1.5.5",platformdirs:"4.3.6",pluggy:"1.5.0",ply:"3.11",pplpy:"0.8.10",primecountpy:"0.1.1",prompt_toolkit:"3.0.50",propcache:"0.3.0",protobuf:"6.31.1","pure-eval":"0.2.3",py:"1.11.0",pyclipper:"1.3.0.post6",pycparser:"2.22",pycryptodome:"3.21.0",pydantic:"2.10.6",pydantic_core:"2.27.2",pyerfa:"2.0.1.5","pygame-ce":"2.5.6.dev2",Pygments:"2.19.1",pyheif:"0.8.0",pyiceberg:"0.9.0",pyinstrument:"5.0.1","pylimer-tools":"0.3.11",PyMuPDF:"1.26.3",pynacl:"1.5.0","pyodide-http":"0.2.2","pyodide-unix-timezones":"1.0.0",pyparsing:"3.2.1",pyrsistent:"0.20.0",pysam:"0.23.0",pyshp:"2.3.1",pytaglib:"3.0.1",pytest:"8.3.5","pytest-asyncio":"0.25.3","pytest-benchmark":"4.0.0",pytest_httpx:"0.30.0","python-calamine":"0.5.3","python-dateutil":"2.9.0.post0","python-flint":"0.8.0","python-magic":"0.4.27","python-sat":"1.8.dev23","python-solvespace":"3.0.8",pytz:"2025.2",pywavelets:"1.8.0",pyxel:"1.9.10",pyxirr:"0.10.6",pyyaml:"6.0.2",rasterio:"1.4.3",rateslib:"2.1.1",rebound:"4.4.7",reboundx:"4.4.1",referencing:"0.36.2",regex:"2024.11.6",requests:"2.32.4",retrying:"1.3.4",rich:"13.9.4",river:"0.22.0",RobotRaconteur:"1.2.6","rpds-py":"0.27.0","ruamel.yaml":"0.18.10",rustworkx:"0.17.1","scikit-image":"0.25.2","scikit-learn":"1.7.0",scipy:"1.14.1",screed:"1.1.3",setuptools:"76.0.0",shapely:"2.0.7",simplejson:"3.20.1",sisl:"0.16.2",six:"1.17.0","smart-open":"7.1.0",sniffio:"1.3.1",sortedcontainers:"2.4.0",soundfile:"0.12.1",soupsieve:"2.6",sourmash:"4.8.14",soxr:"0.5.0.post1",sparseqr:"1.2",sqlalchemy:"2.0.39","stack-data":"0.6.3",starlette:"0.47.2",statsmodels:"0.14.4",strictyaml:"1.7.3",svgwrite:"1.4.3",swiglpk:"5.0.12",sympy:"1.13.3",tblib:"3.0.0",termcolor:"2.5.0",texttable:"1.7.0",texture2ddecoder:"1.0.5",threadpoolctl:"3.5.0",tiktoken:"0.9.0",tomli:"2.2.1","tomli-w":"1.2.0",toolz:"1.0.0",tqdm:"4.67.1",traitlets:"5.14.3",traits:"7.0.2","tree-sitter":"0.23.2","tree-sitter-go":"0.23.3","tree-sitter-java":"0.23.4","tree-sitter-python":"0.23.4",tskit:"0.6.4","typing-extensions":"4.15.0",tzdata:"2025.2",ujson:"5.11.0",uncertainties:"3.2.2",unyt:"3.0.3",urllib3:"2.5.0","vega-datasets":"0.9.0",vrplib:"2.0.1",wcwidth:"0.2.13",webencodings:"0.5.1",wordcloud:"1.9.4",wrapt:"1.17.2",xarray:"2025.9.0",xgboost:"2.1.4",xlrd:"2.0.1",xxhash:"3.5.0",xyzservices:"2025.1.0",yarl:"1.18.3",yt:"4.4.0",zengl:"2.7.1",zfpy:"1.0.1",zstandard:"0.23.0"}},ro=Object.freeze({__proto__:null,default:io});const ao="ruby-wasm-wasi",no=ao.replace(/\\W+/g,"_");var po={type:ao,experimental:!0,module:(t="2.7.2")=>`https://cdn.jsdelivr.net/npm/@ruby/3.2-wasm-wasi@${t}/dist/browser/+esm`,async engine({DefaultRubyVM:t},e,s,o){s=s.replace(/\\/browser\\/\\+esm$/,"/ruby.wasm");const i=await Ze(s).arrayBuffer(),r=await WebAssembly.compile(i),{vm:a}=await t(r);return e.files&&await cs(this,a,e.files,o),e.fetch&&await as(this,a,e.fetch,o),e.js_modules&&await ls(e.js_modules,o),a},registerJSModule(t,e,s){e=e.replace(/\\W+/g,"__");const o=`__module_${no}_${e}`;globalThis[o]=s,this.run(t,`require "js";$${e}=JS.global[:${o}]`),delete globalThis[o]},run:(t,e,...s)=>t.eval(_e(e),...s),runAsync:(t,e,...s)=>t.evalAsync(_e(e),...s),async runEvent(t,e,s){if(/^xworker\\.(on\\w+)$/.test(e)){const{$1:e}=RegExp,o=`__module_${no}_event`;globalThis[o]=s,this.run(t,`require "js";$xworker.call("${e}",JS.global[:${o}])`),delete globalThis[o]}else{const o=this.run(t,`method(:${e})`);await o.call(e,t.wrap(s))}},transform:(t,e)=>e,writeFile:()=>{throw new Error(`writeFile is not supported in ${ao}`)}};var co={type:"wasmoon",module:(t="1.16.0")=>`https://cdn.jsdelivr.net/npm/wasmoon@${t}/+esm`,async engine({LuaFactory:t,LuaLibraries:e},s,o,i){const{stderr:r,stdout:a,get:n}=we(),p=await n((new t).createEngine());return p.global.getTable(e.Base,t=>{p.global.setField(t,"print",a),p.global.setField(t,"printErr",r)}),s.files&&await cs(this,p,s.files,i),s.fetch&&await as(this,p,s.fetch,i),s.js_modules&&await ls(s.js_modules,i),p},registerJSModule:(t,e,s)=>{t.global.set(e,s)},run:(t,e,...s)=>{try{return t.doStringSync(_e(e),...s)}catch(e){be.get(t).stderr(e)}},runAsync:async(t,e,...s)=>{try{return await t.doString(_e(e),...s)}catch(e){be.get(t).stderr(e)}},runEvent:async(t,e,s)=>{const[o,...i]=e.split(".");let r,a=t.global.get(o);for(const t of i)[r,a]=[a,a[t]];try{await a.call(r,s)}catch(e){be.get(t).stderr(e)}},transform:(t,e)=>e,writeFile:({cmodule:{module:{FS:t}}},e,s)=>((t,e,s)=>(ss(t,es(e)),e=os(t,e),t.writeFile(e,new Uint8Array(s),{canOwn:!0})))(t,e,s)};const lo=new WeakMap,yo=new FinalizationRegistry(t=>t()),uo=async(t,e)=>{const{shelter:s,destroy:o,io:i}=lo.get(t),{output:r,result:a}=await s.captureR(_e(e));for(const{type:t,data:e}of r)i[t](e);return yo.register(a,o),a};var mo={type:"webr",experimental:!0,module:(t="0.5.6")=>`https://cdn.jsdelivr.net/npm/webr@${t}/dist/webr.mjs`,async engine(t,e,s,o){const{get:i}=we(),r=new t.WebR;await i(r.init().then(()=>r));const a=await new r.Shelter;return lo.set(r,{module:t,shelter:a,destroy:a.destroy.bind(a),io:be.get(r)}),e.files&&await cs(this,r,e.files,o),e.fetch&&await as(this,r,e.fetch,o),e.js_modules&&await ls(e.js_modules,o),r},registerJSModule(t,e){console.warn(`Experimental interpreter: module ${e} is not supported (yet)`)},run:uo,runAsync:uo,async runEvent(t,e,s){await t.evalRVoid(`${e}(event)`,{env:{event:{type:[s.type]}}})},transform:(t,e)=>e,writeFile:()=>{}};const ho=new Map,go=new Map,fo=new Proxy(new Map,{get(t,e){if(!t.has(e)){const[s,...o]=e.split("@"),i=ho.get(s),r=/^(?:\\.?\\.?\\/|[a-z0-9-]+:\\/\\/)/i.test(o)?o.join("@"):i.module(...o);t.set(e,{url:r,module:import(r),engine:i.engine.bind(i)})}const{url:s,module:o,engine:i}=t.get(e);return(t,r)=>o.then(o=>(go.set(e,t),i(o,t,s,r)))}}),bo=t=>{for(const e of[].concat(t.type))ho.set(e,t)};for(const t of[Ge,Js,eo,io,po,co,mo])bo(t);const{parse:wo}=JSON,ko=(t,e,s={})=>{const[o,i]=((t,e="./config.txt")=>{let s=typeof t;return"string"===s&&/\\.(json|toml|txt)$/.test(t)?s=RegExp.$1:t=e,[$e(t),s]})(t,e);return"json"===i?s=Ze(o).json():"toml"===i?s=Ze(o).text().then($s):"string"===i?s=xo(t):"object"===i&&t?s=t:"txt"===i&&"string"==typeof s&&(s=xo(s)),[s,t=o]},xo=t=>{try{return wo(t)}catch(e){return $s(t)}},_o="BeforeRun",vo="AfterRun",jo=[`code${_o}`,`code${_o}Async`,`code${vo}`,`code${vo}Async`],zo=["onWorker","onReady",`on${_o}`,`on${_o}Async`,`on${vo}`,`on${vo}Async`];function Ao(t,e){const{run:s,runAsync:o}=ho.get(this.type);return{...t,run:s.bind(this,e),runAsync:o.bind(this,e)}}const Po=(t,e,s,o,i,r)=>{if(i||r){const a=Ao.bind(t,e),n=o?"runAsync":"run",p=t[n];t[n]=o?async function(t,e,...o){i&&await i.call(this,a(t),s);const n=await p.call(this,t,e,...o);return r&&await r.call(this,a(t),s),n}:function(t,e,...o){i&&i.call(this,a(t),s);const n=p.call(this,t,e,...o);return r&&r.call(this,a(t),s),n}}};let Eo,So,$o;const Mo=(t,e)=>{addEventListener(t,e||(async e=>{try{await Eo,So(`xworker.on${t}`,e)}catch(t){postMessage(t)}}),!!e&&{once:!0})},{proxy:Ro,sync:qo,native:Fo,window:Bo,isWindowProxy:Do,ffi:To}=await(async t=>{const e=await ge({...t,decoder:t?.decoder||dt}),s=Jt({...t,buffer:!0,reflect:e.proxy[c],timeout:e.ffi_timeout});return e.proxy[l]=s.reflect,{...e,window:s.global,isWindowProxy:s.isProxy,ffi:{assign:s.assign,direct:s.direct,evaluate:s.evaluate,gather:s.gather,query:s.query}}})({transfer:!1,transform:t=>$o?$o(t):t}),Lo={polyfill:qo,sync:Ro,window:Fo||qo?Bo:null,isWindowProxy:Do,onmessage:console.info,onerror:console.error,onmessageerror:console.warn,postMessage:postMessage.bind(self)};Mo("message",({data:{options:t,config:e,configURL:s,code:o,hooks:i}})=>{Eo=(async()=>{try{const{id:r,tag:p,type:c,custom:l,version:y,config:d,async:u}=t,m=((t,e="")=>`${t}@${e}`.replace(/@$/,""))(c,y),h=await((t,e,s,o={})=>(e&&([o,e]=ko(e,s,o)),Se(o).then(s=>fo[t](s,e))))(m,e,s,d),{js_modules:g}=go.get(m),f=g?.main,b=ze(ho.get(c)),w=((t,e,s,o)=>({type:e,config:s,interpreter:o,io:be.get(o),run:(e,...s)=>t.run(o,e,...s),runAsync:(e,...s)=>t.runAsync(o,e,...s),runEvent:(...e)=>t.runEvent(o,...e)}))(b,l||c,d||{},h);let k="run";if(u&&(k+="Async"),i){let t,e,s="",o="";for(const t of jo){const e=i[t];if(e){const i=t.endsWith("Async");(i&&u||!i&&!u)&&(t.startsWith("codeBefore")?s=e:o=e)}}(s||o)&&((t,e,s,o)=>{const i=t[e].bind(t);t[e]="run"===e?(t,e,...r)=>{s&&i(t,s,...r);const a=i(t,Fe(e),...r);return o&&i(t,o,...r),a}:async(t,e,...r)=>{s&&await i(t,s,...r);const a=await i(t,Fe(e),...r);return o&&await i(t,o,...r),a}})(b,k,s,o);for(const s of zo.slice(2)){const o=i[s];if(o){const i=s.endsWith("Async");if(i&&u||!i&&!u){const i=qe(o);s.startsWith("onBefore")?t=i:e=i}}}Po(b,w,Lo,u,t,e)}let x,_,v,j=null,z="";(Fo||qo)&&(({CustomEvent:x,document:_}=Bo),j=r&&_.getElementById(r)||null,v=t=>Re(j,l||c,t,!0,x));const A=He(Bo,Ro,f,e);if(((t,e,s,o)=>{if("pyodide"===t)return;const i="polyscript.js_modules";for(const t of Reflect.ownKeys(o))e.registerJSModule(s,`${i}.${t}`,Le(o,t));e.registerJSModule(s,i,o)})(c,b,h,A),b.registerJSModule(h,"polyscript",{IDBMap:a,IDBMapSync:n,xworker:Lo,currentScript:j,config:w.config,js_modules:A,ffi:To,get target(){return!z&&j&&("SCRIPT"===p?j.after(je(Bo.document.createElement(`script-${l||c}`),{id:z=`${r}-target`})):(z=r,j.replaceChildren(),j.style.display="block")),z}}),So=b.runEvent.bind(b,h),$o=b.transform.bind(b,h),j&&v("ready"),i?.onReady&&qe(i?.onReady).call(b,Ao.call(b,w,h),Lo),await b[k](h,o),["micropython","pyodide"].includes(b.type)){const t="polyscript",e=`__${t}_workers__`,s="__export__";h.runPython([`import js as ${e}`,`${e}.${e} = "${s}" in locals() and ${s} or []`,`del ${e}`].join("\\n"));const o=[...globalThis[e]];delete globalThis[e],o.length&&h.runPython([`from ${t} import xworker as ${e}`,...o.map(t=>`${e}.sync.${t} = ${t}`),`del ${e}`].join("\\n"))}return j&&v("done"),postMessage("polyscript:done"),h}catch(t){postMessage(t)}})(),Mo("error"),Mo("message"),Mo("messageerror"),(Fo||qo)&&addEventListener("py:progress",({type:t,detail:e})=>{Bo.dispatchEvent(new Bo.CustomEvent(t,{detail:e}))})});\n'.replace(Yr,Xr)],{type:"text/javascript"})),...t))({serviceWorker:r?.serviceWorker||r?.service_worker,reflected_ffi_timeout:globalThis.reflected_ffi_timeout??-1}),{postMessage:i}=n,a=this instanceof fo,l=E(n.proxy,{importJS:G,importCSS:K}),p=e();let y=c(s).text().then(t=>{const e=a?this.toJSON():void 0;i.call(n,{options:r,config:o,code:t,hooks:e})}).then(()=>{y={then:t=>t()}});return z(n,{sync:{value:l},ready:{value:p.promise},postMessage:{value:(t,...e)=>y.then(()=>i.call(n,t,...e))},onerror:{writable:!0,configurable:!0,value:console.error}}),n.addEventListener("message",t=>{const{data:e}=t,s=e instanceof Error;(s||"polyscript:done"===e)&&(t.stopImmediatePropagation(),s?(p.reject(e),n.onerror(B(t,{type:{value:"error"},error:{value:e}}))):p.resolve(n))}),a&&this.onWorker?.(this.interpreter,n),n};const go="Invalid content";var bo=t=>{const{src:e,worker:s}=t.attributes;if(s){let{value:r}=s;if(r)throw new SyntaxError("Invalid worker attribute");if(r=e?.value,!r){if(e)throw new SyntaxError("Invalid worker attribute");if(t.childElementCount){const{innerHTML:e,localName:s,type:o}=t,n=o||s.replace(/-script$/,"");r=v(e),console.warn(`Deprecated: use <script type="${n}"> for an always safe content parsing:\n`,r)}else r=t.textContent;return URL.createObjectURL(new Blob([x(r)],{type:"text/plain"}))}return r}if(e&&t.textContent.replace(/\/\*[\s\S]*?\*\//g,"").replace(/^\s*(?:\/\/|#).*/gm,"").trim())throw new SyntaxError(go)};const _o=(t,e)=>{const s=(t=>{let e=t;for(;e.parentNode;)e=e.parentNode;return e})(t);return s.getElementById(e)||((t,e=document)=>e.querySelector(t))(e,s)},wo=new WeakMap,ko={get(){let t=wo.get(this);return t||(t=document.createElement(`${this.type}-script`),wo.set(this,t),Eo(this)),t},set(t){"string"==typeof t?wo.set(this,_o(this,t)):(wo.set(this,t),Eo(this))}},Ao=new WeakMap,xo=new Map,vo=(t,e)=>{const s=t?.value;return s?e+s:""},jo=(t,e,s,r,o,n,i=t)=>{if(!xo.has(e)){const a={interpreter:no(s,o,n),queue:P(),XWorker:ho(t,r)};xo.set(e,a),xo.has(t)||xo.set(t,a),xo.has(i)||xo.set(i,a)}return xo.get(e)},Eo=async t=>{if(Ao.has(t)){const{target:e}=t;e&&(t.closest("head")?document.body.append(e):t.after(e))}else{const{attributes:{config:e,env:s,name:r,target:o,version:n,"service-worker":i},src:a,type:l}=t,p=!Y(t),y=n?.value,d=io(l,y);let m=vo(e,"|");const u=vo(s,"")||`${d}${m}`;m=m.slice(1);const f=bo(t);if(f){const e=new(ho(l,y))(f,{...F(t,l),version:y,async:p,config:m,serviceWorker:i?.value});Ao.set(C(t,"xworker",{value:e}),{xworker:e});const s=r?.value;return void(s&&Rs[s].resolve(e.ready))}const b=vo(o,""),_=jo(l,u,d,y,m);Ao.set(C(t,"target",ko),_),b&&wo.set(t,_o(t,b));const w=a?c(a).text():t.textContent;_.queue=_.queue.then(()=>(async(t,e,s,r)=>{const{type:o}=t,n=As.get(o);n.experimental&&console.warn(`The ${o} interpreter is experimental`);const[i,a]=await S([Ao.get(t).interpreter,e]);try{J(o,n,i,H),n.registerJSModule(i,"polyscript",{IDBMap:h,IDBMapSync:g,XWorker:s,currentScript:t,js_modules:H,workers:Ps}),T(t,o,"ready"),C(document,"currentScript",{configurable:!0,get:()=>t});const e=T.bind(null,t,o,"done");let l=n[r?"runAsync":"run"](i,a);return r&&(l=await l),e(),l}finally{delete document.currentScript}})(t,w,_.XWorker,p))}},Bo=new Proxy(B(null),{get:(t,e)=>new Promise(queueMicrotask).then(()=>zo(e))}),zo=async t=>{if(xo.has(t)){const{interpreter:e,queue:s}=xo.get(t);return(await S([e,s]))[0]}const e=xo.size?`Available interpreters are: ${[...xo.keys()].map(t=>`"${t}"`).join(", ")}.`:"There are no interpreters in this page.";throw new Error(`The interpreter "${t}" was not found. ${e}`)},Co=async t=>{const{type:e,currentTarget:s}=t;if(js.length)for(let{name:r,value:o,ownerElement:n}of Cs(`./@*[${js.map(t=>`name()="${t}${e}"`).join(" or ")}]`,s)){r=r.slice(0,-(e.length+1));const s=await zo(n.getAttribute(`${r}-env`)||r);As.get(r).runEvent(s,o,t)}},Ro=t=>{if(js.length)for(let{name:e,ownerElement:s}of Cs(`.//@*[${js.map(t=>`starts-with(name(),"${t}")`).join(" or ")}]`,t)){const t=e.lastIndexOf("-"),r=e.slice(t+1);"env"!==r&&(s.addEventListener(r,Co),"disabled"in s&&!s.disabled&&(s.disabled=!0,Bo[e.slice(0,t)].then(()=>{s.disabled=!1})))}},So=ho(),Po=[],Do=new Map,$o=new Map,Mo=new Map,Fo=async t=>{for(const e of Po)if(t.matches(e)){const s=$o.get(e),r=To.get(s),{resolve:o}=Mo.get(s),{options:n,known:i}=r;if(i.has(t))return;i.add(t);for(const[e,s]of Do)t.matches(e)&&await s(t);const{interpreter:a,configURL:l,config:c,version:p,env:y,onerror:d,hooks:m}=n;let u;try{const e=bo(t);if(e){let r=p,n=l,i=t.getAttribute("config")||c||{};if(!r||!i){const[t,e]=ro(i,l);i=await t,n=e,r=i.version||i.interpreter,r&&/\.m?js$/.test(r)&&(r=new URL(r,n).href)}Number.isSafeInteger(i?.experimental_ffi_timeout)&&(globalThis.reflected_ffi_timeout=i.experimental_ffi_timeout);const y=So.call(new fo(null,m),e,{...F(t,s),configURL:n,version:r,type:a,custom:s,config:i,async:!Y(t),serviceWorker:t.getAttribute("service-worker")});C(t,"xworker",{value:y}),o({type:s,xworker:y});const d=t.getAttribute("name");return void(d&&Rs[d].resolve(y.ready))}}catch(t){u=t}const f=io(a,p),b=y||`${f}${c?`|${c}`:""}`,{interpreter:_,XWorker:w}=jo(s,b,f,p,c,l,a),k=await _,A=B(As.get(a)),v=new fo(k,m),j=function(...t){return w.apply(v,t)},E={...q(A,s,structuredClone(xs.get(f)),k),XWorker:j};J(a,A,k,H),A.registerJSModule(k,"polyscript",{IDBMap:h,IDBMapSync:g,XWorker:j,config:E.config,currentScript:s.startsWith("_")?null:t,js_modules:H,workers:Ps});for(const e of["Run","RunAsync"]){let s,r,o="",n="";for(const t of po){const s=m?.main?.[t];s&&t.endsWith(e)&&(t.startsWith("codeBefore")?o=x(s()):n=x(s()))}(o||n)&&L(A,`r${e.slice(1)}`,o,n);for(let t=2;t<yo.length;t++){const o=yo[t],n=m?.main?.[o];n&&o.endsWith(e)&&(o.startsWith("onBefore")?s=n:r=n)}uo(A,E,t,e.endsWith("Async"),s,r)}r.queue=r.queue.then(()=>(o(E),u&&d?.(u,t),m?.main?.onReady?.(E,t)))}},To=new Map;let qo=0;const Oo=t=>(Mo.has(t)||Mo.set(t,e()),Mo.get(t).promise),[{customObserver:Lo,define:No,whenDefined:Io,env:Ho,Hook:Wo,XWorker:Uo},Jo]=t("polyscript",{customObserver:Do,define:(t,e)=>{let s=null==t;if(s)t="_ps"+qo++;else if(As.has(t)||To.has(t))throw new Error(`<script type="${t}"> already registered`);if(!As.has(e?.interpreter))throw new Error("Unspecified interpreter");As.set(t,As.get(e.interpreter));const r=[`script[type="${t}"]`];if(Oo(t),s){const{hooks:s}=e,r=s?.main?.onReady;e={...e,hooks:{...s,main:{...s?.main,onReady(e,s){Po.splice(Po.indexOf(t),1),As.delete(t),To.delete(t),Mo.delete(t),s.remove(),r?.(e)}}}},document.head.append(E(document.createElement("script"),{type:t}))}else r.push(`${t}-script`),js.push(`${t}-`);for(const e of r)$o.set(e,t);Po.push(...r),To.set(t,{options:E({env:t},e),known:new WeakSet,queue:Promise.resolve()}),s||Ro(document),zs(r.join(",")).forEach(Fo)},whenDefined:Oo,env:Bo,Hook:fo,XWorker:So});if(!Jo){const t=new MutationObserver(t=>{const s=vs.join(",");for(const{type:r,target:o,attributeName:n,addedNodes:i}of t){if("attributes"===r){const t=n.lastIndexOf("-")+1;if(t){const e=n.slice(0,t);for(const s of js)if(e===s){const e=n.slice(t);if("env"!==e){const t=o.hasAttribute(n)?"add":"remove";o[`${t}EventListener`](e,Co)}break}}continue}for(const t of i)1===t.nodeType&&(Ro(t),s&&t.matches(s)?Eo(t):e(s,t,!0))}}),e=(t,e,s)=>{t&&zs(t,e).forEach(Eo),(t=Po.join(","))&&(s&&Fo(e),zs(t,e).forEach(Fo))},s=e=>(t.observe(e,{childList:!0,subtree:!0,attributes:!0}),e),{attachShadow:r}=Element.prototype;E(Element.prototype,{attachShadow(t){return s(r.call(this,t))}}),queueMicrotask(()=>{Ro(s(document)),e(vs.join(","),document,!1)})}var Go=new Map([["py","pyodide"],["mpy","micropython"]]);const Ko=[];for(const[t]of Go){const s=[`script[type="${t}"]`,`${t}-script`];for(const r of document.querySelectorAll(s.join(","))){const{promise:s,resolve:o}=e();Ko.push(s),r.addEventListener(`${t}:done`,o,{once:!0})}}Promise.all(Ko).then(()=>{dispatchEvent(new Event("py:all-done"))});var Vo={codemirror:()=>Promise.resolve().then(function(){return Nn}),"deprecations-manager":()=>import("./deprecations-manager-alOm7GWl.js"),donkey:()=>import("./donkey-DWpZT0FI.js"),error:()=>import("./error-wvL_FwCm.js"),"py-editor":()=>import("./py-editor-B6fYMe1E.js"),"py-game":()=>import("./py-game-D9lExyPH.js"),"py-terminal":()=>import("./py-terminal-BwM2jqjS.js")};const Yo={CONFLICTING_CODE:"PY0409",BAD_CONFIG:"PY1000",FETCH_ERROR:"PY0001",FETCH_UNAUTHORIZED_ERROR:"PY0401",FETCH_FORBIDDEN_ERROR:"PY0403",FETCH_NOT_FOUND_ERROR:"PY0404",FETCH_SERVER_ERROR:"PY0500",FETCH_UNAVAILABLE_ERROR:"PY0503"};class Xo extends Error{constructor(t,e="",s="text"){super(`(${t}): ${e}`),this.errorCode=t,this.messageType=s,this.name="UserError"}}class Zo extends Xo{constructor(t,e){super(t,e),this.name="FetchError"}}const Qo=t=>t.text();async function tn(t,e){let s;try{s=await fetch(t,e)}catch(e){const s=e;let r;throw r=t.startsWith("http")?`Fetching from URL ${t} failed with error '${s.message}'. Are your filename and path correct?`:'Polyscript: Access to local files\n (using [[fetch]] configurations in <py-config>)\n is not available when directly opening a HTML file;\n you must use a webserver to serve the additional files.\n See <a style="text-decoration: underline;" href="https://github.com/pyscript/pyscript/issues/257#issuecomment-1119595062">this reference</a>\n on starting a simple webserver with Python.\n ',new Zo(Yo.FETCH_ERROR,r)}if(!s.ok){const e=`Fetching from URL ${t} failed with error ${s.status} (${s.statusText}). Are your filename and path correct?`;switch(s.status){case 404:throw new Zo(Yo.FETCH_NOT_FOUND_ERROR,e);case 401:throw new Zo(Yo.FETCH_UNAUTHORIZED_ERROR,e);case 403:throw new Zo(Yo.FETCH_FORBIDDEN_ERROR,e);case 500:throw new Zo(Yo.FETCH_SERVER_ERROR,e);case 503:throw new Zo(Yo.FETCH_UNAVAILABLE_ERROR,e);default:throw new Zo(Yo.FETCH_ERROR,e)}}return s}const{BAD_CONFIG:en,CONFLICTING_CODE:sn}=Yo,rn=async(t,e)=>{let s=t?.trim(),r="",o=!1,n=/^{/.test(s)&&/}$/.test(s);if(!n&&/\.(\w+)(?:\?\S*)?$/.test(s)){const t=RegExp.$1;"json"===t&&"toml"!==e?n=!0:"toml"===t&&"json"!==e?o=!0:((t,e="")=>{let s=`(${en}): Invalid URL: ${t}`;throw e&&(s+=`\nexpected ${e} content`),new Error(s)})(s,e),r=s,s=(await tn(r).then(Qo)).trim()}return{json:n,toml:o||!n&&!!s,text:s,url:r}},on=t=>new Error(`(${sn}): ${t}`),nn=(t,e=location.href)=>new URL(t,e).href,an=(t,e,{message:s})=>{let r=`(${en}): Invalid ${t}`;return e&&(r+=` @ ${e}`),new SyntaxError(`${r}\n${s}`)},ln=new Map;for(const[t]of Go){let e,s,r,o,n,i,a,l,c=zs(`${t}-config`),p=zs([`script[type="${t}"][config]:not([worker])`,`${t}-script[config]:not([worker])`].join(","));if(c.length>1?r=on(`Too many ${t}-config`):c.length&&p.length?r=on(`Ambiguous ${t}-config VS config attribute`):c.length?([l]=c,n=l.getAttribute("src")||l.textContent,i=l.getAttribute("type"),a=l.getAttribute("config-parser")):p.length&&([l,...p]=p,n=l.getAttribute("config"),a=l.getAttribute("config-parser"),p.some(t=>t.getAttribute("config")!==n)&&(r=on("Unable to use different configs on main"))),!r&&n)try{const{json:t,toml:e,text:l,url:c}=await rn(n,i);if(c&&(o=nn(c)),n=l,t||"json"===i)try{s=JSON.parse(l)}catch(t){r=an("JSON",c,t)}else if(e||"toml"===i)try{const t=a?await import(a):await import("./toml-Blg7Izee.js"),e=t.parse||t.default;s=e(l)}catch(t){r=an("TOML",c,t)}}catch(t){r=t}e=async()=>{const t=[];for(const[e,o]of Object.entries(Vo))r?"error"===e&&o().then(({notify:t})=>t(r.message)):s?.plugins?.includes(`!${e}`)?"error"===e&&t.push(o().then(({notOnDOM:t})=>t())):t.push(o().then(({default:t})=>t));return await Promise.all(t)},Number.isSafeInteger(s?.experimental_ffi_timeout)&&(globalThis.reflected_ffi_timeout=s?.experimental_ffi_timeout),ln.set(t,{config:s,configURL:o,plugins:e,error:r})}const cn=t=>{t.preventDefault(),t.stopImmediatePropagation()},pn="@pyscript.fs",yn="storage permissions not granted",dn=new h(pn),mn=async t=>{if(!("showDirectoryPicker"in globalThis))return Promise.reject(new Error("showDirectoryPicker is not supported"));const{promise:s,resolve:r,reject:o}=e(),n={id:"pyscript",mode:"readwrite",...t};t.hint&&(n.startIn=t.hint);const i=async()=>{try{const t=await showDirectoryPicker(n);if("granted"===await t.requestPermission(n))return r(t),!0}catch({message:t}){console.warn(t)}return!1};if(navigator.userActivation?.isActive)await i()||o(new Error(yn));else{const t=E(document.createElement("dialog"),{className:"pyscript-fs",innerHTML:["<strong>ℹ️ Persistent FileSystem</strong><hr>","<p><small>PyScript would like to access a local folder.</small></p>","<div><button title='ok'>✅ Authorize</button>","<button title='cancel'>❌</button></div>"].join("")}),[e,s]=zs("button",t);e.addEventListener("click",async e=>{cn(e),await i()&&t.close()}),s.addEventListener("click",async e=>{cn(e),o(new Error(yn)),t.close()}),document.body.appendChild(t).showModal()}return s};var un=Object.freeze({__proto__:null,ERROR:yn,NAMESPACE:pn,getFileSystemDirectoryHandle:mn,idb:dn}),fn={is_pyterminal:()=>!1,sleep:t=>new Promise(e=>setTimeout(e,1e3*t)),storeFSHandler:async(t,e={})=>!!await dn.has(t)||mn(e).then(async s=>(await dn.set(t,{handler:s,options:e}),!0),()=>!1),async deleteFSHandler(t){const e=await dn.has(t);return e&&await dn.delete(t),e}};const hn=t=>{C(document,"currentScript",{configurable:!0,get:()=>t})},gn=()=>{delete document.currentScript};var bn=async(t,e,s,r)=>{const o=r.endsWith("Async");(r.startsWith("onBefore")?hn:gn)(s);for(const n of t(r))o?await n(e,s):n(e,s)};const _n=()=>!0,wn=t=>{throw new TypeError(t)},kn=(t,e)=>{const s=[];if(t)for(const e of t.split(/\s*\|\s*/))"object"===e?s.push(t=>null!==t&&typeof t===e):"null"===e?s.push(t=>null===t):s.push(t=>typeof t===e);if(e)for(const t of[].concat(e))s.push(e=>e instanceof t);switch(s.length){case 0:return _n;case 1:return s[0];default:return t=>s.some(e=>e(t))}},An=(t,e,s,r=wn)=>o=>{const n=[`Invalid ${typeof o} ${s}: expected `];t&&(n.push(t),e&&n.push(" or ")),e&&(n.push("an instanceof "),n.push([].concat(e).map(({name:t})=>t).join(" | "))),r(n.join(""),o)},xn=(t=>e=>{const[s,r]=((t,e="value")=>{const s=t?.typeof,r=t?.instanceof;return[kn(s,r),An(s,r,e,t?.onerror)]})(e);return class extends t{add(t){return s(t)?super.add(t):r(t)}}})(Set);function vn(t=this){return String(t).replace(/^(async\s*)?(\bfunction\b)?(.*?)\(/,(t,e,s,r)=>r&&!s?`${e||""}function ${r}(`:t)}const{entries:jn}=Object,En=["import os as _os","from pathlib import Path as _Path","_path = None"],Bn=new class extends Array{#l=!1;#c;#p;constructor(t,...e){super(),this.#p=t,this.#c=e}push(...t){return this.#l&&super.push(...t),this.#p.push(...t)}path(t){for(const e of this.#c)if(this.#l=t.startsWith(e))break}}(En,"-"),zn=(t,e)=>{for(const[s,r]of jn(e))if(Bn.path(`${t}/${s}`),Bn.push(`_path = _Path("${t}/${s}")`),"string"==typeof r){const t=JSON.stringify(r);Bn.push(`_path.write_text(${t},encoding="utf-8")`)}else Bn.push(`if not _os.path.exists("${t}/${s}"):`),Bn.push(" _path.mkdir(parents=True, exist_ok=True)"),zn(`${t}/${s}`,r)};zn(".",{pyscript:{"__init__.py":"from polyscript import lazy_py_modules as py_import\nfrom pyscript.magic_js import RUNNING_IN_WORKER,PyWorker,config,current_target,document,js_import,js_modules,sync,window\nfrom pyscript.display import HTML,display\nfrom pyscript.fetch import fetch\nfrom pyscript.storage import Storage,storage\nfrom pyscript.websocket import WebSocket\nfrom pyscript.events import when,Event\nif not RUNNING_IN_WORKER:from pyscript.workers import create_named_worker,workers","display.py":"_K='_repr_mimebundle_'\n_J='image/svg+xml'\n_I='application/json'\n_H='__repr__'\n_G='savefig'\n_F='text/html'\n_E='image/jpeg'\n_D='application/javascript'\n_C='utf-8'\n_B='text/plain'\n_A='image/png'\nimport base64,html,io,re\nfrom pyscript.magic_js import current_target,document,window\nfrom pyscript.ffi import is_none\n_MIME_METHODS={_G:_A,'_repr_javascript_':_D,'_repr_json_':_I,'_repr_latex':'text/latex','_repr_png_':_A,'_repr_jpeg_':_E,'_repr_pdf_':'application/pdf','_repr_svg_':_J,'_repr_markdown_':'text/markdown','_repr_html_':_F,_H:_B}\ndef _render_image(mime,value,meta):\n\tA=value\n\tif isinstance(A,bytes):A=base64.b64encode(A).decode(_C)\n\tB=re.compile('^([A-Za-z0-9+/]{4})*([A-Za-z0-9+/]{3}=|[A-Za-z0-9+/]{2}==)?$')\n\tif len(A)>0 and not B.match(A):A=base64.b64encode(A.encode(_C)).decode(_C)\n\tC=f\"data:{mime};charset=utf-8;base64,{A}\";D=' '.join(['{k}=\"{v}\"'for(A,B)in meta.items()]);return f'<img src=\"{C}\" {D}></img>'\ndef _identity(value,meta):return value\n_MIME_RENDERERS={_B:html.escape,_F:_identity,_A:lambda value,meta:_render_image(_A,value,meta),_E:lambda value,meta:_render_image(_E,value,meta),_J:_identity,_I:_identity,_D:lambda value,meta:f\"<script>{value}<\\\\/script>\"}\nclass HTML:\n\tdef __init__(A,html):A._html=html\n\tdef _repr_html_(A):return A._html\ndef _eval_formatter(obj,print_method):\n\tB=obj;A=print_method\n\tif A==_H:return repr(B)\n\tif hasattr(B,A):\n\t\tif A==_G:C=io.BytesIO();B.savefig(C,format='png');C.seek(0);return base64.b64encode(C.read()).decode(_C)\n\t\treturn getattr(B,A)()\n\tif A==_K:return{},{}\ndef _format_mime(obj):\n\tC=obj\n\tif isinstance(C,str):return html.escape(C),_B\n\tD=_eval_formatter(C,_K)\n\tif isinstance(D,tuple):E,I=D\n\telse:E=D\n\tA,F=None,[]\n\tfor(H,B)in _MIME_METHODS.items():\n\t\tif B in E:A=E[B]\n\t\telse:A=_eval_formatter(C,H)\n\t\tif is_none(A):continue\n\t\tif B not in _MIME_RENDERERS:F.append(B);continue\n\t\tbreak\n\tif is_none(A):\n\t\tif F:window.console.warn(f\"Rendered object requested unavailable MIME renderers: {F}\")\n\t\tA=repr(A);B=_B\n\telif isinstance(A,tuple):A,G=A\n\telse:G={}\n\treturn _MIME_RENDERERS[B](A,G),B\ndef _write(element,value,append=False):\n\tB=element;C,D=_format_mime(value)\n\tif C=='\\\\n':return\n\tif append:A=document.createElement('div');B.append(A)\n\telse:\n\t\tA=B.lastElementChild\n\t\tif is_none(A):A=B\n\tif D in(_D,_F):E=document.createRange().createContextualFragment(C);A.append(E)\n\telse:A.innerHTML=C\ndef display(*E,target=None,append=True):\n\tD=append;A=target\n\tif is_none(A):A=current_target()\n\telif not isinstance(A,str):C=f\"target must be str or None, not {A.__class__.__name__}\";raise TypeError(C)\n\telif A=='':C='Cannot have an empty target';raise ValueError(C)\n\telif A.startswith('#'):A=A[1:]\n\tB=document.getElementById(A)\n\tif is_none(B):C=f\"Invalid selector with id={A}. Cannot be found in the page.\";raise ValueError(C)\n\tif B.tagName=='SCRIPT'and hasattr(B,'target'):B=B.target\n\tfor F in E:\n\t\tif not D:B.replaceChildren()\n\t\t_write(B,F,append=D)","events.py":"import asyncio,inspect,sys\nfrom functools import wraps\nfrom pyscript.magic_js import document\nfrom pyscript.ffi import create_proxy\nfrom pyscript.util import is_awaitable\nfrom pyscript import config\nclass Event:\n\tdef __init__(A):A._listeners=[]\n\tdef trigger(C,result):\n\t\tB=result\n\t\tfor A in C._listeners:\n\t\t\tif is_awaitable(A):asyncio.create_task(A(B))\n\t\t\telse:A(B)\n\tdef add_listener(B,listener):\n\t\tA=listener\n\t\tif is_awaitable(A)or callable(A):\n\t\t\tif A not in B._listeners:B._listeners.append(A)\n\t\telse:C='Listener must be callable or awaitable.';raise ValueError(C)\n\tdef remove_listener(A,*B):\n\t\tif B:\n\t\t\tfor C in B:A._listeners.remove(C)\n\t\telse:A._listeners=[]\ndef when(target,*B,**D):\n\tG='handler';C=target;E=None\n\tif B and(callable(B[0])or is_awaitable(B[0])):E=B[0]\n\telif callable(D.get(G))or is_awaitable(D.get(G)):E=D.pop(G)\n\tif isinstance(C,str):\n\t\tA=B[0]if B else D.pop('selector')\n\t\tif not A:I='No selector provided.';raise ValueError(I)\n\t\tfrom pyscript.web import Element as J,ElementCollection as K\n\t\tif isinstance(A,str):F=document.querySelectorAll(A)\n\t\telif isinstance(A,J):F=[A._dom_element]\n\t\telif isinstance(A,K):F=[A._dom_element for A in A]\n\t\telse:F=A if isinstance(A,list)else[A]\n\tdef H(func):\n\t\tB=func;D=inspect.signature(B)\n\t\tif D.parameters:\n\t\t\tif is_awaitable(B):\n\t\t\t\tasync def A(event):return await B(event)\n\t\t\telse:A=B\n\t\telif is_awaitable(B):\n\t\t\tasync def A(*A,**C):return await B()\n\t\telse:\n\t\t\tdef A(*A,**C):return B()\n\t\tA=wraps(B)(A)\n\t\tif isinstance(C,Event):C.add_listener(A)\n\t\telif isinstance(C,list)and all(isinstance(A,Event)for A in C):\n\t\t\tfor E in C:E.add_listener(A)\n\t\telse:\n\t\t\tfor G in F:G.addEventListener(C,create_proxy(A))\n\t\treturn A\n\treturn H(E)if E else H","fetch.py":"import json,js\nfrom pyscript.util import as_bytearray\nclass _Response:\n\tdef __init__(A,response):A._response=response\n\tdef __getattr__(A,attr):return getattr(A._response,attr)\n\tasync def arrayBuffer(B):\n\t\tA=await B._response.arrayBuffer()\n\t\tif hasattr(A,'to_py'):return A.to_py()\n\t\treturn memoryview(as_bytearray(A))\n\tasync def blob(A):return await A._response.blob()\n\tasync def bytearray(A):B=await A._response.arrayBuffer();return as_bytearray(B)\n\tasync def json(A):return json.loads(await A.text())\n\tasync def text(A):return await A._response.text()\nclass _DirectResponse:\n\t@staticmethod\n\tdef setup(promise,response):A=promise;A._response=_Response(response);return A._response\n\tdef __init__(B,promise):A=promise;B._promise=A;A._response=None;A.arrayBuffer=B.arrayBuffer;A.blob=B.blob;A.bytearray=B.bytearray;A.json=B.json;A.text=B.text\n\tasync def _response(A):\n\t\tif not A._promise._response:await A._promise\n\t\treturn A._promise._response\n\tasync def arrayBuffer(A):B=await A._response();return await B.arrayBuffer()\n\tasync def blob(A):B=await A._response();return await B.blob()\n\tasync def bytearray(A):B=await A._response();return await B.bytearray()\n\tasync def json(A):B=await A._response();return await B.json()\n\tasync def text(A):B=await A._response();return await B.text()\ndef fetch(url,**B):C=js.JSON.parse(json.dumps(B));D=lambda response,*B:_DirectResponse.setup(A,response);A=js.fetch(url,C).then(D);_DirectResponse(A);return A","ffi.py":"try:\n\timport js;from pyodide.ffi import create_proxy as _cp,to_js as _py_tjs,jsnull;from_entries=js.Object.fromEntries;is_none=lambda value:value is None or value is jsnull\n\tdef _tjs(value,**A):\n\t\tB='dict_converter'\n\t\tif not hasattr(A,B):A[B]=from_entries\n\t\treturn _py_tjs(value,**A)\nexcept:from jsffi import create_proxy as _cp;from jsffi import to_js as _tjs;import js;jsnull=js.Object.getPrototypeOf(js.Object.prototype);is_none=lambda value:value is None or value is jsnull\ncreate_proxy=_cp\nto_js=_tjs\ntry:\n\tfrom polyscript import ffi as _ffi;direct=_ffi.direct;gather=_ffi.gather;query=_ffi.query\n\tdef assign(source,*B):\n\t\tA=source\n\t\tfor C in B:_ffi.assign(A,to_js(C))\n\t\treturn A\nexcept:\n\timport js;_assign=js.Object.assign;direct=lambda source:source\n\tdef assign(source,*B):\n\t\tA=source\n\t\tfor C in B:_assign(A,to_js(C))\n\t\treturn A","flatted.py":"import json as _json\nclass _Known:\n\tdef __init__(A):A.key=[];A.value=[]\nclass _String:\n\tdef __init__(A,value):A.value=value\ndef _array_keys(value):\n\tA=[];B=0\n\tfor C in value:A.append(B);B+=1\n\treturn A\ndef _object_keys(value):\n\tA=[]\n\tfor B in value:A.append(B)\n\treturn A\ndef _is_array(value):return isinstance(value,(list,tuple))\ndef _is_object(value):return isinstance(value,dict)\ndef _is_string(value):return isinstance(value,str)\ndef _index(known,input,value):B=value;A=known;input.append(B);C=str(len(input)-1);A.key.append(B);A.value.append(C);return C\ndef _loop(keys,input,known,output):\n\tA=output\n\tfor B in keys:\n\t\tC=A[B]\n\t\tif isinstance(C,_String):_ref(B,input[int(C.value)],input,known,A)\n\treturn A\ndef _ref(key,value,input,known,output):\n\tB=known;A=value\n\tif _is_array(A)and A not in B:B.append(A);A=_loop(_array_keys(A),input,B,A)\n\telif _is_object(A)and A not in B:B.append(A);A=_loop(_object_keys(A),input,B,A)\n\toutput[key]=A\ndef _relate(known,input,value):\n\tB=known;A=value\n\tif _is_string(A)or _is_array(A)or _is_object(A):\n\t\ttry:return B.value[B.key.index(A)]\n\t\texcept:return _index(B,input,A)\n\treturn A\ndef _transform(known,input,value):\n\tB=known;A=value\n\tif _is_array(A):\n\t\tC=[]\n\t\tfor F in A:C.append(_relate(B,input,F))\n\t\treturn C\n\tif _is_object(A):\n\t\tD={}\n\t\tfor E in A:D[E]=_relate(B,input,A[E])\n\t\treturn D\n\treturn A\ndef _wrap(value):\n\tA=value\n\tif _is_string(A):return _String(A)\n\tif _is_array(A):\n\t\tB=0\n\t\tfor D in A:A[B]=_wrap(D);B+=1\n\telif _is_object(A):\n\t\tfor C in A:A[C]=_wrap(A[C])\n\treturn A\ndef parse(value,*C,**D):\n\tA=value;E=_json.loads(A,*C,**D);B=[]\n\tfor A in E:B.append(_wrap(A))\n\tinput=[]\n\tfor A in B:\n\t\tif isinstance(A,_String):input.append(A.value)\n\t\telse:input.append(A)\n\tA=input[0]\n\tif _is_array(A):return _loop(_array_keys(A),input,[A],A)\n\tif _is_object(A):return _loop(_object_keys(A),input,[A],A)\n\treturn A\ndef stringify(value,*D,**E):\n\tB=_Known();input=[];C=[];A=int(_index(B,input,value))\n\twhile A<len(input):C.append(_transform(B,input,input[A]));A+=1\n\treturn _json.dumps(C,*D,**E)","fs.py":"_A='pyscript'\nmounted={}\nasync def get_handler(fs,details):\n\tA=details;B=A.handler;C=A.options;D=await B.requestPermission(C)\n\tif D!='granted':raise RuntimeError(fs.ERROR)\n\treturn B\nasync def mount(path,mode='readwrite',root='',id=_A):\n\tF=path;import js;from _pyscript import fs as A,interpreter as K;from pyscript.ffi import to_js as G;from pyscript.magic_js import RUNNING_IN_WORKER as L,sync;js.console.warn('experimental pyscript.fs ⚠️');B=None;C=None;D=f\"{F}@{id}\";H={'id':id,'mode':mode}\n\tif root!='':H['startIn']=root\n\tif L:\n\t\tI=sync.storeFSHandler(D,G(H))\n\t\tif isinstance(I,bool):E=I\n\t\telse:E=await I\n\t\tif E:from polyscript import IDBMap as M;B=await M.new(A.NAMESPACE).get(D);C=await get_handler(A,B)\n\t\telse:raise RuntimeError(A.ERROR)\n\telse:\n\t\tE=await A.idb.has(D)\n\t\tif E:B=await A.idb.get(D);C=await get_handler(A,B)\n\t\telse:J=G(H);C=await A.getFileSystemDirectoryHandle(J);B={'handler':C,'options':J};await A.idb.set(D,G(B))\n\tmounted[F]=await K.mountNativeFS(F,C)\nasync def revoke(path,id=_A):\n\tfrom _pyscript import fs,interpreter as C;from pyscript.magic_js import RUNNING_IN_WORKER as D,sync;B=f\"{path}@{id}\"\n\tif D:A=sync.deleteFSHandler(B)\n\telse:\n\t\tA=await fs.idb.has(B)\n\t\tif A:A=await fs.idb.delete(B)\n\tif A:C._module.FS.unmount(path)\n\treturn A\nasync def sync(path):await mounted[path].syncfs()\nasync def unmount(path):from _pyscript import interpreter as A;await sync(path);A._module.FS.unmount(path)","magic_js.py":"import json,sys,js as globalThis\nfrom polyscript import config as _config,js_modules\nfrom pyscript.util import NotSupported\nRUNNING_IN_WORKER=not hasattr(globalThis,'document')\nconfig=json.loads(globalThis.JSON.stringify(_config))\nif'MicroPython'in sys.version:config['type']='mpy'\nelse:config['type']='py'\nclass JSModule:\n\tdef __init__(A,name):A.name=name\n\tdef __getattr__(B,field):\n\t\tA=field\n\t\tif not A.startswith('_'):return getattr(getattr(js_modules,B.name),A)\nfor name in globalThis.Reflect.ownKeys(js_modules):sys.modules[f\"pyscript.js_modules.{name}\"]=JSModule(name)\nsys.modules['pyscript.js_modules']=js_modules\nif RUNNING_IN_WORKER:\n\timport polyscript;PyWorker=NotSupported('pyscript.PyWorker','pyscript.PyWorker works only when running in the main thread')\n\ttry:import js;window=polyscript.xworker.window;document=window.document;js.document=document;js_import=window.Function('return (...urls) => Promise.all(urls.map((url) => import(url)))')()\n\texcept:message='Unable to use `window` or `document` -> https://docs.pyscript.net/latest/faq/#sharedarraybuffer';globalThis.console.warn(message);window=NotSupported('pyscript.window',message);document=NotSupported('pyscript.document',message);js_import=None\n\tsync=polyscript.xworker.sync\n\tdef current_target():return polyscript.target\nelse:\n\timport _pyscript;from _pyscript import PyWorker as _PyWorker,js_import;from pyscript.ffi import to_js\n\tdef PyWorker(url,**A):return _PyWorker(url,to_js(A))\n\twindow=globalThis;document=globalThis.document;sync=NotSupported('pyscript.sync','pyscript.sync works only when running in a worker')\n\tdef current_target():return _pyscript.target","media.py":"from pyscript import window\nfrom pyscript.ffi import to_js\nclass Device:\n\tdef __init__(A,device):A._dom_element=device\n\t@property\n\tdef id(self):return self._dom_element.deviceId\n\t@property\n\tdef group(self):return self._dom_element.groupId\n\t@property\n\tdef kind(self):return self._dom_element.kind\n\t@property\n\tdef label(self):return self._dom_element.label\n\tdef __getitem__(A,key):return getattr(A,key)\n\t@classmethod\n\tasync def load(E,audio=False,video=True):\n\t\tC='video';B=video;A={};A['audio']=audio\n\t\tif isinstance(B,bool):A[C]=B\n\t\telse:\n\t\t\tA[C]={}\n\t\t\tfor D in B:A[C][D]=B[D]\n\t\treturn await window.navigator.mediaDevices.getUserMedia(to_js(A))\n\tasync def get_stream(A):B=A.kind.replace('input','').replace('output','');C={B:{'deviceId':{'exact':A.id}}};return await A.load(**C)\nasync def list_devices():return[Device(A)for A in await window.navigator.mediaDevices.enumerateDevices()]","storage.py":"_C='memoryview'\n_B='bytearray'\n_A='generic'\nfrom polyscript import storage as _storage\nfrom pyscript.flatted import parse as _parse\nfrom pyscript.flatted import stringify as _stringify\nfrom pyscript.ffi import is_none\ndef _to_idb(value):\n\tA=value\n\tif is_none(A):return _stringify(['null',0])\n\tif isinstance(A,(bool,float,int,str,list,dict,tuple)):return _stringify([_A,A])\n\tif isinstance(A,bytearray):return _stringify([_B,list(A)])\n\tif isinstance(A,memoryview):return _stringify([_C,list(A)])\n\tB=f\"Unexpected value: {A}\";raise TypeError(B)\ndef _from_idb(value):\n\tC=value;A,B=_parse(C)\n\tif A=='null':return\n\tif A==_A:return B\n\tif A==_B:return bytearray(B)\n\tif A==_C:return memoryview(bytearray(B))\n\treturn C\nclass Storage(dict):\n\tdef __init__(B,store):A=store;super().__init__({A:_from_idb(B)for(A,B)in A.entries()});B.__store__=A\n\tdef __delitem__(A,attr):A.__store__.delete(attr);super().__delitem__(attr)\n\tdef __setitem__(B,attr,value):A=value;B.__store__.set(attr,_to_idb(A));super().__setitem__(attr,A)\n\tdef clear(A):A.__store__.clear();super().clear()\n\tasync def sync(A):await A.__store__.sync()\nasync def storage(name='',storage_class=Storage):\n\tif not name:A='The storage name must be defined';raise ValueError(A)\n\treturn storage_class(await _storage(f\"@pyscript/{name}\"))","util.py":"import js,sys,inspect\ndef as_bytearray(buffer):\n\tA=js.Uint8Array.new(buffer);B=A.length;C=bytearray(B)\n\tfor D in range(B):C[D]=A[D]\n\treturn C\nclass NotSupported:\n\tdef __init__(A,name,error):object.__setattr__(A,'name',name);object.__setattr__(A,'error',error)\n\tdef __repr__(A):return f\"<NotSupported {A.name} [{A.error}]>\"\n\tdef __getattr__(A,attr):raise AttributeError(A.error)\n\tdef __setattr__(A,attr,value):raise AttributeError(A.error)\n\tdef __call__(A,*B):raise TypeError(A.error)\ndef is_awaitable(obj):\n\tA=obj;from pyscript import config as B\n\tif B['type']=='mpy':\n\t\tif'<closure <generator>'in repr(A):return True\n\t\treturn inspect.isgeneratorfunction(A)\n\treturn inspect.iscoroutinefunction(A)","web.py":"_C='htmlFor'\n_B='on_'\n_A=None\nfrom pyscript import document,when,Event\nfrom pyscript.ffi import create_proxy,is_none\ndef wrap_dom_element(dom_element):return Element.wrap_dom_element(dom_element)\nclass Element:\n\telement_classes_by_tag_name={}\n\t@classmethod\n\tdef get_tag_name(A):return A.__name__.replace('_','')\n\t@classmethod\n\tdef register_element_classes(B,element_classes):\n\t\tfor A in element_classes:C=A.get_tag_name();B.element_classes_by_tag_name[C]=A\n\t@classmethod\n\tdef unregister_element_classes(A,element_classes):\n\t\tfor B in element_classes:C=B.get_tag_name();A.element_classes_by_tag_name.pop(C,_A)\n\t@classmethod\n\tdef wrap_dom_element(A,dom_element):B=dom_element;C=A.element_classes_by_tag_name.get(B.tagName.lower(),A);return C(dom_element=B)\n\tdef __init__(A,dom_element=_A,classes=_A,style=_A,**F):\n\t\tC=dom_element;A._dom_element=document.createElement(type(A).get_tag_name())if is_none(C)else C;A._on_events={};D={}\n\t\tfor(B,E)in F.items():\n\t\t\tif B.startswith(_B):G=A.get_event(B);G.add_listener(E)\n\t\t\telse:D[B]=E\n\t\tA._classes=Classes(A);A._style=Style(A);A.update(classes=classes,style=style,**D)\n\tdef __eq__(A,obj):return isinstance(obj,Element)and obj._dom_element==A._dom_element\n\tdef __getitem__(B,key):\n\t\tA=key\n\t\tif isinstance(A,(int,slice)):return B.children[A]\n\t\treturn B.find(A)\n\tdef __getattr__(B,name):\n\t\tA=name\n\t\tif A.startswith(_B):return B.get_event(A)\n\t\tif A.endswith('_'):A=A[:-1]\n\t\tif A=='for':A=_C\n\t\treturn getattr(B._dom_element,A)\n\tdef __setattr__(C,name,value):\n\t\tB=value;A=name\n\t\tif A.startswith('_'):super().__setattr__(A,B)\n\t\telse:\n\t\t\tif A.endswith('_'):A=A[:-1]\n\t\t\tif A=='for':A=_C\n\t\t\tif A.startswith(_B):C._on_events[A]=B\n\t\t\tsetattr(C._dom_element,A,B)\n\tdef get_event(A,name):\n\t\tB=name\n\t\tif not B.startswith(_B):C=\"Event names must start with 'on_'.\";raise ValueError(C)\n\t\tD=B[3:]\n\t\tif not hasattr(A._dom_element,D):C=f\"Element has no '{D}' event.\";raise ValueError(C)\n\t\tif B in A._on_events:return A._on_events[B]\n\t\tE=Event();A._on_events[B]=E;A._dom_element.addEventListener(D,create_proxy(E.trigger));return E\n\t@property\n\tdef children(self):return ElementCollection.wrap_dom_elements(self._dom_element.children)\n\t@property\n\tdef classes(self):return self._classes\n\t@property\n\tdef parent(self):\n\t\tif is_none(self._dom_element.parentElement):return\n\t\treturn Element.wrap_dom_element(self._dom_element.parentElement)\n\t@property\n\tdef style(self):return self._style\n\tdef append(B,*C):\n\t\tfor A in C:\n\t\t\tif isinstance(A,Element):B._dom_element.appendChild(A._dom_element)\n\t\t\telif isinstance(A,ElementCollection):\n\t\t\t\tfor D in A:B._dom_element.appendChild(D._dom_element)\n\t\t\telif isinstance(A,(list,tuple)):\n\t\t\t\tfor E in A:B.append(E)\n\t\t\telse:\n\t\t\t\ttry:A.tagName;B._dom_element.appendChild(A)\n\t\t\t\texcept AttributeError:\n\t\t\t\t\ttry:\n\t\t\t\t\t\tA.length\n\t\t\t\t\t\tfor F in A:B._dom_element.appendChild(F)\n\t\t\t\t\texcept AttributeError:G=f'Element \"{A}\" is a proxy object, \"but not a valid element or a NodeList.';raise TypeError(G)\n\tdef clone(B,clone_id=_A):A=Element.wrap_dom_element(B._dom_element.cloneNode(True));A.id=clone_id;return A\n\tdef find(A,selector):return ElementCollection.wrap_dom_elements(A._dom_element.querySelectorAll(selector))\n\tdef show_me(A):A._dom_element.scrollIntoView()\n\tdef update(A,classes=_A,style=_A,**D):\n\t\tC=style;B=classes\n\t\tif B:A.classes.add(B)\n\t\tif C:A.style.set(**C)\n\t\tfor(E,F)in D.items():setattr(A,E,F)\nclass Classes:\n\tdef __init__(A,element):A._element=element;A._class_list=A._element._dom_element.classList\n\tdef __contains__(A,item):return item in A._class_list\n\tdef __eq__(C,other):\n\t\tA=other\n\t\tif isinstance(A,Classes):B=list(A._class_list)\n\t\telse:\n\t\t\ttry:B=iter(A)\n\t\t\texcept TypeError:return False\n\t\treturn set(C._class_list)==set(B)\n\tdef __iter__(A):return iter(A._class_list)\n\tdef __len__(A):return A._class_list.length\n\tdef __repr__(A):return f\"Classes({\", \".join(A._class_list)})\"\n\tdef __str__(A):return' '.join(A._class_list)\n\tdef add(B,*C):\n\t\tfor A in C:\n\t\t\tif isinstance(A,list):\n\t\t\t\tfor D in A:B.add(D)\n\t\t\telse:B._class_list.add(A)\n\tdef contains(A,class_name):return class_name in A\n\tdef remove(B,*C):\n\t\tfor A in C:\n\t\t\tif isinstance(A,list):\n\t\t\t\tfor D in A:B.remove(D)\n\t\t\telse:B._class_list.remove(A)\n\tdef replace(A,old_class,new_class):A.remove(old_class);A.add(new_class)\n\tdef toggle(A,*C):\n\t\tfor B in C:\n\t\t\tif B in A:A.remove(B)\n\t\t\telse:A.add(B)\nclass HasOptions:\n\t@property\n\tdef options(self):\n\t\tA=self\n\t\tif not hasattr(A,'_options'):A._options=Options(A)\n\t\treturn A._options\nclass Options:\n\tdef __init__(A,element):A._element=element\n\tdef __getitem__(A,key):return A.options[key]\n\tdef __iter__(A):yield from A.options\n\tdef __len__(A):return len(A.options)\n\tdef __repr__(A):return f\"{A.__class__.__name__} (length: {len(A)}) {A.options}\"\n\t@property\n\tdef options(self):return[Element.wrap_dom_element(A)for A in self._element._dom_element.options]\n\t@property\n\tdef selected(self):return self.options[self._element._dom_element.selectedIndex]\n\tdef add(D,value=_A,html=_A,text=_A,before=_A,**B):\n\t\tC=value;A=before\n\t\tif C is not _A:B['value']=C\n\t\tif html is not _A:B['innerHTML']=html\n\t\tif text is not _A:B['text']=text\n\t\tE=option(**B)\n\t\tif A and isinstance(A,Element):A=A._dom_element\n\t\tD._element._dom_element.add(E._dom_element,A)\n\tdef clear(A):\n\t\twhile len(A)>0:A.remove(0)\n\tdef remove(A,index):A._element._dom_element.remove(index)\nclass Style:\n\tdef __init__(A,element):A._element=element;A._style=A._element._dom_element.style\n\tdef __getitem__(A,key):return A._style.getPropertyValue(key)\n\tdef __setitem__(A,key,value):A._style.setProperty(key,value)\n\tdef remove(A,key):A._style.removeProperty(key)\n\tdef set(A,**B):\n\t\tfor(C,D)in B.items():A._element._dom_element.style.setProperty(C,D)\n\t@property\n\tdef visible(self):return self._element._dom_element.style.visibility\n\t@visible.setter\n\tdef visible(self,value):self._element._dom_element.style.visibility=value\nclass ContainerElement(Element):\n\tdef __init__(B,*C,children=_A,dom_element=_A,style=_A,classes=_A,**D):\n\t\tsuper().__init__(dom_element=dom_element,style=style,classes=classes,**D)\n\t\tfor A in list(C)+(children or[]):\n\t\t\tif isinstance(A,(Element,ElementCollection)):B.append(A)\n\t\t\telse:B._dom_element.insertAdjacentHTML('beforeend',A)\n\tdef __iter__(A):yield from A.children\nclass ClassesCollection:\n\tdef __init__(A,collection):A._collection=collection\n\tdef __contains__(A,class_name):\n\t\tfor B in A._collection:\n\t\t\tif class_name in B.classes:return True\n\t\treturn False\n\tdef __eq__(B,other):A=other;return isinstance(A,ClassesCollection)and B._collection==A._collection\n\tdef __iter__(A):yield from A._all_class_names()\n\tdef __len__(A):return len(A._all_class_names())\n\tdef __repr__(A):return f\"ClassesCollection({A._collection!r})\"\n\tdef __str__(A):return' '.join(A._all_class_names())\n\tdef add(A,*B):\n\t\tfor C in A._collection:C.classes.add(*B)\n\tdef contains(A,class_name):return class_name in A\n\tdef remove(A,*B):\n\t\tfor C in A._collection:C.classes.remove(*B)\n\tdef replace(A,old_class,new_class):\n\t\tfor B in A._collection:B.classes.replace(old_class,new_class)\n\tdef toggle(A,*B):\n\t\tfor C in A._collection:C.classes.toggle(*B)\n\tdef _all_class_names(B):\n\t\tA=set()\n\t\tfor C in B._collection:\n\t\t\tfor D in C.classes:A.add(D)\n\t\treturn A\nclass StyleCollection:\n\tdef __init__(A,collection):A._collection=collection\n\tdef __getitem__(A,key):return[A.style[key]for A in A._collection._elements]\n\tdef __setitem__(A,key,value):\n\t\tfor B in A._collection._elements:B.style[key]=value\n\tdef __repr__(A):return f\"StyleCollection({A._collection!r})\"\n\tdef remove(A,key):\n\t\tfor B in A._collection._elements:B.style.remove(key)\nclass ElementCollection:\n\t@classmethod\n\tdef wrap_dom_elements(A,dom_elements):return A([Element.wrap_dom_element(A)for A in dom_elements])\n\tdef __init__(A,elements):A._elements=elements;A._classes=ClassesCollection(A);A._style=StyleCollection(A)\n\tdef __eq__(A,obj):return isinstance(obj,ElementCollection)and obj._elements==A._elements\n\tdef __getitem__(B,key):\n\t\tA=key\n\t\tif isinstance(A,int):return B._elements[A]\n\t\tif isinstance(A,slice):return ElementCollection(B._elements[A])\n\t\treturn B.find(A)\n\tdef __iter__(A):yield from A._elements\n\tdef __len__(A):return len(A._elements)\n\tdef __repr__(A):return f\"{A.__class__.__name__} (length: {len(A._elements)}) {A._elements}\"\n\tdef __getattr__(A,name):return[getattr(A,name)for A in A._elements]\n\tdef __setattr__(C,name,value):\n\t\tB=value;A=name\n\t\tif A.startswith('_'):super().__setattr__(A,B)\n\t\telse:\n\t\t\tfor D in C._elements:setattr(D,A,B)\n\t@property\n\tdef classes(self):return self._classes\n\t@property\n\tdef elements(self):return self._elements\n\t@property\n\tdef style(self):return self._style\n\tdef find(B,selector):\n\t\tA=[]\n\t\tfor C in B._elements:A.extend(C.find(selector))\n\t\treturn ElementCollection(A)\nclass a(ContainerElement):0\nclass abbr(ContainerElement):0\nclass address(ContainerElement):0\nclass area(Element):0\nclass article(ContainerElement):0\nclass aside(ContainerElement):0\nclass audio(ContainerElement):0\nclass b(ContainerElement):0\nclass base(Element):0\nclass blockquote(ContainerElement):0\nclass body(ContainerElement):0\nclass br(Element):0\nclass button(ContainerElement):0\nclass canvas(ContainerElement):\n\tdef download(A,filename='snapped.png'):B=a(download=filename,href=A._dom_element.toDataURL());A.append(B);B._dom_element.click()\n\tdef draw(E,what,width=_A,height=_A):\n\t\tC=height;B=width;A=what\n\t\tif isinstance(A,Element):A=A._dom_element\n\t\tD=E._dom_element.getContext('2d')\n\t\tif B or C:D.drawImage(A,0,0,B,C)\n\t\telse:D.drawImage(A,0,0)\nclass caption(ContainerElement):0\nclass cite(ContainerElement):0\nclass code(ContainerElement):0\nclass col(Element):0\nclass colgroup(ContainerElement):0\nclass data(ContainerElement):0\nclass datalist(ContainerElement,HasOptions):0\nclass dd(ContainerElement):0\nclass del_(ContainerElement):0\nclass details(ContainerElement):0\nclass dialog(ContainerElement):0\nclass div(ContainerElement):0\nclass dl(ContainerElement):0\nclass dt(ContainerElement):0\nclass em(ContainerElement):0\nclass embed(Element):0\nclass fieldset(ContainerElement):0\nclass figcaption(ContainerElement):0\nclass figure(ContainerElement):0\nclass footer(ContainerElement):0\nclass form(ContainerElement):0\nclass h1(ContainerElement):0\nclass h2(ContainerElement):0\nclass h3(ContainerElement):0\nclass h4(ContainerElement):0\nclass h5(ContainerElement):0\nclass h6(ContainerElement):0\nclass head(ContainerElement):0\nclass header(ContainerElement):0\nclass hgroup(ContainerElement):0\nclass hr(Element):0\nclass html(ContainerElement):0\nclass i(ContainerElement):0\nclass iframe(ContainerElement):0\nclass img(Element):0\nclass input_(Element):0\nclass ins(ContainerElement):0\nclass kbd(ContainerElement):0\nclass label(ContainerElement):0\nclass legend(ContainerElement):0\nclass li(ContainerElement):0\nclass link(Element):0\nclass main(ContainerElement):0\nclass map_(ContainerElement):0\nclass mark(ContainerElement):0\nclass menu(ContainerElement):0\nclass meta(ContainerElement):0\nclass meter(ContainerElement):0\nclass nav(ContainerElement):0\nclass object_(ContainerElement):0\nclass ol(ContainerElement):0\nclass optgroup(ContainerElement,HasOptions):0\nclass option(ContainerElement):0\nclass output(ContainerElement):0\nclass p(ContainerElement):0\nclass param(ContainerElement):0\nclass picture(ContainerElement):0\nclass pre(ContainerElement):0\nclass progress(ContainerElement):0\nclass q(ContainerElement):0\nclass s(ContainerElement):0\nclass script(ContainerElement):0\nclass section(ContainerElement):0\nclass select(ContainerElement,HasOptions):0\nclass small(ContainerElement):0\nclass source(Element):0\nclass span(ContainerElement):0\nclass strong(ContainerElement):0\nclass style(ContainerElement):0\nclass sub(ContainerElement):0\nclass summary(ContainerElement):0\nclass sup(ContainerElement):0\nclass table(ContainerElement):0\nclass tbody(ContainerElement):0\nclass td(ContainerElement):0\nclass template(ContainerElement):0\nclass textarea(ContainerElement):0\nclass tfoot(ContainerElement):0\nclass th(ContainerElement):0\nclass thead(ContainerElement):0\nclass time(ContainerElement):0\nclass title(ContainerElement):0\nclass tr(ContainerElement):0\nclass track(Element):0\nclass u(ContainerElement):0\nclass ul(ContainerElement):0\nclass var(ContainerElement):0\nclass video(ContainerElement):\n\tdef snap(E,to=_A,width=_A,height=_A):\n\t\tH='CANVAS';G='Element to snap to must be a canvas.';C=height;B=width;A=to;B=B if B is not _A else E.videoWidth;C=C if C is not _A else E.videoHeight\n\t\tif is_none(A):A=canvas(width=B,height=C)\n\t\telif isinstance(A,Element):\n\t\t\tif A.tag!='canvas':D=G;raise TypeError(D)\n\t\telif getattr(A,'tagName','')==H:A=canvas(dom_element=A)\n\t\telif isinstance(A,str):\n\t\t\tF=document.querySelectorAll(A)\n\t\t\tif F.length==0:D='No element with selector {to} to snap to.';raise TypeError(D)\n\t\t\tif F[0].tagName!=H:D=G;raise TypeError(D)\n\t\t\tA=canvas(dom_element=F[0])\n\t\tA.draw(E,B,C);return A\nclass wbr(Element):0\nELEMENT_CLASSES=[a,abbr,address,area,article,aside,audio,b,base,blockquote,body,br,button,canvas,caption,cite,code,col,colgroup,data,datalist,dd,del_,details,dialog,div,dl,dt,em,embed,fieldset,figcaption,figure,footer,form,h1,h2,h3,h4,h5,h6,head,header,hgroup,hr,html,i,iframe,img,input_,ins,kbd,label,legend,li,link,main,map_,mark,menu,meta,meter,nav,object_,ol,optgroup,option,output,p,param,picture,pre,progress,q,s,script,section,select,small,source,span,strong,style,sub,summary,sup,table,tbody,td,template,textarea,tfoot,th,thead,time,title,tr,track,u,ul,var,video,wbr]\nElement.register_element_classes(ELEMENT_CLASSES)\nclass Page:\n\tdef __init__(A):A.html=Element.wrap_dom_element(document.documentElement);A.body=Element.wrap_dom_element(document.body);A.head=Element.wrap_dom_element(document.head)\n\tdef __getitem__(A,selector):return A.find(selector)\n\t@property\n\tdef title(self):return document.title\n\t@title.setter\n\tdef title(self,value):document.title=value\n\tdef append(A,*B):A.body.append(*B)\n\tdef find(A,selector):return ElementCollection.wrap_dom_elements(document.querySelectorAll(selector))\npage=Page()","websocket.py":"import js\nfrom pyscript.ffi import create_proxy\nfrom pyscript.util import as_bytearray,is_awaitable\ncode='code'\nprotocols='protocols'\nreason='reason'\nmethods=['onclose','onerror','onmessage','onopen']\ndef add_listener(socket,onevent,listener):\n\tA=listener;B=create_proxy(A)\n\tif is_awaitable(A):\n\t\tasync def D(e):await B(EventMessage(e))\n\t\tC=D\n\telse:C=lambda e:B(EventMessage(e))\n\tsetattr(socket,onevent,C)\nclass EventMessage:\n\tdef __init__(A,event):A._event=event\n\tdef __getattr__(B,attr):\n\t\tA=getattr(B._event,attr)\n\t\tif attr=='data'and not isinstance(A,str):\n\t\t\tif hasattr(A,'to_py'):return A.to_py()\n\t\t\treturn memoryview(as_bytearray(A))\n\t\treturn A\nclass WebSocket:\n\tCONNECTING=0;OPEN=1;CLOSING=2;CLOSED=3\n\tdef __init__(E,**A):\n\t\tD=A['url']\n\t\tif protocols in A:B=js.WebSocket.new(D,A[protocols])\n\t\telse:B=js.WebSocket.new(D)\n\t\tB.binaryType='arraybuffer';object.__setattr__(E,'_ws',B)\n\t\tfor C in methods:\n\t\t\tif C in A:add_listener(B,C,A[C])\n\tdef __getattr__(A,attr):return getattr(A._ws,attr)\n\tdef __setattr__(B,attr,value):\n\t\tC=value;A=attr\n\t\tif A in methods:add_listener(B._ws,A,C)\n\t\telse:setattr(B._ws,A,C)\n\tdef close(B,**A):\n\t\tif code in A and reason in A:B._ws.close(A[code],A[reason])\n\t\telif code in A:B._ws.close(A[code])\n\t\telse:B._ws.close()\n\tdef send(B,data):\n\t\tA=data\n\t\tif isinstance(A,str):B._ws.send(A)\n\t\telse:\n\t\t\tC=js.Uint8Array.new(len(A))\n\t\t\tfor(D,E)in enumerate(A):C[D]=E\n\t\t\tB._ws.send(C)","workers.py":"import js as _js\nfrom polyscript import workers as _workers\n_get=_js.Reflect.get\ndef _set(script,name,value=''):script.setAttribute(name,value)\nclass _ReadOnlyProxy:\n\tdef __getitem__(A,name):return _get(_workers,name)\n\tdef __getattr__(A,name):return _get(_workers,name)\nworkers=_ReadOnlyProxy()\nasync def create_named_worker(src='',name='',config=None,type='py'):\n\tC=name;B=config;from json import dumps\n\tif not src:D='Named workers require src';raise ValueError(D)\n\tif not C:D='Named workers require a name';raise ValueError(D)\n\tA=_js.document.createElement('script');A.type=type;A.src=src;_set(A,'worker');_set(A,'name',C)\n\tif B:_set(A,'config',isinstance(B,str)and B or dumps(B))\n\t_js.document.body.append(A);return await workers[C]"}}),En.push("import pyscript as _pyscript"),En.push(...["_Path","_path","_os","_pyscript"].map(t=>`del ${t}`)),En.push("\n");const Cn=En.join("\n"),Rn=Bn.join("\n"),Sn=t=>On.main[t],Pn=t=>On.worker[t],Dn=(t,e,s,r)=>{t[s]=()=>{const t=r?[r]:[];return t.push(...e(s)),t.map(x).join("\n")}},$n=(t,e)=>{const s="mpy"===e?Cn.replace(Rn,""):Cn,r={};return Dn(r,t,"codeBeforeRun",s),Dn(r,t,"codeBeforeRunAsync",s),Dn(r,t,"codeAfterRun"),Dn(r,t,"codeAfterRunAsync"),r},Mn=(t,e)=>{const s=[...Pn(e)];if(s.length){const r=vn(t[`_${e}`]||(e.endsWith("Async")?async(t,e,...s)=>{for(const r of s)await r(t,e)}:(t,e,...s)=>{for(const r of s)r(t,e)})),o=s.map(vn).join(", ");return Function(`return(w,x)=>(${r})(w,x,...[${o}])`)()}},Fn=xn({typeof:"function"}),Tn=xn({typeof:"string"}),qn='\n import builtins\n def input(prompt=""):\n raise Exception("\\n ".join([\n "input() doesn\'t work when PyScript runs in the main thread.",\n "Consider using the worker attribute: https://pyscript.github.io/docs/2023.11.2/user-guide/workers/"\n ]))\n\n builtins.input = input\n del builtins\n del input\n',On={main:{onWorker:new Fn,onReady:new Fn,onBeforeRun:new Fn,onBeforeRunAsync:new Fn,onAfterRun:new Fn,onAfterRunAsync:new Fn,codeBeforeRun:new Tn([qn]),codeBeforeRunAsync:new Tn,codeAfterRun:new Tn,codeAfterRunAsync:new Tn},worker:{onReady:new Fn,onBeforeRun:new Fn,onBeforeRunAsync:new Fn([({interpreter:t})=>{t.registerJsModule("_pyscript",{fs:{ERROR:"storage permissions not granted",NAMESPACE:"@pyscript.fs"},interpreter:t})}]),onAfterRun:new Fn,onAfterRunAsync:new Fn,codeBeforeRun:new Tn,codeBeforeRunAsync:new Tn,codeAfterRun:new Tn,codeAfterRunAsync:new Tn}};var Ln={get core(){return import("./codemirror-7vXPINKi.js")},get state(){return import("./codemirror_state-BIAL8JKm.js")},get python(){return import("./codemirror_lang-python-CkOVBHci.js")},get language(){return import("./codemirror_language-DOkvasqm.js").then(function(t){return t.x})},get view(){return import("./codemirror_view-Bt4sLgyA.js").then(function(t){return t.t})},get commands(){return import("./codemirror_commands-CN4gxvZk.js")}},Nn=Object.freeze({__proto__:null,default:Ln});
|
|
2
|
-
/*! (c) PyScript Development Team */
|
|
3
|
-
const In=t=>import("./donkey-DWpZT0FI.js").then(e=>e.default(t)),Hn=({tagName:t})=>"SCRIPT"===t,[Wn,Un]=[...Go.entries()].map(([t,e])=>async function(s,r){await ln.get(t).plugins;const o=Uo.call(new Wo(null,Qn.get(t)),s,{...r,type:e});return E(o.sync,fn),o.ready}),[{PyWorker:Jn,MPWorker:Gn,hooks:Kn,config:Vn,whenDefined:Yn},Xn]=t("@pyscript/core",{PyWorker:Wn,MPWorker:Un,hooks:On,config:{},whenDefined:Io}),Zn=t=>t?.interpreter&&nn(t.interpreter),Qn=new Map;for(const[t,s]of Go){if(Xn)break;const r=(e,s,r)=>{s?r.then(()=>T(e,t,"done")):T(e,t,"done")},{config:o,configURL:n,plugins:i,error:a}=ln.get(t);let l=0;const c=(e=t)=>`${e}-${l++}`,p=async(e,s,r)=>{if(e.hasAttribute("src"))try{return await tn(e.getAttribute("src")).then(Qo)}catch(t){s.stderr(t)}if(r)return x(e.textContent);const o=x(v(e.innerHTML));return console.warn(`Deprecated: use <script type="${t}"> for an always safe content parsing:\n`,o),o};let y,d=!1;const m=({XWorker:t,interpreter:e,io:s})=>{d||(d=!0,e.registerJsModule("_pyscript",{PyWorker:function(...e){const r=t(...e);return r.onerror=({error:t})=>s.stderr(t),r},fs:un,interpreter:e,js_import:(...t)=>Promise.all(t.map(t=>import(t))),get target(){return Hn(y)?y.target.id:y.id}}))};a||i().then(()=>{const i=new Map,a={main:{...$n(Sn,t),async onReady(e,s){m(e);for(const t of Sn("onReady"))await t(e,s);if(i.has(s)){let{message:t}=i.get(s);i.delete(s);const r=t===go;return t=`(${Yo.CONFLICTING_CODE}) ${t} for `,t+=s.cloneNode(r).outerHTML,void e.io.stderr(t)}if(Hn(s)){const o=!Y(s),n=s.getAttribute("target"),i=n?_o(s,n):document.createElement("script-py");if(!n){const{head:t,body:e}=document;t.contains(s)?e.append(i):s.after(i)}i.id||(i.id=c()),C(s,"target",{value:i}),T(s,t,"ready"),r(s,o,e["run"+(o?"Async":"")](await p(s,e.io,!0)))}else s._wrap.resolve(e);console.debug("[pyscript/main] PyScript Ready")},onWorker(t,e){E(e.sync,fn);for(const s of Sn("onWorker"))s(t,e)},onBeforeRun(t,e){y=e,bn(Sn,t,e,"onBeforeRun")},onBeforeRunAsync:(t,e)=>(y=e,bn(Sn,t,e,"onBeforeRunAsync")),onAfterRun(t,e){bn(Sn,t,e,"onAfterRun")},onAfterRunAsync:(t,e)=>bn(Sn,t,e,"onAfterRunAsync")},worker:{...$n(Pn,t),get onReady(){return Mn(this,"onReady")},get onBeforeRun(){return Mn(this,"onBeforeRun")},get onBeforeRunAsync(){return Mn(this,"onBeforeRunAsync")},get onAfterRun(){return Mn(this,"onAfterRun")},get onAfterRunAsync(){return Mn(this,"onAfterRunAsync")}}};Qn.set(t,a),No(t,{config:o,configURL:n,interpreter:s,hooks:a,env:`${t}-script`,version:Zn(o),onerror(t,e){i.set(e,t)}}),customElements.define(`${t}-script`,class extends HTMLElement{constructor(){E(super(),{_wrap:e(),srcCode:"",executed:!1})}get id(){return super.id||(super.id=c())}set id(t){super.id=t}async connectedCallback(){if(!this.executed){this.executed=!0;const e=!Y(this),{io:s,run:o,runAsync:n}=await this._wrap.promise;this.srcCode=await p(this,s,!this.childElementCount),this.replaceChildren(),this.style.display="block",T(this,t,"ready"),r(this,e,(e?n:o)(this.srcCode))}}})}),Vn[t]=structuredClone(o)}export{Wo as H,Go as T,Uo as X,x as a,Lo as b,Ln as c,z as d,Kn as e,n as f,E as g,As as h,qn as i,No as j,rn as k,Be as l,Qo as m,ct as n,Zn as o,Rn as p,In as q,nn as r,Cn as s,Jn as t,Gn as u,Vn as v,e as w,Yn as x};
|
|
4
|
-
//# sourceMappingURL=core-XdIpeyet.js.map
|