From 1781b8760f8b1ef48cdb64560901a83b9c98d93b Mon Sep 17 00:00:00 2001 From: Hood Chatham Date: Fri, 9 Apr 2021 14:30:40 -0400 Subject: [PATCH] DOCS Edits to Javascript API docs (#1427) --- docs/_static/css/pyodide.css | 4 + docs/project/about.md | 7 +- docs/sphinx_pyodide/sphinx_pyodide/jsdoc.py | 46 ++++++- docs/sphinx_pyodide/tests/jsdoc_dump.json | 2 +- docs/sphinx_pyodide/tests/test_directives.py | 6 + docs/usage/api/python-api.md | 2 +- src/core/pyproxy.js | 79 +++++++----- src/pyodide-py/_pyodide/_core.py | 6 +- src/pyodide.js | 128 +++++++++++-------- 9 files changed, 181 insertions(+), 99 deletions(-) diff --git a/docs/_static/css/pyodide.css b/docs/_static/css/pyodide.css index 98938c564..cbc99c0fd 100644 --- a/docs/_static/css/pyodide.css +++ b/docs/_static/css/pyodide.css @@ -2,3 +2,7 @@ margin-right: 5px; opacity: 0.7; } + +code { + font-size: 100% !important; +} diff --git a/docs/project/about.md b/docs/project/about.md index 01d3599b6..873047d08 100644 --- a/docs/project/about.md +++ b/docs/project/about.md @@ -7,9 +7,10 @@ browser. Pyodide brings the Python 3.8 runtime to the browser via WebAssembly, along with the Python scientific stack including NumPy, Pandas, Matplotlib, SciPy, and -scikit-learn. The [packages directory](packages) lists over 75 packages which -are currently available. In addition it's possible to install pure Python wheels -from PyPi. +scikit-learn. The [packages +directory](https://github.com/pyodide/pyodide/tree/master/packages) lists over +75 packages which are currently available. In addition it's possible to install +pure Python wheels from PyPi. Pyodide provides transparent conversion of objects between Javascript and Python. When used inside a browser, Python has full access to the Web APIs. diff --git a/docs/sphinx_pyodide/sphinx_pyodide/jsdoc.py b/docs/sphinx_pyodide/sphinx_pyodide/jsdoc.py index d8b8501cc..3418b3fcc 100644 --- a/docs/sphinx_pyodide/sphinx_pyodide/jsdoc.py +++ b/docs/sphinx_pyodide/sphinx_pyodide/jsdoc.py @@ -1,5 +1,5 @@ from docutils import nodes -from docutils.parsers.rst import Directive, Parser as RstParser +from docutils.parsers.rst import Directive, Parser as RstParser, directives from docutils.statemachine import StringList from docutils.utils import new_document @@ -10,6 +10,7 @@ from sphinx import addnodes from sphinx.util import rst from sphinx.util.docutils import switch_source_input from sphinx.ext.autosummary import autosummary_table, extract_summary +from sphinx.domains.javascript import JSCallable, JavaScriptDomain from sphinx_js.jsdoc import Analyzer as JsAnalyzer from sphinx_js.ir import Class, Function @@ -21,6 +22,21 @@ from sphinx_js.renderers import ( ) +class JSFuncMaybeAsync(JSCallable): + option_spec = { + **JSCallable.option_spec, + "async": directives.flag, + } + + def handle_signature(self, sig, signode): + if "async" in self.options: + self.display_prefix = "async" + return super().handle_signature(sig, signode) + + +JavaScriptDomain.directives["function"] = JSFuncMaybeAsync + + class PyodideAnalyzer: """JsDoc automatically instantiates the JsAnalyzer. Rather than subclassing or monkey patching it, we use composition (see getattr impl). @@ -85,11 +101,14 @@ class PyodideAnalyzer: if key[0] == "pyproxy.": items["PyProxy"] += group + from operator import itemgetter + for key, value in items.items(): - for json in value: + for json in sorted(value, key=itemgetter("name")): if json.get("access", None) == "private": continue obj = self.get_object_from_json(json) + obj.async_ = json.get("async", False) if isinstance(obj, Class): # sphinx-jsdoc messes up array types. Fix them. for x in obj.members: @@ -121,9 +140,20 @@ def get_jsdoc_content_directive(app): renderer = AutoClassRenderer else: renderer = AutoAttributeRenderer - return renderer( + rst = renderer( self, app, arguments=["dummy"], options={"members": ["*"]} ).rst([obj.name], obj, use_short_name=False) + if obj.async_: + rst = self.add_async_option_to_rst(rst) + return rst + + def add_async_option_to_rst(self, rst): + rst_lines = rst.split("\n") + for i, line in enumerate(rst_lines): + if line.startswith(".."): + break + rst_lines.insert(i + 1, " :async:") + return "\n".join(rst_lines) def get_rst_for_group(self, objects): return [self.get_rst(obj) for obj in objects] @@ -215,9 +245,10 @@ def get_jsdoc_summary_directive(app): """ sig = self.get_sig(obj) display_name = obj.name + prefix = "*async* " if obj.async_ else "" summary = self.extract_summary(obj.description) link_name = pkgname + "." + display_name - return (display_name, sig, summary, link_name) + return (prefix, display_name, sig, summary, link_name) def get_summary_table(self, pkgname, group): """Get the data for a summary table. Return value is set up to be an @@ -266,17 +297,18 @@ def get_jsdoc_summary_directive(app): row.append(nodes.entry("", node)) body.append(row) - for name, sig, summary, real_name in items: + for prefix, name, sig, summary, real_name in items: qualifier = "any" # <== Only thing changed from autosummary version if "nosignatures" not in self.options: - col1 = ":%s:`%s <%s>`\\ %s" % ( + col1 = "%s:%s:`%s <%s>`\\ %s" % ( + prefix, qualifier, name, real_name, rst.escape(sig), ) else: - col1 = ":%s:`%s <%s>`" % (qualifier, name, real_name) + col1 = "%s:%s:`%s <%s>`" % (prefix, qualifier, name, real_name) col2 = summary append_row(col1, col2) diff --git a/docs/sphinx_pyodide/tests/jsdoc_dump.json b/docs/sphinx_pyodide/tests/jsdoc_dump.json index c4bc108df..8bf07734c 100644 --- a/docs/sphinx_pyodide/tests/jsdoc_dump.json +++ b/docs/sphinx_pyodide/tests/jsdoc_dump.json @@ -1 +1 @@ -[{"comment": "/**\n * A promise that resolves to ``undefined`` when Pyodide is finished loading.\n *\n * @type Promise\n */", "meta": {"range": [165, 26495], "filename": "pyodide.js", "lineno": 10, "columnno": 0, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100000003", "name": "globalThis.languagePluginLoader", "type": "CallExpression", "value": "", "paramnames": []}}, "description": "A promise that resolves to ``undefined`` when Pyodide is finished loading.", "type": {"names": ["Promise"]}, "name": "languagePluginLoader", "longname": "globalThis.languagePluginLoader", "kind": "member", "memberof": "globalThis", "scope": "static"}, {"comment": "", "meta": {"range": [220, 231], "filename": "pyodide.js", "lineno": 11, "columnno": 6, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100000011", "name": "Module", "type": "ObjectExpression", "value": "{}"}}, "undocumented": true, "name": "Module", "longname": "~Module", "kind": "member", "memberof": "", "scope": "inner", "params": []}, {"comment": "", "meta": {"range": [413, 473], "filename": "pyodide.js", "lineno": 15, "columnno": 6, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100000015", "name": "baseURL", "type": "LogicalExpression", "value": ""}}, "undocumented": true, "name": "baseURL", "longname": "~baseURL", "kind": "member", "memberof": "", "scope": "inner", "params": []}, {"comment": "", "meta": {"range": [477, 536], "filename": "pyodide.js", "lineno": 16, "columnno": 2, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100000023", "name": "baseURL", "type": "BinaryExpression", "funcscope": "", "value": "", "paramnames": []}}, "undocumented": true, "name": "baseURL", "longname": "~baseURL", "kind": "member", "memberof": "", "scope": "inner"}, {"comment": "", "meta": {"range": [631, 666], "filename": "pyodide.js", "lineno": 20, "columnno": 8, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100000038", "name": "DEFAULT_CHANNEL", "type": "Literal", "value": "default channel"}}, "undocumented": true, "name": "DEFAULT_CHANNEL", "longname": "~DEFAULT_CHANNEL", "kind": "constant", "memberof": "", "scope": "inner", "params": []}, {"comment": "", "meta": {"range": [725, 811], "filename": "pyodide.js", "lineno": 23, "columnno": 8, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100000042", "name": "package_uri_regexp", "type": "NewExpression", "value": ""}}, "undocumented": true, "name": "package_uri_regexp", "longname": "~package_uri_regexp", "kind": "constant", "memberof": "", "scope": "inner", "params": []}, {"comment": "", "meta": {"range": [820, 1094], "filename": "pyodide.js", "lineno": 26, "columnno": 6, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100000049", "name": "_uri_to_package_name", "type": "ArrowFunctionExpression"}, "vars": {"match": "~_uri_to_package_name~match"}}, "undocumented": true, "name": "_uri_to_package_name", "longname": "~_uri_to_package_name", "kind": "function", "memberof": "", "scope": "inner", "params": []}, {"comment": "", "meta": {"range": [920, 964], "filename": "pyodide.js", "lineno": 28, "columnno": 10, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100000062", "name": "match", "type": "CallExpression", "value": ""}}, "undocumented": true, "name": "match", "longname": "~_uri_to_package_name~match", "kind": "member", "memberof": "~_uri_to_package_name", "scope": "inner", "params": []}, {"comment": "", "meta": {"range": [1103, 1113], "filename": "pyodide.js", "lineno": 36, "columnno": 6, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100000077", "name": "loadScript"}}, "undocumented": true, "name": "loadScript", "longname": "~loadScript", "kind": "member", "memberof": "", "scope": "inner", "params": []}, {"comment": "", "meta": {"range": [1153, 1394], "filename": "pyodide.js", "lineno": 38, "columnno": 4, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100000085", "name": "loadScript", "type": "ArrowFunctionExpression", "funcscope": "", "paramnames": ["url"]}, "vars": {"": null}}, "undocumented": true, "name": "loadScript", "longname": "~loadScript", "kind": "function", "memberof": "", "scope": "inner"}, {"comment": "", "meta": {"range": [1215, 1261], "filename": "pyodide.js", "lineno": 39, "columnno": 12, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100000096", "name": "script", "type": "CallExpression", "value": ""}}, "undocumented": true, "name": "script", "longname": "~script", "kind": "constant", "memberof": "", "scope": "inner", "params": []}, {"comment": "", "meta": {"range": [1269, 1285], "filename": "pyodide.js", "lineno": 40, "columnno": 6, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100000106", "name": "script.src", "type": "Identifier", "funcscope": "", "value": "url", "paramnames": []}}, "undocumented": true, "name": "src", "longname": "~script.src", "kind": "member", "memberof": "~script", "scope": "static"}, {"comment": "", "meta": {"range": [1293, 1312], "filename": "pyodide.js", "lineno": 41, "columnno": 6, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100000112", "name": "script.onload", "type": "Identifier", "funcscope": "", "value": "res", "paramnames": []}}, "undocumented": true, "name": "onload", "longname": "~script.onload", "kind": "member", "memberof": "~script", "scope": "static"}, {"comment": "", "meta": {"range": [1320, 1340], "filename": "pyodide.js", "lineno": 42, "columnno": 6, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100000118", "name": "script.onerror", "type": "Identifier", "funcscope": "", "value": "rej", "paramnames": []}}, "undocumented": true, "name": "onerror", "longname": "~script.onerror", "kind": "member", "memberof": "~script", "scope": "static"}, {"comment": "", "meta": {"range": [1448, 1553], "filename": "pyodide.js", "lineno": 46, "columnno": 4, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100000139", "name": "loadScript", "type": "ArrowFunctionExpression", "funcscope": "", "paramnames": ["url"]}}, "undocumented": true, "name": "loadScript", "longname": "~loadScript", "kind": "function", "memberof": "", "scope": "inner"}, {"comment": "", "meta": {"range": [1633, 3256], "filename": "pyodide.js", "lineno": 53, "columnno": 2, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100000155", "name": "recursiveDependencies", "type": "FunctionDeclaration", "paramnames": ["names", "_messageCallback", "errorCallback", "sharedLibsOnly"]}, "vars": {"packages": "~recursiveDependencies~packages", "loadedPackages": "~recursiveDependencies~loadedPackages", "sharedLibraries": "~recursiveDependencies~sharedLibraries", "toLoad": "~recursiveDependencies~toLoad", "addPackage": "~recursiveDependencies~addPackage", "": null, "name": "~recursiveDependencies~name", "pkgname": "~recursiveDependencies~pkgname", "onlySharedLibs": "~recursiveDependencies~onlySharedLibs", "c": "~recursiveDependencies~c"}}, "undocumented": true, "name": "recursiveDependencies", "longname": "~recursiveDependencies", "kind": "function", "memberof": "", "scope": "inner", "params": []}, {"comment": "", "meta": {"range": [1765, 1818], "filename": "pyodide.js", "lineno": 55, "columnno": 10, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100000163", "name": "packages", "type": "MemberExpression", "value": "self.pyodide._module.packages.dependencies"}}, "undocumented": true, "name": "packages", "longname": "~recursiveDependencies~packages", "kind": "constant", "memberof": "~recursiveDependencies", "scope": "inner", "params": []}, {"comment": "", "meta": {"range": [1830, 1874], "filename": "pyodide.js", "lineno": 56, "columnno": 10, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100000175", "name": "loadedPackages", "type": "MemberExpression", "value": "self.pyodide.loadedPackages"}}, "undocumented": true, "name": "loadedPackages", "longname": "~recursiveDependencies~loadedPackages", "kind": "constant", "memberof": "~recursiveDependencies", "scope": "inner", "params": []}, {"comment": "", "meta": {"range": [1886, 1948], "filename": "pyodide.js", "lineno": 57, "columnno": 10, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100000183", "name": "sharedLibraries", "type": "MemberExpression", "value": "self.pyodide._module.packages.shared_library"}}, "undocumented": true, "name": "sharedLibraries", "longname": "~recursiveDependencies~sharedLibraries", "kind": "constant", "memberof": "~recursiveDependencies", "scope": "inner", "params": []}, {"comment": "", "meta": {"range": [1960, 1978], "filename": "pyodide.js", "lineno": 58, "columnno": 10, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100000195", "name": "toLoad", "type": "NewExpression", "value": ""}}, "undocumented": true, "name": "toLoad", "longname": "~recursiveDependencies~toLoad", "kind": "constant", "memberof": "~recursiveDependencies", "scope": "inner", "params": []}, {"comment": "", "meta": {"range": [1991, 2486], "filename": "pyodide.js", "lineno": 60, "columnno": 10, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100000200", "name": "addPackage", "type": "ArrowFunctionExpression"}, "vars": {"dep": "~recursiveDependencies~addPackage~dep"}}, "undocumented": true, "name": "addPackage", "longname": "~recursiveDependencies~addPackage", "kind": "function", "memberof": "~recursiveDependencies", "scope": "inner", "params": []}, {"comment": "", "meta": {"range": [2424, 2427], "filename": "pyodide.js", "lineno": 71, "columnno": 15, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100000230", "name": "dep"}}, "undocumented": true, "name": "dep", "longname": "~recursiveDependencies~addPackage~dep", "kind": "member", "memberof": "~recursiveDependencies~addPackage", "scope": "inner", "params": []}, {"comment": "", "meta": {"range": [2501, 2505], "filename": "pyodide.js", "lineno": 75, "columnno": 13, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100000242", "name": "name"}}, "undocumented": true, "name": "name", "longname": "~recursiveDependencies~name", "kind": "member", "memberof": "~recursiveDependencies", "scope": "inner", "params": []}, {"comment": "", "meta": {"range": [2530, 2566], "filename": "pyodide.js", "lineno": 76, "columnno": 12, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100000247", "name": "pkgname", "type": "CallExpression", "value": ""}}, "undocumented": true, "name": "pkgname", "longname": "~recursiveDependencies~pkgname", "kind": "constant", "memberof": "~recursiveDependencies", "scope": "inner", "params": []}, {"comment": "", "meta": {"range": [3030, 3056], "filename": "pyodide.js", "lineno": 91, "columnno": 6, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100000316", "name": "onlySharedLibs", "type": "NewExpression", "funcscope": "~recursiveDependencies", "value": "", "paramnames": []}}, "undocumented": true, "name": "onlySharedLibs", "longname": "~recursiveDependencies~onlySharedLibs", "kind": "member", "memberof": "~recursiveDependencies", "scope": "inner"}, {"comment": "", "meta": {"range": [3073, 3074], "filename": "pyodide.js", "lineno": 92, "columnno": 15, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100000322", "name": "c"}}, "undocumented": true, "name": "c", "longname": "~recursiveDependencies~c", "kind": "member", "memberof": "~recursiveDependencies", "scope": "inner", "params": []}, {"comment": "", "meta": {"range": [3260, 8257], "filename": "pyodide.js", "lineno": 102, "columnno": 2, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100000352", "name": "_loadPackage", "type": "FunctionDeclaration", "paramnames": ["names", "messageCallback", "errorCallback"]}, "vars": {"toLoad": "~_loadPackage~toLoad", "Module.locateFile": "~Module.locateFile", "": null, "windowErrorHandler": "~_loadPackage~windowErrorHandler", "windowErrorPromise": "~_loadPackage~windowErrorPromise", "scriptPromises": "~_loadPackage~scriptPromises", "undefined": null, "loaded": "~_loadPackage~loaded", "scriptSrc": "~_loadPackage~scriptSrc", "waitRunDependency": "~_loadPackage~waitRunDependency", "successPromise": "~_loadPackage~successPromise", "packageList": "~_loadPackage~packageList", "self.pyodide.loadedPackages[undefined]": "self.pyodide.loadedPackages[undefined]", "resolveMsg": "~_loadPackage~resolveMsg", "package_names": "~_loadPackage~package_names"}}, "undocumented": true, "name": "_loadPackage", "longname": "~_loadPackage", "kind": "function", "memberof": "", "scope": "inner", "params": [], "async": true}, {"comment": "", "meta": {"range": [3380, 3449], "filename": "pyodide.js", "lineno": 104, "columnno": 8, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100000359", "name": "toLoad", "type": "CallExpression", "value": ""}}, "undocumented": true, "name": "toLoad", "longname": "~_loadPackage~toLoad", "kind": "member", "memberof": "~_loadPackage", "scope": "inner", "params": []}, {"comment": "", "meta": {"range": [3562, 3916], "filename": "pyodide.js", "lineno": 108, "columnno": 4, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100000367", "name": "Module.locateFile", "type": "ArrowFunctionExpression", "paramnames": ["path"]}, "vars": {"pkg": "~Module.locateFile~pkg", "package_uri": "~Module.locateFile~package_uri"}}, "undocumented": true, "name": "locateFile", "longname": "~Module.locateFile", "kind": "function", "memberof": "~Module", "scope": "static"}, {"comment": "", "meta": {"range": [3653, 3686], "filename": "pyodide.js", "lineno": 110, "columnno": 10, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100000375", "name": "pkg", "type": "CallExpression", "value": ""}}, "undocumented": true, "name": "pkg", "longname": "~Module.locateFile~pkg", "kind": "member", "memberof": "~Module.locateFile", "scope": "inner", "params": []}, {"comment": "", "meta": {"range": [3729, 3758], "filename": "pyodide.js", "lineno": 112, "columnno": 12, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100000391", "name": "package_uri", "type": "CallExpression", "value": ""}}, "undocumented": true, "name": "package_uri", "longname": "~Module.locateFile~package_uri", "kind": "member", "memberof": "~Module.locateFile", "scope": "inner", "params": []}, {"comment": "", "meta": {"range": [4557, 4575], "filename": "pyodide.js", "lineno": 134, "columnno": 8, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100000447", "name": "windowErrorHandler"}}, "undocumented": true, "name": "windowErrorHandler", "longname": "~_loadPackage~windowErrorHandler", "kind": "member", "memberof": "~_loadPackage", "scope": "inner", "params": []}, {"comment": "", "meta": {"range": [4585, 4603], "filename": "pyodide.js", "lineno": 135, "columnno": 8, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100000450", "name": "windowErrorPromise"}}, "undocumented": true, "name": "windowErrorPromise", "longname": "~_loadPackage~windowErrorPromise", "kind": "member", "memberof": "~_loadPackage", "scope": "inner", "params": []}, {"comment": "", "meta": {"range": [4636, 5053], "filename": "pyodide.js", "lineno": 137, "columnno": 6, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100000458", "name": "windowErrorPromise", "type": "NewExpression", "funcscope": "~_loadPackage", "value": "", "paramnames": []}}, "undocumented": true, "name": "windowErrorPromise", "longname": "~_loadPackage~windowErrorPromise", "kind": "member", "memberof": "~_loadPackage", "scope": "inner"}, {"comment": "", "meta": {"range": [4694, 4983], "filename": "pyodide.js", "lineno": 138, "columnno": 8, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100000467", "name": "windowErrorHandler", "type": "ArrowFunctionExpression", "funcscope": "", "paramnames": ["e"]}}, "undocumented": true, "name": "windowErrorHandler", "longname": "~windowErrorHandler", "kind": "function", "memberof": "", "scope": "inner"}, {"comment": "", "meta": {"range": [5128, 5170], "filename": "pyodide.js", "lineno": 148, "columnno": 6, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100000495", "name": "windowErrorPromise", "type": "NewExpression", "funcscope": "~_loadPackage", "value": "", "paramnames": []}}, "undocumented": true, "name": "windowErrorPromise", "longname": "~_loadPackage~windowErrorPromise", "kind": "member", "memberof": "~_loadPackage", "scope": "inner"}, {"comment": "", "meta": {"range": [5335, 5354], "filename": "pyodide.js", "lineno": 153, "columnno": 8, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100000502", "name": "scriptPromises", "type": "ArrayExpression", "value": "[]"}}, "undocumented": true, "name": "scriptPromises", "longname": "~_loadPackage~scriptPromises", "kind": "member", "memberof": "~_loadPackage", "scope": "inner", "params": []}, {"comment": "", "meta": {"range": [5404, 5445], "filename": "pyodide.js", "lineno": 156, "columnno": 10, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100000512", "name": "loaded", "type": "MemberExpression", "value": "self.pyodide.loadedPackages[undefined]"}}, "undocumented": true, "name": "loaded", "longname": "~_loadPackage~loaded", "kind": "member", "memberof": "~_loadPackage", "scope": "inner", "params": []}, {"comment": "", "meta": {"range": [6038, 6103], "filename": "pyodide.js", "lineno": 170, "columnno": 10, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100000559", "name": "scriptSrc", "type": "ConditionalExpression", "value": ""}}, "undocumented": true, "name": "scriptSrc", "longname": "~_loadPackage~scriptSrc", "kind": "member", "memberof": "~_loadPackage", "scope": "inner", "params": []}, {"comment": "", "meta": {"range": [6611, 7106], "filename": "pyodide.js", "lineno": 182, "columnno": 4, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100000607", "name": "waitRunDependency", "type": "FunctionDeclaration", "paramnames": []}, "vars": {"promise": "~_loadPackage~waitRunDependency~promise", "": null}}, "undocumented": true, "name": "waitRunDependency", "longname": "~_loadPackage~waitRunDependency", "kind": "function", "memberof": "~_loadPackage", "scope": "inner", "params": []}, {"comment": "", "meta": {"range": [6654, 6805], "filename": "pyodide.js", "lineno": 183, "columnno": 12, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100000611", "name": "promise", "type": "NewExpression", "value": ""}}, "undocumented": true, "name": "promise", "longname": "~_loadPackage~waitRunDependency~promise", "kind": "constant", "memberof": "~_loadPackage~waitRunDependency", "scope": "inner", "params": []}, {"comment": "", "meta": {"range": [6691, 6795], "filename": "pyodide.js", "lineno": 184, "columnno": 8, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100000619", "name": "Module.monitorRunDependencies", "type": "ArrowFunctionExpression", "paramnames": ["n"]}}, "undocumented": true, "name": "monitorRunDependencies", "longname": "~Module.monitorRunDependencies", "kind": "function", "memberof": "~Module", "scope": "static"}, {"comment": "", "meta": {"range": [7308, 7376], "filename": "pyodide.js", "lineno": 201, "columnno": 8, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100000649", "name": "successPromise", "type": "CallExpression", "value": ""}}, "undocumented": true, "name": "successPromise", "longname": "~_loadPackage~successPromise", "kind": "member", "memberof": "~_loadPackage", "scope": "inner", "params": []}, {"comment": "", "meta": {"range": [7632, 7648], "filename": "pyodide.js", "lineno": 211, "columnno": 8, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100000688", "name": "packageList", "type": "ArrayExpression", "value": "[]"}}, "undocumented": true, "name": "packageList", "longname": "~_loadPackage~packageList", "kind": "member", "memberof": "~_loadPackage", "scope": "inner", "params": []}, {"comment": "", "meta": {"range": [7693, 7731], "filename": "pyodide.js", "lineno": 213, "columnno": 6, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100000698", "name": "self.pyodide.loadedPackages[undefined]", "type": "Identifier", "value": "uri", "paramnames": []}}, "undocumented": true, "name": "loadedPackages[undefined]", "longname": "self.pyodide.loadedPackages[undefined]", "kind": "member", "memberof": "self.pyodide", "scope": "static"}, {"comment": "", "meta": {"range": [7777, 7787], "filename": "pyodide.js", "lineno": 217, "columnno": 8, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100000714", "name": "resolveMsg"}}, "undocumented": true, "name": "resolveMsg", "longname": "~_loadPackage~resolveMsg", "kind": "member", "memberof": "~_loadPackage", "scope": "inner", "params": []}, {"comment": "", "meta": {"range": [7833, 7871], "filename": "pyodide.js", "lineno": 219, "columnno": 10, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100000724", "name": "package_names", "type": "CallExpression", "value": ""}}, "undocumented": true, "name": "package_names", "longname": "~_loadPackage~package_names", "kind": "member", "memberof": "~_loadPackage", "scope": "inner", "params": []}, {"comment": "", "meta": {"range": [7879, 7915], "filename": "pyodide.js", "lineno": 220, "columnno": 6, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100000732", "name": "resolveMsg", "type": "TemplateLiteral", "funcscope": "~_loadPackage", "value": "", "paramnames": []}}, "undocumented": true, "name": "resolveMsg", "longname": "~_loadPackage~resolveMsg", "kind": "member", "memberof": "~_loadPackage", "scope": "inner"}, {"comment": "", "meta": {"range": [7936, 7969], "filename": "pyodide.js", "lineno": 222, "columnno": 6, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100000740", "name": "resolveMsg", "type": "Literal", "funcscope": "~_loadPackage", "value": "No packages loaded", "paramnames": []}}, "undocumented": true, "name": "resolveMsg", "longname": "~_loadPackage~resolveMsg", "kind": "member", "memberof": "~_loadPackage", "scope": "inner"}, {"comment": "", "meta": {"range": [8367, 8403], "filename": "pyodide.js", "lineno": 237, "columnno": 6, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100000762", "name": "loadPackageChain", "type": "CallExpression", "value": ""}}, "undocumented": true, "name": "loadPackageChain", "longname": "~loadPackageChain", "kind": "member", "memberof": "", "scope": "inner", "params": []}, {"comment": "/**\n *\n * The list of packages that Pyodide has loaded.\n * Use ``Object.keys(pyodide.loadedPackages)`` to get the list of names of\n * loaded packages, and ``pyodide.loadedPackages[package_name]`` to access\n * install location for a particular ``package_name``.\n *\n * @type {object}\n */", "meta": {"range": [8712, 8738], "filename": "pyodide.js", "lineno": 248, "columnno": 2, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100000769", "name": "Module.loadedPackages", "type": "ObjectExpression", "funcscope": "", "value": "{}", "paramnames": []}}, "description": "The list of packages that Pyodide has loaded.\nUse ``Object.keys(pyodide.loadedPackages)`` to get the list of names of\nloaded packages, and ``pyodide.loadedPackages[package_name]`` to access\ninstall location for a particular ``package_name``.", "type": {"names": ["object"]}, "name": "loadedPackages", "longname": "~Module.loadedPackages", "kind": "member", "memberof": "~Module", "scope": "static"}, {"comment": "/**\n * Load a package or a list of packages over the network.\n * This makes the files for the package available in the virtual filesystem.\n * The package needs to be imported from Python before it can be used.\n * @param {String | Array} names package name, or URL. Can be either a single\n * element, or an array\n * @param {function} messageCallback A callback, called with progress messages\n * (optional)\n * @param {function} errorCallback A callback, called with error/warning\n * messages (optional)\n * @returns {Promise} Resolves to ``undefined`` when loading is complete\n */", "meta": {"range": [9345, 11911], "filename": "pyodide.js", "lineno": 262, "columnno": 2, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100000775", "name": "Module.loadPackage", "type": "FunctionExpression", "funcscope": "", "paramnames": ["names", "messageCallback", "errorCallback"]}, "vars": {"names": "~Module.loadPackage~names", "sharedLibraryNames": "~Module.loadPackage~sharedLibraryNames", "sharedLibraryPackagesToLoad": "~Module.loadPackage~sharedLibraryPackagesToLoad", "oldPlugin": "~Module.loadPackage~oldPlugin", "p": "~Module.loadPackage~p", "dynamicLoadHandler": "~Module.loadPackage~dynamicLoadHandler", "": null, "loadPluginOverride": "~Module.loadPackage~loadPluginOverride", "promise": "~Module.loadPackage~promise", "loadPackageChain": "~Module.loadPackage~loadPackageChain"}}, "description": "Load a package or a list of packages over the network.\nThis makes the files for the package available in the virtual filesystem.\nThe package needs to be imported from Python before it can be used.", "params": [{"type": {"names": ["String", "Array"]}, "description": "package name, or URL. Can be either a single\nelement, or an array", "name": "names"}, {"type": {"names": ["function"]}, "description": "A callback, called with progress messages\n(optional)", "name": "messageCallback"}, {"type": {"names": ["function"]}, "description": "A callback, called with error/warning\nmessages (optional)", "name": "errorCallback"}], "returns": [{"type": {"names": ["Promise"]}, "description": "Resolves to ``undefined`` when loading is complete"}], "name": "loadPackage", "longname": "~Module.loadPackage", "kind": "function", "memberof": "~Module", "scope": "static"}, {"comment": "", "meta": {"range": [9467, 9484], "filename": "pyodide.js", "lineno": 265, "columnno": 6, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100000793", "name": "names", "type": "ArrayExpression", "funcscope": "~Module.loadPackage", "value": "[\"names\"]", "paramnames": []}}, "undocumented": true, "name": "names", "longname": "~Module.loadPackage~names", "kind": "member", "memberof": "~Module.loadPackage", "scope": "inner"}, {"comment": "", "meta": {"range": [9617, 9640], "filename": "pyodide.js", "lineno": 269, "columnno": 4, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100000798", "name": "sharedLibraryNames", "type": "ArrayExpression", "funcscope": "~Module.loadPackage", "value": "[]", "paramnames": []}}, "undocumented": true, "name": "sharedLibraryNames", "longname": "~Module.loadPackage~sharedLibraryNames", "kind": "member", "memberof": "~Module.loadPackage", "scope": "inner"}, {"comment": "", "meta": {"range": [9658, 9764], "filename": "pyodide.js", "lineno": 271, "columnno": 6, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100000804", "name": "sharedLibraryPackagesToLoad", "type": "CallExpression", "funcscope": "~Module.loadPackage", "value": "", "paramnames": []}}, "undocumented": true, "name": "sharedLibraryPackagesToLoad", "longname": "~Module.loadPackage~sharedLibraryPackagesToLoad", "kind": "member", "memberof": "~Module.loadPackage", "scope": "inner"}, {"comment": "", "meta": {"range": [10448, 10457], "filename": "pyodide.js", "lineno": 287, "columnno": 8, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100000826", "name": "oldPlugin"}}, "undocumented": true, "name": "oldPlugin", "longname": "~Module.loadPackage~oldPlugin", "kind": "member", "memberof": "~Module.loadPackage", "scope": "inner", "params": []}, {"comment": "", "meta": {"range": [10472, 10473], "filename": "pyodide.js", "lineno": 288, "columnno": 13, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100000830", "name": "p"}}, "undocumented": true, "name": "p", "longname": "~Module.loadPackage~p", "kind": "member", "memberof": "~Module.loadPackage", "scope": "inner", "params": []}, {"comment": "", "meta": {"range": [10569, 10605], "filename": "pyodide.js", "lineno": 290, "columnno": 8, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100000848", "name": "oldPlugin", "type": "MemberExpression", "funcscope": "~Module.loadPackage", "value": "Module.preloadPlugins[undefined]", "paramnames": []}}, "undocumented": true, "name": "oldPlugin", "longname": "~Module.loadPackage~oldPlugin", "kind": "member", "memberof": "~Module.loadPackage", "scope": "inner"}, {"comment": "", "meta": {"range": [10644, 11154], "filename": "pyodide.js", "lineno": 294, "columnno": 8, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100000857", "name": "dynamicLoadHandler", "type": "ObjectExpression", "value": "{\"get\":\"\"}"}}, "undocumented": true, "name": "dynamicLoadHandler", "longname": "~Module.loadPackage~dynamicLoadHandler", "kind": "member", "memberof": "~Module.loadPackage", "scope": "inner", "params": []}, {"comment": "", "meta": {"range": [10673, 11148], "filename": "pyodide.js", "lineno": 295, "columnno": 6, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100000860", "name": "get", "type": "FunctionExpression"}, "vars": {"": null}}, "undocumented": true, "name": "get", "longname": "~Module.loadPackage~dynamicLoadHandler.get", "kind": "function", "memberof": "~Module.loadPackage~dynamicLoadHandler", "scope": "static"}, {"comment": "", "meta": {"range": [10832, 11072], "filename": "pyodide.js", "lineno": 299, "columnno": 12, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100000885", "name": "this[\"asyncWasmLoadPromise\"]", "type": "CallExpression", "value": "", "paramnames": []}}, "undocumented": true, "name": "\"asyncWasmLoadPromise\"", "longname": "~Module.loadPackage~dynamicLoadHandler.get#\"asyncWasmLoadPromise\"", "kind": "member", "memberof": "~Module.loadPackage~dynamicLoadHandler.get", "scope": "instance"}, {"comment": "", "meta": {"range": [11021, 11034], "filename": "pyodide.js", "lineno": 302, "columnno": 45, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100000904", "name": "global", "type": "Literal", "value": true}}, "undocumented": true, "name": "global", "longname": "global", "kind": "member", "scope": "global"}, {"comment": "", "meta": {"range": [11036, 11051], "filename": "pyodide.js", "lineno": 302, "columnno": 60, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100000906", "name": "nodelete", "type": "Literal", "value": true}}, "undocumented": true, "name": "nodelete", "longname": "nodelete", "kind": "member", "scope": "global"}, {"comment": "", "meta": {"range": [11164, 11225], "filename": "pyodide.js", "lineno": 310, "columnno": 8, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100000914", "name": "loadPluginOverride", "type": "NewExpression", "value": ""}}, "undocumented": true, "name": "loadPluginOverride", "longname": "~Module.loadPackage~loadPluginOverride", "kind": "member", "memberof": "~Module.loadPackage", "scope": "inner", "params": []}, {"comment": "", "meta": {"range": [11325, 11496], "filename": "pyodide.js", "lineno": 314, "columnno": 8, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100000929", "name": "promise", "type": "CallExpression", "value": ""}}, "undocumented": true, "name": "promise", "longname": "~Module.loadPackage~promise", "kind": "member", "memberof": "~Module.loadPackage", "scope": "inner", "params": []}, {"comment": "", "meta": {"range": [11502, 11573], "filename": "pyodide.js", "lineno": 317, "columnno": 4, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100000950", "name": "loadPackageChain", "type": "CallExpression", "funcscope": "~Module.loadPackage", "value": "", "paramnames": []}}, "undocumented": true, "name": "loadPackageChain", "longname": "~Module.loadPackage~loadPackageChain", "kind": "member", "memberof": "~Module.loadPackage", "scope": "inner"}, {"comment": "", "meta": {"range": [11652, 11810], "filename": "pyodide.js", "lineno": 321, "columnno": 4, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100000975", "name": "promise", "type": "CallExpression", "funcscope": "~Module.loadPackage", "value": "", "paramnames": []}}, "undocumented": true, "name": "promise", "longname": "~Module.loadPackage~promise", "kind": "member", "memberof": "~Module.loadPackage", "scope": "inner"}, {"comment": "", "meta": {"range": [11816, 11887], "filename": "pyodide.js", "lineno": 324, "columnno": 4, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100000996", "name": "loadPackageChain", "type": "CallExpression", "funcscope": "~Module.loadPackage", "value": "", "paramnames": []}}, "undocumented": true, "name": "loadPackageChain", "longname": "~Module.loadPackage~loadPackageChain", "kind": "member", "memberof": "~Module.loadPackage", "scope": "inner"}, {"comment": "", "meta": {"range": [12010, 12765], "filename": "pyodide.js", "lineno": 330, "columnno": 2, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100001012", "name": "fixRecursionLimit", "type": "FunctionDeclaration", "paramnames": ["pyodide"]}, "vars": {"depth": "~fixRecursionLimit~depth", "recurse": "~fixRecursionLimit~recurse", "recursionLimit": "~fixRecursionLimit~recursionLimit"}}, "undocumented": true, "name": "fixRecursionLimit", "longname": "~fixRecursionLimit", "kind": "function", "memberof": "", "scope": "inner", "params": []}, {"comment": "", "meta": {"range": [12419, 12428], "filename": "pyodide.js", "lineno": 337, "columnno": 8, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100001017", "name": "depth", "type": "Literal", "value": 0}}, "undocumented": true, "name": "depth", "longname": "~fixRecursionLimit~depth", "kind": "member", "memberof": "~fixRecursionLimit", "scope": "inner", "params": []}, {"comment": "", "meta": {"range": [12434, 12495], "filename": "pyodide.js", "lineno": 338, "columnno": 4, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100001020", "name": "recurse", "type": "FunctionDeclaration", "paramnames": []}, "vars": {"depth": "~fixRecursionLimit~recurse~depth"}}, "undocumented": true, "name": "recurse", "longname": "~fixRecursionLimit~recurse", "kind": "function", "memberof": "~fixRecursionLimit", "scope": "inner", "params": []}, {"comment": "", "meta": {"range": [12461, 12471], "filename": "pyodide.js", "lineno": 339, "columnno": 6, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100001024", "name": "depth", "type": "Literal", "funcscope": "~fixRecursionLimit~recurse", "value": 1, "paramnames": []}}, "undocumented": true, "name": "depth", "longname": "~fixRecursionLimit~recurse~depth", "kind": "member", "memberof": "~fixRecursionLimit~recurse", "scope": "inner"}, {"comment": "", "meta": {"range": [12566, 12593], "filename": "pyodide.js", "lineno": 348, "columnno": 8, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100001038", "name": "recursionLimit", "type": "BinaryExpression", "value": ""}}, "undocumented": true, "name": "recursionLimit", "longname": "~fixRecursionLimit~recursionLimit", "kind": "member", "memberof": "~fixRecursionLimit", "scope": "inner", "params": []}, {"comment": "", "meta": {"range": [12634, 12655], "filename": "pyodide.js", "lineno": 350, "columnno": 6, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100001049", "name": "recursionLimit", "type": "Literal", "funcscope": "~fixRecursionLimit", "value": 1000, "paramnames": []}}, "undocumented": true, "name": "recursionLimit", "longname": "~fixRecursionLimit~recursionLimit", "kind": "member", "memberof": "~fixRecursionLimit", "scope": "inner"}, {"comment": "", "meta": {"range": [12899, 13167], "filename": "pyodide.js", "lineno": 359, "columnno": 6, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100001063", "name": "PUBLIC_API", "type": "ArrayExpression", "value": "[\"globals\",\"loadPackage\",\"loadPackagesFromImports\",\"loadedPackages\",\"pyimport\",\"runPython\",\"runPythonAsync\",\"version\",\"registerJsModule\",\"unregisterJsModule\",\"setInterruptBuffer\",\"pyodide_py\"]"}}, "undocumented": true, "name": "PUBLIC_API", "longname": "~PUBLIC_API", "kind": "member", "memberof": "", "scope": "inner", "params": []}, {"comment": "", "meta": {"range": [13193, 13417], "filename": "pyodide.js", "lineno": 375, "columnno": 2, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100001078", "name": "makePublicAPI", "type": "FunctionDeclaration", "paramnames": ["module", "public_api"]}, "vars": {"namespace": "~makePublicAPI~namespace", "module.public_api": "module.public_api", "name": "~makePublicAPI~name", "namespace[undefined]": "~makePublicAPI~namespace.undefined]"}}, "undocumented": true, "name": "makePublicAPI", "longname": "~makePublicAPI", "kind": "function", "memberof": "", "scope": "inner", "params": []}, {"comment": "", "meta": {"range": [13246, 13276], "filename": "pyodide.js", "lineno": 376, "columnno": 8, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100001084", "name": "namespace", "type": "ObjectExpression", "value": "{\"_module\":\"\"}"}}, "undocumented": true, "name": "namespace", "longname": "~makePublicAPI~namespace", "kind": "member", "memberof": "~makePublicAPI", "scope": "inner", "params": []}, {"comment": "", "meta": {"range": [13259, 13275], "filename": "pyodide.js", "lineno": 376, "columnno": 21, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100001087", "name": "_module", "type": "Identifier", "value": "module"}}, "undocumented": true, "name": "_module", "longname": "~makePublicAPI~namespace._module", "kind": "member", "memberof": "~makePublicAPI~namespace", "scope": "static"}, {"comment": "", "meta": {"range": [13282, 13311], "filename": "pyodide.js", "lineno": 377, "columnno": 4, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100001090", "name": "module.public_api", "type": "Identifier", "value": "namespace", "paramnames": []}}, "undocumented": true, "name": "public_api", "longname": "module.public_api", "kind": "member", "memberof": "module", "scope": "static"}, {"comment": "", "meta": {"range": [13326, 13330], "filename": "pyodide.js", "lineno": 378, "columnno": 13, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100001097", "name": "name"}}, "undocumented": true, "name": "name", "longname": "~makePublicAPI~name", "kind": "member", "memberof": "~makePublicAPI", "scope": "inner", "params": []}, {"comment": "", "meta": {"range": [13354, 13384], "filename": "pyodide.js", "lineno": 379, "columnno": 6, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100001102", "name": "namespace[undefined]", "type": "MemberExpression", "funcscope": "~makePublicAPI", "value": "module[undefined]", "paramnames": []}}, "undocumented": true, "name": "undefined]", "longname": "~makePublicAPI~namespace.undefined]", "kind": "member", "memberof": "~makePublicAPI~namespace", "scope": "static"}, {"comment": "", "meta": {"range": [13505, 13525], "filename": "pyodide.js", "lineno": 386, "columnno": 2, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100001112", "name": "self.Module", "type": "Identifier", "value": "Module", "paramnames": []}}, "undocumented": true, "name": "Module", "longname": "self.Module", "kind": "member", "memberof": "self", "scope": "static"}, {"comment": "", "meta": {"range": [13530, 13559], "filename": "pyodide.js", "lineno": 388, "columnno": 2, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100001118", "name": "Module.noImageDecoding", "type": "Literal", "funcscope": "", "value": true, "paramnames": []}}, "undocumented": true, "name": "noImageDecoding", "longname": "~Module.noImageDecoding", "kind": "member", "memberof": "~Module", "scope": "static"}, {"comment": "", "meta": {"range": [13563, 13592], "filename": "pyodide.js", "lineno": 389, "columnno": 2, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100001124", "name": "Module.noAudioDecoding", "type": "Literal", "funcscope": "", "value": true, "paramnames": []}}, "undocumented": true, "name": "noAudioDecoding", "longname": "~Module.noAudioDecoding", "kind": "member", "memberof": "~Module", "scope": "static"}, {"comment": "", "meta": {"range": [13596, 13631], "filename": "pyodide.js", "lineno": 390, "columnno": 2, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100001130", "name": "Module.noWasmDecoding", "type": "Literal", "funcscope": "", "value": false, "paramnames": []}}, "undocumented": true, "name": "noWasmDecoding", "longname": "~Module.noWasmDecoding", "kind": "member", "memberof": "~Module", "scope": "static"}, {"comment": "", "meta": {"range": [13684, 13709], "filename": "pyodide.js", "lineno": 392, "columnno": 2, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100001136", "name": "Module.preloadedWasm", "type": "ObjectExpression", "funcscope": "", "value": "{}", "paramnames": []}}, "undocumented": true, "name": "preloadedWasm", "longname": "~Module.preloadedWasm", "kind": "member", "memberof": "~Module", "scope": "static"}, {"comment": "", "meta": {"range": [13718, 13746], "filename": "pyodide.js", "lineno": 394, "columnno": 6, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100001142", "name": "fatal_error_occurred", "type": "Literal", "value": false}}, "undocumented": true, "name": "fatal_error_occurred", "longname": "~fatal_error_occurred", "kind": "member", "memberof": "", "scope": "inner", "params": []}, {"comment": "", "meta": {"range": [13754, 13891], "filename": "pyodide.js", "lineno": 395, "columnno": 6, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100001146", "name": "fatal_error_msg", "type": "BinaryExpression", "value": ""}}, "undocumented": true, "name": "fatal_error_msg", "longname": "~fatal_error_msg", "kind": "member", "memberof": "", "scope": "inner", "params": []}, {"comment": "", "meta": {"range": [13895, 14734], "filename": "pyodide.js", "lineno": 398, "columnno": 2, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100001152", "name": "Module.fatal_error", "type": "FunctionExpression", "funcscope": "", "paramnames": ["e"]}, "vars": {"fatal_error_occurred": "~Module.fatal_error~fatal_error_occurred", "undefined": null, "Module.public_api[undefined]": "~Module.public_api[undefined]", "": null}}, "undocumented": true, "name": "fatal_error", "longname": "~Module.fatal_error", "kind": "function", "memberof": "~Module", "scope": "static"}, {"comment": "", "meta": {"range": [14040, 14067], "filename": "pyodide.js", "lineno": 403, "columnno": 4, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100001170", "name": "fatal_error_occurred", "type": "Literal", "funcscope": "~Module.fatal_error", "value": true, "paramnames": []}}, "undocumented": true, "name": "fatal_error_occurred", "longname": "~Module.fatal_error~fatal_error_occurred", "kind": "member", "memberof": "~Module.fatal_error", "scope": "inner"}, {"comment": "", "meta": {"range": [14606, 14675], "filename": "pyodide.js", "lineno": 419, "columnno": 10, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100001230", "name": "Module.public_api[undefined]", "type": "FunctionExpression", "funcscope": "", "paramnames": []}}, "undocumented": true, "name": "public_api[undefined]", "longname": "~Module.public_api[undefined]", "kind": "function", "memberof": "~Module", "scope": "static"}, {"comment": "/**\n * An alias to the Python pyodide package.\n *\n * @type {PyProxy}\n */", "meta": {"range": [14822, 14844], "filename": "pyodide.js", "lineno": 432, "columnno": 2, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100001246", "name": "Module.pyodide_py", "type": "ObjectExpression", "funcscope": "", "value": "{}", "paramnames": []}}, "description": "An alias to the Python pyodide package.", "type": {"names": ["PyProxy"]}, "name": "pyodide_py", "longname": "~Module.pyodide_py", "kind": "member", "memberof": "~Module", "scope": "static"}, {"comment": "/**\n *\n * An alias to the global Python namespace.\n *\n * An object whose attributes are members of the Python global namespace. This\n * is an alternative to :meth:`pyimport`. For example, to access the ``foo``\n * Python object from Javascript use\n * ``pyodide.globals.get(\"foo\")``\n *\n * @type {PyProxy}\n */", "meta": {"range": [15207, 15226], "filename": "pyodide.js", "lineno": 445, "columnno": 2, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100001252", "name": "Module.globals", "type": "ObjectExpression", "funcscope": "", "value": "{}", "paramnames": []}}, "description": "An alias to the global Python namespace.\n\nAn object whose attributes are members of the Python global namespace. This\nis an alternative to :meth:`pyimport`. For example, to access the ``foo``\nPython object from Javascript use\n``pyodide.globals.get(\"foo\")``", "type": {"names": ["PyProxy"]}, "name": "globals", "longname": "~Module.globals", "kind": "member", "memberof": "~Module", "scope": "static"}, {"comment": "/**\n *\n * The pyodide version.\n *\n * It can be either the exact release version (e.g. ``0.1.0``), or\n * the latest release version followed by the number of commits since, and\n * the git hash of the current commit (e.g. ``0.1.0-1-bd84646``).\n *\n * @type {string}\n */", "meta": {"range": [15547, 15566], "filename": "pyodide.js", "lineno": 457, "columnno": 2, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100001258", "name": "Module.version", "type": "Literal", "funcscope": "", "value": "", "paramnames": []}}, "description": "The pyodide version.\n\nIt can be either the exact release version (e.g. ``0.1.0``), or\nthe latest release version followed by the number of commits since, and\nthe git hash of the current commit (e.g. ``0.1.0-1-bd84646``).", "type": {"names": ["string"]}, "name": "version", "longname": "~Module.version", "kind": "member", "memberof": "~Module", "scope": "static"}, {"comment": "/**\n * Run Python code in the simplest way possible. The primary purpose of this\n * method is for bootstrapping. It is also useful for debugging: If the Python\n * interpreter is initialized successfully then it should be possible to use\n * this method to run Python code even if everything else in the Pyodide\n * `core` module fails.\n *\n * The differences are:\n * 1. `runPythonSimple` doesn't return anything (and so won't leak\n * PyProxies)\n * 2. `runPythonSimple` doesn't require access to any state on the\n * `pyodide_js` module.\n * 3. `runPython` uses `pyodide.eval_code`, whereas `runPythonSimple` uses\n * `PyRun_String` which is the C API for `eval` / `exec`.\n * 4. `runPythonSimple` runs with `globals` a separate dict which is called\n * `init_dict` (keeps global state private)\n * 5. `runPythonSimple` doesn't dedent the argument\n *\n * When `core` initialization is completed, the globals for `runPythonSimple`\n * is made available as `Module.init_dict`.\n *\n * @private\n */", "meta": {"range": [16668, 16888], "filename": "pyodide.js", "lineno": 482, "columnno": 2, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100001264", "name": "Module.runPythonSimple", "type": "FunctionExpression", "funcscope": "", "paramnames": ["code"]}, "vars": {"code_c_string": "~Module.runPythonSimple~code_c_string"}}, "description": "Run Python code in the simplest way possible. The primary purpose of this\nmethod is for bootstrapping. It is also useful for debugging: If the Python\ninterpreter is initialized successfully then it should be possible to use\nthis method to run Python code even if everything else in the Pyodide\n`core` module fails.\n\nThe differences are:\n 1. `runPythonSimple` doesn't return anything (and so won't leak\n PyProxies)\n 2. `runPythonSimple` doesn't require access to any state on the\n `pyodide_js` module.\n 3. `runPython` uses `pyodide.eval_code`, whereas `runPythonSimple` uses\n `PyRun_String` which is the C API for `eval` / `exec`.\n 4. `runPythonSimple` runs with `globals` a separate dict which is called\n `init_dict` (keeps global state private)\n 5. `runPythonSimple` doesn't dedent the argument\n\nWhen `core` initialization is completed, the globals for `runPythonSimple`\nis made available as `Module.init_dict`.", "access": "private", "name": "runPythonSimple", "longname": "~Module.runPythonSimple", "kind": "function", "memberof": "~Module", "scope": "static"}, {"comment": "", "meta": {"range": [16718, 16762], "filename": "pyodide.js", "lineno": 483, "columnno": 8, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100001272", "name": "code_c_string", "type": "CallExpression", "value": ""}}, "undocumented": true, "name": "code_c_string", "longname": "~Module.runPythonSimple~code_c_string", "kind": "member", "memberof": "~Module.runPythonSimple", "scope": "inner", "params": []}, {"comment": "/**\n * Runs a string of Python code from Javascript.\n *\n * The last part of the string may be an expression, in which case, its value\n * is returned.\n *\n * @param {string} code Python code to evaluate\n * @returns The result of the python code converted to Javascript\n */", "meta": {"range": [17182, 17302], "filename": "pyodide.js", "lineno": 500, "columnno": 2, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100001295", "name": "Module.runPython", "type": "FunctionExpression", "funcscope": "", "paramnames": ["code", "globals"]}}, "description": "Runs a string of Python code from Javascript.\n\nThe last part of the string may be an expression, in which case, its value\nis returned.", "params": [{"type": {"names": ["string"]}, "description": "Python code to evaluate", "name": "code"}], "returns": [{"description": "The result of the python code converted to Javascript"}], "name": "runPython", "longname": "~Module.runPython", "kind": "function", "memberof": "~Module", "scope": "static"}, {"comment": "/**\n * Inspect a Python code chunk and use :js:func:`pyodide.loadPackage` to load any known \n * packages that the code chunk imports. Uses \n * :func:`pyodide_py.find_imports ` to inspect the code.\n * \n * For example, given the following code as input\n * \n * .. code-block:: python\n * \n * import numpy as np\n * x = np.array([1, 2, 3])\n * \n * :js:func:`loadPackagesFromImports` will call ``pyodide.loadPackage(['numpy'])``.\n * See also :js:func:`runPythonAsync`.\n *\n * @param {*} code \n * @param {*} messageCallback \n * @param {*} errorCallback \n */", "meta": {"range": [17944, 18511], "filename": "pyodide.js", "lineno": 524, "columnno": 2, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100001317", "name": "Module.loadPackagesFromImports", "type": "FunctionExpression", "funcscope": "", "paramnames": ["code", "messageCallback", "errorCallback"]}, "vars": {"imports": "~Module.loadPackagesFromImports~imports", "packageNames": "~Module.loadPackagesFromImports~packageNames", "packages": "~Module.loadPackagesFromImports~packages", "name": "~Module.loadPackagesFromImports~name"}}, "description": "Inspect a Python code chunk and use :js:func:`pyodide.loadPackage` to load any known \npackages that the code chunk imports. Uses \n:func:`pyodide_py.find_imports ` to inspect the code.\n\nFor example, given the following code as input\n\n.. code-block:: python\n\n import numpy as np\n x = np.array([1, 2, 3])\n\n:js:func:`loadPackagesFromImports` will call ``pyodide.loadPackage(['numpy'])``.\nSee also :js:func:`runPythonAsync`.", "params": [{"type": {"names": ["*"]}, "name": "code"}, {"type": {"names": ["*"]}, "name": "messageCallback"}, {"type": {"names": ["*"]}, "name": "errorCallback"}], "name": "loadPackagesFromImports", "longname": "~Module.loadPackagesFromImports", "kind": "function", "memberof": "~Module", "scope": "static"}, {"comment": "", "meta": {"range": [18041, 18094], "filename": "pyodide.js", "lineno": 525, "columnno": 8, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100001327", "name": "imports", "type": "CallExpression", "value": ""}}, "undocumented": true, "name": "imports", "longname": "~Module.loadPackagesFromImports~imports", "kind": "member", "memberof": "~Module.loadPackagesFromImports", "scope": "inner", "params": []}, {"comment": "", "meta": {"range": [18156, 18214], "filename": "pyodide.js", "lineno": 529, "columnno": 8, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100001348", "name": "packageNames", "type": "MemberExpression", "value": "Module.packages.import_name_to_package_name"}}, "undocumented": true, "name": "packageNames", "longname": "~Module.loadPackagesFromImports~packageNames", "kind": "member", "memberof": "~Module.loadPackagesFromImports", "scope": "inner", "params": []}, {"comment": "", "meta": {"range": [18224, 18244], "filename": "pyodide.js", "lineno": 530, "columnno": 8, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100001356", "name": "packages", "type": "NewExpression", "value": ""}}, "undocumented": true, "name": "packages", "longname": "~Module.loadPackagesFromImports~packages", "kind": "member", "memberof": "~Module.loadPackagesFromImports", "scope": "inner", "params": []}, {"comment": "", "meta": {"range": [18259, 18263], "filename": "pyodide.js", "lineno": 531, "columnno": 13, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100001362", "name": "name"}}, "undocumented": true, "name": "name", "longname": "~Module.loadPackagesFromImports~name", "kind": "member", "memberof": "~Module.loadPackagesFromImports", "scope": "inner", "params": []}, {"comment": "/**\n * Access a Python object in the global namespace from Javascript.\n * @param {string} name Python variable name\n * @returns If the Python object is an immutable type (string, number,\n * boolean), it is converted to Javascript and returned. For other types, a\n * ``PyProxy`` object is returned.\n */", "meta": {"range": [18854, 18904], "filename": "pyodide.js", "lineno": 551, "columnno": 2, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100001401", "name": "Module.pyimport", "type": "ArrowFunctionExpression", "funcscope": "", "paramnames": ["name"]}}, "description": "Access a Python object in the global namespace from Javascript.", "params": [{"type": {"names": ["string"]}, "description": "Python variable name", "name": "name"}], "returns": [{"description": "If the Python object is an immutable type (string, number,\nboolean), it is converted to Javascript and returned. For other types, a\n``PyProxy`` object is returned."}], "name": "pyimport", "longname": "~Module.pyimport", "kind": "function", "memberof": "~Module", "scope": "static"}, {"comment": "/**\n * Runs Python code, possibly asynchronously loading any known packages that\n * the code imports. For example, given the following code\n *\n * .. code-block:: python\n *\n * import numpy as np\n * x = np.array([1, 2, 3])\n *\n * pyodide will first call ``pyodide.loadPackage(['numpy'])``, and then run\n * the code, returning the result. Since package fetching must happen\n * asynchronously, this function returns a `Promise` which resolves to the\n * output. For example:\n *\n * .. code-block:: javascript\n *\n * pyodide.runPythonAsync(code, messageCallback)\n * .then((output) => handleOutput(output))\n *\n * @param {string} code Python code to evaluate\n * @param {Function} messageCallback A callback, called with progress\n * messages. (optional)\n * @param {Function} errorCallback A callback, called with error/warning\n * messages. (optional)\n */", "meta": {"range": [19821, 20176], "filename": "pyodide.js", "lineno": 578, "columnno": 2, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100001415", "name": "Module.runPythonAsync", "type": "FunctionExpression", "funcscope": "", "paramnames": ["code", "messageCallback", "errorCallback"]}, "vars": {"coroutine": "~Module.runPythonAsync~coroutine", "result": "~Module.runPythonAsync~result"}}, "description": "Runs Python code, possibly asynchronously loading any known packages that\nthe code imports. For example, given the following code\n\n.. code-block:: python\n\n import numpy as np\n x = np.array([1, 2, 3])\n\npyodide will first call ``pyodide.loadPackage(['numpy'])``, and then run\nthe code, returning the result. Since package fetching must happen\nasynchronously, this function returns a `Promise` which resolves to the\noutput. For example:\n\n.. code-block:: javascript\n\n pyodide.runPythonAsync(code, messageCallback)\n .then((output) => handleOutput(output))", "params": [{"type": {"names": ["string"]}, "description": "Python code to evaluate", "name": "code"}, {"type": {"names": ["function"]}, "description": "A callback, called with progress\nmessages. (optional)", "name": "messageCallback"}, {"type": {"names": ["function"]}, "description": "A callback, called with error/warning\nmessages. (optional)", "name": "errorCallback"}], "name": "runPythonAsync", "longname": "~Module.runPythonAsync", "kind": "function", "memberof": "~Module", "scope": "static"}, {"comment": "", "meta": {"range": [19988, 20055], "filename": "pyodide.js", "lineno": 580, "columnno": 8, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100001434", "name": "coroutine", "type": "CallExpression", "value": ""}}, "undocumented": true, "name": "coroutine", "longname": "~Module.runPythonAsync~coroutine", "kind": "member", "memberof": "~Module.runPythonAsync", "scope": "inner", "params": []}, {"comment": "", "meta": {"range": [20077, 20101], "filename": "pyodide.js", "lineno": 582, "columnno": 10, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100001449", "name": "result", "type": "AwaitExpression", "value": ""}}, "undocumented": true, "name": "result", "longname": "~Module.runPythonAsync~result", "kind": "member", "memberof": "~Module.runPythonAsync", "scope": "inner", "params": []}, {"comment": "/**\n * Registers the Js object ``module`` as a Js module with ``name``.\n * This module can then be imported from Python using the standard Python\n * import system. If another module by the same name has already been\n * imported, this won't have much effect unless you also delete the imported\n * module from\n * ``sys.modules``. This calls the ``pyodide_py`` api\n * :func:`pyodide.register_js_module`.\n *\n * @param {string} name Name of js module to add\n * @param {object} module Javascript object backing the module\n */", "meta": {"range": [20747, 20859], "filename": "pyodide.js", "lineno": 602, "columnno": 2, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100001462", "name": "Module.registerJsModule", "type": "FunctionExpression", "funcscope": "", "paramnames": ["name", "module"]}}, "description": "Registers the Js object ``module`` as a Js module with ``name``.\nThis module can then be imported from Python using the standard Python\nimport system. If another module by the same name has already been\nimported, this won't have much effect unless you also delete the imported\nmodule from\n``sys.modules``. This calls the ``pyodide_py`` api\n:func:`pyodide.register_js_module`.", "params": [{"type": {"names": ["string"]}, "description": "Name of js module to add", "name": "name"}, {"type": {"names": ["object"]}, "description": "Javascript object backing the module", "name": "module"}], "name": "registerJsModule", "longname": "~Module.registerJsModule", "kind": "function", "memberof": "~Module", "scope": "static"}, {"comment": "/**\n * Unregisters a Js module with given name that has been previously registered\n * with :js:func:`pyodide.registerJsModule` or :func:`pyodide.register_js_module`. If\n * a Js module with that name does not already exist, will throw an error.\n * Note that if the module has already been imported, this won't have much\n * effect unless you also delete the imported module from ``sys.modules``.\n * This calls the\n * ``pyodide_py`` api :func:`pyodide.unregister_js_module`.\n *\n * @param {string} name Name of js module to remove\n */", "meta": {"range": [21417, 21517], "filename": "pyodide.js", "lineno": 617, "columnno": 2, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100001480", "name": "Module.unregisterJsModule", "type": "FunctionExpression", "funcscope": "", "paramnames": ["name"]}}, "description": "Unregisters a Js module with given name that has been previously registered\nwith :js:func:`pyodide.registerJsModule` or :func:`pyodide.register_js_module`. If\na Js module with that name does not already exist, will throw an error.\nNote that if the module has already been imported, this won't have much\neffect unless you also delete the imported module from ``sys.modules``.\nThis calls the\n``pyodide_py`` api :func:`pyodide.unregister_js_module`.", "params": [{"type": {"names": ["string"]}, "description": "Name of js module to remove", "name": "name"}], "name": "unregisterJsModule", "longname": "~Module.unregisterJsModule", "kind": "function", "memberof": "~Module", "scope": "static"}, {"comment": "", "meta": {"range": [21543, 24666], "filename": "pyodide.js", "lineno": 622, "columnno": 2, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100001496", "name": "Module.function_supports_kwargs", "type": "FunctionExpression", "funcscope": "", "paramnames": ["funcstr"]}, "vars": {"idx": "~Module.function_supports_kwargs~idx", "START_ARG": "~Module.function_supports_kwargs~START_ARG", "ARG": "~Module.function_supports_kwargs~ARG", "QUOTE": "~Module.function_supports_kwargs~QUOTE", "QUOTE_ESCAPE": "~Module.function_supports_kwargs~QUOTE_ESCAPE", "paren_depth": "~Module.function_supports_kwargs~paren_depth", "arg_start": "~Module.function_supports_kwargs~arg_start", "arg_is_obj_dest": "~Module.function_supports_kwargs~arg_is_obj_dest", "quote_start": "~Module.function_supports_kwargs~quote_start", "state": "~Module.function_supports_kwargs~state", "i": "~Module.function_supports_kwargs~i", "x": "~Module.function_supports_kwargs~x"}}, "undocumented": true, "name": "function_supports_kwargs", "longname": "~Module.function_supports_kwargs", "kind": "function", "memberof": "~Module", "scope": "static"}, {"comment": "", "meta": {"range": [21718, 21748], "filename": "pyodide.js", "lineno": 625, "columnno": 8, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100001504", "name": "idx", "type": "BinaryExpression", "value": ""}}, "undocumented": true, "name": "idx", "longname": "~Module.function_supports_kwargs~idx", "kind": "member", "memberof": "~Module.function_supports_kwargs", "scope": "inner", "params": []}, {"comment": "", "meta": {"range": [22624, 22637], "filename": "pyodide.js", "lineno": 640, "columnno": 8, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100001514", "name": "START_ARG", "type": "Literal", "value": 1}}, "undocumented": true, "name": "START_ARG", "longname": "~Module.function_supports_kwargs~START_ARG", "kind": "member", "memberof": "~Module.function_supports_kwargs", "scope": "inner", "params": []}, {"comment": "", "meta": {"range": [22647, 22654], "filename": "pyodide.js", "lineno": 641, "columnno": 8, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100001518", "name": "ARG", "type": "Literal", "value": 2}}, "undocumented": true, "name": "ARG", "longname": "~Module.function_supports_kwargs~ARG", "kind": "member", "memberof": "~Module.function_supports_kwargs", "scope": "inner", "params": []}, {"comment": "", "meta": {"range": [22664, 22673], "filename": "pyodide.js", "lineno": 642, "columnno": 8, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100001522", "name": "QUOTE", "type": "Literal", "value": 3}}, "undocumented": true, "name": "QUOTE", "longname": "~Module.function_supports_kwargs~QUOTE", "kind": "member", "memberof": "~Module.function_supports_kwargs", "scope": "inner", "params": []}, {"comment": "", "meta": {"range": [22683, 22699], "filename": "pyodide.js", "lineno": 643, "columnno": 8, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100001526", "name": "QUOTE_ESCAPE", "type": "Literal", "value": 4}}, "undocumented": true, "name": "QUOTE_ESCAPE", "longname": "~Module.function_supports_kwargs~QUOTE_ESCAPE", "kind": "member", "memberof": "~Module.function_supports_kwargs", "scope": "inner", "params": []}, {"comment": "", "meta": {"range": [22709, 22724], "filename": "pyodide.js", "lineno": 644, "columnno": 8, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100001530", "name": "paren_depth", "type": "Literal", "value": 0}}, "undocumented": true, "name": "paren_depth", "longname": "~Module.function_supports_kwargs~paren_depth", "kind": "member", "memberof": "~Module.function_supports_kwargs", "scope": "inner", "params": []}, {"comment": "", "meta": {"range": [22734, 22747], "filename": "pyodide.js", "lineno": 645, "columnno": 8, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100001534", "name": "arg_start", "type": "Literal", "value": 0}}, "undocumented": true, "name": "arg_start", "longname": "~Module.function_supports_kwargs~arg_start", "kind": "member", "memberof": "~Module.function_supports_kwargs", "scope": "inner", "params": []}, {"comment": "", "meta": {"range": [22757, 22780], "filename": "pyodide.js", "lineno": 646, "columnno": 8, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100001538", "name": "arg_is_obj_dest", "type": "Literal", "value": false}}, "undocumented": true, "name": "arg_is_obj_dest", "longname": "~Module.function_supports_kwargs~arg_is_obj_dest", "kind": "member", "memberof": "~Module.function_supports_kwargs", "scope": "inner", "params": []}, {"comment": "", "meta": {"range": [22790, 22813], "filename": "pyodide.js", "lineno": 647, "columnno": 8, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100001542", "name": "quote_start", "type": "Identifier", "value": "undefined"}}, "undocumented": true, "name": "quote_start", "longname": "~Module.function_supports_kwargs~quote_start", "kind": "member", "memberof": "~Module.function_supports_kwargs", "scope": "inner", "params": []}, {"comment": "", "meta": {"range": [22823, 22840], "filename": "pyodide.js", "lineno": 648, "columnno": 8, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100001546", "name": "state", "type": "Identifier", "value": "START_ARG"}}, "undocumented": true, "name": "state", "longname": "~Module.function_supports_kwargs~state", "kind": "member", "memberof": "~Module.function_supports_kwargs", "scope": "inner", "params": []}, {"comment": "", "meta": {"range": [22875, 22882], "filename": "pyodide.js", "lineno": 650, "columnno": 9, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100001550", "name": "i", "type": "Identifier", "funcscope": "~Module.function_supports_kwargs", "value": "idx", "paramnames": []}}, "undocumented": true, "name": "i", "longname": "~Module.function_supports_kwargs~i", "kind": "member", "memberof": "~Module.function_supports_kwargs", "scope": "inner"}, {"comment": "", "meta": {"range": [22921, 22935], "filename": "pyodide.js", "lineno": 651, "columnno": 10, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100001562", "name": "x", "type": "MemberExpression", "value": "funcstr[undefined]"}}, "undocumented": true, "name": "x", "longname": "~Module.function_supports_kwargs~x", "kind": "member", "memberof": "~Module.function_supports_kwargs", "scope": "inner", "params": []}, {"comment": "", "meta": {"range": [23066, 23077], "filename": "pyodide.js", "lineno": 656, "columnno": 12, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100001577", "name": "state", "type": "Identifier", "funcscope": "~Module.function_supports_kwargs", "value": "ARG", "paramnames": []}}, "undocumented": true, "name": "state", "longname": "~Module.function_supports_kwargs~state", "kind": "member", "memberof": "~Module.function_supports_kwargs", "scope": "inner"}, {"comment": "", "meta": {"range": [23134, 23154], "filename": "pyodide.js", "lineno": 659, "columnno": 12, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100001584", "name": "state", "type": "Identifier", "funcscope": "~Module.function_supports_kwargs", "value": "QUOTE_ESCAPE", "paramnames": []}}, "undocumented": true, "name": "state", "longname": "~Module.function_supports_kwargs~state", "kind": "member", "memberof": "~Module.function_supports_kwargs", "scope": "inner"}, {"comment": "", "meta": {"range": [23279, 23292], "filename": "pyodide.js", "lineno": 666, "columnno": 8, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100001596", "name": "state", "type": "Identifier", "funcscope": "~Module.function_supports_kwargs", "value": "QUOTE", "paramnames": []}}, "undocumented": true, "name": "state", "longname": "~Module.function_supports_kwargs~state", "kind": "member", "memberof": "~Module.function_supports_kwargs", "scope": "inner"}, {"comment": "", "meta": {"range": [23824, 23841], "filename": "pyodide.js", "lineno": 681, "columnno": 10, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100001640", "name": "state", "type": "Identifier", "funcscope": "~Module.function_supports_kwargs", "value": "START_ARG", "paramnames": []}}, "undocumented": true, "name": "state", "longname": "~Module.function_supports_kwargs~state", "kind": "member", "memberof": "~Module.function_supports_kwargs", "scope": "inner"}, {"comment": "", "meta": {"range": [24029, 24040], "filename": "pyodide.js", "lineno": 688, "columnno": 8, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100001650", "name": "state", "type": "Identifier", "funcscope": "~Module.function_supports_kwargs", "value": "ARG", "paramnames": []}}, "undocumented": true, "name": "state", "longname": "~Module.function_supports_kwargs~state", "kind": "member", "memberof": "~Module.function_supports_kwargs", "scope": "inner"}, {"comment": "", "meta": {"range": [24050, 24077], "filename": "pyodide.js", "lineno": 689, "columnno": 8, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100001654", "name": "arg_is_obj_dest", "type": "BinaryExpression", "funcscope": "~Module.function_supports_kwargs", "value": "", "paramnames": []}}, "undocumented": true, "name": "arg_is_obj_dest", "longname": "~Module.function_supports_kwargs~arg_is_obj_dest", "kind": "member", "memberof": "~Module.function_supports_kwargs", "scope": "inner"}, {"comment": "", "meta": {"range": [24375, 24388], "filename": "pyodide.js", "lineno": 700, "columnno": 10, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100001688", "name": "state", "type": "Identifier", "funcscope": "~Module.function_supports_kwargs", "value": "QUOTE", "paramnames": []}}, "undocumented": true, "name": "state", "longname": "~Module.function_supports_kwargs~state", "kind": "member", "memberof": "~Module.function_supports_kwargs", "scope": "inner"}, {"comment": "", "meta": {"range": [24400, 24415], "filename": "pyodide.js", "lineno": 701, "columnno": 10, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100001692", "name": "quote_start", "type": "Identifier", "funcscope": "~Module.function_supports_kwargs", "value": "x", "paramnames": []}}, "undocumented": true, "name": "quote_start", "longname": "~Module.function_supports_kwargs~quote_start", "kind": "member", "memberof": "~Module.function_supports_kwargs", "scope": "inner"}, {"comment": "", "meta": {"range": [24671, 24715], "filename": "pyodide.js", "lineno": 711, "columnno": 2, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100001701", "name": "Module.locateFile", "type": "ArrowFunctionExpression", "funcscope": "", "paramnames": ["path"]}}, "undocumented": true, "name": "locateFile", "longname": "~Module.locateFile", "kind": "function", "memberof": "~Module", "scope": "static"}, {"comment": "", "meta": {"range": [24724, 24775], "filename": "pyodide.js", "lineno": 713, "columnno": 6, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100001711", "name": "moduleLoaded", "type": "NewExpression", "value": ""}}, "undocumented": true, "name": "moduleLoaded", "longname": "~moduleLoaded", "kind": "member", "memberof": "", "scope": "inner", "params": []}, {"comment": "", "meta": {"range": [24756, 24774], "filename": "pyodide.js", "lineno": 713, "columnno": 38, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100001717", "name": "Module.postRun", "type": "Identifier", "funcscope": "", "value": "r", "paramnames": []}}, "undocumented": true, "name": "postRun", "longname": ".postRun", "kind": "member", "memberof": "", "scope": "static"}, {"comment": "", "meta": {"range": [24786, 24824], "filename": "pyodide.js", "lineno": 715, "columnno": 8, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100001723", "name": "scriptSrc", "type": "TemplateLiteral", "value": ""}}, "undocumented": true, "name": "scriptSrc", "longname": "~scriptSrc", "kind": "constant", "memberof": "", "scope": "inner", "params": []}, {"comment": "", "meta": {"range": [25075, 25111], "filename": "pyodide.js", "lineno": 722, "columnno": 2, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100001735", "name": "self.pyodide", "type": "AwaitExpression", "value": "", "paramnames": []}}, "undocumented": true, "name": "pyodide", "longname": "self.pyodide", "kind": "member", "memberof": "self", "scope": "static"}, {"comment": "", "meta": {"range": [25752, 25814], "filename": "pyodide.js", "lineno": 746, "columnno": 2, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100001754", "name": "Module.saveState", "type": "ArrowFunctionExpression", "funcscope": "", "paramnames": []}}, "undocumented": true, "name": "saveState", "longname": "~Module.saveState", "kind": "function", "memberof": "~Module", "scope": "static"}, {"comment": "", "meta": {"range": [25818, 25902], "filename": "pyodide.js", "lineno": 747, "columnno": 2, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100001768", "name": "Module.restoreState", "type": "ArrowFunctionExpression", "funcscope": "", "paramnames": ["state"]}}, "undocumented": true, "name": "restoreState", "longname": "~Module.restoreState", "kind": "function", "memberof": "~Module", "scope": "static"}, {"comment": "", "meta": {"range": [26107, 26160], "filename": "pyodide.js", "lineno": 755, "columnno": 2, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100001794", "name": "Module.globals", "type": "CallExpression", "funcscope": "", "value": "", "paramnames": []}}, "undocumented": true, "name": "globals", "longname": "~Module.globals", "kind": "member", "memberof": "~Module", "scope": "static"}, {"comment": "", "meta": {"range": [26191, 26240], "filename": "pyodide.js", "lineno": 758, "columnno": 6, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100001811", "name": "response", "type": "AwaitExpression", "value": ""}}, "undocumented": true, "name": "response", "longname": "~response", "kind": "member", "memberof": "", "scope": "inner", "params": []}, {"comment": "", "meta": {"range": [26244, 26283], "filename": "pyodide.js", "lineno": 759, "columnno": 2, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100001821", "name": "Module.packages", "type": "AwaitExpression", "funcscope": "", "value": "", "paramnames": []}}, "undocumented": true, "name": "packages", "longname": "~Module.packages", "kind": "member", "memberof": "~Module", "scope": "static"}, {"comment": "", "meta": {"range": [26323, 26377], "filename": "pyodide.js", "lineno": 762, "columnno": 2, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100001837", "name": "self.pyodide", "type": "CallExpression", "value": "", "paramnames": []}}, "undocumented": true, "name": "pyodide", "longname": "self.pyodide", "kind": "member", "memberof": "self", "scope": "static"}, {"comment": "", "meta": {"range": [0, 49], "filename": "webworker.js", "lineno": 1, "columnno": 0, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100001872", "name": "self.languagePluginUrl", "type": "Literal", "value": "{{ PYODIDE_BASE_URL }}", "paramnames": []}}, "undocumented": true, "name": "languagePluginUrl", "longname": "self.languagePluginUrl", "kind": "member", "memberof": "self", "scope": "static"}, {"comment": "", "meta": {"range": [81, 694], "filename": "webworker.js", "lineno": 4, "columnno": 0, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100001882", "name": "onmessage", "type": "FunctionExpression", "paramnames": ["e"]}, "vars": {"data": "onmessage~data", "key": "onmessage~key", "self[undefined]": null}}, "undocumented": true, "name": "onmessage", "longname": "onmessage", "kind": "function", "scope": "global"}, {"comment": "", "meta": {"range": [151, 164], "filename": "webworker.js", "lineno": 6, "columnno": 8, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100001891", "name": "data", "type": "MemberExpression", "value": "e.data"}}, "undocumented": true, "name": "data", "longname": "onmessage~data", "kind": "constant", "memberof": "onmessage", "scope": "inner", "params": []}, {"comment": "", "meta": {"range": [177, 180], "filename": "webworker.js", "lineno": 7, "columnno": 11, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100001898", "name": "key"}}, "undocumented": true, "name": "key", "longname": "onmessage~key", "kind": "member", "memberof": "onmessage", "scope": "inner", "params": []}, {"comment": "", "meta": {"range": [375, 396], "filename": "webworker.js", "lineno": 11, "columnno": 6, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100001912", "name": "self[undefined]", "type": "MemberExpression", "value": "data[undefined]", "paramnames": []}}, "undocumented": true, "name": "self[undefined]", "longname": "self[undefined]", "kind": "member", "scope": "global"}, {"comment": "", "meta": {"range": [448, 504], "filename": "webworker.js", "lineno": 17, "columnno": 9, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100001927", "name": "results", "type": "AwaitExpression", "value": ""}}, "undocumented": true, "name": "results", "longname": "results", "kind": "member", "scope": "global"}, {"comment": "", "meta": {"range": [591, 608], "filename": "webworker.js", "lineno": 20, "columnno": 22, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100001945", "name": "error", "type": "MemberExpression", "value": "e.message"}}, "undocumented": true, "name": "error", "longname": "error", "kind": "member", "scope": "global"}, {"kind": "package", "longname": "package:undefined", "files": ["/home/hood/pyodide/src/pyodide.js", "/home/hood/pyodide/src/webworker.js"]}] \ No newline at end of file +[{"comment": "/**\n * A promise that resolves to ``undefined`` when Pyodide is finished loading.\n *\n * @type Promise\n */", "meta": {"range": [165, 26495], "filename": "pyodide.js", "lineno": 10, "columnno": 0, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100000003", "name": "globalThis.languagePluginLoader", "type": "CallExpression", "value": "", "paramnames": []}}, "description": "A promise that resolves to ``undefined`` when Pyodide is finished loading.", "type": {"names": ["Promise"]}, "name": "languagePluginLoader", "longname": "globalThis.languagePluginLoader", "kind": "member", "memberof": "globalThis", "scope": "static"}, {"comment": "", "meta": {"range": [220, 231], "filename": "pyodide.js", "lineno": 11, "columnno": 6, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100000011", "name": "Module", "type": "ObjectExpression", "value": "{}"}}, "undocumented": true, "name": "Module", "longname": "~Module", "kind": "member", "memberof": "", "scope": "inner", "params": []}, {"comment": "", "meta": {"range": [413, 473], "filename": "pyodide.js", "lineno": 15, "columnno": 6, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100000015", "name": "baseURL", "type": "LogicalExpression", "value": ""}}, "undocumented": true, "name": "baseURL", "longname": "~baseURL", "kind": "member", "memberof": "", "scope": "inner", "params": []}, {"comment": "", "meta": {"range": [477, 536], "filename": "pyodide.js", "lineno": 16, "columnno": 2, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100000023", "name": "baseURL", "type": "BinaryExpression", "funcscope": "", "value": "", "paramnames": []}}, "undocumented": true, "name": "baseURL", "longname": "~baseURL", "kind": "member", "memberof": "", "scope": "inner"}, {"comment": "", "meta": {"range": [631, 666], "filename": "pyodide.js", "lineno": 20, "columnno": 8, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100000038", "name": "DEFAULT_CHANNEL", "type": "Literal", "value": "default channel"}}, "undocumented": true, "name": "DEFAULT_CHANNEL", "longname": "~DEFAULT_CHANNEL", "kind": "constant", "memberof": "", "scope": "inner", "params": []}, {"comment": "", "meta": {"range": [725, 811], "filename": "pyodide.js", "lineno": 23, "columnno": 8, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100000042", "name": "package_uri_regexp", "type": "NewExpression", "value": ""}}, "undocumented": true, "name": "package_uri_regexp", "longname": "~package_uri_regexp", "kind": "constant", "memberof": "", "scope": "inner", "params": []}, {"comment": "", "meta": {"range": [820, 1094], "filename": "pyodide.js", "lineno": 26, "columnno": 6, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100000049", "name": "_uri_to_package_name", "type": "ArrowFunctionExpression"}, "vars": {"match": "~_uri_to_package_name~match"}}, "undocumented": true, "name": "_uri_to_package_name", "longname": "~_uri_to_package_name", "kind": "function", "memberof": "", "scope": "inner", "params": []}, {"comment": "", "meta": {"range": [920, 964], "filename": "pyodide.js", "lineno": 28, "columnno": 10, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100000062", "name": "match", "type": "CallExpression", "value": ""}}, "undocumented": true, "name": "match", "longname": "~_uri_to_package_name~match", "kind": "member", "memberof": "~_uri_to_package_name", "scope": "inner", "params": []}, {"comment": "", "meta": {"range": [1103, 1113], "filename": "pyodide.js", "lineno": 36, "columnno": 6, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100000077", "name": "loadScript"}}, "undocumented": true, "name": "loadScript", "longname": "~loadScript", "kind": "member", "memberof": "", "scope": "inner", "params": []}, {"comment": "", "meta": {"range": [1153, 1394], "filename": "pyodide.js", "lineno": 38, "columnno": 4, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100000085", "name": "loadScript", "type": "ArrowFunctionExpression", "funcscope": "", "paramnames": ["url"]}, "vars": {"": null}}, "undocumented": true, "name": "loadScript", "longname": "~loadScript", "kind": "function", "memberof": "", "scope": "inner"}, {"comment": "", "meta": {"range": [1215, 1261], "filename": "pyodide.js", "lineno": 39, "columnno": 12, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100000096", "name": "script", "type": "CallExpression", "value": ""}}, "undocumented": true, "name": "script", "longname": "~script", "kind": "constant", "memberof": "", "scope": "inner", "params": []}, {"comment": "", "meta": {"range": [1269, 1285], "filename": "pyodide.js", "lineno": 40, "columnno": 6, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100000106", "name": "script.src", "type": "Identifier", "funcscope": "", "value": "url", "paramnames": []}}, "undocumented": true, "name": "src", "longname": "~script.src", "kind": "member", "memberof": "~script", "scope": "static"}, {"comment": "", "meta": {"range": [1293, 1312], "filename": "pyodide.js", "lineno": 41, "columnno": 6, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100000112", "name": "script.onload", "type": "Identifier", "funcscope": "", "value": "res", "paramnames": []}}, "undocumented": true, "name": "onload", "longname": "~script.onload", "kind": "member", "memberof": "~script", "scope": "static"}, {"comment": "", "meta": {"range": [1320, 1340], "filename": "pyodide.js", "lineno": 42, "columnno": 6, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100000118", "name": "script.onerror", "type": "Identifier", "funcscope": "", "value": "rej", "paramnames": []}}, "undocumented": true, "name": "onerror", "longname": "~script.onerror", "kind": "member", "memberof": "~script", "scope": "static"}, {"comment": "", "meta": {"range": [1448, 1553], "filename": "pyodide.js", "lineno": 46, "columnno": 4, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100000139", "name": "loadScript", "type": "ArrowFunctionExpression", "funcscope": "", "paramnames": ["url"]}}, "undocumented": true, "name": "loadScript", "longname": "~loadScript", "kind": "function", "memberof": "", "scope": "inner"}, {"comment": "", "meta": {"range": [1633, 3256], "filename": "pyodide.js", "lineno": 53, "columnno": 2, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100000155", "name": "recursiveDependencies", "type": "FunctionDeclaration", "paramnames": ["names", "_messageCallback", "errorCallback", "sharedLibsOnly"]}, "vars": {"packages": "~recursiveDependencies~packages", "loadedPackages": "~recursiveDependencies~loadedPackages", "sharedLibraries": "~recursiveDependencies~sharedLibraries", "toLoad": "~recursiveDependencies~toLoad", "addPackage": "~recursiveDependencies~addPackage", "": null, "name": "~recursiveDependencies~name", "pkgname": "~recursiveDependencies~pkgname", "onlySharedLibs": "~recursiveDependencies~onlySharedLibs", "c": "~recursiveDependencies~c"}}, "undocumented": true, "name": "recursiveDependencies", "longname": "~recursiveDependencies", "kind": "function", "memberof": "", "scope": "inner", "params": []}, {"comment": "", "meta": {"range": [1765, 1818], "filename": "pyodide.js", "lineno": 55, "columnno": 10, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100000163", "name": "packages", "type": "MemberExpression", "value": "self.pyodide._module.packages.dependencies"}}, "undocumented": true, "name": "packages", "longname": "~recursiveDependencies~packages", "kind": "constant", "memberof": "~recursiveDependencies", "scope": "inner", "params": []}, {"comment": "", "meta": {"range": [1830, 1874], "filename": "pyodide.js", "lineno": 56, "columnno": 10, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100000175", "name": "loadedPackages", "type": "MemberExpression", "value": "self.pyodide.loadedPackages"}}, "undocumented": true, "name": "loadedPackages", "longname": "~recursiveDependencies~loadedPackages", "kind": "constant", "memberof": "~recursiveDependencies", "scope": "inner", "params": []}, {"comment": "", "meta": {"range": [1886, 1948], "filename": "pyodide.js", "lineno": 57, "columnno": 10, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100000183", "name": "sharedLibraries", "type": "MemberExpression", "value": "self.pyodide._module.packages.shared_library"}}, "undocumented": true, "name": "sharedLibraries", "longname": "~recursiveDependencies~sharedLibraries", "kind": "constant", "memberof": "~recursiveDependencies", "scope": "inner", "params": []}, {"comment": "", "meta": {"range": [1960, 1978], "filename": "pyodide.js", "lineno": 58, "columnno": 10, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100000195", "name": "toLoad", "type": "NewExpression", "value": ""}}, "undocumented": true, "name": "toLoad", "longname": "~recursiveDependencies~toLoad", "kind": "constant", "memberof": "~recursiveDependencies", "scope": "inner", "params": []}, {"comment": "", "meta": {"range": [1991, 2486], "filename": "pyodide.js", "lineno": 60, "columnno": 10, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100000200", "name": "addPackage", "type": "ArrowFunctionExpression"}, "vars": {"dep": "~recursiveDependencies~addPackage~dep"}}, "undocumented": true, "name": "addPackage", "longname": "~recursiveDependencies~addPackage", "kind": "function", "memberof": "~recursiveDependencies", "scope": "inner", "params": []}, {"comment": "", "meta": {"range": [2424, 2427], "filename": "pyodide.js", "lineno": 71, "columnno": 15, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100000230", "name": "dep"}}, "undocumented": true, "name": "dep", "longname": "~recursiveDependencies~addPackage~dep", "kind": "member", "memberof": "~recursiveDependencies~addPackage", "scope": "inner", "params": []}, {"comment": "", "meta": {"range": [2501, 2505], "filename": "pyodide.js", "lineno": 75, "columnno": 13, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100000242", "name": "name"}}, "undocumented": true, "name": "name", "longname": "~recursiveDependencies~name", "kind": "member", "memberof": "~recursiveDependencies", "scope": "inner", "params": []}, {"comment": "", "meta": {"range": [2530, 2566], "filename": "pyodide.js", "lineno": 76, "columnno": 12, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100000247", "name": "pkgname", "type": "CallExpression", "value": ""}}, "undocumented": true, "name": "pkgname", "longname": "~recursiveDependencies~pkgname", "kind": "constant", "memberof": "~recursiveDependencies", "scope": "inner", "params": []}, {"comment": "", "meta": {"range": [3030, 3056], "filename": "pyodide.js", "lineno": 91, "columnno": 6, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100000316", "name": "onlySharedLibs", "type": "NewExpression", "funcscope": "~recursiveDependencies", "value": "", "paramnames": []}}, "undocumented": true, "name": "onlySharedLibs", "longname": "~recursiveDependencies~onlySharedLibs", "kind": "member", "memberof": "~recursiveDependencies", "scope": "inner"}, {"comment": "", "meta": {"range": [3073, 3074], "filename": "pyodide.js", "lineno": 92, "columnno": 15, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100000322", "name": "c"}}, "undocumented": true, "name": "c", "longname": "~recursiveDependencies~c", "kind": "member", "memberof": "~recursiveDependencies", "scope": "inner", "params": []}, {"comment": "", "meta": {"range": [3260, 8257], "filename": "pyodide.js", "lineno": 102, "columnno": 2, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100000352", "name": "_loadPackage", "type": "FunctionDeclaration", "paramnames": ["names", "messageCallback", "errorCallback"]}, "vars": {"toLoad": "~_loadPackage~toLoad", "Module.locateFile": "~Module.locateFile", "": null, "windowErrorHandler": "~_loadPackage~windowErrorHandler", "windowErrorPromise": "~_loadPackage~windowErrorPromise", "scriptPromises": "~_loadPackage~scriptPromises", "undefined": null, "loaded": "~_loadPackage~loaded", "scriptSrc": "~_loadPackage~scriptSrc", "waitRunDependency": "~_loadPackage~waitRunDependency", "successPromise": "~_loadPackage~successPromise", "packageList": "~_loadPackage~packageList", "self.pyodide.loadedPackages[undefined]": "self.pyodide.loadedPackages[undefined]", "resolveMsg": "~_loadPackage~resolveMsg", "package_names": "~_loadPackage~package_names"}}, "undocumented": true, "name": "_loadPackage", "longname": "~_loadPackage", "kind": "function", "memberof": "", "scope": "inner", "params": [], "async": true}, {"comment": "", "meta": {"range": [3380, 3449], "filename": "pyodide.js", "lineno": 104, "columnno": 8, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100000359", "name": "toLoad", "type": "CallExpression", "value": ""}}, "undocumented": true, "name": "toLoad", "longname": "~_loadPackage~toLoad", "kind": "member", "memberof": "~_loadPackage", "scope": "inner", "params": []}, {"comment": "", "meta": {"range": [3562, 3916], "filename": "pyodide.js", "lineno": 108, "columnno": 4, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100000367", "name": "Module.locateFile", "type": "ArrowFunctionExpression", "paramnames": ["path"]}, "vars": {"pkg": "~Module.locateFile~pkg", "package_uri": "~Module.locateFile~package_uri"}}, "undocumented": true, "name": "locateFile", "longname": "~Module.locateFile", "kind": "function", "memberof": "~Module", "scope": "static"}, {"comment": "", "meta": {"range": [3653, 3686], "filename": "pyodide.js", "lineno": 110, "columnno": 10, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100000375", "name": "pkg", "type": "CallExpression", "value": ""}}, "undocumented": true, "name": "pkg", "longname": "~Module.locateFile~pkg", "kind": "member", "memberof": "~Module.locateFile", "scope": "inner", "params": []}, {"comment": "", "meta": {"range": [3729, 3758], "filename": "pyodide.js", "lineno": 112, "columnno": 12, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100000391", "name": "package_uri", "type": "CallExpression", "value": ""}}, "undocumented": true, "name": "package_uri", "longname": "~Module.locateFile~package_uri", "kind": "member", "memberof": "~Module.locateFile", "scope": "inner", "params": []}, {"comment": "", "meta": {"range": [4557, 4575], "filename": "pyodide.js", "lineno": 134, "columnno": 8, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100000447", "name": "windowErrorHandler"}}, "undocumented": true, "name": "windowErrorHandler", "longname": "~_loadPackage~windowErrorHandler", "kind": "member", "memberof": "~_loadPackage", "scope": "inner", "params": []}, {"comment": "", "meta": {"range": [4585, 4603], "filename": "pyodide.js", "lineno": 135, "columnno": 8, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100000450", "name": "windowErrorPromise"}}, "undocumented": true, "name": "windowErrorPromise", "longname": "~_loadPackage~windowErrorPromise", "kind": "member", "memberof": "~_loadPackage", "scope": "inner", "params": []}, {"comment": "", "meta": {"range": [4636, 5053], "filename": "pyodide.js", "lineno": 137, "columnno": 6, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100000458", "name": "windowErrorPromise", "type": "NewExpression", "funcscope": "~_loadPackage", "value": "", "paramnames": []}}, "undocumented": true, "name": "windowErrorPromise", "longname": "~_loadPackage~windowErrorPromise", "kind": "member", "memberof": "~_loadPackage", "scope": "inner"}, {"comment": "", "meta": {"range": [4694, 4983], "filename": "pyodide.js", "lineno": 138, "columnno": 8, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100000467", "name": "windowErrorHandler", "type": "ArrowFunctionExpression", "funcscope": "", "paramnames": ["e"]}}, "undocumented": true, "name": "windowErrorHandler", "longname": "~windowErrorHandler", "kind": "function", "memberof": "", "scope": "inner"}, {"comment": "", "meta": {"range": [5128, 5170], "filename": "pyodide.js", "lineno": 148, "columnno": 6, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100000495", "name": "windowErrorPromise", "type": "NewExpression", "funcscope": "~_loadPackage", "value": "", "paramnames": []}}, "undocumented": true, "name": "windowErrorPromise", "longname": "~_loadPackage~windowErrorPromise", "kind": "member", "memberof": "~_loadPackage", "scope": "inner"}, {"comment": "", "meta": {"range": [5335, 5354], "filename": "pyodide.js", "lineno": 153, "columnno": 8, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100000502", "name": "scriptPromises", "type": "ArrayExpression", "value": "[]"}}, "undocumented": true, "name": "scriptPromises", "longname": "~_loadPackage~scriptPromises", "kind": "member", "memberof": "~_loadPackage", "scope": "inner", "params": []}, {"comment": "", "meta": {"range": [5404, 5445], "filename": "pyodide.js", "lineno": 156, "columnno": 10, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100000512", "name": "loaded", "type": "MemberExpression", "value": "self.pyodide.loadedPackages[undefined]"}}, "undocumented": true, "name": "loaded", "longname": "~_loadPackage~loaded", "kind": "member", "memberof": "~_loadPackage", "scope": "inner", "params": []}, {"comment": "", "meta": {"range": [6038, 6103], "filename": "pyodide.js", "lineno": 170, "columnno": 10, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100000559", "name": "scriptSrc", "type": "ConditionalExpression", "value": ""}}, "undocumented": true, "name": "scriptSrc", "longname": "~_loadPackage~scriptSrc", "kind": "member", "memberof": "~_loadPackage", "scope": "inner", "params": []}, {"comment": "", "meta": {"range": [6611, 7106], "filename": "pyodide.js", "lineno": 182, "columnno": 4, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100000607", "name": "waitRunDependency", "type": "FunctionDeclaration", "paramnames": []}, "vars": {"promise": "~_loadPackage~waitRunDependency~promise", "": null}}, "undocumented": true, "name": "waitRunDependency", "longname": "~_loadPackage~waitRunDependency", "kind": "function", "memberof": "~_loadPackage", "scope": "inner", "params": []}, {"comment": "", "meta": {"range": [6654, 6805], "filename": "pyodide.js", "lineno": 183, "columnno": 12, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100000611", "name": "promise", "type": "NewExpression", "value": ""}}, "undocumented": true, "name": "promise", "longname": "~_loadPackage~waitRunDependency~promise", "kind": "constant", "memberof": "~_loadPackage~waitRunDependency", "scope": "inner", "params": []}, {"comment": "", "meta": {"range": [6691, 6795], "filename": "pyodide.js", "lineno": 184, "columnno": 8, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100000619", "name": "Module.monitorRunDependencies", "type": "ArrowFunctionExpression", "paramnames": ["n"]}}, "undocumented": true, "name": "monitorRunDependencies", "longname": "~Module.monitorRunDependencies", "kind": "function", "memberof": "~Module", "scope": "static"}, {"comment": "", "meta": {"range": [7308, 7376], "filename": "pyodide.js", "lineno": 201, "columnno": 8, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100000649", "name": "successPromise", "type": "CallExpression", "value": ""}}, "undocumented": true, "name": "successPromise", "longname": "~_loadPackage~successPromise", "kind": "member", "memberof": "~_loadPackage", "scope": "inner", "params": []}, {"comment": "", "meta": {"range": [7632, 7648], "filename": "pyodide.js", "lineno": 211, "columnno": 8, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100000688", "name": "packageList", "type": "ArrayExpression", "value": "[]"}}, "undocumented": true, "name": "packageList", "longname": "~_loadPackage~packageList", "kind": "member", "memberof": "~_loadPackage", "scope": "inner", "params": []}, {"comment": "", "meta": {"range": [7693, 7731], "filename": "pyodide.js", "lineno": 213, "columnno": 6, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100000698", "name": "self.pyodide.loadedPackages[undefined]", "type": "Identifier", "value": "uri", "paramnames": []}}, "undocumented": true, "name": "loadedPackages[undefined]", "longname": "self.pyodide.loadedPackages[undefined]", "kind": "member", "memberof": "self.pyodide", "scope": "static"}, {"comment": "", "meta": {"range": [7777, 7787], "filename": "pyodide.js", "lineno": 217, "columnno": 8, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100000714", "name": "resolveMsg"}}, "undocumented": true, "name": "resolveMsg", "longname": "~_loadPackage~resolveMsg", "kind": "member", "memberof": "~_loadPackage", "scope": "inner", "params": []}, {"comment": "", "meta": {"range": [7833, 7871], "filename": "pyodide.js", "lineno": 219, "columnno": 10, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100000724", "name": "package_names", "type": "CallExpression", "value": ""}}, "undocumented": true, "name": "package_names", "longname": "~_loadPackage~package_names", "kind": "member", "memberof": "~_loadPackage", "scope": "inner", "params": []}, {"comment": "", "meta": {"range": [7879, 7915], "filename": "pyodide.js", "lineno": 220, "columnno": 6, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100000732", "name": "resolveMsg", "type": "TemplateLiteral", "funcscope": "~_loadPackage", "value": "", "paramnames": []}}, "undocumented": true, "name": "resolveMsg", "longname": "~_loadPackage~resolveMsg", "kind": "member", "memberof": "~_loadPackage", "scope": "inner"}, {"comment": "", "meta": {"range": [7936, 7969], "filename": "pyodide.js", "lineno": 222, "columnno": 6, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100000740", "name": "resolveMsg", "type": "Literal", "funcscope": "~_loadPackage", "value": "No packages loaded", "paramnames": []}}, "undocumented": true, "name": "resolveMsg", "longname": "~_loadPackage~resolveMsg", "kind": "member", "memberof": "~_loadPackage", "scope": "inner"}, {"comment": "", "meta": {"range": [8367, 8403], "filename": "pyodide.js", "lineno": 237, "columnno": 6, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100000762", "name": "loadPackageChain", "type": "CallExpression", "value": ""}}, "undocumented": true, "name": "loadPackageChain", "longname": "~loadPackageChain", "kind": "member", "memberof": "", "scope": "inner", "params": []}, {"comment": "/**\n *\n * The list of packages that Pyodide has loaded.\n * Use ``Object.keys(pyodide.loadedPackages)`` to get the list of names of\n * loaded packages, and ``pyodide.loadedPackages[package_name]`` to access\n * install location for a particular ``package_name``.\n *\n * @type {object}\n */", "meta": {"range": [8712, 8738], "filename": "pyodide.js", "lineno": 248, "columnno": 2, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100000769", "name": "Module.loadedPackages", "type": "ObjectExpression", "funcscope": "", "value": "{}", "paramnames": []}}, "description": "The list of packages that Pyodide has loaded.\nUse ``Object.keys(pyodide.loadedPackages)`` to get the list of names of\nloaded packages, and ``pyodide.loadedPackages[package_name]`` to access\ninstall location for a particular ``package_name``.", "type": {"names": ["object"]}, "name": "loadedPackages", "longname": "~Module.loadedPackages", "kind": "member", "memberof": "~Module", "scope": "static"}, {"comment": "/**\n * Load a package or a list of packages over the network.\n * This makes the files for the package available in the virtual filesystem.\n * The package needs to be imported from Python before it can be used.\n * @param {String | Array} names package name, or URL. Can be either a single\n * element, or an array\n * @param {function} messageCallback A callback, called with progress messages\n * (optional)\n * @param {function} errorCallback A callback, called with error/warning\n * messages (optional)\n * @returns {Promise} Resolves to ``undefined`` when loading is complete\n */", "meta": {"range": [9345, 11911], "filename": "pyodide.js", "lineno": 262, "columnno": 2, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100000775", "name": "Module.loadPackage", "type": "FunctionExpression", "funcscope": "", "paramnames": ["names", "messageCallback", "errorCallback"]}, "vars": {"names": "~Module.loadPackage~names", "sharedLibraryNames": "~Module.loadPackage~sharedLibraryNames", "sharedLibraryPackagesToLoad": "~Module.loadPackage~sharedLibraryPackagesToLoad", "oldPlugin": "~Module.loadPackage~oldPlugin", "p": "~Module.loadPackage~p", "dynamicLoadHandler": "~Module.loadPackage~dynamicLoadHandler", "": null, "loadPluginOverride": "~Module.loadPackage~loadPluginOverride", "promise": "~Module.loadPackage~promise", "loadPackageChain": "~Module.loadPackage~loadPackageChain"}}, "description": "Load a package or a list of packages over the network.\nThis makes the files for the package available in the virtual filesystem.\nThe package needs to be imported from Python before it can be used.", "params": [{"type": {"names": ["String", "Array"]}, "description": "package name, or URL. Can be either a single\nelement, or an array", "name": "names"}, {"type": {"names": ["function"]}, "description": "A callback, called with progress messages\n(optional)", "name": "messageCallback"}, {"type": {"names": ["function"]}, "description": "A callback, called with error/warning\nmessages (optional)", "name": "errorCallback"}], "returns": [{"type": {"names": ["Promise"]}, "description": "Resolves to ``undefined`` when loading is complete"}], "name": "loadPackage", "longname": "~Module.loadPackage", "kind": "function", "memberof": "~Module", "scope": "static"}, {"comment": "", "meta": {"range": [9467, 9484], "filename": "pyodide.js", "lineno": 265, "columnno": 6, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100000793", "name": "names", "type": "ArrayExpression", "funcscope": "~Module.loadPackage", "value": "[\"names\"]", "paramnames": []}}, "undocumented": true, "name": "names", "longname": "~Module.loadPackage~names", "kind": "member", "memberof": "~Module.loadPackage", "scope": "inner"}, {"comment": "", "meta": {"range": [9617, 9640], "filename": "pyodide.js", "lineno": 269, "columnno": 4, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100000798", "name": "sharedLibraryNames", "type": "ArrayExpression", "funcscope": "~Module.loadPackage", "value": "[]", "paramnames": []}}, "undocumented": true, "name": "sharedLibraryNames", "longname": "~Module.loadPackage~sharedLibraryNames", "kind": "member", "memberof": "~Module.loadPackage", "scope": "inner"}, {"comment": "", "meta": {"range": [9658, 9764], "filename": "pyodide.js", "lineno": 271, "columnno": 6, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100000804", "name": "sharedLibraryPackagesToLoad", "type": "CallExpression", "funcscope": "~Module.loadPackage", "value": "", "paramnames": []}}, "undocumented": true, "name": "sharedLibraryPackagesToLoad", "longname": "~Module.loadPackage~sharedLibraryPackagesToLoad", "kind": "member", "memberof": "~Module.loadPackage", "scope": "inner"}, {"comment": "", "meta": {"range": [10448, 10457], "filename": "pyodide.js", "lineno": 287, "columnno": 8, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100000826", "name": "oldPlugin"}}, "undocumented": true, "name": "oldPlugin", "longname": "~Module.loadPackage~oldPlugin", "kind": "member", "memberof": "~Module.loadPackage", "scope": "inner", "params": []}, {"comment": "", "meta": {"range": [10472, 10473], "filename": "pyodide.js", "lineno": 288, "columnno": 13, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100000830", "name": "p"}}, "undocumented": true, "name": "p", "longname": "~Module.loadPackage~p", "kind": "member", "memberof": "~Module.loadPackage", "scope": "inner", "params": []}, {"comment": "", "meta": {"range": [10569, 10605], "filename": "pyodide.js", "lineno": 290, "columnno": 8, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100000848", "name": "oldPlugin", "type": "MemberExpression", "funcscope": "~Module.loadPackage", "value": "Module.preloadPlugins[undefined]", "paramnames": []}}, "undocumented": true, "name": "oldPlugin", "longname": "~Module.loadPackage~oldPlugin", "kind": "member", "memberof": "~Module.loadPackage", "scope": "inner"}, {"comment": "", "meta": {"range": [10644, 11154], "filename": "pyodide.js", "lineno": 294, "columnno": 8, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100000857", "name": "dynamicLoadHandler", "type": "ObjectExpression", "value": "{\"get\":\"\"}"}}, "undocumented": true, "name": "dynamicLoadHandler", "longname": "~Module.loadPackage~dynamicLoadHandler", "kind": "member", "memberof": "~Module.loadPackage", "scope": "inner", "params": []}, {"comment": "", "meta": {"range": [10673, 11148], "filename": "pyodide.js", "lineno": 295, "columnno": 6, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100000860", "name": "get", "type": "FunctionExpression"}, "vars": {"": null}}, "undocumented": true, "name": "get", "longname": "~Module.loadPackage~dynamicLoadHandler.get", "kind": "function", "memberof": "~Module.loadPackage~dynamicLoadHandler", "scope": "static"}, {"comment": "", "meta": {"range": [10832, 11072], "filename": "pyodide.js", "lineno": 299, "columnno": 12, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100000885", "name": "this[\"asyncWasmLoadPromise\"]", "type": "CallExpression", "value": "", "paramnames": []}}, "undocumented": true, "name": "\"asyncWasmLoadPromise\"", "longname": "~Module.loadPackage~dynamicLoadHandler.get#\"asyncWasmLoadPromise\"", "kind": "member", "memberof": "~Module.loadPackage~dynamicLoadHandler.get", "scope": "instance"}, {"comment": "", "meta": {"range": [11021, 11034], "filename": "pyodide.js", "lineno": 302, "columnno": 45, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100000904", "name": "global", "type": "Literal", "value": true}}, "undocumented": true, "name": "global", "longname": "global", "kind": "member", "scope": "global"}, {"comment": "", "meta": {"range": [11036, 11051], "filename": "pyodide.js", "lineno": 302, "columnno": 60, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100000906", "name": "nodelete", "type": "Literal", "value": true}}, "undocumented": true, "name": "nodelete", "longname": "nodelete", "kind": "member", "scope": "global"}, {"comment": "", "meta": {"range": [11164, 11225], "filename": "pyodide.js", "lineno": 310, "columnno": 8, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100000914", "name": "loadPluginOverride", "type": "NewExpression", "value": ""}}, "undocumented": true, "name": "loadPluginOverride", "longname": "~Module.loadPackage~loadPluginOverride", "kind": "member", "memberof": "~Module.loadPackage", "scope": "inner", "params": []}, {"comment": "", "meta": {"range": [11325, 11496], "filename": "pyodide.js", "lineno": 314, "columnno": 8, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100000929", "name": "promise", "type": "CallExpression", "value": ""}}, "undocumented": true, "name": "promise", "longname": "~Module.loadPackage~promise", "kind": "member", "memberof": "~Module.loadPackage", "scope": "inner", "params": []}, {"comment": "", "meta": {"range": [11502, 11573], "filename": "pyodide.js", "lineno": 317, "columnno": 4, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100000950", "name": "loadPackageChain", "type": "CallExpression", "funcscope": "~Module.loadPackage", "value": "", "paramnames": []}}, "undocumented": true, "name": "loadPackageChain", "longname": "~Module.loadPackage~loadPackageChain", "kind": "member", "memberof": "~Module.loadPackage", "scope": "inner"}, {"comment": "", "meta": {"range": [11652, 11810], "filename": "pyodide.js", "lineno": 321, "columnno": 4, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100000975", "name": "promise", "type": "CallExpression", "funcscope": "~Module.loadPackage", "value": "", "paramnames": []}}, "undocumented": true, "name": "promise", "longname": "~Module.loadPackage~promise", "kind": "member", "memberof": "~Module.loadPackage", "scope": "inner"}, {"comment": "", "meta": {"range": [11816, 11887], "filename": "pyodide.js", "lineno": 324, "columnno": 4, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100000996", "name": "loadPackageChain", "type": "CallExpression", "funcscope": "~Module.loadPackage", "value": "", "paramnames": []}}, "undocumented": true, "name": "loadPackageChain", "longname": "~Module.loadPackage~loadPackageChain", "kind": "member", "memberof": "~Module.loadPackage", "scope": "inner"}, {"comment": "", "meta": {"range": [12010, 12765], "filename": "pyodide.js", "lineno": 330, "columnno": 2, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100001012", "name": "fixRecursionLimit", "type": "FunctionDeclaration", "paramnames": ["pyodide"]}, "vars": {"depth": "~fixRecursionLimit~depth", "recurse": "~fixRecursionLimit~recurse", "recursionLimit": "~fixRecursionLimit~recursionLimit"}}, "undocumented": true, "name": "fixRecursionLimit", "longname": "~fixRecursionLimit", "kind": "function", "memberof": "", "scope": "inner", "params": []}, {"comment": "", "meta": {"range": [12419, 12428], "filename": "pyodide.js", "lineno": 337, "columnno": 8, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100001017", "name": "depth", "type": "Literal", "value": 0}}, "undocumented": true, "name": "depth", "longname": "~fixRecursionLimit~depth", "kind": "member", "memberof": "~fixRecursionLimit", "scope": "inner", "params": []}, {"comment": "", "meta": {"range": [12434, 12495], "filename": "pyodide.js", "lineno": 338, "columnno": 4, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100001020", "name": "recurse", "type": "FunctionDeclaration", "paramnames": []}, "vars": {"depth": "~fixRecursionLimit~recurse~depth"}}, "undocumented": true, "name": "recurse", "longname": "~fixRecursionLimit~recurse", "kind": "function", "memberof": "~fixRecursionLimit", "scope": "inner", "params": []}, {"comment": "", "meta": {"range": [12461, 12471], "filename": "pyodide.js", "lineno": 339, "columnno": 6, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100001024", "name": "depth", "type": "Literal", "funcscope": "~fixRecursionLimit~recurse", "value": 1, "paramnames": []}}, "undocumented": true, "name": "depth", "longname": "~fixRecursionLimit~recurse~depth", "kind": "member", "memberof": "~fixRecursionLimit~recurse", "scope": "inner"}, {"comment": "", "meta": {"range": [12566, 12593], "filename": "pyodide.js", "lineno": 348, "columnno": 8, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100001038", "name": "recursionLimit", "type": "BinaryExpression", "value": ""}}, "undocumented": true, "name": "recursionLimit", "longname": "~fixRecursionLimit~recursionLimit", "kind": "member", "memberof": "~fixRecursionLimit", "scope": "inner", "params": []}, {"comment": "", "meta": {"range": [12634, 12655], "filename": "pyodide.js", "lineno": 350, "columnno": 6, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100001049", "name": "recursionLimit", "type": "Literal", "funcscope": "~fixRecursionLimit", "value": 1000, "paramnames": []}}, "undocumented": true, "name": "recursionLimit", "longname": "~fixRecursionLimit~recursionLimit", "kind": "member", "memberof": "~fixRecursionLimit", "scope": "inner"}, {"comment": "", "meta": {"range": [12899, 13167], "filename": "pyodide.js", "lineno": 359, "columnno": 6, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100001063", "name": "PUBLIC_API", "type": "ArrayExpression", "value": "[\"globals\",\"loadPackage\",\"loadPackagesFromImports\",\"loadedPackages\",\"pyimport\",\"runPython\",\"runPythonAsync\",\"version\",\"registerJsModule\",\"unregisterJsModule\",\"setInterruptBuffer\",\"pyodide_py\"]"}}, "undocumented": true, "name": "PUBLIC_API", "longname": "~PUBLIC_API", "kind": "member", "memberof": "", "scope": "inner", "params": []}, {"comment": "", "meta": {"range": [13193, 13417], "filename": "pyodide.js", "lineno": 375, "columnno": 2, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100001078", "name": "makePublicAPI", "type": "FunctionDeclaration", "paramnames": ["module", "public_api"]}, "vars": {"namespace": "~makePublicAPI~namespace", "module.public_api": "module.public_api", "name": "~makePublicAPI~name", "namespace[undefined]": "~makePublicAPI~namespace.undefined]"}}, "undocumented": true, "name": "makePublicAPI", "longname": "~makePublicAPI", "kind": "function", "memberof": "", "scope": "inner", "params": []}, {"comment": "", "meta": {"range": [13246, 13276], "filename": "pyodide.js", "lineno": 376, "columnno": 8, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100001084", "name": "namespace", "type": "ObjectExpression", "value": "{\"_module\":\"\"}"}}, "undocumented": true, "name": "namespace", "longname": "~makePublicAPI~namespace", "kind": "member", "memberof": "~makePublicAPI", "scope": "inner", "params": []}, {"comment": "", "meta": {"range": [13259, 13275], "filename": "pyodide.js", "lineno": 376, "columnno": 21, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100001087", "name": "_module", "type": "Identifier", "value": "module"}}, "undocumented": true, "name": "_module", "longname": "~makePublicAPI~namespace._module", "kind": "member", "memberof": "~makePublicAPI~namespace", "scope": "static"}, {"comment": "", "meta": {"range": [13282, 13311], "filename": "pyodide.js", "lineno": 377, "columnno": 4, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100001090", "name": "module.public_api", "type": "Identifier", "value": "namespace", "paramnames": []}}, "undocumented": true, "name": "public_api", "longname": "module.public_api", "kind": "member", "memberof": "module", "scope": "static"}, {"comment": "", "meta": {"range": [13326, 13330], "filename": "pyodide.js", "lineno": 378, "columnno": 13, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100001097", "name": "name"}}, "undocumented": true, "name": "name", "longname": "~makePublicAPI~name", "kind": "member", "memberof": "~makePublicAPI", "scope": "inner", "params": []}, {"comment": "", "meta": {"range": [13354, 13384], "filename": "pyodide.js", "lineno": 379, "columnno": 6, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100001102", "name": "namespace[undefined]", "type": "MemberExpression", "funcscope": "~makePublicAPI", "value": "module[undefined]", "paramnames": []}}, "undocumented": true, "name": "undefined]", "longname": "~makePublicAPI~namespace.undefined]", "kind": "member", "memberof": "~makePublicAPI~namespace", "scope": "static"}, {"comment": "", "meta": {"range": [13505, 13525], "filename": "pyodide.js", "lineno": 386, "columnno": 2, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100001112", "name": "self.Module", "type": "Identifier", "value": "Module", "paramnames": []}}, "undocumented": true, "name": "Module", "longname": "self.Module", "kind": "member", "memberof": "self", "scope": "static"}, {"comment": "", "meta": {"range": [13530, 13559], "filename": "pyodide.js", "lineno": 388, "columnno": 2, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100001118", "name": "Module.noImageDecoding", "type": "Literal", "funcscope": "", "value": true, "paramnames": []}}, "undocumented": true, "name": "noImageDecoding", "longname": "~Module.noImageDecoding", "kind": "member", "memberof": "~Module", "scope": "static"}, {"comment": "", "meta": {"range": [13563, 13592], "filename": "pyodide.js", "lineno": 389, "columnno": 2, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100001124", "name": "Module.noAudioDecoding", "type": "Literal", "funcscope": "", "value": true, "paramnames": []}}, "undocumented": true, "name": "noAudioDecoding", "longname": "~Module.noAudioDecoding", "kind": "member", "memberof": "~Module", "scope": "static"}, {"comment": "", "meta": {"range": [13596, 13631], "filename": "pyodide.js", "lineno": 390, "columnno": 2, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100001130", "name": "Module.noWasmDecoding", "type": "Literal", "funcscope": "", "value": false, "paramnames": []}}, "undocumented": true, "name": "noWasmDecoding", "longname": "~Module.noWasmDecoding", "kind": "member", "memberof": "~Module", "scope": "static"}, {"comment": "", "meta": {"range": [13684, 13709], "filename": "pyodide.js", "lineno": 392, "columnno": 2, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100001136", "name": "Module.preloadedWasm", "type": "ObjectExpression", "funcscope": "", "value": "{}", "paramnames": []}}, "undocumented": true, "name": "preloadedWasm", "longname": "~Module.preloadedWasm", "kind": "member", "memberof": "~Module", "scope": "static"}, {"comment": "", "meta": {"range": [13718, 13746], "filename": "pyodide.js", "lineno": 394, "columnno": 6, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100001142", "name": "fatal_error_occurred", "type": "Literal", "value": false}}, "undocumented": true, "name": "fatal_error_occurred", "longname": "~fatal_error_occurred", "kind": "member", "memberof": "", "scope": "inner", "params": []}, {"comment": "", "meta": {"range": [13754, 13891], "filename": "pyodide.js", "lineno": 395, "columnno": 6, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100001146", "name": "fatal_error_msg", "type": "BinaryExpression", "value": ""}}, "undocumented": true, "name": "fatal_error_msg", "longname": "~fatal_error_msg", "kind": "member", "memberof": "", "scope": "inner", "params": []}, {"comment": "", "meta": {"range": [13895, 14734], "filename": "pyodide.js", "lineno": 398, "columnno": 2, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100001152", "name": "Module.fatal_error", "type": "FunctionExpression", "funcscope": "", "paramnames": ["e"]}, "vars": {"fatal_error_occurred": "~Module.fatal_error~fatal_error_occurred", "undefined": null, "Module.public_api[undefined]": "~Module.public_api[undefined]", "": null}}, "undocumented": true, "name": "fatal_error", "longname": "~Module.fatal_error", "kind": "function", "memberof": "~Module", "scope": "static"}, {"comment": "", "meta": {"range": [14040, 14067], "filename": "pyodide.js", "lineno": 403, "columnno": 4, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100001170", "name": "fatal_error_occurred", "type": "Literal", "funcscope": "~Module.fatal_error", "value": true, "paramnames": []}}, "undocumented": true, "name": "fatal_error_occurred", "longname": "~Module.fatal_error~fatal_error_occurred", "kind": "member", "memberof": "~Module.fatal_error", "scope": "inner"}, {"comment": "", "meta": {"range": [14606, 14675], "filename": "pyodide.js", "lineno": 419, "columnno": 10, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100001230", "name": "Module.public_api[undefined]", "type": "FunctionExpression", "funcscope": "", "paramnames": []}}, "undocumented": true, "name": "public_api[undefined]", "longname": "~Module.public_api[undefined]", "kind": "function", "memberof": "~Module", "scope": "static"}, {"comment": "/**\n * An alias to the Python pyodide package.\n *\n * @type {PyProxy}\n */", "meta": {"range": [14822, 14844], "filename": "pyodide.js", "lineno": 432, "columnno": 2, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100001246", "name": "Module.pyodide_py", "type": "ObjectExpression", "funcscope": "", "value": "{}", "paramnames": []}}, "description": "An alias to the Python pyodide package.", "type": {"names": ["PyProxy"]}, "name": "pyodide_py", "longname": "~Module.pyodide_py", "kind": "member", "memberof": "~Module", "scope": "static"}, {"comment": "/**\n *\n * An alias to the global Python namespace.\n *\n * An object whose attributes are members of the Python global namespace. This\n * is an alternative to :meth:`pyimport`. For example, to access the ``foo``\n * Python object from Javascript use\n * ``pyodide.globals.get(\"foo\")``\n *\n * @type {PyProxy}\n */", "meta": {"range": [15207, 15226], "filename": "pyodide.js", "lineno": 445, "columnno": 2, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100001252", "name": "Module.globals", "type": "ObjectExpression", "funcscope": "", "value": "{}", "paramnames": []}}, "description": "An alias to the global Python namespace.\n\nAn object whose attributes are members of the Python global namespace. This\nis an alternative to :meth:`pyimport`. For example, to access the ``foo``\nPython object from Javascript use\n``pyodide.globals.get(\"foo\")``", "type": {"names": ["PyProxy"]}, "name": "globals", "longname": "~Module.globals", "kind": "member", "memberof": "~Module", "scope": "static"}, {"comment": "/**\n *\n * The pyodide version.\n *\n * It can be either the exact release version (e.g. ``0.1.0``), or\n * the latest release version followed by the number of commits since, and\n * the git hash of the current commit (e.g. ``0.1.0-1-bd84646``).\n *\n * @type {string}\n */", "meta": {"range": [15547, 15566], "filename": "pyodide.js", "lineno": 457, "columnno": 2, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100001258", "name": "Module.version", "type": "Literal", "funcscope": "", "value": "", "paramnames": []}}, "description": "The pyodide version.\n\nIt can be either the exact release version (e.g. ``0.1.0``), or\nthe latest release version followed by the number of commits since, and\nthe git hash of the current commit (e.g. ``0.1.0-1-bd84646``).", "type": {"names": ["string"]}, "name": "version", "longname": "~Module.version", "kind": "member", "memberof": "~Module", "scope": "static"}, {"comment": "/**\n * Run Python code in the simplest way possible. The primary purpose of this\n * method is for bootstrapping. It is also useful for debugging: If the Python\n * interpreter is initialized successfully then it should be possible to use\n * this method to run Python code even if everything else in the Pyodide\n * `core` module fails.\n *\n * The differences are:\n * 1. `runPythonSimple` doesn't return anything (and so won't leak\n * PyProxies)\n * 2. `runPythonSimple` doesn't require access to any state on the\n * `pyodide_js` module.\n * 3. `runPython` uses `pyodide.eval_code`, whereas `runPythonSimple` uses\n * `PyRun_String` which is the C API for `eval` / `exec`.\n * 4. `runPythonSimple` runs with `globals` a separate dict which is called\n * `init_dict` (keeps global state private)\n * 5. `runPythonSimple` doesn't dedent the argument\n *\n * When `core` initialization is completed, the globals for `runPythonSimple`\n * is made available as `Module.init_dict`.\n *\n * @private\n */", "meta": {"range": [16668, 16888], "filename": "pyodide.js", "lineno": 482, "columnno": 2, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100001264", "name": "Module.runPythonSimple", "type": "FunctionExpression", "funcscope": "", "paramnames": ["code"]}, "vars": {"code_c_string": "~Module.runPythonSimple~code_c_string"}}, "description": "Run Python code in the simplest way possible. The primary purpose of this\nmethod is for bootstrapping. It is also useful for debugging: If the Python\ninterpreter is initialized successfully then it should be possible to use\nthis method to run Python code even if everything else in the Pyodide\n`core` module fails.\n\nThe differences are:\n 1. `runPythonSimple` doesn't return anything (and so won't leak\n PyProxies)\n 2. `runPythonSimple` doesn't require access to any state on the\n `pyodide_js` module.\n 3. `runPython` uses `pyodide.eval_code`, whereas `runPythonSimple` uses\n `PyRun_String` which is the C API for `eval` / `exec`.\n 4. `runPythonSimple` runs with `globals` a separate dict which is called\n `init_dict` (keeps global state private)\n 5. `runPythonSimple` doesn't dedent the argument\n\nWhen `core` initialization is completed, the globals for `runPythonSimple`\nis made available as `Module.init_dict`.", "access": "private", "name": "runPythonSimple", "longname": "~Module.runPythonSimple", "kind": "function", "memberof": "~Module", "scope": "static"}, {"comment": "", "meta": {"range": [16718, 16762], "filename": "pyodide.js", "lineno": 483, "columnno": 8, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100001272", "name": "code_c_string", "type": "CallExpression", "value": ""}}, "undocumented": true, "name": "code_c_string", "longname": "~Module.runPythonSimple~code_c_string", "kind": "member", "memberof": "~Module.runPythonSimple", "scope": "inner", "params": []}, {"comment": "/**\n * Runs a string of Python code from Javascript.\n *\n * The last part of the string may be an expression, in which case, its value\n * is returned.\n *\n * @param {string} code Python code to evaluate\n * @returns The result of the python code converted to Javascript\n */", "meta": {"range": [17182, 17302], "filename": "pyodide.js", "lineno": 500, "columnno": 2, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100001295", "name": "Module.runPython", "type": "FunctionExpression", "funcscope": "", "paramnames": ["code", "globals"]}}, "description": "Runs a string of Python code from Javascript.\n\nThe last part of the string may be an expression, in which case, its value\nis returned.", "params": [{"type": {"names": ["string"]}, "description": "Python code to evaluate", "name": "code"}], "returns": [{"description": "The result of the python code converted to Javascript"}], "name": "runPython", "longname": "~Module.runPython", "kind": "function", "memberof": "~Module", "scope": "static"}, {"comment": "/**\n * Inspect a Python code chunk and use :js:func:`pyodide.loadPackage` to load any known \n * packages that the code chunk imports. Uses \n * :func:`pyodide_py.find_imports ` to inspect the code.\n * \n * For example, given the following code as input\n * \n * .. code-block:: python\n * \n * import numpy as np\n * x = np.array([1, 2, 3])\n * \n * :js:func:`loadPackagesFromImports` will call ``pyodide.loadPackage(['numpy'])``.\n * See also :js:func:`runPythonAsync`.\n *\n * @param {*} code \n * @param {*} messageCallback \n * @param {*} errorCallback \n */", "meta": {"range": [17944, 18511], "filename": "pyodide.js", "lineno": 524, "columnno": 2, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100001317", "name": "Module.loadPackagesFromImports", "type": "FunctionExpression", "funcscope": "", "paramnames": ["code", "messageCallback", "errorCallback"]}, "vars": {"imports": "~Module.loadPackagesFromImports~imports", "packageNames": "~Module.loadPackagesFromImports~packageNames", "packages": "~Module.loadPackagesFromImports~packages", "name": "~Module.loadPackagesFromImports~name"}}, "description": "Inspect a Python code chunk and use :js:func:`pyodide.loadPackage` to load any known \npackages that the code chunk imports. Uses \n:func:`pyodide_py.find_imports ` to inspect the code.\n\nFor example, given the following code as input\n\n.. code-block:: python\n\n import numpy as np\n x = np.array([1, 2, 3])\n\n:js:func:`loadPackagesFromImports` will call ``pyodide.loadPackage(['numpy'])``.\nSee also :js:func:`runPythonAsync`.", "params": [{"type": {"names": ["*"]}, "name": "code"}, {"type": {"names": ["*"]}, "name": "messageCallback"}, {"type": {"names": ["*"]}, "name": "errorCallback"}], "name": "loadPackagesFromImports", "longname": "~Module.loadPackagesFromImports", "async": true, "kind": "function", "memberof": "~Module", "scope": "static"}, {"comment": "", "meta": {"range": [18041, 18094], "filename": "pyodide.js", "lineno": 525, "columnno": 8, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100001327", "name": "imports", "type": "CallExpression", "value": ""}}, "undocumented": true, "name": "imports", "longname": "~Module.loadPackagesFromImports~imports", "kind": "member", "memberof": "~Module.loadPackagesFromImports", "scope": "inner", "params": []}, {"comment": "", "meta": {"range": [18156, 18214], "filename": "pyodide.js", "lineno": 529, "columnno": 8, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100001348", "name": "packageNames", "type": "MemberExpression", "value": "Module.packages.import_name_to_package_name"}}, "undocumented": true, "name": "packageNames", "longname": "~Module.loadPackagesFromImports~packageNames", "kind": "member", "memberof": "~Module.loadPackagesFromImports", "scope": "inner", "params": []}, {"comment": "", "meta": {"range": [18224, 18244], "filename": "pyodide.js", "lineno": 530, "columnno": 8, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100001356", "name": "packages", "type": "NewExpression", "value": ""}}, "undocumented": true, "name": "packages", "longname": "~Module.loadPackagesFromImports~packages", "kind": "member", "memberof": "~Module.loadPackagesFromImports", "scope": "inner", "params": []}, {"comment": "", "meta": {"range": [18259, 18263], "filename": "pyodide.js", "lineno": 531, "columnno": 13, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100001362", "name": "name"}}, "undocumented": true, "name": "name", "longname": "~Module.loadPackagesFromImports~name", "kind": "member", "memberof": "~Module.loadPackagesFromImports", "scope": "inner", "params": []}, {"comment": "/**\n * Access a Python object in the global namespace from Javascript.\n * @param {string} name Python variable name\n * @returns If the Python object is an immutable type (string, number,\n * boolean), it is converted to Javascript and returned. For other types, a\n * ``PyProxy`` object is returned.\n */", "meta": {"range": [18854, 18904], "filename": "pyodide.js", "lineno": 551, "columnno": 2, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100001401", "name": "Module.pyimport", "type": "ArrowFunctionExpression", "funcscope": "", "paramnames": ["name"]}}, "description": "Access a Python object in the global namespace from Javascript.", "params": [{"type": {"names": ["string"]}, "description": "Python variable name", "name": "name"}], "returns": [{"description": "If the Python object is an immutable type (string, number,\nboolean), it is converted to Javascript and returned. For other types, a\n``PyProxy`` object is returned."}], "name": "pyimport", "longname": "~Module.pyimport", "kind": "function", "memberof": "~Module", "scope": "static"}, {"comment": "/**\n * Runs Python code, possibly asynchronously loading any known packages that\n * the code imports. For example, given the following code\n *\n * .. code-block:: python\n *\n * import numpy as np\n * x = np.array([1, 2, 3])\n *\n * pyodide will first call ``pyodide.loadPackage(['numpy'])``, and then run\n * the code, returning the result. Since package fetching must happen\n * asynchronously, this function returns a `Promise` which resolves to the\n * output. For example:\n *\n * .. code-block:: javascript\n *\n * pyodide.runPythonAsync(code, messageCallback)\n * .then((output) => handleOutput(output))\n *\n * @param {string} code Python code to evaluate\n * @param {Function} messageCallback A callback, called with progress\n * messages. (optional)\n * @param {Function} errorCallback A callback, called with error/warning\n * messages. (optional)\n */", "meta": {"range": [19821, 20176], "filename": "pyodide.js", "lineno": 578, "columnno": 2, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100001415", "name": "Module.runPythonAsync", "type": "FunctionExpression", "funcscope": "", "paramnames": ["code", "messageCallback", "errorCallback"]}, "vars": {"coroutine": "~Module.runPythonAsync~coroutine", "result": "~Module.runPythonAsync~result"}}, "description": "Runs Python code, possibly asynchronously loading any known packages that\nthe code imports. For example, given the following code\n\n.. code-block:: python\n\n import numpy as np\n x = np.array([1, 2, 3])\n\npyodide will first call ``pyodide.loadPackage(['numpy'])``, and then run\nthe code, returning the result. Since package fetching must happen\nasynchronously, this function returns a `Promise` which resolves to the\noutput. For example:\n\n.. code-block:: javascript\n\n pyodide.runPythonAsync(code, messageCallback)\n .then((output) => handleOutput(output))", "params": [{"type": {"names": ["string"]}, "description": "Python code to evaluate", "name": "code"}, {"type": {"names": ["function"]}, "description": "A callback, called with progress\nmessages. (optional)", "name": "messageCallback"}, {"type": {"names": ["function"]}, "description": "A callback, called with error/warning\nmessages. (optional)", "name": "errorCallback"}], "name": "runPythonAsync", "longname": "~Module.runPythonAsync", "kind": "function", "memberof": "~Module", "scope": "static"}, {"comment": "", "meta": {"range": [19988, 20055], "filename": "pyodide.js", "lineno": 580, "columnno": 8, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100001434", "name": "coroutine", "type": "CallExpression", "value": ""}}, "undocumented": true, "name": "coroutine", "longname": "~Module.runPythonAsync~coroutine", "kind": "member", "memberof": "~Module.runPythonAsync", "scope": "inner", "params": []}, {"comment": "", "meta": {"range": [20077, 20101], "filename": "pyodide.js", "lineno": 582, "columnno": 10, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100001449", "name": "result", "type": "AwaitExpression", "value": ""}}, "undocumented": true, "name": "result", "longname": "~Module.runPythonAsync~result", "kind": "member", "memberof": "~Module.runPythonAsync", "scope": "inner", "params": []}, {"comment": "/**\n * Registers the Js object ``module`` as a Js module with ``name``.\n * This module can then be imported from Python using the standard Python\n * import system. If another module by the same name has already been\n * imported, this won't have much effect unless you also delete the imported\n * module from\n * ``sys.modules``. This calls the ``pyodide_py`` api\n * :func:`pyodide.register_js_module`.\n *\n * @param {string} name Name of js module to add\n * @param {object} module Javascript object backing the module\n */", "meta": {"range": [20747, 20859], "filename": "pyodide.js", "lineno": 602, "columnno": 2, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100001462", "name": "Module.registerJsModule", "type": "FunctionExpression", "funcscope": "", "paramnames": ["name", "module"]}}, "description": "Registers the Js object ``module`` as a Js module with ``name``.\nThis module can then be imported from Python using the standard Python\nimport system. If another module by the same name has already been\nimported, this won't have much effect unless you also delete the imported\nmodule from\n``sys.modules``. This calls the ``pyodide_py`` api\n:func:`pyodide.register_js_module`.", "params": [{"type": {"names": ["string"]}, "description": "Name of js module to add", "name": "name"}, {"type": {"names": ["object"]}, "description": "Javascript object backing the module", "name": "module"}], "name": "registerJsModule", "longname": "~Module.registerJsModule", "kind": "function", "memberof": "~Module", "scope": "static"}, {"comment": "/**\n * Unregisters a Js module with given name that has been previously registered\n * with :js:func:`pyodide.registerJsModule` or :func:`pyodide.register_js_module`. If\n * a Js module with that name does not already exist, will throw an error.\n * Note that if the module has already been imported, this won't have much\n * effect unless you also delete the imported module from ``sys.modules``.\n * This calls the\n * ``pyodide_py`` api :func:`pyodide.unregister_js_module`.\n *\n * @param {string} name Name of js module to remove\n */", "meta": {"range": [21417, 21517], "filename": "pyodide.js", "lineno": 617, "columnno": 2, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100001480", "name": "Module.unregisterJsModule", "type": "FunctionExpression", "funcscope": "", "paramnames": ["name"]}}, "description": "Unregisters a Js module with given name that has been previously registered\nwith :js:func:`pyodide.registerJsModule` or :func:`pyodide.register_js_module`. If\na Js module with that name does not already exist, will throw an error.\nNote that if the module has already been imported, this won't have much\neffect unless you also delete the imported module from ``sys.modules``.\nThis calls the\n``pyodide_py`` api :func:`pyodide.unregister_js_module`.", "params": [{"type": {"names": ["string"]}, "description": "Name of js module to remove", "name": "name"}], "name": "unregisterJsModule", "longname": "~Module.unregisterJsModule", "kind": "function", "memberof": "~Module", "scope": "static"}, {"comment": "", "meta": {"range": [21543, 24666], "filename": "pyodide.js", "lineno": 622, "columnno": 2, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100001496", "name": "Module.function_supports_kwargs", "type": "FunctionExpression", "funcscope": "", "paramnames": ["funcstr"]}, "vars": {"idx": "~Module.function_supports_kwargs~idx", "START_ARG": "~Module.function_supports_kwargs~START_ARG", "ARG": "~Module.function_supports_kwargs~ARG", "QUOTE": "~Module.function_supports_kwargs~QUOTE", "QUOTE_ESCAPE": "~Module.function_supports_kwargs~QUOTE_ESCAPE", "paren_depth": "~Module.function_supports_kwargs~paren_depth", "arg_start": "~Module.function_supports_kwargs~arg_start", "arg_is_obj_dest": "~Module.function_supports_kwargs~arg_is_obj_dest", "quote_start": "~Module.function_supports_kwargs~quote_start", "state": "~Module.function_supports_kwargs~state", "i": "~Module.function_supports_kwargs~i", "x": "~Module.function_supports_kwargs~x"}}, "undocumented": true, "name": "function_supports_kwargs", "longname": "~Module.function_supports_kwargs", "kind": "function", "memberof": "~Module", "scope": "static"}, {"comment": "", "meta": {"range": [21718, 21748], "filename": "pyodide.js", "lineno": 625, "columnno": 8, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100001504", "name": "idx", "type": "BinaryExpression", "value": ""}}, "undocumented": true, "name": "idx", "longname": "~Module.function_supports_kwargs~idx", "kind": "member", "memberof": "~Module.function_supports_kwargs", "scope": "inner", "params": []}, {"comment": "", "meta": {"range": [22624, 22637], "filename": "pyodide.js", "lineno": 640, "columnno": 8, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100001514", "name": "START_ARG", "type": "Literal", "value": 1}}, "undocumented": true, "name": "START_ARG", "longname": "~Module.function_supports_kwargs~START_ARG", "kind": "member", "memberof": "~Module.function_supports_kwargs", "scope": "inner", "params": []}, {"comment": "", "meta": {"range": [22647, 22654], "filename": "pyodide.js", "lineno": 641, "columnno": 8, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100001518", "name": "ARG", "type": "Literal", "value": 2}}, "undocumented": true, "name": "ARG", "longname": "~Module.function_supports_kwargs~ARG", "kind": "member", "memberof": "~Module.function_supports_kwargs", "scope": "inner", "params": []}, {"comment": "", "meta": {"range": [22664, 22673], "filename": "pyodide.js", "lineno": 642, "columnno": 8, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100001522", "name": "QUOTE", "type": "Literal", "value": 3}}, "undocumented": true, "name": "QUOTE", "longname": "~Module.function_supports_kwargs~QUOTE", "kind": "member", "memberof": "~Module.function_supports_kwargs", "scope": "inner", "params": []}, {"comment": "", "meta": {"range": [22683, 22699], "filename": "pyodide.js", "lineno": 643, "columnno": 8, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100001526", "name": "QUOTE_ESCAPE", "type": "Literal", "value": 4}}, "undocumented": true, "name": "QUOTE_ESCAPE", "longname": "~Module.function_supports_kwargs~QUOTE_ESCAPE", "kind": "member", "memberof": "~Module.function_supports_kwargs", "scope": "inner", "params": []}, {"comment": "", "meta": {"range": [22709, 22724], "filename": "pyodide.js", "lineno": 644, "columnno": 8, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100001530", "name": "paren_depth", "type": "Literal", "value": 0}}, "undocumented": true, "name": "paren_depth", "longname": "~Module.function_supports_kwargs~paren_depth", "kind": "member", "memberof": "~Module.function_supports_kwargs", "scope": "inner", "params": []}, {"comment": "", "meta": {"range": [22734, 22747], "filename": "pyodide.js", "lineno": 645, "columnno": 8, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100001534", "name": "arg_start", "type": "Literal", "value": 0}}, "undocumented": true, "name": "arg_start", "longname": "~Module.function_supports_kwargs~arg_start", "kind": "member", "memberof": "~Module.function_supports_kwargs", "scope": "inner", "params": []}, {"comment": "", "meta": {"range": [22757, 22780], "filename": "pyodide.js", "lineno": 646, "columnno": 8, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100001538", "name": "arg_is_obj_dest", "type": "Literal", "value": false}}, "undocumented": true, "name": "arg_is_obj_dest", "longname": "~Module.function_supports_kwargs~arg_is_obj_dest", "kind": "member", "memberof": "~Module.function_supports_kwargs", "scope": "inner", "params": []}, {"comment": "", "meta": {"range": [22790, 22813], "filename": "pyodide.js", "lineno": 647, "columnno": 8, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100001542", "name": "quote_start", "type": "Identifier", "value": "undefined"}}, "undocumented": true, "name": "quote_start", "longname": "~Module.function_supports_kwargs~quote_start", "kind": "member", "memberof": "~Module.function_supports_kwargs", "scope": "inner", "params": []}, {"comment": "", "meta": {"range": [22823, 22840], "filename": "pyodide.js", "lineno": 648, "columnno": 8, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100001546", "name": "state", "type": "Identifier", "value": "START_ARG"}}, "undocumented": true, "name": "state", "longname": "~Module.function_supports_kwargs~state", "kind": "member", "memberof": "~Module.function_supports_kwargs", "scope": "inner", "params": []}, {"comment": "", "meta": {"range": [22875, 22882], "filename": "pyodide.js", "lineno": 650, "columnno": 9, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100001550", "name": "i", "type": "Identifier", "funcscope": "~Module.function_supports_kwargs", "value": "idx", "paramnames": []}}, "undocumented": true, "name": "i", "longname": "~Module.function_supports_kwargs~i", "kind": "member", "memberof": "~Module.function_supports_kwargs", "scope": "inner"}, {"comment": "", "meta": {"range": [22921, 22935], "filename": "pyodide.js", "lineno": 651, "columnno": 10, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100001562", "name": "x", "type": "MemberExpression", "value": "funcstr[undefined]"}}, "undocumented": true, "name": "x", "longname": "~Module.function_supports_kwargs~x", "kind": "member", "memberof": "~Module.function_supports_kwargs", "scope": "inner", "params": []}, {"comment": "", "meta": {"range": [23066, 23077], "filename": "pyodide.js", "lineno": 656, "columnno": 12, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100001577", "name": "state", "type": "Identifier", "funcscope": "~Module.function_supports_kwargs", "value": "ARG", "paramnames": []}}, "undocumented": true, "name": "state", "longname": "~Module.function_supports_kwargs~state", "kind": "member", "memberof": "~Module.function_supports_kwargs", "scope": "inner"}, {"comment": "", "meta": {"range": [23134, 23154], "filename": "pyodide.js", "lineno": 659, "columnno": 12, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100001584", "name": "state", "type": "Identifier", "funcscope": "~Module.function_supports_kwargs", "value": "QUOTE_ESCAPE", "paramnames": []}}, "undocumented": true, "name": "state", "longname": "~Module.function_supports_kwargs~state", "kind": "member", "memberof": "~Module.function_supports_kwargs", "scope": "inner"}, {"comment": "", "meta": {"range": [23279, 23292], "filename": "pyodide.js", "lineno": 666, "columnno": 8, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100001596", "name": "state", "type": "Identifier", "funcscope": "~Module.function_supports_kwargs", "value": "QUOTE", "paramnames": []}}, "undocumented": true, "name": "state", "longname": "~Module.function_supports_kwargs~state", "kind": "member", "memberof": "~Module.function_supports_kwargs", "scope": "inner"}, {"comment": "", "meta": {"range": [23824, 23841], "filename": "pyodide.js", "lineno": 681, "columnno": 10, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100001640", "name": "state", "type": "Identifier", "funcscope": "~Module.function_supports_kwargs", "value": "START_ARG", "paramnames": []}}, "undocumented": true, "name": "state", "longname": "~Module.function_supports_kwargs~state", "kind": "member", "memberof": "~Module.function_supports_kwargs", "scope": "inner"}, {"comment": "", "meta": {"range": [24029, 24040], "filename": "pyodide.js", "lineno": 688, "columnno": 8, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100001650", "name": "state", "type": "Identifier", "funcscope": "~Module.function_supports_kwargs", "value": "ARG", "paramnames": []}}, "undocumented": true, "name": "state", "longname": "~Module.function_supports_kwargs~state", "kind": "member", "memberof": "~Module.function_supports_kwargs", "scope": "inner"}, {"comment": "", "meta": {"range": [24050, 24077], "filename": "pyodide.js", "lineno": 689, "columnno": 8, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100001654", "name": "arg_is_obj_dest", "type": "BinaryExpression", "funcscope": "~Module.function_supports_kwargs", "value": "", "paramnames": []}}, "undocumented": true, "name": "arg_is_obj_dest", "longname": "~Module.function_supports_kwargs~arg_is_obj_dest", "kind": "member", "memberof": "~Module.function_supports_kwargs", "scope": "inner"}, {"comment": "", "meta": {"range": [24375, 24388], "filename": "pyodide.js", "lineno": 700, "columnno": 10, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100001688", "name": "state", "type": "Identifier", "funcscope": "~Module.function_supports_kwargs", "value": "QUOTE", "paramnames": []}}, "undocumented": true, "name": "state", "longname": "~Module.function_supports_kwargs~state", "kind": "member", "memberof": "~Module.function_supports_kwargs", "scope": "inner"}, {"comment": "", "meta": {"range": [24400, 24415], "filename": "pyodide.js", "lineno": 701, "columnno": 10, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100001692", "name": "quote_start", "type": "Identifier", "funcscope": "~Module.function_supports_kwargs", "value": "x", "paramnames": []}}, "undocumented": true, "name": "quote_start", "longname": "~Module.function_supports_kwargs~quote_start", "kind": "member", "memberof": "~Module.function_supports_kwargs", "scope": "inner"}, {"comment": "", "meta": {"range": [24671, 24715], "filename": "pyodide.js", "lineno": 711, "columnno": 2, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100001701", "name": "Module.locateFile", "type": "ArrowFunctionExpression", "funcscope": "", "paramnames": ["path"]}}, "undocumented": true, "name": "locateFile", "longname": "~Module.locateFile", "kind": "function", "memberof": "~Module", "scope": "static"}, {"comment": "", "meta": {"range": [24724, 24775], "filename": "pyodide.js", "lineno": 713, "columnno": 6, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100001711", "name": "moduleLoaded", "type": "NewExpression", "value": ""}}, "undocumented": true, "name": "moduleLoaded", "longname": "~moduleLoaded", "kind": "member", "memberof": "", "scope": "inner", "params": []}, {"comment": "", "meta": {"range": [24756, 24774], "filename": "pyodide.js", "lineno": 713, "columnno": 38, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100001717", "name": "Module.postRun", "type": "Identifier", "funcscope": "", "value": "r", "paramnames": []}}, "undocumented": true, "name": "postRun", "longname": ".postRun", "kind": "member", "memberof": "", "scope": "static"}, {"comment": "", "meta": {"range": [24786, 24824], "filename": "pyodide.js", "lineno": 715, "columnno": 8, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100001723", "name": "scriptSrc", "type": "TemplateLiteral", "value": ""}}, "undocumented": true, "name": "scriptSrc", "longname": "~scriptSrc", "kind": "constant", "memberof": "", "scope": "inner", "params": []}, {"comment": "", "meta": {"range": [25075, 25111], "filename": "pyodide.js", "lineno": 722, "columnno": 2, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100001735", "name": "self.pyodide", "type": "AwaitExpression", "value": "", "paramnames": []}}, "undocumented": true, "name": "pyodide", "longname": "self.pyodide", "kind": "member", "memberof": "self", "scope": "static"}, {"comment": "", "meta": {"range": [25752, 25814], "filename": "pyodide.js", "lineno": 746, "columnno": 2, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100001754", "name": "Module.saveState", "type": "ArrowFunctionExpression", "funcscope": "", "paramnames": []}}, "undocumented": true, "name": "saveState", "longname": "~Module.saveState", "kind": "function", "memberof": "~Module", "scope": "static"}, {"comment": "", "meta": {"range": [25818, 25902], "filename": "pyodide.js", "lineno": 747, "columnno": 2, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100001768", "name": "Module.restoreState", "type": "ArrowFunctionExpression", "funcscope": "", "paramnames": ["state"]}}, "undocumented": true, "name": "restoreState", "longname": "~Module.restoreState", "kind": "function", "memberof": "~Module", "scope": "static"}, {"comment": "", "meta": {"range": [26107, 26160], "filename": "pyodide.js", "lineno": 755, "columnno": 2, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100001794", "name": "Module.globals", "type": "CallExpression", "funcscope": "", "value": "", "paramnames": []}}, "undocumented": true, "name": "globals", "longname": "~Module.globals", "kind": "member", "memberof": "~Module", "scope": "static"}, {"comment": "", "meta": {"range": [26191, 26240], "filename": "pyodide.js", "lineno": 758, "columnno": 6, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100001811", "name": "response", "type": "AwaitExpression", "value": ""}}, "undocumented": true, "name": "response", "longname": "~response", "kind": "member", "memberof": "", "scope": "inner", "params": []}, {"comment": "", "meta": {"range": [26244, 26283], "filename": "pyodide.js", "lineno": 759, "columnno": 2, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100001821", "name": "Module.packages", "type": "AwaitExpression", "funcscope": "", "value": "", "paramnames": []}}, "undocumented": true, "name": "packages", "longname": "~Module.packages", "kind": "member", "memberof": "~Module", "scope": "static"}, {"comment": "", "meta": {"range": [26323, 26377], "filename": "pyodide.js", "lineno": 762, "columnno": 2, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100001837", "name": "self.pyodide", "type": "CallExpression", "value": "", "paramnames": []}}, "undocumented": true, "name": "pyodide", "longname": "self.pyodide", "kind": "member", "memberof": "self", "scope": "static"}, {"comment": "", "meta": {"range": [0, 49], "filename": "webworker.js", "lineno": 1, "columnno": 0, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100001872", "name": "self.languagePluginUrl", "type": "Literal", "value": "{{ PYODIDE_BASE_URL }}", "paramnames": []}}, "undocumented": true, "name": "languagePluginUrl", "longname": "self.languagePluginUrl", "kind": "member", "memberof": "self", "scope": "static"}, {"comment": "", "meta": {"range": [81, 694], "filename": "webworker.js", "lineno": 4, "columnno": 0, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100001882", "name": "onmessage", "type": "FunctionExpression", "paramnames": ["e"]}, "vars": {"data": "onmessage~data", "key": "onmessage~key", "self[undefined]": null}}, "undocumented": true, "name": "onmessage", "longname": "onmessage", "kind": "function", "scope": "global"}, {"comment": "", "meta": {"range": [151, 164], "filename": "webworker.js", "lineno": 6, "columnno": 8, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100001891", "name": "data", "type": "MemberExpression", "value": "e.data"}}, "undocumented": true, "name": "data", "longname": "onmessage~data", "kind": "constant", "memberof": "onmessage", "scope": "inner", "params": []}, {"comment": "", "meta": {"range": [177, 180], "filename": "webworker.js", "lineno": 7, "columnno": 11, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100001898", "name": "key"}}, "undocumented": true, "name": "key", "longname": "onmessage~key", "kind": "member", "memberof": "onmessage", "scope": "inner", "params": []}, {"comment": "", "meta": {"range": [375, 396], "filename": "webworker.js", "lineno": 11, "columnno": 6, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100001912", "name": "self[undefined]", "type": "MemberExpression", "value": "data[undefined]", "paramnames": []}}, "undocumented": true, "name": "self[undefined]", "longname": "self[undefined]", "kind": "member", "scope": "global"}, {"comment": "", "meta": {"range": [448, 504], "filename": "webworker.js", "lineno": 17, "columnno": 9, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100001927", "name": "results", "type": "AwaitExpression", "value": ""}}, "undocumented": true, "name": "results", "longname": "results", "kind": "member", "scope": "global"}, {"comment": "", "meta": {"range": [591, 608], "filename": "webworker.js", "lineno": 20, "columnno": 22, "path": "/home/hood/pyodide/src", "code": {"id": "astnode100001945", "name": "error", "type": "MemberExpression", "value": "e.message"}}, "undocumented": true, "name": "error", "longname": "error", "kind": "member", "scope": "global"}, {"kind": "package", "longname": "package:undefined", "files": ["/home/hood/pyodide/src/pyodide.js", "/home/hood/pyodide/src/webworker.js"]}] diff --git a/docs/sphinx_pyodide/tests/test_directives.py b/docs/sphinx_pyodide/tests/test_directives.py index 35eb8a7c8..1705fda16 100644 --- a/docs/sphinx_pyodide/tests/test_directives.py +++ b/docs/sphinx_pyodide/tests/test_directives.py @@ -119,6 +119,7 @@ def test_summary(): ) assert set(globals) == { ( + "", "languagePluginLoader", "", "A promise that resolves to ``undefined`` when Pyodide is finished loading.", @@ -128,12 +129,14 @@ def test_summary(): assert set(attributes).issuperset( { ( + "", "loadedPackages", "", "The list of packages that Pyodide has loaded.", "pyodide.loadedPackages", ), ( + "", "pyodide_py", "", "An alias to the Python pyodide package.", @@ -141,15 +144,18 @@ def test_summary(): ), } ) + print(functions) assert set(functions).issuperset( { ( + "*async* ", "loadPackagesFromImports", "(code, messageCallback, errorCallback)", "Inspect a Python code chunk and use :js:func:`pyodide.loadPackage` to load any known \npackages that the code chunk imports.", "pyodide.loadPackagesFromImports", ), ( + "", "registerJsModule", "(name, module)", "Registers the Js object ``module`` as a Js module with ``name``.", diff --git a/docs/usage/api/python-api.md b/docs/usage/api/python-api.md index 0552dca81..28f6003de 100644 --- a/docs/usage/api/python-api.md +++ b/docs/usage/api/python-api.md @@ -14,7 +14,7 @@ By default there are two Javascript modules. More can be added with * - ``js`` - The global Javascript scope. * - :js:mod:`pyodide_js ` - - The Javascript pyodide module. + - The Javascript Pyodide module. ``` ```{eval-rst} diff --git a/src/core/pyproxy.js b/src/core/pyproxy.js index 1070d2c24..9f3ff1203 100644 --- a/src/core/pyproxy.js +++ b/src/core/pyproxy.js @@ -167,7 +167,7 @@ JS_FILE(pyproxy_init_js, () => {0,0; /* Magic, see include_js_file.h */ /** * The length of the object. * - * Present only if ``type(obj)`` has a `__len__` method. + * Present only if the proxied Python object has a ``__len__`` method. */ get length() { let ptrobj = _getPtr(this); @@ -190,7 +190,7 @@ JS_FILE(pyproxy_init_js, () => {0,0; /* Magic, see include_js_file.h */ /** * This translates to the Python code ``obj[key]``. * - * Present only if ``type(obj)`` has a ``__getitem__`` method. + * Present only if the proxied Python object has a ``__getitem__`` method. * * @param {any} key The key to look up. * @returns The corresponding value. @@ -223,7 +223,7 @@ JS_FILE(pyproxy_init_js, () => {0,0; /* Magic, see include_js_file.h */ /** * This translates to the Python code ``obj[key] = value``. * - * Present only if ``type(obj)`` has a ``__setitem__`` method. + * Present only if the proxied Python object has a ``__setitem__`` method. * * @param {any} key The key to set. * @param {any} value The value to set it to. @@ -248,7 +248,7 @@ JS_FILE(pyproxy_init_js, () => {0,0; /* Magic, see include_js_file.h */ /** * This translates to the Python code ``del obj[key]``. * - * Present only if ``type(obj)`` has a ``__delitem__`` method. + * Present only if the proxied Python object has a ``__delitem__`` method. * * @param {any} key The key to delete. */ @@ -275,7 +275,7 @@ JS_FILE(pyproxy_init_js, () => {0,0; /* Magic, see include_js_file.h */ /** * This translates to the Python code ``key in obj``. * - * Present only if ``type(obj)`` has a ``__contains__`` method. + * Present only if the proxied Python object has a ``__contains__`` method. * * @param {*} key The key to check for. * @returns {bool} Is ``key`` present? @@ -308,12 +308,12 @@ JS_FILE(pyproxy_init_js, () => {0,0; /* Magic, see include_js_file.h */ * associated to the proxy. See the documentation for `Symbol.iterator * `_. * - * Present only if the Python object is iterable (i.e., ``type(obj)`` has an + * Present only if the proxied Python object is iterable (i.e., has an * ``__iter__`` method). * * This will be used implicitly by ``for(let x of proxy){}``. * - * @returns {Iterator} An iterator for ``obj``. + * @returns {Iterator} An iterator for the proxied Python object. */ [Symbol.iterator] : function*() { let iterptr = _PyObject_GetIter(_getPtr(this)); @@ -343,16 +343,16 @@ JS_FILE(pyproxy_init_js, () => {0,0; /* Magic, see include_js_file.h */ * * This will be used implicitly by ``for(let x of proxy){}``. * - * Present only if ``obj`` is a Python generator or iterator (i.e., - * ``type(obj)`` has an ``__iter__`` method). + * Present only if the proxied Python object is a generator or iterator + * (i.e., has a ``send`` or ``__next__`` method). * * @param {*} value The value to send to the generator. The value will be * assigned as a result of a yield expression. - * @returns {Object} An Object with two properties, ``done`` and ``value``. - * If the generator returned ``some_value``, will return ``{done : false, - * value : some_value}``. If the Python generator raised a - * ``StopIteration(result_value)`` exception, then we return ``{done : true, - * value : result_value}``. + * @returns {Object} An Object with two properties: ``done`` and ``value``. + * When the generator yields ``some_value``, ``next`` returns ``{done : + * false, value : some_value}``. When the generator raises a + * ``StopIteration(result_value)`` exception, ``next`` returns ``{done : + * true, value : result_value}``. */ next : function(arg) { let idresult; @@ -599,7 +599,8 @@ JS_FILE(pyproxy_init_js, () => {0,0; /* Magic, see include_js_file.h */ * `Promise.then * `_ * - * Only present on awaitable Python objects. + * Present only if the proxied Python object is `awaitable + * `_. * * @param {Function} onFulfilled A handler called with the result as an * argument if the awaitable succeeds. @@ -619,7 +620,8 @@ JS_FILE(pyproxy_init_js, () => {0,0; /* Magic, see include_js_file.h */ * `Promise.catch * `_. * - * Only present on awaitable Python objects. + * Present only if the proxied Python object is `awaitable + * `_. * * @param {Function} onRejected A handler called with the error as an * argument if the awaitable fails. @@ -637,9 +639,9 @@ JS_FILE(pyproxy_init_js, () => {0,0; /* Magic, see include_js_file.h */ * `Promise.finally * `_. * - * Only present on `awaitable - * `_ - * Python objects. + * Present only if the proxied Python object is `awaitable + * `_. + * * * @param {Function} onFinally A handler that is called with zero arguments * when the awaitable resolves. @@ -681,18 +683,31 @@ JS_FILE(pyproxy_init_js, () => {0,0; /* Magic, see include_js_file.h */ * Get a view of the buffer data which is usable from Javascript. No copy is * ever performed. * - * The return value is a :any:`PyBuffer` object. See the documentation for - * :any:`PyBuffer` for details on how to use it. + * Present only if the proxied Python object supports the `Python Buffer + * Protocol `_. * * We do not support suboffsets, if the buffer requires suboffsets we will * throw an error. Javascript nd array libraries can't handle suboffsets - * anyways. In this case, you should copy the buffer to one that doesn't use - * suboffets (using e.g., ``np.ascontiguousarray``). + * anyways. In this case, you should use the :any:`toJs` api or copy the + * buffer to one that doesn't use suboffets (using e.g., + * `numpy.ascontiguousarray + * `_). * - * @param {string} type The type of the desired output. Should be one of: - * "i8", "u8", "u8clamped", "i16", "u16", "i32", "u32", "i32", "u32", - * "i64", "u64", "f32", "f64, or "dataview". - * @returns PyBuffer + * If the buffer stores big endian data or half floats, this function will + * fail without an explicit type argument. For big endian data you can use + * ``toJs``. `DataViews + * `_ + * have support for big endian data, so you might want to pass + * ``'dataview'`` as the type argument in that case. + * + * @param {string} [type] The type of :any:`PyBuffer.data` field in the + * output. Should be one of: ``"i8"``, ``"u8"``, ``"u8clamped"``, ``"i16"``, + * ``"u16"``, ``"i32"``, ``"u32"``, ``"i32"``, ``"u32"``, ``"i64"``, + * ``"u64"``, ``"f32"``, ``"f64``, or ``"dataview"``. This argument is + * optional, if absent ``getBuffer`` will try to determine the appropriate + * output type based on the buffer `format string + * `_. + * @returns :any:`PyBuffer` */ getBuffer : function(type) { let ArrayType = undefined; @@ -789,6 +804,7 @@ JS_FILE(pyproxy_init_js, () => {0,0; /* Magic, see include_js_file.h */ } }; + // clang-format off /** * A class to allow access to a Python data buffers from Javascript. These are * produced by :any:`PyProxy.getBuffer` and cannot be constructed directly. @@ -817,8 +833,7 @@ JS_FILE(pyproxy_init_js, () => {0,0; /* Magic, see include_js_file.h */ * } * return idx; * } - * console.log("entry is", pybuff.data[multiIndexToIndex(pybuff, [2, 0, - * -1])]); + * console.log("entry is", pybuff.data[multiIndexToIndex(pybuff, [2, 0, -1])]); * * .. admonition:: Contiguity * :class: warning @@ -856,6 +871,7 @@ JS_FILE(pyproxy_init_js, () => {0,0; /* Magic, see include_js_file.h */ * buffer.data.byteLength * ); */ + // clang-format on Module.PyBuffer = class PyBuffer { constructor() { // FOR_JSDOC_ONLY is a macro that deletes its argument. @@ -923,6 +939,11 @@ JS_FILE(pyproxy_init_js, () => {0,0; /* Magic, see include_js_file.h */ /** * The actual data. A typed array of an appropriate size backed by a * segment of the WASM memory. + * + * The ``type`` argument of :any:`getBuffer` + * determines which sort of `TypedArray` this is, by default + * :any:`getBuffer` will look at the format string to determine the most + * appropriate option. * @type {TypedArray} */ this.data; diff --git a/src/pyodide-py/_pyodide/_core.py b/src/pyodide-py/_pyodide/_core.py index 60562ebed..531e59ebf 100644 --- a/src/pyodide-py/_pyodide/_core.py +++ b/src/pyodide-py/_pyodide/_core.py @@ -51,7 +51,7 @@ try: """The ``Promise.then`` API, wrapped to manage the lifetimes of the handlers. - Only available if the wrapped Javascript object has a "then" method. + Present only if the wrapped Javascript object has a "then" method. Pyodide will automatically release the references to the handlers when the promise resolves. """ @@ -60,7 +60,7 @@ try: """The ``Promise.catch`` API, wrapped to manage the lifetimes of the handler. - Only available if the wrapped Javascript object has a "then" method. + Present only if the wrapped Javascript object has a "then" method. Pyodide will automatically release the references to the handler when the promise resolves. """ @@ -69,7 +69,7 @@ try: """The ``Promise.finally`` API, wrapped to manage the lifetimes of the handler. - Only available if the wrapped Javascript object has a "then" method. + Present only if the wrapped Javascript object has a "then" method. Pyodide will automatically release the references to the handler when the promise resolves. Note the trailing underscore in the name; this is needed because ``finally`` is a reserved keyword in Python. diff --git a/src/pyodide.js b/src/pyodide.js index 3d6e14013..7a7727998 100644 --- a/src/pyodide.js +++ b/src/pyodide.js @@ -13,11 +13,11 @@ globalThis.pyodide = {}; /** * Load the main Pyodide wasm module and initialize it. When finished stores the - * pyodide module as a global object called ``pyodide``. - * @async + * Pyodide module as a global object called ``pyodide``. * @param {string} config.indexURL - The URL from which Pyodide will load * packages - * @returns The pyodide module. + * @returns The Pyodide module. + * @async */ globalThis.loadPyodide = async function(config = {}) { if (globalThis.__pyodideLoading) { @@ -273,18 +273,18 @@ globalThis.loadPyodide = async function(config = {}) { Module.loadedPackages = {}; /** - * Load a package or a list of packages over the network. This makes the files - * for the package available in the virtual filesystem. The package needs to - * be imported from Python before it can be used. - * @param {String | Array} names Package name or URL. Can be either a single - * element, or an array. URLs can be absolute or relative. URLs must have - * file name `.js` and there must be a file called - * `.data` in the same directory. + * Load a package or a list of packages over the network. This installs the + * package in the virtual filesystem. The package needs to be imported from + * Python before it can be used. + * @param {String | Array} names Either a single package name or URL or a list + * of them. URLs can be absolute or relative. The URLs must have file name + * ``.js`` and there must be a file called + * ``.data`` in the same directory. * @param {function} messageCallback A callback, called with progress messages * (optional) * @param {function} errorCallback A callback, called with error/warning * messages (optional) - * @returns {Promise} Resolves to ``undefined`` when loading is complete + * @async */ Module.loadPackage = async function(names, messageCallback, errorCallback) { if (!Array.isArray(names)) { @@ -455,7 +455,10 @@ globalThis.loadPyodide = async function(config = {}) { }; /** - * An alias to the Python pyodide package. + * An alias to the Python :py:mod:`pyodide` package. + * + * You can use this to call functions defined in the Pyodide Python package + * from Javascript. * * @type {PyProxy} */ @@ -465,9 +468,8 @@ globalThis.loadPyodide = async function(config = {}) { * * An alias to the global Python namespace. * - * An object whose attributes are members of the Python global namespace. - * For example, to access the ``foo`` Python object from Javascript use - * ``pyodide.globals.get("foo")`` + * For example, to access a variable called ``foo`` in the Python global + * scope, use ``pyodide.globals.get("foo")`` * * @type {PyProxy} */ @@ -487,11 +489,11 @@ globalThis.loadPyodide = async function(config = {}) { * .. admonition:: Avoid Stack Frames * :class: warning * - * If you make a ``PyProxy`` of ``sys.last_value``, you should be - * especially careful to :any:`destroy() `. You may leak a - * large amount of memory including the local variables of all the stack - * frames in the traceback if you don't. The easiest way is to only handle - * the exception in Python. + * If you make a :any:`PyProxy` of ``sys.last_value``, you should be + * especially careful to :any:`destroy() ` it when you are + * done. You may leak a large amount of memory including the local + * variables of all the stack frames in the traceback if you don't. The + * easiest way is to only handle the exception in Python. * * @class */ @@ -510,7 +512,7 @@ globalThis.loadPyodide = async function(config = {}) { /** * - * The pyodide version. + * The Pyodide version. * * It can be either the exact release version (e.g. ``0.1.0``), or * the latest release version followed by the number of commits since, and @@ -531,7 +533,7 @@ globalThis.loadPyodide = async function(config = {}) { * 1. `runPythonSimple` doesn't return anything (and so won't leak * PyProxies) * 2. `runPythonSimple` doesn't require access to any state on the - * `pyodide_js` module. + * Javascript `pyodide` module. * 3. `runPython` uses `pyodide.eval_code`, whereas `runPythonSimple` uses * `PyRun_String` which is the C API for `eval` / `exec`. * 4. `runPythonSimple` runs with `globals` a separate dict which is called @@ -560,8 +562,10 @@ globalThis.loadPyodide = async function(config = {}) { * * @param {string} code Python code to evaluate * @param {dict} globals An optional Python dictionary to use as the globals. - * Defaults to ``pyodide.globals``. - * @returns The result of the python code converted to Javascript + * Defaults to :any:`pyodide.globals`. Uses the Python API + * :any:`pyodide.eval_code` to evaluate the code. + * @returns The result of the Python code translated to Javascript. See the + * documentation for :any:`pyodide.eval_code` for more info. */ Module.runPython = function(code, globals = Module.globals) { return Module.pyodide_py.eval_code(code, globals); @@ -569,25 +573,27 @@ globalThis.loadPyodide = async function(config = {}) { // clang-format off /** - * Inspect a Python code chunk and use :js:func:`pyodide.loadPackage` to load any known - * packages that the code chunk imports. Uses - * :func:`pyodide_py.find_imports ` to inspect the code. + * Inspect a Python code chunk and use :js:func:`pyodide.loadPackage` to + * install any known packages that the code chunk imports. Uses the Python API + * :func:`pyodide.find\_imports` to inspect the code. * * For example, given the following code as input * * .. code-block:: python * - * import numpy as np - * x = np.array([1, 2, 3]) + * import numpy as np x = np.array([1, 2, 3]) * - * :js:func:`loadPackagesFromImports` will call ``pyodide.loadPackage(['numpy'])``. - * See also :js:func:`runPythonAsync`. + * :js:func:`loadPackagesFromImports` will call + * ``pyodide.loadPackage(['numpy'])``. See also :js:func:`runPythonAsync`. * - * @param {*} code - * @param {*} messageCallback - * @param {*} errorCallback + * @param {string} code The code to inspect. + * @param {Function} messageCallback The ``messageCallback`` argument of + * :any:`pyodide.loadPackage` (optional). + * @param {Function} errorCallback The ``errorCallback`` argument of + * :any:`pyodide.loadPackage` (optional). + * @async */ - Module.loadPackagesFromImports = async function(code, messageCallback, errorCallback) { + Module.loadPackagesFromImports = async function(code, messageCallback, errorCallback) { let imports = Module.pyodide_py.find_imports(code).toJs(); if (imports.length === 0) { return; @@ -610,13 +616,11 @@ globalThis.loadPyodide = async function(config = {}) { /** * Access a Python object in the global namespace from Javascript. * - * Note: this function is deprecated and will be removed in version 0.18.0. - * Use pyodide.globals.get('key') instead. + * @deprecated This function will be removed in version 0.18.0. Use + * :any:`pyodide.globals.get('key') ` instead. * * @param {string} name Python variable name - * @returns If the Python object is an immutable type (string, number, - * boolean), it is converted to Javascript and returned. For other types, a - * ``PyProxy`` object is returned. + * @returns The Python object translated to Javascript. */ Module.pyimport = name => { console.warn( @@ -634,21 +638,35 @@ globalThis.loadPyodide = async function(config = {}) { * import numpy as np * x = np.array([1, 2, 3]) * - * pyodide will first call ``pyodide.loadPackage(['numpy'])``, and then run - * the code, returning the result. Since package fetching must happen - * asynchronously, this function returns a `Promise` which resolves to the - * output. For example: + * Pyodide will first call :any:`pyodide.loadPackage(['numpy']) + * `, and then run the code using the Python API + * :any:`pyodide.eval_code_async`, returning the result. The code is compiled + * with `PyCF_ALLOW_TOP_LEVEL_AWAIT + * `_. * - * .. code-block:: javascript + * For example: * - * pyodide.runPythonAsync(code, messageCallback) - * .then((output) => handleOutput(output)) + * .. code-block:: pyodide + * + * let result = await pyodide.runPythonAsync(` + * # numpy will automatically be loaded by loadPackagesFromImports + * import numpy as np + * # we can use top level await + * from js import fetch + * response = await fetch("./packages.json") + * packages = await response.json() + * # If final statement is an expression, its value is returned to + * Javascript len(packages.dependencies.object_keys()) + * `); + * console.log(result); // 72 * * @param {string} code Python code to evaluate - * @param {Function} messageCallback A callback, called with progress - * messages. (optional) - * @param {Function} errorCallback A callback, called with error/warning - * messages. (optional) + * @param {Function} messageCallback The ``messageCallback`` argument of + * :any:`pyodide.loadPackage`. + * @param {Function} errorCallback The ``errorCallback`` argument of + * :any:`pyodide.loadPackage`. + * @returns The result of the Python code translated to Javascript. + * @async */ Module.runPythonAsync = async function(code, messageCallback, errorCallback) { await Module.loadPackagesFromImports(code, messageCallback, errorCallback); @@ -755,12 +773,12 @@ if (globalThis.languagePluginUrl) { "instead use loadPyodide({ indexURL : })"); /** - * A deprecated parameter that specifies the Pyodide indexURL. If present, + * A deprecated parameter that specifies the Pyodide ``indexURL``. If present, * Pyodide will automatically invoke - * ``initializePyodide({indexURL : languagePluginUrl})`` + * ``loadPyodide({indexURL : languagePluginUrl})`` * and will store the resulting promise in - * :any:`globalThis.languagePluginLoader`. Instead, use :any:`loadPyodide` - * directly. + * :any:`globalThis.languagePluginLoader`. Use :any:`loadPyodide` + * directly instead of defining this. * * @type String * @deprecated Will be removed in version 0.18.0