Unverified Commit 4950fede authored by Timothy Jaeryang Baek's avatar Timothy Jaeryang Baek Committed by GitHub
Browse files

Merge pull request #2325 from open-webui/pyscript

feat: python code execution
parents 7db4baef 18a7634f
......@@ -117,6 +117,18 @@ app.state.config.WEBHOOK_URL = WEBHOOK_URL
origins = ["*"]
# Custom middleware to add security headers
class SecurityHeadersMiddleware(BaseHTTPMiddleware):
async def dispatch(self, request: Request, call_next):
response: Response = await call_next(request)
response.headers["Cross-Origin-Opener-Policy"] = "same-origin"
response.headers["Cross-Origin-Embedder-Policy"] = "require-corp"
return response
app.add_middleware(SecurityHeadersMiddleware)
class RAGMiddleware(BaseHTTPMiddleware):
async def dispatch(self, request: Request, call_next):
return_citations = False
......
......@@ -8,6 +8,8 @@
"name": "open-webui",
"version": "0.1.124",
"dependencies": {
"@micropython/micropython-webassembly-pyscript": "^1.22.0-369",
"@pyscript/core": "^0.4.32",
"@sveltejs/adapter-node": "^1.3.1",
"async": "^3.2.5",
"bits-ui": "^0.19.7",
......@@ -22,6 +24,7 @@
"js-sha256": "^0.10.1",
"katex": "^0.16.9",
"marked": "^9.1.0",
"pyodide": "^0.25.1",
"svelte-sonner": "^0.3.19",
"tippy.js": "^6.3.7",
"uuid": "^9.0.1"
......@@ -831,6 +834,11 @@
"svelte": ">=3 <5"
}
},
"node_modules/@micropython/micropython-webassembly-pyscript": {
"version": "1.22.0-369",
"resolved": "https://registry.npmjs.org/@micropython/micropython-webassembly-pyscript/-/micropython-webassembly-pyscript-1.22.0-369.tgz",
"integrity": "sha512-+wqB6Va0rJtWXUmkthPVIEh1+Xh9Q+eJlBKWgYjjSe/FaRYo9z9U7CbvLaJNOJrb5R9dCTI6P9Ij4BrBxnwyVQ=="
},
"node_modules/@nodelib/fs.scandir": {
"version": "2.1.5",
"resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
......@@ -890,6 +898,19 @@
"url": "https://opencollective.com/popperjs"
}
},
"node_modules/@pyscript/core": {
"version": "0.4.32",
"resolved": "https://registry.npmjs.org/@pyscript/core/-/core-0.4.32.tgz",
"integrity": "sha512-WQATzPp1ggf871+PukCmTypzScXkEB1EWD/vg5GNxpM96N6rDPqQ13msuA5XvwU01ZVhL8HHSFDLk4IfaXNGWg==",
"dependencies": {
"@ungap/with-resolvers": "^0.1.0",
"basic-devtools": "^0.1.6",
"polyscript": "^0.12.8",
"sticky-module": "^0.1.1",
"to-json-callback": "^0.1.1",
"type-checked-collections": "^0.1.7"
}
},
"node_modules/@rollup/plugin-commonjs": {
"version": "25.0.7",
"resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-25.0.7.tgz",
......@@ -1605,8 +1626,12 @@
"node_modules/@ungap/structured-clone": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz",
"integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==",
"dev": true
"integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ=="
},
"node_modules/@ungap/with-resolvers": {
"version": "0.1.0",
"resolved": "https://registry.npmjs.org/@ungap/with-resolvers/-/with-resolvers-0.1.0.tgz",
"integrity": "sha512-g7f0IkJdPW2xhY7H4iE72DAsIyfuwEFc6JWc2tYFwKDMWWAF699vGjrM348cwQuOXgHpe1gWFe+Eiyjx/ewvvw=="
},
"node_modules/@vitest/expect": {
"version": "1.6.0",
......@@ -1713,6 +1738,11 @@
"@types/estree": "^1.0.0"
}
},
"node_modules/@webreflection/fetch": {
"version": "0.1.5",
"resolved": "https://registry.npmjs.org/@webreflection/fetch/-/fetch-0.1.5.tgz",
"integrity": "sha512-zCcqCJoNLvdeF41asAK71XPlwSPieeRDsE09albBunJEksuYPYNillKNQjf8p5BqSoTKTuKrW3lUm3MNodUC4g=="
},
"node_modules/acorn": {
"version": "8.11.3",
"resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz",
......@@ -2027,6 +2057,11 @@
"dev": true,
"optional": true
},
"node_modules/base-64": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/base-64/-/base-64-1.0.0.tgz",
"integrity": "sha512-kwDPIFCGx0NZHog36dj+tHiwP4QMzsZ3AgMViUBKI0+V5n4U0ufTCUMhnQ04diaRI8EX/QcPfql7zlhZ7j4zgg=="
},
"node_modules/base64-js": {
"version": "1.5.1",
"resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz",
......@@ -2047,6 +2082,11 @@
}
]
},
"node_modules/basic-devtools": {
"version": "0.1.6",
"resolved": "https://registry.npmjs.org/basic-devtools/-/basic-devtools-0.1.6.tgz",
"integrity": "sha512-g9zJ63GmdUesS3/Fwv0B5SYX6nR56TQXmGr+wE5PRTNCnGQMYWhUx/nZB/mMWnQJVLPPAp89oxDNlasdtNkW5Q=="
},
"node_modules/bcrypt-pbkdf": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz",
......@@ -2661,6 +2701,28 @@
"@types/estree": "^1.0.0"
}
},
"node_modules/codedent": {
"version": "0.1.2",
"resolved": "https://registry.npmjs.org/codedent/-/codedent-0.1.2.tgz",
"integrity": "sha512-qEqzcy5viM3UoCN0jYHZeXZoyd4NZQzYFg0kOBj8O1CgoGG9WYYTF+VeQRsN0OSKFjF3G1u4WDUOtOsWEx6N2w==",
"dependencies": {
"plain-tag": "^0.1.3"
}
},
"node_modules/coincident": {
"version": "1.2.3",
"resolved": "https://registry.npmjs.org/coincident/-/coincident-1.2.3.tgz",
"integrity": "sha512-Uxz3BMTWIslzeWjuQnizGWVg0j6khbvHUQ8+5BdM7WuJEm4ALXwq3wluYoB+uF68uPBz/oUOeJnYURKyfjexlA==",
"dependencies": {
"@ungap/structured-clone": "^1.2.0",
"@ungap/with-resolvers": "^0.1.0",
"gc-hook": "^0.3.1",
"proxy-target": "^3.0.2"
},
"optionalDependencies": {
"ws": "^8.16.0"
}
},
"node_modules/color-convert": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
......@@ -4001,6 +4063,11 @@
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/gc-hook": {
"version": "0.3.1",
"resolved": "https://registry.npmjs.org/gc-hook/-/gc-hook-0.3.1.tgz",
"integrity": "sha512-E5M+O/h2o7eZzGhzRZGex6hbB3k4NWqO0eA+OzLRLXxhdbYPajZnynPwAtphnh+cRHPwsj5Z80dqZlfI4eK55A=="
},
"node_modules/get-func-name": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.2.tgz",
......@@ -4328,6 +4395,11 @@
"node": ">=12.0.0"
}
},
"node_modules/html-escaper": {
"version": "3.0.3",
"resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-3.0.3.tgz",
"integrity": "sha512-RuMffC89BOWQoY0WKGpIhn5gX3iI54O6nRA0yC124NYVtzjmFWBIiFd8M0x+ZdX0P9R4lADg1mgP8C7PxGOWuQ=="
},
"node_modules/htmlparser2": {
"version": "8.0.2",
"resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.2.tgz",
......@@ -5838,6 +5910,29 @@
"pathe": "^1.1.2"
}
},
"node_modules/plain-tag": {
"version": "0.1.3",
"resolved": "https://registry.npmjs.org/plain-tag/-/plain-tag-0.1.3.tgz",
"integrity": "sha512-yyVAOFKTAElc7KdLt2+UKGExNYwYb/Y/WE9i+1ezCQsJE8gbKSjewfpRqK2nQgZ4d4hhAAGgDCOcIZVilqE5UA=="
},
"node_modules/polyscript": {
"version": "0.12.8",
"resolved": "https://registry.npmjs.org/polyscript/-/polyscript-0.12.8.tgz",
"integrity": "sha512-kcG3W9jU/s1sYjWOTAa2jAh5D2jm3zJRi+glSTsC+lA3D1b/Sd67pEIGpyL9bWNKYSimqAx4se6jAhQjJZ7+jQ==",
"dependencies": {
"@ungap/structured-clone": "^1.2.0",
"@ungap/with-resolvers": "^0.1.0",
"@webreflection/fetch": "^0.1.5",
"basic-devtools": "^0.1.6",
"codedent": "^0.1.2",
"coincident": "^1.2.3",
"gc-hook": "^0.3.1",
"html-escaper": "^3.0.3",
"proxy-target": "^3.0.2",
"sticky-module": "^0.1.1",
"to-json-callback": "^0.1.1"
}
},
"node_modules/postcss": {
"version": "8.4.38",
"resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.38.tgz",
......@@ -6151,6 +6246,11 @@
"integrity": "sha512-F2JHgJQ1iqwnHDcQjVBsq3n/uoaFL+iPW/eAeL7kVxy/2RrWaN4WroKjjvbsoRtv0ftelNyC01bjRhn/bhcf4A==",
"dev": true
},
"node_modules/proxy-target": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/proxy-target/-/proxy-target-3.0.2.tgz",
"integrity": "sha512-FFE1XNwXX/FNC3/P8HiKaJSy/Qk68RitG/QEcLy/bVnTAPlgTAWPZKh0pARLAnpfXQPKyalBhk009NRTgsk8vQ=="
},
"node_modules/psl": {
"version": "1.9.0",
"resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz",
......@@ -6176,6 +6276,15 @@
"node": ">=6"
}
},
"node_modules/pyodide": {
"version": "0.25.1",
"resolved": "https://registry.npmjs.org/pyodide/-/pyodide-0.25.1.tgz",
"integrity": "sha512-y0nJ/fLA3bxD2iZRzvVTbP2O+wp4Ewm2wThfV4HF0BytQ6hsoqTJFLNY4usLOcCVBrK8TTWqFqrmsVPzHe4rsw==",
"dependencies": {
"base-64": "^1.0.0",
"ws": "^8.5.0"
}
},
"node_modules/qs": {
"version": "6.10.4",
"resolved": "https://registry.npmjs.org/qs/-/qs-6.10.4.tgz",
......@@ -6858,6 +6967,11 @@
"integrity": "sha512-JPbdCEQLj1w5GilpiHAx3qJvFndqybBysA3qUOnznweH4QbNYUsW/ea8QzSrnh0vNsezMMw5bcVool8lM0gwzg==",
"dev": true
},
"node_modules/sticky-module": {
"version": "0.1.1",
"resolved": "https://registry.npmjs.org/sticky-module/-/sticky-module-0.1.1.tgz",
"integrity": "sha512-IuYgnyIMUx/m6rtu14l/LR2MaqOLtpXcWkxPmtPsiScRHEo+S4Tojk+DWFHOncSdFX/OsoLOM4+T92yOmI1AMw=="
},
"node_modules/stream-composer": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/stream-composer/-/stream-composer-1.0.2.tgz",
......@@ -7520,6 +7634,11 @@
"node": ">=14.14"
}
},
"node_modules/to-json-callback": {
"version": "0.1.1",
"resolved": "https://registry.npmjs.org/to-json-callback/-/to-json-callback-0.1.1.tgz",
"integrity": "sha512-BzOeinTT3NjE+FJ2iCvWB8HvyuyBzoH3WlSnJ+AYVC4tlePyZWSYdkQIFOARWiq0t35/XhmI0uQsFiUsRksRqg=="
},
"node_modules/to-regex-range": {
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
......@@ -7629,6 +7748,11 @@
"node": ">= 0.8.0"
}
},
"node_modules/type-checked-collections": {
"version": "0.1.7",
"resolved": "https://registry.npmjs.org/type-checked-collections/-/type-checked-collections-0.1.7.tgz",
"integrity": "sha512-fLIydlJy7IG9XL4wjRwEcKhxx/ekLXiWiMvcGo01cOMF+TN+5ZqajM1mRNRz2bNNi1bzou2yofhjZEQi7kgl9A=="
},
"node_modules/type-detect": {
"version": "4.0.8",
"resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz",
......@@ -8883,6 +9007,26 @@
"resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
"integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ=="
},
"node_modules/ws": {
"version": "8.17.0",
"resolved": "https://registry.npmjs.org/ws/-/ws-8.17.0.tgz",
"integrity": "sha512-uJq6108EgZMAl20KagGkzCKfMEjxmKvZHG7Tlq0Z6nOky7YF7aq4mOx6xK8TJ/i1LeK4Qus7INktacctDgY8Ow==",
"engines": {
"node": ">=10.0.0"
},
"peerDependencies": {
"bufferutil": "^4.0.1",
"utf-8-validate": ">=5.0.2"
},
"peerDependenciesMeta": {
"bufferutil": {
"optional": true
},
"utf-8-validate": {
"optional": true
}
}
},
"node_modules/xtend": {
"version": "4.0.2",
"resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz",
......
......@@ -47,6 +47,8 @@
},
"type": "module",
"dependencies": {
"@micropython/micropython-webassembly-pyscript": "^1.22.0-369",
"@pyscript/core": "^0.4.32",
"@sveltejs/adapter-node": "^1.3.1",
"async": "^3.2.5",
"bits-ui": "^0.19.7",
......@@ -61,6 +63,7 @@
"js-sha256": "^0.10.1",
"katex": "^0.16.9",
"marked": "^9.1.0",
"pyodide": "^0.25.1",
"svelte-sonner": "^0.3.19",
"tippy.js": "^6.3.7",
"uuid": "^9.0.1"
......
cp -R ./node_modules/@pyscript/core/dist ./static/pyscript
# mkdir -p ./static/micropython
# cp -R ./node_modules/@micropython/micropython-webassembly-pyscript/micropython.* ./static/micropython
mkdir -p ./static/pyodide
cp ./node_modules/pyodide/pyodide* ./static/pyodide/
cp ./node_modules/pyodide/python_stdlib.zip ./static/pyodide/
\ No newline at end of file
function execute(id, text) {
// pyscript
let div = document.createElement('div');
let html = `
<py-script type="mpy">
${text}
</py-script>
`;
div.innerHTML = html;
const pyScript = div.firstElementChild;
try {
document.body.appendChild(pyScript);
setTimeout(() => {
document.body.removeChild(pyScript);
}, 0);
} catch (error) {
console.error('Python error:');
console.error(error);
}
}
......@@ -12,6 +12,10 @@
title="Open WebUI"
href="/opensearch.xml"
/>
<script type="module" src="/pyscript/core.js"></script>
<link rel="stylesheet" href="/pyscript/core.css" />
<script>
// On page load or when changing themes, best to add inline in `head` to avoid FOUC
(() => {
......@@ -54,6 +58,11 @@
%sveltekit.head%
</head>
<body data-sveltekit-preload-data="hover">
<py-config> interpreter = "/pyodide/pyodide.mjs" </py-config>
<script type="py">
print('pyscript:loaded')
</script>
<div style="display: contents">%sveltekit.body%</div>
<div
......
......@@ -506,6 +506,7 @@
>
<div class="flex items-center gap-2 text-sm dark:text-gray-500">
<img
crossorigin="anonymous"
alt="model profile"
class="size-5 max-w-[28px] object-cover rounded-full"
src={$modelfiles.find((modelfile) => modelfile.tagName === selectedModel.id)
......
......@@ -2,10 +2,14 @@
import { copyToClipboard } from '$lib/utils';
import hljs from 'highlight.js';
import 'highlight.js/styles/github-dark.min.css';
import { tick } from 'svelte';
export let id = '';
export let lang = '';
export let code = '';
let executed = false;
let copied = false;
const copyCode = async () => {
......@@ -17,6 +21,184 @@
}, 1000);
};
const checkPythonCode = (str) => {
// Check if the string contains typical Python keywords, syntax, or functions
const pythonKeywords = [
'def',
'class',
'import',
'from',
'if',
'else',
'elif',
'for',
'while',
'try',
'except',
'finally',
'return',
'yield',
'lambda',
'assert',
'pass',
'break',
'continue',
'global',
'nonlocal',
'del',
'True',
'False',
'None',
'and',
'or',
'not',
'in',
'is',
'as',
'with'
];
for (let keyword of pythonKeywords) {
if (str.includes(keyword)) {
return true;
}
}
// Check if the string contains typical Python syntax characters
const pythonSyntax = [
'def ',
'class ',
'import ',
'from ',
'if ',
'else:',
'elif ',
'for ',
'while ',
'try:',
'except:',
'finally:',
'return ',
'yield ',
'lambda ',
'assert ',
'pass',
'break',
'continue',
'global ',
'nonlocal ',
'del ',
'True',
'False',
'None',
' and ',
' or ',
' not ',
' in ',
' is ',
' as ',
' with ',
':',
'=',
'==',
'!=',
'>',
'<',
'>=',
'<=',
'+',
'-',
'*',
'/',
'%',
'**',
'//',
'(',
')',
'[',
']',
'{',
'}'
];
for (let syntax of pythonSyntax) {
if (str.includes(syntax)) {
return true;
}
}
// If none of the above conditions met, it's probably not Python code
return false;
};
const executePython = async (text) => {
executed = true;
await tick();
const outputDiv = document.getElementById(`code-output-${id}`);
if (outputDiv) {
outputDiv.innerText = 'Running...';
}
text = text
.split('\n')
.map((line, index) => (index === 0 ? line : ' ' + line))
.join('\n');
// pyscript
let div = document.createElement('div');
let html = `
<py-script type="py" worker>
import js
import sys
import io
# Create a StringIO object to capture the output
output_capture = io.StringIO()
# Save the current standard output
original_stdout = sys.stdout
# Replace the standard output with the StringIO object
sys.stdout = output_capture
try:
${text}
except Exception as e:
# Capture any errors and write them to the output capture
print(f"Error: {e}", file=output_capture)
# Restore the original standard output
sys.stdout = original_stdout
# Retrieve the captured output
captured_output = "[NO OUTPUT]"
captured_output = output_capture.getvalue()
# Print the captured output
print(captured_output)
def display_message():
output_div = js.document.getElementById("code-output-${id}")
output_div.innerText = captured_output
display_message()
</py-script>`;
div.innerHTML = html;
const pyScript = div.firstElementChild;
try {
document.body.appendChild(pyScript);
setTimeout(() => {
document.body.removeChild(pyScript);
}, 0);
} catch (error) {
console.error('Python error:');
console.error(error);
}
};
$: highlightedCode = code ? hljs.highlightAuto(code, hljs.getLanguage(lang)?.aliases).value : '';
</script>
......@@ -26,15 +208,34 @@
class="flex justify-between bg-[#202123] text-white text-xs px-4 pt-1 pb-0.5 rounded-t-lg overflow-x-auto"
>
<div class="p-1">{@html lang}</div>
<div class="flex items-center">
{#if lang === 'python' || checkPythonCode(code)}
<button
class="copy-code-button bg-none border-none p-1"
on:click={() => {
executePython(code);
}}>Run</button
>
{/if}
<button class="copy-code-button bg-none border-none p-1" on:click={copyCode}
>{copied ? 'Copied' : 'Copy Code'}</button
>
</div>
</div>
<pre
class=" hljs p-4 px-5 overflow-x-auto"
style="border-top-left-radius: 0px; border-top-right-radius: 0px;"><code
style="border-top-left-radius: 0px; border-top-right-radius: 0px; {executed &&
'border-bottom-left-radius: 0px; border-bottom-right-radius: 0px;'}"><code
class="language-{lang} rounded-t-none whitespace-pre">{@html highlightedCode || code}</code
></pre>
{#if executed}
<div class="bg-[#202123] text-white px-4 py-4 rounded-b-lg">
<div class=" text-gray-500 text-xs mb-1">STDOUT/STDERR</div>
<div id="code-output-{id}" class="text-sm" />
</div>
{/if}
</div>
{/if}
......@@ -43,6 +43,7 @@
>
{#if model in modelfiles}
<img
crossorigin="anonymous"
src={modelfiles[model]?.imageUrl ?? `${WEBUI_BASE_URL}/static/favicon.png`}
alt="modelfile"
class=" size-[2.7rem] rounded-full border-[1px] border-gray-200 dark:border-none"
......@@ -50,6 +51,7 @@
/>
{:else}
<img
crossorigin="anonymous"
src={$i18n.language === 'dg-DG'
? `/doge.png`
: `${WEBUI_BASE_URL}/static/favicon.png`}
......
......@@ -3,5 +3,11 @@
</script>
<div class=" mr-3">
<img {src} class=" w-8 object-cover rounded-full" alt="profile" draggable="false" />
<img
crossorigin="anonymous"
{src}
class=" w-8 object-cover rounded-full"
alt="profile"
draggable="false"
/>
</div>
......@@ -437,6 +437,7 @@
{#each tokens as token}
{#if token.type === 'code'}
<CodeBlock
id={message.id}
lang={token.lang}
code={revertSanitizedResponseContent(token.text)}
/>
......
......@@ -248,6 +248,7 @@
>
<div class="self-center mx-1.5">
<img
crossorigin="anonymous"
src="{WEBUI_BASE_URL}/static/favicon.png"
class=" size-6 -translate-x-1.5 rounded-full"
alt="logo"
......
......@@ -89,7 +89,7 @@
<svelte:head>
<title>{$WEBUI_NAME}</title>
<link rel="icon" href="{WEBUI_BASE_URL}/static/favicon.png" />
<link crossorigin="anonymous" rel="icon" href="{WEBUI_BASE_URL}/static/favicon.png" />
<!-- rosepine themes have been disabled as it's not up to date with our latest version. -->
<!-- feel free to make a PR to fix if anyone wants to see it return -->
......
......@@ -76,7 +76,12 @@
<div class="fixed m-10 z-50">
<div class="flex space-x-2">
<div class=" self-center">
<img src="{WEBUI_BASE_URL}/static/favicon.png" class=" w-8 rounded-full" alt="logo" />
<img
crossorigin="anonymous"
src="{WEBUI_BASE_URL}/static/favicon.png"
class=" w-8 rounded-full"
alt="logo"
/>
</div>
</div>
</div>
......
{"info": {"arch": "wasm32", "platform": "emscripten_3_1_46", "python": "3.11.3", "version": "0.25.1"}, "packages": {"aiohttp": {"depends": ["aiosignal", "async-timeout", "attrs", "charset-normalizer", "frozenlist", "multidict", "yarl"], "file_name": "aiohttp-3.8.6-cp311-cp311-emscripten_3_1_46_wasm32.whl", "imports": ["aiohttp"], "install_dir": "site", "name": "aiohttp", "package_type": "package", "sha256": "5dacfc27095a9e04e179d58dc0bf6462d60db233513553ab82f2b70d948b24a5", "shared_library": false, "unvendored_tests": true, "version": "3.8.6"}, "aiohttp-tests": {"depends": ["aiohttp"], "file_name": "aiohttp-tests.tar", "imports": [], "install_dir": "site", "name": "aiohttp-tests", "package_type": "package", "sha256": "8f2adafe51fa8789f6c5ee5b725f20885835cc2abf4435da88a69c6d9dc93ff5", "shared_library": false, "unvendored_tests": false, "version": "3.8.6"}, "aiosignal": {"depends": ["frozenlist"], "file_name": "aiosignal-1.3.1-py3-none-any.whl", "imports": ["aiosignal"], "install_dir": "site", "name": "aiosignal", "package_type": "package", "sha256": "452e85cb9cb368035b68f9941f648863c8da02e63b7da92bb8d717233d234b7f", "shared_library": false, "unvendored_tests": false, "version": "1.3.1"}, "asciitree": {"depends": [], "file_name": "asciitree-0.3.3-py3-none-any.whl", "imports": ["asciitree"], "install_dir": "site", "name": "asciitree", "package_type": "package", "sha256": "43662d430f07ff43d8d567529c5b1e1f5f3e20629ff34fdcc395f0989ee83697", "shared_library": false, "unvendored_tests": false, "version": "0.3.3"}, "astropy": {"depends": ["distutils", "packaging", "numpy", "pyerfa", "pyyaml"], "file_name": "astropy-5.3.2-cp311-cp311-emscripten_3_1_46_wasm32.whl", "imports": ["astropy"], "install_dir": "site", "name": "astropy", "package_type": "package", "sha256": "81e43a497459149b8fbf03c459a566d0bbe1f502fe18f147a77c190ba47cb8f2", "shared_library": false, "unvendored_tests": false, "version": "5.3.2"}, "async-timeout": {"depends": [], "file_name": "async_timeout-4.0.3-py3-none-any.whl", "imports": ["async_timeout"], "install_dir": "site", "name": "async-timeout", "package_type": "package", "sha256": "3d52b5c8125e267ad0443f1e6db230d19ba027946eb34f8e55de61d99cf46dd2", "shared_library": false, "unvendored_tests": false, "version": "4.0.3"}, "atomicwrites": {"depends": [], "file_name": "atomicwrites-1.4.1-py2.py3-none-any.whl", "imports": ["atomicwrites"], "install_dir": "site", "name": "atomicwrites", "package_type": "package", "sha256": "b03bf1a5eeb95dfe0a2f6ed7cedde7d054031390d33a36238cd855d6048b7bab", "shared_library": false, "unvendored_tests": false, "version": "1.4.1"}, "attrs": {"depends": ["six"], "file_name": "attrs-23.1.0-py3-none-any.whl", "imports": ["attr", "attrs"], "install_dir": "site", "name": "attrs", "package_type": "package", "sha256": "bfeb888b962f07447a7941cafe06de8d396c8ac18995db045f37458834086dd0", "shared_library": false, "unvendored_tests": false, "version": "23.1.0"}, "autograd": {"depends": ["numpy", "future"], "file_name": "autograd-1.6.2-py3-none-any.whl", "imports": ["autograd"], "install_dir": "site", "name": "autograd", "package_type": "package", "sha256": "7b58ac091f658ce7d06ccaa7aa561c5e5e1da1fe74120551ed84b62fbc8cc78e", "shared_library": false, "unvendored_tests": true, "version": "1.6.2"}, "autograd-tests": {"depends": ["autograd"], "file_name": "autograd-tests.tar", "imports": [], "install_dir": "site", "name": "autograd-tests", "package_type": "package", "sha256": "f4791dc86e9843516fe577f4db49eb186402c676f86c07acd0e409f2a019eb4f", "shared_library": false, "unvendored_tests": false, "version": "1.6.2"}, "awkward-cpp": {"depends": ["numpy"], "file_name": "awkward_cpp-26-cp311-cp311-emscripten_3_1_46_wasm32.whl", "imports": ["awkward_cpp"], "install_dir": "site", "name": "awkward-cpp", "package_type": "package", "sha256": "2394b0aa6b198242ff717ba7e92532fda878eb578cb24cdd455edf82503fdfd7", "shared_library": false, "unvendored_tests": false, "version": "26"}, "b2d": {"depends": ["numpy", "pydantic", "setuptools"], "file_name": "b2d-0.7.4-cp311-cp311-emscripten_3_1_46_wasm32.whl", "imports": ["b2d"], "install_dir": "site", "name": "b2d", "package_type": "package", "sha256": "149fc0248121cf1b8e5195d1b003bc03b6900ce563b9b64bccd13865593b2b8b", "shared_library": false, "unvendored_tests": false, "version": "0.7.4"}, "bcrypt": {"depends": [], "file_name": "bcrypt-4.0.1-cp311-cp311-emscripten_3_1_46_wasm32.whl", "imports": ["bcrypt"], "install_dir": "site", "name": "bcrypt", "package_type": "package", "sha256": "e9b2d778c6615b2ade88eac01e4b21ec7b4d6b51e05ac3c748aebb12e5f71910", "shared_library": false, "unvendored_tests": false, "version": "4.0.1"}, "beautifulsoup4": {"depends": ["soupsieve"], "file_name": "beautifulsoup4-4.12.2-py3-none-any.whl", "imports": ["bs4"], "install_dir": "site", "name": "beautifulsoup4", "package_type": "package", "sha256": "dbe2f94facd8a454d2322368cb11d522d8d16987f4fc28f2dcce5b967fcb749b", "shared_library": false, "unvendored_tests": true, "version": "4.12.2"}, "beautifulsoup4-tests": {"depends": ["beautifulsoup4"], "file_name": "beautifulsoup4-tests.tar", "imports": [], "install_dir": "site", "name": "beautifulsoup4-tests", "package_type": "package", "sha256": "7d6a84548cb6169d89d57e13635bdddda6083f9314032a2baea6aa2d12a9d201", "shared_library": false, "unvendored_tests": false, "version": "4.12.2"}, "biopython": {"depends": ["numpy"], "file_name": "biopython-1.81-cp311-cp311-emscripten_3_1_46_wasm32.whl", "imports": ["Bio", "BioSQL"], "install_dir": "site", "name": "biopython", "package_type": "package", "sha256": "370551bd0e7430c2cb41c043780ccd0d1bd76f52ba0d521fc53f8ed55861bc38", "shared_library": false, "unvendored_tests": false, "version": "1.81"}, "bitarray": {"depends": [], "file_name": "bitarray-2.8.1-cp311-cp311-emscripten_3_1_46_wasm32.whl", "imports": ["bitarray"], "install_dir": "site", "name": "bitarray", "package_type": "package", "sha256": "f40653a95a2f1573daef91579d4661a2ec6a7ae59589060f9e87114655cd461c", "shared_library": false, "unvendored_tests": true, "version": "2.8.1"}, "bitarray-tests": {"depends": ["bitarray"], "file_name": "bitarray-tests.tar", "imports": [], "install_dir": "site", "name": "bitarray-tests", "package_type": "package", "sha256": "818b276df6efc4d41f59cc80785a33ff46cceac2b6dd9fbd30eedb503547f9db", "shared_library": false, "unvendored_tests": false, "version": "2.8.1"}, "bitstring": {"depends": ["bitarray"], "file_name": "bitstring-4.1.1-py3-none-any.whl", "imports": ["bitstring"], "install_dir": "site", "name": "bitstring", "package_type": "package", "sha256": "ae6cfeaefce7f828f157a41da419cdfc45f0f9cfc95112789789630bf0594746", "shared_library": false, "unvendored_tests": false, "version": "4.1.1"}, "bleach": {"depends": ["webencodings", "packaging", "six"], "file_name": "bleach-6.0.0-py3-none-any.whl", "imports": ["bleach"], "install_dir": "site", "name": "bleach", "package_type": "package", "sha256": "05156da9303d247f6220038f6e5b8d4c7556dd8a8096034b4ab884c4717c894f", "shared_library": false, "unvendored_tests": false, "version": "6.0.0"}, "bokeh": {"depends": ["distutils", "numpy", "jinja2", "pandas", "pillow", "python-dateutil", "six", "typing-extensions", "pyyaml", "xyzservices"], "file_name": "bokeh-3.2.2-py3-none-any.whl", "imports": ["bokeh"], "install_dir": "site", "name": "bokeh", "package_type": "package", "sha256": "17003e3bdc4fa2bcd44a5d02ad059f58811043744a448e70d05a81d6ba6bda5e", "shared_library": false, "unvendored_tests": false, "version": "3.2.2"}, "boost-histogram": {"depends": ["numpy"], "file_name": "boost_histogram-1.3.2-cp311-cp311-emscripten_3_1_46_wasm32.whl", "imports": ["boost_histogram"], "install_dir": "site", "name": "boost-histogram", "package_type": "package", "sha256": "ce665ab7dcf0587ff27e6c597435e4aaf7b5d6f41f2fb8e1ed7ebbefe61ebac6", "shared_library": false, "unvendored_tests": false, "version": "1.3.2"}, "brotli": {"depends": [], "file_name": "Brotli-1.0.9-cp311-cp311-emscripten_3_1_46_wasm32.whl", "imports": ["brotli"], "install_dir": "site", "name": "brotli", "package_type": "package", "sha256": "365b3669eb68f4c02165bd264ccac110a5be339186b13bb4743085b051ece13c", "shared_library": false, "unvendored_tests": false, "version": "1.0.9"}, "cachetools": {"depends": [], "file_name": "cachetools-5.3.1-py3-none-any.whl", "imports": ["cachetools"], "install_dir": "site", "name": "cachetools", "package_type": "package", "sha256": "7eea389b99a6b055c4e781f739524209b0118324511348361ed0df4913e1a524", "shared_library": false, "unvendored_tests": false, "version": "5.3.1"}, "cartopy": {"depends": ["shapely", "pyshp", "pyproj", "geos", "matplotlib", "scipy"], "file_name": "Cartopy-0.21.1-cp311-cp311-emscripten_3_1_46_wasm32.whl", "imports": ["cartopy"], "install_dir": "site", "name": "Cartopy", "package_type": "package", "sha256": "2ef1cc607f5c03465c24e495de3a216c75b34b603f97a78012acaa3e433cbad8", "shared_library": false, "unvendored_tests": true, "version": "0.21.1"}, "cartopy-tests": {"depends": ["cartopy"], "file_name": "Cartopy-tests.tar", "imports": [], "install_dir": "site", "name": "Cartopy-tests", "package_type": "package", "sha256": "7f2b4cc2070bf73e0e68e3d2166c40f25deac5b2135f4fd054ac5db34938c234", "shared_library": false, "unvendored_tests": false, "version": "0.21.1"}, "cbor-diag": {"depends": [], "file_name": "cbor_diag-1.0.1-cp311-cp311-emscripten_3_1_46_wasm32.whl", "imports": ["cbor_diag"], "install_dir": "site", "name": "cbor-diag", "package_type": "package", "sha256": "6186e3bd2ef7e96a408d76b33d8d698d5179b714b545b8cfa39d86a26c2ca2f4", "shared_library": false, "unvendored_tests": false, "version": "1.0.1"}, "certifi": {"depends": [], "file_name": "certifi-2023.7.22-py3-none-any.whl", "imports": ["certifi"], "install_dir": "site", "name": "certifi", "package_type": "package", "sha256": "035e16956f8e00bde9f2da068fac939b6c2eae40af132f6e0c4778f0d459efa1", "shared_library": false, "unvendored_tests": false, "version": "2023.7.22"}, "cffi": {"depends": ["pycparser"], "file_name": "cffi-1.15.1-cp311-cp311-emscripten_3_1_46_wasm32.whl", "imports": ["cffi"], "install_dir": "site", "name": "cffi", "package_type": "package", "sha256": "7302fca160c66d0d2e3a08b2e4310c16f1f8b07368e4a5efe07bf5d903057c3a", "shared_library": false, "unvendored_tests": false, "version": "1.15.1"}, "cffi-example": {"depends": ["cffi"], "file_name": "cffi_example-0.1-cp311-cp311-emscripten_3_1_46_wasm32.whl", "imports": ["cffi_example"], "install_dir": "site", "name": "cffi_example", "package_type": "package", "sha256": "c4f8d9ebf5d886862124d5780795911dbe2eb01150588d25d620047bc12a6ac7", "shared_library": false, "unvendored_tests": false, "version": "0.1"}, "cftime": {"depends": ["numpy"], "file_name": "cftime-1.6.2-cp311-cp311-emscripten_3_1_46_wasm32.whl", "imports": ["cftime"], "install_dir": "site", "name": "cftime", "package_type": "package", "sha256": "6868baa7e1e1184ff97c3cc8c8c3bdbc99137109d7d07199741ea4500672fe10", "shared_library": false, "unvendored_tests": false, "version": "1.6.2"}, "charset-normalizer": {"depends": [], "file_name": "charset_normalizer-3.3.2-py3-none-any.whl", "imports": ["charset_normalizer"], "install_dir": "site", "name": "charset-normalizer", "package_type": "package", "sha256": "4bd1d6d54704ffa7fb3235f22a11dcbbdf45ade28fc51c5329596b889886a772", "shared_library": false, "unvendored_tests": false, "version": "3.3.2"}, "click": {"depends": [], "file_name": "click-8.1.7-py3-none-any.whl", "imports": ["click"], "install_dir": "site", "name": "click", "package_type": "package", "sha256": "fcf2043ed2309bce8cbd147868bd539f31648c4618d6288242e5dc1040bbffb2", "shared_library": false, "unvendored_tests": false, "version": "8.1.7"}, "cligj": {"depends": ["click"], "file_name": "cligj-0.7.2-py3-none-any.whl", "imports": ["cligj"], "install_dir": "site", "name": "cligj", "package_type": "package", "sha256": "153633543becaf42b7d668d2f6622df8ef81a60d9f7a6236bae9fcd958bc59f9", "shared_library": false, "unvendored_tests": false, "version": "0.7.2"}, "cloudpickle": {"depends": [], "file_name": "cloudpickle-2.2.1-py3-none-any.whl", "imports": ["cloudpickle"], "install_dir": "site", "name": "cloudpickle", "package_type": "package", "sha256": "ed461402550e3fe74ca3ce86e6176a6fb82062bba4802860e558b965af5894fc", "shared_library": false, "unvendored_tests": false, "version": "2.2.1"}, "cmyt": {"depends": ["colorspacious", "matplotlib", "more-itertools", "numpy"], "file_name": "cmyt-1.3.1-py3-none-any.whl", "imports": ["cmyt"], "install_dir": "site", "name": "cmyt", "package_type": "package", "sha256": "2967c67e358291863d5ffb724b5d09800339ea3ba3921409d0f31d83406e228e", "shared_library": false, "unvendored_tests": true, "version": "1.3.1"}, "cmyt-tests": {"depends": ["cmyt"], "file_name": "cmyt-tests.tar", "imports": [], "install_dir": "site", "name": "cmyt-tests", "package_type": "package", "sha256": "32e14b49bbb8957a1a5d5f313c0208addde3e1fa4f464b5ce7d84334f6b4d086", "shared_library": false, "unvendored_tests": false, "version": "1.3.1"}, "colorspacious": {"depends": ["numpy"], "file_name": "colorspacious-1.1.2-py2.py3-none-any.whl", "imports": ["colorspacious"], "install_dir": "site", "name": "colorspacious", "package_type": "package", "sha256": "0032bbe174dc9cd644eb8fd6dc96b7887165b17c7bdaa1054f4afcaeed93dbc6", "shared_library": false, "unvendored_tests": false, "version": "1.1.2"}, "contourpy": {"depends": ["numpy"], "file_name": "contourpy-1.2.0-cp311-cp311-emscripten_3_1_46_wasm32.whl", "imports": ["contourpy"], "install_dir": "site", "name": "contourpy", "package_type": "package", "sha256": "212a04720a2d0114dd749ba5d573bcdf99d11319420f87dec4adfb3f5934bb0c", "shared_library": false, "unvendored_tests": false, "version": "1.2.0"}, "coolprop": {"depends": ["numpy", "matplotlib"], "file_name": "CoolProp-6.6.0-cp311-cp311-emscripten_3_1_46_wasm32.whl", "imports": ["CoolProp"], "install_dir": "site", "name": "coolprop", "package_type": "package", "sha256": "5efcf0db5f31ef8624fa19078b2bfb0ed050de7d7dc60b750f65ed31745a9a5b", "shared_library": false, "unvendored_tests": true, "version": "6.6.0"}, "coolprop-tests": {"depends": ["coolprop"], "file_name": "coolprop-tests.tar", "imports": [], "install_dir": "site", "name": "coolprop-tests", "package_type": "package", "sha256": "730b9e72e8d92b96ee5f3a891b9ae9a268d472385460f19ec50ab4de17c05354", "shared_library": false, "unvendored_tests": false, "version": "6.6.0"}, "coverage": {"depends": ["sqlite3"], "file_name": "coverage-7.3.0-cp311-cp311-emscripten_3_1_46_wasm32.whl", "imports": ["coverage"], "install_dir": "site", "name": "coverage", "package_type": "package", "sha256": "547eafbf0472418f89947c5b87d39bf75658f3409ec17dfad6664d94324690f6", "shared_library": false, "unvendored_tests": false, "version": "7.3.0"}, "cpp-exceptions-test": {"depends": [], "file_name": "cpp-exceptions-test-0.1.zip", "imports": [], "install_dir": "dynlib", "name": "cpp-exceptions-test", "package_type": "shared_library", "sha256": "d64cb2fe52113b911fce4d276c507e2235e1c1987ac1fd7ab4afa83a28e309a7", "shared_library": true, "unvendored_tests": false, "version": "0.1"}, "cramjam": {"depends": [], "file_name": "cramjam-2.6.2-cp311-cp311-emscripten_3_1_46_wasm32.whl", "imports": ["cramjam"], "install_dir": "site", "name": "cramjam", "package_type": "package", "sha256": "72e0c6ab487caa0608f9a858c1bee9bffd91e7d2e540833b249021c3083acb5d", "shared_library": false, "unvendored_tests": false, "version": "2.6.2"}, "cryptography": {"depends": ["openssl", "six", "cffi"], "file_name": "cryptography-39.0.2-cp311-cp311-emscripten_3_1_46_wasm32.whl", "imports": ["cryptography"], "install_dir": "site", "name": "cryptography", "package_type": "package", "sha256": "1242bb2e27e84c59e84c5f9ad797c733778e17b43154da74b335aeb95ce82c02", "shared_library": false, "unvendored_tests": false, "version": "39.0.2"}, "cssselect": {"depends": [], "file_name": "cssselect-1.2.0-py2.py3-none-any.whl", "imports": ["cssselect"], "install_dir": "site", "name": "cssselect", "package_type": "package", "sha256": "18b9017b19489fc8c5b2ac239b59aed51315feafc473150815f2ea8c3076e56c", "shared_library": false, "unvendored_tests": false, "version": "1.2.0"}, "cycler": {"depends": ["six"], "file_name": "cycler-0.11.0-py3-none-any.whl", "imports": ["cycler"], "install_dir": "site", "name": "cycler", "package_type": "package", "sha256": "fb8c2099d30eccb6a28081968622a6b641eaccbc50c8e0fff3b89f9c315f74ca", "shared_library": false, "unvendored_tests": false, "version": "0.11.0"}, "cytoolz": {"depends": ["nose", "toolz"], "file_name": "cytoolz-0.12.2-cp311-cp311-emscripten_3_1_46_wasm32.whl", "imports": ["cytoolz"], "install_dir": "site", "name": "cytoolz", "package_type": "package", "sha256": "a34ee8f0d0d016a6f5820faa3e56f863cf4ab5c77473077403071e6b14ef0605", "shared_library": false, "unvendored_tests": true, "version": "0.12.2"}, "cytoolz-tests": {"depends": ["cytoolz"], "file_name": "cytoolz-tests.tar", "imports": [], "install_dir": "site", "name": "cytoolz-tests", "package_type": "package", "sha256": "cb3d851b192e2e1d01923ca503cda30a076df1e7b5322c612d052b5b336ad29d", "shared_library": false, "unvendored_tests": false, "version": "0.12.2"}, "decorator": {"depends": [], "file_name": "decorator-5.1.1-py3-none-any.whl", "imports": ["decorator"], "install_dir": "site", "name": "decorator", "package_type": "package", "sha256": "8cb05ef07cfd69ce2524789dff0f71898e70f1df46cd26bff8c0a344058d447f", "shared_library": false, "unvendored_tests": false, "version": "5.1.1"}, "demes": {"depends": ["attrs", "ruamel.yaml"], "file_name": "demes-0.2.3-py3-none-any.whl", "imports": ["demes"], "install_dir": "site", "name": "demes", "package_type": "package", "sha256": "35800f72738148641d3aed2bf2b28aab4d7269facc4393a16faa145f6a1e5fec", "shared_library": false, "unvendored_tests": false, "version": "0.2.3"}, "deprecation": {"depends": ["packaging"], "file_name": "deprecation-2.1.0-py2.py3-none-any.whl", "imports": ["deprecation"], "install_dir": "site", "name": "deprecation", "package_type": "package", "sha256": "a778673281a6c69b2b84c38add2d9e4229a2a4792d4bde448529ac19b0ca0c81", "shared_library": false, "unvendored_tests": false, "version": "2.1.0"}, "distlib": {"depends": [], "file_name": "distlib-0.3.7-py2.py3-none-any.whl", "imports": ["distlib"], "install_dir": "site", "name": "distlib", "package_type": "package", "sha256": "6a9648d64686e42becb258a718635daf4ed23171722e1694e908180407f03d87", "shared_library": false, "unvendored_tests": false, "version": "0.3.7"}, "distutils": {"depends": [], "file_name": "distutils-1.0.0.zip", "imports": ["distutils"], "install_dir": "stdlib", "name": "distutils", "package_type": "cpython_module", "sha256": "b75494eafa9f01d738f7d76846dd92cbf5ce2ebc5e360898a62720c0c1d0817c", "shared_library": true, "unvendored_tests": false, "version": "1.0.0"}, "docutils": {"depends": [], "file_name": "docutils-0.20.1-py3-none-any.whl", "imports": ["docutils"], "install_dir": "site", "name": "docutils", "package_type": "package", "sha256": "6c1288c649310f8fca88b68bb9626c057dde7adf0da3e9c83ec0a26fa3d56d8b", "shared_library": false, "unvendored_tests": false, "version": "0.20.1"}, "exceptiongroup": {"depends": [], "file_name": "exceptiongroup-1.1.3-py3-none-any.whl", "imports": ["exceptiongroup"], "install_dir": "site", "name": "exceptiongroup", "package_type": "package", "sha256": "5c5cbd3b2ba528fb3903756ac1818107705dfb432257cc0b02dd1da3d981b1c2", "shared_library": false, "unvendored_tests": false, "version": "1.1.3"}, "fastparquet": {"depends": ["cramjam", "numpy", "pandas", "fsspec", "packaging"], "file_name": "fastparquet-2023.7.0-cp311-cp311-emscripten_3_1_46_wasm32.whl", "imports": ["fastparquet"], "install_dir": "site", "name": "fastparquet", "package_type": "package", "sha256": "aa64c2029db98a10d9b6c56c3b4e57fe5e720a298338d3048e5a564b28b1ee9f", "shared_library": false, "unvendored_tests": false, "version": "2023.7.0"}, "fiona": {"depends": ["attrs", "certifi", "setuptools", "six", "click", "cligj"], "file_name": "Fiona-1.8.22-cp311-cp311-emscripten_3_1_46_wasm32.whl", "imports": ["fiona"], "install_dir": "site", "name": "fiona", "package_type": "package", "sha256": "d9d27c11c6406c5366e3ec1dce47e46cf4c545ac9c6ff2e847e9217e7db11870", "shared_library": false, "unvendored_tests": false, "version": "1.8.22"}, "fonttools": {"depends": [], "file_name": "fonttools-4.42.1-py3-none-any.whl", "imports": ["fontTools"], "install_dir": "site", "name": "fonttools", "package_type": "package", "sha256": "44c48ebb8e54253bee8af587bf2685a16e00860377a2a1cf63cff5532e87a437", "shared_library": false, "unvendored_tests": false, "version": "4.42.1"}, "fpcast-test": {"depends": [], "file_name": "fpcast_test-0.1.1-cp311-cp311-emscripten_3_1_46_wasm32.whl", "imports": ["fpcast_test"], "install_dir": "site", "name": "fpcast-test", "package_type": "package", "sha256": "0a897910554decc8c2af7f9e5a3c05bbfd5e4a4ad759539f6e8bd7d7bf87d59a", "shared_library": false, "unvendored_tests": false, "version": "0.1.1"}, "freesasa": {"depends": [], "file_name": "freesasa-2.2.0.post3-cp311-cp311-emscripten_3_1_46_wasm32.whl", "imports": ["freesasa"], "install_dir": "site", "name": "freesasa", "package_type": "package", "sha256": "673fa633c43fa28ecd7661327f7f4cedd7c45a709735fc9b08d6dd46e9a0c6b5", "shared_library": false, "unvendored_tests": false, "version": "2.2.0.post3"}, "frozenlist": {"depends": [], "file_name": "frozenlist-1.4.0-cp311-cp311-emscripten_3_1_46_wasm32.whl", "imports": ["frozenlist"], "install_dir": "site", "name": "frozenlist", "package_type": "package", "sha256": "8510a99c51ccf7ba137a78184559571415902fb3b502d1976604e4722df77008", "shared_library": false, "unvendored_tests": false, "version": "1.4.0"}, "fsspec": {"depends": [], "file_name": "fsspec-2023.6.0-py3-none-any.whl", "imports": ["fsspec"], "install_dir": "site", "name": "fsspec", "package_type": "package", "sha256": "8d032f447841f000f4e2db022bc68a6cfd0b895cdc6bd6c54e3a75cdafc4974e", "shared_library": false, "unvendored_tests": true, "version": "2023.6.0"}, "fsspec-tests": {"depends": ["fsspec"], "file_name": "fsspec-tests.tar", "imports": [], "install_dir": "site", "name": "fsspec-tests", "package_type": "package", "sha256": "28c1ceda3eb9abba21131a5edad6729fbc402e15d8809d0e63529c9471db5d31", "shared_library": false, "unvendored_tests": false, "version": "2023.6.0"}, "future": {"depends": [], "file_name": "future-0.18.3-py3-none-any.whl", "imports": ["future"], "install_dir": "site", "name": "future", "package_type": "package", "sha256": "f8304342e4be16ecf428aae0f58e6fbff1b88a94b420c6858f68e84c8adeeb6d", "shared_library": false, "unvendored_tests": true, "version": "0.18.3"}, "future-tests": {"depends": ["future"], "file_name": "future-tests.tar", "imports": [], "install_dir": "site", "name": "future-tests", "package_type": "package", "sha256": "db020f5e65d1decafd3162f973c02db7411d45881dd42f54199d03146a6071c8", "shared_library": false, "unvendored_tests": false, "version": "0.18.3"}, "galpy": {"depends": ["numpy", "scipy", "matplotlib", "astropy", "future", "setuptools"], "file_name": "galpy-1.9.0-cp311-cp311-emscripten_3_1_46_wasm32.whl", "imports": ["galpy"], "install_dir": "site", "name": "galpy", "package_type": "package", "sha256": "e5331bdcfdcdff50ede4b0b485b5e4fa0c8f5d1bcde9b41177f49ccbc7d1d883", "shared_library": false, "unvendored_tests": false, "version": "1.9.0"}, "gdal": {"depends": ["geos"], "file_name": "gdal-3.5.1.zip", "imports": [], "install_dir": "dynlib", "name": "gdal", "package_type": "shared_library", "sha256": "928ca6712477d3a4e2e53d4ec7b37e50b72a77ec2e318ee31b506652b106ac84", "shared_library": true, "unvendored_tests": false, "version": "3.5.1"}, "gensim": {"depends": ["numpy", "scipy", "six", "smart_open"], "file_name": "gensim-4.3.1-cp311-cp311-emscripten_3_1_46_wasm32.whl", "imports": ["gensim"], "install_dir": "site", "name": "gensim", "package_type": "package", "sha256": "693314a9010bc570a85790c33431ef403db5a597da4afb198d52efbd241d32e7", "shared_library": false, "unvendored_tests": true, "version": "4.3.1"}, "gensim-tests": {"depends": ["gensim"], "file_name": "gensim-tests.tar", "imports": [], "install_dir": "site", "name": "gensim-tests", "package_type": "package", "sha256": "8d5086ac15d5d8709a809a9438be8cb9912ccb0073e9304f4dd67064f0d471ea", "shared_library": false, "unvendored_tests": false, "version": "4.3.1"}, "geopandas": {"depends": ["shapely", "fiona", "pyproj", "packaging", "pandas"], "file_name": "geopandas-0.13.2-py3-none-any.whl", "imports": ["geopandas"], "install_dir": "site", "name": "geopandas", "package_type": "package", "sha256": "8770de3ec6e78915f4af15d27cb50d6c3dbeb158fcf0e580de9e72142cd4b938", "shared_library": false, "unvendored_tests": true, "version": "0.13.2"}, "geopandas-tests": {"depends": ["geopandas"], "file_name": "geopandas-tests.tar", "imports": [], "install_dir": "site", "name": "geopandas-tests", "package_type": "package", "sha256": "482923f2be7952335340e5ed177f573532e8fbb14fbfdd446e64eefa0ba6b0bb", "shared_library": false, "unvendored_tests": false, "version": "0.13.2"}, "geos": {"depends": [], "file_name": "geos-3.10.3.zip", "imports": [], "install_dir": "dynlib", "name": "geos", "package_type": "shared_library", "sha256": "cc272817d15a58e0528e04fe7438b28a6326efac75ef30d202afafe5e6a3d78d", "shared_library": true, "unvendored_tests": false, "version": "3.10.3"}, "gmpy2": {"depends": [], "file_name": "gmpy2-2.1.5-cp311-cp311-emscripten_3_1_46_wasm32.whl", "imports": ["gmpy2"], "install_dir": "site", "name": "gmpy2", "package_type": "package", "sha256": "c7fdc25deb1bfcf2134f0908efd3766791859f2cfb59471a5dc0f8dd7989924e", "shared_library": false, "unvendored_tests": false, "version": "2.1.5"}, "gsw": {"depends": ["numpy"], "file_name": "gsw-3.6.16-cp311-cp311-emscripten_3_1_46_wasm32.whl", "imports": ["gsw"], "install_dir": "site", "name": "gsw", "package_type": "package", "sha256": "322e02d2cc4b7ec6fe109c93994abcd501177231652f6d3f190a1b4f130bc07b", "shared_library": false, "unvendored_tests": true, "version": "3.6.16"}, "gsw-tests": {"depends": ["gsw"], "file_name": "gsw-tests.tar", "imports": [], "install_dir": "site", "name": "gsw-tests", "package_type": "package", "sha256": "0225cb0576fd4f00da8dd8f05a74f5999f4901cd95d95c12da8c018f0d6a87ee", "shared_library": false, "unvendored_tests": false, "version": "3.6.16"}, "h5py": {"depends": ["numpy", "pkgconfig"], "file_name": "h5py-3.7.0-cp311-cp311-emscripten_3_1_46_wasm32.whl", "imports": ["h5py"], "install_dir": "site", "name": "h5py", "package_type": "package", "sha256": "284f4f4db445a047bbd1f5ef4f85b03ab90710ae719f500724725253ed52a87c", "shared_library": false, "unvendored_tests": true, "version": "3.7.0"}, "h5py-tests": {"depends": ["h5py"], "file_name": "h5py-tests.tar", "imports": [], "install_dir": "site", "name": "h5py-tests", "package_type": "package", "sha256": "439141ffaa93c6a569a6b1214d6953d3d4b8f4e9251ad6dfcddb3120fc5dc180", "shared_library": false, "unvendored_tests": false, "version": "3.7.0"}, "hashlib": {"depends": ["openssl"], "file_name": "hashlib-1.0.0.zip", "imports": ["_hashlib"], "install_dir": "stdlib", "name": "hashlib", "package_type": "cpython_module", "sha256": "96545d5e075cdbfdd26689b56bd4cd6bd705636043e721db3f19f0994ff73a61", "shared_library": true, "unvendored_tests": false, "version": "1.0.0"}, "html5lib": {"depends": ["webencodings", "six"], "file_name": "html5lib-1.1-py2.py3-none-any.whl", "imports": ["html5lib"], "install_dir": "site", "name": "html5lib", "package_type": "package", "sha256": "de95ce171249cec12df3b4586e98637fb49d2c61c6796dd4e92e46d9e8dbe4dd", "shared_library": false, "unvendored_tests": false, "version": "1.1"}, "idna": {"depends": [], "file_name": "idna-3.4-py3-none-any.whl", "imports": ["idna"], "install_dir": "site", "name": "idna", "package_type": "package", "sha256": "b8641b6f6de5306de629259178f431ac30254b357a20e4f82a75e0c612d69672", "shared_library": false, "unvendored_tests": false, "version": "3.4"}, "igraph": {"depends": ["texttable"], "file_name": "igraph-0.10.6-cp39-abi3-emscripten_3_1_46_wasm32.whl", "imports": ["igraph"], "install_dir": "site", "name": "igraph", "package_type": "package", "sha256": "512af240864de8da3c2aac61c507ccefbfcbeac3c6bbb7b853f9eeaa561b4771", "shared_library": false, "unvendored_tests": false, "version": "0.10.6"}, "imageio": {"depends": ["numpy", "pillow"], "file_name": "imageio-2.31.1-py3-none-any.whl", "imports": ["imageio"], "install_dir": "site", "name": "imageio", "package_type": "package", "sha256": "dcbcfd1c1dfaf27dfa9d9398723fe7f3c6c6bf7d76306cc13dc4c99e55645d9b", "shared_library": false, "unvendored_tests": false, "version": "2.31.1"}, "iniconfig": {"depends": [], "file_name": "iniconfig-2.0.0-py3-none-any.whl", "imports": ["iniconfig"], "install_dir": "site", "name": "iniconfig", "package_type": "package", "sha256": "55829da7bce5e900f4e1027b0160010a5f19415e3a1580fa9122499f93d08df5", "shared_library": false, "unvendored_tests": false, "version": "2.0.0"}, "jedi": {"depends": ["parso"], "file_name": "jedi-0.19.0-py2.py3-none-any.whl", "imports": ["jedi"], "install_dir": "site", "name": "jedi", "package_type": "package", "sha256": "201728f959e5244ab625a6818051be174a826a87c6df566acf8db1dba0a4d8db", "shared_library": false, "unvendored_tests": true, "version": "0.19.0"}, "jedi-tests": {"depends": ["jedi"], "file_name": "jedi-tests.tar", "imports": [], "install_dir": "site", "name": "jedi-tests", "package_type": "package", "sha256": "90203b4f196c1a6680fa3bdd0930d11d047df3d739c660ae28a4e47b007975db", "shared_library": false, "unvendored_tests": false, "version": "0.19.0"}, "jinja2": {"depends": ["markupsafe"], "file_name": "Jinja2-3.1.2-py3-none-any.whl", "imports": ["jinja2"], "install_dir": "site", "name": "Jinja2", "package_type": "package", "sha256": "3d36e0ef8fb8f0c360a8987cf6544d54df95ef557fc7d1ada00698ec115cee03", "shared_library": false, "unvendored_tests": false, "version": "3.1.2"}, "joblib": {"depends": ["distutils"], "file_name": "joblib-1.3.2-py3-none-any.whl", "imports": ["joblib"], "install_dir": "site", "name": "joblib", "package_type": "package", "sha256": "e5fa1a44f8dca5780346f00f1698861d846d4b6365c780a61826adcd299ae740", "shared_library": false, "unvendored_tests": true, "version": "1.3.2"}, "joblib-tests": {"depends": ["joblib"], "file_name": "joblib-tests.tar", "imports": [], "install_dir": "site", "name": "joblib-tests", "package_type": "package", "sha256": "1eb0636fa5a6c4ba727e35135587885b7f83d934be2c010b2ea2fd8589e9ef8e", "shared_library": false, "unvendored_tests": false, "version": "1.3.2"}, "jsonschema": {"depends": ["attrs", "pyrsistent"], "file_name": "jsonschema-4.17.3-py3-none-any.whl", "imports": ["jsonschema"], "install_dir": "site", "name": "jsonschema", "package_type": "package", "sha256": "ce29a46d382227b0243574e9993712283e890c88f33eaf511a16837d25e9ad9a", "shared_library": false, "unvendored_tests": true, "version": "4.17.3"}, "jsonschema-tests": {"depends": ["jsonschema"], "file_name": "jsonschema-tests.tar", "imports": [], "install_dir": "site", "name": "jsonschema-tests", "package_type": "package", "sha256": "f5f8356cfc0d28875fffe1e54180f8929d9856f52a4b6a92d88903c7dc648efb", "shared_library": false, "unvendored_tests": false, "version": "4.17.3"}, "kiwisolver": {"depends": [], "file_name": "kiwisolver-1.4.4-cp311-cp311-emscripten_3_1_46_wasm32.whl", "imports": ["kiwisolver"], "install_dir": "site", "name": "kiwisolver", "package_type": "package", "sha256": "8b6330276ee0c47dabbab6a84a4c7411cfc5d7aee3e1686cf561d6a3cb3bd042", "shared_library": false, "unvendored_tests": false, "version": "1.4.4"}, "lazy-loader": {"depends": [], "file_name": "lazy_loader-0.3-py3-none-any.whl", "imports": ["lazy_loader"], "install_dir": "site", "name": "lazy_loader", "package_type": "package", "sha256": "d9c3b21a25ac46cbec8e4a26a7d9ac0f2fa59e3caa0ef83f0c16ea501ef74f04", "shared_library": false, "unvendored_tests": true, "version": "0.3"}, "lazy-loader-tests": {"depends": ["lazy_loader"], "file_name": "lazy_loader-tests.tar", "imports": [], "install_dir": "site", "name": "lazy_loader-tests", "package_type": "package", "sha256": "946f97e09a2681dd7b72076cc31c623d9f557ed8f20ed254c3830f90dcc1bd81", "shared_library": false, "unvendored_tests": false, "version": "0.3"}, "lazy-object-proxy": {"depends": [], "file_name": "lazy_object_proxy-1.9.0-cp311-cp311-emscripten_3_1_46_wasm32.whl", "imports": ["lazy_object_proxy"], "install_dir": "site", "name": "lazy-object-proxy", "package_type": "package", "sha256": "b7ac7ec5737ceeb081d2939874fcbfdf8d0805ac29b56d3bc860bfda33e9c580", "shared_library": false, "unvendored_tests": false, "version": "1.9.0"}, "libhdf5": {"depends": [], "file_name": "libhdf5-1.12.1.zip", "imports": [], "install_dir": "dynlib", "name": "libhdf5", "package_type": "shared_library", "sha256": "50a7e63e1d00ec776ef7908410231425cf3b8c96affc3a216657fb318e85d6d6", "shared_library": true, "unvendored_tests": false, "version": "1.12.1"}, "libheif": {"depends": [], "file_name": "libheif-1.12.0.zip", "imports": [], "install_dir": "dynlib", "name": "libheif", "package_type": "shared_library", "sha256": "063b073832632ee58cf5931bad45721d00032bb3c6c98f5bdbca77de52b2961e", "shared_library": true, "unvendored_tests": false, "version": "1.12.0"}, "libmagic": {"depends": [], "file_name": "libmagic-5.42.zip", "imports": [], "install_dir": "dynlib", "name": "libmagic", "package_type": "shared_library", "sha256": "dd6eb6b211961309cf05d2f56b0d37168fef6323c6ce7f7c7f990be540fc2c6a", "shared_library": true, "unvendored_tests": false, "version": "5.42"}, "libnetcdf": {"depends": [], "file_name": "libnetcdf-4.9.2.zip", "imports": [], "install_dir": "dynlib", "name": "libnetcdf", "package_type": "shared_library", "sha256": "12c1848ac76e6812dc4cb6e9cf98dd4202d205b8c3f28b9124d23b777336464e", "shared_library": true, "unvendored_tests": false, "version": "4.9.2"}, "lightgbm": {"depends": ["numpy", "scipy", "scikit-learn"], "file_name": "lightgbm-4.3.0-py3-none-emscripten_3_1_46_wasm32.whl", "imports": ["lightgbm"], "install_dir": "site", "name": "lightgbm", "package_type": "package", "sha256": "cfc17222a911f0ed4b290e8dae6c009735b4e34b4e5560ea8c5afa99f4db061c", "shared_library": false, "unvendored_tests": false, "version": "4.3.0"}, "logbook": {"depends": [], "file_name": "Logbook-1.6.0-cp311-cp311-emscripten_3_1_46_wasm32.whl", "imports": ["logbook"], "install_dir": "site", "name": "logbook", "package_type": "package", "sha256": "433801f3e66706f15d5939a662814e3786131fd934de33f6935803fd88a05d1c", "shared_library": false, "unvendored_tests": false, "version": "1.6.0"}, "lxml": {"depends": [], "file_name": "lxml-4.9.3-cp311-cp311-emscripten_3_1_46_wasm32.whl", "imports": ["lxml"], "install_dir": "site", "name": "lxml", "package_type": "package", "sha256": "b0591abd915683c44f04f128195aaea3f04f9406045e5b12101dea8c537bbd2e", "shared_library": false, "unvendored_tests": false, "version": "4.9.3"}, "lzma": {"depends": [], "file_name": "lzma-1.0.0.zip", "imports": ["lzma", "_lzma"], "install_dir": "stdlib", "name": "lzma", "package_type": "cpython_module", "sha256": "4bd809931c88480b9628dfd4d4c6488cc86e0b5ec06ebc56c800fe7f7bf7e8d4", "shared_library": true, "unvendored_tests": false, "version": "1.0.0"}, "markupsafe": {"depends": [], "file_name": "MarkupSafe-2.1.3-cp311-cp311-emscripten_3_1_46_wasm32.whl", "imports": ["markupsafe"], "install_dir": "site", "name": "MarkupSafe", "package_type": "package", "sha256": "6560ed9785c0b0bd722d5967e90847780d4b9b561f95024a1b7ae759da1ddb25", "shared_library": false, "unvendored_tests": false, "version": "2.1.3"}, "matplotlib": {"depends": ["cycler", "fonttools", "kiwisolver", "numpy", "packaging", "pillow", "pyparsing", "python-dateutil", "pytz", "matplotlib-pyodide"], "file_name": "matplotlib-3.5.2-cp311-cp311-emscripten_3_1_46_wasm32.whl", "imports": ["pylab", "mpl_toolkits", "matplotlib"], "install_dir": "site", "name": "matplotlib", "package_type": "package", "sha256": "f7bfdbc3653a9f7bc7273d6ebd4f5f770cd08c88854ff3e66c5dd62395568f72", "shared_library": false, "unvendored_tests": true, "version": "3.5.2"}, "matplotlib-pyodide": {"depends": [], "file_name": "matplotlib_pyodide-0.2.0-py3-none-any.whl", "imports": ["matplotlib_pyodide"], "install_dir": "site", "name": "matplotlib-pyodide", "package_type": "package", "sha256": "ef09d7009e902a3ba385d6be761f960c003e4ebf43140bd1458cedfd9b0c2a74", "shared_library": false, "unvendored_tests": false, "version": "0.2.0"}, "matplotlib-tests": {"depends": ["matplotlib"], "file_name": "matplotlib-tests.tar", "imports": [], "install_dir": "site", "name": "matplotlib-tests", "package_type": "package", "sha256": "a703adecc0e9a9c8743e2fa1fda080dbfffdfef66fef2fd2002599b53f53ae5c", "shared_library": false, "unvendored_tests": false, "version": "3.5.2"}, "micropip": {"depends": ["packaging"], "file_name": "micropip-0.5.0-py3-none-any.whl", "imports": ["micropip"], "install_dir": "site", "name": "micropip", "package_type": "package", "sha256": "8df6295822c842e312c71eee20c8561343b7a8f3b0f6a5debb91d390ae0d7d1e", "shared_library": false, "unvendored_tests": false, "version": "0.5.0"}, "mne": {"depends": ["distutils", "numpy", "scipy", "setuptools", "decorator"], "file_name": "mne-1.5.0-py3-none-any.whl", "imports": ["mne"], "install_dir": "site", "name": "mne", "package_type": "package", "sha256": "bb498b873427f55be8f72a252177a465e4710ef2c6c4f7958039635fa699d55e", "shared_library": false, "unvendored_tests": true, "version": "1.5.0"}, "mne-tests": {"depends": ["mne"], "file_name": "mne-tests.tar", "imports": [], "install_dir": "site", "name": "mne-tests", "package_type": "package", "sha256": "df384a92e3574942c92e5964f472cfa28d5591b519163de0927eb63444d17f55", "shared_library": false, "unvendored_tests": false, "version": "1.5.0"}, "more-itertools": {"depends": [], "file_name": "more_itertools-10.1.0-py3-none-any.whl", "imports": ["more_itertools"], "install_dir": "site", "name": "more-itertools", "package_type": "package", "sha256": "78070ab96535d60bd99847d20bffcec44af6ec504ae3c92f74c1fc4df2dc333a", "shared_library": false, "unvendored_tests": false, "version": "10.1.0"}, "mpmath": {"depends": [], "file_name": "mpmath-1.3.0-py3-none-any.whl", "imports": ["mpmath"], "install_dir": "site", "name": "mpmath", "package_type": "package", "sha256": "1ea4ee89672995ab0490528c40b2d82308557e08d3d4d919b34ab8d2485c9eb4", "shared_library": false, "unvendored_tests": true, "version": "1.3.0"}, "mpmath-tests": {"depends": ["mpmath"], "file_name": "mpmath-tests.tar", "imports": [], "install_dir": "site", "name": "mpmath-tests", "package_type": "package", "sha256": "be700e63458f5181bd4b722ddb8aa191bcf23cdf20936abf4c60f6c22daf96b4", "shared_library": false, "unvendored_tests": false, "version": "1.3.0"}, "msgpack": {"depends": [], "file_name": "msgpack-1.0.5-cp311-cp311-emscripten_3_1_46_wasm32.whl", "imports": ["msgpack"], "install_dir": "site", "name": "msgpack", "package_type": "package", "sha256": "27a8cb0114bb2a2ed7d0b3e2a6727e7e6f768e8086ef69090eb0adb06d40dafe", "shared_library": false, "unvendored_tests": false, "version": "1.0.5"}, "msgspec": {"depends": [], "file_name": "msgspec-0.18.4-cp311-cp311-emscripten_3_1_46_wasm32.whl", "imports": ["msgspec"], "install_dir": "site", "name": "msgspec", "package_type": "package", "sha256": "861d1ee8dd43030e913b8c8c6d006637a39486ec2f79dc4f5d65b019b7b6b610", "shared_library": false, "unvendored_tests": false, "version": "0.18.4"}, "msprime": {"depends": ["numpy", "newick", "tskit", "demes"], "file_name": "msprime-1.2.0-cp311-cp311-emscripten_3_1_46_wasm32.whl", "imports": ["msprime"], "install_dir": "site", "name": "msprime", "package_type": "package", "sha256": "df81bb0c1a9dca6d6e59a35ccabcd9e66a541d68f654280f5d5652fcddb2a4d8", "shared_library": false, "unvendored_tests": false, "version": "1.2.0"}, "multidict": {"depends": [], "file_name": "multidict-6.0.4-cp311-cp311-emscripten_3_1_46_wasm32.whl", "imports": ["multidict"], "install_dir": "site", "name": "multidict", "package_type": "package", "sha256": "fc5ac571ec6bae9da91e71855968d5d903c11190c4d9a59c828ed1e5dd0b5f16", "shared_library": false, "unvendored_tests": false, "version": "6.0.4"}, "munch": {"depends": ["setuptools", "six"], "file_name": "munch-4.0.0-py2.py3-none-any.whl", "imports": ["munch"], "install_dir": "site", "name": "munch", "package_type": "package", "sha256": "8c80a1f34abd2167f62c559a033351f603b83a4f832e32d75913ac0899bd17fd", "shared_library": false, "unvendored_tests": false, "version": "4.0.0"}, "mypy": {"depends": [], "file_name": "mypy-1.5.1-cp311-cp311-emscripten_3_1_46_wasm32.whl", "imports": ["mypyc", "mypy"], "install_dir": "site", "name": "mypy", "package_type": "package", "sha256": "707ba885bca5857596360796cb08ead018702fa1ab7f3bb9790481b0621cdd81", "shared_library": false, "unvendored_tests": true, "version": "1.5.1"}, "mypy-tests": {"depends": ["mypy"], "file_name": "mypy-tests.tar", "imports": [], "install_dir": "site", "name": "mypy-tests", "package_type": "package", "sha256": "b280684c71fac89dc8bbc350f5c42bf7cfa79463978b9579b66a2c1712f08434", "shared_library": false, "unvendored_tests": false, "version": "1.5.1"}, "netcdf4": {"depends": ["numpy", "packaging", "h5py", "cftime", "certifi"], "file_name": "netCDF4-1.6.4-cp311-cp311-emscripten_3_1_46_wasm32.whl", "imports": ["netCDF4"], "install_dir": "site", "name": "netcdf4", "package_type": "package", "sha256": "1c8fa6697ceaf52afde1aa65ef4e2e07e63fbe299a3ec30bba6abc8363464922", "shared_library": false, "unvendored_tests": false, "version": "1.6.4"}, "networkx": {"depends": ["decorator", "setuptools", "matplotlib", "numpy"], "file_name": "networkx-3.1-py3-none-any.whl", "imports": ["networkx"], "install_dir": "site", "name": "networkx", "package_type": "package", "sha256": "9af74fa17cf8adc0e6829b6a3a6087aee1565dd6bfcd8e839aa08c7e476fd081", "shared_library": false, "unvendored_tests": true, "version": "3.1"}, "networkx-tests": {"depends": ["networkx"], "file_name": "networkx-tests.tar", "imports": [], "install_dir": "site", "name": "networkx-tests", "package_type": "package", "sha256": "029d8512c7fe2b50484102f1c4108cc34dfcd1a3c3076dae59d0b8117a411fde", "shared_library": false, "unvendored_tests": false, "version": "3.1"}, "newick": {"depends": [], "file_name": "newick-1.9.0-py2.py3-none-any.whl", "imports": ["newick"], "install_dir": "site", "name": "newick", "package_type": "package", "sha256": "d8685c0d28c763f5ca06c3b0ce829a4f5542fb110e8aeafeac0e0036407173be", "shared_library": false, "unvendored_tests": false, "version": "1.9.0"}, "nh3": {"depends": [], "file_name": "nh3-0.2.15-cp37-abi3-emscripten_3_1_46_wasm32.whl", "imports": ["nh3"], "install_dir": "site", "name": "nh3", "package_type": "package", "sha256": "0286e4ae925fc2f4ee212a9e9fc4bde67c00e5343b9347496b54e410987c143f", "shared_library": false, "unvendored_tests": false, "version": "0.2.15"}, "nlopt": {"depends": ["numpy"], "file_name": "nlopt-2.7.0-cp311-cp311-emscripten_3_1_46_wasm32.whl", "imports": ["nlopt"], "install_dir": "site", "name": "nlopt", "package_type": "package", "sha256": "fb1313a99e8cc167a56cd9a773767d252f274bfe71ad11e258523fb6103ef205", "shared_library": false, "unvendored_tests": false, "version": "2.7.0"}, "nltk": {"depends": ["regex", "sqlite3"], "file_name": "nltk-3.8.1-py3-none-any.whl", "imports": ["nltk"], "install_dir": "site", "name": "nltk", "package_type": "package", "sha256": "2f4f369a171adb8e176c85f4a11e655dd923c5f8ca6247a894835e8c3895bcc8", "shared_library": false, "unvendored_tests": true, "version": "3.8.1"}, "nltk-tests": {"depends": ["nltk"], "file_name": "nltk-tests.tar", "imports": [], "install_dir": "site", "name": "nltk-tests", "package_type": "package", "sha256": "a819fca86b1164f92bb5c55d6cb950a5f4dd023002fddf9a7eb36a9c2121093a", "shared_library": false, "unvendored_tests": false, "version": "3.8.1"}, "nose": {"depends": ["setuptools"], "file_name": "nose-1.3.7-py3-none-any.whl", "imports": ["nose"], "install_dir": "site", "name": "nose", "package_type": "package", "sha256": "0a840cb02163bf7dd751fa6774bb4f7da8a5145eb00ad2941ed73d58a5d4eaef", "shared_library": false, "unvendored_tests": false, "version": "1.3.7"}, "numcodecs": {"depends": ["numpy", "msgpack"], "file_name": "numcodecs-0.11.0-cp311-cp311-emscripten_3_1_46_wasm32.whl", "imports": ["numcodecs"], "install_dir": "site", "name": "numcodecs", "package_type": "package", "sha256": "f3cd23ee6a6b2517212924efaa4fbeced7ff00e568ce042967b921ec6bd73b5d", "shared_library": false, "unvendored_tests": true, "version": "0.11.0"}, "numcodecs-tests": {"depends": ["numcodecs"], "file_name": "numcodecs-tests.tar", "imports": [], "install_dir": "site", "name": "numcodecs-tests", "package_type": "package", "sha256": "2bf2125578cd68640031ba9f1952d343f4348b18616a89db51a60ae73579b9ef", "shared_library": false, "unvendored_tests": false, "version": "0.11.0"}, "numpy": {"depends": [], "file_name": "numpy-1.26.4-cp311-cp311-emscripten_3_1_46_wasm32.whl", "imports": ["numpy"], "install_dir": "site", "name": "numpy", "package_type": "package", "sha256": "887f7b1ec5e8e0b545b081ae64fdd893f75f8643e069ff6c2585cf20252f6a71", "shared_library": false, "unvendored_tests": true, "version": "1.26.4"}, "numpy-tests": {"depends": ["numpy"], "file_name": "numpy-tests.tar", "imports": [], "install_dir": "site", "name": "numpy-tests", "package_type": "package", "sha256": "d15cf76710b44923caea4ce010ad81014b723a751e86704d897fd2840f8d6090", "shared_library": false, "unvendored_tests": false, "version": "1.26.4"}, "openblas": {"depends": [], "file_name": "openblas-0.3.23.zip", "imports": [], "install_dir": "dynlib", "name": "openblas", "package_type": "shared_library", "sha256": "fd4867ee63ad4e9c250faa2ade932ebe0513a99da1368ac77b155a116a4aa55e", "shared_library": true, "unvendored_tests": false, "version": "0.3.23"}, "opencv-python": {"depends": ["numpy"], "file_name": "opencv_python-4.8.0.76-cp311-cp311-emscripten_3_1_46_wasm32.whl", "imports": ["cv2"], "install_dir": "site", "name": "opencv-python", "package_type": "package", "sha256": "205d22d0b3cd488d036c8e292f89b55d6ea71fbc7311081e8c3555d731e330d6", "shared_library": false, "unvendored_tests": false, "version": "4.8.0.76"}, "openssl": {"depends": [], "file_name": "openssl-1.1.1n.zip", "imports": [], "install_dir": "dynlib", "name": "openssl", "package_type": "shared_library", "sha256": "d3a7f501968c6c78c1cb3dfd45128fad7538f4f28bf4e70e12ffdcb838a78387", "shared_library": true, "unvendored_tests": false, "version": "1.1.1n"}, "optlang": {"depends": ["sympy", "six", "swiglpk"], "file_name": "optlang-1.7.0-py2.py3-none-any.whl", "imports": ["optlang"], "install_dir": "site", "name": "optlang", "package_type": "package", "sha256": "caf00d3c7def7b6e8e4a5c3f02b8191d3afd49378ed71c80935f459cc2ed00cd", "shared_library": false, "unvendored_tests": true, "version": "1.7.0"}, "optlang-tests": {"depends": ["optlang"], "file_name": "optlang-tests.tar", "imports": [], "install_dir": "site", "name": "optlang-tests", "package_type": "package", "sha256": "be94d63bb82630106482e8a492aa90db10fbbfecaf90d88b6822853b83b8bd39", "shared_library": false, "unvendored_tests": false, "version": "1.7.0"}, "orjson": {"depends": [], "file_name": "orjson-3.9.2-cp311-cp311-emscripten_3_1_46_wasm32.whl", "imports": ["orjson"], "install_dir": "site", "name": "orjson", "package_type": "package", "sha256": "fdd3aacff8789c1e41c00710917e0714c1417728288a78cdb8d7baa7cc735896", "shared_library": false, "unvendored_tests": false, "version": "3.9.2"}, "packaging": {"depends": [], "file_name": "packaging-23.1-py3-none-any.whl", "imports": ["packaging"], "install_dir": "site", "name": "packaging", "package_type": "package", "sha256": "952adfd0fbede825af3ddd33cf288778a247ef83d92de2118d02e7d188e2d917", "shared_library": false, "unvendored_tests": false, "version": "23.1"}, "pandas": {"depends": ["numpy", "python-dateutil", "pytz"], "file_name": "pandas-1.5.3-cp311-cp311-emscripten_3_1_46_wasm32.whl", "imports": ["pandas"], "install_dir": "site", "name": "pandas", "package_type": "package", "sha256": "15ebfb3055ea2050434ea90b16d8bbc5f0ab62bb13954d42a368530530bc831e", "shared_library": false, "unvendored_tests": true, "version": "1.5.3"}, "pandas-tests": {"depends": ["pandas"], "file_name": "pandas-tests.tar", "imports": [], "install_dir": "site", "name": "pandas-tests", "package_type": "package", "sha256": "a41a1e628fa74445ed58137503d2eba52818d6eabf59188f1f145f7facec9c99", "shared_library": false, "unvendored_tests": false, "version": "1.5.3"}, "parso": {"depends": [], "file_name": "parso-0.8.3-py2.py3-none-any.whl", "imports": ["parso"], "install_dir": "site", "name": "parso", "package_type": "package", "sha256": "2d9de2bb7ab8a91e33c3997eca4c6258b5d3a103bde32768e47def2d3cfe8a07", "shared_library": false, "unvendored_tests": false, "version": "0.8.3"}, "patsy": {"depends": ["numpy", "six"], "file_name": "patsy-0.5.3-py2.py3-none-any.whl", "imports": ["patsy"], "install_dir": "site", "name": "patsy", "package_type": "package", "sha256": "e065eed649e1912a28872bbebe63f1d97f4f1c88f8f860b3fc4879cb1987a0d1", "shared_library": false, "unvendored_tests": true, "version": "0.5.3"}, "patsy-tests": {"depends": ["patsy"], "file_name": "patsy-tests.tar", "imports": [], "install_dir": "site", "name": "patsy-tests", "package_type": "package", "sha256": "6a142f1e5295c34674a242de51023ae6a3241a18ba4d6fd8c45c234d1815a7e7", "shared_library": false, "unvendored_tests": false, "version": "0.5.3"}, "peewee": {"depends": ["sqlite3", "cffi"], "file_name": "peewee-3.16.3-cp311-cp311-emscripten_3_1_46_wasm32.whl", "imports": ["peewee"], "install_dir": "site", "name": "peewee", "package_type": "package", "sha256": "0a4161ad956a70df00e4b9ff67d19187672da1da89663aa1e1f532961aa45149", "shared_library": false, "unvendored_tests": true, "version": "3.16.3"}, "peewee-tests": {"depends": ["peewee"], "file_name": "peewee-tests.tar", "imports": [], "install_dir": "site", "name": "peewee-tests", "package_type": "package", "sha256": "5ae2e4cfd7ac3656cf0dfab38e96c160f7a06c03382eeb72948e0f07708a7a1c", "shared_library": false, "unvendored_tests": false, "version": "3.16.3"}, "pillow": {"depends": [], "file_name": "Pillow-10.0.0-cp311-cp311-emscripten_3_1_46_wasm32.whl", "imports": ["PIL"], "install_dir": "site", "name": "Pillow", "package_type": "package", "sha256": "39e1aedeeaf2d4a5325637d156ce4d1227d1268cc1b730cbacf219c0159d8847", "shared_library": false, "unvendored_tests": false, "version": "10.0.0"}, "pillow-heif": {"depends": ["cffi", "pillow", "libheif"], "file_name": "pillow_heif-0.8.0-cp36-abi3-emscripten_3_1_46_wasm32.whl", "imports": ["pillow_heif"], "install_dir": "site", "name": "pillow_heif", "package_type": "package", "sha256": "e39bbd232f9ef0b6dc1bef9a5ce5a4f143fc89886872e65a743f80df131a1a81", "shared_library": false, "unvendored_tests": false, "version": "0.8.0"}, "pkgconfig": {"depends": [], "file_name": "pkgconfig-1.5.5-py3-none-any.whl", "imports": ["pkgconfig"], "install_dir": "site", "name": "pkgconfig", "package_type": "package", "sha256": "27e74e8c0708b6149a5333ff21b9a95a240b2b3bb354cf06a6d4032c3decba70", "shared_library": false, "unvendored_tests": false, "version": "1.5.5"}, "pluggy": {"depends": [], "file_name": "pluggy-1.2.0-py3-none-any.whl", "imports": ["pluggy"], "install_dir": "site", "name": "pluggy", "package_type": "package", "sha256": "5f159e8f479b29db802867dec7777c37a6a37f01c260e102c353857468f2cf8c", "shared_library": false, "unvendored_tests": false, "version": "1.2.0"}, "protobuf": {"depends": [], "file_name": "protobuf-4.23.1-cp311-cp311-emscripten_3_1_46_wasm32.whl", "imports": ["google"], "install_dir": "site", "name": "protobuf", "package_type": "package", "sha256": "261f5ca35e5c623a9e7f0c511a880ee591232c40165bbce8197715589e8d711b", "shared_library": false, "unvendored_tests": false, "version": "4.23.1"}, "py": {"depends": [], "file_name": "py-1.11.0-py2.py3-none-any.whl", "imports": ["py"], "install_dir": "site", "name": "py", "package_type": "package", "sha256": "6581bfa1c9bd061a038843c3a7ca9a05e3ef0650abeed50c929240b9a787e850", "shared_library": false, "unvendored_tests": false, "version": "1.11.0"}, "pyclipper": {"depends": [], "file_name": "pyclipper-1.3.0.post4-cp311-cp311-emscripten_3_1_46_wasm32.whl", "imports": ["pyclipper"], "install_dir": "site", "name": "pyclipper", "package_type": "package", "sha256": "353625221e6fdadc6d5de0ecaa6c4b58f1db64926406f5147fa2db9a158998a8", "shared_library": false, "unvendored_tests": false, "version": "1.3.0.post4"}, "pycparser": {"depends": [], "file_name": "pycparser-2.21-py2.py3-none-any.whl", "imports": ["pycparser"], "install_dir": "site", "name": "pycparser", "package_type": "package", "sha256": "6789a452fdea2cb56716b55e494acab7a1702e758f9d4e5bcb0e05cf5ce6c277", "shared_library": false, "unvendored_tests": false, "version": "2.21"}, "pycryptodome": {"depends": [], "file_name": "pycryptodome-3.18.0-cp35-abi3-emscripten_3_1_46_wasm32.whl", "imports": ["Crypto"], "install_dir": "site", "name": "pycryptodome", "package_type": "package", "sha256": "d8344dfd765f86d4f9542017056a7b2737ecd5cad0e82872ec4fba51d780367f", "shared_library": false, "unvendored_tests": true, "version": "3.18.0"}, "pycryptodome-tests": {"depends": ["pycryptodome"], "file_name": "pycryptodome-tests.tar", "imports": [], "install_dir": "site", "name": "pycryptodome-tests", "package_type": "package", "sha256": "ce16dfb750ecceb563fc34f564fc6fc5a2deeebc6ae1578b1702cd6fe9caa78d", "shared_library": false, "unvendored_tests": false, "version": "3.18.0"}, "pydantic": {"depends": ["typing-extensions"], "file_name": "pydantic-1.10.7-py3-none-any.whl", "imports": ["pydantic"], "install_dir": "site", "name": "pydantic", "package_type": "package", "sha256": "01490a04f31dc472b338b2d05fba49542fa27776a0a2963f7157e8cada6d7300", "shared_library": false, "unvendored_tests": false, "version": "1.10.7"}, "pydecimal": {"depends": [], "file_name": "pydecimal-1.0.0.zip", "imports": ["_pydecimal"], "install_dir": "stdlib", "name": "pydecimal", "package_type": "cpython_module", "sha256": "e4b077e9c956ad6fb7aaac8514a53972d53a7822c7ca76a0631ec4b589a14342", "shared_library": true, "unvendored_tests": false, "version": "1.0.0"}, "pydoc-data": {"depends": [], "file_name": "pydoc_data-1.0.0.zip", "imports": ["pydoc_data"], "install_dir": "stdlib", "name": "pydoc_data", "package_type": "cpython_module", "sha256": "481c405ca8f981e341fd7e258999e81a104fb096a53d4f9fcd9699479b4e66dd", "shared_library": true, "unvendored_tests": false, "version": "1.0.0"}, "pyerfa": {"depends": ["numpy"], "file_name": "pyerfa-2.0.0.3-cp311-cp311-emscripten_3_1_46_wasm32.whl", "imports": ["erfa"], "install_dir": "site", "name": "pyerfa", "package_type": "package", "sha256": "1dafe745e9169d542f77203c06bdbc27c00c77191be443020aed29f8bccbd29c", "shared_library": false, "unvendored_tests": true, "version": "2.0.0.3"}, "pyerfa-tests": {"depends": ["pyerfa"], "file_name": "pyerfa-tests.tar", "imports": [], "install_dir": "site", "name": "pyerfa-tests", "package_type": "package", "sha256": "16e0b38da94bd118fb0169c4c0637f8cf3c8022c2310dce524a15f70873d37ae", "shared_library": false, "unvendored_tests": false, "version": "2.0.0.3"}, "pygments": {"depends": [], "file_name": "Pygments-2.16.1-py3-none-any.whl", "imports": ["pygments"], "install_dir": "site", "name": "Pygments", "package_type": "package", "sha256": "74e6cb066deb00f77860d5d9a13b871f066b9ab637a419ff0d44c77ae96291e5", "shared_library": false, "unvendored_tests": false, "version": "2.16.1"}, "pyheif": {"depends": ["cffi"], "file_name": "pyheif-0.7.1-cp311-cp311-emscripten_3_1_46_wasm32.whl", "imports": ["pyheif"], "install_dir": "site", "name": "pyheif", "package_type": "package", "sha256": "6ff8382a11ccc2c7edf21c3152630e9e3c7fbfe7292c616d170924100d2ebc40", "shared_library": false, "unvendored_tests": false, "version": "0.7.1"}, "pyinstrument": {"depends": [], "file_name": "pyinstrument-4.4.0-cp311-cp311-emscripten_3_1_46_wasm32.whl", "imports": ["pyinstrument"], "install_dir": "site", "name": "pyinstrument", "package_type": "package", "sha256": "3918637e76cfe02e9af806d4da655f448c16ecc4a8d842f14b088a827c9a4c88", "shared_library": false, "unvendored_tests": false, "version": "4.4.0"}, "pynacl": {"depends": ["cffi"], "file_name": "PyNaCl-1.5.0-cp311-cp311-emscripten_3_1_46_wasm32.whl", "imports": ["nacl"], "install_dir": "site", "name": "pynacl", "package_type": "package", "sha256": "9352f532f3cf5bd79ea079eda4da2d9135b8e9f27da79669e070532abff86db8", "shared_library": false, "unvendored_tests": false, "version": "1.5.0"}, "pyodide-http": {"depends": [], "file_name": "pyodide_http-0.2.1-py3-none-any.whl", "imports": ["pyodide_http"], "install_dir": "site", "name": "pyodide-http", "package_type": "package", "sha256": "cb364959d8d17de002aa6509f4ac34b36aa2781f851ce097808ad650be63728f", "shared_library": false, "unvendored_tests": false, "version": "0.2.1"}, "pyparsing": {"depends": [], "file_name": "pyparsing-3.1.1-py3-none-any.whl", "imports": ["pyparsing"], "install_dir": "site", "name": "pyparsing", "package_type": "package", "sha256": "910cabffe24dcded89cd62cbaaabc7892c58d21db03f9809e64da751e7cafecc", "shared_library": false, "unvendored_tests": false, "version": "3.1.1"}, "pyproj": {"depends": ["certifi", "sqlite3"], "file_name": "pyproj-3.4.1-cp311-cp311-emscripten_3_1_46_wasm32.whl", "imports": ["pyproj"], "install_dir": "site", "name": "pyproj", "package_type": "package", "sha256": "4dec942c310f30d5c71261227dfb533e96c47b6103a501815ee0990ce8b318df", "shared_library": false, "unvendored_tests": false, "version": "3.4.1"}, "pyrsistent": {"depends": [], "file_name": "pyrsistent-0.19.3-cp311-cp311-emscripten_3_1_46_wasm32.whl", "imports": ["_pyrsistent_version", "pyrsistent"], "install_dir": "site", "name": "pyrsistent", "package_type": "package", "sha256": "15e2ea3651e95f54af1509909bcdd4756f542a5adac660d48df20f2e27801aad", "shared_library": false, "unvendored_tests": false, "version": "0.19.3"}, "pysam": {"depends": [], "file_name": "pysam-0.22.0-cp311-cp311-emscripten_3_1_46_wasm32.whl", "imports": ["pysam"], "install_dir": "site", "name": "pysam", "package_type": "package", "sha256": "829fb0e1ce8def5d43718e10842d37aa19148127e19c5bf66160008ebcc02c8f", "shared_library": false, "unvendored_tests": false, "version": "0.22.0"}, "pyshp": {"depends": [], "file_name": "pyshp-2.3.1-py2.py3-none-any.whl", "imports": ["shapefile"], "install_dir": "site", "name": "pyshp", "package_type": "package", "sha256": "5a0b246d4fa589d1de7c29abe8931c5697ac5703aa2b54d784c54b6ff5d46148", "shared_library": false, "unvendored_tests": false, "version": "2.3.1"}, "pytest": {"depends": ["atomicwrites", "attrs", "more-itertools", "pluggy", "py", "setuptools", "six", "iniconfig", "exceptiongroup"], "file_name": "pytest-7.2.2-py3-none-any.whl", "imports": ["_pytest", "pytest"], "install_dir": "site", "name": "pytest", "package_type": "package", "sha256": "37cda8b095c1b775933b68571d52ea98203e16234870f6c34b690da86674ff32", "shared_library": false, "unvendored_tests": false, "version": "7.2.2"}, "pytest-benchmark": {"depends": [], "file_name": "pytest_benchmark-4.0.0-py3-none-any.whl", "imports": ["pytest_benchmark"], "install_dir": "site", "name": "pytest-benchmark", "package_type": "package", "sha256": "d0d142386ce39aa40029ce8143dc271733341aaad74af98b80b5f28278be65a4", "shared_library": false, "unvendored_tests": false, "version": "4.0.0"}, "python-dateutil": {"depends": ["six"], "file_name": "python_dateutil-2.8.2-py2.py3-none-any.whl", "imports": ["dateutil"], "install_dir": "site", "name": "python-dateutil", "package_type": "package", "sha256": "a7b0404fca1ccf0a0bbdf8398f1f54433e21f4cd3d033408a744de5d0d18826f", "shared_library": false, "unvendored_tests": false, "version": "2.8.2"}, "python-magic": {"depends": ["libmagic"], "file_name": "python_magic-0.4.27-py2.py3-none-any.whl", "imports": ["magic"], "install_dir": "site", "name": "python-magic", "package_type": "package", "sha256": "81a716761a01d93a128e26d070c53a29244ed2eadb4ec0db1a6e9f42381efcff", "shared_library": false, "unvendored_tests": false, "version": "0.4.27"}, "python-sat": {"depends": ["six"], "file_name": "python_sat-0.1.7.dev26-cp311-cp311-emscripten_3_1_46_wasm32.whl", "imports": ["pysat"], "install_dir": "site", "name": "python-sat", "package_type": "package", "sha256": "4d9d765ceca41194a53b802c059f1b52eda6f9845e04761a5f8d436955c6219f", "shared_library": false, "unvendored_tests": false, "version": "0.1.7.dev26"}, "python-solvespace": {"depends": [], "file_name": "python_solvespace-3.0.8-cp311-cp311-emscripten_3_1_46_wasm32.whl", "imports": ["python_solvespace"], "install_dir": "site", "name": "python_solvespace", "package_type": "package", "sha256": "3c3611abebb8988917674c143e21734861faa635ada202ec7426793262dd3339", "shared_library": false, "unvendored_tests": false, "version": "3.0.8"}, "pytz": {"depends": [], "file_name": "pytz-2023.3-py2.py3-none-any.whl", "imports": ["pytz"], "install_dir": "site", "name": "pytz", "package_type": "package", "sha256": "9642fe77a66578d7f22585f9299eb41ef8aee3791114bcd02ca1f5108ecb5d8f", "shared_library": false, "unvendored_tests": false, "version": "2023.3"}, "pywavelets": {"depends": ["distutils", "numpy", "matplotlib", "scipy"], "file_name": "PyWavelets-1.4.1-cp311-cp311-emscripten_3_1_46_wasm32.whl", "imports": ["pywt"], "install_dir": "site", "name": "pywavelets", "package_type": "package", "sha256": "6f0831bdf94d12da7b1cf60e1f8cc2fecb1edf65865253da5758ff2192c08335", "shared_library": false, "unvendored_tests": true, "version": "1.4.1"}, "pywavelets-tests": {"depends": ["pywavelets"], "file_name": "pywavelets-tests.tar", "imports": [], "install_dir": "site", "name": "pywavelets-tests", "package_type": "package", "sha256": "8370c9ea1e4039f2f24447aeeeb6b4aadf6aeee5bbf409997cbf188922354bba", "shared_library": false, "unvendored_tests": false, "version": "1.4.1"}, "pyxel": {"depends": [], "file_name": "pyxel-1.9.10-cp37-abi3-emscripten_3_1_46_wasm32.whl", "imports": ["pyxel"], "install_dir": "site", "name": "pyxel", "package_type": "package", "sha256": "5728101895e2c9dd5b70b5e1ee893ff4a2db9fdd306273c86808ed85b4bae7ef", "shared_library": false, "unvendored_tests": false, "version": "1.9.10"}, "pyyaml": {"depends": [], "file_name": "PyYAML-6.0.1-cp311-cp311-emscripten_3_1_46_wasm32.whl", "imports": ["_yaml", "yaml"], "install_dir": "site", "name": "pyyaml", "package_type": "package", "sha256": "70da5e4d3c7b6cf4befce24f971d94c21fc8a41e28daf34b2da0f0d99ef0b565", "shared_library": false, "unvendored_tests": false, "version": "6.0.1"}, "rebound": {"depends": ["numpy"], "file_name": "rebound-3.24.2-cp311-cp311-emscripten_3_1_46_wasm32.whl", "imports": ["rebound"], "install_dir": "site", "name": "rebound", "package_type": "package", "sha256": "f8dc7d482a31ca87355d8ae849783f4aaf61daa984474a0abeb15a2cad498e04", "shared_library": false, "unvendored_tests": false, "version": "3.24.2"}, "reboundx": {"depends": ["rebound", "numpy"], "file_name": "reboundx-3.10.1-cp311-cp311-emscripten_3_1_46_wasm32.whl", "imports": ["reboundx"], "install_dir": "site", "name": "reboundx", "package_type": "package", "sha256": "9baf0fc2873918f4555300a1003b811f9dfc8704e8bccd4457707c5d87f6f288", "shared_library": false, "unvendored_tests": false, "version": "3.10.1"}, "regex": {"depends": [], "file_name": "regex-2023.8.8-cp311-cp311-emscripten_3_1_46_wasm32.whl", "imports": ["regex"], "install_dir": "site", "name": "regex", "package_type": "package", "sha256": "a62b3caad35d144ce4fa499ad39657e031d8803df25cd790d762032cb7656ff8", "shared_library": false, "unvendored_tests": true, "version": "2023.8.8"}, "regex-tests": {"depends": ["regex"], "file_name": "regex-tests.tar", "imports": [], "install_dir": "site", "name": "regex-tests", "package_type": "package", "sha256": "44431a424879b1ca4ea89b9de02dd1dccbfe77ff507598ddc638b8a8860737eb", "shared_library": false, "unvendored_tests": false, "version": "2023.8.8"}, "requests": {"depends": ["charset-normalizer", "idna", "urllib3", "certifi"], "file_name": "requests-2.31.0-py3-none-any.whl", "imports": ["requests"], "install_dir": "site", "name": "requests", "package_type": "package", "sha256": "98a4d2e9c220884a6e17b1b543b7178c957f3ebb2840ffb0fb214b8bac3f32dc", "shared_library": false, "unvendored_tests": false, "version": "2.31.0"}, "retrying": {"depends": ["six"], "file_name": "retrying-1.3.4-py3-none-any.whl", "imports": ["retrying"], "install_dir": "site", "name": "retrying", "package_type": "package", "sha256": "19e2898888825a8c3a59dba5624b1c74d6b1f0bf28533ed05a0993a973c544cf", "shared_library": false, "unvendored_tests": false, "version": "1.3.4"}, "river": {"depends": ["numpy", "pandas", "pytest", "scipy"], "file_name": "river-0.19.0-cp311-cp311-emscripten_3_1_46_wasm32.whl", "imports": ["river"], "install_dir": "site", "name": "river", "package_type": "package", "sha256": "2caf2bf8b027f4a42fd0a9d8b15066c85c0caf23d363f0768cc4cb583c50afd2", "shared_library": false, "unvendored_tests": true, "version": "0.19.0"}, "river-tests": {"depends": ["river"], "file_name": "river-tests.tar", "imports": [], "install_dir": "site", "name": "river-tests", "package_type": "package", "sha256": "2859ccd4355aa0a9779ce74407f3717daecc512fd95c374ca8869c8e595a230c", "shared_library": false, "unvendored_tests": false, "version": "0.19.0"}, "robotraconteur": {"depends": ["numpy"], "file_name": "RobotRaconteur-0.15.1-cp311-cp311-emscripten_3_1_46_wasm32.whl", "imports": ["RobotRaconteur"], "install_dir": "site", "name": "RobotRaconteur", "package_type": "package", "sha256": "842f69e897a47cb2837b0e099bae837117dd9a771c71dc239e99130d801b2678", "shared_library": false, "unvendored_tests": false, "version": "0.15.1"}, "ruamel-yaml": {"depends": [], "file_name": "ruamel.yaml-0.17.32-py3-none-any.whl", "imports": ["ruamel"], "install_dir": "site", "name": "ruamel.yaml", "package_type": "package", "sha256": "e81940c2003cb6bb53b396f6d553fcccae55a813ad399aa50cf08aa6a874c8fe", "shared_library": false, "unvendored_tests": false, "version": "0.17.32"}, "rust-panic-test": {"depends": [], "file_name": "rust_panic_test-1.0-cp311-cp311-emscripten_3_1_46_wasm32.whl", "imports": ["rust-panic-test"], "install_dir": "site", "name": "rust-panic-test", "package_type": "package", "sha256": "f37e7a9f92a3f82c02178679a014cd9f305465d9fc935a9e2115980d46f5a987", "shared_library": false, "unvendored_tests": false, "version": "1.0"}, "scikit-image": {"depends": ["packaging", "numpy", "scipy", "networkx", "pillow", "imageio", "pywavelets", "lazy_loader"], "file_name": "scikit_image-0.21.0-cp311-cp311-emscripten_3_1_46_wasm32.whl", "imports": ["skimage"], "install_dir": "site", "name": "scikit-image", "package_type": "package", "sha256": "915d57c321b7dbb49adfa70b500725b6a17ebf4ef47c60a4229dcfdcb9c51bc0", "shared_library": false, "unvendored_tests": true, "version": "0.21.0"}, "scikit-image-tests": {"depends": ["scikit-image"], "file_name": "scikit-image-tests.tar", "imports": [], "install_dir": "site", "name": "scikit-image-tests", "package_type": "package", "sha256": "673dc4ad087499925acfaea2b9ad833b31ced37e512a5dfb90a293ee78e14c95", "shared_library": false, "unvendored_tests": false, "version": "0.21.0"}, "scikit-learn": {"depends": ["scipy", "joblib", "threadpoolctl"], "file_name": "scikit_learn-1.3.1-cp311-cp311-emscripten_3_1_46_wasm32.whl", "imports": ["sklearn"], "install_dir": "site", "name": "scikit-learn", "package_type": "package", "sha256": "7799c5b0cd493b05ad14fb23b432b77163dc09b19e151b07b9006a05d6ed1d75", "shared_library": false, "unvendored_tests": true, "version": "1.3.1"}, "scikit-learn-tests": {"depends": ["scikit-learn"], "file_name": "scikit-learn-tests.tar", "imports": [], "install_dir": "site", "name": "scikit-learn-tests", "package_type": "package", "sha256": "de9494dd22b7c8b5fa412239a53a16c1076a578c274f19b2d8e7ca9d299f815a", "shared_library": false, "unvendored_tests": false, "version": "1.3.1"}, "scipy": {"depends": ["numpy", "openblas"], "file_name": "scipy-1.11.2-cp311-cp311-emscripten_3_1_46_wasm32.whl", "imports": ["scipy"], "install_dir": "site", "name": "scipy", "package_type": "package", "sha256": "20fb3193b0444614045692c6f3bddfe33dea155d7b2797c779f4079fe0f4fb86", "shared_library": false, "unvendored_tests": true, "version": "1.11.2"}, "scipy-tests": {"depends": ["scipy"], "file_name": "scipy-tests.tar", "imports": [], "install_dir": "site", "name": "scipy-tests", "package_type": "package", "sha256": "9a1276ae38f604e6f80c6ed4153fb56f1f9b0955da940c20b23715b0c259f60a", "shared_library": false, "unvendored_tests": false, "version": "1.11.2"}, "screed": {"depends": [], "file_name": "screed-1.1.2-py2.py3-none-any.whl", "imports": ["bigtests", "screed"], "install_dir": "site", "name": "screed", "package_type": "package", "sha256": "0c0e76342354c4dccbb458fec75ff682793f866802b06f019ecf0a09e0d6b336", "shared_library": false, "unvendored_tests": true, "version": "1.1.2"}, "screed-tests": {"depends": ["screed"], "file_name": "screed-tests.tar", "imports": [], "install_dir": "site", "name": "screed-tests", "package_type": "package", "sha256": "0625705f10451327ea5b33c20a1725383a4fa1190d84794df0be5b4f781eddcc", "shared_library": false, "unvendored_tests": false, "version": "1.1.2"}, "setuptools": {"depends": ["distutils", "pyparsing"], "file_name": "setuptools-68.1.2-py3-none-any.whl", "imports": ["_distutils_hack", "pkg_resources", "setuptools"], "install_dir": "site", "name": "setuptools", "package_type": "package", "sha256": "7d0c185c16974f0f57f848fcc16c2647dce1a78b7c5f124400716ec2a2053ce1", "shared_library": false, "unvendored_tests": false, "version": "68.1.2"}, "shapely": {"depends": ["numpy"], "file_name": "Shapely-1.8.2-cp311-cp311-emscripten_3_1_46_wasm32.whl", "imports": ["shapely"], "install_dir": "site", "name": "shapely", "package_type": "package", "sha256": "f0d41e050143716feaa5b63003422969f9b2e37bb23dd4db0995f47e8ce45465", "shared_library": false, "unvendored_tests": true, "version": "1.8.2"}, "shapely-tests": {"depends": ["shapely"], "file_name": "shapely-tests.tar", "imports": [], "install_dir": "site", "name": "shapely-tests", "package_type": "package", "sha256": "c5edffecf747de727e8b12cf1c034fbc74e9081c7c577f34087dcd7bc6058973", "shared_library": false, "unvendored_tests": false, "version": "1.8.2"}, "sharedlib-test": {"depends": [], "file_name": "sharedlib-test-1.0.zip", "imports": [], "install_dir": "dynlib", "name": "sharedlib-test", "package_type": "shared_library", "sha256": "553ac8833e45246c88960b71659915fc2b1263404228d01692193abd2d4ab78f", "shared_library": true, "unvendored_tests": false, "version": "1.0"}, "sharedlib-test-py": {"depends": ["sharedlib-test"], "file_name": "sharedlib_test_py-1.0-cp311-cp311-emscripten_3_1_46_wasm32.whl", "imports": ["sharedlib_test"], "install_dir": "site", "name": "sharedlib-test-py", "package_type": "package", "sha256": "9038ae4d3727e8c57ba233888ad0f0d45a55285a9d7f0ba20bf88fc40579902e", "shared_library": false, "unvendored_tests": false, "version": "1.0"}, "simplejson": {"depends": [], "file_name": "simplejson-3.19.1-cp311-cp311-emscripten_3_1_46_wasm32.whl", "imports": ["simplejson"], "install_dir": "site", "name": "simplejson", "package_type": "package", "sha256": "a449dd8dc4143369d0cc1803c301b101f785980bc1868821edf4f74730112bb9", "shared_library": false, "unvendored_tests": true, "version": "3.19.1"}, "simplejson-tests": {"depends": ["simplejson"], "file_name": "simplejson-tests.tar", "imports": [], "install_dir": "site", "name": "simplejson-tests", "package_type": "package", "sha256": "f952a666496903cda9258ab6dbc4f7b6eca1c37bb27d1fca75db1af3afd0a7d8", "shared_library": false, "unvendored_tests": false, "version": "3.19.1"}, "sisl": {"depends": ["pyparsing", "numpy", "scipy", "tqdm", "xarray", "pandas", "matplotlib"], "file_name": "sisl-0.14.2-cp311-cp311-emscripten_3_1_46_wasm32.whl", "imports": ["sisl_toolbox", "sisl"], "install_dir": "site", "name": "sisl", "package_type": "package", "sha256": "add61e40a5308fd97a2ee4e09be502ec03bef138927bc87119551d62dae66f76", "shared_library": false, "unvendored_tests": true, "version": "0.14.2"}, "sisl-tests": {"depends": ["sisl"], "file_name": "sisl-tests.tar", "imports": [], "install_dir": "site", "name": "sisl-tests", "package_type": "package", "sha256": "41c47ca42bec2114e222b4ead743f1557ade03ae1fff3be0f2cfd467ced5f9c7", "shared_library": false, "unvendored_tests": false, "version": "0.14.2"}, "six": {"depends": [], "file_name": "six-1.16.0-py2.py3-none-any.whl", "imports": ["six"], "install_dir": "site", "name": "six", "package_type": "package", "sha256": "fad96a9848b9ddc039f72d0e07fee1d4a7caf15c3e4beda9a114fd4875c52583", "shared_library": false, "unvendored_tests": false, "version": "1.16.0"}, "smart-open": {"depends": [], "file_name": "smart_open-6.3.0-py3-none-any.whl", "imports": ["smart_open"], "install_dir": "site", "name": "smart_open", "package_type": "package", "sha256": "b4059b9b7c6185620e71d0562fabb83ed66bbc3c37ec94676c90185a4cbb80c1", "shared_library": false, "unvendored_tests": false, "version": "6.3.0"}, "soupsieve": {"depends": [], "file_name": "soupsieve-2.4.1-py3-none-any.whl", "imports": ["soupsieve"], "install_dir": "site", "name": "soupsieve", "package_type": "package", "sha256": "31d65e0030897b0d7251ad328e200881f9fe5416891addb1b9a33a77d127f112", "shared_library": false, "unvendored_tests": false, "version": "2.4.1"}, "sourmash": {"depends": ["screed", "cffi", "deprecation", "cachetools", "numpy", "matplotlib", "scipy", "sqlite3", "bitstring"], "file_name": "sourmash-4.8.4-py3-none-emscripten_3_1_46_wasm32.whl", "imports": ["sourmash"], "install_dir": "site", "name": "sourmash", "package_type": "package", "sha256": "8d8fbdb14218be1b592214799d8a437ccf7a3f6598c474e2946f2a5d9041ae44", "shared_library": false, "unvendored_tests": false, "version": "4.8.4"}, "sparseqr": {"depends": ["pycparser", "cffi", "numpy", "scipy", "suitesparse", "distutils"], "file_name": "sparseqr-1.2-cp311-cp311-emscripten_3_1_46_wasm32.whl", "imports": ["sparseqr"], "install_dir": "site", "name": "sparseqr", "package_type": "package", "sha256": "c8eccd6783c393126e4239408dd315084a4e254d69627fbec98b455f3b0bc7e6", "shared_library": false, "unvendored_tests": false, "version": "1.2"}, "sqlalchemy": {"depends": ["sqlite3", "typing-extensions"], "file_name": "SQLAlchemy-2.0.20-cp311-cp311-emscripten_3_1_46_wasm32.whl", "imports": ["sqlalchemy"], "install_dir": "site", "name": "sqlalchemy", "package_type": "package", "sha256": "58c78a8d513bc37d5e974759ba07f5369581d240c02178d380965c8a96a682f2", "shared_library": false, "unvendored_tests": true, "version": "2.0.20"}, "sqlalchemy-tests": {"depends": ["sqlalchemy"], "file_name": "sqlalchemy-tests.tar", "imports": [], "install_dir": "site", "name": "sqlalchemy-tests", "package_type": "package", "sha256": "4263699b03d8f34ec402b0cd2126b6082c9eb58ca81a05a705319356be5b2e8f", "shared_library": false, "unvendored_tests": false, "version": "2.0.20"}, "sqlite3": {"depends": [], "file_name": "sqlite3-1.0.0.zip", "imports": ["sqlite3", "_sqlite3"], "install_dir": "stdlib", "name": "sqlite3", "package_type": "cpython_module", "sha256": "49dad33820f94c406be5b8fd06f618b16824818476d96e35e5faef6a319f8835", "shared_library": true, "unvendored_tests": false, "version": "1.0.0"}, "ssl": {"depends": ["openssl"], "file_name": "ssl-1.0.0.zip", "imports": ["ssl", "_ssl"], "install_dir": "stdlib", "name": "ssl", "package_type": "cpython_module", "sha256": "89b210fdbd9f25173d0477b10613d0c7ebd662e2c26fcabbe6959c4a83197573", "shared_library": true, "unvendored_tests": false, "version": "1.0.0"}, "statsmodels": {"depends": ["distutils", "numpy", "scipy", "pandas", "patsy", "packaging"], "file_name": "statsmodels-0.14.0-cp311-cp311-emscripten_3_1_46_wasm32.whl", "imports": ["statsmodels"], "install_dir": "site", "name": "statsmodels", "package_type": "package", "sha256": "18e28f46dc960d4dc04e12bc67fca32f9778ca0b756ba7b25486bae7c6df4861", "shared_library": false, "unvendored_tests": true, "version": "0.14.0"}, "statsmodels-tests": {"depends": ["statsmodels"], "file_name": "statsmodels-tests.tar", "imports": [], "install_dir": "site", "name": "statsmodels-tests", "package_type": "package", "sha256": "24c2204b8f5b15f5677cf04edb2cc9a6938d76cbe6adfc53bdf0b74a2aaf3ec7", "shared_library": false, "unvendored_tests": false, "version": "0.14.0"}, "suitesparse": {"depends": ["openblas"], "file_name": "suitesparse-5.11.0.zip", "imports": [], "install_dir": "dynlib", "name": "suitesparse", "package_type": "shared_library", "sha256": "2f146944f72146cdf700e2c79a94321957c235ec1c63bd040413d322baf64ffb", "shared_library": true, "unvendored_tests": false, "version": "5.11.0"}, "svgwrite": {"depends": [], "file_name": "svgwrite-1.4.3-py3-none-any.whl", "imports": ["svgwrite"], "install_dir": "site", "name": "svgwrite", "package_type": "package", "sha256": "2e01c175913b8d1abdadf81671321f5b8c00c5574f6884e031677aaebf3b0011", "shared_library": false, "unvendored_tests": false, "version": "1.4.3"}, "swiglpk": {"depends": [], "file_name": "swiglpk-5.0.8-cp311-cp311-emscripten_3_1_46_wasm32.whl", "imports": ["swiglpk"], "install_dir": "site", "name": "swiglpk", "package_type": "package", "sha256": "9c0951b2ab9d3996bfb9eca346c49b71065f448c33ad970a28afbcab79fe9eef", "shared_library": false, "unvendored_tests": false, "version": "5.0.8"}, "sympy": {"depends": ["distutils", "mpmath"], "file_name": "sympy-1.12-py3-none-any.whl", "imports": ["isympy", "sympy"], "install_dir": "site", "name": "sympy", "package_type": "package", "sha256": "b7075c6d69bffda1afc6eacdbbebc7d82437508539e855f34f01c4c6dc9137b6", "shared_library": false, "unvendored_tests": true, "version": "1.12"}, "sympy-tests": {"depends": ["sympy"], "file_name": "sympy-tests.tar", "imports": [], "install_dir": "site", "name": "sympy-tests", "package_type": "package", "sha256": "b5811c381240f14d2d7edbd481325c1c3491866847032491606c3c36f1172f86", "shared_library": false, "unvendored_tests": false, "version": "1.12"}, "tblib": {"depends": [], "file_name": "tblib-3.0.0-py3-none-any.whl", "imports": ["tblib"], "install_dir": "site", "name": "tblib", "package_type": "package", "sha256": "091820a33875a03e3e12ce3050ed8a147940f9bd56840a42c2f6cba0c14e77fa", "shared_library": false, "unvendored_tests": false, "version": "3.0.0"}, "termcolor": {"depends": [], "file_name": "termcolor-2.3.0-py3-none-any.whl", "imports": ["termcolor"], "install_dir": "site", "name": "termcolor", "package_type": "package", "sha256": "8481f308073f0c8b2b551df71bab8f7df2d733c0f22934ea772b37fec0e49dfc", "shared_library": false, "unvendored_tests": false, "version": "2.3.0"}, "test": {"depends": [], "file_name": "test-1.0.0.zip", "imports": ["test"], "install_dir": "stdlib", "name": "test", "package_type": "cpython_module", "sha256": "00233e7098ca725070b62a0575ef0e4414f3b2f978c2601bcde2a325a5c672b6", "shared_library": true, "unvendored_tests": false, "version": "1.0.0"}, "texttable": {"depends": [], "file_name": "texttable-1.6.7-py2.py3-none-any.whl", "imports": ["texttable"], "install_dir": "site", "name": "texttable", "package_type": "package", "sha256": "bfd20ec95d90865c2c0819c38dde9535588e93da45ee0f866004d17d3ca10451", "shared_library": false, "unvendored_tests": false, "version": "1.6.7"}, "threadpoolctl": {"depends": [], "file_name": "threadpoolctl-3.2.0-py3-none-any.whl", "imports": ["threadpoolctl"], "install_dir": "site", "name": "threadpoolctl", "package_type": "package", "sha256": "73fa129cbab9daa4a0f381af17824a932b8957777a9e73a02bf733db9040ed7a", "shared_library": false, "unvendored_tests": false, "version": "3.2.0"}, "tomli": {"depends": [], "file_name": "tomli-2.0.1-py3-none-any.whl", "imports": ["tomli"], "install_dir": "site", "name": "tomli", "package_type": "package", "sha256": "86c6b2919638edcca8ce1762e4e70a95553492dae67fbce61205d154aa7ec7d7", "shared_library": false, "unvendored_tests": false, "version": "2.0.1"}, "tomli-w": {"depends": [], "file_name": "tomli_w-1.0.0-py3-none-any.whl", "imports": ["tomli_w"], "install_dir": "site", "name": "tomli-w", "package_type": "package", "sha256": "a7c41f6e333c3554e96d895ec1b1500d4cf05039786106ae54330cbf0b2cffed", "shared_library": false, "unvendored_tests": false, "version": "1.0.0"}, "toolz": {"depends": [], "file_name": "toolz-0.12.0-py3-none-any.whl", "imports": ["tlz", "toolz"], "install_dir": "site", "name": "toolz", "package_type": "package", "sha256": "5f2ed674746b0564f59ca4d89cec69253a03f55b6233e10a7fe3918cc712450b", "shared_library": false, "unvendored_tests": true, "version": "0.12.0"}, "toolz-tests": {"depends": ["toolz"], "file_name": "toolz-tests.tar", "imports": [], "install_dir": "site", "name": "toolz-tests", "package_type": "package", "sha256": "4499b52adfde700758f72039149c3032f51f3eef0093d56870de16281b96054f", "shared_library": false, "unvendored_tests": false, "version": "0.12.0"}, "tqdm": {"depends": [], "file_name": "tqdm-4.66.1-py3-none-any.whl", "imports": ["tqdm"], "install_dir": "site", "name": "tqdm", "package_type": "package", "sha256": "81502627ac31f06a64d73833d1303cd530e299125c6ce81b40e7a4115dd57314", "shared_library": false, "unvendored_tests": false, "version": "4.66.1"}, "traits": {"depends": [], "file_name": "traits-6.4.2-cp311-cp311-emscripten_3_1_46_wasm32.whl", "imports": ["traits"], "install_dir": "site", "name": "traits", "package_type": "package", "sha256": "731ae94a327f4ec6216fd2cc69e074468dd08360fcf73c93be2e1186ed107e1c", "shared_library": false, "unvendored_tests": true, "version": "6.4.2"}, "traits-tests": {"depends": ["traits"], "file_name": "traits-tests.tar", "imports": [], "install_dir": "site", "name": "traits-tests", "package_type": "package", "sha256": "2da74f37e577489e6d4c0565fe2353e6e3601937820218d4785c8a14180fccd0", "shared_library": false, "unvendored_tests": false, "version": "6.4.2"}, "tskit": {"depends": ["numpy", "svgwrite", "jsonschema"], "file_name": "tskit-0.5.5-cp311-cp311-emscripten_3_1_46_wasm32.whl", "imports": ["tskit"], "install_dir": "site", "name": "tskit", "package_type": "package", "sha256": "df70c2756ac1810c14715fca06be0a59576627b2a33b9ec5d730e06450c6298a", "shared_library": false, "unvendored_tests": false, "version": "0.5.5"}, "typing-extensions": {"depends": [], "file_name": "typing_extensions-4.7.1-py3-none-any.whl", "imports": ["typing_extensions"], "install_dir": "site", "name": "typing-extensions", "package_type": "package", "sha256": "eb21dbb2a3bcaba4e0f6d2345906fb7635ac6f8287a0133ebef35cb81489e668", "shared_library": false, "unvendored_tests": false, "version": "4.7.1"}, "uncertainties": {"depends": ["future"], "file_name": "uncertainties-3.1.7-py2.py3-none-any.whl", "imports": ["uncertainties"], "install_dir": "site", "name": "uncertainties", "package_type": "package", "sha256": "23cb91fc29fc75c1a34ffc8273a38fa1e8033da451461eae889628217f14f2c8", "shared_library": false, "unvendored_tests": true, "version": "3.1.7"}, "uncertainties-tests": {"depends": ["uncertainties"], "file_name": "uncertainties-tests.tar", "imports": [], "install_dir": "site", "name": "uncertainties-tests", "package_type": "package", "sha256": "b85cf522aa76b86cbcafb243fb1a29b27c865ad85107420bca6afc8914ca4b1b", "shared_library": false, "unvendored_tests": false, "version": "3.1.7"}, "unyt": {"depends": ["numpy", "sympy"], "file_name": "unyt-2.9.5-py2.py3-none-any.whl", "imports": ["unyt"], "install_dir": "site", "name": "unyt", "package_type": "package", "sha256": "cb49e4927dae619a9e43659e4a18a7868aa3f82656d34ce1c18b0cc0b8e03181", "shared_library": false, "unvendored_tests": true, "version": "2.9.5"}, "unyt-tests": {"depends": ["unyt"], "file_name": "unyt-tests.tar", "imports": [], "install_dir": "site", "name": "unyt-tests", "package_type": "package", "sha256": "bbf8a9b09e2762167dd80428fb1dc95830cadc57196cd09d134bc1055e0a4b3d", "shared_library": false, "unvendored_tests": false, "version": "2.9.5"}, "urllib3": {"depends": [], "file_name": "urllib3-2.1.0-py3-none-any.whl", "imports": ["urllib3"], "install_dir": "site", "name": "urllib3", "package_type": "package", "sha256": "0dc9140041c8ba0786e7690df6e466ebee96e726469d07bb9552abd8ff653a6d", "shared_library": false, "unvendored_tests": false, "version": "2.1.0"}, "webencodings": {"depends": [], "file_name": "webencodings-0.5.1-py2.py3-none-any.whl", "imports": ["webencodings"], "install_dir": "site", "name": "webencodings", "package_type": "package", "sha256": "973e83c0220cdedf3ab39288da0a60f97d047abe8f481a30c936856413d6de60", "shared_library": false, "unvendored_tests": false, "version": "0.5.1"}, "wordcloud": {"depends": ["matplotlib"], "file_name": "wordcloud-1.9.2-cp311-cp311-emscripten_3_1_46_wasm32.whl", "imports": ["wordcloud"], "install_dir": "site", "name": "wordcloud", "package_type": "package", "sha256": "8d4cc4fc724f2d4f809c9c31050a591e0e5ef51c86eda4b3c6f6a3e0103e1506", "shared_library": false, "unvendored_tests": false, "version": "1.9.2"}, "wrapt": {"depends": [], "file_name": "wrapt-1.15.0-cp311-cp311-emscripten_3_1_46_wasm32.whl", "imports": ["wrapt"], "install_dir": "site", "name": "wrapt", "package_type": "package", "sha256": "cfe5c594af872251a992c13cd7c9a1d9438c0a11da5c470eef7d7713773794e3", "shared_library": false, "unvendored_tests": false, "version": "1.15.0"}, "xarray": {"depends": ["numpy", "packaging", "pandas"], "file_name": "xarray-2023.12.0-py3-none-any.whl", "imports": ["xarray"], "install_dir": "site", "name": "xarray", "package_type": "package", "sha256": "6d201070f094dfbbcfad9a4b2b6cd390d786c6cc21b7be926ba925a0a1fb3113", "shared_library": false, "unvendored_tests": true, "version": "2023.12.0"}, "xarray-tests": {"depends": ["xarray"], "file_name": "xarray-tests.tar", "imports": [], "install_dir": "site", "name": "xarray-tests", "package_type": "package", "sha256": "f6add9e859a0951f37cb2972d51f4f59ca7b2ae5baa58609dbc6dfa2f53e7e9f", "shared_library": false, "unvendored_tests": false, "version": "2023.12.0"}, "xgboost": {"depends": ["numpy", "scipy", "setuptools"], "file_name": "xgboost-1.6.1-cp311-cp311-emscripten_3_1_46_wasm32.whl", "imports": ["xgboost"], "install_dir": "site", "name": "xgboost", "package_type": "package", "sha256": "6a1838cb28ffafb570a582f8d1f5f7905c8419f504f0b323a54a81ebcaf56089", "shared_library": false, "unvendored_tests": false, "version": "1.6.1"}, "xlrd": {"depends": [], "file_name": "xlrd-2.0.1-py2.py3-none-any.whl", "imports": ["xlrd"], "install_dir": "site", "name": "xlrd", "package_type": "package", "sha256": "5f4ee0aadb7f0364a27454e47bf8ba0a8848a6fbc976209476cf50d9bbdbb823", "shared_library": false, "unvendored_tests": false, "version": "2.0.1"}, "xyzservices": {"depends": [], "file_name": "xyzservices-2023.7.0-py3-none-any.whl", "imports": ["xyzservices"], "install_dir": "site", "name": "xyzservices", "package_type": "package", "sha256": "b20b3b2c33dc4670664d2b00f5b925eedb72b6dddb6f74098f5e1bf29653fb8e", "shared_library": false, "unvendored_tests": true, "version": "2023.7.0"}, "xyzservices-tests": {"depends": ["xyzservices"], "file_name": "xyzservices-tests.tar", "imports": [], "install_dir": "site", "name": "xyzservices-tests", "package_type": "package", "sha256": "4314b2d64d1185b8087e9bad1b9a3f2a54a7c12be957ce56baea336dbf27b19a", "shared_library": false, "unvendored_tests": false, "version": "2023.7.0"}, "yarl": {"depends": ["multidict", "idna"], "file_name": "yarl-1.9.2-cp311-cp311-emscripten_3_1_46_wasm32.whl", "imports": ["yarl"], "install_dir": "site", "name": "yarl", "package_type": "package", "sha256": "f009548bcd61530020e293e44bc71f2094b964076738d747383b81127aad313b", "shared_library": false, "unvendored_tests": false, "version": "1.9.2"}, "yt": {"depends": ["numpy", "matplotlib", "sympy", "setuptools", "packaging", "unyt", "cmyt", "colorspacious", "tqdm", "tomli", "tomli-w"], "file_name": "yt-4.1.4-cp311-cp311-emscripten_3_1_46_wasm32.whl", "imports": ["yt"], "install_dir": "site", "name": "yt", "package_type": "package", "sha256": "6ab5ca825fe792a92667d373cfa8c7e3ebf801b91d61942d97e79b2ec130632c", "shared_library": false, "unvendored_tests": false, "version": "4.1.4"}, "zarr": {"depends": ["numpy", "asciitree", "numcodecs"], "file_name": "zarr-2.13.3-py3-none-any.whl", "imports": ["zarr"], "install_dir": "site", "name": "zarr", "package_type": "package", "sha256": "2637c668cca2ec8a295256b2540e913414f6119c61a2190c6e4d53f20a74c3ea", "shared_library": false, "unvendored_tests": true, "version": "2.13.3"}, "zarr-tests": {"depends": ["zarr"], "file_name": "zarr-tests.tar", "imports": [], "install_dir": "site", "name": "zarr-tests", "package_type": "package", "sha256": "d411b4e0b526ca7cfc953fc2081836b0dbd32a7728be266f4fe0d35285cb6c06", "shared_library": false, "unvendored_tests": false, "version": "2.13.3"}, "zengl": {"depends": [], "file_name": "zengl-2.2.0-cp311-cp311-emscripten_3_1_46_wasm32.whl", "imports": ["zengl", "_zengl", "_zengl_js"], "install_dir": "site", "name": "zengl", "package_type": "package", "sha256": "da5d34f3591f9d745f907b95298cb758761f1e109e061d7adaf21d970f591c9a", "shared_library": false, "unvendored_tests": false, "version": "2.2.0"}}}
\ No newline at end of file
This source diff could not be displayed because it is too large. You can view the blob instead.
// Generated by dts-bundle-generator v8.1.1
/**
*
* The Pyodide version.
*
* The version here is a Python version, following :pep:`440`. This is different
* from the version in ``package.json`` which follows the node package manager
* version convention.
*/
export declare const version: string;
/** @deprecated Use `import type { PyProxy } from "pyodide/ffi"` instead */
interface PyProxy {
[x: string]: any;
}
declare class PyProxy {
/** @private */
$$flags: number;
/** @private */
static [Symbol.hasInstance](obj: any): obj is PyProxy;
/**
* @hideconstructor
*/
constructor();
/** @hidden */
get [Symbol.toStringTag](): string;
/**
* The name of the type of the object.
*
* Usually the value is ``"module.name"`` but for builtins or
* interpreter-defined types it is just ``"name"``. As pseudocode this is:
*
* .. code-block:: python
*
* ty = type(x)
* if ty.__module__ == 'builtins' or ty.__module__ == "__main__":
* return ty.__name__
* else:
* ty.__module__ + "." + ty.__name__
*
*/
get type(): string;
/**
* Returns `str(o)` (unless `pyproxyToStringRepr: true` was passed to
* :js:func:`loadPyodide` in which case it will return `repr(o)`)
*/
toString(): string;
/**
* Destroy the :js:class:`~pyodide.ffi.PyProxy`. This will release the memory. Any further attempt
* to use the object will raise an error.
*
* In a browser supporting :js:data:`FinalizationRegistry`, Pyodide will
* automatically destroy the :js:class:`~pyodide.ffi.PyProxy` when it is garbage collected, however
* there is no guarantee that the finalizer will be run in a timely manner so
* it is better to destroy the proxy explicitly.
*
* @param options
* @param options.message The error message to print if use is attempted after
* destroying. Defaults to "Object has already been destroyed".
*
*/
destroy(options?: {
message?: string;
destroyRoundtrip?: boolean;
}): void;
/**
* Make a new :js:class:`~pyodide.ffi.PyProxy` pointing to the same Python object.
* Useful if the :js:class:`~pyodide.ffi.PyProxy` is destroyed somewhere else.
*/
copy(): PyProxy;
/**
* Converts the :js:class:`~pyodide.ffi.PyProxy` into a JavaScript object as best as possible. By
* default does a deep conversion, if a shallow conversion is desired, you can
* use ``proxy.toJs({depth : 1})``. See :ref:`Explicit Conversion of PyProxy
* <type-translations-pyproxy-to-js>` for more info.
* @param options
* @return The JavaScript object resulting from the conversion.
*/
toJs({ depth, pyproxies, create_pyproxies, dict_converter, default_converter, }?: {
/** How many layers deep to perform the conversion. Defaults to infinite */
depth?: number;
/**
* If provided, :js:meth:`toJs` will store all PyProxies created in this
* list. This allows you to easily destroy all the PyProxies by iterating
* the list without having to recurse over the generated structure. The most
* common use case is to create a new empty list, pass the list as
* ``pyproxies``, and then later iterate over ``pyproxies`` to destroy all of
* created proxies.
*/
pyproxies?: PyProxy[];
/**
* If false, :js:meth:`toJs` will throw a
* :py:exc:`~pyodide.ffi.ConversionError` rather than producing a
* :js:class:`~pyodide.ffi.PyProxy`.
*/
create_pyproxies?: boolean;
/**
* A function to be called on an iterable of pairs ``[key, value]``. Convert
* this iterable of pairs to the desired output. For instance,
* :js:func:`Object.fromEntries` would convert the dict to an object,
* :js:func:`Array.from` converts it to an :js:class:`Array` of pairs, and
* ``(it) => new Map(it)`` converts it to a :js:class:`Map` (which is the
* default behavior).
*/
dict_converter?: (array: Iterable<[
key: string,
value: any
]>) => any;
/**
* Optional argument to convert objects with no default conversion. See the
* documentation of :meth:`~pyodide.ffi.to_js`.
*/
default_converter?: (obj: PyProxy, convert: (obj: PyProxy) => any, cacheConversion: (obj: PyProxy, result: any) => void) => any;
}): any;
}
declare class PyProxyWithLength extends PyProxy {
/** @private */
static [Symbol.hasInstance](obj: any): obj is PyProxy;
}
/** @deprecated Use `import type { PyProxyWithLength } from "pyodide/ffi"` instead */
interface PyProxyWithLength extends PyLengthMethods {
}
declare class PyLengthMethods {
/**
* The length of the object.
*/
get length(): number;
}
declare class PyProxyWithGet extends PyProxy {
/** @private */
static [Symbol.hasInstance](obj: any): obj is PyProxy;
}
/** @deprecated Use `import type { PyProxyWithGet } from "pyodide/ffi"` instead */
interface PyProxyWithGet extends PyGetItemMethods {
}
declare class PyGetItemMethods {
/**
* This translates to the Python code ``obj[key]``.
*
* @param key The key to look up.
* @returns The corresponding value.
*/
get(key: any): any;
}
declare class PyProxyWithSet extends PyProxy {
/** @private */
static [Symbol.hasInstance](obj: any): obj is PyProxy;
}
/** @deprecated Use `import type { PyProxyWithSet } from "pyodide/ffi"` instead */
interface PyProxyWithSet extends PySetItemMethods {
}
declare class PySetItemMethods {
/**
* This translates to the Python code ``obj[key] = value``.
*
* @param key The key to set.
* @param value The value to set it to.
*/
set(key: any, value: any): void;
/**
* This translates to the Python code ``del obj[key]``.
*
* @param key The key to delete.
*/
delete(key: any): void;
}
declare class PyProxyWithHas extends PyProxy {
/** @private */
static [Symbol.hasInstance](obj: any): obj is PyProxy;
}
/** @deprecated Use `import type { PyProxyWithHas } from "pyodide/ffi"` instead */
interface PyProxyWithHas extends PyContainsMethods {
}
declare class PyContainsMethods {
/**
* This translates to the Python code ``key in obj``.
*
* @param key The key to check for.
* @returns Is ``key`` present?
*/
has(key: any): boolean;
}
declare class PyIterable extends PyProxy {
/** @private */
static [Symbol.hasInstance](obj: any): obj is PyProxy;
}
/** @deprecated Use `import type { PyIterable } from "pyodide/ffi"` instead */
interface PyIterable extends PyIterableMethods {
}
declare class PyIterableMethods {
/**
* This translates to the Python code ``iter(obj)``. Return an iterator
* associated to the proxy. See the documentation for
* :js:data:`Symbol.iterator`.
*
* This will be used implicitly by ``for(let x of proxy){}``.
*/
[Symbol.iterator](): Iterator<any, any, any>;
}
declare class PyAsyncIterable extends PyProxy {
/** @private */
static [Symbol.hasInstance](obj: any): obj is PyProxy;
}
/** @deprecated Use `import type { PyAsyncIterable } from "pyodide/ffi"` instead */
interface PyAsyncIterable extends PyAsyncIterableMethods {
}
declare class PyAsyncIterableMethods {
/**
* This translates to the Python code ``aiter(obj)``. Return an async iterator
* associated to the proxy. See the documentation for :js:data:`Symbol.asyncIterator`.
*
* This will be used implicitly by ``for(await let x of proxy){}``.
*/
[Symbol.asyncIterator](): AsyncIterator<any, any, any>;
}
declare class PyIterator extends PyProxy {
/** @private */
static [Symbol.hasInstance](obj: any): obj is PyProxy;
}
/** @deprecated Use `import type { PyIterator } from "pyodide/ffi"` instead */
interface PyIterator extends PyIteratorMethods {
}
declare class PyIteratorMethods {
/** @private */
[Symbol.iterator](): this;
/**
* This translates to the Python code ``next(obj)``. Returns the next value of
* the generator. See the documentation for :js:meth:`Generator.next` The
* argument will be sent to the Python generator.
*
* This will be used implicitly by ``for(let x of proxy){}``.
*
* @param any The value to send to the generator. The value will be assigned
* as a result of a yield expression.
* @returns 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 :py:exc:`StopIteration`
* exception, ``next`` returns ``{done : true, value : result_value}``.
*/
next(arg?: any): IteratorResult<any, any>;
}
declare class PyGenerator extends PyProxy {
/** @private */
static [Symbol.hasInstance](obj: any): obj is PyProxy;
}
/** @deprecated Use `import type { PyGenerator } from "pyodide/ffi"` instead */
interface PyGenerator extends PyGeneratorMethods {
}
declare class PyGeneratorMethods {
/**
* Throws an exception into the Generator.
*
* See the documentation for :js:meth:`Generator.throw`.
*
* @param exception Error The error to throw into the generator. Must be an
* instanceof ``Error``.
* @returns An Object with two properties: ``done`` and ``value``. When the
* generator yields ``some_value``, ``return`` returns ``{done : false, value
* : some_value}``. When the generator raises a
* ``StopIteration(result_value)`` exception, ``return`` returns ``{done :
* true, value : result_value}``.
*/
throw(exc: any): IteratorResult<any, any>;
/**
* Throws a :py:exc:`GeneratorExit` into the generator and if the
* :py:exc:`GeneratorExit` is not caught returns the argument value ``{done:
* true, value: v}``. If the generator catches the :py:exc:`GeneratorExit` and
* returns or yields another value the next value of the generator this is
* returned in the normal way. If it throws some error other than
* :py:exc:`GeneratorExit` or :py:exc:`StopIteration`, that error is propagated. See
* the documentation for :js:meth:`Generator.return`.
*
* @param any The value to return from the generator.
* @returns An Object with two properties: ``done`` and ``value``. When the
* generator yields ``some_value``, ``return`` returns ``{done : false, value
* : some_value}``. When the generator raises a
* ``StopIteration(result_value)`` exception, ``return`` returns ``{done :
* true, value : result_value}``.
*/
return(v: any): IteratorResult<any, any>;
}
declare class PyAsyncIterator extends PyProxy {
/** @private */
static [Symbol.hasInstance](obj: any): obj is PyProxy;
}
/** @deprecated Use `import type { PyAsyncIterator } from "pyodide/ffi"` instead */
interface PyAsyncIterator extends PyAsyncIteratorMethods {
}
declare class PyAsyncIteratorMethods {
/** @private */
[Symbol.asyncIterator](): this;
/**
* This translates to the Python code ``anext(obj)``. Returns the next value
* of the asynchronous iterator. The argument will be sent to the Python
* iterator (if it's a generator for instance).
*
* This will be used implicitly by ``for(let x of proxy){}``.
*
* @param any The value to send to a generator. The value will be assigned as
* a result of a yield expression.
* @returns An Object with two properties: ``done`` and ``value``. When the
* iterator yields ``some_value``, ``next`` returns ``{done : false, value :
* some_value}``. When the giterator is done, ``next`` returns
* ``{done : true }``.
*/
next(arg?: any): Promise<IteratorResult<any, any>>;
}
declare class PyAsyncGenerator extends PyProxy {
/** @private */
static [Symbol.hasInstance](obj: any): obj is PyProxy;
}
/** @deprecated Use `import type { PyAsyncGenerator } from "pyodide/ffi"` instead */
interface PyAsyncGenerator extends PyAsyncGeneratorMethods {
}
declare class PyAsyncGeneratorMethods {
/**
* Throws an exception into the Generator.
*
* See the documentation for :js:meth:`AsyncGenerator.throw`.
*
* @param exception Error The error to throw into the generator. Must be an
* instanceof ``Error``.
* @returns An Object with two properties: ``done`` and ``value``. When the
* generator yields ``some_value``, ``return`` returns ``{done : false, value
* : some_value}``. When the generator raises a
* ``StopIteration(result_value)`` exception, ``return`` returns ``{done :
* true, value : result_value}``.
*/
throw(exc: any): Promise<IteratorResult<any, any>>;
/**
* Throws a :py:exc:`GeneratorExit` into the generator and if the
* :py:exc:`GeneratorExit` is not caught returns the argument value ``{done:
* true, value: v}``. If the generator catches the :py:exc:`GeneratorExit` and
* returns or yields another value the next value of the generator this is
* returned in the normal way. If it throws some error other than
* :py:exc:`GeneratorExit` or :py:exc:`StopAsyncIteration`, that error is
* propagated. See the documentation for :js:meth:`AsyncGenerator.throw`
*
* @param any The value to return from the generator.
* @returns An Object with two properties: ``done`` and ``value``. When the
* generator yields ``some_value``, ``return`` returns ``{done : false, value
* : some_value}``. When the generator raises a :py:exc:`StopAsyncIteration`
* exception, ``return`` returns ``{done : true, value : result_value}``.
*/
return(v: any): Promise<IteratorResult<any, any>>;
}
declare class PySequence extends PyProxy {
/** @private */
static [Symbol.hasInstance](obj: any): obj is PyProxy;
}
/** @deprecated Use `import type { PySequence } from "pyodide/ffi"` instead */
interface PySequence extends PySequenceMethods {
}
declare class PySequenceMethods {
/** @hidden */
get [Symbol.isConcatSpreadable](): boolean;
/**
* See :js:meth:`Array.join`. The :js:meth:`Array.join` method creates and
* returns a new string by concatenating all of the elements in the
* :py:class:`~collections.abc.Sequence`.
*
* @param separator A string to separate each pair of adjacent elements of the
* Sequence.
*
* @returns A string with all Sequence elements joined.
*/
join(separator?: string): string;
/**
* See :js:meth:`Array.slice`. The :js:meth:`Array.slice` method returns a
* shallow copy of a portion of a :py:class:`~collections.abc.Sequence` into a
* new array object selected from ``start`` to ``stop`` (`stop` not included)
* @param start Zero-based index at which to start extraction. Negative index
* counts back from the end of the Sequence.
* @param stop Zero-based index at which to end extraction. Negative index
* counts back from the end of the Sequence.
* @returns A new array containing the extracted elements.
*/
slice(start?: number, stop?: number): any;
/**
* See :js:meth:`Array.lastIndexOf`. Returns the last index at which a given
* element can be found in the Sequence, or -1 if it is not present.
* @param elt Element to locate in the Sequence.
* @param fromIndex Zero-based index at which to start searching backwards,
* converted to an integer. Negative index counts back from the end of the
* Sequence.
* @returns The last index of the element in the Sequence; -1 if not found.
*/
lastIndexOf(elt: any, fromIndex?: number): number;
/**
* See :js:meth:`Array.indexOf`. Returns the first index at which a given
* element can be found in the Sequence, or -1 if it is not present.
* @param elt Element to locate in the Sequence.
* @param fromIndex Zero-based index at which to start searching, converted to
* an integer. Negative index counts back from the end of the Sequence.
* @returns The first index of the element in the Sequence; -1 if not found.
*/
indexOf(elt: any, fromIndex?: number): number;
/**
* See :js:meth:`Array.forEach`. Executes a provided function once for each
* ``Sequence`` element.
* @param callbackfn A function to execute for each element in the ``Sequence``. Its
* return value is discarded.
* @param thisArg A value to use as ``this`` when executing ``callbackFn``.
*/
forEach(callbackfn: (elt: any) => void, thisArg?: any): void;
/**
* See :js:meth:`Array.map`. Creates a new array populated with the results of
* calling a provided function on every element in the calling ``Sequence``.
* @param callbackfn A function to execute for each element in the ``Sequence``. Its
* return value is added as a single element in the new array.
* @param thisArg A value to use as ``this`` when executing ``callbackFn``.
*/
map<U>(callbackfn: (elt: any, index: number, array: any) => U, thisArg?: any): U[];
/**
* See :js:meth:`Array.filter`. Creates a shallow copy of a portion of a given
* ``Sequence``, filtered down to just the elements from the given array that pass
* the test implemented by the provided function.
* @param callbackfn A function to execute for each element in the array. It
* should return a truthy value to keep the element in the resulting array,
* and a falsy value otherwise.
* @param thisArg A value to use as ``this`` when executing ``predicate``.
*/
filter(predicate: (elt: any, index: number, array: any) => boolean, thisArg?: any): any[];
/**
* See :js:meth:`Array.some`. Tests whether at least one element in the
* ``Sequence`` passes the test implemented by the provided function.
* @param callbackfn A function to execute for each element in the
* ``Sequence``. It should return a truthy value to indicate the element
* passes the test, and a falsy value otherwise.
* @param thisArg A value to use as ``this`` when executing ``predicate``.
*/
some(predicate: (value: any, index: number, array: any[]) => unknown, thisArg?: any): boolean;
/**
* See :js:meth:`Array.every`. Tests whether every element in the ``Sequence``
* passes the test implemented by the provided function.
* @param callbackfn A function to execute for each element in the
* ``Sequence``. It should return a truthy value to indicate the element
* passes the test, and a falsy value otherwise.
* @param thisArg A value to use as ``this`` when executing ``predicate``.
*/
every(predicate: (value: any, index: number, array: any[]) => unknown, thisArg?: any): boolean;
/**
* See :js:meth:`Array.reduce`. Executes a user-supplied "reducer" callback
* function on each element of the Sequence, in order, passing in the return
* value from the calculation on the preceding element. The final result of
* running the reducer across all elements of the Sequence is a single value.
* @param callbackfn A function to execute for each element in the ``Sequence``. Its
* return value is discarded.
* @param thisArg A value to use as ``this`` when executing ``callbackfn``.
*/
reduce(callbackfn: (previousValue: any, currentValue: any, currentIndex: number, array: any) => any, initialValue?: any): any;
/**
* See :js:meth:`Array.reduceRight`. Applies a function against an accumulator
* and each value of the Sequence (from right to left) to reduce it to a
* single value.
* @param callbackfn A function to execute for each element in the Sequence.
* Its return value is discarded.
* @param thisArg A value to use as ``this`` when executing ``callbackFn``.
*/
reduceRight(callbackfn: (previousValue: any, currentValue: any, currentIndex: number, array: any) => any, initialValue: any): any;
/**
* See :js:meth:`Array.at`. Takes an integer value and returns the item at
* that index.
* @param index Zero-based index of the Sequence element to be returned,
* converted to an integer. Negative index counts back from the end of the
* Sequence.
* @returns The element in the Sequence matching the given index.
*/
at(index: number): any;
/**
* The :js:meth:`Array.concat` method is used to merge two or more arrays.
* This method does not change the existing arrays, but instead returns a new
* array.
* @param rest Arrays and/or values to concatenate into a new array.
* @returns A new Array instance.
*/
concat(...rest: ConcatArray<any>[]): any[];
/**
* The :js:meth:`Array.includes` method determines whether a Sequence
* includes a certain value among its entries, returning true or false as
* appropriate.
* @param elt
* @returns
*/
includes(elt: any): any;
/**
* The :js:meth:`Array.entries` method returns a new iterator object that
* contains the key/value pairs for each index in the ``Sequence``.
* @returns A new iterator object.
*/
entries(): IterableIterator<[
number,
any
]>;
/**
* The :js:meth:`Array.keys` method returns a new iterator object that
* contains the keys for each index in the ``Sequence``.
* @returns A new iterator object.
*/
keys(): IterableIterator<number>;
/**
* The :js:meth:`Array.values` method returns a new iterator object that
* contains the values for each index in the ``Sequence``.
* @returns A new iterator object.
*/
values(): IterableIterator<any>;
/**
* The :js:meth:`Array.find` method returns the first element in the provided
* array that satisfies the provided testing function.
* @param predicate A function to execute for each element in the
* ``Sequence``. It should return a truthy value to indicate a matching
* element has been found, and a falsy value otherwise.
* @param thisArg A value to use as ``this`` when executing ``predicate``.
* @returns The first element in the ``Sequence`` that satisfies the provided
* testing function.
*/
find(predicate: (value: any, index: number, obj: any[]) => any, thisArg?: any): any;
/**
* The :js:meth:`Array.findIndex` method returns the index of the first
* element in the provided array that satisfies the provided testing function.
* @param predicate A function to execute for each element in the
* ``Sequence``. It should return a truthy value to indicate a matching
* element has been found, and a falsy value otherwise.
* @param thisArg A value to use as ``this`` when executing ``predicate``.
* @returns The index of the first element in the ``Sequence`` that satisfies
* the provided testing function.
*/
findIndex(predicate: (value: any, index: number, obj: any[]) => any, thisArg?: any): number;
}
declare class PyMutableSequence extends PyProxy {
/** @private */
static [Symbol.hasInstance](obj: any): obj is PyProxy;
}
/** @deprecated Use `import type { PyMutableSequence } from "pyodide/ffi"` instead */
interface PyMutableSequence extends PyMutableSequenceMethods {
}
declare class PyMutableSequenceMethods {
/**
* The :js:meth:`Array.reverse` method reverses a :js:class:`PyMutableSequence` in
* place.
* @returns A reference to the same :js:class:`PyMutableSequence`
*/
reverse(): PyMutableSequence;
/**
* The :js:meth:`Array.sort` method sorts the elements of a
* :js:class:`PyMutableSequence` in place.
* @param compareFn A function that defines the sort order.
* @returns A reference to the same :js:class:`PyMutableSequence`
*/
sort(compareFn?: (a: any, b: any) => number): PyMutableSequence;
/**
* The :js:meth:`Array.splice` method changes the contents of a
* :js:class:`PyMutableSequence` by removing or replacing existing elements and/or
* adding new elements in place.
* @param start Zero-based index at which to start changing the
* :js:class:`PyMutableSequence`.
* @param deleteCount An integer indicating the number of elements in the
* :js:class:`PyMutableSequence` to remove from ``start``.
* @param items The elements to add to the :js:class:`PyMutableSequence`, beginning from
* ``start``.
* @returns An array containing the deleted elements.
*/
splice(start: number, deleteCount?: number, ...items: any[]): any[];
/**
* The :js:meth:`Array.push` method adds the specified elements to the end of
* a :js:class:`PyMutableSequence`.
* @param elts The element(s) to add to the end of the :js:class:`PyMutableSequence`.
* @returns The new length property of the object upon which the method was
* called.
*/
push(...elts: any[]): any;
/**
* The :js:meth:`Array.pop` method removes the last element from a
* :js:class:`PyMutableSequence`.
* @returns The removed element from the :js:class:`PyMutableSequence`; undefined if the
* :js:class:`PyMutableSequence` is empty.
*/
pop(): any;
/**
* The :js:meth:`Array.shift` method removes the first element from a
* :js:class:`PyMutableSequence`.
* @returns The removed element from the :js:class:`PyMutableSequence`; undefined if the
* :js:class:`PyMutableSequence` is empty.
*/
shift(): any;
/**
* The :js:meth:`Array.unshift` method adds the specified elements to the
* beginning of a :js:class:`PyMutableSequence`.
* @param elts The elements to add to the front of the :js:class:`PyMutableSequence`.
* @returns The new length of the :js:class:`PyMutableSequence`.
*/
unshift(...elts: any[]): any;
/**
* The :js:meth:`Array.copyWithin` method shallow copies part of a
* :js:class:`PyMutableSequence` to another location in the same :js:class:`PyMutableSequence`
* without modifying its length.
* @param target Zero-based index at which to copy the sequence to.
* @param start Zero-based index at which to start copying elements from.
* @param end Zero-based index at which to end copying elements from.
* @returns The modified :js:class:`PyMutableSequence`.
*/
copyWithin(target: number, start?: number, end?: number): any;
/**
* The :js:meth:`Array.fill` method changes all elements in an array to a
* static value, from a start index to an end index.
* @param value Value to fill the array with.
* @param start Zero-based index at which to start filling. Default 0.
* @param end Zero-based index at which to end filling. Default
* ``list.length``.
* @returns
*/
fill(value: any, start?: number, end?: number): any;
}
declare class PyAwaitable extends PyProxy {
/** @private */
static [Symbol.hasInstance](obj: any): obj is PyProxy;
}
/** @deprecated Use `import type { PyAwaitable } from "pyodide/ffi"` instead */
interface PyAwaitable extends Promise<any> {
}
declare class PyCallable extends PyProxy {
/** @private */
static [Symbol.hasInstance](obj: any): obj is PyCallable;
}
/** @deprecated Use `import type { PyCallable } from "pyodide/ffi"` instead */
interface PyCallable extends PyCallableMethods {
(...args: any[]): any;
}
declare class PyCallableMethods {
/**
* The ``apply()`` method calls the specified function with a given this
* value, and arguments provided as an array (or an array-like object). Like
* :js:meth:`Function.apply`.
*
* @param thisArg The ``this`` argument. Has no effect unless the
* :js:class:`~pyodide.ffi.PyCallable` has :js:meth:`captureThis` set. If
* :js:meth:`captureThis` is set, it will be passed as the first argument to
* the Python function.
* @param jsargs The array of arguments
* @returns The result from the function call.
*/
apply(thisArg: any, jsargs: any): any;
/**
* Calls the function with a given this value and arguments provided
* individually. See :js:meth:`Function.call`.
*
* @param thisArg The ``this`` argument. Has no effect unless the
* :js:class:`~pyodide.ffi.PyCallable` has :js:meth:`captureThis` set. If
* :js:meth:`captureThis` is set, it will be passed as the first argument to
* the Python function.
* @param jsargs The arguments
* @returns The result from the function call.
*/
call(thisArg: any, ...jsargs: any): any;
/**
* Call the function with key word arguments. The last argument must be an
* object with the keyword arguments.
*/
callKwargs(...jsargs: any): any;
/**
* Call the function with stack switching enabled. Functions called this way
* can use
* :py:meth:`PyodideFuture.syncify() <pyodide.webloop.PyodideFuture.syncify>`
* to block until a :py:class:`~asyncio.Future` or :js:class:`Promise` is
* resolved. Only works in runtimes with JS Promise integration.
*
* .. admonition:: Experimental
* :class: warning
*
* This feature is not yet stable.
*
* @experimental
*/
callSyncifying(...jsargs: any): Promise<any>;
/**
* Call the function with stack switching enabled. The last argument must be
* an object with the keyword arguments. Functions called this way can use
* :py:meth:`PyodideFuture.syncify() <pyodide.webloop.PyodideFuture.syncify>`
* to block until a :py:class:`~asyncio.Future` or :js:class:`Promise` is
* resolved. Only works in runtimes with JS Promise integration.
*
* .. admonition:: Experimental
* :class: warning
*
* This feature is not yet stable.
*
* @experimental
*/
callSyncifyingKwargs(...jsargs: any): Promise<any>;
/**
* The ``bind()`` method creates a new function that, when called, has its
* ``this`` keyword set to the provided value, with a given sequence of
* arguments preceding any provided when the new function is called. See
* :js:meth:`Function.bind`.
*
* If the :js:class:`~pyodide.ffi.PyCallable` does not have
* :js:meth:`captureThis` set, the ``this`` parameter will be discarded. If it
* does have :js:meth:`captureThis` set, ``thisArg`` will be set to the first
* argument of the Python function. The returned proxy and the original proxy
* have the same lifetime so destroying either destroys both.
*
* @param thisArg The value to be passed as the ``this`` parameter to the
* target function ``func`` when the bound function is called.
* @param jsargs Extra arguments to prepend to arguments provided to the bound
* function when invoking ``func``.
* @returns
*/
bind(thisArg: any, ...jsargs: any): PyProxy;
/**
* Returns a :js:class:`~pyodide.ffi.PyProxy` that passes ``this`` as the first argument to the
* Python function. The returned :js:class:`~pyodide.ffi.PyProxy` has the internal ``captureThis``
* property set.
*
* It can then be used as a method on a JavaScript object. The returned proxy
* and the original proxy have the same lifetime so destroying either destroys
* both.
*
* For example:
*
* .. code-block:: pyodide
*
* let obj = { a : 7 };
* pyodide.runPython(`
* def f(self):
* return self.a
* `);
* // Without captureThis, it doesn't work to use f as a method for obj:
* obj.f = pyodide.globals.get("f");
* obj.f(); // raises "TypeError: f() missing 1 required positional argument: 'self'"
* // With captureThis, it works fine:
* obj.f = pyodide.globals.get("f").captureThis();
* obj.f(); // returns 7
*
* @returns The resulting :js:class:`~pyodide.ffi.PyProxy`. It has the same lifetime as the
* original :js:class:`~pyodide.ffi.PyProxy` but passes ``this`` to the wrapped function.
*
*/
captureThis(): PyProxy;
}
declare class PyBuffer extends PyProxy {
/** @private */
static [Symbol.hasInstance](obj: any): obj is PyBuffer;
}
/** @deprecated Use `import type { PyBuffer } from "pyodide/ffi"` instead */
interface PyBuffer extends PyBufferMethods {
}
declare class PyBufferMethods {
/**
* Get a view of the buffer data which is usable from JavaScript. No copy is
* ever performed.
*
* 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 use the :js:meth:`~PyProxy.toJs` api or
* copy the buffer to one that doesn't use suboffsets (using e.g.,
* :py:func:`numpy.ascontiguousarray`).
*
* 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
* :js:meth:`~PyProxy.toJs`. :js:class:`DataView` has support for big endian
* data, so you might want to pass ``'dataview'`` as the type argument in that
* case.
*
* @param type The type of the :js:attr:`~pyodide.ffi.PyBufferView.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 :js:meth:`~pyodide.ffi.PyBuffer.getBuffer` will try
* to determine the appropriate output type based on the buffer format string
* (see :std:ref:`struct-format-strings`).
*/
getBuffer(type?: string): PyBufferView;
}
declare class PyDict extends PyProxy {
/** @private */
static [Symbol.hasInstance](obj: any): obj is PyProxy;
}
/** @deprecated Use `import type { PyDict } from "pyodide/ffi"` instead */
interface PyDict extends PyProxyWithGet, PyProxyWithSet, PyProxyWithHas, PyProxyWithLength, PyIterable {
}
/** @deprecated Use `import type { PyBufferView } from "pyodide/ffi"` instead */
declare class PyBufferView {
/**
* The offset of the first entry of the array. For instance if our array
* is 3d, then you will find ``array[0,0,0]`` at
* ``pybuf.data[pybuf.offset]``
*/
offset: number;
/**
* If the data is read only, you should not modify it. There is no way for us
* to enforce this, but it may cause very weird behavior. See
* :py:attr:`memoryview.readonly`.
*/
readonly: boolean;
/**
* The format string for the buffer. See :ref:`struct-format-strings`
* and :py:attr:`memoryview.format`.
*/
format: string;
/**
* How large is each entry in bytes? See :py:attr:`memoryview.itemsize`.
*/
itemsize: number;
/**
* The number of dimensions of the buffer. If ``ndim`` is 0, the buffer
* represents a single scalar or struct. Otherwise, it represents an
* array. See :py:attr:`memoryview.ndim`.
*/
ndim: number;
/**
* The total number of bytes the buffer takes up. This is equal to
* :js:attr:`buff.data.byteLength <TypedArray.byteLength>`. See :py:attr:`memoryview.nbytes`.
*/
nbytes: number;
/**
* The shape of the buffer, that is how long it is in each dimension.
* The length will be equal to ``ndim``. For instance, a 2x3x4 array
* would have shape ``[2, 3, 4]``. See :py:attr:`memoryview.shape`.
*/
shape: number[];
/**
* An array of of length ``ndim`` giving the number of elements to skip
* to get to a new element in each dimension. See the example definition
* of a ``multiIndexToIndex`` function above. See :py:attr:`memoryview.strides`.
*/
strides: number[];
/**
* The actual data. A typed array of an appropriate size backed by a segment
* of the WASM memory.
*
* The ``type`` argument of :js:meth:`~pyodide.ffi.PyBuffer.getBuffer` determines
* which sort of :js:class:`TypedArray` or :js:class:`DataView` to return. By
* default :js:meth:`~pyodide.ffi.PyBuffer.getBuffer` will look at the format string
* to determine the most appropriate option. Most often the result is a
* :js:class:`Uint8Array`.
*
* .. admonition:: Contiguity
* :class: warning
*
* If the buffer is not contiguous, the :js:attr:`~PyBufferView.readonly`
* TypedArray will contain data that is not part of the buffer. Modifying
* this data leads to undefined behavior.
*
* .. admonition:: Read only buffers
* :class: warning
*
* If :js:attr:`buffer.readonly <PyBufferView.readonly>` is ``true``, you
* should not modify the buffer. Modifying a read only buffer leads to
* undefined behavior.
*
*/
data: TypedArray;
/**
* Is it C contiguous? See :py:attr:`memoryview.c_contiguous`.
*/
c_contiguous: boolean;
/**
* Is it Fortran contiguous? See :py:attr:`memoryview.f_contiguous`.
*/
f_contiguous: boolean;
_released: boolean;
_view_ptr: number;
/** @private */
constructor();
/**
* Release the buffer. This allows the memory to be reclaimed.
*/
release(): void;
}
type InFuncType = () => null | undefined | string | ArrayBuffer | Uint8Array | number;
declare function setStdin(options?: {
stdin?: InFuncType;
read?: (buffer: Uint8Array) => number;
error?: boolean;
isatty?: boolean;
autoEOF?: boolean;
}): void;
declare function setStdout(options?: {
batched?: (output: string) => void;
raw?: (charCode: number) => void;
write?: (buffer: Uint8Array) => number;
isatty?: boolean;
}): void;
declare function setStderr(options?: {
batched?: (output: string) => void;
raw?: (charCode: number) => void;
write?: (buffer: Uint8Array) => number;
isatty?: boolean;
}): void;
type PackageType = "package" | "cpython_module" | "shared_library" | "static_library";
export type PackageData = {
name: string;
version: string;
fileName: string;
/** @experimental */
packageType: PackageType;
};
declare function loadPackage(names: string | PyProxy | Array<string>, options?: {
messageCallback?: (message: string) => void;
errorCallback?: (message: string) => void;
checkIntegrity?: boolean;
}): Promise<Array<PackageData>>;
/** @deprecated Use `import type { TypedArray } from "pyodide/ffi"` instead */
export type TypedArray = Int8Array | Uint8Array | Int16Array | Uint16Array | Int32Array | Uint32Array | Uint8ClampedArray | Float32Array | Float64Array;
interface CanvasInterface {
setCanvas2D(canvas: HTMLCanvasElement): void;
getCanvas2D(): HTMLCanvasElement | undefined;
setCanvas3D(canvas: HTMLCanvasElement): void;
getCanvas3D(): HTMLCanvasElement | undefined;
}
declare class PythonError extends Error {
/**
* The address of the error we are wrapping. We may later compare this
* against sys.last_value.
* WARNING: we don't own a reference to this pointer, dereferencing it
* may be a use-after-free error!
* @private
*/
__error_address: number;
/**
* The name of the Python error class, e.g, :py:exc:`RuntimeError` or
* :py:exc:`KeyError`.
*/
type: string;
constructor(type: string, message: string, error_address: number);
}
type NativeFS = {
syncfs: () => Promise<void>;
};
declare class PyodideAPI {
/** @hidden */
static version: string;
/** @hidden */
static loadPackage: typeof loadPackage;
/** @hidden */
static loadedPackages: {
[key: string]: string;
};
/** @hidden */
static ffi: {
PyProxy: typeof PyProxy;
PyProxyWithLength: typeof PyProxyWithLength;
PyProxyWithGet: typeof PyProxyWithGet;
PyProxyWithSet: typeof PyProxyWithSet;
PyProxyWithHas: typeof PyProxyWithHas;
PyDict: typeof PyDict;
PyIterable: typeof PyIterable;
PyAsyncIterable: typeof PyAsyncIterable;
PyIterator: typeof PyIterator;
PyAsyncIterator: typeof PyAsyncIterator;
PyGenerator: typeof PyGenerator;
PyAsyncGenerator: typeof PyAsyncGenerator;
PyAwaitable: typeof PyAwaitable;
PyCallable: typeof PyCallable;
PyBuffer: typeof PyBuffer;
PyBufferView: typeof PyBufferView;
PythonError: typeof PythonError;
PySequence: typeof PySequence;
PyMutableSequence: typeof PyMutableSequence;
};
/** @hidden */
static setStdin: typeof setStdin;
/** @hidden */
static setStdout: typeof setStdout;
/** @hidden */
static setStderr: typeof setStderr;
/**
*
* An alias to the global Python namespace.
*
* For example, to access a variable called ``foo`` in the Python global
* scope, use ``pyodide.globals.get("foo")``
*/
static globals: PyProxy;
/**
* An alias to the `Emscripten File System API
* <https://emscripten.org/docs/api_reference/Filesystem-API.html>`_.
*
* This provides a wide range of POSIX-`like` file/device operations, including
* `mount
* <https://emscripten.org/docs/api_reference/Filesystem-API.html#FS.mount>`_
* which can be used to extend the in-memory filesystem with features like `persistence
* <https://emscripten.org/docs/api_reference/Filesystem-API.html#persistent-data>`_.
*
* While all the file systems implementations are enabled, only the default
* ``MEMFS`` is guaranteed to work in all runtime settings. The implementations
* are available as members of ``FS.filesystems``:
* ``IDBFS``, ``NODEFS``, ``PROXYFS``, ``WORKERFS``.
*/
static FS: any;
/**
* An alias to the `Emscripten Path API
* <https://github.com/emscripten-core/emscripten/blob/main/src/library_path.js>`_.
*
* This provides a variety of operations for working with file system paths, such as
* ``dirname``, ``normalize``, and ``splitPath``.
*/
static PATH: any;
/**
* See :ref:`js-api-pyodide-canvas`.
* @hidetype
*/
static canvas: CanvasInterface;
/**
* A map from posix error names to error codes.
*/
static ERRNO_CODES: {
[code: string]: number;
};
/**
* An alias to the Python :ref:`pyodide <python-api>` package.
*
* You can use this to call functions defined in the Pyodide Python package
* from JavaScript.
*/
static pyodide_py: PyProxy;
/**
* 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.code.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])
*
* :js:func:`loadPackagesFromImports` will call
* ``pyodide.loadPackage(['numpy'])``.
*
* @param code The code to inspect.
* @param options Options passed to :js:func:`pyodide.loadPackage`.
* @param options.messageCallback A callback, called with progress messages
* (optional)
* @param options.errorCallback A callback, called with error/warning messages
* (optional)
* @param options.checkIntegrity If true, check the integrity of the downloaded
* packages (default: true)
* @async
*/
static loadPackagesFromImports(code: string, options?: {
messageCallback?: (message: string) => void;
errorCallback?: (message: string) => void;
checkIntegrity?: boolean;
}): Promise<Array<PackageData>>;
/**
* Runs a string of Python code from JavaScript, using :py:func:`~pyodide.code.eval_code`
* to evaluate the code. If the last statement in the Python code is an
* expression (and the code doesn't end with a semicolon), the value of the
* expression is returned.
*
* @param code The Python code to run
* @param options
* @param options.globals An optional Python dictionary to use as the globals.
* Defaults to :js:attr:`pyodide.globals`.
* @param options.locals An optional Python dictionary to use as the locals.
* Defaults to the same as ``globals``.
* @param options.filename An optional string to use as the file name.
* Defaults to ``"<exec>"``. If a custom file name is given, the
* traceback for any exception that is thrown will show source lines
* (unless the given file name starts with ``<`` and ends with ``>``).
* @returns The result of the Python code translated to JavaScript. See the
* documentation for :py:func:`~pyodide.code.eval_code` for more info.
* @example
* async function main(){
* const pyodide = await loadPyodide();
* console.log(pyodide.runPython("1 + 2"));
* // 3
*
* const globals = pyodide.toPy({ x: 3 });
* console.log(pyodide.runPython("x + 1", { globals }));
* // 4
*
* const locals = pyodide.toPy({ arr: [1, 2, 3] });
* console.log(pyodide.runPython("sum(arr)", { locals }));
* // 6
* }
* main();
*/
static runPython(code: string, options?: {
globals?: PyProxy;
locals?: PyProxy;
filename?: string;
}): any;
/**
* Run a Python code string with top level await using
* :py:func:`~pyodide.code.eval_code_async` to evaluate the code. Returns a promise which
* resolves when execution completes. If the last statement in the Python code
* is an expression (and the code doesn't end with a semicolon), the returned
* promise will resolve to the value of this expression.
*
* For example:
*
* .. code-block:: pyodide
*
* let result = await pyodide.runPythonAsync(`
* from js import fetch
* response = await fetch("./pyodide-lock.json")
* packages = await response.json()
* # If final statement is an expression, its value is returned to JavaScript
* len(packages.packages.object_keys())
* `);
* console.log(result); // 79
*
* .. admonition:: Python imports
* :class: warning
*
* Since pyodide 0.18.0, you must call :js:func:`loadPackagesFromImports` to
* import any python packages referenced via ``import`` statements in your
* code. This function will no longer do it for you.
*
* @param code The Python code to run
* @param options
* @param options.globals An optional Python dictionary to use as the globals.
* Defaults to :js:attr:`pyodide.globals`.
* @param options.locals An optional Python dictionary to use as the locals.
* Defaults to the same as ``globals``.
* @param options.filename An optional string to use as the file name.
* Defaults to ``"<exec>"``. If a custom file name is given, the
* traceback for any exception that is thrown will show source lines
* (unless the given file name starts with ``<`` and ends with ``>``).
* @returns The result of the Python code translated to JavaScript.
* @async
*/
static runPythonAsync(code: string, options?: {
globals?: PyProxy;
locals?: PyProxy;
filename?: string;
}): Promise<any>;
/**
* Runs a Python code string like :js:func:`pyodide.runPython` but with stack
* switching enabled. Code executed in this way can use
* :py:meth:`PyodideFuture.syncify() <pyodide.webloop.PyodideFuture.syncify>`
* to block until a :py:class:`~asyncio.Future` or :js:class:`Promise` is
* resolved. Only works in runtimes with JS Promise Integration enabled.
*
* .. admonition:: Experimental
* :class: warning
*
* This feature is not yet stable.
*
* @experimental
* @param code The Python code to run
* @param options
* @param options.globals An optional Python dictionary to use as the globals.
* Defaults to :js:attr:`pyodide.globals`.
* @param options.locals An optional Python dictionary to use as the locals.
* Defaults to the same as ``globals``.
* @param options.filename An optional string to use as the file name.
* Defaults to ``"<exec>"``. If a custom file name is given, the
* traceback for any exception that is thrown will show source lines
* (unless the given file name starts with ``<`` and ends with ``>``).
* @returns The result of the Python code translated to JavaScript.
*/
static runPythonSyncifying(code: string, options?: {
globals?: PyProxy;
locals?: PyProxy;
filename?: string;
}): Promise<any>;
/**
* Registers the JavaScript object ``module`` as a JavaScript module named
* ``name``. This module can then be imported from Python using the standard
* Python import system. If another module by the same name has already been
* imported, this won't have much effect unless you also delete the imported
* module from :py:data:`sys.modules`. This calls
* :func:`~pyodide.ffi.register_js_module`.
*
* Any attributes of the JavaScript objects which are themselves objects will
* be treated as submodules:
* ```pyodide
* pyodide.registerJsModule("mymodule", { submodule: { value: 7 } });
* pyodide.runPython(`
* from mymodule.submodule import value
* assert value == 7
* `);
* ```
* If you wish to prevent this, try the following instead:
* ```pyodide
* const sys = pyodide.pyimport("sys");
* sys.modules.set("mymodule", { obj: { value: 7 } });
* pyodide.runPython(`
* from mymodule import obj
* assert obj.value == 7
* # attempting to treat obj as a submodule raises ModuleNotFoundError:
* # "No module named 'mymodule.obj'; 'mymodule' is not a package"
* from mymodule.obj import value
* `);
* ```
*
* @param name Name of the JavaScript module to add
* @param module JavaScript object backing the module
*/
static registerJsModule(name: string, module: object): void;
/**
* Unregisters a JavaScript module with given name that has been previously
* registered with :js:func:`pyodide.registerJsModule` or
* :func:`~pyodide.ffi.register_js_module`. If a JavaScript module with that
* name does not already exist, will throw an error. Note that if the module has
* already been imported, this won't have much effect unless you also delete the
* imported module from :py:data:`sys.modules`. This calls
* :func:`~pyodide.ffi.unregister_js_module`.
*
* @param name Name of the JavaScript module to remove
*/
static unregisterJsModule(name: string): void;
/**
* Convert a JavaScript object to a Python object as best as possible.
*
* This is similar to :py:meth:`~pyodide.ffi.JsProxy.to_py` but for use from
* JavaScript. If the object is immutable or a :js:class:`~pyodide.ffi.PyProxy`,
* it will be returned unchanged. If the object cannot be converted into Python,
* it will be returned unchanged.
*
* See :ref:`type-translations-jsproxy-to-py` for more information.
*
* @param obj The object to convert.
* @param options
* @returns The object converted to Python.
*/
static toPy(obj: any, { depth, defaultConverter, }?: {
/**
* Optional argument to limit the depth of the conversion.
*/
depth: number;
/**
* Optional argument to convert objects with no default conversion. See the
* documentation of :py:meth:`~pyodide.ffi.JsProxy.to_py`.
*/
defaultConverter?: (value: any, converter: (value: any) => any, cacheConversion: (input: any, output: any) => void) => any;
}): any;
/**
* Imports a module and returns it.
*
* .. admonition:: Warning
* :class: warning
*
* This function has a completely different behavior than the old removed pyimport function!
*
* ``pyimport`` is roughly equivalent to:
*
* .. code-block:: js
*
* pyodide.runPython(`import ${pkgname}; ${pkgname}`);
*
* except that the global namespace will not change.
*
* Example:
*
* .. code-block:: js
*
* let sysmodule = pyodide.pyimport("sys");
* let recursionLimit = sysmodule.getrecursionlimit();
*
* @param mod_name The name of the module to import
* @returns A PyProxy for the imported module
*/
static pyimport(mod_name: string): PyProxy;
/**
* Unpack an archive into a target directory.
*
* @param buffer The archive as an :js:class:`ArrayBuffer` or :js:class:`TypedArray`.
* @param format The format of the archive. Should be one of the formats
* recognized by :py:func:`shutil.unpack_archive`. By default the options are
* ``'bztar'``, ``'gztar'``, ``'tar'``, ``'zip'``, and ``'wheel'``. Several
* synonyms are accepted for each format, e.g., for ``'gztar'`` any of
* ``'.gztar'``, ``'.tar.gz'``, ``'.tgz'``, ``'tar.gz'`` or ``'tgz'`` are
* considered to be
* synonyms.
*
* @param options
* @param options.extractDir The directory to unpack the archive into. Defaults
* to the working directory.
*/
static unpackArchive(buffer: TypedArray | ArrayBuffer, format: string, options?: {
extractDir?: string;
}): void;
/**
* Mounts a :js:class:`FileSystemDirectoryHandle` into the target directory.
*
* @param path The absolute path in the Emscripten file system to mount the
* native directory. If the directory does not exist, it will be created. If it
* does exist, it must be empty.
* @param fileSystemHandle A handle returned by :js:func:`navigator.storage.getDirectory() <getDirectory>`
* or :js:func:`window.showDirectoryPicker() <showDirectoryPicker>`.
*/
static mountNativeFS(path: string, fileSystemHandle: FileSystemDirectoryHandle): Promise<NativeFS>;
/**
* Tell Pyodide about Comlink.
* Necessary to enable importing Comlink proxies into Python.
*/
static registerComlink(Comlink: any): void;
/**
* Sets the interrupt buffer to be ``interrupt_buffer``. This is only useful
* when Pyodide is used in a webworker. The buffer should be a
* :js:class:`SharedArrayBuffer` shared with the main browser thread (or another
* worker). In that case, signal ``signum`` may be sent by writing ``signum``
* into the interrupt buffer. If ``signum`` does not satisfy 0 < ``signum`` < 65
* it will be silently ignored.
*
* You can disable interrupts by calling ``setInterruptBuffer(undefined)``.
*
* If you wish to trigger a :py:exc:`KeyboardInterrupt`, write ``SIGINT`` (a 2)
* into the interrupt buffer.
*
* By default ``SIGINT`` raises a :py:exc:`KeyboardInterrupt` and all other signals
* are ignored. You can install custom signal handlers with the signal module.
* Even signals that normally have special meaning and can't be overridden like
* ``SIGKILL`` and ``SIGSEGV`` are ignored by default and can be used for any
* purpose you like.
*/
static setInterruptBuffer(interrupt_buffer: TypedArray): void;
/**
* Throws a :py:exc:`KeyboardInterrupt` error if a :py:exc:`KeyboardInterrupt` has
* been requested via the interrupt buffer.
*
* This can be used to enable keyboard interrupts during execution of JavaScript
* code, just as :c:func:`PyErr_CheckSignals` is used to enable keyboard interrupts
* during execution of C code.
*/
static checkInterrupt(): void;
/**
* Turn on or off debug mode. In debug mode, some error messages are improved
* at a performance cost.
* @param debug If true, turn debug mode on. If false, turn debug mode off.
* @returns The old value of the debug flag.
*/
static setDebug(debug: boolean): boolean;
}
/** @hidetype */
export type PyodideInterface = typeof PyodideAPI;
/**
* See documentation for loadPyodide.
* @private
*/
type ConfigType = {
indexURL: string;
packageCacheDir: string;
lockFileURL: string;
fullStdLib?: boolean;
stdLibURL?: string;
stdin?: () => string;
stdout?: (msg: string) => void;
stderr?: (msg: string) => void;
jsglobals?: object;
args: string[];
_node_mounts: string[];
env: {
[key: string]: string;
};
packages: string[];
};
/**
* Load the main Pyodide wasm module and initialize it.
*
* @returns The :ref:`js-api-pyodide` module.
* @memberof globalThis
* @async
* @example
* async function main() {
* const pyodide = await loadPyodide({
* fullStdLib: true,
* stdout: (msg) => console.log(`Pyodide: ${msg}`),
* });
* console.log("Loaded Pyodide");
* }
* main();
*/
export declare function loadPyodide(options?: {
/**
* The URL from which Pyodide will load the main Pyodide runtime and
* packages. It is recommended that you leave this unchanged, providing an
* incorrect value can cause broken behavior.
*
* Default: The url that Pyodide is loaded from with the file name
* (``pyodide.js`` or ``pyodide.mjs``) removed.
*/
indexURL?: string;
/**
* The file path where packages will be cached in node. If a package
* exists in ``packageCacheDir`` it is loaded from there, otherwise it is
* downloaded from the JsDelivr CDN and then cached into ``packageCacheDir``.
* Only applies when running in node; ignored in browsers.
*
* Default: same as indexURL
*/
packageCacheDir?: string;
/**
* The URL from which Pyodide will load the Pyodide ``pyodide-lock.json`` lock
* file. You can produce custom lock files with :py:func:`micropip.freeze`.
* Default: ```${indexURL}/pyodide-lock.json```
*/
lockFileURL?: string;
/**
* Load the full Python standard library. Setting this to false excludes
* unvendored modules from the standard library.
* Default: ``false``
*/
fullStdLib?: boolean;
/**
* The URL from which to load the standard library ``python_stdlib.zip``
* file. This URL includes the most of the Python standard library. Some
* stdlib modules were unvendored, and can be loaded separately
* with ``fullStdLib: true`` option or by their package name.
* Default: ```${indexURL}/python_stdlib.zip```
*/
stdLibURL?: string;
/**
* Override the standard input callback. Should ask the user for one line of
* input. The :js:func:`pyodide.setStdin` function is more flexible and
* should be preferred.
*/
stdin?: () => string;
/**
* Override the standard output callback. The :js:func:`pyodide.setStdout`
* function is more flexible and should be preferred in most cases, but
* depending on the ``args`` passed to ``loadPyodide``, Pyodide may write to
* stdout on startup, which can only be controlled by passing a custom
* ``stdout`` function.
*/
stdout?: (msg: string) => void;
/**
* Override the standard error output callback. The
* :js:func:`pyodide.setStderr` function is more flexible and should be
* preferred in most cases, but depending on the ``args`` passed to
* ``loadPyodide``, Pyodide may write to stdout on startup, which can only
* be controlled by passing a custom ``stdout`` function.
*/
stderr?: (msg: string) => void;
/**
* The object that Pyodide will use for the ``js`` module.
* Default: ``globalThis``
*/
jsglobals?: object;
/**
* Command line arguments to pass to Python on startup. See `Python command
* line interface options
* <https://docs.python.org/3.10/using/cmdline.html#interface-options>`_ for
* more details. Default: ``[]``
*/
args?: string[];
/**
* Environment variables to pass to Python. This can be accessed inside of
* Python at runtime via :py:data:`os.environ`. Certain environment variables change
* the way that Python loads:
* https://docs.python.org/3.10/using/cmdline.html#environment-variables
* Default: ``{}``.
* If ``env.HOME`` is undefined, it will be set to a default value of
* ``"/home/pyodide"``
*/
env?: {
[key: string]: string;
};
/**
* A list of packages to load as Pyodide is initializing.
*
* This is the same as loading the packages with
* :js:func:`pyodide.loadPackage` after Pyodide is loaded except using the
* ``packages`` option is more efficient because the packages are downloaded
* while Pyodide bootstraps itself.
*/
packages?: string[];
/**
* Opt into the old behavior where PyProxy.toString calls `repr` and not
* `str`.
* @deprecated
*/
pyproxyToStringRepr?: boolean;
/**
* @ignore
*/
_node_mounts?: string[];
}): Promise<PyodideInterface>;
export type {};
export type {};
"use strict";var loadPyodide=(()=>{var ce=Object.create;var _=Object.defineProperty;var le=Object.getOwnPropertyDescriptor;var de=Object.getOwnPropertyNames;var fe=Object.getPrototypeOf,ue=Object.prototype.hasOwnProperty;var f=(t,e)=>_(t,"name",{value:e,configurable:!0}),g=(t=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(t,{get:(e,c)=>(typeof require<"u"?require:e)[c]}):t)(function(t){if(typeof require<"u")return require.apply(this,arguments);throw new Error('Dynamic require of "'+t+'" is not supported')});var $=(t,e)=>()=>(e||t((e={exports:{}}).exports,e),e.exports),pe=(t,e)=>{for(var c in e)_(t,c,{get:e[c],enumerable:!0})},M=(t,e,c,o)=>{if(e&&typeof e=="object"||typeof e=="function")for(let a of de(e))!ue.call(t,a)&&a!==c&&_(t,a,{get:()=>e[a],enumerable:!(o=le(e,a))||o.enumerable});return t};var h=(t,e,c)=>(c=t!=null?ce(fe(t)):{},M(e||!t||!t.__esModule?_(c,"default",{value:t,enumerable:!0}):c,t)),me=t=>M(_({},"__esModule",{value:!0}),t);var j=$((P,C)=>{(function(t,e){"use strict";typeof define=="function"&&define.amd?define("stackframe",[],e):typeof P=="object"?C.exports=e():t.StackFrame=e()})(P,function(){"use strict";function t(d){return!isNaN(parseFloat(d))&&isFinite(d)}f(t,"_isNumber");function e(d){return d.charAt(0).toUpperCase()+d.substring(1)}f(e,"_capitalize");function c(d){return function(){return this[d]}}f(c,"_getter");var o=["isConstructor","isEval","isNative","isToplevel"],a=["columnNumber","lineNumber"],r=["fileName","functionName","source"],n=["args"],u=["evalOrigin"],i=o.concat(a,r,n,u);function s(d){if(d)for(var y=0;y<i.length;y++)d[i[y]]!==void 0&&this["set"+e(i[y])](d[i[y]])}f(s,"StackFrame"),s.prototype={getArgs:function(){return this.args},setArgs:function(d){if(Object.prototype.toString.call(d)!=="[object Array]")throw new TypeError("Args must be an Array");this.args=d},getEvalOrigin:function(){return this.evalOrigin},setEvalOrigin:function(d){if(d instanceof s)this.evalOrigin=d;else if(d instanceof Object)this.evalOrigin=new s(d);else throw new TypeError("Eval Origin must be an Object or StackFrame")},toString:function(){var d=this.getFileName()||"",y=this.getLineNumber()||"",w=this.getColumnNumber()||"",E=this.getFunctionName()||"";return this.getIsEval()?d?"[eval] ("+d+":"+y+":"+w+")":"[eval]:"+y+":"+w:E?E+" ("+d+":"+y+":"+w+")":d+":"+y+":"+w}},s.fromString=f(function(y){var w=y.indexOf("("),E=y.lastIndexOf(")"),ne=y.substring(0,w),ie=y.substring(w+1,E).split(","),U=y.substring(E+1);if(U.indexOf("@")===0)var R=/@(.+?)(?::(\d+))?(?::(\d+))?$/.exec(U,""),oe=R[1],ae=R[2],se=R[3];return new s({functionName:ne,args:ie||void 0,fileName:oe,lineNumber:ae||void 0,columnNumber:se||void 0})},"StackFrame$$fromString");for(var l=0;l<o.length;l++)s.prototype["get"+e(o[l])]=c(o[l]),s.prototype["set"+e(o[l])]=function(d){return function(y){this[d]=!!y}}(o[l]);for(var m=0;m<a.length;m++)s.prototype["get"+e(a[m])]=c(a[m]),s.prototype["set"+e(a[m])]=function(d){return function(y){if(!t(y))throw new TypeError(d+" must be a Number");this[d]=Number(y)}}(a[m]);for(var p=0;p<r.length;p++)s.prototype["get"+e(r[p])]=c(r[p]),s.prototype["set"+e(r[p])]=function(d){return function(y){this[d]=String(y)}}(r[p]);return s})});var W=$((x,B)=>{(function(t,e){"use strict";typeof define=="function"&&define.amd?define("error-stack-parser",["stackframe"],e):typeof x=="object"?B.exports=e(j()):t.ErrorStackParser=e(t.StackFrame)})(x,f(function(e){"use strict";var c=/(^|@)\S+:\d+/,o=/^\s*at .*(\S+:\d+|\(native\))/m,a=/^(eval@)?(\[native code])?$/;return{parse:f(function(n){if(typeof n.stacktrace<"u"||typeof n["opera#sourceloc"]<"u")return this.parseOpera(n);if(n.stack&&n.stack.match(o))return this.parseV8OrIE(n);if(n.stack)return this.parseFFOrSafari(n);throw new Error("Cannot parse given Error object")},"ErrorStackParser$$parse"),extractLocation:f(function(n){if(n.indexOf(":")===-1)return[n];var u=/(.+?)(?::(\d+))?(?::(\d+))?$/,i=u.exec(n.replace(/[()]/g,""));return[i[1],i[2]||void 0,i[3]||void 0]},"ErrorStackParser$$extractLocation"),parseV8OrIE:f(function(n){var u=n.stack.split(`
`).filter(function(i){return!!i.match(o)},this);return u.map(function(i){i.indexOf("(eval ")>-1&&(i=i.replace(/eval code/g,"eval").replace(/(\(eval at [^()]*)|(,.*$)/g,""));var s=i.replace(/^\s+/,"").replace(/\(eval code/g,"(").replace(/^.*?\s+/,""),l=s.match(/ (\(.+\)$)/);s=l?s.replace(l[0],""):s;var m=this.extractLocation(l?l[1]:s),p=l&&s||void 0,d=["eval","<anonymous>"].indexOf(m[0])>-1?void 0:m[0];return new e({functionName:p,fileName:d,lineNumber:m[1],columnNumber:m[2],source:i})},this)},"ErrorStackParser$$parseV8OrIE"),parseFFOrSafari:f(function(n){var u=n.stack.split(`
`).filter(function(i){return!i.match(a)},this);return u.map(function(i){if(i.indexOf(" > eval")>-1&&(i=i.replace(/ line (\d+)(?: > eval line \d+)* > eval:\d+:\d+/g,":$1")),i.indexOf("@")===-1&&i.indexOf(":")===-1)return new e({functionName:i});var s=/((.*".+"[^@]*)?[^@]*)(?:@)/,l=i.match(s),m=l&&l[1]?l[1]:void 0,p=this.extractLocation(i.replace(s,""));return new e({functionName:m,fileName:p[0],lineNumber:p[1],columnNumber:p[2],source:i})},this)},"ErrorStackParser$$parseFFOrSafari"),parseOpera:f(function(n){return!n.stacktrace||n.message.indexOf(`
`)>-1&&n.message.split(`
`).length>n.stacktrace.split(`
`).length?this.parseOpera9(n):n.stack?this.parseOpera11(n):this.parseOpera10(n)},"ErrorStackParser$$parseOpera"),parseOpera9:f(function(n){for(var u=/Line (\d+).*script (?:in )?(\S+)/i,i=n.message.split(`
`),s=[],l=2,m=i.length;l<m;l+=2){var p=u.exec(i[l]);p&&s.push(new e({fileName:p[2],lineNumber:p[1],source:i[l]}))}return s},"ErrorStackParser$$parseOpera9"),parseOpera10:f(function(n){for(var u=/Line (\d+).*script (?:in )?(\S+)(?:: In function (\S+))?$/i,i=n.stacktrace.split(`
`),s=[],l=0,m=i.length;l<m;l+=2){var p=u.exec(i[l]);p&&s.push(new e({functionName:p[3]||void 0,fileName:p[2],lineNumber:p[1],source:i[l]}))}return s},"ErrorStackParser$$parseOpera10"),parseOpera11:f(function(n){var u=n.stack.split(`
`).filter(function(i){return!!i.match(c)&&!i.match(/^Error created at/)},this);return u.map(function(i){var s=i.split("@"),l=this.extractLocation(s.pop()),m=s.shift()||"",p=m.replace(/<anonymous function(: (\w+))?>/,"$2").replace(/\([^)]*\)/g,"")||void 0,d;m.match(/\(([^)]*)\)/)&&(d=m.replace(/^[^(]+\(([^)]*)\)$/,"$1"));var y=d===void 0||d==="[arguments not available]"?void 0:d.split(",");return new e({functionName:p,args:y,fileName:l[0],lineNumber:l[1],columnNumber:l[2],source:i})},this)},"ErrorStackParser$$parseOpera11")}},"ErrorStackParser"))});var Re={};pe(Re,{loadPyodide:()=>T,version:()=>b});var G=h(W());var v=typeof process=="object"&&typeof process.versions=="object"&&typeof process.versions.node=="string"&&typeof process.browser>"u",F=v&&typeof module<"u"&&typeof module.exports<"u"&&typeof g<"u"&&typeof __dirname<"u",H=v&&!F,ye=typeof Deno<"u",z=!v&&!ye,q=z&&typeof window<"u"&&typeof document<"u"&&typeof document.createElement<"u"&&typeof sessionStorage<"u",V=z&&typeof importScripts<"u"&&typeof self<"u";var K,k,L,X,D,ge=`"fetch" is not defined, maybe you're using node < 18? From Pyodide >= 0.25.0, node >= 18 is required. Older versions of Node.js may work, but it is not guaranteed or supported. Falling back to "node-fetch".`;async function A(){if(!v||(K=(await import(/* webpackIgnore */"url")).default,D=await import(/* webpackIgnore */"fs/promises"),globalThis.fetch?k=fetch:(console.warn(ge),k=(await import(/* webpackIgnore */"node-fetch")).default),X=(await import(/* webpackIgnore */"vm")).default,L=await import(/* webpackIgnore */"path"),I=L.sep,typeof g<"u"))return;let t=await import(/* webpackIgnore */"fs"),e=await import(/* webpackIgnore */"crypto"),c=await import(/* webpackIgnore */"ws"),o=await import(/* webpackIgnore */"child_process"),a={fs:t,crypto:e,ws:c,child_process:o};globalThis.require=function(r){return a[r]}}f(A,"initNodeModules");function he(t,e){return L.resolve(e||".",t)}f(he,"node_resolvePath");function ve(t,e){return e===void 0&&(e=location),new URL(t,e).toString()}f(ve,"browser_resolvePath");var N;v?N=he:N=ve;var I;v||(I="/");function we(t,e){return t.startsWith("file://")&&(t=t.slice(7)),t.includes("://")?{response:k(t)}:{binary:D.readFile(t).then(c=>new Uint8Array(c.buffer,c.byteOffset,c.byteLength))}}f(we,"node_getBinaryResponse");function be(t,e){let c=new URL(t,location);return{response:fetch(c,e?{integrity:e}:{})}}f(be,"browser_getBinaryResponse");var O;v?O=we:O=be;async function J(t,e){let{response:c,binary:o}=O(t,e);if(o)return o;let a=await c;if(!a.ok)throw new Error(`Failed to load '${t}': request failed.`);return new Uint8Array(await a.arrayBuffer())}f(J,"loadBinaryFile");var S;if(q)S=f(async t=>await import(/* webpackIgnore */t),"loadScript");else if(V)S=f(async t=>{try{globalThis.importScripts(t)}catch(e){if(e instanceof TypeError)await import(/* webpackIgnore */t);else throw e}},"loadScript");else if(v)S=Ee;else throw new Error("Cannot determine runtime environment");async function Ee(t){t.startsWith("file://")&&(t=t.slice(7)),t.includes("://")?X.runInThisContext(await(await k(t)).text()):await import(/* webpackIgnore */K.pathToFileURL(t).href)}f(Ee,"nodeLoadScript");async function Y(t){if(v){await A();let e=await D.readFile(t);return JSON.parse(e)}else return await(await fetch(t)).json()}f(Y,"loadLockFile");async function Q(){if(F)return __dirname;let t;try{throw new Error}catch(o){t=o}let e=G.default.parse(t)[0].fileName;if(H){let o=await import(/* webpackIgnore */"path");return(await import(/* webpackIgnore */"url")).fileURLToPath(o.dirname(e))}let c=e.lastIndexOf(I);if(c===-1)throw new Error("Could not extract indexURL path from pyodide module location");return e.slice(0,c)}f(Q,"calculateDirname");function Z(t){let e=t.FS,c=t.FS.filesystems.MEMFS,o=t.PATH,a={DIR_MODE:16895,FILE_MODE:33279,mount:function(r){if(!r.opts.fileSystemHandle)throw new Error("opts.fileSystemHandle is required");return c.mount.apply(null,arguments)},syncfs:async(r,n,u)=>{try{let i=a.getLocalSet(r),s=await a.getRemoteSet(r),l=n?s:i,m=n?i:s;await a.reconcile(r,l,m),u(null)}catch(i){u(i)}},getLocalSet:r=>{let n=Object.create(null);function u(l){return l!=="."&&l!==".."}f(u,"isRealDir");function i(l){return m=>o.join2(l,m)}f(i,"toAbsolute");let s=e.readdir(r.mountpoint).filter(u).map(i(r.mountpoint));for(;s.length;){let l=s.pop(),m=e.stat(l);e.isDir(m.mode)&&s.push.apply(s,e.readdir(l).filter(u).map(i(l))),n[l]={timestamp:m.mtime,mode:m.mode}}return{type:"local",entries:n}},getRemoteSet:async r=>{let n=Object.create(null),u=await _e(r.opts.fileSystemHandle);for(let[i,s]of u)i!=="."&&(n[o.join2(r.mountpoint,i)]={timestamp:s.kind==="file"?(await s.getFile()).lastModifiedDate:new Date,mode:s.kind==="file"?a.FILE_MODE:a.DIR_MODE});return{type:"remote",entries:n,handles:u}},loadLocalEntry:r=>{let u=e.lookupPath(r).node,i=e.stat(r);if(e.isDir(i.mode))return{timestamp:i.mtime,mode:i.mode};if(e.isFile(i.mode))return u.contents=c.getFileDataAsTypedArray(u),{timestamp:i.mtime,mode:i.mode,contents:u.contents};throw new Error("node type not supported")},storeLocalEntry:(r,n)=>{if(e.isDir(n.mode))e.mkdirTree(r,n.mode);else if(e.isFile(n.mode))e.writeFile(r,n.contents,{canOwn:!0});else throw new Error("node type not supported");e.chmod(r,n.mode),e.utime(r,n.timestamp,n.timestamp)},removeLocalEntry:r=>{var n=e.stat(r);e.isDir(n.mode)?e.rmdir(r):e.isFile(n.mode)&&e.unlink(r)},loadRemoteEntry:async r=>{if(r.kind==="file"){let n=await r.getFile();return{contents:new Uint8Array(await n.arrayBuffer()),mode:a.FILE_MODE,timestamp:n.lastModifiedDate}}else{if(r.kind==="directory")return{mode:a.DIR_MODE,timestamp:new Date};throw new Error("unknown kind: "+r.kind)}},storeRemoteEntry:async(r,n,u)=>{let i=r.get(o.dirname(n)),s=e.isFile(u.mode)?await i.getFileHandle(o.basename(n),{create:!0}):await i.getDirectoryHandle(o.basename(n),{create:!0});if(s.kind==="file"){let l=await s.createWritable();await l.write(u.contents),await l.close()}r.set(n,s)},removeRemoteEntry:async(r,n)=>{await r.get(o.dirname(n)).removeEntry(o.basename(n)),r.delete(n)},reconcile:async(r,n,u)=>{let i=0,s=[];Object.keys(n.entries).forEach(function(p){let d=n.entries[p],y=u.entries[p];(!y||e.isFile(d.mode)&&d.timestamp.getTime()>y.timestamp.getTime())&&(s.push(p),i++)}),s.sort();let l=[];if(Object.keys(u.entries).forEach(function(p){n.entries[p]||(l.push(p),i++)}),l.sort().reverse(),!i)return;let m=n.type==="remote"?n.handles:u.handles;for(let p of s){let d=o.normalize(p.replace(r.mountpoint,"/")).substring(1);if(u.type==="local"){let y=m.get(d),w=await a.loadRemoteEntry(y);a.storeLocalEntry(p,w)}else{let y=a.loadLocalEntry(p);await a.storeRemoteEntry(m,d,y)}}for(let p of l)if(u.type==="local")a.removeLocalEntry(p);else{let d=o.normalize(p.replace(r.mountpoint,"/")).substring(1);await a.removeRemoteEntry(m,d)}}};t.FS.filesystems.NATIVEFS_ASYNC=a}f(Z,"initializeNativeFS");var _e=f(async t=>{let e=[];async function c(a){for await(let r of a.values())e.push(r),r.kind==="directory"&&await c(r)}f(c,"collect"),await c(t);let o=new Map;o.set(".",t);for(let a of e){let r=(await t.resolve(a)).join("/");o.set(r,a)}return o},"getFsHandles");function ee(){let t={};return t.noImageDecoding=!0,t.noAudioDecoding=!0,t.noWasmDecoding=!1,t.preRun=[],t.quit=(e,c)=>{throw t.exited={status:e,toThrow:c},c},t}f(ee,"createModule");function Se(t,e){t.preRun.push(function(){let c="/";try{t.FS.mkdirTree(e)}catch(o){console.error(`Error occurred while making a home directory '${e}':`),console.error(o),console.error(`Using '${c}' for a home directory instead`),e=c}t.FS.chdir(e)})}f(Se,"createHomeDirectory");function Oe(t,e){t.preRun.push(function(){Object.assign(t.ENV,e)})}f(Oe,"setEnvironment");function ke(t,e){t.preRun.push(()=>{for(let c of e)t.FS.mkdirTree(c),t.FS.mount(t.FS.filesystems.NODEFS,{root:c},c)})}f(ke,"mountLocalDirectories");function Ne(t,e){let c=J(e);t.preRun.push(()=>{let o=t._py_version_major(),a=t._py_version_minor();t.FS.mkdirTree("/lib"),t.FS.mkdirTree(`/lib/python${o}.${a}/site-packages`),t.addRunDependency("install-stdlib"),c.then(r=>{t.FS.writeFile(`/lib/python${o}${a}.zip`,r)}).catch(r=>{console.error("Error occurred while installing the standard library:"),console.error(r)}).finally(()=>{t.removeRunDependency("install-stdlib")})})}f(Ne,"installStdlib");function te(t,e){let c;e.stdLibURL!=null?c=e.stdLibURL:c=e.indexURL+"python_stdlib.zip",Ne(t,c),Se(t,e.env.HOME),Oe(t,e.env),ke(t,e._node_mounts),t.preRun.push(()=>Z(t))}f(te,"initializeFileSystem");function re(t,e){let{binary:c,response:o}=O(e+"pyodide.asm.wasm");t.instantiateWasm=function(a,r){return async function(){try{let n;o?n=await WebAssembly.instantiateStreaming(o,a):n=await WebAssembly.instantiate(await c,a);let{instance:u,module:i}=n;typeof WasmOffsetConverter<"u"&&(wasmOffsetConverter=new WasmOffsetConverter(wasmBinary,i)),r(u,i)}catch(n){console.warn("wasm instantiation failed!"),console.warn(n)}}(),{}}}f(re,"preloadWasm");var b="0.25.1";async function T(t={}){await A();let e=t.indexURL||await Q();e=N(e),e.endsWith("/")||(e+="/"),t.indexURL=e;let c={fullStdLib:!1,jsglobals:globalThis,stdin:globalThis.prompt?globalThis.prompt:void 0,lockFileURL:e+"pyodide-lock.json",args:[],_node_mounts:[],env:{},packageCacheDir:e,packages:[]},o=Object.assign(c,t);o.env.HOME||(o.env.HOME="/home/pyodide");let a=ee();a.print=o.stdout,a.printErr=o.stderr,a.arguments=o.args;let r={config:o};a.API=r,r.lockFilePromise=Y(o.lockFileURL),re(a,e),te(a,o);let n=new Promise(s=>a.postRun=s);if(a.locateFile=s=>o.indexURL+s,typeof _createPyodideModule!="function"){let s=`${o.indexURL}pyodide.asm.js`;await S(s)}if(await _createPyodideModule(a),await n,a.exited)throw a.exited.toThrow;if(t.pyproxyToStringRepr&&r.setPyProxyToStringMethod(!0),r.version!==b)throw new Error(`Pyodide version does not match: '${b}' <==> '${r.version}'. If you updated the Pyodide version, make sure you also updated the 'indexURL' parameter passed to loadPyodide.`);a.locateFile=s=>{throw new Error("Didn't expect to load any more file_packager files!")};let u=r.finalizeBootstrap();if(u.version.includes("dev")||r.setCdnUrl(`https://cdn.jsdelivr.net/pyodide/v${u.version}/full/`),await r.packageIndexReady,r._pyodide._importhook.register_module_not_found_hook(r._import_name_to_package_name,r.lockfile_unvendored_stdlibs_and_test),r.lockfile_info.version!==b)throw new Error("Lock file version doesn't match Pyodide version");return r.package_loader.init_loaded_packages(),o.fullStdLib&&await u.loadPackage(r.lockfile_unvendored_stdlibs),r.initializeStreams(o.stdin,o.stdout,o.stderr),u}f(T,"loadPyodide");globalThis.loadPyodide=T;return me(Re);})();
try{Object.assign(exports,loadPyodide)}catch(_){}
globalThis.loadPyodide=loadPyodide.loadPyodide;
//# sourceMappingURL=pyodide.js.map
{
"version": 3,
"sources": ["../src/js/node_modules/stackframe/stackframe.js", "../src/js/node_modules/error-stack-parser/error-stack-parser.js", "../src/js/pyodide.umd.ts", "../src/js/compat.ts", "../src/js/environments.ts", "../src/js/nativefs.ts", "../src/js/module.ts", "../src/js/version.ts", "../src/js/pyodide.ts"],
"sourcesContent": ["(function(root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('stackframe', [], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory();\n } else {\n root.StackFrame = factory();\n }\n}(this, function() {\n 'use strict';\n function _isNumber(n) {\n return !isNaN(parseFloat(n)) && isFinite(n);\n }\n\n function _capitalize(str) {\n return str.charAt(0).toUpperCase() + str.substring(1);\n }\n\n function _getter(p) {\n return function() {\n return this[p];\n };\n }\n\n var booleanProps = ['isConstructor', 'isEval', 'isNative', 'isToplevel'];\n var numericProps = ['columnNumber', 'lineNumber'];\n var stringProps = ['fileName', 'functionName', 'source'];\n var arrayProps = ['args'];\n var objectProps = ['evalOrigin'];\n\n var props = booleanProps.concat(numericProps, stringProps, arrayProps, objectProps);\n\n function StackFrame(obj) {\n if (!obj) return;\n for (var i = 0; i < props.length; i++) {\n if (obj[props[i]] !== undefined) {\n this['set' + _capitalize(props[i])](obj[props[i]]);\n }\n }\n }\n\n StackFrame.prototype = {\n getArgs: function() {\n return this.args;\n },\n setArgs: function(v) {\n if (Object.prototype.toString.call(v) !== '[object Array]') {\n throw new TypeError('Args must be an Array');\n }\n this.args = v;\n },\n\n getEvalOrigin: function() {\n return this.evalOrigin;\n },\n setEvalOrigin: function(v) {\n if (v instanceof StackFrame) {\n this.evalOrigin = v;\n } else if (v instanceof Object) {\n this.evalOrigin = new StackFrame(v);\n } else {\n throw new TypeError('Eval Origin must be an Object or StackFrame');\n }\n },\n\n toString: function() {\n var fileName = this.getFileName() || '';\n var lineNumber = this.getLineNumber() || '';\n var columnNumber = this.getColumnNumber() || '';\n var functionName = this.getFunctionName() || '';\n if (this.getIsEval()) {\n if (fileName) {\n return '[eval] (' + fileName + ':' + lineNumber + ':' + columnNumber + ')';\n }\n return '[eval]:' + lineNumber + ':' + columnNumber;\n }\n if (functionName) {\n return functionName + ' (' + fileName + ':' + lineNumber + ':' + columnNumber + ')';\n }\n return fileName + ':' + lineNumber + ':' + columnNumber;\n }\n };\n\n StackFrame.fromString = function StackFrame$$fromString(str) {\n var argsStartIndex = str.indexOf('(');\n var argsEndIndex = str.lastIndexOf(')');\n\n var functionName = str.substring(0, argsStartIndex);\n var args = str.substring(argsStartIndex + 1, argsEndIndex).split(',');\n var locationString = str.substring(argsEndIndex + 1);\n\n if (locationString.indexOf('@') === 0) {\n var parts = /@(.+?)(?::(\\d+))?(?::(\\d+))?$/.exec(locationString, '');\n var fileName = parts[1];\n var lineNumber = parts[2];\n var columnNumber = parts[3];\n }\n\n return new StackFrame({\n functionName: functionName,\n args: args || undefined,\n fileName: fileName,\n lineNumber: lineNumber || undefined,\n columnNumber: columnNumber || undefined\n });\n };\n\n for (var i = 0; i < booleanProps.length; i++) {\n StackFrame.prototype['get' + _capitalize(booleanProps[i])] = _getter(booleanProps[i]);\n StackFrame.prototype['set' + _capitalize(booleanProps[i])] = (function(p) {\n return function(v) {\n this[p] = Boolean(v);\n };\n })(booleanProps[i]);\n }\n\n for (var j = 0; j < numericProps.length; j++) {\n StackFrame.prototype['get' + _capitalize(numericProps[j])] = _getter(numericProps[j]);\n StackFrame.prototype['set' + _capitalize(numericProps[j])] = (function(p) {\n return function(v) {\n if (!_isNumber(v)) {\n throw new TypeError(p + ' must be a Number');\n }\n this[p] = Number(v);\n };\n })(numericProps[j]);\n }\n\n for (var k = 0; k < stringProps.length; k++) {\n StackFrame.prototype['get' + _capitalize(stringProps[k])] = _getter(stringProps[k]);\n StackFrame.prototype['set' + _capitalize(stringProps[k])] = (function(p) {\n return function(v) {\n this[p] = String(v);\n };\n })(stringProps[k]);\n }\n\n return StackFrame;\n}));\n", "(function(root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('error-stack-parser', ['stackframe'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('stackframe'));\n } else {\n root.ErrorStackParser = factory(root.StackFrame);\n }\n}(this, function ErrorStackParser(StackFrame) {\n 'use strict';\n\n var FIREFOX_SAFARI_STACK_REGEXP = /(^|@)\\S+:\\d+/;\n var CHROME_IE_STACK_REGEXP = /^\\s*at .*(\\S+:\\d+|\\(native\\))/m;\n var SAFARI_NATIVE_CODE_REGEXP = /^(eval@)?(\\[native code])?$/;\n\n return {\n /**\n * Given an Error object, extract the most information from it.\n *\n * @param {Error} error object\n * @return {Array} of StackFrames\n */\n parse: function ErrorStackParser$$parse(error) {\n if (typeof error.stacktrace !== 'undefined' || typeof error['opera#sourceloc'] !== 'undefined') {\n return this.parseOpera(error);\n } else if (error.stack && error.stack.match(CHROME_IE_STACK_REGEXP)) {\n return this.parseV8OrIE(error);\n } else if (error.stack) {\n return this.parseFFOrSafari(error);\n } else {\n throw new Error('Cannot parse given Error object');\n }\n },\n\n // Separate line and column numbers from a string of the form: (URI:Line:Column)\n extractLocation: function ErrorStackParser$$extractLocation(urlLike) {\n // Fail-fast but return locations like \"(native)\"\n if (urlLike.indexOf(':') === -1) {\n return [urlLike];\n }\n\n var regExp = /(.+?)(?::(\\d+))?(?::(\\d+))?$/;\n var parts = regExp.exec(urlLike.replace(/[()]/g, ''));\n return [parts[1], parts[2] || undefined, parts[3] || undefined];\n },\n\n parseV8OrIE: function ErrorStackParser$$parseV8OrIE(error) {\n var filtered = error.stack.split('\\n').filter(function(line) {\n return !!line.match(CHROME_IE_STACK_REGEXP);\n }, this);\n\n return filtered.map(function(line) {\n if (line.indexOf('(eval ') > -1) {\n // Throw away eval information until we implement stacktrace.js/stackframe#8\n line = line.replace(/eval code/g, 'eval').replace(/(\\(eval at [^()]*)|(,.*$)/g, '');\n }\n var sanitizedLine = line.replace(/^\\s+/, '').replace(/\\(eval code/g, '(').replace(/^.*?\\s+/, '');\n\n // capture and preseve the parenthesized location \"(/foo/my bar.js:12:87)\" in\n // case it has spaces in it, as the string is split on \\s+ later on\n var location = sanitizedLine.match(/ (\\(.+\\)$)/);\n\n // remove the parenthesized location from the line, if it was matched\n sanitizedLine = location ? sanitizedLine.replace(location[0], '') : sanitizedLine;\n\n // if a location was matched, pass it to extractLocation() otherwise pass all sanitizedLine\n // because this line doesn't have function name\n var locationParts = this.extractLocation(location ? location[1] : sanitizedLine);\n var functionName = location && sanitizedLine || undefined;\n var fileName = ['eval', '<anonymous>'].indexOf(locationParts[0]) > -1 ? undefined : locationParts[0];\n\n return new StackFrame({\n functionName: functionName,\n fileName: fileName,\n lineNumber: locationParts[1],\n columnNumber: locationParts[2],\n source: line\n });\n }, this);\n },\n\n parseFFOrSafari: function ErrorStackParser$$parseFFOrSafari(error) {\n var filtered = error.stack.split('\\n').filter(function(line) {\n return !line.match(SAFARI_NATIVE_CODE_REGEXP);\n }, this);\n\n return filtered.map(function(line) {\n // Throw away eval information until we implement stacktrace.js/stackframe#8\n if (line.indexOf(' > eval') > -1) {\n line = line.replace(/ line (\\d+)(?: > eval line \\d+)* > eval:\\d+:\\d+/g, ':$1');\n }\n\n if (line.indexOf('@') === -1 && line.indexOf(':') === -1) {\n // Safari eval frames only have function names and nothing else\n return new StackFrame({\n functionName: line\n });\n } else {\n var functionNameRegex = /((.*\".+\"[^@]*)?[^@]*)(?:@)/;\n var matches = line.match(functionNameRegex);\n var functionName = matches && matches[1] ? matches[1] : undefined;\n var locationParts = this.extractLocation(line.replace(functionNameRegex, ''));\n\n return new StackFrame({\n functionName: functionName,\n fileName: locationParts[0],\n lineNumber: locationParts[1],\n columnNumber: locationParts[2],\n source: line\n });\n }\n }, this);\n },\n\n parseOpera: function ErrorStackParser$$parseOpera(e) {\n if (!e.stacktrace || (e.message.indexOf('\\n') > -1 &&\n e.message.split('\\n').length > e.stacktrace.split('\\n').length)) {\n return this.parseOpera9(e);\n } else if (!e.stack) {\n return this.parseOpera10(e);\n } else {\n return this.parseOpera11(e);\n }\n },\n\n parseOpera9: function ErrorStackParser$$parseOpera9(e) {\n var lineRE = /Line (\\d+).*script (?:in )?(\\S+)/i;\n var lines = e.message.split('\\n');\n var result = [];\n\n for (var i = 2, len = lines.length; i < len; i += 2) {\n var match = lineRE.exec(lines[i]);\n if (match) {\n result.push(new StackFrame({\n fileName: match[2],\n lineNumber: match[1],\n source: lines[i]\n }));\n }\n }\n\n return result;\n },\n\n parseOpera10: function ErrorStackParser$$parseOpera10(e) {\n var lineRE = /Line (\\d+).*script (?:in )?(\\S+)(?:: In function (\\S+))?$/i;\n var lines = e.stacktrace.split('\\n');\n var result = [];\n\n for (var i = 0, len = lines.length; i < len; i += 2) {\n var match = lineRE.exec(lines[i]);\n if (match) {\n result.push(\n new StackFrame({\n functionName: match[3] || undefined,\n fileName: match[2],\n lineNumber: match[1],\n source: lines[i]\n })\n );\n }\n }\n\n return result;\n },\n\n // Opera 10.65+ Error.stack very similar to FF/Safari\n parseOpera11: function ErrorStackParser$$parseOpera11(error) {\n var filtered = error.stack.split('\\n').filter(function(line) {\n return !!line.match(FIREFOX_SAFARI_STACK_REGEXP) && !line.match(/^Error created at/);\n }, this);\n\n return filtered.map(function(line) {\n var tokens = line.split('@');\n var locationParts = this.extractLocation(tokens.pop());\n var functionCall = (tokens.shift() || '');\n var functionName = functionCall\n .replace(/<anonymous function(: (\\w+))?>/, '$2')\n .replace(/\\([^)]*\\)/g, '') || undefined;\n var argsRaw;\n if (functionCall.match(/\\(([^)]*)\\)/)) {\n argsRaw = functionCall.replace(/^[^(]+\\(([^)]*)\\)$/, '$1');\n }\n var args = (argsRaw === undefined || argsRaw === '[arguments not available]') ?\n undefined : argsRaw.split(',');\n\n return new StackFrame({\n functionName: functionName,\n args: args,\n fileName: locationParts[0],\n lineNumber: locationParts[1],\n columnNumber: locationParts[2],\n source: line\n });\n }, this);\n }\n };\n}));\n", "import { loadPyodide, version } from \"./pyodide\";\nimport { type PackageData } from \"./load-package\";\nexport { loadPyodide, version, type PackageData };\n(globalThis as any).loadPyodide = loadPyodide;\n", "import ErrorStackParser from \"error-stack-parser\";\nimport {\n IN_NODE,\n IN_NODE_ESM,\n IN_BROWSER_MAIN_THREAD,\n IN_BROWSER_WEB_WORKER,\n IN_NODE_COMMONJS,\n} from \"./environments\";\n\nlet nodeUrlMod: any;\nlet nodeFetch: any;\nlet nodePath: any;\nlet nodeVmMod: any;\n/** @private */\nexport let nodeFsPromisesMod: any;\n\ndeclare var globalThis: {\n importScripts: (url: string) => void;\n document?: any;\n fetch?: any;\n};\n\nconst FETCH_NOT_FOUND_MSG = `\\\n\"fetch\" is not defined, maybe you're using node < 18? \\\nFrom Pyodide >= 0.25.0, node >= 18 is required. \\\nOlder versions of Node.js may work, but it is not guaranteed or supported. \\\nFalling back to \"node-fetch\".\\\n`;\n\n/**\n * If we're in node, it's most convenient to import various node modules on\n * initialization. Otherwise, this does nothing.\n * @private\n */\nexport async function initNodeModules() {\n if (!IN_NODE) {\n return;\n }\n // @ts-ignore\n nodeUrlMod = (await import(\"url\")).default;\n nodeFsPromisesMod = await import(\"fs/promises\");\n if (globalThis.fetch) {\n nodeFetch = fetch;\n } else {\n // @ts-ignore\n console.warn(FETCH_NOT_FOUND_MSG);\n // @ts-ignore\n nodeFetch = (await import(\"node-fetch\")).default;\n }\n // @ts-ignore\n nodeVmMod = (await import(\"vm\")).default;\n nodePath = await import(\"path\");\n pathSep = nodePath.sep;\n\n // Emscripten uses `require`, so if it's missing (because we were imported as\n // an ES6 module) we need to polyfill `require` with `import`. `import` is\n // async and `require` is synchronous, so we import all packages that might be\n // required up front and define require to look them up in this table.\n\n if (typeof require !== \"undefined\") {\n return;\n }\n // These are all the packages required in pyodide.asm.js. You can get this\n // list with:\n // $ grep -o 'require(\"[a-z]*\")' pyodide.asm.js | sort -u\n const fs = await import(\"fs\");\n const crypto = await import(\"crypto\");\n const ws = await import(\"ws\");\n const child_process = await import(\"child_process\");\n const node_modules: { [mode: string]: any } = {\n fs,\n crypto,\n ws,\n child_process,\n };\n // Since we're in an ES6 module, this is only modifying the module namespace,\n // it's still private to Pyodide.\n (globalThis as any).require = function (mod: string): any {\n return node_modules[mod];\n };\n}\n\nfunction node_resolvePath(path: string, base?: string): string {\n return nodePath.resolve(base || \".\", path);\n}\n\nfunction browser_resolvePath(path: string, base?: string): string {\n if (base === undefined) {\n // @ts-ignore\n base = location;\n }\n return new URL(path, base).toString();\n}\n\nexport let resolvePath: (rest: string, base?: string) => string;\nif (IN_NODE) {\n resolvePath = node_resolvePath;\n} else {\n resolvePath = browser_resolvePath;\n}\n\n/**\n * Get the path separator. If we are on Linux or in the browser, it's /.\n * In Windows, it's \\.\n * @private\n */\nexport let pathSep: string;\n\nif (!IN_NODE) {\n pathSep = \"/\";\n}\n\n/**\n * Load a binary file, only for use in Node. If the path explicitly is a URL,\n * then fetch from a URL, else load from the file system.\n * @param indexURL base path to resolve relative paths\n * @param path the path to load\n * @param checksum sha-256 checksum of the package\n * @returns An ArrayBuffer containing the binary data\n * @private\n */\nfunction node_getBinaryResponse(\n path: string,\n _file_sub_resource_hash?: string | undefined, // Ignoring sub resource hash. See issue-2431.\n):\n | { response: Promise<Response>; binary?: undefined }\n | { binary: Promise<Uint8Array> } {\n if (path.startsWith(\"file://\")) {\n // handle file:// with filesystem operations rather than with fetch.\n path = path.slice(\"file://\".length);\n }\n if (path.includes(\"://\")) {\n // If it has a protocol, make a fetch request\n return { response: nodeFetch(path) };\n } else {\n // Otherwise get it from the file system\n return {\n binary: nodeFsPromisesMod\n .readFile(path)\n .then(\n (data: Buffer) =>\n new Uint8Array(data.buffer, data.byteOffset, data.byteLength),\n ),\n };\n }\n}\n\n/**\n * Load a binary file, only for use in browser. Resolves relative paths against\n * indexURL.\n *\n * @param path the path to load\n * @param subResourceHash the sub resource hash for fetch() integrity check\n * @returns A Uint8Array containing the binary data\n * @private\n */\nfunction browser_getBinaryResponse(\n path: string,\n subResourceHash: string | undefined,\n): { response: Promise<Response>; binary?: undefined } {\n const url = new URL(path, location as unknown as URL);\n let options = subResourceHash ? { integrity: subResourceHash } : {};\n return { response: fetch(url, options) };\n}\n\n/** @private */\nexport let getBinaryResponse: (\n path: string,\n file_sub_resource_hash?: string | undefined,\n) =>\n | { response: Promise<Response>; binary?: undefined }\n | { response?: undefined; binary: Promise<Uint8Array> };\nif (IN_NODE) {\n getBinaryResponse = node_getBinaryResponse;\n} else {\n getBinaryResponse = browser_getBinaryResponse;\n}\n\nexport async function loadBinaryFile(\n path: string,\n file_sub_resource_hash?: string | undefined,\n): Promise<Uint8Array> {\n const { response, binary } = getBinaryResponse(path, file_sub_resource_hash);\n if (binary) {\n return binary;\n }\n const r = await response;\n if (!r.ok) {\n throw new Error(`Failed to load '${path}': request failed.`);\n }\n return new Uint8Array(await r.arrayBuffer());\n}\n\n/**\n * Currently loadScript is only used once to load `pyodide.asm.js`.\n * @param url\n * @async\n * @private\n */\nexport let loadScript: (url: string) => Promise<void>;\n\nif (IN_BROWSER_MAIN_THREAD) {\n // browser\n loadScript = async (url) => await import(/* webpackIgnore: true */ url);\n} else if (IN_BROWSER_WEB_WORKER) {\n // webworker\n loadScript = async (url) => {\n try {\n // use importScripts in classic web worker\n globalThis.importScripts(url);\n } catch (e) {\n // importScripts throws TypeError in a module type web worker, use import instead\n if (e instanceof TypeError) {\n await import(/* webpackIgnore: true */ url);\n } else {\n throw e;\n }\n }\n };\n} else if (IN_NODE) {\n loadScript = nodeLoadScript;\n} else {\n throw new Error(\"Cannot determine runtime environment\");\n}\n\n/**\n * Load a text file and executes it as Javascript\n * @param url The path to load. May be a url or a relative file system path.\n * @private\n */\nasync function nodeLoadScript(url: string) {\n if (url.startsWith(\"file://\")) {\n // handle file:// with filesystem operations rather than with fetch.\n url = url.slice(\"file://\".length);\n }\n if (url.includes(\"://\")) {\n // If it's a url, load it with fetch then eval it.\n nodeVmMod.runInThisContext(await (await nodeFetch(url)).text());\n } else {\n // Otherwise, hopefully it is a relative path we can load from the file\n // system.\n await import(/* webpackIgnore: true */ nodeUrlMod.pathToFileURL(url).href);\n }\n}\n\n// consider dropping this this once we drop support for node 14?\nfunction nodeBase16ToBase64(b16: string): string {\n return Buffer.from(b16, \"hex\").toString(\"base64\");\n}\n\nfunction browserBase16ToBase64(b16: string): string {\n return btoa(\n b16\n .match(/\\w{2}/g)!\n .map(function (a) {\n return String.fromCharCode(parseInt(a, 16));\n })\n .join(\"\"),\n );\n}\n\nexport const base16ToBase64 = IN_NODE\n ? nodeBase16ToBase64\n : browserBase16ToBase64;\n\nexport async function loadLockFile(lockFileURL: string): Promise<any> {\n if (IN_NODE) {\n await initNodeModules();\n const package_string = await nodeFsPromisesMod.readFile(lockFileURL);\n return JSON.parse(package_string);\n } else {\n let response = await fetch(lockFileURL);\n return await response.json();\n }\n}\n\n/**\n * Calculate the directory name of the current module.\n * This is used to guess the indexURL when it is not provided.\n */\nexport async function calculateDirname(): Promise<string> {\n if (IN_NODE_COMMONJS) {\n return __dirname;\n }\n\n let err: Error;\n try {\n throw new Error();\n } catch (e) {\n err = e as Error;\n }\n let fileName = ErrorStackParser.parse(err)[0].fileName!;\n\n if (IN_NODE_ESM) {\n const nodePath = await import(\"path\");\n const nodeUrl = await import(\"url\");\n\n // FIXME: We would like to use import.meta.url here,\n // but mocha seems to mess with compiling typescript files to ES6.\n return nodeUrl.fileURLToPath(nodePath.dirname(fileName));\n }\n\n const indexOfLastSlash = fileName.lastIndexOf(pathSep);\n if (indexOfLastSlash === -1) {\n throw new Error(\n \"Could not extract indexURL path from pyodide module location\",\n );\n }\n return fileName.slice(0, indexOfLastSlash);\n}\n", "// @ts-nocheck\n\n/** @private */\nexport const IN_NODE =\n typeof process === \"object\" &&\n typeof process.versions === \"object\" &&\n typeof process.versions.node === \"string\" &&\n typeof process.browser ===\n \"undefined\"; /* This last condition checks if we run the browser shim of process */\n\n/** @private */\nexport const IN_NODE_COMMONJS =\n IN_NODE &&\n typeof module !== \"undefined\" &&\n typeof module.exports !== \"undefined\" &&\n typeof require !== \"undefined\" &&\n typeof __dirname !== \"undefined\";\n\n/** @private */\nexport const IN_NODE_ESM = IN_NODE && !IN_NODE_COMMONJS;\n\n/** @private */\nexport const IN_DENO = typeof Deno !== \"undefined\"; // just in case...\n\n/** @private */\nexport const IN_BROWSER = !IN_NODE && !IN_DENO;\n\n/** @private */\nexport const IN_BROWSER_MAIN_THREAD =\n IN_BROWSER &&\n typeof window !== \"undefined\" &&\n typeof document !== \"undefined\" &&\n typeof document.createElement !== \"undefined\" &&\n typeof sessionStorage !== \"undefined\";\n\n/** @private */\nexport const IN_BROWSER_WEB_WORKER =\n IN_BROWSER &&\n typeof importScripts !== \"undefined\" &&\n typeof self !== \"undefined\";\n", "import { Module } from \"./types\";\n\n/**\n * @private\n */\nexport function initializeNativeFS(module: Module) {\n const FS = module.FS;\n const MEMFS = module.FS.filesystems.MEMFS;\n const PATH = module.PATH;\n\n const nativeFSAsync = {\n // DIR_MODE: {{{ cDefine('S_IFDIR') }}} | 511 /* 0777 */,\n // FILE_MODE: {{{ cDefine('S_IFREG') }}} | 511 /* 0777 */,\n DIR_MODE: 16384 | 511,\n FILE_MODE: 32768 | 511,\n mount: function (mount: any) {\n if (!mount.opts.fileSystemHandle) {\n throw new Error(\"opts.fileSystemHandle is required\");\n }\n\n // reuse all of the core MEMFS functionality\n return MEMFS.mount.apply(null, arguments);\n },\n syncfs: async (mount: any, populate: Boolean, callback: Function) => {\n try {\n const local = nativeFSAsync.getLocalSet(mount);\n const remote = await nativeFSAsync.getRemoteSet(mount);\n const src = populate ? remote : local;\n const dst = populate ? local : remote;\n await nativeFSAsync.reconcile(mount, src, dst);\n callback(null);\n } catch (e) {\n callback(e);\n }\n },\n // Returns file set of emscripten's filesystem at the mountpoint.\n getLocalSet: (mount: any) => {\n let entries = Object.create(null);\n\n function isRealDir(p: string) {\n return p !== \".\" && p !== \"..\";\n }\n\n function toAbsolute(root: string) {\n return (p: string) => {\n return PATH.join2(root, p);\n };\n }\n\n let check = FS.readdir(mount.mountpoint)\n .filter(isRealDir)\n .map(toAbsolute(mount.mountpoint));\n\n while (check.length) {\n let path = check.pop();\n let stat = FS.stat(path);\n\n if (FS.isDir(stat.mode)) {\n check.push.apply(\n check,\n FS.readdir(path).filter(isRealDir).map(toAbsolute(path)),\n );\n }\n\n entries[path] = { timestamp: stat.mtime, mode: stat.mode };\n }\n\n return { type: \"local\", entries: entries };\n },\n // Returns file set of the real, on-disk filesystem at the mountpoint.\n getRemoteSet: async (mount: any) => {\n // TODO: this should be a map.\n const entries = Object.create(null);\n\n const handles = await getFsHandles(mount.opts.fileSystemHandle);\n for (const [path, handle] of handles) {\n if (path === \".\") continue;\n\n entries[PATH.join2(mount.mountpoint, path)] = {\n timestamp:\n handle.kind === \"file\"\n ? (await handle.getFile()).lastModifiedDate\n : new Date(),\n mode:\n handle.kind === \"file\"\n ? nativeFSAsync.FILE_MODE\n : nativeFSAsync.DIR_MODE,\n };\n }\n\n return { type: \"remote\", entries, handles };\n },\n loadLocalEntry: (path: string) => {\n const lookup = FS.lookupPath(path);\n const node = lookup.node;\n const stat = FS.stat(path);\n\n if (FS.isDir(stat.mode)) {\n return { timestamp: stat.mtime, mode: stat.mode };\n } else if (FS.isFile(stat.mode)) {\n node.contents = MEMFS.getFileDataAsTypedArray(node);\n return {\n timestamp: stat.mtime,\n mode: stat.mode,\n contents: node.contents,\n };\n } else {\n throw new Error(\"node type not supported\");\n }\n },\n storeLocalEntry: (path: string, entry: any) => {\n if (FS.isDir(entry[\"mode\"])) {\n FS.mkdirTree(path, entry[\"mode\"]);\n } else if (FS.isFile(entry[\"mode\"])) {\n FS.writeFile(path, entry[\"contents\"], { canOwn: true });\n } else {\n throw new Error(\"node type not supported\");\n }\n\n FS.chmod(path, entry[\"mode\"]);\n FS.utime(path, entry[\"timestamp\"], entry[\"timestamp\"]);\n },\n removeLocalEntry: (path: string) => {\n var stat = FS.stat(path);\n\n if (FS.isDir(stat.mode)) {\n FS.rmdir(path);\n } else if (FS.isFile(stat.mode)) {\n FS.unlink(path);\n }\n },\n loadRemoteEntry: async (handle: any) => {\n if (handle.kind === \"file\") {\n const file = await handle.getFile();\n return {\n contents: new Uint8Array(await file.arrayBuffer()),\n mode: nativeFSAsync.FILE_MODE,\n timestamp: file.lastModifiedDate,\n };\n } else if (handle.kind === \"directory\") {\n return {\n mode: nativeFSAsync.DIR_MODE,\n timestamp: new Date(),\n };\n } else {\n throw new Error(\"unknown kind: \" + handle.kind);\n }\n },\n storeRemoteEntry: async (handles: any, path: string, entry: any) => {\n const parentDirHandle = handles.get(PATH.dirname(path));\n const handle = FS.isFile(entry.mode)\n ? await parentDirHandle.getFileHandle(PATH.basename(path), {\n create: true,\n })\n : await parentDirHandle.getDirectoryHandle(PATH.basename(path), {\n create: true,\n });\n if (handle.kind === \"file\") {\n const writable = await handle.createWritable();\n await writable.write(entry.contents);\n await writable.close();\n }\n handles.set(path, handle);\n },\n removeRemoteEntry: async (handles: any, path: string) => {\n const parentDirHandle = handles.get(PATH.dirname(path));\n await parentDirHandle.removeEntry(PATH.basename(path));\n handles.delete(path);\n },\n reconcile: async (mount: any, src: any, dst: any) => {\n let total = 0;\n\n const create: Array<string> = [];\n Object.keys(src.entries).forEach(function (key) {\n const e = src.entries[key];\n const e2 = dst.entries[key];\n if (\n !e2 ||\n (FS.isFile(e.mode) &&\n e[\"timestamp\"].getTime() > e2[\"timestamp\"].getTime())\n ) {\n create.push(key);\n total++;\n }\n });\n // sort paths in ascending order so directory entries are created\n // before the files inside them\n create.sort();\n\n const remove: Array<string> = [];\n Object.keys(dst.entries).forEach(function (key) {\n if (!src.entries[key]) {\n remove.push(key);\n total++;\n }\n });\n // sort paths in descending order so files are deleted before their\n // parent directories\n remove.sort().reverse();\n\n if (!total) {\n return;\n }\n\n const handles = src.type === \"remote\" ? src.handles : dst.handles;\n\n for (const path of create) {\n const relPath = PATH.normalize(\n path.replace(mount.mountpoint, \"/\"),\n ).substring(1);\n if (dst.type === \"local\") {\n const handle = handles.get(relPath);\n const entry = await nativeFSAsync.loadRemoteEntry(handle);\n nativeFSAsync.storeLocalEntry(path, entry);\n } else {\n const entry = nativeFSAsync.loadLocalEntry(path);\n await nativeFSAsync.storeRemoteEntry(handles, relPath, entry);\n }\n }\n\n for (const path of remove) {\n if (dst.type === \"local\") {\n nativeFSAsync.removeLocalEntry(path);\n } else {\n const relPath = PATH.normalize(\n path.replace(mount.mountpoint, \"/\"),\n ).substring(1);\n await nativeFSAsync.removeRemoteEntry(handles, relPath);\n }\n }\n },\n };\n\n module.FS.filesystems.NATIVEFS_ASYNC = nativeFSAsync;\n}\n\nconst getFsHandles = async (dirHandle: any) => {\n const handles: any = [];\n\n async function collect(curDirHandle: any) {\n for await (const entry of curDirHandle.values()) {\n handles.push(entry);\n if (entry.kind === \"directory\") {\n await collect(entry);\n }\n }\n }\n\n await collect(dirHandle);\n\n const result = new Map();\n result.set(\".\", dirHandle);\n for (const handle of handles) {\n const relativePath = (await dirHandle.resolve(handle)).join(\"/\");\n result.set(relativePath, handle);\n }\n return result;\n};\n", "/** @private */\n\nimport { ConfigType } from \"./pyodide\";\nimport { initializeNativeFS } from \"./nativefs\";\nimport { loadBinaryFile, getBinaryResponse } from \"./compat\";\nimport { Module } from \"./types\";\n\n/**\n * The Emscripten Module.\n *\n * @private\n */\nexport function createModule(): Module {\n let Module: any = {};\n Module.noImageDecoding = true;\n Module.noAudioDecoding = true;\n Module.noWasmDecoding = false; // we preload wasm using the built in plugin now\n Module.preRun = [];\n Module.quit = (status: number, toThrow: Error) => {\n Module.exited = { status, toThrow };\n throw toThrow;\n };\n return Module as Module;\n}\n\n/**\n * Make the home directory inside the virtual file system,\n * then change the working directory to it.\n *\n * @param Module The Emscripten Module.\n * @param path The path to the home directory.\n * @private\n */\nfunction createHomeDirectory(Module: Module, path: string) {\n Module.preRun.push(function () {\n const fallbackPath = \"/\";\n try {\n Module.FS.mkdirTree(path);\n } catch (e) {\n console.error(`Error occurred while making a home directory '${path}':`);\n console.error(e);\n console.error(`Using '${fallbackPath}' for a home directory instead`);\n path = fallbackPath;\n }\n Module.FS.chdir(path);\n });\n}\n\nfunction setEnvironment(Module: Module, env: { [key: string]: string }) {\n Module.preRun.push(function () {\n Object.assign(Module.ENV, env);\n });\n}\n\n/**\n * Mount local directories to the virtual file system. Only for Node.js.\n * @param module The Emscripten Module.\n * @param mounts The list of paths to mount.\n */\nfunction mountLocalDirectories(Module: Module, mounts: string[]) {\n Module.preRun.push(() => {\n for (const mount of mounts) {\n Module.FS.mkdirTree(mount);\n Module.FS.mount(Module.FS.filesystems.NODEFS, { root: mount }, mount);\n }\n });\n}\n\n/**\n * Install the Python standard library to the virtual file system.\n *\n * Previously, this was handled by Emscripten's file packager (pyodide.asm.data).\n * However, using the file packager means that we have only one version\n * of the standard library available. We want to be able to use different\n * versions of the standard library, for example:\n *\n * - Use compiled(.pyc) or uncompiled(.py) standard library.\n * - Remove unused modules or add additional modules using bundlers like pyodide-pack.\n *\n * @param Module The Emscripten Module.\n * @param stdlibPromise A promise that resolves to the standard library.\n */\nfunction installStdlib(Module: Module, stdlibURL: string) {\n const stdlibPromise: Promise<Uint8Array> = loadBinaryFile(stdlibURL);\n\n Module.preRun.push(() => {\n /* @ts-ignore */\n const pymajor = Module._py_version_major();\n /* @ts-ignore */\n const pyminor = Module._py_version_minor();\n\n Module.FS.mkdirTree(\"/lib\");\n Module.FS.mkdirTree(`/lib/python${pymajor}.${pyminor}/site-packages`);\n\n Module.addRunDependency(\"install-stdlib\");\n\n stdlibPromise\n .then((stdlib: Uint8Array) => {\n Module.FS.writeFile(`/lib/python${pymajor}${pyminor}.zip`, stdlib);\n })\n .catch((e) => {\n console.error(\"Error occurred while installing the standard library:\");\n console.error(e);\n })\n .finally(() => {\n Module.removeRunDependency(\"install-stdlib\");\n });\n });\n}\n\n/**\n * Initialize the virtual file system, before loading Python interpreter.\n * @private\n */\nexport function initializeFileSystem(Module: Module, config: ConfigType) {\n let stdLibURL;\n if (config.stdLibURL != undefined) {\n stdLibURL = config.stdLibURL;\n } else {\n stdLibURL = config.indexURL + \"python_stdlib.zip\";\n }\n\n installStdlib(Module, stdLibURL);\n createHomeDirectory(Module, config.env.HOME);\n setEnvironment(Module, config.env);\n mountLocalDirectories(Module, config._node_mounts);\n Module.preRun.push(() => initializeNativeFS(Module));\n}\n\nexport function preloadWasm(Module: Module, indexURL: string) {\n if (SOURCEMAP) {\n // According to the docs:\n //\n // \"Sanitizers or source map is currently not supported if overriding\n // WebAssembly instantiation with Module.instantiateWasm.\"\n // https://emscripten.org/docs/api_reference/module.html?highlight=instantiatewasm#Module.instantiateWasm\n return;\n }\n const { binary, response } = getBinaryResponse(indexURL + \"pyodide.asm.wasm\");\n Module.instantiateWasm = function (\n imports: { [key: string]: any },\n successCallback: (\n instance: WebAssembly.Instance,\n module: WebAssembly.Module,\n ) => void,\n ) {\n (async function () {\n try {\n let res: WebAssembly.WebAssemblyInstantiatedSource;\n if (response) {\n res = await WebAssembly.instantiateStreaming(response, imports);\n } else {\n res = await WebAssembly.instantiate(await binary, imports);\n }\n const { instance, module } = res;\n // When overriding instantiateWasm, in asan builds, we also need\n // to take care of creating the WasmOffsetConverter\n // @ts-ignore\n if (typeof WasmOffsetConverter != \"undefined\") {\n // @ts-ignore\n wasmOffsetConverter = new WasmOffsetConverter(wasmBinary, module);\n }\n successCallback(instance, module);\n } catch (e) {\n console.warn(\"wasm instantiation failed!\");\n console.warn(e);\n }\n })();\n\n return {}; // Compiling asynchronously, no exports.\n };\n}\n", "/**\n *\n * The Pyodide version.\n *\n * The version here is a Python version, following :pep:`440`. This is different\n * from the version in ``package.json`` which follows the node package manager\n * version convention.\n */\nexport const version: string = \"0.25.1\";\n", "/**\n * The main bootstrap code for loading pyodide.\n */\nimport {\n calculateDirname,\n loadScript,\n initNodeModules,\n resolvePath,\n loadLockFile,\n} from \"./compat\";\n\nimport { createModule, initializeFileSystem, preloadWasm } from \"./module\";\nimport { version } from \"./version\";\n\nimport type { PyodideInterface } from \"./api.js\";\nimport type { TypedArray, API, Module } from \"./types\";\nimport type { PackageData } from \"./load-package\";\nexport type { PyodideInterface, TypedArray };\n\nexport { version, type PackageData };\n\ndeclare function _createPyodideModule(Module: any): Promise<void>;\n\n/**\n * See documentation for loadPyodide.\n * @private\n */\nexport type ConfigType = {\n indexURL: string;\n packageCacheDir: string;\n lockFileURL: string;\n fullStdLib?: boolean;\n stdLibURL?: string;\n stdin?: () => string;\n stdout?: (msg: string) => void;\n stderr?: (msg: string) => void;\n jsglobals?: object;\n args: string[];\n _node_mounts: string[];\n env: { [key: string]: string };\n packages: string[];\n};\n\n/**\n * Load the main Pyodide wasm module and initialize it.\n *\n * @returns The :ref:`js-api-pyodide` module.\n * @memberof globalThis\n * @async\n * @example\n * async function main() {\n * const pyodide = await loadPyodide({\n * fullStdLib: true,\n * stdout: (msg) => console.log(`Pyodide: ${msg}`),\n * });\n * console.log(\"Loaded Pyodide\");\n * }\n * main();\n */\nexport async function loadPyodide(\n options: {\n /**\n * The URL from which Pyodide will load the main Pyodide runtime and\n * packages. It is recommended that you leave this unchanged, providing an\n * incorrect value can cause broken behavior.\n *\n * Default: The url that Pyodide is loaded from with the file name\n * (``pyodide.js`` or ``pyodide.mjs``) removed.\n */\n indexURL?: string;\n\n /**\n * The file path where packages will be cached in node. If a package\n * exists in ``packageCacheDir`` it is loaded from there, otherwise it is\n * downloaded from the JsDelivr CDN and then cached into ``packageCacheDir``.\n * Only applies when running in node; ignored in browsers.\n *\n * Default: same as indexURL\n */\n packageCacheDir?: string;\n\n /**\n * The URL from which Pyodide will load the Pyodide ``pyodide-lock.json`` lock\n * file. You can produce custom lock files with :py:func:`micropip.freeze`.\n * Default: ```${indexURL}/pyodide-lock.json```\n */\n lockFileURL?: string;\n /**\n * Load the full Python standard library. Setting this to false excludes\n * unvendored modules from the standard library.\n * Default: ``false``\n */\n fullStdLib?: boolean;\n /**\n * The URL from which to load the standard library ``python_stdlib.zip``\n * file. This URL includes the most of the Python standard library. Some\n * stdlib modules were unvendored, and can be loaded separately\n * with ``fullStdLib: true`` option or by their package name.\n * Default: ```${indexURL}/python_stdlib.zip```\n */\n stdLibURL?: string;\n /**\n * Override the standard input callback. Should ask the user for one line of\n * input. The :js:func:`pyodide.setStdin` function is more flexible and\n * should be preferred.\n */\n stdin?: () => string;\n /**\n * Override the standard output callback. The :js:func:`pyodide.setStdout`\n * function is more flexible and should be preferred in most cases, but\n * depending on the ``args`` passed to ``loadPyodide``, Pyodide may write to\n * stdout on startup, which can only be controlled by passing a custom\n * ``stdout`` function.\n */\n stdout?: (msg: string) => void;\n /**\n * Override the standard error output callback. The\n * :js:func:`pyodide.setStderr` function is more flexible and should be\n * preferred in most cases, but depending on the ``args`` passed to\n * ``loadPyodide``, Pyodide may write to stdout on startup, which can only\n * be controlled by passing a custom ``stdout`` function.\n */\n stderr?: (msg: string) => void;\n /**\n * The object that Pyodide will use for the ``js`` module.\n * Default: ``globalThis``\n */\n jsglobals?: object;\n /**\n * Command line arguments to pass to Python on startup. See `Python command\n * line interface options\n * <https://docs.python.org/3.10/using/cmdline.html#interface-options>`_ for\n * more details. Default: ``[]``\n */\n args?: string[];\n /**\n * Environment variables to pass to Python. This can be accessed inside of\n * Python at runtime via :py:data:`os.environ`. Certain environment variables change\n * the way that Python loads:\n * https://docs.python.org/3.10/using/cmdline.html#environment-variables\n * Default: ``{}``.\n * If ``env.HOME`` is undefined, it will be set to a default value of\n * ``\"/home/pyodide\"``\n */\n env?: { [key: string]: string };\n /**\n * A list of packages to load as Pyodide is initializing.\n *\n * This is the same as loading the packages with\n * :js:func:`pyodide.loadPackage` after Pyodide is loaded except using the\n * ``packages`` option is more efficient because the packages are downloaded\n * while Pyodide bootstraps itself.\n */\n packages?: string[];\n /**\n * Opt into the old behavior where PyProxy.toString calls `repr` and not\n * `str`.\n * @deprecated\n */\n pyproxyToStringRepr?: boolean;\n /**\n * @ignore\n */\n _node_mounts?: string[];\n } = {},\n): Promise<PyodideInterface> {\n await initNodeModules();\n let indexURL = options.indexURL || (await calculateDirname());\n indexURL = resolvePath(indexURL); // A relative indexURL causes havoc.\n if (!indexURL.endsWith(\"/\")) {\n indexURL += \"/\";\n }\n options.indexURL = indexURL;\n\n const default_config = {\n fullStdLib: false,\n jsglobals: globalThis,\n stdin: globalThis.prompt ? globalThis.prompt : undefined,\n lockFileURL: indexURL + \"pyodide-lock.json\",\n args: [],\n _node_mounts: [],\n env: {},\n packageCacheDir: indexURL,\n packages: [],\n };\n const config = Object.assign(default_config, options) as ConfigType;\n if (!config.env.HOME) {\n config.env.HOME = \"/home/pyodide\";\n }\n\n const Module = createModule();\n Module.print = config.stdout;\n Module.printErr = config.stderr;\n Module.arguments = config.args;\n\n const API = { config } as API;\n Module.API = API;\n API.lockFilePromise = loadLockFile(config.lockFileURL);\n\n preloadWasm(Module, indexURL);\n initializeFileSystem(Module, config);\n\n const moduleLoaded = new Promise((r) => (Module.postRun = r));\n\n // locateFile tells Emscripten where to find the data files that initialize\n // the file system.\n Module.locateFile = (path: string) => config.indexURL + path;\n\n // If the pyodide.asm.js script has been imported, we can skip the dynamic import\n // Users can then do a static import of the script in environments where\n // dynamic importing is not allowed or not desirable, like module-type service workers\n if (typeof _createPyodideModule !== \"function\") {\n const scriptSrc = `${config.indexURL}pyodide.asm.js`;\n await loadScript(scriptSrc);\n }\n\n // _createPyodideModule is specified in the Makefile by the linker flag:\n // `-s EXPORT_NAME=\"'_createPyodideModule'\"`\n await _createPyodideModule(Module);\n\n // There is some work to be done between the module being \"ready\" and postRun\n // being called.\n await moduleLoaded;\n // Handle early exit\n if (Module.exited) {\n throw Module.exited.toThrow;\n }\n if (options.pyproxyToStringRepr) {\n API.setPyProxyToStringMethod(true);\n }\n\n if (API.version !== version) {\n throw new Error(\n `\\\nPyodide version does not match: '${version}' <==> '${API.version}'. \\\nIf you updated the Pyodide version, make sure you also updated the 'indexURL' parameter passed to loadPyodide.\\\n`,\n );\n }\n // Disable further loading of Emscripten file_packager stuff.\n Module.locateFile = (path: string) => {\n throw new Error(\"Didn't expect to load any more file_packager files!\");\n };\n\n const pyodide = API.finalizeBootstrap();\n\n // runPython works starting here.\n if (!pyodide.version.includes(\"dev\")) {\n // Currently only used in Node to download packages the first time they are\n // loaded. But in other cases it's harmless.\n API.setCdnUrl(`https://cdn.jsdelivr.net/pyodide/v${pyodide.version}/full/`);\n }\n await API.packageIndexReady;\n\n let importhook = API._pyodide._importhook;\n importhook.register_module_not_found_hook(\n API._import_name_to_package_name,\n API.lockfile_unvendored_stdlibs_and_test,\n );\n\n if (API.lockfile_info.version !== version) {\n throw new Error(\"Lock file version doesn't match Pyodide version\");\n }\n API.package_loader.init_loaded_packages();\n if (config.fullStdLib) {\n await pyodide.loadPackage(API.lockfile_unvendored_stdlibs);\n }\n API.initializeStreams(config.stdin, config.stdout, config.stderr);\n return pyodide;\n}\n"],
"mappings": "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",
"names": ["require_stackframe", "__commonJSMin", "exports", "module", "root", "factory", "_isNumber", "n", "__name", "_capitalize", "str", "_getter", "p", "booleanProps", "numericProps", "stringProps", "arrayProps", "objectProps", "props", "StackFrame", "obj", "i", "v", "fileName", "lineNumber", "columnNumber", "functionName", "argsStartIndex", "argsEndIndex", "args", "locationString", "parts", "j", "k", "require_error_stack_parser", "__commonJSMin", "exports", "module", "root", "factory", "__name", "StackFrame", "FIREFOX_SAFARI_STACK_REGEXP", "CHROME_IE_STACK_REGEXP", "SAFARI_NATIVE_CODE_REGEXP", "error", "urlLike", "regExp", "parts", "filtered", "line", "sanitizedLine", "location", "locationParts", "functionName", "fileName", "functionNameRegex", "matches", "e", "lineRE", "lines", "result", "i", "len", "match", "tokens", "functionCall", "argsRaw", "args", "pyodide_umd_exports", "__export", "loadPyodide", "version", "import_error_stack_parser", "IN_NODE", "IN_NODE_COMMONJS", "__require", "IN_NODE_ESM", "IN_DENO", "IN_BROWSER", "IN_BROWSER_MAIN_THREAD", "IN_BROWSER_WEB_WORKER", "nodeUrlMod", "nodeFetch", "nodePath", "nodeVmMod", "nodeFsPromisesMod", "FETCH_NOT_FOUND_MSG", "initNodeModules", "IN_NODE", "pathSep", "__require", "fs", "crypto", "ws", "child_process", "node_modules", "mod", "__name", "node_resolvePath", "path", "base", "browser_resolvePath", "resolvePath", "node_getBinaryResponse", "_file_sub_resource_hash", "data", "browser_getBinaryResponse", "subResourceHash", "url", "getBinaryResponse", "loadBinaryFile", "file_sub_resource_hash", "response", "binary", "r", "loadScript", "IN_BROWSER_MAIN_THREAD", "IN_BROWSER_WEB_WORKER", "nodeLoadScript", "loadLockFile", "lockFileURL", "IN_NODE", "initNodeModules", "package_string", "nodeFsPromisesMod", "__name", "calculateDirname", "IN_NODE_COMMONJS", "err", "e", "fileName", "ErrorStackParser", "IN_NODE_ESM", "nodePath", "indexOfLastSlash", "pathSep", "initializeNativeFS", "module", "FS", "MEMFS", "PATH", "nativeFSAsync", "mount", "populate", "callback", "local", "remote", "src", "dst", "e", "entries", "isRealDir", "p", "__name", "toAbsolute", "root", "check", "path", "stat", "handles", "getFsHandles", "handle", "node", "entry", "file", "parentDirHandle", "writable", "total", "create", "key", "e2", "remove", "relPath", "dirHandle", "collect", "curDirHandle", "result", "relativePath", "createModule", "Module", "status", "toThrow", "__name", "createHomeDirectory", "path", "fallbackPath", "e", "setEnvironment", "env", "mountLocalDirectories", "mounts", "mount", "installStdlib", "stdlibURL", "stdlibPromise", "loadBinaryFile", "pymajor", "pyminor", "stdlib", "initializeFileSystem", "config", "stdLibURL", "initializeNativeFS", "preloadWasm", "indexURL", "binary", "response", "getBinaryResponse", "imports", "successCallback", "res", "instance", "module", "version", "loadPyodide", "options", "initNodeModules", "indexURL", "calculateDirname", "resolvePath", "default_config", "config", "Module", "createModule", "API", "loadLockFile", "preloadWasm", "initializeFileSystem", "moduleLoaded", "r", "path", "scriptSrc", "loadScript", "version", "pyodide", "__name", "loadPyodide"]
}
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment