From a3735a0b997444cd8aad007eb6472028b18ceca0 Mon Sep 17 00:00:00 2001 From: Paul Romer Date: Mon, 20 Oct 2025 10:42:17 -0400 Subject: [PATCH] getting started --- .jupyter/data/nbsignatures.db | Bin 24576 -> 24576 bytes .../data/runtime/jpserver-50575-open.html | 17 + .jupyter/data/runtime/jpserver-50575.json | 13 + ...-594af5d9-c160-4648-be09-d77009267580.json | 13 + .../auto-a-ce05.jupyterlab-workspace | 1 + .../auto-f-4f86.jupyterlab-workspace | 2 +- .../auto-u-97ed.jupyterlab-workspace | 1 + .../default-37a8.jupyterlab-workspace | 2 +- .../Files/intro_to_gennaker.ipynb | 94 +++ Files/Using_pylock.ipynb | 126 ---- Files/data.csv | 6 + Files/intro_to_gennaker.ipynb | 393 ++++++++++++ Files/jl_w_pylock.txt | 40 -- Files/requirements.txt | 11 - Files/symbolic_math.py | 5 + Files/test_imports.ipynb | 10 +- Files/untitled.txt | 38 -- Installs.txt | 9 + pyproject.toml | 4 + uv.lock | 564 ++++++++++++++++++ 20 files changed, 1127 insertions(+), 222 deletions(-) create mode 100644 .jupyter/data/runtime/jpserver-50575-open.html create mode 100644 .jupyter/data/runtime/jpserver-50575.json create mode 100644 .jupyter/data/runtime/kernel-594af5d9-c160-4648-be09-d77009267580.json create mode 100644 .jupyter/lab/workspaces/auto-a-ce05.jupyterlab-workspace create mode 100644 .jupyter/lab/workspaces/auto-u-97ed.jupyterlab-workspace create mode 100644 .virtual_documents/Files/intro_to_gennaker.ipynb delete mode 100644 Files/Using_pylock.ipynb create mode 100644 Files/data.csv create mode 100644 Files/intro_to_gennaker.ipynb delete mode 100644 Files/jl_w_pylock.txt delete mode 100644 Files/requirements.txt create mode 100644 Files/symbolic_math.py delete mode 100644 Files/untitled.txt create mode 100644 Installs.txt diff --git a/.jupyter/data/nbsignatures.db b/.jupyter/data/nbsignatures.db index eb6bb3fceca6b10c5fd9719b3c621e712ea8c936..746aee8339b20a9a256b8b055917be94ab34c758 100644 GIT binary patch delta 1292 zcmbu8y-rk75XbK>Ato#z2{xcq76w@MIx}bHd~EASEVQ$+S#myOLuF&-h0e-Iw)71M z4dDf7d<5eQ_zs3jZ)A;Jh%toZG$)z!|4n9oXaB6Xf7bhSzc)GDcsxI;>i4ft(&tBa z>xHVS>i)2rTkXG_+g-UgcRXEyhyDJSDZpC4KRkU7-+I$?wb&%eLc)-pj-(?b$Vr7{ zIeC{U8xN)kY4Xu=D$pLv2|Ze)aw*!@FXq<|mU?gBcoL1+mbFC)+D0a;HL;Dc6vswO zww94xK_@u|pM(`R9wikG*<{UGMwin(Xe@1(X9vcrPy!2q3DyI96$FCUPI-}>DOj|a zeNMT6jz*)+Zs&3sSnqVmo^(bbpF+yo#n`x1P?13?C1*@2v5J|&v<;~gNvV>G6|3{` zavHLCNl}W(p?w9mtr0Qaic_q-M^BL@*UE!Ir;@T<$%FcM( z9o~)oYpw`*g{Q`3>UMh;V8+|(@@{D;ZFYPiH5OF^+V)G#c$+ic^rw2Z-tDffR#KDJ Yj;6+J + + + + + Opening Jupyter Application + + + +

+ This page should redirect you to a Jupyter application. If it doesn't, + click here to go to Jupyter. +

+ + + \ No newline at end of file diff --git a/.jupyter/data/runtime/jpserver-50575.json b/.jupyter/data/runtime/jpserver-50575.json new file mode 100644 index 0000000..88a3eb5 --- /dev/null +++ b/.jupyter/data/runtime/jpserver-50575.json @@ -0,0 +1,13 @@ +{ + "base_url": "/", + "hostname": "localhost", + "password": false, + "pid": 50575, + "port": 8889, + "root_dir": "/Users/pr/using_uv", + "secure": false, + "sock": "", + "token": "9cf16d6e8f8848cca644fbeba759ffea7e04ecf65f2e9e89", + "url": "http://localhost:8889/", + "version": "2.17.0" +} \ No newline at end of file diff --git a/.jupyter/data/runtime/kernel-594af5d9-c160-4648-be09-d77009267580.json b/.jupyter/data/runtime/kernel-594af5d9-c160-4648-be09-d77009267580.json new file mode 100644 index 0000000..3278c76 --- /dev/null +++ b/.jupyter/data/runtime/kernel-594af5d9-c160-4648-be09-d77009267580.json @@ -0,0 +1,13 @@ +{ + "shell_port": 57791, + "iopub_port": 57792, + "stdin_port": 57793, + "control_port": 57795, + "hb_port": 57794, + "ip": "127.0.0.1", + "key": "8c40ef9b-d657f829b5649f10e9d4ef11", + "transport": "tcp", + "signature_scheme": "hmac-sha256", + "kernel_name": "python3", + "jupyter_session": "/Users/pr/using_uv/Files/intro_to_gennaker.ipynb" +} \ No newline at end of file diff --git a/.jupyter/lab/workspaces/auto-a-ce05.jupyterlab-workspace b/.jupyter/lab/workspaces/auto-a-ce05.jupyterlab-workspace new file mode 100644 index 0000000..ff317ed --- /dev/null +++ b/.jupyter/lab/workspaces/auto-a-ce05.jupyterlab-workspace @@ -0,0 +1 @@ +{"data":{"file-browser-filebrowser:columns":{"sizes":{"name":139.5,"file_size":null,"is_selected":18,"last_modified":86.5}},"layout-restorer:data":{"main":{"dock":{"type":"tab-area","currentIndex":1,"widgets":["notebook:Files/intro_to_gennaker.ipynb"]},"current":"notebook:Files/intro_to_gennaker.ipynb"},"down":{"size":0,"widgets":[]},"left":{"collapsed":false,"visible":true,"current":"filebrowser","widgets":["filebrowser","running-sessions","@jupyterlab/toc:plugin"],"widgetStates":{"jp-running-sessions":{"sizes":[0.16666666666666666,0.16666666666666666,0.16666666666666666,0.16666666666666666,0.16666666666666666,0.16666666666666666],"expansionStates":[false,false,false,false,false,false]}}},"right":{"collapsed":true,"visible":true,"widgets":["jp-property-inspector"],"widgetStates":{}},"relativeSizes":[0.2040650406504065,0.7959349593495935,0],"top":{"simpleVisibility":true}},"docmanager:recents":{"opened":[{"path":"Files","contentType":"directory","root":"~/using_uv"},{"path":"Files/intro_to_gennaker.ipynb","contentType":"notebook","factory":"Notebook","root":"~/using_uv"}],"closed":[]},"notebook:Files/intro_to_gennaker.ipynb":{"data":{"path":"Files/intro_to_gennaker.ipynb","factory":"Notebook"}}},"metadata":{"id":"auto-a"}} \ No newline at end of file diff --git a/.jupyter/lab/workspaces/auto-f-4f86.jupyterlab-workspace b/.jupyter/lab/workspaces/auto-f-4f86.jupyterlab-workspace index 32086ef..080915f 100644 --- a/.jupyter/lab/workspaces/auto-f-4f86.jupyterlab-workspace +++ b/.jupyter/lab/workspaces/auto-f-4f86.jupyterlab-workspace @@ -1 +1 @@ -{"data":{"file-browser-filebrowser:columns":{"sizes":{"name":53.5,"file_size":null,"is_selected":18,"last_modified":40.5}},"layout-restorer:data":{"main":{"dock":{"type":"tab-area","currentIndex":1,"widgets":["notebook:Files/test_imports.ipynb","editor:Files/untitled.txt","terminal:1"]}},"down":{"size":0,"widgets":[]},"left":{"collapsed":false,"visible":true,"current":"filebrowser","widgets":["filebrowser","running-sessions","@jupyterlab/toc:plugin"],"widgetStates":{"jp-running-sessions":{"sizes":[0.16666666666666666,0.16666666666666666,0.16666666666666666,0.16666666666666666,0.16666666666666666,0.16666666666666666],"expansionStates":[false,false,false,false,false,false]}}},"right":{"collapsed":true,"visible":true,"widgets":["jp-property-inspector"],"widgetStates":{}},"relativeSizes":[0.18092832869257522,0.8190716713074248,0],"top":{"simpleVisibility":true}},"docmanager:recents":{"opened":[{"path":"Files","contentType":"directory","root":"~/jl_1"},{"path":"Files/untitled.txt","contentType":"file","factory":"Editor","root":"~/jl_1"},{"path":"Files/test_imports.ipynb","contentType":"notebook","factory":"Notebook","root":"~/jl_1"}],"closed":[]},"notebook:Files/test_imports.ipynb":{"data":{"path":"Files/test_imports.ipynb","factory":"Notebook"}},"editor:Files/untitled.txt":{"data":{"path":"Files/untitled.txt","factory":"Editor"}},"terminal:1":{"data":{"name":"1"}}},"metadata":{"id":"auto-f"}} \ No newline at end of file +{"data":{"file-browser-filebrowser:columns":{"sizes":{"name":139.5,"file_size":null,"is_selected":18,"last_modified":86.5}},"layout-restorer:data":{"main":{"dock":{"type":"tab-area","currentIndex":1,"widgets":["notebook:Files/intro_to_gennaker.ipynb"]},"current":"notebook:Files/intro_to_gennaker.ipynb"},"down":{"size":0,"widgets":[]},"left":{"collapsed":false,"visible":true,"current":"filebrowser","widgets":["filebrowser","running-sessions","@jupyterlab/toc:plugin"],"widgetStates":{"jp-running-sessions":{"sizes":[0.16666666666666666,0.16666666666666666,0.16666666666666666,0.16666666666666666,0.16666666666666666,0.16666666666666666],"expansionStates":[false,false,false,false,false,false]}}},"right":{"collapsed":true,"visible":true,"widgets":["jp-property-inspector"],"widgetStates":{}},"relativeSizes":[0.2040650406504065,0.7959349593495935,0],"top":{"simpleVisibility":true}},"docmanager:recents":{"opened":[{"path":"Files","contentType":"directory","root":"~/using_uv"},{"path":"Files/symbolic_math.py","contentType":"file","factory":"Editor","root":"~/using_uv"},{"path":"Files/intro_to_gennaker.ipynb","contentType":"notebook","factory":"Notebook","root":"~/using_uv"}],"closed":[{"path":"Files/symbolic_math.py","contentType":"file","factory":"Editor","root":"~/using_uv"}]},"notebook:Files/intro_to_gennaker.ipynb":{"data":{"path":"Files/intro_to_gennaker.ipynb","factory":"Notebook"}}},"metadata":{"id":"auto-f"}} \ No newline at end of file diff --git a/.jupyter/lab/workspaces/auto-u-97ed.jupyterlab-workspace b/.jupyter/lab/workspaces/auto-u-97ed.jupyterlab-workspace new file mode 100644 index 0000000..bd94f25 --- /dev/null +++ b/.jupyter/lab/workspaces/auto-u-97ed.jupyterlab-workspace @@ -0,0 +1 @@ +{"data":{"file-browser-filebrowser:columns":{"sizes":{"name":139.5,"file_size":null,"is_selected":18,"last_modified":86.5}},"layout-restorer:data":{"main":{"dock":{"type":"tab-area","currentIndex":1,"widgets":["notebook:Files/intro_to_gennaker.ipynb"]},"current":"notebook:Files/intro_to_gennaker.ipynb"},"down":{"size":0,"widgets":[]},"left":{"collapsed":false,"visible":true,"current":"filebrowser","widgets":["filebrowser","running-sessions","@jupyterlab/toc:plugin"],"widgetStates":{"jp-running-sessions":{"sizes":[0.16666666666666666,0.16666666666666666,0.16666666666666666,0.16666666666666666,0.16666666666666666,0.16666666666666666],"expansionStates":[false,false,false,false,false,false]}}},"right":{"collapsed":true,"visible":true,"widgets":["jp-property-inspector"],"widgetStates":{}},"relativeSizes":[0.2040650406504065,0.7959349593495935,0],"top":{"simpleVisibility":true}},"docmanager:recents":{"opened":[{"path":"Files","contentType":"directory","root":"~/using_uv"},{"path":"Files/intro_to_gennaker.ipynb","contentType":"notebook","factory":"Notebook","root":"~/using_uv"}],"closed":[]},"notebook:Files/intro_to_gennaker.ipynb":{"data":{"path":"Files/intro_to_gennaker.ipynb","factory":"Notebook"}}},"metadata":{"id":"auto-U"}} \ No newline at end of file diff --git a/.jupyter/lab/workspaces/default-37a8.jupyterlab-workspace b/.jupyter/lab/workspaces/default-37a8.jupyterlab-workspace index 482b9ab..5b662a9 100644 --- a/.jupyter/lab/workspaces/default-37a8.jupyterlab-workspace +++ b/.jupyter/lab/workspaces/default-37a8.jupyterlab-workspace @@ -1 +1 @@ -{"data":{"file-browser-filebrowser:columns":{"sizes":{"name":155.25,"file_size":null,"is_selected":18,"last_modified":91.75}},"layout-restorer:data":{"main":{"dock":{"type":"tab-area","currentIndex":0,"widgets":[]}},"down":{"size":0,"widgets":[]},"left":{"collapsed":false,"visible":true,"current":"filebrowser","widgets":["filebrowser","running-sessions","@jupyterlab/toc:plugin"],"widgetStates":{"jp-running-sessions":{"sizes":[0.16666666666666666,0.16666666666666666,0.16666666666666666,0.16666666666666666,0.16666666666666666,0.16666666666666666],"expansionStates":[false,false,false,false,false,false]}}},"right":{"collapsed":true,"visible":true,"widgets":["jp-property-inspector"],"widgetStates":{}},"relativeSizes":[0.22153574580759047,0.7784642541924095,0],"top":{"simpleVisibility":true}},"docmanager:recents":{"opened":[{"path":"Files","contentType":"directory","root":"~/jl_0"},{"path":"","contentType":"directory","root":"~/jl_0"},{"path":"s.sh","contentType":"file","factory":"Editor","root":"~/jl_0"}],"closed":[{"path":"s.sh","contentType":"file","factory":"Editor","root":"~/jl_0"}]},"file-browser-filebrowser:cwd":{"path":"Files"}},"metadata":{"id":"default"}} \ No newline at end of file +{"data":{"file-browser-filebrowser:columns":{"sizes":{"name":155.61328125,"file_size":null,"is_selected":18,"last_modified":91.87109375}},"layout-restorer:data":{"main":{"dock":{"type":"tab-area","currentIndex":0,"widgets":[]}},"down":{"size":0,"widgets":[]},"left":{"collapsed":false,"visible":true,"current":"filebrowser","widgets":["filebrowser","running-sessions","@jupyterlab/toc:plugin"],"widgetStates":{"jp-running-sessions":{"sizes":[0.16666666666666666,0.16666666666666666,0.16666666666666666,0.16666666666666666,0.16666666666666666,0.16666666666666666],"expansionStates":[false,false,false,false,false,false]}}},"right":{"collapsed":true,"visible":true,"widgets":["jp-property-inspector"],"widgetStates":{}},"relativeSizes":[0.22153574580759047,0.7784642541924095,0],"top":{"simpleVisibility":true}},"docmanager:recents":{"opened":[{"path":"Files","contentType":"directory","root":"~/using_uv"},{"path":"Files/intro_to_gennaker.ipynb","contentType":"notebook","factory":"Notebook","root":"~/using_uv"},{"path":"Files/requirements.txt","contentType":"file","factory":"Editor","root":"~/using_uv"},{"path":"Files/test_imports.ipynb","contentType":"notebook","factory":"Notebook","root":"~/using_uv"},{"path":"","contentType":"directory","root":"~/using_uv"},{"path":"pyproject.toml","contentType":"file","factory":"Editor","root":"~/using_uv"},{"path":"s.sh","contentType":"file","factory":"Editor","root":"~/jl_0"}],"closed":[{"path":"Files/intro_to_gennaker.ipynb","contentType":"notebook","factory":"Notebook","root":"~/using_uv"},{"path":"Files/requirements.txt","contentType":"file","factory":"Editor","root":"~/using_uv"},{"path":"Files/test_imports.ipynb","contentType":"notebook","factory":"Notebook","root":"~/using_uv"},{"path":"pyproject.toml","contentType":"file","factory":"Editor","root":"~/using_uv"},{"path":"s.sh","contentType":"file","factory":"Editor","root":"~/jl_0"}]},"file-browser-filebrowser:cwd":{"path":"Files"}},"metadata":{"id":"default"}} \ No newline at end of file diff --git a/.virtual_documents/Files/intro_to_gennaker.ipynb b/.virtual_documents/Files/intro_to_gennaker.ipynb new file mode 100644 index 0000000..5cbce3d --- /dev/null +++ b/.virtual_documents/Files/intro_to_gennaker.ipynb @@ -0,0 +1,94 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +from symbolic_math import * + + +g = Lambda(x, exp(-x**(-2))) +g + + +h = Lambda(x, a + b*(1-g(x))) +h + + +r = Lambda(x, (a / h(x))) +r + + +F = Lambda((x,t), (exp(h(x)*t)*(1-r(x))+r(x))**(-1)) +F + + + + + +F0 = Lambda(t, limit(F(x,t), x, 0)) +F0 + + + + + + + + +# !uv pip install plotnine polars + + +from plotnine import ggplot, aes, geom_point, geom_smooth + + +from polars import read_csv + + + + + +dtypes = {"x": float, "y": float} + +df = read_csv( + "data.csv", + schema_overrides = dtypes +) + + + + + + +( + ggplot(data=df, mapping = aes(x = "x", y = "y")) + + geom_point() + + geom_smooth(method="lm", color="blue") +) + + + diff --git a/Files/Using_pylock.ipynb b/Files/Using_pylock.ipynb deleted file mode 100644 index b69944f..0000000 --- a/Files/Using_pylock.ipynb +++ /dev/null @@ -1,126 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": 1, - "id": "2d3833aa-a58b-4752-9b8e-060fae34ed83", - "metadata": {}, - "outputs": [], - "source": [ - "import re" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "id": "005fe62c-1bf4-48bc-bc18-5cc46ea2e1ce", - "metadata": {}, - "outputs": [], - "source": [ - "lck = r\"^pylock\\.([^.]+)\\.toml$\"" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "id": "f3768a43-f740-4590-bf20-fba50486f627", - "metadata": {}, - "outputs": [], - "source": [ - "pl = re.compile(lck)" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "id": "b5d1fc98-4d71-42b7-a013-bbf18649f6c0", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "None\n" - ] - } - ], - "source": [ - "print(pl.match(\"pylock.toml\"))" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "id": "b001ae47-6eac-4a18-9a7e-c379df48577d", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "\n" - ] - } - ], - "source": [ - "print(pl.match(\"pylock.name.toml\"))" - ] - }, - { - "cell_type": "code", - "execution_count": 13, - "id": "2b86f199-f780-44c1-833e-9e3fc69b9f90", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "'v1'" - ] - }, - "execution_count": 13, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "filename = \"pylock.v1.toml\"\n", - "if len(filename) > 11 and filename.startswith(\"pylock.\") and filename.endswith(\".toml\"):\n", - " name = filename.removeprefix(\"pylock.\").removesuffix(\".toml\")\n", - "\n", - "name " - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "8a1d59ef-6c70-4693-a25c-0e58a6e37e21", - "metadata": {}, - "outputs": [], - "source": [ - "uv --version" - ] - } - ], - "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.13.5" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} diff --git a/Files/data.csv b/Files/data.csv new file mode 100644 index 0000000..fddbf7f --- /dev/null +++ b/Files/data.csv @@ -0,0 +1,6 @@ +x, y +1, 2 +2, 4 +3, 12 +4, 16 +5, 25 \ No newline at end of file diff --git a/Files/intro_to_gennaker.ipynb b/Files/intro_to_gennaker.ipynb new file mode 100644 index 0000000..17a53b7 --- /dev/null +++ b/Files/intro_to_gennaker.ipynb @@ -0,0 +1,393 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "e78aac2a-9ecf-4384-8ca8-ad6926f91908", + "metadata": {}, + "source": [ + "# Introduction to Gennaker " + ] + }, + { + "cell_type": "markdown", + "id": "1522ef7c-4285-4a20-8c20-f05e9114ee10", + "metadata": {}, + "source": [ + "Gennaker is an app that lets you read or write a type of document called a booklet. The characteristic feature of a booklet is that it can conveys ideas that are codified in three complementary ways:\n", + "\n", + "- natural language \n", + "- mathematics\n", + "- computer code" + ] + }, + { + "cell_type": "markdown", + "id": "517e5455-1e48-4c31-82b9-10e784e0df1d", + "metadata": {}, + "source": [ + "## Python and Notebooks\n", + "\n", + "Python is the default code dialect because it is programming language that is closest to a universal second language. \n", + "\n", + "Gennaker relies heavily on JupyterLab (henceforth JL) and its notebooks. A JL notebook is essentially a text file with code like any other but better comments. \n", + "\n", + "Neither Gennaker nor JupyterLab try to be an integrated developoment environment (IDE) for writing code. JupyterLab is a toolkit. Gennaker is a collection of tools that make it easy for authors can use to create and distribute technical documents and equally easy for readers to read and experiment with such documents. " + ] + }, + { + "cell_type": "markdown", + "id": "91372beb-4cd8-40ef-bd17-2541eb46ca2c", + "metadata": {}, + "source": [ + "## The Role for Gennaker\n", + "\n", + "In contrast to the familiar tools for creating and read PDFs, Gennaker is committed to equal treatment for authors and readers. \n", + "\n", + "It is also intended as a set of “training wheels” that make it easy for someone to started using Python and JupyterLab to read and write documents that are like PDFs with working code. Like JupyterLab, Gennaker is open source. The people who are developing Gennaker have zero incentive to lock you into using it. Like training wheels for bicycles, Gennaker succeeds when people stop using it. \n", + "\n", + "If you are working on macOS or Windows and aren't familiar with Python and JupyterLab, Gennaker makes it trivial to get up and running. All you have to do is download and install an app. (If you are working on Linux, you don't need training wheels.) " + ] + }, + { + "cell_type": "markdown", + "id": "e2f4a448-ea61-4fa3-90b3-2721869da6be", + "metadata": {}, + "source": [ + "## Booklets\n", + "Gennaker is organizes its documents as booklets. In many ways, a booklet is like a software project that will eventually be published as a library. Booklets should also be published, and might even be published on sites such as [`http://pypi.org`](https://pypi.org) that distributes code libraries, but a more natural channel might be a reasearch paper repository analogous to [`https://arxiv.org`](https://arxiv.org) or [`https://nber.org`](https://nber.org). \n", + "\n", + "Booklets will often (but not always) include a JupyterLab notebook. Frequently they will include other files too. If you look in the browser bar to the right, you'll see that this booklet includes both this notebook, with the characteristic suffix, `.ipynb` and a comma-separated-value file `data.csv` that the code in the notebook reads from.\n" + ] + }, + { + "cell_type": "markdown", + "id": "a2db5ad7-c267-481b-ba5d-7fc4d233dc87", + "metadata": {}, + "source": [ + "## Clean and Classic Notebook Interfaces\n", + "When you open a notebook that was authored inside Gennaker, the default is to display a decluttered version of the classic user interface of JupyterLab. The file format for a notebook is unchanged, so there are many possibilities: \n", + "\n", + "- An author can publish a booklet with notebooks that by default using either the clean interface or JupyterLab's classic, full-featured interface.\n", + "\n", + "- No matter what the author decided, a reader can choose which interface to use to display a notebook. \n", + "\n", + "If you want to see a side by side comparision of the two interfaces, use the main Gennaker page to open the “Classic JupyterLab” booklet. It has a copy of this notebook. Open it and compare it to this version of the notebook to see the difference in the interfaces. " + ] + }, + { + "cell_type": "markdown", + "id": "3fb874ca-68d9-42e8-ba21-27baf45ab194", + "metadata": {}, + "source": [ + "## What You Can Do With a Gennaker Booklet" + ] + }, + { + "cell_type": "markdown", + "id": "21550cd0-10ab-40d9-9fba-b857c68dae09", + "metadata": {}, + "source": [ + "### Latex Math and Symbolic Calculations" + ] + }, + { + "cell_type": "markdown", + "id": "7372ef42-1920-4467-b9d9-e2c6b7125705", + "metadata": {}, + "source": [ + "You can display typeset mathematics using markup from Latex that you type in by hand:\n", + "$$V = \\sum_{t = 0}^{\\infty} \\beta^t x_t$$\n" + ] + }, + { + "cell_type": "markdown", + "id": "4565cef2-2b60-447d-995e-b3c478835bbc", + "metadata": {}, + "source": [ + "You sometimes it is easier to build up complex Latex expressions by composing functions. For example, to specify a time dependent desity function you can define some functions and compose them:" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "c024b99c-2c7e-483b-8ff5-026911ae0b01", + "metadata": {}, + "outputs": [], + "source": [ + "from symbolic_math import *" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "afc66e23-7f0c-40bf-9149-6a0fb1f37c75", + "metadata": {}, + "outputs": [ + { + "data": { + "text/latex": [ + "$\\displaystyle \\left( x \\mapsto e^{- \\frac{1}{x^{2}}} \\right)$" + ], + "text/plain": [ + "Lambda(x, exp(-1/x**2))" + ] + }, + "execution_count": 2, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "g = Lambda(x, exp(-x**(-2))) \n", + "g" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "836c65c4-8914-4d9c-bd3b-76de0dad993b", + "metadata": {}, + "outputs": [ + { + "data": { + "text/latex": [ + "$\\displaystyle \\left( x \\mapsto \\alpha + \\beta \\left(1 - e^{- \\frac{1}{x^{2}}}\\right) \\right)$" + ], + "text/plain": [ + "Lambda(x, alpha + beta*(1 - exp(-1/x**2)))" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "h = Lambda(x, a + b*(1-g(x)))\n", + "h" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "5b95ab3d-245c-47ec-b06d-026deadf22f8", + "metadata": {}, + "outputs": [ + { + "data": { + "text/latex": [ + "$\\displaystyle \\left( x \\mapsto \\frac{\\alpha}{\\alpha + \\beta \\left(1 - e^{- \\frac{1}{x^{2}}}\\right)} \\right)$" + ], + "text/plain": [ + "Lambda(x, alpha/(alpha + beta*(1 - exp(-1/x**2))))" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "r = Lambda(x, (a / h(x)))\n", + "r" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "03daf02c-7bb5-4119-8f47-56ec7891fe48", + "metadata": {}, + "outputs": [ + { + "data": { + "text/latex": [ + "$\\displaystyle \\left( \\left( x, \\ t\\right) \\mapsto \\frac{1}{\\frac{\\alpha}{\\alpha + \\beta \\left(1 - e^{- \\frac{1}{x^{2}}}\\right)} + \\left(- \\frac{\\alpha}{\\alpha + \\beta \\left(1 - e^{- \\frac{1}{x^{2}}}\\right)} + 1\\right) e^{t \\left(\\alpha + \\beta \\left(1 - e^{- \\frac{1}{x^{2}}}\\right)\\right)}} \\right)$" + ], + "text/plain": [ + "Lambda((x, t), 1/(alpha/(alpha + beta*(1 - exp(-1/x**2))) + (-alpha/(alpha + beta*(1 - exp(-1/x**2))) + 1)*exp(t*(alpha + beta*(1 - exp(-1/x**2))))))" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "F = Lambda((x,t), (exp(h(x)*t)*(1-r(x))+r(x))**(-1))\n", + "F" + ] + }, + { + "cell_type": "markdown", + "id": "ae22df78-c867-4ecd-964f-30299ad04259", + "metadata": {}, + "source": [ + "This type of distribtuion function has a time varying proabitatiy mass at zero. Sympy will calculate the limit for you. " + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "dcb6ee7e-5bac-4a4d-90dc-8d430198b2b6", + "metadata": {}, + "outputs": [ + { + "data": { + "text/latex": [ + "$\\displaystyle \\left( t \\mapsto \\frac{\\alpha + \\beta}{\\alpha + \\beta e^{\\alpha t + \\beta t}} \\right)$" + ], + "text/plain": [ + "Lambda(t, (alpha + beta)/(alpha + beta*exp(alpha*t + beta*t)))" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "F0 = Lambda(t, limit(F(x,t), x, 0))\n", + "F0" + ] + }, + { + "cell_type": "markdown", + "id": "db98aeb9-717d-4351-8b81-8cb0d7f53e16", + "metadata": {}, + "source": [ + "### Graphing" + ] + }, + { + "cell_type": "markdown", + "id": "cc011088-4e40-40ef-9769-a688f6b692f1", + "metadata": {}, + "source": [ + "The Python workhorses for scientific visualization and data analysis have long been `matplotlib` and `pandas`. The default package manager was `pip`.\n", + "\n", + "These are widely used and well tested, so of course, Gennaker supports them. But there are newer possibilities you can try. \n", + "\n", + "The `uv` library can speed things up dramatically, especially on Windows. If you are familiar with `ggplot` from `R`. you might want to try the `plotnine` library. Here, we'll use `polars` to turn a `csv` file into the type of dataframe that `ggplot` expects. \n", + "\n", + "If we wanted to hide these details from the reader, we could put some of what follows into a `.py` and import from it, just as we did for SymPy. Instead, we can do the `uv` version of a `pip install` on the fly by using the `!` operator to have JupyterLab pass a command onto the operating system shell instead of giving it to the Python interpreter:" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "08ed7171-dad7-4eaf-8df5-8cd60419d6cf", + "metadata": {}, + "outputs": [], + "source": [ + "# !uv pip install plotnine polars" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "83c6d770-6e7e-4a6c-9373-437fc0d51b79", + "metadata": {}, + "outputs": [], + "source": [ + "from plotnine import ggplot, aes, geom_point, geom_smooth" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "bc1fb547-2603-4c38-8c25-7c9489fed5b0", + "metadata": {}, + "outputs": [], + "source": [ + "from polars import read_csv" + ] + }, + { + "cell_type": "markdown", + "id": "f8c7283b-4b24-48a0-87b5-97c300e0fb16", + "metadata": {}, + "source": [ + "We can define a Python dictionary `dtypes` to override the default assumptions that Polars would otherwise make when it reads the data from the `csv` file. " + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "id": "27d3e23e-f5dc-41d7-aba2-60d6aa791a63", + "metadata": {}, + "outputs": [], + "source": [ + "dtypes = {\"x\": float, \"y\": float}\n", + "\n", + "df = read_csv(\n", + " \"data.csv\",\n", + " schema_overrides = dtypes\n", + ")\n" + ] + }, + { + "cell_type": "markdown", + "id": "1e102aa0-2c13-4057-a7bb-9cc24b62bd73", + "metadata": {}, + "source": [ + "Finally, we use the layered approach of `ggplot` to define the look of the plot and add some geometric objects. " + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "id": "ccc7ef57-e467-4b8c-bfde-57fe32c06d16", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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CajQALCjoyM+85nPxPXXXx9XXHFF3HDDDXHuuedmXyimlUeXXHLJxtUGtUIFIABl6dp32WWXxZNPPpn9nD7kf/rTn459993XqwFk0of7JL05T9/gX3311RvfsKc38rW4dAdqXfog/8QTT2Rdwd/1rneVezhABUpbA6TPFhMnTvyjfYMbGxvj2GOPjTFjxsSXv/zleO655+L+++9/0xYkeSYABKBkli1bFt/5znfiZz/7WVYBmP4Q/8mf/El85CMfifb2dq8E8CYNDQ1xyCGHZG/YzzvvvFi8eHH8+te/jsmTJ5stqCGPP/54tp9X2sPrzDPPLPdwgAqVgr90KxYQjhkzJl566aXsCwUBIADsYHPnzo2LL75448a86Y/t6aefHmPHjjXXUOPSB/v0LXxra2tMmzZtk8ekbn7d3d1ZADh//vySjxEor7T8P+0XnCqBP/zhDxdtPJYceuih8cUvfrGEIwSqRXd3dxYArlmzJmqJCkAARtyqVas2hn9pj7+03Peggw4y88DGTr8zZszINvM/5ZRTsiDwjVLV8Lp167LHbW1tZg5qTGdnZ1b9tzkpGEzSpv5NTU3R399fwtEBlWDRokVxzTXXZI+nT5+e7ff3RoP//0VCUmuFCAJAAEbc7bffnoV/6UN9CgInTZpk1oGN9t577yz8SyHfAw88EEceeeSbZufBBx/MGoEk9guF2vO+970vu23OiSeemN1/9rOfjb322quEIwMqRWr8cffdd8fq1auz68DRRx/9pmPuuOOO7P1Eet+RthipJboAAzDi7rnnnuw+7fcn/APeKG3Wfdhhh2WPr7zyynj44YezMHBDE5C0b2jq/Jmkjf933XVXkwgA/JFU/fv+978/e5wahv3yl7/c2Ol3/fr1ce+992bvM5Kjjjrqj5qE1AIVgACMqPQh/plnnskez5w5M+67776ix59wwgkxdepUrwrUmHPOOSdmz54dzz//fFYpnJbtpNvChQs3vnlPlYLnn39+uYcKAFSotMd4ej/xyCOPxNe//vVs25ANewivXLly40qCs88+O2qNABCAEbV06dKN+3YtWLBg2OOXLFniFYEa1NPTk71Rv+WWW7JlwGl/nhT+peU8u+++exxxxBHZt/WpKzAAwKakwO+SSy7JCg/uvPPOmDVrVrbXcEdHR+y5554xefLkbDuBWnw/UTe0YX0FAAAAAJA79gAEAAAAgBwTAAIAAABAjgkAAQAAACDHBIAAAAAAkGMCQAAAAADIMQEgAAAAAOSYABAAAAAAckwACAAAAAA5JgAEAAAAgBwTAAIAAABAjgkAAQAAACDHBIAAAAAAkGMCQAAAAADIMQEgAAAAAOSYABAAAAAAckwACAAAAAA5JgAEAAAAgBwTAAIAAABAjgkAAQAAACDHBIAAAAAAkGMCQAAAAADIMQEgAAAAAOSYABAAAAAAckwACABAWdx7771RX18fdXV12X36eVMWLFgQAwMDG4+bOXNmyccKAFDNBIAAAJTFe97znjj33HOzx0NDQ/GpT30q1q1b96bjPve5z8XChQuzx2eddVYcddRRJR8rAEA1qxtK77YAAKAMli5dGm9729vi+eefz37++te/Hp/97Gc3Pn/XXXfFkUcemT3eaaed4rHHHouuri6vFQDAVhAAAgBQVrfeemuccMIJ2eNCoRCPP/547LLLLrFmzZrYf//944knnsieu/nmm2Pq1KleLQCArWQJMAAAZXX88cfHtGnTssfLly+P888/P3v8ta99bWP4l54X/gEAbBsVgAAAlF1q9LH33ntn98mll14aF154YaxatSpGjRqVLf1NjUAAANh6AkAAACrCddddFx/72Mfe9O/XX399/Nmf/VlZxgQAkAcCQAAAKkbaCzDtCbjBiSeeGD/60Y/KOiYAgGpnD0AAACrGSSed9Ec/n3zyyWUbCwBAXqgABACgIixcuDDbB/Dll1/e+G9jx47NugL39PSUdWwAANVMBSAAABXhggsu2Bj+jR49OrufN29efOYznynzyAAAqpsAEACAsrvtttvimmuuyR5PmjQpfvWrX0V3d3f289VXXx0///nPyzxCAIDqJQAEAKCsli1bFuecc87Gn//1X/81dtttt/jKV76y8d/OPvvsWLFiRZlGCABQ3QSAAACU1UUXXRSzZ8/OHp9yyilx7LHHZo9TKHjooYdmj2fNmhVf+tKXyjpOAIBqpQkIAABlc//998fhhx8eg4ODUSgUsoYfu+yyy8bnf/vb38bBBx8c69ati4aGhuz4d77znV4xAICtoAIQAICyWLNmTZx55plZ+JekCr/Xh3/J/vvvnzUHSdavXx9nnHFGrF27tizjBQCoVgJAAADK4u///u/jscceyx7vtddem+32e/HFF8eECROyx4888kh89atfLek4AQCqnSXAAAAAAJBjKgABAAAAIMcEgAAAAACQYwJAAAAAAMgxASAAAAAA5JgAEAAAAAByTAAIAAAAADkmAAQAAACAHBMAAgAAAECOCQABAAAAIMcEgAAAAACQYwJAAAAAAMgxASAAAAAA5JgAEAAAAAByTAAIAAAAADkmAAQAAACAHBMAAgAAAECOCQABAAAAIMcEgAAAAACQYwJAAAAAAIj8+j+Mvg2lVyWzcQAAAABJRU5ErkJggg==" + }, + "metadata": { + "image/png": { + "height": 480, + "width": 640 + } + }, + "output_type": "display_data" + } + ], + "source": [ + "(\n", + " ggplot(data=df, mapping = aes(x = \"x\", y = \"y\"))\n", + " + geom_point() \n", + " + geom_smooth(method=\"lm\", color=\"blue\")\n", + ") " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "ecd8389f-85b4-4845-b5c7-a35cf2e71f1a", + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "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.13.2" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/Files/jl_w_pylock.txt b/Files/jl_w_pylock.txt deleted file mode 100644 index dc4adf4..0000000 --- a/Files/jl_w_pylock.txt +++ /dev/null @@ -1,40 +0,0 @@ -Using pylock.toml: - -1. Create a requirements.in file that has the full path to the local libraries folder: - - .local-libraries/tufte-0.7.0-py3-none-any.whl - .local-libraries/clear_run_to_selected-0.3.0-py3-none-any.whl - -This is somewhat inconvenient because it means that the requirements.in file has to be updated when the version of one of these libraries changes. - - -2. Use uv to create the pylock.toml file: - - uv pip compile requirements.in -o pylock.toml - - -3. Have uv create the venv: - - uv venv - - uv pip sync pylock.toml - - - -4. Use the t.sh script to run Jupyter lab. The script creates environment variables for the Jupyter paths, adds .venv/bin to the PATH and and starts jupyter with the lab option: - - #!/bin/bash - export JUPYTERLAB_SETTINGS_DIR="${PWD}/.jupyter/lab/user-settings" - export JUPYTER_DATA_DIR="${PWD}/.jupyter/data" - export JUPYTER_CONFIG_DIR="${PWD}/.jupyter" - export VIRTUAL_ENV_PROMPT=.venv - export PATH=".venv/bin:$PATH" - jupyter lab - - -5. Note that this approach pins all of the versions, including all the versions for Jupyter Lab. One can argue that this is good in the sense that users will not run new libraries created after the date when the current lock file was generated. However, if we want to always be just 30 days behind the most recent versions, we have to continually: - -- update the update the requirements.in file and the wheels in the local-libraries folder -- recreate the `pylock.toml` file generated from the requirements.in file -- re-run the command `uv pip sync pylock.toml` - diff --git a/Files/requirements.txt b/Files/requirements.txt deleted file mode 100644 index 22a10dc..0000000 --- a/Files/requirements.txt +++ /dev/null @@ -1,11 +0,0 @@ -jupyterlab -pyjson5 -tomlkit -jupyterlab-lsp -python-lsp-server[all]>=1.13.1 -jupyterlab-spellchecker -jupyterlab-code-formatter -black -isort -ipywidgets -jupyterlab-quickopen diff --git a/Files/symbolic_math.py b/Files/symbolic_math.py new file mode 100644 index 0000000..9a240af --- /dev/null +++ b/Files/symbolic_math.py @@ -0,0 +1,5 @@ +import mpmath +from sympy import symbols, Function, Lambda, lambdify, exp, diff, limit, oo + +a, b, x, z, t = symbols('alpha beta x z t') + diff --git a/Files/test_imports.ipynb b/Files/test_imports.ipynb index d912e08..81995a5 100644 --- a/Files/test_imports.ipynb +++ b/Files/test_imports.ipynb @@ -13,7 +13,7 @@ "traceback": [ "\u001b[31m---------------------------------------------------------------------------\u001b[39m", "\u001b[31mModuleNotFoundError\u001b[39m Traceback (most recent call last)", - "\u001b[36mCell\u001b[39m\u001b[36m \u001b[39m\u001b[32mIn[1]\u001b[39m\u001b[32m, line 5\u001b[39m\n\u001b[32m 1\u001b[39m \u001b[38;5;28;01mimport\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[34;01mpyjson5\u001b[39;00m\n\u001b[32m 3\u001b[39m \u001b[38;5;28;01mimport\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[34;01mtomlkit\u001b[39;00m\n\u001b[32m----> \u001b[39m\u001b[32m5\u001b[39m \u001b[38;5;28;01mimport\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[34;01mwatchdog\u001b[39;00m\n\u001b[32m 7\u001b[39m \u001b[38;5;28;01mimport\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[34;01mnbconvert\u001b[39;00m\n\u001b[32m 9\u001b[39m \u001b[38;5;28;01mimport\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[34;01mnbformat\u001b[39;00m\n", + "\u001b[36mCell\u001b[39m\u001b[36m \u001b[39m\u001b[32mIn[1]\u001b[39m\u001b[32m, line 9\u001b[39m\n\u001b[32m 5\u001b[39m \u001b[38;5;28;01mimport\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[34;01mnbconvert\u001b[39;00m\n\u001b[32m 7\u001b[39m \u001b[38;5;28;01mimport\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[34;01mnbformat\u001b[39;00m\n\u001b[32m----> \u001b[39m\u001b[32m9\u001b[39m \u001b[38;5;28;01mimport\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[34;01mwatchdog\u001b[39;00m\n", "\u001b[31mModuleNotFoundError\u001b[39m: No module named 'watchdog'" ] } @@ -23,11 +23,11 @@ "\n", "import tomlkit\n", "\n", - "import watchdog\n", - "\n", "import nbconvert\n", "\n", - "import nbformat" + "import nbformat\n", + "\n", + "import watchdog\n" ] }, { @@ -55,7 +55,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.13.5" + "version": "3.13.2" } }, "nbformat": 4, diff --git a/Files/untitled.txt b/Files/untitled.txt deleted file mode 100644 index 23b76e8..0000000 --- a/Files/untitled.txt +++ /dev/null @@ -1,38 +0,0 @@ -Using pylock.toml: - -1. Create a requirements.in file that has full path to the local libraries: - -.local-libraries/tufte-0.7.0-py3-none-any.whl -.local-libraries/clear_run_to_selected-0.3.0-py3-none-any.whl - -This is somewhat inconvenient because it means that the requirements.in file has to be updated when the version of the library changes. - - -2. Use uv to create the pylock.toml file: - - uv pip compile requirements.in -o pylock.toml - - -3. Have uv create the venv: - - uv pip sync pylock.toml - - - -4. Use the t.sh script to run Jupyter lab. The script creates environment variables for the Jupyter paths, adds .venv/bin to the PATH and and starts jupyter with the lab option: - - #!/bin/bash - export JUPYTERLAB_SETTINGS_DIR="${PWD}/.jupyter/lab/user-settings" - export JUPYTER_DATA_DIR="${PWD}/.jupyter/data" - export JUPYTER_CONFIG_DIR="${PWD}/.jupyter" - export VIRTUAL_ENV_PROMPT=.venv - export PATH=".venv/bin:$PATH" - jupyter lab - - -5. Note that this approach pins all of the versions, including all the versions for Jupyter Lab. One can argue that this is good in the sense that users will not run new libraries created after the date when the current lock file was generated. However, if we want to always be just 30 days behind the most recent versions, we have to continually: - -- update the update the requirements.in file and the wheels in the local-libraries folder -- recreate the `pylock.toml` file generated from the requirements.in file -- re-run the command `uv pip sync pylock.toml` - diff --git a/Installs.txt b/Installs.txt new file mode 100644 index 0000000..ff6b523 --- /dev/null +++ b/Installs.txt @@ -0,0 +1,9 @@ +1. Install Python 3.14 +2. Install uv +3. test for presence of git +4. git + - macos: xcode-select -h + - git for windows + + + diff --git a/pyproject.toml b/pyproject.toml index b6fed49..0b261f4 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -18,4 +18,8 @@ dependencies = [ "jupyterlab-quickopen", "tufte", "clear_run_to_selected", + "plotnine", + "sympy", + "polars", + "pyarrow", ] diff --git a/uv.lock b/uv.lock index 534085a..b99ae86 100644 --- a/uv.lock +++ b/uv.lock @@ -325,6 +325,70 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/60/97/891a0971e1e4a8c5d2b20bbe0e524dc04548d2307fee33cdeba148fd4fc7/comm-0.2.3-py3-none-any.whl", hash = "sha256:c615d91d75f7f04f095b30d1c1711babd43bdc6419c1be9886a85f2f4e489417", size = 7294, upload-time = "2025-07-25T14:02:02.896Z" }, ] +[[package]] +name = "contourpy" +version = "1.3.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "numpy" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/58/01/1253e6698a07380cd31a736d248a3f2a50a7c88779a1813da27503cadc2a/contourpy-1.3.3.tar.gz", hash = "sha256:083e12155b210502d0bca491432bb04d56dc3432f95a979b429f2848c3dbe880", size = 13466174, upload-time = "2025-07-26T12:03:12.549Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/68/35/0167aad910bbdb9599272bd96d01a9ec6852f36b9455cf2ca67bd4cc2d23/contourpy-1.3.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:177fb367556747a686509d6fef71d221a4b198a3905fe824430e5ea0fda54eb5", size = 293257, upload-time = "2025-07-26T12:01:39.367Z" }, + { url = "https://files.pythonhosted.org/packages/96/e4/7adcd9c8362745b2210728f209bfbcf7d91ba868a2c5f40d8b58f54c509b/contourpy-1.3.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:d002b6f00d73d69333dac9d0b8d5e84d9724ff9ef044fd63c5986e62b7c9e1b1", size = 274034, upload-time = "2025-07-26T12:01:40.645Z" }, + { url = "https://files.pythonhosted.org/packages/73/23/90e31ceeed1de63058a02cb04b12f2de4b40e3bef5e082a7c18d9c8ae281/contourpy-1.3.3-cp313-cp313-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:348ac1f5d4f1d66d3322420f01d42e43122f43616e0f194fc1c9f5d830c5b286", size = 334672, upload-time = "2025-07-26T12:01:41.942Z" }, + { url = "https://files.pythonhosted.org/packages/ed/93/b43d8acbe67392e659e1d984700e79eb67e2acb2bd7f62012b583a7f1b55/contourpy-1.3.3-cp313-cp313-manylinux_2_26_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:655456777ff65c2c548b7c454af9c6f33f16c8884f11083244b5819cc214f1b5", size = 381234, upload-time = "2025-07-26T12:01:43.499Z" }, + { url = "https://files.pythonhosted.org/packages/46/3b/bec82a3ea06f66711520f75a40c8fc0b113b2a75edb36aa633eb11c4f50f/contourpy-1.3.3-cp313-cp313-manylinux_2_26_s390x.manylinux_2_28_s390x.whl", hash = "sha256:644a6853d15b2512d67881586bd03f462c7ab755db95f16f14d7e238f2852c67", size = 385169, upload-time = "2025-07-26T12:01:45.219Z" }, + { url = "https://files.pythonhosted.org/packages/4b/32/e0f13a1c5b0f8572d0ec6ae2f6c677b7991fafd95da523159c19eff0696a/contourpy-1.3.3-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4debd64f124ca62069f313a9cb86656ff087786016d76927ae2cf37846b006c9", size = 362859, upload-time = "2025-07-26T12:01:46.519Z" }, + { url = "https://files.pythonhosted.org/packages/33/71/e2a7945b7de4e58af42d708a219f3b2f4cff7386e6b6ab0a0fa0033c49a9/contourpy-1.3.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:a15459b0f4615b00bbd1e91f1b9e19b7e63aea7483d03d804186f278c0af2659", size = 1332062, upload-time = "2025-07-26T12:01:48.964Z" }, + { url = "https://files.pythonhosted.org/packages/12/fc/4e87ac754220ccc0e807284f88e943d6d43b43843614f0a8afa469801db0/contourpy-1.3.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:ca0fdcd73925568ca027e0b17ab07aad764be4706d0a925b89227e447d9737b7", size = 1403932, upload-time = "2025-07-26T12:01:51.979Z" }, + { url = "https://files.pythonhosted.org/packages/a6/2e/adc197a37443f934594112222ac1aa7dc9a98faf9c3842884df9a9d8751d/contourpy-1.3.3-cp313-cp313-win32.whl", hash = "sha256:b20c7c9a3bf701366556e1b1984ed2d0cedf999903c51311417cf5f591d8c78d", size = 185024, upload-time = "2025-07-26T12:01:53.245Z" }, + { url = "https://files.pythonhosted.org/packages/18/0b/0098c214843213759692cc638fce7de5c289200a830e5035d1791d7a2338/contourpy-1.3.3-cp313-cp313-win_amd64.whl", hash = "sha256:1cadd8b8969f060ba45ed7c1b714fe69185812ab43bd6b86a9123fe8f99c3263", size = 226578, upload-time = "2025-07-26T12:01:54.422Z" }, + { url = "https://files.pythonhosted.org/packages/8a/9a/2f6024a0c5995243cd63afdeb3651c984f0d2bc727fd98066d40e141ad73/contourpy-1.3.3-cp313-cp313-win_arm64.whl", hash = "sha256:fd914713266421b7536de2bfa8181aa8c699432b6763a0ea64195ebe28bff6a9", size = 193524, upload-time = "2025-07-26T12:01:55.73Z" }, + { url = "https://files.pythonhosted.org/packages/c0/b3/f8a1a86bd3298513f500e5b1f5fd92b69896449f6cab6a146a5d52715479/contourpy-1.3.3-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:88df9880d507169449d434c293467418b9f6cbe82edd19284aa0409e7fdb933d", size = 306730, upload-time = "2025-07-26T12:01:57.051Z" }, + { url = "https://files.pythonhosted.org/packages/3f/11/4780db94ae62fc0c2053909b65dc3246bd7cecfc4f8a20d957ad43aa4ad8/contourpy-1.3.3-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:d06bb1f751ba5d417047db62bca3c8fde202b8c11fb50742ab3ab962c81e8216", size = 287897, upload-time = "2025-07-26T12:01:58.663Z" }, + { url = "https://files.pythonhosted.org/packages/ae/15/e59f5f3ffdd6f3d4daa3e47114c53daabcb18574a26c21f03dc9e4e42ff0/contourpy-1.3.3-cp313-cp313t-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e4e6b05a45525357e382909a4c1600444e2a45b4795163d3b22669285591c1ae", size = 326751, upload-time = "2025-07-26T12:02:00.343Z" }, + { url = "https://files.pythonhosted.org/packages/0f/81/03b45cfad088e4770b1dcf72ea78d3802d04200009fb364d18a493857210/contourpy-1.3.3-cp313-cp313t-manylinux_2_26_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:ab3074b48c4e2cf1a960e6bbeb7f04566bf36b1861d5c9d4d8ac04b82e38ba20", size = 375486, upload-time = "2025-07-26T12:02:02.128Z" }, + { url = "https://files.pythonhosted.org/packages/0c/ba/49923366492ffbdd4486e970d421b289a670ae8cf539c1ea9a09822b371a/contourpy-1.3.3-cp313-cp313t-manylinux_2_26_s390x.manylinux_2_28_s390x.whl", hash = "sha256:6c3d53c796f8647d6deb1abe867daeb66dcc8a97e8455efa729516b997b8ed99", size = 388106, upload-time = "2025-07-26T12:02:03.615Z" }, + { url = "https://files.pythonhosted.org/packages/9f/52/5b00ea89525f8f143651f9f03a0df371d3cbd2fccd21ca9b768c7a6500c2/contourpy-1.3.3-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:50ed930df7289ff2a8d7afeb9603f8289e5704755c7e5c3bbd929c90c817164b", size = 352548, upload-time = "2025-07-26T12:02:05.165Z" }, + { url = "https://files.pythonhosted.org/packages/32/1d/a209ec1a3a3452d490f6b14dd92e72280c99ae3d1e73da74f8277d4ee08f/contourpy-1.3.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:4feffb6537d64b84877da813a5c30f1422ea5739566abf0bd18065ac040e120a", size = 1322297, upload-time = "2025-07-26T12:02:07.379Z" }, + { url = "https://files.pythonhosted.org/packages/bc/9e/46f0e8ebdd884ca0e8877e46a3f4e633f6c9c8c4f3f6e72be3fe075994aa/contourpy-1.3.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:2b7e9480ffe2b0cd2e787e4df64270e3a0440d9db8dc823312e2c940c167df7e", size = 1391023, upload-time = "2025-07-26T12:02:10.171Z" }, + { url = "https://files.pythonhosted.org/packages/b9/70/f308384a3ae9cd2209e0849f33c913f658d3326900d0ff5d378d6a1422d2/contourpy-1.3.3-cp313-cp313t-win32.whl", hash = "sha256:283edd842a01e3dcd435b1c5116798d661378d83d36d337b8dde1d16a5fc9ba3", size = 196157, upload-time = "2025-07-26T12:02:11.488Z" }, + { url = "https://files.pythonhosted.org/packages/b2/dd/880f890a6663b84d9e34a6f88cded89d78f0091e0045a284427cb6b18521/contourpy-1.3.3-cp313-cp313t-win_amd64.whl", hash = "sha256:87acf5963fc2b34825e5b6b048f40e3635dd547f590b04d2ab317c2619ef7ae8", size = 240570, upload-time = "2025-07-26T12:02:12.754Z" }, + { url = "https://files.pythonhosted.org/packages/80/99/2adc7d8ffead633234817ef8e9a87115c8a11927a94478f6bb3d3f4d4f7d/contourpy-1.3.3-cp313-cp313t-win_arm64.whl", hash = "sha256:3c30273eb2a55024ff31ba7d052dde990d7d8e5450f4bbb6e913558b3d6c2301", size = 199713, upload-time = "2025-07-26T12:02:14.4Z" }, + { url = "https://files.pythonhosted.org/packages/72/8b/4546f3ab60f78c514ffb7d01a0bd743f90de36f0019d1be84d0a708a580a/contourpy-1.3.3-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:fde6c716d51c04b1c25d0b90364d0be954624a0ee9d60e23e850e8d48353d07a", size = 292189, upload-time = "2025-07-26T12:02:16.095Z" }, + { url = "https://files.pythonhosted.org/packages/fd/e1/3542a9cb596cadd76fcef413f19c79216e002623158befe6daa03dbfa88c/contourpy-1.3.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:cbedb772ed74ff5be440fa8eee9bd49f64f6e3fc09436d9c7d8f1c287b121d77", size = 273251, upload-time = "2025-07-26T12:02:17.524Z" }, + { url = "https://files.pythonhosted.org/packages/b1/71/f93e1e9471d189f79d0ce2497007731c1e6bf9ef6d1d61b911430c3db4e5/contourpy-1.3.3-cp314-cp314-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:22e9b1bd7a9b1d652cd77388465dc358dafcd2e217d35552424aa4f996f524f5", size = 335810, upload-time = "2025-07-26T12:02:18.9Z" }, + { url = "https://files.pythonhosted.org/packages/91/f9/e35f4c1c93f9275d4e38681a80506b5510e9327350c51f8d4a5a724d178c/contourpy-1.3.3-cp314-cp314-manylinux_2_26_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:a22738912262aa3e254e4f3cb079a95a67132fc5a063890e224393596902f5a4", size = 382871, upload-time = "2025-07-26T12:02:20.418Z" }, + { url = "https://files.pythonhosted.org/packages/b5/71/47b512f936f66a0a900d81c396a7e60d73419868fba959c61efed7a8ab46/contourpy-1.3.3-cp314-cp314-manylinux_2_26_s390x.manylinux_2_28_s390x.whl", hash = "sha256:afe5a512f31ee6bd7d0dda52ec9864c984ca3d66664444f2d72e0dc4eb832e36", size = 386264, upload-time = "2025-07-26T12:02:21.916Z" }, + { url = "https://files.pythonhosted.org/packages/04/5f/9ff93450ba96b09c7c2b3f81c94de31c89f92292f1380261bd7195bea4ea/contourpy-1.3.3-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f64836de09927cba6f79dcd00fdd7d5329f3fccc633468507079c829ca4db4e3", size = 363819, upload-time = "2025-07-26T12:02:23.759Z" }, + { url = "https://files.pythonhosted.org/packages/3e/a6/0b185d4cc480ee494945cde102cb0149ae830b5fa17bf855b95f2e70ad13/contourpy-1.3.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:1fd43c3be4c8e5fd6e4f2baeae35ae18176cf2e5cced681cca908addf1cdd53b", size = 1333650, upload-time = "2025-07-26T12:02:26.181Z" }, + { url = "https://files.pythonhosted.org/packages/43/d7/afdc95580ca56f30fbcd3060250f66cedbde69b4547028863abd8aa3b47e/contourpy-1.3.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:6afc576f7b33cf00996e5c1102dc2a8f7cc89e39c0b55df93a0b78c1bd992b36", size = 1404833, upload-time = "2025-07-26T12:02:28.782Z" }, + { url = "https://files.pythonhosted.org/packages/e2/e2/366af18a6d386f41132a48f033cbd2102e9b0cf6345d35ff0826cd984566/contourpy-1.3.3-cp314-cp314-win32.whl", hash = "sha256:66c8a43a4f7b8df8b71ee1840e4211a3c8d93b214b213f590e18a1beca458f7d", size = 189692, upload-time = "2025-07-26T12:02:30.128Z" }, + { url = "https://files.pythonhosted.org/packages/7d/c2/57f54b03d0f22d4044b8afb9ca0e184f8b1afd57b4f735c2fa70883dc601/contourpy-1.3.3-cp314-cp314-win_amd64.whl", hash = "sha256:cf9022ef053f2694e31d630feaacb21ea24224be1c3ad0520b13d844274614fd", size = 232424, upload-time = "2025-07-26T12:02:31.395Z" }, + { url = "https://files.pythonhosted.org/packages/18/79/a9416650df9b525737ab521aa181ccc42d56016d2123ddcb7b58e926a42c/contourpy-1.3.3-cp314-cp314-win_arm64.whl", hash = "sha256:95b181891b4c71de4bb404c6621e7e2390745f887f2a026b2d99e92c17892339", size = 198300, upload-time = "2025-07-26T12:02:32.956Z" }, + { url = "https://files.pythonhosted.org/packages/1f/42/38c159a7d0f2b7b9c04c64ab317042bb6952b713ba875c1681529a2932fe/contourpy-1.3.3-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:33c82d0138c0a062380332c861387650c82e4cf1747aaa6938b9b6516762e772", size = 306769, upload-time = "2025-07-26T12:02:34.2Z" }, + { url = "https://files.pythonhosted.org/packages/c3/6c/26a8205f24bca10974e77460de68d3d7c63e282e23782f1239f226fcae6f/contourpy-1.3.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:ea37e7b45949df430fe649e5de8351c423430046a2af20b1c1961cae3afcda77", size = 287892, upload-time = "2025-07-26T12:02:35.807Z" }, + { url = "https://files.pythonhosted.org/packages/66/06/8a475c8ab718ebfd7925661747dbb3c3ee9c82ac834ccb3570be49d129f4/contourpy-1.3.3-cp314-cp314t-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d304906ecc71672e9c89e87c4675dc5c2645e1f4269a5063b99b0bb29f232d13", size = 326748, upload-time = "2025-07-26T12:02:37.193Z" }, + { url = "https://files.pythonhosted.org/packages/b4/a3/c5ca9f010a44c223f098fccd8b158bb1cb287378a31ac141f04730dc49be/contourpy-1.3.3-cp314-cp314t-manylinux_2_26_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:ca658cd1a680a5c9ea96dc61cdbae1e85c8f25849843aa799dfd3cb370ad4fbe", size = 375554, upload-time = "2025-07-26T12:02:38.894Z" }, + { url = "https://files.pythonhosted.org/packages/80/5b/68bd33ae63fac658a4145088c1e894405e07584a316738710b636c6d0333/contourpy-1.3.3-cp314-cp314t-manylinux_2_26_s390x.manylinux_2_28_s390x.whl", hash = "sha256:ab2fd90904c503739a75b7c8c5c01160130ba67944a7b77bbf36ef8054576e7f", size = 388118, upload-time = "2025-07-26T12:02:40.642Z" }, + { url = "https://files.pythonhosted.org/packages/40/52/4c285a6435940ae25d7410a6c36bda5145839bc3f0beb20c707cda18b9d2/contourpy-1.3.3-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b7301b89040075c30e5768810bc96a8e8d78085b47d8be6e4c3f5a0b4ed478a0", size = 352555, upload-time = "2025-07-26T12:02:42.25Z" }, + { url = "https://files.pythonhosted.org/packages/24/ee/3e81e1dd174f5c7fefe50e85d0892de05ca4e26ef1c9a59c2a57e43b865a/contourpy-1.3.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:2a2a8b627d5cc6b7c41a4beff6c5ad5eb848c88255fda4a8745f7e901b32d8e4", size = 1322295, upload-time = "2025-07-26T12:02:44.668Z" }, + { url = "https://files.pythonhosted.org/packages/3c/b2/6d913d4d04e14379de429057cd169e5e00f6c2af3bb13e1710bcbdb5da12/contourpy-1.3.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:fd6ec6be509c787f1caf6b247f0b1ca598bef13f4ddeaa126b7658215529ba0f", size = 1391027, upload-time = "2025-07-26T12:02:47.09Z" }, + { url = "https://files.pythonhosted.org/packages/93/8a/68a4ec5c55a2971213d29a9374913f7e9f18581945a7a31d1a39b5d2dfe5/contourpy-1.3.3-cp314-cp314t-win32.whl", hash = "sha256:e74a9a0f5e3fff48fb5a7f2fd2b9b70a3fe014a67522f79b7cca4c0c7e43c9ae", size = 202428, upload-time = "2025-07-26T12:02:48.691Z" }, + { url = "https://files.pythonhosted.org/packages/fa/96/fd9f641ffedc4fa3ace923af73b9d07e869496c9cc7a459103e6e978992f/contourpy-1.3.3-cp314-cp314t-win_amd64.whl", hash = "sha256:13b68d6a62db8eafaebb8039218921399baf6e47bf85006fd8529f2a08ef33fc", size = 250331, upload-time = "2025-07-26T12:02:50.137Z" }, + { url = "https://files.pythonhosted.org/packages/ae/8c/469afb6465b853afff216f9528ffda78a915ff880ed58813ba4faf4ba0b6/contourpy-1.3.3-cp314-cp314t-win_arm64.whl", hash = "sha256:b7448cb5a725bb1e35ce88771b86fba35ef418952474492cf7c764059933ff8b", size = 203831, upload-time = "2025-07-26T12:02:51.449Z" }, +] + +[[package]] +name = "cycler" +version = "0.12.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/a9/95/a3dbbb5028f35eafb79008e7522a75244477d2838f38cbb722248dabc2a8/cycler-0.12.1.tar.gz", hash = "sha256:88bb128f02ba341da8ef447245a9e138fae777f6a23943da4540077d3601eb1c", size = 7615, upload-time = "2023-10-07T05:32:18.335Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e7/05/c19819d5e3d95294a6f5947fb9b9629efb316b96de511b418c53d245aae6/cycler-0.12.1-py3-none-any.whl", hash = "sha256:85cef7cff222d8644161529808465972e51340599459b8ac3ccbac5a854e0d30", size = 8321, upload-time = "2023-10-07T05:32:16.783Z" }, +] + [[package]] name = "debugpy" version = "1.8.17" @@ -414,6 +478,39 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/35/f8/08d37b2cd89da306e3520bd27f8a85692122b42b56c0c2c3784ff09c022f/flake8-7.1.2-py2.py3-none-any.whl", hash = "sha256:1cbc62e65536f65e6d754dfe6f1bada7f5cf392d6f5db3c2b85892466c3e7c1a", size = 57745, upload-time = "2025-02-16T18:45:42.351Z" }, ] +[[package]] +name = "fonttools" +version = "4.60.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/4b/42/97a13e47a1e51a5a7142475bbcf5107fe3a68fc34aef331c897d5fb98ad0/fonttools-4.60.1.tar.gz", hash = "sha256:ef00af0439ebfee806b25f24c8f92109157ff3fac5731dc7867957812e87b8d9", size = 3559823, upload-time = "2025-09-29T21:13:27.129Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/7c/5b/cdd2c612277b7ac7ec8c0c9bc41812c43dc7b2d5f2b0897e15fdf5a1f915/fonttools-4.60.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:6f68576bb4bbf6060c7ab047b1574a1ebe5c50a17de62830079967b211059ebb", size = 2825777, upload-time = "2025-09-29T21:12:01.22Z" }, + { url = "https://files.pythonhosted.org/packages/d6/8a/de9cc0540f542963ba5e8f3a1f6ad48fa211badc3177783b9d5cadf79b5d/fonttools-4.60.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:eedacb5c5d22b7097482fa834bda0dafa3d914a4e829ec83cdea2a01f8c813c4", size = 2348080, upload-time = "2025-09-29T21:12:03.785Z" }, + { url = "https://files.pythonhosted.org/packages/2d/8b/371ab3cec97ee3fe1126b3406b7abd60c8fec8975fd79a3c75cdea0c3d83/fonttools-4.60.1-cp313-cp313-manylinux1_x86_64.manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:b33a7884fabd72bdf5f910d0cf46be50dce86a0362a65cfc746a4168c67eb96c", size = 4903082, upload-time = "2025-09-29T21:12:06.382Z" }, + { url = "https://files.pythonhosted.org/packages/04/05/06b1455e4bc653fcb2117ac3ef5fa3a8a14919b93c60742d04440605d058/fonttools-4.60.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:2409d5fb7b55fd70f715e6d34e7a6e4f7511b8ad29a49d6df225ee76da76dd77", size = 4960125, upload-time = "2025-09-29T21:12:09.314Z" }, + { url = "https://files.pythonhosted.org/packages/8e/37/f3b840fcb2666f6cb97038793606bdd83488dca2d0b0fc542ccc20afa668/fonttools-4.60.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:c8651e0d4b3bdeda6602b85fdc2abbefc1b41e573ecb37b6779c4ca50753a199", size = 4901454, upload-time = "2025-09-29T21:12:11.931Z" }, + { url = "https://files.pythonhosted.org/packages/fd/9e/eb76f77e82f8d4a46420aadff12cec6237751b0fb9ef1de373186dcffb5f/fonttools-4.60.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:145daa14bf24824b677b9357c5e44fd8895c2a8f53596e1b9ea3496081dc692c", size = 5044495, upload-time = "2025-09-29T21:12:15.241Z" }, + { url = "https://files.pythonhosted.org/packages/f8/b3/cede8f8235d42ff7ae891bae8d619d02c8ac9fd0cfc450c5927a6200c70d/fonttools-4.60.1-cp313-cp313-win32.whl", hash = "sha256:2299df884c11162617a66b7c316957d74a18e3758c0274762d2cc87df7bc0272", size = 2217028, upload-time = "2025-09-29T21:12:17.96Z" }, + { url = "https://files.pythonhosted.org/packages/75/4d/b022c1577807ce8b31ffe055306ec13a866f2337ecee96e75b24b9b753ea/fonttools-4.60.1-cp313-cp313-win_amd64.whl", hash = "sha256:a3db56f153bd4c5c2b619ab02c5db5192e222150ce5a1bc10f16164714bc39ac", size = 2266200, upload-time = "2025-09-29T21:12:20.14Z" }, + { url = "https://files.pythonhosted.org/packages/9a/83/752ca11c1aa9a899b793a130f2e466b79ea0cf7279c8d79c178fc954a07b/fonttools-4.60.1-cp314-cp314-macosx_10_13_universal2.whl", hash = "sha256:a884aef09d45ba1206712c7dbda5829562d3fea7726935d3289d343232ecb0d3", size = 2822830, upload-time = "2025-09-29T21:12:24.406Z" }, + { url = "https://files.pythonhosted.org/packages/57/17/bbeab391100331950a96ce55cfbbff27d781c1b85ebafb4167eae50d9fe3/fonttools-4.60.1-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:8a44788d9d91df72d1a5eac49b31aeb887a5f4aab761b4cffc4196c74907ea85", size = 2345524, upload-time = "2025-09-29T21:12:26.819Z" }, + { url = "https://files.pythonhosted.org/packages/3d/2e/d4831caa96d85a84dd0da1d9f90d81cec081f551e0ea216df684092c6c97/fonttools-4.60.1-cp314-cp314-manylinux1_x86_64.manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:e852d9dda9f93ad3651ae1e3bb770eac544ec93c3807888798eccddf84596537", size = 4843490, upload-time = "2025-09-29T21:12:29.123Z" }, + { url = "https://files.pythonhosted.org/packages/49/13/5e2ea7c7a101b6fc3941be65307ef8df92cbbfa6ec4804032baf1893b434/fonttools-4.60.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:154cb6ee417e417bf5f7c42fe25858c9140c26f647c7347c06f0cc2d47eff003", size = 4944184, upload-time = "2025-09-29T21:12:31.414Z" }, + { url = "https://files.pythonhosted.org/packages/0c/2b/cf9603551c525b73fc47c52ee0b82a891579a93d9651ed694e4e2cd08bb8/fonttools-4.60.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:5664fd1a9ea7f244487ac8f10340c4e37664675e8667d6fee420766e0fb3cf08", size = 4890218, upload-time = "2025-09-29T21:12:33.936Z" }, + { url = "https://files.pythonhosted.org/packages/fd/2f/933d2352422e25f2376aae74f79eaa882a50fb3bfef3c0d4f50501267101/fonttools-4.60.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:583b7f8e3c49486e4d489ad1deacfb8d5be54a8ef34d6df824f6a171f8511d99", size = 4999324, upload-time = "2025-09-29T21:12:36.637Z" }, + { url = "https://files.pythonhosted.org/packages/38/99/234594c0391221f66216bc2c886923513b3399a148defaccf81dc3be6560/fonttools-4.60.1-cp314-cp314-win32.whl", hash = "sha256:66929e2ea2810c6533a5184f938502cfdaea4bc3efb7130d8cc02e1c1b4108d6", size = 2220861, upload-time = "2025-09-29T21:12:39.108Z" }, + { url = "https://files.pythonhosted.org/packages/3e/1d/edb5b23726dde50fc4068e1493e4fc7658eeefcaf75d4c5ffce067d07ae5/fonttools-4.60.1-cp314-cp314-win_amd64.whl", hash = "sha256:f3d5be054c461d6a2268831f04091dc82753176f6ea06dc6047a5e168265a987", size = 2270934, upload-time = "2025-09-29T21:12:41.339Z" }, + { url = "https://files.pythonhosted.org/packages/fb/da/1392aaa2170adc7071fe7f9cfd181a5684a7afcde605aebddf1fb4d76df5/fonttools-4.60.1-cp314-cp314t-macosx_10_13_universal2.whl", hash = "sha256:b6379e7546ba4ae4b18f8ae2b9bc5960936007a1c0e30b342f662577e8bc3299", size = 2894340, upload-time = "2025-09-29T21:12:43.774Z" }, + { url = "https://files.pythonhosted.org/packages/bf/a7/3b9f16e010d536ce567058b931a20b590d8f3177b2eda09edd92e392375d/fonttools-4.60.1-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:9d0ced62b59e0430b3690dbc5373df1c2aa7585e9a8ce38eff87f0fd993c5b01", size = 2375073, upload-time = "2025-09-29T21:12:46.437Z" }, + { url = "https://files.pythonhosted.org/packages/9b/b5/e9bcf51980f98e59bb5bb7c382a63c6f6cac0eec5f67de6d8f2322382065/fonttools-4.60.1-cp314-cp314t-manylinux1_x86_64.manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:875cb7764708b3132637f6c5fb385b16eeba0f7ac9fa45a69d35e09b47045801", size = 4849758, upload-time = "2025-09-29T21:12:48.694Z" }, + { url = "https://files.pythonhosted.org/packages/e3/dc/1d2cf7d1cba82264b2f8385db3f5960e3d8ce756b4dc65b700d2c496f7e9/fonttools-4.60.1-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a184b2ea57b13680ab6d5fbde99ccef152c95c06746cb7718c583abd8f945ccc", size = 5085598, upload-time = "2025-09-29T21:12:51.081Z" }, + { url = "https://files.pythonhosted.org/packages/5d/4d/279e28ba87fb20e0c69baf72b60bbf1c4d873af1476806a7b5f2b7fac1ff/fonttools-4.60.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:026290e4ec76583881763fac284aca67365e0be9f13a7fb137257096114cb3bc", size = 4957603, upload-time = "2025-09-29T21:12:53.423Z" }, + { url = "https://files.pythonhosted.org/packages/78/d4/ff19976305e0c05aa3340c805475abb00224c954d3c65e82c0a69633d55d/fonttools-4.60.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:f0e8817c7d1a0c2eedebf57ef9a9896f3ea23324769a9a2061a80fe8852705ed", size = 4974184, upload-time = "2025-09-29T21:12:55.962Z" }, + { url = "https://files.pythonhosted.org/packages/63/22/8553ff6166f5cd21cfaa115aaacaa0dc73b91c079a8cfd54a482cbc0f4f5/fonttools-4.60.1-cp314-cp314t-win32.whl", hash = "sha256:1410155d0e764a4615774e5c2c6fc516259fe3eca5882f034eb9bfdbee056259", size = 2282241, upload-time = "2025-09-29T21:12:58.179Z" }, + { url = "https://files.pythonhosted.org/packages/8a/cb/fa7b4d148e11d5a72761a22e595344133e83a9507a4c231df972e657579b/fonttools-4.60.1-cp314-cp314t-win_amd64.whl", hash = "sha256:022beaea4b73a70295b688f817ddc24ed3e3418b5036ffcd5658141184ef0d0c", size = 2345760, upload-time = "2025-09-29T21:13:00.375Z" }, + { url = "https://files.pythonhosted.org/packages/c7/93/0dd45cd283c32dea1545151d8c3637b4b8c53cdb3a625aeb2885b184d74d/fonttools-4.60.1-py3-none-any.whl", hash = "sha256:906306ac7afe2156fcf0042173d6ebbb05416af70f6b370967b47f8f00103bbb", size = 1143175, upload-time = "2025-09-29T21:13:24.134Z" }, +] + [[package]] name = "fqdn" version = "1.5.1" @@ -870,6 +967,65 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/43/6a/ca128561b22b60bd5a0c4ea26649e68c8556b82bc70a0c396eebc977fe86/jupyterlab_widgets-3.0.15-py3-none-any.whl", hash = "sha256:d59023d7d7ef71400d51e6fee9a88867f6e65e10a4201605d2d7f3e8f012a31c", size = 216571, upload-time = "2025-05-05T12:32:29.534Z" }, ] +[[package]] +name = "kiwisolver" +version = "1.4.9" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/5c/3c/85844f1b0feb11ee581ac23fe5fce65cd049a200c1446708cc1b7f922875/kiwisolver-1.4.9.tar.gz", hash = "sha256:c3b22c26c6fd6811b0ae8363b95ca8ce4ea3c202d3d0975b2914310ceb1bcc4d", size = 97564, upload-time = "2025-08-10T21:27:49.279Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/31/c1/c2686cda909742ab66c7388e9a1a8521a59eb89f8bcfbee28fc980d07e24/kiwisolver-1.4.9-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:a5d0432ccf1c7ab14f9949eec60c5d1f924f17c037e9f8b33352fa05799359b8", size = 123681, upload-time = "2025-08-10T21:26:26.725Z" }, + { url = "https://files.pythonhosted.org/packages/ca/f0/f44f50c9f5b1a1860261092e3bc91ecdc9acda848a8b8c6abfda4a24dd5c/kiwisolver-1.4.9-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:efb3a45b35622bb6c16dbfab491a8f5a391fe0e9d45ef32f4df85658232ca0e2", size = 66464, upload-time = "2025-08-10T21:26:27.733Z" }, + { url = "https://files.pythonhosted.org/packages/2d/7a/9d90a151f558e29c3936b8a47ac770235f436f2120aca41a6d5f3d62ae8d/kiwisolver-1.4.9-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:1a12cf6398e8a0a001a059747a1cbf24705e18fe413bc22de7b3d15c67cffe3f", size = 64961, upload-time = "2025-08-10T21:26:28.729Z" }, + { url = "https://files.pythonhosted.org/packages/e9/e9/f218a2cb3a9ffbe324ca29a9e399fa2d2866d7f348ec3a88df87fc248fc5/kiwisolver-1.4.9-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:b67e6efbf68e077dd71d1a6b37e43e1a99d0bff1a3d51867d45ee8908b931098", size = 1474607, upload-time = "2025-08-10T21:26:29.798Z" }, + { url = "https://files.pythonhosted.org/packages/d9/28/aac26d4c882f14de59041636292bc838db8961373825df23b8eeb807e198/kiwisolver-1.4.9-cp313-cp313-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5656aa670507437af0207645273ccdfee4f14bacd7f7c67a4306d0dcaeaf6eed", size = 1276546, upload-time = "2025-08-10T21:26:31.401Z" }, + { url = "https://files.pythonhosted.org/packages/8b/ad/8bfc1c93d4cc565e5069162f610ba2f48ff39b7de4b5b8d93f69f30c4bed/kiwisolver-1.4.9-cp313-cp313-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:bfc08add558155345129c7803b3671cf195e6a56e7a12f3dde7c57d9b417f525", size = 1294482, upload-time = "2025-08-10T21:26:32.721Z" }, + { url = "https://files.pythonhosted.org/packages/da/f1/6aca55ff798901d8ce403206d00e033191f63d82dd708a186e0ed2067e9c/kiwisolver-1.4.9-cp313-cp313-manylinux_2_24_s390x.manylinux_2_28_s390x.whl", hash = "sha256:40092754720b174e6ccf9e845d0d8c7d8e12c3d71e7fc35f55f3813e96376f78", size = 1343720, upload-time = "2025-08-10T21:26:34.032Z" }, + { url = "https://files.pythonhosted.org/packages/d1/91/eed031876c595c81d90d0f6fc681ece250e14bf6998c3d7c419466b523b7/kiwisolver-1.4.9-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:497d05f29a1300d14e02e6441cf0f5ee81c1ff5a304b0d9fb77423974684e08b", size = 2224907, upload-time = "2025-08-10T21:26:35.824Z" }, + { url = "https://files.pythonhosted.org/packages/e9/ec/4d1925f2e49617b9cca9c34bfa11adefad49d00db038e692a559454dfb2e/kiwisolver-1.4.9-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:bdd1a81a1860476eb41ac4bc1e07b3f07259e6d55bbf739b79c8aaedcf512799", size = 2321334, upload-time = "2025-08-10T21:26:37.534Z" }, + { url = "https://files.pythonhosted.org/packages/43/cb/450cd4499356f68802750c6ddc18647b8ea01ffa28f50d20598e0befe6e9/kiwisolver-1.4.9-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:e6b93f13371d341afee3be9f7c5964e3fe61d5fa30f6a30eb49856935dfe4fc3", size = 2488313, upload-time = "2025-08-10T21:26:39.191Z" }, + { url = "https://files.pythonhosted.org/packages/71/67/fc76242bd99f885651128a5d4fa6083e5524694b7c88b489b1b55fdc491d/kiwisolver-1.4.9-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:d75aa530ccfaa593da12834b86a0724f58bff12706659baa9227c2ccaa06264c", size = 2291970, upload-time = "2025-08-10T21:26:40.828Z" }, + { url = "https://files.pythonhosted.org/packages/75/bd/f1a5d894000941739f2ae1b65a32892349423ad49c2e6d0771d0bad3fae4/kiwisolver-1.4.9-cp313-cp313-win_amd64.whl", hash = "sha256:dd0a578400839256df88c16abddf9ba14813ec5f21362e1fe65022e00c883d4d", size = 73894, upload-time = "2025-08-10T21:26:42.33Z" }, + { url = "https://files.pythonhosted.org/packages/95/38/dce480814d25b99a391abbddadc78f7c117c6da34be68ca8b02d5848b424/kiwisolver-1.4.9-cp313-cp313-win_arm64.whl", hash = "sha256:d4188e73af84ca82468f09cadc5ac4db578109e52acb4518d8154698d3a87ca2", size = 64995, upload-time = "2025-08-10T21:26:43.889Z" }, + { url = "https://files.pythonhosted.org/packages/e2/37/7d218ce5d92dadc5ebdd9070d903e0c7cf7edfe03f179433ac4d13ce659c/kiwisolver-1.4.9-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:5a0f2724dfd4e3b3ac5a82436a8e6fd16baa7d507117e4279b660fe8ca38a3a1", size = 126510, upload-time = "2025-08-10T21:26:44.915Z" }, + { url = "https://files.pythonhosted.org/packages/23/b0/e85a2b48233daef4b648fb657ebbb6f8367696a2d9548a00b4ee0eb67803/kiwisolver-1.4.9-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:1b11d6a633e4ed84fc0ddafd4ebfd8ea49b3f25082c04ad12b8315c11d504dc1", size = 67903, upload-time = "2025-08-10T21:26:45.934Z" }, + { url = "https://files.pythonhosted.org/packages/44/98/f2425bc0113ad7de24da6bb4dae1343476e95e1d738be7c04d31a5d037fd/kiwisolver-1.4.9-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:61874cdb0a36016354853593cffc38e56fc9ca5aa97d2c05d3dcf6922cd55a11", size = 66402, upload-time = "2025-08-10T21:26:47.101Z" }, + { url = "https://files.pythonhosted.org/packages/98/d8/594657886df9f34c4177cc353cc28ca7e6e5eb562d37ccc233bff43bbe2a/kiwisolver-1.4.9-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:60c439763a969a6af93b4881db0eed8fadf93ee98e18cbc35bc8da868d0c4f0c", size = 1582135, upload-time = "2025-08-10T21:26:48.665Z" }, + { url = "https://files.pythonhosted.org/packages/5c/c6/38a115b7170f8b306fc929e166340c24958347308ea3012c2b44e7e295db/kiwisolver-1.4.9-cp313-cp313t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:92a2f997387a1b79a75e7803aa7ded2cfbe2823852ccf1ba3bcf613b62ae3197", size = 1389409, upload-time = "2025-08-10T21:26:50.335Z" }, + { url = "https://files.pythonhosted.org/packages/bf/3b/e04883dace81f24a568bcee6eb3001da4ba05114afa622ec9b6fafdc1f5e/kiwisolver-1.4.9-cp313-cp313t-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:a31d512c812daea6d8b3be3b2bfcbeb091dbb09177706569bcfc6240dcf8b41c", size = 1401763, upload-time = "2025-08-10T21:26:51.867Z" }, + { url = "https://files.pythonhosted.org/packages/9f/80/20ace48e33408947af49d7d15c341eaee69e4e0304aab4b7660e234d6288/kiwisolver-1.4.9-cp313-cp313t-manylinux_2_24_s390x.manylinux_2_28_s390x.whl", hash = "sha256:52a15b0f35dad39862d376df10c5230155243a2c1a436e39eb55623ccbd68185", size = 1453643, upload-time = "2025-08-10T21:26:53.592Z" }, + { url = "https://files.pythonhosted.org/packages/64/31/6ce4380a4cd1f515bdda976a1e90e547ccd47b67a1546d63884463c92ca9/kiwisolver-1.4.9-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:a30fd6fdef1430fd9e1ba7b3398b5ee4e2887783917a687d86ba69985fb08748", size = 2330818, upload-time = "2025-08-10T21:26:55.051Z" }, + { url = "https://files.pythonhosted.org/packages/fa/e9/3f3fcba3bcc7432c795b82646306e822f3fd74df0ee81f0fa067a1f95668/kiwisolver-1.4.9-cp313-cp313t-musllinux_1_2_ppc64le.whl", hash = "sha256:cc9617b46837c6468197b5945e196ee9ca43057bb7d9d1ae688101e4e1dddf64", size = 2419963, upload-time = "2025-08-10T21:26:56.421Z" }, + { url = "https://files.pythonhosted.org/packages/99/43/7320c50e4133575c66e9f7dadead35ab22d7c012a3b09bb35647792b2a6d/kiwisolver-1.4.9-cp313-cp313t-musllinux_1_2_s390x.whl", hash = "sha256:0ab74e19f6a2b027ea4f845a78827969af45ce790e6cb3e1ebab71bdf9f215ff", size = 2594639, upload-time = "2025-08-10T21:26:57.882Z" }, + { url = "https://files.pythonhosted.org/packages/65/d6/17ae4a270d4a987ef8a385b906d2bdfc9fce502d6dc0d3aea865b47f548c/kiwisolver-1.4.9-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:dba5ee5d3981160c28d5490f0d1b7ed730c22470ff7f6cc26cfcfaacb9896a07", size = 2391741, upload-time = "2025-08-10T21:26:59.237Z" }, + { url = "https://files.pythonhosted.org/packages/2a/8f/8f6f491d595a9e5912971f3f863d81baddccc8a4d0c3749d6a0dd9ffc9df/kiwisolver-1.4.9-cp313-cp313t-win_arm64.whl", hash = "sha256:0749fd8f4218ad2e851e11cc4dc05c7cbc0cbc4267bdfdb31782e65aace4ee9c", size = 68646, upload-time = "2025-08-10T21:27:00.52Z" }, + { url = "https://files.pythonhosted.org/packages/6b/32/6cc0fbc9c54d06c2969faa9c1d29f5751a2e51809dd55c69055e62d9b426/kiwisolver-1.4.9-cp314-cp314-macosx_10_13_universal2.whl", hash = "sha256:9928fe1eb816d11ae170885a74d074f57af3a0d65777ca47e9aeb854a1fba386", size = 123806, upload-time = "2025-08-10T21:27:01.537Z" }, + { url = "https://files.pythonhosted.org/packages/b2/dd/2bfb1d4a4823d92e8cbb420fe024b8d2167f72079b3bb941207c42570bdf/kiwisolver-1.4.9-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:d0005b053977e7b43388ddec89fa567f43d4f6d5c2c0affe57de5ebf290dc552", size = 66605, upload-time = "2025-08-10T21:27:03.335Z" }, + { url = "https://files.pythonhosted.org/packages/f7/69/00aafdb4e4509c2ca6064646cba9cd4b37933898f426756adb2cb92ebbed/kiwisolver-1.4.9-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:2635d352d67458b66fd0667c14cb1d4145e9560d503219034a18a87e971ce4f3", size = 64925, upload-time = "2025-08-10T21:27:04.339Z" }, + { url = "https://files.pythonhosted.org/packages/43/dc/51acc6791aa14e5cb6d8a2e28cefb0dc2886d8862795449d021334c0df20/kiwisolver-1.4.9-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:767c23ad1c58c9e827b649a9ab7809fd5fd9db266a9cf02b0e926ddc2c680d58", size = 1472414, upload-time = "2025-08-10T21:27:05.437Z" }, + { url = "https://files.pythonhosted.org/packages/3d/bb/93fa64a81db304ac8a246f834d5094fae4b13baf53c839d6bb6e81177129/kiwisolver-1.4.9-cp314-cp314-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:72d0eb9fba308b8311685c2268cf7d0a0639a6cd027d8128659f72bdd8a024b4", size = 1281272, upload-time = "2025-08-10T21:27:07.063Z" }, + { url = "https://files.pythonhosted.org/packages/70/e6/6df102916960fb8d05069d4bd92d6d9a8202d5a3e2444494e7cd50f65b7a/kiwisolver-1.4.9-cp314-cp314-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:f68e4f3eeca8fb22cc3d731f9715a13b652795ef657a13df1ad0c7dc0e9731df", size = 1298578, upload-time = "2025-08-10T21:27:08.452Z" }, + { url = "https://files.pythonhosted.org/packages/7c/47/e142aaa612f5343736b087864dbaebc53ea8831453fb47e7521fa8658f30/kiwisolver-1.4.9-cp314-cp314-manylinux_2_24_s390x.manylinux_2_28_s390x.whl", hash = "sha256:d84cd4061ae292d8ac367b2c3fa3aad11cb8625a95d135fe93f286f914f3f5a6", size = 1345607, upload-time = "2025-08-10T21:27:10.125Z" }, + { url = "https://files.pythonhosted.org/packages/54/89/d641a746194a0f4d1a3670fb900d0dbaa786fb98341056814bc3f058fa52/kiwisolver-1.4.9-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:a60ea74330b91bd22a29638940d115df9dc00af5035a9a2a6ad9399ffb4ceca5", size = 2230150, upload-time = "2025-08-10T21:27:11.484Z" }, + { url = "https://files.pythonhosted.org/packages/aa/6b/5ee1207198febdf16ac11f78c5ae40861b809cbe0e6d2a8d5b0b3044b199/kiwisolver-1.4.9-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:ce6a3a4e106cf35c2d9c4fa17c05ce0b180db622736845d4315519397a77beaf", size = 2325979, upload-time = "2025-08-10T21:27:12.917Z" }, + { url = "https://files.pythonhosted.org/packages/fc/ff/b269eefd90f4ae14dcc74973d5a0f6d28d3b9bb1afd8c0340513afe6b39a/kiwisolver-1.4.9-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:77937e5e2a38a7b48eef0585114fe7930346993a88060d0bf886086d2aa49ef5", size = 2491456, upload-time = "2025-08-10T21:27:14.353Z" }, + { url = "https://files.pythonhosted.org/packages/fc/d4/10303190bd4d30de547534601e259a4fbf014eed94aae3e5521129215086/kiwisolver-1.4.9-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:24c175051354f4a28c5d6a31c93906dc653e2bf234e8a4bbfb964892078898ce", size = 2294621, upload-time = "2025-08-10T21:27:15.808Z" }, + { url = "https://files.pythonhosted.org/packages/28/e0/a9a90416fce5c0be25742729c2ea52105d62eda6c4be4d803c2a7be1fa50/kiwisolver-1.4.9-cp314-cp314-win_amd64.whl", hash = "sha256:0763515d4df10edf6d06a3c19734e2566368980d21ebec439f33f9eb936c07b7", size = 75417, upload-time = "2025-08-10T21:27:17.436Z" }, + { url = "https://files.pythonhosted.org/packages/1f/10/6949958215b7a9a264299a7db195564e87900f709db9245e4ebdd3c70779/kiwisolver-1.4.9-cp314-cp314-win_arm64.whl", hash = "sha256:0e4e2bf29574a6a7b7f6cb5fa69293b9f96c928949ac4a53ba3f525dffb87f9c", size = 66582, upload-time = "2025-08-10T21:27:18.436Z" }, + { url = "https://files.pythonhosted.org/packages/ec/79/60e53067903d3bc5469b369fe0dfc6b3482e2133e85dae9daa9527535991/kiwisolver-1.4.9-cp314-cp314t-macosx_10_13_universal2.whl", hash = "sha256:d976bbb382b202f71c67f77b0ac11244021cfa3f7dfd9e562eefcea2df711548", size = 126514, upload-time = "2025-08-10T21:27:19.465Z" }, + { url = "https://files.pythonhosted.org/packages/25/d1/4843d3e8d46b072c12a38c97c57fab4608d36e13fe47d47ee96b4d61ba6f/kiwisolver-1.4.9-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:2489e4e5d7ef9a1c300a5e0196e43d9c739f066ef23270607d45aba368b91f2d", size = 67905, upload-time = "2025-08-10T21:27:20.51Z" }, + { url = "https://files.pythonhosted.org/packages/8c/ae/29ffcbd239aea8b93108de1278271ae764dfc0d803a5693914975f200596/kiwisolver-1.4.9-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:e2ea9f7ab7fbf18fffb1b5434ce7c69a07582f7acc7717720f1d69f3e806f90c", size = 66399, upload-time = "2025-08-10T21:27:21.496Z" }, + { url = "https://files.pythonhosted.org/packages/a1/ae/d7ba902aa604152c2ceba5d352d7b62106bedbccc8e95c3934d94472bfa3/kiwisolver-1.4.9-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:b34e51affded8faee0dfdb705416153819d8ea9250bbbf7ea1b249bdeb5f1122", size = 1582197, upload-time = "2025-08-10T21:27:22.604Z" }, + { url = "https://files.pythonhosted.org/packages/f2/41/27c70d427eddb8bc7e4f16420a20fefc6f480312122a59a959fdfe0445ad/kiwisolver-1.4.9-cp314-cp314t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d8aacd3d4b33b772542b2e01beb50187536967b514b00003bdda7589722d2a64", size = 1390125, upload-time = "2025-08-10T21:27:24.036Z" }, + { url = "https://files.pythonhosted.org/packages/41/42/b3799a12bafc76d962ad69083f8b43b12bf4fe78b097b12e105d75c9b8f1/kiwisolver-1.4.9-cp314-cp314t-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:7cf974dd4e35fa315563ac99d6287a1024e4dc2077b8a7d7cd3d2fb65d283134", size = 1402612, upload-time = "2025-08-10T21:27:25.773Z" }, + { url = "https://files.pythonhosted.org/packages/d2/b5/a210ea073ea1cfaca1bb5c55a62307d8252f531beb364e18aa1e0888b5a0/kiwisolver-1.4.9-cp314-cp314t-manylinux_2_24_s390x.manylinux_2_28_s390x.whl", hash = "sha256:85bd218b5ecfbee8c8a82e121802dcb519a86044c9c3b2e4aef02fa05c6da370", size = 1453990, upload-time = "2025-08-10T21:27:27.089Z" }, + { url = "https://files.pythonhosted.org/packages/5f/ce/a829eb8c033e977d7ea03ed32fb3c1781b4fa0433fbadfff29e39c676f32/kiwisolver-1.4.9-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:0856e241c2d3df4efef7c04a1e46b1936b6120c9bcf36dd216e3acd84bc4fb21", size = 2331601, upload-time = "2025-08-10T21:27:29.343Z" }, + { url = "https://files.pythonhosted.org/packages/e0/4b/b5e97eb142eb9cd0072dacfcdcd31b1c66dc7352b0f7c7255d339c0edf00/kiwisolver-1.4.9-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:9af39d6551f97d31a4deebeac6f45b156f9755ddc59c07b402c148f5dbb6482a", size = 2422041, upload-time = "2025-08-10T21:27:30.754Z" }, + { url = "https://files.pythonhosted.org/packages/40/be/8eb4cd53e1b85ba4edc3a9321666f12b83113a178845593307a3e7891f44/kiwisolver-1.4.9-cp314-cp314t-musllinux_1_2_s390x.whl", hash = "sha256:bb4ae2b57fc1d8cbd1cf7b1d9913803681ffa903e7488012be5b76dedf49297f", size = 2594897, upload-time = "2025-08-10T21:27:32.803Z" }, + { url = "https://files.pythonhosted.org/packages/99/dd/841e9a66c4715477ea0abc78da039832fbb09dac5c35c58dc4c41a407b8a/kiwisolver-1.4.9-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:aedff62918805fb62d43a4aa2ecd4482c380dc76cd31bd7c8878588a61bd0369", size = 2391835, upload-time = "2025-08-10T21:27:34.23Z" }, + { url = "https://files.pythonhosted.org/packages/0c/28/4b2e5c47a0da96896fdfdb006340ade064afa1e63675d01ea5ac222b6d52/kiwisolver-1.4.9-cp314-cp314t-win_amd64.whl", hash = "sha256:1fa333e8b2ce4d9660f2cda9c0e1b6bafcfb2457a9d259faa82289e73ec24891", size = 79988, upload-time = "2025-08-10T21:27:35.587Z" }, + { url = "https://files.pythonhosted.org/packages/80/be/3578e8afd18c88cdf9cb4cffde75a96d2be38c5a903f1ed0ceec061bd09e/kiwisolver-1.4.9-cp314-cp314t-win_arm64.whl", hash = "sha256:4a48a2ce79d65d363597ef7b567ce3d14d68783d2b2263d98db3d9477805ba32", size = 70260, upload-time = "2025-08-10T21:27:36.606Z" }, +] + [[package]] name = "lark" version = "1.3.0" @@ -893,8 +1049,12 @@ dependencies = [ { name = "jupyterlab-lsp" }, { name = "jupyterlab-quickopen" }, { name = "jupyterlab-spellchecker" }, + { name = "plotnine" }, + { name = "polars" }, + { name = "pyarrow" }, { name = "pyjson5" }, { name = "python-lsp-server", extra = ["all"] }, + { name = "sympy" }, { name = "tomlkit" }, { name = "tufte" }, ] @@ -910,8 +1070,12 @@ requires-dist = [ { name = "jupyterlab-lsp" }, { name = "jupyterlab-quickopen" }, { name = "jupyterlab-spellchecker" }, + { name = "plotnine" }, + { name = "polars" }, + { name = "pyarrow" }, { name = "pyjson5" }, { name = "python-lsp-server", extras = ["all"], specifier = ">=1.13.1" }, + { name = "sympy" }, { name = "tomlkit" }, { name = "tufte" }, ] @@ -968,6 +1132,53 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/70/bc/6f1c2f612465f5fa89b95bead1f44dcb607670fd42891d8fdcd5d039f4f4/markupsafe-3.0.3-cp314-cp314t-win_arm64.whl", hash = "sha256:32001d6a8fc98c8cb5c947787c5d08b0a50663d139f1305bac5885d98d9b40fa", size = 14146, upload-time = "2025-09-27T18:37:28.327Z" }, ] +[[package]] +name = "matplotlib" +version = "3.10.7" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "contourpy" }, + { name = "cycler" }, + { name = "fonttools" }, + { name = "kiwisolver" }, + { name = "numpy" }, + { name = "packaging" }, + { name = "pillow" }, + { name = "pyparsing" }, + { name = "python-dateutil" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/ae/e2/d2d5295be2f44c678ebaf3544ba32d20c1f9ef08c49fe47f496180e1db15/matplotlib-3.10.7.tar.gz", hash = "sha256:a06ba7e2a2ef9131c79c49e63dad355d2d878413a0376c1727c8b9335ff731c7", size = 34804865, upload-time = "2025-10-09T00:28:00.669Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/02/9c/207547916a02c78f6bdd83448d9b21afbc42f6379ed887ecf610984f3b4e/matplotlib-3.10.7-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:1d9d3713a237970569156cfb4de7533b7c4eacdd61789726f444f96a0d28f57f", size = 8273212, upload-time = "2025-10-09T00:26:56.752Z" }, + { url = "https://files.pythonhosted.org/packages/bc/d0/b3d3338d467d3fc937f0bb7f256711395cae6f78e22cef0656159950adf0/matplotlib-3.10.7-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:37a1fea41153dd6ee061d21ab69c9cf2cf543160b1b85d89cd3d2e2a7902ca4c", size = 8128713, upload-time = "2025-10-09T00:26:59.001Z" }, + { url = "https://files.pythonhosted.org/packages/22/ff/6425bf5c20d79aa5b959d1ce9e65f599632345391381c9a104133fe0b171/matplotlib-3.10.7-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:b3c4ea4948d93c9c29dc01c0c23eef66f2101bf75158c291b88de6525c55c3d1", size = 8698527, upload-time = "2025-10-09T00:27:00.69Z" }, + { url = "https://files.pythonhosted.org/packages/d0/7f/ccdca06f4c2e6c7989270ed7829b8679466682f4cfc0f8c9986241c023b6/matplotlib-3.10.7-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:22df30ffaa89f6643206cf13877191c63a50e8f800b038bc39bee9d2d4957632", size = 9529690, upload-time = "2025-10-09T00:27:02.664Z" }, + { url = "https://files.pythonhosted.org/packages/b8/95/b80fc2c1f269f21ff3d193ca697358e24408c33ce2b106a7438a45407b63/matplotlib-3.10.7-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:b69676845a0a66f9da30e87f48be36734d6748024b525ec4710be40194282c84", size = 9593732, upload-time = "2025-10-09T00:27:04.653Z" }, + { url = "https://files.pythonhosted.org/packages/e1/b6/23064a96308b9aeceeffa65e96bcde459a2ea4934d311dee20afde7407a0/matplotlib-3.10.7-cp313-cp313-win_amd64.whl", hash = "sha256:744991e0cc863dd669c8dc9136ca4e6e0082be2070b9d793cbd64bec872a6815", size = 8122727, upload-time = "2025-10-09T00:27:06.814Z" }, + { url = "https://files.pythonhosted.org/packages/b3/a6/2faaf48133b82cf3607759027f82b5c702aa99cdfcefb7f93d6ccf26a424/matplotlib-3.10.7-cp313-cp313-win_arm64.whl", hash = "sha256:fba2974df0bf8ce3c995fa84b79cde38326e0f7b5409e7a3a481c1141340bcf7", size = 7992958, upload-time = "2025-10-09T00:27:08.567Z" }, + { url = "https://files.pythonhosted.org/packages/4a/f0/b018fed0b599bd48d84c08794cb242227fe3341952da102ee9d9682db574/matplotlib-3.10.7-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:932c55d1fa7af4423422cb6a492a31cbcbdbe68fd1a9a3f545aa5e7a143b5355", size = 8316849, upload-time = "2025-10-09T00:27:10.254Z" }, + { url = "https://files.pythonhosted.org/packages/b0/b7/bb4f23856197659f275e11a2a164e36e65e9b48ea3e93c4ec25b4f163198/matplotlib-3.10.7-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:5e38c2d581d62ee729a6e144c47a71b3f42fb4187508dbbf4fe71d5612c3433b", size = 8178225, upload-time = "2025-10-09T00:27:12.241Z" }, + { url = "https://files.pythonhosted.org/packages/62/56/0600609893ff277e6f3ab3c0cef4eafa6e61006c058e84286c467223d4d5/matplotlib-3.10.7-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:786656bb13c237bbcebcd402f65f44dd61ead60ee3deb045af429d889c8dbc67", size = 8711708, upload-time = "2025-10-09T00:27:13.879Z" }, + { url = "https://files.pythonhosted.org/packages/d8/1a/6bfecb0cafe94d6658f2f1af22c43b76cf7a1c2f0dc34ef84cbb6809617e/matplotlib-3.10.7-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:09d7945a70ea43bf9248f4b6582734c2fe726723204a76eca233f24cffc7ef67", size = 9541409, upload-time = "2025-10-09T00:27:15.684Z" }, + { url = "https://files.pythonhosted.org/packages/08/50/95122a407d7f2e446fd865e2388a232a23f2b81934960ea802f3171518e4/matplotlib-3.10.7-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:d0b181e9fa8daf1d9f2d4c547527b167cb8838fc587deabca7b5c01f97199e84", size = 9594054, upload-time = "2025-10-09T00:27:17.547Z" }, + { url = "https://files.pythonhosted.org/packages/13/76/75b194a43b81583478a81e78a07da8d9ca6ddf50dd0a2ccabf258059481d/matplotlib-3.10.7-cp313-cp313t-win_amd64.whl", hash = "sha256:31963603041634ce1a96053047b40961f7a29eb8f9a62e80cc2c0427aa1d22a2", size = 8200100, upload-time = "2025-10-09T00:27:20.039Z" }, + { url = "https://files.pythonhosted.org/packages/f5/9e/6aefebdc9f8235c12bdeeda44cc0383d89c1e41da2c400caf3ee2073a3ce/matplotlib-3.10.7-cp313-cp313t-win_arm64.whl", hash = "sha256:aebed7b50aa6ac698c90f60f854b47e48cd2252b30510e7a1feddaf5a3f72cbf", size = 8042131, upload-time = "2025-10-09T00:27:21.608Z" }, + { url = "https://files.pythonhosted.org/packages/0d/4b/e5bc2c321b6a7e3a75638d937d19ea267c34bd5a90e12bee76c4d7c7a0d9/matplotlib-3.10.7-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:d883460c43e8c6b173fef244a2341f7f7c0e9725c7fe68306e8e44ed9c8fb100", size = 8273787, upload-time = "2025-10-09T00:27:23.27Z" }, + { url = "https://files.pythonhosted.org/packages/86/ad/6efae459c56c2fbc404da154e13e3a6039129f3c942b0152624f1c621f05/matplotlib-3.10.7-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:07124afcf7a6504eafcb8ce94091c5898bbdd351519a1beb5c45f7a38c67e77f", size = 8131348, upload-time = "2025-10-09T00:27:24.926Z" }, + { url = "https://files.pythonhosted.org/packages/a6/5a/a4284d2958dee4116359cc05d7e19c057e64ece1b4ac986ab0f2f4d52d5a/matplotlib-3.10.7-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c17398b709a6cce3d9fdb1595c33e356d91c098cd9486cb2cc21ea2ea418e715", size = 9533949, upload-time = "2025-10-09T00:27:26.704Z" }, + { url = "https://files.pythonhosted.org/packages/de/ff/f3781b5057fa3786623ad8976fc9f7b0d02b2f28534751fd5a44240de4cf/matplotlib-3.10.7-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:7146d64f561498764561e9cd0ed64fcf582e570fc519e6f521e2d0cfd43365e1", size = 9804247, upload-time = "2025-10-09T00:27:28.514Z" }, + { url = "https://files.pythonhosted.org/packages/47/5a/993a59facb8444efb0e197bf55f545ee449902dcee86a4dfc580c3b61314/matplotlib-3.10.7-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:90ad854c0a435da3104c01e2c6f0028d7e719b690998a2333d7218db80950722", size = 9595497, upload-time = "2025-10-09T00:27:30.418Z" }, + { url = "https://files.pythonhosted.org/packages/0d/a5/77c95aaa9bb32c345cbb49626ad8eb15550cba2e6d4c88081a6c2ac7b08d/matplotlib-3.10.7-cp314-cp314-win_amd64.whl", hash = "sha256:4645fc5d9d20ffa3a39361fcdbcec731382763b623b72627806bf251b6388866", size = 8252732, upload-time = "2025-10-09T00:27:32.332Z" }, + { url = "https://files.pythonhosted.org/packages/74/04/45d269b4268d222390d7817dae77b159651909669a34ee9fdee336db5883/matplotlib-3.10.7-cp314-cp314-win_arm64.whl", hash = "sha256:9257be2f2a03415f9105c486d304a321168e61ad450f6153d77c69504ad764bb", size = 8124240, upload-time = "2025-10-09T00:27:33.94Z" }, + { url = "https://files.pythonhosted.org/packages/4b/c7/ca01c607bb827158b439208c153d6f14ddb9fb640768f06f7ca3488ae67b/matplotlib-3.10.7-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:1e4bbad66c177a8fdfa53972e5ef8be72a5f27e6a607cec0d8579abd0f3102b1", size = 8316938, upload-time = "2025-10-09T00:27:35.534Z" }, + { url = "https://files.pythonhosted.org/packages/84/d2/5539e66e9f56d2fdec94bb8436f5e449683b4e199bcc897c44fbe3c99e28/matplotlib-3.10.7-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:d8eb7194b084b12feb19142262165832fc6ee879b945491d1c3d4660748020c4", size = 8178245, upload-time = "2025-10-09T00:27:37.334Z" }, + { url = "https://files.pythonhosted.org/packages/77/b5/e6ca22901fd3e4fe433a82e583436dd872f6c966fca7e63cf806b40356f8/matplotlib-3.10.7-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b4d41379b05528091f00e1728004f9a8d7191260f3862178b88e8fd770206318", size = 9541411, upload-time = "2025-10-09T00:27:39.387Z" }, + { url = "https://files.pythonhosted.org/packages/9e/99/a4524db57cad8fee54b7237239a8f8360bfcfa3170d37c9e71c090c0f409/matplotlib-3.10.7-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4a74f79fafb2e177f240579bc83f0b60f82cc47d2f1d260f422a0627207008ca", size = 9803664, upload-time = "2025-10-09T00:27:41.492Z" }, + { url = "https://files.pythonhosted.org/packages/e6/a5/85e2edf76ea0ad4288d174926d9454ea85f3ce5390cc4e6fab196cbf250b/matplotlib-3.10.7-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:702590829c30aada1e8cef0568ddbffa77ca747b4d6e36c6d173f66e301f89cc", size = 9594066, upload-time = "2025-10-09T00:27:43.694Z" }, + { url = "https://files.pythonhosted.org/packages/39/69/9684368a314f6d83fe5c5ad2a4121a3a8e03723d2e5c8ea17b66c1bad0e7/matplotlib-3.10.7-cp314-cp314t-win_amd64.whl", hash = "sha256:f79d5de970fc90cd5591f60053aecfce1fcd736e0303d9f0bf86be649fa68fb8", size = 8342832, upload-time = "2025-10-09T00:27:45.543Z" }, + { url = "https://files.pythonhosted.org/packages/04/5f/e22e08da14bc1a0894184640d47819d2338b792732e20d292bf86e5ab785/matplotlib-3.10.7-cp314-cp314t-win_arm64.whl", hash = "sha256:cb783436e47fcf82064baca52ce748af71725d0352e1d31564cbe9c95df92b9c", size = 8172585, upload-time = "2025-10-09T00:27:47.185Z" }, +] + [[package]] name = "matplotlib-inline" version = "0.1.7" @@ -998,6 +1209,30 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/7a/f0/8282d9641415e9e33df173516226b404d367a0fc55e1a60424a152913abc/mistune-3.1.4-py3-none-any.whl", hash = "sha256:93691da911e5d9d2e23bc54472892aff676df27a75274962ff9edc210364266d", size = 53481, upload-time = "2025-08-29T07:20:42.218Z" }, ] +[[package]] +name = "mizani" +version = "0.14.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "numpy" }, + { name = "pandas" }, + { name = "scipy" }, + { name = "tzdata", marker = "sys_platform == 'emscripten' or sys_platform == 'win32'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/ee/5c/044d2b46ceff3437585ff733db7a78b33ac3c4bd7c9f25a5368faac94b5c/mizani-0.14.2.tar.gz", hash = "sha256:d7180bf7c6fa60a7aa5b78da903bc6b2ffc30602d479a4a07b5240bc5330491d", size = 772272, upload-time = "2025-06-30T11:24:51.811Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/50/8b/8231e2493b454e2514e56843e842321b125d1f25da06f8ab55029a94d12a/mizani-0.14.2-py3-none-any.whl", hash = "sha256:c35fdfa9a68824e80c724ffbd9bb776db23bf73ea94b90b46dbc7f58cb2233cb", size = 133476, upload-time = "2025-06-30T11:24:49.899Z" }, +] + +[[package]] +name = "mpmath" +version = "1.3.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/e0/47/dd32fa426cc72114383ac549964eecb20ecfd886d1e5ccf5340b55b02f57/mpmath-1.3.0.tar.gz", hash = "sha256:7a28eb2a9774d00c7bc92411c19a89209d5da7c4c9a9e227be8330a23a25b91f", size = 508106, upload-time = "2023-03-07T16:47:11.061Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/43/e3/7d92a15f894aa0c9c4b49b8ee9ac9850d6e63b03c9c32c0367a13ae62209/mpmath-1.3.0-py3-none-any.whl", hash = "sha256:a0b2b9fe80bbcd81a6647ff13108738cfb482d481d826cc0e02f5b35e5c88d2c", size = 536198, upload-time = "2023-03-07T16:47:09.197Z" }, +] + [[package]] name = "mypy-extensions" version = "1.1.0" @@ -1083,6 +1318,58 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/f9/33/bd5b9137445ea4b680023eb0469b2bb969d61303dedb2aac6560ff3d14a1/notebook_shim-0.2.4-py3-none-any.whl", hash = "sha256:411a5be4e9dc882a074ccbcae671eda64cceb068767e9a3419096986560e1cef", size = 13307, upload-time = "2024-02-14T23:35:16.286Z" }, ] +[[package]] +name = "numpy" +version = "2.3.4" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/b5/f4/098d2270d52b41f1bd7db9fc288aaa0400cb48c2a3e2af6fa365d9720947/numpy-2.3.4.tar.gz", hash = "sha256:a7d018bfedb375a8d979ac758b120ba846a7fe764911a64465fd87b8729f4a6a", size = 20582187, upload-time = "2025-10-15T16:18:11.77Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/57/7e/b72610cc91edf138bc588df5150957a4937221ca6058b825b4725c27be62/numpy-2.3.4-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:c090d4860032b857d94144d1a9976b8e36709e40386db289aaf6672de2a81966", size = 20950335, upload-time = "2025-10-15T16:16:10.304Z" }, + { url = "https://files.pythonhosted.org/packages/3e/46/bdd3370dcea2f95ef14af79dbf81e6927102ddf1cc54adc0024d61252fd9/numpy-2.3.4-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:a13fc473b6db0be619e45f11f9e81260f7302f8d180c49a22b6e6120022596b3", size = 14179878, upload-time = "2025-10-15T16:16:12.595Z" }, + { url = "https://files.pythonhosted.org/packages/ac/01/5a67cb785bda60f45415d09c2bc245433f1c68dd82eef9c9002c508b5a65/numpy-2.3.4-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:3634093d0b428e6c32c3a69b78e554f0cd20ee420dcad5a9f3b2a63762ce4197", size = 5108673, upload-time = "2025-10-15T16:16:14.877Z" }, + { url = "https://files.pythonhosted.org/packages/c2/cd/8428e23a9fcebd33988f4cb61208fda832800ca03781f471f3727a820704/numpy-2.3.4-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:043885b4f7e6e232d7df4f51ffdef8c36320ee9d5f227b380ea636722c7ed12e", size = 6641438, upload-time = "2025-10-15T16:16:16.805Z" }, + { url = "https://files.pythonhosted.org/packages/3e/d1/913fe563820f3c6b079f992458f7331278dcd7ba8427e8e745af37ddb44f/numpy-2.3.4-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4ee6a571d1e4f0ea6d5f22d6e5fbd6ed1dc2b18542848e1e7301bd190500c9d7", size = 14281290, upload-time = "2025-10-15T16:16:18.764Z" }, + { url = "https://files.pythonhosted.org/packages/9e/7e/7d306ff7cb143e6d975cfa7eb98a93e73495c4deabb7d1b5ecf09ea0fd69/numpy-2.3.4-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:fc8a63918b04b8571789688b2780ab2b4a33ab44bfe8ccea36d3eba51228c953", size = 16636543, upload-time = "2025-10-15T16:16:21.072Z" }, + { url = "https://files.pythonhosted.org/packages/47/6a/8cfc486237e56ccfb0db234945552a557ca266f022d281a2f577b98e955c/numpy-2.3.4-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:40cc556d5abbc54aabe2b1ae287042d7bdb80c08edede19f0c0afb36ae586f37", size = 16056117, upload-time = "2025-10-15T16:16:23.369Z" }, + { url = "https://files.pythonhosted.org/packages/b1/0e/42cb5e69ea901e06ce24bfcc4b5664a56f950a70efdcf221f30d9615f3f3/numpy-2.3.4-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:ecb63014bb7f4ce653f8be7f1df8cbc6093a5a2811211770f6606cc92b5a78fd", size = 18577788, upload-time = "2025-10-15T16:16:27.496Z" }, + { url = "https://files.pythonhosted.org/packages/86/92/41c3d5157d3177559ef0a35da50f0cda7fa071f4ba2306dd36818591a5bc/numpy-2.3.4-cp313-cp313-win32.whl", hash = "sha256:e8370eb6925bb8c1c4264fec52b0384b44f675f191df91cbe0140ec9f0955646", size = 6282620, upload-time = "2025-10-15T16:16:29.811Z" }, + { url = "https://files.pythonhosted.org/packages/09/97/fd421e8bc50766665ad35536c2bb4ef916533ba1fdd053a62d96cc7c8b95/numpy-2.3.4-cp313-cp313-win_amd64.whl", hash = "sha256:56209416e81a7893036eea03abcb91c130643eb14233b2515c90dcac963fe99d", size = 12784672, upload-time = "2025-10-15T16:16:31.589Z" }, + { url = "https://files.pythonhosted.org/packages/ad/df/5474fb2f74970ca8eb978093969b125a84cc3d30e47f82191f981f13a8a0/numpy-2.3.4-cp313-cp313-win_arm64.whl", hash = "sha256:a700a4031bc0fd6936e78a752eefb79092cecad2599ea9c8039c548bc097f9bc", size = 10196702, upload-time = "2025-10-15T16:16:33.902Z" }, + { url = "https://files.pythonhosted.org/packages/11/83/66ac031464ec1767ea3ed48ce40f615eb441072945e98693bec0bcd056cc/numpy-2.3.4-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:86966db35c4040fdca64f0816a1c1dd8dbd027d90fca5a57e00e1ca4cd41b879", size = 21049003, upload-time = "2025-10-15T16:16:36.101Z" }, + { url = "https://files.pythonhosted.org/packages/5f/99/5b14e0e686e61371659a1d5bebd04596b1d72227ce36eed121bb0aeab798/numpy-2.3.4-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:838f045478638b26c375ee96ea89464d38428c69170360b23a1a50fa4baa3562", size = 14302980, upload-time = "2025-10-15T16:16:39.124Z" }, + { url = "https://files.pythonhosted.org/packages/2c/44/e9486649cd087d9fc6920e3fc3ac2aba10838d10804b1e179fb7cbc4e634/numpy-2.3.4-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:d7315ed1dab0286adca467377c8381cd748f3dc92235f22a7dfc42745644a96a", size = 5231472, upload-time = "2025-10-15T16:16:41.168Z" }, + { url = "https://files.pythonhosted.org/packages/3e/51/902b24fa8887e5fe2063fd61b1895a476d0bbf46811ab0c7fdf4bd127345/numpy-2.3.4-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:84f01a4d18b2cc4ade1814a08e5f3c907b079c847051d720fad15ce37aa930b6", size = 6739342, upload-time = "2025-10-15T16:16:43.777Z" }, + { url = "https://files.pythonhosted.org/packages/34/f1/4de9586d05b1962acdcdb1dc4af6646361a643f8c864cef7c852bf509740/numpy-2.3.4-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:817e719a868f0dacde4abdfc5c1910b301877970195db9ab6a5e2c4bd5b121f7", size = 14354338, upload-time = "2025-10-15T16:16:46.081Z" }, + { url = "https://files.pythonhosted.org/packages/1f/06/1c16103b425de7969d5a76bdf5ada0804b476fed05d5f9e17b777f1cbefd/numpy-2.3.4-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:85e071da78d92a214212cacea81c6da557cab307f2c34b5f85b628e94803f9c0", size = 16702392, upload-time = "2025-10-15T16:16:48.455Z" }, + { url = "https://files.pythonhosted.org/packages/34/b2/65f4dc1b89b5322093572b6e55161bb42e3e0487067af73627f795cc9d47/numpy-2.3.4-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:2ec646892819370cf3558f518797f16597b4e4669894a2ba712caccc9da53f1f", size = 16134998, upload-time = "2025-10-15T16:16:51.114Z" }, + { url = "https://files.pythonhosted.org/packages/d4/11/94ec578896cdb973aaf56425d6c7f2aff4186a5c00fac15ff2ec46998b46/numpy-2.3.4-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:035796aaaddfe2f9664b9a9372f089cfc88bd795a67bd1bfe15e6e770934cf64", size = 18651574, upload-time = "2025-10-15T16:16:53.429Z" }, + { url = "https://files.pythonhosted.org/packages/62/b7/7efa763ab33dbccf56dade36938a77345ce8e8192d6b39e470ca25ff3cd0/numpy-2.3.4-cp313-cp313t-win32.whl", hash = "sha256:fea80f4f4cf83b54c3a051f2f727870ee51e22f0248d3114b8e755d160b38cfb", size = 6413135, upload-time = "2025-10-15T16:16:55.992Z" }, + { url = "https://files.pythonhosted.org/packages/43/70/aba4c38e8400abcc2f345e13d972fb36c26409b3e644366db7649015f291/numpy-2.3.4-cp313-cp313t-win_amd64.whl", hash = "sha256:15eea9f306b98e0be91eb344a94c0e630689ef302e10c2ce5f7e11905c704f9c", size = 12928582, upload-time = "2025-10-15T16:16:57.943Z" }, + { url = "https://files.pythonhosted.org/packages/67/63/871fad5f0073fc00fbbdd7232962ea1ac40eeaae2bba66c76214f7954236/numpy-2.3.4-cp313-cp313t-win_arm64.whl", hash = "sha256:b6c231c9c2fadbae4011ca5e7e83e12dc4a5072f1a1d85a0a7b3ed754d145a40", size = 10266691, upload-time = "2025-10-15T16:17:00.048Z" }, + { url = "https://files.pythonhosted.org/packages/72/71/ae6170143c115732470ae3a2d01512870dd16e0953f8a6dc89525696069b/numpy-2.3.4-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:81c3e6d8c97295a7360d367f9f8553973651b76907988bb6066376bc2252f24e", size = 20955580, upload-time = "2025-10-15T16:17:02.509Z" }, + { url = "https://files.pythonhosted.org/packages/af/39/4be9222ffd6ca8a30eda033d5f753276a9c3426c397bb137d8e19dedd200/numpy-2.3.4-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:7c26b0b2bf58009ed1f38a641f3db4be8d960a417ca96d14e5b06df1506d41ff", size = 14188056, upload-time = "2025-10-15T16:17:04.873Z" }, + { url = "https://files.pythonhosted.org/packages/6c/3d/d85f6700d0a4aa4f9491030e1021c2b2b7421b2b38d01acd16734a2bfdc7/numpy-2.3.4-cp314-cp314-macosx_14_0_arm64.whl", hash = "sha256:62b2198c438058a20b6704351b35a1d7db881812d8512d67a69c9de1f18ca05f", size = 5116555, upload-time = "2025-10-15T16:17:07.499Z" }, + { url = "https://files.pythonhosted.org/packages/bf/04/82c1467d86f47eee8a19a464c92f90a9bb68ccf14a54c5224d7031241ffb/numpy-2.3.4-cp314-cp314-macosx_14_0_x86_64.whl", hash = "sha256:9d729d60f8d53a7361707f4b68a9663c968882dd4f09e0d58c044c8bf5faee7b", size = 6643581, upload-time = "2025-10-15T16:17:09.774Z" }, + { url = "https://files.pythonhosted.org/packages/0c/d3/c79841741b837e293f48bd7db89d0ac7a4f2503b382b78a790ef1dc778a5/numpy-2.3.4-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:bd0c630cf256b0a7fd9d0a11c9413b42fef5101219ce6ed5a09624f5a65392c7", size = 14299186, upload-time = "2025-10-15T16:17:11.937Z" }, + { url = "https://files.pythonhosted.org/packages/e8/7e/4a14a769741fbf237eec5a12a2cbc7a4c4e061852b6533bcb9e9a796c908/numpy-2.3.4-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d5e081bc082825f8b139f9e9fe42942cb4054524598aaeb177ff476cc76d09d2", size = 16638601, upload-time = "2025-10-15T16:17:14.391Z" }, + { url = "https://files.pythonhosted.org/packages/93/87/1c1de269f002ff0a41173fe01dcc925f4ecff59264cd8f96cf3b60d12c9b/numpy-2.3.4-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:15fb27364ed84114438fff8aaf998c9e19adbeba08c0b75409f8c452a8692c52", size = 16074219, upload-time = "2025-10-15T16:17:17.058Z" }, + { url = "https://files.pythonhosted.org/packages/cd/28/18f72ee77408e40a76d691001ae599e712ca2a47ddd2c4f695b16c65f077/numpy-2.3.4-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:85d9fb2d8cd998c84d13a79a09cc0c1091648e848e4e6249b0ccd7f6b487fa26", size = 18576702, upload-time = "2025-10-15T16:17:19.379Z" }, + { url = "https://files.pythonhosted.org/packages/c3/76/95650169b465ececa8cf4b2e8f6df255d4bf662775e797ade2025cc51ae6/numpy-2.3.4-cp314-cp314-win32.whl", hash = "sha256:e73d63fd04e3a9d6bc187f5455d81abfad05660b212c8804bf3b407e984cd2bc", size = 6337136, upload-time = "2025-10-15T16:17:22.886Z" }, + { url = "https://files.pythonhosted.org/packages/dc/89/a231a5c43ede5d6f77ba4a91e915a87dea4aeea76560ba4d2bf185c683f0/numpy-2.3.4-cp314-cp314-win_amd64.whl", hash = "sha256:3da3491cee49cf16157e70f607c03a217ea6647b1cea4819c4f48e53d49139b9", size = 12920542, upload-time = "2025-10-15T16:17:24.783Z" }, + { url = "https://files.pythonhosted.org/packages/0d/0c/ae9434a888f717c5ed2ff2393b3f344f0ff6f1c793519fa0c540461dc530/numpy-2.3.4-cp314-cp314-win_arm64.whl", hash = "sha256:6d9cd732068e8288dbe2717177320723ccec4fb064123f0caf9bbd90ab5be868", size = 10480213, upload-time = "2025-10-15T16:17:26.935Z" }, + { url = "https://files.pythonhosted.org/packages/83/4b/c4a5f0841f92536f6b9592694a5b5f68c9ab37b775ff342649eadf9055d3/numpy-2.3.4-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:22758999b256b595cf0b1d102b133bb61866ba5ceecf15f759623b64c020c9ec", size = 21052280, upload-time = "2025-10-15T16:17:29.638Z" }, + { url = "https://files.pythonhosted.org/packages/3e/80/90308845fc93b984d2cc96d83e2324ce8ad1fd6efea81b324cba4b673854/numpy-2.3.4-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:9cb177bc55b010b19798dc5497d540dea67fd13a8d9e882b2dae71de0cf09eb3", size = 14302930, upload-time = "2025-10-15T16:17:32.384Z" }, + { url = "https://files.pythonhosted.org/packages/3d/4e/07439f22f2a3b247cec4d63a713faae55e1141a36e77fb212881f7cda3fb/numpy-2.3.4-cp314-cp314t-macosx_14_0_arm64.whl", hash = "sha256:0f2bcc76f1e05e5ab58893407c63d90b2029908fa41f9f1cc51eecce936c3365", size = 5231504, upload-time = "2025-10-15T16:17:34.515Z" }, + { url = "https://files.pythonhosted.org/packages/ab/de/1e11f2547e2fe3d00482b19721855348b94ada8359aef5d40dd57bfae9df/numpy-2.3.4-cp314-cp314t-macosx_14_0_x86_64.whl", hash = "sha256:8dc20bde86802df2ed8397a08d793da0ad7a5fd4ea3ac85d757bf5dd4ad7c252", size = 6739405, upload-time = "2025-10-15T16:17:36.128Z" }, + { url = "https://files.pythonhosted.org/packages/3b/40/8cd57393a26cebe2e923005db5134a946c62fa56a1087dc7c478f3e30837/numpy-2.3.4-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5e199c087e2aa71c8f9ce1cb7a8e10677dc12457e7cc1be4798632da37c3e86e", size = 14354866, upload-time = "2025-10-15T16:17:38.884Z" }, + { url = "https://files.pythonhosted.org/packages/93/39/5b3510f023f96874ee6fea2e40dfa99313a00bf3ab779f3c92978f34aace/numpy-2.3.4-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:85597b2d25ddf655495e2363fe044b0ae999b75bc4d630dc0d886484b03a5eb0", size = 16703296, upload-time = "2025-10-15T16:17:41.564Z" }, + { url = "https://files.pythonhosted.org/packages/41/0d/19bb163617c8045209c1996c4e427bccbc4bbff1e2c711f39203c8ddbb4a/numpy-2.3.4-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:04a69abe45b49c5955923cf2c407843d1c85013b424ae8a560bba16c92fe44a0", size = 16136046, upload-time = "2025-10-15T16:17:43.901Z" }, + { url = "https://files.pythonhosted.org/packages/e2/c1/6dba12fdf68b02a21ac411c9df19afa66bed2540f467150ca64d246b463d/numpy-2.3.4-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:e1708fac43ef8b419c975926ce1eaf793b0c13b7356cfab6ab0dc34c0a02ac0f", size = 18652691, upload-time = "2025-10-15T16:17:46.247Z" }, + { url = "https://files.pythonhosted.org/packages/f8/73/f85056701dbbbb910c51d846c58d29fd46b30eecd2b6ba760fc8b8a1641b/numpy-2.3.4-cp314-cp314t-win32.whl", hash = "sha256:863e3b5f4d9915aaf1b8ec79ae560ad21f0b8d5e3adc31e73126491bb86dee1d", size = 6485782, upload-time = "2025-10-15T16:17:48.872Z" }, + { url = "https://files.pythonhosted.org/packages/17/90/28fa6f9865181cb817c2471ee65678afa8a7e2a1fb16141473d5fa6bacc3/numpy-2.3.4-cp314-cp314t-win_amd64.whl", hash = "sha256:962064de37b9aef801d33bc579690f8bfe6c5e70e29b61783f60bcba838a14d6", size = 13113301, upload-time = "2025-10-15T16:17:50.938Z" }, + { url = "https://files.pythonhosted.org/packages/54/23/08c002201a8e7e1f9afba93b97deceb813252d9cfd0d3351caed123dcf97/numpy-2.3.4-cp314-cp314t-win_arm64.whl", hash = "sha256:8b5a9a39c45d852b62693d9b3f3e0fe052541f804296ff401a72a1b60edafb29", size = 10547532, upload-time = "2025-10-15T16:17:53.48Z" }, +] + [[package]] name = "packaging" version = "25.0" @@ -1092,6 +1379,46 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/20/12/38679034af332785aac8774540895e234f4d07f7545804097de4b666afd8/packaging-25.0-py3-none-any.whl", hash = "sha256:29572ef2b1f17581046b3a2227d5c611fb25ec70ca1ba8554b24b0e69331a484", size = 66469, upload-time = "2025-04-19T11:48:57.875Z" }, ] +[[package]] +name = "pandas" +version = "2.3.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "numpy" }, + { name = "python-dateutil" }, + { name = "pytz" }, + { name = "tzdata" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/33/01/d40b85317f86cf08d853a4f495195c73815fdf205eef3993821720274518/pandas-2.3.3.tar.gz", hash = "sha256:e05e1af93b977f7eafa636d043f9f94c7ee3ac81af99c13508215942e64c993b", size = 4495223, upload-time = "2025-09-29T23:34:51.853Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/cd/4b/18b035ee18f97c1040d94debd8f2e737000ad70ccc8f5513f4eefad75f4b/pandas-2.3.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:56851a737e3470de7fa88e6131f41281ed440d29a9268dcbf0002da5ac366713", size = 11544671, upload-time = "2025-09-29T23:21:05.024Z" }, + { url = "https://files.pythonhosted.org/packages/31/94/72fac03573102779920099bcac1c3b05975c2cb5f01eac609faf34bed1ca/pandas-2.3.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:bdcd9d1167f4885211e401b3036c0c8d9e274eee67ea8d0758a256d60704cfe8", size = 10680807, upload-time = "2025-09-29T23:21:15.979Z" }, + { url = "https://files.pythonhosted.org/packages/16/87/9472cf4a487d848476865321de18cc8c920b8cab98453ab79dbbc98db63a/pandas-2.3.3-cp313-cp313-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e32e7cc9af0f1cc15548288a51a3b681cc2a219faa838e995f7dc53dbab1062d", size = 11709872, upload-time = "2025-09-29T23:21:27.165Z" }, + { url = "https://files.pythonhosted.org/packages/15/07/284f757f63f8a8d69ed4472bfd85122bd086e637bf4ed09de572d575a693/pandas-2.3.3-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:318d77e0e42a628c04dc56bcef4b40de67918f7041c2b061af1da41dcff670ac", size = 12306371, upload-time = "2025-09-29T23:21:40.532Z" }, + { url = "https://files.pythonhosted.org/packages/33/81/a3afc88fca4aa925804a27d2676d22dcd2031c2ebe08aabd0ae55b9ff282/pandas-2.3.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:4e0a175408804d566144e170d0476b15d78458795bb18f1304fb94160cabf40c", size = 12765333, upload-time = "2025-09-29T23:21:55.77Z" }, + { url = "https://files.pythonhosted.org/packages/8d/0f/b4d4ae743a83742f1153464cf1a8ecfafc3ac59722a0b5c8602310cb7158/pandas-2.3.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:93c2d9ab0fc11822b5eece72ec9587e172f63cff87c00b062f6e37448ced4493", size = 13418120, upload-time = "2025-09-29T23:22:10.109Z" }, + { url = "https://files.pythonhosted.org/packages/4f/c7/e54682c96a895d0c808453269e0b5928a07a127a15704fedb643e9b0a4c8/pandas-2.3.3-cp313-cp313-win_amd64.whl", hash = "sha256:f8bfc0e12dc78f777f323f55c58649591b2cd0c43534e8355c51d3fede5f4dee", size = 10993991, upload-time = "2025-09-29T23:25:04.889Z" }, + { url = "https://files.pythonhosted.org/packages/f9/ca/3f8d4f49740799189e1395812f3bf23b5e8fc7c190827d55a610da72ce55/pandas-2.3.3-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:75ea25f9529fdec2d2e93a42c523962261e567d250b0013b16210e1d40d7c2e5", size = 12048227, upload-time = "2025-09-29T23:22:24.343Z" }, + { url = "https://files.pythonhosted.org/packages/0e/5a/f43efec3e8c0cc92c4663ccad372dbdff72b60bdb56b2749f04aa1d07d7e/pandas-2.3.3-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:74ecdf1d301e812db96a465a525952f4dde225fdb6d8e5a521d47e1f42041e21", size = 11411056, upload-time = "2025-09-29T23:22:37.762Z" }, + { url = "https://files.pythonhosted.org/packages/46/b1/85331edfc591208c9d1a63a06baa67b21d332e63b7a591a5ba42a10bb507/pandas-2.3.3-cp313-cp313t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6435cb949cb34ec11cc9860246ccb2fdc9ecd742c12d3304989017d53f039a78", size = 11645189, upload-time = "2025-09-29T23:22:51.688Z" }, + { url = "https://files.pythonhosted.org/packages/44/23/78d645adc35d94d1ac4f2a3c4112ab6f5b8999f4898b8cdf01252f8df4a9/pandas-2.3.3-cp313-cp313t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:900f47d8f20860de523a1ac881c4c36d65efcb2eb850e6948140fa781736e110", size = 12121912, upload-time = "2025-09-29T23:23:05.042Z" }, + { url = "https://files.pythonhosted.org/packages/53/da/d10013df5e6aaef6b425aa0c32e1fc1f3e431e4bcabd420517dceadce354/pandas-2.3.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:a45c765238e2ed7d7c608fc5bc4a6f88b642f2f01e70c0c23d2224dd21829d86", size = 12712160, upload-time = "2025-09-29T23:23:28.57Z" }, + { url = "https://files.pythonhosted.org/packages/bd/17/e756653095a083d8a37cbd816cb87148debcfcd920129b25f99dd8d04271/pandas-2.3.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:c4fc4c21971a1a9f4bdb4c73978c7f7256caa3e62b323f70d6cb80db583350bc", size = 13199233, upload-time = "2025-09-29T23:24:24.876Z" }, + { url = "https://files.pythonhosted.org/packages/04/fd/74903979833db8390b73b3a8a7d30d146d710bd32703724dd9083950386f/pandas-2.3.3-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:ee15f284898e7b246df8087fc82b87b01686f98ee67d85a17b7ab44143a3a9a0", size = 11540635, upload-time = "2025-09-29T23:25:52.486Z" }, + { url = "https://files.pythonhosted.org/packages/21/00/266d6b357ad5e6d3ad55093a7e8efc7dd245f5a842b584db9f30b0f0a287/pandas-2.3.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:1611aedd912e1ff81ff41c745822980c49ce4a7907537be8692c8dbc31924593", size = 10759079, upload-time = "2025-09-29T23:26:33.204Z" }, + { url = "https://files.pythonhosted.org/packages/ca/05/d01ef80a7a3a12b2f8bbf16daba1e17c98a2f039cbc8e2f77a2c5a63d382/pandas-2.3.3-cp314-cp314-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6d2cefc361461662ac48810cb14365a365ce864afe85ef1f447ff5a1e99ea81c", size = 11814049, upload-time = "2025-09-29T23:27:15.384Z" }, + { url = "https://files.pythonhosted.org/packages/15/b2/0e62f78c0c5ba7e3d2c5945a82456f4fac76c480940f805e0b97fcbc2f65/pandas-2.3.3-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ee67acbbf05014ea6c763beb097e03cd629961c8a632075eeb34247120abcb4b", size = 12332638, upload-time = "2025-09-29T23:27:51.625Z" }, + { url = "https://files.pythonhosted.org/packages/c5/33/dd70400631b62b9b29c3c93d2feee1d0964dc2bae2e5ad7a6c73a7f25325/pandas-2.3.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:c46467899aaa4da076d5abc11084634e2d197e9460643dd455ac3db5856b24d6", size = 12886834, upload-time = "2025-09-29T23:28:21.289Z" }, + { url = "https://files.pythonhosted.org/packages/d3/18/b5d48f55821228d0d2692b34fd5034bb185e854bdb592e9c640f6290e012/pandas-2.3.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:6253c72c6a1d990a410bc7de641d34053364ef8bcd3126f7e7450125887dffe3", size = 13409925, upload-time = "2025-09-29T23:28:58.261Z" }, + { url = "https://files.pythonhosted.org/packages/a6/3d/124ac75fcd0ecc09b8fdccb0246ef65e35b012030defb0e0eba2cbbbe948/pandas-2.3.3-cp314-cp314-win_amd64.whl", hash = "sha256:1b07204a219b3b7350abaae088f451860223a52cfb8a6c53358e7948735158e5", size = 11109071, upload-time = "2025-09-29T23:32:27.484Z" }, + { url = "https://files.pythonhosted.org/packages/89/9c/0e21c895c38a157e0faa1fb64587a9226d6dd46452cac4532d80c3c4a244/pandas-2.3.3-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:2462b1a365b6109d275250baaae7b760fd25c726aaca0054649286bcfbb3e8ec", size = 12048504, upload-time = "2025-09-29T23:29:31.47Z" }, + { url = "https://files.pythonhosted.org/packages/d7/82/b69a1c95df796858777b68fbe6a81d37443a33319761d7c652ce77797475/pandas-2.3.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:0242fe9a49aa8b4d78a4fa03acb397a58833ef6199e9aa40a95f027bb3a1b6e7", size = 11410702, upload-time = "2025-09-29T23:29:54.591Z" }, + { url = "https://files.pythonhosted.org/packages/f9/88/702bde3ba0a94b8c73a0181e05144b10f13f29ebfc2150c3a79062a8195d/pandas-2.3.3-cp314-cp314t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a21d830e78df0a515db2b3d2f5570610f5e6bd2e27749770e8bb7b524b89b450", size = 11634535, upload-time = "2025-09-29T23:30:21.003Z" }, + { url = "https://files.pythonhosted.org/packages/a4/1e/1bac1a839d12e6a82ec6cb40cda2edde64a2013a66963293696bbf31fbbb/pandas-2.3.3-cp314-cp314t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2e3ebdb170b5ef78f19bfb71b0dc5dc58775032361fa188e814959b74d726dd5", size = 12121582, upload-time = "2025-09-29T23:30:43.391Z" }, + { url = "https://files.pythonhosted.org/packages/44/91/483de934193e12a3b1d6ae7c8645d083ff88dec75f46e827562f1e4b4da6/pandas-2.3.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:d051c0e065b94b7a3cea50eb1ec32e912cd96dba41647eb24104b6c6c14c5788", size = 12699963, upload-time = "2025-09-29T23:31:10.009Z" }, + { url = "https://files.pythonhosted.org/packages/70/44/5191d2e4026f86a2a109053e194d3ba7a31a2d10a9c2348368c63ed4e85a/pandas-2.3.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:3869faf4bd07b3b66a9f462417d0ca3a9df29a9f6abd5d0d0dbab15dac7abe87", size = 13202175, upload-time = "2025-09-29T23:31:59.173Z" }, +] + [[package]] name = "pandocfilters" version = "1.5.1" @@ -1119,6 +1446,18 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/cc/20/ff623b09d963f88bfde16306a54e12ee5ea43e9b597108672ff3a408aad6/pathspec-0.12.1-py3-none-any.whl", hash = "sha256:a0d503e138a4c123b27490a4f7beda6a01c6f288df0e4a8b79c7eb0dc7b4cc08", size = 31191, upload-time = "2023-12-10T22:30:43.14Z" }, ] +[[package]] +name = "patsy" +version = "1.0.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "numpy" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/d1/81/74f6a65b848ffd16c18f920620ce999fe45fe27f01ab3911260ce4ed85e4/patsy-1.0.1.tar.gz", hash = "sha256:e786a9391eec818c054e359b737bbce692f051aee4c661f4141cc88fb459c0c4", size = 396010, upload-time = "2024-11-12T14:10:54.642Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/87/2b/b50d3d08ea0fc419c183a84210571eba005328efa62b6b98bc28e9ead32a/patsy-1.0.1-py2.py3-none-any.whl", hash = "sha256:751fb38f9e97e62312e921a1954b81e1bb2bcda4f5eeabaf94db251ee791509c", size = 232923, upload-time = "2024-11-12T14:10:52.85Z" }, +] + [[package]] name = "pexpect" version = "4.9.0" @@ -1131,6 +1470,64 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/9e/c3/059298687310d527a58bb01f3b1965787ee3b40dce76752eda8b44e9a2c5/pexpect-4.9.0-py2.py3-none-any.whl", hash = "sha256:7236d1e080e4936be2dc3e326cec0af72acf9212a7e1d060210e70a47e253523", size = 63772, upload-time = "2023-11-25T06:56:14.81Z" }, ] +[[package]] +name = "pillow" +version = "12.0.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/5a/b0/cace85a1b0c9775a9f8f5d5423c8261c858760e2466c79b2dd184638b056/pillow-12.0.0.tar.gz", hash = "sha256:87d4f8125c9988bfbed67af47dd7a953e2fc7b0cc1e7800ec6d2080d490bb353", size = 47008828, upload-time = "2025-10-15T18:24:14.008Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/62/f2/de993bb2d21b33a98d031ecf6a978e4b61da207bef02f7b43093774c480d/pillow-12.0.0-cp313-cp313-ios_13_0_arm64_iphoneos.whl", hash = "sha256:0869154a2d0546545cde61d1789a6524319fc1897d9ee31218eae7a60ccc5643", size = 4045493, upload-time = "2025-10-15T18:22:25.758Z" }, + { url = "https://files.pythonhosted.org/packages/0e/b6/bc8d0c4c9f6f111a783d045310945deb769b806d7574764234ffd50bc5ea/pillow-12.0.0-cp313-cp313-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:a7921c5a6d31b3d756ec980f2f47c0cfdbce0fc48c22a39347a895f41f4a6ea4", size = 4120461, upload-time = "2025-10-15T18:22:27.286Z" }, + { url = "https://files.pythonhosted.org/packages/5d/57/d60d343709366a353dc56adb4ee1e7d8a2cc34e3fbc22905f4167cfec119/pillow-12.0.0-cp313-cp313-ios_13_0_x86_64_iphonesimulator.whl", hash = "sha256:1ee80a59f6ce048ae13cda1abf7fbd2a34ab9ee7d401c46be3ca685d1999a399", size = 3576912, upload-time = "2025-10-15T18:22:28.751Z" }, + { url = "https://files.pythonhosted.org/packages/a4/a4/a0a31467e3f83b94d37568294b01d22b43ae3c5d85f2811769b9c66389dd/pillow-12.0.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:c50f36a62a22d350c96e49ad02d0da41dbd17ddc2e29750dbdba4323f85eb4a5", size = 5249132, upload-time = "2025-10-15T18:22:30.641Z" }, + { url = "https://files.pythonhosted.org/packages/83/06/48eab21dd561de2914242711434c0c0eb992ed08ff3f6107a5f44527f5e9/pillow-12.0.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:5193fde9a5f23c331ea26d0cf171fbf67e3f247585f50c08b3e205c7aeb4589b", size = 4650099, upload-time = "2025-10-15T18:22:32.73Z" }, + { url = "https://files.pythonhosted.org/packages/fc/bd/69ed99fd46a8dba7c1887156d3572fe4484e3f031405fcc5a92e31c04035/pillow-12.0.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:bde737cff1a975b70652b62d626f7785e0480918dece11e8fef3c0cf057351c3", size = 6230808, upload-time = "2025-10-15T18:22:34.337Z" }, + { url = "https://files.pythonhosted.org/packages/ea/94/8fad659bcdbf86ed70099cb60ae40be6acca434bbc8c4c0d4ef356d7e0de/pillow-12.0.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:a6597ff2b61d121172f5844b53f21467f7082f5fb385a9a29c01414463f93b07", size = 8037804, upload-time = "2025-10-15T18:22:36.402Z" }, + { url = "https://files.pythonhosted.org/packages/20/39/c685d05c06deecfd4e2d1950e9a908aa2ca8bc4e6c3b12d93b9cafbd7837/pillow-12.0.0-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0b817e7035ea7f6b942c13aa03bb554fc44fea70838ea21f8eb31c638326584e", size = 6345553, upload-time = "2025-10-15T18:22:38.066Z" }, + { url = "https://files.pythonhosted.org/packages/38/57/755dbd06530a27a5ed74f8cb0a7a44a21722ebf318edbe67ddbd7fb28f88/pillow-12.0.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f4f1231b7dec408e8670264ce63e9c71409d9583dd21d32c163e25213ee2a344", size = 7037729, upload-time = "2025-10-15T18:22:39.769Z" }, + { url = "https://files.pythonhosted.org/packages/ca/b6/7e94f4c41d238615674d06ed677c14883103dce1c52e4af16f000338cfd7/pillow-12.0.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:6e51b71417049ad6ab14c49608b4a24d8fb3fe605e5dfabfe523b58064dc3d27", size = 6459789, upload-time = "2025-10-15T18:22:41.437Z" }, + { url = "https://files.pythonhosted.org/packages/9c/14/4448bb0b5e0f22dd865290536d20ec8a23b64e2d04280b89139f09a36bb6/pillow-12.0.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:d120c38a42c234dc9a8c5de7ceaaf899cf33561956acb4941653f8bdc657aa79", size = 7130917, upload-time = "2025-10-15T18:22:43.152Z" }, + { url = "https://files.pythonhosted.org/packages/dd/ca/16c6926cc1c015845745d5c16c9358e24282f1e588237a4c36d2b30f182f/pillow-12.0.0-cp313-cp313-win32.whl", hash = "sha256:4cc6b3b2efff105c6a1656cfe59da4fdde2cda9af1c5e0b58529b24525d0a098", size = 6302391, upload-time = "2025-10-15T18:22:44.753Z" }, + { url = "https://files.pythonhosted.org/packages/6d/2a/dd43dcfd6dae9b6a49ee28a8eedb98c7d5ff2de94a5d834565164667b97b/pillow-12.0.0-cp313-cp313-win_amd64.whl", hash = "sha256:4cf7fed4b4580601c4345ceb5d4cbf5a980d030fd5ad07c4d2ec589f95f09905", size = 7007477, upload-time = "2025-10-15T18:22:46.838Z" }, + { url = "https://files.pythonhosted.org/packages/77/f0/72ea067f4b5ae5ead653053212af05ce3705807906ba3f3e8f58ddf617e6/pillow-12.0.0-cp313-cp313-win_arm64.whl", hash = "sha256:9f0b04c6b8584c2c193babcccc908b38ed29524b29dd464bc8801bf10d746a3a", size = 2435918, upload-time = "2025-10-15T18:22:48.399Z" }, + { url = "https://files.pythonhosted.org/packages/f5/5e/9046b423735c21f0487ea6cb5b10f89ea8f8dfbe32576fe052b5ba9d4e5b/pillow-12.0.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:7fa22993bac7b77b78cae22bad1e2a987ddf0d9015c63358032f84a53f23cdc3", size = 5251406, upload-time = "2025-10-15T18:22:49.905Z" }, + { url = "https://files.pythonhosted.org/packages/12/66/982ceebcdb13c97270ef7a56c3969635b4ee7cd45227fa707c94719229c5/pillow-12.0.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:f135c702ac42262573fe9714dfe99c944b4ba307af5eb507abef1667e2cbbced", size = 4653218, upload-time = "2025-10-15T18:22:51.587Z" }, + { url = "https://files.pythonhosted.org/packages/16/b3/81e625524688c31859450119bf12674619429cab3119eec0e30a7a1029cb/pillow-12.0.0-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:c85de1136429c524e55cfa4e033b4a7940ac5c8ee4d9401cc2d1bf48154bbc7b", size = 6266564, upload-time = "2025-10-15T18:22:53.215Z" }, + { url = "https://files.pythonhosted.org/packages/98/59/dfb38f2a41240d2408096e1a76c671d0a105a4a8471b1871c6902719450c/pillow-12.0.0-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:38df9b4bfd3db902c9c2bd369bcacaf9d935b2fff73709429d95cc41554f7b3d", size = 8069260, upload-time = "2025-10-15T18:22:54.933Z" }, + { url = "https://files.pythonhosted.org/packages/dc/3d/378dbea5cd1874b94c312425ca77b0f47776c78e0df2df751b820c8c1d6c/pillow-12.0.0-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:7d87ef5795da03d742bf49439f9ca4d027cde49c82c5371ba52464aee266699a", size = 6379248, upload-time = "2025-10-15T18:22:56.605Z" }, + { url = "https://files.pythonhosted.org/packages/84/b0/d525ef47d71590f1621510327acec75ae58c721dc071b17d8d652ca494d8/pillow-12.0.0-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:aff9e4d82d082ff9513bdd6acd4f5bd359f5b2c870907d2b0a9c5e10d40c88fe", size = 7066043, upload-time = "2025-10-15T18:22:58.53Z" }, + { url = "https://files.pythonhosted.org/packages/61/2c/aced60e9cf9d0cde341d54bf7932c9ffc33ddb4a1595798b3a5150c7ec4e/pillow-12.0.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:8d8ca2b210ada074d57fcee40c30446c9562e542fc46aedc19baf758a93532ee", size = 6490915, upload-time = "2025-10-15T18:23:00.582Z" }, + { url = "https://files.pythonhosted.org/packages/ef/26/69dcb9b91f4e59f8f34b2332a4a0a951b44f547c4ed39d3e4dcfcff48f89/pillow-12.0.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:99a7f72fb6249302aa62245680754862a44179b545ded638cf1fef59befb57ef", size = 7157998, upload-time = "2025-10-15T18:23:02.627Z" }, + { url = "https://files.pythonhosted.org/packages/61/2b/726235842220ca95fa441ddf55dd2382b52ab5b8d9c0596fe6b3f23dafe8/pillow-12.0.0-cp313-cp313t-win32.whl", hash = "sha256:4078242472387600b2ce8d93ade8899c12bf33fa89e55ec89fe126e9d6d5d9e9", size = 6306201, upload-time = "2025-10-15T18:23:04.709Z" }, + { url = "https://files.pythonhosted.org/packages/c0/3d/2afaf4e840b2df71344ababf2f8edd75a705ce500e5dc1e7227808312ae1/pillow-12.0.0-cp313-cp313t-win_amd64.whl", hash = "sha256:2c54c1a783d6d60595d3514f0efe9b37c8808746a66920315bfd34a938d7994b", size = 7013165, upload-time = "2025-10-15T18:23:06.46Z" }, + { url = "https://files.pythonhosted.org/packages/6f/75/3fa09aa5cf6ed04bee3fa575798ddf1ce0bace8edb47249c798077a81f7f/pillow-12.0.0-cp313-cp313t-win_arm64.whl", hash = "sha256:26d9f7d2b604cd23aba3e9faf795787456ac25634d82cd060556998e39c6fa47", size = 2437834, upload-time = "2025-10-15T18:23:08.194Z" }, + { url = "https://files.pythonhosted.org/packages/54/2a/9a8c6ba2c2c07b71bec92cf63e03370ca5e5f5c5b119b742bcc0cde3f9c5/pillow-12.0.0-cp314-cp314-ios_13_0_arm64_iphoneos.whl", hash = "sha256:beeae3f27f62308f1ddbcfb0690bf44b10732f2ef43758f169d5e9303165d3f9", size = 4045531, upload-time = "2025-10-15T18:23:10.121Z" }, + { url = "https://files.pythonhosted.org/packages/84/54/836fdbf1bfb3d66a59f0189ff0b9f5f666cee09c6188309300df04ad71fa/pillow-12.0.0-cp314-cp314-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:d4827615da15cd59784ce39d3388275ec093ae3ee8d7f0c089b76fa87af756c2", size = 4120554, upload-time = "2025-10-15T18:23:12.14Z" }, + { url = "https://files.pythonhosted.org/packages/0d/cd/16aec9f0da4793e98e6b54778a5fbce4f375c6646fe662e80600b8797379/pillow-12.0.0-cp314-cp314-ios_13_0_x86_64_iphonesimulator.whl", hash = "sha256:3e42edad50b6909089750e65c91aa09aaf1e0a71310d383f11321b27c224ed8a", size = 3576812, upload-time = "2025-10-15T18:23:13.962Z" }, + { url = "https://files.pythonhosted.org/packages/f6/b7/13957fda356dc46339298b351cae0d327704986337c3c69bb54628c88155/pillow-12.0.0-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:e5d8efac84c9afcb40914ab49ba063d94f5dbdf5066db4482c66a992f47a3a3b", size = 5252689, upload-time = "2025-10-15T18:23:15.562Z" }, + { url = "https://files.pythonhosted.org/packages/fc/f5/eae31a306341d8f331f43edb2e9122c7661b975433de5e447939ae61c5da/pillow-12.0.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:266cd5f2b63ff316d5a1bba46268e603c9caf5606d44f38c2873c380950576ad", size = 4650186, upload-time = "2025-10-15T18:23:17.379Z" }, + { url = "https://files.pythonhosted.org/packages/86/62/2a88339aa40c4c77e79108facbd307d6091e2c0eb5b8d3cf4977cfca2fe6/pillow-12.0.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:58eea5ebe51504057dd95c5b77d21700b77615ab0243d8152793dc00eb4faf01", size = 6230308, upload-time = "2025-10-15T18:23:18.971Z" }, + { url = "https://files.pythonhosted.org/packages/c7/33/5425a8992bcb32d1cb9fa3dd39a89e613d09a22f2c8083b7bf43c455f760/pillow-12.0.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:f13711b1a5ba512d647a0e4ba79280d3a9a045aaf7e0cc6fbe96b91d4cdf6b0c", size = 8039222, upload-time = "2025-10-15T18:23:20.909Z" }, + { url = "https://files.pythonhosted.org/packages/d8/61/3f5d3b35c5728f37953d3eec5b5f3e77111949523bd2dd7f31a851e50690/pillow-12.0.0-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6846bd2d116ff42cba6b646edf5bf61d37e5cbd256425fa089fee4ff5c07a99e", size = 6346657, upload-time = "2025-10-15T18:23:23.077Z" }, + { url = "https://files.pythonhosted.org/packages/3a/be/ee90a3d79271227e0f0a33c453531efd6ed14b2e708596ba5dd9be948da3/pillow-12.0.0-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c98fa880d695de164b4135a52fd2e9cd7b7c90a9d8ac5e9e443a24a95ef9248e", size = 7038482, upload-time = "2025-10-15T18:23:25.005Z" }, + { url = "https://files.pythonhosted.org/packages/44/34/a16b6a4d1ad727de390e9bd9f19f5f669e079e5826ec0f329010ddea492f/pillow-12.0.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:fa3ed2a29a9e9d2d488b4da81dcb54720ac3104a20bf0bd273f1e4648aff5af9", size = 6461416, upload-time = "2025-10-15T18:23:27.009Z" }, + { url = "https://files.pythonhosted.org/packages/b6/39/1aa5850d2ade7d7ba9f54e4e4c17077244ff7a2d9e25998c38a29749eb3f/pillow-12.0.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:d034140032870024e6b9892c692fe2968493790dd57208b2c37e3fb35f6df3ab", size = 7131584, upload-time = "2025-10-15T18:23:29.752Z" }, + { url = "https://files.pythonhosted.org/packages/bf/db/4fae862f8fad0167073a7733973bfa955f47e2cac3dc3e3e6257d10fab4a/pillow-12.0.0-cp314-cp314-win32.whl", hash = "sha256:1b1b133e6e16105f524a8dec491e0586d072948ce15c9b914e41cdadd209052b", size = 6400621, upload-time = "2025-10-15T18:23:32.06Z" }, + { url = "https://files.pythonhosted.org/packages/2b/24/b350c31543fb0107ab2599464d7e28e6f856027aadda995022e695313d94/pillow-12.0.0-cp314-cp314-win_amd64.whl", hash = "sha256:8dc232e39d409036af549c86f24aed8273a40ffa459981146829a324e0848b4b", size = 7142916, upload-time = "2025-10-15T18:23:34.71Z" }, + { url = "https://files.pythonhosted.org/packages/0f/9b/0ba5a6fd9351793996ef7487c4fdbde8d3f5f75dbedc093bb598648fddf0/pillow-12.0.0-cp314-cp314-win_arm64.whl", hash = "sha256:d52610d51e265a51518692045e372a4c363056130d922a7351429ac9f27e70b0", size = 2523836, upload-time = "2025-10-15T18:23:36.967Z" }, + { url = "https://files.pythonhosted.org/packages/f5/7a/ceee0840aebc579af529b523d530840338ecf63992395842e54edc805987/pillow-12.0.0-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:1979f4566bb96c1e50a62d9831e2ea2d1211761e5662afc545fa766f996632f6", size = 5255092, upload-time = "2025-10-15T18:23:38.573Z" }, + { url = "https://files.pythonhosted.org/packages/44/76/20776057b4bfd1aef4eeca992ebde0f53a4dce874f3ae693d0ec90a4f79b/pillow-12.0.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:b2e4b27a6e15b04832fe9bf292b94b5ca156016bbc1ea9c2c20098a0320d6cf6", size = 4653158, upload-time = "2025-10-15T18:23:40.238Z" }, + { url = "https://files.pythonhosted.org/packages/82/3f/d9ff92ace07be8836b4e7e87e6a4c7a8318d47c2f1463ffcf121fc57d9cb/pillow-12.0.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:fb3096c30df99fd01c7bf8e544f392103d0795b9f98ba71a8054bcbf56b255f1", size = 6267882, upload-time = "2025-10-15T18:23:42.434Z" }, + { url = "https://files.pythonhosted.org/packages/9f/7a/4f7ff87f00d3ad33ba21af78bfcd2f032107710baf8280e3722ceec28cda/pillow-12.0.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:7438839e9e053ef79f7112c881cef684013855016f928b168b81ed5835f3e75e", size = 8071001, upload-time = "2025-10-15T18:23:44.29Z" }, + { url = "https://files.pythonhosted.org/packages/75/87/fcea108944a52dad8cca0715ae6247e271eb80459364a98518f1e4f480c1/pillow-12.0.0-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5d5c411a8eaa2299322b647cd932586b1427367fd3184ffbb8f7a219ea2041ca", size = 6380146, upload-time = "2025-10-15T18:23:46.065Z" }, + { url = "https://files.pythonhosted.org/packages/91/52/0d31b5e571ef5fd111d2978b84603fce26aba1b6092f28e941cb46570745/pillow-12.0.0-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d7e091d464ac59d2c7ad8e7e08105eaf9dafbc3883fd7265ffccc2baad6ac925", size = 7067344, upload-time = "2025-10-15T18:23:47.898Z" }, + { url = "https://files.pythonhosted.org/packages/7b/f4/2dd3d721f875f928d48e83bb30a434dee75a2531bca839bb996bb0aa5a91/pillow-12.0.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:792a2c0be4dcc18af9d4a2dfd8a11a17d5e25274a1062b0ec1c2d79c76f3e7f8", size = 6491864, upload-time = "2025-10-15T18:23:49.607Z" }, + { url = "https://files.pythonhosted.org/packages/30/4b/667dfcf3d61fc309ba5a15b141845cece5915e39b99c1ceab0f34bf1d124/pillow-12.0.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:afbefa430092f71a9593a99ab6a4e7538bc9eabbf7bf94f91510d3503943edc4", size = 7158911, upload-time = "2025-10-15T18:23:51.351Z" }, + { url = "https://files.pythonhosted.org/packages/a2/2f/16cabcc6426c32218ace36bf0d55955e813f2958afddbf1d391849fee9d1/pillow-12.0.0-cp314-cp314t-win32.whl", hash = "sha256:3830c769decf88f1289680a59d4f4c46c72573446352e2befec9a8512104fa52", size = 6408045, upload-time = "2025-10-15T18:23:53.177Z" }, + { url = "https://files.pythonhosted.org/packages/35/73/e29aa0c9c666cf787628d3f0dcf379f4791fba79f4936d02f8b37165bdf8/pillow-12.0.0-cp314-cp314t-win_amd64.whl", hash = "sha256:905b0365b210c73afb0ebe9101a32572152dfd1c144c7e28968a331b9217b94a", size = 7148282, upload-time = "2025-10-15T18:23:55.316Z" }, + { url = "https://files.pythonhosted.org/packages/c1/70/6b41bdcddf541b437bbb9f47f94d2db5d9ddef6c37ccab8c9107743748a4/pillow-12.0.0-cp314-cp314t-win_arm64.whl", hash = "sha256:99353a06902c2e43b43e8ff74ee65a7d90307d82370604746738a1e0661ccca7", size = 2525630, upload-time = "2025-10-15T18:23:57.149Z" }, +] + [[package]] name = "platformdirs" version = "4.5.0" @@ -1140,6 +1537,23 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/73/cb/ac7874b3e5d58441674fb70742e6c374b28b0c7cb988d37d991cde47166c/platformdirs-4.5.0-py3-none-any.whl", hash = "sha256:e578a81bb873cbb89a41fcc904c7ef523cc18284b7e3b3ccf06aca1403b7ebd3", size = 18651, upload-time = "2025-10-08T17:44:47.223Z" }, ] +[[package]] +name = "plotnine" +version = "0.15.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "matplotlib" }, + { name = "mizani" }, + { name = "numpy" }, + { name = "pandas" }, + { name = "scipy" }, + { name = "statsmodels" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/fd/b9/80577326c7011d0dc4e2c303070b3906f791b0de3c4b7888d7505eba0a87/plotnine-0.15.0.tar.gz", hash = "sha256:8dc491f5000062f6af7cf29429ee78b617daa8b2c22a1dd4e8b593f08bb51c20", size = 6785533, upload-time = "2025-07-15T15:55:32.336Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/eb/93/304341b5b949cba71c8413722e168aa60947ea0cac55a5d8cc448ea9917a/plotnine-0.15.0-py3-none-any.whl", hash = "sha256:1ce9a109c124fc9b657039591ebb8acbc1c5ae238c9d9256aea9284bc6188436", size = 1331490, upload-time = "2025-07-15T15:55:30.794Z" }, +] + [[package]] name = "pluggy" version = "1.6.0" @@ -1149,6 +1563,32 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/54/20/4d324d65cc6d9205fabedc306948156824eb9f0ee1633355a8f7ec5c66bf/pluggy-1.6.0-py3-none-any.whl", hash = "sha256:e920276dd6813095e9377c0bc5566d94c932c33b27a3e3945d8389c374dd4746", size = 20538, upload-time = "2025-05-15T12:30:06.134Z" }, ] +[[package]] +name = "polars" +version = "1.34.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "polars-runtime-32" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/a1/3e/35fcf5bf51404371bb172b289a5065778dc97adca4416e199c294125eb05/polars-1.34.0.tar.gz", hash = "sha256:5de5f871027db4b11bcf39215a2d6b13b4a80baf8a55c5862d4ebedfd5cd4013", size = 684309, upload-time = "2025-10-02T18:31:04.396Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/6b/80/1791ac226bb989bef30fe8fde752b2021b6ec5dfd6e880262596aedf4c05/polars-1.34.0-py3-none-any.whl", hash = "sha256:40d2f357b4d9e447ad28bd2c9923e4318791a7c18eb68f31f1fbf11180f41391", size = 772686, upload-time = "2025-10-02T18:29:59.492Z" }, +] + +[[package]] +name = "polars-runtime-32" +version = "1.34.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/02/10/1189afb14cc47ed215ccf7fbd00ed21c48edfd89e51c16f8628a33ae4b1b/polars_runtime_32-1.34.0.tar.gz", hash = "sha256:ebe6f865128a0d833f53a3f6828360761ad86d1698bceb22bef9fd999500dc1c", size = 2634491, upload-time = "2025-10-02T18:31:05.502Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/97/35/bc4f1a9dcef61845e8e4e5d2318470b002b93a3564026f0643f562761ecb/polars_runtime_32-1.34.0-cp39-abi3-macosx_10_12_x86_64.whl", hash = "sha256:2878f9951e91121afe60c25433ef270b9a221e6ebf3de5f6642346b38cab3f03", size = 39655423, upload-time = "2025-10-02T18:30:02.846Z" }, + { url = "https://files.pythonhosted.org/packages/a6/bb/d655a103e75b7c81c47a3c2d276be0200c0c15cfb6fd47f17932ddcf7519/polars_runtime_32-1.34.0-cp39-abi3-macosx_11_0_arm64.whl", hash = "sha256:fbc329c7d34a924228cc5dcdbbd4696d94411a3a5b15ad8bb868634c204e1951", size = 35986049, upload-time = "2025-10-02T18:30:05.848Z" }, + { url = "https://files.pythonhosted.org/packages/9e/ce/11ca850b7862cb43605e5d86cdf655614376e0a059871cf8305af5406554/polars_runtime_32-1.34.0-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:93fa51d88a2d12ea996a5747aad5647d22a86cce73c80f208e61f487b10bc448", size = 40261269, upload-time = "2025-10-02T18:30:08.48Z" }, + { url = "https://files.pythonhosted.org/packages/d8/25/77d12018c35489e19f7650b40679714a834effafc25d61e8dcee7c4fafce/polars_runtime_32-1.34.0-cp39-abi3-manylinux_2_24_aarch64.whl", hash = "sha256:79e4d696392c6d8d51f4347f0b167c52eef303c9d87093c0c68e8651198735b7", size = 37049077, upload-time = "2025-10-02T18:30:11.162Z" }, + { url = "https://files.pythonhosted.org/packages/e2/75/c30049d45ea1365151f86f650ed5354124ff3209f0abe588664c8eb13a31/polars_runtime_32-1.34.0-cp39-abi3-win_amd64.whl", hash = "sha256:2501d6b29d9001ea5ea2fd9b598787e10ddf45d8c4a87c2bead75159e8a15711", size = 40105782, upload-time = "2025-10-02T18:30:14.597Z" }, + { url = "https://files.pythonhosted.org/packages/a3/31/84efa27aa3478c8670bac1a720c8b1aee5c58c9c657c980e5e5c47fde883/polars_runtime_32-1.34.0-cp39-abi3-win_arm64.whl", hash = "sha256:f9ed1765378dfe0bcd1ac5ec570dd9eab27ea728bbc980cc9a76eebc55586559", size = 35873216, upload-time = "2025-10-02T18:30:17.439Z" }, +] + [[package]] name = "prometheus-client" version = "0.23.1" @@ -1204,6 +1644,28 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/8e/37/efad0257dc6e593a18957422533ff0f87ede7c9c6ea010a2177d738fb82f/pure_eval-0.2.3-py3-none-any.whl", hash = "sha256:1db8e35b67b3d218d818ae653e27f06c3aa420901fa7b081ca98cbedc874e0d0", size = 11842, upload-time = "2024-07-21T12:58:20.04Z" }, ] +[[package]] +name = "pyarrow" +version = "21.0.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/ef/c2/ea068b8f00905c06329a3dfcd40d0fcc2b7d0f2e355bdb25b65e0a0e4cd4/pyarrow-21.0.0.tar.gz", hash = "sha256:5051f2dccf0e283ff56335760cbc8622cf52264d67e359d5569541ac11b6d5bc", size = 1133487, upload-time = "2025-07-18T00:57:31.761Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/16/ca/c7eaa8e62db8fb37ce942b1ea0c6d7abfe3786ca193957afa25e71b81b66/pyarrow-21.0.0-cp313-cp313-macosx_12_0_arm64.whl", hash = "sha256:e99310a4ebd4479bcd1964dff9e14af33746300cb014aa4a3781738ac63baf4a", size = 31154306, upload-time = "2025-07-18T00:56:04.42Z" }, + { url = "https://files.pythonhosted.org/packages/ce/e8/e87d9e3b2489302b3a1aea709aaca4b781c5252fcb812a17ab6275a9a484/pyarrow-21.0.0-cp313-cp313-macosx_12_0_x86_64.whl", hash = "sha256:d2fe8e7f3ce329a71b7ddd7498b3cfac0eeb200c2789bd840234f0dc271a8efe", size = 32680622, upload-time = "2025-07-18T00:56:07.505Z" }, + { url = "https://files.pythonhosted.org/packages/84/52/79095d73a742aa0aba370c7942b1b655f598069489ab387fe47261a849e1/pyarrow-21.0.0-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:f522e5709379d72fb3da7785aa489ff0bb87448a9dc5a75f45763a795a089ebd", size = 41104094, upload-time = "2025-07-18T00:56:10.994Z" }, + { url = "https://files.pythonhosted.org/packages/89/4b/7782438b551dbb0468892a276b8c789b8bbdb25ea5c5eb27faadd753e037/pyarrow-21.0.0-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:69cbbdf0631396e9925e048cfa5bce4e8c3d3b41562bbd70c685a8eb53a91e61", size = 42825576, upload-time = "2025-07-18T00:56:15.569Z" }, + { url = "https://files.pythonhosted.org/packages/b3/62/0f29de6e0a1e33518dec92c65be0351d32d7ca351e51ec5f4f837a9aab91/pyarrow-21.0.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:731c7022587006b755d0bdb27626a1a3bb004bb56b11fb30d98b6c1b4718579d", size = 43368342, upload-time = "2025-07-18T00:56:19.531Z" }, + { url = "https://files.pythonhosted.org/packages/90/c7/0fa1f3f29cf75f339768cc698c8ad4ddd2481c1742e9741459911c9ac477/pyarrow-21.0.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:dc56bc708f2d8ac71bd1dcb927e458c93cec10b98eb4120206a4091db7b67b99", size = 45131218, upload-time = "2025-07-18T00:56:23.347Z" }, + { url = "https://files.pythonhosted.org/packages/01/63/581f2076465e67b23bc5a37d4a2abff8362d389d29d8105832e82c9c811c/pyarrow-21.0.0-cp313-cp313-win_amd64.whl", hash = "sha256:186aa00bca62139f75b7de8420f745f2af12941595bbbfa7ed3870ff63e25636", size = 26087551, upload-time = "2025-07-18T00:56:26.758Z" }, + { url = "https://files.pythonhosted.org/packages/c9/ab/357d0d9648bb8241ee7348e564f2479d206ebe6e1c47ac5027c2e31ecd39/pyarrow-21.0.0-cp313-cp313t-macosx_12_0_arm64.whl", hash = "sha256:a7a102574faa3f421141a64c10216e078df467ab9576684d5cd696952546e2da", size = 31290064, upload-time = "2025-07-18T00:56:30.214Z" }, + { url = "https://files.pythonhosted.org/packages/3f/8a/5685d62a990e4cac2043fc76b4661bf38d06efed55cf45a334b455bd2759/pyarrow-21.0.0-cp313-cp313t-macosx_12_0_x86_64.whl", hash = "sha256:1e005378c4a2c6db3ada3ad4c217b381f6c886f0a80d6a316fe586b90f77efd7", size = 32727837, upload-time = "2025-07-18T00:56:33.935Z" }, + { url = "https://files.pythonhosted.org/packages/fc/de/c0828ee09525c2bafefd3e736a248ebe764d07d0fd762d4f0929dbc516c9/pyarrow-21.0.0-cp313-cp313t-manylinux_2_28_aarch64.whl", hash = "sha256:65f8e85f79031449ec8706b74504a316805217b35b6099155dd7e227eef0d4b6", size = 41014158, upload-time = "2025-07-18T00:56:37.528Z" }, + { url = "https://files.pythonhosted.org/packages/6e/26/a2865c420c50b7a3748320b614f3484bfcde8347b2639b2b903b21ce6a72/pyarrow-21.0.0-cp313-cp313t-manylinux_2_28_x86_64.whl", hash = "sha256:3a81486adc665c7eb1a2bde0224cfca6ceaba344a82a971ef059678417880eb8", size = 42667885, upload-time = "2025-07-18T00:56:41.483Z" }, + { url = "https://files.pythonhosted.org/packages/0a/f9/4ee798dc902533159250fb4321267730bc0a107d8c6889e07c3add4fe3a5/pyarrow-21.0.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:fc0d2f88b81dcf3ccf9a6ae17f89183762c8a94a5bdcfa09e05cfe413acf0503", size = 43276625, upload-time = "2025-07-18T00:56:48.002Z" }, + { url = "https://files.pythonhosted.org/packages/5a/da/e02544d6997037a4b0d22d8e5f66bc9315c3671371a8b18c79ade1cefe14/pyarrow-21.0.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:6299449adf89df38537837487a4f8d3bd91ec94354fdd2a7d30bc11c48ef6e79", size = 44951890, upload-time = "2025-07-18T00:56:52.568Z" }, + { url = "https://files.pythonhosted.org/packages/e5/4e/519c1bc1876625fe6b71e9a28287c43ec2f20f73c658b9ae1d485c0c206e/pyarrow-21.0.0-cp313-cp313t-win_amd64.whl", hash = "sha256:222c39e2c70113543982c6b34f3077962b44fca38c0bd9e68bb6781534425c10", size = 26371006, upload-time = "2025-07-18T00:56:56.379Z" }, +] + [[package]] name = "pycodestyle" version = "2.12.1" @@ -1338,6 +1800,15 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/1a/a7/69460c4a6af7575449e615144aa2205b89408dc2969b87bc3df2f262ad0b/pylint-3.3.9-py3-none-any.whl", hash = "sha256:01f9b0462c7730f94786c283f3e52a1fbdf0494bbe0971a78d7277ef46a751e7", size = 523465, upload-time = "2025-10-05T18:41:41.766Z" }, ] +[[package]] +name = "pyparsing" +version = "3.2.5" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/f2/a5/181488fc2b9d093e3972d2a472855aae8a03f000592dbfce716a512b3359/pyparsing-3.2.5.tar.gz", hash = "sha256:2df8d5b7b2802ef88e8d016a2eb9c7aeaa923529cd251ed0fe4608275d4105b6", size = 1099274, upload-time = "2025-09-21T04:11:06.277Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/10/5e/1aa9a93198c6b64513c9d7752de7422c06402de6600a8767da1524f9570b/pyparsing-3.2.5-py3-none-any.whl", hash = "sha256:e38a4f02064cf41fe6593d328d0512495ad1f3d8a91c4f73fc401b3079a59a5e", size = 113890, upload-time = "2025-09-21T04:11:04.117Z" }, +] + [[package]] name = "python-dateutil" version = "2.9.0.post0" @@ -1428,6 +1899,15 @@ global = [ { name = "platformdirs" }, ] +[[package]] +name = "pytz" +version = "2025.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/f8/bf/abbd3cdfb8fbc7fb3d4d38d320f2441b1e7cbe29be4f23797b4a2b5d8aac/pytz-2025.2.tar.gz", hash = "sha256:360b9e3dbb49a209c21ad61809c7fb453643e048b38924c765813546746e81c3", size = 320884, upload-time = "2025-03-25T02:25:00.538Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/81/c4/34e93fe5f5429d7570ec1fa436f1986fb1f00c3e0f43a589fe2bbcd22c3f/pytz-2025.2-py2.py3-none-any.whl", hash = "sha256:5ddf76296dd8c44c26eb8f4b6f35488f3ccbf6fbbd7adee0b7262d43f0ec2f00", size = 509225, upload-time = "2025-03-25T02:24:58.468Z" }, +] + [[package]] name = "pywinpty" version = "3.0.2" @@ -1658,6 +2138,57 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/32/7d/97119da51cb1dd3f2f3c0805f155a3aa4a95fa44fe7d78ae15e69edf4f34/rpds_py-0.27.1-cp314-cp314t-win_amd64.whl", hash = "sha256:6567d2bb951e21232c2f660c24cf3470bb96de56cdcb3f071a83feeaff8a2772", size = 230097, upload-time = "2025-08-27T12:15:03.961Z" }, ] +[[package]] +name = "scipy" +version = "1.16.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "numpy" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/4c/3b/546a6f0bfe791bbb7f8d591613454d15097e53f906308ec6f7c1ce588e8e/scipy-1.16.2.tar.gz", hash = "sha256:af029b153d243a80afb6eabe40b0a07f8e35c9adc269c019f364ad747f826a6b", size = 30580599, upload-time = "2025-09-11T17:48:08.271Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c1/27/c5b52f1ee81727a9fc457f5ac1e9bf3d6eab311805ea615c83c27ba06400/scipy-1.16.2-cp313-cp313-macosx_10_14_x86_64.whl", hash = "sha256:84f7bf944b43e20b8a894f5fe593976926744f6c185bacfcbdfbb62736b5cc70", size = 36604856, upload-time = "2025-09-11T17:41:47.695Z" }, + { url = "https://files.pythonhosted.org/packages/32/a9/15c20d08e950b540184caa8ced675ba1128accb0e09c653780ba023a4110/scipy-1.16.2-cp313-cp313-macosx_12_0_arm64.whl", hash = "sha256:5c39026d12edc826a1ef2ad35ad1e6d7f087f934bb868fc43fa3049c8b8508f9", size = 28864626, upload-time = "2025-09-11T17:41:52.642Z" }, + { url = "https://files.pythonhosted.org/packages/4c/fc/ea36098df653cca26062a627c1a94b0de659e97127c8491e18713ca0e3b9/scipy-1.16.2-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:e52729ffd45b68777c5319560014d6fd251294200625d9d70fd8626516fc49f5", size = 20855689, upload-time = "2025-09-11T17:41:57.886Z" }, + { url = "https://files.pythonhosted.org/packages/dc/6f/d0b53be55727f3e6d7c72687ec18ea6d0047cf95f1f77488b99a2bafaee1/scipy-1.16.2-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:024dd4a118cccec09ca3209b7e8e614931a6ffb804b2a601839499cb88bdf925", size = 23512151, upload-time = "2025-09-11T17:42:02.303Z" }, + { url = "https://files.pythonhosted.org/packages/11/85/bf7dab56e5c4b1d3d8eef92ca8ede788418ad38a7dc3ff50262f00808760/scipy-1.16.2-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:7a5dc7ee9c33019973a470556081b0fd3c9f4c44019191039f9769183141a4d9", size = 33329824, upload-time = "2025-09-11T17:42:07.549Z" }, + { url = "https://files.pythonhosted.org/packages/da/6a/1a927b14ddc7714111ea51f4e568203b2bb6ed59bdd036d62127c1a360c8/scipy-1.16.2-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:c2275ff105e508942f99d4e3bc56b6ef5e4b3c0af970386ca56b777608ce95b7", size = 35681881, upload-time = "2025-09-11T17:42:13.255Z" }, + { url = "https://files.pythonhosted.org/packages/c1/5f/331148ea5780b4fcc7007a4a6a6ee0a0c1507a796365cc642d4d226e1c3a/scipy-1.16.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:af80196eaa84f033e48444d2e0786ec47d328ba00c71e4299b602235ffef9acb", size = 36006219, upload-time = "2025-09-11T17:42:18.765Z" }, + { url = "https://files.pythonhosted.org/packages/46/3a/e991aa9d2aec723b4a8dcfbfc8365edec5d5e5f9f133888067f1cbb7dfc1/scipy-1.16.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:9fb1eb735fe3d6ed1f89918224e3385fbf6f9e23757cacc35f9c78d3b712dd6e", size = 38682147, upload-time = "2025-09-11T17:42:25.177Z" }, + { url = "https://files.pythonhosted.org/packages/a1/57/0f38e396ad19e41b4c5db66130167eef8ee620a49bc7d0512e3bb67e0cab/scipy-1.16.2-cp313-cp313-win_amd64.whl", hash = "sha256:fda714cf45ba43c9d3bae8f2585c777f64e3f89a2e073b668b32ede412d8f52c", size = 38520766, upload-time = "2025-09-11T17:43:25.342Z" }, + { url = "https://files.pythonhosted.org/packages/1b/a5/85d3e867b6822d331e26c862a91375bb7746a0b458db5effa093d34cdb89/scipy-1.16.2-cp313-cp313-win_arm64.whl", hash = "sha256:2f5350da923ccfd0b00e07c3e5cfb316c1c0d6c1d864c07a72d092e9f20db104", size = 25451169, upload-time = "2025-09-11T17:43:30.198Z" }, + { url = "https://files.pythonhosted.org/packages/09/d9/60679189bcebda55992d1a45498de6d080dcaf21ce0c8f24f888117e0c2d/scipy-1.16.2-cp313-cp313t-macosx_10_14_x86_64.whl", hash = "sha256:53d8d2ee29b925344c13bda64ab51785f016b1b9617849dac10897f0701b20c1", size = 37012682, upload-time = "2025-09-11T17:42:30.677Z" }, + { url = "https://files.pythonhosted.org/packages/83/be/a99d13ee4d3b7887a96f8c71361b9659ba4ef34da0338f14891e102a127f/scipy-1.16.2-cp313-cp313t-macosx_12_0_arm64.whl", hash = "sha256:9e05e33657efb4c6a9d23bd8300101536abd99c85cca82da0bffff8d8764d08a", size = 29389926, upload-time = "2025-09-11T17:42:35.845Z" }, + { url = "https://files.pythonhosted.org/packages/bf/0a/130164a4881cec6ca8c00faf3b57926f28ed429cd6001a673f83c7c2a579/scipy-1.16.2-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:7fe65b36036357003b3ef9d37547abeefaa353b237e989c21027b8ed62b12d4f", size = 21381152, upload-time = "2025-09-11T17:42:40.07Z" }, + { url = "https://files.pythonhosted.org/packages/47/a6/503ffb0310ae77fba874e10cddfc4a1280bdcca1d13c3751b8c3c2996cf8/scipy-1.16.2-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:6406d2ac6d40b861cccf57f49592f9779071655e9f75cd4f977fa0bdd09cb2e4", size = 23914410, upload-time = "2025-09-11T17:42:44.313Z" }, + { url = "https://files.pythonhosted.org/packages/fa/c7/1147774bcea50d00c02600aadaa919facbd8537997a62496270133536ed6/scipy-1.16.2-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:ff4dc42bd321991fbf611c23fc35912d690f731c9914bf3af8f417e64aca0f21", size = 33481880, upload-time = "2025-09-11T17:42:49.325Z" }, + { url = "https://files.pythonhosted.org/packages/6a/74/99d5415e4c3e46b2586f30cdbecb95e101c7192628a484a40dd0d163811a/scipy-1.16.2-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:654324826654d4d9133e10675325708fb954bc84dae6e9ad0a52e75c6b1a01d7", size = 35791425, upload-time = "2025-09-11T17:42:54.711Z" }, + { url = "https://files.pythonhosted.org/packages/1b/ee/a6559de7c1cc710e938c0355d9d4fbcd732dac4d0d131959d1f3b63eb29c/scipy-1.16.2-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:63870a84cd15c44e65220eaed2dac0e8f8b26bbb991456a033c1d9abfe8a94f8", size = 36178622, upload-time = "2025-09-11T17:43:00.375Z" }, + { url = "https://files.pythonhosted.org/packages/4e/7b/f127a5795d5ba8ece4e0dce7d4a9fb7cb9e4f4757137757d7a69ab7d4f1a/scipy-1.16.2-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:fa01f0f6a3050fa6a9771a95d5faccc8e2f5a92b4a2e5440a0fa7264a2398472", size = 38783985, upload-time = "2025-09-11T17:43:06.661Z" }, + { url = "https://files.pythonhosted.org/packages/3e/9f/bc81c1d1e033951eb5912cd3750cc005943afa3e65a725d2443a3b3c4347/scipy-1.16.2-cp313-cp313t-win_amd64.whl", hash = "sha256:116296e89fba96f76353a8579820c2512f6e55835d3fad7780fece04367de351", size = 38631367, upload-time = "2025-09-11T17:43:14.44Z" }, + { url = "https://files.pythonhosted.org/packages/d6/5e/2cc7555fd81d01814271412a1d59a289d25f8b63208a0a16c21069d55d3e/scipy-1.16.2-cp313-cp313t-win_arm64.whl", hash = "sha256:98e22834650be81d42982360382b43b17f7ba95e0e6993e2a4f5b9ad9283a94d", size = 25787992, upload-time = "2025-09-11T17:43:19.745Z" }, + { url = "https://files.pythonhosted.org/packages/8b/ac/ad8951250516db71619f0bd3b2eb2448db04b720a003dd98619b78b692c0/scipy-1.16.2-cp314-cp314-macosx_10_14_x86_64.whl", hash = "sha256:567e77755019bb7461513c87f02bb73fb65b11f049aaaa8ca17cfaa5a5c45d77", size = 36595109, upload-time = "2025-09-11T17:43:35.713Z" }, + { url = "https://files.pythonhosted.org/packages/ff/f6/5779049ed119c5b503b0f3dc6d6f3f68eefc3a9190d4ad4c276f854f051b/scipy-1.16.2-cp314-cp314-macosx_12_0_arm64.whl", hash = "sha256:17d9bb346194e8967296621208fcdfd39b55498ef7d2f376884d5ac47cec1a70", size = 28859110, upload-time = "2025-09-11T17:43:40.814Z" }, + { url = "https://files.pythonhosted.org/packages/82/09/9986e410ae38bf0a0c737ff8189ac81a93b8e42349aac009891c054403d7/scipy-1.16.2-cp314-cp314-macosx_14_0_arm64.whl", hash = "sha256:0a17541827a9b78b777d33b623a6dcfe2ef4a25806204d08ead0768f4e529a88", size = 20850110, upload-time = "2025-09-11T17:43:44.981Z" }, + { url = "https://files.pythonhosted.org/packages/0d/ad/485cdef2d9215e2a7df6d61b81d2ac073dfacf6ae24b9ae87274c4e936ae/scipy-1.16.2-cp314-cp314-macosx_14_0_x86_64.whl", hash = "sha256:d7d4c6ba016ffc0f9568d012f5f1eb77ddd99412aea121e6fa8b4c3b7cbad91f", size = 23497014, upload-time = "2025-09-11T17:43:49.074Z" }, + { url = "https://files.pythonhosted.org/packages/a7/74/f6a852e5d581122b8f0f831f1d1e32fb8987776ed3658e95c377d308ed86/scipy-1.16.2-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:9702c4c023227785c779cba2e1d6f7635dbb5b2e0936cdd3a4ecb98d78fd41eb", size = 33401155, upload-time = "2025-09-11T17:43:54.661Z" }, + { url = "https://files.pythonhosted.org/packages/d9/f5/61d243bbc7c6e5e4e13dde9887e84a5cbe9e0f75fd09843044af1590844e/scipy-1.16.2-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:d1cdf0ac28948d225decdefcc45ad7dd91716c29ab56ef32f8e0d50657dffcc7", size = 35691174, upload-time = "2025-09-11T17:44:00.101Z" }, + { url = "https://files.pythonhosted.org/packages/03/99/59933956331f8cc57e406cdb7a483906c74706b156998f322913e789c7e1/scipy-1.16.2-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:70327d6aa572a17c2941cdfb20673f82e536e91850a2e4cb0c5b858b690e1548", size = 36070752, upload-time = "2025-09-11T17:44:05.619Z" }, + { url = "https://files.pythonhosted.org/packages/c6/7d/00f825cfb47ee19ef74ecf01244b43e95eae74e7e0ff796026ea7cd98456/scipy-1.16.2-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:5221c0b2a4b58aa7c4ed0387d360fd90ee9086d383bb34d9f2789fafddc8a936", size = 38701010, upload-time = "2025-09-11T17:44:11.322Z" }, + { url = "https://files.pythonhosted.org/packages/e4/9f/b62587029980378304ba5a8563d376c96f40b1e133daacee76efdcae32de/scipy-1.16.2-cp314-cp314-win_amd64.whl", hash = "sha256:f5a85d7b2b708025af08f060a496dd261055b617d776fc05a1a1cc69e09fe9ff", size = 39360061, upload-time = "2025-09-11T17:45:09.814Z" }, + { url = "https://files.pythonhosted.org/packages/82/04/7a2f1609921352c7fbee0815811b5050582f67f19983096c4769867ca45f/scipy-1.16.2-cp314-cp314-win_arm64.whl", hash = "sha256:2cc73a33305b4b24556957d5857d6253ce1e2dcd67fa0ff46d87d1670b3e1e1d", size = 26126914, upload-time = "2025-09-11T17:45:14.73Z" }, + { url = "https://files.pythonhosted.org/packages/51/b9/60929ce350c16b221928725d2d1d7f86cf96b8bc07415547057d1196dc92/scipy-1.16.2-cp314-cp314t-macosx_10_14_x86_64.whl", hash = "sha256:9ea2a3fed83065d77367775d689401a703d0f697420719ee10c0780bcab594d8", size = 37013193, upload-time = "2025-09-11T17:44:16.757Z" }, + { url = "https://files.pythonhosted.org/packages/2a/41/ed80e67782d4bc5fc85a966bc356c601afddd175856ba7c7bb6d9490607e/scipy-1.16.2-cp314-cp314t-macosx_12_0_arm64.whl", hash = "sha256:7280d926f11ca945c3ef92ba960fa924e1465f8d07ce3a9923080363390624c4", size = 29390172, upload-time = "2025-09-11T17:44:21.783Z" }, + { url = "https://files.pythonhosted.org/packages/c4/a3/2f673ace4090452696ccded5f5f8efffb353b8f3628f823a110e0170b605/scipy-1.16.2-cp314-cp314t-macosx_14_0_arm64.whl", hash = "sha256:8afae1756f6a1fe04636407ef7dbece33d826a5d462b74f3d0eb82deabefd831", size = 21381326, upload-time = "2025-09-11T17:44:25.982Z" }, + { url = "https://files.pythonhosted.org/packages/42/bf/59df61c5d51395066c35836b78136accf506197617c8662e60ea209881e1/scipy-1.16.2-cp314-cp314t-macosx_14_0_x86_64.whl", hash = "sha256:5c66511f29aa8d233388e7416a3f20d5cae7a2744d5cee2ecd38c081f4e861b3", size = 23915036, upload-time = "2025-09-11T17:44:30.527Z" }, + { url = "https://files.pythonhosted.org/packages/91/c3/edc7b300dc16847ad3672f1a6f3f7c5d13522b21b84b81c265f4f2760d4a/scipy-1.16.2-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:efe6305aeaa0e96b0ccca5ff647a43737d9a092064a3894e46c414db84bc54ac", size = 33484341, upload-time = "2025-09-11T17:44:35.981Z" }, + { url = "https://files.pythonhosted.org/packages/26/c7/24d1524e72f06ff141e8d04b833c20db3021020563272ccb1b83860082a9/scipy-1.16.2-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:7f3a337d9ae06a1e8d655ee9d8ecb835ea5ddcdcbd8d23012afa055ab014f374", size = 35790840, upload-time = "2025-09-11T17:44:41.76Z" }, + { url = "https://files.pythonhosted.org/packages/aa/b7/5aaad984eeedd56858dc33d75efa59e8ce798d918e1033ef62d2708f2c3d/scipy-1.16.2-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:bab3605795d269067d8ce78a910220262711b753de8913d3deeaedb5dded3bb6", size = 36174716, upload-time = "2025-09-11T17:44:47.316Z" }, + { url = "https://files.pythonhosted.org/packages/fd/c2/e276a237acb09824822b0ada11b028ed4067fdc367a946730979feacb870/scipy-1.16.2-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:b0348d8ddb55be2a844c518cd8cc8deeeb8aeba707cf834db5758fc89b476a2c", size = 38790088, upload-time = "2025-09-11T17:44:53.011Z" }, + { url = "https://files.pythonhosted.org/packages/c6/b4/5c18a766e8353015439f3780f5fc473f36f9762edc1a2e45da3ff5a31b21/scipy-1.16.2-cp314-cp314t-win_amd64.whl", hash = "sha256:26284797e38b8a75e14ea6631d29bda11e76ceaa6ddb6fdebbfe4c4d90faf2f9", size = 39457455, upload-time = "2025-09-11T17:44:58.899Z" }, + { url = "https://files.pythonhosted.org/packages/97/30/2f9a5243008f76dfc5dee9a53dfb939d9b31e16ce4bd4f2e628bfc5d89d2/scipy-1.16.2-cp314-cp314t-win_arm64.whl", hash = "sha256:d2a4472c231328d4de38d5f1f68fdd6d28a615138f842580a8a321b5845cf779", size = 26448374, upload-time = "2025-09-11T17:45:03.45Z" }, +] + [[package]] name = "send2trash" version = "1.8.3" @@ -1726,6 +2257,39 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/f1/7b/ce1eafaf1a76852e2ec9b22edecf1daa58175c090266e9f6c64afcd81d91/stack_data-0.6.3-py3-none-any.whl", hash = "sha256:d5558e0c25a4cb0853cddad3d77da9891a08cb85dd9f9f91b9f8cd66e511e695", size = 24521, upload-time = "2023-09-30T13:58:03.53Z" }, ] +[[package]] +name = "statsmodels" +version = "0.14.5" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "numpy" }, + { name = "packaging" }, + { name = "pandas" }, + { name = "patsy" }, + { name = "scipy" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/64/cc/8c1bf59bf8203dea1bf2ea811cfe667d7bcc6909c83d8afb02b08e30f50b/statsmodels-0.14.5.tar.gz", hash = "sha256:de260e58cccfd2ceddf835b55a357233d6ca853a1aa4f90f7553a52cc71c6ddf", size = 20525016, upload-time = "2025-07-07T12:14:23.195Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/84/fd/4c374108cf108b3130240a5b45847a61f70ddf973429044a81a05189b046/statsmodels-0.14.5-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:906263134dd1a640e55ecb01fda4a9be7b9e08558dba9e4c4943a486fdb0c9c8", size = 10013958, upload-time = "2025-07-07T14:35:01.04Z" }, + { url = "https://files.pythonhosted.org/packages/5a/36/bf3d7f0e36acd3ba9ec0babd79ace25506b6872780cbd710fb7cd31f0fa2/statsmodels-0.14.5-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:9118f76344f77cffbb3a9cbcff8682b325be5eed54a4b3253e09da77a74263d3", size = 9674243, upload-time = "2025-07-07T12:08:22.571Z" }, + { url = "https://files.pythonhosted.org/packages/90/ce/a55a6f37b5277683ceccd965a5828b24672bbc427db6b3969ae0b0fc29fb/statsmodels-0.14.5-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9dc4ee159070557c9a6c000625d85f653de437772fe7086857cff68f501afe45", size = 10219521, upload-time = "2025-07-07T14:23:52.646Z" }, + { url = "https://files.pythonhosted.org/packages/1e/48/973da1ee8bc0743519759e74c3615b39acdc3faf00e0a0710f8c856d8c9d/statsmodels-0.14.5-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5a085d47c8ef5387279a991633883d0e700de2b0acc812d7032d165888627bef", size = 10453538, upload-time = "2025-07-07T14:24:06.959Z" }, + { url = "https://files.pythonhosted.org/packages/c7/d6/18903fb707afd31cf1edaec5201964dbdacb2bfae9a22558274647a7c88f/statsmodels-0.14.5-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:9f866b2ebb2904b47c342d00def83c526ef2eb1df6a9a3c94ba5fe63d0005aec", size = 10681584, upload-time = "2025-07-07T14:24:21.038Z" }, + { url = "https://files.pythonhosted.org/packages/44/d6/80df1bbbfcdc50bff4152f43274420fa9856d56e234d160d6206eb1f5827/statsmodels-0.14.5-cp313-cp313-win_amd64.whl", hash = "sha256:2a06bca03b7a492f88c8106103ab75f1a5ced25de90103a89f3a287518017939", size = 9604641, upload-time = "2025-07-07T12:08:36.23Z" }, +] + +[[package]] +name = "sympy" +version = "1.14.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "mpmath" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/83/d3/803453b36afefb7c2bb238361cd4ae6125a569b4db67cd9e79846ba2d68c/sympy-1.14.0.tar.gz", hash = "sha256:d3d3fe8df1e5a0b42f0e7bdf50541697dbe7d23746e894990c030e2b05e72517", size = 7793921, upload-time = "2025-04-27T18:05:01.611Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a2/09/77d55d46fd61b4a135c444fc97158ef34a095e5681d0a6c10b75bf356191/sympy-1.14.0-py3-none-any.whl", hash = "sha256:e091cc3e99d2141a0ba2847328f5479b05d94a6635cb96148ccb3f34671bd8f5", size = 6299353, upload-time = "2025-04-27T18:04:59.103Z" }, +] + [[package]] name = "terminado" version = "0.18.1"