diff --git a/notebooks/reserved_ids_no_sympy.ipynb b/notebooks/reserved_ids_no_sympy.ipynb
new file mode 100644
index 00000000..24ca5f13
--- /dev/null
+++ b/notebooks/reserved_ids_no_sympy.ipynb
@@ -0,0 +1,277 @@
+{
+ "cells": [
+ {
+ "cell_type": "code",
+ "execution_count": 1,
+ "id": "fe5a40c3-b7f8-4421-b29d-552438fb32e3",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "178"
+ ]
+ },
+ "execution_count": 1,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "# add python reserved keywords\n",
+ "import keyword\n",
+ "reserved = set(keyword.kwlist)\n",
+ "\n",
+ "# add python builtin functions\n",
+ "import builtins\n",
+ "reserved.update(dir(builtins))\n",
+ "\n",
+ "# remove symbols that begin with underscore, also remove pi since pi maps one-to-one\n",
+ "reserved = {value for value in reserved if not value.startswith('_') and value != 'pi'}\n",
+ "\n",
+ "len(reserved)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 2,
+ "id": "e70db174-fa8a-471d-aa68-bc015e22796c",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "def to_javascript(reserved):\n",
+ " output = \"export const PYTHON_RESERVED = new Set([\\n\"\n",
+ " \n",
+ " for symbol in reserved:\n",
+ " output += f' \"{symbol}\",\\n'\n",
+ " \n",
+ " output += \"]);\"\n",
+ " \n",
+ " return output\n",
+ " "
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 3,
+ "id": "7e8d236f-15d1-444f-a65b-ec70e3bcf8a8",
+ "metadata": {
+ "scrolled": false
+ },
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "export const PYTHON_RESERVED = new Set([\n",
+ " \"FileNotFoundError\",\n",
+ " \"execfile\",\n",
+ " \"exec\",\n",
+ " \"ImportWarning\",\n",
+ " \"class\",\n",
+ " \"frozenset\",\n",
+ " \"ModuleNotFoundError\",\n",
+ " \"UnicodeDecodeError\",\n",
+ " \"as\",\n",
+ " \"delattr\",\n",
+ " \"MemoryError\",\n",
+ " \"ChildProcessError\",\n",
+ " \"type\",\n",
+ " \"BaseException\",\n",
+ " \"KeyError\",\n",
+ " \"slice\",\n",
+ " \"ConnectionError\",\n",
+ " \"Exception\",\n",
+ " \"SyntaxWarning\",\n",
+ " \"bin\",\n",
+ " \"AttributeError\",\n",
+ " \"return\",\n",
+ " \"while\",\n",
+ " \"EnvironmentError\",\n",
+ " \"hex\",\n",
+ " \"OverflowError\",\n",
+ " \"IsADirectoryError\",\n",
+ " \"UnicodeWarning\",\n",
+ " \"staticmethod\",\n",
+ " \"else\",\n",
+ " \"runfile\",\n",
+ " \"import\",\n",
+ " \"max\",\n",
+ " \"Warning\",\n",
+ " \"GeneratorExit\",\n",
+ " \"bytes\",\n",
+ " \"bool\",\n",
+ " \"print\",\n",
+ " \"ReferenceError\",\n",
+ " \"RuntimeWarning\",\n",
+ " \"credits\",\n",
+ " \"globals\",\n",
+ " \"pow\",\n",
+ " \"NotImplemented\",\n",
+ " \"from\",\n",
+ " \"range\",\n",
+ " \"hash\",\n",
+ " \"pass\",\n",
+ " \"if\",\n",
+ " \"def\",\n",
+ " \"FileExistsError\",\n",
+ " \"vars\",\n",
+ " \"ProcessLookupError\",\n",
+ " \"NameError\",\n",
+ " \"chr\",\n",
+ " \"SystemError\",\n",
+ " \"SystemExit\",\n",
+ " \"callable\",\n",
+ " \"ConnectionAbortedError\",\n",
+ " \"TabError\",\n",
+ " \"ZeroDivisionError\",\n",
+ " \"with\",\n",
+ " \"yield\",\n",
+ " \"iter\",\n",
+ " \"InterruptedError\",\n",
+ " \"NotImplementedError\",\n",
+ " \"ImportError\",\n",
+ " \"RuntimeError\",\n",
+ " \"ConnectionRefusedError\",\n",
+ " \"map\",\n",
+ " \"tuple\",\n",
+ " \"BlockingIOError\",\n",
+ " \"False\",\n",
+ " \"TimeoutError\",\n",
+ " \"continue\",\n",
+ " \"is\",\n",
+ " \"id\",\n",
+ " \"setattr\",\n",
+ " \"elif\",\n",
+ " \"ConnectionResetError\",\n",
+ " \"del\",\n",
+ " \"float\",\n",
+ " \"ascii\",\n",
+ " \"list\",\n",
+ " \"TypeError\",\n",
+ " \"break\",\n",
+ " \"for\",\n",
+ " \"True\",\n",
+ " \"BrokenPipeError\",\n",
+ " \"IOError\",\n",
+ " \"copyright\",\n",
+ " \"input\",\n",
+ " \"super\",\n",
+ " \"compile\",\n",
+ " \"and\",\n",
+ " \"eval\",\n",
+ " \"any\",\n",
+ " \"isinstance\",\n",
+ " \"dir\",\n",
+ " \"classmethod\",\n",
+ " \"NotADirectoryError\",\n",
+ " \"zip\",\n",
+ " \"bytearray\",\n",
+ " \"FloatingPointError\",\n",
+ " \"or\",\n",
+ " \"ord\",\n",
+ " \"divmod\",\n",
+ " \"finally\",\n",
+ " \"BytesWarning\",\n",
+ " \"IndentationError\",\n",
+ " \"format\",\n",
+ " \"dict\",\n",
+ " \"min\",\n",
+ " \"object\",\n",
+ " \"property\",\n",
+ " \"EOFError\",\n",
+ " \"str\",\n",
+ " \"PermissionError\",\n",
+ " \"display\",\n",
+ " \"nonlocal\",\n",
+ " \"lambda\",\n",
+ " \"len\",\n",
+ " \"in\",\n",
+ " \"memoryview\",\n",
+ " \"None\",\n",
+ " \"reversed\",\n",
+ " \"UnicodeError\",\n",
+ " \"AssertionError\",\n",
+ " \"UnboundLocalError\",\n",
+ " \"assert\",\n",
+ " \"set\",\n",
+ " \"async\",\n",
+ " \"all\",\n",
+ " \"int\",\n",
+ " \"Ellipsis\",\n",
+ " \"sum\",\n",
+ " \"open\",\n",
+ " \"help\",\n",
+ " \"await\",\n",
+ " \"BufferError\",\n",
+ " \"IndexError\",\n",
+ " \"repr\",\n",
+ " \"try\",\n",
+ " \"not\",\n",
+ " \"PendingDeprecationWarning\",\n",
+ " \"StopAsyncIteration\",\n",
+ " \"complex\",\n",
+ " \"sorted\",\n",
+ " \"RecursionError\",\n",
+ " \"round\",\n",
+ " \"abs\",\n",
+ " \"FutureWarning\",\n",
+ " \"SyntaxError\",\n",
+ " \"oct\",\n",
+ " \"StopIteration\",\n",
+ " \"except\",\n",
+ " \"UserWarning\",\n",
+ " \"filter\",\n",
+ " \"issubclass\",\n",
+ " \"locals\",\n",
+ " \"getattr\",\n",
+ " \"global\",\n",
+ " \"hasattr\",\n",
+ " \"UnicodeEncodeError\",\n",
+ " \"KeyboardInterrupt\",\n",
+ " \"ArithmeticError\",\n",
+ " \"get_ipython\",\n",
+ " \"raise\",\n",
+ " \"enumerate\",\n",
+ " \"OSError\",\n",
+ " \"UnicodeTranslateError\",\n",
+ " \"ValueError\",\n",
+ " \"next\",\n",
+ " \"ResourceWarning\",\n",
+ " \"license\",\n",
+ " \"breakpoint\",\n",
+ " \"DeprecationWarning\",\n",
+ " \"LookupError\",\n",
+ "]);\n"
+ ]
+ }
+ ],
+ "source": [
+ "js_code = to_javascript(reserved)\n",
+ "\n",
+ "print(js_code)"
+ ]
+ }
+ ],
+ "metadata": {
+ "kernelspec": {
+ "display_name": "Python 3 (ipykernel)",
+ "language": "python",
+ "name": "python3"
+ },
+ "language_info": {
+ "codemirror_mode": {
+ "name": "ipython",
+ "version": 3
+ },
+ "file_extension": ".py",
+ "mimetype": "text/x-python",
+ "name": "python",
+ "nbconvert_exporter": "python",
+ "pygments_lexer": "ipython3",
+ "version": "3.9.13"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 5
+}
diff --git a/package-lock.json b/package-lock.json
index ef0a6761..9e4051fb 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -44,7 +44,7 @@
"rollup-plugin-svelte": "^7.1.0",
"rollup-plugin-workbox": "^6.2.0",
"ssri": "^10.0.1",
- "svelte": "^3.49.0",
+ "svelte": "^3.59.2",
"svelte-preprocess": "^5.0.1",
"tslib": "^2.4.0",
"typescript": "^4.9.4",
@@ -6986,9 +6986,9 @@
}
},
"node_modules/svelte": {
- "version": "3.49.0",
- "resolved": "https://registry.npmjs.org/svelte/-/svelte-3.49.0.tgz",
- "integrity": "sha512-+lmjic1pApJWDfPCpUUTc1m8azDqYCG1JN9YEngrx/hUyIcFJo6VZhj0A1Ai0wqoHcEIuQy+e9tk+4uDgdtsFA==",
+ "version": "3.59.2",
+ "resolved": "https://registry.npmjs.org/svelte/-/svelte-3.59.2.tgz",
+ "integrity": "sha512-vzSyuGr3eEoAtT/A6bmajosJZIUWySzY2CzB3w2pgPvnkUjGqlDnsNnA0PMO+mMAhuyMul6C2uuZzY6ELSkzyA==",
"dev": true,
"engines": {
"node": ">= 8"
@@ -12826,9 +12826,9 @@
"dev": true
},
"svelte": {
- "version": "3.49.0",
- "resolved": "https://registry.npmjs.org/svelte/-/svelte-3.49.0.tgz",
- "integrity": "sha512-+lmjic1pApJWDfPCpUUTc1m8azDqYCG1JN9YEngrx/hUyIcFJo6VZhj0A1Ai0wqoHcEIuQy+e9tk+4uDgdtsFA==",
+ "version": "3.59.2",
+ "resolved": "https://registry.npmjs.org/svelte/-/svelte-3.59.2.tgz",
+ "integrity": "sha512-vzSyuGr3eEoAtT/A6bmajosJZIUWySzY2CzB3w2pgPvnkUjGqlDnsNnA0PMO+mMAhuyMul6C2uuZzY6ELSkzyA==",
"dev": true
},
"svelte-preprocess": {
diff --git a/package.json b/package.json
index e3c895e6..5ce921c3 100644
--- a/package.json
+++ b/package.json
@@ -35,7 +35,7 @@
"rollup-plugin-svelte": "^7.1.0",
"rollup-plugin-workbox": "^6.2.0",
"ssri": "^10.0.1",
- "svelte": "^3.49.0",
+ "svelte": "^3.59.2",
"svelte-preprocess": "^5.0.1",
"tslib": "^2.4.0",
"typescript": "^4.9.4",
diff --git a/public/dimensional_analysis.py b/public/dimensional_analysis.py
index 177d78fa..542fe1e4 100644
--- a/public/dimensional_analysis.py
+++ b/public/dimensional_analysis.py
@@ -5,14 +5,16 @@
from sys import setrecursionlimit
-# must be at least 131 to load sympy, cpython is 400 by default
-setrecursionlimit(400)
+# must be at least 131 to load sympy, cpython is 3000 by default
+setrecursionlimit(1000)
from functools import lru_cache
import traceback
from json import loads, dumps
+from math import prod
+
from sympy import (
Expr,
cancel,
@@ -45,14 +47,26 @@
conjugate,
Abs,
Integral,
- Derivative
+ Derivative,
+ Matrix,
+ MatrixBase,
+ Inverse,
+ Determinant,
+ Transpose,
+ Subs,
+ Pow,
+ MatMul,
+ Eq
)
class ExprWithAssumptions(Expr):
is_finite: bool
+ is_integer: bool
from sympy.printing.latex import modifier_dict
+from sympy.printing.numpy import NumPyPrinter
+
from sympy.physics.units import Dimension
from sympy.physics.units.definitions.dimension_definitions import (
@@ -77,7 +91,7 @@ class ExprWithAssumptions(Expr):
import numbers
-from typing import TypedDict, Literal, cast, TypeGuard, Sequence, Any, Callable
+from typing import TypedDict, Literal, cast, TypeGuard, Sequence, Any, Callable, NotRequired
# clear the modifier_dict so that sympy doesn't change variable names that end if bar, prime, cal, etc.
modifier_dict.clear();
@@ -87,6 +101,7 @@ class ImplicitParameter(TypedDict):
name: str
units: str
dimensions: list[float]
+ original_value: str
si_value: str
units_valid: bool
@@ -143,6 +158,8 @@ class FunctionUnitsQuery(TypedDict):
isFunction: Literal[False]
isUnitsQuery: Literal[True]
isRange: Literal[False]
+ isCodeFunctionQuery: Literal[False]
+ isCodeFunctionRawQuery: Literal[False]
index: int # added in Python, not pressent in json
expression: Expr # added in Python, not pressent in json
@@ -185,6 +202,8 @@ class FunctionArgumentQuery(TypedDict):
isFunction: Literal[False]
isUnitsQuery: Literal[False]
isRange: Literal[False]
+ isCodeFunctionQuery: Literal[False]
+ isCodeFunctionRawQuery: Literal[False]
index: int # added in Python, not pressent in json
expression: Expr # added in Python, not pressent in json
@@ -235,9 +254,13 @@ class BaseQueryStatement(QueryAssignmentCommon):
class QueryStatement(BaseQueryStatement):
isRange: Literal[False]
+ isCodeFunctionQuery: Literal[False]
+ isCodeFunctionRawQuery: Literal[False]
class RangeQueryStatement(BaseQueryStatement):
isRange: Literal[True]
+ isCodeFunctionQuery: Literal[False]
+ isCodeFunctionRawQuery: Literal[False]
cellNum: int
numPoints: int
freeParameter: str
@@ -249,9 +272,27 @@ class RangeQueryStatement(BaseQueryStatement):
input_units: str
outputName: str
+class CodeFunctionRawQuery(BaseQueryStatement):
+ isRange: Literal[False]
+ isCodeFunctionQuery: Literal[False]
+ isCodeFunctionRawQuery: Literal[True]
+
+class CodeFunctionQueryStatement(BaseQueryStatement):
+ isRange: Literal[False]
+ isCodeFunctionQuery: Literal[True]
+ isCodeFunctionRawQuery: Literal[False]
+ functionName: str
+ parameterNames: list[str]
+ parameterValues: list[str]
+ parameterUnits: list[str]
+ generateCode: bool
+ codeFunctionRawQuery: CodeFunctionRawQuery
+
class EqualityUnitsQueryStatement(QueryAssignmentCommon):
type: Literal["query"]
isRange: Literal[False]
+ isCodeFunctionQuery: Literal[False]
+ isCodeFunctionRawQuery: Literal[False]
isExponent: Literal[False]
isFunctionArgument: Literal[False]
isFunction: Literal[False]
@@ -268,6 +309,8 @@ class EqualityStatement(QueryAssignmentCommon):
isFunction: Literal[False]
isFromPlotCell: Literal[False]
isRange: Literal[False]
+ isCodeFunctionQuery: Literal[False]
+ isCodeFunctionRawQuery: Literal[False]
equationIndex: int
equalityUnitsQueries: list[EqualityUnitsQueryStatement]
@@ -298,19 +341,22 @@ class LocalSusbstitutionStatement(TypedDict):
isExponent: Literal[False]
index: int
-InputStatement = AssignmentStatement | QueryStatement | RangeQueryStatement | BlankStatement
+InputStatement = AssignmentStatement | QueryStatement | RangeQueryStatement | BlankStatement | CodeFunctionQueryStatement
InputAndSystemStatement = InputStatement | EqualityUnitsQueryStatement | GuessAssignmentStatement | \
SystemSolutionAssignmentStatement
Statement = InputStatement | Exponent | UserFunction | UserFunctionRange | FunctionUnitsQuery | \
FunctionArgumentQuery | FunctionArgumentAssignment | \
SystemSolutionAssignmentStatement | LocalSusbstitutionStatement | \
- GuessAssignmentStatement | EqualityUnitsQueryStatement
+ GuessAssignmentStatement | EqualityUnitsQueryStatement | CodeFunctionRawQuery
SystemDefinition = ExactSystemDefinition | NumericalSystemDefinition
class StatementsAndSystems(TypedDict):
statements: list[InputStatement]
systemDefinitions: list[SystemDefinition]
+def is_code_function_query_statement(statement: InputAndSystemStatement) -> TypeGuard[CodeFunctionQueryStatement]:
+ return statement.get("isCodeFunctionQuery", False)
+
# The following types are created in Python and are returned as json results to TypeScript
class Result(TypedDict):
value: str
@@ -320,6 +366,7 @@ class Result(TypedDict):
numeric: bool
real: bool
finite: bool
+ generatedCode: NotRequired[str]
class FiniteImagResult(TypedDict):
value: str
@@ -331,6 +378,18 @@ class FiniteImagResult(TypedDict):
numeric: Literal[True]
real: Literal[False]
finite: Literal[True]
+ generatedCode: NotRequired[str]
+
+class MatrixResult(TypedDict):
+ matrixResult: Literal[True]
+ results: list[list[Result | FiniteImagResult]]
+ generatedCode: NotRequired[str]
+
+def is_not_matrix_result(result: Result | FiniteImagResult | MatrixResult) -> TypeGuard[Result | FiniteImagResult]:
+ return not result.get("matrixResult", False)
+
+def is_matrix(expression: Expr | Matrix) -> TypeGuard[Matrix]:
+ return isinstance(expression, MatrixBase)
class PlotData(TypedDict):
numericOutput: bool
@@ -359,7 +418,7 @@ class SystemResult(TypedDict):
class Results(TypedDict):
error: None | str
- results: list[Result | FiniteImagResult | list[PlotResult]]
+ results: list[Result | FiniteImagResult | MatrixResult | list[PlotResult]]
systemResults: list[SystemResult]
# The following types are created in Python and don't exist in the TypeScript code
@@ -378,6 +437,8 @@ class CombinedExpressionNoRange(TypedDict):
expression: Expr
exponents: list[Exponent | ExponentName]
isRange: Literal[False]
+ isCodeFunctionQuery: bool
+ isCodeFunctionRawQuery: bool
isFunctionArgument: bool
isUnitsQuery: bool
isEqualityUnitsQuery: bool
@@ -389,6 +450,8 @@ class CombinedExpressionRange(TypedDict):
expression: Expr
exponents: list[Exponent | ExponentName]
isRange: Literal[True]
+ isCodeFunctionQuery: Literal[False]
+ isCodeFunctionRawQuery: Literal[False]
isFunctionArgument: bool
isUnitsQuery: bool
isEqualityUnitsQuery: bool
@@ -563,31 +626,32 @@ def custom_latex(expression: Expr) -> str:
return result_latex
+def walk_tree(grandparent_func, parent_func, expr) -> Expr:
-def walk_tree(grandparent_func, parent_func, expr):
- if (parent_func is Mul or parent_func is Add) and expr.is_negative:
- mult_factor = -1
- else:
- mult_factor = 1
+ if is_matrix(expr):
+ rows = []
+ for i in range(expr.rows):
+ row = []
+ rows.append(row)
+ for j in range(expr.cols):
+ row.append(walk_tree(parent_func, Matrix, expr[i,j]))
- if len(expr.args) > 0:
- new_args = (walk_tree(parent_func, expr.func, arg) for arg in expr.args)
- else:
- return mult_factor*expr
+ return cast(Expr, Matrix(rows))
+
+ if len(expr.args) == 0:
+ if parent_func is not Pow and parent_func is not Inverse and expr.is_negative:
+ return -1*expr
+ else:
+ return expr
- return mult_factor*expr.func(*new_args)
+ new_args = (walk_tree(parent_func, expr.func, arg) for arg in expr.args)
+
+ return expr.func(*new_args)
-def subtraction_to_addition(expression: Expr) -> Expr:
+def subtraction_to_addition(expression: Expr | Matrix) -> Expr:
return walk_tree("root", "root", expression)
-def replace_placeholders_in_args(dim_func):
- def new_func(*args):
- return dim_func( *(replace_placeholder_funcs_with_dim_funcs(arg) for arg in args) )
-
- return new_func
-
-@replace_placeholders_in_args
def ensure_dims_all_compatible(*args):
if args[0].is_zero:
if all(arg.is_zero for arg in args):
@@ -604,40 +668,87 @@ def ensure_dims_all_compatible(*args):
if all(dimsys_SI.get_dimensional_dependencies(arg) == first_arg_dims for arg in args[1:]):
return first_arg
- raise TypeError
+ raise TypeError('All input arguments to function need to have compatible units')
-@replace_placeholders_in_args
def ensure_dims_all_compatible_piecewise(*args):
# Need to make sure first element in tuples passed to Piecewise all have compatible units
# The second element of the tuples has already been checked by And, StrictLessThan, etc.
return ensure_dims_all_compatible(*[arg[0] for arg in args])
-@replace_placeholders_in_args
def ensure_unitless_in_angle_out(arg):
if dimsys_SI.get_dimensional_dependencies(arg) == {}:
return angle
else:
- raise TypeError
+ raise TypeError('Unitless input argument required for function')
-@replace_placeholders_in_args
def ensure_any_unit_in_angle_out(arg):
# ensure input arg units make sense (will raise if inconsistent)
dimsys_SI.get_dimensional_dependencies(arg)
return angle
-@replace_placeholders_in_args
def ensure_any_unit_in_same_out(arg):
# ensure input arg units make sense (will raise if inconsistent)
dimsys_SI.get_dimensional_dependencies(arg)
return arg
+def ensure_inverse_dims(arg):
+ if not is_matrix(arg):
+ return arg**-1
+ else:
+ rows = []
+ column_dims = {}
+ for i in range(arg.rows):
+ row = []
+ rows.append(row)
+ for j in range(arg.cols):
+ row.append(cast(Expr, arg[j,i])**-1)
+ column_dims.setdefault(j, []).append(dimsys_SI.get_dimensional_dependencies(arg[i,j]))
+
+ column_checks = []
+ for _, values in column_dims.items():
+ column_checks.append(all([value == values[0] for value in values[1:]]))
+
+ if not all(column_checks):
+ raise TypeError('Dimensions not consistent for matrix inverse')
+
+ return Matrix(rows)
+
+def custom_transpose(arg):
+ return arg.T
+
+def custom_determinant(arg):
+ return arg.det()
+
+def custom_matmul(exp1: Expr, exp2: Expr):
+ if is_matrix(exp1) and is_matrix(exp2) and \
+ (((exp1.rows == 3 and exp1.cols == 1) and (exp2.rows == 3 and exp2.cols == 1)) or \
+ ((exp1.rows == 1 and exp1.cols == 3) and (exp2.rows == 1 and exp2.cols == 3))):
+ return exp1.cross(exp2)
+ else:
+ return MatMul(exp1, exp2)
class PlaceholderFunction(TypedDict):
dim_func: Callable
sympy_func: object
+def UniversalInverse(expression: Expr) -> Expr:
+ return expression**-1
+
+def IndexMatrix(expression: Expr, i: Expr, j: Expr) -> Expr:
+ for subscript in cast(list[ExprWithAssumptions], (i,j)):
+ if not (subscript.is_real and subscript.is_finite and subscript.is_integer and cast(int, subscript) >= 0):
+ raise Exception("Matrix indices must evaluate to a finite real integer and be greater than 0")
+
+ return cast(Expr, cast(Matrix, expression)[i, j])
+
+def custom_norm(expression: Matrix):
+ return expression.norm()
+
+def custom_dot(exp1: Matrix, exp2: Matrix):
+ return exp1.dot(exp2)
+
placeholder_map: dict[Function, PlaceholderFunction] = {
Function('_StrictLessThan') : {"dim_func": ensure_dims_all_compatible, "sympy_func": StrictLessThan},
Function('_LessThan') : {"dim_func": ensure_dims_all_compatible, "sympy_func": LessThan},
@@ -657,7 +768,15 @@ class PlaceholderFunction(TypedDict):
Function('_conjugate') : {"dim_func": ensure_any_unit_in_same_out, "sympy_func": conjugate},
Function('_Max') : {"dim_func": ensure_dims_all_compatible, "sympy_func": Max},
Function('_Min') : {"dim_func": ensure_dims_all_compatible, "sympy_func": Min},
- Function('_Abs') : {"dim_func": ensure_any_unit_in_same_out, "sympy_func": Abs}
+ Function('_Abs') : {"dim_func": ensure_any_unit_in_same_out, "sympy_func": Abs},
+ Function('_Inverse') : {"dim_func": ensure_inverse_dims, "sympy_func": UniversalInverse},
+ Function('_Transpose') : {"dim_func": custom_transpose, "sympy_func": custom_transpose},
+ Function('_Determinant') : {"dim_func": custom_determinant, "sympy_func": custom_determinant},
+ Function('_MatMul') : {"dim_func": custom_matmul, "sympy_func": custom_matmul},
+ Function('_IndexMatrix') : {"dim_func": IndexMatrix, "sympy_func": IndexMatrix},
+ Function('_Eq') : {"dim_func": Eq, "sympy_func": Eq},
+ Function('_norm') : {"dim_func": custom_norm, "sympy_func": custom_norm},
+ Function('_dot') : {"dim_func": custom_dot, "sympy_func": custom_dot}
}
placeholder_set = set(placeholder_map.keys())
@@ -674,37 +793,86 @@ def replace_sympy_funcs_with_placeholder_funcs(expression: Expr) -> Expr:
return expression
-def replace_placeholder_funcs(expression: Expr) -> Expr:
- replacements = { value.func for value in expression.atoms(Function) } & placeholder_set
- if len(replacements) > 0:
- for key, value in placeholder_map.items(): # must replace in dictionary order
- if key in replacements:
- expression = cast(Expr, expression.replace(key, value["sympy_func"]))
+def doit_for_dim_func(func):
+ def new_func(expr: Expr, func_key: Literal["dim_func"] | Literal["sympy_func"]) -> Expr:
+ result = func(expr, func_key)
- return expression
+ if func_key == "dim_func":
+ return cast(Expr, result.doit())
+ else:
+ return result
-def replace_placeholder_funcs_with_dim_funcs(expression: Expr):
- replacements = { value.func for value in expression.atoms(Function) } & placeholder_set
- if len(replacements) > 0:
- for key in replacements:
- expression = cast(Expr, expression.replace(key, placeholder_map[key]["dim_func"]))
+ return new_func
- return expression
+@doit_for_dim_func
+def replace_placeholder_funcs(expr: Expr, func_key: Literal["dim_func"] | Literal["sympy_func"]) -> Expr:
+ if is_matrix(expr):
+ rows = []
+ for i in range(expr.rows):
+ row = []
+ rows.append(row)
+ for j in range(expr.cols):
+ row.append(replace_placeholder_funcs(cast(Expr, expr[i,j]), func_key) )
+
+ return cast(Expr, Matrix(rows))
+
+ if len(expr.args) == 0:
+ return expr
+
+ if expr.func in placeholder_set:
+ return cast(Expr, cast(Callable, placeholder_map[expr.func][func_key])(*(replace_placeholder_funcs(cast(Expr, arg), func_key) for arg in expr.args)))
+ elif func_key == "dim_func" and (expr.func is Mul or expr.func is MatMul):
+ processed_args = [replace_placeholder_funcs(cast(Expr, arg), func_key) for arg in expr.args]
+ matrix_args = []
+ scalar_args = []
+ for arg in processed_args:
+ if is_matrix(cast(Expr, arg)):
+ matrix_args.append(arg)
+ else:
+ scalar_args.append(arg)
+
+ if len(matrix_args) > 0 and len(scalar_args) > 0:
+ first_matrix = matrix_args[0]
+ scalar = prod(scalar_args)
+ new_rows = []
+ for i in range(first_matrix.rows):
+ new_row = []
+ new_rows.append(new_row)
+ for j in range(first_matrix.cols):
+ new_row.append(scalar*first_matrix[i,j])
+
+ matrix_args[0] = Matrix(new_rows)
+
+ return cast(Expr, expr.func(*matrix_args))
+ else:
+ return cast(Expr, expr.func(*processed_args))
+ else:
+ return cast(Expr, expr.func(*(replace_placeholder_funcs(cast(Expr, arg), func_key) for arg in expr.args)))
-def dimensional_analysis(parameter_subs: dict[Symbol, Expr], expression: Expr):
+def get_dimensional_analysis_expression(parameter_subs: dict[Symbol, Expr], expression: Expr) -> tuple[Expr | None, Exception | None]:
# need to remove any subtractions or unary negative since this may
# lead to unintentional cancellation during the parameter substituation process
positive_only_expression = subtraction_to_addition(expression)
+ expression_with_parameter_subs = cast(Expr, positive_only_expression.xreplace(parameter_subs))
- final_expression = cast(Expr, positive_only_expression.xreplace(parameter_subs))
+ error = None
+ final_expression = None
try:
- # Now that dims have been substituted in, can process functions that require special handling
- final_expression = replace_placeholder_funcs_with_dim_funcs(final_expression)
+ final_expression = replace_placeholder_funcs(expression_with_parameter_subs, "dim_func")
+ except Exception as e:
+ error = e
+
+ return final_expression, error
+
+def dimensional_analysis(dimensional_analysis_expression: Expr | None, dim_sub_error: Exception | None):
+ try:
+ if dim_sub_error is not None:
+ raise dim_sub_error
# Finally, evaluate dimensions for complete expression
result, result_latex = get_mathjs_units(
- cast(dict[Dimension, float], dimsys_SI.get_dimensional_dependencies(final_expression))
+ cast(dict[Dimension, float], dimsys_SI.get_dimensional_dependencies(dimensional_analysis_expression))
)
except TypeError as e:
print(f"Dimension Error: {e}")
@@ -811,6 +979,10 @@ def expand_with_sub_statements(statements: list[InputAndSystemStatement]):
current_sub = function_subs.setdefault(local_sub["function"], {})
current_sub[symbols(local_sub["parameter"])] = symbols(local_sub["argument"])
+ if is_code_function_query_statement(statement) and statement["generateCode"]:
+ new_statements.append(statement["codeFunctionRawQuery"])
+
+
new_statements.extend(local_sub_statements.values())
return new_statements
@@ -879,9 +1051,9 @@ def solve_system(statements: list[EqualityStatement], variables: list[str]):
equality = cast(Expr, statement["expression"]).subs(
{exponent["name"]:exponent["expression"] for exponent in cast(list[Exponent], statement["exponents"])})
- equality = replace_placeholder_funcs(cast(Expr, equality))
+ equality = replace_placeholder_funcs(cast(Expr, equality), "sympy_func")
- system.append(equality)
+ system.append(cast(Expr, equality.doit()))
# remove implicit parameters before solving
@@ -961,8 +1133,8 @@ def solve_system_numerical(statements: list[EqualityStatement], variables: list[
equality = cast(Expr, statement["expression"]).subs(
{exponent["name"]: exponent["expression"] for exponent in cast(list[Exponent], statement["exponents"])})
equality = equality.subs(parameter_subs)
- equality = replace_placeholder_funcs(cast(Expr, equality))
- system.append(equality)
+ equality = replace_placeholder_funcs(cast(Expr, equality), "sympy_func")
+ system.append(cast(Expr, equality.doit()))
new_statements.extend(statement["equalityUnitsQueries"])
# remove implicit parameters before solving
@@ -1019,9 +1191,9 @@ def solve_system_numerical(statements: list[EqualityStatement], variables: list[
def get_range_result(range_result: CombinedExpressionRange,
- range_dependencies: dict[str, Result | FiniteImagResult],
+ range_dependencies: dict[str, Result | FiniteImagResult | MatrixResult],
num_points: int) -> PlotResult:
-
+
# check that upper and lower limits of range input are real and finite
# and that units match
lower_limit_result = range_dependencies[range_result["lowerLimitArgument"]]
@@ -1030,6 +1202,19 @@ def get_range_result(range_result: CombinedExpressionRange,
upper_limit_inclusive = range_result["upperLimitInclusive"]
units_result = range_dependencies[range_result["unitsQueryFunction"]]
+ if ( (not is_not_matrix_result(lower_limit_result)) or
+ (not is_not_matrix_result(upper_limit_result)) ):
+ return {"plot": True, "data": [{"numericOutput": False, "numericInput": False,
+ "limitsUnitsMatch": True, "input": [], "output": [], "inputReversed": False,
+ "inputUnits": "", "inputUnitsLatex": "", "inputName": "", "inputNameLatex": "",
+ "outputUnits": "", "outputUnitsLatex": "", "outputName": "", "outputNameLatex": ""}] }
+
+ if not is_not_matrix_result(units_result):
+ return {"plot": True, "data": [{"numericOutput": False, "numericInput": True,
+ "limitsUnitsMatch": True, "input": [], "output": [], "inputReversed": False,
+ "inputUnits": "", "inputUnitsLatex": "", "inputName": "", "inputNameLatex": "",
+ "outputUnits": "", "outputUnitsLatex": "", "outputName": "", "outputNameLatex": ""}] }
+
if not all(map(lambda value: value["numeric"] and value["real"] and value["finite"],
[lower_limit_result, upper_limit_result])):
return {"plot": True, "data": [{"numericOutput": False, "numericInput": False,
@@ -1098,9 +1283,9 @@ def get_range_result(range_result: CombinedExpressionRange,
"outputNameLatex": custom_latex(sympify(range_result["outputName"])) }] }
-def combine_plot_results(results: list[Result | FiniteImagResult | PlotResult],
+def combine_plot_results(results: list[Result | FiniteImagResult | PlotResult | MatrixResult],
statement_plot_info: list[StatementPlotInfo]):
- final_results: list[Result | FiniteImagResult | list[PlotResult]] = []
+ final_results: list[Result | FiniteImagResult | list[PlotResult] | MatrixResult] = []
plot_cell_id = "unassigned"
for index, result in enumerate(results):
@@ -1126,7 +1311,77 @@ def subs_wrapper(expression: Expr, subs: dict[str, str] | dict[str, Expr | float
return cast(Expr, expression.xreplace(subs))
-def evaluate_statements(statements: list[InputAndSystemStatement]) -> tuple[list[Result | FiniteImagResult | list[PlotResult]], dict[int,bool]]:
+def get_evaluated_expression(expression: Expr, parameter_subs: dict[Symbol, Expr]) -> tuple[ExprWithAssumptions, str | list[list[str]]]:
+ expression = cast(Expr, expression.xreplace(parameter_subs))
+ expression = replace_placeholder_funcs(expression, "sympy_func")
+ expression = cast(Expr, expression.doit())
+ if not is_matrix(expression):
+ symbolic_expression = custom_latex(cancel(expression))
+ else:
+ symbolic_expression = []
+ for i in range(expression.rows):
+ row = []
+ symbolic_expression.append(row)
+ for j in range(expression.cols):
+ row.append(custom_latex(cancel(expression[i,j])))
+
+ evaluated_expression = cast(ExprWithAssumptions, expression.evalf(PRECISION))
+ return evaluated_expression, symbolic_expression
+
+def get_result(evaluated_expression: ExprWithAssumptions, dimensional_analysis_expression: Expr | None,
+ dim_sub_error: Exception | None, symbolic_expression: str,
+ exponents: list[Exponent | ExponentName],
+ isRange: bool, exponent_dimensionless: dict[str, bool],
+ ) -> Result | FiniteImagResult:
+
+ if not all([exponent_dimensionless[local_item["name"]] for local_item in exponents]):
+ dim = "Exponent Not Dimensionless"
+ dim_latex = "Exponent Not Dimensionless"
+ elif isRange:
+ # a separate unitsQuery function is used for plots, no need to perform dimensional analysis before subs are made
+ dim = ""
+ dim_latex = ""
+ else:
+ dim, dim_latex = dimensional_analysis(dimensional_analysis_expression, dim_sub_error)
+
+ if evaluated_expression.is_number:
+ if evaluated_expression.is_real and evaluated_expression.is_finite:
+ result = Result(value=str(evaluated_expression), symbolicValue=symbolic_expression,
+ numeric=True, units=dim, unitsLatex=dim_latex, real=True, finite=True)
+ elif not evaluated_expression.is_finite:
+ result = Result(value=custom_latex(evaluated_expression),
+ symbolicValue=symbolic_expression,
+ numeric=True, units=dim, unitsLatex=dim_latex,
+ real=cast(bool, evaluated_expression.is_real),
+ finite=False)
+ else:
+ result = FiniteImagResult(value=str(evaluated_expression).replace('I', 'i').replace('*', ''),
+ symbolicValue=symbolic_expression,
+ numeric=True, units=dim, unitsLatex=dim_latex, real=False,
+ realPart=str(re(evaluated_expression)),
+ imagPart=str(im(evaluated_expression)),
+ finite=evaluated_expression.is_finite)
+ else:
+ result = Result(value=custom_latex(evaluated_expression),
+ symbolicValue=symbolic_expression,
+ numeric=False, units="", unitsLatex="",
+ real=False, finite=False)
+
+ return result
+
+
+def get_hashable_matrix_units(matrix_result: MatrixResult) -> tuple[tuple[str]]:
+ rows: list[tuple[str]] = []
+ for result_row in matrix_result["results"]:
+ row = []
+ for result in result_row:
+ row.append(result["units"])
+
+ rows.append(tuple(row))
+
+ return tuple(rows)
+
+def evaluate_statements(statements: list[InputAndSystemStatement]) -> tuple[list[Result | FiniteImagResult | list[PlotResult] | MatrixResult], dict[int,bool]]:
num_statements = len(statements)
if num_statements == 0:
@@ -1225,15 +1480,18 @@ def evaluate_statements(statements: list[InputAndSystemStatement]) -> tuple[list
final_expression = subs_wrapper(final_expression, exponent_subs)
final_expression = subs_wrapper(final_expression, exponent_subs)
- final_expression = cast(Expr, final_expression.doit()) #evaluate integrals and derivatives
- dim, _ = dimensional_analysis(dimensional_analysis_subs, final_expression)
+ final_expression = cast(Expr, final_expression.doit())
+ dimensional_analysis_expression, dim_sub_error = get_dimensional_analysis_expression(dimensional_analysis_subs, final_expression)
+ dim, _ = dimensional_analysis(dimensional_analysis_expression, dim_sub_error)
if dim == "":
exponent_dimensionless[exponent_name+current_function_name] = True
else:
exponent_dimensionless[exponent_name+current_function_name] = False
- final_expression: Expr = replace_placeholder_funcs(final_expression)
+
+ final_expression = cast(Expr, cast(Expr, final_expression).xreplace(parameter_subs))
+ final_expression = replace_placeholder_funcs(final_expression, "sympy_func")
- exponent_subs[symbols(exponent_name+current_function_name)] = cast(Expr, final_expression.xreplace(parameter_subs))
+ exponent_subs[symbols(exponent_name+current_function_name)] = final_expression
elif is_function:
while(True):
@@ -1256,6 +1514,8 @@ def evaluate_statements(statements: list[InputAndSystemStatement]) -> tuple[list
"expression": subs_wrapper(final_expression, exponent_subs),
"exponents": dependency_exponents,
"isRange": False,
+ "isCodeFunctionQuery": statement["isCodeFunctionQuery"] and statement.get("generateCode", False),
+ "isCodeFunctionRawQuery": statement["isCodeFunctionRawQuery"],
"isFunctionArgument": statement["isFunctionArgument"],
"isUnitsQuery": statement.get("isUnitsQuery", False),
"isEqualityUnitsQuery": statement.get("isEqualityUnitsQuery", False),
@@ -1267,6 +1527,8 @@ def evaluate_statements(statements: list[InputAndSystemStatement]) -> tuple[list
"expression": subs_wrapper(final_expression, exponent_subs),
"exponents": dependency_exponents,
"isRange": True,
+ "isCodeFunctionQuery": False,
+ "isCodeFunctionRawQuery": False,
"isFunctionArgument": statement["isFunctionArgument"],
"isUnitsQuery": statement.get("isUnitsQuery", False),
"isEqualityUnitsQuery": statement.get("isEqualityUnitsQuery", False),
@@ -1285,75 +1547,94 @@ def evaluate_statements(statements: list[InputAndSystemStatement]) -> tuple[list
if statement["isFunctionArgument"] is True:
current_combined_expression["name"] = statement["name"]
- if current_combined_expression["isUnitsQuery"]:
+ if current_combined_expression["isUnitsQuery"] or \
+ current_combined_expression["isCodeFunctionRawQuery"]:
current_combined_expression["name"] = statement["sympy"]
+ if current_combined_expression["isCodeFunctionQuery"]:
+ current_combined_expression["name"] = statement.get("functionName", "")
+
combined_expressions.append(current_combined_expression)
- range_dependencies: dict[str, Result | FiniteImagResult] = {}
+ range_dependencies: dict[str, Result | FiniteImagResult | MatrixResult] = {}
range_results: dict[int, CombinedExpressionRange] = {}
- numerical_system_cell_units: dict[int, list[str]] = {}
+ numerical_system_cell_units: dict[int, list[str | tuple[tuple[str]]] ] = {}
+
+ code_func_raw_results: dict[str, CombinedExpressionNoRange] = {}
+ code_func_results: list[tuple[str, Result | FiniteImagResult | MatrixResult]] = []
+
largest_index = max( [statement["index"] for statement in expanded_statements])
- results: list[Result | FiniteImagResult] = [{"value": "", "symbolicValue": "", "units": "",
- "unitsLatex": "", "numeric": False,
- "real": False, "finite": False}]*(largest_index+1)
+ results: list[Result | FiniteImagResult | MatrixResult | PlotResult] = [{"value": "", "symbolicValue": "", "units": "",
+ "unitsLatex": "", "numeric": False,
+ "real": False, "finite": False}]*(largest_index+1)
+
for item in combined_expressions:
index = item["index"]
if not is_not_blank_combined_epxression(item):
if index < len(results):
results[index] = Result(value="", symbolicValue="", units="", unitsLatex="", numeric=False, real=False, finite=False)
else:
- exponents = item["exponents"]
- expression = item["expression"]
- expression = cast(Expr, expression.doit()) #evaluate integrals and derivatives
- if not all([exponent_dimensionless[local_item["name"]] for local_item in exponents]):
- dim = "Exponent Not Dimensionless"
- dim_latex = "Exponent Not Dimensionless"
- elif item["isRange"]:
- # a separate unitsQuery function is used for plots, no need to perform dimensional analysis before subs are made
- dim = ""
- dim_latex = ""
- else:
- dim, dim_latex = dimensional_analysis(dimensional_analysis_subs, expression)
-
- expression = replace_placeholder_funcs(expression)
- expression = cast(Expr, expression.xreplace(parameter_subs))
- evaluated_expression = cast(ExprWithAssumptions, expression.evalf(PRECISION))
- symbolic_expression = custom_latex(cancel(expression))
- if evaluated_expression.is_number:
- if evaluated_expression.is_real and evaluated_expression.is_finite:
- results[index] = Result(value=str(evaluated_expression), symbolicValue=symbolic_expression,
- numeric=True, units=dim, unitsLatex=dim_latex, real=True, finite=True)
- elif not evaluated_expression.is_finite:
- results[index] = Result(value=custom_latex(evaluated_expression),
- symbolicValue=symbolic_expression,
- numeric=True, units=dim, unitsLatex=dim_latex,
- real=cast(bool, evaluated_expression.is_real),
- finite=False)
- else:
- results[index] = FiniteImagResult(value=str(evaluated_expression).replace('I', 'i').replace('*', ''),
- symbolicValue=symbolic_expression,
- numeric=True, units=dim, unitsLatex=dim_latex, real=False,
- realPart=str(re(evaluated_expression)),
- imagPart=str(im(evaluated_expression)),
- finite=evaluated_expression.is_finite)
+ expression = cast(Expr, item["expression"].doit())
+
+ evaluated_expression, symbolic_expression = get_evaluated_expression(expression, parameter_subs)
+ dimensional_analysis_expression, dim_sub_error = get_dimensional_analysis_expression(dimensional_analysis_subs, expression)
+
+ if not is_matrix(evaluated_expression):
+ results[index] = get_result(evaluated_expression, dimensional_analysis_expression,
+ dim_sub_error, cast(str, symbolic_expression),
+ item["exponents"], item["isRange"],
+ exponent_dimensionless)
+
+ elif is_matrix(evaluated_expression) and (dimensional_analysis_expression is None or \
+ is_matrix(dimensional_analysis_expression)) and isinstance(symbolic_expression, list) :
+ matrix_results = []
+ for i in range(evaluated_expression.rows):
+ current_row = []
+ matrix_results.append(current_row)
+ for j in range(evaluated_expression.cols):
+ if dimensional_analysis_expression is None:
+ current_dimensional_analysis_expression = None
+ else:
+ current_dimensional_analysis_expression = dimensional_analysis_expression[i,j]
+
+ current_result = get_result(cast(ExprWithAssumptions, evaluated_expression[i,j]),
+ cast(Expr, current_dimensional_analysis_expression),
+ dim_sub_error, symbolic_expression[i][j], item["exponents"],
+ item["isRange"], exponent_dimensionless)
+ current_row.append(current_result)
+
+
+ results[index] = MatrixResult(matrixResult=True, results=matrix_results)
+
else:
- results[index] = Result(value=custom_latex(evaluated_expression),
- symbolicValue=symbolic_expression,
- numeric=False, units="", unitsLatex="",
- real=False, finite=False)
+ raise Exception("Dimension or symbolic result not a Matrix for an evaluated expression that is a Matrix")
if item["isRange"] is True:
current_result = item
- current_result["expression"] = evaluated_expression
+ current_result["expression"] = cast(Expr, evaluated_expression)
range_results[index] = current_result
if item["isFunctionArgument"] or item["isUnitsQuery"]:
- range_dependencies[item["name"]] = results[index]
+ range_dependencies[item["name"]] = cast(Result | FiniteImagResult | MatrixResult, results[index])
+
+ if item["isCodeFunctionRawQuery"]:
+ code_func_raw_results[item["name"]] = cast(CombinedExpressionNoRange, item)
+
+ if item["isCodeFunctionRawQuery"]:
+ current_result = item
+ current_result["expression"] = cast(Expr, evaluated_expression)
+ code_func_raw_results[item["name"]] = cast(CombinedExpressionNoRange, current_result)
+
+ if item["isCodeFunctionQuery"]:
+ code_func_results.append(( item["name"], cast(Result | FiniteImagResult | MatrixResult, results[index]) ))
if item["isEqualityUnitsQuery"]:
units_list = numerical_system_cell_units.setdefault(item["equationIndex"], [])
- units_list.append(results[index]["units"])
+ current_result = cast(Result | FiniteImagResult | MatrixResult, results[index])
+ if is_not_matrix_result(current_result):
+ units_list.append(current_result["units"])
+ else:
+ units_list.append(get_hashable_matrix_units(cast(MatrixResult, current_result)))
numerical_system_cell_unit_errors: dict[int, bool] = {}
for equation_index, units in numerical_system_cell_units.items():
@@ -1368,17 +1649,28 @@ def evaluate_statements(statements: list[InputAndSystemStatement]) -> tuple[list
error = True
numerical_system_cell_unit_errors[equation_index] = error
- results_with_ranges: list[Result | FiniteImagResult | PlotResult] = cast(list[Result | FiniteImagResult | PlotResult], results)
+ results_with_ranges: list[Result | FiniteImagResult | PlotResult | MatrixResult] = results
for index,range_result in range_results.items():
results_with_ranges[index] = get_range_result(range_result, range_dependencies, range_result["numPoints"])
+ for (name, result) in code_func_results:
+ try:
+ generatedCode = NumPyPrinter().doprint(code_func_raw_results[name]["expression"])
+ except Exception as err:
+ generatedCode = f"# Error generating code: {type(err).__name__}, {err}"
+
+ if not isinstance(generatedCode, str):
+ generatedCode = f"# Error generating code, string not returned from NumPyPrinter call"
+
+ result["generatedCode"] = generatedCode
+
return combine_plot_results(results_with_ranges[:num_statements], statement_plot_info), numerical_system_cell_unit_errors
def get_query_values(statements: list[InputAndSystemStatement]):
error: None | str = None
- results: list[Result | FiniteImagResult | list[PlotResult]] = []
+ results: list[Result | FiniteImagResult | list[PlotResult] | MatrixResult] = []
numerical_system_cell_errors: dict[int, bool] = {}
try:
results, numerical_system_cell_errors = evaluate_statements(statements)
@@ -1514,7 +1806,7 @@ def solve_sheet(statements_and_systems):
# now solve the sheet
error: str | None
- results: list[Result | FiniteImagResult | list[PlotResult]]
+ results: list[Result | FiniteImagResult | list[PlotResult] | MatrixResult]
numerical_system_cell_errors: dict[int, bool]
error, results, numerical_system_cell_errors = get_query_values(statements)
@@ -1544,7 +1836,7 @@ class FuncContainer(object):
if PROFILE:
def solve_sheet_profile(input):
values = {"input": input}
- cProfile.runctx('output = solve_sheet(input)', globals(), values, None, sort="cumtime")
+ cProfile.runctx('output = solve_sheet(input)', globals(), values, None, sort="cumtime") # type: ignore[possibly-undefined]
return values["output"]
diff --git a/public/pyodide/repodata.json b/public/pyodide/repodata.json
index 65caec96..f2f40670 100644
--- a/public/pyodide/repodata.json
+++ b/public/pyodide/repodata.json
@@ -1 +1 @@
-{"info": {"arch": "wasm32", "platform": "emscripten_3_1_32", "version": "0.23.0", "python": "3.11.2"}, "packages": {"asciitree": {"name": "asciitree", "version": "0.3.3", "file_name": "asciitree-0.3.3-py3-none-any.whl", "install_dir": "site", "sha256": "3227e4d3cea31fd6c9d14cc405ab9addad5564f11cc1e5c5adf53dbb1355f98c", "package_type": "package", "imports": ["asciitree"], "depends": []}, "astropy": {"name": "astropy", "version": "5.2.2", "file_name": "astropy-5.2.2-cp311-cp311-emscripten_3_1_32_wasm32.whl", "install_dir": "site", "sha256": "d8afca8f58c08e3f5f12730cc69176f68fb5b3270251e2465209cb4f65eef888", "package_type": "package", "imports": ["astropy"], "depends": ["distutils", "packaging", "numpy", "pyerfa", "pyyaml"]}, "atomicwrites": {"name": "atomicwrites", "version": "1.4.1", "file_name": "atomicwrites-1.4.1-py2.py3-none-any.whl", "install_dir": "site", "sha256": "73b0a4f0221e0232ab1113c0602ae54b690c4e805d0e68899e5e59586394ee8d", "package_type": "package", "imports": ["atomicwrites"], "depends": []}, "attrs": {"name": "attrs", "version": "22.2.0", "file_name": "attrs-22.2.0-py3-none-any.whl", "install_dir": "site", "sha256": "87729a89aec4f87e550915ed125610b9484734ca6a59ce5c9c92a084c81e7d77", "package_type": "package", "imports": ["attr", "attrs"], "depends": ["six"]}, "autograd": {"name": "autograd", "version": "1.5", "file_name": "autograd-1.5-py3-none-any.whl", "install_dir": "site", "sha256": "aa9dfd568df8cb41f6fe839881ddcb7aa64499aff10e6c9478401b1bb662b1e8", "package_type": "package", "imports": ["autograd"], "depends": ["numpy", "future"], "unvendored_tests": true}, "autograd-tests": {"name": "autograd-tests", "version": "1.5", "depends": ["autograd"], "imports": [], "file_name": "autograd-tests.tar", "install_dir": "site", "sha256": "d59d1445e73d6efba707d6b1d3505fc181eb66b12f540b0143b2956a614f181e"}, "bcrypt": {"name": "bcrypt", "version": "4.0.1", "file_name": "bcrypt-4.0.1-cp311-cp311-emscripten_3_1_32_wasm32.whl", "install_dir": "site", "sha256": "b8591c5c4579e0ee2d58de32402caf09b53b7d76b31240492eb66650fe0911e1", "package_type": "package", "imports": ["bcrypt"], "depends": []}, "beautifulsoup4": {"name": "beautifulsoup4", "version": "4.12.0", "file_name": "beautifulsoup4-4.12.0-py3-none-any.whl", "install_dir": "site", "sha256": "ddef8815476935b88d429b976bef3cc752c690b8fef5ddefebef437d9c4ba85b", "package_type": "package", "imports": ["bs4"], "depends": ["soupsieve"], "unvendored_tests": true}, "beautifulsoup4-tests": {"name": "beautifulsoup4-tests", "version": "4.12.0", "depends": ["beautifulsoup4"], "imports": [], "file_name": "beautifulsoup4-tests.tar", "install_dir": "site", "sha256": "1720a309a4be23ab22e71f36052ab1b1b9b10716f044cead59b08102fe25f143"}, "biopython": {"name": "biopython", "version": "1.81", "file_name": "biopython-1.81-cp311-cp311-emscripten_3_1_32_wasm32.whl", "install_dir": "site", "sha256": "6b3e993bf6fe3e20fc6eab2a3398855c6ca8b252aaac44204c6e47c8be42eeb9", "package_type": "package", "imports": ["Bio", "BioSQL"], "depends": ["numpy"]}, "bitarray": {"name": "bitarray", "version": "2.7.3", "file_name": "bitarray-2.7.3-cp311-cp311-emscripten_3_1_32_wasm32.whl", "install_dir": "site", "sha256": "4bceef37ae7c6dc5040a9025f92cab4a556589392828eee522d9e9a0ce786f9a", "package_type": "package", "imports": ["bitarray"], "depends": [], "unvendored_tests": true}, "bitarray-tests": {"name": "bitarray-tests", "version": "2.7.3", "depends": ["bitarray"], "imports": [], "file_name": "bitarray-tests.tar", "install_dir": "site", "sha256": "6352edf08b5c84ea3f7f52d1cc3ddb1920d8f857a97733449441838d37b10ea3"}, "bleach": {"name": "bleach", "version": "6.0.0", "file_name": "bleach-6.0.0-py3-none-any.whl", "install_dir": "site", "sha256": "29ff5c9c74b623cc2832597568c44a515378225dcc4fdf914742c2cae81ddeb4", "package_type": "package", "imports": ["bleach"], "depends": ["webencodings", "packaging", "six"]}, "bokeh": {"name": "bokeh", "version": "3.1.0", "file_name": "bokeh-3.1.0-py3-none-any.whl", "install_dir": "site", "sha256": "92c4f210bebbff281dd817f677718ce4c6410433565a4322d9392e1c62206f06", "package_type": "package", "imports": ["bokeh"], "depends": ["distutils", "numpy", "jinja2", "pillow", "python-dateutil", "six", "typing-extensions", "pyyaml"]}, "boost-histogram": {"name": "boost-histogram", "version": "1.3.2", "file_name": "boost_histogram-1.3.2-cp311-cp311-emscripten_3_1_32_wasm32.whl", "install_dir": "site", "sha256": "51ffcf2b5a17b45fac68d35f0b1051f4345c26f4872295cb7af21065ef340fff", "package_type": "package", "imports": ["boost_histogram"], "depends": ["numpy"]}, "brotli": {"name": "brotli", "version": "1.0.9", "file_name": "Brotli-1.0.9-cp311-cp311-emscripten_3_1_32_wasm32.whl", "install_dir": "site", "sha256": "229252e20a777e7130620a26e0ec6e8ecabe64801ddcf3ea26a8024c9cfac685", "package_type": "package", "imports": ["brotli"], "depends": []}, "cbor-diag": {"name": "cbor-diag", "version": "1.0.0", "file_name": "cbor_diag-1.0.0-cp311-cp311-emscripten_3_1_32_wasm32.whl", "install_dir": "site", "sha256": "d8d677c6e86fc2f44da5a658a1b93d252872a7f4b7557082966fcd3df19e808b", "package_type": "package", "imports": ["cbor_diag"], "depends": []}, "certifi": {"name": "certifi", "version": "2022.12.7", "file_name": "certifi-2022.12.7-py3-none-any.whl", "install_dir": "site", "sha256": "11f7f10ad7b9cccc6319adfe8d21c79b90460c0847033f6f8f1bb35bb5caac97", "package_type": "package", "imports": ["certifi"], "depends": []}, "cffi": {"name": "cffi", "version": "1.15.1", "file_name": "cffi-1.15.1-cp311-cp311-emscripten_3_1_32_wasm32.whl", "install_dir": "site", "sha256": "c477eb09fe4d6af45675a32dab29e7a35e2901bfbaae77df5d4502ae2007748f", "package_type": "package", "imports": ["cffi"], "depends": ["pycparser"]}, "cffi_example": {"name": "cffi_example", "version": "0.1", "file_name": "cffi_example-0.1-cp311-cp311-emscripten_3_1_32_wasm32.whl", "install_dir": "site", "sha256": "8010c90203e0e05741a79d120b7fa1884244825424b9972231f869c8868c3279", "package_type": "package", "imports": ["cffi_example"], "depends": ["cffi"]}, "cftime": {"name": "cftime", "version": "1.6.2", "file_name": "cftime-1.6.2-cp311-cp311-emscripten_3_1_32_wasm32.whl", "install_dir": "site", "sha256": "e856d5297b107b204e66722010be4146cb37cb292b1637e09cf559e0377d3b3b", "package_type": "package", "imports": ["cftime"], "depends": ["numpy"]}, "clapack": {"name": "CLAPACK", "version": "3.2.1", "file_name": "CLAPACK-3.2.1.zip", "install_dir": "dynlib", "sha256": "783251a92704fd209aea19b65b1ecaa9fa2448abd2295aa94a1652f10677d6f8", "package_type": "shared_library", "imports": [], "shared_library": true, "depends": []}, "click": {"name": "click", "version": "8.1.3", "file_name": "click-8.1.3-py3-none-any.whl", "install_dir": "site", "sha256": "dfc7a1facb7d041286bee09035abfa65eaba138b83ae88bccf7ba31f63995f5b", "package_type": "package", "imports": ["click"], "depends": []}, "cligj": {"name": "cligj", "version": "0.7.2", "file_name": "cligj-0.7.2-py3-none-any.whl", "install_dir": "site", "sha256": "80eb125c1dadde27093bd433a08334b29774fad1140e44c763ef05b9fef24d45", "package_type": "package", "imports": ["cligj"], "depends": ["click"]}, "cloudpickle": {"name": "cloudpickle", "version": "2.2.1", "file_name": "cloudpickle-2.2.1-py3-none-any.whl", "install_dir": "site", "sha256": "305864ce136631891dd0dc831096b7d7b48267189899423324686919bf4a29e8", "package_type": "package", "imports": ["cloudpickle"], "depends": []}, "cmyt": {"name": "cmyt", "version": "1.1.3", "file_name": "cmyt-1.1.3-py3-none-any.whl", "install_dir": "site", "sha256": "40f5bd559e64d51db68c7d5855e87c2edf3065978f38932d264a2a9108dd7143", "package_type": "package", "imports": ["cmyt"], "depends": ["colorspacious", "matplotlib", "more-itertools", "numpy"], "unvendored_tests": true}, "cmyt-tests": {"name": "cmyt-tests", "version": "1.1.3", "depends": ["cmyt"], "imports": [], "file_name": "cmyt-tests.tar", "install_dir": "site", "sha256": "fb6b17e9f2c177ed69a0271944f7ec25156b3e3f820508c1bf11b71997e0063b"}, "colorspacious": {"name": "colorspacious", "version": "1.1.2", "file_name": "colorspacious-1.1.2-py2.py3-none-any.whl", "install_dir": "site", "sha256": "fd832c46b0f32f8ff15e55cf2785b70891eb5e0ae67144d1beb0a6595eee62b0", "package_type": "package", "imports": ["colorspacious"], "depends": ["numpy"]}, "coverage": {"name": "coverage", "version": "7.2.2", "file_name": "coverage-7.2.2-cp311-cp311-emscripten_3_1_32_wasm32.whl", "install_dir": "site", "sha256": "23585fb0c5edac97afe73319428a6f543da656dacf311f365f02a31b43abc5ab", "package_type": "package", "imports": ["coverage"], "depends": ["sqlite3"]}, "cpp-exceptions-test": {"name": "cpp-exceptions-test", "version": "0.1", "file_name": "cpp-exceptions-test-0.1.zip", "install_dir": "dynlib", "sha256": "2a85541ca9a469ae6e1cd00122abf66f2d720204ce02e82f7ed0900ed9841865", "package_type": "shared_library", "imports": [], "shared_library": true, "depends": []}, "cramjam": {"name": "cramjam", "version": "2.6.2", "file_name": "cramjam-2.6.2-cp311-cp311-emscripten_3_1_32_wasm32.whl", "install_dir": "site", "sha256": "38faf6d68ca2aabae9facefdb072b15db0b95d6e1368d6c126f6c8fca02167d1", "package_type": "package", "imports": ["cramjam"], "depends": []}, "cryptography": {"name": "cryptography", "version": "39.0.2", "file_name": "cryptography-39.0.2-cp311-cp311-emscripten_3_1_32_wasm32.whl", "install_dir": "site", "sha256": "d852b266cab3fa3733a1adec0b723e9d058ed840d9bcba725ef77d4638c47b0d", "package_type": "package", "imports": ["cryptography"], "depends": ["openssl", "six", "cffi"]}, "cssselect": {"name": "cssselect", "version": "1.2.0", "file_name": "cssselect-1.2.0-py2.py3-none-any.whl", "install_dir": "site", "sha256": "2ca7f13b13d6be6f32f77e907d2411279e5c6db4e551e98a1862e3760e270f39", "package_type": "package", "imports": ["cssselect"], "depends": []}, "cycler": {"name": "cycler", "version": "0.11.0", "file_name": "cycler-0.11.0-py3-none-any.whl", "install_dir": "site", "sha256": "197c5459b40d620f9d2befbc2023a03657d2738fc8da5d183b911761a3fe66d3", "package_type": "package", "imports": ["cycler"], "depends": ["six"]}, "cytoolz": {"name": "cytoolz", "version": "0.12.1", "file_name": "cytoolz-0.12.1-cp311-cp311-emscripten_3_1_32_wasm32.whl", "install_dir": "site", "sha256": "46805a49766889db98adf5ca21f85f218bc1012f325a4cd56cc625f5a399a16b", "package_type": "package", "imports": ["cytoolz"], "depends": ["nose", "toolz"], "unvendored_tests": true}, "cytoolz-tests": {"name": "cytoolz-tests", "version": "0.12.1", "depends": ["cytoolz"], "imports": [], "file_name": "cytoolz-tests.tar", "install_dir": "site", "sha256": "56270157dcc41f0c787d0a60b39b5e11dde358935ef50a4d09a9933a9988de0b"}, "decorator": {"name": "decorator", "version": "5.1.1", "file_name": "decorator-5.1.1-py3-none-any.whl", "install_dir": "site", "sha256": "b7e51fb9ae0ee80f190e61258b9beff946100a581b0e11662996e19a2a030766", "package_type": "package", "imports": ["decorator"], "depends": []}, "demes": {"name": "demes", "version": "0.2.2", "file_name": "demes-0.2.2-py3-none-any.whl", "install_dir": "site", "sha256": "7d54c163a1980e0451c966d4f0ebab2956292924c2fd2214333f2b62bf039936", "package_type": "package", "imports": ["demes"], "depends": ["attrs", "ruamel.yaml"]}, "distlib": {"name": "distlib", "version": "0.3.6", "file_name": "distlib-0.3.6-py2.py3-none-any.whl", "install_dir": "site", "sha256": "e0189a9a04533d524daebf1732569679928aecbe9b7748276e822debc682334b", "package_type": "package", "imports": ["distlib"], "depends": []}, "distutils": {"name": "distutils", "version": "1.0.0", "file_name": "distutils-1.0.0.zip", "install_dir": "stdlib", "sha256": "a49fe5e5f3572f6f1e2bf798d57ceba89d094c43e5ed7fa3f6be2ed7721a3f6d", "package_type": "cpython_module", "imports": ["distutils"], "shared_library": true, "depends": []}, "docutils": {"name": "docutils", "version": "0.19", "file_name": "docutils-0.19-py3-none-any.whl", "install_dir": "site", "sha256": "c805431ee04190a1786a6d0e4590f057a526fe66227ac5f1628b0a9587a01574", "package_type": "package", "imports": ["docutils"], "depends": []}, "exceptiongroup": {"name": "exceptiongroup", "version": "1.1.1", "file_name": "exceptiongroup-1.1.1-py3-none-any.whl", "install_dir": "site", "sha256": "d902f7e324dc8b1372fa238fcede12c569f6ea6da4c639b0012237f5335318fc", "package_type": "package", "imports": ["exceptiongroup"], "depends": []}, "fastparquet": {"name": "fastparquet", "version": "2023.2.0", "file_name": "fastparquet-2023.2.0-cp311-cp311-emscripten_3_1_32_wasm32.whl", "install_dir": "site", "sha256": "9ac4ad704ba3e18f69044e10d30df155eff9b511b8719f1ada9d2b0eb67169a9", "package_type": "package", "imports": ["fastparquet"], "depends": ["cramjam", "numpy", "pandas", "fsspec", "packaging"]}, "fiona": {"name": "fiona", "version": "1.8.22", "file_name": "Fiona-1.8.22-cp311-cp311-emscripten_3_1_32_wasm32.whl", "install_dir": "site", "sha256": "b39ec8d7210df7e9d1b80029417f580c6b85aaff692480f7a8ba2db2d1e279b9", "package_type": "package", "imports": ["fiona"], "depends": ["attrs", "certifi", "setuptools", "six", "click", "cligj"]}, "fonttools": {"name": "fonttools", "version": "4.39.3", "file_name": "fonttools-4.39.3-py3-none-any.whl", "install_dir": "site", "sha256": "862d54e516c69ecfe6222795c39fffbd3bbe334edb7f809efb8e2545b0396f0a", "package_type": "package", "imports": ["fontTools"], "depends": []}, "fpcast-test": {"name": "fpcast-test", "version": "0.1", "file_name": "fpcast_test-0.1.1-cp311-cp311-emscripten_3_1_32_wasm32.whl", "install_dir": "site", "sha256": "ac732521cd204cfb98011e70f4372c6103371b41a39c12ff8f4d0d2d312bdfed", "package_type": "package", "imports": ["fpcast_test"], "depends": []}, "fsspec": {"name": "fsspec", "version": "2023.3.0", "file_name": "fsspec-2023.3.0-py3-none-any.whl", "install_dir": "site", "sha256": "6a7b8ef08ec87e4ef0038ed20258fc0cf1df7483eb1b2bdb9ba23feb20e93267", "package_type": "package", "imports": ["fsspec"], "depends": [], "unvendored_tests": true}, "fsspec-tests": {"name": "fsspec-tests", "version": "2023.3.0", "depends": ["fsspec"], "imports": [], "file_name": "fsspec-tests.tar", "install_dir": "site", "sha256": "b86bd5ff594014325b9d0983a586178ebb8226acc3f6e7be70ade4bc1696ea8c"}, "future": {"name": "future", "version": "0.18.3", "file_name": "future-0.18.3-py3-none-any.whl", "install_dir": "site", "sha256": "6f2a4b6423dec50734ead1f9a43989d7b0d12846a43903f9c2f7314e72f815b3", "package_type": "package", "imports": ["future"], "depends": [], "unvendored_tests": true}, "future-tests": {"name": "future-tests", "version": "0.18.3", "depends": ["future"], "imports": [], "file_name": "future-tests.tar", "install_dir": "site", "sha256": "1ccb0244fa5914f56a6b03428ec42409ca39096f0f5b4b0ae512f989123b0789"}, "galpy": {"name": "galpy", "version": "1.8.3", "file_name": "galpy-1.8.3-cp311-cp311-emscripten_3_1_32_wasm32.whl", "install_dir": "site", "sha256": "5070c291c2a8192af8befef7da293090b9c71ff07961dd41f8e1006be8549120", "package_type": "package", "imports": ["galpy"], "depends": ["numpy", "scipy", "matplotlib", "astropy", "future", "setuptools"]}, "gdal": {"name": "gdal", "version": "3.5.1", "file_name": "gdal-3.5.1.zip", "install_dir": "dynlib", "sha256": "0824c1e634214615999fadc1cfe5412f203c4c7f8eb8db3aa1dd5213f4f1d342", "package_type": "shared_library", "imports": [], "shared_library": true, "depends": ["geos"]}, "gensim": {"name": "gensim", "version": "4.3.1", "file_name": "gensim-4.3.1-cp311-cp311-emscripten_3_1_32_wasm32.whl", "install_dir": "site", "sha256": "c69eeede4a431211258739e5ede260a432404120b945b0f0ccb74a41b72ce327", "package_type": "package", "imports": ["gensim"], "depends": ["numpy", "scipy", "six", "smart_open"], "unvendored_tests": true}, "gensim-tests": {"name": "gensim-tests", "version": "4.3.1", "depends": ["gensim"], "imports": [], "file_name": "gensim-tests.tar", "install_dir": "site", "sha256": "d73748ff6e3c702dc1e4c0b7c53009e7460500278e5e301e4a89c182d1e86955"}, "geopandas": {"name": "geopandas", "version": "0.12.2", "file_name": "geopandas-0.12.2-py3-none-any.whl", "install_dir": "site", "sha256": "0d35a36cd5c0e27ddf10aa4058f543726ffcc682da74c2dd2c22877184f8d1bb", "package_type": "package", "imports": ["geopandas"], "depends": ["shapely", "fiona", "pyproj", "packaging", "pandas"], "unvendored_tests": true}, "geopandas-tests": {"name": "geopandas-tests", "version": "0.12.2", "depends": ["geopandas"], "imports": [], "file_name": "geopandas-tests.tar", "install_dir": "site", "sha256": "5375752884c1f8c8f0e1c9280b8e739812f832d7c720883e9b510a213179f551"}, "geos": {"name": "geos", "version": "3.10.3", "file_name": "geos-3.10.3.zip", "install_dir": "dynlib", "sha256": "79c163c44476e4eb7ccd904de8295cd8e2dd2e2f55a304264f2b4b55b84be852", "package_type": "shared_library", "imports": [], "shared_library": true, "depends": []}, "gmpy2": {"name": "gmpy2", "version": "2.1.5", "file_name": "gmpy2-2.1.5-cp311-cp311-emscripten_3_1_32_wasm32.whl", "install_dir": "site", "sha256": "d9a00806b6d6693884b4fc7b11a375427b4458c4b1a723e2578f6514f90ba434", "package_type": "package", "imports": ["gmpy2"], "depends": []}, "gsw": {"name": "gsw", "version": "3.6.16", "file_name": "gsw-3.6.16-cp311-cp311-emscripten_3_1_32_wasm32.whl", "install_dir": "site", "sha256": "314e336f6f5179ee10ab3f88b0a2a0e547b07a983ce362375be8e3f74eb63efa", "package_type": "package", "imports": ["gsw"], "depends": ["numpy"], "unvendored_tests": true}, "gsw-tests": {"name": "gsw-tests", "version": "3.6.16", "depends": ["gsw"], "imports": [], "file_name": "gsw-tests.tar", "install_dir": "site", "sha256": "0997fa5a0e6faf3b2bd7a0512d9609e214d78633e8420e40e26098a3dd18f3a4"}, "h5py": {"name": "h5py", "version": "3.7.0", "file_name": "h5py-3.7.0-cp311-cp311-emscripten_3_1_32_wasm32.whl", "install_dir": "site", "sha256": "d034c833d5fea0afe54110b9dd4a15d26338206f1a32abd8fd3772cb2e7b64c7", "package_type": "package", "imports": ["h5py"], "depends": ["numpy", "pkgconfig"], "unvendored_tests": true}, "h5py-tests": {"name": "h5py-tests", "version": "3.7.0", "depends": ["h5py"], "imports": [], "file_name": "h5py-tests.tar", "install_dir": "site", "sha256": "c717c82c3bc024ba56aa8108d87a0d38126e0c9c1a82a61c018abe0617e7ac93"}, "hashlib": {"name": "hashlib", "version": "1.0.0", "file_name": "hashlib-1.0.0.zip", "install_dir": "stdlib", "sha256": "81147ac43fe1d3bcdcefd5d4c8874b376a3133b30d40ea9fa800698d3ec79a18", "package_type": "cpython_module", "imports": ["_hashlib"], "shared_library": true, "depends": ["openssl"]}, "html5lib": {"name": "html5lib", "version": "1.1", "file_name": "html5lib-1.1-py2.py3-none-any.whl", "install_dir": "site", "sha256": "dcbd0f5f3c41d33c24a1f714be09b2d3f1bc1a2ddc50bd3013a8b733fb656cfc", "package_type": "package", "imports": ["html5lib"], "depends": ["webencodings", "six"]}, "idna": {"name": "idna", "version": "3.4", "file_name": "idna-3.4-py3-none-any.whl", "install_dir": "site", "sha256": "a6721bc93dd5ab296141ca9f01259f81ad6befa9976c93cd2cfb855557aa67f6", "package_type": "package", "imports": ["idna"], "depends": []}, "imageio": {"name": "imageio", "version": "2.27.0", "file_name": "imageio-2.27.0-py3-none-any.whl", "install_dir": "site", "sha256": "b9deee8ae6a9fad2c18a955b184c5550f19400d8cad28b0426f389bb4f992a5e", "package_type": "package", "imports": ["imageio"], "depends": ["numpy", "pillow"]}, "iniconfig": {"name": "iniconfig", "version": "2.0.0", "file_name": "iniconfig-2.0.0-py3-none-any.whl", "install_dir": "site", "sha256": "67bdeb01e8a63d0fe748a8259744d7a8ed41a5d452f3543409cedea8a50cf128", "package_type": "package", "imports": ["iniconfig"], "depends": []}, "jedi": {"name": "jedi", "version": "0.18.2", "file_name": "jedi-0.18.2-py2.py3-none-any.whl", "install_dir": "site", "sha256": "fee5550e78afd9957c6af720d740cbefb74b647c95fbfd22015f40c88a63a04b", "package_type": "package", "imports": ["jedi"], "depends": ["parso"], "unvendored_tests": true}, "jedi-tests": {"name": "jedi-tests", "version": "0.18.2", "depends": ["jedi"], "imports": [], "file_name": "jedi-tests.tar", "install_dir": "site", "sha256": "b155a6a6bb5ff7d2114888a10ed678e419c70d2b8db1b0bdba59d0e6d6e17e20"}, "jinja2": {"name": "Jinja2", "version": "3.1.2", "file_name": "Jinja2-3.1.2-py3-none-any.whl", "install_dir": "site", "sha256": "1be3ff86336ea94a8db3ae0474e63b574315784d056a51d80992fbf8916cecb8", "package_type": "package", "imports": ["jinja2"], "depends": ["markupsafe"]}, "joblib": {"name": "joblib", "version": "1.2.0", "file_name": "joblib-1.2.0-py3-none-any.whl", "install_dir": "site", "sha256": "82dd51f29e81d0e9fa3c91c1f66f1042912db41fa05683bac9bc3c1f2b8ca364", "package_type": "package", "imports": ["joblib"], "depends": ["distutils"], "unvendored_tests": true}, "joblib-tests": {"name": "joblib-tests", "version": "1.2.0", "depends": ["joblib"], "imports": [], "file_name": "joblib-tests.tar", "install_dir": "site", "sha256": "2f3ac7d3a509a51c7283a602d30f8f42359a892adaa402d90c9d9ee7a0902008"}, "jsonschema": {"name": "jsonschema", "version": "4.17.3", "file_name": "jsonschema-4.17.3-py3-none-any.whl", "install_dir": "site", "sha256": "274fbf42f5d39a60107ecaa433068f6d9bc9281a5ab81716ccb94d2764ef8996", "package_type": "package", "imports": ["jsonschema"], "depends": ["attrs", "pyrsistent"], "unvendored_tests": true}, "jsonschema-tests": {"name": "jsonschema-tests", "version": "4.17.3", "depends": ["jsonschema"], "imports": [], "file_name": "jsonschema-tests.tar", "install_dir": "site", "sha256": "29c714762f6a6968acca6419af5f0b23e4d3ee9c86eaaacfefdfbcc00350211a"}, "kiwisolver": {"name": "kiwisolver", "version": "1.4.4", "file_name": "kiwisolver-1.4.4-cp311-cp311-emscripten_3_1_32_wasm32.whl", "install_dir": "site", "sha256": "ce236b511b5bcaa6d56d15bc297896e513b6e3ef014a0f755f66114c44d0b765", "package_type": "package", "imports": ["kiwisolver"], "depends": []}, "lazy-object-proxy": {"name": "lazy-object-proxy", "version": "1.9.0", "file_name": "lazy_object_proxy-1.9.0-cp311-cp311-emscripten_3_1_32_wasm32.whl", "install_dir": "site", "sha256": "b21ea761012c4c7cb956995996ed902a85a5388d5ee5a4295030e306bdd12628", "package_type": "package", "imports": ["lazy_object_proxy"], "depends": []}, "libhdf5": {"name": "libhdf5", "version": "1.12.1", "file_name": "libhdf5-1.12.1.zip", "install_dir": "dynlib", "sha256": "751c73280607e0ff018ef30eb22f3f29132021a5acfb41970aa3b5bea262b9a0", "package_type": "shared_library", "imports": [], "shared_library": true, "depends": []}, "libheif": {"name": "libheif", "version": "1.12.0", "file_name": "libheif-1.12.0.zip", "install_dir": "dynlib", "sha256": "f6579e085c47b954d0c480250865dcd96afce0f8a2f70d94d9070e9fc674cbb8", "package_type": "shared_library", "imports": [], "shared_library": true, "depends": []}, "libmagic": {"name": "libmagic", "version": "5.42", "file_name": "libmagic-5.42.zip", "install_dir": "dynlib", "sha256": "ee7d20e5bff15df0c557cdec877a82655bc4d06c6794e88927df4839447459cd", "package_type": "shared_library", "imports": [], "shared_library": true, "depends": []}, "lightgbm": {"name": "lightgbm", "version": "3.3.5", "file_name": "lightgbm-3.3.5-py3-none-any.whl", "install_dir": "site", "sha256": "b5645871de43d853b8cc4fc2763d82d8bc94c2e094b3a079fa8d9d1154be51ab", "package_type": "package", "imports": ["lightgbm"], "depends": ["numpy", "scipy", "scikit-learn"]}, "logbook": {"name": "logbook", "version": "1.5.3", "file_name": "Logbook-1.5.3-cp311-cp311-emscripten_3_1_32_wasm32.whl", "install_dir": "site", "sha256": "6f17016a06147ddee5962c079c70edbdc32b24395acf2195be473267f2e32b0a", "package_type": "package", "imports": ["logbook"], "depends": []}, "lxml": {"name": "lxml", "version": "4.9.2", "file_name": "lxml-4.9.2-cp311-cp311-emscripten_3_1_32_wasm32.whl", "install_dir": "site", "sha256": "1f1da90f0a39aac6cc5ebd17b38ef6d96ce30fc56771b2e2082003ffda0dff4b", "package_type": "package", "imports": ["lxml"], "depends": []}, "lzma": {"name": "lzma", "version": "1.0.0", "file_name": "lzma-1.0.0.zip", "install_dir": "stdlib", "sha256": "6c7c2be0f7e4db40d5f8a86b42772b15dfbb0d5b2f2548bfc8fb62116379c644", "package_type": "cpython_module", "imports": ["lzma", "_lzma"], "shared_library": true, "depends": []}, "markupsafe": {"name": "MarkupSafe", "version": "2.1.2", "file_name": "MarkupSafe-2.1.2-cp311-cp311-emscripten_3_1_32_wasm32.whl", "install_dir": "site", "sha256": "3ff0cc66da9d27c0dbf40fa5151e3b4faac99ced498ccc5b60f8cc7e955727ca", "package_type": "package", "imports": ["markupsafe"], "depends": []}, "matplotlib": {"name": "matplotlib", "version": "3.5.2", "file_name": "matplotlib-3.5.2-cp311-cp311-emscripten_3_1_32_wasm32.whl", "install_dir": "site", "sha256": "75fc1e192aa5270bea9b0af3311cd6ddddbf6bfe72f885ace1ecf73ec64cde36", "package_type": "package", "imports": ["pylab", "mpl_toolkits", "matplotlib"], "depends": ["cycler", "fonttools", "kiwisolver", "numpy", "packaging", "pillow", "pyparsing", "python-dateutil", "pytz", "matplotlib-pyodide"], "unvendored_tests": true}, "matplotlib-pyodide": {"name": "matplotlib-pyodide", "version": "0.1.1", "file_name": "matplotlib_pyodide-0.1.1-py3-none-any.whl", "install_dir": "site", "sha256": "65689a4541ef09f0cbce5440a59fc75b47e3d5d03b4dd0813f7f6e1013b4016a", "package_type": "package", "imports": ["matplotlib_pyodide"], "depends": []}, "matplotlib-tests": {"name": "matplotlib-tests", "version": "3.5.2", "depends": ["matplotlib"], "imports": [], "file_name": "matplotlib-tests.tar", "install_dir": "site", "sha256": "75b3d27f64c2db671a31d40b86630e089b2e656b38c17ff4a832ab8188d5ccbd"}, "micropip": {"name": "micropip", "version": "0.3.0", "file_name": "micropip-0.3.0-py3-none-any.whl", "install_dir": "site", "sha256": "e5441ffc89ee3f297a8a2eeaaf71d76f2bd7b1404d3f6082646afdb0f4e9f5f2", "package_type": "package", "imports": ["micropip"], "depends": ["packaging"]}, "mne": {"name": "mne", "version": "1.3.1", "file_name": "mne-1.3.1-py3-none-any.whl", "install_dir": "site", "sha256": "80d17ba94d2588498c2dbe125fc45c4012140f8ce0debd6492a2b162e4bb7abb", "package_type": "package", "imports": ["mne"], "depends": ["distutils", "numpy", "scipy", "setuptools", "decorator"], "unvendored_tests": true}, "mne-tests": {"name": "mne-tests", "version": "1.3.1", "depends": ["mne"], "imports": [], "file_name": "mne-tests.tar", "install_dir": "site", "sha256": "6474a0480b86ad443f8a5c8b5a4419a075aed654e50a5b09d189ab8a3fe0ebed"}, "more-itertools": {"name": "more-itertools", "version": "9.1.0", "file_name": "more_itertools-9.1.0-py3-none-any.whl", "install_dir": "site", "sha256": "2da02645970f671b8b140e52f0ba8d1a603c5f5af3e06cdf1c90fb51eb8c38ab", "package_type": "package", "imports": ["more_itertools"], "depends": []}, "mpmath": {"name": "mpmath", "version": "1.3.0", "file_name": "mpmath-1.3.0-cp311-none-any.whl", "install_dir": "site", "sha256": "b48ca52cbaf3392e8d31c3d7549539b993cdd22580960b821a9c0b8748210560", "package_type": "package", "imports": ["mpmath"], "depends": [], "unvendored_tests": true}, "mpmath-tests": {"name": "mpmath-tests", "version": "1.3.0", "depends": ["mpmath"], "imports": [], "file_name": "mpmath-tests.tar", "install_dir": "site", "sha256": "327617b053d4c7c49768b7825cf01f9d871208285725e0a7ac2e8cd4a02cb2ab"}, "msgpack": {"name": "msgpack", "version": "1.0.5", "file_name": "msgpack-1.0.5-cp311-cp311-emscripten_3_1_32_wasm32.whl", "install_dir": "site", "sha256": "d79ae23633bbdb3cffd1f136d35df8d5262db10c8097e658729ce1d0eefabfce", "package_type": "package", "imports": ["msgpack"], "depends": []}, "msprime": {"name": "msprime", "version": "1.2.0", "file_name": "msprime-1.2.0-cp311-cp311-emscripten_3_1_32_wasm32.whl", "install_dir": "site", "sha256": "9d8e30a090da35ce51046e7b382a2d5b7295db4176c2b8ece28e76045a66b2c9", "package_type": "package", "imports": ["msprime"], "depends": ["numpy", "newick", "tskit", "demes"]}, "multidict": {"name": "multidict", "version": "6.0.4", "file_name": "multidict-6.0.4-cp311-cp311-emscripten_3_1_32_wasm32.whl", "install_dir": "site", "sha256": "218eb200ba8c725c7a17158923fec92b489f603d5382a8b106bee668862885b0", "package_type": "package", "imports": ["multidict"], "depends": []}, "munch": {"name": "munch", "version": "2.5.0", "file_name": "munch-2.5.0-py2.py3-none-any.whl", "install_dir": "site", "sha256": "e709f59caa71f93fecd2ae0e605905eef6f3b6439130d5b4f7dce7c202e48a24", "package_type": "package", "imports": ["munch"], "depends": ["setuptools", "six"]}, "mypy": {"name": "mypy", "version": "1.1.1", "file_name": "mypy-1.1.1-cp311-cp311-emscripten_3_1_32_wasm32.whl", "install_dir": "site", "sha256": "91e57c629d34fb9dd2b3fcb3ee8dbc61debc87c78d58991ae517f0651c88371d", "package_type": "package", "imports": ["mypyc", "mypy"], "depends": [], "unvendored_tests": true}, "mypy-tests": {"name": "mypy-tests", "version": "1.1.1", "depends": ["mypy"], "imports": [], "file_name": "mypy-tests.tar", "install_dir": "site", "sha256": "c6aeb8964592825c691eee1aacdf06d94d21f26172f1333769299ea44167dc3c"}, "networkx": {"name": "networkx", "version": "3.0", "file_name": "networkx-3.0-py3-none-any.whl", "install_dir": "site", "sha256": "0d7e2aad29da4a7770b4a04f461d7266bc4e314e2e094b08407eb16a17ad6769", "package_type": "package", "imports": ["networkx"], "depends": ["decorator", "setuptools", "matplotlib", "numpy"], "unvendored_tests": true}, "networkx-tests": {"name": "networkx-tests", "version": "3.0", "depends": ["networkx"], "imports": [], "file_name": "networkx-tests.tar", "install_dir": "site", "sha256": "93b0dcd01c2433bce50da0dfdec0d5fa975113bef651ecf49455f37f4276f580"}, "newick": {"name": "newick", "version": "1.9.0", "file_name": "newick-1.9.0-py2.py3-none-any.whl", "install_dir": "site", "sha256": "d3e1957984dfe076c53e9a66befe41558bc37a6c39a95bedab34b1fec584e75c", "package_type": "package", "imports": ["newick"], "depends": []}, "nlopt": {"name": "nlopt", "version": "2.7.0", "file_name": "nlopt-2.7.0-cp311-cp311-emscripten_3_1_32_wasm32.whl", "install_dir": "site", "sha256": "b6fb440d8d4dacc2ac0105ab534b3373145a3eeb4c8e1e79d35f436f3b2ee1af", "package_type": "package", "imports": ["nlopt"], "depends": ["numpy"]}, "nltk": {"name": "nltk", "version": "3.8.1", "file_name": "nltk-3.8.1-py3-none-any.whl", "install_dir": "site", "sha256": "2b1286ebe5893a802eef0fd3122b4822f53019903e3a9e8928e179f2faac7f82", "package_type": "package", "imports": ["nltk"], "depends": ["regex", "sqlite3"], "unvendored_tests": true}, "nltk-tests": {"name": "nltk-tests", "version": "3.8.1", "depends": ["nltk"], "imports": [], "file_name": "nltk-tests.tar", "install_dir": "site", "sha256": "6f4505d810316f623eef2fd8a8a93a00ecaef29531855d93c036f041f0455d20"}, "nose": {"name": "nose", "version": "1.3.7", "file_name": "nose-1.3.7-py3-none-any.whl", "install_dir": "site", "sha256": "069a8cd3025eb98236aabafe93c4ebe3152fb442ac6577bc7e1e77b9389bcc3b", "package_type": "package", "imports": ["nose"], "depends": ["setuptools"]}, "numcodecs": {"name": "numcodecs", "version": "0.11.0", "file_name": "numcodecs-0.11.0-cp311-cp311-emscripten_3_1_32_wasm32.whl", "install_dir": "site", "sha256": "058dc240cd93563b337ab993658c1a84c0dd6dc4b1b66aab95e248884717581d", "package_type": "package", "imports": ["numcodecs"], "depends": ["numpy", "msgpack"], "unvendored_tests": true}, "numcodecs-tests": {"name": "numcodecs-tests", "version": "0.11.0", "depends": ["numcodecs"], "imports": [], "file_name": "numcodecs-tests.tar", "install_dir": "site", "sha256": "cb26740da31b4707e6158634a6a31fc0aac3cec76eab0b7828302c5b37e9fb2a"}, "numpy": {"name": "numpy", "version": "1.24.2", "file_name": "numpy-1.24.2-cp311-cp311-emscripten_3_1_32_wasm32.whl", "install_dir": "site", "sha256": "4aad7946a394229875ab751fd13e97119d7b5ae132885b5ebecd9ce48dbef18d", "package_type": "package", "imports": ["numpy"], "depends": [], "unvendored_tests": true}, "numpy-tests": {"name": "numpy-tests", "version": "1.24.2", "depends": ["numpy"], "imports": [], "file_name": "numpy-tests.tar", "install_dir": "site", "sha256": "25fccf3d5463b22add3a06c466abc03691d66de90c00243ca4293bc8d6f81a12"}, "opencv-python": {"name": "opencv-python", "version": "4.7.0.72", "file_name": "opencv_python-4.7.0.72-cp311-cp311-emscripten_3_1_32_wasm32.whl", "install_dir": "site", "sha256": "a64d2e0f2f16d02173b738e9ca4464edb14b05cf7185201788335c6700ee233f", "package_type": "package", "imports": ["cv2"], "depends": ["numpy"]}, "openssl": {"name": "openssl", "version": "1.1.1n", "file_name": "openssl-1.1.1n.zip", "install_dir": "dynlib", "sha256": "2b3be829be8890e640838e14ae8bc63e9f0898bf32e03373d00a875ad2a55b77", "package_type": "shared_library", "imports": [], "shared_library": true, "depends": []}, "optlang": {"name": "optlang", "version": "1.6.1", "file_name": "optlang-1.6.1-py2.py3-none-any.whl", "install_dir": "site", "sha256": "b6aa8c4aa7a2292af6eb20d5b6a94da5e66bed75163b1726191f364002addce7", "package_type": "package", "imports": ["optlang"], "depends": ["sympy", "six", "swiglpk"], "unvendored_tests": true}, "optlang-tests": {"name": "optlang-tests", "version": "1.6.1", "depends": ["optlang"], "imports": [], "file_name": "optlang-tests.tar", "install_dir": "site", "sha256": "15b3fcc2e36f0dba48b3db08843cd91b117c4571956c0908cd5bf977eb0f0d95"}, "packaging": {"name": "packaging", "version": "23.0", "file_name": "packaging-23.0-py3-none-any.whl", "install_dir": "site", "sha256": "91079d21efac4e72c7d139a1db268341fe6bf170cbf6a47677522175889ec84f", "package_type": "package", "imports": ["packaging"], "depends": ["pyparsing"]}, "pandas": {"name": "pandas", "version": "1.5.3", "file_name": "pandas-1.5.3-cp311-cp311-emscripten_3_1_32_wasm32.whl", "install_dir": "site", "sha256": "b19e5ad95fc43335d5d2e742e7caca443446d2cc384b89a3e70494eed2deda30", "package_type": "package", "imports": ["pandas"], "depends": ["numpy", "python-dateutil", "pytz"], "unvendored_tests": true}, "pandas-tests": {"name": "pandas-tests", "version": "1.5.3", "depends": ["pandas"], "imports": [], "file_name": "pandas-tests.tar", "install_dir": "site", "sha256": "8cedc9508e42f2a881f5f0da5d835d755fe0689dfa63e1d7cd075eef28123389"}, "parso": {"name": "parso", "version": "0.8.3", "file_name": "parso-0.8.3-py2.py3-none-any.whl", "install_dir": "site", "sha256": "3e32393bc8769da8c992b2bdecf408551334f1d6aa7fb0a37e57175238fb448f", "package_type": "package", "imports": ["parso"], "depends": []}, "patsy": {"name": "patsy", "version": "0.5.3", "file_name": "patsy-0.5.3-py2.py3-none-any.whl", "install_dir": "site", "sha256": "5e9c60d575b01828570602d37d56cb49970f1a700210d8e4ed037a404335cfc8", "package_type": "package", "imports": ["patsy"], "depends": ["numpy", "six"], "unvendored_tests": true}, "patsy-tests": {"name": "patsy-tests", "version": "0.5.3", "depends": ["patsy"], "imports": [], "file_name": "patsy-tests.tar", "install_dir": "site", "sha256": "9532de4676a913a55f7f02e5d8959359e6e846032d0063a8e46dc16d254d6ac9"}, "pillow": {"name": "Pillow", "version": "9.1.1", "file_name": "PIL-9.1.1-cp311-cp311-emscripten_3_1_32_wasm32.whl", "install_dir": "site", "sha256": "2d5017a409af4291f6ee2d795d78ebe7745ab8621c0295f3a73c971e784f6459", "package_type": "package", "imports": ["PIL"], "depends": []}, "pillow_heif": {"name": "pillow_heif", "version": "0.8.0", "file_name": "pillow_heif-0.8.0-cp36-abi3-emscripten_3_1_32_wasm32.whl", "install_dir": "site", "sha256": "a3c2e75d26769ba0b36ed4f0badcf1d1614093b025c97a3a36f3d3c32df9369e", "package_type": "package", "imports": ["pillow_heif"], "depends": ["cffi", "pillow", "libheif"]}, "pkgconfig": {"name": "pkgconfig", "version": "1.5.5", "file_name": "pkgconfig-1.5.5-py3-none-any.whl", "install_dir": "site", "sha256": "c2300b88b0ebe2b666ffa91bde1fbadf174e4ded3cd1199125ef406d8c7ce3b5", "package_type": "package", "imports": ["pkgconfig"], "depends": []}, "pluggy": {"name": "pluggy", "version": "1.0.0", "file_name": "pluggy-1.0.0-py2.py3-none-any.whl", "install_dir": "site", "sha256": "c4e8f046f90e6611e2def2afde22182b4a858fd9a67e868d3b86a0024020f8d4", "package_type": "package", "imports": ["pluggy"], "depends": []}, "py": {"name": "py", "version": "1.11.0", "file_name": "py-1.11.0-py2.py3-none-any.whl", "install_dir": "site", "sha256": "31d6192a330a7341938ac4e0342338d60cc38de34a1a61a3107a3d4ee44c4714", "package_type": "package", "imports": ["py"], "depends": []}, "pyb2d": {"name": "pyb2d", "version": "0.7.2", "file_name": "b2d-0.7.4-cp311-cp311-emscripten_3_1_32_wasm32.whl", "install_dir": "site", "sha256": "6176e035d56eee1b2cda7b257f17ff63a9ffe8b253cf598acdc4a73f2af50bc8", "package_type": "package", "imports": ["b2d"], "depends": ["numpy", "pydantic", "setuptools"]}, "pyclipper": {"name": "pyclipper", "version": "1.3.0.post4", "file_name": "pyclipper-1.3.0.post4-cp311-cp311-emscripten_3_1_32_wasm32.whl", "install_dir": "site", "sha256": "e1b1e0ef001c63f03fa8e3107ff6242e0ad4527f2a603c742fcdae3546fa0149", "package_type": "package", "imports": ["pyclipper"], "depends": []}, "pycparser": {"name": "pycparser", "version": "2.21", "file_name": "pycparser-2.21-py2.py3-none-any.whl", "install_dir": "site", "sha256": "0e9ba4eafb7c2b5483da3ea97e65bf122f5c5db2651aa9d92b8b38a53ec06c81", "package_type": "package", "imports": ["pycparser"], "depends": []}, "pycryptodome": {"name": "pycryptodome", "version": "3.17", "file_name": "pycryptodome-3.17-cp35-abi3-emscripten_3_1_32_wasm32.whl", "install_dir": "site", "sha256": "9f68c2f6bf41d348794784b6bd3c38e92e2236b1bc40160fde840d2fa8d51e2b", "package_type": "package", "imports": ["Crypto"], "depends": [], "unvendored_tests": true}, "pycryptodome-tests": {"name": "pycryptodome-tests", "version": "3.17", "depends": ["pycryptodome"], "imports": [], "file_name": "pycryptodome-tests.tar", "install_dir": "site", "sha256": "6e085c4f522be416e4a89027a2f11c531cebd6eaf0cdd24ba95977a030c0ea4a"}, "pydantic": {"name": "pydantic", "version": "1.10.7", "file_name": "pydantic-1.10.7-py3-none-any.whl", "install_dir": "site", "sha256": "426d9cf98f0f625b4b92e86889ce7515b93d428af821675a441842fb1f55239b", "package_type": "package", "imports": ["pydantic"], "depends": ["typing-extensions"]}, "pydecimal": {"name": "pydecimal", "version": "1.0.0", "file_name": "pydecimal-1.0.0.zip", "install_dir": "stdlib", "sha256": "f297064de9e403df48749cf6f3dcc2e7de280c88aeb16deb31dc6534ba63b1a6", "package_type": "cpython_module", "imports": ["_pydecimal"], "shared_library": true, "depends": []}, "pydoc_data": {"name": "pydoc_data", "version": "1.0.0", "file_name": "pydoc_data-1.0.0.zip", "install_dir": "stdlib", "sha256": "76c5f632661fd119b6f543c56093bff33ee40b684114c9e876cc65581bf4b3cb", "package_type": "cpython_module", "imports": ["pydoc_data"], "shared_library": true, "depends": []}, "pyerfa": {"name": "pyerfa", "version": "2.0.0.3", "file_name": "pyerfa-2.0.0.3-cp311-cp311-emscripten_3_1_32_wasm32.whl", "install_dir": "site", "sha256": "5ab1f71323e9a3939e01ac44e84bce6445f750b2317c583a56a57e355b86474c", "package_type": "package", "imports": ["erfa"], "depends": ["numpy"], "unvendored_tests": true}, "pyerfa-tests": {"name": "pyerfa-tests", "version": "2.0.0.3", "depends": ["pyerfa"], "imports": [], "file_name": "pyerfa-tests.tar", "install_dir": "site", "sha256": "20c9ddaa8c656cd7e3f563024471c60382a4e7e726bebf32b74253ada5e118cf"}, "pygments": {"name": "Pygments", "version": "2.14.0", "file_name": "Pygments-2.14.0-py3-none-any.whl", "install_dir": "site", "sha256": "f22ab7b680f2bf8c36e1e3ea294ce79d9eec827ce89cb7051b2b3c7c5832966e", "package_type": "package", "imports": ["pygments"], "depends": []}, "pyheif": {"name": "pyheif", "version": "0.7.1", "file_name": "pyheif-0.7.1-cp311-cp311-emscripten_3_1_32_wasm32.whl", "install_dir": "site", "sha256": "4e85a9a18b79370169671f5c8cc6f6798e6e57374dbce0956688c0aa1f0771f9", "package_type": "package", "imports": ["pyheif"], "depends": ["cffi"]}, "pyinstrument": {"name": "pyinstrument", "version": "4.4.0", "file_name": "pyinstrument-4.4.0-cp311-cp311-emscripten_3_1_32_wasm32.whl", "install_dir": "site", "sha256": "2b4ccc4cb2fea1f3ec11f9b1cb7ddbcbca513483163aeb6184a5cd3dec7387bc", "package_type": "package", "imports": ["pyinstrument"], "depends": []}, "pynacl": {"name": "pynacl", "version": "1.5.0", "file_name": "PyNaCl-1.5.0-cp311-cp311-emscripten_3_1_32_wasm32.whl", "install_dir": "site", "sha256": "a3259b787a040a45124331a6dc9a865b67e121884886d07fac9ac95bfdf55afb", "package_type": "package", "imports": ["nacl"], "depends": ["cffi"]}, "pyodide-http": {"name": "pyodide-http", "version": "0.2.0", "file_name": "pyodide_http-0.2.0-py3-none-any.whl", "install_dir": "site", "sha256": "bf92597fafebebd5d276c94b675681af12d9dd97f8c80f93d98f2bb962a7702e", "package_type": "package", "imports": ["pyodide_http"], "depends": []}, "pyparsing": {"name": "pyparsing", "version": "3.0.9", "file_name": "pyparsing-3.0.9-py3-none-any.whl", "install_dir": "site", "sha256": "0f6debefd92b9c9781527a30c808233cfed258194c34554a815f81a41b64d7f7", "package_type": "package", "imports": ["pyparsing"], "depends": []}, "pyproj": {"name": "pyproj", "version": "3.4.1", "file_name": "pyproj-3.4.1-cp311-cp311-emscripten_3_1_32_wasm32.whl", "install_dir": "site", "sha256": "59df59bd943184627f4146034ea696947bd6932ab9e9b3d1148ee3e6a2e32a2f", "package_type": "package", "imports": ["pyproj"], "depends": ["certifi", "sqlite3"]}, "pyrsistent": {"name": "pyrsistent", "version": "0.19.3", "file_name": "pyrsistent-0.19.3-cp311-cp311-emscripten_3_1_32_wasm32.whl", "install_dir": "site", "sha256": "53d91a1de1cfd6026552424141bad5fa13beaacf0f0ab11850f767f42ceda45e", "package_type": "package", "imports": ["_pyrsistent_version", "pyrsistent"], "depends": []}, "pytest": {"name": "pytest", "version": "7.2.2", "file_name": "pytest-7.2.2-py3-none-any.whl", "install_dir": "site", "sha256": "21b51cb7179a394024bf35c76b18f0c0ce4492b83b7e76e72866688ff548872c", "package_type": "package", "imports": ["_pytest", "pytest"], "depends": ["atomicwrites", "attrs", "more-itertools", "pluggy", "py", "setuptools", "six", "iniconfig", "exceptiongroup"]}, "pytest-benchmark": {"name": "pytest-benchmark", "version": "4.0.0", "file_name": "pytest_benchmark-4.0.0-py3-none-any.whl", "install_dir": "site", "sha256": "ef64a9d26222a5263a85cfde55e1497defab2112a8c5210eb1534df67a896177", "package_type": "package", "imports": ["pytest_benchmark"], "depends": []}, "python-dateutil": {"name": "python-dateutil", "version": "2.8.2", "file_name": "python_dateutil-2.8.2-py2.py3-none-any.whl", "install_dir": "site", "sha256": "96a346655d4a805670334d4733a8326e37690b96f1a8ea703bd3332f34b05787", "package_type": "package", "imports": ["dateutil"], "depends": ["six"]}, "python-magic": {"name": "python-magic", "version": "0.4.27", "file_name": "python_magic-0.4.27-py2.py3-none-any.whl", "install_dir": "site", "sha256": "8174c5da8a67cee080139edbbe759aa695d1d556cb388f543eab3ab7cd0496c4", "package_type": "package", "imports": ["magic"], "depends": ["libmagic"]}, "python-sat": {"name": "python-sat", "version": "0.1.7.dev26", "file_name": "python_sat-0.1.7.dev26-cp311-cp311-emscripten_3_1_32_wasm32.whl", "install_dir": "site", "sha256": "ae1167e6c402c01e7647de71dac804002faf411b6ac531e67873913a5e06c2d1", "package_type": "package", "imports": ["pysat"], "depends": ["six"]}, "python_solvespace": {"name": "python_solvespace", "version": "3.0.8", "file_name": "python_solvespace-3.0.8-cp311-cp311-emscripten_3_1_32_wasm32.whl", "install_dir": "site", "sha256": "09021401e24144d1c132f4ccd68d3fcf63202a01e94802669d3f418142ef85b8", "package_type": "package", "imports": ["python_solvespace"], "depends": []}, "pytz": {"name": "pytz", "version": "2023.3", "file_name": "pytz-2023.3-py2.py3-none-any.whl", "install_dir": "site", "sha256": "8956b4ec3c708e7ac04deece299d73802ad205de58917dd8d018699ce6f8922a", "package_type": "package", "imports": ["pytz"], "depends": []}, "pywavelets": {"name": "pywavelets", "version": "1.4.1", "file_name": "PyWavelets-1.4.1-cp311-cp311-emscripten_3_1_32_wasm32.whl", "install_dir": "site", "sha256": "fab907b30efc3c02011db77a8b31abb8dfc93ce12d743271f9a9e773a4a4b096", "package_type": "package", "imports": ["pywt"], "depends": ["distutils", "numpy", "matplotlib", "scipy"], "unvendored_tests": true}, "pywavelets-tests": {"name": "pywavelets-tests", "version": "1.4.1", "depends": ["pywavelets"], "imports": [], "file_name": "pywavelets-tests.tar", "install_dir": "site", "sha256": "caf646ae2f30474d3b780a93dd96f6a3cb55f5e4165ddac4603b05b400b8394b"}, "pyxel": {"name": "pyxel", "version": "1.9.10", "file_name": "pyxel-1.9.10-cp37-abi3-emscripten_3_1_32_wasm32.whl", "install_dir": "site", "sha256": "cf49d814abbb8ee4dddcc565db9c7237a35a9c35af333ff70f08d4c54e178ee3", "package_type": "package", "imports": ["pyxel"], "depends": []}, "pyyaml": {"name": "pyyaml", "version": "6.0", "file_name": "PyYAML-6.0-cp311-cp311-emscripten_3_1_32_wasm32.whl", "install_dir": "site", "sha256": "dae78e3b055f94fc88ce7030a24d1611ecfba4289cb54930829f32a022d26e58", "package_type": "package", "imports": ["_yaml", "yaml"], "depends": []}, "rebound": {"name": "rebound", "version": "3.19.8", "file_name": "rebound-3.19.8-cp311-cp311-emscripten_3_1_32_wasm32.whl", "install_dir": "site", "sha256": "3bb195aee08c634b1f1ca8a8b0d0c264d044a60a04ee07e05f143503ea765fc3", "package_type": "package", "imports": ["rebound"], "depends": ["numpy"]}, "reboundx": {"name": "reboundx", "version": "3.7.1", "file_name": "reboundx-3.7.1-cp311-cp311-emscripten_3_1_32_wasm32.whl", "install_dir": "site", "sha256": "d835ceb1b4e39460dc9bd1a318206976667b3b57c423d1f3a362ff6d1ba8350e", "package_type": "package", "imports": ["reboundx"], "depends": ["rebound", "numpy"]}, "regex": {"name": "regex", "version": "2023.3.23", "file_name": "regex-2023.3.23-cp311-cp311-emscripten_3_1_32_wasm32.whl", "install_dir": "site", "sha256": "021e2df5fdd4ec89f47a63f5724c6b878f5378d354cfb9a0a34419015c758ce9", "package_type": "package", "imports": ["regex"], "depends": [], "unvendored_tests": true}, "regex-tests": {"name": "regex-tests", "version": "2023.3.23", "depends": ["regex"], "imports": [], "file_name": "regex-tests.tar", "install_dir": "site", "sha256": "e0f766359a78a076fe39cb66a42464f1fad28eb8a29c7449ffc9519e2d1005c7"}, "retrying": {"name": "retrying", "version": "1.3.4", "file_name": "retrying-1.3.4-py3-none-any.whl", "install_dir": "site", "sha256": "bb271f8e1a5e280c278ed14f346bce739550ea1a89f4b72defee9def545bbab9", "package_type": "package", "imports": ["retrying"], "depends": ["six"]}, "robotraconteur": {"name": "RobotRaconteur", "version": "0.15.1", "file_name": "RobotRaconteur-0.15.1-cp311-cp311-emscripten_3_1_32_wasm32.whl", "install_dir": "site", "sha256": "4d0d0bb593d9d32c3d85fa185e060418e7dc5fdf11e4959753b9cf5686b6d741", "package_type": "package", "imports": ["RobotRaconteur"], "depends": ["numpy"]}, "ruamel.yaml": {"name": "ruamel.yaml", "version": "0.17.21", "file_name": "ruamel.yaml-0.17.21-py3-none-any.whl", "install_dir": "site", "sha256": "4ac2f027bd5a29ef6eed36dd21c6bd67682c99a1a5300e3f2c9ce3814db28a58", "package_type": "package", "imports": ["ruamel"], "depends": []}, "scikit-image": {"name": "scikit-image", "version": "0.19.3", "file_name": "scikit_image-0.19.3-cp311-cp311-emscripten_3_1_32_wasm32.whl", "install_dir": "site", "sha256": "ebe3508e6d274dca12d1c8a055dfbfa5cfbdbade38ebc9f874c3d4583996435c", "package_type": "package", "imports": ["skimage"], "depends": ["packaging", "numpy", "scipy", "networkx", "pillow", "imageio", "pywavelets"], "unvendored_tests": true}, "scikit-image-tests": {"name": "scikit-image-tests", "version": "0.19.3", "depends": ["scikit-image"], "imports": [], "file_name": "scikit-image-tests.tar", "install_dir": "site", "sha256": "0634a61141b204eae40a65dbf78f0b42d50e58442c27d9219dc7976059cd1a6b"}, "scikit-learn": {"name": "scikit-learn", "version": "1.2.2", "file_name": "scikit_learn-1.2.2-cp311-cp311-emscripten_3_1_32_wasm32.whl", "install_dir": "site", "sha256": "59f304011fef31e820b8fc5508a6421b6c94e1fce84de829d5ac958124b447b4", "package_type": "package", "imports": ["sklearn"], "depends": ["scipy", "joblib", "threadpoolctl"], "unvendored_tests": true}, "scikit-learn-tests": {"name": "scikit-learn-tests", "version": "1.2.2", "depends": ["scikit-learn"], "imports": [], "file_name": "scikit-learn-tests.tar", "install_dir": "site", "sha256": "0890e7a12bdf00c16111ea4af0d3eb83881de4b9b2f5f3d5000a037bd4b82112"}, "scipy": {"name": "scipy", "version": "1.9.3", "file_name": "scipy-1.9.3-cp311-cp311-emscripten_3_1_32_wasm32.whl", "install_dir": "site", "sha256": "27c94e2785ac37a66a2b4af9251557462912f3e3392d6bb29ba389e3fd605ba5", "package_type": "package", "imports": ["scipy"], "depends": ["numpy", "clapack"], "unvendored_tests": true}, "scipy-tests": {"name": "scipy-tests", "version": "1.9.3", "depends": ["scipy"], "imports": [], "file_name": "scipy-tests.tar", "install_dir": "site", "sha256": "e1bba979f21581846fe9dffe002124b5552a260e5721fe0f6ba1ce2fff3e2991"}, "setuptools": {"name": "setuptools", "version": "67.6.1", "file_name": "setuptools-67.6.1-py3-none-any.whl", "install_dir": "site", "sha256": "278c3eecd51d4ac679856dc9abd73e97ee6063135e1236a354bc7de52b86d7b8", "package_type": "package", "imports": ["_distutils_hack", "pkg_resources", "setuptools"], "depends": ["distutils", "pyparsing"]}, "shapely": {"name": "shapely", "version": "1.8.2", "file_name": "Shapely-1.8.2-cp311-cp311-emscripten_3_1_32_wasm32.whl", "install_dir": "site", "sha256": "70cabca8876ff51b33476886c039a24f5c50d28917b42cf90af0ae5af4294cbc", "package_type": "package", "imports": ["shapely"], "depends": ["numpy"], "unvendored_tests": true}, "shapely-tests": {"name": "shapely-tests", "version": "1.8.2", "depends": ["shapely"], "imports": [], "file_name": "shapely-tests.tar", "install_dir": "site", "sha256": "242a6366d24ec7f17b659d46c4d67461a3883d5f7e318dbc1c2f3d6b3b31b352"}, "sharedlib-test": {"name": "sharedlib-test", "version": "1.0", "file_name": "sharedlib-test-1.0.zip", "install_dir": "dynlib", "sha256": "a087ba2f9f41d067f77ccefbe9c133e01bc91354163569e0dc7e5695db972632", "package_type": "shared_library", "imports": [], "shared_library": true, "depends": []}, "sharedlib-test-py": {"name": "sharedlib-test-py", "version": "1.0", "file_name": "sharedlib_test_py-1.0-cp311-cp311-emscripten_3_1_32_wasm32.whl", "install_dir": "site", "sha256": "cbfddd0e540091b8b463e907cb58792c90186103c31a1f5cfd1f66032fb7102c", "package_type": "package", "imports": ["sharedlib_test"], "depends": ["sharedlib-test"]}, "six": {"name": "six", "version": "1.16.0", "file_name": "six-1.16.0-py2.py3-none-any.whl", "install_dir": "site", "sha256": "c5910321ae1b9a168909f8a88439022be2f10957ff0fe5f8fc78eabe8390588d", "package_type": "package", "imports": ["six"], "depends": []}, "smart_open": {"name": "smart_open", "version": "6.3.0", "file_name": "smart_open-6.3.0-py3-none-any.whl", "install_dir": "site", "sha256": "8be77bda417c04ba833d9a5a9d87e3a10a9e6c8b669bc75329c9377da9b7c942", "package_type": "package", "imports": ["smart_open"], "depends": []}, "soupsieve": {"name": "soupsieve", "version": "2.4", "file_name": "soupsieve-2.4-py3-none-any.whl", "install_dir": "site", "sha256": "5fca10dd98e7b3da043ef62db7781dca5885c6a1032cd7e9de41ca25de7e4742", "package_type": "package", "imports": ["soupsieve"], "depends": []}, "sqlalchemy": {"name": "sqlalchemy", "version": "2.0.7", "file_name": "SQLAlchemy-2.0.7-cp311-cp311-emscripten_3_1_32_wasm32.whl", "install_dir": "site", "sha256": "9473547097f97dc7bb1221f117369970ea2fc090fd074b9a8aa4c59f704e9d81", "package_type": "package", "imports": ["sqlalchemy"], "depends": ["sqlite3", "typing-extensions"], "unvendored_tests": true}, "sqlalchemy-tests": {"name": "sqlalchemy-tests", "version": "2.0.7", "depends": ["sqlalchemy"], "imports": [], "file_name": "sqlalchemy-tests.tar", "install_dir": "site", "sha256": "419b95caa6cbf2a0938b89bfcfd663e8159cb07e045eb0b0060a1eb8f16854c8"}, "sqlite3": {"name": "sqlite3", "version": "1.0.0", "file_name": "sqlite3-1.0.0.zip", "install_dir": "stdlib", "sha256": "abc09bdb643dacfe2ab0ddf15bd41baa3cf1d9fc98c5f89138d01b81260e81df", "package_type": "cpython_module", "imports": ["sqlite3", "_sqlite3"], "shared_library": true, "depends": []}, "ssl": {"name": "ssl", "version": "1.0.0", "file_name": "ssl-1.0.0.zip", "install_dir": "stdlib", "sha256": "3fea509e300f99b1303179f3db7b7a150724f9e2e5fc99b9e046bc4a11b03f5f", "package_type": "cpython_module", "imports": ["ssl", "_ssl"], "shared_library": true, "depends": ["openssl"]}, "statsmodels": {"name": "statsmodels", "version": "0.13.5", "file_name": "statsmodels-0.13.5-cp311-cp311-emscripten_3_1_32_wasm32.whl", "install_dir": "site", "sha256": "6fe19b551030271fa163e8b47e747366e1d0981fe2227ba590964549bad7e73d", "package_type": "package", "imports": ["statsmodels"], "depends": ["distutils", "numpy", "scipy", "pandas", "patsy", "packaging"], "unvendored_tests": true}, "statsmodels-tests": {"name": "statsmodels-tests", "version": "0.13.5", "depends": ["statsmodels"], "imports": [], "file_name": "statsmodels-tests.tar", "install_dir": "site", "sha256": "a77d11d2a7ea87ca7914e9dc55ce9384fa0a57af36853b4dc0fac2f5292e21e7"}, "suitesparse": {"name": "suitesparse", "version": "5.11.0", "file_name": "suitesparse-5.11.0.zip", "install_dir": "dynlib", "sha256": "e0ed5240c9c5a4875685266aa3ccbe6f5acc4448cc2bb66f4c7b0056d25217e8", "package_type": "shared_library", "imports": [], "shared_library": true, "depends": ["clapack"]}, "svgwrite": {"name": "svgwrite", "version": "1.4.3", "file_name": "svgwrite-1.4.3-py3-none-any.whl", "install_dir": "site", "sha256": "e6ddbf1075161725f62710bd9c6ea0eb361da2e1f50045dc06ed06c65ee26faa", "package_type": "package", "imports": ["svgwrite"], "depends": []}, "swiglpk": {"name": "swiglpk", "version": "5.0.8", "file_name": "swiglpk-5.0.8-cp311-cp311-emscripten_3_1_32_wasm32.whl", "install_dir": "site", "sha256": "27197349cb96978d98cd54d4a08968b028a745b175e8748afd6a721de12b4d48", "package_type": "package", "imports": ["swiglpk"], "depends": []}, "sympy": {"name": "sympy", "version": "1.11.1", "file_name": "sympy-1.11.1-cp311-none-any.whl", "install_dir": "site", "sha256": "0dcf17d440ffe410ed396884fc672be0863110b92b424f0fa67bb3911411d46c", "package_type": "package", "imports": ["isympy", "sympy"], "depends": ["distutils", "mpmath"], "unvendored_tests": true}, "sympy-tests": {"name": "sympy-tests", "version": "1.11.1", "depends": ["sympy"], "imports": [], "file_name": "sympy-tests.tar", "install_dir": "site", "sha256": "8f994b1c162a2980702ee150a43a065a60350c1fef4efa60a3c3600a5d237d7b"}, "tblib": {"name": "tblib", "version": "1.7.0", "file_name": "pyodide_tblib-1.7.1-py3-none-any.whl", "install_dir": "site", "sha256": "b472e18dc46ababd3fcfebbd0bb381f5b4e482416dcc902c8e07201474aadc6f", "package_type": "package", "imports": ["tblib"], "depends": []}, "termcolor": {"name": "termcolor", "version": "2.2.0", "file_name": "termcolor-2.2.0-py3-none-any.whl", "install_dir": "site", "sha256": "c7e00cc005717824e20af677df7e58cbe622f910ce1e3073ca9d606fe14ac71d", "package_type": "package", "imports": ["termcolor"], "depends": []}, "test": {"name": "test", "version": "1.0.0", "file_name": "test-1.0.0.zip", "install_dir": "stdlib", "sha256": "b65f9d3a209eca092309f29257a8bcaccf5afe31f5300dca1cc35bec837789cb", "package_type": "cpython_module", "imports": ["test"], "shared_library": true, "depends": []}, "threadpoolctl": {"name": "threadpoolctl", "version": "3.1.0", "file_name": "threadpoolctl-3.1.0-py3-none-any.whl", "install_dir": "site", "sha256": "f484956f17217e41c7c5455f56a34c26565065a59d061f89303f81594733ddc2", "package_type": "package", "imports": ["threadpoolctl"], "depends": []}, "tomli": {"name": "tomli", "version": "2.0.1", "file_name": "tomli-2.0.1-py3-none-any.whl", "install_dir": "site", "sha256": "9881318d220d66d44c3d98cc76cdebd588a81ee09e284f7b31608643393e1e93", "package_type": "package", "imports": ["tomli"], "depends": []}, "tomli-w": {"name": "tomli-w", "version": "1.0.0", "file_name": "tomli_w-1.0.0-py3-none-any.whl", "install_dir": "site", "sha256": "8eb65fb12ee9515418a59a161e6a17f3612b233ada95b9f55ffb70d70bd60965", "package_type": "package", "imports": ["tomli_w"], "depends": []}, "toolz": {"name": "toolz", "version": "0.12.0", "file_name": "toolz-0.12.0-py3-none-any.whl", "install_dir": "site", "sha256": "d3cc6689834ca507fcd061be693aec93ad37abc78dfbab822f840115fb4ec808", "package_type": "package", "imports": ["tlz", "toolz"], "depends": [], "unvendored_tests": true}, "toolz-tests": {"name": "toolz-tests", "version": "0.12.0", "depends": ["toolz"], "imports": [], "file_name": "toolz-tests.tar", "install_dir": "site", "sha256": "6a9d4a943508264ba35cbef228db8670b5721efe3f8cb0ea011d90f4a0bc341e"}, "tqdm": {"name": "tqdm", "version": "4.65.0", "file_name": "tqdm-4.65.0-py3-none-any.whl", "install_dir": "site", "sha256": "0a1de47b3147dd1acf5ec0723c2e0b46f1931275a4847f878133f688a4e6c7bc", "package_type": "package", "imports": ["tqdm"], "depends": []}, "traits": {"name": "traits", "version": "6.4.1", "file_name": "traits-6.4.1-cp311-cp311-emscripten_3_1_32_wasm32.whl", "install_dir": "site", "sha256": "230645c15a5208f89a174548de202040d62ad740f99eab2ea9f811c9dac702b9", "package_type": "package", "imports": ["traits"], "depends": [], "unvendored_tests": true}, "traits-tests": {"name": "traits-tests", "version": "6.4.1", "depends": ["traits"], "imports": [], "file_name": "traits-tests.tar", "install_dir": "site", "sha256": "617730dbf15cd31dfe90ed2f87fe111c9b134a9c58fdf56c95910301c37d5ab0"}, "tskit": {"name": "tskit", "version": "0.5.4", "file_name": "tskit-0.5.4-cp311-cp311-emscripten_3_1_32_wasm32.whl", "install_dir": "site", "sha256": "00933fba338d75714a94d94ba71a3402f156f1a7e673f10c1b23d3fd8519c8c9", "package_type": "package", "imports": ["tskit"], "depends": ["numpy", "svgwrite", "jsonschema"]}, "typing-extensions": {"name": "typing-extensions", "version": "4.5.0", "file_name": "typing_extensions-4.5.0-py3-none-any.whl", "install_dir": "site", "sha256": "4addb634bf121f96a0c4f90f181535f5ea755a6f3d4aa84f3d92d6ba0da1128b", "package_type": "package", "imports": ["typing_extensions"], "depends": []}, "uncertainties": {"name": "uncertainties", "version": "3.1.7", "file_name": "uncertainties-3.1.7-py2.py3-none-any.whl", "install_dir": "site", "sha256": "7e89cbac98d1feabc80bd167346b87d1df62b2c067931ae40db577592aa78650", "package_type": "package", "imports": ["uncertainties"], "depends": ["future"], "unvendored_tests": true}, "uncertainties-tests": {"name": "uncertainties-tests", "version": "3.1.7", "depends": ["uncertainties"], "imports": [], "file_name": "uncertainties-tests.tar", "install_dir": "site", "sha256": "bf37f7b325142cfc414f460e5525e04f6b11573c7d38efad675e33990c59ad36"}, "unyt": {"name": "unyt", "version": "2.9.5", "file_name": "unyt-2.9.5-py2.py3-none-any.whl", "install_dir": "site", "sha256": "a0c24bb9821d3e45747d8945d35898abb89aeddce02850d346988ad88ece758d", "package_type": "package", "imports": ["unyt"], "depends": ["numpy", "sympy"], "unvendored_tests": true}, "unyt-tests": {"name": "unyt-tests", "version": "2.9.5", "depends": ["unyt"], "imports": [], "file_name": "unyt-tests.tar", "install_dir": "site", "sha256": "cbf882236cda959544d196395529371d7594f27eaec3a21b3af15d25c826cd19"}, "webencodings": {"name": "webencodings", "version": "0.5.1", "file_name": "webencodings-0.5.1-py2.py3-none-any.whl", "install_dir": "site", "sha256": "6f5fe48f78b5f69e2c0ecdbc38b38f1c8b84ab1053895fe4a0f38dcb0b331bee", "package_type": "package", "imports": ["webencodings"], "depends": []}, "wrapt": {"name": "wrapt", "version": "1.15.0", "file_name": "wrapt-1.15.0-cp311-cp311-emscripten_3_1_32_wasm32.whl", "install_dir": "site", "sha256": "a904bd920209b7680b88efbcbd3f7c1c381191d15790072cfa24e1e67e9cf6bd", "package_type": "package", "imports": ["wrapt"], "depends": []}, "xarray": {"name": "xarray", "version": "2023.3.0", "file_name": "xarray-2023.3.0-py3-none-any.whl", "install_dir": "site", "sha256": "97feeb8e25d920af561491cb1cb9c4e77ea17e982f95511ca61c8ce927ad055b", "package_type": "package", "imports": ["xarray"], "depends": ["numpy", "packaging", "pandas"], "unvendored_tests": true}, "xarray-tests": {"name": "xarray-tests", "version": "2023.3.0", "depends": ["xarray"], "imports": [], "file_name": "xarray-tests.tar", "install_dir": "site", "sha256": "fac147b74685412161a01640be42683fffed098ef0c29843649db0038600598d"}, "xgboost": {"name": "xgboost", "version": "1.6.1", "file_name": "xgboost-1.6.1-cp311-cp311-emscripten_3_1_32_wasm32.whl", "install_dir": "site", "sha256": "b09199fa94cea94b9b1fceee49832316b698c86236328f3b072dc2e4fbfc8617", "package_type": "package", "imports": ["xgboost"], "depends": ["numpy", "scipy", "setuptools"]}, "xlrd": {"name": "xlrd", "version": "2.0.1", "file_name": "xlrd-2.0.1-py2.py3-none-any.whl", "install_dir": "site", "sha256": "70f81a7a0edd2083dd26c1cd6afa6e584d7163579574c4db4894d22731ad4201", "package_type": "package", "imports": ["xlrd"], "depends": []}, "yarl": {"name": "yarl", "version": "1.8.2", "file_name": "yarl-1.8.2-cp311-cp311-emscripten_3_1_32_wasm32.whl", "install_dir": "site", "sha256": "1198d8cb1ec8f189078d027776fe5d97da3b39ed40035a18fde7f1bead733b10", "package_type": "package", "imports": ["yarl"], "depends": ["multidict", "idna"]}, "yt": {"name": "yt", "version": "4.1.4", "file_name": "yt-4.1.4-cp311-cp311-emscripten_3_1_32_wasm32.whl", "install_dir": "site", "sha256": "c6face3d981e3969332238067393447a294178da8d01943459568ba12559168b", "package_type": "package", "imports": ["yt"], "depends": ["numpy", "matplotlib", "sympy", "setuptools", "packaging", "unyt", "cmyt", "colorspacious", "tqdm", "tomli", "tomli-w"]}, "zarr": {"name": "zarr", "version": "2.13.3", "file_name": "zarr-2.13.3-py3-none-any.whl", "install_dir": "site", "sha256": "5ec741cc94a8c8969e0df5236a34441f2450b7194741abf59b20d5277b652fc6", "package_type": "package", "imports": ["zarr"], "depends": ["numpy", "asciitree", "numcodecs"], "unvendored_tests": true}, "zarr-tests": {"name": "zarr-tests", "version": "2.13.3", "depends": ["zarr"], "imports": [], "file_name": "zarr-tests.tar", "install_dir": "site", "sha256": "99cb7e2989a61ab3abf02fe56b54c99a391e6d938cf72a620db1d080a444cfe5"}}}
\ No newline at end of file
+{"info": {"arch": "wasm32", "platform": "emscripten_3_1_32", "version": "0.23.0", "python": "3.11.2"}, "packages": {"asciitree": {"name": "asciitree", "version": "0.3.3", "file_name": "asciitree-0.3.3-py3-none-any.whl", "install_dir": "site", "sha256": "3227e4d3cea31fd6c9d14cc405ab9addad5564f11cc1e5c5adf53dbb1355f98c", "package_type": "package", "imports": ["asciitree"], "depends": []}, "astropy": {"name": "astropy", "version": "5.2.2", "file_name": "astropy-5.2.2-cp311-cp311-emscripten_3_1_32_wasm32.whl", "install_dir": "site", "sha256": "d8afca8f58c08e3f5f12730cc69176f68fb5b3270251e2465209cb4f65eef888", "package_type": "package", "imports": ["astropy"], "depends": ["distutils", "packaging", "numpy", "pyerfa", "pyyaml"]}, "atomicwrites": {"name": "atomicwrites", "version": "1.4.1", "file_name": "atomicwrites-1.4.1-py2.py3-none-any.whl", "install_dir": "site", "sha256": "73b0a4f0221e0232ab1113c0602ae54b690c4e805d0e68899e5e59586394ee8d", "package_type": "package", "imports": ["atomicwrites"], "depends": []}, "attrs": {"name": "attrs", "version": "22.2.0", "file_name": "attrs-22.2.0-py3-none-any.whl", "install_dir": "site", "sha256": "87729a89aec4f87e550915ed125610b9484734ca6a59ce5c9c92a084c81e7d77", "package_type": "package", "imports": ["attr", "attrs"], "depends": ["six"]}, "autograd": {"name": "autograd", "version": "1.5", "file_name": "autograd-1.5-py3-none-any.whl", "install_dir": "site", "sha256": "aa9dfd568df8cb41f6fe839881ddcb7aa64499aff10e6c9478401b1bb662b1e8", "package_type": "package", "imports": ["autograd"], "depends": ["numpy", "future"], "unvendored_tests": true}, "autograd-tests": {"name": "autograd-tests", "version": "1.5", "depends": ["autograd"], "imports": [], "file_name": "autograd-tests.tar", "install_dir": "site", "sha256": "d59d1445e73d6efba707d6b1d3505fc181eb66b12f540b0143b2956a614f181e"}, "bcrypt": {"name": "bcrypt", "version": "4.0.1", "file_name": "bcrypt-4.0.1-cp311-cp311-emscripten_3_1_32_wasm32.whl", "install_dir": "site", "sha256": "b8591c5c4579e0ee2d58de32402caf09b53b7d76b31240492eb66650fe0911e1", "package_type": "package", "imports": ["bcrypt"], "depends": []}, "beautifulsoup4": {"name": "beautifulsoup4", "version": "4.12.0", "file_name": "beautifulsoup4-4.12.0-py3-none-any.whl", "install_dir": "site", "sha256": "ddef8815476935b88d429b976bef3cc752c690b8fef5ddefebef437d9c4ba85b", "package_type": "package", "imports": ["bs4"], "depends": ["soupsieve"], "unvendored_tests": true}, "beautifulsoup4-tests": {"name": "beautifulsoup4-tests", "version": "4.12.0", "depends": ["beautifulsoup4"], "imports": [], "file_name": "beautifulsoup4-tests.tar", "install_dir": "site", "sha256": "1720a309a4be23ab22e71f36052ab1b1b9b10716f044cead59b08102fe25f143"}, "biopython": {"name": "biopython", "version": "1.81", "file_name": "biopython-1.81-cp311-cp311-emscripten_3_1_32_wasm32.whl", "install_dir": "site", "sha256": "6b3e993bf6fe3e20fc6eab2a3398855c6ca8b252aaac44204c6e47c8be42eeb9", "package_type": "package", "imports": ["Bio", "BioSQL"], "depends": ["numpy"]}, "bitarray": {"name": "bitarray", "version": "2.7.3", "file_name": "bitarray-2.7.3-cp311-cp311-emscripten_3_1_32_wasm32.whl", "install_dir": "site", "sha256": "4bceef37ae7c6dc5040a9025f92cab4a556589392828eee522d9e9a0ce786f9a", "package_type": "package", "imports": ["bitarray"], "depends": [], "unvendored_tests": true}, "bitarray-tests": {"name": "bitarray-tests", "version": "2.7.3", "depends": ["bitarray"], "imports": [], "file_name": "bitarray-tests.tar", "install_dir": "site", "sha256": "6352edf08b5c84ea3f7f52d1cc3ddb1920d8f857a97733449441838d37b10ea3"}, "bleach": {"name": "bleach", "version": "6.0.0", "file_name": "bleach-6.0.0-py3-none-any.whl", "install_dir": "site", "sha256": "29ff5c9c74b623cc2832597568c44a515378225dcc4fdf914742c2cae81ddeb4", "package_type": "package", "imports": ["bleach"], "depends": ["webencodings", "packaging", "six"]}, "bokeh": {"name": "bokeh", "version": "3.1.0", "file_name": "bokeh-3.1.0-py3-none-any.whl", "install_dir": "site", "sha256": "92c4f210bebbff281dd817f677718ce4c6410433565a4322d9392e1c62206f06", "package_type": "package", "imports": ["bokeh"], "depends": ["distutils", "numpy", "jinja2", "pillow", "python-dateutil", "six", "typing-extensions", "pyyaml"]}, "boost-histogram": {"name": "boost-histogram", "version": "1.3.2", "file_name": "boost_histogram-1.3.2-cp311-cp311-emscripten_3_1_32_wasm32.whl", "install_dir": "site", "sha256": "51ffcf2b5a17b45fac68d35f0b1051f4345c26f4872295cb7af21065ef340fff", "package_type": "package", "imports": ["boost_histogram"], "depends": ["numpy"]}, "brotli": {"name": "brotli", "version": "1.0.9", "file_name": "Brotli-1.0.9-cp311-cp311-emscripten_3_1_32_wasm32.whl", "install_dir": "site", "sha256": "229252e20a777e7130620a26e0ec6e8ecabe64801ddcf3ea26a8024c9cfac685", "package_type": "package", "imports": ["brotli"], "depends": []}, "cbor-diag": {"name": "cbor-diag", "version": "1.0.0", "file_name": "cbor_diag-1.0.0-cp311-cp311-emscripten_3_1_32_wasm32.whl", "install_dir": "site", "sha256": "d8d677c6e86fc2f44da5a658a1b93d252872a7f4b7557082966fcd3df19e808b", "package_type": "package", "imports": ["cbor_diag"], "depends": []}, "certifi": {"name": "certifi", "version": "2022.12.7", "file_name": "certifi-2022.12.7-py3-none-any.whl", "install_dir": "site", "sha256": "11f7f10ad7b9cccc6319adfe8d21c79b90460c0847033f6f8f1bb35bb5caac97", "package_type": "package", "imports": ["certifi"], "depends": []}, "cffi": {"name": "cffi", "version": "1.15.1", "file_name": "cffi-1.15.1-cp311-cp311-emscripten_3_1_32_wasm32.whl", "install_dir": "site", "sha256": "c477eb09fe4d6af45675a32dab29e7a35e2901bfbaae77df5d4502ae2007748f", "package_type": "package", "imports": ["cffi"], "depends": ["pycparser"]}, "cffi_example": {"name": "cffi_example", "version": "0.1", "file_name": "cffi_example-0.1-cp311-cp311-emscripten_3_1_32_wasm32.whl", "install_dir": "site", "sha256": "8010c90203e0e05741a79d120b7fa1884244825424b9972231f869c8868c3279", "package_type": "package", "imports": ["cffi_example"], "depends": ["cffi"]}, "cftime": {"name": "cftime", "version": "1.6.2", "file_name": "cftime-1.6.2-cp311-cp311-emscripten_3_1_32_wasm32.whl", "install_dir": "site", "sha256": "e856d5297b107b204e66722010be4146cb37cb292b1637e09cf559e0377d3b3b", "package_type": "package", "imports": ["cftime"], "depends": ["numpy"]}, "clapack": {"name": "CLAPACK", "version": "3.2.1", "file_name": "CLAPACK-3.2.1.zip", "install_dir": "dynlib", "sha256": "783251a92704fd209aea19b65b1ecaa9fa2448abd2295aa94a1652f10677d6f8", "package_type": "shared_library", "imports": [], "shared_library": true, "depends": []}, "click": {"name": "click", "version": "8.1.3", "file_name": "click-8.1.3-py3-none-any.whl", "install_dir": "site", "sha256": "dfc7a1facb7d041286bee09035abfa65eaba138b83ae88bccf7ba31f63995f5b", "package_type": "package", "imports": ["click"], "depends": []}, "cligj": {"name": "cligj", "version": "0.7.2", "file_name": "cligj-0.7.2-py3-none-any.whl", "install_dir": "site", "sha256": "80eb125c1dadde27093bd433a08334b29774fad1140e44c763ef05b9fef24d45", "package_type": "package", "imports": ["cligj"], "depends": ["click"]}, "cloudpickle": {"name": "cloudpickle", "version": "2.2.1", "file_name": "cloudpickle-2.2.1-py3-none-any.whl", "install_dir": "site", "sha256": "305864ce136631891dd0dc831096b7d7b48267189899423324686919bf4a29e8", "package_type": "package", "imports": ["cloudpickle"], "depends": []}, "cmyt": {"name": "cmyt", "version": "1.1.3", "file_name": "cmyt-1.1.3-py3-none-any.whl", "install_dir": "site", "sha256": "40f5bd559e64d51db68c7d5855e87c2edf3065978f38932d264a2a9108dd7143", "package_type": "package", "imports": ["cmyt"], "depends": ["colorspacious", "matplotlib", "more-itertools", "numpy"], "unvendored_tests": true}, "cmyt-tests": {"name": "cmyt-tests", "version": "1.1.3", "depends": ["cmyt"], "imports": [], "file_name": "cmyt-tests.tar", "install_dir": "site", "sha256": "fb6b17e9f2c177ed69a0271944f7ec25156b3e3f820508c1bf11b71997e0063b"}, "colorspacious": {"name": "colorspacious", "version": "1.1.2", "file_name": "colorspacious-1.1.2-py2.py3-none-any.whl", "install_dir": "site", "sha256": "fd832c46b0f32f8ff15e55cf2785b70891eb5e0ae67144d1beb0a6595eee62b0", "package_type": "package", "imports": ["colorspacious"], "depends": ["numpy"]}, "coverage": {"name": "coverage", "version": "7.2.2", "file_name": "coverage-7.2.2-cp311-cp311-emscripten_3_1_32_wasm32.whl", "install_dir": "site", "sha256": "23585fb0c5edac97afe73319428a6f543da656dacf311f365f02a31b43abc5ab", "package_type": "package", "imports": ["coverage"], "depends": ["sqlite3"]}, "cpp-exceptions-test": {"name": "cpp-exceptions-test", "version": "0.1", "file_name": "cpp-exceptions-test-0.1.zip", "install_dir": "dynlib", "sha256": "2a85541ca9a469ae6e1cd00122abf66f2d720204ce02e82f7ed0900ed9841865", "package_type": "shared_library", "imports": [], "shared_library": true, "depends": []}, "cramjam": {"name": "cramjam", "version": "2.6.2", "file_name": "cramjam-2.6.2-cp311-cp311-emscripten_3_1_32_wasm32.whl", "install_dir": "site", "sha256": "38faf6d68ca2aabae9facefdb072b15db0b95d6e1368d6c126f6c8fca02167d1", "package_type": "package", "imports": ["cramjam"], "depends": []}, "cryptography": {"name": "cryptography", "version": "39.0.2", "file_name": "cryptography-39.0.2-cp311-cp311-emscripten_3_1_32_wasm32.whl", "install_dir": "site", "sha256": "d852b266cab3fa3733a1adec0b723e9d058ed840d9bcba725ef77d4638c47b0d", "package_type": "package", "imports": ["cryptography"], "depends": ["openssl", "six", "cffi"]}, "cssselect": {"name": "cssselect", "version": "1.2.0", "file_name": "cssselect-1.2.0-py2.py3-none-any.whl", "install_dir": "site", "sha256": "2ca7f13b13d6be6f32f77e907d2411279e5c6db4e551e98a1862e3760e270f39", "package_type": "package", "imports": ["cssselect"], "depends": []}, "cycler": {"name": "cycler", "version": "0.11.0", "file_name": "cycler-0.11.0-py3-none-any.whl", "install_dir": "site", "sha256": "197c5459b40d620f9d2befbc2023a03657d2738fc8da5d183b911761a3fe66d3", "package_type": "package", "imports": ["cycler"], "depends": ["six"]}, "cytoolz": {"name": "cytoolz", "version": "0.12.1", "file_name": "cytoolz-0.12.1-cp311-cp311-emscripten_3_1_32_wasm32.whl", "install_dir": "site", "sha256": "46805a49766889db98adf5ca21f85f218bc1012f325a4cd56cc625f5a399a16b", "package_type": "package", "imports": ["cytoolz"], "depends": ["nose", "toolz"], "unvendored_tests": true}, "cytoolz-tests": {"name": "cytoolz-tests", "version": "0.12.1", "depends": ["cytoolz"], "imports": [], "file_name": "cytoolz-tests.tar", "install_dir": "site", "sha256": "56270157dcc41f0c787d0a60b39b5e11dde358935ef50a4d09a9933a9988de0b"}, "decorator": {"name": "decorator", "version": "5.1.1", "file_name": "decorator-5.1.1-py3-none-any.whl", "install_dir": "site", "sha256": "b7e51fb9ae0ee80f190e61258b9beff946100a581b0e11662996e19a2a030766", "package_type": "package", "imports": ["decorator"], "depends": []}, "demes": {"name": "demes", "version": "0.2.2", "file_name": "demes-0.2.2-py3-none-any.whl", "install_dir": "site", "sha256": "7d54c163a1980e0451c966d4f0ebab2956292924c2fd2214333f2b62bf039936", "package_type": "package", "imports": ["demes"], "depends": ["attrs", "ruamel.yaml"]}, "distlib": {"name": "distlib", "version": "0.3.6", "file_name": "distlib-0.3.6-py2.py3-none-any.whl", "install_dir": "site", "sha256": "e0189a9a04533d524daebf1732569679928aecbe9b7748276e822debc682334b", "package_type": "package", "imports": ["distlib"], "depends": []}, "distutils": {"name": "distutils", "version": "1.0.0", "file_name": "distutils-1.0.0.zip", "install_dir": "stdlib", "sha256": "a49fe5e5f3572f6f1e2bf798d57ceba89d094c43e5ed7fa3f6be2ed7721a3f6d", "package_type": "cpython_module", "imports": ["distutils"], "shared_library": true, "depends": []}, "docutils": {"name": "docutils", "version": "0.19", "file_name": "docutils-0.19-py3-none-any.whl", "install_dir": "site", "sha256": "c805431ee04190a1786a6d0e4590f057a526fe66227ac5f1628b0a9587a01574", "package_type": "package", "imports": ["docutils"], "depends": []}, "exceptiongroup": {"name": "exceptiongroup", "version": "1.1.1", "file_name": "exceptiongroup-1.1.1-py3-none-any.whl", "install_dir": "site", "sha256": "d902f7e324dc8b1372fa238fcede12c569f6ea6da4c639b0012237f5335318fc", "package_type": "package", "imports": ["exceptiongroup"], "depends": []}, "fastparquet": {"name": "fastparquet", "version": "2023.2.0", "file_name": "fastparquet-2023.2.0-cp311-cp311-emscripten_3_1_32_wasm32.whl", "install_dir": "site", "sha256": "9ac4ad704ba3e18f69044e10d30df155eff9b511b8719f1ada9d2b0eb67169a9", "package_type": "package", "imports": ["fastparquet"], "depends": ["cramjam", "numpy", "pandas", "fsspec", "packaging"]}, "fiona": {"name": "fiona", "version": "1.8.22", "file_name": "Fiona-1.8.22-cp311-cp311-emscripten_3_1_32_wasm32.whl", "install_dir": "site", "sha256": "b39ec8d7210df7e9d1b80029417f580c6b85aaff692480f7a8ba2db2d1e279b9", "package_type": "package", "imports": ["fiona"], "depends": ["attrs", "certifi", "setuptools", "six", "click", "cligj"]}, "fonttools": {"name": "fonttools", "version": "4.39.3", "file_name": "fonttools-4.39.3-py3-none-any.whl", "install_dir": "site", "sha256": "862d54e516c69ecfe6222795c39fffbd3bbe334edb7f809efb8e2545b0396f0a", "package_type": "package", "imports": ["fontTools"], "depends": []}, "fpcast-test": {"name": "fpcast-test", "version": "0.1", "file_name": "fpcast_test-0.1.1-cp311-cp311-emscripten_3_1_32_wasm32.whl", "install_dir": "site", "sha256": "ac732521cd204cfb98011e70f4372c6103371b41a39c12ff8f4d0d2d312bdfed", "package_type": "package", "imports": ["fpcast_test"], "depends": []}, "fsspec": {"name": "fsspec", "version": "2023.3.0", "file_name": "fsspec-2023.3.0-py3-none-any.whl", "install_dir": "site", "sha256": "6a7b8ef08ec87e4ef0038ed20258fc0cf1df7483eb1b2bdb9ba23feb20e93267", "package_type": "package", "imports": ["fsspec"], "depends": [], "unvendored_tests": true}, "fsspec-tests": {"name": "fsspec-tests", "version": "2023.3.0", "depends": ["fsspec"], "imports": [], "file_name": "fsspec-tests.tar", "install_dir": "site", "sha256": "b86bd5ff594014325b9d0983a586178ebb8226acc3f6e7be70ade4bc1696ea8c"}, "future": {"name": "future", "version": "0.18.3", "file_name": "future-0.18.3-py3-none-any.whl", "install_dir": "site", "sha256": "6f2a4b6423dec50734ead1f9a43989d7b0d12846a43903f9c2f7314e72f815b3", "package_type": "package", "imports": ["future"], "depends": [], "unvendored_tests": true}, "future-tests": {"name": "future-tests", "version": "0.18.3", "depends": ["future"], "imports": [], "file_name": "future-tests.tar", "install_dir": "site", "sha256": "1ccb0244fa5914f56a6b03428ec42409ca39096f0f5b4b0ae512f989123b0789"}, "galpy": {"name": "galpy", "version": "1.8.3", "file_name": "galpy-1.8.3-cp311-cp311-emscripten_3_1_32_wasm32.whl", "install_dir": "site", "sha256": "5070c291c2a8192af8befef7da293090b9c71ff07961dd41f8e1006be8549120", "package_type": "package", "imports": ["galpy"], "depends": ["numpy", "scipy", "matplotlib", "astropy", "future", "setuptools"]}, "gdal": {"name": "gdal", "version": "3.5.1", "file_name": "gdal-3.5.1.zip", "install_dir": "dynlib", "sha256": "0824c1e634214615999fadc1cfe5412f203c4c7f8eb8db3aa1dd5213f4f1d342", "package_type": "shared_library", "imports": [], "shared_library": true, "depends": ["geos"]}, "gensim": {"name": "gensim", "version": "4.3.1", "file_name": "gensim-4.3.1-cp311-cp311-emscripten_3_1_32_wasm32.whl", "install_dir": "site", "sha256": "c69eeede4a431211258739e5ede260a432404120b945b0f0ccb74a41b72ce327", "package_type": "package", "imports": ["gensim"], "depends": ["numpy", "scipy", "six", "smart_open"], "unvendored_tests": true}, "gensim-tests": {"name": "gensim-tests", "version": "4.3.1", "depends": ["gensim"], "imports": [], "file_name": "gensim-tests.tar", "install_dir": "site", "sha256": "d73748ff6e3c702dc1e4c0b7c53009e7460500278e5e301e4a89c182d1e86955"}, "geopandas": {"name": "geopandas", "version": "0.12.2", "file_name": "geopandas-0.12.2-py3-none-any.whl", "install_dir": "site", "sha256": "0d35a36cd5c0e27ddf10aa4058f543726ffcc682da74c2dd2c22877184f8d1bb", "package_type": "package", "imports": ["geopandas"], "depends": ["shapely", "fiona", "pyproj", "packaging", "pandas"], "unvendored_tests": true}, "geopandas-tests": {"name": "geopandas-tests", "version": "0.12.2", "depends": ["geopandas"], "imports": [], "file_name": "geopandas-tests.tar", "install_dir": "site", "sha256": "5375752884c1f8c8f0e1c9280b8e739812f832d7c720883e9b510a213179f551"}, "geos": {"name": "geos", "version": "3.10.3", "file_name": "geos-3.10.3.zip", "install_dir": "dynlib", "sha256": "79c163c44476e4eb7ccd904de8295cd8e2dd2e2f55a304264f2b4b55b84be852", "package_type": "shared_library", "imports": [], "shared_library": true, "depends": []}, "gmpy2": {"name": "gmpy2", "version": "2.1.5", "file_name": "gmpy2-2.1.5-cp311-cp311-emscripten_3_1_32_wasm32.whl", "install_dir": "site", "sha256": "d9a00806b6d6693884b4fc7b11a375427b4458c4b1a723e2578f6514f90ba434", "package_type": "package", "imports": ["gmpy2"], "depends": []}, "gsw": {"name": "gsw", "version": "3.6.16", "file_name": "gsw-3.6.16-cp311-cp311-emscripten_3_1_32_wasm32.whl", "install_dir": "site", "sha256": "314e336f6f5179ee10ab3f88b0a2a0e547b07a983ce362375be8e3f74eb63efa", "package_type": "package", "imports": ["gsw"], "depends": ["numpy"], "unvendored_tests": true}, "gsw-tests": {"name": "gsw-tests", "version": "3.6.16", "depends": ["gsw"], "imports": [], "file_name": "gsw-tests.tar", "install_dir": "site", "sha256": "0997fa5a0e6faf3b2bd7a0512d9609e214d78633e8420e40e26098a3dd18f3a4"}, "h5py": {"name": "h5py", "version": "3.7.0", "file_name": "h5py-3.7.0-cp311-cp311-emscripten_3_1_32_wasm32.whl", "install_dir": "site", "sha256": "d034c833d5fea0afe54110b9dd4a15d26338206f1a32abd8fd3772cb2e7b64c7", "package_type": "package", "imports": ["h5py"], "depends": ["numpy", "pkgconfig"], "unvendored_tests": true}, "h5py-tests": {"name": "h5py-tests", "version": "3.7.0", "depends": ["h5py"], "imports": [], "file_name": "h5py-tests.tar", "install_dir": "site", "sha256": "c717c82c3bc024ba56aa8108d87a0d38126e0c9c1a82a61c018abe0617e7ac93"}, "hashlib": {"name": "hashlib", "version": "1.0.0", "file_name": "hashlib-1.0.0.zip", "install_dir": "stdlib", "sha256": "81147ac43fe1d3bcdcefd5d4c8874b376a3133b30d40ea9fa800698d3ec79a18", "package_type": "cpython_module", "imports": ["_hashlib"], "shared_library": true, "depends": ["openssl"]}, "html5lib": {"name": "html5lib", "version": "1.1", "file_name": "html5lib-1.1-py2.py3-none-any.whl", "install_dir": "site", "sha256": "dcbd0f5f3c41d33c24a1f714be09b2d3f1bc1a2ddc50bd3013a8b733fb656cfc", "package_type": "package", "imports": ["html5lib"], "depends": ["webencodings", "six"]}, "idna": {"name": "idna", "version": "3.4", "file_name": "idna-3.4-py3-none-any.whl", "install_dir": "site", "sha256": "a6721bc93dd5ab296141ca9f01259f81ad6befa9976c93cd2cfb855557aa67f6", "package_type": "package", "imports": ["idna"], "depends": []}, "imageio": {"name": "imageio", "version": "2.27.0", "file_name": "imageio-2.27.0-py3-none-any.whl", "install_dir": "site", "sha256": "b9deee8ae6a9fad2c18a955b184c5550f19400d8cad28b0426f389bb4f992a5e", "package_type": "package", "imports": ["imageio"], "depends": ["numpy", "pillow"]}, "iniconfig": {"name": "iniconfig", "version": "2.0.0", "file_name": "iniconfig-2.0.0-py3-none-any.whl", "install_dir": "site", "sha256": "67bdeb01e8a63d0fe748a8259744d7a8ed41a5d452f3543409cedea8a50cf128", "package_type": "package", "imports": ["iniconfig"], "depends": []}, "jedi": {"name": "jedi", "version": "0.18.2", "file_name": "jedi-0.18.2-py2.py3-none-any.whl", "install_dir": "site", "sha256": "fee5550e78afd9957c6af720d740cbefb74b647c95fbfd22015f40c88a63a04b", "package_type": "package", "imports": ["jedi"], "depends": ["parso"], "unvendored_tests": true}, "jedi-tests": {"name": "jedi-tests", "version": "0.18.2", "depends": ["jedi"], "imports": [], "file_name": "jedi-tests.tar", "install_dir": "site", "sha256": "b155a6a6bb5ff7d2114888a10ed678e419c70d2b8db1b0bdba59d0e6d6e17e20"}, "jinja2": {"name": "Jinja2", "version": "3.1.2", "file_name": "Jinja2-3.1.2-py3-none-any.whl", "install_dir": "site", "sha256": "1be3ff86336ea94a8db3ae0474e63b574315784d056a51d80992fbf8916cecb8", "package_type": "package", "imports": ["jinja2"], "depends": ["markupsafe"]}, "joblib": {"name": "joblib", "version": "1.2.0", "file_name": "joblib-1.2.0-py3-none-any.whl", "install_dir": "site", "sha256": "82dd51f29e81d0e9fa3c91c1f66f1042912db41fa05683bac9bc3c1f2b8ca364", "package_type": "package", "imports": ["joblib"], "depends": ["distutils"], "unvendored_tests": true}, "joblib-tests": {"name": "joblib-tests", "version": "1.2.0", "depends": ["joblib"], "imports": [], "file_name": "joblib-tests.tar", "install_dir": "site", "sha256": "2f3ac7d3a509a51c7283a602d30f8f42359a892adaa402d90c9d9ee7a0902008"}, "jsonschema": {"name": "jsonschema", "version": "4.17.3", "file_name": "jsonschema-4.17.3-py3-none-any.whl", "install_dir": "site", "sha256": "274fbf42f5d39a60107ecaa433068f6d9bc9281a5ab81716ccb94d2764ef8996", "package_type": "package", "imports": ["jsonschema"], "depends": ["attrs", "pyrsistent"], "unvendored_tests": true}, "jsonschema-tests": {"name": "jsonschema-tests", "version": "4.17.3", "depends": ["jsonschema"], "imports": [], "file_name": "jsonschema-tests.tar", "install_dir": "site", "sha256": "29c714762f6a6968acca6419af5f0b23e4d3ee9c86eaaacfefdfbcc00350211a"}, "kiwisolver": {"name": "kiwisolver", "version": "1.4.4", "file_name": "kiwisolver-1.4.4-cp311-cp311-emscripten_3_1_32_wasm32.whl", "install_dir": "site", "sha256": "ce236b511b5bcaa6d56d15bc297896e513b6e3ef014a0f755f66114c44d0b765", "package_type": "package", "imports": ["kiwisolver"], "depends": []}, "lazy-object-proxy": {"name": "lazy-object-proxy", "version": "1.9.0", "file_name": "lazy_object_proxy-1.9.0-cp311-cp311-emscripten_3_1_32_wasm32.whl", "install_dir": "site", "sha256": "b21ea761012c4c7cb956995996ed902a85a5388d5ee5a4295030e306bdd12628", "package_type": "package", "imports": ["lazy_object_proxy"], "depends": []}, "libhdf5": {"name": "libhdf5", "version": "1.12.1", "file_name": "libhdf5-1.12.1.zip", "install_dir": "dynlib", "sha256": "751c73280607e0ff018ef30eb22f3f29132021a5acfb41970aa3b5bea262b9a0", "package_type": "shared_library", "imports": [], "shared_library": true, "depends": []}, "libheif": {"name": "libheif", "version": "1.12.0", "file_name": "libheif-1.12.0.zip", "install_dir": "dynlib", "sha256": "f6579e085c47b954d0c480250865dcd96afce0f8a2f70d94d9070e9fc674cbb8", "package_type": "shared_library", "imports": [], "shared_library": true, "depends": []}, "libmagic": {"name": "libmagic", "version": "5.42", "file_name": "libmagic-5.42.zip", "install_dir": "dynlib", "sha256": "ee7d20e5bff15df0c557cdec877a82655bc4d06c6794e88927df4839447459cd", "package_type": "shared_library", "imports": [], "shared_library": true, "depends": []}, "lightgbm": {"name": "lightgbm", "version": "3.3.5", "file_name": "lightgbm-3.3.5-py3-none-any.whl", "install_dir": "site", "sha256": "b5645871de43d853b8cc4fc2763d82d8bc94c2e094b3a079fa8d9d1154be51ab", "package_type": "package", "imports": ["lightgbm"], "depends": ["numpy", "scipy", "scikit-learn"]}, "logbook": {"name": "logbook", "version": "1.5.3", "file_name": "Logbook-1.5.3-cp311-cp311-emscripten_3_1_32_wasm32.whl", "install_dir": "site", "sha256": "6f17016a06147ddee5962c079c70edbdc32b24395acf2195be473267f2e32b0a", "package_type": "package", "imports": ["logbook"], "depends": []}, "lxml": {"name": "lxml", "version": "4.9.2", "file_name": "lxml-4.9.2-cp311-cp311-emscripten_3_1_32_wasm32.whl", "install_dir": "site", "sha256": "1f1da90f0a39aac6cc5ebd17b38ef6d96ce30fc56771b2e2082003ffda0dff4b", "package_type": "package", "imports": ["lxml"], "depends": []}, "lzma": {"name": "lzma", "version": "1.0.0", "file_name": "lzma-1.0.0.zip", "install_dir": "stdlib", "sha256": "6c7c2be0f7e4db40d5f8a86b42772b15dfbb0d5b2f2548bfc8fb62116379c644", "package_type": "cpython_module", "imports": ["lzma", "_lzma"], "shared_library": true, "depends": []}, "markupsafe": {"name": "MarkupSafe", "version": "2.1.2", "file_name": "MarkupSafe-2.1.2-cp311-cp311-emscripten_3_1_32_wasm32.whl", "install_dir": "site", "sha256": "3ff0cc66da9d27c0dbf40fa5151e3b4faac99ced498ccc5b60f8cc7e955727ca", "package_type": "package", "imports": ["markupsafe"], "depends": []}, "matplotlib": {"name": "matplotlib", "version": "3.5.2", "file_name": "matplotlib-3.5.2-cp311-cp311-emscripten_3_1_32_wasm32.whl", "install_dir": "site", "sha256": "75fc1e192aa5270bea9b0af3311cd6ddddbf6bfe72f885ace1ecf73ec64cde36", "package_type": "package", "imports": ["pylab", "mpl_toolkits", "matplotlib"], "depends": ["cycler", "fonttools", "kiwisolver", "numpy", "packaging", "pillow", "pyparsing", "python-dateutil", "pytz", "matplotlib-pyodide"], "unvendored_tests": true}, "matplotlib-pyodide": {"name": "matplotlib-pyodide", "version": "0.1.1", "file_name": "matplotlib_pyodide-0.1.1-py3-none-any.whl", "install_dir": "site", "sha256": "65689a4541ef09f0cbce5440a59fc75b47e3d5d03b4dd0813f7f6e1013b4016a", "package_type": "package", "imports": ["matplotlib_pyodide"], "depends": []}, "matplotlib-tests": {"name": "matplotlib-tests", "version": "3.5.2", "depends": ["matplotlib"], "imports": [], "file_name": "matplotlib-tests.tar", "install_dir": "site", "sha256": "75b3d27f64c2db671a31d40b86630e089b2e656b38c17ff4a832ab8188d5ccbd"}, "micropip": {"name": "micropip", "version": "0.3.0", "file_name": "micropip-0.3.0-py3-none-any.whl", "install_dir": "site", "sha256": "e5441ffc89ee3f297a8a2eeaaf71d76f2bd7b1404d3f6082646afdb0f4e9f5f2", "package_type": "package", "imports": ["micropip"], "depends": ["packaging"]}, "mne": {"name": "mne", "version": "1.3.1", "file_name": "mne-1.3.1-py3-none-any.whl", "install_dir": "site", "sha256": "80d17ba94d2588498c2dbe125fc45c4012140f8ce0debd6492a2b162e4bb7abb", "package_type": "package", "imports": ["mne"], "depends": ["distutils", "numpy", "scipy", "setuptools", "decorator"], "unvendored_tests": true}, "mne-tests": {"name": "mne-tests", "version": "1.3.1", "depends": ["mne"], "imports": [], "file_name": "mne-tests.tar", "install_dir": "site", "sha256": "6474a0480b86ad443f8a5c8b5a4419a075aed654e50a5b09d189ab8a3fe0ebed"}, "more-itertools": {"name": "more-itertools", "version": "9.1.0", "file_name": "more_itertools-9.1.0-py3-none-any.whl", "install_dir": "site", "sha256": "2da02645970f671b8b140e52f0ba8d1a603c5f5af3e06cdf1c90fb51eb8c38ab", "package_type": "package", "imports": ["more_itertools"], "depends": []}, "mpmath": {"name": "mpmath", "version": "1.3.0", "file_name": "mpmath-1.3.0-cp311-none-any.whl", "install_dir": "site", "sha256": "b48ca52cbaf3392e8d31c3d7549539b993cdd22580960b821a9c0b8748210560", "package_type": "package", "imports": ["mpmath"], "depends": [], "unvendored_tests": true}, "mpmath-tests": {"name": "mpmath-tests", "version": "1.3.0", "depends": ["mpmath"], "imports": [], "file_name": "mpmath-tests.tar", "install_dir": "site", "sha256": "327617b053d4c7c49768b7825cf01f9d871208285725e0a7ac2e8cd4a02cb2ab"}, "msgpack": {"name": "msgpack", "version": "1.0.5", "file_name": "msgpack-1.0.5-cp311-cp311-emscripten_3_1_32_wasm32.whl", "install_dir": "site", "sha256": "d79ae23633bbdb3cffd1f136d35df8d5262db10c8097e658729ce1d0eefabfce", "package_type": "package", "imports": ["msgpack"], "depends": []}, "msprime": {"name": "msprime", "version": "1.2.0", "file_name": "msprime-1.2.0-cp311-cp311-emscripten_3_1_32_wasm32.whl", "install_dir": "site", "sha256": "9d8e30a090da35ce51046e7b382a2d5b7295db4176c2b8ece28e76045a66b2c9", "package_type": "package", "imports": ["msprime"], "depends": ["numpy", "newick", "tskit", "demes"]}, "multidict": {"name": "multidict", "version": "6.0.4", "file_name": "multidict-6.0.4-cp311-cp311-emscripten_3_1_32_wasm32.whl", "install_dir": "site", "sha256": "218eb200ba8c725c7a17158923fec92b489f603d5382a8b106bee668862885b0", "package_type": "package", "imports": ["multidict"], "depends": []}, "munch": {"name": "munch", "version": "2.5.0", "file_name": "munch-2.5.0-py2.py3-none-any.whl", "install_dir": "site", "sha256": "e709f59caa71f93fecd2ae0e605905eef6f3b6439130d5b4f7dce7c202e48a24", "package_type": "package", "imports": ["munch"], "depends": ["setuptools", "six"]}, "mypy": {"name": "mypy", "version": "1.1.1", "file_name": "mypy-1.1.1-cp311-cp311-emscripten_3_1_32_wasm32.whl", "install_dir": "site", "sha256": "91e57c629d34fb9dd2b3fcb3ee8dbc61debc87c78d58991ae517f0651c88371d", "package_type": "package", "imports": ["mypyc", "mypy"], "depends": [], "unvendored_tests": true}, "mypy-tests": {"name": "mypy-tests", "version": "1.1.1", "depends": ["mypy"], "imports": [], "file_name": "mypy-tests.tar", "install_dir": "site", "sha256": "c6aeb8964592825c691eee1aacdf06d94d21f26172f1333769299ea44167dc3c"}, "networkx": {"name": "networkx", "version": "3.0", "file_name": "networkx-3.0-py3-none-any.whl", "install_dir": "site", "sha256": "0d7e2aad29da4a7770b4a04f461d7266bc4e314e2e094b08407eb16a17ad6769", "package_type": "package", "imports": ["networkx"], "depends": ["decorator", "setuptools", "matplotlib", "numpy"], "unvendored_tests": true}, "networkx-tests": {"name": "networkx-tests", "version": "3.0", "depends": ["networkx"], "imports": [], "file_name": "networkx-tests.tar", "install_dir": "site", "sha256": "93b0dcd01c2433bce50da0dfdec0d5fa975113bef651ecf49455f37f4276f580"}, "newick": {"name": "newick", "version": "1.9.0", "file_name": "newick-1.9.0-py2.py3-none-any.whl", "install_dir": "site", "sha256": "d3e1957984dfe076c53e9a66befe41558bc37a6c39a95bedab34b1fec584e75c", "package_type": "package", "imports": ["newick"], "depends": []}, "nlopt": {"name": "nlopt", "version": "2.7.0", "file_name": "nlopt-2.7.0-cp311-cp311-emscripten_3_1_32_wasm32.whl", "install_dir": "site", "sha256": "b6fb440d8d4dacc2ac0105ab534b3373145a3eeb4c8e1e79d35f436f3b2ee1af", "package_type": "package", "imports": ["nlopt"], "depends": ["numpy"]}, "nltk": {"name": "nltk", "version": "3.8.1", "file_name": "nltk-3.8.1-py3-none-any.whl", "install_dir": "site", "sha256": "2b1286ebe5893a802eef0fd3122b4822f53019903e3a9e8928e179f2faac7f82", "package_type": "package", "imports": ["nltk"], "depends": ["regex", "sqlite3"], "unvendored_tests": true}, "nltk-tests": {"name": "nltk-tests", "version": "3.8.1", "depends": ["nltk"], "imports": [], "file_name": "nltk-tests.tar", "install_dir": "site", "sha256": "6f4505d810316f623eef2fd8a8a93a00ecaef29531855d93c036f041f0455d20"}, "nose": {"name": "nose", "version": "1.3.7", "file_name": "nose-1.3.7-py3-none-any.whl", "install_dir": "site", "sha256": "069a8cd3025eb98236aabafe93c4ebe3152fb442ac6577bc7e1e77b9389bcc3b", "package_type": "package", "imports": ["nose"], "depends": ["setuptools"]}, "numcodecs": {"name": "numcodecs", "version": "0.11.0", "file_name": "numcodecs-0.11.0-cp311-cp311-emscripten_3_1_32_wasm32.whl", "install_dir": "site", "sha256": "058dc240cd93563b337ab993658c1a84c0dd6dc4b1b66aab95e248884717581d", "package_type": "package", "imports": ["numcodecs"], "depends": ["numpy", "msgpack"], "unvendored_tests": true}, "numcodecs-tests": {"name": "numcodecs-tests", "version": "0.11.0", "depends": ["numcodecs"], "imports": [], "file_name": "numcodecs-tests.tar", "install_dir": "site", "sha256": "cb26740da31b4707e6158634a6a31fc0aac3cec76eab0b7828302c5b37e9fb2a"}, "numpy": {"name": "numpy", "version": "1.24.2", "file_name": "numpy-1.24.2-cp311-cp311-emscripten_3_1_32_wasm32.whl", "install_dir": "site", "sha256": "4aad7946a394229875ab751fd13e97119d7b5ae132885b5ebecd9ce48dbef18d", "package_type": "package", "imports": ["numpy"], "depends": [], "unvendored_tests": true}, "numpy-tests": {"name": "numpy-tests", "version": "1.24.2", "depends": ["numpy"], "imports": [], "file_name": "numpy-tests.tar", "install_dir": "site", "sha256": "25fccf3d5463b22add3a06c466abc03691d66de90c00243ca4293bc8d6f81a12"}, "opencv-python": {"name": "opencv-python", "version": "4.7.0.72", "file_name": "opencv_python-4.7.0.72-cp311-cp311-emscripten_3_1_32_wasm32.whl", "install_dir": "site", "sha256": "a64d2e0f2f16d02173b738e9ca4464edb14b05cf7185201788335c6700ee233f", "package_type": "package", "imports": ["cv2"], "depends": ["numpy"]}, "openssl": {"name": "openssl", "version": "1.1.1n", "file_name": "openssl-1.1.1n.zip", "install_dir": "dynlib", "sha256": "2b3be829be8890e640838e14ae8bc63e9f0898bf32e03373d00a875ad2a55b77", "package_type": "shared_library", "imports": [], "shared_library": true, "depends": []}, "optlang": {"name": "optlang", "version": "1.6.1", "file_name": "optlang-1.6.1-py2.py3-none-any.whl", "install_dir": "site", "sha256": "b6aa8c4aa7a2292af6eb20d5b6a94da5e66bed75163b1726191f364002addce7", "package_type": "package", "imports": ["optlang"], "depends": ["sympy", "six", "swiglpk"], "unvendored_tests": true}, "optlang-tests": {"name": "optlang-tests", "version": "1.6.1", "depends": ["optlang"], "imports": [], "file_name": "optlang-tests.tar", "install_dir": "site", "sha256": "15b3fcc2e36f0dba48b3db08843cd91b117c4571956c0908cd5bf977eb0f0d95"}, "packaging": {"name": "packaging", "version": "23.0", "file_name": "packaging-23.0-py3-none-any.whl", "install_dir": "site", "sha256": "91079d21efac4e72c7d139a1db268341fe6bf170cbf6a47677522175889ec84f", "package_type": "package", "imports": ["packaging"], "depends": ["pyparsing"]}, "pandas": {"name": "pandas", "version": "1.5.3", "file_name": "pandas-1.5.3-cp311-cp311-emscripten_3_1_32_wasm32.whl", "install_dir": "site", "sha256": "b19e5ad95fc43335d5d2e742e7caca443446d2cc384b89a3e70494eed2deda30", "package_type": "package", "imports": ["pandas"], "depends": ["numpy", "python-dateutil", "pytz"], "unvendored_tests": true}, "pandas-tests": {"name": "pandas-tests", "version": "1.5.3", "depends": ["pandas"], "imports": [], "file_name": "pandas-tests.tar", "install_dir": "site", "sha256": "8cedc9508e42f2a881f5f0da5d835d755fe0689dfa63e1d7cd075eef28123389"}, "parso": {"name": "parso", "version": "0.8.3", "file_name": "parso-0.8.3-py2.py3-none-any.whl", "install_dir": "site", "sha256": "3e32393bc8769da8c992b2bdecf408551334f1d6aa7fb0a37e57175238fb448f", "package_type": "package", "imports": ["parso"], "depends": []}, "patsy": {"name": "patsy", "version": "0.5.3", "file_name": "patsy-0.5.3-py2.py3-none-any.whl", "install_dir": "site", "sha256": "5e9c60d575b01828570602d37d56cb49970f1a700210d8e4ed037a404335cfc8", "package_type": "package", "imports": ["patsy"], "depends": ["numpy", "six"], "unvendored_tests": true}, "patsy-tests": {"name": "patsy-tests", "version": "0.5.3", "depends": ["patsy"], "imports": [], "file_name": "patsy-tests.tar", "install_dir": "site", "sha256": "9532de4676a913a55f7f02e5d8959359e6e846032d0063a8e46dc16d254d6ac9"}, "pillow": {"name": "Pillow", "version": "9.1.1", "file_name": "PIL-9.1.1-cp311-cp311-emscripten_3_1_32_wasm32.whl", "install_dir": "site", "sha256": "2d5017a409af4291f6ee2d795d78ebe7745ab8621c0295f3a73c971e784f6459", "package_type": "package", "imports": ["PIL"], "depends": []}, "pillow_heif": {"name": "pillow_heif", "version": "0.8.0", "file_name": "pillow_heif-0.8.0-cp36-abi3-emscripten_3_1_32_wasm32.whl", "install_dir": "site", "sha256": "a3c2e75d26769ba0b36ed4f0badcf1d1614093b025c97a3a36f3d3c32df9369e", "package_type": "package", "imports": ["pillow_heif"], "depends": ["cffi", "pillow", "libheif"]}, "pkgconfig": {"name": "pkgconfig", "version": "1.5.5", "file_name": "pkgconfig-1.5.5-py3-none-any.whl", "install_dir": "site", "sha256": "c2300b88b0ebe2b666ffa91bde1fbadf174e4ded3cd1199125ef406d8c7ce3b5", "package_type": "package", "imports": ["pkgconfig"], "depends": []}, "pluggy": {"name": "pluggy", "version": "1.0.0", "file_name": "pluggy-1.0.0-py2.py3-none-any.whl", "install_dir": "site", "sha256": "c4e8f046f90e6611e2def2afde22182b4a858fd9a67e868d3b86a0024020f8d4", "package_type": "package", "imports": ["pluggy"], "depends": []}, "py": {"name": "py", "version": "1.11.0", "file_name": "py-1.11.0-py2.py3-none-any.whl", "install_dir": "site", "sha256": "31d6192a330a7341938ac4e0342338d60cc38de34a1a61a3107a3d4ee44c4714", "package_type": "package", "imports": ["py"], "depends": []}, "pyb2d": {"name": "pyb2d", "version": "0.7.2", "file_name": "b2d-0.7.4-cp311-cp311-emscripten_3_1_32_wasm32.whl", "install_dir": "site", "sha256": "6176e035d56eee1b2cda7b257f17ff63a9ffe8b253cf598acdc4a73f2af50bc8", "package_type": "package", "imports": ["b2d"], "depends": ["numpy", "pydantic", "setuptools"]}, "pyclipper": {"name": "pyclipper", "version": "1.3.0.post4", "file_name": "pyclipper-1.3.0.post4-cp311-cp311-emscripten_3_1_32_wasm32.whl", "install_dir": "site", "sha256": "e1b1e0ef001c63f03fa8e3107ff6242e0ad4527f2a603c742fcdae3546fa0149", "package_type": "package", "imports": ["pyclipper"], "depends": []}, "pycparser": {"name": "pycparser", "version": "2.21", "file_name": "pycparser-2.21-py2.py3-none-any.whl", "install_dir": "site", "sha256": "0e9ba4eafb7c2b5483da3ea97e65bf122f5c5db2651aa9d92b8b38a53ec06c81", "package_type": "package", "imports": ["pycparser"], "depends": []}, "pycryptodome": {"name": "pycryptodome", "version": "3.17", "file_name": "pycryptodome-3.17-cp35-abi3-emscripten_3_1_32_wasm32.whl", "install_dir": "site", "sha256": "9f68c2f6bf41d348794784b6bd3c38e92e2236b1bc40160fde840d2fa8d51e2b", "package_type": "package", "imports": ["Crypto"], "depends": [], "unvendored_tests": true}, "pycryptodome-tests": {"name": "pycryptodome-tests", "version": "3.17", "depends": ["pycryptodome"], "imports": [], "file_name": "pycryptodome-tests.tar", "install_dir": "site", "sha256": "6e085c4f522be416e4a89027a2f11c531cebd6eaf0cdd24ba95977a030c0ea4a"}, "pydantic": {"name": "pydantic", "version": "1.10.7", "file_name": "pydantic-1.10.7-py3-none-any.whl", "install_dir": "site", "sha256": "426d9cf98f0f625b4b92e86889ce7515b93d428af821675a441842fb1f55239b", "package_type": "package", "imports": ["pydantic"], "depends": ["typing-extensions"]}, "pydecimal": {"name": "pydecimal", "version": "1.0.0", "file_name": "pydecimal-1.0.0.zip", "install_dir": "stdlib", "sha256": "f297064de9e403df48749cf6f3dcc2e7de280c88aeb16deb31dc6534ba63b1a6", "package_type": "cpython_module", "imports": ["_pydecimal"], "shared_library": true, "depends": []}, "pydoc_data": {"name": "pydoc_data", "version": "1.0.0", "file_name": "pydoc_data-1.0.0.zip", "install_dir": "stdlib", "sha256": "76c5f632661fd119b6f543c56093bff33ee40b684114c9e876cc65581bf4b3cb", "package_type": "cpython_module", "imports": ["pydoc_data"], "shared_library": true, "depends": []}, "pyerfa": {"name": "pyerfa", "version": "2.0.0.3", "file_name": "pyerfa-2.0.0.3-cp311-cp311-emscripten_3_1_32_wasm32.whl", "install_dir": "site", "sha256": "5ab1f71323e9a3939e01ac44e84bce6445f750b2317c583a56a57e355b86474c", "package_type": "package", "imports": ["erfa"], "depends": ["numpy"], "unvendored_tests": true}, "pyerfa-tests": {"name": "pyerfa-tests", "version": "2.0.0.3", "depends": ["pyerfa"], "imports": [], "file_name": "pyerfa-tests.tar", "install_dir": "site", "sha256": "20c9ddaa8c656cd7e3f563024471c60382a4e7e726bebf32b74253ada5e118cf"}, "pygments": {"name": "Pygments", "version": "2.14.0", "file_name": "Pygments-2.14.0-py3-none-any.whl", "install_dir": "site", "sha256": "f22ab7b680f2bf8c36e1e3ea294ce79d9eec827ce89cb7051b2b3c7c5832966e", "package_type": "package", "imports": ["pygments"], "depends": []}, "pyheif": {"name": "pyheif", "version": "0.7.1", "file_name": "pyheif-0.7.1-cp311-cp311-emscripten_3_1_32_wasm32.whl", "install_dir": "site", "sha256": "4e85a9a18b79370169671f5c8cc6f6798e6e57374dbce0956688c0aa1f0771f9", "package_type": "package", "imports": ["pyheif"], "depends": ["cffi"]}, "pyinstrument": {"name": "pyinstrument", "version": "4.4.0", "file_name": "pyinstrument-4.4.0-cp311-cp311-emscripten_3_1_32_wasm32.whl", "install_dir": "site", "sha256": "2b4ccc4cb2fea1f3ec11f9b1cb7ddbcbca513483163aeb6184a5cd3dec7387bc", "package_type": "package", "imports": ["pyinstrument"], "depends": []}, "pynacl": {"name": "pynacl", "version": "1.5.0", "file_name": "PyNaCl-1.5.0-cp311-cp311-emscripten_3_1_32_wasm32.whl", "install_dir": "site", "sha256": "a3259b787a040a45124331a6dc9a865b67e121884886d07fac9ac95bfdf55afb", "package_type": "package", "imports": ["nacl"], "depends": ["cffi"]}, "pyodide-http": {"name": "pyodide-http", "version": "0.2.0", "file_name": "pyodide_http-0.2.0-py3-none-any.whl", "install_dir": "site", "sha256": "bf92597fafebebd5d276c94b675681af12d9dd97f8c80f93d98f2bb962a7702e", "package_type": "package", "imports": ["pyodide_http"], "depends": []}, "pyparsing": {"name": "pyparsing", "version": "3.0.9", "file_name": "pyparsing-3.0.9-py3-none-any.whl", "install_dir": "site", "sha256": "0f6debefd92b9c9781527a30c808233cfed258194c34554a815f81a41b64d7f7", "package_type": "package", "imports": ["pyparsing"], "depends": []}, "pyproj": {"name": "pyproj", "version": "3.4.1", "file_name": "pyproj-3.4.1-cp311-cp311-emscripten_3_1_32_wasm32.whl", "install_dir": "site", "sha256": "59df59bd943184627f4146034ea696947bd6932ab9e9b3d1148ee3e6a2e32a2f", "package_type": "package", "imports": ["pyproj"], "depends": ["certifi", "sqlite3"]}, "pyrsistent": {"name": "pyrsistent", "version": "0.19.3", "file_name": "pyrsistent-0.19.3-cp311-cp311-emscripten_3_1_32_wasm32.whl", "install_dir": "site", "sha256": "53d91a1de1cfd6026552424141bad5fa13beaacf0f0ab11850f767f42ceda45e", "package_type": "package", "imports": ["_pyrsistent_version", "pyrsistent"], "depends": []}, "pytest": {"name": "pytest", "version": "7.2.2", "file_name": "pytest-7.2.2-py3-none-any.whl", "install_dir": "site", "sha256": "21b51cb7179a394024bf35c76b18f0c0ce4492b83b7e76e72866688ff548872c", "package_type": "package", "imports": ["_pytest", "pytest"], "depends": ["atomicwrites", "attrs", "more-itertools", "pluggy", "py", "setuptools", "six", "iniconfig", "exceptiongroup"]}, "pytest-benchmark": {"name": "pytest-benchmark", "version": "4.0.0", "file_name": "pytest_benchmark-4.0.0-py3-none-any.whl", "install_dir": "site", "sha256": "ef64a9d26222a5263a85cfde55e1497defab2112a8c5210eb1534df67a896177", "package_type": "package", "imports": ["pytest_benchmark"], "depends": []}, "python-dateutil": {"name": "python-dateutil", "version": "2.8.2", "file_name": "python_dateutil-2.8.2-py2.py3-none-any.whl", "install_dir": "site", "sha256": "96a346655d4a805670334d4733a8326e37690b96f1a8ea703bd3332f34b05787", "package_type": "package", "imports": ["dateutil"], "depends": ["six"]}, "python-magic": {"name": "python-magic", "version": "0.4.27", "file_name": "python_magic-0.4.27-py2.py3-none-any.whl", "install_dir": "site", "sha256": "8174c5da8a67cee080139edbbe759aa695d1d556cb388f543eab3ab7cd0496c4", "package_type": "package", "imports": ["magic"], "depends": ["libmagic"]}, "python-sat": {"name": "python-sat", "version": "0.1.7.dev26", "file_name": "python_sat-0.1.7.dev26-cp311-cp311-emscripten_3_1_32_wasm32.whl", "install_dir": "site", "sha256": "ae1167e6c402c01e7647de71dac804002faf411b6ac531e67873913a5e06c2d1", "package_type": "package", "imports": ["pysat"], "depends": ["six"]}, "python_solvespace": {"name": "python_solvespace", "version": "3.0.8", "file_name": "python_solvespace-3.0.8-cp311-cp311-emscripten_3_1_32_wasm32.whl", "install_dir": "site", "sha256": "09021401e24144d1c132f4ccd68d3fcf63202a01e94802669d3f418142ef85b8", "package_type": "package", "imports": ["python_solvespace"], "depends": []}, "pytz": {"name": "pytz", "version": "2023.3", "file_name": "pytz-2023.3-py2.py3-none-any.whl", "install_dir": "site", "sha256": "8956b4ec3c708e7ac04deece299d73802ad205de58917dd8d018699ce6f8922a", "package_type": "package", "imports": ["pytz"], "depends": []}, "pywavelets": {"name": "pywavelets", "version": "1.4.1", "file_name": "PyWavelets-1.4.1-cp311-cp311-emscripten_3_1_32_wasm32.whl", "install_dir": "site", "sha256": "fab907b30efc3c02011db77a8b31abb8dfc93ce12d743271f9a9e773a4a4b096", "package_type": "package", "imports": ["pywt"], "depends": ["distutils", "numpy", "matplotlib", "scipy"], "unvendored_tests": true}, "pywavelets-tests": {"name": "pywavelets-tests", "version": "1.4.1", "depends": ["pywavelets"], "imports": [], "file_name": "pywavelets-tests.tar", "install_dir": "site", "sha256": "caf646ae2f30474d3b780a93dd96f6a3cb55f5e4165ddac4603b05b400b8394b"}, "pyxel": {"name": "pyxel", "version": "1.9.10", "file_name": "pyxel-1.9.10-cp37-abi3-emscripten_3_1_32_wasm32.whl", "install_dir": "site", "sha256": "cf49d814abbb8ee4dddcc565db9c7237a35a9c35af333ff70f08d4c54e178ee3", "package_type": "package", "imports": ["pyxel"], "depends": []}, "pyyaml": {"name": "pyyaml", "version": "6.0", "file_name": "PyYAML-6.0-cp311-cp311-emscripten_3_1_32_wasm32.whl", "install_dir": "site", "sha256": "dae78e3b055f94fc88ce7030a24d1611ecfba4289cb54930829f32a022d26e58", "package_type": "package", "imports": ["_yaml", "yaml"], "depends": []}, "rebound": {"name": "rebound", "version": "3.19.8", "file_name": "rebound-3.19.8-cp311-cp311-emscripten_3_1_32_wasm32.whl", "install_dir": "site", "sha256": "3bb195aee08c634b1f1ca8a8b0d0c264d044a60a04ee07e05f143503ea765fc3", "package_type": "package", "imports": ["rebound"], "depends": ["numpy"]}, "reboundx": {"name": "reboundx", "version": "3.7.1", "file_name": "reboundx-3.7.1-cp311-cp311-emscripten_3_1_32_wasm32.whl", "install_dir": "site", "sha256": "d835ceb1b4e39460dc9bd1a318206976667b3b57c423d1f3a362ff6d1ba8350e", "package_type": "package", "imports": ["reboundx"], "depends": ["rebound", "numpy"]}, "regex": {"name": "regex", "version": "2023.3.23", "file_name": "regex-2023.3.23-cp311-cp311-emscripten_3_1_32_wasm32.whl", "install_dir": "site", "sha256": "021e2df5fdd4ec89f47a63f5724c6b878f5378d354cfb9a0a34419015c758ce9", "package_type": "package", "imports": ["regex"], "depends": [], "unvendored_tests": true}, "regex-tests": {"name": "regex-tests", "version": "2023.3.23", "depends": ["regex"], "imports": [], "file_name": "regex-tests.tar", "install_dir": "site", "sha256": "e0f766359a78a076fe39cb66a42464f1fad28eb8a29c7449ffc9519e2d1005c7"}, "retrying": {"name": "retrying", "version": "1.3.4", "file_name": "retrying-1.3.4-py3-none-any.whl", "install_dir": "site", "sha256": "bb271f8e1a5e280c278ed14f346bce739550ea1a89f4b72defee9def545bbab9", "package_type": "package", "imports": ["retrying"], "depends": ["six"]}, "robotraconteur": {"name": "RobotRaconteur", "version": "0.15.1", "file_name": "RobotRaconteur-0.15.1-cp311-cp311-emscripten_3_1_32_wasm32.whl", "install_dir": "site", "sha256": "4d0d0bb593d9d32c3d85fa185e060418e7dc5fdf11e4959753b9cf5686b6d741", "package_type": "package", "imports": ["RobotRaconteur"], "depends": ["numpy"]}, "ruamel.yaml": {"name": "ruamel.yaml", "version": "0.17.21", "file_name": "ruamel.yaml-0.17.21-py3-none-any.whl", "install_dir": "site", "sha256": "4ac2f027bd5a29ef6eed36dd21c6bd67682c99a1a5300e3f2c9ce3814db28a58", "package_type": "package", "imports": ["ruamel"], "depends": []}, "scikit-image": {"name": "scikit-image", "version": "0.19.3", "file_name": "scikit_image-0.19.3-cp311-cp311-emscripten_3_1_32_wasm32.whl", "install_dir": "site", "sha256": "ebe3508e6d274dca12d1c8a055dfbfa5cfbdbade38ebc9f874c3d4583996435c", "package_type": "package", "imports": ["skimage"], "depends": ["packaging", "numpy", "scipy", "networkx", "pillow", "imageio", "pywavelets"], "unvendored_tests": true}, "scikit-image-tests": {"name": "scikit-image-tests", "version": "0.19.3", "depends": ["scikit-image"], "imports": [], "file_name": "scikit-image-tests.tar", "install_dir": "site", "sha256": "0634a61141b204eae40a65dbf78f0b42d50e58442c27d9219dc7976059cd1a6b"}, "scikit-learn": {"name": "scikit-learn", "version": "1.2.2", "file_name": "scikit_learn-1.2.2-cp311-cp311-emscripten_3_1_32_wasm32.whl", "install_dir": "site", "sha256": "59f304011fef31e820b8fc5508a6421b6c94e1fce84de829d5ac958124b447b4", "package_type": "package", "imports": ["sklearn"], "depends": ["scipy", "joblib", "threadpoolctl"], "unvendored_tests": true}, "scikit-learn-tests": {"name": "scikit-learn-tests", "version": "1.2.2", "depends": ["scikit-learn"], "imports": [], "file_name": "scikit-learn-tests.tar", "install_dir": "site", "sha256": "0890e7a12bdf00c16111ea4af0d3eb83881de4b9b2f5f3d5000a037bd4b82112"}, "scipy": {"name": "scipy", "version": "1.9.3", "file_name": "scipy-1.9.3-cp311-cp311-emscripten_3_1_32_wasm32.whl", "install_dir": "site", "sha256": "27c94e2785ac37a66a2b4af9251557462912f3e3392d6bb29ba389e3fd605ba5", "package_type": "package", "imports": ["scipy"], "depends": ["numpy", "clapack"], "unvendored_tests": true}, "scipy-tests": {"name": "scipy-tests", "version": "1.9.3", "depends": ["scipy"], "imports": [], "file_name": "scipy-tests.tar", "install_dir": "site", "sha256": "e1bba979f21581846fe9dffe002124b5552a260e5721fe0f6ba1ce2fff3e2991"}, "setuptools": {"name": "setuptools", "version": "67.6.1", "file_name": "setuptools-67.6.1-py3-none-any.whl", "install_dir": "site", "sha256": "278c3eecd51d4ac679856dc9abd73e97ee6063135e1236a354bc7de52b86d7b8", "package_type": "package", "imports": ["_distutils_hack", "pkg_resources", "setuptools"], "depends": ["distutils", "pyparsing"]}, "shapely": {"name": "shapely", "version": "1.8.2", "file_name": "Shapely-1.8.2-cp311-cp311-emscripten_3_1_32_wasm32.whl", "install_dir": "site", "sha256": "70cabca8876ff51b33476886c039a24f5c50d28917b42cf90af0ae5af4294cbc", "package_type": "package", "imports": ["shapely"], "depends": ["numpy"], "unvendored_tests": true}, "shapely-tests": {"name": "shapely-tests", "version": "1.8.2", "depends": ["shapely"], "imports": [], "file_name": "shapely-tests.tar", "install_dir": "site", "sha256": "242a6366d24ec7f17b659d46c4d67461a3883d5f7e318dbc1c2f3d6b3b31b352"}, "sharedlib-test": {"name": "sharedlib-test", "version": "1.0", "file_name": "sharedlib-test-1.0.zip", "install_dir": "dynlib", "sha256": "a087ba2f9f41d067f77ccefbe9c133e01bc91354163569e0dc7e5695db972632", "package_type": "shared_library", "imports": [], "shared_library": true, "depends": []}, "sharedlib-test-py": {"name": "sharedlib-test-py", "version": "1.0", "file_name": "sharedlib_test_py-1.0-cp311-cp311-emscripten_3_1_32_wasm32.whl", "install_dir": "site", "sha256": "cbfddd0e540091b8b463e907cb58792c90186103c31a1f5cfd1f66032fb7102c", "package_type": "package", "imports": ["sharedlib_test"], "depends": ["sharedlib-test"]}, "six": {"name": "six", "version": "1.16.0", "file_name": "six-1.16.0-py2.py3-none-any.whl", "install_dir": "site", "sha256": "c5910321ae1b9a168909f8a88439022be2f10957ff0fe5f8fc78eabe8390588d", "package_type": "package", "imports": ["six"], "depends": []}, "smart_open": {"name": "smart_open", "version": "6.3.0", "file_name": "smart_open-6.3.0-py3-none-any.whl", "install_dir": "site", "sha256": "8be77bda417c04ba833d9a5a9d87e3a10a9e6c8b669bc75329c9377da9b7c942", "package_type": "package", "imports": ["smart_open"], "depends": []}, "soupsieve": {"name": "soupsieve", "version": "2.4", "file_name": "soupsieve-2.4-py3-none-any.whl", "install_dir": "site", "sha256": "5fca10dd98e7b3da043ef62db7781dca5885c6a1032cd7e9de41ca25de7e4742", "package_type": "package", "imports": ["soupsieve"], "depends": []}, "sqlalchemy": {"name": "sqlalchemy", "version": "2.0.7", "file_name": "SQLAlchemy-2.0.7-cp311-cp311-emscripten_3_1_32_wasm32.whl", "install_dir": "site", "sha256": "9473547097f97dc7bb1221f117369970ea2fc090fd074b9a8aa4c59f704e9d81", "package_type": "package", "imports": ["sqlalchemy"], "depends": ["sqlite3", "typing-extensions"], "unvendored_tests": true}, "sqlalchemy-tests": {"name": "sqlalchemy-tests", "version": "2.0.7", "depends": ["sqlalchemy"], "imports": [], "file_name": "sqlalchemy-tests.tar", "install_dir": "site", "sha256": "419b95caa6cbf2a0938b89bfcfd663e8159cb07e045eb0b0060a1eb8f16854c8"}, "sqlite3": {"name": "sqlite3", "version": "1.0.0", "file_name": "sqlite3-1.0.0.zip", "install_dir": "stdlib", "sha256": "abc09bdb643dacfe2ab0ddf15bd41baa3cf1d9fc98c5f89138d01b81260e81df", "package_type": "cpython_module", "imports": ["sqlite3", "_sqlite3"], "shared_library": true, "depends": []}, "ssl": {"name": "ssl", "version": "1.0.0", "file_name": "ssl-1.0.0.zip", "install_dir": "stdlib", "sha256": "3fea509e300f99b1303179f3db7b7a150724f9e2e5fc99b9e046bc4a11b03f5f", "package_type": "cpython_module", "imports": ["ssl", "_ssl"], "shared_library": true, "depends": ["openssl"]}, "statsmodels": {"name": "statsmodels", "version": "0.13.5", "file_name": "statsmodels-0.13.5-cp311-cp311-emscripten_3_1_32_wasm32.whl", "install_dir": "site", "sha256": "6fe19b551030271fa163e8b47e747366e1d0981fe2227ba590964549bad7e73d", "package_type": "package", "imports": ["statsmodels"], "depends": ["distutils", "numpy", "scipy", "pandas", "patsy", "packaging"], "unvendored_tests": true}, "statsmodels-tests": {"name": "statsmodels-tests", "version": "0.13.5", "depends": ["statsmodels"], "imports": [], "file_name": "statsmodels-tests.tar", "install_dir": "site", "sha256": "a77d11d2a7ea87ca7914e9dc55ce9384fa0a57af36853b4dc0fac2f5292e21e7"}, "suitesparse": {"name": "suitesparse", "version": "5.11.0", "file_name": "suitesparse-5.11.0.zip", "install_dir": "dynlib", "sha256": "e0ed5240c9c5a4875685266aa3ccbe6f5acc4448cc2bb66f4c7b0056d25217e8", "package_type": "shared_library", "imports": [], "shared_library": true, "depends": ["clapack"]}, "svgwrite": {"name": "svgwrite", "version": "1.4.3", "file_name": "svgwrite-1.4.3-py3-none-any.whl", "install_dir": "site", "sha256": "e6ddbf1075161725f62710bd9c6ea0eb361da2e1f50045dc06ed06c65ee26faa", "package_type": "package", "imports": ["svgwrite"], "depends": []}, "swiglpk": {"name": "swiglpk", "version": "5.0.8", "file_name": "swiglpk-5.0.8-cp311-cp311-emscripten_3_1_32_wasm32.whl", "install_dir": "site", "sha256": "27197349cb96978d98cd54d4a08968b028a745b175e8748afd6a721de12b4d48", "package_type": "package", "imports": ["swiglpk"], "depends": []}, "sympy": {"name": "sympy", "version": "1.11.1", "file_name": "sympy-1.11.1-cp311-none-any.whl", "install_dir": "site", "sha256": "fa4b9724ef3c0f135c7f76f3e9023f466cc3adcbf5f665c51eb10917d59d751a", "package_type": "package", "imports": ["isympy", "sympy"], "depends": ["distutils", "mpmath"], "unvendored_tests": true}, "sympy-tests": {"name": "sympy-tests", "version": "1.11.1", "depends": ["sympy"], "imports": [], "file_name": "sympy-tests.tar", "install_dir": "site", "sha256": "8f994b1c162a2980702ee150a43a065a60350c1fef4efa60a3c3600a5d237d7b"}, "tblib": {"name": "tblib", "version": "1.7.0", "file_name": "pyodide_tblib-1.7.1-py3-none-any.whl", "install_dir": "site", "sha256": "b472e18dc46ababd3fcfebbd0bb381f5b4e482416dcc902c8e07201474aadc6f", "package_type": "package", "imports": ["tblib"], "depends": []}, "termcolor": {"name": "termcolor", "version": "2.2.0", "file_name": "termcolor-2.2.0-py3-none-any.whl", "install_dir": "site", "sha256": "c7e00cc005717824e20af677df7e58cbe622f910ce1e3073ca9d606fe14ac71d", "package_type": "package", "imports": ["termcolor"], "depends": []}, "test": {"name": "test", "version": "1.0.0", "file_name": "test-1.0.0.zip", "install_dir": "stdlib", "sha256": "b65f9d3a209eca092309f29257a8bcaccf5afe31f5300dca1cc35bec837789cb", "package_type": "cpython_module", "imports": ["test"], "shared_library": true, "depends": []}, "threadpoolctl": {"name": "threadpoolctl", "version": "3.1.0", "file_name": "threadpoolctl-3.1.0-py3-none-any.whl", "install_dir": "site", "sha256": "f484956f17217e41c7c5455f56a34c26565065a59d061f89303f81594733ddc2", "package_type": "package", "imports": ["threadpoolctl"], "depends": []}, "tomli": {"name": "tomli", "version": "2.0.1", "file_name": "tomli-2.0.1-py3-none-any.whl", "install_dir": "site", "sha256": "9881318d220d66d44c3d98cc76cdebd588a81ee09e284f7b31608643393e1e93", "package_type": "package", "imports": ["tomli"], "depends": []}, "tomli-w": {"name": "tomli-w", "version": "1.0.0", "file_name": "tomli_w-1.0.0-py3-none-any.whl", "install_dir": "site", "sha256": "8eb65fb12ee9515418a59a161e6a17f3612b233ada95b9f55ffb70d70bd60965", "package_type": "package", "imports": ["tomli_w"], "depends": []}, "toolz": {"name": "toolz", "version": "0.12.0", "file_name": "toolz-0.12.0-py3-none-any.whl", "install_dir": "site", "sha256": "d3cc6689834ca507fcd061be693aec93ad37abc78dfbab822f840115fb4ec808", "package_type": "package", "imports": ["tlz", "toolz"], "depends": [], "unvendored_tests": true}, "toolz-tests": {"name": "toolz-tests", "version": "0.12.0", "depends": ["toolz"], "imports": [], "file_name": "toolz-tests.tar", "install_dir": "site", "sha256": "6a9d4a943508264ba35cbef228db8670b5721efe3f8cb0ea011d90f4a0bc341e"}, "tqdm": {"name": "tqdm", "version": "4.65.0", "file_name": "tqdm-4.65.0-py3-none-any.whl", "install_dir": "site", "sha256": "0a1de47b3147dd1acf5ec0723c2e0b46f1931275a4847f878133f688a4e6c7bc", "package_type": "package", "imports": ["tqdm"], "depends": []}, "traits": {"name": "traits", "version": "6.4.1", "file_name": "traits-6.4.1-cp311-cp311-emscripten_3_1_32_wasm32.whl", "install_dir": "site", "sha256": "230645c15a5208f89a174548de202040d62ad740f99eab2ea9f811c9dac702b9", "package_type": "package", "imports": ["traits"], "depends": [], "unvendored_tests": true}, "traits-tests": {"name": "traits-tests", "version": "6.4.1", "depends": ["traits"], "imports": [], "file_name": "traits-tests.tar", "install_dir": "site", "sha256": "617730dbf15cd31dfe90ed2f87fe111c9b134a9c58fdf56c95910301c37d5ab0"}, "tskit": {"name": "tskit", "version": "0.5.4", "file_name": "tskit-0.5.4-cp311-cp311-emscripten_3_1_32_wasm32.whl", "install_dir": "site", "sha256": "00933fba338d75714a94d94ba71a3402f156f1a7e673f10c1b23d3fd8519c8c9", "package_type": "package", "imports": ["tskit"], "depends": ["numpy", "svgwrite", "jsonschema"]}, "typing-extensions": {"name": "typing-extensions", "version": "4.5.0", "file_name": "typing_extensions-4.5.0-py3-none-any.whl", "install_dir": "site", "sha256": "4addb634bf121f96a0c4f90f181535f5ea755a6f3d4aa84f3d92d6ba0da1128b", "package_type": "package", "imports": ["typing_extensions"], "depends": []}, "uncertainties": {"name": "uncertainties", "version": "3.1.7", "file_name": "uncertainties-3.1.7-py2.py3-none-any.whl", "install_dir": "site", "sha256": "7e89cbac98d1feabc80bd167346b87d1df62b2c067931ae40db577592aa78650", "package_type": "package", "imports": ["uncertainties"], "depends": ["future"], "unvendored_tests": true}, "uncertainties-tests": {"name": "uncertainties-tests", "version": "3.1.7", "depends": ["uncertainties"], "imports": [], "file_name": "uncertainties-tests.tar", "install_dir": "site", "sha256": "bf37f7b325142cfc414f460e5525e04f6b11573c7d38efad675e33990c59ad36"}, "unyt": {"name": "unyt", "version": "2.9.5", "file_name": "unyt-2.9.5-py2.py3-none-any.whl", "install_dir": "site", "sha256": "a0c24bb9821d3e45747d8945d35898abb89aeddce02850d346988ad88ece758d", "package_type": "package", "imports": ["unyt"], "depends": ["numpy", "sympy"], "unvendored_tests": true}, "unyt-tests": {"name": "unyt-tests", "version": "2.9.5", "depends": ["unyt"], "imports": [], "file_name": "unyt-tests.tar", "install_dir": "site", "sha256": "cbf882236cda959544d196395529371d7594f27eaec3a21b3af15d25c826cd19"}, "webencodings": {"name": "webencodings", "version": "0.5.1", "file_name": "webencodings-0.5.1-py2.py3-none-any.whl", "install_dir": "site", "sha256": "6f5fe48f78b5f69e2c0ecdbc38b38f1c8b84ab1053895fe4a0f38dcb0b331bee", "package_type": "package", "imports": ["webencodings"], "depends": []}, "wrapt": {"name": "wrapt", "version": "1.15.0", "file_name": "wrapt-1.15.0-cp311-cp311-emscripten_3_1_32_wasm32.whl", "install_dir": "site", "sha256": "a904bd920209b7680b88efbcbd3f7c1c381191d15790072cfa24e1e67e9cf6bd", "package_type": "package", "imports": ["wrapt"], "depends": []}, "xarray": {"name": "xarray", "version": "2023.3.0", "file_name": "xarray-2023.3.0-py3-none-any.whl", "install_dir": "site", "sha256": "97feeb8e25d920af561491cb1cb9c4e77ea17e982f95511ca61c8ce927ad055b", "package_type": "package", "imports": ["xarray"], "depends": ["numpy", "packaging", "pandas"], "unvendored_tests": true}, "xarray-tests": {"name": "xarray-tests", "version": "2023.3.0", "depends": ["xarray"], "imports": [], "file_name": "xarray-tests.tar", "install_dir": "site", "sha256": "fac147b74685412161a01640be42683fffed098ef0c29843649db0038600598d"}, "xgboost": {"name": "xgboost", "version": "1.6.1", "file_name": "xgboost-1.6.1-cp311-cp311-emscripten_3_1_32_wasm32.whl", "install_dir": "site", "sha256": "b09199fa94cea94b9b1fceee49832316b698c86236328f3b072dc2e4fbfc8617", "package_type": "package", "imports": ["xgboost"], "depends": ["numpy", "scipy", "setuptools"]}, "xlrd": {"name": "xlrd", "version": "2.0.1", "file_name": "xlrd-2.0.1-py2.py3-none-any.whl", "install_dir": "site", "sha256": "70f81a7a0edd2083dd26c1cd6afa6e584d7163579574c4db4894d22731ad4201", "package_type": "package", "imports": ["xlrd"], "depends": []}, "yarl": {"name": "yarl", "version": "1.8.2", "file_name": "yarl-1.8.2-cp311-cp311-emscripten_3_1_32_wasm32.whl", "install_dir": "site", "sha256": "1198d8cb1ec8f189078d027776fe5d97da3b39ed40035a18fde7f1bead733b10", "package_type": "package", "imports": ["yarl"], "depends": ["multidict", "idna"]}, "yt": {"name": "yt", "version": "4.1.4", "file_name": "yt-4.1.4-cp311-cp311-emscripten_3_1_32_wasm32.whl", "install_dir": "site", "sha256": "c6face3d981e3969332238067393447a294178da8d01943459568ba12559168b", "package_type": "package", "imports": ["yt"], "depends": ["numpy", "matplotlib", "sympy", "setuptools", "packaging", "unyt", "cmyt", "colorspacious", "tqdm", "tomli", "tomli-w"]}, "zarr": {"name": "zarr", "version": "2.13.3", "file_name": "zarr-2.13.3-py3-none-any.whl", "install_dir": "site", "sha256": "5ec741cc94a8c8969e0df5236a34441f2450b7194741abf59b20d5277b652fc6", "package_type": "package", "imports": ["zarr"], "depends": ["numpy", "asciitree", "numcodecs"], "unvendored_tests": true}, "zarr-tests": {"name": "zarr-tests", "version": "2.13.3", "depends": ["zarr"], "imports": [], "file_name": "zarr-tests.tar", "install_dir": "site", "sha256": "99cb7e2989a61ab3abf02fe56b54c99a391e6d938cf72a620db1d080a444cfe5"}}}
\ No newline at end of file
diff --git a/public/pyodide/sympy-1.11.1-cp311-none-any.whl b/public/pyodide/sympy-1.11.1-cp311-none-any.whl
index 362e2bc4..ed69aecf 100644
Binary files a/public/pyodide/sympy-1.11.1-cp311-none-any.whl and b/public/pyodide/sympy-1.11.1-cp311-none-any.whl differ
diff --git a/src/App.svelte b/src/App.svelte
index 8a13b847..e8971017 100644
--- a/src/App.svelte
+++ b/src/App.svelte
@@ -23,6 +23,7 @@
import type { SheetPostBody, History } from "./database/types";
import { type Sheet, getDefaultConfig } from "./sheet/Sheet";
import CellList from "./CellList.svelte";
+ import type { MathField } from "./cells/MathField";
import DocumentTitle from "./DocumentTitle.svelte";
import UnitsDocumentation from "./UnitsDocumentation.svelte";
import KeyboardShortcuts from "./KeyboardShortcuts.svelte";
@@ -51,7 +52,8 @@
HeaderGlobalAction,
HeaderActionLink,
Content,
- SideNav, SideNavMenuItem, SideNavMenu, SideNavItems, SideNavLink
+ SideNav, SideNavMenuItem, SideNavMenu, SideNavItems, SideNavLink,
+ CodeSnippet
} from "carbon-components-svelte";
import CloudUpload from "carbon-icons-svelte/lib/CloudUpload.svelte";
@@ -74,11 +76,13 @@
import 'carbon-components-svelte/css/white.css';
import MathCellConfigDialog from "./MathCellConfigDialog.svelte";
import type MathCellElement from "./MathCell.svelte";
+ import GenerateCodeDialog from "./GenerateCodeDialog.svelte";
+ import CustomMatrixModal from "./CustomMatrixModal.svelte";
const apiUrl = window.location.origin;
- const currentVersion = 20230702;
- const tutorialHash = "VteDKCkA8fREy7hLYLMwEQ";
+ const currentVersion = 20230819;
+ const tutorialHash = "fFjTsnFoSQMLwcvteVoNtL";
const termsVersion = 20230608;
let termsAccepted = 0;
@@ -104,6 +108,14 @@
path: "/DeP4bqfF2H5VbRJz3Nd9Re",
title: "Equation Solving"
},
+ {
+ path: "/8pWM9yEqEPNntRBd6Jr9Sv",
+ title: "Matrices and Vectors"
+ },
+ {
+ path: "/enYmu2PzN2hN93Avizx9ec",
+ title: "Python Code Generation"
+ },
];
const prebuiltTables = [
@@ -1345,6 +1357,15 @@ Please include a link to this sheet in the email to assist in debugging the prob
};
}
+ function loadGenerateCodeModal(e: any) {
+ modalInfo = {
+ modalOpen: true,
+ state: "generateCode",
+ heading: "Generate Code From Function",
+ codeGenerationIndex: e.detail.index
+ };
+ }
+
function handleInsertSheetFromFile(e: CustomEvent<{file: File}>) {
if (e.detail.file.size > 0) {
modalInfo.state = "opening";
@@ -1751,6 +1772,15 @@ Please include a link to this sheet in the email to assist in debugging the prob
};
}
+ function handleCustomMatrix(event: CustomEvent<{targetMathField: MathField}>) {
+ modalInfo = {
+ modalOpen: true,
+ state: "customMatrix",
+ heading: "Insert Matrix",
+ targetMathField: event.detail.targetMathField
+ };
+ }
+
$:{
if (document.hasFocus() && showKeyboard !== Boolean($activeMathField)) {
showKeyboard = Boolean($activeMathField);
@@ -2075,7 +2105,7 @@ Please include a link to this sheet in the email to assist in debugging the prob
{#if serviceWorkerUpdateWaiting}