From 7c499b00dd642c67449514404a483ffedea7e5ea Mon Sep 17 00:00:00 2001 From: webreflection Date: Tue, 4 Nov 2025 15:34:03 +0100 Subject: [PATCH] warn instead of error for pinned versions --- .eslintrc.json | 2 +- docs/index.js | 2 +- docs/index.js.map | 2 +- esm/interpreter/pyodide.js | 21 +- esm/interpreter/pyodide_graph.js | 4046 +---------------- package-lock.json | 44 +- package.json | 5 +- rollup/build_pyodide_graph.js | 27 +- .../interpreter/pyodide/packages.html | 1 - test/integration/pyodide.js | 10 +- test/pygame-ce/config.toml | 1 + test/pygame-ce/index.html | 15 + 12 files changed, 96 insertions(+), 4080 deletions(-) create mode 100644 test/pygame-ce/config.toml create mode 100644 test/pygame-ce/index.html diff --git a/.eslintrc.json b/.eslintrc.json index d2b15459..36cde35a 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -8,7 +8,7 @@ "ecmaVersion": "latest", "sourceType": "module" }, - "ignorePatterns": ["__template.js", "xworker.js", "esm/python/*.js", "esm/3rd-party/*"], + "ignorePatterns": ["__template.js", "xworker.js", "esm/python/*.js", "esm/3rd-party/*", "esm/interpreter/pyodide_graph.js"], "rules": { "object-curly-spacing": ["error", "always"], "quotes": ["error", "single"] diff --git a/docs/index.js b/docs/index.js index 152646b2..528c26c7 100644 --- a/docs/index.js +++ b/docs/index.js @@ -1,2 +1,2 @@ -const t=(t,e=document)=>[...e.querySelectorAll(t)],e=(t,e=document)=>{const s=(new XPathEvaluator).createExpression(t).evaluate(e,XPathResult.ORDERED_NODE_SNAPSHOT_TYPE),o=[];for(let t=0,{snapshotLength:e}=s;t"function"==typeof t,r={get:(t,e)=>s.hasOwnProperty(e)?((t,e,{get:s,value:r})=>s||!o(r)?t.then(t=>t[e]):(...s)=>t.then(t=>t[e](...s)))(t,e,s[e]):((t,e)=>o(e)?e.bind(t):e)(t,t[e])};var i=(t,...e)=>new Proxy(fetch(t,...e).then(e=>e.ok?e:Promise.reject(new Error(`[${e.status}] Unable to fetch ${t}`))),r);const{assign:a}=Object,n="entries",p="readonly",c="readwrite",l={durability:"default",prefix:"IDBMap"},y=({target:{result:t}})=>t;class d extends EventTarget{#t;#e;#s;async#o(t,e){const s=(await this.#t).transaction(n,e,this.#e);return new Promise((e,o)=>a(t(s.objectStore(n)),{onsuccess:e,onerror:o}))}constructor(t,{durability:e=l.durability,prefix:s=l.prefix}=l){super(),this.#s=s,this.#e={durability:e},this.#t=new Promise((e,s)=>{a(indexedDB.open(`${this.#s}/${t}`),{onupgradeneeded({target:{result:t,transaction:s}}){t.objectStoreNames.length||t.createObjectStore(n),s.oncomplete=()=>e(t)},onsuccess(t){e(y(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:o}=t;return super.dispatchEvent(o?a(new Event(e),{message:s}):t)}async close(){(await this.#t).close()}get size(){return this.#o(t=>t.count(),p).then(y)}async clear(){await this.#o(t=>t.clear(),c)}async delete(t){await this.#o(e=>e.delete(t),c)}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),p).then(y)}async has(t){return void 0!==await this.#o(e=>e.getKey(t),p).then(y)}async keys(){return await this.#o(t=>t.getAllKeys(),p).then(y)}async set(t,e){return await this.#o(s=>s.put(e,t),c),this}async values(){const t=await this.keys();return Promise.all(t.map(t=>this.get(t)))}get[Symbol.toStringTag](){return this.#s}}class u extends Map{#r;#i;constructor(...t){super(),this.#r=new d(...t),this.#i=this.#r.entries().then(t=>{for(const[e,s]of t)super.set(e,s)})}async close(){await this.#i,await this.#r.close()}async sync(){await this.#i}clear(){return this.#i=this.#i.then(()=>this.#r.clear()),super.clear()}delete(t){return this.#i=this.#i.then(()=>this.#r.delete(t)),super.delete(t)}set(t,e){return this.#i=this.#i.then(()=>this.#r.set(t,e)),super.set(t,e)}}var m=Promise.withResolvers.bind(Promise);const h=new Proxy(new Map,{get:(t,e)=>(t.has(e)||t.set(e,m()),t.get(e))}),g=new Set(["__dict__","constructor","get","has","includes","next","set","then"]),f=new Proxy(Object.freeze({}),{get:(t,e)=>"string"!=typeof e||g.has(e)?void 0:h[e].promise.then(t=>t.sync)});let b=0;const w=b++,k=b++,x=b++,_=b++,v=b++,j=b++,z=b++,A=b++,E=b++,P=b++,S=b++,$=b++,M=b++,R=b++,q=b++;b++;const F=b++,B=b++;const D=globalThis.ImageData||class{},T=new Map(Reflect.ownKeys(Symbol).map(t=>[Symbol[t],`@${String(t)}`])),L=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()}},O=t=>T.get(t)||((t,e)=>void 0===e?"?":void 0===Symbol.keyFor(t)?`!${e}`:`#${e}`)(t,t.description),C=Object.defineProperty,I=Object.assign,W=Array.from,U=Array.isArray,J=ArrayBuffer.isView,H=(t,e)=>[t,e],N=t=>t,K={},G=t=>(e,s=new Map)=>{for(let o=0,r=e.length;o0===t?e:L(e),Y=t=>"string"==typeof t?H(0,t):H(16,O(t)),V=(t,e)=>{for(let s=t.push,o=0,r=e.length;oe in globalThis?e:st(Q(Z(t.constructor),[0])),ot=(t,e)=>[e?t:W(new Uint8Array(t)),t.resizable?t.maxByteLength:0],rt=/\[('|")?(.+?)\1\]/g,it=(t,e)=>t?.[e];var at=(t,e)=>e.replace(rt,".$2").split(".").reduce(it,t),nt=(t,...e)=>e.map(pt,t);function pt(t){return"string"==typeof t?at(this,t):this[t]}const ct=globalThis.Node||class{},{apply:lt,construct:yt,defineProperty:dt,deleteProperty:ut,get:mt,getOwnPropertyDescriptor:ht,getPrototypeOf:gt,has:ft,isExtensible:bt,ownKeys:wt,set:kt,setPrototypeOf:xt}=Reflect;var _t=({reflect:t=N,transform:e=N,remote:s=N,module:o=t=>import(t),buffer:r=!1,timeout:i=-1}=K)=>{const a=(e,o=new Map)=>{if(!U(e))return e;const[r,i]=e;switch(r){case 2:{if(null===i)return globalThis;let t=o.get(e);if(!t){t=i,o.set(e,i);for(const t in i)i[t]=a(i[t],o)}return t}case 4:return o.get(e)||(o.set(e,i),p(i,o));case 8:{let e=f.get(i),o=e?.deref();return o||(e&&T.unregister(e),o=function(...e){s.apply(this,e);for(let t=0,s=e.length;t{switch(typeof t){case"object":{if(null===t)break;if(t===globalThis)return b;const s=e(t);return W&&C.has(s)||s instanceof D?H(0,s):J(s)?H(68,((t,e)=>{const{BYTES_PER_ELEMENT:s,byteOffset:o,buffer:r,length:i}=t;return[st(t),ot(r,e),o,i!==(r.byteLength-o)/s?i:0]})(s,r)):s instanceof ArrayBuffer?H(64,ot(s,r)):H(U(s)?5:3,d(s))}case"function":return H(9,d(e(t)));case"symbol":return H(16,O(t));case"bigint":return H(32,t.toString())}return t},p=G(a),c=G(X),l=G(Y),{clear:y,id:d,ref:u,unref:m}=((t=0,e=new Map,s=new Map)=>({clear:()=>{e.clear(),s.clear()},id:o=>{let r=s.get(o);if(void 0===r){for(;e.has(r=t++););e.set(r,o),s.set(o,r)}return r},ref:t=>e.get(t),unref:t=>(s.delete(e.get(t)),e.delete(t))}))(),h=/^(?:[0-9]+|length)$/,g=-1{f.delete(e),t(w,e)});let C,W=!1;return{assign:I,gather:nt,query:at,direct:t=>(W||(W=!0,C=new WeakSet),C.add(t),t),evaluate:(t,...e)=>lt(t,null,e),reflect(t,e,...s){const r=null===e,i=r?globalThis:u(e);switch(t){case P:{const t=X(s[0]),e=r&&"import"===t,a=e?o:mt(i,t),p=n(a);if(!g)return p;let c,l=e,y=i;if(!e&&!(y instanceof ct||U(y)&&"string"==typeof t&&h.test(t)))if(t in i){for(;!(c=ht(y,t))&&(y=gt(y),y););l=!!c&&"value"in c}else l=!0;return[l,p]}case j:{const t=new Map;return n(lt(i,a(s[0],t),p(s[1],t)))}case F:return kt(i,X(s[0]),a(s[1]));case M:return ft(i,X(s[0]));case q:return l(wt(i),f);case z:return n(yt(i,p(s[0])));case S:{const t=ht(i,X(s[0]));if(t)for(const e in t)t[e]=n(t[e]);return t}case A:return dt(i,X(s[0]),a(s[1]));case E:return ut(i,X(s[0]));case $:return n(gt(i));case B:return xt(i,a(s[0]));case k:return void I(i,a(s[0]));case x:{const t=a(s[0]),e=Function(`return(${t}).apply(null,arguments)`);return n(lt(e,null,p(s[1])))}case _:for(let t,e=0,o=(s=c(s[0],f)).length;e{const o=s.get(t),r=!o;return r?(re.setUint32(0,e.length,!0),s.set(t,[ie[0],ie[1],ie[2],ie[3]])):e.push(Qt,o[0],o[1],o[2],o[3]),r},de=(t,e,s)=>{re.setUint32(0,s,!0),t.push(e,ie[0],ie[1],ie[2],ie[3])},ue=(t,e,s)=>{switch(typeof t){case"number":t&&ne(t)?pe(t)&&t<256&&-1[r,t]));break}default:if("toJSON"in t){const o=t.toJSON();ue(o===t?null:o,e,s)}else{const o=ce(t),r=o.length;de(e,Nt,r);for(let i=0;i(s,o)=>{const r=new e(o,t);he=e.push,ue(s,r,new Map);const i=r.length;return r.sync(!0),me.length?Promise.all(me.splice(0)).then(e=>{const s=new Uint8Array(o,t);for(const[t,o]of e)s.set(new Uint8Array(o),t);return i}):i},fe="b3e5cb6e",be="="+fe,we="-"+fe;var ke=(t=t=>t)=>{const e=new Map;let s=0;return[()=>{let o;do{o=t(s++)}while(e.has(o));const r=m();return e.set(o,r),[o,r.promise]},(t,s,o)=>{const r=e.get(t);e.delete(t),o?r?.reject(o):r?.resolve(s)}]};const xe=[],_e=new WeakSet,ve=(...t)=>(_e.add(t),t);let{SharedArrayBuffer:je}=globalThis,ze=!0;try{new je(4,{maxByteLength:8})}catch(t){ze=!1,je=class extends ArrayBuffer{get growable(){return super.resizable}grow(t){super.resize(t)}}}const{assign:Ae,create:Ee}=Object,Pe=`coincident-${ze?crypto.randomUUID():Math.random().toString(36).substring(2)}`,Se={byteOffset:2*Int32Array.BYTES_PER_ELEMENT},$e=(t,e,s)=>{const o="then"!==e;return o&&(t[e]=s),o},Me=t=>{t.stopImmediatePropagation(),t.preventDefault()},Re=(t,e=-1)=>t?.reflected_ffi_timeout??e,{defineProperty:qe}=Object,[Fe,Be]=ke();let[De,Te]=Fe(),Le=()=>Te,{Atomics:Oe,MessageChannel:Ce,Worker:Ie}=globalThis;if(ze)Be(De);else{const t=new Map,e=(t,...e)=>{t.addEventListener(...e)};if("importScripts"in globalThis){e(globalThis,"message",t=>{Me(t),Be(De,t.data)},{once:!0});const{wait:s}=Oe,{parse:o}=JSON,r=e=>{const s=new XMLHttpRequest;try{if(s.timeout=3e3,s.open("POST",`${n}?sabayon`,!1),s.setRequestHeader("Content-Type","application/json"),s.send(`["${a}",${t.get(e)}]`),200===s.status)return s;throw s}catch{return s.abort(),r(e)}},i=(t,e)=>(t.set(o(e.responseText)),"ok");let a,n;Oe={wait:(e,...o)=>t.has(e)?i(e,r(e)):s(e,...o)},Te=Te.then(t=>{[a,n]=t})}else{const s=[Pe,Math.random()].join("-").replace(/\W/g,"-"),o=new BroadcastChannel("dc78209b-186c-4f83-80e9-406becb7d9f3");o.onmessage=async e=>{const[r,i,a]=e.data;if(i===s)for(const[e,[s,i]]of t)if(s===a){await i.promise;let t=e.length;for(;t--&&!e[t];);o.postMessage([r,e.slice(0,t+1)]);break}};const r=e=>{const[s,o,r]=e.data;t.set(o,[s,m()]),qe(e,"data",{value:r})};Ce=class extends Ce{constructor(){super(),e(this.port1,"message",r)}},Ie=class extends Ie{constructor(t,e){super(t,e),super.postMessage([s,a])}};const{notify:i}=Oe;Oe={notify(e,...s){const o=t.get(e);return o?(o[1].resolve(),0):i(e,...s)}};let a="",n=null;const p=(t,s)=>{let o,r=!0;t.getRegistration(a).then(e=>e??t.register(a,s)).then(function s(i){const{controller:n}=t;if(r=r&&!!n,o=i.installing||i.waiting||i.active,"activated"===o.state){if(r){if(n.scriptURL===a)return Be(De);i.unregister()}location.reload()}else e(o,"statechange",()=>s(i),{once:!0})})};Le=(t,e)=>{if(!n){const s=new URL(t,location.href);a=`${s.protocol}//${s.host}${s.pathname}`,p(navigator.serviceWorker,e),n=Te}return n}}}const We="InstallTrigger"in globalThis?Pe:"",Ue=t=>t,Je=t=>t===be?"main":t===we?"worker":t;class He extends Event{#a;constructor(t){super("message"),this.#a=t}get data(){return this.#a}}var Ne=t=>{const e=t?.transform,s=Re(t),o=(t?.encoder||ge)(Se),r=!1!==t?.transfer;return{Worker:class extends Ie{constructor(t,i){const a=ze?"":i?.serviceWorker||"",{notify:n}=a?Oe:Atomics,{port1:p,port2:c}=new(a?Ce:MessageChannel),[l,y]=ke(Ue),d=new Map,u=Ee(null);a&&Le(a);let m="";super(t,Ae({type:"module"},i)),this.proxy=new Proxy(u,{get:(t,s)=>{if("then"===s)return;let o=d.get(s);return o||d.set(s,o=(...t)=>{const o=((t,e)=>{let s=xe;return t&&_e.has(e.at(-1)||xe)&&(s=e.pop(),_e.delete(s)),s})(r,t),[i,a]=l();return p.postMessage([i,s,e?t.map(e):t],o),((t,e)=>{if(m){const s=setTimeout(console.warn,3e3,`💀🔒 - is proxy.${Je(m)}() awaiting proxy.${Je(e)}() ?`);t=t.then(t=>(clearTimeout(s),t),t=>(clearTimeout(s),Promise.reject(t)))}return t})(a,s)}),o},set:$e}),We&&(ze||a)&&super.addEventListener("message",t=>{const{data:e}=t;e?.ID===We&&(Me(t),p.dispatchEvent(new He(e.data)))}),super.postMessage([We,a,Re(i,s)],[c]),p.addEventListener("message",async({data:t})=>{const s=t[0],r=typeof s;if("number"===r)y.apply(null,t);else if(m=t[1],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,u,e),m="","string"===r)p.postMessage(t);else{const e=t[2]||t[1],r=void 0===e?0:o(e,s.buffer);s[1]="number"==typeof r?r:await r,s[0]=1,n(s,0)}}),p.start()}},native:ze,transfer:ve}};const{url:Ke}=import.meta,Ge=/import\((['"])([^)]+?\.js)\1\)/g,Xe=(t,e,s)=>`import(${e}${new URL(s,Ke).href}${e})`,Ye=Symbol.for("polyscript.js_modules");let Ve;const{Worker:Ze}=(t=>{const e=t?.import,s=Re(t),o=Ne({...t,encoder:t?.encoder||ge});class r extends o.Worker{#n;constructor(t,o){const{proxy:r}=super(t,o),i=_t({...o,buffer:!0,reflect:r[we],timeout:Re(o,s),remote(t){t instanceof Event&&(t=>{const{currentTarget:e,target:s,type:o}=t,r=jt.get(e||s)?.get(o);if(r)for(const e of r)t[e]()})(t)},module:o?.import||e||(t=>import(new URL(t,location).href))});this.#n=i.terminate,this.ffi={assign:i.assign,direct:i.direct,evaluate:i.evaluate,gather:i.gather,query:i.query},r[be]=i.reflect}terminate(){this.#n(),super.terminate()}}return{...o,Worker:r}})({transfer:!1,transform:t=>(Ve||(Ve=globalThis[Ye]?.get("-T-")))?.(t)??t});const Qe=new WeakMap,ts=t=>{const e=t||console,s={buffered:ss,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 Qe.set(e,s),e}}},es=new TextDecoder,ss=(t,e=10)=>{const s=[];return o=>{if(o instanceof Uint8Array)for(const r of o)r===e?t(es.decode(new Uint8Array(s.splice(0)))):s.push(r);else t(o)}},os=new Map,rs=t=>os.get(t),is=(t,e)=>{try{return Function("require",e)(rs)}catch(e){Qe.get(t).stderr(e)}};var as={type:"dummy",module:()=>"data:text/javascript,",engine:t=>ts().get(t),registerJSModule(t,e,s){os.set(e,s)},run:is,runAsync:is,runEvent:async(t,e,s)=>{try{await Function("require","e",`return ${e}(e)`)(rs,s)}catch(e){Qe.get(t).stderr(e)}},transform:(t,e)=>e,writeFile(){}};const ns={object(...t){return this.string(function(t){for(var e=t[0],s=1,o=arguments.length;s",">":">","'":"'","'":"'",""":'"',""":'"'},ys=t=>ls[t],ds=(t,...e)=>ns[typeof t](t,...e),us=t=>ps.call(t,cs,ys),{isArray:ms}=Array,{assign:hs,create:gs,defineProperties:fs,defineProperty:bs,entries:ws}=Object,{all:ks,resolve:xs}=new Proxy(Promise,{get:(t,e)=>t[e].bind(t)}),_s=(t,e=location.href)=>new URL(t,e.replace(/^blob:/,"")).href;function vs(t){return t.startsWith(".")?_s(t,this):t}let js=0;const zs=(t,e)=>({id:t.id||(t.id=`${e}-w${js++}`),tag:t.tagName}),As=(t,e,s,o=!1,r=CustomEvent)=>{t.dispatchEvent(new r(`${e}:${s}`,{bubbles:!0,detail:{worker:o}}))},Es=(t,e,s,o)=>({type:e,config:s,interpreter:o,io:Qe.get(o),run:(e,...s)=>t.run(o,e,...s),runAsync:(e,...s)=>t.runAsync(o,e,...s),runEvent:(...e)=>t.runEvent(o,...e)}),Ps=t=>t.replace(/^(?:\n|\r\n)/,""),Ss=(t,e,s,o)=>{const r=t[e].bind(t);t[e]="run"===e?(t,e,...i)=>{s&&r(t,s,...i);const a=r(t,Ps(e),...i);return o&&r(t,o,...i),a}:async(t,e,...i)=>{s&&await r(t,s,...i);const a=await r(t,Ps(e),...i);return o&&await r(t,o,...i),a}},$s=Symbol.for("polyscript.js_modules"),Ms=new Map;bs(globalThis,$s,{value:Ms});const Rs=new Proxy(Ms,{get:(t,e)=>t.get(e),has:(t,e)=>t.has(e),ownKeys:t=>[...t.keys()]}),qs=(t,e)=>!e.startsWith("_"),Fs=(t,e)=>new Proxy(t,{has:qs,get:(t,s)=>t[e][s]}),Bs=(t,e,s,o)=>{if("pyodide"===t)return;const r="polyscript.js_modules";for(const t of Reflect.ownKeys(o))e.registerJSModule(s,`${r}.${t}`,Fs(o,t));e.registerJSModule(s,r,o)},Ds=(t,e)=>import(t).then(t=>{Ms.set(e,{...t})}),Ts=t=>new Promise((e,s)=>{document.querySelector(`link[rel="stylesheet"][href="${t}"]`)?e():document.head.append(hs(document.createElement("link"),{rel:"stylesheet",href:t,onload:e,onerror:s}))}),Ls=t=>/\.css$/i.test(new URL(t).pathname),Os=t=>/^(?:false|0|no)$/i.test(t.getAttribute("async")),Cs=!globalThis.window,Is=({FS:t,PATH:e,PATH_FS:s},o,r)=>{const i=s.resolve(o),a=e.dirname(i);return t.mkdirTree?t.mkdirTree(a):Us(t,a),t.writeFile(i,new Uint8Array(r),{canOwn:!0})},Ws=t=>{const e=t.split("/");return e.pop(),e.join("/")},Us=(t,e)=>{const s=[];for(const o of e.split("/"))"."!==o&&".."!==o&&(s.push(o),o&&t.mkdir(s.join("/")))},Js=(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(/^\/+/,"/")},Hs=t=>{const e=t.map(t=>t.trim().replace(/(^[/]*|[/]*$)/g,"")).filter(t=>""!==t&&"."!==t).join("/");return t[0].startsWith("/")?`/${e}`:e},Ns=(t,e)=>i(_s(t,e)).arrayBuffer(),Ks=(t,e,s,o)=>ks((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(ms(o))return o.map(s=>({url:Hs([t,s]),path:Hs([e,s])}));const r=s||t.slice(1+t.lastIndexOf("/"));return[{url:t,path:Hs([e,r])}]})})(s).map(({url:s,path:r})=>Ns(s,o).then(s=>t.writeFile(e,r,s)))),Gs=(t,e)=>e.endsWith("/")?`${e}${t.split("/").pop()}`:e,Xs=(t,e)=>t.replace(/\{.+?\}/g,t=>{if(!e.has(t))throw new SyntaxError(`Invalid template: ${t}`);return e.get(t)}),Ys=(t,e,s,o)=>ks((t=>{const e=new Map,s=new Set,o=[];for(const[r,i]of ws(t))if(/^\{.+\}$/.test(r)){if(e.has(r))throw new SyntaxError(`Duplicated template: ${r}`);e.set(r,Xs(i,e))}else{const t=Xs(r,e),a=Gs(t,Xs(i||"./",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:r})=>Ns(s,o).then(o=>t.writeFile(e,r,o,s)))),Vs=({main:t,worker:e},s)=>{const o=[];if(e&&Cs)for(let[t,r]of ws(e))t=_s(t,s),o.push(Ds(t,r));if(t&&!Cs)for(let[e,r]of ws(t))e=_s(e,s),Ls(e)?Ts(e):o.push(Ds(e,r));return ks(o)},Zs=t=>e=>{dispatchEvent(new CustomEvent(`${t}:progress`,{detail:e}))},Qs=(t,e,s)=>(t.set(e,s),s),to=t=>{ie[0]=t[oo++],ie[1]=t[oo++],ie[2]=t[oo++],ie[3]=t[oo++],ie[4]=t[oo++],ie[5]=t[oo++],ie[6]=t[oo++],ie[7]=t[oo++]},eo=t=>(ie[0]=t[oo++],ie[1]=t[oo++],ie[2]=t[oo++],ie[3]=t[oo++],re.getUint32(0,!0)),so=(t,e)=>{switch(t[oo++]){case $t:return to(t),re.getFloat64(0,!0);case Mt:return t[oo++];case Nt:{const s=Qs(e,oo-1,{});for(let o=0,r=eo(t);o(oo=0,so(t,new Map)),stringify:t=>{const e=[];return he=V,ue(t,e,new Map),e}},io=new WeakMap,ao=async(t,e,s,o,r)=>{o.files&&(e("Loading files"),await Ys(t,s,o.files,r),e("Loaded files")),o.fetch&&(e("Loading fetch"),await Ks(t,s,o.fetch,r),e("Loaded fetch")),o.js_modules&&(e("Loading JS modules"),await Vs(o.js_modules,r),e("Loaded JS modules"))},no=(t,e,s)=>{"polyscript"===e&&(s.lazy_py_modules=async(...e)=>(await io.get(t)(e),e.map(e=>t.pyimport(e))),s.storage=async t=>{const e=new u(t);return await e.sync(),e},s.JSON=ro),t.registerJsModule(e,s)},po=(t,e)=>{if(t.endsWith("/*")){if(/\.(zip|whl|tgz|tar(?:\.gz)?)$/.test(e))return RegExp.$1;throw new Error(`Unsupported archive ${e}`)}return""},co=(t,e,...s)=>{try{return t.runPython(ds(e),...s)}catch(e){Qe.get(t).stderr(e)}},lo=async(t,e,...s)=>{try{return await t.runPythonAsync(ds(e),...s)}catch(e){Qe.get(t).stderr(e)}},yo=async(t,e,s)=>{const[o,...r]=e.split(".");let i,a=t.globals.get(o);for(const t of r)[i,a]=[a,a[t]];try{await a.call(i,s)}catch(e){Qe.get(t).stderr(e)}};var uo=(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 mo=async t=>(await import("./toml-BK2RWy-G.js")).parse(t);async function ho(t,e){return new Promise((s,o)=>{t.syncfs(e,t=>{t?o(t):s()})})}function go(t){const e=t.FS,s=t.FS.filesystems.MEMFS,o=t.PATH,r={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=r.getLocalSet(t),i=await r.getRemoteSet(t),a=e?i:o,n=e?o:i;await r.reconcile(t,a,n),s(null)}catch(t){s(t)}},getLocalSet:t=>{let s=Object.create(null);function r(t){return"."!==t&&".."!==t}function i(t){return e=>o.join2(t,e)}let a=e.readdir(t.mountpoint).filter(r).map(i(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(r).map(i(t))),s[t]={timestamp:o.mtime,mode:o.mode}}return{type:"local",entries:s}},getRemoteSet:async t=>{const e=Object.create(null),s=await fo(t.opts.fileSystemHandle);for(const[i,a]of s)"."!==i&&(e[o.join2(t.mountpoint,i)]={timestamp:"file"===a.kind?(await a.getFile()).lastModifiedDate:new Date,mode:"file"===a.kind?r.FILE_MODE:r.DIR_MODE});return{type:"remote",entries:e,handles:s}},loadLocalEntry:t=>{const o=e.lookupPath(t).node,r=e.stat(t);if(e.isDir(r.mode))return{timestamp:r.mtime,mode:r.mode};if(e.isFile(r.mode))return o.contents=s.getFileDataAsTypedArray(o),{timestamp:r.mtime,mode:r.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:r.FILE_MODE,timestamp:e.lastModifiedDate}}if("directory"===t.kind)return{mode:r.DIR_MODE,timestamp:new Date};throw new Error("unknown kind: "+t.kind)},storeRemoteEntry:async(t,s,r)=>{const i=t.get(o.dirname(s)),a=e.isFile(r.mode)?await i.getFileHandle(o.basename(s),{create:!0}):await i.getDirectoryHandle(o.basename(s),{create:!0});if("file"===a.kind){const t=await a.createWritable();await t.write(r.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,i)=>{let a=0;const n=[];Object.keys(s.entries).forEach(function(t){const o=s.entries[t],r=i.entries[t];(!r||e.isFile(o.mode)&&o.timestamp.getTime()>r.timestamp.getTime())&&(n.push(t),a++)}),n.sort();const p=[];if(Object.keys(i.entries).forEach(function(t){s.entries[t]||(p.push(t),a++)}),p.sort().reverse(),!a)return;const c="remote"===s.type?s.handles:i.handles;for(const e of n){const s=o.normalize(e.replace(t.mountpoint,"/")).substring(1);if("local"===i.type){const t=c.get(s),o=await r.loadRemoteEntry(t);r.storeLocalEntry(e,o)}else{const t=r.loadLocalEntry(e);await r.storeRemoteEntry(c,s,t)}}for(const e of p)if("local"===i.type)r.removeLocalEntry(e);else{const s=o.normalize(e.replace(t.mountpoint,"/")).substring(1);await r.removeRemoteEntry(c,s)}}};return t.FS.filesystems.NATIVEFS_ASYNC=r,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):Us(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 ho(e,!0),{syncfs:async()=>await ho(e,!1)}}}const fo=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:bo}=JSON,wo=(t,e)=>new URL(t,e).href,ko=(t,e,s)=>{if(e in t)throw new Error(`Duplicated path: ${e}`);t[e]=s},xo=(t,e,s)=>{for(const o in e)ko(t,wo(o,s),e[o])},_o=(t,e,s,o)=>{const r=e[s];r&&(t[s]??={},xo(t[s],r,o))},vo=async(t,e=t.packages,s=new Set)=>{const o=[];for(const r of e){if(s.has(r))continue;s.add(r);const e=r.endsWith(".toml");if(e||r.endsWith(".json")){const a=await i(r).text(),{name:n,files:p,js_modules:c,packages:l}=e?await mo(a):bo(a);if(s.has(n))throw new Error(`Unable to process ${n} @ ${r}`);s.add(n),l&&o.push(...await vo(t,l,s)),c&&(t.js_modules??={},_o(t.js_modules,c,"main",r),_o(t.js_modules,c,"worker",r)),p&&(t.files??={},xo(t.files,p,r))}else o.push(r)}return o},jo=(t,e)=>{try{t.mkdir(e)}catch(t){}},zo=Zs("mpy");var Ao={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:r,stdout:i,get:a}=ts({stderr:ss(console.error),stdout:ss(console.log)});s=s.replace(/\.m?js$/,".wasm"),zo("Loading MicroPython");const n=await a(t({linebuffer:!1,stderr:r,stdout:i,url:s}));globalThis[$s].set("-T-",this.transform.bind(this,n));const p=Eo.bind(this,n,o);return io.set(n,p),e.experimental_remote_packages&&(zo("Loading remote packages"),e.packages=await vo(e),zo("Loaded remote packages")),await ao(this,zo,n,e,o),this.writeFile(n,"./mip.py",uo),e.packages&&(zo("Loading packages"),await p(e.packages.map(vs,o)),zo("Loaded packages")),zo("Loaded MicroPython"),n.mountNativeFS||(n.mountNativeFS=go(n._module)),n},registerJSModule:no,run:co,runAsync:lo,runEvent:yo,transform:(t,e)=>t.PyProxy.toJs(e),writeFile:(t,e,s,o)=>{const{FS:r,_module:{PATH:i,PATH_FS:a}}=t,n={FS:r,PATH:i,PATH_FS:a},p=po(e,o);if(p){const o=e.slice(0,-1);switch("./"!==o&&r.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)jo(r,n);else{jo(r,i.dirname(n));const e=await t.getData(new s);r.writeFile(n,e,{canOwn:!0})}}n.close()})}case"tgz":case"tar.gz":{const e="./_.tar.gz";return Is(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 Is(n,e,s)}};async function Eo(t,e,s){let o;for(const r of s)if(r.endsWith(".whl")){const s=_s(r,e),o=await i(s).arrayBuffer();await this.writeFile(t,"./*",o,s)}else o||(o=t.pyimport("mip")),o.install(r)}const Po={dict_converter:Object.fromEntries},{stringify:So}=JSON,{hasOwn:$o}=Object,{apply:Mo}=Reflect,Ro=Function.prototype,qo=t=>function(...e){return Mo(t,this,e)};let Fo,Bo;const Do=t=>{const e=new WeakMap,s=s=>{for(let o,r=0;r`https://cdn.jsdelivr.net/pyodide/v${t}/full/pyodide.mjs`,async engine({loadPyodide:t,version:e},s,o,r){To("Loading Pyodide");let{packages:i,index_urls:a}=s;if(i){if(i=i.map(vs,r),!a){To("Loading Packages Graph");const{default:t}=await Promise.resolve().then(function(){return Uo});if(To("Loaded Packages Graph"),$o(t,e)){const s=i.filter(s=>{if(/^https?:\/\//.test(s))return!1;const[o,...r]=s.split(/[>=<]=/);return!$o(t[e],o)||r.length>0&&r[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&&(To("Loading remote packages"),s.packages=i=await vo(s,i),To("Loaded remote packages"))}To("Loading Storage");const n=o.slice(0,o.lastIndexOf("/")),p=new u(`${n}@${e}`),c={indexURL:n},l="never"!==s.packages_cache&&"0.28.0"!==e;if(await p.sync(),To("Loaded Storage"),l||p.clear(),i&&l)if("passthrough"===s.packages_cache)c.packages=i,i=null,p.clear();else{i=i.sort();const t=So(i);if(p.has(t)){const s=p.get(t);if(c.packages=i.map(t=>t.split(/[>=<]=/)[0]),e.startsWith("0.27")){const t=new Blob([s],{type:"application/json"});c.lockFileURL=URL.createObjectURL(t)}else c.lockFileContents=s;i=null}}const{stderr:y,stdout:d,get:m}=ts();To("Loading interpreter");const h=await m(t({stderr:y,stdout:d,...c}));To("Loaded interpreter"),globalThis[$s].set("-T-",this.transform.bind(this,h)),s.debug&&h.setDebug(!0);const g=Io.bind(h);return a&&Lo.set(h,a),io.set(h,g),await ao(this,To,h,s,r),i&&await g(i,p,l),await p.close(),c.lockFileURL&&URL.revokeObjectURL(c.lockFileURL),To("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({})}),Bo=globalThis.experimental_create_proxy,delete globalThis.experimental_create_proxy,[Fo]=Reflect.ownKeys(Bo).filter(t=>"symbol"==typeof t&&"Symbol(pyproxy.attrs)"===String(t)),Do(!0)),h},registerJSModule:no,run:qo(co),runAsync:qo(lo),runEvent:qo(yo),transform:(t,e)=>Mo(Co,t,[e]),writeFile:(t,e,s,o)=>{const r=po(e,o);if(r)return t.unpackArchive(s,r,{extractDir:e.slice(0,-1)});const{FS:i,PATH:a,_module:{PATH_FS:n}}=t;return Is({FS:i,PATH:a,PATH_FS:n},e,s)}};function Co(t){const{ffi:{PyProxy:e}}=this;if(t&&"object"==typeof t){if(t instanceof e)return t.toJs(Po);if(t instanceof Map)return new Map([...t.entries()]);if(ms(t))return t.map(Co,this)}return t}async function Io(t,e,s=!1){const{log:o}=console,r=(t,...e)=>{o(t,...e),console.log=o,To(t),console.log=r};console.log=r,await this.loadPackage("micropip");const i=this.pyimport("micropip");if(Lo.has(this)&&i.set_index_urls(Lo.get(this)),await i.install(t,{keep_going:!0}),console.log=o,s&&e instanceof u){const s=i.freeze();e.set(So(t),s)}i.destroy()}var Wo={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"}},Uo=Object.freeze({__proto__:null,default:Wo});const Jo="ruby-wasm-wasi",Ho=Jo.replace(/\W+/g,"_");var No={type:Jo,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 r=await i(s).arrayBuffer(),a=await WebAssembly.compile(r),{vm:n}=await t(a);return e.files&&await Ys(this,n,e.files,o),e.fetch&&await Ks(this,n,e.fetch,o),e.js_modules&&await Vs(e.js_modules,o),n},registerJSModule(t,e,s){e=e.replace(/\W+/g,"__");const o=`__module_${Ho}_${e}`;globalThis[o]=s,this.run(t,`require "js";$${e}=JS.global[:${o}]`),delete globalThis[o]},run:(t,e,...s)=>t.eval(ds(e),...s),runAsync:(t,e,...s)=>t.evalAsync(ds(e),...s),async runEvent(t,e,s){if(/^xworker\.(on\w+)$/.test(e)){const{$1:e}=RegExp,o=`__module_${Ho}_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 ${Jo}`)}};var Ko={type:"wasmoon",module:(t="1.16.0")=>`https://cdn.jsdelivr.net/npm/wasmoon@${t}/+esm`,async engine({LuaFactory:t,LuaLibraries:e},s,o,r){const{stderr:i,stdout:a,get:n}=ts(),p=await n((new t).createEngine());return p.global.getTable(e.Base,t=>{p.global.setField(t,"print",a),p.global.setField(t,"printErr",i)}),s.files&&await Ys(this,p,s.files,r),s.fetch&&await Ks(this,p,s.fetch,r),s.js_modules&&await Vs(s.js_modules,r),p},registerJSModule:(t,e,s)=>{t.global.set(e,s)},run:(t,e,...s)=>{try{return t.doStringSync(ds(e),...s)}catch(e){Qe.get(t).stderr(e)}},runAsync:async(t,e,...s)=>{try{return await t.doString(ds(e),...s)}catch(e){Qe.get(t).stderr(e)}},runEvent:async(t,e,s)=>{const[o,...r]=e.split(".");let i,a=t.global.get(o);for(const t of r)[i,a]=[a,a[t]];try{await a.call(i,s)}catch(e){Qe.get(t).stderr(e)}},transform:(t,e)=>e,writeFile:({cmodule:{module:{FS:t}}},e,s)=>((t,e,s)=>(Us(t,Ws(e)),e=Js(t,e),t.writeFile(e,new Uint8Array(s),{canOwn:!0})))(t,e,s)};const Go=new WeakMap,Xo=new FinalizationRegistry(t=>t()),Yo=async(t,e)=>{const{shelter:s,destroy:o,io:r}=Go.get(t),{output:i,result:a}=await s.captureR(ds(e));for(const{type:t,data:e}of i)r[t](e);return Xo.register(a,o),a};var Vo={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:r}=ts(),i=new t.WebR;await r(i.init().then(()=>i));const a=await new i.Shelter;return Go.set(i,{module:t,shelter:a,destroy:a.destroy.bind(a),io:Qe.get(i)}),e.files&&await Ys(this,i,e.files,o),e.fetch&&await Ks(this,i,e.fetch,o),e.js_modules&&await Vs(e.js_modules,o),i},registerJSModule(t,e){console.warn(`Experimental interpreter: module ${e} is not supported (yet)`)},run:Yo,runAsync:Yo,async runEvent(t,e,s){await t.evalRVoid(`${e}(event)`,{env:{event:{type:[s.type]}}})},transform:(t,e)=>e,writeFile:()=>{}};const Zo=new Map,Qo=new Map,tr=[],er=[],sr=new Proxy(new Map,{get(t,e){if(!t.has(e)){const[s,...o]=e.split("@"),r=Zo.get(s),i=/^(?:\.?\.?\/|[a-z0-9-]+:\/\/)/i.test(o)?o.join("@"):r.module(...o);t.set(e,{url:i,module:import(i),engine:r.engine.bind(r)})}const{url:s,module:o,engine:r}=t.get(e);return(t,i)=>o.then(o=>(Qo.set(e,t),r(o,t,s,i)))}}),or=t=>{for(const e of[].concat(t.type))Zo.set(e,t),tr.push(`script[type="${e}"]`),er.push(`${e}-`)};for(const t of[as,Ao,Oo,Wo,No,Ko,Vo])or(t);const{parse:rr}=JSON,ir=(t,e="./config.txt")=>{let s=typeof t;return"string"===s&&/\.(json|toml|txt)$/.test(t)?s=RegExp.$1:t=e,[_s(t),s]},ar=(t,e,s={})=>{const[o,r]=ir(t,e);return"json"===r?s=i(o).json():"toml"===r?s=i(o).text().then(mo):"string"===r?s=nr(t):"object"===r&&t?s=t:"txt"===r&&"string"==typeof s&&(s=nr(s)),[s,t=o]},nr=t=>{try{return rr(t)}catch(e){return mo(t)}},pr=(t,e,s,o={})=>(e&&([o,e]=ar(e,s,o)),xs(o).then(s=>sr[t](s,e))),cr=(t,e="")=>`${t}@${e}`.replace(/@$/,"");function lr(t=this){return String(t).replace(/^(async\s*)?(\bfunction\b)?(.*?)\(/,(t,e,s,o)=>o&&!s?`${e||""}function ${o}(`:t)}const yr="BeforeRun",dr="AfterRun",ur=[`code${yr}`,`code${yr}Async`,`code${dr}`,`code${dr}Async`],mr=["onWorker","onReady",`on${yr}`,`on${yr}Async`,`on${dr}`,`on${dr}Async`];function hr(t,e){const{run:s,runAsync:o}=Zo.get(this.type);return{...t,run:s.bind(this,e),runAsync:o.bind(this,e)}}const gr=(t,e,s,o,r,i)=>{if(r||i){const a=hr.bind(t,e),n=o?"runAsync":"run",p=t[n];t[n]=o?async function(t,e,...o){r&&await r.call(this,a(t),s);const n=await p.call(this,t,e,...o);return i&&await i.call(this,a(t),s),n}:function(t,e,...o){r&&r.call(this,a(t),s);const n=p.call(this,t,e,...o);return i&&i.call(this,a(t),s),n}}};let fr=class{constructor(t,e={}){const{main:s,worker:o}=e;this.interpreter=t,this.onWorker=s?.onWorker;for(const t of mr.slice(1))this[t]=o?.[t];for(const t of ur)this[t]=o?.[t]}toJSON(){const t={};for(const e of mr.slice(1))this[e]&&(t[e]=lr(this[e]));for(const e of ur)this[e]&&(t[e]=ds(this[e]()));return t}};var br=(...t)=>function(e,s){if(t.length){const[e,o]=t;(s=hs({},s||{type:e,version:o})).type||(s.type=e)}const[o]=ir(s.config,s.configURL),r=((...t)=>new Ze(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="b3e5cb6e",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++,L=y++,O=y++;const C=globalThis.ImageData||class{},I=new TextDecoder,J=new TextEncoder,U=new Map(Reflect.ownKeys(Symbol).map(t=>[Symbol[t],`@${String(t)}`])),H=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()}},W=t=>U.get(t)||((t,e)=>void 0===e?"?":void 0===Symbol.keyFor(t)?`!${e}`:`#${e}`)(t,t.description),N=Object.defineProperty,K=Object.assign,G=Array.isArray,V=ArrayBuffer.isView,X=(t,e)=>[t,e],Y=t=>t,Z=[],Q={},tt=function(){},et=t=>(e,s=new Map)=>{for(let o=0,i=e.length;o0===t?e:H(e),ot=t=>"string"==typeof t?X(0,t):X(16,W(t)),it=(t,e)=>{for(let s=t.push,o=0,i=e.length;o(t.set(e,s),s),ct=t=>{nt[0]=t[dt++],nt[1]=t[dt++],nt[2]=t[dt++],nt[3]=t[dt++],nt[4]=t[dt++],nt[5]=t[dt++],nt[6]=t[dt++],nt[7]=t[dt++]},lt=t=>(nt[0]=t[dt++],nt[1]=t[dt++],nt[2]=t[dt++],nt[3]=t[dt++],at.getUint32(0,!0)),yt=(t,e)=>{switch(t[dt++]){case g:return ct(t),at.getFloat64(0,!0);case f:return t[dt++];case R:{const s=pt(e,dt-1,{});for(let o=0,i=lt(t);o(dt=0,yt(t,new Map)),mt=({byteOffset:t=0}={})=>(e,s)=>ut(new Uint8Array(s,t,e));let ht=0;const gt=ht++,ft=ht++,bt=ht++,wt=ht++,kt=ht++,xt=ht++,_t=ht++,vt=ht++,jt=ht++,zt=ht++,At=ht++,Pt=ht++,Et=ht++,St=ht++,$t=ht++;ht++;const Mt=ht++,Rt=ht++,{getPrototypeOf:qt}=Object,{construct:Ft}=Reflect,{toStringTag:Bt}=Symbol,{toString:Dt}=Q,Tt=(t,e=Dt.call(t).slice(8,-1))=>e in globalThis?e:Tt(qt(t)||Q),Lt=(t,e=t[Bt])=>e in globalThis?e:Lt(Ft(qt(t.constructor),[0])),Ot=(t,e)=>new ArrayBuffer(t,{maxByteLength:e}),Ct=([t,e],s)=>{const o=s?t.byteLength:t.length;if(s){if(e){const s=Ot(o,e);new Uint8Array(s).set(new Uint8Array(t)),t=s}}else{const s=e?Ot(o,e):new ArrayBuffer(o);new Uint8Array(s).set(t),t=s}return t};const It=/\\[(\'|")?(.+?)\\1\\]/g,Jt=(t,e)=>t?.[e];var Ut=t=>{const e=[],s=t=>{const s=e.splice(t);for(;t{e.push(o,i)<3&&setTimeout(s,t,0)})(super.set(o,i),o),i}}},Ht=({reflect:t=Y,transform:e=Y,released:s=Y,buffer:o=!1,timeout:i=-1}=Q)=>{const r=et(st),a=et(ot),n=t=>{if(!G(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 H(s);case 32:return BigInt(s);case 68:return(([t,e,s,o],i)=>{const r=Ct(e,i),a=globalThis[t];return o?new a(r,s,o):new a(r,s)})(s,o);case 64:return Ct(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(G(i)){const e=[];o=X(4,e),s.set(t,o);for(let t=0,o=i.length;t{let s=v.get(e),o=s?.deref();return o||(s&&P.unregister(s),o=9===t?new Proxy(tt,new h(t,e)):new Proxy(3===t?Q:Z,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=-1this.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=X(2,null),A=new Proxy(Q,new m(2,null)),P=new FinalizationRegistry(e=>{v.delete(e),t(gt,e)});return{global:A,isProxy:y,assign(e,...s){const o=y(e),i=K(o?{}:e,...s);return o&&t(ft,f[1],p(i)),e},direct:t=>(b&&(b=!1,g=new WeakSet),g.add(t),t),evaluate:(e,...s)=>n(t(bt,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(wt,f[1],a(s,v)));for(let t=0;ty(e)?n(t(kt,f[1],s)):((t,e)=>e.replace(It,".$2").split(".").reduce(Jt,t))(e,s),reflect:async(t,e,...o)=>{switch(t){case xt:{const[t,s]=o;for(let t=0,e=s.length;tt)=>{const e=new Map;let s=0;return[()=>{let o;do{o=t(s++)}while(e.has(o));const i=Wt();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 Kt=[],Gt=new WeakSet,Vt=(...t)=>(Gt.add(t),t);let{SharedArrayBuffer:Xt}=globalThis,Yt=!0;try{new Xt(4,{maxByteLength:8})}catch(t){Yt=!1,Xt=class extends ArrayBuffer{get growable(){return super.resizable}grow(t){super.resize(t)}}}const{create:Zt}=Object,Qt=`coincident-${Yt?crypto.randomUUID():Math.random().toString(36).substring(2)}`,te=2*Int32Array.BYTES_PER_ELEMENT,ee={byteOffset:te},se=(t,e,s)=>{const o="then"!==e;return o&&(t[e]=s),o},oe=t=>{t.stopImmediatePropagation(),t.preventDefault()},[ie,re]=Nt();let[ae,ne]=ie(),pe=()=>ne,ce=()=>{},{Atomics:le,MessagePort:ye,SharedArrayBuffer:de,postMessage:ue}=globalThis;if(Yt)re(ae);else{de=Xt;const t=new Map,e=(t,...e)=>{t.addEventListener(...e)};if("importScripts"in globalThis){ce=e=>{t.set(e,null)};const s=e=>{const s=e[0],o=y++;return t.set(s,o),[o,s,e]},o=ue;ue=function(t,e){if(l){const i={ID:t.ID,data:s(t.data)};o(i,e)}else ne.then(()=>this.postMessage(t,e))},ye=class extends ye{postMessage(t,e){l?super.postMessage(s(t),e):ne.then(()=>this.postMessage(t,e))}},e(globalThis,"message",t=>{oe(t),re(ae,t.data)},{once:!0});const{wait:i}=le,{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");le={wait:(e,...s)=>t.has(e)?n(e,a(e)):i(e,...s)};let p,c,l=!1,y=Math.random();ne=ne.then(t=>{[p,c]=t,l=!0})}else{const s=[Qt,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}=le;le={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 re(ae);a.unregister()}location.reload()}else e(o,"statechange",()=>s(a),{once:!0})})};pe=(t,e)=>{if(!a){const s=new URL(t,location.href);r=`${s.protocol}//${s.host}${s.pathname}`,n(navigator.serviceWorker,e),a=ne}return a}}}const{setPrototypeOf:me}=Reflect;let{postMessage:he}=globalThis;const ge=Wt(),fe=ye.prototype;addEventListener("message",t=>{oe(t);const[e,s,o]=t.data,[i]=t.ports;s&&(me(i,fe),e&&(he=ue)),ge.resolve([e,s,o,i])},{once:!0});var be=async t=>{const[e,s,o,i]=await pe().then(()=>ge.promise),r=!!e,a=Yt||!!s,n=t?.transform,p=(t?.decoder||mt)(ee),c=!1!==t?.transfer;let l,y,d,u;if(a){const e=new(s?de:SharedArrayBuffer)(t?.minByteLength||32767,{maxByteLength:t?.maxByteLength||16777216});l=new Int32Array(e),s?(({wait:u}=le),ce(l)):(({load:y,pause:d,wait:u}=Atomics),d&&(u=(t,e)=>{do{d()}while(y(t,e)<1)}))}const[m,h]=Nt(String),g=new Map,f=Zt(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=Kt;return t&&Gt.has(e.at(-1)||Kt)&&(s=e.pop(),Gt.delete(s)),s})(c,t),y=[l,s,n?t.map(n):t];if(a){r?he({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:se});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:Yt,proxy:b,ffi_timeout:o,sync:a,transfer:Vt}};const we={object(...t){return this.string(function(t){for(var e=t[0],s=1,o=arguments.length;s{const e=t||console,s={buffered:ve,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 ke.set(e,s),e}}},_e=new TextDecoder,ve=(t,e=10)=>{const s=[];return o=>{if(o instanceof Uint8Array)for(const i of o)i===e?t(_e.decode(new Uint8Array(s.splice(0)))):s.push(i);else t(o)}},je=(t,...e)=>we[typeof t](t,...e),{isArray:ze}=Array,{assign:Ae,create:Pe,defineProperty:Ee,entries:Se}=Object,{all:$e,resolve:Me}=new Proxy(Promise,{get:(t,e)=>t[e].bind(t)}),Re=(t,e=location.href)=>new URL(t,e.replace(/^blob:/,"")).href;function qe(t){return t.startsWith(".")?Re(t,this):t}const Fe=(t,e,s,o=!1,i=CustomEvent)=>{t.dispatchEvent(new i(`${e}:${s}`,{bubbles:!0,detail:{worker:o}}))},Be=t=>Function(`\'use strict\';return (${t})`)(),De=t=>t.replace(/^(?:\\n|\\r\\n)/,""),Te=Symbol.for("polyscript.js_modules"),Le=new Map;Ee(globalThis,Te,{value:Le}),new Proxy(Le,{get:(t,e)=>t.get(e),has:(t,e)=>t.has(e),ownKeys:t=>[...t.keys()]});const Oe=(t,e)=>!e.startsWith("_"),Ce=(t,e)=>new Proxy(t,{has:Oe,get:(t,s)=>t[e][s]}),Ie=(t,e)=>import(t).then(t=>{Le.set(e,{...t})}),Je=t=>new Promise((e,s)=>{document.querySelector(`link[rel="stylesheet"][href="${t}"]`)?e():document.head.append(Ae(document.createElement("link"),{rel:"stylesheet",href:t,onload:e,onerror:s}))}),Ue=t=>/\\.css$/i.test(new URL(t).pathname),He=(t,e)=>t.has(e),We=t=>[...t.keys()];var Ne=(t,e,s,o)=>{const i=globalThis[Te];if(s)for(let[t,e]of Se(s)){let s=i.get(e);s&&!ze(s)||(i.set(e,s||(s=[])),s.push(t))}return((t,e,s,o)=>new Proxy(t,{has:He,ownKeys:We,get:(t,i)=>{let r=t.get(i);if(ze(r)){let a=r;r=null;for(let t of a)t=Re(t,o),Ue(t)?s.importCSS(t):(s.importJS(t,i),r=e[Te].get(i));t.set(i,r)}return r}}))(i,t,e,o)};const Ke=new Map,Ge=t=>Ke.get(t),Ve=(t,e)=>{try{return Function("require",e)(Ge)}catch(e){ke.get(t).stderr(e)}};var Xe={type:"dummy",module:()=>"data:text/javascript,",engine:t=>xe().get(t),registerJSModule(t,e,s){Ke.set(e,s)},run:Ve,runAsync:Ve,runEvent:async(t,e,s)=>{try{await Function("require","e",`return ${e}(e)`)(Ge,s)}catch(e){ke.get(t).stderr(e)}},transform:(t,e)=>e,writeFile(){}};const Ye=Object.getOwnPropertyDescriptors(Response.prototype),Ze=t=>"function"==typeof t,Qe={get:(t,e)=>Ye.hasOwnProperty(e)?((t,e,{get:s,value:o})=>s||!Ze(o)?t.then(t=>t[e]):(...s)=>t.then(t=>t[e](...s)))(t,e,Ye[e]):((t,e)=>Ze(e)?e.bind(t):e)(t,t[e])};var ts=(t,...e)=>new Proxy(fetch(t,...e).then(e=>e.ok?e:Promise.reject(new Error(`[${e.status}] Unable to fetch ${t}`))),Qe);const es=!globalThis.window,ss=({FS:t,PATH:e,PATH_FS:s},o,i)=>{const r=s.resolve(o),a=e.dirname(r);return t.mkdirTree?t.mkdirTree(a):is(t,a),t.writeFile(r,new Uint8Array(i),{canOwn:!0})},os=t=>{const e=t.split("/");return e.pop(),e.join("/")},is=(t,e)=>{const s=[];for(const o of e.split("/"))"."!==o&&".."!==o&&(s.push(o),o&&t.mkdir(s.join("/")))},rs=(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(/^\\/+/,"/")},as=t=>{const e=t.map(t=>t.trim().replace(/(^[/]*|[/]*$)/g,"")).filter(t=>""!==t&&"."!==t).join("/");return t[0].startsWith("/")?`/${e}`:e},ns=(t,e)=>ts(Re(t,e)).arrayBuffer(),ps=(t,e,s,o)=>$e((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(ze(o))return o.map(s=>({url:as([t,s]),path:as([e,s])}));const i=s||t.slice(1+t.lastIndexOf("/"));return[{url:t,path:as([e,i])}]})})(s).map(({url:s,path:i})=>ns(s,o).then(s=>t.writeFile(e,i,s)))),cs=(t,e)=>e.endsWith("/")?`${e}${t.split("/").pop()}`:e,ls=(t,e)=>t.replace(/\\{.+?\\}/g,t=>{if(!e.has(t))throw new SyntaxError(`Invalid template: ${t}`);return e.get(t)}),ys=(t,e,s,o)=>$e((t=>{const e=new Map,s=new Set,o=[];for(const[i,r]of Se(t))if(/^\\{.+\\}$/.test(i)){if(e.has(i))throw new SyntaxError(`Duplicated template: ${i}`);e.set(i,ls(r,e))}else{const t=ls(i,e),a=cs(t,ls(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})=>ns(s,o).then(o=>t.writeFile(e,i,o,s)))),ds=({main:t,worker:e},s)=>{const o=[];if(e&&es)for(let[t,i]of Se(e))t=Re(t,s),o.push(Ie(t,i));if(t&&!es)for(let[e,i]of Se(t))e=Re(e,s),Ue(e)?Je(e):o.push(Ie(e,i));return $e(o)},us=t=>e=>{dispatchEvent(new CustomEvent(`${t}:progress`,{detail:e}))},{isNaN:ms,isFinite:hs,isInteger:gs}=Number,{ownKeys:fs}=Reflect,{is:bs}=Object,ws=(t,e,s)=>{const o=s.get(t),i=!o;return i?(at.setUint32(0,e.length,!0),s.set(t,[nt[0],nt[1],nt[2],nt[3]])):e.push(O,o[0],o[1],o[2],o[3]),i},ks=(t,e,s)=>{at.setUint32(0,s,!0),t.push(e,nt[0],nt[1],nt[2],nt[3])},xs=(t,e,s)=>{switch(typeof t){case"number":t&&hs(t)?gs(t)&&t<256&&-1[i,t]));break}default:if("toJSON"in t){const o=t.toJSON();xs(o===t?null:o,e,s)}else{const o=fs(t),i=o.length;ks(e,R,i);for(let r=0;r{const e=[];return vs=it,xs(t,e,new Map),e}},zs=new WeakMap,As=async(t,e,s,o,i)=>{o.files&&(e("Loading files"),await ys(t,s,o.files,i),e("Loaded files")),o.fetch&&(e("Loading fetch"),await ps(t,s,o.fetch,i),e("Loaded fetch")),o.js_modules&&(e("Loading JS modules"),await ds(o.js_modules,i),e("Loaded JS modules"))},Ps=(t,e,s)=>{"polyscript"===e&&(s.lazy_py_modules=async(...e)=>(await zs.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=js),t.registerJsModule(e,s)},Es=(t,e)=>{if(t.endsWith("/*")){if(/\\.(zip|whl|tgz|tar(?:\\.gz)?)$/.test(e))return RegExp.$1;throw new Error(`Unsupported archive ${e}`)}return""},Ss=(t,e,...s)=>{try{return t.runPython(je(e),...s)}catch(e){ke.get(t).stderr(e)}},$s=async(t,e,...s)=>{try{return await t.runPythonAsync(je(e),...s)}catch(e){ke.get(t).stderr(e)}},Ms=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){ke.get(t).stderr(e)}};var Rs=(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 qs=async t=>(await import("./toml-BK2RWy-G.js")).parse(t);async function Fs(t,e){return new Promise((s,o)=>{t.syncfs(e,t=>{t?o(t):s()})})}function Bs(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 Ds(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):is(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 Fs(e,!0),{syncfs:async()=>await Fs(e,!1)}}}const Ds=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:Ts}=JSON,Ls=(t,e)=>new URL(t,e).href,Os=(t,e,s)=>{if(e in t)throw new Error(`Duplicated path: ${e}`);t[e]=s},Cs=(t,e,s)=>{for(const o in e)Os(t,Ls(o,s),e[o])},Is=(t,e,s,o)=>{const i=e[s];i&&(t[s]??={},Cs(t[s],i,o))},Js=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 ts(i).text(),{name:a,files:n,js_modules:p,packages:c}=e?await qs(r):Ts(r);if(s.has(a))throw new Error(`Unable to process ${a} @ ${i}`);s.add(a),c&&o.push(...await Js(t,c,s)),p&&(t.js_modules??={},Is(t.js_modules,p,"main",i),Is(t.js_modules,p,"worker",i)),n&&(t.files??={},Cs(t.files,n,i))}else o.push(i)}return o},Us=(t,e)=>{try{t.mkdir(e)}catch(t){}},Hs=us("mpy");var Ws={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}=xe({stderr:ve(console.error),stdout:ve(console.log)});s=s.replace(/\\.m?js$/,".wasm"),Hs("Loading MicroPython");const n=await a(t({linebuffer:!1,stderr:i,stdout:r,url:s}));globalThis[Te].set("-T-",this.transform.bind(this,n));const p=Ns.bind(this,n,o);return zs.set(n,p),e.experimental_remote_packages&&(Hs("Loading remote packages"),e.packages=await Js(e),Hs("Loaded remote packages")),await As(this,Hs,n,e,o),this.writeFile(n,"./mip.py",Rs),e.packages&&(Hs("Loading packages"),await p(e.packages.map(qe,o)),Hs("Loaded packages")),Hs("Loaded MicroPython"),n.mountNativeFS||(n.mountNativeFS=Bs(n._module)),n},registerJSModule:Ps,run:Ss,runAsync:$s,runEvent:Ms,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=Es(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)Us(i,n);else{Us(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 ss(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 ss(n,e,s)}};async function Ns(t,e,s){let o;for(const i of s)if(i.endsWith(".whl")){const s=Re(i,e),o=await ts(s).arrayBuffer();await this.writeFile(t,"./*",o,s)}else o||(o=t.pyimport("mip")),o.install(i)}const Ks={dict_converter:Object.fromEntries},{stringify:Gs}=JSON,{hasOwn:Vs}=Object,{apply:Xs}=Reflect,Ys=Function.prototype,Zs=t=>function(...e){return Xs(t,this,e)};let Qs,to;const eo=t=>{const e=new WeakMap,s=s=>{for(let o,i=0;i`https://cdn.jsdelivr.net/pyodide/v${t}/full/pyodide.mjs`,async engine({loadPyodide:t,version:e},s,o,i){so("Loading Pyodide");let{packages:r,index_urls:a}=s;if(r){if(r=r.map(qe,i),!a){so("Loading Packages Graph");const{default:t}=await Promise.resolve().then(function(){return po});if(so("Loaded Packages Graph"),Vs(t,e)){const s=r.filter(s=>{if(/^https?:\\/\\//.test(s))return!1;const[o,...i]=s.split(/[>=<]=/);return!Vs(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&&(so("Loading remote packages"),s.packages=r=await Js(s,r),so("Loaded remote packages"))}so("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(),so("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=Gs(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}=xe();so("Loading interpreter");const h=await m(t({stderr:d,stdout:u,...l}));so("Loaded interpreter"),globalThis[Te].set("-T-",this.transform.bind(this,h)),s.debug&&h.setDebug(!0);const g=ao.bind(h);return a&&oo.set(h,a),zs.set(h,g),await As(this,so,h,s,i),r&&await g(r,c,y),await c.close(),l.lockFileURL&&URL.revokeObjectURL(l.lockFileURL),so("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({})}),to=globalThis.experimental_create_proxy,delete globalThis.experimental_create_proxy,[Qs]=Reflect.ownKeys(to).filter(t=>"symbol"==typeof t&&"Symbol(pyproxy.attrs)"===String(t)),eo(!0)),h},registerJSModule:Ps,run:Zs(Ss),runAsync:Zs($s),runEvent:Zs(Ms),transform:(t,e)=>Xs(ro,t,[e]),writeFile:(t,e,s,o)=>{const i=Es(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 ss({FS:r,PATH:a,PATH_FS:n},e,s)}};function ro(t){const{ffi:{PyProxy:e}}=this;if(t&&"object"==typeof t){if(t instanceof e)return t.toJs(Ks);if(t instanceof Map)return new Map([...t.entries()]);if(ze(t))return t.map(ro,this)}return t}async function ao(t,e,s=!1){const{log:o}=console,i=(t,...e)=>{o(t,...e),console.log=o,so(t),console.log=i};console.log=i,await this.loadPackage("micropip");const r=this.pyimport("micropip");if(oo.has(this)&&r.set_index_urls(oo.get(this)),await r.install(t,{keep_going:!0}),console.log=o,s&&e instanceof n){const s=r.freeze();e.set(Gs(t),s)}r.destroy()}var no={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"}},po=Object.freeze({__proto__:null,default:no});const co="ruby-wasm-wasi",lo=co.replace(/\\W+/g,"_");var yo={type:co,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 ts(s).arrayBuffer(),r=await WebAssembly.compile(i),{vm:a}=await t(r);return e.files&&await ys(this,a,e.files,o),e.fetch&&await ps(this,a,e.fetch,o),e.js_modules&&await ds(e.js_modules,o),a},registerJSModule(t,e,s){e=e.replace(/\\W+/g,"__");const o=`__module_${lo}_${e}`;globalThis[o]=s,this.run(t,`require "js";$${e}=JS.global[:${o}]`),delete globalThis[o]},run:(t,e,...s)=>t.eval(je(e),...s),runAsync:(t,e,...s)=>t.evalAsync(je(e),...s),async runEvent(t,e,s){if(/^xworker\\.(on\\w+)$/.test(e)){const{$1:e}=RegExp,o=`__module_${lo}_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 ${co}`)}};var uo={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}=xe(),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 ys(this,p,s.files,i),s.fetch&&await ps(this,p,s.fetch,i),s.js_modules&&await ds(s.js_modules,i),p},registerJSModule:(t,e,s)=>{t.global.set(e,s)},run:(t,e,...s)=>{try{return t.doStringSync(je(e),...s)}catch(e){ke.get(t).stderr(e)}},runAsync:async(t,e,...s)=>{try{return await t.doString(je(e),...s)}catch(e){ke.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){ke.get(t).stderr(e)}},transform:(t,e)=>e,writeFile:({cmodule:{module:{FS:t}}},e,s)=>((t,e,s)=>(is(t,os(e)),e=rs(t,e),t.writeFile(e,new Uint8Array(s),{canOwn:!0})))(t,e,s)};const mo=new WeakMap,ho=new FinalizationRegistry(t=>t()),go=async(t,e)=>{const{shelter:s,destroy:o,io:i}=mo.get(t),{output:r,result:a}=await s.captureR(je(e));for(const{type:t,data:e}of r)i[t](e);return ho.register(a,o),a};var fo={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}=xe(),r=new t.WebR;await i(r.init().then(()=>r));const a=await new r.Shelter;return mo.set(r,{module:t,shelter:a,destroy:a.destroy.bind(a),io:ke.get(r)}),e.files&&await ys(this,r,e.files,o),e.fetch&&await ps(this,r,e.fetch,o),e.js_modules&&await ds(e.js_modules,o),r},registerJSModule(t,e){console.warn(`Experimental interpreter: module ${e} is not supported (yet)`)},run:go,runAsync:go,async runEvent(t,e,s){await t.evalRVoid(`${e}(event)`,{env:{event:{type:[s.type]}}})},transform:(t,e)=>e,writeFile:()=>{}};const bo=new Map,wo=new Map,ko=new Proxy(new Map,{get(t,e){if(!t.has(e)){const[s,...o]=e.split("@"),i=bo.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=>(wo.set(e,t),i(o,t,s,r)))}}),xo=t=>{for(const e of[].concat(t.type))bo.set(e,t)};for(const t of[Xe,Ws,io,no,yo,uo,fo])xo(t);const{parse:_o}=JSON,vo=(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,[Re(t),s]})(t,e);return"json"===i?s=ts(o).json():"toml"===i?s=ts(o).text().then(qs):"string"===i?s=jo(t):"object"===i&&t?s=t:"txt"===i&&"string"==typeof s&&(s=jo(s)),[s,t=o]},jo=t=>{try{return _o(t)}catch(e){return qs(t)}},zo="BeforeRun",Ao="AfterRun",Po=[`code${zo}`,`code${zo}Async`,`code${Ao}`,`code${Ao}Async`],Eo=["onWorker","onReady",`on${zo}`,`on${zo}Async`,`on${Ao}`,`on${Ao}Async`];function So(t,e){const{run:s,runAsync:o}=bo.get(this.type);return{...t,run:s.bind(this,e),runAsync:o.bind(this,e)}}const $o=(t,e,s,o,i,r)=>{if(i||r){const a=So.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 Mo,Ro,qo;const Fo=(t,e)=>{addEventListener(t,e||(async e=>{try{await Mo,Ro(`xworker.on${t}`,e)}catch(t){postMessage(t)}}),!!e&&{once:!0})},{proxy:Bo,sync:Do,native:To,window:Lo,isWindowProxy:Oo,ffi:Co}=await(async t=>{const e=await be({...t,decoder:t?.decoder||mt}),s=Ht({...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=>qo?qo(t):t}),Io={polyfill:Do,sync:Bo,window:To||Do?Lo:null,isWindowProxy:Oo,onmessage:console.info,onerror:console.error,onmessageerror:console.warn,postMessage:postMessage.bind(self)};Fo("message",({data:{options:t,config:e,configURL:s,code:o,hooks:i}})=>{Mo=(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]=vo(e,s,o)),Me(o).then(s=>ko[t](s,e))))(m,e,s,d),{js_modules:g}=wo.get(m),f=g?.main,b=Pe(bo.get(c)),w=((t,e,s,o)=>({type:e,config:s,interpreter:o,io:ke.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 Po){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,De(e),...r);return o&&i(t,o,...r),a}:async(t,e,...r)=>{s&&await i(t,s,...r);const a=await i(t,De(e),...r);return o&&await i(t,o,...r),a}})(b,k,s,o);for(const s of Eo.slice(2)){const o=i[s];if(o){const i=s.endsWith("Async");if(i&&u||!i&&!u){const i=Be(o);s.startsWith("onBefore")?t=i:e=i}}}$o(b,w,Io,u,t,e)}let x,_,v,j=null,z="";(To||Do)&&(({CustomEvent:x,document:_}=Lo),j=r&&_.getElementById(r)||null,v=t=>Fe(j,l||c,t,!0,x));const A=Ne(Lo,Bo,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}`,Ce(o,t));e.registerJSModule(s,i,o)})(c,b,h,A),b.registerJSModule(h,"polyscript",{IDBMap:a,IDBMapSync:n,xworker:Io,currentScript:j,config:w.config,js_modules:A,ffi:Co,get target(){return!z&&j&&("SCRIPT"===p?j.after(Ae(Lo.document.createElement(`script-${l||c}`),{id:z=`${r}-target`})):(z=r,j.replaceChildren(),j.style.display="block")),z}}),Ro=b.runEvent.bind(b,h),qo=b.transform.bind(b,h),j&&v("ready"),i?.onReady&&Be(i?.onReady).call(b,So.call(b,w,h),Io),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)}})(),Fo("error"),Fo("message"),Fo("messageerror"),(To||Do)&&addEventListener("py:progress",({type:t,detail:e})=>{Lo.dispatchEvent(new Lo.CustomEvent(t,{detail:e}))})});\n'.replace(Ge,Xe)],{type:"text/javascript"})),...t))({serviceWorker:s?.serviceWorker||s?.service_worker,reflected_ffi_timeout:globalThis.reflected_ffi_timeout??-1}),{postMessage:a}=r,n=this instanceof fr;let p=!1;const c=hs(r.proxy,{importJS:Ds,importCSS:Ts,isStuck:()=>p,notStuck(){p=!1}}),l=m();let y=i(e).text().then(t=>{const e=n?this.toJSON():void 0;a.call(r,{options:s,config:o,code:t,hooks:e})}).then(()=>{y={then:t=>t()}});return fs(r,{unstuck:{value(){p=!0}},sync:{value:c},ready:{value:l.promise},postMessage:{value:(t,...e)=>y.then(()=>a.call(r,t,...e))},onerror:{writable:!0,configurable:!0,value:console.error}}),r.addEventListener("message",t=>{const{data:e}=t,s=e instanceof Error;(s||"polyscript:done"===e)&&(t.stopImmediatePropagation(),s?(l.reject(e),r.onerror(gs(t,{type:{value:"error"},error:{value:e}}))):l.resolve(r))}),n&&this.onWorker?.(this.interpreter,r),r};const wr="Invalid content",kr="Invalid worker attribute",xr="Invalid worker attribute";var _r=t=>{const{src:e,worker:s}=t.attributes;if(s){let{value:o}=s;if(o)throw new SyntaxError(xr);if(o=e?.value,!o){if(e)throw new SyntaxError(kr);if(t.childElementCount){const{innerHTML:e,localName:s,type:r}=t,i=r||s.replace(/-script$/,"");o=us(e),console.warn(`Deprecated: use diff --git a/test/integration/pyodide.js b/test/integration/pyodide.js index 410b73e2..34f0d5d4 100644 --- a/test/integration/pyodide.js +++ b/test/integration/pyodide.js @@ -14,16 +14,16 @@ export default (playwright, baseURL) => { test('Pyodide config as JSON', python.configAsJSON(playwright, baseURL)); test('Pyodide unknown package', async ({ page }) => { - const errors = []; + const warnings = []; page.on('console', message => { - if (message.type() === 'error') { - errors.push(message.text()); + if (message.type() === 'warning') { + warnings.push(message.text()); } }); await page.goto(`${baseURL}/packages.html`); await page.waitForSelector('html.error'); - await expect(errors.length).toBe(1); - await expect(errors[0]).toBe('These packages are not supported in Pyodide 0.29.0: unknown_package_name'); + await expect(warnings.length).toBe(1); + await expect(/Pyodide [0-9.]+ might not support unknown_package_name/.test(warnings[0])).toBe(true); }); test('Pyodide config with passthrough', async ({ page }) => { diff --git a/test/pygame-ce/config.toml b/test/pygame-ce/config.toml new file mode 100644 index 00000000..9837409d --- /dev/null +++ b/test/pygame-ce/config.toml @@ -0,0 +1 @@ +packages = ["pygame-ce"] diff --git a/test/pygame-ce/index.html b/test/pygame-ce/index.html new file mode 100644 index 00000000..233a1199 --- /dev/null +++ b/test/pygame-ce/index.html @@ -0,0 +1,15 @@ + + + + PyScript 0.28 warning on pygame-ce + + + + + + + +