pyodide 0.25.0-alpha.1 → 0.25.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/pyodide.asm.wasm CHANGED
Binary file
package/pyodide.d.ts CHANGED
@@ -13,10 +13,6 @@ export declare const version: string;
13
13
  interface PyProxy {
14
14
  [x: string]: any;
15
15
  }
16
- /**
17
- * A :js:class:`~pyodide.ffi.PyProxy` is an object that allows idiomatic use of a Python object from
18
- * JavaScript. See :ref:`type-translations-pyproxy`.
19
- */
20
16
  declare class PyProxy {
21
17
  /** @private */
22
18
  $$flags: number;
@@ -116,58 +112,7 @@ declare class PyProxy {
116
112
  */
117
113
  default_converter?: (obj: PyProxy, convert: (obj: PyProxy) => any, cacheConversion: (obj: PyProxy, result: any) => void) => any;
118
114
  }): any;
119
- /**
120
- * Check whether the :js:class:`~pyodide.ffi.PyProxy` is a :js:class:`~pyodide.ffi.PyProxyWithLength`.
121
- * @deprecated Use ``obj instanceof pyodide.ffi.PyProxyWithLength`` instead.
122
- */
123
- supportsLength(): this is PyProxyWithLength;
124
- /**
125
- * Check whether the :js:class:`~pyodide.ffi.PyProxy` is a :js:class:`~pyodide.ffi.PyProxyWithGet`.
126
- * @deprecated Use ``obj instanceof pyodide.ffi.PyProxyWithGet`` instead.
127
- */
128
- supportsGet(): this is PyProxyWithGet;
129
- /**
130
- * Check whether the :js:class:`~pyodide.ffi.PyProxy` is a :js:class:`~pyodide.ffi.PyProxyWithSet`.
131
- * @deprecated Use ``obj instanceof pyodide.ffi.PyProxyWithSet`` instead.
132
- */
133
- supportsSet(): this is PyProxyWithSet;
134
- /**
135
- * Check whether the :js:class:`~pyodide.ffi.PyProxy` is a :js:class:`~pyodide.ffi.PyProxyWithHas`.
136
- * @deprecated Use ``obj instanceof pyodide.ffi.PyProxyWithHas`` instead.
137
- */
138
- supportsHas(): this is PyProxyWithHas;
139
- /**
140
- * Check whether the :js:class:`~pyodide.ffi.PyProxy` is a
141
- * :js:class:`~pyodide.ffi.PyIterable`.
142
- * @deprecated Use ``obj instanceof pyodide.ffi.PyIterable`` instead.
143
- */
144
- isIterable(): this is PyIterable;
145
- /**
146
- * Check whether the :js:class:`~pyodide.ffi.PyProxy` is a
147
- * :js:class:`~pyodide.ffi.PyIterator`
148
- * @deprecated Use ``obj instanceof pyodide.ffi.PyIterator`` instead.
149
- */
150
- isIterator(): this is PyIterator;
151
- /**
152
- * Check whether the :js:class:`~pyodide.ffi.PyProxy` is a :js:class:`~pyodide.ffi.PyAwaitable`
153
- * @deprecated Use :js:class:`obj instanceof pyodide.ffi.PyAwaitable <pyodide.ffi.PyAwaitable>` instead.
154
- */
155
- isAwaitable(): this is PyAwaitable;
156
- /**
157
- * Check whether the :js:class:`~pyodide.ffi.PyProxy` is a :js:class:`~pyodide.ffi.PyBuffer`.
158
- * @deprecated Use ``obj instanceof pyodide.ffi.PyBuffer`` instead.
159
- */
160
- isBuffer(): this is PyBuffer;
161
- /**
162
- * Check whether the :js:class:`~pyodide.ffi.PyProxy` is a :js:class:`~pyodide.ffi.PyCallable`.
163
- * @deprecated ``obj instanceof pyodide.ffi.PyCallable`` instead.
164
- */
165
- isCallable(): this is PyCallable;
166
115
  }
167
- /**
168
- * A :js:class:`~pyodide.ffi.PyProxy` whose proxied Python object has a :meth:`~object.__len__`
169
- * method.
170
- */
171
116
  declare class PyProxyWithLength extends PyProxy {
172
117
  /** @private */
173
118
  static [Symbol.hasInstance](obj: any): obj is PyProxy;
@@ -181,10 +126,6 @@ declare class PyLengthMethods {
181
126
  */
182
127
  get length(): number;
183
128
  }
184
- /**
185
- * A :js:class:`~pyodide.ffi.PyProxy` whose proxied Python object has a
186
- * :meth:`~object.__getitem__` method.
187
- */
188
129
  declare class PyProxyWithGet extends PyProxy {
189
130
  /** @private */
190
131
  static [Symbol.hasInstance](obj: any): obj is PyProxy;
@@ -201,10 +142,6 @@ declare class PyGetItemMethods {
201
142
  */
202
143
  get(key: any): any;
203
144
  }
204
- /**
205
- * A :js:class:`~pyodide.ffi.PyProxy` whose proxied Python object has a
206
- * :meth:`~object.__setitem__` or :meth:`~object.__delitem__` method.
207
- */
208
145
  declare class PyProxyWithSet extends PyProxy {
209
146
  /** @private */
210
147
  static [Symbol.hasInstance](obj: any): obj is PyProxy;
@@ -227,10 +164,6 @@ declare class PySetItemMethods {
227
164
  */
228
165
  delete(key: any): void;
229
166
  }
230
- /**
231
- * A :js:class:`~pyodide.ffi.PyProxy` whose proxied Python object has a
232
- * :meth:`~object.__contains__` method.
233
- */
234
167
  declare class PyProxyWithHas extends PyProxy {
235
168
  /** @private */
236
169
  static [Symbol.hasInstance](obj: any): obj is PyProxy;
@@ -254,8 +187,6 @@ declare class PyIterable extends PyProxy {
254
187
  /** @deprecated Use `import type { PyIterable } from "pyodide/ffi"` instead */
255
188
  interface PyIterable extends PyIterableMethods {
256
189
  }
257
- /** @deprecated Use :js:class:`pyodide.ffi.PyIterable` instead. */
258
- export type PyProxyIterable = PyIterable;
259
190
  declare class PyIterableMethods {
260
191
  /**
261
192
  * This translates to the Python code ``iter(obj)``. Return an iterator
@@ -289,8 +220,6 @@ declare class PyIterator extends PyProxy {
289
220
  /** @deprecated Use `import type { PyIterator } from "pyodide/ffi"` instead */
290
221
  interface PyIterator extends PyIteratorMethods {
291
222
  }
292
- /** @deprecated Use :js:class:`pyodide.ffi.PyIterator` instead. */
293
- export type PyProxyIterator = PyIterator;
294
223
  declare class PyIteratorMethods {
295
224
  /** @private */
296
225
  [Symbol.iterator](): this;
@@ -689,16 +618,10 @@ declare class PyAwaitable extends PyProxy {
689
618
  /** @deprecated Use `import type { PyAwaitable } from "pyodide/ffi"` instead */
690
619
  interface PyAwaitable extends Promise<any> {
691
620
  }
692
- /** @deprecated Use :js:class:`pyodide.ffi.PyAwaitable` instead. */
693
- export type PyProxyAwaitable = PyAwaitable;
694
621
  declare class PyCallable extends PyProxy {
695
622
  /** @private */
696
623
  static [Symbol.hasInstance](obj: any): obj is PyCallable;
697
624
  }
698
- /**
699
- * @deprecated Use :js:class:`pyodide.ffi.PyCallable` instead.
700
- */
701
- export type PyProxyCallable = PyCallable;
702
625
  /** @deprecated Use `import type { PyCallable } from "pyodide/ffi"` instead */
703
626
  interface PyCallable extends PyCallableMethods {
704
627
  (...args: any[]): any;
@@ -734,7 +657,36 @@ declare class PyCallableMethods {
734
657
  * object with the keyword arguments.
735
658
  */
736
659
  callKwargs(...jsargs: any): any;
660
+ /**
661
+ * Call the function with stack switching enabled. Functions called this way
662
+ * can use
663
+ * :py:meth:`PyodideFuture.syncify() <pyodide.webloop.PyodideFuture.syncify>`
664
+ * to block until a :py:class:`~asyncio.Future` or :js:class:`Promise` is
665
+ * resolved. Only works in runtimes with JS Promise integration.
666
+ *
667
+ * .. admonition:: Experimental
668
+ * :class: warning
669
+ *
670
+ * This feature is not yet stable.
671
+ *
672
+ * @experimental
673
+ */
737
674
  callSyncifying(...jsargs: any): Promise<any>;
675
+ /**
676
+ * Call the function with stack switching enabled. The last argument must be
677
+ * an object with the keyword arguments. Functions called this way can use
678
+ * :py:meth:`PyodideFuture.syncify() <pyodide.webloop.PyodideFuture.syncify>`
679
+ * to block until a :py:class:`~asyncio.Future` or :js:class:`Promise` is
680
+ * resolved. Only works in runtimes with JS Promise integration.
681
+ *
682
+ * .. admonition:: Experimental
683
+ * :class: warning
684
+ *
685
+ * This feature is not yet stable.
686
+ *
687
+ * @experimental
688
+ */
689
+ callSyncifyingKwargs(...jsargs: any): Promise<any>;
738
690
  /**
739
691
  * The ``bind()`` method creates a new function that, when called, has its
740
692
  * ``this`` keyword set to the provided value, with a given sequence of
@@ -826,8 +778,6 @@ declare class PyDict extends PyProxy {
826
778
  /** @deprecated Use `import type { PyDict } from "pyodide/ffi"` instead */
827
779
  interface PyDict extends PyProxyWithGet, PyProxyWithSet, PyProxyWithHas, PyProxyWithLength, PyIterable {
828
780
  }
829
- /** @deprecated Use :js:class:`pyodide.ffi.PyDict` instead. */
830
- export type PyProxyDict = PyDict;
831
781
  /** @deprecated Use `import type { PyBufferView } from "pyodide/ffi"` instead */
832
782
  declare class PyBufferView {
833
783
  /**
@@ -937,11 +887,19 @@ declare function setStderr(options?: {
937
887
  write?: (buffer: Uint8Array) => number;
938
888
  isatty?: boolean;
939
889
  }): void;
890
+ type PackageType = "package" | "cpython_module" | "shared_library" | "static_library";
891
+ export type PackageData = {
892
+ name: string;
893
+ version: string;
894
+ fileName: string;
895
+ /** @experimental */
896
+ packageType: PackageType;
897
+ };
940
898
  declare function loadPackage(names: string | PyProxy | Array<string>, options?: {
941
899
  messageCallback?: (message: string) => void;
942
900
  errorCallback?: (message: string) => void;
943
901
  checkIntegrity?: boolean;
944
- }): Promise<void>;
902
+ }): Promise<Array<PackageData>>;
945
903
  /** @deprecated Use `import type { TypedArray } from "pyodide/ffi"` instead */
946
904
  export type TypedArray = Int8Array | Uint8Array | Int16Array | Uint16Array | Int32Array | Uint32Array | Uint8ClampedArray | Float32Array | Float64Array;
947
905
  interface CanvasInterface {
@@ -1085,23 +1043,23 @@ declare class PyodideAPI {
1085
1043
  messageCallback?: (message: string) => void;
1086
1044
  errorCallback?: (message: string) => void;
1087
1045
  checkIntegrity?: boolean;
1088
- }): Promise<void>;
1046
+ }): Promise<Array<PackageData>>;
1089
1047
  /**
1090
1048
  * Runs a string of Python code from JavaScript, using :py:func:`~pyodide.code.eval_code`
1091
1049
  * to evaluate the code. If the last statement in the Python code is an
1092
1050
  * expression (and the code doesn't end with a semicolon), the value of the
1093
1051
  * expression is returned.
1094
1052
  *
1095
- * @param code Python code to evaluate
1053
+ * @param code The Python code to run
1096
1054
  * @param options
1097
1055
  * @param options.globals An optional Python dictionary to use as the globals.
1098
1056
  * Defaults to :js:attr:`pyodide.globals`.
1099
1057
  * @param options.locals An optional Python dictionary to use as the locals.
1100
1058
  * Defaults to the same as ``globals``.
1101
- * @param options.filename An optional string to use as the filename. Defaults
1102
- * to "<exec>". If the filename does not start with "<" and end with ">",
1103
- * the source code will be added to the Python linecache and tracebacks
1104
- * will show source lines.
1059
+ * @param options.filename An optional string to use as the file name.
1060
+ * Defaults to ``"<exec>"``. If a custom file name is given, the
1061
+ * traceback for any exception that is thrown will show source lines
1062
+ * (unless the given file name starts with ``<`` and ends with ``>``).
1105
1063
  * @returns The result of the Python code translated to JavaScript. See the
1106
1064
  * documentation for :py:func:`~pyodide.code.eval_code` for more info.
1107
1065
  * @example
@@ -1152,16 +1110,16 @@ declare class PyodideAPI {
1152
1110
  * import any python packages referenced via ``import`` statements in your
1153
1111
  * code. This function will no longer do it for you.
1154
1112
  *
1155
- * @param code Python code to evaluate
1113
+ * @param code The Python code to run
1156
1114
  * @param options
1157
1115
  * @param options.globals An optional Python dictionary to use as the globals.
1158
1116
  * Defaults to :js:attr:`pyodide.globals`.
1159
1117
  * @param options.locals An optional Python dictionary to use as the locals.
1160
1118
  * Defaults to the same as ``globals``.
1161
- * @param options.filename An optional string to use as the filename. Defaults
1162
- * to "<exec>". If the filename does not start with "<" and end with ">",
1163
- * the source code will be added to the Python linecache and tracebacks
1164
- * will show source lines.
1119
+ * @param options.filename An optional string to use as the file name.
1120
+ * Defaults to ``"<exec>"``. If a custom file name is given, the
1121
+ * traceback for any exception that is thrown will show source lines
1122
+ * (unless the given file name starts with ``<`` and ends with ``>``).
1165
1123
  * @returns The result of the Python code translated to JavaScript.
1166
1124
  * @async
1167
1125
  */
@@ -1170,9 +1128,35 @@ declare class PyodideAPI {
1170
1128
  locals?: PyProxy;
1171
1129
  filename?: string;
1172
1130
  }): Promise<any>;
1131
+ /**
1132
+ * Runs a Python code string like :js:func:`pyodide.runPython` but with stack
1133
+ * switching enabled. Code executed in this way can use
1134
+ * :py:meth:`PyodideFuture.syncify() <pyodide.webloop.PyodideFuture.syncify>`
1135
+ * to block until a :py:class:`~asyncio.Future` or :js:class:`Promise` is
1136
+ * resolved. Only works in runtimes with JS Promise Integration enabled.
1137
+ *
1138
+ * .. admonition:: Experimental
1139
+ * :class: warning
1140
+ *
1141
+ * This feature is not yet stable.
1142
+ *
1143
+ * @experimental
1144
+ * @param code The Python code to run
1145
+ * @param options
1146
+ * @param options.globals An optional Python dictionary to use as the globals.
1147
+ * Defaults to :js:attr:`pyodide.globals`.
1148
+ * @param options.locals An optional Python dictionary to use as the locals.
1149
+ * Defaults to the same as ``globals``.
1150
+ * @param options.filename An optional string to use as the file name.
1151
+ * Defaults to ``"<exec>"``. If a custom file name is given, the
1152
+ * traceback for any exception that is thrown will show source lines
1153
+ * (unless the given file name starts with ``<`` and ends with ``>``).
1154
+ * @returns The result of the Python code translated to JavaScript.
1155
+ */
1173
1156
  static runPythonSyncifying(code: string, options?: {
1174
1157
  globals?: PyProxy;
1175
1158
  locals?: PyProxy;
1159
+ filename?: string;
1176
1160
  }): Promise<any>;
1177
1161
  /**
1178
1162
  * Registers the JavaScript object ``module`` as a JavaScript module named
@@ -1182,6 +1166,28 @@ declare class PyodideAPI {
1182
1166
  * module from :py:data:`sys.modules`. This calls
1183
1167
  * :func:`~pyodide.ffi.register_js_module`.
1184
1168
  *
1169
+ * Any attributes of the JavaScript objects which are themselves objects will
1170
+ * be treated as submodules:
1171
+ * ```pyodide
1172
+ * pyodide.registerJsModule("mymodule", { submodule: { value: 7 } });
1173
+ * pyodide.runPython(`
1174
+ * from mymodule.submodule import value
1175
+ * assert value == 7
1176
+ * `);
1177
+ * ```
1178
+ * If you wish to prevent this, try the following instead:
1179
+ * ```pyodide
1180
+ * const sys = pyodide.pyimport("sys");
1181
+ * sys.modules.set("mymodule", { obj: { value: 7 } });
1182
+ * pyodide.runPython(`
1183
+ * from mymodule import obj
1184
+ * assert obj.value == 7
1185
+ * # attempting to treat obj as a submodule raises ModuleNotFoundError:
1186
+ * # "No module named 'mymodule.obj'; 'mymodule' is not a package"
1187
+ * from mymodule.obj import value
1188
+ * `);
1189
+ * ```
1190
+ *
1185
1191
  * @param name Name of the JavaScript module to add
1186
1192
  * @param module JavaScript object backing the module
1187
1193
  */
@@ -1313,39 +1319,6 @@ declare class PyodideAPI {
1313
1319
  * during execution of C code.
1314
1320
  */
1315
1321
  static checkInterrupt(): void;
1316
- /**
1317
- * Is ``jsobj`` a :js:class:`~pyodide.ffi.PyProxy`?
1318
- * @deprecated Use :js:class:`obj instanceof pyodide.ffi.PyProxy <pyodide.ffi.PyProxy>` instead.
1319
- * @param jsobj Object to test.
1320
- */
1321
- static isPyProxy(jsobj: any): jsobj is PyProxy;
1322
- /**
1323
- * An alias for :js:class:`pyodide.ffi.PyBufferView`.
1324
- *
1325
- * @hidetype
1326
- * @alias
1327
- * @dockind class
1328
- * @deprecated
1329
- */
1330
- static get PyBuffer(): typeof PyBufferView;
1331
- /**
1332
- * An alias for :js:class:`pyodide.ffi.PyBuffer`.
1333
- *
1334
- * @hidetype
1335
- * @alias
1336
- * @dockind class
1337
- * @deprecated
1338
- */
1339
- static get PyProxyBuffer(): typeof PyBuffer;
1340
- /**
1341
- * An alias for :js:class:`pyodide.ffi.PythonError`.
1342
- *
1343
- * @hidetype
1344
- * @alias
1345
- * @dockind class
1346
- * @deprecated
1347
- */
1348
- static get PythonError(): typeof PythonError;
1349
1322
  /**
1350
1323
  * Turn on or off debug mode. In debug mode, some error messages are improved
1351
1324
  * at a performance cost.
@@ -1364,7 +1337,6 @@ type ConfigType = {
1364
1337
  indexURL: string;
1365
1338
  packageCacheDir: string;
1366
1339
  lockFileURL: string;
1367
- homedir: string;
1368
1340
  fullStdLib?: boolean;
1369
1341
  stdLibURL?: string;
1370
1342
  stdin?: () => string;
@@ -1388,7 +1360,6 @@ type ConfigType = {
1388
1360
  * async function main() {
1389
1361
  * const pyodide = await loadPyodide({
1390
1362
  * fullStdLib: true,
1391
- * homedir: "/pyodide",
1392
1363
  * stdout: (msg) => console.log(`Pyodide: ${msg}`),
1393
1364
  * });
1394
1365
  * console.log("Loaded Pyodide");
@@ -1420,11 +1391,6 @@ export declare function loadPyodide(options?: {
1420
1391
  * Default: ```${indexURL}/pyodide-lock.json```
1421
1392
  */
1422
1393
  lockFileURL?: string;
1423
- /**
1424
- * The home directory which Pyodide will use inside virtual file system.
1425
- * This is deprecated, use ``{env: {HOME : some_dir}}`` instead.
1426
- */
1427
- homedir?: string;
1428
1394
  /**
1429
1395
  * Load the full Python standard library. Setting this to false excludes
1430
1396
  * unvendored modules from the standard library.
@@ -1506,10 +1472,5 @@ export declare function loadPyodide(options?: {
1506
1472
  _node_mounts?: string[];
1507
1473
  }): Promise<PyodideInterface>;
1508
1474
 
1509
- export type {
1510
- PyBuffer as PyProxyBuffer,
1511
- PyBufferView as PyBuffer,
1512
- };
1513
-
1514
1475
  export type {};
1515
- export type {PyProxy, PyProxyWithGet, PyProxyWithHas, PyProxyWithLength, PyProxyWithSet};
1476
+ export type {};
package/pyodide.js CHANGED
@@ -1,4 +1,4 @@
1
- "use strict";var loadPyodide=(()=>{var ce=Object.create;var _=Object.defineProperty;var le=Object.getOwnPropertyDescriptor;var de=Object.getOwnPropertyNames;var fe=Object.getPrototypeOf,ue=Object.prototype.hasOwnProperty;var f=(t,e)=>_(t,"name",{value:e,configurable:!0}),g=(t=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(t,{get:(e,c)=>(typeof require<"u"?require:e)[c]}):t)(function(t){if(typeof require<"u")return require.apply(this,arguments);throw new Error('Dynamic require of "'+t+'" is not supported')});var U=(t,e)=>()=>(e||t((e={exports:{}}).exports,e),e.exports),pe=(t,e)=>{for(var c in e)_(t,c,{get:e[c],enumerable:!0})},$=(t,e,c,o)=>{if(e&&typeof e=="object"||typeof e=="function")for(let a of de(e))!ue.call(t,a)&&a!==c&&_(t,a,{get:()=>e[a],enumerable:!(o=le(e,a))||o.enumerable});return t};var h=(t,e,c)=>(c=t!=null?ce(fe(t)):{},$(e||!t||!t.__esModule?_(c,"default",{value:t,enumerable:!0}):c,t)),me=t=>$(_({},"__esModule",{value:!0}),t);var B=U((R,C)=>{(function(t,e){"use strict";typeof define=="function"&&define.amd?define("stackframe",[],e):typeof R=="object"?C.exports=e():t.StackFrame=e()})(R,function(){"use strict";function t(d){return!isNaN(parseFloat(d))&&isFinite(d)}f(t,"_isNumber");function e(d){return d.charAt(0).toUpperCase()+d.substring(1)}f(e,"_capitalize");function c(d){return function(){return this[d]}}f(c,"_getter");var o=["isConstructor","isEval","isNative","isToplevel"],a=["columnNumber","lineNumber"],r=["fileName","functionName","source"],n=["args"],u=["evalOrigin"],i=o.concat(a,r,n,u);function s(d){if(d)for(var y=0;y<i.length;y++)d[i[y]]!==void 0&&this["set"+e(i[y])](d[i[y]])}f(s,"StackFrame"),s.prototype={getArgs:function(){return this.args},setArgs:function(d){if(Object.prototype.toString.call(d)!=="[object Array]")throw new TypeError("Args must be an Array");this.args=d},getEvalOrigin:function(){return this.evalOrigin},setEvalOrigin:function(d){if(d instanceof s)this.evalOrigin=d;else if(d instanceof Object)this.evalOrigin=new s(d);else throw new TypeError("Eval Origin must be an Object or StackFrame")},toString:function(){var d=this.getFileName()||"",y=this.getLineNumber()||"",w=this.getColumnNumber()||"",E=this.getFunctionName()||"";return this.getIsEval()?d?"[eval] ("+d+":"+y+":"+w+")":"[eval]:"+y+":"+w:E?E+" ("+d+":"+y+":"+w+")":d+":"+y+":"+w}},s.fromString=f(function(y){var w=y.indexOf("("),E=y.lastIndexOf(")"),ne=y.substring(0,w),ie=y.substring(w+1,E).split(","),M=y.substring(E+1);if(M.indexOf("@")===0)var N=/@(.+?)(?::(\d+))?(?::(\d+))?$/.exec(M,""),oe=N[1],ae=N[2],se=N[3];return new s({functionName:ne,args:ie||void 0,fileName:oe,lineNumber:ae||void 0,columnNumber:se||void 0})},"StackFrame$$fromString");for(var l=0;l<o.length;l++)s.prototype["get"+e(o[l])]=c(o[l]),s.prototype["set"+e(o[l])]=function(d){return function(y){this[d]=!!y}}(o[l]);for(var m=0;m<a.length;m++)s.prototype["get"+e(a[m])]=c(a[m]),s.prototype["set"+e(a[m])]=function(d){return function(y){if(!t(y))throw new TypeError(d+" must be a Number");this[d]=Number(y)}}(a[m]);for(var p=0;p<r.length;p++)s.prototype["get"+e(r[p])]=c(r[p]),s.prototype["set"+e(r[p])]=function(d){return function(y){this[d]=String(y)}}(r[p]);return s})});var j=U((k,W)=>{(function(t,e){"use strict";typeof define=="function"&&define.amd?define("error-stack-parser",["stackframe"],e):typeof k=="object"?W.exports=e(B()):t.ErrorStackParser=e(t.StackFrame)})(k,f(function(e){"use strict";var c=/(^|@)\S+:\d+/,o=/^\s*at .*(\S+:\d+|\(native\))/m,a=/^(eval@)?(\[native code])?$/;return{parse:f(function(n){if(typeof n.stacktrace<"u"||typeof n["opera#sourceloc"]<"u")return this.parseOpera(n);if(n.stack&&n.stack.match(o))return this.parseV8OrIE(n);if(n.stack)return this.parseFFOrSafari(n);throw new Error("Cannot parse given Error object")},"ErrorStackParser$$parse"),extractLocation:f(function(n){if(n.indexOf(":")===-1)return[n];var u=/(.+?)(?::(\d+))?(?::(\d+))?$/,i=u.exec(n.replace(/[()]/g,""));return[i[1],i[2]||void 0,i[3]||void 0]},"ErrorStackParser$$extractLocation"),parseV8OrIE:f(function(n){var u=n.stack.split(`
1
+ "use strict";var loadPyodide=(()=>{var ce=Object.create;var _=Object.defineProperty;var le=Object.getOwnPropertyDescriptor;var de=Object.getOwnPropertyNames;var fe=Object.getPrototypeOf,ue=Object.prototype.hasOwnProperty;var f=(t,e)=>_(t,"name",{value:e,configurable:!0}),g=(t=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(t,{get:(e,c)=>(typeof require<"u"?require:e)[c]}):t)(function(t){if(typeof require<"u")return require.apply(this,arguments);throw new Error('Dynamic require of "'+t+'" is not supported')});var $=(t,e)=>()=>(e||t((e={exports:{}}).exports,e),e.exports),pe=(t,e)=>{for(var c in e)_(t,c,{get:e[c],enumerable:!0})},M=(t,e,c,o)=>{if(e&&typeof e=="object"||typeof e=="function")for(let a of de(e))!ue.call(t,a)&&a!==c&&_(t,a,{get:()=>e[a],enumerable:!(o=le(e,a))||o.enumerable});return t};var h=(t,e,c)=>(c=t!=null?ce(fe(t)):{},M(e||!t||!t.__esModule?_(c,"default",{value:t,enumerable:!0}):c,t)),me=t=>M(_({},"__esModule",{value:!0}),t);var j=$((P,C)=>{(function(t,e){"use strict";typeof define=="function"&&define.amd?define("stackframe",[],e):typeof P=="object"?C.exports=e():t.StackFrame=e()})(P,function(){"use strict";function t(d){return!isNaN(parseFloat(d))&&isFinite(d)}f(t,"_isNumber");function e(d){return d.charAt(0).toUpperCase()+d.substring(1)}f(e,"_capitalize");function c(d){return function(){return this[d]}}f(c,"_getter");var o=["isConstructor","isEval","isNative","isToplevel"],a=["columnNumber","lineNumber"],r=["fileName","functionName","source"],n=["args"],u=["evalOrigin"],i=o.concat(a,r,n,u);function s(d){if(d)for(var y=0;y<i.length;y++)d[i[y]]!==void 0&&this["set"+e(i[y])](d[i[y]])}f(s,"StackFrame"),s.prototype={getArgs:function(){return this.args},setArgs:function(d){if(Object.prototype.toString.call(d)!=="[object Array]")throw new TypeError("Args must be an Array");this.args=d},getEvalOrigin:function(){return this.evalOrigin},setEvalOrigin:function(d){if(d instanceof s)this.evalOrigin=d;else if(d instanceof Object)this.evalOrigin=new s(d);else throw new TypeError("Eval Origin must be an Object or StackFrame")},toString:function(){var d=this.getFileName()||"",y=this.getLineNumber()||"",w=this.getColumnNumber()||"",E=this.getFunctionName()||"";return this.getIsEval()?d?"[eval] ("+d+":"+y+":"+w+")":"[eval]:"+y+":"+w:E?E+" ("+d+":"+y+":"+w+")":d+":"+y+":"+w}},s.fromString=f(function(y){var w=y.indexOf("("),E=y.lastIndexOf(")"),ne=y.substring(0,w),ie=y.substring(w+1,E).split(","),U=y.substring(E+1);if(U.indexOf("@")===0)var R=/@(.+?)(?::(\d+))?(?::(\d+))?$/.exec(U,""),oe=R[1],ae=R[2],se=R[3];return new s({functionName:ne,args:ie||void 0,fileName:oe,lineNumber:ae||void 0,columnNumber:se||void 0})},"StackFrame$$fromString");for(var l=0;l<o.length;l++)s.prototype["get"+e(o[l])]=c(o[l]),s.prototype["set"+e(o[l])]=function(d){return function(y){this[d]=!!y}}(o[l]);for(var m=0;m<a.length;m++)s.prototype["get"+e(a[m])]=c(a[m]),s.prototype["set"+e(a[m])]=function(d){return function(y){if(!t(y))throw new TypeError(d+" must be a Number");this[d]=Number(y)}}(a[m]);for(var p=0;p<r.length;p++)s.prototype["get"+e(r[p])]=c(r[p]),s.prototype["set"+e(r[p])]=function(d){return function(y){this[d]=String(y)}}(r[p]);return s})});var W=$((x,B)=>{(function(t,e){"use strict";typeof define=="function"&&define.amd?define("error-stack-parser",["stackframe"],e):typeof x=="object"?B.exports=e(j()):t.ErrorStackParser=e(t.StackFrame)})(x,f(function(e){"use strict";var c=/(^|@)\S+:\d+/,o=/^\s*at .*(\S+:\d+|\(native\))/m,a=/^(eval@)?(\[native code])?$/;return{parse:f(function(n){if(typeof n.stacktrace<"u"||typeof n["opera#sourceloc"]<"u")return this.parseOpera(n);if(n.stack&&n.stack.match(o))return this.parseV8OrIE(n);if(n.stack)return this.parseFFOrSafari(n);throw new Error("Cannot parse given Error object")},"ErrorStackParser$$parse"),extractLocation:f(function(n){if(n.indexOf(":")===-1)return[n];var u=/(.+?)(?::(\d+))?(?::(\d+))?$/,i=u.exec(n.replace(/[()]/g,""));return[i[1],i[2]||void 0,i[3]||void 0]},"ErrorStackParser$$extractLocation"),parseV8OrIE:f(function(n){var u=n.stack.split(`
2
2
  `).filter(function(i){return!!i.match(o)},this);return u.map(function(i){i.indexOf("(eval ")>-1&&(i=i.replace(/eval code/g,"eval").replace(/(\(eval at [^()]*)|(,.*$)/g,""));var s=i.replace(/^\s+/,"").replace(/\(eval code/g,"(").replace(/^.*?\s+/,""),l=s.match(/ (\(.+\)$)/);s=l?s.replace(l[0],""):s;var m=this.extractLocation(l?l[1]:s),p=l&&s||void 0,d=["eval","<anonymous>"].indexOf(m[0])>-1?void 0:m[0];return new e({functionName:p,fileName:d,lineNumber:m[1],columnNumber:m[2],source:i})},this)},"ErrorStackParser$$parseV8OrIE"),parseFFOrSafari:f(function(n){var u=n.stack.split(`
3
3
  `).filter(function(i){return!i.match(a)},this);return u.map(function(i){if(i.indexOf(" > eval")>-1&&(i=i.replace(/ line (\d+)(?: > eval line \d+)* > eval:\d+:\d+/g,":$1")),i.indexOf("@")===-1&&i.indexOf(":")===-1)return new e({functionName:i});var s=/((.*".+"[^@]*)?[^@]*)(?:@)/,l=i.match(s),m=l&&l[1]?l[1]:void 0,p=this.extractLocation(i.replace(s,""));return new e({functionName:m,fileName:p[0],lineNumber:p[1],columnNumber:p[2],source:i})},this)},"ErrorStackParser$$parseFFOrSafari"),parseOpera:f(function(n){return!n.stacktrace||n.message.indexOf(`
4
4
  `)>-1&&n.message.split(`
@@ -6,7 +6,7 @@
6
6
  `).length?this.parseOpera9(n):n.stack?this.parseOpera11(n):this.parseOpera10(n)},"ErrorStackParser$$parseOpera"),parseOpera9:f(function(n){for(var u=/Line (\d+).*script (?:in )?(\S+)/i,i=n.message.split(`
7
7
  `),s=[],l=2,m=i.length;l<m;l+=2){var p=u.exec(i[l]);p&&s.push(new e({fileName:p[2],lineNumber:p[1],source:i[l]}))}return s},"ErrorStackParser$$parseOpera9"),parseOpera10:f(function(n){for(var u=/Line (\d+).*script (?:in )?(\S+)(?:: In function (\S+))?$/i,i=n.stacktrace.split(`
8
8
  `),s=[],l=0,m=i.length;l<m;l+=2){var p=u.exec(i[l]);p&&s.push(new e({functionName:p[3]||void 0,fileName:p[2],lineNumber:p[1],source:i[l]}))}return s},"ErrorStackParser$$parseOpera10"),parseOpera11:f(function(n){var u=n.stack.split(`
9
- `).filter(function(i){return!!i.match(c)&&!i.match(/^Error created at/)},this);return u.map(function(i){var s=i.split("@"),l=this.extractLocation(s.pop()),m=s.shift()||"",p=m.replace(/<anonymous function(: (\w+))?>/,"$2").replace(/\([^)]*\)/g,"")||void 0,d;m.match(/\(([^)]*)\)/)&&(d=m.replace(/^[^(]+\(([^)]*)\)$/,"$1"));var y=d===void 0||d==="[arguments not available]"?void 0:d.split(",");return new e({functionName:p,args:y,fileName:l[0],lineNumber:l[1],columnNumber:l[2],source:i})},this)},"ErrorStackParser$$parseOpera11")}},"ErrorStackParser"))});var Ne={};pe(Ne,{loadPyodide:()=>T,version:()=>b});var G=h(j());var v=typeof process=="object"&&typeof process.versions=="object"&&typeof process.versions.node=="string"&&typeof process.browser>"u",F=v&&typeof module<"u"&&typeof module.exports<"u"&&typeof g<"u"&&typeof __dirname<"u",H=v&&!F,ye=typeof Deno<"u",z=!v&&!ye,q=z&&typeof window<"u"&&typeof document<"u"&&typeof document.createElement<"u"&&typeof sessionStorage<"u",V=z&&typeof importScripts<"u"&&typeof self<"u";var K,O,L,X,I,ge=`"fetch" is not defined, maybe you're using node < 18? From Pyodide >= 0.25.0, node >= 18 is required. Older versions of Node.js may work, but it is not guaranteed or supported. Falling back to "node-fetch".`;async function A(){if(!v||(K=(await import("url")).default,I=await import("fs/promises"),globalThis.fetch?O=fetch:(console.warn(ge),O=(await import("node-fetch")).default),X=(await import("vm")).default,L=await import("path"),D=L.sep,typeof g<"u"))return;let t=await import("fs"),e=await import("crypto"),c=await import("ws"),o=await import("child_process"),a={fs:t,crypto:e,ws:c,child_process:o};globalThis.require=function(r){return a[r]}}f(A,"initNodeModules");function he(t,e){return L.resolve(e||".",t)}f(he,"node_resolvePath");function ve(t,e){return e===void 0&&(e=location),new URL(t,e).toString()}f(ve,"browser_resolvePath");var x;v?x=he:x=ve;var D;v||(D="/");function we(t,e){return t.startsWith("file://")&&(t=t.slice(7)),t.includes("://")?{response:O(t)}:{binary:I.readFile(t).then(c=>new Uint8Array(c.buffer,c.byteOffset,c.byteLength))}}f(we,"node_getBinaryResponse");function be(t,e){let c=new URL(t,location);return{response:fetch(c,e?{integrity:e}:{})}}f(be,"browser_getBinaryResponse");var S;v?S=we:S=be;async function J(t,e){let{response:c,binary:o}=S(t,e);if(o)return o;let a=await c;if(!a.ok)throw new Error(`Failed to load '${t}': request failed.`);return new Uint8Array(await a.arrayBuffer())}f(J,"loadBinaryFile");var P;if(q)P=f(async t=>await import(t),"loadScript");else if(V)P=f(async t=>{try{globalThis.importScripts(t)}catch(e){if(e instanceof TypeError)await import(t);else throw e}},"loadScript");else if(v)P=Ee;else throw new Error("Cannot determine runtime environment");async function Ee(t){t.startsWith("file://")&&(t=t.slice(7)),t.includes("://")?X.runInThisContext(await(await O(t)).text()):await import(K.pathToFileURL(t).href)}f(Ee,"nodeLoadScript");async function Y(t){if(v){await A();let e=await I.readFile(t);return JSON.parse(e)}else return await(await fetch(t)).json()}f(Y,"loadLockFile");async function Q(){if(F)return __dirname;let t;try{throw new Error}catch(o){t=o}let e=G.default.parse(t)[0].fileName;if(H){let o=await import("path");return(await import("url")).fileURLToPath(o.dirname(e))}let c=e.lastIndexOf(D);if(c===-1)throw new Error("Could not extract indexURL path from pyodide module location");return e.slice(0,c)}f(Q,"calculateDirname");function Z(t){let e=t.FS,c=t.FS.filesystems.MEMFS,o=t.PATH,a={DIR_MODE:16895,FILE_MODE:33279,mount:function(r){if(!r.opts.fileSystemHandle)throw new Error("opts.fileSystemHandle is required");return c.mount.apply(null,arguments)},syncfs:async(r,n,u)=>{try{let i=a.getLocalSet(r),s=await a.getRemoteSet(r),l=n?s:i,m=n?i:s;await a.reconcile(r,l,m),u(null)}catch(i){u(i)}},getLocalSet:r=>{let n=Object.create(null);function u(l){return l!=="."&&l!==".."}f(u,"isRealDir");function i(l){return m=>o.join2(l,m)}f(i,"toAbsolute");let s=e.readdir(r.mountpoint).filter(u).map(i(r.mountpoint));for(;s.length;){let l=s.pop(),m=e.stat(l);e.isDir(m.mode)&&s.push.apply(s,e.readdir(l).filter(u).map(i(l))),n[l]={timestamp:m.mtime,mode:m.mode}}return{type:"local",entries:n}},getRemoteSet:async r=>{let n=Object.create(null),u=await _e(r.opts.fileSystemHandle);for(let[i,s]of u)i!=="."&&(n[o.join2(r.mountpoint,i)]={timestamp:s.kind==="file"?(await s.getFile()).lastModifiedDate:new Date,mode:s.kind==="file"?a.FILE_MODE:a.DIR_MODE});return{type:"remote",entries:n,handles:u}},loadLocalEntry:r=>{let u=e.lookupPath(r).node,i=e.stat(r);if(e.isDir(i.mode))return{timestamp:i.mtime,mode:i.mode};if(e.isFile(i.mode))return u.contents=c.getFileDataAsTypedArray(u),{timestamp:i.mtime,mode:i.mode,contents:u.contents};throw new Error("node type not supported")},storeLocalEntry:(r,n)=>{if(e.isDir(n.mode))e.mkdirTree(r,n.mode);else if(e.isFile(n.mode))e.writeFile(r,n.contents,{canOwn:!0});else throw new Error("node type not supported");e.chmod(r,n.mode),e.utime(r,n.timestamp,n.timestamp)},removeLocalEntry:r=>{var n=e.stat(r);e.isDir(n.mode)?e.rmdir(r):e.isFile(n.mode)&&e.unlink(r)},loadRemoteEntry:async r=>{if(r.kind==="file"){let n=await r.getFile();return{contents:new Uint8Array(await n.arrayBuffer()),mode:a.FILE_MODE,timestamp:n.lastModifiedDate}}else{if(r.kind==="directory")return{mode:a.DIR_MODE,timestamp:new Date};throw new Error("unknown kind: "+r.kind)}},storeRemoteEntry:async(r,n,u)=>{let i=r.get(o.dirname(n)),s=e.isFile(u.mode)?await i.getFileHandle(o.basename(n),{create:!0}):await i.getDirectoryHandle(o.basename(n),{create:!0});if(s.kind==="file"){let l=await s.createWritable();await l.write(u.contents),await l.close()}r.set(n,s)},removeRemoteEntry:async(r,n)=>{await r.get(o.dirname(n)).removeEntry(o.basename(n)),r.delete(n)},reconcile:async(r,n,u)=>{let i=0,s=[];Object.keys(n.entries).forEach(function(p){let d=n.entries[p],y=u.entries[p];(!y||e.isFile(d.mode)&&d.timestamp.getTime()>y.timestamp.getTime())&&(s.push(p),i++)}),s.sort();let l=[];if(Object.keys(u.entries).forEach(function(p){n.entries[p]||(l.push(p),i++)}),l.sort().reverse(),!i)return;let m=n.type==="remote"?n.handles:u.handles;for(let p of s){let d=o.normalize(p.replace(r.mountpoint,"/")).substring(1);if(u.type==="local"){let y=m.get(d),w=await a.loadRemoteEntry(y);a.storeLocalEntry(p,w)}else{let y=a.loadLocalEntry(p);await a.storeRemoteEntry(m,d,y)}}for(let p of l)if(u.type==="local")a.removeLocalEntry(p);else{let d=o.normalize(p.replace(r.mountpoint,"/")).substring(1);await a.removeRemoteEntry(m,d)}}};t.FS.filesystems.NATIVEFS_ASYNC=a}f(Z,"initializeNativeFS");var _e=f(async t=>{let e=[];async function c(a){for await(let r of a.values())e.push(r),r.kind==="directory"&&await c(r)}f(c,"collect"),await c(t);let o=new Map;o.set(".",t);for(let a of e){let r=(await t.resolve(a)).join("/");o.set(r,a)}return o},"getFsHandles");function ee(){let t={};return t.noImageDecoding=!0,t.noAudioDecoding=!0,t.noWasmDecoding=!1,t.preRun=[],t.quit=(e,c)=>{throw t.exited={status:e,toThrow:c},c},t}f(ee,"createModule");function Pe(t,e){t.preRun.push(function(){let c="/";try{t.FS.mkdirTree(e)}catch(o){console.error(`Error occurred while making a home directory '${e}':`),console.error(o),console.error(`Using '${c}' for a home directory instead`),e=c}t.FS.chdir(e)})}f(Pe,"createHomeDirectory");function Se(t,e){t.preRun.push(function(){Object.assign(t.ENV,e)})}f(Se,"setEnvironment");function Oe(t,e){t.preRun.push(()=>{for(let c of e)t.FS.mkdirTree(c),t.FS.mount(t.FS.filesystems.NODEFS,{root:c},c)})}f(Oe,"mountLocalDirectories");function xe(t,e){let c=J(e);t.preRun.push(()=>{let o=t._py_version_major(),a=t._py_version_minor();t.FS.mkdirTree("/lib"),t.FS.mkdirTree(`/lib/python${o}.${a}/site-packages`),t.addRunDependency("install-stdlib"),c.then(r=>{t.FS.writeFile(`/lib/python${o}${a}.zip`,r)}).catch(r=>{console.error("Error occurred while installing the standard library:"),console.error(r)}).finally(()=>{t.removeRunDependency("install-stdlib")})})}f(xe,"installStdlib");function te(t,e){let c;e.stdLibURL!=null?c=e.stdLibURL:c=e.indexURL+"python_stdlib.zip",xe(t,c),Pe(t,e.env.HOME),Se(t,e.env),Oe(t,e._node_mounts),t.preRun.push(()=>Z(t))}f(te,"initializeFileSystem");function re(t,e){let{binary:c,response:o}=S(e+"pyodide.asm.wasm");t.instantiateWasm=function(a,r){return async function(){try{let n;o?n=await WebAssembly.instantiateStreaming(o,a):n=await WebAssembly.instantiate(await c,a);let{instance:u,module:i}=n;typeof WasmOffsetConverter<"u"&&(wasmOffsetConverter=new WasmOffsetConverter(wasmBinary,i)),r(u,i)}catch(n){console.warn("wasm instantiation failed!"),console.warn(n)}}(),{}}}f(re,"preloadWasm");var b="0.25.0a1";async function T(t={}){await A();let e=t.indexURL||await Q();e=x(e),e.endsWith("/")||(e+="/"),t.indexURL=e;let c={fullStdLib:!1,jsglobals:globalThis,stdin:globalThis.prompt?globalThis.prompt:void 0,lockFileURL:e+"pyodide-lock.json",args:[],_node_mounts:[],env:{},packageCacheDir:e,packages:[]},o=Object.assign(c,t);if(t.homedir){if(console.warn("The homedir argument to loadPyodide is deprecated. Use 'env: { HOME: value }' instead of 'homedir: value'."),t.env&&t.env.HOME)throw new Error("Set both env.HOME and homedir arguments");o.env.HOME=o.homedir}o.env.HOME||(o.env.HOME="/home/pyodide");let a=ee();a.print=o.stdout,a.printErr=o.stderr,a.arguments=o.args;let r={config:o};a.API=r,r.lockFilePromise=Y(o.lockFileURL),re(a,e),te(a,o);let n=new Promise(s=>a.postRun=s);if(a.locateFile=s=>o.indexURL+s,typeof _createPyodideModule!="function"){let s=`${o.indexURL}pyodide.asm.js`;await P(s)}if(await _createPyodideModule(a),await n,a.exited)throw a.exited.toThrow;if(t.pyproxyToStringRepr&&r.setPyProxyToStringMethod(!0),r.version!==b)throw new Error(`Pyodide version does not match: '${b}' <==> '${r.version}'. If you updated the Pyodide version, make sure you also updated the 'indexURL' parameter passed to loadPyodide.`);a.locateFile=s=>{throw new Error("Didn't expect to load any more file_packager files!")};let u=r.finalizeBootstrap();if(u.version.includes("dev")||r.setCdnUrl(`https://cdn.jsdelivr.net/pyodide/v${u.version}/full/`),await r.packageIndexReady,r._pyodide._importhook.register_module_not_found_hook(r._import_name_to_package_name,r.lockfile_unvendored_stdlibs_and_test),r.lockfile_info.version!==b)throw new Error("Lock file version doesn't match Pyodide version");return r.package_loader.init_loaded_packages(),o.fullStdLib&&await u.loadPackage(r.lockfile_unvendored_stdlibs),r.initializeStreams(o.stdin,o.stdout,o.stderr),u}f(T,"loadPyodide");globalThis.loadPyodide=T;return me(Ne);})();
9
+ `).filter(function(i){return!!i.match(c)&&!i.match(/^Error created at/)},this);return u.map(function(i){var s=i.split("@"),l=this.extractLocation(s.pop()),m=s.shift()||"",p=m.replace(/<anonymous function(: (\w+))?>/,"$2").replace(/\([^)]*\)/g,"")||void 0,d;m.match(/\(([^)]*)\)/)&&(d=m.replace(/^[^(]+\(([^)]*)\)$/,"$1"));var y=d===void 0||d==="[arguments not available]"?void 0:d.split(",");return new e({functionName:p,args:y,fileName:l[0],lineNumber:l[1],columnNumber:l[2],source:i})},this)},"ErrorStackParser$$parseOpera11")}},"ErrorStackParser"))});var Re={};pe(Re,{loadPyodide:()=>T,version:()=>b});var G=h(W());var v=typeof process=="object"&&typeof process.versions=="object"&&typeof process.versions.node=="string"&&typeof process.browser>"u",F=v&&typeof module<"u"&&typeof module.exports<"u"&&typeof g<"u"&&typeof __dirname<"u",H=v&&!F,ye=typeof Deno<"u",z=!v&&!ye,q=z&&typeof window<"u"&&typeof document<"u"&&typeof document.createElement<"u"&&typeof sessionStorage<"u",V=z&&typeof importScripts<"u"&&typeof self<"u";var K,k,L,X,D,ge=`"fetch" is not defined, maybe you're using node < 18? From Pyodide >= 0.25.0, node >= 18 is required. Older versions of Node.js may work, but it is not guaranteed or supported. Falling back to "node-fetch".`;async function A(){if(!v||(K=(await import(/* webpackIgnore */"url")).default,D=await import(/* webpackIgnore */"fs/promises"),globalThis.fetch?k=fetch:(console.warn(ge),k=(await import(/* webpackIgnore */"node-fetch")).default),X=(await import(/* webpackIgnore */"vm")).default,L=await import(/* webpackIgnore */"path"),I=L.sep,typeof g<"u"))return;let t=await import(/* webpackIgnore */"fs"),e=await import(/* webpackIgnore */"crypto"),c=await import(/* webpackIgnore */"ws"),o=await import(/* webpackIgnore */"child_process"),a={fs:t,crypto:e,ws:c,child_process:o};globalThis.require=function(r){return a[r]}}f(A,"initNodeModules");function he(t,e){return L.resolve(e||".",t)}f(he,"node_resolvePath");function ve(t,e){return e===void 0&&(e=location),new URL(t,e).toString()}f(ve,"browser_resolvePath");var N;v?N=he:N=ve;var I;v||(I="/");function we(t,e){return t.startsWith("file://")&&(t=t.slice(7)),t.includes("://")?{response:k(t)}:{binary:D.readFile(t).then(c=>new Uint8Array(c.buffer,c.byteOffset,c.byteLength))}}f(we,"node_getBinaryResponse");function be(t,e){let c=new URL(t,location);return{response:fetch(c,e?{integrity:e}:{})}}f(be,"browser_getBinaryResponse");var O;v?O=we:O=be;async function J(t,e){let{response:c,binary:o}=O(t,e);if(o)return o;let a=await c;if(!a.ok)throw new Error(`Failed to load '${t}': request failed.`);return new Uint8Array(await a.arrayBuffer())}f(J,"loadBinaryFile");var S;if(q)S=f(async t=>await import(/* webpackIgnore */t),"loadScript");else if(V)S=f(async t=>{try{globalThis.importScripts(t)}catch(e){if(e instanceof TypeError)await import(/* webpackIgnore */t);else throw e}},"loadScript");else if(v)S=Ee;else throw new Error("Cannot determine runtime environment");async function Ee(t){t.startsWith("file://")&&(t=t.slice(7)),t.includes("://")?X.runInThisContext(await(await k(t)).text()):await import(/* webpackIgnore */K.pathToFileURL(t).href)}f(Ee,"nodeLoadScript");async function Y(t){if(v){await A();let e=await D.readFile(t);return JSON.parse(e)}else return await(await fetch(t)).json()}f(Y,"loadLockFile");async function Q(){if(F)return __dirname;let t;try{throw new Error}catch(o){t=o}let e=G.default.parse(t)[0].fileName;if(H){let o=await import(/* webpackIgnore */"path");return(await import(/* webpackIgnore */"url")).fileURLToPath(o.dirname(e))}let c=e.lastIndexOf(I);if(c===-1)throw new Error("Could not extract indexURL path from pyodide module location");return e.slice(0,c)}f(Q,"calculateDirname");function Z(t){let e=t.FS,c=t.FS.filesystems.MEMFS,o=t.PATH,a={DIR_MODE:16895,FILE_MODE:33279,mount:function(r){if(!r.opts.fileSystemHandle)throw new Error("opts.fileSystemHandle is required");return c.mount.apply(null,arguments)},syncfs:async(r,n,u)=>{try{let i=a.getLocalSet(r),s=await a.getRemoteSet(r),l=n?s:i,m=n?i:s;await a.reconcile(r,l,m),u(null)}catch(i){u(i)}},getLocalSet:r=>{let n=Object.create(null);function u(l){return l!=="."&&l!==".."}f(u,"isRealDir");function i(l){return m=>o.join2(l,m)}f(i,"toAbsolute");let s=e.readdir(r.mountpoint).filter(u).map(i(r.mountpoint));for(;s.length;){let l=s.pop(),m=e.stat(l);e.isDir(m.mode)&&s.push.apply(s,e.readdir(l).filter(u).map(i(l))),n[l]={timestamp:m.mtime,mode:m.mode}}return{type:"local",entries:n}},getRemoteSet:async r=>{let n=Object.create(null),u=await _e(r.opts.fileSystemHandle);for(let[i,s]of u)i!=="."&&(n[o.join2(r.mountpoint,i)]={timestamp:s.kind==="file"?(await s.getFile()).lastModifiedDate:new Date,mode:s.kind==="file"?a.FILE_MODE:a.DIR_MODE});return{type:"remote",entries:n,handles:u}},loadLocalEntry:r=>{let u=e.lookupPath(r).node,i=e.stat(r);if(e.isDir(i.mode))return{timestamp:i.mtime,mode:i.mode};if(e.isFile(i.mode))return u.contents=c.getFileDataAsTypedArray(u),{timestamp:i.mtime,mode:i.mode,contents:u.contents};throw new Error("node type not supported")},storeLocalEntry:(r,n)=>{if(e.isDir(n.mode))e.mkdirTree(r,n.mode);else if(e.isFile(n.mode))e.writeFile(r,n.contents,{canOwn:!0});else throw new Error("node type not supported");e.chmod(r,n.mode),e.utime(r,n.timestamp,n.timestamp)},removeLocalEntry:r=>{var n=e.stat(r);e.isDir(n.mode)?e.rmdir(r):e.isFile(n.mode)&&e.unlink(r)},loadRemoteEntry:async r=>{if(r.kind==="file"){let n=await r.getFile();return{contents:new Uint8Array(await n.arrayBuffer()),mode:a.FILE_MODE,timestamp:n.lastModifiedDate}}else{if(r.kind==="directory")return{mode:a.DIR_MODE,timestamp:new Date};throw new Error("unknown kind: "+r.kind)}},storeRemoteEntry:async(r,n,u)=>{let i=r.get(o.dirname(n)),s=e.isFile(u.mode)?await i.getFileHandle(o.basename(n),{create:!0}):await i.getDirectoryHandle(o.basename(n),{create:!0});if(s.kind==="file"){let l=await s.createWritable();await l.write(u.contents),await l.close()}r.set(n,s)},removeRemoteEntry:async(r,n)=>{await r.get(o.dirname(n)).removeEntry(o.basename(n)),r.delete(n)},reconcile:async(r,n,u)=>{let i=0,s=[];Object.keys(n.entries).forEach(function(p){let d=n.entries[p],y=u.entries[p];(!y||e.isFile(d.mode)&&d.timestamp.getTime()>y.timestamp.getTime())&&(s.push(p),i++)}),s.sort();let l=[];if(Object.keys(u.entries).forEach(function(p){n.entries[p]||(l.push(p),i++)}),l.sort().reverse(),!i)return;let m=n.type==="remote"?n.handles:u.handles;for(let p of s){let d=o.normalize(p.replace(r.mountpoint,"/")).substring(1);if(u.type==="local"){let y=m.get(d),w=await a.loadRemoteEntry(y);a.storeLocalEntry(p,w)}else{let y=a.loadLocalEntry(p);await a.storeRemoteEntry(m,d,y)}}for(let p of l)if(u.type==="local")a.removeLocalEntry(p);else{let d=o.normalize(p.replace(r.mountpoint,"/")).substring(1);await a.removeRemoteEntry(m,d)}}};t.FS.filesystems.NATIVEFS_ASYNC=a}f(Z,"initializeNativeFS");var _e=f(async t=>{let e=[];async function c(a){for await(let r of a.values())e.push(r),r.kind==="directory"&&await c(r)}f(c,"collect"),await c(t);let o=new Map;o.set(".",t);for(let a of e){let r=(await t.resolve(a)).join("/");o.set(r,a)}return o},"getFsHandles");function ee(){let t={};return t.noImageDecoding=!0,t.noAudioDecoding=!0,t.noWasmDecoding=!1,t.preRun=[],t.quit=(e,c)=>{throw t.exited={status:e,toThrow:c},c},t}f(ee,"createModule");function Se(t,e){t.preRun.push(function(){let c="/";try{t.FS.mkdirTree(e)}catch(o){console.error(`Error occurred while making a home directory '${e}':`),console.error(o),console.error(`Using '${c}' for a home directory instead`),e=c}t.FS.chdir(e)})}f(Se,"createHomeDirectory");function Oe(t,e){t.preRun.push(function(){Object.assign(t.ENV,e)})}f(Oe,"setEnvironment");function ke(t,e){t.preRun.push(()=>{for(let c of e)t.FS.mkdirTree(c),t.FS.mount(t.FS.filesystems.NODEFS,{root:c},c)})}f(ke,"mountLocalDirectories");function Ne(t,e){let c=J(e);t.preRun.push(()=>{let o=t._py_version_major(),a=t._py_version_minor();t.FS.mkdirTree("/lib"),t.FS.mkdirTree(`/lib/python${o}.${a}/site-packages`),t.addRunDependency("install-stdlib"),c.then(r=>{t.FS.writeFile(`/lib/python${o}${a}.zip`,r)}).catch(r=>{console.error("Error occurred while installing the standard library:"),console.error(r)}).finally(()=>{t.removeRunDependency("install-stdlib")})})}f(Ne,"installStdlib");function te(t,e){let c;e.stdLibURL!=null?c=e.stdLibURL:c=e.indexURL+"python_stdlib.zip",Ne(t,c),Se(t,e.env.HOME),Oe(t,e.env),ke(t,e._node_mounts),t.preRun.push(()=>Z(t))}f(te,"initializeFileSystem");function re(t,e){let{binary:c,response:o}=O(e+"pyodide.asm.wasm");t.instantiateWasm=function(a,r){return async function(){try{let n;o?n=await WebAssembly.instantiateStreaming(o,a):n=await WebAssembly.instantiate(await c,a);let{instance:u,module:i}=n;typeof WasmOffsetConverter<"u"&&(wasmOffsetConverter=new WasmOffsetConverter(wasmBinary,i)),r(u,i)}catch(n){console.warn("wasm instantiation failed!"),console.warn(n)}}(),{}}}f(re,"preloadWasm");var b="0.25.0";async function T(t={}){await A();let e=t.indexURL||await Q();e=N(e),e.endsWith("/")||(e+="/"),t.indexURL=e;let c={fullStdLib:!1,jsglobals:globalThis,stdin:globalThis.prompt?globalThis.prompt:void 0,lockFileURL:e+"pyodide-lock.json",args:[],_node_mounts:[],env:{},packageCacheDir:e,packages:[]},o=Object.assign(c,t);o.env.HOME||(o.env.HOME="/home/pyodide");let a=ee();a.print=o.stdout,a.printErr=o.stderr,a.arguments=o.args;let r={config:o};a.API=r,r.lockFilePromise=Y(o.lockFileURL),re(a,e),te(a,o);let n=new Promise(s=>a.postRun=s);if(a.locateFile=s=>o.indexURL+s,typeof _createPyodideModule!="function"){let s=`${o.indexURL}pyodide.asm.js`;await S(s)}if(await _createPyodideModule(a),await n,a.exited)throw a.exited.toThrow;if(t.pyproxyToStringRepr&&r.setPyProxyToStringMethod(!0),r.version!==b)throw new Error(`Pyodide version does not match: '${b}' <==> '${r.version}'. If you updated the Pyodide version, make sure you also updated the 'indexURL' parameter passed to loadPyodide.`);a.locateFile=s=>{throw new Error("Didn't expect to load any more file_packager files!")};let u=r.finalizeBootstrap();if(u.version.includes("dev")||r.setCdnUrl(`https://cdn.jsdelivr.net/pyodide/v${u.version}/full/`),await r.packageIndexReady,r._pyodide._importhook.register_module_not_found_hook(r._import_name_to_package_name,r.lockfile_unvendored_stdlibs_and_test),r.lockfile_info.version!==b)throw new Error("Lock file version doesn't match Pyodide version");return r.package_loader.init_loaded_packages(),o.fullStdLib&&await u.loadPackage(r.lockfile_unvendored_stdlibs),r.initializeStreams(o.stdin,o.stdout,o.stderr),u}f(T,"loadPyodide");globalThis.loadPyodide=T;return me(Re);})();
10
10
  try{Object.assign(exports,loadPyodide)}catch(_){}
11
11
  globalThis.loadPyodide=loadPyodide.loadPyodide;
12
12
  //# sourceMappingURL=pyodide.js.map