From 3d46c3bbf15744de7cd634a005c13ff7e9739ce9 Mon Sep 17 00:00:00 2001 From: Emilie Mauduit <emilie.mauduit@obspm.fr> Date: Wed, 16 Apr 2025 15:42:12 +0200 Subject: [PATCH 1/5] Update README.md --- README.md | 88 ++++++++++--------------------------------------------- 1 file changed, 16 insertions(+), 72 deletions(-) diff --git a/README.md b/README.md index f21d912..d8c371f 100644 --- a/README.md +++ b/README.md @@ -1,74 +1,24 @@ # A2_S-Bursts -## Getting started +## How to download -To make it easy for you to get started with GitLab, here's a list of recommended next steps. - -Already a pro? Just edit this README.md and make it your own. Want to make it easy? [Use the template at the bottom](#editing-this-readme)! - -## Add your files - -- [ ] [Create](https://docs.gitlab.com/ee/user/project/repository/web_editor.html#create-a-file) or [upload](https://docs.gitlab.com/ee/user/project/repository/web_editor.html#upload-a-file) files -- [ ] [Add files using the command line](https://docs.gitlab.com/ee/gitlab-basics/add-file.html#add-a-file-using-the-command-line) or push an existing Git repository with the following command: +Open your terminal. Go to the folder in which you want to use this algorithm. Copy-paste the https link in the 'Clone' button. ``` cd existing_repo -git remote add origin https://gitlab.bsc.es/extract/extract-use-cases/taska/use-case-a/a2_s-bursts.git -git branch -M main -git push -uf origin main +git clone https://gitlab.bsc.es/extract/extract-use-cases/taska/use-case-a/a2_s-bursts.git ``` -## Integrate with your tools - -- [ ] [Set up project integrations](https://gitlab.bsc.es/extract/extract-use-cases/taska/use-case-a/a2_s-bursts/-/settings/integrations) - -## Collaborate with your team - -- [ ] [Invite team members and collaborators](https://docs.gitlab.com/ee/user/project/members/) -- [ ] [Create a new merge request](https://docs.gitlab.com/ee/user/project/merge_requests/creating_merge_requests.html) -- [ ] [Automatically close issues from merge requests](https://docs.gitlab.com/ee/user/project/issues/managing_issues.html#closing-issues-automatically) -- [ ] [Enable merge request approvals](https://docs.gitlab.com/ee/user/project/merge_requests/approvals/) -- [ ] [Automatically merge when pipeline succeeds](https://docs.gitlab.com/ee/user/project/merge_requests/merge_when_pipeline_succeeds.html) - -## Test and Deploy - -Use the built-in continuous integration in GitLab. - -- [ ] [Get started with GitLab CI/CD](https://docs.gitlab.com/ee/ci/quick_start/index.html) -- [ ] [Analyze your code for known vulnerabilities with Static Application Security Testing(SAST)](https://docs.gitlab.com/ee/user/application_security/sast/) -- [ ] [Deploy to Kubernetes, Amazon EC2, or Amazon ECS using Auto Deploy](https://docs.gitlab.com/ee/topics/autodevops/requirements.html) -- [ ] [Use pull-based deployments for improved Kubernetes management](https://docs.gitlab.com/ee/user/clusters/agent/) -- [ ] [Set up protected environments](https://docs.gitlab.com/ee/ci/environments/protected_environments.html) - ---- - -# Editing this README - -When you're ready to make this README your own, just edit this file and use the handy template below (or feel free to structure it however you want - this is just a starting point!). Thank you to [makeareadme.com](https://www.makeareadme.com/) for this template. - -## Suggestions for a good README +## About the TASKA - A2 use case -Every project is different, so consider which of these sections apply to yours. The sections used in the template are suggestions for most open source projects. Also keep in mind that while a README can be too long and detailed, too long is better than too short. If you think your README is too long, consider utilizing another form of documentation rather than cutting out information. - -## Name - -Choose a self-explaining name for your project. - -## Description - -Let people know what your project can do specifically. Provide context and add a link to any reference visitors might be unfamiliar with. A list of Features or a Background subsection can also be added here. If there are alternatives to your project, this is a good place to list differentiating factors. - -## Badges - -On some READMEs, you may see small images that convey metadata, such as whether or not all the tests are passing for the project. You can use Shields to add some to your README. Many services also have instructions for adding a badge. - -## Visuals - -Depending on what you are making, it can be a good idea to include screenshots or even a video (you'll frequently see GIFs rather than actual videos). Tools like ttygif can help, but check out Asciinema for a more sophisticated method. +This project has been been developed in the frame of the [EXTRACT](https://extract-project.eu/) project. It aims at developing a distributed data-mining platform for EXTReme dAta Across the Compute conTinuum. A key use case, Transient Astrophysics with a Square Kilometer Array pathfinder (TASKA), takes advantage of EXTRACT technologies to handle the massive data streams produced by NenuFAR, one of the SKA pathfinders. The use case A2 aims at detecting the presence of fast drifting radio bursts in Jupiter's decametric emissions in real-time. The goals of this project are : + - migrating from IDL to Python the algorithm developed by [Mauduit et al, 2023](https://doi.org/10.1038/s41467-023-41617-8) + - embedding this algorithm whithin the [MurMuRe](https://gitlab.bsc.es/extract/extract-use-cases/taska/use-case-a/modular_multicast_receiver) pipeline in order to use it for real-time detections during [NenuFAR](https://nenufar.obs-nancay.fr/) observations of Jupiter. + - developing and training a convolutional neural network using a Variational AutoEncoder for anomaly detections, to replace the current algorithm and enhance computing time. ## Installation -Within a particular ecosystem, there may be a common way of installing things, such as using Yarn, NuGet, or Homebrew. However, consider the possibility that whoever is reading your README is a novice and would like more guidance. Listing specific steps helps remove ambiguity and gets people to using your project as quickly as possible. If it only runs in a specific context like a particular programming language version or operating system or has dependencies that have to be installed manually, also add a Requirements subsection. +For the moment this is not an installable software. When it will be, instructions will be given here. ## Usage @@ -76,28 +26,22 @@ Use examples liberally, and show the expected output if you can. It's helpful to ## Support -Tell people where they can go to for help. It can be any combination of an issue tracker, a chat room, an email address, etc. - -## Roadmap - -If you have ideas for releases in the future, it is a good idea to list them in the README. +Any issue encountered while using this software can be raised on the Issue page of this project. The author will gladly look at them and try to find a fix. ## Contributing -State if you are open to contributions and what your requirements are for accepting them. - -For people who want to make changes to your project, it's helpful to have some documentation on how to get started. Perhaps there is a script that they should run or some environment variables that they need to set. Make these steps explicit. These instructions could also be useful to your future self. - -You can also document commands to lint the code or run tests. These steps help to ensure high code quality and reduce the likelihood that the changes inadvertently break something. Having instructions for running tests is especially helpful if it requires external setup, such as starting a Selenium server for testing in a browser. +Any suggestion on a missing feature, a way to improve the code will be welcomed. Please do not hesitate to reach out. ## Authors and acknowledgment -Show your appreciation to those who have contributed to the project. +The author acknowledge the precious help of the other collaborators on this project : C. Viou, F. Nammour, B. Cecconi, J. Girard and L. Bondonneau. + +This project has received funding from the European Union’s Horizon Europe programme under grant agreement number 101093110. ## License -For open source projects, say how it is licensed. +[MIT](https://choosealicense.com/licenses/mit/) ## Project status -If you have run out of energy or time for your project, put a note at the top of the README saying that development has slowed down or stopped completely. Someone may choose to fork your project or volunteer to step in as a maintainer or owner, allowing your project to keep going. You can also make an explicit request for maintainers. +The project is active. The main branch is maintained up-to-date with the latest working and validated features. Other branches are reserved for developement and are not guaranteed to be working. -- GitLab From ca607a97ad541c0210fec6ef42ca45e44419b3d2 Mon Sep 17 00:00:00 2001 From: EmilieMauduit <103190830+EmilieMauduit@users.noreply.github.com> Date: Thu, 17 Apr 2025 12:12:59 +0200 Subject: [PATCH 2/5] Outputreader for NenuFAR or NDA/JunoN --- .gitignore | 1 + pyproject.toml | 19 ++++++++- sandbox/main_for_dev.py | 2 +- sandbox/notebook_for_dev.ipynb | 73 +++++++++------------------------- src/processing_JunoN_data.py | 2 +- src/read_pipeline_output.py | 48 ++++++++++++++++------ 6 files changed, 75 insertions(+), 70 deletions(-) diff --git a/.gitignore b/.gitignore index 58cac68..fbfe0df 100644 --- a/.gitignore +++ b/.gitignore @@ -10,3 +10,4 @@ runtime_stats.csv # Caches __pycache__/ +src/__pycache__/ diff --git a/pyproject.toml b/pyproject.toml index 16e624e..94c7ffd 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,7 +1,7 @@ [project] name = "a2-s-bursts" version = "0.1.0" -description = "Add your description here" +description = "This software allows to detect millisecond bursts in high resolution time-frequency dynamical spectrum, either on stored data or in real-time NenuFAR observations. This software is an updated version of the one published in Mauduit et al, 2023, Nat Coms." readme = "README.md" requires-python = ">=3.8" dependencies = [ @@ -12,6 +12,23 @@ dependencies = [ "scikit-image>=0.21.0", "scipy>=1.10.1", ] +authors = [ + {name = "Emilie Mauduit", email = "emilie.mauduit@obspm.fr"}, + {name = "Baptiste Cecconi", email = "baptiste.cecconi@obspm.fr"}, + {name = "Cedric Viou", email = "cedric.viou@obs-nancay.fr"}, + {name = "Fadi Nammour", email = "fnammour@ekinox.io"} , + {name = 'Julien Girard", email = "julien.girard@obspm.fr"} +] +maintainers = [ + {name = "Emilie Mauduit", email = "emilie.mauduit@obspm.fr"} +] +licence = "MIT" + +[project.urls] +Homepage = "https://extract-project.eu/" +Documentation = "https://readthedocs.org" +Repository = "https://gitlab.bsc.es/extract/extract-use-cases/taska/use-case-a/a2_s-bursts" +"Bug Tracker" = "https://gitlab.bsc.es/extract/extract-use-cases/taska/use-case-a/a2_s-bursts/-/issues" [tool.pytest.ini_options] pythonpath = "src" diff --git a/sandbox/main_for_dev.py b/sandbox/main_for_dev.py index 4bca585..eebcf42 100644 --- a/sandbox/main_for_dev.py +++ b/sandbox/main_for_dev.py @@ -9,7 +9,7 @@ import h5py from sburst_detection import process_by_frequency_bands from cleaning_tools import rebin_with_averaging -from read_junon_data import ReadJunonData +from read_JunoN_data import ReadJunonData log = logging.getLogger(__name__) logging.basicConfig(level=logging.INFO) diff --git a/sandbox/notebook_for_dev.ipynb b/sandbox/notebook_for_dev.ipynb index 7c3ef93..e2dd334 100644 --- a/sandbox/notebook_for_dev.ipynb +++ b/sandbox/notebook_for_dev.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "code", - "execution_count": 13, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -24,8 +24,8 @@ "\n", "import sburst_detection as sb_det\n", "import cleaning_tools as ct\n", - "from read_junon_data import ReadJunonData\n", - "from read_pipeline_output import PipelineOutputReader, PolarizationParameters" + "from read_JunoN_data import ReadJunonData\n", + "from read_pipeline_output import PipelineOutputReader, PolarizationParameters, get_reader" ] }, { @@ -376,89 +376,52 @@ }, { "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "path_hdf5 = \"/data/emauduit/EXTRACT/test_nda/\"\n", - "list = os.listdir(path_hdf5)\n", - "files_list = [f for f in list if os.path.isfile(os.path.join(path_hdf5, f))]\n", - "obs_list = [f for f in files_list if \"extract2.h5\" in f]" - ] - }, - { - "cell_type": "code", - "execution_count": 14, + "execution_count": 1, "metadata": {}, "outputs": [], "source": [ - "filename = '/Users/emauduit/Documents/EXTRACT/codes/archive_code_burst_detection/test_main.h5'" + "from read_pipeline_output import PipelineOutputReader, PolarizationParameters, get_reader" ] }, { "cell_type": "code", - "execution_count": 17, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ - "output_test = PipelineOutputReader(filename)" + "path_hdf5 = \"/data/emauduit/EXTRACT/test_nda/\"\n", + "list = os.listdir(path_hdf5)\n", + "files_list = [f for f in list if os.path.isfile(os.path.join(path_hdf5, f))]\n", + "obs_list = [f for f in files_list if \"extract2.h5\" in f]" ] }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 2, "metadata": {}, "outputs": [], "source": [ - "data_LH = output_test.data['LH']" + "filename = '/Users/emauduit/Documents/EXTRACT/codes/archive_code_burst_detection/test_main.h5'" ] }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 6, "metadata": {}, "outputs": [], "source": [ - "df_LH = output_test.read_polarization(polarization='LH')" - ] - }, - { - "cell_type": "code", - "execution_count": 12, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "Index(['window_mid_time_jd', 'window_mid_frequency_MHz', 'drift_rate_MHz_s',\n", - " 'SNR', 'window_processing_time_s'],\n", - " dtype='object')" - ] - }, - "execution_count": 12, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "df_LH.keys" + "reader = get_reader(instrument = 'NDA/JunoN', filename=filename)\n", + "LH_output = reader.read_polarization(polarization = 'LH')" ] }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 7, "metadata": {}, "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "WARNING:matplotlib.legend:No artists with labels found to put in legend. Note that artists whose label start with an underscore are ignored when legend() is called with no argument.\n" - ] - }, { "data": { - "image/png": "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3HJLh3lvueUWJSUlacmSJV2ur76+XoZhBP2voKCgy3WNGDFC9fX12rlzp88111ruaI2id4fR8ys7zuRHxS15ypm9QjmzV7jP5gYAAACAniik4cRPPvlE2dnZ6t27d4d5e/furaysLH3yySehVNlt8vPz9c4776iiokJXXXWV17Xy8nJ3Hvjqa7P6vZZhTdHmBZODTgcAAACAeBbSSHdra6v279+vvXv3dph37969OnDggFpbW0OpstvMmDFDKSkpeuCBB7ymmW/cuFF/+tOfdPLJJ+ucc86JYgsja/XtBZKkeyd/q9P3tj9CbHf9IUa+AQAAAPRIIY10f/vb39Y777yj0tJSLV68OGDe+++/X62trTr99NNDqbLLPvnkEy1YsECS1NjY6E6bPn26O4/nZnEjR47U3LlzVVJSojPOOENTpkzRwYMHtXz5cklt69mTkkL6m0VMy3+oWmVjpPtWfCKp82u6XXLnrQpfowAAAAAgzoQUdN944416++239eijj+rAgQO6++67NXz4cK88X375pe6//349/fTTslgs+slPfhJSg7tq586devrpp73Svv76a6+09ju033XXXcrJydHixYv1+OOPy2q1Ki8vT/fff79GjRrVHc1OOHZHi/sxm6UBAAAASHQhRT2XX365KisrtWzZMj3zzDN65plnNHToUB177LGS2s7p3rp1qyTJMAxdddVVuvzyy0NvdRcUFBQoyCPJvVx++eVRa3M0rZ9TqKpVFWEv13PkmzXcAAAAABJdyEONTz31lM4880yVlpZq79692rJli7Zs2eKVp0+fPrr77rt18803h1odugnnYwMAAABA6MISWf385z/X9ddfr4qKCtXU1GjXrl2SpAEDBig3N1eTJk1Sr169wlEVutmy6bm67Mn3u3z/azedrfMfe9v9fO2sCUq3JnlNLbc7mnXKPW07wm8qLe7UtPNo3QsAAAAAwQhblJGWlqYf/vCH+uEPfxiuIhEDpi+rUSgbqXkG3JKUV1YlianlAAAAAHoGhvZgqrEbjvZyHR/mublasButReteAAAAAOgMoguYGj2/UmVjwltmTclEZViT3c9dU7s9BbvRWrTuBQAAAIDOIOhGt8mwJjOKDAAAAKBHIQKCqfKb8/ThO9V6eMrp+tkLH3WY/4krRum6Zz9wP6+4JU/p1mSlW5OVO6/S9J5NpcWS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sWN1/fXX6/rrr9fAgQP1yCOP6LTTTtPHH3/sc88DDzygK664Qrt27dINN9ygiy++WGvWrNHZZ5+tdevWReFVAAAAAADiSY/509uLL76oXr18RziffPJJXXPNNZo7d65efPFFd3ptba3mzp2rkSNH6h//+Ieys7MlST/5yU80duxYXXvttfroo4+UlJSYf7fY09AkSZr90saotqP264Pqm2l1P7c7WjzOxba40/fUN7V77tDew6/B0459je7HrhFvV3l2R4tXPe35ux7oL9gdlc1fv3s2Ph+Rw3sLoLvxcweAPz3m228WcEvSxRdfrGuuuUafffaZV/rSpUvV3Nysu+66yx1wS9KZZ56pyy67TMuWLdNbb72l8ePHR7Td0ZL/ULXKxkjvfLlfnsFsd7vgsbe9nufOW2WaL6+sut3zKtN853uU5zompf0U9ED1mF0PdNxKR2VzVEvPxucjcnhvAXQ3fu4A8Ccxh2k7YcWKFZKk0047zSu9urpaklRUVORzT3Fx23rh1atXR7ZxAAAAAIC41mNGul1eeOEFbdq0SXa7XR9//LHKy8t1/PHHq7S01CtfbW2tbDabBg4c6FPGiBEj3HkS1erbC/Te6kp97/ijVP3Zgai149WbzlbfTKt7JLumZKIk4/BVi/svyGtnFUiyuEe4186aoL0NTT4j5a/ddLYG90n3SnNtumZ3tLjLqymZqAxrsle+jq6bCbZs9Ex8PiKH9xZAd+PnDgB/emTQ/fLLL7uf5+bmavny5Tr++OO98h04cEADBgwwLSMrK8udx5+mpiY1NR1ZU1xXVydJcjqdcjqdXW5/d8mytk2CmHfhaSpc9FbU2nF837ZlAWnJbYG21dKq9MNrohodze707LQkr3zZaRZlp/VyP3cZ0DtV2Wlt//Nz9UPq4dnzVkurVz2pFu+JIP6uB+rPjsqO9GfBVX48fOZ6omA/H/Rj50X7u+cPfZkY6MfEEO5+jNWfOz0B38nEEI/9GGxbLYZhGB1niw233XabVyDbkZtvvtk9Kt3e/v37tWHDBt11113atGmT/vznP+vcc891X7darRowYIC2bdvmc29tba1Gjhyp888/X6+++qpp+XPnztV9993nk/7cc88pIyMj6NcAAAAAAIg9drtdP/7xj3XgwAH3wKyZuAq6bTabGhoags5fVVWlgoKCgHnq6up00kknKTk5WV9++aVSU1MlSUcffbQOHTqkgwcP+tzz/vvvKzc3V1deeaWeeeYZ03LNRrqHDh2q3bt3B+yQWOF0OrVy5UpNmjTJ/Z4g/tCPiYF+TBz0ZWKgHxMD/Zg46MvEEI/9WFdXp/79+3cYdMfV9PL6+vqwl5mVlaWxY8fqlVde0WeffaaTTz5ZUtu67XfeeUc7d+70WdftWsvtbxRdktLS0pSWluaTnpqaGjcfIin+2gtz9GNioB8TB32ZGOjHxEA/Jg76MjHEUz8G284ev3u5JO3YsUOS95uWn58vSaqoqPDJX15e7pUHAAAAAAAzPSLoPnjwoD799FPTa0899ZT+8Y9/aMSIETrxxBPd6TNmzFBKSooeeOABrw3TNm7cqD/96U86+eSTdc4550S87QAAAACA+BVX08u7as+ePTr55JOVm5urb33rWzr22GO1b98+rV+/Xh988IGysrL09NNPe90zcuRIzZ07VyUlJTrjjDM0ZcoUHTx4UMuXL5ck/f73v1dSUo/4mwUAAAAAoIt6RNB99NFH6+6771Z1dbVWrlypPXv2yGq1KicnR7feeqtmzpypIUOG+Nx31113KScnR4sXL9bjjz8uq9WqvLw83X///Ro1alQUXgkAAAAAIJ70iKA7MzPT9PiuYFx++eW6/PLLw9wiAAAAAEBPwPxoAAAAAAAihKAbAAAAAIAIIegGAAAAACBCCLoBAAAAAIgQgm4AAAAAACKEoBsAAAAAgAgh6AYAAAAAIEIIugEAAAAAiBCCbgAAAAAAIoSgGwAAAACACCHoBgAAAAAgQgi6AQAAAACIEIJuAAAAAAAihKAbAAAAAIAIIegGAAAAACBCCLoBAAAAAIiQlGg3oKcwDEOSVFdXF+WWBMfpdMput6uurk6pqanRbg66iH5MDPRj4qAvEwP9mBjox8RBXyaGeOxHV2znivX8IejuJgcPHpQkDR06NMotAQAAAACEy8GDB5Wdne33usXoKCxHWLS2tmrHjh3q3bu3LBZLtJvTobq6Og0dOlRbt25VVlZWtJuDLqIfEwP9mDjoy8RAPyYG+jFx0JeJIR770TAMHTx4UIMHD1ZSkv+V24x0d5OkpCQNGTIk2s3otKysrLj50MM/+jEx0I+Jg75MDPRjYqAfEwd9mRjirR8DjXC7sJEaAAAAAAARQtANAAAAAECEEHTDVFpamu69916lpaVFuykIAf2YGOjHxEFfJgb6MTHQj4mDvkwMidyPbKQGAAAAAECEMNINAAAAAECEEHQDAAAAABAhBN0AAAAAAEQIQTe8rF+/Xt///vd11FFHKTMzU2PHjtULL7wQ7WbBRE5OjiwWi+m/goICn/xNTU0qLS3ViBEj1KtXLw0ePFjXXXeddu3a1f2N74GeffZZXX/99crNzVVaWposFouWLVvmN39dXZ1mzpypYcOGKS0tTTk5Obr99ttVX19vmr+1tVWPPvqoTj/9dKWnp+voo4/WZZddpi+++CJCr6hn6kw/zp071+931GKxaPPmzab3lZeXKz8/X71791ZWVpYmTJigysrKyL2oHmj79u1avHixioqKdNxxx8lqtWrgwIGaMmWK3nvvPdN7+E7Gns72I9/J2HXo0CHNnDlT48eP1+DBg9WrVy8NHDhQ48aN09KlS+V0On3u4TsZezrbjz3pO5kS7QYgdlRVVam4uFi9evXSpZdeqt69e+vll1/W1KlTtXXrVt12223RbiLayc7O1i233OKTnpOT4/W8tbVVF1xwgcrLyzV27FhNmTJFtbW1WrJkiSorK/Xuu+/q6KOP7p5G91AlJSX66quv1L9/fw0aNEhfffWV37wNDQ3Kz8/Xxo0bVVRUpMsuu0wbNmzQww8/rNWrV2vNmjXq1auX1z3XX3+9lixZolNPPVU///nPtWPHDr3wwguqqKjQu+++qxEjRkT6JfYInelHl2nTpvl8JyXpqKOO8kl79tlndeWVV+roo4/W9OnTJUnPP/+8Jk2apBdeeEEXXXRRiK8AkvToo49q4cKFOuGEE1RUVKSjjz5atbW1euWVV/TKK6/oueee09SpU935+U7Gps72owvfydhTX1+vxx9/XGPGjNHkyZN19NFHa9++fXrjjTd09dVXa/ny5XrjjTeUlNQ2Xsh3MjZ1th9desR30gAMw3A6ncYJJ5xgpKWlGRs2bHCn79+/3xg5cqRhtVqNzZs3R6+B8DFs2DBj2LBhQeV96qmnDEnGZZddZrS2trrTH3/8cUOScd1110WolXBZuXKl+zv04IMPGpKMpUuXmua95557DEnGHXfc4ZV+xx13GJKM+fPne6W/+eabhiRj/PjxRlNTkzv99ddfNyQZRUVF4X0xPVhn+vHee+81JBlVVVVBlb13717jqKOOMvr3729s3brVnb5161ajf//+Rv/+/Y26urpQXwIMw3j55ZeN6upqn/Q1a9YYqampRp8+fYxDhw650/lOxqbO9iPfydjV0tLi9V1xcTqdRkFBgSHJ+Nvf/uZO5zsZmzrbjz3pO0nQDcMwDKO8vNyQZMyYMcPn2rJlywxJxn333ReFlsGfzgTd3/ve9wxJPn84aW1tNYYPH25kZmYadrs9Aq2EmUDBWmtrqzF48GDDZrMZ9fX1Xtfq6+sNm81mDB8+3Cv9sssuMyQZq1ev9inP9T+5r776KqyvAeEPun/3u9/5/Vk7d+5cQ5Lx9NNPh9BiBKOoqMiQZKxfv94wDL6T8ap9PxoG38l49cgjjxiSjMWLFxuGwXcyXrXvR8PoWd9J1nRDklRdXS1JKioq8rlWXFwsSVq9enV3NglBaGpq0rJlyzR//nz95je/MV3DdujQIb333ns66aSTNGzYMK9rFotFkyZNUkNDg2pqarqr2QigtrZWO3bs0Lhx45SZmel1LTMzU+PGjdMXX3yhrVu3utOrq6vd19rj+xt9a9as0cKFC/XQQw/plVde8bvekJ/DsSE1NVWSlJLStgKP72R8at+PnvhOxo/W1lb9/e9/lySddtppkvhOxiOzfvTUE76TrOmGpLYfYJJM17MMHDhQNpvNnQexY+fOnZoxY4ZX2ujRo/WnP/1JJ5xwgiTp888/V2trq9+1Sq702tpa5eXlRbbB6FCg76Irvby8XLW1tRo6dKgaGhr03//+V6eddpqSk5NN83uWi+537733ej0/6qij9Mgjj+iqq67ySg/U9/Rj99iyZYtWrVqlQYMG6fTTT5fEdzIemfWjJ76TscvhcGj+/PkyDEN79uxRZWWlPvnkE82YMUOFhYWS+E7Gg2D60VNP+E4y0g1J0oEDByS1bcxlJisry50HsWHGjBmqrKzU119/rYaGBm3YsEFXXnml1q9fr8LCQh08eFBScH3rmQ/R1dn+on9j1xlnnKGnnnpKX3zxhRobG/Xll1/q0UcflcVi0fTp0/Xaa6955Q/Ul/Rj5DmdTl155ZVqamrSwoUL3b+c852ML/76UeI7GQ8cDofuu+8+lZaW6rHHHtOnn36qX/ziF3riiSfcefhOxr5g+lHqWd9JRrqBONX+r4JnnnmmnnnmGUnSH/7wB/3+97/XzJkzo9E0AJJ+9KMfeT3PycnRT3/6U5188smaNGmSSkpKdP7550epdfDU2tqq6dOna82aNbr22mt15ZVXRrtJ6IKO+pHvZOyz2WwyDEOtra3asWOH/vrXv2rOnDl655139Prrr7sDK8S2YPuxJ30nGemGpCN/MfL316G6ujq/fyFEbLn++uslSevWrZMUXN965kN0dba/6N/4U1hYqBNOOEH/+te/3P0jBe5L+jFyWltbdfXVV+u5557TFVdcod/+9rde1/lOxoeO+jEQvpOxJykpSUOGDNGNN96oJ554QuvWrdMDDzwgie9kPAnUj4Ek4neSoBuSAq+D2Llzp+rr6zm/ME70799fUtsZlpI0fPhwJSUl+V3j0tHaKHSvjtYkte+vzMxMDRo0SF9++aVaWlo6zI/Y4Pqe2u12d1qgvqcfI6O1tVUzZszQ008/rcsuu0zLli3zOT+W72TsC6YfO8J3Mna5Ns1ybaLFdzI+te/HjiTad5KgG5Kk/Px8SVJFRYXPtfLycq88iG2uHcxzcnIkSenp6RozZow+/fRTffXVV155DcPQypUrlZmZqdzc3O5uKkyMGDFCgwcP1rp169x/OHFpaGjQunXrdPzxx2vo0KHu9Pz8fPe19lzf3/Hjx0e24QhaQ0ODPv74Y2VmZrp/qZD4OdzdXIHaM888o6lTp+oPf/iD302W+E7GrmD7MRC+k7Ftx44dko7sSM93Mj6178dAEvI7GdUDyxAznE6nMXz4cCMtLc3YsGGDO33//v3GyJEjDavVanz55ZdRax+8/fvf/zYaGhpM0wcOHOhzFuVTTz1lSDIuu+wyo7W11Z3++OOPG5KM6667rlvajTYdne98zz33GJKMO+64wyv9jjvuMCQZ8+fP90p/8803DUnG+PHjjaamJnf666+/bkgyioqKwv4aELgf6+rqjE8//dQn3W63u8+LnTFjhte1vXv3GtnZ2Ub//v2NrVu3utO3bt1q9O/f3+jfv79RV1cX9tfRE7W0tBjTpk0zJBkXX3yx4XQ6A+bnOxmbOtOPfCdj28cff2z6e01DQ4Nx3nnnGZKMBx54wJ3OdzI2daYfe9p30mIYhtF9IT5iWVVVlYqLi9WrVy9deuml6t27t15++WV99dVXevjhh3XbbbdFu4k4bO7cufrVr36l8ePHa9iwYcrMzNR//vMfvf7663I6nbrzzjs1f/58d/7W1lZ9//vfV3l5ucaOHav8/Hx99tln+vOf/6ycnBy99957Ovroo6P4ihLfkiVL9NZbb0mS/vWvf+mDDz7QuHHjdOKJJ0qSzjnnHF1zzTWS2v7CO27cOH344YcqKirSqFGj9MEHH6iiokKjR4/W6tWrlZ6e7lX+tddeqyVLlujUU0/V5MmT9d///lfPP/+8bDab3nnnHY0cObJ7X3CCCrYfN2/erOHDh2v06NE6+eSTNXDgQH399ddatWqVtm3bptNPP11VVVXq16+fV/nPPvusrrzySh199NGaOnWqJOn555/X7t279fzzz+viiy/u3hecoObOnav77rtPNptNN998s+lZzhdeeKHOPPNMSXwnY1Vn+pHvZGxz/V5zzjnnKCcnR1lZWdq+fbveeOMN7dmzR3l5eSovL3d/z/hOxqbO9GOP+05GO+pHbHnvvfeM8847z8jKyjLS09ONMWPGGMuXL492s9BOdXW1cckllxgjRowwsrKyjJSUFGPgwIHGBRdcYJSXl5vec+jQIWPu3LnGCSecYFitVmPgwIHGNddcY+zcubObW98zuUZj/P2bNm2aV/79+/cbt9xyizF06FAjNTXVOO6444zbbrvN719wW1pajEceecQ49dRTjbS0NKNfv37G1KlTjc8++6wbXl3PEWw/HjhwwLjpppuM0aNHG0cffbSRkpJi9O7d2xgzZoxRVlZm2O12v3W88cYbRl5enpGZmWnYbDYjPz/fWLlyZTe9wp6ho36UyQwGvpOxpzP9yHcytq1fv9649tprjVNPPdU46qijjJSUFKNfv37GhAkTjN/97nemsxj4TsaezvRjT/tOMtINAAAAAECEsJEaAAAAAAARQtANAAAAAECEEHQDAAAAABAhBN0AAAAAAEQIQTcAAAAAABFC0A0AAAAAQIQQdAMAAAAAECEE3QAAAAAARAhBNwAAAAAAEULQDQAAAABAhBB0AwDQQxmGoRdffFE/+tGPNGzYMKWnp8tms+mEE07QOeeco5kzZ+ovf/mL6urqvO6bPn26LBaLLBaLBg8eLLvd7reO6upqd97Nmzf7XM/JyXFf9/xns9n0rW99SzNmzNC7774b7pcOAEC3IegGAKAH2r9/vyZMmKBLLrlEr7zyirZs2aLm5malpaVpy5YtWrdunRYtWqT//d//1Z///Ge/5fz3v//VI488EnJ7evXqpWOOOUbHHHOMBgwYoMbGRn366adatmyZzj77bJWWloZcBwAA0UDQDQBAD3TVVVdp9erVSk5O1m233ab//Oc/ampq0p49e9TY2KgPP/xQCxcu1BlnnNFhWQsXLtTevXtDas/UqVO1c+dO7dy5U19//bUOHTqkqqoqnXbaaTIMQ/fee68qKytDqgMAgGgg6AYAoIepra3VX//6V0nSvHnz9PDDD2vEiBFKSmr7tSAlJUXf/va3NWvWLG3cuFFTp041LSc3N1fHHHOMDhw4oPnz54e1jampqSooKNCrr76qlJQUSdKTTz4Z1joAAOgOBN0AAPQwGzdudD++4IILOsyfnp5ump6Zmal77rlHkvTYY49p69atYWmfp+HDh2vkyJGSpI8//jjs5QMAEGkE3QAA9GDbtm0L6f5rr71WJ554og4dOqR77703TK3yZhiGJKmlpSUi5QMAEEkE3QAA9DCjR4+WxWKRJPd67q5KTU3VvHnzJEnPPPNM2Eejv/jiC9XW1kpqG/UGACDeEHQDANDD5OTk6JprrpEk/etf/9K3vvUtjRo1SjfddJOeeuopffTRR+7R5WBccskl+u53v6uWlhbNmTMnLG10Op2qrq7WBRdcoObmZknSjBkzwlI2AADdKSXaDQAAAN3v//7v/zRw4ED96le/UkNDgzZs2KANGza4rw8YMECXX3657rjjDh1zzDEBy7JYLFqwYIEmTZqk1157TW+//bbOPvvsTrXn+eef19///ndJbdPJ9+zZ4zWd/Oc//7kuvPDCTpUJAEAsYKQbAIAeKCUlRaWlpdq+/f+3d/8gjYNxGMcfDzVFi0W7FDdBh0JBqODkGHAQJ62TECsqnUQRERS6CQpSrdBJELWLk4KDi6uTDgoqKA6KcGBLwT8ItgjNDXLlBrmr1njc9fuZXgh58hvzkJc335VMJjU0NKTW1lZVV1dLktLptBYXFxUIBHRwcPDHPNM0ZZqmJGlqaurd82SzWaVSKaVSKaXT6ULhNgxDW1tbisfjhS3xAAD8SyjdAACUMY/Ho/7+fq2srOj4+FgPDw/a29tTd3e3JCmTyainp0fZbPaPWXNzc6qoqND+/n7hl2TFsixLtm3Ltm1ls1mdnJwoHA4rl8spEolwcjkA4J9F6QYAAAUul0umaWpnZ0eWZUl6PeH859bv32lra1MoFJIkTU9PK5/Pf2gGwzAUCAS0urqqgYEBpdNp9fb26vn5+UN5AAD8TZRuAADwppGRkcL64uKiqHtmZ2dVWVmp09NTJZPJkmeIxWLyeDw6Pz/X0tJSyXkAAHw1SjcAAHiT2+0urA3DKOqe5uZmDQ8PS5Ki0ahyuVxJM9TX12tsbEzS6/b1u7u7kvIAAPhqlG4AAMrM1dVVUf/mXl9fL6yDwWDR+dFoVLW1tbq5uVEikfjQjL8aHR2V2+3W4+OjFhYWSs4DAOArUboBACgzZ2dn8vv96urq0sbGhq6vrwvXXl5edHR0pHA4rFgsJklqb29XR0dH0fk+n0/j4+OS9O4D1d7S0NCgSCQiSVpeXlYmkyk5EwCAr0LpBgCgzFRVVSmfz2t3d1eWZampqUmGYcjr9cowDAWDQa2trUl6/cK9vb2tb9/e98owOTkpr9f7aTNPTEzI5XLp6elJ8/Pzn5YLAIDTKN0AAJSZzs5OXV5eKh6PKxQKye/3yzAM3d/fq6amRi0tLerr69Pm5qYODw/V2Nj47mfU1dVpZmbm02b2+XwaHByUJCUSCd3e3n5aNgAATqqwbdv+20MAAAAAAPA/4ks3AAAAAAAOoXQDAAAAAOAQSjcAAAAAAA6hdAMAAAAA4BBKNwAAAAAADqF0AwAAAADgEEo3AAAAAAAOoXQDAAAAAOAQSjcAAAAAAA6hdAMAAAAA4BBKNwAAAAAADqF0AwAAAADgEEo3AAAAAAAOoXQDAAAAAOCQHzujz8TZzcx0AAAAAElFTkSuQmCC", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAA90AAAKyCAYAAADIG729AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuNSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/xnp5ZAAAACXBIWXMAAA9hAAAPYQGoP6dpAABOIklEQVR4nO3de3hV5Z0v8G8QiBgIUMECIwUveHnUar2NFQUZJdA602qtUFup4PFSHOVYnA5jBxWlUmkdLwOOtTKKl17Q8dJOxQG0gJVprT3qHIut0qoIVWtFJRA0RrPPHz7kGAEBYZHs8Pk8T55kv+td633X/mUp36zLriiVSqUAAAAAW127lp4AAAAAtFVCNwAAABRE6AYAAICCCN0AAABQEKEbAAAACiJ0AwAAQEGEbgAAACiI0A0AAAAFad/SE+A9jY2NefHFF9OlS5dUVFS09HQAAAD4EKVSKatWrUqfPn3Srt2Gz2cL3a3Eiy++mL59+7b0NAAAANgMy5Yty6677rrB5UJ3K9GlS5ck7xWsurq6hWfz4RoaGjJ37tzU1NSkQ4cOLT0dPgI1LH9q2DaoY/lTw7ZBHcufGpa/cqxhbW1t+vbt25TlNkTobiXWXlJeXV1dFqF7p512SnV1ddkcEDSnhuVPDdsGdSx/atg2qGP5U8PyV8413NjtwR6kBgAAAAURugEAAKAgQjcAAAAUROgGAACAggjdAAAAUBChGwAAAAoidAMAAEBBhG4AAAAoiNANAAAABRG6AQAAoCBCNwAAABRE6AYAAICCCN0AAABQEKEbAAAACiJ0AwAAQEGEbgAAAChIWYTuP/3pT7nmmmtSU1OTT3ziE+nYsWN69eqVk046KY888sg6/SdNmpSKiooNfj3//PPrHWfOnDkZPHhwunTpkurq6gwZMiQPPvjgBuf1zDPPZMSIEenRo0c6deqUAw88MNdff31KpdLW2nUAAADKWPuWnsCmmDZtWqZOnZo99tgjNTU16dmzZ5YsWZJ777039957b374wx9m5MiR66x32mmnpX///uu0d+vWbZ2222+/PaNGjUrPnj0zevToJMmsWbMydOjQ3HHHHfniF7/YrP9TTz2VI488Mm+++WZGjBiRPn365L777ss555yTp556KtOmTdsauw4AAEAZK4vQffjhh2fBggUZPHhws/Zf/OIXOfbYYzN27NiccMIJqaysbLZ89OjROeaYYza6/ddffz3nnXdeevTokcceeyy77rprkmTChAn51Kc+lbFjx2bYsGHp0qVL0zpjx47NypUrM3v27HzmM59JkkyePDnHHXdcpk+fni9/+cv59Kc/vYV7DgAAQDkri8vLv/CFL6wTuJPk6KOPzpAhQ/L666/nySef/Mjbv/POO/PGG2/kvPPOawrcSbLrrrvm3HPPzauvvpp77rmnqf2ZZ57JQw89lCFDhjQF7iTp2LFjJk+enCS58cYbP/J8AAAAaBvKInR/mA4dOiRJ2rdf96T9Qw89lKlTp+a73/1u7r333qxevXq921iwYEGSpKamZp1lw4YNS5IsXLhwk/ofddRRqaqqatYfAACA7VNZXF6+IS+88EIeeOCB9O7dOwcccMA6yy+55JJmr7t165Zrr702X/3qV5u1L1myJEkyYMCAdbaxtm1tn43132GHHbLbbrvlqaeeyjvvvLPePwYAAACwfSjbRNjQ0JBRo0alvr4+U6dOzQ477NC07MADD8xNN92UY445Jr17987LL7+cn/3sZ7n44oszevTodOvWLZ/73Oea+q9cuTJJ0rVr13XGqa6ubtZnY/3XrtPY2JhVq1ale/fu6+1TX1+f+vr6pte1tbVN+9XQ0LBJ70FLWTu/1j5PNkwNy58atg3qWP7UsG1Qx/KnhuWvHGu4qXMty9Dd2NiY0aNH56GHHsqZZ56ZUaNGNVt+4oknNnvdv3//nHvuudl3330zdOjQTJw4sVnobgnf/va3c+mll67TPnfu3Oy0004tMKPNN2/evJaeAltIDcufGrYN6lj+1LBtUMfyp4blr5xquGbNmk3qV3ahu7GxMaeffnp++MMf5tRTT833vve9TV732GOPzR577JEnn3wytbW1TWex156xXrlyZXbeeedm66w9A/3+s9rv778+tbW1qaioaPa08w+68MILM378+Gbr9O3bNzU1NU3zaq0aGhoyb968DB06tOmeesqLGpY/NWwb1LH8qWHboI7lTw3LXznWcG1W3JiyCt2NjY0ZM2ZMbr311pxyyimZOXNm2rXbvGfB9ejRI3/4wx+yZs2apnA7YMCA/OY3v8mSJUvWCd3ru397ffd5r/Xuu+/mueeey2677fah93NXVlau8xFnyXsPhiuXX7Jymivrp4blTw3bBnUsf2rYNqhj+VPD8ldONdzU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J554YrPX/fv3z7nnnpt99903Q4cOzcSJE5uF7pZw4YUXZvz48U2va2tr07dv39TU1DQF/dZm/0lzkrx3hnvyoY256DftUt9Ysc3G/+2kYdtsrLauoaEh8+bNy9ChQ9OhQ4eWng4fgRq2DepY/tSwbVDH8qeG5a8ca7j2auWNaZOhe0OOPfbY7LHHHnnyySdTW1vbFG7XnrFeuXJldt5552brrH0j339W+/3916e2tjYVFRXNnnb+QZWVlamsrFynvUOHDq32l6z+3eYBu76xYp22IrXW96WctebfNzaNGrYN6lj+1LBtUMfyp4blr5xquKnzbNMPUlufHj16JGl+KcD67ttea333b39Y/3fffTfPPfdcdttttw3ezw0AAMD2YbsK3XV1dVm8eHGqqqqawneSDB48OMl791N/0Jw5c5r12Vj/hx9+OHV1dc36AwAAsH1qc6F71apVeeaZZ9Zpf/PNN3PmmWdm1apVGTFiRLOz0CNGjEjXrl0zbdq0LF++vKl9+fLlmT59enr06NHsPvG99947gwYNyvz583P//fc3tb/99tu56KKLkiRnnHFGEbsHAABAGSmb659nzJiRhx9+OEny5JNPNrWt/czso446KmeccUZWrFiRffbZJ4cddlj23Xff9OrVK3/+85/zwAMPZPny5TnggAPy3e9+t9m2u3fvnunTp2fUqFE5+OCDM3LkyCTJrFmzsmLFisyaNWud+7P/7d/+LQMHDswJJ5yQkSNHpnfv3rnvvvuyePHinHvuuTnyyCMLfkcAAABo7comdD/88MO55ZZbmrUtWrQoixYtanp9xhln5GMf+1jOOeec/PrXv87s2bPz+uuvp1OnTtl3330zbty4nHvuuenUqdM62z/11FPTo0ePTJkyJTfffHMqKipyyCGHZOLEiTnuuOPW6b/ffvvlkUceycSJE3Pfffelrq4ue+21V6677rqMHTt2678BAAAAlJ2yCd0zZ87MzJkzN9qvuro606dP/0hjDB8+PMOHD9/k/nvvvXfuvPPOjzQWAAAAbV+bu6cbAAAAWguhGwAAAAoidAMAAEBBtih0X3bZZbnqqqs2uf+//uu/5rLLLtuSIQEAAKBsbFHonjRpUq688spN7n/11Vfn0ksv3ZIhAQAAoGy4vBwAAAAKsk1D92uvvZYdd9xxWw4JAAAALWabhe4777wzq1atyic+8YltNSQAAAC0qPab0/naa6/Ntdde26ztL3/5S3bfffcNrlMqlfLGG2+ktrY2FRUVOf744z/aTAEAAKDMbFbofuONN/L88883a3v33XfXaduQY489NhdffPHmDAkAAABla7NC9wknnJD+/fsnee8M9umnn56uXbvmmmuu2eA67dq1S3V1dfbff//sscceWzJXAAAAKCubFboPPPDAHHjggU2vTz/99HTq1CmnnXbaVp8YAAAAlLvNCt0f1NjYuLXmAQAAAG2Oz+kGAACAgmzRme73a2xszJIlS/Laa6+loaHhQ/sOGjRoaw0LAAAArdYWh+6XXnopF154Yf7jP/4jb7755kb7V1RU5J133tnSYQEAAKDV26LQ/eKLL+av//qv8+KLL6ZUKm3SOpvaDwAAAMrdFt3TPWnSpPzpT39K586d86//+q9ZunRpGhoa0tjY+KFfAAAAsD3YojPd999/fyoqKvLv//7v+eIXv7i15gQAAABtwhad6f7LX/6S9u3b54QTTthK0wEAAIC2Y4tC9y677JJOnTqlffut9hB0AAAAaDO2KHQfd9xxWbVqVZYsWbK15gMAAABtxhaF7m9+85upqqrKhAkTttZ8AAAAoM3YotC955575qc//WkWLlyYoUOHZv78+amrq9tacwMAAICytkU3Y++www5NP//85z/Pz3/+842uU1FRkXfeeWdLhgUAAICysEWhu1Qqba15AAAAQJuzRaF7/vz5W2seAAAA0OZsUegePHjw1poHAAAAtDlb9CA1AAAAYMOEbgAAACjIFl1e/tBDD32k9QYNGrQlwwIAAEBZ2KLQfcwxx6SiomKz1vGRYQAAAGwvtih0J5v/sWE+ZgwAAIDtxRbd093Y2PihX2+88UbmzJmTwYMHZ+edd87ChQvT2Ni4teYOAAAArVqhD1Krrq7O0KFD8/Of/zxHHnlkPve5z+W5554rckgAAABoNbbJ08srKiryne98JytXrszkyZO3xZAAAADQ4rbZR4btvffeqa6uzrx587bVkAAAANCitvhBapuqoaEhb775Zt56661tNSQAAAC0qG12pvvee+9NQ0NDdtlll201JAAAALSoQs90v/3221m2bFnuuuuuTJkyJRUVFfnMZz5T5JAAAADQamxR6N5hhx02uW+pVMpf/dVf5ZJLLtmSIQEAAKBsbNHl5aVSaZO+dtxxx5x66qn51a9+lT59+mytuQMAAECrtkVnuufPn//hG2/fPt27d89ee+2V9u232TPbAAAAoFXYoiQ8ePDgrTUPAAAAaHO22dPLAQAAYHuz1a/5Xrp0aV555ZUkyS677JJ+/fpt7SEAAACgLGyVM90vvfRSxo0bl1122SW77757jjjiiBxxxBHZfffds8suu+T888/PSy+9tDWGAgAAgLKxxaF70aJF+eQnP5nrrrsur7766jpPLn/11Vczbdq0HHjggfnv//7vrTFnAAAAKAtbdHn5K6+8ks997nN5/fXXU11dna997WsZOnRodt111yTJ8uXL88ADD+SGG27Iq6++ms997nN56qmnsssuu2yVyQMAAEBrtkWh+1/+5V/y+uuvZ5999sm8efPyV3/1V82W77333jn22GNz3nnn5bjjjsvTTz+dq666KldcccUWTRoAAADKwRZdXn7fffeloqIiN9544zqB+/369OmTG2+8MaVSKT/72c+2ZEgAAAAoG1sUup9//vlUVVVl4MCBG+07cODAVFVVZenSpVsyJAAAAJSNbf453aVSaVsPCQAAAC1ii0J3//79U1dXl1/96lcb7fvLX/4ydXV16d+//5YMCQAAAGVji0L3Zz7zmZRKpZx11ln5y1/+ssF+r7zySs4666xUVFTks5/97JYMCQAAAGVji55e/g//8A/593//9yxevDj77rtvxo4dm2OPPbbpoWrLly/Pgw8+mBtuuCErVqxIt27dcsEFF2yViQMAAEBrt0Wh++Mf/3juueeenHjiiXnttdcyZcqUTJkyZZ1+pVIp3bp1y7333puPf/zjWzIkAAAAlI0tfpDa4MGD83//7//N2Wefne7du6dUKjX76t69e8aOHZsnn3wygwYN2hpzBgAAgLKwRWe619p1111z/fXX5/rrr89zzz2XV155JUmyyy67ZLfddtsaQwAAAEDZ2ezQ/c4772TNmjVJkurq6nWW77bbbusE7dra2iRJVVVVdthhh48yTwAAACg7m315+Ze+9KV07949o0eP3uR1Tj/99M1eBwAAAMrdZoXuxYsX5+677051dXVuuummTV7vxhtvTHV1dX70ox9lyZIlmz1JAAAAKEebFbp/8IMfJEnOOeecdOvWbZPX6969e84777w0Njbm9ttv36wJAgAAQLnarND9i1/8IhUVFTnppJM2e6AvfOELSZIFCxZs9roAAABQjjYrdD/zzDNp165dPvWpT232QJ/85CfTrl27/P73v9/sdQEAAKAcbVbofuONN9KtW7dUVFRs/kDt2qVbt25ZuXLlZq8LAAAA5WizQvdOO+2UVatWfeTBVq9enU6dOn3k9QEAAKCcbFbo3mWXXdLQ0JA//vGPmz3QH//4x7z99tvZZZddNntdAAAAKEebFbqPOOKIJMndd9+92QPdddddSZK//uu/3ux1AQAAoBxtVuj+27/925RKpXz3u9/NSy+9tMnrvfjii7nyyitTUVGRv/3bv93sSQIAAEA52qzQfdJJJ2XAgAFZsWJFhg0btkmXmf/hD3/I8OHD8+qrr2bPPffMySef/JEnCwAAAOVks0J3u3btcsstt6Rjx45ZvHhxPvnJT+bss8/O/fffn5dffjlvv/123n777bz88su5//77c9ZZZ+Wggw7Kb3/721RWVmbmzJkf6cnnAAAAUI7ab+4KRxxxRO64446MGjUqtbW1mTFjRmbMmLHB/qVSKZ07d85tt92WT3/601s0WQAAACgnm3Wme62/+7u/y29+85ucfPLJqaioSKlUWu9XRUVFTj755Pyf//N/8vnPf35rzx0AAABatc0+073WnnvumVmzZuWVV17J/Pnzs3jx4qxYsSJJsvPOO2e//fbLkCFDfEQYAAAA262PHLrX2mWXXTJy5MitMRcAAABoUz7S5eUAAADAxgndAAAAUBChGwAAAAoidAMAAEBBhG4AAAAoiNANAAAABRG6AQAAoCBCNwAAABRE6AYAAICCCN0AAABQEKEbAAAACiJ0AwAAQEGEbgAAACiI0A0AAAAFEboBAACgIEI3AAAAFEToBgAAgIII3QAAAFAQoRsAAAAKInQDAABAQYRuAAAAKIjQDQAAAAURugEAAKAgQjcAAAAUROgGAACAggjdAAAAUJCyCd233357zj777Bx66KGprKxMRUVFZs6cucH+tbW1GT9+fPr165fKysr0798/3/jGN7J69er19m9sbMy0adNywAEHpFOnTunZs2dOOeWUPPvssxscY86cORk8eHC6dOmS6urqDBkyJA8++OCW7ioAAABtRNmE7okTJ+b73/9+li5dmt69e39o37q6ugwePDhXX3119tlnn3z961/P3nvvnSuvvDJ/8zd/k7feemuddc4+++yMGzcupVIp48aNy/Dhw3P33XfnsMMOy5IlS9bpf/vtt2f48OH53e9+l9GjR+e0007L4sWLM3To0PzHf/zHVttvAAAAylfZhO4ZM2bk+eefz1/+8pd87Wtf+9C+3/nOd/LEE09kwoQJmTNnTq644orMmTMnEyZMyKOPPpqrr766Wf/58+dnxowZGTRoUB577LFMnTo1t912W+6999689tprOffcc5v1f/3113PeeeelR48eeeyxxzJt2rRMmzYtjz32WHbeeeeMHTs2q1at2urvAQAAAOWlbEL3cccdl379+m20X6lUyowZM9K5c+dcdNFFzZZddNFF6dy5c2bMmNGs/cYbb0ySTJ48OR07dmxq/8xnPpNjjjkmc+fOzQsvvNDUfuedd+aNN97Ieeedl1133bWpfdddd825556bV199Nffcc89H2k8AAADajrIJ3ZtqyZIlefHFFzNw4MBUVVU1W1ZVVZWBAwfm2WefzbJly5raFyxY0LTsg4YNG5YkWbhwYbP+SVJTU7NJ/QEAANg+tW/pCWxta++/HjBgwHqXDxgwIHPmzMmSJUvSt2/f1NXV5aWXXsr++++fHXbYYb3937/djY2xvv7rU19fn/r6+qbXtbW1SZKGhoY0NDR86LotpXKH0nvf2zX/vq201velHK19L72n5UsN2wZ1LH9q2DaoY/lTw/JXjjXc1Lm2udC9cuXKJEnXrl3Xu7y6urpZv83tv7F11td/fb797W/n0ksvXad97ty52WmnnT503ZbyncObv558aOM2HX/27NnbdLztwbx581p6CmwhNWwb1LH8qWHboI7lTw3LXznVcM2aNZvUr82F7nJx4YUXZvz48U2va2tr07dv39TU1DQF99Zm/0lzkrx3hnvyoY256DftUt9Ysc3G/+2kYdtsrLauoaEh8+bNy9ChQ9OhQ4eWng4fgRq2DepY/tSwbVDH8qeG5a8ca7j2auWNaXOhe+3Z5w2daV77xqztt7n9P7jOzjvvvNH+61NZWZnKysp12jt06NBqf8nq320esOsbK9ZpK1JrfV/KWWv+fWPTqGHboI7lTw3bBnUsf2pY/sqphps6zzb3ILWN3VP9wfuxq6qq0rt37zz33HN59913N9p/Y2Ns7J5yAAAAth9tMnT36dMnixYtSl1dXbNldXV1WbRoUXbbbbf07du3qX3w4MFNyz5ozpz3LqkeNGhQs/7Je/dfb6j/2j4AAABsv9pc6K6oqMgZZ5yR1atXZ/Lkyc2WTZ48OatXr86ZZ57ZrP2ss85K8t7neL/99ttN7ffff38WLFiQmpqaZp8RPmLEiHTt2jXTpk3L8uXLm9qXL1+e6dOnp0ePHjnxxBOL2D0AAADKSNnc0z1jxow8/PDDSZInn3yyqW3tZ2YfddRROeOMM5Ik//iP/5if/OQnmTp1ah5//PEcfPDBeeyxxzJ37twcdthhOf/885tte8iQITnjjDMyY8aMHHzwwTn++OPz0ksvZdasWfnYxz6WadOmNevfvXv3TJ8+PaNGjcrBBx+ckSNHJklmzZqVFStWZNasWenSpUuB7wYAAADloGxC98MPP5xbbrmlWduiRYuaXRK+NnRXVVVl4cKFmTRpUu66667Mnz8/vXv3zgUXXJBLLrkknTp1Wmf7N9xwQw444IB8//vfz7XXXpvOnTvnxBNPzOWXX5499thjnf6nnnpqevTokSlTpuTmm29ORUVFDjnkkEycODHHHXfcVt57AAAAylHZhO6ZM2dm5syZm9y/a9euufrqq3P11VdvUv927dpl3LhxGTdu3CaPMXz48AwfPnyT+wMAALB9aXP3dAMAAEBrIXQDAABAQYRuAAAAKIjQDQAAAAURugEAAKAgQjcAAAAUROgGAACAggjdAAAAUBChGwAAAAoidAMAAEBBhG4AAAAoiNANAAAABRG6AQAAoCBCNwAAABRE6AYAAICCCN0AAABQEKEbAAAACiJ0AwAAQEGEbgAAACiI0A0AAAAFEboBAACgIEI3AAAAFEToBgAAgIII3QAAAFAQoRsAAAAKInQDAABAQYRuAAAAKIjQDQAAAAURugEAAKAgQjcAAAAUROgGAACAggjdAAAAUBChGwAAAAoidAMAAEBBhG4AAAAoiNANAAAABRG6AQAAoCBCNwAAABRE6AYAAICCCN0AAABQEKEbAAAACiJ0AwAAQEGEbgAAACiI0A0AAAAFEboBAACgIEI3AAAAFEToBgAAgIII3QAAAFAQoRsAAAAKInQDAABAQYRuAAAAKIjQDQAAAAURugEAAKAgQjcAAAAUROgGAACAggjdAAAAUBChGwAAAAoidAMAAEBBhG4AAAAoiNANAAAABRG6AQAAoCBCNwAAABRE6AYAAICCCN0AAABQEKEbAAAACiJ0AwAAQEGEbgAAACiI0A0AAAAFEboBAACgIEI3AAAAFEToBgAAgIII3QAAAFAQoRsAAAAKInQDAABAQYRuAAAAKIjQDQAAAAURugEAAKAgQjcAAAAUROgGAACAggjdAAAAUBChGwAAAAoidAMAAEBBhG4AAAAoiNANAAAABRG6AQAAoCBCNwAAABRE6AYAAICCCN0AAABQEKEbAAAACiJ0AwAAQEGEbgAAACiI0A0AAAAFEboBAACgIEI3AAAAFEToBgAAgIII3QAAAFAQoRsAAAAKInQDAABAQYRuAAAAKIjQDQAAAAURugEAAKAgQjcAAAAUpM2G7v79+6eiomK9X8ccc8w6/evr63PZZZdlwIAB2XHHHdOnT5+cddZZeeWVVzY4xg9+8IMcfvjhqaqqSvfu3fO3f/u3eeyxxwrcKwAAAMpJ+5aeQJG6du2a888/f532/v37N3vd2NiYz3/+85kzZ06OOOKInHTSSVmyZElmzJiRBx98ML/61a/Ss2fPZutcfvnlmThxYvr165evfe1rWbVqVX784x/nyCOPzIMPPpiBAwcWuGcAAACUgzYdurt165ZJkyZttN8tt9ySOXPm5JRTTskPfvCDVFRUJEm+973vZezYsZk4cWJuuOGGpv5LlizJpEmTstdee+XXv/51unbtmiQ555xzcsQRR+TMM8/Mb3/727Rr12YvJAAAAGATSIVJbrzxxiTJt7/97abAnSRnn312dt999/zgBz/Im2++2dR+880355133sk///M/NwXuJDnooINyyimn5He/+10efvjhbbcDAAAAtEptOnTX19dn5syZmTJlSqZPn55HHnlknT5vvfVWHnnkkey9997p169fs2UVFRUZOnRo6urq8pvf/KapfcGCBUmSmpqadbY3bNiwJMnChQu34p4AAABQjtr05eUvv/xyxowZ06ztsMMOy49+9KPsscceSZI//vGPaWxszIABA9a7jbXtS5YsydFHH930c+fOndOrV68P7Q8AAMD2rc2G7jFjxuToo4/O/vvvn86dO+eZZ57JVVddldtuuy3HHntsnnzyyXTp0iUrV65MkmaXib9fdXV1kjT1W/vzLrvsssn916e+vj719fVNr2tra5MkDQ0NaWho2MS93LYqdyi9971d8+/bSmt9X8rR2vfSe1q+1LBtUMfyp4ZtgzqWPzUsf+VYw02da5sN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Kr17985zzz2Xd999d6P9aXlrj881a9Y0tX1Y3dVw62tsbMyYMWNyyy235JRTTsnMmTPX+SxZx2Lrtik13BjHYuu09sFZax+k5VgsPx+s4ca0tWNR6GajBg8enCSZO3fuOsvmzJnTrA+t19onmPfv3z9J0qlTpxx++OF5+umns3Tp0mZ9S6VS5s2bl6qqqhx66KHbeqp8wIABA9KnT58sWrSo6Y8ma9XV1WXRokXZbbfd0rdv36b2wYMHNy37oLXH7aBBg4qdOJukrq4uixcvTlVVVdM/MhL/7d2W1oa1W2+9NSNHjsxtt922wYctORZbp02t4YdxLLZeL774YpL//zR6x2L5+WANP0ybPBZb9APLKAsNDQ2l3XffvVRZWVl6/PHHm9rfeOON0l577VXq2LFj6bnnnmux+fH//e53vyvV1dWtt71Xr17rfD7lTTfdVEpSOuWUU0qNjY1N7ddff30pSemss87aJvNm45/xfPHFF5eSlCZMmNCsfcKECaUkpSlTpjRr//nPf15KUho0aFCpvr6+qX327NmlJKWampqtvg/buw+rYW1tbenpp59ep33NmjVNnx07ZsyYZstee+21UteuXUs9evQoLVu2rKl92bJlpR49epR69OhRqq2t3er7sb159913S6eddlopSenkk08uNTQ0fGh/x2Lrszk1dCy2XosXL17vv2Hq6upKw4cPLyUpXX755U3tjsXWZ3NquL0dixWlUqm07SI+5Wr+/PkZNmxYdtxxx3zpS19Kly5dctddd2Xp0qW58sorc8EFF7T0FEkyadKkXHXVVRk0aFD69euXqqqqPPPMM5k9e3YaGhpy4YUXZsqUKU39Gxsb89nPfjZz5szJEUcckcGDB+cPf/hD7r777vTv3z+PPPJIevbs2YJ71LbNmDEjDz/8cJLkySefzGOPPZaBAwdmzz33TJIcddRROeOMM5K891ffgQMH5n/+539SU1OTgw8+OI899ljmzp2bww47LAsXLkynTp2abf/MM8/MjBkzst9+++X444/PSy+9lFmzZqVz58755S9/mb322mvb7nAbtKk1fP7557P77rvnsMMOy7777ptevXrlz3/+cx544IEsX748BxxwQObPn5+dd9652fZvv/32jBo1Kj179szIkSOTJLNmzcqrr76aWbNm5eSTT962O9wGTZo0KZdeemk6d+6c//2///d6P8/5hBNOyEEHHZTEsdgabU4NHYut19p/wxx11FHp379/qqur86c//Sn3339/VqxYkaOPPjpz5sxpOr4ci63P5tRwuzsWWzr1Uz4eeeSR0vDhw0vV1dWlTp06lQ4//PDSj3/845aeFu+zYMGC0ogRI0oDBgwoVVdXl9q3b1/q1atX6fOf/3xpzpw5613nrbfeKk2aNKm0xx57lDp27Fjq1atX6Ywzzii9/PLL23j225+1Z2Y29HXaaac16//GG2+Uzj///FLfvn1LHTp0KH3iE58oXXDBBRv8q+67775buvbaa0v77bdfqbKysrTzzjuXRo4cWfrDH/6wDfZu+7CpNVy5cmXp7//+70uHHXZYqWfPnqX27duXunTpUjr88MNL3/nOd0pr1qzZ4Bj3339/6eijjy5VVVWVOnfuXBo8eHBp3rx522gP276N1TDruXrBsdi6bE4NHYut16OPPlo688wzS/vtt1+pW7dupfbt25d23nnn0pAhQ0o33HDDeq9gcCy2LptTw+3tWHSmGwAAAAriQWoAAABQEKEbAAAACiJ0AwAAQEGEbgAAACiI0A0AAAAFEboBAACgIEI3AAAAFEToBgAAgIII3QAAAFAQoRsAAAAKInQDAEmSUqmUO++8MyeeeGL69euXTp06pXPnztljjz1y1FFHZfz48bnnnntSW1vbbL3Ro0enoqIiFRUV6dOnT9asWbPBMRYsWNDU9/nnn19nef/+/ZuWv/+rc+fO2WeffTJmzJj86le/2tq7DgCFEboBgLzxxhsZMmRIRowYkXvvvTcvvPBC3nnnnVRWVuaFF17IokWLcvXVV+cLX/hC7r777g1u56WXXsq11167xfPZcccd8/GPfzwf//jHs8suu+TNN9/M008/nZkzZ+bII4/MZZddtsVjAMC2IHQDAPnqV7+ahQsXZocddsgFF1yQZ555JvX19VmxYkXefPPN/M///E+mTp2aAw88cKPbmjp1al577bUtms/IkSPz8ssv5+WXX86f//znvPXWW5k/f37233//lEqlXHLJJXnwwQe3aAwA2BaEbgDYzi1ZsiT/+Z//mST51re+lSuvvDIDBgxIu3bv/TOhffv2+eQnP5l//Md/zBNPPJGRI0eudzuHHnpoPv7xj2flypWZMmXKVp1jhw4dcswxx+QnP/lJ2rdvnyT593//9606BgAUQegGgO3cE0880fTz5z//+Y3279Sp03rbq6qqcvHFFydJrrvuuixbtmyrzO/9dt999+y1115JksWLF2/17QPA1iZ0AwBNli9fvkXrn3nmmdlzzz3z1ltv5ZJLLtlKs2quVColSd59991Ctg8AW5PQDQDbucMOOywVFRVJ0nQ/90fVoUOHfOtb30qS3HrrrVv9bPSzzz6bJUuWJHnvrDcAtHZCNwBs5/r3758zzjgjSfLkk09mn332ycEHH5y///u/z0033ZTf/va3TWeXN8WIESNyyCGH5N133803v/nNrTLHhoaGLFiwIJ///OfzzjvvJEnGjBmzVbYNAEVq39ITAABa3r/927+lV69eueqqq1JXV5fHH388jz/+eNPyXXbZJV/5ylcyYcKEfPzjH//QbVVUVOSKK67I0KFD89Of/jT//d//nSOPPHKz5jNr1qz813/9V5L3LidfsWJFs8vJx40blxNOOGGztgkALcGZbgAg7du3z2WXXZY//elPue2223LGGWfkwAMPTMeOHZMkr7zySq6++ursv//++fWvf73R7R133HE57rjjkiQTJkzY7Pm89dZb+fOf/5w///nPeeWVV5oCd2VlZe6+++5ce+21TZfEA0BrJnQDAE26du2aU089NTfeeGOeeOKJrFy5MvPmzcvf/d3fJUleffXVnHTSSXnrrbc2uq0rrrgiFRUVefjhh5s+kmxTnXbaaSmVSimVSnnrrbfy5JNPZsyYMamvr8/XvvY1Ty4HoGwI3QDABu2444457rjj8tOf/jSnnXZakveecL720u8Pc8ghh+Tkk09Oknzzm99MY2PjR5pDZWVl9t9//9x0000ZPXp0XnnllXzxi1/Mm2+++ZG2BwDbktANAGySs846q+nnp59+epPWufzyy9O+ffv89re/zW233bbFc7jqqqvStWvX/P73v88111yzxdsDgKIJ3QDAJuncuXPTz5WVlZu0zp577pkzzzwzSXLxxRenvr5+i+bQvXv3nH/++Uneu3z99ddf36LtAUDRhG4A2M4999xzm/TZ3LfcckvTzwcffPAmb//iiy9OVVVVXnjhhVx33XUfaY7vN27cuHTu3Dm1tbW58sort3h7AFAkoRsAtnOLFy/Ovvvum+OPPz633nprnn/++aZlDQ0NefzxxzNmzJhcddVVSZLDDz88Rx111CZvv1evXvn617+eJJv9QLX1+djHPpavfe1rSZJ//dd/zauvvrrF2wSAogjdALCd69ChQxobGzN79uycdtpp2W233VJZWZmdd945lZWVOfjggzNz5swk753hvueee9Ku3eb9E+Ib3/hGdt5556025wsuuCA77rhjVq9enalTp2617QLA1iZ0A8B2btiwYVmyZEmuvfbanHzyydl3331TWVmZN954IzvttFMGDBiQESNG5Mc//nEeffTR9OnTZ7PHqK6uzj//8z9vtTn36tUrp59+epLkuuuuy8svv7zVtg0AW1NFqVQqtfQkAAAAoC1yphsAAAAKInQDAABAQYRuAAAAKIjQDQAAAAURugEAAKAgQjcAAAAUROgGAACAggjdAAAAUBChGwAAAAoidAMAAEBBhG4AAAAoiNANAAAABRG6AQAAoCBCNwAAABTk/wEQOQ2IKljLHwAAAABJRU5ErkJggg==", "text/plain": [ "<Figure size 1000x700 with 1 Axes>" ] @@ -468,7 +431,7 @@ } ], "source": [ - "df_LH.plot_parameters('SNR','drift_rate_MHz_s')" + "LH_output.histogram_parameters(xfield='SNR')" ] }, { diff --git a/src/processing_JunoN_data.py b/src/processing_JunoN_data.py index a759771..9caf055 100644 --- a/src/processing_JunoN_data.py +++ b/src/processing_JunoN_data.py @@ -8,7 +8,7 @@ import h5py from sburst_detection import process_by_frequency_bands from cleaning_tools import rebin_with_averaging -from read_junon_data import ReadJunonData +from read_JunoN_data import ReadJunonData import logging diff --git a/src/read_pipeline_output.py b/src/read_pipeline_output.py index 2137de5..31fbafc 100644 --- a/src/read_pipeline_output.py +++ b/src/read_pipeline_output.py @@ -88,23 +88,15 @@ class PolarizationParameters : class PipelineOutputReader: def __init__(self, - filename : str, - instrument : str = 'NDA/JunoN' + filename : str, ) -> None: self.data = h5py.File(filename,'r') - if instrument not in ['NenuFAR', 'NDA/JunoN'] : - raise ValueError("Unexpected instrument chosen, available instruments are NenuFAR or NDA/JunoN.") - self.instrument = instrument self.frequencies = np.asarray(self.data['frequencies_MHz']) def read_polarization(self, polarization : str) -> PolarizationParameters : - if (self.instrument == 'NenuFAR') & ((polarization != 'Stokes_I') & (polarization != 'Stokes_V')) : - raise ValueError("Wrong polarization chosen for instrument " + self.instrument + ".Possible polarization are Stokes_I or Stokes_V.") - - elif (self.instrument == 'NDA/JunoN') & ((polarization != 'LH') & (polarization != 'RH')) : - raise ValueError("Wrong polarization chosen for instrument " + self.instrument + ".Possible polarization are LH or RH.") + self._check_polarization(polarization) data_polar = self.data[polarization] parameters_names = ['window_mid_time_jd', 'window_mid_frequency_MHz', 'drift_rate_MHz_s','SNR','window_processing_time_s'] @@ -118,10 +110,42 @@ class PipelineOutputReader: dataframe_parameters = pd.DataFrame(parameters_values,columns=parameters_names) return PolarizationParameters(dataframe_parameters) + + def _check_polarization(self, polarization : str) -> None : + + raise NotImplementedError("The selected instrument is not implemented. Available instruments are NenuFAR and NDA/JunoN.") + +class ReadPipelineOutputNenuFAR(PipelineOutputReader): + def __init__(self, filename: str) -> None: + super().__init__(filename) + self.instrument = "NenuFAR" + self.valid_polarizations = ["Stokes_I","Stokes_V"] -class OutputNenuFAR(PipelineOutputReader): + def _check_polarization(self, polarization: str) -> None: + if polarization not in self.valid_polarizations: + raise ValueError(f"Polarization '{polarization}' is not available for NenuFAR. " + f"Polarization should be one the following : {', '.join(self.valid_polarizations)}.") - pass + +class ReadPipelineOutputNDA(PipelineOutputReader): + + def __init__(self, filename: str) -> None: + super().__init__(filename) + self.instrument = "NDA/JunoN" + self.valid_polarizations = ["LH","RH"] + def _check_polarization(self, polarization: str) -> None: + if polarization not in self.valid_polarizations: + raise ValueError(f"Polarization '{polarization}' is not available for NDA/JunoN. " + f"Polarization should be one of the following : {', '.join(self.valid_polarizations)}.") + + +def get_reader(instrument : str, filename : str) -> PipelineOutputReader : + if instrument == "NenuFAR" : + return ReadPipelineOutputNenuFAR(filename) + elif instrument == "NDA/JunoN": + return ReadPipelineOutputNDA(filename) + else : + raise ValueError(f"Instrument '{instrument}' is not available. Only the following instruments are available : 'NenuFAR', 'NDA/JunoN'.") -- GitLab From 993b682e7932bbe89a208c3ee5f727c3152cdec5 Mon Sep 17 00:00:00 2001 From: Emilie Mauduit <emilie.mauduit@obspm.fr> Date: Thu, 17 Apr 2025 13:56:50 +0200 Subject: [PATCH 3/5] Add licence --- LICENSE | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 LICENSE diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..9fb0e84 --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2025 Observatoire de Paris + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. -- GitLab From 8bc51ed43b051764667cd502ff5fb5e1dade2ac2 Mon Sep 17 00:00:00 2001 From: EmilieMauduit <103190830+EmilieMauduit@users.noreply.github.com> Date: Thu, 17 Apr 2025 14:09:40 +0200 Subject: [PATCH 4/5] Edit readme --- README.md | 17 +++++++---------- src/read_pipeline_output.py | 5 +++++ 2 files changed, 12 insertions(+), 10 deletions(-) diff --git a/README.md b/README.md index d8c371f..bbfe85f 100644 --- a/README.md +++ b/README.md @@ -1,14 +1,5 @@ # A2_S-Bursts -## How to download - -Open your terminal. Go to the folder in which you want to use this algorithm. Copy-paste the https link in the 'Clone' button. - -``` -cd existing_repo -git clone https://gitlab.bsc.es/extract/extract-use-cases/taska/use-case-a/a2_s-bursts.git -``` - ## About the TASKA - A2 use case This project has been been developed in the frame of the [EXTRACT](https://extract-project.eu/) project. It aims at developing a distributed data-mining platform for EXTReme dAta Across the Compute conTinuum. A key use case, Transient Astrophysics with a Square Kilometer Array pathfinder (TASKA), takes advantage of EXTRACT technologies to handle the massive data streams produced by NenuFAR, one of the SKA pathfinders. The use case A2 aims at detecting the presence of fast drifting radio bursts in Jupiter's decametric emissions in real-time. The goals of this project are : @@ -18,7 +9,13 @@ This project has been been developed in the frame of the [EXTRACT](https://extra ## Installation -For the moment this is not an installable software. When it will be, instructions will be given here. +Open your terminal. Go to the folder in which you want to use this algorithm. Copy-paste the https link in the 'Clone' button. + +``` +cd existing_repo +git clone https://gitlab.bsc.es/extract/extract-use-cases/taska/use-case-a/a2_s-bursts.git +``` + ## Usage diff --git a/src/read_pipeline_output.py b/src/read_pipeline_output.py index 31fbafc..2d4c957 100644 --- a/src/read_pipeline_output.py +++ b/src/read_pipeline_output.py @@ -17,6 +17,11 @@ class PolarizationParameters : new_dataframe = pd.concat([self.dataframe_parameters,other.dataframe_parameters]) return PolarizationParameters(new_dataframe) + def selection_request(self, condition : str) : + pass + + ###### Display methods ###### + def plot_parameters(self, xfield : str, yfield : str, -- GitLab From e9d67d8fc45c64dc1916a55bf2ad40ab23e8b7e9 Mon Sep 17 00:00:00 2001 From: EmilieMauduit <103190830+EmilieMauduit@users.noreply.github.com> Date: Thu, 17 Apr 2025 18:03:47 +0200 Subject: [PATCH 5/5] Updated the Readme.md, minor modification to processing_JunoN_data.py to launch process with uv. --- .gitignore | 5 + README.md | 68 ++- pyproject.toml | 4 +- src/processing_JunoN_data.py | 245 ++++++----- src/read_junon_data.py | 2 +- src/read_pipeline_output.py | 2 +- uv.lock | 803 +++++++++++++++++++++++++++++++++++ 7 files changed, 1014 insertions(+), 115 deletions(-) diff --git a/.gitignore b/.gitignore index fbfe0df..a1cd28d 100644 --- a/.gitignore +++ b/.gitignore @@ -11,3 +11,8 @@ runtime_stats.csv # Caches __pycache__/ src/__pycache__/ + +#Dossier +.pytest_cache +.venv +.vscode diff --git a/README.md b/README.md index bbfe85f..b33f38f 100644 --- a/README.md +++ b/README.md @@ -3,7 +3,7 @@ ## About the TASKA - A2 use case This project has been been developed in the frame of the [EXTRACT](https://extract-project.eu/) project. It aims at developing a distributed data-mining platform for EXTReme dAta Across the Compute conTinuum. A key use case, Transient Astrophysics with a Square Kilometer Array pathfinder (TASKA), takes advantage of EXTRACT technologies to handle the massive data streams produced by NenuFAR, one of the SKA pathfinders. The use case A2 aims at detecting the presence of fast drifting radio bursts in Jupiter's decametric emissions in real-time. The goals of this project are : - - migrating from IDL to Python the algorithm developed by [Mauduit et al, 2023](https://doi.org/10.1038/s41467-023-41617-8) + - migrating from IDL to Python the algorithm developed by EmilieMauduit. (2023). EmilieMauduit/fine_structures_detection: First release (v1.0). Zenodo. https://doi.org/10.5281/zenodo.8098758 and published in [Mauduit et al, 2023](https://doi.org/10.1038/s41467-023-41617-8) - embedding this algorithm whithin the [MurMuRe](https://gitlab.bsc.es/extract/extract-use-cases/taska/use-case-a/modular_multicast_receiver) pipeline in order to use it for real-time detections during [NenuFAR](https://nenufar.obs-nancay.fr/) observations of Jupiter. - developing and training a convolutional neural network using a Variational AutoEncoder for anomaly detections, to replace the current algorithm and enhance computing time. @@ -11,15 +11,75 @@ This project has been been developed in the frame of the [EXTRACT](https://extra Open your terminal. Go to the folder in which you want to use this algorithm. Copy-paste the https link in the 'Clone' button. -``` +```bash cd existing_repo git clone https://gitlab.bsc.es/extract/extract-use-cases/taska/use-case-a/a2_s-bursts.git ``` - ## Usage -Use examples liberally, and show the expected output if you can. It's helpful to have inline the smallest example of usage that you can demonstrate, while providing links to more sophisticated examples if they are too long to reasonably include in the README. +- ### Open and read data of observations from NDA/JunoN. + +```python +from src.read_JunoN_data import ReadJunoNData + +my_observation = ReadJunoNData("myobservation.dat") +my_observation.header() +``` + +Observation files are too big to be loaded all at once. Thus it has to be read portion by portion. The method load_data_cube() allows to load a given number of spectra at the same time, the index `n` of the first spectra can be given to load `number_of_spectra` from the index `n*number_of_spectra`. The loaded spectra are stored in the `data_sample` attribute, and are replaced everytime the method is called. + +```python +#load only an array of 425 spectra, from the 5*425 +data_cube = my_observation.load_data_cube(number_of_spectra = 425, cube_index = 5) +``` + +According to the processing method presented in [Mauduit et al, 2023](https://doi.org/10.1038/s41467-023-41617-8), the observation will be read slice by slice in a certain way. Due to the various configurations of different observations, a method to compute the best slicing paremeters is available. + +```python +slicing_parameters = observation_data.def_slicing_parameters() +``` + +You can display the current `data_sample` in a plot by calling the `plot_dynamical_spectrum()`method. You can choose the canal to plot (0 for LH polarization, 3 for RH polarization). If `figname`is specified, the plot will be saved at the given path. + +```python +my_observation.plot_dynamical_spectrum(slicing_parameters, canal = 0, figname='my_folder/plot_spectra.jpeg') +``` + +- ### Process any prepared data_sample. + +The detection algorithm is written so that it can take any square-shaped array as an input and process it. How this array is obtained from a global observation, depend on the data used and what time-frequency resolution is necessary. We recommand choosing a resolution that makes a bursts with a drift of $-15\ MHz.s^{-1}$ appear with an angle of $\sim 45\degree$ in the time-frequency plane. This way the accuracy of the method is maximized. + +```python +from src.sburst_detection import process_data_chunk + +data_clean, data_fft, data_theta, data_radon,fit_parameters, slope, snr = process_data_chunk(data) +``` + +In the case of JunoN data, the file `processing_JunoN_data.py` is ready to use for automatic processsing of a given list of observations. It shows how the data is sliced and processed along the way, writing the results of the processing in a `.h5` file. To run the pipeline go to the terminal in the repository and launch : + +```bash +uv run src/processing_JunoN_data.py --observation_folder /path_to_observations/ --output_folder /path/my_outputs/ +``` + +- ### Reading the output file + +Once the pipeline is successfully applied to an observation, an output file containing the results of the processing is written as an `.h5` (HDF5 format). It can be read and navigated in with the following : + +```python +from read_pipeline_output import output_reader + +reader = output_reader(instrument = "NDA/JunoN", filename='my_output.h5') +LH_results = reader.read_polarization(polarization = 'LH') + +#See the different parameters stored + +LH_results.keys + +#Plot an histogram of SNR values + +LH_results.histogram_parameters(xfield='SNR') +``` ## Support diff --git a/pyproject.toml b/pyproject.toml index 94c7ffd..b5f60c0 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -7,17 +7,19 @@ requires-python = ">=3.8" dependencies = [ "astropy>=5.2.2", "h5py>=3.11.0", + "matplotlib>=3.7.5", "numpy>=1.24.4", "pytest>=8.3.5", "scikit-image>=0.21.0", "scipy>=1.10.1", + "tqdm>=4.67.1", ] authors = [ {name = "Emilie Mauduit", email = "emilie.mauduit@obspm.fr"}, {name = "Baptiste Cecconi", email = "baptiste.cecconi@obspm.fr"}, {name = "Cedric Viou", email = "cedric.viou@obs-nancay.fr"}, {name = "Fadi Nammour", email = "fnammour@ekinox.io"} , - {name = 'Julien Girard", email = "julien.girard@obspm.fr"} + {name = "Julien Girard", email = "julien.girard@obspm.fr"} ] maintainers = [ {name = "Emilie Mauduit", email = "emilie.mauduit@obspm.fr"} diff --git a/src/processing_JunoN_data.py b/src/processing_JunoN_data.py index 9caf055..67678ce 100644 --- a/src/processing_JunoN_data.py +++ b/src/processing_JunoN_data.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- -from pylab import * import os from tqdm import tqdm +import argparse import numpy as np import h5py @@ -15,113 +15,142 @@ import logging log = logging.getLogger(__name__) logging.basicConfig(level=logging.INFO) -path = "/databf/nda/Juno/2021/04/" # chemin du répertoire des observations -path_hdf5 = "/data/emauduit/EXTRACT/test_nda/" # chemin pour enregistrer les détections -list = os.listdir(path) -files_list = [f for f in list if os.path.isfile(os.path.join(path, f))] -obs_list = [f for f in files_list if "extract2.dat" in f] -for obs_name in obs_list: - filename = path + obs_name - hdf5_file_path = path_hdf5 + obs_name.split(".")[0] + ".h5" - - observation_data = ReadJunonData(filename) - slicing_parameters = observation_data.def_slicing_parameters() - - with h5py.File(hdf5_file_path, "w") as hdf5_file: - - hdf5_file.create_dataset( - "frequencies_MHz", - data=np.linspace( - observation_data.minimum_frequency( - mask=slicing_parameters["frequencies_indexes"] - ), - observation_data.maximum_frequency( - mask=slicing_parameters["frequencies_indexes"] - ), - slicing_parameters["final_size_frequencies"], - ), - ) - - group_lh = hdf5_file.create_group("LH") - group_rh = hdf5_file.create_group("RH") - - with tqdm( - total=slicing_parameters["number_of_cubes"], - desc="Reading data cubes", - unit="cube", - ) as pbar: - for cube_index in range(0, slicing_parameters["number_of_cubes"]): - - observation_data.load_data_cube( - number_spectra=slicing_parameters["number_of_pixel_in_band"], - cube_index=cube_index, - ) - - LH = rebin_with_averaging( - observation_data.select_canal_and_frequency_range( - frequency_indexes=slicing_parameters["frequencies_indexes"], - number_frequency_channel_remove=slicing_parameters[ - "number_of_frequency_channel_to_remove" - ], - canal=0, - ), - ( - slicing_parameters["number_of_pixel_in_band"], - slicing_parameters["final_size_frequencies"], +def parse_arguments(): + parser = argparse.ArgumentParser( + description="Read and process data from a UDP circular buffer shared memory." + ) + parser.add_argument( + '-obspath', '--observation_folder', + type=str, + default="/databf/nda/Juno/2021/04/", + help='Path of the folder containing observations to process. (Default :"/databf/nda/Juno/2021/04/")' + ) + parser.add_argument( + "-outpath", "--output_folder", + type=str, + default = "", + help='Path of the folder where to store the output files. Default is current folder', + ) + + return parser.parse_args() + +def main(): + args = parse_arguments() + + path = args.observation_folder # chemin du répertoire des observations + path_hdf5 = args.output_folder # chemin pour enregistrer les détections + + list = os.listdir(path) + files_list = [f for f in list if os.path.isfile(os.path.join(path, f))] + obs_list = [f for f in files_list if "extract2.dat" in f] + + for obs_name in obs_list: + + log.info('Processing : {}'.format(obs_name)) + filename = path + obs_name + hdf5_file_path = path_hdf5 + obs_name.split(".")[0] + ".h5" + + observation_data = ReadJunonData(filename) + slicing_parameters = observation_data.def_slicing_parameters() + + with h5py.File(hdf5_file_path, "w") as hdf5_file: + + hdf5_file.create_dataset( + "frequencies_MHz", + data=np.linspace( + observation_data.minimum_frequency( + mask=slicing_parameters["frequencies_indexes"] ), - ) - - RH = rebin_with_averaging( - observation_data.select_canal_and_frequency_range( - frequency_indexes=slicing_parameters["frequencies_indexes"], - number_frequency_channel_remove=slicing_parameters[ - "number_of_frequency_channel_to_remove" - ], - canal=3, + observation_data.maximum_frequency( + mask=slicing_parameters["frequencies_indexes"] ), - ( - slicing_parameters["number_of_pixel_in_band"], - slicing_parameters["final_size_frequencies"], - ), - ) - - cube_lh = group_lh.create_group( - f"Cube_time_{observation_data.time_sample[0].value}" - ) - cube_lh.create_dataset( - "times_jd", data=observation_data.time_sample.value - ) - - cube_rh = group_rh.create_group( - f"Cube_time_{observation_data.time_sample[0].value}" - ) - cube_rh.create_dataset( - "times_jd", data=observation_data.time_sample.value - ) - - process_by_frequency_bands( - data=LH, - cube_polarization=cube_lh, - frequencies=observation_data.frequencies[ - slicing_parameters["frequencies_indexes"] - ].value, - times=observation_data.time_sample, - number_of_frequency_bands=slicing_parameters["number_of_frequency_bands"], - number_of_pixel=slicing_parameters["number_of_pixel_in_band"], - number_of_pixel_overlap=slicing_parameters["frequency_channel_overlap"], - ) - - process_by_frequency_bands( - data=RH, - cube_polarization=cube_rh, - frequencies=observation_data.frequencies[ - slicing_parameters["frequencies_indexes"] - ].value, - times=observation_data.time_sample, - number_of_frequency_bands=slicing_parameters["number_of_frequency_bands"], - number_of_pixel=slicing_parameters["number_of_pixel_in_band"], - number_of_pixel_overlap=slicing_parameters["frequency_channel_overlap"], - ) - - pbar.update(1) + slicing_parameters["final_size_frequencies"], + ), + ) + + group_lh = hdf5_file.create_group("LH") + group_rh = hdf5_file.create_group("RH") + + with tqdm( + total=slicing_parameters["number_of_cubes"], + desc="Reading data cubes", + unit="cube", + ) as pbar: + for cube_index in range(0, slicing_parameters["number_of_cubes"]): + + observation_data.load_data_cube( + number_spectra=slicing_parameters["number_of_pixel_in_band"], + cube_index=cube_index, + ) + + LH = rebin_with_averaging( + observation_data.select_canal_and_frequency_range( + frequency_indexes=slicing_parameters["frequencies_indexes"], + number_frequency_channel_remove=slicing_parameters[ + "number_of_frequency_channel_to_remove" + ], + canal=0, + ), + ( + slicing_parameters["number_of_pixel_in_band"], + slicing_parameters["final_size_frequencies"], + ), + ) + + RH = rebin_with_averaging( + observation_data.select_canal_and_frequency_range( + frequency_indexes=slicing_parameters["frequencies_indexes"], + number_frequency_channel_remove=slicing_parameters[ + "number_of_frequency_channel_to_remove" + ], + canal=3, + ), + ( + slicing_parameters["number_of_pixel_in_band"], + slicing_parameters["final_size_frequencies"], + ), + ) + + cube_lh = group_lh.create_group( + f"Cube_time_{observation_data.time_sample[0].value}" + ) + cube_lh.create_dataset( + "times_jd", data=observation_data.time_sample.value + ) + + cube_rh = group_rh.create_group( + f"Cube_time_{observation_data.time_sample[0].value}" + ) + cube_rh.create_dataset( + "times_jd", data=observation_data.time_sample.value + ) + + process_by_frequency_bands( + data=LH, + cube_polarization=cube_lh, + frequencies=observation_data.frequencies[ + slicing_parameters["frequencies_indexes"] + ].value, + times=observation_data.time_sample, + number_of_frequency_bands=slicing_parameters["number_of_frequency_bands"], + number_of_pixel=slicing_parameters["number_of_pixel_in_band"], + number_of_pixel_overlap=slicing_parameters["frequency_channel_overlap"], + ) + + process_by_frequency_bands( + data=RH, + cube_polarization=cube_rh, + frequencies=observation_data.frequencies[ + slicing_parameters["frequencies_indexes"] + ].value, + times=observation_data.time_sample, + number_of_frequency_bands=slicing_parameters["number_of_frequency_bands"], + number_of_pixel=slicing_parameters["number_of_pixel_in_band"], + number_of_pixel_overlap=slicing_parameters["frequency_channel_overlap"], + ) + + pbar.update(1) + +if __name__ == "__main__": + main() diff --git a/src/read_junon_data.py b/src/read_junon_data.py index ea4f9d3..05b0312 100644 --- a/src/read_junon_data.py +++ b/src/read_junon_data.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -from pylab import * +#from pylab import * import os import logging diff --git a/src/read_pipeline_output.py b/src/read_pipeline_output.py index 2d4c957..cfa83f9 100644 --- a/src/read_pipeline_output.py +++ b/src/read_pipeline_output.py @@ -146,7 +146,7 @@ class ReadPipelineOutputNDA(PipelineOutputReader): f"Polarization should be one of the following : {', '.join(self.valid_polarizations)}.") -def get_reader(instrument : str, filename : str) -> PipelineOutputReader : +def output_reader(instrument : str, filename : str) -> PipelineOutputReader : if instrument == "NenuFAR" : return ReadPipelineOutputNenuFAR(filename) diff --git a/uv.lock b/uv.lock index 173a188..54940db 100644 --- a/uv.lock +++ b/uv.lock @@ -19,6 +19,9 @@ dependencies = [ { name = "astropy", version = "7.0.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, { name = "h5py", version = "3.11.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.9'" }, { name = "h5py", version = "3.13.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.9'" }, + { name = "matplotlib", version = "3.7.5", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.9'" }, + { name = "matplotlib", version = "3.9.4", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version == '3.9.*'" }, + { name = "matplotlib", version = "3.10.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, { name = "numpy", version = "1.24.4", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, { name = "numpy", version = "2.2.4", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, { name = "pytest" }, @@ -28,16 +31,19 @@ dependencies = [ { name = "scipy", version = "1.10.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.9'" }, { name = "scipy", version = "1.13.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version == '3.9.*'" }, { name = "scipy", version = "1.15.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, + { name = "tqdm" }, ] [package.metadata] requires-dist = [ { name = "astropy", specifier = ">=5.2.2" }, { name = "h5py", specifier = ">=3.11.0" }, + { name = "matplotlib", specifier = ">=3.7.5" }, { name = "numpy", specifier = ">=1.24.4" }, { name = "pytest", specifier = ">=8.3.5" }, { name = "scikit-image", specifier = ">=0.21.0" }, { name = "scipy", specifier = ">=1.10.1" }, + { name = "tqdm", specifier = ">=4.67.1" }, ] [[package]] @@ -236,6 +242,229 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6", size = 25335 }, ] +[[package]] +name = "contourpy" +version = "1.1.1" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version < '3.9'", +] +dependencies = [ + { name = "numpy", version = "1.24.4", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.9'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/b1/7d/087ee4295e7580d3f7eb8a8a4e0ec8c7847e60f34135248ccf831cf5bbfc/contourpy-1.1.1.tar.gz", hash = "sha256:96ba37c2e24b7212a77da85004c38e7c4d155d3e72a45eeaf22c1f03f607e8ab", size = 13433167 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/fb/7f/c44a51a83a093bf5c84e07dd1e3cfe9f68c47b6499bd05a9de0c6dbdc2bc/contourpy-1.1.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:46e24f5412c948d81736509377e255f6040e94216bf1a9b5ea1eaa9d29f6ec1b", size = 247207 }, + { url = "https://files.pythonhosted.org/packages/a9/65/544d66da0716b20084874297ff7596704e435cf011512f8e576638e83db2/contourpy-1.1.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:0e48694d6a9c5a26ee85b10130c77a011a4fedf50a7279fa0bdaf44bafb4299d", size = 232428 }, + { url = "https://files.pythonhosted.org/packages/5b/e6/697085cc34a294bd399548fd99562537a75408f113e3a815807e206246f0/contourpy-1.1.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a66045af6cf00e19d02191ab578a50cb93b2028c3eefed999793698e9ea768ae", size = 285304 }, + { url = "https://files.pythonhosted.org/packages/69/4b/52d0d2e85c59f00f6ddbd6fea819f267008c58ee7708da96d112a293e91c/contourpy-1.1.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4ebf42695f75ee1a952f98ce9775c873e4971732a87334b099dde90b6af6a916", size = 322655 }, + { url = "https://files.pythonhosted.org/packages/82/fc/3decc656a547a6d5d5b4249f81c72668a1f3259a62b2def2504120d38746/contourpy-1.1.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f6aec19457617ef468ff091669cca01fa7ea557b12b59a7908b9474bb9674cf0", size = 296430 }, + { url = "https://files.pythonhosted.org/packages/f1/6b/e4b0f8708f22dd7c321f87eadbb98708975e115ac6582eb46d1f32197ce6/contourpy-1.1.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:462c59914dc6d81e0b11f37e560b8a7c2dbab6aca4f38be31519d442d6cde1a1", size = 301672 }, + { url = "https://files.pythonhosted.org/packages/c3/87/201410522a756e605069078833d806147cad8532fdc164a96689d05c5afc/contourpy-1.1.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:6d0a8efc258659edc5299f9ef32d8d81de8b53b45d67bf4bfa3067f31366764d", size = 820145 }, + { url = "https://files.pythonhosted.org/packages/b4/d9/42680a17d43edda04ab2b3f11125cf97b61bce5d3b52721a42960bf748bd/contourpy-1.1.1-cp310-cp310-win32.whl", hash = "sha256:d6ab42f223e58b7dac1bb0af32194a7b9311065583cc75ff59dcf301afd8a431", size = 399542 }, + { url = "https://files.pythonhosted.org/packages/55/14/0dc1884e3c04f9b073a47283f5d424926644250891db392a07c56f05e5c5/contourpy-1.1.1-cp310-cp310-win_amd64.whl", hash = "sha256:549174b0713d49871c6dee90a4b499d3f12f5e5f69641cd23c50a4542e2ca1eb", size = 477974 }, + { url = "https://files.pythonhosted.org/packages/8b/4f/be28a39cd5e988b8d3c2cc642c2c7ffeeb28fe80a86df71b6d1e473c5038/contourpy-1.1.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:407d864db716a067cc696d61fa1ef6637fedf03606e8417fe2aeed20a061e6b2", size = 248613 }, + { url = "https://files.pythonhosted.org/packages/2c/8e/656f8e7cd316aa68d9824744773e90dbd71f847429d10c82001e927480a2/contourpy-1.1.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:dfe80c017973e6a4c367e037cb31601044dd55e6bfacd57370674867d15a899b", size = 233603 }, + { url = "https://files.pythonhosted.org/packages/60/2a/4d4bd4541212ab98f3411f21bf58b0b246f333ae996e9f57e1acf12bcc45/contourpy-1.1.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e30aaf2b8a2bac57eb7e1650df1b3a4130e8d0c66fc2f861039d507a11760e1b", size = 287037 }, + { url = "https://files.pythonhosted.org/packages/24/67/8abf919443381585a4eee74069e311c736350549dae02d3d014fef93d50a/contourpy-1.1.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3de23ca4f381c3770dee6d10ead6fff524d540c0f662e763ad1530bde5112532", size = 323274 }, + { url = "https://files.pythonhosted.org/packages/2a/e5/6da11329dd35a2f2e404a95e5374b5702de6ac52e776e8b87dd6ea4b29d0/contourpy-1.1.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:566f0e41df06dfef2431defcfaa155f0acfa1ca4acbf8fd80895b1e7e2ada40e", size = 297801 }, + { url = "https://files.pythonhosted.org/packages/b7/f6/78f60fa0b6ae64971178e2542e8b3ad3ba5f4f379b918ab7b18038a3f897/contourpy-1.1.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b04c2f0adaf255bf756cf08ebef1be132d3c7a06fe6f9877d55640c5e60c72c5", size = 302821 }, + { url = "https://files.pythonhosted.org/packages/da/25/6062395a1c6a06f46a577da821318886b8b939453a098b9cd61671bb497b/contourpy-1.1.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:d0c188ae66b772d9d61d43c6030500344c13e3f73a00d1dc241da896f379bb62", size = 820121 }, + { url = "https://files.pythonhosted.org/packages/41/5e/64e78b1e8682cbab10c13fc1a2c070d30acedb805ab2f42afbd3d88f7225/contourpy-1.1.1-cp311-cp311-win32.whl", hash = "sha256:0683e1ae20dc038075d92e0e0148f09ffcefab120e57f6b4c9c0f477ec171f33", size = 401590 }, + { url = "https://files.pythonhosted.org/packages/e5/76/94bc17eb868f8c7397f8fdfdeae7661c1b9a35f3a7219da308596e8c252a/contourpy-1.1.1-cp311-cp311-win_amd64.whl", hash = "sha256:8636cd2fc5da0fb102a2504fa2c4bea3cbc149533b345d72cdf0e7a924decc45", size = 480534 }, + { url = "https://files.pythonhosted.org/packages/94/0f/07a5e26fec7176658f6aecffc615900ff1d303baa2b67bc37fd98ce67c87/contourpy-1.1.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:560f1d68a33e89c62da5da4077ba98137a5e4d3a271b29f2f195d0fba2adcb6a", size = 249799 }, + { url = "https://files.pythonhosted.org/packages/32/0b/d7baca3f60d3b3a77c9ba1307c7792befd3c1c775a26c649dca1bfa9b6ba/contourpy-1.1.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:24216552104ae8f3b34120ef84825400b16eb6133af2e27a190fdc13529f023e", size = 232739 }, + { url = "https://files.pythonhosted.org/packages/6d/62/a385b4d4b5718e3a933de5791528f45f1f5b364d3c79172ad0309c832041/contourpy-1.1.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:56de98a2fb23025882a18b60c7f0ea2d2d70bbbcfcf878f9067234b1c4818442", size = 282171 }, + { url = "https://files.pythonhosted.org/packages/91/21/8c6819747fea53557f3963ca936035b3e8bed87d591f5278ad62516a059d/contourpy-1.1.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:07d6f11dfaf80a84c97f1a5ba50d129d9303c5b4206f776e94037332e298dda8", size = 321182 }, + { url = "https://files.pythonhosted.org/packages/22/29/d75da9002f9df09c755b12cf0357eb91b081c858e604f4e92b4b8bfc3c15/contourpy-1.1.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f1eaac5257a8f8a047248d60e8f9315c6cff58f7803971170d952555ef6344a7", size = 295869 }, + { url = "https://files.pythonhosted.org/packages/a7/47/4e7e66159f881c131e3b97d1cc5c0ea72be62bdd292c7f63fd13937d07f4/contourpy-1.1.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:19557fa407e70f20bfaba7d55b4d97b14f9480856c4fb65812e8a05fe1c6f9bf", size = 298756 }, + { url = "https://files.pythonhosted.org/packages/d3/bb/bffc99bc3172942b5eda8027ca0cb80ddd336fcdd634d68adce957d37231/contourpy-1.1.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:081f3c0880712e40effc5f4c3b08feca6d064cb8cfbb372ca548105b86fd6c3d", size = 818441 }, + { url = "https://files.pythonhosted.org/packages/da/1b/904baf0aaaf6c6e2247801dcd1ff0d7bf84352839927d356b28ae804cbb0/contourpy-1.1.1-cp312-cp312-win32.whl", hash = "sha256:059c3d2a94b930f4dafe8105bcdc1b21de99b30b51b5bce74c753686de858cb6", size = 410294 }, + { url = "https://files.pythonhosted.org/packages/75/d4/c3b7a9a0d1f99b528e5a46266b0b9f13aad5a0dd1156d071418df314c427/contourpy-1.1.1-cp312-cp312-win_amd64.whl", hash = "sha256:f44d78b61740e4e8c71db1cf1fd56d9050a4747681c59ec1094750a658ceb970", size = 486678 }, + { url = "https://files.pythonhosted.org/packages/02/7e/ffaba1bf3719088be3ad6983a5e85e1fc9edccd7b406b98e433436ecef74/contourpy-1.1.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:70e5a10f8093d228bb2b552beeb318b8928b8a94763ef03b858ef3612b29395d", size = 247023 }, + { url = "https://files.pythonhosted.org/packages/a6/82/29f5ff4ae074c3230e266bc9efef449ebde43721a727b989dd8ef8f97d73/contourpy-1.1.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:8394e652925a18ef0091115e3cc191fef350ab6dc3cc417f06da66bf98071ae9", size = 232380 }, + { url = "https://files.pythonhosted.org/packages/9b/cb/08f884c4c2efd433a38876b1b8069bfecef3f2d21ff0ce635d455962f70f/contourpy-1.1.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c5bd5680f844c3ff0008523a71949a3ff5e4953eb7701b28760805bc9bcff217", size = 285830 }, + { url = "https://files.pythonhosted.org/packages/8e/57/cd4d4c99d999a25e9d518f628b4793e64b1ecb8ad3147f8469d8d4a80678/contourpy-1.1.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:66544f853bfa85c0d07a68f6c648b2ec81dafd30f272565c37ab47a33b220684", size = 322038 }, + { url = "https://files.pythonhosted.org/packages/32/b6/c57ed305a6f86731107fc183e97c7e6a6005d145f5c5228a44718082ad12/contourpy-1.1.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e0c02b75acfea5cab07585d25069207e478d12309557f90a61b5a3b4f77f46ce", size = 295797 }, + { url = "https://files.pythonhosted.org/packages/8e/71/7f20855592cc929bc206810432b991ec4c702dc26b0567b132e52c85536f/contourpy-1.1.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:41339b24471c58dc1499e56783fedc1afa4bb018bcd035cfb0ee2ad2a7501ef8", size = 301124 }, + { url = "https://files.pythonhosted.org/packages/86/6d/52c2fc80f433e7cdc8624d82e1422ad83ad461463cf16a1953bbc7d10eb1/contourpy-1.1.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:f29fb0b3f1217dfe9362ec55440d0743fe868497359f2cf93293f4b2701b8251", size = 819787 }, + { url = "https://files.pythonhosted.org/packages/d0/b0/f8d4548e89f929d6c5ca329df9afad6190af60079ec77d8c31eb48cf6f82/contourpy-1.1.1-cp38-cp38-win32.whl", hash = "sha256:f9dc7f933975367251c1b34da882c4f0e0b2e24bb35dc906d2f598a40b72bfc7", size = 400031 }, + { url = "https://files.pythonhosted.org/packages/96/1b/b05cd42c8d21767a0488b883b38658fb9a45f86c293b7b42521a8113dc5d/contourpy-1.1.1-cp38-cp38-win_amd64.whl", hash = "sha256:498e53573e8b94b1caeb9e62d7c2d053c263ebb6aa259c81050766beb50ff8d9", size = 477949 }, + { url = "https://files.pythonhosted.org/packages/16/d9/8a15ff67fc27c65939e454512955e1b240ec75cd201d82e115b3b63ef76d/contourpy-1.1.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:ba42e3810999a0ddd0439e6e5dbf6d034055cdc72b7c5c839f37a7c274cb4eba", size = 247396 }, + { url = "https://files.pythonhosted.org/packages/09/fe/086e6847ee53da10ddf0b6c5e5f877ab43e68e355d2f4c85f67561ee8a57/contourpy-1.1.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:6c06e4c6e234fcc65435223c7b2a90f286b7f1b2733058bdf1345d218cc59e34", size = 232598 }, + { url = "https://files.pythonhosted.org/packages/a3/9c/662925239e1185c6cf1da8c334e4c61bddcfa8e528f4b51083b613003170/contourpy-1.1.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ca6fab080484e419528e98624fb5c4282148b847e3602dc8dbe0cb0669469887", size = 286436 }, + { url = "https://files.pythonhosted.org/packages/d3/7e/417cdf65da7140981079eda6a81ecd593ae0239bf8c738f2e2b3f6df8920/contourpy-1.1.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:93df44ab351119d14cd1e6b52a5063d3336f0754b72736cc63db59307dabb718", size = 322629 }, + { url = "https://files.pythonhosted.org/packages/a8/22/ffd88aef74cc045698c5e5c400e8b7cd62311199c109245ac7827290df2c/contourpy-1.1.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:eafbef886566dc1047d7b3d4b14db0d5b7deb99638d8e1be4e23a7c7ac59ff0f", size = 297117 }, + { url = "https://files.pythonhosted.org/packages/2b/c0/24c34c41a180f875419b536125799c61e2330b997d77a5a818a3bc3e08cd/contourpy-1.1.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:efe0fab26d598e1ec07d72cf03eaeeba8e42b4ecf6b9ccb5a356fde60ff08b85", size = 301855 }, + { url = "https://files.pythonhosted.org/packages/bf/ec/f9877f6378a580cd683bd76c8a781dcd972e82965e0da951a739d3364677/contourpy-1.1.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:f08e469821a5e4751c97fcd34bcb586bc243c39c2e39321822060ba902eac49e", size = 820597 }, + { url = "https://files.pythonhosted.org/packages/e1/3a/c41f4bc7122d3a06388acae1bed6f50a665c1031863ca42bd701094dcb1f/contourpy-1.1.1-cp39-cp39-win32.whl", hash = "sha256:bfc8a5e9238232a45ebc5cb3bfee71f1167064c8d382cadd6076f0d51cff1da0", size = 400031 }, + { url = "https://files.pythonhosted.org/packages/87/2b/9b49451f7412cc1a79198e94a771a4e52d65c479aae610b1161c0290ef2c/contourpy-1.1.1-cp39-cp39-win_amd64.whl", hash = "sha256:c84fdf3da00c2827d634de4fcf17e3e067490c4aea82833625c4c8e6cdea0887", size = 435965 }, + { url = "https://files.pythonhosted.org/packages/e6/3c/fc36884b6793e2066a6ff25c86e21b8bd62553456b07e964c260bcf22711/contourpy-1.1.1-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:229a25f68046c5cf8067d6d6351c8b99e40da11b04d8416bf8d2b1d75922521e", size = 246493 }, + { url = "https://files.pythonhosted.org/packages/3d/85/f4c5b09ce79828ed4553a8ae2ebdf937794f57b45848b1f5c95d9744ecc2/contourpy-1.1.1-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a10dab5ea1bd4401c9483450b5b0ba5416be799bbd50fc7a6cc5e2a15e03e8a3", size = 289240 }, + { url = "https://files.pythonhosted.org/packages/18/d3/9d7c0a372baf5130c1417a4b8275079d5379c11355436cb9fc78af7d7559/contourpy-1.1.1-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:4f9147051cb8fdb29a51dc2482d792b3b23e50f8f57e3720ca2e3d438b7adf23", size = 476043 }, + { url = "https://files.pythonhosted.org/packages/e7/12/643242c3d9b031ca19f9a440f63e568dd883a04711056ca5d607f9bda888/contourpy-1.1.1-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:a75cc163a5f4531a256f2c523bd80db509a49fc23721b36dd1ef2f60ff41c3cb", size = 246247 }, + { url = "https://files.pythonhosted.org/packages/e1/37/95716fe235bf441422059e4afcd4b9b7c5821851c2aee992a06d1e9f831a/contourpy-1.1.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3b53d5769aa1f2d4ea407c65f2d1d08002952fac1d9e9d307aa2e1023554a163", size = 289029 }, + { url = "https://files.pythonhosted.org/packages/e5/fd/14852c4a688031e0d8a20d9a1b60078d45507186ef17042093835be2f01a/contourpy-1.1.1-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:11b836b7dbfb74e049c302bbf74b4b8f6cb9d0b6ca1bf86cfa8ba144aedadd9c", size = 476043 }, +] + +[[package]] +name = "contourpy" +version = "1.3.0" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version == '3.9.*'", +] +dependencies = [ + { name = "numpy", version = "1.24.4", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version == '3.9.*'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/f5/f6/31a8f28b4a2a4fa0e01085e542f3081ab0588eff8e589d39d775172c9792/contourpy-1.3.0.tar.gz", hash = "sha256:7ffa0db17717a8ffb127efd0c95a4362d996b892c2904db72428d5b52e1938a4", size = 13464370 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/6c/e0/be8dcc796cfdd96708933e0e2da99ba4bb8f9b2caa9d560a50f3f09a65f3/contourpy-1.3.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:880ea32e5c774634f9fcd46504bf9f080a41ad855f4fef54f5380f5133d343c7", size = 265366 }, + { url = "https://files.pythonhosted.org/packages/50/d6/c953b400219443535d412fcbbc42e7a5e823291236bc0bb88936e3cc9317/contourpy-1.3.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:76c905ef940a4474a6289c71d53122a4f77766eef23c03cd57016ce19d0f7b42", size = 249226 }, + { url = "https://files.pythonhosted.org/packages/6f/b4/6fffdf213ffccc28483c524b9dad46bb78332851133b36ad354b856ddc7c/contourpy-1.3.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:92f8557cbb07415a4d6fa191f20fd9d2d9eb9c0b61d1b2f52a8926e43c6e9af7", size = 308460 }, + { url = "https://files.pythonhosted.org/packages/cf/6c/118fc917b4050f0afe07179a6dcbe4f3f4ec69b94f36c9e128c4af480fb8/contourpy-1.3.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:36f965570cff02b874773c49bfe85562b47030805d7d8360748f3eca570f4cab", size = 347623 }, + { url = "https://files.pythonhosted.org/packages/f9/a4/30ff110a81bfe3abf7b9673284d21ddce8cc1278f6f77393c91199da4c90/contourpy-1.3.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cacd81e2d4b6f89c9f8a5b69b86490152ff39afc58a95af002a398273e5ce589", size = 317761 }, + { url = "https://files.pythonhosted.org/packages/99/e6/d11966962b1aa515f5586d3907ad019f4b812c04e4546cc19ebf62b5178e/contourpy-1.3.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:69375194457ad0fad3a839b9e29aa0b0ed53bb54db1bfb6c3ae43d111c31ce41", size = 322015 }, + { url = "https://files.pythonhosted.org/packages/4d/e3/182383743751d22b7b59c3c753277b6aee3637049197624f333dac5b4c80/contourpy-1.3.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:7a52040312b1a858b5e31ef28c2e865376a386c60c0e248370bbea2d3f3b760d", size = 1262672 }, + { url = "https://files.pythonhosted.org/packages/78/53/974400c815b2e605f252c8fb9297e2204347d1755a5374354ee77b1ea259/contourpy-1.3.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:3faeb2998e4fcb256542e8a926d08da08977f7f5e62cf733f3c211c2a5586223", size = 1321688 }, + { url = "https://files.pythonhosted.org/packages/52/29/99f849faed5593b2926a68a31882af98afbeac39c7fdf7de491d9c85ec6a/contourpy-1.3.0-cp310-cp310-win32.whl", hash = "sha256:36e0cff201bcb17a0a8ecc7f454fe078437fa6bda730e695a92f2d9932bd507f", size = 171145 }, + { url = "https://files.pythonhosted.org/packages/a9/97/3f89bba79ff6ff2b07a3cbc40aa693c360d5efa90d66e914f0ff03b95ec7/contourpy-1.3.0-cp310-cp310-win_amd64.whl", hash = "sha256:87ddffef1dbe5e669b5c2440b643d3fdd8622a348fe1983fad7a0f0ccb1cd67b", size = 216019 }, + { url = "https://files.pythonhosted.org/packages/b3/1f/9375917786cb39270b0ee6634536c0e22abf225825602688990d8f5c6c19/contourpy-1.3.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:0fa4c02abe6c446ba70d96ece336e621efa4aecae43eaa9b030ae5fb92b309ad", size = 266356 }, + { url = "https://files.pythonhosted.org/packages/05/46/9256dd162ea52790c127cb58cfc3b9e3413a6e3478917d1f811d420772ec/contourpy-1.3.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:834e0cfe17ba12f79963861e0f908556b2cedd52e1f75e6578801febcc6a9f49", size = 250915 }, + { url = "https://files.pythonhosted.org/packages/e1/5d/3056c167fa4486900dfbd7e26a2fdc2338dc58eee36d490a0ed3ddda5ded/contourpy-1.3.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dbc4c3217eee163fa3984fd1567632b48d6dfd29216da3ded3d7b844a8014a66", size = 310443 }, + { url = "https://files.pythonhosted.org/packages/ca/c2/1a612e475492e07f11c8e267ea5ec1ce0d89971be496c195e27afa97e14a/contourpy-1.3.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4865cd1d419e0c7a7bf6de1777b185eebdc51470800a9f42b9e9decf17762081", size = 348548 }, + { url = "https://files.pythonhosted.org/packages/45/cf/2c2fc6bb5874158277b4faf136847f0689e1b1a1f640a36d76d52e78907c/contourpy-1.3.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:303c252947ab4b14c08afeb52375b26781ccd6a5ccd81abcdfc1fafd14cf93c1", size = 319118 }, + { url = "https://files.pythonhosted.org/packages/03/33/003065374f38894cdf1040cef474ad0546368eea7e3a51d48b8a423961f8/contourpy-1.3.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:637f674226be46f6ba372fd29d9523dd977a291f66ab2a74fbeb5530bb3f445d", size = 323162 }, + { url = "https://files.pythonhosted.org/packages/42/80/e637326e85e4105a802e42959f56cff2cd39a6b5ef68d5d9aee3ea5f0e4c/contourpy-1.3.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:76a896b2f195b57db25d6b44e7e03f221d32fe318d03ede41f8b4d9ba1bff53c", size = 1265396 }, + { url = "https://files.pythonhosted.org/packages/7c/3b/8cbd6416ca1bbc0202b50f9c13b2e0b922b64be888f9d9ee88e6cfabfb51/contourpy-1.3.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:e1fd23e9d01591bab45546c089ae89d926917a66dceb3abcf01f6105d927e2cb", size = 1324297 }, + { url = "https://files.pythonhosted.org/packages/4d/2c/021a7afaa52fe891f25535506cc861c30c3c4e5a1c1ce94215e04b293e72/contourpy-1.3.0-cp311-cp311-win32.whl", hash = "sha256:d402880b84df3bec6eab53cd0cf802cae6a2ef9537e70cf75e91618a3801c20c", size = 171808 }, + { url = "https://files.pythonhosted.org/packages/8d/2f/804f02ff30a7fae21f98198828d0857439ec4c91a96e20cf2d6c49372966/contourpy-1.3.0-cp311-cp311-win_amd64.whl", hash = "sha256:6cb6cc968059db9c62cb35fbf70248f40994dfcd7aa10444bbf8b3faeb7c2d67", size = 217181 }, + { url = "https://files.pythonhosted.org/packages/c9/92/8e0bbfe6b70c0e2d3d81272b58c98ac69ff1a4329f18c73bd64824d8b12e/contourpy-1.3.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:570ef7cf892f0afbe5b2ee410c507ce12e15a5fa91017a0009f79f7d93a1268f", size = 267838 }, + { url = "https://files.pythonhosted.org/packages/e3/04/33351c5d5108460a8ce6d512307690b023f0cfcad5899499f5c83b9d63b1/contourpy-1.3.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:da84c537cb8b97d153e9fb208c221c45605f73147bd4cadd23bdae915042aad6", size = 251549 }, + { url = "https://files.pythonhosted.org/packages/51/3d/aa0fe6ae67e3ef9f178389e4caaaa68daf2f9024092aa3c6032e3d174670/contourpy-1.3.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0be4d8425bfa755e0fd76ee1e019636ccc7c29f77a7c86b4328a9eb6a26d0639", size = 303177 }, + { url = "https://files.pythonhosted.org/packages/56/c3/c85a7e3e0cab635575d3b657f9535443a6f5d20fac1a1911eaa4bbe1aceb/contourpy-1.3.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9c0da700bf58f6e0b65312d0a5e695179a71d0163957fa381bb3c1f72972537c", size = 341735 }, + { url = "https://files.pythonhosted.org/packages/dd/8d/20f7a211a7be966a53f474bc90b1a8202e9844b3f1ef85f3ae45a77151ee/contourpy-1.3.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:eb8b141bb00fa977d9122636b16aa67d37fd40a3d8b52dd837e536d64b9a4d06", size = 314679 }, + { url = "https://files.pythonhosted.org/packages/6e/be/524e377567defac0e21a46e2a529652d165fed130a0d8a863219303cee18/contourpy-1.3.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3634b5385c6716c258d0419c46d05c8aa7dc8cb70326c9a4fb66b69ad2b52e09", size = 320549 }, + { url = "https://files.pythonhosted.org/packages/0f/96/fdb2552a172942d888915f3a6663812e9bc3d359d53dafd4289a0fb462f0/contourpy-1.3.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:0dce35502151b6bd35027ac39ba6e5a44be13a68f55735c3612c568cac3805fd", size = 1263068 }, + { url = "https://files.pythonhosted.org/packages/2a/25/632eab595e3140adfa92f1322bf8915f68c932bac468e89eae9974cf1c00/contourpy-1.3.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:aea348f053c645100612b333adc5983d87be69acdc6d77d3169c090d3b01dc35", size = 1322833 }, + { url = "https://files.pythonhosted.org/packages/73/e3/69738782e315a1d26d29d71a550dbbe3eb6c653b028b150f70c1a5f4f229/contourpy-1.3.0-cp312-cp312-win32.whl", hash = "sha256:90f73a5116ad1ba7174341ef3ea5c3150ddf20b024b98fb0c3b29034752c8aeb", size = 172681 }, + { url = "https://files.pythonhosted.org/packages/0c/89/9830ba00d88e43d15e53d64931e66b8792b46eb25e2050a88fec4a0df3d5/contourpy-1.3.0-cp312-cp312-win_amd64.whl", hash = "sha256:b11b39aea6be6764f84360fce6c82211a9db32a7c7de8fa6dd5397cf1d079c3b", size = 218283 }, + { url = "https://files.pythonhosted.org/packages/53/a1/d20415febfb2267af2d7f06338e82171824d08614084714fb2c1dac9901f/contourpy-1.3.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:3e1c7fa44aaae40a2247e2e8e0627f4bea3dd257014764aa644f319a5f8600e3", size = 267879 }, + { url = "https://files.pythonhosted.org/packages/aa/45/5a28a3570ff6218d8bdfc291a272a20d2648104815f01f0177d103d985e1/contourpy-1.3.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:364174c2a76057feef647c802652f00953b575723062560498dc7930fc9b1cb7", size = 251573 }, + { url = "https://files.pythonhosted.org/packages/39/1c/d3f51540108e3affa84f095c8b04f0aa833bb797bc8baa218a952a98117d/contourpy-1.3.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:32b238b3b3b649e09ce9aaf51f0c261d38644bdfa35cbaf7b263457850957a84", size = 303184 }, + { url = "https://files.pythonhosted.org/packages/00/56/1348a44fb6c3a558c1a3a0cd23d329d604c99d81bf5a4b58c6b71aab328f/contourpy-1.3.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d51fca85f9f7ad0b65b4b9fe800406d0d77017d7270d31ec3fb1cc07358fdea0", size = 340262 }, + { url = "https://files.pythonhosted.org/packages/2b/23/00d665ba67e1bb666152131da07e0f24c95c3632d7722caa97fb61470eca/contourpy-1.3.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:732896af21716b29ab3e988d4ce14bc5133733b85956316fb0c56355f398099b", size = 313806 }, + { url = "https://files.pythonhosted.org/packages/5a/42/3cf40f7040bb8362aea19af9a5fb7b32ce420f645dd1590edcee2c657cd5/contourpy-1.3.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d73f659398a0904e125280836ae6f88ba9b178b2fed6884f3b1f95b989d2c8da", size = 319710 }, + { url = "https://files.pythonhosted.org/packages/05/32/f3bfa3fc083b25e1a7ae09197f897476ee68e7386e10404bdf9aac7391f0/contourpy-1.3.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:c6c7c2408b7048082932cf4e641fa3b8ca848259212f51c8c59c45aa7ac18f14", size = 1264107 }, + { url = "https://files.pythonhosted.org/packages/1c/1e/1019d34473a736664f2439542b890b2dc4c6245f5c0d8cdfc0ccc2cab80c/contourpy-1.3.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:f317576606de89da6b7e0861cf6061f6146ead3528acabff9236458a6ba467f8", size = 1322458 }, + { url = "https://files.pythonhosted.org/packages/22/85/4f8bfd83972cf8909a4d36d16b177f7b8bdd942178ea4bf877d4a380a91c/contourpy-1.3.0-cp313-cp313-win32.whl", hash = "sha256:31cd3a85dbdf1fc002280c65caa7e2b5f65e4a973fcdf70dd2fdcb9868069294", size = 172643 }, + { url = "https://files.pythonhosted.org/packages/cc/4a/fb3c83c1baba64ba90443626c228ca14f19a87c51975d3b1de308dd2cf08/contourpy-1.3.0-cp313-cp313-win_amd64.whl", hash = "sha256:4553c421929ec95fb07b3aaca0fae668b2eb5a5203d1217ca7c34c063c53d087", size = 218301 }, + { url = "https://files.pythonhosted.org/packages/76/65/702f4064f397821fea0cb493f7d3bc95a5d703e20954dce7d6d39bacf378/contourpy-1.3.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:345af746d7766821d05d72cb8f3845dfd08dd137101a2cb9b24de277d716def8", size = 278972 }, + { url = "https://files.pythonhosted.org/packages/80/85/21f5bba56dba75c10a45ec00ad3b8190dbac7fd9a8a8c46c6116c933e9cf/contourpy-1.3.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:3bb3808858a9dc68f6f03d319acd5f1b8a337e6cdda197f02f4b8ff67ad2057b", size = 263375 }, + { url = "https://files.pythonhosted.org/packages/0a/64/084c86ab71d43149f91ab3a4054ccf18565f0a8af36abfa92b1467813ed6/contourpy-1.3.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:420d39daa61aab1221567b42eecb01112908b2cab7f1b4106a52caaec8d36973", size = 307188 }, + { url = "https://files.pythonhosted.org/packages/3d/ff/d61a4c288dc42da0084b8d9dc2aa219a850767165d7d9a9c364ff530b509/contourpy-1.3.0-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4d63ee447261e963af02642ffcb864e5a2ee4cbfd78080657a9880b8b1868e18", size = 345644 }, + { url = "https://files.pythonhosted.org/packages/ca/aa/00d2313d35ec03f188e8f0786c2fc61f589306e02fdc158233697546fd58/contourpy-1.3.0-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:167d6c890815e1dac9536dca00828b445d5d0df4d6a8c6adb4a7ec3166812fa8", size = 317141 }, + { url = "https://files.pythonhosted.org/packages/8d/6a/b5242c8cb32d87f6abf4f5e3044ca397cb1a76712e3fa2424772e3ff495f/contourpy-1.3.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:710a26b3dc80c0e4febf04555de66f5fd17e9cf7170a7b08000601a10570bda6", size = 323469 }, + { url = "https://files.pythonhosted.org/packages/6f/a6/73e929d43028a9079aca4bde107494864d54f0d72d9db508a51ff0878593/contourpy-1.3.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:75ee7cb1a14c617f34a51d11fa7524173e56551646828353c4af859c56b766e2", size = 1260894 }, + { url = "https://files.pythonhosted.org/packages/2b/1e/1e726ba66eddf21c940821df8cf1a7d15cb165f0682d62161eaa5e93dae1/contourpy-1.3.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:33c92cdae89ec5135d036e7218e69b0bb2851206077251f04a6c4e0e21f03927", size = 1314829 }, + { url = "https://files.pythonhosted.org/packages/b3/e3/b9f72758adb6ef7397327ceb8b9c39c75711affb220e4f53c745ea1d5a9a/contourpy-1.3.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:a11077e395f67ffc2c44ec2418cfebed032cd6da3022a94fc227b6faf8e2acb8", size = 265518 }, + { url = "https://files.pythonhosted.org/packages/ec/22/19f5b948367ab5260fb41d842c7a78dae645603881ea6bc39738bcfcabf6/contourpy-1.3.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e8134301d7e204c88ed7ab50028ba06c683000040ede1d617298611f9dc6240c", size = 249350 }, + { url = "https://files.pythonhosted.org/packages/26/76/0c7d43263dd00ae21a91a24381b7e813d286a3294d95d179ef3a7b9fb1d7/contourpy-1.3.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e12968fdfd5bb45ffdf6192a590bd8ddd3ba9e58360b29683c6bb71a7b41edca", size = 309167 }, + { url = "https://files.pythonhosted.org/packages/96/3b/cadff6773e89f2a5a492c1a8068e21d3fccaf1a1c1df7d65e7c8e3ef60ba/contourpy-1.3.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fd2a0fc506eccaaa7595b7e1418951f213cf8255be2600f1ea1b61e46a60c55f", size = 348279 }, + { url = "https://files.pythonhosted.org/packages/e1/86/158cc43aa549d2081a955ab11c6bdccc7a22caacc2af93186d26f5f48746/contourpy-1.3.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4cfb5c62ce023dfc410d6059c936dcf96442ba40814aefbfa575425a3a7f19dc", size = 318519 }, + { url = "https://files.pythonhosted.org/packages/05/11/57335544a3027e9b96a05948c32e566328e3a2f84b7b99a325b7a06d2b06/contourpy-1.3.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:68a32389b06b82c2fdd68276148d7b9275b5f5cf13e5417e4252f6d1a34f72a2", size = 321922 }, + { url = "https://files.pythonhosted.org/packages/0b/e3/02114f96543f4a1b694333b92a6dcd4f8eebbefcc3a5f3bbb1316634178f/contourpy-1.3.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:94e848a6b83da10898cbf1311a815f770acc9b6a3f2d646f330d57eb4e87592e", size = 1258017 }, + { url = "https://files.pythonhosted.org/packages/f3/3b/bfe4c81c6d5881c1c643dde6620be0b42bf8aab155976dd644595cfab95c/contourpy-1.3.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:d78ab28a03c854a873787a0a42254a0ccb3cb133c672f645c9f9c8f3ae9d0800", size = 1316773 }, + { url = "https://files.pythonhosted.org/packages/f1/17/c52d2970784383cafb0bd918b6fb036d98d96bbf0bc1befb5d1e31a07a70/contourpy-1.3.0-cp39-cp39-win32.whl", hash = "sha256:81cb5ed4952aae6014bc9d0421dec7c5835c9c8c31cdf51910b708f548cf58e5", size = 171353 }, + { url = "https://files.pythonhosted.org/packages/53/23/db9f69676308e094d3c45f20cc52e12d10d64f027541c995d89c11ad5c75/contourpy-1.3.0-cp39-cp39-win_amd64.whl", hash = "sha256:14e262f67bd7e6eb6880bc564dcda30b15e351a594657e55b7eec94b6ef72843", size = 211817 }, + { url = "https://files.pythonhosted.org/packages/d1/09/60e486dc2b64c94ed33e58dcfb6f808192c03dfc5574c016218b9b7680dc/contourpy-1.3.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:fe41b41505a5a33aeaed2a613dccaeaa74e0e3ead6dd6fd3a118fb471644fd6c", size = 261886 }, + { url = "https://files.pythonhosted.org/packages/19/20/b57f9f7174fcd439a7789fb47d764974ab646fa34d1790551de386457a8e/contourpy-1.3.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eca7e17a65f72a5133bdbec9ecf22401c62bcf4821361ef7811faee695799779", size = 311008 }, + { url = "https://files.pythonhosted.org/packages/74/fc/5040d42623a1845d4f17a418e590fd7a79ae8cb2bad2b2f83de63c3bdca4/contourpy-1.3.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:1ec4dc6bf570f5b22ed0d7efba0dfa9c5b9e0431aeea7581aa217542d9e809a4", size = 215690 }, + { url = "https://files.pythonhosted.org/packages/2b/24/dc3dcd77ac7460ab7e9d2b01a618cb31406902e50e605a8d6091f0a8f7cc/contourpy-1.3.0-pp39-pypy39_pp73-macosx_10_15_x86_64.whl", hash = "sha256:00ccd0dbaad6d804ab259820fa7cb0b8036bda0686ef844d24125d8287178ce0", size = 261894 }, + { url = "https://files.pythonhosted.org/packages/b1/db/531642a01cfec39d1682e46b5457b07cf805e3c3c584ec27e2a6223f8f6c/contourpy-1.3.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8ca947601224119117f7c19c9cdf6b3ab54c5726ef1d906aa4a69dfb6dd58102", size = 311099 }, + { url = "https://files.pythonhosted.org/packages/38/1e/94bda024d629f254143a134eead69e21c836429a2a6ce82209a00ddcb79a/contourpy-1.3.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:c6ec93afeb848a0845a18989da3beca3eec2c0f852322efe21af1931147d12cb", size = 215838 }, +] + +[[package]] +name = "contourpy" +version = "1.3.2" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.11'", + "python_full_version == '3.10.*'", +] +dependencies = [ + { name = "numpy", version = "2.2.4", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/66/54/eb9bfc647b19f2009dd5c7f5ec51c4e6ca831725f1aea7a993034f483147/contourpy-1.3.2.tar.gz", hash = "sha256:b6945942715a034c671b7fc54f9588126b0b8bf23db2696e3ca8328f3ff0ab54", size = 13466130 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/12/a3/da4153ec8fe25d263aa48c1a4cbde7f49b59af86f0b6f7862788c60da737/contourpy-1.3.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:ba38e3f9f330af820c4b27ceb4b9c7feee5fe0493ea53a8720f4792667465934", size = 268551 }, + { url = "https://files.pythonhosted.org/packages/2f/6c/330de89ae1087eb622bfca0177d32a7ece50c3ef07b28002de4757d9d875/contourpy-1.3.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:dc41ba0714aa2968d1f8674ec97504a8f7e334f48eeacebcaa6256213acb0989", size = 253399 }, + { url = "https://files.pythonhosted.org/packages/c1/bd/20c6726b1b7f81a8bee5271bed5c165f0a8e1f572578a9d27e2ccb763cb2/contourpy-1.3.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9be002b31c558d1ddf1b9b415b162c603405414bacd6932d031c5b5a8b757f0d", size = 312061 }, + { url = "https://files.pythonhosted.org/packages/22/fc/a9665c88f8a2473f823cf1ec601de9e5375050f1958cbb356cdf06ef1ab6/contourpy-1.3.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8d2e74acbcba3bfdb6d9d8384cdc4f9260cae86ed9beee8bd5f54fee49a430b9", size = 351956 }, + { url = "https://files.pythonhosted.org/packages/25/eb/9f0a0238f305ad8fb7ef42481020d6e20cf15e46be99a1fcf939546a177e/contourpy-1.3.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e259bced5549ac64410162adc973c5e2fb77f04df4a439d00b478e57a0e65512", size = 320872 }, + { url = "https://files.pythonhosted.org/packages/32/5c/1ee32d1c7956923202f00cf8d2a14a62ed7517bdc0ee1e55301227fc273c/contourpy-1.3.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ad687a04bc802cbe8b9c399c07162a3c35e227e2daccf1668eb1f278cb698631", size = 325027 }, + { url = "https://files.pythonhosted.org/packages/83/bf/9baed89785ba743ef329c2b07fd0611d12bfecbedbdd3eeecf929d8d3b52/contourpy-1.3.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:cdd22595308f53ef2f891040ab2b93d79192513ffccbd7fe19be7aa773a5e09f", size = 1306641 }, + { url = "https://files.pythonhosted.org/packages/d4/cc/74e5e83d1e35de2d28bd97033426b450bc4fd96e092a1f7a63dc7369b55d/contourpy-1.3.2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:b4f54d6a2defe9f257327b0f243612dd051cc43825587520b1bf74a31e2f6ef2", size = 1374075 }, + { url = "https://files.pythonhosted.org/packages/0c/42/17f3b798fd5e033b46a16f8d9fcb39f1aba051307f5ebf441bad1ecf78f8/contourpy-1.3.2-cp310-cp310-win32.whl", hash = "sha256:f939a054192ddc596e031e50bb13b657ce318cf13d264f095ce9db7dc6ae81c0", size = 177534 }, + { url = "https://files.pythonhosted.org/packages/54/ec/5162b8582f2c994721018d0c9ece9dc6ff769d298a8ac6b6a652c307e7df/contourpy-1.3.2-cp310-cp310-win_amd64.whl", hash = "sha256:c440093bbc8fc21c637c03bafcbef95ccd963bc6e0514ad887932c18ca2a759a", size = 221188 }, + { url = "https://files.pythonhosted.org/packages/b3/b9/ede788a0b56fc5b071639d06c33cb893f68b1178938f3425debebe2dab78/contourpy-1.3.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6a37a2fb93d4df3fc4c0e363ea4d16f83195fc09c891bc8ce072b9d084853445", size = 269636 }, + { url = "https://files.pythonhosted.org/packages/e6/75/3469f011d64b8bbfa04f709bfc23e1dd71be54d05b1b083be9f5b22750d1/contourpy-1.3.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:b7cd50c38f500bbcc9b6a46643a40e0913673f869315d8e70de0438817cb7773", size = 254636 }, + { url = "https://files.pythonhosted.org/packages/8d/2f/95adb8dae08ce0ebca4fd8e7ad653159565d9739128b2d5977806656fcd2/contourpy-1.3.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d6658ccc7251a4433eebd89ed2672c2ed96fba367fd25ca9512aa92a4b46c4f1", size = 313053 }, + { url = "https://files.pythonhosted.org/packages/c3/a6/8ccf97a50f31adfa36917707fe39c9a0cbc24b3bbb58185577f119736cc9/contourpy-1.3.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:70771a461aaeb335df14deb6c97439973d253ae70660ca085eec25241137ef43", size = 352985 }, + { url = "https://files.pythonhosted.org/packages/1d/b6/7925ab9b77386143f39d9c3243fdd101621b4532eb126743201160ffa7e6/contourpy-1.3.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:65a887a6e8c4cd0897507d814b14c54a8c2e2aa4ac9f7686292f9769fcf9a6ab", size = 323750 }, + { url = "https://files.pythonhosted.org/packages/c2/f3/20c5d1ef4f4748e52d60771b8560cf00b69d5c6368b5c2e9311bcfa2a08b/contourpy-1.3.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3859783aefa2b8355697f16642695a5b9792e7a46ab86da1118a4a23a51a33d7", size = 326246 }, + { url = "https://files.pythonhosted.org/packages/8c/e5/9dae809e7e0b2d9d70c52b3d24cba134dd3dad979eb3e5e71f5df22ed1f5/contourpy-1.3.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:eab0f6db315fa4d70f1d8ab514e527f0366ec021ff853d7ed6a2d33605cf4b83", size = 1308728 }, + { url = "https://files.pythonhosted.org/packages/e2/4a/0058ba34aeea35c0b442ae61a4f4d4ca84d6df8f91309bc2d43bb8dd248f/contourpy-1.3.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:d91a3ccc7fea94ca0acab82ceb77f396d50a1f67412efe4c526f5d20264e6ecd", size = 1375762 }, + { url = "https://files.pythonhosted.org/packages/09/33/7174bdfc8b7767ef2c08ed81244762d93d5c579336fc0b51ca57b33d1b80/contourpy-1.3.2-cp311-cp311-win32.whl", hash = "sha256:1c48188778d4d2f3d48e4643fb15d8608b1d01e4b4d6b0548d9b336c28fc9b6f", size = 178196 }, + { url = "https://files.pythonhosted.org/packages/5e/fe/4029038b4e1c4485cef18e480b0e2cd2d755448bb071eb9977caac80b77b/contourpy-1.3.2-cp311-cp311-win_amd64.whl", hash = "sha256:5ebac872ba09cb8f2131c46b8739a7ff71de28a24c869bcad554477eb089a878", size = 222017 }, + { url = "https://files.pythonhosted.org/packages/34/f7/44785876384eff370c251d58fd65f6ad7f39adce4a093c934d4a67a7c6b6/contourpy-1.3.2-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:4caf2bcd2969402bf77edc4cb6034c7dd7c0803213b3523f111eb7460a51b8d2", size = 271580 }, + { url = "https://files.pythonhosted.org/packages/93/3b/0004767622a9826ea3d95f0e9d98cd8729015768075d61f9fea8eeca42a8/contourpy-1.3.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:82199cb78276249796419fe36b7386bd8d2cc3f28b3bc19fe2454fe2e26c4c15", size = 255530 }, + { url = "https://files.pythonhosted.org/packages/e7/bb/7bd49e1f4fa805772d9fd130e0d375554ebc771ed7172f48dfcd4ca61549/contourpy-1.3.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:106fab697af11456fcba3e352ad50effe493a90f893fca6c2ca5c033820cea92", size = 307688 }, + { url = "https://files.pythonhosted.org/packages/fc/97/e1d5dbbfa170725ef78357a9a0edc996b09ae4af170927ba8ce977e60a5f/contourpy-1.3.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d14f12932a8d620e307f715857107b1d1845cc44fdb5da2bc8e850f5ceba9f87", size = 347331 }, + { url = "https://files.pythonhosted.org/packages/6f/66/e69e6e904f5ecf6901be3dd16e7e54d41b6ec6ae3405a535286d4418ffb4/contourpy-1.3.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:532fd26e715560721bb0d5fc7610fce279b3699b018600ab999d1be895b09415", size = 318963 }, + { url = "https://files.pythonhosted.org/packages/a8/32/b8a1c8965e4f72482ff2d1ac2cd670ce0b542f203c8e1d34e7c3e6925da7/contourpy-1.3.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f26b383144cf2d2c29f01a1e8170f50dacf0eac02d64139dcd709a8ac4eb3cfe", size = 323681 }, + { url = "https://files.pythonhosted.org/packages/30/c6/12a7e6811d08757c7162a541ca4c5c6a34c0f4e98ef2b338791093518e40/contourpy-1.3.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:c49f73e61f1f774650a55d221803b101d966ca0c5a2d6d5e4320ec3997489441", size = 1308674 }, + { url = "https://files.pythonhosted.org/packages/2a/8a/bebe5a3f68b484d3a2b8ffaf84704b3e343ef1addea528132ef148e22b3b/contourpy-1.3.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:3d80b2c0300583228ac98d0a927a1ba6a2ba6b8a742463c564f1d419ee5b211e", size = 1380480 }, + { url = "https://files.pythonhosted.org/packages/34/db/fcd325f19b5978fb509a7d55e06d99f5f856294c1991097534360b307cf1/contourpy-1.3.2-cp312-cp312-win32.whl", hash = "sha256:90df94c89a91b7362e1142cbee7568f86514412ab8a2c0d0fca72d7e91b62912", size = 178489 }, + { url = "https://files.pythonhosted.org/packages/01/c8/fadd0b92ffa7b5eb5949bf340a63a4a496a6930a6c37a7ba0f12acb076d6/contourpy-1.3.2-cp312-cp312-win_amd64.whl", hash = "sha256:8c942a01d9163e2e5cfb05cb66110121b8d07ad438a17f9e766317bcb62abf73", size = 223042 }, + { url = "https://files.pythonhosted.org/packages/2e/61/5673f7e364b31e4e7ef6f61a4b5121c5f170f941895912f773d95270f3a2/contourpy-1.3.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:de39db2604ae755316cb5967728f4bea92685884b1e767b7c24e983ef5f771cb", size = 271630 }, + { url = "https://files.pythonhosted.org/packages/ff/66/a40badddd1223822c95798c55292844b7e871e50f6bfd9f158cb25e0bd39/contourpy-1.3.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:3f9e896f447c5c8618f1edb2bafa9a4030f22a575ec418ad70611450720b5b08", size = 255670 }, + { url = "https://files.pythonhosted.org/packages/1e/c7/cf9fdee8200805c9bc3b148f49cb9482a4e3ea2719e772602a425c9b09f8/contourpy-1.3.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:71e2bd4a1c4188f5c2b8d274da78faab884b59df20df63c34f74aa1813c4427c", size = 306694 }, + { url = "https://files.pythonhosted.org/packages/dd/e7/ccb9bec80e1ba121efbffad7f38021021cda5be87532ec16fd96533bb2e0/contourpy-1.3.2-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:de425af81b6cea33101ae95ece1f696af39446db9682a0b56daaa48cfc29f38f", size = 345986 }, + { url = "https://files.pythonhosted.org/packages/dc/49/ca13bb2da90391fa4219fdb23b078d6065ada886658ac7818e5441448b78/contourpy-1.3.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:977e98a0e0480d3fe292246417239d2d45435904afd6d7332d8455981c408b85", size = 318060 }, + { url = "https://files.pythonhosted.org/packages/c8/65/5245ce8c548a8422236c13ffcdcdada6a2a812c361e9e0c70548bb40b661/contourpy-1.3.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:434f0adf84911c924519d2b08fc10491dd282b20bdd3fa8f60fd816ea0b48841", size = 322747 }, + { url = "https://files.pythonhosted.org/packages/72/30/669b8eb48e0a01c660ead3752a25b44fdb2e5ebc13a55782f639170772f9/contourpy-1.3.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:c66c4906cdbc50e9cba65978823e6e00b45682eb09adbb78c9775b74eb222422", size = 1308895 }, + { url = "https://files.pythonhosted.org/packages/05/5a/b569f4250decee6e8d54498be7bdf29021a4c256e77fe8138c8319ef8eb3/contourpy-1.3.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:8b7fc0cd78ba2f4695fd0a6ad81a19e7e3ab825c31b577f384aa9d7817dc3bef", size = 1379098 }, + { url = "https://files.pythonhosted.org/packages/19/ba/b227c3886d120e60e41b28740ac3617b2f2b971b9f601c835661194579f1/contourpy-1.3.2-cp313-cp313-win32.whl", hash = "sha256:15ce6ab60957ca74cff444fe66d9045c1fd3e92c8936894ebd1f3eef2fff075f", size = 178535 }, + { url = "https://files.pythonhosted.org/packages/12/6e/2fed56cd47ca739b43e892707ae9a13790a486a3173be063681ca67d2262/contourpy-1.3.2-cp313-cp313-win_amd64.whl", hash = "sha256:e1578f7eafce927b168752ed7e22646dad6cd9bca673c60bff55889fa236ebf9", size = 223096 }, + { url = "https://files.pythonhosted.org/packages/54/4c/e76fe2a03014a7c767d79ea35c86a747e9325537a8b7627e0e5b3ba266b4/contourpy-1.3.2-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:0475b1f6604896bc7c53bb070e355e9321e1bc0d381735421a2d2068ec56531f", size = 285090 }, + { url = "https://files.pythonhosted.org/packages/7b/e2/5aba47debd55d668e00baf9651b721e7733975dc9fc27264a62b0dd26eb8/contourpy-1.3.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:c85bb486e9be652314bb5b9e2e3b0d1b2e643d5eec4992c0fbe8ac71775da739", size = 268643 }, + { url = "https://files.pythonhosted.org/packages/a1/37/cd45f1f051fe6230f751cc5cdd2728bb3a203f5619510ef11e732109593c/contourpy-1.3.2-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:745b57db7758f3ffc05a10254edd3182a2a83402a89c00957a8e8a22f5582823", size = 310443 }, + { url = "https://files.pythonhosted.org/packages/8b/a2/36ea6140c306c9ff6dd38e3bcec80b3b018474ef4d17eb68ceecd26675f4/contourpy-1.3.2-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:970e9173dbd7eba9b4e01aab19215a48ee5dd3f43cef736eebde064a171f89a5", size = 349865 }, + { url = "https://files.pythonhosted.org/packages/95/b7/2fc76bc539693180488f7b6cc518da7acbbb9e3b931fd9280504128bf956/contourpy-1.3.2-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c6c4639a9c22230276b7bffb6a850dfc8258a2521305e1faefe804d006b2e532", size = 321162 }, + { url = "https://files.pythonhosted.org/packages/f4/10/76d4f778458b0aa83f96e59d65ece72a060bacb20cfbee46cf6cd5ceba41/contourpy-1.3.2-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cc829960f34ba36aad4302e78eabf3ef16a3a100863f0d4eeddf30e8a485a03b", size = 327355 }, + { url = "https://files.pythonhosted.org/packages/43/a3/10cf483ea683f9f8ab096c24bad3cce20e0d1dd9a4baa0e2093c1c962d9d/contourpy-1.3.2-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:d32530b534e986374fc19eaa77fcb87e8a99e5431499949b828312bdcd20ac52", size = 1307935 }, + { url = "https://files.pythonhosted.org/packages/78/73/69dd9a024444489e22d86108e7b913f3528f56cfc312b5c5727a44188471/contourpy-1.3.2-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:e298e7e70cf4eb179cc1077be1c725b5fd131ebc81181bf0c03525c8abc297fd", size = 1372168 }, + { url = "https://files.pythonhosted.org/packages/0f/1b/96d586ccf1b1a9d2004dd519b25fbf104a11589abfd05484ff12199cca21/contourpy-1.3.2-cp313-cp313t-win32.whl", hash = "sha256:d0e589ae0d55204991450bb5c23f571c64fe43adaa53f93fc902a84c96f52fe1", size = 189550 }, + { url = "https://files.pythonhosted.org/packages/b0/e6/6000d0094e8a5e32ad62591c8609e269febb6e4db83a1c75ff8868b42731/contourpy-1.3.2-cp313-cp313t-win_amd64.whl", hash = "sha256:78e9253c3de756b3f6a5174d024c4835acd59eb3f8e2ca13e775dbffe1558f69", size = 238214 }, + { url = "https://files.pythonhosted.org/packages/33/05/b26e3c6ecc05f349ee0013f0bb850a761016d89cec528a98193a48c34033/contourpy-1.3.2-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:fd93cc7f3139b6dd7aab2f26a90dde0aa9fc264dbf70f6740d498a70b860b82c", size = 265681 }, + { url = "https://files.pythonhosted.org/packages/2b/25/ac07d6ad12affa7d1ffed11b77417d0a6308170f44ff20fa1d5aa6333f03/contourpy-1.3.2-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:107ba8a6a7eec58bb475329e6d3b95deba9440667c4d62b9b6063942b61d7f16", size = 315101 }, + { url = "https://files.pythonhosted.org/packages/8f/4d/5bb3192bbe9d3f27e3061a6a8e7733c9120e203cb8515767d30973f71030/contourpy-1.3.2-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:ded1706ed0c1049224531b81128efbd5084598f18d8a2d9efae833edbd2b40ad", size = 220599 }, + { url = "https://files.pythonhosted.org/packages/ff/c0/91f1215d0d9f9f343e4773ba6c9b89e8c0cc7a64a6263f21139da639d848/contourpy-1.3.2-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:5f5964cdad279256c084b69c3f412b7801e15356b16efa9d78aa974041903da0", size = 266807 }, + { url = "https://files.pythonhosted.org/packages/d4/79/6be7e90c955c0487e7712660d6cead01fa17bff98e0ea275737cc2bc8e71/contourpy-1.3.2-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:49b65a95d642d4efa8f64ba12558fcb83407e58a2dfba9d796d77b63ccfcaff5", size = 318729 }, + { url = "https://files.pythonhosted.org/packages/87/68/7f46fb537958e87427d98a4074bcde4b67a70b04900cfc5ce29bc2f556c1/contourpy-1.3.2-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:8c5acb8dddb0752bf252e01a3035b21443158910ac16a3b0d20e7fed7d534ce5", size = 221791 }, +] + +[[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 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e7/05/c19819d5e3d95294a6f5947fb9b9629efb316b96de511b418c53d245aae6/cycler-0.12.1-py3-none-any.whl", hash = "sha256:85cef7cff222d8644161529808465972e51340599459b8ac3ccbac5a854e0d30", size = 8321 }, +] + [[package]] name = "exceptiongroup" version = "1.2.2" @@ -245,6 +474,63 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/02/cc/b7e31358aac6ed1ef2bb790a9746ac2c69bcb3c8588b41616914eb106eaf/exceptiongroup-1.2.2-py3-none-any.whl", hash = "sha256:3111b9d131c238bec2f8f516e123e14ba243563fb135d3fe885990585aa7795b", size = 16453 }, ] +[[package]] +name = "fonttools" +version = "4.57.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/03/2d/a9a0b6e3a0cf6bd502e64fc16d894269011930cabfc89aee20d1635b1441/fonttools-4.57.0.tar.gz", hash = "sha256:727ece10e065be2f9dd239d15dd5d60a66e17eac11aea47d447f9f03fdbc42de", size = 3492448 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/db/17/3ddfd1881878b3f856065130bb603f5922e81ae8a4eb53bce0ea78f765a8/fonttools-4.57.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:babe8d1eb059a53e560e7bf29f8e8f4accc8b6cfb9b5fd10e485bde77e71ef41", size = 2756260 }, + { url = "https://files.pythonhosted.org/packages/26/2b/6957890c52c030b0bf9e0add53e5badab4682c6ff024fac9a332bb2ae063/fonttools-4.57.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:81aa97669cd726349eb7bd43ca540cf418b279ee3caba5e2e295fb4e8f841c02", size = 2284691 }, + { url = "https://files.pythonhosted.org/packages/cc/8e/c043b4081774e5eb06a834cedfdb7d432b4935bc8c4acf27207bdc34dfc4/fonttools-4.57.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f0e9618630edd1910ad4f07f60d77c184b2f572c8ee43305ea3265675cbbfe7e", size = 4566077 }, + { url = "https://files.pythonhosted.org/packages/59/bc/e16ae5d9eee6c70830ce11d1e0b23d6018ddfeb28025fda092cae7889c8b/fonttools-4.57.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:34687a5d21f1d688d7d8d416cb4c5b9c87fca8a1797ec0d74b9fdebfa55c09ab", size = 4608729 }, + { url = "https://files.pythonhosted.org/packages/25/13/e557bf10bb38e4e4c436d3a9627aadf691bc7392ae460910447fda5fad2b/fonttools-4.57.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:69ab81b66ebaa8d430ba56c7a5f9abe0183afefd3a2d6e483060343398b13fb1", size = 4759646 }, + { url = "https://files.pythonhosted.org/packages/bc/c9/5e2952214d4a8e31026bf80beb18187199b7001e60e99a6ce19773249124/fonttools-4.57.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:d639397de852f2ccfb3134b152c741406752640a266d9c1365b0f23d7b88077f", size = 4941652 }, + { url = "https://files.pythonhosted.org/packages/df/04/e80242b3d9ec91a1f785d949edc277a13ecfdcfae744de4b170df9ed77d8/fonttools-4.57.0-cp310-cp310-win32.whl", hash = "sha256:cc066cb98b912f525ae901a24cd381a656f024f76203bc85f78fcc9e66ae5aec", size = 2159432 }, + { url = "https://files.pythonhosted.org/packages/33/ba/e858cdca275daf16e03c0362aa43734ea71104c3b356b2100b98543dba1b/fonttools-4.57.0-cp310-cp310-win_amd64.whl", hash = "sha256:7a64edd3ff6a7f711a15bd70b4458611fb240176ec11ad8845ccbab4fe6745db", size = 2203869 }, + { url = "https://files.pythonhosted.org/packages/81/1f/e67c99aa3c6d3d2f93d956627e62a57ae0d35dc42f26611ea2a91053f6d6/fonttools-4.57.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:3871349303bdec958360eedb619169a779956503ffb4543bb3e6211e09b647c4", size = 2757392 }, + { url = "https://files.pythonhosted.org/packages/aa/f1/f75770d0ddc67db504850898d96d75adde238c35313409bfcd8db4e4a5fe/fonttools-4.57.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c59375e85126b15a90fcba3443eaac58f3073ba091f02410eaa286da9ad80ed8", size = 2285609 }, + { url = "https://files.pythonhosted.org/packages/f5/d3/bc34e4953cb204bae0c50b527307dce559b810e624a733351a654cfc318e/fonttools-4.57.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:967b65232e104f4b0f6370a62eb33089e00024f2ce143aecbf9755649421c683", size = 4873292 }, + { url = "https://files.pythonhosted.org/packages/41/b8/d5933559303a4ab18c799105f4c91ee0318cc95db4a2a09e300116625e7a/fonttools-4.57.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:39acf68abdfc74e19de7485f8f7396fa4d2418efea239b7061d6ed6a2510c746", size = 4902503 }, + { url = "https://files.pythonhosted.org/packages/32/13/acb36bfaa316f481153ce78de1fa3926a8bad42162caa3b049e1afe2408b/fonttools-4.57.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:9d077f909f2343daf4495ba22bb0e23b62886e8ec7c109ee8234bdbd678cf344", size = 5077351 }, + { url = "https://files.pythonhosted.org/packages/b5/23/6d383a2ca83b7516d73975d8cca9d81a01acdcaa5e4db8579e4f3de78518/fonttools-4.57.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:46370ac47a1e91895d40e9ad48effbe8e9d9db1a4b80888095bc00e7beaa042f", size = 5275067 }, + { url = "https://files.pythonhosted.org/packages/bc/ca/31b8919c6da0198d5d522f1d26c980201378c087bdd733a359a1e7485769/fonttools-4.57.0-cp311-cp311-win32.whl", hash = "sha256:ca2aed95855506b7ae94e8f1f6217b7673c929e4f4f1217bcaa236253055cb36", size = 2158263 }, + { url = "https://files.pythonhosted.org/packages/13/4c/de2612ea2216eb45cfc8eb91a8501615dd87716feaf5f8fb65cbca576289/fonttools-4.57.0-cp311-cp311-win_amd64.whl", hash = "sha256:17168a4670bbe3775f3f3f72d23ee786bd965395381dfbb70111e25e81505b9d", size = 2204968 }, + { url = "https://files.pythonhosted.org/packages/cb/98/d4bc42d43392982eecaaca117d79845734d675219680cd43070bb001bc1f/fonttools-4.57.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:889e45e976c74abc7256d3064aa7c1295aa283c6bb19810b9f8b604dfe5c7f31", size = 2751824 }, + { url = "https://files.pythonhosted.org/packages/1a/62/7168030eeca3742fecf45f31e63b5ef48969fa230a672216b805f1d61548/fonttools-4.57.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:0425c2e052a5f1516c94e5855dbda706ae5a768631e9fcc34e57d074d1b65b92", size = 2283072 }, + { url = "https://files.pythonhosted.org/packages/5d/82/121a26d9646f0986ddb35fbbaf58ef791c25b59ecb63ffea2aab0099044f/fonttools-4.57.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:44c26a311be2ac130f40a96769264809d3b0cb297518669db437d1cc82974888", size = 4788020 }, + { url = "https://files.pythonhosted.org/packages/5b/26/e0f2fb662e022d565bbe280a3cfe6dafdaabf58889ff86fdef2d31ff1dde/fonttools-4.57.0-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:84c41ba992df5b8d680b89fd84c6a1f2aca2b9f1ae8a67400c8930cd4ea115f6", size = 4859096 }, + { url = "https://files.pythonhosted.org/packages/9e/44/9075e323347b1891cdece4b3f10a3b84a8f4c42a7684077429d9ce842056/fonttools-4.57.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:ea1e9e43ca56b0c12440a7c689b1350066595bebcaa83baad05b8b2675129d98", size = 4964356 }, + { url = "https://files.pythonhosted.org/packages/48/28/caa8df32743462fb966be6de6a79d7f30393859636d7732e82efa09fbbb4/fonttools-4.57.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:84fd56c78d431606332a0627c16e2a63d243d0d8b05521257d77c6529abe14d8", size = 5226546 }, + { url = "https://files.pythonhosted.org/packages/f6/46/95ab0f0d2e33c5b1a4fc1c0efe5e286ba9359602c0a9907adb1faca44175/fonttools-4.57.0-cp312-cp312-win32.whl", hash = "sha256:f4376819c1c778d59e0a31db5dc6ede854e9edf28bbfa5b756604727f7f800ac", size = 2146776 }, + { url = "https://files.pythonhosted.org/packages/06/5d/1be5424bb305880e1113631f49a55ea7c7da3a5fe02608ca7c16a03a21da/fonttools-4.57.0-cp312-cp312-win_amd64.whl", hash = "sha256:57e30241524879ea10cdf79c737037221f77cc126a8cdc8ff2c94d4a522504b9", size = 2193956 }, + { url = "https://files.pythonhosted.org/packages/e9/2f/11439f3af51e4bb75ac9598c29f8601aa501902dcedf034bdc41f47dd799/fonttools-4.57.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:408ce299696012d503b714778d89aa476f032414ae57e57b42e4b92363e0b8ef", size = 2739175 }, + { url = "https://files.pythonhosted.org/packages/25/52/677b55a4c0972dc3820c8dba20a29c358197a78229daa2ea219fdb19e5d5/fonttools-4.57.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:bbceffc80aa02d9e8b99f2a7491ed8c4a783b2fc4020119dc405ca14fb5c758c", size = 2276583 }, + { url = "https://files.pythonhosted.org/packages/64/79/184555f8fa77b827b9460a4acdbbc0b5952bb6915332b84c615c3a236826/fonttools-4.57.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f022601f3ee9e1f6658ed6d184ce27fa5216cee5b82d279e0f0bde5deebece72", size = 4766437 }, + { url = "https://files.pythonhosted.org/packages/f8/ad/c25116352f456c0d1287545a7aa24e98987b6d99c5b0456c4bd14321f20f/fonttools-4.57.0-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4dea5893b58d4637ffa925536462ba626f8a1b9ffbe2f5c272cdf2c6ebadb817", size = 4838431 }, + { url = "https://files.pythonhosted.org/packages/53/ae/398b2a833897297797a44f519c9af911c2136eb7aa27d3f1352c6d1129fa/fonttools-4.57.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:dff02c5c8423a657c550b48231d0a48d7e2b2e131088e55983cfe74ccc2c7cc9", size = 4951011 }, + { url = "https://files.pythonhosted.org/packages/b7/5d/7cb31c4bc9ffb9a2bbe8b08f8f53bad94aeb158efad75da645b40b62cb73/fonttools-4.57.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:767604f244dc17c68d3e2dbf98e038d11a18abc078f2d0f84b6c24571d9c0b13", size = 5205679 }, + { url = "https://files.pythonhosted.org/packages/4c/e4/6934513ec2c4d3d69ca1bc3bd34d5c69dafcbf68c15388dd3bb062daf345/fonttools-4.57.0-cp313-cp313-win32.whl", hash = "sha256:8e2e12d0d862f43d51e5afb8b9751c77e6bec7d2dc00aad80641364e9df5b199", size = 2144833 }, + { url = "https://files.pythonhosted.org/packages/c4/0d/2177b7fdd23d017bcfb702fd41e47d4573766b9114da2fddbac20dcc4957/fonttools-4.57.0-cp313-cp313-win_amd64.whl", hash = "sha256:f1d6bc9c23356908db712d282acb3eebd4ae5ec6d8b696aa40342b1d84f8e9e3", size = 2190799 }, + { url = "https://files.pythonhosted.org/packages/8a/3f/c16dbbec7221783f37dcc2022d5a55f0d704ffc9feef67930f6eb517e8ce/fonttools-4.57.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:9d57b4e23ebbe985125d3f0cabbf286efa191ab60bbadb9326091050d88e8213", size = 2753756 }, + { url = "https://files.pythonhosted.org/packages/48/9f/5b4a3d6aed5430b159dd3494bb992d4e45102affa3725f208e4f0aedc6a3/fonttools-4.57.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:579ba873d7f2a96f78b2e11028f7472146ae181cae0e4d814a37a09e93d5c5cc", size = 2283179 }, + { url = "https://files.pythonhosted.org/packages/17/b2/4e887b674938b4c3848029a4134ac90dd8653ea80b4f464fa1edeae37f25/fonttools-4.57.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6e3e1ec10c29bae0ea826b61f265ec5c858c5ba2ce2e69a71a62f285cf8e4595", size = 4647139 }, + { url = "https://files.pythonhosted.org/packages/a5/0e/b6314a09a4d561aaa7e09de43fa700917be91e701f07df6178865962666c/fonttools-4.57.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a1968f2a2003c97c4ce6308dc2498d5fd4364ad309900930aa5a503c9851aec8", size = 4691211 }, + { url = "https://files.pythonhosted.org/packages/bf/1d/b9f4b70d165c25f5c9aee61eb6ae90b0e9b5787b2c0a45e4f3e50a839274/fonttools-4.57.0-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:aff40f8ac6763d05c2c8f6d240c6dac4bb92640a86d9b0c3f3fff4404f34095c", size = 4873755 }, + { url = "https://files.pythonhosted.org/packages/3b/fa/a731c8f42ae2c6761d1c22bd3c90241d5b2b13cabb70598abc74a828b51f/fonttools-4.57.0-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:d07f1b64008e39fceae7aa99e38df8385d7d24a474a8c9872645c4397b674481", size = 5070072 }, + { url = "https://files.pythonhosted.org/packages/1f/1e/6a988230109a2ba472e5de0a4c3936d49718cfc4b700b6bad53eca414bcf/fonttools-4.57.0-cp38-cp38-win32.whl", hash = "sha256:51d8482e96b28fb28aa8e50b5706f3cee06de85cbe2dce80dbd1917ae22ec5a6", size = 1484098 }, + { url = "https://files.pythonhosted.org/packages/dc/7a/2b3666e8c13d035adf656a8ae391380656144760353c97f74747c64fd3e5/fonttools-4.57.0-cp38-cp38-win_amd64.whl", hash = "sha256:03290e818782e7edb159474144fca11e36a8ed6663d1fcbd5268eb550594fd8e", size = 1529536 }, + { url = "https://files.pythonhosted.org/packages/d2/c7/3bddafbb95447f6fbabdd0b399bf468649321fd4029e356b4f6bd70fbc1b/fonttools-4.57.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:7339e6a3283e4b0ade99cade51e97cde3d54cd6d1c3744459e886b66d630c8b3", size = 2758942 }, + { url = "https://files.pythonhosted.org/packages/d4/a2/8dd7771022e365c90e428b1607174c3297d5c0a2cc2cf4cdccb2221945b7/fonttools-4.57.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:05efceb2cb5f6ec92a4180fcb7a64aa8d3385fd49cfbbe459350229d1974f0b1", size = 2285959 }, + { url = "https://files.pythonhosted.org/packages/58/5a/2fd29c5e38b14afe1fae7d472373e66688e7c7a98554252f3cf44371e033/fonttools-4.57.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a97bb05eb24637714a04dee85bdf0ad1941df64fe3b802ee4ac1c284a5f97b7c", size = 4571677 }, + { url = "https://files.pythonhosted.org/packages/bf/30/b77cf81923f1a67ff35d6765a9db4718c0688eb8466c464c96a23a2e28d4/fonttools-4.57.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:541cb48191a19ceb1a2a4b90c1fcebd22a1ff7491010d3cf840dd3a68aebd654", size = 4616644 }, + { url = "https://files.pythonhosted.org/packages/06/33/376605898d8d553134144dff167506a49694cb0e0cf684c14920fbc1e99f/fonttools-4.57.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:cdef9a056c222d0479a1fdb721430f9efd68268014c54e8166133d2643cb05d9", size = 4761314 }, + { url = "https://files.pythonhosted.org/packages/48/e4/e0e48f5bae04bc1a1c6b4fcd7d1ca12b29f1fe74221534b7ff83ed0db8fe/fonttools-4.57.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:3cf97236b192a50a4bf200dc5ba405aa78d4f537a2c6e4c624bb60466d5b03bd", size = 4945563 }, + { url = "https://files.pythonhosted.org/packages/61/98/2dacfc6d70f2d93bde1bbf814286be343cb17f53057130ad3b843144dd00/fonttools-4.57.0-cp39-cp39-win32.whl", hash = "sha256:e952c684274a7714b3160f57ec1d78309f955c6335c04433f07d36c5eb27b1f9", size = 2159997 }, + { url = "https://files.pythonhosted.org/packages/93/fa/e61cc236f40d504532d2becf90c297bfed8e40abc0c8b08375fbb83eff29/fonttools-4.57.0-cp39-cp39-win_amd64.whl", hash = "sha256:a2a722c0e4bfd9966a11ff55c895c817158fcce1b2b6700205a376403b546ad9", size = 2204508 }, + { url = "https://files.pythonhosted.org/packages/90/27/45f8957c3132917f91aaa56b700bcfc2396be1253f685bd5c68529b6f610/fonttools-4.57.0-py3-none-any.whl", hash = "sha256:3122c604a675513c68bd24c6a8f9091f1c2376d18e8f5fe5a101746c81b3e98f", size = 1093605 }, +] + [[package]] name = "h5py" version = "3.11.0" @@ -356,6 +642,36 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/cb/bd/b394387b598ed84d8d0fa90611a90bee0adc2021820ad5729f7ced74a8e2/imageio-2.37.0-py3-none-any.whl", hash = "sha256:11efa15b87bc7871b61590326b2d635439acc321cf7f8ce996f812543ce10eed", size = 315796 }, ] +[[package]] +name = "importlib-resources" +version = "6.4.5" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version < '3.9'", +] +dependencies = [ + { name = "zipp", version = "3.20.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.9'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/98/be/f3e8c6081b684f176b761e6a2fef02a0be939740ed6f54109a2951d806f3/importlib_resources-6.4.5.tar.gz", hash = "sha256:980862a1d16c9e147a59603677fa2aa5fd82b87f223b6cb870695bcfce830065", size = 43372 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e1/6a/4604f9ae2fa62ef47b9de2fa5ad599589d28c9fd1d335f32759813dfa91e/importlib_resources-6.4.5-py3-none-any.whl", hash = "sha256:ac29d5f956f01d5e4bb63102a5a19957f1b9175e45649977264a1416783bb717", size = 36115 }, +] + +[[package]] +name = "importlib-resources" +version = "6.5.2" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version == '3.9.*'", +] +dependencies = [ + { name = "zipp", version = "3.21.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version == '3.9.*'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/cf/8c/f834fbf984f691b4f7ff60f50b514cc3de5cc08abfc3295564dd89c5e2e7/importlib_resources-6.5.2.tar.gz", hash = "sha256:185f87adef5bcc288449d98fb4fba07cea78bc036455dd44c5fc4a2fe78fed2c", size = 44693 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a4/ed/1f1afb2e9e7f38a545d628f864d562a5ae64fe6f7a10e28ffb9b185b4e89/importlib_resources-6.5.2-py3-none-any.whl", hash = "sha256:789cfdc3ed28c78b67a06acb8126751ced69a3d5f79c095a98298cd8a760ccec", size = 37461 }, +] + [[package]] name = "iniconfig" version = "2.1.0" @@ -365,6 +681,222 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/2c/e1/e6716421ea10d38022b952c159d5161ca1193197fb744506875fbb87ea7b/iniconfig-2.1.0-py3-none-any.whl", hash = "sha256:9deba5723312380e77435581c6bf4935c94cbfab9b1ed33ef8d238ea168eb760", size = 6050 }, ] +[[package]] +name = "kiwisolver" +version = "1.4.7" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version == '3.9.*'", + "python_full_version < '3.9'", +] +sdist = { url = "https://files.pythonhosted.org/packages/85/4d/2255e1c76304cbd60b48cee302b66d1dde4468dc5b1160e4b7cb43778f2a/kiwisolver-1.4.7.tar.gz", hash = "sha256:9893ff81bd7107f7b685d3017cc6583daadb4fc26e4a888350df530e41980a60", size = 97286 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/97/14/fc943dd65268a96347472b4fbe5dcc2f6f55034516f80576cd0dd3a8930f/kiwisolver-1.4.7-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:8a9c83f75223d5e48b0bc9cb1bf2776cf01563e00ade8775ffe13b0b6e1af3a6", size = 122440 }, + { url = "https://files.pythonhosted.org/packages/1e/46/e68fed66236b69dd02fcdb506218c05ac0e39745d696d22709498896875d/kiwisolver-1.4.7-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:58370b1ffbd35407444d57057b57da5d6549d2d854fa30249771775c63b5fe17", size = 65758 }, + { url = "https://files.pythonhosted.org/packages/ef/fa/65de49c85838681fc9cb05de2a68067a683717321e01ddafb5b8024286f0/kiwisolver-1.4.7-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:aa0abdf853e09aff551db11fce173e2177d00786c688203f52c87ad7fcd91ef9", size = 64311 }, + { url = "https://files.pythonhosted.org/packages/42/9c/cc8d90f6ef550f65443bad5872ffa68f3dee36de4974768628bea7c14979/kiwisolver-1.4.7-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:8d53103597a252fb3ab8b5845af04c7a26d5e7ea8122303dd7a021176a87e8b9", size = 1637109 }, + { url = "https://files.pythonhosted.org/packages/55/91/0a57ce324caf2ff5403edab71c508dd8f648094b18cfbb4c8cc0fde4a6ac/kiwisolver-1.4.7-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:88f17c5ffa8e9462fb79f62746428dd57b46eb931698e42e990ad63103f35e6c", size = 1617814 }, + { url = "https://files.pythonhosted.org/packages/12/5d/c36140313f2510e20207708adf36ae4919416d697ee0236b0ddfb6fd1050/kiwisolver-1.4.7-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:88a9ca9c710d598fd75ee5de59d5bda2684d9db36a9f50b6125eaea3969c2599", size = 1400881 }, + { url = "https://files.pythonhosted.org/packages/56/d0/786e524f9ed648324a466ca8df86298780ef2b29c25313d9a4f16992d3cf/kiwisolver-1.4.7-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f4d742cb7af1c28303a51b7a27aaee540e71bb8e24f68c736f6f2ffc82f2bf05", size = 1512972 }, + { url = "https://files.pythonhosted.org/packages/67/5a/77851f2f201e6141d63c10a0708e996a1363efaf9e1609ad0441b343763b/kiwisolver-1.4.7-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e28c7fea2196bf4c2f8d46a0415c77a1c480cc0724722f23d7410ffe9842c407", size = 1444787 }, + { url = "https://files.pythonhosted.org/packages/06/5f/1f5eaab84355885e224a6fc8d73089e8713dc7e91c121f00b9a1c58a2195/kiwisolver-1.4.7-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:e968b84db54f9d42046cf154e02911e39c0435c9801681e3fc9ce8a3c4130278", size = 2199212 }, + { url = "https://files.pythonhosted.org/packages/b5/28/9152a3bfe976a0ae21d445415defc9d1cd8614b2910b7614b30b27a47270/kiwisolver-1.4.7-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:0c18ec74c0472de033e1bebb2911c3c310eef5649133dd0bedf2a169a1b269e5", size = 2346399 }, + { url = "https://files.pythonhosted.org/packages/26/f6/453d1904c52ac3b400f4d5e240ac5fec25263716723e44be65f4d7149d13/kiwisolver-1.4.7-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:8f0ea6da6d393d8b2e187e6a5e3fb81f5862010a40c3945e2c6d12ae45cfb2ad", size = 2308688 }, + { url = "https://files.pythonhosted.org/packages/5a/9a/d4968499441b9ae187e81745e3277a8b4d7c60840a52dc9d535a7909fac3/kiwisolver-1.4.7-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:f106407dda69ae456dd1227966bf445b157ccc80ba0dff3802bb63f30b74e895", size = 2445493 }, + { url = "https://files.pythonhosted.org/packages/07/c9/032267192e7828520dacb64dfdb1d74f292765f179e467c1cba97687f17d/kiwisolver-1.4.7-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:84ec80df401cfee1457063732d90022f93951944b5b58975d34ab56bb150dfb3", size = 2262191 }, + { url = "https://files.pythonhosted.org/packages/6c/ad/db0aedb638a58b2951da46ddaeecf204be8b4f5454df020d850c7fa8dca8/kiwisolver-1.4.7-cp310-cp310-win32.whl", hash = "sha256:71bb308552200fb2c195e35ef05de12f0c878c07fc91c270eb3d6e41698c3bcc", size = 46644 }, + { url = "https://files.pythonhosted.org/packages/12/ca/d0f7b7ffbb0be1e7c2258b53554efec1fd652921f10d7d85045aff93ab61/kiwisolver-1.4.7-cp310-cp310-win_amd64.whl", hash = "sha256:44756f9fd339de0fb6ee4f8c1696cfd19b2422e0d70b4cefc1cc7f1f64045a8c", size = 55877 }, + { url = "https://files.pythonhosted.org/packages/97/6c/cfcc128672f47a3e3c0d918ecb67830600078b025bfc32d858f2e2d5c6a4/kiwisolver-1.4.7-cp310-cp310-win_arm64.whl", hash = "sha256:78a42513018c41c2ffd262eb676442315cbfe3c44eed82385c2ed043bc63210a", size = 48347 }, + { url = "https://files.pythonhosted.org/packages/e9/44/77429fa0a58f941d6e1c58da9efe08597d2e86bf2b2cce6626834f49d07b/kiwisolver-1.4.7-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:d2b0e12a42fb4e72d509fc994713d099cbb15ebf1103545e8a45f14da2dfca54", size = 122442 }, + { url = "https://files.pythonhosted.org/packages/e5/20/8c75caed8f2462d63c7fd65e16c832b8f76cda331ac9e615e914ee80bac9/kiwisolver-1.4.7-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:2a8781ac3edc42ea4b90bc23e7d37b665d89423818e26eb6df90698aa2287c95", size = 65762 }, + { url = "https://files.pythonhosted.org/packages/f4/98/fe010f15dc7230f45bc4cf367b012d651367fd203caaa992fd1f5963560e/kiwisolver-1.4.7-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:46707a10836894b559e04b0fd143e343945c97fd170d69a2d26d640b4e297935", size = 64319 }, + { url = "https://files.pythonhosted.org/packages/8b/1b/b5d618f4e58c0675654c1e5051bcf42c776703edb21c02b8c74135541f60/kiwisolver-1.4.7-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ef97b8df011141c9b0f6caf23b29379f87dd13183c978a30a3c546d2c47314cb", size = 1334260 }, + { url = "https://files.pythonhosted.org/packages/b8/01/946852b13057a162a8c32c4c8d2e9ed79f0bb5d86569a40c0b5fb103e373/kiwisolver-1.4.7-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3ab58c12a2cd0fc769089e6d38466c46d7f76aced0a1f54c77652446733d2d02", size = 1426589 }, + { url = "https://files.pythonhosted.org/packages/70/d1/c9f96df26b459e15cf8a965304e6e6f4eb291e0f7a9460b4ad97b047561e/kiwisolver-1.4.7-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:803b8e1459341c1bb56d1c5c010406d5edec8a0713a0945851290a7930679b51", size = 1541080 }, + { url = "https://files.pythonhosted.org/packages/d3/73/2686990eb8b02d05f3de759d6a23a4ee7d491e659007dd4c075fede4b5d0/kiwisolver-1.4.7-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f9a9e8a507420fe35992ee9ecb302dab68550dedc0da9e2880dd88071c5fb052", size = 1470049 }, + { url = "https://files.pythonhosted.org/packages/a7/4b/2db7af3ed3af7c35f388d5f53c28e155cd402a55432d800c543dc6deb731/kiwisolver-1.4.7-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:18077b53dc3bb490e330669a99920c5e6a496889ae8c63b58fbc57c3d7f33a18", size = 1426376 }, + { url = "https://files.pythonhosted.org/packages/05/83/2857317d04ea46dc5d115f0df7e676997bbd968ced8e2bd6f7f19cfc8d7f/kiwisolver-1.4.7-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:6af936f79086a89b3680a280c47ea90b4df7047b5bdf3aa5c524bbedddb9e545", size = 2222231 }, + { url = "https://files.pythonhosted.org/packages/0d/b5/866f86f5897cd4ab6d25d22e403404766a123f138bd6a02ecb2cdde52c18/kiwisolver-1.4.7-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:3abc5b19d24af4b77d1598a585b8a719beb8569a71568b66f4ebe1fb0449460b", size = 2368634 }, + { url = "https://files.pythonhosted.org/packages/c1/ee/73de8385403faba55f782a41260210528fe3273d0cddcf6d51648202d6d0/kiwisolver-1.4.7-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:933d4de052939d90afbe6e9d5273ae05fb836cc86c15b686edd4b3560cc0ee36", size = 2329024 }, + { url = "https://files.pythonhosted.org/packages/a1/e7/cd101d8cd2cdfaa42dc06c433df17c8303d31129c9fdd16c0ea37672af91/kiwisolver-1.4.7-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:65e720d2ab2b53f1f72fb5da5fb477455905ce2c88aaa671ff0a447c2c80e8e3", size = 2468484 }, + { url = "https://files.pythonhosted.org/packages/e1/72/84f09d45a10bc57a40bb58b81b99d8f22b58b2040c912b7eb97ebf625bf2/kiwisolver-1.4.7-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:3bf1ed55088f214ba6427484c59553123fdd9b218a42bbc8c6496d6754b1e523", size = 2284078 }, + { url = "https://files.pythonhosted.org/packages/d2/d4/71828f32b956612dc36efd7be1788980cb1e66bfb3706e6dec9acad9b4f9/kiwisolver-1.4.7-cp311-cp311-win32.whl", hash = "sha256:4c00336b9dd5ad96d0a558fd18a8b6f711b7449acce4c157e7343ba92dd0cf3d", size = 46645 }, + { url = "https://files.pythonhosted.org/packages/a1/65/d43e9a20aabcf2e798ad1aff6c143ae3a42cf506754bcb6a7ed8259c8425/kiwisolver-1.4.7-cp311-cp311-win_amd64.whl", hash = "sha256:929e294c1ac1e9f615c62a4e4313ca1823ba37326c164ec720a803287c4c499b", size = 56022 }, + { url = "https://files.pythonhosted.org/packages/35/b3/9f75a2e06f1b4ca00b2b192bc2b739334127d27f1d0625627ff8479302ba/kiwisolver-1.4.7-cp311-cp311-win_arm64.whl", hash = "sha256:e33e8fbd440c917106b237ef1a2f1449dfbb9b6f6e1ce17c94cd6a1e0d438376", size = 48536 }, + { url = "https://files.pythonhosted.org/packages/97/9c/0a11c714cf8b6ef91001c8212c4ef207f772dd84540104952c45c1f0a249/kiwisolver-1.4.7-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:5360cc32706dab3931f738d3079652d20982511f7c0ac5711483e6eab08efff2", size = 121808 }, + { url = "https://files.pythonhosted.org/packages/f2/d8/0fe8c5f5d35878ddd135f44f2af0e4e1d379e1c7b0716f97cdcb88d4fd27/kiwisolver-1.4.7-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:942216596dc64ddb25adb215c3c783215b23626f8d84e8eff8d6d45c3f29f75a", size = 65531 }, + { url = "https://files.pythonhosted.org/packages/80/c5/57fa58276dfdfa612241d640a64ca2f76adc6ffcebdbd135b4ef60095098/kiwisolver-1.4.7-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:48b571ecd8bae15702e4f22d3ff6a0f13e54d3d00cd25216d5e7f658242065ee", size = 63894 }, + { url = "https://files.pythonhosted.org/packages/8b/e9/26d3edd4c4ad1c5b891d8747a4f81b1b0aba9fb9721de6600a4adc09773b/kiwisolver-1.4.7-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ad42ba922c67c5f219097b28fae965e10045ddf145d2928bfac2eb2e17673640", size = 1369296 }, + { url = "https://files.pythonhosted.org/packages/b6/67/3f4850b5e6cffb75ec40577ddf54f7b82b15269cc5097ff2e968ee32ea7d/kiwisolver-1.4.7-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:612a10bdae23404a72941a0fc8fa2660c6ea1217c4ce0dbcab8a8f6543ea9e7f", size = 1461450 }, + { url = "https://files.pythonhosted.org/packages/52/be/86cbb9c9a315e98a8dc6b1d23c43cffd91d97d49318854f9c37b0e41cd68/kiwisolver-1.4.7-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9e838bba3a3bac0fe06d849d29772eb1afb9745a59710762e4ba3f4cb8424483", size = 1579168 }, + { url = "https://files.pythonhosted.org/packages/0f/00/65061acf64bd5fd34c1f4ae53f20b43b0a017a541f242a60b135b9d1e301/kiwisolver-1.4.7-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:22f499f6157236c19f4bbbd472fa55b063db77a16cd74d49afe28992dff8c258", size = 1507308 }, + { url = "https://files.pythonhosted.org/packages/21/e4/c0b6746fd2eb62fe702118b3ca0cb384ce95e1261cfada58ff693aeec08a/kiwisolver-1.4.7-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:693902d433cf585133699972b6d7c42a8b9f8f826ebcaf0132ff55200afc599e", size = 1464186 }, + { url = "https://files.pythonhosted.org/packages/0a/0f/529d0a9fffb4d514f2782c829b0b4b371f7f441d61aa55f1de1c614c4ef3/kiwisolver-1.4.7-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:4e77f2126c3e0b0d055f44513ed349038ac180371ed9b52fe96a32aa071a5107", size = 2247877 }, + { url = "https://files.pythonhosted.org/packages/d1/e1/66603ad779258843036d45adcbe1af0d1a889a07af4635f8b4ec7dccda35/kiwisolver-1.4.7-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:657a05857bda581c3656bfc3b20e353c232e9193eb167766ad2dc58b56504948", size = 2404204 }, + { url = "https://files.pythonhosted.org/packages/8d/61/de5fb1ca7ad1f9ab7970e340a5b833d735df24689047de6ae71ab9d8d0e7/kiwisolver-1.4.7-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:4bfa75a048c056a411f9705856abfc872558e33c055d80af6a380e3658766038", size = 2352461 }, + { url = "https://files.pythonhosted.org/packages/ba/d2/0edc00a852e369827f7e05fd008275f550353f1f9bcd55db9363d779fc63/kiwisolver-1.4.7-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:34ea1de54beef1c104422d210c47c7d2a4999bdecf42c7b5718fbe59a4cac383", size = 2501358 }, + { url = "https://files.pythonhosted.org/packages/84/15/adc15a483506aec6986c01fb7f237c3aec4d9ed4ac10b756e98a76835933/kiwisolver-1.4.7-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:90da3b5f694b85231cf93586dad5e90e2d71b9428f9aad96952c99055582f520", size = 2314119 }, + { url = "https://files.pythonhosted.org/packages/36/08/3a5bb2c53c89660863a5aa1ee236912269f2af8762af04a2e11df851d7b2/kiwisolver-1.4.7-cp312-cp312-win32.whl", hash = "sha256:18e0cca3e008e17fe9b164b55735a325140a5a35faad8de92dd80265cd5eb80b", size = 46367 }, + { url = "https://files.pythonhosted.org/packages/19/93/c05f0a6d825c643779fc3c70876bff1ac221f0e31e6f701f0e9578690d70/kiwisolver-1.4.7-cp312-cp312-win_amd64.whl", hash = "sha256:58cb20602b18f86f83a5c87d3ee1c766a79c0d452f8def86d925e6c60fbf7bfb", size = 55884 }, + { url = "https://files.pythonhosted.org/packages/d2/f9/3828d8f21b6de4279f0667fb50a9f5215e6fe57d5ec0d61905914f5b6099/kiwisolver-1.4.7-cp312-cp312-win_arm64.whl", hash = "sha256:f5a8b53bdc0b3961f8b6125e198617c40aeed638b387913bf1ce78afb1b0be2a", size = 48528 }, + { url = "https://files.pythonhosted.org/packages/c4/06/7da99b04259b0f18b557a4effd1b9c901a747f7fdd84cf834ccf520cb0b2/kiwisolver-1.4.7-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:2e6039dcbe79a8e0f044f1c39db1986a1b8071051efba3ee4d74f5b365f5226e", size = 121913 }, + { url = "https://files.pythonhosted.org/packages/97/f5/b8a370d1aa593c17882af0a6f6755aaecd643640c0ed72dcfd2eafc388b9/kiwisolver-1.4.7-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:a1ecf0ac1c518487d9d23b1cd7139a6a65bc460cd101ab01f1be82ecf09794b6", size = 65627 }, + { url = "https://files.pythonhosted.org/packages/2a/fc/6c0374f7503522539e2d4d1b497f5ebad3f8ed07ab51aed2af988dd0fb65/kiwisolver-1.4.7-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:7ab9ccab2b5bd5702ab0803676a580fffa2aa178c2badc5557a84cc943fcf750", size = 63888 }, + { url = "https://files.pythonhosted.org/packages/bf/3e/0b7172793d0f41cae5c923492da89a2ffcd1adf764c16159ca047463ebd3/kiwisolver-1.4.7-cp313-cp313-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f816dd2277f8d63d79f9c8473a79fe54047bc0467754962840782c575522224d", size = 1369145 }, + { url = "https://files.pythonhosted.org/packages/77/92/47d050d6f6aced2d634258123f2688fbfef8ded3c5baf2c79d94d91f1f58/kiwisolver-1.4.7-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cf8bcc23ceb5a1b624572a1623b9f79d2c3b337c8c455405ef231933a10da379", size = 1461448 }, + { url = "https://files.pythonhosted.org/packages/9c/1b/8f80b18e20b3b294546a1adb41701e79ae21915f4175f311a90d042301cf/kiwisolver-1.4.7-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:dea0bf229319828467d7fca8c7c189780aa9ff679c94539eed7532ebe33ed37c", size = 1578750 }, + { url = "https://files.pythonhosted.org/packages/a4/fe/fe8e72f3be0a844f257cadd72689c0848c6d5c51bc1d60429e2d14ad776e/kiwisolver-1.4.7-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7c06a4c7cf15ec739ce0e5971b26c93638730090add60e183530d70848ebdd34", size = 1507175 }, + { url = "https://files.pythonhosted.org/packages/39/fa/cdc0b6105d90eadc3bee525fecc9179e2b41e1ce0293caaf49cb631a6aaf/kiwisolver-1.4.7-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:913983ad2deb14e66d83c28b632fd35ba2b825031f2fa4ca29675e665dfecbe1", size = 1463963 }, + { url = "https://files.pythonhosted.org/packages/6e/5c/0c03c4e542720c6177d4f408e56d1c8315899db72d46261a4e15b8b33a41/kiwisolver-1.4.7-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:5337ec7809bcd0f424c6b705ecf97941c46279cf5ed92311782c7c9c2026f07f", size = 2248220 }, + { url = "https://files.pythonhosted.org/packages/3d/ee/55ef86d5a574f4e767df7da3a3a7ff4954c996e12d4fbe9c408170cd7dcc/kiwisolver-1.4.7-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:4c26ed10c4f6fa6ddb329a5120ba3b6db349ca192ae211e882970bfc9d91420b", size = 2404463 }, + { url = "https://files.pythonhosted.org/packages/0f/6d/73ad36170b4bff4825dc588acf4f3e6319cb97cd1fb3eb04d9faa6b6f212/kiwisolver-1.4.7-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:c619b101e6de2222c1fcb0531e1b17bbffbe54294bfba43ea0d411d428618c27", size = 2352842 }, + { url = "https://files.pythonhosted.org/packages/0b/16/fa531ff9199d3b6473bb4d0f47416cdb08d556c03b8bc1cccf04e756b56d/kiwisolver-1.4.7-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:073a36c8273647592ea332e816e75ef8da5c303236ec0167196793eb1e34657a", size = 2501635 }, + { url = "https://files.pythonhosted.org/packages/78/7e/aa9422e78419db0cbe75fb86d8e72b433818f2e62e2e394992d23d23a583/kiwisolver-1.4.7-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:3ce6b2b0231bda412463e152fc18335ba32faf4e8c23a754ad50ffa70e4091ee", size = 2314556 }, + { url = "https://files.pythonhosted.org/packages/a8/b2/15f7f556df0a6e5b3772a1e076a9d9f6c538ce5f05bd590eca8106508e06/kiwisolver-1.4.7-cp313-cp313-win32.whl", hash = "sha256:f4c9aee212bc89d4e13f58be11a56cc8036cabad119259d12ace14b34476fd07", size = 46364 }, + { url = "https://files.pythonhosted.org/packages/0b/db/32e897e43a330eee8e4770bfd2737a9584b23e33587a0812b8e20aac38f7/kiwisolver-1.4.7-cp313-cp313-win_amd64.whl", hash = "sha256:8a3ec5aa8e38fc4c8af308917ce12c536f1c88452ce554027e55b22cbbfbff76", size = 55887 }, + { url = "https://files.pythonhosted.org/packages/c8/a4/df2bdca5270ca85fd25253049eb6708d4127be2ed0e5c2650217450b59e9/kiwisolver-1.4.7-cp313-cp313-win_arm64.whl", hash = "sha256:76c8094ac20ec259471ac53e774623eb62e6e1f56cd8690c67ce6ce4fcb05650", size = 48530 }, + { url = "https://files.pythonhosted.org/packages/57/d6/620247574d9e26fe24384087879e8399e309f0051782f95238090afa6ccc/kiwisolver-1.4.7-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:5d5abf8f8ec1f4e22882273c423e16cae834c36856cac348cfbfa68e01c40f3a", size = 122325 }, + { url = "https://files.pythonhosted.org/packages/bd/c6/572ad7d73dbd898cffa9050ffd7ff7e78a055a1d9b7accd6b4d1f50ec858/kiwisolver-1.4.7-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:aeb3531b196ef6f11776c21674dba836aeea9d5bd1cf630f869e3d90b16cfade", size = 65679 }, + { url = "https://files.pythonhosted.org/packages/14/a7/bb8ab10e12cc8764f4da0245d72dee4731cc720bdec0f085d5e9c6005b98/kiwisolver-1.4.7-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:b7d755065e4e866a8086c9bdada157133ff466476a2ad7861828e17b6026e22c", size = 64267 }, + { url = "https://files.pythonhosted.org/packages/54/a4/3b5a2542429e182a4df0528214e76803f79d016110f5e67c414a0357cd7d/kiwisolver-1.4.7-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:08471d4d86cbaec61f86b217dd938a83d85e03785f51121e791a6e6689a3be95", size = 1387236 }, + { url = "https://files.pythonhosted.org/packages/a6/d7/bc3005e906c1673953a3e31ee4f828157d5e07a62778d835dd937d624ea0/kiwisolver-1.4.7-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7bbfcb7165ce3d54a3dfbe731e470f65739c4c1f85bb1018ee912bae139e263b", size = 1500555 }, + { url = "https://files.pythonhosted.org/packages/09/a7/87cb30741f13b7af08446795dca6003491755805edc9c321fe996c1320b8/kiwisolver-1.4.7-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5d34eb8494bea691a1a450141ebb5385e4b69d38bb8403b5146ad279f4b30fa3", size = 1431684 }, + { url = "https://files.pythonhosted.org/packages/37/a4/1e4e2d8cdaa42c73d523413498445247e615334e39401ae49dae74885429/kiwisolver-1.4.7-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:9242795d174daa40105c1d86aba618e8eab7bf96ba8c3ee614da8302a9f95503", size = 1125811 }, + { url = "https://files.pythonhosted.org/packages/76/36/ae40d7a3171e06f55ac77fe5536079e7be1d8be2a8210e08975c7f9b4d54/kiwisolver-1.4.7-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:a0f64a48bb81af7450e641e3fe0b0394d7381e342805479178b3d335d60ca7cf", size = 1179987 }, + { url = "https://files.pythonhosted.org/packages/d8/5d/6e4894b9fdf836d8bd095729dff123bbbe6ad0346289287b45c800fae656/kiwisolver-1.4.7-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:8e045731a5416357638d1700927529e2b8ab304811671f665b225f8bf8d8f933", size = 2186817 }, + { url = "https://files.pythonhosted.org/packages/f0/2d/603079b2c2fd62890be0b0ebfc8bb6dda8a5253ca0758885596565b0dfc1/kiwisolver-1.4.7-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:4322872d5772cae7369f8351da1edf255a604ea7087fe295411397d0cfd9655e", size = 2332538 }, + { url = "https://files.pythonhosted.org/packages/bb/2a/9a28279c865c38a27960db38b07179143aafc94877945c209bfc553d9dd3/kiwisolver-1.4.7-cp38-cp38-musllinux_1_2_ppc64le.whl", hash = "sha256:e1631290ee9271dffe3062d2634c3ecac02c83890ada077d225e081aca8aab89", size = 2293890 }, + { url = "https://files.pythonhosted.org/packages/1a/4d/4da8967f3bf13c764984b8fbae330683ee5fbd555b4a5624ad2b9decc0ab/kiwisolver-1.4.7-cp38-cp38-musllinux_1_2_s390x.whl", hash = "sha256:edcfc407e4eb17e037bca59be0e85a2031a2ac87e4fed26d3e9df88b4165f92d", size = 2434677 }, + { url = "https://files.pythonhosted.org/packages/08/e9/a97a2b6b74dd850fa5974309367e025c06093a143befe9b962d0baebb4f0/kiwisolver-1.4.7-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:4d05d81ecb47d11e7f8932bd8b61b720bf0b41199358f3f5e36d38e28f0532c5", size = 2250339 }, + { url = "https://files.pythonhosted.org/packages/8a/e7/55507a387ba1766e69f5e13a79e1aefabdafe0532bee5d1972dfc42b3d16/kiwisolver-1.4.7-cp38-cp38-win32.whl", hash = "sha256:b38ac83d5f04b15e515fd86f312479d950d05ce2368d5413d46c088dda7de90a", size = 46932 }, + { url = "https://files.pythonhosted.org/packages/52/77/7e04cca2ff1dc6ee6b7654cebe233de72b7a3ec5616501b6f3144fb70740/kiwisolver-1.4.7-cp38-cp38-win_amd64.whl", hash = "sha256:d83db7cde68459fc803052a55ace60bea2bae361fc3b7a6d5da07e11954e4b09", size = 55836 }, + { url = "https://files.pythonhosted.org/packages/11/88/37ea0ea64512997b13d69772db8dcdc3bfca5442cda3a5e4bb943652ee3e/kiwisolver-1.4.7-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:3f9362ecfca44c863569d3d3c033dbe8ba452ff8eed6f6b5806382741a1334bd", size = 122449 }, + { url = "https://files.pythonhosted.org/packages/4e/45/5a5c46078362cb3882dcacad687c503089263c017ca1241e0483857791eb/kiwisolver-1.4.7-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:e8df2eb9b2bac43ef8b082e06f750350fbbaf2887534a5be97f6cf07b19d9583", size = 65757 }, + { url = "https://files.pythonhosted.org/packages/8a/be/a6ae58978772f685d48dd2e84460937761c53c4bbd84e42b0336473d9775/kiwisolver-1.4.7-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:f32d6edbc638cde7652bd690c3e728b25332acbadd7cad670cc4a02558d9c417", size = 64312 }, + { url = "https://files.pythonhosted.org/packages/f4/04/18ef6f452d311e1e1eb180c9bf5589187fa1f042db877e6fe443ef10099c/kiwisolver-1.4.7-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:e2e6c39bd7b9372b0be21456caab138e8e69cc0fc1190a9dfa92bd45a1e6e904", size = 1626966 }, + { url = "https://files.pythonhosted.org/packages/21/b1/40655f6c3fa11ce740e8a964fa8e4c0479c87d6a7944b95af799c7a55dfe/kiwisolver-1.4.7-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:dda56c24d869b1193fcc763f1284b9126550eaf84b88bbc7256e15028f19188a", size = 1607044 }, + { url = "https://files.pythonhosted.org/packages/fd/93/af67dbcfb9b3323bbd2c2db1385a7139d8f77630e4a37bb945b57188eb2d/kiwisolver-1.4.7-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:79849239c39b5e1fd906556c474d9b0439ea6792b637511f3fe3a41158d89ca8", size = 1391879 }, + { url = "https://files.pythonhosted.org/packages/40/6f/d60770ef98e77b365d96061d090c0cd9e23418121c55fff188fa4bdf0b54/kiwisolver-1.4.7-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5e3bc157fed2a4c02ec468de4ecd12a6e22818d4f09cde2c31ee3226ffbefab2", size = 1504751 }, + { url = "https://files.pythonhosted.org/packages/fa/3a/5f38667d313e983c432f3fcd86932177519ed8790c724e07d77d1de0188a/kiwisolver-1.4.7-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3da53da805b71e41053dc670f9a820d1157aae77b6b944e08024d17bcd51ef88", size = 1436990 }, + { url = "https://files.pythonhosted.org/packages/cb/3b/1520301a47326e6a6043b502647e42892be33b3f051e9791cc8bb43f1a32/kiwisolver-1.4.7-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:8705f17dfeb43139a692298cb6637ee2e59c0194538153e83e9ee0c75c2eddde", size = 2191122 }, + { url = "https://files.pythonhosted.org/packages/cf/c4/eb52da300c166239a2233f1f9c4a1b767dfab98fae27681bfb7ea4873cb6/kiwisolver-1.4.7-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:82a5c2f4b87c26bb1a0ef3d16b5c4753434633b83d365cc0ddf2770c93829e3c", size = 2338126 }, + { url = "https://files.pythonhosted.org/packages/1a/cb/42b92fd5eadd708dd9107c089e817945500685f3437ce1fd387efebc6d6e/kiwisolver-1.4.7-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:ce8be0466f4c0d585cdb6c1e2ed07232221df101a4c6f28821d2aa754ca2d9e2", size = 2298313 }, + { url = "https://files.pythonhosted.org/packages/4f/eb/be25aa791fe5fc75a8b1e0c965e00f942496bc04635c9aae8035f6b76dcd/kiwisolver-1.4.7-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:409afdfe1e2e90e6ee7fc896f3df9a7fec8e793e58bfa0d052c8a82f99c37abb", size = 2437784 }, + { url = "https://files.pythonhosted.org/packages/c5/22/30a66be7f3368d76ff95689e1c2e28d382383952964ab15330a15d8bfd03/kiwisolver-1.4.7-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:5b9c3f4ee0b9a439d2415012bd1b1cc2df59e4d6a9939f4d669241d30b414327", size = 2253988 }, + { url = "https://files.pythonhosted.org/packages/35/d3/5f2ecb94b5211c8a04f218a76133cc8d6d153b0f9cd0b45fad79907f0689/kiwisolver-1.4.7-cp39-cp39-win32.whl", hash = "sha256:a79ae34384df2b615eefca647a2873842ac3b596418032bef9a7283675962644", size = 46980 }, + { url = "https://files.pythonhosted.org/packages/ef/17/cd10d020578764ea91740204edc6b3236ed8106228a46f568d716b11feb2/kiwisolver-1.4.7-cp39-cp39-win_amd64.whl", hash = "sha256:cf0438b42121a66a3a667de17e779330fc0f20b0d97d59d2f2121e182b0505e4", size = 55847 }, + { url = "https://files.pythonhosted.org/packages/91/84/32232502020bd78d1d12be7afde15811c64a95ed1f606c10456db4e4c3ac/kiwisolver-1.4.7-cp39-cp39-win_arm64.whl", hash = "sha256:764202cc7e70f767dab49e8df52c7455e8de0df5d858fa801a11aa0d882ccf3f", size = 48494 }, + { url = "https://files.pythonhosted.org/packages/ac/59/741b79775d67ab67ced9bb38552da688c0305c16e7ee24bba7a2be253fb7/kiwisolver-1.4.7-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:94252291e3fe68001b1dd747b4c0b3be12582839b95ad4d1b641924d68fd4643", size = 59491 }, + { url = "https://files.pythonhosted.org/packages/58/cc/fb239294c29a5656e99e3527f7369b174dd9cc7c3ef2dea7cb3c54a8737b/kiwisolver-1.4.7-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:5b7dfa3b546da08a9f622bb6becdb14b3e24aaa30adba66749d38f3cc7ea9706", size = 57648 }, + { url = "https://files.pythonhosted.org/packages/3b/ef/2f009ac1f7aab9f81efb2d837301d255279d618d27b6015780115ac64bdd/kiwisolver-1.4.7-pp310-pypy310_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bd3de6481f4ed8b734da5df134cd5a6a64fe32124fe83dde1e5b5f29fe30b1e6", size = 84257 }, + { url = "https://files.pythonhosted.org/packages/81/e1/c64f50987f85b68b1c52b464bb5bf73e71570c0f7782d626d1eb283ad620/kiwisolver-1.4.7-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a91b5f9f1205845d488c928e8570dcb62b893372f63b8b6e98b863ebd2368ff2", size = 80906 }, + { url = "https://files.pythonhosted.org/packages/fd/71/1687c5c0a0be2cee39a5c9c389e546f9c6e215e46b691d00d9f646892083/kiwisolver-1.4.7-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:40fa14dbd66b8b8f470d5fc79c089a66185619d31645f9b0773b88b19f7223c4", size = 79951 }, + { url = "https://files.pythonhosted.org/packages/ea/8b/d7497df4a1cae9367adf21665dd1f896c2a7aeb8769ad77b662c5e2bcce7/kiwisolver-1.4.7-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:eb542fe7933aa09d8d8f9d9097ef37532a7df6497819d16efe4359890a2f417a", size = 55715 }, + { url = "https://files.pythonhosted.org/packages/64/f3/2403d90821fffe496df16f6996cb328b90b0d80c06d2938a930a7732b4f1/kiwisolver-1.4.7-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:bfa1acfa0c54932d5607e19a2c24646fb4c1ae2694437789129cf099789a3b00", size = 59662 }, + { url = "https://files.pythonhosted.org/packages/fa/7d/8f409736a4a6ac04354fa530ebf46682ddb1539b0bae15f4731ff2c575bc/kiwisolver-1.4.7-pp38-pypy38_pp73-macosx_11_0_arm64.whl", hash = "sha256:eee3ea935c3d227d49b4eb85660ff631556841f6e567f0f7bda972df6c2c9935", size = 57753 }, + { url = "https://files.pythonhosted.org/packages/4c/a5/3937c9abe8eedb1356071739ad437a0b486cbad27d54f4ec4733d24882ac/kiwisolver-1.4.7-pp38-pypy38_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:f3160309af4396e0ed04db259c3ccbfdc3621b5559b5453075e5de555e1f3a1b", size = 103564 }, + { url = "https://files.pythonhosted.org/packages/b2/18/a5ae23888f010b90d5eb8d196fed30e268056b2ded54d25b38a193bb70e9/kiwisolver-1.4.7-pp38-pypy38_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:a17f6a29cf8935e587cc8a4dbfc8368c55edc645283db0ce9801016f83526c2d", size = 95264 }, + { url = "https://files.pythonhosted.org/packages/f9/d0/c4240ae86306d4395e9701f1d7e6ddcc6d60c28cb0127139176cfcfc9ebe/kiwisolver-1.4.7-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:10849fb2c1ecbfae45a693c070e0320a91b35dd4bcf58172c023b994283a124d", size = 78197 }, + { url = "https://files.pythonhosted.org/packages/62/db/62423f0ab66813376a35c1e7da488ebdb4e808fcb54b7cec33959717bda1/kiwisolver-1.4.7-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:ac542bf38a8a4be2dc6b15248d36315ccc65f0743f7b1a76688ffb6b5129a5c2", size = 56080 }, + { url = "https://files.pythonhosted.org/packages/d5/df/ce37d9b26f07ab90880923c94d12a6ff4d27447096b4c849bfc4339ccfdf/kiwisolver-1.4.7-pp39-pypy39_pp73-macosx_10_15_x86_64.whl", hash = "sha256:8b01aac285f91ca889c800042c35ad3b239e704b150cfd3382adfc9dcc780e39", size = 58666 }, + { url = "https://files.pythonhosted.org/packages/b0/d3/e4b04f43bc629ac8e186b77b2b1a251cdfa5b7610fa189dc0db622672ce6/kiwisolver-1.4.7-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:48be928f59a1f5c8207154f935334d374e79f2b5d212826307d072595ad76a2e", size = 57088 }, + { url = "https://files.pythonhosted.org/packages/30/1c/752df58e2d339e670a535514d2db4fe8c842ce459776b8080fbe08ebb98e/kiwisolver-1.4.7-pp39-pypy39_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f37cfe618a117e50d8c240555331160d73d0411422b59b5ee217843d7b693608", size = 84321 }, + { url = "https://files.pythonhosted.org/packages/f0/f8/fe6484e847bc6e238ec9f9828089fb2c0bb53f2f5f3a79351fde5b565e4f/kiwisolver-1.4.7-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:599b5c873c63a1f6ed7eead644a8a380cfbdf5db91dcb6f85707aaab213b1674", size = 80776 }, + { url = "https://files.pythonhosted.org/packages/9b/57/d7163c0379f250ef763aba85330a19feefb5ce6cb541ade853aaba881524/kiwisolver-1.4.7-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:801fa7802e5cfabe3ab0c81a34c323a319b097dfb5004be950482d882f3d7225", size = 79984 }, + { url = "https://files.pythonhosted.org/packages/8c/95/4a103776c265d13b3d2cd24fb0494d4e04ea435a8ef97e1b2c026d43250b/kiwisolver-1.4.7-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:0c6c43471bc764fad4bc99c5c2d6d16a676b1abf844ca7c8702bdae92df01ee0", size = 55811 }, +] + +[[package]] +name = "kiwisolver" +version = "1.4.8" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.11'", + "python_full_version == '3.10.*'", +] +sdist = { url = "https://files.pythonhosted.org/packages/82/59/7c91426a8ac292e1cdd53a63b6d9439abd573c875c3f92c146767dd33faf/kiwisolver-1.4.8.tar.gz", hash = "sha256:23d5f023bdc8c7e54eb65f03ca5d5bb25b601eac4d7f1a042888a1f45237987e", size = 97538 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/47/5f/4d8e9e852d98ecd26cdf8eaf7ed8bc33174033bba5e07001b289f07308fd/kiwisolver-1.4.8-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:88c6f252f6816a73b1f8c904f7bbe02fd67c09a69f7cb8a0eecdbf5ce78e63db", size = 124623 }, + { url = "https://files.pythonhosted.org/packages/1d/70/7f5af2a18a76fe92ea14675f8bd88ce53ee79e37900fa5f1a1d8e0b42998/kiwisolver-1.4.8-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:c72941acb7b67138f35b879bbe85be0f6c6a70cab78fe3ef6db9c024d9223e5b", size = 66720 }, + { url = "https://files.pythonhosted.org/packages/c6/13/e15f804a142353aefd089fadc8f1d985561a15358c97aca27b0979cb0785/kiwisolver-1.4.8-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:ce2cf1e5688edcb727fdf7cd1bbd0b6416758996826a8be1d958f91880d0809d", size = 65413 }, + { url = "https://files.pythonhosted.org/packages/ce/6d/67d36c4d2054e83fb875c6b59d0809d5c530de8148846b1370475eeeece9/kiwisolver-1.4.8-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:c8bf637892dc6e6aad2bc6d4d69d08764166e5e3f69d469e55427b6ac001b19d", size = 1650826 }, + { url = "https://files.pythonhosted.org/packages/de/c6/7b9bb8044e150d4d1558423a1568e4f227193662a02231064e3824f37e0a/kiwisolver-1.4.8-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:034d2c891f76bd3edbdb3ea11140d8510dca675443da7304205a2eaa45d8334c", size = 1628231 }, + { url = "https://files.pythonhosted.org/packages/b6/38/ad10d437563063eaaedbe2c3540a71101fc7fb07a7e71f855e93ea4de605/kiwisolver-1.4.8-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d47b28d1dfe0793d5e96bce90835e17edf9a499b53969b03c6c47ea5985844c3", size = 1408938 }, + { url = "https://files.pythonhosted.org/packages/52/ce/c0106b3bd7f9e665c5f5bc1e07cc95b5dabd4e08e3dad42dbe2faad467e7/kiwisolver-1.4.8-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:eb158fe28ca0c29f2260cca8c43005329ad58452c36f0edf298204de32a9a3ed", size = 1422799 }, + { url = "https://files.pythonhosted.org/packages/d0/87/efb704b1d75dc9758087ba374c0f23d3254505edaedd09cf9d247f7878b9/kiwisolver-1.4.8-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d5536185fce131780ebd809f8e623bf4030ce1b161353166c49a3c74c287897f", size = 1354362 }, + { url = "https://files.pythonhosted.org/packages/eb/b3/fd760dc214ec9a8f208b99e42e8f0130ff4b384eca8b29dd0efc62052176/kiwisolver-1.4.8-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:369b75d40abedc1da2c1f4de13f3482cb99e3237b38726710f4a793432b1c5ff", size = 2222695 }, + { url = "https://files.pythonhosted.org/packages/a2/09/a27fb36cca3fc01700687cc45dae7a6a5f8eeb5f657b9f710f788748e10d/kiwisolver-1.4.8-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:641f2ddf9358c80faa22e22eb4c9f54bd3f0e442e038728f500e3b978d00aa7d", size = 2370802 }, + { url = "https://files.pythonhosted.org/packages/3d/c3/ba0a0346db35fe4dc1f2f2cf8b99362fbb922d7562e5f911f7ce7a7b60fa/kiwisolver-1.4.8-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:d561d2d8883e0819445cfe58d7ddd673e4015c3c57261d7bdcd3710d0d14005c", size = 2334646 }, + { url = "https://files.pythonhosted.org/packages/41/52/942cf69e562f5ed253ac67d5c92a693745f0bed3c81f49fc0cbebe4d6b00/kiwisolver-1.4.8-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:1732e065704b47c9afca7ffa272f845300a4eb959276bf6970dc07265e73b605", size = 2467260 }, + { url = "https://files.pythonhosted.org/packages/32/26/2d9668f30d8a494b0411d4d7d4ea1345ba12deb6a75274d58dd6ea01e951/kiwisolver-1.4.8-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:bcb1ebc3547619c3b58a39e2448af089ea2ef44b37988caf432447374941574e", size = 2288633 }, + { url = "https://files.pythonhosted.org/packages/98/99/0dd05071654aa44fe5d5e350729961e7bb535372935a45ac89a8924316e6/kiwisolver-1.4.8-cp310-cp310-win_amd64.whl", hash = "sha256:89c107041f7b27844179ea9c85d6da275aa55ecf28413e87624d033cf1f6b751", size = 71885 }, + { url = "https://files.pythonhosted.org/packages/6c/fc/822e532262a97442989335394d441cd1d0448c2e46d26d3e04efca84df22/kiwisolver-1.4.8-cp310-cp310-win_arm64.whl", hash = "sha256:b5773efa2be9eb9fcf5415ea3ab70fc785d598729fd6057bea38d539ead28271", size = 65175 }, + { url = "https://files.pythonhosted.org/packages/da/ed/c913ee28936c371418cb167b128066ffb20bbf37771eecc2c97edf8a6e4c/kiwisolver-1.4.8-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:a4d3601908c560bdf880f07d94f31d734afd1bb71e96585cace0e38ef44c6d84", size = 124635 }, + { url = "https://files.pythonhosted.org/packages/4c/45/4a7f896f7467aaf5f56ef093d1f329346f3b594e77c6a3c327b2d415f521/kiwisolver-1.4.8-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:856b269c4d28a5c0d5e6c1955ec36ebfd1651ac00e1ce0afa3e28da95293b561", size = 66717 }, + { url = "https://files.pythonhosted.org/packages/5f/b4/c12b3ac0852a3a68f94598d4c8d569f55361beef6159dce4e7b624160da2/kiwisolver-1.4.8-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:c2b9a96e0f326205af81a15718a9073328df1173a2619a68553decb7097fd5d7", size = 65413 }, + { url = "https://files.pythonhosted.org/packages/a9/98/1df4089b1ed23d83d410adfdc5947245c753bddfbe06541c4aae330e9e70/kiwisolver-1.4.8-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c5020c83e8553f770cb3b5fc13faac40f17e0b205bd237aebd21d53d733adb03", size = 1343994 }, + { url = "https://files.pythonhosted.org/packages/8d/bf/b4b169b050c8421a7c53ea1ea74e4ef9c335ee9013216c558a047f162d20/kiwisolver-1.4.8-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dace81d28c787956bfbfbbfd72fdcef014f37d9b48830829e488fdb32b49d954", size = 1434804 }, + { url = "https://files.pythonhosted.org/packages/66/5a/e13bd341fbcf73325ea60fdc8af752addf75c5079867af2e04cc41f34434/kiwisolver-1.4.8-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:11e1022b524bd48ae56c9b4f9296bce77e15a2e42a502cceba602f804b32bb79", size = 1450690 }, + { url = "https://files.pythonhosted.org/packages/9b/4f/5955dcb376ba4a830384cc6fab7d7547bd6759fe75a09564910e9e3bb8ea/kiwisolver-1.4.8-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3b9b4d2892fefc886f30301cdd80debd8bb01ecdf165a449eb6e78f79f0fabd6", size = 1376839 }, + { url = "https://files.pythonhosted.org/packages/3a/97/5edbed69a9d0caa2e4aa616ae7df8127e10f6586940aa683a496c2c280b9/kiwisolver-1.4.8-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3a96c0e790ee875d65e340ab383700e2b4891677b7fcd30a699146f9384a2bb0", size = 1435109 }, + { url = "https://files.pythonhosted.org/packages/13/fc/e756382cb64e556af6c1809a1bbb22c141bbc2445049f2da06b420fe52bf/kiwisolver-1.4.8-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:23454ff084b07ac54ca8be535f4174170c1094a4cff78fbae4f73a4bcc0d4dab", size = 2245269 }, + { url = "https://files.pythonhosted.org/packages/76/15/e59e45829d7f41c776d138245cabae6515cb4eb44b418f6d4109c478b481/kiwisolver-1.4.8-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:87b287251ad6488e95b4f0b4a79a6d04d3ea35fde6340eb38fbd1ca9cd35bbbc", size = 2393468 }, + { url = "https://files.pythonhosted.org/packages/e9/39/483558c2a913ab8384d6e4b66a932406f87c95a6080112433da5ed668559/kiwisolver-1.4.8-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:b21dbe165081142b1232a240fc6383fd32cdd877ca6cc89eab93e5f5883e1c25", size = 2355394 }, + { url = "https://files.pythonhosted.org/packages/01/aa/efad1fbca6570a161d29224f14b082960c7e08268a133fe5dc0f6906820e/kiwisolver-1.4.8-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:768cade2c2df13db52475bd28d3a3fac8c9eff04b0e9e2fda0f3760f20b3f7fc", size = 2490901 }, + { url = "https://files.pythonhosted.org/packages/c9/4f/15988966ba46bcd5ab9d0c8296914436720dd67fca689ae1a75b4ec1c72f/kiwisolver-1.4.8-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:d47cfb2650f0e103d4bf68b0b5804c68da97272c84bb12850d877a95c056bd67", size = 2312306 }, + { url = "https://files.pythonhosted.org/packages/2d/27/bdf1c769c83f74d98cbc34483a972f221440703054894a37d174fba8aa68/kiwisolver-1.4.8-cp311-cp311-win_amd64.whl", hash = "sha256:ed33ca2002a779a2e20eeb06aea7721b6e47f2d4b8a8ece979d8ba9e2a167e34", size = 71966 }, + { url = "https://files.pythonhosted.org/packages/4a/c9/9642ea855604aeb2968a8e145fc662edf61db7632ad2e4fb92424be6b6c0/kiwisolver-1.4.8-cp311-cp311-win_arm64.whl", hash = "sha256:16523b40aab60426ffdebe33ac374457cf62863e330a90a0383639ce14bf44b2", size = 65311 }, + { url = "https://files.pythonhosted.org/packages/fc/aa/cea685c4ab647f349c3bc92d2daf7ae34c8e8cf405a6dcd3a497f58a2ac3/kiwisolver-1.4.8-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:d6af5e8815fd02997cb6ad9bbed0ee1e60014438ee1a5c2444c96f87b8843502", size = 124152 }, + { url = "https://files.pythonhosted.org/packages/c5/0b/8db6d2e2452d60d5ebc4ce4b204feeb16176a851fd42462f66ade6808084/kiwisolver-1.4.8-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:bade438f86e21d91e0cf5dd7c0ed00cda0f77c8c1616bd83f9fc157fa6760d31", size = 66555 }, + { url = "https://files.pythonhosted.org/packages/60/26/d6a0db6785dd35d3ba5bf2b2df0aedc5af089962c6eb2cbf67a15b81369e/kiwisolver-1.4.8-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:b83dc6769ddbc57613280118fb4ce3cd08899cc3369f7d0e0fab518a7cf37fdb", size = 65067 }, + { url = "https://files.pythonhosted.org/packages/c9/ed/1d97f7e3561e09757a196231edccc1bcf59d55ddccefa2afc9c615abd8e0/kiwisolver-1.4.8-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:111793b232842991be367ed828076b03d96202c19221b5ebab421ce8bcad016f", size = 1378443 }, + { url = "https://files.pythonhosted.org/packages/29/61/39d30b99954e6b46f760e6289c12fede2ab96a254c443639052d1b573fbc/kiwisolver-1.4.8-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:257af1622860e51b1a9d0ce387bf5c2c4f36a90594cb9514f55b074bcc787cfc", size = 1472728 }, + { url = "https://files.pythonhosted.org/packages/0c/3e/804163b932f7603ef256e4a715e5843a9600802bb23a68b4e08c8c0ff61d/kiwisolver-1.4.8-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:69b5637c3f316cab1ec1c9a12b8c5f4750a4c4b71af9157645bf32830e39c03a", size = 1478388 }, + { url = "https://files.pythonhosted.org/packages/8a/9e/60eaa75169a154700be74f875a4d9961b11ba048bef315fbe89cb6999056/kiwisolver-1.4.8-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:782bb86f245ec18009890e7cb8d13a5ef54dcf2ebe18ed65f795e635a96a1c6a", size = 1413849 }, + { url = "https://files.pythonhosted.org/packages/bc/b3/9458adb9472e61a998c8c4d95cfdfec91c73c53a375b30b1428310f923e4/kiwisolver-1.4.8-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cc978a80a0db3a66d25767b03688f1147a69e6237175c0f4ffffaaedf744055a", size = 1475533 }, + { url = "https://files.pythonhosted.org/packages/e4/7a/0a42d9571e35798de80aef4bb43a9b672aa7f8e58643d7bd1950398ffb0a/kiwisolver-1.4.8-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:36dbbfd34838500a31f52c9786990d00150860e46cd5041386f217101350f0d3", size = 2268898 }, + { url = "https://files.pythonhosted.org/packages/d9/07/1255dc8d80271400126ed8db35a1795b1a2c098ac3a72645075d06fe5c5d/kiwisolver-1.4.8-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:eaa973f1e05131de5ff3569bbba7f5fd07ea0595d3870ed4a526d486fe57fa1b", size = 2425605 }, + { url = "https://files.pythonhosted.org/packages/84/df/5a3b4cf13780ef6f6942df67b138b03b7e79e9f1f08f57c49957d5867f6e/kiwisolver-1.4.8-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:a66f60f8d0c87ab7f59b6fb80e642ebb29fec354a4dfad687ca4092ae69d04f4", size = 2375801 }, + { url = "https://files.pythonhosted.org/packages/8f/10/2348d068e8b0f635c8c86892788dac7a6b5c0cb12356620ab575775aad89/kiwisolver-1.4.8-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:858416b7fb777a53f0c59ca08190ce24e9abbd3cffa18886a5781b8e3e26f65d", size = 2520077 }, + { url = "https://files.pythonhosted.org/packages/32/d8/014b89fee5d4dce157d814303b0fce4d31385a2af4c41fed194b173b81ac/kiwisolver-1.4.8-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:085940635c62697391baafaaeabdf3dd7a6c3643577dde337f4d66eba021b2b8", size = 2338410 }, + { url = "https://files.pythonhosted.org/packages/bd/72/dfff0cc97f2a0776e1c9eb5bef1ddfd45f46246c6533b0191887a427bca5/kiwisolver-1.4.8-cp312-cp312-win_amd64.whl", hash = "sha256:01c3d31902c7db5fb6182832713d3b4122ad9317c2c5877d0539227d96bb2e50", size = 71853 }, + { url = "https://files.pythonhosted.org/packages/dc/85/220d13d914485c0948a00f0b9eb419efaf6da81b7d72e88ce2391f7aed8d/kiwisolver-1.4.8-cp312-cp312-win_arm64.whl", hash = "sha256:a3c44cb68861de93f0c4a8175fbaa691f0aa22550c331fefef02b618a9dcb476", size = 65424 }, + { url = "https://files.pythonhosted.org/packages/79/b3/e62464a652f4f8cd9006e13d07abad844a47df1e6537f73ddfbf1bc997ec/kiwisolver-1.4.8-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:1c8ceb754339793c24aee1c9fb2485b5b1f5bb1c2c214ff13368431e51fc9a09", size = 124156 }, + { url = "https://files.pythonhosted.org/packages/8d/2d/f13d06998b546a2ad4f48607a146e045bbe48030774de29f90bdc573df15/kiwisolver-1.4.8-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:54a62808ac74b5e55a04a408cda6156f986cefbcf0ada13572696b507cc92fa1", size = 66555 }, + { url = "https://files.pythonhosted.org/packages/59/e3/b8bd14b0a54998a9fd1e8da591c60998dc003618cb19a3f94cb233ec1511/kiwisolver-1.4.8-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:68269e60ee4929893aad82666821aaacbd455284124817af45c11e50a4b42e3c", size = 65071 }, + { url = "https://files.pythonhosted.org/packages/f0/1c/6c86f6d85ffe4d0ce04228d976f00674f1df5dc893bf2dd4f1928748f187/kiwisolver-1.4.8-cp313-cp313-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:34d142fba9c464bc3bbfeff15c96eab0e7310343d6aefb62a79d51421fcc5f1b", size = 1378053 }, + { url = "https://files.pythonhosted.org/packages/4e/b9/1c6e9f6dcb103ac5cf87cb695845f5fa71379021500153566d8a8a9fc291/kiwisolver-1.4.8-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3ddc373e0eef45b59197de815b1b28ef89ae3955e7722cc9710fb91cd77b7f47", size = 1472278 }, + { url = "https://files.pythonhosted.org/packages/ee/81/aca1eb176de671f8bda479b11acdc42c132b61a2ac861c883907dde6debb/kiwisolver-1.4.8-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:77e6f57a20b9bd4e1e2cedda4d0b986ebd0216236f0106e55c28aea3d3d69b16", size = 1478139 }, + { url = "https://files.pythonhosted.org/packages/49/f4/e081522473671c97b2687d380e9e4c26f748a86363ce5af48b4a28e48d06/kiwisolver-1.4.8-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:08e77738ed7538f036cd1170cbed942ef749137b1311fa2bbe2a7fda2f6bf3cc", size = 1413517 }, + { url = "https://files.pythonhosted.org/packages/8f/e9/6a7d025d8da8c4931522922cd706105aa32b3291d1add8c5427cdcd66e63/kiwisolver-1.4.8-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a5ce1e481a74b44dd5e92ff03ea0cb371ae7a0268318e202be06c8f04f4f1246", size = 1474952 }, + { url = "https://files.pythonhosted.org/packages/82/13/13fa685ae167bee5d94b415991c4fc7bb0a1b6ebea6e753a87044b209678/kiwisolver-1.4.8-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:fc2ace710ba7c1dfd1a3b42530b62b9ceed115f19a1656adefce7b1782a37794", size = 2269132 }, + { url = "https://files.pythonhosted.org/packages/ef/92/bb7c9395489b99a6cb41d502d3686bac692586db2045adc19e45ee64ed23/kiwisolver-1.4.8-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:3452046c37c7692bd52b0e752b87954ef86ee2224e624ef7ce6cb21e8c41cc1b", size = 2425997 }, + { url = "https://files.pythonhosted.org/packages/ed/12/87f0e9271e2b63d35d0d8524954145837dd1a6c15b62a2d8c1ebe0f182b4/kiwisolver-1.4.8-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:7e9a60b50fe8b2ec6f448fe8d81b07e40141bfced7f896309df271a0b92f80f3", size = 2376060 }, + { url = "https://files.pythonhosted.org/packages/02/6e/c8af39288edbce8bf0fa35dee427b082758a4b71e9c91ef18fa667782138/kiwisolver-1.4.8-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:918139571133f366e8362fa4a297aeba86c7816b7ecf0bc79168080e2bd79957", size = 2520471 }, + { url = "https://files.pythonhosted.org/packages/13/78/df381bc7b26e535c91469f77f16adcd073beb3e2dd25042efd064af82323/kiwisolver-1.4.8-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:e063ef9f89885a1d68dd8b2e18f5ead48653176d10a0e324e3b0030e3a69adeb", size = 2338793 }, + { url = "https://files.pythonhosted.org/packages/d0/dc/c1abe38c37c071d0fc71c9a474fd0b9ede05d42f5a458d584619cfd2371a/kiwisolver-1.4.8-cp313-cp313-win_amd64.whl", hash = "sha256:a17b7c4f5b2c51bb68ed379defd608a03954a1845dfed7cc0117f1cc8a9b7fd2", size = 71855 }, + { url = "https://files.pythonhosted.org/packages/a0/b6/21529d595b126ac298fdd90b705d87d4c5693de60023e0efcb4f387ed99e/kiwisolver-1.4.8-cp313-cp313-win_arm64.whl", hash = "sha256:3cd3bc628b25f74aedc6d374d5babf0166a92ff1317f46267f12d2ed54bc1d30", size = 65430 }, + { url = "https://files.pythonhosted.org/packages/34/bd/b89380b7298e3af9b39f49334e3e2a4af0e04819789f04b43d560516c0c8/kiwisolver-1.4.8-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:370fd2df41660ed4e26b8c9d6bbcad668fbe2560462cba151a721d49e5b6628c", size = 126294 }, + { url = "https://files.pythonhosted.org/packages/83/41/5857dc72e5e4148eaac5aa76e0703e594e4465f8ab7ec0fc60e3a9bb8fea/kiwisolver-1.4.8-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:84a2f830d42707de1d191b9490ac186bf7997a9495d4e9072210a1296345f7dc", size = 67736 }, + { url = "https://files.pythonhosted.org/packages/e1/d1/be059b8db56ac270489fb0b3297fd1e53d195ba76e9bbb30e5401fa6b759/kiwisolver-1.4.8-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:7a3ad337add5148cf51ce0b55642dc551c0b9d6248458a757f98796ca7348712", size = 66194 }, + { url = "https://files.pythonhosted.org/packages/e1/83/4b73975f149819eb7dcf9299ed467eba068ecb16439a98990dcb12e63fdd/kiwisolver-1.4.8-cp313-cp313t-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7506488470f41169b86d8c9aeff587293f530a23a23a49d6bc64dab66bedc71e", size = 1465942 }, + { url = "https://files.pythonhosted.org/packages/c7/2c/30a5cdde5102958e602c07466bce058b9d7cb48734aa7a4327261ac8e002/kiwisolver-1.4.8-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2f0121b07b356a22fb0414cec4666bbe36fd6d0d759db3d37228f496ed67c880", size = 1595341 }, + { url = "https://files.pythonhosted.org/packages/ff/9b/1e71db1c000385aa069704f5990574b8244cce854ecd83119c19e83c9586/kiwisolver-1.4.8-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d6d6bd87df62c27d4185de7c511c6248040afae67028a8a22012b010bc7ad062", size = 1598455 }, + { url = "https://files.pythonhosted.org/packages/85/92/c8fec52ddf06231b31cbb779af77e99b8253cd96bd135250b9498144c78b/kiwisolver-1.4.8-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:291331973c64bb9cce50bbe871fb2e675c4331dab4f31abe89f175ad7679a4d7", size = 1522138 }, + { url = "https://files.pythonhosted.org/packages/0b/51/9eb7e2cd07a15d8bdd976f6190c0164f92ce1904e5c0c79198c4972926b7/kiwisolver-1.4.8-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:893f5525bb92d3d735878ec00f781b2de998333659507d29ea4466208df37bed", size = 1582857 }, + { url = "https://files.pythonhosted.org/packages/0f/95/c5a00387a5405e68ba32cc64af65ce881a39b98d73cc394b24143bebc5b8/kiwisolver-1.4.8-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:b47a465040146981dc9db8647981b8cb96366fbc8d452b031e4f8fdffec3f26d", size = 2293129 }, + { url = "https://files.pythonhosted.org/packages/44/83/eeb7af7d706b8347548313fa3a3a15931f404533cc54fe01f39e830dd231/kiwisolver-1.4.8-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:99cea8b9dd34ff80c521aef46a1dddb0dcc0283cf18bde6d756f1e6f31772165", size = 2421538 }, + { url = "https://files.pythonhosted.org/packages/05/f9/27e94c1b3eb29e6933b6986ffc5fa1177d2cd1f0c8efc5f02c91c9ac61de/kiwisolver-1.4.8-cp313-cp313t-musllinux_1_2_ppc64le.whl", hash = "sha256:151dffc4865e5fe6dafce5480fab84f950d14566c480c08a53c663a0020504b6", size = 2390661 }, + { url = "https://files.pythonhosted.org/packages/d9/d4/3c9735faa36ac591a4afcc2980d2691000506050b7a7e80bcfe44048daa7/kiwisolver-1.4.8-cp313-cp313t-musllinux_1_2_s390x.whl", hash = "sha256:577facaa411c10421314598b50413aa1ebcf5126f704f1e5d72d7e4e9f020d90", size = 2546710 }, + { url = "https://files.pythonhosted.org/packages/4c/fa/be89a49c640930180657482a74970cdcf6f7072c8d2471e1babe17a222dc/kiwisolver-1.4.8-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:be4816dc51c8a471749d664161b434912eee82f2ea66bd7628bd14583a833e85", size = 2349213 }, + { url = "https://files.pythonhosted.org/packages/1f/f9/ae81c47a43e33b93b0a9819cac6723257f5da2a5a60daf46aa5c7226ea85/kiwisolver-1.4.8-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:e7a019419b7b510f0f7c9dceff8c5eae2392037eae483a7f9162625233802b0a", size = 60403 }, + { url = "https://files.pythonhosted.org/packages/58/ca/f92b5cb6f4ce0c1ebfcfe3e2e42b96917e16f7090e45b21102941924f18f/kiwisolver-1.4.8-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:286b18e86682fd2217a48fc6be6b0f20c1d0ed10958d8dc53453ad58d7be0bf8", size = 58657 }, + { url = "https://files.pythonhosted.org/packages/80/28/ae0240f732f0484d3a4dc885d055653c47144bdf59b670aae0ec3c65a7c8/kiwisolver-1.4.8-pp310-pypy310_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4191ee8dfd0be1c3666ccbac178c5a05d5f8d689bbe3fc92f3c4abec817f8fe0", size = 84948 }, + { url = "https://files.pythonhosted.org/packages/5d/eb/78d50346c51db22c7203c1611f9b513075f35c4e0e4877c5dde378d66043/kiwisolver-1.4.8-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7cd2785b9391f2873ad46088ed7599a6a71e762e1ea33e87514b1a441ed1da1c", size = 81186 }, + { url = "https://files.pythonhosted.org/packages/43/f8/7259f18c77adca88d5f64f9a522792e178b2691f3748817a8750c2d216ef/kiwisolver-1.4.8-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c07b29089b7ba090b6f1a669f1411f27221c3662b3a1b7010e67b59bb5a6f10b", size = 80279 }, + { url = "https://files.pythonhosted.org/packages/3a/1d/50ad811d1c5dae091e4cf046beba925bcae0a610e79ae4c538f996f63ed5/kiwisolver-1.4.8-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:65ea09a5a3faadd59c2ce96dc7bf0f364986a315949dc6374f04396b0d60e09b", size = 71762 }, +] + [[package]] name = "lazy-loader" version = "0.4" @@ -377,6 +909,194 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/83/60/d497a310bde3f01cb805196ac61b7ad6dc5dcf8dce66634dc34364b20b4f/lazy_loader-0.4-py3-none-any.whl", hash = "sha256:342aa8e14d543a154047afb4ba8ef17f5563baad3fc610d7b15b213b0f119efc", size = 12097 }, ] +[[package]] +name = "matplotlib" +version = "3.7.5" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version < '3.9'", +] +dependencies = [ + { name = "contourpy", version = "1.1.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.9'" }, + { name = "cycler", marker = "python_full_version < '3.9'" }, + { name = "fonttools", marker = "python_full_version < '3.9'" }, + { name = "importlib-resources", version = "6.4.5", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.9'" }, + { name = "kiwisolver", version = "1.4.7", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.9'" }, + { name = "numpy", version = "1.24.4", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.9'" }, + { name = "packaging", marker = "python_full_version < '3.9'" }, + { name = "pillow", version = "10.4.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.9'" }, + { name = "pyparsing", version = "3.1.4", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.9'" }, + { name = "python-dateutil", marker = "python_full_version < '3.9'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/b6/f0/3836719cc3982fbba3b840d18a59db1d0ee9ac7986f24e8c0a092851b67b/matplotlib-3.7.5.tar.gz", hash = "sha256:1e5c971558ebc811aa07f54c7b7c677d78aa518ef4c390e14673a09e0860184a", size = 38098611 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f5/b0/3808e86c41e5d97822d77e89d7f3cb0890725845c050d87ec53732a8b150/matplotlib-3.7.5-cp310-cp310-macosx_10_12_universal2.whl", hash = "sha256:4a87b69cb1cb20943010f63feb0b2901c17a3b435f75349fd9865713bfa63925", size = 8322924 }, + { url = "https://files.pythonhosted.org/packages/5b/05/726623be56391ba1740331ad9f1cd30e1adec61c179ddac134957a6dc2e7/matplotlib-3.7.5-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:d3ce45010fefb028359accebb852ca0c21bd77ec0f281952831d235228f15810", size = 7438436 }, + { url = "https://files.pythonhosted.org/packages/15/83/89cdef49ef1e320060ec951ba33c132df211561d866c3ed144c81fd110b2/matplotlib-3.7.5-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:fbea1e762b28400393d71be1a02144aa16692a3c4c676ba0178ce83fc2928fdd", size = 7341849 }, + { url = "https://files.pythonhosted.org/packages/94/29/39fc4acdc296dd86e09cecb65c14966e1cf18e0f091b9cbd9bd3f0c19ee4/matplotlib-3.7.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ec0e1adc0ad70ba8227e957551e25a9d2995e319c29f94a97575bb90fa1d4469", size = 11354141 }, + { url = "https://files.pythonhosted.org/packages/54/36/44c5eeb0d83ae1e3ed34d264d7adee947c4fd56c4a9464ce822de094995a/matplotlib-3.7.5-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6738c89a635ced486c8a20e20111d33f6398a9cbebce1ced59c211e12cd61455", size = 11457668 }, + { url = "https://files.pythonhosted.org/packages/b7/e2/f68aeaedf0ef57cbb793637ee82e62e64ea26cee908db0fe4f8e24d502c0/matplotlib-3.7.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1210b7919b4ed94b5573870f316bca26de3e3b07ffdb563e79327dc0e6bba515", size = 11580088 }, + { url = "https://files.pythonhosted.org/packages/d9/f7/7c88d34afc38943aa5e4e04d27fc9da5289a48c264c0d794f60c9cda0949/matplotlib-3.7.5-cp310-cp310-win32.whl", hash = "sha256:068ebcc59c072781d9dcdb82f0d3f1458271c2de7ca9c78f5bd672141091e9e1", size = 7339332 }, + { url = "https://files.pythonhosted.org/packages/91/99/e5f6f7c9438279581c4a2308d264fe24dc98bb80e3b2719f797227e54ddc/matplotlib-3.7.5-cp310-cp310-win_amd64.whl", hash = "sha256:f098ffbaab9df1e3ef04e5a5586a1e6b1791380698e84938d8640961c79b1fc0", size = 7506405 }, + { url = "https://files.pythonhosted.org/packages/5e/c6/45d0485e59d70b7a6a81eade5d0aed548b42cc65658c0ce0f813b9249165/matplotlib-3.7.5-cp311-cp311-macosx_10_12_universal2.whl", hash = "sha256:f65342c147572673f02a4abec2d5a23ad9c3898167df9b47c149f32ce61ca078", size = 8325506 }, + { url = "https://files.pythonhosted.org/packages/0e/0a/83bd8589f3597745f624fbcc7da1140088b2f4160ca51c71553c561d0df5/matplotlib-3.7.5-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:4ddf7fc0e0dc553891a117aa083039088d8a07686d4c93fb8a810adca68810af", size = 7439905 }, + { url = "https://files.pythonhosted.org/packages/84/c1/a7705b24f8f9b4d7ceea0002c13bae50cf9423f299f56d8c47a5cd2627d2/matplotlib-3.7.5-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:0ccb830fc29442360d91be48527809f23a5dcaee8da5f4d9b2d5b867c1b087b8", size = 7342895 }, + { url = "https://files.pythonhosted.org/packages/94/6e/55d7d8310c96a7459c883aa4be3f5a9338a108278484cbd5c95d480d1cef/matplotlib-3.7.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:efc6bb28178e844d1f408dd4d6341ee8a2e906fc9e0fa3dae497da4e0cab775d", size = 11358830 }, + { url = "https://files.pythonhosted.org/packages/55/57/3b36afe104216db1cf2f3889c394b403ea87eda77c4815227c9524462ba8/matplotlib-3.7.5-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3b15c4c2d374f249f324f46e883340d494c01768dd5287f8bc00b65b625ab56c", size = 11462575 }, + { url = "https://files.pythonhosted.org/packages/f3/0b/fabcf5f66b12fab5c4110d06a6c0fed875c7e63bc446403f58f9dadc9999/matplotlib-3.7.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3d028555421912307845e59e3de328260b26d055c5dac9b182cc9783854e98fb", size = 11584280 }, + { url = "https://files.pythonhosted.org/packages/47/a9/1ad7df27a9da70b62109584632f83fe6ef45774701199c44d5777107c240/matplotlib-3.7.5-cp311-cp311-win32.whl", hash = "sha256:fe184b4625b4052fa88ef350b815559dd90cc6cc8e97b62f966e1ca84074aafa", size = 7340429 }, + { url = "https://files.pythonhosted.org/packages/e3/b1/1b6c34b89173d6c206dc5a4028e8518b4dfee3569c13bdc0c88d0486cae7/matplotlib-3.7.5-cp311-cp311-win_amd64.whl", hash = "sha256:084f1f0f2f1010868c6f1f50b4e1c6f2fb201c58475494f1e5b66fed66093647", size = 7507112 }, + { url = "https://files.pythonhosted.org/packages/75/dc/4e341a3ef36f3e7321aec0741317f12c7a23264be708a97972bf018c34af/matplotlib-3.7.5-cp312-cp312-macosx_10_12_universal2.whl", hash = "sha256:34bceb9d8ddb142055ff27cd7135f539f2f01be2ce0bafbace4117abe58f8fe4", size = 8323797 }, + { url = "https://files.pythonhosted.org/packages/af/83/bbb482d678362ceb68cc59ec4fc705dde636025969361dac77be868541ef/matplotlib-3.7.5-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:c5a2134162273eb8cdfd320ae907bf84d171de948e62180fa372a3ca7cf0f433", size = 7439549 }, + { url = "https://files.pythonhosted.org/packages/1a/ee/e49a92d9e369b2b9e4373894171cb4e641771cd7f81bde1d8b6fb8c60842/matplotlib-3.7.5-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:039ad54683a814002ff37bf7981aa1faa40b91f4ff84149beb53d1eb64617980", size = 7341788 }, + { url = "https://files.pythonhosted.org/packages/48/79/89cb2fc5ddcfc3d440a739df04dbe6e4e72b1153d1ebd32b45d42eb71d27/matplotlib-3.7.5-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4d742ccd1b09e863b4ca58291728db645b51dab343eebb08d5d4b31b308296ce", size = 11356329 }, + { url = "https://files.pythonhosted.org/packages/ff/25/84f181cdae5c9eba6fd1c2c35642aec47233425fe3b0d6fccdb323fb36e0/matplotlib-3.7.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:743b1c488ca6a2bc7f56079d282e44d236bf375968bfd1b7ba701fd4d0fa32d6", size = 11577813 }, + { url = "https://files.pythonhosted.org/packages/9f/24/b2db065d40e58033b3350222fb8bbb0ffcb834029df9c1f9349dd9c7dd45/matplotlib-3.7.5-cp312-cp312-win_amd64.whl", hash = "sha256:fbf730fca3e1f23713bc1fae0a57db386e39dc81ea57dc305c67f628c1d7a342", size = 7507667 }, + { url = "https://files.pythonhosted.org/packages/e3/72/50a38c8fd5dc845b06f8e71c9da802db44b81baabf4af8be78bb8a5622ea/matplotlib-3.7.5-cp38-cp38-macosx_10_12_universal2.whl", hash = "sha256:cfff9b838531698ee40e40ea1a8a9dc2c01edb400b27d38de6ba44c1f9a8e3d2", size = 8322659 }, + { url = "https://files.pythonhosted.org/packages/b1/ea/129163dcd21db6da5d559a8160c4a74c1dc5f96ac246a3d4248b43c7648d/matplotlib-3.7.5-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:1dbcca4508bca7847fe2d64a05b237a3dcaec1f959aedb756d5b1c67b770c5ee", size = 7438408 }, + { url = "https://files.pythonhosted.org/packages/aa/59/4d13e5b6298b1ca5525eea8c68d3806ae93ab6d0bb17ca9846aa3156b92b/matplotlib-3.7.5-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:4cdf4ef46c2a1609a50411b66940b31778db1e4b73d4ecc2eaa40bd588979b13", size = 7341782 }, + { url = "https://files.pythonhosted.org/packages/9e/c4/f562df04b08487731743511ff274ae5d31dce2ff3e5621f8b070d20ab54a/matplotlib-3.7.5-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:167200ccfefd1674b60e957186dfd9baf58b324562ad1a28e5d0a6b3bea77905", size = 9196487 }, + { url = "https://files.pythonhosted.org/packages/30/33/cc27211d2ffeee4fd7402dca137b6e8a83f6dcae3d4be8d0ad5068555561/matplotlib-3.7.5-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:53e64522934df6e1818b25fd48cf3b645b11740d78e6ef765fbb5fa5ce080d02", size = 9213051 }, + { url = "https://files.pythonhosted.org/packages/9b/9d/8bd37c86b79312c9dbcfa379dec32303f9b38e8456e0829d7e666a0e0a05/matplotlib-3.7.5-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d3e3bc79b2d7d615067bd010caff9243ead1fc95cf735c16e4b2583173f717eb", size = 11370807 }, + { url = "https://files.pythonhosted.org/packages/c0/1e/b24a07a849c8d458f1b3724f49029f0dedf748bdedb4d5f69491314838b6/matplotlib-3.7.5-cp38-cp38-win32.whl", hash = "sha256:6b641b48c6819726ed47c55835cdd330e53747d4efff574109fd79b2d8a13748", size = 7340461 }, + { url = "https://files.pythonhosted.org/packages/16/51/58b0b9de42fe1e665736d9286f88b5f1556a0e22bed8a71f468231761083/matplotlib-3.7.5-cp38-cp38-win_amd64.whl", hash = "sha256:f0b60993ed3488b4532ec6b697059897891927cbfc2b8d458a891b60ec03d9d7", size = 7507471 }, + { url = "https://files.pythonhosted.org/packages/0d/00/17487e9e8949ca623af87f6c8767408efe7530b7e1f4d6897fa7fa940834/matplotlib-3.7.5-cp39-cp39-macosx_10_12_universal2.whl", hash = "sha256:090964d0afaff9c90e4d8de7836757e72ecfb252fb02884016d809239f715651", size = 8323175 }, + { url = "https://files.pythonhosted.org/packages/6a/84/be0acd521fa9d6697657cf35878153f8009a42b4b75237aebc302559a8a9/matplotlib-3.7.5-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:9fc6fcfbc55cd719bc0bfa60bde248eb68cf43876d4c22864603bdd23962ba25", size = 7438737 }, + { url = "https://files.pythonhosted.org/packages/17/39/175f36a6d68d0cf47a4fecbae9728048355df23c9feca8688f1476b198e6/matplotlib-3.7.5-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:5e7cc3078b019bb863752b8b60e8b269423000f1603cb2299608231996bd9d54", size = 7341916 }, + { url = "https://files.pythonhosted.org/packages/36/c0/9a1c2a79f85c15d41b60877cbc333694ed80605e5c97a33880c4ecfd5bf1/matplotlib-3.7.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1e4e9a868e8163abaaa8259842d85f949a919e1ead17644fb77a60427c90473c", size = 11352264 }, + { url = "https://files.pythonhosted.org/packages/a6/39/b0204e0e7a899b0676733366a55ccafa723799b719bc7f2e85e5ecde26a0/matplotlib-3.7.5-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fa7ebc995a7d747dacf0a717d0eb3aa0f0c6a0e9ea88b0194d3a3cd241a1500f", size = 11454722 }, + { url = "https://files.pythonhosted.org/packages/d8/39/64dd1d36c79e72e614977db338d180cf204cf658927c05a8ef2d47feb4c0/matplotlib-3.7.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3785bfd83b05fc0e0c2ae4c4a90034fe693ef96c679634756c50fe6efcc09856", size = 11576343 }, + { url = "https://files.pythonhosted.org/packages/31/b4/e77bc11394d858bdf15e356980fceb4ac9604b0fa8212ef3ca4f1dc166b8/matplotlib-3.7.5-cp39-cp39-win32.whl", hash = "sha256:29b058738c104d0ca8806395f1c9089dfe4d4f0f78ea765c6c704469f3fffc81", size = 7340455 }, + { url = "https://files.pythonhosted.org/packages/4a/84/081820c596b9555ecffc6819ee71f847f2fbb0d7c70a42c1eeaa54edf3e0/matplotlib-3.7.5-cp39-cp39-win_amd64.whl", hash = "sha256:fd4028d570fa4b31b7b165d4a685942ae9cdc669f33741e388c01857d9723eab", size = 7507711 }, + { url = "https://files.pythonhosted.org/packages/27/6c/1bb10f3d6f337b9faa2e96a251bd87ba5fed85a608df95eb4d69acc109f0/matplotlib-3.7.5-pp38-pypy38_pp73-macosx_10_12_x86_64.whl", hash = "sha256:2a9a3f4d6a7f88a62a6a18c7e6a84aedcaf4faf0708b4ca46d87b19f1b526f88", size = 7397285 }, + { url = "https://files.pythonhosted.org/packages/b2/36/66cfea213e9ba91cda9e257542c249ed235d49021af71c2e8007107d7d4c/matplotlib-3.7.5-pp38-pypy38_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b9b3fd853d4a7f008a938df909b96db0b454225f935d3917520305b90680579c", size = 7552612 }, + { url = "https://files.pythonhosted.org/packages/77/df/16655199bf984c37c6a816b854bc032b56aef521aadc04f27928422f3c91/matplotlib-3.7.5-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f0ad550da9f160737d7890217c5eeed4337d07e83ca1b2ca6535078f354e7675", size = 7515564 }, + { url = "https://files.pythonhosted.org/packages/5b/c8/3534c3705a677b71abb6be33609ba129fdeae2ea4e76b2fd3ab62c86fab3/matplotlib-3.7.5-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:20da7924a08306a861b3f2d1da0d1aa9a6678e480cf8eacffe18b565af2813e7", size = 7521336 }, + { url = "https://files.pythonhosted.org/packages/20/a0/c5c0d410798b387ed3a177a5a7eba21055dd9c41d4b15bd0861241a5a60e/matplotlib-3.7.5-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:b45c9798ea6bb920cb77eb7306409756a7fab9db9b463e462618e0559aecb30e", size = 7397931 }, + { url = "https://files.pythonhosted.org/packages/c3/2f/9e9509727d4c7d1b8e2c88e9330a97d54a1dd20bd316a0c8d2f8b38c4513/matplotlib-3.7.5-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a99866267da1e561c7776fe12bf4442174b79aac1a47bd7e627c7e4d077ebd83", size = 7553224 }, + { url = "https://files.pythonhosted.org/packages/89/0c/5f3e403dcf5c23799c92b0139dd00e41caf23983e9281f5bfeba3065e7d2/matplotlib-3.7.5-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2b6aa62adb6c268fc87d80f963aca39c64615c31830b02697743c95590ce3fbb", size = 7513250 }, + { url = "https://files.pythonhosted.org/packages/87/e0/03eba0a8c3775ef910dbb3a287114a64c47abbcaeab2543c59957f155a86/matplotlib-3.7.5-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:e530ab6a0afd082d2e9c17eb1eb064a63c5b09bb607b2b74fa41adbe3e162286", size = 7521729 }, +] + +[[package]] +name = "matplotlib" +version = "3.9.4" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version == '3.9.*'", +] +dependencies = [ + { name = "contourpy", version = "1.3.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version == '3.9.*'" }, + { name = "cycler", marker = "python_full_version == '3.9.*'" }, + { name = "fonttools", marker = "python_full_version == '3.9.*'" }, + { name = "importlib-resources", version = "6.5.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version == '3.9.*'" }, + { name = "kiwisolver", version = "1.4.7", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version == '3.9.*'" }, + { name = "numpy", version = "1.24.4", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version == '3.9.*'" }, + { name = "packaging", marker = "python_full_version == '3.9.*'" }, + { name = "pillow", version = "11.2.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version == '3.9.*'" }, + { name = "pyparsing", version = "3.2.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version == '3.9.*'" }, + { name = "python-dateutil", marker = "python_full_version == '3.9.*'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/df/17/1747b4154034befd0ed33b52538f5eb7752d05bb51c5e2a31470c3bc7d52/matplotlib-3.9.4.tar.gz", hash = "sha256:1e00e8be7393cbdc6fedfa8a6fba02cf3e83814b285db1c60b906a023ba41bc3", size = 36106529 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/7e/94/27d2e2c30d54b56c7b764acc1874a909e34d1965a427fc7092bb6a588b63/matplotlib-3.9.4-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:c5fdd7abfb706dfa8d307af64a87f1a862879ec3cd8d0ec8637458f0885b9c50", size = 7885089 }, + { url = "https://files.pythonhosted.org/packages/c6/25/828273307e40a68eb8e9df832b6b2aaad075864fdc1de4b1b81e40b09e48/matplotlib-3.9.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:d89bc4e85e40a71d1477780366c27fb7c6494d293e1617788986f74e2a03d7ff", size = 7770600 }, + { url = "https://files.pythonhosted.org/packages/f2/65/f841a422ec994da5123368d76b126acf4fc02ea7459b6e37c4891b555b83/matplotlib-3.9.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ddf9f3c26aae695c5daafbf6b94e4c1a30d6cd617ba594bbbded3b33a1fcfa26", size = 8200138 }, + { url = "https://files.pythonhosted.org/packages/07/06/272aca07a38804d93b6050813de41ca7ab0e29ba7a9dd098e12037c919a9/matplotlib-3.9.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:18ebcf248030173b59a868fda1fe42397253f6698995b55e81e1f57431d85e50", size = 8312711 }, + { url = "https://files.pythonhosted.org/packages/98/37/f13e23b233c526b7e27ad61be0a771894a079e0f7494a10d8d81557e0e9a/matplotlib-3.9.4-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:974896ec43c672ec23f3f8c648981e8bc880ee163146e0312a9b8def2fac66f5", size = 9090622 }, + { url = "https://files.pythonhosted.org/packages/4f/8c/b1f5bd2bd70e60f93b1b54c4d5ba7a992312021d0ddddf572f9a1a6d9348/matplotlib-3.9.4-cp310-cp310-win_amd64.whl", hash = "sha256:4598c394ae9711cec135639374e70871fa36b56afae17bdf032a345be552a88d", size = 7828211 }, + { url = "https://files.pythonhosted.org/packages/74/4b/65be7959a8fa118a3929b49a842de5b78bb55475236fcf64f3e308ff74a0/matplotlib-3.9.4-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:d4dd29641d9fb8bc4492420c5480398dd40a09afd73aebe4eb9d0071a05fbe0c", size = 7894430 }, + { url = "https://files.pythonhosted.org/packages/e9/18/80f70d91896e0a517b4a051c3fd540daa131630fd75e02e250365353b253/matplotlib-3.9.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:30e5b22e8bcfb95442bf7d48b0d7f3bdf4a450cbf68986ea45fca3d11ae9d099", size = 7780045 }, + { url = "https://files.pythonhosted.org/packages/a2/73/ccb381026e3238c5c25c3609ba4157b2d1a617ec98d65a8b4ee4e1e74d02/matplotlib-3.9.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2bb0030d1d447fd56dcc23b4c64a26e44e898f0416276cac1ebc25522e0ac249", size = 8209906 }, + { url = "https://files.pythonhosted.org/packages/ab/33/1648da77b74741c89f5ea95cbf42a291b4b364f2660b316318811404ed97/matplotlib-3.9.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aca90ed222ac3565d2752b83dbb27627480d27662671e4d39da72e97f657a423", size = 8322873 }, + { url = "https://files.pythonhosted.org/packages/57/d3/8447ba78bc6593c9044c372d1609f8ea10fb1e071e7a9e0747bea74fc16c/matplotlib-3.9.4-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:a181b2aa2906c608fcae72f977a4a2d76e385578939891b91c2550c39ecf361e", size = 9099566 }, + { url = "https://files.pythonhosted.org/packages/23/e1/4f0e237bf349c02ff9d1b6e7109f1a17f745263809b9714a8576dc17752b/matplotlib-3.9.4-cp311-cp311-win_amd64.whl", hash = "sha256:1f6882828231eca17f501c4dcd98a05abb3f03d157fbc0769c6911fe08b6cfd3", size = 7838065 }, + { url = "https://files.pythonhosted.org/packages/1a/2b/c918bf6c19d6445d1cefe3d2e42cb740fb997e14ab19d4daeb6a7ab8a157/matplotlib-3.9.4-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:dfc48d67e6661378a21c2983200a654b72b5c5cdbd5d2cf6e5e1ece860f0cc70", size = 7891131 }, + { url = "https://files.pythonhosted.org/packages/c1/e5/b4e8fc601ca302afeeabf45f30e706a445c7979a180e3a978b78b2b681a4/matplotlib-3.9.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:47aef0fab8332d02d68e786eba8113ffd6f862182ea2999379dec9e237b7e483", size = 7776365 }, + { url = "https://files.pythonhosted.org/packages/99/06/b991886c506506476e5d83625c5970c656a491b9f80161458fed94597808/matplotlib-3.9.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fba1f52c6b7dc764097f52fd9ab627b90db452c9feb653a59945de16752e965f", size = 8200707 }, + { url = "https://files.pythonhosted.org/packages/c3/e2/556b627498cb27e61026f2d1ba86a78ad1b836fef0996bef5440e8bc9559/matplotlib-3.9.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:173ac3748acaac21afcc3fa1633924609ba1b87749006bc25051c52c422a5d00", size = 8313761 }, + { url = "https://files.pythonhosted.org/packages/58/ff/165af33ec766ff818306ea88e91f9f60d2a6ed543be1eb122a98acbf3b0d/matplotlib-3.9.4-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:320edea0cadc07007765e33f878b13b3738ffa9745c5f707705692df70ffe0e0", size = 9095284 }, + { url = "https://files.pythonhosted.org/packages/9f/8b/3d0c7a002db3b1ed702731c2a9a06d78d035f1f2fb0fb936a8e43cc1e9f4/matplotlib-3.9.4-cp312-cp312-win_amd64.whl", hash = "sha256:a4a4cfc82330b27042a7169533da7991e8789d180dd5b3daeaee57d75cd5a03b", size = 7841160 }, + { url = "https://files.pythonhosted.org/packages/49/b1/999f89a7556d101b23a2f0b54f1b6e140d73f56804da1398f2f0bc0924bc/matplotlib-3.9.4-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:37eeffeeca3c940985b80f5b9a7b95ea35671e0e7405001f249848d2b62351b6", size = 7891499 }, + { url = "https://files.pythonhosted.org/packages/87/7b/06a32b13a684977653396a1bfcd34d4e7539c5d55c8cbfaa8ae04d47e4a9/matplotlib-3.9.4-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:3e7465ac859ee4abcb0d836137cd8414e7bb7ad330d905abced457217d4f0f45", size = 7776802 }, + { url = "https://files.pythonhosted.org/packages/65/87/ac498451aff739e515891bbb92e566f3c7ef31891aaa878402a71f9b0910/matplotlib-3.9.4-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f4c12302c34afa0cf061bea23b331e747e5e554b0fa595c96e01c7b75bc3b858", size = 8200802 }, + { url = "https://files.pythonhosted.org/packages/f8/6b/9eb761c00e1cb838f6c92e5f25dcda3f56a87a52f6cb8fdfa561e6cf6a13/matplotlib-3.9.4-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2b8c97917f21b75e72108b97707ba3d48f171541a74aa2a56df7a40626bafc64", size = 8313880 }, + { url = "https://files.pythonhosted.org/packages/d7/a2/c8eaa600e2085eec7e38cbbcc58a30fc78f8224939d31d3152bdafc01fd1/matplotlib-3.9.4-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:0229803bd7e19271b03cb09f27db76c918c467aa4ce2ae168171bc67c3f508df", size = 9094637 }, + { url = "https://files.pythonhosted.org/packages/71/1f/c6e1daea55b7bfeb3d84c6cb1abc449f6a02b181e7e2a5e4db34c3afb793/matplotlib-3.9.4-cp313-cp313-win_amd64.whl", hash = "sha256:7c0d8ef442ebf56ff5e206f8083d08252ee738e04f3dc88ea882853a05488799", size = 7841311 }, + { url = "https://files.pythonhosted.org/packages/c0/3a/2757d3f7d388b14dd48f5a83bea65b6d69f000e86b8f28f74d86e0d375bd/matplotlib-3.9.4-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:a04c3b00066a688834356d196136349cb32f5e1003c55ac419e91585168b88fb", size = 7919989 }, + { url = "https://files.pythonhosted.org/packages/24/28/f5077c79a4f521589a37fe1062d6a6ea3534e068213f7357e7cfffc2e17a/matplotlib-3.9.4-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:04c519587f6c210626741a1e9a68eefc05966ede24205db8982841826af5871a", size = 7809417 }, + { url = "https://files.pythonhosted.org/packages/36/c8/c523fd2963156692916a8eb7d4069084cf729359f7955cf09075deddfeaf/matplotlib-3.9.4-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:308afbf1a228b8b525fcd5cec17f246bbbb63b175a3ef6eb7b4d33287ca0cf0c", size = 8226258 }, + { url = "https://files.pythonhosted.org/packages/f6/88/499bf4b8fa9349b6f5c0cf4cead0ebe5da9d67769129f1b5651e5ac51fbc/matplotlib-3.9.4-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ddb3b02246ddcffd3ce98e88fed5b238bc5faff10dbbaa42090ea13241d15764", size = 8335849 }, + { url = "https://files.pythonhosted.org/packages/b8/9f/20a4156b9726188646a030774ee337d5ff695a965be45ce4dbcb9312c170/matplotlib-3.9.4-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:8a75287e9cb9eee48cb79ec1d806f75b29c0fde978cb7223a1f4c5848d696041", size = 9102152 }, + { url = "https://files.pythonhosted.org/packages/10/11/237f9c3a4e8d810b1759b67ff2da7c32c04f9c80aa475e7beb36ed43a8fb/matplotlib-3.9.4-cp313-cp313t-win_amd64.whl", hash = "sha256:488deb7af140f0ba86da003e66e10d55ff915e152c78b4b66d231638400b1965", size = 7896987 }, + { url = "https://files.pythonhosted.org/packages/56/eb/501b465c9fef28f158e414ea3a417913dc2ac748564c7ed41535f23445b4/matplotlib-3.9.4-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:3c3724d89a387ddf78ff88d2a30ca78ac2b4c89cf37f2db4bd453c34799e933c", size = 7885919 }, + { url = "https://files.pythonhosted.org/packages/da/36/236fbd868b6c91309a5206bd90c3f881f4f44b2d997cd1d6239ef652f878/matplotlib-3.9.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:d5f0a8430ffe23d7e32cfd86445864ccad141797f7d25b7c41759a5b5d17cfd7", size = 7771486 }, + { url = "https://files.pythonhosted.org/packages/e0/4b/105caf2d54d5ed11d9f4335398f5103001a03515f2126c936a752ccf1461/matplotlib-3.9.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6bb0141a21aef3b64b633dc4d16cbd5fc538b727e4958be82a0e1c92a234160e", size = 8201838 }, + { url = "https://files.pythonhosted.org/packages/5d/a7/bb01188fb4013d34d274caf44a2f8091255b0497438e8b6c0a7c1710c692/matplotlib-3.9.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:57aa235109e9eed52e2c2949db17da185383fa71083c00c6c143a60e07e0888c", size = 8314492 }, + { url = "https://files.pythonhosted.org/packages/33/19/02e1a37f7141fc605b193e927d0a9cdf9dc124a20b9e68793f4ffea19695/matplotlib-3.9.4-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:b18c600061477ccfdd1e6fd050c33d8be82431700f3452b297a56d9ed7037abb", size = 9092500 }, + { url = "https://files.pythonhosted.org/packages/57/68/c2feb4667adbf882ffa4b3e0ac9967f848980d9f8b5bebd86644aa67ce6a/matplotlib-3.9.4-cp39-cp39-win_amd64.whl", hash = "sha256:ef5f2d1b67d2d2145ff75e10f8c008bfbf71d45137c4b648c87193e7dd053eac", size = 7822962 }, + { url = "https://files.pythonhosted.org/packages/0c/22/2ef6a364cd3f565442b0b055e0599744f1e4314ec7326cdaaa48a4d864d7/matplotlib-3.9.4-pp39-pypy39_pp73-macosx_10_15_x86_64.whl", hash = "sha256:44e0ed786d769d85bc787b0606a53f2d8d2d1d3c8a2608237365e9121c1a338c", size = 7877995 }, + { url = "https://files.pythonhosted.org/packages/87/b8/2737456e566e9f4d94ae76b8aa0d953d9acb847714f9a7ad80184474f5be/matplotlib-3.9.4-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:09debb9ce941eb23ecdbe7eab972b1c3e0276dcf01688073faff7b0f61d6c6ca", size = 7769300 }, + { url = "https://files.pythonhosted.org/packages/b2/1f/e709c6ec7b5321e6568769baa288c7178e60a93a9da9e682b39450da0e29/matplotlib-3.9.4-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bcc53cf157a657bfd03afab14774d54ba73aa84d42cfe2480c91bd94873952db", size = 8313423 }, + { url = "https://files.pythonhosted.org/packages/5e/b6/5a1f868782cd13f053a679984e222007ecff654a9bfbac6b27a65f4eeb05/matplotlib-3.9.4-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:ad45da51be7ad02387801fd154ef74d942f49fe3fcd26a64c94842ba7ec0d865", size = 7854624 }, +] + +[[package]] +name = "matplotlib" +version = "3.10.1" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.11'", + "python_full_version == '3.10.*'", +] +dependencies = [ + { name = "contourpy", version = "1.3.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, + { name = "cycler", marker = "python_full_version >= '3.10'" }, + { name = "fonttools", marker = "python_full_version >= '3.10'" }, + { name = "kiwisolver", version = "1.4.8", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, + { name = "numpy", version = "2.2.4", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, + { name = "packaging", marker = "python_full_version >= '3.10'" }, + { name = "pillow", version = "11.2.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, + { name = "pyparsing", version = "3.2.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, + { name = "python-dateutil", marker = "python_full_version >= '3.10'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/2f/08/b89867ecea2e305f408fbb417139a8dd941ecf7b23a2e02157c36da546f0/matplotlib-3.10.1.tar.gz", hash = "sha256:e8d2d0e3881b129268585bf4765ad3ee73a4591d77b9a18c214ac7e3a79fb2ba", size = 36743335 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ee/b1/f70e27cf1cd76ce2a5e1aa5579d05afe3236052c6d9b9a96325bc823a17e/matplotlib-3.10.1-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:ff2ae14910be903f4a24afdbb6d7d3a6c44da210fc7d42790b87aeac92238a16", size = 8163654 }, + { url = "https://files.pythonhosted.org/packages/26/af/5ec3d4636106718bb62503a03297125d4514f98fe818461bd9e6b9d116e4/matplotlib-3.10.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:0721a3fd3d5756ed593220a8b86808a36c5031fce489adb5b31ee6dbb47dd5b2", size = 8037943 }, + { url = "https://files.pythonhosted.org/packages/a1/3d/07f9003a71b698b848c9925d05979ffa94a75cd25d1a587202f0bb58aa81/matplotlib-3.10.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d0673b4b8f131890eb3a1ad058d6e065fb3c6e71f160089b65f8515373394698", size = 8449510 }, + { url = "https://files.pythonhosted.org/packages/12/87/9472d4513ff83b7cd864311821793ab72234fa201ab77310ec1b585d27e2/matplotlib-3.10.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8e875b95ac59a7908978fe307ecdbdd9a26af7fa0f33f474a27fcf8c99f64a19", size = 8586585 }, + { url = "https://files.pythonhosted.org/packages/31/9e/fe74d237d2963adae8608faeb21f778cf246dbbf4746cef87cffbc82c4b6/matplotlib-3.10.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:2589659ea30726284c6c91037216f64a506a9822f8e50592d48ac16a2f29e044", size = 9397911 }, + { url = "https://files.pythonhosted.org/packages/b6/1b/025d3e59e8a4281ab463162ad7d072575354a1916aba81b6a11507dfc524/matplotlib-3.10.1-cp310-cp310-win_amd64.whl", hash = "sha256:a97ff127f295817bc34517255c9db6e71de8eddaab7f837b7d341dee9f2f587f", size = 8052998 }, + { url = "https://files.pythonhosted.org/packages/a5/14/a1b840075be247bb1834b22c1e1d558740b0f618fe3a823740181ca557a1/matplotlib-3.10.1-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:057206ff2d6ab82ff3e94ebd94463d084760ca682ed5f150817b859372ec4401", size = 8174669 }, + { url = "https://files.pythonhosted.org/packages/0a/e4/300b08e3e08f9c98b0d5635f42edabf2f7a1d634e64cb0318a71a44ff720/matplotlib-3.10.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:a144867dd6bf8ba8cb5fc81a158b645037e11b3e5cf8a50bd5f9917cb863adfe", size = 8047996 }, + { url = "https://files.pythonhosted.org/packages/75/f9/8d99ff5a2498a5f1ccf919fb46fb945109623c6108216f10f96428f388bc/matplotlib-3.10.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:56c5d9fcd9879aa8040f196a235e2dcbdf7dd03ab5b07c0696f80bc6cf04bedd", size = 8461612 }, + { url = "https://files.pythonhosted.org/packages/40/b8/53fa08a5eaf78d3a7213fd6da1feec4bae14a81d9805e567013811ff0e85/matplotlib-3.10.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0f69dc9713e4ad2fb21a1c30e37bd445d496524257dfda40ff4a8efb3604ab5c", size = 8602258 }, + { url = "https://files.pythonhosted.org/packages/40/87/4397d2ce808467af86684a622dd112664553e81752ea8bf61bdd89d24a41/matplotlib-3.10.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:4c59af3e8aca75d7744b68e8e78a669e91ccbcf1ac35d0102a7b1b46883f1dd7", size = 9408896 }, + { url = "https://files.pythonhosted.org/packages/d7/68/0d03098b3feb786cbd494df0aac15b571effda7f7cbdec267e8a8d398c16/matplotlib-3.10.1-cp311-cp311-win_amd64.whl", hash = "sha256:11b65088c6f3dae784bc72e8d039a2580186285f87448babb9ddb2ad0082993a", size = 8061281 }, + { url = "https://files.pythonhosted.org/packages/7c/1d/5e0dc3b59c034e43de16f94deb68f4ad8a96b3ea00f4b37c160b7474928e/matplotlib-3.10.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:66e907a06e68cb6cfd652c193311d61a12b54f56809cafbed9736ce5ad92f107", size = 8175488 }, + { url = "https://files.pythonhosted.org/packages/7a/81/dae7e14042e74da658c3336ab9799128e09a1ee03964f2d89630b5d12106/matplotlib-3.10.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:e9b4bb156abb8fa5e5b2b460196f7db7264fc6d62678c03457979e7d5254b7be", size = 8046264 }, + { url = "https://files.pythonhosted.org/packages/21/c4/22516775dcde10fc9c9571d155f90710761b028fc44f660508106c363c97/matplotlib-3.10.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1985ad3d97f51307a2cbfc801a930f120def19ba22864182dacef55277102ba6", size = 8452048 }, + { url = "https://files.pythonhosted.org/packages/63/23/c0615001f67ce7c96b3051d856baedc0c818a2ed84570b9bf9bde200f85d/matplotlib-3.10.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c96f2c2f825d1257e437a1482c5a2cf4fee15db4261bd6fc0750f81ba2b4ba3d", size = 8597111 }, + { url = "https://files.pythonhosted.org/packages/ca/c0/a07939a82aed77770514348f4568177d7dadab9787ebc618a616fe3d665e/matplotlib-3.10.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:35e87384ee9e488d8dd5a2dd7baf471178d38b90618d8ea147aced4ab59c9bea", size = 9402771 }, + { url = "https://files.pythonhosted.org/packages/a6/b6/a9405484fb40746fdc6ae4502b16a9d6e53282ba5baaf9ebe2da579f68c4/matplotlib-3.10.1-cp312-cp312-win_amd64.whl", hash = "sha256:cfd414bce89cc78a7e1d25202e979b3f1af799e416010a20ab2b5ebb3a02425c", size = 8063742 }, + { url = "https://files.pythonhosted.org/packages/60/73/6770ff5e5523d00f3bc584acb6031e29ee5c8adc2336b16cd1d003675fe0/matplotlib-3.10.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:c42eee41e1b60fd83ee3292ed83a97a5f2a8239b10c26715d8a6172226988d7b", size = 8176112 }, + { url = "https://files.pythonhosted.org/packages/08/97/b0ca5da0ed54a3f6599c3ab568bdda65269bc27c21a2c97868c1625e4554/matplotlib-3.10.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:4f0647b17b667ae745c13721602b540f7aadb2a32c5b96e924cd4fea5dcb90f1", size = 8046931 }, + { url = "https://files.pythonhosted.org/packages/df/9a/1acbdc3b165d4ce2dcd2b1a6d4ffb46a7220ceee960c922c3d50d8514067/matplotlib-3.10.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:aa3854b5f9473564ef40a41bc922be978fab217776e9ae1545c9b3a5cf2092a3", size = 8453422 }, + { url = "https://files.pythonhosted.org/packages/51/d0/2bc4368abf766203e548dc7ab57cf7e9c621f1a3c72b516cc7715347b179/matplotlib-3.10.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7e496c01441be4c7d5f96d4e40f7fca06e20dcb40e44c8daa2e740e1757ad9e6", size = 8596819 }, + { url = "https://files.pythonhosted.org/packages/ab/1b/8b350f8a1746c37ab69dda7d7528d1fc696efb06db6ade9727b7887be16d/matplotlib-3.10.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:5d45d3f5245be5b469843450617dcad9af75ca50568acf59997bed9311131a0b", size = 9402782 }, + { url = "https://files.pythonhosted.org/packages/89/06/f570373d24d93503988ba8d04f213a372fa1ce48381c5eb15da985728498/matplotlib-3.10.1-cp313-cp313-win_amd64.whl", hash = "sha256:8e8e25b1209161d20dfe93037c8a7f7ca796ec9aa326e6e4588d8c4a5dd1e473", size = 8063812 }, + { url = "https://files.pythonhosted.org/packages/fc/e0/8c811a925b5a7ad75135f0e5af46408b78af88bbb02a1df775100ef9bfef/matplotlib-3.10.1-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:19b06241ad89c3ae9469e07d77efa87041eac65d78df4fcf9cac318028009b01", size = 8214021 }, + { url = "https://files.pythonhosted.org/packages/4a/34/319ec2139f68ba26da9d00fce2ff9f27679fb799a6c8e7358539801fd629/matplotlib-3.10.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:01e63101ebb3014e6e9f80d9cf9ee361a8599ddca2c3e166c563628b39305dbb", size = 8090782 }, + { url = "https://files.pythonhosted.org/packages/77/ea/9812124ab9a99df5b2eec1110e9b2edc0b8f77039abf4c56e0a376e84a29/matplotlib-3.10.1-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3f06bad951eea6422ac4e8bdebcf3a70c59ea0a03338c5d2b109f57b64eb3972", size = 8478901 }, + { url = "https://files.pythonhosted.org/packages/c9/db/b05bf463689134789b06dea85828f8ebe506fa1e37593f723b65b86c9582/matplotlib-3.10.1-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a3dfb036f34873b46978f55e240cff7a239f6c4409eac62d8145bad3fc6ba5a3", size = 8613864 }, + { url = "https://files.pythonhosted.org/packages/c2/04/41ccec4409f3023a7576df3b5c025f1a8c8b81fbfe922ecfd837ac36e081/matplotlib-3.10.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:dc6ab14a7ab3b4d813b88ba957fc05c79493a037f54e246162033591e770de6f", size = 9409487 }, + { url = "https://files.pythonhosted.org/packages/ac/c2/0d5aae823bdcc42cc99327ecdd4d28585e15ccd5218c453b7bcd827f3421/matplotlib-3.10.1-cp313-cp313t-win_amd64.whl", hash = "sha256:bc411ebd5889a78dabbc457b3fa153203e22248bfa6eedc6797be5df0164dbf9", size = 8134832 }, + { url = "https://files.pythonhosted.org/packages/c8/f6/10adb696d8cbeed2ab4c2e26ecf1c80dd3847bbf3891f4a0c362e0e08a5a/matplotlib-3.10.1-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:648406f1899f9a818cef8c0231b44dcfc4ff36f167101c3fd1c9151f24220fdc", size = 8158685 }, + { url = "https://files.pythonhosted.org/packages/3f/84/0603d917406072763e7f9bb37747d3d74d7ecd4b943a8c947cc3ae1cf7af/matplotlib-3.10.1-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:02582304e352f40520727984a5a18f37e8187861f954fea9be7ef06569cf85b4", size = 8035491 }, + { url = "https://files.pythonhosted.org/packages/fd/7d/6a8b31dd07ed856b3eae001c9129670ef75c4698fa1c2a6ac9f00a4a7054/matplotlib-3.10.1-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d3809916157ba871bcdd33d3493acd7fe3037db5daa917ca6e77975a94cef779", size = 8590087 }, +] + [[package]] name = "networkx" version = "3.1" @@ -793,6 +1513,32 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/51/89/278ac94f86b6850f0ccee99839103375b665ccf99cb5085515deed4ab2d6/pyerfa-2.0.1.5-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:171ce9676a448a7eb555f03aa19ad5c749dbced1ce4f9923e4d93443c4a9c612", size = 349515 }, ] +[[package]] +name = "pyparsing" +version = "3.1.4" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version < '3.9'", +] +sdist = { url = "https://files.pythonhosted.org/packages/83/08/13f3bce01b2061f2bbd582c9df82723de943784cf719a35ac886c652043a/pyparsing-3.1.4.tar.gz", hash = "sha256:f86ec8d1a83f11977c9a6ea7598e8c27fc5cddfa5b07ea2241edbbde1d7bc032", size = 900231 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e5/0c/0e3c05b1c87bb6a1c76d281b0f35e78d2d80ac91b5f8f524cebf77f51049/pyparsing-3.1.4-py3-none-any.whl", hash = "sha256:a6a7ee4235a3f944aa1fa2249307708f893fe5717dc603503c6c7969c070fb7c", size = 104100 }, +] + +[[package]] +name = "pyparsing" +version = "3.2.3" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.11'", + "python_full_version == '3.10.*'", + "python_full_version == '3.9.*'", +] +sdist = { url = "https://files.pythonhosted.org/packages/bb/22/f1129e69d94ffff626bdb5c835506b3a5b4f3d070f17ea295e12c2c6f60f/pyparsing-3.2.3.tar.gz", hash = "sha256:b9c13f1ab8b3b542f72e28f634bad4de758ab3ce4546e4301970ad6fa77c38be", size = 1088608 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/05/e7/df2285f3d08fee213f2d041540fa4fc9ca6c2d44cf36d3a035bf2a8d2bcc/pyparsing-3.2.3-py3-none-any.whl", hash = "sha256:a749938e02d6fd0b59b356ca504a24982314bb090c383e3cf201c95ef7e2bfcf", size = 111120 }, +] + [[package]] name = "pytest" version = "8.3.5" @@ -810,6 +1556,18 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/30/3d/64ad57c803f1fa1e963a7946b6e0fea4a70df53c1a7fed304586539c2bac/pytest-8.3.5-py3-none-any.whl", hash = "sha256:c69214aa47deac29fad6c2a4f590b9c4a9fdb16a403176fe154b79c0b4d4d820", size = 343634 }, ] +[[package]] +name = "python-dateutil" +version = "2.9.0.post0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "six" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/66/c0/0c8b6ad9f17a802ee498c46e004a0eb49bc148f2fd230864601a86dcf6db/python-dateutil-2.9.0.post0.tar.gz", hash = "sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3", size = 342432 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ec/57/56b9bcc3c9c6a792fcbaf139543cee77261f3651ca9da0c93f5c1221264b/python_dateutil-2.9.0.post0-py2.py3-none-any.whl", hash = "sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427", size = 229892 }, +] + [[package]] name = "pywavelets" version = "1.4.1" @@ -1163,6 +1921,15 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/0a/c8/b3f566db71461cabd4b2d5b39bcc24a7e1c119535c8361f81426be39bb47/scipy-1.15.2-cp313-cp313t-win_amd64.whl", hash = "sha256:fe8a9eb875d430d81755472c5ba75e84acc980e4a8f6204d402849234d3017db", size = 40477705 }, ] +[[package]] +name = "six" +version = "1.17.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/94/e7/b2c673351809dca68a0e064b6af791aa332cf192da575fd474ed7d6f16a2/six-1.17.0.tar.gz", hash = "sha256:ff70335d468e7eb6ec65b95b99d3a2836546063f63acc5171de367e834932a81", size = 34031 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b7/ce/149a00dd41f10bc29e5921b496af8b574d8413afcd5e30dfa0ed46c2cc5e/six-1.17.0-py2.py3-none-any.whl", hash = "sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274", size = 11050 }, +] + [[package]] name = "tifffile" version = "2023.7.10" @@ -1247,3 +2014,39 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/c7/32/b0963458706accd9afcfeb867c0f9175a741bf7b19cd424230714d722198/tomli-2.2.1-cp313-cp313-win_amd64.whl", hash = "sha256:a38aa0308e754b0e3c67e344754dff64999ff9b513e691d0e786265c93583c69", size = 109383 }, { url = "https://files.pythonhosted.org/packages/6e/c2/61d3e0f47e2b74ef40a68b9e6ad5984f6241a942f7cd3bbfbdbd03861ea9/tomli-2.2.1-py3-none-any.whl", hash = "sha256:cb55c73c5f4408779d0cf3eef9f762b9c9f147a77de7b258bef0a5628adc85cc", size = 14257 }, ] + +[[package]] +name = "tqdm" +version = "4.67.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "colorama", marker = "sys_platform == 'win32'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/a8/4b/29b4ef32e036bb34e4ab51796dd745cdba7ed47ad142a9f4a1eb8e0c744d/tqdm-4.67.1.tar.gz", hash = "sha256:f8aef9c52c08c13a65f30ea34f4e5aac3fd1a34959879d7e59e63027286627f2", size = 169737 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d0/30/dc54f88dd4a2b5dc8a0279bdd7270e735851848b762aeb1c1184ed1f6b14/tqdm-4.67.1-py3-none-any.whl", hash = "sha256:26445eca388f82e72884e0d580d5464cd801a3ea01e63e5601bdff9ba6a48de2", size = 78540 }, +] + +[[package]] +name = "zipp" +version = "3.20.2" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version < '3.9'", +] +sdist = { url = "https://files.pythonhosted.org/packages/54/bf/5c0000c44ebc80123ecbdddba1f5dcd94a5ada602a9c225d84b5aaa55e86/zipp-3.20.2.tar.gz", hash = "sha256:bc9eb26f4506fda01b81bcde0ca78103b6e62f991b381fec825435c836edbc29", size = 24199 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/62/8b/5ba542fa83c90e09eac972fc9baca7a88e7e7ca4b221a89251954019308b/zipp-3.20.2-py3-none-any.whl", hash = "sha256:a817ac80d6cf4b23bf7f2828b7cabf326f15a001bea8b1f9b49631780ba28350", size = 9200 }, +] + +[[package]] +name = "zipp" +version = "3.21.0" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version == '3.9.*'", +] +sdist = { url = "https://files.pythonhosted.org/packages/3f/50/bad581df71744867e9468ebd0bcd6505de3b275e06f202c2cb016e3ff56f/zipp-3.21.0.tar.gz", hash = "sha256:2c9958f6430a2040341a52eb608ed6dd93ef4392e02ffe219417c1b28b5dd1f4", size = 24545 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b7/1a/7e4798e9339adc931158c9d69ecc34f5e6791489d469f5e50ec15e35f458/zipp-3.21.0-py3-none-any.whl", hash = "sha256:ac1bbe05fd2991f160ebce24ffbac5f6d11d83dc90891255885223d42b3cd931", size = 9630 }, +] -- GitLab