web-python-kernel
Advanced tools
Sorry, the diff of this file is too big to display
| /*! For license information please see kernel.worker.min.js.LICENSE.txt */ | ||
| var e={590:(e,t,r)=>{r.d(t,{LV:()=>d,p:()=>p});const n=Symbol("Comlink.proxy"),o=Symbol("Comlink.endpoint"),s=Symbol("Comlink.releaseProxy"),i=Symbol("Comlink.finalizer"),a=Symbol("Comlink.thrown"),l=e=>"object"==typeof e&&null!==e||"function"==typeof e,c=new Map([["proxy",{canHandle:e=>l(e)&&e[n],serialize(e){const{port1:t,port2:r}=new MessageChannel;return p(e,t),[r,[r]]},deserialize:e=>(e.start(),d(e))}],["throw",{canHandle:e=>l(e)&&a in e,serialize({value:e}){let t;return t=e instanceof Error?{isError:!0,value:{message:e.message,name:e.name,stack:e.stack}}:{isError:!1,value:e},[t,[]]},deserialize(e){if(e.isError)throw Object.assign(new Error(e.value.message),e.value);throw e.value}}]]);function p(e,t=globalThis,r=["*"]){t.addEventListener("message",function o(s){if(!s||!s.data)return;if(!function(e,t){for(const r of e){if(t===r||"*"===r)return!0;if(r instanceof RegExp&&r.test(t))return!0}return!1}(r,s.origin))return void console.warn(`Invalid origin '${s.origin}' for comlink proxy`);const{id:l,type:c,path:d}=Object.assign({path:[]},s.data),m=(s.data.argumentList||[]).map(w);let h;try{const t=d.slice(0,-1).reduce((e,t)=>e[t],e),r=d.reduce((e,t)=>e[t],e);switch(c){case"GET":h=r;break;case"SET":t[d.slice(-1)[0]]=w(s.data.value),h=!0;break;case"APPLY":h=r.apply(t,m);break;case"CONSTRUCT":h=function(e){return Object.assign(e,{[n]:!0})}(new r(...m));break;case"ENDPOINT":{const{port1:t,port2:r}=new MessageChannel;p(e,r),h=function(e,t){return R.set(e,t),e}(t,[t])}break;case"RELEASE":h=void 0;break;default:return}}catch(e){h={value:e,[a]:0}}Promise.resolve(h).catch(e=>({value:e,[a]:0})).then(r=>{const[n,s]=_(r);t.postMessage(Object.assign(Object.assign({},n),{id:l}),s),"RELEASE"===c&&(t.removeEventListener("message",o),u(t),i in e&&"function"==typeof e[i]&&e[i]())}).catch(e=>{const[r,n]=_({value:new TypeError("Unserializable return value"),[a]:0});t.postMessage(Object.assign(Object.assign({},r),{id:l}),n)})}),t.start&&t.start()}function u(e){(function(e){return"MessagePort"===e.constructor.name})(e)&&e.close()}function d(e,t){const r=new Map;return e.addEventListener("message",function(e){const{data:t}=e;if(!t||!t.id)return;const n=r.get(t.id);if(n)try{n(t)}finally{r.delete(t.id)}}),g(e,r,[],t)}function m(e){if(e)throw new Error("Proxy has been released and is not useable")}function h(e){return b(e,new Map,{type:"RELEASE"}).then(()=>{u(e)})}const y=new WeakMap,f="FinalizationRegistry"in globalThis&&new FinalizationRegistry(e=>{const t=(y.get(e)||0)-1;y.set(e,t),0===t&&h(e)});function g(e,t,r=[],n=function(){}){let i=!1;const a=new Proxy(n,{get(n,o){if(m(i),o===s)return()=>{!function(e){f&&f.unregister(e)}(a),h(e),t.clear(),i=!0};if("then"===o){if(0===r.length)return{then:()=>a};const n=b(e,t,{type:"GET",path:r.map(e=>e.toString())}).then(w);return n.then.bind(n)}return g(e,t,[...r,o])},set(n,o,s){m(i);const[a,l]=_(s);return b(e,t,{type:"SET",path:[...r,o].map(e=>e.toString()),value:a},l).then(w)},apply(n,s,a){m(i);const l=r[r.length-1];if(l===o)return b(e,t,{type:"ENDPOINT"}).then(w);if("bind"===l)return g(e,t,r.slice(0,-1));const[c,p]=E(a);return b(e,t,{type:"APPLY",path:r.map(e=>e.toString()),argumentList:c},p).then(w)},construct(n,o){m(i);const[s,a]=E(o);return b(e,t,{type:"CONSTRUCT",path:r.map(e=>e.toString()),argumentList:s},a).then(w)}});return function(e,t){const r=(y.get(t)||0)+1;y.set(t,r),f&&f.register(e,t,e)}(a,e),a}function E(e){const t=e.map(_);return[t.map(e=>e[0]),(r=t.map(e=>e[1]),Array.prototype.concat.apply([],r))];var r}const R=new WeakMap;function _(e){for(const[t,r]of c)if(r.canHandle(e)){const[n,o]=r.serialize(e);return[{type:"HANDLER",name:t,value:n},o]}return[{type:"RAW",value:e},R.get(e)||[]]}function w(e){switch(e.type){case"HANDLER":return c.get(e.name).deserialize(e.value);case"RAW":return e.value}}function b(e,t,r,n){return new Promise(o=>{const s=new Array(4).fill(0).map(()=>Math.floor(Math.random()*Number.MAX_SAFE_INTEGER).toString(16)).join("-");t.set(s,o),e.start&&e.start(),e.postMessage(Object.assign({id:s},r),n)})}},637:(e,t,r)=>{r.d(t,{MB:()=>p});const n="https://cdn.jsdelivr.net/pyodide/v0.28.0/full/pyodide.js";let o=!1,s=null;var i,a,l=r(696);r(590),function(e){e.MAIN_THREAD="main_thread",e.WORKER="worker"}(i||(i={})),function(e){e.PYTHON="python"}(a||(a={}));class c{constructor(){this.events={}}on(e,t){this.events[e]||(this.events[e]=[]),this.events[e].push(t)}off(e,t){if(!this.events[e])return;const r=this.events[e].indexOf(t);r>-1&&this.events[e].splice(r,1)}emit(e,...t){this.events[e]&&this.events[e].forEach(e=>e(...t))}setMaxListeners(e){}}class p extends c{constructor(){super(),this.initialized=!1,this.initPromise=null,this.filesystemOptions={enabled:!1,root:".",mountPoint:"/home/pyodide"},this._resolveInputReply=null,this._parent_header={},this.executionCount=0,this._status="unknown",this._interruptBuffer=null,this._interruptSupported=!1,this.environmentVariables={},super.setMaxListeners(20),this.kernelId=`kernel_${Math.random().toString(36).substring(2)}_${Date.now()}`}async getStatus(){return this._status}async initialize(e){if(!this.initialized)return this.initPromise||(e?.filesystem&&(this.filesystemOptions={...this.filesystemOptions,...e.filesystem}),e?.env&&(this.environmentVariables={...e.env}),e?.lockFileURL&&(this.lockFileURL=e.lockFileURL),this.initPromise=this._initializeInternal()),this.initPromise}async _initializeInternal(){const e=Date.now();console.log("🚀 Starting optimized kernel initialization...");try{const t=Date.now(),r={};this.lockFileURL&&(r.lockFileURL=this.lockFileURL,console.log(`🔒 Using lockFileURL: ${this.lockFileURL}`)),this.pyodide=await async function(e={}){return s||(s=(async()=>{try{"undefined"!=typeof importScripts?await new Promise((e,t)=>{try{if("undefined"==typeof importScripts)return void t(new Error("importScripts is not available - not in a worker context"));if(void 0!==globalThis.loadPyodide)return void e();importScripts(n),e()}catch(e){t(new Error(`Failed to import Pyodide in worker: ${e}`))}}):await new Promise((e,t)=>{if(void 0!==globalThis.loadPyodide)return void e();const r=document.createElement("script");r.src=n,r.onload=()=>e(),r.onerror=()=>t(new Error(`Failed to load Pyodide from ${n}`)),document.head.appendChild(r)});const t=globalThis.loadPyodide;if(!t)throw new Error("loadPyodide function not found after script load");const r={indexURL:"https://cdn.jsdelivr.net/pyodide/v0.28.0/full/",...e},s=await t(r);return o=!0,console.log("✅ Pyodide loaded successfully from CDN"),s}catch(e){throw s=null,e}})(),s)}(r);const i=Date.now()-t;if(console.log(`✅ Pyodide loaded in ${i}ms`),this.lockFileURL){console.log("🚀 Using lock file - skipping package installation");const[,]=await Promise.all([this.filesystemOptions.enabled?this.mountFilesystem():Promise.resolve(),this.setEnvironmentVariables()]);await this.initGlobals()}else{const[,,]=await Promise.all([this.filesystemOptions.enabled?this.mountFilesystem():Promise.resolve(),this.initPackageManager(),this.setEnvironmentVariables()]);await this.initKernel(),await this.initGlobals()}const a=Date.now()-e;console.log(`🎯 KERNEL INITIALIZATION COMPLETE in ${a}ms`),console.log(`⚡ Performance: Pyodide(${i}ms) + Setup(${a-i}ms)`),this.initialized=!0,this._status="active",console.log("🟢 Kernel is now ACTIVE and ready for execution!")}catch(e){throw console.error("❌ Kernel initialization failed:",e),this._status="unknown",e}}async mountFilesystem(){try{console.log(`Mounting filesystem from ${this.filesystemOptions.root} to ${this.filesystemOptions.mountPoint}`),await this.pyodide.FS.mount(this.pyodide.FS.filesystems.NODEFS,{root:this.filesystemOptions.root||"."},this.filesystemOptions.mountPoint||"/home/pyodide"),console.log("Filesystem mounted successfully");try{const e=this.pyodide.FS.readdir(this.filesystemOptions.mountPoint||"/home/pyodide");console.log(`Files in ${this.filesystemOptions.mountPoint} directory: ${e.join(", ")}`)}catch(e){console.error(`Error listing mounted directory: ${e}`)}}catch(e){throw console.error("Error mounting filesystem:",e),e}}async initPackageManager(){const e=Date.now();console.log("⚡ Initializing optimized package manager...");try{let t;console.log("📦 Loading micropip, packaging..."),await this.pyodide.loadPackage(["micropip","packaging"]),console.log("✅ Loaded micropip, packaging"),t="undefined"!=typeof window&&window.location?new URL(".",window.location.href).href:"undefined"!=typeof self&&self.location?new URL(".",self.location.href).href:"/";const r=new URL("pypi/all.json",t).href,n=[new URL("pypi/piplite-0.6.0a5-py3-none-any.whl",t).href,new URL("pypi/pyodide_kernel-0.6.0a5-py3-none-any.whl",t).href,new URL("pypi/ipykernel-6.9.2-py3-none-any.whl",t).href,new URL("pypi/widgetsnbextension-3.6.999-py3-none-any.whl",t).href,new URL("pypi/widgetsnbextension-4.0.999-py3-none-any.whl",t).href];console.log(`🚀 Installing ${n.length} wheel packages in parallel...`);const o=n.map(async(e,t)=>{const r=Date.now();try{await this.pyodide.runPythonAsync(`\nimport micropip\nawait micropip.install('${e}', keep_going=True)\nprint(f"✅ Wheel ${t+1}/${n.length} installed")\n`);const o=Date.now()-r;return console.log(`⚡ Wheel ${t+1} installed in ${o}ms`),{index:t,success:!0,time:o}}catch(e){const n=Date.now()-r;return console.warn(`⚠️ Wheel ${t+1} failed after ${n}ms:`,e),{index:t,success:!1,time:n,error:e}}}),s=await Promise.all(o),i=s.filter(e=>e.success),a=s.filter(e=>!e.success);console.log(`📊 Wheels: ${i.length}/${n.length} successful`),a.length>0&&console.warn(`⚠️ Failed wheels: ${a.map(e=>e.index+1).join(", ")}`);try{await this.pyodide.runPythonAsync(`\ntry:\n import piplite.piplite\n import json\n\n # Load package index for faster lookups\n try:\n piplite.piplite.PIPLITE_URL = "${r}"\n # Pre-load package index for faster installation\n print("📋 Package index configured")\n except Exception as e:\n print(f"⚠️ Package index setup warning: {e}")\n\n # Configure piplite for optimal performance\n piplite.piplite.REPODATA_INFO = {}\n print("⚡ Piplite optimized for performance")\nexcept ImportError:\n print("⚠️ Piplite not available, continuing without it")\nexcept Exception as e:\n print(f"⚠️ Piplite setup failed: {e}")\n`)}catch(e){console.warn("⚠️ Piplite configuration failed, continuing without it:",e)}const l=Date.now()-e;console.log(`🎯 Package manager initialized in ${l}ms`)}catch(e){throw console.error("❌ Package manager initialization failed:",e),e}}async initKernel(){const e=Date.now();console.log("🚀 Initializing kernel packages with maximum optimization...");const t=[{name:"pure-eval",priority:1,source:"pyodide"},{name:"stack-data",priority:1,source:"pyodide"},{name:"pygments",priority:1,source:"pyodide"},{name:"ssl",priority:1,source:"pyodide"},{name:"sqlite3",priority:1,source:"pyodide"},{name:"prompt_toolkit",priority:1,source:"pyodide"},{name:"jedi",priority:1,source:"pyodide"},{name:"ipython",priority:1,source:"pyodide"},{name:"comm",priority:2,source:"pip"},{name:"hypha-rpc",priority:2,source:"pip"},{name:"nbformat",priority:2,source:"pip"},{name:"ipykernel",priority:3,source:"pip"},{name:"pyodide_kernel",priority:3,source:"pip"}];try{console.log(`📦 Installing ${t.length} packages with intelligent optimization...`),await this.installPackagesWithIntelligentOptimization(t),console.log("📥 Importing pyodide_kernel...");const r=Date.now();await this.pyodide.runPythonAsync("import pyodide_kernel");const n=Date.now()-r;console.log(`✅ pyodide_kernel imported in ${n}ms`);const o=Date.now()-e;console.log(`🎯 Kernel packages initialized in ${o}ms`)}catch(e){throw console.error("❌ Kernel package initialization failed:",e),e}}async installPackagesWithIntelligentOptimization(e){console.log(`⚡ Starting intelligent parallel installation of ${e.length} packages...`);const t=e.map(async e=>{const t=Date.now();try{if(console.log(`🔄 Installing ${e.name} (priority: ${e.priority}, preferred: ${e.source})...`),"pyodide"!==e.source){await this.installViaPipWithOptimizations(e.name);const r=Date.now()-t;return console.log(`✅ ${e.name} installed via pip (${r}ms)`),{package:e.name,method:"pip",duration:r,success:!0,priority:e.priority}}try{await this.pyodide.loadPackage([e.name]);const r=Date.now()-t;return console.log(`✅ ${e.name} loaded from Pyodide CDN (${r}ms)`),{package:e.name,method:"pyodide",duration:r,success:!0,priority:e.priority}}catch(r){console.log(`📦 ${e.name} not available on CDN, trying pip...`),await this.installViaPipWithOptimizations(e.name);const n=Date.now()-t;return console.log(`✅ ${e.name} installed via pip fallback (${n}ms)`),{package:e.name,method:"pip-fallback",duration:n,success:!0,priority:e.priority}}}catch(r){const n=Date.now()-t;return console.warn(`❌ Failed to install ${e.name} after ${n}ms:`,r),{package:e.name,method:"failed",duration:n,success:!1,priority:e.priority,error:r}}}),r=await Promise.all(t);this.analyzeInstallationResults(r)}async installViaPipWithOptimizations(e){await this.pyodide.runPythonAsync(`\ntry:\n # Import piplite first\n import piplite\n # Use optimized pip installation with caching\n await piplite.install('${e}', keep_going=True, deps=True)\n print("✅ Successfully installed ${e} via optimized pip")\nexcept Exception as e:\n print("⚠️ Warning: Failed to install ${e}:", str(e))\n # Try alternative installation method\n try:\n import micropip\n await micropip.install('${e}', keep_going=True)\n print("✅ Successfully installed ${e} via micropip fallback")\n except Exception as e2:\n print("❌ Both pip methods failed for ${e}:", str(e2))\n raise e2\n`)}analyzeInstallationResults(e){const t=e.filter(e=>e.success),r=e.filter(e=>!e.success),n=t.filter(e=>"pyodide"===e.method),o=t.filter(e=>"pip"===e.method),s=t.filter(e=>"pip-fallback"===e.method),i=Math.max(...e.map(e=>e.duration)),a=e.reduce((e,t)=>e+t.duration,0)/e.length,l=e.reduce((e,t)=>e+t.duration,0);console.log("🎯 INTELLIGENT INSTALLATION COMPLETE!"),console.log(`📊 Results: ${t.length}/${e.length} successful`),console.log(`⚡ Pyodide CDN: ${n.length} packages`),console.log(`📦 Direct pip: ${o.length} packages`),console.log(`🔄 Pip fallback: ${s.length} packages`),console.log(`❌ Failed: ${r.length} packages`),console.log(`⏱️ Total time: ${i}ms (vs ~${l}ms sequential)`),console.log(`🚀 Speed improvement: ~${Math.round(l/i)}x faster`),console.log(`📈 Average per package: ${Math.round(a)}ms`),r.length>0&&(console.warn(`⚠️ Failed packages: ${r.map(e=>e.package).join(", ")}`),r.forEach(e=>{console.warn(` - ${e.package}: ${e.error?.message||"Unknown error"}`)}));const c=Math.min(...t.map(e=>e.duration)),p=Math.max(...t.map(e=>e.duration));console.log(`📊 Performance range: ${c}ms (fastest) to ${p}ms (slowest)`)}async initGlobals(){console.log("Initializing globals...");const{globals:e}=this.pyodide;this._kernel=e.get("pyodide_kernel").kernel_instance.copy(),this._stdout_stream=e.get("pyodide_kernel").stdout_stream.copy(),this._stderr_stream=e.get("pyodide_kernel").stderr_stream.copy(),this._interpreter=this._kernel.interpreter.copy(),this._interpreter.send_comm=this.sendComm.bind(this),this.setupCallbacks()}setupCallbacks(){const e=(e,t)=>{const r={name:this.formatResult(e),text:this.formatResult(t)};this._sendMessage({parentHeader:this.formatResult(this._parent_header).header,bundle:r,type:"stream"})};this._stdout_stream.publish_stream_callback=e,this._stderr_stream.publish_stream_callback=e,this._interpreter.display_pub.clear_output_callback=e=>{const t={wait:this.formatResult(e)};this._sendMessage({parentHeader:this.formatResult(this._parent_header).header,bundle:t,type:"clear_output"})},this._interpreter.display_pub.display_data_callback=(e,t,r)=>{const n={data:this.formatResult(e),metadata:this.formatResult(t),transient:this.formatResult(r)};this._sendMessage({parentHeader:this.formatResult(this._parent_header).header,bundle:n,type:"display_data"})},this._interpreter.display_pub.update_display_data_callback=(e,t,r)=>{const n={data:this.formatResult(e),metadata:this.formatResult(t),transient:this.formatResult(r)};this._sendMessage({parentHeader:this.formatResult(this._parent_header).header,bundle:n,type:"update_display_data"})},this._interpreter.displayhook.publish_execution_result=(e,t,r)=>{const n={execution_count:e,data:this.formatResult(t),metadata:this.formatResult(r)};this._sendMessage({parentHeader:this.formatResult(this._parent_header).header,bundle:n,type:"execute_result"})},this._interpreter.input=this.input.bind(this),this._interpreter.getpass=this.getpass.bind(this)}_sendMessage(e){this._processMessage(e)}_processMessage(e){if(!e.type)return;let t;switch(e.type){case"stream":{const r=e.bundle??{name:"stdout",text:""};super.emit(l.z.STREAM,r),t=r;break}case"input_request":{const r=e.content??{prompt:"",password:!1};super.emit(l.z.INPUT_REQUEST,r),t=r;break}case"display_data":{const r=e.bundle??{data:{},metadata:{},transient:{}};super.emit(l.z.DISPLAY_DATA,r),t=r;break}case"update_display_data":{const r=e.bundle??{data:{},metadata:{},transient:{}};super.emit(l.z.UPDATE_DISPLAY_DATA,r),t=r;break}case"clear_output":{const r=e.bundle??{wait:!1};super.emit(l.z.CLEAR_OUTPUT,r),t=r;break}case"execute_result":{const r=e.bundle??{execution_count:this.executionCount,data:{},metadata:{}};super.emit(l.z.EXECUTE_RESULT,r),t=r;break}case"execute_error":{const r=e.bundle??{ename:"",evalue:"",traceback:[]};super.emit(l.z.EXECUTE_ERROR,r),t=r;break}case"comm_open":case"comm_msg":case"comm_close":{const r=e.content??{};super.emit(e.type,r,e.metadata,e.buffers),t={content:r,metadata:e.metadata,buffers:e.buffers};break}}t&&super.emit(l.z.ALL,{type:e.type,data:t})}isInitialized(){return this.initialized}async setup(e){await this.initialize(),this._parent_header=this.pyodide.toPy(e||{})}async execute(e,t={}){this.initialized||await this.initialize();try{this._status="busy",super.emit(l.z.KERNEL_BUSY,{}),await this.setup(t);const r="\n# Kernel isolation - reset commonly conflicting variables to prevent cross-kernel state sharing\nfor _var in ['x', 'value', 'result', 'a', 'b', 'c', 'data', 'temp']:\n if _var in globals():\n del globals()[_var]\ndel _var\n";return this.pyodide.runPython(r),new Promise((t,r)=>{const n={allMessages:[],executionComplete:!1,executionResult:null,executionError:null,timeout:null},o=e=>{n.allMessages.push(e)},s=async e=>{if(n.executionComplete)return;console.log(`[KERNEL] Execution completed, processing ${n.allMessages.length} messages`),n.executionComplete=!0,super.off(l.z.ALL,o);let r,s=!1,i=null;const a=n.executionResult;a&&"error"===a.status&&(s=!0,i={ename:a.ename,evalue:a.evalue,traceback:a.traceback});for(const e of n.allMessages){if("execute_error"===e.type){s=!0,i=e.data;break}"execute_result"===e.type&&(r=e.data)}if(this._status="active",super.emit(l.z.KERNEL_IDLE,{}),s){console.log("[KERNEL] Execution failed with error:",i);const e=i.ename?i.ename.replace(/^<class '(.+)'>$/,"$1"):i.ename;super.emit(l.z.EXECUTE_ERROR,{ename:e,evalue:i.evalue,traceback:i.traceback});const r=`${i.ename||"Error"}: ${i.evalue||"Unknown error"}`;t({success:!1,error:new Error(r),result:n.executionResult})}else{console.log(`[KERNEL] Execution successful, captured ${n.allMessages.length} output messages`);let e=void 0!==r?r:n.executionResult;t({success:!0,result:e})}};super.on(l.z.ALL,o),this._kernel.run(e).then(e=>{console.log("[KERNEL] Python execution finished, waiting for messages to settle"),n.executionResult=this.formatResult(e),setTimeout(()=>{s()},100)}).catch(e=>{console.error("[KERNEL] Python execution error:",e),n.executionError=e instanceof Error?e:new Error(String(e)),setTimeout(()=>{s()},100)})})}catch(e){return console.error("[KERNEL] Execute setup error:",e),this._status="active",super.emit(l.z.KERNEL_IDLE,{}),{success:!1,error:e instanceof Error?e:new Error(String(e))}}}formatResult(e){if(!(e instanceof this.pyodide.ffi.PyProxy))return e;try{const t=e.toJs();return this.mapToObject(t)}catch(e){return console.error("Error formatting result:",e),{status:"error",error:String(e)}}}mapToObject(e){const t=e instanceof Array?[]:{};return e.forEach((e,r)=>{t[r]=e instanceof Map||e instanceof Array?this.mapToObject(e):e}),t}async inputReply(e){this._resolveInputReply&&(this._resolveInputReply(e),this._resolveInputReply=null)}async sendInputRequest(e,t){const r={prompt:e,password:t};this._sendMessage({type:"input_request",content:r,parentHeader:this.formatResult(this._parent_header).header})}async getpass(e){e=void 0===e?"":e,await this.sendInputRequest(e,!0);const t=new Promise(e=>{this._resolveInputReply=e});return(await t).value}async input(e){e=void 0===e?"":e,await this.sendInputRequest(e,!1);const t=new Promise(e=>{this._resolveInputReply=e});return(await t).value}async sendComm(e,t,r,n,o){this._sendMessage({type:e,content:this.formatResult(t),metadata:this.formatResult(r),ident:this.formatResult(n),buffers:this.formatResult(o),parentHeader:this.formatResult(this._parent_header).header})}async complete(e,t,r={}){await this.setup(r);const n=this._kernel.complete(e,t);return this.formatResult(n)}async inspect(e,t,r,n={}){await this.setup(n);const o=this._kernel.inspect(e,t,r);return this.formatResult(o)}async isComplete(e,t={}){await this.setup(t);const r=this._kernel.is_complete(e);return this.formatResult(r)}async commInfo(e,t={}){await this.setup(t);const r=this._kernel.comm_info(e);return{comms:this.formatResult(r),status:"ok"}}async commOpen(e,t={}){await this.setup(t);const r=this._kernel.comm_manager.comm_open(this.pyodide.toPy(null),this.pyodide.toPy(null),this.pyodide.toPy(e));return this.formatResult(r)}async commMsg(e,t={}){await this.setup(t);const r=this._kernel.comm_manager.comm_msg(this.pyodide.toPy(null),this.pyodide.toPy(null),this.pyodide.toPy(e));return this.formatResult(r)}async commClose(e,t={}){await this.setup(t);const r=this._kernel.comm_manager.comm_close(this.pyodide.toPy(null),this.pyodide.toPy(null),this.pyodide.toPy(e));return this.formatResult(r)}async*executeStream(e,t={}){try{await this.initialize();const r=[],n=e=>{r.push(e)};super.on(l.z.ALL,n);try{const n=this.execute(e,t);for(;;)if(r.length>0&&(yield r.shift()),await Promise.race([n.then(()=>!0),new Promise(e=>setTimeout(()=>e(!1),10))])){for(;r.length>0;)yield r.shift();return await n}}catch(e){throw console.error("Error in executeStream:",e),e}finally{super.off(l.z.ALL,n)}}catch(e){return console.error("Error in executeStream setup:",e),{success:!1,error:e instanceof Error?e:new Error(String(e))}}}async interrupt(){if(!this.initialized||!this.pyodide)return console.warn("[KERNEL] Cannot interrupt: kernel not initialized"),!1;console.log("[KERNEL] Attempting to interrupt execution...");try{if(this._interruptBuffer&&this._interruptSupported&&(console.log("[KERNEL] Using interrupt buffer method"),this._interruptBuffer[0]=2,await new Promise(e=>setTimeout(e,100)),0===this._interruptBuffer[0]))return console.log("[KERNEL] Interrupt processed successfully via buffer"),!0;try{return console.log("[KERNEL] Attempting Python-level interrupt"),await this.pyodide.runPythonAsync("\nimport sys\nimport _thread\n# Try to interrupt the main thread\n_thread.interrupt_main()\n"),console.log("[KERNEL] Python interrupt signal sent"),!0}catch(e){console.log("[KERNEL] Python interrupt attempt failed:",e)}return this._interpreter&&"function"==typeof this._interpreter.interrupt?(console.log("[KERNEL] Using interpreter interrupt method"),this._interpreter.interrupt(),!0):(console.log("[KERNEL] Sending interrupt messages for UI feedback"),this._sendMessage({type:"stream",bundle:{name:"stderr",text:"KeyboardInterrupt: Execution interrupted by user\n"}}),this._sendMessage({type:"execute_error",bundle:{ename:"KeyboardInterrupt",evalue:"Execution interrupted by user",traceback:["KeyboardInterrupt: Execution interrupted by user"]}}),!1)}catch(e){return console.error("[KERNEL] Error during interrupt:",e),!1}}setInterruptBuffer(e){this._interruptBuffer=e;try{this.pyodide&&"function"==typeof this.pyodide.setInterruptBuffer?(this.pyodide.setInterruptBuffer(e),this._interruptSupported=!0):(console.warn("[KERNEL] pyodide.setInterruptBuffer not available, interrupt support limited"),this._interruptSupported=!1)}catch(e){console.error("[KERNEL] Error setting interrupt buffer:",e),this._interruptSupported=!1}}async setEnvironmentVariables(){if(0===Object.keys(this.environmentVariables).length)return;const e=Date.now();console.log(`🌍 Setting ${Object.keys(this.environmentVariables).length} environment variables...`);try{for(const[e,t]of Object.entries(this.environmentVariables)){let r;r=null==t?"":String(t),await this.pyodide.runPythonAsync(`\nimport os\nos.environ[${JSON.stringify(e)}] = ${JSON.stringify(r)}\n`)}const t=Date.now()-e;console.log(`⚡ Environment variables set in ${t}ms`)}catch(e){throw console.error("❌ Failed to set environment variables:",e),e}}}},696:(e,t,r)=>{var n;r.d(t,{z:()=>n}),function(e){e.STREAM="stream",e.DISPLAY_DATA="display_data",e.UPDATE_DISPLAY_DATA="update_display_data",e.EXECUTE_RESULT="execute_result",e.EXECUTE_ERROR="execute_error",e.EXECUTE_REQUEST="execute_request",e.INPUT_REQUEST="input_request",e.CLEAR_OUTPUT="clear_output",e.COMM_OPEN="comm_open",e.COMM_MSG="comm_msg",e.COMM_CLOSE="comm_close",e.KERNEL_READY="kernel_ready",e.KERNEL_BUSY="kernel_busy",e.KERNEL_IDLE="kernel_idle",e.ALL="*",e.EXECUTION_STALLED="execution_stalled",e.KERNEL_UNRECOVERABLE="kernel_unrecoverable",e.EXECUTION_INTERRUPTED="execution_interrupted",e.KERNEL_RESTARTED="kernel_restarted",e.KERNEL_TERMINATED="kernel_terminated"}(n||(n={}))}},t={};function r(n){var o=t[n];if(void 0!==o)return o.exports;var s=t[n]={exports:{}};return e[n](s,s.exports,r),s.exports}r.d=(e,t)=>{for(var n in t)r.o(t,n)&&!r.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},r.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t);var n=r(590),o=r(696);const s=new(r(637).MB);let i=null,a={},l=new Map,c=null;function p(e){return e&&"object"==typeof e&&("KeyboardInterrupt"===e.type||e.message&&e.message.includes("KeyboardInterrupt"))}function u(){i?Object.values(o.z).forEach(e=>{const t=t=>{i&&i.postMessage({type:e,data:t})};l.set(e,t),s.on(e,t)}):console.error("[WORKER] Cannot set up event forwarding: no event port available")}self.addEventListener("error",e=>{console.error("[WORKER] Global error caught:",e.error),e.preventDefault()}),self.addEventListener("unhandledrejection",e=>{p(e.reason)?(console.log("[WORKER] KeyboardInterrupt caught in unhandled rejection handler - this is expected during interrupts"),i&&i.postMessage({type:o.z.EXECUTE_ERROR,data:{ename:"KeyboardInterrupt",evalue:"Execution interrupted by user",traceback:["KeyboardInterrupt: Execution interrupted by user"]}})):console.error("[WORKER] Unhandled promise rejection:",e.reason),e.preventDefault()}),self.addEventListener("message",e=>{if("SET_EVENT_PORT"===e.data?.type&&e.data?.port)!function(){if(l.size>0){for(const[e,t]of l.entries())s.off(e,t);l.clear()}i&&(i.close(),i=null)}(),i=e.data.port,s.isInitialized()&&u();else if("INITIALIZE_KERNEL"===e.data?.type)a=e.data.options||{},async function(e){try{await s.initialize(e),c&&"function"==typeof s.setInterruptBuffer&&s.setInterruptBuffer(c),u(),i&&i.postMessage({type:"KERNEL_INITIALIZED",data:{success:!0}})}catch(e){throw console.error("Kernel initialization failed:",e),e}}(a).catch(e=>{console.error("[WORKER] Error initializing kernel in worker:",e),i&&i.postMessage({type:o.z.EXECUTE_ERROR,data:{ename:"WorkerInitError",evalue:`Failed to initialize kernel: ${e.message}`,traceback:[e.stack||""]}})});else if("SET_INTERRUPT_BUFFER"===e.data?.type){c=e.data.buffer,s.isInitialized()&&c&&"function"==typeof s.setInterruptBuffer?(s.setInterruptBuffer(c),console.log("[WORKER] Interrupt buffer set in pyodide kernel")):c&&console.log("[WORKER] Interrupt buffer stored, will be set when kernel initializes");const t={type:"INTERRUPT_BUFFER_SET",data:{success:!0}};i&&i.postMessage(t),self.postMessage(t)}else if("INTERRUPT_KERNEL"===e.data?.type)if(c){c[0]=2;const e={type:"INTERRUPT_TRIGGERED",data:{success:!0,method:"buffer"}};i&&i.postMessage(e),self.postMessage(e)}else if(console.log("[WORKER] No interrupt buffer available, trying kernel.interrupt()"),"function"==typeof s.interrupt)s.interrupt().then(e=>{const t={type:"INTERRUPT_TRIGGERED",data:{success:e,method:"kernel"}};i&&i.postMessage(t),self.postMessage(t)}).catch(e=>{console.error("[WORKER] Error during kernel interrupt:",e);const t={type:"INTERRUPT_TRIGGERED",data:{success:!1,error:e.message,method:"kernel"}};i&&i.postMessage(t),self.postMessage(t)});else{console.warn("[WORKER] No interrupt method available");const e={type:"INTERRUPT_TRIGGERED",data:{success:!1,error:"No interrupt method available",method:"none"}};i&&i.postMessage(e),self.postMessage(e)}}),self.addEventListener("beforeunload",async()=>{try{i&&i.postMessage({type:"WORKER_TERMINATING",data:{message:"Worker is shutting down"}})}catch(e){console.error("Error during worker cleanup:",e)}});const d={initialize:async e=>{try{return void await s.initialize(e)}catch(e){throw console.error("[WORKER] Initialize error:",e),e}},execute:async(e,t)=>{try{return await s.execute(e,t)}catch(e){return console.error("[WORKER] Execute error:",e),p(e)?(console.log("[WORKER] KeyboardInterrupt caught in execute method"),{success:!1,error:new Error("KeyboardInterrupt: Execution interrupted by user"),result:{payload:[],status:"error",ename:"KeyboardInterrupt",evalue:"Execution interrupted by user",traceback:["KeyboardInterrupt: Execution interrupted by user"]}}):{success:!1,error:e instanceof Error?e:new Error(String(e)),result:{payload:[],status:"error",ename:e instanceof Error?e.constructor.name:"Error",evalue:e instanceof Error?e.message:String(e),traceback:e instanceof Error&&e.stack?e.stack.split("\n"):[String(e)]}}}},isInitialized:()=>{try{return s.isInitialized()}catch(e){return console.error("[WORKER] IsInitialized error:",e),!1}},inputReply:async e=>{try{await s.inputReply(e)}catch(e){throw console.error("[WORKER] InputReply error:",e),e}},getStatus:async()=>{try{return await s.getStatus()}catch(e){return console.error("[WORKER] getStatus error:",e),"unknown"}},interrupt:async()=>{try{return"function"==typeof s.interrupt?await s.interrupt():(console.warn("[WORKER] Kernel does not support interrupt method"),!1)}catch(e){return console.error("[WORKER] Interrupt error:",e),!1}},setInterruptBuffer:e=>{try{return"function"==typeof s.setInterruptBuffer?(s.setInterruptBuffer(e),!0):(console.warn("[WORKER] Kernel does not support setInterruptBuffer method"),!1)}catch(e){return console.error("[WORKER] setInterruptBuffer error:",e),!1}},complete:async(e,t,r)=>{try{return"function"==typeof s.complete?await s.complete(e,t,r):(console.warn("[WORKER] Kernel does not support complete method"),{status:"error",error:"Completion not supported"})}catch(e){return console.error("[WORKER] Complete error:",e),{status:"error",error:String(e)}}},inspect:async(e,t,r,n)=>{try{return"function"==typeof s.inspect?await s.inspect(e,t,r,n):(console.warn("[WORKER] Kernel does not support inspect method"),{status:"error",error:"Inspection not supported"})}catch(e){return console.error("[WORKER] Inspect error:",e),{status:"error",error:String(e)}}},isComplete:async(e,t)=>{try{return"function"==typeof s.isComplete?await s.isComplete(e,t):(console.warn("[WORKER] Kernel does not support isComplete method"),{status:"unknown"})}catch(e){return console.error("[WORKER] IsComplete error:",e),{status:"error",error:String(e)}}},commInfo:async(e,t)=>{try{return"function"==typeof s.commInfo?await s.commInfo(e,t):(console.warn("[WORKER] Kernel does not support commInfo method"),{comms:{},status:"ok"})}catch(e){return console.error("[WORKER] CommInfo error:",e),{comms:{},status:"error",error:String(e)}}},commOpen:async(e,t)=>{try{return"function"==typeof s.commOpen?await s.commOpen(e,t):void console.warn("[WORKER] Kernel does not support commOpen method")}catch(e){return void console.error("[WORKER] CommOpen error:",e)}},commMsg:async(e,t)=>{try{return"function"==typeof s.commMsg?await s.commMsg(e,t):void console.warn("[WORKER] Kernel does not support commMsg method")}catch(e){return void console.error("[WORKER] CommMsg error:",e)}},commClose:async(e,t)=>{try{return"function"==typeof s.commClose?await s.commClose(e,t):void console.warn("[WORKER] Kernel does not support commClose method")}catch(e){return void console.error("[WORKER] CommClose error:",e)}}};try{n.p(d)}catch(e){console.error("Error exposing proxy:",e)} | ||
| //# sourceMappingURL=kernel.worker.min.js.map |
| /** | ||
| * @license | ||
| * Copyright 2019 Google LLC | ||
| * SPDX-License-Identifier: Apache-2.0 | ||
| */ |
Sorry, the diff of this file is too big to display
| export {}; | ||
| //# sourceMappingURL=kernel.worker.d.ts.map |
| {"version":3,"file":"kernel.worker.d.ts","sourceRoot":"","sources":["../../src/kernel.worker.ts"],"names":[],"mappings":""} |
@@ -1,4 +0,4 @@ | ||
| PK ��Zt��U} � piplite/__init__.pyM�� | ||
| PK BPt��U} � piplite/__init__.pyM�� | ||
| 1E�|�eY����?� y�:�dB��{�XX]�=���p�^���p��]2�q�ر��nC�gv �]� ��Z�$L�"� NEj��M�Ji� | ||
| ��d�q��q�́>b��y�_M{�_O7�PK ��Z���F� = piplite/cli.py�Xmo�6��_A(&����P��nH���e0��dZ:�D$R%�8^���#)��r�d�aĢH��{�0ߒ�ߓ��Dz�@�!�UŪՊd�,)�NU��r�>�l�2)pI¸Ҵ(V�$�*���+�%�r?;�+5���2��� | ||
| ��d�q��q�́>b��y�_M{�_O7�PK BP���F� = piplite/cli.py�Xmo�6��_A(&����P��nH���e0��dZ:�D$R%�8^���#)��r�d�aĢH��{�0ߒ�ߓ��Dz�@�!�UŪՊd�,)�NU��r�>�l�2)pI¸Ҵ(V�$�*���+�%�r?;�+5���2��� | ||
| ��"g9\xA�B�/�.���e�2m�T��믾yI�F��H���3�Æ4�D���((6�v$�S�$������|&Sz��� }��T<9YT4��[P�V�-@�n��YQ�9yG'�xY�;�k����z���M�On���bj��22 9���n��h~��6`�SIx�9z���v?�9ܧ�4V�.E[��� 3λ`5�j�����$�4�����N�"�M��)�p �h��I.@�/4�CtJ�G�e��p��%��R�`CYQK@��D]�h/n-DvK��Z3�� � `�� | ||
@@ -10,28 +10,20 @@ ��A�G}�"�F��P���T@���r[,~0/�[SQ�+��/��� ���%}���*�ps���x~�M������:�����<�ii�NHSܱ��S-)W��%�9k���dΞJ�j��tp@w��lXs<Q�tR⋢V���k�lN�h{4�d���ɜHt��5CGR��<-�-X �}���l�h�PF��!�.���� | ||
| ��͵�M =�&}5��E.��S\��w��f���{��Z؉��n�|j� �2��di�6u��wz���]U�T�4!�{��D��Xnjmn*u3ְ�Hl�l#�9q)4�<U��*�n!�;ыp�H�nI�4ؙ���n�i��t�������I}�?rH�$�d[�������bk�[(�C�"8��(|uU��T��X��X��=��BgK]m���m�m!���j���� �� �������� z�J�'E�Y�{�y�#o}x�A�Ite-n~=( �Ǹ���̵b�No�0�£����)���s7^����57#� ��Z6��x���On�ܻ��x�o1On���M� SSL[q�b��Ӓ�\��'v꽓��eVQ4�f>�=���`zHqC*$ʿj5�MA�Yu6m�$j����2C�UB��6�y�&밚ږx\a[��(��۫O��SZE=,[�ش4��}��#c����z��X,��z���k��q����>��G*0ׇ�G����u��o�|;k�AT�H��0�Ǟ�gA�Ȉ�x�i�x�+���x�|6:�CH�jg��F�.��`�n�Jǁ��q'�:t����z�a�Da�\A���s�*�F���7�X^2lu�7իB(����U�D3 | ||
| ��xq��o��3s�R��=;��ߵ4���:ۙ$�1:��M���'�p۠`���UTje�Qx�C2��sy�Rb\���-ұ �#]���3٭��528�a�s�K��C������Ll9�<0�0��OͿ�8gT1�~-p�2�PK ��Z��F� | ||
| piplite/piplite.py�Ym��6��_A((b�\�� ���M��w�ԗ�\P,2-�6����Ժ�t���E���M�o�kK"���̫�(���j/S�JY�V�yY | ||
| ���k�Ԇ}�ʣ:�V�T��R&���T�2؇/{�C6w�,��yޏ����=ߊh��ʣ�d&F�B"_1��d��U&�l�����f'�l�4�;�ˣݩ���Bٞoe��EQ��m��3{,e�e5?���Y��X�R�ۏF�{��[��T��V�Uz��ܦ�FJ�"���ŵl�,2�߹��H��ب߳��J�cR��Y�f��������r��濇�F ����Jx�%;�3��'�z~�����������j�z=�[a��Y?I | ||
| �I��=��Mri,"� b�*#F��l�\0Qd���5L����}�[9j����,˫��<y���N����<����9_�՛M�i������}z�}�*���@��a5�����Xi@��4�4�P�RUEPc>�^-�g�_͓�� ה�d�������}��H��ô0%�] ���Ԅ�ו�3��,z�����?����k��Ksn[:�Y��WҠ�Y��<��\k����>+��'���(nA�z�7誹x�/ ]�\��!z�/������0E.�ܰ ��Jd8A:��Q������p�C�=���ѷ��"�S�T� g�B��)Ġ�~�tW��T�n �e>� A0,%�b}:���S� ���?=�� ��t��e����+��w�)s!�Ի���LCM�� | ||
| �Ĝ> ����y��9'�akя^� | ||
| EHF��+3����@�� ^5h�m`�(Ӡ��LoU �D�Sp�đz��HTrm�%� �Lm��O �];��AǦ���A[邽U�p�����&�Q)�1����8Ĩdn#���.~@5�AK7pm冧�$��� �f�m�%ȓښ���~G��z�N6��gk�p��F���}�_�=�?�P{�^s��wfǿ��_���LBX����Ƚ� o�`8�q��=�YB�JT�}8�*���R�ƦN�t�@2 p�FT� | ||
| 3�-��c���� ���-�tB � C�&�N�6��&��|���^X�~�0r1��^��$0�Y�j��~f����;��e ��Mt�s�?#.�h�K�8��� $P.ZYT� H��IG?�p:T��}���PQ��vů�viaO.At�~)�wN�D�P�GЏ�k�1T0�l�;V6T�> | ||
| ����C���=ϛ��Z�4�1m���C�N��d�uG_��L�RI-��)�I�o����B��*�턭��}���f�4��]ՏS-2�>xސ=s�R�K��`��}<�V�� �ؖl[�-��pS���`�lT�RPP��\����b�]����6����~܉|�}�P88�u���O��Zl�;�Z�Mۯ�%h�)��>L7 �w�����}��f�֟��Iz�?8:1+m�?+���D�ΰg����\�"4��{ܾx��B�K�RKm��G (ƦLP�I�N�0���M E�� | ||
| ��k�J#=j���9�����X�M�%4,���.�b�U�Qs��#H���A��P��F��,(�zn� �b�]WXu�� | ||
| (�;)e8I+����=*���J==-F�8`E� | ||
| "g%4����;�j� | ||
| �ck!�\C���5ݎ���l���Y���{����K�l|u6���� CP��efG d�pHԀ�Zb*n�>P*,�F�$�#�eJ8D �'��;��0��Zhp,6� ܾ{t��{��v�pE��h��-��N�����|G�.;��(XZ����l����54�#8��߀��4���j5d8!�{Π�YM��Q�.,�sɋ�Q`m9_�?�7\�c�v�l���Zk���p�K�B���3�0.!����@e�u3�*u�����T5���u6���J�7f�y]�ܝ�f?Y��{֯m�܄� �x�9�><���`@�� �xИXu&Ck���|mT^��Eq@sQ8��Я]�EĉM����B�w���xƜy0H8��\R#T��C��<���.OSa)� �t[ | ||
| '�{Ckqp;m�f|K�!#������iSk�npy�#d�T�8�(��芛��q�/�~%4�Ƭ:���@��,�`X�3b�IǠ�"���ƲՊ�,����\���0tl�6��8aP��. `g'`i��R��@�؆ | ||
| w�A9( ��'�M&�U�� | ||
| A��d,kB�tx�%mX#�6���7�٫������&��U+!f?a >`���z�vN�f)(��@�g���2(�jl�63Pr�:Xِ[Qw��10�٩*�ޫ���9�BQ��_�3����C_?����m����_.c�T�@�mf�v�̷�S�A͵���˱抃����'ִ | ||
| <aE���h+�Z^�APU�}�}�ގW�mCi�E�w�ẏ#�f�����[�xB�2�`@o��pԄ#nB%�CK�_��}�<U�Te1�JE2{� ��/�O����{�M�o���a�v�"Su�SG�t <4��O�A���h�c�Ƽ���1t�AÞ8tϏ4>�u,s��<�w娑VG���㦬�:�Z�O�#o}t� AS�uʋ� /P��!��Xd�p�Yb���0����$��4�Yh/0���� �Q� d��u̮D� | ||
| ;�b>�k���=�Rc��WZ�Lk u��!I Zabm���Zi�a��1�֢V+��:ou�x^[�˽̹�mp�� ���?cQH}ɦ������?�,�����dۨ�@t��/PK ��Zt� � " |